valtech-components 4.0.30 → 4.0.31

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 (26) hide show
  1. package/esm2022/lib/components/organisms/account-view/account-view.component.mjs +13 -21
  2. package/esm2022/lib/components/organisms/avatar-upload/avatar-upload.component.mjs +25 -12
  3. package/esm2022/lib/components/organisms/edit-org-modal/edit-org-modal.component.mjs +57 -5
  4. package/esm2022/lib/components/organisms/organization-view/organization-view.component.mjs +49 -38
  5. package/esm2022/lib/components/organisms/profile-view/profile-view.component.mjs +2 -2
  6. package/esm2022/lib/components/organisms/switch-org-modal/switch-org-modal.component.mjs +59 -6
  7. package/esm2022/lib/components/organisms/switch-org-modal/switch-org-modal.i18n.mjs +3 -1
  8. package/esm2022/lib/services/org/types.mjs +1 -1
  9. package/esm2022/lib/version.mjs +2 -2
  10. package/fesm2022/valtech-components.mjs +196 -77
  11. package/fesm2022/valtech-components.mjs.map +1 -1
  12. package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +1 -1
  13. package/lib/components/atoms/text/text.component.d.ts +1 -1
  14. package/lib/components/atoms/user-avatar/user-avatar.component.d.ts +1 -1
  15. package/lib/components/molecules/cta-card/cta-card.component.d.ts +1 -1
  16. package/lib/components/molecules/features-list/features-list.component.d.ts +1 -1
  17. package/lib/components/molecules/metric-card/metric-card.component.d.ts +1 -1
  18. package/lib/components/organisms/article/article.component.d.ts +5 -5
  19. package/lib/components/organisms/auth-cta/auth-cta.component.d.ts +1 -1
  20. package/lib/components/organisms/avatar-upload/avatar-upload.component.d.ts +10 -1
  21. package/lib/components/organisms/edit-org-modal/edit-org-modal.component.d.ts +5 -1
  22. package/lib/components/organisms/member-import-modal/member-import-modal.component.d.ts +1 -1
  23. package/lib/components/organisms/switch-org-modal/switch-org-modal.component.d.ts +6 -1
  24. package/lib/services/org/types.d.ts +2 -0
  25. package/lib/version.d.ts +1 -1
  26. package/package.json +1 -1
@@ -3,7 +3,7 @@ import { Component, computed, inject, Input, signal } from '@angular/core';
3
3
  import { ActivatedRoute } from '@angular/router';
4
4
  import { IonButton, IonIcon } from '@ionic/angular/standalone';
5
5
  import { addIcons } from 'ionicons';
6
- import { businessOutline, chevronForwardOutline, mailOutline, peopleOutline, swapHorizontalOutline, } from 'ionicons/icons';
6
+ import { businessOutline, chevronForwardOutline, mailOutline, peopleOutline, swapHorizontalOutline, warningOutline, } from 'ionicons/icons';
7
7
  import { take } from 'rxjs/operators';
8
8
  import { ButtonComponent } from '../../atoms/button/button.component';
9
9
  import { DisplayComponent } from '../../atoms/display/display.component';
@@ -29,7 +29,7 @@ import { OrgInfoSheetComponent } from '../org-info-sheet/org-info-sheet.componen
29
29
  import { SwitchOrgModalComponent } from '../switch-org-modal/switch-org-modal.component';
30
30
  import { ACCOUNT_VIEW_I18N } from './account-view.i18n';
31
31
  import * as i0 from "@angular/core";
32
- addIcons({ peopleOutline, businessOutline, chevronForwardOutline, swapHorizontalOutline, mailOutline });
32
+ addIcons({ peopleOutline, businessOutline, chevronForwardOutline, swapHorizontalOutline, mailOutline, warningOutline });
33
33
  const DEFAULT_NAMESPACE = 'Settings.Account';
34
34
  const DEFAULT_MANAGE_ORG_ROUTE = '/app/settings/organization';
