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
@@ -4,6 +4,7 @@ import { IonIcon } from '@ionic/angular/standalone';
4
4
  import { addIcons } from 'ionicons';
5
5
  import { alarmOutline, chatboxEllipsesOutline, chatbubbleOutline, checkmarkCircleOutline, checkmarkDoneOutline, cloudOfflineOutline, cogOutline, documentTextOutline, notificationsOffOutline, notificationsOutline, chevronForwardOutline, personOutline, } from 'ionicons/icons';
6
6
  import { ButtonComponent } from '../../atoms/button/button.component';
7
+ import { ContainerComponent } from '../../atoms/container/container.component';
7
8
  import { DisplayComponent } from '../../atoms/display/display.component';
8
9
  import { TextComponent } from '../../atoms/text/text.component';
9
10
  import { TitleComponent } from '../../atoms/title/title.component';
@@ -481,151 +482,153 @@ export class NotificationsViewComponent {
481
482
  }
482
483
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NotificationsViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
483
484
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: NotificationsViewComponent, isStandalone: true, selector: "val-notifications-view", inputs: { config: "config" }, ngImport: i0, template: `
484
- <div class="page">
485
- <header class="page-header">
486
- <val-display [props]="{ size: 'small', color: 'dark', content: pageTitle() }" />
487
- <val-title
488
- [props]="{
489
- size: 'large',
490
- color: 'dark',
491
- bold: false,
492
- content: pageDescription(),
493
- }"
494
- />
495
- @if (showMarkAll()) {
496
- <div class="row-actions">
497
- <val-button [props]="markAllButtonProps()" (click)="onMarkAll()" />
498
- </div>
499
- }
500
- </header>
501
-
502
- @if (resolvedConfig().showPushOffCta && !pushEnabled()) {
503
- <section class="notif-cta">
504
- <ion-icon class="notif-cta__icon" name="notifications-off-outline" aria-hidden="true" />
505
- <div class="notif-cta__body">
506
- <val-text
507
- [props]="{
508
- content: ctaTitle(),
509
- size: 'medium',
510
- color: 'dark',
511
- bold: true,
512
- }"
513
- />
514
- <val-text
515
- [props]="{
516
- content: ctaHint(),
517
- size: 'small',
518
- color: 'medium',
519
- bold: false,
520
- }"
521
- />
485
+ <val-container [props]="{ size: 'md', padding: 'none' }">
486
+ <div class="page">
487
+ <header class="page-header">
488
+ <val-display [props]="{ size: 'small', color: 'dark', content: pageTitle() }" />
489
+ <val-title
490
+ [props]="{
491
+ size: 'large',
492
+ color: 'dark',
493
+ bold: false,
494
+ content: pageDescription(),
495
+ }"
496
+ />
497
+ @if (showMarkAll()) {
522
498
  <div class="row-actions">
523
- <val-button [props]="ctaButtonProps()" (click)="onGoToSettings()" />
499
+ <val-button [props]="markAllButtonProps()" (click)="onMarkAll()" />
524
500
  </div>
525
- </div>
526
- </section>
527
- }
501
+ }
502
+ </header>
528
503
 
529
- @if (loading()) {
530
- <val-skeleton-layout [props]="{ preset: 'list', rows: 6 }" />
531
- } @else if (errorState()) {
532
- <val-empty-state [props]="errorState()!" />
533
- } @else if (allNotifs().length === 0) {
534
- <val-empty-state [props]="emptyStateProps()" />
535
- } @else {
536
- @for (group of groups(); track group.key) {
537
- <section class="group">
538
- <val-title
539
- [props]="{
540
- size: 'medium',
541
- color: 'dark',
542
- bold: true,
543
- content: group.label,
544
- }"
545
- />
546
- <ul class="notif-list">
547
- @for (n of group.items; track n.id) {
548
- <li
549
- class="notif"
550
- [class.notif--unread]="!n.isRead"
551
- [class.notif--read]="n.isRead"
552
- [class.notif--actionable]="!!n.actionRoute"
553
- [attr.role]="n.actionRoute ? 'button' : null"
554
- [attr.tabindex]="n.actionRoute ? '0' : null"
555
- [attr.aria-label]="notificationAriaLabel(n)"
556
- (click)="onNotificationRowClick(n)"
557
- (keydown.enter)="onNotificationKeydown($event, n)"
558
- (keydown.space)="onNotificationKeydown($event, n)"
559
- >
560
- <div class="notif__icon">
561
- @switch (resolveIcon(n).kind) {
562
- @case ('ionicon') {
563
- <ion-icon
564
- [name]="ioniconName(n)"
565
- [style.color]="ionColor(ioniconColor(n))"
566
- aria-hidden="true"
567
- />
568
- }
569
- @case ('image') {
570
- <img [src]="imageSrc(n)" alt="" loading="lazy" />
571
- }
572
- @case ('avatar') {
573
- <img class="notif__avatar" [src]="imageSrc(n)" alt="" loading="lazy" />
574
- }
575
- }
576
- </div>
504
+ @if (resolvedConfig().showPushOffCta && !pushEnabled()) {
505
+ <section class="notif-cta">
506
+ <ion-icon class="notif-cta__icon" name="notifications-off-outline" aria-hidden="true" />
507
+ <div class="notif-cta__body">
508
+ <val-text
509
+ [props]="{
510
+ content: ctaTitle(),
511
+ size: 'medium',
512
+ color: 'dark',
513
+ bold: true,
514
+ }"
515
+ />
516
+ <val-text
517
+ [props]="{
518
+ content: ctaHint(),
519
+ size: 'small',
520
+ color: 'medium',
521
+ bold: false,
522
+ }"
523
+ />
524
+ <div class="row-actions">
525
+ <val-button [props]="ctaButtonProps()" (click)="onGoToSettings()" />
526
+ </div>
527
+ </div>
528
+ </section>
529
+ }
577
530
 
578
- <div class="notif__body">
579
- <div class="notif__head">
580
- <div class="notif__title-row">
581
- @if (!n.isRead) {
582
- <span class="notif__unread-dot" [attr.aria-label]="unreadLabel()"></span>
531
+ @if (loading()) {
532
+ <val-skeleton-layout [props]="{ preset: 'list', rows: 6 }" />
533
+ } @else if (errorState()) {
534
+ <val-empty-state [props]="errorState()!" />
535
+ } @else if (allNotifs().length === 0) {
536
+ <val-empty-state [props]="emptyStateProps()" />
537
+ } @else {
538
+ @for (group of groups(); track group.key) {
539
+ <section class="group">
540
+ <val-title
541
+ [props]="{
542
+ size: 'medium',
543
+ color: 'dark',
544
+ bold: true,
545
+ content: group.label,
546
+ }"
547
+ />
548
+ <ul class="notif-list">
549
+ @for (n of group.items; track n.id) {
550
+ <li
551
+ class="notif"
552
+ [class.notif--unread]="!n.isRead"
553
+ [class.notif--read]="n.isRead"
554
+ [class.notif--actionable]="!!n.actionRoute"
555
+ [attr.role]="n.actionRoute ? 'button' : null"
556
+ [attr.tabindex]="n.actionRoute ? '0' : null"
557
+ [attr.aria-label]="notificationAriaLabel(n)"
558
+ (click)="onNotificationRowClick(n)"
559
+ (keydown.enter)="onNotificationKeydown($event, n)"
560
+ (keydown.space)="onNotificationKeydown($event, n)"
561
+ >
562
+ <div class="notif__icon">
563
+ @switch (resolveIcon(n).kind) {
564
+ @case ('ionicon') {
565
+ <ion-icon
566
+ [name]="ioniconName(n)"
567
+ [style.color]="ionColor(ioniconColor(n))"
568
+ aria-hidden="true"
569
+ />
583
570
  }
584
- <val-text
585
- class="notif__title"
586
- [props]="{
587
- content: n.title || '',
588
- size: 'medium',
589
- color: 'dark',
590
- bold: !n.isRead,
591
- }"
592
- />
593
- @if (!n.isRead) {
594
- <span class="notif__unread-badge">{{ unreadLabel() }}</span>
571
+ @case ('image') {
572
+ <img [src]="imageSrc(n)" alt="" loading="lazy" />
573
+ }
574
+ @case ('avatar') {
575
+ <img class="notif__avatar" [src]="imageSrc(n)" alt="" loading="lazy" />
595
576
  }
596
- </div>
597
- <span class="notif__time">{{ relativeTime(n) }}</span>
598
- </div>
599
- @if (n.body) {
600
- <p class="notif__text" [class.notif__text--clamped]="!isExpanded(n.id) && isLong(n.body)">
601
- {{ n.body }}
602
- </p>
603
- @if (isLong(n.body)) {
604
- <button class="notif__expand" type="button" (click)="onToggleExpand($event, n.id)">
605
- {{ isExpanded(n.id) ? seeLess() : seeMore() }}
606
- </button>
607
577
  }
608
- }
609
- @if (n.actionRoute) {
610
- <div class="notif__action">
611
- <val-button [props]="openButtonProps()" (click)="onOpenButtonClick($event, n)" />
578
+ </div>
579
+
580
+ <div class="notif__body">
581
+ <div class="notif__head">
582
+ <div class="notif__title-row">
583
+ @if (!n.isRead) {
584
+ <span class="notif__unread-dot" [attr.aria-label]="unreadLabel()"></span>
585
+ }
586
+ <val-text
587
+ class="notif__title"
588
+ [props]="{
589
+ content: n.title || '—',
590
+ size: 'medium',
591
+ color: 'dark',
592
+ bold: !n.isRead,
593
+ }"
594
+ />
595
+ @if (!n.isRead) {
596
+ <span class="notif__unread-badge">{{ unreadLabel() }}</span>
597
+ }
598
+ </div>
599
+ <span class="notif__time">{{ relativeTime(n) }}</span>
612
600
  </div>
613
- }
614
- </div>
615
- </li>
616
- }
617
- </ul>
618
- </section>
619
- }
601
+ @if (n.body) {
602
+ <p class="notif__text" [class.notif__text--clamped]="!isExpanded(n.id) && isLong(n.body)">
603
+ {{ n.body }}
604
+ </p>
605
+ @if (isLong(n.body)) {
606
+ <button class="notif__expand" type="button" (click)="onToggleExpand($event, n.id)">
607
+ {{ isExpanded(n.id) ? seeLess() : seeMore() }}
608
+ </button>
609
+ }
610
+ }
611
+ @if (n.actionRoute) {
612
+ <div class="notif__action">
613
+ <val-button [props]="openButtonProps()" (click)="onOpenButtonClick($event, n)" />
614
+ </div>
615
+ }
616
+ </div>
617
+ </li>
618
+ }
619
+ </ul>
620
+ </section>
621
+ }
620
622
 
621
- @if (hasMore()) {
622
- <div class="row-actions row-actions--center">
623
- <val-button [props]="loadMoreButtonProps()" (click)="onLoadMore()" />
624
- </div>
623
+ @if (hasMore()) {
624
+ <div class="row-actions row-actions--center">
625
+ <val-button [props]="loadMoreButtonProps()" (click)="onLoadMore()" />
626
+ </div>
627
+ }
625
628
  }
626
- }
627
- </div>
628
- `, 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}.row-actions{margin-top:12px}.row-actions--center{display:flex;justify-content:center;margin-top:20px}.row-actions--end{display:flex;justify-content:flex-end;margin-top:8px}.notif-cta{display:flex;gap:12px;align-items:flex-start;padding:14px 16px;margin-bottom:16px;border:1px solid var(--ion-color-light-shade, rgba(0, 0, 0, .08));border-radius:14px;background:var(--ion-color-light)}.notif-cta__icon{font-size:24px;color:var(--ion-color-dark, #1a1a1a);flex-shrink:0;margin-top:2px}.notif-cta__body{display:flex;flex-direction:column;gap:2px}.group{padding:12px 0}.group+.group{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.notif-list{list-style:none;padding:0;margin:12px 0 0;display:flex;flex-direction:column;gap:10px}.notif{position:relative;display:grid;grid-template-columns:44px 1fr;gap:12px;padding:14px 12px;border-radius:12px;background:transparent;border:1px solid transparent;transition:background .14s ease,border-color .14s ease,box-shadow .14s ease}.notif--actionable{cursor:pointer}.notif--actionable:hover,.notif--actionable:focus-visible{background:var(--ion-color-light, rgba(0, 0, 0, .04));border-color:var(--val-border-color, rgba(0, 0, 0, .08));outline:none}.notif--unread{background:rgba(var(--ion-color-primary-rgb, 56, 128, 255),.07);border-color:rgba(var(--ion-color-primary-rgb, 56, 128, 255),.18)}.notif--read .notif__icon{opacity:.72}.notif__icon{width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--ion-color-light, rgba(0, 0, 0, .06));overflow:hidden}.notif__icon ion-icon{font-size:22px}.notif__icon img{width:100%;height:100%;object-fit:cover}.notif__avatar{border-radius:50%}.notif__body{display:flex;flex-direction:column;gap:4px;min-width:0}.notif__head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.notif__title-row{display:flex;align-items:center;gap:8px;min-width:0}.notif__title{min-width:0}.notif__unread-dot{width:8px;height:8px;border-radius:999px;flex:0 0 auto;background:var(--ion-color-primary, #3880ff)}.notif__unread-badge{flex:0 0 auto;padding:2px 7px;border-radius:999px;font-size:10px;font-weight:700;line-height:1.35;color:var(--ion-color-primary-contrast, #fff);background:var(--ion-color-primary, #3880ff)}.notif__time{font-size:12px;color:var(--ion-color-medium, #92949c);flex-shrink:0}.notif__text{margin:0;font-size:14px;line-height:1.4;color:var(--ion-color-dark, #1a1a1a);white-space:pre-wrap}.notif__text--clamped{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.notif__expand{background:none;border:0;padding:0;font-size:13px;color:var(--ion-color-dark, #1a1a1a);cursor:pointer;align-self:flex-start;text-decoration:underline}.notif__action{align-self:flex-end;margin-top:4px}@media (max-width: 520px){.notif{grid-template-columns:40px 1fr;gap:10px;padding:12px 10px}.notif__icon{width:40px;height:40px}.notif__head{align-items:flex-start;flex-direction:column;gap:4px}.notif__unread-badge{display:none}.notif__time{align-self:flex-start}}\n"], dependencies: [{ kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: SkeletonLayoutComponent, selector: "val-skeleton-layout", inputs: ["props"] }, { kind: "component", type: EmptyStateComponent, selector: "val-empty-state", inputs: ["props"] }] }); }
629
+ </div>
630
+ </val-container>
631
+ `, isInline: true, styles: [".page{padding:16px 0}.page-header{margin-bottom:16px}.row-actions{margin-top:12px}.row-actions--center{display:flex;justify-content:center;margin-top:20px}.row-actions--end{display:flex;justify-content:flex-end;margin-top:8px}.notif-cta{display:flex;gap:12px;align-items:flex-start;padding:14px 16px;margin-bottom:16px;border:1px solid var(--ion-color-light-shade, rgba(0, 0, 0, .08));border-radius:14px;background:var(--ion-color-light)}.notif-cta__icon{font-size:24px;color:var(--ion-color-dark, #1a1a1a);flex-shrink:0;margin-top:2px}.notif-cta__body{display:flex;flex-direction:column;gap:2px}.group{padding:12px 0}.group+.group{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.notif-list{list-style:none;padding:0;margin:12px 0 0;display:flex;flex-direction:column;gap:10px}.notif{position:relative;display:grid;grid-template-columns:44px 1fr;gap:12px;padding:14px 12px;border-radius:12px;background:transparent;border:1px solid transparent;transition:background .14s ease,border-color .14s ease,box-shadow .14s ease}.notif--actionable{cursor:pointer}.notif--actionable:hover,.notif--actionable:focus-visible{background:var(--ion-color-light, rgba(0, 0, 0, .04));border-color:var(--val-border-color, rgba(0, 0, 0, .08));outline:none}.notif--unread{background:rgba(var(--ion-color-primary-rgb, 56, 128, 255),.07);border-color:rgba(var(--ion-color-primary-rgb, 56, 128, 255),.18)}.notif--read .notif__icon{opacity:.72}.notif__icon{width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--ion-color-light, rgba(0, 0, 0, .06));overflow:hidden}.notif__icon ion-icon{font-size:22px}.notif__icon img{width:100%;height:100%;object-fit:cover}.notif__avatar{border-radius:50%}.notif__body{display:flex;flex-direction:column;gap:4px;min-width:0}.notif__head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.notif__title-row{display:flex;align-items:center;gap:8px;min-width:0}.notif__title{min-width:0}.notif__unread-dot{width:8px;height:8px;border-radius:999px;flex:0 0 auto;background:var(--ion-color-primary, #3880ff)}.notif__unread-badge{flex:0 0 auto;padding:2px 7px;border-radius:999px;font-size:10px;font-weight:700;line-height:1.35;color:var(--ion-color-primary-contrast, #fff);background:var(--ion-color-primary, #3880ff)}.notif__time{font-size:12px;color:var(--ion-color-medium, #92949c);flex-shrink:0}.notif__text{margin:0;font-size:14px;line-height:1.4;color:var(--ion-color-dark, #1a1a1a);white-space:pre-wrap}.notif__text--clamped{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.notif__expand{background:none;border:0;padding:0;font-size:13px;color:var(--ion-color-dark, #1a1a1a);cursor:pointer;align-self:flex-start;text-decoration:underline}.notif__action{align-self:flex-end;margin-top:4px}@media (max-width: 520px){.notif{grid-template-columns:40px 1fr;gap:10px;padding:12px 10px}.notif__icon{width:40px;height:40px}.notif__head{align-items:flex-start;flex-direction:column;gap:4px}.notif__unread-badge{display:none}.notif__time{align-self:flex-start}}\n"], dependencies: [{ kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: SkeletonLayoutComponent, selector: "val-skeleton-layout", inputs: ["props"] }, { kind: "component", type: EmptyStateComponent, selector: "val-empty-state", inputs: ["props"] }, { kind: "component", type: ContainerComponent, selector: "val-container", inputs: ["props"] }] }); }
629
632
  }
630
633
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NotificationsViewComponent, decorators: [{
631
634
  type: Component,
@@ -637,153 +640,156 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
637
640
  ButtonComponent,
638
641
  SkeletonLayoutComponent,
639
642
  EmptyStateComponent,
643
+ ContainerComponent,
640
644
  ], template: `
641
- <div class="page">
642
- <header class="page-header">
643
- <val-display [props]="{ size: 'small', color: 'dark', content: pageTitle() }" />
644
- <val-title
645
- [props]="{
646
- size: 'large',
647
- color: 'dark',
648
- bold: false,
649
- content: pageDescription(),
650
- }"
651
- />
652
- @if (showMarkAll()) {
653
- <div class="row-actions">
654
- <val-button [props]="markAllButtonProps()" (click)="onMarkAll()" />
655
- </div>
656
- }
657
- </header>
658
-
659
- @if (resolvedConfig().showPushOffCta && !pushEnabled()) {
660
- <section class="notif-cta">
661
- <ion-icon class="notif-cta__icon" name="notifications-off-outline" aria-hidden="true" />
662
- <div class="notif-cta__body">
663
- <val-text
664
- [props]="{
665
- content: ctaTitle(),
666
- size: 'medium',
667
- color: 'dark',
668
- bold: true,
669
- }"
670
- />
671
- <val-text
672
- [props]="{
673
- content: ctaHint(),
674
- size: 'small',
675
- color: 'medium',
676
- bold: false,
677
- }"
678
- />
645
+ <val-container [props]="{ size: 'md', padding: 'none' }">
646
+ <div class="page">
647
+ <header class="page-header">
648
+ <val-display [props]="{ size: 'small', color: 'dark', content: pageTitle() }" />
649
+ <val-title
650
+ [props]="{
651
+ size: 'large',
652
+ color: 'dark',
653
+ bold: false,
654
+ content: pageDescription(),
655
+ }"
656
+ />
657
+ @if (showMarkAll()) {
679
658
  <div class="row-actions">
680
- <val-button [props]="ctaButtonProps()" (click)="onGoToSettings()" />
659
+ <val-button [props]="markAllButtonProps()" (click)="onMarkAll()" />
681
660
  </div>
682
- </div>
683
- </section>
684
- }
661
+ }
662
+ </header>
685
663
 
