@ieeesa-npm/groups 0.15.9 → 0.15.10

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 (35) hide show
  1. package/esm2022/lib/assets/constants.json +75 -4
  2. package/esm2022/lib/components/interest-form/interest-form.component.mjs +104 -0
  3. package/esm2022/lib/components/interest-form-management/interest-form-management.component.mjs +63 -0
  4. package/esm2022/lib/components/interested-rosters/interested-rosters.component.mjs +28 -0
  5. package/esm2022/lib/components/roster-import/roster-import.component.mjs +149 -82
  6. package/esm2022/lib/components/roster-import-history/roster-import-history.component.mjs +232 -0
  7. package/esm2022/lib/components/tree-view/tree-view.component.mjs +26 -5
  8. package/esm2022/lib/components/view-roster/view-roster.component.mjs +10 -3
  9. package/esm2022/lib/groups.component.mjs +60 -6
  10. package/esm2022/lib/models/group-action.model.mjs +2 -1
  11. package/esm2022/lib/models/group-function-type.model.mjs +2 -1
  12. package/esm2022/lib/models/permission-type.model.mjs +2 -1
  13. package/esm2022/lib/models/roster-import.model.mjs +34 -17
  14. package/esm2022/lib/services/roster-import-api.service.mjs +174 -0
  15. package/esm2022/public-api.mjs +6 -1
  16. package/fesm2022/ieeesa-npm-groups.mjs +930 -211
  17. package/fesm2022/ieeesa-npm-groups.mjs.map +1 -1
  18. package/lib/components/interest-form/interest-form.component.d.ts +75 -0
  19. package/lib/components/interest-form-management/interest-form-management.component.d.ts +31 -0
  20. package/lib/components/interested-rosters/interested-rosters.component.d.ts +17 -0
  21. package/lib/components/roster-import/roster-import.component.d.ts +77 -38
  22. package/lib/components/roster-import-history/roster-import-history.component.d.ts +102 -0
  23. package/lib/components/tree-view/tree-view.component.d.ts +6 -3
  24. package/lib/components/view-roster/view-roster.component.d.ts +5 -0
  25. package/lib/groups.component.d.ts +17 -0
  26. package/lib/models/group-action.model.d.ts +2 -1
  27. package/lib/models/group-function-type.model.d.ts +2 -1
  28. package/lib/models/permission-type.model.d.ts +2 -1
  29. package/lib/models/roster-import.model.d.ts +104 -21
  30. package/lib/services/groups.service.d.ts +4 -0
  31. package/lib/services/roster-import-api.service.d.ts +108 -0
  32. package/package.json +1 -1
  33. package/public-api.d.ts +5 -0
  34. package/esm2022/lib/assets/roster-import-mocks.mjs +0 -98
  35. package/lib/assets/roster-import-mocks.d.ts +0 -27