35
35
  /**
@@ -494,14 +494,10 @@ export class AccountViewComponent {
494
494
  @if (resolvedConfig().showDeleteAccount) {
495
495
  <!-- Delete account -->
496
496
  <section class="settings-section">
497
- <val-title
498
- [props]="{
499
- size: 'medium',
500
- color: 'dark',
501
- bold: true,
502
- content: dangerDeleteTitle(),
503
- }"
504
- />
497
+ <div class="section-title-danger">
498
+ <ion-icon name="warning-outline" class="danger-icon" aria-hidden="true"></ion-icon>
499
+ <val-title [props]="{ size: 'medium', color: 'dark', bold: true, content: dangerDeleteTitle() }" />
500
+ </div>
505
501
  <div class="section-body">
506
502
  <val-text
507
503
  [props]="{
@@ -529,7 +525,7 @@ export class AccountViewComponent {
529
525
  (dismissed)="deleteAccountOpen.set(false)"
530
526
  />
531
527
  </div>
532
- `, isInline: true, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}.page-header{margin-bottom:16px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.settings-section val-title{display:block;margin-bottom:12px}.section-body{display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.row-actions--gap{display:flex;flex-wrap:wrap;gap:8px}.section-header-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.org-new-cta-card{display:block;margin-top:12px}.orgs-empty-card{background:var(--ion-color-secondary-tint, rgba(var(--ion-color-secondary-rgb, 130, 101, 208), .2));border-radius:18px;padding:18px 16px 12px;display:flex;flex-direction:column;gap:8px}.orgs-empty-card__main{display:flex;align-items:center;gap:10px}.orgs-empty-card__icon{font-size:20px;flex-shrink:0;color:var(--ion-color-dark)}.orgs-empty-card__text{font-size:.875rem;color:var(--ion-color-dark)}.orgs-empty-card__link{background:none;border:none;padding:0;cursor:pointer;font-size:.8125rem;color:var(--ion-color-primary);text-align:left;text-decoration:underline;text-underline-offset:2px;font-family:inherit}.orgs-list{display:flex;flex-direction:column;gap:8px}.org-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:12px;background:var(--ion-color-light, #f4f5f8);border:1.5px solid transparent;cursor:pointer;transition:background .15s,border-color .15s}.org-card:active{opacity:.75}.org-card--active{border-color:var(--ion-color-primary);background:color-mix(in srgb,var(--ion-color-primary) 8%,transparent)}:host-context(body.dark) .org-card,:host-context(html.ion-palette-dark) .org-card,:host-context([data-theme=\"dark\"]) .org-card{background:#ffffff0d}:host-context(body.dark) .org-card--active,:host-context(html.ion-palette-dark) .org-card--active,:host-context([data-theme=\"dark\"]) .org-card--active{background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent)}.org-card__icon{width:40px;height:40px;border-radius:50%;background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent);display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:20px;color:var(--ion-color-primary)}.org-card__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.org-card__name{font-weight:600;font-size:.95rem;color:var(--ion-color-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.org-card__meta{display:flex;flex-direction:column;gap:1px;margin-top:3px}.org-card__meta-item{font-size:.78rem;color:var(--ion-color-dark)}.org-card__meta-label{font-weight:600;color:var(--ion-color-dark);margin-right:4px}.org-card__end{display:flex;align-items:center;gap:8px;flex-shrink:0}\n"], dependencies: [{ kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: EmptyStateComponent, selector: "val-empty-state", inputs: ["props"] }, { kind: "component", type: SkeletonLayoutComponent, selector: "val-skeleton-layout", 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: CtaCardComponent, selector: "val-cta-card", inputs: ["props"], outputs: ["onAction"] }, { kind: "component", type: InvitationCardComponent, selector: "val-invitation-card", inputs: ["props"], outputs: ["onAccept", "onDecline"] }, { kind: "component", type: CreateOrgModalComponent, selector: "val-create-org-modal", inputs: ["i18nNamespace", "isOpen"], outputs: ["dismissed", "created"] }, { kind: "component", type: DeleteAccountModalComponent, selector: "val-delete-account-modal", inputs: ["i18nNamespace", "isOpen"], outputs: ["dismissed"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] }); }
528
+ `, isInline: true, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}.page-header{margin-bottom:16px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.settings-section val-title{display:block;margin-bottom:12px}.section-body{display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.row-actions--gap{display:flex;flex-wrap:wrap;gap:8px}.section-header-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.org-new-cta-card{display:block;margin-top:12px}.orgs-empty-card{background:var(--ion-color-secondary-tint, rgba(var(--ion-color-secondary-rgb, 130, 101, 208), .2));border-radius:18px;padding:18px 16px 12px;display:flex;flex-direction:column;gap:8px}.orgs-empty-card__main{display:flex;align-items:center;gap:10px}.orgs-empty-card__icon{font-size:20px;flex-shrink:0;color:var(--ion-color-dark)}.orgs-empty-card__text{font-size:.875rem;color:var(--ion-color-dark)}.orgs-empty-card__link{background:none;border:none;padding:0;cursor:pointer;font-size:.8125rem;color:var(--ion-color-primary);text-align:left;text-decoration:underline;text-underline-offset:2px;font-family:inherit}.orgs-list{display:flex;flex-direction:column;gap:8px}.org-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:12px;background:var(--ion-color-light, #f4f5f8);border:1.5px solid transparent;cursor:pointer;transition:background .15s,border-color .15s}.org-card:active{opacity:.75}.org-card--active{border-color:var(--ion-color-primary);background:color-mix(in srgb,var(--ion-color-primary) 8%,transparent)}:host-context(body.dark) .org-card,:host-context(html.ion-palette-dark) .org-card,:host-context([data-theme=\"dark\"]) .org-card{background:#ffffff0d}:host-context(body.dark) .org-card--active,:host-context(html.ion-palette-dark) .org-card--active,:host-context([data-theme=\"dark\"]) .org-card--active{background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent)}.org-card__icon{width:40px;height:40px;border-radius:50%;background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent);display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:20px;color:var(--ion-color-primary)}.org-card__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.org-card__name{font-weight:600;font-size:.95rem;color:var(--ion-color-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.org-card__meta{display:flex;flex-direction:column;gap:1px;margin-top:3px}.org-card__meta-item{font-size:.78rem;color:var(--ion-color-dark)}.org-card__meta-label{font-weight:600;color:var(--ion-color-dark);margin-right:4px}.org-card__end{display:flex;align-items:center;gap:8px;flex-shrink:0}.section-title-danger{display:flex;align-items:center;gap:8px}.danger-icon{font-size:1.15rem;color:var(--ion-color-warning-shade, #d4a017);flex-shrink:0}\n"], dependencies: [{ kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: EmptyStateComponent, selector: "val-empty-state", inputs: ["props"] }, { kind: "component", type: SkeletonLayoutComponent, selector: "val-skeleton-layout", 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: CtaCardComponent, selector: "val-cta-card", inputs: ["props"], outputs: ["onAction"] }, { kind: "component", type: InvitationCardComponent, selector: "val-invitation-card", inputs: ["props"], outputs: ["onAccept", "onDecline"] }, { kind: "component", type: CreateOrgModalComponent, selector: "val-create-org-modal", inputs: ["i18nNamespace", "isOpen"], outputs: ["dismissed", "created"] }, { kind: "component", type: DeleteAccountModalComponent, selector: "val-delete-account-modal", inputs: ["i18nNamespace", "isOpen"], outputs: ["dismissed"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] }); }
533
529
  }
534
530
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AccountViewComponent, decorators: [{
535
531
  type: Component,
@@ -694,14 +690,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
694
690
  @if (resolvedConfig().showDeleteAccount) {
695
691
  <!-- Delete account -->
696
692
  <section class="settings-section">
697
- <val-title
698
- [props]="{
699
- size: 'medium',
700
- color: 'dark',
701
- bold: true,
702
- content: dangerDeleteTitle(),
703
- }"
704
- />
693
+ <div class="section-title-danger">
694
+ <ion-icon name="warning-outline" class="danger-icon" aria-hidden="true"></ion-icon>
695
+ <val-title [props]="{ size: 'medium', color: 'dark', bold: true, content: dangerDeleteTitle() }" />
696
+ </div>
705
697
  <div class="section-body">
706
698
  <val-text
707
699
  [props]="{
@@ -729,8 +721,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
729
721
  (dismissed)="deleteAccountOpen.set(false)"
730
722
  />
731
723
  </div>
732
- `, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}.page-header{margin-bottom:16px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.settings-section val-title{display:block;margin-bottom:12px}.section-body{display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.row-actions--gap{display:flex;flex-wrap:wrap;gap:8px}.section-header-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.org-new-cta-card{display:block;margin-top:12px}.orgs-empty-card{background:var(--ion-color-secondary-tint, rgba(var(--ion-color-secondary-rgb, 130, 101, 208), .2));border-radius:18px;padding:18px 16px 12px;display:flex;flex-direction:column;gap:8px}.orgs-empty-card__main{display:flex;align-items:center;gap:10px}.orgs-empty-card__icon{font-size:20px;flex-shrink:0;color:var(--ion-color-dark)}.orgs-empty-card__text{font-size:.875rem;color:var(--ion-color-dark)}.orgs-empty-card__link{background:none;border:none;padding:0;cursor:pointer;font-size:.8125rem;color:var(--ion-color-primary);text-align:left;text-decoration:underline;text-underline-offset:2px;font-family:inherit}.orgs-list{display:flex;flex-direction:column;gap:8px}.org-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:12px;background:var(--ion-color-light, #f4f5f8);border:1.5px solid transparent;cursor:pointer;transition:background .15s,border-color .15s}.org-card:active{opacity:.75}.org-card--active{border-color:var(--ion-color-primary);background:color-mix(in srgb,var(--ion-color-primary) 8%,transparent)}:host-context(body.dark) .org-card,:host-context(html.ion-palette-dark) .org-card,:host-context([data-theme=\"dark\"]) .org-card{background:#ffffff0d}:host-context(body.dark) .org-card--active,:host-context(html.ion-palette-dark) .org-card--active,:host-context([data-theme=\"dark\"]) .org-card--active{background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent)}.org-card__icon{width:40px;height:40px;border-radius:50%;background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent);display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:20px;color:var(--ion-color-primary)}.org-card__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.org-card__name{font-weight:600;font-size:.95rem;color:var(--ion-color-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.org-card__meta{display:flex;flex-direction:column;gap:1px;margin-top:3px}.org-card__meta-item{font-size:.78rem;color:var(--ion-color-dark)}.org-card__meta-label{font-weight:600;color:var(--ion-color-dark);margin-right:4px}.org-card__end{display:flex;align-items:center;gap:8px;flex-shrink:0}\n"] }]
724
+ `, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}.page-header{margin-bottom:16px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.settings-section val-title{display:block;margin-bottom:12px}.section-body{display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.row-actions--gap{display:flex;flex-wrap:wrap;gap:8px}.section-header-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.org-new-cta-card{display:block;margin-top:12px}.orgs-empty-card{background:var(--ion-color-secondary-tint, rgba(var(--ion-color-secondary-rgb, 130, 101, 208), .2));border-radius:18px;padding:18px 16px 12px;display:flex;flex-direction:column;gap:8px}.orgs-empty-card__main{display:flex;align-items:center;gap:10px}.orgs-empty-card__icon{font-size:20px;flex-shrink:0;color:var(--ion-color-dark)}.orgs-empty-card__text{font-size:.875rem;color:var(--ion-color-dark)}.orgs-empty-card__link{background:none;border:none;padding:0;cursor:pointer;font-size:.8125rem;color:var(--ion-color-primary);text-align:left;text-decoration:underline;text-underline-offset:2px;font-family:inherit}.orgs-list{display:flex;flex-direction:column;gap:8px}.org-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:12px;background:var(--ion-color-light, #f4f5f8);border:1.5px solid transparent;cursor:pointer;transition:background .15s,border-color .15s}.org-card:active{opacity:.75}.org-card--active{border-color:var(--ion-color-primary);background:color-mix(in srgb,var(--ion-color-primary) 8%,transparent)}:host-context(body.dark) .org-card,:host-context(html.ion-palette-dark) .org-card,:host-context([data-theme=\"dark\"]) .org-card{background:#ffffff0d}:host-context(body.dark) .org-card--active,:host-context(html.ion-palette-dark) .org-card--active,:host-context([data-theme=\"dark\"]) .org-card--active{background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent)}.org-card__icon{width:40px;height:40px;border-radius:50%;background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent);display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:20px;color:var(--ion-color-primary)}.org-card__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.org-card__name{font-weight:600;font-size:.95rem;color:var(--ion-color-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.org-card__meta{display:flex;flex-direction:column;gap:1px;margin-top:3px}.org-card__meta-item{font-size:.78rem;color:var(--ion-color-dark)}.org-card__meta-label{font-weight:600;color:var(--ion-color-dark);margin-right:4px}.org-card__end{display:flex;align-items:center;gap:8px;flex-shrink:0}.section-title-danger{display:flex;align-items:center;gap:8px}.danger-icon{font-size:1.15rem;color:var(--ion-color-warning-shade, #d4a017);flex-shrink:0}\n"] }]
733
725
  }], ctorParameters: () => [], propDecorators: { config: [{
734
726
  type: Input
735
727
  }] } });
736
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvYWNjb3VudC12aWV3L2FjY291bnQtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUNMLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsV0FBVyxFQUNYLGFBQWEsRUFDYixxQkFBcUIsR0FDdEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDL0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFFeEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDNUUsT0FB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QkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQO3dCQUNQLGdCQUFnQjt3QkFDaEIsbUJBQW1CO3dCQUNuQix1QkFBdUI7d0JBQ3ZCLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsdUJBQXVCO3dCQUN2Qix1QkFBdUI7d0JBQ3ZCLDJCQUEyQjt3QkFDM0IsT0FBTzt3QkFDUCxTQUFTO3dCQUNULGFBQWE7cUJBQ2QsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzTFQ7d0RBb0xRLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRpdGxlQ2FzZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5qZWN0LCBJbnB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJb25CdXR0b24sIElvbkljb24gfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHtcbiAgYnVzaW5lc3NPdXRsaW5lLFxuICBjaGV2cm9uRm9yd2FyZE91dGxpbmUsXG4gIG1haWxPdXRsaW5lLFxuICBwZW9wbGVPdXRsaW5lLFxuICBzd2FwSG9yaXpvbnRhbE91dGxpbmUsXG59IGZyb20gJ2lvbmljb25zL2ljb25zJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IERpc3BsYXlDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9kaXNwbGF5L2Rpc3BsYXkuY29tcG9uZW50JztcbmltcG9ydCB7IFRleHRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy90ZXh0L3RleHQuY29tcG9uZW50JztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGl0bGUvdGl0bGUuY29tcG9uZW50JztcbmltcG9ydCB7IEN0YUNhcmRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvY3RhLWNhcmQvY3RhLWNhcmQuY29tcG9uZW50JztcbmltcG9ydCB7IEVtcHR5U3RhdGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZW1wdHktc3RhdGUvZW1wdHktc3RhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IEVtcHR5U3RhdGVNZXRhZGF0YSB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9lbXB0eS1zdGF0ZS90eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVFcnJvclN0YXRlUHJvcHMgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZW1wdHktc3RhdGUvZmFjdG9yeSc7XG5pbXBvcnQgeyBJbnZpdGF0aW9uQ2FyZENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9pbnZpdGF0aW9uLWNhcmQvaW52aXRhdGlvbi1jYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25Hcm91cE1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2J1dHRvbi1ncm91cC90eXBlcyc7XG5pbXBvcnQgeyBTa2VsZXRvbkxheW91dENvbXBvbmVudCB9IGZyb20gJy4uL3NrZWxldG9uLWxheW91dC9za2VsZXRvbi1sYXlvdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEJ1dHRvbk1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGgvYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBpbnRlcnByZXRFcnJvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Vycm9ycy9pbnRlcnByZXQtZXJyb3InO1xuaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbW9kYWwvbW9kYWwuc2VydmljZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25hdmlnYXRpb24vbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE9yZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9vcmcvb3JnLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3JnYW5pemF0aW9uLCBQZW5kaW5nSW52aXRhdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL29yZy90eXBlcyc7XG5pbXBvcnQgeyBjb25uZWN0UGFnZVJlZnJlc2ggfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wYWdlLXJlZnJlc2gvcGFnZS1yZWZyZXNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdG9hc3Quc2VydmljZSc7XG5pbXBvcnQgeyBWYWx0ZWNoRXJyb3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZXJyb3JzL3ZhbHRlY2gtZXJyb3Iuc2VydmljZSc7XG5cbmltcG9ydCB7IENyZWF0ZU9yZ01vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vY3JlYXRlLW9yZy1tb2RhbC9jcmVhdGUtb3JnLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEZWxldGVBY2NvdW50TW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9kZWxldGUtYWNjb3VudC1tb2RhbC9kZWxldGUtYWNjb3VudC1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3JnSW5mb1NoZWV0Q29tcG9uZW50IH0gZnJvbSAnLi4vb3JnLWluZm8tc2hlZXQvb3JnLWluZm8tc2hlZXQuY29tcG9uZW50JztcbmltcG9ydCB7IFN3aXRjaE9yZ01vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vc3dpdGNoLW9yZy1tb2RhbC9zd2l0Y2gtb3JnLW1vZGFsLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IEFjY291bnRWaWV3Q29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBBQ0NPVU5UX1ZJRVdfSTE4TiB9IGZyb20gJy4vYWNjb3VudC12aWV3LmkxOG4nO1xuXG5hZGRJY29ucyh7IHBlb3BsZU91dGxpbmUsIGJ1c2luZXNzT3V0bGluZSwgY2hldnJvbkZvcndhcmRPdXRsaW5lLCBzd2FwSG9yaXpvbnRhbE91dGxpbmUsIG1haWxPdXRsaW5lIH0pO1xuXG5jb25zdCBERUZBVUxUX05BTUVTUEFDRSA9ICdTZXR0aW5ncy5BY2NvdW50JztcbmNvbnN0IERFRkFVTFRfTUFOQUdFX09SR19ST1VURSA9ICcvYXBwL3NldHRpbmdzL29yZ2FuaXphdGlvbic7XG5cbi8qKlxuICogYHZhbC1hY2NvdW50LXZpZXdgIOKAlCB2aXN0YSBDdWVudGEgZnVsbC1mZWF0dXJlIGF1dG9jb250ZW5pZGEgKG9yZ2FuaXNtKS5cbiAqIFByb21vdmlkYSBkZXNkZSBgc2hvd2Nhc2VgIGJham8gZWwgcHJvY2VzbyBkZSBBRFItMDIxLiBSZcO6bmU6XG4gKiAgLSAqKkludml0YWNpb25lcyBwZW5kaWVudGVzKiog4oCUIGFjZXB0YXIgLyByZWNoYXphciAoYHZhbC1pbnZpdGF0aW9uLWNhcmRgKS5cbiAqICAtICoqT3JnYW5pemFjaW9uZXMqKiDigJQgY2FyZCBkZSBvcmcgYWN0aXZhICsgZW1wdHktY2FyZCArIENUQSBcIk51ZXZhIG9yZ1wiXG4gKiAgICAobW9kYWwgYHZhbC1jcmVhdGUtb3JnLW1vZGFsYCkgKyBcIlZlciB0b2Rhc1wiIChtb2RhbCBgdmFsLXN3aXRjaC1vcmctbW9kYWxgKS5cbiAqICAtICoqQ2VycmFyIGVzdGEgc2VzacOzbioqIOKAlCBgYXV0aC5sb2dvdXRXaXRoQ29uZmlybWF0aW9uKClgLlxuICogIC0gKipFbGltaW5hciBjdWVudGEqKiDigJQgbW9kYWwgYHZhbC1kZWxldGUtYWNjb3VudC1tb2RhbGAuXG4gKlxuICogTk8gcmVuZGVyaXphIGlvbi1jb250ZW50IOKAlCB2aXZlIGRlbnRybyBkZSB2YWwtcGFnZS13cmFwcGVyLiBObyB1c2EgZGVlcC1saW5rcztcbiAqIGBBY3RpdmF0ZWRSb3V0ZWAgc2UgaW55ZWN0YSBgeyBvcHRpb25hbDogdHJ1ZSB9YCBzb2xvIHBhcmEgbGVlciBlbCByb3V0ZSBkYXRhXG4gKiBkZSBjb25maWcuIExhIG5hdmVnYWNpw7NuIGEgbGEgb3JnIHJvdXRlIHZhIHBvciBgTmF2aWdhdGlvblNlcnZpY2VgLlxuICpcbiAqIEF1dG8tcmVnaXN0cmEgc3VzIGRlZmF1bHRzIGkxOG4gKGVzL2VuKSBlbiBlbCBjb25zdHJ1Y3RvciBzaSBlbCBjb25zdW1lciBub1xuICogcHJvdmV5w7MgZWwgbmFtZXNwYWNlIGNvbmZpZ3VyYWRvIChkZWZhdWx0IGBTZXR0aW5ncy5BY2NvdW50YCkuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1hY2NvdW50LXZpZXcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRGlzcGxheUNvbXBvbmVudCxcbiAgICBFbXB0eVN0YXRlQ29tcG9uZW50LFxuICAgIFNrZWxldG9uTGF5b3V0Q29tcG9uZW50LFxuICAgIFRpdGxlQ29tcG9uZW50LFxuICAgIFRleHRDb21wb25lbnQsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIEN0YUNhcmRDb21wb25lbnQsXG4gICAgSW52aXRhdGlvbkNhcmRDb21wb25lbnQsXG4gICAgQ3JlYXRlT3JnTW9kYWxDb21wb25lbnQsXG4gICAgRGVsZXRlQWNjb3VudE1vZGFsQ29tcG9uZW50LFxuICAgIElvbkljb24sXG4gICAgSW9uQnV0dG9uLFxuICAgIFRpdGxlQ2FzZVBpcGUsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInBhZ2VcIj5cbiAgICAgIDxoZWFkZXIgY2xhc3M9XCJwYWdlLWhlYWRlclwiPlxuICAgICAgICA8dmFsLWRpc3BsYXkgW3Byb3BzXT1cInsgc2l6ZTogJ3NtYWxsJywgY29sb3I6ICdkYXJrJywgY29udGVudDogcGFnZVRpdGxlKCkgfVwiIC8+XG4gICAgICAgIDx2YWwtdGl0bGVcbiAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgc2l6ZTogJ2xhcmdlJyxcbiAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHBhZ2VEZXNjcmlwdGlvbigpLFxuICAgICAgICAgIH1cIlxuICAgICAgICAvPlxuICAgICAgPC9oZWFkZXI+XG5cbiAgICAgIEBpZiAocmVzb2x2ZWRDb25maWcoKS5zaG93UGVuZGluZ0ludml0ZXMgJiYgcGVuZGluZ0ludml0ZXMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIDx2YWwtdGl0bGVcbiAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdwZW5kaW5nSW52aXRlc1RpdGxlJyksXG4gICAgICAgICAgfVwiXG4gICAgICAgIC8+XG4gICAgICAgIEBmb3IgKGludml0ZSBvZiBwZW5kaW5nSW52aXRlcygpOyB0cmFjayBpbnZpdGUub3JnSWQpIHtcbiAgICAgICAgICA8dmFsLWludml0YXRpb24tY2FyZFxuICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgdG9rZW46IGludml0ZS5vcmdJZCxcbiAgICAgICAgICAgICAgb3JnTmFtZTogaW52aXRlLm9yZ05hbWUsXG4gICAgICAgICAgICAgIGludml0ZXJOYW1lOiBpbnZpdGUuaW52aXRlck5hbWUsXG4gICAgICAgICAgICAgIHJvbGU6IGludml0ZS5yb2xlSWQsXG4gICAgICAgICAgICAgIGFjY2VwdGluZzogaW52aXRlQWNjZXB0aW5nKCkgPT09IGludml0ZS5vcmdJZCxcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6ICEhaW52aXRlQWNjZXB0aW5nKCksXG4gICAgICAgICAgICAgIGFjY2VwdExhYmVsOiB0dCgnYWNjZXB0JyksXG4gICAgICAgICAgICAgIGRlY2xpbmVMYWJlbDogdHQoJ2RlY2xpbmUnKSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKG9uQWNjZXB0KT1cImFjY2VwdFBlbmRpbmdJbnZpdGUoaW52aXRlKVwiXG4gICAgICAgICAgICAob25EZWNsaW5lKT1cImRlY2xpbmVQZW5kaW5nSW52aXRlKGludml0ZSlcIlxuICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQGlmIChyZXNvbHZlZENvbmZpZygpLnNob3dPcmdhbml6YXRpb25zKSB7XG4gICAgICAgIDwhLS0gT3JnYW5pemF0aW9ucyAtLT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyLXJvd1wiPlxuICAgICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb250ZW50OiBvcmdzVGl0bGUoKSxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgQGlmIChvcmdzKCkubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwib3V0bGluZVwiIGNvbG9yPVwiZGFya1wiIHNoYXBlPVwicm91bmRcIiBzaXplPVwic21hbGxcIiAoY2xpY2spPVwib25Td2l0Y2hBY2NvdW50KClcIj5cbiAgICAgICAgICAgICAgICB7eyB0dCgnb3Jnc1ZpZXdBbGwnKSB9fVxuICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tYm9keVwiPlxuICAgICAgICAgICAgQGlmIChvcmdzTG9hZGluZygpKSB7XG4gICAgICAgICAgICAgIDx2YWwtc2tlbGV0b24tbGF5b3V0IFtwcm9wc109XCJ7IHByZXNldDogJ2xpc3QnLCByb3dzOiAzIH1cIiAvPlxuICAgICAgICAgICAgfSBAZWxzZSBpZiAob3Jnc0Vycm9yU3RhdGUoKSkge1xuICAgICAgICAgICAgICA8dmFsLWVtcHR5LXN0YXRlIFtwcm9wc109XCJvcmdzRXJyb3JTdGF0ZSgpIVwiIC8+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgQGlmIChhY3RpdmVPcmcoKTsgYXMgb3JnKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZ3MtbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZy1jYXJkIG9yZy1jYXJkLS1hY3RpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZy1jYXJkX19pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJidXNpbmVzcy1vdXRsaW5lXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctY2FyZF9fYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnLWNhcmRfX25hbWVcIj57eyBvcmcubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3JnLWNhcmRfX21ldGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnLWNhcmRfX21ldGEtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1jYXJkX19tZXRhLWxhYmVsXCI+e3sgdHQoJ29yZ3NMYWJlbFR5cGUnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3JnVHlwZUxhYmVsKG9yZy50eXBlKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhY3RpdmVPcmdSb2xlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmctY2FyZF9fbWV0YS1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmctY2FyZF9fbWV0YS1sYWJlbFwiPnt7IHR0KCdvcmdzTGFiZWxSb2xlJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYWN0aXZlT3JnUm9sZSgpIHwgdGl0bGVjYXNlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnLWNhcmRfX21ldGEtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1jYXJkX19tZXRhLWxhYmVsXCI+e3sgdHQoJ29yZ3NMYWJlbFN0YXR1cycpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0dCgnb3Jnc1N0YXR1c0FjdGl2ZScpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3JnLWNhcmRfX2VuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJvdXRsaW5lXCIgY29sb3I9XCJkYXJrXCIgc2hhcGU9XCJyb3VuZFwiIHNpemU9XCJzbWFsbFwiIChjbGljayk9XCJvbk1hbmFnZU9yZygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyB0dCgnb3Jnc01hbmFnZScpIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9IEBlbHNlIGlmIChvcmdzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZ3MtZW1wdHktY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZ3MtZW1wdHktY2FyZF9fbWFpblwiPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInBlb3BsZS1vdXRsaW5lXCIgY2xhc3M9XCJvcmdzLWVtcHR5LWNhcmRfX2ljb25cIiAvPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZ3MtZW1wdHktY2FyZF9fdGV4dFwiPnt7IG9yZ3NFbXB0eSgpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwib3Jncy1lbXB0eS1jYXJkX19saW5rXCIgKGNsaWNrKT1cIm9uTW9yZUluZm8oKVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBvcmdzTW9yZUluZm8oKSB9fVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChyZXNvbHZlZENvbmZpZygpLnNob3dOZXdPcmdDdGEpIHtcbiAgICAgICAgICAgICAgICA8IS0tIE51ZXZhIG9yZ2FuaXphY2lvbjogQ1RBIGNhcmQgY29uIHRpdHVsbywgc3VidGl0dWxvIHkgYm90b24gLS0+XG4gICAgICAgICAgICAgICAgPHZhbC1jdGEtY2FyZCBjbGFzcz1cIm9yZy1uZXctY3RhLWNhcmRcIiBbcHJvcHNdPVwibmV3T3JnQ3RhUHJvcHMoKVwiIChvbkFjdGlvbik9XCJvbk5ld09yZygpXCIgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG5cbiAgICAgIEBpZiAocmVzb2x2ZWRDb25maWcoKS5zaG93TG9nb3V0KSB7XG4gICAgICAgIDwhLS0gTG9nb3V0IHRoaXMgc2Vzc2lvbiAtLT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCI+XG4gICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IGxvZ291dFRpdGxlKCksXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWJvZHlcIj5cbiAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGxvZ291dEhpbnQoKSxcbiAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cImxvZ291dEJ1dHRvblByb3BzKClcIiAoY2xpY2spPVwib25Mb2dvdXQoKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd0RlbGV0ZUFjY291bnQpIHtcbiAgICAgICAgPCEtLSBEZWxldGUgYWNjb3VudCAtLT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCI+XG4gICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IGRhbmdlckRlbGV0ZVRpdGxlKCksXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWJvZHlcIj5cbiAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGRhbmdlckRlbGV0ZUhpbnQoKSxcbiAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cImRlbGV0ZUFjY291bnRCdXR0b25Qcm9wcygpXCIgKG9uQ2xpY2spPVwib25EZWxldGVBY2NvdW50KClcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cbiAgICAgIDx2YWwtY3JlYXRlLW9yZy1tb2RhbFxuICAgICAgICBbaXNPcGVuXT1cImNyZWF0ZU9yZ09wZW4oKVwiXG4gICAgICAgIFtpMThuTmFtZXNwYWNlXT1cIidDcmVhdGVPcmdNb2RhbCdcIlxuICAgICAgICAoZGlzbWlzc2VkKT1cImNyZWF0ZU9yZ09wZW4uc2V0KGZhbHNlKVwiXG4gICAgICAgIChjcmVhdGVkKT1cIm9uT3JnQ3JlYXRlZCgkZXZlbnQpXCJcbiAgICAgIC8+XG4gICAgICA8dmFsLWRlbGV0ZS1hY2NvdW50LW1vZGFsXG4gICAgICAgIFtpc09wZW5dPVwiZGVsZXRlQWNjb3VudE9wZW4oKVwiXG4gICAgICAgIFtpMThuTmFtZXNwYWNlXT1cIidTZXR0aW5ncy5EZWxldGVBY2NvdW50J1wiXG4gICAgICAgIChkaXNtaXNzZWQpPVwiZGVsZXRlQWNjb3VudE9wZW4uc2V0KGZhbHNlKVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAucGFnZSB7XG4gICAgICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgICAgICAgbWF4LXdpZHRoOiA3MjBweDtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICB9XG4gICAgICAucGFnZS1oZWFkZXIge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgfVxuICAgICAgLnNldHRpbmdzLXNlY3Rpb24ge1xuICAgICAgICBwYWRkaW5nOiAxNnB4IDA7XG4gICAgICB9XG4gICAgICAuc2V0dGluZ3Mtc2VjdGlvbiArIC5zZXR0aW5ncy1zZWN0aW9uIHtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXZhbC1ib3JkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wOCkpO1xuICAgICAgfVxuICAgICAgLnNldHRpbmdzLXNlY3Rpb24gdmFsLXRpdGxlIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7XG4gICAgICB9XG4gICAgICAuc2VjdGlvbi1ib2R5IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAxMHB4O1xuICAgICAgfVxuICAgICAgLnJvdy1hY3Rpb25zIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTJweDtcbiAgICAgIH1cbiAgICAgIC5yb3ctYWN0aW9ucy0tZ2FwIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgIH1cbiAgICAgIC5zZWN0aW9uLWhlYWRlci1yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgICB9XG4gICAgICAub3JnLW5ldy1jdGEtY2FyZCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgICAgfVxuICAgICAgLm9yZ3MtZW1wdHktY2FyZCB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1zZWNvbmRhcnktdGludCwgcmdiYSh2YXIoLS1pb24tY29sb3Itc2Vjb25kYXJ5LXJnYiwgMTMwLCAxMDEsIDIwOCksIDAuMikpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxOHB4O1xuICAgICAgICBwYWRkaW5nOiAxOHB4IDE2cHggMTJweDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICB9XG4gICAgICAub3Jncy1lbXB0eS1jYXJkX19tYWluIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAxMHB4O1xuICAgICAgfVxuICAgICAgLm9yZ3MtZW1wdHktY2FyZF9faWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyayk7XG4gICAgICB9XG4gICAgICAub3Jncy1lbXB0eS1jYXJkX190ZXh0IHtcbiAgICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrKTtcbiAgICAgIH1cbiAgICAgIC5vcmdzLWVtcHR5LWNhcmRfX2xpbmsge1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgZm9udC1zaXplOiAwLjgxMjVyZW07XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgICAgICB0ZXh0LXVuZGVybGluZS1vZmZzZXQ6IDJweDtcbiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gICAgICB9XG4gICAgICAub3Jncy1saXN0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICB9XG4gICAgICAub3JnLWNhcmQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDE0cHg7XG4gICAgICAgIHBhZGRpbmc6IDE0cHggMTZweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWxpZ2h0LCAjZjRmNWY4KTtcbiAgICAgICAgYm9yZGVyOiAxLjVweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB0cmFuc2l0aW9uOlxuICAgICAgICAgIGJhY2tncm91bmQgMC4xNXMsXG4gICAgICAgICAgYm9yZGVyLWNvbG9yIDAuMTVzO1xuICAgICAgfVxuICAgICAgLm9yZy1jYXJkOmFjdGl2ZSB7XG4gICAgICAgIG9wYWNpdHk6IDAuNzU7XG4gICAgICB9XG4gICAgICAub3JnLWNhcmQtLWFjdGl2ZSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpO1xuICAgICAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpIDglLCB0cmFuc3BhcmVudCk7XG4gICAgICB9XG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLm9yZy1jYXJkLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5vcmctY2FyZCxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLm9yZy1jYXJkIHtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTtcbiAgICAgIH1cbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAub3JnLWNhcmQtLWFjdGl2ZSxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAub3JnLWNhcmQtLWFjdGl2ZSxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLm9yZy1jYXJkLS1hY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpIDE1JSwgdHJhbnNwYXJlbnQpO1xuICAgICAgfVxuICAgICAgLm9yZy1jYXJkX19pY29uIHtcbiAgICAgICAgd2lkdGg6IDQwcHg7XG4gICAgICAgIGhlaWdodDogNDBweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpIDE1JSwgdHJhbnNwYXJlbnQpO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgIH1cbiAgICAgIC5vcmctY2FyZF9fYm9keSB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAycHg7XG4gICAgICB9XG4gICAgICAub3JnLWNhcmRfX25hbWUge1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBmb250LXNpemU6IDAuOTVyZW07XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyayk7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgfVxuICAgICAgLm9yZy1jYXJkX19tZXRhIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAxcHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDNweDtcbiAgICAgIH1cbiAgICAgIC5vcmctY2FyZF9fbWV0YS1pdGVtIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjc4cmVtO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgfVxuICAgICAgLm9yZy1jYXJkX19tZXRhLWxhYmVsIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrKTtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA0cHg7XG4gICAgICB9XG4gICAgICAub3JnLWNhcmRfX2VuZCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBY2NvdW50Vmlld0NvbXBvbmVudCB7XG4gIHByaXZhdGUgbmF2ID0gaW5qZWN0KE5hdmlnYXRpb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBhdXRoID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBvcmdTZXJ2aWNlID0gaW5qZWN0KE9yZ1NlcnZpY2UpO1xuICBwcml2YXRlIG1vZGFsU2VydmljZSA9IGluamVjdChNb2RhbFNlcnZpY2UpO1xuICBwcml2YXRlIHRvYXN0ID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XG4gIHByaXZhdGUgZXJyb3JzID0gaW5qZWN0KFZhbHRlY2hFcnJvclNlcnZpY2UpO1xuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIC8qKlxuICAgKiBDb25maWcgdsOtYSBASW5wdXQgKG9iamVjdC1maXJzdCkuIFNpIG5vIHNlIHBhc2EsIHNlIGNhZSBhbCByb3V0ZSBkYXRhXG4gICAqIGBhY2NvdW50Q29uZmlnYCAocG9ibGFkbyBwb3IgYHByb3ZpZGVWYWx0ZWNoQWNjb3VudFJvdXRlc2ApLiBgcmVzb2x2ZWRDb25maWdgXG4gICAqIG1lcmdlYSBjb24gbG9zIGRlZmF1bHRzIOKAlCBgQElucHV0YCBnYW5hIHNvYnJlIHJvdXRlIGRhdGEuXG4gICAqL1xuICBASW5wdXQoKSBjb25maWc/OiBBY2NvdW50Vmlld0NvbmZpZztcblxuICByZWFkb25seSByZXNvbHZlZENvbmZpZyA9IGNvbXB1dGVkPFxuICAgIFJlcXVpcmVkPE9taXQ8QWNjb3VudFZpZXdDb25maWcsICdvbk9yZ1N3aXRjaGVkJyB8ICdvbk9yZ0NyZWF0ZWQnIHwgJ29uTG9nZ2VkT3V0JyB8ICdvbkFjY291bnREZWxldGVkJz4+ICZcbiAgICAgIFBpY2s8QWNjb3VudFZpZXdDb25maWcsICdvbk9yZ1N3aXRjaGVkJyB8ICdvbk9yZ0NyZWF0ZWQnIHwgJ29uTG9nZ2VkT3V0JyB8ICdvbkFjY291bnREZWxldGVkJz5cbiAgPigoKSA9PiB7XG4gICAgY29uc3QgZnJvbVJvdXRlID0gKHRoaXMucm91dGU/LnNuYXBzaG90LmRhdGFbJ2FjY291bnRDb25maWcnXSA/PyB7fSkgYXMgQWNjb3VudFZpZXdDb25maWc7XG4gICAgY29uc3QgbWVyZ2VkOiBBY2NvdW50Vmlld0NvbmZpZyA9IHsgLi4uZnJvbVJvdXRlLCAuLi4odGhpcy5jb25maWcgPz8ge30pIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dQZW5kaW5nSW52aXRlczogbWVyZ2VkLnNob3dQZW5kaW5nSW52aXRlcyA/PyB0cnVlLFxuICAgICAgc2hvd09yZ2FuaXphdGlvbnM6IG1lcmdlZC5zaG93T3JnYW5pemF0aW9ucyA/PyB0cnVlLFxuICAgICAgc2hvd05ld09yZ0N0YTogbWVyZ2VkLnNob3dOZXdPcmdDdGEgPz8gdHJ1ZSxcbiAgICAgIHNob3dMb2dvdXQ6IG1lcmdlZC5zaG93TG9nb3V0ID8/IHRydWUsXG4gICAgICBzaG93RGVsZXRlQWNjb3VudDogbWVyZ2VkLnNob3dEZWxldGVBY2NvdW50ID8/IHRydWUsXG4gICAgICBpMThuTmFtZXNwYWNlOiBtZXJnZWQuaTE4bk5hbWVzcGFjZSA/PyBERUZBVUxUX05BTUVTUEFDRSxcbiAgICAgIG1hbmFnZU9yZ1JvdXRlOiBtZXJnZWQubWFuYWdlT3JnUm91dGUgPz8gREVGQVVMVF9NQU5BR0VfT1JHX1JPVVRFLFxuICAgICAgb25PcmdTd2l0Y2hlZDogbWVyZ2VkLm9uT3JnU3dpdGNoZWQsXG4gICAgICBvbk9yZ0NyZWF0ZWQ6IG1lcmdlZC5vbk9yZ0NyZWF0ZWQsXG4gICAgICBvbkxvZ2dlZE91dDogbWVyZ2VkLm9uTG9nZ2VkT3V0LFxuICAgICAgb25BY2NvdW50RGVsZXRlZDogbWVyZ2VkLm9uQWNjb3VudERlbGV0ZWQsXG4gICAgfTtcbiAgfSk7XG5cbiAgLyoqIE5hbWVzcGFjZSBpMThuIHJlc3VlbHRvIChjYXB0dXJhZG8gcGFyYSBsbGFtYWRhcyBuby1yZWFjdGl2YXMpLiAqL1xuICBwcml2YXRlIGdldCBucygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVkQ29uZmlnKCkuaTE4bk5hbWVzcGFjZTtcbiAgfVxuXG4gIHJlYWRvbmx5IG9yZ3MgPSBzaWduYWw8T3JnYW5pemF0aW9uW10+KFtdKTtcbiAgcmVhZG9ubHkgb3Jnc0xvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IG9yZ3NFcnJvciA9IHNpZ25hbDx1bmtub3duPihudWxsKTtcblxuICByZWFkb25seSBvcmdzRXJyb3JTdGF0ZSA9IGNvbXB1dGVkPEVtcHR5U3RhdGVNZXRhZGF0YSB8IG51bGw+KCgpID0+IHtcbiAgICB0aGlzLmkxOG4ubGFuZygpO1xuICAgIGNvbnN0IGVyciA9IHRoaXMub3Jnc0Vycm9yKCk7XG4gICAgaWYgKCFlcnIpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBjcmVhdGVFcnJvclN0YXRlUHJvcHMoZXJyLCB7XG4gICAgICB0aXRsZToge1xuICAgICAgICBvZmZsaW5lOiB0aGlzLnR0KCdvcmdzT2ZmbGluZVRpdGxlJyksXG4gICAgICAgIGVycm9yOiB0aGlzLnR0KCdvcmdzRXJyb3JUaXRsZScpLFxuICAgICAgfSxcbiAgICAgIGRlc2NyaXB0aW9uOiB7XG4gICAgICAgIG9mZmxpbmU6IHRoaXMudHQoJ29yZ3NPZmZsaW5lSGludCcpLFxuICAgICAgICBlcnJvcjogaW50ZXJwcmV0RXJyb3IoZXJyKS5tZXNzYWdlLFxuICAgICAgfSxcbiAgICAgIHJldHJ5TGFiZWw6IHRoaXMudHQoJ29yZ3NSZXRyeScpLFxuICAgICAgb25SZXRyeTogKCkgPT4gdGhpcy5sb2FkT3JncygpLFxuICAgICAgcmV0cnlpbmc6IHRoaXMub3Jnc0xvYWRpbmcoKSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgY3JlYXRlT3JnT3BlbiA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGRlbGV0ZUFjY291bnRPcGVuID0gc2lnbmFsKGZhbHNlKTtcblxuICByZWFkb25seSBwZW5kaW5nSW52aXRlcyA9IHNpZ25hbDxQZW5kaW5nSW52aXRhdGlvbltdPihbXSk7XG4gIHJlYWRvbmx5IHBlbmRpbmdJbnZpdGVzTG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGludml0ZUFjY2VwdGluZyA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICByZWFkb25seSBwYWdlVGl0bGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnR0KCdwYWdlVGl0bGUnKSk7XG4gIHJlYWRvbmx5IHBhZ2VEZXNjcmlwdGlvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ3BhZ2VEZXNjcmlwdGlvbicpKTtcbiAgcmVhZG9ubHkgb3Jnc1RpdGxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50dCgnb3Jnc1RpdGxlJykpO1xuICByZWFkb25seSBvcmdzRW1wdHkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnR0KCdvcmdzRW1wdHknKSk7XG4gIHJlYWRvbmx5IG9yZ3NNb3JlSW5mbyA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ29yZ3NNb3JlSW5mbycpKTtcbiAgcmVhZG9ubHkgb3Jnc05ld1F1ZXN0aW9uID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50dCgnb3Jnc05ld1F1ZXN0aW9uJykpO1xuICByZWFkb25seSBvcmdzTmV3SGludCA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ29yZ3NOZXdIaW50JykpO1xuICByZWFkb25seSBuZXdPcmdDdGFQcm9wcyA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgdGl0bGU6IHRoaXMudHQoJ29yZ3NOZXdRdWVzdGlvbicpLFxuICAgIGRlc2NyaXB0aW9uOiB0aGlzLnR0KCdvcmdzTmV3SGludCcpLFxuICAgIHBhZGRpbmc6ICcxNnB4JyxcbiAgICBib3JkZXJSYWRpdXM6ICcxNHB4JyxcbiAgICBhY3Rpb25zOiB7XG4gICAgICBwb3NpdGlvbjogJ3JpZ2h0JyxcbiAgICAgIGNvbHVtbmVkOiBmYWxzZSxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IHRoaXMudHQoJ29yZ3NOZXdDdGEnKSxcbiAgICAgICAgICBjb2xvcjogJ3ByaW1hcnknLFxuICAgICAgICAgIGZpbGw6ICdzb2xpZCcsXG4gICAgICAgICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgICAgICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgIHN0YXRlOiAnRU5BQkxFRCcsXG4gICAgICAgICAgdG9rZW46ICdhY2NvdW50LW5ldy1vcmcnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9IGFzIEJ1dHRvbkdyb3VwTWV0YWRhdGEsXG4gIH0pKTtcbiAgcmVhZG9ubHkgbG9nb3V0VGl0bGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnR0KCdsb2dvdXRUaXRsZScpKTtcbiAgcmVhZG9ubHkgbG9nb3V0SGludCA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ2xvZ291dEhpbnQnKSk7XG4gIHJlYWRvbmx5IGRhbmdlclRpdGxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50dCgnZGFuZ2VyVGl0bGUnKSk7XG4gIHJlYWRvbmx5IGRhbmdlckRlbGV0ZVRpdGxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50dCgnZGFuZ2VyRGVsZXRlVGl0bGUnKSk7XG4gIHJlYWRvbmx5IGRhbmdlckRlbGV0ZUhpbnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnR0KCdkYW5nZXJEZWxldGVIaW50JykpO1xuXG4gIHJlYWRvbmx5IGFjdGl2ZU9yZ0lkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHUgPSB0aGlzLmF1dGgudXNlcigpIGFzIHtcbiAgICAgIGFjdGl2ZU9yZ0lkPzogc3RyaW5nO1xuICAgICAgYWN0aXZlT3JnPzogc3RyaW5nO1xuICAgIH0gfCBudWxsO1xuICAgIHJldHVybiB1Py5hY3RpdmVPcmdJZCA/PyB1Py5hY3RpdmVPcmcgPz8gJyc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGFjdGl2ZU9yZ1JvbGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgcm9sZXMgPSAodGhpcy5hdXRoIGFzIHVua25vd24gYXMgeyByb2xlcz86ICgpID0+IHN0cmluZ1tdIH0pLnJvbGVzPy4oKSA/PyBbXTtcbiAgICByZXR1cm4gcm9sZXNbMF0gPz8gbnVsbDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgYWN0aXZlT3JnID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcmdzKCkuZmluZChvID0+IG8uaWQgPT09IHRoaXMuYWN0aXZlT3JnSWQoKSkgPz8gbnVsbCk7XG5cbiAgcmVhZG9ubHkgbG9nb3V0QnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdsb2dvdXQnKSxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgdHlwZTogJ2J1dHRvbicsXG4gICAgdG9rZW46ICdhY2NvdW50LWxvZ291dCcsXG4gIH0pKTtcblxuICByZWFkb25seSBkZWxldGVBY2NvdW50QnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdkYW5nZXJEZWxldGVDdGEnKSxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgdHlwZTogJ2J1dHRvbicsXG4gICAgdG9rZW46ICdhY2NvdW50LWRlbGV0ZScsXG4gIH0pKTtcblxuICByZWFkb25seSBzd2l0Y2hBY2NvdW50QnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdzd2l0Y2hBY2NvdW50Q3RhJyksXG4gICAgY29sb3I6ICdkYXJrJyxcbiAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIHNoYXBlOiAncm91bmQnLFxuICAgIHR5cGU6ICdidXR0b24nLFxuICAgIHRva2VuOiAnYWNjb3VudC1zd2l0Y2gnLFxuICB9KSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbnMgPSB0aGlzLm5zO1xuICAgIGlmICghdGhpcy5pMThuLmhhc05hbWVzcGFjZShucykpIHtcbiAgICAgIHRoaXMuaTE4bi5yZWdpc3RlckNvbnRlbnQobnMsIEFDQ09VTlRfVklFV19JMThOKTtcbiAgICB9XG4gICAgdGhpcy5uYXYuc2V0QmFja0hlYWRlcigncGFnZVRpdGxlJywgbnMsIHsgd2l0aE1lbnU6IHRydWUgfSk7XG4gICAgdGhpcy5sb2FkT3JncygpO1xuICAgIHRoaXMubG9hZFBlbmRpbmdJbnZpdGVzKCk7XG4gICAgY29ubmVjdFBhZ2VSZWZyZXNoKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLmxvYWRPcmdzKCksIHRoaXMubG9hZFBlbmRpbmdJbnZpdGVzKCldKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9yZ1R5cGVMYWJlbCh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIFBFUlNPTkFMOiB0aGlzLnR0KCdvcmdzVHlwZVBlcnNvbmFsJyksXG4gICAgICBQUklWQVRFOiB0aGlzLnR0KCdvcmdzVHlwZVByaXZhdGUnKSxcbiAgICAgIFBVQkxJQzogdGhpcy50dCgnb3Jnc1R5cGVQdWJsaWMnKSxcbiAgICAgIEJVU0lORVNTOiB0aGlzLnR0KCdvcmdzVHlwZUJ1c2luZXNzJyksXG4gICAgfTtcbiAgICByZXR1cm4gbWFwW3R5cGVdID8/IHR5cGU7XG4gIH1cblxuICBvblN3aXRjaEFjY291bnQoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHtcbiAgICAgIGNvbXBvbmVudDogU3dpdGNoT3JnTW9kYWxDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczoge1xuICAgICAgICBpMThuTmFtZXNwYWNlOiAnU2V0dGluZ3MuU3dpdGNoT3JnJyxcbiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkT3JncygpO1xuICAgICAgICAgIHRoaXMubG9hZFBlbmRpbmdJbnZpdGVzKCk7XG4gICAgICAgICAgdGhpcy5yZXNvbHZlZENvbmZpZygpLm9uT3JnU3dpdGNoZWQ/LigpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGJyZWFrcG9pbnRzOiB7XG4gICAgICAgIGJyZWFrcG9pbnRzOiBbMCwgMC44NV0sXG4gICAgICAgIGluaXRpYWxCcmVha3BvaW50OiAwLjg1LFxuICAgICAgICBzaG93SGFuZGxlOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIG9uRGVsZXRlQWNjb3VudCgpOiB2b2lkIHtcbiAgICB0aGlzLmRlbGV0ZUFjY291bnRPcGVuLnNldCh0cnVlKTtcbiAgICB0aGlzLnJlc29sdmVkQ29uZmlnKCkub25BY2NvdW50RGVsZXRlZD8uKCk7XG4gIH1cblxuICBvbk1hbmFnZU9yZygpOiB2b2lkIHtcbiAgICB0aGlzLm5hdi5uYXZpZ2F0ZUJ5VXJsKHRoaXMucmVzb2x2ZWRDb25maWcoKS5tYW5hZ2VPcmdSb3V0ZSk7XG4gIH1cblxuICBvbk5ld09yZygpOiB2b2lkIHtcbiAgICB0aGlzLmNyZWF0ZU9yZ09wZW4uc2V0KHRydWUpO1xuICB9XG5cbiAgb25PcmdDcmVhdGVkKG5ld09yZzogT3JnYW5pemF0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkT3JncygpO1xuICAgIHRoaXMucmVzb2x2ZWRDb25maWcoKS5vbk9yZ0NyZWF0ZWQ/LihuZXdPcmcpO1xuICB9XG5cbiAgb25Nb3JlSW5mbygpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oe1xuICAgICAgY29tcG9uZW50OiBPcmdJbmZvU2hlZXRDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczoge1xuICAgICAgICB0aXRsZTogdGhpcy50dCgnb3Jnc0luZm9UaXRsZScpLFxuICAgICAgICBzdWJ0aXRsZTogdGhpcy50dCgnb3Jnc0luZm9TdWJ0aXRsZScpLFxuICAgICAgICBib2R5OiB0aGlzLnR0KCdvcmdzSW5mb0NvbnRlbnQnKSxcbiAgICAgICAgY2xvc2VMYWJlbDogdGhpcy50dCgnb3Jnc0luZm9DbG9zZScpLFxuICAgICAgICBjbG9zZVByb3BzOiB7XG4gICAgICAgICAgdGV4dDogdGhpcy50dCgnb3Jnc0luZm9DbG9zZScpLFxuICAgICAgICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICAgICAgICBleHBhbmQ6ICdibG9jaycsXG4gICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYnJlYWtwb2ludHM6IHtcbiAgICAgICAgYnJlYWtwb2ludHM6IFswLCAwLjg1XSxcbiAgICAgICAgaW5pdGlhbEJyZWFrcG9pbnQ6IDAuODUsXG4gICAgICAgIHNob3dIYW5kbGU6IHRydWUsXG4gICAgICB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgb25Mb2dvdXQoKTogdm9pZCB7XG4gICAgdGhpcy5hdXRoLmxvZ291dFdpdGhDb25maXJtYXRpb24oKTtcbiAgICB0aGlzLnJlc29sdmVkQ29uZmlnKCkub25Mb2dnZWRPdXQ/LigpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUGVuZGluZ0ludml0ZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5wZW5kaW5nSW52aXRlc0xvYWRpbmcuc2V0KHRydWUpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcbiAgICAgIHRoaXMub3JnU2VydmljZVxuICAgICAgICAuZ2V0UGVuZGluZ0ludml0YXRpb25zKClcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogaXRlbXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nSW52aXRlcy5zZXQoaXRlbXMpO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nSW52aXRlc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdJbnZpdGVzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYWNjZXB0UGVuZGluZ0ludml0ZShpbnZpdGU6IFBlbmRpbmdJbnZpdGF0aW9uKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW52aXRlQWNjZXB0aW5nKCkpIHJldHVybjtcbiAgICB0aGlzLmludml0ZUFjY2VwdGluZy5zZXQoaW52aXRlLm9yZ0lkKTtcbiAgICB0aGlzLm9yZ1NlcnZpY2VcbiAgICAgIC5hY2NlcHRJbnZpdGF0aW9uKGludml0ZS5vcmdJZClcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMudG9hc3Quc2hvdyh7XG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnR0KCdpbnZpdGVBY2NlcHRlZCcpLFxuICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgIGR1cmF0aW9uOiAzNTAwLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMucGVuZGluZ0ludml0ZXMudXBkYXRlKGxpc3QgPT4gbGlzdC5maWx0ZXIoaSA9PiBpLm9yZ0lkICE9PSBpbnZpdGUub3JnSWQpKTtcbiAgICAgICAgICB0aGlzLmxvYWRPcmdzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JzLmhhbmRsZShlcnIsIHsgY29udGV4dDogJ2FjY291bnQuYWNjZXB0UGVuZGluZ0ludml0ZScgfSk7XG4gICAgICAgICAgdGhpcy5pbnZpdGVBY2NlcHRpbmcuc2V0KG51bGwpO1xuICAgICAgICB9LFxuICAgICAgICBjb21wbGV0ZTogKCkgPT4gdGhpcy5pbnZpdGVBY2NlcHRpbmcuc2V0KG51bGwpLFxuICAgICAgfSk7XG4gIH1cblxuICBkZWNsaW5lUGVuZGluZ0ludml0ZShpbnZpdGU6IFBlbmRpbmdJbnZpdGF0aW9uKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW52aXRlQWNjZXB0aW5nKCkpIHJldHVybjtcbiAgICB0aGlzLmludml0ZUFjY2VwdGluZy5zZXQoaW52aXRlLm9yZ0lkKTtcbiAgICB0aGlzLm9yZ1NlcnZpY2VcbiAgICAgIC5kZWNsaW5lSW52aXRhdGlvbihpbnZpdGUub3JnSWQpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnRvYXN0LnNob3coe1xuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy50dCgnaW52aXRlRGVjbGluZWQnKSxcbiAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICBkdXJhdGlvbjogMjUwMCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnBlbmRpbmdJbnZpdGVzLnVwZGF0ZShsaXN0ID0+IGxpc3QuZmlsdGVyKGkgPT4gaS5vcmdJZCAhPT0gaW52aXRlLm9yZ0lkKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JzLmhhbmRsZShlcnIsIHsgY29udGV4dDogJ2FjY291bnQuZGVjbGluZVBlbmRpbmdJbnZpdGUnIH0pO1xuICAgICAgICAgIHRoaXMuaW52aXRlQWNjZXB0aW5nLnNldChudWxsKTtcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHRoaXMuaW52aXRlQWNjZXB0aW5nLnNldChudWxsKSxcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkT3JncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLm9yZ3NMb2FkaW5nLnNldCh0cnVlKTtcbiAgICB0aGlzLm9yZ3NFcnJvci5zZXQobnVsbCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgdGhpcy5vcmdTZXJ2aWNlLmxpc3RNeU9yZ3MoKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBvcmdzID0+IHtcbiAgICAgICAgICBjb25zdCBhY3RpdmVJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICAgICAgICB0aGlzLm9yZ3Muc2V0KFsuLi5vcmdzXS5zb3J0KChhLCBiKSA9PiAoYS5pZCA9PT0gYWN0aXZlSWQgPyAtMSA6IGIuaWQgPT09IGFjdGl2ZUlkID8gMSA6IDApKSk7XG4gICAgICAgICAgdGhpcy5vcmdzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5vcmdzRXJyb3Iuc2V0KGVycik7XG4gICAgICAgICAgdGhpcy5vcmdzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHR0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoa2V5LCB0aGlzLm5zKTtcbiAgfVxufVxuIl19
728
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvYWNjb3VudC12aWV3L2FjY291bnQtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUNMLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsV0FBVyxFQUNYLGFBQWEsRUFDYixxQkFBcUIsRUFDckIsY0FBYyxHQUNmLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBRXhGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFD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QjtrQkFuWGhDLFNBQVM7K0JBQ0Usa0JBQWtCLGNBQ2hCLElBQUksV0FDUDt3QkFDUCxnQkFBZ0I7d0JBQ2hCLG1CQUFtQjt3QkFDbkIsdUJBQXVCO3dCQUN2QixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLHVCQUF1Qjt3QkFDdkIsdUJBQXVCO3dCQUN2QiwyQkFBMkI7d0JBQzNCLE9BQU87d0JBQ1AsU0FBUzt3QkFDVCxhQUFhO3FCQUNkLFlBQ1M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrTFQ7d0RBOExRLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRpdGxlQ2FzZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5qZWN0LCBJbnB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJb25CdXR0b24sIElvbkljb24gfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHtcbiAgYnVzaW5lc3NPdXRsaW5lLFxuICBjaGV2cm9uRm9yd2FyZE91dGxpbmUsXG4gIG1haWxPdXRsaW5lLFxuICBwZW9wbGVPdXRsaW5lLFxuICBzd2FwSG9yaXpvbnRhbE91dGxpbmUsXG4gIHdhcm5pbmdPdXRsaW5lLFxufSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXNwbGF5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvZGlzcGxheS9kaXNwbGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGV4dC90ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RpdGxlL3RpdGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDdGFDYXJkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2N0YS1jYXJkL2N0YS1jYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlTWV0YWRhdGEgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZW1wdHktc3RhdGUvdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlRXJyb3JTdGF0ZVByb3BzIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2VtcHR5LXN0YXRlL2ZhY3RvcnknO1xuaW1wb3J0IHsgSW52aXRhdGlvbkNhcmRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvaW52aXRhdGlvbi1jYXJkL2ludml0YXRpb24tY2FyZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uR3JvdXBNZXRhZGF0YSB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9idXR0b24tZ3JvdXAvdHlwZXMnO1xuaW1wb3J0IHsgU2tlbGV0b25MYXlvdXRDb21wb25lbnQgfSBmcm9tICcuLi9za2VsZXRvbi1sYXlvdXQvc2tlbGV0b24tbGF5b3V0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25NZXRhZGF0YSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgaW50ZXJwcmV0RXJyb3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9lcnJvcnMvaW50ZXJwcmV0LWVycm9yJztcbmltcG9ydCB7IE1vZGFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21vZGFsL21vZGFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uL25hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBPcmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb3JnL29yZy5zZXJ2aWNlJztcbmltcG9ydCB7IE9yZ2FuaXphdGlvbiwgUGVuZGluZ0ludml0YXRpb24gfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9vcmcvdHlwZXMnO1xuaW1wb3J0IHsgY29ubmVjdFBhZ2VSZWZyZXNoIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcGFnZS1yZWZyZXNoL3BhZ2UtcmVmcmVzaC5zZXJ2aWNlJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RvYXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVmFsdGVjaEVycm9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Vycm9ycy92YWx0ZWNoLWVycm9yLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBDcmVhdGVPcmdNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL2NyZWF0ZS1vcmctbW9kYWwvY3JlYXRlLW9yZy1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGVsZXRlQWNjb3VudE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vZGVsZXRlLWFjY291bnQtbW9kYWwvZGVsZXRlLWFjY291bnQtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IE9yZ0luZm9TaGVldENvbXBvbmVudCB9IGZyb20gJy4uL29yZy1pbmZvLXNoZWV0L29yZy1pbmZvLXNoZWV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTd2l0Y2hPcmdNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL3N3aXRjaC1vcmctbW9kYWwvc3dpdGNoLW9yZy1tb2RhbC5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBBY2NvdW50Vmlld0NvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQUNDT1VOVF9WSUVXX0kxOE4gfSBmcm9tICcuL2FjY291bnQtdmlldy5pMThuJztcblxuYWRkSWNvbnMoeyBwZW9wbGVPdXRsaW5lLCBidXNpbmVzc091dGxpbmUsIGNoZXZyb25Gb3J3YXJkT3V0bGluZSwgc3dhcEhvcml6b250YWxPdXRsaW5lLCBtYWlsT3V0bGluZSwgd2FybmluZ091dGxpbmUgfSk7XG5cbmNvbnN0IERFRkFVTFRfTkFNRVNQQUNFID0gJ1NldHRpbmdzLkFjY291bnQnO1xuY29uc3QgREVGQVVMVF9NQU5BR0VfT1JHX1JPVVRFID0gJy9hcHAvc2V0dGluZ3Mvb3JnYW5pemF0aW9uJztcblxuLyoqXG4gKiBgdmFsLWFjY291bnQtdmlld2Ag4oCUIHZpc3RhIEN1ZW50YSBmdWxsLWZlYXR1cmUgYXV0b2NvbnRlbmlkYSAob3JnYW5pc20pLlxuICogUHJvbW92aWRhIGRlc2RlIGBzaG93Y2FzZWAgYmFqbyBlbCBwcm9jZXNvIGRlIEFEUi0wMjEuIFJlw7puZTpcbiAqICAtICoqSW52aXRhY2lvbmVzIHBlbmRpZW50ZXMqKiDigJQgYWNlcHRhciAvIHJlY2hhemFyIChgdmFsLWludml0YXRpb24tY2FyZGApLlxuICogIC0gKipPcmdhbml6YWNpb25lcyoqIOKAlCBjYXJkIGRlIG9yZyBhY3RpdmEgKyBlbXB0eS1jYXJkICsgQ1RBIFwiTnVldmEgb3JnXCJcbiAqICAgIChtb2RhbCBgdmFsLWNyZWF0ZS1vcmctbW9kYWxgKSArIFwiVmVyIHRvZGFzXCIgKG1vZGFsIGB2YWwtc3dpdGNoLW9yZy1tb2RhbGApLlxuICogIC0gKipDZXJyYXIgZXN0YSBzZXNpw7NuKiog4oCUIGBhdXRoLmxvZ291dFdpdGhDb25maXJtYXRpb24oKWAuXG4gKiAgLSAqKkVsaW1pbmFyIGN1ZW50YSoqIOKAlCBtb2RhbCBgdmFsLWRlbGV0ZS1hY2NvdW50LW1vZGFsYC5cbiAqXG4gKiBOTyByZW5kZXJpemEgaW9uLWNvbnRlbnQg4oCUIHZpdmUgZGVudHJvIGRlIHZhbC1wYWdlLXdyYXBwZXIuIE5vIHVzYSBkZWVwLWxpbmtzO1xuICogYEFjdGl2YXRlZFJvdXRlYCBzZSBpbnllY3RhIGB7IG9wdGlvbmFsOiB0cnVlIH1gIHNvbG8gcGFyYSBsZWVyIGVsIHJvdXRlIGRhdGFcbiAqIGRlIGNvbmZpZy4gTGEgbmF2ZWdhY2nDs24gYSBsYSBvcmcgcm91dGUgdmEgcG9yIGBOYXZpZ2F0aW9uU2VydmljZWAuXG4gKlxuICogQXV0by1yZWdpc3RyYSBzdXMgZGVmYXVsdHMgaTE4biAoZXMvZW4pIGVuIGVsIGNvbnN0cnVjdG9yIHNpIGVsIGNvbnN1bWVyIG5vXG4gKiBwcm92ZXnDsyBlbCBuYW1lc3BhY2UgY29uZmlndXJhZG8gKGRlZmF1bHQgYFNldHRpbmdzLkFjY291bnRgKS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWFjY291bnQtdmlldycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBEaXNwbGF5Q29tcG9uZW50LFxuICAgIEVtcHR5U3RhdGVDb21wb25lbnQsXG4gICAgU2tlbGV0b25MYXlvdXRDb21wb25lbnQsXG4gICAgVGl0bGVDb21wb25lbnQsXG4gICAgVGV4dENvbXBvbmVudCxcbiAgICBCdXR0b25Db21wb25lbnQsXG4gICAgQ3RhQ2FyZENvbXBvbmVudCxcbiAgICBJbnZpdGF0aW9uQ2FyZENvbXBvbmVudCxcbiAgICBDcmVhdGVPcmdNb2RhbENvbXBvbmVudCxcbiAgICBEZWxldGVBY2NvdW50TW9kYWxDb21wb25lbnQsXG4gICAgSW9uSWNvbixcbiAgICBJb25CdXR0b24sXG4gICAgVGl0bGVDYXNlUGlwZSxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicGFnZVwiPlxuICAgICAgPGhlYWRlciBjbGFzcz1cInBhZ2UtaGVhZGVyXCI+XG4gICAgICAgIDx2YWwtZGlzcGxheSBbcHJvcHNdPVwieyBzaXplOiAnc21hbGwnLCBjb2xvcjogJ2RhcmsnLCBjb250ZW50OiBwYWdlVGl0bGUoKSB9XCIgLz5cbiAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICBzaXplOiAnbGFyZ2UnLFxuICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgY29udGVudDogcGFnZURlc2NyaXB0aW9uKCksXG4gICAgICAgICAgfVwiXG4gICAgICAgIC8+XG4gICAgICA8L2hlYWRlcj5cblxuICAgICAgQGlmIChyZXNvbHZlZENvbmZpZygpLnNob3dQZW5kaW5nSW52aXRlcyAmJiBwZW5kaW5nSW52aXRlcygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICAgICAgY29udGVudDogdHQoJ3BlbmRpbmdJbnZpdGVzVGl0bGUnKSxcbiAgICAgICAgICB9XCJcbiAgICAgICAgLz5cbiAgICAgICAgQGZvciAoaW52aXRlIG9mIHBlbmRpbmdJbnZpdGVzKCk7IHRyYWNrIGludml0ZS5vcmdJZCkge1xuICAgICAgICAgIDx2YWwtaW52aXRhdGlvbi1jYXJkXG4gICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICB0b2tlbjogaW52aXRlLm9yZ0lkLFxuICAgICAgICAgICAgICBvcmdOYW1lOiBpbnZpdGUub3JnTmFtZSxcbiAgICAgICAgICAgICAgaW52aXRlck5hbWU6IGludml0ZS5pbnZpdGVyTmFtZSxcbiAgICAgICAgICAgICAgcm9sZTogaW52aXRlLnJvbGVJZCxcbiAgICAgICAgICAgICAgYWNjZXB0aW5nOiBpbnZpdGVBY2NlcHRpbmcoKSA9PT0gaW52aXRlLm9yZ0lkLFxuICAgICAgICAgICAgICBkaXNhYmxlZDogISFpbnZpdGVBY2NlcHRpbmcoKSxcbiAgICAgICAgICAgICAgYWNjZXB0TGFiZWw6IHR0KCdhY2NlcHQnKSxcbiAgICAgICAgICAgICAgZGVjbGluZUxhYmVsOiB0dCgnZGVjbGluZScpLFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAob25BY2NlcHQpPVwiYWNjZXB0UGVuZGluZ0ludml0ZShpbnZpdGUpXCJcbiAgICAgICAgICAgIChvbkRlY2xpbmUpPVwiZGVjbGluZVBlbmRpbmdJbnZpdGUoaW52aXRlKVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd09yZ2FuaXphdGlvbnMpIHtcbiAgICAgICAgPCEtLSBPcmdhbml6YXRpb25zIC0tPlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXItcm93XCI+XG4gICAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IG9yZ3NUaXRsZSgpLFxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICBAaWYgKG9yZ3MoKS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJvdXRsaW5lXCIgY29sb3I9XCJkYXJrXCIgc2hhcGU9XCJyb3VuZFwiIHNpemU9XCJzbWFsbFwiIChjbGljayk9XCJvblN3aXRjaEFjY291bnQoKVwiPlxuICAgICAgICAgICAgICAgIHt7IHR0KCdvcmdzVmlld0FsbCcpIH19XG4gICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1ib2R5XCI+XG4gICAgICAgICAgICBAaWYgKG9yZ3NMb2FkaW5nKCkpIHtcbiAgICAgICAgICAgICAgPHZhbC1za2VsZXRvbi1sYXlvdXQgW3Byb3BzXT1cInsgcHJlc2V0OiAnbGlzdCcsIHJvd3M6IDMgfVwiIC8+XG4gICAgICAgICAgICB9IEBlbHNlIGlmIChvcmdzRXJyb3JTdGF0ZSgpKSB7XG4gICAgICAgICAgICAgIDx2YWwtZW1wdHktc3RhdGUgW3Byb3BzXT1cIm9yZ3NFcnJvclN0YXRlKCkhXCIgLz5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICBAaWYgKGFjdGl2ZU9yZygpOyBhcyBvcmcpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3Jncy1saXN0XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3JnLWNhcmQgb3JnLWNhcmQtLWFjdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3JnLWNhcmRfX2ljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImJ1c2luZXNzLW91dGxpbmVcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZy1jYXJkX19ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmctY2FyZF9fbmFtZVwiPnt7IG9yZy5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctY2FyZF9fbWV0YVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmctY2FyZF9fbWV0YS1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnLWNhcmRfX21ldGEtbGFiZWxcIj57eyB0dCgnb3Jnc0xhYmVsVHlwZScpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcmdUeXBlTGFiZWwob3JnLnR5cGUpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGFjdGl2ZU9yZ1JvbGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1jYXJkX19tZXRhLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1jYXJkX19tZXRhLWxhYmVsXCI+e3sgdHQoJ29yZ3NMYWJlbFJvbGUnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhY3RpdmVPcmdSb2xlKCkgfCB0aXRsZWNhc2UgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmctY2FyZF9fbWV0YS1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnLWNhcmRfX21ldGEtbGFiZWxcIj57eyB0dCgnb3Jnc0xhYmVsU3RhdHVzJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHR0KCdvcmdzU3RhdHVzQWN0aXZlJykgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctY2FyZF9fZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cIm91dGxpbmVcIiBjb2xvcj1cImRhcmtcIiBzaGFwZT1cInJvdW5kXCIgc2l6ZT1cInNtYWxsXCIgKGNsaWNrKT1cIm9uTWFuYWdlT3JnKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHR0KCdvcmdzTWFuYWdlJykgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH0gQGVsc2UgaWYgKG9yZ3MoKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3Jncy1lbXB0eS1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3Jncy1lbXB0eS1jYXJkX19tYWluXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwicGVvcGxlLW91dGxpbmVcIiBjbGFzcz1cIm9yZ3MtZW1wdHktY2FyZF9faWNvblwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3Jncy1lbXB0eS1jYXJkX190ZXh0XCI+e3sgb3Jnc0VtcHR5KCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJvcmdzLWVtcHR5LWNhcmRfX2xpbmtcIiAoY2xpY2spPVwib25Nb3JlSW5mbygpXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IG9yZ3NNb3JlSW5mbygpIH19XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd05ld09yZ0N0YSkge1xuICAgICAgICAgICAgICAgIDwhLS0gTnVldmEgb3JnYW5pemFjaW9uOiBDVEEgY2FyZCBjb24gdGl0dWxvLCBzdWJ0aXR1bG8geSBib3RvbiAtLT5cbiAgICAgICAgICAgICAgICA8dmFsLWN0YS1jYXJkIGNsYXNzPVwib3JnLW5ldy1jdGEtY2FyZFwiIFtwcm9wc109XCJuZXdPcmdDdGFQcm9wcygpXCIgKG9uQWN0aW9uKT1cIm9uTmV3T3JnKClcIiAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgQGlmIChyZXNvbHZlZENvbmZpZygpLnNob3dMb2dvdXQpIHtcbiAgICAgICAgPCEtLSBMb2dvdXQgdGhpcyBzZXNzaW9uIC0tPlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIj5cbiAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgY29udGVudDogbG9nb3V0VGl0bGUoKSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tYm9keVwiPlxuICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgY29udGVudDogbG9nb3V0SGludCgpLFxuICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwibG9nb3V0QnV0dG9uUHJvcHMoKVwiIChjbGljayk9XCJvbkxvZ291dCgpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG5cbiAgICAgIEBpZiAocmVzb2x2ZWRDb25maWcoKS5zaG93RGVsZXRlQWNjb3VudCkge1xuICAgICAgICA8IS0tIERlbGV0ZSBhY2NvdW50IC0tPlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZS1kYW5nZXJcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwid2FybmluZy1vdXRsaW5lXCIgY2xhc3M9XCJkYW5nZXItaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICA8dmFsLXRpdGxlIFtwcm9wc109XCJ7IHNpemU6ICdtZWRpdW0nLCBjb2xvcjogJ2RhcmsnLCBib2xkOiB0cnVlLCBjb250ZW50OiBkYW5nZXJEZWxldGVUaXRsZSgpIH1cIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWJvZHlcIj5cbiAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGRhbmdlckRlbGV0ZUhpbnQoKSxcbiAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cImRlbGV0ZUFjY291bnRCdXR0b25Qcm9wcygpXCIgKG9uQ2xpY2spPVwib25EZWxldGVBY2NvdW50KClcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cbiAgICAgIDx2YWwtY3JlYXRlLW9yZy1tb2RhbFxuICAgICAgICBbaXNPcGVuXT1cImNyZWF0ZU9yZ09wZW4oKVwiXG4gICAgICAgIFtpMThuTmFtZXNwYWNlXT1cIidDcmVhdGVPcmdNb2RhbCdcIlxuICAgICAgICAoZGlzbWlzc2VkKT1cImNyZWF0ZU9yZ09wZW4uc2V0KGZhbHNlKVwiXG4gICAgICAgIChjcmVhdGVkKT1cIm9uT3JnQ3JlYXRlZCgkZXZlbnQpXCJcbiAgICAgIC8+XG4gICAgICA8dmFsLWRlbGV0ZS1hY2NvdW50LW1vZGFsXG4gICAgICAgIFtpc09wZW5dPVwiZGVsZXRlQWNjb3VudE9wZW4oKVwiXG4gICAgICAgIFtpMThuTmFtZXNwYWNlXT1cIidTZXR0aW5ncy5EZWxldGVBY2NvdW50J1wiXG4gICAgICAgIChkaXNtaXNzZWQpPVwiZGVsZXRlQWNjb3VudE9wZW4uc2V0KGZhbHNlKVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAucGFnZSB7XG4gICAgICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgICAgICAgbWF4LXdpZHRoOiA3MjBweDtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICB9XG4gICAgICAucGFnZS1oZWFkZXIge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgfVxuICAgICAgLnNldHRpbmdzLXNlY3Rpb24ge1xuICAgICAgICBwYWRkaW5nOiAxNnB4IDA7XG4gICAgICB9XG4gICAgICAuc2V0dGluZ3Mtc2VjdGlvbiArIC5zZXR0aW5ncy1zZWN0aW9uIHtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXZhbC1ib3JkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wOCkpO1xuICAgICAgfVxuICAgICAgLnNldHRpbmdzLXNlY3Rpb24gdmFsLXRpdGxlIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7XG4gICAgICB9XG4gICAgICAuc2VjdGlvbi1ib2R5IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAxMHB4O1xuICAgICAgfVxuICAgICAgLnJvdy1hY3Rpb25zIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTJweDtcbiAgICAgIH1cbiAgICAgIC5yb3ctYWN0aW9ucy0tZ2FwIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgIH1cbiAgICAgIC5zZWN0aW9uLWhlYWRlci1yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgICB9XG4gICAgICAub3JnLW5ldy1jdGEtY2FyZCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgICAgfVxuICAgICAgLm9yZ3MtZW1wdHktY2FyZCB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1zZWNvbmRhcnktdGludCwgcmdiYSh2YXIoLS1pb24tY29sb3Itc2Vjb25kYXJ5LXJnYiwgMTMwLCAxMDEsIDIwOCksIDAuMikpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxOHB4O1xuICAgICAgICBwYWRkaW5nOiAxOHB4IDE2cHggMTJweDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICB9XG4gICAgICAub3Jncy1lbXB0eS1jYXJkX19tYWluIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAxMHB4O1xuICAgICAgfVxuICAgICAgLm9yZ3MtZW1wdHktY2FyZF9faWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyayk7XG4gICAgICB9XG4gICAgICAub3Jncy1lbXB0eS1jYXJkX190ZXh0IHtcbiAgICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrKTtcbiAgICAgIH1cbiAgICAgIC5vcmdzLWVtcHR5LWNhcmRfX2xpbmsge1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgZm9udC1zaXplOiAwLjgxMjVyZW07XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgICAgICB0ZXh0LXVuZGVybGluZS1vZmZzZXQ6IDJweDtcbiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gICAgICB9XG4gICAgICAub3Jncy1saXN0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICB9XG4gICAgICAub3JnLWNhcmQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDE0cHg7XG4gICAgICAgIHBhZGRpbmc6IDE0cHggMTZweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWxpZ2h0LCAjZjRmNWY4KTtcbiAgICAgICAgYm9yZGVyOiAxLjVweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB0cmFuc2l0aW9uOlxuICAgICAgICAgIGJhY2tncm91bmQgMC4xNXMsXG4gICAgICAgICAgYm9yZGVyLWNvbG9yIDAuMTVzO1xuICAgICAgfVxuICAgICAgLm9yZy1jYXJkOmFjdGl2ZSB7XG4gICAgICAgIG9wYWNpdHk6IDAuNzU7XG4gICAgICB9XG4gICAgICAub3JnLWNhcmQtLWFjdGl2ZSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpO1xuICAgICAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpIDglLCB0cmFuc3BhcmVudCk7XG4gICAgICB9XG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLm9yZy1jYXJkLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5vcmctY2FyZCxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLm9yZy1jYXJkIHtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTtcbiAgICAgIH1cbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAub3JnLWNhcmQtLWFjdGl2ZSxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAub3JnLWNhcmQtLWFjdGl2ZSxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLm9yZy1jYXJkLS1hY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpIDE1JSwgdHJhbnNwYXJlbnQpO1xuICAgICAgfVxuICAgICAgLm9yZy1jYXJkX19pY29uIHtcbiAgICAgICAgd2lkdGg6IDQwcHg7XG4gICAgICAgIGhlaWdodDogNDBweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpIDE1JSwgdHJhbnNwYXJlbnQpO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgIH1cbiAgICAgIC5vcmctY2FyZF9fYm9keSB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAycHg7XG4gICAgICB9XG4gICAgICAub3JnLWNhcmRfX25hbWUge1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBmb250LXNpemU6IDAuOTVyZW07XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyayk7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgfVxuICAgICAgLm9yZy1jYXJkX19tZXRhIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAxcHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDNweDtcbiAgICAgIH1cbiAgICAgIC5vcmctY2FyZF9fbWV0YS1pdGVtIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjc4cmVtO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgfVxuICAgICAgLm9yZy1jYXJkX19tZXRhLWxhYmVsIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrKTtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA0cHg7XG4gICAgICB9XG4gICAgICAub3JnLWNhcmRfX2VuZCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIH1cbiAgICAgIC5zZWN0aW9uLXRpdGxlLWRhbmdlciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgfVxuICAgICAgLmRhbmdlci1pY29uIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjE1cmVtO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXdhcm5pbmctc2hhZGUsICNkNGEwMTcpO1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBY2NvdW50Vmlld0NvbXBvbmVudCB7XG4gIHByaXZhdGUgbmF2ID0gaW5qZWN0KE5hdmlnYXRpb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBhdXRoID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBvcmdTZXJ2aWNlID0gaW5qZWN0KE9yZ1NlcnZpY2UpO1xuICBwcml2YXRlIG1vZGFsU2VydmljZSA9IGluamVjdChNb2RhbFNlcnZpY2UpO1xuICBwcml2YXRlIHRvYXN0ID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XG4gIHByaXZhdGUgZXJyb3JzID0gaW5qZWN0KFZhbHRlY2hFcnJvclNlcnZpY2UpO1xuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIC8qKlxuICAgKiBDb25maWcgdsOtYSBASW5wdXQgKG9iamVjdC1maXJzdCkuIFNpIG5vIHNlIHBhc2EsIHNlIGNhZSBhbCByb3V0ZSBkYXRhXG4gICAqIGBhY2NvdW50Q29uZmlnYCAocG9ibGFkbyBwb3IgYHByb3ZpZGVWYWx0ZWNoQWNjb3VudFJvdXRlc2ApLiBgcmVzb2x2ZWRDb25maWdgXG4gICAqIG1lcmdlYSBjb24gbG9zIGRlZmF1bHRzIOKAlCBgQElucHV0YCBnYW5hIHNvYnJlIHJvdXRlIGRhdGEuXG4gICAqL1xuICBASW5wdXQoKSBjb25maWc/OiBBY2NvdW50Vmlld0NvbmZpZztcblxuICByZWFkb25seSByZXNvbHZlZENvbmZpZyA9IGNvbXB1dGVkPFxuICAgIFJlcXVpcmVkPE9taXQ8QWNjb3VudFZpZXdDb25maWcsICdvbk9yZ1N3aXRjaGVkJyB8ICdvbk9yZ0NyZWF0ZWQnIHwgJ29uTG9nZ2VkT3V0JyB8ICdvbkFjY291bnREZWxldGVkJz4+ICZcbiAgICAgIFBpY2s8QWNjb3VudFZpZXdDb25maWcsICdvbk9yZ1N3aXRjaGVkJyB8ICdvbk9yZ0NyZWF0ZWQnIHwgJ29uTG9nZ2VkT3V0JyB8ICdvbkFjY291bnREZWxldGVkJz5cbiAgPigoKSA9PiB7XG4gICAgY29uc3QgZnJvbVJvdXRlID0gKHRoaXMucm91dGU/LnNuYXBzaG90LmRhdGFbJ2FjY291bnRDb25maWcnXSA/PyB7fSkgYXMgQWNjb3VudFZpZXdDb25maWc7XG4gICAgY29uc3QgbWVyZ2VkOiBBY2NvdW50Vmlld0NvbmZpZyA9IHsgLi4uZnJvbVJvdXRlLCAuLi4odGhpcy5jb25maWcgPz8ge30pIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dQZW5kaW5nSW52aXRlczogbWVyZ2VkLnNob3dQZW5kaW5nSW52aXRlcyA/PyB0cnVlLFxuICAgICAgc2hvd09yZ2FuaXphdGlvbnM6IG1lcmdlZC5zaG93T3JnYW5pemF0aW9ucyA/PyB0cnVlLFxuICAgICAgc2hvd05ld09yZ0N0YTogbWVyZ2VkLnNob3dOZXdPcmdDdGEgPz8gdHJ1ZSxcbiAgICAgIHNob3dMb2dvdXQ6IG1lcmdlZC5zaG93TG9nb3V0ID8/IHRydWUsXG4gICAgICBzaG93RGVsZXRlQWNjb3VudDogbWVyZ2VkLnNob3dEZWxldGVBY2NvdW50ID8/IHRydWUsXG4gICAgICBpMThuTmFtZXNwYWNlOiBtZXJnZWQuaTE4bk5hbWVzcGFjZSA/PyBERUZBVUxUX05BTUVTUEFDRSxcbiAgICAgIG1hbmFnZU9yZ1JvdXRlOiBtZXJnZWQubWFuYWdlT3JnUm91dGUgPz8gREVGQVVMVF9NQU5BR0VfT1JHX1JPVVRFLFxuICAgICAgb25PcmdTd2l0Y2hlZDogbWVyZ2VkLm9uT3JnU3dpdGNoZWQsXG4gICAgICBvbk9yZ0NyZWF0ZWQ6IG1lcmdlZC5vbk9yZ0NyZWF0ZWQsXG4gICAgICBvbkxvZ2dlZE91dDogbWVyZ2VkLm9uTG9nZ2VkT3V0LFxuICAgICAgb25BY2NvdW50RGVsZXRlZDogbWVyZ2VkLm9uQWNjb3VudERlbGV0ZWQsXG4gICAgfTtcbiAgfSk7XG5cbiAgLyoqIE5hbWVzcGFjZSBpMThuIHJlc3VlbHRvIChjYXB0dXJhZG8gcGFyYSBsbGFtYWRhcyBuby1yZWFjdGl2YXMpLiAqL1xuICBwcml2YXRlIGdldCBucygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVkQ29uZmlnKCkuaTE4bk5hbWVzcGFjZTtcbiAgfVxuXG4gIHJlYWRvbmx5IG9yZ3MgPSBzaWduYWw8T3JnYW5pemF0aW9uW10+KFtdKTtcbiAgcmVhZG9ubHkgb3Jnc0xvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IG9yZ3NFcnJvciA9IHNpZ25hbDx1bmtub3duPihudWxsKTtcblxuICByZWFkb25seSBvcmdzRXJyb3JTdGF0ZSA9IGNvbXB1dGVkPEVtcHR5U3RhdGVNZXRhZGF0YSB8IG51bGw+KCgpID0+IHtcbiAgICB0aGlzLmkxOG4ubGFuZygpO1xuICAgIGNvbnN0IGVyciA9IHRoaXMub3Jnc0Vycm9yKCk7XG4gICAgaWYgKCFlcnIpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBjcmVhdGVFcnJvclN0YXRlUHJvcHMoZXJyLCB7XG4gICAgICB0aXRsZToge1xuICAgICAgICBvZmZsaW5lOiB0aGlzLnR0KCdvcmdzT2ZmbGluZVRpdGxlJyksXG4gICAgICAgIGVycm9yOiB0aGlzLnR0KCdvcmdzRXJyb3JUaXRsZScpLFxuICAgICAgfSxcbiAgICAgIGRlc2NyaXB0aW9uOiB7XG4gICAgICAgIG9mZmxpbmU6IHRoaXMudHQoJ29yZ3NPZmZsaW5lSGludCcpLFxuICAgICAgICBlcnJvcjogaW50ZXJwcmV0RXJyb3IoZXJyKS5tZXNzYWdlLFxuICAgICAgfSxcbiAgICAgIHJldHJ5TGFiZWw6IHRoaXMudHQoJ29yZ3NSZXRyeScpLFxuICAgICAgb25SZXRyeTogKCkgPT4gdGhpcy5sb2FkT3JncygpLFxuICAgICAgcmV0cnlpbmc6IHRoaXMub3Jnc0xvYWRpbmcoKSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgY3JlYXRlT3JnT3BlbiA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGRlbGV0ZUFjY291bnRPcGVuID0gc2lnbmFsKGZhbHNlKTtcblxuICByZWFkb25seSBwZW5kaW5nSW52aXRlcyA9IHNpZ25hbDxQZW5kaW5nSW52aXRhdGlvbltdPihbXSk7XG4gIHJlYWRvbmx5IHBlbmRpbmdJbnZpdGVzTG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGludml0ZUFjY2VwdGluZyA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICByZWFkb25seSBwYWdlVGl0bGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnR0KCdwYWdlVGl0bGUnKSk7XG4gIHJlYWRvbmx5IHBhZ2VEZXNjcmlwdGlvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ3BhZ2VEZXNjcmlwdGlvbicpKTtcbiAgcmVhZG9ubHkgb3Jnc1RpdGxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50dCgnb3Jnc1RpdGxlJykpO1xuICByZWFkb25seSBvcmdzRW1wdHkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnR0KCdvcmdzRW1wdHknKSk7XG4gIHJlYWRvbmx5IG9yZ3NNb3JlSW5mbyA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ29yZ3NNb3JlSW5mbycpKTtcbiAgcmVhZG9ubHkgb3Jnc05ld1F1ZXN0aW9uID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50dCgnb3Jnc05ld1F1ZXN0aW9uJykpO1xuICByZWFkb25seSBvcmdzTmV3SGludCA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ29yZ3NOZXdIaW50JykpO1xuICByZWFkb25seSBuZXdPcmdDdGFQcm9wcyA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgdGl0bGU6IHRoaXMudHQoJ29yZ3NOZXdRdWVzdGlvbicpLFxuICAgIGRlc2NyaXB0aW9uOiB0aGlzLnR0KCdvcmdzTmV3SGludCcpLFxuICAgIHBhZGRpbmc6ICcxNnB4JyxcbiAgICBib3JkZXJSYWRpdXM6ICcxNHB4JyxcbiAgICBhY3Rpb25zOiB7XG4gICAgICBwb3NpdGlvbjogJ3JpZ2h0JyxcbiAgICAgIGNvbHVtbmVkOiBmYWxzZSxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IHRoaXMudHQoJ29yZ3NOZXdDdGEnKSxcbiAgICAgICAgICBjb2xvcjogJ3ByaW1hcnknLFxuICAgICAgICAgIGZpbGw6ICdzb2xpZCcsXG4gICAgICAgICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgICAgICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgIHN0YXRlOiAnRU5BQkxFRCcsXG4gICAgICAgICAgdG9rZW46ICdhY2NvdW50LW5ldy1vcmcnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9IGFzIEJ1dHRvbkdyb3VwTWV0YWRhdGEsXG4gIH0pKTtcbiAgcmVhZG9ubHkgbG9nb3V0VGl0bGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnR0KCdsb2dvdXRUaXRsZScpKTtcbiAgcmVhZG9ubHkgbG9nb3V0SGludCA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ2xvZ291dEhpbnQnKSk7XG4gIHJlYWRvbmx5IGRhbmdlclRpdGxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50dCgnZGFuZ2VyVGl0bGUnKSk7XG4gIHJlYWRvbmx5IGRhbmdlckRlbGV0ZVRpdGxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50dCgnZGFuZ2VyRGVsZXRlVGl0bGUnKSk7XG4gIHJlYWRvbmx5IGRhbmdlckRlbGV0ZUhpbnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnR0KCdkYW5nZXJEZWxldGVIaW50JykpO1xuXG4gIHJlYWRvbmx5IGFjdGl2ZU9yZ0lkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHUgPSB0aGlzLmF1dGgudXNlcigpIGFzIHtcbiAgICAgIGFjdGl2ZU9yZ0lkPzogc3RyaW5nO1xuICAgICAgYWN0aXZlT3JnPzogc3RyaW5nO1xuICAgIH0gfCBudWxsO1xuICAgIHJldHVybiB1Py5hY3RpdmVPcmdJZCA/PyB1Py5hY3RpdmVPcmcgPz8gJyc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGFjdGl2ZU9yZ1JvbGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgcm9sZXMgPSAodGhpcy5hdXRoIGFzIHVua25vd24gYXMgeyByb2xlcz86ICgpID0+IHN0cmluZ1tdIH0pLnJvbGVzPy4oKSA/PyBbXTtcbiAgICByZXR1cm4gcm9sZXNbMF0gPz8gbnVsbDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgYWN0aXZlT3JnID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcmdzKCkuZmluZChvID0+IG8uaWQgPT09IHRoaXMuYWN0aXZlT3JnSWQoKSkgPz8gbnVsbCk7XG5cbiAgcmVhZG9ubHkgbG9nb3V0QnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdsb2dvdXQnKSxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgdHlwZTogJ2J1dHRvbicsXG4gICAgdG9rZW46ICdhY2NvdW50LWxvZ291dCcsXG4gIH0pKTtcblxuICByZWFkb25seSBkZWxldGVBY2NvdW50QnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdkYW5nZXJEZWxldGVDdGEnKSxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgdHlwZTogJ2J1dHRvbicsXG4gICAgdG9rZW46ICdhY2NvdW50LWRlbGV0ZScsXG4gIH0pKTtcblxuICByZWFkb25seSBzd2l0Y2hBY2NvdW50QnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdzd2l0Y2hBY2NvdW50Q3RhJyksXG4gICAgY29sb3I6ICdkYXJrJyxcbiAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIHNoYXBlOiAncm91bmQnLFxuICAgIHR5cGU6ICdidXR0b24nLFxuICAgIHRva2VuOiAnYWNjb3VudC1zd2l0Y2gnLFxuICB9KSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbnMgPSB0aGlzLm5zO1xuICAgIGlmICghdGhpcy5pMThuLmhhc05hbWVzcGFjZShucykpIHtcbiAgICAgIHRoaXMuaTE4bi5yZWdpc3RlckNvbnRlbnQobnMsIEFDQ09VTlRfVklFV19JMThOKTtcbiAgICB9XG4gICAgdGhpcy5uYXYuc2V0QmFja0hlYWRlcigncGFnZVRpdGxlJywgbnMsIHsgd2l0aE1lbnU6IHRydWUgfSk7XG4gICAgdGhpcy5sb2FkT3JncygpO1xuICAgIHRoaXMubG9hZFBlbmRpbmdJbnZpdGVzKCk7XG4gICAgY29ubmVjdFBhZ2VSZWZyZXNoKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLmxvYWRPcmdzKCksIHRoaXMubG9hZFBlbmRpbmdJbnZpdGVzKCldKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9yZ1R5cGVMYWJlbCh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIFBFUlNPTkFMOiB0aGlzLnR0KCdvcmdzVHlwZVBlcnNvbmFsJyksXG4gICAgICBQUklWQVRFOiB0aGlzLnR0KCdvcmdzVHlwZVByaXZhdGUnKSxcbiAgICAgIFBVQkxJQzogdGhpcy50dCgnb3Jnc1R5cGVQdWJsaWMnKSxcbiAgICAgIEJVU0lORVNTOiB0aGlzLnR0KCdvcmdzVHlwZUJ1c2luZXNzJyksXG4gICAgfTtcbiAgICByZXR1cm4gbWFwW3R5cGVdID8/IHR5cGU7XG4gIH1cblxuICBvblN3aXRjaEFjY291bnQoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHtcbiAgICAgIGNvbXBvbmVudDogU3dpdGNoT3JnTW9kYWxDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczoge1xuICAgICAgICBpMThuTmFtZXNwYWNlOiAnU2V0dGluZ3MuU3dpdGNoT3JnJyxcbiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkT3JncygpO1xuICAgICAgICAgIHRoaXMubG9hZFBlbmRpbmdJbnZpdGVzKCk7XG4gICAgICAgICAgdGhpcy5yZXNvbHZlZENvbmZpZygpLm9uT3JnU3dpdGNoZWQ/LigpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGJyZWFrcG9pbnRzOiB7XG4gICAgICAgIGJyZWFrcG9pbnRzOiBbMCwgMC44NV0sXG4gICAgICAgIGluaXRpYWxCcmVha3BvaW50OiAwLjg1LFxuICAgICAgICBzaG93SGFuZGxlOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIG9uRGVsZXRlQWNjb3VudCgpOiB2b2lkIHtcbiAgICB0aGlzLmRlbGV0ZUFjY291bnRPcGVuLnNldCh0cnVlKTtcbiAgICB0aGlzLnJlc29sdmVkQ29uZmlnKCkub25BY2NvdW50RGVsZXRlZD8uKCk7XG4gIH1cblxuICBvbk1hbmFnZU9yZygpOiB2b2lkIHtcbiAgICB0aGlzLm5hdi5uYXZpZ2F0ZUJ5VXJsKHRoaXMucmVzb2x2ZWRDb25maWcoKS5tYW5hZ2VPcmdSb3V0ZSk7XG4gIH1cblxuICBvbk5ld09yZygpOiB2b2lkIHtcbiAgICB0aGlzLmNyZWF0ZU9yZ09wZW4uc2V0KHRydWUpO1xuICB9XG5cbiAgb25PcmdDcmVhdGVkKG5ld09yZzogT3JnYW5pemF0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkT3JncygpO1xuICAgIHRoaXMucmVzb2x2ZWRDb25maWcoKS5vbk9yZ0NyZWF0ZWQ/LihuZXdPcmcpO1xuICB9XG5cbiAgb25Nb3JlSW5mbygpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oe1xuICAgICAgY29tcG9uZW50OiBPcmdJbmZvU2hlZXRDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczoge1xuICAgICAgICB0aXRsZTogdGhpcy50dCgnb3Jnc0luZm9UaXRsZScpLFxuICAgICAgICBzdWJ0aXRsZTogdGhpcy50dCgnb3Jnc0luZm9TdWJ0aXRsZScpLFxuICAgICAgICBib2R5OiB0aGlzLnR0KCdvcmdzSW5mb0NvbnRlbnQnKSxcbiAgICAgICAgY2xvc2VMYWJlbDogdGhpcy50dCgnb3Jnc0luZm9DbG9zZScpLFxuICAgICAgICBjbG9zZVByb3BzOiB7XG4gICAgICAgICAgdGV4dDogdGhpcy50dCgnb3Jnc0luZm9DbG9zZScpLFxuICAgICAgICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICAgICAgICBleHBhbmQ6ICdibG9jaycsXG4gICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYnJlYWtwb2ludHM6IHtcbiAgICAgICAgYnJlYWtwb2ludHM6IFswLCAwLjg1XSxcbiAgICAgICAgaW5pdGlhbEJyZWFrcG9pbnQ6IDAuODUsXG4gICAgICAgIHNob3dIYW5kbGU6IHRydWUsXG4gICAgICB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgb25Mb2dvdXQoKTogdm9pZCB7XG4gICAgdGhpcy5hdXRoLmxvZ291dFdpdGhDb25maXJtYXRpb24oKTtcbiAgICB0aGlzLnJlc29sdmVkQ29uZmlnKCkub25Mb2dnZWRPdXQ/LigpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUGVuZGluZ0ludml0ZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5wZW5kaW5nSW52aXRlc0xvYWRpbmcuc2V0KHRydWUpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcbiAgICAgIHRoaXMub3JnU2VydmljZVxuICAgICAgICAuZ2V0UGVuZGluZ0ludml0YXRpb25zKClcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogaXRlbXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nSW52aXRlcy5zZXQoaXRlbXMpO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nSW52aXRlc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdJbnZpdGVzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYWNjZXB0UGVuZGluZ0ludml0ZShpbnZpdGU6IFBlbmRpbmdJbnZpdGF0aW9uKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW52aXRlQWNjZXB0aW5nKCkpIHJldHVybjtcbiAgICB0aGlzLmludml0ZUFjY2VwdGluZy5zZXQoaW52aXRlLm9yZ0lkKTtcbiAgICB0aGlzLm9yZ1NlcnZpY2VcbiAgICAgIC5hY2NlcHRJbnZpdGF0aW9uKGludml0ZS5vcmdJZClcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMudG9hc3Quc2hvdyh7XG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnR0KCdpbnZpdGVBY2NlcHRlZCcpLFxuICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgIGR1cmF0aW9uOiAzNTAwLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMucGVuZGluZ0ludml0ZXMudXBkYXRlKGxpc3QgPT4gbGlzdC5maWx0ZXIoaSA9PiBpLm9yZ0lkICE9PSBpbnZpdGUub3JnSWQpKTtcbiAgICAgICAgICB0aGlzLmxvYWRPcmdzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JzLmhhbmRsZShlcnIsIHsgY29udGV4dDogJ2FjY291bnQuYWNjZXB0UGVuZGluZ0ludml0ZScgfSk7XG4gICAgICAgICAgdGhpcy5pbnZpdGVBY2NlcHRpbmcuc2V0KG51bGwpO1xuICAgICAgICB9LFxuICAgICAgICBjb21wbGV0ZTogKCkgPT4gdGhpcy5pbnZpdGVBY2NlcHRpbmcuc2V0KG51bGwpLFxuICAgICAgfSk7XG4gIH1cblxuICBkZWNsaW5lUGVuZGluZ0ludml0ZShpbnZpdGU6IFBlbmRpbmdJbnZpdGF0aW9uKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW52aXRlQWNjZXB0aW5nKCkpIHJldHVybjtcbiAgICB0aGlzLmludml0ZUFjY2VwdGluZy5zZXQoaW52aXRlLm9yZ0lkKTtcbiAgICB0aGlzLm9yZ1NlcnZpY2VcbiAgICAgIC5kZWNsaW5lSW52aXRhdGlvbihpbnZpdGUub3JnSWQpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnRvYXN0LnNob3coe1xuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy50dCgnaW52aXRlRGVjbGluZWQnKSxcbiAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICBkdXJhdGlvbjogMjUwMCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnBlbmRpbmdJbnZpdGVzLnVwZGF0ZShsaXN0ID0+IGxpc3QuZmlsdGVyKGkgPT4gaS5vcmdJZCAhPT0gaW52aXRlLm9yZ0lkKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JzLmhhbmRsZShlcnIsIHsgY29udGV4dDogJ2FjY291bnQuZGVjbGluZVBlbmRpbmdJbnZpdGUnIH0pO1xuICAgICAgICAgIHRoaXMuaW52aXRlQWNjZXB0aW5nLnNldChudWxsKTtcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHRoaXMuaW52aXRlQWNjZXB0aW5nLnNldChudWxsKSxcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkT3JncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLm9yZ3NMb2FkaW5nLnNldCh0cnVlKTtcbiAgICB0aGlzLm9yZ3NFcnJvci5zZXQobnVsbCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgdGhpcy5vcmdTZXJ2aWNlLmxpc3RNeU9yZ3MoKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBvcmdzID0+IHtcbiAgICAgICAgICBjb25zdCBhY3RpdmVJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICAgICAgICB0aGlzLm9yZ3Muc2V0KFsuLi5vcmdzXS5zb3J0KChhLCBiKSA9PiAoYS5pZCA9PT0gYWN0aXZlSWQgPyAtMSA6IGIuaWQgPT09IGFjdGl2ZUlkID8gMSA6IDApKSk7XG4gICAgICAgICAgdGhpcy5vcmdzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5vcmdzRXJyb3Iuc2V0KGVycik7XG4gICAgICAgICAgdGhpcy5vcmdzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHR0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoa2V5LCB0aGlzLm5zKTtcbiAgfVxufVxuIl19
@@ -43,6 +43,15 @@ export class AvatarUploadComponent {
43
43
  this.i18n = inject(I18nService);
44
44
  /** Component configuration */