686
- @if (loading()) {
687
- <val-skeleton-layout [props]="{ preset: 'list', rows: 6 }" />
688
- } @else if (errorState()) {
689
- <val-empty-state [props]="errorState()!" />
690
- } @else if (allNotifs().length === 0) {
691
- <val-empty-state [props]="emptyStateProps()" />
692
- } @else {
693
- @for (group of groups(); track group.key) {
694
- <section class="group">
695
- <val-title
696
- [props]="{
697
- size: 'medium',
698
- color: 'dark',
699
- bold: true,
700
- content: group.label,
701
- }"
702
- />
703
- <ul class="notif-list">
704
- @for (n of group.items; track n.id) {
705
- <li
706
- class="notif"
707
- [class.notif--unread]="!n.isRead"
708
- [class.notif--read]="n.isRead"
709
- [class.notif--actionable]="!!n.actionRoute"
710
- [attr.role]="n.actionRoute ? 'button' : null"
711
- [attr.tabindex]="n.actionRoute ? '0' : null"
712
- [attr.aria-label]="notificationAriaLabel(n)"
713
- (click)="onNotificationRowClick(n)"
714
- (keydown.enter)="onNotificationKeydown($event, n)"
715
- (keydown.space)="onNotificationKeydown($event, n)"
716
- >
717
- <div class="notif__icon">
718
- @switch (resolveIcon(n).kind) {
719
- @case ('ionicon') {
720
- <ion-icon
721
- [name]="ioniconName(n)"
722
- [style.color]="ionColor(ioniconColor(n))"
723
- aria-hidden="true"
724
- />
725
- }
726
- @case ('image') {
727
- <img [src]="imageSrc(n)" alt="" loading="lazy" />
728
- }
729
- @case ('avatar') {
730
- <img class="notif__avatar" [src]="imageSrc(n)" alt="" loading="lazy" />
731
- }
732
- }
733
- </div>
664
+ @if (resolvedConfig().showPushOffCta && !pushEnabled()) {
665
+ <section class="notif-cta">
666
+ <ion-icon class="notif-cta__icon" name="notifications-off-outline" aria-hidden="true" />
667
+ <div class="notif-cta__body">
668
+ <val-text
669
+ [props]="{
670
+ content: ctaTitle(),
671
+ size: 'medium',
672
+ color: 'dark',
673
+ bold: true,
674
+ }"
675
+ />
676
+ <val-text
677
+ [props]="{
678
+ content: ctaHint(),
679
+ size: 'small',
680
+ color: 'medium',
681
+ bold: false,
682
+ }"
683
+ />
684
+ <div class="row-actions">
685
+ <val-button [props]="ctaButtonProps()" (click)="onGoToSettings()" />
686
+ </div>
687
+ </div>
688
+ </section>
689
+ }
734
690
 
735
- <div class="notif__body">
736
- <div class="notif__head">
737
- <div class="notif__title-row">
738
- @if (!n.isRead) {
739
- <span class="notif__unread-dot" [attr.aria-label]="unreadLabel()"></span>
691
+ @if (loading()) {
692
+ <val-skeleton-layout [props]="{ preset: 'list', rows: 6 }" />
693
+ } @else if (errorState()) {
694
+ <val-empty-state [props]="errorState()!" />
695
+ } @else if (allNotifs().length === 0) {
696
+ <val-empty-state [props]="emptyStateProps()" />
697
+ } @else {
698
+ @for (group of groups(); track group.key) {
699
+ <section class="group">
700
+ <val-title
701
+ [props]="{
702
+ size: 'medium',
703
+ color: 'dark',
704
+ bold: true,
705
+ content: group.label,
706
+ }"
707
+ />
708
+ <ul class="notif-list">
709
+ @for (n of group.items; track n.id) {
710
+ <li
711
+ class="notif"
712
+ [class.notif--unread]="!n.isRead"
713
+ [class.notif--read]="n.isRead"
714
+ [class.notif--actionable]="!!n.actionRoute"
715
+ [attr.role]="n.actionRoute ? 'button' : null"
716
+ [attr.tabindex]="n.actionRoute ? '0' : null"
717
+ [attr.aria-label]="notificationAriaLabel(n)"
718
+ (click)="onNotificationRowClick(n)"
719
+ (keydown.enter)="onNotificationKeydown($event, n)"
720
+ (keydown.space)="onNotificationKeydown($event, n)"
721
+ >
722
+ <div class="notif__icon">
723
+ @switch (resolveIcon(n).kind) {
724
+ @case ('ionicon') {
725
+ <ion-icon
726
+ [name]="ioniconName(n)"
727
+ [style.color]="ionColor(ioniconColor(n))"
728
+ aria-hidden="true"
729
+ />
740
730
  }
741
- <val-text
742
- class="notif__title"
743
- [props]="{
744
- content: n.title || '',
745
- size: 'medium',
746
- color: 'dark',
747
- bold: !n.isRead,
748
- }"
749
- />
750
- @if (!n.isRead) {
751
- <span class="notif__unread-badge">{{ unreadLabel() }}</span>
731
+ @case ('image') {
732
+ <img [src]="imageSrc(n)" alt="" loading="lazy" />
733
+ }
734
+ @case ('avatar') {
735
+ <img class="notif__avatar" [src]="imageSrc(n)" alt="" loading="lazy" />
752
736
  }
753
- </div>
754
- <span class="notif__time">{{ relativeTime(n) }}</span>
755
- </div>
756
- @if (n.body) {
757
- <p class="notif__text" [class.notif__text--clamped]="!isExpanded(n.id) && isLong(n.body)">
758
- {{ n.body }}
759
- </p>
760
- @if (isLong(n.body)) {
761
- <button class="notif__expand" type="button" (click)="onToggleExpand($event, n.id)">
762
- {{ isExpanded(n.id) ? seeLess() : seeMore() }}
763
- </button>
764
737
  }
765
- }
766
- @if (n.actionRoute) {
767
- <div class="notif__action">
768
- <val-button [props]="openButtonProps()" (click)="onOpenButtonClick($event, n)" />
738
+ </div>
739
+
740
+ <div class="notif__body">
741
+ <div class="notif__head">
742
+ <div class="notif__title-row">
743
+ @if (!n.isRead) {
744
+ <span class="notif__unread-dot" [attr.aria-label]="unreadLabel()"></span>
745
+ }
746
+ <val-text
747
+ class="notif__title"
748
+ [props]="{
749
+ content: n.title || '—',
750
+ size: 'medium',
751
+ color: 'dark',
752
+ bold: !n.isRead,
753
+ }"
754
+ />
755
+ @if (!n.isRead) {
756
+ <span class="notif__unread-badge">{{ unreadLabel() }}</span>
757
+ }
758
+ </div>
759
+ <span class="notif__time">{{ relativeTime(n) }}</span>
769
760
  </div>
770
- }
771
- </div>
772
- </li>
773
- }
774
- </ul>
775
- </section>
776
- }
761
+ @if (n.body) {
762
+ <p class="notif__text" [class.notif__text--clamped]="!isExpanded(n.id) && isLong(n.body)">
763
+ {{ n.body }}
764
+ </p>
765
+ @if (isLong(n.body)) {
766
+ <button class="notif__expand" type="button" (click)="onToggleExpand($event, n.id)">
767
+ {{ isExpanded(n.id) ? seeLess() : seeMore() }}
768
+ </button>
769
+ }
770
+ }
771
+ @if (n.actionRoute) {
772
+ <div class="notif__action">
773
+ <val-button [props]="openButtonProps()" (click)="onOpenButtonClick($event, n)" />
774
+ </div>
775
+ }
776
+ </div>
777
+ </li>
778
+ }
779
+ </ul>
780
+ </section>
781
+ }
777
782
 
778
- @if (hasMore()) {
779
- <div class="row-actions row-actions--center">
780
- <val-button [props]="loadMoreButtonProps()" (click)="onLoadMore()" />
781
- </div>
783
+ @if (hasMore()) {
784
+ <div class="row-actions row-actions--center">
785
+ <val-button [props]="loadMoreButtonProps()" (click)="onLoadMore()" />
786
+ </div>
787
+ }
782
788
  }
783
- }
784
- </div>
785
- `, 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}.row-actions{margin-top:12px}.row-actions--center{display:flex;justify-content:center;margin-top:20px}.row-actions--end{display:flex;justify-content:flex-end;margin-top:8px}.notif-cta{display:flex;gap:12px;align-items:flex-start;padding:14px 16px;margin-bottom:16px;border:1px solid var(--ion-color-light-shade, rgba(0, 0, 0, .08));border-radius:14px;background:var(--ion-color-light)}.notif-cta__icon{font-size:24px;color:var(--ion-color-dark, #1a1a1a);flex-shrink:0;margin-top:2px}.notif-cta__body{display:flex;flex-direction:column;gap:2px}.group{padding:12px 0}.group+.group{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.notif-list{list-style:none;padding:0;margin:12px 0 0;display:flex;flex-direction:column;gap:10px}.notif{position:relative;display:grid;grid-template-columns:44px 1fr;gap:12px;padding:14px 12px;border-radius:12px;background:transparent;border:1px solid transparent;transition:background .14s ease,border-color .14s ease,box-shadow .14s ease}.notif--actionable{cursor:pointer}.notif--actionable:hover,.notif--actionable:focus-visible{background:var(--ion-color-light, rgba(0, 0, 0, .04));border-color:var(--val-border-color, rgba(0, 0, 0, .08));outline:none}.notif--unread{background:rgba(var(--ion-color-primary-rgb, 56, 128, 255),.07);border-color:rgba(var(--ion-color-primary-rgb, 56, 128, 255),.18)}.notif--read .notif__icon{opacity:.72}.notif__icon{width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--ion-color-light, rgba(0, 0, 0, .06));overflow:hidden}.notif__icon ion-icon{font-size:22px}.notif__icon img{width:100%;height:100%;object-fit:cover}.notif__avatar{border-radius:50%}.notif__body{display:flex;flex-direction:column;gap:4px;min-width:0}.notif__head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.notif__title-row{display:flex;align-items:center;gap:8px;min-width:0}.notif__title{min-width:0}.notif__unread-dot{width:8px;height:8px;border-radius:999px;flex:0 0 auto;background:var(--ion-color-primary, #3880ff)}.notif__unread-badge{flex:0 0 auto;padding:2px 7px;border-radius:999px;font-size:10px;font-weight:700;line-height:1.35;color:var(--ion-color-primary-contrast, #fff);background:var(--ion-color-primary, #3880ff)}.notif__time{font-size:12px;color:var(--ion-color-medium, #92949c);flex-shrink:0}.notif__text{margin:0;font-size:14px;line-height:1.4;color:var(--ion-color-dark, #1a1a1a);white-space:pre-wrap}.notif__text--clamped{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.notif__expand{background:none;border:0;padding:0;font-size:13px;color:var(--ion-color-dark, #1a1a1a);cursor:pointer;align-self:flex-start;text-decoration:underline}.notif__action{align-self:flex-end;margin-top:4px}@media (max-width: 520px){.notif{grid-template-columns:40px 1fr;gap:10px;padding:12px 10px}.notif__icon{width:40px;height:40px}.notif__head{align-items:flex-start;flex-direction:column;gap:4px}.notif__unread-badge{display:none}.notif__time{align-self:flex-start}}\n"] }]
789
+ </div>
790
+ </val-container>
791
+ `, styles: [".page{padding:16px 0}.page-header{margin-bottom:16px}.row-actions{margin-top:12px}.row-actions--center{display:flex;justify-content:center;margin-top:20px}.row-actions--end{display:flex;justify-content:flex-end;margin-top:8px}.notif-cta{display:flex;gap:12px;align-items:flex-start;padding:14px 16px;margin-bottom:16px;border:1px solid var(--ion-color-light-shade, rgba(0, 0, 0, .08));border-radius:14px;background:var(--ion-color-light)}.notif-cta__icon{font-size:24px;color:var(--ion-color-dark, #1a1a1a);flex-shrink:0;margin-top:2px}.notif-cta__body{display:flex;flex-direction:column;gap:2px}.group{padding:12px 0}.group+.group{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.notif-list{list-style:none;padding:0;margin:12px 0 0;display:flex;flex-direction:column;gap:10px}.notif{position:relative;display:grid;grid-template-columns:44px 1fr;gap:12px;padding:14px 12px;border-radius:12px;background:transparent;border:1px solid transparent;transition:background .14s ease,border-color .14s ease,box-shadow .14s ease}.notif--actionable{cursor:pointer}.notif--actionable:hover,.notif--actionable:focus-visible{background:var(--ion-color-light, rgba(0, 0, 0, .04));border-color:var(--val-border-color, rgba(0, 0, 0, .08));outline:none}.notif--unread{background:rgba(var(--ion-color-primary-rgb, 56, 128, 255),.07);border-color:rgba(var(--ion-color-primary-rgb, 56, 128, 255),.18)}.notif--read .notif__icon{opacity:.72}.notif__icon{width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--ion-color-light, rgba(0, 0, 0, .06));overflow:hidden}.notif__icon ion-icon{font-size:22px}.notif__icon img{width:100%;height:100%;object-fit:cover}.notif__avatar{border-radius:50%}.notif__body{display:flex;flex-direction:column;gap:4px;min-width:0}.notif__head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.notif__title-row{display:flex;align-items:center;gap:8px;min-width:0}.notif__title{min-width:0}.notif__unread-dot{width:8px;height:8px;border-radius:999px;flex:0 0 auto;background:var(--ion-color-primary, #3880ff)}.notif__unread-badge{flex:0 0 auto;padding:2px 7px;border-radius:999px;font-size:10px;font-weight:700;line-height:1.35;color:var(--ion-color-primary-contrast, #fff);background:var(--ion-color-primary, #3880ff)}.notif__time{font-size:12px;color:var(--ion-color-medium, #92949c);flex-shrink:0}.notif__text{margin:0;font-size:14px;line-height:1.4;color:var(--ion-color-dark, #1a1a1a);white-space:pre-wrap}.notif__text--clamped{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.notif__expand{background:none;border:0;padding:0;font-size:13px;color:var(--ion-color-dark, #1a1a1a);cursor:pointer;align-self:flex-start;text-decoration:underline}.notif__action{align-self:flex-end;margin-top:4px}@media (max-width: 520px){.notif{grid-template-columns:40px 1fr;gap:10px;padding:12px 10px}.notif__icon{width:40px;height:40px}.notif__head{align-items:flex-start;flex-direction:column;gap:4px}.notif__unread-badge{display:none}.notif__time{align-self:flex-start}}\n"] }]
786
792
  }], ctorParameters: () => [], propDecorators: { config: [{
787
793
  type: Input
788
794
  }] } });
