tango-app-ui-analyse-trax 3.6.1 → 3.6.2-bulktask-2

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 (43) hide show
  1. package/esm2022/lib/components/action-centre/action-centre.component.mjs +3 -3
  2. package/esm2022/lib/components/activity-log-v2/activity-log-v2.component.mjs +3 -2
  3. package/esm2022/lib/components/activity-log-v2/log-view-popup/store-user-dropdown/store-user-dropdown.component.mjs +3 -3
  4. package/esm2022/lib/components/activity-log-v2/log-view-popup/view-action/view-action.component.mjs +3 -3
  5. package/esm2022/lib/components/add-multitask/add-multitask.component.mjs +538 -0
  6. package/esm2022/lib/components/add-multitask/bulkcreationmodel/bulkcreationmodel.component.mjs +269 -0
  7. package/esm2022/lib/components/add-multitask/create-task.data.mjs +306 -0
  8. package/esm2022/lib/components/add-multitask/create-task.interface.mjs +2 -0
  9. package/esm2022/lib/components/add-multitask/unique-string-validator.mjs +10 -0
  10. package/esm2022/lib/components/add-multitask/whitespace-validator.mjs +10 -0
  11. package/esm2022/lib/components/add-task/add-task.component.mjs +3 -1
  12. package/esm2022/lib/components/checklist-configure/checklist-configure.component.mjs +3 -3
  13. package/esm2022/lib/components/dashboard/dashboard.component.mjs +3 -3
  14. package/esm2022/lib/components/dashboard-info/dashboard-info.component.mjs +1 -1
  15. package/esm2022/lib/components/disabled-select/disabled-select.component.mjs +158 -0
  16. package/esm2022/lib/components/flags/flags.component.mjs +1 -1
  17. package/esm2022/lib/components/flags-info/flags-info.component.mjs +1 -1
  18. package/esm2022/lib/components/gallery/gallery.component.mjs +170 -24
  19. package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +6 -3
  20. package/esm2022/lib/components/task-configure/task-configure.component.mjs +5 -5
  21. package/esm2022/lib/components/task-info/task-info.component.mjs +1 -1
  22. package/esm2022/lib/services/trax.service.mjs +17 -2
  23. package/esm2022/lib/tango-analyse-trax.module.mjs +12 -5
  24. package/fesm2022/{tango-app-ui-analyse-trax-eye-test-audit.module-BeDM0cg8.mjs → tango-app-ui-analyse-trax-eye-test-audit.module-B6bePYMW.mjs} +7 -7
  25. package/fesm2022/{tango-app-ui-analyse-trax-eye-test-audit.module-BeDM0cg8.mjs.map → tango-app-ui-analyse-trax-eye-test-audit.module-B6bePYMW.mjs.map} +1 -1
  26. package/fesm2022/{tango-app-ui-analyse-trax-tango-app-ui-analyse-trax-CscGaVfu.mjs → tango-app-ui-analyse-trax-tango-app-ui-analyse-trax-IHj5-6FY.mjs} +1670 -241
  27. package/fesm2022/tango-app-ui-analyse-trax-tango-app-ui-analyse-trax-IHj5-6FY.mjs.map +1 -0
  28. package/fesm2022/tango-app-ui-analyse-trax.mjs +1 -1
  29. package/lib/components/activity-log-v2/activity-log-v2.component.d.ts +1 -0
  30. package/lib/components/add-multitask/add-multitask.component.d.ts +95 -0
  31. package/lib/components/add-multitask/bulkcreationmodel/bulkcreationmodel.component.d.ts +42 -0
  32. package/lib/components/add-multitask/create-task.data.d.ts +244 -0
  33. package/lib/components/add-multitask/create-task.interface.d.ts +147 -0
  34. package/lib/components/add-multitask/unique-string-validator.d.ts +2 -0
  35. package/lib/components/add-multitask/whitespace-validator.d.ts +2 -0
  36. package/lib/components/disabled-select/disabled-select.component.d.ts +34 -0
  37. package/lib/components/gallery/gallery.component.d.ts +19 -1
  38. package/lib/components/reactive-select/reactive-select.component.d.ts +2 -2
  39. package/lib/components/task-configure/task-configure.component.d.ts +2 -2
  40. package/lib/services/trax.service.d.ts +5 -1
  41. package/lib/tango-analyse-trax.module.d.ts +11 -8
  42. package/package.json +1 -1
  43. package/fesm2022/tango-app-ui-analyse-trax-tango-app-ui-analyse-trax-CscGaVfu.mjs.map +0 -1
@@ -6,6 +6,7 @@ import { ExportGalleryComponent } from '../export-gallery/export-gallery.compone
6
6
  import { AddTaskComponent } from '../add-task/add-task.component';
7
7
  import { TaskLogsComponent } from '../task-logs/task-logs.component';
8
8
  import { ApprovalPopupComponent } from '../approval-popup/approval-popup.component';
9
+ import { BulkcreationmodelComponent } from '../add-multitask/bulkcreationmodel/bulkcreationmodel.component';
9
10
  import * as i0 from "@angular/core";
10
11
  import * as i1 from "@angular/forms";
11
12
  import * as i2 from "tango-app-ui-global";
@@ -120,6 +121,11 @@ export class GalleryComponent {
120
121
  approveFilter = 'all';
121
122
  userDetails;
122
123
  timeoutId;
124
+ selectedStores = [];
125
+ selectedUsers = [];
126
+ inputDataTask;
127
+ otherTaskData;
128
+ refImage = [];
123
129
  constructor(fb, gs, traxService, cd, modalService, route, router, toastService, location, pageInfo) {
124
130
  this.fb = fb;
125
131
  this.gs = gs;
@@ -1680,6 +1686,101 @@ export class GalleryComponent {
1680
1686
  }
1681
1687
  });
1682
1688
  }
1689
+ createMultipleTask(type) {
1690
+ const modalRef = this.modalService.open(BulkcreationmodelComponent, {
1691
+ centered: true,
1692
+ size: 'md',
1693
+ });
1694
+ modalRef.componentInstance.type = type;
1695
+ modalRef.componentInstance.filtertype = this.galleryForm.value.filtertype;
1696
+ modalRef.componentInstance.taskDetails = {
1697
+ sections: [
1698
+ {
1699
+ "id": "",
1700
+ "name": "",
1701
+ "questions": [this.inputDataTask]
1702
+ }
1703
+ ]
1704
+ };
1705
+ modalRef.componentInstance.sourceCheckList_id = this.galleryForm.value.sourceCheckList_id;
1706
+ modalRef.componentInstance.payload = {
1707
+ coverage: this.galleryForm.value.filtertype === 'Teams' ? "user" : "store",
1708
+ selectedStores: this.selectedStores,
1709
+ selectedUsers: this.selectedUsers,
1710
+ operationtype: this.galleryForm.value.type,
1711
+ inputData: this.inputDataTask,
1712
+ sectionInfo: this.otherTaskData.sectionInfo,
1713
+ refImage: this.refImage,
1714
+ checklistName: this.galleryForm.value.checklistName,
1715
+ };
1716
+ modalRef.result.then((result) => {
1717
+ this.selectedStores = [];
1718
+ this.selectedUsers = [];
1719
+ if (result == 'submit') {
1720
+ this.showsingle = false;
1721
+ this.showmulti = true;
1722
+ if (this.galleryForm.value.type === 'checklist') {
1723
+ this.getChecklistQA(false);
1724
+ }
1725
+ else {
1726
+ this.getTaskQA(this.galleryForm.value.type);
1727
+ }
1728
+ }
1729
+ else {
1730
+ this.showsingle = false;
1731
+ this.showmulti = true;
1732
+ if (this.galleryForm.value.type === 'checklist') {
1733
+ this.getChecklistQA(false);
1734
+ }
1735
+ else {
1736
+ this.getTaskQA(this.galleryForm.value.type);
1737
+ }
1738
+ }
1739
+ });
1740
+ }
1741
+ selectedmultiTask(event, checklist, data, checklistInfo, sectionInfo) {
1742
+ let answer = [];
1743
+ answer = data.userAnswer.map((data) => data.answer);
1744
+ console.log(answer);
1745
+ if (event.target.checked) {
1746
+ this.inputDataTask = data;
1747
+ this.refImage = [...this.refImage, ...answer];
1748
+ console.log(this.refImage);
1749
+ this.otherTaskData = {
1750
+ sectionInfo: sectionInfo,
1751
+ };
1752
+ if (this.galleryForm.value.filtertype === 'Clusters') {
1753
+ console.log(checklist.storeProfile);
1754
+ this.selectedStores.push({
1755
+ section_id: sectionInfo.section_id,
1756
+ storeId: checklist.storeProfile.store_id,
1757
+ storeName: checklist.storeProfile.storeName,
1758
+ checklistId: checklistInfo.checklistId,
1759
+ userEmail: checklist.checklistInfo.userEmail,
1760
+ uniqueNo: data.uniqueNo
1761
+ });
1762
+ }
1763
+ else {
1764
+ this.selectedUsers.push({
1765
+ section_id: sectionInfo.section_id,
1766
+ userEmail: checklist.checklistInfo.userEmail,
1767
+ userName: checklist.checklistInfo.userName,
1768
+ checklistId: checklistInfo.checklistId,
1769
+ uniqueNo: data.uniqueNo
1770
+ });
1771
+ }
1772
+ }
1773
+ else {
1774
+ console.log(this.selectedStores);
1775
+ this.refImage = this.refImage.filter((data) => data.answer);
1776
+ if (this.galleryForm.value.filtertype === 'Clusters') {
1777
+ this.selectedStores = this.selectedStores.filter((data) => data.checklistId != checklistInfo.checklistId);
1778
+ }
1779
+ else {
1780
+ this.selectedUsers = this.selectedUsers.filter((data) => data.checklistId != checklistInfo.checklistId);
1781
+ }
1782
+ }
1783
+ }
1683
1784
  selectsinglequestion() {
1684
1785
  this.selectedSection = this.tempselectedSection;
1685
1786
  if (this.questionscount(this.selectedSection) == 0 || this.questionscount(this.selectedSection) > 1) {
@@ -1904,12 +2005,8 @@ export class GalleryComponent {
1904
2005
  this.checklistData = res?.data.checklistQuestions;
1905
2006
  this.loading = false;
1906
2007
  this.noData = false;
1907
- if (this.galleryForm.value.filtertype === 'Clusters') {
1908
- this.galleryForm.get('storeList')?.setValue(res?.data?.storesDetails);
1909
- }
1910
- else {
1911
- this.galleryForm.get('userList')?.setValue(res?.data?.storesDetails);
1912
- }
2008
+ const targetField = this.galleryForm.value.filtertype === 'Clusters' ? 'storeList' : 'userList';
2009
+ this.galleryForm.get(targetField)?.setValue(res?.data?.storesDetails);
1913
2010
  this.viewChecklists("all", "all");
1914
2011
  }
1915
2012
  else {
@@ -2471,8 +2568,6 @@ export class GalleryComponent {
2471
2568
  // }
2472
2569
  data.questionReferenceImage = [data.questionReferenceImage];
2473
2570
  const modalRef = this.modalService.open(AddTaskComponent, {
2474
- centered: true, size: 'lg',
2475
- windowClass: 'custom-modal-height',
2476
2571
  backdrop: 'static'
2477
2572
  });
2478
2573
  modalRef.componentInstance.type = type;
@@ -2497,6 +2592,8 @@ export class GalleryComponent {
2497
2592
  ]
2498
2593
  };
2499
2594
  modalRef.result.then((result) => {
2595
+ this.selectedStores = [];
2596
+ this.selectedUsers = [];
2500
2597
  if (result == 'submit') {
2501
2598
  if (this.galleryForm.value.type === 'checklist') {
2502
2599
  this.getChecklistQA(false);
@@ -2605,37 +2702,59 @@ export class GalleryComponent {
2605
2702
  getGridColumns(length) {
2606
2703
  if (length === 1)
2607
2704
  return '1fr';
2608
- if (length === 2)
2609
- return 'repeat(2, 1fr)';
2610
- if (length === 3)
2611
- return 'repeat(3, 1fr)';
2612
- if (length === 4)
2705
+ if (length === 2 || length === 4 || length === 3)
2613
2706
  return 'repeat(2, 1fr)';
2614
- if (length <= 6)
2707
+ if (length === 5 || length === 6)
2615
2708
  return 'repeat(3, 1fr)';
2616
- if (length === 7 || length === 8)
2617
- return 'repeat(4, 1fr)';
2618
- if (length <= 10)
2619
- return 'repeat(5, 1fr)';
2620
- return 'repeat(6, 1fr)';
2709
+ // if (length === 7 || length === 8) return 'repeat(4, 1fr)';
2710
+ // if (length <= 10) return 'repeat(5, 1fr)';
2711
+ return 'repeat(3, 1fr)';
2712
+ }
2713
+ getGridRowHeight(length) {
2714
+ if (length <= 2)
2715
+ return '450px';
2716
+ return '220px';
2621
2717
  }
2622
2718
  hasReferenceImages(question) {
2623
- return question?.answers?.some((a) => Array.isArray(a.referenceImage) && a.referenceImage.length > 0);
2719
+ return question?.answers?.some((a) => {
2720
+ const ref = a.referenceImage;
2721
+ return ((Array.isArray(ref) && ref.length > 0) ||
2722
+ (typeof ref === 'string' && ref.trim() !== ''));
2723
+ });
2624
2724
  }
2625
2725
  hasChecklistReferenceImages(question) {
2626
- return question?.answers?.some((a) => a.referenceImage);
2726
+ return question?.answers?.some((a) => {
2727
+ const ref = a.referenceImage;
2728
+ return ((Array.isArray(ref) && ref.length > 0) ||
2729
+ (typeof ref === 'string' && ref.trim() !== ''));
2730
+ });
2731
+ }
2732
+ hasQuestionReferenceImages(question) {
2733
+ return question.questionReferenceImage?.length > 0 &&
2734
+ question.questionReferenceImage[0] !== '';
2735
+ }
2736
+ isValidImage(item) {
2737
+ return item && item !== '' && item !== null;
2627
2738
  }
2628
2739
  selectedImageUrl = '';
2629
2740
  selectedImageName = '';
2630
2741
  currentImageIndex = 0;
2631
2742
  imageList = [];
2632
2743
  imageNameList = [];
2744
+ openImagePopup1(images, index) {
2745
+ this.imageList = images;
2746
+ this.currentImageIndex = index;
2747
+ this.selectedImageUrl = this.imageList;
2748
+ const modal = new window.bootstrap.Modal(document.getElementById('imageModal1'));
2749
+ modal.show();
2750
+ }
2633
2751
  openImagePopup(images, names, index) {
2634
2752
  this.imageList = images;
2635
2753
  this.imageNameList = names;
2636
2754
  this.currentImageIndex = index;
2637
2755
  this.selectedImageUrl = this.imageList[this.currentImageIndex];
2638
2756
  this.selectedImageName = this.imageNameList[this.currentImageIndex];
2757
+ console.log("12321313", this.imageList, index);
2639
2758
  const modal = new window.bootstrap.Modal(document.getElementById('imageModal'));
2640
2759
  modal.show();
2641
2760
  }
@@ -2655,12 +2774,39 @@ export class GalleryComponent {
2655
2774
  getImageNames(userAnswers) {
2656
2775
  return userAnswers.map(a => a.answer);
2657
2776
  }
2777
+ getRefchecklistImageUrls(userAnswers) {
2778
+ return userAnswers.map(a => this.environment.TraxAnswerCDN + a.referenceImage);
2779
+ }
2780
+ getRefchecklistImageNames(userAnswers) {
2781
+ return userAnswers.map(a => a.referenceImage);
2782
+ }
2783
+ getQustRefchecklistImageUrls(userAnswers) {
2784
+ return userAnswers.map(a => this.environment.TraxAnswerCDN + a.questionReferenceImage);
2785
+ }
2786
+ getQustRefchecklistImageNames(userAnswers) {
2787
+ return userAnswers.map(a => a.questionReferenceImage);
2788
+ }
2789
+ getRefImageUrls(userAnswers) {
2790
+ return userAnswers.map(a => this.environment.TraxAnswerCDN + a);
2791
+ }
2792
+ getRefImageNames(userAnswers) {
2793
+ return userAnswers.map(a => a);
2794
+ }
2795
+ downloadVideo(fileName) {
2796
+ const url = this.environment.TraxAnswerCDN + fileName;
2797
+ const a = document.createElement('a');
2798
+ a.href = url;
2799
+ a.download = fileName.split('/').pop() || 'video.mp4'; // extract file name
2800
+ document.body.appendChild(a);
2801
+ a.click();
2802
+ document.body.removeChild(a);
2803
+ }
2658
2804
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: GalleryComponent, deps: [{ token: i1.FormBuilder }, { token: i2.GlobalStateService }, { token: i3.TraxService }, { token: i0.ChangeDetectorRef }, { token: i4.NgbModal }, { token: i5.ActivatedRoute }, { token: i5.Router }, { token: i6.ToastService }, { token: i7.Location }, { token: i2.PageInfoService }], target: i0.ɵɵFactoryTarget.Component });
2659
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: GalleryComponent, selector: "lib-gallery", host: { listeners: { "document:click": "onClick($event)" } }, viewQueries: [{ propertyName: "zoomPopup", first: true, predicate: ["zoomPopup"], descendants: true }], ngImport: i0, template: "\r\n<div *ngIf=\"notifyCount>0\" class=\"h-xl-100 flex-row flex-stack flex-wrap p-2\">\r\n <!-- toast card starts -->\r\n <div class=\"toastcard col-md-12 mb-4\">\r\n <div class=\"d-flex align-items-center justify-content-between w-100\">\r\n <span class=\"align-items-start\">\r\n <span class=\"toasttext d-block\"><span class=\"me-5\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"20\" viewBox=\"0 0 16 20\" fill=\"none\">\r\n <path d=\"M9.14234 2.4V1.6875C9.14234 1.03178 8.63166 0.5 7.99955 0.5C7.36744 0.5 6.85675 1.03178 6.85675 1.6875V2.4C4.21761 2.95033 2.28558 5.34649 2.28558 8.21875V8.91641C2.28558 10.6643 1.66918 12.3453 0.553532 13.6516L0.28869 13.9596C-0.0103044 14.3121 -0.0840396 14.8094 0.100307 15.2361C0.284654 15.6629 0.69281 15.9375 1.14279 15.9375H14.8563C15.3063 15.9375 15.7134 15.6629 15.8991 15.2361C16.0848 14.8094 16.0098 14.3121 15.7098 13.9596L15.4456 13.6516C14.3313 12.3453 13.7135 10.6643 13.7135 8.91641V8.21875C13.7135 7.94125 13.6952 7.66819 13.6597 7.40081C13.2676 7.54576 12.8432 7.625 12.4 7.625C10.4118 7.625 8.8 6.03001 8.8 4.0625C8.8 3.46778 8.88193 2.89289 9.14234 2.4C9.16417 2.40461 9.12061 2.39514 9.14234 2.4Z\" fill=\"#00A3FF\"/>\r\n <path d=\"M6.38178 18.8061C6.81033 19.2514 7.39244 19.5 7.99955 19.5C8.57452 19.5 9.18877 19.2514 9.61732 18.8061C10.0459 18.3607 10.2851 17.7225 10.2851 17.125H5.71396C5.71396 17.7225 5.95323 18.3607 6.38178 18.8061Z\" fill=\"#00A3FF\"/>\r\n <circle cx=\"13\" cy=\"3.5\" r=\"3\" fill=\"#F04438\"/>\r\n </svg>\r\n </span>New Detection Found! Refresh Now to view new detection</span>\r\n </span>\r\n <button (click)=\"refreshnow()\" type=\"button\" class=\"btn-outline btn align-items-end text-nowrap ms-4 cursor-pointer\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_12165_62781)\">\r\n <path d=\"M19.1672 3.33172V8.33172M19.1672 8.33172H14.1672M19.1672 8.33172L15.3089 4.69838C14.1594 3.54817 12.6672 2.80271 11.0572 2.57434C9.44716 2.34597 7.80653 2.64706 6.38251 3.43225C4.9585 4.21744 3.82826 5.44418 3.1621 6.92761C2.49595 8.41104 2.32997 10.0708 2.68919 11.6568C3.0484 13.2427 3.91335 14.669 5.15368 15.7206C6.39401 16.7722 7.94254 17.3922 9.5659 17.4872C11.1893 17.5822 12.7995 17.147 14.154 16.2471C15.5085 15.3473 16.5339 14.0316 17.0756 12.4984\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_12165_62781\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"refreshtext ms-2\"></span> Refresh Now </button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"gallery-card po\">\r\n <div class=\"header mb-4\">Gallery</div>\r\n\r\n <form [formGroup]=\"galleryForm\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3 mb-3\">\r\n <div class=\"position-relative\">\r\n <span style=\"top: 20%;\" class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input class=\"fx-date-range form-control ps-14 z-2\" style=\"min-width: 260px !important;\"\r\n type=\"text\" matInput ngxDaterangepickerMd [drops]=\"'down'\"\r\n [opens]=\"'right'\" [alwaysShowCalendars]=\"false\" [keepCalendarOpeningWithRange]=\"true\"\r\n [showCancel]=\"false\" autocomplete=\"off\" [(ngModel)]=\"selectedDateRange\"\r\n [ngModelOptions]=\"{standalone: true}\" (datesUpdated)=\"datechange($event)\" (click)=\"resetValidation()\" \r\n (startDateChanged)=\"onStartDateChange($event)\" [isCustomDate]=\"isCustomDate\" [autoApply]=\"true\" \r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n name=\"daterange\" [readonly]=\"true\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 mb-4\">\r\n <lib-reactive-select formControlName=\"type\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"type\" (itemChange)=\"typeChange($event)\" ></lib-reactive-select>\r\n </div>\r\n <div class=\"col-md-4 mb-4\">\r\n <lib-single-select [items]=\"checklists\" [multi]=\"false\" [searchField]=\"'checkListName'\" [idField]=\"'_id'\"\r\n (selected)=\"checklistNamechange($event,false)\" [selectedValues]=\"[{checkListName:galleryForm.get('checklistName')?.value}]\"></lib-single-select>\r\n </div> \r\n <div class=\"col-md-3 mb-4\">\r\n <lib-reactive-select formControlName=\"answerType\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"answerType\"></lib-reactive-select>\r\n </div>\r\n <div class=\"col-md-2 mb-4\">\r\n\r\n <lib-reactive-select formControlName=\"filtertype\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"filtertype\" (itemChange)=\"filterChange($event)\" ></lib-reactive-select>\r\n\r\n </div>\r\n <div class=\"col-md-3 mb-4\" *ngIf=\"galleryForm.get('filtertype')?.value ==='Clusters'\">\r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(galleryForm.get('ClusterList')?.value?.length)\">\r\n Select cluster\r\n </div>\r\n <lib-group-select [items]=\"ClusterList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'groupName'\"\r\n [idField]=\"'groupName'\" (selected)=\"ongroupSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('ClusterList')?.value\">\r\n </lib-group-select>\r\n </div>\r\n \r\n </div>\r\n <div class=\"col-md-3 mb-4\" *ngIf=\"galleryForm.get('filtertype')?.value ==='Teams'\">\r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(galleryForm.get('TeamsList')?.value?.length)\">\r\n Select Teams\r\n </div>\r\n <lib-group-select [items]=\"TeamsList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'teamName'\"\r\n [idField]=\"'teamName'\" (selected)=\"onTeamsSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('TeamsList')?.value\">\r\n </lib-group-select>\r\n </div>\r\n \r\n </div>\r\n <div class=\"col-md-3 mb-4\" *ngIf=\"galleryForm.get('filtertype')?.value ==='Clusters'\">\r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(galleryForm.get('storeList')?.value?.length)\">\r\n Select Stores\r\n </div>\r\n <lib-stores-select [items]=\"storeList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'storeName'\"\r\n [idField]=\"'storeId'\" (selected)=\"onStoreSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('storeList')?.value\"></lib-stores-select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 mb-4\" *ngIf=\"galleryForm.get('filtertype')?.value ==='Teams'\">\r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(galleryForm.get('userList')?.value?.length)\">\r\n Select users\r\n </div>\r\n <lib-stores-select [items]=\"userList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'userName'\"\r\n [idField]=\"'userName'\" (selected)=\"onUserSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('userList')?.value\"></lib-stores-select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4 text-end\"> \r\n <div class=\"d-flex justify-content-end\"> \r\n <div class=\"me-5 w-100\" *ngIf=\"select === 'eyetest'\">\r\n <select class=\"form-select\" [(ngModel)]=\"category\" [ngModelOptions]=\"{standalone: true}\">\r\n <option value=\"all\">All</option>\r\n <option value=\"adults\">Adults</option>\r\n <option value=\"kids\">Kids</option>\r\n </select>\r\n </div>\r\n <div class=\"me-5 w-100\" *ngIf=\"select === 'cleaning'||select ==='scrum'\">\r\n <select class=\"form-select\" [(ngModel)]=\"category\" [ngModelOptions]=\"{standalone: true}\">\r\n <option value=\"all\">All</option>\r\n <option value=\"rejected\">Breached</option>\r\n <option value=\"approved\">Not-breached</option>\r\n </select>\r\n </div>\r\n <div class=\"me-5 w-100 text-start\" *ngIf=\"select === 'queuealert'\"> \r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(galleryForm.get('zoneList')?.value?.length)\" >\r\n Select Zone\r\n </div> \r\n <lib-stores-select [items]=\"zoneList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'value'\"\r\n [idField]=\"'key'\" (selected)=\"onzoneSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('zoneList')?.value\"></lib-stores-select>\r\n </div>\r\n </div>\r\n <div class=\"me-5 w-50\" *ngIf=\"showflag\">\r\n <select class=\"form-select\" (change)=\"approveFilterChange($event)\" [(ngModel)]=\"approveFilter\" [ngModelOptions]=\"{standalone: true}\">\r\n <option value=\"all\">All</option>\r\n <option value=\"Approved\">Approved</option>\r\n <option value=\"notapproved\">Not-Approved</option>\r\n </select>\r\n </div>\r\n <span class=\"me-4 mt-3\" *ngIf=\"showflag\"> \r\n <input formControlName=\"viewRedo\" change type=\"checkbox\" (click)=\"redoChanged($event)\"\r\n class=\"form-check-input cursor-pointer mt-1 me-2\" id=\"viewRedo\">\r\n <label class=\"checkbox-label\" for=\"viewRedo\">Re-do</label>\r\n </span>\r\n <span class=\"me-3 mt-3\" *ngIf=\"showflag&&galleryForm.value.type==='checklist'\">\r\n <input formControlName=\"viewFlag\" change type=\"checkbox\" (click)=\"flagChanged($event)\"\r\n class=\"form-check-input cursor-pointer mt-1 me-2\" id=\"viewFlag\">\r\n <label class=\"checkbox-label\" for=\"viewFlag\">Flag</label>\r\n </span>\r\n \r\n <a (click)=\"onSubmit()\" type=\"submit\" class=\"btn btn-primary px-4 \"><span>Apply</span></a>\r\n <!-- <a (click)=\"notify([])\" type=\"submit\" class=\"btn btn-primary px-4 \"><span>test</span></a> -->\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n </div>\r\n </form>\r\n</div>\r\n<div class=\"card my-2\">\r\n<div class=\"row main-container my-5 \">\r\n \r\n <div [ngClass]=\"showsidenav ? 'col-md-4 left-sidebar':'d-none'\" class=\"h-650px\">\r\n <div class=\"position-relative h-650px scroll-y\">\r\n <div class=\"card-body p-5\">\r\n <div class=\"checklist-left\">\r\n <div class=\"checklist-title\">{{checklistName}}</div>\r\n <div class=\"checklist-text\">{{checkListDescription}}</div>\r\n </div>\r\n <div *ngIf=\"loading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"noData&&select === 'custom' || noData&&select === 'task'\"class=\"row mt-20\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"w-75 h-300px\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title mt-0\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this checklist</div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"noData&&select !== 'custom'&&select !== 'task'\" class=\"row mt-20\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div class=\"card-body mt-20 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src mt-5 w-40\" src=\"./assets/tango/Icons/Nodata2.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No Detections found</div>\r\n <div class=\"nodata-sub\">There is no breaches for the selected period</div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <section *ngIf=\"!noData && !loading\">\r\n\r\n <div *ngIf=\"select === 'custom'||select === 'task'\">\r\n <div class=\"text-end mt-10\">\r\n <!-- <button class=\"btn btn-outline w-25 me-3 btn-resize\" (click)=\"viewChecklists()\"> Reset </button> -->\r\n <button class=\"btn btn-outline w-25 me-3 btn-resize\" *ngIf=\"selectedSection.length>0||tempselectedSection.length>0\" (click)=\"onchecklistreset()\"> Reset </button>\r\n <button *ngIf=\"selectedSection.length>0||tempselectedSection.length>0\" class=\"btn btn-primary w-25 btn-resize\" (click)=\"selectsinglequestion()\">Apply</button>\r\n </div>\r\n <div class=\"my-6\" [ngClass]=\"selectedSection.length===0 ? 'view-all':'view-questions'\" style=\"cursor: pointer;\" (click)=\"onchecklistreset()\">\r\n View All Answers\r\n </div>\r\n <div class=\"mx-2\" *ngFor=\"let section of checklistData; let i=index;\">\r\n <div class=\"d-flex align-items-center justify-content-between mt-4\" style=\"cursor: pointer;\"\r\n (click)=\"accordian(i)\">\r\n <div class=\"fs-4 fw-bold section\" *ngIf=\"galleryForm.value.type==='checklist'\" >{{section.sectionName}}</div>\r\n <hr class=\"mx-2\">\r\n <svg class=\"cursor-pointer\" [ngClass]=\"{'rotate' : show !== i}\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"25\" height=\"25\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n <div *ngIf=\"show===i\" class=\"question-left\">\r\n <div cdkDropList [cdkDropListData]=\"section.questions\">\r\n <div *ngFor=\"let question of section.questions;let j=index;\" class=\"d-flex my-2 q-btn\"\r\n cdkDrag>\r\n <input id=\"label\" [(ngModel)]=\"question.checked\" (click)=\"selectedQuestion($event,section,question)\" class=\"form-check-input cursor-pointer mt-2 me-4\" type=\"checkbox\" > \r\n <div class=\"editablecontent\" [ngClass]=\"question?.checked ? 'view-all':''\" style=\"cursor: pointer;\">\r\n {{question.qno}} . {{question.qname}}\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- </div> -->\r\n <div *ngIf=\"combinedChecklist.includes(select)\">\r\n <div class=\"text-end mt-10\">\r\n <button class=\"btn btn-outline w-25 me-3 btn-resize\" (click)=\"onreset()\"> Reset </button>\r\n <button class=\"btn btn-primary w-25 btn-resize\" (click)=\"onview()\">Apply</button>\r\n </div>\r\n <div class=\"dropdownselect h-900px scroll-y\">\r\n <div class=\"d-flex justify-content-left \" [ngClass]=\"selectAll ? 'backgroundBorder':'withoutbackground'\">\r\n <input\r\n class=\"form-check-input cursor-pointer me-4\" type=\"checkbox\" [(ngModel)]=\"selectAll\"\r\n (click)=\"selectAllStore($event)\"> <span [ngClass]=\"selectAll ? 'usage-detection':'usage-text'\">Select All</span>\r\n </div>\r\n <!-- dropdownbg -->\r\n <div class=\"my-4\" *ngFor=\"let list of mobileusageDataList;let i=index\">\r\n <div (change)=\"updateCheck($event,list)\" [ngClass]=\"list.checked ? 'backgroundBorder':'withoutbackground'\">\r\n <input id=\"label{{i}}\" class=\"form-check-input cursor-pointer me-4\" type=\"checkbox\" [(ngModel)]=\"list.checked\">\r\n <label for=\"label{{i}}\" [ngClass]=\"list.checked ? 'usage-detection':'usage-text'\" >{{list?.storeName}}</label>\r\n <span class=\"badge badge-light-primary detectionright\" *ngIf=\"list.detection\">{{list.detection}} Detections</span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n </section>\r\n \r\n </div>\r\n\r\n\r\n\r\n \r\n\r\n <div *ngIf=\"showsidenav\" (click)=\"sidenav()\" class=\"backButtonright text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M11 17L6 12L11 7M18 17L13 12L18 7\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"showsidenav ? 'col-md-8 border border-bottom-0 border-top-0 border-left border-5 right-sidebar':'col-md-12'\" >\r\n <div class=\"position-relative \">\r\n <div class=\"card-header border-0 px-0 my-0\" *ngIf=\"(select === 'custom' || select === 'task'||select === 'cleaning'||select ==='scrum'||select ==='storeopenandclose'||select ==='inventorycount'||select ==='carsattended'||select ==='numberplateinfo') && !viewloading && !viewnoData\" >\r\n <h3></h3>\r\n <!-- Switch toggle -->\r\n <div class=\"card-toolbar\" *ngIf=\"!galleryForm.value.viewRedo\">\r\n <div class=\"position-relative cursor-pointer me-10\">\r\n <div class=\" btn btn-primary form-control no-text-transform\" (click)=\"exportDet($event)\">\r\n {{ exportLabel }} <!-- Bind label text here -->\r\n </div>\r\n <div *ngIf=\"exportShow\"\r\n class=\"card py-2 position-absolute productdrop top-10 w-150px end-0 z-1\">\r\n <ul class=\"list-unstyled mb-2\">\r\n <li class=\"cursor-pointer py-4 checkbox-label mx-2\" *ngIf=\"pdfExportTypes.includes(select)\" type=\"button\" (click)=\"setExportAsPPT('Export as PDF','pdf')\">\r\n Export as PDF\r\n </li>\r\n <li class=\" cursor-pointer checkbox-label py-4 mx-2\" *ngIf=\"csvExportTypes.includes(select)\" type=\"button\" (click)=\"setExportAsPPT('Export as CSV','csv')\">\r\n Export as CSV\r\n </li>\r\n <li *ngIf=\"selectedSection.length>0||select === 'cleaning'||select ==='scrum'||select ==='storeopenandclose'||select ==='inventorycount'||select ==='carsattended'||select ==='numberplateinfo'\" class=\" cursor-pointer checkbox-label py-4 mx-2\" type=\"button\" (click)=\"setExportAsPPT('Export as PPT','ppt')\">\r\n Export as PPT\r\n </li>\r\n <li *ngIf=\"selectedSection.length>0||select === 'cleaning'||select ==='scrum'||select ==='storeopenandclose'\" class=\"cursor-pointer checkbox-label py-4 mx-2\" type=\"button\" (click)=\"setExportAsPPT('Export as ZIP','zipfiles')\">\r\n Export as ZIP\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n \r\n <div class=\"card-body p-0\">\r\n <div>\r\n <div *ngIf=\"viewloading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"viewnoData&&select !== 'custom'&&select !== 'task'\" class=\"row mt-20\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div class=\"card-body mt-20 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src mt-5 w-40\" src=\"./assets/tango/Icons/Nodata2.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No Detections found</div>\r\n <div class=\"nodata-sub\">There is no breaches for the selected period</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"viewnoData&&select === 'custom' || viewnoData&&select === 'task'\" class=\"row mt-20\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div class=\"card-body mt-20 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src mt-5 w-40\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this checklist</div>\r\n </div>\r\n </div>\r\n </div>\r\n <section *ngIf=\"!viewloading && !viewnoData\">\r\n <div *ngIf=\"select==='custom'||select==='task' \">\r\n <div *ngIf=\"showsingle\" class=\"qa-heading m-3 mx-11\">{{this.selectedSection[0]?.questions[0]}}</div>\r\n <div *ngIf=\"showsingle&&showfilter\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap mx-10\">\r\n <li class=\"nav-item\" *ngFor=\"let item of answerFilter\">\r\n <a (click)=\"taskTab(item)\" [ngClass]=\"galleryForm.value.filter === item.key ? 'active' : ''\" class=\"nav-link cursor-pointer no-border me-3\">\r\n {{item.key}}<span class=\"mx-2 \" [ngClass]=\"galleryForm.value.filter === item.key ? 'badge-num-primary' :'badge-num-muted'\">{{item.count}}</span>\r\n </a>\r\n </li>\r\n \r\n </ul>\r\n \r\n </div>\r\n \r\n <div *ngFor=\"let checklist of viewChecklistsData?.checklistAnswers\">\r\n \r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''&&showmulti\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n \r\n\r\n <div class=\"row px-10 mt-5\" *ngIf=\"showmulti\">\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Store Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">{{checklist?.storeProfile?.storeName}} </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\" *ngIf=\"galleryForm.value.type==='checklist'\">Checklist Name:</h3>\r\n <h3 class=\"uni-title\" *ngIf=\"galleryForm.value.type==='task'\">Task Name:</h3>\r\n\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">{{checklist?.checklistInfo?.checklistName}}</p>\r\n </div>\r\n\r\n <ng-container>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">State & Country :</h3>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <p class=\"uni-subtitle\">{{checklist?.storeProfile?.state}}\r\n {{checklist?.storeProfile?.Country}}</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <h3 class=\"uni-title\">Duration :</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\"> {{checklist?.checklistInfo?.duration}}</p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">No. of Questions :</h3>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <p class=\"uni-subtitle\">{{checklist?.checklistInfo?.noofQuestions}}</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <h3 class=\"uni-title\">Date :</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\"> {{checklist?.checklistInfo?.date}}</p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Submitted By :</h3>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <p class=\"uni-subtitle\">{{checklist?.checklistInfo?.submittedBy}}</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <h3 class=\"uni-title\">Time :</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\"> {{checklist?.checklistInfo?.time}}</p>\r\n </div>\r\n </ng-container>\r\n\r\n </div>\r\n \r\n\r\n <div class=\"row px-10\" >\r\n\r\n <div *ngFor=\"let questionlist of checklist.questionAnswer\">\r\n <div class=\"qa-bodrer my-5\" *ngFor=\"let question of questionlist.questions\">\r\n <div class=\"row\" *ngIf=\"question.redo||question.redo===false\">\r\n <div class=\"view-detail col-12 text-end cursor-pointer\" (click)=\"ViewInDetails(question,checklist?.checklistInfo,checklist?.storeProfile,questionlist)\">\r\n View in detail \r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M15 10.8333V15.8333C15 16.2754 14.8244 16.6993 14.5118 17.0118C14.1993 17.3244 13.7754 17.5 13.3333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V6.66667C2.5 6.22464 2.67559 5.80072 2.98816 5.48816C3.30072 5.17559 3.72464 5 4.16667 5H9.16667M12.5 2.5H17.5M17.5 2.5V7.5M17.5 2.5L8.33333 11.6667\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n \r\n <div class=\"row w-100 m-3\" *ngIf=\"showsingle\">\r\n <div class=\"col-md-4 text-title\">\r\n {{checklist?.storeProfile?.storeName}}\r\n </div>\r\n <div class=\"col-md-8 text-end title-description\">\r\n Submitted by : {{checklist?.checklistInfo?.submittedBy}} On : {{checklist?.checklistInfo?.date}} {{checklist?.checklistInfo?.time}}\r\n </div>\r\n </div>\r\n <ul>\r\n <li *ngIf=\"showmulti\" class=\"qa-heading\">{{question?.qno}}. {{question?.qname}}</li>\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='descriptive'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <!-- checklist type with single image but inside collage-grid -->\r\n <div class=\"col-md-6\">\r\n <div *ngIf=\"galleryForm.value.type === 'checklist' \r\n && question.questionReferenceImage \r\n && question.questionReferenceImage !== ''\">\r\n \r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n \r\n <div class=\"collage-grid\"\r\n [ngStyle]=\"{ 'grid-template-columns': getGridColumns(question.questionReferenceImage.length) }\">\r\n \r\n <div class=\"collage-tile\">\r\n <img class=\"img-logo\" [src]=\"environment.TraxAnswerCDN + question.questionReferenceImage\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"question.questionReferenceImage&&question.questionReferenceImage.length>0&&galleryForm.value.type==='task'&&question.questionReferenceImage[0] !== ''\">\r\n\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <div class=\"col-md-6\">\r\n <div class=\"collage-grid\"\r\n [ngStyle]=\"{ 'grid-template-columns': getGridColumns(question.questionReferenceImage.length) }\">\r\n \r\n <div class=\"collage-tile\" *ngFor=\"let item of question.questionReferenceImage\">\r\n <div *ngIf=\"item&&item!==''&&item!==null\">\r\n <img class=\"img-logo\" src=\"{{environment.TraxAnswerCDN}}{{item}}\" alt=\"\">\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n \r\n <span class=\"mt-2\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='linearscale'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"galleryForm.value.type==='checklist'&&question.questionReferenceImage!==''&&question.questionReferenceImage!==null\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div *ngIf=\"question.questionReferenceImage&&question.questionReferenceImage.length>0&&galleryForm.value.type==='task'&&question.questionReferenceImage[0] !== ''\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of question.questionReferenceImage\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item}}\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n <!-- <br> -->\r\n <span class=\"mt-4\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='time'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"galleryForm.value.type==='checklist'&&question.questionReferenceImage!==''&&question.questionReferenceImage!==null\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div *ngIf=\"question.questionReferenceImage&&question.questionReferenceImage.length>0&&galleryForm.value.type==='task'&&question.questionReferenceImage[0] !== ''\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of question.questionReferenceImage\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item}}\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n <br>\r\n <span class=\"mt-4\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='date'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"galleryForm.value.type==='checklist'&&question.questionReferenceImage!==''&&question.questionReferenceImage!==null\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div *ngIf=\"question.questionReferenceImage&&question.questionReferenceImage.length>0&&galleryForm.value.type==='task'&&question.questionReferenceImage[0] !== ''\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of question.questionReferenceImage\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item}}\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n <br>\r\n <span class=\"mt-4\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='yes/no'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"galleryForm.value.type==='checklist'&&question.questionReferenceImage!==''&&question.questionReferenceImage!==null\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <br *ngIf=\"galleryForm.value.type==='checklist'&&question.questionReferenceImage!==''&&question.questionReferenceImage!==null\">\r\n <div *ngIf=\"question.questionReferenceImage&&question.questionReferenceImage.length>0&&galleryForm.value.type==='task'&&question.questionReferenceImage[0] !== ''\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of question.questionReferenceImage\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item}}\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n <span class=\"mt-4\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"row\" *ngIf=\"item.validation&&item.validationAnswer!==''\">\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div [ngClass]=\"item.validationType==='Capture Image'?'col-md-6':'col-md-12'\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType==='Capture Image'||item.validationType==='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType==='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"w-100 h-450px p-3\" *ngIf=\"item.validationType==='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n </div>\r\n <span class=\"remarksTxt\" *ngIf=\"item.validationType==='Descriptive Answer'\">Validation Answer :{{item.validationAnswer}}</span>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div> \r\n\r\n\r\n\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='multiplechoicesingle'\">\r\n \r\n <div class=\"col-md-6\" *ngIf=\"galleryForm.value.type==='checklist'&&question.questionReferenceImage!==null&&question.questionReferenceImage!==''&&question.questionReferenceImage!==undefined\">\r\n <div class=\"title-ref my-3\">Reference Image</div> \r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n \r\n <div *ngIf=\"question.questionReferenceImage&&question.questionReferenceImage.length>0&&galleryForm.value.type==='task'&&question.questionReferenceImage[0] !== ''\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of question.questionReferenceImage\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item}}\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <span class=\"mt-2\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==null&&item.referenceImage!==''&&galleryForm.value.type==='checklist'\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div *ngIf=\"item.referenceImage.length>0&&galleryForm.value.type==='task'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of item.referenceImage\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item}}\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"item.validationType==='Capture Image'?'col-md-6':'col-md-12'\" *ngIf=\"item.validation&&item.validationAnswer!==''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType==='Capture Image'||item.validationType==='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType==='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n\r\n <video controls class=\"w-100 h-450px p-3\" *ngIf=\"item.validationType==='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n \r\n <span *ngIf=\"item.validationType==='Descriptive Answer'\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n <div class=\"row\" *ngIf=\"question?.answerType==='image'\">\r\n <div class=\"col-md-6\">\r\n<div *ngIf=\"galleryForm.value.type === 'task'\">\r\n <div class=\"title-ref my-3\" *ngIf=\"hasReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n \r\n <div class=\"collage-grid\" *ngIf=\"hasReferenceImages(question)\">\r\n <ng-container *ngFor=\"let answer of question.answers\">\r\n <ng-container *ngIf=\"answer.referenceImage?.length\">\r\n <div class=\"collage-tile\" *ngFor=\"let item of answer.referenceImage\">\r\n <img [src]=\"environment.TraxAnswerCDN + item\" alt=\"\" />\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</div>\r\n\r\n<!-- For Checklist Type -->\r\n<div *ngIf=\"galleryForm.value.type === 'checklist'\">\r\n <div class=\"title-ref my-3\" *ngIf=\"hasChecklistReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n\r\n <div class=\"collage-grid\" *ngIf=\"hasChecklistReferenceImages(question)\">\r\n <ng-container *ngFor=\"let answer of question.answers\">\r\n <div class=\"collage-tile\" *ngIf=\"answer.referenceImage\">\r\n <img [src]=\"environment.TraxAnswerCDN + answer.referenceImage\" alt=\"\" />\r\n </div>\r\n </ng-container>\r\n </div>\r\n</div>\r\n</div>\r\n\r\n <!-- <div class=\"col-md-6\" *ngIf=\"item.referenceImage!=null&&item.referenceImage!==''&&galleryForm.value.type=='checklist'\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div> \r\n <div *ngIf=\"item.referenceImage.length>0&&galleryForm.value.type=='task'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of item.referenceImage\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item}}\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <div class=\"col-md-6\">\r\n <div class=\"row\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <div class=\"collage-grid\" [ngStyle]=\"{'grid-template-columns': getGridColumns(question.userAnswer.length)}\">\r\n <div *ngFor=\"let item of question.userAnswer;let i = index\" class=\"collage-tile\">\r\n \r\n \r\n <img (click)=\"openImagePopup(getImageUrls(question.userAnswer),getImageNames(question.userAnswer),i)\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\"\r\n alt=\"\">\r\n \r\n <div [ngClass]=\"item.validationType==='Capture Image'?'col-md-6 mt-2':'col-md-12 mt-2'\" *ngIf=\"item.validation&&item.validationAnswer!==''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType==='Capture Image'||item.validationType==='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType==='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"w-100 h-450px p-3\" *ngIf=\"item.validationType==='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n <span *ngIf=\"item.validationType==='Descriptive Answer'\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='multiplechoicemultiple'\">\r\n <div *ngIf=\"galleryForm.value.type === 'checklist'\">\r\n <div class=\"title-ref my-3\" *ngIf=\"hasChecklistReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n\r\n <div class=\"collage-grid\" *ngIf=\"hasChecklistReferenceImages(question)\">\r\n <ng-container *ngFor=\"let answer of question.answers\">\r\n <div class=\"collage-tile\" *ngIf=\"answer.referenceImage\">\r\n <img [src]=\"environment.TraxAnswerCDN + answer.referenceImage\" alt=\"\" />\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\"></div>\r\n <div *ngIf=\"question.questionReferenceImage&&question.questionReferenceImage.length>0&&galleryForm.value.type==='task'&&question.questionReferenceImage[0] !== ''\">\r\n\r\n <div class=\"title-ref my-3\" *ngIf=\"hasChecklistReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n \r\n <div class=\"collage-grid\" *ngIf=\"hasChecklistReferenceImages(question)\">\r\n\r\n <ng-container *ngFor=\"let answer of question.questionReferenceImage\">\r\n <div class=\"collage-tile\">\r\n <img\r\n src=\"{{environment.TraxAnswerCDN}}{{answer}}\"\r\n alt=\"\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"Partially my-3 px-5\" *ngFor=\"let item of question.userAnswer\">\r\n <span class=\"mt-3\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==null&&item.referenceImage!==''&&galleryForm.value.type==='checklist'\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div *ngIf=\"item.referenceImage.length>0&&galleryForm.value.type==='task'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of item.referenceImage\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item}}\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"item.validationType==='Capture Image'?'col-md-6 mt-2':'col-md-12 mt-2'\" *ngIf=\"item.validation&&item.validationAnswer&&item.validationAnswer!==''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType==='Capture Image'||item.validationType==='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType==='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"w-100 h-450px p-3\" *ngIf=\"item.validationType==='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n <span *ngIf=\"item.validationType==='Descriptive Answer'\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='descriptiveImage'\">\r\n <div *ngFor=\"let answer of question.answers\">\r\n <div class=\"row\" *ngIf=\"answer.referenceImage.length>0&&galleryForm.value.type==='task'\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of answer.referenceImage\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item}}\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n \r\n <div class=\"col-md-6\" *ngIf=\"galleryForm.value.type==='checklist'&&answer.referenceImage!==''&&answer.referenceImage!==null\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{answer.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngFor=\"let item of question.userAnswer\">\r\n <!-- <div class=\"col-md-6\" *ngIf=\"item.referenceImage!=null&&item.referenceImage!==''&&galleryForm.value.type=='checklist'\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div *ngIf=\"item.referenceImage.length>0&&galleryForm.value.type=='task'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of item.referenceImage\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item}}\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n \r\n </div> -->\r\n <div class=\"col-md-6\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\"\r\n alt=\"\">\r\n </div>\r\n <div [ngClass]=\"item.validationType==='Capture Image'?'col-md-6 mt-3':'col-md-12 mt-3'\" *ngIf=\"item.validation&&item.validationAnswer!==''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType==='Capture Image'||item.validationType==='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType==='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"w-100 h-450px p-3\" *ngIf=\"item.validationType==='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n <span [ngClass]=\"item.sopFlag ? 'flagclour':''\" *ngIf=\"item.validationType==='Descriptive Answer'\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question.remarks!==''\">{{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='video'\">\r\n <!-- Task: Multiple reference images (Array) -->\r\n <div *ngIf=\"galleryForm.value.type === 'task' \r\n && question.questionReferenceImage \r\n && question.questionReferenceImage.length > 0 \r\n && question.questionReferenceImage[0] !== ''\">\r\n\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n\r\n <div class=\"collage-grid\"\r\n [ngStyle]=\"{ 'grid-template-columns': getGridColumns(question.questionReferenceImage.length) }\">\r\n\r\n <div class=\"collage-tile\" *ngFor=\"let item of question.questionReferenceImage\">\r\n <img \r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Checklist: Single reference image (String) -->\r\n <div *ngIf=\"galleryForm.value.type === 'checklist' \r\n && question.questionReferenceImage \r\n && question.questionReferenceImage !== ''\">\r\n\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n\r\n <div class=\"collage-grid\"\r\n [ngStyle]=\"{ 'grid-template-columns': getGridColumns(1) }\">\r\n\r\n <div class=\"collage-tile\">\r\n <img \r\n [src]=\"environment.TraxAnswerCDN + question.questionReferenceImage\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-12\" *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"title-ref my-3\">Uploaded Video</div>\r\n\r\n <video controls class=\"w-100 h-450px p-3\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\">\r\n </video>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='multipleImage'\">\r\n <div class=\"col-md-6\">\r\n<div *ngIf=\"galleryForm.value.type === 'task'\">\r\n <div class=\"title-ref my-3\" *ngIf=\"hasReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n \r\n <div class=\"collage-grid\" *ngIf=\"hasReferenceImages(question)\">\r\n <ng-container *ngFor=\"let answer of question.answers\">\r\n <ng-container *ngIf=\"answer.referenceImage?.length\">\r\n <div class=\"collage-tile\" *ngFor=\"let item of answer.referenceImage\">\r\n <img [src]=\"environment.TraxAnswerCDN + item\" alt=\"\" />\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</div>\r\n\r\n<!-- For Checklist Type -->\r\n<div *ngIf=\"galleryForm.value.type === 'checklist'\">\r\n <div class=\"title-ref my-3\" *ngIf=\"hasChecklistReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n\r\n <div class=\"collage-grid\" *ngIf=\"hasChecklistReferenceImages(question)\">\r\n <ng-container *ngFor=\"let answer of question.answers\">\r\n <div class=\"collage-tile\" *ngIf=\"answer.referenceImage\">\r\n <img [src]=\"environment.TraxAnswerCDN + answer.referenceImage\" alt=\"\" />\r\n </div>\r\n </ng-container>\r\n </div>\r\n</div>\r\n</div>\r\n <div [ngClass]=\"hasReferenceImages(question) ? 'col-md-6' : 'col-md-12'\">\r\n <div class=\"row\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <div class=\"collage-grid\" [ngStyle]=\"{'grid-template-columns': getGridColumns(question.userAnswer.length)}\">\r\n <div *ngFor=\"let item of question.userAnswer;let i=index\" class=\"collage-tile\">\r\n \r\n <img class=\"cursor-pointer\" (click)=\"openImagePopup(getImageUrls(question.userAnswer),getImageNames(question.userAnswer),i)\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\"\r\n alt=\"\">\r\n <div [ngClass]=\"item.validationType==='Capture Image'?'col-md-6':'col-md-12'\" *ngIf=\"item.validation&&item.validationAnswer!==''\">\r\n <div class=\"title-ref my-3 \" *ngIf=\"item.validationType==='Capture Image'||item.validationType==='Capture Video'\">Validation Answer</div>\r\n <img *ngIf=\"item.validationType==='Capture Image'\" class=\"cursor-pointer\" \r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"w-100 h-450px p-3\" *ngIf=\"item.validationType==='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n <span *ngIf=\"item.validationType==='Descriptive Answer'\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n \r\n </ul>\r\n\r\n \r\n<div class=\"modal fade\" id=\"imageModal\" tabindex=\"-1\" role=\"dialog\">\r\n <div class=\"modal-dialog modal-lg\" role=\"document\">\r\n <div class=\"modal-content\">\r\n\r\n <!-- <div class=\"modal-header\">\r\n <h5 class=\"modal-title\">{{ selectedImageName }}</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"></button>\r\n </div> -->\r\n\r\n <div class=\"modal-body d-flex align-items-center justify-content-center position-relative\" style=\"min-height: 400px;\">\r\n <!-- Prev Button -->\r\n <button\r\n class=\"btn btn-outline-primary position-absolute start-0 top-50 translate-middle-y ms-3\"\r\n (click)=\"navigateImage('prev')\"\r\n [disabled]=\"currentImageIndex === 0\"\r\n >\r\n \u2039 \r\n </button>\r\n\r\n <!-- Image -->\r\n <img [src]=\"selectedImageUrl\" class=\"img-fluid mx-4\" />\r\n\r\n <!-- Next Button -->\r\n <button\r\n class=\"btn btn-outline-primary position-absolute end-0 top-50 translate-middle-y me-3\"\r\n (click)=\"navigateImage('next')\"\r\n [disabled]=\"currentImageIndex === imageList.length - 1\"\r\n >\r\n \u203A\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-6 text-start\"> \r\n <!-- <button class=\"btn btn-secondary rounded-pill m-0 p-2\" *ngIf=\"question?.linkType&&question?.linkquestionenabled\">Linked to Question {{question.parentQuestion}}</button> -->\r\n </div>\r\n <div class=\"col-md-6 text-end\">\r\n <button class=\"btn btn-sm btn-default border-default me-3\" [disabled]=\"question.redo\" *ngIf=\"checktodayDate(checklist?.checklistInfo?.date)&&(gs.userAccess | async)?.userType !== 'tango'&&!checklist?.checklistInfo?.approvalStatus&&(gs.userAccess | async)?.TangoTrax_checklist_isEdit&&this.galleryForm.value.type =='checklist'\" (click)=\"addTask('redo',question,checklist?.checklistInfo,checklist?.storeProfile,questionlist)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_6004_11734)\">\r\n <path d=\"M19.1693 3.33331V8.33332M19.1693 8.33332H14.1693M19.1693 8.33332L15.3026 4.69998C14.407 3.80391 13.299 3.14932 12.0819 2.79729C10.8649 2.44527 9.57853 2.40727 8.34284 2.68686C7.10716 2.96645 5.96244 3.55451 5.01549 4.39616C4.06855 5.23782 3.35024 6.30564 2.9276 7.49998M0.835938 16.6666V11.6666M0.835938 11.6666H5.83594M0.835938 11.6666L4.7026 15.3C5.59823 16.1961 6.70625 16.8506 7.92328 17.2027C9.14031 17.5547 10.4267 17.5927 11.6624 17.3131C12.898 17.0335 14.0428 16.4455 14.9897 15.6038C15.9367 14.7621 16.655 13.6943 17.0776 12.5\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_6004_11734\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span class=\"ms-2 font-defult-task\">Redo</span>\r\n </button>\r\n \r\n <button class=\"btn btn-sm btn-default border-default me-3\" [disabled]=\"question.redo\" *ngIf=\"checktodayDate(checklist?.checklistInfo?.date)&&(gs.userAccess | async)?.userType !== 'tango'&&!checklist?.checklistInfo?.approvalStatus&&(gs.userAccess | async)?.TangoTrax_Task_isEdit&&this.galleryForm.value.type=='task'\" (click)=\"addTask('redo',question,checklist?.checklistInfo,checklist?.storeProfile,questionlist)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_6004_11734)\">\r\n <path d=\"M19.1693 3.33331V8.33332M19.1693 8.33332H14.1693M19.1693 8.33332L15.3026 4.69998C14.407 3.80391 13.299 3.14932 12.0819 2.79729C10.8649 2.44527 9.57853 2.40727 8.34284 2.68686C7.10716 2.96645 5.96244 3.55451 5.01549 4.39616C4.06855 5.23782 3.35024 6.30564 2.9276 7.49998M0.835938 16.6666V11.6666M0.835938 11.6666H5.83594M0.835938 11.6666L4.7026 15.3C5.59823 16.1961 6.70625 16.8506 7.92328 17.2027C9.14031 17.5547 10.4267 17.5927 11.6624 17.3131C12.898 17.0335 14.0428 16.4455 14.9897 15.6038C15.9367 14.7621 16.655 13.6943 17.0776 12.5\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_6004_11734\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span class=\"ms-2 font-defult-task\">Redo</span>\r\n </button>\r\n\r\n <button class=\"btn btn-sm border-val1\" *ngIf=\"!question.task&&!question.taskId&&this.galleryForm.value.type=='checklist'&&(gs.userAccess | async)?.userType !== 'tango'&&!checklist?.checklistInfo?.approvalStatus&& (gs.userAccess | async)?.TangoTrax_Task_isEdit\" (click)=\"addTask('createtask',question,checklist?.checklistInfo,checklist?.storeProfile,questionlist)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M11.6693 1.66675H5.0026C4.56058 1.66675 4.13665 1.84234 3.82409 2.1549C3.51153 2.46746 3.33594 2.89139 3.33594 3.33341V16.6667C3.33594 17.1088 3.51153 17.5327 3.82409 17.8453C4.13665 18.1578 4.56058 18.3334 5.0026 18.3334H15.0026C15.4446 18.3334 15.8686 18.1578 16.1811 17.8453C16.4937 17.5327 16.6693 17.1088 16.6693 16.6667V6.66675M11.6693 1.66675L16.6693 6.66675M11.6693 1.66675V6.66675H16.6693M10.0026 15.0001V10.0001M7.5026 12.5001H12.5026\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <span class=\"ms-2 font-task\">Create Task</span>\r\n </button>\r\n <button *ngIf=\"question.task&&question.taskId &&this.galleryForm.value.type!=='task'\" class=\"btn btn-sm border-val1\" (click)=\"taskredirect(question,checklist?.storeProfile,checklist?.checklistInfo)\"><span class=\"font-task\">View Task</span></button>\r\n\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"px-10 my-5\" *ngIf=\"imageChecklist.includes(select)\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n <!-- <div>\r\n <h2>Checklist Name : {{this.checklistName}}</h2>\r\n </div> -->\r\n \r\n <div class=\" my-3 mt-5\" *ngFor=\"let item of mobileusageData\">\r\n <div class=\"row px-10 mt-5\">\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Checklist Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">: {{this.checklistName}} </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Store Name</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">: {{item.storeName}}</p>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"item.down_time\">\r\n <h3 class=\"uni-title\">Average Downtime</h3>\r\n </div>\r\n <div class=\"col-md-9\" *ngIf=\"item.down_time\">\r\n <p class=\"uni-subtitle\">: {{item.down_time}} Mins</p>\r\n </div>\r\n </div> \r\n <ul class=\"row w-100 qa-bodrer\">\r\n <!-- <li class=\"qa-heading\">\r\n {{item.storeName}}\r\n </li> -->\r\n \r\n <div class=\"row\">\r\n <div class=\"col-md-12 my-2\" *ngFor=\"let detection of item?.imageUrl\">\r\n \r\n <div class=\"\">\r\n <img class=\"w-100 h-500px rounded-top\"\r\n src=\"{{environment.TraxAIchecklistCDN}}{{detection}}\" alt=\"\">\r\n <div class=\"text-center mt-3\" > {{this.checklistName}}</div> \r\n </div>\r\n </div>\r\n <div class=\"col-md-12 my-2\" *ngFor=\"let detection of item?.imagesData\">\r\n <div class=\"card-toolbar\" *ngIf=\"galleryForm.value.sourceCheckList_id==='inventorycount'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-8\">\r\n <span class=\"ms-3\" *ngIf=\"detection?.date_timestamp\">Detection Time :<span class=\"badge badge-light-primary\"> {{detection.date_timestamp}}</span></span> \r\n </div>\r\n <div class=\"col-md-4 text-end\"> \r\n <span class=\"ms-3\" *ngIf=\"detection?.car_count\">No of cars :<span class=\"badge badge-light-primary\"> {{detection.car_count}}</span></span> \r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-toolbar\" *ngIf=\"galleryForm.value.sourceCheckList_id==='numberplateinfo'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-8\">\r\n <span class=\"ms-3\" *ngIf=\"detection?.car_license_id\">Number Plate :<span class=\"badge badge-light-primary\"> {{detection.car_license_id}}</span></span> \r\n </div>\r\n <div class=\"col-md-4 text-end\"> \r\n <span class=\"ms-3\" *ngIf=\"detection?.date_timestamp\">Entry Time:<span class=\"badge badge-light-primary\"> {{detection.date_timestamp}}</span></span> \r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div class=\"card-toolbar\" *ngIf=\"galleryForm.value.sourceCheckList_id==='carsattended'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <span class=\"ms-3\" *ngIf=\"detection?.interacted_person_count\">Number of People Interacted :<span class=\"badge badge-light-primary\"> {{detection.interacted_person_count}}</span></span> \r\n </div>\r\n <div class=\"col-md-6 text-end\">\r\n <span class=\"ms-3\" *ngIf=\"detection?.car_reg_number\">Number Plate :<span class=\"badge badge-light-primary\"> {{detection?.car_reg_number}}</span></span> \r\n </div>\r\n \r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <span class=\"ms-3\" *ngIf=\"detection?.car_reg_number\">Detection Time :<span class=\"badge badge-light-primary\"> {{detection?.date_timestamp}}</span></span> \r\n </div>\r\n <div class=\"col-md-6 text-end\"> \r\n <span class=\"ms-3\" *ngIf=\"detection?.interacted_duration_in_secs\">Time spent:<span class=\"badge badge-light-primary\"> {{detection.interacted_duration_in_secs}} Mins</span></span> \r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\" *ngIf=\"galleryForm.value.sourceCheckList_id==='vehicle_check_in'\">\r\n <div class=\"row\">\r\n \r\n <div class=\"col-md-8\"> \r\n <span class=\"ms-3\" *ngIf=\"detection?.date_timestamp\">Detection Time :<span class=\"badge badge-light-primary\"> {{detection.date_timestamp}}</span></span> \r\n </div>\r\n <div class=\"col-md-4 text-end\"> \r\n <span class=\"ms-3\" *ngIf=\"detection?.date_timestamp\">Slot :<span class=\"badge badge-light-primary\"> {{detection.slot_id}}</span></span> \r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mt-2\">\r\n <img class=\"w-100 h-500px rounded-top\"\r\n src=\"{{environment.TraxAIchecklistCDN}}{{detection.path}}\" alt=\"\">\r\n <div class=\"text-center mt-3\" > {{this.checklistName}}</div> \r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n\r\n </div>\r\n <div class=\"px-10 my-5\" *ngIf=\"videoChecklist.includes(select)\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n \r\n <div class=\"my-3 mt-5\" *ngFor=\"let item of customerunattendedData\">\r\n <div class=\"row px-10 mt-5\">\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Checklist Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">: {{this.checklistName}} </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Store Name</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">: {{item.storeName}}</p>\r\n </div>\r\n </div> \r\n <ul class=\"row w-100 margin-top-side\">\r\n <li class=\"qa-heading\">\r\n \r\n </li>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngFor=\"let detection of item.imagesData\">\r\n <div class=\"row px-10 mt-5 margin-left-side\" *ngIf=\"select!='suspiciousactivity'\">\r\n <div class=\"col-md-3\" *ngIf=\"detection?.Answer\">\r\n <h3 class=\"uni-title\">Detection Status</h3>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.Answer\">\r\n <p class=\"uni-subtitle\">:<span class=\"ms-3 badge badge-light-danger\" *ngIf=\"detection?.Answer==='rejected'\">Breached</span>\r\n <span class=\"ms-3 badge badge-light-success\" *ngIf=\"detection?.Answer==='approved'\">Not-breached</span> </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Date</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\">: {{detection.date|date:'dd-MM-yyyy' }}</p>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.configTime\">\r\n <h3 class=\"uni-title\">Configured Time</h3>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.configTime\">\r\n <p class=\"uni-subtitle\">: {{detection.configTime }}</p>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.duration\">\r\n <h3 class=\"uni-title\">Duration</h3>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.duration\">\r\n <p class=\"uni-subtitle\">: {{detection.duration }} Mins</p>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.downTime\">\r\n <h3 class=\"uni-title\">Downtime</h3>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.downTime\">\r\n <p class=\"uni-subtitle\">: {{detection.downTime }} Mins <span ngbTooltip=\"Downtime may result in inaccurate data\" placement=\"top\" container=\"body\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"16\" viewBox=\"0 0 15 16\" fill=\"none\">\r\n <path d=\"M7.66667 5.33203V7.9987M7.66667 10.6654H7.67333M14.3333 7.9987C14.3333 11.6806 11.3486 14.6654 7.66667 14.6654C3.98477 14.6654 1 11.6806 1 7.9987C1 4.3168 3.98477 1.33203 7.66667 1.33203C11.3486 1.33203 14.3333 4.3168 14.3333 7.9987Z\" stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span></p>\r\n </div>\r\n </div> \r\n <div class=\"card-header border-0 min-h-45px px-0 my-0\">\r\n <h3 class=\"card-title\">\r\n <!-- <span class=\"me-3 store-title\">{{item.storeName}}</span> -->\r\n <span class=\"ms-2 badge badge-light-default\" *ngIf=\"detection?.customer_id\">Cust ID : {{detection.customer_id}}</span>\r\n <span class=\"ms-2 badge badge-light-default\" *ngIf=\"detection?.queue_id\">Queue ID : {{detection.queue_id}}</span>\r\n <span class=\"ms-2 badge badge-light-default\" *ngIf=\"detection?.optum_id\">Optom ID : {{detection.optum_id}}</span>\r\n <!-- <span class=\"ms-2 badge badge-light-default\" *ngIf=\"detection?.date\">Date : {{detection.date|date:'dd-MM-yyyy' }}</span> -->\r\n <!-- <span class=\"ms-3 badge badge-light-default\" *ngIf=\"detection?.configTime\">Inspection time : {{detection.configTime}}</span> -->\r\n <span class=\"ms-3 badge badge-light-default\" *ngIf=\"detection?.temp_id\">TempId : {{detection.temp_id}}</span>\r\n <span class=\"ms-3 badge badge-light-default\" *ngIf=\"detection?.time_spend\">Timespend : {{detection.time_spend}}Mins</span> \r\n \r\n </h3>\r\n \r\n <!-- Switch toggle -->\r\n <div class=\"card-toolbar\">\r\n <div class=\"col-md-12 text-end\">\r\n <span class=\"ms-3 badge badge-light-default\" *ngIf=\"detection?.entry_time\">Entry time : {{detection.entry_time}}</span> \r\n <span class=\"ms-3 badge badge-light-default\" *ngIf=\"detection?.exit_time\">Exit time : {{detection.exit_time}}</span> \r\n <span class=\"ms-3 badge badge-light-success\" *ngIf=\"detection?.adherence_rate\">Adherence Rate : {{detection.adherence_rate}}</span>\r\n <span class=\"ms-3 badge badge-light-primary text-capitalize\" *ngIf=\"detection?.category\"> {{detection.category}}</span>\r\n <span class=\"ms-3 badge badge-light-default\" *ngIf=\"detection?.customer_entry_time\">Entry time : {{detection.customer_entry_time}}</span>\r\n <span class=\"ms-3 badge badge-light-default\" *ngIf=\"detection?.customer_exit_time\">Exit time : {{detection.customer_exit_time}}</span> \r\n \r\n \r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n <div class=\"my-0\" *ngIf=\"select !='eyetest'\">\r\n <video controls class=\"w-100 h-450px rounded-top\"\r\n src=\"{{environment.TraxAIchecklistCDN}}{{detection.video_path}}\" alt=\"\"> \r\n </video> \r\n </div>\r\n <div class=\"my-0\" *ngIf=\"select ==='eyetest'\">\r\n <video controls class=\"w-100 h-450px rounded-top\"\r\n src=\"{{environment.EyeTestCDN}}{{detection.video_path}}\" alt=\"\"> \r\n </video> \r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"select ==='storeopenandclose'\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n <div class=\"row px-10 mt-5\">\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Checklist Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">: {{this.checklistName}} </p>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 margin-top-side\" *ngFor=\"let store of storeOpencloseView\">\r\n <div class=\" mx-8 my-8\" *ngFor=\"let item of store.imagesData\">\r\n <div class=\"row px-10 mt-5 margin-left-side \">\r\n <div class=\"col-md-3\" *ngIf=\"item?.buffer_open\">\r\n <h3 class=\"uni-title\">Buffer for Open Time :</h3>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"item?.buffer_open\">\r\n <p class=\"uni-subtitle\">: {{item.buffer_open }}</p>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"item?.buffer_close\">\r\n <h3 class=\"uni-title\">Buffer for Close Time :</h3>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"item?.buffer_close\">\r\n <p class=\"uni-subtitle\">: {{item.buffer_close }}</p>\r\n </div>\r\n <div class=\"col-md-3\" >\r\n <h3 class=\"uni-title\">Detection Status</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\">:<span class=\"ms-3 badge badge-light-danger\" *ngIf=\"item?.Flag\">Breached</span>\r\n <span class=\"ms-3 badge badge-light-success\" *ngIf=\"!item?.Flag\">Not-breached</span> </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Date</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\">: {{item.date|date:'dd-MM-yyyy' }}</p>\r\n </div>\r\n </div> \r\n <div class=\"snapcard\">\r\n <div class=\"snapheader ms-6\">\r\n {{item.storeName}}\r\n </div>\r\n <div class=\"row m-0 w-100\">\r\n <div class=\"col-6\">\r\n <div class=\"img mt-4 px-3 position-relative\" *ngIf=\"!item.openTime\">\r\n <div class=\"preview align-items-center justify-content-center d-flex flex-column\">\r\n <span>\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n \\\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n \r\n </span>\r\n <span class=\"prvtxt mt-5 textclr\">Preview not\r\n available</span>\r\n <span class=\"refreshtxt mt-2 textclr\">The selected camera\r\n is not available at the moment.</span>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"item.openTime\">\r\n <img class=\"mx-1 img-opc\"\r\n src=\"{{environment.TraxOpenclosechecklistCDN}}{{item.storeId}}/{{item.dateString|date:'dd-MM-yyyy'}}/operation_snaps/open.jpeg\"\r\n alt=\"open close snap\">\r\n <div class=\"col-12\">\r\n <div class=\"d-flex flex-stack mx-1 mt-2\">\r\n <div>\r\n <div class=\"snaptext\">Opening Snap</div>\r\n <div class=\"snaptime\">{{item.openTime}} - {{item.date}}\r\n </div>\r\n </div>\r\n \r\n <span class=\"badge badge-light-primary snapbadge\"\r\n *ngIf=\"!item?.openTimeFlag\">On Time</span>\r\n <span class=\"badge badge-light-danger snapbadge\"\r\n *ngIf=\"item?.openTimeFlag\">Late Open</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"img mt-4 px-3 position-relative\" *ngIf=\"!item.closeTime\">\r\n <div class=\"preview align-items-center justify-content-center d-flex flex-column\">\r\n <span>\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n \\\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n \r\n </span>\r\n <span class=\"prvtxt mt-5 textclr\">Preview not\r\n available</span>\r\n <span class=\"refreshtxt mt-2 textclr\">The selected camera\r\n is not available at the moment.</span>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"item.closeTime\">\r\n <img class=\"mx-1 img-opc\"\r\n src=\"{{environment.TraxOpenclosechecklistCDN}}{{item.storeId}}/{{item.dateString|date:'dd-MM-yyyy'}}/operation_snaps/close.jpeg\"\r\n alt=\"Checklist Video Player\">\r\n <div class=\"col-12\">\r\n <div class=\"d-flex flex-stack mx-1 mt-2\">\r\n <div>\r\n <div class=\"snaptext\">Closing Snap</div>\r\n <div class=\"snaptime\">{{item.closeTime}} - {{item.date}}\r\n </div>\r\n </div>\r\n <span class=\"badge badge-light-primary snapbadge\"\r\n *ngIf=\"!item?.closeTimeFlag\">On Time</span>\r\n <span class=\"badge badge-light-danger snapbadge\"\r\n *ngIf=\"item?.closeTimeFlag\">Early Close</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"boximageChecklist.includes(select)\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n <div class=\"col-md-12\" *ngFor=\"let store of queueAlertView\">\r\n <div class=\"row px-10 mt-5\" *ngIf=\"showmulti\">\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Store Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">{{store?.storeName}} | {{store?.city}},{{store?.state}},{{store?.country}} </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Checklist Name:</h3>\r\n\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">{{checklistName}}</p>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"select==='boxalert'||select==='suspiciousfootfall'||select==='drinking'||select==='bagdetection'\">\r\n <h3 class=\"uni-title\">Description:</h3>\r\n </div>\r\n <div class=\"col-md-9\" *ngIf=\"select==='boxalert'||select==='suspiciousfootfall'||select==='drinking'||select==='bagdetection'\">\r\n <p class=\"uni-subtitle\">{{checkListDescription}}</p>\r\n </div>\r\n\r\n </div> \r\n <div class=\"row m-0 w-100 \" >\r\n <div class=\"col-4 mt-2\" *ngFor=\"let item of store.imagesData\">\r\n <div class=\"card bordercolor bg-secondary mt-8\">\r\n <div class=\"text-start ms-5 mt-2 mb-5\" >\r\n <div *ngIf=\"item.zone\">\r\n <span class=\"btn btn-secondary rounded-lg p-2\">{{item.zone}}</span>\r\n </div>\r\n \r\n <div class=\"mt-3 fw-semibold\">{{ item.date_timestamp }}</div>\r\n </div>\r\n <img class=\"w-100 h-250px rounded-bottom\" (click)=\"openModel(item)\"\r\n src=\"{{environment.TraxAIchecklistCDN}}{{item.path}}\" alt=\"\"> \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <lib-pagination *ngIf=\"!viewloading && !viewnoData\" [itemsPerPage]=\"limit\" [currentPage]=\"offset\" [totalItems]=\"totalCount\"\r\n [paginationSizes]='paginationSizes' [pageSize]=\"limit\"\r\n (pageChange)=\"onPageChangeview($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </section>\r\n </div>\r\n\r\n\r\n\r\n </div>\r\n <div *ngIf=\"!showsidenav\" (click)=\"sidenav()\" class=\"backButtonleft text-center pt-1 cursor-pointer\">\r\n <svg class=\"mt-2 ms-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M9.72714 12.6365L13.3635 9.00013L9.72714 5.36377M4.63623 12.6365L8.27259 9.00013L4.63623 5.36377\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</div> \r\n\r\n<div class=\"row card mx-0 p-3 \" *ngIf=\"checkAIchecklist()&&!viewnoData&&userDetails?.role!='user'\"> \r\n <div class=\"col-md-12 text-end\">\r\n<button class=\"btn btn-sm border-primary1\" [disabled]=\"!approvalStatus\" (click)=\"appoveChecklist()\">Approve\r\n</button>\r\n</div>\r\n</div>\r\n<ng-template #zoomPopup let-model>\r\n <div class=\"p-8\">\r\n <div class=\"modal-header pt-0 ps-1 pe-0\">\r\n <div>\r\n <div class=\"text-start mt-2\">\r\n <div *ngIf=\"viewImage.zone\">\r\n <span class=\"btn btn-secondary rounded-lg p-2\">{{viewImage.zone}}</span>\r\n </div>\r\n <div *ngIf=\"viewImage.emptyBoxCount\">\r\n <span >Empty shelves : {{viewImage.emptyBoxCount}}</span>\r\n </div>\r\n \r\n <div *ngIf=\"viewImage.entry_time\">\r\n <span >Entry Time : {{viewImage.entry_time}}</span>\r\n </div>\r\n <div *ngIf=\"viewImage.exit_time\">\r\n <span >Exit Time : {{viewImage.exit_time}}</span>\r\n </div>\r\n <div *ngIf=\"viewImage.temp_id\">\r\n <span >Temp Id : {{viewImage.temp_id}}</span>\r\n </div>\r\n <div *ngIf=\"viewImage.time_spend\">\r\n <span >Time Spend : {{viewImage.time_spend}} Mins</span>\r\n </div>\r\n \r\n <div class=\"mt-2\" *ngIf=\"viewImage.threshold&&viewImage.Dwelltime\"><p>If the queue exceeds {{viewImage.threshold}} people and wait time surpasses {{viewImage.Dwelltime}} minutes, an alert will be triggered</p></div>\r\n <div class=\"mt-3 fw-semibold\">{{ viewImage.date_timestamp }}</div>\r\n </div>\r\n \r\n </div>\r\n <div data-bs-dismiss=\"modal\">\r\n <!-- <span class=\"stream fw-semibold text-nowrap me-5\" *ngIf=\"camera.height && camera.width\"> Resolution: {{camera.height}} X {{camera.width}}</span> -->\r\n <span class=\"btn btn-sm btn-icon btn-active-color-primary me-0\" (click)=\"model.dismiss()\"><svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M15 5L5 15M5 5L15 15\" stroke=\"#667085\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"viewImage.path\" class=\"mt-2 overflow-auto\">\r\n <img class=\"rounded-4 mt-5 img-popup-src w-100\" src=\"{{environment.TraxAIchecklistCDN}}{{viewImage.path}}\">\r\n </div>\r\n\r\n \r\n </div>\r\n\r\n</ng-template>", styles: [".gallery-card{padding:24px;border-radius:12px;background:#fff}.gallery-card .header{color:#101828;font-size:18px;font-weight:500;line-height:28px}.img{border-radius:10px;border:1px solid var(--Gray-500, #667085);background:var(--Gray-100, #F2F4F7);width:100%;height:230px}.prvtxt{color:var(--Gray-500, #667085);font-family:Inter;font-size:20px;font-style:normal;font-weight:700;line-height:20px;letter-spacing:-.4px}.refreshtxt{color:var(--Gray-400, #98A2B3);font-family:Inter;font-size:12px;font-style:normal;font-weight:500;line-height:18px}::ng-deep .applyBtn{display:none!important}::ng-deep .custom-height-modal .modal-dialog{max-height:80vh;height:80vh}::ng-deep .custom-height-modal .modal-content{overflow:auto;max-height:100%}:host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .md-drppicker.shown.drops-down-right{transform-origin:0 0;width:560px!important}:host::ng-deep .daterangepicker-input+.ngx-daterangepicker-material .applyBtn{display:none}:host::ng-deep .md-drppicker.drops-down-right.ltr.show-ranges.shown{top:65px!important}:host::ng-deep .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;right:-475px!important;left:unset!important;height:400px!important}:host::ng-deep .md-drppicker .btn{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}:host::ng-deep .md-drppicker .ranges ul li button{padding:12px 16px;width:160px;color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:20px;background:none;border:none;text-align:left;cursor:pointer}:host::ng-deep .md-drppicker td.active,:host::ng-deep .md-drppicker td.active:hover{background-color:#029cf4!important;border-radius:20px!important;color:var(--White, #FFF)!important;text-align:center!important;font-size:14px!important;font-weight:500!important;line-height:20px}:host::ng-deep .md-drppicker.ltr .ranges{float:left;margin-top:10px!important}:host::ng-deep .md-drppicker td.in-range{background:var(--Primary-50, #EAF8FF)}:host::ng-deep .md-drppicker .ranges ul li button.active{background:var(--Primary-50, #EAF8FF)!important;border-radius:8px!important;color:var(--Primary-700, #009BF3);font-size:14px!important;font-weight:500!important;line-height:20px!important}:host::ng-deep table th,:host::ng-deep table td{width:40px!important;height:40px!important;padding:10px 8px!important}:host::ng-deep .md-drppicker td.available.prev,:host::ng-deep .md-drppicker th.available.prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .md-drppicker td.available.next,:host::ng-deep .md-drppicker th.available.next{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep table th{border-bottom:0px solid var(--Gray-200, #EAECF0)!important;background:transparent!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:16px!important;font-weight:500!important;line-height:24px}:host::ng-deep .md-drppicker .btn.btn-default{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize;margin-right:10px!important}:host::ng-deep .md-drppicker td.available.invalid-date{text-decoration:line-through;pointer-events:none;color:#a9a9a9}:host::ng-deep .md-drppicker td.available.today:not(.invalid-date){text-decoration:unset;pointer-events:unset;color:unset}.btn-primary{line-height:18px!important}.checkbox-label{color:#344054;font-size:14px;font-weight:500;line-height:20px;cursor:pointer}.checklist-left .checklist-title{overflow:hidden;color:var(--Black, #101828)!important;text-overflow:ellipsis;font-size:18px!important;font-weight:500;line-height:28px}.checklist-left .checklist-text{overflow:hidden;color:var(--Black, #101828)!important;text-overflow:ellipsis;font-size:12px!important;font-weight:400!important;line-height:18px}.section{display:inline-block;width:600px;white-space:nowrap;outline:none!important;border:none!important;box-shadow:none!important;overflow:hidden!important;text-overflow:ellipsis!important;color:var(--Black, #101828)!important;font-size:16px!important;font-weight:500!important}.card hr{width:-webkit-fill-available}.editablecontent{color:var(--Gray-700, #344054)!important;font-size:16px!important;font-weight:400!important;line-height:24px}.rotate{transform:rotate(180deg);transition:1s}.question-left{color:var(--Gray-700, #344054)!important;font-size:16px;font-weight:400;line-height:24px}.view-all{padding:12px!important;border-radius:6px!important;background:var(--Primary-50, #EAF8FF)!important;color:var(--Primary-500, #33B5FF)!important;font-size:16px!important;font-weight:600!important;line-height:24px;text-decoration-line:underline!important}.view-questions{padding:12px!important;border-radius:6px!important;color:var(--Primary-500, #33B5FF)!important;font-size:16px!important;font-weight:600!important;line-height:24px;text-decoration-line:underline!important}.iconsize{width:110px;height:110px}.margin-left-side{margin-left:-35px}.margin-top-side{margin-top:-15px}input[type=checkbox]{width:16px!important;height:16px!important;margin:0;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:0!important;padding-top:8px;padding-right:5px}.uni-title{color:#000!important;font-size:18px!important;font-weight:600!important;line-height:28px}.uni-subtitle{color:#000!important;font-size:18px!important;font-weight:400!important;line-height:28px}.qa-heading{color:var(--Black, #101828)!important;font-size:18px!important;font-weight:700!important;line-height:28px;list-style:none}.qa-bodrer{padding:16px!important;border-radius:8px!important;border:1px solid var(--Gray-200, #EAECF0)!important;background:var(--text-primary, #FFF)!important;box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f!important}.title-ref{color:var(--Gray-900, #101828)!important;font-size:16px!important;font-weight:400!important;line-height:24px}.btn-outline-primary{border-radius:8px!important;border:1px solid var(--Primary-500, #33B5FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important;padding:calc(.7rem + 0px) calc(1.5rem + 1px)!important}.Partially{color:#000;font-size:18px!important;font-style:italic!important;font-weight:500;line-height:28px}.task-remarks{color:#000!important;font-size:18px!important;font-weight:400!important;line-height:28px}.backButtonright{border-radius:1000px!important;background:var(--text-primary, #FFF)!important;padding:12px!important;box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808!important;box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808!important;position:absolute;top:30px;right:-10px;z-index:0}.backButtonleft{border-radius:1000px!important;background:#fff;padding:14px!important;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;left:-20px;z-index:5}img.img-logo{width:100%;height:400px!important}.recap-img{width:100%;height:400px;object-fit:cover!important}.img-src{width:30%!important;height:20%!important}.dropdownselect{padding:20px 10px}.dropdownbg{width:Fill(372px) px;height:Hug(40px) px;padding:8px 16px;gap:0px;border-radius:6px 0 0;justify-content:space-between;opacity:0px;background:#eaf8ff}.detectionright{color:var(--Primary-700, #009BF3)!important;text-align:center;font-size:14px!important;font-weight:500;line-height:14px;float:right!important;mix-blend-mode:multiply}.backgroundBorder{background:#eaf8ff!important;color:#00a3ff!important;padding:12px;border-radius:8px;font-weight:500;line-height:10px}.withoutbackground{padding:8px;font-weight:500;line-height:10px}.snapcard{display:flex;padding:16px;flex-direction:column;align-items:flex-start;gap:16px;align-self:stretch;border-radius:8px;border:1px solid var(--Gray-200, #EAECF0);background:var(--White, #FFF);box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}.snapheader{color:var(--Black, #101828);font-size:16px;font-style:normal;font-weight:600;line-height:24px}.snaptext{color:var(--Gray-900, #101828);font-size:16px!important;font-style:normal;font-weight:600!important;line-height:24px}.snaptime{color:var(--Gray-900, #101828);font-size:12px!important;font-style:normal;font-weight:500!important;line-height:22px}.snapbadge{text-align:center;font-size:14px!important;font-style:normal;font-weight:500!important;line-height:20px}.btn-resize{font-size:13px!important;height:29px!important;line-height:11px!important;padding:1px!important}.preview{position:absolute;top:30%;left:14%}.w-25{width:17%!important}.w-40{width:40%!important}.usage-detection{color:var(--Primary-700, #009BF3);text-overflow:ellipsis!important;font-size:16px!important;font-style:normal;font-weight:400;line-height:16px;width:220Px}.usage-text{color:var(--Gray-700, #344054);text-overflow:ellipsis;font-size:16px;font-style:normal;font-weight:400;line-height:17px}.h-450px{object-fit:contain!important}.store-title{color:var(--Black, #101828)!important;font-size:18px;font-weight:700;line-height:28px}.img-opc{width:100%!important;height:300px!important;border-radius:12px!important}.h-900px{min-height:auto!important;max-height:2800px!important}.select-wrapper{position:relative;display:inline-block;width:100%}.placeholder-overlay{position:absolute;color:var(--Gray-500, #667085);font-family:Inter;font-size:16px!important;font-style:normal;font-weight:400;top:10px;left:15px;pointer-events:none;font-size:1.1rem;z-index:1}.flagclour{color:red}.remarksTxt{margin-top:10px;font-family:Inter;font-size:18px;font-weight:400;line-height:28px;text-align:left}.no-text-transform{text-transform:none!important}.border-val1{padding:8px 14px!important;border-radius:8px!important;border:1px solid var(--Primary-500, #33B5FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important}.font-task{color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}.border-default{padding:8px 14px!important;border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important}.font-defult-task{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}.nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.nav-item .nav-link:hover{border:none}.badge-num-primary{border-radius:16px!important;background:var(--Primary-50, #EAF8FF)!important;color:var(--Primary-700, #009BF3)!important;text-align:center;font-size:14px!important;font-style:normal;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}.badge-num-muted{border-radius:16px!important;background:var(--Primary-50, #F2F4F7)!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:14px;font-style:normal;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}.text-title{font-size:16px!important;font-weight:600!important;color:#101828!important;line-height:24px}.title-description{font-size:14px!important;font-weight:400;color:#101828!important;line-height:24px!important}.border-primary1{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:16px!important;font-weight:600;line-height:24px;text-transform:capitalize}.scroll-y{overflow-x:hidden;overflow-y:auto}.totalsize{width:18%}.view-detail{color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}.left-sidebar{position:sticky;top:0;width:33%;overflow-y:auto}.main-container{display:flex;align-items:flex-start}.right-content{flex-grow:1;width:67%}.bordercolor{border:1px solid var(--Gray-300, #D0D5DD)!important}.toastcard{border-radius:8px;background:var(--Primary-50, #EAF8FF);padding:8px 16px}.toasttext{overflow:hidden;color:var(--Primary-700, #009BF3);text-overflow:ellipsis;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.btn-outline{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d}.refreshtext{color:var(--Gray-700, #344054);font-size:14px;font-style:normal;font-weight:600;line-height:20px;text-transform:capitalize}.collage-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;height:450px;overflow-y:auto;grid-auto-rows:1fr;overflow:hidden}.collage-tile{width:100%;height:100%;overflow:hidden}.collage-tile img{width:100%;height:100%!important;border-radius:6px}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i6.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i9.DaterangepickerDirective, selector: "input[ngxDaterangepickerMd]", inputs: ["minDate", "maxDate", "autoApply", "alwaysShowCalendars", "showCustomRangeLabel", "linkedCalendars", "dateLimit", "singleDatePicker", "showWeekNumbers", "showISOWeekNumbers", "showDropdowns", "isInvalidDate", "isCustomDate", "isTooltipDate", "showClearButton", "customRangeDirection", "ranges", "opens", "drops", "firstMonthDayClass", "lastMonthDayClass", "emptyWeekRowClass", "emptyWeekColumnClass", "firstDayOfNextMonthClass", "lastDayOfPreviousMonthClass", "keepCalendarOpeningWithRange", "showRangeLabelOnInput", "showCancel", "lockStartDate", "timePicker", "timePicker24Hour", "timePickerIncrement", "timePickerSeconds", "closeOnAutoApply", "endKeyHolder", "startKey", "locale", "endKey"], outputs: ["change", "rangeClicked", "datesUpdated", "startDateChanged", "endDateChanged", "clearClicked"] }, { kind: "directive", type: i4.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i10.ReactiveSelectComponent, selector: "lib-reactive-select", inputs: ["idField", "nameField", "label", "data"], outputs: ["itemChange"] }, { kind: "component", type: i11.CustomSelectComponent, selector: "lib-stores-select", inputs: ["items", "searchField", "multi", "idField", "selectedValues", "disabled", "label"], outputs: ["selected"] }, { kind: "component", type: i12.GroupSelectComponent, selector: "lib-group-select", inputs: ["items", "searchField", "multi", "idField", "selectedValues", "disabled", "label"], outputs: ["selected"] }, { kind: "component", type: i13.CustomsingleSelectComponent, selector: "lib-single-select", inputs: ["items", "searchField", "multi", "idField", "selectedValues", "disabled", "label"], outputs: ["selected"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.DatePipe, name: "date" }] });
2805
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: GalleryComponent, selector: "lib-gallery", host: { listeners: { "document:click": "onClick($event)" } }, viewQueries: [{ propertyName: "zoomPopup", first: true, predicate: ["zoomPopup"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"notifyCount>0\" class=\"h-xl-100 flex-row flex-stack flex-wrap p-2\">\r\n <!-- toast card starts -->\r\n <div class=\"toastcard col-md-12 mb-4\">\r\n <div class=\"d-flex align-items-center justify-content-between w-100\">\r\n <span class=\"align-items-start\">\r\n <span class=\"toasttext d-block\"><span class=\"me-5\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"20\" viewBox=\"0 0 16 20\" fill=\"none\">\r\n <path\r\n d=\"M9.14234 2.4V1.6875C9.14234 1.03178 8.63166 0.5 7.99955 0.5C7.36744 0.5 6.85675 1.03178 6.85675 1.6875V2.4C4.21761 2.95033 2.28558 5.34649 2.28558 8.21875V8.91641C2.28558 10.6643 1.66918 12.3453 0.553532 13.6516L0.28869 13.9596C-0.0103044 14.3121 -0.0840396 14.8094 0.100307 15.2361C0.284654 15.6629 0.69281 15.9375 1.14279 15.9375H14.8563C15.3063 15.9375 15.7134 15.6629 15.8991 15.2361C16.0848 14.8094 16.0098 14.3121 15.7098 13.9596L15.4456 13.6516C14.3313 12.3453 13.7135 10.6643 13.7135 8.91641V8.21875C13.7135 7.94125 13.6952 7.66819 13.6597 7.40081C13.2676 7.54576 12.8432 7.625 12.4 7.625C10.4118 7.625 8.8 6.03001 8.8 4.0625C8.8 3.46778 8.88193 2.89289 9.14234 2.4C9.16417 2.40461 9.12061 2.39514 9.14234 2.4Z\"\r\n fill=\"#00A3FF\" />\r\n <path\r\n d=\"M6.38178 18.8061C6.81033 19.2514 7.39244 19.5 7.99955 19.5C8.57452 19.5 9.18877 19.2514 9.61732 18.8061C10.0459 18.3607 10.2851 17.7225 10.2851 17.125H5.71396C5.71396 17.7225 5.95323 18.3607 6.38178 18.8061Z\"\r\n fill=\"#00A3FF\" />\r\n <circle cx=\"13\" cy=\"3.5\" r=\"3\" fill=\"#F04438\" />\r\n </svg>\r\n </span>New Detection Found! Refresh Now to view new detection</span>\r\n </span>\r\n <button (click)=\"refreshnow()\" type=\"button\"\r\n class=\"btn-outline btn align-items-end text-nowrap ms-4 cursor-pointer\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_12165_62781)\">\r\n <path\r\n d=\"M19.1672 3.33172V8.33172M19.1672 8.33172H14.1672M19.1672 8.33172L15.3089 4.69838C14.1594 3.54817 12.6672 2.80271 11.0572 2.57434C9.44716 2.34597 7.80653 2.64706 6.38251 3.43225C4.9585 4.21744 3.82826 5.44418 3.1621 6.92761C2.49595 8.41104 2.32997 10.0708 2.68919 11.6568C3.0484 13.2427 3.91335 14.669 5.15368 15.7206C6.39401 16.7722 7.94254 17.3922 9.5659 17.4872C11.1893 17.5822 12.7995 17.147 14.154 16.2471C15.5085 15.3473 16.5339 14.0316 17.0756 12.4984\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_12165_62781\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"refreshtext ms-2\"></span> Refresh Now </button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"gallery-card po\">\r\n <div class=\"header mb-4\">Gallery</div>\r\n\r\n <form [formGroup]=\"galleryForm\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3 mb-3\">\r\n <div class=\"position-relative\">\r\n <span style=\"top: 20%;\" class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input class=\"fx-date-range form-control ps-14 z-2\" style=\"min-width: 260px !important;\"\r\n type=\"text\" matInput ngxDaterangepickerMd [drops]=\"'down'\" [opens]=\"'right'\"\r\n [alwaysShowCalendars]=\"false\" [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"false\"\r\n autocomplete=\"off\" [(ngModel)]=\"selectedDateRange\" [ngModelOptions]=\"{standalone: true}\"\r\n (datesUpdated)=\"datechange($event)\" (click)=\"resetValidation()\"\r\n (startDateChanged)=\"onStartDateChange($event)\" [isCustomDate]=\"isCustomDate\"\r\n [autoApply]=\"true\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n name=\"daterange\" [readonly]=\"true\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 mb-4\">\r\n <lib-reactive-select formControlName=\"type\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"type\" (itemChange)=\"typeChange($event)\"></lib-reactive-select>\r\n </div>\r\n <div class=\"col-md-4 mb-4\">\r\n <lib-single-select [items]=\"checklists\" [multi]=\"false\" [searchField]=\"'checkListName'\"\r\n [idField]=\"'_id'\" (selected)=\"checklistNamechange($event,false)\"\r\n [selectedValues]=\"[{checkListName:galleryForm.get('checklistName')?.value}]\"></lib-single-select>\r\n </div>\r\n <div class=\"col-md-3 mb-4\">\r\n <lib-reactive-select formControlName=\"answerType\" [isDisabled]=\"!showflag\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"answerType\"></lib-reactive-select>\r\n </div>\r\n <div class=\"col-md-2 mb-4\">\r\n\r\n <lib-reactive-select formControlName=\"filtertype\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"filtertype\" (itemChange)=\"filterChange($event)\"></lib-reactive-select>\r\n\r\n </div>\r\n <div class=\"col-md-3 mb-4\" *ngIf=\"galleryForm.get('filtertype')?.value ==='Clusters'\">\r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(galleryForm.get('ClusterList')?.value?.length)\">\r\n Select cluster\r\n </div>\r\n <lib-group-select [items]=\"ClusterList\" [disabled]=\"false\" [multi]=\"true\"\r\n [searchField]=\"'groupName'\" [idField]=\"'groupName'\" (selected)=\"ongroupSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('ClusterList')?.value\">\r\n </lib-group-select>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-md-3 mb-4\" *ngIf=\"galleryForm.get('filtertype')?.value ==='Teams'\">\r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(galleryForm.get('TeamsList')?.value?.length)\">\r\n Select Teams\r\n </div>\r\n <lib-group-select [items]=\"TeamsList\" [disabled]=\"false\" [multi]=\"true\"\r\n [searchField]=\"'teamName'\" [idField]=\"'teamName'\" (selected)=\"onTeamsSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('TeamsList')?.value\">\r\n </lib-group-select>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-md-3 mb-4\" *ngIf=\"galleryForm.get('filtertype')?.value ==='Clusters'\">\r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(galleryForm.get('storeList')?.value?.length)\">\r\n Select Stores\r\n </div>\r\n <lib-stores-select [items]=\"storeList\" [disabled]=\"false\" [multi]=\"true\"\r\n [searchField]=\"'storeName'\" [idField]=\"'storeId'\" (selected)=\"onStoreSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('storeList')?.value\"></lib-stores-select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 mb-4\" *ngIf=\"galleryForm.get('filtertype')?.value ==='Teams'\">\r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(galleryForm.get('userList')?.value?.length)\">\r\n Select users\r\n </div>\r\n <lib-stores-select [items]=\"userList\" [disabled]=\"false\" [multi]=\"true\"\r\n [searchField]=\"'userName'\" [idField]=\"'userName'\" (selected)=\"onUserSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('userList')?.value\"></lib-stores-select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n <div class=\"d-flex justify-content-end\">\r\n <div class=\"me-5 w-100\" *ngIf=\"select === 'eyetest'\">\r\n <select class=\"form-select\" [(ngModel)]=\"category\"\r\n [ngModelOptions]=\"{standalone: true}\">\r\n <option value=\"all\">All</option>\r\n <option value=\"adults\">Adults</option>\r\n <option value=\"kids\">Kids</option>\r\n </select>\r\n </div>\r\n <div class=\"me-5 w-100\" *ngIf=\"select === 'cleaning'||select ==='scrum'\">\r\n <select class=\"form-select\" [(ngModel)]=\"category\"\r\n [ngModelOptions]=\"{standalone: true}\">\r\n <option value=\"all\">All</option>\r\n <option value=\"rejected\">Breached</option>\r\n <option value=\"approved\">Not-breached</option>\r\n </select>\r\n </div>\r\n <div class=\"me-5 w-100 text-start\" *ngIf=\"select === 'queuealert'\">\r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\"\r\n *ngIf=\"!(galleryForm.get('zoneList')?.value?.length)\">\r\n Select Zone\r\n </div>\r\n <lib-stores-select [items]=\"zoneList\" [disabled]=\"false\" [multi]=\"true\"\r\n [searchField]=\"'value'\" [idField]=\"'key'\" (selected)=\"onzoneSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('zoneList')?.value\"></lib-stores-select>\r\n </div>\r\n </div>\r\n <div class=\"me-5 w-50\" *ngIf=\"showflag\">\r\n <select class=\"form-select\" (change)=\"approveFilterChange($event)\"\r\n [(ngModel)]=\"approveFilter\" [ngModelOptions]=\"{standalone: true}\">\r\n <option value=\"all\">All</option>\r\n <option value=\"Approved\">Approved</option>\r\n <option value=\"notapproved\">Not-Approved</option>\r\n </select>\r\n </div>\r\n <span class=\"me-4 mt-3\" *ngIf=\"showflag\">\r\n <input formControlName=\"viewRedo\" change type=\"checkbox\" (click)=\"redoChanged($event)\"\r\n class=\"form-check-input cursor-pointer mt-1 me-2\" id=\"viewRedo\">\r\n <label class=\"checkbox-label\" for=\"viewRedo\">Re-do</label>\r\n </span>\r\n <span class=\"me-3 mt-3\" *ngIf=\"showflag&&galleryForm.value.type==='checklist'\">\r\n <input formControlName=\"viewFlag\" change type=\"checkbox\" (click)=\"flagChanged($event)\"\r\n class=\"form-check-input cursor-pointer mt-1 me-2\" id=\"viewFlag\">\r\n <label class=\"checkbox-label\" for=\"viewFlag\">Flag</label>\r\n </span>\r\n\r\n <a (click)=\"onSubmit()\" type=\"submit\" class=\"btn btn-primary px-4 \"><span>Apply</span></a>\r\n <!-- <a (click)=\"notify([])\" type=\"submit\" class=\"btn btn-primary px-4 \"><span>test</span></a> -->\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n </form>\r\n</div>\r\n<div class=\"card my-2\">\r\n <div class=\"row main-container my-5 \">\r\n\r\n <div [ngClass]=\"showsidenav ? 'col-md-4 left-sidebar':'d-none'\" class=\"h-650px\">\r\n <div class=\"position-relative h-650px scroll-y\">\r\n <div class=\"card-body p-5\">\r\n <div class=\"checklist-left\">\r\n <div class=\"checklist-title\">{{checklistName}}</div>\r\n <div class=\"checklist-text\">{{checkListDescription}}</div>\r\n </div>\r\n <div *ngIf=\"loading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"noData&&select === 'custom' || noData&&select === 'task'\" class=\"row mt-20\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"w-75 h-300px\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title mt-0\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this checklist</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"noData&&select !== 'custom'&&select !== 'task'\" class=\"row mt-20\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div class=\"card-body mt-20 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src mt-5 w-40\" src=\"./assets/tango/Icons/Nodata2.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No Detections found</div>\r\n <div class=\"nodata-sub\">There is no breaches for the selected period</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <section *ngIf=\"!noData && !loading\">\r\n\r\n <div *ngIf=\"select === 'custom'||select === 'task'\">\r\n <div class=\"text-end mt-10\">\r\n <!-- <button class=\"btn btn-outline w-25 me-3 btn-resize\" (click)=\"viewChecklists()\"> Reset </button> -->\r\n <button class=\"btn btn-outline w-25 me-3 btn-resize\"\r\n *ngIf=\"selectedSection.length>0||tempselectedSection.length>0\"\r\n (click)=\"onchecklistreset()\"> Reset </button>\r\n <button *ngIf=\"selectedSection.length>0||tempselectedSection.length>0\"\r\n class=\"btn btn-primary w-25 btn-resize\"\r\n (click)=\"selectsinglequestion()\">Apply</button>\r\n </div>\r\n <div class=\"my-6\" [ngClass]=\"selectedSection.length===0 ? 'view-all':'view-questions'\"\r\n style=\"cursor: pointer;\" (click)=\"onchecklistreset()\">\r\n View All Answers\r\n </div>\r\n <div class=\"mx-2\" *ngFor=\"let section of checklistData; let i=index;\">\r\n <div class=\"d-flex align-items-center justify-content-between mt-4\"\r\n style=\"cursor: pointer;\" (click)=\"accordian(i)\">\r\n <div class=\"fs-4 fw-bold section\" *ngIf=\"galleryForm.value.type==='checklist'\">\r\n {{section.sectionName}}</div>\r\n <hr class=\"mx-2\">\r\n <svg class=\"cursor-pointer\" [ngClass]=\"{'rotate' : show !== i}\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"25\" height=\"25\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n <div *ngIf=\"show===i\" class=\"question-left\">\r\n <div cdkDropList [cdkDropListData]=\"section.questions\">\r\n <div *ngFor=\"let question of section.questions;let j=index;\"\r\n class=\"d-flex my-2 q-btn\" cdkDrag>\r\n <input id=\"label\" [(ngModel)]=\"question.checked\"\r\n (click)=\"selectedQuestion($event,section,question)\"\r\n class=\"form-check-input cursor-pointer mt-2 me-4\" type=\"checkbox\">\r\n <div class=\"editablecontent\" [ngClass]=\"question?.checked ? 'view-all':''\"\r\n style=\"cursor: pointer;\">\r\n {{question.qno}} . {{question.qname}}\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- </div> -->\r\n <div *ngIf=\"combinedChecklist.includes(select)\">\r\n <div class=\"text-end mt-10\">\r\n <button class=\"btn btn-outline w-25 me-3 btn-resize\" (click)=\"onreset()\"> Reset\r\n </button>\r\n <button class=\"btn btn-primary w-25 btn-resize\" (click)=\"onview()\">Apply</button>\r\n </div>\r\n <div class=\"dropdownselect h-900px scroll-y\">\r\n <div class=\"d-flex justify-content-left \"\r\n [ngClass]=\"selectAll ? 'backgroundBorder':'withoutbackground'\">\r\n <input class=\"form-check-input cursor-pointer me-4\" type=\"checkbox\"\r\n [(ngModel)]=\"selectAll\" (click)=\"selectAllStore($event)\"> <span\r\n [ngClass]=\"selectAll ? 'usage-detection':'usage-text'\">Select All</span>\r\n </div>\r\n <!-- dropdownbg -->\r\n <div class=\"my-4\" *ngFor=\"let list of mobileusageDataList;let i=index\">\r\n <div (change)=\"updateCheck($event,list)\"\r\n [ngClass]=\"list.checked ? 'backgroundBorder':'withoutbackground'\">\r\n <input id=\"label{{i}}\" class=\"form-check-input cursor-pointer me-4\"\r\n type=\"checkbox\" [(ngModel)]=\"list.checked\">\r\n <label for=\"label{{i}}\"\r\n [ngClass]=\"list.checked ? 'usage-detection':'usage-text'\">{{list?.storeName}}</label>\r\n <span class=\"badge badge-light-primary detectionright\"\r\n *ngIf=\"list.detection\">{{list.detection}} Detections</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n <div *ngIf=\"showsidenav\" (click)=\"sidenav()\" class=\"backButtonright text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M11 17L6 12L11 7M18 17L13 12L18 7\" stroke=\"#101828\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n [ngClass]=\"showsidenav ? 'col-md-8 border border-bottom-0 border-top-0 border-left border-5 right-sidebar':'col-md-12'\">\r\n <div class=\"position-relative \">\r\n <div class=\"card-header border-0 px-0 my-0\"\r\n *ngIf=\"(select === 'custom' || select === 'task'||select === 'cleaning'||select ==='scrum'||select ==='storeopenandclose'||select ==='inventorycount'||select ==='carsattended'||select ==='numberplateinfo') && !viewloading && !viewnoData\">\r\n <h3></h3>\r\n <!-- Switch toggle -->\r\n <div class=\"card-toolbar\" *ngIf=\"!galleryForm.value.viewRedo\">\r\n <div class=\"me-4\" *ngIf=\"showsingle&&select ==='custom'\" >\r\n <button [disabled]=\"selectedUsers.length==0&&selectedStores.length==0\" (click)=\"createMultipleTask('task')\"\r\n class=\"btn btn-primary form-control no-text-transform\" >Create Task</button>\r\n \r\n </div>\r\n <div class=\"me-4\" *ngIf=\"showsingle&&select ==='custom'\" >\r\n <button class=\"btn btn-sm btn-default border-default me-3\" [disabled]=\"selectedUsers.length==0&&selectedStores.length==0\" (click)=\"createMultipleTask('redo')\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_6004_11734)\">\r\n <path d=\"M19.1693 3.33331V8.33332M19.1693 8.33332H14.1693M19.1693 8.33332L15.3026 4.69998C14.407 3.80391 13.299 3.14932 12.0819 2.79729C10.8649 2.44527 9.57853 2.40727 8.34284 2.68686C7.10716 2.96645 5.96244 3.55451 5.01549 4.39616C4.06855 5.23782 3.35024 6.30564 2.9276 7.49998M0.835938 16.6666V11.6666M0.835938 11.6666H5.83594M0.835938 11.6666L4.7026 15.3C5.59823 16.1961 6.70625 16.8506 7.92328 17.2027C9.14031 17.5547 10.4267 17.5927 11.6624 17.3131C12.898 17.0335 14.0428 16.4455 14.9897 15.6038C15.9367 14.7621 16.655 13.6943 17.0776 12.5\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_6004_11734\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span class=\"ms-2 font-defult-task\">Redo</span>\r\n </button>\r\n \r\n </div>\r\n <div class=\"position-relative cursor-pointer me-10\">\r\n <div class=\" btn btn-primary form-control no-text-transform\" (click)=\"exportDet($event)\">\r\n {{ exportLabel }} <!-- Bind label text here -->\r\n </div>\r\n <div *ngIf=\"exportShow\"\r\n class=\"card py-2 position-absolute productdrop top-10 w-150px end-0 z-1\">\r\n <ul class=\"list-unstyled mb-2\">\r\n <li class=\"cursor-pointer py-4 checkbox-label mx-2\"\r\n *ngIf=\"pdfExportTypes.includes(select)\" type=\"button\"\r\n (click)=\"setExportAsPPT('Export as PDF','pdf')\">\r\n Export as PDF\r\n </li>\r\n <li class=\" cursor-pointer checkbox-label py-4 mx-2\"\r\n *ngIf=\"csvExportTypes.includes(select)\" type=\"button\"\r\n (click)=\"setExportAsPPT('Export as CSV','csv')\">\r\n Export as CSV\r\n </li>\r\n <li *ngIf=\"selectedSection.length>0||select === 'cleaning'||select ==='scrum'||select ==='storeopenandclose'||select ==='inventorycount'||select ==='carsattended'||select ==='numberplateinfo'\"\r\n class=\" cursor-pointer checkbox-label py-4 mx-2\" type=\"button\"\r\n (click)=\"setExportAsPPT('Export as PPT','ppt')\">\r\n Export as PPT\r\n </li>\r\n <li *ngIf=\"selectedSection.length>0||select === 'cleaning'||select ==='scrum'||select ==='storeopenandclose'\"\r\n class=\"cursor-pointer checkbox-label py-4 mx-2\" type=\"button\"\r\n (click)=\"setExportAsPPT('Export as ZIP','zipfiles')\">\r\n Export as ZIP\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-body p-0\">\r\n <div>\r\n <div *ngIf=\"viewloading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"viewnoData&&select !== 'custom'&&select !== 'task'\" class=\"row mt-20\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div\r\n class=\"card-body mt-20 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src mt-5 w-40\" src=\"./assets/tango/Icons/Nodata2.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No Detections found</div>\r\n <div class=\"nodata-sub\">There is no breaches for the selected period</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"viewnoData&&select === 'custom' || viewnoData&&select === 'task'\" class=\"row mt-20\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div\r\n class=\"card-body mt-20 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src mt-5 w-40\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this checklist</div>\r\n </div>\r\n </div>\r\n </div>\r\n <section *ngIf=\"!viewloading && !viewnoData\">\r\n <div *ngIf=\"select==='custom'||select==='task' \">\r\n <div *ngIf=\"showsingle\" class=\"qa-heading m-3 mx-11\">\r\n {{this.selectedSection[0]?.questions[0]}}</div>\r\n <div *ngIf=\"showsingle&&showfilter\">\r\n <ul\r\n class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap mx-10\">\r\n <li class=\"nav-item\" *ngFor=\"let item of answerFilter\">\r\n <a (click)=\"taskTab(item)\"\r\n [ngClass]=\"galleryForm.value.filter === item.key ? 'active' : ''\"\r\n class=\"nav-link cursor-pointer no-border me-3\">\r\n {{item.key}}<span class=\"mx-2 \"\r\n [ngClass]=\"galleryForm.value.filter === item.key ? 'badge-num-primary' :'badge-num-muted'\">{{item.count}}</span>\r\n </a>\r\n </li>\r\n\r\n </ul>\r\n\r\n </div>\r\n\r\n <div *ngFor=\"let checklist of viewChecklistsData?.checklistAnswers\">\r\n\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''&&showmulti\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n\r\n\r\n <div class=\"row px-10 mt-5\" *ngIf=\"showmulti\">\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Store Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">{{checklist?.storeProfile?.storeName}} </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\" *ngIf=\"galleryForm.value.type==='checklist'\">Checklist\r\n Name:</h3>\r\n <h3 class=\"uni-title\" *ngIf=\"galleryForm.value.type==='task'\">Task Name:\r\n </h3>\r\n\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">{{checklist?.checklistInfo?.checklistName}}</p>\r\n </div>\r\n\r\n <ng-container>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">State & Country :</h3>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <p class=\"uni-subtitle\">{{checklist?.storeProfile?.state}}\r\n {{checklist?.storeProfile?.Country}}</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <h3 class=\"uni-title\">Duration :</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\"> {{checklist?.checklistInfo?.duration}}</p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">No. of Questions :</h3>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <p class=\"uni-subtitle\">{{checklist?.checklistInfo?.noofQuestions}}</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <h3 class=\"uni-title\">Date :</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\"> {{checklist?.checklistInfo?.date}}</p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Submitted By :</h3>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <p class=\"uni-subtitle\">{{checklist?.checklistInfo?.submittedBy}}</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <h3 class=\"uni-title\">Time :</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\"> {{checklist?.checklistInfo?.time}}</p>\r\n </div>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"row px-10\">\r\n\r\n <div *ngFor=\"let section of checklist.questionAnswer\">\r\n <div class=\"qa-bodrer my-5\" *ngFor=\"let question of section.questions\">\r\n <div class=\"row\" *ngIf=\"question.redo||question.redo===false\">\r\n <div class=\"view-detail col-12 text-end cursor-pointer\"\r\n (click)=\"ViewInDetails(question,checklist?.checklistInfo,checklist?.storeProfile,section)\">\r\n View in detail\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M15 10.8333V15.8333C15 16.2754 14.8244 16.6993 14.5118 17.0118C14.1993 17.3244 13.7754 17.5 13.3333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V6.66667C2.5 6.22464 2.67559 5.80072 2.98816 5.48816C3.30072 5.17559 3.72464 5 4.16667 5H9.16667M12.5 2.5H17.5M17.5 2.5V7.5M17.5 2.5L8.33333 11.6667\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row w-100 m-3\" *ngIf=\"showsingle\">\r\n <div class=\"col-md-1\" style=\"width:3.3333%\" >\r\n <input id=\"label\" [(ngModel)]=\"question.checked\" [disabled]=\"question.redo\" (click)=\"selectedmultiTask($event,checklist,question,checklist?.checklistInfo,section)\" class=\"form-check-input cursor-pointer mt-2 me-4\" type=\"checkbox\" > \r\n </div>\r\n <div class=\"col-md-3 text-title\">\r\n {{checklist?.storeProfile?.storeName}}\r\n </div>\r\n <div class=\"col-md-8 text-end title-description\">\r\n Submitted by : {{checklist?.checklistInfo?.submittedBy}} On : {{checklist?.checklistInfo?.date}} {{checklist?.checklistInfo?.time}}\r\n </div>\r\n </div>\r\n <ul>\r\n <li *ngIf=\"showmulti\" class=\"qa-heading\">{{question?.qno}}.\r\n {{question?.qname}}</li>\r\n <div class=\"Partially my-3 px-5\"\r\n *ngIf=\"question?.answerType==='descriptive'\">\r\n <div *ngFor=\"let item of question.userAnswer;let i=index\">\r\n <!-- checklist type with single image but inside collage-grid -->\r\n <div class=\"col-md-6\">\r\n <div *ngIf=\"galleryForm.value.type === 'checklist' \r\n && question.questionReferenceImage \r\n && question.questionReferenceImage !== ''\">\r\n\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n\r\n <div class=\"collage-grid\">\r\n\r\n <div class=\"collage-tile\">\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + question.questionReferenceImage,0)\"\r\n [src]=\"environment.TraxAnswerCDN + question.questionReferenceImage\"\r\n alt=\"\" >\r\n </div>\r\n </div>\r\n </div> \r\n <!-- </div>\r\n <div class=\"col-md-6\"> -->\r\n <!-- Question Reference Images -->\r\n <ng-container\r\n *ngIf=\"galleryForm.value.type === 'task' && hasQuestionReferenceImages(question)\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <div class=\"collage-grid\"\r\n [ngStyle]=\"{ 'grid-template-columns': getGridColumns(question.questionReferenceImage.length) }\">\r\n <ng-container\r\n *ngFor=\"let item of question.questionReferenceImage;let i=index\">\r\n <div class=\"collage-tile\"\r\n *ngIf=\"isValidImage(item)\">\r\n <img class=\"cursor-pointer\" (click)=\"openImagePopup(getRefImageUrls(question.questionReferenceImage),getRefImageNames(question.questionReferenceImage),i)\"\r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"Reference image\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <span class=\"mt-2\"\r\n [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">\r\n Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"Partially my-3 px-5\"\r\n *ngIf=\"question?.answerType==='linearscale'\">\r\n <div *ngFor=\"let item of question.userAnswer;let i=index\">\r\n <div class=\"col-md-6\"\r\n *ngIf=\"galleryForm.value.type==='checklist'&&question.questionReferenceImage!==''&&question.questionReferenceImage!==null\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + question.questionReferenceImage,0)\" \r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <!-- Question Reference Images -->\r\n <ng-container\r\n *ngIf=\"galleryForm.value.type === 'task' && hasQuestionReferenceImages(question)\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <div class=\"collage-grid\"\r\n [ngStyle]=\"{ 'grid-template-columns': getGridColumns(question.questionReferenceImage.length) }\">\r\n <ng-container\r\n *ngFor=\"let item of question.questionReferenceImage;let i=index\">\r\n <div class=\"collage-tile\"\r\n *ngIf=\"isValidImage(item)\">\r\n <img class=\"cursor-pointer\" (click)=\"openImagePopup(getRefImageUrls(question.questionReferenceImage),getRefImageNames(question.questionReferenceImage),i)\"\r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"Reference image\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <!-- <br> -->\r\n <span class=\"mt-4\"\r\n [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">\r\n Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n <div class=\"Partially my-3 px-5\"\r\n *ngIf=\"question?.answerType==='time'\">\r\n <div *ngFor=\"let item of question.userAnswer;let i=index\">\r\n <div class=\"col-md-6\"\r\n *ngIf=\"galleryForm.value.type==='checklist'&&question.questionReferenceImage!==''&&question.questionReferenceImage!==null\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + question.questionReferenceImage,0)\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <!-- Question Reference Images -->\r\n <ng-container\r\n *ngIf=\"galleryForm.value.type === 'task' && hasQuestionReferenceImages(question)\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <div class=\"collage-grid\"\r\n [ngStyle]=\"{ 'grid-template-columns': getGridColumns(question.questionReferenceImage.length) }\">\r\n <ng-container\r\n *ngFor=\"let item of question.questionReferenceImage;let i=index\">\r\n <div class=\"collage-tile\"\r\n *ngIf=\"isValidImage(item)\">\r\n <img class=\"cursor-pointer\" (click)=\"openImagePopup(getRefImageUrls(question.questionReferenceImage),getRefImageNames(question.questionReferenceImage),i)\"\r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"Reference image\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <br>\r\n <span class=\"mt-4\"\r\n [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">\r\n Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"Partially my-3 px-5\"\r\n *ngIf=\"question?.answerType==='date'\">\r\n <div *ngFor=\"let item of question.userAnswer;let i=index\">\r\n <div class=\"col-md-6\"\r\n *ngIf=\"galleryForm.value.type==='checklist'&&question.questionReferenceImage!==''&&question.questionReferenceImage!==null\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + question.questionReferenceImage,0)\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <!-- Question Reference Images -->\r\n <ng-container\r\n *ngIf=\"galleryForm.value.type === 'task' && hasQuestionReferenceImages(question)\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <div class=\"collage-grid\"\r\n [ngStyle]=\"{ 'grid-template-columns': getGridColumns(question.questionReferenceImage.length) }\">\r\n <ng-container\r\n *ngFor=\"let item of question.questionReferenceImage;let i=index\">\r\n <div class=\"collage-tile\"\r\n *ngIf=\"isValidImage(item)\">\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getRefImageUrls(question.questionReferenceImage),getRefImageNames(question.questionReferenceImage),i)\"\r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"Reference image\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <br>\r\n <span class=\"mt-4\"\r\n [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">\r\n Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div class=\"Partially my-3 px-5\"\r\n *ngIf=\"question?.answerType==='yes/no'\">\r\n <div *ngFor=\"let item of question.userAnswer;let i=index\">\r\n <div class=\"col-md-6\"\r\n *ngIf=\"galleryForm.value.type==='checklist'&&question.questionReferenceImage!==''&&question.questionReferenceImage!==null\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + question.questionReferenceImage,0)\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <br\r\n *ngIf=\"galleryForm.value.type==='checklist'&&question.questionReferenceImage!==''&&question.questionReferenceImage!==null\">\r\n <div class=\"col-md-6\">\r\n <!-- Question Reference Images -->\r\n <ng-container\r\n *ngIf=\"galleryForm.value.type === 'task' && hasQuestionReferenceImages(question)\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <div class=\"collage-grid\"\r\n [ngStyle]=\"{ 'grid-template-columns': getGridColumns(question.questionReferenceImage.length) }\">\r\n <ng-container\r\n *ngFor=\"let item of question.questionReferenceImage;let i=index\">\r\n <div class=\"collage-tile\"\r\n *ngIf=\"isValidImage(item)\">\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getRefImageUrls(question.questionReferenceImage),getRefImageNames(question.questionReferenceImage),i)\"\r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"Reference image\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <span class=\"mt-4\"\r\n [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"row\"\r\n *ngIf=\"item.validation&&item.validationAnswer!==''\">\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + item.referenceImage,0)\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div\r\n [ngClass]=\"item.validationType==='Capture Image'?'col-md-6':'col-md-12'\">\r\n <div class=\"title-ref my-3\"\r\n *ngIf=\"item.validationType==='Capture Image'||item.validationType==='Capture Video'\">\r\n Validation Answer</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + item.validationAnswer,0)\"\r\n *ngIf=\"item.validationType==='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <div class=\"position-relative w-100 h-450px p-3\" *ngIf=\"item.validationType === 'Capture Video'\">\r\n <video controls class=\"w-100 h-100\" [src]=\"environment.TraxAnswerCDN + item.validationAnswer\">\r\n </video>\r\n\r\n <span class=\"position-absolute top-0 end-0 m-3 cursor-pointer\">\r\n <svg (click)=\"downloadVideo(item.validationAnswer)\"\r\n title=\"Download Video\" id=\"download-icon\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"icon-overlay\">\r\n <g filter=\"url(#filter0_d_3822_19479)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\"></rect>\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\"></rect>\r\n <path\r\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_3822_19479\" x=\"0\" y=\"0\" width=\"44\" height=\"44\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood>\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"></feColorMatrix>\r\n <feOffset dy=\"1\"></feOffset>\r\n <feGaussianBlur stdDeviation=\"1\"></feGaussianBlur>\r\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\">\r\n </feColorMatrix>\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_3822_19479\"></feBlend>\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_3822_19479\" result=\"shape\"></feBlend>\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n</div>\r\n </div>\r\n <span class=\"remarksTxt\"\r\n *ngIf=\"item.validationType==='Descriptive Answer'\">Validation\r\n Answer :{{item.validationAnswer}}</span>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">\r\n Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"Partially my-3 px-5\"\r\n *ngIf=\"question?.answerType==='multiplechoicesingle'\">\r\n\r\n <div class=\"col-md-6\"\r\n *ngIf=\"galleryForm.value.type==='checklist'&&question.questionReferenceImage!==null&&question.questionReferenceImage!==''&&question.questionReferenceImage!==undefined\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + question.questionReferenceImage,0)\" \r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n\r\n <div class=\"col-md-6\">\r\n <!-- Question Reference Images -->\r\n <ng-container\r\n *ngIf=\"galleryForm.value.type === 'task' && hasQuestionReferenceImages(question)\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <div class=\"collage-grid\"\r\n [ngStyle]=\"{ 'grid-template-columns': getGridColumns(question.questionReferenceImage.length) }\">\r\n <ng-container\r\n *ngFor=\"let item of question.questionReferenceImage;let i=index\">\r\n <div class=\"collage-tile\"\r\n *ngIf=\"isValidImage(item)\">\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getRefImageUrls(question.questionReferenceImage),getRefImageNames(question.questionReferenceImage),i)\"\r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"Reference image\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div *ngFor=\"let item of question.userAnswer;let i=index\">\r\n \r\n <span class=\"mt-2\"\r\n [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"row\">\r\n <div class=\"col-md-6\"\r\n *ngIf=\"item.referenceImage!==null&&item.referenceImage!==''&&galleryForm.value.type==='checklist'\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + item.referenceImage,0)\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\" *ngIf=\"galleryForm.value.type === 'task'\">\r\n <div class=\"title-ref my-3\"\r\n *ngIf=\"hasReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n\r\n <div class=\"collage-grid\"\r\n *ngIf=\"hasReferenceImages(question)\">\r\n <ng-container\r\n *ngFor=\"let answer of question.answers\">\r\n <ng-container\r\n *ngIf=\"answer.referenceImage?.length\">\r\n <div class=\"collage-tile\"\r\n *ngFor=\"let item of answer.referenceImage;let i=index\">\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getRefImageUrls(answer.referenceImage),getRefImageNames(answer.referenceImage),i)\"\r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"\" />\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n \r\n \r\n \r\n <div [ngClass]=\"item.validationType==='Capture Image'?'col-md-6':'col-md-12'\"\r\n *ngIf=\"item.validation&&item.validationAnswer!==''\">\r\n <div class=\"title-ref my-3\"\r\n *ngIf=\"item.validationType==='Capture Image'||item.validationType==='Capture Video'\">\r\n Validation Answer</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + item.validationAnswer,0)\" \r\n *ngIf=\"item.validationType==='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n\r\n <div class=\"position-relative w-100 h-450px p-3\" *ngIf=\"item.validationType === 'Capture Video'\">\r\n <video controls class=\"w-100 h-100\" [src]=\"environment.TraxAnswerCDN + item.validationAnswer\">\r\n </video>\r\n\r\n <span class=\"position-absolute top-0 end-0 m-3 cursor-pointer\">\r\n <svg (click)=\"downloadVideo(item.validationAnswer)\"\r\n title=\"Download Video\" id=\"download-icon\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"icon-overlay\">\r\n <g filter=\"url(#filter0_d_3822_19479)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\"></rect>\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\"></rect>\r\n <path\r\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_3822_19479\" x=\"0\" y=\"0\" width=\"44\" height=\"44\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood>\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"></feColorMatrix>\r\n <feOffset dy=\"1\"></feOffset>\r\n <feGaussianBlur stdDeviation=\"1\"></feGaussianBlur>\r\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\">\r\n </feColorMatrix>\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_3822_19479\"></feBlend>\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_3822_19479\" result=\"shape\"></feBlend>\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n</div>\r\n\r\n <span\r\n *ngIf=\"item.validationType==='Descriptive Answer'\"\r\n [ngClass]=\"item.sopFlag ? 'flagclour':''\">Validation\r\n Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">\r\n Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n <div class=\"row\" *ngIf=\"question?.answerType==='image'\">\r\n \r\n <div *ngIf=\"galleryForm.value.type === 'task' && (hasReferenceImages(question) || hasChecklistReferenceImages(question))\" class=\"col-md-6\">\r\n <div class=\"title-ref my-3\"\r\n *ngIf=\"hasReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n\r\n <div class=\"collage-grid\"\r\n *ngIf=\"hasReferenceImages(question)\">\r\n <ng-container\r\n *ngFor=\"let answer of question.answers\">\r\n <ng-container\r\n *ngIf=\"answer.referenceImage?.length\">\r\n <div class=\"collage-tile\"\r\n *ngFor=\"let item of answer.referenceImage;let i=index\">\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getRefImageUrls(answer.referenceImage),getRefImageNames(answer.referenceImage),i)\"\r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"\" />\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- For Checklist Type -->\r\n <div *ngIf=\"galleryForm.value.type === 'checklist'&& (hasReferenceImages(question) || hasChecklistReferenceImages(question))\" class=\"col-md-6\">\r\n <div class=\"title-ref my-3\"\r\n *ngIf=\"hasChecklistReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n\r\n <div class=\"collage-grid\"\r\n *ngIf=\"hasChecklistReferenceImages(question)\">\r\n <ng-container\r\n *ngFor=\"let answer of question.answers;let i=index\">\r\n <div class=\"collage-tile\"\r\n *ngIf=\"answer.referenceImage\">\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getRefchecklistImageUrls(question.answers),getRefchecklistImageNames(question.answers),i)\"\r\n [src]=\"environment.TraxAnswerCDN + answer.referenceImage\"\r\n alt=\"\" />\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n \r\n\r\n <div\r\n [ngClass]=\"hasReferenceImages(question) || hasChecklistReferenceImages(question) ? 'col-md-6' : 'col-md-6'\">\r\n <div class=\"row\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <div class=\"collage-grid\" [ngStyle]=\"{'grid-template-columns': getGridColumns(question.userAnswer.length),\r\n 'grid-auto-rows': getGridRowHeight(question.userAnswer.length)}\">\r\n <div *ngFor=\"let item of question.userAnswer;let i = index\"\r\n class=\"collage-tile\">\r\n\r\n\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getImageUrls(question.userAnswer),getImageNames(question.userAnswer),i)\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\"\r\n alt=\"\">\r\n\r\n <div [ngClass]=\"item.validationType==='Capture Image'?'col-md-6 mt-2':'col-md-12 mt-2'\"\r\n *ngIf=\"item.validation&&item.validationAnswer!==''\">\r\n <div class=\"title-ref my-3\"\r\n *ngIf=\"item.validationType==='Capture Image'||item.validationType==='Capture Video'\">\r\n Validation Answer</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + item.validationAnswer,0)\" \r\n *ngIf=\"item.validationType==='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <div class=\"position-relative w-100 h-450px p-3\" *ngIf=\"item.validationType === 'Capture Video'\">\r\n <video controls class=\"w-100 h-100\" [src]=\"environment.TraxAnswerCDN + item.validationAnswer\">\r\n </video>\r\n\r\n <span class=\"position-absolute top-0 end-0 m-3 cursor-pointer\">\r\n <svg (click)=\"downloadVideo(item.validationAnswer)\"\r\n title=\"Download Video\" id=\"download-icon\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"icon-overlay\">\r\n <g filter=\"url(#filter0_d_3822_19479)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\"></rect>\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\"></rect>\r\n <path\r\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_3822_19479\" x=\"0\" y=\"0\" width=\"44\" height=\"44\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood>\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"></feColorMatrix>\r\n <feOffset dy=\"1\"></feOffset>\r\n <feGaussianBlur stdDeviation=\"1\"></feGaussianBlur>\r\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\">\r\n </feColorMatrix>\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_3822_19479\"></feBlend>\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_3822_19479\" result=\"shape\"></feBlend>\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n</div>\r\n <span\r\n *ngIf=\"item.validationType==='Descriptive Answer'\"\r\n [ngClass]=\"item.sopFlag ? 'flagclour':''\">Validation\r\n Answer :\r\n {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">\r\n Remarks : {{question.remarks}}</div>\r\n \r\n </div>\r\n\r\n\r\n\r\n <div class=\"row px-5\"\r\n *ngIf=\"question?.answerType==='multiplechoicemultiple'\">\r\n <div class=\"col-md-6\"\r\n *ngIf=\"galleryForm.value.type==='checklist'&&question.questionReferenceImage!==null&&question.questionReferenceImage!==''&&question.questionReferenceImage!==undefined\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + question.questionReferenceImage,0)\" \r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\" *ngIf=\"galleryForm.value.type === 'task' && hasQuestionReferenceImages(question)\">\r\n <!-- Question Reference Images -->\r\n <ng-container\r\n *ngIf=\"galleryForm.value.type === 'task' && hasQuestionReferenceImages(question)\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <div class=\"collage-grid\"\r\n [ngStyle]=\"{ 'grid-template-columns': getGridColumns(question.questionReferenceImage.length) }\">\r\n <ng-container\r\n *ngFor=\"let item of question.questionReferenceImage;let i=index\">\r\n <div class=\"collage-tile\"\r\n *ngIf=\"isValidImage(item)\">\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getRefImageUrls(question.questionReferenceImage),getRefImageNames(question.questionReferenceImage),i)\"\r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"Reference image\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"Partially my-3 px-5\"\r\n *ngFor=\"let item of question.userAnswer\">\r\n <span class=\"mt-3\"\r\n [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"row\">\r\n <div class=\"col-md-6\"\r\n *ngIf=\"item.referenceImage!==null&&item.referenceImage!==''&&galleryForm.value.type==='checklist'\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + item.referenceImage,0)\" \r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\" *ngIf=\"galleryForm.value.type === 'task'\">\r\n \r\n <div class=\"title-ref my-3\"\r\n *ngIf=\"hasReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n\r\n <div class=\"collage-grid\"\r\n *ngIf=\"hasReferenceImages(question)\">\r\n <ng-container\r\n *ngFor=\"let answer of question.answers\">\r\n <ng-container\r\n *ngIf=\"answer.referenceImage?.length\">\r\n <div class=\"collage-tile\"\r\n *ngFor=\"let item of answer.referenceImage;let i=index\">\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getRefImageUrls(answer.referenceImage),getRefImageNames(answer.referenceImage),i)\"\r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"\" />\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"item.validationType==='Capture Image'?'col-md-6':'col-md-12'\"\r\n *ngIf=\"item.validation&&item.validationAnswer&&item.validationAnswer!==''\">\r\n <div class=\"title-ref my-3\"\r\n *ngIf=\"item.validationType==='Capture Image'||item.validationType==='Capture Video'\">\r\n Validation Answer</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + item.validationAnswer,0)\" \r\n *ngIf=\"item.validationType==='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <div class=\"position-relative w-100 h-450px p-3\" *ngIf=\"item.validationType === 'Capture Video'\">\r\n <video controls class=\"w-100 h-100\" [src]=\"environment.TraxAnswerCDN + item.validationAnswer\">\r\n </video>\r\n\r\n <span class=\"position-absolute top-0 end-0 m-3 cursor-pointer\">\r\n <svg (click)=\"downloadVideo(item.validationAnswer)\"\r\n title=\"Download Video\" id=\"download-icon\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"icon-overlay\">\r\n <g filter=\"url(#filter0_d_3822_19479)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\"></rect>\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\"></rect>\r\n <path\r\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_3822_19479\" x=\"0\" y=\"0\" width=\"44\" height=\"44\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood>\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"></feColorMatrix>\r\n <feOffset dy=\"1\"></feOffset>\r\n <feGaussianBlur stdDeviation=\"1\"></feGaussianBlur>\r\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\">\r\n </feColorMatrix>\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_3822_19479\"></feBlend>\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_3822_19479\" result=\"shape\"></feBlend>\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n</div>\r\n <span\r\n *ngIf=\"item.validationType==='Descriptive Answer'\"\r\n [ngClass]=\"item.sopFlag ? 'flagclour':''\">Validation\r\n Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n \r\n</div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">\r\n Remarks : {{question.remarks}}</div>\r\n \r\n</div>\r\n\r\n\r\n\r\n <div class=\"row px-5\"\r\n *ngIf=\"question?.answerType==='descriptiveImage'\">\r\n \r\n <div *ngIf=\"galleryForm.value.type === 'task' && (hasReferenceImages(question) || hasChecklistReferenceImages(question))\" class=\"col-md-6\">\r\n <div class=\"title-ref my-3\"\r\n *ngIf=\"hasReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n\r\n <div class=\"collage-grid\"\r\n *ngIf=\"hasReferenceImages(question)\">\r\n <ng-container\r\n *ngFor=\"let answer of question.answers\">\r\n <ng-container\r\n *ngIf=\"answer.referenceImage?.length\">\r\n <div class=\"collage-tile\"\r\n *ngFor=\"let item of answer.referenceImage;let i=index\">\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getRefImageUrls(answer.referenceImage),getRefImageNames(answer.referenceImage),i)\"\r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"\" />\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- For Checklist Type -->\r\n <div *ngIf=\"galleryForm.value.type === 'checklist' && (hasReferenceImages(question) || hasChecklistReferenceImages(question))\" class=\"col-md-6\">\r\n <div class=\"title-ref my-3\"\r\n *ngIf=\"hasChecklistReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n\r\n <div class=\"collage-grid\"\r\n *ngIf=\"hasChecklistReferenceImages(question)\">\r\n <ng-container\r\n *ngFor=\"let answer of question.answers;let i=index;\">\r\n <div class=\"collage-tile\"\r\n *ngIf=\"answer.referenceImage\">\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getRefchecklistImageUrls(question.answers),getRefchecklistImageNames(question.answers),i)\"\r\n [src]=\"environment.TraxAnswerCDN + answer.referenceImage\"\r\n alt=\"\" />\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n \r\n\r\n <div\r\n [ngClass]=\"hasReferenceImages(question) || hasChecklistReferenceImages(question) ? 'col-md-6' : 'col-md-6'\">\r\n <div class=\"row\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <div class=\"collage-grid\" [ngStyle]=\"{'grid-template-columns': getGridColumns(question.userAnswer.length),\r\n 'grid-auto-rows': getGridRowHeight(question.userAnswer.length)}\">\r\n <div *ngFor=\"let item of question.userAnswer;let i = index\"\r\n class=\"collage-tile\">\r\n\r\n\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getImageUrls(question.userAnswer),getImageNames(question.userAnswer),i)\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\"\r\n alt=\"\">\r\n\r\n <div [ngClass]=\"item.validationType==='Capture Image'?'col-md-6 mt-2':'col-md-12 mt-2'\"\r\n *ngIf=\"item.validation&&item.validationAnswer!==''\">\r\n <div class=\"title-ref my-3\"\r\n *ngIf=\"item.validationType==='Capture Image'||item.validationType==='Capture Video'\">\r\n Validation Answer</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + item.validationAnswer,0)\" \r\n *ngIf=\"item.validationType==='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n\r\n <div class=\"position-relative w-100 h-450px p-3\" *ngIf=\"item.validationType === 'Capture Video'\">\r\n <video controls class=\"w-100 h-100\" [src]=\"environment.TraxAnswerCDN + item.validationAnswer\">\r\n\r\n </video>\r\n\r\n <span class=\"position-absolute top-0 end-0 m-3 cursor-pointer\">\r\n <svg (click)=\"downloadVideo(item.validationAnswer)\"\r\n title=\"Download Video\" id=\"download-icon\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"icon-overlay\">\r\n <g filter=\"url(#filter0_d_3822_19479)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\"></rect>\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\"></rect>\r\n <path\r\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_3822_19479\" x=\"0\" y=\"0\" width=\"44\" height=\"44\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood>\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"></feColorMatrix>\r\n <feOffset dy=\"1\"></feOffset>\r\n <feGaussianBlur stdDeviation=\"1\"></feGaussianBlur>\r\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\">\r\n </feColorMatrix>\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_3822_19479\"></feBlend>\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_3822_19479\" result=\"shape\"></feBlend>\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n</div>\r\n\r\n \r\n <span\r\n *ngIf=\"item.validationType==='Descriptive Answer'\"\r\n [ngClass]=\"item.sopFlag ? 'flagclour':''\">Validation\r\n Answer :\r\n {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"remarksTxt\"\r\n *ngIf=\"question.remarks!==''\">Remarks :\r\n {{question.remarks}}</div>\r\n \r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n <div class=\"row px-5\"\r\n *ngIf=\"question?.answerType==='video'\">\r\n <!-- Task: Multiple reference images (Array) -->\r\n <div class=\"col-md-6\" *ngIf=\"galleryForm.value.type === 'task' && hasQuestionReferenceImages(question)\">\r\n <!-- Question Reference Images -->\r\n \r\n <div class=\"title-ref my-3\">Reference Image\r\n </div>\r\n <div class=\"collage-grid\"\r\n [ngStyle]=\"{ 'grid-template-columns': getGridColumns(question.questionReferenceImage.length) }\">\r\n <ng-container\r\n *ngFor=\"let item of question.questionReferenceImage;let i=index\">\r\n <div class=\"collage-tile\"\r\n *ngIf=\"isValidImage(item)\">\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getRefImageUrls(question.questionReferenceImage),getRefImageNames(question.questionReferenceImage),i)\"\r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"Reference image\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n \r\n </div>\r\n\r\n <!-- Checklist: Single reference image (String) -->\r\n <div class=\"col-md-6\" *ngIf=\"galleryForm.value.type === 'checklist' \r\n && question.questionReferenceImage \r\n && question.questionReferenceImage !== ''\">\r\n\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n\r\n <div class=\"collage-grid\"\r\n [ngStyle]=\"{ 'grid-template-columns': getGridColumns(1) }\">\r\n\r\n <div class=\"collage-tile\">\r\n <img class=\"cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + question.questionReferenceImage,0)\" [src]=\"environment.TraxAnswerCDN + question.questionReferenceImage\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-12\"\r\n *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"title-ref my-3\">Uploaded Video</div>\r\n<div class=\"position-relative w-100 h-450px p-3\" >\r\n <video controls class=\"w-100 h-100\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\">\r\n </video>\r\n\r\n\r\n <span class=\"position-absolute top-0 end-0 m-3 cursor-pointer\">\r\n <svg (click)=\"downloadVideo(item.answer)\"\r\n title=\"Download Video\" id=\"download-icon\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"icon-overlay\">\r\n <g filter=\"url(#filter0_d_3822_19479)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\"></rect>\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\"></rect>\r\n <path\r\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_3822_19479\" x=\"0\" y=\"0\" width=\"44\" height=\"44\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood>\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"></feColorMatrix>\r\n <feOffset dy=\"1\"></feOffset>\r\n <feGaussianBlur stdDeviation=\"1\"></feGaussianBlur>\r\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\">\r\n </feColorMatrix>\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_3822_19479\"></feBlend>\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_3822_19479\" result=\"shape\"></feBlend>\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n\r\n</div>\r\n \r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">\r\n Remarks : {{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div class=\"row px-5\"\r\n *ngIf=\"question?.answerType==='multipleImage'\">\r\n <div *ngIf=\"galleryForm.value.type === 'task' && (hasReferenceImages(question) || hasChecklistReferenceImages(question))\" class=\"col-md-6 dfdsfsd\">\r\n <div class=\"title-ref my-3\"\r\n *ngIf=\"hasReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n\r\n <div class=\"collage-grid\"\r\n *ngIf=\"hasReferenceImages(question)\">\r\n <ng-container\r\n *ngFor=\"let answer of question.answers\">\r\n <ng-container\r\n *ngIf=\"answer.referenceImage?.length\">\r\n <div class=\"collage-tile\"\r\n *ngFor=\"let item of answer.referenceImage;let i=index\">\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getRefImageUrls(answer.referenceImage),getRefImageNames(answer.referenceImage),i)\"\r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"\" />\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- For Checklist Type -->\r\n <div *ngIf=\"galleryForm.value.type === 'checklist' && (hasReferenceImages(question) || hasChecklistReferenceImages(question))\" class=\"col-md-6\">\r\n <div class=\"title-ref my-3\"\r\n *ngIf=\"hasChecklistReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n\r\n <div class=\"collage-grid\"\r\n *ngIf=\"hasChecklistReferenceImages(question)\">\r\n <ng-container\r\n *ngFor=\"let answer of question.answers;let i=index;\">\r\n <div class=\"collage-tile\"\r\n *ngIf=\"answer.referenceImage\">\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getRefchecklistImageUrls(question.answers),getRefchecklistImageNames(question.answers),i)\"\r\n [src]=\"environment.TraxAnswerCDN + answer.referenceImage\"\r\n alt=\"\" />\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n \r\n <div\r\n [ngClass]=\"hasReferenceImages(question) || hasChecklistReferenceImages(question) ? 'col-md-6' : 'col-md-6'\">\r\n <div class=\"row\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <div class=\"collage-grid\" [ngStyle]=\"{'grid-template-columns': getGridColumns(question.userAnswer.length),\r\n 'grid-auto-rows': getGridRowHeight(question.userAnswer.length)}\">\r\n <div *ngFor=\"let item of question.userAnswer;let i=index\"\r\n class=\"collage-tile\">\r\n\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getImageUrls(question.userAnswer),getImageNames(question.userAnswer),i)\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\"\r\n alt=\"\">\r\n <div [ngClass]=\"item.validationType==='Capture Image'?'col-md-6':'col-md-12'\"\r\n *ngIf=\"item.validation&&item.validationAnswer!==''\">\r\n <div class=\"title-ref my-3 \"\r\n *ngIf=\"item.validationType==='Capture Image'||item.validationType==='Capture Video'\">\r\n Validation Answer</div>\r\n <img *ngIf=\"item.validationType==='Capture Image'\"\r\n class=\"cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + item.validationAnswer,0)\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <div class=\"position-relative w-100 h-450px p-3\" *ngIf=\"item.validationType === 'Capture Video'\">\r\n <video controls class=\"w-100 h-100\" [src]=\"environment.TraxAnswerCDN + item.validationAnswer\">\r\n </video>\r\n\r\n <span class=\"position-absolute top-0 end-0 m-3 cursor-pointer\">\r\n <svg (click)=\"downloadVideo(item.validationAnswer)\"\r\n title=\"Download Video\" id=\"download-icon\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"icon-overlay\">\r\n <g filter=\"url(#filter0_d_3822_19479)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\"></rect>\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\"></rect>\r\n <path\r\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_3822_19479\" x=\"0\" y=\"0\" width=\"44\" height=\"44\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood>\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"></feColorMatrix>\r\n <feOffset dy=\"1\"></feOffset>\r\n <feGaussianBlur stdDeviation=\"1\"></feGaussianBlur>\r\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\">\r\n </feColorMatrix>\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_3822_19479\"></feBlend>\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_3822_19479\" result=\"shape\"></feBlend>\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n</div>\r\n <span\r\n *ngIf=\"item.validationType==='Descriptive Answer'\">Validation\r\n Answer :\r\n {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"remarksTxt\"\r\n *ngIf=\"question.remarks!==''\">Remarks :\r\n {{question.remarks}}</div>\r\n \r\n </div>\r\n\r\n </ul>\r\n\r\n\r\n <div class=\"modal fade my-0 py-0\" id=\"imageModal\" tabindex=\"-1\" role=\"dialog\" style=\"overflow:hidden\">\r\n <div class=\"modal-dialog modal-dialog-centered modal-lg\" role=\"document\">\r\n <div class=\"modal-content \">\r\n\r\n \r\n\r\n <div class=\"modal-body d-flex align-items-center justify-content-center position-relative\"\r\n >\r\n <!-- Prev Button -->\r\n <button *ngIf=\"imageList.length > 1\"\r\n class=\"btn btn-outline-primary position-absolute start-0 top-50 translate-middle-y ms-3\"\r\n (click)=\"navigateImage('prev')\"\r\n [disabled]=\"currentImageIndex === 0\">\r\n \u2039\r\n </button>\r\n\r\n <!-- Image -->\r\n <img [src]=\"selectedImageUrl\" style=\"max-height: 85vh; max-width: 100%; object-fit: contain;\"\r\n class=\"img-fluid w-100 mx-1\" />\r\n\r\n <!-- Next Button -->\r\n <button *ngIf=\"imageList.length > 1\"\r\n class=\"btn btn-outline-primary position-absolute end-0 top-50 translate-middle-y me-3\"\r\n (click)=\"navigateImage('next')\"\r\n [disabled]=\"currentImageIndex === imageList.length - 1\">\r\n \u203A\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal fade\" id=\"imageModal1\" tabindex=\"-1\" role=\"dialog\">\r\n <div class=\"modal-dialog modal-dialog-centered modal-lg\" role=\"document\">\r\n <div class=\"modal-content \">\r\n\r\n \r\n\r\n <div class=\"modal-body d-flex align-items-center justify-content-center position-relative\"\r\n >\r\n \r\n\r\n <!-- Image -->\r\n <img [src]=\"selectedImageUrl\" style=\"max-height: 95vh; max-width: 100%; object-fit: contain;\"\r\n class=\"img-fluid w-100 mx-1\" />\r\n\r\n \r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-6 text-start\">\r\n <!-- <button class=\"btn btn-secondary rounded-pill m-0 p-2\" *ngIf=\"question?.linkType&&question?.linkquestionenabled\">Linked to Question {{question.parentQuestion}}</button> -->\r\n </div>\r\n <div class=\"col-md-6 text-end\">\r\n <button class=\"btn btn-sm btn-default border-default me-3\"\r\n [disabled]=\"question.redo\"\r\n *ngIf=\"checktodayDate(checklist?.checklistInfo?.date)&&(gs.userAccess | async)?.userType !== 'tango'&&!checklist?.checklistInfo?.approvalStatus&&(gs.userAccess | async)?.TangoTrax_checklist_isEdit&&this.galleryForm.value.type ==='checklist'\"\r\n (click)=\"addTask('redo',question,checklist?.checklistInfo,checklist?.storeProfile,section)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_6004_11734)\">\r\n <path\r\n d=\"M19.1693 3.33331V8.33332M19.1693 8.33332H14.1693M19.1693 8.33332L15.3026 4.69998C14.407 3.80391 13.299 3.14932 12.0819 2.79729C10.8649 2.44527 9.57853 2.40727 8.34284 2.68686C7.10716 2.96645 5.96244 3.55451 5.01549 4.39616C4.06855 5.23782 3.35024 6.30564 2.9276 7.49998M0.835938 16.6666V11.6666M0.835938 11.6666H5.83594M0.835938 11.6666L4.7026 15.3C5.59823 16.1961 6.70625 16.8506 7.92328 17.2027C9.14031 17.5547 10.4267 17.5927 11.6624 17.3131C12.898 17.0335 14.0428 16.4455 14.9897 15.6038C15.9367 14.7621 16.655 13.6943 17.0776 12.5\"\r\n stroke=\"#344054\" stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_6004_11734\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span class=\"ms-2 font-defult-task\">Redo</span>\r\n </button>\r\n\r\n <button class=\"btn btn-sm btn-default border-default me-3\"\r\n [disabled]=\"question.redo\"\r\n *ngIf=\"checktodayDate(checklist?.checklistInfo?.date)&&(gs.userAccess | async)?.userType !== 'tango'&&!checklist?.checklistInfo?.approvalStatus&&(gs.userAccess | async)?.TangoTrax_Task_isEdit&&this.galleryForm.value.type==='task'\"\r\n (click)=\"addTask('redo',question,checklist?.checklistInfo,checklist?.storeProfile,section)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_6004_11734)\">\r\n <path\r\n d=\"M19.1693 3.33331V8.33332M19.1693 8.33332H14.1693M19.1693 8.33332L15.3026 4.69998C14.407 3.80391 13.299 3.14932 12.0819 2.79729C10.8649 2.44527 9.57853 2.40727 8.34284 2.68686C7.10716 2.96645 5.96244 3.55451 5.01549 4.39616C4.06855 5.23782 3.35024 6.30564 2.9276 7.49998M0.835938 16.6666V11.6666M0.835938 11.6666H5.83594M0.835938 11.6666L4.7026 15.3C5.59823 16.1961 6.70625 16.8506 7.92328 17.2027C9.14031 17.5547 10.4267 17.5927 11.6624 17.3131C12.898 17.0335 14.0428 16.4455 14.9897 15.6038C15.9367 14.7621 16.655 13.6943 17.0776 12.5\"\r\n stroke=\"#344054\" stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_6004_11734\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span class=\"ms-2 font-defult-task\">Redo</span>\r\n </button>\r\n\r\n <button class=\"btn btn-sm border-val1\"\r\n *ngIf=\"!question.task&&!question.taskId&&this.galleryForm.value.type==='checklist'&&(gs.userAccess | async)?.userType !== 'tango'&&!checklist?.checklistInfo?.approvalStatus&& (gs.userAccess | async)?.TangoTrax_Task_isEdit\"\r\n (click)=\"addTask('createtask',question,checklist?.checklistInfo,checklist?.storeProfile,section)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M11.6693 1.66675H5.0026C4.56058 1.66675 4.13665 1.84234 3.82409 2.1549C3.51153 2.46746 3.33594 2.89139 3.33594 3.33341V16.6667C3.33594 17.1088 3.51153 17.5327 3.82409 17.8453C4.13665 18.1578 4.56058 18.3334 5.0026 18.3334H15.0026C15.4446 18.3334 15.8686 18.1578 16.1811 17.8453C16.4937 17.5327 16.6693 17.1088 16.6693 16.6667V6.66675M11.6693 1.66675L16.6693 6.66675M11.6693 1.66675V6.66675H16.6693M10.0026 15.0001V10.0001M7.5026 12.5001H12.5026\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2 font-task\">Create Task</span>\r\n </button>\r\n <button\r\n *ngIf=\"question.task&&question.taskId &&this.galleryForm.value.type!=='task'\"\r\n class=\"btn btn-sm border-val1\"\r\n (click)=\"taskredirect(question,checklist?.storeProfile,checklist?.checklistInfo)\"><span\r\n class=\"font-task\">View Task</span></button>\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"px-10 my-5\" *ngIf=\"imageChecklist.includes(select)\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n <!-- <div>\r\n <h2>Checklist Name : {{this.checklistName}}</h2>\r\n </div> -->\r\n\r\n <div class=\" my-3 mt-5\" *ngFor=\"let item of mobileusageData\">\r\n <div class=\"row px-10 mt-5\">\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Checklist Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">: {{this.checklistName}} </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Store Name</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">: {{item.storeName}}</p>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"item.down_time\">\r\n <h3 class=\"uni-title\">Average Downtime</h3>\r\n </div>\r\n <div class=\"col-md-9\" *ngIf=\"item.down_time\">\r\n <p class=\"uni-subtitle\">: {{item.down_time}} Mins</p>\r\n </div>\r\n </div>\r\n <ul class=\"row w-100 qa-bodrer\">\r\n <!-- <li class=\"qa-heading\">\r\n {{item.storeName}}\r\n </li> -->\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12 my-2\" *ngFor=\"let detection of item?.imageUrl\">\r\n\r\n <div class=\"\">\r\n <img class=\"w-100 h-500px rounded-top\"\r\n src=\"{{environment.TraxAIchecklistCDN}}{{detection}}\" alt=\"\">\r\n <div class=\"text-center mt-3\"> {{this.checklistName}}</div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 my-2\" *ngFor=\"let detection of item?.imagesData\">\r\n <div class=\"card-toolbar\"\r\n *ngIf=\"galleryForm.value.sourceCheckList_id==='inventorycount'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-8\">\r\n <span class=\"ms-3\"\r\n *ngIf=\"detection?.date_timestamp\">Detection Time :<span\r\n class=\"badge badge-light-primary\">\r\n {{detection.date_timestamp}}</span></span>\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n <span class=\"ms-3\" *ngIf=\"detection?.car_count\">No of cars\r\n :<span class=\"badge badge-light-primary\">\r\n {{detection.car_count}}</span></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-toolbar\"\r\n *ngIf=\"galleryForm.value.sourceCheckList_id==='numberplateinfo'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-8\">\r\n <span class=\"ms-3\" *ngIf=\"detection?.car_license_id\">Number\r\n Plate :<span class=\"badge badge-light-primary\">\r\n {{detection.car_license_id}}</span></span>\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n <span class=\"ms-3\" *ngIf=\"detection?.date_timestamp\">Entry\r\n Time:<span class=\"badge badge-light-primary\">\r\n {{detection.date_timestamp}}</span></span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"card-toolbar\"\r\n *ngIf=\"galleryForm.value.sourceCheckList_id==='carsattended'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <span class=\"ms-3\"\r\n *ngIf=\"detection?.interacted_person_count\">Number of\r\n People Interacted :<span\r\n class=\"badge badge-light-primary\">\r\n {{detection.interacted_person_count}}</span></span>\r\n </div>\r\n <div class=\"col-md-6 text-end\">\r\n <span class=\"ms-3\" *ngIf=\"detection?.car_reg_number\">Number\r\n Plate :<span class=\"badge badge-light-primary\">\r\n {{detection?.car_reg_number}}</span></span>\r\n </div>\r\n\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <span class=\"ms-3\"\r\n *ngIf=\"detection?.car_reg_number\">Detection Time :<span\r\n class=\"badge badge-light-primary\">\r\n {{detection?.date_timestamp}}</span></span>\r\n </div>\r\n <div class=\"col-md-6 text-end\">\r\n <span class=\"ms-3\"\r\n *ngIf=\"detection?.interacted_duration_in_secs\">Time\r\n spent:<span class=\"badge badge-light-primary\">\r\n {{detection.interacted_duration_in_secs}}\r\n Mins</span></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\"\r\n *ngIf=\"galleryForm.value.sourceCheckList_id==='vehicle_check_in'\">\r\n <div class=\"row\">\r\n\r\n <div class=\"col-md-8\">\r\n <span class=\"ms-3\"\r\n *ngIf=\"detection?.date_timestamp\">Detection Time :<span\r\n class=\"badge badge-light-primary\">\r\n {{detection.date_timestamp}}</span></span>\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n <span class=\"ms-3\" *ngIf=\"detection?.date_timestamp\">Slot\r\n :<span class=\"badge badge-light-primary\">\r\n {{detection.slot_id}}</span></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mt-2\">\r\n <img class=\"w-100 h-500px rounded-top\"\r\n src=\"{{environment.TraxAIchecklistCDN}}{{detection.path}}\"\r\n alt=\"\">\r\n <div class=\"text-center mt-3\"> {{this.checklistName}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n\r\n </div>\r\n <div class=\"px-10 my-5\" *ngIf=\"videoChecklist.includes(select)\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n\r\n <div class=\"my-3 mt-5\" *ngFor=\"let item of customerunattendedData\">\r\n <div class=\"row px-10 mt-5\">\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Checklist Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">: {{this.checklistName}} </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Store Name</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">: {{item.storeName}}</p>\r\n </div>\r\n </div>\r\n <ul class=\"row w-100 margin-top-side\">\r\n <li class=\"qa-heading\">\r\n\r\n </li>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngFor=\"let detection of item.imagesData\">\r\n <div class=\"row px-10 mt-5 margin-left-side\"\r\n *ngIf=\"select!=='suspiciousactivity'\">\r\n <div class=\"col-md-3\" *ngIf=\"detection?.Answer\">\r\n <h3 class=\"uni-title\">Detection Status</h3>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.Answer\">\r\n <p class=\"uni-subtitle\">:<span\r\n class=\"ms-3 badge badge-light-danger\"\r\n *ngIf=\"detection?.Answer==='rejected'\">Breached</span>\r\n <span class=\"ms-3 badge badge-light-success\"\r\n *ngIf=\"detection?.Answer==='approved'\">Not-breached</span>\r\n </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Date</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\">: {{detection.date|date:'dd-MM-yyyy' }}\r\n </p>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.configTime\">\r\n <h3 class=\"uni-title\">Configured Time</h3>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.configTime\">\r\n <p class=\"uni-subtitle\">: {{detection.configTime }}</p>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.duration\">\r\n <h3 class=\"uni-title\">Duration</h3>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.duration\">\r\n <p class=\"uni-subtitle\">: {{detection.duration }} Mins</p>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.downTime\">\r\n <h3 class=\"uni-title\">Downtime</h3>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.downTime\">\r\n <p class=\"uni-subtitle\">: {{detection.downTime }} Mins <span\r\n ngbTooltip=\"Downtime may result in inaccurate data\"\r\n placement=\"top\" container=\"body\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"15\"\r\n height=\"16\" viewBox=\"0 0 15 16\" fill=\"none\">\r\n <path\r\n d=\"M7.66667 5.33203V7.9987M7.66667 10.6654H7.67333M14.3333 7.9987C14.3333 11.6806 11.3486 14.6654 7.66667 14.6654C3.98477 14.6654 1 11.6806 1 7.9987C1 4.3168 3.98477 1.33203 7.66667 1.33203C11.3486 1.33203 14.3333 4.3168 14.3333 7.9987Z\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span></p>\r\n </div>\r\n </div>\r\n <div class=\"card-header border-0 min-h-45px px-0 my-0\">\r\n <h3 class=\"card-title\">\r\n <!-- <span class=\"me-3 store-title\">{{item.storeName}}</span> -->\r\n <span class=\"ms-2 badge badge-light-default\"\r\n *ngIf=\"detection?.customer_id\">Cust ID :\r\n {{detection.customer_id}}</span>\r\n <span class=\"ms-2 badge badge-light-default\"\r\n *ngIf=\"detection?.queue_id\">Queue ID :\r\n {{detection.queue_id}}</span>\r\n <span class=\"ms-2 badge badge-light-default\"\r\n *ngIf=\"detection?.optum_id\">Optom ID :\r\n {{detection.optum_id}}</span>\r\n <!-- <span class=\"ms-2 badge badge-light-default\" *ngIf=\"detection?.date\">Date : {{detection.date|date:'dd-MM-yyyy' }}</span> -->\r\n <!-- <span class=\"ms-3 badge badge-light-default\" *ngIf=\"detection?.configTime\">Inspection time : {{detection.configTime}}</span> -->\r\n <span class=\"ms-3 badge badge-light-default\"\r\n *ngIf=\"detection?.temp_id\">TempId :\r\n {{detection.temp_id}}</span>\r\n <span class=\"ms-3 badge badge-light-default\"\r\n *ngIf=\"detection?.time_spend\">Timespend :\r\n {{detection.time_spend}}Mins</span>\r\n\r\n </h3>\r\n\r\n <!-- Switch toggle -->\r\n <div class=\"card-toolbar\">\r\n <div class=\"col-md-12 text-end\">\r\n <span class=\"ms-3 badge badge-light-default\"\r\n *ngIf=\"detection?.entry_time\">Entry time :\r\n {{detection.entry_time}}</span>\r\n <span class=\"ms-3 badge badge-light-default\"\r\n *ngIf=\"detection?.exit_time\">Exit time :\r\n {{detection.exit_time}}</span>\r\n <span class=\"ms-3 badge badge-light-success\"\r\n *ngIf=\"detection?.adherence_rate\">Adherence Rate :\r\n {{detection.adherence_rate}}</span>\r\n <span class=\"ms-3 badge badge-light-primary text-capitalize\"\r\n *ngIf=\"detection?.category\">\r\n {{detection.category}}</span>\r\n <span class=\"ms-3 badge badge-light-default\"\r\n *ngIf=\"detection?.customer_entry_time\">Entry time :\r\n {{detection.customer_entry_time}}</span>\r\n <span class=\"ms-3 badge badge-light-default\"\r\n *ngIf=\"detection?.customer_exit_time\">Exit time :\r\n {{detection.customer_exit_time}}</span>\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"my-0\" *ngIf=\"select !=='eyetest'\">\r\n <video controls class=\"w-100 h-450px rounded-top\"\r\n src=\"{{environment.TraxAIchecklistCDN}}{{detection.video_path}}\"\r\n alt=\"\">\r\n </video>\r\n </div>\r\n <div class=\"my-0\" *ngIf=\"select ==='eyetest'\">\r\n <video controls class=\"w-100 h-450px rounded-top\"\r\n src=\"{{environment.EyeTestCDN}}{{detection.video_path}}\" alt=\"\">\r\n </video>\r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"select ==='storeopenandclose'\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n <div class=\"row px-10 mt-5\">\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Checklist Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">: {{this.checklistName}} </p>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 margin-top-side\" *ngFor=\"let store of storeOpencloseView\">\r\n <div class=\" mx-8 my-8\" *ngFor=\"let item of store.imagesData\">\r\n <div class=\"row px-10 mt-5 margin-left-side \">\r\n <div class=\"col-md-3\" *ngIf=\"item?.buffer_open\">\r\n <h3 class=\"uni-title\">Buffer for Open Time :</h3>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"item?.buffer_open\">\r\n <p class=\"uni-subtitle\">: {{item.buffer_open }}</p>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"item?.buffer_close\">\r\n <h3 class=\"uni-title\">Buffer for Close Time :</h3>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"item?.buffer_close\">\r\n <p class=\"uni-subtitle\">: {{item.buffer_close }}</p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Detection Status</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\">:<span class=\"ms-3 badge badge-light-danger\"\r\n *ngIf=\"item?.Flag\">Breached</span>\r\n <span class=\"ms-3 badge badge-light-success\"\r\n *ngIf=\"!item?.Flag\">Not-breached</span>\r\n </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Date</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\">: {{item.date|date:'dd-MM-yyyy' }}</p>\r\n </div>\r\n </div>\r\n <div class=\"snapcard\">\r\n <div class=\"snapheader ms-6\">\r\n {{item.storeName}}\r\n </div>\r\n <div class=\"row m-0 w-100\">\r\n <div class=\"col-6\">\r\n <div class=\"img mt-4 px-3 position-relative\" *ngIf=\"!item.openTime\">\r\n <div\r\n class=\"preview align-items-center justify-content-center d-flex flex-column\">\r\n <span>\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n \\\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"prvtxt mt-5 textclr\">Preview not\r\n available</span>\r\n <span class=\"refreshtxt mt-2 textclr\">The selected camera\r\n is not available at the moment.</span>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"item.openTime\">\r\n <img class=\"mx-1 img-opc\"\r\n src=\"{{environment.TraxOpenclosechecklistCDN}}{{item.storeId}}/{{item.dateString|date:'dd-MM-yyyy'}}/operation_snaps/open.jpeg\"\r\n alt=\"open close snap\">\r\n <div class=\"col-12\">\r\n <div class=\"d-flex flex-stack mx-1 mt-2\">\r\n <div>\r\n <div class=\"snaptext\">Opening Snap</div>\r\n <div class=\"snaptime\">{{item.openTime}} -\r\n {{item.date}}\r\n </div>\r\n </div>\r\n\r\n <span class=\"badge badge-light-primary snapbadge\"\r\n *ngIf=\"!item?.openTimeFlag\">On Time</span>\r\n <span class=\"badge badge-light-danger snapbadge\"\r\n *ngIf=\"item?.openTimeFlag\">Late Open</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"img mt-4 px-3 position-relative\"\r\n *ngIf=\"!item.closeTime\">\r\n <div\r\n class=\"preview align-items-center justify-content-center d-flex flex-column\">\r\n <span>\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n \\\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"prvtxt mt-5 textclr\">Preview not\r\n available</span>\r\n <span class=\"refreshtxt mt-2 textclr\">The selected camera\r\n is not available at the moment.</span>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"item.closeTime\">\r\n <img class=\"mx-1 img-opc\"\r\n src=\"{{environment.TraxOpenclosechecklistCDN}}{{item.storeId}}/{{item.dateString|date:'dd-MM-yyyy'}}/operation_snaps/close.jpeg\"\r\n alt=\"Checklist Video Player\">\r\n <div class=\"col-12\">\r\n <div class=\"d-flex flex-stack mx-1 mt-2\">\r\n <div>\r\n <div class=\"snaptext\">Closing Snap</div>\r\n <div class=\"snaptime\">{{item.closeTime}} -\r\n {{item.date}}\r\n </div>\r\n </div>\r\n <span class=\"badge badge-light-primary snapbadge\"\r\n *ngIf=\"!item?.closeTimeFlag\">On Time</span>\r\n <span class=\"badge badge-light-danger snapbadge\"\r\n *ngIf=\"item?.closeTimeFlag\">Early Close</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"boximageChecklist.includes(select)\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n <div class=\"col-md-12\" *ngFor=\"let store of queueAlertView\">\r\n <div class=\"row px-10 mt-5\" *ngIf=\"showmulti\">\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Store Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">{{store?.storeName}} |\r\n {{store?.city}},{{store?.state}},{{store?.country}} </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Checklist Name:</h3>\r\n\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">{{checklistName}}</p>\r\n </div>\r\n <div class=\"col-md-3\"\r\n *ngIf=\"select==='boxalert'||select==='suspiciousfootfall'||select==='drinking'||select==='bagdetection'\">\r\n <h3 class=\"uni-title\">Description:</h3>\r\n </div>\r\n <div class=\"col-md-9\"\r\n *ngIf=\"select==='boxalert'||select==='suspiciousfootfall'||select==='drinking'||select==='bagdetection'\">\r\n <p class=\"uni-subtitle\">{{checkListDescription}}</p>\r\n </div>\r\n\r\n </div>\r\n <div class=\"row m-0 w-100 \">\r\n <div class=\"col-4 mt-2\" *ngFor=\"let item of store.imagesData\">\r\n <div class=\"card bordercolor bg-secondary mt-8\">\r\n <div class=\"text-start ms-5 mt-2 mb-5\">\r\n <div *ngIf=\"item.zone\">\r\n <span\r\n class=\"btn btn-secondary rounded-lg p-2\">{{item.zone}}</span>\r\n </div>\r\n\r\n <div class=\"mt-3 fw-semibold\">{{ item.date_timestamp }}</div>\r\n </div>\r\n <img class=\"w-100 h-250px rounded-bottom\" (click)=\"openModel(item)\"\r\n src=\"{{environment.TraxAIchecklistCDN}}{{item.path}}\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <lib-pagination *ngIf=\"!viewloading && !viewnoData\" [itemsPerPage]=\"limit\"\r\n [currentPage]=\"offset\" [totalItems]=\"totalCount\" [paginationSizes]='paginationSizes'\r\n [pageSize]=\"limit\" (pageChange)=\"onPageChangeview($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </section>\r\n </div>\r\n\r\n\r\n\r\n </div>\r\n <div *ngIf=\"!showsidenav\" (click)=\"sidenav()\" class=\"backButtonleft text-center pt-1 cursor-pointer\">\r\n <svg class=\"mt-2 ms-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <path\r\n d=\"M9.72714 12.6365L13.3635 9.00013L9.72714 5.36377M4.63623 12.6365L8.27259 9.00013L4.63623 5.36377\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"row card mx-0 p-3 \" *ngIf=\"checkAIchecklist()&&!viewnoData&&userDetails?.role!=='user'\">\r\n <div class=\"col-md-12 text-end\">\r\n <button class=\"btn btn-sm border-primary1\" [disabled]=\"!approvalStatus\" (click)=\"appoveChecklist()\">Approve\r\n </button>\r\n </div>\r\n</div>\r\n<ng-template #zoomPopup let-model>\r\n <div class=\"p-8\">\r\n <div class=\"modal-header pt-0 ps-1 pe-0\">\r\n <div>\r\n <div class=\"text-start mt-2\">\r\n <div *ngIf=\"viewImage.zone\">\r\n <span class=\"btn btn-secondary rounded-lg p-2\">{{viewImage.zone}}</span>\r\n </div>\r\n <div *ngIf=\"viewImage.emptyBoxCount\">\r\n <span>Empty shelves : {{viewImage.emptyBoxCount}}</span>\r\n </div>\r\n\r\n <div *ngIf=\"viewImage.entry_time\">\r\n <span>Entry Time : {{viewImage.entry_time}}</span>\r\n </div>\r\n <div *ngIf=\"viewImage.exit_time\">\r\n <span>Exit Time : {{viewImage.exit_time}}</span>\r\n </div>\r\n <div *ngIf=\"viewImage.temp_id\">\r\n <span>Temp Id : {{viewImage.temp_id}}</span>\r\n </div>\r\n <div *ngIf=\"viewImage.time_spend\">\r\n <span>Time Spend : {{viewImage.time_spend}} Mins</span>\r\n </div>\r\n\r\n <div class=\"mt-2\" *ngIf=\"viewImage.threshold&&viewImage.Dwelltime\">\r\n <p>If the queue exceeds {{viewImage.threshold}} people and wait time surpasses\r\n {{viewImage.Dwelltime}} minutes, an alert will be triggered</p>\r\n </div>\r\n <div class=\"mt-3 fw-semibold\">{{ viewImage.date_timestamp }}</div>\r\n </div>\r\n\r\n </div>\r\n <div data-bs-dismiss=\"modal\">\r\n <!-- <span class=\"stream fw-semibold text-nowrap me-5\" *ngIf=\"camera.height && camera.width\"> Resolution: {{camera.height}} X {{camera.width}}</span> -->\r\n <span class=\"btn btn-sm btn-icon btn-active-color-primary me-0\" (click)=\"model.dismiss()\"><svg\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M15 5L5 15M5 5L15 15\" stroke=\"#667085\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"viewImage.path\" class=\"mt-2 overflow-auto\">\r\n <img class=\"rounded-4 mt-5 img-popup-src w-100\" src=\"{{environment.TraxAIchecklistCDN}}{{viewImage.path}}\">\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n</ng-template>", styles: [".gallery-card{padding:24px;border-radius:12px;background:#fff}.gallery-card .header{color:#101828;font-size:18px;font-weight:500;line-height:28px}.img{border-radius:10px;border:1px solid var(--Gray-500, #667085);background:var(--Gray-100, #F2F4F7);width:100%;height:230px}.prvtxt{color:var(--Gray-500, #667085);font-family:Inter;font-size:20px;font-style:normal;font-weight:700;line-height:20px;letter-spacing:-.4px}.refreshtxt{color:var(--Gray-400, #98A2B3);font-family:Inter;font-size:12px;font-style:normal;font-weight:500;line-height:18px}::ng-deep .applyBtn{display:none!important}::ng-deep .custom-height-modal .modal-dialog{max-height:80vh;height:80vh}::ng-deep .custom-height-modal .modal-content{overflow:auto;max-height:100%}:host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .md-drppicker.shown.drops-down-right{transform-origin:0 0;width:560px!important}:host::ng-deep .daterangepicker-input+.ngx-daterangepicker-material .applyBtn{display:none}:host::ng-deep .md-drppicker.drops-down-right.ltr.show-ranges.shown{top:65px!important}:host::ng-deep .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;right:-475px!important;left:unset!important;height:400px!important}:host::ng-deep .md-drppicker .btn{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}:host::ng-deep .md-drppicker .ranges ul li button{padding:12px 16px;width:160px;color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:20px;background:none;border:none;text-align:left;cursor:pointer}:host::ng-deep .md-drppicker td.active,:host::ng-deep .md-drppicker td.active:hover{background-color:#029cf4!important;border-radius:20px!important;color:var(--White, #FFF)!important;text-align:center!important;font-size:14px!important;font-weight:500!important;line-height:20px}:host::ng-deep .md-drppicker.ltr .ranges{float:left;margin-top:10px!important}:host::ng-deep .md-drppicker td.in-range{background:var(--Primary-50, #EAF8FF)}:host::ng-deep .md-drppicker .ranges ul li button.active{background:var(--Primary-50, #EAF8FF)!important;border-radius:8px!important;color:var(--Primary-700, #009BF3);font-size:14px!important;font-weight:500!important;line-height:20px!important}:host::ng-deep table th,:host::ng-deep table td{width:40px!important;height:40px!important;padding:10px 8px!important}:host::ng-deep .md-drppicker td.available.prev,:host::ng-deep .md-drppicker th.available.prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .md-drppicker td.available.next,:host::ng-deep .md-drppicker th.available.next{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep table th{border-bottom:0px solid var(--Gray-200, #EAECF0)!important;background:transparent!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:16px!important;font-weight:500!important;line-height:24px}:host::ng-deep .md-drppicker .btn.btn-default{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize;margin-right:10px!important}:host::ng-deep .md-drppicker td.available.invalid-date{text-decoration:line-through;pointer-events:none;color:#a9a9a9}:host::ng-deep .md-drppicker td.available.today:not(.invalid-date){text-decoration:unset;pointer-events:unset;color:unset}.btn-primary{line-height:18px!important}.checkbox-label{color:#344054;font-size:14px;font-weight:500;line-height:20px;cursor:pointer}.checklist-left .checklist-title{overflow:hidden;color:var(--Black, #101828)!important;text-overflow:ellipsis;font-size:18px!important;font-weight:500;line-height:28px}.checklist-left .checklist-text{overflow:hidden;color:var(--Black, #101828)!important;text-overflow:ellipsis;font-size:12px!important;font-weight:400!important;line-height:18px}.section{display:inline-block;width:600px;white-space:nowrap;outline:none!important;border:none!important;box-shadow:none!important;overflow:hidden!important;text-overflow:ellipsis!important;color:var(--Black, #101828)!important;font-size:16px!important;font-weight:500!important}.card hr{width:-webkit-fill-available}.editablecontent{color:var(--Gray-700, #344054)!important;font-size:16px!important;font-weight:400!important;line-height:24px}.rotate{transform:rotate(180deg);transition:1s}.question-left{color:var(--Gray-700, #344054)!important;font-size:16px;font-weight:400;line-height:24px}.view-all{padding:12px!important;border-radius:6px!important;background:var(--Primary-50, #EAF8FF)!important;color:var(--Primary-500, #33B5FF)!important;font-size:16px!important;font-weight:600!important;line-height:24px;text-decoration-line:underline!important}.view-questions{padding:12px!important;border-radius:6px!important;color:var(--Primary-500, #33B5FF)!important;font-size:16px!important;font-weight:600!important;line-height:24px;text-decoration-line:underline!important}.iconsize{width:110px;height:110px}.margin-left-side{margin-left:-35px}.margin-top-side{margin-top:-15px}input[type=checkbox]{width:16px!important;height:16px!important;margin:0;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:0!important;padding-top:8px;padding-right:5px}.uni-title{color:#000!important;font-size:18px!important;font-weight:600!important;line-height:28px}.uni-subtitle{color:#000!important;font-size:18px!important;font-weight:400!important;line-height:28px}.qa-heading{color:var(--Black, #101828)!important;font-size:18px!important;font-weight:700!important;line-height:28px;list-style:none}.qa-bodrer{padding:16px!important;border-radius:8px!important;border:1px solid var(--Gray-200, #EAECF0)!important;background:var(--text-primary, #FFF)!important;box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f!important}.title-ref{color:var(--Gray-900, #101828)!important;font-size:16px!important;font-weight:400!important;line-height:24px}.btn-outline-primary{border-radius:8px!important;border:1px solid var(--Primary-500, #33B5FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important;padding:calc(.7rem + 0px) calc(1.5rem + 1px)!important}.Partially{color:#000;font-size:18px!important;font-style:italic!important;font-weight:500;line-height:28px}.task-remarks{color:#000!important;font-size:18px!important;font-weight:400!important;line-height:28px}.backButtonright{border-radius:1000px!important;background:var(--text-primary, #FFF)!important;padding:12px!important;box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808!important;box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808!important;position:absolute;top:30px;right:-10px;z-index:0}.backButtonleft{border-radius:1000px!important;background:#fff;padding:14px!important;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;left:-20px;z-index:5}img.img-logo{width:100%;height:400px!important}.recap-img{width:100%;height:400px;object-fit:cover!important}.img-src{width:30%!important;height:20%!important}.dropdownselect{padding:20px 10px}.dropdownbg{width:Fill(372px) px;height:Hug(40px) px;padding:8px 16px;gap:0px;border-radius:6px 0 0;justify-content:space-between;opacity:0px;background:#eaf8ff}.detectionright{color:var(--Primary-700, #009BF3)!important;text-align:center;font-size:14px!important;font-weight:500;line-height:14px;float:right!important;mix-blend-mode:multiply}.backgroundBorder{background:#eaf8ff!important;color:#00a3ff!important;padding:12px;border-radius:8px;font-weight:500;line-height:10px}.withoutbackground{padding:8px;font-weight:500;line-height:10px}.snapcard{display:flex;padding:16px;flex-direction:column;align-items:flex-start;gap:16px;align-self:stretch;border-radius:8px;border:1px solid var(--Gray-200, #EAECF0);background:var(--White, #FFF);box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}.snapheader{color:var(--Black, #101828);font-size:16px;font-style:normal;font-weight:600;line-height:24px}.snaptext{color:var(--Gray-900, #101828);font-size:16px!important;font-style:normal;font-weight:600!important;line-height:24px}.snaptime{color:var(--Gray-900, #101828);font-size:12px!important;font-style:normal;font-weight:500!important;line-height:22px}.snapbadge{text-align:center;font-size:14px!important;font-style:normal;font-weight:500!important;line-height:20px}.btn-resize{font-size:13px!important;height:29px!important;line-height:11px!important;padding:1px!important}.preview{position:absolute;top:30%;left:14%}.w-25{width:17%!important}.w-40{width:40%!important}.usage-detection{color:var(--Primary-700, #009BF3);text-overflow:ellipsis!important;font-size:16px!important;font-style:normal;font-weight:400;line-height:16px;width:220Px}.usage-text{color:var(--Gray-700, #344054);text-overflow:ellipsis;font-size:16px;font-style:normal;font-weight:400;line-height:17px}.h-450px{object-fit:contain!important}.store-title{color:var(--Black, #101828)!important;font-size:18px;font-weight:700;line-height:28px}.img-opc{width:100%!important;height:300px!important;border-radius:12px!important}.h-900px{min-height:auto!important;max-height:2800px!important}.select-wrapper{position:relative;display:inline-block;width:100%}.placeholder-overlay{position:absolute;color:var(--Gray-500, #667085);font-family:Inter;font-size:16px!important;font-style:normal;font-weight:400;top:10px;left:15px;pointer-events:none;font-size:1.1rem;z-index:1}.flagclour{color:red}.remarksTxt{margin-top:10px;font-family:Inter;font-size:18px;font-weight:400;line-height:28px;text-align:left}.no-text-transform{text-transform:none!important}.border-val1{padding:8px 14px!important;border-radius:8px!important;border:1px solid var(--Primary-500, #33B5FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important}.font-task{color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}.border-default{padding:8px 14px!important;border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important}.font-defult-task{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}.nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.nav-item .nav-link:hover{border:none}.badge-num-primary{border-radius:16px!important;background:var(--Primary-50, #EAF8FF)!important;color:var(--Primary-700, #009BF3)!important;text-align:center;font-size:14px!important;font-style:normal;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}.badge-num-muted{border-radius:16px!important;background:var(--Primary-50, #F2F4F7)!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:14px;font-style:normal;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}.text-title{font-size:16px!important;font-weight:600!important;color:#101828!important;line-height:24px}.title-description{font-size:14px!important;font-weight:400;color:#101828!important;line-height:24px!important}.border-primary1{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:16px!important;font-weight:600;line-height:24px;text-transform:capitalize}.scroll-y{overflow-x:hidden;overflow-y:auto}.totalsize{width:18%}.view-detail{color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}.left-sidebar{position:sticky;top:0;width:33%;overflow-y:auto}.main-container{display:flex;align-items:flex-start}.right-content{flex-grow:1;width:67%}.bordercolor{border:1px solid var(--Gray-300, #D0D5DD)!important}.toastcard{border-radius:8px;background:var(--Primary-50, #EAF8FF);padding:8px 16px}.toasttext{overflow:hidden;color:var(--Primary-700, #009BF3);text-overflow:ellipsis;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.btn-outline{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d}.refreshtext{color:var(--Gray-700, #344054);font-size:14px;font-style:normal;font-weight:600;line-height:20px;text-transform:capitalize}.collage-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;height:450px;overflow-y:auto;grid-auto-rows:auto}.collage-tile{width:100%;height:100%}.collage-tile img{width:100%;height:100%!important;border-radius:6px}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i6.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i9.DaterangepickerDirective, selector: "input[ngxDaterangepickerMd]", inputs: ["minDate", "maxDate", "autoApply", "alwaysShowCalendars", "showCustomRangeLabel", "linkedCalendars", "dateLimit", "singleDatePicker", "showWeekNumbers", "showISOWeekNumbers", "showDropdowns", "isInvalidDate", "isCustomDate", "isTooltipDate", "showClearButton", "customRangeDirection", "ranges", "opens", "drops", "firstMonthDayClass", "lastMonthDayClass", "emptyWeekRowClass", "emptyWeekColumnClass", "firstDayOfNextMonthClass", "lastDayOfPreviousMonthClass", "keepCalendarOpeningWithRange", "showRangeLabelOnInput", "showCancel", "lockStartDate", "timePicker", "timePicker24Hour", "timePickerIncrement", "timePickerSeconds", "closeOnAutoApply", "endKeyHolder", "startKey", "locale", "endKey"], outputs: ["change", "rangeClicked", "datesUpdated", "startDateChanged", "endDateChanged", "clearClicked"] }, { kind: "directive", type: i4.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i10.ReactiveSelectComponent, selector: "lib-reactive-select", inputs: ["isDisabled", "idField", "nameField", "label", "data"], outputs: ["itemChange"] }, { kind: "component", type: i11.CustomSelectComponent, selector: "lib-stores-select", inputs: ["items", "searchField", "multi", "idField", "selectedValues", "disabled", "label"], outputs: ["selected"] }, { kind: "component", type: i12.GroupSelectComponent, selector: "lib-group-select", inputs: ["items", "searchField", "multi", "idField", "selectedValues", "disabled", "label"], outputs: ["selected"] }, { kind: "component", type: i13.CustomsingleSelectComponent, selector: "lib-single-select", inputs: ["items", "searchField", "multi", "idField", "selectedValues", "disabled", "label"], outputs: ["selected"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.DatePipe, name: "date" }] });
2660
2806
  }
2661
2807
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: GalleryComponent, decorators: [{
2662
2808
  type: Component,
2663
- args: [{ selector: 'lib-gallery', template: "\r\n<div *ngIf=\"notifyCount>0\" class=\"h-xl-100 flex-row flex-stack flex-wrap p-2\">\r\n <!-- toast card starts -->\r\n <div class=\"toastcard col-md-12 mb-4\">\r\n <div class=\"d-flex align-items-center justify-content-between w-100\">\r\n <span class=\"align-items-start\">\r\n <span class=\"toasttext d-block\"><span class=\"me-5\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"20\" viewBox=\"0 0 16 20\" fill=\"none\">\r\n <path d=\"M9.14234 2.4V1.6875C9.14234 1.03178 8.63166 0.5 7.99955 0.5C7.36744 0.5 6.85675 1.03178 6.85675 1.6875V2.4C4.21761 2.95033 2.28558 5.34649 2.28558 8.21875V8.91641C2.28558 10.6643 1.66918 12.3453 0.553532 13.6516L0.28869 13.9596C-0.0103044 14.3121 -0.0840396 14.8094 0.100307 15.2361C0.284654 15.6629 0.69281 15.9375 1.14279 15.9375H14.8563C15.3063 15.9375 15.7134 15.6629 15.8991 15.2361C16.0848 14.8094 16.0098 14.3121 15.7098 13.9596L15.4456 13.6516C14.3313 12.3453 13.7135 10.6643 13.7135 8.91641V8.21875C13.7135 7.94125 13.6952 7.66819 13.6597 7.40081C13.2676 7.54576 12.8432 7.625 12.4 7.625C10.4118 7.625 8.8 6.03001 8.8 4.0625C8.8 3.46778 8.88193 2.89289 9.14234 2.4C9.16417 2.40461 9.12061 2.39514 9.14234 2.4Z\" fill=\"#00A3FF\"/>\r\n <path d=\"M6.38178 18.8061C6.81033 19.2514 7.39244 19.5 7.99955 19.5C8.57452 19.5 9.18877 19.2514 9.61732 18.8061C10.0459 18.3607 10.2851 17.7225 10.2851 17.125H5.71396C5.71396 17.7225 5.95323 18.3607 6.38178 18.8061Z\" fill=\"#00A3FF\"/>\r\n <circle cx=\"13\" cy=\"3.5\" r=\"3\" fill=\"#F04438\"/>\r\n </svg>\r\n </span>New Detection Found! Refresh Now to view new detection</span>\r\n </span>\r\n <button (click)=\"refreshnow()\" type=\"button\" class=\"btn-outline btn align-items-end text-nowrap ms-4 cursor-pointer\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_12165_62781)\">\r\n <path d=\"M19.1672 3.33172V8.33172M19.1672 8.33172H14.1672M19.1672 8.33172L15.3089 4.69838C14.1594 3.54817 12.6672 2.80271 11.0572 2.57434C9.44716 2.34597 7.80653 2.64706 6.38251 3.43225C4.9585 4.21744 3.82826 5.44418 3.1621 6.92761C2.49595 8.41104 2.32997 10.0708 2.68919 11.6568C3.0484 13.2427 3.91335 14.669 5.15368 15.7206C6.39401 16.7722 7.94254 17.3922 9.5659 17.4872C11.1893 17.5822 12.7995 17.147 14.154 16.2471C15.5085 15.3473 16.5339 14.0316 17.0756 12.4984\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_12165_62781\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"refreshtext ms-2\"></span> Refresh Now </button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"gallery-card po\">\r\n <div class=\"header mb-4\">Gallery</div>\r\n\r\n <form [formGroup]=\"galleryForm\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3 mb-3\">\r\n <div class=\"position-relative\">\r\n <span style=\"top: 20%;\" class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input class=\"fx-date-range form-control ps-14 z-2\" style=\"min-width: 260px !important;\"\r\n type=\"text\" matInput ngxDaterangepickerMd [drops]=\"'down'\"\r\n [opens]=\"'right'\" [alwaysShowCalendars]=\"false\" [keepCalendarOpeningWithRange]=\"true\"\r\n [showCancel]=\"false\" autocomplete=\"off\" [(ngModel)]=\"selectedDateRange\"\r\n [ngModelOptions]=\"{standalone: true}\" (datesUpdated)=\"datechange($event)\" (click)=\"resetValidation()\" \r\n (startDateChanged)=\"onStartDateChange($event)\" [isCustomDate]=\"isCustomDate\" [autoApply]=\"true\" \r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n name=\"daterange\" [readonly]=\"true\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 mb-4\">\r\n <lib-reactive-select formControlName=\"type\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"type\" (itemChange)=\"typeChange($event)\" ></lib-reactive-select>\r\n </div>\r\n <div class=\"col-md-4 mb-4\">\r\n <lib-single-select [items]=\"checklists\" [multi]=\"false\" [searchField]=\"'checkListName'\" [idField]=\"'_id'\"\r\n (selected)=\"checklistNamechange($event,false)\" [selectedValues]=\"[{checkListName:galleryForm.get('checklistName')?.value}]\"></lib-single-select>\r\n </div> \r\n <div class=\"col-md-3 mb-4\">\r\n <lib-reactive-select formControlName=\"answerType\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"answerType\"></lib-reactive-select>\r\n </div>\r\n <div class=\"col-md-2 mb-4\">\r\n\r\n <lib-reactive-select formControlName=\"filtertype\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"filtertype\" (itemChange)=\"filterChange($event)\" ></lib-reactive-select>\r\n\r\n </div>\r\n <div class=\"col-md-3 mb-4\" *ngIf=\"galleryForm.get('filtertype')?.value ==='Clusters'\">\r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(galleryForm.get('ClusterList')?.value?.length)\">\r\n Select cluster\r\n </div>\r\n <lib-group-select [items]=\"ClusterList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'groupName'\"\r\n [idField]=\"'groupName'\" (selected)=\"ongroupSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('ClusterList')?.value\">\r\n </lib-group-select>\r\n </div>\r\n \r\n </div>\r\n <div class=\"col-md-3 mb-4\" *ngIf=\"galleryForm.get('filtertype')?.value ==='Teams'\">\r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(galleryForm.get('TeamsList')?.value?.length)\">\r\n Select Teams\r\n </div>\r\n <lib-group-select [items]=\"TeamsList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'teamName'\"\r\n [idField]=\"'teamName'\" (selected)=\"onTeamsSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('TeamsList')?.value\">\r\n </lib-group-select>\r\n </div>\r\n \r\n </div>\r\n <div class=\"col-md-3 mb-4\" *ngIf=\"galleryForm.get('filtertype')?.value ==='Clusters'\">\r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(galleryForm.get('storeList')?.value?.length)\">\r\n Select Stores\r\n </div>\r\n <lib-stores-select [items]=\"storeList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'storeName'\"\r\n [idField]=\"'storeId'\" (selected)=\"onStoreSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('storeList')?.value\"></lib-stores-select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 mb-4\" *ngIf=\"galleryForm.get('filtertype')?.value ==='Teams'\">\r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(galleryForm.get('userList')?.value?.length)\">\r\n Select users\r\n </div>\r\n <lib-stores-select [items]=\"userList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'userName'\"\r\n [idField]=\"'userName'\" (selected)=\"onUserSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('userList')?.value\"></lib-stores-select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4 text-end\"> \r\n <div class=\"d-flex justify-content-end\"> \r\n <div class=\"me-5 w-100\" *ngIf=\"select === 'eyetest'\">\r\n <select class=\"form-select\" [(ngModel)]=\"category\" [ngModelOptions]=\"{standalone: true}\">\r\n <option value=\"all\">All</option>\r\n <option value=\"adults\">Adults</option>\r\n <option value=\"kids\">Kids</option>\r\n </select>\r\n </div>\r\n <div class=\"me-5 w-100\" *ngIf=\"select === 'cleaning'||select ==='scrum'\">\r\n <select class=\"form-select\" [(ngModel)]=\"category\" [ngModelOptions]=\"{standalone: true}\">\r\n <option value=\"all\">All</option>\r\n <option value=\"rejected\">Breached</option>\r\n <option value=\"approved\">Not-breached</option>\r\n </select>\r\n </div>\r\n <div class=\"me-5 w-100 text-start\" *ngIf=\"select === 'queuealert'\"> \r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(galleryForm.get('zoneList')?.value?.length)\" >\r\n Select Zone\r\n </div> \r\n <lib-stores-select [items]=\"zoneList\" [disabled]=\"false\" [multi]=\"true\" [searchField]=\"'value'\"\r\n [idField]=\"'key'\" (selected)=\"onzoneSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('zoneList')?.value\"></lib-stores-select>\r\n </div>\r\n </div>\r\n <div class=\"me-5 w-50\" *ngIf=\"showflag\">\r\n <select class=\"form-select\" (change)=\"approveFilterChange($event)\" [(ngModel)]=\"approveFilter\" [ngModelOptions]=\"{standalone: true}\">\r\n <option value=\"all\">All</option>\r\n <option value=\"Approved\">Approved</option>\r\n <option value=\"notapproved\">Not-Approved</option>\r\n </select>\r\n </div>\r\n <span class=\"me-4 mt-3\" *ngIf=\"showflag\"> \r\n <input formControlName=\"viewRedo\" change type=\"checkbox\" (click)=\"redoChanged($event)\"\r\n class=\"form-check-input cursor-pointer mt-1 me-2\" id=\"viewRedo\">\r\n <label class=\"checkbox-label\" for=\"viewRedo\">Re-do</label>\r\n </span>\r\n <span class=\"me-3 mt-3\" *ngIf=\"showflag&&galleryForm.value.type==='checklist'\">\r\n <input formControlName=\"viewFlag\" change type=\"checkbox\" (click)=\"flagChanged($event)\"\r\n class=\"form-check-input cursor-pointer mt-1 me-2\" id=\"viewFlag\">\r\n <label class=\"checkbox-label\" for=\"viewFlag\">Flag</label>\r\n </span>\r\n \r\n <a (click)=\"onSubmit()\" type=\"submit\" class=\"btn btn-primary px-4 \"><span>Apply</span></a>\r\n <!-- <a (click)=\"notify([])\" type=\"submit\" class=\"btn btn-primary px-4 \"><span>test</span></a> -->\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n </div>\r\n </form>\r\n</div>\r\n<div class=\"card my-2\">\r\n<div class=\"row main-container my-5 \">\r\n \r\n <div [ngClass]=\"showsidenav ? 'col-md-4 left-sidebar':'d-none'\" class=\"h-650px\">\r\n <div class=\"position-relative h-650px scroll-y\">\r\n <div class=\"card-body p-5\">\r\n <div class=\"checklist-left\">\r\n <div class=\"checklist-title\">{{checklistName}}</div>\r\n <div class=\"checklist-text\">{{checkListDescription}}</div>\r\n </div>\r\n <div *ngIf=\"loading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"noData&&select === 'custom' || noData&&select === 'task'\"class=\"row mt-20\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"w-75 h-300px\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title mt-0\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this checklist</div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"noData&&select !== 'custom'&&select !== 'task'\" class=\"row mt-20\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div class=\"card-body mt-20 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src mt-5 w-40\" src=\"./assets/tango/Icons/Nodata2.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No Detections found</div>\r\n <div class=\"nodata-sub\">There is no breaches for the selected period</div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <section *ngIf=\"!noData && !loading\">\r\n\r\n <div *ngIf=\"select === 'custom'||select === 'task'\">\r\n <div class=\"text-end mt-10\">\r\n <!-- <button class=\"btn btn-outline w-25 me-3 btn-resize\" (click)=\"viewChecklists()\"> Reset </button> -->\r\n <button class=\"btn btn-outline w-25 me-3 btn-resize\" *ngIf=\"selectedSection.length>0||tempselectedSection.length>0\" (click)=\"onchecklistreset()\"> Reset </button>\r\n <button *ngIf=\"selectedSection.length>0||tempselectedSection.length>0\" class=\"btn btn-primary w-25 btn-resize\" (click)=\"selectsinglequestion()\">Apply</button>\r\n </div>\r\n <div class=\"my-6\" [ngClass]=\"selectedSection.length===0 ? 'view-all':'view-questions'\" style=\"cursor: pointer;\" (click)=\"onchecklistreset()\">\r\n View All Answers\r\n </div>\r\n <div class=\"mx-2\" *ngFor=\"let section of checklistData; let i=index;\">\r\n <div class=\"d-flex align-items-center justify-content-between mt-4\" style=\"cursor: pointer;\"\r\n (click)=\"accordian(i)\">\r\n <div class=\"fs-4 fw-bold section\" *ngIf=\"galleryForm.value.type==='checklist'\" >{{section.sectionName}}</div>\r\n <hr class=\"mx-2\">\r\n <svg class=\"cursor-pointer\" [ngClass]=\"{'rotate' : show !== i}\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"25\" height=\"25\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n <div *ngIf=\"show===i\" class=\"question-left\">\r\n <div cdkDropList [cdkDropListData]=\"section.questions\">\r\n <div *ngFor=\"let question of section.questions;let j=index;\" class=\"d-flex my-2 q-btn\"\r\n cdkDrag>\r\n <input id=\"label\" [(ngModel)]=\"question.checked\" (click)=\"selectedQuestion($event,section,question)\" class=\"form-check-input cursor-pointer mt-2 me-4\" type=\"checkbox\" > \r\n <div class=\"editablecontent\" [ngClass]=\"question?.checked ? 'view-all':''\" style=\"cursor: pointer;\">\r\n {{question.qno}} . {{question.qname}}\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- </div> -->\r\n <div *ngIf=\"combinedChecklist.includes(select)\">\r\n <div class=\"text-end mt-10\">\r\n <button class=\"btn btn-outline w-25 me-3 btn-resize\" (click)=\"onreset()\"> Reset </button>\r\n <button class=\"btn btn-primary w-25 btn-resize\" (click)=\"onview()\">Apply</button>\r\n </div>\r\n <div class=\"dropdownselect h-900px scroll-y\">\r\n <div class=\"d-flex justify-content-left \" [ngClass]=\"selectAll ? 'backgroundBorder':'withoutbackground'\">\r\n <input\r\n class=\"form-check-input cursor-pointer me-4\" type=\"checkbox\" [(ngModel)]=\"selectAll\"\r\n (click)=\"selectAllStore($event)\"> <span [ngClass]=\"selectAll ? 'usage-detection':'usage-text'\">Select All</span>\r\n </div>\r\n <!-- dropdownbg -->\r\n <div class=\"my-4\" *ngFor=\"let list of mobileusageDataList;let i=index\">\r\n <div (change)=\"updateCheck($event,list)\" [ngClass]=\"list.checked ? 'backgroundBorder':'withoutbackground'\">\r\n <input id=\"label{{i}}\" class=\"form-check-input cursor-pointer me-4\" type=\"checkbox\" [(ngModel)]=\"list.checked\">\r\n <label for=\"label{{i}}\" [ngClass]=\"list.checked ? 'usage-detection':'usage-text'\" >{{list?.storeName}}</label>\r\n <span class=\"badge badge-light-primary detectionright\" *ngIf=\"list.detection\">{{list.detection}} Detections</span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n </section>\r\n \r\n </div>\r\n\r\n\r\n\r\n \r\n\r\n <div *ngIf=\"showsidenav\" (click)=\"sidenav()\" class=\"backButtonright text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M11 17L6 12L11 7M18 17L13 12L18 7\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"showsidenav ? 'col-md-8 border border-bottom-0 border-top-0 border-left border-5 right-sidebar':'col-md-12'\" >\r\n <div class=\"position-relative \">\r\n <div class=\"card-header border-0 px-0 my-0\" *ngIf=\"(select === 'custom' || select === 'task'||select === 'cleaning'||select ==='scrum'||select ==='storeopenandclose'||select ==='inventorycount'||select ==='carsattended'||select ==='numberplateinfo') && !viewloading && !viewnoData\" >\r\n <h3></h3>\r\n <!-- Switch toggle -->\r\n <div class=\"card-toolbar\" *ngIf=\"!galleryForm.value.viewRedo\">\r\n <div class=\"position-relative cursor-pointer me-10\">\r\n <div class=\" btn btn-primary form-control no-text-transform\" (click)=\"exportDet($event)\">\r\n {{ exportLabel }} <!-- Bind label text here -->\r\n </div>\r\n <div *ngIf=\"exportShow\"\r\n class=\"card py-2 position-absolute productdrop top-10 w-150px end-0 z-1\">\r\n <ul class=\"list-unstyled mb-2\">\r\n <li class=\"cursor-pointer py-4 checkbox-label mx-2\" *ngIf=\"pdfExportTypes.includes(select)\" type=\"button\" (click)=\"setExportAsPPT('Export as PDF','pdf')\">\r\n Export as PDF\r\n </li>\r\n <li class=\" cursor-pointer checkbox-label py-4 mx-2\" *ngIf=\"csvExportTypes.includes(select)\" type=\"button\" (click)=\"setExportAsPPT('Export as CSV','csv')\">\r\n Export as CSV\r\n </li>\r\n <li *ngIf=\"selectedSection.length>0||select === 'cleaning'||select ==='scrum'||select ==='storeopenandclose'||select ==='inventorycount'||select ==='carsattended'||select ==='numberplateinfo'\" class=\" cursor-pointer checkbox-label py-4 mx-2\" type=\"button\" (click)=\"setExportAsPPT('Export as PPT','ppt')\">\r\n Export as PPT\r\n </li>\r\n <li *ngIf=\"selectedSection.length>0||select === 'cleaning'||select ==='scrum'||select ==='storeopenandclose'\" class=\"cursor-pointer checkbox-label py-4 mx-2\" type=\"button\" (click)=\"setExportAsPPT('Export as ZIP','zipfiles')\">\r\n Export as ZIP\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n \r\n <div class=\"card-body p-0\">\r\n <div>\r\n <div *ngIf=\"viewloading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"viewnoData&&select !== 'custom'&&select !== 'task'\" class=\"row mt-20\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div class=\"card-body mt-20 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src mt-5 w-40\" src=\"./assets/tango/Icons/Nodata2.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No Detections found</div>\r\n <div class=\"nodata-sub\">There is no breaches for the selected period</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"viewnoData&&select === 'custom' || viewnoData&&select === 'task'\" class=\"row mt-20\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div class=\"card-body mt-20 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src mt-5 w-40\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this checklist</div>\r\n </div>\r\n </div>\r\n </div>\r\n <section *ngIf=\"!viewloading && !viewnoData\">\r\n <div *ngIf=\"select==='custom'||select==='task' \">\r\n <div *ngIf=\"showsingle\" class=\"qa-heading m-3 mx-11\">{{this.selectedSection[0]?.questions[0]}}</div>\r\n <div *ngIf=\"showsingle&&showfilter\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap mx-10\">\r\n <li class=\"nav-item\" *ngFor=\"let item of answerFilter\">\r\n <a (click)=\"taskTab(item)\" [ngClass]=\"galleryForm.value.filter === item.key ? 'active' : ''\" class=\"nav-link cursor-pointer no-border me-3\">\r\n {{item.key}}<span class=\"mx-2 \" [ngClass]=\"galleryForm.value.filter === item.key ? 'badge-num-primary' :'badge-num-muted'\">{{item.count}}</span>\r\n </a>\r\n </li>\r\n \r\n </ul>\r\n \r\n </div>\r\n \r\n <div *ngFor=\"let checklist of viewChecklistsData?.checklistAnswers\">\r\n \r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''&&showmulti\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n \r\n\r\n <div class=\"row px-10 mt-5\" *ngIf=\"showmulti\">\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Store Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">{{checklist?.storeProfile?.storeName}} </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\" *ngIf=\"galleryForm.value.type==='checklist'\">Checklist Name:</h3>\r\n <h3 class=\"uni-title\" *ngIf=\"galleryForm.value.type==='task'\">Task Name:</h3>\r\n\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">{{checklist?.checklistInfo?.checklistName}}</p>\r\n </div>\r\n\r\n <ng-container>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">State & Country :</h3>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <p class=\"uni-subtitle\">{{checklist?.storeProfile?.state}}\r\n {{checklist?.storeProfile?.Country}}</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <h3 class=\"uni-title\">Duration :</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\"> {{checklist?.checklistInfo?.duration}}</p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">No. of Questions :</h3>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <p class=\"uni-subtitle\">{{checklist?.checklistInfo?.noofQuestions}}</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <h3 class=\"uni-title\">Date :</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\"> {{checklist?.checklistInfo?.date}}</p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Submitted By :</h3>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <p class=\"uni-subtitle\">{{checklist?.checklistInfo?.submittedBy}}</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <h3 class=\"uni-title\">Time :</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\"> {{checklist?.checklistInfo?.time}}</p>\r\n </div>\r\n </ng-container>\r\n\r\n </div>\r\n \r\n\r\n <div class=\"row px-10\" >\r\n\r\n <div *ngFor=\"let questionlist of checklist.questionAnswer\">\r\n <div class=\"qa-bodrer my-5\" *ngFor=\"let question of questionlist.questions\">\r\n <div class=\"row\" *ngIf=\"question.redo||question.redo===false\">\r\n <div class=\"view-detail col-12 text-end cursor-pointer\" (click)=\"ViewInDetails(question,checklist?.checklistInfo,checklist?.storeProfile,questionlist)\">\r\n View in detail \r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M15 10.8333V15.8333C15 16.2754 14.8244 16.6993 14.5118 17.0118C14.1993 17.3244 13.7754 17.5 13.3333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V6.66667C2.5 6.22464 2.67559 5.80072 2.98816 5.48816C3.30072 5.17559 3.72464 5 4.16667 5H9.16667M12.5 2.5H17.5M17.5 2.5V7.5M17.5 2.5L8.33333 11.6667\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n \r\n <div class=\"row w-100 m-3\" *ngIf=\"showsingle\">\r\n <div class=\"col-md-4 text-title\">\r\n {{checklist?.storeProfile?.storeName}}\r\n </div>\r\n <div class=\"col-md-8 text-end title-description\">\r\n Submitted by : {{checklist?.checklistInfo?.submittedBy}} On : {{checklist?.checklistInfo?.date}} {{checklist?.checklistInfo?.time}}\r\n </div>\r\n </div>\r\n <ul>\r\n <li *ngIf=\"showmulti\" class=\"qa-heading\">{{question?.qno}}. {{question?.qname}}</li>\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='descriptive'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <!-- checklist type with single image but inside collage-grid -->\r\n <div class=\"col-md-6\">\r\n <div *ngIf=\"galleryForm.value.type === 'checklist' \r\n && question.questionReferenceImage \r\n && question.questionReferenceImage !== ''\">\r\n \r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n \r\n <div class=\"collage-grid\"\r\n [ngStyle]=\"{ 'grid-template-columns': getGridColumns(question.questionReferenceImage.length) }\">\r\n \r\n <div class=\"collage-tile\">\r\n <img class=\"img-logo\" [src]=\"environment.TraxAnswerCDN + question.questionReferenceImage\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"question.questionReferenceImage&&question.questionReferenceImage.length>0&&galleryForm.value.type==='task'&&question.questionReferenceImage[0] !== ''\">\r\n\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <div class=\"col-md-6\">\r\n <div class=\"collage-grid\"\r\n [ngStyle]=\"{ 'grid-template-columns': getGridColumns(question.questionReferenceImage.length) }\">\r\n \r\n <div class=\"collage-tile\" *ngFor=\"let item of question.questionReferenceImage\">\r\n <div *ngIf=\"item&&item!==''&&item!==null\">\r\n <img class=\"img-logo\" src=\"{{environment.TraxAnswerCDN}}{{item}}\" alt=\"\">\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n \r\n <span class=\"mt-2\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='linearscale'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"galleryForm.value.type==='checklist'&&question.questionReferenceImage!==''&&question.questionReferenceImage!==null\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div *ngIf=\"question.questionReferenceImage&&question.questionReferenceImage.length>0&&galleryForm.value.type==='task'&&question.questionReferenceImage[0] !== ''\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of question.questionReferenceImage\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item}}\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n <!-- <br> -->\r\n <span class=\"mt-4\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='time'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"galleryForm.value.type==='checklist'&&question.questionReferenceImage!==''&&question.questionReferenceImage!==null\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div *ngIf=\"question.questionReferenceImage&&question.questionReferenceImage.length>0&&galleryForm.value.type==='task'&&question.questionReferenceImage[0] !== ''\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of question.questionReferenceImage\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item}}\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n <br>\r\n <span class=\"mt-4\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='date'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"galleryForm.value.type==='checklist'&&question.questionReferenceImage!==''&&question.questionReferenceImage!==null\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div *ngIf=\"question.questionReferenceImage&&question.questionReferenceImage.length>0&&galleryForm.value.type==='task'&&question.questionReferenceImage[0] !== ''\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of question.questionReferenceImage\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item}}\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n <br>\r\n <span class=\"mt-4\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='yes/no'\">\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"col-md-6\" *ngIf=\"galleryForm.value.type==='checklist'&&question.questionReferenceImage!==''&&question.questionReferenceImage!==null\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <br *ngIf=\"galleryForm.value.type==='checklist'&&question.questionReferenceImage!==''&&question.questionReferenceImage!==null\">\r\n <div *ngIf=\"question.questionReferenceImage&&question.questionReferenceImage.length>0&&galleryForm.value.type==='task'&&question.questionReferenceImage[0] !== ''\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of question.questionReferenceImage\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item}}\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n <span class=\"mt-4\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"row\" *ngIf=\"item.validation&&item.validationAnswer!==''\">\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div [ngClass]=\"item.validationType==='Capture Image'?'col-md-6':'col-md-12'\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType==='Capture Image'||item.validationType==='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType==='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"w-100 h-450px p-3\" *ngIf=\"item.validationType==='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n </div>\r\n <span class=\"remarksTxt\" *ngIf=\"item.validationType==='Descriptive Answer'\">Validation Answer :{{item.validationAnswer}}</span>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div> \r\n\r\n\r\n\r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question?.answerType==='multiplechoicesingle'\">\r\n \r\n <div class=\"col-md-6\" *ngIf=\"galleryForm.value.type==='checklist'&&question.questionReferenceImage!==null&&question.questionReferenceImage!==''&&question.questionReferenceImage!==undefined\">\r\n <div class=\"title-ref my-3\">Reference Image</div> \r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n \r\n <div *ngIf=\"question.questionReferenceImage&&question.questionReferenceImage.length>0&&galleryForm.value.type==='task'&&question.questionReferenceImage[0] !== ''\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of question.questionReferenceImage\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item}}\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n <div *ngFor=\"let item of question.userAnswer\">\r\n <span class=\"mt-2\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==null&&item.referenceImage!==''&&galleryForm.value.type==='checklist'\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div *ngIf=\"item.referenceImage.length>0&&galleryForm.value.type==='task'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of item.referenceImage\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item}}\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"item.validationType==='Capture Image'?'col-md-6':'col-md-12'\" *ngIf=\"item.validation&&item.validationAnswer!==''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType==='Capture Image'||item.validationType==='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType==='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n\r\n <video controls class=\"w-100 h-450px p-3\" *ngIf=\"item.validationType==='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n \r\n <span *ngIf=\"item.validationType==='Descriptive Answer'\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n <div class=\"row\" *ngIf=\"question?.answerType==='image'\">\r\n <div class=\"col-md-6\">\r\n<div *ngIf=\"galleryForm.value.type === 'task'\">\r\n <div class=\"title-ref my-3\" *ngIf=\"hasReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n \r\n <div class=\"collage-grid\" *ngIf=\"hasReferenceImages(question)\">\r\n <ng-container *ngFor=\"let answer of question.answers\">\r\n <ng-container *ngIf=\"answer.referenceImage?.length\">\r\n <div class=\"collage-tile\" *ngFor=\"let item of answer.referenceImage\">\r\n <img [src]=\"environment.TraxAnswerCDN + item\" alt=\"\" />\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</div>\r\n\r\n<!-- For Checklist Type -->\r\n<div *ngIf=\"galleryForm.value.type === 'checklist'\">\r\n <div class=\"title-ref my-3\" *ngIf=\"hasChecklistReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n\r\n <div class=\"collage-grid\" *ngIf=\"hasChecklistReferenceImages(question)\">\r\n <ng-container *ngFor=\"let answer of question.answers\">\r\n <div class=\"collage-tile\" *ngIf=\"answer.referenceImage\">\r\n <img [src]=\"environment.TraxAnswerCDN + answer.referenceImage\" alt=\"\" />\r\n </div>\r\n </ng-container>\r\n </div>\r\n</div>\r\n</div>\r\n\r\n <!-- <div class=\"col-md-6\" *ngIf=\"item.referenceImage!=null&&item.referenceImage!==''&&galleryForm.value.type=='checklist'\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div> \r\n <div *ngIf=\"item.referenceImage.length>0&&galleryForm.value.type=='task'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of item.referenceImage\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item}}\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <div class=\"col-md-6\">\r\n <div class=\"row\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <div class=\"collage-grid\" [ngStyle]=\"{'grid-template-columns': getGridColumns(question.userAnswer.length)}\">\r\n <div *ngFor=\"let item of question.userAnswer;let i = index\" class=\"collage-tile\">\r\n \r\n \r\n <img (click)=\"openImagePopup(getImageUrls(question.userAnswer),getImageNames(question.userAnswer),i)\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\"\r\n alt=\"\">\r\n \r\n <div [ngClass]=\"item.validationType==='Capture Image'?'col-md-6 mt-2':'col-md-12 mt-2'\" *ngIf=\"item.validation&&item.validationAnswer!==''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType==='Capture Image'||item.validationType==='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType==='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"w-100 h-450px p-3\" *ngIf=\"item.validationType==='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n <span *ngIf=\"item.validationType==='Descriptive Answer'\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='multiplechoicemultiple'\">\r\n <div *ngIf=\"galleryForm.value.type === 'checklist'\">\r\n <div class=\"title-ref my-3\" *ngIf=\"hasChecklistReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n\r\n <div class=\"collage-grid\" *ngIf=\"hasChecklistReferenceImages(question)\">\r\n <ng-container *ngFor=\"let answer of question.answers\">\r\n <div class=\"collage-tile\" *ngIf=\"answer.referenceImage\">\r\n <img [src]=\"environment.TraxAnswerCDN + answer.referenceImage\" alt=\"\" />\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\"></div>\r\n <div *ngIf=\"question.questionReferenceImage&&question.questionReferenceImage.length>0&&galleryForm.value.type==='task'&&question.questionReferenceImage[0] !== ''\">\r\n\r\n <div class=\"title-ref my-3\" *ngIf=\"hasChecklistReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n \r\n <div class=\"collage-grid\" *ngIf=\"hasChecklistReferenceImages(question)\">\r\n\r\n <ng-container *ngFor=\"let answer of question.questionReferenceImage\">\r\n <div class=\"collage-tile\">\r\n <img\r\n src=\"{{environment.TraxAnswerCDN}}{{answer}}\"\r\n alt=\"\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"Partially my-3 px-5\" *ngFor=\"let item of question.userAnswer\">\r\n <span class=\"mt-3\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==null&&item.referenceImage!==''&&galleryForm.value.type==='checklist'\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div *ngIf=\"item.referenceImage.length>0&&galleryForm.value.type==='task'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of item.referenceImage\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item}}\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"item.validationType==='Capture Image'?'col-md-6 mt-2':'col-md-12 mt-2'\" *ngIf=\"item.validation&&item.validationAnswer&&item.validationAnswer!==''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType==='Capture Image'||item.validationType==='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType==='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"w-100 h-450px p-3\" *ngIf=\"item.validationType==='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n <span *ngIf=\"item.validationType==='Descriptive Answer'\" [ngClass]=\"item.sopFlag ? 'flagclour':''\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='descriptiveImage'\">\r\n <div *ngFor=\"let answer of question.answers\">\r\n <div class=\"row\" *ngIf=\"answer.referenceImage.length>0&&galleryForm.value.type==='task'\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of answer.referenceImage\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item}}\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n \r\n <div class=\"col-md-6\" *ngIf=\"galleryForm.value.type==='checklist'&&answer.referenceImage!==''&&answer.referenceImage!==null\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{answer.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngFor=\"let item of question.userAnswer\">\r\n <!-- <div class=\"col-md-6\" *ngIf=\"item.referenceImage!=null&&item.referenceImage!==''&&galleryForm.value.type=='checklist'\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div *ngIf=\"item.referenceImage.length>0&&galleryForm.value.type=='task'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\" *ngFor=\"let item of item.referenceImage\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item}}\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n \r\n </div> -->\r\n <div class=\"col-md-6\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <img class=\"img-logo\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\"\r\n alt=\"\">\r\n </div>\r\n <div [ngClass]=\"item.validationType==='Capture Image'?'col-md-6 mt-3':'col-md-12 mt-3'\" *ngIf=\"item.validation&&item.validationAnswer!==''\">\r\n <div class=\"title-ref my-3\" *ngIf=\"item.validationType==='Capture Image'||item.validationType==='Capture Video'\">Validation Answer</div>\r\n <img class=\"img-logo\" *ngIf=\"item.validationType==='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"w-100 h-450px p-3\" *ngIf=\"item.validationType==='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n <span [ngClass]=\"item.sopFlag ? 'flagclour':''\" *ngIf=\"item.validationType==='Descriptive Answer'\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"Partially my-3 px-5\" *ngIf=\"question.remarks!==''\">{{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='video'\">\r\n <!-- Task: Multiple reference images (Array) -->\r\n <div *ngIf=\"galleryForm.value.type === 'task' \r\n && question.questionReferenceImage \r\n && question.questionReferenceImage.length > 0 \r\n && question.questionReferenceImage[0] !== ''\">\r\n\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n\r\n <div class=\"collage-grid\"\r\n [ngStyle]=\"{ 'grid-template-columns': getGridColumns(question.questionReferenceImage.length) }\">\r\n\r\n <div class=\"collage-tile\" *ngFor=\"let item of question.questionReferenceImage\">\r\n <img \r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Checklist: Single reference image (String) -->\r\n <div *ngIf=\"galleryForm.value.type === 'checklist' \r\n && question.questionReferenceImage \r\n && question.questionReferenceImage !== ''\">\r\n\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n\r\n <div class=\"collage-grid\"\r\n [ngStyle]=\"{ 'grid-template-columns': getGridColumns(1) }\">\r\n\r\n <div class=\"collage-tile\">\r\n <img \r\n [src]=\"environment.TraxAnswerCDN + question.questionReferenceImage\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-12\" *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"title-ref my-3\">Uploaded Video</div>\r\n\r\n <video controls class=\"w-100 h-450px p-3\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\">\r\n </video>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div class=\"row px-5\" *ngIf=\"question?.answerType==='multipleImage'\">\r\n <div class=\"col-md-6\">\r\n<div *ngIf=\"galleryForm.value.type === 'task'\">\r\n <div class=\"title-ref my-3\" *ngIf=\"hasReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n \r\n <div class=\"collage-grid\" *ngIf=\"hasReferenceImages(question)\">\r\n <ng-container *ngFor=\"let answer of question.answers\">\r\n <ng-container *ngIf=\"answer.referenceImage?.length\">\r\n <div class=\"collage-tile\" *ngFor=\"let item of answer.referenceImage\">\r\n <img [src]=\"environment.TraxAnswerCDN + item\" alt=\"\" />\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</div>\r\n\r\n<!-- For Checklist Type -->\r\n<div *ngIf=\"galleryForm.value.type === 'checklist'\">\r\n <div class=\"title-ref my-3\" *ngIf=\"hasChecklistReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n\r\n <div class=\"collage-grid\" *ngIf=\"hasChecklistReferenceImages(question)\">\r\n <ng-container *ngFor=\"let answer of question.answers\">\r\n <div class=\"collage-tile\" *ngIf=\"answer.referenceImage\">\r\n <img [src]=\"environment.TraxAnswerCDN + answer.referenceImage\" alt=\"\" />\r\n </div>\r\n </ng-container>\r\n </div>\r\n</div>\r\n</div>\r\n <div [ngClass]=\"hasReferenceImages(question) ? 'col-md-6' : 'col-md-12'\">\r\n <div class=\"row\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <div class=\"collage-grid\" [ngStyle]=\"{'grid-template-columns': getGridColumns(question.userAnswer.length)}\">\r\n <div *ngFor=\"let item of question.userAnswer;let i=index\" class=\"collage-tile\">\r\n \r\n <img class=\"cursor-pointer\" (click)=\"openImagePopup(getImageUrls(question.userAnswer),getImageNames(question.userAnswer),i)\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\"\r\n alt=\"\">\r\n <div [ngClass]=\"item.validationType==='Capture Image'?'col-md-6':'col-md-12'\" *ngIf=\"item.validation&&item.validationAnswer!==''\">\r\n <div class=\"title-ref my-3 \" *ngIf=\"item.validationType==='Capture Image'||item.validationType==='Capture Video'\">Validation Answer</div>\r\n <img *ngIf=\"item.validationType==='Capture Image'\" class=\"cursor-pointer\" \r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <video controls class=\"w-100 h-450px p-3\" *ngIf=\"item.validationType==='Capture Video'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"></video>\r\n <span *ngIf=\"item.validationType==='Descriptive Answer'\">Validation Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n \r\n </ul>\r\n\r\n \r\n<div class=\"modal fade\" id=\"imageModal\" tabindex=\"-1\" role=\"dialog\">\r\n <div class=\"modal-dialog modal-lg\" role=\"document\">\r\n <div class=\"modal-content\">\r\n\r\n <!-- <div class=\"modal-header\">\r\n <h5 class=\"modal-title\">{{ selectedImageName }}</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"></button>\r\n </div> -->\r\n\r\n <div class=\"modal-body d-flex align-items-center justify-content-center position-relative\" style=\"min-height: 400px;\">\r\n <!-- Prev Button -->\r\n <button\r\n class=\"btn btn-outline-primary position-absolute start-0 top-50 translate-middle-y ms-3\"\r\n (click)=\"navigateImage('prev')\"\r\n [disabled]=\"currentImageIndex === 0\"\r\n >\r\n \u2039 \r\n </button>\r\n\r\n <!-- Image -->\r\n <img [src]=\"selectedImageUrl\" class=\"img-fluid mx-4\" />\r\n\r\n <!-- Next Button -->\r\n <button\r\n class=\"btn btn-outline-primary position-absolute end-0 top-50 translate-middle-y me-3\"\r\n (click)=\"navigateImage('next')\"\r\n [disabled]=\"currentImageIndex === imageList.length - 1\"\r\n >\r\n \u203A\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-6 text-start\"> \r\n <!-- <button class=\"btn btn-secondary rounded-pill m-0 p-2\" *ngIf=\"question?.linkType&&question?.linkquestionenabled\">Linked to Question {{question.parentQuestion}}</button> -->\r\n </div>\r\n <div class=\"col-md-6 text-end\">\r\n <button class=\"btn btn-sm btn-default border-default me-3\" [disabled]=\"question.redo\" *ngIf=\"checktodayDate(checklist?.checklistInfo?.date)&&(gs.userAccess | async)?.userType !== 'tango'&&!checklist?.checklistInfo?.approvalStatus&&(gs.userAccess | async)?.TangoTrax_checklist_isEdit&&this.galleryForm.value.type =='checklist'\" (click)=\"addTask('redo',question,checklist?.checklistInfo,checklist?.storeProfile,questionlist)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_6004_11734)\">\r\n <path d=\"M19.1693 3.33331V8.33332M19.1693 8.33332H14.1693M19.1693 8.33332L15.3026 4.69998C14.407 3.80391 13.299 3.14932 12.0819 2.79729C10.8649 2.44527 9.57853 2.40727 8.34284 2.68686C7.10716 2.96645 5.96244 3.55451 5.01549 4.39616C4.06855 5.23782 3.35024 6.30564 2.9276 7.49998M0.835938 16.6666V11.6666M0.835938 11.6666H5.83594M0.835938 11.6666L4.7026 15.3C5.59823 16.1961 6.70625 16.8506 7.92328 17.2027C9.14031 17.5547 10.4267 17.5927 11.6624 17.3131C12.898 17.0335 14.0428 16.4455 14.9897 15.6038C15.9367 14.7621 16.655 13.6943 17.0776 12.5\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_6004_11734\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span class=\"ms-2 font-defult-task\">Redo</span>\r\n </button>\r\n \r\n <button class=\"btn btn-sm btn-default border-default me-3\" [disabled]=\"question.redo\" *ngIf=\"checktodayDate(checklist?.checklistInfo?.date)&&(gs.userAccess | async)?.userType !== 'tango'&&!checklist?.checklistInfo?.approvalStatus&&(gs.userAccess | async)?.TangoTrax_Task_isEdit&&this.galleryForm.value.type=='task'\" (click)=\"addTask('redo',question,checklist?.checklistInfo,checklist?.storeProfile,questionlist)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_6004_11734)\">\r\n <path d=\"M19.1693 3.33331V8.33332M19.1693 8.33332H14.1693M19.1693 8.33332L15.3026 4.69998C14.407 3.80391 13.299 3.14932 12.0819 2.79729C10.8649 2.44527 9.57853 2.40727 8.34284 2.68686C7.10716 2.96645 5.96244 3.55451 5.01549 4.39616C4.06855 5.23782 3.35024 6.30564 2.9276 7.49998M0.835938 16.6666V11.6666M0.835938 11.6666H5.83594M0.835938 11.6666L4.7026 15.3C5.59823 16.1961 6.70625 16.8506 7.92328 17.2027C9.14031 17.5547 10.4267 17.5927 11.6624 17.3131C12.898 17.0335 14.0428 16.4455 14.9897 15.6038C15.9367 14.7621 16.655 13.6943 17.0776 12.5\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_6004_11734\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span class=\"ms-2 font-defult-task\">Redo</span>\r\n </button>\r\n\r\n <button class=\"btn btn-sm border-val1\" *ngIf=\"!question.task&&!question.taskId&&this.galleryForm.value.type=='checklist'&&(gs.userAccess | async)?.userType !== 'tango'&&!checklist?.checklistInfo?.approvalStatus&& (gs.userAccess | async)?.TangoTrax_Task_isEdit\" (click)=\"addTask('createtask',question,checklist?.checklistInfo,checklist?.storeProfile,questionlist)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M11.6693 1.66675H5.0026C4.56058 1.66675 4.13665 1.84234 3.82409 2.1549C3.51153 2.46746 3.33594 2.89139 3.33594 3.33341V16.6667C3.33594 17.1088 3.51153 17.5327 3.82409 17.8453C4.13665 18.1578 4.56058 18.3334 5.0026 18.3334H15.0026C15.4446 18.3334 15.8686 18.1578 16.1811 17.8453C16.4937 17.5327 16.6693 17.1088 16.6693 16.6667V6.66675M11.6693 1.66675L16.6693 6.66675M11.6693 1.66675V6.66675H16.6693M10.0026 15.0001V10.0001M7.5026 12.5001H12.5026\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <span class=\"ms-2 font-task\">Create Task</span>\r\n </button>\r\n <button *ngIf=\"question.task&&question.taskId &&this.galleryForm.value.type!=='task'\" class=\"btn btn-sm border-val1\" (click)=\"taskredirect(question,checklist?.storeProfile,checklist?.checklistInfo)\"><span class=\"font-task\">View Task</span></button>\r\n\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"px-10 my-5\" *ngIf=\"imageChecklist.includes(select)\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n <!-- <div>\r\n <h2>Checklist Name : {{this.checklistName}}</h2>\r\n </div> -->\r\n \r\n <div class=\" my-3 mt-5\" *ngFor=\"let item of mobileusageData\">\r\n <div class=\"row px-10 mt-5\">\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Checklist Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">: {{this.checklistName}} </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Store Name</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">: {{item.storeName}}</p>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"item.down_time\">\r\n <h3 class=\"uni-title\">Average Downtime</h3>\r\n </div>\r\n <div class=\"col-md-9\" *ngIf=\"item.down_time\">\r\n <p class=\"uni-subtitle\">: {{item.down_time}} Mins</p>\r\n </div>\r\n </div> \r\n <ul class=\"row w-100 qa-bodrer\">\r\n <!-- <li class=\"qa-heading\">\r\n {{item.storeName}}\r\n </li> -->\r\n \r\n <div class=\"row\">\r\n <div class=\"col-md-12 my-2\" *ngFor=\"let detection of item?.imageUrl\">\r\n \r\n <div class=\"\">\r\n <img class=\"w-100 h-500px rounded-top\"\r\n src=\"{{environment.TraxAIchecklistCDN}}{{detection}}\" alt=\"\">\r\n <div class=\"text-center mt-3\" > {{this.checklistName}}</div> \r\n </div>\r\n </div>\r\n <div class=\"col-md-12 my-2\" *ngFor=\"let detection of item?.imagesData\">\r\n <div class=\"card-toolbar\" *ngIf=\"galleryForm.value.sourceCheckList_id==='inventorycount'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-8\">\r\n <span class=\"ms-3\" *ngIf=\"detection?.date_timestamp\">Detection Time :<span class=\"badge badge-light-primary\"> {{detection.date_timestamp}}</span></span> \r\n </div>\r\n <div class=\"col-md-4 text-end\"> \r\n <span class=\"ms-3\" *ngIf=\"detection?.car_count\">No of cars :<span class=\"badge badge-light-primary\"> {{detection.car_count}}</span></span> \r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-toolbar\" *ngIf=\"galleryForm.value.sourceCheckList_id==='numberplateinfo'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-8\">\r\n <span class=\"ms-3\" *ngIf=\"detection?.car_license_id\">Number Plate :<span class=\"badge badge-light-primary\"> {{detection.car_license_id}}</span></span> \r\n </div>\r\n <div class=\"col-md-4 text-end\"> \r\n <span class=\"ms-3\" *ngIf=\"detection?.date_timestamp\">Entry Time:<span class=\"badge badge-light-primary\"> {{detection.date_timestamp}}</span></span> \r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div class=\"card-toolbar\" *ngIf=\"galleryForm.value.sourceCheckList_id==='carsattended'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <span class=\"ms-3\" *ngIf=\"detection?.interacted_person_count\">Number of People Interacted :<span class=\"badge badge-light-primary\"> {{detection.interacted_person_count}}</span></span> \r\n </div>\r\n <div class=\"col-md-6 text-end\">\r\n <span class=\"ms-3\" *ngIf=\"detection?.car_reg_number\">Number Plate :<span class=\"badge badge-light-primary\"> {{detection?.car_reg_number}}</span></span> \r\n </div>\r\n \r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <span class=\"ms-3\" *ngIf=\"detection?.car_reg_number\">Detection Time :<span class=\"badge badge-light-primary\"> {{detection?.date_timestamp}}</span></span> \r\n </div>\r\n <div class=\"col-md-6 text-end\"> \r\n <span class=\"ms-3\" *ngIf=\"detection?.interacted_duration_in_secs\">Time spent:<span class=\"badge badge-light-primary\"> {{detection.interacted_duration_in_secs}} Mins</span></span> \r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\" *ngIf=\"galleryForm.value.sourceCheckList_id==='vehicle_check_in'\">\r\n <div class=\"row\">\r\n \r\n <div class=\"col-md-8\"> \r\n <span class=\"ms-3\" *ngIf=\"detection?.date_timestamp\">Detection Time :<span class=\"badge badge-light-primary\"> {{detection.date_timestamp}}</span></span> \r\n </div>\r\n <div class=\"col-md-4 text-end\"> \r\n <span class=\"ms-3\" *ngIf=\"detection?.date_timestamp\">Slot :<span class=\"badge badge-light-primary\"> {{detection.slot_id}}</span></span> \r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mt-2\">\r\n <img class=\"w-100 h-500px rounded-top\"\r\n src=\"{{environment.TraxAIchecklistCDN}}{{detection.path}}\" alt=\"\">\r\n <div class=\"text-center mt-3\" > {{this.checklistName}}</div> \r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n\r\n </div>\r\n <div class=\"px-10 my-5\" *ngIf=\"videoChecklist.includes(select)\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n \r\n <div class=\"my-3 mt-5\" *ngFor=\"let item of customerunattendedData\">\r\n <div class=\"row px-10 mt-5\">\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Checklist Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">: {{this.checklistName}} </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Store Name</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">: {{item.storeName}}</p>\r\n </div>\r\n </div> \r\n <ul class=\"row w-100 margin-top-side\">\r\n <li class=\"qa-heading\">\r\n \r\n </li>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngFor=\"let detection of item.imagesData\">\r\n <div class=\"row px-10 mt-5 margin-left-side\" *ngIf=\"select!='suspiciousactivity'\">\r\n <div class=\"col-md-3\" *ngIf=\"detection?.Answer\">\r\n <h3 class=\"uni-title\">Detection Status</h3>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.Answer\">\r\n <p class=\"uni-subtitle\">:<span class=\"ms-3 badge badge-light-danger\" *ngIf=\"detection?.Answer==='rejected'\">Breached</span>\r\n <span class=\"ms-3 badge badge-light-success\" *ngIf=\"detection?.Answer==='approved'\">Not-breached</span> </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Date</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\">: {{detection.date|date:'dd-MM-yyyy' }}</p>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.configTime\">\r\n <h3 class=\"uni-title\">Configured Time</h3>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.configTime\">\r\n <p class=\"uni-subtitle\">: {{detection.configTime }}</p>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.duration\">\r\n <h3 class=\"uni-title\">Duration</h3>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.duration\">\r\n <p class=\"uni-subtitle\">: {{detection.duration }} Mins</p>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.downTime\">\r\n <h3 class=\"uni-title\">Downtime</h3>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.downTime\">\r\n <p class=\"uni-subtitle\">: {{detection.downTime }} Mins <span ngbTooltip=\"Downtime may result in inaccurate data\" placement=\"top\" container=\"body\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"16\" viewBox=\"0 0 15 16\" fill=\"none\">\r\n <path d=\"M7.66667 5.33203V7.9987M7.66667 10.6654H7.67333M14.3333 7.9987C14.3333 11.6806 11.3486 14.6654 7.66667 14.6654C3.98477 14.6654 1 11.6806 1 7.9987C1 4.3168 3.98477 1.33203 7.66667 1.33203C11.3486 1.33203 14.3333 4.3168 14.3333 7.9987Z\" stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span></p>\r\n </div>\r\n </div> \r\n <div class=\"card-header border-0 min-h-45px px-0 my-0\">\r\n <h3 class=\"card-title\">\r\n <!-- <span class=\"me-3 store-title\">{{item.storeName}}</span> -->\r\n <span class=\"ms-2 badge badge-light-default\" *ngIf=\"detection?.customer_id\">Cust ID : {{detection.customer_id}}</span>\r\n <span class=\"ms-2 badge badge-light-default\" *ngIf=\"detection?.queue_id\">Queue ID : {{detection.queue_id}}</span>\r\n <span class=\"ms-2 badge badge-light-default\" *ngIf=\"detection?.optum_id\">Optom ID : {{detection.optum_id}}</span>\r\n <!-- <span class=\"ms-2 badge badge-light-default\" *ngIf=\"detection?.date\">Date : {{detection.date|date:'dd-MM-yyyy' }}</span> -->\r\n <!-- <span class=\"ms-3 badge badge-light-default\" *ngIf=\"detection?.configTime\">Inspection time : {{detection.configTime}}</span> -->\r\n <span class=\"ms-3 badge badge-light-default\" *ngIf=\"detection?.temp_id\">TempId : {{detection.temp_id}}</span>\r\n <span class=\"ms-3 badge badge-light-default\" *ngIf=\"detection?.time_spend\">Timespend : {{detection.time_spend}}Mins</span> \r\n \r\n </h3>\r\n \r\n <!-- Switch toggle -->\r\n <div class=\"card-toolbar\">\r\n <div class=\"col-md-12 text-end\">\r\n <span class=\"ms-3 badge badge-light-default\" *ngIf=\"detection?.entry_time\">Entry time : {{detection.entry_time}}</span> \r\n <span class=\"ms-3 badge badge-light-default\" *ngIf=\"detection?.exit_time\">Exit time : {{detection.exit_time}}</span> \r\n <span class=\"ms-3 badge badge-light-success\" *ngIf=\"detection?.adherence_rate\">Adherence Rate : {{detection.adherence_rate}}</span>\r\n <span class=\"ms-3 badge badge-light-primary text-capitalize\" *ngIf=\"detection?.category\"> {{detection.category}}</span>\r\n <span class=\"ms-3 badge badge-light-default\" *ngIf=\"detection?.customer_entry_time\">Entry time : {{detection.customer_entry_time}}</span>\r\n <span class=\"ms-3 badge badge-light-default\" *ngIf=\"detection?.customer_exit_time\">Exit time : {{detection.customer_exit_time}}</span> \r\n \r\n \r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n <div class=\"my-0\" *ngIf=\"select !='eyetest'\">\r\n <video controls class=\"w-100 h-450px rounded-top\"\r\n src=\"{{environment.TraxAIchecklistCDN}}{{detection.video_path}}\" alt=\"\"> \r\n </video> \r\n </div>\r\n <div class=\"my-0\" *ngIf=\"select ==='eyetest'\">\r\n <video controls class=\"w-100 h-450px rounded-top\"\r\n src=\"{{environment.EyeTestCDN}}{{detection.video_path}}\" alt=\"\"> \r\n </video> \r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"select ==='storeopenandclose'\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n <div class=\"row px-10 mt-5\">\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Checklist Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">: {{this.checklistName}} </p>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 margin-top-side\" *ngFor=\"let store of storeOpencloseView\">\r\n <div class=\" mx-8 my-8\" *ngFor=\"let item of store.imagesData\">\r\n <div class=\"row px-10 mt-5 margin-left-side \">\r\n <div class=\"col-md-3\" *ngIf=\"item?.buffer_open\">\r\n <h3 class=\"uni-title\">Buffer for Open Time :</h3>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"item?.buffer_open\">\r\n <p class=\"uni-subtitle\">: {{item.buffer_open }}</p>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"item?.buffer_close\">\r\n <h3 class=\"uni-title\">Buffer for Close Time :</h3>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"item?.buffer_close\">\r\n <p class=\"uni-subtitle\">: {{item.buffer_close }}</p>\r\n </div>\r\n <div class=\"col-md-3\" >\r\n <h3 class=\"uni-title\">Detection Status</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\">:<span class=\"ms-3 badge badge-light-danger\" *ngIf=\"item?.Flag\">Breached</span>\r\n <span class=\"ms-3 badge badge-light-success\" *ngIf=\"!item?.Flag\">Not-breached</span> </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Date</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\">: {{item.date|date:'dd-MM-yyyy' }}</p>\r\n </div>\r\n </div> \r\n <div class=\"snapcard\">\r\n <div class=\"snapheader ms-6\">\r\n {{item.storeName}}\r\n </div>\r\n <div class=\"row m-0 w-100\">\r\n <div class=\"col-6\">\r\n <div class=\"img mt-4 px-3 position-relative\" *ngIf=\"!item.openTime\">\r\n <div class=\"preview align-items-center justify-content-center d-flex flex-column\">\r\n <span>\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n \\\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n \r\n </span>\r\n <span class=\"prvtxt mt-5 textclr\">Preview not\r\n available</span>\r\n <span class=\"refreshtxt mt-2 textclr\">The selected camera\r\n is not available at the moment.</span>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"item.openTime\">\r\n <img class=\"mx-1 img-opc\"\r\n src=\"{{environment.TraxOpenclosechecklistCDN}}{{item.storeId}}/{{item.dateString|date:'dd-MM-yyyy'}}/operation_snaps/open.jpeg\"\r\n alt=\"open close snap\">\r\n <div class=\"col-12\">\r\n <div class=\"d-flex flex-stack mx-1 mt-2\">\r\n <div>\r\n <div class=\"snaptext\">Opening Snap</div>\r\n <div class=\"snaptime\">{{item.openTime}} - {{item.date}}\r\n </div>\r\n </div>\r\n \r\n <span class=\"badge badge-light-primary snapbadge\"\r\n *ngIf=\"!item?.openTimeFlag\">On Time</span>\r\n <span class=\"badge badge-light-danger snapbadge\"\r\n *ngIf=\"item?.openTimeFlag\">Late Open</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"img mt-4 px-3 position-relative\" *ngIf=\"!item.closeTime\">\r\n <div class=\"preview align-items-center justify-content-center d-flex flex-column\">\r\n <span>\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n \\\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n \r\n </span>\r\n <span class=\"prvtxt mt-5 textclr\">Preview not\r\n available</span>\r\n <span class=\"refreshtxt mt-2 textclr\">The selected camera\r\n is not available at the moment.</span>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"item.closeTime\">\r\n <img class=\"mx-1 img-opc\"\r\n src=\"{{environment.TraxOpenclosechecklistCDN}}{{item.storeId}}/{{item.dateString|date:'dd-MM-yyyy'}}/operation_snaps/close.jpeg\"\r\n alt=\"Checklist Video Player\">\r\n <div class=\"col-12\">\r\n <div class=\"d-flex flex-stack mx-1 mt-2\">\r\n <div>\r\n <div class=\"snaptext\">Closing Snap</div>\r\n <div class=\"snaptime\">{{item.closeTime}} - {{item.date}}\r\n </div>\r\n </div>\r\n <span class=\"badge badge-light-primary snapbadge\"\r\n *ngIf=\"!item?.closeTimeFlag\">On Time</span>\r\n <span class=\"badge badge-light-danger snapbadge\"\r\n *ngIf=\"item?.closeTimeFlag\">Early Close</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"boximageChecklist.includes(select)\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n <div class=\"col-md-12\" *ngFor=\"let store of queueAlertView\">\r\n <div class=\"row px-10 mt-5\" *ngIf=\"showmulti\">\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Store Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">{{store?.storeName}} | {{store?.city}},{{store?.state}},{{store?.country}} </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Checklist Name:</h3>\r\n\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">{{checklistName}}</p>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"select==='boxalert'||select==='suspiciousfootfall'||select==='drinking'||select==='bagdetection'\">\r\n <h3 class=\"uni-title\">Description:</h3>\r\n </div>\r\n <div class=\"col-md-9\" *ngIf=\"select==='boxalert'||select==='suspiciousfootfall'||select==='drinking'||select==='bagdetection'\">\r\n <p class=\"uni-subtitle\">{{checkListDescription}}</p>\r\n </div>\r\n\r\n </div> \r\n <div class=\"row m-0 w-100 \" >\r\n <div class=\"col-4 mt-2\" *ngFor=\"let item of store.imagesData\">\r\n <div class=\"card bordercolor bg-secondary mt-8\">\r\n <div class=\"text-start ms-5 mt-2 mb-5\" >\r\n <div *ngIf=\"item.zone\">\r\n <span class=\"btn btn-secondary rounded-lg p-2\">{{item.zone}}</span>\r\n </div>\r\n \r\n <div class=\"mt-3 fw-semibold\">{{ item.date_timestamp }}</div>\r\n </div>\r\n <img class=\"w-100 h-250px rounded-bottom\" (click)=\"openModel(item)\"\r\n src=\"{{environment.TraxAIchecklistCDN}}{{item.path}}\" alt=\"\"> \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <lib-pagination *ngIf=\"!viewloading && !viewnoData\" [itemsPerPage]=\"limit\" [currentPage]=\"offset\" [totalItems]=\"totalCount\"\r\n [paginationSizes]='paginationSizes' [pageSize]=\"limit\"\r\n (pageChange)=\"onPageChangeview($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </section>\r\n </div>\r\n\r\n\r\n\r\n </div>\r\n <div *ngIf=\"!showsidenav\" (click)=\"sidenav()\" class=\"backButtonleft text-center pt-1 cursor-pointer\">\r\n <svg class=\"mt-2 ms-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M9.72714 12.6365L13.3635 9.00013L9.72714 5.36377M4.63623 12.6365L8.27259 9.00013L4.63623 5.36377\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</div> \r\n\r\n<div class=\"row card mx-0 p-3 \" *ngIf=\"checkAIchecklist()&&!viewnoData&&userDetails?.role!='user'\"> \r\n <div class=\"col-md-12 text-end\">\r\n<button class=\"btn btn-sm border-primary1\" [disabled]=\"!approvalStatus\" (click)=\"appoveChecklist()\">Approve\r\n</button>\r\n</div>\r\n</div>\r\n<ng-template #zoomPopup let-model>\r\n <div class=\"p-8\">\r\n <div class=\"modal-header pt-0 ps-1 pe-0\">\r\n <div>\r\n <div class=\"text-start mt-2\">\r\n <div *ngIf=\"viewImage.zone\">\r\n <span class=\"btn btn-secondary rounded-lg p-2\">{{viewImage.zone}}</span>\r\n </div>\r\n <div *ngIf=\"viewImage.emptyBoxCount\">\r\n <span >Empty shelves : {{viewImage.emptyBoxCount}}</span>\r\n </div>\r\n \r\n <div *ngIf=\"viewImage.entry_time\">\r\n <span >Entry Time : {{viewImage.entry_time}}</span>\r\n </div>\r\n <div *ngIf=\"viewImage.exit_time\">\r\n <span >Exit Time : {{viewImage.exit_time}}</span>\r\n </div>\r\n <div *ngIf=\"viewImage.temp_id\">\r\n <span >Temp Id : {{viewImage.temp_id}}</span>\r\n </div>\r\n <div *ngIf=\"viewImage.time_spend\">\r\n <span >Time Spend : {{viewImage.time_spend}} Mins</span>\r\n </div>\r\n \r\n <div class=\"mt-2\" *ngIf=\"viewImage.threshold&&viewImage.Dwelltime\"><p>If the queue exceeds {{viewImage.threshold}} people and wait time surpasses {{viewImage.Dwelltime}} minutes, an alert will be triggered</p></div>\r\n <div class=\"mt-3 fw-semibold\">{{ viewImage.date_timestamp }}</div>\r\n </div>\r\n \r\n </div>\r\n <div data-bs-dismiss=\"modal\">\r\n <!-- <span class=\"stream fw-semibold text-nowrap me-5\" *ngIf=\"camera.height && camera.width\"> Resolution: {{camera.height}} X {{camera.width}}</span> -->\r\n <span class=\"btn btn-sm btn-icon btn-active-color-primary me-0\" (click)=\"model.dismiss()\"><svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M15 5L5 15M5 5L15 15\" stroke=\"#667085\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"viewImage.path\" class=\"mt-2 overflow-auto\">\r\n <img class=\"rounded-4 mt-5 img-popup-src w-100\" src=\"{{environment.TraxAIchecklistCDN}}{{viewImage.path}}\">\r\n </div>\r\n\r\n \r\n </div>\r\n\r\n</ng-template>", styles: [".gallery-card{padding:24px;border-radius:12px;background:#fff}.gallery-card .header{color:#101828;font-size:18px;font-weight:500;line-height:28px}.img{border-radius:10px;border:1px solid var(--Gray-500, #667085);background:var(--Gray-100, #F2F4F7);width:100%;height:230px}.prvtxt{color:var(--Gray-500, #667085);font-family:Inter;font-size:20px;font-style:normal;font-weight:700;line-height:20px;letter-spacing:-.4px}.refreshtxt{color:var(--Gray-400, #98A2B3);font-family:Inter;font-size:12px;font-style:normal;font-weight:500;line-height:18px}::ng-deep .applyBtn{display:none!important}::ng-deep .custom-height-modal .modal-dialog{max-height:80vh;height:80vh}::ng-deep .custom-height-modal .modal-content{overflow:auto;max-height:100%}:host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .md-drppicker.shown.drops-down-right{transform-origin:0 0;width:560px!important}:host::ng-deep .daterangepicker-input+.ngx-daterangepicker-material .applyBtn{display:none}:host::ng-deep .md-drppicker.drops-down-right.ltr.show-ranges.shown{top:65px!important}:host::ng-deep .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;right:-475px!important;left:unset!important;height:400px!important}:host::ng-deep .md-drppicker .btn{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}:host::ng-deep .md-drppicker .ranges ul li button{padding:12px 16px;width:160px;color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:20px;background:none;border:none;text-align:left;cursor:pointer}:host::ng-deep .md-drppicker td.active,:host::ng-deep .md-drppicker td.active:hover{background-color:#029cf4!important;border-radius:20px!important;color:var(--White, #FFF)!important;text-align:center!important;font-size:14px!important;font-weight:500!important;line-height:20px}:host::ng-deep .md-drppicker.ltr .ranges{float:left;margin-top:10px!important}:host::ng-deep .md-drppicker td.in-range{background:var(--Primary-50, #EAF8FF)}:host::ng-deep .md-drppicker .ranges ul li button.active{background:var(--Primary-50, #EAF8FF)!important;border-radius:8px!important;color:var(--Primary-700, #009BF3);font-size:14px!important;font-weight:500!important;line-height:20px!important}:host::ng-deep table th,:host::ng-deep table td{width:40px!important;height:40px!important;padding:10px 8px!important}:host::ng-deep .md-drppicker td.available.prev,:host::ng-deep .md-drppicker th.available.prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .md-drppicker td.available.next,:host::ng-deep .md-drppicker th.available.next{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep table th{border-bottom:0px solid var(--Gray-200, #EAECF0)!important;background:transparent!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:16px!important;font-weight:500!important;line-height:24px}:host::ng-deep .md-drppicker .btn.btn-default{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize;margin-right:10px!important}:host::ng-deep .md-drppicker td.available.invalid-date{text-decoration:line-through;pointer-events:none;color:#a9a9a9}:host::ng-deep .md-drppicker td.available.today:not(.invalid-date){text-decoration:unset;pointer-events:unset;color:unset}.btn-primary{line-height:18px!important}.checkbox-label{color:#344054;font-size:14px;font-weight:500;line-height:20px;cursor:pointer}.checklist-left .checklist-title{overflow:hidden;color:var(--Black, #101828)!important;text-overflow:ellipsis;font-size:18px!important;font-weight:500;line-height:28px}.checklist-left .checklist-text{overflow:hidden;color:var(--Black, #101828)!important;text-overflow:ellipsis;font-size:12px!important;font-weight:400!important;line-height:18px}.section{display:inline-block;width:600px;white-space:nowrap;outline:none!important;border:none!important;box-shadow:none!important;overflow:hidden!important;text-overflow:ellipsis!important;color:var(--Black, #101828)!important;font-size:16px!important;font-weight:500!important}.card hr{width:-webkit-fill-available}.editablecontent{color:var(--Gray-700, #344054)!important;font-size:16px!important;font-weight:400!important;line-height:24px}.rotate{transform:rotate(180deg);transition:1s}.question-left{color:var(--Gray-700, #344054)!important;font-size:16px;font-weight:400;line-height:24px}.view-all{padding:12px!important;border-radius:6px!important;background:var(--Primary-50, #EAF8FF)!important;color:var(--Primary-500, #33B5FF)!important;font-size:16px!important;font-weight:600!important;line-height:24px;text-decoration-line:underline!important}.view-questions{padding:12px!important;border-radius:6px!important;color:var(--Primary-500, #33B5FF)!important;font-size:16px!important;font-weight:600!important;line-height:24px;text-decoration-line:underline!important}.iconsize{width:110px;height:110px}.margin-left-side{margin-left:-35px}.margin-top-side{margin-top:-15px}input[type=checkbox]{width:16px!important;height:16px!important;margin:0;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:0!important;padding-top:8px;padding-right:5px}.uni-title{color:#000!important;font-size:18px!important;font-weight:600!important;line-height:28px}.uni-subtitle{color:#000!important;font-size:18px!important;font-weight:400!important;line-height:28px}.qa-heading{color:var(--Black, #101828)!important;font-size:18px!important;font-weight:700!important;line-height:28px;list-style:none}.qa-bodrer{padding:16px!important;border-radius:8px!important;border:1px solid var(--Gray-200, #EAECF0)!important;background:var(--text-primary, #FFF)!important;box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f!important}.title-ref{color:var(--Gray-900, #101828)!important;font-size:16px!important;font-weight:400!important;line-height:24px}.btn-outline-primary{border-radius:8px!important;border:1px solid var(--Primary-500, #33B5FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important;padding:calc(.7rem + 0px) calc(1.5rem + 1px)!important}.Partially{color:#000;font-size:18px!important;font-style:italic!important;font-weight:500;line-height:28px}.task-remarks{color:#000!important;font-size:18px!important;font-weight:400!important;line-height:28px}.backButtonright{border-radius:1000px!important;background:var(--text-primary, #FFF)!important;padding:12px!important;box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808!important;box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808!important;position:absolute;top:30px;right:-10px;z-index:0}.backButtonleft{border-radius:1000px!important;background:#fff;padding:14px!important;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;left:-20px;z-index:5}img.img-logo{width:100%;height:400px!important}.recap-img{width:100%;height:400px;object-fit:cover!important}.img-src{width:30%!important;height:20%!important}.dropdownselect{padding:20px 10px}.dropdownbg{width:Fill(372px) px;height:Hug(40px) px;padding:8px 16px;gap:0px;border-radius:6px 0 0;justify-content:space-between;opacity:0px;background:#eaf8ff}.detectionright{color:var(--Primary-700, #009BF3)!important;text-align:center;font-size:14px!important;font-weight:500;line-height:14px;float:right!important;mix-blend-mode:multiply}.backgroundBorder{background:#eaf8ff!important;color:#00a3ff!important;padding:12px;border-radius:8px;font-weight:500;line-height:10px}.withoutbackground{padding:8px;font-weight:500;line-height:10px}.snapcard{display:flex;padding:16px;flex-direction:column;align-items:flex-start;gap:16px;align-self:stretch;border-radius:8px;border:1px solid var(--Gray-200, #EAECF0);background:var(--White, #FFF);box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}.snapheader{color:var(--Black, #101828);font-size:16px;font-style:normal;font-weight:600;line-height:24px}.snaptext{color:var(--Gray-900, #101828);font-size:16px!important;font-style:normal;font-weight:600!important;line-height:24px}.snaptime{color:var(--Gray-900, #101828);font-size:12px!important;font-style:normal;font-weight:500!important;line-height:22px}.snapbadge{text-align:center;font-size:14px!important;font-style:normal;font-weight:500!important;line-height:20px}.btn-resize{font-size:13px!important;height:29px!important;line-height:11px!important;padding:1px!important}.preview{position:absolute;top:30%;left:14%}.w-25{width:17%!important}.w-40{width:40%!important}.usage-detection{color:var(--Primary-700, #009BF3);text-overflow:ellipsis!important;font-size:16px!important;font-style:normal;font-weight:400;line-height:16px;width:220Px}.usage-text{color:var(--Gray-700, #344054);text-overflow:ellipsis;font-size:16px;font-style:normal;font-weight:400;line-height:17px}.h-450px{object-fit:contain!important}.store-title{color:var(--Black, #101828)!important;font-size:18px;font-weight:700;line-height:28px}.img-opc{width:100%!important;height:300px!important;border-radius:12px!important}.h-900px{min-height:auto!important;max-height:2800px!important}.select-wrapper{position:relative;display:inline-block;width:100%}.placeholder-overlay{position:absolute;color:var(--Gray-500, #667085);font-family:Inter;font-size:16px!important;font-style:normal;font-weight:400;top:10px;left:15px;pointer-events:none;font-size:1.1rem;z-index:1}.flagclour{color:red}.remarksTxt{margin-top:10px;font-family:Inter;font-size:18px;font-weight:400;line-height:28px;text-align:left}.no-text-transform{text-transform:none!important}.border-val1{padding:8px 14px!important;border-radius:8px!important;border:1px solid var(--Primary-500, #33B5FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important}.font-task{color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}.border-default{padding:8px 14px!important;border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important}.font-defult-task{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}.nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.nav-item .nav-link:hover{border:none}.badge-num-primary{border-radius:16px!important;background:var(--Primary-50, #EAF8FF)!important;color:var(--Primary-700, #009BF3)!important;text-align:center;font-size:14px!important;font-style:normal;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}.badge-num-muted{border-radius:16px!important;background:var(--Primary-50, #F2F4F7)!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:14px;font-style:normal;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}.text-title{font-size:16px!important;font-weight:600!important;color:#101828!important;line-height:24px}.title-description{font-size:14px!important;font-weight:400;color:#101828!important;line-height:24px!important}.border-primary1{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:16px!important;font-weight:600;line-height:24px;text-transform:capitalize}.scroll-y{overflow-x:hidden;overflow-y:auto}.totalsize{width:18%}.view-detail{color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}.left-sidebar{position:sticky;top:0;width:33%;overflow-y:auto}.main-container{display:flex;align-items:flex-start}.right-content{flex-grow:1;width:67%}.bordercolor{border:1px solid var(--Gray-300, #D0D5DD)!important}.toastcard{border-radius:8px;background:var(--Primary-50, #EAF8FF);padding:8px 16px}.toasttext{overflow:hidden;color:var(--Primary-700, #009BF3);text-overflow:ellipsis;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.btn-outline{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d}.refreshtext{color:var(--Gray-700, #344054);font-size:14px;font-style:normal;font-weight:600;line-height:20px;text-transform:capitalize}.collage-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;height:450px;overflow-y:auto;grid-auto-rows:1fr;overflow:hidden}.collage-tile{width:100%;height:100%;overflow:hidden}.collage-tile img{width:100%;height:100%!important;border-radius:6px}\n"] }]
2809
+ args: [{ selector: 'lib-gallery', template: "<div *ngIf=\"notifyCount>0\" class=\"h-xl-100 flex-row flex-stack flex-wrap p-2\">\r\n <!-- toast card starts -->\r\n <div class=\"toastcard col-md-12 mb-4\">\r\n <div class=\"d-flex align-items-center justify-content-between w-100\">\r\n <span class=\"align-items-start\">\r\n <span class=\"toasttext d-block\"><span class=\"me-5\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"20\" viewBox=\"0 0 16 20\" fill=\"none\">\r\n <path\r\n d=\"M9.14234 2.4V1.6875C9.14234 1.03178 8.63166 0.5 7.99955 0.5C7.36744 0.5 6.85675 1.03178 6.85675 1.6875V2.4C4.21761 2.95033 2.28558 5.34649 2.28558 8.21875V8.91641C2.28558 10.6643 1.66918 12.3453 0.553532 13.6516L0.28869 13.9596C-0.0103044 14.3121 -0.0840396 14.8094 0.100307 15.2361C0.284654 15.6629 0.69281 15.9375 1.14279 15.9375H14.8563C15.3063 15.9375 15.7134 15.6629 15.8991 15.2361C16.0848 14.8094 16.0098 14.3121 15.7098 13.9596L15.4456 13.6516C14.3313 12.3453 13.7135 10.6643 13.7135 8.91641V8.21875C13.7135 7.94125 13.6952 7.66819 13.6597 7.40081C13.2676 7.54576 12.8432 7.625 12.4 7.625C10.4118 7.625 8.8 6.03001 8.8 4.0625C8.8 3.46778 8.88193 2.89289 9.14234 2.4C9.16417 2.40461 9.12061 2.39514 9.14234 2.4Z\"\r\n fill=\"#00A3FF\" />\r\n <path\r\n d=\"M6.38178 18.8061C6.81033 19.2514 7.39244 19.5 7.99955 19.5C8.57452 19.5 9.18877 19.2514 9.61732 18.8061C10.0459 18.3607 10.2851 17.7225 10.2851 17.125H5.71396C5.71396 17.7225 5.95323 18.3607 6.38178 18.8061Z\"\r\n fill=\"#00A3FF\" />\r\n <circle cx=\"13\" cy=\"3.5\" r=\"3\" fill=\"#F04438\" />\r\n </svg>\r\n </span>New Detection Found! Refresh Now to view new detection</span>\r\n </span>\r\n <button (click)=\"refreshnow()\" type=\"button\"\r\n class=\"btn-outline btn align-items-end text-nowrap ms-4 cursor-pointer\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_12165_62781)\">\r\n <path\r\n d=\"M19.1672 3.33172V8.33172M19.1672 8.33172H14.1672M19.1672 8.33172L15.3089 4.69838C14.1594 3.54817 12.6672 2.80271 11.0572 2.57434C9.44716 2.34597 7.80653 2.64706 6.38251 3.43225C4.9585 4.21744 3.82826 5.44418 3.1621 6.92761C2.49595 8.41104 2.32997 10.0708 2.68919 11.6568C3.0484 13.2427 3.91335 14.669 5.15368 15.7206C6.39401 16.7722 7.94254 17.3922 9.5659 17.4872C11.1893 17.5822 12.7995 17.147 14.154 16.2471C15.5085 15.3473 16.5339 14.0316 17.0756 12.4984\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_12165_62781\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"refreshtext ms-2\"></span> Refresh Now </button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"gallery-card po\">\r\n <div class=\"header mb-4\">Gallery</div>\r\n\r\n <form [formGroup]=\"galleryForm\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3 mb-3\">\r\n <div class=\"position-relative\">\r\n <span style=\"top: 20%;\" class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input class=\"fx-date-range form-control ps-14 z-2\" style=\"min-width: 260px !important;\"\r\n type=\"text\" matInput ngxDaterangepickerMd [drops]=\"'down'\" [opens]=\"'right'\"\r\n [alwaysShowCalendars]=\"false\" [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"false\"\r\n autocomplete=\"off\" [(ngModel)]=\"selectedDateRange\" [ngModelOptions]=\"{standalone: true}\"\r\n (datesUpdated)=\"datechange($event)\" (click)=\"resetValidation()\"\r\n (startDateChanged)=\"onStartDateChange($event)\" [isCustomDate]=\"isCustomDate\"\r\n [autoApply]=\"true\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n name=\"daterange\" [readonly]=\"true\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 mb-4\">\r\n <lib-reactive-select formControlName=\"type\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"type\" (itemChange)=\"typeChange($event)\"></lib-reactive-select>\r\n </div>\r\n <div class=\"col-md-4 mb-4\">\r\n <lib-single-select [items]=\"checklists\" [multi]=\"false\" [searchField]=\"'checkListName'\"\r\n [idField]=\"'_id'\" (selected)=\"checklistNamechange($event,false)\"\r\n [selectedValues]=\"[{checkListName:galleryForm.get('checklistName')?.value}]\"></lib-single-select>\r\n </div>\r\n <div class=\"col-md-3 mb-4\">\r\n <lib-reactive-select formControlName=\"answerType\" [isDisabled]=\"!showflag\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"answerType\"></lib-reactive-select>\r\n </div>\r\n <div class=\"col-md-2 mb-4\">\r\n\r\n <lib-reactive-select formControlName=\"filtertype\" [idField]=\"'value'\" [nameField]=\"'label'\"\r\n [data]=\"filtertype\" (itemChange)=\"filterChange($event)\"></lib-reactive-select>\r\n\r\n </div>\r\n <div class=\"col-md-3 mb-4\" *ngIf=\"galleryForm.get('filtertype')?.value ==='Clusters'\">\r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(galleryForm.get('ClusterList')?.value?.length)\">\r\n Select cluster\r\n </div>\r\n <lib-group-select [items]=\"ClusterList\" [disabled]=\"false\" [multi]=\"true\"\r\n [searchField]=\"'groupName'\" [idField]=\"'groupName'\" (selected)=\"ongroupSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('ClusterList')?.value\">\r\n </lib-group-select>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-md-3 mb-4\" *ngIf=\"galleryForm.get('filtertype')?.value ==='Teams'\">\r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(galleryForm.get('TeamsList')?.value?.length)\">\r\n Select Teams\r\n </div>\r\n <lib-group-select [items]=\"TeamsList\" [disabled]=\"false\" [multi]=\"true\"\r\n [searchField]=\"'teamName'\" [idField]=\"'teamName'\" (selected)=\"onTeamsSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('TeamsList')?.value\">\r\n </lib-group-select>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-md-3 mb-4\" *ngIf=\"galleryForm.get('filtertype')?.value ==='Clusters'\">\r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(galleryForm.get('storeList')?.value?.length)\">\r\n Select Stores\r\n </div>\r\n <lib-stores-select [items]=\"storeList\" [disabled]=\"false\" [multi]=\"true\"\r\n [searchField]=\"'storeName'\" [idField]=\"'storeId'\" (selected)=\"onStoreSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('storeList')?.value\"></lib-stores-select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 mb-4\" *ngIf=\"galleryForm.get('filtertype')?.value ==='Teams'\">\r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\" *ngIf=\"!(galleryForm.get('userList')?.value?.length)\">\r\n Select users\r\n </div>\r\n <lib-stores-select [items]=\"userList\" [disabled]=\"false\" [multi]=\"true\"\r\n [searchField]=\"'userName'\" [idField]=\"'userName'\" (selected)=\"onUserSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('userList')?.value\"></lib-stores-select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n <div class=\"d-flex justify-content-end\">\r\n <div class=\"me-5 w-100\" *ngIf=\"select === 'eyetest'\">\r\n <select class=\"form-select\" [(ngModel)]=\"category\"\r\n [ngModelOptions]=\"{standalone: true}\">\r\n <option value=\"all\">All</option>\r\n <option value=\"adults\">Adults</option>\r\n <option value=\"kids\">Kids</option>\r\n </select>\r\n </div>\r\n <div class=\"me-5 w-100\" *ngIf=\"select === 'cleaning'||select ==='scrum'\">\r\n <select class=\"form-select\" [(ngModel)]=\"category\"\r\n [ngModelOptions]=\"{standalone: true}\">\r\n <option value=\"all\">All</option>\r\n <option value=\"rejected\">Breached</option>\r\n <option value=\"approved\">Not-breached</option>\r\n </select>\r\n </div>\r\n <div class=\"me-5 w-100 text-start\" *ngIf=\"select === 'queuealert'\">\r\n <div class=\"select-wrapper\">\r\n <div class=\"placeholder-overlay\"\r\n *ngIf=\"!(galleryForm.get('zoneList')?.value?.length)\">\r\n Select Zone\r\n </div>\r\n <lib-stores-select [items]=\"zoneList\" [disabled]=\"false\" [multi]=\"true\"\r\n [searchField]=\"'value'\" [idField]=\"'key'\" (selected)=\"onzoneSelect($event)\"\r\n [selectedValues]=\"galleryForm.get('zoneList')?.value\"></lib-stores-select>\r\n </div>\r\n </div>\r\n <div class=\"me-5 w-50\" *ngIf=\"showflag\">\r\n <select class=\"form-select\" (change)=\"approveFilterChange($event)\"\r\n [(ngModel)]=\"approveFilter\" [ngModelOptions]=\"{standalone: true}\">\r\n <option value=\"all\">All</option>\r\n <option value=\"Approved\">Approved</option>\r\n <option value=\"notapproved\">Not-Approved</option>\r\n </select>\r\n </div>\r\n <span class=\"me-4 mt-3\" *ngIf=\"showflag\">\r\n <input formControlName=\"viewRedo\" change type=\"checkbox\" (click)=\"redoChanged($event)\"\r\n class=\"form-check-input cursor-pointer mt-1 me-2\" id=\"viewRedo\">\r\n <label class=\"checkbox-label\" for=\"viewRedo\">Re-do</label>\r\n </span>\r\n <span class=\"me-3 mt-3\" *ngIf=\"showflag&&galleryForm.value.type==='checklist'\">\r\n <input formControlName=\"viewFlag\" change type=\"checkbox\" (click)=\"flagChanged($event)\"\r\n class=\"form-check-input cursor-pointer mt-1 me-2\" id=\"viewFlag\">\r\n <label class=\"checkbox-label\" for=\"viewFlag\">Flag</label>\r\n </span>\r\n\r\n <a (click)=\"onSubmit()\" type=\"submit\" class=\"btn btn-primary px-4 \"><span>Apply</span></a>\r\n <!-- <a (click)=\"notify([])\" type=\"submit\" class=\"btn btn-primary px-4 \"><span>test</span></a> -->\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n </form>\r\n</div>\r\n<div class=\"card my-2\">\r\n <div class=\"row main-container my-5 \">\r\n\r\n <div [ngClass]=\"showsidenav ? 'col-md-4 left-sidebar':'d-none'\" class=\"h-650px\">\r\n <div class=\"position-relative h-650px scroll-y\">\r\n <div class=\"card-body p-5\">\r\n <div class=\"checklist-left\">\r\n <div class=\"checklist-title\">{{checklistName}}</div>\r\n <div class=\"checklist-text\">{{checkListDescription}}</div>\r\n </div>\r\n <div *ngIf=\"loading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"noData&&select === 'custom' || noData&&select === 'task'\" class=\"row mt-20\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"w-75 h-300px\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title mt-0\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this checklist</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"noData&&select !== 'custom'&&select !== 'task'\" class=\"row mt-20\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div class=\"card-body mt-20 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src mt-5 w-40\" src=\"./assets/tango/Icons/Nodata2.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No Detections found</div>\r\n <div class=\"nodata-sub\">There is no breaches for the selected period</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <section *ngIf=\"!noData && !loading\">\r\n\r\n <div *ngIf=\"select === 'custom'||select === 'task'\">\r\n <div class=\"text-end mt-10\">\r\n <!-- <button class=\"btn btn-outline w-25 me-3 btn-resize\" (click)=\"viewChecklists()\"> Reset </button> -->\r\n <button class=\"btn btn-outline w-25 me-3 btn-resize\"\r\n *ngIf=\"selectedSection.length>0||tempselectedSection.length>0\"\r\n (click)=\"onchecklistreset()\"> Reset </button>\r\n <button *ngIf=\"selectedSection.length>0||tempselectedSection.length>0\"\r\n class=\"btn btn-primary w-25 btn-resize\"\r\n (click)=\"selectsinglequestion()\">Apply</button>\r\n </div>\r\n <div class=\"my-6\" [ngClass]=\"selectedSection.length===0 ? 'view-all':'view-questions'\"\r\n style=\"cursor: pointer;\" (click)=\"onchecklistreset()\">\r\n View All Answers\r\n </div>\r\n <div class=\"mx-2\" *ngFor=\"let section of checklistData; let i=index;\">\r\n <div class=\"d-flex align-items-center justify-content-between mt-4\"\r\n style=\"cursor: pointer;\" (click)=\"accordian(i)\">\r\n <div class=\"fs-4 fw-bold section\" *ngIf=\"galleryForm.value.type==='checklist'\">\r\n {{section.sectionName}}</div>\r\n <hr class=\"mx-2\">\r\n <svg class=\"cursor-pointer\" [ngClass]=\"{'rotate' : show !== i}\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"25\" height=\"25\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n <div *ngIf=\"show===i\" class=\"question-left\">\r\n <div cdkDropList [cdkDropListData]=\"section.questions\">\r\n <div *ngFor=\"let question of section.questions;let j=index;\"\r\n class=\"d-flex my-2 q-btn\" cdkDrag>\r\n <input id=\"label\" [(ngModel)]=\"question.checked\"\r\n (click)=\"selectedQuestion($event,section,question)\"\r\n class=\"form-check-input cursor-pointer mt-2 me-4\" type=\"checkbox\">\r\n <div class=\"editablecontent\" [ngClass]=\"question?.checked ? 'view-all':''\"\r\n style=\"cursor: pointer;\">\r\n {{question.qno}} . {{question.qname}}\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- </div> -->\r\n <div *ngIf=\"combinedChecklist.includes(select)\">\r\n <div class=\"text-end mt-10\">\r\n <button class=\"btn btn-outline w-25 me-3 btn-resize\" (click)=\"onreset()\"> Reset\r\n </button>\r\n <button class=\"btn btn-primary w-25 btn-resize\" (click)=\"onview()\">Apply</button>\r\n </div>\r\n <div class=\"dropdownselect h-900px scroll-y\">\r\n <div class=\"d-flex justify-content-left \"\r\n [ngClass]=\"selectAll ? 'backgroundBorder':'withoutbackground'\">\r\n <input class=\"form-check-input cursor-pointer me-4\" type=\"checkbox\"\r\n [(ngModel)]=\"selectAll\" (click)=\"selectAllStore($event)\"> <span\r\n [ngClass]=\"selectAll ? 'usage-detection':'usage-text'\">Select All</span>\r\n </div>\r\n <!-- dropdownbg -->\r\n <div class=\"my-4\" *ngFor=\"let list of mobileusageDataList;let i=index\">\r\n <div (change)=\"updateCheck($event,list)\"\r\n [ngClass]=\"list.checked ? 'backgroundBorder':'withoutbackground'\">\r\n <input id=\"label{{i}}\" class=\"form-check-input cursor-pointer me-4\"\r\n type=\"checkbox\" [(ngModel)]=\"list.checked\">\r\n <label for=\"label{{i}}\"\r\n [ngClass]=\"list.checked ? 'usage-detection':'usage-text'\">{{list?.storeName}}</label>\r\n <span class=\"badge badge-light-primary detectionright\"\r\n *ngIf=\"list.detection\">{{list.detection}} Detections</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n <div *ngIf=\"showsidenav\" (click)=\"sidenav()\" class=\"backButtonright text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M11 17L6 12L11 7M18 17L13 12L18 7\" stroke=\"#101828\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n [ngClass]=\"showsidenav ? 'col-md-8 border border-bottom-0 border-top-0 border-left border-5 right-sidebar':'col-md-12'\">\r\n <div class=\"position-relative \">\r\n <div class=\"card-header border-0 px-0 my-0\"\r\n *ngIf=\"(select === 'custom' || select === 'task'||select === 'cleaning'||select ==='scrum'||select ==='storeopenandclose'||select ==='inventorycount'||select ==='carsattended'||select ==='numberplateinfo') && !viewloading && !viewnoData\">\r\n <h3></h3>\r\n <!-- Switch toggle -->\r\n <div class=\"card-toolbar\" *ngIf=\"!galleryForm.value.viewRedo\">\r\n <div class=\"me-4\" *ngIf=\"showsingle&&select ==='custom'\" >\r\n <button [disabled]=\"selectedUsers.length==0&&selectedStores.length==0\" (click)=\"createMultipleTask('task')\"\r\n class=\"btn btn-primary form-control no-text-transform\" >Create Task</button>\r\n \r\n </div>\r\n <div class=\"me-4\" *ngIf=\"showsingle&&select ==='custom'\" >\r\n <button class=\"btn btn-sm btn-default border-default me-3\" [disabled]=\"selectedUsers.length==0&&selectedStores.length==0\" (click)=\"createMultipleTask('redo')\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_6004_11734)\">\r\n <path d=\"M19.1693 3.33331V8.33332M19.1693 8.33332H14.1693M19.1693 8.33332L15.3026 4.69998C14.407 3.80391 13.299 3.14932 12.0819 2.79729C10.8649 2.44527 9.57853 2.40727 8.34284 2.68686C7.10716 2.96645 5.96244 3.55451 5.01549 4.39616C4.06855 5.23782 3.35024 6.30564 2.9276 7.49998M0.835938 16.6666V11.6666M0.835938 11.6666H5.83594M0.835938 11.6666L4.7026 15.3C5.59823 16.1961 6.70625 16.8506 7.92328 17.2027C9.14031 17.5547 10.4267 17.5927 11.6624 17.3131C12.898 17.0335 14.0428 16.4455 14.9897 15.6038C15.9367 14.7621 16.655 13.6943 17.0776 12.5\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_6004_11734\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span class=\"ms-2 font-defult-task\">Redo</span>\r\n </button>\r\n \r\n </div>\r\n <div class=\"position-relative cursor-pointer me-10\">\r\n <div class=\" btn btn-primary form-control no-text-transform\" (click)=\"exportDet($event)\">\r\n {{ exportLabel }} <!-- Bind label text here -->\r\n </div>\r\n <div *ngIf=\"exportShow\"\r\n class=\"card py-2 position-absolute productdrop top-10 w-150px end-0 z-1\">\r\n <ul class=\"list-unstyled mb-2\">\r\n <li class=\"cursor-pointer py-4 checkbox-label mx-2\"\r\n *ngIf=\"pdfExportTypes.includes(select)\" type=\"button\"\r\n (click)=\"setExportAsPPT('Export as PDF','pdf')\">\r\n Export as PDF\r\n </li>\r\n <li class=\" cursor-pointer checkbox-label py-4 mx-2\"\r\n *ngIf=\"csvExportTypes.includes(select)\" type=\"button\"\r\n (click)=\"setExportAsPPT('Export as CSV','csv')\">\r\n Export as CSV\r\n </li>\r\n <li *ngIf=\"selectedSection.length>0||select === 'cleaning'||select ==='scrum'||select ==='storeopenandclose'||select ==='inventorycount'||select ==='carsattended'||select ==='numberplateinfo'\"\r\n class=\" cursor-pointer checkbox-label py-4 mx-2\" type=\"button\"\r\n (click)=\"setExportAsPPT('Export as PPT','ppt')\">\r\n Export as PPT\r\n </li>\r\n <li *ngIf=\"selectedSection.length>0||select === 'cleaning'||select ==='scrum'||select ==='storeopenandclose'\"\r\n class=\"cursor-pointer checkbox-label py-4 mx-2\" type=\"button\"\r\n (click)=\"setExportAsPPT('Export as ZIP','zipfiles')\">\r\n Export as ZIP\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-body p-0\">\r\n <div>\r\n <div *ngIf=\"viewloading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"viewnoData&&select !== 'custom'&&select !== 'task'\" class=\"row mt-20\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div\r\n class=\"card-body mt-20 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src mt-5 w-40\" src=\"./assets/tango/Icons/Nodata2.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No Detections found</div>\r\n <div class=\"nodata-sub\">There is no breaches for the selected period</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"viewnoData&&select === 'custom' || viewnoData&&select === 'task'\" class=\"row mt-20\">\r\n <div class=\"col-lg-12 mt-20 mb-3\">\r\n <div\r\n class=\"card-body mt-20 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src mt-5 w-40\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this checklist</div>\r\n </div>\r\n </div>\r\n </div>\r\n <section *ngIf=\"!viewloading && !viewnoData\">\r\n <div *ngIf=\"select==='custom'||select==='task' \">\r\n <div *ngIf=\"showsingle\" class=\"qa-heading m-3 mx-11\">\r\n {{this.selectedSection[0]?.questions[0]}}</div>\r\n <div *ngIf=\"showsingle&&showfilter\">\r\n <ul\r\n class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap mx-10\">\r\n <li class=\"nav-item\" *ngFor=\"let item of answerFilter\">\r\n <a (click)=\"taskTab(item)\"\r\n [ngClass]=\"galleryForm.value.filter === item.key ? 'active' : ''\"\r\n class=\"nav-link cursor-pointer no-border me-3\">\r\n {{item.key}}<span class=\"mx-2 \"\r\n [ngClass]=\"galleryForm.value.filter === item.key ? 'badge-num-primary' :'badge-num-muted'\">{{item.count}}</span>\r\n </a>\r\n </li>\r\n\r\n </ul>\r\n\r\n </div>\r\n\r\n <div *ngFor=\"let checklist of viewChecklistsData?.checklistAnswers\">\r\n\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''&&showmulti\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n\r\n\r\n <div class=\"row px-10 mt-5\" *ngIf=\"showmulti\">\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Store Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">{{checklist?.storeProfile?.storeName}} </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\" *ngIf=\"galleryForm.value.type==='checklist'\">Checklist\r\n Name:</h3>\r\n <h3 class=\"uni-title\" *ngIf=\"galleryForm.value.type==='task'\">Task Name:\r\n </h3>\r\n\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">{{checklist?.checklistInfo?.checklistName}}</p>\r\n </div>\r\n\r\n <ng-container>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">State & Country :</h3>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <p class=\"uni-subtitle\">{{checklist?.storeProfile?.state}}\r\n {{checklist?.storeProfile?.Country}}</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <h3 class=\"uni-title\">Duration :</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\"> {{checklist?.checklistInfo?.duration}}</p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">No. of Questions :</h3>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <p class=\"uni-subtitle\">{{checklist?.checklistInfo?.noofQuestions}}</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <h3 class=\"uni-title\">Date :</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\"> {{checklist?.checklistInfo?.date}}</p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Submitted By :</h3>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <p class=\"uni-subtitle\">{{checklist?.checklistInfo?.submittedBy}}</p>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <h3 class=\"uni-title\">Time :</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\"> {{checklist?.checklistInfo?.time}}</p>\r\n </div>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"row px-10\">\r\n\r\n <div *ngFor=\"let section of checklist.questionAnswer\">\r\n <div class=\"qa-bodrer my-5\" *ngFor=\"let question of section.questions\">\r\n <div class=\"row\" *ngIf=\"question.redo||question.redo===false\">\r\n <div class=\"view-detail col-12 text-end cursor-pointer\"\r\n (click)=\"ViewInDetails(question,checklist?.checklistInfo,checklist?.storeProfile,section)\">\r\n View in detail\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M15 10.8333V15.8333C15 16.2754 14.8244 16.6993 14.5118 17.0118C14.1993 17.3244 13.7754 17.5 13.3333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V6.66667C2.5 6.22464 2.67559 5.80072 2.98816 5.48816C3.30072 5.17559 3.72464 5 4.16667 5H9.16667M12.5 2.5H17.5M17.5 2.5V7.5M17.5 2.5L8.33333 11.6667\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row w-100 m-3\" *ngIf=\"showsingle\">\r\n <div class=\"col-md-1\" style=\"width:3.3333%\" >\r\n <input id=\"label\" [(ngModel)]=\"question.checked\" [disabled]=\"question.redo\" (click)=\"selectedmultiTask($event,checklist,question,checklist?.checklistInfo,section)\" class=\"form-check-input cursor-pointer mt-2 me-4\" type=\"checkbox\" > \r\n </div>\r\n <div class=\"col-md-3 text-title\">\r\n {{checklist?.storeProfile?.storeName}}\r\n </div>\r\n <div class=\"col-md-8 text-end title-description\">\r\n Submitted by : {{checklist?.checklistInfo?.submittedBy}} On : {{checklist?.checklistInfo?.date}} {{checklist?.checklistInfo?.time}}\r\n </div>\r\n </div>\r\n <ul>\r\n <li *ngIf=\"showmulti\" class=\"qa-heading\">{{question?.qno}}.\r\n {{question?.qname}}</li>\r\n <div class=\"Partially my-3 px-5\"\r\n *ngIf=\"question?.answerType==='descriptive'\">\r\n <div *ngFor=\"let item of question.userAnswer;let i=index\">\r\n <!-- checklist type with single image but inside collage-grid -->\r\n <div class=\"col-md-6\">\r\n <div *ngIf=\"galleryForm.value.type === 'checklist' \r\n && question.questionReferenceImage \r\n && question.questionReferenceImage !== ''\">\r\n\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n\r\n <div class=\"collage-grid\">\r\n\r\n <div class=\"collage-tile\">\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + question.questionReferenceImage,0)\"\r\n [src]=\"environment.TraxAnswerCDN + question.questionReferenceImage\"\r\n alt=\"\" >\r\n </div>\r\n </div>\r\n </div> \r\n <!-- </div>\r\n <div class=\"col-md-6\"> -->\r\n <!-- Question Reference Images -->\r\n <ng-container\r\n *ngIf=\"galleryForm.value.type === 'task' && hasQuestionReferenceImages(question)\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <div class=\"collage-grid\"\r\n [ngStyle]=\"{ 'grid-template-columns': getGridColumns(question.questionReferenceImage.length) }\">\r\n <ng-container\r\n *ngFor=\"let item of question.questionReferenceImage;let i=index\">\r\n <div class=\"collage-tile\"\r\n *ngIf=\"isValidImage(item)\">\r\n <img class=\"cursor-pointer\" (click)=\"openImagePopup(getRefImageUrls(question.questionReferenceImage),getRefImageNames(question.questionReferenceImage),i)\"\r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"Reference image\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <span class=\"mt-2\"\r\n [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">\r\n Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"Partially my-3 px-5\"\r\n *ngIf=\"question?.answerType==='linearscale'\">\r\n <div *ngFor=\"let item of question.userAnswer;let i=index\">\r\n <div class=\"col-md-6\"\r\n *ngIf=\"galleryForm.value.type==='checklist'&&question.questionReferenceImage!==''&&question.questionReferenceImage!==null\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + question.questionReferenceImage,0)\" \r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <!-- Question Reference Images -->\r\n <ng-container\r\n *ngIf=\"galleryForm.value.type === 'task' && hasQuestionReferenceImages(question)\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <div class=\"collage-grid\"\r\n [ngStyle]=\"{ 'grid-template-columns': getGridColumns(question.questionReferenceImage.length) }\">\r\n <ng-container\r\n *ngFor=\"let item of question.questionReferenceImage;let i=index\">\r\n <div class=\"collage-tile\"\r\n *ngIf=\"isValidImage(item)\">\r\n <img class=\"cursor-pointer\" (click)=\"openImagePopup(getRefImageUrls(question.questionReferenceImage),getRefImageNames(question.questionReferenceImage),i)\"\r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"Reference image\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <!-- <br> -->\r\n <span class=\"mt-4\"\r\n [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">\r\n Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n <div class=\"Partially my-3 px-5\"\r\n *ngIf=\"question?.answerType==='time'\">\r\n <div *ngFor=\"let item of question.userAnswer;let i=index\">\r\n <div class=\"col-md-6\"\r\n *ngIf=\"galleryForm.value.type==='checklist'&&question.questionReferenceImage!==''&&question.questionReferenceImage!==null\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + question.questionReferenceImage,0)\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <!-- Question Reference Images -->\r\n <ng-container\r\n *ngIf=\"galleryForm.value.type === 'task' && hasQuestionReferenceImages(question)\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <div class=\"collage-grid\"\r\n [ngStyle]=\"{ 'grid-template-columns': getGridColumns(question.questionReferenceImage.length) }\">\r\n <ng-container\r\n *ngFor=\"let item of question.questionReferenceImage;let i=index\">\r\n <div class=\"collage-tile\"\r\n *ngIf=\"isValidImage(item)\">\r\n <img class=\"cursor-pointer\" (click)=\"openImagePopup(getRefImageUrls(question.questionReferenceImage),getRefImageNames(question.questionReferenceImage),i)\"\r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"Reference image\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <br>\r\n <span class=\"mt-4\"\r\n [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">\r\n Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"Partially my-3 px-5\"\r\n *ngIf=\"question?.answerType==='date'\">\r\n <div *ngFor=\"let item of question.userAnswer;let i=index\">\r\n <div class=\"col-md-6\"\r\n *ngIf=\"galleryForm.value.type==='checklist'&&question.questionReferenceImage!==''&&question.questionReferenceImage!==null\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + question.questionReferenceImage,0)\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\">\r\n <!-- Question Reference Images -->\r\n <ng-container\r\n *ngIf=\"galleryForm.value.type === 'task' && hasQuestionReferenceImages(question)\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <div class=\"collage-grid\"\r\n [ngStyle]=\"{ 'grid-template-columns': getGridColumns(question.questionReferenceImage.length) }\">\r\n <ng-container\r\n *ngFor=\"let item of question.questionReferenceImage;let i=index\">\r\n <div class=\"collage-tile\"\r\n *ngIf=\"isValidImage(item)\">\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getRefImageUrls(question.questionReferenceImage),getRefImageNames(question.questionReferenceImage),i)\"\r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"Reference image\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <br>\r\n <span class=\"mt-4\"\r\n [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">\r\n Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div class=\"Partially my-3 px-5\"\r\n *ngIf=\"question?.answerType==='yes/no'\">\r\n <div *ngFor=\"let item of question.userAnswer;let i=index\">\r\n <div class=\"col-md-6\"\r\n *ngIf=\"galleryForm.value.type==='checklist'&&question.questionReferenceImage!==''&&question.questionReferenceImage!==null\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + question.questionReferenceImage,0)\"\r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <br\r\n *ngIf=\"galleryForm.value.type==='checklist'&&question.questionReferenceImage!==''&&question.questionReferenceImage!==null\">\r\n <div class=\"col-md-6\">\r\n <!-- Question Reference Images -->\r\n <ng-container\r\n *ngIf=\"galleryForm.value.type === 'task' && hasQuestionReferenceImages(question)\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <div class=\"collage-grid\"\r\n [ngStyle]=\"{ 'grid-template-columns': getGridColumns(question.questionReferenceImage.length) }\">\r\n <ng-container\r\n *ngFor=\"let item of question.questionReferenceImage;let i=index\">\r\n <div class=\"collage-tile\"\r\n *ngIf=\"isValidImage(item)\">\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getRefImageUrls(question.questionReferenceImage),getRefImageNames(question.questionReferenceImage),i)\"\r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"Reference image\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <span class=\"mt-4\"\r\n [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"row\"\r\n *ngIf=\"item.validation&&item.validationAnswer!==''\">\r\n <div class=\"col-md-6\" *ngIf=\"item.referenceImage!==''\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + item.referenceImage,0)\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div\r\n [ngClass]=\"item.validationType==='Capture Image'?'col-md-6':'col-md-12'\">\r\n <div class=\"title-ref my-3\"\r\n *ngIf=\"item.validationType==='Capture Image'||item.validationType==='Capture Video'\">\r\n Validation Answer</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + item.validationAnswer,0)\"\r\n *ngIf=\"item.validationType==='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <div class=\"position-relative w-100 h-450px p-3\" *ngIf=\"item.validationType === 'Capture Video'\">\r\n <video controls class=\"w-100 h-100\" [src]=\"environment.TraxAnswerCDN + item.validationAnswer\">\r\n </video>\r\n\r\n <span class=\"position-absolute top-0 end-0 m-3 cursor-pointer\">\r\n <svg (click)=\"downloadVideo(item.validationAnswer)\"\r\n title=\"Download Video\" id=\"download-icon\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"icon-overlay\">\r\n <g filter=\"url(#filter0_d_3822_19479)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\"></rect>\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\"></rect>\r\n <path\r\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_3822_19479\" x=\"0\" y=\"0\" width=\"44\" height=\"44\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood>\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"></feColorMatrix>\r\n <feOffset dy=\"1\"></feOffset>\r\n <feGaussianBlur stdDeviation=\"1\"></feGaussianBlur>\r\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\">\r\n </feColorMatrix>\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_3822_19479\"></feBlend>\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_3822_19479\" result=\"shape\"></feBlend>\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n</div>\r\n </div>\r\n <span class=\"remarksTxt\"\r\n *ngIf=\"item.validationType==='Descriptive Answer'\">Validation\r\n Answer :{{item.validationAnswer}}</span>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">\r\n Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"Partially my-3 px-5\"\r\n *ngIf=\"question?.answerType==='multiplechoicesingle'\">\r\n\r\n <div class=\"col-md-6\"\r\n *ngIf=\"galleryForm.value.type==='checklist'&&question.questionReferenceImage!==null&&question.questionReferenceImage!==''&&question.questionReferenceImage!==undefined\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + question.questionReferenceImage,0)\" \r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n\r\n <div class=\"col-md-6\">\r\n <!-- Question Reference Images -->\r\n <ng-container\r\n *ngIf=\"galleryForm.value.type === 'task' && hasQuestionReferenceImages(question)\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <div class=\"collage-grid\"\r\n [ngStyle]=\"{ 'grid-template-columns': getGridColumns(question.questionReferenceImage.length) }\">\r\n <ng-container\r\n *ngFor=\"let item of question.questionReferenceImage;let i=index\">\r\n <div class=\"collage-tile\"\r\n *ngIf=\"isValidImage(item)\">\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getRefImageUrls(question.questionReferenceImage),getRefImageNames(question.questionReferenceImage),i)\"\r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"Reference image\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div *ngFor=\"let item of question.userAnswer;let i=index\">\r\n \r\n <span class=\"mt-2\"\r\n [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"row\">\r\n <div class=\"col-md-6\"\r\n *ngIf=\"item.referenceImage!==null&&item.referenceImage!==''&&galleryForm.value.type==='checklist'\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + item.referenceImage,0)\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\" *ngIf=\"galleryForm.value.type === 'task'\">\r\n <div class=\"title-ref my-3\"\r\n *ngIf=\"hasReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n\r\n <div class=\"collage-grid\"\r\n *ngIf=\"hasReferenceImages(question)\">\r\n <ng-container\r\n *ngFor=\"let answer of question.answers\">\r\n <ng-container\r\n *ngIf=\"answer.referenceImage?.length\">\r\n <div class=\"collage-tile\"\r\n *ngFor=\"let item of answer.referenceImage;let i=index\">\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getRefImageUrls(answer.referenceImage),getRefImageNames(answer.referenceImage),i)\"\r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"\" />\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n \r\n \r\n \r\n <div [ngClass]=\"item.validationType==='Capture Image'?'col-md-6':'col-md-12'\"\r\n *ngIf=\"item.validation&&item.validationAnswer!==''\">\r\n <div class=\"title-ref my-3\"\r\n *ngIf=\"item.validationType==='Capture Image'||item.validationType==='Capture Video'\">\r\n Validation Answer</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + item.validationAnswer,0)\" \r\n *ngIf=\"item.validationType==='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n\r\n <div class=\"position-relative w-100 h-450px p-3\" *ngIf=\"item.validationType === 'Capture Video'\">\r\n <video controls class=\"w-100 h-100\" [src]=\"environment.TraxAnswerCDN + item.validationAnswer\">\r\n </video>\r\n\r\n <span class=\"position-absolute top-0 end-0 m-3 cursor-pointer\">\r\n <svg (click)=\"downloadVideo(item.validationAnswer)\"\r\n title=\"Download Video\" id=\"download-icon\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"icon-overlay\">\r\n <g filter=\"url(#filter0_d_3822_19479)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\"></rect>\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\"></rect>\r\n <path\r\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_3822_19479\" x=\"0\" y=\"0\" width=\"44\" height=\"44\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood>\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"></feColorMatrix>\r\n <feOffset dy=\"1\"></feOffset>\r\n <feGaussianBlur stdDeviation=\"1\"></feGaussianBlur>\r\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\">\r\n </feColorMatrix>\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_3822_19479\"></feBlend>\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_3822_19479\" result=\"shape\"></feBlend>\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n</div>\r\n\r\n <span\r\n *ngIf=\"item.validationType==='Descriptive Answer'\"\r\n [ngClass]=\"item.sopFlag ? 'flagclour':''\">Validation\r\n Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">\r\n Remarks : {{question.remarks}}</div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n <div class=\"row\" *ngIf=\"question?.answerType==='image'\">\r\n \r\n <div *ngIf=\"galleryForm.value.type === 'task' && (hasReferenceImages(question) || hasChecklistReferenceImages(question))\" class=\"col-md-6\">\r\n <div class=\"title-ref my-3\"\r\n *ngIf=\"hasReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n\r\n <div class=\"collage-grid\"\r\n *ngIf=\"hasReferenceImages(question)\">\r\n <ng-container\r\n *ngFor=\"let answer of question.answers\">\r\n <ng-container\r\n *ngIf=\"answer.referenceImage?.length\">\r\n <div class=\"collage-tile\"\r\n *ngFor=\"let item of answer.referenceImage;let i=index\">\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getRefImageUrls(answer.referenceImage),getRefImageNames(answer.referenceImage),i)\"\r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"\" />\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- For Checklist Type -->\r\n <div *ngIf=\"galleryForm.value.type === 'checklist'&& (hasReferenceImages(question) || hasChecklistReferenceImages(question))\" class=\"col-md-6\">\r\n <div class=\"title-ref my-3\"\r\n *ngIf=\"hasChecklistReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n\r\n <div class=\"collage-grid\"\r\n *ngIf=\"hasChecklistReferenceImages(question)\">\r\n <ng-container\r\n *ngFor=\"let answer of question.answers;let i=index\">\r\n <div class=\"collage-tile\"\r\n *ngIf=\"answer.referenceImage\">\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getRefchecklistImageUrls(question.answers),getRefchecklistImageNames(question.answers),i)\"\r\n [src]=\"environment.TraxAnswerCDN + answer.referenceImage\"\r\n alt=\"\" />\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n \r\n\r\n <div\r\n [ngClass]=\"hasReferenceImages(question) || hasChecklistReferenceImages(question) ? 'col-md-6' : 'col-md-6'\">\r\n <div class=\"row\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <div class=\"collage-grid\" [ngStyle]=\"{'grid-template-columns': getGridColumns(question.userAnswer.length),\r\n 'grid-auto-rows': getGridRowHeight(question.userAnswer.length)}\">\r\n <div *ngFor=\"let item of question.userAnswer;let i = index\"\r\n class=\"collage-tile\">\r\n\r\n\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getImageUrls(question.userAnswer),getImageNames(question.userAnswer),i)\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\"\r\n alt=\"\">\r\n\r\n <div [ngClass]=\"item.validationType==='Capture Image'?'col-md-6 mt-2':'col-md-12 mt-2'\"\r\n *ngIf=\"item.validation&&item.validationAnswer!==''\">\r\n <div class=\"title-ref my-3\"\r\n *ngIf=\"item.validationType==='Capture Image'||item.validationType==='Capture Video'\">\r\n Validation Answer</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + item.validationAnswer,0)\" \r\n *ngIf=\"item.validationType==='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <div class=\"position-relative w-100 h-450px p-3\" *ngIf=\"item.validationType === 'Capture Video'\">\r\n <video controls class=\"w-100 h-100\" [src]=\"environment.TraxAnswerCDN + item.validationAnswer\">\r\n </video>\r\n\r\n <span class=\"position-absolute top-0 end-0 m-3 cursor-pointer\">\r\n <svg (click)=\"downloadVideo(item.validationAnswer)\"\r\n title=\"Download Video\" id=\"download-icon\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"icon-overlay\">\r\n <g filter=\"url(#filter0_d_3822_19479)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\"></rect>\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\"></rect>\r\n <path\r\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_3822_19479\" x=\"0\" y=\"0\" width=\"44\" height=\"44\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood>\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"></feColorMatrix>\r\n <feOffset dy=\"1\"></feOffset>\r\n <feGaussianBlur stdDeviation=\"1\"></feGaussianBlur>\r\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\">\r\n </feColorMatrix>\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_3822_19479\"></feBlend>\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_3822_19479\" result=\"shape\"></feBlend>\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n</div>\r\n <span\r\n *ngIf=\"item.validationType==='Descriptive Answer'\"\r\n [ngClass]=\"item.sopFlag ? 'flagclour':''\">Validation\r\n Answer :\r\n {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">\r\n Remarks : {{question.remarks}}</div>\r\n \r\n </div>\r\n\r\n\r\n\r\n <div class=\"row px-5\"\r\n *ngIf=\"question?.answerType==='multiplechoicemultiple'\">\r\n <div class=\"col-md-6\"\r\n *ngIf=\"galleryForm.value.type==='checklist'&&question.questionReferenceImage!==null&&question.questionReferenceImage!==''&&question.questionReferenceImage!==undefined\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + question.questionReferenceImage,0)\" \r\n src=\"{{environment.TraxAnswerCDN}}{{question.questionReferenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\" *ngIf=\"galleryForm.value.type === 'task' && hasQuestionReferenceImages(question)\">\r\n <!-- Question Reference Images -->\r\n <ng-container\r\n *ngIf=\"galleryForm.value.type === 'task' && hasQuestionReferenceImages(question)\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <div class=\"collage-grid\"\r\n [ngStyle]=\"{ 'grid-template-columns': getGridColumns(question.questionReferenceImage.length) }\">\r\n <ng-container\r\n *ngFor=\"let item of question.questionReferenceImage;let i=index\">\r\n <div class=\"collage-tile\"\r\n *ngIf=\"isValidImage(item)\">\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getRefImageUrls(question.questionReferenceImage),getRefImageNames(question.questionReferenceImage),i)\"\r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"Reference image\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"Partially my-3 px-5\"\r\n *ngFor=\"let item of question.userAnswer\">\r\n <span class=\"mt-3\"\r\n [ngClass]=\"item.sopFlag ? 'flagclour':''\">{{item.answer}}</span>\r\n <div class=\"row\">\r\n <div class=\"col-md-6\"\r\n *ngIf=\"item.referenceImage!==null&&item.referenceImage!==''&&galleryForm.value.type==='checklist'\">\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + item.referenceImage,0)\" \r\n src=\"{{environment.TraxAnswerCDN}}{{item.referenceImage}}\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"col-md-6\" *ngIf=\"galleryForm.value.type === 'task'\">\r\n \r\n <div class=\"title-ref my-3\"\r\n *ngIf=\"hasReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n\r\n <div class=\"collage-grid\"\r\n *ngIf=\"hasReferenceImages(question)\">\r\n <ng-container\r\n *ngFor=\"let answer of question.answers\">\r\n <ng-container\r\n *ngIf=\"answer.referenceImage?.length\">\r\n <div class=\"collage-tile\"\r\n *ngFor=\"let item of answer.referenceImage;let i=index\">\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getRefImageUrls(answer.referenceImage),getRefImageNames(answer.referenceImage),i)\"\r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"\" />\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"item.validationType==='Capture Image'?'col-md-6':'col-md-12'\"\r\n *ngIf=\"item.validation&&item.validationAnswer&&item.validationAnswer!==''\">\r\n <div class=\"title-ref my-3\"\r\n *ngIf=\"item.validationType==='Capture Image'||item.validationType==='Capture Video'\">\r\n Validation Answer</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + item.validationAnswer,0)\" \r\n *ngIf=\"item.validationType==='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <div class=\"position-relative w-100 h-450px p-3\" *ngIf=\"item.validationType === 'Capture Video'\">\r\n <video controls class=\"w-100 h-100\" [src]=\"environment.TraxAnswerCDN + item.validationAnswer\">\r\n </video>\r\n\r\n <span class=\"position-absolute top-0 end-0 m-3 cursor-pointer\">\r\n <svg (click)=\"downloadVideo(item.validationAnswer)\"\r\n title=\"Download Video\" id=\"download-icon\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"icon-overlay\">\r\n <g filter=\"url(#filter0_d_3822_19479)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\"></rect>\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\"></rect>\r\n <path\r\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_3822_19479\" x=\"0\" y=\"0\" width=\"44\" height=\"44\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood>\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"></feColorMatrix>\r\n <feOffset dy=\"1\"></feOffset>\r\n <feGaussianBlur stdDeviation=\"1\"></feGaussianBlur>\r\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\">\r\n </feColorMatrix>\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_3822_19479\"></feBlend>\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_3822_19479\" result=\"shape\"></feBlend>\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n</div>\r\n <span\r\n *ngIf=\"item.validationType==='Descriptive Answer'\"\r\n [ngClass]=\"item.sopFlag ? 'flagclour':''\">Validation\r\n Answer : {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n \r\n</div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">\r\n Remarks : {{question.remarks}}</div>\r\n \r\n</div>\r\n\r\n\r\n\r\n <div class=\"row px-5\"\r\n *ngIf=\"question?.answerType==='descriptiveImage'\">\r\n \r\n <div *ngIf=\"galleryForm.value.type === 'task' && (hasReferenceImages(question) || hasChecklistReferenceImages(question))\" class=\"col-md-6\">\r\n <div class=\"title-ref my-3\"\r\n *ngIf=\"hasReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n\r\n <div class=\"collage-grid\"\r\n *ngIf=\"hasReferenceImages(question)\">\r\n <ng-container\r\n *ngFor=\"let answer of question.answers\">\r\n <ng-container\r\n *ngIf=\"answer.referenceImage?.length\">\r\n <div class=\"collage-tile\"\r\n *ngFor=\"let item of answer.referenceImage;let i=index\">\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getRefImageUrls(answer.referenceImage),getRefImageNames(answer.referenceImage),i)\"\r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"\" />\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- For Checklist Type -->\r\n <div *ngIf=\"galleryForm.value.type === 'checklist' && (hasReferenceImages(question) || hasChecklistReferenceImages(question))\" class=\"col-md-6\">\r\n <div class=\"title-ref my-3\"\r\n *ngIf=\"hasChecklistReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n\r\n <div class=\"collage-grid\"\r\n *ngIf=\"hasChecklistReferenceImages(question)\">\r\n <ng-container\r\n *ngFor=\"let answer of question.answers;let i=index;\">\r\n <div class=\"collage-tile\"\r\n *ngIf=\"answer.referenceImage\">\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getRefchecklistImageUrls(question.answers),getRefchecklistImageNames(question.answers),i)\"\r\n [src]=\"environment.TraxAnswerCDN + answer.referenceImage\"\r\n alt=\"\" />\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n \r\n\r\n <div\r\n [ngClass]=\"hasReferenceImages(question) || hasChecklistReferenceImages(question) ? 'col-md-6' : 'col-md-6'\">\r\n <div class=\"row\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <div class=\"collage-grid\" [ngStyle]=\"{'grid-template-columns': getGridColumns(question.userAnswer.length),\r\n 'grid-auto-rows': getGridRowHeight(question.userAnswer.length)}\">\r\n <div *ngFor=\"let item of question.userAnswer;let i = index\"\r\n class=\"collage-tile\">\r\n\r\n\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getImageUrls(question.userAnswer),getImageNames(question.userAnswer),i)\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\"\r\n alt=\"\">\r\n\r\n <div [ngClass]=\"item.validationType==='Capture Image'?'col-md-6 mt-2':'col-md-12 mt-2'\"\r\n *ngIf=\"item.validation&&item.validationAnswer!==''\">\r\n <div class=\"title-ref my-3\"\r\n *ngIf=\"item.validationType==='Capture Image'||item.validationType==='Capture Video'\">\r\n Validation Answer</div>\r\n <img class=\"img-logo cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + item.validationAnswer,0)\" \r\n *ngIf=\"item.validationType==='Capture Image'\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n\r\n <div class=\"position-relative w-100 h-450px p-3\" *ngIf=\"item.validationType === 'Capture Video'\">\r\n <video controls class=\"w-100 h-100\" [src]=\"environment.TraxAnswerCDN + item.validationAnswer\">\r\n\r\n </video>\r\n\r\n <span class=\"position-absolute top-0 end-0 m-3 cursor-pointer\">\r\n <svg (click)=\"downloadVideo(item.validationAnswer)\"\r\n title=\"Download Video\" id=\"download-icon\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"icon-overlay\">\r\n <g filter=\"url(#filter0_d_3822_19479)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\"></rect>\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\"></rect>\r\n <path\r\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_3822_19479\" x=\"0\" y=\"0\" width=\"44\" height=\"44\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood>\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"></feColorMatrix>\r\n <feOffset dy=\"1\"></feOffset>\r\n <feGaussianBlur stdDeviation=\"1\"></feGaussianBlur>\r\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\">\r\n </feColorMatrix>\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_3822_19479\"></feBlend>\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_3822_19479\" result=\"shape\"></feBlend>\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n</div>\r\n\r\n \r\n <span\r\n *ngIf=\"item.validationType==='Descriptive Answer'\"\r\n [ngClass]=\"item.sopFlag ? 'flagclour':''\">Validation\r\n Answer :\r\n {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"remarksTxt\"\r\n *ngIf=\"question.remarks!==''\">Remarks :\r\n {{question.remarks}}</div>\r\n \r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n <div class=\"row px-5\"\r\n *ngIf=\"question?.answerType==='video'\">\r\n <!-- Task: Multiple reference images (Array) -->\r\n <div class=\"col-md-6\" *ngIf=\"galleryForm.value.type === 'task' && hasQuestionReferenceImages(question)\">\r\n <!-- Question Reference Images -->\r\n \r\n <div class=\"title-ref my-3\">Reference Image\r\n </div>\r\n <div class=\"collage-grid\"\r\n [ngStyle]=\"{ 'grid-template-columns': getGridColumns(question.questionReferenceImage.length) }\">\r\n <ng-container\r\n *ngFor=\"let item of question.questionReferenceImage;let i=index\">\r\n <div class=\"collage-tile\"\r\n *ngIf=\"isValidImage(item)\">\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getRefImageUrls(question.questionReferenceImage),getRefImageNames(question.questionReferenceImage),i)\"\r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"Reference image\">\r\n </div>\r\n </ng-container>\r\n </div>\r\n \r\n </div>\r\n\r\n <!-- Checklist: Single reference image (String) -->\r\n <div class=\"col-md-6\" *ngIf=\"galleryForm.value.type === 'checklist' \r\n && question.questionReferenceImage \r\n && question.questionReferenceImage !== ''\">\r\n\r\n <div class=\"title-ref my-3\">Reference Image</div>\r\n\r\n <div class=\"collage-grid\"\r\n [ngStyle]=\"{ 'grid-template-columns': getGridColumns(1) }\">\r\n\r\n <div class=\"collage-tile\">\r\n <img class=\"cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + question.questionReferenceImage,0)\" [src]=\"environment.TraxAnswerCDN + question.questionReferenceImage\"\r\n alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-12\"\r\n *ngFor=\"let item of question.userAnswer\">\r\n <div class=\"title-ref my-3\">Uploaded Video</div>\r\n<div class=\"position-relative w-100 h-450px p-3\" >\r\n <video controls class=\"w-100 h-100\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\">\r\n </video>\r\n\r\n\r\n <span class=\"position-absolute top-0 end-0 m-3 cursor-pointer\">\r\n <svg (click)=\"downloadVideo(item.answer)\"\r\n title=\"Download Video\" id=\"download-icon\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"icon-overlay\">\r\n <g filter=\"url(#filter0_d_3822_19479)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\"></rect>\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\"></rect>\r\n <path\r\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_3822_19479\" x=\"0\" y=\"0\" width=\"44\" height=\"44\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood>\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"></feColorMatrix>\r\n <feOffset dy=\"1\"></feOffset>\r\n <feGaussianBlur stdDeviation=\"1\"></feGaussianBlur>\r\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\">\r\n </feColorMatrix>\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_3822_19479\"></feBlend>\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_3822_19479\" result=\"shape\"></feBlend>\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n\r\n</div>\r\n \r\n </div>\r\n <div class=\"remarksTxt\" *ngIf=\"question.remarks!==''\">\r\n Remarks : {{question.remarks}}</div>\r\n </div>\r\n\r\n\r\n\r\n\r\n <div class=\"row px-5\"\r\n *ngIf=\"question?.answerType==='multipleImage'\">\r\n <div *ngIf=\"galleryForm.value.type === 'task' && (hasReferenceImages(question) || hasChecklistReferenceImages(question))\" class=\"col-md-6 dfdsfsd\">\r\n <div class=\"title-ref my-3\"\r\n *ngIf=\"hasReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n\r\n <div class=\"collage-grid\"\r\n *ngIf=\"hasReferenceImages(question)\">\r\n <ng-container\r\n *ngFor=\"let answer of question.answers\">\r\n <ng-container\r\n *ngIf=\"answer.referenceImage?.length\">\r\n <div class=\"collage-tile\"\r\n *ngFor=\"let item of answer.referenceImage;let i=index\">\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getRefImageUrls(answer.referenceImage),getRefImageNames(answer.referenceImage),i)\"\r\n [src]=\"environment.TraxAnswerCDN + item\"\r\n alt=\"\" />\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- For Checklist Type -->\r\n <div *ngIf=\"galleryForm.value.type === 'checklist' && (hasReferenceImages(question) || hasChecklistReferenceImages(question))\" class=\"col-md-6\">\r\n <div class=\"title-ref my-3\"\r\n *ngIf=\"hasChecklistReferenceImages(question)\">\r\n Reference Image\r\n </div>\r\n\r\n <div class=\"collage-grid\"\r\n *ngIf=\"hasChecklistReferenceImages(question)\">\r\n <ng-container\r\n *ngFor=\"let answer of question.answers;let i=index;\">\r\n <div class=\"collage-tile\"\r\n *ngIf=\"answer.referenceImage\">\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getRefchecklistImageUrls(question.answers),getRefchecklistImageNames(question.answers),i)\"\r\n [src]=\"environment.TraxAnswerCDN + answer.referenceImage\"\r\n alt=\"\" />\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n \r\n <div\r\n [ngClass]=\"hasReferenceImages(question) || hasChecklistReferenceImages(question) ? 'col-md-6' : 'col-md-6'\">\r\n <div class=\"row\">\r\n <div class=\"title-ref my-3\">Uploaded Image</div>\r\n <div class=\"collage-grid\" [ngStyle]=\"{'grid-template-columns': getGridColumns(question.userAnswer.length),\r\n 'grid-auto-rows': getGridRowHeight(question.userAnswer.length)}\">\r\n <div *ngFor=\"let item of question.userAnswer;let i=index\"\r\n class=\"collage-tile\">\r\n\r\n <img class=\"cursor-pointer\"\r\n (click)=\"openImagePopup(getImageUrls(question.userAnswer),getImageNames(question.userAnswer),i)\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.answer}}\"\r\n alt=\"\">\r\n <div [ngClass]=\"item.validationType==='Capture Image'?'col-md-6':'col-md-12'\"\r\n *ngIf=\"item.validation&&item.validationAnswer!==''\">\r\n <div class=\"title-ref my-3 \"\r\n *ngIf=\"item.validationType==='Capture Image'||item.validationType==='Capture Video'\">\r\n Validation Answer</div>\r\n <img *ngIf=\"item.validationType==='Capture Image'\"\r\n class=\"cursor-pointer\" (click)=\"openImagePopup1(environment.TraxAnswerCDN + item.validationAnswer,0)\"\r\n src=\"{{environment.TraxAnswerCDN}}{{item.validationAnswer}}\"\r\n alt=\"\">\r\n <div class=\"position-relative w-100 h-450px p-3\" *ngIf=\"item.validationType === 'Capture Video'\">\r\n <video controls class=\"w-100 h-100\" [src]=\"environment.TraxAnswerCDN + item.validationAnswer\">\r\n </video>\r\n\r\n <span class=\"position-absolute top-0 end-0 m-3 cursor-pointer\">\r\n <svg (click)=\"downloadVideo(item.validationAnswer)\"\r\n title=\"Download Video\" id=\"download-icon\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"icon-overlay\">\r\n <g filter=\"url(#filter0_d_3822_19479)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\"></rect>\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\"></rect>\r\n <path\r\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_3822_19479\" x=\"0\" y=\"0\" width=\"44\" height=\"44\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"></feFlood>\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"></feColorMatrix>\r\n <feOffset dy=\"1\"></feOffset>\r\n <feGaussianBlur stdDeviation=\"1\"></feGaussianBlur>\r\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\">\r\n </feColorMatrix>\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_3822_19479\"></feBlend>\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_3822_19479\" result=\"shape\"></feBlend>\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n</div>\r\n <span\r\n *ngIf=\"item.validationType==='Descriptive Answer'\">Validation\r\n Answer :\r\n {{item.validationAnswer}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"remarksTxt\"\r\n *ngIf=\"question.remarks!==''\">Remarks :\r\n {{question.remarks}}</div>\r\n \r\n </div>\r\n\r\n </ul>\r\n\r\n\r\n <div class=\"modal fade my-0 py-0\" id=\"imageModal\" tabindex=\"-1\" role=\"dialog\" style=\"overflow:hidden\">\r\n <div class=\"modal-dialog modal-dialog-centered modal-lg\" role=\"document\">\r\n <div class=\"modal-content \">\r\n\r\n \r\n\r\n <div class=\"modal-body d-flex align-items-center justify-content-center position-relative\"\r\n >\r\n <!-- Prev Button -->\r\n <button *ngIf=\"imageList.length > 1\"\r\n class=\"btn btn-outline-primary position-absolute start-0 top-50 translate-middle-y ms-3\"\r\n (click)=\"navigateImage('prev')\"\r\n [disabled]=\"currentImageIndex === 0\">\r\n \u2039\r\n </button>\r\n\r\n <!-- Image -->\r\n <img [src]=\"selectedImageUrl\" style=\"max-height: 85vh; max-width: 100%; object-fit: contain;\"\r\n class=\"img-fluid w-100 mx-1\" />\r\n\r\n <!-- Next Button -->\r\n <button *ngIf=\"imageList.length > 1\"\r\n class=\"btn btn-outline-primary position-absolute end-0 top-50 translate-middle-y me-3\"\r\n (click)=\"navigateImage('next')\"\r\n [disabled]=\"currentImageIndex === imageList.length - 1\">\r\n \u203A\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal fade\" id=\"imageModal1\" tabindex=\"-1\" role=\"dialog\">\r\n <div class=\"modal-dialog modal-dialog-centered modal-lg\" role=\"document\">\r\n <div class=\"modal-content \">\r\n\r\n \r\n\r\n <div class=\"modal-body d-flex align-items-center justify-content-center position-relative\"\r\n >\r\n \r\n\r\n <!-- Image -->\r\n <img [src]=\"selectedImageUrl\" style=\"max-height: 95vh; max-width: 100%; object-fit: contain;\"\r\n class=\"img-fluid w-100 mx-1\" />\r\n\r\n \r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-6 text-start\">\r\n <!-- <button class=\"btn btn-secondary rounded-pill m-0 p-2\" *ngIf=\"question?.linkType&&question?.linkquestionenabled\">Linked to Question {{question.parentQuestion}}</button> -->\r\n </div>\r\n <div class=\"col-md-6 text-end\">\r\n <button class=\"btn btn-sm btn-default border-default me-3\"\r\n [disabled]=\"question.redo\"\r\n *ngIf=\"checktodayDate(checklist?.checklistInfo?.date)&&(gs.userAccess | async)?.userType !== 'tango'&&!checklist?.checklistInfo?.approvalStatus&&(gs.userAccess | async)?.TangoTrax_checklist_isEdit&&this.galleryForm.value.type ==='checklist'\"\r\n (click)=\"addTask('redo',question,checklist?.checklistInfo,checklist?.storeProfile,section)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_6004_11734)\">\r\n <path\r\n d=\"M19.1693 3.33331V8.33332M19.1693 8.33332H14.1693M19.1693 8.33332L15.3026 4.69998C14.407 3.80391 13.299 3.14932 12.0819 2.79729C10.8649 2.44527 9.57853 2.40727 8.34284 2.68686C7.10716 2.96645 5.96244 3.55451 5.01549 4.39616C4.06855 5.23782 3.35024 6.30564 2.9276 7.49998M0.835938 16.6666V11.6666M0.835938 11.6666H5.83594M0.835938 11.6666L4.7026 15.3C5.59823 16.1961 6.70625 16.8506 7.92328 17.2027C9.14031 17.5547 10.4267 17.5927 11.6624 17.3131C12.898 17.0335 14.0428 16.4455 14.9897 15.6038C15.9367 14.7621 16.655 13.6943 17.0776 12.5\"\r\n stroke=\"#344054\" stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_6004_11734\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span class=\"ms-2 font-defult-task\">Redo</span>\r\n </button>\r\n\r\n <button class=\"btn btn-sm btn-default border-default me-3\"\r\n [disabled]=\"question.redo\"\r\n *ngIf=\"checktodayDate(checklist?.checklistInfo?.date)&&(gs.userAccess | async)?.userType !== 'tango'&&!checklist?.checklistInfo?.approvalStatus&&(gs.userAccess | async)?.TangoTrax_Task_isEdit&&this.galleryForm.value.type==='task'\"\r\n (click)=\"addTask('redo',question,checklist?.checklistInfo,checklist?.storeProfile,section)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_6004_11734)\">\r\n <path\r\n d=\"M19.1693 3.33331V8.33332M19.1693 8.33332H14.1693M19.1693 8.33332L15.3026 4.69998C14.407 3.80391 13.299 3.14932 12.0819 2.79729C10.8649 2.44527 9.57853 2.40727 8.34284 2.68686C7.10716 2.96645 5.96244 3.55451 5.01549 4.39616C4.06855 5.23782 3.35024 6.30564 2.9276 7.49998M0.835938 16.6666V11.6666M0.835938 11.6666H5.83594M0.835938 11.6666L4.7026 15.3C5.59823 16.1961 6.70625 16.8506 7.92328 17.2027C9.14031 17.5547 10.4267 17.5927 11.6624 17.3131C12.898 17.0335 14.0428 16.4455 14.9897 15.6038C15.9367 14.7621 16.655 13.6943 17.0776 12.5\"\r\n stroke=\"#344054\" stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_6004_11734\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <span class=\"ms-2 font-defult-task\">Redo</span>\r\n </button>\r\n\r\n <button class=\"btn btn-sm border-val1\"\r\n *ngIf=\"!question.task&&!question.taskId&&this.galleryForm.value.type==='checklist'&&(gs.userAccess | async)?.userType !== 'tango'&&!checklist?.checklistInfo?.approvalStatus&& (gs.userAccess | async)?.TangoTrax_Task_isEdit\"\r\n (click)=\"addTask('createtask',question,checklist?.checklistInfo,checklist?.storeProfile,section)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M11.6693 1.66675H5.0026C4.56058 1.66675 4.13665 1.84234 3.82409 2.1549C3.51153 2.46746 3.33594 2.89139 3.33594 3.33341V16.6667C3.33594 17.1088 3.51153 17.5327 3.82409 17.8453C4.13665 18.1578 4.56058 18.3334 5.0026 18.3334H15.0026C15.4446 18.3334 15.8686 18.1578 16.1811 17.8453C16.4937 17.5327 16.6693 17.1088 16.6693 16.6667V6.66675M11.6693 1.66675L16.6693 6.66675M11.6693 1.66675V6.66675H16.6693M10.0026 15.0001V10.0001M7.5026 12.5001H12.5026\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2 font-task\">Create Task</span>\r\n </button>\r\n <button\r\n *ngIf=\"question.task&&question.taskId &&this.galleryForm.value.type!=='task'\"\r\n class=\"btn btn-sm border-val1\"\r\n (click)=\"taskredirect(question,checklist?.storeProfile,checklist?.checklistInfo)\"><span\r\n class=\"font-task\">View Task</span></button>\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"px-10 my-5\" *ngIf=\"imageChecklist.includes(select)\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n <!-- <div>\r\n <h2>Checklist Name : {{this.checklistName}}</h2>\r\n </div> -->\r\n\r\n <div class=\" my-3 mt-5\" *ngFor=\"let item of mobileusageData\">\r\n <div class=\"row px-10 mt-5\">\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Checklist Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">: {{this.checklistName}} </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Store Name</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">: {{item.storeName}}</p>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"item.down_time\">\r\n <h3 class=\"uni-title\">Average Downtime</h3>\r\n </div>\r\n <div class=\"col-md-9\" *ngIf=\"item.down_time\">\r\n <p class=\"uni-subtitle\">: {{item.down_time}} Mins</p>\r\n </div>\r\n </div>\r\n <ul class=\"row w-100 qa-bodrer\">\r\n <!-- <li class=\"qa-heading\">\r\n {{item.storeName}}\r\n </li> -->\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12 my-2\" *ngFor=\"let detection of item?.imageUrl\">\r\n\r\n <div class=\"\">\r\n <img class=\"w-100 h-500px rounded-top\"\r\n src=\"{{environment.TraxAIchecklistCDN}}{{detection}}\" alt=\"\">\r\n <div class=\"text-center mt-3\"> {{this.checklistName}}</div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 my-2\" *ngFor=\"let detection of item?.imagesData\">\r\n <div class=\"card-toolbar\"\r\n *ngIf=\"galleryForm.value.sourceCheckList_id==='inventorycount'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-8\">\r\n <span class=\"ms-3\"\r\n *ngIf=\"detection?.date_timestamp\">Detection Time :<span\r\n class=\"badge badge-light-primary\">\r\n {{detection.date_timestamp}}</span></span>\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n <span class=\"ms-3\" *ngIf=\"detection?.car_count\">No of cars\r\n :<span class=\"badge badge-light-primary\">\r\n {{detection.car_count}}</span></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-toolbar\"\r\n *ngIf=\"galleryForm.value.sourceCheckList_id==='numberplateinfo'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-8\">\r\n <span class=\"ms-3\" *ngIf=\"detection?.car_license_id\">Number\r\n Plate :<span class=\"badge badge-light-primary\">\r\n {{detection.car_license_id}}</span></span>\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n <span class=\"ms-3\" *ngIf=\"detection?.date_timestamp\">Entry\r\n Time:<span class=\"badge badge-light-primary\">\r\n {{detection.date_timestamp}}</span></span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"card-toolbar\"\r\n *ngIf=\"galleryForm.value.sourceCheckList_id==='carsattended'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <span class=\"ms-3\"\r\n *ngIf=\"detection?.interacted_person_count\">Number of\r\n People Interacted :<span\r\n class=\"badge badge-light-primary\">\r\n {{detection.interacted_person_count}}</span></span>\r\n </div>\r\n <div class=\"col-md-6 text-end\">\r\n <span class=\"ms-3\" *ngIf=\"detection?.car_reg_number\">Number\r\n Plate :<span class=\"badge badge-light-primary\">\r\n {{detection?.car_reg_number}}</span></span>\r\n </div>\r\n\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <span class=\"ms-3\"\r\n *ngIf=\"detection?.car_reg_number\">Detection Time :<span\r\n class=\"badge badge-light-primary\">\r\n {{detection?.date_timestamp}}</span></span>\r\n </div>\r\n <div class=\"col-md-6 text-end\">\r\n <span class=\"ms-3\"\r\n *ngIf=\"detection?.interacted_duration_in_secs\">Time\r\n spent:<span class=\"badge badge-light-primary\">\r\n {{detection.interacted_duration_in_secs}}\r\n Mins</span></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\"\r\n *ngIf=\"galleryForm.value.sourceCheckList_id==='vehicle_check_in'\">\r\n <div class=\"row\">\r\n\r\n <div class=\"col-md-8\">\r\n <span class=\"ms-3\"\r\n *ngIf=\"detection?.date_timestamp\">Detection Time :<span\r\n class=\"badge badge-light-primary\">\r\n {{detection.date_timestamp}}</span></span>\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n <span class=\"ms-3\" *ngIf=\"detection?.date_timestamp\">Slot\r\n :<span class=\"badge badge-light-primary\">\r\n {{detection.slot_id}}</span></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mt-2\">\r\n <img class=\"w-100 h-500px rounded-top\"\r\n src=\"{{environment.TraxAIchecklistCDN}}{{detection.path}}\"\r\n alt=\"\">\r\n <div class=\"text-center mt-3\"> {{this.checklistName}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n\r\n </div>\r\n <div class=\"px-10 my-5\" *ngIf=\"videoChecklist.includes(select)\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n\r\n <div class=\"my-3 mt-5\" *ngFor=\"let item of customerunattendedData\">\r\n <div class=\"row px-10 mt-5\">\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Checklist Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">: {{this.checklistName}} </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Store Name</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">: {{item.storeName}}</p>\r\n </div>\r\n </div>\r\n <ul class=\"row w-100 margin-top-side\">\r\n <li class=\"qa-heading\">\r\n\r\n </li>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngFor=\"let detection of item.imagesData\">\r\n <div class=\"row px-10 mt-5 margin-left-side\"\r\n *ngIf=\"select!=='suspiciousactivity'\">\r\n <div class=\"col-md-3\" *ngIf=\"detection?.Answer\">\r\n <h3 class=\"uni-title\">Detection Status</h3>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.Answer\">\r\n <p class=\"uni-subtitle\">:<span\r\n class=\"ms-3 badge badge-light-danger\"\r\n *ngIf=\"detection?.Answer==='rejected'\">Breached</span>\r\n <span class=\"ms-3 badge badge-light-success\"\r\n *ngIf=\"detection?.Answer==='approved'\">Not-breached</span>\r\n </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Date</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\">: {{detection.date|date:'dd-MM-yyyy' }}\r\n </p>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.configTime\">\r\n <h3 class=\"uni-title\">Configured Time</h3>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.configTime\">\r\n <p class=\"uni-subtitle\">: {{detection.configTime }}</p>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.duration\">\r\n <h3 class=\"uni-title\">Duration</h3>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.duration\">\r\n <p class=\"uni-subtitle\">: {{detection.duration }} Mins</p>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.downTime\">\r\n <h3 class=\"uni-title\">Downtime</h3>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"detection?.downTime\">\r\n <p class=\"uni-subtitle\">: {{detection.downTime }} Mins <span\r\n ngbTooltip=\"Downtime may result in inaccurate data\"\r\n placement=\"top\" container=\"body\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"15\"\r\n height=\"16\" viewBox=\"0 0 15 16\" fill=\"none\">\r\n <path\r\n d=\"M7.66667 5.33203V7.9987M7.66667 10.6654H7.67333M14.3333 7.9987C14.3333 11.6806 11.3486 14.6654 7.66667 14.6654C3.98477 14.6654 1 11.6806 1 7.9987C1 4.3168 3.98477 1.33203 7.66667 1.33203C11.3486 1.33203 14.3333 4.3168 14.3333 7.9987Z\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span></p>\r\n </div>\r\n </div>\r\n <div class=\"card-header border-0 min-h-45px px-0 my-0\">\r\n <h3 class=\"card-title\">\r\n <!-- <span class=\"me-3 store-title\">{{item.storeName}}</span> -->\r\n <span class=\"ms-2 badge badge-light-default\"\r\n *ngIf=\"detection?.customer_id\">Cust ID :\r\n {{detection.customer_id}}</span>\r\n <span class=\"ms-2 badge badge-light-default\"\r\n *ngIf=\"detection?.queue_id\">Queue ID :\r\n {{detection.queue_id}}</span>\r\n <span class=\"ms-2 badge badge-light-default\"\r\n *ngIf=\"detection?.optum_id\">Optom ID :\r\n {{detection.optum_id}}</span>\r\n <!-- <span class=\"ms-2 badge badge-light-default\" *ngIf=\"detection?.date\">Date : {{detection.date|date:'dd-MM-yyyy' }}</span> -->\r\n <!-- <span class=\"ms-3 badge badge-light-default\" *ngIf=\"detection?.configTime\">Inspection time : {{detection.configTime}}</span> -->\r\n <span class=\"ms-3 badge badge-light-default\"\r\n *ngIf=\"detection?.temp_id\">TempId :\r\n {{detection.temp_id}}</span>\r\n <span class=\"ms-3 badge badge-light-default\"\r\n *ngIf=\"detection?.time_spend\">Timespend :\r\n {{detection.time_spend}}Mins</span>\r\n\r\n </h3>\r\n\r\n <!-- Switch toggle -->\r\n <div class=\"card-toolbar\">\r\n <div class=\"col-md-12 text-end\">\r\n <span class=\"ms-3 badge badge-light-default\"\r\n *ngIf=\"detection?.entry_time\">Entry time :\r\n {{detection.entry_time}}</span>\r\n <span class=\"ms-3 badge badge-light-default\"\r\n *ngIf=\"detection?.exit_time\">Exit time :\r\n {{detection.exit_time}}</span>\r\n <span class=\"ms-3 badge badge-light-success\"\r\n *ngIf=\"detection?.adherence_rate\">Adherence Rate :\r\n {{detection.adherence_rate}}</span>\r\n <span class=\"ms-3 badge badge-light-primary text-capitalize\"\r\n *ngIf=\"detection?.category\">\r\n {{detection.category}}</span>\r\n <span class=\"ms-3 badge badge-light-default\"\r\n *ngIf=\"detection?.customer_entry_time\">Entry time :\r\n {{detection.customer_entry_time}}</span>\r\n <span class=\"ms-3 badge badge-light-default\"\r\n *ngIf=\"detection?.customer_exit_time\">Exit time :\r\n {{detection.customer_exit_time}}</span>\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"my-0\" *ngIf=\"select !=='eyetest'\">\r\n <video controls class=\"w-100 h-450px rounded-top\"\r\n src=\"{{environment.TraxAIchecklistCDN}}{{detection.video_path}}\"\r\n alt=\"\">\r\n </video>\r\n </div>\r\n <div class=\"my-0\" *ngIf=\"select ==='eyetest'\">\r\n <video controls class=\"w-100 h-450px rounded-top\"\r\n src=\"{{environment.EyeTestCDN}}{{detection.video_path}}\" alt=\"\">\r\n </video>\r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"select ==='storeopenandclose'\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n <div class=\"row px-10 mt-5\">\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Checklist Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">: {{this.checklistName}} </p>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 margin-top-side\" *ngFor=\"let store of storeOpencloseView\">\r\n <div class=\" mx-8 my-8\" *ngFor=\"let item of store.imagesData\">\r\n <div class=\"row px-10 mt-5 margin-left-side \">\r\n <div class=\"col-md-3\" *ngIf=\"item?.buffer_open\">\r\n <h3 class=\"uni-title\">Buffer for Open Time :</h3>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"item?.buffer_open\">\r\n <p class=\"uni-subtitle\">: {{item.buffer_open }}</p>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"item?.buffer_close\">\r\n <h3 class=\"uni-title\">Buffer for Close Time :</h3>\r\n </div>\r\n <div class=\"col-md-3\" *ngIf=\"item?.buffer_close\">\r\n <p class=\"uni-subtitle\">: {{item.buffer_close }}</p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Detection Status</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\">:<span class=\"ms-3 badge badge-light-danger\"\r\n *ngIf=\"item?.Flag\">Breached</span>\r\n <span class=\"ms-3 badge badge-light-success\"\r\n *ngIf=\"!item?.Flag\">Not-breached</span>\r\n </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Date</h3>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <p class=\"uni-subtitle\">: {{item.date|date:'dd-MM-yyyy' }}</p>\r\n </div>\r\n </div>\r\n <div class=\"snapcard\">\r\n <div class=\"snapheader ms-6\">\r\n {{item.storeName}}\r\n </div>\r\n <div class=\"row m-0 w-100\">\r\n <div class=\"col-6\">\r\n <div class=\"img mt-4 px-3 position-relative\" *ngIf=\"!item.openTime\">\r\n <div\r\n class=\"preview align-items-center justify-content-center d-flex flex-column\">\r\n <span>\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n \\\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"prvtxt mt-5 textclr\">Preview not\r\n available</span>\r\n <span class=\"refreshtxt mt-2 textclr\">The selected camera\r\n is not available at the moment.</span>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"item.openTime\">\r\n <img class=\"mx-1 img-opc\"\r\n src=\"{{environment.TraxOpenclosechecklistCDN}}{{item.storeId}}/{{item.dateString|date:'dd-MM-yyyy'}}/operation_snaps/open.jpeg\"\r\n alt=\"open close snap\">\r\n <div class=\"col-12\">\r\n <div class=\"d-flex flex-stack mx-1 mt-2\">\r\n <div>\r\n <div class=\"snaptext\">Opening Snap</div>\r\n <div class=\"snaptime\">{{item.openTime}} -\r\n {{item.date}}\r\n </div>\r\n </div>\r\n\r\n <span class=\"badge badge-light-primary snapbadge\"\r\n *ngIf=\"!item?.openTimeFlag\">On Time</span>\r\n <span class=\"badge badge-light-danger snapbadge\"\r\n *ngIf=\"item?.openTimeFlag\">Late Open</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"img mt-4 px-3 position-relative\"\r\n *ngIf=\"!item.closeTime\">\r\n <div\r\n class=\"preview align-items-center justify-content-center d-flex flex-column\">\r\n <span>\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n \\\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"prvtxt mt-5 textclr\">Preview not\r\n available</span>\r\n <span class=\"refreshtxt mt-2 textclr\">The selected camera\r\n is not available at the moment.</span>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"item.closeTime\">\r\n <img class=\"mx-1 img-opc\"\r\n src=\"{{environment.TraxOpenclosechecklistCDN}}{{item.storeId}}/{{item.dateString|date:'dd-MM-yyyy'}}/operation_snaps/close.jpeg\"\r\n alt=\"Checklist Video Player\">\r\n <div class=\"col-12\">\r\n <div class=\"d-flex flex-stack mx-1 mt-2\">\r\n <div>\r\n <div class=\"snaptext\">Closing Snap</div>\r\n <div class=\"snaptime\">{{item.closeTime}} -\r\n {{item.date}}\r\n </div>\r\n </div>\r\n <span class=\"badge badge-light-primary snapbadge\"\r\n *ngIf=\"!item?.closeTimeFlag\">On Time</span>\r\n <span class=\"badge badge-light-danger snapbadge\"\r\n *ngIf=\"item?.closeTimeFlag\">Early Close</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"boximageChecklist.includes(select)\">\r\n <div class=\"text-center\" *ngIf=\"clientData.logo&&clientData.logo!==''\">\r\n <img class=\"mt-5 mb-3 text-center iconsize\" src=\"{{clientData.logo}}\">\r\n </div>\r\n <div class=\"col-md-12\" *ngFor=\"let store of queueAlertView\">\r\n <div class=\"row px-10 mt-5\" *ngIf=\"showmulti\">\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Store Name:</h3>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">{{store?.storeName}} |\r\n {{store?.city}},{{store?.state}},{{store?.country}} </p>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <h3 class=\"uni-title\">Checklist Name:</h3>\r\n\r\n </div>\r\n <div class=\"col-md-9\">\r\n <p class=\"uni-subtitle\">{{checklistName}}</p>\r\n </div>\r\n <div class=\"col-md-3\"\r\n *ngIf=\"select==='boxalert'||select==='suspiciousfootfall'||select==='drinking'||select==='bagdetection'\">\r\n <h3 class=\"uni-title\">Description:</h3>\r\n </div>\r\n <div class=\"col-md-9\"\r\n *ngIf=\"select==='boxalert'||select==='suspiciousfootfall'||select==='drinking'||select==='bagdetection'\">\r\n <p class=\"uni-subtitle\">{{checkListDescription}}</p>\r\n </div>\r\n\r\n </div>\r\n <div class=\"row m-0 w-100 \">\r\n <div class=\"col-4 mt-2\" *ngFor=\"let item of store.imagesData\">\r\n <div class=\"card bordercolor bg-secondary mt-8\">\r\n <div class=\"text-start ms-5 mt-2 mb-5\">\r\n <div *ngIf=\"item.zone\">\r\n <span\r\n class=\"btn btn-secondary rounded-lg p-2\">{{item.zone}}</span>\r\n </div>\r\n\r\n <div class=\"mt-3 fw-semibold\">{{ item.date_timestamp }}</div>\r\n </div>\r\n <img class=\"w-100 h-250px rounded-bottom\" (click)=\"openModel(item)\"\r\n src=\"{{environment.TraxAIchecklistCDN}}{{item.path}}\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <lib-pagination *ngIf=\"!viewloading && !viewnoData\" [itemsPerPage]=\"limit\"\r\n [currentPage]=\"offset\" [totalItems]=\"totalCount\" [paginationSizes]='paginationSizes'\r\n [pageSize]=\"limit\" (pageChange)=\"onPageChangeview($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </section>\r\n </div>\r\n\r\n\r\n\r\n </div>\r\n <div *ngIf=\"!showsidenav\" (click)=\"sidenav()\" class=\"backButtonleft text-center pt-1 cursor-pointer\">\r\n <svg class=\"mt-2 ms-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <path\r\n d=\"M9.72714 12.6365L13.3635 9.00013L9.72714 5.36377M4.63623 12.6365L8.27259 9.00013L4.63623 5.36377\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"row card mx-0 p-3 \" *ngIf=\"checkAIchecklist()&&!viewnoData&&userDetails?.role!=='user'\">\r\n <div class=\"col-md-12 text-end\">\r\n <button class=\"btn btn-sm border-primary1\" [disabled]=\"!approvalStatus\" (click)=\"appoveChecklist()\">Approve\r\n </button>\r\n </div>\r\n</div>\r\n<ng-template #zoomPopup let-model>\r\n <div class=\"p-8\">\r\n <div class=\"modal-header pt-0 ps-1 pe-0\">\r\n <div>\r\n <div class=\"text-start mt-2\">\r\n <div *ngIf=\"viewImage.zone\">\r\n <span class=\"btn btn-secondary rounded-lg p-2\">{{viewImage.zone}}</span>\r\n </div>\r\n <div *ngIf=\"viewImage.emptyBoxCount\">\r\n <span>Empty shelves : {{viewImage.emptyBoxCount}}</span>\r\n </div>\r\n\r\n <div *ngIf=\"viewImage.entry_time\">\r\n <span>Entry Time : {{viewImage.entry_time}}</span>\r\n </div>\r\n <div *ngIf=\"viewImage.exit_time\">\r\n <span>Exit Time : {{viewImage.exit_time}}</span>\r\n </div>\r\n <div *ngIf=\"viewImage.temp_id\">\r\n <span>Temp Id : {{viewImage.temp_id}}</span>\r\n </div>\r\n <div *ngIf=\"viewImage.time_spend\">\r\n <span>Time Spend : {{viewImage.time_spend}} Mins</span>\r\n </div>\r\n\r\n <div class=\"mt-2\" *ngIf=\"viewImage.threshold&&viewImage.Dwelltime\">\r\n <p>If the queue exceeds {{viewImage.threshold}} people and wait time surpasses\r\n {{viewImage.Dwelltime}} minutes, an alert will be triggered</p>\r\n </div>\r\n <div class=\"mt-3 fw-semibold\">{{ viewImage.date_timestamp }}</div>\r\n </div>\r\n\r\n </div>\r\n <div data-bs-dismiss=\"modal\">\r\n <!-- <span class=\"stream fw-semibold text-nowrap me-5\" *ngIf=\"camera.height && camera.width\"> Resolution: {{camera.height}} X {{camera.width}}</span> -->\r\n <span class=\"btn btn-sm btn-icon btn-active-color-primary me-0\" (click)=\"model.dismiss()\"><svg\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M15 5L5 15M5 5L15 15\" stroke=\"#667085\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"viewImage.path\" class=\"mt-2 overflow-auto\">\r\n <img class=\"rounded-4 mt-5 img-popup-src w-100\" src=\"{{environment.TraxAIchecklistCDN}}{{viewImage.path}}\">\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n</ng-template>", styles: [".gallery-card{padding:24px;border-radius:12px;background:#fff}.gallery-card .header{color:#101828;font-size:18px;font-weight:500;line-height:28px}.img{border-radius:10px;border:1px solid var(--Gray-500, #667085);background:var(--Gray-100, #F2F4F7);width:100%;height:230px}.prvtxt{color:var(--Gray-500, #667085);font-family:Inter;font-size:20px;font-style:normal;font-weight:700;line-height:20px;letter-spacing:-.4px}.refreshtxt{color:var(--Gray-400, #98A2B3);font-family:Inter;font-size:12px;font-style:normal;font-weight:500;line-height:18px}::ng-deep .applyBtn{display:none!important}::ng-deep .custom-height-modal .modal-dialog{max-height:80vh;height:80vh}::ng-deep .custom-height-modal .modal-content{overflow:auto;max-height:100%}:host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .md-drppicker.shown.drops-down-right{transform-origin:0 0;width:560px!important}:host::ng-deep .daterangepicker-input+.ngx-daterangepicker-material .applyBtn{display:none}:host::ng-deep .md-drppicker.drops-down-right.ltr.show-ranges.shown{top:65px!important}:host::ng-deep .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;right:-475px!important;left:unset!important;height:400px!important}:host::ng-deep .md-drppicker .btn{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}:host::ng-deep .md-drppicker .ranges ul li button{padding:12px 16px;width:160px;color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:20px;background:none;border:none;text-align:left;cursor:pointer}:host::ng-deep .md-drppicker td.active,:host::ng-deep .md-drppicker td.active:hover{background-color:#029cf4!important;border-radius:20px!important;color:var(--White, #FFF)!important;text-align:center!important;font-size:14px!important;font-weight:500!important;line-height:20px}:host::ng-deep .md-drppicker.ltr .ranges{float:left;margin-top:10px!important}:host::ng-deep .md-drppicker td.in-range{background:var(--Primary-50, #EAF8FF)}:host::ng-deep .md-drppicker .ranges ul li button.active{background:var(--Primary-50, #EAF8FF)!important;border-radius:8px!important;color:var(--Primary-700, #009BF3);font-size:14px!important;font-weight:500!important;line-height:20px!important}:host::ng-deep table th,:host::ng-deep table td{width:40px!important;height:40px!important;padding:10px 8px!important}:host::ng-deep .md-drppicker td.available.prev,:host::ng-deep .md-drppicker th.available.prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .md-drppicker td.available.next,:host::ng-deep .md-drppicker th.available.next{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep table th{border-bottom:0px solid var(--Gray-200, #EAECF0)!important;background:transparent!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:16px!important;font-weight:500!important;line-height:24px}:host::ng-deep .md-drppicker .btn.btn-default{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize;margin-right:10px!important}:host::ng-deep .md-drppicker td.available.invalid-date{text-decoration:line-through;pointer-events:none;color:#a9a9a9}:host::ng-deep .md-drppicker td.available.today:not(.invalid-date){text-decoration:unset;pointer-events:unset;color:unset}.btn-primary{line-height:18px!important}.checkbox-label{color:#344054;font-size:14px;font-weight:500;line-height:20px;cursor:pointer}.checklist-left .checklist-title{overflow:hidden;color:var(--Black, #101828)!important;text-overflow:ellipsis;font-size:18px!important;font-weight:500;line-height:28px}.checklist-left .checklist-text{overflow:hidden;color:var(--Black, #101828)!important;text-overflow:ellipsis;font-size:12px!important;font-weight:400!important;line-height:18px}.section{display:inline-block;width:600px;white-space:nowrap;outline:none!important;border:none!important;box-shadow:none!important;overflow:hidden!important;text-overflow:ellipsis!important;color:var(--Black, #101828)!important;font-size:16px!important;font-weight:500!important}.card hr{width:-webkit-fill-available}.editablecontent{color:var(--Gray-700, #344054)!important;font-size:16px!important;font-weight:400!important;line-height:24px}.rotate{transform:rotate(180deg);transition:1s}.question-left{color:var(--Gray-700, #344054)!important;font-size:16px;font-weight:400;line-height:24px}.view-all{padding:12px!important;border-radius:6px!important;background:var(--Primary-50, #EAF8FF)!important;color:var(--Primary-500, #33B5FF)!important;font-size:16px!important;font-weight:600!important;line-height:24px;text-decoration-line:underline!important}.view-questions{padding:12px!important;border-radius:6px!important;color:var(--Primary-500, #33B5FF)!important;font-size:16px!important;font-weight:600!important;line-height:24px;text-decoration-line:underline!important}.iconsize{width:110px;height:110px}.margin-left-side{margin-left:-35px}.margin-top-side{margin-top:-15px}input[type=checkbox]{width:16px!important;height:16px!important;margin:0;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:0!important;padding-top:8px;padding-right:5px}.uni-title{color:#000!important;font-size:18px!important;font-weight:600!important;line-height:28px}.uni-subtitle{color:#000!important;font-size:18px!important;font-weight:400!important;line-height:28px}.qa-heading{color:var(--Black, #101828)!important;font-size:18px!important;font-weight:700!important;line-height:28px;list-style:none}.qa-bodrer{padding:16px!important;border-radius:8px!important;border:1px solid var(--Gray-200, #EAECF0)!important;background:var(--text-primary, #FFF)!important;box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f!important}.title-ref{color:var(--Gray-900, #101828)!important;font-size:16px!important;font-weight:400!important;line-height:24px}.btn-outline-primary{border-radius:8px!important;border:1px solid var(--Primary-500, #33B5FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important;padding:calc(.7rem + 0px) calc(1.5rem + 1px)!important}.Partially{color:#000;font-size:18px!important;font-style:italic!important;font-weight:500;line-height:28px}.task-remarks{color:#000!important;font-size:18px!important;font-weight:400!important;line-height:28px}.backButtonright{border-radius:1000px!important;background:var(--text-primary, #FFF)!important;padding:12px!important;box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808!important;box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808!important;position:absolute;top:30px;right:-10px;z-index:0}.backButtonleft{border-radius:1000px!important;background:#fff;padding:14px!important;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;left:-20px;z-index:5}img.img-logo{width:100%;height:400px!important}.recap-img{width:100%;height:400px;object-fit:cover!important}.img-src{width:30%!important;height:20%!important}.dropdownselect{padding:20px 10px}.dropdownbg{width:Fill(372px) px;height:Hug(40px) px;padding:8px 16px;gap:0px;border-radius:6px 0 0;justify-content:space-between;opacity:0px;background:#eaf8ff}.detectionright{color:var(--Primary-700, #009BF3)!important;text-align:center;font-size:14px!important;font-weight:500;line-height:14px;float:right!important;mix-blend-mode:multiply}.backgroundBorder{background:#eaf8ff!important;color:#00a3ff!important;padding:12px;border-radius:8px;font-weight:500;line-height:10px}.withoutbackground{padding:8px;font-weight:500;line-height:10px}.snapcard{display:flex;padding:16px;flex-direction:column;align-items:flex-start;gap:16px;align-self:stretch;border-radius:8px;border:1px solid var(--Gray-200, #EAECF0);background:var(--White, #FFF);box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}.snapheader{color:var(--Black, #101828);font-size:16px;font-style:normal;font-weight:600;line-height:24px}.snaptext{color:var(--Gray-900, #101828);font-size:16px!important;font-style:normal;font-weight:600!important;line-height:24px}.snaptime{color:var(--Gray-900, #101828);font-size:12px!important;font-style:normal;font-weight:500!important;line-height:22px}.snapbadge{text-align:center;font-size:14px!important;font-style:normal;font-weight:500!important;line-height:20px}.btn-resize{font-size:13px!important;height:29px!important;line-height:11px!important;padding:1px!important}.preview{position:absolute;top:30%;left:14%}.w-25{width:17%!important}.w-40{width:40%!important}.usage-detection{color:var(--Primary-700, #009BF3);text-overflow:ellipsis!important;font-size:16px!important;font-style:normal;font-weight:400;line-height:16px;width:220Px}.usage-text{color:var(--Gray-700, #344054);text-overflow:ellipsis;font-size:16px;font-style:normal;font-weight:400;line-height:17px}.h-450px{object-fit:contain!important}.store-title{color:var(--Black, #101828)!important;font-size:18px;font-weight:700;line-height:28px}.img-opc{width:100%!important;height:300px!important;border-radius:12px!important}.h-900px{min-height:auto!important;max-height:2800px!important}.select-wrapper{position:relative;display:inline-block;width:100%}.placeholder-overlay{position:absolute;color:var(--Gray-500, #667085);font-family:Inter;font-size:16px!important;font-style:normal;font-weight:400;top:10px;left:15px;pointer-events:none;font-size:1.1rem;z-index:1}.flagclour{color:red}.remarksTxt{margin-top:10px;font-family:Inter;font-size:18px;font-weight:400;line-height:28px;text-align:left}.no-text-transform{text-transform:none!important}.border-val1{padding:8px 14px!important;border-radius:8px!important;border:1px solid var(--Primary-500, #33B5FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important}.font-task{color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}.border-default{padding:8px 14px!important;border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important}.font-defult-task{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}.nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.nav-item .nav-link:hover{border:none}.badge-num-primary{border-radius:16px!important;background:var(--Primary-50, #EAF8FF)!important;color:var(--Primary-700, #009BF3)!important;text-align:center;font-size:14px!important;font-style:normal;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}.badge-num-muted{border-radius:16px!important;background:var(--Primary-50, #F2F4F7)!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:14px;font-style:normal;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}.text-title{font-size:16px!important;font-weight:600!important;color:#101828!important;line-height:24px}.title-description{font-size:14px!important;font-weight:400;color:#101828!important;line-height:24px!important}.border-primary1{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:16px!important;font-weight:600;line-height:24px;text-transform:capitalize}.scroll-y{overflow-x:hidden;overflow-y:auto}.totalsize{width:18%}.view-detail{color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}.left-sidebar{position:sticky;top:0;width:33%;overflow-y:auto}.main-container{display:flex;align-items:flex-start}.right-content{flex-grow:1;width:67%}.bordercolor{border:1px solid var(--Gray-300, #D0D5DD)!important}.toastcard{border-radius:8px;background:var(--Primary-50, #EAF8FF);padding:8px 16px}.toasttext{overflow:hidden;color:var(--Primary-700, #009BF3);text-overflow:ellipsis;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.btn-outline{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d}.refreshtext{color:var(--Gray-700, #344054);font-size:14px;font-style:normal;font-weight:600;line-height:20px;text-transform:capitalize}.collage-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;height:450px;overflow-y:auto;grid-auto-rows:auto}.collage-tile{width:100%;height:100%}.collage-tile img{width:100%;height:100%!important;border-radius:6px}\n"] }]
2664
2810
  }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.GlobalStateService }, { type: i3.TraxService }, { type: i0.ChangeDetectorRef }, { type: i4.NgbModal }, { type: i5.ActivatedRoute }, { type: i5.Router }, { type: i6.ToastService }, { type: i7.Location }, { type: i2.PageInfoService }], propDecorators: { onClick: [{
2665
2811
  type: HostListener,
2666
2812
  args: ['document:click', ['$event']]
@@ -2668,4 +2814,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
2668
2814
  type: ViewChild,
2669
2815
  args: ['zoomPopup']
2670
2816
  }] } });
2671
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FsbGVyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2dhbGxlcnkvZ2FsbGVyeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2dhbGxlcnkvZ2FsbGVyeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBYyxZQUFZLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVwSSxPQUFPLEtBQWdCLE1BQU0sT0FBTyxDQUFDO0FBQ3JDLE9BQU8sR0FBRyxNQUFNLGtCQUFrQixDQUFDO0FBS25DLE9BQU8sRUFBRSxPQUFPLEVBQThDLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUl0RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUVwRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBWnBGLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFvQmxCLE1BQU0sT0FBTyxnQkFBZ0I7SUF5RlA7SUFBd0I7SUFBZ0M7SUFBa0M7SUFBK0I7SUFDbkk7SUFBK0I7SUFBd0I7SUFBb0M7SUFBNEI7SUF6RmpJLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDYixXQUFXLEdBQUcsQ0FBQyxDQUFBO0lBQ2YsaUJBQWlCLEdBQVEsRUFBRSxDQUFDO0lBQzVCLFlBQVksR0FBRyxDQUFDLENBQWMsRUFBRSxFQUFF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QUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsWUFBWSxDQUFDLFdBQWtCO1FBQzdCLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsYUFBYSxDQUFDLFdBQWtCO1FBQzlCLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QyxDQUFDO3dHQXpuRlksZ0JBQWdCOzRGQUFoQixnQkFBZ0IseU5DeEI3Qiwwc2pJQWdpRGM7OzRGRHhnREQsZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNFLGFBQWE7b1VBaW1FdkIsT0FBTztzQkFETixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQW1lbEIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCBkYXlqcywgeyBEYXlqcyB9IGZyb20gXCJkYXlqc1wiO1xyXG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMnO1xyXG5kYXlqcy5leHRlbmQodXRjKTtcclxuaW1wb3J0IHsgVGltZVBlcmlvZCB9IGZyb20gJ25neC1kYXRlcmFuZ2VwaWNrZXItbWF0ZXJpYWwvZGF0ZXJhbmdlcGlja2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSwgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCB7IFRyYXhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJheC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLXNoYXJlZCc7XHJcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRXhwb3J0R2FsbGVyeUNvbXBvbmVudCB9IGZyb20gJy4uL2V4cG9ydC1nYWxsZXJ5L2V4cG9ydC1nYWxsZXJ5LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBBZGRUYXNrQ29tcG9uZW50IH0gZnJvbSAnLi4vYWRkLXRhc2svYWRkLXRhc2suY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGFza0xvZ3NDb21wb25lbnQgfSBmcm9tICcuLi90YXNrLWxvZ3MvdGFzay1sb2dzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFwcHJvdmFsUG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi9hcHByb3ZhbC1wb3B1cC9hcHByb3ZhbC1wb3B1cC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBpbnRlcnZhbCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItZ2FsbGVyeScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2dhbGxlcnkuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9nYWxsZXJ5LmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgR2FsbGVyeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LEFmdGVyVmlld0luaXQge1xyXG4gIGRheWpzID0gZGF5anNcclxuICBub3RpZnlDb3VudCA9IDBcclxuICBzZWxlY3RlZERhdGVSYW5nZTogYW55ID0ge307XHJcbiAgaXNDdXN0b21EYXRlID0gKG06IGRheWpzLkRheWpzKSA9PiB7XHJcbiAgICBjb25zdCBpc1ZhbGlkRGF0ZSA9IG0gPiB0aGlzLmRheWpzKCk7XHJcbiAgICByZXR1cm4gaXNWYWxpZERhdGUgPyAnaW52YWxpZC1kYXRlJyA6IGZhbHNlO1xyXG4gIH1cclxuICBnYWxsZXJ5Rm9ybTogRm9ybUdyb3VwXHJcbiAgdHlwZTogYW55ID0gW3sgdmFsdWU6ICdjaGVja2xpc3QnLCBsYWJlbDogJ0NoZWNrbGlzdCcgfSxcclxuICB7IHZhbHVlOiAndGFzaycsIGxhYmVsOiAnVGFzaycgfVxyXG4gIF1cclxuICBmaWx0ZXJ0eXBlOiBhbnkgPSBbeyB2YWx1ZTogJ0NsdXN0ZXJzJywgbGFiZWw6ICdDbHVzdGVycycgfSxcclxuICB7IHZhbHVlOiAnVGVhbXMnLCBsYWJlbDogJ1RlYW1zJyB9XHJcbiAgXVxyXG4gIGNoZWNrbGlzdHM6IGFueSA9IFtdXHJcbiAgYW5zd2VyVHlwZSA9IFtcclxuICAgIHsgbGFiZWw6ICdBbGwgQW5zd2VyIFR5cGUnLCB2YWx1ZTogJ2FsbCcgfSxcclxuICAgIHsgbGFiZWw6ICdEZXNjcmlwdGl2ZSBBbnN3ZXInLCB2YWx1ZTogJ2Rlc2NyaXB0aXZlJyB9LFxyXG4gICAgeyBsYWJlbDogJ0EvQiBRdWVzdGlvbicsIHZhbHVlOiAneWVzL25vJyB9LFxyXG4gICAgeyBsYWJlbDogJ011bHRpcGxlIENob2ljZSBRdWVzdGlvbiAtIFNpbmdsZSBBbnN3ZXInLCB2YWx1ZTogJ211bHRpcGxlY2hvaWNlc2luZ2xlJyB9LFxyXG4gICAgeyBsYWJlbDogJ011bHRpcGxlIENob2ljZSBRdWVzdGlvbiAtIE11bHRpcGxlIEFuc3dlcicsIHZhbHVlOiAnbXVsdGlwbGVjaG9pY2VtdWx0aXBsZScgfSxcclxuICAgIHsgbGFiZWw6ICdDYXB0dXJlIEltYWdlIGFzIGFuc3dlcicsIHZhbHVlOiAnaW1hZ2UnIH0sXHJcbiAgICB7IGxhYmVsOiAnQ2FwdHVyZSBJbWFnZSB3aXRoIERlc2NyaXB0aW9uJywgdmFsdWU6ICdkZXNjcmlwdGl2ZUltYWdlJyB9LFxyXG4gICAgeyBsYWJlbDogJ0NhcHR1cmUgdmlkZW8gYXMgYW5zd2VyJywgdmFsdWU6ICd2aWRlbycgfSxcclxuICAgIHsgbGFiZWw6ICdDYXB0dXJlIE11bHRpcGxlIEltYWdlJywgdmFsdWU6ICdtdWx0aXBsZUltYWdlJyB9LFxyXG4gICAgeyBsYWJlbDogJ0RhdGUgQXMgQW5zd2VyJywgdmFsdWU6ICdkYXRlJyB9LFxyXG4gICAgeyBsYWJlbDogJ1RpbWUgQXMgQW5zd2VyJywgdmFsdWU6ICd0aW1lJyB9LFxyXG4gICAgeyBsYWJlbDogJ0xpbmVhciBTY2FsZScsIHZhbHVlOiAnbGluZWFyc2NhbGUnIH1cclxuICBdXHJcbiAgaGVhZGVyRmlsdGVyczogYW55ID0ge307XHJcbiAgc3RvcmVMaXN0OiBhbnlbXSA9IFtdXHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgY2hlY2tsaXN0RGF0YTogYW55ID0ge31cclxuICBzdG9yZXM6IGFueSA9IFtdO1xyXG4gIGdyb3VwczogYW55ID0gW107XHJcbiAgdGVhbXM6IGFueSA9IFtdO1xyXG4gIGl0ZW1zOiBhbnk7XHJcbiAgcGFnaW5hdGVkSXRlbXM6IGFueTtcclxuICBpdGVtc1BlclBhZ2UgPSAxMDtcclxuICBjdXJyZW50UGFnZSA9IDE7XHJcbiAgdG90YWxJdGVtcyA9IDA7XHJcbiAgdmlld0NoZWNrbGlzdHNEYXRhOiBhbnk7XHJcbiAgbG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgbm9EYXRhOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdmlld2xvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHZpZXdub0RhdGE6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBvZmZzZXQ6IGFueSA9IDE7XHJcbiAgbGltaXQ6IGFueSA9IDE7XHJcbiAgcGFnaW5hdGlvblNpemVzID0gWzFdXHJcbiAgdG90YWxDb3VudDogYW55O1xyXG4gIHZpZXdDaGVja2xpc3Rzb3B0aW9uczogYW55ID0ge307XHJcbiAgbW9iaWxldXNhZ2VEYXRhOiBhbnk7XHJcbiAgbW9iaWxldXNhZ2VEYXRhTGlzdDogYW55ID0gW11cclxuICBzZWxlY3RBbGw6IGFueVxyXG4gIHN0b3JlT3BlbmNsb3NlVmlldzogYW55O1xyXG4gIHF1ZXJ5UGFyYW1zOiBhbnk7XHJcbiAgY3VzdG9tZXJ1bmF0dGVuZGVkRGF0YTogYW55O1xyXG4gIHNlY3Rpb25OYW1lOiBhbnkgPSAnYWxsJztcclxuICBxdWVzdGlvbk5hbWU6IGFueSA9ICdhbGwnO1xyXG4gIGNsaWVudERhdGE6IGFueTtcclxuICBjaGVja2xpc3ROYW1lOiBhbnkgPSAnJztcclxuICBDbHVzdGVyTGlzdDogYW55ID0gW107XHJcbiAgVGVhbXNMaXN0OiBhbnkgPSBbXTtcclxuICB1c2VyTGlzdDogYW55ID0gW107XHJcbiAgZW52aXJvbm1lbnQ6IGFueTtcclxuICBzaG93ZmxhZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgc2VsZWN0ZWRTZWN0aW9uOiBhbnkgPSBbXVxyXG4gIHRlbXBzZWxlY3RlZFNlY3Rpb246IGFueSA9IFtdXHJcbiAgc2hvd211bHRpOiBib29sZWFuID0gdHJ1ZTtcclxuICBzaG93c2luZ2xlOiBib29sZWFuID0gZmFsc2VcclxuICBzaG93ZmlsdGVyOiBib29sZWFuID0gZmFsc2VcclxuICBwcmV2aWV3VHlwZTogYW55ID0gJ2ltYWdlJztcclxuICBjaGVja0xpc3REZXNjcmlwdGlvbjogYW55ID0gJydcclxuICBhbnN3ZXJGaWx0ZXI6IGFueSA9IFtdXHJcbiAgYXBwcm92YWxTdGF0dXM6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIGNhdGVnb3J5OiBzdHJpbmcgPSAnYWxsJ1xyXG4gIHZpZGVvQ2hlY2tsaXN0ID0gWydjdXN0b21lcnVuYXR0ZW5kZWQnLCAnc3RhZmZsZWZ0aW50aGVtaWRkbGUnLCAncmVtb3Rlb3B0b21ldHJpc3QnLCAnZXlldGVzdCcsICdjbGVhbmluZycsICdzY3J1bScsICdzdXNwaWNpb3VzYWN0aXZpdHknXVxyXG4gIGltYWdlQ2hlY2tsaXN0ID0gWydtb2JpbGV1c2FnZWRldGVjdGlvbicsICd1bmlmb3JtZGV0ZWN0aW9uJywgJ3N0b3JlaHlnaWVuZW1vbml0b3JpbmcnLCAnY3VzdG9tZXJ0cmlhbCcsICdpbnZlbnRvcnljb3VudCcsICdjYXJzYXR0ZW5kZWQnLCAnbnVtYmVycGxhdGVpbmZvJywgJ3ZlaGljbGVfY2hlY2tfaW4nXVxyXG4gIGJveGltYWdlQ2hlY2tsaXN0ID0gWydxdWV1ZWFsZXJ0JywgJ2JveGFsZXJ0JywgJ3N1c3BpY2lvdXNmb290ZmFsbCcsICdkcmlua2luZycsICdiYWdkZXRlY3Rpb24nXVxyXG4gIGNvbWJpbmVkQ2hlY2tsaXN0ID0gWy4uLnRoaXMudmlkZW9DaGVja2xpc3QsIC4uLnRoaXMuaW1hZ2VDaGVja2xpc3QsIC4uLnRoaXMuYm94aW1hZ2VDaGVja2xpc3QsICdzdG9yZW9wZW5hbmRjbG9zZScsXVxyXG4gIHBkZkV4cG9ydFR5cGVzOiBhbnkgPSBbJ2N1c3RvbScsICd0YXNrJywgJ3N0b3Jlb3BlbmFuZGNsb3NlJ11cclxuICBjc3ZFeHBvcnRUeXBlczogYW55ID0gWydjdXN0b20nLCAndGFzaycsICdzdG9yZW9wZW5hbmRjbG9zZScsICdjbGVhbmluZycsICdzY3J1bScsICdpbnZlbnRvcnljb3VudCcsICdjYXJzYXR0ZW5kZWQnLCAnbnVtYmVycGxhdGVpbmZvJ11cclxuICBxdWV1ZUFsZXJ0VmlldzogYW55O1xyXG4gIHZpZXdJbWFnZTogYW55O1xyXG4gIHpvbmVMaXN0OmFueSA9IFtdO1xyXG4gIGFwcHJvdmVGaWx0ZXI6YW55PSdhbGwnXHJcbiAgdXNlckRldGFpbHM6YW55XHJcbiAgdGltZW91dElkOiBhbnk7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsIHB1YmxpYyBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLCBwcml2YXRlIHRyYXhTZXJ2aWNlOiBUcmF4U2VydmljZSwgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLCBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbiwgcHJpdmF0ZSBwYWdlSW5mbzogUGFnZUluZm9TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLnJvdXRlPy5xdWVyeVBhcmFtc1xyXG4gICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcclxuICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gcGFyYW1zO1xyXG4gICAgICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW1zICYmIHRoaXMucXVlcnlQYXJhbXMuQ2hlY2tsaXN0RGF0ZSkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZSA9IHtcclxuICAgICAgICAgICAgc3RhcnREYXRlOiB0aGlzLnF1ZXJ5UGFyYW1zLkNoZWNrbGlzdERhdGUgPyB0aGlzLmRheWpzKHRoaXMucXVlcnlQYXJhbXMuQ2hlY2tsaXN0RGF0ZSkuZm9ybWF0KCdERC1NTS1ZWVlZJykgOiB0aGlzLmRheWpzKCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQtTU0tWVlZWScpLFxyXG4gICAgICAgICAgICBlbmREYXRlOiB0aGlzLnF1ZXJ5UGFyYW1zLkNoZWNrbGlzdERhdGUgPyB0aGlzLmRheWpzKHRoaXMucXVlcnlQYXJhbXMuQ2hlY2tsaXN0RGF0ZSkuZm9ybWF0KCdERC1NTS1ZWVlZJykgOiB0aGlzLmRheWpzKCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQtTU0tWVlZWScpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGRhdGE/LmNsaWVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJGaWx0ZXJzID0gZGF0YTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsU3RvcmVzKCk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCB1c2VyaW5mbyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1c2VyLWluZm9cIikgfHwgXCJcIilcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyaW5mbyAmJiB1c2VyaW5mbz8uY2xpZW50SWQpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCA9IHVzZXJpbmZvPy5jbGllbnRJZFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdldEFsbFN0b3JlcygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKHRoaXMucXVlcnlQYXJhbXMudmlld1JlZG8pIHtcclxuICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoXCJ2aWV3UmVkb1wiKT8uc2V0VmFsdWUodHJ1ZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZSA9IHtcclxuICAgICAgICAgICAgc3RhcnREYXRlOiB0aGlzLmRheWpzKCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQtTU0tWVlZWScpLFxyXG4gICAgICAgICAgICBlbmREYXRlOiB0aGlzLmRheWpzKCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQtTU0tWVlZWScpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgdGhpcy5ncy5lbnZpcm9ubWVudC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlbnYpID0+IHtcclxuICAgICAgaWYgKGVudikge1xyXG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBlbnZcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgIGlmICh0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50ID09PSBcIjQ2NFwiKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0UGVybWlzc2lvbigpXHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tOb3RpZmljYXRpb25zKClcclxuICAgICAgICAgICAgfVxyXG4gIH1cclxuICBjaGVja3RvZGF5RGF0ZShjaGVja2xpc3REYXRlOiBhbnkpIHtcclxuICAgIGNvbnN0IGdpdmVuRGF0ZSA9IGNoZWNrbGlzdERhdGU7XHJcbiAgICBjb25zdCBpc1NhbWVEYXRlID0gZGF5anMoKS5pc1NhbWUoZGF5anMoZ2l2ZW5EYXRlKSwgJ2RheScpO1xyXG5cclxuICAgIHJldHVybiBpc1NhbWVEYXRlXHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICBpZiAodGhpcy50aW1lb3V0SWQpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRJZCk7XHJcbiAgICB0aGlzLnRpbWVvdXRJZCA9IG51bGw7XHJcbiAgfVxyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVxdWVzdFBlcm1pc3Npb24oKSB7XHJcbiAgICBpZiAoJ05vdGlmaWNhdGlvbicgaW4gd2luZG93KSB7XHJcbiAgICAgIE5vdGlmaWNhdGlvbi5yZXF1ZXN0UGVybWlzc2lvbigpLnRoZW4ocGVybWlzc2lvbiA9PiB7XHJcbiAgICAgICAgIGNvbnNvbGUubG9nKHBlcm1pc3Npb24pXHJcbiAgICAgICAgLy8gaWYgKHBlcm1pc3Npb24gPT09ICdncmFudGVkJykge1xyXG4gICAgICAgIC8vICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5vdGlmeSgpLCAxMDAwKTsgLy8gc2hvcnQgZGVsYXkgaGVscHMgaW4gc29tZSBicm93c2Vyc1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdCcm93c2VyIGRvZXMgbm90IHN1cHBvcnQgbm90aWZpY2F0aW9ucy4nKTtcclxuICAgIH1cclxuICB9XHJcbiAgbm90aWZ5KGRhdGE6IGFueSkge1xyXG4gICAgZm9yIChsZXQgZWxlbWVudCBvZiBkYXRhKSB7XHJcbiAgICAgIGlmIChOb3RpZmljYXRpb24ucGVybWlzc2lvbiA9PT0gJ2dyYW50ZWQnKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlSW5mby51cGRhdGVUaXRsZSgn4pqg77iPIFZlaGljbGUgRGV0ZWN0aW9uJyk7XHJcbiAgICAgICBcclxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICBjb25zdCBub3RpZmljYXRpb24gPSBuZXcgTm90aWZpY2F0aW9uKGDwn5qXIFZlaGljbGUgRGV0ZWN0aW9uIG9uIHNsb3QgJHtlbGVtZW50Py5zbG90Tm99YCwge1xyXG4gICAgICAgICAgYm9keTogYCBEZXRlY3Rpb24gb2NjdXJyZWQgYXQgJHtlbGVtZW50LmNhcHR1cmVUaW1lfWAsXHJcbiAgICAgICAgICBpY29uOiAnLi9hc3NldHMvdGFuZ28vbGF5b3V0L3RhbmdvLWZhdi5wbmcnIC8vIE9wdGlvbmFsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobm90aWZpY2F0aW9uKVxyXG4gICAgICAgIG5vdGlmaWNhdGlvbi5vbnNob3cgPSAoKSA9PiBjb25zb2xlLmxvZygnTm90aWZpY2F0aW9uIHNob3duJyk7XHJcbiAgICAgICAgbm90aWZpY2F0aW9uLm9uY2xpY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnTm90aWZpY2F0aW9uIGNsaWNrZWQnKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvJywgeyBza2lwTG9jYXRpb25DaGFuZ2U6IHRydWUgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21hbmFnZS90cmF4L2dhbGxlcnknXSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtczoge1xyXG4gICAgICAgICAgICAgICAgICBDaGVja2xpc3REYXRlOiBkYXlqcygpLmZvcm1hdCgnWVlZWS1NTS1ERCcpLFxyXG4gICAgICAgICAgICAgICAgICBjaGVja2xpc3RUeXBlOiBcImFpXCIsXHJcbiAgICAgICAgICAgICAgICAgIHNvdXJjZUNoZWNrTGlzdF9pZDogXCJ2ZWhpY2xlX2NoZWNrX2luXCIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgbm90aWZpY2F0aW9uLmNsb3NlKCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBub3RpZmljYXRpb24ub25lcnJvciA9IChlKSA9PiBjb25zb2xlLmVycm9yKCdOb3RpZmljYXRpb24gZXJyb3InLCBlKTtcclxuICAgICAgICBub3RpZmljYXRpb24ub25jbG9zZSA9ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucGFnZUluZm8udXBkYXRlVGl0bGUoJ0dhbGxlcnknKTtcclxuXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICByZWZyZXNobm93KCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnLycsIHsgc2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tYW5hZ2UvdHJheC9nYWxsZXJ5J10sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcXVlcnlQYXJhbXM6IHtcclxuICAgICAgICAgICAgQ2hlY2tsaXN0RGF0ZTogZGF5anMoKS5mb3JtYXQoJ1lZWVktTU0tREQnKSxcclxuICAgICAgICAgICAgY2hlY2tsaXN0VHlwZTogXCJhaVwiLFxyXG4gICAgICAgICAgICBzb3VyY2VDaGVja0xpc3RfaWQ6IFwidmVoaWNsZV9jaGVja19pblwiLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXHJcbiAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcbiAgICB0aGlzLnNldFBhZ2VEYXRhKCk7XHJcbiAgICAgIHRoaXMudXNlckRldGFpbHMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXNlci1pbmZvXCIpIHx8IFwiXCIpXHJcbiAgICBpZih0aGlzLnF1ZXJ5UGFyYW1zLmNvdmVyYWdlID09PSd1c2VyJyl7XHJcbiAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KFwiZmlsdGVydHlwZVwiKT8uc2V0VmFsdWUoJ1RlYW1zJylcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW1zLmNvdmVyYWdlID09PSAnc3RvcmVzJykge1xyXG4gICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldChcImZpbHRlcnR5cGVcIik/LnNldFZhbHVlKCdDbHVzdGVycycpXHJcbiAgICB9XHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGE/LmNsaWVudCkge1xyXG4gICAgICAgICAgdGhpcy5oZWFkZXJGaWx0ZXJzID0gZGF0YTtcclxuICAgICAgICAgIGlmICghdGhpcy5xdWVyeVBhcmFtcy5DaGVja2xpc3REYXRlICYmIHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQgJiYgKHRoaXMuaGVhZGVyRmlsdGVycz8uY2xpZW50ID09PSBcIjQ1OVwiIHx8IHRoaXMuaGVhZGVyRmlsdGVycz8uY2xpZW50ID09PSBcIjQ2NFwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlID0ge1xyXG4gICAgICAgICAgICAgIHN0YXJ0RGF0ZTogdGhpcy5kYXlqcygpLmZvcm1hdCgnREQtTU0tWVlZWScpLFxyXG4gICAgICAgICAgICAgIGVuZERhdGU6IHRoaXMuZGF5anMoKS5mb3JtYXQoJ0RELU1NLVlZWVknKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdmcm9tRGF0ZScpPy5zZXRWYWx1ZShkYXlqcyh0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLnN0YXJ0RGF0ZSwgJ0RELU1NLVlZWVknKS5mb3JtYXQoJ1lZWVktTU0tREQnKSlcclxuICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3RvRGF0ZScpPy5zZXRWYWx1ZShkYXlqcyh0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLmVuZERhdGUsICdERC1NTS1ZWVlZJykuZm9ybWF0KCdZWVlZLU1NLUREJykpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmNsaWVudERldGFpbHMoKTtcclxuICAgICAgICAgIHRoaXMuZ2V0QWxsR3JvdXBzKCk7XHJcbiAgICAgICAgICB0aGlzLmdldEFsbFN0b3JlcygpO1xyXG4gICAgICAgICAgdGhpcy5nZXRBbGxVc2VycygpO1xyXG4gICAgICAgICAgdGhpcy5nZXRBbGxUZWFtcygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgdXNlcmluZm8gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXNlci1pbmZvXCIpIHx8IFwiXCIpXHJcbiAgICAgICAgICBpZiAodXNlcmluZm8gJiYgdXNlcmluZm8/LmNsaWVudElkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQgPSB1c2VyaW5mbz8uY2xpZW50SWRcclxuICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnF1ZXJ5UGFyYW1zLkNoZWNrbGlzdERhdGUgJiYgdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCAmJiAodGhpcy5oZWFkZXJGaWx0ZXJzPy5jbGllbnQgPT09IFwiNDU5XCIgfHwgdGhpcy5oZWFkZXJGaWx0ZXJzPy5jbGllbnQgPT09IFwiNDY0XCIpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZTogdGhpcy5kYXlqcygpLmZvcm1hdCgnREQtTU0tWVlZWScpLFxyXG4gICAgICAgICAgICAgICAgZW5kRGF0ZTogdGhpcy5kYXlqcygpLmZvcm1hdCgnREQtTU0tWVlZWScpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdmcm9tRGF0ZScpPy5zZXRWYWx1ZShkYXlqcyh0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLnN0YXJ0RGF0ZSwgJ0RELU1NLVlZWVknKS5mb3JtYXQoJ1lZWVktTU0tREQnKSlcclxuICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgndG9EYXRlJyk/LnNldFZhbHVlKGRheWpzKHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UuZW5kRGF0ZSwgJ0RELU1NLVlZWVknKS5mb3JtYXQoJ1lZWVktTU0tREQnKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNsaWVudERldGFpbHMoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRBbGxHcm91cHMoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRBbGxTdG9yZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRBbGxVc2VycygpO1xyXG4gICAgICAgICAgICB0aGlzLmdldEFsbFRlYW1zKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGNoZWNrTm90aWZpY2F0aW9ucygpIHtcclxuICB0aGlzLnRyYXhTZXJ2aWNlLmNoZWNrTm90aWZpY2F0aW9uQ291bnQodGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCkuc3Vic2NyaWJlKHtcclxuICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0SWQpXHJcbiAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwICYmIHJlcy5kYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLm5vdGlmeUNvdW50ID0gdGhpcy5ub3RpZnlDb3VudCArIHJlcy5kYXRhLmxlbmd0aDtcclxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB0aGlzLm5vdGlmeShyZXMuZGF0YSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFNjaGVkdWxlIHRoZSBuZXh0IGNhbGxcclxuICAgIHRoaXMudGltZW91dElkID0gICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY2hlY2tOb3RpZmljYXRpb25zKCksIDEwMDAwKTtcclxuICAgIH0sXHJcbiAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnIpO1xyXG4gICAgICB0aGlzLnJlcXVlc3RQZXJtaXNzaW9uKCk7XHJcblxyXG4gICAgICAvLyBSZXRyeSBldmVuIG9uIGVycm9yXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jaGVja05vdGlmaWNhdGlvbnMoKSwgMTAwMDApO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcbiAgc2V0UGFnZURhdGEoKSB7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnVwZGF0ZVRpdGxlKCdHYWxsZXJ5Jyk7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldERlc2NyaXB0aW9uKFwiXCIpO1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRCcmVhZGNydW1icyhbXHJcbiAgICAgIHsgdGl0bGU6IFwiVGFuZ28gVHJheFwiLCBwYXRoOiBcIi9tYW5hZ2UvdHJheC9kYXNoYm9hcmRcIiwgaXNBY3RpdmU6IGZhbHNlLCBpc1NlcGFyYXRvcjogZmFsc2UgfSxcclxuICAgICAgeyB0aXRsZTogXCJUYW5nbyBUcmF4XCIsIHBhdGg6IFwiL21hbmFnZS90cmF4L2Rhc2hib2FyZFwiLCBpc0FjdGl2ZTogZmFsc2UsIGlzU2VwYXJhdG9yOiB0cnVlIH0sXHJcbiAgICBdKTtcclxuXHJcbiAgfVxyXG4gIGdldEFsbEdyb3VwcygpIHtcclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0Y2x1c3RlcnMoeyBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCwgZ3JvdXA6IFtdLCBjaXR5OiBbXSB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5DbHVzdGVyTGlzdCA9IHJlcy5kYXRhLmdyb3VwRGF0YVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLkNsdXN0ZXJMaXN0ID0gW11cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIGdldEFsbFRlYW1zKCkge1xyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRBbGxUZWFtcyh0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5UZWFtc0xpc3QgPSByZXMuZGF0YVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLlRlYW1zTGlzdCA9IFtdXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBjbGllbnREZXRhaWxzKCkge1xyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRjbGllbnQoeyBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5jbGllbnREYXRhID0gcmVzLmRhdGEucmVzdWx0XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcmVkb0NoYW5nZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KFwidmlld1JlZG9cIik/LnNldFZhbHVlKHRydWUpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldFN0b3Jlc2xpc3QoeyBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCwgY2x1c3RlcnM6IHRoaXMuZ3JvdXBzLCBjaXR5OiBbXSB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSByZXMuZGF0YS5zdG9yZXNEYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlcyA9IHJlcy5kYXRhLnN0b3Jlc0RhdGFcclxuICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZSh0aGlzLnN0b3JlTGlzdClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KFwidmlld1JlZG9cIik/LnNldFZhbHVlKGZhbHNlKVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGZsYWdDaGFuZ2VkKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldChcInZpZXdGbGFnXCIpPy5zZXRWYWx1ZSh0cnVlKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoXCJ2aWV3RmxhZ1wiKT8uc2V0VmFsdWUoZmFsc2UpXHJcbiAgICB9XHJcbiAgfVxyXG4gIG9uY2hlY2tsaXN0cmVzZXQoKSB7XHJcblxyXG4gICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoXCJmaWx0ZXJcIik/LnNldFZhbHVlKCcnKVxyXG4gICAgdGhpcy5hbnN3ZXJGaWx0ZXIgPSBbXVxyXG4gICAgdGhpcy5zaG93bXVsdGkgPSB0cnVlXHJcbiAgICB0aGlzLnNob3dzaW5nbGUgPSBmYWxzZVxyXG4gICAgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudHlwZSA9PT0gJ2NoZWNrbGlzdCcpIHtcclxuICAgICAgdGhpcy5nZXRDaGVja2xpc3RRQShmYWxzZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdldFRhc2tRQSh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGUpXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcmVzZXRWYWxpZGF0aW9uKCkge1xyXG4gICAgdGhpcy5pc0N1c3RvbURhdGUgPSAobTogZGF5anMuRGF5anMpID0+IHtcclxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGdpdmVuIGRhdGUgaXMgYmVmb3JlIHllc3RlcmRheVxyXG4gICAgICByZXR1cm4gbS5pc0FmdGVyKHRoaXMuZGF5anMoKSwgJ2RheScpID8gJ2ludmFsaWQtZGF0ZScgOiBmYWxzZTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBvblN0YXJ0RGF0ZUNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5kYXlqcyhldmVudC5zdGFydERhdGUpLmlzVmFsaWQoKSkge1xyXG4gICAgICBsZXQgY2xpZW50aW5mbyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJjbGllbnQtZGV0YWlsc1wiKSB8fCBcIlwiKVxyXG4gICAgICBsZXQgdXNlcmluZm8gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXNlci1pbmZvXCIpIHx8IFwiXCIpXHJcbiAgICAgIGlmIChjbGllbnRpbmZvIHx8IHVzZXJpbmZvKSB7XHJcbiAgICAgICAgaWYgKGNsaWVudGluZm8/LnRyYXhEYXRlUmFuZ2UgPT09IDcgfHwgdXNlcmluZm8/LnRyYXhEYXRlUmFuZ2UgPT09IDcpIHtcclxuICAgICAgICAgIHRoaXMuaXNDdXN0b21EYXRlID0gKG06IGRheWpzLkRheWpzKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmFsaWREYXRlID1cclxuICAgICAgICAgICAgICBtID4gdGhpcy5kYXlqcygpIHx8IG0gPiB0aGlzLmRheWpzKGV2ZW50LnN0YXJ0RGF0ZS5hZGQoMiwgXCJkYXlzXCIpKTtcclxuICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWREYXRlID8gXCJpbnZhbGlkLWRhdGVcIiA6IGZhbHNlO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5pc0N1c3RvbURhdGUgPSAobTogZGF5anMuRGF5anMpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaXNWYWxpZERhdGUgPVxyXG4gICAgICAgICAgICAgIG0gPiB0aGlzLmRheWpzKCkgfHwgbSA+IHRoaXMuZGF5anMoZXZlbnQuc3RhcnREYXRlLmFkZCgzMCwgXCJkYXlzXCIpKTtcclxuICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWREYXRlID8gXCJpbnZhbGlkLWRhdGVcIiA6IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIC8vIHRoaXMuZ2V0QWxsQ2hlY2tMaXN0cyhmYWxzZSlcclxuICB9XHJcbiAgc2VsZWN0QWxsU3RvcmUoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XHJcbiAgICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5mb3JFYWNoKChvYmo6IGFueSkgPT4gKG9iai5jaGVja2VkID0gdGhpcy5zZWxlY3RBbGwpKTtcclxuICAgICAgbGV0IHN0b3JlID0gdGhpcy5tb2JpbGV1c2FnZURhdGFMaXN0LmZpbHRlcigoZWw6IGFueSkgPT4gZWwuY2hlY2tlZClcclxuICAgICAgY29uc3QgY2hhbmdlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzdG9yZSkpXHJcbiAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUoY2hhbmdlKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3pvbmVMaXN0Jyk/LnNldFZhbHVlKFtdKVxyXG4gICAgICB0aGlzLnNlbGVjdEFsbCA9IGZhbHNlXHJcbiAgICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5mb3JFYWNoKChvYmo6IGFueSkgPT4gKG9iai5jaGVja2VkID0gdGhpcy5zZWxlY3RBbGwpKTtcclxuICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZShbXSlcclxuICAgIH1cclxuICB9XHJcbiAgdXBkYXRlQ2hlY2soZXZlbnQ6IGFueSwgc3RvcmVkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZWxlLnN0b3JlSWQgPT09IHN0b3JlZGF0YS5zdG9yZUlkKSB7XHJcbiAgICAgICAgZWxlLmNoZWNrZWQgPSBldmVudC50YXJnZXQuY2hlY2tlZDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBsZXQgc3RvcmUgPSB0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QuZmlsdGVyKChkYXRhOiBhbnkpID0+IGRhdGEuY2hlY2tlZCk7XHJcbiAgICBjb25zdCBjaGFuZ2UgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHN0b3JlKSlcclxuXHJcbiAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKGNoYW5nZSlcclxuICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCd6b25lTGlzdCcpPy5zZXRWYWx1ZShbXSlcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICB0aGlzLnNlbGVjdEFsbCA9IHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5ldmVyeSgob2JqOiBhbnkpID0+IG9iai5jaGVja2VkKTtcclxuXHJcbiAgfVxyXG4gIGNyZWF0ZUZvcm0oKSB7XHJcbiAgICB0aGlzLmdhbGxlcnlGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGZyb21EYXRlOiBbZGF5anModGhpcy5zZWxlY3RlZERhdGVSYW5nZS5zdGFydERhdGUsIFwiREQtTU0tWVlZWVwiKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpXSxcclxuICAgICAgdG9EYXRlOiBbZGF5anModGhpcy5zZWxlY3RlZERhdGVSYW5nZS5lbmREYXRlLCBcIkRELU1NLVlZWVlcIikuZm9ybWF0KCdZWVlZLU1NLUREJyldLFxyXG4gICAgICB0eXBlOiAnY2hlY2tsaXN0JyxcclxuICAgICAgZmlsdGVydHlwZTogJ0NsdXN0ZXJzJyxcclxuICAgICAgY2hlY2tsaXN0TmFtZTogJycsXHJcbiAgICAgIHN0b3JlTGlzdDogW3RoaXMuc3RvcmVzXSxcclxuICAgICAgdXNlckxpc3Q6IFt0aGlzLnVzZXJMaXN0XSxcclxuICAgICAgYW5zd2VyVHlwZTogWydhbGwnXSxcclxuICAgICAgdmlld0ZsYWc6IFtmYWxzZV0sXHJcbiAgICAgIHZpZXdSZWRvOiBbZmFsc2VdLFxyXG4gICAgICBjaGVja0xpc3RUeXBlOiBcImN1c3RvbVwiLFxyXG4gICAgICBzb3VyY2VDaGVja0xpc3RfaWQ6IFwiXCIsXHJcbiAgICAgIENsdXN0ZXJMaXN0OiBbdGhpcy5ncm91cHNdLFxyXG4gICAgICBUZWFtc0xpc3Q6IFt0aGlzLlRlYW1zTGlzdF0sXHJcbiAgICAgIGNoZWNrTGlzdERlc2NyaXB0aW9uOiBcIlwiLFxyXG4gICAgICBmaWx0ZXI6IFwiXCIsXHJcbiAgICAgIHpvbmVMaXN0OiBbdGhpcy56b25lTGlzdF1cclxuICAgIH0pXHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlKVxyXG5cclxuICB9XHJcblxyXG4gIGRhdGVjaGFuZ2UoZXZlbnQ6IFRpbWVQZXJpb2QpIHtcclxuICAgIGlmICghZXZlbnQuZW5kRGF0ZSB8fCAhZXZlbnQuc3RhcnREYXRlKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5yZW1vdmVRdWVyeVBhcmFtcygpXHJcbiAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbigpO1xyXG4gICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2Zyb21EYXRlJyk/LnNldFZhbHVlKGV2ZW50LnN0YXJ0RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKSlcclxuICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCd0b0RhdGUnKT8uc2V0VmFsdWUoZXZlbnQuZW5kRGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKSlcclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0U3RvcmVzbGlzdCh7IGNsaWVudElkOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LCBjbHVzdGVyczogdGhpcy5ncm91cHMsIGNpdHk6IFtdIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHJlcy5kYXRhLnN0b3Jlc0RhdGE7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlcyA9IHJlcy5kYXRhLnN0b3Jlc0RhdGFcclxuICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUodGhpcy5zdG9yZUxpc3QpXHJcbiAgICAgICAgICBpZiAodGhpcy5xdWVyeVBhcmFtcy5jaGVja2xpc3RUeXBlID09ICd0YXNrJyB8fCB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICd0YXNrJykge1xyXG4gICAgICAgICAgICB0aGlzLmdldEFsbFRhc2tzKGZhbHNlKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRBbGxDaGVja0xpc3RzKGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMucXVlcnlQYXJhbXMuY2hlY2tsaXN0VHlwZSA9PSAndGFzaycgfHwgdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlID09PSAndGFzaycpIHtcclxuICAgICAgICAgIHRoaXMuZ2V0QWxsVGFza3MoZmFsc2UpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZ2V0QWxsQ2hlY2tMaXN0cyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICB9XHJcbiAgZ2V0QWxsVXNlcnMoKSB7XHJcbiAgICBsZXQgdGVhbXNMaXN0ID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5UZWFtc0xpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEudGVhbU5hbWUpXHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldHVzZXJzKHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsIHRlYW1zOiB0ZWFtc0xpc3QgfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW1zLnVzZXJFbWFpbCkge1xyXG4gICAgICAgICAgICBsZXQgZ2V0dXNlciA9IHJlcy5kYXRhLmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZS51c2VyRW1haWwgPT09IHRoaXMucXVlcnlQYXJhbXMudXNlckVtYWlsKVxyXG4gICAgICAgICAgICB0aGlzLnVzZXJMaXN0ID0gZ2V0dXNlcjtcclxuICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3VzZXJMaXN0Jyk/LnNldFZhbHVlKHRoaXMudXNlckxpc3QpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW1zLmNoZWNrbGlzdFR5cGUgPT0gJ3Rhc2snKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRBbGxUYXNrcyh0cnVlKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0QWxsQ2hlY2tMaXN0cyh0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy51c2VyTGlzdCA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgndXNlckxpc3QnKT8uc2V0VmFsdWUodGhpcy51c2VyTGlzdClcclxuICAgICAgICAgICAgaWYgKHRoaXMucXVlcnlQYXJhbXMuY2hlY2tsaXN0VHlwZSA9PSAndGFzaycpIHtcclxuICAgICAgICAgICAgICB0aGlzLmdldEFsbFRhc2tzKHRydWUpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRBbGxDaGVja0xpc3RzKHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuXHJcblxyXG5cclxuICB9XHJcbiAgZ2V0QWxsU3RvcmVzKCkge1xyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRTdG9yZXNsaXN0KHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsIGNsdXN0ZXJzOiB0aGlzLmdyb3VwcywgY2l0eTogW10gfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gcmVzLmRhdGEuc3RvcmVzRGF0YTtcclxuICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW1zLnN0b3JlSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3VzZXJMaXN0Jyk/LnNldFZhbHVlKFtdKVxyXG4gICAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHJlcy5kYXRhLnN0b3Jlc0RhdGE7XHJcbiAgICAgICAgICAgIGxldCBnZXRzdG9yZSA9IHRoaXMuc3RvcmVMaXN0LmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZS5zdG9yZUlkID09PSB0aGlzLnF1ZXJ5UGFyYW1zLnN0b3JlSWQpXHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmVzID0gZ2V0c3RvcmVcclxuICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZSh0aGlzLnN0b3JlcylcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW1zLmNoZWNrbGlzdFR5cGUgPT0gJ3Rhc2snKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRBbGxUYXNrcyh0cnVlKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0QWxsQ2hlY2tMaXN0cyh0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnF1ZXJ5UGFyYW1zLnVzZXJFbWFpbCkge1xyXG4gICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKFtdKVxyXG4gICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnZmlsdGVydHlwZScpPy5zZXRWYWx1ZSgnVGVhbXMnKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZXMgPSByZXMuZGF0YS5zdG9yZXNEYXRhXHJcbiAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUodGhpcy5zdG9yZUxpc3QpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW1zLmNoZWNrbGlzdFR5cGUgPT0gJ3Rhc2snKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRBbGxUYXNrcyh0cnVlKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0QWxsQ2hlY2tMaXN0cyh0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IFtdO1xyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZSxcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuXHJcbiAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLnZpZXdsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZSxcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEFsbENoZWNrTGlzdHModHlwZTogYW55KSB7XHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5zdG9yZXM/Lm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnN0b3JlSWQpXHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBmcm9tRGF0ZTogdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2Zyb21EYXRlJyk/LnZhbHVlLFxyXG4gICAgICB0b0RhdGU6IHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCd0b0RhdGUnKT8udmFsdWUsXHJcbiAgICAgIHN0b3JlSWQ6IHN0b3JlcyxcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycz8uY2xpZW50LFxyXG4gICAgICBzb3J0Q29sdW1uTmFtZTogXCJjaGVja0xpc3ROYW1lXCIsXHJcbiAgICAgIHNvcnRCeTogMVxyXG4gICAgfVxyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRDaGVja2xpc3RzKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdHMgPSByZXMuZGF0YS5jaGVja2xpc3REYXRhXHJcbiAgICAgICAgICBpZiAodGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCA9PT0gXCI1OVwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tsaXN0cyA9IFsuLi50aGlzLmNoZWNrbGlzdHMsIC4uLlt7XHJcbiAgICAgICAgICAgICAgXCJfaWRcIjogXCI2NzQ2Yzg4OWY1YWRjM2IzMmYwZDdlNTdcIixcclxuICAgICAgICAgICAgICBcInNvdXJjZUNoZWNrTGlzdF9pZFwiOiBcImN1c3RvbWVydHJpYWxcIixcclxuICAgICAgICAgICAgICBcImNoZWNrTGlzdE5hbWVcIjogXCJDdXN0b21lciBUcmlhbFwiLFxyXG4gICAgICAgICAgICAgIFwiY2hlY2tMaXN0VHlwZVwiOiBcIkFJXCIsXHJcbiAgICAgICAgICAgICAgXCJjcmVhdGVkQnlOYW1lXCI6IFwiQmVqYW5cIixcclxuICAgICAgICAgICAgICBcInN0b3JlQ291bnRcIjogMCxcclxuICAgICAgICAgICAgICBcInNjaGVkdWxlUmVwZWF0ZWRUeXBlXCI6IFwiZGFpbHlcIixcclxuICAgICAgICAgICAgICBcInNjaGVkdWxlU3RhcnRUaW1lXCI6IFwiMTA6MDAgQU1cIixcclxuICAgICAgICAgICAgICBcInNjaGVkdWxlRW5kVGltZVwiOiBcIjEwOjAwIFBNXCIsXHJcbiAgICAgICAgICAgICAgXCJjaGVja0xpc3REZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgIFwicHVibGlzaFwiOiB0cnVlXHJcbiAgICAgICAgICAgIH1dXVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5xdWVyeVBhcmFtcy5zb3VyY2VDaGVja0xpc3RfaWQgJiYgdGhpcy5xdWVyeVBhcmFtcy5jaGVja2xpc3RUeXBlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3NvdXJjZUNoZWNrTGlzdF9pZCcpPy5zZXRWYWx1ZSh0aGlzLnF1ZXJ5UGFyYW1zLnNvdXJjZUNoZWNrTGlzdF9pZClcclxuICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnY2hlY2tMaXN0VHlwZScpPy5zZXRWYWx1ZSh0aGlzLnF1ZXJ5UGFyYW1zLmNoZWNrbGlzdFR5cGUpXHJcbiAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3R5cGUnKT8uc2V0VmFsdWUoXCJjaGVja2xpc3RcIilcclxuXHJcbiAgICAgICAgICAgICAgbGV0IGdldGNoZWNrbGlzdCA9IHRoaXMuY2hlY2tsaXN0cy5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGUuc291cmNlQ2hlY2tMaXN0X2lkID09PSB0aGlzLnF1ZXJ5UGFyYW1zLnNvdXJjZUNoZWNrTGlzdF9pZClcclxuICAgICAgICAgICAgICBpZiAoZ2V0Y2hlY2tsaXN0ICYmIGdldGNoZWNrbGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Y2hlY2tsaXN0WzBdLmNoZWNrTGlzdFR5cGUgPT09IFwiQUlcIikge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNob3dmbGFnID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja2xpc3ROYW1lJyk/LnNldFZhbHVlKGdldGNoZWNrbGlzdFswXT8uY2hlY2tMaXN0TmFtZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja0xpc3REZXNjcmlwdGlvbicpPy5zZXRWYWx1ZShnZXRjaGVja2xpc3RbMF0/LmNoZWNrTGlzdERlc2NyaXB0aW9uKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja2xpc3ROYW1lID0gZ2V0Y2hlY2tsaXN0WzBdPy5jaGVja0xpc3ROYW1lXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW1zLmNoZWNrbGlzdFR5cGUgPT09ICdzdG9yZW9wZW5hbmRjbG9zZScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ID0gJ3N0b3Jlb3BlbmFuZGNsb3NlJ1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZU9wZW5jbG9zZWxpc3QoZmFsc2UpXHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmJveGltYWdlQ2hlY2tsaXN0LmluY2x1ZGVzKHRoaXMucXVlcnlQYXJhbXMuY2hlY2tsaXN0VHlwZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ID0gdGhpcy5xdWVyeVBhcmFtcy5jaGVja2xpc3RUeXBlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXVlYWxlcnRsaXN0KGZhbHNlKVxyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52aWRlb0NoZWNrbGlzdC5pbmNsdWRlcyh0aGlzLnF1ZXJ5UGFyYW1zLmNoZWNrbGlzdFR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCA9IHRoaXMucXVlcnlQYXJhbXMuY2hlY2tsaXN0VHlwZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tZXJ1bmF0dGVuZGVkbGlzdChmYWxzZSlcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW1hZ2VDaGVja2xpc3QuaW5jbHVkZXModGhpcy5xdWVyeVBhcmFtcy5jaGVja2xpc3RUeXBlKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLnF1ZXJ5UGFyYW1zLmNoZWNrbGlzdFR5cGU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldG1vYmlsZVVzYWdlRGF0YWxpc3QoZmFsc2UpXHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUgJiYgdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja0xpc3RUeXBlICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnY2hlY2tMaXN0VHlwZScpPy5zZXRWYWx1ZSh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrTGlzdFR5cGUpXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja0xpc3RUeXBlJyk/LnNldFZhbHVlKHRoaXMuY2hlY2tsaXN0c1swXT8uY2hlY2tMaXN0VHlwZSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUgJiYgdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZ2V0Y2hlY2tsaXN0ID0gdGhpcy5jaGVja2xpc3RzLmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZS5jaGVja0xpc3ROYW1lID09PSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUpXHJcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Y2hlY2tsaXN0ICYmIGdldGNoZWNrbGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChnZXRjaGVja2xpc3RbMF0uY2hlY2tMaXN0VHlwZSA9PT0gXCJBSVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93ZmxhZyA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2ZpbHRlcnR5cGUnKT8uc2V0VmFsdWUoZ2V0Y2hlY2tsaXN0WzBdPy5jb3ZlcmFnZSA9PT0gJ3VzZXInID8gXCJUZWFtc1wiIDogXCJDbHVzdGVyc1wiKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnY2hlY2tMaXN0VHlwZScpPy5zZXRWYWx1ZShnZXRjaGVja2xpc3RbMF0/LmNoZWNrTGlzdFR5cGUpXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja2xpc3ROYW1lJyk/LnNldFZhbHVlKGdldGNoZWNrbGlzdFswXT8uY2hlY2tMaXN0TmFtZSlcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja2xpc3ROYW1lID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzb3VyY2VDaGVja0xpc3RfaWQnKT8uc2V0VmFsdWUoZ2V0Y2hlY2tsaXN0WzBdPy5zb3VyY2VDaGVja0xpc3RfaWQpXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja0xpc3REZXNjcmlwdGlvbicpPy5zZXRWYWx1ZShnZXRjaGVja2xpc3RbMF0/LmNoZWNrTGlzdERlc2NyaXB0aW9uKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2ZpbHRlcnR5cGUnKT8uc2V0VmFsdWUodGhpcy5jaGVja2xpc3RzWzBdPy5jb3ZlcmFnZSA9PT0gJ3VzZXInID8gXCJUZWFtc1wiIDogXCJDbHVzdGVyc1wiKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnY2hlY2tMaXN0VHlwZScpPy5zZXRWYWx1ZSh0aGlzLmNoZWNrbGlzdHNbMF0/LmNoZWNrTGlzdFR5cGUpXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja2xpc3ROYW1lJyk/LnNldFZhbHVlKHRoaXMuY2hlY2tsaXN0c1swXT8uY2hlY2tMaXN0TmFtZSlcclxuICAgICAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrTGlzdERlc2NyaXB0aW9uJyk/LnNldFZhbHVlKHRoaXMuY2hlY2tsaXN0c1swXT8uY2hlY2tMaXN0RGVzY3JpcHRpb24pXHJcblxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrbGlzdE5hbWUgPSB0aGlzLmNoZWNrbGlzdHNbMF0/LmNoZWNrTGlzdE5hbWVcclxuICAgICAgICAgICAgICAgICAgbGV0IGdldGNoZWNrbGlzdCA9IHRoaXMuY2hlY2tsaXN0cy5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGUuY2hlY2tMaXN0TmFtZSA9PT0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lKVxyXG4gICAgICAgICAgICAgICAgICBpZiAoZ2V0Y2hlY2tsaXN0ICYmIGdldGNoZWNrbGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdldGNoZWNrbGlzdFswXS5jaGVja0xpc3RUeXBlID09PSBcIkFJXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd2ZsYWcgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrTGlzdERlc2NyaXB0aW9uID0gZ2V0Y2hlY2tsaXN0WzBdPy5jaGVja0xpc3REZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja0xpc3REZXNjcmlwdGlvbicpPy5zZXRWYWx1ZShnZXRjaGVja2xpc3RbMF0/LmNoZWNrTGlzdERlc2NyaXB0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzb3VyY2VDaGVja0xpc3RfaWQnKT8uc2V0VmFsdWUoZ2V0Y2hlY2tsaXN0WzBdPy5zb3VyY2VDaGVja0xpc3RfaWQpXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnZmlsdGVydHlwZScpPy5zZXRWYWx1ZSh0aGlzLmNoZWNrbGlzdHNbMF0/LmNvdmVyYWdlID09PSAndXNlcicgPyBcIlRlYW1zXCIgOiBcIkNsdXN0ZXJzXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnY2hlY2tMaXN0VHlwZScpPy5zZXRWYWx1ZSh0aGlzLmNoZWNrbGlzdHNbMF0/LmNoZWNrTGlzdFR5cGUpXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGVja2xpc3RzWzBdLmNoZWNrTGlzdFR5cGUgPT09IFwiQUlcIikge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNob3dmbGFnID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja2xpc3ROYW1lJyk/LnNldFZhbHVlKHRoaXMuY2hlY2tsaXN0c1swXT8uY2hlY2tMaXN0TmFtZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja0xpc3REZXNjcmlwdGlvbicpPy5zZXRWYWx1ZSh0aGlzLmNoZWNrbGlzdHNbMF0/LmNoZWNrTGlzdERlc2NyaXB0aW9uKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja2xpc3ROYW1lID0gdGhpcy5jaGVja2xpc3RzWzBdPy5jaGVja0xpc3ROYW1lXHJcbiAgICAgICAgICAgICAgICBsZXQgZ2V0Y2hlY2tsaXN0ID0gdGhpcy5jaGVja2xpc3RzLmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZS5jaGVja0xpc3ROYW1lID09PSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUpXHJcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Y2hlY2tsaXN0ICYmIGdldGNoZWNrbGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0RGVzY3JpcHRpb24gPSBnZXRjaGVja2xpc3RbMF0/LmNoZWNrTGlzdERlc2NyaXB0aW9uXHJcblxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc291cmNlQ2hlY2tMaXN0X2lkJyk/LnNldFZhbHVlKGdldGNoZWNrbGlzdFswXT8uc291cmNlQ2hlY2tMaXN0X2lkKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKClcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCA9PT0gJ3N0b3Jlb3BlbmFuZGNsb3NlJykge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ID0gJ3N0b3Jlb3BlbmFuZGNsb3NlJ1xyXG4gICAgICAgICAgICAgIHRoaXMuc3RvcmVPcGVuY2xvc2VsaXN0KGZhbHNlKVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYm94aW1hZ2VDaGVja2xpc3QuaW5jbHVkZXModGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3pvbmVMaXN0Jyk/LnNldFZhbHVlKFtdKVxyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWRcclxuICAgICAgICAgICAgICB0aGlzLnF1ZXVlYWxlcnRsaXN0KGZhbHNlKVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW1hZ2VDaGVja2xpc3QuaW5jbHVkZXModGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZDtcclxuICAgICAgICAgICAgICB0aGlzLmdldG1vYmlsZVVzYWdlRGF0YWxpc3QoZmFsc2UpXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52aWRlb0NoZWNrbGlzdC5pbmNsdWRlcyh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdCA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkO1xyXG4gICAgICAgICAgICAgIHRoaXMuY3VzdG9tZXJ1bmF0dGVuZGVkbGlzdChmYWxzZSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdCA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudHlwZSA9PT0gJ2NoZWNrbGlzdCcgPyBcImN1c3RvbVwiIDogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlO1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlID09PSAnY2hlY2tsaXN0Jykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlID09PSAnQ2x1c3RlcnMnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3VzZXJMaXN0Jyk/LnNldFZhbHVlKFtdKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ZHJvcGRvd24oKTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKFtdKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlckxpc3Rkcm9wZG93bigpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0b3JlTGlzdGRyb3Bkb3duVGFzaygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdHMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja2xpc3ROYW1lJyk/LnNldFZhbHVlKCcnKVxyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlXHJcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGVja2xpc3RzID0gW107XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgcmVtb3ZlUXVlcnlQYXJhbXMoKSB7XHJcbiAgICB0aGlzLnF1ZXJ5UGFyYW1zID0ge31cclxuICAgIGNvbnN0IHVybFdpdGhvdXRQYXJhbXMgPSB0aGlzLmxvY2F0aW9uLnBhdGgoKS5zcGxpdCgnPycpWzBdO1xyXG4gICAgdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodXJsV2l0aG91dFBhcmFtcyk7XHJcbiAgfVxyXG4gIG9uVGVhbXNTZWxlY3QoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ1RlYW1zTGlzdCcpPy5zZXRWYWx1ZShldmVudClcclxuICAgIGxldCB0ZWFtc0xpc3QgPSBldmVudC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS50ZWFtTmFtZSlcclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0dXNlcnMoeyBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCwgdGVhbXM6IHRlYW1zTGlzdCB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy51c2VyTGlzdCA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3VzZXJMaXN0Jyk/LnNldFZhbHVlKHRoaXMudXNlckxpc3QpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBvbmdyb3VwU2VsZWN0KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMucmVtb3ZlUXVlcnlQYXJhbXMoKVxyXG4gICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ0NsdXN0ZXJMaXN0Jyk/LnNldFZhbHVlKGV2ZW50KVxyXG4gICAgdGhpcy5ncm91cHMgPSBldmVudC5tYXAoKGVsOiBhbnkpID0+IGVsLmdyb3VwTmFtZSlcclxuICAgIC8vIHRoaXMuZ2V0QWxsU3RvcmVzKClcclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0U3RvcmVzbGlzdCh7IGNsaWVudElkOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LCBjbHVzdGVyczogdGhpcy5ncm91cHMsIGNpdHk6IFtdIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHJlcy5kYXRhLnN0b3Jlc0RhdGE7XHJcbiAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKHRoaXMuc3RvcmVMaXN0KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICBmaWx0ZXJDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5yZW1vdmVRdWVyeVBhcmFtcygpXHJcbiAgICBpZiAoZXZlbnQgPT09ICdUZWFtcycpIHtcclxuICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlcycpPy5zZXRWYWx1ZShbXSlcclxuICAgICAgbGV0IHRlYW1zTGlzdCA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuVGVhbXNMaXN0Lm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnRlYW1OYW1lKVxyXG4gICAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldHVzZXJzKHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsIHRlYW1zOiB0ZWFtc0xpc3QgfSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlckxpc3QgPSByZXMuZGF0YVxyXG4gICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgndXNlckxpc3QnKT8uc2V0VmFsdWUocmVzLmRhdGEpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3VzZXJMaXN0Jyk/LnNldFZhbHVlKFtdKVxyXG4gICAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldFN0b3Jlc2xpc3QoeyBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCwgY2x1c3RlcnM6IHRoaXMuZ3JvdXBzLCBjaXR5OiBbXSB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSByZXMuZGF0YS5zdG9yZXNEYXRhXHJcbiAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUocmVzLmRhdGEuc3RvcmVzRGF0YSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnZmlsdGVydHlwZScpPy5zZXRWYWx1ZShldmVudClcclxuICB9XHJcbiAgb256b25lU2VsZWN0KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMucmVtb3ZlUXVlcnlQYXJhbXMoKVxyXG4gICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3pvbmVMaXN0Jyk/LnNldFZhbHVlKGV2ZW50KVxyXG4gIH1cclxuICBhcHByb3ZlRmlsdGVyQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0U3RvcmVzbGlzdCh7IGNsaWVudElkOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LCBjbHVzdGVyczogdGhpcy5ncm91cHMsIGNpdHk6IFtdIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHJlcy5kYXRhLnN0b3Jlc0RhdGFcclxuICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUocmVzLmRhdGEuc3RvcmVzRGF0YSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIG9uU3RvcmVTZWxlY3QoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5yZW1vdmVRdWVyeVBhcmFtcygpXHJcbiAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnem9uZUxpc3QnKT8uc2V0VmFsdWUoW10pXHJcbiAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKGV2ZW50KVxyXG5cclxuICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5mb3JFYWNoKChzdG9yZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGlzU3RvcmVTZWxlY3RlZCA9IGV2ZW50LnNvbWUoKHNlbGVjdGVkU3RvcmU6IGFueSkgPT4gc2VsZWN0ZWRTdG9yZS5zdG9yZUlkID09PSBzdG9yZS5zdG9yZUlkKTtcclxuICAgICAgaWYgKGlzU3RvcmVTZWxlY3RlZCkge1xyXG4gICAgICAgIHN0b3JlLmNoZWNrZWQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHN0b3JlLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNlbGVjdEFsbCA9IHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5ldmVyeSgob2JqOiBhbnkpID0+IG9iai5jaGVja2VkKTtcclxuICAgIGlmICh0aGlzLnNlbGVjdCA9PT0gJ3F1ZXVlYWxlcnQnKSB7XHJcbiAgICAgIHRoaXMuZ2V0em9uZXRsaXN0KClcclxuICAgIH1cclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgb25Vc2VyU2VsZWN0KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMucmVtb3ZlUXVlcnlQYXJhbXMoKVxyXG4gICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3VzZXJMaXN0Jyk/LnNldFZhbHVlKGV2ZW50KVxyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgc3RvcmVMaXN0ZHJvcGRvd25UYXNrKCkge1xyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRTdG9yZXNsaXN0KHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsIGNsdXN0ZXJzOiB0aGlzLmdyb3VwcywgY2l0eTogW10gfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIGxldCBzdG9yZXMgPSByZXMuZGF0YS5zdG9yZXNEYXRhLm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnN0b3JlSWQpXHJcbiAgICAgICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgICAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICAgICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlLCAvLyBbXCJjdXN0b21cIiwgXCJBSVwiXVxyXG4gICAgICAgICAgICBcImNoZWNrbGlzdE5hbWVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lLFxyXG4gICAgICAgICAgICBcImNoZWNrbGlzdElkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkLFxyXG4gICAgICAgICAgICBcInN0b3JlSWRcIjogc3RvcmVzLFxyXG4gICAgICAgICAgICBcImFuc3dlclR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5hbnN3ZXJUeXBlLCAvL1tcImRlc2NyaXB0aXZlXCIsXCJ5ZXMvbm9cIixcIm11bHRpcGxlY2hvaWNlc2luZ2xlXCIsXCJtdWx0aXBsZWNob2ljZW11bHRpcGxlXCIsXCJpbWFnZVwiLFwidmlkZW9cIixcImRlc2NyaXB0aXZlSW1hZ2VcIixcIm11bHRpcGxlSW1hZ2VcIl1cclxuICAgICAgICAgICAgXCJ2aWV3RmxhZ1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdGbGFnLC8vW3RydWUsIGZhbHNlXVxyXG4gICAgICAgICAgICBcInZpZXdSZWRvXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld1JlZG8sIC8vW3RydWUsIGZhbHNlXVxyXG4gICAgICAgICAgICBcImZpbHRlclwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlcixcclxuICAgICAgICAgICAgXCJxdWVzdGlvbnNcIjogdGhpcy5zZWxlY3RlZFNlY3Rpb24ubGVuZ3RoID4gMCAmJiB0aGlzLnNlbGVjdGVkU2VjdGlvblswXS5xdWVzdGlvbnMubGVuZ3RoID4gMCA/IHRoaXMuc2VsZWN0ZWRTZWN0aW9uWzBdLnF1ZXN0aW9uc1swXSA6IFwiXCJcclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldFF1ZXN0aW9ucyhvYmopPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSk/LnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZXMgPSByZXMuZGF0YS5zdG9yZXNEZXRhaWxzXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHJlcy5kYXRhLnN0b3Jlc0RldGFpbHNcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0dGFza1FBKGZhbHNlKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXR0YXNrUUEoZmFsc2UpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB1c2VyTGlzdGRyb3Bkb3duVGFzaygpIHtcclxuICAgIGxldCB0ZWFtc0xpc3QgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLlRlYW1zTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS50ZWFtTmFtZSlcclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0dXNlcnMoeyBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCwgdGVhbXM6IHRlYW1zTGlzdCB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3VzZXJMaXN0Jyk/LnNldFZhbHVlKHJlcy5kYXRhKVxyXG4gICAgICAgICAgbGV0IHVzZXJzID0gcmVzLmRhdGEubWFwKChkYXRhOiBhbnkpID0+IGRhdGEudXNlckVtYWlsKVxyXG4gICAgICAgICAgbGV0IG9iaiA9IHtcclxuICAgICAgICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICAgICAgICBcInRvRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnRvRGF0ZSxcclxuICAgICAgICAgICAgXCJDaGVja2xpc3RUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tMaXN0VHlwZSwgLy8gW1wiY3VzdG9tXCIsIFwiQUlcIl1cclxuICAgICAgICAgICAgXCJjaGVja2xpc3ROYW1lXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSxcclxuICAgICAgICAgICAgXCJjaGVja2xpc3RJZFwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCxcclxuICAgICAgICAgICAgXCJmaWx0ZXJ0eXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZmlsdGVydHlwZSxcclxuICAgICAgICAgICAgXCJzdG9yZUlkXCI6IFtdLFxyXG4gICAgICAgICAgICBcInVzZXJFbWFpbFwiOiB1c2VycyxcclxuICAgICAgICAgICAgXCJhbnN3ZXJUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuYW5zd2VyVHlwZSwgLy9bXCJkZXNjcmlwdGl2ZVwiLFwieWVzL25vXCIsXCJtdWx0aXBsZWNob2ljZXNpbmdsZVwiLFwibXVsdGlwbGVjaG9pY2VtdWx0aXBsZVwiLFwiaW1hZ2VcIixcInZpZGVvXCIsXCJkZXNjcmlwdGl2ZUltYWdlXCIsXCJtdWx0aXBsZUltYWdlXCJdXHJcbiAgICAgICAgICAgIFwidmlld0ZsYWdcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS52aWV3RmxhZywvL1t0cnVlLCBmYWxzZV1cclxuICAgICAgICAgICAgXCJ2aWV3UmVkb1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdSZWRvLC8vW3RydWUsIGZhbHNlXVxyXG4gICAgICAgICAgICBcInF1ZXN0aW9uc1wiOiB0aGlzLnNlbGVjdGVkU2VjdGlvbi5sZW5ndGggPiAwICYmIHRoaXMuc2VsZWN0ZWRTZWN0aW9uWzBdLnF1ZXN0aW9ucy5sZW5ndGggPiAwID8gdGhpcy5zZWxlY3RlZFNlY3Rpb25bMF0ucXVlc3Rpb25zWzBdIDogXCJcIixcclxuICAgICAgICAgICAgXCJmaWx0ZXJcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXIsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldFF1ZXN0aW9ucyhvYmopPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSk/LnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyTGlzdCA9IHJlcy5kYXRhLnN0b3Jlc0RldGFpbHNcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCd1c2VyTGlzdCcpPy5zZXRWYWx1ZSh0aGlzLnVzZXJMaXN0KVxyXG4gICAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZShbXSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gW11cclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0dGFza1FBKGZhbHNlKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXR0YXNrUUEoZmFsc2UpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIHVzZXJMaXN0ZHJvcGRvd24oKSB7XHJcbiAgICBsZXQgdGVhbXNMaXN0ID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5UZWFtc0xpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEudGVhbU5hbWUpXHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldHVzZXJzKHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsIHRlYW1zOiB0ZWFtc0xpc3QgfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIC8vIGlmKHRoaXMucXVlcnlQYXJhbXMudXNlckVtYWlsKXtcclxuICAgICAgICAgIC8vICAgbGV0IGdldHVzZXIgPSByZXMuZGF0YS5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGUudXNlckVtYWlsID09PSB0aGlzLnF1ZXJ5UGFyYW1zLnVzZXJFbWFpbClcclxuICAgICAgICAgIC8vICAgdGhpcy51c2VyTGlzdCA9IGdldHVzZXI7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCd1c2VyTGlzdCcpPy5zZXRWYWx1ZSh0aGlzLnVzZXJMaXN0KVxyXG4gICAgICAgICAgLy8gfWVsc2V7XHJcbiAgICAgICAgICAvLyB0aGlzLnVzZXJMaXN0ID0gIHJlcy5kYXRhXHJcbiAgICAgICAgICAvLyB0aGlzLmdhbGxlcnlGb3JtLmdldCgndXNlckxpc3QnKT8uc2V0VmFsdWUocmVzLmRhdGEpXHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICBsZXQgdXNlcnMgPSByZXMuZGF0YS5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS51c2VyRW1haWwpXHJcbiAgICAgICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgICAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICAgICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja0xpc3RUeXBlLCAvLyBbXCJjdXN0b21cIiwgXCJBSVwiXVxyXG4gICAgICAgICAgICBcImNoZWNrbGlzdE5hbWVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lLFxyXG4gICAgICAgICAgICBcImNoZWNrbGlzdElkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkLFxyXG4gICAgICAgICAgICBcImZpbHRlcnR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlLFxyXG4gICAgICAgICAgICBcInN0b3JlSWRcIjogW10sXHJcbiAgICAgICAgICAgIFwidXNlckVtYWlsXCI6IHVzZXJzLFxyXG4gICAgICAgICAgICBcImFuc3dlclR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5hbnN3ZXJUeXBlLCAvL1tcImRlc2NyaXB0aXZlXCIsXCJ5ZXMvbm9cIixcIm11bHRpcGxlY2hvaWNlc2luZ2xlXCIsXCJtdWx0aXBsZWNob2ljZW11bHRpcGxlXCIsXCJpbWFnZVwiLFwidmlkZW9cIixcImRlc2NyaXB0aXZlSW1hZ2VcIixcIm11bHRpcGxlSW1hZ2VcIl1cclxuICAgICAgICAgICAgXCJ2aWV3RmxhZ1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdGbGFnLC8vW3RydWUsIGZhbHNlXVxyXG4gICAgICAgICAgICBcInZpZXdSZWRvXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld1JlZG8sLy9bdHJ1ZSwgZmFsc2VdXHJcbiAgICAgICAgICAgIFwicXVlc3Rpb25zXCI6IHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxlbmd0aCA+IDAgJiYgdGhpcy5zZWxlY3RlZFNlY3Rpb25bMF0ucXVlc3Rpb25zLmxlbmd0aCA+IDAgPyB0aGlzLnNlbGVjdGVkU2VjdGlvblswXS5xdWVzdGlvbnNbMF0gOiBcIlwiLFxyXG4gICAgICAgICAgICBcImZpbHRlclwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlcixcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0Y2hlY2tsaXN0KG9iaik/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJMaXN0ID0gcmVzLmRhdGEuc3RvcmVzRGV0YWlsc1xyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3VzZXJMaXN0Jyk/LnNldFZhbHVlKHRoaXMudXNlckxpc3QpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKFtdKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSBbXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDaGVja2xpc3RRQShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2hlY2tsaXN0UUEoZmFsc2UpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIHN0b3JlTGlzdGRyb3Bkb3duKCkge1xyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRTdG9yZXNsaXN0KHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsIGNsdXN0ZXJzOiB0aGlzLmdyb3VwcywgY2l0eTogW10gfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIGxldCBzdG9yZXMgPSByZXMuZGF0YS5zdG9yZXNEYXRhLm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnN0b3JlSWQpXHJcbiAgICAgICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgICAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICAgICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja0xpc3RUeXBlLCAvLyBbXCJjdXN0b21cIiwgXCJBSVwiXVxyXG4gICAgICAgICAgICBcImNoZWNrbGlzdE5hbWVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lLFxyXG4gICAgICAgICAgICBcImNoZWNrbGlzdElkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkLFxyXG4gICAgICAgICAgICBcImZpbHRlcnR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlLFxyXG4gICAgICAgICAgICBcInN0b3JlSWRcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlID09PSAnQ2x1c3RlcnMnID8gc3RvcmVzIDogW10sXHJcbiAgICAgICAgICAgIFwidXNlckVtYWlsXCI6IFtdLFxyXG4gICAgICAgICAgICBcImFuc3dlclR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5hbnN3ZXJUeXBlLCAvL1tcImRlc2NyaXB0aXZlXCIsXCJ5ZXMvbm9cIixcIm11bHRpcGxlY2hvaWNlc2luZ2xlXCIsXCJtdWx0aXBsZWNob2ljZW11bHRpcGxlXCIsXCJpbWFnZVwiLFwidmlkZW9cIixcImRlc2NyaXB0aXZlSW1hZ2VcIixcIm11bHRpcGxlSW1hZ2VcIl1cclxuICAgICAgICAgICAgXCJ2aWV3RmxhZ1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdGbGFnLC8vW3RydWUsIGZhbHNlXVxyXG4gICAgICAgICAgICBcInZpZXdSZWRvXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld1JlZG8sLy9bdHJ1ZSwgZmFsc2VdXHJcbiAgICAgICAgICAgIFwicXVlc3Rpb25zXCI6IHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxlbmd0aCA+IDAgJiYgdGhpcy5zZWxlY3RlZFNlY3Rpb25bMF0ucXVlc3Rpb25zLmxlbmd0aCA+IDAgPyB0aGlzLnNlbGVjdGVkU2VjdGlvblswXS5xdWVzdGlvbnNbMF0gOiBcIlwiLFxyXG4gICAgICAgICAgICBcImZpbHRlclwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlcixcclxuICAgICAgICAgICAgXCJhcHByb3ZlRmlsdGVyXCI6IHRoaXMuYXBwcm92ZUZpbHRlclxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50cmF4U2VydmljZS5nZXRjaGVja2xpc3Qob2JqKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmVzID0gcmVzLmRhdGEuc3RvcmVzRGV0YWlsc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSByZXMuZGF0YS5zdG9yZXNEZXRhaWxzXHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKHRoaXMuc3RvcmVzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDaGVja2xpc3RRQShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2hlY2tsaXN0UUEoZmFsc2UpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIHNlbGVjdCA9ICdjdXN0b20nXHJcbiAgb25TdWJtaXQoKSB7XHJcbiAgICAgICBpZiAodGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCA9PT0gXCI0NjRcIikge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVxdWVzdFBlcm1pc3Npb24oKVxyXG4gICAgICAgfVxyXG4gICAgdGhpcy5vZmZzZXQgPSAxXHJcbiAgICB0aGlzLmNoZWNrbGlzdE5hbWUgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWVcclxuICAgIHRoaXMuY2hlY2tMaXN0RGVzY3JpcHRpb24gPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrTGlzdERlc2NyaXB0aW9uXHJcbiAgICB0aGlzLnNob3dtdWx0aSA9IHRydWU7XHJcbiAgICB0aGlzLnNob3dzaW5nbGUgPSBmYWxzZVxyXG4gICAgdGhpcy5hbnN3ZXJGaWx0ZXIgPSBbXVxyXG4gICAgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkID09PSAnc3RvcmVvcGVuYW5kY2xvc2UnKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ID0gJ3N0b3Jlb3BlbmFuZGNsb3NlJ1xyXG4gICAgICB0aGlzLnN0b3JlT3BlbmNsb3NlbGlzdChmYWxzZSlcclxuICAgIH0gZWxzZSBpZiAodGhpcy5ib3hpbWFnZUNoZWNrbGlzdC5pbmNsdWRlcyh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCkpIHtcclxuICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZFxyXG4gICAgICB0aGlzLnF1ZXVlYWxlcnRsaXN0KGZhbHNlKVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmltYWdlQ2hlY2tsaXN0LmluY2x1ZGVzKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdCA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkO1xyXG4gICAgICB0aGlzLmdldG1vYmlsZVVzYWdlRGF0YWxpc3QoZmFsc2UpXHJcbiAgICB9IGVsc2UgaWYgKHRoaXMudmlkZW9DaGVja2xpc3QuaW5jbHVkZXModGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQ7XHJcbiAgICAgIHRoaXMuY3VzdG9tZXJ1bmF0dGVuZGVkbGlzdChmYWxzZSlcclxuICAgIH0gZWxzZSBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQgPT09ICdjdXN0b21lcnRyaWFsJykge1xyXG4gICAgICB0aGlzLnNlbGVjdCA9ICdjdXN0b21lcnRyaWFsJztcclxuICAgICAgdGhpcy5nZXRjdXN0b21lcnRyaWFsbGlzdCgpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdCA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudHlwZSA9PT0gJ2NoZWNrbGlzdCcgPyBcImN1c3RvbVwiIDogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlO1xyXG4gICAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlID09PSAnY2hlY2tsaXN0Jykge1xyXG4gICAgICAgIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlcnR5cGUgPT09ICdDbHVzdGVycycpIHtcclxuICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCd1c2VyTGlzdCcpPy5zZXRWYWx1ZShbXSlcclxuICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ZHJvcGRvd24oKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZShbXSlcclxuICAgICAgICAgIHRoaXMudXNlckxpc3Rkcm9wZG93bigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlID09PSAnQ2x1c3RlcnMnKSB7XHJcbiAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgndXNlckxpc3QnKT8uc2V0VmFsdWUoW10pXHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdGRyb3Bkb3duVGFzaygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKFtdKVxyXG4gICAgICAgICAgdGhpcy51c2VyTGlzdGRyb3Bkb3duVGFzaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvdzogbnVtYmVyID0gMDtcclxuICBhY2NvcmRpYW4oaW5kZXg6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuc2hvdyA9PSBpbmRleCkge1xyXG4gICAgICB0aGlzLnNob3cgPSAtMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvdyA9IGluZGV4O1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXR6b25ldGxpc3QoKSB7XHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCB6b25lID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS56b25lTGlzdD8ubGVuZ3RoID8gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS56b25lTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS52YWx1ZSkgOiBbXVxyXG4gICAgbGV0IG9iaiA9IHtcclxuICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcInRvRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnRvRGF0ZSxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJjbGllbnRJZFwiOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LFxyXG4gICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5zZWxlY3QsXHJcbiAgICAgIFwib2Zmc2V0XCI6IDAsXHJcbiAgICAgIFwibGltaXRcIjogMTAwMDAsXHJcbiAgICAgIFwidmlld0ltYWdlXCI6IGZhbHNlLFxyXG4gICAgICBcImNhdGVnb3J5XCI6IHpvbmVcclxuICAgIH1cclxuICAgIHRoaXMudHJheFNlcnZpY2UucXVldWVhbGVydGxpc3Qob2JqKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdCA9IHJlcy5kYXRhLmRhdGFcclxuICAgICAgICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5mb3JFYWNoKChzdG9yZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHN0b3JlLmNoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdEFsbCA9IHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5ldmVyeSgob2JqOiBhbnkpID0+IG9iai5jaGVja2VkKTtcclxuICAgICAgICAgIHRoaXMuem9uZUxpc3QgPSByZXMuZGF0YS56b25lc1xyXG4gICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3pvbmVMaXN0Jyk/LnNldFZhbHVlKHJlcy5kYXRhLnNlbGVjdGVkem9uZXMpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICB9XHJcbiAgcXVldWVhbGVydGxpc3QodHlwZTogYW55KSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgIHRoaXMudmlld2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2U7XHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCB6b25lID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS56b25lTGlzdD8ubGVuZ3RoID8gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS56b25lTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS52YWx1ZSkgOiBbXVxyXG4gICAgbGV0IG9iaiA9IHtcclxuICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcInRvRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnRvRGF0ZSxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJjbGllbnRJZFwiOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LFxyXG4gICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5zZWxlY3QsXHJcbiAgICAgIFwib2Zmc2V0XCI6IDAsXHJcbiAgICAgIFwibGltaXRcIjogMTAwMDAsXHJcbiAgICAgIFwidmlld0ltYWdlXCI6IGZhbHNlLFxyXG4gICAgICBcImNhdGVnb3J5XCI6IHpvbmVcclxuICAgIH1cclxuICAgIHRoaXMudHJheFNlcnZpY2UucXVldWVhbGVydGxpc3Qob2JqKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdCA9IHJlcy5kYXRhLmRhdGFcclxuICAgICAgICAgIHRoaXMuem9uZUxpc3QgPSByZXMuZGF0YS56b25lc1xyXG4gICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3pvbmVMaXN0Jyk/LnNldFZhbHVlKHJlcy5kYXRhLnNlbGVjdGVkem9uZXMpXHJcbiAgICAgICAgICB0aGlzLnN0b3JlcyA9IFtdXHJcbiAgICAgICAgICB0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuY2hlY2tlZCA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5zdG9yZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgc3RvcmVJZDogZWxlbWVudC5zdG9yZUlkLFxyXG4gICAgICAgICAgICAgIHN0b3JlTmFtZTogZWxlbWVudC5zdG9yZU5hbWVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMuc3RvcmVzID0gdGhpcy5zdG9yZXNcclxuICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUodGhpcy5zdG9yZXMpXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdEFsbCA9IHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5ldmVyeSgob2JqOiBhbnkpID0+IG9iai5jaGVja2VkKTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZVxyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnF1ZXVlYWxlcnR2aWV3KClcclxuXHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHN0b3JlT3BlbmNsb3NlbGlzdCh0eXBlOiBhbnkpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgdGhpcy52aWV3bG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnZpZXdub0RhdGEgPSBmYWxzZTtcclxuICAgIGxldCBzdG9yZXMgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnN0b3JlTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS5zdG9yZUlkKVxyXG4gICAgbGV0IG9iaiA9IHtcclxuICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcInRvRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnRvRGF0ZSxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJjbGllbnRJZFwiOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LFxyXG4gICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5zZWxlY3QsXHJcbiAgICAgIFwib2Zmc2V0XCI6IDAsXHJcbiAgICAgIFwibGltaXRcIjogMTAwMDAsXHJcbiAgICAgIFwidmlld0ltYWdlXCI6IGZhbHNlLFxyXG4gICAgICBcImNhdGVnb3J5XCI6IHRoaXMuY2F0ZWdvcnlcclxuICAgIH1cclxuICAgIHRoaXMudHJheFNlcnZpY2Uuc3RvcmVPcGVuY2xvc2VsaXN0KG9iaik/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QgPSByZXMuZGF0YS5zdG9yZW9wZW5hbmRjbG9zZURhdGFcclxuICAgICAgICAgIHRoaXMuc3RvcmVzID0gW11cclxuICAgICAgICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5jaGVja2VkID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLnN0b3Jlcy5wdXNoKHtcclxuICAgICAgICAgICAgICBzdG9yZUlkOiBlbGVtZW50LnN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgc3RvcmVOYW1lOiBlbGVtZW50LnN0b3JlTmFtZVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5zdG9yZXMgPSB0aGlzLnN0b3Jlc1xyXG4gICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZSh0aGlzLnN0b3JlcylcclxuICAgICAgICAgIHRoaXMuc2VsZWN0QWxsID0gdGhpcy5tb2JpbGV1c2FnZURhdGFMaXN0LmV2ZXJ5KChvYmo6IGFueSkgPT4gb2JqLmNoZWNrZWQpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlXHJcbiAgICAgICAgICB0aGlzLnZpZXdsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnZpZXdub0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuc3RvcmVPcGVuY2xvc2V2aWV3KClcclxuXHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgcXVldWVhbGVydHZpZXcoKSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgIHRoaXMubGltaXQgPSAxXHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCB6b25lcyA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuem9uZUxpc3Q/Lmxlbmd0aCA/IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuem9uZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEudmFsdWUpIDogW11cclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIFwiZnJvbURhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgXCJ0b0RhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50b0RhdGUsXHJcbiAgICAgIFwic3RvcmVJZFwiOiBzdG9yZXMsXHJcbiAgICAgIFwiY2xpZW50SWRcIjogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCxcclxuICAgICAgXCJDaGVja2xpc3RUeXBlXCI6IHRoaXMuc2VsZWN0LFxyXG4gICAgICBcIm9mZnNldFwiOiAodGhpcy5vZmZzZXQgLSAxKSxcclxuICAgICAgXCJsaW1pdFwiOiB0aGlzLmxpbWl0LFxyXG4gICAgICBcInZpZXdJbWFnZVwiOiB0cnVlLFxyXG4gICAgICBcImNhdGVnb3J5XCI6IHpvbmVzLFxyXG4gICAgfVxyXG4gICAgdGhpcy52aWV3bG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnZpZXdub0RhdGEgPSBmYWxzZTtcclxuICAgIHRoaXMubGltaXQgPSAxXHJcbiAgICB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFsxXVxyXG4gICAgdGhpcy50cmF4U2VydmljZS5xdWV1ZWFsZXJ0bGlzdChvYmopPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSk/LnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5xdWV1ZUFsZXJ0VmlldyA9IHJlcy5kYXRhLmRhdGFcclxuICAgICAgICAgIHRoaXMuem9uZUxpc3QgPSByZXMuZGF0YS56b25lc1xyXG4gICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3pvbmVMaXN0Jyk/LnNldFZhbHVlKHJlcy5kYXRhLnNlbGVjdGVkem9uZXMpXHJcbiAgICAgICAgICB0aGlzLnF1ZXVlQWxlcnRWaWV3LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBlbGVtZW50LmRhdGVTdHJpbmcgPSBkYXlqcyhlbGVtZW50LmRhdGVTdHJpbmcpLmZvcm1hdCgnREQtTU0tWVlZWScpXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IHJlcy5kYXRhLnRvdGFsQ291bnRcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlXHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWVcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBzdG9yZU9wZW5jbG9zZXZpZXcoKSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgIHRoaXMubGltaXQgPSAxMFxyXG4gICAgbGV0IHN0b3JlcyA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc3RvcmVMaXN0Lm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnN0b3JlSWQpXHJcbiAgICBsZXQgb2JqID0ge1xyXG4gICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICBcInN0b3JlSWRcIjogc3RvcmVzLFxyXG4gICAgICBcImNsaWVudElkXCI6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgIFwiQ2hlY2tsaXN0VHlwZVwiOiB0aGlzLnNlbGVjdCxcclxuICAgICAgXCJvZmZzZXRcIjogKHRoaXMub2Zmc2V0IC0gMSksXHJcbiAgICAgIFwibGltaXRcIjogdGhpcy5saW1pdCxcclxuICAgICAgXCJ2aWV3SW1hZ2VcIjogdHJ1ZSxcclxuICAgICAgXCJjYXRlZ29yeVwiOiB0aGlzLmNhdGVnb3J5XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy52aWV3bG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnZpZXdub0RhdGEgPSBmYWxzZTtcclxuICAgIHRoaXMubGltaXQgPSAxMDtcclxuICAgIHRoaXMucGFnaW5hdGlvblNpemVzID0gWzEwXTtcclxuICAgIHRoaXMudHJheFNlcnZpY2Uuc3RvcmVPcGVuY2xvc2VsaXN0KG9iaik/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlT3BlbmNsb3NlVmlldyA9IHJlcy5kYXRhLnN0b3Jlb3BlbmFuZGNsb3NlRGF0YVxyXG5cclxuICAgICAgICAgIHRoaXMuc3RvcmVPcGVuY2xvc2VWaWV3LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBlbGVtZW50LmRhdGVTdHJpbmcgPSBkYXlqcyhlbGVtZW50LmRhdGVTdHJpbmcpLmZvcm1hdCgnREQtTU0tWVlZWScpXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IHJlcy5kYXRhLnRvdGFsQ291bnRcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlXHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWVcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgY2hlY2tsaXN0TmFtZWNoYW5nZShldmVudDogYW55LCB0eXBlOiBhbnkpIHtcclxuICAgIHRoaXMucmVtb3ZlUXVlcnlQYXJhbXMoKVxyXG4gICAgaWYgKGV2ZW50LmNoZWNrTGlzdFR5cGUgPT09IFwiQUlcIikge1xyXG4gICAgICB0aGlzLnNob3dmbGFnID0gZmFsc2VcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja0xpc3RUeXBlJyk/LnNldFZhbHVlKGV2ZW50LmNoZWNrTGlzdFR5cGUpXHJcbiAgICAgIHRoaXMuc2hvd2ZsYWcgPSB0cnVlXHJcbiAgICB9XHJcbiAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc291cmNlQ2hlY2tMaXN0X2lkJyk/LnNldFZhbHVlKGV2ZW50Py5zb3VyY2VDaGVja0xpc3RfaWQpXHJcbiAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnY2hlY2tsaXN0TmFtZScpPy5zZXRWYWx1ZShldmVudD8uY2hlY2tMaXN0TmFtZSlcclxuICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja0xpc3REZXNjcmlwdGlvbicpPy5zZXRWYWx1ZShldmVudD8uY2hlY2tMaXN0RGVzY3JpcHRpb24pXHJcblxyXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmNvdmVyYWdlID09PSAnc3RvcmUnKSB7XHJcbiAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCd1c2VyTGlzdCcpPy5zZXRWYWx1ZShbXSlcclxuICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2ZpbHRlcnR5cGUnKT8uc2V0VmFsdWUoJ0NsdXN0ZXJzJylcclxuICAgICAgdGhpcy50cmF4U2VydmljZS5nZXRTdG9yZXNsaXN0KHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsIGNsdXN0ZXJzOiB0aGlzLmdyb3VwcywgY2l0eTogW10gfSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gcmVzLmRhdGEuc3RvcmVzRGF0YTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZXMgPSByZXMuZGF0YS5zdG9yZXNEYXRhXHJcbiAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUodGhpcy5zdG9yZUxpc3QpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlcycpPy5zZXRWYWx1ZShbXSlcclxuICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2ZpbHRlcnR5cGUnKT8uc2V0VmFsdWUoJ1RlYW1zJylcclxuICAgICAgbGV0IHRlYW1zTGlzdCA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuVGVhbXNMaXN0Lm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnRlYW1OYW1lKVxyXG4gICAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldHVzZXJzKHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsIHRlYW1zOiB0ZWFtc0xpc3QgfSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlckxpc3QgPSByZXMuZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3VzZXJMaXN0Jyk/LnNldFZhbHVlKHRoaXMudXNlckxpc3QpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG5cclxuICBjdXN0b21lcnVuYXR0ZW5kZWRsaXN0KHR5cGU6IGFueSkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICB0aGlzLnZpZXdsb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlXHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIFwiZGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICBcInN0b3JlSWRcIjogc3RvcmVzLFxyXG4gICAgICBcImNsaWVudElkXCI6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgIFwiQ2hlY2tsaXN0VHlwZVwiOiB0aGlzLnNlbGVjdCxcclxuICAgICAgXCJ2aWV3SW1hZ2VcIjogZmFsc2UsXHJcbiAgICAgIFwibGltaXRcIjogMTAsXHJcbiAgICAgIFwib2Zmc2V0XCI6IDAsXHJcbiAgICAgIFwiY2F0ZWdvcnlcIjogdGhpcy5jYXRlZ29yeVxyXG4gICAgfVxyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRjdXN0b21lcnVuYXR0ZW5kZWRsaXN0KG9iaik/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QgPSByZXMuZGF0YS5kYXRhO1xyXG4gICAgICAgICAgdGhpcy5zdG9yZXMgPSBbXTtcclxuICAgICAgICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5jaGVja2VkID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLnN0b3Jlcy5wdXNoKHtcclxuICAgICAgICAgICAgICBzdG9yZUlkOiBlbGVtZW50LnN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgc3RvcmVOYW1lOiBlbGVtZW50LnN0b3JlTmFtZVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSByZXMuZGF0YS50b3RhbF9jb3VudFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RBbGwgPSB0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QuZXZlcnkoKG9iajogYW55KSA9PiBvYmouY2hlY2tlZCk7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlcyA9IHRoaXMuc3RvcmVzXHJcbiAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKHRoaXMuc3RvcmVzKVxyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlXHJcbiAgICAgICAgICB0aGlzLmdldGN1c3RvbWVydW5hdHRlbmRlZHZpZXcoKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBzZWxlY3RlZEV4cG9ydCA9IGZhbHNlXHJcbiAgc2VsZWN0ZWRRdWVzdGlvbihldmVudDogYW55LCBzZWN0aW9uOiBhbnksIFF1ZXN0aW9uOiBhbnkpIHtcclxuICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICBpZiAodGhpcy50ZW1wc2VsZWN0ZWRTZWN0aW9uLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgbGV0IHF1ZXN0aW9uczogYW55ID0gW11cclxuICAgICAgICBsZXQgYW5zd2VyOiBhbnkgPSBbXVxyXG4gICAgICAgIGFuc3dlci5wdXNoKFF1ZXN0aW9uLmFuc3dlclR5cGUpXHJcbiAgICAgICAgcXVlc3Rpb25zLnB1c2goUXVlc3Rpb24ucW5hbWUucmVwbGFjZSgvXFxuL2csIFwiIFwiKSlcclxuICAgICAgICBsZXQgcmVzcG9uc2UgPSB7XHJcbiAgICAgICAgICBzZWN0aW9uTmFtZTogc2VjdGlvbi5zZWN0aW9uTmFtZSxcclxuICAgICAgICAgIHF1ZXN0aW9uczogcXVlc3Rpb25zLFxyXG4gICAgICAgICAgYW5zd2VyVHlwZTogYW5zd2VyXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGVtcHNlbGVjdGVkU2VjdGlvbi5wdXNoKHJlc3BvbnNlKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBzZWN0aW9uRXhpc3RzID0gdGhpcy50ZW1wc2VsZWN0ZWRTZWN0aW9uLmZpbHRlcigoZGF0YTogYW55KSA9PiBkYXRhLnNlY3Rpb25OYW1lID09PSBzZWN0aW9uLnNlY3Rpb25OYW1lKVxyXG4gICAgICAgIGlmIChzZWN0aW9uRXhpc3RzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMudGVtcHNlbGVjdGVkU2VjdGlvbi5tYXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZGF0YS5zZWN0aW9uTmFtZSA9PT0gc2VjdGlvbi5zZWN0aW9uTmFtZSkge1xyXG4gICAgICAgICAgICAgIGRhdGEucXVlc3Rpb25zLnB1c2goUXVlc3Rpb24ucW5hbWUucmVwbGFjZSgvXFxuL2csIFwiIFwiKSlcclxuICAgICAgICAgICAgICBkYXRhLmFuc3dlclR5cGUucHVzaChRdWVzdGlvbi5hbnN3ZXJUeXBlKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgcXVlc3Rpb25zOiBhbnkgPSBbXVxyXG4gICAgICAgICAgbGV0IGFuc3dlcjogYW55ID0gW11cclxuXHJcblxyXG4gICAgICAgICAgYW5zd2VyLnB1c2goUXVlc3Rpb24uYW5zd2VyVHlwZSlcclxuXHJcbiAgICAgICAgICBxdWVzdGlvbnMucHVzaChRdWVzdGlvbi5xbmFtZS5yZXBsYWNlKC9cXG4vZywgXCIgXCIpKVxyXG4gICAgICAgICAgbGV0IHJlc3BvbnNlID0ge1xyXG4gICAgICAgICAgICBzZWN0aW9uTmFtZTogc2VjdGlvbi5zZWN0aW9uTmFtZSxcclxuICAgICAgICAgICAgcXVlc3Rpb25zOiBxdWVzdGlvbnMsXHJcbiAgICAgICAgICAgIGFuc3dlclR5cGU6IGFuc3dlclxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50ZW1wc2VsZWN0ZWRTZWN0aW9uLnB1c2gocmVzcG9uc2UpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNoZWNrbGlzdERhdGEubWFwKChzZWM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChzZWMuc2VjdGlvbk5hbWUgPT0gc2VjdGlvbi5zZWN0aW9uTmFtZSkge1xyXG4gICAgICAgICAgc2VjLnF1ZXN0aW9ucy5tYXAoKHF1ZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocXVlcy5xbmFtZSA9PT0gUXVlc3Rpb24ucW5hbWUucmVwbGFjZSgvXFxuL2csIFwiIFwiKSkge1xyXG4gICAgICAgICAgICAgIHF1ZXMuY2hlY2tlZCA9IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgdGhpcy50ZW1wc2VsZWN0ZWRTZWN0aW9uLm1hcCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEuc2VjdGlvbk5hbWUgPT0gc2VjdGlvbi5zZWN0aW9uTmFtZSkge1xyXG4gICAgICAgICAgZGF0YS5xdWVzdGlvbnMgPSBkYXRhLnF1ZXN0aW9ucy5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGUgIT0gUXVlc3Rpb24ucW5hbWUucmVwbGFjZSgvXFxuL2csIFwiIFwiKSlcclxuICAgICAgICAgIGRhdGEuYW5zd2VyVHlwZSA9IGRhdGEuYW5zd2VyVHlwZS5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGUgIT0gUXVlc3Rpb24uYW5zd2VyVHlwZSlcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLnRlbXBzZWxlY3RlZFNlY3Rpb24gPSB0aGlzLnRlbXBzZWxlY3RlZFNlY3Rpb24uZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlLnF1ZXN0aW9ucy5sZW5ndGggPiAwKVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkRXhwb3J0ID0gdGhpcy50ZW1wc2VsZWN0ZWRTZWN0aW9uLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG4gIGdldGN1c3RvbWVydHJpYWxsaXN0KCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICB0aGlzLnZpZXdsb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlO1xyXG4gICAgdGhpcy5tb2JpbGV1c2FnZURhdGFMaXN0ID0gW3sgc3RvcmVJZDogXCI1OS0xNDdcIiwgc3RvcmVOYW1lOiBcIkJpcmtlbnN0b2NrIER1YmFpIEhpbGxzXCIsIGRldGVjdGlvbnM6IFwiMjBcIiB9XTtcclxuICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgZWxlbWVudC5jaGVja2VkID0gdHJ1ZVxyXG4gICAgICB0aGlzLnN0b3Jlcy5wdXNoKHtcclxuICAgICAgICBzdG9yZUlkOiBlbGVtZW50LnN0b3JlSWQsXHJcbiAgICAgICAgc3RvcmVOYW1lOiBlbGVtZW50LnN0b3JlTmFtZVxyXG4gICAgICB9KVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RBbGwgPSB0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QuZXZlcnkoKG9iajogYW55KSA9PiBvYmouY2hlY2tlZCk7XHJcbiAgICB0aGlzLnN0b3JlcyA9IHRoaXMuc3RvcmVzXHJcbiAgICB0aGlzLm1vYmlsZXVzYWdlRGF0YSA9XHJcbiAgICAgIFt7XHJcbiAgICAgICAgc3RvcmVOYW1lOiBcIkJpcmtlbnN0b2NrIER1YmFpIEhpbGxzXCIsXHJcbiAgICAgICAgaW1hZ2VVcmw6IFtcclxuICAgICAgICAgIFwidHJhaWwvNTktMTQ3L2IxYzViMTVjMDEzM2RlYzBjNDU2NDBkOTIzZmRhMjIxXzEwXzA5XzU5XzAwMF8yNF8wMV8yMDI1X2ZhbHNlLmdpZlwiLFxyXG4gICAgICAgICAgXCJ0cmFpbC81OS0xNDcvYjFjNWIxNWMwMTMzZGVjMGM0NTY0MGQ5MjNmZGEyMjFfMTBfMDlfNTlfMDAwXzI0XzAxXzIwMjVfZmFsc2UuZ2lmXCIsXHJcbiAgICAgICAgICBcInRyYWlsLzU5LTE0Ny9iMWM1YjE1YzAxMzNkZWMwYzQ1NjQwZDkyM2ZkYTIyMV8xMF80MF8zMl8wMDBfMjRfMDFfMjAyNV9mYWxzZS5naWZcIixcclxuICAgICAgICAgIFwidHJhaWwvNTktMTQ3L2IxYzViMTVjMDEzM2RlYzBjNDU2NDBkOTIzZmRhMjIxXzEwXzUwXzQzXzAwMF8yNF8wMV8yMDI1X2ZhbHNlLmdpZlwiLFxyXG4gICAgICAgICAgXCJ0cmFpbC81OS0xNDcvYjFjNWIxNWMwMTMzZGVjMGM0NTY0MGQ5MjNmZGEyMjFfMTFfMDBfNTRfMDAwXzI0XzAxXzIwMjVfZmFsc2UuZ2lmXCIsXHJcbiAgICAgICAgICBcInRyYWlsLzU5LTE0Ny9iMWM1YjE1YzAxMzNkZWMwYzQ1NjQwZDkyM2ZkYTIyMV8xMV8xMV8wNV8wMDBfMjRfMDFfMjAyNV9mYWxzZS5naWZcIixcclxuICAgICAgICAgIFwidHJhaWwvNTktMTQ3L2IxYzViMTVjMDEzM2RlYzBjNDU2NDBkOTIzZmRhMjIxXzExXzIxXzE2XzAwMF8yNF8wMV8yMDI1X2ZhbHNlLmdpZlwiLFxyXG4gICAgICAgICAgXCJ0cmFpbC81OS0xNDcvYjFjNWIxNWMwMTMzZGVjMGM0NTY0MGQ5MjNmZGEyMjFfMTFfMjFfMTlfMDAwXzI1XzAxXzIwMjVfMTczNzc4OTE4NS5naWZcIixcclxuICAgICAgICAgIFwidHJhaWwvNTktMTQ3L2IxYzViMTVjMDEzM2RlYzBjNDU2NDBkOTIzZmRhMjIxXzEyXzQyXzQ0XzAwMF8yNF8wMV8yMDI1X2ZhbHNlLmdpZlwiLFxyXG4gICAgICAgICAgXCJ0cmFpbC81OS0xNDcvYjFjNWIxNWMwMTMzZGVjMGM0NTY0MGQ5MjNmZGEyMjFfMTJfNDJfNTBfMDAwXzI1XzAxXzIwMjVfMTczNzc5NDM0OS5naWZcIixcclxuICAgICAgICAgIFwidHJhaWwvNTktMTQ3L2IxYzViMTVjMDEzM2RlYzBjNDU2NDBkOTIzZmRhMjIxXzEzXzAzXzA3XzAwMF8yNF8wMV8yMDI1X2ZhbHNlLmdpZlwiLFxyXG4gICAgICAgICAgXCJ0cmFpbC81OS0xNDcvYjFjNWIxNWMwMTMzZGVjMGM0NTY0MGQ5MjNmZGEyMjFfMTNfMjNfMjhfMDAwXzI0XzAxXzIwMjVfMTczNzcxMDI4My5naWZcIixcclxuICAgICAgICAgIFwidHJhaWwvNTktMTQ3L2IxYzViMTVjMDEzM2RlYzBjNDU2NDBkOTIzZmRhMjIxXzEzXzMzXzQ3XzAwMF8yNV8wMV8yMDI1XzE3Mzc3OTc1ODguZ2lmXCIsXHJcbiAgICAgICAgICBcInRyYWlsLzU5LTE0Ny9iMWM1YjE1YzAxMzNkZWMwYzQ1NjQwZDkyM2ZkYTIyMV8xNF80NF81N18wMDBfMjRfMDFfMjAyNV9mYWxzZS5naWZcIixcclxuICAgICAgICAgIFwidHJhaWwvNTktMTQ3L2IxYzViMTVjMDEzM2RlYzBjNDU2NDBkOTIzZmRhMjIxXzE4XzU5XzQwXzAwMF8yNF8wMV8yMDI1XzE3Mzc3MzAyODYuZ2lmXCIsXHJcbiAgICAgICAgICBcInRyYWlsLzU5LTE0Ny9iMWM1YjE1YzAxMzNkZWMwYzQ1NjQwZDkyM2ZkYTIyMV8yMF8xMF81OV8wMDBfMjRfMDFfMjAyNV8xNzM3NzM0NzczLmdpZlwiLFxyXG4gICAgICAgICAgXCJ0cmFpbC81OS0xNDcvYjFjNWIxNWMwMTMzZGVjMGM0NTY0MGQ5MjNmZGEyMjFfMjBfMjFfMTBfMDAwXzI0XzAxXzIwMjVfMTczNzczNTI0MS5naWZcIixcclxuICAgICAgICAgIFwidHJhaWwvNTktMTQ3L2IxYzViMTVjMDEzM2RlYzBjNDU2NDBkOTIzZmRhMjIxXzIxXzEyXzA3XzAwMF8yNF8wMV8yMDI1XzE3Mzc3MzgyMzMuZ2lmXCIsXHJcbiAgICAgICAgICBcInRyYWlsLzU5LTE0Ny9iMWM1YjE1YzAxMzNkZWMwYzQ1NjQwZDkyM2ZkYTIyMV8yMV80Ml80MV8wMDBfMjRfMDFfMjAyNV8xNzM3NzQwNTA5LmdpZlwiLFxyXG4gICAgICAgICAgXCJ0cmFpbC81OS0xNDcvYjFjNWIxNWMwMTMzZGVjMGM0NTY0MGQ5MjNmZGEyMjFfMjJfMjNfMjdfMDAwXzI0XzAxXzIwMjVfMTczNzc0MjQxMi5naWZcIixcclxuICAgICAgICBdXHJcbiAgICAgIH1dXHJcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2VcclxuICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlXHJcbiAgICB0aGlzLnRvdGFsQ291bnQgPSAxXHJcbiAgfVxyXG4gIGdldG1vYmlsZVVzYWdlRGF0YWxpc3QodHlwZTogYW55KSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgIHRoaXMudmlld2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2U7XHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIFwiZGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICBcInN0b3JlSWRcIjogc3RvcmVzLFxyXG4gICAgICBcImNsaWVudElkXCI6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgIFwiQ2hlY2tsaXN0VHlwZVwiOiB0aGlzLnNlbGVjdCxcclxuICAgICAgXCJ2aWV3SW1hZ2VcIjogZmFsc2UsXHJcbiAgICAgIFwib2Zmc2V0XCI6ICh0aGlzLm9mZnNldCAtIDEpLFxyXG4gICAgICBcImxpbWl0XCI6IHRoaXMubGltaXQsXHJcbiAgICAgIFwiY2F0ZWdvcnlcIjogdGhpcy5jYXRlZ29yeVxyXG4gICAgfVxyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRNb2JVc2FnZWxpc3Qob2JqKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdCA9IHJlcy5kYXRhLmRhdGE7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlcyA9IFtdXHJcbiAgICAgICAgICB0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuY2hlY2tlZCA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5zdG9yZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgc3RvcmVJZDogZWxlbWVudC5zdG9yZUlkLFxyXG4gICAgICAgICAgICAgIHN0b3JlTmFtZTogZWxlbWVudC5zdG9yZU5hbWVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gcmVzLmRhdGEudG90YWxfY291bnRcclxuICAgICAgICAgIHRoaXMuc2VsZWN0QWxsID0gdGhpcy5tb2JpbGV1c2FnZURhdGFMaXN0LmV2ZXJ5KChvYmo6IGFueSkgPT4gb2JqLmNoZWNrZWQpO1xyXG4gICAgICAgICAgdGhpcy5zdG9yZXMgPSB0aGlzLnN0b3Jlc1xyXG4gICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZSh0aGlzLnN0b3JlcylcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZVxyXG4gICAgICAgICAgdGhpcy5nZXRtb2JpbGVVc2FnZURhdGF2aWV3KClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnZpZXdub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgb25yZXNldCgpIHtcclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0U3RvcmVzbGlzdCh7IGNsaWVudElkOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LCBjbHVzdGVyczogdGhpcy5ncm91cHMsIGNpdHk6IFtdIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHJlcy5kYXRhLnN0b3Jlc0RhdGE7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlcyA9IHJlcy5kYXRhLnN0b3Jlc0RhdGFcclxuICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUodGhpcy5zdG9yZUxpc3QpXHJcbiAgICAgICAgICB0aGlzLm9mZnNldCA9IDFcclxuICAgICAgICAgIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCA9PT0gJ3N0b3Jlb3BlbmFuZGNsb3NlJykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdCA9ICdzdG9yZW9wZW5hbmRjbG9zZSdcclxuICAgICAgICAgICAgdGhpcy5zdG9yZU9wZW5jbG9zZWxpc3QoZmFsc2UpXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYm94aW1hZ2VDaGVja2xpc3QuaW5jbHVkZXModGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCd6b25lTGlzdCcpPy5zZXRWYWx1ZShbXSlcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZFxyXG4gICAgICAgICAgICB0aGlzLnF1ZXVlYWxlcnRsaXN0KGZhbHNlKVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmltYWdlQ2hlY2tsaXN0LmluY2x1ZGVzKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdCA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkO1xyXG4gICAgICAgICAgICB0aGlzLmdldG1vYmlsZVVzYWdlRGF0YWxpc3QoZmFsc2UpXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlkZW9DaGVja2xpc3QuaW5jbHVkZXModGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQ7XHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tZXJ1bmF0dGVuZGVkbGlzdChmYWxzZSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlID09PSAnY2hlY2tsaXN0JyA/IFwiY3VzdG9tXCIgOiBcIlwiO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlID09PSAnQ2x1c3RlcnMnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdG9yZUxpc3Rkcm9wZG93bigpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMudXNlckxpc3Rkcm9wZG93bigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IFtdO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICBvbnZpZXcoKSB7XHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQgPT09ICdzdG9yZW9wZW5hbmRjbG9zZScpIHtcclxuICAgICAgdGhpcy5zZWxlY3QgPSAnc3RvcmVvcGVuYW5kY2xvc2UnXHJcbiAgICAgIHRoaXMuc3RvcmVPcGVuY2xvc2V2aWV3KClcclxuICAgIH0gZWxzZSBpZiAodGhpcy5ib3hpbWFnZUNoZWNrbGlzdC5pbmNsdWRlcyh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCkpIHtcclxuICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZFxyXG4gICAgICB0aGlzLnF1ZXVlYWxlcnR2aWV3KClcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pbWFnZUNoZWNrbGlzdC5pbmNsdWRlcyh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCkpIHtcclxuICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZDtcclxuICAgICAgdGhpcy5nZXRtb2JpbGVVc2FnZURhdGF2aWV3KClcclxuICAgIH0gZWxzZSBpZiAodGhpcy52aWRlb0NoZWNrbGlzdC5pbmNsdWRlcyh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCkpIHtcclxuICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZDtcclxuICAgICAgdGhpcy5nZXRjdXN0b21lcnVuYXR0ZW5kZWR2aWV3KClcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0Y3VzdG9tZXJ1bmF0dGVuZGVkdmlldygpIHtcclxuXHJcbiAgICB0aGlzLnZpZXdsb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlO1xyXG4gICAgdGhpcy5saW1pdCA9IDFcclxuICAgIHRoaXMucGFnaW5hdGlvblNpemVzID0gWzFdXHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIFwiZGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICBcInN0b3JlSWRcIjogc3RvcmVzLFxyXG4gICAgICBcImNsaWVudElkXCI6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgIFwiQ2hlY2tsaXN0VHlwZVwiOiB0aGlzLnNlbGVjdCxcclxuICAgICAgXCJ2aWV3SW1hZ2VcIjogdHJ1ZSxcclxuICAgICAgXCJvZmZzZXRcIjogKHRoaXMub2Zmc2V0IC0gMSksXHJcbiAgICAgIFwibGltaXRcIjogdGhpcy5saW1pdCxcclxuICAgICAgXCJjYXRlZ29yeVwiOiB0aGlzLmNhdGVnb3J5XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRjdXN0b21lcnVuYXR0ZW5kZWRsaXN0KG9iaik/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLmN1c3RvbWVydW5hdHRlbmRlZERhdGEgPSByZXMuZGF0YS5kYXRhXHJcbiAgICAgICAgICB0aGlzLnZpZXdsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnZpZXdub0RhdGEgPSBmYWxzZVxyXG4gICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gcmVzLmRhdGEudG90YWxfY291bnRcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBnZXRtb2JpbGVVc2FnZURhdGF2aWV3KCkge1xyXG4gICAgdGhpcy52aWV3bG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnZpZXdub0RhdGEgPSBmYWxzZTtcclxuICAgIHRoaXMubGltaXQgPSAxMFxyXG4gICAgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbMTBdXHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIFwiZnJvbURhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgXCJ0b0RhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50b0RhdGUsXHJcbiAgICAgIFwiZGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcInN0b3JlSWRcIjogc3RvcmVzLFxyXG4gICAgICBcImNsaWVudElkXCI6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgIFwiQ2hlY2tsaXN0VHlwZVwiOiB0aGlzLnNlbGVjdCxcclxuICAgICAgXCJ2aWV3SW1hZ2VcIjogdHJ1ZSxcclxuICAgICAgXCJvZmZzZXRcIjogKHRoaXMub2Zmc2V0IC0gMSksXHJcbiAgICAgIFwibGltaXRcIjogdGhpcy5saW1pdCxcclxuICAgICAgXCJjYXRlZ29yeVwiOiB0aGlzLmNhdGVnb3J5XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRNb2JVc2FnZWxpc3Qob2JqKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhID0gcmVzLmRhdGEuZGF0YVxyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2VcclxuICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IHJlcy5kYXRhLnRvdGFsX2NvdW50XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBnZXRmaWx0ZXJDb3VudCgpIHtcclxuICAgIGxldCBzdG9yZXMgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnN0b3JlTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS5zdG9yZUlkKVxyXG4gICAgbGV0IHVzZXJzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS51c2VyTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS51c2VyRW1haWwpXHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcInRvRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnRvRGF0ZSxcclxuICAgICAgXCJmaWx0ZXJ0eXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZmlsdGVydHlwZSxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJ1c2VyRW1haWxcIjogdXNlcnMsXHJcbiAgICAgIFwiYW5zd2VyVHlwZVwiOiB0aGlzLnNlbGVjdGVkU2VjdGlvblswXS5hbnN3ZXJUeXBlWzBdLFxyXG4gICAgICBcImNoZWNrbGlzdElkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkLFxyXG4gICAgICBcIkNoZWNrbGlzdFR5cGVcIjogXCJjdXN0b21cIixcclxuICAgICAgXCJxdWVzdGlvbnNcIjogdGhpcy5zZWxlY3RlZFNlY3Rpb25bMF0ucXVlc3Rpb25zWzBdXHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldEFuc3dlcmNvdW50KHBheWxvYWQpPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSk/LnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5hbnN3ZXJGaWx0ZXIgPSByZXMuZGF0YS5hbnN3ZXJzQ291bnRcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbnN3ZXJGaWx0ZXIgPSBbXVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgc2VsZWN0c2luZ2xlcXVlc3Rpb24oKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbiA9IHRoaXMudGVtcHNlbGVjdGVkU2VjdGlvblxyXG4gICAgaWYgKHRoaXMucXVlc3Rpb25zY291bnQodGhpcy5zZWxlY3RlZFNlY3Rpb24pID09IDAgfHwgdGhpcy5xdWVzdGlvbnNjb3VudCh0aGlzLnNlbGVjdGVkU2VjdGlvbikgPiAxKSB7XHJcbiAgICAgIHRoaXMuc2hvd3NpbmdsZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNob3dtdWx0aSA9IHRydWVcclxuICAgIH0gZWxzZSBpZiAodGhpcy5xdWVzdGlvbnNjb3VudCh0aGlzLnNlbGVjdGVkU2VjdGlvbikgPT0gMSkge1xyXG4gICAgICB0aGlzLnNob3dzaW5nbGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNob3dtdWx0aSA9IGZhbHNlXHJcblxyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFNlY3Rpb25bMF0uYW5zd2VyVHlwZVswXSA9PT0gXCJ5ZXMvbm9cIiB8fCB0aGlzLnNlbGVjdGVkU2VjdGlvblswXS5hbnN3ZXJUeXBlWzBdID09PSBcIm11bHRpcGxlY2hvaWNlc2luZ2xlXCIgfHwgdGhpcy5zZWxlY3RlZFNlY3Rpb25bMF0uYW5zd2VyVHlwZVswXSA9PT0gXCJtdWx0aXBsZWNob2ljZW11bHRpcGxlXCIpIHtcclxuICAgICAgICB0aGlzLnNob3dmaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZ2V0ZmlsdGVyQ291bnQoKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2hvd2ZpbHRlciA9IGZhbHNlXHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgICB0aGlzLnZpZXdsb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlO1xyXG4gICAgbGV0IHN0b3JlcyA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc3RvcmVMaXN0Lm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnN0b3JlSWQpXHJcbiAgICBsZXQgdXNlcnMgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnVzZXJMaXN0Lm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnVzZXJFbWFpbClcclxuICAgIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICdjaGVja2xpc3QnKSB7XHJcbiAgICAgIGxldCBvYmogPSB7XHJcbiAgICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICAgIFwiQ2hlY2tsaXN0VHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrTGlzdFR5cGUsIC8vIFtcImN1c3RvbVwiLCBcIkFJXCJdXHJcbiAgICAgICAgXCJjaGVja2xpc3ROYW1lXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSxcclxuICAgICAgICBcImNoZWNrbGlzdElkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkLFxyXG4gICAgICAgIFwiZmlsdGVydHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlcnR5cGUsXHJcbiAgICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgICBcInVzZXJFbWFpbFwiOiB1c2VycyxcclxuICAgICAgICBcImFuc3dlclR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5hbnN3ZXJUeXBlLCAvL1tcImRlc2NyaXB0aXZlXCIsXCJ5ZXMvbm9cIixcIm11bHRpcGxlY2hvaWNlc2luZ2xlXCIsXCJtdWx0aXBsZWNob2ljZW11bHRpcGxlXCIsXCJpbWFnZVwiLFwidmlkZW9cIixcImRlc2NyaXB0aXZlSW1hZ2VcIixcIm11bHRpcGxlSW1hZ2VcIl1cclxuICAgICAgICBcInZpZXdGbGFnXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld0ZsYWcsIC8vW3RydWUsIGZhbHNlXVxyXG4gICAgICAgIFwidmlld1JlZG9cIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS52aWV3UmVkbywgLy9bdHJ1ZSwgZmFsc2VdXHJcbiAgICAgICAgXCJmaWx0ZXJcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXIsXHJcbiAgICAgICAgXCJxdWVzdGlvbnNcIjogdGhpcy5zZWxlY3RlZFNlY3Rpb24ubGVuZ3RoID4gMCAmJiB0aGlzLnNlbGVjdGVkU2VjdGlvblswXS5xdWVzdGlvbnMubGVuZ3RoID4gMCA/IHRoaXMuc2VsZWN0ZWRTZWN0aW9uWzBdLnF1ZXN0aW9uc1swXSA6IFwiXCIsXHJcbiAgICAgICAgXCJhcHByb3ZlRmlsdGVyXCI6IHRoaXMuYXBwcm92ZUZpbHRlclxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0Y2hlY2tsaXN0KG9iaik/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAvLyB0aGlzLmNoZWNrbGlzdERhdGEgPSByZXM/LmRhdGEuY2hlY2tsaXN0UXVlc3Rpb25zO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZmlsdGVydHlwZSA9PT0gJ0NsdXN0ZXJzJykge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUocmVzPy5kYXRhPy5zdG9yZXNEZXRhaWxzKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCd1c2VyTGlzdCcpPy5zZXRWYWx1ZShyZXM/LmRhdGE/LnN0b3Jlc0RldGFpbHMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy52aWV3Q2hlY2tsaXN0cyhcImFsbFwiLCBcImFsbFwiKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2xpc3REYXRhID0gW107XHJcbiAgICAgICAgICAgIHRoaXMudmlld0NoZWNrbGlzdHNEYXRhID0gW107XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IG9iaiA9IHtcclxuICAgICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgICAgXCJ0b0RhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50b0RhdGUsXHJcbiAgICAgICAgXCJDaGVja2xpc3RUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudHlwZSwgLy8gW1wiY3VzdG9tXCIsIFwiQUlcIl1cclxuICAgICAgICBcImNoZWNrbGlzdE5hbWVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lLFxyXG4gICAgICAgIFwiY2hlY2tsaXN0SWRcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQsXHJcbiAgICAgICAgXCJmaWx0ZXJ0eXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZmlsdGVydHlwZSxcclxuICAgICAgICBcInN0b3JlSWRcIjogc3RvcmVzLFxyXG4gICAgICAgIFwidXNlckVtYWlsXCI6IHVzZXJzLFxyXG4gICAgICAgIFwiYW5zd2VyVHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmFuc3dlclR5cGUsIC8vW1wiZGVzY3JpcHRpdmVcIixcInllcy9ub1wiLFwibXVsdGlwbGVjaG9pY2VzaW5nbGVcIixcIm11bHRpcGxlY2hvaWNlbXVsdGlwbGVcIixcImltYWdlXCIsXCJ2aWRlb1wiLFwiZGVzY3JpcHRpdmVJbWFnZVwiLFwibXVsdGlwbGVJbWFnZVwiXVxyXG4gICAgICAgIFwidmlld0ZsYWdcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS52aWV3RmxhZywvL1t0cnVlLCBmYWxzZV1cclxuICAgICAgICBcInZpZXdSZWRvXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld1JlZG8sIC8vW3RydWUsIGZhbHNlXVxyXG4gICAgICAgIFwiZmlsdGVyXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZmlsdGVyLFxyXG4gICAgICAgIFwicXVlc3Rpb25zXCI6IHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxlbmd0aCA+IDAgJiYgdGhpcy5zZWxlY3RlZFNlY3Rpb25bMF0ucXVlc3Rpb25zLmxlbmd0aCA+IDAgPyB0aGlzLnNlbGVjdGVkU2VjdGlvblswXS5xdWVzdGlvbnNbMF0gOiBcIlwiXHJcblxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0UXVlc3Rpb25zKG9iaik/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAvLyB0aGlzLmNoZWNrbGlzdERhdGEgPSByZXM/LmRhdGEuY2hlY2tsaXN0UXVlc3Rpb25zO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZmlsdGVydHlwZSA9PT0gJ0NsdXN0ZXJzJykge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUocmVzPy5kYXRhPy5zdG9yZXNEZXRhaWxzKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCd1c2VyTGlzdCcpPy5zZXRWYWx1ZShyZXM/LmRhdGE/LnN0b3Jlc0RldGFpbHMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy52aWV3VGFza0xpc3QoXCJhbGxcIiwgXCJhbGxcIilcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tsaXN0RGF0YSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdDaGVja2xpc3RzRGF0YSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcbiAgYXBwb3ZlQ2hlY2tsaXN0KCkge1xyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEFwcHJvdmFsUG9wdXBDb21wb25lbnQsIHsgY2VudGVyZWQ6IHRydWUsIHNpemU6ICdtZCcsIH0pO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudHlwZSA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudHlwZTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmNoZWNrTGlzdE5hbWUgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWU7XHJcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQgPT0gJ3N1Ym1pdCcpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlID09PSAnQ2x1c3RlcnMnKXtcclxuICAgICAgICAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgICAgICAgICBpZihzdG9yZXMubGVuZ3RoID09IDApe1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiUGxlYXNlIHNlbGVjdCBhdGxlYXN0IG9uZSBzdG9yZVwiKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICB9XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgbGV0IHVzZXIgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnVzZXJMaXN0Lm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnVzZXJFbWFpbClcclxuICAgICAgICAgICAgIGlmKHVzZXIubGVuZ3RoID09IDApe1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiUGxlYXNlIHNlbGVjdCBhdGxlYXN0IG9uZSB1c2VyXCIpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlID09ICdjaGVja2xpc3QnKSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdEFwcHJvdmUoKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLkFwcHJvdmVUYXNrKClcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBjaGVja2xpc3RBcHByb3ZlKCkge1xyXG4gICAgbGV0IHN0b3JlcyA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc3RvcmVMaXN0Lm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnN0b3JlSWQpXHJcbiAgICBsZXQgdXNlciA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudXNlckxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEudXNlckVtYWlsKVxyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIFwiY2xpZW50SWRcIjogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCxcclxuICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcInRvRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnRvRGF0ZSxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJ1c2VyRW1haWxcIjogdXNlcixcclxuICAgICAgXCJzb3VyY2VDaGVja0xpc3RfaWRcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQsXHJcbiAgICAgIFwiZmlsdGVydHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlcnR5cGUsXHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmFwcHJvdmVjaGVja2xpc3QocGF5bG9hZCk/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLmFwcHJvdmFsc3RhdHVzKClcclxuICAgICAgICAgIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICdjaGVja2xpc3QnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q2hlY2tsaXN0UUEoZmFsc2UpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRUYXNrUUEodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0U3VjY2Vzc1RvYXN0KGA8ZGl2PjxzcGFuIGNsYXNzPVwibWUtOFwiID4ke3Jlcy5tZXNzYWdlfTwvc3Bhbj48L2Rpdj5gKVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KGVycj8uZXJyb3I/LmVycm9yKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG4gIEFwcHJvdmVUYXNrKCkge1xyXG4gICAgbGV0IHN0b3JlcyA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc3RvcmVMaXN0Lm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnN0b3JlSWQpXHJcbiAgICBsZXQgdXNlciA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudXNlckxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEudXNlckVtYWlsKVxyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIFwiZnJvbURhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgXCJ0b0RhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50b0RhdGUsXHJcbiAgICAgIFwic3RvcmVJZFwiOiBzdG9yZXMsXHJcbiAgICAgIFwidXNlckVtYWlsXCI6IHVzZXIsXHJcbiAgICAgIFwic291cmNlQ2hlY2tMaXN0X2lkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkLFxyXG4gICAgICBcImNsaWVudElkXCI6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgIFwiZmlsdGVydHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlcnR5cGUsXHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmFwcHJvdmV0YXNrKHBheWxvYWQpPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSk/LnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0U3VjY2Vzc1RvYXN0KGA8ZGl2PjxzcGFuIGNsYXNzPVwibWUtOFwiID4ke3Jlcy5tZXNzYWdlfTwvc3Bhbj48L2Rpdj5gKVxyXG4gICAgICAgICAgdGhpcy5hcHByb3ZhbHN0YXR1cygpXHJcbiAgICAgICAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlID09PSAnY2hlY2tsaXN0Jykge1xyXG4gICAgICAgICAgICB0aGlzLmdldENoZWNrbGlzdFFBKGZhbHNlKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VGFza1FBKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudHlwZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChlcnI/LmVycm9yPy5lcnJvcilcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcblxyXG5cclxuICB9XHJcblxyXG4gIGdldENoZWNrbGlzdFFBKHR5cGU6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24gPSBbXVxyXG4gICAgdGhpcy50ZW1wc2VsZWN0ZWRTZWN0aW9uID0gW11cclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLm5vRGF0YSA9IGZhbHNlXHJcbiAgICB0aGlzLnZpZXdsb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlO1xyXG4gICAgbGV0IHN0b3JlcyA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc3RvcmVMaXN0Lm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnN0b3JlSWQpXHJcbiAgICBsZXQgdXNlcnMgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnVzZXJMaXN0Lm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnVzZXJFbWFpbClcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIFwiZnJvbURhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgXCJ0b0RhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50b0RhdGUsXHJcbiAgICAgIFwiQ2hlY2tsaXN0VHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrTGlzdFR5cGUsIC8vIFtcImN1c3RvbVwiLCBcIkFJXCJdXHJcbiAgICAgIFwiY2hlY2tsaXN0TmFtZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUsXHJcbiAgICAgIFwiY2hlY2tsaXN0SWRcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQsXHJcbiAgICAgIFwiZmlsdGVydHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlcnR5cGUsXHJcbiAgICAgIFwidXNlckVtYWlsXCI6IHVzZXJzLFxyXG4gICAgICBcInN0b3JlSWRcIjogc3RvcmVzLFxyXG4gICAgICBcImFuc3dlclR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5hbnN3ZXJUeXBlLCAvL1tcImRlc2NyaXB0aXZlXCIsXCJ5ZXMvbm9cIixcIm11bHRpcGxlY2hvaWNlc2luZ2xlXCIsXCJtdWx0aXBsZWNob2ljZW11bHRpcGxlXCIsXCJpbWFnZVwiLFwidmlkZW9cIixcImRlc2NyaXB0aXZlSW1hZ2VcIixcIm11bHRpcGxlSW1hZ2VcIl1cclxuICAgICAgXCJ2aWV3RmxhZ1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdGbGFnLCAvL1t0cnVlLCBmYWxzZV1cclxuICAgICAgXCJ2aWV3UmVkb1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdSZWRvLCAvL1t0cnVlLCBmYWxzZV1cclxuICAgICAgXCJmaWx0ZXJcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXIsXHJcbiAgICAgIFwiYXBwcm92ZUZpbHRlclwiOiB0aGlzLmFwcHJvdmVGaWx0ZXIsXHJcbiAgICAgIFwicXVlc3Rpb25zXCI6IHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxlbmd0aCA+IDAgJiYgdGhpcy5zZWxlY3RlZFNlY3Rpb25bMF0ucXVlc3Rpb25zLmxlbmd0aCA+IDAgPyB0aGlzLnNlbGVjdGVkU2VjdGlvblswXS5xdWVzdGlvbnNbMF0gOiBcIlwiXHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldGNoZWNrbGlzdChvYmopPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSk/LnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5jaGVja2xpc3REYXRhID0gcmVzPy5kYXRhLmNoZWNrbGlzdFF1ZXN0aW9ucztcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlcnR5cGUgPT09ICdDbHVzdGVycycpIHtcclxuICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZShyZXM/LmRhdGE/LnN0b3Jlc0RldGFpbHMpXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgndXNlckxpc3QnKT8uc2V0VmFsdWUocmVzPy5kYXRhPy5zdG9yZXNEZXRhaWxzKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy52aWV3Q2hlY2tsaXN0cyhcImFsbFwiLCBcImFsbFwiKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdERhdGEgPSBbXTtcclxuICAgICAgICAgIHRoaXMudmlld0NoZWNrbGlzdHNEYXRhID0gW107XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgZ2V0dGFza1FBKHR5cGU6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24gPSBbXVxyXG4gICAgdGhpcy50ZW1wc2VsZWN0ZWRTZWN0aW9uID0gW11cclxuXHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5ub0RhdGEgPSBmYWxzZVxyXG4gICAgdGhpcy52aWV3bG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnZpZXdub0RhdGEgPSBmYWxzZTtcclxuICAgIGxldCBzdG9yZXMgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnN0b3JlTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS5zdG9yZUlkKVxyXG4gICAgbGV0IHVzZXJzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS51c2VyTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS51c2VyRW1haWwpXHJcbiAgICBsZXQgb2JqID0ge1xyXG4gICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlLCAvLyBbXCJjdXN0b21cIiwgXCJBSVwiXVxyXG4gICAgICBcImNoZWNrbGlzdE5hbWVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lLFxyXG4gICAgICBcImNoZWNrbGlzdElkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkLFxyXG4gICAgICBcImZpbHRlcnR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlLFxyXG4gICAgICBcInVzZXJFbWFpbFwiOiB1c2VycyxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJhbnN3ZXJUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuYW5zd2VyVHlwZSwgLy9bXCJkZXNjcmlwdGl2ZVwiLFwieWVzL25vXCIsXCJtdWx0aXBsZWNob2ljZXNpbmdsZVwiLFwibXVsdGlwbGVjaG9pY2VtdWx0aXBsZVwiLFwiaW1hZ2VcIixcInZpZGVvXCIsXCJkZXNjcmlwdGl2ZUltYWdlXCIsXCJtdWx0aXBsZUltYWdlXCJdXHJcbiAgICAgIFwidmlld0ZsYWdcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS52aWV3RmxhZywgLy9bdHJ1ZSwgZmFsc2VdXHJcbiAgICAgIFwidmlld1JlZG9cIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS52aWV3UmVkbywgLy9bdHJ1ZSwgZmFsc2VdXHJcbiAgICAgIFwiZmlsdGVyXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZmlsdGVyLFxyXG4gICAgICBcImFwcHJvdmVGaWx0ZXJcIjogdGhpcy5hcHByb3ZlRmlsdGVyLFxyXG4gICAgICBcInF1ZXN0aW9uc1wiOiB0aGlzLnNlbGVjdGVkU2VjdGlvbi5sZW5ndGggPiAwICYmIHRoaXMuc2VsZWN0ZWRTZWN0aW9uWzBdLnF1ZXN0aW9ucy5sZW5ndGggPiAwID8gdGhpcy5zZWxlY3RlZFNlY3Rpb25bMF0ucXVlc3Rpb25zWzBdIDogXCJcIlxyXG4gICAgfVxyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRRdWVzdGlvbnMob2JqKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuY2hlY2tsaXN0RGF0YSA9IHJlcz8uZGF0YS5jaGVja2xpc3RRdWVzdGlvbnM7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlID09PSAnQ2x1c3RlcnMnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUocmVzPy5kYXRhPy5zdG9yZXNEZXRhaWxzKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3VzZXJMaXN0Jyk/LnNldFZhbHVlKHJlcz8uZGF0YT8uc3RvcmVzRGV0YWlscylcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMudmlld1Rhc2tMaXN0KFwiYWxsXCIsIFwiYWxsXCIpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuY2hlY2tsaXN0RGF0YSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy52aWV3Q2hlY2tsaXN0c0RhdGEgPSBbXTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG4gIHZpZXdUYXNrTGlzdChzZWN0aW9uTmFtZTogYW55LCBxdWVzdGlvbk5hbWU6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEV4cG9ydCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWN0aW9uTmFtZSA9IHNlY3Rpb25OYW1lO1xyXG4gICAgdGhpcy5xdWVzdGlvbk5hbWUgPSBxdWVzdGlvbk5hbWVcclxuXHJcbiAgICB0aGlzLmxpbWl0ID0gMTtcclxuICAgIHRoaXMucGFnaW5hdGlvblNpemVzID0gWzFdO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5saW1pdCA9IDEwLFxyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvblNpemVzID0gWzEwXTtcclxuICAgIH1cclxuICAgIHRoaXMudmlld2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2VcclxuICAgIGxldCBzdG9yZXMgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnN0b3JlTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS5zdG9yZUlkKVxyXG4gICAgbGV0IHVzZXJzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS51c2VyTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS51c2VyRW1haWwpXHJcbiAgICB0aGlzLnZpZXdDaGVja2xpc3Rzb3B0aW9ucyA9IHtcclxuICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcInRvRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnRvRGF0ZSxcclxuICAgICAgXCJDaGVja2xpc3RUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudHlwZSwgLy8gW1wiY2hlY2tsaXN0XCIsIFwidGFza1wiXVxyXG4gICAgICBcImNoZWNrbGlzdE5hbWVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lLFxyXG4gICAgICBcImZpbHRlcnR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlLFxyXG4gICAgICBcInVzZXJFbWFpbFwiOiB1c2VycyxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJhbnN3ZXJUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuYW5zd2VyVHlwZSwgLy9bXCJkZXNjcmlwdGl2ZVwiLFwieWVzL25vXCIsXCJtdWx0aXBsZWNob2ljZXNpbmdsZVwiLFwibXVsdGlwbGVjaG9pY2VtdWx0aXBsZVwiLFwiaW1hZ2VcIixcInZpZGVvXCIsXCJkZXNjcmlwdGl2ZUltYWdlXCIsXCJtdWx0aXBsZUltYWdlXCJdICAgICAgXHJcbiAgICAgIFwib2Zmc2V0XCI6ICh0aGlzLm9mZnNldCAtIDEpLFxyXG4gICAgICBcImxpbWl0XCI6IHRoaXMubGltaXQsXHJcbiAgICAgIFwiY2hlY2tsaXN0SWRcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQsXHJcbiAgICAgIFwic291cmNlQ2hlY2tMaXN0X2lkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkLFxyXG4gICAgICBcInZpZXdGbGFnXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld0ZsYWcsXHJcbiAgICAgIFwidmlld1JlZG9cIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS52aWV3UmVkbywgLy9bdHJ1ZSwgZmFsc2VdXHJcbiAgICAgIFwicXVlc3Rpb25zXCI6IHRoaXMuc2VsZWN0ZWRTZWN0aW9uLFxyXG4gICAgICBcImZpbHRlclwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlcixcclxuICAgICAgXCJhcHByb3ZlRmlsdGVyXCI6IHRoaXMuYXBwcm92ZUZpbHRlcixcclxuICAgIH1cclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0QW5zd2Vycyh0aGlzLnZpZXdDaGVja2xpc3Rzb3B0aW9ucyk/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLmFwcHJvdmFsc3RhdHVzKClcclxuICAgICAgICAgIHRoaXMudmlld0NoZWNrbGlzdHNEYXRhID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSB0aGlzLnZpZXdDaGVja2xpc3RzRGF0YS50b3RhbF9jb3VudFxyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2VcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy52aWV3Q2hlY2tsaXN0c0RhdGEgPSBbXVxyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB2aWV3Q2hlY2tsaXN0cyhzZWN0aW9uTmFtZTogYW55LCBxdWVzdGlvbk5hbWU6IGFueSkge1xyXG4gICAgLy8gdGhpcy5zZWxlY3RlZFNlY3Rpb24gPSBbXSAgICBcclxuICAgIHRoaXMuc2VsZWN0ZWRFeHBvcnQgPSBmYWxzZTtcclxuICAgIHRoaXMuc2VjdGlvbk5hbWUgPSBzZWN0aW9uTmFtZTtcclxuICAgIHRoaXMucXVlc3Rpb25OYW1lID0gcXVlc3Rpb25OYW1lXHJcblxyXG4gICAgdGhpcy5saW1pdCA9IDE7XHJcbiAgICB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFsxXTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMubGltaXQgPSAxMCxcclxuICAgICAgICB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFsxMF07XHJcbiAgICB9XHJcbiAgICB0aGlzLnZpZXdsb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlXHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCB1c2VycyA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudXNlckxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEudXNlckVtYWlsKVxyXG4gICAgdGhpcy52aWV3Q2hlY2tsaXN0c29wdGlvbnMgPSB7XHJcbiAgICAgIFwiZnJvbURhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgXCJ0b0RhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50b0RhdGUsXHJcbiAgICAgIFwiQ2hlY2tsaXN0VHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrTGlzdFR5cGUsIC8vIFtcImNoZWNrbGlzdFwiLCBcInRhc2tcIl1cclxuICAgICAgXCJjaGVja2xpc3ROYW1lXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSxcclxuICAgICAgXCJmaWx0ZXJ0eXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZmlsdGVydHlwZSxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJ1c2VyRW1haWxcIjogdXNlcnMsXHJcbiAgICAgIFwiYW5zd2VyVHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmFuc3dlclR5cGUsIC8vW1wiZGVzY3JpcHRpdmVcIixcInllcy9ub1wiLFwibXVsdGlwbGVjaG9pY2VzaW5nbGVcIixcIm11bHRpcGxlY2hvaWNlbXVsdGlwbGVcIixcImltYWdlXCIsXCJ2aWRlb1wiLFwiZGVzY3JpcHRpdmVJbWFnZVwiLFwibXVsdGlwbGVJbWFnZVwiXSAgICAgIFxyXG4gICAgICBcIm9mZnNldFwiOiAodGhpcy5vZmZzZXQgLSAxKSxcclxuICAgICAgXCJsaW1pdFwiOiB0aGlzLmxpbWl0LFxyXG4gICAgICBcImNoZWNrbGlzdElkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkLFxyXG4gICAgICBcInNvdXJjZUNoZWNrTGlzdF9pZFwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCxcclxuICAgICAgXCJ2aWV3RmxhZ1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdGbGFnLFxyXG4gICAgICBcInZpZXdSZWRvXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld1JlZG8sLy9bdHJ1ZSwgZmFsc2VdXHJcbiAgICAgIFwicXVlc3Rpb25zXCI6IHRoaXMuc2VsZWN0ZWRTZWN0aW9uLFxyXG4gICAgICBcImZpbHRlclwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlcixcclxuICAgICAgXCJhcHByb3ZlRmlsdGVyXCI6IHRoaXMuYXBwcm92ZUZpbHRlcixcclxuICAgIH1cclxuICAgIHRoaXMudHJheFNlcnZpY2Uudmlld0NoZWNrbGlzdHModGhpcy52aWV3Q2hlY2tsaXN0c29wdGlvbnMpPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSk/LnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5hcHByb3ZhbHN0YXR1cygpXHJcbiAgICAgICAgICB0aGlzLnZpZXdDaGVja2xpc3RzRGF0YSA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gdGhpcy52aWV3Q2hlY2tsaXN0c0RhdGEudG90YWxfY291bnRcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudmlld0NoZWNrbGlzdHNEYXRhID0gW11cclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG4gIHRhc2tDcmVhdGUoKSB7IH1cclxuXHJcbiAgc2hvd3NpZGVuYXY6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHNpZGVuYXYoKSB7XHJcbiAgICB0aGlzLnNob3dzaWRlbmF2ID0gIXRoaXMuc2hvd3NpZGVuYXY7XHJcbiAgfVxyXG5cclxuICBvblBhZ2VDaGFuZ2UocGFnZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZTtcclxuICB9XHJcblxyXG5cclxuICBjaGVja0FJY2hlY2tsaXN0KCkge1xyXG4gICAgaWYgKHRoaXMuY29tYmluZWRDaGVja2xpc3QuaW5jbHVkZXModGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb25QYWdlQ2hhbmdldmlldyhwYWdlT2Zmc2V0OiBudW1iZXIpIHtcclxuICAgIHRoaXMub2Zmc2V0ID0gcGFnZU9mZnNldDtcclxuICAgIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCA9PT0gJ3N0b3Jlb3BlbmFuZGNsb3NlJykge1xyXG4gICAgICB0aGlzLnN0b3JlT3BlbmNsb3NldmlldygpXHJcbiAgICB9IGlmICh0aGlzLmJveGltYWdlQ2hlY2tsaXN0LmluY2x1ZGVzKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkKSkge1xyXG4gICAgICB0aGlzLnF1ZXVlYWxlcnR2aWV3KClcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pbWFnZUNoZWNrbGlzdC5pbmNsdWRlcyh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCkpIHtcclxuICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZDtcclxuICAgICAgdGhpcy5nZXRtb2JpbGVVc2FnZURhdGF2aWV3KClcclxuICAgIH0gZWxzZSBpZiAodGhpcy52aWRlb0NoZWNrbGlzdC5pbmNsdWRlcyh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCkpIHtcclxuICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZDtcclxuICAgICAgdGhpcy5nZXRjdXN0b21lcnVuYXR0ZW5kZWR2aWV3KClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICdjaGVja2xpc3QnKSB7XHJcbiAgICAgICAgdGhpcy52aWV3Q2hlY2tsaXN0cygnJywgJycpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudmlld1Rhc2tMaXN0KFwiYWxsXCIsIFwiYWxsXCIpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogMzAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgb25QYWdlU2l6ZUNoYW5nZShwYWdlU2l6ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmxpbWl0ID0gcGFnZVNpemU7XHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQgPT09ICdzdG9yZW9wZW5hbmRjbG9zZScpIHtcclxuICAgICAgdGhpcy5zdG9yZU9wZW5jbG9zZXZpZXcoKVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmJveGltYWdlQ2hlY2tsaXN0LmluY2x1ZGVzKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkKSkge1xyXG4gICAgICB0aGlzLnF1ZXVlYWxlcnR2aWV3KClcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pbWFnZUNoZWNrbGlzdC5pbmNsdWRlcyh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCkpIHtcclxuICAgICAgdGhpcy5nZXRtb2JpbGVVc2FnZURhdGF2aWV3KClcclxuICAgIH0gZWxzZSBpZiAodGhpcy52aWRlb0NoZWNrbGlzdC5pbmNsdWRlcyh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCkpIHtcclxuICAgICAgdGhpcy5jdXN0b21lcnVuYXR0ZW5kZWRsaXN0KGZhbHNlKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudHlwZSA9PT0gJ2NoZWNrbGlzdCcpIHtcclxuICAgICAgICB0aGlzLnZpZXdDaGVja2xpc3RzKCcnLCAnJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy52aWV3VGFza0xpc3QoXCJhbGxcIiwgXCJhbGxcIilcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5leHBvcnRTaG93ID0gZmFsc2U7XHJcbiAgfVxyXG4gIGV4cG9ydFNob3cgPSBmYWxzZTtcclxuICBleHBvcnRMYWJlbDogc3RyaW5nID0gJ0V4cG9ydCc7XHJcbiAgZXhwb3J0RGV0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLmV4cG9ydFNob3cgPSAhdGhpcy5leHBvcnRTaG93O1xyXG4gIH1cclxuICBxdWVzdGlvbnNjb3VudChkYXRhOiBhbnkpIHtcclxuICAgIGxldCBjb3VudCA9IDBcclxuICAgIGRhdGEuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGNvdW50ID0gY291bnQgKyBlbGVtZW50LnF1ZXN0aW9ucy5sZW5ndGhcclxuXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBjb3VudDtcclxuICB9XHJcbiAgc2V0RXhwb3J0QXNQUFQodHlwZTogYW55LCBmaWxlVHlwZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmV4cG9ydExhYmVsID0gdHlwZTsgIC8vIFVwZGF0ZSB0aGUgbGFiZWwgdGV4dFxyXG4gICAgdGhpcy5leHBvcnRTaG93ID0gZmFsc2U7ICAvLyBDbG9zZSB0aGUgZXhwb3J0IG1lbnUgYWZ0ZXIgc2VsZWN0aW9uXHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCB1c2VycyA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudXNlckxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEudXNlckVtYWlsKVxyXG5cclxuICAgIGlmIChmaWxlVHlwZSA9PT0gJ3BwdCcpIHtcclxuICAgICAgbGV0IHN0YXJ0ID0gZGF5anModGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSk7XHJcbiAgICAgIGxldCBlbmQgPSBkYXlqcyh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnRvRGF0ZSk7XHJcbiAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBlbmQuZGlmZihzdGFydCwgJ2RheXMnKTtcclxuXHJcbiAgICAgIGlmIChkaWZmZXJlbmNlID09PSAyICYmIHRoaXMucXVlc3Rpb25zY291bnQodGhpcy5zZWxlY3RlZFNlY3Rpb24pID4gMSkge1xyXG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoYFBsZWFzZSBzZWxlY3QgbWF4aW11bSBvZiAxIHF1ZXN0aW9uIG9ubHlgKVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGlmIChkaWZmZXJlbmNlID09PSAxICYmIHRoaXMucXVlc3Rpb25zY291bnQodGhpcy5zZWxlY3RlZFNlY3Rpb24pID4gMykge1xyXG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoYFBsZWFzZSBzZWxlY3QgbWF4aW11bSBvZiAzIHF1ZXN0aW9uIG9ubHlgKVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGlmIChkaWZmZXJlbmNlID09PSAwICYmIHRoaXMucXVlc3Rpb25zY291bnQodGhpcy5zZWxlY3RlZFNlY3Rpb24pID4gMykge1xyXG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoYFBsZWFzZSBzZWxlY3QgbWF4aW11bSBvZiAzIHF1ZXN0aW9uIG9ubHlgKVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZXhwb3J0TGFiZWwgPSAnRXhwb3J0J1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBcImRvd25sb2FkSW5zZXJ0RnJvbVwiOiBcImdhbGxlcnlcIixcclxuICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcInRvRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnRvRGF0ZSxcclxuICAgICAgXCJjaGVja0xpc3RUeXBlXCI6IHRoaXMuc2VsZWN0LFxyXG4gICAgICBcImNoZWNrbGlzdElkXCI6IFtdLFxyXG4gICAgICBcInNvdXJjZUNoZWNrTGlzdF9pZFwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCxcclxuICAgICAgXCJjaGVja2xpc3ROYW1lXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSxcclxuICAgICAgXCJhbnN3ZXJUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuYW5zd2VyVHlwZSxcclxuICAgICAgXCJmaWxlVHlwZVwiOiBmaWxlVHlwZSxcclxuICAgICAgXCJzdG9yZUlkc1wiOiBzdG9yZXMsXHJcbiAgICAgIFwidXNlckVtYWlsTGlzdFwiOiB1c2VycyxcclxuICAgICAgXCJjbGllbnRJZFwiOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LFxyXG4gICAgICBcInF1ZXN0aW9uc1wiOiB0aGlzLnNlbGVjdGVkU2VjdGlvbixcclxuICAgICAgXCJwcmV2aWV3VHlwZVwiOiB0aGlzLnByZXZpZXdUeXBlLFxyXG4gICAgICBcInZpZXdGbGFnXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld0ZsYWcsXHJcbiAgICAgIFwidmlld1JlZG9cIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS52aWV3UmVkbywgLy9bdHJ1ZSwgZmFsc2VdXHJcbiAgICAgIFwiaW5zZXJ0VHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGUsXHJcbiAgICAgIFwiZmlsdGVyXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZmlsdGVyLFxyXG4gICAgICBcImFwcHJvdmVGaWx0ZXJcIjogdGhpcy5hcHByb3ZlRmlsdGVyLFxyXG4gICAgICBcImZpbHRlcnR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlXHJcbiAgICB9XHJcbiAgICBsZXQgY2xpZW50aW5mbyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJjbGllbnQtZGV0YWlsc1wiKSB8fCBcIlwiKVxyXG4gICAgbGV0IHVzZXJpbmZvID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInVzZXItaW5mb1wiKSB8fCBcIlwiKVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ID09PSAnY3VzdG9tJyB8fCB0aGlzLnNlbGVjdCA9PT0gJ3Rhc2snKSB7XHJcbiAgICAgIGlmICgoY2xpZW50aW5mbz8udHJheERhdGVSYW5nZSA9PT0gNyB8fCB1c2VyaW5mbz8udHJheERhdGVSYW5nZSA9PT0gNykgJiYgdHlwZSA9PT0gJ0V4cG9ydCBhcyBDU1YnIHx8IHR5cGUgPT09ICdFeHBvcnQgYXMgUFBUJyB8fCB0eXBlID09PSAnRXhwb3J0IGFzIFpJUCcpIHtcclxuICAgICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oRXhwb3J0R2FsbGVyeUNvbXBvbmVudCwge1xyXG4gICAgICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgICAgICBzaXplOiBcImxnXCIsXHJcbiAgICAgICAgICBzY3JvbGxhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgd2luZG93Q2xhc3M6IFwiY3VzdG9tLWhlaWdodC1tb2RhbFwiICAvLyA8LS0gQWRkIGEgY3VzdG9tIGNsYXNzIGhlcmUgIFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnR5cGUgPSB0eXBlO1xyXG4gICAgICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnBheWxvYWQgPSBwYXlsb2FkO1xyXG5cclxuICAgICAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0U3VjY2Vzc1RvYXN0KGA8ZGl2PjxzcGFuIGNsYXNzPVwibWUtOFwiID5Eb3dubG9hZGluZyB5b3VyIHJlcG9ydHM8L3NwYW4+PGEgaHJlZj1cIm5vdGlmaWNhdGlvbnMvYWxlcnRzP3RhYj1kb3dubG9hZFwiIHN0eWxlPVwiY29sb3I6Izk5YzNmZjsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsgY3Vyc29yOnBvaW50ZXJcIiA+VmlldzwvYT48L2Rpdj5gKVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJlcnJvclwiKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChgU29tZXRoaW5nIHdlbnQgd3JvbmcgIWApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5leHBvcnRMYWJlbCA9ICdFeHBvcnQnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRyYXhTZXJ2aWNlLnJlcG9ydFRhYmxlRXhwb3J0KHBheWxvYWQpPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSk/LnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0U3VjY2Vzc1RvYXN0KGA8ZGl2PjxzcGFuIGNsYXNzPVwibWUtOFwiID5Eb3dubG9hZGluZyB5b3VyIHJlcG9ydHM8L3NwYW4+PGEgaHJlZj1cIm5vdGlmaWNhdGlvbnMvYWxlcnRzP3RhYj1kb3dubG9hZFwiIHN0eWxlPVwiY29sb3I6Izk5YzNmZjsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsgY3Vyc29yOnBvaW50ZXJcIiA+VmlldzwvYT48L2Rpdj5gKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoYFNvbWV0aGluZyB3ZW50IHdyb25nICFgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0TGFiZWwgPSAnRXhwb3J0J1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3QgPT09ICdzY3J1bScgfHwgdGhpcy5zZWxlY3QgPT09ICdjbGVhbmluZycgfHwgdGhpcy5zZWxlY3QgPT09ICdzdG9yZW9wZW5hbmRjbG9zZScgfHwgdGhpcy5zZWxlY3QgPT09ICdpbnZlbnRvcnljb3VudCcgfHwgdGhpcy5zZWxlY3QgPT09ICdjYXJzYXR0ZW5kZWQnIHx8IHRoaXMuc2VsZWN0ID09PSAnbnVtYmVycGxhdGVpbmZvJyB8fCB0aGlzLnNlbGVjdCA9PT0gJ3ZlaGljbGVfY2hlY2tfaW4nKSB7XHJcblxyXG4gICAgICBpZiAodGhpcy5zZWxlY3QgIT0gJ3N0b3Jlb3BlbmFuZGNsb3NlJykge1xyXG4gICAgICAgIHRoaXMucHJldmlld1R5cGUgPSAndmlkZW8nXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudHJheFNlcnZpY2UuYWljaGVja2xpc3RFeHBvcnQocGF5bG9hZCk/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRTdWNjZXNzVG9hc3QoYDxkaXY+PHNwYW4gY2xhc3M9XCJtZS04XCIgPkRvd25sb2FkaW5nIHlvdXIgcmVwb3J0czwvc3Bhbj48YSBocmVmPVwibm90aWZpY2F0aW9ucy9hbGVydHM/dGFiPWRvd25sb2FkXCIgc3R5bGU9XCJjb2xvcjojOTljM2ZmOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyBjdXJzb3I6cG9pbnRlclwiID5WaWV3PC9hPjwvZGl2PmApXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KGBTb21ldGhpbmcgd2VudCB3cm9uZyAhYClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZXhwb3J0TGFiZWwgPSAnRXhwb3J0J1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHR5cGVDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5yZW1vdmVRdWVyeVBhcmFtcygpXHJcbiAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgndHlwZScpPy5zZXRWYWx1ZShldmVudClcclxuICAgIHRoaXMuc2hvd3NpbmdsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93bXVsdGkgPSB0cnVlO1xyXG4gICAgdGhpcy5hbnN3ZXJGaWx0ZXIgPSBbXVxyXG4gICAgaWYgKGV2ZW50ID09PSAndGFzaycpIHtcclxuICAgICAgdGhpcy50cmF4U2VydmljZS5nZXRTdG9yZXNsaXN0KHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsIGNsdXN0ZXJzOiB0aGlzLmdyb3VwcywgY2l0eTogW10gfSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gcmVzLmRhdGEuc3RvcmVzRGF0YTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZXMgPSByZXMuZGF0YS5zdG9yZXNEYXRhXHJcbiAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUodGhpcy5zdG9yZUxpc3QpXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0QWxsVGFza3MoZmFsc2UpXHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja0xpc3RUeXBlJyk/LnNldFZhbHVlKCdjdXN0b20nKVxyXG4gICAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldFN0b3Jlc2xpc3QoeyBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCwgY2x1c3RlcnM6IHRoaXMuZ3JvdXBzLCBjaXR5OiBbXSB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSByZXMuZGF0YS5zdG9yZXNEYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlcyA9IHJlcy5kYXRhLnN0b3Jlc0RhdGFcclxuICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZSh0aGlzLnN0b3JlTGlzdClcclxuICAgICAgICAgICAgdGhpcy5nZXRBbGxDaGVja0xpc3RzKHRydWUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG5cclxuICBnZXRBbGxUYXNrcyh0eXBlOiBhbnkpIHtcclxuICAgIGxldCBzdG9yZXMgPSB0aGlzLnN0b3Jlcz8ubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIGZyb21EYXRlOiB0aGlzLmdhbGxlcnlGb3JtLmdldCgnZnJvbURhdGUnKT8udmFsdWUsXHJcbiAgICAgIHRvRGF0ZTogdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3RvRGF0ZScpPy52YWx1ZSxcclxuICAgICAgc3RvcmVJZDogc3RvcmVzLFxyXG4gICAgICBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzPy5jbGllbnQsXHJcbiAgICAgIHNvcnRDb2x1bW5OYW1lOiBcImNoZWNrTGlzdE5hbWVcIixcclxuICAgICAgc29ydEJ5OiAxXHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldFRhc2tMaXN0KHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdHMgPSByZXMuZGF0YS5jaGVja2xpc3REYXRhXHJcblxyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW1zLnNvdXJjZUNoZWNrTGlzdF9pZCAmJiB0aGlzLnF1ZXJ5UGFyYW1zLmNoZWNrbGlzdFR5cGUgPT0gJ3Rhc2snKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3NvdXJjZUNoZWNrTGlzdF9pZCcpPy5zZXRWYWx1ZSh0aGlzLnF1ZXJ5UGFyYW1zLnNvdXJjZUNoZWNrTGlzdF9pZClcclxuICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgndHlwZScpPy5zZXRWYWx1ZSgndGFzaycpXHJcbiAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrTGlzdFR5cGUnKT8uc2V0VmFsdWUodGhpcy5xdWVyeVBhcmFtcy5jaGVja2xpc3RUeXBlKVxyXG4gICAgICAgICAgICAgIGxldCBnZXRjaGVja2xpc3QgPSB0aGlzLmNoZWNrbGlzdHMuZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlLnNvdXJjZUNoZWNrTGlzdF9pZCA9PT0gdGhpcy5xdWVyeVBhcmFtcy5zb3VyY2VDaGVja0xpc3RfaWQpXHJcblxyXG4gICAgICAgICAgICAgIGlmIChnZXRjaGVja2xpc3QgJiYgZ2V0Y2hlY2tsaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja2xpc3ROYW1lJyk/LnNldFZhbHVlKGdldGNoZWNrbGlzdFswXT8uY2hlY2tMaXN0TmFtZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja0xpc3REZXNjcmlwdGlvbicpPy5zZXRWYWx1ZShnZXRjaGVja2xpc3RbMF0/LmNoZWNrTGlzdERlc2NyaXB0aW9uKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja2xpc3ROYW1lID0gZ2V0Y2hlY2tsaXN0WzBdPy5jaGVja0xpc3ROYW1lXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIHRoaXMucmVtb3ZlUXVlcnlQYXJhbXMoKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja2xpc3ROYW1lJyk/LnNldFZhbHVlKHRoaXMuY2hlY2tsaXN0c1swXT8uY2hlY2tMaXN0TmFtZSlcclxuICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc291cmNlQ2hlY2tMaXN0X2lkJyk/LnNldFZhbHVlKHRoaXMuY2hlY2tsaXN0c1swXT8uc291cmNlQ2hlY2tMaXN0X2lkKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXR0YXNrUUEoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LCAwKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdHMgPSBbXVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldFRhc2tRQSh0eXBlOiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uID0gW11cclxuICAgIHRoaXMudGVtcHNlbGVjdGVkU2VjdGlvbiA9IFtdXHJcblxyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2VcclxuICAgIHRoaXMudmlld2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2U7XHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCB1c2VyID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS51c2VyTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS51c2VyRW1haWwpXHJcbiAgICBsZXQgb2JqID0ge1xyXG4gICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlLCAvLyBbXCJjdXN0b21cIiwgXCJBSVwiXVxyXG4gICAgICBcImNoZWNrbGlzdE5hbWVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lLFxyXG4gICAgICBcImNoZWNrbGlzdElkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkLFxyXG4gICAgICBcInN0b3JlSWRcIjogc3RvcmVzLFxyXG4gICAgICBcInVzZXJFbWFpbFwiOiB1c2VyLFxyXG4gICAgICBcImZpbHRlcnR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlLFxyXG4gICAgICBcImFuc3dlclR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5hbnN3ZXJUeXBlLCAvL1tcImRlc2NyaXB0aXZlXCIsXCJ5ZXMvbm9cIixcIm11bHRpcGxlY2hvaWNlc2luZ2xlXCIsXCJtdWx0aXBsZWNob2ljZW11bHRpcGxlXCIsXCJpbWFnZVwiLFwidmlkZW9cIixcImRlc2NyaXB0aXZlSW1hZ2VcIixcIm11bHRpcGxlSW1hZ2VcIl1cclxuICAgICAgXCJ2aWV3RmxhZ1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdGbGFnLCAvL1t0cnVlLCBmYWxzZV1cclxuICAgICAgXCJ2aWV3UmVkb1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdSZWRvLCAvL1t0cnVlLCBmYWxzZV1cclxuICAgICAgXCJmaWx0ZXJcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXIsXHJcbiAgICAgIFwiYXBwcm92ZUZpbHRlclwiOiB0aGlzLmFwcHJvdmVGaWx0ZXIsXHJcbiAgICAgIFwicXVlc3Rpb25zXCI6IHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxlbmd0aCA+IDAgJiYgdGhpcy5zZWxlY3RlZFNlY3Rpb25bMF0ucXVlc3Rpb25zLmxlbmd0aCA+IDAgPyB0aGlzLnNlbGVjdGVkU2VjdGlvblswXS5xdWVzdGlvbnNbMF0gOiBcIlwiXHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldFF1ZXN0aW9ucyhvYmopPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSk/LnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5jaGVja2xpc3REYXRhID0gcmVzPy5kYXRhLmNoZWNrbGlzdFF1ZXN0aW9ucztcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlcnR5cGUgPT09ICdDbHVzdGVycycpIHtcclxuICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZShyZXM/LmRhdGE/LnN0b3Jlc0RldGFpbHMpXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgndXNlckxpc3QnKT8uc2V0VmFsdWUocmVzPy5kYXRhPy5zdG9yZXNEZXRhaWxzKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy52aWV3VGFza0xpc3QoXCJhbGxcIiwgXCJhbGxcIilcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jaGVja2xpc3REYXRhID0gW107XHJcbiAgICAgICAgICB0aGlzLnZpZXdDaGVja2xpc3RzRGF0YSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnZpZXdsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnZpZXdub0RhdGEgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIHZpZXdUYXNrcyhzZWN0aW9uTmFtZTogYW55LCBxdWVzdGlvbk5hbWU6IGFueSkge1xyXG4gICAgLy8gdGhpcy5zZWxlY3RlZFNlY3Rpb24gPSBbXSAgICBcclxuICAgIHRoaXMuc2VsZWN0ZWRFeHBvcnQgPSBmYWxzZTtcclxuICAgIHRoaXMuc2VjdGlvbk5hbWUgPSBzZWN0aW9uTmFtZTtcclxuICAgIHRoaXMucXVlc3Rpb25OYW1lID0gcXVlc3Rpb25OYW1lXHJcblxyXG4gICAgdGhpcy5saW1pdCA9IDE7XHJcbiAgICB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFsxXTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMubGltaXQgPSAxMCxcclxuICAgICAgICB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFsxMF07XHJcbiAgICB9XHJcbiAgICB0aGlzLnZpZXdsb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlXHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIHRoaXMudmlld0NoZWNrbGlzdHNvcHRpb25zID0ge1xyXG4gICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja0xpc3RUeXBlLCAvLyBbXCJjaGVja2xpc3RcIiwgXCJ0YXNrXCJdXHJcbiAgICAgIFwiY2hlY2tsaXN0TmFtZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUsXHJcbiAgICAgIFwic3RvcmVJZFwiOiBzdG9yZXMsXHJcbiAgICAgIFwiYW5zd2VyVHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmFuc3dlclR5cGUsIC8vW1wiZGVzY3JpcHRpdmVcIixcInllcy9ub1wiLFwibXVsdGlwbGVjaG9pY2VzaW5nbGVcIixcIm11bHRpcGxlY2hvaWNlbXVsdGlwbGVcIixcImltYWdlXCIsXCJ2aWRlb1wiLFwiZGVzY3JpcHRpdmVJbWFnZVwiLFwibXVsdGlwbGVJbWFnZVwiXSAgICAgIFxyXG4gICAgICBcIm9mZnNldFwiOiAodGhpcy5vZmZzZXQgLSAxKSxcclxuICAgICAgXCJsaW1pdFwiOiB0aGlzLmxpbWl0LFxyXG4gICAgICBcImNoZWNrbGlzdElkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkLFxyXG4gICAgICBcInNvdXJjZUNoZWNrTGlzdF9pZFwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCxcclxuICAgICAgXCJ2aWV3RmxhZ1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdGbGFnLFxyXG4gICAgICBcInZpZXdSZWRvXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld1JlZG8sIC8vW3RydWUsIGZhbHNlXVxyXG4gICAgICBcInF1ZXN0aW9uc1wiOiB0aGlzLnNlbGVjdGVkU2VjdGlvbixcclxuICAgICAgXCJmaWx0ZXJcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXIsXHJcbiAgICAgIFwiYXBwcm92ZUZpbHRlclwiOiB0aGlzLmFwcHJvdmVGaWx0ZXIsXHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLnZpZXdDaGVja2xpc3RzKHRoaXMudmlld0NoZWNrbGlzdHNvcHRpb25zKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMudmlld0NoZWNrbGlzdHNEYXRhID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSB0aGlzLnZpZXdDaGVja2xpc3RzRGF0YS50b3RhbF9jb3VudFxyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2VcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy52aWV3Q2hlY2tsaXN0c0RhdGEgPSBbXVxyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuXHJcbiAgdGFza3JlZGlyZWN0KHF1ZXN0aW9uOiBhbnksIHN0b3JlUHJvZmlsZTogYW55LCBjaGVja2xpc3RJbmZvOiBhbnkpIHtcclxuICAgIGlmIChzdG9yZVByb2ZpbGU/LnN0b3JlX2lkICYmIHN0b3JlUHJvZmlsZT8uc3RvcmVfaWQgIT0gJycpIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnLycsIHsgc2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21hbmFnZS90cmF4L2dhbGxlcnknXSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtcclxuICAgICAgICAgICAgICBDaGVja2xpc3REYXRlOiBkYXlqcyhxdWVzdGlvbi50YXNrRGF0ZSA/IHF1ZXN0aW9uLnRhc2tEYXRlIDogY2hlY2tsaXN0SW5mby5kYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQnKSxcclxuICAgICAgICAgICAgICBzdG9yZUlkOiBzdG9yZVByb2ZpbGU/LnN0b3JlX2lkLFxyXG4gICAgICAgICAgICAgIGNoZWNrbGlzdFR5cGU6IFwidGFza1wiLFxyXG4gICAgICAgICAgICAgIHNvdXJjZUNoZWNrTGlzdF9pZDogcXVlc3Rpb24udGFza0lkLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxyXG4gICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nLCB7IHNraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZSB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tYW5hZ2UvdHJheC9nYWxsZXJ5J10sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XHJcbiAgICAgICAgICAgICAgQ2hlY2tsaXN0RGF0ZTogZGF5anMocXVlc3Rpb24udGFza0RhdGUgPyBxdWVzdGlvbi50YXNrRGF0ZSA6IGNoZWNrbGlzdEluZm8uZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJyksXHJcbiAgICAgICAgICAgICAgdXNlckVtYWlsOiBzdG9yZVByb2ZpbGU/LnVzZXJFbWFpbCxcclxuICAgICAgICAgICAgICBjaGVja2xpc3RUeXBlOiBcInRhc2tcIixcclxuICAgICAgICAgICAgICBzb3VyY2VDaGVja0xpc3RfaWQ6IHF1ZXN0aW9uLnRhc2tJZCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgVmlld0luRGV0YWlscyhkYXRhOiBhbnksIGNoZWNrbGlzdEluZm86IGFueSwgc3RvcmVQcm9maWxlOiBhbnksIHNlY3Rpb246IGFueSkge1xyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFRhc2tMb2dzQ29tcG9uZW50LCB7IGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbGcnLCB9KTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLm9wZXJhdGlvbnR5cGUgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGU7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5zb3VyY2VDaGVja0xpc3RfaWQgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZDtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmlucHV0RGF0YSA9IGRhdGE7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5jaGVja2xpc3RJbmZvID0gY2hlY2tsaXN0SW5mbztcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnN0b3JlUHJvZmlsZSA9IHN0b3JlUHJvZmlsZTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnNlY3Rpb25JbmZvID0gc2VjdGlvbjtcclxuXHJcbiAgfVxyXG5cclxuICBhZGRUYXNrKHR5cGU6IGFueSwgZGF0YTogYW55LCBjaGVja2xpc3RJbmZvOiBhbnksIHN0b3JlUHJvZmlsZTogYW55LCBzZWN0aW9uOiBhbnkpIHtcclxuXHJcbiAgICAvLyBpZihkYXRhLmFuc3dlclR5cGUgPT09XCJtdWx0aXBsZWNob2ljZXNpbmdsZVwifHxkYXRhLmFuc3dlclR5cGUgPT09XCJtdWx0aXBsZWNob2ljZW11bHRpcGxlXCIpe1xyXG4gICAgLy8gICBkYXRhLmFuc3dlcnMgPSBbXVxyXG4gICAgLy8gfVxyXG5cclxuICAgIGRhdGEucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSA9IFtkYXRhLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2VdXHJcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQWRkVGFza0NvbXBvbmVudCwge1xyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSwgc2l6ZTogJ2xnJyxcclxuICAgICAgd2luZG93Q2xhc3M6ICdjdXN0b20tbW9kYWwtaGVpZ2h0JyxcclxuICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnXHJcbiAgICB9KTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnR5cGUgPSB0eXBlO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2Uub3BlcmF0aW9udHlwZSA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudHlwZTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnNvdXJjZUNoZWNrTGlzdF9pZCA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuaW5wdXREYXRhID0gZGF0YTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmNoZWNrbGlzdEluZm8gPSBjaGVja2xpc3RJbmZvO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2Uuc3RvcmVQcm9maWxlID0gc3RvcmVQcm9maWxlO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2Uuc2VjdGlvbkluZm8gPSBzZWN0aW9uO1xyXG5cclxuXHJcbiAgICBkYXRhPy5hbnN3ZXJzLmZvckVhY2goKGFuczogYW55KSA9PiB7XHJcbiAgICAgIGlmIChhbnM/LnJlZmVyZW5jZUltYWdlICYmIGFucz8ucmVmZXJlbmNlSW1hZ2UgIT0gJycgJiYgYW5zPy5yZWZlcmVuY2VJbWFnZSAhPSBudWxsKSB7XHJcbiAgICAgICAgYW5zLnJlZmVyZW5jZUltYWdlID0gW2Fucz8ucmVmZXJlbmNlSW1hZ2VdXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudGFza0RldGFpbHMgPSB7XHJcbiAgICAgIHNlY3Rpb25zOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgXCJpZFwiOiBcIlwiLFxyXG4gICAgICAgICAgXCJuYW1lXCI6IFwiXCIsXHJcbiAgICAgICAgICBcInF1ZXN0aW9uc1wiOiBbZGF0YV1cclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCA9PSAnc3VibWl0Jykge1xyXG4gICAgICAgIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICdjaGVja2xpc3QnKSB7XHJcbiAgICAgICAgICB0aGlzLmdldENoZWNrbGlzdFFBKGZhbHNlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5nZXRUYXNrUUEodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBkYXRhLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UgPSAnJ1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBhcHByb3ZhbHN0YXR1cygpIHtcclxuICAgIGxldCBzdG9yZXMgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnN0b3JlTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS5zdG9yZUlkKVxyXG4gICAgbGV0IHVzZXJzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS51c2VyTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS51c2VyRW1haWwpXHJcbiAgICBsZXQgaW5wdXQgPSB7XHJcbiAgICAgIFwiZnJvbURhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgXCJ0b0RhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50b0RhdGUsXHJcbiAgICAgIFwic3RvcmVJZFwiOiBzdG9yZXMsXHJcbiAgICAgIFwidXNlckVtYWlsXCI6IHVzZXJzLFxyXG4gICAgICBcImNoZWNrbGlzdElkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkLFxyXG4gICAgICBcIkNoZWNrbGlzdFR5cGVcIjogXCJjdXN0b21cIixcclxuICAgICAgXCJ0eXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudHlwZSxcclxuICAgICAgXCJmaWx0ZXJ0eXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZmlsdGVydHlwZSxcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICdjaGVja2xpc3QnKSB7XHJcbiAgICAgIHRoaXMudHJheFNlcnZpY2UuYXBwcm92YWxzdGF0dXNjaGVja2xpc3QoaW5wdXQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgICB0aGlzLmFwcHJvdmFsU3RhdHVzID0gZmFsc2VcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwcm92YWxTdGF0dXMgPSB0cnVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50cmF4U2VydmljZS5hcHByb3ZhbHN0YXR1c3Rhc2soaW5wdXQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgICB0aGlzLmFwcHJvdmFsU3RhdHVzID0gZmFsc2VcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwcm92YWxTdGF0dXMgPSB0cnVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgfVxyXG4gIHRhc2tUYWIodGFzazogYW55KSB7XHJcblxyXG5cclxuICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdmaWx0ZXInKT8uc2V0VmFsdWUodGFzay5rZXkpXHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5ub0RhdGEgPSBmYWxzZVxyXG4gICAgdGhpcy52aWV3bG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnZpZXdub0RhdGEgPSBmYWxzZTtcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIFwiZnJvbURhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgXCJ0b0RhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50b0RhdGUsXHJcbiAgICAgIFwiQ2hlY2tsaXN0VHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrTGlzdFR5cGUsIC8vIFtcImN1c3RvbVwiLCBcIkFJXCJdXHJcbiAgICAgIFwiY2hlY2tsaXN0TmFtZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUsXHJcbiAgICAgIFwiY2hlY2tsaXN0SWRcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQsXHJcbiAgICAgIFwic3RvcmVJZFwiOiB0YXNrLnN0b3JlcyxcclxuICAgICAgXCJhbnN3ZXJUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuYW5zd2VyVHlwZSwgLy9bXCJkZXNjcmlwdGl2ZVwiLFwieWVzL25vXCIsXCJtdWx0aXBsZWNob2ljZXNpbmdsZVwiLFwibXVsdGlwbGVjaG9pY2VtdWx0aXBsZVwiLFwiaW1hZ2VcIixcInZpZGVvXCIsXCJkZXNjcmlwdGl2ZUltYWdlXCIsXCJtdWx0aXBsZUltYWdlXCJdXHJcbiAgICAgIFwidmlld0ZsYWdcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS52aWV3RmxhZywgLy9bdHJ1ZSwgZmFsc2VdXHJcbiAgICAgIFwidmlld1JlZG9cIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS52aWV3UmVkbywgLy9bdHJ1ZSwgZmFsc2VdXHJcbiAgICAgIFwiZmlsdGVyXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZmlsdGVyLFxyXG4gICAgICBcImFwcHJvdmVGaWx0ZXJcIjogdGhpcy5hcHByb3ZlRmlsdGVyLFxyXG4gICAgICBcImZpbHRlcnR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlLFxyXG4gICAgICBcInF1ZXN0aW9uc1wiOiB0aGlzLnNlbGVjdGVkU2VjdGlvbi5sZW5ndGggPiAwICYmIHRoaXMuc2VsZWN0ZWRTZWN0aW9uWzBdLnF1ZXN0aW9ucy5sZW5ndGggPiAwID8gdGhpcy5zZWxlY3RlZFNlY3Rpb25bMF0ucXVlc3Rpb25zWzBdIDogXCJcIlxyXG4gICAgfVxyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRjaGVja2xpc3Qob2JqKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIC8vIHRoaXMuY2hlY2tsaXN0RGF0YSA9IHJlcz8uZGF0YS5jaGVja2xpc3RRdWVzdGlvbnM7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlID09PSAnQ2x1c3RlcnMnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUocmVzPy5kYXRhPy5zdG9yZXNEZXRhaWxzKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3VzZXJMaXN0Jyk/LnNldFZhbHVlKHJlcz8uZGF0YT8uc3RvcmVzRGV0YWlscylcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMudmlld0NoZWNrbGlzdHMoXCJhbGxcIiwgXCJhbGxcIilcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jaGVja2xpc3REYXRhID0gW107XHJcbiAgICAgICAgICB0aGlzLnZpZXdDaGVja2xpc3RzRGF0YSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnZpZXdsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnZpZXdub0RhdGEgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gIH1cclxuICBjYXRlZ29yeUNoYW5nZSgpIHtcclxuICAgIHRoaXMuY3VzdG9tZXJ1bmF0dGVuZGVkbGlzdChmYWxzZSlcclxuICB9XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3pvb21Qb3B1cCcpIHpvb21Qb3B1cDogRWxlbWVudFJlZjtcclxuICBvcGVuTW9kZWwoZGF0YTogYW55KSB7XHJcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGhpcy56b29tUG9wdXAsIHsgY2VudGVyZWQ6IHRydWUsIHNpemU6ICd4bCcgfSk7XHJcbiAgICB0aGlzLnZpZXdJbWFnZSA9IGRhdGE7XHJcbiAgfVxyXG5nZXRHcmlkQ29sdW1ucyhsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgaWYgKGxlbmd0aCA9PT0gMSkgcmV0dXJuICcxZnInO1xyXG4gIGlmIChsZW5ndGggPT09IDIpIHJldHVybiAncmVwZWF0KDIsIDFmciknO1xyXG4gIGlmIChsZW5ndGggPT09IDMpIHJldHVybiAncmVwZWF0KDMsIDFmciknO1xyXG4gIGlmIChsZW5ndGggPT09IDQpIHJldHVybiAncmVwZWF0KDIsIDFmciknO1xyXG4gIGlmIChsZW5ndGggPD0gNikgcmV0dXJuICdyZXBlYXQoMywgMWZyKSc7XHJcbiAgaWYgKGxlbmd0aCA9PT0gNyB8fCBsZW5ndGggPT09IDgpIHJldHVybiAncmVwZWF0KDQsIDFmciknO1xyXG4gIGlmIChsZW5ndGggPD0gMTApIHJldHVybiAncmVwZWF0KDUsIDFmciknO1xyXG4gIHJldHVybiAncmVwZWF0KDYsIDFmciknO1xyXG59XHJcbiAgaGFzUmVmZXJlbmNlSW1hZ2VzKHF1ZXN0aW9uOiBhbnkpOiBib29sZWFuIHtcclxuICByZXR1cm4gcXVlc3Rpb24/LmFuc3dlcnM/LnNvbWUoKGE6YW55KSA9PiBBcnJheS5pc0FycmF5KGEucmVmZXJlbmNlSW1hZ2UpICYmIGEucmVmZXJlbmNlSW1hZ2UubGVuZ3RoID4gMCk7XHJcbn1cclxuaGFzQ2hlY2tsaXN0UmVmZXJlbmNlSW1hZ2VzKHF1ZXN0aW9uOiBhbnkpOiBib29sZWFuIHtcclxuICByZXR1cm4gcXVlc3Rpb24/LmFuc3dlcnM/LnNvbWUoKGE6YW55KSA9PiBhLnJlZmVyZW5jZUltYWdlKTtcclxufVxyXG5zZWxlY3RlZEltYWdlVXJsOiBzdHJpbmcgPSAnJztcclxuc2VsZWN0ZWRJbWFnZU5hbWU6IHN0cmluZyA9ICcnO1xyXG5jdXJyZW50SW1hZ2VJbmRleDogbnVtYmVyID0gMDtcclxuaW1hZ2VMaXN0OiBzdHJpbmdbXSA9IFtdO1xyXG5pbWFnZU5hbWVMaXN0OiBzdHJpbmdbXSA9IFtdO1xyXG5cclxub3BlbkltYWdlUG9wdXAoaW1hZ2VzOiBzdHJpbmdbXSwgbmFtZXM6IHN0cmluZ1tdLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgdGhpcy5pbWFnZUxpc3QgPSBpbWFnZXM7XHJcbiAgdGhpcy5pbWFnZU5hbWVMaXN0ID0gbmFtZXM7XHJcbiAgdGhpcy5jdXJyZW50SW1hZ2VJbmRleCA9IGluZGV4O1xyXG5cclxuICB0aGlzLnNlbGVjdGVkSW1hZ2VVcmwgPSB0aGlzLmltYWdlTGlzdFt0aGlzLmN1cnJlbnRJbWFnZUluZGV4XTtcclxuICB0aGlzLnNlbGVjdGVkSW1hZ2VOYW1lID0gdGhpcy5pbWFnZU5hbWVMaXN0W3RoaXMuY3VycmVudEltYWdlSW5kZXhdO1xyXG5cclxuICBjb25zdCBtb2RhbDogYW55ID0gbmV3ICh3aW5kb3cgYXMgYW55KS5ib290c3RyYXAuTW9kYWwoXHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1hZ2VNb2RhbCcpXHJcbiAgKTtcclxuICBtb2RhbC5zaG93KCk7XHJcbn1cclxuXHJcbm5hdmlnYXRlSW1hZ2UoZGlyZWN0aW9uOiAncHJldicgfCAnbmV4dCcpOiB2b2lkIHtcclxuICBpZiAoZGlyZWN0aW9uID09PSAncHJldicgJiYgdGhpcy5jdXJyZW50SW1hZ2VJbmRleCA+IDApIHtcclxuICAgIHRoaXMuY3VycmVudEltYWdlSW5kZXgtLTtcclxuICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ25leHQnICYmIHRoaXMuY3VycmVudEltYWdlSW5kZXggPCB0aGlzLmltYWdlTGlzdC5sZW5ndGggLSAxKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRJbWFnZUluZGV4Kys7XHJcbiAgfVxyXG5cclxuICB0aGlzLnNlbGVjdGVkSW1hZ2VVcmwgPSB0aGlzLmltYWdlTGlzdFt0aGlzLmN1cnJlbnRJbWFnZUluZGV4XTtcclxuICB0aGlzLnNlbGVjdGVkSW1hZ2VOYW1lID0gdGhpcy5pbWFnZU5hbWVMaXN0W3RoaXMuY3VycmVudEltYWdlSW5kZXhdO1xyXG59XHJcblxyXG5nZXRJbWFnZVVybHModXNlckFuc3dlcnM6IGFueVtdKTogc3RyaW5nW10ge1xyXG4gIHJldHVybiB1c2VyQW5zd2Vycy5tYXAoYSA9PiB0aGlzLmVudmlyb25tZW50LlRyYXhBbnN3ZXJDRE4gKyBhLmFuc3dlcik7XHJcbn1cclxuXHJcbmdldEltYWdlTmFtZXModXNlckFuc3dlcnM6IGFueVtdKTogc3RyaW5nW10ge1xyXG4gIHJldHVybiB1c2VyQW5zd2Vycy5tYXAoYSA9PiBhLmFuc3dlcik7XHJcbn1cclxuXHJcbn0iLCJcclxuPGRpdiAqbmdJZj1cIm5vdGlmeUNvdW50PjBcIiBjbGFzcz1cImgteGwtMTAwIGZsZXgtcm93IGZsZXgtc3RhY2sgZmxleC13cmFwIHAtMlwiPlxyXG4gICAgICAgIDwhLS0gdG9hc3QgY2FyZCBzdGFydHMgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRvYXN0Y2FyZCBjb2wtbWQtMTIgbWItNFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhbGlnbi1pdGVtcy1zdGFydFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b2FzdHRleHQgZC1ibG9ja1wiPjxzcGFuIGNsYXNzPVwibWUtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMTYgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkuMTQyMzQgMi40VjEuNjg3NUM5LjE0MjM0IDEuMDMxNzggOC42MzE2NiAwLjUgNy45OTk1NSAwLjVDNy4zNjc0NCAwLjUgNi44NTY3NSAxLjAzMTc4IDYuODU2NzUgMS42ODc1VjIuNEM0LjIxNzYxIDIuOTUwMzMgMi4yODU1OCA1LjM0NjQ5IDIuMjg1NTggOC4yMTg3NVY4LjkxNjQxQzIuMjg1NTggMTAuNjY0MyAxLjY2OTE4IDEyLjM0NTMgMC41NTM1MzIgMTMuNjUxNkwwLjI4ODY5IDEzLjk1OTZDLTAuMDEwMzA0NCAxNC4zMTIxIC0wLjA4NDAzOTYgMTQuODA5NCAwLjEwMDMwNyAxNS4yMzYxQzAuMjg0NjU0IDE1LjY2MjkgMC42OTI4MSAxNS45Mzc1IDEuMTQyNzkgMTUuOTM3NUgxNC44NTYzQzE1LjMwNjMgMTUuOTM3NSAxNS43MTM0IDE1LjY2MjkgMTUuODk5MSAxNS4yMzYxQzE2LjA4NDggMTQuODA5NCAxNi4wMDk4IDE0LjMxMjEgMTUuNzA5OCAxMy45NTk2TDE1LjQ0NTYgMTMuNjUxNkMxNC4zMzEzIDEyLjM0NTMgMTMuNzEzNSAxMC42NjQzIDEzLjcxMzUgOC45MTY0MVY4LjIxODc1QzEzLjcxMzUgNy45NDEyNSAxMy42OTUyIDcuNjY4MTkgMTMuNjU5NyA3LjQwMDgxQzEzLjI2NzYgNy41NDU3NiAxMi44NDMyIDcuNjI1IDEyLjQgNy42MjVDMTAuNDExOCA3LjYyNSA4LjggNi4wMzAwMSA4LjggNC4wNjI1QzguOCAzLjQ2Nzc4IDguODgxOTMgMi44OTI4OSA5LjE0MjM0IDIuNEM5LjE2NDE3IDIuNDA0NjEgOS4xMjA2MSAyLjM5NTE0IDkuMTQyMzQgMi40WlwiIGZpbGw9XCIjMDBBM0ZGXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYuMzgxNzggMTguODA2MUM2LjgxMDMzIDE5LjI1MTQgNy4zOTI0NCAxOS41IDcuOTk5NTUgMTkuNUM4LjU3NDUyIDE5LjUgOS4xODg3NyAxOS4yNTE0IDkuNjE3MzIgMTguODA2MUMxMC4wNDU5IDE4LjM2MDcgMTAuMjg1MSAxNy43MjI1IDEwLjI4NTEgMTcuMTI1SDUuNzEzOTZDNS43MTM5NiAxNy43MjI1IDUuOTUzMjMgMTguMzYwNyA2LjM4MTc4IDE4LjgwNjFaXCIgZmlsbD1cIiMwMEEzRkZcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxM1wiIGN5PVwiMy41XCIgcj1cIjNcIiBmaWxsPVwiI0YwNDQzOFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5OZXcgRGV0ZWN0aW9uIEZvdW5kISBSZWZyZXNoIE5vdyB0byB2aWV3IG5ldyBkZXRlY3Rpb248L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJyZWZyZXNobm93KClcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tb3V0bGluZSBidG4gYWxpZ24taXRlbXMtZW5kIHRleHQtbm93cmFwIG1zLTQgY3Vyc29yLXBvaW50ZXJcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzEyMTY1XzYyNzgxKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTkuMTY3MiAzLjMzMTcyVjguMzMxNzJNMTkuMTY3MiA4LjMzMTcySDE0LjE2NzJNMTkuMTY3MiA4LjMzMTcyTDE1LjMwODkgNC42OTgzOEMxNC4xNTk0IDMuNTQ4MTcgMTIuNjY3MiAyLjgwMjcxIDExLjA1NzIgMi41NzQzNEM5LjQ0NzE2IDIuMzQ1OTcgNy44MDY1MyAyLjY0NzA2IDYuMzgyNTEgMy40MzIyNUM0Ljk1ODUgNC4yMTc0NCAzLjgyODI2IDUuNDQ0MTggMy4xNjIxIDYuOTI3NjFDMi40OTU5NSA4LjQxMTA0IDIuMzI5OTcgMTAuMDcwOCAyLjY4OTE5IDExLjY1NjhDMy4wNDg0IDEzLjI0MjcgMy45MTMzNSAxNC42NjkgNS4xNTM2OCAxNS43MjA2QzYuMzk0MDEgMTYuNzcyMiA3Ljk0MjU0IDE3LjM5MjIgOS41NjU5IDE3LjQ4NzJDMTEuMTg5MyAxNy41ODIyIDEyLjc5OTUgMTcuMTQ3IDE0LjE1NCAxNi4yNDcxQzE1LjUwODUgMTUuMzQ3MyAxNi41MzM5IDE0LjAzMTYgMTcuMDc1NiAxMi40OTg0XCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzEyMTY1XzYyNzgxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPjxzcGFuIGNsYXNzPVwicmVmcmVzaHRleHQgbXMtMlwiPjwvc3Bhbj4gUmVmcmVzaCBOb3cgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJnYWxsZXJ5LWNhcmQgcG9cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXIgbWItNFwiPkdhbGxlcnk8L2Rpdj5cclxuXHJcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImdhbGxlcnlGb3JtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cInRvcDogMjAlO1wiIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMSBwb3NpdGlvbi1hYnNvbHV0ZSBtcy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEzLjMzMzMgMS42NjY2M1Y0Ljk5OTk2TTYuNjY2NjcgMS42NjY2M1Y0Ljk5OTk2TTIuNSA4LjMzMzI5SDE3LjVNNC4xNjY2NyAzLjMzMzI5SDE1LjgzMzNDMTYuNzUzOCAzLjMzMzI5IDE3LjUgNC4wNzk0OCAxNy41IDQuOTk5OTZWMTYuNjY2NkMxNy41IDE3LjU4NzEgMTYuNzUzOCAxOC4zMzMzIDE1LjgzMzMgMTguMzMzM0g0LjE2NjY3QzMuMjQ2MTkgMTguMzMzMyAyLjUgMTcuNTg3MSAyLjUgMTYuNjY2NlY0Ljk5OTk2QzIuNSA0LjA3OTQ4IDMuMjQ2MTkgMy4zMzMyOSA0LjE2NjY3IDMuMzMzMjlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmeC1kYXRlLXJhbmdlIGZvcm0tY29udHJvbCBwcy0xNCB6LTJcIiBzdHlsZT1cIm1pbi13aWR0aDogMjYwcHggIWltcG9ydGFudDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgbmd4RGF0ZXJhbmdlcGlja2VyTWQgIFtkcm9wc109XCInZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcGVuc109XCIncmlnaHQnXCIgW2Fsd2F5c1Nob3dDYWxlbmRhcnNdPVwiZmFsc2VcIiBba2VlcENhbGVuZGFyT3BlbmluZ1dpdGhSYW5nZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NhbmNlbF09XCJmYWxzZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWREYXRlUmFuZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIiAgKGRhdGVzVXBkYXRlZCk9XCJkYXRlY2hhbmdlKCRldmVudClcIiAoY2xpY2spPVwicmVzZXRWYWxpZGF0aW9uKClcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhcnREYXRlQ2hhbmdlZCk9XCJvblN0YXJ0RGF0ZUNoYW5nZSgkZXZlbnQpXCIgW2lzQ3VzdG9tRGF0ZV09XCJpc0N1c3RvbURhdGVcIiBbYXV0b0FwcGx5XT1cInRydWVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbG9jYWxlXT1cInsgZm9ybWF0OiAnREQtTU0tWVlZWScsIGZpcnN0RGF5OiAxLCBtb250aE5hbWVzOiBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXSB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImRhdGVyYW5nZVwiIFtyZWFkb25seV09XCJ0cnVlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwidHlwZVwiIFtpZEZpZWxkXT1cIid2YWx1ZSdcIiBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwidHlwZVwiIChpdGVtQ2hhbmdlKT1cInR5cGVDaGFuZ2UoJGV2ZW50KVwiID48L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IG1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1zaW5nbGUtc2VsZWN0IFtpdGVtc109XCJjaGVja2xpc3RzXCIgIFttdWx0aV09XCJmYWxzZVwiIFtzZWFyY2hGaWVsZF09XCInY2hlY2tMaXN0TmFtZSdcIiBbaWRGaWVsZF09XCInX2lkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwiY2hlY2tsaXN0TmFtZWNoYW5nZSgkZXZlbnQsZmFsc2UpXCIgW3NlbGVjdGVkVmFsdWVzXT1cIlt7Y2hlY2tMaXN0TmFtZTpnYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrbGlzdE5hbWUnKT8udmFsdWV9XVwiPjwvbGliLXNpbmdsZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImFuc3dlclR5cGVcIiBbaWRGaWVsZF09XCIndmFsdWUnXCIgW25hbWVGaWVsZF09XCInbGFiZWwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImFuc3dlclR5cGVcIj48L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIG1iLTRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImZpbHRlcnR5cGVcIiBbaWRGaWVsZF09XCIndmFsdWUnXCIgW25hbWVGaWVsZF09XCInbGFiZWwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZmlsdGVydHlwZVwiIChpdGVtQ2hhbmdlKT1cImZpbHRlckNoYW5nZSgkZXZlbnQpXCIgPjwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIG1iLTRcIiAqbmdJZj1cImdhbGxlcnlGb3JtLmdldCgnZmlsdGVydHlwZScpPy52YWx1ZSA9PT0nQ2x1c3RlcnMnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Qtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBsYWNlaG9sZGVyLW92ZXJsYXlcIiAqbmdJZj1cIiEoZ2FsbGVyeUZvcm0uZ2V0KCdDbHVzdGVyTGlzdCcpPy52YWx1ZT8ubGVuZ3RoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgY2x1c3RlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWdyb3VwLXNlbGVjdCBbaXRlbXNdPVwiQ2x1c3Rlckxpc3RcIiBbZGlzYWJsZWRdPVwiZmFsc2VcIiBbbXVsdGldPVwidHJ1ZVwiIFtzZWFyY2hGaWVsZF09XCInZ3JvdXBOYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkRmllbGRdPVwiJ2dyb3VwTmFtZSdcIiAoc2VsZWN0ZWQpPVwib25ncm91cFNlbGVjdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZXNdPVwiZ2FsbGVyeUZvcm0uZ2V0KCdDbHVzdGVyTGlzdCcpPy52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItZ3JvdXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBtYi00XCIgKm5nSWY9XCJnYWxsZXJ5Rm9ybS5nZXQoJ2ZpbHRlcnR5cGUnKT8udmFsdWUgPT09J1RlYW1zJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwbGFjZWhvbGRlci1vdmVybGF5XCIgKm5nSWY9XCIhKGdhbGxlcnlGb3JtLmdldCgnVGVhbXNMaXN0Jyk/LnZhbHVlPy5sZW5ndGgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBUZWFtc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWdyb3VwLXNlbGVjdCBbaXRlbXNdPVwiVGVhbXNMaXN0XCIgW2Rpc2FibGVkXT1cImZhbHNlXCIgW211bHRpXT1cInRydWVcIiBbc2VhcmNoRmllbGRdPVwiJ3RlYW1OYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkRmllbGRdPVwiJ3RlYW1OYW1lJ1wiIChzZWxlY3RlZCk9XCJvblRlYW1zU2VsZWN0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZFZhbHVlc109XCJnYWxsZXJ5Rm9ybS5nZXQoJ1RlYW1zTGlzdCcpPy52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItZ3JvdXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBtYi00XCIgKm5nSWY9XCJnYWxsZXJ5Rm9ybS5nZXQoJ2ZpbHRlcnR5cGUnKT8udmFsdWUgPT09J0NsdXN0ZXJzJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBsYWNlaG9sZGVyLW92ZXJsYXlcIiAqbmdJZj1cIiEoZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8udmFsdWU/Lmxlbmd0aClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBTdG9yZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1zdG9yZXMtc2VsZWN0IFtpdGVtc109XCJzdG9yZUxpc3RcIiBbZGlzYWJsZWRdPVwiZmFsc2VcIiBbbXVsdGldPVwidHJ1ZVwiIFtzZWFyY2hGaWVsZF09XCInc3RvcmVOYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRGaWVsZF09XCInc3RvcmVJZCdcIiAoc2VsZWN0ZWQpPVwib25TdG9yZVNlbGVjdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZFZhbHVlc109XCJnYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy52YWx1ZVwiPjwvbGliLXN0b3Jlcy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgbWItNFwiICpuZ0lmPVwiZ2FsbGVyeUZvcm0uZ2V0KCdmaWx0ZXJ0eXBlJyk/LnZhbHVlID09PSdUZWFtcydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwbGFjZWhvbGRlci1vdmVybGF5XCIgKm5nSWY9XCIhKGdhbGxlcnlGb3JtLmdldCgndXNlckxpc3QnKT8udmFsdWU/Lmxlbmd0aClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCB1c2Vyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLXN0b3Jlcy1zZWxlY3QgW2l0ZW1zXT1cInVzZXJMaXN0XCIgW2Rpc2FibGVkXT1cImZhbHNlXCIgW211bHRpXT1cInRydWVcIiBbc2VhcmNoRmllbGRdPVwiJ3VzZXJOYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRGaWVsZF09XCIndXNlck5hbWUnXCIgKHNlbGVjdGVkKT1cIm9uVXNlclNlbGVjdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZFZhbHVlc109XCJnYWxsZXJ5Rm9ybS5nZXQoJ3VzZXJMaXN0Jyk/LnZhbHVlXCI+PC9saWItc3RvcmVzLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCB0ZXh0LWVuZFwiPiAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTUgdy0xMDBcIiAqbmdJZj1cInNlbGVjdCA9PT0gJ2V5ZXRlc3QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgWyhuZ01vZGVsKV09XCJjYXRlZ29yeVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhbGxcIj5BbGw8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZHVsdHNcIj5BZHVsdHM8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJraWRzXCI+S2lkczwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTUgdy0xMDBcIiAqbmdJZj1cInNlbGVjdCA9PT0gJ2NsZWFuaW5nJ3x8c2VsZWN0ID09PSdzY3J1bSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBbKG5nTW9kZWwpXT1cImNhdGVnb3J5XCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFsbFwiPkFsbDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInJlamVjdGVkXCI+QnJlYWNoZWQ8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhcHByb3ZlZFwiPk5vdC1icmVhY2hlZDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTUgdy0xMDAgdGV4dC1zdGFydFwiICpuZ0lmPVwic2VsZWN0ID09PSAncXVldWVhbGVydCdcIj4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBsYWNlaG9sZGVyLW92ZXJsYXlcIiAqbmdJZj1cIiEoZ2FsbGVyeUZvcm0uZ2V0KCd6b25lTGlzdCcpPy52YWx1ZT8ubGVuZ3RoKVwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IFpvbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXN0b3Jlcy1zZWxlY3QgW2l0ZW1zXT1cInpvbmVMaXN0XCIgW2Rpc2FibGVkXT1cImZhbHNlXCIgW211bHRpXT1cInRydWVcIiBbc2VhcmNoRmllbGRdPVwiJ3ZhbHVlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkRmllbGRdPVwiJ2tleSdcIiAoc2VsZWN0ZWQpPVwib256b25lU2VsZWN0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZFZhbHVlc109XCJnYWxsZXJ5Rm9ybS5nZXQoJ3pvbmVMaXN0Jyk/LnZhbHVlXCI+PC9saWItc3RvcmVzLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTUgdy01MFwiICpuZ0lmPVwic2hvd2ZsYWdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiAoY2hhbmdlKT1cImFwcHJvdmVGaWx0ZXJDaGFuZ2UoJGV2ZW50KVwiIFsobmdNb2RlbCldPVwiYXBwcm92ZUZpbHRlclwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFsbFwiPkFsbDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQXBwcm92ZWRcIj5BcHByb3ZlZDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibm90YXBwcm92ZWRcIj5Ob3QtQXBwcm92ZWQ8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS00IG10LTNcIiAqbmdJZj1cInNob3dmbGFnXCI+ICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidmlld1JlZG9cIiAgY2hhbmdlIHR5cGU9XCJjaGVja2JveFwiIChjbGljayk9XCJyZWRvQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXIgbXQtMSBtZS0yXCIgaWQ9XCJ2aWV3UmVkb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2hlY2tib3gtbGFiZWxcIiBmb3I9XCJ2aWV3UmVkb1wiPlJlLWRvPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0zIG10LTNcIiAqbmdJZj1cInNob3dmbGFnJiZnYWxsZXJ5Rm9ybS52YWx1ZS50eXBlPT09J2NoZWNrbGlzdCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ2aWV3RmxhZ1wiICBjaGFuZ2UgdHlwZT1cImNoZWNrYm94XCIgKGNsaWNrKT1cImZsYWdDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyIG10LTEgbWUtMlwiIGlkPVwidmlld0ZsYWdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsICBjbGFzcz1cImNoZWNrYm94LWxhYmVsXCIgZm9yPVwidmlld0ZsYWdcIj5GbGFnPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJvblN1Ym1pdCgpXCIgdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHB4LTQgXCI+PHNwYW4+QXBwbHk8L3NwYW4+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8YSAoY2xpY2spPVwibm90aWZ5KFtdKVwiIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBweC00IFwiPjxzcGFuPnRlc3Q8L3NwYW4+PC9hPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICBcclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Zvcm0+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwiY2FyZCBteS0yXCI+XHJcbjxkaXYgY2xhc3M9XCJyb3cgbWFpbi1jb250YWluZXIgbXktNSBcIj5cclxuICAgIFxyXG4gICAgPGRpdiBbbmdDbGFzc109XCJzaG93c2lkZW5hdiA/ICdjb2wtbWQtNCBsZWZ0LXNpZGViYXInOidkLW5vbmUnXCIgY2xhc3M9XCJoLTY1MHB4XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlIGgtNjUwcHggc2Nyb2xsLXlcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2xpc3QtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tsaXN0LXRpdGxlXCI+e3tjaGVja2xpc3ROYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tsaXN0LXRleHRcIj57e2NoZWNrTGlzdERlc2NyaXB0aW9ufX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxvYWRpbmdcIiBjbGFzcz1cInJvdyBsb2FkZXIgIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm5vRGF0YSYmc2VsZWN0ID09PSAnY3VzdG9tJyB8fCBub0RhdGEmJnNlbGVjdCA9PT0gJ3Rhc2snXCJjbGFzcz1cInJvdyBtdC0yMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgbXQtMjAgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cInctNzUgaC0zMDBweFwiIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ljb25zL05vZGF0YTEuc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhLXRpdGxlIG10LTBcIj5ObyBkYXRhIGZvdW5kPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhLXN1YlwiPlRoZXJlIGlzIG5vIHJlc3VsdCBmb3IgdGhpcyBjaGVja2xpc3Q8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm5vRGF0YSYmc2VsZWN0ICE9PSAnY3VzdG9tJyYmc2VsZWN0ICE9PSAndGFzaydcIiBjbGFzcz1cInJvdyBtdC0yMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG10LTIwIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgbXQtMjAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1zcmMgbXQtNSB3LTQwXCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhMi5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhLXRpdGxlXCI+Tm8gRGV0ZWN0aW9ucyBmb3VuZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGEtc3ViXCI+VGhlcmUgaXMgbm8gYnJlYWNoZXMgZm9yIHRoZSBzZWxlY3RlZCBwZXJpb2Q8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPHNlY3Rpb24gKm5nSWY9XCIhbm9EYXRhICYmICFsb2FkaW5nXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3QgPT09ICdjdXN0b20nfHxzZWxlY3QgPT09ICd0YXNrJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1lbmQgbXQtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSB3LTI1IG1lLTMgYnRuLXJlc2l6ZVwiIChjbGljayk9XCJ2aWV3Q2hlY2tsaXN0cygpXCI+IFJlc2V0IDwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgdy0yNSBtZS0zIGJ0bi1yZXNpemVcIiAqbmdJZj1cInNlbGVjdGVkU2VjdGlvbi5sZW5ndGg+MHx8dGVtcHNlbGVjdGVkU2VjdGlvbi5sZW5ndGg+MFwiIChjbGljayk9XCJvbmNoZWNrbGlzdHJlc2V0KClcIj4gUmVzZXQgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2VsZWN0ZWRTZWN0aW9uLmxlbmd0aD4wfHx0ZW1wc2VsZWN0ZWRTZWN0aW9uLmxlbmd0aD4wXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy0yNSAgYnRuLXJlc2l6ZVwiIChjbGljayk9XCJzZWxlY3RzaW5nbGVxdWVzdGlvbigpXCI+QXBwbHk8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTZcIiAgW25nQ2xhc3NdPVwic2VsZWN0ZWRTZWN0aW9uLmxlbmd0aD09PTAgPyAndmlldy1hbGwnOid2aWV3LXF1ZXN0aW9ucydcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIiAoY2xpY2spPVwib25jaGVja2xpc3RyZXNldCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3IEFsbCBBbnN3ZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMlwiICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIGNoZWNrbGlzdERhdGE7IGxldCBpPWluZGV4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtNFwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjY29yZGlhbihpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy00IGZ3LWJvbGQgc2VjdGlvblwiICpuZ0lmPVwiZ2FsbGVyeUZvcm0udmFsdWUudHlwZT09PSdjaGVja2xpc3QnXCIgPnt7c2VjdGlvbi5zZWN0aW9uTmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhyIGNsYXNzPVwibXgtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBbbmdDbGFzc109XCJ7J3JvdGF0ZScgOiBzaG93ICE9PSBpfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNVwiIGhlaWdodD1cIjI1XCIgdmlld0JveD1cIjAgMCAyMCAyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNSA3LjVMMTAgMTIuNUwxNSA3LjVcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvdz09PWlcIiBjbGFzcz1cInF1ZXN0aW9uLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNka0Ryb3BMaXN0IFtjZGtEcm9wTGlzdERhdGFdPVwic2VjdGlvbi5xdWVzdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcXVlc3Rpb24gb2Ygc2VjdGlvbi5xdWVzdGlvbnM7bGV0IGo9aW5kZXg7XCIgY2xhc3M9XCJkLWZsZXggbXktMiBxLWJ0blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZGtEcmFnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICBpZD1cImxhYmVsXCIgWyhuZ01vZGVsKV09XCJxdWVzdGlvbi5jaGVja2VkXCIgKGNsaWNrKT1cInNlbGVjdGVkUXVlc3Rpb24oJGV2ZW50LHNlY3Rpb24scXVlc3Rpb24pXCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyIG10LTIgbWUtNFwiICB0eXBlPVwiY2hlY2tib3hcIiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlZGl0YWJsZWNvbnRlbnRcIiBbbmdDbGFzc109XCJxdWVzdGlvbj8uY2hlY2tlZCA/ICd2aWV3LWFsbCc6JydcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3F1ZXN0aW9uLnFub319IC4ge3txdWVzdGlvbi5xbmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPC9kaXY+ICAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb21iaW5lZENoZWNrbGlzdC5pbmNsdWRlcyhzZWxlY3QpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kIG10LTEwXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIHctMjUgbWUtMyBidG4tcmVzaXplXCIgKGNsaWNrKT1cIm9ucmVzZXQoKVwiPiBSZXNldCA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy0yNSAgYnRuLXJlc2l6ZVwiIChjbGljayk9XCJvbnZpZXcoKVwiPkFwcGx5PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duc2VsZWN0IGgtOTAwcHggc2Nyb2xsLXlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtbGVmdCBcIiBbbmdDbGFzc109XCJzZWxlY3RBbGwgPyAnYmFja2dyb3VuZEJvcmRlcic6J3dpdGhvdXRiYWNrZ3JvdW5kJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXIgbWUtNFwiIHR5cGU9XCJjaGVja2JveFwiICBbKG5nTW9kZWwpXT1cInNlbGVjdEFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0QWxsU3RvcmUoJGV2ZW50KVwiPiA8c3BhbiBbbmdDbGFzc109XCJzZWxlY3RBbGwgPyAndXNhZ2UtZGV0ZWN0aW9uJzondXNhZ2UtdGV4dCdcIj5TZWxlY3QgQWxsPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBkcm9wZG93bmJnIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktNFwiICpuZ0Zvcj1cImxldCBsaXN0IG9mIG1vYmlsZXVzYWdlRGF0YUxpc3Q7bGV0IGk9aW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKGNoYW5nZSk9XCJ1cGRhdGVDaGVjaygkZXZlbnQsbGlzdClcIiBbbmdDbGFzc109XCJsaXN0LmNoZWNrZWQgPyAnYmFja2dyb3VuZEJvcmRlcic6J3dpdGhvdXRiYWNrZ3JvdW5kJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImxhYmVse3tpfX1cIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXIgbWUtNFwiICB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cImxpc3QuY2hlY2tlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJsYWJlbHt7aX19XCIgW25nQ2xhc3NdPVwibGlzdC5jaGVja2VkID8gJ3VzYWdlLWRldGVjdGlvbic6J3VzYWdlLXRleHQnXCIgPnt7bGlzdD8uc3RvcmVOYW1lfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeSBkZXRlY3Rpb25yaWdodFwiICpuZ0lmPVwibGlzdC5kZXRlY3Rpb25cIj57e2xpc3QuZGV0ZWN0aW9ufX0gRGV0ZWN0aW9uczwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd3NpZGVuYXZcIiAoY2xpY2spPVwic2lkZW5hdigpXCIgY2xhc3M9XCJiYWNrQnV0dG9ucmlnaHQgdGV4dC1jZW50ZXIgcHQtMSBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyOFwiIGhlaWdodD1cIjI4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMSAxN0w2IDEyTDExIDdNMTggMTdMMTMgMTJMMTggN1wiIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBbbmdDbGFzc109XCJzaG93c2lkZW5hdiA/ICdjb2wtbWQtOCBib3JkZXIgYm9yZGVyLWJvdHRvbS0wIGJvcmRlci10b3AtMCBib3JkZXItbGVmdCBib3JkZXItNSByaWdodC1zaWRlYmFyJzonY29sLW1kLTEyJ1wiID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmUgXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCAgcHgtMCBteS0wXCIgKm5nSWY9XCIoc2VsZWN0ID09PSAnY3VzdG9tJyB8fCBzZWxlY3QgPT09ICd0YXNrJ3x8c2VsZWN0ID09PSAnY2xlYW5pbmcnfHxzZWxlY3QgPT09J3NjcnVtJ3x8c2VsZWN0ID09PSdzdG9yZW9wZW5hbmRjbG9zZSd8fHNlbGVjdCA9PT0naW52ZW50b3J5Y291bnQnfHxzZWxlY3QgPT09J2NhcnNhdHRlbmRlZCd8fHNlbGVjdCA9PT0nbnVtYmVycGxhdGVpbmZvJykgJiYgIXZpZXdsb2FkaW5nICYmICF2aWV3bm9EYXRhXCIgPlxyXG4gICAgICAgICAgICAgICAgPGgzPjwvaDM+XHJcbiAgICAgICAgICAgICAgICA8IS0tIFN3aXRjaCB0b2dnbGUgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCIgKm5nSWY9XCIhZ2FsbGVyeUZvcm0udmFsdWUudmlld1JlZG9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmUgY3Vyc29yLXBvaW50ZXIgbWUtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBidG4gYnRuLXByaW1hcnkgZm9ybS1jb250cm9sIG5vLXRleHQtdHJhbnNmb3JtXCIgKGNsaWNrKT1cImV4cG9ydERldCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZXhwb3J0TGFiZWwgfX0gPCEtLSBCaW5kIGxhYmVsIHRleHQgaGVyZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJleHBvcnRTaG93XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjYXJkIHB5LTIgIHBvc2l0aW9uLWFic29sdXRlIHByb2R1Y3Rkcm9wIHRvcC0xMCB3LTE1MHB4IGVuZC0wIHotMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LXVuc3R5bGVkIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBweS00IGNoZWNrYm94LWxhYmVsIG14LTJcIiAgKm5nSWY9XCJwZGZFeHBvcnRUeXBlcy5pbmNsdWRlcyhzZWxlY3QpXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzZXRFeHBvcnRBc1BQVCgnRXhwb3J0IGFzIFBERicsJ3BkZicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnQgYXMgUERGXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCIgY3Vyc29yLXBvaW50ZXIgY2hlY2tib3gtbGFiZWwgcHktNCBteC0yXCIgKm5nSWY9XCJjc3ZFeHBvcnRUeXBlcy5pbmNsdWRlcyhzZWxlY3QpXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzZXRFeHBvcnRBc1BQVCgnRXhwb3J0IGFzIENTVicsJ2NzdicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnQgYXMgQ1NWXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJzZWxlY3RlZFNlY3Rpb24ubGVuZ3RoPjB8fHNlbGVjdCA9PT0gJ2NsZWFuaW5nJ3x8c2VsZWN0ID09PSdzY3J1bSd8fHNlbGVjdCA9PT0nc3RvcmVvcGVuYW5kY2xvc2UnfHxzZWxlY3QgPT09J2ludmVudG9yeWNvdW50J3x8c2VsZWN0ID09PSdjYXJzYXR0ZW5kZWQnfHxzZWxlY3QgPT09J251bWJlcnBsYXRlaW5mbydcIiBjbGFzcz1cIiBjdXJzb3ItcG9pbnRlciBjaGVja2JveC1sYWJlbCBweS00ICBteC0yXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzZXRFeHBvcnRBc1BQVCgnRXhwb3J0IGFzIFBQVCcsJ3BwdCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnQgYXMgUFBUXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJzZWxlY3RlZFNlY3Rpb24ubGVuZ3RoPjB8fHNlbGVjdCA9PT0gJ2NsZWFuaW5nJ3x8c2VsZWN0ID09PSdzY3J1bSd8fHNlbGVjdCA9PT0nc3RvcmVvcGVuYW5kY2xvc2UnXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBjaGVja2JveC1sYWJlbCBweS00IG14LTJcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNldEV4cG9ydEFzUFBUKCdFeHBvcnQgYXMgWklQJywnemlwZmlsZXMnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0IGFzIFpJUFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC0wXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ2aWV3bG9hZGluZ1wiIGNsYXNzPVwicm93IGxvYWRlciAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidmlld25vRGF0YSYmc2VsZWN0ICE9PSAnY3VzdG9tJyYmc2VsZWN0ICE9PSAndGFzaydcIiBjbGFzcz1cInJvdyBtdC0yMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG10LTIwIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgbXQtMjAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1zcmMgbXQtNSB3LTQwXCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhMi5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhLXRpdGxlXCI+Tm8gRGV0ZWN0aW9ucyBmb3VuZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGEtc3ViXCI+VGhlcmUgaXMgbm8gYnJlYWNoZXMgZm9yIHRoZSBzZWxlY3RlZCBwZXJpb2Q8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidmlld25vRGF0YSYmc2VsZWN0ID09PSAnY3VzdG9tJyB8fCB2aWV3bm9EYXRhJiZzZWxlY3QgPT09ICd0YXNrJ1wiIGNsYXNzPVwicm93IG10LTIwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgbXQtMjAgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBtdC0yMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLXNyYyBtdC01IHctNDBcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGExLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGEtdGl0bGVcIj5ObyBkYXRhIGZvdW5kPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YS1zdWJcIj5UaGVyZSBpcyBubyByZXN1bHQgZm9yIHRoaXMgY2hlY2tsaXN0PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gKm5nSWY9XCIhdmlld2xvYWRpbmcgJiYgIXZpZXdub0RhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdD09PSdjdXN0b20nfHxzZWxlY3Q9PT0ndGFzaycgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd3NpbmdsZVwiIGNsYXNzPVwicWEtaGVhZGluZyBtLTMgbXgtMTFcIj57e3RoaXMuc2VsZWN0ZWRTZWN0aW9uWzBdPy5xdWVzdGlvbnNbMF19fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dzaW5nbGUmJnNob3dmaWx0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtc3RyZXRjaCBuYXYtbGluZS10YWJzMSBuYXYtbGluZS10YWJzIGJvcmRlci10cmFuc3BhcmVudCBmbGV4LW5vd3JhcCBteC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFuc3dlckZpbHRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSAoY2xpY2spPVwidGFza1RhYihpdGVtKVwiIFtuZ0NsYXNzXT1cImdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlciA9PT0gaXRlbS5rZXkgPyAnYWN0aXZlJyA6ICcnXCIgY2xhc3M9XCJuYXYtbGluayBjdXJzb3ItcG9pbnRlciBuby1ib3JkZXIgbWUtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLmtleX19PHNwYW4gY2xhc3M9XCJteC0yIFwiIFtuZ0NsYXNzXT1cImdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlciA9PT0gaXRlbS5rZXkgPyAnYmFkZ2UtbnVtLXByaW1hcnknIDonYmFkZ2UtbnVtLW11dGVkJ1wiPnt7aXRlbS5jb3VudH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjaGVja2xpc3Qgb2Ygdmlld0NoZWNrbGlzdHNEYXRhPy5jaGVja2xpc3RBbnN3ZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCIgKm5nSWY9XCJjbGllbnREYXRhLmxvZ28mJmNsaWVudERhdGEubG9nbyE9PScnJiZzaG93bXVsdGlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm10LTUgbWItMyB0ZXh0LWNlbnRlciBpY29uc2l6ZVwiIHNyYz1cInt7Y2xpZW50RGF0YS5sb2dvfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBweC0xMCBtdC01XCIgKm5nSWY9XCJzaG93bXVsdGlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ1bmktdGl0bGVcIj5TdG9yZSBOYW1lOjwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidW5pLXN1YnRpdGxlXCI+e3tjaGVja2xpc3Q/LnN0b3JlUHJvZmlsZT8uc3RvcmVOYW1lfX0gPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ1bmktdGl0bGVcIiAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnR5cGU9PT0nY2hlY2tsaXN0J1wiPkNoZWNrbGlzdCBOYW1lOjwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ1bmktdGl0bGVcIiAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnR5cGU9PT0ndGFzaydcIj5UYXNrIE5hbWU6PC9oMz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidW5pLXN1YnRpdGxlXCI+e3tjaGVja2xpc3Q/LmNoZWNrbGlzdEluZm8/LmNoZWNrbGlzdE5hbWV9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+U3RhdGUgJiBDb3VudHJ5IDo8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPnt7Y2hlY2tsaXN0Py5zdG9yZVByb2ZpbGU/LnN0YXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tjaGVja2xpc3Q/LnN0b3JlUHJvZmlsZT8uQ291bnRyeX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ1bmktdGl0bGVcIj5EdXJhdGlvbiA6PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ1bmktc3VidGl0bGVcIj4ge3tjaGVja2xpc3Q/LmNoZWNrbGlzdEluZm8/LmR1cmF0aW9ufX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInVuaS10aXRsZVwiPk5vLiBvZiBRdWVzdGlvbnMgOjwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidW5pLXN1YnRpdGxlXCI+e3tjaGVja2xpc3Q/LmNoZWNrbGlzdEluZm8/Lm5vb2ZRdWVzdGlvbnN9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+RGF0ZSA6PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ1bmktc3VidGl0bGVcIj4ge3tjaGVja2xpc3Q/LmNoZWNrbGlzdEluZm8/LmRhdGV9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+U3VibWl0dGVkIEJ5IDo8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPnt7Y2hlY2tsaXN0Py5jaGVja2xpc3RJbmZvPy5zdWJtaXR0ZWRCeX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ1bmktdGl0bGVcIj5UaW1lIDo8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPiB7e2NoZWNrbGlzdD8uY2hlY2tsaXN0SW5mbz8udGltZX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHB4LTEwXCIgPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcXVlc3Rpb25saXN0IG9mIGNoZWNrbGlzdC5xdWVzdGlvbkFuc3dlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInFhLWJvZHJlciBteS01XCIgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIHF1ZXN0aW9ubGlzdC5xdWVzdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJxdWVzdGlvbi5yZWRvfHxxdWVzdGlvbi5yZWRvPT09ZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZpZXctZGV0YWlsIGNvbC0xMiB0ZXh0LWVuZCBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJWaWV3SW5EZXRhaWxzKHF1ZXN0aW9uLGNoZWNrbGlzdD8uY2hlY2tsaXN0SW5mbyxjaGVja2xpc3Q/LnN0b3JlUHJvZmlsZSxxdWVzdGlvbmxpc3QpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3IGluIGRldGFpbCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE1IDEwLjgzMzNWMTUuODMzM0MxNSAxNi4yNzU0IDE0LjgyNDQgMTYuNjk5MyAxNC41MTE4IDE3LjAxMThDMTQuMTk5MyAxNy4zMjQ0IDEzLjc3NTQgMTcuNSAxMy4zMzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWNi42NjY2N0MyLjUgNi4yMjQ2NCAyLjY3NTU5IDUuODAwNzIgMi45ODgxNiA1LjQ4ODE2QzMuMzAwNzIgNS4xNzU1OSAzLjcyNDY0IDUgNC4xNjY2NyA1SDkuMTY2NjdNMTIuNSAyLjVIMTcuNU0xNy41IDIuNVY3LjVNMTcuNSAyLjVMOC4zMzMzMyAxMS42NjY3XCIgc3Ryb2tlPVwiIzAwOUJGM1wiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyB3LTEwMCBtLTNcIiAqbmdJZj1cInNob3dzaW5nbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IHRleHQtdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y2hlY2tsaXN0Py5zdG9yZVByb2ZpbGU/LnN0b3JlTmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTggdGV4dC1lbmQgdGl0bGUtZGVzY3JpcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1Ym1pdHRlZCBieSA6IHt7Y2hlY2tsaXN0Py5jaGVja2xpc3RJbmZvPy5zdWJtaXR0ZWRCeX19IE9uIDoge3tjaGVja2xpc3Q/LmNoZWNrbGlzdEluZm8/LmRhdGV9fSB7e2NoZWNrbGlzdD8uY2hlY2tsaXN0SW5mbz8udGltZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwic2hvd211bHRpXCIgY2xhc3M9XCJxYS1oZWFkaW5nXCI+e3txdWVzdGlvbj8ucW5vfX0uIHt7cXVlc3Rpb24/LnFuYW1lfX08L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiUGFydGlhbGx5IG15LTMgcHgtNVwiICpuZ0lmPVwicXVlc3Rpb24/LmFuc3dlclR5cGU9PT0nZGVzY3JpcHRpdmUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXN0aW9uLnVzZXJBbnN3ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGNoZWNrbGlzdCB0eXBlIHdpdGggc2luZ2xlIGltYWdlIGJ1dCBpbnNpZGUgY29sbGFnZS1ncmlkIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2FsbGVyeUZvcm0udmFsdWUudHlwZSA9PT0gJ2NoZWNrbGlzdCcgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSAhPT0gJydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5SZWZlcmVuY2UgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFnZS1ncmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyc6IGdldEdyaWRDb2x1bW5zKHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UubGVuZ3RoKSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYWdlLXRpbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ29cIiBbc3JjXT1cImVudmlyb25tZW50LlRyYXhBbnN3ZXJDRE4gKyBxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSYmcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZS5sZW5ndGg+MCYmZ2FsbGVyeUZvcm0udmFsdWUudHlwZT09PSd0YXNrJyYmcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZVswXSAhPT0gJydcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlJlZmVyZW5jZSBJbWFnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYWdlLWdyaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJzogZ2V0R3JpZENvbHVtbnMocXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZS5sZW5ndGgpIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhZ2UtdGlsZVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbSYmaXRlbSE9PScnJiZpdGVtIT09bnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ29cIiBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7aXRlbX19XCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm10LTJcIiBbbmdDbGFzc109XCJpdGVtLnNvcEZsYWcgPyAnZmxhZ2Nsb3VyJzonJ1wiPnt7aXRlbS5hbnN3ZXJ9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVtYXJrc1R4dFwiICpuZ0lmPVwicXVlc3Rpb24ucmVtYXJrcyE9PScnXCI+UmVtYXJrcyA6IHt7cXVlc3Rpb24ucmVtYXJrc319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJQYXJ0aWFsbHkgbXktMyBweC01XCIgKm5nSWY9XCJxdWVzdGlvbj8uYW5zd2VyVHlwZT09PSdsaW5lYXJzY2FsZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBxdWVzdGlvbi51c2VyQW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnR5cGU9PT0nY2hlY2tsaXN0JyYmcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSE9PScnJiZxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlIT09bnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlJlZmVyZW5jZSBJbWFnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3txdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UmJnF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UubGVuZ3RoPjAmJmdhbGxlcnlGb3JtLnZhbHVlLnR5cGU9PT0ndGFzaycmJnF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2VbMF0gIT09ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+UmVmZXJlbmNlIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7aXRlbX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxicj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm10LTRcIiBbbmdDbGFzc109XCJpdGVtLnNvcEZsYWcgPyAnZmxhZ2Nsb3VyJzonJ1wiPnt7aXRlbS5hbnN3ZXJ9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZW1hcmtzVHh0XCIgKm5nSWY9XCJxdWVzdGlvbi5yZW1hcmtzIT09JydcIj5SZW1hcmtzIDoge3txdWVzdGlvbi5yZW1hcmtzfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlBhcnRpYWxseSBteS0zIHB4LTVcIiAqbmdJZj1cInF1ZXN0aW9uPy5hbnN3ZXJUeXBlPT09J3RpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlc3Rpb24udXNlckFuc3dlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJnYWxsZXJ5Rm9ybS52YWx1ZS50eXBlPT09J2NoZWNrbGlzdCcmJnF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UhPT0nJyYmcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSE9PW51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5SZWZlcmVuY2UgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ29cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7cXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlJiZxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlLmxlbmd0aD4wJiZnYWxsZXJ5Rm9ybS52YWx1ZS50eXBlPT09J3Rhc2snJiZxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlWzBdICE9PSAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlJlZmVyZW5jZSBJbWFnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ29cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW19fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdC00XCIgW25nQ2xhc3NdPVwiaXRlbS5zb3BGbGFnID8gJ2ZsYWdjbG91cic6JydcIj57e2l0ZW0uYW5zd2VyfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVtYXJrc1R4dFwiICpuZ0lmPVwicXVlc3Rpb24ucmVtYXJrcyE9PScnXCI+UmVtYXJrcyA6IHt7cXVlc3Rpb24ucmVtYXJrc319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJQYXJ0aWFsbHkgbXktMyBweC01XCIgKm5nSWY9XCJxdWVzdGlvbj8uYW5zd2VyVHlwZT09PSdkYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlc3Rpb24udXNlckFuc3dlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnR5cGU9PT0nY2hlY2tsaXN0JyYmcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSE9PScnJiZxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlIT09bnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+UmVmZXJlbmNlIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ29cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3txdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UmJnF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UubGVuZ3RoPjAmJmdhbGxlcnlGb3JtLnZhbHVlLnR5cGU9PT0ndGFzaycmJnF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2VbMF0gIT09ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlJlZmVyZW5jZSBJbWFnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm10LTRcIiBbbmdDbGFzc109XCJpdGVtLnNvcEZsYWcgPyAnZmxhZ2Nsb3VyJzonJ1wiPnt7aXRlbS5hbnN3ZXJ9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbWFya3NUeHRcIiAqbmdJZj1cInF1ZXN0aW9uLnJlbWFya3MhPT0nJ1wiPlJlbWFya3MgOiB7e3F1ZXN0aW9uLnJlbWFya3N9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlBhcnRpYWxseSBteS0zIHB4LTVcIiAqbmdJZj1cInF1ZXN0aW9uPy5hbnN3ZXJUeXBlPT09J3llcy9ubydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBxdWVzdGlvbi51c2VyQW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnR5cGU9PT0nY2hlY2tsaXN0JyYmcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSE9PScnJiZxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlIT09bnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlJlZmVyZW5jZSBJbWFnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3txdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyICpuZ0lmPVwiZ2FsbGVyeUZvcm0udmFsdWUudHlwZT09PSdjaGVja2xpc3QnJiZxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlIT09JycmJnF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UhPT1udWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSYmcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZS5sZW5ndGg+MCYmZ2FsbGVyeUZvcm0udmFsdWUudHlwZT09PSd0YXNrJyYmcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZVswXSAhPT0gJydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5SZWZlcmVuY2UgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXQtNFwiIFtuZ0NsYXNzXT1cIml0ZW0uc29wRmxhZyA/ICdmbGFnY2xvdXInOicnXCI+e3tpdGVtLmFuc3dlcn19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uJiZpdGVtLnZhbGlkYXRpb25BbnN3ZXIhPT0nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwiaXRlbS5yZWZlcmVuY2VJbWFnZSE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlJlZmVyZW5jZSBJbWFnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ29cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0ucmVmZXJlbmNlSW1hZ2V9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIml0ZW0udmFsaWRhdGlvblR5cGU9PT0nQ2FwdHVyZSBJbWFnZSc/J2NvbC1tZC02JzonY29sLW1kLTEyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09PSdDYXB0dXJlIEltYWdlJ3x8aXRlbS52YWxpZGF0aW9uVHlwZT09PSdDYXB0dXJlIFZpZGVvJ1wiPlZhbGlkYXRpb24gQW5zd2VyPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCIgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT09J0NhcHR1cmUgSW1hZ2UnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0udmFsaWRhdGlvbkFuc3dlcn19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlbyBjb250cm9scyBjbGFzcz1cInctMTAwIGgtNDUwcHggcC0zXCIgICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09PSdDYXB0dXJlIFZpZGVvJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLnZhbGlkYXRpb25BbnN3ZXJ9fVwiPjwvdmlkZW8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVtYXJrc1R4dFwiICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09PSdEZXNjcmlwdGl2ZSBBbnN3ZXInXCI+VmFsaWRhdGlvbiBBbnN3ZXIgOnt7aXRlbS52YWxpZGF0aW9uQW5zd2VyfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZW1hcmtzVHh0XCIgKm5nSWY9XCJxdWVzdGlvbi5yZW1hcmtzIT09JydcIj5SZW1hcmtzIDoge3txdWVzdGlvbi5yZW1hcmtzfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICBcclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlBhcnRpYWxseSBteS0zIHB4LTVcIiAqbmdJZj1cInF1ZXN0aW9uPy5hbnN3ZXJUeXBlPT09J211bHRpcGxlY2hvaWNlc2luZ2xlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwiZ2FsbGVyeUZvcm0udmFsdWUudHlwZT09PSdjaGVja2xpc3QnJiZxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlIT09bnVsbCYmcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSE9PScnJiZxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlIT09dW5kZWZpbmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+UmVmZXJlbmNlIEltYWdlPC9kaXY+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ29cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7cXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UmJnF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UubGVuZ3RoPjAmJmdhbGxlcnlGb3JtLnZhbHVlLnR5cGU9PT0ndGFzaycmJnF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2VbMF0gIT09ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+UmVmZXJlbmNlIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7aXRlbX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXN0aW9uLnVzZXJBbnN3ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm10LTJcIiBbbmdDbGFzc109XCJpdGVtLnNvcEZsYWcgPyAnZmxhZ2Nsb3VyJzonJ1wiPnt7aXRlbS5hbnN3ZXJ9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cIml0ZW0ucmVmZXJlbmNlSW1hZ2UhPT1udWxsJiZpdGVtLnJlZmVyZW5jZUltYWdlIT09JycmJmdhbGxlcnlGb3JtLnZhbHVlLnR5cGU9PT0nY2hlY2tsaXN0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5SZWZlcmVuY2UgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLnJlZmVyZW5jZUltYWdlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0ucmVmZXJlbmNlSW1hZ2UubGVuZ3RoPjAmJmdhbGxlcnlGb3JtLnZhbHVlLnR5cGU9PT0ndGFzaydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbS5yZWZlcmVuY2VJbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+UmVmZXJlbmNlIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ29cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJpdGVtLnZhbGlkYXRpb25UeXBlPT09J0NhcHR1cmUgSW1hZ2UnPydjb2wtbWQtNic6J2NvbC1tZC0xMidcIiAqbmdJZj1cIml0ZW0udmFsaWRhdGlvbiYmaXRlbS52YWxpZGF0aW9uQW5zd2VyIT09JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCIgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT09J0NhcHR1cmUgSW1hZ2UnfHxpdGVtLnZhbGlkYXRpb25UeXBlPT09J0NhcHR1cmUgVmlkZW8nXCI+VmFsaWRhdGlvbiBBbnN3ZXI8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCIgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT09J0NhcHR1cmUgSW1hZ2UnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLnZhbGlkYXRpb25BbnN3ZXJ9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW8gY29udHJvbHMgY2xhc3M9XCJ3LTEwMCBoLTQ1MHB4IHAtM1wiICAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PT0nQ2FwdHVyZSBWaWRlbydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0udmFsaWRhdGlvbkFuc3dlcn19XCI+PC92aWRlbz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09PSdEZXNjcmlwdGl2ZSBBbnN3ZXInXCIgW25nQ2xhc3NdPVwiaXRlbS5zb3BGbGFnID8gJ2ZsYWdjbG91cic6JydcIj5WYWxpZGF0aW9uIEFuc3dlciA6IHt7aXRlbS52YWxpZGF0aW9uQW5zd2VyfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZW1hcmtzVHh0XCIgKm5nSWY9XCJxdWVzdGlvbi5yZW1hcmtzIT09JydcIj5SZW1hcmtzIDoge3txdWVzdGlvbi5yZW1hcmtzfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cInF1ZXN0aW9uPy5hbnN3ZXJUeXBlPT09J2ltYWdlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbjxkaXYgKm5nSWY9XCJnYWxsZXJ5Rm9ybS52YWx1ZS50eXBlID09PSAndGFzaydcIj5cclxuICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIiAqbmdJZj1cImhhc1JlZmVyZW5jZUltYWdlcyhxdWVzdGlvbilcIj5cclxuICAgIFJlZmVyZW5jZSBJbWFnZVxyXG4gIDwvZGl2PlxyXG4gIFxyXG4gIDxkaXYgY2xhc3M9XCJjb2xsYWdlLWdyaWRcIiAqbmdJZj1cImhhc1JlZmVyZW5jZUltYWdlcyhxdWVzdGlvbilcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFuc3dlciBvZiBxdWVzdGlvbi5hbnN3ZXJzXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhbnN3ZXIucmVmZXJlbmNlSW1hZ2U/Lmxlbmd0aFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYWdlLXRpbGVcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBhbnN3ZXIucmVmZXJlbmNlSW1hZ2VcIj5cclxuICAgICAgICAgIDxpbWcgW3NyY109XCJlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROICsgaXRlbVwiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBGb3IgQ2hlY2tsaXN0IFR5cGUgLS0+XHJcbjxkaXYgKm5nSWY9XCJnYWxsZXJ5Rm9ybS52YWx1ZS50eXBlID09PSAnY2hlY2tsaXN0J1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiICpuZ0lmPVwiaGFzQ2hlY2tsaXN0UmVmZXJlbmNlSW1hZ2VzKHF1ZXN0aW9uKVwiPlxyXG4gICAgUmVmZXJlbmNlIEltYWdlXHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJjb2xsYWdlLWdyaWRcIiAqbmdJZj1cImhhc0NoZWNrbGlzdFJlZmVyZW5jZUltYWdlcyhxdWVzdGlvbilcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFuc3dlciBvZiBxdWVzdGlvbi5hbnN3ZXJzXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYWdlLXRpbGVcIiAqbmdJZj1cImFuc3dlci5yZWZlcmVuY2VJbWFnZVwiPlxyXG4gICAgICAgIDxpbWcgW3NyY109XCJlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROICsgYW5zd2VyLnJlZmVyZW5jZUltYWdlXCIgYWx0PVwiXCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuICA8IS0tIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwiaXRlbS5yZWZlcmVuY2VJbWFnZSE9bnVsbCYmaXRlbS5yZWZlcmVuY2VJbWFnZSE9PScnJiZnYWxsZXJ5Rm9ybS52YWx1ZS50eXBlPT0nY2hlY2tsaXN0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5SZWZlcmVuY2UgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLnJlZmVyZW5jZUltYWdlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS5yZWZlcmVuY2VJbWFnZS5sZW5ndGg+MCYmZ2FsbGVyeUZvcm0udmFsdWUudHlwZT09J3Rhc2snXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW0ucmVmZXJlbmNlSW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlJlZmVyZW5jZSBJbWFnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7aXRlbX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5VcGxvYWRlZCBJbWFnZTwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJjb2xsYWdlLWdyaWRcIiAgW25nU3R5bGVdPVwieydncmlkLXRlbXBsYXRlLWNvbHVtbnMnOiBnZXRHcmlkQ29sdW1ucyhxdWVzdGlvbi51c2VyQW5zd2VyLmxlbmd0aCl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlc3Rpb24udXNlckFuc3dlcjtsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJjb2xsYWdlLXRpbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgIChjbGljayk9XCJvcGVuSW1hZ2VQb3B1cChnZXRJbWFnZVVybHMocXVlc3Rpb24udXNlckFuc3dlciksZ2V0SW1hZ2VOYW1lcyhxdWVzdGlvbi51c2VyQW5zd2VyKSxpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLmFuc3dlcn19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJpdGVtLnZhbGlkYXRpb25UeXBlPT09J0NhcHR1cmUgSW1hZ2UnPydjb2wtbWQtNiBtdC0yJzonY29sLW1kLTEyIG10LTInXCIgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb24mJml0ZW0udmFsaWRhdGlvbkFuc3dlciE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIiAgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT09J0NhcHR1cmUgSW1hZ2UnfHxpdGVtLnZhbGlkYXRpb25UeXBlPT09J0NhcHR1cmUgVmlkZW8nXCI+VmFsaWRhdGlvbiBBbnN3ZXI8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nb1wiICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09PSdDYXB0dXJlIEltYWdlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7aXRlbS52YWxpZGF0aW9uQW5zd2VyfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW8gY29udHJvbHMgY2xhc3M9XCJ3LTEwMCBoLTQ1MHB4IHAtM1wiICAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PT0nQ2FwdHVyZSBWaWRlbydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0udmFsaWRhdGlvbkFuc3dlcn19XCI+PC92aWRlbz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09PSdEZXNjcmlwdGl2ZSBBbnN3ZXInXCIgW25nQ2xhc3NdPVwiaXRlbS5zb3BGbGFnID8gJ2ZsYWdjbG91cic6JydcIj5WYWxpZGF0aW9uIEFuc3dlciA6IHt7aXRlbS52YWxpZGF0aW9uQW5zd2VyfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbWFya3NUeHRcIiAqbmdJZj1cInF1ZXN0aW9uLnJlbWFya3MhPT0nJ1wiPlJlbWFya3MgOiB7e3F1ZXN0aW9uLnJlbWFya3N9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHB4LTVcIiAqbmdJZj1cInF1ZXN0aW9uPy5hbnN3ZXJUeXBlPT09J211bHRpcGxlY2hvaWNlbXVsdGlwbGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2FsbGVyeUZvcm0udmFsdWUudHlwZSA9PT0gJ2NoZWNrbGlzdCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIiAqbmdJZj1cImhhc0NoZWNrbGlzdFJlZmVyZW5jZUltYWdlcyhxdWVzdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlIEltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYWdlLWdyaWRcIiAqbmdJZj1cImhhc0NoZWNrbGlzdFJlZmVyZW5jZUltYWdlcyhxdWVzdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIHF1ZXN0aW9uLmFuc3dlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhZ2UtdGlsZVwiICpuZ0lmPVwiYW5zd2VyLnJlZmVyZW5jZUltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiZW52aXJvbm1lbnQuVHJheEFuc3dlckNETiArIGFuc3dlci5yZWZlcmVuY2VJbWFnZVwiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UmJnF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UubGVuZ3RoPjAmJmdhbGxlcnlGb3JtLnZhbHVlLnR5cGU9PT0ndGFzaycmJnF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2VbMF0gIT09ICcnXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiICpuZ0lmPVwiaGFzQ2hlY2tsaXN0UmVmZXJlbmNlSW1hZ2VzKHF1ZXN0aW9uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlIEltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYWdlLWdyaWRcIiAqbmdJZj1cImhhc0NoZWNrbGlzdFJlZmVyZW5jZUltYWdlcyhxdWVzdGlvbilcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhbnN3ZXIgb2YgcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYWdlLXRpbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2Fuc3dlcn19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiUGFydGlhbGx5IG15LTMgcHgtNVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXN0aW9uLnVzZXJBbnN3ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm10LTNcIiBbbmdDbGFzc109XCJpdGVtLnNvcEZsYWcgPyAnZmxhZ2Nsb3VyJzonJ1wiPnt7aXRlbS5hbnN3ZXJ9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cIml0ZW0ucmVmZXJlbmNlSW1hZ2UhPT1udWxsJiZpdGVtLnJlZmVyZW5jZUltYWdlIT09JycmJmdhbGxlcnlGb3JtLnZhbHVlLnR5cGU9PT0nY2hlY2tsaXN0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5SZWZlcmVuY2UgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLnJlZmVyZW5jZUltYWdlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0ucmVmZXJlbmNlSW1hZ2UubGVuZ3RoPjAmJmdhbGxlcnlGb3JtLnZhbHVlLnR5cGU9PT0ndGFzaydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbS5yZWZlcmVuY2VJbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+UmVmZXJlbmNlIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ29cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJpdGVtLnZhbGlkYXRpb25UeXBlPT09J0NhcHR1cmUgSW1hZ2UnPydjb2wtbWQtNiBtdC0yJzonY29sLW1kLTEyIG10LTInXCIgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb24mJml0ZW0udmFsaWRhdGlvbkFuc3dlciYmaXRlbS52YWxpZGF0aW9uQW5zd2VyIT09JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCIgICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09PSdDYXB0dXJlIEltYWdlJ3x8aXRlbS52YWxpZGF0aW9uVHlwZT09PSdDYXB0dXJlIFZpZGVvJ1wiPlZhbGlkYXRpb24gQW5zd2VyPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nb1wiICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09PSdDYXB0dXJlIEltYWdlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLnZhbGlkYXRpb25BbnN3ZXJ9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW8gY29udHJvbHMgY2xhc3M9XCJ3LTEwMCBoLTQ1MHB4IHAtM1wiICAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PT0nQ2FwdHVyZSBWaWRlbydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7aXRlbS52YWxpZGF0aW9uQW5zd2VyfX1cIj48L3ZpZGVvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PT0nRGVzY3JpcHRpdmUgQW5zd2VyJ1wiIFtuZ0NsYXNzXT1cIml0ZW0uc29wRmxhZyA/ICdmbGFnY2xvdXInOicnXCI+VmFsaWRhdGlvbiBBbnN3ZXIgOiB7e2l0ZW0udmFsaWRhdGlvbkFuc3dlcn19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZW1hcmtzVHh0XCIgKm5nSWY9XCJxdWVzdGlvbi5yZW1hcmtzIT09JydcIj5SZW1hcmtzIDoge3txdWVzdGlvbi5yZW1hcmtzfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHB4LTVcIiAqbmdJZj1cInF1ZXN0aW9uPy5hbnN3ZXJUeXBlPT09J2Rlc2NyaXB0aXZlSW1hZ2UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhbnN3ZXIgb2YgcXVlc3Rpb24uYW5zd2Vyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgIGNsYXNzPVwicm93XCIgKm5nSWY9XCJhbnN3ZXIucmVmZXJlbmNlSW1hZ2UubGVuZ3RoPjAmJmdhbGxlcnlGb3JtLnZhbHVlLnR5cGU9PT0ndGFzaydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFuc3dlci5yZWZlcmVuY2VJbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+UmVmZXJlbmNlIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ29cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnR5cGU9PT0nY2hlY2tsaXN0JyYmYW5zd2VyLnJlZmVyZW5jZUltYWdlIT09JycmJmFuc3dlci5yZWZlcmVuY2VJbWFnZSE9PW51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+UmVmZXJlbmNlIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7YW5zd2VyLnJlZmVyZW5jZUltYWdlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlc3Rpb24udXNlckFuc3dlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJpdGVtLnJlZmVyZW5jZUltYWdlIT1udWxsJiZpdGVtLnJlZmVyZW5jZUltYWdlIT09JycmJmdhbGxlcnlGb3JtLnZhbHVlLnR5cGU9PSdjaGVja2xpc3QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlJlZmVyZW5jZSBJbWFnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ29cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0ucmVmZXJlbmNlSW1hZ2V9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS5yZWZlcmVuY2VJbWFnZS5sZW5ndGg+MCYmZ2FsbGVyeUZvcm0udmFsdWUudHlwZT09J3Rhc2snXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtLnJlZmVyZW5jZUltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+UmVmZXJlbmNlIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW19fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+VXBsb2FkZWQgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0uYW5zd2VyfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIml0ZW0udmFsaWRhdGlvblR5cGU9PT0nQ2FwdHVyZSBJbWFnZSc/J2NvbC1tZC02IG10LTMnOidjb2wtbWQtMTIgbXQtMydcIiAqbmdJZj1cIml0ZW0udmFsaWRhdGlvbiYmaXRlbS52YWxpZGF0aW9uQW5zd2VyIT09JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiICAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PT0nQ2FwdHVyZSBJbWFnZSd8fGl0ZW0udmFsaWRhdGlvblR5cGU9PT0nQ2FwdHVyZSBWaWRlbydcIj5WYWxpZGF0aW9uIEFuc3dlcjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvXCIgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT09J0NhcHR1cmUgSW1hZ2UnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLnZhbGlkYXRpb25BbnN3ZXJ9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlbyBjb250cm9scyBjbGFzcz1cInctMTAwIGgtNDUwcHggcC0zXCIgICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09PSdDYXB0dXJlIFZpZGVvJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7aXRlbS52YWxpZGF0aW9uQW5zd2VyfX1cIj48L3ZpZGVvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiaXRlbS5zb3BGbGFnID8gJ2ZsYWdjbG91cic6JydcIiAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PT0nRGVzY3JpcHRpdmUgQW5zd2VyJ1wiPlZhbGlkYXRpb24gQW5zd2VyIDoge3tpdGVtLnZhbGlkYXRpb25BbnN3ZXJ9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlBhcnRpYWxseSBteS0zIHB4LTVcIiAqbmdJZj1cInF1ZXN0aW9uLnJlbWFya3MhPT0nJ1wiPnt7cXVlc3Rpb24ucmVtYXJrc319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHB4LTVcIiAqbmdJZj1cInF1ZXN0aW9uPy5hbnN3ZXJUeXBlPT09J3ZpZGVvJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBUYXNrOiBNdWx0aXBsZSByZWZlcmVuY2UgaW1hZ2VzIChBcnJheSkgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICd0YXNrJyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UubGVuZ3RoID4gMCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlWzBdICE9PSAnJ1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5SZWZlcmVuY2UgSW1hZ2U8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhZ2UtZ3JpZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyc6IGdldEdyaWRDb2x1bW5zKHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UubGVuZ3RoKSB9XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFnZS10aWxlXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROICsgaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ2hlY2tsaXN0OiBTaW5nbGUgcmVmZXJlbmNlIGltYWdlIChTdHJpbmcpIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnYWxsZXJ5Rm9ybS52YWx1ZS50eXBlID09PSAnY2hlY2tsaXN0JyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UgIT09ICcnXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlJlZmVyZW5jZSBJbWFnZTwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFnZS1ncmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJzogZ2V0R3JpZENvbHVtbnMoMSkgfVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhZ2UtdGlsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROICsgcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXN0aW9uLnVzZXJBbnN3ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5VcGxvYWRlZCBWaWRlbzwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW8gY29udHJvbHMgY2xhc3M9XCJ3LTEwMCBoLTQ1MHB4IHAtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLmFuc3dlcn19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92aWRlbz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbWFya3NUeHRcIiAqbmdJZj1cInF1ZXN0aW9uLnJlbWFya3MhPT0nJ1wiPlJlbWFya3MgOiB7e3F1ZXN0aW9uLnJlbWFya3N9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcHgtNVwiICpuZ0lmPVwicXVlc3Rpb24/LmFuc3dlclR5cGU9PT0nbXVsdGlwbGVJbWFnZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuPGRpdiAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICd0YXNrJ1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiICpuZ0lmPVwiaGFzUmVmZXJlbmNlSW1hZ2VzKHF1ZXN0aW9uKVwiPlxyXG4gICAgUmVmZXJlbmNlIEltYWdlXHJcbiAgPC9kaXY+XHJcbiAgXHJcbiAgPGRpdiBjbGFzcz1cImNvbGxhZ2UtZ3JpZFwiICpuZ0lmPVwiaGFzUmVmZXJlbmNlSW1hZ2VzKHF1ZXN0aW9uKVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIHF1ZXN0aW9uLmFuc3dlcnNcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFuc3dlci5yZWZlcmVuY2VJbWFnZT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhZ2UtdGlsZVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFuc3dlci5yZWZlcmVuY2VJbWFnZVwiPlxyXG4gICAgICAgICAgPGltZyBbc3JjXT1cImVudmlyb25tZW50LlRyYXhBbnN3ZXJDRE4gKyBpdGVtXCIgYWx0PVwiXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48IS0tIEZvciBDaGVja2xpc3QgVHlwZSAtLT5cclxuPGRpdiAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICdjaGVja2xpc3QnXCI+XHJcbiAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCIgKm5nSWY9XCJoYXNDaGVja2xpc3RSZWZlcmVuY2VJbWFnZXMocXVlc3Rpb24pXCI+XHJcbiAgICBSZWZlcmVuY2UgSW1hZ2VcclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImNvbGxhZ2UtZ3JpZFwiICpuZ0lmPVwiaGFzQ2hlY2tsaXN0UmVmZXJlbmNlSW1hZ2VzKHF1ZXN0aW9uKVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIHF1ZXN0aW9uLmFuc3dlcnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbGxhZ2UtdGlsZVwiICpuZ0lmPVwiYW5zd2VyLnJlZmVyZW5jZUltYWdlXCI+XHJcbiAgICAgICAgPGltZyBbc3JjXT1cImVudmlyb25tZW50LlRyYXhBbnN3ZXJDRE4gKyBhbnN3ZXIucmVmZXJlbmNlSW1hZ2VcIiBhbHQ9XCJcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiaGFzUmVmZXJlbmNlSW1hZ2VzKHF1ZXN0aW9uKSA/ICdjb2wtbWQtNicgOiAnY29sLW1kLTEyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+VXBsb2FkZWQgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYWdlLWdyaWRcIiAgW25nU3R5bGVdPVwieydncmlkLXRlbXBsYXRlLWNvbHVtbnMnOiBnZXRHcmlkQ29sdW1ucyhxdWVzdGlvbi51c2VyQW5zd2VyLmxlbmd0aCl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlc3Rpb24udXNlckFuc3dlcjtsZXQgaT1pbmRleFwiIGNsYXNzPVwiY29sbGFnZS10aWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAgKGNsaWNrKT1cIm9wZW5JbWFnZVBvcHVwKGdldEltYWdlVXJscyhxdWVzdGlvbi51c2VyQW5zd2VyKSxnZXRJbWFnZU5hbWVzKHF1ZXN0aW9uLnVzZXJBbnN3ZXIpLGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0uYW5zd2VyfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJpdGVtLnZhbGlkYXRpb25UeXBlPT09J0NhcHR1cmUgSW1hZ2UnPydjb2wtbWQtNic6J2NvbC1tZC0xMidcIiAqbmdJZj1cIml0ZW0udmFsaWRhdGlvbiYmaXRlbS52YWxpZGF0aW9uQW5zd2VyIT09JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktMyBcIiAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PT0nQ2FwdHVyZSBJbWFnZSd8fGl0ZW0udmFsaWRhdGlvblR5cGU9PT0nQ2FwdHVyZSBWaWRlbydcIj5WYWxpZGF0aW9uIEFuc3dlcjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT09J0NhcHR1cmUgSW1hZ2UnXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLnZhbGlkYXRpb25BbnN3ZXJ9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlbyBjb250cm9scyBjbGFzcz1cInctMTAwIGgtNDUwcHggcC0zXCIgICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09PSdDYXB0dXJlIFZpZGVvJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7aXRlbS52YWxpZGF0aW9uQW5zd2VyfX1cIj48L3ZpZGVvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT09J0Rlc2NyaXB0aXZlIEFuc3dlcidcIj5WYWxpZGF0aW9uIEFuc3dlciA6IHt7aXRlbS52YWxpZGF0aW9uQW5zd2VyfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbWFya3NUeHRcIiAqbmdJZj1cInF1ZXN0aW9uLnJlbWFya3MhPT0nJ1wiPlJlbWFya3MgOiB7e3F1ZXN0aW9uLnJlbWFya3N9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuPGRpdiBjbGFzcz1cIm1vZGFsIGZhZGVcIiBpZD1cImltYWdlTW9kYWxcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgbW9kYWwtbGdcIiByb2xlPVwiZG9jdW1lbnRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcblxyXG4gICAgICA8IS0tIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPnt7IHNlbGVjdGVkSW1hZ2VOYW1lIH19PC9oNT5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZVwiIHN0eWxlPVwibWluLWhlaWdodDogNDAwcHg7XCI+XHJcbiAgICAgICAgPCEtLSBQcmV2IEJ1dHRvbiAtLT5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHBvc2l0aW9uLWFic29sdXRlIHN0YXJ0LTAgdG9wLTUwIHRyYW5zbGF0ZS1taWRkbGUteSBtcy0zXCJcclxuICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZUltYWdlKCdwcmV2JylcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRJbWFnZUluZGV4ID09PSAwXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICDigLkgXHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDwhLS0gSW1hZ2UgLS0+XHJcbiAgICAgICAgPGltZyBbc3JjXT1cInNlbGVjdGVkSW1hZ2VVcmxcIiBjbGFzcz1cImltZy1mbHVpZCBteC00XCIgIC8+XHJcblxyXG4gICAgICAgIDwhLS0gTmV4dCBCdXR0b24gLS0+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSBwb3NpdGlvbi1hYnNvbHV0ZSBlbmQtMCB0b3AtNTAgdHJhbnNsYXRlLW1pZGRsZS15IG1lLTNcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlSW1hZ2UoJ25leHQnKVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudEltYWdlSW5kZXggPT09IGltYWdlTGlzdC5sZW5ndGggLSAxXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAg4oC6XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgdGV4dC1zdGFydFwiPiAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IHJvdW5kZWQtcGlsbCBtLTAgcC0yXCIgKm5nSWY9XCJxdWVzdGlvbj8ubGlua1R5cGUmJnF1ZXN0aW9uPy5saW5rcXVlc3Rpb25lbmFibGVkXCI+TGlua2VkIHRvIFF1ZXN0aW9uIHt7cXVlc3Rpb24ucGFyZW50UXVlc3Rpb259fTwvYnV0dG9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IHRleHQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tZGVmYXVsdCBib3JkZXItZGVmYXVsdCBtZS0zXCIgW2Rpc2FibGVkXT1cInF1ZXN0aW9uLnJlZG9cIiAqbmdJZj1cImNoZWNrdG9kYXlEYXRlKGNoZWNrbGlzdD8uY2hlY2tsaXN0SW5mbz8uZGF0ZSkmJihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy51c2VyVHlwZSAhPT0gJ3RhbmdvJyYmIWNoZWNrbGlzdD8uY2hlY2tsaXN0SW5mbz8uYXBwcm92YWxTdGF0dXMmJihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy5UYW5nb1RyYXhfY2hlY2tsaXN0X2lzRWRpdCYmdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlID09J2NoZWNrbGlzdCdcIiAoY2xpY2spPVwiYWRkVGFzaygncmVkbycscXVlc3Rpb24sY2hlY2tsaXN0Py5jaGVja2xpc3RJbmZvLGNoZWNrbGlzdD8uc3RvcmVQcm9maWxlLHF1ZXN0aW9ubGlzdClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF82MDA0XzExNzM0KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE5LjE2OTMgMy4zMzMzMVY4LjMzMzMyTTE5LjE2OTMgOC4zMzMzMkgxNC4xNjkzTTE5LjE2OTMgOC4zMzMzMkwxNS4zMDI2IDQuNjk5OThDMTQuNDA3IDMuODAzOTEgMTMuMjk5IDMuMTQ5MzIgMTIuMDgxOSAyLjc5NzI5QzEwLjg2NDkgMi40NDUyNyA5LjU3ODUzIDIuNDA3MjcgOC4zNDI4NCAyLjY4Njg2QzcuMTA3MTYgMi45NjY0NSA1Ljk2MjQ0IDMuNTU0NTEgNS4wMTU0OSA0LjM5NjE2QzQuMDY4NTUgNS4yMzc4MiAzLjM1MDI0IDYuMzA1NjQgMi45Mjc2IDcuNDk5OThNMC44MzU5MzggMTYuNjY2NlYxMS42NjY2TTAuODM1OTM4IDExLjY2NjZINS44MzU5NE0wLjgzNTkzOCAxMS42NjY2TDQuNzAyNiAxNS4zQzUuNTk4MjMgMTYuMTk2MSA2LjcwNjI1IDE2Ljg1MDYgNy45MjMyOCAxNy4yMDI3QzkuMTQwMzEgMTcuNTU0NyAxMC40MjY3IDE3LjU5MjcgMTEuNjYyNCAxNy4zMTMxQzEyLjg5OCAxNy4wMzM1IDE0LjA0MjggMTYuNDQ1NSAxNC45ODk3IDE1LjYwMzhDMTUuOTM2NyAxNC43NjIxIDE2LjY1NSAxMy42OTQzIDE3LjA3NzYgMTIuNVwiIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF82MDA0XzExNzM0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0yIGZvbnQtZGVmdWx0LXRhc2tcIj5SZWRvPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWRlZmF1bHQgYm9yZGVyLWRlZmF1bHQgbWUtM1wiIFtkaXNhYmxlZF09XCJxdWVzdGlvbi5yZWRvXCIgKm5nSWY9XCJjaGVja3RvZGF5RGF0ZShjaGVja2xpc3Q/LmNoZWNrbGlzdEluZm8/LmRhdGUpJiYoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8udXNlclR5cGUgIT09ICd0YW5nbycmJiFjaGVja2xpc3Q/LmNoZWNrbGlzdEluZm8/LmFwcHJvdmFsU3RhdHVzJiYoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8uVGFuZ29UcmF4X1Rhc2tfaXNFZGl0JiZ0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGU9PSd0YXNrJ1wiIChjbGljayk9XCJhZGRUYXNrKCdyZWRvJyxxdWVzdGlvbixjaGVja2xpc3Q/LmNoZWNrbGlzdEluZm8sY2hlY2tsaXN0Py5zdG9yZVByb2ZpbGUscXVlc3Rpb25saXN0KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzYwMDRfMTE3MzQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTkuMTY5MyAzLjMzMzMxVjguMzMzMzJNMTkuMTY5MyA4LjMzMzMySDE0LjE2OTNNMTkuMTY5MyA4LjMzMzMyTDE1LjMwMjYgNC42OTk5OEMxNC40MDcgMy44MDM5MSAxMy4yOTkgMy4xNDkzMiAxMi4wODE5IDIuNzk3MjlDMTAuODY0OSAyLjQ0NTI3IDkuNTc4NTMgMi40MDcyNyA4LjM0Mjg0IDIuNjg2ODZDNy4xMDcxNiAyLjk2NjQ1IDUuOTYyNDQgMy41NTQ1MSA1LjAxNTQ5IDQuMzk2MTZDNC4wNjg1NSA1LjIzNzgyIDMuMzUwMjQgNi4zMDU2NCAyLjkyNzYgNy40OTk5OE0wLjgzNTkzOCAxNi42NjY2VjExLjY2NjZNMC44MzU5MzggMTEuNjY2Nkg1LjgzNTk0TTAuODM1OTM4IDExLjY2NjZMNC43MDI2IDE1LjNDNS41OTgyMyAxNi4xOTYxIDYuNzA2MjUgMTYuODUwNiA3LjkyMzI4IDE3LjIwMjdDOS4xNDAzMSAxNy41NTQ3IDEwLjQyNjcgMTcuNTkyNyAxMS42NjI0IDE3LjMxMzFDMTIuODk4IDE3LjAzMzUgMTQuMDQyOCAxNi40NDU1IDE0Ljk4OTcgMTUuNjAzOEMxNS45MzY3IDE0Ljc2MjEgMTYuNjU1IDEzLjY5NDMgMTcuMDc3NiAxMi41XCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzYwMDRfMTE3MzRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTIgZm9udC1kZWZ1bHQtdGFza1wiPlJlZG88L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSAgYm9yZGVyLXZhbDFcIiAqbmdJZj1cIiFxdWVzdGlvbi50YXNrJiYhcXVlc3Rpb24udGFza0lkJiZ0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGU9PSdjaGVja2xpc3QnJiYoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8udXNlclR5cGUgIT09ICd0YW5nbycmJiFjaGVja2xpc3Q/LmNoZWNrbGlzdEluZm8/LmFwcHJvdmFsU3RhdHVzJiYgKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LlRhbmdvVHJheF9UYXNrX2lzRWRpdFwiIChjbGljayk9XCJhZGRUYXNrKCdjcmVhdGV0YXNrJyxxdWVzdGlvbixjaGVja2xpc3Q/LmNoZWNrbGlzdEluZm8sY2hlY2tsaXN0Py5zdG9yZVByb2ZpbGUscXVlc3Rpb25saXN0KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTExLjY2OTMgMS42NjY3NUg1LjAwMjZDNC41NjA1OCAxLjY2Njc1IDQuMTM2NjUgMS44NDIzNCAzLjgyNDA5IDIuMTU0OUMzLjUxMTUzIDIuNDY3NDYgMy4zMzU5NCAyLjg5MTM5IDMuMzM1OTQgMy4zMzM0MVYxNi42NjY3QzMuMzM1OTQgMTcuMTA4OCAzLjUxMTUzIDE3LjUzMjcgMy44MjQwOSAxNy44NDUzQzQuMTM2NjUgMTguMTU3OCA0LjU2MDU4IDE4LjMzMzQgNS4wMDI2IDE4LjMzMzRIMTUuMDAyNkMxNS40NDQ2IDE4LjMzMzQgMTUuODY4NiAxOC4xNTc4IDE2LjE4MTEgMTcuODQ1M0MxNi40OTM3IDE3LjUzMjcgMTYuNjY5MyAxNy4xMDg4IDE2LjY2OTMgMTYuNjY2N1Y2LjY2Njc1TTExLjY2OTMgMS42NjY3NUwxNi42NjkzIDYuNjY2NzVNMTEuNjY5MyAxLjY2Njc1VjYuNjY2NzVIMTYuNjY5M00xMC4wMDI2IDE1LjAwMDFWMTAuMDAwMU03LjUwMjYgMTIuNTAwMUgxMi41MDI2XCIgc3Ryb2tlPVwiIzAwOUJGM1wiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTIgZm9udC10YXNrXCI+Q3JlYXRlIFRhc2s8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJxdWVzdGlvbi50YXNrJiZxdWVzdGlvbi50YXNrSWQgJiZ0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGUhPT0ndGFzaydcIiBjbGFzcz1cImJ0biBidG4tc20gYm9yZGVyLXZhbDFcIiAoY2xpY2spPVwidGFza3JlZGlyZWN0KHF1ZXN0aW9uLGNoZWNrbGlzdD8uc3RvcmVQcm9maWxlLGNoZWNrbGlzdD8uY2hlY2tsaXN0SW5mbylcIj48c3BhbiBjbGFzcz1cImZvbnQtdGFza1wiPlZpZXcgVGFzazwvc3Bhbj48L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0xMCBteS01XCIgKm5nSWY9XCJpbWFnZUNoZWNrbGlzdC5pbmNsdWRlcyhzZWxlY3QpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIiAqbmdJZj1cImNsaWVudERhdGEubG9nbyYmY2xpZW50RGF0YS5sb2dvIT09JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwibXQtNSBtYi0zIHRleHQtY2VudGVyIGljb25zaXplXCIgc3JjPVwie3tjbGllbnREYXRhLmxvZ299fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPkNoZWNrbGlzdCBOYW1lIDoge3t0aGlzLmNoZWNrbGlzdE5hbWV9fTwvaDI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgbXktMyBtdC01XCIgKm5nRm9yPVwibGV0IGl0ZW0gIG9mIG1vYmlsZXVzYWdlRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcHgtMTAgbXQtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInVuaS10aXRsZVwiPkNoZWNrbGlzdCBOYW1lOjwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidW5pLXN1YnRpdGxlXCI+OiB7e3RoaXMuY2hlY2tsaXN0TmFtZX19IDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+U3RvcmUgTmFtZTwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidW5pLXN1YnRpdGxlXCI+OiB7e2l0ZW0uc3RvcmVOYW1lfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIiAqbmdJZj1cIml0ZW0uZG93bl90aW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ1bmktdGl0bGVcIj5BdmVyYWdlIERvd250aW1lPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiICpuZ0lmPVwiaXRlbS5kb3duX3RpbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidW5pLXN1YnRpdGxlXCI+OiB7e2l0ZW0uZG93bl90aW1lfX0gTWluczwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJyb3cgdy0xMDAgcWEtYm9kcmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGxpIGNsYXNzPVwicWEtaGVhZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLnN0b3JlTmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBteS0yXCIgKm5nRm9yPVwibGV0IGRldGVjdGlvbiBvZiBpdGVtPy5pbWFnZVVybFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cInctMTAwIGgtNTAwcHggcm91bmRlZC10b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QUljaGVja2xpc3RDRE59fXt7ZGV0ZWN0aW9ufX1cIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIG10LTNcIiA+IHt7dGhpcy5jaGVja2xpc3ROYW1lfX08L2Rpdj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIG15LTJcIiAqbmdGb3I9XCJsZXQgZGV0ZWN0aW9uIG9mIGl0ZW0/LmltYWdlc0RhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCIgKm5nSWY9XCJnYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQ9PT0naW52ZW50b3J5Y291bnQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTNcIiAqbmdJZj1cImRldGVjdGlvbj8uZGF0ZV90aW1lc3RhbXBcIj5EZXRlY3Rpb24gVGltZSA6PHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5XCI+IHt7ZGV0ZWN0aW9uLmRhdGVfdGltZXN0YW1wfX08L3NwYW4+PC9zcGFuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgdGV4dC1lbmRcIj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtM1wiICpuZ0lmPVwiZGV0ZWN0aW9uPy5jYXJfY291bnRcIj5ObyBvZiBjYXJzICA6PHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5XCI+IHt7ZGV0ZWN0aW9uLmNhcl9jb3VudH19PC9zcGFuPjwvc3Bhbj4gICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIiAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZD09PSdudW1iZXJwbGF0ZWluZm8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0zXCIgKm5nSWY9XCJkZXRlY3Rpb24/LmNhcl9saWNlbnNlX2lkXCI+TnVtYmVyIFBsYXRlIDo8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnlcIj4ge3tkZXRlY3Rpb24uY2FyX2xpY2Vuc2VfaWR9fTwvc3Bhbj48L3NwYW4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCB0ZXh0LWVuZFwiPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtM1wiICpuZ0lmPVwiZGV0ZWN0aW9uPy5kYXRlX3RpbWVzdGFtcFwiPkVudHJ5IFRpbWU6PHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5XCI+IHt7ZGV0ZWN0aW9uLmRhdGVfdGltZXN0YW1wfX08L3NwYW4+PC9zcGFuPiAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIiAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZD09PSdjYXJzYXR0ZW5kZWQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0zXCIgKm5nSWY9XCJkZXRlY3Rpb24/LmludGVyYWN0ZWRfcGVyc29uX2NvdW50XCI+TnVtYmVyIG9mIFBlb3BsZSBJbnRlcmFjdGVkIDo8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnlcIj4ge3tkZXRlY3Rpb24uaW50ZXJhY3RlZF9wZXJzb25fY291bnR9fTwvc3Bhbj48L3NwYW4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiB0ZXh0LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0zXCIgKm5nSWY9XCJkZXRlY3Rpb24/LmNhcl9yZWdfbnVtYmVyXCI+TnVtYmVyIFBsYXRlIDo8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnlcIj4ge3tkZXRlY3Rpb24/LmNhcl9yZWdfbnVtYmVyfX08L3NwYW4+PC9zcGFuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0zXCIgKm5nSWY9XCJkZXRlY3Rpb24/LmNhcl9yZWdfbnVtYmVyXCI+RGV0ZWN0aW9uIFRpbWUgOjxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeVwiPiB7e2RldGVjdGlvbj8uZGF0ZV90aW1lc3RhbXB9fTwvc3Bhbj48L3NwYW4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiB0ZXh0LWVuZFwiPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTNcIiAqbmdJZj1cImRldGVjdGlvbj8uaW50ZXJhY3RlZF9kdXJhdGlvbl9pbl9zZWNzXCI+VGltZSBzcGVudDo8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnlcIj4ge3tkZXRlY3Rpb24uaW50ZXJhY3RlZF9kdXJhdGlvbl9pbl9zZWNzfX0gTWluczwvc3Bhbj48L3NwYW4+ICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiICpuZ0lmPVwiZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkPT09J3ZlaGljbGVfY2hlY2tfaW4nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTNcIiAqbmdJZj1cImRldGVjdGlvbj8uZGF0ZV90aW1lc3RhbXBcIj5EZXRlY3Rpb24gVGltZSA6PHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5XCI+IHt7ZGV0ZWN0aW9uLmRhdGVfdGltZXN0YW1wfX08L3NwYW4+PC9zcGFuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgdGV4dC1lbmRcIj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtM1wiICpuZ0lmPVwiZGV0ZWN0aW9uPy5kYXRlX3RpbWVzdGFtcFwiPlNsb3QgOjxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeVwiPiB7e2RldGVjdGlvbi5zbG90X2lkfX08L3NwYW4+PC9zcGFuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwidy0xMDAgaC01MDBweCByb3VuZGVkLXRvcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBSWNoZWNrbGlzdENETn19e3tkZXRlY3Rpb24ucGF0aH19XCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtdC0zXCIgPiB7e3RoaXMuY2hlY2tsaXN0TmFtZX19PC9kaXY+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTEwIG15LTVcIiAqbmdJZj1cInZpZGVvQ2hlY2tsaXN0LmluY2x1ZGVzKHNlbGVjdClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiICpuZ0lmPVwiY2xpZW50RGF0YS5sb2dvJiZjbGllbnREYXRhLmxvZ28hPT0nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJtdC01IG1iLTMgdGV4dC1jZW50ZXIgaWNvbnNpemVcIiBzcmM9XCJ7e2NsaWVudERhdGEubG9nb319XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTMgbXQtNVwiICpuZ0Zvcj1cImxldCBpdGVtICBvZiBjdXN0b21lcnVuYXR0ZW5kZWREYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBweC0xMCBtdC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+Q2hlY2tsaXN0IE5hbWU6PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ1bmktc3VidGl0bGVcIj46IHt7dGhpcy5jaGVja2xpc3ROYW1lfX0gPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ1bmktdGl0bGVcIj5TdG9yZSBOYW1lPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ1bmktc3VidGl0bGVcIj46IHt7aXRlbS5zdG9yZU5hbWV9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJyb3cgdy0xMDAgbWFyZ2luLXRvcC1zaWRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInFhLWhlYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdGb3I9XCJsZXQgZGV0ZWN0aW9uIG9mIGl0ZW0uaW1hZ2VzRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcHgtMTAgbXQtNSBtYXJnaW4tbGVmdC1zaWRlXCIgKm5nSWY9XCJzZWxlY3QhPSdzdXNwaWNpb3VzYWN0aXZpdHknXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiICpuZ0lmPVwiZGV0ZWN0aW9uPy5BbnN3ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInVuaS10aXRsZVwiPkRldGVjdGlvbiBTdGF0dXM8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCIgKm5nSWY9XCJkZXRlY3Rpb24/LkFuc3dlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ1bmktc3VidGl0bGVcIj46PHNwYW4gY2xhc3M9XCJtcy0zIGJhZGdlIGJhZGdlLWxpZ2h0LWRhbmdlclwiICpuZ0lmPVwiZGV0ZWN0aW9uPy5BbnN3ZXI9PT0ncmVqZWN0ZWQnXCI+QnJlYWNoZWQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0zIGJhZGdlIGJhZGdlLWxpZ2h0LXN1Y2Nlc3NcIiAqbmdJZj1cImRldGVjdGlvbj8uQW5zd2VyPT09J2FwcHJvdmVkJ1wiPk5vdC1icmVhY2hlZDwvc3Bhbj4gPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ1bmktdGl0bGVcIj5EYXRlPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ1bmktc3VidGl0bGVcIj46IHt7ZGV0ZWN0aW9uLmRhdGV8ZGF0ZTonZGQtTU0teXl5eScgfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIiAqbmdJZj1cImRldGVjdGlvbj8uY29uZmlnVGltZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+Q29uZmlndXJlZCBUaW1lPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiICpuZ0lmPVwiZGV0ZWN0aW9uPy5jb25maWdUaW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPjoge3tkZXRlY3Rpb24uY29uZmlnVGltZSB9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiICpuZ0lmPVwiZGV0ZWN0aW9uPy5kdXJhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+RHVyYXRpb248L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCIgKm5nSWY9XCJkZXRlY3Rpb24/LmR1cmF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPjoge3tkZXRlY3Rpb24uZHVyYXRpb24gfX0gTWluczwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiICpuZ0lmPVwiZGV0ZWN0aW9uPy5kb3duVGltZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+RG93bnRpbWU8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCIgKm5nSWY9XCJkZXRlY3Rpb24/LmRvd25UaW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPjoge3tkZXRlY3Rpb24uZG93blRpbWUgfX0gTWlucyAgPHNwYW4gbmdiVG9vbHRpcD1cIkRvd250aW1lIG1heSByZXN1bHQgaW4gaW5hY2N1cmF0ZSBkYXRhXCIgcGxhY2VtZW50PVwidG9wXCIgY29udGFpbmVyPVwiYm9keVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTUgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNy42NjY2NyA1LjMzMjAzVjcuOTk4N003LjY2NjY3IDEwLjY2NTRINy42NzMzM00xNC4zMzMzIDcuOTk4N0MxNC4zMzMzIDExLjY4MDYgMTEuMzQ4NiAxNC42NjU0IDcuNjY2NjcgMTQuNjY1NEMzLjk4NDc3IDE0LjY2NTQgMSAxMS42ODA2IDEgNy45OTg3QzEgNC4zMTY4IDMuOTg0NzcgMS4zMzIwMyA3LjY2NjY3IDEuMzMyMDNDMTEuMzQ4NiAxLjMzMjAzIDE0LjMzMzMgNC4zMTY4IDE0LjMzMzMgNy45OTg3WlwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj48L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgbWluLWgtNDVweCBweC0wIG15LTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cIm1lLTMgc3RvcmUtdGl0bGVcIj57e2l0ZW0uc3RvcmVOYW1lfX08L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0yIGJhZGdlIGJhZGdlLWxpZ2h0LWRlZmF1bHRcIiAqbmdJZj1cImRldGVjdGlvbj8uY3VzdG9tZXJfaWRcIj5DdXN0IElEIDoge3tkZXRlY3Rpb24uY3VzdG9tZXJfaWR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMiBiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0XCIgKm5nSWY9XCJkZXRlY3Rpb24/LnF1ZXVlX2lkXCI+UXVldWUgSUQgOiB7e2RldGVjdGlvbi5xdWV1ZV9pZH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0yIGJhZGdlIGJhZGdlLWxpZ2h0LWRlZmF1bHRcIiAqbmdJZj1cImRldGVjdGlvbj8ub3B0dW1faWRcIj5PcHRvbSBJRCA6IHt7ZGV0ZWN0aW9uLm9wdHVtX2lkfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwibXMtMiBiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0XCIgKm5nSWY9XCJkZXRlY3Rpb24/LmRhdGVcIj5EYXRlIDoge3tkZXRlY3Rpb24uZGF0ZXxkYXRlOidkZC1NTS15eXl5JyB9fTwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwibXMtMyBiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0XCIgKm5nSWY9XCJkZXRlY3Rpb24/LmNvbmZpZ1RpbWVcIj5JbnNwZWN0aW9uIHRpbWUgOiB7e2RldGVjdGlvbi5jb25maWdUaW1lfX08L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0zIGJhZGdlIGJhZGdlLWxpZ2h0LWRlZmF1bHRcIiAqbmdJZj1cImRldGVjdGlvbj8udGVtcF9pZFwiPlRlbXBJZCA6IHt7ZGV0ZWN0aW9uLnRlbXBfaWR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMyBiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0XCIgKm5nSWY9XCJkZXRlY3Rpb24/LnRpbWVfc3BlbmRcIj5UaW1lc3BlbmQgOiB7e2RldGVjdGlvbi50aW1lX3NwZW5kfX1NaW5zPC9zcGFuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFN3aXRjaCB0b2dnbGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgdGV4dC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTMgYmFkZ2UgYmFkZ2UtbGlnaHQtZGVmYXVsdFwiICpuZ0lmPVwiZGV0ZWN0aW9uPy5lbnRyeV90aW1lXCI+RW50cnkgdGltZSA6IHt7ZGV0ZWN0aW9uLmVudHJ5X3RpbWV9fTwvc3Bhbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMyBiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0XCIgKm5nSWY9XCJkZXRlY3Rpb24/LmV4aXRfdGltZVwiPkV4aXQgdGltZSA6IHt7ZGV0ZWN0aW9uLmV4aXRfdGltZX19PC9zcGFuPiAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTMgYmFkZ2UgYmFkZ2UtbGlnaHQtc3VjY2Vzc1wiICpuZ0lmPVwiZGV0ZWN0aW9uPy5hZGhlcmVuY2VfcmF0ZVwiPkFkaGVyZW5jZSBSYXRlIDoge3tkZXRlY3Rpb24uYWRoZXJlbmNlX3JhdGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTMgYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeSB0ZXh0LWNhcGl0YWxpemVcIiAqbmdJZj1cImRldGVjdGlvbj8uY2F0ZWdvcnlcIj4ge3tkZXRlY3Rpb24uY2F0ZWdvcnl9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTMgYmFkZ2UgYmFkZ2UtbGlnaHQtZGVmYXVsdFwiICpuZ0lmPVwiZGV0ZWN0aW9uPy5jdXN0b21lcl9lbnRyeV90aW1lXCI+RW50cnkgdGltZSA6IHt7ZGV0ZWN0aW9uLmN1c3RvbWVyX2VudHJ5X3RpbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTMgYmFkZ2UgYmFkZ2UtbGlnaHQtZGVmYXVsdFwiICpuZ0lmPVwiZGV0ZWN0aW9uPy5jdXN0b21lcl9leGl0X3RpbWVcIj5FeGl0IHRpbWUgOiB7e2RldGVjdGlvbi5jdXN0b21lcl9leGl0X3RpbWV9fTwvc3Bhbj4gICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktMFwiICpuZ0lmPVwic2VsZWN0ICE9J2V5ZXRlc3QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlbyBjb250cm9scyBjbGFzcz1cInctMTAwIGgtNDUwcHggcm91bmRlZC10b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QUljaGVja2xpc3RDRE59fXt7ZGV0ZWN0aW9uLnZpZGVvX3BhdGh9fVwiIGFsdD1cIlwiPiAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3ZpZGVvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0wXCIgKm5nSWY9XCJzZWxlY3QgPT09J2V5ZXRlc3QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlbyBjb250cm9scyBjbGFzcz1cInctMTAwIGgtNDUwcHggcm91bmRlZC10b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5FeWVUZXN0Q0ROfX17e2RldGVjdGlvbi52aWRlb19wYXRofX1cIiBhbHQ9XCJcIj4gIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92aWRlbz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdCA9PT0nc3RvcmVvcGVuYW5kY2xvc2UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIiAqbmdJZj1cImNsaWVudERhdGEubG9nbyYmY2xpZW50RGF0YS5sb2dvIT09JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwibXQtNSBtYi0zIHRleHQtY2VudGVyIGljb25zaXplXCIgc3JjPVwie3tjbGllbnREYXRhLmxvZ299fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHB4LTEwIG10LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+Q2hlY2tsaXN0IE5hbWU6PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ1bmktc3VidGl0bGVcIj46IHt7dGhpcy5jaGVja2xpc3ROYW1lfX0gPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBtYXJnaW4tdG9wLXNpZGVcIiAqbmdGb3I9XCJsZXQgc3RvcmUgb2Ygc3RvcmVPcGVuY2xvc2VWaWV3XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBteC04IG15LThcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzdG9yZS5pbWFnZXNEYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBweC0xMCBtdC01IG1hcmdpbi1sZWZ0LXNpZGUgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiICpuZ0lmPVwiaXRlbT8uYnVmZmVyX29wZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInVuaS10aXRsZVwiPkJ1ZmZlciBmb3IgT3BlbiBUaW1lICA6PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiICpuZ0lmPVwiaXRlbT8uYnVmZmVyX29wZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidW5pLXN1YnRpdGxlXCI+OiB7e2l0ZW0uYnVmZmVyX29wZW4gfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIiAqbmdJZj1cIml0ZW0/LmJ1ZmZlcl9jbG9zZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+QnVmZmVyIGZvciBDbG9zZSBUaW1lICA6PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiICpuZ0lmPVwiaXRlbT8uYnVmZmVyX2Nsb3NlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPjoge3tpdGVtLmJ1ZmZlcl9jbG9zZSB9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ1bmktdGl0bGVcIj5EZXRlY3Rpb24gU3RhdHVzPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ1bmktc3VidGl0bGVcIj46PHNwYW4gY2xhc3M9XCJtcy0zIGJhZGdlIGJhZGdlLWxpZ2h0LWRhbmdlclwiICpuZ0lmPVwiaXRlbT8uRmxhZ1wiPkJyZWFjaGVkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0zIGJhZGdlIGJhZGdlLWxpZ2h0LXN1Y2Nlc3NcIiAqbmdJZj1cIiFpdGVtPy5GbGFnXCI+Tm90LWJyZWFjaGVkPC9zcGFuPiA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInVuaS10aXRsZVwiPkRhdGU8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPjoge3tpdGVtLmRhdGV8ZGF0ZTonZGQtTU0teXl5eScgfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic25hcGNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbmFwaGVhZGVyIG1zLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0uc3RvcmVOYW1lfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtLTAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltZyBtdC00IHB4LTMgcG9zaXRpb24tcmVsYXRpdmVcIiAqbmdJZj1cIiFpdGVtLm9wZW5UaW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjIzXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIzIDIwXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgaWQ9XCJHcm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGlkPVwiVmVjdG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk02LjUgNi4zMjIyN0g2LjUxTTE2LjI1IDkuMzIyMjdIMjEuNUwxOCAxNi4zMjIzTDE0LjkxIDEyLjAwMjNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBpZD1cIlZlY3Rvcl8yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xLjUgMTYuMzIyOUg1LjI2QzUuNjMyNzMgMTYuMzI1NSA1Ljk5ODc3IDE2LjIyMzkgNi4zMTY4MiAxNi4wMjk1QzYuNjM0ODcgMTUuODM1MiA2Ljg5MjI4IDE1LjU1NTggNy4wNiAxNS4yMjI5TDguNSAxMi4zMjI5TTEuNSAxOC4zMjI5VjE0LjMyMjlNMTcuNSA2LjgyMjkxTDEzLjUgMTQuODIyOUwzLjExIDkuNjIyOTFDMi40MjAzMyA5LjI3NTUzIDEuODk2MzUgOC42NjkxIDEuNjUyNzIgNy45MzYzMkMxLjQwOTA5IDcuMjAzNTQgMS40NjU2NCA2LjQwNDEgMS44MSA1LjcxMjkxTDMuMTkgMi45MjI5MUMzLjM2MiAyLjU4MDE0IDMuNTk5ODQgMi4yNzQ2IDMuODg5OTQgMi4wMjM3NUM0LjE4MDAzIDEuNzcyOSA0LjUxNjcgMS41ODE2NSA0Ljg4MDcyIDEuNDYwOTNDNS4yNDQ3NCAxLjM0MDIxIDUuNjI4OTcgMS4yOTIzOSA2LjAxMTQ3IDEuMzIwMThDNi4zOTM5OCAxLjM0Nzk3IDYuNzY3MjYgMS40NTA4NCA3LjExIDEuNjIyOTFMMTcuNSA2LjgyMjkxWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcnZ0eHQgbXQtNSB0ZXh0Y2xyXCI+UHJldmlldyBub3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVmcmVzaHR4dCBtdC0yIHRleHRjbHJcIj5UaGUgc2VsZWN0ZWQgY2FtZXJhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBhdmFpbGFibGUgYXQgdGhlIG1vbWVudC48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIml0ZW0ub3BlblRpbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJteC0xIGltZy1vcGNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheE9wZW5jbG9zZWNoZWNrbGlzdENETn19e3tpdGVtLnN0b3JlSWR9fS97e2l0ZW0uZGF0ZVN0cmluZ3xkYXRlOidkZC1NTS15eXl5J319L29wZXJhdGlvbl9zbmFwcy9vcGVuLmpwZWdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIm9wZW4gY2xvc2Ugc25hcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFjayBteC0xIG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbmFwdGV4dFwiPk9wZW5pbmcgU25hcDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNuYXB0aW1lXCI+e3tpdGVtLm9wZW5UaW1lfX0gLSB7e2l0ZW0uZGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5IHNuYXBiYWRnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFpdGVtPy5vcGVuVGltZUZsYWdcIj5PbiBUaW1lPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LWRhbmdlciBzbmFwYmFkZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtPy5vcGVuVGltZUZsYWdcIj5MYXRlIE9wZW48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltZyBtdC00IHB4LTMgcG9zaXRpb24tcmVsYXRpdmVcIiAqbmdJZj1cIiFpdGVtLmNsb3NlVGltZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXcgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZC1mbGV4IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyM1wiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMyAyMFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGlkPVwiR3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBpZD1cIlZlY3RvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNi41IDYuMzIyMjdINi41MU0xNi4yNSA5LjMyMjI3SDIxLjVMMTggMTYuMzIyM0wxNC45MSAxMi4wMDIzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggaWQ9XCJWZWN0b3JfMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMS41IDE2LjMyMjlINS4yNkM1LjYzMjczIDE2LjMyNTUgNS45OTg3NyAxNi4yMjM5IDYuMzE2ODIgMTYuMDI5NUM2LjYzNDg3IDE1LjgzNTIgNi44OTIyOCAxNS41NTU4IDcuMDYgMTUuMjIyOUw4LjUgMTIuMzIyOU0xLjUgMTguMzIyOVYxNC4zMjI5TTE3LjUgNi44MjI5MUwxMy41IDE0LjgyMjlMMy4xMSA5LjYyMjkxQzIuNDIwMzMgOS4yNzU1MyAxLjg5NjM1IDguNjY5MSAxLjY1MjcyIDcuOTM2MzJDMS40MDkwOSA3LjIwMzU0IDEuNDY1NjQgNi40MDQxIDEuODEgNS43MTI5MUwzLjE5IDIuOTIyOTFDMy4zNjIgMi41ODAxNCAzLjU5OTg0IDIuMjc0NiAzLjg4OTk0IDIuMDIzNzVDNC4xODAwMyAxLjc3MjkgNC41MTY3IDEuNTgxNjUgNC44ODA3MiAxLjQ2MDkzQzUuMjQ0NzQgMS4zNDAyMSA1LjYyODk3IDEuMjkyMzkgNi4wMTE0NyAxLjMyMDE4QzYuMzkzOTggMS4zNDc5NyA2Ljc2NzI2IDEuNDUwODQgNy4xMSAxLjYyMjkxTDE3LjUgNi44MjI5MVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHJ2dHh0IG10LTUgdGV4dGNsclwiPlByZXZpZXcgbm90XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlZnJlc2h0eHQgbXQtMiB0ZXh0Y2xyXCI+VGhlIHNlbGVjdGVkIGNhbWVyYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgYXZhaWxhYmxlIGF0IHRoZSBtb21lbnQuPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJpdGVtLmNsb3NlVGltZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm14LTEgaW1nLW9wY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4T3BlbmNsb3NlY2hlY2tsaXN0Q0ROfX17e2l0ZW0uc3RvcmVJZH19L3t7aXRlbS5kYXRlU3RyaW5nfGRhdGU6J2RkLU1NLXl5eXknfX0vb3BlcmF0aW9uX3NuYXBzL2Nsb3NlLmpwZWdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIkNoZWNrbGlzdCBWaWRlbyBQbGF5ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2sgbXgtMSBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic25hcHRleHRcIj5DbG9zaW5nIFNuYXA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbmFwdGltZVwiPnt7aXRlbS5jbG9zZVRpbWV9fSAtIHt7aXRlbS5kYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5IHNuYXBiYWRnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFpdGVtPy5jbG9zZVRpbWVGbGFnXCI+T24gVGltZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1kYW5nZXIgc25hcGJhZGdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbT8uY2xvc2VUaW1lRmxhZ1wiPkVhcmx5IENsb3NlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYm94aW1hZ2VDaGVja2xpc3QuaW5jbHVkZXMoc2VsZWN0KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCIgKm5nSWY9XCJjbGllbnREYXRhLmxvZ28mJmNsaWVudERhdGEubG9nbyE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm10LTUgbWItMyB0ZXh0LWNlbnRlciBpY29uc2l6ZVwiIHNyYz1cInt7Y2xpZW50RGF0YS5sb2dvfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0Zvcj1cImxldCBzdG9yZSBvZiBxdWV1ZUFsZXJ0Vmlld1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcHgtMTAgbXQtNVwiICpuZ0lmPVwic2hvd211bHRpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+U3RvcmUgTmFtZTo8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPnt7c3RvcmU/LnN0b3JlTmFtZX19IHwgICB7e3N0b3JlPy5jaXR5fX0se3tzdG9yZT8uc3RhdGV9fSx7e3N0b3JlPy5jb3VudHJ5fX0gPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ1bmktdGl0bGVcIj5DaGVja2xpc3QgTmFtZTo8L2gzPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ1bmktc3VidGl0bGVcIj57e2NoZWNrbGlzdE5hbWV9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiICpuZ0lmPVwic2VsZWN0PT09J2JveGFsZXJ0J3x8c2VsZWN0PT09J3N1c3BpY2lvdXNmb290ZmFsbCd8fHNlbGVjdD09PSdkcmlua2luZyd8fHNlbGVjdD09PSdiYWdkZXRlY3Rpb24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ1bmktdGl0bGVcIj5EZXNjcmlwdGlvbjo8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCIgKm5nSWY9XCJzZWxlY3Q9PT0nYm94YWxlcnQnfHxzZWxlY3Q9PT0nc3VzcGljaW91c2Zvb3RmYWxsJ3x8c2VsZWN0PT09J2RyaW5raW5nJ3x8c2VsZWN0PT09J2JhZ2RldGVjdGlvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidW5pLXN1YnRpdGxlXCI+e3tjaGVja0xpc3REZXNjcmlwdGlvbn19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbS0wIHctMTAwIFwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBtdC0yXCIgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHN0b3JlLmltYWdlc0RhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBib3JkZXJjb2xvciBiZy1zZWNvbmRhcnkgbXQtOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zdGFydCBtcy01IG10LTIgbWItNVwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtLnpvbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IHJvdW5kZWQtbGcgcC0yXCI+e3tpdGVtLnpvbmV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMyBmdy1zZW1pYm9sZFwiPnt7IGl0ZW0uZGF0ZV90aW1lc3RhbXAgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJ3LTEwMCBoLTI1MHB4IHJvdW5kZWQtYm90dG9tXCIgKGNsaWNrKT1cIm9wZW5Nb2RlbChpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBSWNoZWNrbGlzdENETn19e3tpdGVtLnBhdGh9fVwiIGFsdD1cIlwiPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcGFnaW5hdGlvbiAqbmdJZj1cIiF2aWV3bG9hZGluZyAmJiAhdmlld25vRGF0YVwiIFtpdGVtc1BlclBhZ2VdPVwibGltaXRcIiBbY3VycmVudFBhZ2VdPVwib2Zmc2V0XCIgW3RvdGFsSXRlbXNdPVwidG90YWxDb3VudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFnaW5hdGlvblNpemVzXT0ncGFnaW5hdGlvblNpemVzJyBbcGFnZVNpemVdPVwibGltaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdldmlldygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIj48L2xpYi1wYWdpbmF0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc2VjdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFzaG93c2lkZW5hdlwiIChjbGljayk9XCJzaWRlbmF2KClcIiBjbGFzcz1cImJhY2tCdXR0b25sZWZ0IHRleHQtY2VudGVyIHB0LTEgY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJtdC0yIG1zLTJcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIzMlwiIGhlaWdodD1cIjMyXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05LjcyNzE0IDEyLjYzNjVMMTMuMzYzNSA5LjAwMDEzTDkuNzI3MTQgNS4zNjM3N000LjYzNjIzIDEyLjYzNjVMOC4yNzI1OSA5LjAwMDEzTDQuNjM2MjMgNS4zNjM3N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4gIFxyXG5cclxuPGRpdiBjbGFzcz1cInJvdyBjYXJkIG14LTAgcC0zIFwiICpuZ0lmPVwiY2hlY2tBSWNoZWNrbGlzdCgpJiYhdmlld25vRGF0YSYmdXNlckRldGFpbHM/LnJvbGUhPSd1c2VyJ1wiPiAgXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyICB0ZXh0LWVuZFwiPlxyXG48YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBib3JkZXItcHJpbWFyeTFcIiAgW2Rpc2FibGVkXT1cIiFhcHByb3ZhbFN0YXR1c1wiIChjbGljayk9XCJhcHBvdmVDaGVja2xpc3QoKVwiPkFwcHJvdmVcclxuPC9idXR0b24+XHJcbjwvZGl2PlxyXG48L2Rpdj5cclxuPG5nLXRlbXBsYXRlICN6b29tUG9wdXAgbGV0LW1vZGVsPlxyXG4gICAgPGRpdiBjbGFzcz1cInAtOFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcHQtMCBwcy0xIHBlLTBcIj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXN0YXJ0IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidmlld0ltYWdlLnpvbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSByb3VuZGVkLWxnIHAtMlwiPnt7dmlld0ltYWdlLnpvbmV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidmlld0ltYWdlLmVtcHR5Qm94Q291bnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPkVtcHR5IHNoZWx2ZXMgOiB7e3ZpZXdJbWFnZS5lbXB0eUJveENvdW50fX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInZpZXdJbWFnZS5lbnRyeV90aW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuID5FbnRyeSBUaW1lIDoge3t2aWV3SW1hZ2UuZW50cnlfdGltZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ2aWV3SW1hZ2UuZXhpdF90aW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuID5FeGl0IFRpbWUgOiB7e3ZpZXdJbWFnZS5leGl0X3RpbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidmlld0ltYWdlLnRlbXBfaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPlRlbXAgSWQgOiB7e3ZpZXdJbWFnZS50ZW1wX2lkfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInZpZXdJbWFnZS50aW1lX3NwZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuID5UaW1lIFNwZW5kIDoge3t2aWV3SW1hZ2UudGltZV9zcGVuZH19IE1pbnM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIiAqbmdJZj1cInZpZXdJbWFnZS50aHJlc2hvbGQmJnZpZXdJbWFnZS5Ed2VsbHRpbWVcIj48cD5JZiB0aGUgcXVldWUgZXhjZWVkcyB7e3ZpZXdJbWFnZS50aHJlc2hvbGR9fSBwZW9wbGUgYW5kICB3YWl0IHRpbWUgc3VycGFzc2VzIHt7dmlld0ltYWdlLkR3ZWxsdGltZX19IG1pbnV0ZXMsIGFuIGFsZXJ0IHdpbGwgYmUgdHJpZ2dlcmVkPC9wPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zIGZ3LXNlbWlib2xkXCI+e3sgdmlld0ltYWdlLmRhdGVfdGltZXN0YW1wIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwic3RyZWFtIGZ3LXNlbWlib2xkIHRleHQtbm93cmFwIG1lLTVcIiAqbmdJZj1cImNhbWVyYS5oZWlnaHQgJiYgY2FtZXJhLndpZHRoXCI+IFJlc29sdXRpb246IHt7Y2FtZXJhLmhlaWdodH19IFggIHt7Y2FtZXJhLndpZHRofX08L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeSBtZS0wXCIgKGNsaWNrKT1cIm1vZGVsLmRpc21pc3MoKVwiPjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE1IDVMNSAxNU01IDVMMTUgMTVcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwidmlld0ltYWdlLnBhdGhcIiBjbGFzcz1cIm10LTIgb3ZlcmZsb3ctYXV0b1wiPlxyXG4gICAgICAgICAgICA8aW1nICAgY2xhc3M9XCJyb3VuZGVkLTQgbXQtNSBpbWctcG9wdXAtc3JjIHctMTAwXCIgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFJY2hlY2tsaXN0Q0ROfX17e3ZpZXdJbWFnZS5wYXRofX1cIj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgXHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvbmctdGVtcGxhdGU+Il19
2817
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FsbGVyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2dhbGxlcnkvZ2FsbGVyeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2dhbGxlcnkvZ2FsbGVyeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBYyxZQUFZLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVwSSxPQUFPLEtBQWdCLE1BQU0sT0FBTyxDQUFDO0FBQ3JDLE9BQU8sR0FBRyxNQUFNLGtCQUFrQixDQUFDO0FBS25DLE9BQU8sRUFBRSxPQUFPLEVBQThDLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUl0RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUVwRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUlwRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBaEI1RyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBdUJsQixNQUFNLE9BQU8sZ0JBQWdCO0lBOEZQO0lBQXdCO0lBQWdDO0lBQWtDO0lBQStCO0lBQ25JO0lBQStCO0lBQXdCO0lBQW9DO0lBQTRCO0lBOUZqSSxLQUFLLEdBQUcsS0FBSyxDQUFBO0lBQ2IsV0FBVyxHQUFHLENBQUMsQ0FBQTtJQUNmLGlCQUFpQixHQUFRLEVBQUUsQ0FBQztJQUM1QixZQUFZLEdBQUcsQ0FBQyxDQUFjLEVBQUUsRUFBRTtRQUNoQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JDLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM5QyxDQUFDLENBQUE7SUFDRCxXQUFXLENBQVc7SUFDdEIsSUFBSSxHQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUU7UUFDdkQsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7S0FDL0IsQ0FBQTtJQUNELFVBQVUsR0FBUSxDQUFDLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFO1FBQzNELEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO0tBQ2pDLENBQUE7SUFDRCxVQUFVLEdBQVEsRUFBRSxDQUFBO0lBQ3BCLFVBQVUsR0FBRztRQUNYLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7UUFDMUMsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRTtRQUNyRCxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtRQUMxQyxFQUFFLEtBQUssRUFBRSwwQ0FBMEMsRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUU7UUFDcEYsRUFBRSxLQUFLLEVBQUUsNENBQTRDLEVBQUUsS0FBSyxFQUFFLHdCQUF3QixFQUFFO1FBQ3hGLEVBQUUsS0FBSyxFQUFFLHlCQUF5QixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7UUFDcEQsRUFBRSxLQUFLLEVBQUUsZ0NBQWdDLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFO1FBQ3RFLEVBQUUsS0FBSyxFQUFFLHlCQUF5QixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7UUFDcEQsRUFBRSxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRTtRQUMzRCxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO1FBQzFDLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7UUFDMUMsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7S0FDaEQsQ0FBQTtJQUNELGFBQWEsR0FBUSxFQUFFLENBQUM7SUFDeEIsU0FBUyxHQUFVLEVBQUUsQ0FBQTtJQUNiLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQ2pDLGFBQWEsR0FBUSxFQUFFLENBQUE7SUFDdkIsTUFBTSxHQUFRLEVBQUUsQ0FBQztJQUNqQixNQUFNLEdBQVEsRUFBRSxDQUFDO0lBQ2pCLEtBQUssR0FBUSxFQUFFLENBQUM7SUFDaEIsS0FBSyxDQUFNO0lBQ1gsY0FBYyxDQUFNO0lBQ3BCLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDbEIsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUNoQixVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBQ2Ysa0JBQWtCLENBQU07SUFDeEIsT0FBTyxHQUFZLElBQUksQ0FBQztJQUN4QixNQUFNLEdBQVksS0FBSyxDQUFDO0lBQ3hCLFdBQVcsR0FBWSxJQUFJLENBQUM7SUFDNUIsVUFBVSxHQUFZLEtBQUssQ0FBQztJQUM1QixNQUFNLEdBQVEsQ0FBQyxDQUFDO0lBQ2hCLEtBQUssR0FBUSxDQUFDLENBQUM7SUFDZixlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNyQixVQUFVLENBQU07SUFDaEIscUJBQXFCLEdBQVEsRUFBRSxDQUFDO0lBQ2hDLGVBQWUsQ0FBTTtJQUNyQixtQkFBbUIsR0FBUSxFQUFFLENBQUE7SUFDN0IsU0FBUyxDQUFLO0lBQ2Qsa0JBQWtCLENBQU07SUFDeEIsV0FBVyxDQUFNO0lBQ2pCLHNCQUFzQixDQUFNO0lBQzVCLFdBQVcsR0FBUSxLQUFLLENBQUM7SUFDekIsWUFBWSxHQUFRLEtBQUssQ0FBQztJQUMxQixVQUFVLENBQU07SUFDaEIsYUFBYSxHQUFRLEVBQUUsQ0FBQztJQUN4QixXQUFXLEdBQVEsRUFBRSxDQUFDO0lBQ3RCLFNBQVMsR0FBUSxFQUFFLENBQUM7SUFDcEIsUUFBUSxHQUFRLEVBQUUsQ0FBQztJQUNuQixXQUFXLENBQU07SUFDakIsUUFBUSxHQUFZLElBQUksQ0FBQztJQUN6QixlQUFlLEdBQVEsRUFBRSxDQUFBO0lBQ3pCLG1CQUFtQixHQUFRLEVBQUUsQ0FBQTtJQUM3QixTQUFTLEdBQVksSUFBSSxDQUFDO0lBQzFCLFVBQVUsR0FBWSxLQUFLLENBQUE7SUFDM0IsVUFBVSxHQUFZLEtBQUssQ0FBQTtJQUMzQixXQUFXLEdBQVEsT0FBTyxDQUFDO0lBQzNCLG9CQUFvQixHQUFRLEVBQUUsQ0FBQTtJQUM5QixZQUFZLEdBQVEsRUFBRSxDQUFBO0lBQ3RCLGNBQWMsR0FBWSxLQUFLLENBQUE7SUFDL0IsUUFBUSxHQUFXLEtBQUssQ0FBQTtJQUN4QixjQUFjLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxzQkFBc0IsRUFBRSxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxDQUFBO0lBQzFJLGNBQWMsR0FBRyxDQUFDLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLHdCQUF3QixFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTtJQUNqTCxpQkFBaUIsR0FBRyxDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFBO0lBQ2hHLGlCQUFpQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxDQUFBO0lBQ3JILGNBQWMsR0FBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLENBQUMsQ0FBQTtJQUM3RCxjQUFjLEdBQVEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixDQUFDLENBQUE7SUFDdkksY0FBYyxDQUFNO0lBQ3BCLFNBQVMsQ0FBTTtJQUNmLFFBQVEsR0FBTyxFQUFFLENBQUM7SUFDbEIsYUFBYSxHQUFLLEtBQUssQ0FBQTtJQUN2QixXQUFXLENBQUk7SUFDZixTQUFTLENBQU07SUFDZixjQUFjLEdBQU0sRUFBRSxDQUFDO0lBQ3ZCLGFBQWEsR0FBTSxFQUFFLENBQUM7SUFDdEIsYUFBYSxDQUFNO0lBQ25CLGFBQWEsQ0FBSTtJQUNqQixRQUFRLEdBQVEsRUFBRSxDQUFDO0lBQ25CLFlBQW9CLEVBQWUsRUFBUyxFQUFzQixFQUFVLFdBQXdCLEVBQVUsRUFBcUIsRUFBVSxZQUFzQixFQUN6SixLQUFxQixFQUFVLE1BQWMsRUFBVSxZQUEwQixFQUFVLFFBQWtCLEVBQVUsUUFBeUI7UUFEdEksT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUFTLE9BQUUsR0FBRixFQUFFLENBQW9CO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFVO1FBQ3pKLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBRXhKLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVztZQUNyQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQy9CLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO1lBQzFCLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRTtnQkFDdEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHO29CQUN2QixTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7b0JBQ2xLLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztpQkFDakssQ0FBQTtnQkFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDOUQsSUFBSSxFQUFFLENBQUMsSUFBUyxFQUFFLEVBQUU7d0JBQ2xCLElBQUksSUFBSSxFQUFFLE1BQU0sRUFBRTs0QkFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7NEJBQzFCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzt5QkFDckI7NkJBQU07NEJBQ0wsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBOzRCQUNsRSxJQUFJLFFBQVEsSUFBSSxRQUFRLEVBQUUsUUFBUSxFQUFFO2dDQUNsQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxRQUFRLEVBQUUsUUFBUSxDQUFBO2dDQUM5QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7NkJBQ3JCO3lCQUNGO29CQUNILENBQUM7aUJBQ0YsQ0FBQyxDQUFDO2dCQUNILElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUU7b0JBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtpQkFDakQ7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsaUJBQWlCLEdBQUc7b0JBQ3ZCLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO29CQUMvRCxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztpQkFDOUQsQ0FBQTthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFDSixJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ25FLElBQUksR0FBRyxFQUFFO2dCQUNQLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFBO2FBQ3ZCO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBQ0QsZUFBZTtRQUNaLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEtBQUssS0FBSyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO1lBQzFCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFBO1NBQ3hCO0lBQ1gsQ0FBQztJQUNELGNBQWMsQ0FBQyxhQUFrQjtRQUMvQixNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUM7UUFDaEMsTUFBTSxVQUFVLEdBQUcsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUUzRCxPQUFPLFVBQVUsQ0FBQTtJQUNuQixDQUFDO0lBQ0QsV0FBVztRQUNQLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUN0QixZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1NBQ3ZCO1FBQ0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxjQUFjLElBQUksTUFBTSxFQUFFO1lBQzVCLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDaEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtnQkFDeEIsa0NBQWtDO2dCQUNsQyxpRkFBaUY7Z0JBQ2pGLElBQUk7WUFDTixDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7U0FDMUQ7SUFDSCxDQUFDO0lBQ0QsTUFBTSxDQUFDLElBQVM7UUFDZCxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtZQUN4QixJQUFJLFlBQVksQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO2dCQUN6QyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2dCQUVsRCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN4QixNQUFNLFlBQVksR0FBRyxJQUFJLFlBQVksQ0FBQyxnQ0FBZ0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO29CQUN2RixJQUFJLEVBQUUsMEJBQTBCLE9BQU8sQ0FBQyxXQUFXLEVBQUU7b0JBQ3JELElBQUksRUFBRSxxQ0FBcUMsQ0FBQyxXQUFXO2lCQUN4RCxDQUFDLENBQUM7Z0JBQ0gsNEJBQTRCO2dCQUM1QixZQUFZLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDOUQsWUFBWSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUU7b0JBQzFCLHVDQUF1QztvQkFFdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO3dCQUNyRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEVBQzNDOzRCQUNFLFdBQVcsRUFBRTtnQ0FDWCxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztnQ0FDM0MsYUFBYSxFQUFFLElBQUk7Z0NBQ25CLGtCQUFrQixFQUFFLGtCQUFrQjs2QkFDdkM7NEJBQ0QsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLOzRCQUN0QixtQkFBbUIsRUFBRSxPQUFPO3lCQUM3QixDQUNGLENBQUE7b0JBQ0gsQ0FBQyxDQUFDLENBQUE7b0JBQ0YsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN2QixDQUFDLENBQUM7Z0JBQ0YsWUFBWSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDckUsWUFBWSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUV2QyxDQUFDLENBQUM7YUFDSDtTQUNGO0lBQ0gsQ0FBQztJQUNELFVBQVU7UUFDUixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDckUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUMzQztnQkFDRSxXQUFXLEVBQUU7b0JBQ1gsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7b0JBQzNDLGFBQWEsRUFBRSxJQUFJO29CQUNuQixrQkFBa0IsRUFBRSxrQkFBa0I7aUJBQ3ZDO2dCQUNELFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDdEIsbUJBQW1CLEVBQUUsT0FBTzthQUM3QixDQUNGLENBQUE7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUN4RSxJQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxLQUFJLE1BQU0sRUFBQztZQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUE7U0FDdEQ7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRTtZQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUE7U0FDekQ7UUFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM5RCxJQUFJLEVBQUUsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDbEIsSUFBSSxJQUFJLEVBQUUsTUFBTSxFQUFFO29CQUNoQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztvQkFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxLQUFLLEtBQUssQ0FBQyxFQUFFO3dCQUNsSixJQUFJLENBQUMsaUJBQWlCLEdBQUc7NEJBQ3ZCLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQzs0QkFDNUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO3lCQUMzQyxDQUFBO3dCQUNELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQTt3QkFDdEgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFBO3FCQUNuSDtvQkFDRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDcEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUNwQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ25CLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztpQkFDcEI7cUJBQU07b0JBQ0wsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO29CQUNsRSxJQUFJLFFBQVEsSUFBSSxRQUFRLEVBQUUsUUFBUSxFQUFFO3dCQUNsQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxRQUFRLEVBQUUsUUFBUSxDQUFBO3dCQUU5QyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLEtBQUssS0FBSyxDQUFDLEVBQUU7NEJBQ2xKLElBQUksQ0FBQyxpQkFBaUIsR0FBRztnQ0FDdkIsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO2dDQUM1QyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7NkJBQzNDLENBQUE7NEJBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFBOzRCQUN0SCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUE7eUJBQ25IO3dCQUNELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQzt3QkFDckIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO3dCQUNwQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7d0JBQ3BCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDbkIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO3FCQUNwQjtpQkFDRjtZQUlILENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBSUQsa0JBQWtCO1FBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDM0UsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7Z0JBQzVCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDakQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO29CQUN0RCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDdkI7Z0JBRUQseUJBQXlCO2dCQUMzQixJQUFJLENBQUMsU0FBUyxHQUFLLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0RSxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUV6QixzQkFBc0I7Z0JBQ3RCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNyRCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNDLFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztZQUMzQixFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRTtZQUM1RixFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtTQUM1RixDQUFDLENBQUM7SUFFTCxDQUFDO0lBQ0QsWUFBWTtRQUNWLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ25HLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRTtvQkFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQTtpQkFDdEM7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUE7aUJBQ3RCO1lBQ0gsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDaEUsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFO29CQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUE7aUJBQzFCO3FCQUFNO29CQUNMLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFBO2lCQUNwQjtZQUNILENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBQ0QsYUFBYTtRQUNYLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDNUUsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFO29CQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFBO2lCQUNsQztZQUNILENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVU7UUFDcEIsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtZQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDakQ7YUFBTTtZQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDakgsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ2pCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFO3dCQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO3dCQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFBO3dCQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO3FCQUM1RDtnQkFDSCxDQUFDO2FBQ0YsQ0FBQyxDQUFBO1lBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO1NBQ2xEO0lBRUgsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFVO1FBQ3BCLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQ2pEO2FBQU07WUFDTCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDbEQ7SUFDSCxDQUFDO0lBQ0QsZ0JBQWdCO1FBRWQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQzVDLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFBO1FBQ3RCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFBO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFBO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtZQUMvQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVCO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQzVDO0lBRUgsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBYyxFQUFFLEVBQUU7WUFDckMsOENBQThDO1lBQzlDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ2pFLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFVO1FBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDekMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7WUFDekUsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO1lBQ2xFLElBQUksVUFBVSxJQUFJLFFBQVEsRUFBRTtnQkFDMUIsSUFBSSxVQUFVLEVBQUUsYUFBYSxLQUFLLENBQUMsSUFBSSxRQUFRLEVBQUUsYUFBYSxLQUFLLENBQUMsRUFBRTtvQkFDcEUsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQWMsRUFBRSxFQUFFO3dCQUNyQyxNQUFNLFdBQVcsR0FDZixDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNyRSxPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7b0JBQzlDLENBQUMsQ0FBQztpQkFDSDtxQkFBTTtvQkFDTCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBYyxFQUFFLEVBQUU7d0JBQ3JDLE1BQU0sV0FBVyxHQUNmLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ3RFLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztvQkFDOUMsQ0FBQyxDQUFBO2lCQUNGO2FBQ0Y7U0FFRjtRQUNELCtCQUErQjtJQUNqQyxDQUFDO0lBQ0QsY0FBYyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtZQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMvRSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDcEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7WUFDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1NBQ3BEO2FBQU07WUFDTCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDOUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUE7WUFDdEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQy9FLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtTQUNoRDtJQUNILENBQUM7SUFDRCxXQUFXLENBQUMsS0FBVSxFQUFFLFNBQWM7UUFDcEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQzVDLElBQUksR0FBRyxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUMsT0FBTyxFQUFFO2dCQUNyQyxHQUFHLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO2FBQ3BDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7UUFFaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ25ELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUM5QyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTdFLENBQUM7SUFDRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUMvQixRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdEYsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2xGLElBQUksRUFBRSxXQUFXO1lBQ2pCLFVBQVUsRUFBRSxVQUFVO1lBQ3RCLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDeEIsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUN6QixVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDbkIsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ2pCLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNqQixhQUFhLEVBQUUsUUFBUTtZQUN2QixrQkFBa0IsRUFBRSxFQUFFO1lBQ3RCLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDMUIsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUMzQixvQkFBb0IsRUFBRSxFQUFFO1lBQ3hCLE1BQU0sRUFBRSxFQUFFO1lBQ1YsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUMxQixDQUFDLENBQUE7UUFDRixzQ0FBc0M7SUFFeEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFpQjtRQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDdEMsT0FBTTtTQUNQO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUE7UUFDeEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFBO1FBQ2hGLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFBO1FBQzVFLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNqSCxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUE7b0JBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7b0JBQzNELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7d0JBQ3RGLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7cUJBQ3hCO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDOUI7aUJBQ0Y7WUFDSCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2IsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtvQkFDdEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtpQkFDeEI7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUM5QjtZQUNILENBQUM7U0FDRixDQUFDLENBQUE7SUFFSixDQUFDO0lBQ0QsV0FBVztRQUNULElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNsRixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDN0YsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFO29CQUMxQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFO3dCQUM5QixJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFBO3dCQUN6RixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQzt3QkFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTt3QkFDekQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsSUFBSSxNQUFNLEVBQUU7NEJBQzVDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7eUJBQ3ZCOzZCQUFNOzRCQUNMLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDN0I7cUJBQ0Y7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO3dCQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO3dCQUN6RCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxJQUFJLE1BQU0sRUFBRTs0QkFDNUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTt5QkFDdkI7NkJBQU07NEJBQ0wsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO3lCQUM3QjtxQkFDRjtpQkFDRjtZQUNILENBQUM7U0FDRixDQUFDLENBQUE7SUFLSixDQUFDO0lBQ0QsWUFBWTtRQUNWLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNqSCxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7b0JBQ3JDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUU7d0JBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTt3QkFDOUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQzt3QkFDckMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQTt3QkFDNUYsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUE7d0JBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7d0JBRXhELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLElBQUksTUFBTSxFQUFFOzRCQUM1QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO3lCQUN2Qjs2QkFBTTs0QkFDTCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7eUJBQzdCO3FCQUNGO3lCQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUU7d0JBQ3JDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTt3QkFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBO3FCQUN0RDt5QkFBTTt3QkFDTCxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFBO3dCQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO3dCQUMzRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxJQUFJLE1BQU0sRUFBRTs0QkFDNUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTt5QkFDdkI7NkJBQU07NEJBQ0wsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO3lCQUM3QjtxQkFDRjtpQkFDRjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztvQkFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSTt3QkFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2lCQUVwQjtZQUNILENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFFYixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSTtvQkFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBRXJCLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBUztRQUN4QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQzFELE1BQU0sT0FBTyxHQUFHO1lBQ2QsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUs7WUFDakQsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUs7WUFDN0MsT0FBTyxFQUFFLE1BQU07WUFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNO1lBQ3BDLGNBQWMsRUFBRSxlQUFlO1lBQy9CLE1BQU0sRUFBRSxDQUFDO1NBQ1YsQ0FBQTtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNoRCxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUE7b0JBQ3hDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFO3dCQUN0QyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQztvQ0FDekMsS0FBSyxFQUFFLDBCQUEwQjtvQ0FDakMsb0JBQW9CLEVBQUUsZUFBZTtvQ0FDckMsZUFBZSxFQUFFLGdCQUFnQjtvQ0FDakMsZUFBZSxFQUFFLElBQUk7b0NBQ3JCLGVBQWUsRUFBRSxPQUFPO29DQUN4QixZQUFZLEVBQUUsQ0FBQztvQ0FDZixzQkFBc0IsRUFBRSxPQUFPO29DQUMvQixtQkFBbUIsRUFBRSxVQUFVO29DQUMvQixpQkFBaUIsRUFBRSxVQUFVO29DQUM3QixzQkFBc0IsRUFBRSxFQUFFO29DQUMxQixTQUFTLEVBQUUsSUFBSTtpQ0FDaEIsQ0FBQyxDQUFDLENBQUE7cUJBQ0o7b0JBRUQsVUFBVSxDQUFDLEdBQUcsRUFBRTt3QkFDZCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUU7NEJBQ3pFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQTs0QkFDekYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUE7NEJBQy9FLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQTs0QkFFbkQsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUE7NEJBQ3ZILElBQUksWUFBWSxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dDQUMzQyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLEtBQUssSUFBSSxFQUFFO29DQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQTtpQ0FDdEI7Z0NBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQTtnQ0FDL0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLG9CQUFvQixDQUFDLENBQUE7Z0NBQzdGLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQTs2QkFDcEQ7NEJBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsS0FBSyxtQkFBbUIsRUFBRTtnQ0FDMUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQTtnQ0FDakMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFBOzZCQUMvQjtpQ0FBTSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsRUFBRTtnQ0FDMUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQTtnQ0FDNUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQTs2QkFDM0I7aUNBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dDQUN2RSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDO2dDQUM3QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUE7NkJBQ25DO2lDQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsRUFBRTtnQ0FDdkUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQztnQ0FDN0MsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFBOzZCQUNuQzt5QkFFRjs2QkFBTTs0QkFFTCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxFQUFFLEVBQUU7Z0NBQ3hFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQTs2QkFDdEY7aUNBQU07Z0NBQ0wsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUE7NkJBQ25GOzRCQUNELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLEVBQUUsRUFBRTtnQ0FDeEUsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUE7Z0NBQ25ILElBQUksWUFBWSxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29DQUMzQyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLEtBQUssSUFBSSxFQUFFO3dDQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQTtxQ0FDdEI7b0NBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFBO29DQUN6RyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFBO29DQUMvRSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFBO29DQUMvRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQTtvQ0FDekQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLENBQUE7b0NBQ3pGLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFBO2lDQUM5RjtxQ0FBTTtvQ0FDTCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFBO29DQUM1RyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQTtvQ0FDbEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUE7b0NBQ2xGLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsb0JBQW9CLENBQUMsQ0FBQTtvQ0FFaEcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQTtvQ0FDdEQsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUE7b0NBQ25ILElBQUksWUFBWSxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dDQUMzQyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLEtBQUssSUFBSSxFQUFFOzRDQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQTt5Q0FDdEI7d0NBQ0QsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxvQkFBb0IsQ0FBQTt3Q0FDakUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLG9CQUFvQixDQUFDLENBQUE7d0NBQzdGLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO3FDQUMxRjtpQ0FFRjs2QkFDRjtpQ0FBTTtnQ0FFTCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFBO2dDQUM1RyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQTtnQ0FDbEYsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsS0FBSyxJQUFJLEVBQUU7b0NBQzdDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFBO2lDQUN0QjtnQ0FDRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQTtnQ0FDbEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFBO2dDQUNoRyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFBO2dDQUN0RCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLGFBQWEsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQTtnQ0FDbkgsSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0NBQzNDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsb0JBQW9CLENBQUE7b0NBRWpFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO2lDQUMxRjs2QkFDRjt5QkFFRjt3QkFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFBO3dCQUV2QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQixLQUFLLG1CQUFtQixFQUFFOzRCQUNyRSxJQUFJLENBQUMsTUFBTSxHQUFHLG1CQUFtQixDQUFBOzRCQUNqQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUE7eUJBQy9COzZCQUFNLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFOzRCQUNyRixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUE7NEJBQzlDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUE7NEJBQ3ZELElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUE7eUJBQzNCOzZCQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsRUFBRTs0QkFDbEYsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQzs0QkFDeEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFBO3lCQUNuQzs2QkFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7NEJBQ2xGLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUM7NEJBQ3hELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTt5QkFDbkM7NkJBQU07NEJBQ0wsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQzs0QkFDbkcsSUFBSSxJQUFJLEVBQUU7Z0NBQ1IsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO29DQUMvQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7d0NBQ3BELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTt3Q0FDOUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7cUNBQzFCO3lDQUFNO3dDQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTt3Q0FDL0MsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7cUNBQ3pCO2lDQUNGO3FDQUFNO29DQUNMLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2lDQUM5Qjs2QkFDRjt5QkFDRjtvQkFDSCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ04sSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtpQkFDeEI7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtvQkFDbkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO29CQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztvQkFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUE7b0JBQ2xCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUE7aUJBQ3hCO1lBRUgsQ0FBQztZQUNELEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDdkIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQTtRQUNyQixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUNELGFBQWEsQ0FBQyxLQUFVO1FBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNsRCxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDdkQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzdGLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRTtvQkFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO29CQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO2lCQUMxRDtZQUNILENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBQ0QsYUFBYSxDQUFDLEtBQVU7UUFDdEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUE7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3BELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ2xELHNCQUFzQjtRQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDakgsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFO29CQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO29CQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO2lCQUM1RDtZQUNILENBQUM7U0FDRixDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDRCxZQUFZLENBQUMsS0FBVTtRQUNyQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtRQUN4QixJQUFJLEtBQUssS0FBSyxPQUFPLEVBQUU7WUFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQzVDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUNsRixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQzdGLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNqQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRTt3QkFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFBO3dCQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO3FCQUNyRDtnQkFDSCxDQUFDO2FBQ0YsQ0FBQyxDQUFBO1NBQ0g7YUFBTTtZQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ2pILElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNqQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRTt3QkFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQTt3QkFDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7cUJBQ2pFO2dCQUNILENBQUM7YUFDRixDQUFDLENBQUE7U0FDSDtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNyRCxDQUFDO0lBQ0QsWUFBWSxDQUFDLEtBQVU7UUFDckIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUE7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ25ELENBQUM7SUFDRCxtQkFBbUIsQ0FBQyxLQUFVO1FBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNqSCxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUE7b0JBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO2lCQUNqRTtZQUNILENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBQ0QsYUFBYSxDQUFDLEtBQVU7UUFDdEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUE7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUVsRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDOUMsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLGFBQWtCLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BHLElBQUksZUFBZSxFQUFFO2dCQUNuQixLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzthQUN0QjtpQkFBTTtnQkFDTCxLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzthQUN2QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0UsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFlBQVksRUFBRTtZQUNoQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7U0FDcEI7UUFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBVTtRQUNyQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDakQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBR0QscUJBQXFCO1FBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNqSCxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEVBQUU7b0JBQzFCLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO29CQUNqRSxJQUFJLEdBQUcsR0FBRzt3QkFDUixVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUTt3QkFDM0MsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU07d0JBQ3ZDLGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJO3dCQUM1QyxlQUFlLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYTt3QkFDckQsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQjt3QkFDeEQsU0FBUyxFQUFFLE1BQU07d0JBQ2pCLFlBQVksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVO3dCQUMvQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUTt3QkFDM0MsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVE7d0JBQzNDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNO3dCQUN2QyxXQUFXLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO3FCQUV6SSxDQUFBO29CQUNELElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDO3dCQUM1RSxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTs0QkFDakIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUU7Z0NBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUE7Z0NBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUE7Z0NBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7NkJBQ3ZCO2lDQUFNO2dDQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7NkJBQ3ZCO3dCQUNILENBQUM7cUJBQ0YsQ0FBQyxDQUFBO2lCQUNIO1lBQ0gsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ2xGLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM3RixJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7b0JBQ3BELElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7b0JBQ3ZELElBQUksR0FBRyxHQUFHO3dCQUNSLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRO3dCQUMzQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTTt3QkFDdkMsZUFBZSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGFBQWE7d0JBQ3JELGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxhQUFhO3dCQUNyRCxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCO3dCQUN4RCxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVTt3QkFDL0MsU0FBUyxFQUFFLEVBQUU7d0JBQ2IsV0FBVyxFQUFFLEtBQUs7d0JBQ2xCLFlBQVksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVO3dCQUMvQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUTt3QkFDM0MsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVE7d0JBQzNDLFdBQVcsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQ3hJLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNO3FCQUN4QyxDQUFBO29CQUNELElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDO3dCQUM1RSxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTs0QkFDakIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUU7Z0NBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUE7Z0NBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7Z0NBQ3pELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtnQ0FDL0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUE7Z0NBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7NkJBQ3ZCO2lDQUFNO2dDQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7NkJBQ3ZCO3dCQUNILENBQUM7cUJBQ0YsQ0FBQyxDQUFBO2lCQUNIO1lBQ0gsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFDRCxnQkFBZ0I7UUFDZCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDbEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzdGLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRTtvQkFDMUIsa0NBQWtDO29CQUNsQyw4RkFBOEY7b0JBQzlGLDZCQUE2QjtvQkFDN0IsOERBQThEO29CQUM5RCxTQUFTO29CQUNULDRCQUE0QjtvQkFDNUIsdURBQXVEO29CQUN2RCxJQUFJO29CQUNKLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7b0JBQ3ZELElBQUksR0FBRyxHQUFHO3dCQUNSLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRO3dCQUMzQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTTt3QkFDdkMsZUFBZSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGFBQWE7d0JBQ3JELGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxhQUFhO3dCQUNyRCxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCO3dCQUN4RCxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVTt3QkFDL0MsU0FBUyxFQUFFLEVBQUU7d0JBQ2IsV0FBVyxFQUFFLEtBQUs7d0JBQ2xCLFlBQVksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVO3dCQUMvQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUTt3QkFDM0MsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVE7d0JBQzNDLFdBQVcsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQ3hJLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNO3FCQUN4QyxDQUFBO29CQUNELElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDO3dCQUM1RSxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTs0QkFDakIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUU7Z0NBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUE7Z0NBQ3RDLDREQUE0RDtnQ0FDNUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFBO2dDQUMvQyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQTtnQ0FDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQzs2QkFDNUI7aUNBQU07Z0NBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQzs2QkFDNUI7d0JBQ0gsQ0FBQztxQkFDRixDQUFDLENBQUE7aUJBQ0g7WUFDSCxDQUFDO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUNELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNqSCxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEVBQUU7b0JBQzFCLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO29CQUNqRSxJQUFJLEdBQUcsR0FBRzt3QkFDUixVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUTt3QkFDM0MsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU07d0JBQ3ZDLGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxhQUFhO3dCQUNyRCxlQUFlLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYTt3QkFDckQsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQjt3QkFDeEQsWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVU7d0JBQy9DLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQ3pFLFdBQVcsRUFBRSxFQUFFO3dCQUNmLFlBQVksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVO3dCQUMvQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUTt3QkFDM0MsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVE7d0JBQzNDLFdBQVcsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQ3hJLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNO3dCQUN2QyxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWE7cUJBQ3BDLENBQUE7b0JBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUM7d0JBQzVFLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFOzRCQUNqQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRTtnQ0FDM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQTtnQ0FDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQTtnQ0FDdkMsMkRBQTJEO2dDQUMzRCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDOzZCQUM1QjtpQ0FBTTtnQ0FDTCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDOzZCQUM1Qjt3QkFDSCxDQUFDO3FCQUNGLENBQUMsQ0FBQTtpQkFDSDtZQUNILENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBQ0QsTUFBTSxHQUFHLFFBQVEsQ0FBQTtJQUNqQixRQUFRO1FBQ0gsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sS0FBSyxLQUFLLEVBQUU7WUFDbEMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUE7U0FDOUI7UUFDSixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTtRQUNmLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFBO1FBQ3pELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQTtRQUN2RSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQTtRQUN2QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQTtRQUN0QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQixLQUFLLG1CQUFtQixFQUFFO1lBQ3JFLElBQUksQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLENBQUE7WUFDakMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFBO1NBQy9CO2FBQU0sSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7WUFDckYsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQTtZQUN2RCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFBO1NBQzNCO2FBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQ2xGLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUM7WUFDeEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFBO1NBQ25DO2FBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQ2xGLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUM7WUFDeEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFBO1NBQ25DO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsS0FBSyxlQUFlLEVBQUU7WUFDeEUsSUFBSSxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUM7WUFDOUIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUE7U0FDNUI7YUFBTTtZQUNMLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDbkcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO2dCQUMvQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7b0JBQ3BELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtvQkFDOUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7aUJBQzFCO3FCQUFNO29CQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtvQkFDL0MsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7aUJBQ3pCO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFO29CQUNwRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUE7b0JBQzlDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2lCQUM5QjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUE7b0JBQy9DLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2lCQUM3QjthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsSUFBSSxHQUFXLENBQUMsQ0FBQztJQUNqQixTQUFTLENBQUMsS0FBVTtRQUNsQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDaEI7YUFBTTtZQUNMLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztJQUNELFlBQVk7UUFDVixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDOUUsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDeEgsSUFBSSxHQUFHLEdBQUc7WUFDUixVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUTtZQUMzQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUN2QyxTQUFTLEVBQUUsTUFBTTtZQUNqQixVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNO1lBQ3JDLGVBQWUsRUFBRSxJQUFJLENBQUMsTUFBTTtZQUM1QixRQUFRLEVBQUUsQ0FBQztZQUNYLE9BQU8sRUFBRSxLQUFLO1lBQ2QsV0FBVyxFQUFFLEtBQUs7WUFDbEIsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQTtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDO1lBQzlFLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRTtvQkFDM0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFBO29CQUN4QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7d0JBQzlDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO29CQUN2QixDQUFDLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDM0UsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQTtvQkFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUE7aUJBQ25FO1lBQ0gsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUVKLENBQUM7SUFDRCxjQUFjLENBQUMsSUFBUztRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDOUUsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDeEgsSUFBSSxHQUFHLEdBQUc7WUFDUixVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUTtZQUMzQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUN2QyxTQUFTLEVBQUUsTUFBTTtZQUNqQixVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNO1lBQ3JDLGVBQWUsRUFBRSxJQUFJLENBQUMsTUFBTTtZQUM1QixRQUFRLEVBQUUsQ0FBQztZQUNYLE9BQU8sRUFBRSxLQUFLO1lBQ2QsV0FBVyxFQUFFLEtBQUs7WUFDbEIsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQTtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDO1lBQzlFLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRTtvQkFDM0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFBO29CQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFBO29CQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtvQkFDbEUsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUE7b0JBQ2hCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTt3QkFDaEQsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7d0JBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDOzRCQUNmLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTzs0QkFDeEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO3lCQUM3QixDQUFDLENBQUE7b0JBQ0osQ0FBQyxDQUFDLENBQUM7b0JBRUgsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFBO29CQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO29CQUN4RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDM0UsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFBO29CQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztvQkFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtpQkFHdEI7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO29CQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztvQkFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7aUJBRXhCO1lBQ0gsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxJQUFTO1FBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUM5RSxJQUFJLEdBQUcsR0FBRztZQUNSLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRO1lBQzNDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQ3ZDLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU07WUFDckMsZUFBZSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQzVCLFFBQVEsRUFBRSxDQUFDO1lBQ1gsT0FBTyxFQUFFLEtBQUs7WUFDZCxXQUFXLEVBQUUsS0FBSztZQUNsQixVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDMUIsQ0FBQTtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUM7WUFDbEYsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFO29CQUMzQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQTtvQkFDekQsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUE7b0JBQ2hCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTt3QkFDaEQsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7d0JBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDOzRCQUNmLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTzs0QkFDeEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO3lCQUM3QixDQUFDLENBQUE7b0JBQ0osQ0FBQyxDQUFDLENBQUM7b0JBRUgsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFBO29CQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO29CQUN4RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDM0UsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFBO29CQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztvQkFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFBO2lCQUcxQjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztvQkFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7b0JBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO29CQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztpQkFFeEI7WUFDSCxDQUFDO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUNELGNBQWM7UUFDWixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQTtRQUNkLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUM5RSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUN6SCxJQUFJLEdBQUcsR0FBRztZQUNSLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRO1lBQzNDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQ3ZDLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU07WUFDckMsZUFBZSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQzVCLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSztZQUNuQixXQUFXLEVBQUUsSUFBSTtZQUNqQixVQUFVLEVBQUUsS0FBSztTQUNsQixDQUFBO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUE7UUFDZCxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUM7WUFDOUUsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFO29CQUMzQixJQUFJLENBQUMsY0FBYyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFBO29CQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFBO29CQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtvQkFDbEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTt3QkFDM0MsT0FBTyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtvQkFDckUsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQTtvQkFDckMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFBO29CQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztvQkFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7aUJBQ3JCO3FCQUFNO29CQUNMLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO29CQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQTtvQkFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2lCQUVyQjtZQUNILENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBSUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFBO1FBQ2YsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQzlFLElBQUksR0FBRyxHQUFHO1lBQ1IsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVE7WUFDM0MsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU07WUFDdkMsU0FBUyxFQUFFLE1BQU07WUFDakIsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTTtZQUNyQyxlQUFlLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDNUIsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDM0IsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ25CLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUTtTQUUxQixDQUFBO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUM7WUFDbEYsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFO29CQUMzQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQTtvQkFFeEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO3dCQUMvQyxPQUFPLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFBO29CQUNyRSxDQUFDLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFBO29CQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztvQkFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUE7b0JBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztpQkFDckI7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO29CQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztvQkFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7aUJBRXJCO1lBQ0gsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFVLEVBQUUsSUFBUztRQUN2QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtRQUN4QixJQUFJLEtBQUssQ0FBQyxhQUFhLEtBQUssSUFBSSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFBO1NBQ3RCO2FBQU07WUFDTCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1lBQ3BFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFBO1NBQ3JCO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLENBQUE7UUFDL0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUNyRSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLENBQUMsQ0FBQTtRQUVuRixJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLE9BQU8sRUFBRTtZQUN2QyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDOUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQ3hELElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDakgsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ2pCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFO3dCQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO3dCQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFBO3dCQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO3FCQUM1RDtnQkFDSCxDQUFDO2FBQ0YsQ0FBQyxDQUFBO1NBQ0g7YUFBTTtZQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUM1QyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDckQsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ2xGLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDN0YsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ2pCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFO3dCQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7d0JBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7cUJBQzFEO2dCQUNILENBQUM7YUFDRixDQUFDLENBQUE7U0FDSDtJQUVILENBQUM7SUFHRCxzQkFBc0IsQ0FBQyxJQUFTO1FBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFBO1FBQ3ZCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUM5RSxJQUFJLEdBQUcsR0FBRztZQUNSLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRO1lBQ3ZDLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRO1lBQzNDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQ3ZDLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU07WUFDckMsZUFBZSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQzVCLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLE9BQU8sRUFBRSxFQUFFO1lBQ1gsUUFBUSxFQUFFLENBQUM7WUFDWCxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDMUIsQ0FBQTtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUM7WUFDekYsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFO29CQUMzQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7b0JBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO29CQUNqQixJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7d0JBQ2hELE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFBO3dCQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQzs0QkFDZixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87NEJBQ3hCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUzt5QkFDN0IsQ0FBQyxDQUFBO29CQUNKLENBQUMsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUE7b0JBQ3RDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUMzRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUE7b0JBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7b0JBQ3hELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtvQkFDbkIsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUE7aUJBQ2pDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO2lCQUV2QjtZQUNILENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBQ0QsY0FBYyxHQUFHLEtBQUssQ0FBQTtJQUN0QixnQkFBZ0IsQ0FBQyxLQUFVLEVBQUUsT0FBWSxFQUFFLFFBQWE7UUFDdEQsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtZQUN4QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO2dCQUN4QyxJQUFJLFNBQVMsR0FBUSxFQUFFLENBQUE7Z0JBQ3ZCLElBQUksTUFBTSxHQUFRLEVBQUUsQ0FBQTtnQkFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUE7Z0JBQ2hDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUE7Z0JBQ2xELElBQUksUUFBUSxHQUFHO29CQUNiLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztvQkFDaEMsU0FBUyxFQUFFLFNBQVM7b0JBQ3BCLFVBQVUsRUFBRSxNQUFNO2lCQUNuQixDQUFBO2dCQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7YUFDeEM7aUJBQU07Z0JBQ0wsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsS0FBSyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUE7Z0JBQzVHLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQzVCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTt3QkFDekMsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLE9BQU8sQ0FBQyxXQUFXLEVBQUU7NEJBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBOzRCQUN2RCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUE7eUJBQzFDO29CQUNILENBQUMsQ0FBQyxDQUFBO2lCQUNIO3FCQUFNO29CQUNMLElBQUksU0FBUyxHQUFRLEVBQUUsQ0FBQTtvQkFDdkIsSUFBSSxNQUFNLEdBQVEsRUFBRSxDQUFBO29CQUdwQixNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtvQkFFaEMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtvQkFDbEQsSUFBSSxRQUFRLEdBQUc7d0JBQ2IsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO3dCQUNoQyxTQUFTLEVBQUUsU0FBUzt3QkFDcEIsVUFBVSxFQUFFLE1BQU07cUJBQ25CLENBQUE7b0JBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtpQkFDeEM7YUFFRjtZQUNELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2xDLElBQUksR0FBRyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFO29CQUMxQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO3dCQUM5QixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFOzRCQUNyRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTt5QkFDcEI7b0JBQ0gsQ0FBQyxDQUFDLENBQUE7aUJBQ0g7WUFDSCxDQUFDLENBQUMsQ0FBQTtZQUNGLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUE7U0FDeEI7YUFBTTtZQUVMLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDekMsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUU7b0JBQzNDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtvQkFDL0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtpQkFFbkY7WUFDSCxDQUFDLENBQUMsQ0FBQTtZQUNGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQTtTQUNuRztRQUdELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUNELG9CQUFvQjtRQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLHlCQUF5QixFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtZQUNoRCxPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTtZQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDZixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87Z0JBQ3hCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUzthQUM3QixDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQTtRQUN6QixJQUFJLENBQUMsZUFBZTtZQUNsQixDQUFDO29CQUNDLFNBQVMsRUFBRSx5QkFBeUI7b0JBQ3BDLFFBQVEsRUFBRTt3QkFDUixpRkFBaUY7d0JBQ2pGLGlGQUFpRjt3QkFDakYsaUZBQWlGO3dCQUNqRixpRkFBaUY7d0JBQ2pGLGlGQUFpRjt3QkFDakYsaUZBQWlGO3dCQUNqRixpRkFBaUY7d0JBQ2pGLHNGQUFzRjt3QkFDdEYsaUZBQWlGO3dCQUNqRixzRkFBc0Y7d0JBQ3RGLGlGQUFpRjt3QkFDakYsc0ZBQXNGO3dCQUN0RixzRkFBc0Y7d0JBQ3RGLGlGQUFpRjt3QkFDakYsc0ZBQXNGO3dCQUN0RixzRkFBc0Y7d0JBQ3RGLHNGQUFzRjt3QkFDdEYsc0ZBQXNGO3dCQUN0RixzRkFBc0Y7d0JBQ3RGLHNGQUFzRjtxQkFDdkY7aUJBQ0YsQ0FBQyxDQUFBO1FBQ0osSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7UUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUE7UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUE7SUFDckIsQ0FBQztJQUNELHNCQUFzQixDQUFDLElBQVM7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQzlFLElBQUksR0FBRyxHQUFHO1lBQ1IsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVE7WUFDdkMsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVE7WUFDM0MsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU07WUFDdkMsU0FBUyxFQUFFLE1BQU07WUFDakIsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTTtZQUNyQyxlQUFlLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDNUIsV0FBVyxFQUFFLEtBQUs7WUFDbEIsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDM0IsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ25CLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUTtTQUMxQixDQUFBO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUM7WUFDL0UsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFO29CQUMzQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7b0JBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFBO29CQUNoQixJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7d0JBQ2hELE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFBO3dCQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQzs0QkFDZixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87NEJBQ3hCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUzt5QkFDN0IsQ0FBQyxDQUFBO29CQUNKLENBQUMsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUE7b0JBQ3RDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUMzRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUE7b0JBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7b0JBQ3hELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtvQkFDbkIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUE7aUJBQzlCO3FCQUFNO29CQUNMLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFBO2lCQUV6QjtZQUNILENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBQ0QsT0FBTztRQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNqSCxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUE7b0JBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7b0JBQzNELElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO29CQUNmLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEtBQUssbUJBQW1CLEVBQUU7d0JBQ3JFLElBQUksQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLENBQUE7d0JBQ2pDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTtxQkFDL0I7eUJBQU0sSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7d0JBQ3JGLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTt3QkFDOUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQTt3QkFDdkQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtxQkFDM0I7eUJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO3dCQUNsRixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDO3dCQUN4RCxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUE7cUJBQ25DO3lCQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsRUFBRTt3QkFDbEYsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQzt3QkFDeEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFBO3FCQUNuQzt5QkFBTTt3QkFDTCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUMxRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7NEJBQ3BELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO3lCQUMxQjs2QkFBTTs0QkFDTCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzt5QkFDekI7cUJBQ0Y7aUJBRUY7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7aUJBQ3JCO1lBQ0gsQ0FBQztZQUNELEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDdEIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUVMLENBQUM7SUFDRCxNQUFNO1FBQ0osSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDaEIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsS0FBSyxtQkFBbUIsRUFBRTtZQUNyRSxJQUFJLENBQUMsTUFBTSxHQUFHLG1CQUFtQixDQUFBO1lBQ2pDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFBO1NBQzFCO2FBQU0sSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7WUFDckYsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQTtZQUN2RCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUE7U0FDdEI7YUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7WUFDbEYsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztZQUN4RCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQTtTQUM5QjthQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsRUFBRTtZQUNsRixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDO1lBQ3hELElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFBO1NBQ2pDO0lBQ0gsQ0FBQztJQUNELHlCQUF5QjtRQUV2QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQTtRQUNkLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUMxQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDOUUsSUFBSSxHQUFHLEdBQUc7WUFDUixNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUTtZQUN2QyxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUTtZQUMzQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUN2QyxTQUFTLEVBQUUsTUFBTTtZQUNqQixVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNO1lBQ3JDLGVBQWUsRUFBRSxJQUFJLENBQUMsTUFBTTtZQUM1QixXQUFXLEVBQUUsSUFBSTtZQUNqQixRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUMzQixPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDbkIsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQzFCLENBQUE7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDO1lBQ3pGLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRTtvQkFDM0IsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFBO29CQUMzQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztvQkFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUE7b0JBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUE7aUJBQ3ZDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO29CQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztpQkFFeEI7WUFDSCxDQUFDO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUNELHNCQUFzQjtRQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQTtRQUNmLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUMzQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDOUUsSUFBSSxHQUFHLEdBQUc7WUFDUixVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUTtZQUMzQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUN2QyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUTtZQUN2QyxTQUFTLEVBQUUsTUFBTTtZQUNqQixVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNO1lBQ3JDLGVBQWUsRUFBRSxJQUFJLENBQUMsTUFBTTtZQUM1QixXQUFXLEVBQUUsSUFBSTtZQUNqQixRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUMzQixPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDbkIsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQzFCLENBQUE7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQztZQUMvRSxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUU7b0JBQzNCLElBQUksQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUE7b0JBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO29CQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQTtvQkFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQTtpQkFDdkM7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO2lCQUV2QjtZQUNILENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBQ0QsY0FBYztRQUNaLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUM5RSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDOUUsSUFBSSxPQUFPLEdBQUc7WUFDWixVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUTtZQUMzQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUN2QyxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVTtZQUMvQyxTQUFTLEVBQUUsTUFBTTtZQUNqQixXQUFXLEVBQUUsS0FBSztZQUNsQixZQUFZLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ25ELGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxrQkFBa0I7WUFDeEQsZUFBZSxFQUFFLFFBQVE7WUFDekIsV0FBVyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztTQUNsRCxDQUFBO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUM7WUFDbEYsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFO29CQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFBO2lCQUMxQztxQkFBTTtvQkFDTCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQTtpQkFDdkI7WUFDSCxDQUFDO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQVdELGtCQUFrQixDQUFDLElBQVE7UUFDekIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUU7WUFDbEUsUUFBUSxFQUFFLElBQUk7WUFDZCxJQUFJLEVBQUUsSUFBSTtTQUVYLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1FBQ3RDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFBO1FBQ3pFLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEdBQUc7WUFDdkMsUUFBUSxFQUFFO2dCQUNSO29CQUNFLElBQUksRUFBRSxFQUFFO29CQUNSLE1BQU0sRUFBRSxFQUFFO29CQUNWLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7aUJBQ2xDO2FBQ0Y7U0FFRixDQUFDO1FBQ0YsUUFBUSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFBO1FBQ3pGLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEdBQUc7WUFDbkMsUUFBUSxFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsS0FBRyxPQUFPLENBQUEsQ0FBQyxDQUFBLE1BQU0sQ0FBQSxDQUFDLENBQUEsT0FBTztZQUNuRSxjQUFjLEVBQUMsSUFBSSxDQUFDLGNBQWM7WUFDbEMsYUFBYSxFQUFDLElBQUksQ0FBQyxhQUFhO1lBQ2hDLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJO1lBQzFDLFNBQVMsRUFBQyxJQUFJLENBQUMsYUFBYTtZQUM1QixXQUFXLEVBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXO1lBQzFDLFFBQVEsRUFBQyxJQUFJLENBQUMsUUFBUTtZQUN0QixhQUFhLEVBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYTtTQUVuRCxDQUFDO1FBQ0YsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUU5QixJQUFJLENBQUMsY0FBYyxHQUFDLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsYUFBYSxHQUFDLEVBQUUsQ0FBQztZQUN0QixJQUFJLE1BQU0sSUFBSSxRQUFRLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUMxQixJQUFJLENBQUMsU0FBUyxHQUFJLElBQUksQ0FBQztnQkFDdkIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO29CQUMvQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUM1QjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO2lCQUM1QzthQUNGO2lCQUFLO2dCQUdKLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUN4QixJQUFJLENBQUMsU0FBUyxHQUFJLElBQUksQ0FBQztnQkFDdkIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO29CQUMvQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUM1QjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO2lCQUM1QzthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBUyxFQUFDLFNBQWEsRUFBQyxJQUFRLEVBQUMsYUFBaUIsRUFBQyxXQUFlO1FBQ2xGLElBQUksTUFBTSxHQUFNLEVBQUUsQ0FBQTtRQUNsQixNQUFNLEdBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFRLEVBQUMsRUFBRSxDQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNwRCxPQUFPLENBQUMsR0FBRyxDQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQ3BCLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUE7WUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBQyxHQUFHLE1BQU0sQ0FBQyxDQUFBO1lBQzNDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQzVCLElBQUksQ0FBQyxhQUFhLEdBQUc7Z0JBQ25CLFdBQVcsRUFBQyxXQUFXO2FBQ3hCLENBQUE7WUFDRCxJQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsS0FBRyxVQUFVLEVBQUM7Z0JBQ2hELE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFBO2dCQUNuQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztvQkFDdkIsVUFBVSxFQUFDLFdBQVcsQ0FBQyxVQUFVO29CQUNqQyxPQUFPLEVBQUUsU0FBUyxDQUFDLFlBQVksQ0FBQyxRQUFRO29CQUN4QyxTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTO29CQUMzQyxXQUFXLEVBQUMsYUFBYSxDQUFDLFdBQVc7b0JBQ3JDLFNBQVMsRUFBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVM7b0JBQzNDLFFBQVEsRUFBQyxJQUFJLENBQUMsUUFBUTtpQkFFdkIsQ0FBQyxDQUFBO2FBQ0g7aUJBQUk7Z0JBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7b0JBQ3RCLFVBQVUsRUFBQyxXQUFXLENBQUMsVUFBVTtvQkFDakMsU0FBUyxFQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsU0FBUztvQkFDM0MsUUFBUSxFQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsUUFBUTtvQkFDekMsV0FBVyxFQUFDLGFBQWEsQ0FBQyxXQUFXO29CQUNyQyxRQUFRLEVBQUMsSUFBSSxDQUFDLFFBQVE7aUJBQ3ZCLENBQUMsQ0FBQTthQUNIO1NBQ0Y7YUFBSTtZQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1lBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUMsRUFBRSxDQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUMxRCxJQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsS0FBRyxVQUFVLEVBQUM7Z0JBQ2xELElBQUksQ0FBQyxjQUFjLEdBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFRLEVBQUMsRUFBRSxDQUFBLElBQUksQ0FBQyxXQUFXLElBQUUsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFBO2FBQ3pHO2lCQUFJO2dCQUNILElBQUksQ0FBQyxhQUFhLEdBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFRLEVBQUMsRUFBRSxDQUFBLElBQUksQ0FBQyxXQUFXLElBQUUsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFBO2FBQ3pHO1NBQ0Y7SUFFRCxDQUFDO0lBQ0Qsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFBO1FBQy9DLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNuRyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTtTQUN0QjthQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFBO1lBRXRCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLHNCQUFzQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLHdCQUF3QixFQUFFO2dCQUNoTSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO2FBQ3RCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFBO2FBQ3hCO1NBRUY7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDOUUsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQzlFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtZQUMvQyxJQUFJLEdBQUcsR0FBRztnQkFDUixVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUTtnQkFDM0MsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU07Z0JBQ3ZDLGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxhQUFhO2dCQUNyRCxlQUFlLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYTtnQkFDckQsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQjtnQkFDeEQsWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVU7Z0JBQy9DLFNBQVMsRUFBRSxNQUFNO2dCQUNqQixXQUFXLEVBQUUsS0FBSztnQkFDbEIsWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVU7Z0JBQy9DLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRO2dCQUMzQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUTtnQkFDM0MsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU07Z0JBQ3ZDLFdBQVcsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3hJLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYTthQUNwQyxDQUFBO1lBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUM7Z0JBQzVFLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNqQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRTt3QkFDM0IscURBQXFEO3dCQUNyRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzt3QkFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7d0JBQ3BCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRTs0QkFDcEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUE7eUJBQ3RFOzZCQUFNOzRCQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFBO3lCQUNyRTt3QkFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQTtxQkFDbEM7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7d0JBQ3hCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7d0JBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO3dCQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzt3QkFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7d0JBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO3FCQUV4QjtnQkFDSCxDQUFDO2FBQ0YsQ0FBQyxDQUFBO1NBQ0g7YUFBTTtZQUNMLElBQUksR0FBRyxHQUFHO2dCQUNSLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRO2dCQUMzQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTTtnQkFDdkMsZUFBZSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUk7Z0JBQzVDLGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxhQUFhO2dCQUNyRCxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCO2dCQUN4RCxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVTtnQkFDL0MsU0FBUyxFQUFFLE1BQU07Z0JBQ2pCLFdBQVcsRUFBRSxLQUFLO2dCQUNsQixZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVTtnQkFDL0MsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVE7Z0JBQzNDLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRO2dCQUMzQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTTtnQkFDdkMsV0FBVyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTthQUV6SSxDQUFBO1lBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUM7Z0JBQzVFLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNqQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRTt3QkFDM0IscURBQXFEO3dCQUNyRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzt3QkFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7d0JBQ3BCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRTs0QkFDcEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUE7eUJBQ3RFOzZCQUFNOzRCQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFBO3lCQUNyRTt3QkFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQTtxQkFDaEM7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7d0JBQ3hCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7d0JBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO3dCQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzt3QkFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7d0JBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO3FCQUV4QjtnQkFDSCxDQUFDO2FBQ0YsQ0FBQyxDQUFBO1NBQ0g7SUFDSCxDQUFDO0lBQ0QsZUFBZTtRQUNiLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNqRyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUM5RCxRQUFRLENBQUMsaUJBQWlCLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUNoRixRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzlCLElBQUksTUFBTSxJQUFJLFFBQVEsRUFBRTtnQkFFdEIsSUFBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFDO29CQUNqRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7b0JBQzlFLElBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUM7d0JBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLGlDQUFpQyxDQUFDLENBQUE7d0JBQ2xFLE9BQU07cUJBQ047aUJBQ0Q7cUJBQUk7b0JBQ0gsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO29CQUM1RSxJQUFHLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFDO3dCQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFBO3dCQUNqRSxPQUFNO3FCQUNOO2lCQUNEO2dCQUlILElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLFdBQVcsRUFBRTtvQkFDOUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUE7aUJBQ3hCO3FCQUFNO29CQUNMLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtpQkFFbkI7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUNELGdCQUFnQjtRQUNkLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUM5RSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDN0UsSUFBSSxPQUFPLEdBQUc7WUFDWixVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNO1lBQ3JDLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRO1lBQzNDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQ3ZDLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLG9CQUFvQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQjtZQUMvRCxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVTtTQUNoRCxDQUFBO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQztZQUNwRixJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUU7b0JBQzNCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtvQkFDckIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO3dCQUMvQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUM1Qjt5QkFBTTt3QkFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO3FCQUM1QztvQkFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsR0FBRyxDQUFDLE9BQU8sZUFBZSxDQUFDLENBQUE7aUJBQzFGO1lBQ0gsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQ3BELENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBR0QsV0FBVztRQUNULElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUM5RSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDN0UsSUFBSSxPQUFPLEdBQUc7WUFDWixVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUTtZQUMzQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUN2QyxTQUFTLEVBQUUsTUFBTTtZQUNqQixXQUFXLEVBQUUsSUFBSTtZQUNqQixvQkFBb0IsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxrQkFBa0I7WUFDL0QsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTTtZQUNyQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVTtTQUNoRCxDQUFBO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUM7WUFDL0UsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFO29CQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsR0FBRyxDQUFDLE9BQU8sZUFBZSxDQUFDLENBQUE7b0JBQ3pGLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtvQkFDckIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO3dCQUMvQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUM1Qjt5QkFBTTt3QkFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO3FCQUM1QztpQkFDRjtZQUNILENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUNwRCxDQUFDO1NBQ0YsQ0FBQyxDQUFBO0lBSUosQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFTO1FBQ3RCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFBO1FBQ3pCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUE7UUFDN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7UUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQzlFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUM5RSxJQUFJLEdBQUcsR0FBRztZQUNSLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRO1lBQzNDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQ3ZDLGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxhQUFhO1lBQ3JELGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxhQUFhO1lBQ3JELGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxrQkFBa0I7WUFDeEQsWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVU7WUFDL0MsV0FBVyxFQUFFLEtBQUs7WUFDbEIsU0FBUyxFQUFFLE1BQU07WUFDakIsWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVU7WUFDL0MsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVE7WUFDM0MsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVE7WUFDM0MsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU07WUFDdkMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQ25DLFdBQVcsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7U0FDekksQ0FBQTtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDO1lBQzVFLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRTtvQkFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDO29CQUNsRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztvQkFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQ3BCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO29CQUNoRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztvQkFDdEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUE7aUJBQ2xDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO29CQUN4QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO29CQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztvQkFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7b0JBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO29CQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztpQkFFeEI7WUFDSCxDQUFDO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUNELFNBQVMsQ0FBQyxJQUFTO1FBQ2pCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFBO1FBQ3pCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUE7UUFFN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7UUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQzlFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUM5RSxJQUFJLEdBQUcsR0FBRztZQUNSLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRO1lBQzNDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQ3ZDLGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJO1lBQzVDLGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxhQUFhO1lBQ3JELGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxrQkFBa0I7WUFDeEQsWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVU7WUFDL0MsV0FBVyxFQUFFLEtBQUs7WUFDbEIsU0FBUyxFQUFFLE1BQU07WUFDakIsWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVU7WUFDL0MsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVE7WUFDM0MsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVE7WUFDM0MsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU07WUFDdkMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQ25DLFdBQVcsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7U0FDekksQ0FBQTtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDO1lBQzVFLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRTtvQkFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDO29CQUNsRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztvQkFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQ3BCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRTt3QkFDcEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUE7cUJBQ3RFO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFBO3FCQUNyRTtvQkFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQTtpQkFDaEM7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7b0JBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2lCQUV4QjtZQUNILENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBR0QsWUFBWSxDQUFDLFdBQWdCLEVBQUUsWUFBaUI7UUFDOUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUE7UUFFaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO2dCQUNiLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUMvQjtRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFBO1FBQ3ZCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUM5RSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDOUUsSUFBSSxDQUFDLHFCQUFxQixHQUFHO1lBQzNCLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRO1lBQzNDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQ3ZDLGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJO1lBQzVDLGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxhQUFhO1lBQ3JELFlBQVksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVO1lBQy9DLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLFlBQVksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVO1lBQy9DLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSztZQUNuQixhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCO1lBQ3hELG9CQUFvQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQjtZQUMvRCxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUTtZQUMzQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUTtZQUMzQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDakMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU07WUFDdkMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhO1NBQ3BDLENBQUE7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQztZQUNqRyxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUU7b0JBQzNCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtvQkFDckIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7b0JBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQTtvQkFDckQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFBO2lCQUN4QjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFBO29CQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztvQkFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUE7aUJBRXZCO1lBQ0gsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxjQUFjLENBQUMsV0FBZ0IsRUFBRSxZQUFpQjtRQUNoRCxnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUE7UUFFaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO2dCQUNiLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUMvQjtRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFBO1FBQ3ZCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUM5RSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDOUUsSUFBSSxDQUFDLHFCQUFxQixHQUFHO1lBQzNCLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRO1lBQzNDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQ3ZDLGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxhQUFhO1lBQ3JELGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxhQUFhO1lBQ3JELFlBQVksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVO1lBQy9DLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLFlBQVksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVO1lBQy9DLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSztZQUNuQixhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCO1lBQ3hELG9CQUFvQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQjtZQUMvRCxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUTtZQUMzQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUTtZQUMzQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDakMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU07WUFDdkMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhO1NBQ3BDLENBQUE7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQztZQUNyRyxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUU7b0JBQzNCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtvQkFDckIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7b0JBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQTtvQkFDckQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFBO2lCQUN4QjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFBO29CQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztvQkFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUE7aUJBRXZCO1lBQ0gsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFHRCxVQUFVLEtBQUssQ0FBQztJQUVoQixXQUFXLEdBQVksSUFBSSxDQUFDO0lBQzVCLE9BQU87UUFDTCxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUN2QyxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVk7UUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUdELGdCQUFnQjtRQUNkLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQzlFLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFrQjtRQUNqQyxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztRQUN6QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQixLQUFLLG1CQUFtQixFQUFFO1lBQ3JFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFBO1NBQzFCO1FBQUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7WUFDaEYsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO1NBQ3RCO2FBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQ2xGLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUM7WUFDeEQsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUE7U0FDOUI7YUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7WUFDbEYsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztZQUN4RCxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQTtTQUNqQzthQUFNO1lBQ0wsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO2dCQUMvQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUM3QjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQTthQUNoQztTQUNGO1FBQ0QsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFFbkQsQ0FBQztJQUdELGdCQUFnQixDQUFDLFFBQWdCO1FBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEtBQUssbUJBQW1CLEVBQUU7WUFDckUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUE7U0FDMUI7YUFBTSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsRUFBRTtZQUNyRixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUE7U0FDdEI7YUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7WUFDbEYsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUE7U0FDOUI7YUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7WUFDbEYsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFBO1NBQ25DO2FBQU07WUFDTCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQzdCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFBO2FBQ2hDO1NBQ0Y7SUFHSCxDQUFDO0lBR0QsT0FBTyxDQUFDLEtBQWlCO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFDRCxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ25CLFdBQVcsR0FBVyxRQUFRLENBQUM7SUFDL0IsU0FBUyxDQUFDLEtBQVk7UUFDcEIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3JDLENBQUM7SUFDRCxjQUFjLENBQUMsSUFBUztRQUN0QixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUE7UUFDYixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7WUFDNUIsS0FBSyxHQUFHLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQTtRQUUxQyxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELGNBQWMsQ0FBQyxJQUFTLEVBQUUsUUFBYTtRQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFFLHdCQUF3QjtRQUNsRCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFFLHdDQUF3QztRQUNsRSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDOUUsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBRTlFLElBQUksUUFBUSxLQUFLLEtBQUssRUFBRTtZQUN0QixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkQsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9DLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRTNDLElBQUksVUFBVSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3JFLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLDBDQUEwQyxDQUFDLENBQUE7Z0JBQzNFLE9BQU07YUFDUDtZQUNELElBQUksVUFBVSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3JFLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLDBDQUEwQyxDQUFDLENBQUE7Z0JBQzNFLE9BQU07YUFDUDtZQUNELElBQUksVUFBVSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENB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QUFhLEdBQUcsUUFBUSxDQUFDO1FBQ3RELE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksV0FBVyxDQUFDLENBQUUsb0JBQW9CO1FBQzVFLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNWLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9CLENBQUM7d0dBMXlGWSxnQkFBZ0I7NEZBQWhCLGdCQUFnQix5TkMzQjdCLDJ1ek1BMHFFYzs7NEZEL29FRCxnQkFBZ0I7a0JBTDVCLFNBQVM7K0JBQ0UsYUFBYTtvVUErc0V2QixPQUFPO3NCQUROLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBa2VsQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IGRheWpzLCB7IERheWpzIH0gZnJvbSBcImRheWpzXCI7XHJcbmltcG9ydCB1dGMgZnJvbSAnZGF5anMvcGx1Z2luL3V0Yyc7XHJcbmRheWpzLmV4dGVuZCh1dGMpO1xyXG5pbXBvcnQgeyBUaW1lUGVyaW9kIH0gZnJvbSAnbmd4LWRhdGVyYW5nZXBpY2tlci1tYXRlcmlhbC9kYXRlcmFuZ2VwaWNrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlLCBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktZ2xvYmFsJztcclxuaW1wb3J0IHsgVHJheFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmF4LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcclxuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBFeHBvcnRHYWxsZXJ5Q29tcG9uZW50IH0gZnJvbSAnLi4vZXhwb3J0LWdhbGxlcnkvZXhwb3J0LWdhbGxlcnkuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEFkZFRhc2tDb21wb25lbnQgfSBmcm9tICcuLi9hZGQtdGFzay9hZGQtdGFzay5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUYXNrTG9nc0NvbXBvbmVudCB9IGZyb20gJy4uL3Rhc2stbG9ncy90YXNrLWxvZ3MuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXBwcm92YWxQb3B1cENvbXBvbmVudCB9IGZyb20gJy4uL2FwcHJvdmFsLXBvcHVwL2FwcHJvdmFsLXBvcHVwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IGludGVydmFsLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQnVsa2NyZWF0aW9ubW9kZWxDb21wb25lbnQgfSBmcm9tICcuLi9hZGQtbXVsdGl0YXNrL2J1bGtjcmVhdGlvbm1vZGVsL2J1bGtjcmVhdGlvbm1vZGVsLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1nYWxsZXJ5JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ2FsbGVyeS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2dhbGxlcnkuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHYWxsZXJ5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgZGF5anMgPSBkYXlqc1xyXG4gIG5vdGlmeUNvdW50ID0gMFxyXG4gIHNlbGVjdGVkRGF0ZVJhbmdlOiBhbnkgPSB7fTtcclxuICBpc0N1c3RvbURhdGUgPSAobTogZGF5anMuRGF5anMpID0+IHtcclxuICAgIGNvbnN0IGlzVmFsaWREYXRlID0gbSA+IHRoaXMuZGF5anMoKTtcclxuICAgIHJldHVybiBpc1ZhbGlkRGF0ZSA/ICdpbnZhbGlkLWRhdGUnIDogZmFsc2U7XHJcbiAgfVxyXG4gIGdhbGxlcnlGb3JtOiBGb3JtR3JvdXBcclxuICB0eXBlOiBhbnkgPSBbeyB2YWx1ZTogJ2NoZWNrbGlzdCcsIGxhYmVsOiAnQ2hlY2tsaXN0JyB9LFxyXG4gIHsgdmFsdWU6ICd0YXNrJywgbGFiZWw6ICdUYXNrJyB9XHJcbiAgXVxyXG4gIGZpbHRlcnR5cGU6IGFueSA9IFt7IHZhbHVlOiAnQ2x1c3RlcnMnLCBsYWJlbDogJ0NsdXN0ZXJzJyB9LFxyXG4gIHsgdmFsdWU6ICdUZWFtcycsIGxhYmVsOiAnVGVhbXMnIH1cclxuICBdXHJcbiAgY2hlY2tsaXN0czogYW55ID0gW11cclxuICBhbnN3ZXJUeXBlID0gW1xyXG4gICAgeyBsYWJlbDogJ0FsbCBBbnN3ZXIgVHlwZScsIHZhbHVlOiAnYWxsJyB9LFxyXG4gICAgeyBsYWJlbDogJ0Rlc2NyaXB0aXZlIEFuc3dlcicsIHZhbHVlOiAnZGVzY3JpcHRpdmUnIH0sXHJcbiAgICB7IGxhYmVsOiAnQS9CIFF1ZXN0aW9uJywgdmFsdWU6ICd5ZXMvbm8nIH0sXHJcbiAgICB7IGxhYmVsOiAnTXVsdGlwbGUgQ2hvaWNlIFF1ZXN0aW9uIC0gU2luZ2xlIEFuc3dlcicsIHZhbHVlOiAnbXVsdGlwbGVjaG9pY2VzaW5nbGUnIH0sXHJcbiAgICB7IGxhYmVsOiAnTXVsdGlwbGUgQ2hvaWNlIFF1ZXN0aW9uIC0gTXVsdGlwbGUgQW5zd2VyJywgdmFsdWU6ICdtdWx0aXBsZWNob2ljZW11bHRpcGxlJyB9LFxyXG4gICAgeyBsYWJlbDogJ0NhcHR1cmUgSW1hZ2UgYXMgYW5zd2VyJywgdmFsdWU6ICdpbWFnZScgfSxcclxuICAgIHsgbGFiZWw6ICdDYXB0dXJlIEltYWdlIHdpdGggRGVzY3JpcHRpb24nLCB2YWx1ZTogJ2Rlc2NyaXB0aXZlSW1hZ2UnIH0sXHJcbiAgICB7IGxhYmVsOiAnQ2FwdHVyZSB2aWRlbyBhcyBhbnN3ZXInLCB2YWx1ZTogJ3ZpZGVvJyB9LFxyXG4gICAgeyBsYWJlbDogJ0NhcHR1cmUgTXVsdGlwbGUgSW1hZ2UnLCB2YWx1ZTogJ211bHRpcGxlSW1hZ2UnIH0sXHJcbiAgICB7IGxhYmVsOiAnRGF0ZSBBcyBBbnN3ZXInLCB2YWx1ZTogJ2RhdGUnIH0sXHJcbiAgICB7IGxhYmVsOiAnVGltZSBBcyBBbnN3ZXInLCB2YWx1ZTogJ3RpbWUnIH0sXHJcbiAgICB7IGxhYmVsOiAnTGluZWFyIFNjYWxlJywgdmFsdWU6ICdsaW5lYXJzY2FsZScgfVxyXG4gIF1cclxuICBoZWFkZXJGaWx0ZXJzOiBhbnkgPSB7fTtcclxuICBzdG9yZUxpc3Q6IGFueVtdID0gW11cclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuICBjaGVja2xpc3REYXRhOiBhbnkgPSB7fVxyXG4gIHN0b3JlczogYW55ID0gW107XHJcbiAgZ3JvdXBzOiBhbnkgPSBbXTtcclxuICB0ZWFtczogYW55ID0gW107XHJcbiAgaXRlbXM6IGFueTtcclxuICBwYWdpbmF0ZWRJdGVtczogYW55O1xyXG4gIGl0ZW1zUGVyUGFnZSA9IDEwO1xyXG4gIGN1cnJlbnRQYWdlID0gMTtcclxuICB0b3RhbEl0ZW1zID0gMDtcclxuICB2aWV3Q2hlY2tsaXN0c0RhdGE6IGFueTtcclxuICBsb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBub0RhdGE6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB2aWV3bG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgdmlld25vRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG9mZnNldDogYW55ID0gMTtcclxuICBsaW1pdDogYW55ID0gMTtcclxuICBwYWdpbmF0aW9uU2l6ZXMgPSBbMV1cclxuICB0b3RhbENvdW50OiBhbnk7XHJcbiAgdmlld0NoZWNrbGlzdHNvcHRpb25zOiBhbnkgPSB7fTtcclxuICBtb2JpbGV1c2FnZURhdGE6IGFueTtcclxuICBtb2JpbGV1c2FnZURhdGFMaXN0OiBhbnkgPSBbXVxyXG4gIHNlbGVjdEFsbDogYW55XHJcbiAgc3RvcmVPcGVuY2xvc2VWaWV3OiBhbnk7XHJcbiAgcXVlcnlQYXJhbXM6IGFueTtcclxuICBjdXN0b21lcnVuYXR0ZW5kZWREYXRhOiBhbnk7XHJcbiAgc2VjdGlvbk5hbWU6IGFueSA9ICdhbGwnO1xyXG4gIHF1ZXN0aW9uTmFtZTogYW55ID0gJ2FsbCc7XHJcbiAgY2xpZW50RGF0YTogYW55O1xyXG4gIGNoZWNrbGlzdE5hbWU6IGFueSA9ICcnO1xyXG4gIENsdXN0ZXJMaXN0OiBhbnkgPSBbXTtcclxuICBUZWFtc0xpc3Q6IGFueSA9IFtdO1xyXG4gIHVzZXJMaXN0OiBhbnkgPSBbXTtcclxuICBlbnZpcm9ubWVudDogYW55O1xyXG4gIHNob3dmbGFnOiBib29sZWFuID0gdHJ1ZTtcclxuICBzZWxlY3RlZFNlY3Rpb246IGFueSA9IFtdXHJcbiAgdGVtcHNlbGVjdGVkU2VjdGlvbjogYW55ID0gW11cclxuICBzaG93bXVsdGk6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHNob3dzaW5nbGU6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIHNob3dmaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIHByZXZpZXdUeXBlOiBhbnkgPSAnaW1hZ2UnO1xyXG4gIGNoZWNrTGlzdERlc2NyaXB0aW9uOiBhbnkgPSAnJ1xyXG4gIGFuc3dlckZpbHRlcjogYW55ID0gW11cclxuICBhcHByb3ZhbFN0YXR1czogYm9vbGVhbiA9IGZhbHNlXHJcbiAgY2F0ZWdvcnk6IHN0cmluZyA9ICdhbGwnXHJcbiAgdmlkZW9DaGVja2xpc3QgPSBbJ2N1c3RvbWVydW5hdHRlbmRlZCcsICdzdGFmZmxlZnRpbnRoZW1pZGRsZScsICdyZW1vdGVvcHRvbWV0cmlzdCcsICdleWV0ZXN0JywgJ2NsZWFuaW5nJywgJ3NjcnVtJywgJ3N1c3BpY2lvdXNhY3Rpdml0eSddXHJcbiAgaW1hZ2VDaGVja2xpc3QgPSBbJ21vYmlsZXVzYWdlZGV0ZWN0aW9uJywgJ3VuaWZvcm1kZXRlY3Rpb24nLCAnc3RvcmVoeWdpZW5lbW9uaXRvcmluZycsICdjdXN0b21lcnRyaWFsJywgJ2ludmVudG9yeWNvdW50JywgJ2NhcnNhdHRlbmRlZCcsICdudW1iZXJwbGF0ZWluZm8nLCAndmVoaWNsZV9jaGVja19pbiddXHJcbiAgYm94aW1hZ2VDaGVja2xpc3QgPSBbJ3F1ZXVlYWxlcnQnLCAnYm94YWxlcnQnLCAnc3VzcGljaW91c2Zvb3RmYWxsJywgJ2RyaW5raW5nJywgJ2JhZ2RldGVjdGlvbiddXHJcbiAgY29tYmluZWRDaGVja2xpc3QgPSBbLi4udGhpcy52aWRlb0NoZWNrbGlzdCwgLi4udGhpcy5pbWFnZUNoZWNrbGlzdCwgLi4udGhpcy5ib3hpbWFnZUNoZWNrbGlzdCwgJ3N0b3Jlb3BlbmFuZGNsb3NlJyxdXHJcbiAgcGRmRXhwb3J0VHlwZXM6IGFueSA9IFsnY3VzdG9tJywgJ3Rhc2snLCAnc3RvcmVvcGVuYW5kY2xvc2UnXVxyXG4gIGNzdkV4cG9ydFR5cGVzOiBhbnkgPSBbJ2N1c3RvbScsICd0YXNrJywgJ3N0b3Jlb3BlbmFuZGNsb3NlJywgJ2NsZWFuaW5nJywgJ3NjcnVtJywgJ2ludmVudG9yeWNvdW50JywgJ2NhcnNhdHRlbmRlZCcsICdudW1iZXJwbGF0ZWluZm8nXVxyXG4gIHF1ZXVlQWxlcnRWaWV3OiBhbnk7XHJcbiAgdmlld0ltYWdlOiBhbnk7XHJcbiAgem9uZUxpc3Q6YW55ID0gW107XHJcbiAgYXBwcm92ZUZpbHRlcjphbnk9J2FsbCdcclxuICB1c2VyRGV0YWlsczphbnlcclxuICB0aW1lb3V0SWQ6IGFueTtcclxuICBzZWxlY3RlZFN0b3JlczogYW55PVtdO1xyXG4gIHNlbGVjdGVkVXNlcnM6IGFueT1bXTtcclxuICBpbnB1dERhdGFUYXNrOiBhbnk7XHJcbiAgb3RoZXJUYXNrRGF0YTphbnlcclxuICByZWZJbWFnZTogYW55W109W107XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsIHB1YmxpYyBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLCBwcml2YXRlIHRyYXhTZXJ2aWNlOiBUcmF4U2VydmljZSwgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLCBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbiwgcHJpdmF0ZSBwYWdlSW5mbzogUGFnZUluZm9TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLnJvdXRlPy5xdWVyeVBhcmFtc1xyXG4gICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcclxuICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gcGFyYW1zO1xyXG4gICAgICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW1zICYmIHRoaXMucXVlcnlQYXJhbXMuQ2hlY2tsaXN0RGF0ZSkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZSA9IHtcclxuICAgICAgICAgICAgc3RhcnREYXRlOiB0aGlzLnF1ZXJ5UGFyYW1zLkNoZWNrbGlzdERhdGUgPyB0aGlzLmRheWpzKHRoaXMucXVlcnlQYXJhbXMuQ2hlY2tsaXN0RGF0ZSkuZm9ybWF0KCdERC1NTS1ZWVlZJykgOiB0aGlzLmRheWpzKCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQtTU0tWVlZWScpLFxyXG4gICAgICAgICAgICBlbmREYXRlOiB0aGlzLnF1ZXJ5UGFyYW1zLkNoZWNrbGlzdERhdGUgPyB0aGlzLmRheWpzKHRoaXMucXVlcnlQYXJhbXMuQ2hlY2tsaXN0RGF0ZSkuZm9ybWF0KCdERC1NTS1ZWVlZJykgOiB0aGlzLmRheWpzKCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQtTU0tWVlZWScpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGRhdGE/LmNsaWVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJGaWx0ZXJzID0gZGF0YTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsU3RvcmVzKCk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCB1c2VyaW5mbyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1c2VyLWluZm9cIikgfHwgXCJcIilcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyaW5mbyAmJiB1c2VyaW5mbz8uY2xpZW50SWQpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCA9IHVzZXJpbmZvPy5jbGllbnRJZFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdldEFsbFN0b3JlcygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKHRoaXMucXVlcnlQYXJhbXMudmlld1JlZG8pIHtcclxuICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoXCJ2aWV3UmVkb1wiKT8uc2V0VmFsdWUodHJ1ZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZSA9IHtcclxuICAgICAgICAgICAgc3RhcnREYXRlOiB0aGlzLmRheWpzKCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQtTU0tWVlZWScpLFxyXG4gICAgICAgICAgICBlbmREYXRlOiB0aGlzLmRheWpzKCkuc3VidHJhY3QoMSwgJ2RheScpLmZvcm1hdCgnREQtTU0tWVlZWScpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgdGhpcy5ncy5lbnZpcm9ubWVudC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlbnYpID0+IHtcclxuICAgICAgaWYgKGVudikge1xyXG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBlbnZcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgIGlmICh0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50ID09PSBcIjQ2NFwiKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0UGVybWlzc2lvbigpXHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tOb3RpZmljYXRpb25zKClcclxuICAgICAgICAgICAgfVxyXG4gIH1cclxuICBjaGVja3RvZGF5RGF0ZShjaGVja2xpc3REYXRlOiBhbnkpIHtcclxuICAgIGNvbnN0IGdpdmVuRGF0ZSA9IGNoZWNrbGlzdERhdGU7XHJcbiAgICBjb25zdCBpc1NhbWVEYXRlID0gZGF5anMoKS5pc1NhbWUoZGF5anMoZ2l2ZW5EYXRlKSwgJ2RheScpO1xyXG5cclxuICAgIHJldHVybiBpc1NhbWVEYXRlXHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICBpZiAodGhpcy50aW1lb3V0SWQpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRJZCk7XHJcbiAgICB0aGlzLnRpbWVvdXRJZCA9IG51bGw7XHJcbiAgfVxyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVxdWVzdFBlcm1pc3Npb24oKSB7XHJcbiAgICBpZiAoJ05vdGlmaWNhdGlvbicgaW4gd2luZG93KSB7XHJcbiAgICAgIE5vdGlmaWNhdGlvbi5yZXF1ZXN0UGVybWlzc2lvbigpLnRoZW4ocGVybWlzc2lvbiA9PiB7XHJcbiAgICAgICAgIGNvbnNvbGUubG9nKHBlcm1pc3Npb24pXHJcbiAgICAgICAgLy8gaWYgKHBlcm1pc3Npb24gPT09ICdncmFudGVkJykge1xyXG4gICAgICAgIC8vICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5vdGlmeSgpLCAxMDAwKTsgLy8gc2hvcnQgZGVsYXkgaGVscHMgaW4gc29tZSBicm93c2Vyc1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdCcm93c2VyIGRvZXMgbm90IHN1cHBvcnQgbm90aWZpY2F0aW9ucy4nKTtcclxuICAgIH1cclxuICB9XHJcbiAgbm90aWZ5KGRhdGE6IGFueSkge1xyXG4gICAgZm9yIChsZXQgZWxlbWVudCBvZiBkYXRhKSB7XHJcbiAgICAgIGlmIChOb3RpZmljYXRpb24ucGVybWlzc2lvbiA9PT0gJ2dyYW50ZWQnKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlSW5mby51cGRhdGVUaXRsZSgn4pqg77iPIFZlaGljbGUgRGV0ZWN0aW9uJyk7XHJcbiAgICAgICBcclxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICBjb25zdCBub3RpZmljYXRpb24gPSBuZXcgTm90aWZpY2F0aW9uKGDwn5qXIFZlaGljbGUgRGV0ZWN0aW9uIG9uIHNsb3QgJHtlbGVtZW50Py5zbG90Tm99YCwge1xyXG4gICAgICAgICAgYm9keTogYCBEZXRlY3Rpb24gb2NjdXJyZWQgYXQgJHtlbGVtZW50LmNhcHR1cmVUaW1lfWAsXHJcbiAgICAgICAgICBpY29uOiAnLi9hc3NldHMvdGFuZ28vbGF5b3V0L3RhbmdvLWZhdi5wbmcnIC8vIE9wdGlvbmFsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobm90aWZpY2F0aW9uKVxyXG4gICAgICAgIG5vdGlmaWNhdGlvbi5vbnNob3cgPSAoKSA9PiBjb25zb2xlLmxvZygnTm90aWZpY2F0aW9uIHNob3duJyk7XHJcbiAgICAgICAgbm90aWZpY2F0aW9uLm9uY2xpY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnTm90aWZpY2F0aW9uIGNsaWNrZWQnKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvJywgeyBza2lwTG9jYXRpb25DaGFuZ2U6IHRydWUgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21hbmFnZS90cmF4L2dhbGxlcnknXSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtczoge1xyXG4gICAgICAgICAgICAgICAgICBDaGVja2xpc3REYXRlOiBkYXlqcygpLmZvcm1hdCgnWVlZWS1NTS1ERCcpLFxyXG4gICAgICAgICAgICAgICAgICBjaGVja2xpc3RUeXBlOiBcImFpXCIsXHJcbiAgICAgICAgICAgICAgICAgIHNvdXJjZUNoZWNrTGlzdF9pZDogXCJ2ZWhpY2xlX2NoZWNrX2luXCIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgbm90aWZpY2F0aW9uLmNsb3NlKCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBub3RpZmljYXRpb24ub25lcnJvciA9IChlKSA9PiBjb25zb2xlLmVycm9yKCdOb3RpZmljYXRpb24gZXJyb3InLCBlKTtcclxuICAgICAgICBub3RpZmljYXRpb24ub25jbG9zZSA9ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucGFnZUluZm8udXBkYXRlVGl0bGUoJ0dhbGxlcnknKTtcclxuXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICByZWZyZXNobm93KCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnLycsIHsgc2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tYW5hZ2UvdHJheC9nYWxsZXJ5J10sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcXVlcnlQYXJhbXM6IHtcclxuICAgICAgICAgICAgQ2hlY2tsaXN0RGF0ZTogZGF5anMoKS5mb3JtYXQoJ1lZWVktTU0tREQnKSxcclxuICAgICAgICAgICAgY2hlY2tsaXN0VHlwZTogXCJhaVwiLFxyXG4gICAgICAgICAgICBzb3VyY2VDaGVja0xpc3RfaWQ6IFwidmVoaWNsZV9jaGVja19pblwiLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXHJcbiAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcbiAgICB0aGlzLnNldFBhZ2VEYXRhKCk7XHJcbiAgICAgIHRoaXMudXNlckRldGFpbHMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXNlci1pbmZvXCIpIHx8IFwiXCIpXHJcbiAgICBpZih0aGlzLnF1ZXJ5UGFyYW1zLmNvdmVyYWdlID09PSd1c2VyJyl7XHJcbiAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KFwiZmlsdGVydHlwZVwiKT8uc2V0VmFsdWUoJ1RlYW1zJylcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW1zLmNvdmVyYWdlID09PSAnc3RvcmVzJykge1xyXG4gICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldChcImZpbHRlcnR5cGVcIik/LnNldFZhbHVlKCdDbHVzdGVycycpXHJcbiAgICB9XHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGE/LmNsaWVudCkge1xyXG4gICAgICAgICAgdGhpcy5oZWFkZXJGaWx0ZXJzID0gZGF0YTtcclxuICAgICAgICAgIGlmICghdGhpcy5xdWVyeVBhcmFtcy5DaGVja2xpc3REYXRlICYmIHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQgJiYgKHRoaXMuaGVhZGVyRmlsdGVycz8uY2xpZW50ID09PSBcIjQ1OVwiIHx8IHRoaXMuaGVhZGVyRmlsdGVycz8uY2xpZW50ID09PSBcIjQ2NFwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlID0ge1xyXG4gICAgICAgICAgICAgIHN0YXJ0RGF0ZTogdGhpcy5kYXlqcygpLmZvcm1hdCgnREQtTU0tWVlZWScpLFxyXG4gICAgICAgICAgICAgIGVuZERhdGU6IHRoaXMuZGF5anMoKS5mb3JtYXQoJ0RELU1NLVlZWVknKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdmcm9tRGF0ZScpPy5zZXRWYWx1ZShkYXlqcyh0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLnN0YXJ0RGF0ZSwgJ0RELU1NLVlZWVknKS5mb3JtYXQoJ1lZWVktTU0tREQnKSlcclxuICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3RvRGF0ZScpPy5zZXRWYWx1ZShkYXlqcyh0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLmVuZERhdGUsICdERC1NTS1ZWVlZJykuZm9ybWF0KCdZWVlZLU1NLUREJykpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmNsaWVudERldGFpbHMoKTtcclxuICAgICAgICAgIHRoaXMuZ2V0QWxsR3JvdXBzKCk7XHJcbiAgICAgICAgICB0aGlzLmdldEFsbFN0b3JlcygpO1xyXG4gICAgICAgICAgdGhpcy5nZXRBbGxVc2VycygpO1xyXG4gICAgICAgICAgdGhpcy5nZXRBbGxUZWFtcygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgdXNlcmluZm8gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXNlci1pbmZvXCIpIHx8IFwiXCIpXHJcbiAgICAgICAgICBpZiAodXNlcmluZm8gJiYgdXNlcmluZm8/LmNsaWVudElkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQgPSB1c2VyaW5mbz8uY2xpZW50SWRcclxuICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnF1ZXJ5UGFyYW1zLkNoZWNrbGlzdERhdGUgJiYgdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCAmJiAodGhpcy5oZWFkZXJGaWx0ZXJzPy5jbGllbnQgPT09IFwiNDU5XCIgfHwgdGhpcy5oZWFkZXJGaWx0ZXJzPy5jbGllbnQgPT09IFwiNDY0XCIpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZTogdGhpcy5kYXlqcygpLmZvcm1hdCgnREQtTU0tWVlZWScpLFxyXG4gICAgICAgICAgICAgICAgZW5kRGF0ZTogdGhpcy5kYXlqcygpLmZvcm1hdCgnREQtTU0tWVlZWScpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdmcm9tRGF0ZScpPy5zZXRWYWx1ZShkYXlqcyh0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLnN0YXJ0RGF0ZSwgJ0RELU1NLVlZWVknKS5mb3JtYXQoJ1lZWVktTU0tREQnKSlcclxuICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgndG9EYXRlJyk/LnNldFZhbHVlKGRheWpzKHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UuZW5kRGF0ZSwgJ0RELU1NLVlZWVknKS5mb3JtYXQoJ1lZWVktTU0tREQnKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNsaWVudERldGFpbHMoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRBbGxHcm91cHMoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRBbGxTdG9yZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRBbGxVc2VycygpO1xyXG4gICAgICAgICAgICB0aGlzLmdldEFsbFRlYW1zKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGNoZWNrTm90aWZpY2F0aW9ucygpIHtcclxuICB0aGlzLnRyYXhTZXJ2aWNlLmNoZWNrTm90aWZpY2F0aW9uQ291bnQodGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCkuc3Vic2NyaWJlKHtcclxuICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0SWQpXHJcbiAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwICYmIHJlcy5kYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLm5vdGlmeUNvdW50ID0gdGhpcy5ub3RpZnlDb3VudCArIHJlcy5kYXRhLmxlbmd0aDtcclxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB0aGlzLm5vdGlmeShyZXMuZGF0YSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFNjaGVkdWxlIHRoZSBuZXh0IGNhbGxcclxuICAgIHRoaXMudGltZW91dElkID0gICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY2hlY2tOb3RpZmljYXRpb25zKCksIDEwMDAwKTtcclxuICAgIH0sXHJcbiAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnIpO1xyXG4gICAgICB0aGlzLnJlcXVlc3RQZXJtaXNzaW9uKCk7XHJcblxyXG4gICAgICAvLyBSZXRyeSBldmVuIG9uIGVycm9yXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jaGVja05vdGlmaWNhdGlvbnMoKSwgMTAwMDApO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcbiAgc2V0UGFnZURhdGEoKSB7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnVwZGF0ZVRpdGxlKCdHYWxsZXJ5Jyk7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldERlc2NyaXB0aW9uKFwiXCIpO1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRCcmVhZGNydW1icyhbXHJcbiAgICAgIHsgdGl0bGU6IFwiVGFuZ28gVHJheFwiLCBwYXRoOiBcIi9tYW5hZ2UvdHJheC9kYXNoYm9hcmRcIiwgaXNBY3RpdmU6IGZhbHNlLCBpc1NlcGFyYXRvcjogZmFsc2UgfSxcclxuICAgICAgeyB0aXRsZTogXCJUYW5nbyBUcmF4XCIsIHBhdGg6IFwiL21hbmFnZS90cmF4L2Rhc2hib2FyZFwiLCBpc0FjdGl2ZTogZmFsc2UsIGlzU2VwYXJhdG9yOiB0cnVlIH0sXHJcbiAgICBdKTtcclxuXHJcbiAgfVxyXG4gIGdldEFsbEdyb3VwcygpIHtcclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0Y2x1c3RlcnMoeyBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCwgZ3JvdXA6IFtdLCBjaXR5OiBbXSB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5DbHVzdGVyTGlzdCA9IHJlcy5kYXRhLmdyb3VwRGF0YVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLkNsdXN0ZXJMaXN0ID0gW11cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIGdldEFsbFRlYW1zKCkge1xyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRBbGxUZWFtcyh0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5UZWFtc0xpc3QgPSByZXMuZGF0YVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLlRlYW1zTGlzdCA9IFtdXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBjbGllbnREZXRhaWxzKCkge1xyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRjbGllbnQoeyBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5jbGllbnREYXRhID0gcmVzLmRhdGEucmVzdWx0XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcmVkb0NoYW5nZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KFwidmlld1JlZG9cIik/LnNldFZhbHVlKHRydWUpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldFN0b3Jlc2xpc3QoeyBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCwgY2x1c3RlcnM6IHRoaXMuZ3JvdXBzLCBjaXR5OiBbXSB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSByZXMuZGF0YS5zdG9yZXNEYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlcyA9IHJlcy5kYXRhLnN0b3Jlc0RhdGFcclxuICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZSh0aGlzLnN0b3JlTGlzdClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KFwidmlld1JlZG9cIik/LnNldFZhbHVlKGZhbHNlKVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGZsYWdDaGFuZ2VkKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldChcInZpZXdGbGFnXCIpPy5zZXRWYWx1ZSh0cnVlKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoXCJ2aWV3RmxhZ1wiKT8uc2V0VmFsdWUoZmFsc2UpXHJcbiAgICB9XHJcbiAgfVxyXG4gIG9uY2hlY2tsaXN0cmVzZXQoKSB7XHJcblxyXG4gICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoXCJmaWx0ZXJcIik/LnNldFZhbHVlKCcnKVxyXG4gICAgdGhpcy5hbnN3ZXJGaWx0ZXIgPSBbXVxyXG4gICAgdGhpcy5zaG93bXVsdGkgPSB0cnVlXHJcbiAgICB0aGlzLnNob3dzaW5nbGUgPSBmYWxzZVxyXG4gICAgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudHlwZSA9PT0gJ2NoZWNrbGlzdCcpIHtcclxuICAgICAgdGhpcy5nZXRDaGVja2xpc3RRQShmYWxzZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdldFRhc2tRQSh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGUpXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcmVzZXRWYWxpZGF0aW9uKCkge1xyXG4gICAgdGhpcy5pc0N1c3RvbURhdGUgPSAobTogZGF5anMuRGF5anMpID0+IHtcclxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGdpdmVuIGRhdGUgaXMgYmVmb3JlIHllc3RlcmRheVxyXG4gICAgICByZXR1cm4gbS5pc0FmdGVyKHRoaXMuZGF5anMoKSwgJ2RheScpID8gJ2ludmFsaWQtZGF0ZScgOiBmYWxzZTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBvblN0YXJ0RGF0ZUNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5kYXlqcyhldmVudC5zdGFydERhdGUpLmlzVmFsaWQoKSkge1xyXG4gICAgICBsZXQgY2xpZW50aW5mbyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJjbGllbnQtZGV0YWlsc1wiKSB8fCBcIlwiKVxyXG4gICAgICBsZXQgdXNlcmluZm8gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXNlci1pbmZvXCIpIHx8IFwiXCIpXHJcbiAgICAgIGlmIChjbGllbnRpbmZvIHx8IHVzZXJpbmZvKSB7XHJcbiAgICAgICAgaWYgKGNsaWVudGluZm8/LnRyYXhEYXRlUmFuZ2UgPT09IDcgfHwgdXNlcmluZm8/LnRyYXhEYXRlUmFuZ2UgPT09IDcpIHtcclxuICAgICAgICAgIHRoaXMuaXNDdXN0b21EYXRlID0gKG06IGRheWpzLkRheWpzKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmFsaWREYXRlID1cclxuICAgICAgICAgICAgICBtID4gdGhpcy5kYXlqcygpIHx8IG0gPiB0aGlzLmRheWpzKGV2ZW50LnN0YXJ0RGF0ZS5hZGQoMiwgXCJkYXlzXCIpKTtcclxuICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWREYXRlID8gXCJpbnZhbGlkLWRhdGVcIiA6IGZhbHNlO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5pc0N1c3RvbURhdGUgPSAobTogZGF5anMuRGF5anMpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaXNWYWxpZERhdGUgPVxyXG4gICAgICAgICAgICAgIG0gPiB0aGlzLmRheWpzKCkgfHwgbSA+IHRoaXMuZGF5anMoZXZlbnQuc3RhcnREYXRlLmFkZCgzMCwgXCJkYXlzXCIpKTtcclxuICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWREYXRlID8gXCJpbnZhbGlkLWRhdGVcIiA6IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIC8vIHRoaXMuZ2V0QWxsQ2hlY2tMaXN0cyhmYWxzZSlcclxuICB9XHJcbiAgc2VsZWN0QWxsU3RvcmUoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XHJcbiAgICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5mb3JFYWNoKChvYmo6IGFueSkgPT4gKG9iai5jaGVja2VkID0gdGhpcy5zZWxlY3RBbGwpKTtcclxuICAgICAgbGV0IHN0b3JlID0gdGhpcy5tb2JpbGV1c2FnZURhdGFMaXN0LmZpbHRlcigoZWw6IGFueSkgPT4gZWwuY2hlY2tlZClcclxuICAgICAgY29uc3QgY2hhbmdlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzdG9yZSkpXHJcbiAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUoY2hhbmdlKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3pvbmVMaXN0Jyk/LnNldFZhbHVlKFtdKVxyXG4gICAgICB0aGlzLnNlbGVjdEFsbCA9IGZhbHNlXHJcbiAgICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5mb3JFYWNoKChvYmo6IGFueSkgPT4gKG9iai5jaGVja2VkID0gdGhpcy5zZWxlY3RBbGwpKTtcclxuICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZShbXSlcclxuICAgIH1cclxuICB9XHJcbiAgdXBkYXRlQ2hlY2soZXZlbnQ6IGFueSwgc3RvcmVkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZWxlLnN0b3JlSWQgPT09IHN0b3JlZGF0YS5zdG9yZUlkKSB7XHJcbiAgICAgICAgZWxlLmNoZWNrZWQgPSBldmVudC50YXJnZXQuY2hlY2tlZDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBsZXQgc3RvcmUgPSB0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QuZmlsdGVyKChkYXRhOiBhbnkpID0+IGRhdGEuY2hlY2tlZCk7XHJcbiAgICBjb25zdCBjaGFuZ2UgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHN0b3JlKSlcclxuXHJcbiAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKGNoYW5nZSlcclxuICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCd6b25lTGlzdCcpPy5zZXRWYWx1ZShbXSlcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICB0aGlzLnNlbGVjdEFsbCA9IHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5ldmVyeSgob2JqOiBhbnkpID0+IG9iai5jaGVja2VkKTtcclxuXHJcbiAgfVxyXG4gIGNyZWF0ZUZvcm0oKSB7XHJcbiAgICB0aGlzLmdhbGxlcnlGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGZyb21EYXRlOiBbZGF5anModGhpcy5zZWxlY3RlZERhdGVSYW5nZS5zdGFydERhdGUsIFwiREQtTU0tWVlZWVwiKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpXSxcclxuICAgICAgdG9EYXRlOiBbZGF5anModGhpcy5zZWxlY3RlZERhdGVSYW5nZS5lbmREYXRlLCBcIkRELU1NLVlZWVlcIikuZm9ybWF0KCdZWVlZLU1NLUREJyldLFxyXG4gICAgICB0eXBlOiAnY2hlY2tsaXN0JyxcclxuICAgICAgZmlsdGVydHlwZTogJ0NsdXN0ZXJzJyxcclxuICAgICAgY2hlY2tsaXN0TmFtZTogJycsXHJcbiAgICAgIHN0b3JlTGlzdDogW3RoaXMuc3RvcmVzXSxcclxuICAgICAgdXNlckxpc3Q6IFt0aGlzLnVzZXJMaXN0XSxcclxuICAgICAgYW5zd2VyVHlwZTogWydhbGwnXSxcclxuICAgICAgdmlld0ZsYWc6IFtmYWxzZV0sXHJcbiAgICAgIHZpZXdSZWRvOiBbZmFsc2VdLFxyXG4gICAgICBjaGVja0xpc3RUeXBlOiBcImN1c3RvbVwiLFxyXG4gICAgICBzb3VyY2VDaGVja0xpc3RfaWQ6IFwiXCIsXHJcbiAgICAgIENsdXN0ZXJMaXN0OiBbdGhpcy5ncm91cHNdLFxyXG4gICAgICBUZWFtc0xpc3Q6IFt0aGlzLlRlYW1zTGlzdF0sXHJcbiAgICAgIGNoZWNrTGlzdERlc2NyaXB0aW9uOiBcIlwiLFxyXG4gICAgICBmaWx0ZXI6IFwiXCIsXHJcbiAgICAgIHpvbmVMaXN0OiBbdGhpcy56b25lTGlzdF1cclxuICAgIH0pXHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlKVxyXG5cclxuICB9XHJcblxyXG4gIGRhdGVjaGFuZ2UoZXZlbnQ6IFRpbWVQZXJpb2QpIHtcclxuICAgIGlmICghZXZlbnQuZW5kRGF0ZSB8fCAhZXZlbnQuc3RhcnREYXRlKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy5yZW1vdmVRdWVyeVBhcmFtcygpXHJcbiAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbigpO1xyXG4gICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2Zyb21EYXRlJyk/LnNldFZhbHVlKGV2ZW50LnN0YXJ0RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKSlcclxuICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCd0b0RhdGUnKT8uc2V0VmFsdWUoZXZlbnQuZW5kRGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKSlcclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0U3RvcmVzbGlzdCh7IGNsaWVudElkOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LCBjbHVzdGVyczogdGhpcy5ncm91cHMsIGNpdHk6IFtdIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHJlcy5kYXRhLnN0b3Jlc0RhdGE7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlcyA9IHJlcy5kYXRhLnN0b3Jlc0RhdGFcclxuICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUodGhpcy5zdG9yZUxpc3QpXHJcbiAgICAgICAgICBpZiAodGhpcy5xdWVyeVBhcmFtcy5jaGVja2xpc3RUeXBlID09ICd0YXNrJyB8fCB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICd0YXNrJykge1xyXG4gICAgICAgICAgICB0aGlzLmdldEFsbFRhc2tzKGZhbHNlKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRBbGxDaGVja0xpc3RzKGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMucXVlcnlQYXJhbXMuY2hlY2tsaXN0VHlwZSA9PSAndGFzaycgfHwgdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlID09PSAndGFzaycpIHtcclxuICAgICAgICAgIHRoaXMuZ2V0QWxsVGFza3MoZmFsc2UpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZ2V0QWxsQ2hlY2tMaXN0cyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICB9XHJcbiAgZ2V0QWxsVXNlcnMoKSB7XHJcbiAgICBsZXQgdGVhbXNMaXN0ID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5UZWFtc0xpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEudGVhbU5hbWUpXHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldHVzZXJzKHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsIHRlYW1zOiB0ZWFtc0xpc3QgfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW1zLnVzZXJFbWFpbCkge1xyXG4gICAgICAgICAgICBsZXQgZ2V0dXNlciA9IHJlcy5kYXRhLmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZS51c2VyRW1haWwgPT09IHRoaXMucXVlcnlQYXJhbXMudXNlckVtYWlsKVxyXG4gICAgICAgICAgICB0aGlzLnVzZXJMaXN0ID0gZ2V0dXNlcjtcclxuICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3VzZXJMaXN0Jyk/LnNldFZhbHVlKHRoaXMudXNlckxpc3QpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW1zLmNoZWNrbGlzdFR5cGUgPT0gJ3Rhc2snKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRBbGxUYXNrcyh0cnVlKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0QWxsQ2hlY2tMaXN0cyh0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy51c2VyTGlzdCA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgndXNlckxpc3QnKT8uc2V0VmFsdWUodGhpcy51c2VyTGlzdClcclxuICAgICAgICAgICAgaWYgKHRoaXMucXVlcnlQYXJhbXMuY2hlY2tsaXN0VHlwZSA9PSAndGFzaycpIHtcclxuICAgICAgICAgICAgICB0aGlzLmdldEFsbFRhc2tzKHRydWUpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRBbGxDaGVja0xpc3RzKHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuXHJcblxyXG5cclxuICB9XHJcbiAgZ2V0QWxsU3RvcmVzKCkge1xyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRTdG9yZXNsaXN0KHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsIGNsdXN0ZXJzOiB0aGlzLmdyb3VwcywgY2l0eTogW10gfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gcmVzLmRhdGEuc3RvcmVzRGF0YTtcclxuICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW1zLnN0b3JlSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3VzZXJMaXN0Jyk/LnNldFZhbHVlKFtdKVxyXG4gICAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHJlcy5kYXRhLnN0b3Jlc0RhdGE7XHJcbiAgICAgICAgICAgIGxldCBnZXRzdG9yZSA9IHRoaXMuc3RvcmVMaXN0LmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZS5zdG9yZUlkID09PSB0aGlzLnF1ZXJ5UGFyYW1zLnN0b3JlSWQpXHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmVzID0gZ2V0c3RvcmVcclxuICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZSh0aGlzLnN0b3JlcylcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW1zLmNoZWNrbGlzdFR5cGUgPT0gJ3Rhc2snKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRBbGxUYXNrcyh0cnVlKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0QWxsQ2hlY2tMaXN0cyh0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnF1ZXJ5UGFyYW1zLnVzZXJFbWFpbCkge1xyXG4gICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKFtdKVxyXG4gICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnZmlsdGVydHlwZScpPy5zZXRWYWx1ZSgnVGVhbXMnKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZXMgPSByZXMuZGF0YS5zdG9yZXNEYXRhXHJcbiAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUodGhpcy5zdG9yZUxpc3QpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW1zLmNoZWNrbGlzdFR5cGUgPT0gJ3Rhc2snKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRBbGxUYXNrcyh0cnVlKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0QWxsQ2hlY2tMaXN0cyh0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IFtdO1xyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZSxcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuXHJcbiAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLnZpZXdsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZSxcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEFsbENoZWNrTGlzdHModHlwZTogYW55KSB7XHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5zdG9yZXM/Lm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnN0b3JlSWQpXHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBmcm9tRGF0ZTogdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2Zyb21EYXRlJyk/LnZhbHVlLFxyXG4gICAgICB0b0RhdGU6IHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCd0b0RhdGUnKT8udmFsdWUsXHJcbiAgICAgIHN0b3JlSWQ6IHN0b3JlcyxcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycz8uY2xpZW50LFxyXG4gICAgICBzb3J0Q29sdW1uTmFtZTogXCJjaGVja0xpc3ROYW1lXCIsXHJcbiAgICAgIHNvcnRCeTogMVxyXG4gICAgfVxyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRDaGVja2xpc3RzKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdHMgPSByZXMuZGF0YS5jaGVja2xpc3REYXRhXHJcbiAgICAgICAgICBpZiAodGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCA9PT0gXCI1OVwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tsaXN0cyA9IFsuLi50aGlzLmNoZWNrbGlzdHMsIC4uLlt7XHJcbiAgICAgICAgICAgICAgXCJfaWRcIjogXCI2NzQ2Yzg4OWY1YWRjM2IzMmYwZDdlNTdcIixcclxuICAgICAgICAgICAgICBcInNvdXJjZUNoZWNrTGlzdF9pZFwiOiBcImN1c3RvbWVydHJpYWxcIixcclxuICAgICAgICAgICAgICBcImNoZWNrTGlzdE5hbWVcIjogXCJDdXN0b21lciBUcmlhbFwiLFxyXG4gICAgICAgICAgICAgIFwiY2hlY2tMaXN0VHlwZVwiOiBcIkFJXCIsXHJcbiAgICAgICAgICAgICAgXCJjcmVhdGVkQnlOYW1lXCI6IFwiQmVqYW5cIixcclxuICAgICAgICAgICAgICBcInN0b3JlQ291bnRcIjogMCxcclxuICAgICAgICAgICAgICBcInNjaGVkdWxlUmVwZWF0ZWRUeXBlXCI6IFwiZGFpbHlcIixcclxuICAgICAgICAgICAgICBcInNjaGVkdWxlU3RhcnRUaW1lXCI6IFwiMTA6MDAgQU1cIixcclxuICAgICAgICAgICAgICBcInNjaGVkdWxlRW5kVGltZVwiOiBcIjEwOjAwIFBNXCIsXHJcbiAgICAgICAgICAgICAgXCJjaGVja0xpc3REZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgIFwicHVibGlzaFwiOiB0cnVlXHJcbiAgICAgICAgICAgIH1dXVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5xdWVyeVBhcmFtcy5zb3VyY2VDaGVja0xpc3RfaWQgJiYgdGhpcy5xdWVyeVBhcmFtcy5jaGVja2xpc3RUeXBlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3NvdXJjZUNoZWNrTGlzdF9pZCcpPy5zZXRWYWx1ZSh0aGlzLnF1ZXJ5UGFyYW1zLnNvdXJjZUNoZWNrTGlzdF9pZClcclxuICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnY2hlY2tMaXN0VHlwZScpPy5zZXRWYWx1ZSh0aGlzLnF1ZXJ5UGFyYW1zLmNoZWNrbGlzdFR5cGUpXHJcbiAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3R5cGUnKT8uc2V0VmFsdWUoXCJjaGVja2xpc3RcIilcclxuXHJcbiAgICAgICAgICAgICAgbGV0IGdldGNoZWNrbGlzdCA9IHRoaXMuY2hlY2tsaXN0cy5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGUuc291cmNlQ2hlY2tMaXN0X2lkID09PSB0aGlzLnF1ZXJ5UGFyYW1zLnNvdXJjZUNoZWNrTGlzdF9pZClcclxuICAgICAgICAgICAgICBpZiAoZ2V0Y2hlY2tsaXN0ICYmIGdldGNoZWNrbGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Y2hlY2tsaXN0WzBdLmNoZWNrTGlzdFR5cGUgPT09IFwiQUlcIikge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNob3dmbGFnID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja2xpc3ROYW1lJyk/LnNldFZhbHVlKGdldGNoZWNrbGlzdFswXT8uY2hlY2tMaXN0TmFtZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja0xpc3REZXNjcmlwdGlvbicpPy5zZXRWYWx1ZShnZXRjaGVja2xpc3RbMF0/LmNoZWNrTGlzdERlc2NyaXB0aW9uKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja2xpc3ROYW1lID0gZ2V0Y2hlY2tsaXN0WzBdPy5jaGVja0xpc3ROYW1lXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW1zLmNoZWNrbGlzdFR5cGUgPT09ICdzdG9yZW9wZW5hbmRjbG9zZScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ID0gJ3N0b3Jlb3BlbmFuZGNsb3NlJ1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZU9wZW5jbG9zZWxpc3QoZmFsc2UpXHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmJveGltYWdlQ2hlY2tsaXN0LmluY2x1ZGVzKHRoaXMucXVlcnlQYXJhbXMuY2hlY2tsaXN0VHlwZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ID0gdGhpcy5xdWVyeVBhcmFtcy5jaGVja2xpc3RUeXBlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXVlYWxlcnRsaXN0KGZhbHNlKVxyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52aWRlb0NoZWNrbGlzdC5pbmNsdWRlcyh0aGlzLnF1ZXJ5UGFyYW1zLmNoZWNrbGlzdFR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCA9IHRoaXMucXVlcnlQYXJhbXMuY2hlY2tsaXN0VHlwZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tZXJ1bmF0dGVuZGVkbGlzdChmYWxzZSlcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW1hZ2VDaGVja2xpc3QuaW5jbHVkZXModGhpcy5xdWVyeVBhcmFtcy5jaGVja2xpc3RUeXBlKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLnF1ZXJ5UGFyYW1zLmNoZWNrbGlzdFR5cGU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldG1vYmlsZVVzYWdlRGF0YWxpc3QoZmFsc2UpXHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUgJiYgdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja0xpc3RUeXBlICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnY2hlY2tMaXN0VHlwZScpPy5zZXRWYWx1ZSh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrTGlzdFR5cGUpXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja0xpc3RUeXBlJyk/LnNldFZhbHVlKHRoaXMuY2hlY2tsaXN0c1swXT8uY2hlY2tMaXN0VHlwZSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUgJiYgdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZ2V0Y2hlY2tsaXN0ID0gdGhpcy5jaGVja2xpc3RzLmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZS5jaGVja0xpc3ROYW1lID09PSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUpXHJcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Y2hlY2tsaXN0ICYmIGdldGNoZWNrbGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChnZXRjaGVja2xpc3RbMF0uY2hlY2tMaXN0VHlwZSA9PT0gXCJBSVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93ZmxhZyA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2ZpbHRlcnR5cGUnKT8uc2V0VmFsdWUoZ2V0Y2hlY2tsaXN0WzBdPy5jb3ZlcmFnZSA9PT0gJ3VzZXInID8gXCJUZWFtc1wiIDogXCJDbHVzdGVyc1wiKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnY2hlY2tMaXN0VHlwZScpPy5zZXRWYWx1ZShnZXRjaGVja2xpc3RbMF0/LmNoZWNrTGlzdFR5cGUpXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja2xpc3ROYW1lJyk/LnNldFZhbHVlKGdldGNoZWNrbGlzdFswXT8uY2hlY2tMaXN0TmFtZSlcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja2xpc3ROYW1lID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzb3VyY2VDaGVja0xpc3RfaWQnKT8uc2V0VmFsdWUoZ2V0Y2hlY2tsaXN0WzBdPy5zb3VyY2VDaGVja0xpc3RfaWQpXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja0xpc3REZXNjcmlwdGlvbicpPy5zZXRWYWx1ZShnZXRjaGVja2xpc3RbMF0/LmNoZWNrTGlzdERlc2NyaXB0aW9uKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2ZpbHRlcnR5cGUnKT8uc2V0VmFsdWUodGhpcy5jaGVja2xpc3RzWzBdPy5jb3ZlcmFnZSA9PT0gJ3VzZXInID8gXCJUZWFtc1wiIDogXCJDbHVzdGVyc1wiKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnY2hlY2tMaXN0VHlwZScpPy5zZXRWYWx1ZSh0aGlzLmNoZWNrbGlzdHNbMF0/LmNoZWNrTGlzdFR5cGUpXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja2xpc3ROYW1lJyk/LnNldFZhbHVlKHRoaXMuY2hlY2tsaXN0c1swXT8uY2hlY2tMaXN0TmFtZSlcclxuICAgICAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrTGlzdERlc2NyaXB0aW9uJyk/LnNldFZhbHVlKHRoaXMuY2hlY2tsaXN0c1swXT8uY2hlY2tMaXN0RGVzY3JpcHRpb24pXHJcblxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrbGlzdE5hbWUgPSB0aGlzLmNoZWNrbGlzdHNbMF0/LmNoZWNrTGlzdE5hbWVcclxuICAgICAgICAgICAgICAgICAgbGV0IGdldGNoZWNrbGlzdCA9IHRoaXMuY2hlY2tsaXN0cy5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGUuY2hlY2tMaXN0TmFtZSA9PT0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lKVxyXG4gICAgICAgICAgICAgICAgICBpZiAoZ2V0Y2hlY2tsaXN0ICYmIGdldGNoZWNrbGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdldGNoZWNrbGlzdFswXS5jaGVja0xpc3RUeXBlID09PSBcIkFJXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd2ZsYWcgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrTGlzdERlc2NyaXB0aW9uID0gZ2V0Y2hlY2tsaXN0WzBdPy5jaGVja0xpc3REZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja0xpc3REZXNjcmlwdGlvbicpPy5zZXRWYWx1ZShnZXRjaGVja2xpc3RbMF0/LmNoZWNrTGlzdERlc2NyaXB0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzb3VyY2VDaGVja0xpc3RfaWQnKT8uc2V0VmFsdWUoZ2V0Y2hlY2tsaXN0WzBdPy5zb3VyY2VDaGVja0xpc3RfaWQpXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnZmlsdGVydHlwZScpPy5zZXRWYWx1ZSh0aGlzLmNoZWNrbGlzdHNbMF0/LmNvdmVyYWdlID09PSAndXNlcicgPyBcIlRlYW1zXCIgOiBcIkNsdXN0ZXJzXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnY2hlY2tMaXN0VHlwZScpPy5zZXRWYWx1ZSh0aGlzLmNoZWNrbGlzdHNbMF0/LmNoZWNrTGlzdFR5cGUpXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGVja2xpc3RzWzBdLmNoZWNrTGlzdFR5cGUgPT09IFwiQUlcIikge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNob3dmbGFnID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja2xpc3ROYW1lJyk/LnNldFZhbHVlKHRoaXMuY2hlY2tsaXN0c1swXT8uY2hlY2tMaXN0TmFtZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja0xpc3REZXNjcmlwdGlvbicpPy5zZXRWYWx1ZSh0aGlzLmNoZWNrbGlzdHNbMF0/LmNoZWNrTGlzdERlc2NyaXB0aW9uKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja2xpc3ROYW1lID0gdGhpcy5jaGVja2xpc3RzWzBdPy5jaGVja0xpc3ROYW1lXHJcbiAgICAgICAgICAgICAgICBsZXQgZ2V0Y2hlY2tsaXN0ID0gdGhpcy5jaGVja2xpc3RzLmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZS5jaGVja0xpc3ROYW1lID09PSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUpXHJcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Y2hlY2tsaXN0ICYmIGdldGNoZWNrbGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0RGVzY3JpcHRpb24gPSBnZXRjaGVja2xpc3RbMF0/LmNoZWNrTGlzdERlc2NyaXB0aW9uXHJcblxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc291cmNlQ2hlY2tMaXN0X2lkJyk/LnNldFZhbHVlKGdldGNoZWNrbGlzdFswXT8uc291cmNlQ2hlY2tMaXN0X2lkKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKClcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCA9PT0gJ3N0b3Jlb3BlbmFuZGNsb3NlJykge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ID0gJ3N0b3Jlb3BlbmFuZGNsb3NlJ1xyXG4gICAgICAgICAgICAgIHRoaXMuc3RvcmVPcGVuY2xvc2VsaXN0KGZhbHNlKVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYm94aW1hZ2VDaGVja2xpc3QuaW5jbHVkZXModGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3pvbmVMaXN0Jyk/LnNldFZhbHVlKFtdKVxyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWRcclxuICAgICAgICAgICAgICB0aGlzLnF1ZXVlYWxlcnRsaXN0KGZhbHNlKVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW1hZ2VDaGVja2xpc3QuaW5jbHVkZXModGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZDtcclxuICAgICAgICAgICAgICB0aGlzLmdldG1vYmlsZVVzYWdlRGF0YWxpc3QoZmFsc2UpXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52aWRlb0NoZWNrbGlzdC5pbmNsdWRlcyh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdCA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkO1xyXG4gICAgICAgICAgICAgIHRoaXMuY3VzdG9tZXJ1bmF0dGVuZGVkbGlzdChmYWxzZSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdCA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudHlwZSA9PT0gJ2NoZWNrbGlzdCcgPyBcImN1c3RvbVwiIDogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlO1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlID09PSAnY2hlY2tsaXN0Jykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlID09PSAnQ2x1c3RlcnMnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3VzZXJMaXN0Jyk/LnNldFZhbHVlKFtdKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ZHJvcGRvd24oKTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKFtdKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlckxpc3Rkcm9wZG93bigpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0b3JlTGlzdGRyb3Bkb3duVGFzaygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdHMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja2xpc3ROYW1lJyk/LnNldFZhbHVlKCcnKVxyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlXHJcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGVja2xpc3RzID0gW107XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgcmVtb3ZlUXVlcnlQYXJhbXMoKSB7XHJcbiAgICB0aGlzLnF1ZXJ5UGFyYW1zID0ge31cclxuICAgIGNvbnN0IHVybFdpdGhvdXRQYXJhbXMgPSB0aGlzLmxvY2F0aW9uLnBhdGgoKS5zcGxpdCgnPycpWzBdO1xyXG4gICAgdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodXJsV2l0aG91dFBhcmFtcyk7XHJcbiAgfVxyXG4gIG9uVGVhbXNTZWxlY3QoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ1RlYW1zTGlzdCcpPy5zZXRWYWx1ZShldmVudClcclxuICAgIGxldCB0ZWFtc0xpc3QgPSBldmVudC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS50ZWFtTmFtZSlcclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0dXNlcnMoeyBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCwgdGVhbXM6IHRlYW1zTGlzdCB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy51c2VyTGlzdCA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3VzZXJMaXN0Jyk/LnNldFZhbHVlKHRoaXMudXNlckxpc3QpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBvbmdyb3VwU2VsZWN0KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMucmVtb3ZlUXVlcnlQYXJhbXMoKVxyXG4gICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ0NsdXN0ZXJMaXN0Jyk/LnNldFZhbHVlKGV2ZW50KVxyXG4gICAgdGhpcy5ncm91cHMgPSBldmVudC5tYXAoKGVsOiBhbnkpID0+IGVsLmdyb3VwTmFtZSlcclxuICAgIC8vIHRoaXMuZ2V0QWxsU3RvcmVzKClcclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0U3RvcmVzbGlzdCh7IGNsaWVudElkOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LCBjbHVzdGVyczogdGhpcy5ncm91cHMsIGNpdHk6IFtdIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHJlcy5kYXRhLnN0b3Jlc0RhdGE7XHJcbiAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKHRoaXMuc3RvcmVMaXN0KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICBmaWx0ZXJDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5yZW1vdmVRdWVyeVBhcmFtcygpXHJcbiAgICBpZiAoZXZlbnQgPT09ICdUZWFtcycpIHtcclxuICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlcycpPy5zZXRWYWx1ZShbXSlcclxuICAgICAgbGV0IHRlYW1zTGlzdCA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuVGVhbXNMaXN0Lm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnRlYW1OYW1lKVxyXG4gICAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldHVzZXJzKHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsIHRlYW1zOiB0ZWFtc0xpc3QgfSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlckxpc3QgPSByZXMuZGF0YVxyXG4gICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgndXNlckxpc3QnKT8uc2V0VmFsdWUocmVzLmRhdGEpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3VzZXJMaXN0Jyk/LnNldFZhbHVlKFtdKVxyXG4gICAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldFN0b3Jlc2xpc3QoeyBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCwgY2x1c3RlcnM6IHRoaXMuZ3JvdXBzLCBjaXR5OiBbXSB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSByZXMuZGF0YS5zdG9yZXNEYXRhXHJcbiAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUocmVzLmRhdGEuc3RvcmVzRGF0YSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnZmlsdGVydHlwZScpPy5zZXRWYWx1ZShldmVudClcclxuICB9XHJcbiAgb256b25lU2VsZWN0KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMucmVtb3ZlUXVlcnlQYXJhbXMoKVxyXG4gICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3pvbmVMaXN0Jyk/LnNldFZhbHVlKGV2ZW50KVxyXG4gIH1cclxuICBhcHByb3ZlRmlsdGVyQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0U3RvcmVzbGlzdCh7IGNsaWVudElkOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LCBjbHVzdGVyczogdGhpcy5ncm91cHMsIGNpdHk6IFtdIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHJlcy5kYXRhLnN0b3Jlc0RhdGFcclxuICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUocmVzLmRhdGEuc3RvcmVzRGF0YSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIG9uU3RvcmVTZWxlY3QoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5yZW1vdmVRdWVyeVBhcmFtcygpXHJcbiAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnem9uZUxpc3QnKT8uc2V0VmFsdWUoW10pXHJcbiAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKGV2ZW50KVxyXG5cclxuICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5mb3JFYWNoKChzdG9yZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGlzU3RvcmVTZWxlY3RlZCA9IGV2ZW50LnNvbWUoKHNlbGVjdGVkU3RvcmU6IGFueSkgPT4gc2VsZWN0ZWRTdG9yZS5zdG9yZUlkID09PSBzdG9yZS5zdG9yZUlkKTtcclxuICAgICAgaWYgKGlzU3RvcmVTZWxlY3RlZCkge1xyXG4gICAgICAgIHN0b3JlLmNoZWNrZWQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHN0b3JlLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNlbGVjdEFsbCA9IHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5ldmVyeSgob2JqOiBhbnkpID0+IG9iai5jaGVja2VkKTtcclxuICAgIGlmICh0aGlzLnNlbGVjdCA9PT0gJ3F1ZXVlYWxlcnQnKSB7XHJcbiAgICAgIHRoaXMuZ2V0em9uZXRsaXN0KClcclxuICAgIH1cclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgb25Vc2VyU2VsZWN0KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMucmVtb3ZlUXVlcnlQYXJhbXMoKVxyXG4gICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3VzZXJMaXN0Jyk/LnNldFZhbHVlKGV2ZW50KVxyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgc3RvcmVMaXN0ZHJvcGRvd25UYXNrKCkge1xyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRTdG9yZXNsaXN0KHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsIGNsdXN0ZXJzOiB0aGlzLmdyb3VwcywgY2l0eTogW10gfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIGxldCBzdG9yZXMgPSByZXMuZGF0YS5zdG9yZXNEYXRhLm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnN0b3JlSWQpXHJcbiAgICAgICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgICAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICAgICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlLCAvLyBbXCJjdXN0b21cIiwgXCJBSVwiXVxyXG4gICAgICAgICAgICBcImNoZWNrbGlzdE5hbWVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lLFxyXG4gICAgICAgICAgICBcImNoZWNrbGlzdElkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkLFxyXG4gICAgICAgICAgICBcInN0b3JlSWRcIjogc3RvcmVzLFxyXG4gICAgICAgICAgICBcImFuc3dlclR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5hbnN3ZXJUeXBlLCAvL1tcImRlc2NyaXB0aXZlXCIsXCJ5ZXMvbm9cIixcIm11bHRpcGxlY2hvaWNlc2luZ2xlXCIsXCJtdWx0aXBsZWNob2ljZW11bHRpcGxlXCIsXCJpbWFnZVwiLFwidmlkZW9cIixcImRlc2NyaXB0aXZlSW1hZ2VcIixcIm11bHRpcGxlSW1hZ2VcIl1cclxuICAgICAgICAgICAgXCJ2aWV3RmxhZ1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdGbGFnLC8vW3RydWUsIGZhbHNlXVxyXG4gICAgICAgICAgICBcInZpZXdSZWRvXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld1JlZG8sIC8vW3RydWUsIGZhbHNlXVxyXG4gICAgICAgICAgICBcImZpbHRlclwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlcixcclxuICAgICAgICAgICAgXCJxdWVzdGlvbnNcIjogdGhpcy5zZWxlY3RlZFNlY3Rpb24ubGVuZ3RoID4gMCAmJiB0aGlzLnNlbGVjdGVkU2VjdGlvblswXS5xdWVzdGlvbnMubGVuZ3RoID4gMCA/IHRoaXMuc2VsZWN0ZWRTZWN0aW9uWzBdLnF1ZXN0aW9uc1swXSA6IFwiXCJcclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldFF1ZXN0aW9ucyhvYmopPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSk/LnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZXMgPSByZXMuZGF0YS5zdG9yZXNEZXRhaWxzXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHJlcy5kYXRhLnN0b3Jlc0RldGFpbHNcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0dGFza1FBKGZhbHNlKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXR0YXNrUUEoZmFsc2UpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB1c2VyTGlzdGRyb3Bkb3duVGFzaygpIHtcclxuICAgIGxldCB0ZWFtc0xpc3QgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLlRlYW1zTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS50ZWFtTmFtZSlcclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0dXNlcnMoeyBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCwgdGVhbXM6IHRlYW1zTGlzdCB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3VzZXJMaXN0Jyk/LnNldFZhbHVlKHJlcy5kYXRhKVxyXG4gICAgICAgICAgbGV0IHVzZXJzID0gcmVzLmRhdGEubWFwKChkYXRhOiBhbnkpID0+IGRhdGEudXNlckVtYWlsKVxyXG4gICAgICAgICAgbGV0IG9iaiA9IHtcclxuICAgICAgICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICAgICAgICBcInRvRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnRvRGF0ZSxcclxuICAgICAgICAgICAgXCJDaGVja2xpc3RUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tMaXN0VHlwZSwgLy8gW1wiY3VzdG9tXCIsIFwiQUlcIl1cclxuICAgICAgICAgICAgXCJjaGVja2xpc3ROYW1lXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSxcclxuICAgICAgICAgICAgXCJjaGVja2xpc3RJZFwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCxcclxuICAgICAgICAgICAgXCJmaWx0ZXJ0eXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZmlsdGVydHlwZSxcclxuICAgICAgICAgICAgXCJzdG9yZUlkXCI6IFtdLFxyXG4gICAgICAgICAgICBcInVzZXJFbWFpbFwiOiB1c2VycyxcclxuICAgICAgICAgICAgXCJhbnN3ZXJUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuYW5zd2VyVHlwZSwgLy9bXCJkZXNjcmlwdGl2ZVwiLFwieWVzL25vXCIsXCJtdWx0aXBsZWNob2ljZXNpbmdsZVwiLFwibXVsdGlwbGVjaG9pY2VtdWx0aXBsZVwiLFwiaW1hZ2VcIixcInZpZGVvXCIsXCJkZXNjcmlwdGl2ZUltYWdlXCIsXCJtdWx0aXBsZUltYWdlXCJdXHJcbiAgICAgICAgICAgIFwidmlld0ZsYWdcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS52aWV3RmxhZywvL1t0cnVlLCBmYWxzZV1cclxuICAgICAgICAgICAgXCJ2aWV3UmVkb1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdSZWRvLC8vW3RydWUsIGZhbHNlXVxyXG4gICAgICAgICAgICBcInF1ZXN0aW9uc1wiOiB0aGlzLnNlbGVjdGVkU2VjdGlvbi5sZW5ndGggPiAwICYmIHRoaXMuc2VsZWN0ZWRTZWN0aW9uWzBdLnF1ZXN0aW9ucy5sZW5ndGggPiAwID8gdGhpcy5zZWxlY3RlZFNlY3Rpb25bMF0ucXVlc3Rpb25zWzBdIDogXCJcIixcclxuICAgICAgICAgICAgXCJmaWx0ZXJcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXIsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldFF1ZXN0aW9ucyhvYmopPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSk/LnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyTGlzdCA9IHJlcy5kYXRhLnN0b3Jlc0RldGFpbHNcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCd1c2VyTGlzdCcpPy5zZXRWYWx1ZSh0aGlzLnVzZXJMaXN0KVxyXG4gICAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZShbXSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gW11cclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0dGFza1FBKGZhbHNlKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXR0YXNrUUEoZmFsc2UpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIHVzZXJMaXN0ZHJvcGRvd24oKSB7XHJcbiAgICBsZXQgdGVhbXNMaXN0ID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5UZWFtc0xpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEudGVhbU5hbWUpXHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldHVzZXJzKHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsIHRlYW1zOiB0ZWFtc0xpc3QgfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIC8vIGlmKHRoaXMucXVlcnlQYXJhbXMudXNlckVtYWlsKXtcclxuICAgICAgICAgIC8vICAgbGV0IGdldHVzZXIgPSByZXMuZGF0YS5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGUudXNlckVtYWlsID09PSB0aGlzLnF1ZXJ5UGFyYW1zLnVzZXJFbWFpbClcclxuICAgICAgICAgIC8vICAgdGhpcy51c2VyTGlzdCA9IGdldHVzZXI7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCd1c2VyTGlzdCcpPy5zZXRWYWx1ZSh0aGlzLnVzZXJMaXN0KVxyXG4gICAgICAgICAgLy8gfWVsc2V7XHJcbiAgICAgICAgICAvLyB0aGlzLnVzZXJMaXN0ID0gIHJlcy5kYXRhXHJcbiAgICAgICAgICAvLyB0aGlzLmdhbGxlcnlGb3JtLmdldCgndXNlckxpc3QnKT8uc2V0VmFsdWUocmVzLmRhdGEpXHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICBsZXQgdXNlcnMgPSByZXMuZGF0YS5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS51c2VyRW1haWwpXHJcbiAgICAgICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgICAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICAgICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja0xpc3RUeXBlLCAvLyBbXCJjdXN0b21cIiwgXCJBSVwiXVxyXG4gICAgICAgICAgICBcImNoZWNrbGlzdE5hbWVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lLFxyXG4gICAgICAgICAgICBcImNoZWNrbGlzdElkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkLFxyXG4gICAgICAgICAgICBcImZpbHRlcnR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlLFxyXG4gICAgICAgICAgICBcInN0b3JlSWRcIjogW10sXHJcbiAgICAgICAgICAgIFwidXNlckVtYWlsXCI6IHVzZXJzLFxyXG4gICAgICAgICAgICBcImFuc3dlclR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5hbnN3ZXJUeXBlLCAvL1tcImRlc2NyaXB0aXZlXCIsXCJ5ZXMvbm9cIixcIm11bHRpcGxlY2hvaWNlc2luZ2xlXCIsXCJtdWx0aXBsZWNob2ljZW11bHRpcGxlXCIsXCJpbWFnZVwiLFwidmlkZW9cIixcImRlc2NyaXB0aXZlSW1hZ2VcIixcIm11bHRpcGxlSW1hZ2VcIl1cclxuICAgICAgICAgICAgXCJ2aWV3RmxhZ1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdGbGFnLC8vW3RydWUsIGZhbHNlXVxyXG4gICAgICAgICAgICBcInZpZXdSZWRvXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld1JlZG8sLy9bdHJ1ZSwgZmFsc2VdXHJcbiAgICAgICAgICAgIFwicXVlc3Rpb25zXCI6IHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxlbmd0aCA+IDAgJiYgdGhpcy5zZWxlY3RlZFNlY3Rpb25bMF0ucXVlc3Rpb25zLmxlbmd0aCA+IDAgPyB0aGlzLnNlbGVjdGVkU2VjdGlvblswXS5xdWVzdGlvbnNbMF0gOiBcIlwiLFxyXG4gICAgICAgICAgICBcImZpbHRlclwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlcixcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0Y2hlY2tsaXN0KG9iaik/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJMaXN0ID0gcmVzLmRhdGEuc3RvcmVzRGV0YWlsc1xyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3VzZXJMaXN0Jyk/LnNldFZhbHVlKHRoaXMudXNlckxpc3QpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKFtdKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSBbXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDaGVja2xpc3RRQShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2hlY2tsaXN0UUEoZmFsc2UpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIHN0b3JlTGlzdGRyb3Bkb3duKCkge1xyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRTdG9yZXNsaXN0KHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsIGNsdXN0ZXJzOiB0aGlzLmdyb3VwcywgY2l0eTogW10gfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIGxldCBzdG9yZXMgPSByZXMuZGF0YS5zdG9yZXNEYXRhLm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnN0b3JlSWQpXHJcbiAgICAgICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgICAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICAgICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja0xpc3RUeXBlLCAvLyBbXCJjdXN0b21cIiwgXCJBSVwiXVxyXG4gICAgICAgICAgICBcImNoZWNrbGlzdE5hbWVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lLFxyXG4gICAgICAgICAgICBcImNoZWNrbGlzdElkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkLFxyXG4gICAgICAgICAgICBcImZpbHRlcnR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlLFxyXG4gICAgICAgICAgICBcInN0b3JlSWRcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlID09PSAnQ2x1c3RlcnMnID8gc3RvcmVzIDogW10sXHJcbiAgICAgICAgICAgIFwidXNlckVtYWlsXCI6IFtdLFxyXG4gICAgICAgICAgICBcImFuc3dlclR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5hbnN3ZXJUeXBlLCAvL1tcImRlc2NyaXB0aXZlXCIsXCJ5ZXMvbm9cIixcIm11bHRpcGxlY2hvaWNlc2luZ2xlXCIsXCJtdWx0aXBsZWNob2ljZW11bHRpcGxlXCIsXCJpbWFnZVwiLFwidmlkZW9cIixcImRlc2NyaXB0aXZlSW1hZ2VcIixcIm11bHRpcGxlSW1hZ2VcIl1cclxuICAgICAgICAgICAgXCJ2aWV3RmxhZ1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdGbGFnLC8vW3RydWUsIGZhbHNlXVxyXG4gICAgICAgICAgICBcInZpZXdSZWRvXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld1JlZG8sLy9bdHJ1ZSwgZmFsc2VdXHJcbiAgICAgICAgICAgIFwicXVlc3Rpb25zXCI6IHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxlbmd0aCA+IDAgJiYgdGhpcy5zZWxlY3RlZFNlY3Rpb25bMF0ucXVlc3Rpb25zLmxlbmd0aCA+IDAgPyB0aGlzLnNlbGVjdGVkU2VjdGlvblswXS5xdWVzdGlvbnNbMF0gOiBcIlwiLFxyXG4gICAgICAgICAgICBcImZpbHRlclwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlcixcclxuICAgICAgICAgICAgXCJhcHByb3ZlRmlsdGVyXCI6IHRoaXMuYXBwcm92ZUZpbHRlclxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50cmF4U2VydmljZS5nZXRjaGVja2xpc3Qob2JqKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmVzID0gcmVzLmRhdGEuc3RvcmVzRGV0YWlsc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSByZXMuZGF0YS5zdG9yZXNEZXRhaWxzXHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKHRoaXMuc3RvcmVzKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDaGVja2xpc3RRQShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2hlY2tsaXN0UUEoZmFsc2UpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIHNlbGVjdCA9ICdjdXN0b20nXHJcbiAgb25TdWJtaXQoKSB7XHJcbiAgICAgICBpZiAodGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCA9PT0gXCI0NjRcIikge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVxdWVzdFBlcm1pc3Npb24oKVxyXG4gICAgICAgfVxyXG4gICAgdGhpcy5vZmZzZXQgPSAxXHJcbiAgICB0aGlzLmNoZWNrbGlzdE5hbWUgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWVcclxuICAgIHRoaXMuY2hlY2tMaXN0RGVzY3JpcHRpb24gPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrTGlzdERlc2NyaXB0aW9uXHJcbiAgICB0aGlzLnNob3dtdWx0aSA9IHRydWU7XHJcbiAgICB0aGlzLnNob3dzaW5nbGUgPSBmYWxzZVxyXG4gICAgdGhpcy5hbnN3ZXJGaWx0ZXIgPSBbXVxyXG4gICAgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkID09PSAnc3RvcmVvcGVuYW5kY2xvc2UnKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ID0gJ3N0b3Jlb3BlbmFuZGNsb3NlJ1xyXG4gICAgICB0aGlzLnN0b3JlT3BlbmNsb3NlbGlzdChmYWxzZSlcclxuICAgIH0gZWxzZSBpZiAodGhpcy5ib3hpbWFnZUNoZWNrbGlzdC5pbmNsdWRlcyh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCkpIHtcclxuICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZFxyXG4gICAgICB0aGlzLnF1ZXVlYWxlcnRsaXN0KGZhbHNlKVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmltYWdlQ2hlY2tsaXN0LmluY2x1ZGVzKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdCA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkO1xyXG4gICAgICB0aGlzLmdldG1vYmlsZVVzYWdlRGF0YWxpc3QoZmFsc2UpXHJcbiAgICB9IGVsc2UgaWYgKHRoaXMudmlkZW9DaGVja2xpc3QuaW5jbHVkZXModGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQ7XHJcbiAgICAgIHRoaXMuY3VzdG9tZXJ1bmF0dGVuZGVkbGlzdChmYWxzZSlcclxuICAgIH0gZWxzZSBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQgPT09ICdjdXN0b21lcnRyaWFsJykge1xyXG4gICAgICB0aGlzLnNlbGVjdCA9ICdjdXN0b21lcnRyaWFsJztcclxuICAgICAgdGhpcy5nZXRjdXN0b21lcnRyaWFsbGlzdCgpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdCA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudHlwZSA9PT0gJ2NoZWNrbGlzdCcgPyBcImN1c3RvbVwiIDogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlO1xyXG4gICAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlID09PSAnY2hlY2tsaXN0Jykge1xyXG4gICAgICAgIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlcnR5cGUgPT09ICdDbHVzdGVycycpIHtcclxuICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCd1c2VyTGlzdCcpPy5zZXRWYWx1ZShbXSlcclxuICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ZHJvcGRvd24oKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZShbXSlcclxuICAgICAgICAgIHRoaXMudXNlckxpc3Rkcm9wZG93bigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlID09PSAnQ2x1c3RlcnMnKSB7XHJcbiAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgndXNlckxpc3QnKT8uc2V0VmFsdWUoW10pXHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdGRyb3Bkb3duVGFzaygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKFtdKVxyXG4gICAgICAgICAgdGhpcy51c2VyTGlzdGRyb3Bkb3duVGFzaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvdzogbnVtYmVyID0gMDtcclxuICBhY2NvcmRpYW4oaW5kZXg6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuc2hvdyA9PSBpbmRleCkge1xyXG4gICAgICB0aGlzLnNob3cgPSAtMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvdyA9IGluZGV4O1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXR6b25ldGxpc3QoKSB7XHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCB6b25lID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS56b25lTGlzdD8ubGVuZ3RoID8gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS56b25lTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS52YWx1ZSkgOiBbXVxyXG4gICAgbGV0IG9iaiA9IHtcclxuICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcInRvRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnRvRGF0ZSxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJjbGllbnRJZFwiOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LFxyXG4gICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5zZWxlY3QsXHJcbiAgICAgIFwib2Zmc2V0XCI6IDAsXHJcbiAgICAgIFwibGltaXRcIjogMTAwMDAsXHJcbiAgICAgIFwidmlld0ltYWdlXCI6IGZhbHNlLFxyXG4gICAgICBcImNhdGVnb3J5XCI6IHpvbmVcclxuICAgIH1cclxuICAgIHRoaXMudHJheFNlcnZpY2UucXVldWVhbGVydGxpc3Qob2JqKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdCA9IHJlcy5kYXRhLmRhdGFcclxuICAgICAgICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5mb3JFYWNoKChzdG9yZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHN0b3JlLmNoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdEFsbCA9IHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5ldmVyeSgob2JqOiBhbnkpID0+IG9iai5jaGVja2VkKTtcclxuICAgICAgICAgIHRoaXMuem9uZUxpc3QgPSByZXMuZGF0YS56b25lc1xyXG4gICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3pvbmVMaXN0Jyk/LnNldFZhbHVlKHJlcy5kYXRhLnNlbGVjdGVkem9uZXMpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICB9XHJcbiAgcXVldWVhbGVydGxpc3QodHlwZTogYW55KSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgIHRoaXMudmlld2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2U7XHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCB6b25lID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS56b25lTGlzdD8ubGVuZ3RoID8gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS56b25lTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS52YWx1ZSkgOiBbXVxyXG4gICAgbGV0IG9iaiA9IHtcclxuICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcInRvRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnRvRGF0ZSxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJjbGllbnRJZFwiOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LFxyXG4gICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5zZWxlY3QsXHJcbiAgICAgIFwib2Zmc2V0XCI6IDAsXHJcbiAgICAgIFwibGltaXRcIjogMTAwMDAsXHJcbiAgICAgIFwidmlld0ltYWdlXCI6IGZhbHNlLFxyXG4gICAgICBcImNhdGVnb3J5XCI6IHpvbmVcclxuICAgIH1cclxuICAgIHRoaXMudHJheFNlcnZpY2UucXVldWVhbGVydGxpc3Qob2JqKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdCA9IHJlcy5kYXRhLmRhdGFcclxuICAgICAgICAgIHRoaXMuem9uZUxpc3QgPSByZXMuZGF0YS56b25lc1xyXG4gICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3pvbmVMaXN0Jyk/LnNldFZhbHVlKHJlcy5kYXRhLnNlbGVjdGVkem9uZXMpXHJcbiAgICAgICAgICB0aGlzLnN0b3JlcyA9IFtdXHJcbiAgICAgICAgICB0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuY2hlY2tlZCA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5zdG9yZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgc3RvcmVJZDogZWxlbWVudC5zdG9yZUlkLFxyXG4gICAgICAgICAgICAgIHN0b3JlTmFtZTogZWxlbWVudC5zdG9yZU5hbWVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMuc3RvcmVzID0gdGhpcy5zdG9yZXNcclxuICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUodGhpcy5zdG9yZXMpXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdEFsbCA9IHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5ldmVyeSgob2JqOiBhbnkpID0+IG9iai5jaGVja2VkKTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZVxyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnF1ZXVlYWxlcnR2aWV3KClcclxuXHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHN0b3JlT3BlbmNsb3NlbGlzdCh0eXBlOiBhbnkpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgdGhpcy52aWV3bG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnZpZXdub0RhdGEgPSBmYWxzZTtcclxuICAgIGxldCBzdG9yZXMgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnN0b3JlTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS5zdG9yZUlkKVxyXG4gICAgbGV0IG9iaiA9IHtcclxuICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcInRvRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnRvRGF0ZSxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJjbGllbnRJZFwiOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LFxyXG4gICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5zZWxlY3QsXHJcbiAgICAgIFwib2Zmc2V0XCI6IDAsXHJcbiAgICAgIFwibGltaXRcIjogMTAwMDAsXHJcbiAgICAgIFwidmlld0ltYWdlXCI6IGZhbHNlLFxyXG4gICAgICBcImNhdGVnb3J5XCI6IHRoaXMuY2F0ZWdvcnlcclxuICAgIH1cclxuICAgIHRoaXMudHJheFNlcnZpY2Uuc3RvcmVPcGVuY2xvc2VsaXN0KG9iaik/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QgPSByZXMuZGF0YS5zdG9yZW9wZW5hbmRjbG9zZURhdGFcclxuICAgICAgICAgIHRoaXMuc3RvcmVzID0gW11cclxuICAgICAgICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5jaGVja2VkID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLnN0b3Jlcy5wdXNoKHtcclxuICAgICAgICAgICAgICBzdG9yZUlkOiBlbGVtZW50LnN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgc3RvcmVOYW1lOiBlbGVtZW50LnN0b3JlTmFtZVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5zdG9yZXMgPSB0aGlzLnN0b3Jlc1xyXG4gICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZSh0aGlzLnN0b3JlcylcclxuICAgICAgICAgIHRoaXMuc2VsZWN0QWxsID0gdGhpcy5tb2JpbGV1c2FnZURhdGFMaXN0LmV2ZXJ5KChvYmo6IGFueSkgPT4gb2JqLmNoZWNrZWQpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlXHJcbiAgICAgICAgICB0aGlzLnZpZXdsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnZpZXdub0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuc3RvcmVPcGVuY2xvc2V2aWV3KClcclxuXHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgcXVldWVhbGVydHZpZXcoKSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgIHRoaXMubGltaXQgPSAxXHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCB6b25lcyA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuem9uZUxpc3Q/Lmxlbmd0aCA/IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuem9uZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEudmFsdWUpIDogW11cclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIFwiZnJvbURhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgXCJ0b0RhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50b0RhdGUsXHJcbiAgICAgIFwic3RvcmVJZFwiOiBzdG9yZXMsXHJcbiAgICAgIFwiY2xpZW50SWRcIjogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCxcclxuICAgICAgXCJDaGVja2xpc3RUeXBlXCI6IHRoaXMuc2VsZWN0LFxyXG4gICAgICBcIm9mZnNldFwiOiAodGhpcy5vZmZzZXQgLSAxKSxcclxuICAgICAgXCJsaW1pdFwiOiB0aGlzLmxpbWl0LFxyXG4gICAgICBcInZpZXdJbWFnZVwiOiB0cnVlLFxyXG4gICAgICBcImNhdGVnb3J5XCI6IHpvbmVzLFxyXG4gICAgfVxyXG4gICAgdGhpcy52aWV3bG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnZpZXdub0RhdGEgPSBmYWxzZTtcclxuICAgIHRoaXMubGltaXQgPSAxXHJcbiAgICB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFsxXVxyXG4gICAgdGhpcy50cmF4U2VydmljZS5xdWV1ZWFsZXJ0bGlzdChvYmopPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSk/LnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5xdWV1ZUFsZXJ0VmlldyA9IHJlcy5kYXRhLmRhdGFcclxuICAgICAgICAgIHRoaXMuem9uZUxpc3QgPSByZXMuZGF0YS56b25lc1xyXG4gICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3pvbmVMaXN0Jyk/LnNldFZhbHVlKHJlcy5kYXRhLnNlbGVjdGVkem9uZXMpXHJcbiAgICAgICAgICB0aGlzLnF1ZXVlQWxlcnRWaWV3LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBlbGVtZW50LmRhdGVTdHJpbmcgPSBkYXlqcyhlbGVtZW50LmRhdGVTdHJpbmcpLmZvcm1hdCgnREQtTU0tWVlZWScpXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IHJlcy5kYXRhLnRvdGFsQ291bnRcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlXHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWVcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBzdG9yZU9wZW5jbG9zZXZpZXcoKSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgIHRoaXMubGltaXQgPSAxMFxyXG4gICAgbGV0IHN0b3JlcyA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc3RvcmVMaXN0Lm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnN0b3JlSWQpXHJcbiAgICBsZXQgb2JqID0ge1xyXG4gICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICBcInN0b3JlSWRcIjogc3RvcmVzLFxyXG4gICAgICBcImNsaWVudElkXCI6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgIFwiQ2hlY2tsaXN0VHlwZVwiOiB0aGlzLnNlbGVjdCxcclxuICAgICAgXCJvZmZzZXRcIjogKHRoaXMub2Zmc2V0IC0gMSksXHJcbiAgICAgIFwibGltaXRcIjogdGhpcy5saW1pdCxcclxuICAgICAgXCJ2aWV3SW1hZ2VcIjogdHJ1ZSxcclxuICAgICAgXCJjYXRlZ29yeVwiOiB0aGlzLmNhdGVnb3J5XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy52aWV3bG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnZpZXdub0RhdGEgPSBmYWxzZTtcclxuICAgIHRoaXMubGltaXQgPSAxMDtcclxuICAgIHRoaXMucGFnaW5hdGlvblNpemVzID0gWzEwXTtcclxuICAgIHRoaXMudHJheFNlcnZpY2Uuc3RvcmVPcGVuY2xvc2VsaXN0KG9iaik/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlT3BlbmNsb3NlVmlldyA9IHJlcy5kYXRhLnN0b3Jlb3BlbmFuZGNsb3NlRGF0YVxyXG5cclxuICAgICAgICAgIHRoaXMuc3RvcmVPcGVuY2xvc2VWaWV3LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBlbGVtZW50LmRhdGVTdHJpbmcgPSBkYXlqcyhlbGVtZW50LmRhdGVTdHJpbmcpLmZvcm1hdCgnREQtTU0tWVlZWScpXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IHJlcy5kYXRhLnRvdGFsQ291bnRcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlXHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWVcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgY2hlY2tsaXN0TmFtZWNoYW5nZShldmVudDogYW55LCB0eXBlOiBhbnkpIHtcclxuICAgIHRoaXMucmVtb3ZlUXVlcnlQYXJhbXMoKVxyXG4gICAgaWYgKGV2ZW50LmNoZWNrTGlzdFR5cGUgPT09IFwiQUlcIikge1xyXG4gICAgICB0aGlzLnNob3dmbGFnID0gZmFsc2VcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja0xpc3RUeXBlJyk/LnNldFZhbHVlKGV2ZW50LmNoZWNrTGlzdFR5cGUpXHJcbiAgICAgIHRoaXMuc2hvd2ZsYWcgPSB0cnVlXHJcbiAgICB9XHJcbiAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc291cmNlQ2hlY2tMaXN0X2lkJyk/LnNldFZhbHVlKGV2ZW50Py5zb3VyY2VDaGVja0xpc3RfaWQpXHJcbiAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnY2hlY2tsaXN0TmFtZScpPy5zZXRWYWx1ZShldmVudD8uY2hlY2tMaXN0TmFtZSlcclxuICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja0xpc3REZXNjcmlwdGlvbicpPy5zZXRWYWx1ZShldmVudD8uY2hlY2tMaXN0RGVzY3JpcHRpb24pXHJcblxyXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmNvdmVyYWdlID09PSAnc3RvcmUnKSB7XHJcbiAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCd1c2VyTGlzdCcpPy5zZXRWYWx1ZShbXSlcclxuICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2ZpbHRlcnR5cGUnKT8uc2V0VmFsdWUoJ0NsdXN0ZXJzJylcclxuICAgICAgdGhpcy50cmF4U2VydmljZS5nZXRTdG9yZXNsaXN0KHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsIGNsdXN0ZXJzOiB0aGlzLmdyb3VwcywgY2l0eTogW10gfSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gcmVzLmRhdGEuc3RvcmVzRGF0YTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZXMgPSByZXMuZGF0YS5zdG9yZXNEYXRhXHJcbiAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUodGhpcy5zdG9yZUxpc3QpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlcycpPy5zZXRWYWx1ZShbXSlcclxuICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2ZpbHRlcnR5cGUnKT8uc2V0VmFsdWUoJ1RlYW1zJylcclxuICAgICAgbGV0IHRlYW1zTGlzdCA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuVGVhbXNMaXN0Lm1hcCgoZGF0YTogYW55KSA9PiBkYXRhLnRlYW1OYW1lKVxyXG4gICAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldHVzZXJzKHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsIHRlYW1zOiB0ZWFtc0xpc3QgfSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlckxpc3QgPSByZXMuZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3VzZXJMaXN0Jyk/LnNldFZhbHVlKHRoaXMudXNlckxpc3QpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG5cclxuICBjdXN0b21lcnVuYXR0ZW5kZWRsaXN0KHR5cGU6IGFueSkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICB0aGlzLnZpZXdsb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlXHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIFwiZGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICBcInN0b3JlSWRcIjogc3RvcmVzLFxyXG4gICAgICBcImNsaWVudElkXCI6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgIFwiQ2hlY2tsaXN0VHlwZVwiOiB0aGlzLnNlbGVjdCxcclxuICAgICAgXCJ2aWV3SW1hZ2VcIjogZmFsc2UsXHJcbiAgICAgIFwibGltaXRcIjogMTAsXHJcbiAgICAgIFwib2Zmc2V0XCI6IDAsXHJcbiAgICAgIFwiY2F0ZWdvcnlcIjogdGhpcy5jYXRlZ29yeVxyXG4gICAgfVxyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRjdXN0b21lcnVuYXR0ZW5kZWRsaXN0KG9iaik/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QgPSByZXMuZGF0YS5kYXRhO1xyXG4gICAgICAgICAgdGhpcy5zdG9yZXMgPSBbXTtcclxuICAgICAgICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5jaGVja2VkID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLnN0b3Jlcy5wdXNoKHtcclxuICAgICAgICAgICAgICBzdG9yZUlkOiBlbGVtZW50LnN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgc3RvcmVOYW1lOiBlbGVtZW50LnN0b3JlTmFtZVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSByZXMuZGF0YS50b3RhbF9jb3VudFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RBbGwgPSB0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QuZXZlcnkoKG9iajogYW55KSA9PiBvYmouY2hlY2tlZCk7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlcyA9IHRoaXMuc3RvcmVzXHJcbiAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKHRoaXMuc3RvcmVzKVxyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlXHJcbiAgICAgICAgICB0aGlzLmdldGN1c3RvbWVydW5hdHRlbmRlZHZpZXcoKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBzZWxlY3RlZEV4cG9ydCA9IGZhbHNlXHJcbiAgc2VsZWN0ZWRRdWVzdGlvbihldmVudDogYW55LCBzZWN0aW9uOiBhbnksIFF1ZXN0aW9uOiBhbnkpIHtcclxuICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICBpZiAodGhpcy50ZW1wc2VsZWN0ZWRTZWN0aW9uLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgbGV0IHF1ZXN0aW9uczogYW55ID0gW11cclxuICAgICAgICBsZXQgYW5zd2VyOiBhbnkgPSBbXVxyXG4gICAgICAgIGFuc3dlci5wdXNoKFF1ZXN0aW9uLmFuc3dlclR5cGUpXHJcbiAgICAgICAgcXVlc3Rpb25zLnB1c2goUXVlc3Rpb24ucW5hbWUucmVwbGFjZSgvXFxuL2csIFwiIFwiKSlcclxuICAgICAgICBsZXQgcmVzcG9uc2UgPSB7XHJcbiAgICAgICAgICBzZWN0aW9uTmFtZTogc2VjdGlvbi5zZWN0aW9uTmFtZSxcclxuICAgICAgICAgIHF1ZXN0aW9uczogcXVlc3Rpb25zLFxyXG4gICAgICAgICAgYW5zd2VyVHlwZTogYW5zd2VyXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGVtcHNlbGVjdGVkU2VjdGlvbi5wdXNoKHJlc3BvbnNlKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBzZWN0aW9uRXhpc3RzID0gdGhpcy50ZW1wc2VsZWN0ZWRTZWN0aW9uLmZpbHRlcigoZGF0YTogYW55KSA9PiBkYXRhLnNlY3Rpb25OYW1lID09PSBzZWN0aW9uLnNlY3Rpb25OYW1lKVxyXG4gICAgICAgIGlmIChzZWN0aW9uRXhpc3RzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMudGVtcHNlbGVjdGVkU2VjdGlvbi5tYXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZGF0YS5zZWN0aW9uTmFtZSA9PT0gc2VjdGlvbi5zZWN0aW9uTmFtZSkge1xyXG4gICAgICAgICAgICAgIGRhdGEucXVlc3Rpb25zLnB1c2goUXVlc3Rpb24ucW5hbWUucmVwbGFjZSgvXFxuL2csIFwiIFwiKSlcclxuICAgICAgICAgICAgICBkYXRhLmFuc3dlclR5cGUucHVzaChRdWVzdGlvbi5hbnN3ZXJUeXBlKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgcXVlc3Rpb25zOiBhbnkgPSBbXVxyXG4gICAgICAgICAgbGV0IGFuc3dlcjogYW55ID0gW11cclxuXHJcblxyXG4gICAgICAgICAgYW5zd2VyLnB1c2goUXVlc3Rpb24uYW5zd2VyVHlwZSlcclxuXHJcbiAgICAgICAgICBxdWVzdGlvbnMucHVzaChRdWVzdGlvbi5xbmFtZS5yZXBsYWNlKC9cXG4vZywgXCIgXCIpKVxyXG4gICAgICAgICAgbGV0IHJlc3BvbnNlID0ge1xyXG4gICAgICAgICAgICBzZWN0aW9uTmFtZTogc2VjdGlvbi5zZWN0aW9uTmFtZSxcclxuICAgICAgICAgICAgcXVlc3Rpb25zOiBxdWVzdGlvbnMsXHJcbiAgICAgICAgICAgIGFuc3dlclR5cGU6IGFuc3dlclxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50ZW1wc2VsZWN0ZWRTZWN0aW9uLnB1c2gocmVzcG9uc2UpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNoZWNrbGlzdERhdGEubWFwKChzZWM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChzZWMuc2VjdGlvbk5hbWUgPT0gc2VjdGlvbi5zZWN0aW9uTmFtZSkge1xyXG4gICAgICAgICAgc2VjLnF1ZXN0aW9ucy5tYXAoKHF1ZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocXVlcy5xbmFtZSA9PT0gUXVlc3Rpb24ucW5hbWUucmVwbGFjZSgvXFxuL2csIFwiIFwiKSkge1xyXG4gICAgICAgICAgICAgIHF1ZXMuY2hlY2tlZCA9IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgdGhpcy50ZW1wc2VsZWN0ZWRTZWN0aW9uLm1hcCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEuc2VjdGlvbk5hbWUgPT0gc2VjdGlvbi5zZWN0aW9uTmFtZSkge1xyXG4gICAgICAgICAgZGF0YS5xdWVzdGlvbnMgPSBkYXRhLnF1ZXN0aW9ucy5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGUgIT0gUXVlc3Rpb24ucW5hbWUucmVwbGFjZSgvXFxuL2csIFwiIFwiKSlcclxuICAgICAgICAgIGRhdGEuYW5zd2VyVHlwZSA9IGRhdGEuYW5zd2VyVHlwZS5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGUgIT0gUXVlc3Rpb24uYW5zd2VyVHlwZSlcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLnRlbXBzZWxlY3RlZFNlY3Rpb24gPSB0aGlzLnRlbXBzZWxlY3RlZFNlY3Rpb24uZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlLnF1ZXN0aW9ucy5sZW5ndGggPiAwKVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkRXhwb3J0ID0gdGhpcy50ZW1wc2VsZWN0ZWRTZWN0aW9uLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG4gIGdldGN1c3RvbWVydHJpYWxsaXN0KCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICB0aGlzLnZpZXdsb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlO1xyXG4gICAgdGhpcy5tb2JpbGV1c2FnZURhdGFMaXN0ID0gW3sgc3RvcmVJZDogXCI1OS0xNDdcIiwgc3RvcmVOYW1lOiBcIkJpcmtlbnN0b2NrIER1YmFpIEhpbGxzXCIsIGRldGVjdGlvbnM6IFwiMjBcIiB9XTtcclxuICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgZWxlbWVudC5jaGVja2VkID0gdHJ1ZVxyXG4gICAgICB0aGlzLnN0b3Jlcy5wdXNoKHtcclxuICAgICAgICBzdG9yZUlkOiBlbGVtZW50LnN0b3JlSWQsXHJcbiAgICAgICAgc3RvcmVOYW1lOiBlbGVtZW50LnN0b3JlTmFtZVxyXG4gICAgICB9KVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RBbGwgPSB0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QuZXZlcnkoKG9iajogYW55KSA9PiBvYmouY2hlY2tlZCk7XHJcbiAgICB0aGlzLnN0b3JlcyA9IHRoaXMuc3RvcmVzXHJcbiAgICB0aGlzLm1vYmlsZXVzYWdlRGF0YSA9XHJcbiAgICAgIFt7XHJcbiAgICAgICAgc3RvcmVOYW1lOiBcIkJpcmtlbnN0b2NrIER1YmFpIEhpbGxzXCIsXHJcbiAgICAgICAgaW1hZ2VVcmw6IFtcclxuICAgICAgICAgIFwidHJhaWwvNTktMTQ3L2IxYzViMTVjMDEzM2RlYzBjNDU2NDBkOTIzZmRhMjIxXzEwXzA5XzU5XzAwMF8yNF8wMV8yMDI1X2ZhbHNlLmdpZlwiLFxyXG4gICAgICAgICAgXCJ0cmFpbC81OS0xNDcvYjFjNWIxNWMwMTMzZGVjMGM0NTY0MGQ5MjNmZGEyMjFfMTBfMDlfNTlfMDAwXzI0XzAxXzIwMjVfZmFsc2UuZ2lmXCIsXHJcbiAgICAgICAgICBcInRyYWlsLzU5LTE0Ny9iMWM1YjE1YzAxMzNkZWMwYzQ1NjQwZDkyM2ZkYTIyMV8xMF80MF8zMl8wMDBfMjRfMDFfMjAyNV9mYWxzZS5naWZcIixcclxuICAgICAgICAgIFwidHJhaWwvNTktMTQ3L2IxYzViMTVjMDEzM2RlYzBjNDU2NDBkOTIzZmRhMjIxXzEwXzUwXzQzXzAwMF8yNF8wMV8yMDI1X2ZhbHNlLmdpZlwiLFxyXG4gICAgICAgICAgXCJ0cmFpbC81OS0xNDcvYjFjNWIxNWMwMTMzZGVjMGM0NTY0MGQ5MjNmZGEyMjFfMTFfMDBfNTRfMDAwXzI0XzAxXzIwMjVfZmFsc2UuZ2lmXCIsXHJcbiAgICAgICAgICBcInRyYWlsLzU5LTE0Ny9iMWM1YjE1YzAxMzNkZWMwYzQ1NjQwZDkyM2ZkYTIyMV8xMV8xMV8wNV8wMDBfMjRfMDFfMjAyNV9mYWxzZS5naWZcIixcclxuICAgICAgICAgIFwidHJhaWwvNTktMTQ3L2IxYzViMTVjMDEzM2RlYzBjNDU2NDBkOTIzZmRhMjIxXzExXzIxXzE2XzAwMF8yNF8wMV8yMDI1X2ZhbHNlLmdpZlwiLFxyXG4gICAgICAgICAgXCJ0cmFpbC81OS0xNDcvYjFjNWIxNWMwMTMzZGVjMGM0NTY0MGQ5MjNmZGEyMjFfMTFfMjFfMTlfMDAwXzI1XzAxXzIwMjVfMTczNzc4OTE4NS5naWZcIixcclxuICAgICAgICAgIFwidHJhaWwvNTktMTQ3L2IxYzViMTVjMDEzM2RlYzBjNDU2NDBkOTIzZmRhMjIxXzEyXzQyXzQ0XzAwMF8yNF8wMV8yMDI1X2ZhbHNlLmdpZlwiLFxyXG4gICAgICAgICAgXCJ0cmFpbC81OS0xNDcvYjFjNWIxNWMwMTMzZGVjMGM0NTY0MGQ5MjNmZGEyMjFfMTJfNDJfNTBfMDAwXzI1XzAxXzIwMjVfMTczNzc5NDM0OS5naWZcIixcclxuICAgICAgICAgIFwidHJhaWwvNTktMTQ3L2IxYzViMTVjMDEzM2RlYzBjNDU2NDBkOTIzZmRhMjIxXzEzXzAzXzA3XzAwMF8yNF8wMV8yMDI1X2ZhbHNlLmdpZlwiLFxyXG4gICAgICAgICAgXCJ0cmFpbC81OS0xNDcvYjFjNWIxNWMwMTMzZGVjMGM0NTY0MGQ5MjNmZGEyMjFfMTNfMjNfMjhfMDAwXzI0XzAxXzIwMjVfMTczNzcxMDI4My5naWZcIixcclxuICAgICAgICAgIFwidHJhaWwvNTktMTQ3L2IxYzViMTVjMDEzM2RlYzBjNDU2NDBkOTIzZmRhMjIxXzEzXzMzXzQ3XzAwMF8yNV8wMV8yMDI1XzE3Mzc3OTc1ODguZ2lmXCIsXHJcbiAgICAgICAgICBcInRyYWlsLzU5LTE0Ny9iMWM1YjE1YzAxMzNkZWMwYzQ1NjQwZDkyM2ZkYTIyMV8xNF80NF81N18wMDBfMjRfMDFfMjAyNV9mYWxzZS5naWZcIixcclxuICAgICAgICAgIFwidHJhaWwvNTktMTQ3L2IxYzViMTVjMDEzM2RlYzBjNDU2NDBkOTIzZmRhMjIxXzE4XzU5XzQwXzAwMF8yNF8wMV8yMDI1XzE3Mzc3MzAyODYuZ2lmXCIsXHJcbiAgICAgICAgICBcInRyYWlsLzU5LTE0Ny9iMWM1YjE1YzAxMzNkZWMwYzQ1NjQwZDkyM2ZkYTIyMV8yMF8xMF81OV8wMDBfMjRfMDFfMjAyNV8xNzM3NzM0NzczLmdpZlwiLFxyXG4gICAgICAgICAgXCJ0cmFpbC81OS0xNDcvYjFjNWIxNWMwMTMzZGVjMGM0NTY0MGQ5MjNmZGEyMjFfMjBfMjFfMTBfMDAwXzI0XzAxXzIwMjVfMTczNzczNTI0MS5naWZcIixcclxuICAgICAgICAgIFwidHJhaWwvNTktMTQ3L2IxYzViMTVjMDEzM2RlYzBjNDU2NDBkOTIzZmRhMjIxXzIxXzEyXzA3XzAwMF8yNF8wMV8yMDI1XzE3Mzc3MzgyMzMuZ2lmXCIsXHJcbiAgICAgICAgICBcInRyYWlsLzU5LTE0Ny9iMWM1YjE1YzAxMzNkZWMwYzQ1NjQwZDkyM2ZkYTIyMV8yMV80Ml80MV8wMDBfMjRfMDFfMjAyNV8xNzM3NzQwNTA5LmdpZlwiLFxyXG4gICAgICAgICAgXCJ0cmFpbC81OS0xNDcvYjFjNWIxNWMwMTMzZGVjMGM0NTY0MGQ5MjNmZGEyMjFfMjJfMjNfMjdfMDAwXzI0XzAxXzIwMjVfMTczNzc0MjQxMi5naWZcIixcclxuICAgICAgICBdXHJcbiAgICAgIH1dXHJcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2VcclxuICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlXHJcbiAgICB0aGlzLnRvdGFsQ291bnQgPSAxXHJcbiAgfVxyXG4gIGdldG1vYmlsZVVzYWdlRGF0YWxpc3QodHlwZTogYW55KSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgIHRoaXMudmlld2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2U7XHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIFwiZGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICBcInN0b3JlSWRcIjogc3RvcmVzLFxyXG4gICAgICBcImNsaWVudElkXCI6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgIFwiQ2hlY2tsaXN0VHlwZVwiOiB0aGlzLnNlbGVjdCxcclxuICAgICAgXCJ2aWV3SW1hZ2VcIjogZmFsc2UsXHJcbiAgICAgIFwib2Zmc2V0XCI6ICh0aGlzLm9mZnNldCAtIDEpLFxyXG4gICAgICBcImxpbWl0XCI6IHRoaXMubGltaXQsXHJcbiAgICAgIFwiY2F0ZWdvcnlcIjogdGhpcy5jYXRlZ29yeVxyXG4gICAgfVxyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRNb2JVc2FnZWxpc3Qob2JqKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhTGlzdCA9IHJlcy5kYXRhLmRhdGE7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlcyA9IFtdXHJcbiAgICAgICAgICB0aGlzLm1vYmlsZXVzYWdlRGF0YUxpc3QuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuY2hlY2tlZCA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5zdG9yZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgc3RvcmVJZDogZWxlbWVudC5zdG9yZUlkLFxyXG4gICAgICAgICAgICAgIHN0b3JlTmFtZTogZWxlbWVudC5zdG9yZU5hbWVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gcmVzLmRhdGEudG90YWxfY291bnRcclxuICAgICAgICAgIHRoaXMuc2VsZWN0QWxsID0gdGhpcy5tb2JpbGV1c2FnZURhdGFMaXN0LmV2ZXJ5KChvYmo6IGFueSkgPT4gb2JqLmNoZWNrZWQpO1xyXG4gICAgICAgICAgdGhpcy5zdG9yZXMgPSB0aGlzLnN0b3Jlc1xyXG4gICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZSh0aGlzLnN0b3JlcylcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZVxyXG4gICAgICAgICAgdGhpcy5nZXRtb2JpbGVVc2FnZURhdGF2aWV3KClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnZpZXdub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgb25yZXNldCgpIHtcclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0U3RvcmVzbGlzdCh7IGNsaWVudElkOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LCBjbHVzdGVyczogdGhpcy5ncm91cHMsIGNpdHk6IFtdIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHJlcy5kYXRhLnN0b3Jlc0RhdGE7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlcyA9IHJlcy5kYXRhLnN0b3Jlc0RhdGFcclxuICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUodGhpcy5zdG9yZUxpc3QpXHJcbiAgICAgICAgICB0aGlzLm9mZnNldCA9IDFcclxuICAgICAgICAgIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCA9PT0gJ3N0b3Jlb3BlbmFuZGNsb3NlJykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdCA9ICdzdG9yZW9wZW5hbmRjbG9zZSdcclxuICAgICAgICAgICAgdGhpcy5zdG9yZU9wZW5jbG9zZWxpc3QoZmFsc2UpXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYm94aW1hZ2VDaGVja2xpc3QuaW5jbHVkZXModGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCd6b25lTGlzdCcpPy5zZXRWYWx1ZShbXSlcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZFxyXG4gICAgICAgICAgICB0aGlzLnF1ZXVlYWxlcnRsaXN0KGZhbHNlKVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmltYWdlQ2hlY2tsaXN0LmluY2x1ZGVzKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdCA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkO1xyXG4gICAgICAgICAgICB0aGlzLmdldG1vYmlsZVVzYWdlRGF0YWxpc3QoZmFsc2UpXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlkZW9DaGVja2xpc3QuaW5jbHVkZXModGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQ7XHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tZXJ1bmF0dGVuZGVkbGlzdChmYWxzZSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlID09PSAnY2hlY2tsaXN0JyA/IFwiY3VzdG9tXCIgOiBcIlwiO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlID09PSAnQ2x1c3RlcnMnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdG9yZUxpc3Rkcm9wZG93bigpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMudXNlckxpc3Rkcm9wZG93bigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IFtdO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICBvbnZpZXcoKSB7XHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQgPT09ICdzdG9yZW9wZW5hbmRjbG9zZScpIHtcclxuICAgICAgdGhpcy5zZWxlY3QgPSAnc3RvcmVvcGVuYW5kY2xvc2UnXHJcbiAgICAgIHRoaXMuc3RvcmVPcGVuY2xvc2V2aWV3KClcclxuICAgIH0gZWxzZSBpZiAodGhpcy5ib3hpbWFnZUNoZWNrbGlzdC5pbmNsdWRlcyh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCkpIHtcclxuICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZFxyXG4gICAgICB0aGlzLnF1ZXVlYWxlcnR2aWV3KClcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pbWFnZUNoZWNrbGlzdC5pbmNsdWRlcyh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCkpIHtcclxuICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZDtcclxuICAgICAgdGhpcy5nZXRtb2JpbGVVc2FnZURhdGF2aWV3KClcclxuICAgIH0gZWxzZSBpZiAodGhpcy52aWRlb0NoZWNrbGlzdC5pbmNsdWRlcyh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCkpIHtcclxuICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZDtcclxuICAgICAgdGhpcy5nZXRjdXN0b21lcnVuYXR0ZW5kZWR2aWV3KClcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0Y3VzdG9tZXJ1bmF0dGVuZGVkdmlldygpIHtcclxuXHJcbiAgICB0aGlzLnZpZXdsb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlO1xyXG4gICAgdGhpcy5saW1pdCA9IDFcclxuICAgIHRoaXMucGFnaW5hdGlvblNpemVzID0gWzFdXHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIFwiZGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICBcInN0b3JlSWRcIjogc3RvcmVzLFxyXG4gICAgICBcImNsaWVudElkXCI6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgIFwiQ2hlY2tsaXN0VHlwZVwiOiB0aGlzLnNlbGVjdCxcclxuICAgICAgXCJ2aWV3SW1hZ2VcIjogdHJ1ZSxcclxuICAgICAgXCJvZmZzZXRcIjogKHRoaXMub2Zmc2V0IC0gMSksXHJcbiAgICAgIFwibGltaXRcIjogdGhpcy5saW1pdCxcclxuICAgICAgXCJjYXRlZ29yeVwiOiB0aGlzLmNhdGVnb3J5XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRjdXN0b21lcnVuYXR0ZW5kZWRsaXN0KG9iaik/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLmN1c3RvbWVydW5hdHRlbmRlZERhdGEgPSByZXMuZGF0YS5kYXRhXHJcbiAgICAgICAgICB0aGlzLnZpZXdsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnZpZXdub0RhdGEgPSBmYWxzZVxyXG4gICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gcmVzLmRhdGEudG90YWxfY291bnRcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBnZXRtb2JpbGVVc2FnZURhdGF2aWV3KCkge1xyXG4gICAgdGhpcy52aWV3bG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnZpZXdub0RhdGEgPSBmYWxzZTtcclxuICAgIHRoaXMubGltaXQgPSAxMFxyXG4gICAgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbMTBdXHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIFwiZnJvbURhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgXCJ0b0RhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50b0RhdGUsXHJcbiAgICAgIFwiZGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcInN0b3JlSWRcIjogc3RvcmVzLFxyXG4gICAgICBcImNsaWVudElkXCI6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgIFwiQ2hlY2tsaXN0VHlwZVwiOiB0aGlzLnNlbGVjdCxcclxuICAgICAgXCJ2aWV3SW1hZ2VcIjogdHJ1ZSxcclxuICAgICAgXCJvZmZzZXRcIjogKHRoaXMub2Zmc2V0IC0gMSksXHJcbiAgICAgIFwibGltaXRcIjogdGhpcy5saW1pdCxcclxuICAgICAgXCJjYXRlZ29yeVwiOiB0aGlzLmNhdGVnb3J5XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRNb2JVc2FnZWxpc3Qob2JqKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMubW9iaWxldXNhZ2VEYXRhID0gcmVzLmRhdGEuZGF0YVxyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2VcclxuICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IHJlcy5kYXRhLnRvdGFsX2NvdW50XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBnZXRmaWx0ZXJDb3VudCgpIHtcclxuICAgIGxldCBzdG9yZXMgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnN0b3JlTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS5zdG9yZUlkKVxyXG4gICAgbGV0IHVzZXJzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS51c2VyTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS51c2VyRW1haWwpXHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcInRvRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnRvRGF0ZSxcclxuICAgICAgXCJmaWx0ZXJ0eXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZmlsdGVydHlwZSxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJ1c2VyRW1haWxcIjogdXNlcnMsXHJcbiAgICAgIFwiYW5zd2VyVHlwZVwiOiB0aGlzLnNlbGVjdGVkU2VjdGlvblswXS5hbnN3ZXJUeXBlWzBdLFxyXG4gICAgICBcImNoZWNrbGlzdElkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkLFxyXG4gICAgICBcIkNoZWNrbGlzdFR5cGVcIjogXCJjdXN0b21cIixcclxuICAgICAgXCJxdWVzdGlvbnNcIjogdGhpcy5zZWxlY3RlZFNlY3Rpb25bMF0ucXVlc3Rpb25zWzBdXHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldEFuc3dlcmNvdW50KHBheWxvYWQpPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSk/LnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5hbnN3ZXJGaWx0ZXIgPSByZXMuZGF0YS5hbnN3ZXJzQ291bnRcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbnN3ZXJGaWx0ZXIgPSBbXVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9IFxyXG5cclxuXHJcblxyXG4gIFxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gIGNyZWF0ZU11bHRpcGxlVGFzayh0eXBlOmFueSl7XHJcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQnVsa2NyZWF0aW9ubW9kZWxDb21wb25lbnQsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsIFxyXG4gICAgICBzaXplOiAnbWQnLCAgICAgIFxyXG4gICAgICBcclxuICAgIH0pO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudHlwZSA9IHR5cGVcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmZpbHRlcnR5cGUgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlcnR5cGVcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRhc2tEZXRhaWxzID0ge1xyXG4gICAgICBzZWN0aW9uczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwiaWRcIjogXCJcIixcclxuICAgICAgICAgIFwibmFtZVwiOiBcIlwiLFxyXG4gICAgICAgICAgXCJxdWVzdGlvbnNcIjogW3RoaXMuaW5wdXREYXRhVGFza11cclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuXHJcbiAgICB9O1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2Uuc291cmNlQ2hlY2tMaXN0X2lkID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWRcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnBheWxvYWQgPSB7XHJcbiAgICAgIGNvdmVyYWdlOnRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZmlsdGVydHlwZT09PSdUZWFtcyc/XCJ1c2VyXCI6XCJzdG9yZVwiLFxyXG4gICAgICBzZWxlY3RlZFN0b3Jlczp0aGlzLnNlbGVjdGVkU3RvcmVzLFxyXG4gICAgICBzZWxlY3RlZFVzZXJzOnRoaXMuc2VsZWN0ZWRVc2VycyxcclxuICAgICAgb3BlcmF0aW9udHlwZTogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlLFxyXG4gICAgICBpbnB1dERhdGE6dGhpcy5pbnB1dERhdGFUYXNrLFxyXG4gICAgICBzZWN0aW9uSW5mbzp0aGlzLm90aGVyVGFza0RhdGEuc2VjdGlvbkluZm8sXHJcbiAgICAgIHJlZkltYWdlOnRoaXMucmVmSW1hZ2UsXHJcbiAgICAgIGNoZWNrbGlzdE5hbWU6dGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lLFxyXG4gICAgICBcclxuICAgIH07XHJcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLnNlbGVjdGVkU3RvcmVzPVtdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVXNlcnM9W107XHJcbiAgICAgIGlmIChyZXN1bHQgPT0gJ3N1Ym1pdCcpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd3NpbmdsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd211bHRpID0gIHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudHlwZSA9PT0gJ2NoZWNrbGlzdCcpIHtcclxuICAgICAgICAgIHRoaXMuZ2V0Q2hlY2tsaXN0UUEoZmFsc2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmdldFRhc2tRQSh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2V7XHJcbiAgICBcclxuXHJcbiAgICAgICAgdGhpcy5zaG93c2luZ2xlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93bXVsdGkgPSAgdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlID09PSAnY2hlY2tsaXN0Jykge1xyXG4gICAgICAgICAgdGhpcy5nZXRDaGVja2xpc3RRQShmYWxzZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZ2V0VGFza1FBKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudHlwZSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBzZWxlY3RlZG11bHRpVGFzayhldmVudDphbnksY2hlY2tsaXN0OmFueSxkYXRhOmFueSxjaGVja2xpc3RJbmZvOmFueSxzZWN0aW9uSW5mbzphbnkpeyAgICAgIFxyXG4gICAgbGV0IGFuc3dlcjphbnk9IFtdXHJcbiAgICBhbnN3ZXI9IGRhdGEudXNlckFuc3dlci5tYXAoKGRhdGE6YW55KT0+ZGF0YS5hbnN3ZXIpXHJcbiAgICBjb25zb2xlLmxvZyggYW5zd2VyKVxyXG4gICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgIHRoaXMuaW5wdXREYXRhVGFzayA9IGRhdGFcclxuICAgICAgdGhpcy5yZWZJbWFnZT0gWy4uLnRoaXMucmVmSW1hZ2UsLi4uYW5zd2VyXVxyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnJlZkltYWdlKVxyXG4gICAgdGhpcy5vdGhlclRhc2tEYXRhID0ge1xyXG4gICAgICBzZWN0aW9uSW5mbzpzZWN0aW9uSW5mbyxcclxuICAgIH1cclxuICAgIGlmKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZmlsdGVydHlwZT09PSdDbHVzdGVycycpe1xyXG4gICAgICBjb25zb2xlLmxvZyhjaGVja2xpc3Quc3RvcmVQcm9maWxlKVxyXG4gICAgICB0aGlzLnNlbGVjdGVkU3RvcmVzLnB1c2goe1xyXG4gICAgICAgIHNlY3Rpb25faWQ6c2VjdGlvbkluZm8uc2VjdGlvbl9pZCxcclxuICAgICAgICBzdG9yZUlkOiBjaGVja2xpc3Quc3RvcmVQcm9maWxlLnN0b3JlX2lkLFxyXG4gICAgICAgIHN0b3JlTmFtZTogY2hlY2tsaXN0LnN0b3JlUHJvZmlsZS5zdG9yZU5hbWUsXHJcbiAgICAgICAgY2hlY2tsaXN0SWQ6Y2hlY2tsaXN0SW5mby5jaGVja2xpc3RJZCxcclxuICAgICAgICB1c2VyRW1haWw6Y2hlY2tsaXN0LmNoZWNrbGlzdEluZm8udXNlckVtYWlsLFxyXG4gICAgICAgIHVuaXF1ZU5vOmRhdGEudW5pcXVlTm9cclxuICAgICAgIFxyXG4gICAgICB9KSBcclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVXNlcnMucHVzaCh7XHJcbiAgICAgICAgc2VjdGlvbl9pZDpzZWN0aW9uSW5mby5zZWN0aW9uX2lkLFxyXG4gICAgICAgIHVzZXJFbWFpbDpjaGVja2xpc3QuY2hlY2tsaXN0SW5mby51c2VyRW1haWwsXHJcbiAgICAgICAgdXNlck5hbWU6Y2hlY2tsaXN0LmNoZWNrbGlzdEluZm8udXNlck5hbWUsXHJcbiAgICAgICAgY2hlY2tsaXN0SWQ6Y2hlY2tsaXN0SW5mby5jaGVja2xpc3RJZCxcclxuICAgICAgICB1bmlxdWVObzpkYXRhLnVuaXF1ZU5vXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfWVsc2V7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkU3RvcmVzKVxyXG4gICAgdGhpcy5yZWZJbWFnZSA9ICB0aGlzLnJlZkltYWdlLmZpbHRlcigoZGF0YSk9PmRhdGEuYW5zd2VyKVxyXG4gICAgaWYodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlPT09J0NsdXN0ZXJzJyl7XHJcbiAgICB0aGlzLnNlbGVjdGVkU3RvcmVzID0gIHRoaXMuc2VsZWN0ZWRTdG9yZXMuZmlsdGVyKChkYXRhOmFueSk9PmRhdGEuY2hlY2tsaXN0SWQhPWNoZWNrbGlzdEluZm8uY2hlY2tsaXN0SWQpXHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJzID0gIHRoaXMuc2VsZWN0ZWRVc2Vycy5maWx0ZXIoKGRhdGE6YW55KT0+ZGF0YS5jaGVja2xpc3RJZCE9Y2hlY2tsaXN0SW5mby5jaGVja2xpc3RJZClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIH1cclxuICBzZWxlY3RzaW5nbGVxdWVzdGlvbigpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uID0gdGhpcy50ZW1wc2VsZWN0ZWRTZWN0aW9uXHJcbiAgICBpZiAodGhpcy5xdWVzdGlvbnNjb3VudCh0aGlzLnNlbGVjdGVkU2VjdGlvbikgPT0gMCB8fCB0aGlzLnF1ZXN0aW9uc2NvdW50KHRoaXMuc2VsZWN0ZWRTZWN0aW9uKSA+IDEpIHtcclxuICAgICAgdGhpcy5zaG93c2luZ2xlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2hvd211bHRpID0gdHJ1ZVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnF1ZXN0aW9uc2NvdW50KHRoaXMuc2VsZWN0ZWRTZWN0aW9uKSA9PSAxKSB7XHJcbiAgICAgIHRoaXMuc2hvd3NpbmdsZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2hvd211bHRpID0gZmFsc2VcclxuXHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvblswXS5hbnN3ZXJUeXBlWzBdID09PSBcInllcy9ub1wiIHx8IHRoaXMuc2VsZWN0ZWRTZWN0aW9uWzBdLmFuc3dlclR5cGVbMF0gPT09IFwibXVsdGlwbGVjaG9pY2VzaW5nbGVcIiB8fCB0aGlzLnNlbGVjdGVkU2VjdGlvblswXS5hbnN3ZXJUeXBlWzBdID09PSBcIm11bHRpcGxlY2hvaWNlbXVsdGlwbGVcIikge1xyXG4gICAgICAgIHRoaXMuc2hvd2ZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5nZXRmaWx0ZXJDb3VudCgpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zaG93ZmlsdGVyID0gZmFsc2VcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIHRoaXMub2Zmc2V0ID0gMTtcclxuICAgIHRoaXMudmlld2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2U7XHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCB1c2VycyA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudXNlckxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEudXNlckVtYWlsKVxyXG4gICAgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudHlwZSA9PT0gJ2NoZWNrbGlzdCcpIHtcclxuICAgICAgbGV0IG9iaiA9IHtcclxuICAgICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgICAgXCJ0b0RhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50b0RhdGUsXHJcbiAgICAgICAgXCJDaGVja2xpc3RUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tMaXN0VHlwZSwgLy8gW1wiY3VzdG9tXCIsIFwiQUlcIl1cclxuICAgICAgICBcImNoZWNrbGlzdE5hbWVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lLFxyXG4gICAgICAgIFwiY2hlY2tsaXN0SWRcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQsXHJcbiAgICAgICAgXCJmaWx0ZXJ0eXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZmlsdGVydHlwZSxcclxuICAgICAgICBcInN0b3JlSWRcIjogc3RvcmVzLFxyXG4gICAgICAgIFwidXNlckVtYWlsXCI6IHVzZXJzLFxyXG4gICAgICAgIFwiYW5zd2VyVHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmFuc3dlclR5cGUsIC8vW1wiZGVzY3JpcHRpdmVcIixcInllcy9ub1wiLFwibXVsdGlwbGVjaG9pY2VzaW5nbGVcIixcIm11bHRpcGxlY2hvaWNlbXVsdGlwbGVcIixcImltYWdlXCIsXCJ2aWRlb1wiLFwiZGVzY3JpcHRpdmVJbWFnZVwiLFwibXVsdGlwbGVJbWFnZVwiXVxyXG4gICAgICAgIFwidmlld0ZsYWdcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS52aWV3RmxhZywgLy9bdHJ1ZSwgZmFsc2VdXHJcbiAgICAgICAgXCJ2aWV3UmVkb1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdSZWRvLCAvL1t0cnVlLCBmYWxzZV1cclxuICAgICAgICBcImZpbHRlclwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlcixcclxuICAgICAgICBcInF1ZXN0aW9uc1wiOiB0aGlzLnNlbGVjdGVkU2VjdGlvbi5sZW5ndGggPiAwICYmIHRoaXMuc2VsZWN0ZWRTZWN0aW9uWzBdLnF1ZXN0aW9ucy5sZW5ndGggPiAwID8gdGhpcy5zZWxlY3RlZFNlY3Rpb25bMF0ucXVlc3Rpb25zWzBdIDogXCJcIixcclxuICAgICAgICBcImFwcHJvdmVGaWx0ZXJcIjogdGhpcy5hcHByb3ZlRmlsdGVyXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50cmF4U2VydmljZS5nZXRjaGVja2xpc3Qob2JqKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuY2hlY2tsaXN0RGF0YSA9IHJlcz8uZGF0YS5jaGVja2xpc3RRdWVzdGlvbnM7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlID09PSAnQ2x1c3RlcnMnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZShyZXM/LmRhdGE/LnN0b3Jlc0RldGFpbHMpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3VzZXJMaXN0Jyk/LnNldFZhbHVlKHJlcz8uZGF0YT8uc3RvcmVzRGV0YWlscylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnZpZXdDaGVja2xpc3RzKFwiYWxsXCIsIFwiYWxsXCIpXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrbGlzdERhdGEgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy52aWV3Q2hlY2tsaXN0c0RhdGEgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdub0RhdGEgPSB0cnVlO1xyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgIFwiZnJvbURhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgICBcInRvRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnRvRGF0ZSxcclxuICAgICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlLCAvLyBbXCJjdXN0b21cIiwgXCJBSVwiXVxyXG4gICAgICAgIFwiY2hlY2tsaXN0TmFtZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUsXHJcbiAgICAgICAgXCJjaGVja2xpc3RJZFwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCxcclxuICAgICAgICBcImZpbHRlcnR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlLFxyXG4gICAgICAgIFwic3RvcmVJZFwiOiBzdG9yZXMsXHJcbiAgICAgICAgXCJ1c2VyRW1haWxcIjogdXNlcnMsXHJcbiAgICAgICAgXCJhbnN3ZXJUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuYW5zd2VyVHlwZSwgLy9bXCJkZXNjcmlwdGl2ZVwiLFwieWVzL25vXCIsXCJtdWx0aXBsZWNob2ljZXNpbmdsZVwiLFwibXVsdGlwbGVjaG9pY2VtdWx0aXBsZVwiLFwiaW1hZ2VcIixcInZpZGVvXCIsXCJkZXNjcmlwdGl2ZUltYWdlXCIsXCJtdWx0aXBsZUltYWdlXCJdXHJcbiAgICAgICAgXCJ2aWV3RmxhZ1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdGbGFnLC8vW3RydWUsIGZhbHNlXVxyXG4gICAgICAgIFwidmlld1JlZG9cIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS52aWV3UmVkbywgLy9bdHJ1ZSwgZmFsc2VdXHJcbiAgICAgICAgXCJmaWx0ZXJcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXIsXHJcbiAgICAgICAgXCJxdWVzdGlvbnNcIjogdGhpcy5zZWxlY3RlZFNlY3Rpb24ubGVuZ3RoID4gMCAmJiB0aGlzLnNlbGVjdGVkU2VjdGlvblswXS5xdWVzdGlvbnMubGVuZ3RoID4gMCA/IHRoaXMuc2VsZWN0ZWRTZWN0aW9uWzBdLnF1ZXN0aW9uc1swXSA6IFwiXCJcclxuXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50cmF4U2VydmljZS5nZXRRdWVzdGlvbnMob2JqKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuY2hlY2tsaXN0RGF0YSA9IHJlcz8uZGF0YS5jaGVja2xpc3RRdWVzdGlvbnM7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlID09PSAnQ2x1c3RlcnMnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZShyZXM/LmRhdGE/LnN0b3Jlc0RldGFpbHMpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3VzZXJMaXN0Jyk/LnNldFZhbHVlKHJlcz8uZGF0YT8uc3RvcmVzRGV0YWlscylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnZpZXdUYXNrTGlzdChcImFsbFwiLCBcImFsbFwiKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2xpc3REYXRhID0gW107XHJcbiAgICAgICAgICAgIHRoaXMudmlld0NoZWNrbGlzdHNEYXRhID0gW107XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuICBhcHBvdmVDaGVja2xpc3QoKSB7XHJcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQXBwcm92YWxQb3B1cENvbXBvbmVudCwgeyBjZW50ZXJlZDogdHJ1ZSwgc2l6ZTogJ21kJywgfSk7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50eXBlID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuY2hlY2tMaXN0TmFtZSA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZTtcclxuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCA9PSAnc3VibWl0Jykge1xyXG5cclxuICAgICAgICBpZih0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlcnR5cGUgPT09ICdDbHVzdGVycycpe1xyXG4gICAgICAgICAgIGxldCBzdG9yZXMgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnN0b3JlTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS5zdG9yZUlkKVxyXG4gICAgICAgICAgIGlmKHN0b3Jlcy5sZW5ndGggPT0gMCl7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJQbGVhc2Ugc2VsZWN0IGF0bGVhc3Qgb25lIHN0b3JlXCIpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBsZXQgdXNlciA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudXNlckxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEudXNlckVtYWlsKVxyXG4gICAgICAgICAgICAgaWYodXNlci5sZW5ndGggPT0gMCl7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJQbGVhc2Ugc2VsZWN0IGF0bGVhc3Qgb25lIHVzZXJcIilcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT0gJ2NoZWNrbGlzdCcpIHtcclxuICAgICAgICAgIHRoaXMuY2hlY2tsaXN0QXBwcm92ZSgpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuQXBwcm92ZVRhc2soKVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIGNoZWNrbGlzdEFwcHJvdmUoKSB7XHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCB1c2VyID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS51c2VyTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS51c2VyRW1haWwpXHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgXCJjbGllbnRJZFwiOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LFxyXG4gICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICBcInN0b3JlSWRcIjogc3RvcmVzLFxyXG4gICAgICBcInVzZXJFbWFpbFwiOiB1c2VyLFxyXG4gICAgICBcInNvdXJjZUNoZWNrTGlzdF9pZFwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCxcclxuICAgICAgXCJmaWx0ZXJ0eXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZmlsdGVydHlwZSxcclxuICAgIH1cclxuICAgIHRoaXMudHJheFNlcnZpY2UuYXBwcm92ZWNoZWNrbGlzdChwYXlsb2FkKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuYXBwcm92YWxzdGF0dXMoKVxyXG4gICAgICAgICAgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudHlwZSA9PT0gJ2NoZWNrbGlzdCcpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDaGVja2xpc3RRQShmYWxzZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmdldFRhc2tRQSh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRTdWNjZXNzVG9hc3QoYDxkaXY+PHNwYW4gY2xhc3M9XCJtZS04XCIgPiR7cmVzLm1lc3NhZ2V9PC9zcGFuPjwvZGl2PmApXHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoZXJyPy5lcnJvcj8uZXJyb3IpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuXHJcbiAgQXBwcm92ZVRhc2soKSB7XHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCB1c2VyID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS51c2VyTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS51c2VyRW1haWwpXHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcInRvRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnRvRGF0ZSxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJ1c2VyRW1haWxcIjogdXNlcixcclxuICAgICAgXCJzb3VyY2VDaGVja0xpc3RfaWRcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQsXHJcbiAgICAgIFwiY2xpZW50SWRcIjogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCxcclxuICAgICAgXCJmaWx0ZXJ0eXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZmlsdGVydHlwZSxcclxuICAgIH1cclxuICAgIHRoaXMudHJheFNlcnZpY2UuYXBwcm92ZXRhc2socGF5bG9hZCk/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRTdWNjZXNzVG9hc3QoYDxkaXY+PHNwYW4gY2xhc3M9XCJtZS04XCIgPiR7cmVzLm1lc3NhZ2V9PC9zcGFuPjwvZGl2PmApXHJcbiAgICAgICAgICB0aGlzLmFwcHJvdmFsc3RhdHVzKClcclxuICAgICAgICAgIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICdjaGVja2xpc3QnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q2hlY2tsaXN0UUEoZmFsc2UpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRUYXNrUUEodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KGVycj8uZXJyb3I/LmVycm9yKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuXHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0Q2hlY2tsaXN0UUEodHlwZTogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkU2VjdGlvbiA9IFtdXHJcbiAgICB0aGlzLnRlbXBzZWxlY3RlZFNlY3Rpb24gPSBbXVxyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2VcclxuICAgIHRoaXMudmlld2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2U7XHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCB1c2VycyA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudXNlckxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEudXNlckVtYWlsKVxyXG4gICAgbGV0IG9iaiA9IHtcclxuICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcInRvRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnRvRGF0ZSxcclxuICAgICAgXCJDaGVja2xpc3RUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tMaXN0VHlwZSwgLy8gW1wiY3VzdG9tXCIsIFwiQUlcIl1cclxuICAgICAgXCJjaGVja2xpc3ROYW1lXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSxcclxuICAgICAgXCJjaGVja2xpc3RJZFwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCxcclxuICAgICAgXCJmaWx0ZXJ0eXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZmlsdGVydHlwZSxcclxuICAgICAgXCJ1c2VyRW1haWxcIjogdXNlcnMsXHJcbiAgICAgIFwic3RvcmVJZFwiOiBzdG9yZXMsXHJcbiAgICAgIFwiYW5zd2VyVHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmFuc3dlclR5cGUsIC8vW1wiZGVzY3JpcHRpdmVcIixcInllcy9ub1wiLFwibXVsdGlwbGVjaG9pY2VzaW5nbGVcIixcIm11bHRpcGxlY2hvaWNlbXVsdGlwbGVcIixcImltYWdlXCIsXCJ2aWRlb1wiLFwiZGVzY3JpcHRpdmVJbWFnZVwiLFwibXVsdGlwbGVJbWFnZVwiXVxyXG4gICAgICBcInZpZXdGbGFnXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld0ZsYWcsIC8vW3RydWUsIGZhbHNlXVxyXG4gICAgICBcInZpZXdSZWRvXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld1JlZG8sIC8vW3RydWUsIGZhbHNlXVxyXG4gICAgICBcImZpbHRlclwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlcixcclxuICAgICAgXCJhcHByb3ZlRmlsdGVyXCI6IHRoaXMuYXBwcm92ZUZpbHRlcixcclxuICAgICAgXCJxdWVzdGlvbnNcIjogdGhpcy5zZWxlY3RlZFNlY3Rpb24ubGVuZ3RoID4gMCAmJiB0aGlzLnNlbGVjdGVkU2VjdGlvblswXS5xdWVzdGlvbnMubGVuZ3RoID4gMCA/IHRoaXMuc2VsZWN0ZWRTZWN0aW9uWzBdLnF1ZXN0aW9uc1swXSA6IFwiXCJcclxuICAgIH1cclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0Y2hlY2tsaXN0KG9iaik/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdERhdGEgPSByZXM/LmRhdGEuY2hlY2tsaXN0UXVlc3Rpb25zO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgY29uc3QgdGFyZ2V0RmllbGQgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlcnR5cGUgPT09ICdDbHVzdGVycycgPyAnc3RvcmVMaXN0JyA6ICd1c2VyTGlzdCc7XHJcbiAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCh0YXJnZXRGaWVsZCk/LnNldFZhbHVlKHJlcz8uZGF0YT8uc3RvcmVzRGV0YWlscyk7ICAgICAgICAgIFxyXG4gICAgICAgICAgdGhpcy52aWV3Q2hlY2tsaXN0cyhcImFsbFwiLCBcImFsbFwiKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdERhdGEgPSBbXTtcclxuICAgICAgICAgIHRoaXMudmlld0NoZWNrbGlzdHNEYXRhID0gW107XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWU7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgZ2V0dGFza1FBKHR5cGU6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFNlY3Rpb24gPSBbXVxyXG4gICAgdGhpcy50ZW1wc2VsZWN0ZWRTZWN0aW9uID0gW11cclxuXHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5ub0RhdGEgPSBmYWxzZVxyXG4gICAgdGhpcy52aWV3bG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnZpZXdub0RhdGEgPSBmYWxzZTtcclxuICAgIGxldCBzdG9yZXMgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnN0b3JlTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS5zdG9yZUlkKVxyXG4gICAgbGV0IHVzZXJzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS51c2VyTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS51c2VyRW1haWwpXHJcbiAgICBsZXQgb2JqID0ge1xyXG4gICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlLCAvLyBbXCJjdXN0b21cIiwgXCJBSVwiXVxyXG4gICAgICBcImNoZWNrbGlzdE5hbWVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lLFxyXG4gICAgICBcImNoZWNrbGlzdElkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkLFxyXG4gICAgICBcImZpbHRlcnR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlLFxyXG4gICAgICBcInVzZXJFbWFpbFwiOiB1c2VycyxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJhbnN3ZXJUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuYW5zd2VyVHlwZSwgLy9bXCJkZXNjcmlwdGl2ZVwiLFwieWVzL25vXCIsXCJtdWx0aXBsZWNob2ljZXNpbmdsZVwiLFwibXVsdGlwbGVjaG9pY2VtdWx0aXBsZVwiLFwiaW1hZ2VcIixcInZpZGVvXCIsXCJkZXNjcmlwdGl2ZUltYWdlXCIsXCJtdWx0aXBsZUltYWdlXCJdXHJcbiAgICAgIFwidmlld0ZsYWdcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS52aWV3RmxhZywgLy9bdHJ1ZSwgZmFsc2VdXHJcbiAgICAgIFwidmlld1JlZG9cIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS52aWV3UmVkbywgLy9bdHJ1ZSwgZmFsc2VdXHJcbiAgICAgIFwiZmlsdGVyXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZmlsdGVyLFxyXG4gICAgICBcImFwcHJvdmVGaWx0ZXJcIjogdGhpcy5hcHByb3ZlRmlsdGVyLFxyXG4gICAgICBcInF1ZXN0aW9uc1wiOiB0aGlzLnNlbGVjdGVkU2VjdGlvbi5sZW5ndGggPiAwICYmIHRoaXMuc2VsZWN0ZWRTZWN0aW9uWzBdLnF1ZXN0aW9ucy5sZW5ndGggPiAwID8gdGhpcy5zZWxlY3RlZFNlY3Rpb25bMF0ucXVlc3Rpb25zWzBdIDogXCJcIlxyXG4gICAgfVxyXG4gICAgdGhpcy50cmF4U2VydmljZS5nZXRRdWVzdGlvbnMob2JqKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuY2hlY2tsaXN0RGF0YSA9IHJlcz8uZGF0YS5jaGVja2xpc3RRdWVzdGlvbnM7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlID09PSAnQ2x1c3RlcnMnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUocmVzPy5kYXRhPy5zdG9yZXNEZXRhaWxzKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3VzZXJMaXN0Jyk/LnNldFZhbHVlKHJlcz8uZGF0YT8uc3RvcmVzRGV0YWlscylcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMudmlld1Rhc2tMaXN0KFwiYWxsXCIsIFwiYWxsXCIpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuY2hlY2tsaXN0RGF0YSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy52aWV3Q2hlY2tsaXN0c0RhdGEgPSBbXTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG4gIHZpZXdUYXNrTGlzdChzZWN0aW9uTmFtZTogYW55LCBxdWVzdGlvbk5hbWU6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEV4cG9ydCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWN0aW9uTmFtZSA9IHNlY3Rpb25OYW1lO1xyXG4gICAgdGhpcy5xdWVzdGlvbk5hbWUgPSBxdWVzdGlvbk5hbWVcclxuXHJcbiAgICB0aGlzLmxpbWl0ID0gMTtcclxuICAgIHRoaXMucGFnaW5hdGlvblNpemVzID0gWzFdO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5saW1pdCA9IDEwLFxyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvblNpemVzID0gWzEwXTtcclxuICAgIH1cclxuICAgIHRoaXMudmlld2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2VcclxuICAgIGxldCBzdG9yZXMgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnN0b3JlTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS5zdG9yZUlkKVxyXG4gICAgbGV0IHVzZXJzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS51c2VyTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS51c2VyRW1haWwpXHJcbiAgICB0aGlzLnZpZXdDaGVja2xpc3Rzb3B0aW9ucyA9IHtcclxuICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcInRvRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnRvRGF0ZSxcclxuICAgICAgXCJDaGVja2xpc3RUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudHlwZSwgLy8gW1wiY2hlY2tsaXN0XCIsIFwidGFza1wiXVxyXG4gICAgICBcImNoZWNrbGlzdE5hbWVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lLFxyXG4gICAgICBcImZpbHRlcnR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlLFxyXG4gICAgICBcInVzZXJFbWFpbFwiOiB1c2VycyxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJhbnN3ZXJUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuYW5zd2VyVHlwZSwgLy9bXCJkZXNjcmlwdGl2ZVwiLFwieWVzL25vXCIsXCJtdWx0aXBsZWNob2ljZXNpbmdsZVwiLFwibXVsdGlwbGVjaG9pY2VtdWx0aXBsZVwiLFwiaW1hZ2VcIixcInZpZGVvXCIsXCJkZXNjcmlwdGl2ZUltYWdlXCIsXCJtdWx0aXBsZUltYWdlXCJdICAgICAgXHJcbiAgICAgIFwib2Zmc2V0XCI6ICh0aGlzLm9mZnNldCAtIDEpLFxyXG4gICAgICBcImxpbWl0XCI6IHRoaXMubGltaXQsXHJcbiAgICAgIFwiY2hlY2tsaXN0SWRcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQsXHJcbiAgICAgIFwic291cmNlQ2hlY2tMaXN0X2lkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkLFxyXG4gICAgICBcInZpZXdGbGFnXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld0ZsYWcsXHJcbiAgICAgIFwidmlld1JlZG9cIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS52aWV3UmVkbywgLy9bdHJ1ZSwgZmFsc2VdXHJcbiAgICAgIFwicXVlc3Rpb25zXCI6IHRoaXMuc2VsZWN0ZWRTZWN0aW9uLFxyXG4gICAgICBcImZpbHRlclwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlcixcclxuICAgICAgXCJhcHByb3ZlRmlsdGVyXCI6IHRoaXMuYXBwcm92ZUZpbHRlcixcclxuICAgIH1cclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0QW5zd2Vycyh0aGlzLnZpZXdDaGVja2xpc3Rzb3B0aW9ucyk/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLmFwcHJvdmFsc3RhdHVzKClcclxuICAgICAgICAgIHRoaXMudmlld0NoZWNrbGlzdHNEYXRhID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSB0aGlzLnZpZXdDaGVja2xpc3RzRGF0YS50b3RhbF9jb3VudFxyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2VcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy52aWV3Q2hlY2tsaXN0c0RhdGEgPSBbXVxyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB2aWV3Q2hlY2tsaXN0cyhzZWN0aW9uTmFtZTogYW55LCBxdWVzdGlvbk5hbWU6IGFueSkge1xyXG4gICAgLy8gdGhpcy5zZWxlY3RlZFNlY3Rpb24gPSBbXSAgICBcclxuICAgIHRoaXMuc2VsZWN0ZWRFeHBvcnQgPSBmYWxzZTtcclxuICAgIHRoaXMuc2VjdGlvbk5hbWUgPSBzZWN0aW9uTmFtZTtcclxuICAgIHRoaXMucXVlc3Rpb25OYW1lID0gcXVlc3Rpb25OYW1lXHJcblxyXG4gICAgdGhpcy5saW1pdCA9IDE7XHJcbiAgICB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFsxXTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMubGltaXQgPSAxMCxcclxuICAgICAgICB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFsxMF07XHJcbiAgICB9XHJcbiAgICB0aGlzLnZpZXdsb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlXHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCB1c2VycyA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudXNlckxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEudXNlckVtYWlsKVxyXG4gICAgdGhpcy52aWV3Q2hlY2tsaXN0c29wdGlvbnMgPSB7XHJcbiAgICAgIFwiZnJvbURhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSxcclxuICAgICAgXCJ0b0RhdGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50b0RhdGUsXHJcbiAgICAgIFwiQ2hlY2tsaXN0VHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrTGlzdFR5cGUsIC8vIFtcImNoZWNrbGlzdFwiLCBcInRhc2tcIl1cclxuICAgICAgXCJjaGVja2xpc3ROYW1lXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSxcclxuICAgICAgXCJmaWx0ZXJ0eXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZmlsdGVydHlwZSxcclxuICAgICAgXCJzdG9yZUlkXCI6IHN0b3JlcyxcclxuICAgICAgXCJ1c2VyRW1haWxcIjogdXNlcnMsXHJcbiAgICAgIFwiYW5zd2VyVHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmFuc3dlclR5cGUsIC8vW1wiZGVzY3JpcHRpdmVcIixcInllcy9ub1wiLFwibXVsdGlwbGVjaG9pY2VzaW5nbGVcIixcIm11bHRpcGxlY2hvaWNlbXVsdGlwbGVcIixcImltYWdlXCIsXCJ2aWRlb1wiLFwiZGVzY3JpcHRpdmVJbWFnZVwiLFwibXVsdGlwbGVJbWFnZVwiXSAgICAgIFxyXG4gICAgICBcIm9mZnNldFwiOiAodGhpcy5vZmZzZXQgLSAxKSxcclxuICAgICAgXCJsaW1pdFwiOiB0aGlzLmxpbWl0LFxyXG4gICAgICBcImNoZWNrbGlzdElkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkLFxyXG4gICAgICBcInNvdXJjZUNoZWNrTGlzdF9pZFwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCxcclxuICAgICAgXCJ2aWV3RmxhZ1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdGbGFnLFxyXG4gICAgICBcInZpZXdSZWRvXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld1JlZG8sLy9bdHJ1ZSwgZmFsc2VdXHJcbiAgICAgIFwicXVlc3Rpb25zXCI6IHRoaXMuc2VsZWN0ZWRTZWN0aW9uLFxyXG4gICAgICBcImZpbHRlclwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlcixcclxuICAgICAgXCJhcHByb3ZlRmlsdGVyXCI6IHRoaXMuYXBwcm92ZUZpbHRlcixcclxuICAgIH1cclxuICAgIHRoaXMudHJheFNlcnZpY2Uudmlld0NoZWNrbGlzdHModGhpcy52aWV3Q2hlY2tsaXN0c29wdGlvbnMpPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSk/LnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5hcHByb3ZhbHN0YXR1cygpXHJcbiAgICAgICAgICB0aGlzLnZpZXdDaGVja2xpc3RzRGF0YSA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gdGhpcy52aWV3Q2hlY2tsaXN0c0RhdGEudG90YWxfY291bnRcclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudmlld0NoZWNrbGlzdHNEYXRhID0gW11cclxuICAgICAgICAgIHRoaXMudmlld2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld25vRGF0YSA9IHRydWVcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG4gIHRhc2tDcmVhdGUoKSB7IH1cclxuXHJcbiAgc2hvd3NpZGVuYXY6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHNpZGVuYXYoKSB7XHJcbiAgICB0aGlzLnNob3dzaWRlbmF2ID0gIXRoaXMuc2hvd3NpZGVuYXY7XHJcbiAgfVxyXG5cclxuICBvblBhZ2VDaGFuZ2UocGFnZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZTtcclxuICB9XHJcblxyXG5cclxuICBjaGVja0FJY2hlY2tsaXN0KCkge1xyXG4gICAgaWYgKHRoaXMuY29tYmluZWRDaGVja2xpc3QuaW5jbHVkZXModGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb25QYWdlQ2hhbmdldmlldyhwYWdlT2Zmc2V0OiBudW1iZXIpIHtcclxuICAgIHRoaXMub2Zmc2V0ID0gcGFnZU9mZnNldDtcclxuICAgIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCA9PT0gJ3N0b3Jlb3BlbmFuZGNsb3NlJykge1xyXG4gICAgICB0aGlzLnN0b3JlT3BlbmNsb3NldmlldygpXHJcbiAgICB9IGlmICh0aGlzLmJveGltYWdlQ2hlY2tsaXN0LmluY2x1ZGVzKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkKSkge1xyXG4gICAgICB0aGlzLnF1ZXVlYWxlcnR2aWV3KClcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pbWFnZUNoZWNrbGlzdC5pbmNsdWRlcyh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCkpIHtcclxuICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZDtcclxuICAgICAgdGhpcy5nZXRtb2JpbGVVc2FnZURhdGF2aWV3KClcclxuICAgIH0gZWxzZSBpZiAodGhpcy52aWRlb0NoZWNrbGlzdC5pbmNsdWRlcyh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCkpIHtcclxuICAgICAgdGhpcy5zZWxlY3QgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZDtcclxuICAgICAgdGhpcy5nZXRjdXN0b21lcnVuYXR0ZW5kZWR2aWV3KClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICdjaGVja2xpc3QnKSB7XHJcbiAgICAgICAgdGhpcy52aWV3Q2hlY2tsaXN0cygnJywgJycpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudmlld1Rhc2tMaXN0KFwiYWxsXCIsIFwiYWxsXCIpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogMzAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgb25QYWdlU2l6ZUNoYW5nZShwYWdlU2l6ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmxpbWl0ID0gcGFnZVNpemU7XHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQgPT09ICdzdG9yZW9wZW5hbmRjbG9zZScpIHtcclxuICAgICAgdGhpcy5zdG9yZU9wZW5jbG9zZXZpZXcoKVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmJveGltYWdlQ2hlY2tsaXN0LmluY2x1ZGVzKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkKSkge1xyXG4gICAgICB0aGlzLnF1ZXVlYWxlcnR2aWV3KClcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pbWFnZUNoZWNrbGlzdC5pbmNsdWRlcyh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCkpIHtcclxuICAgICAgdGhpcy5nZXRtb2JpbGVVc2FnZURhdGF2aWV3KClcclxuICAgIH0gZWxzZSBpZiAodGhpcy52aWRlb0NoZWNrbGlzdC5pbmNsdWRlcyh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCkpIHtcclxuICAgICAgdGhpcy5jdXN0b21lcnVuYXR0ZW5kZWRsaXN0KGZhbHNlKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudHlwZSA9PT0gJ2NoZWNrbGlzdCcpIHtcclxuICAgICAgICB0aGlzLnZpZXdDaGVja2xpc3RzKCcnLCAnJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy52aWV3VGFza0xpc3QoXCJhbGxcIiwgXCJhbGxcIilcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5leHBvcnRTaG93ID0gZmFsc2U7XHJcbiAgfVxyXG4gIGV4cG9ydFNob3cgPSBmYWxzZTtcclxuICBleHBvcnRMYWJlbDogc3RyaW5nID0gJ0V4cG9ydCc7XHJcbiAgZXhwb3J0RGV0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLmV4cG9ydFNob3cgPSAhdGhpcy5leHBvcnRTaG93O1xyXG4gIH1cclxuICBxdWVzdGlvbnNjb3VudChkYXRhOiBhbnkpIHtcclxuICAgIGxldCBjb3VudCA9IDBcclxuICAgIGRhdGEuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGNvdW50ID0gY291bnQgKyBlbGVtZW50LnF1ZXN0aW9ucy5sZW5ndGhcclxuXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBjb3VudDtcclxuICB9XHJcbiAgc2V0RXhwb3J0QXNQUFQodHlwZTogYW55LCBmaWxlVHlwZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmV4cG9ydExhYmVsID0gdHlwZTsgIC8vIFVwZGF0ZSB0aGUgbGFiZWwgdGV4dFxyXG4gICAgdGhpcy5leHBvcnRTaG93ID0gZmFsc2U7ICAvLyBDbG9zZSB0aGUgZXhwb3J0IG1lbnUgYWZ0ZXIgc2VsZWN0aW9uXHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCB1c2VycyA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudXNlckxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEudXNlckVtYWlsKVxyXG5cclxuICAgIGlmIChmaWxlVHlwZSA9PT0gJ3BwdCcpIHtcclxuICAgICAgbGV0IHN0YXJ0ID0gZGF5anModGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5mcm9tRGF0ZSk7XHJcbiAgICAgIGxldCBlbmQgPSBkYXlqcyh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnRvRGF0ZSk7XHJcbiAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBlbmQuZGlmZihzdGFydCwgJ2RheXMnKTtcclxuXHJcbiAgICAgIGlmIChkaWZmZXJlbmNlID09PSAyICYmIHRoaXMucXVlc3Rpb25zY291bnQodGhpcy5zZWxlY3RlZFNlY3Rpb24pID4gMSkge1xyXG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoYFBsZWFzZSBzZWxlY3QgbWF4aW11bSBvZiAxIHF1ZXN0aW9uIG9ubHlgKVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGlmIChkaWZmZXJlbmNlID09PSAxICYmIHRoaXMucXVlc3Rpb25zY291bnQodGhpcy5zZWxlY3RlZFNlY3Rpb24pID4gMykge1xyXG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoYFBsZWFzZSBzZWxlY3QgbWF4aW11bSBvZiAzIHF1ZXN0aW9uIG9ubHlgKVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGlmIChkaWZmZXJlbmNlID09PSAwICYmIHRoaXMucXVlc3Rpb25zY291bnQodGhpcy5zZWxlY3RlZFNlY3Rpb24pID4gMykge1xyXG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoYFBsZWFzZSBzZWxlY3QgbWF4aW11bSBvZiAzIHF1ZXN0aW9uIG9ubHlgKVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZXhwb3J0TGFiZWwgPSAnRXhwb3J0J1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBcImRvd25sb2FkSW5zZXJ0RnJvbVwiOiBcImdhbGxlcnlcIixcclxuICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZyb21EYXRlLFxyXG4gICAgICBcInRvRGF0ZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnRvRGF0ZSxcclxuICAgICAgXCJjaGVja0xpc3RUeXBlXCI6IHRoaXMuc2VsZWN0LFxyXG4gICAgICBcImNoZWNrbGlzdElkXCI6IFtdLFxyXG4gICAgICBcInNvdXJjZUNoZWNrTGlzdF9pZFwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCxcclxuICAgICAgXCJjaGVja2xpc3ROYW1lXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuY2hlY2tsaXN0TmFtZSxcclxuICAgICAgXCJhbnN3ZXJUeXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuYW5zd2VyVHlwZSxcclxuICAgICAgXCJmaWxlVHlwZVwiOiBmaWxlVHlwZSxcclxuICAgICAgXCJzdG9yZUlkc1wiOiBzdG9yZXMsXHJcbiAgICAgIFwidXNlckVtYWlsTGlzdFwiOiB1c2VycyxcclxuICAgICAgXCJjbGllbnRJZFwiOiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50LFxyXG4gICAgICBcInF1ZXN0aW9uc1wiOiB0aGlzLnNlbGVjdGVkU2VjdGlvbixcclxuICAgICAgXCJwcmV2aWV3VHlwZVwiOiB0aGlzLnByZXZpZXdUeXBlLFxyXG4gICAgICBcInZpZXdGbGFnXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld0ZsYWcsXHJcbiAgICAgIFwidmlld1JlZG9cIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS52aWV3UmVkbywgLy9bdHJ1ZSwgZmFsc2VdXHJcbiAgICAgIFwiaW5zZXJ0VHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGUsXHJcbiAgICAgIFwiZmlsdGVyXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZmlsdGVyLFxyXG4gICAgICBcImFwcHJvdmVGaWx0ZXJcIjogdGhpcy5hcHByb3ZlRmlsdGVyLFxyXG4gICAgICBcImZpbHRlcnR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlXHJcbiAgICB9XHJcbiAgICBsZXQgY2xpZW50aW5mbyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJjbGllbnQtZGV0YWlsc1wiKSB8fCBcIlwiKVxyXG4gICAgbGV0IHVzZXJpbmZvID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInVzZXItaW5mb1wiKSB8fCBcIlwiKVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ID09PSAnY3VzdG9tJyB8fCB0aGlzLnNlbGVjdCA9PT0gJ3Rhc2snKSB7XHJcbiAgICAgIGlmICgoY2xpZW50aW5mbz8udHJheERhdGVSYW5nZSA9PT0gNyB8fCB1c2VyaW5mbz8udHJheERhdGVSYW5nZSA9PT0gNykgJiYgdHlwZSA9PT0gJ0V4cG9ydCBhcyBDU1YnIHx8IHR5cGUgPT09ICdFeHBvcnQgYXMgUFBUJyB8fCB0eXBlID09PSAnRXhwb3J0IGFzIFpJUCcpIHtcclxuICAgICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oRXhwb3J0R2FsbGVyeUNvbXBvbmVudCwge1xyXG4gICAgICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgICAgICBzaXplOiBcImxnXCIsXHJcbiAgICAgICAgICBzY3JvbGxhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgd2luZG93Q2xhc3M6IFwiY3VzdG9tLWhlaWdodC1tb2RhbFwiICAvLyA8LS0gQWRkIGEgY3VzdG9tIGNsYXNzIGhlcmUgIFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnR5cGUgPSB0eXBlO1xyXG4gICAgICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnBheWxvYWQgPSBwYXlsb2FkO1xyXG5cclxuICAgICAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0U3VjY2Vzc1RvYXN0KGA8ZGl2PjxzcGFuIGNsYXNzPVwibWUtOFwiID5Eb3dubG9hZGluZyB5b3VyIHJlcG9ydHM8L3NwYW4+PGEgaHJlZj1cIm5vdGlmaWNhdGlvbnMvYWxlcnRzP3RhYj1kb3dubG9hZFwiIHN0eWxlPVwiY29sb3I6Izk5YzNmZjsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsgY3Vyc29yOnBvaW50ZXJcIiA+VmlldzwvYT48L2Rpdj5gKVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJlcnJvclwiKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChgU29tZXRoaW5nIHdlbnQgd3JvbmcgIWApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5leHBvcnRMYWJlbCA9ICdFeHBvcnQnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRyYXhTZXJ2aWNlLnJlcG9ydFRhYmxlRXhwb3J0KHBheWxvYWQpPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSk/LnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0U3VjY2Vzc1RvYXN0KGA8ZGl2PjxzcGFuIGNsYXNzPVwibWUtOFwiID5Eb3dubG9hZGluZyB5b3VyIHJlcG9ydHM8L3NwYW4+PGEgaHJlZj1cIm5vdGlmaWNhdGlvbnMvYWxlcnRzP3RhYj1kb3dubG9hZFwiIHN0eWxlPVwiY29sb3I6Izk5YzNmZjsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsgY3Vyc29yOnBvaW50ZXJcIiA+VmlldzwvYT48L2Rpdj5gKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoYFNvbWV0aGluZyB3ZW50IHdyb25nICFgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0TGFiZWwgPSAnRXhwb3J0J1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3QgPT09ICdzY3J1bScgfHwgdGhpcy5zZWxlY3QgPT09ICdjbGVhbmluZycgfHwgdGhpcy5zZWxlY3QgPT09ICdzdG9yZW9wZW5hbmRjbG9zZScgfHwgdGhpcy5zZWxlY3QgPT09ICdpbnZlbnRvcnljb3VudCcgfHwgdGhpcy5zZWxlY3QgPT09ICdjYXJzYXR0ZW5kZWQnIHx8IHRoaXMuc2VsZWN0ID09PSAnbnVtYmVycGxhdGVpbmZvJyB8fCB0aGlzLnNlbGVjdCA9PT0gJ3ZlaGljbGVfY2hlY2tfaW4nKSB7XHJcblxyXG4gICAgICBpZiAodGhpcy5zZWxlY3QgIT0gJ3N0b3Jlb3BlbmFuZGNsb3NlJykge1xyXG4gICAgICAgIHRoaXMucHJldmlld1R5cGUgPSAndmlkZW8nXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudHJheFNlcnZpY2UuYWljaGVja2xpc3RFeHBvcnQocGF5bG9hZCk/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRTdWNjZXNzVG9hc3QoYDxkaXY+PHNwYW4gY2xhc3M9XCJtZS04XCIgPkRvd25sb2FkaW5nIHlvdXIgcmVwb3J0czwvc3Bhbj48YSBocmVmPVwibm90aWZpY2F0aW9ucy9hbGVydHM/dGFiPWRvd25sb2FkXCIgc3R5bGU9XCJjb2xvcjojOTljM2ZmOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyBjdXJzb3I6cG9pbnRlclwiID5WaWV3PC9hPjwvZGl2PmApXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KGBTb21ldGhpbmcgd2VudCB3cm9uZyAhYClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZXhwb3J0TGFiZWwgPSAnRXhwb3J0J1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHR5cGVDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5yZW1vdmVRdWVyeVBhcmFtcygpXHJcbiAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgndHlwZScpPy5zZXRWYWx1ZShldmVudClcclxuICAgIHRoaXMuc2hvd3NpbmdsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93bXVsdGkgPSB0cnVlO1xyXG4gICAgdGhpcy5hbnN3ZXJGaWx0ZXIgPSBbXVxyXG4gICAgaWYgKGV2ZW50ID09PSAndGFzaycpIHtcclxuICAgICAgdGhpcy50cmF4U2VydmljZS5nZXRTdG9yZXNsaXN0KHsgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycy5jbGllbnQsIGNsdXN0ZXJzOiB0aGlzLmdyb3VwcywgY2l0eTogW10gfSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gcmVzLmRhdGEuc3RvcmVzRGF0YTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZXMgPSByZXMuZGF0YS5zdG9yZXNEYXRhXHJcbiAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8uc2V0VmFsdWUodGhpcy5zdG9yZUxpc3QpXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0QWxsVGFza3MoZmFsc2UpXHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja0xpc3RUeXBlJyk/LnNldFZhbHVlKCdjdXN0b20nKVxyXG4gICAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldFN0b3Jlc2xpc3QoeyBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudCwgY2x1c3RlcnM6IHRoaXMuZ3JvdXBzLCBjaXR5OiBbXSB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSByZXMuZGF0YS5zdG9yZXNEYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlcyA9IHJlcy5kYXRhLnN0b3Jlc0RhdGFcclxuICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZSh0aGlzLnN0b3JlTGlzdClcclxuICAgICAgICAgICAgdGhpcy5nZXRBbGxDaGVja0xpc3RzKHRydWUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG5cclxuICBnZXRBbGxUYXNrcyh0eXBlOiBhbnkpIHtcclxuICAgIGxldCBzdG9yZXMgPSB0aGlzLnN0b3Jlcz8ubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIGZyb21EYXRlOiB0aGlzLmdhbGxlcnlGb3JtLmdldCgnZnJvbURhdGUnKT8udmFsdWUsXHJcbiAgICAgIHRvRGF0ZTogdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3RvRGF0ZScpPy52YWx1ZSxcclxuICAgICAgc3RvcmVJZDogc3RvcmVzLFxyXG4gICAgICBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzPy5jbGllbnQsXHJcbiAgICAgIHNvcnRDb2x1bW5OYW1lOiBcImNoZWNrTGlzdE5hbWVcIixcclxuICAgICAgc29ydEJ5OiAxXHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldFRhc2tMaXN0KHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdHMgPSByZXMuZGF0YS5jaGVja2xpc3REYXRhXHJcblxyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW1zLnNvdXJjZUNoZWNrTGlzdF9pZCAmJiB0aGlzLnF1ZXJ5UGFyYW1zLmNoZWNrbGlzdFR5cGUgPT0gJ3Rhc2snKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3NvdXJjZUNoZWNrTGlzdF9pZCcpPy5zZXRWYWx1ZSh0aGlzLnF1ZXJ5UGFyYW1zLnNvdXJjZUNoZWNrTGlzdF9pZClcclxuICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgndHlwZScpPy5zZXRWYWx1ZSgndGFzaycpXHJcbiAgICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ2NoZWNrTGlzdFR5cGUnKT8uc2V0VmFsdWUodGhpcy5xdWVyeVBhcmFtcy5jaGVja2xpc3RUeXBlKVxyXG4gICAgICAgICAgICAgIGxldCBnZXRjaGVja2xpc3QgPSB0aGlzLmNoZWNrbGlzdHMuZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlLnNvdXJjZUNoZWNrTGlzdF9pZCA9PT0gdGhpcy5xdWVyeVBhcmFtcy5zb3VyY2VDaGVja0xpc3RfaWQpXHJcblxyXG4gICAgICAgICAgICAgIGlmIChnZXRjaGVja2xpc3QgJiYgZ2V0Y2hlY2tsaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja2xpc3ROYW1lJyk/LnNldFZhbHVlKGdldGNoZWNrbGlzdFswXT8uY2hlY2tMaXN0TmFtZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja0xpc3REZXNjcmlwdGlvbicpPy5zZXRWYWx1ZShnZXRjaGVja2xpc3RbMF0/LmNoZWNrTGlzdERlc2NyaXB0aW9uKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja2xpc3ROYW1lID0gZ2V0Y2hlY2tsaXN0WzBdPy5jaGVja0xpc3ROYW1lXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIHRoaXMucmVtb3ZlUXVlcnlQYXJhbXMoKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCdjaGVja2xpc3ROYW1lJyk/LnNldFZhbHVlKHRoaXMuY2hlY2tsaXN0c1swXT8uY2hlY2tMaXN0TmFtZSlcclxuICAgICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc291cmNlQ2hlY2tMaXN0X2lkJyk/LnNldFZhbHVlKHRoaXMuY2hlY2tsaXN0c1swXT8uc291cmNlQ2hlY2tMaXN0X2lkKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXR0YXNrUUEoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LCAwKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdHMgPSBbXVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldFRhc2tRQSh0eXBlOiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRTZWN0aW9uID0gW11cclxuICAgIHRoaXMudGVtcHNlbGVjdGVkU2VjdGlvbiA9IFtdXHJcblxyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2VcclxuICAgIHRoaXMudmlld2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2U7XHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCB1c2VyID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS51c2VyTGlzdC5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YS51c2VyRW1haWwpXHJcbiAgICBsZXQgb2JqID0ge1xyXG4gICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlLCAvLyBbXCJjdXN0b21cIiwgXCJBSVwiXVxyXG4gICAgICBcImNoZWNrbGlzdE5hbWVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lLFxyXG4gICAgICBcImNoZWNrbGlzdElkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkLFxyXG4gICAgICBcInN0b3JlSWRcIjogc3RvcmVzLFxyXG4gICAgICBcInVzZXJFbWFpbFwiOiB1c2VyLFxyXG4gICAgICBcImZpbHRlcnR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXJ0eXBlLFxyXG4gICAgICBcImFuc3dlclR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5hbnN3ZXJUeXBlLCAvL1tcImRlc2NyaXB0aXZlXCIsXCJ5ZXMvbm9cIixcIm11bHRpcGxlY2hvaWNlc2luZ2xlXCIsXCJtdWx0aXBsZWNob2ljZW11bHRpcGxlXCIsXCJpbWFnZVwiLFwidmlkZW9cIixcImRlc2NyaXB0aXZlSW1hZ2VcIixcIm11bHRpcGxlSW1hZ2VcIl1cclxuICAgICAgXCJ2aWV3RmxhZ1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdGbGFnLCAvL1t0cnVlLCBmYWxzZV1cclxuICAgICAgXCJ2aWV3UmVkb1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdSZWRvLCAvL1t0cnVlLCBmYWxzZV1cclxuICAgICAgXCJmaWx0ZXJcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXIsXHJcbiAgICAgIFwiYXBwcm92ZUZpbHRlclwiOiB0aGlzLmFwcHJvdmVGaWx0ZXIsXHJcbiAgICAgIFwicXVlc3Rpb25zXCI6IHRoaXMuc2VsZWN0ZWRTZWN0aW9uLmxlbmd0aCA+IDAgJiYgdGhpcy5zZWxlY3RlZFNlY3Rpb25bMF0ucXVlc3Rpb25zLmxlbmd0aCA+IDAgPyB0aGlzLnNlbGVjdGVkU2VjdGlvblswXS5xdWVzdGlvbnNbMF0gOiBcIlwiXHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmdldFF1ZXN0aW9ucyhvYmopPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSk/LnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5jaGVja2xpc3REYXRhID0gcmVzPy5kYXRhLmNoZWNrbGlzdFF1ZXN0aW9ucztcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgIGlmICh0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlcnR5cGUgPT09ICdDbHVzdGVycycpIHtcclxuICAgICAgICAgICAgdGhpcy5nYWxsZXJ5Rm9ybS5nZXQoJ3N0b3JlTGlzdCcpPy5zZXRWYWx1ZShyZXM/LmRhdGE/LnN0b3Jlc0RldGFpbHMpXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgndXNlckxpc3QnKT8uc2V0VmFsdWUocmVzPy5kYXRhPy5zdG9yZXNEZXRhaWxzKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy52aWV3VGFza0xpc3QoXCJhbGxcIiwgXCJhbGxcIilcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jaGVja2xpc3REYXRhID0gW107XHJcbiAgICAgICAgICB0aGlzLnZpZXdDaGVja2xpc3RzRGF0YSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnZpZXdsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnZpZXdub0RhdGEgPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIHZpZXdUYXNrcyhzZWN0aW9uTmFtZTogYW55LCBxdWVzdGlvbk5hbWU6IGFueSkge1xyXG4gICAgLy8gdGhpcy5zZWxlY3RlZFNlY3Rpb24gPSBbXSAgICBcclxuICAgIHRoaXMuc2VsZWN0ZWRFeHBvcnQgPSBmYWxzZTtcclxuICAgIHRoaXMuc2VjdGlvbk5hbWUgPSBzZWN0aW9uTmFtZTtcclxuICAgIHRoaXMucXVlc3Rpb25OYW1lID0gcXVlc3Rpb25OYW1lXHJcblxyXG4gICAgdGhpcy5saW1pdCA9IDE7XHJcbiAgICB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFsxXTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkU2VjdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMubGltaXQgPSAxMCxcclxuICAgICAgICB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFsxMF07XHJcbiAgICB9XHJcbiAgICB0aGlzLnZpZXdsb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMudmlld25vRGF0YSA9IGZhbHNlXHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIHRoaXMudmlld0NoZWNrbGlzdHNvcHRpb25zID0ge1xyXG4gICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja0xpc3RUeXBlLCAvLyBbXCJjaGVja2xpc3RcIiwgXCJ0YXNrXCJdXHJcbiAgICAgIFwiY2hlY2tsaXN0TmFtZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmNoZWNrbGlzdE5hbWUsXHJcbiAgICAgIFwic3RvcmVJZFwiOiBzdG9yZXMsXHJcbiAgICAgIFwiYW5zd2VyVHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmFuc3dlclR5cGUsIC8vW1wiZGVzY3JpcHRpdmVcIixcInllcy9ub1wiLFwibXVsdGlwbGVjaG9pY2VzaW5nbGVcIixcIm11bHRpcGxlY2hvaWNlbXVsdGlwbGVcIixcImltYWdlXCIsXCJ2aWRlb1wiLFwiZGVzY3JpcHRpdmVJbWFnZVwiLFwibXVsdGlwbGVJbWFnZVwiXSAgICAgIFxyXG4gICAgICBcIm9mZnNldFwiOiAodGhpcy5vZmZzZXQgLSAxKSxcclxuICAgICAgXCJsaW1pdFwiOiB0aGlzLmxpbWl0LFxyXG4gICAgICBcImNoZWNrbGlzdElkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkLFxyXG4gICAgICBcInNvdXJjZUNoZWNrTGlzdF9pZFwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCxcclxuICAgICAgXCJ2aWV3RmxhZ1wiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnZpZXdGbGFnLFxyXG4gICAgICBcInZpZXdSZWRvXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld1JlZG8sIC8vW3RydWUsIGZhbHNlXVxyXG4gICAgICBcInF1ZXN0aW9uc1wiOiB0aGlzLnNlbGVjdGVkU2VjdGlvbixcclxuICAgICAgXCJmaWx0ZXJcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXIsXHJcbiAgICAgIFwiYXBwcm92ZUZpbHRlclwiOiB0aGlzLmFwcHJvdmVGaWx0ZXIsXHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLnZpZXdDaGVja2xpc3RzKHRoaXMudmlld0NoZWNrbGlzdHNvcHRpb25zKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMudmlld0NoZWNrbGlzdHNEYXRhID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSB0aGlzLnZpZXdDaGVja2xpc3RzRGF0YS50b3RhbF9jb3VudFxyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2VcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy52aWV3Q2hlY2tsaXN0c0RhdGEgPSBbXVxyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuXHJcbiAgdGFza3JlZGlyZWN0KHF1ZXN0aW9uOiBhbnksIHN0b3JlUHJvZmlsZTogYW55LCBjaGVja2xpc3RJbmZvOiBhbnkpIHtcclxuICAgIGlmIChzdG9yZVByb2ZpbGU/LnN0b3JlX2lkICYmIHN0b3JlUHJvZmlsZT8uc3RvcmVfaWQgIT0gJycpIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnLycsIHsgc2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21hbmFnZS90cmF4L2dhbGxlcnknXSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtcclxuICAgICAgICAgICAgICBDaGVja2xpc3REYXRlOiBkYXlqcyhxdWVzdGlvbi50YXNrRGF0ZSA/IHF1ZXN0aW9uLnRhc2tEYXRlIDogY2hlY2tsaXN0SW5mby5kYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQnKSxcclxuICAgICAgICAgICAgICBzdG9yZUlkOiBzdG9yZVByb2ZpbGU/LnN0b3JlX2lkLFxyXG4gICAgICAgICAgICAgIGNoZWNrbGlzdFR5cGU6IFwidGFza1wiLFxyXG4gICAgICAgICAgICAgIHNvdXJjZUNoZWNrTGlzdF9pZDogcXVlc3Rpb24udGFza0lkLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxyXG4gICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nLCB7IHNraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZSB9KS50aGVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tYW5hZ2UvdHJheC9nYWxsZXJ5J10sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XHJcbiAgICAgICAgICAgICAgQ2hlY2tsaXN0RGF0ZTogZGF5anMocXVlc3Rpb24udGFza0RhdGUgPyBxdWVzdGlvbi50YXNrRGF0ZSA6IGNoZWNrbGlzdEluZm8uZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJyksXHJcbiAgICAgICAgICAgICAgdXNlckVtYWlsOiBzdG9yZVByb2ZpbGU/LnVzZXJFbWFpbCxcclxuICAgICAgICAgICAgICBjaGVja2xpc3RUeXBlOiBcInRhc2tcIixcclxuICAgICAgICAgICAgICBzb3VyY2VDaGVja0xpc3RfaWQ6IHF1ZXN0aW9uLnRhc2tJZCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgVmlld0luRGV0YWlscyhkYXRhOiBhbnksIGNoZWNrbGlzdEluZm86IGFueSwgc3RvcmVQcm9maWxlOiBhbnksIHNlY3Rpb246IGFueSkge1xyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFRhc2tMb2dzQ29tcG9uZW50LCB7IGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbGcnLCB9KTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLm9wZXJhdGlvbnR5cGUgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGU7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5zb3VyY2VDaGVja0xpc3RfaWQgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZDtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmlucHV0RGF0YSA9IGRhdGE7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5jaGVja2xpc3RJbmZvID0gY2hlY2tsaXN0SW5mbztcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnN0b3JlUHJvZmlsZSA9IHN0b3JlUHJvZmlsZTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnNlY3Rpb25JbmZvID0gc2VjdGlvbjtcclxuXHJcbiAgfVxyXG5cclxuICBhZGRUYXNrKHR5cGU6IGFueSwgZGF0YTogYW55LCBjaGVja2xpc3RJbmZvOiBhbnksIHN0b3JlUHJvZmlsZTogYW55LCBzZWN0aW9uOiBhbnkpIHtcclxuXHJcbiAgICAvLyBpZihkYXRhLmFuc3dlclR5cGUgPT09XCJtdWx0aXBsZWNob2ljZXNpbmdsZVwifHxkYXRhLmFuc3dlclR5cGUgPT09XCJtdWx0aXBsZWNob2ljZW11bHRpcGxlXCIpe1xyXG4gICAgLy8gICBkYXRhLmFuc3dlcnMgPSBbXVxyXG4gICAgLy8gfVxyXG4gICAgZGF0YS5xdWVzdGlvblJlZmVyZW5jZUltYWdlID0gW2RhdGEucXVlc3Rpb25SZWZlcmVuY2VJbWFnZV1cclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihBZGRUYXNrQ29tcG9uZW50LCB7XHJcbiAgICAgIGJhY2tkcm9wOiAnc3RhdGljJ1xyXG4gICAgfSk7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50eXBlID0gdHlwZTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLm9wZXJhdGlvbnR5cGUgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGU7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5zb3VyY2VDaGVja0xpc3RfaWQgPSB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZDtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmlucHV0RGF0YSA9IGRhdGE7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5jaGVja2xpc3RJbmZvID0gY2hlY2tsaXN0SW5mbztcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnN0b3JlUHJvZmlsZSA9IHN0b3JlUHJvZmlsZTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnNlY3Rpb25JbmZvID0gc2VjdGlvbjtcclxuICAgIFxyXG5cclxuICAgIGRhdGE/LmFuc3dlcnMuZm9yRWFjaCgoYW5zOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGFucz8ucmVmZXJlbmNlSW1hZ2UgJiYgYW5zPy5yZWZlcmVuY2VJbWFnZSAhPSAnJyAmJiBhbnM/LnJlZmVyZW5jZUltYWdlICE9IG51bGwpIHtcclxuICAgICAgICBhbnMucmVmZXJlbmNlSW1hZ2UgPSBbYW5zPy5yZWZlcmVuY2VJbWFnZV1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50YXNrRGV0YWlscyA9IHtcclxuICAgICAgc2VjdGlvbnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcImlkXCI6IFwiXCIsXHJcbiAgICAgICAgICBcIm5hbWVcIjogXCJcIixcclxuICAgICAgICAgIFwicXVlc3Rpb25zXCI6IFtkYXRhXVxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkU3RvcmVzPVtdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVXNlcnM9W107XHJcbiAgICAgIGlmIChyZXN1bHQgPT0gJ3N1Ym1pdCcpIHtcclxuICAgICAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlID09PSAnY2hlY2tsaXN0Jykge1xyXG4gICAgICAgICAgdGhpcy5nZXRDaGVja2xpc3RRQShmYWxzZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZ2V0VGFza1FBKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudHlwZSlcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZGF0YS5xdWVzdGlvblJlZmVyZW5jZUltYWdlID0gJydcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgYXBwcm92YWxzdGF0dXMoKSB7XHJcbiAgICBsZXQgc3RvcmVzID0gdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5zdG9yZUxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEuc3RvcmVJZClcclxuICAgIGxldCB1c2VycyA9IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudXNlckxpc3QubWFwKChkYXRhOiBhbnkpID0+IGRhdGEudXNlckVtYWlsKVxyXG4gICAgbGV0IGlucHV0ID0ge1xyXG4gICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICBcInN0b3JlSWRcIjogc3RvcmVzLFxyXG4gICAgICBcInVzZXJFbWFpbFwiOiB1c2VycyxcclxuICAgICAgXCJjaGVja2xpc3RJZFwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZCxcclxuICAgICAgXCJDaGVja2xpc3RUeXBlXCI6IFwiY3VzdG9tXCIsXHJcbiAgICAgIFwidHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGUsXHJcbiAgICAgIFwiZmlsdGVydHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlcnR5cGUsXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlID09PSAnY2hlY2tsaXN0Jykge1xyXG4gICAgICB0aGlzLnRyYXhTZXJ2aWNlLmFwcHJvdmFsc3RhdHVzY2hlY2tsaXN0KGlucHV0KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5hcHByb3ZhbFN0YXR1cyA9IGZhbHNlXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmFwcHJvdmFsU3RhdHVzID0gdHJ1ZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudHJheFNlcnZpY2UuYXBwcm92YWxzdGF0dXN0YXNrKGlucHV0KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5hcHByb3ZhbFN0YXR1cyA9IGZhbHNlXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmFwcHJvdmFsU3RhdHVzID0gdHJ1ZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gIH1cclxuICB0YXNrVGFiKHRhc2s6IGFueSkge1xyXG5cclxuXHJcbiAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnZmlsdGVyJyk/LnNldFZhbHVlKHRhc2sua2V5KVxyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2VcclxuICAgIHRoaXMudmlld2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy52aWV3bm9EYXRhID0gZmFsc2U7XHJcbiAgICBsZXQgb2JqID0ge1xyXG4gICAgICBcImZyb21EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZnJvbURhdGUsXHJcbiAgICAgIFwidG9EYXRlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudG9EYXRlLFxyXG4gICAgICBcIkNoZWNrbGlzdFR5cGVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja0xpc3RUeXBlLCAvLyBbXCJjdXN0b21cIiwgXCJBSVwiXVxyXG4gICAgICBcImNoZWNrbGlzdE5hbWVcIjogdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS5jaGVja2xpc3ROYW1lLFxyXG4gICAgICBcImNoZWNrbGlzdElkXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkLFxyXG4gICAgICBcInN0b3JlSWRcIjogdGFzay5zdG9yZXMsXHJcbiAgICAgIFwiYW5zd2VyVHlwZVwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmFuc3dlclR5cGUsIC8vW1wiZGVzY3JpcHRpdmVcIixcInllcy9ub1wiLFwibXVsdGlwbGVjaG9pY2VzaW5nbGVcIixcIm11bHRpcGxlY2hvaWNlbXVsdGlwbGVcIixcImltYWdlXCIsXCJ2aWRlb1wiLFwiZGVzY3JpcHRpdmVJbWFnZVwiLFwibXVsdGlwbGVJbWFnZVwiXVxyXG4gICAgICBcInZpZXdGbGFnXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld0ZsYWcsIC8vW3RydWUsIGZhbHNlXVxyXG4gICAgICBcInZpZXdSZWRvXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudmlld1JlZG8sIC8vW3RydWUsIGZhbHNlXVxyXG4gICAgICBcImZpbHRlclwiOiB0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLmZpbHRlcixcclxuICAgICAgXCJhcHByb3ZlRmlsdGVyXCI6IHRoaXMuYXBwcm92ZUZpbHRlcixcclxuICAgICAgXCJmaWx0ZXJ0eXBlXCI6IHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZmlsdGVydHlwZSxcclxuICAgICAgXCJxdWVzdGlvbnNcIjogdGhpcy5zZWxlY3RlZFNlY3Rpb24ubGVuZ3RoID4gMCAmJiB0aGlzLnNlbGVjdGVkU2VjdGlvblswXS5xdWVzdGlvbnMubGVuZ3RoID4gMCA/IHRoaXMuc2VsZWN0ZWRTZWN0aW9uWzBdLnF1ZXN0aW9uc1swXSA6IFwiXCJcclxuICAgIH1cclxuICAgIHRoaXMudHJheFNlcnZpY2UuZ2V0Y2hlY2tsaXN0KG9iaik/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAvLyB0aGlzLmNoZWNrbGlzdERhdGEgPSByZXM/LmRhdGEuY2hlY2tsaXN0UXVlc3Rpb25zO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuZ2FsbGVyeUZvcm0udmFsdWUuZmlsdGVydHlwZSA9PT0gJ0NsdXN0ZXJzJykge1xyXG4gICAgICAgICAgICB0aGlzLmdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnNldFZhbHVlKHJlcz8uZGF0YT8uc3RvcmVzRGV0YWlscylcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2FsbGVyeUZvcm0uZ2V0KCd1c2VyTGlzdCcpPy5zZXRWYWx1ZShyZXM/LmRhdGE/LnN0b3Jlc0RldGFpbHMpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnZpZXdDaGVja2xpc3RzKFwiYWxsXCIsIFwiYWxsXCIpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuY2hlY2tsaXN0RGF0YSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy52aWV3Q2hlY2tsaXN0c0RhdGEgPSBbXTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy52aWV3bm9EYXRhID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICB9XHJcbiAgY2F0ZWdvcnlDaGFuZ2UoKSB7XHJcbiAgICB0aGlzLmN1c3RvbWVydW5hdHRlbmRlZGxpc3QoZmFsc2UpXHJcbiAgfVxyXG5cclxuICBAVmlld0NoaWxkKCd6b29tUG9wdXAnKSB6b29tUG9wdXA6IEVsZW1lbnRSZWY7XHJcbiAgb3Blbk1vZGVsKGRhdGE6IGFueSkge1xyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHRoaXMuem9vbVBvcHVwLCB7IGNlbnRlcmVkOiB0cnVlLCBzaXplOiAneGwnIH0pO1xyXG4gICAgdGhpcy52aWV3SW1hZ2UgPSBkYXRhO1xyXG4gIH1cclxuZ2V0R3JpZENvbHVtbnMobGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gIGlmIChsZW5ndGggPT09IDEpIHJldHVybiAnMWZyJztcclxuICBpZiAobGVuZ3RoID09PSAyIHx8IGxlbmd0aCA9PT0gNCB8fCBsZW5ndGggPT09IDMpIHJldHVybiAncmVwZWF0KDIsIDFmciknO1xyXG4gIGlmIChsZW5ndGggPT09IDUgfHwgbGVuZ3RoID09PSA2KSByZXR1cm4gJ3JlcGVhdCgzLCAxZnIpJztcclxuICAvLyBpZiAobGVuZ3RoID09PSA3IHx8IGxlbmd0aCA9PT0gOCkgcmV0dXJuICdyZXBlYXQoNCwgMWZyKSc7XHJcbiAgLy8gaWYgKGxlbmd0aCA8PSAxMCkgcmV0dXJuICdyZXBlYXQoNSwgMWZyKSc7XHJcbiAgcmV0dXJuICdyZXBlYXQoMywgMWZyKSc7XHJcbn1cclxuXHJcbmdldEdyaWRSb3dIZWlnaHQobGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gIGlmIChsZW5ndGggPD0gMikgcmV0dXJuICc0NTBweCc7XHJcbiAgcmV0dXJuICcyMjBweCc7XHJcbn1cclxuaGFzUmVmZXJlbmNlSW1hZ2VzKHF1ZXN0aW9uOiBhbnkpOiBib29sZWFuIHtcclxuICByZXR1cm4gcXVlc3Rpb24/LmFuc3dlcnM/LnNvbWUoKGE6IGFueSkgPT4ge1xyXG4gICAgY29uc3QgcmVmID0gYS5yZWZlcmVuY2VJbWFnZTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIChBcnJheS5pc0FycmF5KHJlZikgJiYgcmVmLmxlbmd0aCA+IDApIHx8XHJcbiAgICAgICh0eXBlb2YgcmVmID09PSAnc3RyaW5nJyAmJiByZWYudHJpbSgpICE9PSAnJylcclxuICAgICk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmhhc0NoZWNrbGlzdFJlZmVyZW5jZUltYWdlcyhxdWVzdGlvbjogYW55KTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIHF1ZXN0aW9uPy5hbnN3ZXJzPy5zb21lKChhOiBhbnkpID0+IHtcclxuICAgIGNvbnN0IHJlZiA9IGEucmVmZXJlbmNlSW1hZ2U7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAoQXJyYXkuaXNBcnJheShyZWYpICYmIHJlZi5sZW5ndGggPiAwKSB8fFxyXG4gICAgICAodHlwZW9mIHJlZiA9PT0gJ3N0cmluZycgJiYgcmVmLnRyaW0oKSAhPT0gJycpXHJcbiAgICApO1xyXG4gIH0pO1xyXG59XHJcblxyXG5cclxuaGFzUXVlc3Rpb25SZWZlcmVuY2VJbWFnZXMocXVlc3Rpb246YW55KTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2U/Lmxlbmd0aCA+IDAgJiYgXHJcbiAgICAgICAgIHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2VbMF0gIT09ICcnO1xyXG59XHJcblxyXG5pc1ZhbGlkSW1hZ2UoaXRlbTphbnkpOiBib29sZWFuIHtcclxuICByZXR1cm4gaXRlbSAmJiBpdGVtICE9PSAnJyAmJiBpdGVtICE9PSBudWxsO1xyXG59XHJcbnNlbGVjdGVkSW1hZ2VVcmw6IGFueSA9ICcnO1xyXG5zZWxlY3RlZEltYWdlTmFtZTogc3RyaW5nID0gJyc7XHJcbmN1cnJlbnRJbWFnZUluZGV4OiBudW1iZXIgPSAwO1xyXG5pbWFnZUxpc3Q6IHN0cmluZ1tdID0gW107XHJcbmltYWdlTmFtZUxpc3Q6IHN0cmluZ1tdID0gW107XHJcbm9wZW5JbWFnZVBvcHVwMShpbWFnZXM6c3RyaW5nW10saW5kZXg6bnVtYmVyKXtcclxudGhpcy5pbWFnZUxpc3QgPSBpbWFnZXM7XHJcbiB0aGlzLmN1cnJlbnRJbWFnZUluZGV4ID0gaW5kZXg7XHJcbnRoaXMuc2VsZWN0ZWRJbWFnZVVybCA9IHRoaXMuaW1hZ2VMaXN0O1xyXG5jb25zdCBtb2RhbDogYW55ID0gbmV3ICh3aW5kb3cgYXMgYW55KS5ib290c3RyYXAuTW9kYWwoXHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1hZ2VNb2RhbDEnKVxyXG4gICk7XHJcbiAgbW9kYWwuc2hvdygpO1xyXG59XHJcbm9wZW5JbWFnZVBvcHVwKGltYWdlczogc3RyaW5nW10sIG5hbWVzOiBzdHJpbmdbXSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gIHRoaXMuaW1hZ2VMaXN0ID0gaW1hZ2VzO1xyXG4gIHRoaXMuaW1hZ2VOYW1lTGlzdCA9IG5hbWVzO1xyXG4gIHRoaXMuY3VycmVudEltYWdlSW5kZXggPSBpbmRleDtcclxuXHJcbiAgdGhpcy5zZWxlY3RlZEltYWdlVXJsID0gdGhpcy5pbWFnZUxpc3RbdGhpcy5jdXJyZW50SW1hZ2VJbmRleF07XHJcbiAgdGhpcy5zZWxlY3RlZEltYWdlTmFtZSA9IHRoaXMuaW1hZ2VOYW1lTGlzdFt0aGlzLmN1cnJlbnRJbWFnZUluZGV4XTtcclxuIGNvbnNvbGUubG9nKFwiMTIzMjEzMTNcIix0aGlzLmltYWdlTGlzdCxpbmRleClcclxuICBjb25zdCBtb2RhbDogYW55ID0gbmV3ICh3aW5kb3cgYXMgYW55KS5ib290c3RyYXAuTW9kYWwoXHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1hZ2VNb2RhbCcpXHJcbiAgKTtcclxuICBtb2RhbC5zaG93KCk7XHJcbn1cclxuXHJcbm5hdmlnYXRlSW1hZ2UoZGlyZWN0aW9uOiAncHJldicgfCAnbmV4dCcpOiB2b2lkIHtcclxuICBpZiAoZGlyZWN0aW9uID09PSAncHJldicgJiYgdGhpcy5jdXJyZW50SW1hZ2VJbmRleCA+IDApIHtcclxuICAgIHRoaXMuY3VycmVudEltYWdlSW5kZXgtLTtcclxuICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ25leHQnICYmIHRoaXMuY3VycmVudEltYWdlSW5kZXggPCB0aGlzLmltYWdlTGlzdC5sZW5ndGggLSAxKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRJbWFnZUluZGV4Kys7XHJcbiAgfVxyXG5cclxuICB0aGlzLnNlbGVjdGVkSW1hZ2VVcmwgPSB0aGlzLmltYWdlTGlzdFt0aGlzLmN1cnJlbnRJbWFnZUluZGV4XTtcclxuICB0aGlzLnNlbGVjdGVkSW1hZ2VOYW1lID0gdGhpcy5pbWFnZU5hbWVMaXN0W3RoaXMuY3VycmVudEltYWdlSW5kZXhdO1xyXG4gXHJcbn1cclxuXHJcbmdldEltYWdlVXJscyh1c2VyQW5zd2VyczogYW55W10pOiBzdHJpbmdbXSB7XHJcbiAgcmV0dXJuIHVzZXJBbnN3ZXJzLm1hcChhID0+IHRoaXMuZW52aXJvbm1lbnQuVHJheEFuc3dlckNETiArIGEuYW5zd2VyKTtcclxufVxyXG5cclxuZ2V0SW1hZ2VOYW1lcyh1c2VyQW5zd2VyczogYW55W10pOiBzdHJpbmdbXSB7XHJcbiAgcmV0dXJuIHVzZXJBbnN3ZXJzLm1hcChhID0+IGEuYW5zd2VyKTtcclxufVxyXG5cclxuZ2V0UmVmY2hlY2tsaXN0SW1hZ2VVcmxzKHVzZXJBbnN3ZXJzOiBhbnlbXSk6IHN0cmluZ1tdIHtcclxuICByZXR1cm4gdXNlckFuc3dlcnMubWFwKGEgPT4gdGhpcy5lbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROICsgYS5yZWZlcmVuY2VJbWFnZSk7XHJcbn1cclxuXHJcbmdldFJlZmNoZWNrbGlzdEltYWdlTmFtZXModXNlckFuc3dlcnM6IGFueVtdKTogc3RyaW5nW10ge1xyXG4gIHJldHVybiB1c2VyQW5zd2Vycy5tYXAoYSA9PiBhLnJlZmVyZW5jZUltYWdlKTtcclxufVxyXG5cclxuZ2V0UXVzdFJlZmNoZWNrbGlzdEltYWdlVXJscyh1c2VyQW5zd2VyczogYW55W10pOiBzdHJpbmdbXSB7XHJcbiAgcmV0dXJuIHVzZXJBbnN3ZXJzLm1hcChhID0+IHRoaXMuZW52aXJvbm1lbnQuVHJheEFuc3dlckNETiArIGEucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSk7XHJcbn1cclxuXHJcbmdldFF1c3RSZWZjaGVja2xpc3RJbWFnZU5hbWVzKHVzZXJBbnN3ZXJzOiBhbnlbXSk6IHN0cmluZ1tdIHtcclxuICByZXR1cm4gdXNlckFuc3dlcnMubWFwKGEgPT4gYS5xdWVzdGlvblJlZmVyZW5jZUltYWdlKTtcclxufVxyXG5nZXRSZWZJbWFnZVVybHModXNlckFuc3dlcnM6IGFueVtdKTogc3RyaW5nW10ge1xyXG4gIHJldHVybiB1c2VyQW5zd2Vycy5tYXAoYSA9PiB0aGlzLmVudmlyb25tZW50LlRyYXhBbnN3ZXJDRE4gKyBhKTtcclxufVxyXG5cclxuZ2V0UmVmSW1hZ2VOYW1lcyh1c2VyQW5zd2VyczogYW55W10pOiBzdHJpbmdbXSB7XHJcbiAgcmV0dXJuIHVzZXJBbnN3ZXJzLm1hcChhID0+IGEpO1xyXG59XHJcblxyXG5kb3dubG9hZFZpZGVvKGZpbGVOYW1lOiBzdHJpbmcpIHtcclxuICBjb25zdCB1cmwgPSB0aGlzLmVudmlyb25tZW50LlRyYXhBbnN3ZXJDRE4gKyBmaWxlTmFtZTtcclxuICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gIGEuaHJlZiA9IHVybDtcclxuICBhLmRvd25sb2FkID0gZmlsZU5hbWUuc3BsaXQoJy8nKS5wb3AoKSB8fCAndmlkZW8ubXA0JzsgIC8vIGV4dHJhY3QgZmlsZSBuYW1lXHJcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcclxuICBhLmNsaWNrKCk7XHJcbiAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKTtcclxufVxyXG5cclxufSIsIjxkaXYgKm5nSWY9XCJub3RpZnlDb3VudD4wXCIgY2xhc3M9XCJoLXhsLTEwMCBmbGV4LXJvdyBmbGV4LXN0YWNrIGZsZXgtd3JhcCBwLTJcIj5cclxuICAgIDwhLS0gdG9hc3QgY2FyZCBzdGFydHMgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwidG9hc3RjYXJkIGNvbC1tZC0xMiBtYi00XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gdy0xMDBcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhbGlnbi1pdGVtcy1zdGFydFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b2FzdHRleHQgZC1ibG9ja1wiPjxzcGFuIGNsYXNzPVwibWUtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDE2IDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05LjE0MjM0IDIuNFYxLjY4NzVDOS4xNDIzNCAxLjAzMTc4IDguNjMxNjYgMC41IDcuOTk5NTUgMC41QzcuMzY3NDQgMC41IDYuODU2NzUgMS4wMzE3OCA2Ljg1Njc1IDEuNjg3NVYyLjRDNC4yMTc2MSAyLjk1MDMzIDIuMjg1NTggNS4zNDY0OSAyLjI4NTU4IDguMjE4NzVWOC45MTY0MUMyLjI4NTU4IDEwLjY2NDMgMS42NjkxOCAxMi4zNDUzIDAuNTUzNTMyIDEzLjY1MTZMMC4yODg2OSAxMy45NTk2Qy0wLjAxMDMwNDQgMTQuMzEyMSAtMC4wODQwMzk2IDE0LjgwOTQgMC4xMDAzMDcgMTUuMjM2MUMwLjI4NDY1NCAxNS42NjI5IDAuNjkyODEgMTUuOTM3NSAxLjE0Mjc5IDE1LjkzNzVIMTQuODU2M0MxNS4zMDYzIDE1LjkzNzUgMTUuNzEzNCAxNS42NjI5IDE1Ljg5OTEgMTUuMjM2MUMxNi4wODQ4IDE0LjgwOTQgMTYuMDA5OCAxNC4zMTIxIDE1LjcwOTggMTMuOTU5NkwxNS40NDU2IDEzLjY1MTZDMTQuMzMxMyAxMi4zNDUzIDEzLjcxMzUgMTAuNjY0MyAxMy43MTM1IDguOTE2NDFWOC4yMTg3NUMxMy43MTM1IDcuOTQxMjUgMTMuNjk1MiA3LjY2ODE5IDEzLjY1OTcgNy40MDA4MUMxMy4yNjc2IDcuNTQ1NzYgMTIuODQzMiA3LjYyNSAxMi40IDcuNjI1QzEwLjQxMTggNy42MjUgOC44IDYuMDMwMDEgOC44IDQuMDYyNUM4LjggMy40Njc3OCA4Ljg4MTkzIDIuODkyODkgOS4xNDIzNCAyLjRDOS4xNjQxNyAyLjQwNDYxIDkuMTIwNjEgMi4zOTUxNCA5LjE0MjM0IDIuNFpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMDBBM0ZGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk02LjM4MTc4IDE4LjgwNjFDNi44MTAzMyAxOS4yNTE0IDcuMzkyNDQgMTkuNSA3Ljk5OTU1IDE5LjVDOC41NzQ1MiAxOS41IDkuMTg4NzcgMTkuMjUxNCA5LjYxNzMyIDE4LjgwNjFDMTAuMDQ1OSAxOC4zNjA3IDEwLjI4NTEgMTcuNzIyNSAxMC4yODUxIDE3LjEyNUg1LjcxMzk2QzUuNzEzOTYgMTcuNzIyNSA1Ljk1MzIzIDE4LjM2MDcgNi4zODE3OCAxOC44MDYxWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMwMEEzRkZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEzXCIgY3k9XCIzLjVcIiByPVwiM1wiIGZpbGw9XCIjRjA0NDM4XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPk5ldyBEZXRlY3Rpb24gRm91bmQhIFJlZnJlc2ggTm93IHRvIHZpZXcgbmV3IGRldGVjdGlvbjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJyZWZyZXNobm93KClcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLW91dGxpbmUgYnRuIGFsaWduLWl0ZW1zLWVuZCB0ZXh0LW5vd3JhcCBtcy00IGN1cnNvci1wb2ludGVyXCI+PHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzEyMTY1XzYyNzgxKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xOS4xNjcyIDMuMzMxNzJWOC4zMzE3Mk0xOS4xNjcyIDguMzMxNzJIMTQuMTY3Mk0xOS4xNjcyIDguMzMxNzJMMTUuMzA4OSA0LjY5ODM4QzE0LjE1OTQgMy41NDgxNyAxMi42NjcyIDIuODAyNzEgMTEuMDU3MiAyLjU3NDM0QzkuNDQ3MTYgMi4zNDU5NyA3LjgwNjUzIDIuNjQ3MDYgNi4zODI1MSAzLjQzMjI1QzQuOTU4NSA0LjIxNzQ0IDMuODI4MjYgNS40NDQxOCAzLjE2MjEgNi45Mjc2MUMyLjQ5NTk1IDguNDExMDQgMi4zMjk5NyAxMC4wNzA4IDIuNjg5MTkgMTEuNjU2OEMzLjA0ODQgMTMuMjQyNyAzLjkxMzM1IDE0LjY2OSA1LjE1MzY4IDE1LjcyMDZDNi4zOTQwMSAxNi43NzIyIDcuOTQyNTQgMTcuMzkyMiA5LjU2NTkgMTcuNDg3MkMxMS4xODkzIDE3LjU4MjIgMTIuNzk5NSAxNy4xNDcgMTQuMTU0IDE2LjI0NzFDMTUuNTA4NSAxNS4zNDczIDE2LjUzMzkgMTQuMDMxNiAxNy4wNzU2IDEyLjQ5ODRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMTIxNjVfNjI3ODFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+PHNwYW4gY2xhc3M9XCJyZWZyZXNodGV4dCBtcy0yXCI+PC9zcGFuPiBSZWZyZXNoIE5vdyA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJnYWxsZXJ5LWNhcmQgcG9cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXIgbWItNFwiPkdhbGxlcnk8L2Rpdj5cclxuXHJcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImdhbGxlcnlGb3JtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cInRvcDogMjAlO1wiIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMSBwb3NpdGlvbi1hYnNvbHV0ZSBtcy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEzLjMzMzMgMS42NjY2M1Y0Ljk5OTk2TTYuNjY2NjcgMS42NjY2M1Y0Ljk5OTk2TTIuNSA4LjMzMzI5SDE3LjVNNC4xNjY2NyAzLjMzMzI5SDE1LjgzMzNDMTYuNzUzOCAzLjMzMzI5IDE3LjUgNC4wNzk0OCAxNy41IDQuOTk5OTZWMTYuNjY2NkMxNy41IDE3LjU4NzEgMTYuNzUzOCAxOC4zMzMzIDE1LjgzMzMgMTguMzMzM0g0LjE2NjY3QzMuMjQ2MTkgMTguMzMzMyAyLjUgMTcuNTg3MSAyLjUgMTYuNjY2NlY0Ljk5OTk2QzIuNSA0LjA3OTQ4IDMuMjQ2MTkgMy4zMzMyOSA0LjE2NjY3IDMuMzMzMjlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmeC1kYXRlLXJhbmdlIGZvcm0tY29udHJvbCBwcy0xNCB6LTJcIiBzdHlsZT1cIm1pbi13aWR0aDogMjYwcHggIWltcG9ydGFudDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgbmd4RGF0ZXJhbmdlcGlja2VyTWQgW2Ryb3BzXT1cIidkb3duJ1wiIFtvcGVuc109XCIncmlnaHQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWx3YXlzU2hvd0NhbGVuZGFyc109XCJmYWxzZVwiIFtrZWVwQ2FsZW5kYXJPcGVuaW5nV2l0aFJhbmdlXT1cInRydWVcIiBbc2hvd0NhbmNlbF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZERhdGVSYW5nZVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlc1VwZGF0ZWQpPVwiZGF0ZWNoYW5nZSgkZXZlbnQpXCIgKGNsaWNrKT1cInJlc2V0VmFsaWRhdGlvbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhcnREYXRlQ2hhbmdlZCk9XCJvblN0YXJ0RGF0ZUNoYW5nZSgkZXZlbnQpXCIgW2lzQ3VzdG9tRGF0ZV09XCJpc0N1c3RvbURhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQXBwbHldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvY2FsZV09XCJ7IGZvcm1hdDogJ0RELU1NLVlZWVknLCBmaXJzdERheTogMSwgbW9udGhOYW1lczogWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ10gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImRhdGVyYW5nZVwiIFtyZWFkb25seV09XCJ0cnVlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwidHlwZVwiIFtpZEZpZWxkXT1cIid2YWx1ZSdcIiBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwidHlwZVwiIChpdGVtQ2hhbmdlKT1cInR5cGVDaGFuZ2UoJGV2ZW50KVwiPjwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLXNpbmdsZS1zZWxlY3QgW2l0ZW1zXT1cImNoZWNrbGlzdHNcIiBbbXVsdGldPVwiZmFsc2VcIiBbc2VhcmNoRmllbGRdPVwiJ2NoZWNrTGlzdE5hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZEZpZWxkXT1cIidfaWQnXCIgKHNlbGVjdGVkKT1cImNoZWNrbGlzdE5hbWVjaGFuZ2UoJGV2ZW50LGZhbHNlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZXNdPVwiW3tjaGVja0xpc3ROYW1lOmdhbGxlcnlGb3JtLmdldCgnY2hlY2tsaXN0TmFtZScpPy52YWx1ZX1dXCI+PC9saWItc2luZ2xlLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJhbnN3ZXJUeXBlXCIgW2lzRGlzYWJsZWRdPVwiIXNob3dmbGFnXCIgW2lkRmllbGRdPVwiJ3ZhbHVlJ1wiIFtuYW1lRmllbGRdPVwiJ2xhYmVsJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJhbnN3ZXJUeXBlXCI+PC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBtYi00XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJmaWx0ZXJ0eXBlXCIgW2lkRmllbGRdPVwiJ3ZhbHVlJ1wiIFtuYW1lRmllbGRdPVwiJ2xhYmVsJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJmaWx0ZXJ0eXBlXCIgKGl0ZW1DaGFuZ2UpPVwiZmlsdGVyQ2hhbmdlKCRldmVudClcIj48L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBtYi00XCIgKm5nSWY9XCJnYWxsZXJ5Rm9ybS5nZXQoJ2ZpbHRlcnR5cGUnKT8udmFsdWUgPT09J0NsdXN0ZXJzJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwbGFjZWhvbGRlci1vdmVybGF5XCIgKm5nSWY9XCIhKGdhbGxlcnlGb3JtLmdldCgnQ2x1c3Rlckxpc3QnKT8udmFsdWU/Lmxlbmd0aClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgY2x1c3RlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWdyb3VwLXNlbGVjdCBbaXRlbXNdPVwiQ2x1c3Rlckxpc3RcIiBbZGlzYWJsZWRdPVwiZmFsc2VcIiBbbXVsdGldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaEZpZWxkXT1cIidncm91cE5hbWUnXCIgW2lkRmllbGRdPVwiJ2dyb3VwTmFtZSdcIiAoc2VsZWN0ZWQpPVwib25ncm91cFNlbGVjdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZXNdPVwiZ2FsbGVyeUZvcm0uZ2V0KCdDbHVzdGVyTGlzdCcpPy52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItZ3JvdXAtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIG1iLTRcIiAqbmdJZj1cImdhbGxlcnlGb3JtLmdldCgnZmlsdGVydHlwZScpPy52YWx1ZSA9PT0nVGVhbXMnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Qtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBsYWNlaG9sZGVyLW92ZXJsYXlcIiAqbmdJZj1cIiEoZ2FsbGVyeUZvcm0uZ2V0KCdUZWFtc0xpc3QnKT8udmFsdWU/Lmxlbmd0aClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgVGVhbXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1ncm91cC1zZWxlY3QgW2l0ZW1zXT1cIlRlYW1zTGlzdFwiIFtkaXNhYmxlZF09XCJmYWxzZVwiIFttdWx0aV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoRmllbGRdPVwiJ3RlYW1OYW1lJ1wiIFtpZEZpZWxkXT1cIid0ZWFtTmFtZSdcIiAoc2VsZWN0ZWQpPVwib25UZWFtc1NlbGVjdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZXNdPVwiZ2FsbGVyeUZvcm0uZ2V0KCdUZWFtc0xpc3QnKT8udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLWdyb3VwLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBtYi00XCIgKm5nSWY9XCJnYWxsZXJ5Rm9ybS5nZXQoJ2ZpbHRlcnR5cGUnKT8udmFsdWUgPT09J0NsdXN0ZXJzJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwbGFjZWhvbGRlci1vdmVybGF5XCIgKm5nSWY9XCIhKGdhbGxlcnlGb3JtLmdldCgnc3RvcmVMaXN0Jyk/LnZhbHVlPy5sZW5ndGgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IFN0b3Jlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXN0b3Jlcy1zZWxlY3QgW2l0ZW1zXT1cInN0b3JlTGlzdFwiIFtkaXNhYmxlZF09XCJmYWxzZVwiIFttdWx0aV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoRmllbGRdPVwiJ3N0b3JlTmFtZSdcIiBbaWRGaWVsZF09XCInc3RvcmVJZCdcIiAoc2VsZWN0ZWQpPVwib25TdG9yZVNlbGVjdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZXNdPVwiZ2FsbGVyeUZvcm0uZ2V0KCdzdG9yZUxpc3QnKT8udmFsdWVcIj48L2xpYi1zdG9yZXMtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgbWItNFwiICpuZ0lmPVwiZ2FsbGVyeUZvcm0uZ2V0KCdmaWx0ZXJ0eXBlJyk/LnZhbHVlID09PSdUZWFtcydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGxhY2Vob2xkZXItb3ZlcmxheVwiICpuZ0lmPVwiIShnYWxsZXJ5Rm9ybS5nZXQoJ3VzZXJMaXN0Jyk/LnZhbHVlPy5sZW5ndGgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IHVzZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItc3RvcmVzLXNlbGVjdCBbaXRlbXNdPVwidXNlckxpc3RcIiBbZGlzYWJsZWRdPVwiZmFsc2VcIiBbbXVsdGldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaEZpZWxkXT1cIid1c2VyTmFtZSdcIiBbaWRGaWVsZF09XCIndXNlck5hbWUnXCIgKHNlbGVjdGVkKT1cIm9uVXNlclNlbGVjdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZXNdPVwiZ2FsbGVyeUZvcm0uZ2V0KCd1c2VyTGlzdCcpPy52YWx1ZVwiPjwvbGliLXN0b3Jlcy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCB0ZXh0LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZS01IHctMTAwXCIgKm5nSWY9XCJzZWxlY3QgPT09ICdleWV0ZXN0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIFsobmdNb2RlbCldPVwiY2F0ZWdvcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhbGxcIj5BbGw8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFkdWx0c1wiPkFkdWx0czwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwia2lkc1wiPktpZHM8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTUgdy0xMDBcIiAqbmdJZj1cInNlbGVjdCA9PT0gJ2NsZWFuaW5nJ3x8c2VsZWN0ID09PSdzY3J1bSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBbKG5nTW9kZWwpXT1cImNhdGVnb3J5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWxsXCI+QWxsPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJyZWplY3RlZFwiPkJyZWFjaGVkPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhcHByb3ZlZFwiPk5vdC1icmVhY2hlZDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWUtNSB3LTEwMCB0ZXh0LXN0YXJ0XCIgKm5nSWY9XCJzZWxlY3QgPT09ICdxdWV1ZWFsZXJ0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Qtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGxhY2Vob2xkZXItb3ZlcmxheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiEoZ2FsbGVyeUZvcm0uZ2V0KCd6b25lTGlzdCcpPy52YWx1ZT8ubGVuZ3RoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IFpvbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItc3RvcmVzLXNlbGVjdCBbaXRlbXNdPVwiem9uZUxpc3RcIiBbZGlzYWJsZWRdPVwiZmFsc2VcIiBbbXVsdGldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoRmllbGRdPVwiJ3ZhbHVlJ1wiIFtpZEZpZWxkXT1cIidrZXknXCIgKHNlbGVjdGVkKT1cIm9uem9uZVNlbGVjdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZFZhbHVlc109XCJnYWxsZXJ5Rm9ybS5nZXQoJ3pvbmVMaXN0Jyk/LnZhbHVlXCI+PC9saWItc3RvcmVzLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTUgdy01MFwiICpuZ0lmPVwic2hvd2ZsYWdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiAoY2hhbmdlKT1cImFwcHJvdmVGaWx0ZXJDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYXBwcm92ZUZpbHRlclwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFsbFwiPkFsbDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQXBwcm92ZWRcIj5BcHByb3ZlZDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibm90YXBwcm92ZWRcIj5Ob3QtQXBwcm92ZWQ8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS00IG10LTNcIiAqbmdJZj1cInNob3dmbGFnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cInZpZXdSZWRvXCIgY2hhbmdlIHR5cGU9XCJjaGVja2JveFwiIChjbGljayk9XCJyZWRvQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyIG10LTEgbWUtMlwiIGlkPVwidmlld1JlZG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjaGVja2JveC1sYWJlbFwiIGZvcj1cInZpZXdSZWRvXCI+UmUtZG88L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0zIG10LTNcIiAqbmdJZj1cInNob3dmbGFnJiZnYWxsZXJ5Rm9ybS52YWx1ZS50eXBlPT09J2NoZWNrbGlzdCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidmlld0ZsYWdcIiBjaGFuZ2UgdHlwZT1cImNoZWNrYm94XCIgKGNsaWNrKT1cImZsYWdDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXIgbXQtMSBtZS0yXCIgaWQ9XCJ2aWV3RmxhZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94LWxhYmVsXCIgZm9yPVwidmlld0ZsYWdcIj5GbGFnPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSAoY2xpY2spPVwib25TdWJtaXQoKVwiIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBweC00IFwiPjxzcGFuPkFwcGx5PC9zcGFuPjwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGEgKGNsaWNrKT1cIm5vdGlmeShbXSlcIiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcHgtNCBcIj48c3Bhbj50ZXN0PC9zcGFuPjwvYT4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9mb3JtPlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cImNhcmQgbXktMlwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtYWluLWNvbnRhaW5lciBteS01IFwiPlxyXG5cclxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInNob3dzaWRlbmF2ID8gJ2NvbC1tZC00IGxlZnQtc2lkZWJhcic6J2Qtbm9uZSdcIiBjbGFzcz1cImgtNjUwcHhcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlIGgtNjUwcHggc2Nyb2xsLXlcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrbGlzdC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2xpc3QtdGl0bGVcIj57e2NoZWNrbGlzdE5hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tsaXN0LXRleHRcIj57e2NoZWNrTGlzdERlc2NyaXB0aW9ufX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibG9hZGluZ1wiIGNsYXNzPVwicm93IGxvYWRlciAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm5vRGF0YSYmc2VsZWN0ID09PSAnY3VzdG9tJyB8fCBub0RhdGEmJnNlbGVjdCA9PT0gJ3Rhc2snXCIgY2xhc3M9XCJyb3cgbXQtMjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMiBtdC0yMCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJ3LTc1IGgtMzAwcHhcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGExLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGEtdGl0bGUgbXQtMFwiPk5vIGRhdGEgZm91bmQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhLXN1YlwiPlRoZXJlIGlzIG5vIHJlc3VsdCBmb3IgdGhpcyBjaGVja2xpc3Q8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm5vRGF0YSYmc2VsZWN0ICE9PSAnY3VzdG9tJyYmc2VsZWN0ICE9PSAndGFzaydcIiBjbGFzcz1cInJvdyBtdC0yMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG10LTIwIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgbXQtMjAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1zcmMgbXQtNSB3LTQwXCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhMi5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhLXRpdGxlXCI+Tm8gRGV0ZWN0aW9ucyBmb3VuZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGEtc3ViXCI+VGhlcmUgaXMgbm8gYnJlYWNoZXMgZm9yIHRoZSBzZWxlY3RlZCBwZXJpb2Q8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gKm5nSWY9XCIhbm9EYXRhICYmICFsb2FkaW5nXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ID09PSAnY3VzdG9tJ3x8c2VsZWN0ID09PSAndGFzaydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZCBtdC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSB3LTI1IG1lLTMgYnRuLXJlc2l6ZVwiIChjbGljayk9XCJ2aWV3Q2hlY2tsaXN0cygpXCI+IFJlc2V0IDwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIHctMjUgbWUtMyBidG4tcmVzaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZFNlY3Rpb24ubGVuZ3RoPjB8fHRlbXBzZWxlY3RlZFNlY3Rpb24ubGVuZ3RoPjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25jaGVja2xpc3RyZXNldCgpXCI+IFJlc2V0IDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzZWxlY3RlZFNlY3Rpb24ubGVuZ3RoPjB8fHRlbXBzZWxlY3RlZFNlY3Rpb24ubGVuZ3RoPjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB3LTI1ICBidG4tcmVzaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdHNpbmdsZXF1ZXN0aW9uKClcIj5BcHBseTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktNlwiIFtuZ0NsYXNzXT1cInNlbGVjdGVkU2VjdGlvbi5sZW5ndGg9PT0wID8gJ3ZpZXctYWxsJzondmlldy1xdWVzdGlvbnMnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIiAoY2xpY2spPVwib25jaGVja2xpc3RyZXNldCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBBbGwgQW5zd2Vyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMlwiICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIGNoZWNrbGlzdERhdGE7IGxldCBpPWluZGV4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG10LTRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIiAoY2xpY2spPVwiYWNjb3JkaWFuKGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy00IGZ3LWJvbGQgc2VjdGlvblwiICpuZ0lmPVwiZ2FsbGVyeUZvcm0udmFsdWUudHlwZT09PSdjaGVja2xpc3QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3NlY3Rpb24uc2VjdGlvbk5hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aHIgY2xhc3M9XCJteC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFtuZ0NsYXNzXT1cInsncm90YXRlJyA6IHNob3cgIT09IGl9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI1XCIgaGVpZ2h0PVwiMjVcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTUgNy41TDEwIDEyLjVMMTUgNy41XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93PT09aVwiIGNsYXNzPVwicXVlc3Rpb24tbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNka0Ryb3BMaXN0IFtjZGtEcm9wTGlzdERhdGFdPVwic2VjdGlvbi5xdWVzdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIHNlY3Rpb24ucXVlc3Rpb25zO2xldCBqPWluZGV4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggbXktMiBxLWJ0blwiIGNka0RyYWc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwibGFiZWxcIiBbKG5nTW9kZWwpXT1cInF1ZXN0aW9uLmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWRRdWVzdGlvbigkZXZlbnQsc2VjdGlvbixxdWVzdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXIgbXQtMiBtZS00XCIgdHlwZT1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVkaXRhYmxlY29udGVudFwiIFtuZ0NsYXNzXT1cInF1ZXN0aW9uPy5jaGVja2VkID8gJ3ZpZXctYWxsJzonJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3F1ZXN0aW9uLnFub319IC4ge3txdWVzdGlvbi5xbmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8L2Rpdj4gIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29tYmluZWRDaGVja2xpc3QuaW5jbHVkZXMoc2VsZWN0KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kIG10LTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSB3LTI1IG1lLTMgYnRuLXJlc2l6ZVwiIChjbGljayk9XCJvbnJlc2V0KClcIj4gUmVzZXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHctMjUgIGJ0bi1yZXNpemVcIiAoY2xpY2spPVwib252aWV3KClcIj5BcHBseTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd25zZWxlY3QgaC05MDBweCBzY3JvbGwteVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWxlZnQgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VsZWN0QWxsID8gJ2JhY2tncm91bmRCb3JkZXInOid3aXRob3V0YmFja2dyb3VuZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlciBtZS00XCIgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0QWxsXCIgKGNsaWNrKT1cInNlbGVjdEFsbFN0b3JlKCRldmVudClcIj4gPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdEFsbCA/ICd1c2FnZS1kZXRlY3Rpb24nOid1c2FnZS10ZXh0J1wiPlNlbGVjdCBBbGw8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBkcm9wZG93bmJnIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS00XCIgKm5nRm9yPVwibGV0IGxpc3Qgb2YgbW9iaWxldXNhZ2VEYXRhTGlzdDtsZXQgaT1pbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjaGFuZ2UpPVwidXBkYXRlQ2hlY2soJGV2ZW50LGxpc3QpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImxpc3QuY2hlY2tlZCA/ICdiYWNrZ3JvdW5kQm9yZGVyJzond2l0aG91dGJhY2tncm91bmQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJsYWJlbHt7aX19XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyIG1lLTRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwibGlzdC5jaGVja2VkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibGFiZWx7e2l9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwibGlzdC5jaGVja2VkID8gJ3VzYWdlLWRldGVjdGlvbic6J3VzYWdlLXRleHQnXCI+e3tsaXN0Py5zdG9yZU5hbWV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnkgZGV0ZWN0aW9ucmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibGlzdC5kZXRlY3Rpb25cIj57e2xpc3QuZGV0ZWN0aW9ufX0gRGV0ZWN0aW9uczwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd3NpZGVuYXZcIiAoY2xpY2spPVwic2lkZW5hdigpXCIgY2xhc3M9XCJiYWNrQnV0dG9ucmlnaHQgdGV4dC1jZW50ZXIgcHQtMSBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjhcIiBoZWlnaHQ9XCIyOFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTExIDE3TDYgMTJMMTEgN00xOCAxN0wxMyAxMkwxOCA3XCIgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNob3dzaWRlbmF2ID8gJ2NvbC1tZC04IGJvcmRlciBib3JkZXItYm90dG9tLTAgYm9yZGVyLXRvcC0wIGJvcmRlci1sZWZ0IGJvcmRlci01IHJpZ2h0LXNpZGViYXInOidjb2wtbWQtMTInXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZSBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCAgcHgtMCBteS0wXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihzZWxlY3QgPT09ICdjdXN0b20nIHx8IHNlbGVjdCA9PT0gJ3Rhc2snfHxzZWxlY3QgPT09ICdjbGVhbmluZyd8fHNlbGVjdCA9PT0nc2NydW0nfHxzZWxlY3QgPT09J3N0b3Jlb3BlbmFuZGNsb3NlJ3x8c2VsZWN0ID09PSdpbnZlbnRvcnljb3VudCd8fHNlbGVjdCA9PT0nY2Fyc2F0dGVuZGVkJ3x8c2VsZWN0ID09PSdudW1iZXJwbGF0ZWluZm8nKSAmJiAhdmlld2xvYWRpbmcgJiYgIXZpZXdub0RhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aDM+PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIFN3aXRjaCB0b2dnbGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiICpuZ0lmPVwiIWdhbGxlcnlGb3JtLnZhbHVlLnZpZXdSZWRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZS00XCIgKm5nSWY9XCJzaG93c2luZ2xlJiZzZWxlY3QgPT09J2N1c3RvbSdcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cInNlbGVjdGVkVXNlcnMubGVuZ3RoPT0wJiZzZWxlY3RlZFN0b3Jlcy5sZW5ndGg9PTBcIiAoY2xpY2spPVwiY3JlYXRlTXVsdGlwbGVUYXNrKCd0YXNrJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBmb3JtLWNvbnRyb2wgbm8tdGV4dC10cmFuc2Zvcm1cIiA+Q3JlYXRlIFRhc2s8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTRcIiAqbmdJZj1cInNob3dzaW5nbGUmJnNlbGVjdCA9PT0nY3VzdG9tJ1wiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWRlZmF1bHQgYm9yZGVyLWRlZmF1bHQgbWUtM1wiIFtkaXNhYmxlZF09XCJzZWxlY3RlZFVzZXJzLmxlbmd0aD09MCYmc2VsZWN0ZWRTdG9yZXMubGVuZ3RoPT0wXCIgIChjbGljayk9XCJjcmVhdGVNdWx0aXBsZVRhc2soJ3JlZG8nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF82MDA0XzExNzM0KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTkuMTY5MyAzLjMzMzMxVjguMzMzMzJNMTkuMTY5MyA4LjMzMzMySDE0LjE2OTNNMTkuMTY5MyA4LjMzMzMyTDE1LjMwMjYgNC42OTk5OEMxNC40MDcgMy44MDM5MSAxMy4yOTkgMy4xNDkzMiAxMi4wODE5IDIuNzk3MjlDMTAuODY0OSAyLjQ0NTI3IDkuNTc4NTMgMi40MDcyNyA4LjM0Mjg0IDIuNjg2ODZDNy4xMDcxNiAyLjk2NjQ1IDUuOTYyNDQgMy41NTQ1MSA1LjAxNTQ5IDQuMzk2MTZDNC4wNjg1NSA1LjIzNzgyIDMuMzUwMjQgNi4zMDU2NCAyLjkyNzYgNy40OTk5OE0wLjgzNTkzOCAxNi42NjY2VjExLjY2NjZNMC44MzU5MzggMTEuNjY2Nkg1LjgzNTk0TTAuODM1OTM4IDExLjY2NjZMNC43MDI2IDE1LjNDNS41OTgyMyAxNi4xOTYxIDYuNzA2MjUgMTYuODUwNiA3LjkyMzI4IDE3LjIwMjdDOS4xNDAzMSAxNy41NTQ3IDEwLjQyNjcgMTcuNTkyNyAxMS42NjI0IDE3LjMxMzFDMTIuODk4IDE3LjAzMzUgMTQuMDQyOCAxNi40NDU1IDE0Ljk4OTcgMTUuNjAzOEMxNS45MzY3IDE0Ljc2MjEgMTYuNjU1IDEzLjY5NDMgMTcuMDc3NiAxMi41XCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzYwMDRfMTE3MzRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0yIGZvbnQtZGVmdWx0LXRhc2tcIj5SZWRvPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZSBjdXJzb3ItcG9pbnRlciBtZS0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBidG4gYnRuLXByaW1hcnkgZm9ybS1jb250cm9sIG5vLXRleHQtdHJhbnNmb3JtXCIgKGNsaWNrKT1cImV4cG9ydERldCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZXhwb3J0TGFiZWwgfX0gPCEtLSBCaW5kIGxhYmVsIHRleHQgaGVyZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImV4cG9ydFNob3dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2FyZCBweS0yICBwb3NpdGlvbi1hYnNvbHV0ZSBwcm9kdWN0ZHJvcCB0b3AtMTAgdy0xNTBweCBlbmQtMCB6LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LXVuc3R5bGVkIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgcHktNCBjaGVja2JveC1sYWJlbCBteC0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicGRmRXhwb3J0VHlwZXMuaW5jbHVkZXMoc2VsZWN0KVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldEV4cG9ydEFzUFBUKCdFeHBvcnQgYXMgUERGJywncGRmJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydCBhcyBQREZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiIGN1cnNvci1wb2ludGVyIGNoZWNrYm94LWxhYmVsIHB5LTQgbXgtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNzdkV4cG9ydFR5cGVzLmluY2x1ZGVzKHNlbGVjdClcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRFeHBvcnRBc1BQVCgnRXhwb3J0IGFzIENTVicsJ2NzdicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnQgYXMgQ1NWXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cInNlbGVjdGVkU2VjdGlvbi5sZW5ndGg+MHx8c2VsZWN0ID09PSAnY2xlYW5pbmcnfHxzZWxlY3QgPT09J3NjcnVtJ3x8c2VsZWN0ID09PSdzdG9yZW9wZW5hbmRjbG9zZSd8fHNlbGVjdCA9PT0naW52ZW50b3J5Y291bnQnfHxzZWxlY3QgPT09J2NhcnNhdHRlbmRlZCd8fHNlbGVjdCA9PT0nbnVtYmVycGxhdGVpbmZvJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiBjdXJzb3ItcG9pbnRlciBjaGVja2JveC1sYWJlbCBweS00ICBteC0yXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0RXhwb3J0QXNQUFQoJ0V4cG9ydCBhcyBQUFQnLCdwcHQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0IGFzIFBQVFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJzZWxlY3RlZFNlY3Rpb24ubGVuZ3RoPjB8fHNlbGVjdCA9PT0gJ2NsZWFuaW5nJ3x8c2VsZWN0ID09PSdzY3J1bSd8fHNlbGVjdCA9PT0nc3RvcmVvcGVuYW5kY2xvc2UnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgY2hlY2tib3gtbGFiZWwgcHktNCBteC0yXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0RXhwb3J0QXNQUFQoJ0V4cG9ydCBhcyBaSVAnLCd6aXBmaWxlcycpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnQgYXMgWklQXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ2aWV3bG9hZGluZ1wiIGNsYXNzPVwicm93IGxvYWRlciAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidmlld25vRGF0YSYmc2VsZWN0ICE9PSAnY3VzdG9tJyYmc2VsZWN0ICE9PSAndGFzaydcIiBjbGFzcz1cInJvdyBtdC0yMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMiBtdC0yMCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNhcmQtYm9keSBtdC0yMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1zcmMgbXQtNSB3LTQwXCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhMi5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YS10aXRsZVwiPk5vIERldGVjdGlvbnMgZm91bmQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YS1zdWJcIj5UaGVyZSBpcyBubyBicmVhY2hlcyBmb3IgdGhlIHNlbGVjdGVkIHBlcmlvZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidmlld25vRGF0YSYmc2VsZWN0ID09PSAnY3VzdG9tJyB8fCB2aWV3bm9EYXRhJiZzZWxlY3QgPT09ICd0YXNrJ1wiIGNsYXNzPVwicm93IG10LTIwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG10LTIwIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2FyZC1ib2R5IG10LTIwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLXNyYyBtdC01IHctNDBcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGExLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhLXRpdGxlXCI+Tm8gZGF0YSBmb3VuZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhLXN1YlwiPlRoZXJlIGlzIG5vIHJlc3VsdCBmb3IgdGhpcyBjaGVja2xpc3Q8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gKm5nSWY9XCIhdmlld2xvYWRpbmcgJiYgIXZpZXdub0RhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3Q9PT0nY3VzdG9tJ3x8c2VsZWN0PT09J3Rhc2snIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93c2luZ2xlXCIgY2xhc3M9XCJxYS1oZWFkaW5nIG0tMyBteC0xMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RoaXMuc2VsZWN0ZWRTZWN0aW9uWzBdPy5xdWVzdGlvbnNbMF19fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93c2luZ2xlJiZzaG93ZmlsdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuYXYgbmF2LXN0cmV0Y2ggbmF2LWxpbmUtdGFiczEgbmF2LWxpbmUtdGFicyBib3JkZXItdHJhbnNwYXJlbnQgZmxleC1ub3dyYXAgbXgtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYW5zd2VyRmlsdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cInRhc2tUYWIoaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXIgPT09IGl0ZW0ua2V5ID8gJ2FjdGl2ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmsgY3Vyc29yLXBvaW50ZXIgbm8tYm9yZGVyIG1lLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLmtleX19PHNwYW4gY2xhc3M9XCJteC0yIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnYWxsZXJ5Rm9ybS52YWx1ZS5maWx0ZXIgPT09IGl0ZW0ua2V5ID8gJ2JhZGdlLW51bS1wcmltYXJ5JyA6J2JhZGdlLW51bS1tdXRlZCdcIj57e2l0ZW0uY291bnR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNoZWNrbGlzdCBvZiB2aWV3Q2hlY2tsaXN0c0RhdGE/LmNoZWNrbGlzdEFuc3dlcnNcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiICpuZ0lmPVwiY2xpZW50RGF0YS5sb2dvJiZjbGllbnREYXRhLmxvZ28hPT0nJyYmc2hvd211bHRpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwibXQtNSBtYi0zIHRleHQtY2VudGVyIGljb25zaXplXCIgc3JjPVwie3tjbGllbnREYXRhLmxvZ299fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHB4LTEwIG10LTVcIiAqbmdJZj1cInNob3dtdWx0aVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+U3RvcmUgTmFtZTo8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPnt7Y2hlY2tsaXN0Py5zdG9yZVByb2ZpbGU/LnN0b3JlTmFtZX19IDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCIgKm5nSWY9XCJnYWxsZXJ5Rm9ybS52YWx1ZS50eXBlPT09J2NoZWNrbGlzdCdcIj5DaGVja2xpc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZTo8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInVuaS10aXRsZVwiICpuZ0lmPVwiZ2FsbGVyeUZvcm0udmFsdWUudHlwZT09PSd0YXNrJ1wiPlRhc2sgTmFtZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ1bmktc3VidGl0bGVcIj57e2NoZWNrbGlzdD8uY2hlY2tsaXN0SW5mbz8uY2hlY2tsaXN0TmFtZX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+U3RhdGUgJiBDb3VudHJ5IDo8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPnt7Y2hlY2tsaXN0Py5zdG9yZVByb2ZpbGU/LnN0YXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y2hlY2tsaXN0Py5zdG9yZVByb2ZpbGU/LkNvdW50cnl9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+RHVyYXRpb24gOjwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidW5pLXN1YnRpdGxlXCI+IHt7Y2hlY2tsaXN0Py5jaGVja2xpc3RJbmZvPy5kdXJhdGlvbn19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ1bmktdGl0bGVcIj5Oby4gb2YgUXVlc3Rpb25zIDo8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPnt7Y2hlY2tsaXN0Py5jaGVja2xpc3RJbmZvPy5ub29mUXVlc3Rpb25zfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInVuaS10aXRsZVwiPkRhdGUgOjwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidW5pLXN1YnRpdGxlXCI+IHt7Y2hlY2tsaXN0Py5jaGVja2xpc3RJbmZvPy5kYXRlfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInVuaS10aXRsZVwiPlN1Ym1pdHRlZCBCeSA6PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ1bmktc3VidGl0bGVcIj57e2NoZWNrbGlzdD8uY2hlY2tsaXN0SW5mbz8uc3VibWl0dGVkQnl9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+VGltZSA6PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ1bmktc3VidGl0bGVcIj4ge3tjaGVja2xpc3Q/LmNoZWNrbGlzdEluZm8/LnRpbWV9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBweC0xMFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgY2hlY2tsaXN0LnF1ZXN0aW9uQW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInFhLWJvZHJlciBteS01XCIgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIHNlY3Rpb24ucXVlc3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cInF1ZXN0aW9uLnJlZG98fHF1ZXN0aW9uLnJlZG89PT1mYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZpZXctZGV0YWlsIGNvbC0xMiB0ZXh0LWVuZCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlZpZXdJbkRldGFpbHMocXVlc3Rpb24sY2hlY2tsaXN0Py5jaGVja2xpc3RJbmZvLGNoZWNrbGlzdD8uc3RvcmVQcm9maWxlLHNlY3Rpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBpbiBkZXRhaWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTUgMTAuODMzM1YxNS44MzMzQzE1IDE2LjI3NTQgMTQuODI0NCAxNi42OTkzIDE0LjUxMTggMTcuMDExOEMxNC4xOTkzIDE3LjMyNDQgMTMuNzc1NCAxNy41IDEzLjMzMzMgMTcuNUg0LjE2NjY3QzMuNzI0NjQgMTcuNSAzLjMwMDcyIDE3LjMyNDQgMi45ODgxNiAxNy4wMTE4QzIuNjc1NTkgMTYuNjk5MyAyLjUgMTYuMjc1NCAyLjUgMTUuODMzM1Y2LjY2NjY3QzIuNSA2LjIyNDY0IDIuNjc1NTkgNS44MDA3MiAyLjk4ODE2IDUuNDg4MTZDMy4zMDA3MiA1LjE3NTU5IDMuNzI0NjQgNSA0LjE2NjY3IDVIOS4xNjY2N00xMi41IDIuNUgxNy41TTE3LjUgMi41VjcuNU0xNy41IDIuNUw4LjMzMzMzIDExLjY2NjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwOUJGM1wiIHN0cm9rZS13aWR0aD1cIjEuNjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgdy0xMDAgbS0zXCIgKm5nSWY9XCJzaG93c2luZ2xlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTFcIiBzdHlsZT1cIndpZHRoOjMuMzMzMyVcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAgaWQ9XCJsYWJlbFwiIFsobmdNb2RlbCldPVwicXVlc3Rpb24uY2hlY2tlZFwiIFtkaXNhYmxlZF09XCJxdWVzdGlvbi5yZWRvXCIgKGNsaWNrKT1cInNlbGVjdGVkbXVsdGlUYXNrKCRldmVudCxjaGVja2xpc3QscXVlc3Rpb24sY2hlY2tsaXN0Py5jaGVja2xpc3RJbmZvLHNlY3Rpb24pXCIgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlciBtdC0yIG1lLTRcIiAgdHlwZT1cImNoZWNrYm94XCIgPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyB0ZXh0LXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NoZWNrbGlzdD8uc3RvcmVQcm9maWxlPy5zdG9yZU5hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04IHRleHQtZW5kIHRpdGxlLWRlc2NyaXB0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJtaXR0ZWQgYnkgOiB7e2NoZWNrbGlzdD8uY2hlY2tsaXN0SW5mbz8uc3VibWl0dGVkQnl9fSBPbiA6IHt7Y2hlY2tsaXN0Py5jaGVja2xpc3RJbmZvPy5kYXRlfX0ge3tjaGVja2xpc3Q/LmNoZWNrbGlzdEluZm8/LnRpbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cInNob3dtdWx0aVwiIGNsYXNzPVwicWEtaGVhZGluZ1wiPnt7cXVlc3Rpb24/LnFub319LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cXVlc3Rpb24/LnFuYW1lfX08L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJQYXJ0aWFsbHkgbXktMyBweC01XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbj8uYW5zd2VyVHlwZT09PSdkZXNjcmlwdGl2ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBxdWVzdGlvbi51c2VyQW5zd2VyO2xldCBpPWluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGNoZWNrbGlzdCB0eXBlIHdpdGggc2luZ2xlIGltYWdlIGJ1dCBpbnNpZGUgY29sbGFnZS1ncmlkIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICdjaGVja2xpc3QnIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSAhPT0gJydcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlJlZmVyZW5jZSBJbWFnZTwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhZ2UtZ3JpZFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYWdlLXRpbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ28gY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib3BlbkltYWdlUG9wdXAxKGVudmlyb25tZW50LlRyYXhBbnN3ZXJDRE4gKyBxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlLDApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROICsgcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFF1ZXN0aW9uIFJlZmVyZW5jZSBJbWFnZXMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICd0YXNrJyAmJiBoYXNRdWVzdGlvblJlZmVyZW5jZUltYWdlcyhxdWVzdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+UmVmZXJlbmNlIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYWdlLWdyaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJzogZ2V0R3JpZENvbHVtbnMocXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZS5sZW5ndGgpIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlO2xldCBpPWluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhZ2UtdGlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNWYWxpZEltYWdlKGl0ZW0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvcGVuSW1hZ2VQb3B1cChnZXRSZWZJbWFnZVVybHMocXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSksZ2V0UmVmSW1hZ2VOYW1lcyhxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlKSxpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImVudmlyb25tZW50LlRyYXhBbnN3ZXJDRE4gKyBpdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlJlZmVyZW5jZSBpbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdC0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpdGVtLnNvcEZsYWcgPyAnZmxhZ2Nsb3VyJzonJ1wiPnt7aXRlbS5hbnN3ZXJ9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZW1hcmtzVHh0XCIgKm5nSWY9XCJxdWVzdGlvbi5yZW1hcmtzIT09JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1hcmtzIDoge3txdWVzdGlvbi5yZW1hcmtzfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlBhcnRpYWxseSBteS0zIHB4LTVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24/LmFuc3dlclR5cGU9PT0nbGluZWFyc2NhbGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBxdWVzdGlvbi51c2VyQW5zd2VyO2xldCBpPWluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnR5cGU9PT0nY2hlY2tsaXN0JyYmcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSE9PScnJiZxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlIT09bnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+UmVmZXJlbmNlIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ28gY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib3BlbkltYWdlUG9wdXAxKGVudmlyb25tZW50LlRyYXhBbnN3ZXJDRE4gKyBxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlLDApXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e3F1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2V9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUXVlc3Rpb24gUmVmZXJlbmNlIEltYWdlcyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICd0YXNrJyAmJiBoYXNRdWVzdGlvblJlZmVyZW5jZUltYWdlcyhxdWVzdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5SZWZlcmVuY2UgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFnZS1ncmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJzogZ2V0R3JpZENvbHVtbnMocXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZS5sZW5ndGgpIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZTtsZXQgaT1pbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhZ2UtdGlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc1ZhbGlkSW1hZ2UoaXRlbSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib3BlbkltYWdlUG9wdXAoZ2V0UmVmSW1hZ2VVcmxzKHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UpLGdldFJlZkltYWdlTmFtZXMocXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSksaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImVudmlyb25tZW50LlRyYXhBbnN3ZXJDRE4gKyBpdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiUmVmZXJlbmNlIGltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGJyPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdC00XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0uc29wRmxhZyA/ICdmbGFnY2xvdXInOicnXCI+e3tpdGVtLmFuc3dlcn19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVtYXJrc1R4dFwiICpuZ0lmPVwicXVlc3Rpb24ucmVtYXJrcyE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1hcmtzIDoge3txdWVzdGlvbi5yZW1hcmtzfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlBhcnRpYWxseSBteS0zIHB4LTVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24/LmFuc3dlclR5cGU9PT0ndGltZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXN0aW9uLnVzZXJBbnN3ZXI7bGV0IGk9aW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2FsbGVyeUZvcm0udmFsdWUudHlwZT09PSdjaGVja2xpc3QnJiZxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlIT09JycmJnF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UhPT1udWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5SZWZlcmVuY2UgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nbyBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvcGVuSW1hZ2VQb3B1cDEoZW52aXJvbm1lbnQuVHJheEFuc3dlckNETiArIHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UsMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3txdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFF1ZXN0aW9uIFJlZmVyZW5jZSBJbWFnZXMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnYWxsZXJ5Rm9ybS52YWx1ZS50eXBlID09PSAndGFzaycgJiYgaGFzUXVlc3Rpb25SZWZlcmVuY2VJbWFnZXMocXVlc3Rpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+UmVmZXJlbmNlIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhZ2UtZ3JpZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyc6IGdldEdyaWRDb2x1bW5zKHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UubGVuZ3RoKSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2U7bGV0IGk9aW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYWdlLXRpbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNWYWxpZEltYWdlKGl0ZW0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9wZW5JbWFnZVBvcHVwKGdldFJlZkltYWdlVXJscyhxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlKSxnZXRSZWZJbWFnZU5hbWVzKHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UpLGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROICsgaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlJlZmVyZW5jZSBpbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm10LTRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5zb3BGbGFnID8gJ2ZsYWdjbG91cic6JydcIj57e2l0ZW0uYW5zd2VyfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZW1hcmtzVHh0XCIgKm5nSWY9XCJxdWVzdGlvbi5yZW1hcmtzIT09JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbWFya3MgOiB7e3F1ZXN0aW9uLnJlbWFya3N9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiUGFydGlhbGx5IG15LTMgcHgtNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbj8uYW5zd2VyVHlwZT09PSdkYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlc3Rpb24udXNlckFuc3dlcjtsZXQgaT1pbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnYWxsZXJ5Rm9ybS52YWx1ZS50eXBlPT09J2NoZWNrbGlzdCcmJnF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UhPT0nJyYmcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSE9PW51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlJlZmVyZW5jZSBJbWFnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9wZW5JbWFnZVBvcHVwMShlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROICsgcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSwwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e3F1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2V9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUXVlc3Rpb24gUmVmZXJlbmNlIEltYWdlcyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICd0YXNrJyAmJiBoYXNRdWVzdGlvblJlZmVyZW5jZUltYWdlcyhxdWVzdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5SZWZlcmVuY2UgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFnZS1ncmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJzogZ2V0R3JpZENvbHVtbnMocXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZS5sZW5ndGgpIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZTtsZXQgaT1pbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhZ2UtdGlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc1ZhbGlkSW1hZ2UoaXRlbSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkltYWdlUG9wdXAoZ2V0UmVmSW1hZ2VVcmxzKHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UpLGdldFJlZkltYWdlTmFtZXMocXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSksaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImVudmlyb25tZW50LlRyYXhBbnN3ZXJDRE4gKyBpdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiUmVmZXJlbmNlIGltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdC00XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0uc29wRmxhZyA/ICdmbGFnY2xvdXInOicnXCI+e3tpdGVtLmFuc3dlcn19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVtYXJrc1R4dFwiICpuZ0lmPVwicXVlc3Rpb24ucmVtYXJrcyE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1hcmtzIDoge3txdWVzdGlvbi5yZW1hcmtzfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJQYXJ0aWFsbHkgbXktMyBweC01XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uPy5hbnN3ZXJUeXBlPT09J3llcy9ubydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXN0aW9uLnVzZXJBbnN3ZXI7bGV0IGk9aW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2FsbGVyeUZvcm0udmFsdWUudHlwZT09PSdjaGVja2xpc3QnJiZxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlIT09JycmJnF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UhPT1udWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5SZWZlcmVuY2UgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nbyBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvcGVuSW1hZ2VQb3B1cDEoZW52aXJvbm1lbnQuVHJheEFuc3dlckNETiArIHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UsMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3txdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnR5cGU9PT0nY2hlY2tsaXN0JyYmcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSE9PScnJiZxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlIT09bnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUXVlc3Rpb24gUmVmZXJlbmNlIEltYWdlcyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICd0YXNrJyAmJiBoYXNRdWVzdGlvblJlZmVyZW5jZUltYWdlcyhxdWVzdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5SZWZlcmVuY2UgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFnZS1ncmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJzogZ2V0R3JpZENvbHVtbnMocXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZS5sZW5ndGgpIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZTtsZXQgaT1pbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhZ2UtdGlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc1ZhbGlkSW1hZ2UoaXRlbSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkltYWdlUG9wdXAoZ2V0UmVmSW1hZ2VVcmxzKHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UpLGdldFJlZkltYWdlTmFtZXMocXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSksaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImVudmlyb25tZW50LlRyYXhBbnN3ZXJDRE4gKyBpdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiUmVmZXJlbmNlIGltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXQtNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpdGVtLnNvcEZsYWcgPyAnZmxhZ2Nsb3VyJzonJ1wiPnt7aXRlbS5hbnN3ZXJ9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udmFsaWRhdGlvbiYmaXRlbS52YWxpZGF0aW9uQW5zd2VyIT09JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwiaXRlbS5yZWZlcmVuY2VJbWFnZSE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+UmVmZXJlbmNlIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9wZW5JbWFnZVBvcHVwMShlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROICsgaXRlbS5yZWZlcmVuY2VJbWFnZSwwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLnJlZmVyZW5jZUltYWdlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0udmFsaWRhdGlvblR5cGU9PT0nQ2FwdHVyZSBJbWFnZSc/J2NvbC1tZC02JzonY29sLW1kLTEyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09PSdDYXB0dXJlIEltYWdlJ3x8aXRlbS52YWxpZGF0aW9uVHlwZT09PSdDYXB0dXJlIFZpZGVvJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uIEFuc3dlcjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nbyBjdXJzb3ItcG9pbnRlclwiICAoY2xpY2spPVwib3BlbkltYWdlUG9wdXAxKGVudmlyb25tZW50LlRyYXhBbnN3ZXJDRE4gKyBpdGVtLnZhbGlkYXRpb25BbnN3ZXIsMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PT0nQ2FwdHVyZSBJbWFnZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7aXRlbS52YWxpZGF0aW9uQW5zd2VyfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlIHctMTAwIGgtNDUwcHggcC0zXCIgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlID09PSAnQ2FwdHVyZSBWaWRlbydcIj5cclxuICA8dmlkZW8gY29udHJvbHMgY2xhc3M9XCJ3LTEwMCBoLTEwMFwiIFtzcmNdPVwiZW52aXJvbm1lbnQuVHJheEFuc3dlckNETiArIGl0ZW0udmFsaWRhdGlvbkFuc3dlclwiPlxyXG4gIDwvdmlkZW8+XHJcblxyXG4gICAgPHNwYW4gY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSB0b3AtMCBlbmQtMCBtLTMgY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAoY2xpY2spPVwiZG93bmxvYWRWaWRlbyhpdGVtLnZhbGlkYXRpb25BbnN3ZXIpXCJcclxuICAgIHRpdGxlPVwiRG93bmxvYWQgVmlkZW9cIiBpZD1cImRvd25sb2FkLWljb25cIiB3aWR0aD1cIjQ0XCIgaGVpZ2h0PVwiNDRcIiB2aWV3Qm94PVwiMCAwIDQ0IDQ0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbi1vdmVybGF5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBmaWx0ZXI9XCJ1cmwoI2ZpbHRlcjBfZF8zODIyXzE5NDc5KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyXCIgeT1cIjFcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiByeD1cIjhcIiBmaWxsPVwid2hpdGVcIj48L3JlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjIuNVwiIHk9XCIxLjVcIiB3aWR0aD1cIjM5XCIgaGVpZ2h0PVwiMzlcIiByeD1cIjcuNVwiIHN0cm9rZT1cIiNEMEQ1RERcIj48L3JlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yOS41IDIzLjVWMjYuODMzM0MyOS41IDI3LjI3NTQgMjkuMzI0NCAyNy42OTkzIDI5LjAxMTggMjguMDExOEMyOC42OTkzIDI4LjMyNDQgMjguMjc1NCAyOC41IDI3LjgzMzMgMjguNUgxNi4xNjY3QzE1LjcyNDYgMjguNSAxNS4zMDA3IDI4LjMyNDQgMTQuOTg4MiAyOC4wMTE4QzE0LjY3NTYgMjcuNjk5MyAxNC41IDI3LjI3NTQgMTQuNSAyNi44MzMzVjIzLjVNMTcuODMzMyAxOS4zMzMzTDIyIDIzLjVNMjIgMjMuNUwyNi4xNjY3IDE5LjMzMzNNMjIgMjMuNVYxMy41XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsdGVyIGlkPVwiZmlsdGVyMF9kXzM4MjJfMTk0NzlcIiB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCI0NFwiIGhlaWdodD1cIjQ0XCIgZmlsdGVyVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz1cInNSR0JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT1cIjBcIiByZXN1bHQ9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIj48L2ZlRmxvb2Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGluPVwiU291cmNlQWxwaGFcIiB0eXBlPVwibWF0cml4XCIgdmFsdWVzPVwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwiaGFyZEFscGhhXCI+PC9mZUNvbG9yTWF0cml4PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVPZmZzZXQgZHk9XCIxXCI+PC9mZU9mZnNldD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj1cIjFcIj48L2ZlR2F1c3NpYW5CbHVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB0eXBlPVwibWF0cml4XCIgdmFsdWVzPVwiMCAwIDAgMCAwLjA2Mjc0NTEgMCAwIDAgMCAwLjA5NDExNzYgMCAwIDAgMCAwLjE1Njg2MyAwIDAgMCAwLjA1IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mZUNvbG9yTWF0cml4PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW4yPVwiQmFja2dyb3VuZEltYWdlRml4XCIgcmVzdWx0PVwiZWZmZWN0MV9kcm9wU2hhZG93XzM4MjJfMTk0NzlcIj48L2ZlQmxlbmQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbj1cIlNvdXJjZUdyYXBoaWNcIiBpbjI9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMzgyMl8xOTQ3OVwiIHJlc3VsdD1cInNoYXBlXCI+PC9mZUJsZW5kPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsdGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlbWFya3NUeHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09PSdEZXNjcmlwdGl2ZSBBbnN3ZXInXCI+VmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuc3dlciA6e3tpdGVtLnZhbGlkYXRpb25BbnN3ZXJ9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZW1hcmtzVHh0XCIgKm5nSWY9XCJxdWVzdGlvbi5yZW1hcmtzIT09JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbWFya3MgOiB7e3F1ZXN0aW9uLnJlbWFya3N9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiUGFydGlhbGx5IG15LTMgcHgtNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbj8uYW5zd2VyVHlwZT09PSdtdWx0aXBsZWNob2ljZXNpbmdsZSdcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnYWxsZXJ5Rm9ybS52YWx1ZS50eXBlPT09J2NoZWNrbGlzdCcmJnF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UhPT1udWxsJiZxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlIT09JycmJnF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UhPT11bmRlZmluZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+UmVmZXJlbmNlIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nbyBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvcGVuSW1hZ2VQb3B1cDEoZW52aXJvbm1lbnQuVHJheEFuc3dlckNETiArIHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UsMClcIiAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7cXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBRdWVzdGlvbiBSZWZlcmVuY2UgSW1hZ2VzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICd0YXNrJyAmJiBoYXNRdWVzdGlvblJlZmVyZW5jZUltYWdlcyhxdWVzdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlJlZmVyZW5jZSBJbWFnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhZ2UtZ3JpZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJzogZ2V0R3JpZENvbHVtbnMocXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZS5sZW5ndGgpIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2U7bGV0IGk9aW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhZ2UtdGlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzVmFsaWRJbWFnZShpdGVtKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkltYWdlUG9wdXAoZ2V0UmVmSW1hZ2VVcmxzKHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UpLGdldFJlZkltYWdlTmFtZXMocXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSksaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiZW52aXJvbm1lbnQuVHJheEFuc3dlckNETiArIGl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlJlZmVyZW5jZSBpbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXN0aW9uLnVzZXJBbnN3ZXI7bGV0IGk9aW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXQtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpdGVtLnNvcEZsYWcgPyAnZmxhZ2Nsb3VyJzonJ1wiPnt7aXRlbS5hbnN3ZXJ9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5yZWZlcmVuY2VJbWFnZSE9PW51bGwmJml0ZW0ucmVmZXJlbmNlSW1hZ2UhPT0nJyYmZ2FsbGVyeUZvcm0udmFsdWUudHlwZT09PSdjaGVja2xpc3QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5SZWZlcmVuY2UgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nbyBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvcGVuSW1hZ2VQb3B1cDEoZW52aXJvbm1lbnQuVHJheEFuc3dlckNETiArIGl0ZW0ucmVmZXJlbmNlSW1hZ2UsMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLnJlZmVyZW5jZUltYWdlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJnYWxsZXJ5Rm9ybS52YWx1ZS50eXBlID09PSAndGFzaydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhhc1JlZmVyZW5jZUltYWdlcyhxdWVzdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlIEltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYWdlLWdyaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhhc1JlZmVyZW5jZUltYWdlcyhxdWVzdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFuc3dlciBvZiBxdWVzdGlvbi5hbnN3ZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhbnN3ZXIucmVmZXJlbmNlSW1hZ2U/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYWdlLXRpbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBhbnN3ZXIucmVmZXJlbmNlSW1hZ2U7bGV0IGk9aW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuSW1hZ2VQb3B1cChnZXRSZWZJbWFnZVVybHMoYW5zd2VyLnJlZmVyZW5jZUltYWdlKSxnZXRSZWZJbWFnZU5hbWVzKGFuc3dlci5yZWZlcmVuY2VJbWFnZSksaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROICsgaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09PSdDYXB0dXJlIEltYWdlJz8nY29sLW1kLTYnOidjb2wtbWQtMTInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udmFsaWRhdGlvbiYmaXRlbS52YWxpZGF0aW9uQW5zd2VyIT09JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PT0nQ2FwdHVyZSBJbWFnZSd8fGl0ZW0udmFsaWRhdGlvblR5cGU9PT0nQ2FwdHVyZSBWaWRlbydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbiBBbnN3ZXI8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ28gY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib3BlbkltYWdlUG9wdXAxKGVudmlyb25tZW50LlRyYXhBbnN3ZXJDRE4gKyBpdGVtLnZhbGlkYXRpb25BbnN3ZXIsMClcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT09J0NhcHR1cmUgSW1hZ2UnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0udmFsaWRhdGlvbkFuc3dlcn19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZSB3LTEwMCBoLTQ1MHB4IHAtM1wiICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZSA9PT0gJ0NhcHR1cmUgVmlkZW8nXCI+XHJcbiAgPHZpZGVvIGNvbnRyb2xzIGNsYXNzPVwidy0xMDAgaC0xMDBcIiBbc3JjXT1cImVudmlyb25tZW50LlRyYXhBbnN3ZXJDRE4gKyBpdGVtLnZhbGlkYXRpb25BbnN3ZXJcIj5cclxuICA8L3ZpZGVvPlxyXG5cclxuICAgIDxzcGFuIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgdG9wLTAgZW5kLTAgbS0zIGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKGNsaWNrKT1cImRvd25sb2FkVmlkZW8oaXRlbS52YWxpZGF0aW9uQW5zd2VyKVwiXHJcbiAgICB0aXRsZT1cIkRvd25sb2FkIFZpZGVvXCIgaWQ9XCJkb3dubG9hZC1pY29uXCIgd2lkdGg9XCI0NFwiIGhlaWdodD1cIjQ0XCIgdmlld0JveD1cIjAgMCA0NCA0NFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb24tb3ZlcmxheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgZmlsdGVyPVwidXJsKCNmaWx0ZXIwX2RfMzgyMl8xOTQ3OSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMlwiIHk9XCIxXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCI4XCIgZmlsbD1cIndoaXRlXCI+PC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyLjVcIiB5PVwiMS41XCIgd2lkdGg9XCIzOVwiIGhlaWdodD1cIjM5XCIgcng9XCI3LjVcIiBzdHJva2U9XCIjRDBENUREXCI+PC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjkuNSAyMy41VjI2LjgzMzNDMjkuNSAyNy4yNzU0IDI5LjMyNDQgMjcuNjk5MyAyOS4wMTE4IDI4LjAxMThDMjguNjk5MyAyOC4zMjQ0IDI4LjI3NTQgMjguNSAyNy44MzMzIDI4LjVIMTYuMTY2N0MxNS43MjQ2IDI4LjUgMTUuMzAwNyAyOC4zMjQ0IDE0Ljk4ODIgMjguMDExOEMxNC42NzU2IDI3LjY5OTMgMTQuNSAyNy4yNzU0IDE0LjUgMjYuODMzM1YyMy41TTE3LjgzMzMgMTkuMzMzM0wyMiAyMy41TTIyIDIzLjVMMjYuMTY2NyAxOS4zMzMzTTIyIDIzLjVWMTMuNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbHRlciBpZD1cImZpbHRlcjBfZF8zODIyXzE5NDc5XCIgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiNDRcIiBoZWlnaHQ9XCI0NFwiIGZpbHRlclVuaXRzPVwidXNlclNwYWNlT25Vc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9XCJzUkdCXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUZsb29kIGZsb29kLW9wYWNpdHk9XCIwXCIgcmVzdWx0PVwiQmFja2dyb3VuZEltYWdlRml4XCI+PC9mZUZsb29kPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCBpbj1cIlNvdXJjZUFscGhhXCIgdHlwZT1cIm1hdHJpeFwiIHZhbHVlcz1cIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cImhhcmRBbHBoYVwiPjwvZmVDb2xvck1hdHJpeD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlT2Zmc2V0IGR5PVwiMVwiPjwvZmVPZmZzZXQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249XCIxXCI+PC9mZUdhdXNzaWFuQmx1cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdHlwZT1cIm1hdHJpeFwiIHZhbHVlcz1cIjAgMCAwIDAgMC4wNjI3NDUxIDAgMCAwIDAgMC4wOTQxMTc2IDAgMCAwIDAgMC4xNTY4NjMgMCAwIDAgMC4wNSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmVDb2xvck1hdHJpeD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluMj1cIkJhY2tncm91bmRJbWFnZUZpeFwiIHJlc3VsdD1cImVmZmVjdDFfZHJvcFNoYWRvd18zODIyXzE5NDc5XCI+PC9mZUJsZW5kPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW49XCJTb3VyY2VHcmFwaGljXCIgaW4yPVwiZWZmZWN0MV9kcm9wU2hhZG93XzM4MjJfMTk0NzlcIiByZXN1bHQ9XCJzaGFwZVwiPjwvZmVCbGVuZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbHRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG48L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT09J0Rlc2NyaXB0aXZlIEFuc3dlcidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpdGVtLnNvcEZsYWcgPyAnZmxhZ2Nsb3VyJzonJ1wiPlZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5zd2VyIDoge3tpdGVtLnZhbGlkYXRpb25BbnN3ZXJ9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVtYXJrc1R4dFwiICpuZ0lmPVwicXVlc3Rpb24ucmVtYXJrcyE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1hcmtzIDoge3txdWVzdGlvbi5yZW1hcmtzfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cInF1ZXN0aW9uPy5hbnN3ZXJUeXBlPT09J2ltYWdlJ1wiPlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2FsbGVyeUZvcm0udmFsdWUudHlwZSA9PT0gJ3Rhc2snICYmIChoYXNSZWZlcmVuY2VJbWFnZXMocXVlc3Rpb24pIHx8IGhhc0NoZWNrbGlzdFJlZmVyZW5jZUltYWdlcyhxdWVzdGlvbikpXCIgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGFzUmVmZXJlbmNlSW1hZ2VzKHF1ZXN0aW9uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgSW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhZ2UtZ3JpZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGFzUmVmZXJlbmNlSW1hZ2VzKHF1ZXN0aW9uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIHF1ZXN0aW9uLmFuc3dlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFuc3dlci5yZWZlcmVuY2VJbWFnZT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhZ2UtdGlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFuc3dlci5yZWZlcmVuY2VJbWFnZTtsZXQgaT1pbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5JbWFnZVBvcHVwKGdldFJlZkltYWdlVXJscyhhbnN3ZXIucmVmZXJlbmNlSW1hZ2UpLGdldFJlZkltYWdlTmFtZXMoYW5zd2VyLnJlZmVyZW5jZUltYWdlKSxpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImVudmlyb25tZW50LlRyYXhBbnN3ZXJDRE4gKyBpdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZvciBDaGVja2xpc3QgVHlwZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnYWxsZXJ5Rm9ybS52YWx1ZS50eXBlID09PSAnY2hlY2tsaXN0JyYmIChoYXNSZWZlcmVuY2VJbWFnZXMocXVlc3Rpb24pIHx8IGhhc0NoZWNrbGlzdFJlZmVyZW5jZUltYWdlcyhxdWVzdGlvbikpXCIgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGFzQ2hlY2tsaXN0UmVmZXJlbmNlSW1hZ2VzKHF1ZXN0aW9uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgSW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhZ2UtZ3JpZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGFzQ2hlY2tsaXN0UmVmZXJlbmNlSW1hZ2VzKHF1ZXN0aW9uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIHF1ZXN0aW9uLmFuc3dlcnM7bGV0IGk9aW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYWdlLXRpbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYW5zd2VyLnJlZmVyZW5jZUltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5JbWFnZVBvcHVwKGdldFJlZmNoZWNrbGlzdEltYWdlVXJscyhxdWVzdGlvbi5hbnN3ZXJzKSxnZXRSZWZjaGVja2xpc3RJbWFnZU5hbWVzKHF1ZXN0aW9uLmFuc3dlcnMpLGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROICsgYW5zd2VyLnJlZmVyZW5jZUltYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJoYXNSZWZlcmVuY2VJbWFnZXMocXVlc3Rpb24pIHx8IGhhc0NoZWNrbGlzdFJlZmVyZW5jZUltYWdlcyhxdWVzdGlvbikgPyAnY29sLW1kLTYnIDogJ2NvbC1tZC02J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlVwbG9hZGVkIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhZ2UtZ3JpZFwiIFtuZ1N0eWxlXT1cInsnZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJzogZ2V0R3JpZENvbHVtbnMocXVlc3Rpb24udXNlckFuc3dlci5sZW5ndGgpLFxyXG4gICAgICAgICdncmlkLWF1dG8tcm93cyc6IGdldEdyaWRSb3dIZWlnaHQocXVlc3Rpb24udXNlckFuc3dlci5sZW5ndGgpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXN0aW9uLnVzZXJBbnN3ZXI7bGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbGxhZ2UtdGlsZVwiPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuSW1hZ2VQb3B1cChnZXRJbWFnZVVybHMocXVlc3Rpb24udXNlckFuc3dlciksZ2V0SW1hZ2VOYW1lcyhxdWVzdGlvbi51c2VyQW5zd2VyKSxpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0uYW5zd2VyfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09PSdDYXB0dXJlIEltYWdlJz8nY29sLW1kLTYgbXQtMic6J2NvbC1tZC0xMiBtdC0yJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb24mJml0ZW0udmFsaWRhdGlvbkFuc3dlciE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT09J0NhcHR1cmUgSW1hZ2UnfHxpdGVtLnZhbGlkYXRpb25UeXBlPT09J0NhcHR1cmUgVmlkZW8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb24gQW5zd2VyPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1sb2dvICBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvcGVuSW1hZ2VQb3B1cDEoZW52aXJvbm1lbnQuVHJheEFuc3dlckNETiArIGl0ZW0udmFsaWRhdGlvbkFuc3dlciwwKVwiICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT09J0NhcHR1cmUgSW1hZ2UnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0udmFsaWRhdGlvbkFuc3dlcn19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlIHctMTAwIGgtNDUwcHggcC0zXCIgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlID09PSAnQ2FwdHVyZSBWaWRlbydcIj5cclxuICA8dmlkZW8gY29udHJvbHMgY2xhc3M9XCJ3LTEwMCBoLTEwMFwiIFtzcmNdPVwiZW52aXJvbm1lbnQuVHJheEFuc3dlckNETiArIGl0ZW0udmFsaWRhdGlvbkFuc3dlclwiPlxyXG4gIDwvdmlkZW8+XHJcblxyXG4gICAgPHNwYW4gY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSB0b3AtMCBlbmQtMCBtLTMgY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAoY2xpY2spPVwiZG93bmxvYWRWaWRlbyhpdGVtLnZhbGlkYXRpb25BbnN3ZXIpXCJcclxuICAgIHRpdGxlPVwiRG93bmxvYWQgVmlkZW9cIiBpZD1cImRvd25sb2FkLWljb25cIiB3aWR0aD1cIjQ0XCIgaGVpZ2h0PVwiNDRcIiB2aWV3Qm94PVwiMCAwIDQ0IDQ0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbi1vdmVybGF5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBmaWx0ZXI9XCJ1cmwoI2ZpbHRlcjBfZF8zODIyXzE5NDc5KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyXCIgeT1cIjFcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiByeD1cIjhcIiBmaWxsPVwid2hpdGVcIj48L3JlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjIuNVwiIHk9XCIxLjVcIiB3aWR0aD1cIjM5XCIgaGVpZ2h0PVwiMzlcIiByeD1cIjcuNVwiIHN0cm9rZT1cIiNEMEQ1RERcIj48L3JlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yOS41IDIzLjVWMjYuODMzM0MyOS41IDI3LjI3NTQgMjkuMzI0NCAyNy42OTkzIDI5LjAxMTggMjguMDExOEMyOC42OTkzIDI4LjMyNDQgMjguMjc1NCAyOC41IDI3LjgzMzMgMjguNUgxNi4xNjY3QzE1LjcyNDYgMjguNSAxNS4zMDA3IDI4LjMyNDQgMTQuOTg4MiAyOC4wMTE4QzE0LjY3NTYgMjcuNjk5MyAxNC41IDI3LjI3NTQgMTQuNSAyNi44MzMzVjIzLjVNMTcuODMzMyAxOS4zMzMzTDIyIDIzLjVNMjIgMjMuNUwyNi4xNjY3IDE5LjMzMzNNMjIgMjMuNVYxMy41XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsdGVyIGlkPVwiZmlsdGVyMF9kXzM4MjJfMTk0NzlcIiB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCI0NFwiIGhlaWdodD1cIjQ0XCIgZmlsdGVyVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz1cInNSR0JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT1cIjBcIiByZXN1bHQ9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIj48L2ZlRmxvb2Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGluPVwiU291cmNlQWxwaGFcIiB0eXBlPVwibWF0cml4XCIgdmFsdWVzPVwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwiaGFyZEFscGhhXCI+PC9mZUNvbG9yTWF0cml4PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVPZmZzZXQgZHk9XCIxXCI+PC9mZU9mZnNldD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj1cIjFcIj48L2ZlR2F1c3NpYW5CbHVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB0eXBlPVwibWF0cml4XCIgdmFsdWVzPVwiMCAwIDAgMCAwLjA2Mjc0NTEgMCAwIDAgMCAwLjA5NDExNzYgMCAwIDAgMCAwLjE1Njg2MyAwIDAgMCAwLjA1IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mZUNvbG9yTWF0cml4PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW4yPVwiQmFja2dyb3VuZEltYWdlRml4XCIgcmVzdWx0PVwiZWZmZWN0MV9kcm9wU2hhZG93XzM4MjJfMTk0NzlcIj48L2ZlQmxlbmQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbj1cIlNvdXJjZUdyYXBoaWNcIiBpbjI9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMzgyMl8xOTQ3OVwiIHJlc3VsdD1cInNoYXBlXCI+PC9mZUJsZW5kPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsdGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09PSdEZXNjcmlwdGl2ZSBBbnN3ZXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5zb3BGbGFnID8gJ2ZsYWdjbG91cic6JydcIj5WYWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuc3dlciA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbS52YWxpZGF0aW9uQW5zd2VyfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZW1hcmtzVHh0XCIgKm5nSWY9XCJxdWVzdGlvbi5yZW1hcmtzIT09JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1hcmtzIDoge3txdWVzdGlvbi5yZW1hcmtzfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHB4LTVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uPy5hbnN3ZXJUeXBlPT09J211bHRpcGxlY2hvaWNlbXVsdGlwbGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnYWxsZXJ5Rm9ybS52YWx1ZS50eXBlPT09J2NoZWNrbGlzdCcmJnF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UhPT1udWxsJiZxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlIT09JycmJnF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UhPT11bmRlZmluZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+UmVmZXJlbmNlIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nbyBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvcGVuSW1hZ2VQb3B1cDEoZW52aXJvbm1lbnQuVHJheEFuc3dlckNETiArIHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UsMClcIiAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7cXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICd0YXNrJyAmJiBoYXNRdWVzdGlvblJlZmVyZW5jZUltYWdlcyhxdWVzdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUXVlc3Rpb24gUmVmZXJlbmNlIEltYWdlcyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICd0YXNrJyAmJiBoYXNRdWVzdGlvblJlZmVyZW5jZUltYWdlcyhxdWVzdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5SZWZlcmVuY2UgSW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFnZS1ncmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJzogZ2V0R3JpZENvbHVtbnMocXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZS5sZW5ndGgpIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZTtsZXQgaT1pbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhZ2UtdGlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc1ZhbGlkSW1hZ2UoaXRlbSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkltYWdlUG9wdXAoZ2V0UmVmSW1hZ2VVcmxzKHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UpLGdldFJlZkltYWdlTmFtZXMocXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSksaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImVudmlyb25tZW50LlRyYXhBbnN3ZXJDRE4gKyBpdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiUmVmZXJlbmNlIGltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJQYXJ0aWFsbHkgbXktMyBweC01XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXN0aW9uLnVzZXJBbnN3ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXQtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5zb3BGbGFnID8gJ2ZsYWdjbG91cic6JydcIj57e2l0ZW0uYW5zd2VyfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0ucmVmZXJlbmNlSW1hZ2UhPT1udWxsJiZpdGVtLnJlZmVyZW5jZUltYWdlIT09JycmJmdhbGxlcnlGb3JtLnZhbHVlLnR5cGU9PT0nY2hlY2tsaXN0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlJlZmVyZW5jZSBJbWFnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nbyBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvcGVuSW1hZ2VQb3B1cDEoZW52aXJvbm1lbnQuVHJheEFuc3dlckNETiArIGl0ZW0ucmVmZXJlbmNlSW1hZ2UsMClcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0ucmVmZXJlbmNlSW1hZ2V9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICd0YXNrJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGFzUmVmZXJlbmNlSW1hZ2VzKHF1ZXN0aW9uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlIEltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhZ2UtZ3JpZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhhc1JlZmVyZW5jZUltYWdlcyhxdWVzdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIHF1ZXN0aW9uLmFuc3dlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYW5zd2VyLnJlZmVyZW5jZUltYWdlPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhZ2UtdGlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBhbnN3ZXIucmVmZXJlbmNlSW1hZ2U7bGV0IGk9aW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5JbWFnZVBvcHVwKGdldFJlZkltYWdlVXJscyhhbnN3ZXIucmVmZXJlbmNlSW1hZ2UpLGdldFJlZkltYWdlTmFtZXMoYW5zd2VyLnJlZmVyZW5jZUltYWdlKSxpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROICsgaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJpdGVtLnZhbGlkYXRpb25UeXBlPT09J0NhcHR1cmUgSW1hZ2UnPydjb2wtbWQtNic6J2NvbC1tZC0xMidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udmFsaWRhdGlvbiYmaXRlbS52YWxpZGF0aW9uQW5zd2VyJiZpdGVtLnZhbGlkYXRpb25BbnN3ZXIhPT0nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlPT09J0NhcHR1cmUgSW1hZ2UnfHxpdGVtLnZhbGlkYXRpb25UeXBlPT09J0NhcHR1cmUgVmlkZW8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uIEFuc3dlcjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLWxvZ28gIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9wZW5JbWFnZVBvcHVwMShlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROICsgaXRlbS52YWxpZGF0aW9uQW5zd2VyLDApXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PT0nQ2FwdHVyZSBJbWFnZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0udmFsaWRhdGlvbkFuc3dlcn19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmUgdy0xMDAgaC00NTBweCBwLTNcIiAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGUgPT09ICdDYXB0dXJlIFZpZGVvJ1wiPlxyXG4gIDx2aWRlbyBjb250cm9scyBjbGFzcz1cInctMTAwIGgtMTAwXCIgW3NyY109XCJlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROICsgaXRlbS52YWxpZGF0aW9uQW5zd2VyXCI+XHJcbiAgPC92aWRlbz5cclxuXHJcbiAgICA8c3BhbiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHRvcC0wIGVuZC0wIG0tMyBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIChjbGljayk9XCJkb3dubG9hZFZpZGVvKGl0ZW0udmFsaWRhdGlvbkFuc3dlcilcIlxyXG4gICAgdGl0bGU9XCJEb3dubG9hZCBWaWRlb1wiIGlkPVwiZG93bmxvYWQtaWNvblwiIHdpZHRoPVwiNDRcIiBoZWlnaHQ9XCI0NFwiIHZpZXdCb3g9XCIwIDAgNDQgNDRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uLW92ZXJsYXlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGZpbHRlcj1cInVybCgjZmlsdGVyMF9kXzM4MjJfMTk0NzkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjJcIiB5PVwiMVwiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHJ4PVwiOFwiIGZpbGw9XCJ3aGl0ZVwiPjwvcmVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMi41XCIgeT1cIjEuNVwiIHdpZHRoPVwiMzlcIiBoZWlnaHQ9XCIzOVwiIHJ4PVwiNy41XCIgc3Ryb2tlPVwiI0QwRDVERFwiPjwvcmVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTI5LjUgMjMuNVYyNi44MzMzQzI5LjUgMjcuMjc1NCAyOS4zMjQ0IDI3LjY5OTMgMjkuMDExOCAyOC4wMTE4QzI4LjY5OTMgMjguMzI0NCAyOC4yNzU0IDI4LjUgMjcuODMzMyAyOC41SDE2LjE2NjdDMTUuNzI0NiAyOC41IDE1LjMwMDcgMjguMzI0NCAxNC45ODgyIDI4LjAxMThDMTQuNjc1NiAyNy42OTkzIDE0LjUgMjcuMjc1NCAxNC41IDI2LjgzMzNWMjMuNU0xNy44MzMzIDE5LjMzMzNMMjIgMjMuNU0yMiAyMy41TDI2LjE2NjcgMTkuMzMzM00yMiAyMy41VjEzLjVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWx0ZXIgaWQ9XCJmaWx0ZXIwX2RfMzgyMl8xOTQ3OVwiIHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjQ0XCIgaGVpZ2h0PVwiNDRcIiBmaWx0ZXJVbml0cz1cInVzZXJTcGFjZU9uVXNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPVwic1JHQlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PVwiMFwiIHJlc3VsdD1cIkJhY2tncm91bmRJbWFnZUZpeFwiPjwvZmVGbG9vZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggaW49XCJTb3VyY2VBbHBoYVwiIHR5cGU9XCJtYXRyaXhcIiB2YWx1ZXM9XCIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJoYXJkQWxwaGFcIj48L2ZlQ29sb3JNYXRyaXg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZU9mZnNldCBkeT1cIjFcIj48L2ZlT2Zmc2V0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPVwiMVwiPjwvZmVHYXVzc2lhbkJsdXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IHR5cGU9XCJtYXRyaXhcIiB2YWx1ZXM9XCIwIDAgMCAwIDAuMDYyNzQ1MSAwIDAgMCAwIDAuMDk0MTE3NiAwIDAgMCAwIDAuMTU2ODYzIDAgMCAwIDAuMDUgMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZlQ29sb3JNYXRyaXg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbjI9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIiByZXN1bHQ9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMzgyMl8xOTQ3OVwiPjwvZmVCbGVuZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluPVwiU291cmNlR3JhcGhpY1wiIGluMj1cImVmZmVjdDFfZHJvcFNoYWRvd18zODIyXzE5NDc5XCIgcmVzdWx0PVwic2hhcGVcIj48L2ZlQmxlbmQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9maWx0ZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PT0nRGVzY3JpcHRpdmUgQW5zd2VyJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpdGVtLnNvcEZsYWcgPyAnZmxhZ2Nsb3VyJzonJ1wiPlZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuc3dlciA6IHt7aXRlbS52YWxpZGF0aW9uQW5zd2VyfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVtYXJrc1R4dFwiICpuZ0lmPVwicXVlc3Rpb24ucmVtYXJrcyE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtYXJrcyA6IHt7cXVlc3Rpb24ucmVtYXJrc319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG48L2Rpdj5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBweC01XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24/LmFuc3dlclR5cGU9PT0nZGVzY3JpcHRpdmVJbWFnZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2FsbGVyeUZvcm0udmFsdWUudHlwZSA9PT0gJ3Rhc2snICYmIChoYXNSZWZlcmVuY2VJbWFnZXMocXVlc3Rpb24pIHx8IGhhc0NoZWNrbGlzdFJlZmVyZW5jZUltYWdlcyhxdWVzdGlvbikpXCIgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNSZWZlcmVuY2VJbWFnZXMocXVlc3Rpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgSW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFnZS1ncmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGFzUmVmZXJlbmNlSW1hZ2VzKHF1ZXN0aW9uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhbnN3ZXIgb2YgcXVlc3Rpb24uYW5zd2Vyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhbnN3ZXIucmVmZXJlbmNlSW1hZ2U/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFnZS10aWxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFuc3dlci5yZWZlcmVuY2VJbWFnZTtsZXQgaT1pbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkltYWdlUG9wdXAoZ2V0UmVmSW1hZ2VVcmxzKGFuc3dlci5yZWZlcmVuY2VJbWFnZSksZ2V0UmVmSW1hZ2VOYW1lcyhhbnN3ZXIucmVmZXJlbmNlSW1hZ2UpLGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImVudmlyb25tZW50LlRyYXhBbnN3ZXJDRE4gKyBpdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGb3IgQ2hlY2tsaXN0IFR5cGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICdjaGVja2xpc3QnICYmIChoYXNSZWZlcmVuY2VJbWFnZXMocXVlc3Rpb24pIHx8IGhhc0NoZWNrbGlzdFJlZmVyZW5jZUltYWdlcyhxdWVzdGlvbikpXCIgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNDaGVja2xpc3RSZWZlcmVuY2VJbWFnZXMocXVlc3Rpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgSW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFnZS1ncmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGFzQ2hlY2tsaXN0UmVmZXJlbmNlSW1hZ2VzKHF1ZXN0aW9uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhbnN3ZXIgb2YgcXVlc3Rpb24uYW5zd2VycztsZXQgaT1pbmRleDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFnZS10aWxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhbnN3ZXIucmVmZXJlbmNlSW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuSW1hZ2VQb3B1cChnZXRSZWZjaGVja2xpc3RJbWFnZVVybHMocXVlc3Rpb24uYW5zd2VycyksZ2V0UmVmY2hlY2tsaXN0SW1hZ2VOYW1lcyhxdWVzdGlvbi5hbnN3ZXJzKSxpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImVudmlyb25tZW50LlRyYXhBbnN3ZXJDRE4gKyBhbnN3ZXIucmVmZXJlbmNlSW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaGFzUmVmZXJlbmNlSW1hZ2VzKHF1ZXN0aW9uKSB8fCBoYXNDaGVja2xpc3RSZWZlcmVuY2VJbWFnZXMocXVlc3Rpb24pID8gJ2NvbC1tZC02JyA6ICdjb2wtbWQtNidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlVwbG9hZGVkIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYWdlLWdyaWRcIiBbbmdTdHlsZV09XCJ7J2dyaWQtdGVtcGxhdGUtY29sdW1ucyc6IGdldEdyaWRDb2x1bW5zKHF1ZXN0aW9uLnVzZXJBbnN3ZXIubGVuZ3RoKSxcclxuICAgICAgICAnZ3JpZC1hdXRvLXJvd3MnOiBnZXRHcmlkUm93SGVpZ2h0KHF1ZXN0aW9uLnVzZXJBbnN3ZXIubGVuZ3RoKX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlc3Rpb24udXNlckFuc3dlcjtsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbGxhZ2UtdGlsZVwiPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5JbWFnZVBvcHVwKGdldEltYWdlVXJscyhxdWVzdGlvbi51c2VyQW5zd2VyKSxnZXRJbWFnZU5hbWVzKHF1ZXN0aW9uLnVzZXJBbnN3ZXIpLGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0uYW5zd2VyfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJpdGVtLnZhbGlkYXRpb25UeXBlPT09J0NhcHR1cmUgSW1hZ2UnPydjb2wtbWQtNiBtdC0yJzonY29sLW1kLTEyIG10LTInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb24mJml0ZW0udmFsaWRhdGlvbkFuc3dlciE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PT0nQ2FwdHVyZSBJbWFnZSd8fGl0ZW0udmFsaWRhdGlvblR5cGU9PT0nQ2FwdHVyZSBWaWRlbydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb24gQW5zd2VyPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctbG9nbyAgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib3BlbkltYWdlUG9wdXAxKGVudmlyb25tZW50LlRyYXhBbnN3ZXJDRE4gKyBpdGVtLnZhbGlkYXRpb25BbnN3ZXIsMClcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09PSdDYXB0dXJlIEltYWdlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7aXRlbS52YWxpZGF0aW9uQW5zd2VyfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlIHctMTAwIGgtNDUwcHggcC0zXCIgKm5nSWY9XCJpdGVtLnZhbGlkYXRpb25UeXBlID09PSAnQ2FwdHVyZSBWaWRlbydcIj5cclxuICA8dmlkZW8gY29udHJvbHMgY2xhc3M9XCJ3LTEwMCBoLTEwMFwiIFtzcmNdPVwiZW52aXJvbm1lbnQuVHJheEFuc3dlckNETiArIGl0ZW0udmFsaWRhdGlvbkFuc3dlclwiPlxyXG5cclxuICA8L3ZpZGVvPlxyXG5cclxuICAgIDxzcGFuIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgdG9wLTAgZW5kLTAgbS0zIGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKGNsaWNrKT1cImRvd25sb2FkVmlkZW8oaXRlbS52YWxpZGF0aW9uQW5zd2VyKVwiXHJcbiAgICB0aXRsZT1cIkRvd25sb2FkIFZpZGVvXCIgaWQ9XCJkb3dubG9hZC1pY29uXCIgd2lkdGg9XCI0NFwiIGhlaWdodD1cIjQ0XCIgdmlld0JveD1cIjAgMCA0NCA0NFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb24tb3ZlcmxheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgZmlsdGVyPVwidXJsKCNmaWx0ZXIwX2RfMzgyMl8xOTQ3OSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMlwiIHk9XCIxXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCI4XCIgZmlsbD1cIndoaXRlXCI+PC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyLjVcIiB5PVwiMS41XCIgd2lkdGg9XCIzOVwiIGhlaWdodD1cIjM5XCIgcng9XCI3LjVcIiBzdHJva2U9XCIjRDBENUREXCI+PC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjkuNSAyMy41VjI2LjgzMzNDMjkuNSAyNy4yNzU0IDI5LjMyNDQgMjcuNjk5MyAyOS4wMTE4IDI4LjAxMThDMjguNjk5MyAyOC4zMjQ0IDI4LjI3NTQgMjguNSAyNy44MzMzIDI4LjVIMTYuMTY2N0MxNS43MjQ2IDI4LjUgMTUuMzAwNyAyOC4zMjQ0IDE0Ljk4ODIgMjguMDExOEMxNC42NzU2IDI3LjY5OTMgMTQuNSAyNy4yNzU0IDE0LjUgMjYuODMzM1YyMy41TTE3LjgzMzMgMTkuMzMzM0wyMiAyMy41TTIyIDIzLjVMMjYuMTY2NyAxOS4zMzMzTTIyIDIzLjVWMTMuNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbHRlciBpZD1cImZpbHRlcjBfZF8zODIyXzE5NDc5XCIgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiNDRcIiBoZWlnaHQ9XCI0NFwiIGZpbHRlclVuaXRzPVwidXNlclNwYWNlT25Vc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9XCJzUkdCXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUZsb29kIGZsb29kLW9wYWNpdHk9XCIwXCIgcmVzdWx0PVwiQmFja2dyb3VuZEltYWdlRml4XCI+PC9mZUZsb29kPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCBpbj1cIlNvdXJjZUFscGhhXCIgdHlwZT1cIm1hdHJpeFwiIHZhbHVlcz1cIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cImhhcmRBbHBoYVwiPjwvZmVDb2xvck1hdHJpeD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlT2Zmc2V0IGR5PVwiMVwiPjwvZmVPZmZzZXQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249XCIxXCI+PC9mZUdhdXNzaWFuQmx1cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdHlwZT1cIm1hdHJpeFwiIHZhbHVlcz1cIjAgMCAwIDAgMC4wNjI3NDUxIDAgMCAwIDAgMC4wOTQxMTc2IDAgMCAwIDAgMC4xNTY4NjMgMCAwIDAgMC4wNSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmVDb2xvck1hdHJpeD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluMj1cIkJhY2tncm91bmRJbWFnZUZpeFwiIHJlc3VsdD1cImVmZmVjdDFfZHJvcFNoYWRvd18zODIyXzE5NDc5XCI+PC9mZUJsZW5kPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW49XCJTb3VyY2VHcmFwaGljXCIgaW4yPVwiZWZmZWN0MV9kcm9wU2hhZG93XzM4MjJfMTk0NzlcIiByZXN1bHQ9XCJzaGFwZVwiPjwvZmVCbGVuZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbHRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG48L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PT0nRGVzY3JpcHRpdmUgQW5zd2VyJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpdGVtLnNvcEZsYWcgPyAnZmxhZ2Nsb3VyJzonJ1wiPlZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuc3dlciA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0udmFsaWRhdGlvbkFuc3dlcn19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZW1hcmtzVHh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5yZW1hcmtzIT09JydcIj5SZW1hcmtzIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3txdWVzdGlvbi5yZW1hcmtzfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBweC01XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24/LmFuc3dlclR5cGU9PT0ndmlkZW8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRhc2s6IE11bHRpcGxlIHJlZmVyZW5jZSBpbWFnZXMgKEFycmF5KSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICd0YXNrJyAmJiBoYXNRdWVzdGlvblJlZmVyZW5jZUltYWdlcyhxdWVzdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFF1ZXN0aW9uIFJlZmVyZW5jZSBJbWFnZXMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+UmVmZXJlbmNlIEltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFnZS1ncmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyc6IGdldEdyaWRDb2x1bW5zKHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UubGVuZ3RoKSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZTtsZXQgaT1pbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYWdlLXRpbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzVmFsaWRJbWFnZShpdGVtKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5JbWFnZVBvcHVwKGdldFJlZkltYWdlVXJscyhxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlKSxnZXRSZWZJbWFnZU5hbWVzKHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UpLGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiZW52aXJvbm1lbnQuVHJheEFuc3dlckNETiArIGl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiUmVmZXJlbmNlIGltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDaGVja2xpc3Q6IFNpbmdsZSByZWZlcmVuY2UgaW1hZ2UgKFN0cmluZykgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICdjaGVja2xpc3QnIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcXVlc3Rpb24ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSAhPT0gJydcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXJlZiBteS0zXCI+UmVmZXJlbmNlIEltYWdlPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYWdlLWdyaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7ICdncmlkLXRlbXBsYXRlLWNvbHVtbnMnOiBnZXRHcmlkQ29sdW1ucygxKSB9XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFnZS10aWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib3BlbkltYWdlUG9wdXAxKGVudmlyb25tZW50LlRyYXhBbnN3ZXJDRE4gKyBxdWVzdGlvbi5xdWVzdGlvblJlZmVyZW5jZUltYWdlLDApXCIgIFtzcmNdPVwiZW52aXJvbm1lbnQuVHJheEFuc3dlckNETiArIHF1ZXN0aW9uLnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXN0aW9uLnVzZXJBbnN3ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIj5VcGxvYWRlZCBWaWRlbzwvZGl2PlxyXG48ZGl2IGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmUgdy0xMDAgaC00NTBweCBwLTNcIiA+XHJcbiAgICAgPHZpZGVvIGNvbnRyb2xzIGNsYXNzPVwidy0xMDAgaC0xMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBbnN3ZXJDRE59fXt7aXRlbS5hbnN3ZXJ9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmlkZW8+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHRvcC0wIGVuZC0wIG0tMyBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIChjbGljayk9XCJkb3dubG9hZFZpZGVvKGl0ZW0uYW5zd2VyKVwiXHJcbiAgICB0aXRsZT1cIkRvd25sb2FkIFZpZGVvXCIgaWQ9XCJkb3dubG9hZC1pY29uXCIgd2lkdGg9XCI0NFwiIGhlaWdodD1cIjQ0XCIgdmlld0JveD1cIjAgMCA0NCA0NFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb24tb3ZlcmxheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgZmlsdGVyPVwidXJsKCNmaWx0ZXIwX2RfMzgyMl8xOTQ3OSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMlwiIHk9XCIxXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCI4XCIgZmlsbD1cIndoaXRlXCI+PC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyLjVcIiB5PVwiMS41XCIgd2lkdGg9XCIzOVwiIGhlaWdodD1cIjM5XCIgcng9XCI3LjVcIiBzdHJva2U9XCIjRDBENUREXCI+PC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjkuNSAyMy41VjI2LjgzMzNDMjkuNSAyNy4yNzU0IDI5LjMyNDQgMjcuNjk5MyAyOS4wMTE4IDI4LjAxMThDMjguNjk5MyAyOC4zMjQ0IDI4LjI3NTQgMjguNSAyNy44MzMzIDI4LjVIMTYuMTY2N0MxNS43MjQ2IDI4LjUgMTUuMzAwNyAyOC4zMjQ0IDE0Ljk4ODIgMjguMDExOEMxNC42NzU2IDI3LjY5OTMgMTQuNSAyNy4yNzU0IDE0LjUgMjYuODMzM1YyMy41TTE3LjgzMzMgMTkuMzMzM0wyMiAyMy41TTIyIDIzLjVMMjYuMTY2NyAxOS4zMzMzTTIyIDIzLjVWMTMuNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbHRlciBpZD1cImZpbHRlcjBfZF8zODIyXzE5NDc5XCIgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiNDRcIiBoZWlnaHQ9XCI0NFwiIGZpbHRlclVuaXRzPVwidXNlclNwYWNlT25Vc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9XCJzUkdCXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUZsb29kIGZsb29kLW9wYWNpdHk9XCIwXCIgcmVzdWx0PVwiQmFja2dyb3VuZEltYWdlRml4XCI+PC9mZUZsb29kPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCBpbj1cIlNvdXJjZUFscGhhXCIgdHlwZT1cIm1hdHJpeFwiIHZhbHVlcz1cIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cImhhcmRBbHBoYVwiPjwvZmVDb2xvck1hdHJpeD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlT2Zmc2V0IGR5PVwiMVwiPjwvZmVPZmZzZXQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249XCIxXCI+PC9mZUdhdXNzaWFuQmx1cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdHlwZT1cIm1hdHJpeFwiIHZhbHVlcz1cIjAgMCAwIDAgMC4wNjI3NDUxIDAgMCAwIDAgMC4wOTQxMTc2IDAgMCAwIDAgMC4xNTY4NjMgMCAwIDAgMC4wNSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmVDb2xvck1hdHJpeD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluMj1cIkJhY2tncm91bmRJbWFnZUZpeFwiIHJlc3VsdD1cImVmZmVjdDFfZHJvcFNoYWRvd18zODIyXzE5NDc5XCI+PC9mZUJsZW5kPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW49XCJTb3VyY2VHcmFwaGljXCIgaW4yPVwiZWZmZWN0MV9kcm9wU2hhZG93XzM4MjJfMTk0NzlcIiByZXN1bHQ9XCJzaGFwZVwiPjwvZmVCbGVuZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbHRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbWFya3NUeHRcIiAqbmdJZj1cInF1ZXN0aW9uLnJlbWFya3MhPT0nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbWFya3MgOiB7e3F1ZXN0aW9uLnJlbWFya3N9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcHgtNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uPy5hbnN3ZXJUeXBlPT09J211bHRpcGxlSW1hZ2UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICd0YXNrJyAmJiAoaGFzUmVmZXJlbmNlSW1hZ2VzKHF1ZXN0aW9uKSB8fCBoYXNDaGVja2xpc3RSZWZlcmVuY2VJbWFnZXMocXVlc3Rpb24pKVwiIGNsYXNzPVwiY29sLW1kLTYgZGZkc2ZzZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNSZWZlcmVuY2VJbWFnZXMocXVlc3Rpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgSW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFnZS1ncmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGFzUmVmZXJlbmNlSW1hZ2VzKHF1ZXN0aW9uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhbnN3ZXIgb2YgcXVlc3Rpb24uYW5zd2Vyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhbnN3ZXIucmVmZXJlbmNlSW1hZ2U/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFnZS10aWxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFuc3dlci5yZWZlcmVuY2VJbWFnZTtsZXQgaT1pbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkltYWdlUG9wdXAoZ2V0UmVmSW1hZ2VVcmxzKGFuc3dlci5yZWZlcmVuY2VJbWFnZSksZ2V0UmVmSW1hZ2VOYW1lcyhhbnN3ZXIucmVmZXJlbmNlSW1hZ2UpLGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImVudmlyb25tZW50LlRyYXhBbnN3ZXJDRE4gKyBpdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGb3IgQ2hlY2tsaXN0IFR5cGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09ICdjaGVja2xpc3QnICYmIChoYXNSZWZlcmVuY2VJbWFnZXMocXVlc3Rpb24pIHx8IGhhc0NoZWNrbGlzdFJlZmVyZW5jZUltYWdlcyhxdWVzdGlvbikpXCIgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNDaGVja2xpc3RSZWZlcmVuY2VJbWFnZXMocXVlc3Rpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgSW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFnZS1ncmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGFzQ2hlY2tsaXN0UmVmZXJlbmNlSW1hZ2VzKHF1ZXN0aW9uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhbnN3ZXIgb2YgcXVlc3Rpb24uYW5zd2VycztsZXQgaT1pbmRleDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFnZS10aWxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhbnN3ZXIucmVmZXJlbmNlSW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuSW1hZ2VQb3B1cChnZXRSZWZjaGVja2xpc3RJbWFnZVVybHMocXVlc3Rpb24uYW5zd2VycyksZ2V0UmVmY2hlY2tsaXN0SW1hZ2VOYW1lcyhxdWVzdGlvbi5hbnN3ZXJzKSxpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImVudmlyb25tZW50LlRyYXhBbnN3ZXJDRE4gKyBhbnN3ZXIucmVmZXJlbmNlSW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaGFzUmVmZXJlbmNlSW1hZ2VzKHF1ZXN0aW9uKSB8fCBoYXNDaGVja2xpc3RSZWZlcmVuY2VJbWFnZXMocXVlc3Rpb24pID8gJ2NvbC1tZC02JyA6ICdjb2wtbWQtNidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yZWYgbXktM1wiPlVwbG9hZGVkIEltYWdlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYWdlLWdyaWRcIiBbbmdTdHlsZV09XCJ7J2dyaWQtdGVtcGxhdGUtY29sdW1ucyc6IGdldEdyaWRDb2x1bW5zKHF1ZXN0aW9uLnVzZXJBbnN3ZXIubGVuZ3RoKSxcclxuICAgICAgICAnZ3JpZC1hdXRvLXJvd3MnOiBnZXRHcmlkUm93SGVpZ2h0KHF1ZXN0aW9uLnVzZXJBbnN3ZXIubGVuZ3RoKX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlc3Rpb24udXNlckFuc3dlcjtsZXQgaT1pbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xsYWdlLXRpbGVcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5JbWFnZVBvcHVwKGdldEltYWdlVXJscyhxdWVzdGlvbi51c2VyQW5zd2VyKSxnZXRJbWFnZU5hbWVzKHF1ZXN0aW9uLnVzZXJBbnN3ZXIpLGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROfX17e2l0ZW0uYW5zd2VyfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIml0ZW0udmFsaWRhdGlvblR5cGU9PT0nQ2FwdHVyZSBJbWFnZSc/J2NvbC1tZC02JzonY29sLW1kLTEyJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uJiZpdGVtLnZhbGlkYXRpb25BbnN3ZXIhPT0nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcmVmIG15LTMgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09PSdDYXB0dXJlIEltYWdlJ3x8aXRlbS52YWxpZGF0aW9uVHlwZT09PSdDYXB0dXJlIFZpZGVvJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvbiBBbnN3ZXI8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cIml0ZW0udmFsaWRhdGlvblR5cGU9PT0nQ2FwdHVyZSBJbWFnZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9wZW5JbWFnZVBvcHVwMShlbnZpcm9ubWVudC5UcmF4QW5zd2VyQ0ROICsgaXRlbS52YWxpZGF0aW9uQW5zd2VyLDApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheEFuc3dlckNETn19e3tpdGVtLnZhbGlkYXRpb25BbnN3ZXJ9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZSB3LTEwMCBoLTQ1MHB4IHAtM1wiICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZSA9PT0gJ0NhcHR1cmUgVmlkZW8nXCI+XHJcbiAgPHZpZGVvIGNvbnRyb2xzIGNsYXNzPVwidy0xMDAgaC0xMDBcIiBbc3JjXT1cImVudmlyb25tZW50LlRyYXhBbnN3ZXJDRE4gKyBpdGVtLnZhbGlkYXRpb25BbnN3ZXJcIj5cclxuICA8L3ZpZGVvPlxyXG5cclxuICAgIDxzcGFuIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgdG9wLTAgZW5kLTAgbS0zIGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKGNsaWNrKT1cImRvd25sb2FkVmlkZW8oaXRlbS52YWxpZGF0aW9uQW5zd2VyKVwiXHJcbiAgICB0aXRsZT1cIkRvd25sb2FkIFZpZGVvXCIgaWQ9XCJkb3dubG9hZC1pY29uXCIgd2lkdGg9XCI0NFwiIGhlaWdodD1cIjQ0XCIgdmlld0JveD1cIjAgMCA0NCA0NFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb24tb3ZlcmxheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgZmlsdGVyPVwidXJsKCNmaWx0ZXIwX2RfMzgyMl8xOTQ3OSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMlwiIHk9XCIxXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCI4XCIgZmlsbD1cIndoaXRlXCI+PC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyLjVcIiB5PVwiMS41XCIgd2lkdGg9XCIzOVwiIGhlaWdodD1cIjM5XCIgcng9XCI3LjVcIiBzdHJva2U9XCIjRDBENUREXCI+PC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjkuNSAyMy41VjI2LjgzMzNDMjkuNSAyNy4yNzU0IDI5LjMyNDQgMjcuNjk5MyAyOS4wMTE4IDI4LjAxMThDMjguNjk5MyAyOC4zMjQ0IDI4LjI3NTQgMjguNSAyNy44MzMzIDI4LjVIMTYuMTY2N0MxNS43MjQ2IDI4LjUgMTUuMzAwNyAyOC4zMjQ0IDE0Ljk4ODIgMjguMDExOEMxNC42NzU2IDI3LjY5OTMgMTQuNSAyNy4yNzU0IDE0LjUgMjYuODMzM1YyMy41TTE3LjgzMzMgMTkuMzMzM0wyMiAyMy41TTIyIDIzLjVMMjYuMTY2NyAxOS4zMzMzTTIyIDIzLjVWMTMuNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbHRlciBpZD1cImZpbHRlcjBfZF8zODIyXzE5NDc5XCIgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiNDRcIiBoZWlnaHQ9XCI0NFwiIGZpbHRlclVuaXRzPVwidXNlclNwYWNlT25Vc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9XCJzUkdCXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUZsb29kIGZsb29kLW9wYWNpdHk9XCIwXCIgcmVzdWx0PVwiQmFja2dyb3VuZEltYWdlRml4XCI+PC9mZUZsb29kPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCBpbj1cIlNvdXJjZUFscGhhXCIgdHlwZT1cIm1hdHJpeFwiIHZhbHVlcz1cIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cImhhcmRBbHBoYVwiPjwvZmVDb2xvck1hdHJpeD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlT2Zmc2V0IGR5PVwiMVwiPjwvZmVPZmZzZXQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249XCIxXCI+PC9mZUdhdXNzaWFuQmx1cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdHlwZT1cIm1hdHJpeFwiIHZhbHVlcz1cIjAgMCAwIDAgMC4wNjI3NDUxIDAgMCAwIDAgMC4wOTQxMTc2IDAgMCAwIDAgMC4xNTY4NjMgMCAwIDAgMC4wNSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmVDb2xvck1hdHJpeD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluMj1cIkJhY2tncm91bmRJbWFnZUZpeFwiIHJlc3VsdD1cImVmZmVjdDFfZHJvcFNoYWRvd18zODIyXzE5NDc5XCI+PC9mZUJsZW5kPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW49XCJTb3VyY2VHcmFwaGljXCIgaW4yPVwiZWZmZWN0MV9kcm9wU2hhZG93XzM4MjJfMTk0NzlcIiByZXN1bHQ9XCJzaGFwZVwiPjwvZmVCbGVuZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbHRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS52YWxpZGF0aW9uVHlwZT09PSdEZXNjcmlwdGl2ZSBBbnN3ZXInXCI+VmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5zd2VyIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbS52YWxpZGF0aW9uQW5zd2VyfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbWFya3NUeHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uLnJlbWFya3MhPT0nJ1wiPlJlbWFya3MgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3F1ZXN0aW9uLnJlbWFya3N9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgZmFkZSBteS0wIHB5LTBcIiBpZD1cImltYWdlTW9kYWxcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiIHN0eWxlPVwib3ZlcmZsb3c6aGlkZGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWRpYWxvZy1jZW50ZXJlZCBtb2RhbC1sZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50IFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBQcmV2IEJ1dHRvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gICAqbmdJZj1cImltYWdlTGlzdC5sZW5ndGggPiAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHBvc2l0aW9uLWFic29sdXRlIHN0YXJ0LTAgdG9wLTUwIHRyYW5zbGF0ZS1taWRkbGUteSBtcy0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGVJbWFnZSgncHJldicpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudEltYWdlSW5kZXggPT09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDigLlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSW1hZ2UgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwic2VsZWN0ZWRJbWFnZVVybFwiIHN0eWxlPVwibWF4LWhlaWdodDogODV2aDsgbWF4LXdpZHRoOiAxMDAlOyBvYmplY3QtZml0OiBjb250YWluO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbWctZmx1aWQgdy0xMDAgICBteC0xXCIgLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE5leHQgQnV0dG9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAgICpuZ0lmPVwiaW1hZ2VMaXN0Lmxlbmd0aCA+IDFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcG9zaXRpb24tYWJzb2x1dGUgZW5kLTAgdG9wLTUwIHRyYW5zbGF0ZS1taWRkbGUteSBtZS0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGVJbWFnZSgnbmV4dCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudEltYWdlSW5kZXggPT09IGltYWdlTGlzdC5sZW5ndGggLSAxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4oC6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsIGZhZGVcIiBpZD1cImltYWdlTW9kYWwxXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgbW9kYWwtZGlhbG9nLWNlbnRlcmVkIG1vZGFsLWxnXCIgcm9sZT1cImRvY3VtZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSW1hZ2UgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwic2VsZWN0ZWRJbWFnZVVybFwiIHN0eWxlPVwibWF4LWhlaWdodDogOTV2aDsgbWF4LXdpZHRoOiAxMDAlOyBvYmplY3QtZml0OiBjb250YWluO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbWctZmx1aWQgdy0xMDAgICBteC0xXCIgLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IHRleHQtc3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSByb3VuZGVkLXBpbGwgbS0wIHAtMlwiICpuZ0lmPVwicXVlc3Rpb24/LmxpbmtUeXBlJiZxdWVzdGlvbj8ubGlua3F1ZXN0aW9uZW5hYmxlZFwiPkxpbmtlZCB0byBRdWVzdGlvbiB7e3F1ZXN0aW9uLnBhcmVudFF1ZXN0aW9ufX08L2J1dHRvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiB0ZXh0LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1kZWZhdWx0IGJvcmRlci1kZWZhdWx0IG1lLTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicXVlc3Rpb24ucmVkb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2hlY2t0b2RheURhdGUoY2hlY2tsaXN0Py5jaGVja2xpc3RJbmZvPy5kYXRlKSYmKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LnVzZXJUeXBlICE9PSAndGFuZ28nJiYhY2hlY2tsaXN0Py5jaGVja2xpc3RJbmZvPy5hcHByb3ZhbFN0YXR1cyYmKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LlRhbmdvVHJheF9jaGVja2xpc3RfaXNFZGl0JiZ0aGlzLmdhbGxlcnlGb3JtLnZhbHVlLnR5cGUgPT09J2NoZWNrbGlzdCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkVGFzaygncmVkbycscXVlc3Rpb24sY2hlY2tsaXN0Py5jaGVja2xpc3RJbmZvLGNoZWNrbGlzdD8uc3RvcmVQcm9maWxlLHNlY3Rpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNjAwNF8xMTczNClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE5LjE2OTMgMy4zMzMzMVY4LjMzMzMyTTE5LjE2OTMgOC4zMzMzMkgxNC4xNjkzTTE5LjE2OTMgOC4zMzMzMkwxNS4zMDI2IDQuNjk5OThDMTQuNDA3IDMuODAzOTEgMTMuMjk5IDMuMTQ5MzIgMTIuMDgxOSAyLjc5NzI5QzEwLjg2NDkgMi40NDUyNyA5LjU3ODUzIDIuNDA3MjcgOC4zNDI4NCAyLjY4Njg2QzcuMTA3MTYgMi45NjY0NSA1Ljk2MjQ0IDMuNTU0NTEgNS4wMTU0OSA0LjM5NjE2QzQuMDY4NTUgNS4yMzc4MiAzLjM1MDI0IDYuMzA1NjQgMi45Mjc2IDcuNDk5OThNMC44MzU5MzggMTYuNjY2NlYxMS42NjY2TTAuODM1OTM4IDExLjY2NjZINS44MzU5NE0wLjgzNTkzOCAxMS42NjY2TDQuNzAyNiAxNS4zQzUuNTk4MjMgMTYuMTk2MSA2LjcwNjI1IDE2Ljg1MDYgNy45MjMyOCAxNy4yMDI3QzkuMTQwMzEgMTcuNTU0NyAxMC40MjY3IDE3LjU5MjcgMTEuNjYyNCAxNy4zMTMxQzEyLjg5OCAxNy4wMzM1IDE0LjA0MjggMTYuNDQ1NSAxNC45ODk3IDE1LjYwMzhDMTUuOTM2NyAxNC43NjIxIDE2LjY1NSAxMy42OTQzIDE3LjA3NzYgMTIuNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzYwMDRfMTE3MzRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0yIGZvbnQtZGVmdWx0LXRhc2tcIj5SZWRvPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tZGVmYXVsdCBib3JkZXItZGVmYXVsdCBtZS0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInF1ZXN0aW9uLnJlZG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNoZWNrdG9kYXlEYXRlKGNoZWNrbGlzdD8uY2hlY2tsaXN0SW5mbz8uZGF0ZSkmJihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy51c2VyVHlwZSAhPT0gJ3RhbmdvJyYmIWNoZWNrbGlzdD8uY2hlY2tsaXN0SW5mbz8uYXBwcm92YWxTdGF0dXMmJihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy5UYW5nb1RyYXhfVGFza19pc0VkaXQmJnRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudHlwZT09PSd0YXNrJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRUYXNrKCdyZWRvJyxxdWVzdGlvbixjaGVja2xpc3Q/LmNoZWNrbGlzdEluZm8sY2hlY2tsaXN0Py5zdG9yZVByb2ZpbGUsc2VjdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF82MDA0XzExNzM0KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTkuMTY5MyAzLjMzMzMxVjguMzMzMzJNMTkuMTY5MyA4LjMzMzMySDE0LjE2OTNNMTkuMTY5MyA4LjMzMzMyTDE1LjMwMjYgNC42OTk5OEMxNC40MDcgMy44MDM5MSAxMy4yOTkgMy4xNDkzMiAxMi4wODE5IDIuNzk3MjlDMTAuODY0OSAyLjQ0NTI3IDkuNTc4NTMgMi40MDcyNyA4LjM0Mjg0IDIuNjg2ODZDNy4xMDcxNiAyLjk2NjQ1IDUuOTYyNDQgMy41NTQ1MSA1LjAxNTQ5IDQuMzk2MTZDNC4wNjg1NSA1LjIzNzgyIDMuMzUwMjQgNi4zMDU2NCAyLjkyNzYgNy40OTk5OE0wLjgzNTkzOCAxNi42NjY2VjExLjY2NjZNMC44MzU5MzggMTEuNjY2Nkg1LjgzNTk0TTAuODM1OTM4IDExLjY2NjZMNC43MDI2IDE1LjNDNS41OTgyMyAxNi4xOTYxIDYuNzA2MjUgMTYuODUwNiA3LjkyMzI4IDE3LjIwMjdDOS4xNDAzMSAxNy41NTQ3IDEwLjQyNjcgMTcuNTkyNyAxMS42NjI0IDE3LjMxMzFDMTIuODk4IDE3LjAzMzUgMTQuMDQyOCAxNi40NDU1IDE0Ljk4OTcgMTUuNjAzOEMxNS45MzY3IDE0Ljc2MjEgMTYuNjU1IDEzLjY5NDMgMTcuMDc3NiAxMi41XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNjAwNF8xMTczNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTIgZm9udC1kZWZ1bHQtdGFza1wiPlJlZG88L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtICBib3JkZXItdmFsMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXF1ZXN0aW9uLnRhc2smJiFxdWVzdGlvbi50YXNrSWQmJnRoaXMuZ2FsbGVyeUZvcm0udmFsdWUudHlwZT09PSdjaGVja2xpc3QnJiYoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8udXNlclR5cGUgIT09ICd0YW5nbycmJiFjaGVja2xpc3Q/LmNoZWNrbGlzdEluZm8/LmFwcHJvdmFsU3RhdHVzJiYgKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LlRhbmdvVHJheF9UYXNrX2lzRWRpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRUYXNrKCdjcmVhdGV0YXNrJyxxdWVzdGlvbixjaGVja2xpc3Q/LmNoZWNrbGlzdEluZm8sY2hlY2tsaXN0Py5zdG9yZVByb2ZpbGUsc2VjdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExLjY2OTMgMS42NjY3NUg1LjAwMjZDNC41NjA1OCAxLjY2Njc1IDQuMTM2NjUgMS44NDIzNCAzLjgyNDA5IDIuMTU0OUMzLjUxMTUzIDIuNDY3NDYgMy4zMzU5NCAyLjg5MTM5IDMuMzM1OTQgMy4zMzM0MVYxNi42NjY3QzMuMzM1OTQgMTcuMTA4OCAzLjUxMTUzIDE3LjUzMjcgMy44MjQwOSAxNy44NDUzQzQuMTM2NjUgMTguMTU3OCA0LjU2MDU4IDE4LjMzMzQgNS4wMDI2IDE4LjMzMzRIMTUuMDAyNkMxNS40NDQ2IDE4LjMzMzQgMTUuODY4NiAxOC4xNTc4IDE2LjE4MTEgMTcuODQ1M0MxNi40OTM3IDE3LjUzMjcgMTYuNjY5MyAxNy4xMDg4IDE2LjY2OTMgMTYuNjY2N1Y2LjY2Njc1TTExLjY2OTMgMS42NjY3NUwxNi42NjkzIDYuNjY2NzVNMTEuNjY5MyAxLjY2Njc1VjYuNjY2NzVIMTYuNjY5M00xMC4wMDI2IDE1LjAwMDFWMTAuMDAwMU03LjUwMjYgMTIuNTAwMUgxMi41MDI2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDA5QkYzXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMiBmb250LXRhc2tcIj5DcmVhdGUgVGFzazwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24udGFzayYmcXVlc3Rpb24udGFza0lkICYmdGhpcy5nYWxsZXJ5Rm9ybS52YWx1ZS50eXBlIT09J3Rhc2snXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIGJvcmRlci12YWwxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRhc2tyZWRpcmVjdChxdWVzdGlvbixjaGVja2xpc3Q/LnN0b3JlUHJvZmlsZSxjaGVja2xpc3Q/LmNoZWNrbGlzdEluZm8pXCI+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9udC10YXNrXCI+VmlldyBUYXNrPC9zcGFuPjwvYnV0dG9uPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0xMCBteS01XCIgKm5nSWY9XCJpbWFnZUNoZWNrbGlzdC5pbmNsdWRlcyhzZWxlY3QpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCIgKm5nSWY9XCJjbGllbnREYXRhLmxvZ28mJmNsaWVudERhdGEubG9nbyE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJtdC01IG1iLTMgdGV4dC1jZW50ZXIgaWNvbnNpemVcIiBzcmM9XCJ7e2NsaWVudERhdGEubG9nb319XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj5DaGVja2xpc3QgTmFtZSA6IHt7dGhpcy5jaGVja2xpc3ROYW1lfX08L2gyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIG15LTMgbXQtNVwiICpuZ0Zvcj1cImxldCBpdGVtICBvZiBtb2JpbGV1c2FnZURhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBweC0xMCBtdC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ1bmktdGl0bGVcIj5DaGVja2xpc3QgTmFtZTo8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPjoge3t0aGlzLmNoZWNrbGlzdE5hbWV9fSA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInVuaS10aXRsZVwiPlN0b3JlIE5hbWU8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPjoge3tpdGVtLnN0b3JlTmFtZX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIiAqbmdJZj1cIml0ZW0uZG93bl90aW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+QXZlcmFnZSBEb3dudGltZTwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiICpuZ0lmPVwiaXRlbS5kb3duX3RpbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPjoge3tpdGVtLmRvd25fdGltZX19IE1pbnM8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cInJvdyB3LTEwMCBxYS1ib2RyZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGxpIGNsYXNzPVwicWEtaGVhZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLnN0b3JlTmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIG15LTJcIiAqbmdGb3I9XCJsZXQgZGV0ZWN0aW9uIG9mIGl0ZW0/LmltYWdlVXJsXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwidy0xMDAgaC01MDBweCByb3VuZGVkLXRvcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5UcmF4QUljaGVja2xpc3RDRE59fXt7ZGV0ZWN0aW9ufX1cIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtdC0zXCI+IHt7dGhpcy5jaGVja2xpc3ROYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBteS0yXCIgKm5nRm9yPVwibGV0IGRldGVjdGlvbiBvZiBpdGVtPy5pbWFnZXNEYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnYWxsZXJ5Rm9ybS52YWx1ZS5zb3VyY2VDaGVja0xpc3RfaWQ9PT0naW52ZW50b3J5Y291bnQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRldGVjdGlvbj8uZGF0ZV90aW1lc3RhbXBcIj5EZXRlY3Rpb24gVGltZSA6PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RldGVjdGlvbi5kYXRlX3RpbWVzdGFtcH19PC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgdGV4dC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0zXCIgKm5nSWY9XCJkZXRlY3Rpb24/LmNhcl9jb3VudFwiPk5vIG9mIGNhcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RldGVjdGlvbi5jYXJfY291bnR9fTwvc3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2FsbGVyeUZvcm0udmFsdWUuc291cmNlQ2hlY2tMaXN0X2lkPT09J251bWJlcnBsYXRlaW5mbydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0zXCIgKm5nSWY9XCJkZXRlY3Rpb24/LmNhcl9saWNlbnNlX2lkXCI+TnVtYmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF0ZSA6PHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkZXRlY3Rpb24uY2FyX2xpY2Vuc2VfaWR9fTwvc3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IHRleHQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtM1wiICpuZ0lmPVwiZGV0ZWN0aW9uPy5kYXRlX3RpbWVzdGFtcFwiPkVudHJ5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lOjxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGV0ZWN0aW9uLmRhdGVfdGltZXN0YW1wfX08L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZD09PSdjYXJzYXR0ZW5kZWQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRldGVjdGlvbj8uaW50ZXJhY3RlZF9wZXJzb25fY291bnRcIj5OdW1iZXIgb2ZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlb3BsZSBJbnRlcmFjdGVkIDo8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGV0ZWN0aW9uLmludGVyYWN0ZWRfcGVyc29uX2NvdW50fX08L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiB0ZXh0LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTNcIiAqbmdJZj1cImRldGVjdGlvbj8uY2FyX3JlZ19udW1iZXJcIj5OdW1iZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRlIDo8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RldGVjdGlvbj8uY2FyX3JlZ19udW1iZXJ9fTwvc3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRldGVjdGlvbj8uY2FyX3JlZ19udW1iZXJcIj5EZXRlY3Rpb24gVGltZSA6PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RldGVjdGlvbj8uZGF0ZV90aW1lc3RhbXB9fTwvc3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IHRleHQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRldGVjdGlvbj8uaW50ZXJhY3RlZF9kdXJhdGlvbl9pbl9zZWNzXCI+VGltZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlbnQ6PHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkZXRlY3Rpb24uaW50ZXJhY3RlZF9kdXJhdGlvbl9pbl9zZWNzfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaW5zPC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdhbGxlcnlGb3JtLnZhbHVlLnNvdXJjZUNoZWNrTGlzdF9pZD09PSd2ZWhpY2xlX2NoZWNrX2luJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGV0ZWN0aW9uPy5kYXRlX3RpbWVzdGFtcFwiPkRldGVjdGlvbiBUaW1lIDo8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGV0ZWN0aW9uLmRhdGVfdGltZXN0YW1wfX08L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCB0ZXh0LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTNcIiAqbmdJZj1cImRldGVjdGlvbj8uZGF0ZV90aW1lc3RhbXBcIj5TbG90XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6PHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkZXRlY3Rpb24uc2xvdF9pZH19PC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJ3LTEwMCBoLTUwMHB4IHJvdW5kZWQtdG9wXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBSWNoZWNrbGlzdENETn19e3tkZXRlY3Rpb24ucGF0aH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtdC0zXCI+IHt7dGhpcy5jaGVja2xpc3ROYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0xMCBteS01XCIgKm5nSWY9XCJ2aWRlb0NoZWNrbGlzdC5pbmNsdWRlcyhzZWxlY3QpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCIgKm5nSWY9XCJjbGllbnREYXRhLmxvZ28mJmNsaWVudERhdGEubG9nbyE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJtdC01IG1iLTMgdGV4dC1jZW50ZXIgaWNvbnNpemVcIiBzcmM9XCJ7e2NsaWVudERhdGEubG9nb319XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0zIG10LTVcIiAqbmdGb3I9XCJsZXQgaXRlbSAgb2YgY3VzdG9tZXJ1bmF0dGVuZGVkRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHB4LTEwIG10LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInVuaS10aXRsZVwiPkNoZWNrbGlzdCBOYW1lOjwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidW5pLXN1YnRpdGxlXCI+OiB7e3RoaXMuY2hlY2tsaXN0TmFtZX19IDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+U3RvcmUgTmFtZTwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidW5pLXN1YnRpdGxlXCI+OiB7e2l0ZW0uc3RvcmVOYW1lfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cInJvdyB3LTEwMCBtYXJnaW4tdG9wLXNpZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInFhLWhlYWRpbmdcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdGb3I9XCJsZXQgZGV0ZWN0aW9uIG9mIGl0ZW0uaW1hZ2VzRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHB4LTEwIG10LTUgbWFyZ2luLWxlZnQtc2lkZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdCE9PSdzdXNwaWNpb3VzYWN0aXZpdHknXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIiAqbmdJZj1cImRldGVjdGlvbj8uQW5zd2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+RGV0ZWN0aW9uIFN0YXR1czwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiICpuZ0lmPVwiZGV0ZWN0aW9uPy5BbnN3ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPjo8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtcy0zIGJhZGdlIGJhZGdlLWxpZ2h0LWRhbmdlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRldGVjdGlvbj8uQW5zd2VyPT09J3JlamVjdGVkJ1wiPkJyZWFjaGVkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTMgYmFkZ2UgYmFkZ2UtbGlnaHQtc3VjY2Vzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRldGVjdGlvbj8uQW5zd2VyPT09J2FwcHJvdmVkJ1wiPk5vdC1icmVhY2hlZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInVuaS10aXRsZVwiPkRhdGU8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPjoge3tkZXRlY3Rpb24uZGF0ZXxkYXRlOidkZC1NTS15eXl5JyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCIgKm5nSWY9XCJkZXRlY3Rpb24/LmNvbmZpZ1RpbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ1bmktdGl0bGVcIj5Db25maWd1cmVkIFRpbWU8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIiAqbmdJZj1cImRldGVjdGlvbj8uY29uZmlnVGltZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidW5pLXN1YnRpdGxlXCI+OiB7e2RldGVjdGlvbi5jb25maWdUaW1lIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIiAqbmdJZj1cImRldGVjdGlvbj8uZHVyYXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ1bmktdGl0bGVcIj5EdXJhdGlvbjwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiICpuZ0lmPVwiZGV0ZWN0aW9uPy5kdXJhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidW5pLXN1YnRpdGxlXCI+OiB7e2RldGVjdGlvbi5kdXJhdGlvbiB9fSBNaW5zPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIiAqbmdJZj1cImRldGVjdGlvbj8uZG93blRpbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ1bmktdGl0bGVcIj5Eb3dudGltZTwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiICpuZ0lmPVwiZGV0ZWN0aW9uPy5kb3duVGltZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidW5pLXN1YnRpdGxlXCI+OiB7e2RldGVjdGlvbi5kb3duVGltZSB9fSBNaW5zIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwiRG93bnRpbWUgbWF5IHJlc3VsdCBpbiBpbmFjY3VyYXRlIGRhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCIgY29udGFpbmVyPVwiYm9keVwiPjxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE1IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTcuNjY2NjcgNS4zMzIwM1Y3Ljk5ODdNNy42NjY2NyAxMC42NjU0SDcuNjczMzNNMTQuMzMzMyA3Ljk5ODdDMTQuMzMzMyAxMS42ODA2IDExLjM0ODYgMTQuNjY1NCA3LjY2NjY3IDE0LjY2NTRDMy45ODQ3NyAxNC42NjU0IDEgMTEuNjgwNiAxIDcuOTk4N0MxIDQuMzE2OCAzLjk4NDc3IDEuMzMyMDMgNy42NjY2NyAxLjMzMjAzQzExLjM0ODYgMS4zMzIwMyAxNC4zMzMzIDQuMzE2OCAxNC4zMzMzIDcuOTk4N1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgbWluLWgtNDVweCBweC0wIG15LTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwibWUtMyBzdG9yZS10aXRsZVwiPnt7aXRlbS5zdG9yZU5hbWV9fTwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0yIGJhZGdlIGJhZGdlLWxpZ2h0LWRlZmF1bHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRldGVjdGlvbj8uY3VzdG9tZXJfaWRcIj5DdXN0IElEIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkZXRlY3Rpb24uY3VzdG9tZXJfaWR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTIgYmFkZ2UgYmFkZ2UtbGlnaHQtZGVmYXVsdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGV0ZWN0aW9uPy5xdWV1ZV9pZFwiPlF1ZXVlIElEIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkZXRlY3Rpb24ucXVldWVfaWR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTIgYmFkZ2UgYmFkZ2UtbGlnaHQtZGVmYXVsdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGV0ZWN0aW9uPy5vcHR1bV9pZFwiPk9wdG9tIElEIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkZXRlY3Rpb24ub3B0dW1faWR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwibXMtMiBiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0XCIgKm5nSWY9XCJkZXRlY3Rpb24/LmRhdGVcIj5EYXRlIDoge3tkZXRlY3Rpb24uZGF0ZXxkYXRlOidkZC1NTS15eXl5JyB9fTwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cIm1zLTMgYmFkZ2UgYmFkZ2UtbGlnaHQtZGVmYXVsdFwiICpuZ0lmPVwiZGV0ZWN0aW9uPy5jb25maWdUaW1lXCI+SW5zcGVjdGlvbiB0aW1lIDoge3tkZXRlY3Rpb24uY29uZmlnVGltZX19PC9zcGFuPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTMgYmFkZ2UgYmFkZ2UtbGlnaHQtZGVmYXVsdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGV0ZWN0aW9uPy50ZW1wX2lkXCI+VGVtcElkIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkZXRlY3Rpb24udGVtcF9pZH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMyBiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkZXRlY3Rpb24/LnRpbWVfc3BlbmRcIj5UaW1lc3BlbmQgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RldGVjdGlvbi50aW1lX3NwZW5kfX1NaW5zPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTd2l0Y2ggdG9nZ2xlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgdGV4dC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0zIGJhZGdlIGJhZGdlLWxpZ2h0LWRlZmF1bHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkZXRlY3Rpb24/LmVudHJ5X3RpbWVcIj5FbnRyeSB0aW1lIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGV0ZWN0aW9uLmVudHJ5X3RpbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0zIGJhZGdlIGJhZGdlLWxpZ2h0LWRlZmF1bHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkZXRlY3Rpb24/LmV4aXRfdGltZVwiPkV4aXQgdGltZSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RldGVjdGlvbi5leGl0X3RpbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0zIGJhZGdlIGJhZGdlLWxpZ2h0LXN1Y2Nlc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkZXRlY3Rpb24/LmFkaGVyZW5jZV9yYXRlXCI+QWRoZXJlbmNlIFJhdGUgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkZXRlY3Rpb24uYWRoZXJlbmNlX3JhdGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0zIGJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnkgdGV4dC1jYXBpdGFsaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGV0ZWN0aW9uPy5jYXRlZ29yeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkZXRlY3Rpb24uY2F0ZWdvcnl9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0zIGJhZGdlIGJhZGdlLWxpZ2h0LWRlZmF1bHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkZXRlY3Rpb24/LmN1c3RvbWVyX2VudHJ5X3RpbWVcIj5FbnRyeSB0aW1lIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGV0ZWN0aW9uLmN1c3RvbWVyX2VudHJ5X3RpbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0zIGJhZGdlIGJhZGdlLWxpZ2h0LWRlZmF1bHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkZXRlY3Rpb24/LmN1c3RvbWVyX2V4aXRfdGltZVwiPkV4aXQgdGltZSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RldGVjdGlvbi5jdXN0b21lcl9leGl0X3RpbWV9fTwvc3Bhbj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0wXCIgKm5nSWY9XCJzZWxlY3QgIT09J2V5ZXRlc3QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW8gY29udHJvbHMgY2xhc3M9XCJ3LTEwMCBoLTQ1MHB4IHJvdW5kZWQtdG9wXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBSWNoZWNrbGlzdENETn19e3tkZXRlY3Rpb24udmlkZW9fcGF0aH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmlkZW8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktMFwiICpuZ0lmPVwic2VsZWN0ID09PSdleWV0ZXN0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZpZGVvIGNvbnRyb2xzIGNsYXNzPVwidy0xMDAgaC00NTBweCByb3VuZGVkLXRvcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3tlbnZpcm9ubWVudC5FeWVUZXN0Q0ROfX17e2RldGVjdGlvbi52aWRlb19wYXRofX1cIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmlkZW8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ID09PSdzdG9yZW9wZW5hbmRjbG9zZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIiAqbmdJZj1cImNsaWVudERhdGEubG9nbyYmY2xpZW50RGF0YS5sb2dvIT09JydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm10LTUgbWItMyB0ZXh0LWNlbnRlciBpY29uc2l6ZVwiIHNyYz1cInt7Y2xpZW50RGF0YS5sb2dvfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHB4LTEwIG10LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ1bmktdGl0bGVcIj5DaGVja2xpc3QgTmFtZTo8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPjoge3t0aGlzLmNoZWNrbGlzdE5hbWV9fSA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgbWFyZ2luLXRvcC1zaWRlXCIgKm5nRm9yPVwibGV0IHN0b3JlIG9mIHN0b3JlT3BlbmNsb3NlVmlld1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIG14LTggbXktOFwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHN0b3JlLmltYWdlc0RhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcHgtMTAgbXQtNSBtYXJnaW4tbGVmdC1zaWRlIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiICpuZ0lmPVwiaXRlbT8uYnVmZmVyX29wZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+QnVmZmVyIGZvciBPcGVuIFRpbWUgOjwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCIgKm5nSWY9XCJpdGVtPy5idWZmZXJfb3BlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPjoge3tpdGVtLmJ1ZmZlcl9vcGVuIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiICpuZ0lmPVwiaXRlbT8uYnVmZmVyX2Nsb3NlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInVuaS10aXRsZVwiPkJ1ZmZlciBmb3IgQ2xvc2UgVGltZSA6PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIiAqbmdJZj1cIml0ZW0/LmJ1ZmZlcl9jbG9zZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPjoge3tpdGVtLmJ1ZmZlcl9jbG9zZSB9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+RGV0ZWN0aW9uIFN0YXR1czwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidW5pLXN1YnRpdGxlXCI+OjxzcGFuIGNsYXNzPVwibXMtMyBiYWRnZSBiYWRnZS1saWdodC1kYW5nZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbT8uRmxhZ1wiPkJyZWFjaGVkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0zIGJhZGdlIGJhZGdlLWxpZ2h0LXN1Y2Nlc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWl0ZW0/LkZsYWdcIj5Ob3QtYnJlYWNoZWQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+RGF0ZTwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidW5pLXN1YnRpdGxlXCI+OiB7e2l0ZW0uZGF0ZXxkYXRlOidkZC1NTS15eXl5JyB9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNuYXBjYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNuYXBoZWFkZXIgbXMtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0uc3RvcmVOYW1lfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG0tMCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWcgbXQtNCBweC0zIHBvc2l0aW9uLXJlbGF0aXZlXCIgKm5nSWY9XCIhaXRlbS5vcGVuVGltZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcmV2aWV3IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyM1wiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMyAyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgaWQ9XCJHcm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBpZD1cIlZlY3RvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTYuNSA2LjMyMjI3SDYuNTFNMTYuMjUgOS4zMjIyN0gyMS41TDE4IDE2LjMyMjNMMTQuOTEgMTIuMDAyM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggaWQ9XCJWZWN0b3JfMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEuNSAxNi4zMjI5SDUuMjZDNS42MzI3MyAxNi4zMjU1IDUuOTk4NzcgMTYuMjIzOSA2LjMxNjgyIDE2LjAyOTVDNi42MzQ4NyAxNS44MzUyIDYuODkyMjggMTUuNTU1OCA3LjA2IDE1LjIyMjlMOC41IDEyLjMyMjlNMS41IDE4LjMyMjlWMTQuMzIyOU0xNy41IDYuODIyOTFMMTMuNSAxNC44MjI5TDMuMTEgOS42MjI5MUMyLjQyMDMzIDkuMjc1NTMgMS44OTYzNSA4LjY2OTEgMS42NTI3MiA3LjkzNjMyQzEuNDA5MDkgNy4yMDM1NCAxLjQ2NTY0IDYuNDA0MSAxLjgxIDUuNzEyOTFMMy4xOSAyLjkyMjkxQzMuMzYyIDIuNTgwMTQgMy41OTk4NCAyLjI3NDYgMy44ODk5NCAyLjAyMzc1QzQuMTgwMDMgMS43NzI5IDQuNTE2NyAxLjU4MTY1IDQuODgwNzIgMS40NjA5M0M1LjI0NDc0IDEuMzQwMjEgNS42Mjg5NyAxLjI5MjM5IDYuMDExNDcgMS4zMjAxOEM2LjM5Mzk4IDEuMzQ3OTcgNi43NjcyNiAxLjQ1MDg0IDcuMTEgMS42MjI5MUwxNy41IDYuODIyOTFaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBydnR4dCBtdC01IHRleHRjbHJcIj5QcmV2aWV3IG5vdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlZnJlc2h0eHQgbXQtMiB0ZXh0Y2xyXCI+VGhlIHNlbGVjdGVkIGNhbWVyYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IGF2YWlsYWJsZSBhdCB0aGUgbW9tZW50Ljwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiaXRlbS5vcGVuVGltZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJteC0xIGltZy1vcGNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhPcGVuY2xvc2VjaGVja2xpc3RDRE59fXt7aXRlbS5zdG9yZUlkfX0ve3tpdGVtLmRhdGVTdHJpbmd8ZGF0ZTonZGQtTU0teXl5eSd9fS9vcGVyYXRpb25fc25hcHMvb3Blbi5qcGVnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwib3BlbiBjbG9zZSBzbmFwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2sgbXgtMSBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbmFwdGV4dFwiPk9wZW5pbmcgU25hcDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbmFwdGltZVwiPnt7aXRlbS5vcGVuVGltZX19IC1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLmRhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5IHNuYXBiYWRnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaXRlbT8ub3BlblRpbWVGbGFnXCI+T24gVGltZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtZGFuZ2VyIHNuYXBiYWRnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtPy5vcGVuVGltZUZsYWdcIj5MYXRlIE9wZW48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nIG10LTQgcHgtMyBwb3NpdGlvbi1yZWxhdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaXRlbS5jbG9zZVRpbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJldmlldyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjNcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjMgMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGlkPVwiR3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggaWQ9XCJWZWN0b3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk02LjUgNi4zMjIyN0g2LjUxTTE2LjI1IDkuMzIyMjdIMjEuNUwxOCAxNi4zMjIzTDE0LjkxIDEyLjAwMjNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGlkPVwiVmVjdG9yXzJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xLjUgMTYuMzIyOUg1LjI2QzUuNjMyNzMgMTYuMzI1NSA1Ljk5ODc3IDE2LjIyMzkgNi4zMTY4MiAxNi4wMjk1QzYuNjM0ODcgMTUuODM1MiA2Ljg5MjI4IDE1LjU1NTggNy4wNiAxNS4yMjI5TDguNSAxMi4zMjI5TTEuNSAxOC4zMjI5VjE0LjMyMjlNMTcuNSA2LjgyMjkxTDEzLjUgMTQuODIyOUwzLjExIDkuNjIyOTFDMi40MjAzMyA5LjI3NTUzIDEuODk2MzUgOC42NjkxIDEuNjUyNzIgNy45MzYzMkMxLjQwOTA5IDcuMjAzNTQgMS40NjU2NCA2LjQwNDEgMS44MSA1LjcxMjkxTDMuMTkgMi45MjI5MUMzLjM2MiAyLjU4MDE0IDMuNTk5ODQgMi4yNzQ2IDMuODg5OTQgMi4wMjM3NUM0LjE4MDAzIDEuNzcyOSA0LjUxNjcgMS41ODE2NSA0Ljg4MDcyIDEuNDYwOTNDNS4yNDQ3NCAxLjM0MDIxIDUuNjI4OTcgMS4yOTIzOSA2LjAxMTQ3IDEuMzIwMThDNi4zOTM5OCAxLjM0Nzk3IDYuNzY3MjYgMS40NTA4NCA3LjExIDEuNjIyOTFMMTcuNSA2LjgyMjkxWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcnZ0eHQgbXQtNSB0ZXh0Y2xyXCI+UHJldmlldyBub3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWZyZXNodHh0IG10LTIgdGV4dGNsclwiPlRoZSBzZWxlY3RlZCBjYW1lcmFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBhdmFpbGFibGUgYXQgdGhlIG1vbWVudC48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIml0ZW0uY2xvc2VUaW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm14LTEgaW1nLW9wY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7ZW52aXJvbm1lbnQuVHJheE9wZW5jbG9zZWNoZWNrbGlzdENETn19e3tpdGVtLnN0b3JlSWR9fS97e2l0ZW0uZGF0ZVN0cmluZ3xkYXRlOidkZC1NTS15eXl5J319L29wZXJhdGlvbl9zbmFwcy9jbG9zZS5qcGVnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiQ2hlY2tsaXN0IFZpZGVvIFBsYXllclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXN0YWNrIG14LTEgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic25hcHRleHRcIj5DbG9zaW5nIFNuYXA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic25hcHRpbWVcIj57e2l0ZW0uY2xvc2VUaW1lfX0gLVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0uZGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeSBzbmFwYmFkZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWl0ZW0/LmNsb3NlVGltZUZsYWdcIj5PbiBUaW1lPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1kYW5nZXIgc25hcGJhZGdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0/LmNsb3NlVGltZUZsYWdcIj5FYXJseSBDbG9zZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJib3hpbWFnZUNoZWNrbGlzdC5pbmNsdWRlcyhzZWxlY3QpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCIgKm5nSWY9XCJjbGllbnREYXRhLmxvZ28mJmNsaWVudERhdGEubG9nbyE9PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJtdC01IG1iLTMgdGV4dC1jZW50ZXIgaWNvbnNpemVcIiBzcmM9XCJ7e2NsaWVudERhdGEubG9nb319XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0Zvcj1cImxldCBzdG9yZSBvZiBxdWV1ZUFsZXJ0Vmlld1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHB4LTEwIG10LTVcIiAqbmdJZj1cInNob3dtdWx0aVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+U3RvcmUgTmFtZTo8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVuaS1zdWJ0aXRsZVwiPnt7c3RvcmU/LnN0b3JlTmFtZX19IHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tzdG9yZT8uY2l0eX19LHt7c3RvcmU/LnN0YXRlfX0se3tzdG9yZT8uY291bnRyeX19IDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidW5pLXRpdGxlXCI+Q2hlY2tsaXN0IE5hbWU6PC9oMz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidW5pLXN1YnRpdGxlXCI+e3tjaGVja2xpc3ROYW1lfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3Q9PT0nYm94YWxlcnQnfHxzZWxlY3Q9PT0nc3VzcGljaW91c2Zvb3RmYWxsJ3x8c2VsZWN0PT09J2RyaW5raW5nJ3x8c2VsZWN0PT09J2JhZ2RldGVjdGlvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ1bmktdGl0bGVcIj5EZXNjcmlwdGlvbjo8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0PT09J2JveGFsZXJ0J3x8c2VsZWN0PT09J3N1c3BpY2lvdXNmb290ZmFsbCd8fHNlbGVjdD09PSdkcmlua2luZyd8fHNlbGVjdD09PSdiYWdkZXRlY3Rpb24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ1bmktc3VidGl0bGVcIj57e2NoZWNrTGlzdERlc2NyaXB0aW9ufX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG0tMCB3LTEwMCBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBtdC0yXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc3RvcmUuaW1hZ2VzRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGJvcmRlcmNvbG9yIGJnLXNlY29uZGFyeSBtdC04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXN0YXJ0IG1zLTUgbXQtMiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS56b25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSByb3VuZGVkLWxnIHAtMlwiPnt7aXRlbS56b25lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMyBmdy1zZW1pYm9sZFwiPnt7IGl0ZW0uZGF0ZV90aW1lc3RhbXAgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJ3LTEwMCBoLTI1MHB4IHJvdW5kZWQtYm90dG9tXCIgKGNsaWNrKT1cIm9wZW5Nb2RlbChpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBSWNoZWNrbGlzdENETn19e3tpdGVtLnBhdGh9fVwiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1wYWdpbmF0aW9uICpuZ0lmPVwiIXZpZXdsb2FkaW5nICYmICF2aWV3bm9EYXRhXCIgW2l0ZW1zUGVyUGFnZV09XCJsaW1pdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1cnJlbnRQYWdlXT1cIm9mZnNldFwiIFt0b3RhbEl0ZW1zXT1cInRvdGFsQ291bnRcIiBbcGFnaW5hdGlvblNpemVzXT0ncGFnaW5hdGlvblNpemVzJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJsaW1pdFwiIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZXZpZXcoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiPjwvbGliLXBhZ2luYXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VjdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFzaG93c2lkZW5hdlwiIChjbGljayk9XCJzaWRlbmF2KClcIiBjbGFzcz1cImJhY2tCdXR0b25sZWZ0IHRleHQtY2VudGVyIHB0LTEgY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwibXQtMiBtcy0yXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05LjcyNzE0IDEyLjYzNjVMMTMuMzYzNSA5LjAwMDEzTDkuNzI3MTQgNS4zNjM3N000LjYzNjIzIDEyLjYzNjVMOC4yNzI1OSA5LjAwMDEzTDQuNjM2MjMgNS4zNjM3N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cInJvdyBjYXJkIG14LTAgcC0zIFwiICpuZ0lmPVwiY2hlY2tBSWNoZWNrbGlzdCgpJiYhdmlld25vRGF0YSYmdXNlckRldGFpbHM/LnJvbGUhPT0ndXNlcidcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgIHRleHQtZW5kXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYm9yZGVyLXByaW1hcnkxXCIgW2Rpc2FibGVkXT1cIiFhcHByb3ZhbFN0YXR1c1wiIChjbGljayk9XCJhcHBvdmVDaGVja2xpc3QoKVwiPkFwcHJvdmVcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuPG5nLXRlbXBsYXRlICN6b29tUG9wdXAgbGV0LW1vZGVsPlxyXG4gICAgPGRpdiBjbGFzcz1cInAtOFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcHQtMCBwcy0xIHBlLTBcIj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXN0YXJ0IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidmlld0ltYWdlLnpvbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSByb3VuZGVkLWxnIHAtMlwiPnt7dmlld0ltYWdlLnpvbmV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidmlld0ltYWdlLmVtcHR5Qm94Q291bnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+RW1wdHkgc2hlbHZlcyA6IHt7dmlld0ltYWdlLmVtcHR5Qm94Q291bnR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInZpZXdJbWFnZS5lbnRyeV90aW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkVudHJ5IFRpbWUgOiB7e3ZpZXdJbWFnZS5lbnRyeV90aW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInZpZXdJbWFnZS5leGl0X3RpbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+RXhpdCBUaW1lIDoge3t2aWV3SW1hZ2UuZXhpdF90aW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInZpZXdJbWFnZS50ZW1wX2lkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlRlbXAgSWQgOiB7e3ZpZXdJbWFnZS50ZW1wX2lkfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInZpZXdJbWFnZS50aW1lX3NwZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlRpbWUgU3BlbmQgOiB7e3ZpZXdJbWFnZS50aW1lX3NwZW5kfX0gTWluczwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIiAqbmdJZj1cInZpZXdJbWFnZS50aHJlc2hvbGQmJnZpZXdJbWFnZS5Ed2VsbHRpbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+SWYgdGhlIHF1ZXVlIGV4Y2VlZHMge3t2aWV3SW1hZ2UudGhyZXNob2xkfX0gcGVvcGxlIGFuZCB3YWl0IHRpbWUgc3VycGFzc2VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3ZpZXdJbWFnZS5Ed2VsbHRpbWV9fSBtaW51dGVzLCBhbiBhbGVydCB3aWxsIGJlIHRyaWdnZXJlZDwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMyBmdy1zZW1pYm9sZFwiPnt7IHZpZXdJbWFnZS5kYXRlX3RpbWVzdGFtcCB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cInN0cmVhbSBmdy1zZW1pYm9sZCB0ZXh0LW5vd3JhcCBtZS01XCIgKm5nSWY9XCJjYW1lcmEuaGVpZ2h0ICYmIGNhbWVyYS53aWR0aFwiPiBSZXNvbHV0aW9uOiB7e2NhbWVyYS5oZWlnaHR9fSBYICB7e2NhbWVyYS53aWR0aH19PC9zcGFuPiAtLT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnkgbWUtMFwiIChjbGljayk9XCJtb2RlbC5kaXNtaXNzKClcIj48c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNSA1TDUgMTVNNSA1TDE1IDE1XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInZpZXdJbWFnZS5wYXRoXCIgY2xhc3M9XCJtdC0yIG92ZXJmbG93LWF1dG9cIj5cclxuICAgICAgICAgICAgPGltZyBjbGFzcz1cInJvdW5kZWQtNCBtdC01IGltZy1wb3B1cC1zcmMgdy0xMDBcIiBzcmM9XCJ7e2Vudmlyb25tZW50LlRyYXhBSWNoZWNrbGlzdENETn19e3t2aWV3SW1hZ2UucGF0aH19XCI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=