45
45
  this.props = input({});
46
+ /** Custom storage path for the full-size image (e.g. 'orgs/{orgId}/logo.jpg').
47
+ * When provided, overrides the default 'users/{userId}/avatar.jpg' path. */
48
+ this.customPath = input(null);
49
+ /** Custom storage path for the thumbnail (e.g. 'orgs/{orgId}/thumb.jpg').
50
+ * When provided, overrides the default 'users/{userId}/thumb.jpg' path. */
51
+ this.customThumbPath = input(null);
52
+ /** When true, skips the AuthService.updateAvatar() backend sync call after upload.
53
+ * Use this when the caller will handle the backend update (e.g. via OrgService). */
54
+ this.skipBackendSync = input(false);
46
55
  /** Emitted after successful upload and backend sync */
47
56
  this.uploaded = new EventEmitter();
48
57
  /** Emitted on any error during the process */
@@ -150,16 +159,18 @@ export class AvatarUploadComponent {
150
159
  // 3. Set preview immediately
151
160
  this.previewUrl.set(compressed.dataUrl);
152
161
  this.imageLoadError.set(false);
153
- // 4. Get user ID for storage path
162
+ // 4. Get user ID for storage path (only required when using default user paths)
163
+ const customAvatarPath = this.customPath();
154
164
  const userId = this.authService.user()?.userId;
155
- if (!userId) {
165
+ if (!customAvatarPath && !userId) {
156
166
  throw new Error('User not authenticated');
157
167
  }
158
168
  // 5. Upload to Firebase Storage with predictable paths
159
- // Path: users/{userId}/avatar.jpg - allows any app to construct URL with just userId
169
+ // When customPath is provided (e.g. orgs/{orgId}/logo.jpg), use it directly.
170
+ // Otherwise fall back to the default user avatar path.
160
171
  // skipPrefix: true - bypasses appId prefix for shared/cross-app paths
161
- const avatarPath = `users/${userId}/avatar.jpg`;
162
- const thumbPath = `users/${userId}/thumb.jpg`;
172
+ const avatarPath = customAvatarPath ?? 'users/' + userId + '/avatar.jpg';
173
+ const thumbPath = this.customThumbPath() ?? 'users/' + userId + '/thumb.jpg';
163
174
  const uploadMetadata = { skipPrefix: true, contentType: 'image/jpeg' };
164
175
  // Race against timeout to prevent infinite loading
165
176
  const [avatarResult, thumbResult] = await Promise.race([
@@ -169,11 +180,13 @@ export class AvatarUploadComponent {
169
180
  ]),
170
181
  uploadTimeout,
171
182
  ]);
172
- // 6. Update backend with URLs
173
- await firstValueFrom(this.authService.updateAvatar({
174
- avatarUrl: avatarResult.downloadUrl,
175
- avatarThumbnail: thumbResult.downloadUrl,
176
- }));
183
+ // 6. Update backend with URLs (skipped when skipBackendSync is true)
184
+ if (!this.skipBackendSync()) {
185
+ await firstValueFrom(this.authService.updateAvatar({
186
+ avatarUrl: avatarResult.downloadUrl,
187
+ avatarThumbnail: thumbResult.downloadUrl,
188
+ }));
189
+ }
177
190
  // 7. Update preview with cache-busting to force refresh
178
191
  const cacheBuster = `?t=${Date.now()}`;
179
192
  this.previewUrl.set(avatarResult.downloadUrl + cacheBuster);
@@ -214,7 +227,7 @@ export class AvatarUploadComponent {
214
227
  this.error.emit({ type, message, originalError });
215
228
  }
216
229
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AvatarUploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
217
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AvatarUploadComponent, isStandalone: true, selector: "val-avatar-upload", inputs: { props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { uploaded: "uploaded", error: "error", uploadStart: "uploadStart" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: `
230
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AvatarUploadComponent, isStandalone: true, selector: "val-avatar-upload", inputs: { props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, customPath: { classPropertyName: "customPath", publicName: "customPath", isSignal: true, isRequired: false, transformFunction: null }, customThumbPath: { classPropertyName: "customThumbPath", publicName: "customThumbPath", isSignal: true, isRequired: false, transformFunction: null }, skipBackendSync: { classPropertyName: "skipBackendSync", publicName: "skipBackendSync", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { uploaded: "uploaded", error: "error", uploadStart: "uploadStart" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: `
218
231
  <div class="avatar-upload" [style.--avatar-size.px]="config().size" [class.avatar-upload--loading]="loading()">
219
232
  <div class="avatar-container">
220
233
  <!-- Avatar Image or Initials -->
@@ -424,4 +437,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
424
437
  }], uploadStart: [{
425
438
  type: Output
426
439
  }] } });