789
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9ucy12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvbm90aWZpY2F0aW9ucy12aWV3L25vdGlmaWNhdGlvbnMtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUNMLFlBQVksRUFDWixzQkFBc0IsRUFDdEIsaUJBQWlCLEVBQ2pCLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLFVBQVUsRUFDVixtQkFBbUIsRUFDbkIsdUJBQXVCLEVBQ3ZCLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIsYUFBYSxHQUNkLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFFeEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1B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QWlKVCxrdUdBekpDLE9BQU8sMkpBQ1AsZ0JBQWdCLDJFQUNoQixjQUFjLHlFQUNkLGFBQWEsd0VBQ2IsZUFBZSwwR0FDZix1QkFBdUIsbUZBQ3ZCLG1CQUFtQjs7NEZBOFdWLDBCQUEwQjtrQkF4WHRDLFNBQVM7K0JBQ0Usd0JBQXdCLGNBQ3RCLElBQUksV0FDUDt3QkFDUCxPQUFPO3dCQUNQLGdCQUFnQjt3QkFDaEIsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsdUJBQXVCO3dCQUN2QixtQkFBbUI7cUJBQ3BCLFlBQ1M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpSlQ7d0RBOE9RLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSW9uSWNvbiB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQge1xuICBhbGFybU91dGxpbmUsXG4gIGNoYXRib3hFbGxpcHNlc091dGxpbmUsXG4gIGNoYXRidWJibGVPdXRsaW5lLFxuICBjaGVja21hcmtDaXJjbGVPdXRsaW5lLFxuICBjaGVja21hcmtEb25lT3V0bGluZSxcbiAgY2xvdWRPZmZsaW5lT3V0bGluZSxcbiAgY29nT3V0bGluZSxcbiAgZG9jdW1lbnRUZXh0T3V0bGluZSxcbiAgbm90aWZpY2F0aW9uc09mZk91dGxpbmUsXG4gIG5vdGlmaWNhdGlvbnNPdXRsaW5lLFxuICBjaGV2cm9uRm9yd2FyZE91dGxpbmUsXG4gIHBlcnNvbk91dGxpbmUsXG59IGZyb20gJ2lvbmljb25zL2ljb25zJztcblxuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGlzcGxheUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2Rpc3BsYXkvZGlzcGxheS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGV4dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RleHQvdGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGl0bGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy90aXRsZS90aXRsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW1wdHlTdGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW1wdHlTdGF0ZU1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2VtcHR5LXN0YXRlL3R5cGVzJztcbmltcG9ydCB7IGNyZWF0ZUVycm9yU3RhdGVQcm9wcyB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9lbXB0eS1zdGF0ZS9mYWN0b3J5JztcbmltcG9ydCB7IFNrZWxldG9uTGF5b3V0Q29tcG9uZW50IH0gZnJvbSAnLi4vc2tlbGV0b24tbGF5b3V0L3NrZWxldG9uLWxheW91dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uTWV0YWRhdGEsIENvbXBvbmVudFN0YXRlcyB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25BY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aC9ub3RpZmljYXRpb24tYWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IGludGVycHJldEVycm9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZXJyb3JzL2ludGVycHJldC1lcnJvcic7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25hdmlnYXRpb24vbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkRvY3VtZW50LCBOb3RpZmljYXRpb25zU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpcmViYXNlL25vdGlmaWNhdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBQYWdlUmVmcmVzaFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wYWdlLXJlZnJlc2gvcGFnZS1yZWZyZXNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgY3JlYXRlUmVmcmVzaGFibGVTdHJlYW0gfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9yZWZyZXNoYWJsZS1zdHJlYW0vcmVmcmVzaGFibGUtc3RyZWFtJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RvYXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVmFsdGVjaEVycm9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Vycm9ycy92YWx0ZWNoLWVycm9yLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBOb3RpZmljYXRpb25zVmlld0NvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgTk9USUZJQ0FUSU9OU19WSUVXX0kxOE4gfSBmcm9tICcuL25vdGlmaWNhdGlvbnMtdmlldy5pMThuJztcblxuYWRkSWNvbnMoe1xuICBhbGFybU91dGxpbmUsXG4gIGNoYXRib3hFbGxpcHNlc091dGxpbmUsXG4gIGNoYXRidWJibGVPdXRsaW5lLFxuICBjaGVja21hcmtDaXJjbGVPdXRsaW5lLFxuICBjaGVja21hcmtEb25lT3V0bGluZSxcbiAgY2xvdWRPZmZsaW5lT3V0bGluZSxcbiAgY29nT3V0bGluZSxcbiAgZG9jdW1lbnRUZXh0T3V0bGluZSxcbiAgbm90aWZpY2F0aW9uc09mZk91dGxpbmUsXG4gIG5vdGlmaWNhdGlvbnNPdXRsaW5lLFxuICBjaGV2cm9uRm9yd2FyZE91dGxpbmUsXG4gIHBlcnNvbk91dGxpbmUsXG59KTtcblxuY29uc3QgREVGQVVMVF9OQU1FU1BBQ0UgPSAnTm90aWZpY2F0aW9ucyc7XG5jb25zdCBERUZBVUxUX1NFVFRJTkdTX1BBVEggPSAnL2FwcC9zZXR0aW5ncy9ub3RpZmljYXRpb25zJztcbmNvbnN0IERFRkFVTFRfUEFHRV9TSVpFID0gMTA7XG5jb25zdCBERUZBVUxUX01BWF9MT0FEID0gNTA7XG5cbnR5cGUgR3JvdXBLZXkgPSAndG9kYXknIHwgJ3RoaXNNb250aCcgfCAnZWFybGllcic7XG5cbmludGVyZmFjZSBOb3RpZmljYXRpb25Hcm91cCB7XG4gIGtleTogR3JvdXBLZXk7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGl0ZW1zOiBOb3RpZmljYXRpb25Eb2N1bWVudFtdO1xufVxuXG50eXBlIFJlc29sdmVkSWNvbiA9XG4gIHwgeyBraW5kOiAnaW9uaWNvbic7IG5hbWU6IHN0cmluZzsgY29sb3I/OiBzdHJpbmcgfVxuICB8IHsga2luZDogJ2ltYWdlJzsgc3JjOiBzdHJpbmcgfVxuICB8IHsga2luZDogJ2F2YXRhcic7IHNyYzogc3RyaW5nIH07XG5cbmludGVyZmFjZSBJY29uSGludCB7XG4gIHR5cGU/OiAnaW9uaWNvbicgfCAnaW1hZ2UnIHwgJ2F2YXRhcic7XG4gIHZhbHVlPzogc3RyaW5nO1xuICBjb2xvcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBgdmFsLW5vdGlmaWNhdGlvbnMtdmlld2Ag4oCUIGluYm94IGRlIG5vdGlmaWNhY2lvbmVzIGZ1bGwtZmVhdHVyZSBhdXRvY29udGVuaWRvXG4gKiAob3JnYW5pc20pLiBQcm9tb3ZpZG8gZGVzZGUgYHNob3djYXNlYCBiYWpvIGVsIHByb2Nlc28gZGUgQURSLTAyMS5cbiAqXG4gKiBTZXBhcmFkbyBkZSBgL2FwcC9zZXR0aW5ncy9ub3RpZmljYXRpb25zYCAocXVlIGNvbnRyb2xhIHBlcm1pc28gRkNNICsgbWFzdGVyXG4gKiB0b2dnbGUpLiBBcXXDrSBlbCB1c2VyIGxlZS9hYnJlL21hcmNhLWxlw61kYXMgc3VzIG1lbnNhamVzLlxuICpcbiAqIC0gKipTdHJlYW0gcmVhbC10aW1lKiogdsOtYSBgTm90aWZpY2F0aW9uc1NlcnZpY2UuZ2V0QWxsKG1heExvYWQpYCBlbnZ1ZWx0byBlblxuICogICBgY3JlYXRlUmVmcmVzaGFibGVTdHJlYW1gIChnYXRlYWRvIHBvciBgZmlyZWJhc2VBdXRoUmVhZHlgLCByZXRyeSBjb3J0byxcbiAqICAgYGZpcnN0RW1pdFRpbWVvdXRNczogMTUwMDBgKS4gRXN0YWRvczogbG9hZGluZyAoc2tlbGV0b24pLCBlcnJvclxuICogICAoYHZhbC1lbXB0eS1zdGF0ZWAgKyByZWludGVudGFyKSwgZW1wdHkgKGB2YWwtZW1wdHktc3RhdGVgICsgQ1RBKSwgZGF0YVxuICogICAobGlzdGEgYWdydXBhZGEgSG95IC8gRXN0ZSBtZXMgLyBBbnRlcmlvcmVzKS5cbiAqIC0gKipBYnJpcioqIHVuYSBub3RpZiDihpIgYE5vdGlmaWNhdGlvbkFjdGlvblNlcnZpY2Uub3BlbigpYCAobWFya1JlYWQgK1xuICogICBzd2l0Y2gtb3JnICsgbmF2ZWdhci9oYW5kb2ZmIGNyb3NzLWFwcCkuIEhvb2sgYG9uTm90aWZpY2F0aW9uT3BlbmAgb3BjaW9uYWwuXG4gKiAtICoqTWFyY2FyIHRvZGFzIGNvbW8gbGXDrWRhcyoqIChnYXRlYWRvIHBvciBgZW5hYmxlTWFya0FsbGApLlxuICogLSAqKkNUQSBwdXNoLW9mZioqIGN1YW5kbyBlbCBwZXJtaXNvIGRlbCBuYXZlZ2Fkb3Igbm8gZXN0w6EgY29uY2VkaWRvIChnYXRlYWRvXG4gKiAgIHBvciBgc2hvd1B1c2hPZmZDdGFgKTsgbmF2ZWdhIGEgYHNldHRpbmdzTm90aWZpY2F0aW9uc1BhdGhgLlxuICogLSAqKlBhZ2luYWNpw7NuIHNvZnQqKiDigJQgc2xpY2UgbG9jYWwgKGBwYWdlU2l6ZWAsICtgcGFnZVNpemVgIHBvciBjbGljaykgc29icmUgZWxcbiAqICAgY2FjaGUgZGVsIHN0cmVhbTsgZWwgdG9wZSBkZSBmZXRjaCBlcyBgbWF4TG9hZGAuXG4gKiAtICoqaTE4biBhdXRvLXJlZ2lzdHJhZG8qKiBlcy9lbiBiYWpvIGBpMThuTmFtZXNwYWNlYCAoZGVmYXVsdCBgTm90aWZpY2F0aW9uc2ApLlxuICpcbiAqIE5PIHJlbmRlcml6YSBpb24tY29udGVudCDigJQgdml2ZSBkZW50cm8gZGUgdmFsLXBhZ2Utd3JhcHBlci4gYFJvdXRlcmAgeVxuICogYEFjdGl2YXRlZFJvdXRlYCBzZSBpbnllY3RhbiBgeyBvcHRpb25hbDogdHJ1ZSB9YCDihpIgZnVuY2lvbmEgc2luIHJvdXRlclxuICogKGVtYmViaWRhIC8gU3Rvcnlib29rKS4gRWwgZm9yd2FyZC1jb21wYXQgaWNvbiByZXNvbHZlciBsZWUgYG5vdGlmLnBheWxvYWQuaWNvbmBcbiAqIHNpIGV4aXN0ZSAoYHsgdHlwZSwgdmFsdWUsIGNvbG9yPyB9YCksIGNhZSBhIHVuIG1hcGEgcG9yIGBub3RpZi50eXBlYCwgbHVlZ28gYVxuICogYG5vdGlmaWNhdGlvbnMtb3V0bGluZWAuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1ub3RpZmljYXRpb25zLXZpZXcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgSW9uSWNvbixcbiAgICBEaXNwbGF5Q29tcG9uZW50LFxuICAgIFRpdGxlQ29tcG9uZW50LFxuICAgIFRleHRDb21wb25lbnQsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIFNrZWxldG9uTGF5b3V0Q29tcG9uZW50LFxuICAgIEVtcHR5U3RhdGVDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInBhZ2VcIj5cbiAgICAgIDxoZWFkZXIgY2xhc3M9XCJwYWdlLWhlYWRlclwiPlxuICAgICAgICA8dmFsLWRpc3BsYXkgW3Byb3BzXT1cInsgc2l6ZTogJ3NtYWxsJywgY29sb3I6ICdkYXJrJywgY29udGVudDogcGFnZVRpdGxlKCkgfVwiIC8+XG4gICAgICAgIDx2YWwtdGl0bGVcbiAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgc2l6ZTogJ2xhcmdlJyxcbiAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHBhZ2VEZXNjcmlwdGlvbigpLFxuICAgICAgICAgIH1cIlxuICAgICAgICAvPlxuICAgICAgICBAaWYgKHNob3dNYXJrQWxsKCkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgIDx2YWwtYnV0dG9uIFtwcm9wc109XCJtYXJrQWxsQnV0dG9uUHJvcHMoKVwiIChjbGljayk9XCJvbk1hcmtBbGwoKVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvaGVhZGVyPlxuXG4gICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd1B1c2hPZmZDdGEgJiYgIXB1c2hFbmFibGVkKCkpIHtcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJub3RpZi1jdGFcIj5cbiAgICAgICAgICA8aW9uLWljb24gY2xhc3M9XCJub3RpZi1jdGFfX2ljb25cIiBuYW1lPVwibm90aWZpY2F0aW9ucy1vZmYtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmLWN0YV9fYm9keVwiPlxuICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgY29udGVudDogY3RhVGl0bGUoKSxcbiAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGN0YUhpbnQoKSxcbiAgICAgICAgICAgICAgICBzaXplOiAnc21hbGwnLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDx2YWwtYnV0dG9uIFtwcm9wc109XCJjdGFCdXR0b25Qcm9wcygpXCIgKGNsaWNrKT1cIm9uR29Ub1NldHRpbmdzKClcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgQGlmIChsb2FkaW5nKCkpIHtcbiAgICAgICAgPHZhbC1za2VsZXRvbi1sYXlvdXQgW3Byb3BzXT1cInsgcHJlc2V0OiAnbGlzdCcsIHJvd3M6IDYgfVwiIC8+XG4gICAgICB9IEBlbHNlIGlmIChlcnJvclN0YXRlKCkpIHtcbiAgICAgICAgPHZhbC1lbXB0eS1zdGF0ZSBbcHJvcHNdPVwiZXJyb3JTdGF0ZSgpIVwiIC8+XG4gICAgICB9IEBlbHNlIGlmIChhbGxOb3RpZnMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgPHZhbC1lbXB0eS1zdGF0ZSBbcHJvcHNdPVwiZW1wdHlTdGF0ZVByb3BzKClcIiAvPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIEBmb3IgKGdyb3VwIG9mIGdyb3VwcygpOyB0cmFjayBncm91cC5rZXkpIHtcbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImdyb3VwXCI+XG4gICAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGdyb3VwLmxhYmVsLFxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJub3RpZi1saXN0XCI+XG4gICAgICAgICAgICAgIEBmb3IgKG4gb2YgZ3JvdXAuaXRlbXM7IHRyYWNrIG4uaWQpIHtcbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibm90aWZcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLm5vdGlmLS11bnJlYWRdPVwiIW4uaXNSZWFkXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5ub3RpZi0tcmVhZF09XCJuLmlzUmVhZFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3Mubm90aWYtLWFjdGlvbmFibGVdPVwiISFuLmFjdGlvblJvdXRlXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLnJvbGVdPVwibi5hY3Rpb25Sb3V0ZSA/ICdidXR0b24nIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJuLmFjdGlvblJvdXRlID8gJzAnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIm5vdGlmaWNhdGlvbkFyaWFMYWJlbChuKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ob3RpZmljYXRpb25Sb3dDbGljayhuKVwiXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvbk5vdGlmaWNhdGlvbktleWRvd24oJGV2ZW50LCBuKVwiXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJvbk5vdGlmaWNhdGlvbktleWRvd24oJGV2ZW50LCBuKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmX19pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgIEBzd2l0Y2ggKHJlc29sdmVJY29uKG4pLmtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ2lvbmljb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiaW9uaWNvbk5hbWUobilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiaW9uQ29sb3IoaW9uaWNvbkNvbG9yKG4pKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ2ltYWdlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlU3JjKG4pXCIgYWx0PVwiXCIgbG9hZGluZz1cImxhenlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ2F2YXRhcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJub3RpZl9fYXZhdGFyXCIgW3NyY109XCJpbWFnZVNyYyhuKVwiIGFsdD1cIlwiIGxvYWRpbmc9XCJsYXp5XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWZfX2JvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmX19oZWFkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmX190aXRsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIW4uaXNSZWFkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibm90aWZfX3VucmVhZC1kb3RcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInVucmVhZExhYmVsKClcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8dmFsLXRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJub3RpZl9fdGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IG4udGl0bGUgfHwgJ+KAlCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2xkOiAhbi5pc1JlYWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIW4uaXNSZWFkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibm90aWZfX3VucmVhZC1iYWRnZVwiPnt7IHVucmVhZExhYmVsKCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJub3RpZl9fdGltZVwiPnt7IHJlbGF0aXZlVGltZShuKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAobi5ib2R5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJub3RpZl9fdGV4dFwiIFtjbGFzcy5ub3RpZl9fdGV4dC0tY2xhbXBlZF09XCIhaXNFeHBhbmRlZChuLmlkKSAmJiBpc0xvbmcobi5ib2R5KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgbi5ib2R5IH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXNMb25nKG4uYm9keSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJub3RpZl9fZXhwYW5kXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvblRvZ2dsZUV4cGFuZCgkZXZlbnQsIG4uaWQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGlzRXhwYW5kZWQobi5pZCkgPyBzZWVMZXNzKCkgOiBzZWVNb3JlKCkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaWYgKG4uYWN0aW9uUm91dGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWZfX2FjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cIm9wZW5CdXR0b25Qcm9wcygpXCIgKGNsaWNrKT1cIm9uT3BlbkJ1dHRvbkNsaWNrKCRldmVudCwgbilcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoaGFzTW9yZSgpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1hY3Rpb25zIHJvdy1hY3Rpb25zLS1jZW50ZXJcIj5cbiAgICAgICAgICAgIDx2YWwtYnV0dG9uIFtwcm9wc109XCJsb2FkTW9yZUJ1dHRvblByb3BzKClcIiAoY2xpY2spPVwib25Mb2FkTW9yZSgpXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAucGFnZSB7XG4gICAgICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgICAgICAgbWF4LXdpZHRoOiA3MjBweDtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICB9XG5cbiAgICAgIC8qIFNlZ3VuZG8gYW5jaG8sIGRlc2t0b3AgY29uIGVsIHJhaWwgcmV0cmHDrWRvLiBWZXIgc2V0dGluZ3MtaHViIHBhcmEgbGFcbiAgICAgICAgIGV4cGxpY2FjacOzbiBjb21wbGV0YSBkZWwgbWVjYW5pc21vLiAqL1xuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS1tZW51PSdjb2xsYXBzZWQnXSkgLnBhZ2Uge1xuICAgICAgICBAbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XG4gICAgICAgICAgbWF4LXdpZHRoOiA5MDBweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLnBhZ2UtaGVhZGVyIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgICAgIH1cbiAgICAgIC5yb3ctYWN0aW9ucyB7XG4gICAgICAgIG1hcmdpbi10b3A6IDEycHg7XG4gICAgICB9XG4gICAgICAucm93LWFjdGlvbnMtLWNlbnRlciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBtYXJnaW4tdG9wOiAyMHB4O1xuICAgICAgfVxuICAgICAgLnJvdy1hY3Rpb25zLS1lbmQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgICAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgICB9XG5cbiAgICAgIC5ub3RpZi1jdGEge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDEycHg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICBwYWRkaW5nOiAxNHB4IDE2cHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgICAgIC8qIFN0ZXAtKiBubyBpbnZpZXJ0ZSBlbiBkYXJrLCB0ZXh0byBsaWdodCArIGJnIGxpZ2h0ID0gaW52aXNpYmxlLlxuICAgICAgICAgICBsaWdodC9saWdodC1zaGFkZSBzaSBmbGlwcGFuIGNvbiBlbCBwYWxldHRlIGRhcmsgZGUgSW9uaWMuICovXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWlvbi1jb2xvci1saWdodC1zaGFkZSwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDE0cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodCk7XG4gICAgICB9XG4gICAgICAubm90aWYtY3RhX19pY29uIHtcbiAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmssICMxYTFhMWEpO1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgICAgbWFyZ2luLXRvcDogMnB4O1xuICAgICAgfVxuICAgICAgLm5vdGlmLWN0YV9fYm9keSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMnB4O1xuICAgICAgfVxuXG4gICAgICAuZ3JvdXAge1xuICAgICAgICBwYWRkaW5nOiAxMnB4IDA7XG4gICAgICB9XG4gICAgICAuZ3JvdXAgKyAuZ3JvdXAge1xuICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tdmFsLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7XG4gICAgICB9XG5cbiAgICAgIC5ub3RpZi1saXN0IHtcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgbWFyZ2luOiAxMnB4IDAgMDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAxMHB4O1xuICAgICAgfVxuICAgICAgLm5vdGlmIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDQ0cHggMWZyO1xuICAgICAgICBnYXA6IDEycHg7XG4gICAgICAgIHBhZGRpbmc6IDE0cHggMTJweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgICB0cmFuc2l0aW9uOlxuICAgICAgICAgIGJhY2tncm91bmQgMTQwbXMgZWFzZSxcbiAgICAgICAgICBib3JkZXItY29sb3IgMTQwbXMgZWFzZSxcbiAgICAgICAgICBib3gtc2hhZG93IDE0MG1zIGVhc2U7XG4gICAgICB9XG4gICAgICAubm90aWYtLWFjdGlvbmFibGUge1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB9XG4gICAgICAubm90aWYtLWFjdGlvbmFibGU6aG92ZXIsXG4gICAgICAubm90aWYtLWFjdGlvbmFibGU6Zm9jdXMtdmlzaWJsZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodCwgcmdiYSgwLCAwLCAwLCAwLjA0KSk7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tdmFsLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7XG4gICAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICB9XG4gICAgICAubm90aWYtLXVucmVhZCB7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEodmFyKC0taW9uLWNvbG9yLXByaW1hcnktcmdiLCA1NiwgMTI4LCAyNTUpLCAwLjA3KTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LXJnYiwgNTYsIDEyOCwgMjU1KSwgMC4xOCk7XG4gICAgICB9XG4gICAgICAubm90aWYtLXJlYWQgLm5vdGlmX19pY29uIHtcbiAgICAgICAgb3BhY2l0eTogMC43MjtcbiAgICAgIH1cbiAgICAgIC5ub3RpZl9faWNvbiB7XG4gICAgICAgIHdpZHRoOiA0NHB4O1xuICAgICAgICBoZWlnaHQ6IDQ0cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodCwgcmdiYSgwLCAwLCAwLCAwLjA2KSk7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB9XG4gICAgICAubm90aWZfX2ljb24gaW9uLWljb24ge1xuICAgICAgICBmb250LXNpemU6IDIycHg7XG4gICAgICB9XG4gICAgICAubm90aWZfX2ljb24gaW1nIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7XG4gICAgICB9XG4gICAgICAubm90aWZfX2F2YXRhciB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIH1cblxuICAgICAgLm5vdGlmX19ib2R5IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA0cHg7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIH1cbiAgICAgIC5ub3RpZl9faGVhZCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICAgIGdhcDogMTJweDtcbiAgICAgIH1cbiAgICAgIC5ub3RpZl9fdGl0bGUtcm93IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIH1cbiAgICAgIC5ub3RpZl9fdGl0bGUge1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICB9XG4gICAgICAubm90aWZfX3VucmVhZC1kb3Qge1xuICAgICAgICB3aWR0aDogOHB4O1xuICAgICAgICBoZWlnaHQ6IDhweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGZsZXg6IDAgMCBhdXRvO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSwgIzM4ODBmZik7XG4gICAgICB9XG4gICAgICAubm90aWZfX3VucmVhZC1iYWRnZSB7XG4gICAgICAgIGZsZXg6IDAgMCBhdXRvO1xuICAgICAgICBwYWRkaW5nOiAycHggN3B4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgZm9udC1zaXplOiAxMHB4O1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4zNTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LWNvbnRyYXN0LCAjZmZmKTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLXByaW1hcnksICMzODgwZmYpO1xuICAgICAgfVxuICAgICAgLm5vdGlmX190aW1lIHtcbiAgICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgfVxuICAgICAgLm5vdGlmX190ZXh0IHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyaywgIzFhMWExYSk7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbiAgICAgIH1cbiAgICAgIC5ub3RpZl9fdGV4dC0tY2xhbXBlZCB7XG4gICAgICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgICAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7XG4gICAgICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB9XG4gICAgICAubm90aWZfX2V4cGFuZCB7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmssICMxYTFhMWEpO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgICAgfVxuICAgICAgLm5vdGlmX19hY3Rpb24ge1xuICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDtcbiAgICAgICAgbWFyZ2luLXRvcDogNHB4O1xuICAgICAgfVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDUyMHB4KSB7XG4gICAgICAgIC5ub3RpZiB7XG4gICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiA0MHB4IDFmcjtcbiAgICAgICAgICBnYXA6IDEwcHg7XG4gICAgICAgICAgcGFkZGluZzogMTJweCAxMHB4O1xuICAgICAgICB9XG4gICAgICAgIC5ub3RpZl9faWNvbiB7XG4gICAgICAgICAgd2lkdGg6IDQwcHg7XG4gICAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICB9XG4gICAgICAgIC5ub3RpZl9faGVhZCB7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBnYXA6IDRweDtcbiAgICAgICAgfVxuICAgICAgICAubm90aWZfX3VucmVhZC1iYWRnZSB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgICAubm90aWZfX3RpbWUge1xuICAgICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25zVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBuYXYgPSBpbmplY3QoTmF2aWdhdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuICBwcml2YXRlIG5vdGlmcyA9IGluamVjdChOb3RpZmljYXRpb25zU2VydmljZSk7XG4gIHByaXZhdGUgYWN0aW9uID0gaW5qZWN0KE5vdGlmaWNhdGlvbkFjdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIHRvYXN0ID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XG4gIHByaXZhdGUgZXJyb3JzID0gaW5qZWN0KFZhbHRlY2hFcnJvclNlcnZpY2UpO1xuICBwcml2YXRlIGF1dGggPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICBwcml2YXRlIHBhZ2VSZWZyZXNoID0gaW5qZWN0KFBhZ2VSZWZyZXNoU2VydmljZSk7XG4gIC8vIGBBY3RpdmF0ZWRSb3V0ZWAgb3BjaW9uYWwg4oaSIGxhIHZpc3RhIGZ1bmNpb25hIGVtYmViaWRhIC8gZW4gU3Rvcnlib29rIHNpblxuICAvLyByb3V0ZXIgKHNvbG8gbG8gdXNhIHBhcmEgbGVlciBlbCByb3V0ZSBkYXRhIGRlIGNvbmZpZyBjb21vIGZhbGxiYWNrKS4gTGFcbiAgLy8gbmF2ZWdhY2nDs24gdmEgcG9yIGBOYXZpZ2F0aW9uU2VydmljZWAgKHdyYXBwZXIgb3BjaW9uYWwgc29icmUgYFJvdXRlcmApLlxuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIC8qKlxuICAgKiBDb25maWcgdsOtYSBASW5wdXQgKG9iamVjdC1maXJzdCkuIFNpIG5vIHNlIHBhc2EsIHNlIGNhZSBhbCByb3V0ZSBkYXRhXG4gICAqIGBub3RpZmljYXRpb25zQ29uZmlnYCAocG9ibGFkbyBwb3IgYHByb3ZpZGVWYWx0ZWNoTm90aWZpY2F0aW9uc1JvdXRlc2ApLlxuICAgKiBgcmVzb2x2ZWRDb25maWdgIG1lcmdlYSBjb24gbG9zIGRlZmF1bHRzIOKAlCBgQElucHV0YCBnYW5hIHNvYnJlIHJvdXRlIGRhdGEuXG4gICAqL1xuICBASW5wdXQoKSBjb25maWc/OiBOb3RpZmljYXRpb25zVmlld0NvbmZpZztcblxuICByZWFkb25seSByZXNvbHZlZENvbmZpZyA9IGNvbXB1dGVkPFxuICAgIFJlcXVpcmVkPE9taXQ8Tm90aWZpY2F0aW9uc1ZpZXdDb25maWcsICdvbk5vdGlmaWNhdGlvbk9wZW4nPj4gJiBQaWNrPE5vdGlmaWNhdGlvbnNWaWV3Q29uZmlnLCAnb25Ob3RpZmljYXRpb25PcGVuJz5cbiAgPigoKSA9PiB7XG4gICAgY29uc3QgZnJvbVJvdXRlID0gKHRoaXMucm91dGU/LnNuYXBzaG90LmRhdGFbJ25vdGlmaWNhdGlvbnNDb25maWcnXSA/PyB7fSkgYXMgTm90aWZpY2F0aW9uc1ZpZXdDb25maWc7XG4gICAgY29uc3QgbWVyZ2VkOiBOb3RpZmljYXRpb25zVmlld0NvbmZpZyA9IHsgLi4uZnJvbVJvdXRlLCAuLi4odGhpcy5jb25maWcgPz8ge30pIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dQdXNoT2ZmQ3RhOiBtZXJnZWQuc2hvd1B1c2hPZmZDdGEgPz8gdHJ1ZSxcbiAgICAgIGVuYWJsZU1hcmtBbGw6IG1lcmdlZC5lbmFibGVNYXJrQWxsID8/IHRydWUsXG4gICAgICBzZXR0aW5nc05vdGlmaWNhdGlvbnNQYXRoOiBtZXJnZWQuc2V0dGluZ3NOb3RpZmljYXRpb25zUGF0aCA/PyBERUZBVUxUX1NFVFRJTkdTX1BBVEgsXG4gICAgICBpMThuTmFtZXNwYWNlOiBtZXJnZWQuaTE4bk5hbWVzcGFjZSA/PyBERUZBVUxUX05BTUVTUEFDRSxcbiAgICAgIHBhZ2VTaXplOiBtZXJnZWQucGFnZVNpemUgPz8gREVGQVVMVF9QQUdFX1NJWkUsXG4gICAgICBtYXhMb2FkOiBtZXJnZWQubWF4TG9hZCA/PyBERUZBVUxUX01BWF9MT0FELFxuICAgICAgb25Ob3RpZmljYXRpb25PcGVuOiBtZXJnZWQub25Ob3RpZmljYXRpb25PcGVuLFxuICAgIH07XG4gIH0pO1xuXG4gIC8qKiBOYW1lc3BhY2UgaTE4biByZXN1ZWx0byAoY2FwdHVyYWRvIHBhcmEgbGxhbWFkYXMgbm8tcmVhY3RpdmFzKS4gKi9cbiAgcHJpdmF0ZSBnZXQgbnMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZENvbmZpZygpLmkxOG5OYW1lc3BhY2U7XG4gIH1cblxuICAvKiogUGFzbyBkZSBwYWdpbmFjacOzbiBzb2Z0IChyZXZlbGEgK04gcG9yIFwiY2FyZ2FyIG3DoXNcIikuICovXG4gIHByaXZhdGUgZ2V0IHBhZ2VTdGVwKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZWRDb25maWcoKS5wYWdlU2l6ZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4cGFuZGVkID0gc2lnbmFsPFNldDxzdHJpbmc+PihuZXcgU2V0KCkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlU2l6ZSA9IHNpZ25hbCh0aGlzLnJlc29sdmVkQ29uZmlnKCkucGFnZVNpemUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9idWxrQnVzeSA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvYWRpbmdNb3JlID0gc2lnbmFsKGZhbHNlKTtcblxuICAvKipcbiAgICogUHVzaCBhY3RpdmFkbyA9IHBlcm1pc28gZGVsIG5hdmVnYWRvciBlbiBgZ3JhbnRlZGAuIFNpIE5PIGVzdMOhIGFjdGl2YWRvLFxuICAgKiBlbCB1c2VyIHB1ZWRlIGxlZXIgZWwgaW5ib3ggKEZpcmVzdG9yZSkgcGVybyBOTyByZWNpYmlyw6EgcHVzaCBlbiBzdVxuICAgKiBkaXNwb3NpdGl2byDihpIgbW9zdHJhbW9zIHVuYSBjYXJkIHF1ZSBsbyBpbnZpdGEgYSBpciBhIGNvbmZpZ3VyYWNpw7NuLlxuICAgKiBTZSBldmFsw7phIGVuIGNhZGEgbW9udGFqZSBkZSBsYSB2aXN0YS5cbiAgICovXG4gIHJlYWRvbmx5IHB1c2hFbmFibGVkID0gc2lnbmFsKHRoaXMuYXV0aC5nZXROb3RpZmljYXRpb25QZXJtaXNzaW9uU3RhdGUoKSA9PT0gJ2dyYW50ZWQnKTtcblxuICAvKipcbiAgICogU3RyZWFtIGZpcmVzdG9yZSByZWFsLXRpbWUgdsOtYSBlbCBoZWxwZXIgZXN0w6FuZGFyIGBjcmVhdGVSZWZyZXNoYWJsZVN0cmVhbWBcbiAgICogKG1vZG8gcmVhbC10aW1lOiBmYWN0b3J5IGRldnVlbHZlIHVuIGxpc3RlbmVyIHZpdm8gYG5vdGlmcy5nZXRBbGwobWF4TG9hZClgKS5cbiAgICpcbiAgICogRWwgaGVscGVyIGdhdGVhIGxhIHByaW1lcmEgc3VzY3JpcGNpw7NuIHBvciBgZmlyZWJhc2VBdXRoUmVhZHlgLCBhcGxpY2EgdW5cbiAgICogYHJldHJ5YCBjb3J0byBjb24gYmFja29mZiB5LCB0cmFzIGFnb3RhciByZWludGVudG9zLCBlbWl0ZSBlbCBmYWxsYmFjayAoYFtdYClcbiAgICogeSBtYXJjYSBgZXJyb3JgIOKAlCBlc3RhZG8gZGUgZXJyb3IgZW4gVUksIG5vIHNrZWxldG9uIGluZmluaXRvLiBgcmVsb2FkKClgXG4gICAqIHJlLXN1c2NyaWJlIGVsIHN0cmVhbSBjb21wbGV0byAobG8gdXNhIGVsIHB1bGwtdG8tcmVmcmVzaCkuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW0gPSBjcmVhdGVSZWZyZXNoYWJsZVN0cmVhbTxOb3RpZmljYXRpb25Eb2N1bWVudFtdPihcbiAgICAoKSA9PiB0aGlzLm5vdGlmcy5nZXRBbGwodGhpcy5yZXNvbHZlZENvbmZpZygpLm1heExvYWQpLFxuICAgIHtcbiAgICAgIGZhbGxiYWNrOiBbXSxcbiAgICAgIC8vIGBub3RpZnMuZ2V0QWxsKClgIFlBIGdhdGVhIGludGVybmFtZW50ZSBwb3IgYGZpcmViYXNlQXV0aFJlYWR5YC4gU2kgZWxcbiAgICAgIC8vIHN0cmVhbSB0YW1iacOpbiBnYXRlYXJhLCBzZXLDrWFuIERPUyBlc3BlcmFzIGRlIGF1dGggYXBpbGFkYXMuXG4gICAgICBnYXRlT25GaXJlYmFzZUF1dGg6IGZhbHNlLFxuICAgICAgLy8gQ29sZCBzdGFydCBkZSBQV0EgZW4gaU9TIHB1ZWRlIHBhc2FyIGRlIDhzIGVuIHJlZGVzIGxlbnRhczsgY29uIDE1c1xuICAgICAgLy8gZXZpdGFtb3MgZWwgZmFsc28gZXN0YWRvIGRlIGVycm9yLlxuICAgICAgZmlyc3RFbWl0VGltZW91dE1zOiAxNTAwMCxcbiAgICB9XG4gICk7XG5cbiAgLyoqIFRydWUgc2kgZWwgc3RyZWFtIGZhbGzDsyB0cmFzIGFnb3RhciByZWludGVudG9zIOKGkiBtdWVzdHJhIGVzdGFkbyBkZSBlcnJvci4gKi9cbiAgcmVhZG9ubHkgc3RyZWFtRXJyb3IgPSB0aGlzLl9zdHJlYW0uZXJyb3I7XG5cbiAgcmVhZG9ubHkgbG9hZGluZyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX3N0cmVhbS5kYXRhKCkgPT09IG51bGwpO1xuXG4gIC8qKlxuICAgKiBOb3RpZnMgcmVhbGVzIG1vc3RyYWRhcy4gRmlsdHJhbW9zIGRvY3Mgc2luIHTDrXR1bG8gWSBzaW4gYm9keSDigJQgc29uIHJ1aWRvXG4gICAqICh0w61waWNhbWVudGUgc2VudGluZWwvc3lzdGVtIHdyaXRlcyBwcmUtc2NoZW1hIGNvbiB0aXRsZS9ib2R5IG9wY2lvbmFsZXMpLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxsTm90aWZzID0gY29tcHV0ZWQ8Tm90aWZpY2F0aW9uRG9jdW1lbnRbXT4oKCkgPT5cbiAgICAodGhpcy5fc3RyZWFtLmRhdGEoKSA/PyBbXSkuZmlsdGVyKG4gPT4gISEobi50aXRsZSAmJiBuLnRpdGxlLnRyaW0oKSkgfHwgISEobi5ib2R5ICYmIG4uYm9keS50cmltKCkpKVxuICApO1xuICByZWFkb25seSBoYXNNb3JlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hbGxOb3RpZnMoKS5sZW5ndGggPiB0aGlzLl9wYWdlU2l6ZSgpKTtcbiAgcmVhZG9ubHkgc2hvd01hcmtBbGwgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnJlc29sdmVkQ29uZmlnKCkuZW5hYmxlTWFya0FsbCAmJiAhdGhpcy5sb2FkaW5nKCkgJiYgdGhpcy5hbGxOb3RpZnMoKS5zb21lKG4gPT4gIW4uaXNSZWFkKVxuICApO1xuXG4gIC8qKiBTdWItY29uanVudG8gcGFnaW5hZG8sIGFncnVwYWRvIHBvciBwZXLDrW9kby4gKi9cbiAgcmVhZG9ubHkgZ3JvdXBzID0gY29tcHV0ZWQ8Tm90aWZpY2F0aW9uR3JvdXBbXT4oKCkgPT4ge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5hbGxOb3RpZnMoKS5zbGljZSgwLCB0aGlzLl9wYWdlU2l6ZSgpKTtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IGJ1Y2tldHM6IFJlY29yZDxHcm91cEtleSwgTm90aWZpY2F0aW9uRG9jdW1lbnRbXT4gPSB7XG4gICAgICB0b2RheTogW10sXG4gICAgICB0aGlzTW9udGg6IFtdLFxuICAgICAgZWFybGllcjogW10sXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IG4gb2YgaXRlbXMpIHtcbiAgICAgIGJ1Y2tldHNbdGhpcy5idWNrZXRPZihuLCBub3cpXS5wdXNoKG4pO1xuICAgIH1cbiAgICBjb25zdCBvdXQ6IE5vdGlmaWNhdGlvbkdyb3VwW10gPSBbXTtcbiAgICBpZiAoYnVja2V0cy50b2RheS5sZW5ndGgpIHtcbiAgICAgIG91dC5wdXNoKHsga2V5OiAndG9kYXknLCBsYWJlbDogdGhpcy50dCgnZ3JvdXBUb2RheScpLCBpdGVtczogYnVja2V0cy50b2RheSB9KTtcbiAgICB9XG4gICAgaWYgKGJ1Y2tldHMudGhpc01vbnRoLmxlbmd0aCkge1xuICAgICAgb3V0LnB1c2goe1xuICAgICAgICBrZXk6ICd0aGlzTW9udGgnLFxuICAgICAgICBsYWJlbDogdGhpcy50dCgnZ3JvdXBUaGlzTW9udGgnKSxcbiAgICAgICAgaXRlbXM6IGJ1Y2tldHMudGhpc01vbnRoLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChidWNrZXRzLmVhcmxpZXIubGVuZ3RoKSB7XG4gICAgICBvdXQucHVzaCh7IGtleTogJ2VhcmxpZXInLCBsYWJlbDogdGhpcy50dCgnZ3JvdXBFYXJsaWVyJyksIGl0ZW1zOiBidWNrZXRzLmVhcmxpZXIgfSk7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHBhZ2VUaXRsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ3BhZ2VUaXRsZScpKTtcbiAgcmVhZG9ubHkgcGFnZURlc2NyaXB0aW9uID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50dCgncGFnZURlc2NyaXB0aW9uJykpO1xuXG4gIC8vIENUQSBcImFjdGl2YSBsYXMgbm90aWZpY2FjaW9uZXMgcHVzaFwiIOKAlCB2aXNpYmxlIGN1YW5kbyBwdXNoRW5hYmxlZCgpIGVzIGZhbHNlLlxuICByZWFkb25seSBjdGFUaXRsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ3B1c2hPZmZUaXRsZScpKTtcbiAgcmVhZG9ubHkgY3RhSGludCA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ3B1c2hPZmZIaW50JykpO1xuICByZWFkb25seSBjdGFCdXR0b25Qcm9wcyA9IGNvbXB1dGVkPFBhcnRpYWw8QnV0dG9uTWV0YWRhdGE+PigoKSA9PiAoe1xuICAgIHRleHQ6IHRoaXMudHQoJ3B1c2hPZmZDdGEnKSxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBzaXplOiAnc21hbGwnLFxuICAgIHNoYXBlOiAncm91bmQnLFxuICAgIHR5cGU6ICdidXR0b24nLFxuICB9KSk7XG5cbiAgLyoqXG4gICAqIEVzdGFkbyBkZSBlcnJvciBkZSBjYXJnYTogY29udmllcnRlIGVsIGVycm9yIGRlbCBzdHJlYW0gZW5cbiAgICogYEVtcHR5U3RhdGVNZXRhZGF0YWAgdmlhIGVsIGhlbHBlciBjYW7Ds25pY28gYGNyZWF0ZUVycm9yU3RhdGVQcm9wc2AuXG4gICAqIEVsIGhlbHBlciBkZWNpZGUgdmFyaWFudGUgKGBvZmZsaW5lYCB2cyBgZXJyb3JgKSBwb3IgYGlzTmV0d29ya2AuXG4gICAqIE51bGwgY3VhbmRvIGVsIHN0cmVhbSBubyBoYSBmYWxsYWRvLlxuICAgKi9cbiAgcmVhZG9ubHkgZXJyb3JTdGF0ZSA9IGNvbXB1dGVkPEVtcHR5U3RhdGVNZXRhZGF0YSB8IG51bGw+KCgpID0+IHtcbiAgICB0aGlzLmkxOG4ubGFuZygpO1xuICAgIGNvbnN0IGVyciA9IHRoaXMuc3RyZWFtRXJyb3IoKTtcbiAgICBpZiAoIWVycikgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGNyZWF0ZUVycm9yU3RhdGVQcm9wcyhlcnIsIHtcbiAgICAgIHRpdGxlOiB7XG4gICAgICAgIG9mZmxpbmU6IHRoaXMudHQoJ29mZmxpbmVUaXRsZScpLFxuICAgICAgICBlcnJvcjogdGhpcy50dCgnbG9hZEVycm9yVGl0bGUnKSxcbiAgICAgIH0sXG4gICAgICBkZXNjcmlwdGlvbjoge1xuICAgICAgICBvZmZsaW5lOiB0aGlzLnR0KCdvZmZsaW5lSGludCcpLFxuICAgICAgICBlcnJvcjogaW50ZXJwcmV0RXJyb3IoZXJyKS5tZXNzYWdlIHx8IHRoaXMudHQoJ2xvYWRFcnJvckhpbnQnKSxcbiAgICAgIH0sXG4gICAgICByZXRyeUxhYmVsOiB0aGlzLnR0KCdyZXRyeUN0YScpLFxuICAgICAgb25SZXRyeTogKCkgPT4gdGhpcy5fc3RyZWFtLnJlbG9hZCgpLFxuICAgICAgcmV0cnlpbmc6IHRoaXMubG9hZGluZygpLFxuICAgIH0pO1xuICB9KTtcblxuICAvKipcbiAgICogRXN0YWRvIHZhY8OtbyAobGlzdGEgcmVhbCA9IDAgbm90aWZpY2FjaW9uZXMsIHNpbiBlcnJvciBkZSBjYXJnYSkuXG4gICAqIFNlIGNvbnN0cnV5ZSBtYW51YWxtZW50ZSBjb24gYHZhcmlhbnQ6ICdlbXB0eSdgIOKAlCBzaW4gaGVscGVyIGRlIGVycm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgZW1wdHlTdGF0ZVByb3BzID0gY29tcHV0ZWQ8RW1wdHlTdGF0ZU1ldGFkYXRhPigoKSA9PiB7XG4gICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFyaWFudDogJ2VtcHR5JyxcbiAgICAgIGljb246ICdub3RpZmljYXRpb25zLW9mZi1vdXRsaW5lJyxcbiAgICAgIHRpdGxlOiB0aGlzLnR0KCdlbXB0eScpLFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMudHQoJ2VtcHR5SGludCcpLFxuICAgICAgYWN0aW9uOiB7XG4gICAgICAgIGxhYmVsOiB0aGlzLnR0KCdlbXB0eUN0YScpLFxuICAgICAgICBoYW5kbGVyOiAoKSA9PiB0aGlzLm9uR29Ub1NldHRpbmdzKCksXG4gICAgICB9LFxuICAgIH07XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNlZU1vcmUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnR0KCdzZWVNb3JlJykpO1xuICByZWFkb25seSBzZWVMZXNzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50dCgnc2VlTGVzcycpKTtcbiAgcmVhZG9ubHkgdW5yZWFkTGFiZWwgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnR0KCd1bnJlYWQnKSk7XG5cbiAgcmVhZG9ubHkgbWFya0FsbEJ1dHRvblByb3BzID0gY29tcHV0ZWQ8UGFydGlhbDxCdXR0b25NZXRhZGF0YT4+KCgpID0+ICh7XG4gICAgdGV4dDogdGhpcy50dCgnbWFya0FsbCcpLFxuICAgIGNvbG9yOiAnZGFyaycsXG4gICAgZmlsbDogJ291dGxpbmUnLFxuICAgIHNpemU6ICdzbWFsbCcsXG4gICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgdHlwZTogJ2J1dHRvbicsXG4gICAgaWNvbjogeyBuYW1lOiAnY2hlY2ttYXJrLWRvbmUtb3V0bGluZScsIHNsb3Q6ICdzdGFydCcgfSxcbiAgICBzdGF0ZTogdGhpcy5fYnVsa0J1c3koKSA/IENvbXBvbmVudFN0YXRlcy5XT1JLSU5HIDogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gIH0pKTtcblxuICByZWFkb25seSBsb2FkTW9yZUJ1dHRvblByb3BzID0gY29tcHV0ZWQ8UGFydGlhbDxCdXR0b25NZXRhZGF0YT4+KCgpID0+ICh7XG4gICAgdGV4dDogdGhpcy50dCgnbG9hZE1vcmUnKSxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGZpbGw6ICdjbGVhcicsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIHNoYXBlOiAncm91bmQnLFxuICAgIHR5cGU6ICdidXR0b24nLFxuICAgIHN0YXRlOiB0aGlzLl9sb2FkaW5nTW9yZSgpID8gQ29tcG9uZW50U3RhdGVzLldPUktJTkcgOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgfSkpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5zID0gdGhpcy5ucztcbiAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cyhucywgTk9USUZJQ0FUSU9OU19WSUVXX0kxOE4pO1xuICAgIHRoaXMubmF2LnNldEJhY2tIZWFkZXIoJ3BhZ2VUaXRsZScsIG5zLCB7IHdpdGhNZW51OiB0cnVlIH0pO1xuXG4gICAgLy8gUmUtYXBsaWNhciBoZWFkZXIgZW4gY2FtYmlvIGRlIGlkaW9tYS5cbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgICAgIHRoaXMubmF2LnNldEJhY2tIZWFkZXIoJ3BhZ2VUaXRsZScsIHRoaXMubnMsIHsgd2l0aE1lbnU6IHRydWUgfSk7XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSBlbCBwdWxsLXRvLXJlZnJlc2ggZXN0w6FuZGFyLiBVc2Ftb3MgYG5nT25Jbml0YC9gbmdPbkRlc3Ryb3lgXG4gICAqIChOTyBgaW9uVmlld1dpbGxFbnRlcmApIHBvcnF1ZSBgdmFsLXBhZ2Utd3JhcHBlcmAgdXNhIGA8cm91dGVyLW91dGxldD5gXG4gICAqIHBsYW5vIOKAlCBsb3MgaG9va3MgYGlvblZpZXcqYCBzb2xvIGRpc3BhcmFuIGRlbnRybyBkZSBgPGlvbi1yb3V0ZXItb3V0bGV0PmAuXG4gICAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VSZWZyZXNoLnJlZ2lzdGVyKCgpID0+IHRoaXMucmVsb2FkKCkpO1xuICB9XG5cbiAgLyoqIFF1aXRhIGVsIGhhbmRsZXIgYWwgZGVzdHJ1aXIgbGEgdmlzdGEg4oCUIGVsIHJlZnJlc2hlciBkZXNhcGFyZWNlLiAqL1xuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VSZWZyZXNoLnVucmVnaXN0ZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIG1hbnVhbDogcmUtc3VzY3JpYmUgZWwgc3RyZWFtIEZpcmVzdG9yZSAobGlzdGVuZXIgbnVldm8pIHbDrWEgZWxcbiAgICogaGVscGVyLiBSZXN1ZWx2ZSB0cmFzIHVuIG1hcmdlbiBicmV2ZSDigJQgZWwgc3RyZWFtIGVzIHJlYWwtdGltZSB5IHJlLWVtaXRlXG4gICAqIGVuIG1pbGlzZWd1bmRvczsgZWwgZGVsYXkgc8OzbG8gbWFudGllbmUgZWwgc3Bpbm5lciB2aXNpYmxlIGxvIGp1c3RvLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZWxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fc3RyZWFtLnJlbG9hZCgpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCA3MDApKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBQZXItaXRlbSBoZWxwZXJzIChwdXJvcyDigJQgdXNhYmxlcyBkZXNkZSB0ZW1wbGF0ZSkuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIG9wZW5CdXR0b25Qcm9wcygpOiBQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRleHQ6IHRoaXMudHQoJ29wZW4nKSxcbiAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICBmaWxsOiAnY2xlYXInLFxuICAgICAgc2l6ZTogJ3NtYWxsJyxcbiAgICAgIHNoYXBlOiAncm91bmQnLFxuICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICBpY29uOiB7IG5hbWU6ICdjaGV2cm9uLWZvcndhcmQtb3V0bGluZScsIHNsb3Q6ICdlbmQnIH0sXG4gICAgfTtcbiAgfVxuXG4gIG5vdGlmaWNhdGlvbkFyaWFMYWJlbChuOiBOb3RpZmljYXRpb25Eb2N1bWVudCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghbi5hY3Rpb25Sb3V0ZSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3Qgc3RhdHVzID0gbi5pc1JlYWQgPyAnJyA6IHRoaXMudW5yZWFkTGFiZWwoKSArICcuICc7XG4gICAgY29uc3QgdGl0bGUgPSBuLnRpdGxlIHx8IG4uYm9keSB8fCB0aGlzLnR0KCdvcGVuJyk7XG4gICAgcmV0dXJuIHN0YXR1cyArIHRpdGxlICsgJy4gJyArIHRoaXMudHQoJ29wZW4nKTtcbiAgfVxuXG4gIG9uTm90aWZpY2F0aW9uUm93Q2xpY2sobjogTm90aWZpY2F0aW9uRG9jdW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoIW4uYWN0aW9uUm91dGUpIHJldHVybjtcbiAgICB2b2lkIHRoaXMub25PcGVuKG4pO1xuICB9XG5cbiAgb25Ob3RpZmljYXRpb25LZXlkb3duKGV2ZW50OiBFdmVudCwgbjogTm90aWZpY2F0aW9uRG9jdW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoIW4uYWN0aW9uUm91dGUpIHJldHVybjtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHZvaWQgdGhpcy5vbk9wZW4obik7XG4gIH1cblxuICBvbk9wZW5CdXR0b25DbGljayhldmVudDogRXZlbnQsIG46IE5vdGlmaWNhdGlvbkRvY3VtZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdm9pZCB0aGlzLm9uT3BlbihuKTtcbiAgfVxuXG4gIG9uVG9nZ2xlRXhwYW5kKGV2ZW50OiBFdmVudCwgaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMudG9nZ2xlRXhwYW5kKGlkKTtcbiAgfVxuXG4gIGlzRXhwYW5kZWQoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9leHBhbmRlZCgpLmhhcyhpZCk7XG4gIH1cblxuICB0b2dnbGVFeHBhbmQoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSBuZXcgU2V0KHRoaXMuX2V4cGFuZGVkKCkpO1xuICAgIGlmIChuZXh0LmhhcyhpZCkpIG5leHQuZGVsZXRlKGlkKTtcbiAgICBlbHNlIG5leHQuYWRkKGlkKTtcbiAgICB0aGlzLl9leHBhbmRlZC5zZXQobmV4dCk7XG4gIH1cblxuICBpc0xvbmcoYm9keTogc3RyaW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgaWYgKCFib2R5KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGJvZHkubGVuZ3RoID4gMTEwIHx8IGJvZHkuaW5jbHVkZXMoJ1xcbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEljb24gcmVzb2x2ZXIgY29uIG9yZGVuIGRlIGZhbGxiYWNrOlxuICAgKiAxLiBub3RpZi5wYXlsb2FkLmljb24gKGZvcndhcmQtY29tcGF0LCBzaW4gYnJlYWtpbmcgY2hhbmdlIGVuIHNjaGVtYSlcbiAgICogMi4gbWFwYSBwb3Igbm90aWYudHlwZVxuICAgKiAzLiBkZWZhdWx0IG5vdGlmaWNhdGlvbnMtb3V0bGluZVxuICAgKi9cbiAgcmVzb2x2ZUljb24objogTm90aWZpY2F0aW9uRG9jdW1lbnQpOiBSZXNvbHZlZEljb24ge1xuICAgIGNvbnN0IGhpbnQgPSBuLnBheWxvYWQ/LlsnaWNvbiddIGFzIEljb25IaW50IHwgdW5kZWZpbmVkO1xuICAgIGlmIChoaW50Py52YWx1ZSkge1xuICAgICAgaWYgKGhpbnQudHlwZSA9PT0gJ2ltYWdlJyB8fCBoaW50LnR5cGUgPT09ICdhdmF0YXInKSB7XG4gICAgICAgIHJldHVybiB7IGtpbmQ6IGhpbnQudHlwZSwgc3JjOiBoaW50LnZhbHVlIH07XG4gICAgICB9XG4gICAgICAvLyBJZ25vcmFtb3MgaGludC5jb2xvciDigJQgdG9kb3MgbG9zIGljb25vcyB2YW4gZW4gZGFyayBwb3IgY29udmVuY2nDs24gVVguXG4gICAgICByZXR1cm4geyBraW5kOiAnaW9uaWNvbicsIG5hbWU6IGhpbnQudmFsdWUsIGNvbG9yOiAnZGFyaycgfTtcbiAgICB9XG4gICAgY29uc3QgdCA9IG4udHlwZTtcbiAgICBjb25zdCBuYW1lID0gKCgpID0+IHtcbiAgICAgIHN3aXRjaCAodCkge1xuICAgICAgICBjYXNlICdhcHByb3ZhbCc6XG4gICAgICAgICAgcmV0dXJuICdjaGVja21hcmstY2lyY2xlLW91dGxpbmUnO1xuICAgICAgICBjYXNlICdjaGF0JzpcbiAgICAgICAgY2FzZSAnY2hhdGJvdCc6XG4gICAgICAgICAgcmV0dXJuICdjaGF0YnViYmxlLW91dGxpbmUnO1xuICAgICAgICBjYXNlICdjb21tZW50JzpcbiAgICAgICAgICByZXR1cm4gJ2NoYXRib3gtZWxsaXBzZXMtb3V0bGluZSc7XG4gICAgICAgIGNhc2UgJ3JlbWluZGVyJzpcbiAgICAgICAgICByZXR1cm4gJ2FsYXJtLW91dGxpbmUnO1xuICAgICAgICBjYXNlICdzeXN0ZW0nOlxuICAgICAgICAgIHJldHVybiAnY29nLW91dGxpbmUnO1xuICAgICAgICBjYXNlICd1c2VyJzpcbiAgICAgICAgY2FzZSAnbWVudGlvbic6XG4gICAgICAgICAgcmV0dXJuICdwZXJzb24tb3V0bGluZSc7XG4gICAgICAgIGNhc2UgJ2RvY3VtZW50JzpcbiAgICAgICAgICByZXR1cm4gJ2RvY3VtZW50LXRleHQtb3V0bGluZSc7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuICdub3RpZmljYXRpb25zLW91dGxpbmUnO1xuICAgICAgfVxuICAgIH0pKCk7XG4gICAgcmV0dXJuIHsga2luZDogJ2lvbmljb24nLCBuYW1lLCBjb2xvcjogJ2RhcmsnIH07XG4gIH1cblxuICBpb25pY29uTmFtZShuOiBOb3RpZmljYXRpb25Eb2N1bWVudCk6IHN0cmluZyB7XG4gICAgY29uc3QgciA9IHRoaXMucmVzb2x2ZUljb24obik7XG4gICAgcmV0dXJuIHIua2luZCA9PT0gJ2lvbmljb24nID8gci5uYW1lIDogJyc7XG4gIH1cblxuICBpb25pY29uQ29sb3IobjogTm90aWZpY2F0aW9uRG9jdW1lbnQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHIgPSB0aGlzLnJlc29sdmVJY29uKG4pO1xuICAgIHJldHVybiByLmtpbmQgPT09ICdpb25pY29uJyA/IHIuY29sb3IgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBpbWFnZVNyYyhuOiBOb3RpZmljYXRpb25Eb2N1bWVudCk6IHN0cmluZyB7XG4gICAgY29uc3QgciA9IHRoaXMucmVzb2x2ZUljb24obik7XG4gICAgcmV0dXJuIHIua2luZCA9PT0gJ2ltYWdlJyB8fCByLmtpbmQgPT09ICdhdmF0YXInID8gci5zcmMgOiAnJztcbiAgfVxuXG4gIGlvbkNvbG9yKHRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghdG9rZW4pIHJldHVybiAndmFyKC0taW9uLWNvbG9yLXByaW1hcnkpJztcbiAgICByZXR1cm4gYHZhcigtLWlvbi1jb2xvci0ke3Rva2VufSlgO1xuICB9XG5cbiAgcmVsYXRpdmVUaW1lKG46IE5vdGlmaWNhdGlvbkRvY3VtZW50KTogc3RyaW5nIHtcbiAgICBjb25zdCBkID0gbi5jcmVhdGVkQXQgaW5zdGFuY2VvZiBEYXRlID8gbi5jcmVhdGVkQXQgOiBudWxsO1xuICAgIGlmICghZCkgcmV0dXJuICcnO1xuICAgIGNvbnN0IGRpZmZNcyA9IERhdGUubm93KCkgLSBkLmdldFRpbWUoKTtcbiAgICBjb25zdCBtaW4gPSBNYXRoLmZsb29yKGRpZmZNcyAvIDYwMDAwKTtcbiAgICBpZiAobWluIDwgMSkgcmV0dXJuIHRoaXMudHQoJ3RpbWVOb3cnKTtcbiAgICBpZiAobWluIDwgNjApIHJldHVybiB0aGlzLnR0KCd0aW1lTWludXRlcycpLnJlcGxhY2UoJ3tufScsIFN0cmluZyhtaW4pKTtcbiAgICBjb25zdCBoID0gTWF0aC5mbG9vcihtaW4gLyA2MCk7XG4gICAgaWYgKGggPCAyNCkgcmV0dXJuIHRoaXMudHQoJ3RpbWVIb3VycycpLnJlcGxhY2UoJ3tufScsIFN0cmluZyhoKSk7XG4gICAgY29uc3QgZGF5cyA9IE1hdGguZmxvb3IoaCAvIDI0KTtcbiAgICByZXR1cm4gdGhpcy50dCgndGltZURheXMnKS5yZXBsYWNlKCd7bn0nLCBTdHJpbmcoZGF5cykpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEFjdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgYXN5bmMgb25PcGVuKG46IE5vdGlmaWNhdGlvbkRvY3VtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYWN0aW9uLm9wZW4obik7XG4gICAgICB0aGlzLnJlc29sdmVkQ29uZmlnKCkub25Ob3RpZmljYXRpb25PcGVuPy4obiwgcmVzdWx0KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuZXJyb3JzLmhhbmRsZShlcnIsIHtcbiAgICAgICAgY29udGV4dDogJ25vdGlmaWNhdGlvbnMub3BlbicsXG4gICAgICAgIGZhbGxiYWNrS2V5OiAnb3BlbkVycm9yJyxcbiAgICAgICAgaTE4bk5hbWVzcGFjZTogdGhpcy5ucyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uTWFya0FsbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fYnVsa0J1c3koKSkgcmV0dXJuO1xuICAgIHRoaXMuX2J1bGtCdXN5LnNldCh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5ub3RpZnMubWFya0FsbEFzUmVhZCgpO1xuICAgICAgdGhpcy50b2FzdC5zaG93KHtcbiAgICAgICAgbWVzc2FnZTogdGhpcy50dCgnbWFya2VkQWxsU3VjY2VzcycpLFxuICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICBkdXJhdGlvbjogMjUwMCxcbiAgICAgICAgcG9zaXRpb246ICd0b3AnLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmVycm9ycy5oYW5kbGUoZXJyLCB7XG4gICAgICAgIGNvbnRleHQ6ICdub3RpZmljYXRpb25zLm1hcmtBbGwnLFxuICAgICAgICBmYWxsYmFja0tleTogJ21hcmtlZEFsbEVycm9yJyxcbiAgICAgICAgaTE4bk5hbWVzcGFjZTogdGhpcy5ucyxcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9idWxrQnVzeS5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIG9uTG9hZE1vcmUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2xvYWRpbmdNb3JlKCkpIHJldHVybjtcbiAgICB0aGlzLl9sb2FkaW5nTW9yZS5zZXQodHJ1ZSk7XG4gICAgLy8gU2xpY2UgdmllbmUgZGVsIGNhY2hlIGxvY2FsIOKAlCBubyBoYXkgZmV0Y2ggcmVhbCwgcGVybyB1biBicmV2ZSBzcGlubmVyXG4gICAgLy8gY29uZmlybWEgYWwgdXNlciBxdWUgZWwgY2xpY2sgcmVnaXN0csOzIHkgc3Vhdml6YSBsYSBhcGFyaWNpw7NuIGRlIGl0ZW1zLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fcGFnZVNpemUudXBkYXRlKG4gPT4gbiArIHRoaXMucGFnZVN0ZXApO1xuICAgICAgdGhpcy5fbG9hZGluZ01vcmUuc2V0KGZhbHNlKTtcbiAgICB9LCAyNTApO1xuICB9XG5cbiAgb25Hb1RvU2V0dGluZ3MoKTogdm9pZCB7XG4gICAgdGhpcy5uYXYubmF2aWdhdGVCeVVybCh0aGlzLnJlc29sdmVkQ29uZmlnKCkuc2V0dGluZ3NOb3RpZmljYXRpb25zUGF0aCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gR3JvdXBpbmcgaGVscGVyc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcml2YXRlIGJ1Y2tldE9mKG46IE5vdGlmaWNhdGlvbkRvY3VtZW50LCBub3c6IERhdGUpOiBHcm91cEtleSB7XG4gICAgY29uc3QgZCA9IG4uY3JlYXRlZEF0IGluc3RhbmNlb2YgRGF0ZSA/IG4uY3JlYXRlZEF0IDogbnVsbDtcbiAgICBpZiAoIWQpIHJldHVybiAnZWFybGllcic7XG4gICAgaWYgKGQuZ2V0RnVsbFllYXIoKSA9PT0gbm93LmdldEZ1bGxZZWFyKCkgJiYgZC5nZXRNb250aCgpID09PSBub3cuZ2V0TW9udGgoKSAmJiBkLmdldERhdGUoKSA9PT0gbm93LmdldERhdGUoKSkge1xuICAgICAgcmV0dXJuICd0b2RheSc7XG4gICAgfVxuICAgIGlmIChkLmdldEZ1bGxZZWFyKCkgPT09IG5vdy5nZXRGdWxsWWVhcigpICYmIGQuZ2V0TW9udGgoKSA9PT0gbm93LmdldE1vbnRoKCkpIHtcbiAgICAgIHJldHVybiAndGhpc01vbnRoJztcbiAgICB9XG4gICAgcmV0dXJuICdlYXJsaWVyJztcbiAgfVxuXG4gIHByaXZhdGUgdHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksIHRoaXMubnMpO1xuICB9XG59XG4iXX0=
795
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9ucy12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvbm90aWZpY2F0aW9ucy12aWV3L25vdGlmaWNhdGlvbnMtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUNMLFlBQVksRUFDWixzQkFBc0IsRUFDdEIsaUJBQWlCLEVBQ2pCLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLFVBQVUsRUFDVixtQkFBbUIsRUFDbkIsdUJBQXVCLEVBQ3ZCLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIsYUFBYSxHQUNkLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFFeEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1B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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUpULHltR0E1SkMsT0FBTywySkFDUCxnQkFBZ0IsMkVBQ2hCLGNBQWMseUVBQ2QsYUFBYSx3RUFDYixlQUFlLDBHQUNmLHVCQUF1QixtRkFDdkIsbUJBQW1CLCtFQUNuQixrQkFBa0I7OzRGQXdXVCwwQkFBMEI7a0JBblh0QyxTQUFTOytCQUNFLHdCQUF3QixjQUN0QixJQUFJLFdBQ1A7d0JBQ1AsT0FBTzt3QkFDUCxnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixlQUFlO3dCQUNmLHVCQUF1Qjt3QkFDdkIsbUJBQW1CO3dCQUNuQixrQkFBa0I7cUJBQ25CLFlBQ1M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1KVDt3REFzT1EsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJb25JY29uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7XG4gIGFsYXJtT3V0bGluZSxcbiAgY2hhdGJveEVsbGlwc2VzT3V0bGluZSxcbiAgY2hhdGJ1YmJsZU91dGxpbmUsXG4gIGNoZWNrbWFya0NpcmNsZU91dGxpbmUsXG4gIGNoZWNrbWFya0RvbmVPdXRsaW5lLFxuICBjbG91ZE9mZmxpbmVPdXRsaW5lLFxuICBjb2dPdXRsaW5lLFxuICBkb2N1bWVudFRleHRPdXRsaW5lLFxuICBub3RpZmljYXRpb25zT2ZmT3V0bGluZSxcbiAgbm90aWZpY2F0aW9uc091dGxpbmUsXG4gIGNoZXZyb25Gb3J3YXJkT3V0bGluZSxcbiAgcGVyc29uT3V0bGluZSxcbn0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuXG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9jb250YWluZXIvY29udGFpbmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXNwbGF5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvZGlzcGxheS9kaXNwbGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGV4dC90ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RpdGxlL3RpdGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlTWV0YWRhdGEgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZW1wdHktc3RhdGUvdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlRXJyb3JTdGF0ZVByb3BzIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2VtcHR5LXN0YXRlL2ZhY3RvcnknO1xuaW1wb3J0IHsgU2tlbGV0b25MYXlvdXRDb21wb25lbnQgfSBmcm9tICcuLi9za2VsZXRvbi1sYXlvdXQvc2tlbGV0b24tbGF5b3V0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25NZXRhZGF0YSwgQ29tcG9uZW50U3RhdGVzIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGgvYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkFjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoL25vdGlmaWNhdGlvbi1hY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgaW50ZXJwcmV0RXJyb3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9lcnJvcnMvaW50ZXJwcmV0LWVycm9yJztcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uRG9jdW1lbnQsIE5vdGlmaWNhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZmlyZWJhc2Uvbm90aWZpY2F0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IFBhZ2VSZWZyZXNoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BhZ2UtcmVmcmVzaC9wYWdlLXJlZnJlc2guc2VydmljZSc7XG5pbXBvcnQgeyBjcmVhdGVSZWZyZXNoYWJsZVN0cmVhbSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3JlZnJlc2hhYmxlLXN0cmVhbS9yZWZyZXNoYWJsZS1zdHJlYW0nO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdG9hc3Quc2VydmljZSc7XG5pbXBvcnQgeyBWYWx0ZWNoRXJyb3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZXJyb3JzL3ZhbHRlY2gtZXJyb3Iuc2VydmljZSc7XG5cbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNWaWV3Q29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBOT1RJRklDQVRJT05TX1ZJRVdfSTE4TiB9IGZyb20gJy4vbm90aWZpY2F0aW9ucy12aWV3LmkxOG4nO1xuXG5hZGRJY29ucyh7XG4gIGFsYXJtT3V0bGluZSxcbiAgY2hhdGJveEVsbGlwc2VzT3V0bGluZSxcbiAgY2hhdGJ1YmJsZU91dGxpbmUsXG4gIGNoZWNrbWFya0NpcmNsZU91dGxpbmUsXG4gIGNoZWNrbWFya0RvbmVPdXRsaW5lLFxuICBjbG91ZE9mZmxpbmVPdXRsaW5lLFxuICBjb2dPdXRsaW5lLFxuICBkb2N1bWVudFRleHRPdXRsaW5lLFxuICBub3RpZmljYXRpb25zT2ZmT3V0bGluZSxcbiAgbm90aWZpY2F0aW9uc091dGxpbmUsXG4gIGNoZXZyb25Gb3J3YXJkT3V0bGluZSxcbiAgcGVyc29uT3V0bGluZSxcbn0pO1xuXG5jb25zdCBERUZBVUxUX05BTUVTUEFDRSA9ICdOb3RpZmljYXRpb25zJztcbmNvbnN0IERFRkFVTFRfU0VUVElOR1NfUEFUSCA9ICcvYXBwL3NldHRpbmdzL25vdGlmaWNhdGlvbnMnO1xuY29uc3QgREVGQVVMVF9QQUdFX1NJWkUgPSAxMDtcbmNvbnN0IERFRkFVTFRfTUFYX0xPQUQgPSA1MDtcblxudHlwZSBHcm91cEtleSA9ICd0b2RheScgfCAndGhpc01vbnRoJyB8ICdlYXJsaWVyJztcblxuaW50ZXJmYWNlIE5vdGlmaWNhdGlvbkdyb3VwIHtcbiAga2V5OiBHcm91cEtleTtcbiAgbGFiZWw6IHN0cmluZztcbiAgaXRlbXM6IE5vdGlmaWNhdGlvbkRvY3VtZW50W107XG59XG5cbnR5cGUgUmVzb2x2ZWRJY29uID1cbiAgfCB7IGtpbmQ6ICdpb25pY29uJzsgbmFtZTogc3RyaW5nOyBjb2xvcj86IHN0cmluZyB9XG4gIHwgeyBraW5kOiAnaW1hZ2UnOyBzcmM6IHN0cmluZyB9XG4gIHwgeyBraW5kOiAnYXZhdGFyJzsgc3JjOiBzdHJpbmcgfTtcblxuaW50ZXJmYWNlIEljb25IaW50IHtcbiAgdHlwZT86ICdpb25pY29uJyB8ICdpbWFnZScgfCAnYXZhdGFyJztcbiAgdmFsdWU/OiBzdHJpbmc7XG4gIGNvbG9yPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIGB2YWwtbm90aWZpY2F0aW9ucy12aWV3YCDigJQgaW5ib3ggZGUgbm90aWZpY2FjaW9uZXMgZnVsbC1mZWF0dXJlIGF1dG9jb250ZW5pZG9cbiAqIChvcmdhbmlzbSkuIFByb21vdmlkbyBkZXNkZSBgc2hvd2Nhc2VgIGJham8gZWwgcHJvY2VzbyBkZSBBRFItMDIxLlxuICpcbiAqIFNlcGFyYWRvIGRlIGAvYXBwL3NldHRpbmdzL25vdGlmaWNhdGlvbnNgIChxdWUgY29udHJvbGEgcGVybWlzbyBGQ00gKyBtYXN0ZXJcbiAqIHRvZ2dsZSkuIEFxdcOtIGVsIHVzZXIgbGVlL2FicmUvbWFyY2EtbGXDrWRhcyBzdXMgbWVuc2FqZXMuXG4gKlxuICogLSAqKlN0cmVhbSByZWFsLXRpbWUqKiB2w61hIGBOb3RpZmljYXRpb25zU2VydmljZS5nZXRBbGwobWF4TG9hZClgIGVudnVlbHRvIGVuXG4gKiAgIGBjcmVhdGVSZWZyZXNoYWJsZVN0cmVhbWAgKGdhdGVhZG8gcG9yIGBmaXJlYmFzZUF1dGhSZWFkeWAsIHJldHJ5IGNvcnRvLFxuICogICBgZmlyc3RFbWl0VGltZW91dE1zOiAxNTAwMGApLiBFc3RhZG9zOiBsb2FkaW5nIChza2VsZXRvbiksIGVycm9yXG4gKiAgIChgdmFsLWVtcHR5LXN0YXRlYCArIHJlaW50ZW50YXIpLCBlbXB0eSAoYHZhbC1lbXB0eS1zdGF0ZWAgKyBDVEEpLCBkYXRhXG4gKiAgIChsaXN0YSBhZ3J1cGFkYSBIb3kgLyBFc3RlIG1lcyAvIEFudGVyaW9yZXMpLlxuICogLSAqKkFicmlyKiogdW5hIG5vdGlmIOKGkiBgTm90aWZpY2F0aW9uQWN0aW9uU2VydmljZS5vcGVuKClgIChtYXJrUmVhZCArXG4gKiAgIHN3aXRjaC1vcmcgKyBuYXZlZ2FyL2hhbmRvZmYgY3Jvc3MtYXBwKS4gSG9vayBgb25Ob3RpZmljYXRpb25PcGVuYCBvcGNpb25hbC5cbiAqIC0gKipNYXJjYXIgdG9kYXMgY29tbyBsZcOtZGFzKiogKGdhdGVhZG8gcG9yIGBlbmFibGVNYXJrQWxsYCkuXG4gKiAtICoqQ1RBIHB1c2gtb2ZmKiogY3VhbmRvIGVsIHBlcm1pc28gZGVsIG5hdmVnYWRvciBubyBlc3TDoSBjb25jZWRpZG8gKGdhdGVhZG9cbiAqICAgcG9yIGBzaG93UHVzaE9mZkN0YWApOyBuYXZlZ2EgYSBgc2V0dGluZ3NOb3RpZmljYXRpb25zUGF0aGAuXG4gKiAtICoqUGFnaW5hY2nDs24gc29mdCoqIOKAlCBzbGljZSBsb2NhbCAoYHBhZ2VTaXplYCwgK2BwYWdlU2l6ZWAgcG9yIGNsaWNrKSBzb2JyZSBlbFxuICogICBjYWNoZSBkZWwgc3RyZWFtOyBlbCB0b3BlIGRlIGZldGNoIGVzIGBtYXhMb2FkYC5cbiAqIC0gKippMThuIGF1dG8tcmVnaXN0cmFkbyoqIGVzL2VuIGJham8gYGkxOG5OYW1lc3BhY2VgIChkZWZhdWx0IGBOb3RpZmljYXRpb25zYCkuXG4gKlxuICogTk8gcmVuZGVyaXphIGlvbi1jb250ZW50IOKAlCB2aXZlIGRlbnRybyBkZSB2YWwtcGFnZS13cmFwcGVyLiBgUm91dGVyYCB5XG4gKiBgQWN0aXZhdGVkUm91dGVgIHNlIGlueWVjdGFuIGB7IG9wdGlvbmFsOiB0cnVlIH1gIOKGkiBmdW5jaW9uYSBzaW4gcm91dGVyXG4gKiAoZW1iZWJpZGEgLyBTdG9yeWJvb2spLiBFbCBmb3J3YXJkLWNvbXBhdCBpY29uIHJlc29sdmVyIGxlZSBgbm90aWYucGF5bG9hZC5pY29uYFxuICogc2kgZXhpc3RlIChgeyB0eXBlLCB2YWx1ZSwgY29sb3I/IH1gKSwgY2FlIGEgdW4gbWFwYSBwb3IgYG5vdGlmLnR5cGVgLCBsdWVnbyBhXG4gKiBgbm90aWZpY2F0aW9ucy1vdXRsaW5lYC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLW5vdGlmaWNhdGlvbnMtdmlldycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBJb25JY29uLFxuICAgIERpc3BsYXlDb21wb25lbnQsXG4gICAgVGl0bGVDb21wb25lbnQsXG4gICAgVGV4dENvbXBvbmVudCxcbiAgICBCdXR0b25Db21wb25lbnQsXG4gICAgU2tlbGV0b25MYXlvdXRDb21wb25lbnQsXG4gICAgRW1wdHlTdGF0ZUNvbXBvbmVudCxcbiAgICBDb250YWluZXJDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPHZhbC1jb250YWluZXIgW3Byb3BzXT1cInsgc2l6ZTogJ21kJywgcGFkZGluZzogJ25vbmUnIH1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwYWdlXCI+XG4gICAgICAgIDxoZWFkZXIgY2xhc3M9XCJwYWdlLWhlYWRlclwiPlxuICAgICAgICAgIDx2YWwtZGlzcGxheSBbcHJvcHNdPVwieyBzaXplOiAnc21hbGwnLCBjb2xvcjogJ2RhcmsnLCBjb250ZW50OiBwYWdlVGl0bGUoKSB9XCIgLz5cbiAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICBzaXplOiAnbGFyZ2UnLFxuICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgY29udGVudDogcGFnZURlc2NyaXB0aW9uKCksXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIEBpZiAoc2hvd01hcmtBbGwoKSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDx2YWwtYnV0dG9uIFtwcm9wc109XCJtYXJrQWxsQnV0dG9uUHJvcHMoKVwiIChjbGljayk9XCJvbk1hcmtBbGwoKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgIEBpZiAocmVzb2x2ZWRDb25maWcoKS5zaG93UHVzaE9mZkN0YSAmJiAhcHVzaEVuYWJsZWQoKSkge1xuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwibm90aWYtY3RhXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gY2xhc3M9XCJub3RpZi1jdGFfX2ljb25cIiBuYW1lPVwibm90aWZpY2F0aW9ucy1vZmYtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWYtY3RhX19ib2R5XCI+XG4gICAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICBjb250ZW50OiBjdGFUaXRsZSgpLFxuICAgICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGN0YUhpbnQoKSxcbiAgICAgICAgICAgICAgICAgIHNpemU6ICdzbWFsbCcsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cImN0YUJ1dHRvblByb3BzKClcIiAoY2xpY2spPVwib25Hb1RvU2V0dGluZ3MoKVwiIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChsb2FkaW5nKCkpIHtcbiAgICAgICAgICA8dmFsLXNrZWxldG9uLWxheW91dCBbcHJvcHNdPVwieyBwcmVzZXQ6ICdsaXN0Jywgcm93czogNiB9XCIgLz5cbiAgICAgICAgfSBAZWxzZSBpZiAoZXJyb3JTdGF0ZSgpKSB7XG4gICAgICAgICAgPHZhbC1lbXB0eS1zdGF0ZSBbcHJvcHNdPVwiZXJyb3JTdGF0ZSgpIVwiIC8+XG4gICAgICAgIH0gQGVsc2UgaWYgKGFsbE5vdGlmcygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIDx2YWwtZW1wdHktc3RhdGUgW3Byb3BzXT1cImVtcHR5U3RhdGVQcm9wcygpXCIgLz5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgQGZvciAoZ3JvdXAgb2YgZ3JvdXBzKCk7IHRyYWNrIGdyb3VwLmtleSkge1xuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJncm91cFwiPlxuICAgICAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICBjb250ZW50OiBncm91cC5sYWJlbCxcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibm90aWYtbGlzdFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKG4gb2YgZ3JvdXAuaXRlbXM7IHRyYWNrIG4uaWQpIHtcbiAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5vdGlmXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm5vdGlmLS11bnJlYWRdPVwiIW4uaXNSZWFkXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm5vdGlmLS1yZWFkXT1cIm4uaXNSZWFkXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm5vdGlmLS1hY3Rpb25hYmxlXT1cIiEhbi5hY3Rpb25Sb3V0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnJvbGVdPVwibi5hY3Rpb25Sb3V0ZSA/ICdidXR0b24nIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIm4uYWN0aW9uUm91dGUgPyAnMCcgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJub3RpZmljYXRpb25BcmlhTGFiZWwobilcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ob3RpZmljYXRpb25Sb3dDbGljayhuKVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uTm90aWZpY2F0aW9uS2V5ZG93bigkZXZlbnQsIG4pXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwib25Ob3RpZmljYXRpb25LZXlkb3duKCRldmVudCwgbilcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWZfX2ljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICBAc3dpdGNoIChyZXNvbHZlSWNvbihuKS5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ2lvbmljb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImlvbmljb25OYW1lKG4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiaW9uQ29sb3IoaW9uaWNvbkNvbG9yKG4pKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBjYXNlICgnaW1hZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZVNyYyhuKVwiIGFsdD1cIlwiIGxvYWRpbmc9XCJsYXp5XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBjYXNlICgnYXZhdGFyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwibm90aWZfX2F2YXRhclwiIFtzcmNdPVwiaW1hZ2VTcmMobilcIiBhbHQ9XCJcIiBsb2FkaW5nPVwibGF6eVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWZfX2JvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWZfX2hlYWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub3RpZl9fdGl0bGUtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIW4uaXNSZWFkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJub3RpZl9fdW5yZWFkLWRvdFwiIFthdHRyLmFyaWEtbGFiZWxdPVwidW5yZWFkTGFiZWwoKVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dmFsLXRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5vdGlmX190aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IG4udGl0bGUgfHwgJ+KAlCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2xkOiAhbi5pc1JlYWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIW4uaXNSZWFkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJub3RpZl9fdW5yZWFkLWJhZGdlXCI+e3sgdW5yZWFkTGFiZWwoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5vdGlmX190aW1lXCI+e3sgcmVsYXRpdmVUaW1lKG4pIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAobi5ib2R5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5vdGlmX190ZXh0XCIgW2NsYXNzLm5vdGlmX190ZXh0LS1jbGFtcGVkXT1cIiFpc0V4cGFuZGVkKG4uaWQpICYmIGlzTG9uZyhuLmJvZHkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG4uYm9keSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpc0xvbmcobi5ib2R5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibm90aWZfX2V4cGFuZFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25Ub2dnbGVFeHBhbmQoJGV2ZW50LCBuLmlkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGlzRXhwYW5kZWQobi5pZCkgPyBzZWVMZXNzKCkgOiBzZWVNb3JlKCkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAobi5hY3Rpb25Sb3V0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmX19hY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cIm9wZW5CdXR0b25Qcm9wcygpXCIgKGNsaWNrKT1cIm9uT3BlbkJ1dHRvbkNsaWNrKCRldmVudCwgbilcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIEBpZiAoaGFzTW9yZSgpKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWFjdGlvbnMgcm93LWFjdGlvbnMtLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwibG9hZE1vcmVCdXR0b25Qcm9wcygpXCIgKGNsaWNrKT1cIm9uTG9hZE1vcmUoKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvdmFsLWNvbnRhaW5lcj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLyogQW5jaG8geSBjcmVjaW1pZW50byBjb24gZWwgcmFpbCBjb2xhcHNhZG8gbG9zIGRhIHZhbC1jb250YWluZXIgKHNpemVcbiAgICAgICAgICdtZCcpLCBubyBDU1MgbG9jYWw6IHZlciBjb250YWluZXIuY29tcG9uZW50LnNjc3MuICovXG4gICAgICAucGFnZSB7XG4gICAgICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgICAgIH1cbiAgICAgIC5wYWdlLWhlYWRlciB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgICB9XG4gICAgICAucm93LWFjdGlvbnMge1xuICAgICAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgICAgfVxuICAgICAgLnJvdy1hY3Rpb25zLS1jZW50ZXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgbWFyZ2luLXRvcDogMjBweDtcbiAgICAgIH1cbiAgICAgIC5yb3ctYWN0aW9ucy0tZW5kIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICAgICAgbWFyZ2luLXRvcDogOHB4O1xuICAgICAgfVxuXG4gICAgICAubm90aWYtY3RhIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZ2FwOiAxMnB4O1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgcGFkZGluZzogMTRweCAxNnB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgICAvKiBTdGVwLSogbm8gaW52aWVydGUgZW4gZGFyaywgdGV4dG8gbGlnaHQgKyBiZyBsaWdodCA9IGludmlzaWJsZS5cbiAgICAgICAgICAgbGlnaHQvbGlnaHQtc2hhZGUgc2kgZmxpcHBhbiBjb24gZWwgcGFsZXR0ZSBkYXJrIGRlIElvbmljLiAqL1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1pb24tY29sb3ItbGlnaHQtc2hhZGUsIHJnYmEoMCwgMCwgMCwgMC4wOCkpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxNHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItbGlnaHQpO1xuICAgICAgfVxuICAgICAgLm5vdGlmLWN0YV9faWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrLCAjMWExYTFhKTtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIG1hcmdpbi10b3A6IDJweDtcbiAgICAgIH1cbiAgICAgIC5ub3RpZi1jdGFfX2JvZHkge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDJweDtcbiAgICAgIH1cblxuICAgICAgLmdyb3VwIHtcbiAgICAgICAgcGFkZGluZzogMTJweCAwO1xuICAgICAgfVxuICAgICAgLmdyb3VwICsgLmdyb3VwIHtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXZhbC1ib3JkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wOCkpO1xuICAgICAgfVxuXG4gICAgICAubm90aWYtbGlzdCB7XG4gICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIG1hcmdpbjogMTJweCAwIDA7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTBweDtcbiAgICAgIH1cbiAgICAgIC5ub3RpZiB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiA0NHB4IDFmcjtcbiAgICAgICAgZ2FwOiAxMnB4O1xuICAgICAgICBwYWRkaW5nOiAxNHB4IDEycHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgICBiYWNrZ3JvdW5kIDE0MG1zIGVhc2UsXG4gICAgICAgICAgYm9yZGVyLWNvbG9yIDE0MG1zIGVhc2UsXG4gICAgICAgICAgYm94LXNoYWRvdyAxNDBtcyBlYXNlO1xuICAgICAgfVxuICAgICAgLm5vdGlmLS1hY3Rpb25hYmxlIHtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgfVxuICAgICAgLm5vdGlmLS1hY3Rpb25hYmxlOmhvdmVyLFxuICAgICAgLm5vdGlmLS1hY3Rpb25hYmxlOmZvY3VzLXZpc2libGUge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItbGlnaHQsIHJnYmEoMCwgMCwgMCwgMC4wNCkpO1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXZhbC1ib3JkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wOCkpO1xuICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgfVxuICAgICAgLm5vdGlmLS11bnJlYWQge1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LXJnYiwgNTYsIDEyOCwgMjU1KSwgMC4wNyk7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1pb24tY29sb3ItcHJpbWFyeS1yZ2IsIDU2LCAxMjgsIDI1NSksIDAuMTgpO1xuICAgICAgfVxuICAgICAgLm5vdGlmLS1yZWFkIC5ub3RpZl9faWNvbiB7XG4gICAgICAgIG9wYWNpdHk6IDAuNzI7XG4gICAgICB9XG4gICAgICAubm90aWZfX2ljb24ge1xuICAgICAgICB3aWR0aDogNDRweDtcbiAgICAgICAgaGVpZ2h0OiA0NHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItbGlnaHQsIHJnYmEoMCwgMCwgMCwgMC4wNikpO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgfVxuICAgICAgLm5vdGlmX19pY29uIGlvbi1pY29uIHtcbiAgICAgICAgZm9udC1zaXplOiAyMnB4O1xuICAgICAgfVxuICAgICAgLm5vdGlmX19pY29uIGltZyB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIG9iamVjdC1maXQ6IGNvdmVyO1xuICAgICAgfVxuICAgICAgLm5vdGlmX19hdmF0YXIge1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICB9XG5cbiAgICAgIC5ub3RpZl9fYm9keSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogNHB4O1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICB9XG4gICAgICAubm90aWZfX2hlYWQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICBnYXA6IDEycHg7XG4gICAgICB9XG4gICAgICAubm90aWZfX3RpdGxlLXJvdyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICB9XG4gICAgICAubm90aWZfX3RpdGxlIHtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuICAgICAgLm5vdGlmX191bnJlYWQtZG90IHtcbiAgICAgICAgd2lkdGg6IDhweDtcbiAgICAgICAgaGVpZ2h0OiA4cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBmbGV4OiAwIDAgYXV0bztcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLXByaW1hcnksICMzODgwZmYpO1xuICAgICAgfVxuICAgICAgLm5vdGlmX191bnJlYWQtYmFkZ2Uge1xuICAgICAgICBmbGV4OiAwIDAgYXV0bztcbiAgICAgICAgcGFkZGluZzogMnB4IDdweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMzU7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeS1jb250cmFzdCwgI2ZmZik7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LCAjMzg4MGZmKTtcbiAgICAgIH1cbiAgICAgIC5ub3RpZl9fdGltZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0sICM5Mjk0OWMpO1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIH1cbiAgICAgIC5ub3RpZl9fdGV4dCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMS40O1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmssICMxYTFhMWEpO1xuICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG4gICAgICB9XG4gICAgICAubm90aWZfX3RleHQtLWNsYW1wZWQge1xuICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICAgICAgLXdlYmtpdC1saW5lLWNsYW1wOiAyO1xuICAgICAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgfVxuICAgICAgLm5vdGlmX19leHBhbmQge1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrLCAjMWExYTFhKTtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICAgIH1cbiAgICAgIC5ub3RpZl9fYWN0aW9uIHtcbiAgICAgICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7XG4gICAgICAgIG1hcmdpbi10b3A6IDRweDtcbiAgICAgIH1cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA1MjBweCkge1xuICAgICAgICAubm90aWYge1xuICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogNDBweCAxZnI7XG4gICAgICAgICAgZ2FwOiAxMHB4O1xuICAgICAgICAgIHBhZGRpbmc6IDEycHggMTBweDtcbiAgICAgICAgfVxuICAgICAgICAubm90aWZfX2ljb24ge1xuICAgICAgICAgIHdpZHRoOiA0MHB4O1xuICAgICAgICAgIGhlaWdodDogNDBweDtcbiAgICAgICAgfVxuICAgICAgICAubm90aWZfX2hlYWQge1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZ2FwOiA0cHg7XG4gICAgICAgIH1cbiAgICAgICAgLm5vdGlmX191bnJlYWQtYmFkZ2Uge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICAgICAgLm5vdGlmX190aW1lIHtcbiAgICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uc1ZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgbmF2ID0gaW5qZWN0KE5hdmlnYXRpb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBub3RpZnMgPSBpbmplY3QoTm90aWZpY2F0aW9uc1NlcnZpY2UpO1xuICBwcml2YXRlIGFjdGlvbiA9IGluamVjdChOb3RpZmljYXRpb25BY3Rpb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0b2FzdCA9IGluamVjdChUb2FzdFNlcnZpY2UpO1xuICBwcml2YXRlIGVycm9ycyA9IGluamVjdChWYWx0ZWNoRXJyb3JTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBhdXRoID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBwYWdlUmVmcmVzaCA9IGluamVjdChQYWdlUmVmcmVzaFNlcnZpY2UpO1xuICAvLyBgQWN0aXZhdGVkUm91dGVgIG9wY2lvbmFsIOKGkiBsYSB2aXN0YSBmdW5jaW9uYSBlbWJlYmlkYSAvIGVuIFN0b3J5Ym9vayBzaW5cbiAgLy8gcm91dGVyIChzb2xvIGxvIHVzYSBwYXJhIGxlZXIgZWwgcm91dGUgZGF0YSBkZSBjb25maWcgY29tbyBmYWxsYmFjaykuIExhXG4gIC8vIG5hdmVnYWNpw7NuIHZhIHBvciBgTmF2aWdhdGlvblNlcnZpY2VgICh3cmFwcGVyIG9wY2lvbmFsIHNvYnJlIGBSb3V0ZXJgKS5cbiAgcHJpdmF0ZSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAvKipcbiAgICogQ29uZmlnIHbDrWEgQElucHV0IChvYmplY3QtZmlyc3QpLiBTaSBubyBzZSBwYXNhLCBzZSBjYWUgYWwgcm91dGUgZGF0YVxuICAgKiBgbm90aWZpY2F0aW9uc0NvbmZpZ2AgKHBvYmxhZG8gcG9yIGBwcm92aWRlVmFsdGVjaE5vdGlmaWNhdGlvbnNSb3V0ZXNgKS5cbiAgICogYHJlc29sdmVkQ29uZmlnYCBtZXJnZWEgY29uIGxvcyBkZWZhdWx0cyDigJQgYEBJbnB1dGAgZ2FuYSBzb2JyZSByb3V0ZSBkYXRhLlxuICAgKi9cbiAgQElucHV0KCkgY29uZmlnPzogTm90aWZpY2F0aW9uc1ZpZXdDb25maWc7XG5cbiAgcmVhZG9ubHkgcmVzb2x2ZWRDb25maWcgPSBjb21wdXRlZDxcbiAgICBSZXF1aXJlZDxPbWl0PE5vdGlmaWNhdGlvbnNWaWV3Q29uZmlnLCAnb25Ob3RpZmljYXRpb25PcGVuJz4+ICYgUGljazxOb3RpZmljYXRpb25zVmlld0NvbmZpZywgJ29uTm90aWZpY2F0aW9uT3Blbic+XG4gID4oKCkgPT4ge1xuICAgIGNvbnN0IGZyb21Sb3V0ZSA9ICh0aGlzLnJvdXRlPy5zbmFwc2hvdC5kYXRhWydub3RpZmljYXRpb25zQ29uZmlnJ10gPz8ge30pIGFzIE5vdGlmaWNhdGlvbnNWaWV3Q29uZmlnO1xuICAgIGNvbnN0IG1lcmdlZDogTm90aWZpY2F0aW9uc1ZpZXdDb25maWcgPSB7IC4uLmZyb21Sb3V0ZSwgLi4uKHRoaXMuY29uZmlnID8/IHt9KSB9O1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UHVzaE9mZkN0YTogbWVyZ2VkLnNob3dQdXNoT2ZmQ3RhID8/IHRydWUsXG4gICAgICBlbmFibGVNYXJrQWxsOiBtZXJnZWQuZW5hYmxlTWFya0FsbCA/PyB0cnVlLFxuICAgICAgc2V0dGluZ3NOb3RpZmljYXRpb25zUGF0aDogbWVyZ2VkLnNldHRpbmdzTm90aWZpY2F0aW9uc1BhdGggPz8gREVGQVVMVF9TRVRUSU5HU19QQVRILFxuICAgICAgaTE4bk5hbWVzcGFjZTogbWVyZ2VkLmkxOG5OYW1lc3BhY2UgPz8gREVGQVVMVF9OQU1FU1BBQ0UsXG4gICAgICBwYWdlU2l6ZTogbWVyZ2VkLnBhZ2VTaXplID8/IERFRkFVTFRfUEFHRV9TSVpFLFxuICAgICAgbWF4TG9hZDogbWVyZ2VkLm1heExvYWQgPz8gREVGQVVMVF9NQVhfTE9BRCxcbiAgICAgIG9uTm90aWZpY2F0aW9uT3BlbjogbWVyZ2VkLm9uTm90aWZpY2F0aW9uT3BlbixcbiAgICB9O1xuICB9KTtcblxuICAvKiogTmFtZXNwYWNlIGkxOG4gcmVzdWVsdG8gKGNhcHR1cmFkbyBwYXJhIGxsYW1hZGFzIG5vLXJlYWN0aXZhcykuICovXG4gIHByaXZhdGUgZ2V0IG5zKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZWRDb25maWcoKS5pMThuTmFtZXNwYWNlO1xuICB9XG5cbiAgLyoqIFBhc28gZGUgcGFnaW5hY2nDs24gc29mdCAocmV2ZWxhICtOIHBvciBcImNhcmdhciBtw6FzXCIpLiAqL1xuICBwcml2YXRlIGdldCBwYWdlU3RlcCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVkQ29uZmlnKCkucGFnZVNpemU7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9leHBhbmRlZCA9IHNpZ25hbDxTZXQ8c3RyaW5nPj4obmV3IFNldCgpKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZVNpemUgPSBzaWduYWwodGhpcy5yZXNvbHZlZENvbmZpZygpLnBhZ2VTaXplKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYnVsa0J1c3kgPSBzaWduYWwoZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2FkaW5nTW9yZSA9IHNpZ25hbChmYWxzZSk7XG5cbiAgLyoqXG4gICAqIFB1c2ggYWN0aXZhZG8gPSBwZXJtaXNvIGRlbCBuYXZlZ2Fkb3IgZW4gYGdyYW50ZWRgLiBTaSBOTyBlc3TDoSBhY3RpdmFkbyxcbiAgICogZWwgdXNlciBwdWVkZSBsZWVyIGVsIGluYm94IChGaXJlc3RvcmUpIHBlcm8gTk8gcmVjaWJpcsOhIHB1c2ggZW4gc3VcbiAgICogZGlzcG9zaXRpdm8g4oaSIG1vc3RyYW1vcyB1bmEgY2FyZCBxdWUgbG8gaW52aXRhIGEgaXIgYSBjb25maWd1cmFjacOzbi5cbiAgICogU2UgZXZhbMO6YSBlbiBjYWRhIG1vbnRhamUgZGUgbGEgdmlzdGEuXG4gICAqL1xuICByZWFkb25seSBwdXNoRW5hYmxlZCA9IHNpZ25hbCh0aGlzLmF1dGguZ2V0Tm90aWZpY2F0aW9uUGVybWlzc2lvblN0YXRlKCkgPT09ICdncmFudGVkJyk7XG5cbiAgLyoqXG4gICAqIFN0cmVhbSBmaXJlc3RvcmUgcmVhbC10aW1lIHbDrWEgZWwgaGVscGVyIGVzdMOhbmRhciBgY3JlYXRlUmVmcmVzaGFibGVTdHJlYW1gXG4gICAqIChtb2RvIHJlYWwtdGltZTogZmFjdG9yeSBkZXZ1ZWx2ZSB1biBsaXN0ZW5lciB2aXZvIGBub3RpZnMuZ2V0QWxsKG1heExvYWQpYCkuXG4gICAqXG4gICAqIEVsIGhlbHBlciBnYXRlYSBsYSBwcmltZXJhIHN1c2NyaXBjacOzbiBwb3IgYGZpcmViYXNlQXV0aFJlYWR5YCwgYXBsaWNhIHVuXG4gICAqIGByZXRyeWAgY29ydG8gY29uIGJhY2tvZmYgeSwgdHJhcyBhZ290YXIgcmVpbnRlbnRvcywgZW1pdGUgZWwgZmFsbGJhY2sgKGBbXWApXG4gICAqIHkgbWFyY2EgYGVycm9yYCDigJQgZXN0YWRvIGRlIGVycm9yIGVuIFVJLCBubyBza2VsZXRvbiBpbmZpbml0by4gYHJlbG9hZCgpYFxuICAgKiByZS1zdXNjcmliZSBlbCBzdHJlYW0gY29tcGxldG8gKGxvIHVzYSBlbCBwdWxsLXRvLXJlZnJlc2gpLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtID0gY3JlYXRlUmVmcmVzaGFibGVTdHJlYW08Tm90aWZpY2F0aW9uRG9jdW1lbnRbXT4oXG4gICAgKCkgPT4gdGhpcy5ub3RpZnMuZ2V0QWxsKHRoaXMucmVzb2x2ZWRDb25maWcoKS5tYXhMb2FkKSxcbiAgICB7XG4gICAgICBmYWxsYmFjazogW10sXG4gICAgICAvLyBgbm90aWZzLmdldEFsbCgpYCBZQSBnYXRlYSBpbnRlcm5hbWVudGUgcG9yIGBmaXJlYmFzZUF1dGhSZWFkeWAuIFNpIGVsXG4gICAgICAvLyBzdHJlYW0gdGFtYmnDqW4gZ2F0ZWFyYSwgc2Vyw61hbiBET1MgZXNwZXJhcyBkZSBhdXRoIGFwaWxhZGFzLlxuICAgICAgZ2F0ZU9uRmlyZWJhc2VBdXRoOiBmYWxzZSxcbiAgICAgIC8vIENvbGQgc3RhcnQgZGUgUFdBIGVuIGlPUyBwdWVkZSBwYXNhciBkZSA4cyBlbiByZWRlcyBsZW50YXM7IGNvbiAxNXNcbiAgICAgIC8vIGV2aXRhbW9zIGVsIGZhbHNvIGVzdGFkbyBkZSBlcnJvci5cbiAgICAgIGZpcnN0RW1pdFRpbWVvdXRNczogMTUwMDAsXG4gICAgfVxuICApO1xuXG4gIC8qKiBUcnVlIHNpIGVsIHN0cmVhbSBmYWxsw7MgdHJhcyBhZ290YXIgcmVpbnRlbnRvcyDihpIgbXVlc3RyYSBlc3RhZG8gZGUgZXJyb3IuICovXG4gIHJlYWRvbmx5IHN0cmVhbUVycm9yID0gdGhpcy5fc3RyZWFtLmVycm9yO1xuXG4gIHJlYWRvbmx5IGxvYWRpbmcgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9zdHJlYW0uZGF0YSgpID09PSBudWxsKTtcblxuICAvKipcbiAgICogTm90aWZzIHJlYWxlcyBtb3N0cmFkYXMuIEZpbHRyYW1vcyBkb2NzIHNpbiB0w610dWxvIFkgc2luIGJvZHkg4oCUIHNvbiBydWlkb1xuICAgKiAodMOtcGljYW1lbnRlIHNlbnRpbmVsL3N5c3RlbSB3cml0ZXMgcHJlLXNjaGVtYSBjb24gdGl0bGUvYm9keSBvcGNpb25hbGVzKS5cbiAgICovXG4gIHJlYWRvbmx5IGFsbE5vdGlmcyA9IGNvbXB1dGVkPE5vdGlmaWNhdGlvbkRvY3VtZW50W10+KCgpID0+XG4gICAgKHRoaXMuX3N0cmVhbS5kYXRhKCkgPz8gW10pLmZpbHRlcihuID0+ICEhKG4udGl0bGUgJiYgbi50aXRsZS50cmltKCkpIHx8ICEhKG4uYm9keSAmJiBuLmJvZHkudHJpbSgpKSlcbiAgKTtcbiAgcmVhZG9ubHkgaGFzTW9yZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYWxsTm90aWZzKCkubGVuZ3RoID4gdGhpcy5fcGFnZVNpemUoKSk7XG4gIHJlYWRvbmx5IHNob3dNYXJrQWxsID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5yZXNvbHZlZENvbmZpZygpLmVuYWJsZU1hcmtBbGwgJiYgIXRoaXMubG9hZGluZygpICYmIHRoaXMuYWxsTm90aWZzKCkuc29tZShuID0+ICFuLmlzUmVhZClcbiAgKTtcblxuICAvKiogU3ViLWNvbmp1bnRvIHBhZ2luYWRvLCBhZ3J1cGFkbyBwb3IgcGVyw61vZG8uICovXG4gIHJlYWRvbmx5IGdyb3VwcyA9IGNvbXB1dGVkPE5vdGlmaWNhdGlvbkdyb3VwW10+KCgpID0+IHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuYWxsTm90aWZzKCkuc2xpY2UoMCwgdGhpcy5fcGFnZVNpemUoKSk7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBidWNrZXRzOiBSZWNvcmQ8R3JvdXBLZXksIE5vdGlmaWNhdGlvbkRvY3VtZW50W10+ID0ge1xuICAgICAgdG9kYXk6IFtdLFxuICAgICAgdGhpc01vbnRoOiBbXSxcbiAgICAgIGVhcmxpZXI6IFtdLFxuICAgIH07XG4gICAgZm9yIChjb25zdCBuIG9mIGl0ZW1zKSB7XG4gICAgICBidWNrZXRzW3RoaXMuYnVja2V0T2Yobiwgbm93KV0ucHVzaChuKTtcbiAgICB9XG4gICAgY29uc3Qgb3V0OiBOb3RpZmljYXRpb25Hcm91cFtdID0gW107XG4gICAgaWYgKGJ1Y2tldHMudG9kYXkubGVuZ3RoKSB7XG4gICAgICBvdXQucHVzaCh7IGtleTogJ3RvZGF5JywgbGFiZWw6IHRoaXMudHQoJ2dyb3VwVG9kYXknKSwgaXRlbXM6IGJ1Y2tldHMudG9kYXkgfSk7XG4gICAgfVxuICAgIGlmIChidWNrZXRzLnRoaXNNb250aC5sZW5ndGgpIHtcbiAgICAgIG91dC5wdXNoKHtcbiAgICAgICAga2V5OiAndGhpc01vbnRoJyxcbiAgICAgICAgbGFiZWw6IHRoaXMudHQoJ2dyb3VwVGhpc01vbnRoJyksXG4gICAgICAgIGl0ZW1zOiBidWNrZXRzLnRoaXNNb250aCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoYnVja2V0cy5lYXJsaWVyLmxlbmd0aCkge1xuICAgICAgb3V0LnB1c2goeyBrZXk6ICdlYXJsaWVyJywgbGFiZWw6IHRoaXMudHQoJ2dyb3VwRWFybGllcicpLCBpdGVtczogYnVja2V0cy5lYXJsaWVyIH0pO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9KTtcblxuICByZWFkb25seSBwYWdlVGl0bGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnR0KCdwYWdlVGl0bGUnKSk7XG4gIHJlYWRvbmx5IHBhZ2VEZXNjcmlwdGlvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ3BhZ2VEZXNjcmlwdGlvbicpKTtcblxuICAvLyBDVEEgXCJhY3RpdmEgbGFzIG5vdGlmaWNhY2lvbmVzIHB1c2hcIiDigJQgdmlzaWJsZSBjdWFuZG8gcHVzaEVuYWJsZWQoKSBlcyBmYWxzZS5cbiAgcmVhZG9ubHkgY3RhVGl0bGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnR0KCdwdXNoT2ZmVGl0bGUnKSk7XG4gIHJlYWRvbmx5IGN0YUhpbnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnR0KCdwdXNoT2ZmSGludCcpKTtcbiAgcmVhZG9ubHkgY3RhQnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdwdXNoT2ZmQ3RhJyksXG4gICAgY29sb3I6ICdkYXJrJyxcbiAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgc2l6ZTogJ3NtYWxsJyxcbiAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICB0eXBlOiAnYnV0dG9uJyxcbiAgfSkpO1xuXG4gIC8qKlxuICAgKiBFc3RhZG8gZGUgZXJyb3IgZGUgY2FyZ2E6IGNvbnZpZXJ0ZSBlbCBlcnJvciBkZWwgc3RyZWFtIGVuXG4gICAqIGBFbXB0eVN0YXRlTWV0YWRhdGFgIHZpYSBlbCBoZWxwZXIgY2Fuw7NuaWNvIGBjcmVhdGVFcnJvclN0YXRlUHJvcHNgLlxuICAgKiBFbCBoZWxwZXIgZGVjaWRlIHZhcmlhbnRlIChgb2ZmbGluZWAgdnMgYGVycm9yYCkgcG9yIGBpc05ldHdvcmtgLlxuICAgKiBOdWxsIGN1YW5kbyBlbCBzdHJlYW0gbm8gaGEgZmFsbGFkby5cbiAgICovXG4gIHJlYWRvbmx5IGVycm9yU3RhdGUgPSBjb21wdXRlZDxFbXB0eVN0YXRlTWV0YWRhdGEgfCBudWxsPigoKSA9PiB7XG4gICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICBjb25zdCBlcnIgPSB0aGlzLnN0cmVhbUVycm9yKCk7XG4gICAgaWYgKCFlcnIpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBjcmVhdGVFcnJvclN0YXRlUHJvcHMoZXJyLCB7XG4gICAgICB0aXRsZToge1xuICAgICAgICBvZmZsaW5lOiB0aGlzLnR0KCdvZmZsaW5lVGl0bGUnKSxcbiAgICAgICAgZXJyb3I6IHRoaXMudHQoJ2xvYWRFcnJvclRpdGxlJyksXG4gICAgICB9LFxuICAgICAgZGVzY3JpcHRpb246IHtcbiAgICAgICAgb2ZmbGluZTogdGhpcy50dCgnb2ZmbGluZUhpbnQnKSxcbiAgICAgICAgZXJyb3I6IGludGVycHJldEVycm9yKGVycikubWVzc2FnZSB8fCB0aGlzLnR0KCdsb2FkRXJyb3JIaW50JyksXG4gICAgICB9LFxuICAgICAgcmV0cnlMYWJlbDogdGhpcy50dCgncmV0cnlDdGEnKSxcbiAgICAgIG9uUmV0cnk6ICgpID0+IHRoaXMuX3N0cmVhbS5yZWxvYWQoKSxcbiAgICAgIHJldHJ5aW5nOiB0aGlzLmxvYWRpbmcoKSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEVzdGFkbyB2YWPDrW8gKGxpc3RhIHJlYWwgPSAwIG5vdGlmaWNhY2lvbmVzLCBzaW4gZXJyb3IgZGUgY2FyZ2EpLlxuICAgKiBTZSBjb25zdHJ1eWUgbWFudWFsbWVudGUgY29uIGB2YXJpYW50OiAnZW1wdHknYCDigJQgc2luIGhlbHBlciBkZSBlcnJvci5cbiAgICovXG4gIHJlYWRvbmx5IGVtcHR5U3RhdGVQcm9wcyA9IGNvbXB1dGVkPEVtcHR5U3RhdGVNZXRhZGF0YT4oKCkgPT4ge1xuICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhcmlhbnQ6ICdlbXB0eScsXG4gICAgICBpY29uOiAnbm90aWZpY2F0aW9ucy1vZmYtb3V0bGluZScsXG4gICAgICB0aXRsZTogdGhpcy50dCgnZW1wdHknKSxcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLnR0KCdlbXB0eUhpbnQnKSxcbiAgICAgIGFjdGlvbjoge1xuICAgICAgICBsYWJlbDogdGhpcy50dCgnZW1wdHlDdGEnKSxcbiAgICAgICAgaGFuZGxlcjogKCkgPT4gdGhpcy5vbkdvVG9TZXR0aW5ncygpLFxuICAgICAgfSxcbiAgICB9O1xuICB9KTtcblxuICByZWFkb25seSBzZWVNb3JlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50dCgnc2VlTW9yZScpKTtcbiAgcmVhZG9ubHkgc2VlTGVzcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ3NlZUxlc3MnKSk7XG4gIHJlYWRvbmx5IHVucmVhZExhYmVsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50dCgndW5yZWFkJykpO1xuXG4gIHJlYWRvbmx5IG1hcmtBbGxCdXR0b25Qcm9wcyA9IGNvbXB1dGVkPFBhcnRpYWw8QnV0dG9uTWV0YWRhdGE+PigoKSA9PiAoe1xuICAgIHRleHQ6IHRoaXMudHQoJ21hcmtBbGwnKSxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBzaXplOiAnc21hbGwnLFxuICAgIHNoYXBlOiAncm91bmQnLFxuICAgIHR5cGU6ICdidXR0b24nLFxuICAgIGljb246IHsgbmFtZTogJ2NoZWNrbWFyay1kb25lLW91dGxpbmUnLCBzbG90OiAnc3RhcnQnIH0sXG4gICAgc3RhdGU6IHRoaXMuX2J1bGtCdXN5KCkgPyBDb21wb25lbnRTdGF0ZXMuV09SS0lORyA6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgbG9hZE1vcmVCdXR0b25Qcm9wcyA9IGNvbXB1dGVkPFBhcnRpYWw8QnV0dG9uTWV0YWRhdGE+PigoKSA9PiAoe1xuICAgIHRleHQ6IHRoaXMudHQoJ2xvYWRNb3JlJyksXG4gICAgY29sb3I6ICdkYXJrJyxcbiAgICBmaWxsOiAnY2xlYXInLFxuICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICBzdGF0ZTogdGhpcy5fbG9hZGluZ01vcmUoKSA/IENvbXBvbmVudFN0YXRlcy5XT1JLSU5HIDogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gIH0pKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBucyA9IHRoaXMubnM7XG4gICAgdGhpcy5pMThuLnJlZ2lzdGVyRGVmYXVsdHMobnMsIE5PVElGSUNBVElPTlNfVklFV19JMThOKTtcbiAgICB0aGlzLm5hdi5zZXRCYWNrSGVhZGVyKCdwYWdlVGl0bGUnLCBucywgeyB3aXRoTWVudTogdHJ1ZSB9KTtcblxuICAgIC8vIFJlLWFwbGljYXIgaGVhZGVyIGVuIGNhbWJpbyBkZSBpZGlvbWEuXG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLmkxOG4ubGFuZygpO1xuICAgICAgICB0aGlzLm5hdi5zZXRCYWNrSGVhZGVyKCdwYWdlVGl0bGUnLCB0aGlzLm5zLCB7IHdpdGhNZW51OiB0cnVlIH0pO1xuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0cmEgZWwgcHVsbC10by1yZWZyZXNoIGVzdMOhbmRhci4gVXNhbW9zIGBuZ09uSW5pdGAvYG5nT25EZXN0cm95YFxuICAgKiAoTk8gYGlvblZpZXdXaWxsRW50ZXJgKSBwb3JxdWUgYHZhbC1wYWdlLXdyYXBwZXJgIHVzYSBgPHJvdXRlci1vdXRsZXQ+YFxuICAgKiBwbGFubyDigJQgbG9zIGhvb2tzIGBpb25WaWV3KmAgc29sbyBkaXNwYXJhbiBkZW50cm8gZGUgYDxpb24tcm91dGVyLW91dGxldD5gLlxuICAgKi9cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5wYWdlUmVmcmVzaC5yZWdpc3RlcigoKSA9PiB0aGlzLnJlbG9hZCgpKTtcbiAgfVxuXG4gIC8qKiBRdWl0YSBlbCBoYW5kbGVyIGFsIGRlc3RydWlyIGxhIHZpc3RhIOKAlCBlbCByZWZyZXNoZXIgZGVzYXBhcmVjZS4gKi9cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5wYWdlUmVmcmVzaC51bnJlZ2lzdGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaCBtYW51YWw6IHJlLXN1c2NyaWJlIGVsIHN0cmVhbSBGaXJlc3RvcmUgKGxpc3RlbmVyIG51ZXZvKSB2w61hIGVsXG4gICAqIGhlbHBlci4gUmVzdWVsdmUgdHJhcyB1biBtYXJnZW4gYnJldmUg4oCUIGVsIHN0cmVhbSBlcyByZWFsLXRpbWUgeSByZS1lbWl0ZVxuICAgKiBlbiBtaWxpc2VndW5kb3M7IGVsIGRlbGF5IHPDs2xvIG1hbnRpZW5lIGVsIHNwaW5uZXIgdmlzaWJsZSBsbyBqdXN0by5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVsb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX3N0cmVhbS5yZWxvYWQoKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgNzAwKSk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gUGVyLWl0ZW0gaGVscGVycyAocHVyb3Mg4oCUIHVzYWJsZXMgZGVzZGUgdGVtcGxhdGUpLlxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBvcGVuQnV0dG9uUHJvcHMoKTogUGFydGlhbDxCdXR0b25NZXRhZGF0YT4ge1xuICAgIHJldHVybiB7XG4gICAgICB0ZXh0OiB0aGlzLnR0KCdvcGVuJyksXG4gICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgZmlsbDogJ2NsZWFyJyxcbiAgICAgIHNpemU6ICdzbWFsbCcsXG4gICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgaWNvbjogeyBuYW1lOiAnY2hldnJvbi1mb3J3YXJkLW91dGxpbmUnLCBzbG90OiAnZW5kJyB9LFxuICAgIH07XG4gIH1cblxuICBub3RpZmljYXRpb25BcmlhTGFiZWwobjogTm90aWZpY2F0aW9uRG9jdW1lbnQpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIW4uYWN0aW9uUm91dGUpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHN0YXR1cyA9IG4uaXNSZWFkID8gJycgOiB0aGlzLnVucmVhZExhYmVsKCkgKyAnLiAnO1xuICAgIGNvbnN0IHRpdGxlID0gbi50aXRsZSB8fCBuLmJvZHkgfHwgdGhpcy50dCgnb3BlbicpO1xuICAgIHJldHVybiBzdGF0dXMgKyB0aXRsZSArICcuICcgKyB0aGlzLnR0KCdvcGVuJyk7XG4gIH1cblxuICBvbk5vdGlmaWNhdGlvblJvd0NsaWNrKG46IE5vdGlmaWNhdGlvbkRvY3VtZW50KTogdm9pZCB7XG4gICAgaWYgKCFuLmFjdGlvblJvdXRlKSByZXR1cm47XG4gICAgdm9pZCB0aGlzLm9uT3BlbihuKTtcbiAgfVxuXG4gIG9uTm90aWZpY2F0aW9uS2V5ZG93bihldmVudDogRXZlbnQsIG46IE5vdGlmaWNhdGlvbkRvY3VtZW50KTogdm9pZCB7XG4gICAgaWYgKCFuLmFjdGlvblJvdXRlKSByZXR1cm47XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB2b2lkIHRoaXMub25PcGVuKG4pO1xuICB9XG5cbiAgb25PcGVuQnV0dG9uQ2xpY2soZXZlbnQ6IEV2ZW50LCBuOiBOb3RpZmljYXRpb25Eb2N1bWVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHZvaWQgdGhpcy5vbk9wZW4obik7XG4gIH1cblxuICBvblRvZ2dsZUV4cGFuZChldmVudDogRXZlbnQsIGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnRvZ2dsZUV4cGFuZChpZCk7XG4gIH1cblxuICBpc0V4cGFuZGVkKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZXhwYW5kZWQoKS5oYXMoaWQpO1xuICB9XG5cbiAgdG9nZ2xlRXhwYW5kKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gbmV3IFNldCh0aGlzLl9leHBhbmRlZCgpKTtcbiAgICBpZiAobmV4dC5oYXMoaWQpKSBuZXh0LmRlbGV0ZShpZCk7XG4gICAgZWxzZSBuZXh0LmFkZChpZCk7XG4gICAgdGhpcy5fZXhwYW5kZWQuc2V0KG5leHQpO1xuICB9XG5cbiAgaXNMb25nKGJvZHk6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIGlmICghYm9keSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBib2R5Lmxlbmd0aCA+IDExMCB8fCBib2R5LmluY2x1ZGVzKCdcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJY29uIHJlc29sdmVyIGNvbiBvcmRlbiBkZSBmYWxsYmFjazpcbiAgICogMS4gbm90aWYucGF5bG9hZC5pY29uIChmb3J3YXJkLWNvbXBhdCwgc2luIGJyZWFraW5nIGNoYW5nZSBlbiBzY2hlbWEpXG4gICAqIDIuIG1hcGEgcG9yIG5vdGlmLnR5cGVcbiAgICogMy4gZGVmYXVsdCBub3RpZmljYXRpb25zLW91dGxpbmVcbiAgICovXG4gIHJlc29sdmVJY29uKG46IE5vdGlmaWNhdGlvbkRvY3VtZW50KTogUmVzb2x2ZWRJY29uIHtcbiAgICBjb25zdCBoaW50ID0gbi5wYXlsb2FkPy5bJ2ljb24nXSBhcyBJY29uSGludCB8IHVuZGVmaW5lZDtcbiAgICBpZiAoaGludD8udmFsdWUpIHtcbiAgICAgIGlmIChoaW50LnR5cGUgPT09ICdpbWFnZScgfHwgaGludC50eXBlID09PSAnYXZhdGFyJykge1xuICAgICAgICByZXR1cm4geyBraW5kOiBoaW50LnR5cGUsIHNyYzogaGludC52YWx1ZSB9O1xuICAgICAgfVxuICAgICAgLy8gSWdub3JhbW9zIGhpbnQuY29sb3Ig4oCUIHRvZG9zIGxvcyBpY29ub3MgdmFuIGVuIGRhcmsgcG9yIGNvbnZlbmNpw7NuIFVYLlxuICAgICAgcmV0dXJuIHsga2luZDogJ2lvbmljb24nLCBuYW1lOiBoaW50LnZhbHVlLCBjb2xvcjogJ2RhcmsnIH07XG4gICAgfVxuICAgIGNvbnN0IHQgPSBuLnR5cGU7XG4gICAgY29uc3QgbmFtZSA9ICgoKSA9PiB7XG4gICAgICBzd2l0Y2ggKHQpIHtcbiAgICAgICAgY2FzZSAnYXBwcm92YWwnOlxuICAgICAgICAgIHJldHVybiAnY2hlY2ttYXJrLWNpcmNsZS1vdXRsaW5lJztcbiAgICAgICAgY2FzZSAnY2hhdCc6XG4gICAgICAgIGNhc2UgJ2NoYXRib3QnOlxuICAgICAgICAgIHJldHVybiAnY2hhdGJ1YmJsZS1vdXRsaW5lJztcbiAgICAgICAgY2FzZSAnY29tbWVudCc6XG4gICAgICAgICAgcmV0dXJuICdjaGF0Ym94LWVsbGlwc2VzLW91dGxpbmUnO1xuICAgICAgICBjYXNlICdyZW1pbmRlcic6XG4gICAgICAgICAgcmV0dXJuICdhbGFybS1vdXRsaW5lJztcbiAgICAgICAgY2FzZSAnc3lzdGVtJzpcbiAgICAgICAgICByZXR1cm4gJ2NvZy1vdXRsaW5lJztcbiAgICAgICAgY2FzZSAndXNlcic6XG4gICAgICAgIGNhc2UgJ21lbnRpb24nOlxuICAgICAgICAgIHJldHVybiAncGVyc29uLW91dGxpbmUnO1xuICAgICAgICBjYXNlICdkb2N1bWVudCc6XG4gICAgICAgICAgcmV0dXJuICdkb2N1bWVudC10ZXh0LW91dGxpbmUnO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAnbm90aWZpY2F0aW9ucy1vdXRsaW5lJztcbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIHJldHVybiB7IGtpbmQ6ICdpb25pY29uJywgbmFtZSwgY29sb3I6ICdkYXJrJyB9O1xuICB9XG5cbiAgaW9uaWNvbk5hbWUobjogTm90aWZpY2F0aW9uRG9jdW1lbnQpOiBzdHJpbmcge1xuICAgIGNvbnN0IHIgPSB0aGlzLnJlc29sdmVJY29uKG4pO1xuICAgIHJldHVybiByLmtpbmQgPT09ICdpb25pY29uJyA/IHIubmFtZSA6ICcnO1xuICB9XG5cbiAgaW9uaWNvbkNvbG9yKG46IE5vdGlmaWNhdGlvbkRvY3VtZW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByID0gdGhpcy5yZXNvbHZlSWNvbihuKTtcbiAgICByZXR1cm4gci5raW5kID09PSAnaW9uaWNvbicgPyByLmNvbG9yIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgaW1hZ2VTcmMobjogTm90aWZpY2F0aW9uRG9jdW1lbnQpOiBzdHJpbmcge1xuICAgIGNvbnN0IHIgPSB0aGlzLnJlc29sdmVJY29uKG4pO1xuICAgIHJldHVybiByLmtpbmQgPT09ICdpbWFnZScgfHwgci5raW5kID09PSAnYXZhdGFyJyA/IHIuc3JjIDogJyc7XG4gIH1cblxuICBpb25Db2xvcih0b2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAoIXRva2VuKSByZXR1cm4gJ3ZhcigtLWlvbi1jb2xvci1wcmltYXJ5KSc7XG4gICAgcmV0dXJuIGB2YXIoLS1pb24tY29sb3ItJHt0b2tlbn0pYDtcbiAgfVxuXG4gIHJlbGF0aXZlVGltZShuOiBOb3RpZmljYXRpb25Eb2N1bWVudCk6IHN0cmluZyB7XG4gICAgY29uc3QgZCA9IG4uY3JlYXRlZEF0IGluc3RhbmNlb2YgRGF0ZSA/IG4uY3JlYXRlZEF0IDogbnVsbDtcbiAgICBpZiAoIWQpIHJldHVybiAnJztcbiAgICBjb25zdCBkaWZmTXMgPSBEYXRlLm5vdygpIC0gZC5nZXRUaW1lKCk7XG4gICAgY29uc3QgbWluID0gTWF0aC5mbG9vcihkaWZmTXMgLyA2MDAwMCk7XG4gICAgaWYgKG1pbiA8IDEpIHJldHVybiB0aGlzLnR0KCd0aW1lTm93Jyk7XG4gICAgaWYgKG1pbiA8IDYwKSByZXR1cm4gdGhpcy50dCgndGltZU1pbnV0ZXMnKS5yZXBsYWNlKCd7bn0nLCBTdHJpbmcobWluKSk7XG4gICAgY29uc3QgaCA9IE1hdGguZmxvb3IobWluIC8gNjApO1xuICAgIGlmIChoIDwgMjQpIHJldHVybiB0aGlzLnR0KCd0aW1lSG91cnMnKS5yZXBsYWNlKCd7bn0nLCBTdHJpbmcoaCkpO1xuICAgIGNvbnN0IGRheXMgPSBNYXRoLmZsb29yKGggLyAyNCk7XG4gICAgcmV0dXJuIHRoaXMudHQoJ3RpbWVEYXlzJykucmVwbGFjZSgne259JywgU3RyaW5nKGRheXMpKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBBY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGFzeW5jIG9uT3BlbihuOiBOb3RpZmljYXRpb25Eb2N1bWVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFjdGlvbi5vcGVuKG4pO1xuICAgICAgdGhpcy5yZXNvbHZlZENvbmZpZygpLm9uTm90aWZpY2F0aW9uT3Blbj8uKG4sIHJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmVycm9ycy5oYW5kbGUoZXJyLCB7XG4gICAgICAgIGNvbnRleHQ6ICdub3RpZmljYXRpb25zLm9wZW4nLFxuICAgICAgICBmYWxsYmFja0tleTogJ29wZW5FcnJvcicsXG4gICAgICAgIGkxOG5OYW1lc3BhY2U6IHRoaXMubnMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvbk1hcmtBbGwoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2J1bGtCdXN5KCkpIHJldHVybjtcbiAgICB0aGlzLl9idWxrQnVzeS5zZXQodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubm90aWZzLm1hcmtBbGxBc1JlYWQoKTtcbiAgICAgIHRoaXMudG9hc3Quc2hvdyh7XG4gICAgICAgIG1lc3NhZ2U6IHRoaXMudHQoJ21hcmtlZEFsbFN1Y2Nlc3MnKSxcbiAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgZHVyYXRpb246IDI1MDAsXG4gICAgICAgIHBvc2l0aW9uOiAndG9wJyxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5lcnJvcnMuaGFuZGxlKGVyciwge1xuICAgICAgICBjb250ZXh0OiAnbm90aWZpY2F0aW9ucy5tYXJrQWxsJyxcbiAgICAgICAgZmFsbGJhY2tLZXk6ICdtYXJrZWRBbGxFcnJvcicsXG4gICAgICAgIGkxOG5OYW1lc3BhY2U6IHRoaXMubnMsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fYnVsa0J1c3kuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBvbkxvYWRNb3JlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9sb2FkaW5nTW9yZSgpKSByZXR1cm47XG4gICAgdGhpcy5fbG9hZGluZ01vcmUuc2V0KHRydWUpO1xuICAgIC8vIFNsaWNlIHZpZW5lIGRlbCBjYWNoZSBsb2NhbCDigJQgbm8gaGF5IGZldGNoIHJlYWwsIHBlcm8gdW4gYnJldmUgc3Bpbm5lclxuICAgIC8vIGNvbmZpcm1hIGFsIHVzZXIgcXVlIGVsIGNsaWNrIHJlZ2lzdHLDsyB5IHN1YXZpemEgbGEgYXBhcmljacOzbiBkZSBpdGVtcy5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX3BhZ2VTaXplLnVwZGF0ZShuID0+IG4gKyB0aGlzLnBhZ2VTdGVwKTtcbiAgICAgIHRoaXMuX2xvYWRpbmdNb3JlLnNldChmYWxzZSk7XG4gICAgfSwgMjUwKTtcbiAgfVxuXG4gIG9uR29Ub1NldHRpbmdzKCk6IHZvaWQge1xuICAgIHRoaXMubmF2Lm5hdmlnYXRlQnlVcmwodGhpcy5yZXNvbHZlZENvbmZpZygpLnNldHRpbmdzTm90aWZpY2F0aW9uc1BhdGgpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEdyb3VwaW5nIGhlbHBlcnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJpdmF0ZSBidWNrZXRPZihuOiBOb3RpZmljYXRpb25Eb2N1bWVudCwgbm93OiBEYXRlKTogR3JvdXBLZXkge1xuICAgIGNvbnN0IGQgPSBuLmNyZWF0ZWRBdCBpbnN0YW5jZW9mIERhdGUgPyBuLmNyZWF0ZWRBdCA6IG51bGw7XG4gICAgaWYgKCFkKSByZXR1cm4gJ2VhcmxpZXInO1xuICAgIGlmIChkLmdldEZ1bGxZZWFyKCkgPT09IG5vdy5nZXRGdWxsWWVhcigpICYmIGQuZ2V0TW9udGgoKSA9PT0gbm93LmdldE1vbnRoKCkgJiYgZC5nZXREYXRlKCkgPT09IG5vdy5nZXREYXRlKCkpIHtcbiAgICAgIHJldHVybiAndG9kYXknO1xuICAgIH1cbiAgICBpZiAoZC5nZXRGdWxsWWVhcigpID09PSBub3cuZ2V0RnVsbFllYXIoKSAmJiBkLmdldE1vbnRoKCkgPT09IG5vdy5nZXRNb250aCgpKSB7XG4gICAgICByZXR1cm4gJ3RoaXNNb250aCc7XG4gICAgfVxuICAgIHJldHVybiAnZWFybGllcic7XG4gIH1cblxuICBwcml2YXRlIHR0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoa2V5LCB0aGlzLm5zKTtcbiAgfVxufVxuIl19