qms-angular 1.1.26 → 1.1.28

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 (128) hide show
  1. package/bundles/qms-angular.umd.js +645 -544
  2. package/bundles/qms-angular.umd.js.map +1 -1
  3. package/esm2015/lib/common/models/qms-flat-node.model.js +1 -1
  4. package/esm2015/lib/common/models/qms-tree-node.model.js +1 -1
  5. package/esm2015/lib/common/themes.const.js +2 -1
  6. package/esm2015/lib/components/breadcrumb/breadcrumb-item.directive.js +3 -3
  7. package/esm2015/lib/components/breadcrumb/breadcrumb.js +10 -4
  8. package/esm2015/lib/components/comment/comment.js +17 -11
  9. package/esm2015/lib/components/edit-file-name-dialog/edit-file-name-dialog.js +9 -2
  10. package/esm2015/lib/components/qms-nav-drawer/qms-nav-drawer.component.js +3 -3
  11. package/esm2015/lib/components/qms-navigation-drawer/qms-navigation-drawer.component.js +3 -3
  12. package/esm2015/lib/components/qms-paginator/qms-paginator.component.js +9 -2
  13. package/esm2015/lib/components/related/list-other-related/list-related.component.js +9 -2
  14. package/esm2015/lib/components/related/model/popup-data.model.js +2 -1
  15. package/esm2015/lib/components/related/popup/related-popup.component.js +58 -24
  16. package/esm2015/lib/components/related/risk/analysis/analysis.component.js +9 -2
  17. package/esm2015/lib/components/related/risk/list/list.component.js +9 -2
  18. package/esm2015/lib/components/related/risk/result/result.component.js +9 -2
  19. package/esm2015/lib/components/reports/qms-report-content-portrait/qms-report-content-portrait.component.js +9 -2
  20. package/esm2015/lib/components/reports/qms-report-cover-portrait/qms-report-cover-portrait.component.js +8 -3
  21. package/esm2015/lib/components/select-access-dialog/select-access-dialog.component.js +2 -2
  22. package/esm2015/lib/components/select-department/select-department.component.js +6 -38
  23. package/esm2015/lib/components/select-department-tree/model/department-paging.model.js +1 -2
  24. package/esm2015/lib/components/select-department-tree/model/select-department-tree.config.js +2 -5
  25. package/esm2015/lib/components/select-department-tree/select-department-tree.component.js +114 -164
  26. package/esm2015/lib/components/select-department-tree/select-department-tree.module.js +2 -4
  27. package/esm2015/lib/components/select-dialog/select-dialog.js +8 -4
  28. package/esm2015/lib/components/select-include-children/select-include-children.component.js +3 -3
  29. package/esm2015/lib/components/select-one/select-one-next.component.js +3 -3
  30. package/esm2015/lib/components/select-one/select-one.component.js +3 -3
  31. package/esm2015/lib/components/select-process-document/select-process-document.component.js +3 -3
  32. package/esm2015/lib/components/tree/basic-tree.component.js +4 -4
  33. package/esm2015/lib/components/upload-file-error-dialog/upload-file-error-dialog.js +9 -2
  34. package/esm2015/lib/directives/chip-input/chip-input-select-trigger.directive.js +3 -3
  35. package/esm2015/lib/directives/chips/chip.directive.js +2 -2
  36. package/esm2015/lib/directives/dropdown-menu/dropdown-item.directive.js +2 -2
  37. package/esm2015/lib/directives/file-upload/file-upload-display.directive.js +3 -3
  38. package/esm2015/lib/directives/file-upload/file-upload-multiple-display.directive.js +3 -3
  39. package/esm2015/lib/directives/file-upload/file-upload-multiple.directive.js +3 -3
  40. package/esm2015/lib/directives/file-upload/file-upload.directive.js +2 -2
  41. package/esm2015/lib/directives/search-field.directive.js +2 -2
  42. package/esm2015/lib/model/en.js +4 -2
  43. package/esm2015/lib/model/no.js +4 -2
  44. package/esm2015/lib/pipe/dateFormat.pipe.js +9 -2
  45. package/esm2015/lib/qms-angular.component.js +9 -2
  46. package/esm2015/lib/qms-ckeditor-components/common/bpmn/toolbar.function.js +10 -1
  47. package/esm2015/lib/qms-ckeditor-components/common/classes/qmsUploadAdapter.js +21 -15
  48. package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorImageUploadType.const.js +4 -0
  49. package/esm2015/lib/qms-ckeditor-components/common/enums/ckeditor-bpmn-expand.enum.js +8 -0
  50. package/esm2015/lib/qms-ckeditor-components/common/functions/common.function.js +6 -9
  51. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-data.model.js +1 -1
  52. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.js +39 -11
  53. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.js +2 -2
  54. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.js +53 -56
  55. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-load-template/qms-ckeditor-load-template.component.js +9 -4
  56. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +28 -11
  57. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.js +33 -2
  58. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-upload.service.js +6 -2
  59. package/esm2015/qms-angular.js +11 -11
  60. package/fesm2015/qms-angular.js +589 -468
  61. package/fesm2015/qms-angular.js.map +1 -1
  62. package/lib/common/models/qms-flat-node.model.d.ts +0 -1
  63. package/lib/common/models/qms-tree-node.model.d.ts +0 -1
  64. package/lib/common/themes.const.d.ts +1 -0
  65. package/lib/components/breadcrumb/breadcrumb-item.directive.d.ts +2 -2
  66. package/lib/components/breadcrumb/breadcrumb.d.ts +3 -0
  67. package/lib/components/comment/comment.d.ts +3 -0
  68. package/lib/components/edit-file-name-dialog/edit-file-name-dialog.d.ts +3 -0
  69. package/lib/components/qms-paginator/qms-paginator.component.d.ts +3 -0
  70. package/lib/components/related/list-other-related/list-related.component.d.ts +3 -0
  71. package/lib/components/related/model/popup-data.model.d.ts +2 -0
  72. package/lib/components/related/popup/related-popup.component.d.ts +13 -2
  73. package/lib/components/related/risk/analysis/analysis.component.d.ts +3 -0
  74. package/lib/components/related/risk/list/list.component.d.ts +3 -0
  75. package/lib/components/related/risk/result/result.component.d.ts +3 -0
  76. package/lib/components/reports/qms-report-content-portrait/qms-report-content-portrait.component.d.ts +3 -0
  77. package/lib/components/reports/qms-report-cover-portrait/qms-report-cover-portrait.component.d.ts +5 -3
  78. package/lib/components/select-department/select-department.component.d.ts +0 -19
  79. package/lib/components/select-department-tree/model/select-department-tree.config.d.ts +0 -3
  80. package/lib/components/select-department-tree/select-department-tree.component.d.ts +23 -51
  81. package/lib/components/select-dialog/select-dialog.d.ts +2 -1
  82. package/lib/components/upload-file-error-dialog/upload-file-error-dialog.d.ts +3 -0
  83. package/lib/directives/chip-input/chip-input-select-trigger.directive.d.ts +1 -1
  84. package/lib/directives/file-upload/file-upload-display.directive.d.ts +1 -1
  85. package/lib/directives/file-upload/file-upload-multiple-display.directive.d.ts +1 -1
  86. package/lib/directives/file-upload/file-upload-multiple.directive.d.ts +2 -2
  87. package/lib/model/en.d.ts +2 -0
  88. package/lib/model/no.d.ts +2 -0
  89. package/lib/pipe/dateFormat.pipe.d.ts +3 -0
  90. package/lib/qms-angular.component.d.ts +3 -0
  91. package/lib/qms-ckeditor-components/common/classes/qmsUploadAdapter.d.ts +1 -1
  92. package/lib/qms-ckeditor-components/common/constants/ckeditorImageUploadType.const.d.ts +3 -0
  93. package/lib/qms-ckeditor-components/common/enums/ckeditor-bpmn-expand.enum.d.ts +6 -0
  94. package/lib/qms-ckeditor-components/common/functions/common.function.d.ts +2 -4
  95. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-data.model.d.ts +1 -0
  96. package/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.d.ts +4 -2
  97. package/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.d.ts +3 -1
  98. package/lib/qms-ckeditor-components/components/qms-ckeditor-load-template/qms-ckeditor-load-template.component.d.ts +1 -0
  99. package/lib/qms-ckeditor-components/qms-ckeditor.component.d.ts +1 -0
  100. package/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.d.ts +2 -0
  101. package/lib/qms-ckeditor-components/services/qms-ckeditor-upload.service.d.ts +1 -1
  102. package/package.json +1 -1
  103. package/qms-angular.d.ts +10 -10
  104. package/qms-angular.metadata.json +1 -1
  105. package/src/assets/jointjs/scss/bpmn.scss +22 -1
  106. package/src/assets/qms-ckeditor-plugin/build/ckeditor.js +1 -1
  107. package/src/assets/qms-ckeditor-plugin/build/ckeditor.js.map +1 -1
  108. package/src/assets/qms-ckeditor-plugin/src/plugins/anchor/anchorcommand.js +13 -3
  109. package/src/assets/qms-ckeditor-plugin/src/plugins/anchor/anchorui.js +7 -1
  110. package/src/assets/qms-ckeditor-plugin/src/plugins/bpmn/bpmndialogcommand.js +12 -3
  111. package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkcommand.js +35 -33
  112. package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkdialogcommand.js +9 -6
  113. package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkediting.js +28 -14
  114. package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkimageediting.js +1 -1
  115. package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkimageui.js +97 -92
  116. package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkui.js +40 -28
  117. package/src/assets/qms-ckeditor-plugin/src/plugins/link/ui/linkformview.js +24 -24
  118. package/src/assets/qms-ckeditor-plugin/src/plugins/link/utils.js +8 -1
  119. package/src/assets/qms-ckeditor-plugin/src/plugins/table/converters/downcast.js +2 -2
  120. package/src/assets/qms-ckeditor-plugin/src/plugins/template/loadtemplatedialogcommand.js +20 -1
  121. package/src/assets/qms-ckeditor-plugin/src/plugins/video/theme/video.css +1 -1
  122. package/src/assets/qms-ckeditor-plugin/src/plugins/video/video/videoediting.js +3 -2
  123. package/src/assets/qms-ckeditor-plugin/src/plugins/video/videoupload/uploadvideocommand.js +1 -1
  124. package/src/lib/components/related/popup/related-popup.component.scss +19 -0
  125. package/src/lib/components/select-department/select-department.component.scss +5 -25
  126. package/src/lib/components/select-department-tree/select-department-tree.component.scss +182 -381
  127. package/src/lib/qms-ckeditor-components/components/qms-ckeditor-load-template/qms-ckeditor-load-template.component.scss +4 -0
  128. package/src/lib/qms-ckeditor-components/qms-ckeditor.component.scss +4 -0
@@ -27,6 +27,7 @@ import { LinkAnchor } from "../../common/enums/link-anchor.enum";
27
27
  import { CKEditorLinkConst } from '../../common/constants/ckeditorLink.constant';
28
28
  import { QMSCKEditorUploadService } from "../../services/qms-ckeditor-upload.service";
29
29
  import { base64StringToFile } from "../../common/helper/fileHelper";