427
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLXVwbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2F2YXRhci11cGxvYWQvYXZhdGFyLXVwbG9hZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hILE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixTQUFTLEVBQ1QsT0FBTyxFQUNQLFFBQVEsRUFDUixVQUFVLEVBQ1YsVUFBVSxHQUNYLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHNCQUFzQixFQUErRCxNQUFNLFNBQVMsQ0FBQzs7QUFFOUcsUUFBUSxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztBQUU1Qjs7Ozs7Ozs7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QjtxQkFDbkIsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0RlQ7OEJBU3VCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFNWixRQUFRO3NCQUFqQixNQUFNO2dCQUdHLEtBQUs7c0JBQWQsTUFBTTtnQkFHRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBpbnB1dCwgT3V0cHV0LCBzaWduYWwsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgSW9uQnV0dG9uLFxuICBJb25CdXR0b25zLFxuICBJb25Db250ZW50LFxuICBJb25IZWFkZXIsXG4gIElvbkljb24sXG4gIElvbk1vZGFsLFxuICBJb25TcGlubmVyLFxuICBJb25Ub29sYmFyLFxufSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHsgY2FtZXJhT3V0bGluZSB9IGZyb20gJ2lvbmljb25zL2ljb25zJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGgnO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9maXJlYmFzZSc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgSW1hZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaW1hZ2UnO1xuaW1wb3J0IHsgSW1hZ2VDcm9wQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2ltYWdlLWNyb3AnO1xuaW1wb3J0IHsgQVZBVEFSX1VQTE9BRF9ERUZBVUxUUywgQXZhdGFyVXBsb2FkRXJyb3IsIEF2YXRhclVwbG9hZE1ldGFkYXRhLCBBdmF0YXJVcGxvYWRSZXN1bHQgfSBmcm9tICcuL3R5cGVzJztcblxuYWRkSWNvbnMoeyBjYW1lcmFPdXRsaW5lIH0pO1xuXG4vKipcbiAqIEF2YXRhclVwbG9hZENvbXBvbmVudFxuICpcbiAqIEEgY29tcGxldGUgYXZhdGFyIHVwbG9hZCBzb2x1dGlvbiB3aXRoOlxuICogLSBJbWFnZSBzZWxlY3Rpb24gZnJvbSBkZXZpY2VcbiAqIC0gQ3JvcCBtb2RhbCB3aXRoIHJvdW5kIHByZXZpZXdcbiAqIC0gQXV0b21hdGljIGNvbXByZXNzaW9uIGFuZCB0aHVtYm5haWwgZ2VuZXJhdGlvblxuICogLSBVcGxvYWQgdG8gRmlyZWJhc2UgU3RvcmFnZVxuICogLSBCYWNrZW5kIHN5bmMgdmlhIEF1dGhTZXJ2aWNlXG4gKlxuICogQGV4YW1wbGUgQmFzaWMgdXNhZ2VcbiAqIGBgYGh0bWxcbiAqIDx2YWwtYXZhdGFyLXVwbG9hZFxuICogICBbcHJvcHNdPVwie1xuICogICAgIGN1cnJlbnRVcmw6IHVzZXIoKT8uYXZhdGFyVXJsLFxuICogICAgIGluaXRpYWxzOiAnSkQnLFxuICogICAgIHNpemU6IDEyMFxuICogICB9XCJcbiAqICAgKHVwbG9hZGVkKT1cIm9uQXZhdGFyVXBsb2FkZWQoJGV2ZW50KVwiXG4gKiAgIChlcnJvcik9XCJvbkVycm9yKCRldmVudClcIlxuICogLz5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtYXZhdGFyLXVwbG9hZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgSW9uSWNvbixcbiAgICBJb25TcGlubmVyLFxuICAgIElvbk1vZGFsLFxuICAgIElvbkNvbnRlbnQsXG4gICAgSW9uSGVhZGVyLFxuICAgIElvblRvb2xiYXIsXG4gICAgSW9uQnV0dG9ucyxcbiAgICBJb25CdXR0b24sXG4gICAgSW1hZ2VDcm9wQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItdXBsb2FkXCIgW3N0eWxlLi0tYXZhdGFyLXNpemUucHhdPVwiY29uZmlnKCkuc2l6ZVwiIFtjbGFzcy5hdmF0YXItdXBsb2FkLS1sb2FkaW5nXT1cImxvYWRpbmcoKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jb250YWluZXJcIj5cbiAgICAgICAgPCEtLSBBdmF0YXIgSW1hZ2Ugb3IgSW5pdGlhbHMgLS0+XG4gICAgICAgIEBpZiAoZGlzcGxheVVybCgpKSB7XG4gICAgICAgICAgPGltZyBjbGFzcz1cImF2YXRhci1pbWFnZVwiIFtzcmNdPVwiZGlzcGxheVVybCgpXCIgYWx0PVwiQXZhdGFyXCIgKGVycm9yKT1cIm9uSW1hZ2VFcnJvcigpXCIgLz5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1pbml0aWFsc1wiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImNvbmZpZygpLmJhY2tncm91bmRDb2xvclwiPlxuICAgICAgICAgICAge3sgY29uZmlnKCkuaW5pdGlhbHMgfHwgJz8nIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIEVkaXQgQnV0dG9uIC0tPlxuICAgICAgICBAaWYgKGNvbmZpZygpLmVkaXRhYmxlICYmICFsb2FkaW5nKCkpIHtcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZWRpdC1idXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9wZW5GaWxlUGlja2VyKClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImVkaXRCdXR0b25MYWJlbCgpXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNhbWVyYS1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gTG9hZGluZyBPdmVybGF5IC0tPlxuICAgICAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLW92ZXJsYXlcIj5cbiAgICAgICAgICAgIDxpb24tc3Bpbm5lciBuYW1lPVwiY2lyY3VsYXJcIj48L2lvbi1zcGlubmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBIaWRkZW4gRmlsZSBJbnB1dCAtLT5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjZmlsZUlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgYWNjZXB0PVwiaW1hZ2UvanBlZyxpbWFnZS9wbmcsaW1hZ2Uvd2VicFwiXG4gICAgICAgIChjaGFuZ2UpPVwib25GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgIGRhdGEtdGVzdGlkPVwiYXZhdGFyLXVwbG9hZC1pbnB1dFwiXG4gICAgICAgIGhpZGRlblxuICAgICAgLz5cblxuICAgICAgPCEtLSBWaWV3IFBob3RvIEJ1dHRvbiAtLT5cbiAgICAgIEBpZiAoY29uZmlnKCkuc2hvd1ZpZXdCdXR0b24gJiYgZGlzcGxheVVybCgpKSB7XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJ2aWV3LXBob3RvLWJ0blwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic2hvd1ZpZXdNb2RhbC5zZXQodHJ1ZSlcIj5cbiAgICAgICAgICB7eyB2aWV3UGhvdG9MYWJlbCgpIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgfVxuXG4gICAgICA8IS0tIENyb3AgTW9kYWwgLS0+XG4gICAgICA8aW9uLW1vZGFsXG4gICAgICAgIFtpc09wZW5dPVwic2hvd0Nyb3BNb2RhbCgpXCJcbiAgICAgICAgKGRpZERpc21pc3MpPVwib25Dcm9wQ2FuY2VsKClcIlxuICAgICAgICBbYnJlYWtwb2ludHNdPVwiWzAsIDFdXCJcbiAgICAgICAgW2luaXRpYWxCcmVha3BvaW50XT1cIjFcIlxuICAgICAgPlxuICAgICAgICA8bmctdGVtcGxhdGU+XG4gICAgICAgICAgQGlmIChzZWxlY3RlZEZpbGUoKSkge1xuICAgICAgICAgICAgPHZhbC1pbWFnZS1jcm9wXG4gICAgICAgICAgICAgIFtpbWFnZV09XCJzZWxlY3RlZEZpbGUoKSFcIlxuICAgICAgICAgICAgICBbYXNwZWN0UmF0aW9dPVwiMVwiXG4gICAgICAgICAgICAgIFtyb3VuZENyb3BwZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtpMThuTmFtZXNwYWNlXT1cImNvbmZpZygpLmkxOG5OYW1lc3BhY2VcIlxuICAgICAgICAgICAgICAoY3JvcENvbXBsZXRlKT1cIm9uQ3JvcENvbXBsZXRlKCRldmVudClcIlxuICAgICAgICAgICAgICAoY2FuY2VsKT1cIm9uQ3JvcENhbmNlbCgpXCJcbiAgICAgICAgICAgICAgKGxvYWRGYWlsZWQpPVwib25Dcm9wTG9hZEZhaWxlZCgpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgfVxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9pb24tbW9kYWw+XG5cbiAgICAgIDwhLS0gUGhvdG8gVmlld2VyIE1vZGFsIC0tPlxuICAgICAgPGlvbi1tb2RhbFxuICAgICAgICBbaXNPcGVuXT1cInNob3dWaWV3TW9kYWwoKVwiXG4gICAgICAgIChkaWREaXNtaXNzKT1cInNob3dWaWV3TW9kYWwuc2V0KGZhbHNlKVwiXG4gICAgICAgIFticmVha3BvaW50c109XCJbMCwgMC41NV1cIlxuICAgICAgICBbaW5pdGlhbEJyZWFrcG9pbnRdPVwiMC41NVwiXG4gICAgICAgIFtoYW5kbGVdPVwidHJ1ZVwiXG4gICAgICA+XG4gICAgICAgIDxuZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8aW9uLWhlYWRlciBbdHJhbnNsdWNlbnRdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIGNvbG9yPVwiZGFya1wiIHNoYXBlPVwicm91bmRcIiAoY2xpY2spPVwic2hvd1ZpZXdNb2RhbC5zZXQoZmFsc2UpXCI+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IGNsb3NlUGhvdG9MYWJlbCgpIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgICAgICA8L2lvbi1idXR0b25zPlxuICAgICAgICAgICAgPC9pb24tdG9vbGJhcj5cbiAgICAgICAgICA8L2lvbi1oZWFkZXI+XG4gICAgICAgICAgPGlvbi1jb250ZW50PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBob3RvLXZpZXdlclwiPlxuICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwicGhvdG8tdmlld2VyX19pbWdcIiBbc3JjXT1cImRpc3BsYXlVcmwoKVwiIGFsdD1cIlBob3RvXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvaW9uLWNvbnRlbnQ+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2lvbi1tb2RhbD5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vYXZhdGFyLXVwbG9hZC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBBdmF0YXJVcGxvYWRDb21wb25lbnQge1xuICBwcml2YXRlIGltYWdlU2VydmljZSA9IGluamVjdChJbWFnZVNlcnZpY2UpO1xuICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlID0gaW5qZWN0KFN0b3JhZ2VTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBhdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG5cbiAgQFZpZXdDaGlsZCgnZmlsZUlucHV0JykgZmlsZUlucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICAvKiogQ29tcG9uZW50IGNvbmZpZ3VyYXRpb24gKi9cbiAgcmVhZG9ubHkgcHJvcHMgPSBpbnB1dDxBdmF0YXJVcGxvYWRNZXRhZGF0YT4oe30pO1xuXG4gIC8qKiBFbWl0dGVkIGFmdGVyIHN1Y2Nlc3NmdWwgdXBsb2FkIGFuZCBiYWNrZW5kIHN5bmMgKi9cbiAgQE91dHB1dCgpIHVwbG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxBdmF0YXJVcGxvYWRSZXN1bHQ+KCk7XG5cbiAgLyoqIEVtaXR0ZWQgb24gYW55IGVycm9yIGR1cmluZyB0aGUgcHJvY2VzcyAqL1xuICBAT3V0cHV0KCkgZXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPEF2YXRhclVwbG9hZEVycm9yPigpO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gdXBsb2FkIHN0YXJ0cyAqL1xuICBAT3V0cHV0KCkgdXBsb2FkU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLy8gSW50ZXJuYWwgc3RhdGVcbiAgcHJvdGVjdGVkIGxvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgc2hvd0Nyb3BNb2RhbCA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBzaG93Vmlld01vZGFsID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkRmlsZSA9IHNpZ25hbDxGaWxlIHwgbnVsbD4obnVsbCk7XG4gIHByb3RlY3RlZCBwcmV2aWV3VXJsID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBwcm90ZWN0ZWQgaW1hZ2VMb2FkRXJyb3IgPSBzaWduYWwoZmFsc2UpO1xuXG4gIC8qKiBNZXJnZWQgY29uZmlnIHdpdGggZGVmYXVsdHMgKi9cbiAgcHJvdGVjdGVkIGNvbmZpZyA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgLi4uQVZBVEFSX1VQTE9BRF9ERUZBVUxUUyxcbiAgICAuLi50aGlzLnByb3BzKCksXG4gIH0pKTtcblxuICAvKiogVVJMIHRvIGRpc3BsYXkgKHByZXZpZXcgdGFrZXMgcHJpb3JpdHkgb3ZlciBjdXJyZW50KSAqL1xuICBwcm90ZWN0ZWQgZGlzcGxheVVybCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAodGhpcy5pbWFnZUxvYWRFcnJvcigpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5wcmV2aWV3VXJsKCkgfHwgdGhpcy5jb25maWcoKS5jdXJyZW50VXJsIHx8IG51bGw7XG4gIH0pO1xuXG4gIC8qKiBBcmlhIGxhYmVsIGZvciBlZGl0IGJ1dHRvbiAqL1xuICBwcm90ZWN0ZWQgZWRpdEJ1dHRvbkxhYmVsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KCdjaGFuZ2VQaG90bycsIHRoaXMuY29uZmlnKCkuaTE4bk5hbWVzcGFjZSkgfHwgJ0NhbWJpYXIgZm90byc7XG4gIH0pO1xuXG4gIC8qKiBMYWJlbCBmb3IgdmlldyBwaG90byBidXR0b24gKi9cbiAgcHJvdGVjdGVkIHZpZXdQaG90b0xhYmVsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KCd2aWV3UGhvdG8nLCAnQXZhdGFyVXBsb2FkJyk7XG4gIH0pO1xuXG4gIC8qKiBMYWJlbCBmb3IgY2xvc2UgYnV0dG9uIGluc2lkZSBwaG90byB2aWV3ZXIgKi9cbiAgcHJvdGVjdGVkIGNsb3NlUGhvdG9MYWJlbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICB0aGlzLmkxOG4ubGFuZygpO1xuICAgIHJldHVybiB0aGlzLmkxOG4udCgnY2xvc2UnLCAnX2dsb2JhbCcpO1xuICB9KTtcblxuICAvKiogT3BlbiBmaWxlIHBpY2tlciBkaWFsb2cgKi9cbiAgb3BlbkZpbGVQaWNrZXIoKTogdm9pZCB7XG4gICAgdGhpcy5maWxlSW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICB9XG5cbiAgLyoqIEhhbmRsZSBmaWxlIHNlbGVjdGlvbiAqL1xuICBvbkZpbGVTZWxlY3RlZChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IGZpbGUgPSBpbnB1dC5maWxlcz8uWzBdO1xuXG4gICAgaWYgKCFmaWxlKSByZXR1cm47XG5cbiAgICAvLyBSZXNldCBpbnB1dCBmb3Igc2FtZSBmaWxlIHNlbGVjdGlvblxuICAgIGlucHV0LnZhbHVlID0gJyc7XG5cbiAgICAvLyBWYWxpZGF0ZSBmaWxlXG4gICAgY29uc3QgdmFsaWRhdGlvbiA9IHRoaXMuaW1hZ2VTZXJ2aWNlLnZhbGlkYXRlKGZpbGUsIHtcbiAgICAgIG1heFNpemU6IHRoaXMuY29uZmlnKCkubWF4RmlsZVNpemUsXG4gICAgICBhbGxvd2VkVHlwZXM6IFsnaW1hZ2UvanBlZycsICdpbWFnZS9wbmcnLCAnaW1hZ2Uvd2VicCddLFxuICAgIH0pO1xuXG4gICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICB0aGlzLmVtaXRFcnJvcih2YWxpZGF0aW9uLmVycm9yIGFzIEF2YXRhclVwbG9hZEVycm9yWyd0eXBlJ10sIHZhbGlkYXRpb24ubWVzc2FnZSEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIE9wZW4gY3JvcCBtb2RhbFxuICAgIHRoaXMuc2VsZWN0ZWRGaWxlLnNldChmaWxlKTtcbiAgICB0aGlzLnNob3dDcm9wTW9kYWwuc2V0KHRydWUpO1xuICB9XG5cbiAgLyoqIEhhbmRsZSBjcm9wIGNvbXBsZXRpb24gKi9cbiAgYXN5bmMgb25Dcm9wQ29tcGxldGUoY3JvcHBlZEJsb2I6IEJsb2IpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNob3dDcm9wTW9kYWwuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnNlbGVjdGVkRmlsZS5zZXQobnVsbCk7XG5cbiAgICBhd2FpdCB0aGlzLnByb2Nlc3NBbmRVcGxvYWQoY3JvcHBlZEJsb2IpO1xuICB9XG5cbiAgLyoqIEhhbmRsZSBjcm9wIGNhbmNlbCAqL1xuICBvbkNyb3BDYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93Q3JvcE1vZGFsLnNldChmYWxzZSk7XG4gICAgdGhpcy5zZWxlY3RlZEZpbGUuc2V0KG51bGwpO1xuICB9XG5cbiAgLyoqIEhhbmRsZSBjcm9wIGxvYWQgZmFpbHVyZSAqL1xuICBvbkNyb3BMb2FkRmFpbGVkKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0Nyb3BNb2RhbC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuc2VsZWN0ZWRGaWxlLnNldChudWxsKTtcbiAgICB0aGlzLmVtaXRFcnJvcihcbiAgICAgICdpbnZhbGlkVHlwZScsXG4gICAgICB0aGlzLmkxOG4udCgnbG9hZEZhaWxlZCcsIHRoaXMuY29uZmlnKCkuaTE4bk5hbWVzcGFjZSkgfHwgJ05vIHNlIHB1ZG8gY2FyZ2FyIGxhIGltYWdlbidcbiAgICApO1xuICB9XG5cbiAgLyoqIEhhbmRsZSBpbWFnZSBsb2FkIGVycm9yICovXG4gIG9uSW1hZ2VFcnJvcigpOiB2b2lkIHtcbiAgICB0aGlzLmltYWdlTG9hZEVycm9yLnNldCh0cnVlKTtcbiAgfVxuXG4gIC8qKiBUaW1lb3V0IGZvciB1cGxvYWQgb3BlcmF0aW9ucyAoMzAgc2Vjb25kcykgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVVBMT0FEX1RJTUVPVVRfTVMgPSAzMDAwMDtcblxuICAvKiogUHJvY2VzcyBjcm9wcGVkIGltYWdlIGFuZCB1cGxvYWQgKi9cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzQW5kVXBsb2FkKGNyb3BwZWRCbG9iOiBCbG9iKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2FkaW5nLnNldCh0cnVlKTtcbiAgICB0aGlzLnVwbG9hZFN0YXJ0LmVtaXQoKTtcblxuICAgIC8vIFRpbWVvdXQgcHJvbWlzZSB0byBwcmV2ZW50IGluZmluaXRlIGxvYWRpbmdcbiAgICBjb25zdCB1cGxvYWRUaW1lb3V0ID0gbmV3IFByb21pc2U8bmV2ZXI+KChfLCByZWplY3QpID0+XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ1VwbG9hZCB0aW1lb3V0JykpLCBBdmF0YXJVcGxvYWRDb21wb25lbnQuVVBMT0FEX1RJTUVPVVRfTVMpXG4gICAgKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZygpO1xuXG4gICAgICAvLyAxLiBDb21wcmVzcyBpbWFnZVxuICAgICAgY29uc3QgY29tcHJlc3NlZCA9IGF3YWl0IHRoaXMuaW1hZ2VTZXJ2aWNlLmNvbXByZXNzKGNyb3BwZWRCbG9iLCB7XG4gICAgICAgIG1heFdpZHRoOiBjb25maWcubWF4V2lkdGgsXG4gICAgICAgIG1heEhlaWdodDogY29uZmlnLm1heFdpZHRoLFxuICAgICAgICBxdWFsaXR5OiBjb25maWcuY29tcHJlc3NRdWFsaXR5LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIDIuIEdlbmVyYXRlIHRodW1ibmFpbFxuICAgICAgY29uc3QgdGh1bWJuYWlsID0gYXdhaXQgdGhpcy5pbWFnZVNlcnZpY2UudGh1bWJuYWlsKGNvbXByZXNzZWQuYmxvYiwgY29uZmlnLnRodW1ibmFpbFNpemUpO1xuXG4gICAgICAvLyAzLiBTZXQgcHJldmlldyBpbW1lZGlhdGVseVxuICAgICAgdGhpcy5wcmV2aWV3VXJsLnNldChjb21wcmVzc2VkLmRhdGFVcmwpO1xuICAgICAgdGhpcy5pbWFnZUxvYWRFcnJvci5zZXQoZmFsc2UpO1xuXG4gICAgICAvLyA0LiBHZXQgdXNlciBJRCBmb3Igc3RvcmFnZSBwYXRoXG4gICAgICBjb25zdCB1c2VySWQgPSB0aGlzLmF1dGhTZXJ2aWNlLnVzZXIoKT8udXNlcklkO1xuICAgICAgaWYgKCF1c2VySWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRoZW50aWNhdGVkJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIDUuIFVwbG9hZCB0byBGaXJlYmFzZSBTdG9yYWdlIHdpdGggcHJlZGljdGFibGUgcGF0aHNcbiAgICAgIC8vIFBhdGg6IHVzZXJzL3t1c2VySWR9L2F2YXRhci5qcGcgLSBhbGxvd3MgYW55IGFwcCB0byBjb25zdHJ1Y3QgVVJMIHdpdGgganVzdCB1c2VySWRcbiAgICAgIC8vIHNraXBQcmVmaXg6IHRydWUgLSBieXBhc3NlcyBhcHBJZCBwcmVmaXggZm9yIHNoYXJlZC9jcm9zcy1hcHAgcGF0aHNcbiAgICAgIGNvbnN0IGF2YXRhclBhdGggPSBgdXNlcnMvJHt1c2VySWR9L2F2YXRhci5qcGdgO1xuICAgICAgY29uc3QgdGh1bWJQYXRoID0gYHVzZXJzLyR7dXNlcklkfS90aHVtYi5qcGdgO1xuICAgICAgY29uc3QgdXBsb2FkTWV0YWRhdGEgPSB7IHNraXBQcmVmaXg6IHRydWUsIGNvbnRlbnRUeXBlOiAnaW1hZ2UvanBlZycgfTtcblxuICAgICAgLy8gUmFjZSBhZ2FpbnN0IHRpbWVvdXQgdG8gcHJldmVudCBpbmZpbml0ZSBsb2FkaW5nXG4gICAgICBjb25zdCBbYXZhdGFyUmVzdWx0LCB0aHVtYlJlc3VsdF0gPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBQcm9taXNlLmFsbChbXG4gICAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGxvYWRBbmRHZXRVcmwoYXZhdGFyUGF0aCwgY29tcHJlc3NlZC5ibG9iLCB1cGxvYWRNZXRhZGF0YSksXG4gICAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGxvYWRBbmRHZXRVcmwodGh1bWJQYXRoLCB0aHVtYm5haWwuYmxvYiwgdXBsb2FkTWV0YWRhdGEpLFxuICAgICAgICBdKSxcbiAgICAgICAgdXBsb2FkVGltZW91dCxcbiAgICAgIF0pO1xuXG4gICAgICAvLyA2LiBVcGRhdGUgYmFja2VuZCB3aXRoIFVSTHNcbiAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLnVwZGF0ZUF2YXRhcih7XG4gICAgICAgICAgYXZhdGFyVXJsOiBhdmF0YXJSZXN1bHQuZG93bmxvYWRVcmwsXG4gICAgICAgICAgYXZhdGFyVGh1bWJuYWlsOiB0aHVtYlJlc3VsdC5kb3dubG9hZFVybCxcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIC8vIDcuIFVwZGF0ZSBwcmV2aWV3IHdpdGggY2FjaGUtYnVzdGluZyB0byBmb3JjZSByZWZyZXNoXG4gICAgICBjb25zdCBjYWNoZUJ1c3RlciA9IGA/dD0ke0RhdGUubm93KCl9YDtcbiAgICAgIHRoaXMucHJldmlld1VybC5zZXQoYXZhdGFyUmVzdWx0LmRvd25sb2FkVXJsICsgY2FjaGVCdXN0ZXIpO1xuXG4gICAgICAvLyA4LiBFbWl0IHN1Y2Nlc3NcbiAgICAgIGNvbnN0IHJlc3VsdDogQXZhdGFyVXBsb2FkUmVzdWx0ID0ge1xuICAgICAgICBhdmF0YXJVcmw6IGF2YXRhclJlc3VsdC5kb3dubG9hZFVybCxcbiAgICAgICAgdGh1bWJuYWlsVXJsOiB0aHVtYlJlc3VsdC5kb3dubG9hZFVybCxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMudXBsb2FkZWQuZW1pdChyZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignW0F2YXRhclVwbG9hZF0gcHJvY2Vzc0FuZFVwbG9hZCBmYWlsZWQ6JywgZXJyKTtcbiAgICAgIC8vIFJldmVydCBwcmV2aWV3IG9uIGVycm9yXG4gICAgICB0aGlzLnByZXZpZXdVcmwuc2V0KG51bGwpO1xuXG4gICAgICAvLyBEZXRlcm1pbmUgZXJyb3IgbWVzc2FnZSBiYXNlZCBvbiBlcnJvciB0eXBlXG4gICAgICBsZXQgbWVzc2FnZTogc3RyaW5nO1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGlmIChlcnIubWVzc2FnZSA9PT0gJ1VwbG9hZCB0aW1lb3V0Jykge1xuICAgICAgICAgIG1lc3NhZ2UgPVxuICAgICAgICAgICAgdGhpcy5pMThuLnQoJ3VwbG9hZFRpbWVvdXQnLCB0aGlzLmNvbmZpZygpLmkxOG5OYW1lc3BhY2UpIHx8XG4gICAgICAgICAgICAnTGEgc3ViaWRhIHRhcmTDsyBkZW1hc2lhZG8uIFZlcmlmaWNhIHR1IGNvbmV4acOzbi4nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1lc3NhZ2UgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVzc2FnZSA9IHRoaXMuaTE4bi50KCd1cGxvYWRFcnJvcicsIHRoaXMuY29uZmlnKCkuaTE4bk5hbWVzcGFjZSkgfHwgJ0Vycm9yIGFsIHN1YmlyIGxhIGltYWdlbic7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZW1pdEVycm9yKCd1cGxvYWRGYWlsZWQnLCBtZXNzYWdlLCBlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvKiogRW1pdCBlcnJvciBldmVudCAqL1xuICBwcml2YXRlIGVtaXRFcnJvcih0eXBlOiBBdmF0YXJVcGxvYWRFcnJvclsndHlwZSddLCBtZXNzYWdlOiBzdHJpbmcsIG9yaWdpbmFsRXJyb3I/OiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5lcnJvci5lbWl0KHsgdHlwZSwgbWVzc2FnZSwgb3JpZ2luYWxFcnJvciB9KTtcbiAgfVxufVxuIl19
440
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLXVwbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2F2YXRhci11cGxvYWQvYXZhdGFyLXVwbG9hZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hILE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixTQUFTLEVBQ1QsT0FBTyxFQUNQLFFBQVEsRUFDUixVQUFVLEVBQ1YsVUFBVSxHQUNYLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHNCQUFzQixFQUErRCxNQUFNLFNBQVMsQ0FBQzs7QUFFOUcsUUFBUSxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztBQUU1Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQStHSCxNQUFNLE9BQU8scUJBQXFCO0lBOUdsQztRQStHVSxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwQyxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN4QyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsQyxTQUFJLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBSW5DLDhCQUE4QjtRQUNyQixVQUFLLEdBQUcsS0FBSyxDQUF1QixFQUFFLENBQUMsQ0FBQztRQUVqRDtxRkFDNkU7UUFDcEUsZUFBVSxHQUFHLEtBQUssQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFFakQ7b0ZBQzRFO1FBQ25FLG9CQUFlLEdBQUcsS0FBSyxDQUFnQixJQUFJLENBQUMsQ0FBQztRQUV0RDs2RkFDcUY7UUFDNUUsb0JBQWUsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFFakQsdURBQXVEO1FBQzdDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBc0IsQ0FBQztRQUU1RCw4Q0FBOEM7UUFDcEMsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFxQixDQUFDO1FBRXhELGlDQUFpQztRQUN2QixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFakQsaUJBQWlCO1FBQ1AsWUFBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixrQkFBYSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixrQkFBYSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixpQkFBWSxHQUFHLE1BQU0sQ0FBYyxJQUFJLENBQUMsQ0FBQztRQUN6QyxlQUFVLEdBQUcsTUFBTSxDQUFnQixJQUFJLENBQUMsQ0FBQztRQUN6QyxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV6QyxrQ0FBa0M7UUFDeEIsV0FBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ2pDLEdBQUcsc0JBQXNCO1lBQ3pCLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRTtTQUNoQixDQUFDLENBQUMsQ0FBQztRQUVKLDJEQUEyRDtRQUNqRCxlQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNuQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDdkMsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxpQ0FBaUM7UUFDdkIsb0JBQWUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLGNBQWMsQ0FBQztRQUNuRixDQUFDLENBQUMsQ0FBQztRQUVILGtDQUFrQztRQUN4QixtQkFBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztRQUVILGlEQUFpRDtRQUN2QyxvQkFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztLQXNLSjtJQXBLQyw4QkFBOEI7SUFDOUIsY0FBYztRQUNaLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCw0QkFBNEI7SUFDNUIsY0FBYyxDQUFDLEtBQVk7UUFDekIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQTBCLENBQUM7UUFDL0MsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTlCLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTztRQUVsQixzQ0FBc0M7UUFDdEMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFFakIsZ0JBQWdCO1FBQ2hCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRTtZQUNsRCxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFdBQVc7WUFDbEMsWUFBWSxFQUFFLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUM7U0FDeEQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFrQyxFQUFFLFVBQVUsQ0FBQyxPQUFRLENBQUMsQ0FBQztZQUNuRixPQUFPO1FBQ1QsQ0FBQztRQUVELGtCQUFrQjtRQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsNkJBQTZCO0lBQzdCLEtBQUssQ0FBQyxjQUFjLENBQUMsV0FBaUI7UUFDcEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFNUIsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELHlCQUF5QjtJQUN6QixZQUFZO1FBQ1YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELCtCQUErQjtJQUMvQixnQkFBZ0I7UUFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsU0FBUyxDQUNaLGFBQWEsRUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLDZCQUE2QixDQUN4RixDQUFDO0lBQ0osQ0FBQztJQUVELDhCQUE4QjtJQUM5QixZQUFZO1FBQ1YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELGlEQUFpRDthQUN6QixzQkFBaUIsR0FBRyxLQUFLLEFBQVIsQ0FBUztJQUVsRCx1Q0FBdUM7SUFDL0IsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFdBQWlCO1FBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFeEIsOENBQThDO1FBQzlDLE1BQU0sYUFBYSxHQUFHLElBQUksT0FBTyxDQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQ3JELFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLENBQy9GLENBQUM7UUFFRixJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFFN0Isb0JBQW9CO1lBQ3BCLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFO2dCQUMvRCxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7Z0JBQ3pCLFNBQVMsRUFBRSxNQUFNLENBQUMsUUFBUTtnQkFDMUIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxlQUFlO2FBQ2hDLENBQUMsQ0FBQztZQUVILHdCQUF3QjtZQUN4QixNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRTNGLDZCQUE2QjtZQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFL0IsZ0ZBQWdGO1lBQ2hGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzNDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxDQUFDO1lBQy9DLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDNUMsQ0FBQztZQUVELHVEQUF1RDtZQUN2RCw2RUFBNkU7WUFDN0UsdURBQXVEO1lBQ3ZELHNFQUFzRTtZQUN0RSxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsSUFBSSxRQUFRLEdBQUcsTUFBTSxHQUFHLGFBQWEsQ0FBQztZQUN6RSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksUUFBUSxHQUFHLE1BQU0sR0FBRyxZQUFZLENBQUM7WUFDN0UsTUFBTSxjQUFjLEdBQUcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUV2RSxtREFBbUQ7WUFDbkQsTUFBTSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ3JELE9BQU8sQ0FBQyxHQUFHLENBQUM7b0JBQ1YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDO29CQUNoRixJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUM7aUJBQy9FLENBQUM7Z0JBQ0YsYUFBYTthQUNkLENBQUMsQ0FBQztZQUVILHFFQUFxRTtZQUNyRSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sY0FBYyxDQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQztvQkFDNUIsU0FBUyxFQUFFLFlBQVksQ0FBQyxXQUFXO29CQUNuQyxlQUFlLEVBQUUsV0FBVyxDQUFDLFdBQVc7aUJBQ3pDLENBQUMsQ0FDSCxDQUFDO1lBQ0osQ0FBQztZQUVELHdEQUF3RDtZQUN4RCxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLENBQUM7WUFFNUQsa0JBQWtCO1lBQ2xCLE1BQU0sTUFBTSxHQUF1QjtnQkFDakMsU0FBUyxFQUFFLFlBQVksQ0FBQyxXQUFXO2dCQUNuQyxZQUFZLEVBQUUsV0FBVyxDQUFDLFdBQVc7YUFDdEMsQ0FBQztZQUVGLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyx5Q0FBeUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM5RCwwQkFBMEI7WUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFMUIsOENBQThDO1lBQzlDLElBQUksT0FBZSxDQUFDO1lBQ3BCLElBQUksR0FBRyxZQUFZLEtBQUssRUFBRSxDQUFDO2dCQUN6QixJQUFJLEdBQUcsQ0FBQyxPQUFPLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQztvQkFDckMsT0FBTzt3QkFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLGFBQWEsQ0FBQzs0QkFDekQsa0RBQWtELENBQUM7Z0JBQ3ZELENBQUM7cUJBQU0sQ0FBQztvQkFDTixPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztnQkFDeEIsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSwwQkFBMEIsQ0FBQztZQUNsRyxDQUFDO1lBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRUQsdUJBQXVCO0lBQ2YsU0FBUyxDQUFDLElBQStCLEVBQUUsT0FBZSxFQUFFLGFBQXVCO1FBQ3pGLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7K0dBek9VLHFCQUFxQjttR0FBckIscUJBQXFCLDJ6QkEvRnRCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRGVCxvMUVBdkdDLFlBQVksK0JBQ1osT0FBTywySkFDUCxVQUFVLHlHQUNWLFFBQVEsc0RBQ1IsVUFBVSx3S0FDVixTQUFTLG9HQUNULFVBQVUsbUZBQ1YsVUFBVSw4RUFDVixTQUFTLG9QQUNULGtCQUFrQjs7NEZBaUdULHFCQUFxQjtrQkE5R2pDLFNBQVM7K0JBQ0UsbUJBQW1CLGNBQ2pCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLE9BQU87d0JBQ1AsVUFBVTt3QkFDVixRQUFRO3dCQUNSLFVBQVU7d0JBQ1YsU0FBUzt3QkFDVCxVQUFVO3dCQUNWLFVBQVU7d0JBQ1YsU0FBUzt3QkFDVCxrQkFBa0I7cUJBQ25CLFlBQ1M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEZUOzhCQVN1QixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBa0JaLFFBQVE7c0JBQWpCLE1BQU07Z0JBR0csS0FBSztzQkFBZCxNQUFNO2dCQUdHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIGlucHV0LCBPdXRwdXQsIHNpZ25hbCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBJb25CdXR0b24sXG4gIElvbkJ1dHRvbnMsXG4gIElvbkNvbnRlbnQsXG4gIElvbkhlYWRlcixcbiAgSW9uSWNvbixcbiAgSW9uTW9kYWwsXG4gIElvblNwaW5uZXIsXG4gIElvblRvb2xiYXIsXG59IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQgeyBjYW1lcmFPdXRsaW5lIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aCc7XG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpcmViYXNlJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBJbWFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pbWFnZSc7XG5pbXBvcnQgeyBJbWFnZUNyb3BDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvaW1hZ2UtY3JvcCc7XG5pbXBvcnQgeyBBVkFUQVJfVVBMT0FEX0RFRkFVTFRTLCBBdmF0YXJVcGxvYWRFcnJvciwgQXZhdGFyVXBsb2FkTWV0YWRhdGEsIEF2YXRhclVwbG9hZFJlc3VsdCB9IGZyb20gJy4vdHlwZXMnO1xuXG5hZGRJY29ucyh7IGNhbWVyYU91dGxpbmUgfSk7XG5cbi8qKlxuICogQXZhdGFyVXBsb2FkQ29tcG9uZW50XG4gKlxuICogQSBjb21wbGV0ZSBhdmF0YXIgdXBsb2FkIHNvbHV0aW9uIHdpdGg6XG4gKiAtIEltYWdlIHNlbGVjdGlvbiBmcm9tIGRldmljZVxuICogLSBDcm9wIG1vZGFsIHdpdGggcm91bmQgcHJldmlld1xuICogLSBBdXRvbWF0aWMgY29tcHJlc3Npb24gYW5kIHRodW1ibmFpbCBnZW5lcmF0aW9uXG4gKiAtIFVwbG9hZCB0byBGaXJlYmFzZSBTdG9yYWdlXG4gKiAtIEJhY2tlbmQgc3luYyB2aWEgQXV0aFNlcnZpY2VcbiAqXG4gKiBAZXhhbXBsZSBCYXNpYyB1c2FnZVxuICogYGBgaHRtbFxuICogPHZhbC1hdmF0YXItdXBsb2FkXG4gKiAgIFtwcm9wc109XCJ7XG4gKiAgICAgY3VycmVudFVybDogdXNlcigpPy5hdmF0YXJVcmwsXG4gKiAgICAgaW5pdGlhbHM6ICdKRCcsXG4gKiAgICAgc2l6ZTogMTIwXG4gKiAgIH1cIlxuICogICAodXBsb2FkZWQpPVwib25BdmF0YXJVcGxvYWRlZCgkZXZlbnQpXCJcbiAqICAgKGVycm9yKT1cIm9uRXJyb3IoJGV2ZW50KVwiXG4gKiAvPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1hdmF0YXItdXBsb2FkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBJb25JY29uLFxuICAgIElvblNwaW5uZXIsXG4gICAgSW9uTW9kYWwsXG4gICAgSW9uQ29udGVudCxcbiAgICBJb25IZWFkZXIsXG4gICAgSW9uVG9vbGJhcixcbiAgICBJb25CdXR0b25zLFxuICAgIElvbkJ1dHRvbixcbiAgICBJbWFnZUNyb3BDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImF2YXRhci11cGxvYWRcIiBbc3R5bGUuLS1hdmF0YXItc2l6ZS5weF09XCJjb25maWcoKS5zaXplXCIgW2NsYXNzLmF2YXRhci11cGxvYWQtLWxvYWRpbmddPVwibG9hZGluZygpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNvbnRhaW5lclwiPlxuICAgICAgICA8IS0tIEF2YXRhciBJbWFnZSBvciBJbml0aWFscyAtLT5cbiAgICAgICAgQGlmIChkaXNwbGF5VXJsKCkpIHtcbiAgICAgICAgICA8aW1nIGNsYXNzPVwiYXZhdGFyLWltYWdlXCIgW3NyY109XCJkaXNwbGF5VXJsKClcIiBhbHQ9XCJBdmF0YXJcIiAoZXJyb3IpPVwib25JbWFnZUVycm9yKClcIiAvPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWluaXRpYWxzXCIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiY29uZmlnKCkuYmFja2dyb3VuZENvbG9yXCI+XG4gICAgICAgICAgICB7eyBjb25maWcoKS5pbml0aWFscyB8fCAnPycgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gRWRpdCBCdXR0b24gLS0+XG4gICAgICAgIEBpZiAoY29uZmlnKCkuZWRpdGFibGUgJiYgIWxvYWRpbmcoKSkge1xuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJlZGl0LWJ1dHRvblwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib3BlbkZpbGVQaWNrZXIoKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiZWRpdEJ1dHRvbkxhYmVsKClcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2FtZXJhLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBMb2FkaW5nIE92ZXJsYXkgLS0+XG4gICAgICAgIEBpZiAobG9hZGluZygpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRpbmctb3ZlcmxheVwiPlxuICAgICAgICAgICAgPGlvbi1zcGlubmVyIG5hbWU9XCJjaXJjdWxhclwiPjwvaW9uLXNwaW5uZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIEhpZGRlbiBGaWxlIElucHV0IC0tPlxuICAgICAgPGlucHV0XG4gICAgICAgICNmaWxlSW5wdXRcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICBhY2NlcHQ9XCJpbWFnZS9qcGVnLGltYWdlL3BuZyxpbWFnZS93ZWJwXCJcbiAgICAgICAgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJhdmF0YXItdXBsb2FkLWlucHV0XCJcbiAgICAgICAgaGlkZGVuXG4gICAgICAvPlxuXG4gICAgICA8IS0tIFZpZXcgUGhvdG8gQnV0dG9uIC0tPlxuICAgICAgQGlmIChjb25maWcoKS5zaG93Vmlld0J1dHRvbiAmJiBkaXNwbGF5VXJsKCkpIHtcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInZpZXctcGhvdG8tYnRuXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzaG93Vmlld01vZGFsLnNldCh0cnVlKVwiPlxuICAgICAgICAgIHt7IHZpZXdQaG90b0xhYmVsKCkgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gQ3JvcCBNb2RhbCAtLT5cbiAgICAgIDxpb24tbW9kYWxcbiAgICAgICAgW2lzT3Blbl09XCJzaG93Q3JvcE1vZGFsKClcIlxuICAgICAgICAoZGlkRGlzbWlzcyk9XCJvbkNyb3BDYW5jZWwoKVwiXG4gICAgICAgIFticmVha3BvaW50c109XCJbMCwgMV1cIlxuICAgICAgICBbaW5pdGlhbEJyZWFrcG9pbnRdPVwiMVwiXG4gICAgICA+XG4gICAgICAgIDxuZy10ZW1wbGF0ZT5cbiAgICAgICAgICBAaWYgKHNlbGVjdGVkRmlsZSgpKSB7XG4gICAgICAgICAgICA8dmFsLWltYWdlLWNyb3BcbiAgICAgICAgICAgICAgW2ltYWdlXT1cInNlbGVjdGVkRmlsZSgpIVwiXG4gICAgICAgICAgICAgIFthc3BlY3RSYXRpb109XCIxXCJcbiAgICAgICAgICAgICAgW3JvdW5kQ3JvcHBlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2kxOG5OYW1lc3BhY2VdPVwiY29uZmlnKCkuaTE4bk5hbWVzcGFjZVwiXG4gICAgICAgICAgICAgIChjcm9wQ29tcGxldGUpPVwib25Dcm9wQ29tcGxldGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChjYW5jZWwpPVwib25Dcm9wQ2FuY2VsKClcIlxuICAgICAgICAgICAgICAobG9hZEZhaWxlZCk9XCJvbkNyb3BMb2FkRmFpbGVkKClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICB9XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2lvbi1tb2RhbD5cblxuICAgICAgPCEtLSBQaG90byBWaWV3ZXIgTW9kYWwgLS0+XG4gICAgICA8aW9uLW1vZGFsXG4gICAgICAgIFtpc09wZW5dPVwic2hvd1ZpZXdNb2RhbCgpXCJcbiAgICAgICAgKGRpZERpc21pc3MpPVwic2hvd1ZpZXdNb2RhbC5zZXQoZmFsc2UpXCJcbiAgICAgICAgW2JyZWFrcG9pbnRzXT1cIlswLCAwLjU1XVwiXG4gICAgICAgIFtpbml0aWFsQnJlYWtwb2ludF09XCIwLjU1XCJcbiAgICAgICAgW2hhbmRsZV09XCJ0cnVlXCJcbiAgICAgID5cbiAgICAgICAgPG5nLXRlbXBsYXRlPlxuICAgICAgICAgIDxpb24taGVhZGVyIFt0cmFuc2x1Y2VudF09XCJ0cnVlXCI+XG4gICAgICAgICAgICA8aW9uLXRvb2xiYXI+XG4gICAgICAgICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgY29sb3I9XCJkYXJrXCIgc2hhcGU9XCJyb3VuZFwiIChjbGljayk9XCJzaG93Vmlld01vZGFsLnNldChmYWxzZSlcIj5cbiAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgY2xvc2VQaG90b0xhYmVsKCkgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICAgICAgICA8L2lvbi10b29sYmFyPlxuICAgICAgICAgIDwvaW9uLWhlYWRlcj5cbiAgICAgICAgICA8aW9uLWNvbnRlbnQ+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGhvdG8tdmlld2VyXCI+XG4gICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJwaG90by12aWV3ZXJfX2ltZ1wiIFtzcmNdPVwiZGlzcGxheVVybCgpXCIgYWx0PVwiUGhvdG9cIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9pb24tY29udGVudD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvaW9uLW1vZGFsPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9hdmF0YXItdXBsb2FkLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEF2YXRhclVwbG9hZENvbXBvbmVudCB7XG4gIHByaXZhdGUgaW1hZ2VTZXJ2aWNlID0gaW5qZWN0KEltYWdlU2VydmljZSk7XG4gIHByaXZhdGUgc3RvcmFnZVNlcnZpY2UgPSBpbmplY3QoU3RvcmFnZVNlcnZpY2UpO1xuICBwcml2YXRlIGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcblxuICBAVmlld0NoaWxkKCdmaWxlSW5wdXQnKSBmaWxlSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIC8qKiBDb21wb25lbnQgY29uZmlndXJhdGlvbiAqL1xuICByZWFkb25seSBwcm9wcyA9IGlucHV0PEF2YXRhclVwbG9hZE1ldGFkYXRhPih7fSk7XG5cbiAgLyoqIEN1c3RvbSBzdG9yYWdlIHBhdGggZm9yIHRoZSBmdWxsLXNpemUgaW1hZ2UgKGUuZy4gJ29yZ3Mve29yZ0lkfS9sb2dvLmpwZycpLlxuICAgKiAgV2hlbiBwcm92aWRlZCwgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0ICd1c2Vycy97dXNlcklkfS9hdmF0YXIuanBnJyBwYXRoLiAqL1xuICByZWFkb25seSBjdXN0b21QYXRoID0gaW5wdXQ8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgLyoqIEN1c3RvbSBzdG9yYWdlIHBhdGggZm9yIHRoZSB0aHVtYm5haWwgKGUuZy4gJ29yZ3Mve29yZ0lkfS90aHVtYi5qcGcnKS5cbiAgICogIFdoZW4gcHJvdmlkZWQsIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCAndXNlcnMve3VzZXJJZH0vdGh1bWIuanBnJyBwYXRoLiAqL1xuICByZWFkb25seSBjdXN0b21UaHVtYlBhdGggPSBpbnB1dDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvKiogV2hlbiB0cnVlLCBza2lwcyB0aGUgQXV0aFNlcnZpY2UudXBkYXRlQXZhdGFyKCkgYmFja2VuZCBzeW5jIGNhbGwgYWZ0ZXIgdXBsb2FkLlxuICAgKiAgVXNlIHRoaXMgd2hlbiB0aGUgY2FsbGVyIHdpbGwgaGFuZGxlIHRoZSBiYWNrZW5kIHVwZGF0ZSAoZS5nLiB2aWEgT3JnU2VydmljZSkuICovXG4gIHJlYWRvbmx5IHNraXBCYWNrZW5kU3luYyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAvKiogRW1pdHRlZCBhZnRlciBzdWNjZXNzZnVsIHVwbG9hZCBhbmQgYmFja2VuZCBzeW5jICovXG4gIEBPdXRwdXQoKSB1cGxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8QXZhdGFyVXBsb2FkUmVzdWx0PigpO1xuXG4gIC8qKiBFbWl0dGVkIG9uIGFueSBlcnJvciBkdXJpbmcgdGhlIHByb2Nlc3MgKi9cbiAgQE91dHB1dCgpIGVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxBdmF0YXJVcGxvYWRFcnJvcj4oKTtcblxuICAvKiogRW1pdHRlZCB3aGVuIHVwbG9hZCBzdGFydHMgKi9cbiAgQE91dHB1dCgpIHVwbG9hZFN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8vIEludGVybmFsIHN0YXRlXG4gIHByb3RlY3RlZCBsb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHNob3dDcm9wTW9kYWwgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgc2hvd1ZpZXdNb2RhbCA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBzZWxlY3RlZEZpbGUgPSBzaWduYWw8RmlsZSB8IG51bGw+KG51bGwpO1xuICBwcm90ZWN0ZWQgcHJldmlld1VybCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcHJvdGVjdGVkIGltYWdlTG9hZEVycm9yID0gc2lnbmFsKGZhbHNlKTtcblxuICAvKiogTWVyZ2VkIGNvbmZpZyB3aXRoIGRlZmF1bHRzICovXG4gIHByb3RlY3RlZCBjb25maWcgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgIC4uLkFWQVRBUl9VUExPQURfREVGQVVMVFMsXG4gICAgLi4udGhpcy5wcm9wcygpLFxuICB9KSk7XG5cbiAgLyoqIFVSTCB0byBkaXNwbGF5IChwcmV2aWV3IHRha2VzIHByaW9yaXR5IG92ZXIgY3VycmVudCkgKi9cbiAgcHJvdGVjdGVkIGRpc3BsYXlVcmwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKHRoaXMuaW1hZ2VMb2FkRXJyb3IoKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMucHJldmlld1VybCgpIHx8IHRoaXMuY29uZmlnKCkuY3VycmVudFVybCB8fCBudWxsO1xuICB9KTtcblxuICAvKiogQXJpYSBsYWJlbCBmb3IgZWRpdCBidXR0b24gKi9cbiAgcHJvdGVjdGVkIGVkaXRCdXR0b25MYWJlbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICB0aGlzLmkxOG4ubGFuZygpO1xuICAgIHJldHVybiB0aGlzLmkxOG4udCgnY2hhbmdlUGhvdG8nLCB0aGlzLmNvbmZpZygpLmkxOG5OYW1lc3BhY2UpIHx8ICdDYW1iaWFyIGZvdG8nO1xuICB9KTtcblxuICAvKiogTGFiZWwgZm9yIHZpZXcgcGhvdG8gYnV0dG9uICovXG4gIHByb3RlY3RlZCB2aWV3UGhvdG9MYWJlbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICB0aGlzLmkxOG4ubGFuZygpO1xuICAgIHJldHVybiB0aGlzLmkxOG4udCgndmlld1Bob3RvJywgJ0F2YXRhclVwbG9hZCcpO1xuICB9KTtcblxuICAvKiogTGFiZWwgZm9yIGNsb3NlIGJ1dHRvbiBpbnNpZGUgcGhvdG8gdmlld2VyICovXG4gIHByb3RlY3RlZCBjbG9zZVBob3RvTGFiZWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoJ2Nsb3NlJywgJ19nbG9iYWwnKTtcbiAgfSk7XG5cbiAgLyoqIE9wZW4gZmlsZSBwaWNrZXIgZGlhbG9nICovXG4gIG9wZW5GaWxlUGlja2VyKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgfVxuXG4gIC8qKiBIYW5kbGUgZmlsZSBzZWxlY3Rpb24gKi9cbiAgb25GaWxlU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCBmaWxlID0gaW5wdXQuZmlsZXM/LlswXTtcblxuICAgIGlmICghZmlsZSkgcmV0dXJuO1xuXG4gICAgLy8gUmVzZXQgaW5wdXQgZm9yIHNhbWUgZmlsZSBzZWxlY3Rpb25cbiAgICBpbnB1dC52YWx1ZSA9ICcnO1xuXG4gICAgLy8gVmFsaWRhdGUgZmlsZVxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSB0aGlzLmltYWdlU2VydmljZS52YWxpZGF0ZShmaWxlLCB7XG4gICAgICBtYXhTaXplOiB0aGlzLmNvbmZpZygpLm1heEZpbGVTaXplLFxuICAgICAgYWxsb3dlZFR5cGVzOiBbJ2ltYWdlL2pwZWcnLCAnaW1hZ2UvcG5nJywgJ2ltYWdlL3dlYnAnXSxcbiAgICB9KTtcblxuICAgIGlmICghdmFsaWRhdGlvbi52YWxpZCkge1xuICAgICAgdGhpcy5lbWl0RXJyb3IodmFsaWRhdGlvbi5lcnJvciBhcyBBdmF0YXJVcGxvYWRFcnJvclsndHlwZSddLCB2YWxpZGF0aW9uLm1lc3NhZ2UhKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBPcGVuIGNyb3AgbW9kYWxcbiAgICB0aGlzLnNlbGVjdGVkRmlsZS5zZXQoZmlsZSk7XG4gICAgdGhpcy5zaG93Q3JvcE1vZGFsLnNldCh0cnVlKTtcbiAgfVxuXG4gIC8qKiBIYW5kbGUgY3JvcCBjb21wbGV0aW9uICovXG4gIGFzeW5jIG9uQ3JvcENvbXBsZXRlKGNyb3BwZWRCbG9iOiBCbG9iKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zaG93Q3JvcE1vZGFsLnNldChmYWxzZSk7XG4gICAgdGhpcy5zZWxlY3RlZEZpbGUuc2V0KG51bGwpO1xuXG4gICAgYXdhaXQgdGhpcy5wcm9jZXNzQW5kVXBsb2FkKGNyb3BwZWRCbG9iKTtcbiAgfVxuXG4gIC8qKiBIYW5kbGUgY3JvcCBjYW5jZWwgKi9cbiAgb25Dcm9wQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0Nyb3BNb2RhbC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuc2VsZWN0ZWRGaWxlLnNldChudWxsKTtcbiAgfVxuXG4gIC8qKiBIYW5kbGUgY3JvcCBsb2FkIGZhaWx1cmUgKi9cbiAgb25Dcm9wTG9hZEZhaWxlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dDcm9wTW9kYWwuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnNlbGVjdGVkRmlsZS5zZXQobnVsbCk7XG4gICAgdGhpcy5lbWl0RXJyb3IoXG4gICAgICAnaW52YWxpZFR5cGUnLFxuICAgICAgdGhpcy5pMThuLnQoJ2xvYWRGYWlsZWQnLCB0aGlzLmNvbmZpZygpLmkxOG5OYW1lc3BhY2UpIHx8ICdObyBzZSBwdWRvIGNhcmdhciBsYSBpbWFnZW4nXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBIYW5kbGUgaW1hZ2UgbG9hZCBlcnJvciAqL1xuICBvbkltYWdlRXJyb3IoKTogdm9pZCB7XG4gICAgdGhpcy5pbWFnZUxvYWRFcnJvci5zZXQodHJ1ZSk7XG4gIH1cblxuICAvKiogVGltZW91dCBmb3IgdXBsb2FkIG9wZXJhdGlvbnMgKDMwIHNlY29uZHMpICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFVQTE9BRF9USU1FT1VUX01TID0gMzAwMDA7XG5cbiAgLyoqIFByb2Nlc3MgY3JvcHBlZCBpbWFnZSBhbmQgdXBsb2FkICovXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc0FuZFVwbG9hZChjcm9wcGVkQmxvYjogQmxvYik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy51cGxvYWRTdGFydC5lbWl0KCk7XG5cbiAgICAvLyBUaW1lb3V0IHByb21pc2UgdG8gcHJldmVudCBpbmZpbml0ZSBsb2FkaW5nXG4gICAgY29uc3QgdXBsb2FkVGltZW91dCA9IG5ldyBQcm9taXNlPG5ldmVyPigoXywgcmVqZWN0KSA9PlxuICAgICAgc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKCdVcGxvYWQgdGltZW91dCcpKSwgQXZhdGFyVXBsb2FkQ29tcG9uZW50LlVQTE9BRF9USU1FT1VUX01TKVxuICAgICk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWcoKTtcblxuICAgICAgLy8gMS4gQ29tcHJlc3MgaW1hZ2VcbiAgICAgIGNvbnN0IGNvbXByZXNzZWQgPSBhd2FpdCB0aGlzLmltYWdlU2VydmljZS5jb21wcmVzcyhjcm9wcGVkQmxvYiwge1xuICAgICAgICBtYXhXaWR0aDogY29uZmlnLm1heFdpZHRoLFxuICAgICAgICBtYXhIZWlnaHQ6IGNvbmZpZy5tYXhXaWR0aCxcbiAgICAgICAgcXVhbGl0eTogY29uZmlnLmNvbXByZXNzUXVhbGl0eSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyAyLiBHZW5lcmF0ZSB0aHVtYm5haWxcbiAgICAgIGNvbnN0IHRodW1ibmFpbCA9IGF3YWl0IHRoaXMuaW1hZ2VTZXJ2aWNlLnRodW1ibmFpbChjb21wcmVzc2VkLmJsb2IsIGNvbmZpZy50aHVtYm5haWxTaXplKTtcblxuICAgICAgLy8gMy4gU2V0IHByZXZpZXcgaW1tZWRpYXRlbHlcbiAgICAgIHRoaXMucHJldmlld1VybC5zZXQoY29tcHJlc3NlZC5kYXRhVXJsKTtcbiAgICAgIHRoaXMuaW1hZ2VMb2FkRXJyb3Iuc2V0KGZhbHNlKTtcblxuICAgICAgLy8gNC4gR2V0IHVzZXIgSUQgZm9yIHN0b3JhZ2UgcGF0aCAob25seSByZXF1aXJlZCB3aGVuIHVzaW5nIGRlZmF1bHQgdXNlciBwYXRocylcbiAgICAgIGNvbnN0IGN1c3RvbUF2YXRhclBhdGggPSB0aGlzLmN1c3RvbVBhdGgoKTtcbiAgICAgIGNvbnN0IHVzZXJJZCA9IHRoaXMuYXV0aFNlcnZpY2UudXNlcigpPy51c2VySWQ7XG4gICAgICBpZiAoIWN1c3RvbUF2YXRhclBhdGggJiYgIXVzZXJJZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhlbnRpY2F0ZWQnKTtcbiAgICAgIH1cblxuICAgICAgLy8gNS4gVXBsb2FkIHRvIEZpcmViYXNlIFN0b3JhZ2Ugd2l0aCBwcmVkaWN0YWJsZSBwYXRoc1xuICAgICAgLy8gV2hlbiBjdXN0b21QYXRoIGlzIHByb3ZpZGVkIChlLmcuIG9yZ3Mve29yZ0lkfS9sb2dvLmpwZyksIHVzZSBpdCBkaXJlY3RseS5cbiAgICAgIC8vIE90aGVyd2lzZSBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgdXNlciBhdmF0YXIgcGF0aC5cbiAgICAgIC8vIHNraXBQcmVmaXg6IHRydWUgLSBieXBhc3NlcyBhcHBJZCBwcmVmaXggZm9yIHNoYXJlZC9jcm9zcy1hcHAgcGF0aHNcbiAgICAgIGNvbnN0IGF2YXRhclBhdGggPSBjdXN0b21BdmF0YXJQYXRoID8/ICd1c2Vycy8nICsgdXNlcklkICsgJy9hdmF0YXIuanBnJztcbiAgICAgIGNvbnN0IHRodW1iUGF0aCA9IHRoaXMuY3VzdG9tVGh1bWJQYXRoKCkgPz8gJ3VzZXJzLycgKyB1c2VySWQgKyAnL3RodW1iLmpwZyc7XG4gICAgICBjb25zdCB1cGxvYWRNZXRhZGF0YSA9IHsgc2tpcFByZWZpeDogdHJ1ZSwgY29udGVudFR5cGU6ICdpbWFnZS9qcGVnJyB9O1xuXG4gICAgICAvLyBSYWNlIGFnYWluc3QgdGltZW91dCB0byBwcmV2ZW50IGluZmluaXRlIGxvYWRpbmdcbiAgICAgIGNvbnN0IFthdmF0YXJSZXN1bHQsIHRodW1iUmVzdWx0XSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIFByb21pc2UuYWxsKFtcbiAgICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwbG9hZEFuZEdldFVybChhdmF0YXJQYXRoLCBjb21wcmVzc2VkLmJsb2IsIHVwbG9hZE1ldGFkYXRhKSxcbiAgICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwbG9hZEFuZEdldFVybCh0aHVtYlBhdGgsIHRodW1ibmFpbC5ibG9iLCB1cGxvYWRNZXRhZGF0YSksXG4gICAgICAgIF0pLFxuICAgICAgICB1cGxvYWRUaW1lb3V0LFxuICAgICAgXSk7XG5cbiAgICAgIC8vIDYuIFVwZGF0ZSBiYWNrZW5kIHdpdGggVVJMcyAoc2tpcHBlZCB3aGVuIHNraXBCYWNrZW5kU3luYyBpcyB0cnVlKVxuICAgICAgaWYgKCF0aGlzLnNraXBCYWNrZW5kU3luYygpKSB7XG4gICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2UudXBkYXRlQXZhdGFyKHtcbiAgICAgICAgICAgIGF2YXRhclVybDogYXZhdGFyUmVzdWx0LmRvd25sb2FkVXJsLFxuICAgICAgICAgICAgYXZhdGFyVGh1bWJuYWlsOiB0aHVtYlJlc3VsdC5kb3dubG9hZFVybCxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyA3LiBVcGRhdGUgcHJldmlldyB3aXRoIGNhY2hlLWJ1c3RpbmcgdG8gZm9yY2UgcmVmcmVzaFxuICAgICAgY29uc3QgY2FjaGVCdXN0ZXIgPSBgP3Q9JHtEYXRlLm5vdygpfWA7XG4gICAgICB0aGlzLnByZXZpZXdVcmwuc2V0KGF2YXRhclJlc3VsdC5kb3dubG9hZFVybCArIGNhY2hlQnVzdGVyKTtcblxuICAgICAgLy8gOC4gRW1pdCBzdWNjZXNzXG4gICAgICBjb25zdCByZXN1bHQ6IEF2YXRhclVwbG9hZFJlc3VsdCA9IHtcbiAgICAgICAgYXZhdGFyVXJsOiBhdmF0YXJSZXN1bHQuZG93bmxvYWRVcmwsXG4gICAgICAgIHRodW1ibmFpbFVybDogdGh1bWJSZXN1bHQuZG93bmxvYWRVcmwsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnVwbG9hZGVkLmVtaXQocmVzdWx0KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tBdmF0YXJVcGxvYWRdIHByb2Nlc3NBbmRVcGxvYWQgZmFpbGVkOicsIGVycik7XG4gICAgICAvLyBSZXZlcnQgcHJldmlldyBvbiBlcnJvclxuICAgICAgdGhpcy5wcmV2aWV3VXJsLnNldChudWxsKTtcblxuICAgICAgLy8gRGV0ZXJtaW5lIGVycm9yIG1lc3NhZ2UgYmFzZWQgb24gZXJyb3IgdHlwZVxuICAgICAgbGV0IG1lc3NhZ2U6IHN0cmluZztcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgPT09ICdVcGxvYWQgdGltZW91dCcpIHtcbiAgICAgICAgICBtZXNzYWdlID1cbiAgICAgICAgICAgIHRoaXMuaTE4bi50KCd1cGxvYWRUaW1lb3V0JywgdGhpcy5jb25maWcoKS5pMThuTmFtZXNwYWNlKSB8fFxuICAgICAgICAgICAgJ0xhIHN1YmlkYSB0YXJkw7MgZGVtYXNpYWRvLiBWZXJpZmljYSB0dSBjb25leGnDs24uJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZXNzYWdlID0gZXJyLm1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lc3NhZ2UgPSB0aGlzLmkxOG4udCgndXBsb2FkRXJyb3InLCB0aGlzLmNvbmZpZygpLmkxOG5OYW1lc3BhY2UpIHx8ICdFcnJvciBhbCBzdWJpciBsYSBpbWFnZW4nO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmVtaXRFcnJvcigndXBsb2FkRmFpbGVkJywgbWVzc2FnZSwgZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEVtaXQgZXJyb3IgZXZlbnQgKi9cbiAgcHJpdmF0ZSBlbWl0RXJyb3IodHlwZTogQXZhdGFyVXBsb2FkRXJyb3JbJ3R5cGUnXSwgbWVzc2FnZTogc3RyaW5nLCBvcmlnaW5hbEVycm9yPzogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMuZXJyb3IuZW1pdCh7IHR5cGUsIG1lc3NhZ2UsIG9yaWdpbmFsRXJyb3IgfSk7XG4gIH1cbn1cbiJdfQ==