@@ -259,6 +259,7 @@ export class TreeViewComponent {
259
259
  this.editGroupClick = new EventEmitter();
260
260
  this.deleteGroupClick = new EventEmitter();
261
261
  this.viewRosterClick = new EventEmitter();
262
+ this.manageInterestFormClick = new EventEmitter();
262
263
  this.isMobileView = false;
263
264
  this.groupFunctionType = GroupFunctionType;
264
265
  /**
@@ -578,8 +579,10 @@ export class TreeViewComponent {
578
579
  return this.plusCircleIconButton;
579
580
  }
580
581
  /**
581
- * Handles the emitted group actions event
582
- * @param {GroupInfo} group
582
+ * Handles the emitted group actions event. Emits the corresponding output
583
+ * for the selected action: view roster, create sub group, edit group,
584
+ * delete group, or manage interest form.
585
+ * @param {GroupNode} group
583
586
  * @memberof TreeViewComponent
584
587
  */
585
588
  handleGroupActions(group) {
@@ -604,6 +607,10 @@ export class TreeViewComponent {
604
607
  else if (this.selectedGroupAction?.id === GroupAction.DELETE_GROUP) {
605
608
  this.deleteGroupClick.emit(group?.item);
606
609
  }
610
+ else if (this.selectedGroupAction?.id === GroupAction.MANAGE_INTEREST_FORM) {
611
+ this.selectedGroup = group;
612
+ this.manageInterestFormClick.emit(group?.item);
613
+ }
607
614
  }
608
615
  /**
609
616
  * Returns the filtered menu items based on groups hasChildren.
@@ -639,10 +646,22 @@ export class TreeViewComponent {
639
646
  group?.item?.groupTypeInfo?.businessRule?.allowSubGroup &&
640
647
  (this.groupsService.validateAccess(this.permissionType.CREATE_SUBGROUP, groupPermissions) ||
641
648
  this.groupsService.validateAccess(this.permissionType.MANAGE_ALL_GROUPS)) &&
642
- !isAdminGroupType)) {
649
+ !isAdminGroupType) ||
650
+ // TODO: Gate with MANAGE_CUSTOM_INTEREST_QUESTIONS permission (SP3M-380)
651
+ // once permissions are implemented. Shown unconditionally for now to
652
+ // support UI development.
653
+ e?.id === GroupAction.MANAGE_INTEREST_FORM) {
643
654
  filteredMenu.push(e);
644
655
  }
645
656
  });
657
+ // Show the Manage Interest Form action first (leftmost) per the design.
658
+ filteredMenu.sort((menuA, menuB) => {
659
+ if (menuA?.id === GroupAction.MANAGE_INTEREST_FORM)
660
+ return -1;
661
+ if (menuB?.id === GroupAction.MANAGE_INTEREST_FORM)
662
+ return 1;
663
+ return 0;
664
+ });
646
665
  return filteredMenu;
647
666
  }
648
667
  /**
@@ -664,7 +683,7 @@ export class TreeViewComponent {
664
683
  this.destroy$.unsubscribe();
665
684
  }
666
685
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TreeViewComponent, deps: [{ token: Groups }, { token: i0.ElementRef }, { token: i1.GroupsService }, { token: i2.BreakpointObserverService }], target: i0.ɵɵFactoryTarget.Component }); }
667
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TreeViewComponent, isStandalone: true, selector: "ieeesa-tree", inputs: { parentGroupsInfo: "parentGroupsInfo", childGroupsInfo: "childGroupsInfo", isGroupSearchOrFilterActive: "isGroupSearchOrFilterActive", deletedGroupIdInfo: "deletedGroupIdInfo", userGroupPermissions: "userGroupPermissions" }, outputs: { toggleGroupClick: "toggleGroupClick", createGroupClick: "createGroupClick", editGroupClick: "editGroupClick", deleteGroupClick: "deleteGroupClick", viewRosterClick: "viewRosterClick" }, ngImport: i0, template: "<div class=\"ieeesa-tree\">\r\n <mat-tree\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"ieeesa-tree__root\"\r\n #rootSelector\r\n role=\"treegrid\"\r\n >\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n class=\"ieeesa-body-md-16\"\r\n >\r\n <div\r\n class=\"ieeesa-tree__node w-100 d-flex\"\r\n [ngStyle]=\"getBoxShadow()\"\r\n [ngClass]=\"\r\n node?.item?.groupParentId &&\r\n groupsService.getGroupFunctionType() !== groupFunctionType.FILTER &&\r\n groupsService.getGroupFunctionType() !== groupFunctionType.SEARCH\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n \"\r\n >\r\n <div\r\n [ngClass]=\"\r\n !isGroupSearchOrFilterActive ? 'ieeesa-tree__collapse-icon' : ''\r\n \"\r\n role=\"gridcell\"\r\n ></div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupNodeOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChildGroups\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n class=\"ieeesa-body-md-16 ieeesa-tree__parent-node-wrapper\"\r\n >\r\n <div\r\n [ngClass]=\"[\r\n treeControl.isExpanded(node) ? 'ieeesa-tree__expanded' : '',\r\n node?.item?.groupParentId &&\r\n groupsService.getGroupFunctionType() !== groupFunctionType.FILTER &&\r\n groupsService.getGroupFunctionType() !== groupFunctionType.SEARCH\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n ]\"\r\n class=\"ieeesa-tree__node w-100 d-flex\"\r\n [ngStyle]=\"getBoxShadow()\"\r\n >\r\n <div role=\"gridcell\">\r\n <ieeesa-icon-button\r\n *ngIf=\"!isGroupSearchOrFilterActive\"\r\n (iconButtonClick)=\"viewChildGroups(node)\"\r\n [iconButton]=\"getToggleButtonInfo(node)\"\r\n ></ieeesa-icon-button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupNodeOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n </div>\r\n </mat-tree-node>\r\n <ng-template #ieeesaGroupNodeOutlet let-node>\r\n <ng-container\r\n *ngTemplateOutlet=\"ieeesaGroupInfoOutlet; context: { $implicit: node }\"\r\n ></ng-container>\r\n <div\r\n class=\"d-flex d-none gap-3 d-sm-flex d-md-flex d-lg-flex ieeesa-tree__group-actions\"\r\n role=\"gridcell\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n <ieeesa-menu\r\n [button]=\"constants?.viewGroups?.groupActionsMenu\"\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"onGroupActionsClick($event); handleGroupActions(node)\"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n role=\"gridcell\"\r\n ></ieeesa-menu>\r\n </ng-template>\r\n <ng-template #ieeesaGroupInfoOutlet let-node>\r\n <div class=\"ieeesa-tree__group-info-wrapper\">\r\n <div class=\"ieeesa-tree__group-info d-flex align-items-baseline\">\r\n <p\r\n class=\"ieeesa-tree__node-group-name ieeesa-title-md-18\"\r\n [matTooltip]=\"node?.item?.groupName\"\r\n ieeesaTextTruncated\r\n role=\"gridcell\"\r\n >{{ node?.item?.groupName }}</p>\r\n <p\r\n class=\"ieeesa-tree__node-group-acronym ieeesa-title-sm-16\"\r\n [matTooltip]=\"node?.item?.groupAcronym\"\r\n ieeesaTextTruncated\r\n role=\"gridcell\"\r\n >{{ node?.item?.groupAcronym }}</p>\r\n </div>\r\n <div class=\"ieeesa-tree__node-group-desc\">\r\n {{ node?.item?.groupTypeInfo?.name }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #ieeesaGroupActionsOutlet let-node>\r\n <ieeesa-icon-button\r\n *ngFor=\"let item of getFilteredGroupActions(node); trackBy: trackByFn\"\r\n [iconButton]=\"item\"\r\n (iconButtonClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-template>\r\n </mat-tree>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.ieeesa-tree p{margin-bottom:0}.ieeesa-tree .ieeesa-icon-button{padding:0}.ieeesa-tree .ieeesa-icon-button__svg{height:1.5em;width:1.5em}.ieeesa-tree .ieeesa-icon-button__2 .ieeesa-icon-button__svg{height:1em}.ieeesa-tree .mat-mdc-icon-button{padding:0!important;position:absolute;right:1.7em}.ieeesa-tree__group-actions{margin-left:auto}.ieeesa-tree__group-info-wrapper{width:80%;max-width:60%;padding-left:.375em}.ieeesa-tree__group-info{margin-bottom:.125em}.ieeesa-tree__parent-node-wrapper .ieeesa-tree__group-info-wrapper{max-width:69%}.ieeesa-tree__node-group-name{text-overflow:ellipsis;white-space:pre;overflow:hidden;max-width:67%;min-width:0;padding-right:.375em}.ieeesa-tree__node-group-acronym{color:#63666a!important;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:auto;max-width:100%;min-width:0}.ieeesa-tree__node-group-desc{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#4a4d50;letter-spacing:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ieeesa-tree__node-group-desc:hover{white-space:normal}.ieeesa-tree__node{background:#f3f5f7;padding:.5em .75em .5em .5em;box-shadow:0 1px #9ba0a6 inset;border-right:1px solid #dbe2eb;border-bottom:1px solid #dbe2eb;border-left:1px solid #dbe2eb}.ieeesa-tree__root-node-white-bg{background:#fff}.ieeesa-tree__expanded{box-shadow:0 .0625em #00629b inset!important;background:#fff}.ieeesa-tree__collapse-icon{min-width:1.5em}@media (max-width: 992px){.ieeesa-tree__group-info-wrapper{max-width:60%}.ieeesa-tree__node-group-acronym{max-width:90%}}@media (max-width: 576px){.ieeesa-tree__group-info-wrapper,.ieeesa-tree__node-group-acronym,.ieeesa-tree__parent-node-wrapper .ieeesa-tree__group-info-wrapper{max-width:90%}.ieeesa-tree__node-group-name{max-width:80%}}.ieeesa-menu .mat-mdc-menu-content{padding:1.25em 1.25em 1.25em .5em!important}.ieeesa-menu__item__icon{background-color:unset!important;box-shadow:none!important;height:1.5em!important;width:1.5em!important;margin-right:.5em!important}.ieeesa-menu__item:not(:last-of-type){margin-bottom:1.5em!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i4.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i4.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "component", type: i4.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i4.MatTreeNode, selector: "mat-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: MenuComponent, selector: "ieeesa-menu", inputs: ["menuItems", "button", "defaultIconSize", "isMarginBottomZero"], outputs: ["menuToggleButtonElement", "menuItemClick"] }, { kind: "component", type: IconButtonComponent, selector: "ieeesa-icon-button", inputs: ["iconButton", "isLabelNeeded"], outputs: ["iconButtonClick"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: TextTruncatedDirective, selector: "[matTooltip][ieeesaTextTruncated]", inputs: ["elementClassNameToAddTooltip"] }], encapsulation: i0.ViewEncapsulation.None }); }
686
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TreeViewComponent, isStandalone: true, selector: "ieeesa-tree", inputs: { parentGroupsInfo: "parentGroupsInfo", childGroupsInfo: "childGroupsInfo", isGroupSearchOrFilterActive: "isGroupSearchOrFilterActive", deletedGroupIdInfo: "deletedGroupIdInfo", userGroupPermissions: "userGroupPermissions" }, outputs: { toggleGroupClick: "toggleGroupClick", createGroupClick: "createGroupClick", editGroupClick: "editGroupClick", deleteGroupClick: "deleteGroupClick", viewRosterClick: "viewRosterClick", manageInterestFormClick: "manageInterestFormClick" }, ngImport: i0, template: "<div class=\"ieeesa-tree\">\r\n <mat-tree\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"ieeesa-tree__root\"\r\n #rootSelector\r\n role=\"treegrid\"\r\n >\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n class=\"ieeesa-body-md-16\"\r\n >\r\n <div\r\n class=\"ieeesa-tree__node w-100 d-flex\"\r\n [ngStyle]=\"getBoxShadow()\"\r\n [ngClass]=\"\r\n node?.item?.groupParentId &&\r\n groupsService.getGroupFunctionType() !== groupFunctionType.FILTER &&\r\n groupsService.getGroupFunctionType() !== groupFunctionType.SEARCH\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n \"\r\n >\r\n <div\r\n [ngClass]=\"\r\n !isGroupSearchOrFilterActive ? 'ieeesa-tree__collapse-icon' : ''\r\n \"\r\n role=\"gridcell\"\r\n ></div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupNodeOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChildGroups\"\r\n matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"treePaddingIndent\"\r\n class=\"ieeesa-body-md-16 ieeesa-tree__parent-node-wrapper\"\r\n >\r\n <div\r\n [ngClass]=\"[\r\n treeControl.isExpanded(node) ? 'ieeesa-tree__expanded' : '',\r\n node?.item?.groupParentId &&\r\n groupsService.getGroupFunctionType() !== groupFunctionType.FILTER &&\r\n groupsService.getGroupFunctionType() !== groupFunctionType.SEARCH\r\n ? 'ieeesa-tree__root-node-white-bg'\r\n : 'ieeesa-tree__root-node'\r\n ]\"\r\n class=\"ieeesa-tree__node w-100 d-flex\"\r\n [ngStyle]=\"getBoxShadow()\"\r\n >\r\n <div role=\"gridcell\">\r\n <ieeesa-icon-button\r\n *ngIf=\"!isGroupSearchOrFilterActive\"\r\n (iconButtonClick)=\"viewChildGroups(node)\"\r\n [iconButton]=\"getToggleButtonInfo(node)\"\r\n ></ieeesa-icon-button>\r\n </div>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupNodeOutlet;\r\n context: { $implicit: node }\r\n \"\r\n ></ng-container>\r\n </div>\r\n </mat-tree-node>\r\n <ng-template #ieeesaGroupNodeOutlet let-node>\r\n <ng-container\r\n *ngTemplateOutlet=\"ieeesaGroupInfoOutlet; context: { $implicit: node }\"\r\n ></ng-container>\r\n <div\r\n class=\"d-flex d-none gap-3 d-sm-flex d-md-flex d-lg-flex ieeesa-tree__group-actions\"\r\n role=\"gridcell\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n ieeesaGroupActionsOutlet;\r\n context: { $implicit: node }\r\n \"\r\n >\r\n </ng-container>\r\n </div>\r\n <ieeesa-menu\r\n [button]=\"constants?.viewGroups?.groupActionsMenu\"\r\n [menuItems]=\"getFilteredGroupActions(node)\"\r\n (menuItemClick)=\"onGroupActionsClick($event); handleGroupActions(node)\"\r\n class=\"d-lg-none d-md-none d-sm-none\"\r\n role=\"gridcell\"\r\n ></ieeesa-menu>\r\n </ng-template>\r\n <ng-template #ieeesaGroupInfoOutlet let-node>\r\n <div class=\"ieeesa-tree__group-info-wrapper\">\r\n <div class=\"ieeesa-tree__group-info d-flex align-items-baseline\">\r\n <p\r\n class=\"ieeesa-tree__node-group-name ieeesa-title-md-18\"\r\n [matTooltip]=\"node?.item?.groupName\"\r\n ieeesaTextTruncated\r\n role=\"gridcell\"\r\n >{{ node?.item?.groupName }}</p>\r\n <p\r\n class=\"ieeesa-tree__node-group-acronym ieeesa-title-sm-16\"\r\n [matTooltip]=\"node?.item?.groupAcronym\"\r\n ieeesaTextTruncated\r\n role=\"gridcell\"\r\n >{{ node?.item?.groupAcronym }}</p>\r\n </div>\r\n <div class=\"ieeesa-tree__node-group-desc\">\r\n {{ node?.item?.groupTypeInfo?.name }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #ieeesaGroupActionsOutlet let-node>\r\n <ieeesa-icon-button\r\n *ngFor=\"let item of getFilteredGroupActions(node); trackBy: trackByFn\"\r\n [iconButton]=\"item\"\r\n (iconButtonClick)=\"\r\n onGroupActionsClick($event); handleGroupActions(node)\r\n \"\r\n >\r\n </ieeesa-icon-button>\r\n </ng-template>\r\n </mat-tree>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.ieeesa-tree p{margin-bottom:0}.ieeesa-tree .ieeesa-icon-button{padding:0}.ieeesa-tree .ieeesa-icon-button__svg{height:1.5em;width:1.5em}.ieeesa-tree .ieeesa-icon-button__2 .ieeesa-icon-button__svg{height:1em}.ieeesa-tree .mat-mdc-icon-button{padding:0!important;position:absolute;right:1.7em}.ieeesa-tree__group-actions{margin-left:auto}.ieeesa-tree__group-info-wrapper{width:80%;max-width:60%;padding-left:.375em}.ieeesa-tree__group-info{margin-bottom:.125em}.ieeesa-tree__parent-node-wrapper .ieeesa-tree__group-info-wrapper{max-width:69%}.ieeesa-tree__node-group-name{text-overflow:ellipsis;white-space:pre;overflow:hidden;max-width:67%;min-width:0;padding-right:.375em}.ieeesa-tree__node-group-acronym{color:#63666a!important;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:auto;max-width:100%;min-width:0}.ieeesa-tree__node-group-desc{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#4a4d50;letter-spacing:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ieeesa-tree__node-group-desc:hover{white-space:normal}.ieeesa-tree__node{background:#f3f5f7;padding:.5em .75em .5em .5em;box-shadow:0 1px #9ba0a6 inset;border-right:1px solid #dbe2eb;border-bottom:1px solid #dbe2eb;border-left:1px solid #dbe2eb}.ieeesa-tree__root-node-white-bg{background:#fff}.ieeesa-tree__expanded{box-shadow:0 .0625em #00629b inset!important;background:#fff}.ieeesa-tree__collapse-icon{min-width:1.5em}@media (max-width: 992px){.ieeesa-tree__group-info-wrapper{max-width:60%}.ieeesa-tree__node-group-acronym{max-width:90%}}@media (max-width: 576px){.ieeesa-tree__group-info-wrapper,.ieeesa-tree__node-group-acronym,.ieeesa-tree__parent-node-wrapper .ieeesa-tree__group-info-wrapper{max-width:90%}.ieeesa-tree__node-group-name{max-width:80%}}.ieeesa-menu .mat-mdc-menu-content{padding:1.25em 1.25em 1.25em .5em!important}.ieeesa-menu__item__icon{background-color:unset!important;box-shadow:none!important;height:1.5em!important;width:1.5em!important;margin-right:.5em!important}.ieeesa-menu__item:not(:last-of-type){margin-bottom:1.5em!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i4.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i4.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "component", type: i4.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i4.MatTreeNode, selector: "mat-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: MenuComponent, selector: "ieeesa-menu", inputs: ["menuItems", "button", "defaultIconSize", "isMarginBottomZero"], outputs: ["menuToggleButtonElement", "menuItemClick"] }, { kind: "component", type: IconButtonComponent, selector: "ieeesa-icon-button", inputs: ["iconButton", "isLabelNeeded"], outputs: ["iconButtonClick"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: TextTruncatedDirective, selector: "[matTooltip][ieeesaTextTruncated]", inputs: ["elementClassNameToAddTooltip"] }], encapsulation: i0.ViewEncapsulation.None }); }
668
687
  }
669
688
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TreeViewComponent, decorators: [{
670
689
  type: Component,
@@ -698,5 +717,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
698
717
  type: Output
699
718
  }], viewRosterClick: [{
700
719
  type: Output
720
+ }], manageInterestFormClick: [{
721
+ type: Output
701
722
  }] } });
702
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS12aWV3L3RyZWUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtdmlldy90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxNQUFNLEVBR04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxhQUFhLEVBRWIsbUJBQW1CLEVBRW5CLHNCQUFzQixFQUV2QixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sS0FBSyxTQUFTLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU0vQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFzQixNQUFNLHdCQUF3QixDQUFDO0FBRzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9B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QXpCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdGFibGUsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIE9uRGVzdHJveSxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBNZW51Q29tcG9uZW50LFxyXG4gIE1lbnUsXHJcbiAgSWNvbkJ1dHRvbkNvbXBvbmVudCxcclxuICBJY29uQnV0dG9uLFxyXG4gIFRleHRUcnVuY2F0ZWREaXJlY3RpdmUsXHJcbiAgQnJlYWtwb2ludE9ic2VydmVyU2VydmljZVxyXG59IGZyb20gJ0BpZWVlc2EtbnBtL3ByZXNlbnRhdGlvbic7XHJcbmltcG9ydCAqIGFzIGNvbnN0YW50cyBmcm9tICcuLi8uLi9hc3NldHMvY29uc3RhbnRzLmpzb24nO1xyXG5pbXBvcnQgeyBHcm91cEFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9ncm91cC1hY3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENvbGxlY3Rpb25WaWV3ZXIsXHJcbiAgU2VsZWN0aW9uQ2hhbmdlLFxyXG4gIERhdGFTb3VyY2UsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHsgRmxhdFRyZWVDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdFRyZWVNb2R1bGUsIE1hdFRyZWVOb2RlUGFkZGluZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xyXG5pbXBvcnQgeyBHcm91cEluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7IEVkaXRHcm91cEFuZFBhcmVudEluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZWRpdC1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgR3JvdXBzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dyb3Vwcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR3JvdXBGdW5jdGlvblR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtZnVuY3Rpb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Blcm1pc3Npb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3VwUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uL21vZGVscy9ncm91cC1wZXJtaXNzaW9ucy5tb2RlbCc7XHJcbi8qKlxyXG4gKiBEeW5hbWljIEZsYXQgbm9kZSBjcmVhdGVzIGEgbm9kZSBzdHJ1Y3R1cmVcclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgR3JvdXBOb2RlXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgR3JvdXBOb2RlIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGl0ZW06IEdyb3VwSW5mbyxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGxldmVsID0gMSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGV4cGFuZGFibGUgPSBmYWxzZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGlzTG9hZGluZyA9IGZhbHNlIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eS1mdW5jdGlvblxyXG4gICkge31cclxufVxyXG5cclxuLyoqXHJcbiAqIEdyb3VwcyBzdG9yZXMgdGhlIHBhcmVudCBub2RlcyBhbmQgY2hpbGQgbm9kZXNcclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgR3JvdXBzXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgR3JvdXBzIHtcclxuICByb290TGV2ZWxOb2RlcyE6IEdyb3VwSW5mb1tdO1xyXG4gIC8qKiBJbml0aWFsIGRhdGEgZnJvbSBkYXRhYmFzZSAqL1xyXG4gIHByaXZhdGUgY2hpbGRHcm91cHMhOiBHcm91cEluZm9bXTtcclxuICAvKipcclxuICAgKiBHZXQgdGhlIENoaWxkIGdyb3VwcyBpbmZvXHJcbiAgICogQHJldHVybiB7Kn0gIHtHcm91cEluZm9bXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzXHJcbiAgICovXHJcbiAgZ2V0Q2hpbGRHcm91cHNJbmZvKCk6IEdyb3VwSW5mb1tdIHtcclxuICAgIHJldHVybiB0aGlzLmNoaWxkR3JvdXBzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBDaGlsZCBncm91cHMgaW5mb1xyXG4gICAqIEBwYXJhbSB7R3JvdXBJbmZvW119IHZhbHVlXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1xyXG4gICAqL1xyXG4gIHNldENoaWxkR3JvdXBzSW5mbyh2YWx1ZTogR3JvdXBJbmZvW10pOiB2b2lkIHtcclxuICAgIHRoaXMuY2hpbGRHcm91cHMgPSB2YWx1ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSB0aGUgZ3JvdXBzIGRhdGEgYW5kIGNyZWF0ZXMgdGhlIG5vZGUgc3RydWN0dXJlIGZvciBtYXQgdHJlZVxyXG4gICAqIEBwYXJhbSB7R3JvdXBJbmZvW119IGRhdGFcclxuICAgKiBAcmV0dXJuIHsqfSAge0dyb3VwTm9kZVtdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNcclxuICAgKi9cclxuICBpbml0aWFsRGF0YShkYXRhOiBHcm91cEluZm9bXSk6IEdyb3VwTm9kZVtdIHtcclxuICAgIHRoaXMucm9vdExldmVsTm9kZXMgPSBkYXRhO1xyXG4gICAgcmV0dXJuIHRoaXMucm9vdExldmVsTm9kZXM/Lm1hcChcclxuICAgICAgKG5vZGUpID0+IG5ldyBHcm91cE5vZGUobm9kZSwgMCwgdGhpcy5pc0V4cGFuZGFibGUobm9kZSkpXHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDaGVja3MgdGhlIG5vZGUgaXMgZXhwYW5kYWJsZSBvciBub3RcclxuICAgKiBAcGFyYW0ge0dyb3VwSW5mb30gbm9kZVxyXG4gICAqIEByZXR1cm4geyp9ICB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzXHJcbiAgICovXHJcbiAgaXNFeHBhbmRhYmxlKG5vZGU6IEdyb3VwSW5mbyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKCEhbm9kZT8uY2hpbGRyZW4gJiYgbm9kZT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHx8IG5vZGU/Lmhhc0NoaWxkcmVuXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4vKipcclxuICogRHluYW1pYyBEYXRhIFNvdXJjZSBoYW5kbGVzIHRoZSBjb25uZWN0aW9uIHdpdGggZHluYW1pYyBkYXRhIGJhc2VcclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgR3JvdXBzRGF0YVNvdXJjZVxyXG4gKiBAaW1wbGVtZW50cyB7RGF0YVNvdXJjZTxHcm91cE5vZGU+fVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEdyb3Vwc0RhdGFTb3VyY2UgaW1wbGVtZW50cyBEYXRhU291cmNlPEdyb3VwTm9kZT4ge1xyXG4gIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBkYXRhQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxHcm91cE5vZGVbXT4oW10pO1xyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHVwZGF0ZWQgdHJlZSBjb250cm9sIGRhdGFcclxuICAgKiBAdHlwZSB7R3JvdXBOb2RlW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0RhdGFTb3VyY2VcclxuICAgKi9cclxuICBnZXQgZGF0YSgpOiBHcm91cE5vZGVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhQ2hhbmdlPy52YWx1ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgZGF0YSB0byB0cmVlIGNvbnRyb2wgYW5kIGVtaXQgdGhlIHZhbHVlIHRvIGludGltYXRlIHRoZSBkYXRhIGNoYW5nZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgc2V0IGRhdGEodmFsdWU6IEdyb3VwTm9kZVtdKSB7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2RlcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLm5leHQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgdHJlZUNvbnRyb2w6IEZsYXRUcmVlQ29udHJvbDxHcm91cE5vZGU+LFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGRhdGFiYXNlOiBHcm91cHMgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGRhdGEgYmFzZSBhbmQgbWF0IHRyZWVcclxuICAgKiBAcGFyYW0ge0NvbGxlY3Rpb25WaWV3ZXJ9IGNvbGxlY3Rpb25WaWV3ZXJcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8R3JvdXBOb2RlW10+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxHcm91cE5vZGVbXT4ge1xyXG4gICAgdGhpcy50cmVlQ29udHJvbD8uZXhwYW5zaW9uTW9kZWw/LmNoYW5nZWRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChjaGFuZ2UpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoY2hhbmdlIGFzIFNlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+KS5hZGRlZCB8fFxyXG4gICAgICAgICAgKGNoYW5nZSBhcyBTZWxlY3Rpb25DaGFuZ2U8R3JvdXBOb2RlPikucmVtb3ZlZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVUcmVlQ29udHJvbChjaGFuZ2UgYXMgU2VsZWN0aW9uQ2hhbmdlPEdyb3VwTm9kZT4pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gbWVyZ2UoY29sbGVjdGlvblZpZXdlcj8udmlld0NoYW5nZSwgdGhpcy5kYXRhQ2hhbmdlKS5waXBlKFxyXG4gICAgICBtYXAoKCkgPT4gdGhpcy5kYXRhKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRGlzY29ubmVjdCB0aGUgY29ubmVjdGlvbiB3aXRoIG1hdCB0cmVlXHJcbiAgICogQHBhcmFtIHtDb2xsZWN0aW9uVmlld2VyfSBjb2xsZWN0aW9uVmlld2VyXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0RhdGFTb3VyY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uLCBuby1lbXB0eS1mdW5jdGlvbiwgbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gIGRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcy9yZW1vdmVzIHRoZSBjaGlsZCBub2RlcyB3aGlsZSBleHBhbmRzL2NvbGxhcHNlcyB0aGUgcGFyZW50IG5vZGVcclxuICAgKiBAcGFyYW0ge1NlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+fSBjaGFuZ2VcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzRGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIGhhbmRsZVRyZWVDb250cm9sKGNoYW5nZTogU2VsZWN0aW9uQ2hhbmdlPEdyb3VwTm9kZT4pIHtcclxuICAgIGlmIChjaGFuZ2U/LmFkZGVkKSB7XHJcbiAgICAgIGNoYW5nZS5hZGRlZD8uZm9yRWFjaCgobm9kZSkgPT4gdGhpcy50b2dnbGVOb2RlKG5vZGUsIHRydWUpKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2U/LnJlbW92ZWQpIHtcclxuICAgICAgY2hhbmdlLnJlbW92ZWRcclxuICAgICAgICAuc2xpY2UoKVxyXG4gICAgICAgIC5yZXZlcnNlKClcclxuICAgICAgICAuZm9yRWFjaCgobm9kZSkgPT4gdGhpcy50b2dnbGVOb2RlKG5vZGUsIGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGUgdGhlIG5vZGUsIGFkZC9yZW1vdmVzIHRoZSBub2RlIGZyb20gZGlzcGxheVxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBjbGlja2VkTm9kZVxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhwYW5kXHJcbiAgICogQHJldHVybiB7Kn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzRGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIHRvZ2dsZU5vZGUoY2xpY2tlZE5vZGU6IEdyb3VwTm9kZSwgZXhwYW5kOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZGF0YWJhc2U/LmdldENoaWxkR3JvdXBzSW5mbygpO1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmRhdGE/LmluZGV4T2YoY2xpY2tlZE5vZGUpO1xyXG4gICAgaWYgKCFjaGlsZHJlbiB8fCBpbmRleCA8IDApIHtcclxuICAgICAgLy8gSWYgbm8gY2hpbGRyZW4sIG9yIGNhbm5vdCBmaW5kIHRoZSBub2RlLCBubyBvcFxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV4cGFuZCkge1xyXG4gICAgICBjbGlja2VkTm9kZS5pdGVtLm5vT2ZDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgY29uc3Qgbm9kZXMgPSBjaGlsZHJlbj8ubWFwKFxyXG4gICAgICAgIChub2RlKSA9PlxyXG4gICAgICAgICAgbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgICAgbm9kZSxcclxuICAgICAgICAgICAgY2xpY2tlZE5vZGU/LmxldmVsICsgMSxcclxuICAgICAgICAgICAgdGhpcy5kYXRhYmFzZT8uaXNFeHBhbmRhYmxlKG5vZGUpXHJcbiAgICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZGF0YT8uc3BsaWNlKGluZGV4ICsgMSwgMCwgLi4ubm9kZXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGNvdW50ID0gMDtcclxuICAgICAgZm9yIChcclxuICAgICAgICBsZXQgaSA9IGluZGV4ICsgMTtcclxuICAgICAgICBpIDwgdGhpcy5kYXRhPy5sZW5ndGggJiYgdGhpcy5kYXRhW2ldPy5sZXZlbCA+IGNsaWNrZWROb2RlPy5sZXZlbDtcclxuICAgICAgICBpKyssIGNvdW50KysgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XHJcbiAgICAgICkge31cclxuICAgICAgdGhpcy5kYXRhPy5zcGxpY2UoaW5kZXggKyAxLCBjb3VudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoZSBjaGFuZ2VcclxuICAgIHRoaXMuZGF0YUNoYW5nZT8ubmV4dCh0aGlzLmRhdGEpO1xyXG4gIH1cclxufVxyXG4vKipcclxuICogRGlzcGxheXMgdGhlIGdyb3VwcyB3aGVyZSBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwcyBhcmUgcmVwcmVzZW50ZWQgaW4gYSB0cmVlIHZpZXcvaGllcmFyY2h5LlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBUcmVlVmlld0NvbXBvbmVudFxyXG4gKiBAaW1wbGVtZW50cyB7T25Jbml0fVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZWVlc2EtdHJlZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBNYXRUcmVlTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1lbnVDb21wb25lbnQsXHJcbiAgICBJY29uQnV0dG9uQ29tcG9uZW50LFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIFRleHRUcnVuY2F0ZWREaXJlY3RpdmUsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHJlZS12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90cmVlLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJlZVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBjb25zdGFudHM6IGFueSA9IGNvbnN0YW50cztcclxuICBidXR0b25zOiBNZW51W10gPSB0aGlzLmNvbnN0YW50cz8udmlld0dyb3Vwcz8uYnV0dG9ucztcclxuICB0cmVlUGFkZGluZ0luZGVudDogbnVtYmVyID0gdGhpcy5jb25zdGFudHM/LnZpZXdHcm91cHM/LnRyZWVQYWRkaW5nSW5kZW50O1xyXG4gIHNlbGVjdGVkR3JvdXAhOiBHcm91cE5vZGU7XHJcbiAgc2VsZWN0ZWRHcm91cEFjdGlvbiE6IE1lbnUgfCBJY29uQnV0dG9uO1xyXG4gIHRyZWVDb250cm9sITogRmxhdFRyZWVDb250cm9sPEdyb3VwTm9kZT47XHJcbiAgZGF0YVNvdXJjZSE6IEdyb3Vwc0RhdGFTb3VyY2U7XHJcbiAgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIG1hdFRyZWVOb2RlUGFkZGluZyE6IE1hdFRyZWVOb2RlUGFkZGluZzxHcm91cE5vZGU+O1xyXG4gIHBsdXNDaXJjbGVJY29uQnV0dG9uOiBJY29uQnV0dG9uID0gdGhpcy5idXR0b25zWzRdO1xyXG4gIG1pbnVzQ2lyY2xlSWNvbkJ1dHRvbjogSWNvbkJ1dHRvbiA9IHRoaXMuYnV0dG9uc1s1XTtcclxuICBlZGl0R3JvdXBBbmRQYXJlbnRHcm91cEluZm8hOiBFZGl0R3JvdXBBbmRQYXJlbnRJbmZvO1xyXG4gIHBlcm1pc3Npb25UeXBlID0gUGVybWlzc2lvblR5cGU7XHJcblxyXG4gIG1lbnVJdGVtczogTWVudVtdID0gdGhpcy5idXR0b25zPy5maWx0ZXIoXHJcbiAgICAoZSkgPT5cclxuICAgICAgZS5pZCAhPT0gR3JvdXBBY3Rpb24/LkVYUEFORF9HUk9VUF9WSUVXICYmXHJcbiAgICAgIGUuaWQgIT09IEdyb3VwQWN0aW9uPy5DT0xMQVBTRV9HUk9VUF9WSUVXXHJcbiAgKTtcclxuICBwcml2YXRlIHBhcmVudEdyb3VwcyE6IEdyb3VwSW5mb1tdO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHBhcmVudEdyb3Vwc0luZm8odmFsdWU6IEdyb3VwSW5mb1tdKSB7XHJcbiAgICB0aGlzLnBhcmVudEdyb3VwcyA9IHZhbHVlO1xyXG4gICAgaWYgKHZhbHVlKSB0aGlzLnNldEdyb3VwRGF0YVNvdXJjZSgpO1xyXG4gIH1cclxuICBnZXQgcGFyZW50R3JvdXBzSW5mbygpOiBHcm91cEluZm9bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5wYXJlbnRHcm91cHM7XHJcbiAgfVxyXG4gIHByaXZhdGUgY2hpbGRHcm91cHMhOiBHcm91cEluZm9bXTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBjaGlsZEdyb3Vwc0luZm8odmFsdWU6IEdyb3VwSW5mb1tdKSB7XHJcbiAgICB0aGlzLmNoaWxkR3JvdXBzID0gdmFsdWU7XHJcbiAgICB0aGlzLmxvYWRDaGlsZEdyb3VwcygpO1xyXG4gIH1cclxuICBnZXQgY2hpbGRHcm91cHNJbmZvKCk6IEdyb3VwSW5mb1tdIHtcclxuICAgIHJldHVybiB0aGlzLmNoaWxkR3JvdXBzO1xyXG4gIH1cclxuICBwcml2YXRlIGlzR3JvdXBTZWFyY2hPckZpbHRlciA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0dyb3VwU2VhcmNoT3JGaWx0ZXIgPSB2YWx1ZTtcclxuICB9XHJcbiAgZ2V0IGlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzR3JvdXBTZWFyY2hPckZpbHRlcjtcclxuICB9XHJcbiAgcHJpdmF0ZSBkZWxldGVkR3JvdXBJZCE6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKVxyXG4gIHNldCBkZWxldGVkR3JvdXBJZEluZm8oaWQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5kZWxldGVkR3JvdXBJZCA9IGlkO1xyXG4gICAgdGhpcy5kZWxldGVHcm91cE5vZGUodGhpcy5kZWxldGVkR3JvdXBJZCk7XHJcbiAgfVxyXG4gIGdldCBkZWxldGVkR3JvdXBJZEluZm8oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmRlbGV0ZWRHcm91cElkO1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIHVzZXJHcm91cFBlcm1pc3Npb25zITogR3JvdXBQZXJtaXNzaW9uW107XHJcblxyXG4gIEBPdXRwdXQoKSB0b2dnbGVHcm91cENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIGNyZWF0ZUdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdyb3VwSW5mbz4oKTtcclxuICBAT3V0cHV0KCkgZWRpdEdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEVkaXRHcm91cEFuZFBhcmVudEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIGRlbGV0ZUdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdyb3VwSW5mbz4oKTtcclxuICBAT3V0cHV0KCkgdmlld1Jvc3RlckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgaXNNb2JpbGVWaWV3ID0gZmFsc2U7XHJcbiAgZ3JvdXBGdW5jdGlvblR5cGUgPSBHcm91cEZ1bmN0aW9uVHlwZTtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGRhdGFiYXNlOiBHcm91cHMsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgZ3JvdXBzU2VydmljZTogR3JvdXBzU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlOiBCcmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlclNlcnZpY2VcclxuICAgICAgLmdldEJyZWFrcG9pbnQoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogeyBtYXRjaGVzOiBib29sZWFuIH0pID0+IHtcclxuICAgICAgICB0aGlzLmlzTW9iaWxlVmlldyA9IHJlc3VsdD8ubWF0Y2hlcztcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemVzIHRoZSB0cmVlIHZpZXcgY29tcG9uZW50XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldEdyb3VwRGF0YVNvdXJjZSgpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBBc3NpZ24gQVJJQSByb2xlIGZvciBhbGwgbWF0IHRyZWUgbm9kZXMgYXMgXCJyb3dcIlxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0YVNvdXJjZT8uZGF0YUNoYW5nZVxyXG4gICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGVzID1cclxuICAgICAgICAgIHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvckFsbCgnW3JvbGU9dHJlZWl0ZW1dJyk7XHJcbiAgICAgICAgdHJlZUl0ZW1Ob2Rlcz8uZm9yRWFjaCgobm9kZTogSFRNTEVsZW1lbnQpID0+IChub2RlLnJvbGUgPSAncm93JykpO1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgbGV2ZWwgb2YgdGhlIG5vZGVcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gbm9kZVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldExldmVsID0gKG5vZGU6IEdyb3VwTm9kZSkgPT4gbm9kZT8ubGV2ZWw7XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyB0aGUgbm9kZSBpcyBleHBhbmRhYmxlIG9yIG5vdFxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBub2RlXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgaXNFeHBhbmRhYmxlID0gKG5vZGU6IEdyb3VwTm9kZSkgPT4gbm9kZT8uZXhwYW5kYWJsZTtcclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0cnVlIGlmIHBhc3NlZCBub2RlIGhhcyBjaGlsZHJlbiBvdGhlcndpc2UgZmFsc2VcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gbm9kZVxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgaGFzQ2hpbGRHcm91cHMgPSAoaW5kZXg6IG51bWJlciwgX25vZGVEYXRhOiBHcm91cE5vZGUpID0+XHJcbiAgICBfbm9kZURhdGEuZXhwYW5kYWJsZTtcclxuICAvKipcclxuICAgKiBFbWl0cyB0aGUgZ3JvdXAgaW5mbyB3aGVuIHRoZSB0b2dnbGUgZ3JvdXAgaXMgY2xpY2tlZCBvciB0b2dnbGVzIHRoZSBncm91cCB2aWV3XHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IGdyb3VwXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgdmlld0NoaWxkR3JvdXBzKG5vZGU6IEdyb3VwTm9kZSkge1xyXG4gICAgaWYgKCFub2RlPy5pdGVtPy5oYXNDaGlsZHJlbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50cmVlQ29udHJvbD8uaXNFeHBhbmRlZChub2RlKSkge1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sPy50b2dnbGUobm9kZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdyb3Vwc1NlcnZpY2Uuc2V0R3JvdXBGdW5jdGlvblR5cGUoR3JvdXBGdW5jdGlvblR5cGUuVE9HR0xFKTtcclxuICAgICAgdGhpcy50b2dnbGVHcm91cENsaWNrLmVtaXQobm9kZT8uaXRlbSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cCA9IG5vZGU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGJveCBzaGFkb3cgYmFzZWQgb24gdGhlIGdyb3VwIHR5cGUgbGVnZW5kIGNvbG9yXHJcbiAgICogQHJldHVybiB7Kn1cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGdldEJveFNoYWRvdygpOiBhbnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYm94U2hhZG93OiAnMHB4IDFweCAwcHggMHB4ICNjOWNiZDAgaW5zZXQnLFxyXG4gICAgfTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgZGF0YVNvdXJjZSB3aXRoIHBhcmVudCBncm91cHMgZGF0YVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHNldEdyb3VwRGF0YVNvdXJjZSgpOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5kYXRhU291cmNlICYmXHJcbiAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpID09PSBHcm91cEZ1bmN0aW9uVHlwZS5DUkVBVEVcclxuICAgICkge1xyXG4gICAgICB0aGlzLnBhcmVudEdyb3Vwc0luZm8/LmZvckVhY2goKHBhcmVudEdyb3VwTm9kZSkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZT8uZGF0YT8uZmluZEluZGV4KFxyXG4gICAgICAgICAgICAobm9kZSkgPT4gbm9kZT8uaXRlbT8uZ3JvdXBJZCA9PT0gcGFyZW50R3JvdXBOb2RlPy5ncm91cElkXHJcbiAgICAgICAgICApID09PSAtMVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29uc3QgbmV3R3JvdXBOb2RlID0gbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgICAgcGFyZW50R3JvdXBOb2RlLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICB0aGlzLmRhdGFiYXNlLmlzRXhwYW5kYWJsZShwYXJlbnRHcm91cE5vZGUpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3QgZ3JvdXBOb2Rlc1JlZmVyZW5jZSA9IHRoaXMuZGF0YVNvdXJjZT8uZGF0YTtcclxuICAgICAgICAgIGdyb3VwTm9kZXNSZWZlcmVuY2U/LnB1c2gobmV3R3JvdXBOb2RlKTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZ3JvdXBOb2Rlc1JlZmVyZW5jZTtcclxuICAgICAgICAgIHRoaXMuc29ydFBhcmVudEdyb3Vwc0FscGhhYmV0aWNhbGx5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpID09PSBHcm91cEZ1bmN0aW9uVHlwZS5FRElUXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5lZGl0R3JvdXAodGhpcy5wYXJlbnRHcm91cHNJbmZvKTtcclxuICAgICAgdGhpcy5zb3J0UGFyZW50R3JvdXBzQWxwaGFiZXRpY2FsbHkoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudHJlZUNvbnRyb2wgPSBuZXcgRmxhdFRyZWVDb250cm9sPEdyb3VwTm9kZT4oXHJcbiAgICAgICAgdGhpcy5nZXRMZXZlbCxcclxuICAgICAgICB0aGlzLmlzRXhwYW5kYWJsZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgR3JvdXBzRGF0YVNvdXJjZSh0aGlzLnRyZWVDb250cm9sLCB0aGlzLmRhdGFiYXNlKTtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGFiYXNlPy5pbml0aWFsRGF0YSh0aGlzLnBhcmVudEdyb3Vwc0luZm8pO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSB1cGRhdGVkIG5vZGUgaW5mb3JtYXRpb25cclxuICAgKiBAcGFyYW0ge0dyb3VwSW5mb1tdfSBncm91cHNJbmZvXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgZWRpdEdyb3VwKGdyb3Vwc0luZm86IEdyb3VwSW5mb1tdKSB7XHJcbiAgICBjb25zdCBncm91cE5vZGVSZWZlcmVuY2UgPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE7XHJcbiAgICBjb25zdCBlZGl0ZWROb2RlID0gZ3JvdXBzSW5mbz8uZmluZChcclxuICAgICAgKG5vZGUpID0+XHJcbiAgICAgICAgbm9kZT8uZ3JvdXBJZCA9PT0gdGhpcy5lZGl0R3JvdXBBbmRQYXJlbnRHcm91cEluZm8/Lmdyb3VwSW5mbz8uZ3JvdXBJZFxyXG4gICAgKTtcclxuICAgIGdyb3VwTm9kZVJlZmVyZW5jZT8uZm9yRWFjaCgobm9kZSkgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgbm9kZT8uaXRlbT8uZ3JvdXBJZCA9PT1cclxuICAgICAgICB0aGlzLmVkaXRHcm91cEFuZFBhcmVudEdyb3VwSW5mbz8uZ3JvdXBJbmZvPy5ncm91cElkXHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnN0IG5vT2ZDaGlsZHJlblJlZmVyZW5jZSA9IG5vZGUuaXRlbS5ub09mQ2hpbGRyZW47XHJcbiAgICAgICAgbm9kZS5pdGVtID0gZWRpdGVkTm9kZSBhcyBHcm91cEluZm87XHJcbiAgICAgICAgbm9kZS5pdGVtLm5vT2ZDaGlsZHJlbiA9IG5vT2ZDaGlsZHJlblJlZmVyZW5jZTtcclxuICAgICAgICBub2RlLmV4cGFuZGFibGUgPSB0aGlzLmRhdGFiYXNlLmlzRXhwYW5kYWJsZShub2RlPy5pdGVtKTtcclxuICAgICAgICBpZiAobm9kZS5pdGVtLmhhc0NoaWxkcmVuICYmIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSkge1xyXG4gICAgICAgICAgdGhpcy50cmVlQ29udHJvbC50b2dnbGUobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZ3JvdXBOb2RlUmVmZXJlbmNlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBMb2FkcyB0aGUgY2hpbGQgZ3JvdXBzIGFuZCB1cGRhdGVzIHRoZSB0cmVlIHZpZXcuXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgbG9hZENoaWxkR3JvdXBzKCkge1xyXG4gICAgdGhpcy5kYXRhYmFzZT8uc2V0Q2hpbGRHcm91cHNJbmZvKHRoaXMuY2hpbGRHcm91cHNJbmZvKTtcclxuICAgIGNvbnN0IGdyb3VwTm9kZXNSZWZlcmVuY2UgPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpID09PSBHcm91cEZ1bmN0aW9uVHlwZS5DUkVBVEVcclxuICAgICkge1xyXG4gICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRHcm91cD8uaXRlbT8uaGFzQ2hpbGRyZW4pIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXAuaXRlbS5oYXNDaGlsZHJlbiA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBQYXJlbnROb2RlID0gbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cC5pdGVtLFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwLmxldmVsLFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZ3JvdXBOb2Rlc1JlZmVyZW5jZS5zcGxpY2UoXHJcbiAgICAgICAgICBncm91cE5vZGVzUmVmZXJlbmNlLmluZGV4T2YodGhpcy5zZWxlY3RlZEdyb3VwKSxcclxuICAgICAgICAgIDEsXHJcbiAgICAgICAgICBncm91cFBhcmVudE5vZGVcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKGdyb3VwUGFyZW50Tm9kZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0aGlzLnNlbGVjdGVkR3JvdXApKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmRhdGFiYXNlLmdldENoaWxkR3JvdXBzSW5mbygpO1xyXG4gICAgICAgIGNoaWxkcmVuPy5mb3JFYWNoKChncm91cE5vZGUpID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlPy5kYXRhPy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgKG5vZGUpID0+IG5vZGU/Lml0ZW0/Lmdyb3VwSWQgPT09IGdyb3VwTm9kZT8uZ3JvdXBJZFxyXG4gICAgICAgICAgICApID09PSAtMVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0dyb3VwTm9kZSA9IG5ldyBHcm91cE5vZGUoXHJcbiAgICAgICAgICAgICAgZ3JvdXBOb2RlLFxyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cD8ubGV2ZWwgKyAxLFxyXG4gICAgICAgICAgICAgIHRoaXMuZGF0YWJhc2U/LmlzRXhwYW5kYWJsZShncm91cE5vZGUpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwTm9kZXNSZWZlcmVuY2UgPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE7XHJcbiAgICAgICAgICAgIGdyb3VwTm9kZXNSZWZlcmVuY2UuZm9yRWFjaCgobm9kZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChub2RlLml0ZW0uZ3JvdXBJZCA9PT0gdGhpcy5zZWxlY3RlZEdyb3VwLml0ZW0uZ3JvdXBJZCkge1xyXG4gICAgICAgICAgICAgICAgbm9kZS5pdGVtLm5vT2ZDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBncm91cE5vZGVzUmVmZXJlbmNlLnNwbGljZShcclxuICAgICAgICAgICAgICBncm91cE5vZGVzUmVmZXJlbmNlLmluZGV4T2YodGhpcy5zZWxlY3RlZEdyb3VwKSArIDEsXHJcbiAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICBuZXdHcm91cE5vZGVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBncm91cE5vZGVzUmVmZXJlbmNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBJbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChcclxuICAgICAgICAobm9kZSkgPT4gbm9kZS5pdGVtLmdyb3VwSWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cD8uaXRlbS5ncm91cElkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc29ydENoaWxkR3JvdXBzQWxwaGFiZXRpY2FsbHkoXHJcbiAgICAgICAgc2VsZWN0ZWRHcm91cEluZGV4ICsgMSxcclxuICAgICAgICB0aGlzLmdldE5leHRHcm91cChzZWxlY3RlZEdyb3VwSW5kZXgsIHRoaXMuZGF0YVNvdXJjZS5kYXRhKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgPT09IEdyb3VwRnVuY3Rpb25UeXBlLkVESVRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmVkaXRHcm91cCh0aGlzLmNoaWxkR3JvdXBzSW5mbyk7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkUGFyZW50R3JvdXBJbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChcclxuICAgICAgICAobm9kZSkgPT4gbm9kZS5pdGVtLmdyb3VwSWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cD8uaXRlbS5ncm91cFBhcmVudElkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc29ydENoaWxkR3JvdXBzQWxwaGFiZXRpY2FsbHkoXHJcbiAgICAgICAgc2VsZWN0ZWRQYXJlbnRHcm91cEluZGV4ICsgMSxcclxuICAgICAgICB0aGlzLmdldE5leHRHcm91cChzZWxlY3RlZFBhcmVudEdyb3VwSW5kZXgsIHRoaXMuZGF0YVNvdXJjZS5kYXRhKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgPT09IEdyb3VwRnVuY3Rpb25UeXBlLlRPR0dMRVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMudHJlZUNvbnRyb2w/LnRvZ2dsZSh0aGlzLnNlbGVjdGVkR3JvdXApO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBEZWxldGVzIHRoZSBzZWxlY3RlZCBncm91cCBhbmQgdXBkYXRlcyB0aGUgdHJlZSB2aWV3LlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkZWxldGVkR3JvdXBJZFxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGRlbGV0ZUdyb3VwTm9kZShkZWxldGVkR3JvdXBJZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50cmVlQ29udHJvbCAmJiBkZWxldGVkR3JvdXBJZCkge1xyXG4gICAgICBjb25zdCBkZWxldGVkR3JvdXBJbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChcclxuICAgICAgICAobm9kZSkgPT4gbm9kZS5pdGVtLmdyb3VwSWQgPT09IGRlbGV0ZWRHcm91cElkXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGRlbGV0ZWRHcm91cCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmF0KGRlbGV0ZWRHcm91cEluZGV4KTtcclxuICAgICAgY29uc3QgZGF0YVNvdXJjZVJlZmVyZW5jZSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhO1xyXG4gICAgICBpZiAoZGVsZXRlZEdyb3VwSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgaWYgKGRlbGV0ZWRHcm91cD8uaXRlbS5ncm91cFBhcmVudElkICE9PSBudWxsKSB7XHJcbiAgICAgICAgICBjb25zdCBkZWxldGVkUGFyZW50R3JvdXBJbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChcclxuICAgICAgICAgICAgKG5vZGUpID0+IG5vZGUuaXRlbS5ncm91cElkID09PSBkZWxldGVkR3JvdXA/Lml0ZW0uZ3JvdXBQYXJlbnRJZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChkZWxldGVkUGFyZW50R3JvdXBJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgY29uc3QgZGVsZXRlZFBhcmVudEdyb3VwID0gdGhpcy5kYXRhU291cmNlLmRhdGEuYXQoXHJcbiAgICAgICAgICAgICAgZGVsZXRlZFBhcmVudEdyb3VwSW5kZXhcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGRlbGV0ZWRQYXJlbnRHcm91cCAmJiBkZWxldGVkUGFyZW50R3JvdXAuaXRlbS5ub09mQ2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICBkZWxldGVkUGFyZW50R3JvdXAuaXRlbS5ub09mQ2hpbGRyZW4gPVxyXG4gICAgICAgICAgICAgICAgZGVsZXRlZFBhcmVudEdyb3VwLml0ZW0ubm9PZkNoaWxkcmVuIC0gMTtcclxuICAgICAgICAgICAgICBpZiAoZGVsZXRlZFBhcmVudEdyb3VwLml0ZW0ubm9PZkNoaWxkcmVuID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGVkUGFyZW50R3JvdXAuaXRlbS5oYXNDaGlsZHJlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Tm9kZSA9IG5ldyBHcm91cE5vZGUoXHJcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZWRQYXJlbnRHcm91cC5pdGVtLFxyXG4gICAgICAgICAgICAgICAgICBkZWxldGVkUGFyZW50R3JvdXAubGV2ZWwsXHJcbiAgICAgICAgICAgICAgICAgIGZhbHNlXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5zcGxpY2UoZGVsZXRlZEdyb3VwSW5kZXggLSAxLCAyLCBuZXdOb2RlKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5zcGxpY2UoZGVsZXRlZEdyb3VwSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5zcGxpY2UoZGVsZXRlZEdyb3VwSW5kZXgsIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnNwbGljZShkZWxldGVkR3JvdXBJbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YVNvdXJjZVJlZmVyZW5jZTtcclxuICAgICAgdGhpcy5kZWxldGVkR3JvdXBJZCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgbmV4dCBncm91cCBhdCB0aGUgc2FtZSBsZXZlbC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gc2VsZWN0ZWRHcm91cEluZGV4XHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGVbXX0gZGF0YVNvdXJjZVxyXG4gICAqIEByZXR1cm4geyp9ICB7bnVtYmVyfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldE5leHRHcm91cChzZWxlY3RlZEdyb3VwSW5kZXg6IG51bWJlciwgZGF0YVNvdXJjZTogR3JvdXBOb2RlW10pOiBudW1iZXIge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cEFjcm9ueW0gPVxyXG4gICAgICBkYXRhU291cmNlW3NlbGVjdGVkR3JvdXBJbmRleF0uaXRlbS5ncm91cEFjcm9ueW07XHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChpbmRleCA9IHNlbGVjdGVkR3JvdXBJbmRleCArIDE7IGluZGV4IDwgZGF0YVNvdXJjZS5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgaWYgKGRhdGFTb3VyY2VbaW5kZXhdLml0ZW0uZ3JvdXBBY3JvbnltPy5pbmNsdWRlcyhzZWxlY3RlZEdyb3VwQWNyb255bSkpIHtcclxuICAgICAgICBpZiAoZGF0YVNvdXJjZVtzZWxlY3RlZEdyb3VwSW5kZXhdLmxldmVsID09PSAwKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2Vbc2VsZWN0ZWRHcm91cEluZGV4XS5sZXZlbCA9PT0gZGF0YVNvdXJjZVtpbmRleF0ubGV2ZWxcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBpbmRleDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU29ydCB0aGUgZ3JvdXBzIGFscGhhYmV0aWNhbGx5IGZyb20gZ2l2ZW4gc3RhcnQgaW5kZXggdG8gZW5kIGluZGV4LlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydEluZGV4XHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZEluZGV4XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgc29ydENoaWxkR3JvdXBzQWxwaGFiZXRpY2FsbHkoc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCBkYXRhU291cmNlID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XHJcbiAgICBkYXRhU291cmNlLnNwbGljZShcclxuICAgICAgc3RhcnRJbmRleCxcclxuICAgICAgZW5kSW5kZXggLSBzdGFydEluZGV4LFxyXG4gICAgICAuLi50aGlzLmdyb3Vwc1NvcnRpbmcodGhpcy5kYXRhU291cmNlLmRhdGEuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpKVxyXG4gICAgKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YVNvdXJjZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU29ydCB0aGUgcm9vdCBsZXZlbCBwYXJlbnQgZ3JvdXBzIGFscGhhYmV0aWNhbGx5LlxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHNvcnRQYXJlbnRHcm91cHNBbHBoYWJldGljYWxseSgpOiB2b2lkIHtcclxuICAgIGxldCBkYXRhU291cmNlID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XHJcbiAgICBmb3IgKFxyXG4gICAgICBsZXQgZ3JvdXBBID0gMDtcclxuICAgICAgZ3JvdXBBIDwgZGF0YVNvdXJjZS5sZW5ndGg7XHJcbiAgICAgIGdyb3VwQSA9IHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSlcclxuICAgICkge1xyXG4gICAgICBsZXQgbG93ZXN0R3JvdXAgPSBncm91cEE7XHJcbiAgICAgIGZvciAoXHJcbiAgICAgICAgbGV0IGdyb3VwQiA9IHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgZ3JvdXBCIDwgZGF0YVNvdXJjZS5sZW5ndGg7XHJcbiAgICAgICAgZ3JvdXBCID0gdGhpcy5nZXROZXh0R3JvdXAoZ3JvdXBCLCBkYXRhU291cmNlKVxyXG4gICAgICApIHtcclxuICAgICAgICBsb3dlc3RHcm91cCA9XHJcbiAgICAgICAgICB0aGlzLmdyb3Vwc1NvcnRpbmcoW1xyXG4gICAgICAgICAgICBkYXRhU291cmNlW2dyb3VwQl0sXHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2VbbG93ZXN0R3JvdXBdLFxyXG4gICAgICAgICAgXSlbMF0gPT09IGRhdGFTb3VyY2VbZ3JvdXBCXVxyXG4gICAgICAgICAgICA/IGdyb3VwQlxyXG4gICAgICAgICAgICA6IGxvd2VzdEdyb3VwO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChsb3dlc3RHcm91cCAhPT0gZ3JvdXBBKSB7XHJcbiAgICAgICAgY29uc3QgbGVmdEdyb3VwID0gZGF0YVNvdXJjZS5zbGljZShcclxuICAgICAgICAgIGdyb3VwQSxcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHJpZ2h0R3JvdXAgPSBkYXRhU291cmNlLnNsaWNlKFxyXG4gICAgICAgICAgbG93ZXN0R3JvdXAsXHJcbiAgICAgICAgICB0aGlzLmdldE5leHRHcm91cChsb3dlc3RHcm91cCwgZGF0YVNvdXJjZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2VSZWZlcmVuY2UgPSBkYXRhU291cmNlLnNsaWNlKDAsIGdyb3VwQSk7XHJcbiAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5wdXNoKC4uLnJpZ2h0R3JvdXApO1xyXG4gICAgICAgIGRhdGFTb3VyY2VSZWZlcmVuY2UucHVzaChcclxuICAgICAgICAgIC4uLmRhdGFTb3VyY2Uuc2xpY2UoXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSksXHJcbiAgICAgICAgICAgIGxvd2VzdEdyb3VwXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnB1c2goLi4ubGVmdEdyb3VwKTtcclxuICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnB1c2goXHJcbiAgICAgICAgICAuLi5kYXRhU291cmNlLnNsaWNlKFxyXG4gICAgICAgICAgICB0aGlzLmdldE5leHRHcm91cChsb3dlc3RHcm91cCwgZGF0YVNvdXJjZSksXHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UubGVuZ3RoXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICBkYXRhU291cmNlID0gZGF0YVNvdXJjZVJlZmVyZW5jZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhU291cmNlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBVdGlsaXR5IG1ldGhvZCB0byBzb3J0IGdyb3VwcyBieSBncm91cCBhY3JvbnltIGluIGFzY2VuZGluZyBvcmRlci5cclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZVtdfSBncm91cHNcclxuICAgKiBAcmV0dXJuIHsqfSAge0dyb3VwTm9kZVtdfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdyb3Vwc1NvcnRpbmcoZ3JvdXBzOiBHcm91cE5vZGVbXSk6IEdyb3VwTm9kZVtdIHtcclxuICAgIHJldHVybiBncm91cHMuc29ydCgoZ3JvdXBBOiBHcm91cE5vZGUsIGdyb3VwQjogR3JvdXBOb2RlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxvd2VyR3JvdXBBID0gZ3JvdXBBLml0ZW0uZ3JvdXBBY3JvbnltLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGNvbnN0IGxvd2VyR3JvdXBCID0gZ3JvdXBCLml0ZW0uZ3JvdXBBY3JvbnltLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGlmIChsb3dlckdyb3VwQSA8IGxvd2VyR3JvdXBCKSByZXR1cm4gLTE7XHJcbiAgICAgIGVsc2UgaWYgKGxvd2VyR3JvdXBBID4gbG93ZXJHcm91cEIpIHJldHVybiAxO1xyXG4gICAgICBlbHNlIGlmIChsb3dlckdyb3VwQSA9PT0gbG93ZXJHcm91cEIpIHtcclxuICAgICAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgICAgIHdoaWxlIChpbmRleCA8IGdyb3VwQT8uaXRlbT8uZ3JvdXBBY3JvbnltPy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChncm91cEEuaXRlbS5ncm91cEFjcm9ueW1baW5kZXhdIDwgZ3JvdXBCLml0ZW0uZ3JvdXBBY3JvbnltW2luZGV4XSlcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICBlbHNlIGlmIChcclxuICAgICAgICAgICAgZ3JvdXBBLml0ZW0uZ3JvdXBBY3JvbnltW2luZGV4XSA+IGdyb3VwQi5pdGVtLmdyb3VwQWNyb255bVtpbmRleF1cclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgaW5kZXgrKztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2VsZWN0ZWQgbWVudSBncm91cCBhY3Rpb25cclxuICAgKiBAcGFyYW0ge01lbnV9IG1lbnVcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBvbkdyb3VwQWN0aW9uc0NsaWNrKG1lbnU6IE1lbnUgfCBJY29uQnV0dG9uKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24gPSBtZW51O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDaGFuZ2VzIHRoZSBleHBhbmQvY29sbGFwc2UgaWNvbiBiYXNlZCBvbiB0aGUgdG9nZ2xlXHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IGdyb3VwXHJcbiAgICogQHJldHVybiB7Kn0gIHsqfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldFRvZ2dsZUJ1dHRvbkluZm8oZ3JvdXA6IEdyb3VwTm9kZSk6IEljb25CdXR0b24ge1xyXG4gICAgaWYgKHRoaXMudHJlZUNvbnRyb2w/LmlzRXhwYW5kZWQoZ3JvdXApKSByZXR1cm4gdGhpcy5taW51c0NpcmNsZUljb25CdXR0b247XHJcbiAgICByZXR1cm4gdGhpcy5wbHVzQ2lyY2xlSWNvbkJ1dHRvbjtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyB0aGUgZW1pdHRlZCBncm91cCBhY3Rpb25zIGV2ZW50XHJcbiAgICogQHBhcmFtIHtHcm91cEluZm99IGdyb3VwXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgaGFuZGxlR3JvdXBBY3Rpb25zKGdyb3VwOiBHcm91cE5vZGUpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24/LmlkID09PSBHcm91cEFjdGlvbi5WSUVXX1JPU1RFUikge1xyXG4gICAgICB0aGlzLnZpZXdSb3N0ZXJDbGljay5lbWl0KGdyb3VwPy5pdGVtKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEdyb3VwQWN0aW9uPy5pZCA9PT0gR3JvdXBBY3Rpb24uQ1JFQVRFX1NVQl9HUk9VUCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXAgPSBncm91cDtcclxuICAgICAgdGhpcy5jcmVhdGVHcm91cENsaWNrLmVtaXQoZ3JvdXA/Lml0ZW0pO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24/LmlkID09PSBHcm91cEFjdGlvbi5FRElUX0dST1VQKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cCA9IGdyb3VwO1xyXG4gICAgICBjb25zdCBlZGl0R3JvdXBQYXJlbnRJbmZvID0gdGhpcy5kYXRhU291cmNlPy5kYXRhPy5maWx0ZXIoXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAoaXRlbTogYW55KSA9PiBpdGVtPy5pdGVtPy5ncm91cElkID09PSBncm91cD8uaXRlbT8uZ3JvdXBQYXJlbnRJZFxyXG4gICAgICApWzBdPy5pdGVtO1xyXG4gICAgICB0aGlzLmVkaXRHcm91cEFuZFBhcmVudEdyb3VwSW5mbyA9IHtcclxuICAgICAgICBncm91cEluZm86IGdyb3VwPy5pdGVtLFxyXG4gICAgICAgIHBhcmVudEdyb3VwSW5mbzogZWRpdEdyb3VwUGFyZW50SW5mbyxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5lZGl0R3JvdXBDbGljay5lbWl0KHRoaXMuZWRpdEdyb3VwQW5kUGFyZW50R3JvdXBJbmZvKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEdyb3VwQWN0aW9uPy5pZCA9PT0gR3JvdXBBY3Rpb24uREVMRVRFX0dST1VQKSB7XHJcbiAgICAgIHRoaXMuZGVsZXRlR3JvdXBDbGljay5lbWl0KGdyb3VwPy5pdGVtKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgZmlsdGVyZWQgbWVudSBpdGVtcyBiYXNlZCBvbiBncm91cHMgaGFzQ2hpbGRyZW4uXHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IGdyb3VwXHJcbiAgICogQHJldHVybiB7TWVudVtdfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldEZpbHRlcmVkR3JvdXBBY3Rpb25zKGdyb3VwOiBHcm91cE5vZGUpOiBNZW51W10ge1xyXG4gICAgY29uc3QgZmlsdGVyZWRNZW51OiBNZW51W10gPSBbXTtcclxuICAgIGNvbnN0IGlzQWRtaW5Hcm91cFR5cGUgPSBncm91cD8uaXRlbT8uZ3JvdXBUeXBlSW5mbz8uYnVzaW5lc3NSdWxlPy5pc0FkbWluO1xyXG4gICAgY29uc3QgZ3JvdXBQZXJtaXNzaW9ucyA9IGdyb3VwPy5pdGVtPy5wZXJtaXNzaW9ucztcclxuICAgIHRoaXMubWVudUl0ZW1zPy5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgIGUuaXNUb29sVGlwTmVlZGVkID0gZmFsc2U7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAoZT8uaWQgPT09IEdyb3VwQWN0aW9uLlZJRVdfUk9TVEVSICYmXHJcbiAgICAgICAgICAoKGlzQWRtaW5Hcm91cFR5cGUgJiZcclxuICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuTUFOQUdFX1NZU1RFTV9VU0VSUyxcclxuICAgICAgICAgICAgICBncm91cFBlcm1pc3Npb25zXHJcbiAgICAgICAgICAgICkpIHx8XHJcbiAgICAgICAgICAgICghaXNBZG1pbkdyb3VwVHlwZSAmJlxyXG4gICAgICAgICAgICAgICh0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLlZJRVdfR1JPVVBfT0ZGSUNFUlMsXHJcbiAgICAgICAgICAgICAgICBncm91cFBlcm1pc3Npb25zXHJcbiAgICAgICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLk1BTkFHRV9HUk9VUF9PRkZJQ0VSUyxcclxuICAgICAgICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLlZJRVdfR1JPVVBfTUVNQkVSUyxcclxuICAgICAgICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLlZJRVdfQUxMX1JPU1RFUlNcclxuICAgICAgICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5NQU5BR0VfR1JPVVBfTUVNQkVSUyxcclxuICAgICAgICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgICAgICAgKSkpKSkgfHxcclxuICAgICAgICAoZT8uaWQgPT09IEdyb3VwQWN0aW9uLkVESVRfR1JPVVAgJiZcclxuICAgICAgICAgICFpc0FkbWluR3JvdXBUeXBlICYmXHJcbiAgICAgICAgICAodGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLkVESVRfR1JPVVAsXHJcbiAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNcclxuICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuTUFOQUdFX0FMTF9HUk9VUFNcclxuICAgICAgICAgICAgKSkpIHx8XHJcbiAgICAgICAgKGU/LmlkID09PSBHcm91cEFjdGlvbi5ERUxFVEVfR1JPVVAgJiZcclxuICAgICAgICAgICFpc0FkbWluR3JvdXBUeXBlICYmXHJcbiAgICAgICAgICAodGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLkRFTEVURV9HUk9VUCxcclxuICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5NQU5BR0VfQUxMX0dST1VQU1xyXG4gICAgICAgICAgICApKSAmJlxyXG4gICAgICAgICAgIWdyb3VwPy5pdGVtPy5oYXNDaGlsZHJlbikgfHxcclxuICAgICAgICAoZT8uaWQgPT09IEdyb3VwQWN0aW9uLkNSRUFURV9TVUJfR1JPVVAgJiZcclxuICAgICAgICAgIGdyb3VwPy5pdGVtPy5ncm91cFR5cGVJbmZvPy5idXNpbmVzc1J1bGU/LmFsbG93U3ViR3JvdXAgJiZcclxuICAgICAgICAgICh0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuQ1JFQVRFX1NVQkdST1VQLFxyXG4gICAgICAgICAgICBncm91cFBlcm1pc3Npb25zXHJcbiAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLk1BTkFHRV9BTExfR1JPVVBTXHJcbiAgICAgICAgICAgICkpICYmXHJcbiAgICAgICAgICAhaXNBZG1pbkdyb3VwVHlwZSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgZmlsdGVyZWRNZW51LnB1c2goZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZpbHRlcmVkTWVudTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVGFrZXMgdGhlIGluZGV4IGFuZCB0aGUgaWNvbiBidXR0b24gYXMgYXJndW1lbnRzIGFuZCBuZWVkcyB0byByZXR1cm4gdGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIGljb24gYnV0dG9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxyXG4gICAqIEBwYXJhbSB7SWNvbkJ1dHRvbn0gaWNvbkJ1dHRvblxyXG4gICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaWNvbkJ1dHRvbjogSWNvbkJ1dHRvbik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gaWNvbkJ1dHRvbi5pZDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogTmdPbkRlc3Ryb3kgcGVyZm9ybXMgbmVjZXNzYXJ5IGNsZWFudXAgdGFza3MsIHN1Y2ggYXMgdW5zdWJzY3JpYmluZyBmcm9tIHN1YnNjcmlwdGlvbiB3aGVuIHRoZSBjb21wb25lbnQgaXMgYmVpbmcgZGVzdHJveWVkLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNDb21wb25lbnRcclxuICAgKi9cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImllZWVzYS10cmVlXCI+XHJcbiAgPG1hdC10cmVlXHJcbiAgICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCJcclxuICAgIFt0cmVlQ29udHJvbF09XCJ0cmVlQ29udHJvbFwiXHJcbiAgICBjbGFzcz1cImllZWVzYS10cmVlX19yb290XCJcclxuICAgICNyb290U2VsZWN0b3JcclxuICAgIHJvbGU9XCJ0cmVlZ3JpZFwiXHJcbiAgPlxyXG4gICAgPG1hdC10cmVlLW5vZGVcclxuICAgICAgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGVcIlxyXG4gICAgICBtYXRUcmVlTm9kZVBhZGRpbmdcclxuICAgICAgW21hdFRyZWVOb2RlUGFkZGluZ0luZGVudF09XCJ0cmVlUGFkZGluZ0luZGVudFwiXHJcbiAgICAgIGNsYXNzPVwiaWVlZXNhLWJvZHktbWQtMTZcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJpZWVlc2EtdHJlZV9fbm9kZSB3LTEwMCBkLWZsZXhcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldEJveFNoYWRvdygpXCJcclxuICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgIG5vZGU/Lml0ZW0/Lmdyb3VwUGFyZW50SWQgJiZcclxuICAgICAgICAgIGdyb3Vwc1NlcnZpY2UuZ2V0R3JvdXBGdW5jdGlvblR5cGUoKSAhPT0gZ3JvdXBGdW5jdGlvblR5cGUuRklMVEVSICYmXHJcbiAgICAgICAgICBncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgIT09IGdyb3VwRnVuY3Rpb25UeXBlLlNFQVJDSFxyXG4gICAgICAgICAgICA/ICdpZWVlc2EtdHJlZV9fcm9vdC1ub2RlLXdoaXRlLWJnJ1xyXG4gICAgICAgICAgICA6ICdpZWVlc2EtdHJlZV9fcm9vdC1ub2RlJ1xyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgIWlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSA/ICdpZWVlc2EtdHJlZV9fY29sbGFwc2UtaWNvbicgOiAnJ1xyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXHJcbiAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgIGllZWVzYUdyb3VwTm9kZU91dGxldDtcclxuICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IG5vZGUgfVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtdHJlZS1ub2RlPlxyXG4gICAgPG1hdC10cmVlLW5vZGVcclxuICAgICAgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGU7IHdoZW46IGhhc0NoaWxkR3JvdXBzXCJcclxuICAgICAgbWF0VHJlZU5vZGVQYWRkaW5nXHJcbiAgICAgIFttYXRUcmVlTm9kZVBhZGRpbmdJbmRlbnRdPVwidHJlZVBhZGRpbmdJbmRlbnRcIlxyXG4gICAgICBjbGFzcz1cImllZWVzYS1ib2R5LW1kLTE2IGllZWVzYS10cmVlX19wYXJlbnQtbm9kZS13cmFwcGVyXCJcclxuICAgID5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIltcclxuICAgICAgICAgIHRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkgPyAnaWVlZXNhLXRyZWVfX2V4cGFuZGVkJyA6ICcnLFxyXG4gICAgICAgICAgbm9kZT8uaXRlbT8uZ3JvdXBQYXJlbnRJZCAmJlxyXG4gICAgICAgICAgZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpICE9PSBncm91cEZ1bmN0aW9uVHlwZS5GSUxURVIgJiZcclxuICAgICAgICAgIGdyb3Vwc1NlcnZpY2UuZ2V0R3JvdXBGdW5jdGlvblR5cGUoKSAhPT0gZ3JvdXBGdW5jdGlvblR5cGUuU0VBUkNIXHJcbiAgICAgICAgICAgID8gJ2llZWVzYS10cmVlX19yb290LW5vZGUtd2hpdGUtYmcnXHJcbiAgICAgICAgICAgIDogJ2llZWVzYS10cmVlX19yb290LW5vZGUnXHJcbiAgICAgICAgXVwiXHJcbiAgICAgICAgY2xhc3M9XCJpZWVlc2EtdHJlZV9fbm9kZSB3LTEwMCBkLWZsZXhcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldEJveFNoYWRvdygpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgcm9sZT1cImdyaWRjZWxsXCI+XHJcbiAgICAgICAgICA8aWVlZXNhLWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiIWlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZVwiXHJcbiAgICAgICAgICAgIChpY29uQnV0dG9uQ2xpY2spPVwidmlld0NoaWxkR3JvdXBzKG5vZGUpXCJcclxuICAgICAgICAgICAgW2ljb25CdXR0b25dPVwiZ2V0VG9nZ2xlQnV0dG9uSW5mbyhub2RlKVwiXHJcbiAgICAgICAgICA+PC9pZWVlc2EtaWNvbi1idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgaWVlZXNhR3JvdXBOb2RlT3V0bGV0O1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSB9XHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC10cmVlLW5vZGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2llZWVzYUdyb3VwTm9kZU91dGxldCBsZXQtbm9kZT5cclxuICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaWVlZXNhR3JvdXBJbmZvT3V0bGV0OyBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSB9XCJcclxuICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJkLWZsZXggZC1ub25lIGdhcC0zIGQtc20tZmxleCBkLW1kLWZsZXggZC1sZy1mbGV4IGllZWVzYS10cmVlX19ncm91cC1hY3Rpb25zXCJcclxuICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgaWVlZXNhR3JvdXBBY3Rpb25zT3V0bGV0O1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSB9XHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxpZWVlc2EtbWVudVxyXG4gICAgICAgIFtidXR0b25dPVwiY29uc3RhbnRzPy52aWV3R3JvdXBzPy5ncm91cEFjdGlvbnNNZW51XCJcclxuICAgICAgICBbbWVudUl0ZW1zXT1cImdldEZpbHRlcmVkR3JvdXBBY3Rpb25zKG5vZGUpXCJcclxuICAgICAgICAobWVudUl0ZW1DbGljayk9XCJvbkdyb3VwQWN0aW9uc0NsaWNrKCRldmVudCk7IGhhbmRsZUdyb3VwQWN0aW9ucyhub2RlKVwiXHJcbiAgICAgICAgY2xhc3M9XCJkLWxnLW5vbmUgZC1tZC1ub25lIGQtc20tbm9uZVwiXHJcbiAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcclxuICAgICAgPjwvaWVlZXNhLW1lbnU+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNpZWVlc2FHcm91cEluZm9PdXRsZXQgbGV0LW5vZGU+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpZWVlc2EtdHJlZV9fZ3JvdXAtaW5mby13cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImllZWVzYS10cmVlX19ncm91cC1pbmZvIGQtZmxleCBhbGlnbi1pdGVtcy1iYXNlbGluZVwiPlxyXG4gICAgICAgICAgPHBcclxuICAgICAgICAgICAgY2xhc3M9XCJpZWVlc2EtdHJlZV9fbm9kZS1ncm91cC1uYW1lIGllZWVzYS10aXRsZS1tZC0xOFwiXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIm5vZGU/Lml0ZW0/Lmdyb3VwTmFtZVwiXHJcbiAgICAgICAgICAgIGllZWVzYVRleHRUcnVuY2F0ZWRcclxuICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcclxuICAgICAgICAgID57eyBub2RlPy5pdGVtPy5ncm91cE5hbWUgfX08L3A+XHJcbiAgICAgICAgICA8cFxyXG4gICAgICAgICAgICBjbGFzcz1cImllZWVzYS10cmVlX19ub2RlLWdyb3VwLWFjcm9ueW0gaWVlZXNhLXRpdGxlLXNtLTE2XCJcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwibm9kZT8uaXRlbT8uZ3JvdXBBY3JvbnltXCJcclxuICAgICAgICAgICAgaWVlZXNhVGV4dFRydW5jYXRlZFxyXG4gICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxyXG4gICAgICAgICAgPnt7IG5vZGU/Lml0ZW0/Lmdyb3VwQWNyb255bSB9fTwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWVlZXNhLXRyZWVfX25vZGUtZ3JvdXAtZGVzY1wiPlxyXG4gICAgICAgICAge3sgbm9kZT8uaXRlbT8uZ3JvdXBUeXBlSW5mbz8ubmFtZSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2llZWVzYUdyb3VwQWN0aW9uc091dGxldCBsZXQtbm9kZT5cclxuICAgICAgPGllZWVzYS1pY29uLWJ1dHRvblxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEZpbHRlcmVkR3JvdXBBY3Rpb25zKG5vZGUpOyB0cmFja0J5OiB0cmFja0J5Rm5cIlxyXG4gICAgICAgIFtpY29uQnV0dG9uXT1cIml0ZW1cIlxyXG4gICAgICAgIChpY29uQnV0dG9uQ2xpY2spPVwiXHJcbiAgICAgICAgICBvbkdyb3VwQWN0aW9uc0NsaWNrKCRldmVudCk7IGhhbmRsZUdyb3VwQWN0aW9ucyhub2RlKVxyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgPC9pZWVlc2EtaWNvbi1idXR0b24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvbWF0LXRyZWU+XHJcbjwvZGl2PlxyXG4iXX0=
723
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS12aWV3L3RyZWUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtdmlldy90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxNQUFNLEVBR04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxhQUFhLEVBRWIsbUJBQW1CLEVBRW5CLHNCQUFzQixFQUV2QixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sS0FBSyxTQUFTLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU0vQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFzQixNQUFNLHdCQUF3QixDQUFDO0FBRzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7OztBQUVwRTs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFDcEI7SUFDRSwwQ0FBMEM7SUFDbkMsSUFBZTtJQUN0QiwwQ0FBMEM7SUFDbkMsUUFBUSxDQUFDO0lBQ2hCLDBDQUEwQztJQUNuQyxhQUFhLEtBQUs7SUFDekIsMENBQTBDO0lBQ25DLFlBQVksS0FBSyxDQUFDLDZDQUE2Qzs7UUFOL0QsU0FBSSxHQUFKLElBQUksQ0FBVztRQUVmLFVBQUssR0FBTCxLQUFLLENBQUk7UUFFVCxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBRWxCLGNBQVMsR0FBVCxTQUFTLENBQVE7SUFDdkIsQ0FBQztDQUNMO0FBRUQ7Ozs7R0FJRztBQUVILE1BQU0sT0FBTyxNQUFNO0lBSWpCOzs7O09BSUc7SUFDSCxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsa0JBQWtCLENBQUMsS0FBa0I7UUFDbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUNEOzs7OztPQUtHO0lBQ0gsV0FBVyxDQUFDLElBQWlCO1FBQzNCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQzdCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDMUQsQ0FBQztJQUNKLENBQUM7SUFDRDs7Ozs7T0FLRztJQUNILFlBQVksQ0FBQyxJQUFlO1FBQzFCLE9BQU8sQ0FDTCxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxJQUFJLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxXQUFXLENBQ3RFLENBQUM7SUFDSixDQUFDOytHQTFDVSxNQUFNO21IQUFOLE1BQU0sY0FETyxNQUFNOzs0RkFDbkIsTUFBTTtrQkFEbEIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7O0FBNkNsQzs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxnQkFBZ0I7SUFHM0I7Ozs7T0FJRztJQUNILElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUM7SUFDaEMsQ0FBQztJQUNEOzs7T0FHRztJQUNILElBQUksSUFBSSxDQUFDLEtBQWtCO1FBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUNuQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7SUFDRSwwQ0FBMEM7SUFDbEMsV0FBdUM7SUFDL0MsMENBQTBDO0lBQ2xDLFFBQWdCLENBQUMsNkNBQTZDOztRQUY5RCxnQkFBVyxHQUFYLFdBQVcsQ0FBNEI7UUFFdkMsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQXZCMUIsYUFBUSxHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO1FBQ3BELGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBYyxFQUFFLENBQUMsQ0FBQztJQXVCL0MsQ0FBQztJQUVKOzs7OztPQUtHO0lBQ0gsT0FBTyxDQUFDLGdCQUFrQztRQUN4QyxJQUFJLENBQUMsV0FBVyxFQUFFLGNBQWMsRUFBRSxPQUFPO2FBQ3RDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3BCLElBQ0csTUFBcUMsQ0FBQyxLQUFLO2dCQUMzQyxNQUFxQyxDQUFDLE9BQU8sRUFDOUM7Z0JBQ0EsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQW9DLENBQUMsQ0FBQzthQUM5RDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsT0FBTyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQzlELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ3JCLENBQUM7SUFDSixDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILHNJQUFzSTtJQUN0SSxVQUFVLENBQUMsZ0JBQWtDO1FBQzNDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxpQkFBaUIsQ0FBQyxNQUFrQztRQUNsRCxJQUFJLE1BQU0sRUFBRSxLQUFLLEVBQUU7WUFDakIsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDOUQ7UUFDRCxJQUFJLE1BQU0sRUFBRSxPQUFPLEVBQUU7WUFDbkIsTUFBTSxDQUFDLE9BQU87aUJBQ1gsS0FBSyxFQUFFO2lCQUNQLE9BQU8sRUFBRTtpQkFDVCxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDcEQ7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsVUFBVSxDQUFDLFdBQXNCLEVBQUUsTUFBZTtRQUNoRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLGtCQUFrQixFQUFFLENBQUM7UUFDckQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQzFCLGlEQUFpRDtZQUNqRCxPQUFPO1NBQ1I7UUFFRCxJQUFJLE1BQU0sRUFBRTtZQUNWLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDaEQsTUFBTSxLQUFLLEdBQUcsUUFBUSxFQUFFLEdBQUcsQ0FDekIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNQLElBQUksU0FBUyxDQUNYLElBQUksRUFDSixXQUFXLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFDdEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQ2xDLENBQ0osQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7U0FDM0M7YUFBTTtZQUNMLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNkLEtBQ0UsSUFBSSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsRUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLFdBQVcsRUFBRSxLQUFLLEVBQ2pFLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLG9DQUFvQztjQUNqRCxHQUFFO1lBQ0osSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNyQztRQUVELG9CQUFvQjtRQUNwQixJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUNGO0FBQ0Q7Ozs7O0dBS0c7QUFrQkgsTUFBTSxPQUFPLGlCQUFpQjtJQXNCNUIsSUFDSSxnQkFBZ0IsQ0FBQyxLQUFrQjtRQUNyQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLEtBQUs7WUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUNJLGVBQWUsQ0FBQyxLQUFrQjtRQUNwQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUNELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQ0ksMkJBQTJCLENBQUMsS0FBYztRQUM1QyxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO0lBQ3JDLENBQUM7SUFDRCxJQUFJLDJCQUEyQjtRQUM3QixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFDSSxrQkFBa0IsQ0FBQyxFQUFzQjtRQUMzQyxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsSUFBSSxrQkFBa0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFZRCwwQ0FBMEM7SUFDMUM7SUFDRSwwQ0FBMEM7SUFDbkMsUUFBZ0I7SUFDdkIsMENBQTBDO0lBQ25DLFVBQXNCO0lBQzdCLDBDQUEwQztJQUNuQyxhQUE0QjtJQUNuQywwQ0FBMEM7SUFDbEMseUJBQW9EO1FBTnJELGFBQVEsR0FBUixRQUFRLENBQVE7UUFFaEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUV0QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUUzQiw4QkFBeUIsR0FBekIseUJBQXlCLENBQTJCO1FBM0U5RCw4REFBOEQ7UUFDOUQsY0FBUyxHQUFRLFNBQVMsQ0FBQztRQUMzQixZQUFPLEdBQVcsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDO1FBQ3RELHNCQUFpQixHQUFXLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixDQUFDO1FBSzFFLGFBQVEsR0FBcUIsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUVwRCx5QkFBb0IsR0FBZSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25ELDBCQUFxQixHQUFlLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFcEQsbUJBQWMsR0FBRyxjQUFjLENBQUM7UUFFaEMsY0FBUyxHQUFXLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUN0QyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ0osQ0FBQyxDQUFDLEVBQUUsS0FBSyxXQUFXLEVBQUUsaUJBQWlCO1lBQ3ZDLENBQUMsQ0FBQyxFQUFFLEtBQUssV0FBVyxFQUFFLG1CQUFtQixDQUM1QyxDQUFDO1FBbUJNLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQW9CNUIscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztRQUNqRCxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO1FBQ2pELG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQTBCLENBQUM7UUFDNUQscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztRQUNqRCxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFhLENBQUM7UUFDaEQsNEJBQXVCLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztRQUNsRSxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixzQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQXVDdEM7Ozs7V0FJRztRQUNILGFBQVEsR0FBRyxDQUFDLElBQWUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztRQUU1Qzs7OztXQUlHO1FBQ0gsaUJBQVksR0FBRyxDQUFDLElBQWUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQztRQUVyRDs7Ozs7O1dBTUc7UUFDSCxtQkFBYyxHQUFHLENBQUMsS0FBYSxFQUFFLFNBQW9CLEVBQUUsRUFBRSxDQUN2RCxTQUFTLENBQUMsVUFBVSxDQUFDO1FBakRyQixJQUFJLENBQUMseUJBQXlCO2FBQzNCLGFBQWEsRUFBRTthQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCLFNBQVMsQ0FBQyxDQUFDLE1BQTRCLEVBQUUsRUFBRTtZQUMxQyxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sRUFBRSxPQUFPLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsUUFBUTtRQUNOLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFDRDs7O09BR0c7SUFDSCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVO1lBQ3pCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDL0IsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLE1BQU0sYUFBYSxHQUNqQixJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3RFLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNyRSxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUF3QkQ7Ozs7T0FJRztJQUNILGVBQWUsQ0FBQyxJQUFlO1FBQzdCLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUM1QixPQUFPO1NBQ1I7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RDLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2hDO2FBQU07WUFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCw4REFBOEQ7SUFDOUQsWUFBWTtRQUNWLE9BQU87WUFDTCxTQUFTLEVBQUUsK0JBQStCO1NBQzNDLENBQUM7SUFDSixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsa0JBQWtCO1FBQ2hCLElBQ0UsSUFBSSxDQUFDLFVBQVU7WUFDZixJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixFQUFFLEtBQUssaUJBQWlCLENBQUMsTUFBTSxFQUN0RTtZQUNBLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRTtnQkFDakQsSUFDRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLENBQzlCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sS0FBSyxlQUFlLEVBQUUsT0FBTyxDQUMzRCxLQUFLLENBQUMsQ0FBQyxFQUNSO29CQUNBLE1BQU0sWUFBWSxHQUFHLElBQUksU0FBUyxDQUNoQyxlQUFlLEVBQ2YsQ0FBQyxFQUNELElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUM1QyxDQUFDO29CQUNGLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUM7b0JBQ2xELG1CQUFtQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUM7b0JBQzNDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO2lCQUN2QztZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7YUFBTSxJQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxpQkFBaUIsQ0FBQyxJQUFJLEVBQ3BFO1lBQ0EsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztTQUN2QzthQUFNO1lBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLGVBQWUsQ0FDcEMsSUFBSSxDQUFDLFFBQVEsRUFDYixJQUFJLENBQUMsWUFBWSxDQUNsQixDQUFDO1lBQ0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQzFFO0lBQ0gsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxTQUFTLENBQUMsVUFBdUI7UUFDL0IsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQztRQUNqRCxNQUFNLFVBQVUsR0FBRyxVQUFVLEVBQUUsSUFBSSxDQUNqQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ1AsSUFBSSxFQUFFLE9BQU8sS0FBSyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FDekUsQ0FBQztRQUNGLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25DLElBQ0UsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPO2dCQUNuQixJQUFJLENBQUMsMkJBQTJCLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFDcEQ7Z0JBQ0EsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztnQkFDckQsSUFBSSxDQUFDLElBQUksR0FBRyxVQUF1QixDQUFDO2dCQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxxQkFBcUIsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3pELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQzlELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUMvQjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQztJQUM1QyxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsZUFBZTtRQUNiLElBQUksQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUM7UUFDbEQsSUFDRSxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixFQUFFLEtBQUssaUJBQWlCLENBQUMsTUFBTSxFQUN0RTtZQUNBLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQzNDLE1BQU0sZUFBZSxHQUFHLElBQUksU0FBUyxDQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQ3hCLElBQUksQ0FDTCxDQUFDO2dCQUNGLG1CQUFtQixDQUFDLE1BQU0sQ0FDeEIsbUJBQW1CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDL0MsQ0FBQyxFQUNELGVBQWUsQ0FDaEIsQ0FBQztnQkFDRixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUMxQztZQUNELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUNuRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQ3BELFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtvQkFDOUIsSUFDRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLENBQzlCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sS0FBSyxTQUFTLEVBQUUsT0FBTyxDQUNyRCxLQUFLLENBQUMsQ0FBQyxFQUNSO3dCQUNBLE1BQU0sWUFBWSxHQUFHLElBQUksU0FBUyxDQUNoQyxTQUFTLEVBQ1QsSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUM3QixJQUFJLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FDdkMsQ0FBQzt3QkFDRixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDO3dCQUNsRCxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTs0QkFDbkMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0NBQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7NkJBQzFDO3dCQUNILENBQUMsQ0FBQyxDQUFDO3dCQUNILG1CQUFtQixDQUFDLE1BQU0sQ0FDeEIsbUJBQW1CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQ25ELENBQUMsRUFDRCxZQUFZLENBQ2IsQ0FBQzt3QkFDRixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxtQkFBbUIsQ0FBQztxQkFDNUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtZQUNELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUN2RCxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUNqRSxDQUFDO1lBQ0YsSUFBSSxDQUFDLDZCQUE2QixDQUNoQyxrQkFBa0IsR0FBRyxDQUFDLEVBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FDNUQsQ0FBQztTQUNIO2FBQU0sSUFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixFQUFFLEtBQUssaUJBQWlCLENBQUMsSUFBSSxFQUNwRTtZQUNBLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUM3RCxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUN2RSxDQUFDO1lBQ0YsSUFBSSxDQUFDLDZCQUE2QixDQUNoQyx3QkFBd0IsR0FBRyxDQUFDLEVBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FDbEUsQ0FBQztTQUNIO2FBQU0sSUFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixFQUFFLEtBQUssaUJBQWlCLENBQUMsTUFBTSxFQUN0RTtZQUNBLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUM5QztJQUNILENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsZUFBZSxDQUFDLGNBQWtDO1FBQ2hELElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxjQUFjLEVBQUU7WUFDdEMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQ3RELENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxjQUFjLENBQy9DLENBQUM7WUFDRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNoRSxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ2pELElBQUksaUJBQWlCLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQzVCLElBQUksWUFBWSxFQUFFLElBQUksQ0FBQyxhQUFhLEtBQUssSUFBSSxFQUFFO29CQUM3QyxNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FDNUQsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUNqRSxDQUFDO29CQUNGLElBQUksdUJBQXVCLEtBQUssQ0FBQyxDQUFDLEVBQUU7d0JBQ2xDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNoRCx1QkFBdUIsQ0FDeEIsQ0FBQzt3QkFDRixJQUFJLGtCQUFrQixJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7NEJBQzlELGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZO2dDQUNsQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQzs0QkFDM0MsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxLQUFLLENBQUMsRUFBRTtnQ0FDOUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0NBQzVDLE1BQU0sT0FBTyxHQUFHLElBQUksU0FBUyxDQUMzQixrQkFBa0IsQ0FBQyxJQUFJLEVBQ3ZCLGtCQUFrQixDQUFDLEtBQUssRUFDeEIsS0FBSyxDQUNOLENBQUM7Z0NBQ0YsbUJBQW1CLENBQUMsTUFBTSxDQUFDLGlCQUFpQixHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7NkJBQy9EO2lDQUFNO2dDQUNMLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQzs2QkFDbEQ7eUJBQ0Y7cUJBQ0Y7eUJBQU07d0JBQ0wsbUJBQW1CLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDO3FCQUNsRDtpQkFDRjtxQkFBTTtvQkFDTCxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ2xEO2FBQ0Y7WUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxtQkFBbUIsQ0FBQztZQUMzQyxJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztTQUNqQztJQUNILENBQUM7SUFDRDs7Ozs7O09BTUc7SUFDSCxZQUFZLENBQUMsa0JBQTBCLEVBQUUsVUFBdUI7UUFDOUQsTUFBTSxvQkFBb0IsR0FDeEIsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUNuRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxLQUFLLEtBQUssR0FBRyxrQkFBa0IsR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDdkUsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsb0JBQW9CLENBQUMsRUFBRTtnQkFDdkUsSUFBSSxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO29CQUM5QyxJQUNFLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUNoRTt3QkFDQSxNQUFNO3FCQUNQO2lCQUNGO2FBQ0Y7O2dCQUFNLE1BQU07U0FDZDtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNEOzs7OztPQUtHO0lBQ0gsNkJBQTZCLENBQUMsVUFBa0IsRUFBRSxRQUFnQjtRQUNoRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztRQUN4QyxVQUFVLENBQUMsTUFBTSxDQUNmLFVBQVUsRUFDVixRQUFRLEdBQUcsVUFBVSxFQUNyQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUN4RSxDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO0lBQ3BDLENBQUM7SUFDRDs7O09BR0c7SUFDSCw4QkFBOEI7UUFDNUIsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDdEMsS0FDRSxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQ2QsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQzFCLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFDOUM7WUFDQSxJQUFJLFdBQVcsR0FBRyxNQUFNLENBQUM7WUFDekIsS0FDRSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFDbEQsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQzFCLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFDOUM7Z0JBQ0EsV0FBVztvQkFDVCxJQUFJLENBQUMsYUFBYSxDQUFDO3dCQUNqQixVQUFVLENBQUMsTUFBTSxDQUFDO3dCQUNsQixVQUFVLENBQUMsV0FBVyxDQUFDO3FCQUN4QixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDLE1BQU0sQ0FBQzt3QkFDMUIsQ0FBQyxDQUFDLE1BQU07d0JBQ1IsQ0FBQyxDQUFDLFdBQVcsQ0FBQzthQUNuQjtZQUNELElBQUksV0FBVyxLQUFLLE1BQU0sRUFBRTtnQkFDMUIsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FDaEMsTUFBTSxFQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUN0QyxDQUFDO2dCQUNGLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQ2pDLFdBQVcsRUFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FDM0MsQ0FBQztnQkFDRixNQUFNLG1CQUFtQixHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN4RCxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztnQkFDeEMsbUJBQW1CLENBQUMsSUFBSSxDQUN0QixHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQ2pCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUNyQyxXQUFXLENBQ1osQ0FDRixDQUFDO2dCQUNGLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO2dCQUN2QyxtQkFBbUIsQ0FBQyxJQUFJLENBQ3RCLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLEVBQzFDLFVBQVUsQ0FBQyxNQUFNLENBQ2xCLENBQ0YsQ0FBQztnQkFDRixVQUFVLEdBQUcsbUJBQW1CLENBQUM7YUFDbEM7U0FDRjtRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztJQUNwQyxDQUFDO0lBQ0Q7Ozs7O09BS0c7SUFDSCxhQUFhLENBQUMsTUFBbUI7UUFDL0IsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBaUIsRUFBRSxNQUFpQixFQUFFLEVBQUU7WUFDMUQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDM0QsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDM0QsSUFBSSxXQUFXLEdBQUcsV0FBVztnQkFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO2lCQUNwQyxJQUFJLFdBQVcsR0FBRyxXQUFXO2dCQUFFLE9BQU8sQ0FBQyxDQUFDO2lCQUN4QyxJQUFJLFdBQVcsS0FBSyxXQUFXLEVBQUU7Z0JBQ3BDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDZCxPQUFPLEtBQUssR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUU7b0JBQ2pELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO3dCQUNuRSxPQUFPLENBQUMsQ0FBQzt5QkFDTixJQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQzt3QkFFakUsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDWixLQUFLLEVBQUUsQ0FBQztpQkFDVDthQUNGO1lBQ0QsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsbUJBQW1CLENBQUMsSUFBdUI7UUFDekMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztJQUNsQyxDQUFDO0lBQ0Q7Ozs7O09BS0c7SUFDSCxtQkFBbUIsQ0FBQyxLQUFnQjtRQUNsQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDO1FBQzNFLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7SUFDRDs7Ozs7O09BTUc7SUFDSCxrQkFBa0IsQ0FBQyxLQUFnQjtRQUNqQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLEtBQUssV0FBVyxDQUFDLFdBQVcsRUFBRTtZQUM1RCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDeEM7YUFBTSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLEtBQUssV0FBVyxDQUFDLGdCQUFnQixFQUFFO1lBQ3hFLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQzNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3pDO2FBQU0sSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxLQUFLLFdBQVcsQ0FBQyxVQUFVLEVBQUU7WUFDbEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDM0IsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNO1lBQ3ZELDhEQUE4RDtZQUM5RCxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEtBQUssS0FBSyxFQUFFLElBQUksRUFBRSxhQUFhLENBQ2xFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO1lBQ1gsSUFBSSxDQUFDLDJCQUEyQixHQUFHO2dCQUNqQyxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUk7Z0JBQ3RCLGVBQWUsRUFBRSxtQkFBbUI7YUFDckMsQ0FBQztZQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1NBQzVEO2FBQU0sSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxLQUFLLFdBQVcsQ0FBQyxZQUFZLEVBQUU7WUFDcEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDekM7YUFBTSxJQUNMLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLEtBQUssV0FBVyxDQUFDLG9CQUFvQixFQUNqRTtZQUNBLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQzNCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ2hEO0lBQ0gsQ0FBQztJQUNEOzs7OztPQUtHO0lBQ0gsdUJBQXVCLENBQUMsS0FBZ0I7UUFDdEMsTUFBTSxZQUFZLEdBQVcsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQztRQUMzRSxNQUFNLGdCQUFnQixHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDO1FBQ2xELElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDNUIsQ0FBQyxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDMUIsSUFDRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssV0FBVyxDQUFDLFdBQVc7Z0JBQ2hDLENBQUMsQ0FBQyxnQkFBZ0I7b0JBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUMvQixJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixFQUN2QyxnQkFBZ0IsQ0FDakIsQ0FBQztvQkFDRixDQUFDLENBQUMsZ0JBQWdCO3dCQUNoQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixFQUN2QyxnQkFBZ0IsQ0FDakI7NEJBQ0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQy9CLElBQUksQ0FBQyxjQUFjLENBQUMscUJBQXFCLEVBQ3pDLGdCQUFnQixDQUNqQjs0QkFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FDL0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsRUFDdEMsZ0JBQWdCLENBQ2pCOzRCQUNELElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUMvQixJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUNyQzs0QkFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FDL0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsRUFDeEMsZ0JBQWdCLENBQ2pCLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLFdBQVcsQ0FBQyxVQUFVO29CQUMvQixDQUFDLGdCQUFnQjtvQkFDakIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FDaEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQzlCLGdCQUFnQixDQUNqQjt3QkFDQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FDL0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FDdEMsQ0FBQyxDQUFDO2dCQUNQLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxXQUFXLENBQUMsWUFBWTtvQkFDakMsQ0FBQyxnQkFBZ0I7b0JBQ2pCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQ2hDLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUNoQyxnQkFBZ0IsQ0FDakI7d0JBQ0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQy9CLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQ3RDLENBQUM7b0JBQ0osQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQztnQkFDNUIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLFdBQVcsQ0FBQyxnQkFBZ0I7b0JBQ3JDLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxhQUFhO29CQUN2RCxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsRUFDbkMsZ0JBQWdCLENBQ2pCO3dCQUNDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUMvQixJQUFJLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUN0QyxDQUFDO29CQUNKLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ3BCLHlFQUF5RTtnQkFDekUscUVBQXFFO2dCQUNyRSwwQkFBMEI7Z0JBQzFCLENBQUMsRUFBRSxFQUFFLEtBQUssV0FBVyxDQUFDLG9CQUFvQixFQUMxQztnQkFDQSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3RCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCx3RUFBd0U7UUFDeEUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNqQyxJQUFJLEtBQUssRUFBRSxFQUFFLEtBQUssV0FBVyxDQUFDLG9CQUFvQjtnQkFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzlELElBQUksS0FBSyxFQUFFLEVBQUUsS0FBSyxXQUFXLENBQUMsb0JBQW9CO2dCQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzdELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBQ0Q7Ozs7OztPQU1HO0lBQ0gsU0FBUyxDQUFDLEtBQWEsRUFBRSxVQUFzQjtRQUM3QyxPQUFPLFVBQVUsQ0FBQyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUNEOzs7T0FHRztJQUNILFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlCLENBQUM7K0dBMW1CVSxpQkFBaUI7bUdBQWpCLGlCQUFpQiwwaUJDOVA5Qiw2cEpBaUlBLDAyVkRnSEksWUFBWSx5bEJBQ1osYUFBYSxnaEJBQ2IsYUFBYSw4QkFDYixlQUFlLCtCQUNmLGFBQWEseUxBQ2IsbUJBQW1CLHFJQUNuQixnQkFBZ0IsK0hBQ2hCLHNCQUFzQjs7NEZBTWIsaUJBQWlCO2tCQWpCN0IsU0FBUzsrQkFDRSxhQUFhLGNBQ1gsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixtQkFBbUI7d0JBQ25CLGdCQUFnQjt3QkFDaEIsc0JBQXNCO3FCQUN2QixpQkFHYyxpQkFBaUIsQ0FBQyxJQUFJO3VMQXlCakMsZ0JBQWdCO3NCQURuQixLQUFLO2dCQVVGLGVBQWU7c0JBRGxCLEtBQUs7Z0JBVUYsMkJBQTJCO3NCQUQ5QixLQUFLO2dCQVNGLGtCQUFrQjtzQkFEckIsS0FBSztnQkFTTixvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBR0ksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLHVCQUF1QjtzQkFBaEMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdGFibGUsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIE9uRGVzdHJveSxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBNZW51Q29tcG9uZW50LFxyXG4gIE1lbnUsXHJcbiAgSWNvbkJ1dHRvbkNvbXBvbmVudCxcclxuICBJY29uQnV0dG9uLFxyXG4gIFRleHRUcnVuY2F0ZWREaXJlY3RpdmUsXHJcbiAgQnJlYWtwb2ludE9ic2VydmVyU2VydmljZVxyXG59IGZyb20gJ0BpZWVlc2EtbnBtL3ByZXNlbnRhdGlvbic7XHJcbmltcG9ydCAqIGFzIGNvbnN0YW50cyBmcm9tICcuLi8uLi9hc3NldHMvY29uc3RhbnRzLmpzb24nO1xyXG5pbXBvcnQgeyBHcm91cEFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9ncm91cC1hY3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENvbGxlY3Rpb25WaWV3ZXIsXHJcbiAgU2VsZWN0aW9uQ2hhbmdlLFxyXG4gIERhdGFTb3VyY2UsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHsgRmxhdFRyZWVDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdFRyZWVNb2R1bGUsIE1hdFRyZWVOb2RlUGFkZGluZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xyXG5pbXBvcnQgeyBHcm91cEluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7IEVkaXRHcm91cEFuZFBhcmVudEluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZWRpdC1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgR3JvdXBzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dyb3Vwcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR3JvdXBGdW5jdGlvblR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtZnVuY3Rpb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Blcm1pc3Npb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3VwUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uL21vZGVscy9ncm91cC1wZXJtaXNzaW9ucy5tb2RlbCc7XHJcbi8qKlxyXG4gKiBEeW5hbWljIEZsYXQgbm9kZSBjcmVhdGVzIGEgbm9kZSBzdHJ1Y3R1cmVcclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgR3JvdXBOb2RlXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgR3JvdXBOb2RlIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGl0ZW06IEdyb3VwSW5mbyxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGxldmVsID0gMSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGV4cGFuZGFibGUgPSBmYWxzZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGlzTG9hZGluZyA9IGZhbHNlIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eS1mdW5jdGlvblxyXG4gICkge31cclxufVxyXG5cclxuLyoqXHJcbiAqIEdyb3VwcyBzdG9yZXMgdGhlIHBhcmVudCBub2RlcyBhbmQgY2hpbGQgbm9kZXNcclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgR3JvdXBzXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgR3JvdXBzIHtcclxuICByb290TGV2ZWxOb2RlcyE6IEdyb3VwSW5mb1tdO1xyXG4gIC8qKiBJbml0aWFsIGRhdGEgZnJvbSBkYXRhYmFzZSAqL1xyXG4gIHByaXZhdGUgY2hpbGRHcm91cHMhOiBHcm91cEluZm9bXTtcclxuICAvKipcclxuICAgKiBHZXQgdGhlIENoaWxkIGdyb3VwcyBpbmZvXHJcbiAgICogQHJldHVybiB7Kn0gIHtHcm91cEluZm9bXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzXHJcbiAgICovXHJcbiAgZ2V0Q2hpbGRHcm91cHNJbmZvKCk6IEdyb3VwSW5mb1tdIHtcclxuICAgIHJldHVybiB0aGlzLmNoaWxkR3JvdXBzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBDaGlsZCBncm91cHMgaW5mb1xyXG4gICAqIEBwYXJhbSB7R3JvdXBJbmZvW119IHZhbHVlXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1xyXG4gICAqL1xyXG4gIHNldENoaWxkR3JvdXBzSW5mbyh2YWx1ZTogR3JvdXBJbmZvW10pOiB2b2lkIHtcclxuICAgIHRoaXMuY2hpbGRHcm91cHMgPSB2YWx1ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSB0aGUgZ3JvdXBzIGRhdGEgYW5kIGNyZWF0ZXMgdGhlIG5vZGUgc3RydWN0dXJlIGZvciBtYXQgdHJlZVxyXG4gICAqIEBwYXJhbSB7R3JvdXBJbmZvW119IGRhdGFcclxuICAgKiBAcmV0dXJuIHsqfSAge0dyb3VwTm9kZVtdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNcclxuICAgKi9cclxuICBpbml0aWFsRGF0YShkYXRhOiBHcm91cEluZm9bXSk6IEdyb3VwTm9kZVtdIHtcclxuICAgIHRoaXMucm9vdExldmVsTm9kZXMgPSBkYXRhO1xyXG4gICAgcmV0dXJuIHRoaXMucm9vdExldmVsTm9kZXM/Lm1hcChcclxuICAgICAgKG5vZGUpID0+IG5ldyBHcm91cE5vZGUobm9kZSwgMCwgdGhpcy5pc0V4cGFuZGFibGUobm9kZSkpXHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDaGVja3MgdGhlIG5vZGUgaXMgZXhwYW5kYWJsZSBvciBub3RcclxuICAgKiBAcGFyYW0ge0dyb3VwSW5mb30gbm9kZVxyXG4gICAqIEByZXR1cm4geyp9ICB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzXHJcbiAgICovXHJcbiAgaXNFeHBhbmRhYmxlKG5vZGU6IEdyb3VwSW5mbyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKCEhbm9kZT8uY2hpbGRyZW4gJiYgbm9kZT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHx8IG5vZGU/Lmhhc0NoaWxkcmVuXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4vKipcclxuICogRHluYW1pYyBEYXRhIFNvdXJjZSBoYW5kbGVzIHRoZSBjb25uZWN0aW9uIHdpdGggZHluYW1pYyBkYXRhIGJhc2VcclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgR3JvdXBzRGF0YVNvdXJjZVxyXG4gKiBAaW1wbGVtZW50cyB7RGF0YVNvdXJjZTxHcm91cE5vZGU+fVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEdyb3Vwc0RhdGFTb3VyY2UgaW1wbGVtZW50cyBEYXRhU291cmNlPEdyb3VwTm9kZT4ge1xyXG4gIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBkYXRhQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxHcm91cE5vZGVbXT4oW10pO1xyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHVwZGF0ZWQgdHJlZSBjb250cm9sIGRhdGFcclxuICAgKiBAdHlwZSB7R3JvdXBOb2RlW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0RhdGFTb3VyY2VcclxuICAgKi9cclxuICBnZXQgZGF0YSgpOiBHcm91cE5vZGVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhQ2hhbmdlPy52YWx1ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgZGF0YSB0byB0cmVlIGNvbnRyb2wgYW5kIGVtaXQgdGhlIHZhbHVlIHRvIGludGltYXRlIHRoZSBkYXRhIGNoYW5nZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgc2V0IGRhdGEodmFsdWU6IEdyb3VwTm9kZVtdKSB7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2RlcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLm5leHQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgdHJlZUNvbnRyb2w6IEZsYXRUcmVlQ29udHJvbDxHcm91cE5vZGU+LFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGRhdGFiYXNlOiBHcm91cHMgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGRhdGEgYmFzZSBhbmQgbWF0IHRyZWVcclxuICAgKiBAcGFyYW0ge0NvbGxlY3Rpb25WaWV3ZXJ9IGNvbGxlY3Rpb25WaWV3ZXJcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8R3JvdXBOb2RlW10+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxHcm91cE5vZGVbXT4ge1xyXG4gICAgdGhpcy50cmVlQ29udHJvbD8uZXhwYW5zaW9uTW9kZWw/LmNoYW5nZWRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChjaGFuZ2UpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoY2hhbmdlIGFzIFNlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+KS5hZGRlZCB8fFxyXG4gICAgICAgICAgKGNoYW5nZSBhcyBTZWxlY3Rpb25DaGFuZ2U8R3JvdXBOb2RlPikucmVtb3ZlZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVUcmVlQ29udHJvbChjaGFuZ2UgYXMgU2VsZWN0aW9uQ2hhbmdlPEdyb3VwTm9kZT4pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gbWVyZ2UoY29sbGVjdGlvblZpZXdlcj8udmlld0NoYW5nZSwgdGhpcy5kYXRhQ2hhbmdlKS5waXBlKFxyXG4gICAgICBtYXAoKCkgPT4gdGhpcy5kYXRhKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRGlzY29ubmVjdCB0aGUgY29ubmVjdGlvbiB3aXRoIG1hdCB0cmVlXHJcbiAgICogQHBhcmFtIHtDb2xsZWN0aW9uVmlld2VyfSBjb2xsZWN0aW9uVmlld2VyXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0RhdGFTb3VyY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uLCBuby1lbXB0eS1mdW5jdGlvbiwgbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gIGRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcy9yZW1vdmVzIHRoZSBjaGlsZCBub2RlcyB3aGlsZSBleHBhbmRzL2NvbGxhcHNlcyB0aGUgcGFyZW50IG5vZGVcclxuICAgKiBAcGFyYW0ge1NlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+fSBjaGFuZ2VcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzRGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIGhhbmRsZVRyZWVDb250cm9sKGNoYW5nZTogU2VsZWN0aW9uQ2hhbmdlPEdyb3VwTm9kZT4pIHtcclxuICAgIGlmIChjaGFuZ2U/LmFkZGVkKSB7XHJcbiAgICAgIGNoYW5nZS5hZGRlZD8uZm9yRWFjaCgobm9kZSkgPT4gdGhpcy50b2dnbGVOb2RlKG5vZGUsIHRydWUpKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2U/LnJlbW92ZWQpIHtcclxuICAgICAgY2hhbmdlLnJlbW92ZWRcclxuICAgICAgICAuc2xpY2UoKVxyXG4gICAgICAgIC5yZXZlcnNlKClcclxuICAgICAgICAuZm9yRWFjaCgobm9kZSkgPT4gdGhpcy50b2dnbGVOb2RlKG5vZGUsIGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGUgdGhlIG5vZGUsIGFkZC9yZW1vdmVzIHRoZSBub2RlIGZyb20gZGlzcGxheVxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBjbGlja2VkTm9kZVxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhwYW5kXHJcbiAgICogQHJldHVybiB7Kn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzRGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIHRvZ2dsZU5vZGUoY2xpY2tlZE5vZGU6IEdyb3VwTm9kZSwgZXhwYW5kOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZGF0YWJhc2U/LmdldENoaWxkR3JvdXBzSW5mbygpO1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmRhdGE/LmluZGV4T2YoY2xpY2tlZE5vZGUpO1xyXG4gICAgaWYgKCFjaGlsZHJlbiB8fCBpbmRleCA8IDApIHtcclxuICAgICAgLy8gSWYgbm8gY2hpbGRyZW4sIG9yIGNhbm5vdCBmaW5kIHRoZSBub2RlLCBubyBvcFxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV4cGFuZCkge1xyXG4gICAgICBjbGlja2VkTm9kZS5pdGVtLm5vT2ZDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgY29uc3Qgbm9kZXMgPSBjaGlsZHJlbj8ubWFwKFxyXG4gICAgICAgIChub2RlKSA9PlxyXG4gICAgICAgICAgbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgICAgbm9kZSxcclxuICAgICAgICAgICAgY2xpY2tlZE5vZGU/LmxldmVsICsgMSxcclxuICAgICAgICAgICAgdGhpcy5kYXRhYmFzZT8uaXNFeHBhbmRhYmxlKG5vZGUpXHJcbiAgICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZGF0YT8uc3BsaWNlKGluZGV4ICsgMSwgMCwgLi4ubm9kZXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGNvdW50ID0gMDtcclxuICAgICAgZm9yIChcclxuICAgICAgICBsZXQgaSA9IGluZGV4ICsgMTtcclxuICAgICAgICBpIDwgdGhpcy5kYXRhPy5sZW5ndGggJiYgdGhpcy5kYXRhW2ldPy5sZXZlbCA+IGNsaWNrZWROb2RlPy5sZXZlbDtcclxuICAgICAgICBpKyssIGNvdW50KysgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XHJcbiAgICAgICkge31cclxuICAgICAgdGhpcy5kYXRhPy5zcGxpY2UoaW5kZXggKyAxLCBjb3VudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoZSBjaGFuZ2VcclxuICAgIHRoaXMuZGF0YUNoYW5nZT8ubmV4dCh0aGlzLmRhdGEpO1xyXG4gIH1cclxufVxyXG4vKipcclxuICogRGlzcGxheXMgdGhlIGdyb3VwcyB3aGVyZSBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwcyBhcmUgcmVwcmVzZW50ZWQgaW4gYSB0cmVlIHZpZXcvaGllcmFyY2h5LlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBUcmVlVmlld0NvbXBvbmVudFxyXG4gKiBAaW1wbGVtZW50cyB7T25Jbml0fVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZWVlc2EtdHJlZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBNYXRUcmVlTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1lbnVDb21wb25lbnQsXHJcbiAgICBJY29uQnV0dG9uQ29tcG9uZW50LFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIFRleHRUcnVuY2F0ZWREaXJlY3RpdmUsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHJlZS12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90cmVlLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJlZVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBjb25zdGFudHM6IGFueSA9IGNvbnN0YW50cztcclxuICBidXR0b25zOiBNZW51W10gPSB0aGlzLmNvbnN0YW50cz8udmlld0dyb3Vwcz8uYnV0dG9ucztcclxuICB0cmVlUGFkZGluZ0luZGVudDogbnVtYmVyID0gdGhpcy5jb25zdGFudHM/LnZpZXdHcm91cHM/LnRyZWVQYWRkaW5nSW5kZW50O1xyXG4gIHNlbGVjdGVkR3JvdXAhOiBHcm91cE5vZGU7XHJcbiAgc2VsZWN0ZWRHcm91cEFjdGlvbiE6IE1lbnUgfCBJY29uQnV0dG9uO1xyXG4gIHRyZWVDb250cm9sITogRmxhdFRyZWVDb250cm9sPEdyb3VwTm9kZT47XHJcbiAgZGF0YVNvdXJjZSE6IEdyb3Vwc0RhdGFTb3VyY2U7XHJcbiAgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIG1hdFRyZWVOb2RlUGFkZGluZyE6IE1hdFRyZWVOb2RlUGFkZGluZzxHcm91cE5vZGU+O1xyXG4gIHBsdXNDaXJjbGVJY29uQnV0dG9uOiBJY29uQnV0dG9uID0gdGhpcy5idXR0b25zWzRdO1xyXG4gIG1pbnVzQ2lyY2xlSWNvbkJ1dHRvbjogSWNvbkJ1dHRvbiA9IHRoaXMuYnV0dG9uc1s1XTtcclxuICBlZGl0R3JvdXBBbmRQYXJlbnRHcm91cEluZm8hOiBFZGl0R3JvdXBBbmRQYXJlbnRJbmZvO1xyXG4gIHBlcm1pc3Npb25UeXBlID0gUGVybWlzc2lvblR5cGU7XHJcblxyXG4gIG1lbnVJdGVtczogTWVudVtdID0gdGhpcy5idXR0b25zPy5maWx0ZXIoXHJcbiAgICAoZSkgPT5cclxuICAgICAgZS5pZCAhPT0gR3JvdXBBY3Rpb24/LkVYUEFORF9HUk9VUF9WSUVXICYmXHJcbiAgICAgIGUuaWQgIT09IEdyb3VwQWN0aW9uPy5DT0xMQVBTRV9HUk9VUF9WSUVXXHJcbiAgKTtcclxuICBwcml2YXRlIHBhcmVudEdyb3VwcyE6IEdyb3VwSW5mb1tdO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHBhcmVudEdyb3Vwc0luZm8odmFsdWU6IEdyb3VwSW5mb1tdKSB7XHJcbiAgICB0aGlzLnBhcmVudEdyb3VwcyA9IHZhbHVlO1xyXG4gICAgaWYgKHZhbHVlKSB0aGlzLnNldEdyb3VwRGF0YVNvdXJjZSgpO1xyXG4gIH1cclxuICBnZXQgcGFyZW50R3JvdXBzSW5mbygpOiBHcm91cEluZm9bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5wYXJlbnRHcm91cHM7XHJcbiAgfVxyXG4gIHByaXZhdGUgY2hpbGRHcm91cHMhOiBHcm91cEluZm9bXTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBjaGlsZEdyb3Vwc0luZm8odmFsdWU6IEdyb3VwSW5mb1tdKSB7XHJcbiAgICB0aGlzLmNoaWxkR3JvdXBzID0gdmFsdWU7XHJcbiAgICB0aGlzLmxvYWRDaGlsZEdyb3VwcygpO1xyXG4gIH1cclxuICBnZXQgY2hpbGRHcm91cHNJbmZvKCk6IEdyb3VwSW5mb1tdIHtcclxuICAgIHJldHVybiB0aGlzLmNoaWxkR3JvdXBzO1xyXG4gIH1cclxuICBwcml2YXRlIGlzR3JvdXBTZWFyY2hPckZpbHRlciA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0dyb3VwU2VhcmNoT3JGaWx0ZXIgPSB2YWx1ZTtcclxuICB9XHJcbiAgZ2V0IGlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzR3JvdXBTZWFyY2hPckZpbHRlcjtcclxuICB9XHJcbiAgcHJpdmF0ZSBkZWxldGVkR3JvdXBJZCE6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKVxyXG4gIHNldCBkZWxldGVkR3JvdXBJZEluZm8oaWQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5kZWxldGVkR3JvdXBJZCA9IGlkO1xyXG4gICAgdGhpcy5kZWxldGVHcm91cE5vZGUodGhpcy5kZWxldGVkR3JvdXBJZCk7XHJcbiAgfVxyXG4gIGdldCBkZWxldGVkR3JvdXBJZEluZm8oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmRlbGV0ZWRHcm91cElkO1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIHVzZXJHcm91cFBlcm1pc3Npb25zITogR3JvdXBQZXJtaXNzaW9uW107XHJcblxyXG4gIEBPdXRwdXQoKSB0b2dnbGVHcm91cENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIGNyZWF0ZUdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdyb3VwSW5mbz4oKTtcclxuICBAT3V0cHV0KCkgZWRpdEdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEVkaXRHcm91cEFuZFBhcmVudEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIGRlbGV0ZUdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdyb3VwSW5mbz4oKTtcclxuICBAT3V0cHV0KCkgdmlld1Jvc3RlckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIG1hbmFnZUludGVyZXN0Rm9ybUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgaXNNb2JpbGVWaWV3ID0gZmFsc2U7XHJcbiAgZ3JvdXBGdW5jdGlvblR5cGUgPSBHcm91cEZ1bmN0aW9uVHlwZTtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGRhdGFiYXNlOiBHcm91cHMsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgZ3JvdXBzU2VydmljZTogR3JvdXBzU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlOiBCcmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlclNlcnZpY2VcclxuICAgICAgLmdldEJyZWFrcG9pbnQoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogeyBtYXRjaGVzOiBib29sZWFuIH0pID0+IHtcclxuICAgICAgICB0aGlzLmlzTW9iaWxlVmlldyA9IHJlc3VsdD8ubWF0Y2hlcztcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemVzIHRoZSB0cmVlIHZpZXcgY29tcG9uZW50XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldEdyb3VwRGF0YVNvdXJjZSgpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBBc3NpZ24gQVJJQSByb2xlIGZvciBhbGwgbWF0IHRyZWUgbm9kZXMgYXMgXCJyb3dcIlxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0YVNvdXJjZT8uZGF0YUNoYW5nZVxyXG4gICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGVzID1cclxuICAgICAgICAgIHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvckFsbCgnW3JvbGU9dHJlZWl0ZW1dJyk7XHJcbiAgICAgICAgdHJlZUl0ZW1Ob2Rlcz8uZm9yRWFjaCgobm9kZTogSFRNTEVsZW1lbnQpID0+IChub2RlLnJvbGUgPSAncm93JykpO1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgbGV2ZWwgb2YgdGhlIG5vZGVcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gbm9kZVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldExldmVsID0gKG5vZGU6IEdyb3VwTm9kZSkgPT4gbm9kZT8ubGV2ZWw7XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyB0aGUgbm9kZSBpcyBleHBhbmRhYmxlIG9yIG5vdFxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBub2RlXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgaXNFeHBhbmRhYmxlID0gKG5vZGU6IEdyb3VwTm9kZSkgPT4gbm9kZT8uZXhwYW5kYWJsZTtcclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0cnVlIGlmIHBhc3NlZCBub2RlIGhhcyBjaGlsZHJlbiBvdGhlcndpc2UgZmFsc2VcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gbm9kZVxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgaGFzQ2hpbGRHcm91cHMgPSAoaW5kZXg6IG51bWJlciwgX25vZGVEYXRhOiBHcm91cE5vZGUpID0+XHJcbiAgICBfbm9kZURhdGEuZXhwYW5kYWJsZTtcclxuICAvKipcclxuICAgKiBFbWl0cyB0aGUgZ3JvdXAgaW5mbyB3aGVuIHRoZSB0b2dnbGUgZ3JvdXAgaXMgY2xpY2tlZCBvciB0b2dnbGVzIHRoZSBncm91cCB2aWV3XHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IGdyb3VwXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgdmlld0NoaWxkR3JvdXBzKG5vZGU6IEdyb3VwTm9kZSkge1xyXG4gICAgaWYgKCFub2RlPy5pdGVtPy5oYXNDaGlsZHJlbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50cmVlQ29udHJvbD8uaXNFeHBhbmRlZChub2RlKSkge1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sPy50b2dnbGUobm9kZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdyb3Vwc1NlcnZpY2Uuc2V0R3JvdXBGdW5jdGlvblR5cGUoR3JvdXBGdW5jdGlvblR5cGUuVE9HR0xFKTtcclxuICAgICAgdGhpcy50b2dnbGVHcm91cENsaWNrLmVtaXQobm9kZT8uaXRlbSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cCA9IG5vZGU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGJveCBzaGFkb3cgYmFzZWQgb24gdGhlIGdyb3VwIHR5cGUgbGVnZW5kIGNvbG9yXHJcbiAgICogQHJldHVybiB7Kn1cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGdldEJveFNoYWRvdygpOiBhbnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYm94U2hhZG93OiAnMHB4IDFweCAwcHggMHB4ICNjOWNiZDAgaW5zZXQnLFxyXG4gICAgfTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgZGF0YVNvdXJjZSB3aXRoIHBhcmVudCBncm91cHMgZGF0YVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHNldEdyb3VwRGF0YVNvdXJjZSgpOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5kYXRhU291cmNlICYmXHJcbiAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpID09PSBHcm91cEZ1bmN0aW9uVHlwZS5DUkVBVEVcclxuICAgICkge1xyXG4gICAgICB0aGlzLnBhcmVudEdyb3Vwc0luZm8/LmZvckVhY2goKHBhcmVudEdyb3VwTm9kZSkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZT8uZGF0YT8uZmluZEluZGV4KFxyXG4gICAgICAgICAgICAobm9kZSkgPT4gbm9kZT8uaXRlbT8uZ3JvdXBJZCA9PT0gcGFyZW50R3JvdXBOb2RlPy5ncm91cElkXHJcbiAgICAgICAgICApID09PSAtMVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29uc3QgbmV3R3JvdXBOb2RlID0gbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgICAgcGFyZW50R3JvdXBOb2RlLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICB0aGlzLmRhdGFiYXNlLmlzRXhwYW5kYWJsZShwYXJlbnRHcm91cE5vZGUpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3QgZ3JvdXBOb2Rlc1JlZmVyZW5jZSA9IHRoaXMuZGF0YVNvdXJjZT8uZGF0YTtcclxuICAgICAgICAgIGdyb3VwTm9kZXNSZWZlcmVuY2U/LnB1c2gobmV3R3JvdXBOb2RlKTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZ3JvdXBOb2Rlc1JlZmVyZW5jZTtcclxuICAgICAgICAgIHRoaXMuc29ydFBhcmVudEdyb3Vwc0FscGhhYmV0aWNhbGx5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpID09PSBHcm91cEZ1bmN0aW9uVHlwZS5FRElUXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5lZGl0R3JvdXAodGhpcy5wYXJlbnRHcm91cHNJbmZvKTtcclxuICAgICAgdGhpcy5zb3J0UGFyZW50R3JvdXBzQWxwaGFiZXRpY2FsbHkoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudHJlZUNvbnRyb2wgPSBuZXcgRmxhdFRyZWVDb250cm9sPEdyb3VwTm9kZT4oXHJcbiAgICAgICAgdGhpcy5nZXRMZXZlbCxcclxuICAgICAgICB0aGlzLmlzRXhwYW5kYWJsZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgR3JvdXBzRGF0YVNvdXJjZSh0aGlzLnRyZWVDb250cm9sLCB0aGlzLmRhdGFiYXNlKTtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGFiYXNlPy5pbml0aWFsRGF0YSh0aGlzLnBhcmVudEdyb3Vwc0luZm8pO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSB1cGRhdGVkIG5vZGUgaW5mb3JtYXRpb25cclxuICAgKiBAcGFyYW0ge0dyb3VwSW5mb1tdfSBncm91cHNJbmZvXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgZWRpdEdyb3VwKGdyb3Vwc0luZm86IEdyb3VwSW5mb1tdKSB7XHJcbiAgICBjb25zdCBncm91cE5vZGVSZWZlcmVuY2UgPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE7XHJcbiAgICBjb25zdCBlZGl0ZWROb2RlID0gZ3JvdXBzSW5mbz8uZmluZChcclxuICAgICAgKG5vZGUpID0+XHJcbiAgICAgICAgbm9kZT8uZ3JvdXBJZCA9PT0gdGhpcy5lZGl0R3JvdXBBbmRQYXJlbnRHcm91cEluZm8/Lmdyb3VwSW5mbz8uZ3JvdXBJZFxyXG4gICAgKTtcclxuICAgIGdyb3VwTm9kZVJlZmVyZW5jZT8uZm9yRWFjaCgobm9kZSkgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgbm9kZT8uaXRlbT8uZ3JvdXBJZCA9PT1cclxuICAgICAgICB0aGlzLmVkaXRHcm91cEFuZFBhcmVudEdyb3VwSW5mbz8uZ3JvdXBJbmZvPy5ncm91cElkXHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnN0IG5vT2ZDaGlsZHJlblJlZmVyZW5jZSA9IG5vZGUuaXRlbS5ub09mQ2hpbGRyZW47XHJcbiAgICAgICAgbm9kZS5pdGVtID0gZWRpdGVkTm9kZSBhcyBHcm91cEluZm87XHJcbiAgICAgICAgbm9kZS5pdGVtLm5vT2ZDaGlsZHJlbiA9IG5vT2ZDaGlsZHJlblJlZmVyZW5jZTtcclxuICAgICAgICBub2RlLmV4cGFuZGFibGUgPSB0aGlzLmRhdGFiYXNlLmlzRXhwYW5kYWJsZShub2RlPy5pdGVtKTtcclxuICAgICAgICBpZiAobm9kZS5pdGVtLmhhc0NoaWxkcmVuICYmIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSkge1xyXG4gICAgICAgICAgdGhpcy50cmVlQ29udHJvbC50b2dnbGUobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZ3JvdXBOb2RlUmVmZXJlbmNlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBMb2FkcyB0aGUgY2hpbGQgZ3JvdXBzIGFuZCB1cGRhdGVzIHRoZSB0cmVlIHZpZXcuXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgbG9hZENoaWxkR3JvdXBzKCkge1xyXG4gICAgdGhpcy5kYXRhYmFzZT8uc2V0Q2hpbGRHcm91cHNJbmZvKHRoaXMuY2hpbGRHcm91cHNJbmZvKTtcclxuICAgIGNvbnN0IGdyb3VwTm9kZXNSZWZlcmVuY2UgPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpID09PSBHcm91cEZ1bmN0aW9uVHlwZS5DUkVBVEVcclxuICAgICkge1xyXG4gICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRHcm91cD8uaXRlbT8uaGFzQ2hpbGRyZW4pIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXAuaXRlbS5oYXNDaGlsZHJlbiA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBQYXJlbnROb2RlID0gbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cC5pdGVtLFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwLmxldmVsLFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZ3JvdXBOb2Rlc1JlZmVyZW5jZS5zcGxpY2UoXHJcbiAgICAgICAgICBncm91cE5vZGVzUmVmZXJlbmNlLmluZGV4T2YodGhpcy5zZWxlY3RlZEdyb3VwKSxcclxuICAgICAgICAgIDEsXHJcbiAgICAgICAgICBncm91cFBhcmVudE5vZGVcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKGdyb3VwUGFyZW50Tm9kZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0aGlzLnNlbGVjdGVkR3JvdXApKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmRhdGFiYXNlLmdldENoaWxkR3JvdXBzSW5mbygpO1xyXG4gICAgICAgIGNoaWxkcmVuPy5mb3JFYWNoKChncm91cE5vZGUpID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlPy5kYXRhPy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgKG5vZGUpID0+IG5vZGU/Lml0ZW0/Lmdyb3VwSWQgPT09IGdyb3VwTm9kZT8uZ3JvdXBJZFxyXG4gICAgICAgICAgICApID09PSAtMVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0dyb3VwTm9kZSA9IG5ldyBHcm91cE5vZGUoXHJcbiAgICAgICAgICAgICAgZ3JvdXBOb2RlLFxyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cD8ubGV2ZWwgKyAxLFxyXG4gICAgICAgICAgICAgIHRoaXMuZGF0YWJhc2U/LmlzRXhwYW5kYWJsZShncm91cE5vZGUpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwTm9kZXNSZWZlcmVuY2UgPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE7XHJcbiAgICAgICAgICAgIGdyb3VwTm9kZXNSZWZlcmVuY2UuZm9yRWFjaCgobm9kZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChub2RlLml0ZW0uZ3JvdXBJZCA9PT0gdGhpcy5zZWxlY3RlZEdyb3VwLml0ZW0uZ3JvdXBJZCkge1xyXG4gICAgICAgICAgICAgICAgbm9kZS5pdGVtLm5vT2ZDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBncm91cE5vZGVzUmVmZXJlbmNlLnNwbGljZShcclxuICAgICAgICAgICAgICBncm91cE5vZGVzUmVmZXJlbmNlLmluZGV4T2YodGhpcy5zZWxlY3RlZEdyb3VwKSArIDEsXHJcbiAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICBuZXdHcm91cE5vZGVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBncm91cE5vZGVzUmVmZXJlbmNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBJbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChcclxuICAgICAgICAobm9kZSkgPT4gbm9kZS5pdGVtLmdyb3VwSWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cD8uaXRlbS5ncm91cElkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc29ydENoaWxkR3JvdXBzQWxwaGFiZXRpY2FsbHkoXHJcbiAgICAgICAgc2VsZWN0ZWRHcm91cEluZGV4ICsgMSxcclxuICAgICAgICB0aGlzLmdldE5leHRHcm91cChzZWxlY3RlZEdyb3VwSW5kZXgsIHRoaXMuZGF0YVNvdXJjZS5kYXRhKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgPT09IEdyb3VwRnVuY3Rpb25UeXBlLkVESVRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmVkaXRHcm91cCh0aGlzLmNoaWxkR3JvdXBzSW5mbyk7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkUGFyZW50R3JvdXBJbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChcclxuICAgICAgICAobm9kZSkgPT4gbm9kZS5pdGVtLmdyb3VwSWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cD8uaXRlbS5ncm91cFBhcmVudElkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc29ydENoaWxkR3JvdXBzQWxwaGFiZXRpY2FsbHkoXHJcbiAgICAgICAgc2VsZWN0ZWRQYXJlbnRHcm91cEluZGV4ICsgMSxcclxuICAgICAgICB0aGlzLmdldE5leHRHcm91cChzZWxlY3RlZFBhcmVudEdyb3VwSW5kZXgsIHRoaXMuZGF0YVNvdXJjZS5kYXRhKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgPT09IEdyb3VwRnVuY3Rpb25UeXBlLlRPR0dMRVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMudHJlZUNvbnRyb2w/LnRvZ2dsZSh0aGlzLnNlbGVjdGVkR3JvdXApO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBEZWxldGVzIHRoZSBzZWxlY3RlZCBncm91cCBhbmQgdXBkYXRlcyB0aGUgdHJlZSB2aWV3LlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkZWxldGVkR3JvdXBJZFxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGRlbGV0ZUdyb3VwTm9kZShkZWxldGVkR3JvdXBJZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50cmVlQ29udHJvbCAmJiBkZWxldGVkR3JvdXBJZCkge1xyXG4gICAgICBjb25zdCBkZWxldGVkR3JvdXBJbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChcclxuICAgICAgICAobm9kZSkgPT4gbm9kZS5pdGVtLmdyb3VwSWQgPT09IGRlbGV0ZWRHcm91cElkXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGRlbGV0ZWRHcm91cCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmF0KGRlbGV0ZWRHcm91cEluZGV4KTtcclxuICAgICAgY29uc3QgZGF0YVNvdXJjZVJlZmVyZW5jZSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhO1xyXG4gICAgICBpZiAoZGVsZXRlZEdyb3VwSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgaWYgKGRlbGV0ZWRHcm91cD8uaXRlbS5ncm91cFBhcmVudElkICE9PSBudWxsKSB7XHJcbiAgICAgICAgICBjb25zdCBkZWxldGVkUGFyZW50R3JvdXBJbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChcclxuICAgICAgICAgICAgKG5vZGUpID0+IG5vZGUuaXRlbS5ncm91cElkID09PSBkZWxldGVkR3JvdXA/Lml0ZW0uZ3JvdXBQYXJlbnRJZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChkZWxldGVkUGFyZW50R3JvdXBJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgY29uc3QgZGVsZXRlZFBhcmVudEdyb3VwID0gdGhpcy5kYXRhU291cmNlLmRhdGEuYXQoXHJcbiAgICAgICAgICAgICAgZGVsZXRlZFBhcmVudEdyb3VwSW5kZXhcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGRlbGV0ZWRQYXJlbnRHcm91cCAmJiBkZWxldGVkUGFyZW50R3JvdXAuaXRlbS5ub09mQ2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICBkZWxldGVkUGFyZW50R3JvdXAuaXRlbS5ub09mQ2hpbGRyZW4gPVxyXG4gICAgICAgICAgICAgICAgZGVsZXRlZFBhcmVudEdyb3VwLml0ZW0ubm9PZkNoaWxkcmVuIC0gMTtcclxuICAgICAgICAgICAgICBpZiAoZGVsZXRlZFBhcmVudEdyb3VwLml0ZW0ubm9PZkNoaWxkcmVuID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGVkUGFyZW50R3JvdXAuaXRlbS5oYXNDaGlsZHJlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Tm9kZSA9IG5ldyBHcm91cE5vZGUoXHJcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZWRQYXJlbnRHcm91cC5pdGVtLFxyXG4gICAgICAgICAgICAgICAgICBkZWxldGVkUGFyZW50R3JvdXAubGV2ZWwsXHJcbiAgICAgICAgICAgICAgICAgIGZhbHNlXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5zcGxpY2UoZGVsZXRlZEdyb3VwSW5kZXggLSAxLCAyLCBuZXdOb2RlKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5zcGxpY2UoZGVsZXRlZEdyb3VwSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5zcGxpY2UoZGVsZXRlZEdyb3VwSW5kZXgsIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnNwbGljZShkZWxldGVkR3JvdXBJbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YVNvdXJjZVJlZmVyZW5jZTtcclxuICAgICAgdGhpcy5kZWxldGVkR3JvdXBJZCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgbmV4dCBncm91cCBhdCB0aGUgc2FtZSBsZXZlbC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gc2VsZWN0ZWRHcm91cEluZGV4XHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGVbXX0gZGF0YVNvdXJjZVxyXG4gICAqIEByZXR1cm4geyp9ICB7bnVtYmVyfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldE5leHRHcm91cChzZWxlY3RlZEdyb3VwSW5kZXg6IG51bWJlciwgZGF0YVNvdXJjZTogR3JvdXBOb2RlW10pOiBudW1iZXIge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cEFjcm9ueW0gPVxyXG4gICAgICBkYXRhU291cmNlW3NlbGVjdGVkR3JvdXBJbmRleF0uaXRlbS5ncm91cEFjcm9ueW07XHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChpbmRleCA9IHNlbGVjdGVkR3JvdXBJbmRleCArIDE7IGluZGV4IDwgZGF0YVNvdXJjZS5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgaWYgKGRhdGFTb3VyY2VbaW5kZXhdLml0ZW0uZ3JvdXBBY3JvbnltPy5pbmNsdWRlcyhzZWxlY3RlZEdyb3VwQWNyb255bSkpIHtcclxuICAgICAgICBpZiAoZGF0YVNvdXJjZVtzZWxlY3RlZEdyb3VwSW5kZXhdLmxldmVsID09PSAwKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2Vbc2VsZWN0ZWRHcm91cEluZGV4XS5sZXZlbCA9PT0gZGF0YVNvdXJjZVtpbmRleF0ubGV2ZWxcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBpbmRleDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU29ydCB0aGUgZ3JvdXBzIGFscGhhYmV0aWNhbGx5IGZyb20gZ2l2ZW4gc3RhcnQgaW5kZXggdG8gZW5kIGluZGV4LlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydEluZGV4XHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZEluZGV4XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgc29ydENoaWxkR3JvdXBzQWxwaGFiZXRpY2FsbHkoc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCBkYXRhU291cmNlID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XHJcbiAgICBkYXRhU291cmNlLnNwbGljZShcclxuICAgICAgc3RhcnRJbmRleCxcclxuICAgICAgZW5kSW5kZXggLSBzdGFydEluZGV4LFxyXG4gICAgICAuLi50aGlzLmdyb3Vwc1NvcnRpbmcodGhpcy5kYXRhU291cmNlLmRhdGEuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpKVxyXG4gICAgKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YVNvdXJjZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU29ydCB0aGUgcm9vdCBsZXZlbCBwYXJlbnQgZ3JvdXBzIGFscGhhYmV0aWNhbGx5LlxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHNvcnRQYXJlbnRHcm91cHNBbHBoYWJldGljYWxseSgpOiB2b2lkIHtcclxuICAgIGxldCBkYXRhU291cmNlID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XHJcbiAgICBmb3IgKFxyXG4gICAgICBsZXQgZ3JvdXBBID0gMDtcclxuICAgICAgZ3JvdXBBIDwgZGF0YVNvdXJjZS5sZW5ndGg7XHJcbiAgICAgIGdyb3VwQSA9IHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSlcclxuICAgICkge1xyXG4gICAgICBsZXQgbG93ZXN0R3JvdXAgPSBncm91cEE7XHJcbiAgICAgIGZvciAoXHJcbiAgICAgICAgbGV0IGdyb3VwQiA9IHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgZ3JvdXBCIDwgZGF0YVNvdXJjZS5sZW5ndGg7XHJcbiAgICAgICAgZ3JvdXBCID0gdGhpcy5nZXROZXh0R3JvdXAoZ3JvdXBCLCBkYXRhU291cmNlKVxyXG4gICAgICApIHtcclxuICAgICAgICBsb3dlc3RHcm91cCA9XHJcbiAgICAgICAgICB0aGlzLmdyb3Vwc1NvcnRpbmcoW1xyXG4gICAgICAgICAgICBkYXRhU291cmNlW2dyb3VwQl0sXHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2VbbG93ZXN0R3JvdXBdLFxyXG4gICAgICAgICAgXSlbMF0gPT09IGRhdGFTb3VyY2VbZ3JvdXBCXVxyXG4gICAgICAgICAgICA/IGdyb3VwQlxyXG4gICAgICAgICAgICA6IGxvd2VzdEdyb3VwO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChsb3dlc3RHcm91cCAhPT0gZ3JvdXBBKSB7XHJcbiAgICAgICAgY29uc3QgbGVmdEdyb3VwID0gZGF0YVNvdXJjZS5zbGljZShcclxuICAgICAgICAgIGdyb3VwQSxcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHJpZ2h0R3JvdXAgPSBkYXRhU291cmNlLnNsaWNlKFxyXG4gICAgICAgICAgbG93ZXN0R3JvdXAsXHJcbiAgICAgICAgICB0aGlzLmdldE5leHRHcm91cChsb3dlc3RHcm91cCwgZGF0YVNvdXJjZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2VSZWZlcmVuY2UgPSBkYXRhU291cmNlLnNsaWNlKDAsIGdyb3VwQSk7XHJcbiAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5wdXNoKC4uLnJpZ2h0R3JvdXApO1xyXG4gICAgICAgIGRhdGFTb3VyY2VSZWZlcmVuY2UucHVzaChcclxuICAgICAgICAgIC4uLmRhdGFTb3VyY2Uuc2xpY2UoXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSksXHJcbiAgICAgICAgICAgIGxvd2VzdEdyb3VwXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnB1c2goLi4ubGVmdEdyb3VwKTtcclxuICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnB1c2goXHJcbiAgICAgICAgICAuLi5kYXRhU291cmNlLnNsaWNlKFxyXG4gICAgICAgICAgICB0aGlzLmdldE5leHRHcm91cChsb3dlc3RHcm91cCwgZGF0YVNvdXJjZSksXHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UubGVuZ3RoXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICBkYXRhU291cmNlID0gZGF0YVNvdXJjZVJlZmVyZW5jZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhU291cmNlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBVdGlsaXR5IG1ldGhvZCB0byBzb3J0IGdyb3VwcyBieSBncm91cCBhY3JvbnltIGluIGFzY2VuZGluZyBvcmRlci5cclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZVtdfSBncm91cHNcclxuICAgKiBAcmV0dXJuIHsqfSAge0dyb3VwTm9kZVtdfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdyb3Vwc1NvcnRpbmcoZ3JvdXBzOiBHcm91cE5vZGVbXSk6IEdyb3VwTm9kZVtdIHtcclxuICAgIHJldHVybiBncm91cHMuc29ydCgoZ3JvdXBBOiBHcm91cE5vZGUsIGdyb3VwQjogR3JvdXBOb2RlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxvd2VyR3JvdXBBID0gZ3JvdXBBLml0ZW0uZ3JvdXBBY3JvbnltLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGNvbnN0IGxvd2VyR3JvdXBCID0gZ3JvdXBCLml0ZW0uZ3JvdXBBY3JvbnltLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGlmIChsb3dlckdyb3VwQSA8IGxvd2VyR3JvdXBCKSByZXR1cm4gLTE7XHJcbiAgICAgIGVsc2UgaWYgKGxvd2VyR3JvdXBBID4gbG93ZXJHcm91cEIpIHJldHVybiAxO1xyXG4gICAgICBlbHNlIGlmIChsb3dlckdyb3VwQSA9PT0gbG93ZXJHcm91cEIpIHtcclxuICAgICAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgICAgIHdoaWxlIChpbmRleCA8IGdyb3VwQT8uaXRlbT8uZ3JvdXBBY3JvbnltPy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChncm91cEEuaXRlbS5ncm91cEFjcm9ueW1baW5kZXhdIDwgZ3JvdXBCLml0ZW0uZ3JvdXBBY3JvbnltW2luZGV4XSlcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICBlbHNlIGlmIChcclxuICAgICAgICAgICAgZ3JvdXBBLml0ZW0uZ3JvdXBBY3JvbnltW2luZGV4XSA+IGdyb3VwQi5pdGVtLmdyb3VwQWNyb255bVtpbmRleF1cclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgaW5kZXgrKztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2VsZWN0ZWQgbWVudSBncm91cCBhY3Rpb25cclxuICAgKiBAcGFyYW0ge01lbnV9IG1lbnVcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBvbkdyb3VwQWN0aW9uc0NsaWNrKG1lbnU6IE1lbnUgfCBJY29uQnV0dG9uKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24gPSBtZW51O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDaGFuZ2VzIHRoZSBleHBhbmQvY29sbGFwc2UgaWNvbiBiYXNlZCBvbiB0aGUgdG9nZ2xlXHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IGdyb3VwXHJcbiAgICogQHJldHVybiB7Kn0gIHsqfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldFRvZ2dsZUJ1dHRvbkluZm8oZ3JvdXA6IEdyb3VwTm9kZSk6IEljb25CdXR0b24ge1xyXG4gICAgaWYgKHRoaXMudHJlZUNvbnRyb2w/LmlzRXhwYW5kZWQoZ3JvdXApKSByZXR1cm4gdGhpcy5taW51c0NpcmNsZUljb25CdXR0b247XHJcbiAgICByZXR1cm4gdGhpcy5wbHVzQ2lyY2xlSWNvbkJ1dHRvbjtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyB0aGUgZW1pdHRlZCBncm91cCBhY3Rpb25zIGV2ZW50LiBFbWl0cyB0aGUgY29ycmVzcG9uZGluZyBvdXRwdXRcclxuICAgKiBmb3IgdGhlIHNlbGVjdGVkIGFjdGlvbjogdmlldyByb3N0ZXIsIGNyZWF0ZSBzdWIgZ3JvdXAsIGVkaXQgZ3JvdXAsXHJcbiAgICogZGVsZXRlIGdyb3VwLCBvciBtYW5hZ2UgaW50ZXJlc3QgZm9ybS5cclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gZ3JvdXBcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBoYW5kbGVHcm91cEFjdGlvbnMoZ3JvdXA6IEdyb3VwTm9kZSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cEFjdGlvbj8uaWQgPT09IEdyb3VwQWN0aW9uLlZJRVdfUk9TVEVSKSB7XHJcbiAgICAgIHRoaXMudmlld1Jvc3RlckNsaWNrLmVtaXQoZ3JvdXA/Lml0ZW0pO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24/LmlkID09PSBHcm91cEFjdGlvbi5DUkVBVEVfU1VCX0dST1VQKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cCA9IGdyb3VwO1xyXG4gICAgICB0aGlzLmNyZWF0ZUdyb3VwQ2xpY2suZW1pdChncm91cD8uaXRlbSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cEFjdGlvbj8uaWQgPT09IEdyb3VwQWN0aW9uLkVESVRfR1JPVVApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwID0gZ3JvdXA7XHJcbiAgICAgIGNvbnN0IGVkaXRHcm91cFBhcmVudEluZm8gPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE/LmZpbHRlcihcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/Lml0ZW0/Lmdyb3VwSWQgPT09IGdyb3VwPy5pdGVtPy5ncm91cFBhcmVudElkXHJcbiAgICAgIClbMF0/Lml0ZW07XHJcbiAgICAgIHRoaXMuZWRpdEdyb3VwQW5kUGFyZW50R3JvdXBJbmZvID0ge1xyXG4gICAgICAgIGdyb3VwSW5mbzogZ3JvdXA/Lml0ZW0sXHJcbiAgICAgICAgcGFyZW50R3JvdXBJbmZvOiBlZGl0R3JvdXBQYXJlbnRJbmZvLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmVkaXRHcm91cENsaWNrLmVtaXQodGhpcy5lZGl0R3JvdXBBbmRQYXJlbnRHcm91cEluZm8pO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24/LmlkID09PSBHcm91cEFjdGlvbi5ERUxFVEVfR1JPVVApIHtcclxuICAgICAgdGhpcy5kZWxldGVHcm91cENsaWNrLmVtaXQoZ3JvdXA/Lml0ZW0pO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwQWN0aW9uPy5pZCA9PT0gR3JvdXBBY3Rpb24uTUFOQUdFX0lOVEVSRVNUX0ZPUk1cclxuICAgICkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXAgPSBncm91cDtcclxuICAgICAgdGhpcy5tYW5hZ2VJbnRlcmVzdEZvcm1DbGljay5lbWl0KGdyb3VwPy5pdGVtKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgZmlsdGVyZWQgbWVudSBpdGVtcyBiYXNlZCBvbiBncm91cHMgaGFzQ2hpbGRyZW4uXHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IGdyb3VwXHJcbiAgICogQHJldHVybiB7TWVudVtdfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldEZpbHRlcmVkR3JvdXBBY3Rpb25zKGdyb3VwOiBHcm91cE5vZGUpOiBNZW51W10ge1xyXG4gICAgY29uc3QgZmlsdGVyZWRNZW51OiBNZW51W10gPSBbXTtcclxuICAgIGNvbnN0IGlzQWRtaW5Hcm91cFR5cGUgPSBncm91cD8uaXRlbT8uZ3JvdXBUeXBlSW5mbz8uYnVzaW5lc3NSdWxlPy5pc0FkbWluO1xyXG4gICAgY29uc3QgZ3JvdXBQZXJtaXNzaW9ucyA9IGdyb3VwPy5pdGVtPy5wZXJtaXNzaW9ucztcclxuICAgIHRoaXMubWVudUl0ZW1zPy5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgIGUuaXNUb29sVGlwTmVlZGVkID0gZmFsc2U7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAoZT8uaWQgPT09IEdyb3VwQWN0aW9uLlZJRVdfUk9TVEVSICYmXHJcbiAgICAgICAgICAoKGlzQWRtaW5Hcm91cFR5cGUgJiZcclxuICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuTUFOQUdFX1NZU1RFTV9VU0VSUyxcclxuICAgICAgICAgICAgICBncm91cFBlcm1pc3Npb25zXHJcbiAgICAgICAgICAgICkpIHx8XHJcbiAgICAgICAgICAgICghaXNBZG1pbkdyb3VwVHlwZSAmJlxyXG4gICAgICAgICAgICAgICh0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLlZJRVdfR1JPVVBfT0ZGSUNFUlMsXHJcbiAgICAgICAgICAgICAgICBncm91cFBlcm1pc3Npb25zXHJcbiAgICAgICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLk1BTkFHRV9HUk9VUF9PRkZJQ0VSUyxcclxuICAgICAgICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLlZJRVdfR1JPVVBfTUVNQkVSUyxcclxuICAgICAgICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLlZJRVdfQUxMX1JPU1RFUlNcclxuICAgICAgICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5NQU5BR0VfR1JPVVBfTUVNQkVSUyxcclxuICAgICAgICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgICAgICAgKSkpKSkgfHxcclxuICAgICAgICAoZT8uaWQgPT09IEdyb3VwQWN0aW9uLkVESVRfR1JPVVAgJiZcclxuICAgICAgICAgICFpc0FkbWluR3JvdXBUeXBlICYmXHJcbiAgICAgICAgICAodGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLkVESVRfR1JPVVAsXHJcbiAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNcclxuICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuTUFOQUdFX0FMTF9HUk9VUFNcclxuICAgICAgICAgICAgKSkpIHx8XHJcbiAgICAgICAgKGU/LmlkID09PSBHcm91cEFjdGlvbi5ERUxFVEVfR1JPVVAgJiZcclxuICAgICAgICAgICFpc0FkbWluR3JvdXBUeXBlICYmXHJcbiAgICAgICAgICAodGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLkRFTEVURV9HUk9VUCxcclxuICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5NQU5BR0VfQUxMX0dST1VQU1xyXG4gICAgICAgICAgICApKSAmJlxyXG4gICAgICAgICAgIWdyb3VwPy5pdGVtPy5oYXNDaGlsZHJlbikgfHxcclxuICAgICAgICAoZT8uaWQgPT09IEdyb3VwQWN0aW9uLkNSRUFURV9TVUJfR1JPVVAgJiZcclxuICAgICAgICAgIGdyb3VwPy5pdGVtPy5ncm91cFR5cGVJbmZvPy5idXNpbmVzc1J1bGU/LmFsbG93U3ViR3JvdXAgJiZcclxuICAgICAgICAgICh0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuQ1JFQVRFX1NVQkdST1VQLFxyXG4gICAgICAgICAgICBncm91cFBlcm1pc3Npb25zXHJcbiAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLk1BTkFHRV9BTExfR1JPVVBTXHJcbiAgICAgICAgICAgICkpICYmXHJcbiAgICAgICAgICAhaXNBZG1pbkdyb3VwVHlwZSkgfHxcclxuICAgICAgICAvLyBUT0RPOiBHYXRlIHdpdGggTUFOQUdFX0NVU1RPTV9JTlRFUkVTVF9RVUVTVElPTlMgcGVybWlzc2lvbiAoU1AzTS0zODApXHJcbiAgICAgICAgLy8gb25jZSBwZXJtaXNzaW9ucyBhcmUgaW1wbGVtZW50ZWQuIFNob3duIHVuY29uZGl0aW9uYWxseSBmb3Igbm93IHRvXHJcbiAgICAgICAgLy8gc3VwcG9ydCBVSSBkZXZlbG9wbWVudC5cclxuICAgICAgICBlPy5pZCA9PT0gR3JvdXBBY3Rpb24uTUFOQUdFX0lOVEVSRVNUX0ZPUk1cclxuICAgICAgKSB7XHJcbiAgICAgICAgZmlsdGVyZWRNZW51LnB1c2goZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLy8gU2hvdyB0aGUgTWFuYWdlIEludGVyZXN0IEZvcm0gYWN0aW9uIGZpcnN0IChsZWZ0bW9zdCkgcGVyIHRoZSBkZXNpZ24uXHJcbiAgICBmaWx0ZXJlZE1lbnUuc29ydCgobWVudUEsIG1lbnVCKSA9PiB7XHJcbiAgICAgIGlmIChtZW51QT8uaWQgPT09IEdyb3VwQWN0aW9uLk1BTkFHRV9JTlRFUkVTVF9GT1JNKSByZXR1cm4gLTE7XHJcbiAgICAgIGlmIChtZW51Qj8uaWQgPT09IEdyb3VwQWN0aW9uLk1BTkFHRV9JTlRFUkVTVF9GT1JNKSByZXR1cm4gMTtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBmaWx0ZXJlZE1lbnU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFRha2VzIHRoZSBpbmRleCBhbmQgdGhlIGljb24gYnV0dG9uIGFzIGFyZ3VtZW50cyBhbmQgbmVlZHMgdG8gcmV0dXJuIHRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBpY29uIGJ1dHRvbi5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcclxuICAgKiBAcGFyYW0ge0ljb25CdXR0b259IGljb25CdXR0b25cclxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIGljb25CdXR0b246IEljb25CdXR0b24pOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGljb25CdXR0b24uaWQ7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE5nT25EZXN0cm95IHBlcmZvcm1zIG5lY2Vzc2FyeSBjbGVhbnVwIHRhc2tzLCBzdWNoIGFzIHVuc3Vic2NyaWJpbmcgZnJvbSBzdWJzY3JpcHRpb24gd2hlbiB0aGUgY29tcG9uZW50IGlzIGJlaW5nIGRlc3Ryb3llZC5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJpZWVlc2EtdHJlZVwiPlxyXG4gIDxtYXQtdHJlZVxyXG4gICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXHJcbiAgICBbdHJlZUNvbnRyb2xdPVwidHJlZUNvbnRyb2xcIlxyXG4gICAgY2xhc3M9XCJpZWVlc2EtdHJlZV9fcm9vdFwiXHJcbiAgICAjcm9vdFNlbGVjdG9yXHJcbiAgICByb2xlPVwidHJlZWdyaWRcIlxyXG4gID5cclxuICAgIDxtYXQtdHJlZS1ub2RlXHJcbiAgICAgICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlXCJcclxuICAgICAgbWF0VHJlZU5vZGVQYWRkaW5nXHJcbiAgICAgIFttYXRUcmVlTm9kZVBhZGRpbmdJbmRlbnRdPVwidHJlZVBhZGRpbmdJbmRlbnRcIlxyXG4gICAgICBjbGFzcz1cImllZWVzYS1ib2R5LW1kLTE2XCJcclxuICAgID5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiaWVlZXNhLXRyZWVfX25vZGUgdy0xMDAgZC1mbGV4XCJcclxuICAgICAgICBbbmdTdHlsZV09XCJnZXRCb3hTaGFkb3coKVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICBub2RlPy5pdGVtPy5ncm91cFBhcmVudElkICYmXHJcbiAgICAgICAgICBncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgIT09IGdyb3VwRnVuY3Rpb25UeXBlLkZJTFRFUiAmJlxyXG4gICAgICAgICAgZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpICE9PSBncm91cEZ1bmN0aW9uVHlwZS5TRUFSQ0hcclxuICAgICAgICAgICAgPyAnaWVlZXNhLXRyZWVfX3Jvb3Qtbm9kZS13aGl0ZS1iZydcclxuICAgICAgICAgICAgOiAnaWVlZXNhLXRyZWVfX3Jvb3Qtbm9kZSdcclxuICAgICAgICBcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICFpc0dyb3VwU2VhcmNoT3JGaWx0ZXJBY3RpdmUgPyAnaWVlZXNhLXRyZWVfX2NvbGxhcHNlLWljb24nIDogJydcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxyXG4gICAgICAgID48L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICBpZWVlc2FHcm91cE5vZGVPdXRsZXQ7XHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBub2RlIH1cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LXRyZWUtbm9kZT5cclxuICAgIDxtYXQtdHJlZS1ub2RlXHJcbiAgICAgICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlOyB3aGVuOiBoYXNDaGlsZEdyb3Vwc1wiXHJcbiAgICAgIG1hdFRyZWVOb2RlUGFkZGluZ1xyXG4gICAgICBbbWF0VHJlZU5vZGVQYWRkaW5nSW5kZW50XT1cInRyZWVQYWRkaW5nSW5kZW50XCJcclxuICAgICAgY2xhc3M9XCJpZWVlc2EtYm9keS1tZC0xNiBpZWVlc2EtdHJlZV9fcGFyZW50LW5vZGUtd3JhcHBlclwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBbbmdDbGFzc109XCJbXHJcbiAgICAgICAgICB0cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpID8gJ2llZWVzYS10cmVlX19leHBhbmRlZCcgOiAnJyxcclxuICAgICAgICAgIG5vZGU/Lml0ZW0/Lmdyb3VwUGFyZW50SWQgJiZcclxuICAgICAgICAgIGdyb3Vwc1NlcnZpY2UuZ2V0R3JvdXBGdW5jdGlvblR5cGUoKSAhPT0gZ3JvdXBGdW5jdGlvblR5cGUuRklMVEVSICYmXHJcbiAgICAgICAgICBncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgIT09IGdyb3VwRnVuY3Rpb25UeXBlLlNFQVJDSFxyXG4gICAgICAgICAgICA/ICdpZWVlc2EtdHJlZV9fcm9vdC1ub2RlLXdoaXRlLWJnJ1xyXG4gICAgICAgICAgICA6ICdpZWVlc2EtdHJlZV9fcm9vdC1ub2RlJ1xyXG4gICAgICAgIF1cIlxyXG4gICAgICAgIGNsYXNzPVwiaWVlZXNhLXRyZWVfX25vZGUgdy0xMDAgZC1mbGV4XCJcclxuICAgICAgICBbbmdTdHlsZV09XCJnZXRCb3hTaGFkb3coKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2IHJvbGU9XCJncmlkY2VsbFwiPlxyXG4gICAgICAgICAgPGllZWVzYS1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAqbmdJZj1cIiFpc0dyb3VwU2VhcmNoT3JGaWx0ZXJBY3RpdmVcIlxyXG4gICAgICAgICAgICAoaWNvbkJ1dHRvbkNsaWNrKT1cInZpZXdDaGlsZEdyb3Vwcyhub2RlKVwiXHJcbiAgICAgICAgICAgIFtpY29uQnV0dG9uXT1cImdldFRvZ2dsZUJ1dHRvbkluZm8obm9kZSlcIlxyXG4gICAgICAgICAgPjwvaWVlZXNhLWljb24tYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgIGllZWVzYUdyb3VwTm9kZU91dGxldDtcclxuICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IG5vZGUgfVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtdHJlZS1ub2RlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNpZWVlc2FHcm91cE5vZGVPdXRsZXQgbGV0LW5vZGU+XHJcbiAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImllZWVzYUdyb3VwSW5mb091dGxldDsgY29udGV4dDogeyAkaW1wbGljaXQ6IG5vZGUgfVwiXHJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGQtbm9uZSBnYXAtMyBkLXNtLWZsZXggZC1tZC1mbGV4IGQtbGctZmxleCBpZWVlc2EtdHJlZV9fZ3JvdXAtYWN0aW9uc1wiXHJcbiAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgIGllZWVzYUdyb3VwQWN0aW9uc091dGxldDtcclxuICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IG5vZGUgfVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8aWVlZXNhLW1lbnVcclxuICAgICAgICBbYnV0dG9uXT1cImNvbnN0YW50cz8udmlld0dyb3Vwcz8uZ3JvdXBBY3Rpb25zTWVudVwiXHJcbiAgICAgICAgW21lbnVJdGVtc109XCJnZXRGaWx0ZXJlZEdyb3VwQWN0aW9ucyhub2RlKVwiXHJcbiAgICAgICAgKG1lbnVJdGVtQ2xpY2spPVwib25Hcm91cEFjdGlvbnNDbGljaygkZXZlbnQpOyBoYW5kbGVHcm91cEFjdGlvbnMobm9kZSlcIlxyXG4gICAgICAgIGNsYXNzPVwiZC1sZy1ub25lIGQtbWQtbm9uZSBkLXNtLW5vbmVcIlxyXG4gICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXHJcbiAgICAgID48L2llZWVzYS1tZW51PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjaWVlZXNhR3JvdXBJbmZvT3V0bGV0IGxldC1ub2RlPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaWVlZXNhLXRyZWVfX2dyb3VwLWluZm8td3JhcHBlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZWVlc2EtdHJlZV9fZ3JvdXAtaW5mbyBkLWZsZXggYWxpZ24taXRlbXMtYmFzZWxpbmVcIj5cclxuICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLXRyZWVfX25vZGUtZ3JvdXAtbmFtZSBpZWVlc2EtdGl0bGUtbWQtMThcIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJub2RlPy5pdGVtPy5ncm91cE5hbWVcIlxyXG4gICAgICAgICAgICBpZWVlc2FUZXh0VHJ1bmNhdGVkXHJcbiAgICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXHJcbiAgICAgICAgICA+e3sgbm9kZT8uaXRlbT8uZ3JvdXBOYW1lIH19PC9wPlxyXG4gICAgICAgICAgPHBcclxuICAgICAgICAgICAgY2xhc3M9XCJpZWVlc2EtdHJlZV9fbm9kZS1ncm91cC1hY3JvbnltIGllZWVzYS10aXRsZS1zbS0xNlwiXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIm5vZGU/Lml0ZW0/Lmdyb3VwQWNyb255bVwiXHJcbiAgICAgICAgICAgIGllZWVzYVRleHRUcnVuY2F0ZWRcclxuICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcclxuICAgICAgICAgID57eyBub2RlPy5pdGVtPy5ncm91cEFjcm9ueW0gfX08L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImllZWVzYS10cmVlX19ub2RlLWdyb3VwLWRlc2NcIj5cclxuICAgICAgICAgIHt7IG5vZGU/Lml0ZW0/Lmdyb3VwVHlwZUluZm8/Lm5hbWUgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNpZWVlc2FHcm91cEFjdGlvbnNPdXRsZXQgbGV0LW5vZGU+XHJcbiAgICAgIDxpZWVlc2EtaWNvbi1idXR0b25cclxuICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRGaWx0ZXJlZEdyb3VwQWN0aW9ucyhub2RlKTsgdHJhY2tCeTogdHJhY2tCeUZuXCJcclxuICAgICAgICBbaWNvbkJ1dHRvbl09XCJpdGVtXCJcclxuICAgICAgICAoaWNvbkJ1dHRvbkNsaWNrKT1cIlxyXG4gICAgICAgICAgb25Hcm91cEFjdGlvbnNDbGljaygkZXZlbnQpOyBoYW5kbGVHcm91cEFjdGlvbnMobm9kZSlcclxuICAgICAgICBcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvaWVlZXNhLWljb24tYnV0dG9uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L21hdC10cmVlPlxyXG48L2Rpdj5cclxuIl19