30
+ import { QMSCKEditorBpmnExpand } from "../../common/enums/ckeditor-bpmn-expand.enum";
30
31
  class ILink {
31
32
  constructor() {
32
33
  this.target = TargetTypeName.new;
@@ -38,11 +39,11 @@ class ILink {
38
39
  }
39
40
  }
40
41
  export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
41
- constructor(dialog, translate, bmpnService, bpmnApiService, linkService, uploadService, dialogRef, data) {
42
+ constructor(dialog, translate, bpmnService, bpmnApiService, linkService, uploadService, dialogRef, data) {
42
43
  super();
43
44
  this.dialog = dialog;
44
45
  this.translate = translate;
45
- this.bmpnService = bmpnService;
46
+ this.bpmnService = bpmnService;
46
47
  this.bpmnApiService = bpmnApiService;
47
48
  this.linkService = linkService;
48
49
  this.uploadService = uploadService;
@@ -99,7 +100,7 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
99
100
  if (this.id) {
100
101
  this.jsonContent = yield this.getJsonContent(this.id);
101
102
  }
102
- this.bmpnService.buildDiagram(this.bpmnTemlates, null, CKEditorEventConst.QMSCK_BPMN, this.jsonContent, 1, this.LANG);
103
+ this.bpmnService.buildDiagram(this.bpmnTemlates, null, CKEditorEventConst.QMSCK_BPMN, this.jsonContent, 1, this.LANG);
103
104
  this.initDocumentIcons();
104
105
  this.initTarget();
105
106
  this.initConnectionType();
@@ -138,20 +139,37 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
138
139
  }
139
140
  expandPanel() {
140
141
  this.expandedPanel = !this.expandedPanel;
142
+ this.bpmnService.isExpandedPanel = !this.bpmnService.isExpandedPanel;
141
143
  const panelStencil = document.getElementById('panel-stencil-container');
144
+ if (!panelStencil)
145
+ return;
142
146
  const paperContainer = document.getElementById('paperpanel');
143
147
  const stencilContainer = document.getElementById('stencilpanel');
144
- if (panelStencil) {
145
- if (!this.expandedPanel) {
148
+ switch (this.checkCaseBpmnExpandPanel()) {
149
+ case QMSCKEditorBpmnExpand.isFullScreenAndnotExpandPanel:
150
+ stencilContainer.style.height = '50px';
151
+ panelStencil.style.height = '50px';
152
+ paperContainer === null || paperContainer === void 0 ? void 0 : paperContainer.classList.remove('full-screen-bpmn-editor_paperpanel');
153
+ paperContainer === null || paperContainer === void 0 ? void 0 : paperContainer.classList.add('full-screen-bpmn-editor_paperpanel-expandpanel');
154
+ break;
155
+ case QMSCKEditorBpmnExpand.isFullScreenAndisExpandPanel:
156
+ stencilContainer.style.height = '150px';
157
+ panelStencil.style.height = '150px';
158
+ paperContainer === null || paperContainer === void 0 ? void 0 : paperContainer.classList.remove('full-screen-bpmn-editor_paperpanel-expandpanel');
159
+ paperContainer === null || paperContainer === void 0 ? void 0 : paperContainer.classList.add('full-screen-bpmn-editor_paperpanel');
160
+ break;
161
+ case QMSCKEditorBpmnExpand.notFullScreenAndnotExpandPanel:
146
162
  stencilContainer.style.height = '50px';
147
163
  panelStencil.style.height = '50px';
148
164
  paperContainer.style.height = '500px';
149
- }
150
- else {
165
+ break;
166
+ case QMSCKEditorBpmnExpand.notFullScreenAndisExpandPanel:
151
167
  stencilContainer.style.height = '150px';
152
168
  panelStencil.style.height = '150px';
153
169
  paperContainer.style.height = '400px';
154
- }
170
+ break;
171
+ default:
172
+ break;
155
173
  }
156
174
  }
157
175
  getTemplates() {
@@ -486,7 +504,7 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
486
504
  onTabChange($event) {
487
505
  window[FlowChartConst.TAB_NAME] = $event.tab.textLabel;
488
506
  if ($event.tab.textLabel == this.LANG.BPMN.PROPERTIES) {
489
- this.bmpnService.openShapeFunctionality(this.LANG);
507
+ this.bpmnService.openShapeFunctionality(this.LANG);
490
508
  }
491
509
  }
492
510
  parseLinkUrl(url) {
@@ -579,7 +597,7 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
579
597
  const graph = window[FlowChartConst.GRAPH];
580
598
  if (graph) {
581
599
  graph.fromJSON(JSON.parse(ogrJsonContent));
582
- this.bmpnService.setDefaultSelectedValue();
600
+ this.bpmnService.setDefaultSelectedValue();
583
601
  window[FlowChartConst.IS_SELECTED_TEMPLATE] = false;
584
602
  }
585
603
  window[FlowChartConst.MY_CELL_VIEW] = null;
@@ -759,6 +777,16 @@ export class QMSCKEditorBpmnComponent extends QMSCKEditorBaseComponent {
759
777
  return minValue;
760
778
  }
761
779
  ;
780
+ checkCaseBpmnExpandPanel() {
781
+ if (this.bpmnService.isFullScreen && !this.expandedPanel)
782
+ return QMSCKEditorBpmnExpand.isFullScreenAndnotExpandPanel;
783
+ if (this.bpmnService.isFullScreen && this.expandedPanel)
784
+ return QMSCKEditorBpmnExpand.isFullScreenAndisExpandPanel;
785
+ if (!this.bpmnService.isFullScreen && !this.expandedPanel)
786
+ return QMSCKEditorBpmnExpand.notFullScreenAndnotExpandPanel;
787
+ if (!this.bpmnService.isFullScreen && this.expandedPanel)
788
+ return QMSCKEditorBpmnExpand.notFullScreenAndisExpandPanel;
789
+ }
762
790
  }
763
791
  QMSCKEditorBpmnComponent.decorators = [
764
792
  { type: Component, args: [{
@@ -780,4 +808,4 @@ QMSCKEditorBpmnComponent.ctorParameters = () => [
780
808
  QMSCKEditorBpmnComponent.propDecorators = {
781
809
  onMessage: [{ type: HostListener, args: ['window:message', ['$event'],] }]
782
810
  };
783
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLWJwbW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9xbXMtY2tlZGl0b3ItY29tcG9uZW50cy9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1icG1uL3Ftcy1ja2VkaXRvci1icG1uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNuRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDaEYsT0FBTyxVQUFVLE1BQU0sZ0NBQWdDLENBQUM7QUFFeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQ3BHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ3pHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN2RSxPQUFPLEVBQUUs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QUFDLENBQUMsQ0FBQztZQUNuRCxJQUFJLFNBQVMsR0FBRyxRQUFRLEVBQUU7Z0JBQ3hCLFFBQVEsR0FBRyxTQUFTLENBQUM7Z0JBQ3JCLFNBQVMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDN0I7U0FDRjtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFBQSxDQUFDOzs7WUF0eEJILFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsVUFBVTtnQkFDcEIsdXVQQUFpRDs7YUFFbEQ7OztZQXRFUSxTQUFTO1lBRVQsdUJBQXVCO1lBV3ZCLFdBQVc7WUFEWCx5QkFBeUI7WUFVekIsc0JBQXNCO1lBTXRCLHdCQUF3QjtZQTVCYixZQUFZO1lBcUJ2QixtQkFBbUIsdUJBeUZ2QixNQUFNLFNBQUMsZUFBZTs7O3dCQVN4QixZQUFZLFNBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvdHJhbnNsYXRpb24tcmVnaXN0cnkuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBDS0VkaXRvckV2ZW50Q29uc3QgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2NvbnN0YW50cy9ja2VkaXRvckV2ZW50LmNvbnN0YW50XCI7XHJcbmltcG9ydCB7IEZsb3dDaGFydENvbnN0IH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9jb25zdGFudHMvY2tlZGl0b3JGbG93Y2hhcnQuY29uc3RcIjtcclxuaW1wb3J0IGd1aWRIZWxwZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9oZWxwZXIvZ3VpZEhlbHBlclwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckJwbW5UZW1wbGF0ZSB9IGZyb20gXCIuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1icG1uLXRlbXBsYXRlLm1vZGVsXCI7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yQnBtbiB9IGZyb20gXCIuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1icG1uLm1vZGVsXCI7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yRGlhbG9nRGF0YSB9IGZyb20gXCIuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1kaWFsb2cubW9kZWxcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JTYXZlQXNUZW1wbGF0ZSB9IGZyb20gXCIuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1zYXZlLWFzLXRlbXBsYXRlLm1vZGVsXCI7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yQ29uZmlybUNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21tb24vbW9kdWxlL2NvbmZpcm0vcW1zLWNrZWRpdG9yLWNvbmZpcm0uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yQmFzZUNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9xbXMtY2tlZGl0b3ItYmFzZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCcG1uQXBpU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9xbXMtY2tlZGl0b3ItYnBtbi1hcGkuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBCcG1uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9xbXMtY2tlZGl0b3ItYnBtbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNhdmVUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gXCIuL3NhdmUtdGVtcGxhdGUvc2F2ZS10ZW1wbGF0ZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgVGFyZ2V0VHlwZU5hbWUgfSBmcm9tICcuLi8uLi9jb21tb24vZW51bXMvdGFyZ2V0LXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUgfSBmcm9tICcuLi8uLi9jb21tb24vZW51bXMvc2hhcGUtZmxvdy1jaGFydC1jb25uZWN0aW9uLXR5cGUnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvclJlbGF0ZWRDb21wb25lbnQgfSBmcm9tICcuLi9xbXMtY2tlZGl0b3ItcmVsYXRpb24vcW1zY2tlZGl0b3ItcmVsYXRlZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMaW5rQXR0YWNobWVudENvbXBvbmVudCB9IGZyb20gJy4uL3Ftcy1ja2VkaXRvci1saW5rL2F0dGFjaG1lbnRzL2xpbmstYXR0YWNobWVudC5jb21wb25lbnQnO1xyXG5pbXBvcnQgUU1TQ0tFZGl0b3JQYXJhbXRlciBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1wYXJhbWV0ZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvclJlbGF0aW9uIH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItcmVsYXRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckJwbW5EYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Ftcy1ja2VkaXRvci1icG1uLWRhdGEubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckxpbmtTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLWxpbmsuc2VydmljZSc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9lbnVtcy9kb2N1bWVudC10eXBlLmVudW1cIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JMaW5rQW5jaG9yRG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItbGluay1hbmNob3ItZG9jdW1lbnQubW9kZWxcIjtcclxuaW1wb3J0IHsgTGlua0FuY2hvciB9IGZyb20gXCIuLi8uLi9jb21tb24vZW51bXMvbGluay1hbmNob3IuZW51bVwiO1xyXG5pbXBvcnQgeyBDS0VkaXRvckxpbmtDb25zdCB9IGZyb20gJy4uLy4uL2NvbW1vbi9jb25zdGFudHMvY2tlZGl0b3JMaW5rLmNvbnN0YW50JztcclxuaW1wb3J0IHsgTWF0VGFiQ2hhbmdlRXZlbnQgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvdGFic1wiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvclVwbG9hZFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLXVwbG9hZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IGJhc2U2NFN0cmluZ1RvRmlsZSB9IGZyb20gXCIuLi8uLi9jb21tb24vaGVscGVyL2ZpbGVIZWxwZXJcIjtcclxuXHJcbi8vVE9ETzogbW92ZSB0byBjb21tb24gZm9sZGVyXHJcbmludGVyZmFjZSBJVGFyZ2V0IHtcclxuICBpZDogc3RyaW5nO1xyXG4gIG5hbWU6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIElDb25uZWN0aW9uVHlwZSB7XHJcbiAgaWQ6IG51bWJlcjtcclxuICBuYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbi8vVE9ETzogbW92ZSB0byBjb21tb24gZm9sZGVyXHJcbmludGVyZmFjZSBJQW5jaG9yIHtcclxuICB2YWx1ZTogbnVtYmVyO1xyXG4gIHZpZXdWYWx1ZTogc3RyaW5nO1xyXG4gIGFuY2hvclZhbHVlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmNsYXNzIElMaW5rIHtcclxuICB0YXJnZXQ6IFRhcmdldFR5cGVOYW1lO1xyXG4gIHVybDogc3RyaW5nO1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgZG9jdW1lbnRUeXBlOiBRTVNDS0VkaXRvckRvY3VtZW50VHlwZTtcclxuICBpY29uOiBzdHJpbmc7XHJcbiAgY29udGVudDogc3RyaW5nO1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy50YXJnZXQgPSBUYXJnZXRUeXBlTmFtZS5uZXc7XHJcbiAgICB0aGlzLmRvY3VtZW50VHlwZSA9IFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLm90aGVyO1xyXG4gICAgdGhpcy51cmwgPSAnJztcclxuICAgIHRoaXMudGl0bGUgPSAnJztcclxuICAgIHRoaXMuaWNvbiA9ICcnO1xyXG4gICAgdGhpcy5jb250ZW50ID0gJyc7XHJcbiAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3Ftcy1icG1uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcW1zLWNrZWRpdG9yLWJwbW4uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Ftcy1ja2VkaXRvci1icG1uLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFFNU0NLRWRpdG9yQnBtbkNvbXBvbmVudCBleHRlbmRzIFFNU0NLRWRpdG9yQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgTEFORzogYW55O1xyXG4gIGpzb25Db250ZW50OiBzdHJpbmc7XHJcbiAgZXhwYW5kZWRQYW5lbCA9IHRydWU7XHJcbiAgaWQgPSAnJztcclxuICBtb2R1bGU6IG51bWJlcjtcclxuICBlbnRpdHlJZCA9ICcnO1xyXG4gIGVkaXRvckNvbnRlbnQgPSAnJztcclxuXHJcbiAgYnBtbjogUU1TQ0tFZGl0b3JCcG1uID0gbmV3IFFNU0NLRWRpdG9yQnBtbigpO1xyXG4gIGJwbW5UZW1sYXRlczogUU1TQ0tFZGl0b3JCcG1uVGVtcGxhdGVbXSA9IFtdO1xyXG5cclxuICBjb25uZWN0aW9uVHlwZTogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZTtcclxuICBzZWxlY3RlZENvbm5lY3Rpb25UeXBlOiBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlO1xyXG4gIHRhcmdldHM6IElUYXJnZXRbXSA9IFtdO1xyXG4gIGNvbm5lY3Rpb25UeXBlczogSUNvbm5lY3Rpb25UeXBlW10gPSBbXTtcclxuXHJcbiAgc2VsZWN0ZWRUYXJnZXQ6IFRhcmdldFR5cGVOYW1lID0gVGFyZ2V0VHlwZU5hbWUubmV3O1xyXG4gIGxpbmtVcmwgPSAnJztcclxuICBsaW5rVGl0bGUgPSAnJztcclxuICBhbmNob3JCeU5hbWUgPSAnJztcclxuICBsaW5rSWNvbiA9ICcnO1xyXG4gIGxpbmtJZDogc3RyaW5nID0gJyc7XHJcbiAgZG9jdW1lbnRUeXBlOiBRTVNDS0VkaXRvckRvY3VtZW50VHlwZSA9IFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLm90aGVyO1xyXG4gIGRvY3VtZW50SWNvbnM6IGFueTtcclxuXHJcbiAgbGluazogSUxpbms7XHJcbiAgZG9jdW1lbnRBbmNob3JzOiBJQW5jaG9yW107XHJcbiAgaXNMb2FkaW5nRG9jdW1lbnRBbmNob3I6IGJvb2xlYW47XHJcbiAgc2VsZWN0ZWRDZWxsVmlldzogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGJtcG5TZXJ2aWNlOiBCcG1uU2VydmljZSxcclxuICAgIHByaXZhdGUgYnBtbkFwaVNlcnZpY2U6IFFNU0NLRWRpdG9yQnBtbkFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxpbmtTZXJ2aWNlOiBRTVNDS0VkaXRvckxpbmtTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1cGxvYWRTZXJ2aWNlOiBRTVNDS0VkaXRvclVwbG9hZFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8UU1TQ0tFZGl0b3JCcG1uQ29tcG9uZW50PixcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogUU1TQ0tFZGl0b3JCcG1uRGF0YVxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuaWQgPSBkYXRhLmlkO1xyXG4gICAgdGhpcy5tb2R1bGUgPSBkYXRhLm1vZHVsZTtcclxuICAgIHRoaXMuZW50aXR5SWQgPSBkYXRhLmVudGl0eUlkO1xyXG4gICAgdGhpcy5lZGl0b3JDb250ZW50ID0gZGF0YS5lZGl0b3JDb250ZW50O1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93Om1lc3NhZ2UnLCBbJyRldmVudCddKVxyXG4gIG9uTWVzc2FnZShldmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmRhdGEgPT09IEZsb3dDaGFydENvbnN0LlNBVkVfQVNfVEVNUExBVEUpIHtcclxuICAgICAgdGhpcy5vblNhdmVBc1RlbXBsYXRlKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChldmVudC5kYXRhID09PSBGbG93Q2hhcnRDb25zdC5ERUxFVEVfVEVNUExBVEUpIHtcclxuICAgICAgdGhpcy5vbkRlbGV0ZVRlbXBsYXRlKHRoaXMuTEFORy5CUE1OLkRFTEVURV9URU1QTEFURSwgdGhpcy5MQU5HLlFNU0NLRURJVE9SX01FU1NBR0UuQ09ORklSTV9ERUxFVEVfVEVNUExBVEUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZXZlbnQuZGF0YSA9PT0gRmxvd0NoYXJ0Q29uc3QuTVVTVF9TRUxFQ1RfVEVNUExBVEUpIHtcclxuICAgICAgdGhpcy5zaG93Q29uZmlybURpYWxvZyh0aGlzLkxBTkcuQlBNTi5TRUxFQ1RfVEVNUExBVEUsIHRoaXMuTEFORy5CUE1OLlNFTEVDVF9URU1QTEFURV9JTkZPUk1BVElPTiwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChldmVudC5kYXRhID09PSBGbG93Q2hhcnRDb25zdC5DSEFOR0lOR19URU1QTEFURSkge1xyXG4gICAgICB0aGlzLm9uU2VsZWN0ZWRUZW1wbGF0ZSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZXZlbnQuZGF0YSA9PT0gRmxvd0NoYXJ0Q29uc3QuUkVTRVRfVEVNUExBVEUpIHtcclxuICAgICAgdGhpcy5vblJlc2V0VGVtcGxhdGUoKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGV2ZW50LmRhdGEgPT09IEZsb3dDaGFydENvbnN0LlNFTEVDVEVEX1NIQVBFX0lEKSB7XHJcbiAgICAgIHRoaXMub25TZWxldGVkQ2VsbFZpZXcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy50cmFuc2xhdGUuZ2V0TGFuZ3VhZ2VTdWJqZWN0JC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICB0aGlzLkxBTkcgPSB0aGlzLnRyYW5zbGF0ZS5nZXRPYmplY3RMYW5nKHJlcyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5icG1uVGVtbGF0ZXMgPSBhd2FpdCB0aGlzLmdldFRlbXBsYXRlcygpO1xyXG4gICAgaWYgKHRoaXMuaWQpIHtcclxuICAgICAgdGhpcy5qc29uQ29udGVudCA9IGF3YWl0IHRoaXMuZ2V0SnNvbkNvbnRlbnQodGhpcy5pZCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmJtcG5TZXJ2aWNlLmJ1aWxkRGlhZ3JhbShcclxuICAgICAgdGhpcy5icG1uVGVtbGF0ZXMsXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIENLRWRpdG9yRXZlbnRDb25zdC5RTVNDS19CUE1OLFxyXG4gICAgICB0aGlzLmpzb25Db250ZW50LFxyXG4gICAgICAxLFxyXG4gICAgICB0aGlzLkxBTkdcclxuICAgICk7XHJcbiAgICB0aGlzLmluaXREb2N1bWVudEljb25zKCk7XHJcbiAgICB0aGlzLmluaXRUYXJnZXQoKTtcclxuICAgIHRoaXMuaW5pdENvbm5lY3Rpb25UeXBlKCk7XHJcbiAgICB0aGlzLmluaXRMaW5rKCk7XHJcbiAgfVxyXG5cclxuICBpbml0VGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMudGFyZ2V0cykge1xyXG4gICAgICB0aGlzLnRhcmdldHMucHVzaCh7IGlkOiBUYXJnZXRUeXBlTmFtZS5uZXcsIG5hbWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5UQVJUR0VUX05FVyB9KTtcclxuICAgICAgdGhpcy50YXJnZXRzLnB1c2goeyBpZDogVGFyZ2V0VHlwZU5hbWUuc2FtZSwgbmFtZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLlRBUkdFVF9TQU1FIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdENvbm5lY3Rpb25UeXBlKCkge1xyXG4gICAgaWYgKHRoaXMuY29ubmVjdGlvblR5cGVzKSB7XHJcbiAgICAgIHRoaXMuY29ubmVjdGlvblR5cGVzLnB1c2goeyBpZDogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5Eb2N1bWVudE9yUHJvY2VzcywgbmFtZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLkRPQ1VNRU5UX1BST0NFU1MgfSk7XHJcbiAgICAgIHRoaXMuY29ubmVjdGlvblR5cGVzLnB1c2goeyBpZDogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BdHRhY2htZW50LCBuYW1lOiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQVRUQUNITUVOVCB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluaXREb2N1bWVudEljb25zKCkge1xyXG4gICAgdGhpcy5kb2N1bWVudEljb25zID0ge307XHJcbiAgICB0aGlzLmRvY3VtZW50SWNvbnNbUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUuZG9jdW1lbnRdID0gJ3RleHRfc25pcHBldCc7XHJcbiAgICB0aGlzLmRvY3VtZW50SWNvbnNbUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUucHJvY2Vzc10gPSAnYWNjb3VudF90cmVlJztcclxuICAgIHRoaXMuZG9jdW1lbnRJY29uc1tRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5hcmVhXSA9ICdmb2xkZXInO1xyXG4gICAgdGhpcy5kb2N1bWVudEljb25zW1FNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLmZvbGRlcl0gPSAnZm9sZGVyJztcclxuICAgIHRoaXMuZG9jdW1lbnRJY29uc1tRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5vdGhlcl0gPSAndGV4dF9zbmlwcGV0JztcclxuICB9XHJcblxyXG4gIGluaXRMaW5rKCkge1xyXG4gICAgdGhpcy5saW5rID0gbnVsbDtcclxuICAgIHRoaXMubGlua0lkID0gJyc7XHJcbiAgICB0aGlzLmRvY3VtZW50VHlwZSA9IFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLm90aGVyO1xyXG4gICAgdGhpcy5saW5rSWNvbiA9IHRoaXMuZG9jdW1lbnRJY29uc1tRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5vdGhlcl1cclxuICAgIHRoaXMuc2VsZWN0ZWRUYXJnZXQgPSBUYXJnZXRUeXBlTmFtZS5uZXc7XHJcbiAgICB0aGlzLmFuY2hvckJ5TmFtZSA9ICcnO1xyXG4gICAgdGhpcy5saW5rVGl0bGUgPSAnJztcclxuICAgIHRoaXMuZG9jdW1lbnRBbmNob3JzID0gW107XHJcbiAgfVxyXG5cclxuICBleHBhbmRQYW5lbCgpIHtcclxuICAgIHRoaXMuZXhwYW5kZWRQYW5lbCA9ICF0aGlzLmV4cGFuZGVkUGFuZWw7XHJcbiAgICBjb25zdCBwYW5lbFN0ZW5jaWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFuZWwtc3RlbmNpbC1jb250YWluZXInKTtcclxuICAgIGNvbnN0IHBhcGVyQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcGVycGFuZWwnKTtcclxuICAgIGNvbnN0IHN0ZW5jaWxDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RlbmNpbHBhbmVsJyk7XHJcbiAgICBpZiAocGFuZWxTdGVuY2lsKSB7XHJcbiAgICAgIGlmICghdGhpcy5leHBhbmRlZFBhbmVsKSB7XHJcbiAgICAgICAgc3RlbmNpbENvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnNTBweCc7XHJcbiAgICAgICAgcGFuZWxTdGVuY2lsLnN0eWxlLmhlaWdodCA9ICc1MHB4JztcclxuICAgICAgICBwYXBlckNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnNTAwcHgnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHN0ZW5jaWxDb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gJzE1MHB4JztcclxuICAgICAgICBwYW5lbFN0ZW5jaWwuc3R5bGUuaGVpZ2h0ID0gJzE1MHB4JztcclxuICAgICAgICBwYXBlckNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnNDAwcHgnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRUZW1wbGF0ZXMoKTogUHJvbWlzZTxRTVNDS0VkaXRvckJwbW5UZW1wbGF0ZVtdPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgdGhpcy5icG1uQXBpU2VydmljZVxyXG4gICAgICAgIC5icG1uR2V0VGVtcGxhdGVzKClcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0SnNvbkNvbnRlbnQoaWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgdGhpcy5icG1uQXBpU2VydmljZVxyXG4gICAgICAgIC5nZXRCcG1uQnlJZChpZClcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5qc29uQ29udGVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2F2ZUltYWdlQ29udGVudChncmFwaE9iamVjdCkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGpzb25Db250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZ3JhcGhPYmplY3QpO1xyXG4gICAgICB0aGlzLmJwbW4gPSB7XHJcbiAgICAgICAgaWQ6IHRoaXMuaWQgPyB0aGlzLmlkIDogZ3VpZEhlbHBlci5lbXB0eSxcclxuICAgICAgICBqc29uQ29udGVudDoganNvbkNvbnRlbnQsXHJcbiAgICAgICAgaXNUZW1wbGF0ZTogZmFsc2UsXHJcbiAgICAgICAgdGVtcGxhdGVOYW1lOiAnJ1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmJwbW5BcGlTZXJ2aWNlXHJcbiAgICAgICAgLmJwbW5Nb2RpZnlpbmcodGhpcy5icG1uKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRJbWFnZUNvbnRlbnQocGFwZXI6IGFueSkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIHBhcGVyLnRvUE5HKChpbWFnZURhdGEpID0+IHtcclxuICAgICAgICBjb25zdCBhcnJTdHJpbmcgPSBpbWFnZURhdGEuc3BsaXQoJywnKTtcclxuICAgICAgICByZXNvbHZlKGFyclN0cmluZ1sxXSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkluc2VydEltYWdlKCkge1xyXG4gICAgY29uc3QgZ3JhcGggPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuR1JBUEhdO1xyXG4gICAgY29uc3QgcGFwZXIgPSB3aW5kb3dbYHBhcGVyYF07XHJcbiAgICBjb25zdCBjbGllbnRSZWN0ID0gcGFwZXIucGFwZXJUb0xvY2FsUmVjdChwYXBlci5nZXRDb250ZW50QkJveCgpKTtcclxuICAgIGNvbnN0IGdyYXBoT2JqZWN0ID0gZ3JhcGgudG9KU09OKCk7XHJcbiAgICBjb25zdCBpZCA9IGF3YWl0IHRoaXMuc2F2ZUltYWdlQ29udGVudChncmFwaE9iamVjdCk7XHJcbiAgICBjb25zdCBpbWFnZUNvbnRlbnQgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcgKyBhd2FpdCB0aGlzLmdldEltYWdlQ29udGVudChwYXBlcik7XHJcbiAgICBjb25zdCBmaWxlID0gYmFzZTY0U3RyaW5nVG9GaWxlKGltYWdlQ29udGVudCwgYCR7Q0tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0JQTU59IyR7aWR9YCk7XHJcbiAgICBjb25zdCByZWxhdGl2ZVVybCA9IGF3YWl0IHRoaXMudXBsb2FkU2VydmljZS51cGxvYWRJbWFnZShmaWxlKS50b1Byb21pc2UoKTtcclxuICAgIGNvbnN0IGltYWdlbWFwID0gdGhpcy50b0ltYWdlTWFwKGlkLCBncmFwaE9iamVjdC5jZWxscywgY2xpZW50UmVjdCk7XHJcbiAgICBjb25zdCByZXN1bHQgPSB7IGtleTogYCR7Q0tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0JQTU59IyR7aWR9YCwgdmFsdWVzOiByZWxhdGl2ZVVybCwgaW1hZ2VtYXA6IGltYWdlbWFwIH1cclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHJlc3VsdCk7XHJcbiAgfVxyXG5cclxuICBvbkNsb3NlRGlhbG9nKCkge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUxpbmsoKSB7XHJcbiAgICBsZXQgdGl0bGUgPSB0aGlzLkxBTkcuQlBNTi5ERUxFVEVfQVRUQUNITUVOVDtcclxuICAgIGxldCBjb250ZW50ID0gdGhpcy5MQU5HLkJQTU4uQ09ORklSTV9ERUxFVEVfQVRUQUNITUVOVDtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkQ29ubmVjdGlvblR5cGUgPT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5Eb2N1bWVudE9yUHJvY2Vzcykge1xyXG4gICAgICB0aXRsZSA9IHRoaXMuTEFORy5CUE1OLkRFTEVURV9ET0NVTUVOVF9PUl9QUk9DRVNTO1xyXG4gICAgICBjb250ZW50ID0gdGhpcy5MQU5HLlFNU0NLRURJVE9SX01FU1NBR0UuQ09ORklSTV9ERUxFVEVfRE9DVU1FTlRfT1JfUFJPQ0VTUztcclxuICAgIH1cclxuICAgIHRoaXMuc2hvd0NvbmZpcm1EaWFsb2codGl0bGUsIGNvbnRlbnQsIGZhbHNlLCAodmFsdWUpID0+IHtcclxuICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09IHRydWUgfHwgKHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JyAmJiB2YWx1ZS5pc0NvbmZpcm1lZCA9PSB0cnVlKSkge1xyXG4gICAgICAgICAgdGhpcy5saW5rID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBvbkNvbm5lY3Rpb25UeXBlQ2hhbmdlKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbm5lY3Rpb25UeXBlID0gdGhpcy5jb25uZWN0aW9uVHlwZTtcclxuICAgIGlmICh0aGlzLmxpbmspIHtcclxuICAgICAgdGhpcy5zaG93Q29uZmlybURpYWxvZyh0aGlzLkxBTkcuUU1TQ0tFRElUT1IuSU5GT1JNQVRJT04sIHRoaXMuTEFORy5RTVNDS0VESVRPUl9NRVNTQUdFLkNPTkZJUk1fREVMRVRFX0VYSVNUSU5HX0NPTk5FQ1RJT04sIHRydWUsICgpID0+IHtcclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb25UeXBlID0gMDtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHN3aXRjaCAodGhpcy5jb25uZWN0aW9uVHlwZSkge1xyXG4gICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRG9jdW1lbnRPclByb2Nlc3M6XHJcbiAgICAgICAgdGhpcy5vcGVuSGFuZGJvb2tEaWFsb2coZmFsc2UpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQXR0YWNobWVudDpcclxuICAgICAgICB0aGlzLm9wZW5BdHRhY2htZW50RGlhbG9nKClcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQW5jaG9yQnlOYW1lQ2hhbmdlKCkge1xyXG4gICAgdGhpcy51cGRhdGVDZWxsVmlld1ZhbHVlcygpO1xyXG4gIH1cclxuXHJcbiAgb3BlbkhhbmRib29rRGlhbG9nKGlzT25seURvY3VtZW50OiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBkYXRhID0gbmV3IFFNU0NLRWRpdG9yUmVsYXRpb24oKTtcclxuICAgIGRhdGEuaXNPbmx5RG9jdW1lbnQgPSBpc09ubHlEb2N1bWVudDtcclxuICAgIGRhdGEuaXNFbmFibGVGb2xkZXIgPSAhaXNPbmx5RG9jdW1lbnQ7XHJcbiAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JSZWxhdGVkQ29tcG9uZW50LCB7XHJcbiAgICAgIHdpZHRoOiAnNjUwcHgnLFxyXG4gICAgICBoZWlnaHQ6ICc2NTBweCcsXHJcbiAgICAgIGRhdGEsXHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBkaWFsb2dUZW1wbGF0ZVxyXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICB0aGlzLmRvY3VtZW50VHlwZSA9IHJlc3VsdC50eXBlO1xyXG4gICAgICAgICAgdGhpcy5saW5rSWQgPSB0aGlzLmdldExpbmtJZChyZXN1bHQudXJsLCByZXN1bHQudHlwZSk7XHJcbiAgICAgICAgICBpZiAocmVzdWx0LnR5cGUgPT0gUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUuZG9jdW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5saW5rVGl0bGUgPSBgJHtyZXN1bHQudGl0bGV9KCR7cmVzdWx0LmlkfSlgO1xyXG4gICAgICAgICAgICB0aGlzLmdldEFuY2hvckRvY3VtZW50KHJlc3VsdC5pZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5saW5rVXJsID0gcmVzdWx0LnVybDtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmxpbmtUaXRsZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMubGlua1RpdGxlID0gcmVzdWx0LnRpdGxlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFyZ2V0ID0gVGFyZ2V0VHlwZU5hbWUubmV3O1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVDZWxsVmlld1ZhbHVlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb25UeXBlID0gMDtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvcGVuQXR0YWNobWVudERpYWxvZygpIHtcclxuICAgIGNvbnN0IGRhdGEgPSBuZXcgUU1TQ0tFZGl0b3JQYXJhbXRlcigpO1xyXG4gICAgZGF0YS5tb2R1bGUgPSB0aGlzLm1vZHVsZTtcclxuICAgIGRhdGEuZW50aXR5SWQgPSB0aGlzLmVudGl0eUlkO1xyXG4gICAgY29uc3QgZGlhbG9nVGVtcGxhdGUgPSB0aGlzLmRpYWxvZy5vcGVuKExpbmtBdHRhY2htZW50Q29tcG9uZW50LCB7XHJcbiAgICAgIHdpZHRoOiAnNjUwcHgnLFxyXG4gICAgICBoZWlnaHQ6ICc2NTBweCcsXHJcbiAgICAgIGRhdGEsXHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBkaWFsb2dUZW1wbGF0ZVxyXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICB0aGlzLmRvY3VtZW50VHlwZSA9IFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLm90aGVyO1xyXG4gICAgICAgICAgdGhpcy5saW5rVXJsID0gcmVzdWx0LnVybDtcclxuICAgICAgICAgIGlmICghdGhpcy5saW5rVGl0bGUpIHtcclxuICAgICAgICAgICAgdGhpcy5saW5rVGl0bGUgPSByZXN1bHQudGl0bGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFyZ2V0ID0gVGFyZ2V0VHlwZU5hbWUubmV3O1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVDZWxsVmlld1ZhbHVlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb25UeXBlID0gMDtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRBbmNob3JEb2N1bWVudChkb2N1bWVudElkKSB7XHJcbiAgICB0aGlzLmlzTG9hZGluZ0RvY3VtZW50QW5jaG9yID0gdHJ1ZTtcclxuICAgIHRoaXMubGlua1NlcnZpY2VcclxuICAgICAgLmdldEFuY2hvckRvY3VtZW50TGlzdChkb2N1bWVudElkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAuc3Vic2NyaWJlKChkb2N1bWVudHMpID0+IHtcclxuICAgICAgICB0aGlzLmRvY3VtZW50QW5jaG9ycyA9IHRoaXMuZXh0cmFjdERvY3VtZW50QW5jaG9ycyhkb2N1bWVudHMgfHwgW10pO1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nRG9jdW1lbnRBbmNob3IgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBleHRyYWN0RG9jdW1lbnRBbmNob3JzKGFuY2hvckRvY3VtZW50OiBRTVNDS0VkaXRvckxpbmtBbmNob3JEb2N1bWVudFtdKSB7XHJcbiAgICBjb25zdCBhbmNob3JzOiBJQW5jaG9yW10gPSBbeyB2YWx1ZTogMCwgdmlld1ZhbHVlOiAnJywgYW5jaG9yVmFsdWU6IExpbmtBbmNob3IuQmxhbmsgfV07XHJcbiAgICBsZXQgaWQgPSAzO1xyXG4gICAgaWYgKGFuY2hvckRvY3VtZW50KSB7XHJcbiAgICAgIGFuY2hvckRvY3VtZW50LmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICBkaXYuaW5uZXJIVE1MID0gZS5yaWNoVGV4dDtcclxuICAgICAgICBjb25zdCBkb21Db250ZW50ID0gZGl2O1xyXG4gICAgICAgIGNvbnN0IGFUYWdzID0gZG9tQ29udGVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYScpO1xyXG4gICAgICAgIGlmIChhVGFncykge1xyXG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYVRhZ3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgdGFnID0gYVRhZ3NbaV07XHJcbiAgICAgICAgICAgIGlmICh0YWcubmFtZSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gYW5jaG9ycy5maW5kSW5kZXgoKHgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB4LmFuY2hvclZhbHVlID09PSB0YWcubmFtZTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBhbmNob3JzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogaWQsXHJcbiAgICAgICAgICAgICAgICAgIHZpZXdWYWx1ZTogdGFnLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgIGFuY2hvclZhbHVlOiB0YWcubmFtZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpZCArPSAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBhbmNob3JzLnB1c2goe1xyXG4gICAgICB2YWx1ZTogMSxcclxuICAgICAgdmlld1ZhbHVlOiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQU5DSE9SX0FUVEFDSE1FTlQsXHJcbiAgICAgIGFuY2hvclZhbHVlOiBMaW5rQW5jaG9yLkF0dGFjaG1lbnRcclxuICAgIH0pO1xyXG4gICAgYW5jaG9ycy5wdXNoKHtcclxuICAgICAgdmFsdWU6IDIsXHJcbiAgICAgIHZpZXdWYWx1ZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLkFOQ0hPUl9SRUxBVEVEX0RPQ1VNRU5ULFxyXG4gICAgICBhbmNob3JWYWx1ZTogTGlua0FuY2hvci5SZWxhdGVkXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBhbmNob3JzO1xyXG4gIH1cclxuXHJcbiAgcmVsb2FkQW5jaG9ycygpIHtcclxuICAgIGlmICghIXRoaXMubGlua0lkICYmIHRoaXMuZG9jdW1lbnRUeXBlID09IFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLmRvY3VtZW50KSB7XHJcbiAgICAgIHRoaXMuZ2V0QW5jaG9yRG9jdW1lbnQodGhpcy5saW5rSWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYnVpbGRMaW5rKCkge1xyXG4gICAgY29uc3QgbGluayA9IG5ldyBJTGluaygpO1xyXG4gICAgbGluay50YXJnZXQgPSB0aGlzLnNlbGVjdGVkVGFyZ2V0O1xyXG4gICAgbGluay50aXRsZSA9IHRoaXMubGlua1RpdGxlO1xyXG4gICAgbGluay51cmwgPSB0aGlzLmxpbmtVcmw7XHJcbiAgICBsaW5rLmRvY3VtZW50VHlwZSA9IHRoaXMuZG9jdW1lbnRUeXBlIHx8IFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLm90aGVyO1xyXG4gICAgbGluay5pY29uID0gdGhpcy5kb2N1bWVudEljb25zW2xpbmsuZG9jdW1lbnRUeXBlXTtcclxuICAgIGxpbmsuY29udGVudCA9ICcnO1xyXG4gICAgc3dpdGNoICh0aGlzLmRvY3VtZW50VHlwZSkge1xyXG4gICAgICBjYXNlIFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLmRvY3VtZW50OlxyXG4gICAgICAgIGxpbmsudXJsID0gYCR7Q0tFZGl0b3JMaW5rQ29uc3QuRE9DVU1FTlRfUEFSVElBTF9VUkx9JHt0aGlzLmxpbmtJZH0jJHt0aGlzLmFuY2hvckJ5TmFtZX1gO1xyXG4gICAgICAgIGxpbmsuY29udGVudCA9IGAke3RoaXMuTEFORy5RTVNDS0VESVRPUi5JRH06ICR7dGhpcy5saW5rSWR9YDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5wcm9jZXNzOlxyXG4gICAgICAgIGxpbmsuY29udGVudCA9IGAke3RoaXMuTEFORy5RTVNDS0VESVRPUi5JRH06ICR7dGhpcy5saW5rSWR9YDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5hcmVhOlxyXG4gICAgICAgIGxpbmsuY29udGVudCA9IGAke3RoaXMuTEFORy5RTVNDS0VESVRPUi5JRH06ICR7dGhpcy5saW5rSWR9YDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5mb2xkZXI6XHJcbiAgICAgICAgbGluay5jb250ZW50ID0gYCR7dGhpcy5MQU5HLlFNU0NLRURJVE9SLklEfTogJHt0aGlzLmxpbmtJZH1gO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxpbms7XHJcbiAgfVxyXG5cclxuICBvblNhdmVBc1RlbXBsYXRlKCkge1xyXG4gICAgY29uc3QgZ3JhcGggPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuR1JBUEhdO1xyXG4gICAgY29uc3QganNvbkNvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShncmFwaC50b0pTT04oKSk7XHJcbiAgICBsZXQgdGVtcGxhdGUgPSBuZXcgUU1TQ0tFZGl0b3JCcG1uKCk7XHJcbiAgICB0ZW1wbGF0ZSA9IHtcclxuICAgICAgaWQ6IGd1aWRIZWxwZXIuZW1wdHksXHJcbiAgICAgIGpzb25Db250ZW50OiBqc29uQ29udGVudCxcclxuICAgICAgaXNUZW1wbGF0ZTogdHJ1ZSxcclxuICAgICAgdGVtcGxhdGVOYW1lOiAnJ1xyXG4gICAgfVxyXG4gICAgbGV0IGRhdGEgPSBuZXcgUU1TQ0tFZGl0b3JTYXZlQXNUZW1wbGF0ZSgpO1xyXG4gICAgZGF0YS50ZW1wbGF0ZVR5cGUgPSBDS0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQlBNTjtcclxuICAgIGRhdGEuYnBtbiA9IHRlbXBsYXRlO1xyXG4gICAgY29uc3QgZGlhbG9nVGVtcGxhdGUgPSB0aGlzLmRpYWxvZy5vcGVuKFNhdmVUZW1wbGF0ZUNvbXBvbmVudCwge1xyXG4gICAgICB3aWR0aDogJzQ1MHB4JyxcclxuICAgICAgaGVpZ2h0OiAnMjIwcHgnLFxyXG4gICAgICBkYXRhLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcclxuICAgIH0pO1xyXG4gICAgZGlhbG9nVGVtcGxhdGVcclxuICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgLy8gVERPXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0ZWRUZW1wbGF0ZSgpIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkSnNvbkNvbnRlbnQgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfSlNPTl9DT05URU5UXTtcclxuICAgIGlmIChzZWxlY3RlZEpzb25Db250ZW50KSB7XHJcbiAgICAgIGNvbnN0IGdyYXBoID0gd2luZG93W0Zsb3dDaGFydENvbnN0LkdSQVBIXTtcclxuICAgICAgaWYgKGdyYXBoKSB7XHJcbiAgICAgICAgZ3JhcGguZnJvbUpTT04oSlNPTi5wYXJzZShzZWxlY3RlZEpzb25Db250ZW50KSk7XHJcbiAgICAgIH1cclxuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10gPSBudWxsO1xyXG4gICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfU0hBUEVfSURdID0gJyc7XHJcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9UWVBFXSA9ICcnO1xyXG4gICAgICB0aGlzLm9uU2VsZXRlZENlbGxWaWV3KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkRlbGV0ZVRlbXBsYXRlKHRpdGxlOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgZGF0YTogUU1TQ0tFZGl0b3JEaWFsb2dEYXRhID0gbmV3IFFNU0NLRWRpdG9yRGlhbG9nRGF0YSgpO1xyXG4gICAgZGF0YS50aXRsZSA9IHRpdGxlO1xyXG4gICAgZGF0YS5jb250ZW50ID0gY29udGVudDtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JDb25maXJtQ29tcG9uZW50LCB7XHJcbiAgICAgIHdpZHRoOiAnNTAwcHgnLFxyXG4gICAgICBtaW5IZWlnaHQ6ICcxNzVweCcsXHJcbiAgICAgIGRhdGFcclxuICAgIH0pO1xyXG4gICAgZGlhbG9nUmVmXHJcbiAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQpIHtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uU2VsZXRlZENlbGxWaWV3KCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZENlbGxWaWV3ID0gd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV107XHJcbiAgICB0aGlzLmluaXRMaW5rKCk7XHJcbiAgICBpZiAoISF0aGlzLnNlbGVjdGVkQ2VsbFZpZXcpIHtcclxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHRoaXMuc2VsZWN0ZWRDZWxsVmlldy5tb2RlbC5hdHRyaWJ1dGVzO1xyXG4gICAgICBjb25zdCBleGNsdWRlZFR5cGVzID0gWydicG1uMi5GbG93JywgJ2JwbW4yLkhlYWRlcmVkUG9vbCcsICdicG1uMi5Db252ZXJzYXRpb25MaW5rJywgJ2JwbW4yLkFubm90YXRpb25MaW5rJywgJ2JwbW4yLkRhdGFBc3NvY2lhdGlvbiddO1xyXG4gICAgICBpZiAoIWF0dHJpYnV0ZXMudHlwZSB8fCBleGNsdWRlZFR5cGVzLmZpbmRJbmRleCh0eXBlID0+IHR5cGUudG9Mb3dlckNhc2UoKSA9PSBhdHRyaWJ1dGVzLnR5cGUudG9Mb3dlckNhc2UoKSkgPiAtMSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDZWxsVmlldyA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5saW5rVXJsID0gYXR0cmlidXRlcy5saW5rVXJsIHx8ICcnO1xyXG4gICAgICAgIGlmICghIXRoaXMubGlua1VybCkge1xyXG4gICAgICAgICAgdGhpcy5wYXJzZUxpbmtVcmwodGhpcy5saW5rVXJsKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYXJnZXQgPSBhdHRyaWJ1dGVzLmxpbmtUYXJnZXQ7XHJcbiAgICAgICAgICB0aGlzLmxpbmtUaXRsZSA9IGF0dHJpYnV0ZXMubGlua1RpdGxlO1xyXG4gICAgICAgICAgdGhpcy5saW5rID0gdGhpcy5idWlsZExpbmsoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uVGFiQ2hhbmdlKCRldmVudDogTWF0VGFiQ2hhbmdlRXZlbnQpIHtcclxuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5UQUJfTkFNRV0gPSAkZXZlbnQudGFiLnRleHRMYWJlbDtcclxuICAgIGlmICgkZXZlbnQudGFiLnRleHRMYWJlbCA9PSB0aGlzLkxBTkcuQlBNTi5QUk9QRVJUSUVTKSB7XHJcbiAgICAgIHRoaXMuYm1wblNlcnZpY2Uub3BlblNoYXBlRnVuY3Rpb25hbGl0eSh0aGlzLkxBTkcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcGFyc2VMaW5rVXJsKHVybDogc3RyaW5nKSB7XHJcbiAgICBpZiAoISF1cmwpIHtcclxuICAgICAgY29uc3QgaGFzaEluZGV4ID0gdXJsLmluZGV4T2YoJyMnKTtcclxuICAgICAgdGhpcy5kb2N1bWVudFR5cGUgPSB0aGlzLmdldERvY3VtZW50VHlwZSh1cmwpO1xyXG4gICAgICB0aGlzLmxpbmtJY29uID0gdGhpcy5kb2N1bWVudEljb25zW3RoaXMuZG9jdW1lbnRUeXBlXTtcclxuICAgICAgdGhpcy5saW5rSWQgPSB0aGlzLmdldExpbmtJZCh1cmwsIHRoaXMuZG9jdW1lbnRUeXBlKTtcclxuICAgICAgaWYgKCEhdGhpcy5saW5rSWQgJiYgdGhpcy5kb2N1bWVudFR5cGUgPT0gUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUuZG9jdW1lbnQgJiYgaGFzaEluZGV4ID4gLTEpIHtcclxuICAgICAgICB0aGlzLmFuY2hvckJ5TmFtZSA9IHVybC5zdWJzdHIoaGFzaEluZGV4ICsgMSwgdXJsLmxlbmd0aCAtIGhhc2hJbmRleCk7XHJcbiAgICAgICAgdGhpcy5nZXRBbmNob3JEb2N1bWVudCh0aGlzLmxpbmtJZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFBhcnRpYWxVcmwodHlwZTogUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLmRvY3VtZW50OlxyXG4gICAgICAgIHJldHVybiBDS0VkaXRvckxpbmtDb25zdC5ET0NVTUVOVF9QQVJUSUFMX1VSTDtcclxuICAgICAgY2FzZSBRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5wcm9jZXNzOlxyXG4gICAgICAgIHJldHVybiBDS0VkaXRvckxpbmtDb25zdC5QUk9DRVNTX1BBUlRJQUxfVVJMO1xyXG4gICAgICBjYXNlIFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLmFyZWE6XHJcbiAgICAgICAgcmV0dXJuIENLRWRpdG9yTGlua0NvbnN0LkFSRUFfUEFSVElBTF9VUkw7XHJcbiAgICAgIGNhc2UgUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUuZm9sZGVyOlxyXG4gICAgICAgIHJldHVybiBDS0VkaXRvckxpbmtDb25zdC5GT0xERVJfUEFSVElBTF9VUkw7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0TGlua0lkKHVybDogc3RyaW5nLCB0eXBlOiBRTVNDS0VkaXRvckRvY3VtZW50VHlwZSkge1xyXG4gICAgbGV0IHBhcnRpYWxVcmxJbmRleCA9IDA7XHJcbiAgICBsZXQgcGFydGlhbFVybExlbmd0aCA9IDA7XHJcbiAgICBsZXQgaWQgPSAnJztcclxuICAgIGxldCBmcm9tID0gMDtcclxuICAgIGxldCB1cmxMb3dlckNhc2UgPSAhIXVybCA/IHVybC50b0xvd2VyQ2FzZSgpIDogJyc7XHJcblxyXG4gICAgY29uc3QgcGFydGlhbFVybCA9IHRoaXMuZ2V0UGFydGlhbFVybCh0eXBlKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgY29uc3QgaGFzaEluZGV4ID0gdXJsTG93ZXJDYXNlLmluZGV4T2YoJyMnKTtcclxuXHJcbiAgICBpZiAoISFwYXJ0aWFsVXJsKSB7XHJcbiAgICAgIHBhcnRpYWxVcmxJbmRleCA9IHVybExvd2VyQ2FzZS5pbmRleE9mKHBhcnRpYWxVcmwpO1xyXG5cclxuICAgICAgcGFydGlhbFVybExlbmd0aCA9IHBhcnRpYWxVcmwubGVuZ3RoO1xyXG4gICAgICBmcm9tID0gcGFydGlhbFVybEluZGV4ICsgcGFydGlhbFVybExlbmd0aDtcclxuXHJcbiAgICAgIGlmICh0eXBlID09IFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLmRvY3VtZW50ICYmIGhhc2hJbmRleCA+IC0xKSB7XHJcbiAgICAgICAgaWQgPSB1cmxMb3dlckNhc2Uuc3Vic3RyKGZyb20sIGhhc2hJbmRleCAtIGZyb20pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHVybExvd2VyQ2FzZS5zdWJzdHIoZnJvbSkuaW5kZXhPZignLycpO1xyXG4gICAgICAgIGlmIChsZW5ndGggPCAwKSB7XHJcbiAgICAgICAgICBpZCA9IHVybExvd2VyQ2FzZS5zdWJzdHIoZnJvbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWQgPSB1cmxMb3dlckNhc2Uuc3Vic3RyKGZyb20sIGxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGUgPT0gUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUuZG9jdW1lbnQpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBwYXJzZUludChpZCwgMTApO1xyXG4gICAgICB9XHJcbiAgICAgIGNhdGNoIHtcclxuICAgICAgICBpZCA9ICcnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaWQ7XHJcbiAgfVxyXG5cclxuICBnZXREb2N1bWVudFR5cGUodXJsOiBzdHJpbmcpIHtcclxuICAgIGlmICh1cmwuaW5kZXhPZihDS0VkaXRvckxpbmtDb25zdC5ET0NVTUVOVF9QQVJUSUFMX1VSTCkgPiAtMSkge1xyXG4gICAgICByZXR1cm4gUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUuZG9jdW1lbnQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh1cmwuaW5kZXhPZihDS0VkaXRvckxpbmtDb25zdC5QUk9DRVNTX1BBUlRJQUxfVVJMKSA+IC0xKSB7XHJcbiAgICAgIHJldHVybiBRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5wcm9jZXNzO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodXJsLmluZGV4T2YoQ0tFZGl0b3JMaW5rQ29uc3QuQVJFQV9QQVJUSUFMX1VSTCkgPiAtMSkge1xyXG4gICAgICByZXR1cm4gUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUuYXJlYTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHVybC5pbmRleE9mKENLRWRpdG9yTGlua0NvbnN0LkZPTERFUl9QQVJUSUFMX1VSTCkgPiAtMSkge1xyXG4gICAgICByZXR1cm4gUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUuZm9sZGVyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLm90aGVyO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQ2VsbFZpZXdWYWx1ZXMoKSB7XHJcbiAgICBpZiAoISF0aGlzLnNlbGVjdGVkQ2VsbFZpZXcpIHtcclxuICAgICAgdGhpcy5saW5rID0gdGhpcy5idWlsZExpbmsoKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZENlbGxWaWV3Lm1vZGVsLnByb3AoJ2xpbmtVcmwnLCB0aGlzLmxpbmsudXJsKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZENlbGxWaWV3Lm1vZGVsLnByb3AoJ2xpbmtUYXJnZXQnLCB0aGlzLmxpbmsudGFyZ2V0KTtcclxuICAgICAgdGhpcy5zZWxlY3RlZENlbGxWaWV3Lm1vZGVsLnByb3AoJ2xpbmtUaXRsZScsIHRoaXMubGluay50aXRsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblJlc2V0VGVtcGxhdGUoKSB7XHJcbiAgICBjb25zdCBvZ3JKc29uQ29udGVudCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5PUkdfSlNPTkNPTlRFTlRdO1xyXG4gICAgaWYgKG9nckpzb25Db250ZW50KSB7XHJcbiAgICAgIGNvbnN0IGdyYXBoID0gd2luZG93W0Zsb3dDaGFydENvbnN0LkdSQVBIXTtcclxuICAgICAgaWYgKGdyYXBoKSB7XHJcbiAgICAgICAgZ3JhcGguZnJvbUpTT04oSlNPTi5wYXJzZShvZ3JKc29uQ29udGVudCkpO1xyXG4gICAgICAgIHRoaXMuYm1wblNlcnZpY2Uuc2V0RGVmYXVsdFNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuSVNfU0VMRUNURURfVEVNUExBVEVdID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10gPSBudWxsO1xyXG4gICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfU0hBUEVfSURdID0gJyc7XHJcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9UWVBFXSA9ICcnO1xyXG4gICAgICB0aGlzLm9uU2VsZXRlZENlbGxWaWV3KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93Q29uZmlybURpYWxvZyh0aXRsZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIGlzTWVzc2FnZTogYm9vbGVhbiwgY2FsbGJhY2s/OiAocmVzdWx0PzogYW55KSA9PiB2b2lkKSB7XHJcbiAgICBjb25zdCBkYXRhOiBRTVNDS0VkaXRvckRpYWxvZ0RhdGEgPSBuZXcgUU1TQ0tFZGl0b3JEaWFsb2dEYXRhKCk7XHJcbiAgICBkYXRhLnRpdGxlID0gdGl0bGU7XHJcbiAgICBkYXRhLmNvbnRlbnQgPSBjb250ZW50O1xyXG4gICAgZGF0YS5pc01lc3NhZ2UgPSBpc01lc3NhZ2U7XHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFFNU0NLRWRpdG9yQ29uZmlybUNvbXBvbmVudCwge1xyXG4gICAgICB3aWR0aDogJzUwMHB4JyxcclxuICAgICAgbWluSGVpZ2h0OiAnMTc1cHgnLFxyXG4gICAgICBkYXRhXHJcbiAgICB9KTtcclxuICAgIGRpYWxvZ1JlZlxyXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHRvSW1hZ2VNYXAoaWQ6IGFueSwgY2VsbHM6IGFueVtdLCBjbGllbnRSZWN0OiBhbnkpIHtcclxuICAgIGNvbnN0IG1hcCA9IHsgbmFtZTogaWQsIGlkOiBpZCwgYXJlYXM6IFtdLCBpbWFnZUhlaWdodDogMCwgaW1hZ2VXaWR0aDogMCB9O1xyXG4gICAgbWFwLmltYWdlSGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQ7XHJcbiAgICBtYXAuaW1hZ2VXaWR0aCA9IGNsaWVudFJlY3Qud2lkdGg7XHJcbiAgICBpZiAoY2VsbHMgJiYgY2VsbHMubGVuZ3RoICE9IDApIHtcclxuICAgICAgdmFyIGlzVmVydGljYWxQb29sID0gZmFsc2U7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgc2hhcGUgPSBjZWxsc1tpXTtcclxuICAgICAgICBsZXQgc2l6ZSA9IHNoYXBlWydzaXplJ10gfHwgeyB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XHJcbiAgICAgICAgbGV0IGJib3ggPSBzaGFwZVsnYmJveCddIHx8IHsgeDogMCwgeTogMCB9O1xyXG4gICAgICAgIGxldCBwb3NpdGlvbiA9IHNoYXBlWydwb3NpdGlvbiddIHx8IHsgeDogMCwgeTogMCB9O1xyXG4gICAgICAgIGJib3gueCA9IHBvc2l0aW9uLng7XHJcbiAgICAgICAgYmJveC55ID0gcG9zaXRpb24ueTtcclxuICAgICAgICBiYm94LndpZHRoID0gc2l6ZS53aWR0aDtcclxuICAgICAgICBiYm94LmhlaWdodCA9IHNpemUuaGVpZ2h0O1xyXG4gICAgICAgIHNoYXBlWydiYm94J10gPSBiYm94O1xyXG4gICAgICAgIHNoYXBlWydhZGRpdGlvbmFsV2lkdGgnXSA9IChiYm94LndpZHRoID4gc2l6ZS53aWR0aCkgPyAoYmJveC53aWR0aCAtIHNpemUud2lkdGgpIDogMDtcclxuICAgICAgfVxyXG4gICAgICB2YXIgb2Zmc2V0WCA9IHRoaXMuZ2V0TWluWE9mZnNldChjZWxscyk7XHJcbiAgICAgIHZhciBvZmZzZXRZID0gdGhpcy5nZXRNaW5ZT2Zmc2V0KGNlbGxzKTtcclxuXHJcbiAgICAgIHZhciBhZGRpdGlvbmFsT2Zmc2V0WSA9IDA7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgc2hhcGUgPSBjZWxsc1tpXTtcclxuICAgICAgICBsZXQgaHJlZiA9IHNoYXBlLmxpbmtVcmw7XHJcbiAgICAgICAgbGV0IHRhcmdldCA9IHNoYXBlLmxpbmtUYXJnZXQ7XHJcbiAgICAgICAgbGV0IGFsdCA9IHNoYXBlLmxpbmtUaXRsZTtcclxuXHJcbiAgICAgICAgaWYgKHNoYXBlLnR5cGUgPT0gJ2JwbW4yLlBvb2wnIHx8IHNoYXBlLnR5cGUgPT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcclxuICAgICAgICAgIGFkZGl0aW9uYWxPZmZzZXRZID0gKHNoYXBlLmFkZGl0aW9uYWxXaWR0aCAvIDIpO1xyXG4gICAgICAgICAgaXNWZXJ0aWNhbFBvb2wgPSAoc2hhcGUudHlwZSA9PSAnYnBtbjIuUG9vbCcgfHwgc2hhcGUudHlwZSA9PSAnYnBtbjIuSGVhZGVyZWRQb29sJykgJiYgc2hhcGUuYW5nbGUgIT0gMCA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCEhaHJlZiAmJiBocmVmLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHZhciBzaXplID0gc2hhcGVbJ3NpemUnXSB8fCB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcclxuICAgICAgICAgIHZhciBiYm94ID0gc2hhcGVbJ2Jib3gnXSB8fCB7IHg6IDAsIHk6IDAgfTtcclxuICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHNoYXBlWydwb3NpdGlvbiddIHx8IHsgeDogMCwgeTogMCB9O1xyXG4gICAgICAgICAgYmJveC54ID0gcG9zaXRpb24ueDtcclxuICAgICAgICAgIGJib3gueSA9IHBvc2l0aW9uLnk7XHJcbiAgICAgICAgICBiYm94LndpZHRoID0gc2l6ZS53aWR0aDtcclxuICAgICAgICAgIGJib3guaGVpZ2h0ID0gc2l6ZS5oZWlnaHQ7XHJcbiAgICAgICAgICB2YXIgYWRkaXRpb25hbE9mZnNldFggPSAoc2hhcGUuYWRkaXRpb25hbFdpZHRoIC8gMik7XHJcblxyXG4gICAgICAgICAgdmFyIHgxLCB5MSwgeDIsIHkyO1xyXG5cclxuICAgICAgICAgIGlmIChzaGFwZS5pbmNsdWRlVGV4dEluQ2xpY2thYmxlQXJlYSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHgxID0gKGJib3gueCAtIG9mZnNldFggLSBhZGRpdGlvbmFsT2Zmc2V0WCk7XHJcbiAgICAgICAgICAgIHkxID0gKGJib3gueSAtIG9mZnNldFkpO1xyXG4gICAgICAgICAgICB4MiA9ICh4MSArIHNoYXBlLmJib3gud2lkdGggLSAxKTtcclxuICAgICAgICAgICAgeTIgPSAoeTEgKyBzaGFwZS5iYm94LmhlaWdodCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgdHJhbnNmb3JtWCA9IG9mZnNldFgsIHRyYW5zZm9ybVkgPSBvZmZzZXRZO1xyXG4gICAgICAgICAgICBpZiAob2Zmc2V0WCA8IDAgJiYgaXNWZXJ0aWNhbFBvb2wpIHtcclxuICAgICAgICAgICAgICB0cmFuc2Zvcm1YID0gb2Zmc2V0WCArIHNpemUuaGVpZ2h0O1xyXG4gICAgICAgICAgICAgIHRyYW5zZm9ybVkgPSBvZmZzZXRZIC0gc2l6ZS5oZWlnaHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG9mZnNldFkgPCAwICYmIGlzVmVydGljYWxQb29sKSB7XHJcbiAgICAgICAgICAgICAgdHJhbnNmb3JtWSA9IG9mZnNldFkgKyBhZGRpdGlvbmFsT2Zmc2V0WTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB4MSA9IChiYm94LnggLSB0cmFuc2Zvcm1YKTtcclxuICAgICAgICAgICAgeTEgPSAoYmJveC55IC0gdHJhbnNmb3JtWSk7XHJcbiAgICAgICAgICAgIHgyID0gKHgxICsgc2l6ZS53aWR0aCAtIDEpO1xyXG4gICAgICAgICAgICB5MiA9ICh5MSArIHNpemUuaGVpZ2h0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBjb29yZHMgPSBgJHt4MX0sJHt5MX0sJHt4Mn0sJHt5Mn1gO1xyXG4gICAgICAgICAgc3dpdGNoIChzaGFwZS50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JwbW4yLkFjdGl2aXR5JzpcclxuICAgICAgICAgICAgY2FzZSAnYnBtbjIuR2F0ZXdheSc6XHJcbiAgICAgICAgICAgIGNhc2UgJ2JwbW4yLkV2ZW50JzpcclxuICAgICAgICAgICAgY2FzZSAnYnBtbjIuQ29udmVyc2F0aW9uJzpcclxuICAgICAgICAgICAgY2FzZSAnYnBtbjIuRGF0YU9iamVjdCc6XHJcbiAgICAgICAgICAgIGNhc2UgJ2JwbW4yLkRhdGFTdG9yZSc6XHJcbiAgICAgICAgICAgIGNhc2UgJ2JwbW4uQ2hvcmVvZ3JhcGh5JzpcclxuICAgICAgICAgICAgY2FzZSAnYnBtbi5NZXNzYWdlJzpcclxuICAgICAgICAgICAgICBtYXAuYXJlYXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBzaGFwZTogJ3JlY3QnLFxyXG4gICAgICAgICAgICAgICAgY29vcmRzOiBjb29yZHMsXHJcbiAgICAgICAgICAgICAgICBocmVmOiBocmVmLFxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICBhbHQ6IGFsdFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIG1hcC5hcmVhcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHNoYXBlOiAncmVjdCcsXHJcbiAgICAgICAgICAgICAgICBjb29yZHM6IGNvb3JkcyxcclxuICAgICAgICAgICAgICAgIGhyZWY6IGhyZWYsXHJcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcclxuICAgICAgICAgICAgICAgIGFsdDogYWx0XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWFwO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWluWE9mZnNldChzaGFwZXMpIHtcclxuICAgIHZhciBmaWx0ZXJTaGFwZXMgPSBzaGFwZXMuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XHJcbiAgICAgIHJldHVybiBzLnR5cGUgIT09ICdicG1uMi5GbG93J1xyXG4gICAgICAgICYmIHMudHlwZSAhPSAnYnBtbjIuQ29udmVyc2F0aW9uTGluaydcclxuICAgICAgICAmJiBzLnR5cGUgIT0gJ2JwbW4yLkRhdGFBc3NvY2lhdGlvbidcclxuICAgICAgICAmJiBzLnR5cGUgIT0gJ2JwbW4yLkFubm90YXRpb25MaW5rJ1xyXG4gICAgfSk7XHJcblxyXG4gICAgdmFyIG1pblZhbHVlO1xyXG4gICAgdmFyIG1pbk9iamVjdDtcclxuXHJcbiAgICBpZiAoIWZpbHRlclNoYXBlcyB8fCAhZmlsdGVyU2hhcGVzLmxlbmd0aCkge1xyXG4gICAgICBtaW5WYWx1ZSA9IHRoaXMuZ2V0WFBvc2l0aW9uKHNoYXBlc1swXSk7XHJcbiAgICAgIG1pbk9iamVjdCA9IHNoYXBlc1swXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG1pblZhbHVlID0gdGhpcy5nZXRYUG9zaXRpb24oZmlsdGVyU2hhcGVzWzBdKTtcclxuICAgICAgbWluT2JqZWN0ID0gZmlsdGVyU2hhcGVzWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgZmlsdGVyU2hhcGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHZhciB4UG9zaXRpb24gPSB0aGlzLmdldFhQb3NpdGlvbihmaWx0ZXJTaGFwZXNbaV0pO1xyXG4gICAgICBpZiAoeFBvc2l0aW9uIDwgbWluVmFsdWUpIHtcclxuICAgICAgICBtaW5WYWx1ZSA9IHhQb3NpdGlvbjtcclxuICAgICAgICBtaW5PYmplY3QgPSBmaWx0ZXJTaGFwZXNbaV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgcmV0dXJuIG1pblZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0WFBvc2l0aW9uKHNoYXBlKSB7XHJcbiAgICByZXR1cm4gc2hhcGUuYmJveC54IC0gKHNoYXBlLmFkZGl0aW9uYWxXaWR0aCAvIDIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0WVBvc2l0aW9uKHNoYXBlKSB7XHJcbiAgICByZXR1cm4gc2hhcGUuYmJveC55IC0gKHNoYXBlLmFkZGl0aW9uYWxXaWR0aCAvIDIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWluWU9mZnNldChzaGFwZXMpIHtcclxuICAgIHZhciBmaWx0ZXJTaGFwZXMgPSBzaGFwZXMuZmlsdGVyKGZ1bmN0aW9uIChzKSB7XHJcbiAgICAgIHJldHVybiBzLnR5cGUgIT09ICdicG1uMi5GbG93J1xyXG4gICAgICAgICYmIHMudHlwZSAhPSAnYnBtbjIuQ29udmVyc2F0aW9uTGluaydcclxuICAgICAgICAmJiBzLnR5cGUgIT0gJ2JwbW4yLkRhdGFBc3NvY2lhdGlvbidcclxuICAgICAgICAmJiBzLnR5cGUgIT0gJ2JwbW4yLkFubm90YXRpb25MaW5rJ1xyXG4gICAgfSk7XHJcbiAgICB2YXIgbWluVmFsdWU7XHJcbiAgICB2YXIgbWluT2JqZWN0O1xyXG5cclxuICAgIGlmICghZmlsdGVyU2hhcGVzIHx8ICFmaWx0ZXJTaGFwZXMubGVuZ3RoKSB7XHJcbiAgICAgIG1pblZhbHVlID0gc2hhcGVzWzBdLmJib3gueTtcclxuICAgICAgbWluT2JqZWN0ID0gc2hhcGVzWzBdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbWluVmFsdWUgPSBmaWx0ZXJTaGFwZXNbMF0uYmJveC55O1xyXG4gICAgICBtaW5PYmplY3QgPSBmaWx0ZXJTaGFwZXNbMF07XHJcbiAgICB9XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBmaWx0ZXJTaGFwZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdmFyIHlQb3NpdGlvbiA9IHRoaXMuZ2V0WVBvc2l0aW9uKGZpbHRlclNoYXBlc1tpXSk7XHJcbiAgICAgIGlmICh5UG9zaXRpb24gPCBtaW5WYWx1ZSkge1xyXG4gICAgICAgIG1pblZhbHVlID0geVBvc2l0aW9uO1xyXG4gICAgICAgIG1pbk9iamVjdCA9IGZpbHRlclNoYXBlc1tpXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1pblZhbHVlO1xyXG4gIH07XHJcbn1cclxuIl19
811
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLWJwbW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9xbXMtY2tlZGl0b3ItY29tcG9uZW50cy9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1icG1uL3Ftcy1ja2VkaXRvci1icG1uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNuRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDaEYsT0FBTyxVQUFVLE1BQU0sZ0NBQWdDLENBQUM7QUFFeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQ3BHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ3pHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN2RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDckUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDbkcsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDckcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDckcsT0FBTyxtQkFBbUIsTUFBTSxrREFBa0QsQ0FBQztBQUNuRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNoRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNsRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUVoRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFakYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFvQnJGLE1BQU0sS0FBSztJQU9UO1FBQ0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxDQUFDO1FBQ2xELElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNwQixDQUFDO0NBQ0Y7QUFPRCxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsd0JBQXdCO0lBK0JwRSxZQUNVLE1BQWlCLEVBQ2pCLFNBQWtDLEVBQ2xDLFdBQXdCLEVBQ3hCLGNBQXlDLEVBQ3pDLFdBQW1DLEVBQ25DLGFBQXVDLEVBQ3hDLFNBQWlELEVBQ3hCLElBQXlCO1FBRXpELEtBQUssRUFBRSxDQUFDO1FBVEEsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQixjQUFTLEdBQVQsU0FBUyxDQUF5QjtRQUNsQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixtQkFBYyxHQUFkLGNBQWMsQ0FBMkI7UUFDekMsZ0JBQVcsR0FBWCxXQUFXLENBQXdCO1FBQ25DLGtCQUFhLEdBQWIsYUFBYSxDQUEwQjtRQUN4QyxjQUFTLEdBQVQsU0FBUyxDQUF3QztRQUN4QixTQUFJLEdBQUosSUFBSSxDQUFxQjtRQXBDM0Qsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFDckIsT0FBRSxHQUFHLEVBQUUsQ0FBQztRQUVSLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUVuQixTQUFJLEdBQW9CLElBQUksZUFBZSxFQUFFLENBQUM7UUFDOUMsaUJBQVksR0FBOEIsRUFBRSxDQUFDO1FBSTdDLFlBQU8sR0FBYyxFQUFFLENBQUM7UUFDeEIsb0JBQWUsR0FBc0IsRUFBRSxDQUFDO1FBRXhDLG1CQUFjLEdBQW1CLGNBQWMsQ0FBQyxHQUFHLENBQUM7UUFDcEQsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUNsQixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QsV0FBTSxHQUFXLEVBQUUsQ0FBQztRQUNwQixpQkFBWSxHQUE0Qix1QkFBdUIsQ0FBQyxLQUFLLENBQUM7UUFtQnBFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUMxQyxDQUFDO0lBR0QsU0FBUyxDQUFDLEtBQUs7UUFDYixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDLGdCQUFnQixFQUFFO1lBQ2xELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQ3pCO2FBQ0ksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxlQUFlLEVBQUU7WUFDdEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHVCQUF1QixDQUFDLENBQUM7U0FDOUc7YUFDSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDLG9CQUFvQixFQUFFO1lBQzNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDMUc7YUFDSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDLGlCQUFpQixFQUFFO1lBQ3hELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQzNCO2FBQ0ksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxjQUFjLEVBQUU7WUFDckQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO2FBQ0ksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxpQkFBaUIsRUFBRTtZQUN4RCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFSyxRQUFROztZQUNaLElBQUksQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDdEYsSUFBSSxHQUFHLEVBQUU7b0JBQ1AsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDL0M7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDOUMsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO2dCQUNYLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUN2RDtZQUNELElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUMzQixJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLEVBQ0osa0JBQWtCLENBQUMsVUFBVSxFQUM3QixJQUFJLENBQUMsV0FBVyxFQUNoQixDQUFDLEVBQ0QsSUFBSSxDQUFDLElBQUksQ0FDVixDQUFDO1lBQ0YsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQixDQUFDO0tBQUE7SUFFRCxVQUFVO1FBQ1IsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDdkYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztTQUN6RjtJQUNILENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLDRCQUE0QixDQUFDLGlCQUFpQixFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7WUFDaEksSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsNEJBQTRCLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1NBQ3BIO0lBQ0gsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLEdBQUcsY0FBYyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQzVELElBQUksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQzlELElBQUksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLEdBQUcsY0FBYyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyx1QkFBdUIsQ0FBQyxLQUFLLENBQUM7UUFDbEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2pFLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQztRQUN6QyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUM7UUFDckUsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBRXhFLElBQUksQ0FBQyxZQUFZO1lBQ2YsT0FBTztRQUVULE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0QsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRWpFLFFBQVEsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEVBQUU7WUFDdkMsS0FBSyxxQkFBcUIsQ0FBQyw2QkFBNkI7Z0JBQ3RELGdCQUFnQixDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO2dCQUN2QyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Z0JBQ25DLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxTQUFTLENBQUMsTUFBTSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7Z0JBQ3ZFLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxTQUFTLENBQUMsR0FBRyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7Z0JBQ2hGLE1BQU07WUFFUixLQUFLLHFCQUFxQixDQUFDLDRCQUE0QjtnQkFDckQsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7Z0JBQ3hDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztnQkFDcEMsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsZ0RBQWdELENBQUMsQ0FBQztnQkFDbkYsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsb0NBQW9DLENBQUMsQ0FBQztnQkFDcEUsTUFBTTtZQUVSLEtBQUsscUJBQXFCLENBQUMsOEJBQThCO2dCQUN2RCxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztnQkFDdkMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO2dCQUNuQyxjQUFjLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7Z0JBQ3RDLE1BQU07WUFFUixLQUFLLHFCQUFxQixDQUFDLDZCQUE2QjtnQkFDdEQsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7Z0JBQ3hDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztnQkFDcEMsY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO2dCQUN0QyxNQUFNO1lBRVI7Z0JBQ0UsTUFBTTtTQUNUO0lBQ0gsQ0FBQztJQUVLLFlBQVk7O1lBQ2hCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLGNBQWM7cUJBQ2hCLGdCQUFnQixFQUFFO3FCQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztxQkFDbEMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQ3BCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbEIsQ0FBQyxDQUFDLENBQUE7WUFDTixDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUM7S0FBQTtJQUVLLGNBQWMsQ0FBQyxFQUFVOztZQUM3QixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxjQUFjO3FCQUNoQixXQUFXLENBQUMsRUFBRSxDQUFDO3FCQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO3FCQUNsQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDcEIsSUFBSSxNQUFNLEVBQUU7d0JBQ1YsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztxQkFDN0I7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUM7S0FBQTtJQUVLLGdCQUFnQixDQUFDLFdBQVc7O1lBQ2hDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDN0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLElBQUksR0FBRztvQkFDVixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUs7b0JBQ3hDLFdBQVcsRUFBRSxXQUFXO29CQUN4QixVQUFVLEVBQUUsS0FBSztvQkFDakIsWUFBWSxFQUFFLEVBQUU7aUJBQ2pCLENBQUE7Z0JBRUQsSUFBSSxDQUFDLGNBQWM7cUJBQ2hCLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO3FCQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztxQkFDbEMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQ3BCLElBQUksTUFBTSxFQUFFO3dCQUNWLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztxQkFDakI7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUM7S0FBQTtJQUVLLGVBQWUsQ0FBQyxLQUFVOztZQUM5QixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQzdCLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtvQkFDeEIsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDdkMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUFBO0lBRUssYUFBYTs7WUFDakIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUIsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQyxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNwRCxNQUFNLFlBQVksR0FBRyx3QkFBd0IsSUFBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUEsQ0FBQztZQUNsRixNQUFNLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQyxVQUFVLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN4RixNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzNFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDcEUsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQyxVQUFVLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUE7WUFDekcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0IsQ0FBQztLQUFBO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUM3QyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztRQUN2RCxJQUFJLElBQUksQ0FBQyxzQkFBc0IsSUFBSSw0QkFBNEIsQ0FBQyxpQkFBaUIsRUFBRTtZQUNqRixLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUM7WUFDbEQsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsa0NBQWtDLENBQUM7U0FDNUU7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN0RCxJQUFJLEtBQUssRUFBRTtnQkFDVCxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsRUFBRTtvQkFDNUUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7aUJBQ2xCO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDbEQsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtDQUFrQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7Z0JBQ3JJLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTztTQUNSO1FBQ0QsUUFBUSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQzNCLEtBQUssNEJBQTRCLENBQUMsaUJBQWlCO2dCQUNqRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLE1BQU07WUFDUixLQUFLLDRCQUE0QixDQUFDLFVBQVU7Z0JBQzFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFBO2dCQUMzQixNQUFNO1NBQ1Q7SUFDSCxDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxjQUF1QjtRQUN4QyxNQUFNLElBQUksR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLGNBQWMsQ0FBQztRQUN0QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRTtZQUNuRSxLQUFLLEVBQUUsT0FBTztZQUNkLE1BQU0sRUFBRSxPQUFPO1lBQ2YsSUFBSTtZQUNKLFlBQVksRUFBRSxJQUFJO1NBQ25CLENBQUMsQ0FBQztRQUNILGNBQWM7YUFDWCxXQUFXLEVBQUU7YUFDYixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNsQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNwQixJQUFJLE1BQU0sRUFBRTtnQkFDVixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLHVCQUF1QixDQUFDLFFBQVEsRUFBRTtvQkFDbkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDO29CQUNqRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUNuQztxQkFDSTtvQkFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7b0JBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO3dCQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7cUJBQy9CO2lCQUNGO2dCQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQztnQkFDekMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7YUFDN0I7WUFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDOUIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDL0QsS0FBSyxFQUFFLE9BQU87WUFDZCxNQUFNLEVBQUUsT0FBTztZQUNmLElBQUk7WUFDSixZQUFZLEVBQUUsSUFBSTtTQUNuQixDQUFDLENBQUM7UUFDSCxjQUFjO2FBQ1gsV0FBVyxFQUFFO2FBQ2IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDbEMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDcEIsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLFlBQVksR0FBRyx1QkFBdUIsQ0FBQyxLQUFLLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7b0JBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztpQkFDL0I7Z0JBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQzthQUM3QjtZQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGlCQUFpQixDQUFDLFVBQVU7UUFDMUIsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQztRQUNwQyxJQUFJLENBQUMsV0FBVzthQUNiLHFCQUFxQixDQUFDLFVBQVUsQ0FBQzthQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNsQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUN2QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxjQUErQztRQUNwRSxNQUFNLE9BQU8sR0FBYyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN4RixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLGNBQWMsRUFBRTtZQUNsQixjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztnQkFDM0IsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDO2dCQUN2QixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ25ELElBQUksS0FBSyxFQUFFO29CQUNULHlDQUF5QztvQkFDekMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQ3JDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDckIsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFOzRCQUNaLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQ0FDcEMsT0FBTyxDQUFDLENBQUMsV0FBVyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUM7NEJBQ3BDLENBQUMsQ0FBQyxDQUFDOzRCQUNILElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtnQ0FDYixPQUFPLENBQUMsSUFBSSxDQUFDO29DQUNYLEtBQUssRUFBRSxFQUFFO29DQUNULFNBQVMsRUFBRSxHQUFHLENBQUMsSUFBSTtvQ0FDbkIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxJQUFJO2lDQUN0QixDQUFDLENBQUM7Z0NBQ0gsRUFBRSxJQUFJLENBQUMsQ0FBQzs2QkFDVDt5QkFDRjtxQkFDRjtpQkFDRjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ1gsS0FBSyxFQUFFLENBQUM7WUFDUixTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCO1lBQ2xELFdBQVcsRUFBRSxVQUFVLENBQUMsVUFBVTtTQUNuQyxDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ1gsS0FBSyxFQUFFLENBQUM7WUFDUixTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsdUJBQXVCO1lBQ3hELFdBQVcsRUFBRSxVQUFVLENBQUMsT0FBTztTQUNoQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSx1QkFBdUIsQ0FBQyxRQUFRLEVBQUU7WUFDMUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNyQztJQUNILENBQUM7SUFFRCxTQUFTO1FBQ1AsTUFBTSxJQUFJLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDbEMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzVCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLElBQUksdUJBQXVCLENBQUMsS0FBSyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbEIsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3pCLEtBQUssdUJBQXVCLENBQUMsUUFBUTtnQkFDbkMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLGlCQUFpQixDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUMxRixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDN0QsTUFBTTtZQUNSLEtBQUssdUJBQXVCLENBQUMsT0FBTztnQkFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzdELE1BQU07WUFDUixLQUFLLHVCQUF1QixDQUFDLElBQUk7Z0JBQy9CLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUM3RCxNQUFNO1lBQ1IsS0FBSyx1QkFBdUIsQ0FBQyxNQUFNO2dCQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDN0QsTUFBTTtTQUNUO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELElBQUksUUFBUSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDckMsUUFBUSxHQUFHO1lBQ1QsRUFBRSxFQUFFLFVBQVUsQ0FBQyxLQUFLO1lBQ3BCLFdBQVcsRUFBRSxXQUFXO1lBQ3hCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFlBQVksRUFBRSxFQUFFO1NBQ2pCLENBQUE7UUFDRCxJQUFJLElBQUksR0FBRyxJQUFJLHlCQUF5QixFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxVQUFVLENBQUM7UUFDbEQsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7UUFDckIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDN0QsS0FBSyxFQUFFLE9BQU87WUFDZCxNQUFNLEVBQUUsT0FBTztZQUNmLElBQUk7WUFDSixZQUFZLEVBQUUsSUFBSTtTQUNuQixDQUFDLENBQUM7UUFDSCxjQUFjO2FBQ1gsV0FBVyxFQUFFO2FBQ2IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDbEMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDcEIsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsTUFBTTthQUNQO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3pFLElBQUksbUJBQW1CLEVBQUU7WUFDdkIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxJQUFJLEtBQUssRUFBRTtnQkFDVCxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO2FBQ2pEO1lBQ0QsTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDM0MsTUFBTSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUM5QyxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFhLEVBQUUsT0FBZTtRQUM3QyxNQUFNLElBQUksR0FBMEIsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQ2hFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFO1lBQzlELEtBQUssRUFBRSxPQUFPO1lBQ2QsU0FBUyxFQUFFLE9BQU87WUFDbEIsSUFBSTtTQUNMLENBQUMsQ0FBQztRQUNILFNBQVM7YUFDTixXQUFXLEVBQUU7YUFDYixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNsQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNwQixJQUFJLE1BQU0sRUFBRTthQUVYO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUMzQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUMxRCxNQUFNLGFBQWEsR0FBRyxDQUFDLFlBQVksRUFBRSxvQkFBb0IsRUFBRSx3QkFBd0IsRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1lBQ3RJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUNqSCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2FBQzlCO2lCQUNJO2dCQUNILElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNoQyxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUM7b0JBQzVDLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7aUJBQzlCO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsTUFBeUI7UUFDbkMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztRQUN2RCxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNyRCxJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNwRDtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsR0FBVztRQUN0QixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUU7WUFDVCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSx1QkFBdUIsQ0FBQyxRQUFRLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUM1RixJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDO2dCQUN0RSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3JDO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQTZCO1FBQ3pDLFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyx1QkFBdUIsQ0FBQyxRQUFRO2dCQUNuQyxPQUFPLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDO1lBQ2hELEtBQUssdUJBQXVCLENBQUMsT0FBTztnQkFDbEMsT0FBTyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQztZQUMvQyxLQUFLLHVCQUF1QixDQUFDLElBQUk7Z0JBQy9CLE9BQU8saUJBQWlCLENBQUMsZ0JBQWdCLENBQUM7WUFDNUMsS0FBSyx1QkFBdUIsQ0FBQyxNQUFNO2dCQUNqQyxPQUFPLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDO1lBQzlDO2dCQUNFLE9BQU8sRUFBRSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQVcsRUFBRSxJQUE2QjtRQUNsRCxJQUFJLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFDeEIsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDekIsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ1osSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFbEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxRCxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTVDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRTtZQUNoQixlQUFlLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUVuRCxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQ3JDLElBQUksR0FBRyxlQUFlLEdBQUcsZ0JBQWdCLENBQUM7WUFFMUMsSUFBSSxJQUFJLElBQUksdUJBQXVCLENBQUMsUUFBUSxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDOUQsRUFBRSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQzthQUNsRDtpQkFDSTtnQkFDSCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUNkLEVBQUUsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNoQztxQkFDSTtvQkFDSCxFQUFFLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7aUJBQ3hDO2FBQ0Y7U0FDRjtRQUVELElBQUksSUFBSSxJQUFJLHVCQUF1QixDQUFDLFFBQVEsRUFBRTtZQUM1QyxJQUFJO2dCQUNGLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDbEI7WUFDRCxXQUFNO2dCQUNKLEVBQUUsR0FBRyxFQUFFLENBQUM7YUFDVDtTQUNGO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsZUFBZSxDQUFDLEdBQVc7UUFDekIsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDNUQsT0FBTyx1QkFBdUIsQ0FBQyxRQUFRLENBQUM7U0FDekM7YUFDSSxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUNoRSxPQUFPLHVCQUF1QixDQUFDLE9BQU8sQ0FBQztTQUN4QzthQUNJLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQzdELE9BQU8sdUJBQXVCLENBQUMsSUFBSSxDQUFDO1NBQ3JDO2FBQ0ksSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDL0QsT0FBTyx1QkFBdUIsQ0FBQyxNQUFNLENBQUM7U0FDdkM7UUFDRCxPQUFPLHVCQUF1QixDQUFDLEtBQUssQ0FBQztJQUN2QyxDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNoRTtJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM5RCxJQUFJLGNBQWMsRUFBRTtZQUNsQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLElBQUksS0FBSyxFQUFFO2dCQUNULEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLHVCQUF1QixFQUFFLENBQUM7Z0JBQzNDLE1BQU0sQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsR0FBRyxLQUFLLENBQUM7YUFDckQ7WUFDRCxNQUFNLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQztZQUMzQyxNQUFNLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQWEsRUFBRSxPQUFlLEVBQUUsU0FBa0IsRUFBRSxRQUFpQztRQUNyRyxNQUFNLElBQUksR0FBMEIsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQ2hFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFO1lBQzlELEtBQUssRUFBRSxPQUFPO1lBQ2QsU0FBUyxFQUFFLE9BQU87WUFDbEIsSUFBSTtTQUNMLENBQUMsQ0FBQztRQUNILFNBQVM7YUFDTixXQUFXLEVBQUU7YUFDYixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNsQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNwQixJQUFJLFFBQVEsRUFBRTtnQkFDWixRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDbEI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxVQUFVLENBQUMsRUFBTyxFQUFFLEtBQVksRUFBRSxVQUFlO1FBQy9DLE1BQU0sR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDM0UsR0FBRyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQ3BDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUNsQyxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUM5QixJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7WUFDM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JDLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckIsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BELElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUMzQyxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixJQUFJLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUMxQixLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUNyQixLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdEY7WUFDRCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFeEMsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7WUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JDLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckIsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztnQkFDekIsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztnQkFDOUIsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztnQkFFMUIsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLFlBQVksSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLG9CQUFvQixFQUFFO29CQUNwRSxpQkFBaUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ2hELGNBQWMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksWUFBWSxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksb0JBQW9CLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7aUJBQ3hIO2dCQUNELElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDN0IsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQ3BELElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUMzQyxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztvQkFDbkQsSUFBSSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUNwQixJQUFJLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztvQkFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO29CQUMxQixJQUFJLGlCQUFpQixHQUFHLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFFcEQsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7b0JBRW5CLElBQUksS0FBSyxDQUFDLDBCQUEwQixJQUFJLElBQUksRUFBRTt3QkFDNUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsaUJBQWlCLENBQUMsQ0FBQzt3QkFDNUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQzt3QkFDeEIsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUNqQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztxQkFDL0I7eUJBQU07d0JBQ0wsSUFBSSxVQUFVLEdBQUcsT0FBTyxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUM7d0JBQy9DLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxjQUFjLEVBQUU7NEJBQ2pDLFVBQVUsR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzs0QkFDbkMsVUFBVSxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO3lCQUNwQzt3QkFDRCxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksY0FBYyxFQUFFOzRCQUNqQyxVQUFVLEdBQUcsT0FBTyxHQUFHLGlCQUFpQixDQUFDO3lCQUMxQzt3QkFDRCxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO3dCQUMzQixFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO3dCQUMzQixFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDM0IsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztxQkFDekI7b0JBQ0QsSUFBSSxNQUFNLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztvQkFDdkMsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFO3dCQUNsQixLQUFLLGdCQUFnQixDQUFDO3dCQUN0QixLQUFLLGVBQWUsQ0FBQzt3QkFDckIsS0FBSyxhQUFhLENBQUM7d0JBQ25CLEtBQUssb0JBQW9CLENBQUM7d0JBQzFCLEtBQUssa0JBQWtCLENBQUM7d0JBQ3hCLEtBQUssaUJBQWlCLENBQUM7d0JBQ3ZCLEtBQUssbUJBQW1CLENBQUM7d0JBQ3pCLEtBQUssY0FBYzs0QkFDakIsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0NBQ2IsS0FBSyxFQUFFLE1BQU07Z0NBQ2IsTUFBTSxFQUFFLE1BQU07Z0NBQ2QsSUFBSSxFQUFFLElBQUk7Z0NBQ1YsTUFBTSxFQUFFLE1BQU07Z0NBQ2QsR0FBRyxFQUFFLEdBQUc7NkJBQ1QsQ0FBQyxDQUFDOzRCQUNILE1BQU07d0JBQ1I7NEJBQ0UsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0NBQ2IsS0FBSyxFQUFFLE1BQU07Z0NBQ2IsTUFBTSxFQUFFLE1BQU07Z0NBQ2QsSUFBSSxFQUFFLElBQUk7Z0NBQ1YsTUFBTSxFQUFFLE1BQU07Z0NBQ2QsR0FBRyxFQUFFLEdBQUc7NkJBQ1QsQ0FBQyxDQUFDOzRCQUNILE1BQU07cUJBQ1Q7aUJBQ0Y7YUFDRjtTQUNGO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQU07UUFDbEIsSUFBSSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7WUFDMUMsT0FBTyxDQUFDLENBQUMsSUFBSSxLQUFLLFlBQVk7bUJBQ3pCLENBQUMsQ0FBQyxJQUFJLElBQUksd0JBQXdCO21CQUNsQyxDQUFDLENBQUMsSUFBSSxJQUFJLHVCQUF1QjttQkFDakMsQ0FBQyxDQUFDLElBQUksSUFBSSxzQkFBc0IsQ0FBQTtRQUN2QyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksUUFBUSxDQUFDO1FBQ2IsSUFBSSxTQUFTLENBQUM7UUFFZCxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTtZQUN6QyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QyxTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCO2FBQU07WUFDTCxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QyxTQUFTLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdCO1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuRCxJQUFJLFNBQVMsR0FBRyxRQUFRLEVBQUU7Z0JBQ3hCLFFBQVEsR0FBRyxTQUFTLENBQUM7Z0JBQ3JCLFNBQVMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDN0I7U0FDRjtRQUdELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBSztRQUNoQixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQUs7UUFDaEIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFNO1FBQ2xCLElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO1lBQzFDLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZO21CQUN6QixDQUFDLENBQUMsSUFBSSxJQUFJLHdCQUF3QjttQkFDbEMsQ0FBQyxDQUFDLElBQUksSUFBSSx1QkFBdUI7bUJBQ2pDLENBQUMsQ0FBQyxJQUFJLElBQUksc0JBQXNCLENBQUE7UUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLFFBQVEsQ0FBQztRQUNiLElBQUksU0FBUyxDQUFDO1FBRWQsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7WUFDekMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzVCLFNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkI7YUFBTTtZQUNMLFFBQVEsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNsQyxTQUFTLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdCO1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuRCxJQUFJLFNBQVMsR0FBRyxRQUFRLEVBQUU7Z0JBQ3hCLFFBQVEsR0FBRyxTQUFTLENBQUM7Z0JBQ3JCLFNBQVMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDN0I7U0FDRjtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFBQSxDQUFDO0lBR0Ysd0JBQXdCO1FBQ3RCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUN0RCxPQUFPLHFCQUFxQixDQUFDLDZCQUE2QixDQUFDO1FBRTdELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLGFBQWE7WUFDckQsT0FBTyxxQkFBcUIsQ0FBQyw0QkFBNEIsQ0FBQztRQUU1RCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUN2RCxPQUFPLHFCQUFxQixDQUFDLDhCQUE4QixDQUFDO1FBRTlELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsYUFBYTtZQUN0RCxPQUFPLHFCQUFxQixDQUFDLDZCQUE2QixDQUFDO0lBQy9ELENBQUM7OztZQTl6QkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxVQUFVO2dCQUNwQix1dVBBQWlEOzthQUVsRDs7O1lBdkVRLFNBQVM7WUFFVCx1QkFBdUI7WUFXdkIsV0FBVztZQURYLHlCQUF5QjtZQVV6QixzQkFBc0I7WUFNdEIsd0JBQXdCO1lBNUJiLFlBQVk7WUFxQnZCLG1CQUFtQix1QkEwRnZCLE1BQU0sU0FBQyxlQUFlOzs7d0JBU3hCLFlBQVksU0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBJbmplY3QsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi1yZWdpc3RyeS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IENLRWRpdG9yRXZlbnRDb25zdCB9IGZyb20gXCIuLi8uLi9jb21tb24vY29uc3RhbnRzL2NrZWRpdG9yRXZlbnQuY29uc3RhbnRcIjtcclxuaW1wb3J0IHsgRmxvd0NoYXJ0Q29uc3QgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2NvbnN0YW50cy9ja2VkaXRvckZsb3djaGFydC5jb25zdFwiO1xyXG5pbXBvcnQgZ3VpZEhlbHBlciBmcm9tIFwiLi4vLi4vY29tbW9uL2hlbHBlci9ndWlkSGVscGVyXCI7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yQnBtblRlbXBsYXRlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLWJwbW4tdGVtcGxhdGUubW9kZWxcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCcG1uIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLWJwbW4ubW9kZWxcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JEaWFsb2dEYXRhIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLWRpYWxvZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvclNhdmVBc1RlbXBsYXRlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLXNhdmUtYXMtdGVtcGxhdGUubW9kZWxcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JDb25maXJtQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2R1bGUvY29uZmlybS9xbXMtY2tlZGl0b3ItY29uZmlybS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCYXNlQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL3Ftcy1ja2VkaXRvci1iYXNlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckJwbW5BcGlTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci1icG1uLWFwaS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEJwbW5TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci1icG1uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2F2ZVRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSBcIi4vc2F2ZS10ZW1wbGF0ZS9zYXZlLXRlbXBsYXRlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBUYXJnZXRUeXBlTmFtZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbnVtcy90YXJnZXQtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbnVtcy9zaGFwZS1mbG93LWNoYXJ0LWNvbm5lY3Rpb24tdHlwZSc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yUmVsYXRlZENvbXBvbmVudCB9IGZyb20gJy4uL3Ftcy1ja2VkaXRvci1yZWxhdGlvbi9xbXNja2VkaXRvci1yZWxhdGVkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExpbmtBdHRhY2htZW50Q29tcG9uZW50IH0gZnJvbSAnLi4vcW1zLWNrZWRpdG9yLWxpbmsvYXR0YWNobWVudHMvbGluay1hdHRhY2htZW50LmNvbXBvbmVudCc7XHJcbmltcG9ydCBRTVNDS0VkaXRvclBhcmFtdGVyIGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLXBhcmFtZXRlci5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yUmVsYXRpb24gfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1yZWxhdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yQnBtbkRhdGEgfSBmcm9tICcuLi8uLi9tb2RlbHMvcW1zLWNrZWRpdG9yLWJwbW4tZGF0YS5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yTGlua1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9xbXMtY2tlZGl0b3ItbGluay5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2VudW1zL2RvY3VtZW50LXR5cGUuZW51bVwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckxpbmtBbmNob3JEb2N1bWVudCB9IGZyb20gXCIuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1saW5rLWFuY2hvci1kb2N1bWVudC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBMaW5rQW5jaG9yIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9lbnVtcy9saW5rLWFuY2hvci5lbnVtXCI7XHJcbmltcG9ydCB7IENLRWRpdG9yTGlua0NvbnN0IH0gZnJvbSAnLi4vLi4vY29tbW9uL2NvbnN0YW50cy9ja2VkaXRvckxpbmsuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBNYXRUYWJDaGFuZ2VFdmVudCB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC90YWJzXCI7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yVXBsb2FkU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9xbXMtY2tlZGl0b3ItdXBsb2FkLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgYmFzZTY0U3RyaW5nVG9GaWxlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9oZWxwZXIvZmlsZUhlbHBlclwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckJwbW5FeHBhbmQgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2VudW1zL2NrZWRpdG9yLWJwbW4tZXhwYW5kLmVudW1cIjtcclxuXHJcbi8vVE9ETzogbW92ZSB0byBjb21tb24gZm9sZGVyXHJcbmludGVyZmFjZSBJVGFyZ2V0IHtcclxuICBpZDogc3RyaW5nO1xyXG4gIG5hbWU6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIElDb25uZWN0aW9uVHlwZSB7XHJcbiAgaWQ6IG51bWJlcjtcclxuICBuYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbi8vVE9ETzogbW92ZSB0byBjb21tb24gZm9sZGVyXHJcbmludGVyZmFjZSBJQW5jaG9yIHtcclxuICB2YWx1ZTogbnVtYmVyO1xyXG4gIHZpZXdWYWx1ZTogc3RyaW5nO1xyXG4gIGFuY2hvclZhbHVlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmNsYXNzIElMaW5rIHtcclxuICB0YXJnZXQ6IFRhcmdldFR5cGVOYW1lO1xyXG4gIHVybDogc3RyaW5nO1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgZG9jdW1lbnRUeXBlOiBRTVNDS0VkaXRvckRvY3VtZW50VHlwZTtcclxuICBpY29uOiBzdHJpbmc7XHJcbiAgY29udGVudDogc3RyaW5nO1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy50YXJnZXQgPSBUYXJnZXRUeXBlTmFtZS5uZXc7XHJcbiAgICB0aGlzLmRvY3VtZW50VHlwZSA9IFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLm90aGVyO1xyXG4gICAgdGhpcy51cmwgPSAnJztcclxuICAgIHRoaXMudGl0bGUgPSAnJztcclxuICAgIHRoaXMuaWNvbiA9ICcnO1xyXG4gICAgdGhpcy5jb250ZW50ID0gJyc7XHJcbiAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3Ftcy1icG1uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcW1zLWNrZWRpdG9yLWJwbW4uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Ftcy1ja2VkaXRvci1icG1uLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFFNU0NLRWRpdG9yQnBtbkNvbXBvbmVudCBleHRlbmRzIFFNU0NLRWRpdG9yQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgTEFORzogYW55O1xyXG4gIGpzb25Db250ZW50OiBzdHJpbmc7XHJcbiAgZXhwYW5kZWRQYW5lbCA9IHRydWU7XHJcbiAgaWQgPSAnJztcclxuICBtb2R1bGU6IG51bWJlcjtcclxuICBlbnRpdHlJZCA9ICcnO1xyXG4gIGVkaXRvckNvbnRlbnQgPSAnJztcclxuXHJcbiAgYnBtbjogUU1TQ0tFZGl0b3JCcG1uID0gbmV3IFFNU0NLRWRpdG9yQnBtbigpO1xyXG4gIGJwbW5UZW1sYXRlczogUU1TQ0tFZGl0b3JCcG1uVGVtcGxhdGVbXSA9IFtdO1xyXG5cclxuICBjb25uZWN0aW9uVHlwZTogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZTtcclxuICBzZWxlY3RlZENvbm5lY3Rpb25UeXBlOiBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlO1xyXG4gIHRhcmdldHM6IElUYXJnZXRbXSA9IFtdO1xyXG4gIGNvbm5lY3Rpb25UeXBlczogSUNvbm5lY3Rpb25UeXBlW10gPSBbXTtcclxuXHJcbiAgc2VsZWN0ZWRUYXJnZXQ6IFRhcmdldFR5cGVOYW1lID0gVGFyZ2V0VHlwZU5hbWUubmV3O1xyXG4gIGxpbmtVcmwgPSAnJztcclxuICBsaW5rVGl0bGUgPSAnJztcclxuICBhbmNob3JCeU5hbWUgPSAnJztcclxuICBsaW5rSWNvbiA9ICcnO1xyXG4gIGxpbmtJZDogc3RyaW5nID0gJyc7XHJcbiAgZG9jdW1lbnRUeXBlOiBRTVNDS0VkaXRvckRvY3VtZW50VHlwZSA9IFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLm90aGVyO1xyXG4gIGRvY3VtZW50SWNvbnM6IGFueTtcclxuXHJcbiAgbGluazogSUxpbms7XHJcbiAgZG9jdW1lbnRBbmNob3JzOiBJQW5jaG9yW107XHJcbiAgaXNMb2FkaW5nRG9jdW1lbnRBbmNob3I6IGJvb2xlYW47XHJcbiAgc2VsZWN0ZWRDZWxsVmlldzogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGJwbW5TZXJ2aWNlOiBCcG1uU2VydmljZSxcclxuICAgIHByaXZhdGUgYnBtbkFwaVNlcnZpY2U6IFFNU0NLRWRpdG9yQnBtbkFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxpbmtTZXJ2aWNlOiBRTVNDS0VkaXRvckxpbmtTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1cGxvYWRTZXJ2aWNlOiBRTVNDS0VkaXRvclVwbG9hZFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8UU1TQ0tFZGl0b3JCcG1uQ29tcG9uZW50PixcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogUU1TQ0tFZGl0b3JCcG1uRGF0YVxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuaWQgPSBkYXRhLmlkO1xyXG4gICAgdGhpcy5tb2R1bGUgPSBkYXRhLm1vZHVsZTtcclxuICAgIHRoaXMuZW50aXR5SWQgPSBkYXRhLmVudGl0eUlkO1xyXG4gICAgdGhpcy5lZGl0b3JDb250ZW50ID0gZGF0YS5lZGl0b3JDb250ZW50O1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93Om1lc3NhZ2UnLCBbJyRldmVudCddKVxyXG4gIG9uTWVzc2FnZShldmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmRhdGEgPT09IEZsb3dDaGFydENvbnN0LlNBVkVfQVNfVEVNUExBVEUpIHtcclxuICAgICAgdGhpcy5vblNhdmVBc1RlbXBsYXRlKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChldmVudC5kYXRhID09PSBGbG93Q2hhcnRDb25zdC5ERUxFVEVfVEVNUExBVEUpIHtcclxuICAgICAgdGhpcy5vbkRlbGV0ZVRlbXBsYXRlKHRoaXMuTEFORy5CUE1OLkRFTEVURV9URU1QTEFURSwgdGhpcy5MQU5HLlFNU0NLRURJVE9SX01FU1NBR0UuQ09ORklSTV9ERUxFVEVfVEVNUExBVEUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZXZlbnQuZGF0YSA9PT0gRmxvd0NoYXJ0Q29uc3QuTVVTVF9TRUxFQ1RfVEVNUExBVEUpIHtcclxuICAgICAgdGhpcy5zaG93Q29uZmlybURpYWxvZyh0aGlzLkxBTkcuQlBNTi5TRUxFQ1RfVEVNUExBVEUsIHRoaXMuTEFORy5CUE1OLlNFTEVDVF9URU1QTEFURV9JTkZPUk1BVElPTiwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChldmVudC5kYXRhID09PSBGbG93Q2hhcnRDb25zdC5DSEFOR0lOR19URU1QTEFURSkge1xyXG4gICAgICB0aGlzLm9uU2VsZWN0ZWRUZW1wbGF0ZSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZXZlbnQuZGF0YSA9PT0gRmxvd0NoYXJ0Q29uc3QuUkVTRVRfVEVNUExBVEUpIHtcclxuICAgICAgdGhpcy5vblJlc2V0VGVtcGxhdGUoKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGV2ZW50LmRhdGEgPT09IEZsb3dDaGFydENvbnN0LlNFTEVDVEVEX1NIQVBFX0lEKSB7XHJcbiAgICAgIHRoaXMub25TZWxldGVkQ2VsbFZpZXcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy50cmFuc2xhdGUuZ2V0TGFuZ3VhZ2VTdWJqZWN0JC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICB0aGlzLkxBTkcgPSB0aGlzLnRyYW5zbGF0ZS5nZXRPYmplY3RMYW5nKHJlcyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5icG1uVGVtbGF0ZXMgPSBhd2FpdCB0aGlzLmdldFRlbXBsYXRlcygpO1xyXG4gICAgaWYgKHRoaXMuaWQpIHtcclxuICAgICAgdGhpcy5qc29uQ29udGVudCA9IGF3YWl0IHRoaXMuZ2V0SnNvbkNvbnRlbnQodGhpcy5pZCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmJwbW5TZXJ2aWNlLmJ1aWxkRGlhZ3JhbShcclxuICAgICAgdGhpcy5icG1uVGVtbGF0ZXMsXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIENLRWRpdG9yRXZlbnRDb25zdC5RTVNDS19CUE1OLFxyXG4gICAgICB0aGlzLmpzb25Db250ZW50LFxyXG4gICAgICAxLFxyXG4gICAgICB0aGlzLkxBTkdcclxuICAgICk7XHJcbiAgICB0aGlzLmluaXREb2N1bWVudEljb25zKCk7XHJcbiAgICB0aGlzLmluaXRUYXJnZXQoKTtcclxuICAgIHRoaXMuaW5pdENvbm5lY3Rpb25UeXBlKCk7XHJcbiAgICB0aGlzLmluaXRMaW5rKCk7XHJcbiAgfVxyXG5cclxuICBpbml0VGFyZ2V0KCkge1xyXG4gICAgaWYgKHRoaXMudGFyZ2V0cykge1xyXG4gICAgICB0aGlzLnRhcmdldHMucHVzaCh7IGlkOiBUYXJnZXRUeXBlTmFtZS5uZXcsIG5hbWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5UQVJUR0VUX05FVyB9KTtcclxuICAgICAgdGhpcy50YXJnZXRzLnB1c2goeyBpZDogVGFyZ2V0VHlwZU5hbWUuc2FtZSwgbmFtZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLlRBUkdFVF9TQU1FIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdENvbm5lY3Rpb25UeXBlKCkge1xyXG4gICAgaWYgKHRoaXMuY29ubmVjdGlvblR5cGVzKSB7XHJcbiAgICAgIHRoaXMuY29ubmVjdGlvblR5cGVzLnB1c2goeyBpZDogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5Eb2N1bWVudE9yUHJvY2VzcywgbmFtZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLkRPQ1VNRU5UX1BST0NFU1MgfSk7XHJcbiAgICAgIHRoaXMuY29ubmVjdGlvblR5cGVzLnB1c2goeyBpZDogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BdHRhY2htZW50LCBuYW1lOiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQVRUQUNITUVOVCB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluaXREb2N1bWVudEljb25zKCkge1xyXG4gICAgdGhpcy5kb2N1bWVudEljb25zID0ge307XHJcbiAgICB0aGlzLmRvY3VtZW50SWNvbnNbUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUuZG9jdW1lbnRdID0gJ3RleHRfc25pcHBldCc7XHJcbiAgICB0aGlzLmRvY3VtZW50SWNvbnNbUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUucHJvY2Vzc10gPSAnYWNjb3VudF90cmVlJztcclxuICAgIHRoaXMuZG9jdW1lbnRJY29uc1tRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5hcmVhXSA9ICdmb2xkZXInO1xyXG4gICAgdGhpcy5kb2N1bWVudEljb25zW1FNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLmZvbGRlcl0gPSAnZm9sZGVyJztcclxuICAgIHRoaXMuZG9jdW1lbnRJY29uc1tRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5vdGhlcl0gPSAndGV4dF9zbmlwcGV0JztcclxuICB9XHJcblxyXG4gIGluaXRMaW5rKCkge1xyXG4gICAgdGhpcy5saW5rID0gbnVsbDtcclxuICAgIHRoaXMubGlua0lkID0gJyc7XHJcbiAgICB0aGlzLmRvY3VtZW50VHlwZSA9IFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLm90aGVyO1xyXG4gICAgdGhpcy5saW5rSWNvbiA9IHRoaXMuZG9jdW1lbnRJY29uc1tRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5vdGhlcl1cclxuICAgIHRoaXMuc2VsZWN0ZWRUYXJnZXQgPSBUYXJnZXRUeXBlTmFtZS5uZXc7XHJcbiAgICB0aGlzLmFuY2hvckJ5TmFtZSA9ICcnO1xyXG4gICAgdGhpcy5saW5rVGl0bGUgPSAnJztcclxuICAgIHRoaXMuZG9jdW1lbnRBbmNob3JzID0gW107XHJcbiAgfVxyXG5cclxuICBleHBhbmRQYW5lbCgpIHtcclxuICAgIHRoaXMuZXhwYW5kZWRQYW5lbCA9ICF0aGlzLmV4cGFuZGVkUGFuZWw7XHJcbiAgICB0aGlzLmJwbW5TZXJ2aWNlLmlzRXhwYW5kZWRQYW5lbCA9ICF0aGlzLmJwbW5TZXJ2aWNlLmlzRXhwYW5kZWRQYW5lbDtcclxuICAgIGNvbnN0IHBhbmVsU3RlbmNpbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYW5lbC1zdGVuY2lsLWNvbnRhaW5lcicpO1xyXG5cclxuICAgIGlmICghcGFuZWxTdGVuY2lsKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcGFwZXJDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFwZXJwYW5lbCcpO1xyXG4gICAgY29uc3Qgc3RlbmNpbENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVuY2lscGFuZWwnKTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuY2hlY2tDYXNlQnBtbkV4cGFuZFBhbmVsKCkpIHtcclxuICAgICAgY2FzZSBRTVNDS0VkaXRvckJwbW5FeHBhbmQuaXNGdWxsU2NyZWVuQW5kbm90RXhwYW5kUGFuZWw6XHJcbiAgICAgICAgc3RlbmNpbENvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnNTBweCc7XHJcbiAgICAgICAgcGFuZWxTdGVuY2lsLnN0eWxlLmhlaWdodCA9ICc1MHB4JztcclxuICAgICAgICBwYXBlckNvbnRhaW5lcj8uY2xhc3NMaXN0LnJlbW92ZSgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFwZXJwYW5lbCcpO1xyXG4gICAgICAgIHBhcGVyQ29udGFpbmVyPy5jbGFzc0xpc3QuYWRkKCdmdWxsLXNjcmVlbi1icG1uLWVkaXRvcl9wYXBlcnBhbmVsLWV4cGFuZHBhbmVsJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFFNU0NLRWRpdG9yQnBtbkV4cGFuZC5pc0Z1bGxTY3JlZW5BbmRpc0V4cGFuZFBhbmVsOlxyXG4gICAgICAgIHN0ZW5jaWxDb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gJzE1MHB4JztcclxuICAgICAgICBwYW5lbFN0ZW5jaWwuc3R5bGUuaGVpZ2h0ID0gJzE1MHB4JztcclxuICAgICAgICBwYXBlckNvbnRhaW5lcj8uY2xhc3NMaXN0LnJlbW92ZSgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFwZXJwYW5lbC1leHBhbmRwYW5lbCcpO1xyXG4gICAgICAgIHBhcGVyQ29udGFpbmVyPy5jbGFzc0xpc3QuYWRkKCdmdWxsLXNjcmVlbi1icG1uLWVkaXRvcl9wYXBlcnBhbmVsJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFFNU0NLRWRpdG9yQnBtbkV4cGFuZC5ub3RGdWxsU2NyZWVuQW5kbm90RXhwYW5kUGFuZWw6XHJcbiAgICAgICAgc3RlbmNpbENvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnNTBweCc7XHJcbiAgICAgICAgcGFuZWxTdGVuY2lsLnN0eWxlLmhlaWdodCA9ICc1MHB4JztcclxuICAgICAgICBwYXBlckNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnNTAwcHgnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBRTVNDS0VkaXRvckJwbW5FeHBhbmQubm90RnVsbFNjcmVlbkFuZGlzRXhwYW5kUGFuZWw6XHJcbiAgICAgICAgc3RlbmNpbENvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnMTUwcHgnO1xyXG4gICAgICAgIHBhbmVsU3RlbmNpbC5zdHlsZS5oZWlnaHQgPSAnMTUwcHgnO1xyXG4gICAgICAgIHBhcGVyQ29udGFpbmVyLnN0eWxlLmhlaWdodCA9ICc0MDBweCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0VGVtcGxhdGVzKCk6IFByb21pc2U8UU1TQ0tFZGl0b3JCcG1uVGVtcGxhdGVbXT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIHRoaXMuYnBtbkFwaVNlcnZpY2VcclxuICAgICAgICAuYnBtbkdldFRlbXBsYXRlcygpXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICB9KVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldEpzb25Db250ZW50KGlkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIHRoaXMuYnBtbkFwaVNlcnZpY2VcclxuICAgICAgICAuZ2V0QnBtbkJ5SWQoaWQpXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQuanNvbkNvbnRlbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGFzeW5jIHNhdmVJbWFnZUNvbnRlbnQoZ3JhcGhPYmplY3QpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBjb25zdCBqc29uQ29udGVudCA9IEpTT04uc3RyaW5naWZ5KGdyYXBoT2JqZWN0KTtcclxuICAgICAgdGhpcy5icG1uID0ge1xyXG4gICAgICAgIGlkOiB0aGlzLmlkID8gdGhpcy5pZCA6IGd1aWRIZWxwZXIuZW1wdHksXHJcbiAgICAgICAganNvbkNvbnRlbnQ6IGpzb25Db250ZW50LFxyXG4gICAgICAgIGlzVGVtcGxhdGU6IGZhbHNlLFxyXG4gICAgICAgIHRlbXBsYXRlTmFtZTogJydcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5icG1uQXBpU2VydmljZVxyXG4gICAgICAgIC5icG1uTW9kaWZ5aW5nKHRoaXMuYnBtbilcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0SW1hZ2VDb250ZW50KHBhcGVyOiBhbnkpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBwYXBlci50b1BORygoaW1hZ2VEYXRhKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYXJyU3RyaW5nID0gaW1hZ2VEYXRhLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgcmVzb2x2ZShhcnJTdHJpbmdbMV0pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25JbnNlcnRJbWFnZSgpIHtcclxuICAgIGNvbnN0IGdyYXBoID0gd2luZG93W0Zsb3dDaGFydENvbnN0LkdSQVBIXTtcclxuICAgIGNvbnN0IHBhcGVyID0gd2luZG93W2BwYXBlcmBdO1xyXG4gICAgY29uc3QgY2xpZW50UmVjdCA9IHBhcGVyLnBhcGVyVG9Mb2NhbFJlY3QocGFwZXIuZ2V0Q29udGVudEJCb3goKSk7XHJcbiAgICBjb25zdCBncmFwaE9iamVjdCA9IGdyYXBoLnRvSlNPTigpO1xyXG4gICAgY29uc3QgaWQgPSBhd2FpdCB0aGlzLnNhdmVJbWFnZUNvbnRlbnQoZ3JhcGhPYmplY3QpO1xyXG4gICAgY29uc3QgaW1hZ2VDb250ZW50ID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnICsgYXdhaXQgdGhpcy5nZXRJbWFnZUNvbnRlbnQocGFwZXIpO1xyXG4gICAgY29uc3QgZmlsZSA9IGJhc2U2NFN0cmluZ1RvRmlsZShpbWFnZUNvbnRlbnQsIGAke0NLRWRpdG9yRXZlbnRDb25zdC5RTVNDS19CUE1OfSMke2lkfWApO1xyXG4gICAgY29uc3QgcmVsYXRpdmVVcmwgPSBhd2FpdCB0aGlzLnVwbG9hZFNlcnZpY2UudXBsb2FkSW1hZ2UoZmlsZSkudG9Qcm9taXNlKCk7XHJcbiAgICBjb25zdCBpbWFnZW1hcCA9IHRoaXMudG9JbWFnZU1hcChpZCwgZ3JhcGhPYmplY3QuY2VsbHMsIGNsaWVudFJlY3QpO1xyXG4gICAgY29uc3QgcmVzdWx0ID0geyBrZXk6IGAke0NLRWRpdG9yRXZlbnRDb25zdC5RTVNDS19CUE1OfSMke2lkfWAsIHZhbHVlczogcmVsYXRpdmVVcmwsIGltYWdlbWFwOiBpbWFnZW1hcCB9XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShyZXN1bHQpO1xyXG4gIH1cclxuXHJcbiAgb25DbG9zZURpYWxvZygpIHtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVMaW5rKCkge1xyXG4gICAgbGV0IHRpdGxlID0gdGhpcy5MQU5HLkJQTU4uREVMRVRFX0FUVEFDSE1FTlQ7XHJcbiAgICBsZXQgY29udGVudCA9IHRoaXMuTEFORy5CUE1OLkNPTkZJUk1fREVMRVRFX0FUVEFDSE1FTlQ7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZENvbm5lY3Rpb25UeXBlID09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRG9jdW1lbnRPclByb2Nlc3MpIHtcclxuICAgICAgdGl0bGUgPSB0aGlzLkxBTkcuQlBNTi5ERUxFVEVfRE9DVU1FTlRfT1JfUFJPQ0VTUztcclxuICAgICAgY29udGVudCA9IHRoaXMuTEFORy5RTVNDS0VESVRPUl9NRVNTQUdFLkNPTkZJUk1fREVMRVRFX0RPQ1VNRU5UX09SX1BST0NFU1M7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNob3dDb25maXJtRGlhbG9nKHRpdGxlLCBjb250ZW50LCBmYWxzZSwgKHZhbHVlKSA9PiB7XHJcbiAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PSB0cnVlIHx8ICh0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcgJiYgdmFsdWUuaXNDb25maXJtZWQgPT0gdHJ1ZSkpIHtcclxuICAgICAgICAgIHRoaXMubGluayA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgb25Db25uZWN0aW9uVHlwZUNoYW5nZSgpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRDb25uZWN0aW9uVHlwZSA9IHRoaXMuY29ubmVjdGlvblR5cGU7XHJcbiAgICBpZiAodGhpcy5saW5rKSB7XHJcbiAgICAgIHRoaXMuc2hvd0NvbmZpcm1EaWFsb2codGhpcy5MQU5HLlFNU0NLRURJVE9SLklORk9STUFUSU9OLCB0aGlzLkxBTkcuUU1TQ0tFRElUT1JfTUVTU0FHRS5DT05GSVJNX0RFTEVURV9FWElTVElOR19DT05ORUNUSU9OLCB0cnVlLCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uVHlwZSA9IDA7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBzd2l0Y2ggKHRoaXMuY29ubmVjdGlvblR5cGUpIHtcclxuICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzOlxyXG4gICAgICAgIHRoaXMub3BlbkhhbmRib29rRGlhbG9nKGZhbHNlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkF0dGFjaG1lbnQ6XHJcbiAgICAgICAgdGhpcy5vcGVuQXR0YWNobWVudERpYWxvZygpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkFuY2hvckJ5TmFtZUNoYW5nZSgpIHtcclxuICAgIHRoaXMudXBkYXRlQ2VsbFZpZXdWYWx1ZXMoKTtcclxuICB9XHJcblxyXG4gIG9wZW5IYW5kYm9va0RpYWxvZyhpc09ubHlEb2N1bWVudDogYm9vbGVhbikge1xyXG4gICAgY29uc3QgZGF0YSA9IG5ldyBRTVNDS0VkaXRvclJlbGF0aW9uKCk7XHJcbiAgICBkYXRhLmlzT25seURvY3VtZW50ID0gaXNPbmx5RG9jdW1lbnQ7XHJcbiAgICBkYXRhLmlzRW5hYmxlRm9sZGVyID0gIWlzT25seURvY3VtZW50O1xyXG4gICAgY29uc3QgZGlhbG9nVGVtcGxhdGUgPSB0aGlzLmRpYWxvZy5vcGVuKFFNU0NLRWRpdG9yUmVsYXRlZENvbXBvbmVudCwge1xyXG4gICAgICB3aWR0aDogJzY1MHB4JyxcclxuICAgICAgaGVpZ2h0OiAnNjUwcHgnLFxyXG4gICAgICBkYXRhLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcclxuICAgIH0pO1xyXG4gICAgZGlhbG9nVGVtcGxhdGVcclxuICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgdGhpcy5kb2N1bWVudFR5cGUgPSByZXN1bHQudHlwZTtcclxuICAgICAgICAgIHRoaXMubGlua0lkID0gdGhpcy5nZXRMaW5rSWQocmVzdWx0LnVybCwgcmVzdWx0LnR5cGUpO1xyXG4gICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLmRvY3VtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMubGlua1RpdGxlID0gYCR7cmVzdWx0LnRpdGxlfSgke3Jlc3VsdC5pZH0pYDtcclxuICAgICAgICAgICAgdGhpcy5nZXRBbmNob3JEb2N1bWVudChyZXN1bHQuaWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubGlua1VybCA9IHJlc3VsdC51cmw7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5saW5rVGl0bGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLmxpbmtUaXRsZSA9IHJlc3VsdC50aXRsZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRhcmdldCA9IFRhcmdldFR5cGVOYW1lLm5ldztcclxuICAgICAgICAgIHRoaXMudXBkYXRlQ2VsbFZpZXdWYWx1ZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uVHlwZSA9IDA7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb3BlbkF0dGFjaG1lbnREaWFsb2coKSB7XHJcbiAgICBjb25zdCBkYXRhID0gbmV3IFFNU0NLRWRpdG9yUGFyYW10ZXIoKTtcclxuICAgIGRhdGEubW9kdWxlID0gdGhpcy5tb2R1bGU7XHJcbiAgICBkYXRhLmVudGl0eUlkID0gdGhpcy5lbnRpdHlJZDtcclxuICAgIGNvbnN0IGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihMaW5rQXR0YWNobWVudENvbXBvbmVudCwge1xyXG4gICAgICB3aWR0aDogJzY1MHB4JyxcclxuICAgICAgaGVpZ2h0OiAnNjUwcHgnLFxyXG4gICAgICBkYXRhLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcclxuICAgIH0pO1xyXG4gICAgZGlhbG9nVGVtcGxhdGVcclxuICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgdGhpcy5kb2N1bWVudFR5cGUgPSBRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5vdGhlcjtcclxuICAgICAgICAgIHRoaXMubGlua1VybCA9IHJlc3VsdC51cmw7XHJcbiAgICAgICAgICBpZiAoIXRoaXMubGlua1RpdGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGlua1RpdGxlID0gcmVzdWx0LnRpdGxlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRhcmdldCA9IFRhcmdldFR5cGVOYW1lLm5ldztcclxuICAgICAgICAgIHRoaXMudXBkYXRlQ2VsbFZpZXdWYWx1ZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uVHlwZSA9IDA7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0QW5jaG9yRG9jdW1lbnQoZG9jdW1lbnRJZCkge1xyXG4gICAgdGhpcy5pc0xvYWRpbmdEb2N1bWVudEFuY2hvciA9IHRydWU7XHJcbiAgICB0aGlzLmxpbmtTZXJ2aWNlXHJcbiAgICAgIC5nZXRBbmNob3JEb2N1bWVudExpc3QoZG9jdW1lbnRJZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZSgoZG9jdW1lbnRzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kb2N1bWVudEFuY2hvcnMgPSB0aGlzLmV4dHJhY3REb2N1bWVudEFuY2hvcnMoZG9jdW1lbnRzIHx8IFtdKTtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZ0RvY3VtZW50QW5jaG9yID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZXh0cmFjdERvY3VtZW50QW5jaG9ycyhhbmNob3JEb2N1bWVudDogUU1TQ0tFZGl0b3JMaW5rQW5jaG9yRG9jdW1lbnRbXSkge1xyXG4gICAgY29uc3QgYW5jaG9yczogSUFuY2hvcltdID0gW3sgdmFsdWU6IDAsIHZpZXdWYWx1ZTogJycsIGFuY2hvclZhbHVlOiBMaW5rQW5jaG9yLkJsYW5rIH1dO1xyXG4gICAgbGV0IGlkID0gMztcclxuICAgIGlmIChhbmNob3JEb2N1bWVudCkge1xyXG4gICAgICBhbmNob3JEb2N1bWVudC5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgZGl2LmlubmVySFRNTCA9IGUucmljaFRleHQ7XHJcbiAgICAgICAgY29uc3QgZG9tQ29udGVudCA9IGRpdjtcclxuICAgICAgICBjb25zdCBhVGFncyA9IGRvbUNvbnRlbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2EnKTtcclxuICAgICAgICBpZiAoYVRhZ3MpIHtcclxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpwcmVmZXItZm9yLW9mXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFUYWdzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhZyA9IGFUYWdzW2ldO1xyXG4gICAgICAgICAgICBpZiAodGFnLm5hbWUpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGFuY2hvcnMuZmluZEluZGV4KCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geC5hbmNob3JWYWx1ZSA9PT0gdGFnLm5hbWU7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgYW5jaG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgdmFsdWU6IGlkLFxyXG4gICAgICAgICAgICAgICAgICB2aWV3VmFsdWU6IHRhZy5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICBhbmNob3JWYWx1ZTogdGFnLm5hbWVcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWQgKz0gMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgYW5jaG9ycy5wdXNoKHtcclxuICAgICAgdmFsdWU6IDEsXHJcbiAgICAgIHZpZXdWYWx1ZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLkFOQ0hPUl9BVFRBQ0hNRU5ULFxyXG4gICAgICBhbmNob3JWYWx1ZTogTGlua0FuY2hvci5BdHRhY2htZW50XHJcbiAgICB9KTtcclxuICAgIGFuY2hvcnMucHVzaCh7XHJcbiAgICAgIHZhbHVlOiAyLFxyXG4gICAgICB2aWV3VmFsdWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5BTkNIT1JfUkVMQVRFRF9ET0NVTUVOVCxcclxuICAgICAgYW5jaG9yVmFsdWU6IExpbmtBbmNob3IuUmVsYXRlZFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYW5jaG9ycztcclxuICB9XHJcblxyXG4gIHJlbG9hZEFuY2hvcnMoKSB7XHJcbiAgICBpZiAoISF0aGlzLmxpbmtJZCAmJiB0aGlzLmRvY3VtZW50VHlwZSA9PSBRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5kb2N1bWVudCkge1xyXG4gICAgICB0aGlzLmdldEFuY2hvckRvY3VtZW50KHRoaXMubGlua0lkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGJ1aWxkTGluaygpIHtcclxuICAgIGNvbnN0IGxpbmsgPSBuZXcgSUxpbmsoKTtcclxuICAgIGxpbmsudGFyZ2V0ID0gdGhpcy5zZWxlY3RlZFRhcmdldDtcclxuICAgIGxpbmsudGl0bGUgPSB0aGlzLmxpbmtUaXRsZTtcclxuICAgIGxpbmsudXJsID0gdGhpcy5saW5rVXJsO1xyXG4gICAgbGluay5kb2N1bWVudFR5cGUgPSB0aGlzLmRvY3VtZW50VHlwZSB8fCBRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5vdGhlcjtcclxuICAgIGxpbmsuaWNvbiA9IHRoaXMuZG9jdW1lbnRJY29uc1tsaW5rLmRvY3VtZW50VHlwZV07XHJcbiAgICBsaW5rLmNvbnRlbnQgPSAnJztcclxuICAgIHN3aXRjaCAodGhpcy5kb2N1bWVudFR5cGUpIHtcclxuICAgICAgY2FzZSBRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5kb2N1bWVudDpcclxuICAgICAgICBsaW5rLnVybCA9IGAke0NLRWRpdG9yTGlua0NvbnN0LkRPQ1VNRU5UX1BBUlRJQUxfVVJMfSR7dGhpcy5saW5rSWR9IyR7dGhpcy5hbmNob3JCeU5hbWV9YDtcclxuICAgICAgICBsaW5rLmNvbnRlbnQgPSBgJHt0aGlzLkxBTkcuUU1TQ0tFRElUT1IuSUR9OiAke3RoaXMubGlua0lkfWA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUucHJvY2VzczpcclxuICAgICAgICBsaW5rLmNvbnRlbnQgPSBgJHt0aGlzLkxBTkcuUU1TQ0tFRElUT1IuSUR9OiAke3RoaXMubGlua0lkfWA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUuYXJlYTpcclxuICAgICAgICBsaW5rLmNvbnRlbnQgPSBgJHt0aGlzLkxBTkcuUU1TQ0tFRElUT1IuSUR9OiAke3RoaXMubGlua0lkfWA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUuZm9sZGVyOlxyXG4gICAgICAgIGxpbmsuY29udGVudCA9IGAke3RoaXMuTEFORy5RTVNDS0VESVRPUi5JRH06ICR7dGhpcy5saW5rSWR9YDtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBsaW5rO1xyXG4gIH1cclxuXHJcbiAgb25TYXZlQXNUZW1wbGF0ZSgpIHtcclxuICAgIGNvbnN0IGdyYXBoID0gd2luZG93W0Zsb3dDaGFydENvbnN0LkdSQVBIXTtcclxuICAgIGNvbnN0IGpzb25Db250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZ3JhcGgudG9KU09OKCkpO1xyXG4gICAgbGV0IHRlbXBsYXRlID0gbmV3IFFNU0NLRWRpdG9yQnBtbigpO1xyXG4gICAgdGVtcGxhdGUgPSB7XHJcbiAgICAgIGlkOiBndWlkSGVscGVyLmVtcHR5LFxyXG4gICAgICBqc29uQ29udGVudDoganNvbkNvbnRlbnQsXHJcbiAgICAgIGlzVGVtcGxhdGU6IHRydWUsXHJcbiAgICAgIHRlbXBsYXRlTmFtZTogJydcclxuICAgIH1cclxuICAgIGxldCBkYXRhID0gbmV3IFFNU0NLRWRpdG9yU2F2ZUFzVGVtcGxhdGUoKTtcclxuICAgIGRhdGEudGVtcGxhdGVUeXBlID0gQ0tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0JQTU47XHJcbiAgICBkYXRhLmJwbW4gPSB0ZW1wbGF0ZTtcclxuICAgIGNvbnN0IGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihTYXZlVGVtcGxhdGVDb21wb25lbnQsIHtcclxuICAgICAgd2lkdGg6ICc0NTBweCcsXHJcbiAgICAgIGhlaWdodDogJzIyMHB4JyxcclxuICAgICAgZGF0YSxcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIGRpYWxvZ1RlbXBsYXRlXHJcbiAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgIC8vIFRET1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGVkVGVtcGxhdGUoKSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZEpzb25Db250ZW50ID0gd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX0pTT05fQ09OVEVOVF07XHJcbiAgICBpZiAoc2VsZWN0ZWRKc29uQ29udGVudCkge1xyXG4gICAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5HUkFQSF07XHJcbiAgICAgIGlmIChncmFwaCkge1xyXG4gICAgICAgIGdyYXBoLmZyb21KU09OKEpTT04ucGFyc2Uoc2VsZWN0ZWRKc29uQ29udGVudCkpO1xyXG4gICAgICB9XHJcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddID0gbnVsbDtcclxuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX1NIQVBFX0lEXSA9ICcnO1xyXG4gICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0hBUEVfVFlQRV0gPSAnJztcclxuICAgICAgdGhpcy5vblNlbGV0ZWRDZWxsVmlldygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25EZWxldGVUZW1wbGF0ZSh0aXRsZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGRhdGE6IFFNU0NLRWRpdG9yRGlhbG9nRGF0YSA9IG5ldyBRTVNDS0VkaXRvckRpYWxvZ0RhdGEoKTtcclxuICAgIGRhdGEudGl0bGUgPSB0aXRsZTtcclxuICAgIGRhdGEuY29udGVudCA9IGNvbnRlbnQ7XHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFFNU0NLRWRpdG9yQ29uZmlybUNvbXBvbmVudCwge1xyXG4gICAgICB3aWR0aDogJzUwMHB4JyxcclxuICAgICAgbWluSGVpZ2h0OiAnMTc1cHgnLFxyXG4gICAgICBkYXRhXHJcbiAgICB9KTtcclxuICAgIGRpYWxvZ1JlZlxyXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblNlbGV0ZWRDZWxsVmlldygpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRDZWxsVmlldyA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddO1xyXG4gICAgdGhpcy5pbml0TGluaygpO1xyXG4gICAgaWYgKCEhdGhpcy5zZWxlY3RlZENlbGxWaWV3KSB7XHJcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB0aGlzLnNlbGVjdGVkQ2VsbFZpZXcubW9kZWwuYXR0cmlidXRlcztcclxuICAgICAgY29uc3QgZXhjbHVkZWRUeXBlcyA9IFsnYnBtbjIuRmxvdycsICdicG1uMi5IZWFkZXJlZFBvb2wnLCAnYnBtbjIuQ29udmVyc2F0aW9uTGluaycsICdicG1uMi5Bbm5vdGF0aW9uTGluaycsICdicG1uMi5EYXRhQXNzb2NpYXRpb24nXTtcclxuICAgICAgaWYgKCFhdHRyaWJ1dGVzLnR5cGUgfHwgZXhjbHVkZWRUeXBlcy5maW5kSW5kZXgodHlwZSA9PiB0eXBlLnRvTG93ZXJDYXNlKCkgPT0gYXR0cmlidXRlcy50eXBlLnRvTG93ZXJDYXNlKCkpID4gLTEpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ2VsbFZpZXcgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMubGlua1VybCA9IGF0dHJpYnV0ZXMubGlua1VybCB8fCAnJztcclxuICAgICAgICBpZiAoISF0aGlzLmxpbmtVcmwpIHtcclxuICAgICAgICAgIHRoaXMucGFyc2VMaW5rVXJsKHRoaXMubGlua1VybCk7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFyZ2V0ID0gYXR0cmlidXRlcy5saW5rVGFyZ2V0O1xyXG4gICAgICAgICAgdGhpcy5saW5rVGl0bGUgPSBhdHRyaWJ1dGVzLmxpbmtUaXRsZTtcclxuICAgICAgICAgIHRoaXMubGluayA9IHRoaXMuYnVpbGRMaW5rKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblRhYkNoYW5nZSgkZXZlbnQ6IE1hdFRhYkNoYW5nZUV2ZW50KSB7XHJcbiAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuVEFCX05BTUVdID0gJGV2ZW50LnRhYi50ZXh0TGFiZWw7XHJcbiAgICBpZiAoJGV2ZW50LnRhYi50ZXh0TGFiZWwgPT0gdGhpcy5MQU5HLkJQTU4uUFJPUEVSVElFUykge1xyXG4gICAgICB0aGlzLmJwbW5TZXJ2aWNlLm9wZW5TaGFwZUZ1bmN0aW9uYWxpdHkodGhpcy5MQU5HKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHBhcnNlTGlua1VybCh1cmw6IHN0cmluZykge1xyXG4gICAgaWYgKCEhdXJsKSB7XHJcbiAgICAgIGNvbnN0IGhhc2hJbmRleCA9IHVybC5pbmRleE9mKCcjJyk7XHJcbiAgICAgIHRoaXMuZG9jdW1lbnRUeXBlID0gdGhpcy5nZXREb2N1bWVudFR5cGUodXJsKTtcclxuICAgICAgdGhpcy5saW5rSWNvbiA9IHRoaXMuZG9jdW1lbnRJY29uc1t0aGlzLmRvY3VtZW50VHlwZV07XHJcbiAgICAgIHRoaXMubGlua0lkID0gdGhpcy5nZXRMaW5rSWQodXJsLCB0aGlzLmRvY3VtZW50VHlwZSk7XHJcbiAgICAgIGlmICghIXRoaXMubGlua0lkICYmIHRoaXMuZG9jdW1lbnRUeXBlID09IFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLmRvY3VtZW50ICYmIGhhc2hJbmRleCA+IC0xKSB7XHJcbiAgICAgICAgdGhpcy5hbmNob3JCeU5hbWUgPSB1cmwuc3Vic3RyKGhhc2hJbmRleCArIDEsIHVybC5sZW5ndGggLSBoYXNoSW5kZXgpO1xyXG4gICAgICAgIHRoaXMuZ2V0QW5jaG9yRG9jdW1lbnQodGhpcy5saW5rSWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQYXJ0aWFsVXJsKHR5cGU6IFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5kb2N1bWVudDpcclxuICAgICAgICByZXR1cm4gQ0tFZGl0b3JMaW5rQ29uc3QuRE9DVU1FTlRfUEFSVElBTF9VUkw7XHJcbiAgICAgIGNhc2UgUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUucHJvY2VzczpcclxuICAgICAgICByZXR1cm4gQ0tFZGl0b3JMaW5rQ29uc3QuUFJPQ0VTU19QQVJUSUFMX1VSTDtcclxuICAgICAgY2FzZSBRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5hcmVhOlxyXG4gICAgICAgIHJldHVybiBDS0VkaXRvckxpbmtDb25zdC5BUkVBX1BBUlRJQUxfVVJMO1xyXG4gICAgICBjYXNlIFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLmZvbGRlcjpcclxuICAgICAgICByZXR1cm4gQ0tFZGl0b3JMaW5rQ29uc3QuRk9MREVSX1BBUlRJQUxfVVJMO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldExpbmtJZCh1cmw6IHN0cmluZywgdHlwZTogUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUpIHtcclxuICAgIGxldCBwYXJ0aWFsVXJsSW5kZXggPSAwO1xyXG4gICAgbGV0IHBhcnRpYWxVcmxMZW5ndGggPSAwO1xyXG4gICAgbGV0IGlkID0gJyc7XHJcbiAgICBsZXQgZnJvbSA9IDA7XHJcbiAgICBsZXQgdXJsTG93ZXJDYXNlID0gISF1cmwgPyB1cmwudG9Mb3dlckNhc2UoKSA6ICcnO1xyXG5cclxuICAgIGNvbnN0IHBhcnRpYWxVcmwgPSB0aGlzLmdldFBhcnRpYWxVcmwodHlwZSkudG9Mb3dlckNhc2UoKTtcclxuICAgIGNvbnN0IGhhc2hJbmRleCA9IHVybExvd2VyQ2FzZS5pbmRleE9mKCcjJyk7XHJcblxyXG4gICAgaWYgKCEhcGFydGlhbFVybCkge1xyXG4gICAgICBwYXJ0aWFsVXJsSW5kZXggPSB1cmxMb3dlckNhc2UuaW5kZXhPZihwYXJ0aWFsVXJsKTtcclxuXHJcbiAgICAgIHBhcnRpYWxVcmxMZW5ndGggPSBwYXJ0aWFsVXJsLmxlbmd0aDtcclxuICAgICAgZnJvbSA9IHBhcnRpYWxVcmxJbmRleCArIHBhcnRpYWxVcmxMZW5ndGg7XHJcblxyXG4gICAgICBpZiAodHlwZSA9PSBRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5kb2N1bWVudCAmJiBoYXNoSW5kZXggPiAtMSkge1xyXG4gICAgICAgIGlkID0gdXJsTG93ZXJDYXNlLnN1YnN0cihmcm9tLCBoYXNoSW5kZXggLSBmcm9tKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCBsZW5ndGggPSB1cmxMb3dlckNhc2Uuc3Vic3RyKGZyb20pLmluZGV4T2YoJy8nKTtcclxuICAgICAgICBpZiAobGVuZ3RoIDwgMCkge1xyXG4gICAgICAgICAgaWQgPSB1cmxMb3dlckNhc2Uuc3Vic3RyKGZyb20pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlkID0gdXJsTG93ZXJDYXNlLnN1YnN0cihmcm9tLCBsZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlID09IFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLmRvY3VtZW50KSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgcGFyc2VJbnQoaWQsIDEwKTtcclxuICAgICAgfVxyXG4gICAgICBjYXRjaCB7XHJcbiAgICAgICAgaWQgPSAnJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlkO1xyXG4gIH1cclxuXHJcbiAgZ2V0RG9jdW1lbnRUeXBlKHVybDogc3RyaW5nKSB7XHJcbiAgICBpZiAodXJsLmluZGV4T2YoQ0tFZGl0b3JMaW5rQ29uc3QuRE9DVU1FTlRfUEFSVElBTF9VUkwpID4gLTEpIHtcclxuICAgICAgcmV0dXJuIFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLmRvY3VtZW50O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodXJsLmluZGV4T2YoQ0tFZGl0b3JMaW5rQ29uc3QuUFJPQ0VTU19QQVJUSUFMX1VSTCkgPiAtMSkge1xyXG4gICAgICByZXR1cm4gUU1TQ0tFZGl0b3JEb2N1bWVudFR5cGUucHJvY2VzcztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHVybC5pbmRleE9mKENLRWRpdG9yTGlua0NvbnN0LkFSRUFfUEFSVElBTF9VUkwpID4gLTEpIHtcclxuICAgICAgcmV0dXJuIFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLmFyZWE7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh1cmwuaW5kZXhPZihDS0VkaXRvckxpbmtDb25zdC5GT0xERVJfUEFSVElBTF9VUkwpID4gLTEpIHtcclxuICAgICAgcmV0dXJuIFFNU0NLRWRpdG9yRG9jdW1lbnRUeXBlLmZvbGRlcjtcclxuICAgIH1cclxuICAgIHJldHVybiBRTVNDS0VkaXRvckRvY3VtZW50VHlwZS5vdGhlcjtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUNlbGxWaWV3VmFsdWVzKCkge1xyXG4gICAgaWYgKCEhdGhpcy5zZWxlY3RlZENlbGxWaWV3KSB7XHJcbiAgICAgIHRoaXMubGluayA9IHRoaXMuYnVpbGRMaW5rKCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDZWxsVmlldy5tb2RlbC5wcm9wKCdsaW5rVXJsJywgdGhpcy5saW5rLnVybCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDZWxsVmlldy5tb2RlbC5wcm9wKCdsaW5rVGFyZ2V0JywgdGhpcy5saW5rLnRhcmdldCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDZWxsVmlldy5tb2RlbC5wcm9wKCdsaW5rVGl0bGUnLCB0aGlzLmxpbmsudGl0bGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25SZXNldFRlbXBsYXRlKCkge1xyXG4gICAgY29uc3Qgb2dySnNvbkNvbnRlbnQgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuT1JHX0pTT05DT05URU5UXTtcclxuICAgIGlmIChvZ3JKc29uQ29udGVudCkge1xyXG4gICAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5HUkFQSF07XHJcbiAgICAgIGlmIChncmFwaCkge1xyXG4gICAgICAgIGdyYXBoLmZyb21KU09OKEpTT04ucGFyc2Uob2dySnNvbkNvbnRlbnQpKTtcclxuICAgICAgICB0aGlzLmJwbW5TZXJ2aWNlLnNldERlZmF1bHRTZWxlY3RlZFZhbHVlKCk7XHJcbiAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LklTX1NFTEVDVEVEX1RFTVBMQVRFXSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddID0gbnVsbDtcclxuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX1NIQVBFX0lEXSA9ICcnO1xyXG4gICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0hBUEVfVFlQRV0gPSAnJztcclxuICAgICAgdGhpcy5vblNlbGV0ZWRDZWxsVmlldygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd0NvbmZpcm1EaWFsb2codGl0bGU6IHN0cmluZywgY29udGVudDogc3RyaW5nLCBpc01lc3NhZ2U6IGJvb2xlYW4sIGNhbGxiYWNrPzogKHJlc3VsdD86IGFueSkgPT4gdm9pZCkge1xyXG4gICAgY29uc3QgZGF0YTogUU1TQ0tFZGl0b3JEaWFsb2dEYXRhID0gbmV3IFFNU0NLRWRpdG9yRGlhbG9nRGF0YSgpO1xyXG4gICAgZGF0YS50aXRsZSA9IHRpdGxlO1xyXG4gICAgZGF0YS5jb250ZW50ID0gY29udGVudDtcclxuICAgIGRhdGEuaXNNZXNzYWdlID0gaXNNZXNzYWdlO1xyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihRTVNDS0VkaXRvckNvbmZpcm1Db21wb25lbnQsIHtcclxuICAgICAgd2lkdGg6ICc1MDBweCcsXHJcbiAgICAgIG1pbkhlaWdodDogJzE3NXB4JyxcclxuICAgICAgZGF0YVxyXG4gICAgfSk7XHJcbiAgICBkaWFsb2dSZWZcclxuICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICB0b0ltYWdlTWFwKGlkOiBhbnksIGNlbGxzOiBhbnlbXSwgY2xpZW50UmVjdDogYW55KSB7XHJcbiAgICBjb25zdCBtYXAgPSB7IG5hbWU6IGlkLCBpZDogaWQsIGFyZWFzOiBbXSwgaW1hZ2VIZWlnaHQ6IDAsIGltYWdlV2lkdGg6IDAgfTtcclxuICAgIG1hcC5pbWFnZUhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xyXG4gICAgbWFwLmltYWdlV2lkdGggPSBjbGllbnRSZWN0LndpZHRoO1xyXG4gICAgaWYgKGNlbGxzICYmIGNlbGxzLmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgIHZhciBpc1ZlcnRpY2FsUG9vbCA9IGZhbHNlO1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNlbGxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHNoYXBlID0gY2VsbHNbaV07XHJcbiAgICAgICAgbGV0IHNpemUgPSBzaGFwZVsnc2l6ZSddIHx8IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xyXG4gICAgICAgIGxldCBiYm94ID0gc2hhcGVbJ2Jib3gnXSB8fCB7IHg6IDAsIHk6IDAgfTtcclxuICAgICAgICBsZXQgcG9zaXRpb24gPSBzaGFwZVsncG9zaXRpb24nXSB8fCB7IHg6IDAsIHk6IDAgfTtcclxuICAgICAgICBiYm94LnggPSBwb3NpdGlvbi54O1xyXG4gICAgICAgIGJib3gueSA9IHBvc2l0aW9uLnk7XHJcbiAgICAgICAgYmJveC53aWR0aCA9IHNpemUud2lkdGg7XHJcbiAgICAgICAgYmJveC5oZWlnaHQgPSBzaXplLmhlaWdodDtcclxuICAgICAgICBzaGFwZVsnYmJveCddID0gYmJveDtcclxuICAgICAgICBzaGFwZVsnYWRkaXRpb25hbFdpZHRoJ10gPSAoYmJveC53aWR0aCA+IHNpemUud2lkdGgpID8gKGJib3gud2lkdGggLSBzaXplLndpZHRoKSA6IDA7XHJcbiAgICAgIH1cclxuICAgICAgdmFyIG9mZnNldFggPSB0aGlzLmdldE1pblhPZmZzZXQoY2VsbHMpO1xyXG4gICAgICB2YXIgb2Zmc2V0WSA9IHRoaXMuZ2V0TWluWU9mZnNldChjZWxscyk7XHJcblxyXG4gICAgICB2YXIgYWRkaXRpb25hbE9mZnNldFkgPSAwO1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNlbGxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHNoYXBlID0gY2VsbHNbaV07XHJcbiAgICAgICAgbGV0IGhyZWYgPSBzaGFwZS5saW5rVXJsO1xyXG4gICAgICAgIGxldCB0YXJnZXQgPSBzaGFwZS5saW5rVGFyZ2V0O1xyXG4gICAgICAgIGxldCBhbHQgPSBzaGFwZS5saW5rVGl0bGU7XHJcblxyXG4gICAgICAgIGlmIChzaGFwZS50eXBlID09ICdicG1uMi5Qb29sJyB8fCBzaGFwZS50eXBlID09ICdicG1uMi5IZWFkZXJlZFBvb2wnKSB7XHJcbiAgICAgICAgICBhZGRpdGlvbmFsT2Zmc2V0WSA9IChzaGFwZS5hZGRpdGlvbmFsV2lkdGggLyAyKTtcclxuICAgICAgICAgIGlzVmVydGljYWxQb29sID0gKHNoYXBlLnR5cGUgPT0gJ2JwbW4yLlBvb2wnIHx8IHNoYXBlLnR5cGUgPT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpICYmIHNoYXBlLmFuZ2xlICE9IDAgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghIWhyZWYgJiYgaHJlZi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB2YXIgc2l6ZSA9IHNoYXBlWydzaXplJ10gfHwgeyB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XHJcbiAgICAgICAgICB2YXIgYmJveCA9IHNoYXBlWydiYm94J10gfHwgeyB4OiAwLCB5OiAwIH07XHJcbiAgICAgICAgICB2YXIgcG9zaXRpb24gPSBzaGFwZVsncG9zaXRpb24nXSB8fCB7IHg6IDAsIHk6IDAgfTtcclxuICAgICAgICAgIGJib3gueCA9IHBvc2l0aW9uLng7XHJcbiAgICAgICAgICBiYm94LnkgPSBwb3NpdGlvbi55O1xyXG4gICAgICAgICAgYmJveC53aWR0aCA9IHNpemUud2lkdGg7XHJcbiAgICAgICAgICBiYm94LmhlaWdodCA9IHNpemUuaGVpZ2h0O1xyXG4gICAgICAgICAgdmFyIGFkZGl0aW9uYWxPZmZzZXRYID0gKHNoYXBlLmFkZGl0aW9uYWxXaWR0aCAvIDIpO1xyXG5cclxuICAgICAgICAgIHZhciB4MSwgeTEsIHgyLCB5MjtcclxuXHJcbiAgICAgICAgICBpZiAoc2hhcGUuaW5jbHVkZVRleHRJbkNsaWNrYWJsZUFyZWEgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB4MSA9IChiYm94LnggLSBvZmZzZXRYIC0gYWRkaXRpb25hbE9mZnNldFgpO1xyXG4gICAgICAgICAgICB5MSA9IChiYm94LnkgLSBvZmZzZXRZKTtcclxuICAgICAgICAgICAgeDIgPSAoeDEgKyBzaGFwZS5iYm94LndpZHRoIC0gMSk7XHJcbiAgICAgICAgICAgIHkyID0gKHkxICsgc2hhcGUuYmJveC5oZWlnaHQpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVggPSBvZmZzZXRYLCB0cmFuc2Zvcm1ZID0gb2Zmc2V0WTtcclxuICAgICAgICAgICAgaWYgKG9mZnNldFggPCAwICYmIGlzVmVydGljYWxQb29sKSB7XHJcbiAgICAgICAgICAgICAgdHJhbnNmb3JtWCA9IG9mZnNldFggKyBzaXplLmhlaWdodDtcclxuICAgICAgICAgICAgICB0cmFuc2Zvcm1ZID0gb2Zmc2V0WSAtIHNpemUuaGVpZ2h0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChvZmZzZXRZIDwgMCAmJiBpc1ZlcnRpY2FsUG9vbCkge1xyXG4gICAgICAgICAgICAgIHRyYW5zZm9ybVkgPSBvZmZzZXRZICsgYWRkaXRpb25hbE9mZnNldFk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgeDEgPSAoYmJveC54IC0gdHJhbnNmb3JtWCk7XHJcbiAgICAgICAgICAgIHkxID0gKGJib3gueSAtIHRyYW5zZm9ybVkpO1xyXG4gICAgICAgICAgICB4MiA9ICh4MSArIHNpemUud2lkdGggLSAxKTtcclxuICAgICAgICAgICAgeTIgPSAoeTEgKyBzaXplLmhlaWdodCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsZXQgY29vcmRzID0gYCR7eDF9LCR7eTF9LCR7eDJ9LCR7eTJ9YDtcclxuICAgICAgICAgIHN3aXRjaCAoc2hhcGUudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICdicG1uMi5BY3Rpdml0eSc6XHJcbiAgICAgICAgICAgIGNhc2UgJ2JwbW4yLkdhdGV3YXknOlxyXG4gICAgICAgICAgICBjYXNlICdicG1uMi5FdmVudCc6XHJcbiAgICAgICAgICAgIGNhc2UgJ2JwbW4yLkNvbnZlcnNhdGlvbic6XHJcbiAgICAgICAgICAgIGNhc2UgJ2JwbW4yLkRhdGFPYmplY3QnOlxyXG4gICAgICAgICAgICBjYXNlICdicG1uMi5EYXRhU3RvcmUnOlxyXG4gICAgICAgICAgICBjYXNlICdicG1uLkNob3Jlb2dyYXBoeSc6XHJcbiAgICAgICAgICAgIGNhc2UgJ2JwbW4uTWVzc2FnZSc6XHJcbiAgICAgICAgICAgICAgbWFwLmFyZWFzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgc2hhcGU6ICdyZWN0JyxcclxuICAgICAgICAgICAgICAgIGNvb3JkczogY29vcmRzLFxyXG4gICAgICAgICAgICAgICAgaHJlZjogaHJlZixcclxuICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxyXG4gICAgICAgICAgICAgICAgYWx0OiBhbHRcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICBtYXAuYXJlYXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBzaGFwZTogJ3JlY3QnLFxyXG4gICAgICAgICAgICAgICAgY29vcmRzOiBjb29yZHMsXHJcbiAgICAgICAgICAgICAgICBocmVmOiBocmVmLFxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICBhbHQ6IGFsdFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1hcDtcclxuICB9XHJcblxyXG4gIGdldE1pblhPZmZzZXQoc2hhcGVzKSB7XHJcbiAgICB2YXIgZmlsdGVyU2hhcGVzID0gc2hhcGVzLmZpbHRlcihmdW5jdGlvbiAocykge1xyXG4gICAgICByZXR1cm4gcy50eXBlICE9PSAnYnBtbjIuRmxvdydcclxuICAgICAgICAmJiBzLnR5cGUgIT0gJ2JwbW4yLkNvbnZlcnNhdGlvbkxpbmsnXHJcbiAgICAgICAgJiYgcy50eXBlICE9ICdicG1uMi5EYXRhQXNzb2NpYXRpb24nXHJcbiAgICAgICAgJiYgcy50eXBlICE9ICdicG1uMi5Bbm5vdGF0aW9uTGluaydcclxuICAgIH0pO1xyXG5cclxuICAgIHZhciBtaW5WYWx1ZTtcclxuICAgIHZhciBtaW5PYmplY3Q7XHJcblxyXG4gICAgaWYgKCFmaWx0ZXJTaGFwZXMgfHwgIWZpbHRlclNoYXBlcy5sZW5ndGgpIHtcclxuICAgICAgbWluVmFsdWUgPSB0aGlzLmdldFhQb3NpdGlvbihzaGFwZXNbMF0pO1xyXG4gICAgICBtaW5PYmplY3QgPSBzaGFwZXNbMF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBtaW5WYWx1ZSA9IHRoaXMuZ2V0WFBvc2l0aW9uKGZpbHRlclNoYXBlc1swXSk7XHJcbiAgICAgIG1pbk9iamVjdCA9IGZpbHRlclNoYXBlc1swXTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGZpbHRlclNoYXBlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB2YXIgeFBvc2l0aW9uID0gdGhpcy5nZXRYUG9zaXRpb24oZmlsdGVyU2hhcGVzW2ldKTtcclxuICAgICAgaWYgKHhQb3NpdGlvbiA8IG1pblZhbHVlKSB7XHJcbiAgICAgICAgbWluVmFsdWUgPSB4UG9zaXRpb247XHJcbiAgICAgICAgbWluT2JqZWN0ID0gZmlsdGVyU2hhcGVzW2ldO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHJldHVybiBtaW5WYWx1ZTtcclxuICB9XHJcblxyXG4gIGdldFhQb3NpdGlvbihzaGFwZSkge1xyXG4gICAgcmV0dXJuIHNoYXBlLmJib3gueCAtIChzaGFwZS5hZGRpdGlvbmFsV2lkdGggLyAyKTtcclxuICB9XHJcblxyXG4gIGdldFlQb3NpdGlvbihzaGFwZSkge1xyXG4gICAgcmV0dXJuIHNoYXBlLmJib3gueSAtIChzaGFwZS5hZGRpdGlvbmFsV2lkdGggLyAyKTtcclxuICB9XHJcblxyXG4gIGdldE1pbllPZmZzZXQoc2hhcGVzKSB7XHJcbiAgICB2YXIgZmlsdGVyU2hhcGVzID0gc2hhcGVzLmZpbHRlcihmdW5jdGlvbiAocykge1xyXG4gICAgICByZXR1cm4gcy50eXBlICE9PSAnYnBtbjIuRmxvdydcclxuICAgICAgICAmJiBzLnR5cGUgIT0gJ2JwbW4yLkNvbnZlcnNhdGlvbkxpbmsnXHJcbiAgICAgICAgJiYgcy50eXBlICE9ICdicG1uMi5EYXRhQXNzb2NpYXRpb24nXHJcbiAgICAgICAgJiYgcy50eXBlICE9ICdicG1uMi5Bbm5vdGF0aW9uTGluaydcclxuICAgIH0pO1xyXG4gICAgdmFyIG1pblZhbHVlO1xyXG4gICAgdmFyIG1pbk9iamVjdDtcclxuXHJcbiAgICBpZiAoIWZpbHRlclNoYXBlcyB8fCAhZmlsdGVyU2hhcGVzLmxlbmd0aCkge1xyXG4gICAgICBtaW5WYWx1ZSA9IHNoYXBlc1swXS5iYm94Lnk7XHJcbiAgICAgIG1pbk9iamVjdCA9IHNoYXBlc1swXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG1pblZhbHVlID0gZmlsdGVyU2hhcGVzWzBdLmJib3gueTtcclxuICAgICAgbWluT2JqZWN0ID0gZmlsdGVyU2hhcGVzWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgZmlsdGVyU2hhcGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHZhciB5UG9zaXRpb24gPSB0aGlzLmdldFlQb3NpdGlvbihmaWx0ZXJTaGFwZXNbaV0pO1xyXG4gICAgICBpZiAoeVBvc2l0aW9uIDwgbWluVmFsdWUpIHtcclxuICAgICAgICBtaW5WYWx1ZSA9IHlQb3NpdGlvbjtcclxuICAgICAgICBtaW5PYmplY3QgPSBmaWx0ZXJTaGFwZXNbaV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBtaW5WYWx1ZTtcclxuICB9O1xyXG5cclxuXHJcbiAgY2hlY2tDYXNlQnBtbkV4cGFuZFBhbmVsKCkge1xyXG4gICAgaWYgKHRoaXMuYnBtblNlcnZpY2UuaXNGdWxsU2NyZWVuICYmICF0aGlzLmV4cGFuZGVkUGFuZWwpXHJcbiAgICAgIHJldHVybiBRTVNDS0VkaXRvckJwbW5FeHBhbmQuaXNGdWxsU2NyZWVuQW5kbm90RXhwYW5kUGFuZWw7XHJcblxyXG4gICAgaWYgKHRoaXMuYnBtblNlcnZpY2UuaXNGdWxsU2NyZWVuICYmIHRoaXMuZXhwYW5kZWRQYW5lbClcclxuICAgICAgcmV0dXJuIFFNU0NLRWRpdG9yQnBtbkV4cGFuZC5pc0Z1bGxTY3JlZW5BbmRpc0V4cGFuZFBhbmVsO1xyXG5cclxuICAgIGlmICghdGhpcy5icG1uU2VydmljZS5pc0Z1bGxTY3JlZW4gJiYgIXRoaXMuZXhwYW5kZWRQYW5lbClcclxuICAgICAgcmV0dXJuIFFNU0NLRWRpdG9yQnBtbkV4cGFuZC5ub3RGdWxsU2NyZWVuQW5kbm90RXhwYW5kUGFuZWw7XHJcblxyXG4gICAgaWYgKCF0aGlzLmJwbW5TZXJ2aWNlLmlzRnVsbFNjcmVlbiAmJiB0aGlzLmV4cGFuZGVkUGFuZWwpXHJcbiAgICAgIHJldHVybiBRTVNDS0VkaXRvckJwbW5FeHBhbmQubm90RnVsbFNjcmVlbkFuZGlzRXhwYW5kUGFuZWw7XHJcbiAgfVxyXG59XHJcbiJdfQ==