@seniorsistemas/data-seniorx-core 3.1.0 → 3.2.0

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 (191) hide show
  1. package/core/constants/accordion.const.d.ts +4 -4
  2. package/core/constants/alert.const.d.ts +1 -1
  3. package/core/constants/autocomplete.const.d.ts +2 -2
  4. package/core/constants/badge.const.d.ts +1 -1
  5. package/core/constants/card.const.d.ts +8 -8
  6. package/core/constants/chips.const.d.ts +2 -2
  7. package/core/constants/code-editor.const.d.ts +4 -4
  8. package/core/constants/collapse-link.const.d.ts +2 -2
  9. package/core/constants/color-picker.const.d.ts +2 -2
  10. package/core/constants/combobox.const.d.ts +3 -3
  11. package/core/constants/context-selector.const.d.ts +1 -1
  12. package/core/constants/editable-overlay.const.d.ts +4 -4
  13. package/core/constants/fileupload.const.d.ts +3 -3
  14. package/core/constants/gantt.const.d.ts +1 -1
  15. package/core/constants/help-popover.const.d.ts +2 -2
  16. package/core/constants/hyperlink.const.d.ts +2 -2
  17. package/core/constants/info-sign.const.d.ts +1 -1
  18. package/core/constants/inline-edit.const.d.ts +4 -4
  19. package/core/constants/kanban.const.d.ts +2 -2
  20. package/core/constants/list.const.d.ts +1 -1
  21. package/core/constants/modalc.const.d.ts +1 -1
  22. package/core/constants/navigation-button.const.d.ts +3 -3
  23. package/core/constants/object-card.const.d.ts +2 -2
  24. package/core/constants/picklist.const.d.ts +2 -2
  25. package/core/constants/pin-code-field.const.d.ts +3 -3
  26. package/core/constants/popover.const.d.ts +1 -1
  27. package/core/constants/progressbar.const.d.ts +1 -1
  28. package/core/constants/radio.const.d.ts +2 -2
  29. package/core/constants/rating-scale.const.d.ts +1 -1
  30. package/core/constants/sidebar.const.d.ts +1 -1
  31. package/core/constants/slider.const.d.ts +1 -1
  32. package/core/constants/split-button.const.d.ts +2 -2
  33. package/core/constants/spotlight.const.d.ts +8 -8
  34. package/core/constants/star-rating.const.d.ts +2 -2
  35. package/core/constants/tab.const.d.ts +3 -3
  36. package/core/constants/table.const.d.ts +1 -0
  37. package/core/constants/thumbnails.const.d.ts +4 -4
  38. package/core/constants/token-list.const.d.ts +1 -1
  39. package/core/types/table-column.type.d.ts +4 -0
  40. package/core/types/table-options.type.d.ts +3 -0
  41. package/core/types/table-shared.type.d.ts +1 -1
  42. package/core/types/tile-select.type.d.ts +17 -0
  43. package/esm2022/core/constants/accordion.const.mjs +5 -5
  44. package/esm2022/core/constants/alert.const.mjs +2 -2
  45. package/esm2022/core/constants/autocomplete.const.mjs +3 -3
  46. package/esm2022/core/constants/badge.const.mjs +2 -2
  47. package/esm2022/core/constants/card.const.mjs +9 -9
  48. package/esm2022/core/constants/chips.const.mjs +3 -3
  49. package/esm2022/core/constants/code-editor.const.mjs +5 -5
  50. package/esm2022/core/constants/collapse-link.const.mjs +3 -3
  51. package/esm2022/core/constants/color-picker.const.mjs +3 -3
  52. package/esm2022/core/constants/combobox.const.mjs +7 -4
  53. package/esm2022/core/constants/context-selector.const.mjs +2 -2
  54. package/esm2022/core/constants/editable-overlay.const.mjs +5 -5
  55. package/esm2022/core/constants/fileupload.const.mjs +4 -4
  56. package/esm2022/core/constants/gantt.const.mjs +2 -2
  57. package/esm2022/core/constants/help-popover.const.mjs +3 -3
  58. package/esm2022/core/constants/hyperlink.const.mjs +3 -3
  59. package/esm2022/core/constants/info-sign.const.mjs +2 -2
  60. package/esm2022/core/constants/inline-edit.const.mjs +5 -5
  61. package/esm2022/core/constants/kanban.const.mjs +3 -3
  62. package/esm2022/core/constants/list.const.mjs +2 -2
  63. package/esm2022/core/constants/loading-state.const.mjs +2 -2
  64. package/esm2022/core/constants/modalc.const.mjs +2 -2
  65. package/esm2022/core/constants/navigation-button.const.mjs +4 -4
  66. package/esm2022/core/constants/object-card.const.mjs +3 -3
  67. package/esm2022/core/constants/picklist.const.mjs +3 -3
  68. package/esm2022/core/constants/pin-code-field.const.mjs +4 -4
  69. package/esm2022/core/constants/popover.const.mjs +8 -2
  70. package/esm2022/core/constants/progressbar.const.mjs +2 -2
  71. package/esm2022/core/constants/radio.const.mjs +3 -3
  72. package/esm2022/core/constants/rating-scale.const.mjs +2 -2
  73. package/esm2022/core/constants/sidebar.const.mjs +2 -2
  74. package/esm2022/core/constants/slider.const.mjs +2 -2
  75. package/esm2022/core/constants/split-button.const.mjs +3 -3
  76. package/esm2022/core/constants/spotlight.const.mjs +9 -9
  77. package/esm2022/core/constants/star-rating.const.mjs +3 -3
  78. package/esm2022/core/constants/tab.const.mjs +4 -4
  79. package/esm2022/core/constants/table.const.mjs +4 -3
  80. package/esm2022/core/constants/thumbnails.const.mjs +5 -5
  81. package/esm2022/core/constants/token-list.const.mjs +2 -2
  82. package/esm2022/core/data/fontawesome-v5-solid-icons.data.mjs +2 -2
  83. package/esm2022/core/types/table-column.type.mjs +1 -1
  84. package/esm2022/core/types/table-options.type.mjs +1 -1
  85. package/esm2022/core/types/table-shared.type.mjs +1 -1
  86. package/esm2022/core/types/tile-select.type.mjs +8 -0
  87. package/esm2022/core/utils/combobox.util.mjs +6 -6
  88. package/esm2022/features/accordion/components/accordion-item/accordion-item.component.mjs +3 -3
  89. package/esm2022/features/autocomplete/autocomplete.component.mjs +3 -3
  90. package/esm2022/features/bignumber-input/bignumber-input.component.mjs +1 -1
  91. package/esm2022/features/breadcrumb/breadcrumb.component.mjs +3 -3
  92. package/esm2022/features/button/button.component.mjs +7 -3
  93. package/esm2022/features/card-list/card/card.component.mjs +2 -2
  94. package/esm2022/features/card-list/card-list.component.mjs +7 -3
  95. package/esm2022/features/chat/chat.component.mjs +4 -4
  96. package/esm2022/features/checkbox/checkbox.component.mjs +3 -3
  97. package/esm2022/features/checkbox-list/checkbox-list.component.mjs +3 -3
  98. package/esm2022/features/chips/chips.component.mjs +3 -3
  99. package/esm2022/features/code-editor/code-editor.component.mjs +23 -5
  100. package/esm2022/features/color-picker/color-picker.component.mjs +3 -3
  101. package/esm2022/features/country-phone-picker/country-phone-picker.component.mjs +3 -3
  102. package/esm2022/features/currency/currency.component.mjs +1 -1
  103. package/esm2022/features/editable-overlay/editable-overlay.component.mjs +3 -3
  104. package/esm2022/features/empty-state/empty-state.component.mjs +1 -1
  105. package/esm2022/features/fileupload/fileupload.component.mjs +4 -4
  106. package/esm2022/features/filters/filters.component.mjs +3 -3
  107. package/esm2022/features/help-popover/help-popover.component.mjs +2 -2
  108. package/esm2022/features/hyperlink/hyperlink.component.mjs +3 -3
  109. package/esm2022/features/icon-picker/icon-picker.component.mjs +1 -1
  110. package/esm2022/features/image-cropper/image-cropper.component.mjs +9 -9
  111. package/esm2022/features/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +1 -1
  112. package/esm2022/features/inline-edit/components/inline-edit-item/inline-edit-item.component.mjs +2 -2
  113. package/esm2022/features/list/list.component.mjs +7 -3
  114. package/esm2022/features/loading-state/loading-state.component.mjs +5 -5
  115. package/esm2022/features/localized-number-input/localized-number-input.component.mjs +4 -4
  116. package/esm2022/features/lookup/lookup.component.mjs +5 -5
  117. package/esm2022/features/mask/mask.component.mjs +4 -4
  118. package/esm2022/features/modal/modal.component.mjs +3 -3
  119. package/esm2022/features/modalc/modalc.component.mjs +3 -3
  120. package/esm2022/features/number-input/number-input.component.mjs +32 -5
  121. package/esm2022/features/object-card/components/object-card-field/object-card-field.component.mjs +1 -1
  122. package/esm2022/features/object-card/components/object-card-main/object-card-main.component.mjs +1 -1
  123. package/esm2022/features/object-card/object-card.component.mjs +2 -2
  124. package/esm2022/features/paginator/paginator.component.mjs +3 -3
  125. package/esm2022/features/panel/panel.component.mjs +6 -6
  126. package/esm2022/features/password-strength/password-strength.component.mjs +6 -6
  127. package/esm2022/features/picklist/picklist.component.mjs +6 -4
  128. package/esm2022/features/pin-code-field/pin-code-field.component.mjs +3 -3
  129. package/esm2022/features/profile-picture-picker/profile-picture-picker.component.mjs +11 -11
  130. package/esm2022/features/rating-scale/rating-scale.component.mjs +3 -3
  131. package/esm2022/features/row-card-list/row-card/row-card.component.mjs +100 -7
  132. package/esm2022/features/row-card-list/row-card-list.component.mjs +7 -3
  133. package/esm2022/features/scaffold/scaffold.component.mjs +3 -3
  134. package/esm2022/features/searchbox/searchbox.component.mjs +4 -4
  135. package/esm2022/features/select-button/select-button.component.mjs +5 -5
  136. package/esm2022/features/sidebar/sidebar.component.mjs +3 -3
  137. package/esm2022/features/slider/slider.component.mjs +3 -3
  138. package/esm2022/features/speech-recognition/speech-recognition.component.mjs +12 -12
  139. package/esm2022/features/spotlight/spotlight.component.mjs +2 -2
  140. package/esm2022/features/star-rating/star-rating.component.mjs +3 -3
  141. package/esm2022/features/switch/switch.component.mjs +4 -4
  142. package/esm2022/features/table/components/table-actions-menu.component.mjs +2 -2
  143. package/esm2022/features/table/components/table-cell-content.component.mjs +16 -10
  144. package/esm2022/features/table/table.component.mjs +46 -16
  145. package/esm2022/features/table/utils/table-visual.util.mjs +25 -7
  146. package/esm2022/features/textarea/textarea.component.mjs +3 -3
  147. package/esm2022/features/textbox/textbox.component.mjs +3 -3
  148. package/esm2022/features/tile-select/tile-select.component.mjs +80 -0
  149. package/esm2022/features/toast/toast.component.mjs +3 -3
  150. package/esm2022/features/tree/components/tree-node-item/tree-node-item.component.mjs +6 -6
  151. package/esm2022/features/visual-sql-editor/visual-sql-editor.component.mjs +2 -2
  152. package/esm2022/locales/en.json +4760 -4749
  153. package/esm2022/locales/es-CO.json +4760 -4749
  154. package/esm2022/locales/pt.json +4760 -4749
  155. package/esm2022/providers/features.provider.mjs +3 -1
  156. package/esm2022/public-api.mjs +3 -1
  157. package/features/button/button.component.d.ts +2 -1
  158. package/features/card-list/card-list.component.d.ts +3 -1
  159. package/features/code-editor/code-editor.component.d.ts +2 -1
  160. package/features/help-popover/help-popover.component.d.ts +1 -1
  161. package/features/inline-edit/components/inline-edit-item/inline-edit-item.component.d.ts +4 -4
  162. package/features/kanban/components/kanban-item-dragging/kanban-item-dragging.component.d.ts +2 -2
  163. package/features/list/list.component.d.ts +3 -1
  164. package/features/navigation-button/navigation-button.component.d.ts +3 -3
  165. package/features/number-input/number-input.component.d.ts +7 -1
  166. package/features/panel/panel.component.d.ts +1 -1
  167. package/features/picklist/picklist.component.d.ts +3 -2
  168. package/features/pin-code-field/pin-code-field.component.d.ts +3 -3
  169. package/features/row-card-list/row-card/row-card.component.d.ts +15 -2
  170. package/features/row-card-list/row-card-list.component.d.ts +3 -1
  171. package/features/spotlight/spotlight.component.d.ts +8 -8
  172. package/features/table/components/table-cell-content.component.d.ts +4 -1
  173. package/features/table/table.component.d.ts +9 -2
  174. package/features/table/utils/table-visual.util.d.ts +5 -0
  175. package/features/textarea/textarea.component.d.ts +1 -1
  176. package/features/thumbnails/components/thumbnail-item/thumbnail-item.component.d.ts +3 -3
  177. package/features/thumbnails/components/thumbnail-item-image/thumbnail-item-image.component.d.ts +1 -1
  178. package/features/thumbnails/components/thumbnail-item-video/thumbnail-item-video.component.d.ts +1 -1
  179. package/features/tile-select/tile-select.component.d.ts +21 -0
  180. package/fesm2022/seniorsistemas-data-seniorx-core-fontawesome-v5-solid-icons.data-fK3MF8KJ.mjs +4 -0
  181. package/fesm2022/{seniorsistemas-data-seniorx-core-fontawesome-v5-solid-icons.data-B7opbaVg.mjs.map → seniorsistemas-data-seniorx-core-fontawesome-v5-solid-icons.data-fK3MF8KJ.mjs.map} +1 -1
  182. package/fesm2022/seniorsistemas-data-seniorx-core.mjs +14859 -14534
  183. package/fesm2022/seniorsistemas-data-seniorx-core.mjs.map +1 -1
  184. package/package.json +57 -22
  185. package/public-api.d.ts +3 -0
  186. package/src/locales/en.json +4760 -4749
  187. package/src/locales/es-CO.json +4760 -4749
  188. package/src/locales/pt.json +4760 -4749
  189. package/styles/sdc-global-variables.scss +2 -2
  190. package/styles.css +2 -2
  191. package/fesm2022/seniorsistemas-data-seniorx-core-fontawesome-v5-solid-icons.data-B7opbaVg.mjs +0 -4
@@ -2303,7 +2303,7 @@ export class VisualSqlEditorComponent {
2303
2303
  return this.filterDraft.value;
2304
2304
  }
2305
2305
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: VisualSqlEditorComponent, deps: [{ token: i1.TranslateService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
2306
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: VisualSqlEditorComponent, isStandalone: true, selector: "sdc-visual-sql-editor", inputs: { loading: "loading", config: "config" }, outputs: { configChange: "configChange", save: "save", cancel: "cancel" }, host: { listeners: { "window:resize": "onWindowResize()" } }, providers: [VisualSqlEditorFlowService, VisualSqlEditorStateService], viewQueries: [{ propertyName: "sectionsContainer", first: true, predicate: ["sectionsContainer"], descendants: true }, { propertyName: "builderSections", predicate: ["builderSection"], descendants: true }], ngImport: i0, template: "<div class=\"dynamic-view-builder\" [attr.aria-busy]=\"loading\">\n <div class=\"dynamic-view-builder__toolbar\">\n <div class=\"dynamic-view-builder__toolbar-copy\">\n <div class=\"dynamic-view-builder__title\">\n {{ config.metadata.title }}\n </div>\n <div class=\"dynamic-view-builder__subtitle\">\n {{ config.metadata.description }}\n </div>\n </div>\n <div class=\"dynamic-view-builder__toolbar-actions\">\n <span class=\"dynamic-view-builder__toolbar-label\">\n {{ (config.translationPrefix + '.fields.layoutMode') | translate }}\n </span>\n <sdc-select-button\n [items]=\"layoutModeItems\"\n [ngModel]=\"selectedLayoutModeItems\"\n (ngModelChange)=\"onLayoutModeChange($event)\"\n ></sdc-select-button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__preview-toggle\"\n (click)=\"togglePreview()\"\n [attr.aria-pressed]=\"previewVisible\"\n [title]=\"previewToggleLabel\"\n [attr.aria-label]=\"previewToggleLabel\"\n >\n <i\n [class]=\"previewVisible ? 'fas fa-eye-slash' : 'fas fa-eye'\"\n aria-hidden=\"true\"\n ></i>\n {{ previewToggleLabel }}\n </button>\n </div>\n </div>\n\n @if (selectionModalVisible) {\n <sdc-modal\n [visible]=\"selectionModalVisible\"\n (visibleChange)=\"$event ? (selectionModalVisible = true) : closeSelectionModal()\"\n [header]=\"selectionModalTitle\"\n [width]=\"modalDimensions.selection.width\"\n [height]=\"modalDimensions.selection.height\"\n [maximizable]=\"false\"\n [footerButtons]=\"[]\"\n >\n <div\n class=\"dynamic-view-builder__modal-shell dynamic-view-builder__modal-shell--full\n dynamic-view-builder__selection-flow dynamic-view-builder__modal-stage\"\n >\n @if (selectionModalMode === 'tables') {\n <div class=\"dynamic-view-builder__modal-inline-surface\">\n <sdc-textbox\n [label]=\"modalSearchLabel\"\n [placeholder]=\"modalSearchPlaceholder\"\n [ngModel]=\"selectionModalSearch\"\n (ngModelChange)=\"selectionModalSearch = $event\"\n width=\"100%\"\n ></sdc-textbox>\n </div>\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__modal-stage-body\"\n >\n <div\n class=\"dynamic-view-builder__selection-table\n dynamic-view-builder__selection-table--chooser\n dynamic-view-builder__selection-table--fluid\"\n >\n <div class=\"dynamic-view-builder__selection-head\">\n <div class=\"dynamic-view-builder__selection-col\">\n {{ modalNameLabel }}\n </div>\n <div class=\"dynamic-view-builder__selection-col\">\n {{ modalTypeLabel }}\n </div>\n <div class=\"dynamic-view-builder__selection-col dynamic-view-builder__selection-col--select\">\n {{ modalSelectLabel }}\n </div>\n </div>\n <div class=\"dynamic-view-builder__selection-body\">\n @for (row of selectionModalRows; track trackById($index, row)) {\n <div\n class=\"dynamic-view-builder__selection-row\"\n [class.dynamic-view-builder__selection-row--selected]=\"row.selected\"\n [attr.role]=\"'button'\"\n [attr.tabindex]=\"row.disabled ? -1 : 0\"\n [attr.aria-pressed]=\"row.selected\"\n [attr.aria-disabled]=\"row.disabled\"\n (click)=\"toggleSelectionModalRow(row.id)\"\n (keydown)=\"onSelectableRowKeydown($event)\"\n >\n <div class=\"dynamic-view-builder__selection-cell\">\n @if (row.tableLabel) {\n <span class=\"dynamic-view-builder__selection-path\">\n @if (row.pathType === 'table') {\n @if (row.dbLabel) {\n <span class=\"dynamic-view-builder__selection-db\">{{ row.dbLabel }}</span>\n }\n @if (row.dbLabel) {\n <span class=\"dynamic-view-builder__selection-separator\">.</span>\n }\n <span class=\"dynamic-view-builder__selection-table-label\">{{ row.tableLabel }}</span>\n } @else {\n <span class=\"dynamic-view-builder__selection-table-label\">{{ row.tableLabel }}</span>\n <span class=\"dynamic-view-builder__selection-separator\">.</span>\n <span class=\"dynamic-view-builder__selection-accent\">{{ row.name }}</span>\n }\n </span>\n } @else {\n {{ row.name }}\n }\n </div>\n <div class=\"dynamic-view-builder__selection-cell dynamic-view-builder__selection-cell--meta\">\n <span>{{ row.meta }}</span>\n @if (row.note) {\n <span class=\"dynamic-view-builder__selection-note\">\n {{ row.note }}\n </span>\n }\n </div>\n <div class=\"dynamic-view-builder__selection-cell dynamic-view-builder__selection-cell--select\">\n <span\n class=\"dynamic-view-builder__selection-marker\"\n [class.dynamic-view-builder__selection-marker--selected]=\"row.selected\"\n aria-hidden=\"true\"\n >\n <i class=\"fas fa-check\"></i>\n </span>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n } @else {\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__picklist-shell dynamic-view-builder__modal-stage-body\"\n >\n <sdc-picklist\n [items]=\"selectionModalPicklistItems\"\n [selectedIds]=\"selectionModalSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [autoResize]=\"false\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onSelectionModalSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n }\n </div>\n <div footer class=\"dynamic-view-builder__modal-footer\">\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n priority=\"secondary\"\n (click)=\"closeSelectionModal()\"\n (keydown.enter)=\"closeSelectionModal()\"\n ></sdc-button>\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.confirmSelection') | translate\"\n (click)=\"confirmSelectionModal()\"\n (keydown.enter)=\"confirmSelectionModal()\"\n ></sdc-button>\n </div>\n </sdc-modal>\n }\n\n @if (sourceModalVisible) {\n <sdc-modal\n [visible]=\"sourceModalVisible\"\n (visibleChange)=\"$event ? (sourceModalVisible = true) : closeSourceModal()\"\n [header]=\"sourceModalTitle\"\n [width]=\"modalDimensions.source.width\"\n [height]=\"modalDimensions.source.height\"\n [maximizable]=\"false\"\n [footerButtons]=\"[]\"\n >\n <div class=\"dynamic-view-builder__modal-shell dynamic-view-builder__field-modal\">\n <sdc-timeline\n [items]=\"sourceModalTimelineItems\"\n [activeIndex]=\"sourceModalConfigurationStepActive ? 1 : 0\"\n [interactive]=\"true\"\n [showDescriptions]=\"false\"\n [ariaLabel]=\"sourceModalTimelineAriaLabel\"\n (stepSelect)=\"onSourceModalTimelineStepSelect($event)\"\n ></sdc-timeline>\n @if (sourceModalSelectionStepActive) {\n <div\n class=\"dynamic-view-builder__modal-shell dynamic-view-builder__modal-shell--full\n dynamic-view-builder__selection-flow dynamic-view-builder__modal-stage\"\n >\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__picklist-shell dynamic-view-builder__modal-stage-body\"\n >\n <sdc-picklist\n [items]=\"sourceModalPicklistItems\"\n [selectedIds]=\"sourceModalSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [autoResize]=\"false\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onSourceModalSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n </div>\n } @else {\n <div\n class=\"dynamic-view-builder__modal-field dynamic-view-builder__modal-field--stretch\n dynamic-view-builder__field-config-shell\"\n >\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__modal-list-shell\"\n >\n <div class=\"dynamic-view-builder__source-config-list\">\n @for (item of sourceModalConfiguredItems; track trackById($index, item)) {\n <div class=\"dynamic-view-builder__source-config-row\">\n <div class=\"dynamic-view-builder__source-config-main\">\n <div class=\"dynamic-view-builder__field-config-title\">\n <span class=\"dynamic-view-builder__selection-table-label\">{{ item.dbLabel }}</span>\n <span class=\"dynamic-view-builder__selection-separator\">.</span>\n <span class=\"dynamic-view-builder__selection-accent\">{{ item.tableLabel }}</span>\n </div>\n </div>\n <div class=\"dynamic-view-builder__source-config-controls\">\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.alias'\"\n [ngModel]=\"item.alias\"\n (ngModelChange)=\"onSourceModalAliasChange(item.table, $event)\"\n width=\"100%\"\n [maxlength]=\"24\"\n ></sdc-textbox>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n <div footer class=\"dynamic-view-builder__modal-footer\">\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n priority=\"secondary\"\n (click)=\"closeSourceModal()\"\n (keydown.enter)=\"closeSourceModal()\"\n ></sdc-button>\n @if (sourceModalSelectionStepActive && sourceModalCanProceed) {\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.nextStep') | translate\"\n (click)=\"advanceSourceModalStep()\"\n (keydown.enter)=\"advanceSourceModalStep()\"\n ></sdc-button>\n }\n @if (sourceModalConfigurationStepActive) {\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.save') | translate\"\n [disabled]=\"!sourceModalCanProceed\"\n (click)=\"saveSourceModal()\"\n (keydown.enter)=\"saveSourceModal()\"\n ></sdc-button>\n }\n </div>\n </sdc-modal>\n }\n\n @if (joinModalVisible) {\n <sdc-modal\n [visible]=\"joinModalVisible\"\n (visibleChange)=\"$event ? (joinModalVisible = true) : closeJoinModal()\"\n [header]=\"(config.translationPrefix + '.cards.joins.title') | translate\"\n [width]=\"modalDimensions.join.width\"\n [height]=\"modalDimensions.join.height\"\n [maximizable]=\"false\"\n [footerButtons]=\"[]\"\n >\n <div class=\"dynamic-view-builder__modal-shell dynamic-view-builder__join-modal\">\n <div class=\"dynamic-view-builder__join-modal-top\">\n <div class=\"dynamic-view-builder__modal-summary dynamic-view-builder__modal-card\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.fields.left') | translate }}\n </div>\n <div\n class=\"dynamic-view-builder__modal-summary-value\n dynamic-view-builder__modal-summary-value--path\"\n >{{ joinSourceSummary }}</div>\n </div>\n <div\n class=\"dynamic-view-builder__modal-field\n dynamic-view-builder__modal-field--compact\n dynamic-view-builder__modal-card\"\n >\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.operator'\"\n [ngModel]=\"joinDraft.operator\"\n (ngModelChange)=\"joinDraft.operator = $event\"\n [options]=\"joinOperatorOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n width=\"100%\"\n ></sdc-combobox>\n </div>\n <div class=\"dynamic-view-builder__modal-summary dynamic-view-builder__modal-card\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.fields.right') | translate }}\n </div>\n <div\n class=\"dynamic-view-builder__modal-summary-value\n dynamic-view-builder__modal-summary-value--path\"\n >{{ joinTargetSummary }}</div>\n </div>\n </div>\n <div class=\"dynamic-view-builder__modal-grid dynamic-view-builder__modal-grid--fit\">\n <div\n class=\"dynamic-view-builder__modal-picker dynamic-view-builder__modal-picker--stretch\n dynamic-view-builder__modal-card dynamic-view-builder__picklist-shell\"\n >\n <div class=\"dynamic-view-builder__modal-panel-title\">\n {{ (config.translationPrefix + '.fields.left') | translate }}\n </div>\n <sdc-picklist\n [items]=\"joinSourcePicklistItems\"\n [selectedIds]=\"joinSourceSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [autoResize]=\"false\"\n [maxVisibleSelectedItems]=\"1\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onJoinSourceSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n <div\n class=\"dynamic-view-builder__modal-picker dynamic-view-builder__modal-picker--stretch\n dynamic-view-builder__modal-card dynamic-view-builder__picklist-shell\"\n >\n <div class=\"dynamic-view-builder__modal-panel-title\">\n {{ (config.translationPrefix + '.fields.right') | translate }}\n </div>\n <sdc-picklist\n [items]=\"joinTargetPicklistItems\"\n [selectedIds]=\"joinTargetSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [autoResize]=\"false\"\n [maxVisibleSelectedItems]=\"1\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onJoinTargetSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n </div>\n </div>\n <div footer class=\"dynamic-view-builder__modal-footer\">\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n priority=\"secondary\"\n (click)=\"closeJoinModal()\"\n (keydown.enter)=\"closeJoinModal()\"\n ></sdc-button>\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.save') | translate\"\n [disabled]=\"!canSaveJoin\"\n (click)=\"saveJoin()\"\n (keydown.enter)=\"saveJoin()\"\n ></sdc-button>\n </div>\n </sdc-modal>\n }\n\n @if (sortModalVisible) {\n <sdc-modal\n [visible]=\"sortModalVisible\"\n (visibleChange)=\"$event ? (sortModalVisible = true) : closeSortModal()\"\n [header]=\"sortModalTitle\"\n [width]=\"modalDimensions.sort.width\"\n [height]=\"modalDimensions.sort.height\"\n [maximizable]=\"false\"\n [footerButtons]=\"[]\"\n >\n <div class=\"dynamic-view-builder__modal-shell dynamic-view-builder__sort-modal\">\n <div\n class=\"dynamic-view-builder__modal-field\n dynamic-view-builder__modal-field--full\n dynamic-view-builder__sort-direction-field\"\n >\n <div class=\"dynamic-view-builder__modal-label\">\n {{ (config.translationPrefix + '.fields.direction') | translate }}\n </div>\n <sdc-select-button\n class=\"dynamic-view-builder__sort-direction\"\n [items]=\"sortDirectionItems\"\n appearance=\"soft\"\n [ngModel]=\"selectedSortDirectionItems\"\n (ngModelChange)=\"onSortDirectionChange($event)\"\n ></sdc-select-button>\n </div>\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__modal-picker dynamic-view-builder__modal-picker--stretch\n dynamic-view-builder__selection-flow dynamic-view-builder__picklist-shell\n dynamic-view-builder__modal-stage-body\"\n >\n <sdc-picklist\n [items]=\"sortPicklistItems\"\n [selectedIds]=\"sortSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [autoResize]=\"false\"\n [maxVisibleSelectedItems]=\"1\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onSortSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n </div>\n <div footer class=\"dynamic-view-builder__modal-footer\">\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n priority=\"secondary\"\n (click)=\"closeSortModal()\"\n (keydown.enter)=\"closeSortModal()\"\n ></sdc-button>\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.save') | translate\"\n [disabled]=\"!canSaveSort\"\n (click)=\"saveSort()\"\n (keydown.enter)=\"saveSort()\"\n ></sdc-button>\n </div>\n </sdc-modal>\n }\n\n @if (filterModalVisible) {\n <sdc-modal\n [visible]=\"filterModalVisible\"\n (visibleChange)=\"$event ? (filterModalVisible = true) : closeFilterModal()\"\n [header]=\"filterModalTitle\"\n [width]=\"modalDimensions.filter.width\"\n [height]=\"modalDimensions.filter.height\"\n [maximizable]=\"false\"\n [footerButtons]=\"[]\"\n >\n <div class=\"dynamic-view-builder__modal-shell dynamic-view-builder__filter-modal\">\n <sdc-timeline\n [items]=\"filterModalTimelineItems\"\n [activeIndex]=\"filterModalReviewStepActive ? 2 : (filterModalConfigurationStepActive ? 1 : 0)\"\n [interactive]=\"true\"\n [showDescriptions]=\"false\"\n [ariaLabel]=\"filterModalTimelineAriaLabel\"\n (stepSelect)=\"onFilterModalTimelineStepSelect($event)\"\n ></sdc-timeline>\n @if (filterModalSelectionStepActive) {\n <div class=\"dynamic-view-builder__filter-step\">\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__filter-base-selector\"\n >\n <div class=\"dynamic-view-builder__filter-heading\">\n <div class=\"dynamic-view-builder__modal-panel-title\">\n {{ (config.translationPrefix + '.modals.filter.steps.select.title') | translate }}\n </div>\n <sdc-info-sign\n [tooltip]=\"config.translationPrefix + '.filters.tooltips.mode'\"\n [tooltipPosition]=\"'left'\"\n ></sdc-info-sign>\n </div>\n <div class=\"dynamic-view-builder__filter-mode-row\">\n <div class=\"dynamic-view-builder__filter-mode-copy\">\n {{ (config.translationPrefix + '.modals.filter.title') | translate }}\n </div>\n </div>\n <div class=\"dynamic-view-builder__filter-mode-selector\">\n <sdc-select-button\n [items]=\"filterModeItems\"\n appearance=\"soft\"\n [ngModel]=\"selectedFilterModeItems\"\n (ngModelChange)=\"onFilterModeChange($event[0]?.value || 'condition')\"\n ></sdc-select-button>\n </div>\n </div>\n @if (filterModalMode === 'condition') {\n <div\n class=\"dynamic-view-builder__modal-picker\n dynamic-view-builder__modal-picker--filter\n dynamic-view-builder__modal-picker--stretch\n dynamic-view-builder__selection-flow\n dynamic-view-builder__modal-stage-body\"\n >\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__picklist-shell\"\n >\n <sdc-picklist\n [items]=\"filterModalPicklistItems\"\n [selectedIds]=\"filterModalSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [autoResize]=\"false\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [maxVisibleSelectedItems]=\"1\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onFilterModalSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n </div>\n } @else {\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__filter-domain-intro\"\n >\n <div class=\"dynamic-view-builder__filter-heading\">\n <div class=\"dynamic-view-builder__modal-panel-title\">\n {{ (config.translationPrefix + '.filters.domainLabel') | translate }}\n </div>\n <sdc-info-sign\n [tooltip]=\"filterDomainExpressionTooltip\"\n [tooltipPosition]=\"'left'\"\n ></sdc-info-sign>\n </div>\n <div class=\"dynamic-view-builder__filter-domain-grid\">\n <div class=\"dynamic-view-builder__filter-domain-item\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.fields.domainExpression') | translate }}\n </div>\n <div class=\"dynamic-view-builder__modal-summary-value\">\n {{ filterDomainExpressionTooltip }}\n </div>\n </div>\n <div class=\"dynamic-view-builder__filter-domain-item\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.fields.connector') | translate }}\n </div>\n <div class=\"dynamic-view-builder__modal-summary-value\">\n {{ filterConnectorTooltip }}\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n } @else {\n @if (filterModalConfigurationStepActive) {\n <div class=\"dynamic-view-builder__filter-step\">\n <div class=\"dynamic-view-builder__filter-toolbar\">\n <div class=\"dynamic-view-builder__modal-summary dynamic-view-builder__modal-summary--filter\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.modals.filter.steps.configure.title') | translate }}\n </div>\n <div\n class=\"dynamic-view-builder__modal-summary-value\n dynamic-view-builder__modal-summary-value--path\"\n >\n {{ filterConfigurationSummaryLabel }}\n </div>\n </div>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\"\n (click)=\"goToFilterModalStep('select')\"\n >\n {{ filterBackToSelectionLabel }}\n </button>\n </div>\n @if (filterModalMode === 'condition') {\n <div\n class=\"dynamic-view-builder__modal-field\n dynamic-view-builder__modal-field--stretch\n dynamic-view-builder__modal-card\n dynamic-view-builder__modal-card--section\n dynamic-view-builder__filter-config-card\"\n >\n <div class=\"dynamic-view-builder__filter-config-section\">\n <div class=\"dynamic-view-builder__filter-heading\">\n <div class=\"dynamic-view-builder__modal-panel-title\">\n {{ (config.translationPrefix + '.modals.filter.steps.configure.title') | translate }}\n </div>\n <sdc-info-sign\n [tooltip]=\"config.translationPrefix + '.filters.tooltips.configure'\"\n [tooltipPosition]=\"'left'\"\n ></sdc-info-sign>\n </div>\n <div class=\"dynamic-view-builder__modal-grid dynamic-view-builder__modal-grid--filter-controls\">\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.connector'\"\n [ngModel]=\"filterDraft.connector\"\n (ngModelChange)=\"filterDraft.connector = $event\"\n [options]=\"filterConnectorOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n [disabled]=\"filterConnectorDisabled\"\n [infoTooltip]=\"filterConnectorTooltip\"\n width=\"100%\"\n ></sdc-combobox>\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.operator'\"\n [ngModel]=\"filterDraft.operator\"\n (ngModelChange)=\"filterDraft.operator = $event; onFilterOperatorChange()\"\n [options]=\"filterOperatorOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n width=\"100%\"\n [disabled]=\"!filterDraft.column\"\n [infoTooltip]=\"filterOperatorTooltip\"\n ></sdc-combobox>\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.valueType'\"\n [ngModel]=\"filterDraft.valueType\"\n (ngModelChange)=\"filterDraft.valueType = $event; onFilterValueTypeChange()\"\n [options]=\"valueTypeOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n [disabled]=\"filterValueTypeDisabled\"\n [infoTooltip]=\"filterValueTypeTooltip\"\n width=\"100%\"\n ></sdc-combobox>\n <div class=\"dynamic-view-builder__filter-optional\">\n <sdc-checkbox\n [label]=\"config.translationPrefix + '.states.optional'\"\n [ngModel]=\"filterDraft.optional\"\n (ngModelChange)=\"filterDraft.optional = $event\"\n ></sdc-checkbox>\n <sdc-info-sign\n [tooltip]=\"filterOptionalTooltip\"\n [tooltipPosition]=\"'left'\"\n ></sdc-info-sign>\n </div>\n </div>\n </div>\n <div\n class=\"dynamic-view-builder__filter-config-section\n dynamic-view-builder__filter-config-section--value\"\n >\n <div class=\"dynamic-view-builder__modal-grid dynamic-view-builder__modal-grid--single\">\n @if (showFilterBooleanCombobox) {\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.value'\"\n [ngModel]=\"filterDraft.value\"\n (ngModelChange)=\"filterDraft.value = $event\"\n [options]=\"booleanValueOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n width=\"100%\"\n ></sdc-combobox>\n }\n @if (showFilterValueTextbox) {\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.value'\"\n [ngModel]=\"filterDraft.value\"\n (ngModelChange)=\"filterDraft.value = $event\"\n width=\"100%\"\n ></sdc-textbox>\n }\n @if (showFilterValuesTextbox) {\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.values'\"\n [ngModel]=\"filterDraft.valuesText\"\n (ngModelChange)=\"filterDraft.valuesText = $event\"\n width=\"100%\"\n ></sdc-textbox>\n }\n @if (showFilterBetweenInputs) {\n <div class=\"dynamic-view-builder__between dynamic-view-builder__modal-grid-column-full\">\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.valueStart'\"\n [ngModel]=\"filterDraft.betweenStart\"\n (ngModelChange)=\"filterDraft.betweenStart = $event\"\n width=\"100%\"\n ></sdc-textbox>\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.valueEnd'\"\n [ngModel]=\"filterDraft.betweenEnd\"\n (ngModelChange)=\"filterDraft.betweenEnd = $event\"\n width=\"100%\"\n ></sdc-textbox>\n </div>\n }\n @if (showFilterParameterTextbox) {\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.parameterName'\"\n [ngModel]=\"filterDraft.parameterName\"\n (ngModelChange)=\"filterDraft.parameterName = $event\"\n width=\"100%\"\n ></sdc-textbox>\n }\n </div>\n </div>\n </div>\n } @else {\n <div\n class=\"dynamic-view-builder__modal-field\n dynamic-view-builder__modal-field--stretch\n dynamic-view-builder__modal-card\n dynamic-view-builder__modal-card--section\n dynamic-view-builder__filter-config-card\"\n >\n <div class=\"dynamic-view-builder__filter-config-section\">\n <div class=\"dynamic-view-builder__modal-grid dynamic-view-builder__modal-grid--filter-controls\">\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.connector'\"\n [ngModel]=\"filterDraft.connector\"\n (ngModelChange)=\"filterDraft.connector = $event\"\n [options]=\"filterConnectorOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n [disabled]=\"filterConnectorDisabled\"\n [infoTooltip]=\"filterConnectorTooltip\"\n width=\"100%\"\n ></sdc-combobox>\n <div class=\"dynamic-view-builder__filter-optional\">\n <sdc-checkbox\n [label]=\"config.translationPrefix + '.states.optional'\"\n [ngModel]=\"filterDraft.optional\"\n (ngModelChange)=\"filterDraft.optional = $event\"\n ></sdc-checkbox>\n <sdc-info-sign\n [tooltip]=\"filterOptionalTooltip\"\n [tooltipPosition]=\"'left'\"\n ></sdc-info-sign>\n </div>\n </div>\n </div>\n <div\n class=\"dynamic-view-builder__filter-config-section\n dynamic-view-builder__filter-config-section--domain\"\n >\n <div class=\"dynamic-view-builder__filter-heading\">\n <div class=\"dynamic-view-builder__modal-panel-title\">\n {{ (config.translationPrefix + '.fields.domainExpression') | translate }}\n </div>\n <sdc-info-sign\n [tooltip]=\"filterDomainExpressionTooltip\"\n [tooltipPosition]=\"'left'\"\n ></sdc-info-sign>\n </div>\n <div class=\"dynamic-view-builder__filter-domain-hint\">\n {{ filterDomainExpressionTooltip }}\n </div>\n <sdc-textarea\n [label]=\"''\"\n [ngModel]=\"filterDraft.domainExpression\"\n (ngModelChange)=\"filterDraft.domainExpression = $event\"\n width=\"100%\"\n [rows]=\"10\"\n ></sdc-textarea>\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"dynamic-view-builder__filter-step\">\n <div class=\"dynamic-view-builder__filter-toolbar\">\n <div class=\"dynamic-view-builder__modal-summary dynamic-view-builder__modal-summary--filter\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.modals.filter.steps.review.title') | translate }}\n </div>\n <div\n class=\"dynamic-view-builder__modal-summary-value\n dynamic-view-builder__modal-summary-value--path\"\n >\n {{ filterConfigurationSummaryLabel }}\n </div>\n </div>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\"\n (click)=\"goToFilterModalStep('configure')\"\n >\n {{ filterBackToConfigurationLabel }}\n </button>\n </div>\n <div\n class=\"dynamic-view-builder__modal-field\n dynamic-view-builder__modal-field--stretch\n dynamic-view-builder__modal-card\n dynamic-view-builder__modal-card--section\n dynamic-view-builder__filter-config-card\"\n >\n <div class=\"dynamic-view-builder__filter-review-grid\">\n @for (item of filterReviewItems; track trackById($index, item)) {\n <div\n class=\"dynamic-view-builder__filter-review-item\"\n >\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ item.label }}\n </div>\n <div\n class=\"dynamic-view-builder__modal-summary-value\"\n [class.dynamic-view-builder__modal-summary-value--path]=\"item.emphasize === 'path'\"\n [class.dynamic-view-builder__filter-review-code]=\"item.emphasize === 'code'\"\n >\n {{ item.value }}\n </div>\n </div>\n }\n </div>\n <div class=\"dynamic-view-builder__filter-review-preview\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.fields.sqlPreview') | translate }}\n </div>\n <sdc-textarea\n [label]=\"''\"\n [ngModel]=\"filterReviewPreviewLabel\"\n width=\"100%\"\n [rows]=\"6\"\n [disabled]=\"true\"\n ></sdc-textarea>\n </div>\n </div>\n </div>\n }\n }\n </div>\n <div footer class=\"dynamic-view-builder__modal-footer\">\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n priority=\"secondary\"\n (click)=\"closeFilterModal()\"\n (keydown.enter)=\"closeFilterModal()\"\n ></sdc-button>\n @if (filterModalSelectionStepActive) {\n <sdc-button\n [label]=\"filterModalConfigureActionLabel\"\n [disabled]=\"!filterModalCanProceed\"\n (click)=\"advanceFilterModalStep()\"\n (keydown.enter)=\"advanceFilterModalStep()\"\n ></sdc-button>\n }\n @if (filterModalConfigurationStepActive) {\n <sdc-button\n [label]=\"filterModalReviewActionLabel\"\n [disabled]=\"!filterModalCanReview\"\n (click)=\"advanceFilterModalStep()\"\n (keydown.enter)=\"advanceFilterModalStep()\"\n ></sdc-button>\n }\n @if (filterModalReviewStepActive) {\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.save') | translate\"\n [disabled]=\"!canSaveFilter\"\n (click)=\"saveFilter()\"\n (keydown.enter)=\"saveFilter()\"\n ></sdc-button>\n }\n </div>\n </sdc-modal>\n }\n\n @if (fieldModalVisible) {\n <sdc-modal\n [visible]=\"fieldModalVisible\"\n (visibleChange)=\"$event ? (fieldModalVisible = true) : closeFieldModal()\"\n [header]=\"fieldModalTitle\"\n [width]=\"modalDimensions.field.width\"\n [height]=\"modalDimensions.field.height\"\n [maximizable]=\"false\"\n [footerButtons]=\"[]\"\n >\n <div class=\"dynamic-view-builder__modal-shell dynamic-view-builder__field-modal\">\n <sdc-timeline\n [items]=\"fieldModalTimelineItems\"\n [activeIndex]=\"fieldModalConfigurationStepActive ? 1 : 0\"\n [interactive]=\"true\"\n [showDescriptions]=\"false\"\n [ariaLabel]=\"fieldModalTimelineAriaLabel\"\n (stepSelect)=\"onFieldModalTimelineStepSelect($event)\"\n ></sdc-timeline>\n @if (fieldModalSelectionStepActive) {\n <div\n class=\"dynamic-view-builder__modal-shell dynamic-view-builder__modal-shell--full\n dynamic-view-builder__selection-flow dynamic-view-builder__modal-stage\"\n >\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__picklist-shell dynamic-view-builder__modal-stage-body\"\n >\n <sdc-picklist\n [items]=\"fieldModalPicklistItems\"\n [selectedIds]=\"fieldModalSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [autoResize]=\"false\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onFieldModalSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n </div>\n } @else {\n <div\n class=\"dynamic-view-builder__modal-field dynamic-view-builder__modal-field--stretch\n dynamic-view-builder__field-config-shell\"\n >\n <div class=\"dynamic-view-builder__field-config-toolbar\">\n <div class=\"dynamic-view-builder__field-config-summary\">\n {{ fieldModalConfiguredItems.length }}\n {{ (config.translationPrefix + '.cards.fields.title') | translate }}\n </div>\n @if (fieldModalHasSelectableColumns) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--primary\"\n (click)=\"addAnotherFieldFromModal()\"\n >\n {{ (config.translationPrefix + '.actions.selectColumns') | translate }}\n </button>\n }\n </div>\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__modal-list-shell\"\n >\n <div class=\"dynamic-view-builder__field-config-list\">\n @for (item of fieldModalConfiguredItems; track trackById($index, item)) {\n <div class=\"dynamic-view-builder__field-config-row\">\n <div class=\"dynamic-view-builder__field-config-main\">\n <div class=\"dynamic-view-builder__field-config-title\">\n <span class=\"dynamic-view-builder__selection-table-label\">{{ item.tableLabel }}</span>\n <span class=\"dynamic-view-builder__selection-separator\">.</span>\n <span class=\"dynamic-view-builder__selection-accent\">{{ item.fieldLabel }}</span>\n </div>\n @if (item.functionName && !isFieldFunctionEditing(item.column)) {\n <div class=\"dynamic-view-builder__field-config-function\">\n <span class=\"dynamic-view-builder__row-chip dynamic-view-builder__row-chip--operator\">\n {{ item.functionLabel }}\n </span>\n @if (item.functionAlias) {\n <span class=\"dynamic-view-builder__row-meta\">\n {{ item.functionAlias }}\n </span>\n }\n </div>\n }\n </div>\n @if (!isFieldFunctionEditing(item.column)) {\n <div class=\"dynamic-view-builder__field-config-controls\">\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.alias'\"\n [ngModel]=\"item.alias\"\n (ngModelChange)=\"onFieldModalAliasChange(item.column, $event)\"\n width=\"100%\"\n [maxlength]=\"24\"\n ></sdc-textbox>\n <div class=\"dynamic-view-builder__field-width\">\n <div class=\"dynamic-view-builder__modal-label-row\">\n <span class=\"dynamic-view-builder__modal-label\">\n {{ (config.translationPrefix + '.fields.width') | translate }}\n </span>\n <sdc-info-sign\n [tooltip]=\"config.translationPrefix + '.messages.fieldWidthInfo'\"\n ></sdc-info-sign>\n </div>\n <sdc-textbox\n [label]=\"''\"\n [ngModel]=\"item.width\"\n (ngModelChange)=\"onFieldModalWidthChange(item.column, $event)\"\n width=\"100%\"\n [maxlength]=\"12\"\n placeholder=\"160\"\n ></sdc-textbox>\n </div>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\"\n (click)=\"startFieldFunctionEdit(item.column)\"\n >\n {{ item.functionName\n ? ((config.translationPrefix + '.actions.configureField') | translate)\n : ((config.translationPrefix + '.fields.functionName') | translate) }}\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action\n dynamic-view-builder__icon-action--danger\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeFieldModalDraft(item.column)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n } @else {\n <div\n class=\"dynamic-view-builder__field-config-controls\n dynamic-view-builder__field-config-controls--function\"\n >\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.functionName'\"\n [ngModel]=\"fieldFunctionDraft.functionName\"\n (ngModelChange)=\"onFieldFunctionDraftNameChange($event)\"\n [options]=\"fieldModalFunctionOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n width=\"100%\"\n ></sdc-combobox>\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.alias'\"\n [ngModel]=\"fieldFunctionDraft.functionAlias\"\n (ngModelChange)=\"fieldFunctionDraft.functionAlias = $event\"\n width=\"100%\"\n [maxlength]=\"24\"\n [disabled]=\"!fieldFunctionDraft.functionName\"\n ></sdc-textbox>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action\n dynamic-view-builder__icon-action--danger\"\n [title]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n (click)=\"cancelFieldFunctionEdit()\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action\n dynamic-view-builder__icon-action--active\"\n [title]=\"(config.translationPrefix + '.actions.save') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.save') | translate\"\n (click)=\"saveFieldFunctionEdit()\"\n >\n <i class=\"fas fa-check\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n <div footer class=\"dynamic-view-builder__modal-footer dynamic-view-builder__modal-footer--between\">\n <div class=\"dynamic-view-builder__modal-footer-group dynamic-view-builder__modal-footer-group--start\">\n @if (fieldModalSelectionStepActive && fieldModalCanSelectAll) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--primary\"\n (click)=\"selectAllFieldModalColumns()\"\n >\n {{ (config.translationPrefix + '.actions.selectAllColumns') | translate }}\n </button>\n }\n </div>\n <div class=\"dynamic-view-builder__modal-footer-group\">\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n priority=\"secondary\"\n (click)=\"closeFieldModal()\"\n (keydown.enter)=\"closeFieldModal()\"\n ></sdc-button>\n @if (fieldModalSelectionStepActive && fieldModalCanProceed) {\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.nextStep') | translate\"\n (click)=\"advanceFieldModalStep()\"\n (keydown.enter)=\"advanceFieldModalStep()\"\n ></sdc-button>\n }\n @if (fieldModalConfigurationStepActive) {\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.save') | translate\"\n [disabled]=\"!canSaveFieldModal\"\n (click)=\"saveField()\"\n (keydown.enter)=\"saveField()\"\n ></sdc-button>\n }\n </div>\n </div>\n </sdc-modal>\n }\n\n <div\n class=\"dynamic-view-builder__workspace\"\n [class.dynamic-view-builder__workspace--stacked]=\"layoutMode === 'stacked'\"\n [class.dynamic-view-builder__workspace--split]=\"layoutMode === 'split'\"\n [class.dynamic-view-builder__workspace--preview-hidden]=\"!previewVisible\"\n >\n <div class=\"dynamic-view-builder__builder-area\">\n <div\n #sectionsContainer\n class=\"dynamic-view-builder__sections\"\n [class.dynamic-view-builder__sections--stacked]=\"layoutMode === 'stacked'\"\n [class.dynamic-view-builder__sections--split]=\"layoutMode === 'split'\"\n >\n <section\n #builderSection\n data-section-id=\"tables\"\n class=\"dynamic-view-builder__section\"\n >\n <div class=\"dynamic-view-builder__section-head\">\n <div class=\"dynamic-view-builder__section-label\">\n {{ (config.translationPrefix + '.cards.sources.title') | translate }}\n </div>\n <div class=\"dynamic-view-builder__section-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\n dynamic-view-builder__action-link--primary\n dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.selectTables') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.selectTables') | translate\"\n (click)=\"openSourceModal()\"\n >\n <i class=\"fas fa-plus\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !canOpenSourceConfiguration\"\n [title]=\"(config.translationPrefix + '.actions.configureAliases') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.configureAliases') | translate\"\n (click)=\"openSourceConfigurationModal()\"\n >\n <i class=\"fas fa-cog\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !sourceItems.length\"\n [title]=\"(config.translationPrefix + '.actions.clear') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.clear') | translate\"\n (click)=\"clearSources()\"\n >\n <i class=\"fas fa-trash-alt\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n @if (!sourceItems.length) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__empty-row\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.selectTables') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.selectTables') | translate\"\n (click)=\"openSourceModal()\"\n >\n {{ (config.translationPrefix + '.actions.selectTables') | translate }}\n </button>\n }\n @if (sourceItems.length) {\n <div class=\"dynamic-view-builder__stack dynamic-view-builder__stack--wrap\">\n @for (source of sourceItems; track trackById(i, source); let i = $index) {\n <div\n class=\"dynamic-view-builder__row dynamic-view-builder__row--source\"\n >\n <div class=\"dynamic-view-builder__row-main\">\n <span class=\"dynamic-view-builder__row-table-group\">\n <span class=\"dynamic-view-builder__row-db\">{{ source.dbLabel }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-table\">\n {{ source.tableLabel }}\n </span>\n </span>\n @if (source.alias) {\n <span class=\"dynamic-view-builder__row-meta\">\n Alias {{ source.alias }}\n </span>\n }\n </div>\n <div class=\"dynamic-view-builder__row-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action dynamic-view-builder__icon-action--danger\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeSource(i)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n }\n </section>\n\n <div class=\"dynamic-view-builder__section-row\">\n <section\n #builderSection\n data-section-id=\"joins\"\n class=\"dynamic-view-builder__section dynamic-view-builder__section--fluid\"\n >\n <div class=\"dynamic-view-builder__section-head\">\n <div class=\"dynamic-view-builder__section-label\">\n {{ (config.translationPrefix + '.cards.joins.title') | translate }}\n </div>\n <div class=\"dynamic-view-builder__section-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\n dynamic-view-builder__action-link--primary\n dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !canConfigureJoins\"\n [title]=\"(config.translationPrefix + '.actions.addJoin') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.addJoin') | translate\"\n (click)=\"openJoinModal()\"\n >\n <i class=\"fas fa-plus\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !joinItems.length\"\n [title]=\"(config.translationPrefix + '.actions.clear') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.clear') | translate\"\n (click)=\"clearJoins()\"\n >\n <i class=\"fas fa-trash-alt\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n @if (!canConfigureJoins) {\n <div class=\"dynamic-view-builder__info-row\">\n {{ (config.translationPrefix + '.messages.joinRequiresTwoTables') | translate }}\n </div>\n }\n @if (canConfigureJoins && !joinItems.length) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__empty-row\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.addJoin') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.addJoin') | translate\"\n (click)=\"openJoinModal()\"\n >\n {{ (config.translationPrefix + '.actions.addJoin') | translate }}\n </button>\n }\n @if (joinItems.length) {\n <div class=\"dynamic-view-builder__stack dynamic-view-builder__stack--wrap\">\n @for (item of joinItems; track trackById(i, item); let i = $index) {\n <div\n class=\"dynamic-view-builder__row\"\n >\n <div class=\"dynamic-view-builder__row-main\">\n <span class=\"dynamic-view-builder__row-path\">\n <span class=\"dynamic-view-builder__row-table\">{{ item.sourceTable }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-field\">{{ item.sourceField }}</span>\n </span>\n <span class=\"dynamic-view-builder__join-operator\">{{ item.operator }}</span>\n <span class=\"dynamic-view-builder__join-arrow\" aria-hidden=\"true\">\n <i class=\"fas fa-long-arrow-alt-right\"></i>\n </span>\n <span class=\"dynamic-view-builder__row-path\">\n <span class=\"dynamic-view-builder__row-table\">{{ item.targetTable }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-field\">{{ item.targetField }}</span>\n </span>\n </div>\n <div class=\"dynamic-view-builder__row-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.edit') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.edit') | translate\"\n (click)=\"openJoinModal(i)\"\n >\n <i class=\"fas fa-pen\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action dynamic-view-builder__icon-action--danger\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeJoin(i)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n }\n </section>\n <section\n #builderSection\n data-section-id=\"groupBy\"\n class=\"dynamic-view-builder__section dynamic-view-builder__section--compact\"\n >\n <div class=\"dynamic-view-builder__section-head\">\n <div class=\"dynamic-view-builder__section-heading\">\n <div class=\"dynamic-view-builder__section-label\">\n {{ (config.translationPrefix + '.cards.groupBy.title') | translate }}\n </div>\n </div>\n <div class=\"dynamic-view-builder__section-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\n dynamic-view-builder__action-link--primary\n dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !groupBySelectableColumns.length\"\n [title]=\"(config.translationPrefix + '.actions.selectColumns') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.selectColumns') | translate\"\n (click)=\"openSelectionModal('groupBy')\"\n >\n <i class=\"fas fa-plus\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !groupByItems.length\"\n [title]=\"(config.translationPrefix + '.actions.clear') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.clear') | translate\"\n (click)=\"clearGroupBy()\"\n >\n <i class=\"fas fa-trash-alt\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n @if (!groupByItems.length) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__empty-row\"\n [disabled]=\"isReadonly\"\n (click)=\"openSelectionModal('groupBy')\"\n >\n {{ (config.translationPrefix + '.actions.selectColumns') | translate }}\n </button>\n }\n @if (groupByItems.length) {\n <div class=\"dynamic-view-builder__stack dynamic-view-builder__stack--wrap\">\n @for (item of groupByItems; track trackById(i, item); let i = $index) {\n <div\n class=\"dynamic-view-builder__row\"\n >\n <div class=\"dynamic-view-builder__row-main\">\n <span class=\"dynamic-view-builder__row-path\">\n <span class=\"dynamic-view-builder__row-table\">{{ item.tableLabel }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-field\">{{ item.fieldLabel }}</span>\n </span>\n </div>\n <div class=\"dynamic-view-builder__row-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action dynamic-view-builder__icon-action--danger\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeGroupBy(i)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n }\n </section>\n\n </div>\n\n <section\n #builderSection\n data-section-id=\"fields\"\n class=\"dynamic-view-builder__section\"\n >\n <div class=\"dynamic-view-builder__section-head\">\n <div class=\"dynamic-view-builder__section-heading\">\n <div class=\"dynamic-view-builder__section-label\">\n {{ (config.translationPrefix + '.cards.fields.title') | translate }}\n </div>\n <sdc-info-sign\n class=\"dynamic-view-builder__hint\"\n [tooltip]=\"'Voc\u00EA pode ordenar a sequ\u00EAncia dos campos arrastando e soltando.'\"\n ></sdc-info-sign>\n </div>\n <div class=\"dynamic-view-builder__section-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\n dynamic-view-builder__action-link--primary\n dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !fieldSelectableColumns.length\"\n [title]=\"(config.translationPrefix + '.actions.selectColumns') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.selectColumns') | translate\"\n (click)=\"openFieldModal()\"\n >\n <i class=\"fas fa-plus\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !canOpenFieldConfiguration\"\n [title]=\"(config.translationPrefix + '.actions.configureField') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.configureField') | translate\"\n (click)=\"openFieldConfigurationModal()\"\n >\n <i class=\"fas fa-cog\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !fieldItems.length\"\n [title]=\"(config.translationPrefix + '.actions.clear') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.clear') | translate\"\n (click)=\"clearFields()\"\n >\n <i class=\"fas fa-trash-alt\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n @if (!fieldItems.length) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__empty-row\"\n [disabled]=\"isReadonly\"\n (click)=\"openFieldModal()\"\n >\n {{ (config.translationPrefix + '.actions.selectColumns') | translate }}\n </button>\n }\n @if (fieldItems.length) {\n <div class=\"dynamic-view-builder__stack dynamic-view-builder__stack--wrap\">\n @for (item of fieldItems; track trackById(i, item); let i = $index) {\n @if (isFieldDropIndicatorVisible(i)) {\n <div\n class=\"dynamic-view-builder__field-drop-indicator\"\n aria-hidden=\"true\"\n ></div>\n }\n <div\n class=\"dynamic-view-builder__row dynamic-view-builder__row--draggable\"\n [class.dynamic-view-builder__row--drag-origin]=\"draggingFieldIndex === item.sourceIndex\"\n [draggable]=\"!isReadonly\"\n (dragstart)=\"onFieldDragStart(item.sourceIndex)\"\n (dragover)=\"onFieldDragOver($event, i)\"\n (drop)=\"onFieldDrop()\"\n (dragend)=\"onFieldDragEnd()\"\n >\n <div class=\"dynamic-view-builder__row-main\">\n <span class=\"dynamic-view-builder__row-order\">{{ item.orderLabel }}</span>\n <span class=\"dynamic-view-builder__row-path\">\n <span class=\"dynamic-view-builder__row-table\">{{ item.tableLabel }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-field\">{{ item.fieldLabel }}</span>\n </span>\n @if (item.alias) {\n <span class=\"dynamic-view-builder__row-meta\">\n Alias {{ item.alias }}\n </span>\n }\n @if (item.width) {\n <span class=\"dynamic-view-builder__row-meta\">\n {{ item.width }}\n </span>\n }\n @if (item.functionName) {\n <span class=\"dynamic-view-builder__row-chip dynamic-view-builder__row-chip--operator\">\n {{ item.functionLabel }}\n </span>\n }\n @if (item.functionAlias) {\n <span class=\"dynamic-view-builder__row-meta\">\n {{ item.functionAlias }}\n </span>\n }\n </div>\n <div class=\"dynamic-view-builder__row-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action dynamic-view-builder__icon-action--danger\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeField(item.sourceIndex)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n }\n @if (isFieldDropIndicatorAtEndVisible()) {\n <div\n class=\"dynamic-view-builder__field-drop-indicator\"\n aria-hidden=\"true\"\n ></div>\n }\n </div>\n }\n </section>\n\n <div class=\"dynamic-view-builder__section-row\">\n <section\n #builderSection\n data-section-id=\"sorting\"\n class=\"dynamic-view-builder__section dynamic-view-builder__section--compact\"\n >\n <div class=\"dynamic-view-builder__section-head\">\n <div class=\"dynamic-view-builder__section-label\">\n {{ (config.translationPrefix + '.cards.sorting.title') | translate }}\n </div>\n <div class=\"dynamic-view-builder__section-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\n dynamic-view-builder__action-link--primary\n dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !sortSelectableItems.length\"\n [title]=\"(config.translationPrefix + '.actions.addSort') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.addSort') | translate\"\n (click)=\"openSortModal()\"\n >\n <i class=\"fas fa-plus\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !sortItems.length\"\n [title]=\"(config.translationPrefix + '.actions.clear') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.clear') | translate\"\n (click)=\"clearSorting()\"\n >\n <i class=\"fas fa-trash-alt\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n @if (!sortItems.length) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__empty-row\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.addSort') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.addSort') | translate\"\n (click)=\"openSortModal()\"\n >\n {{ (config.translationPrefix + '.actions.addSort') | translate }}\n </button>\n }\n @if (sortItems.length) {\n <div class=\"dynamic-view-builder__stack dynamic-view-builder__stack--wrap\">\n @for (item of sortItems; track trackById(i, item); let i = $index) {\n <div\n class=\"dynamic-view-builder__row\"\n >\n <div class=\"dynamic-view-builder__row-main\">\n @if (item.functionName) {\n <span class=\"dynamic-view-builder__row-chip dynamic-view-builder__row-chip--operator\">\n {{ item.functionLabel }}\n </span>\n }\n <span class=\"dynamic-view-builder__row-path\">\n <span class=\"dynamic-view-builder__row-table\">{{ item.tableLabel }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-field\">{{ item.fieldLabel }}</span>\n </span>\n <span class=\"dynamic-view-builder__row-chip dynamic-view-builder__row-chip--operator\">\n {{ item.direction }}\n </span>\n </div>\n <div class=\"dynamic-view-builder__row-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.edit') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.edit') | translate\"\n (click)=\"openSortModal(i)\"\n >\n <i class=\"fas fa-pen\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action dynamic-view-builder__icon-action--danger\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeSort(i)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n }\n </section>\n\n <section\n #builderSection\n data-section-id=\"filters\"\n class=\"dynamic-view-builder__section dynamic-view-builder__section--fluid\"\n >\n <div class=\"dynamic-view-builder__section-head\">\n <div class=\"dynamic-view-builder__section-label\">\n {{ (config.translationPrefix + '.cards.filters.title') | translate }}\n </div>\n <div class=\"dynamic-view-builder__section-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\n dynamic-view-builder__action-link--primary\n dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !availableColumns.length\"\n [title]=\"(config.translationPrefix + '.actions.addFilter') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.addFilter') | translate\"\n (click)=\"openFilterModal()\"\n >\n <i class=\"fas fa-plus\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !filterItems.length\"\n [title]=\"(config.translationPrefix + '.actions.clear') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.clear') | translate\"\n (click)=\"clearFilters()\"\n >\n <i class=\"fas fa-trash-alt\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n @if (!filterItems.length) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__empty-row\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.addFilter') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.addFilter') | translate\"\n (click)=\"openFilterModal()\"\n >\n {{ (config.translationPrefix + '.actions.addFilter') | translate }}\n </button>\n }\n @if (filterItems.length) {\n <div class=\"dynamic-view-builder__stack dynamic-view-builder__stack--wrap\">\n @for (item of filterItems; track trackById(i, item); let i = $index) {\n <div\n class=\"dynamic-view-builder__row\"\n >\n <div class=\"dynamic-view-builder__row-main\">\n @if (!item.isDomain) {\n <span class=\"dynamic-view-builder__row-path\">\n <span class=\"dynamic-view-builder__row-table\">{{ item.tableLabel }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-field\">{{ item.fieldLabel }}</span>\n </span>\n <span\n class=\"dynamic-view-builder__row-chip\n dynamic-view-builder__row-chip--operator\"\n >{{ item.operatorLabel }}</span>\n } @else {\n <span\n class=\"dynamic-view-builder__row-chip\n dynamic-view-builder__row-chip--domain\"\n >{{ item.tableLabel }}</span>\n }\n <span class=\"dynamic-view-builder__row-chip dynamic-view-builder__row-chip--value\">\n {{ item.subtitle }}\n </span>\n @if (item.optional) {\n <span class=\"dynamic-view-builder__row-chip dynamic-view-builder__row-chip--optional\">\n {{ (config.translationPrefix + '.states.optional') | translate }}\n </span>\n }\n </div>\n <div class=\"dynamic-view-builder__row-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.edit') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.edit') | translate\"\n (click)=\"openFilterModal(i)\"\n >\n <i class=\"fas fa-pen\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action dynamic-view-builder__icon-action--danger\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeFilter(i)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n }\n </section>\n </div>\n\n @for (arrow of flowArrows; track trackByArrow($index, arrow)) {\n <div\n class=\"dynamic-view-builder__flow-arrow\"\n [class.dynamic-view-builder__flow-arrow--right]=\"arrow.direction === 'right'\"\n [class.dynamic-view-builder__flow-arrow--down]=\"arrow.direction === 'down'\"\n [style.left.px]=\"arrow.left\"\n [style.top.px]=\"arrow.top\"\n aria-hidden=\"true\"\n >\n <i\n [class]=\"arrow.direction === 'right'\n ? 'fas fa-angle-double-right'\n : 'fas fa-angle-double-down'\"\n ></i>\n </div>\n }\n </div>\n </div>\n\n @if (previewVisible) {\n <aside class=\"dynamic-view-builder__preview-area\">\n <div\n class=\"dynamic-view-builder__preview\"\n [style.height]=\"sqlPreviewPanelHeight\"\n >\n <div class=\"dynamic-view-builder__preview-header\">\n <div class=\"dynamic-view-builder__preview-title\">SQL Preview</div>\n <div class=\"dynamic-view-builder__preview-subtitle\">\n Consulta gerada automaticamente a partir da configuracao atual.\n </div>\n </div>\n <div class=\"dynamic-view-builder__preview-body\">\n <sdc-code-editor\n [sql]=\"sqlPreview\"\n language=\"sql\"\n [readOnly]=\"true\"\n [showCopy]=\"true\"\n [height]=\"sqlPreviewHeight\"\n ></sdc-code-editor>\n </div>\n </div>\n </aside>\n }\n </div>\n</div>\n", styles: [":host{display:block}::ng-deep .sdc-loading-state{overflow:auto!important}.dynamic-view-builder{display:flex;flex-direction:column;gap:.75rem;color:#243342}.dynamic-view-builder__toolbar{display:flex;justify-content:space-between;align-items:center;gap:1rem;padding:.25rem 0}.dynamic-view-builder__toolbar-copy{min-width:0}.dynamic-view-builder__title{font-size:1rem;font-weight:700;line-height:1.2;color:#243342}.dynamic-view-builder__subtitle{margin-top:.2rem;color:#70839a;font-size:.875rem;line-height:1.35}.dynamic-view-builder__toolbar-actions{display:flex;align-items:center;gap:.625rem;flex-shrink:0;flex-wrap:wrap}.dynamic-view-builder__toolbar-label{color:#70839a;font-size:.75rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.dynamic-view-builder__workspace{display:grid;gap:.875rem;min-width:0}.dynamic-view-builder__workspace--preview-hidden,.dynamic-view-builder__workspace--split.dynamic-view-builder__workspace--preview-hidden{grid-template-columns:1fr;grid-template-areas:\"builder\"}.dynamic-view-builder__workspace--stacked{grid-template-columns:1fr;grid-template-areas:\"preview\" \"builder\"}.dynamic-view-builder__workspace--split{grid-template-columns:minmax(0,62fr) minmax(20rem,38fr);grid-template-areas:\"builder preview\";align-items:start}.dynamic-view-builder__builder-area{grid-area:builder;display:flex;flex-direction:column;gap:.75rem;min-width:0}.dynamic-view-builder__sections{display:flex;flex-direction:column;gap:.5rem;min-width:0;position:relative}.dynamic-view-builder__section{display:flex;flex-direction:column;gap:.4rem;min-width:0;padding:.55rem .65rem;border:1px solid #dbe3ec;border-radius:.5rem;background:#fff;min-inline-size:0;max-inline-size:100%;position:relative;width:100%}.dynamic-view-builder__section-row{display:flex;flex-wrap:wrap;align-items:stretch;gap:.5rem;min-width:0}.dynamic-view-builder__section-row>.dynamic-view-builder__section{align-self:stretch}.dynamic-view-builder__section--half{flex:1 1 18rem;width:auto}.dynamic-view-builder__section--compact{flex:0 0 clamp(18rem,30%,22rem);width:auto}.dynamic-view-builder__section--fluid{flex:1 1 26rem;min-inline-size:min(100%,26rem);width:auto}.dynamic-view-builder__flow-arrow{position:absolute;display:inline-flex;align-items:center;justify-content:center;width:1.4rem;height:1.4rem;border:1px solid #d9e3ed;border-radius:999px;background:#fff;color:#68809a;pointer-events:none;z-index:2;transform:translate(-50%,-50%)}.dynamic-view-builder__flow-arrow i{font-size:.74rem;line-height:1}.dynamic-view-builder__section-head{display:flex;justify-content:space-between;align-items:flex-start;gap:.75rem}.dynamic-view-builder__section-heading{display:inline-flex;align-items:center;gap:.4rem;min-width:0}.dynamic-view-builder__section-label{min-width:0;color:#516173;font-size:.78rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase}.dynamic-view-builder__section-actions{display:flex;align-items:center;justify-content:flex-end;gap:.5rem;flex-wrap:wrap;flex-shrink:0}.dynamic-view-builder__hint{display:inline-flex;align-items:center;justify-content:center;width:1rem;height:1rem;padding:0;border:0;background:transparent;color:#8ca0b6;cursor:help}.dynamic-view-builder__hint--legacy{display:none}.dynamic-view-builder__stack{display:flex;gap:.35rem;min-width:0}.dynamic-view-builder__stack--wrap{flex-direction:row;flex-wrap:wrap;align-items:flex-start}.dynamic-view-builder__row,.dynamic-view-builder__empty-row,.dynamic-view-builder__info-row{min-width:0;border:1px solid #e7edf4;border-radius:.4rem;background:#fbfcfe}.dynamic-view-builder__row{display:inline-flex;align-items:stretch;justify-content:space-between;gap:.45rem;padding:.5rem .6rem;inline-size:auto;min-inline-size:min(100%,12rem);max-inline-size:100%;flex:0 1 auto}.dynamic-view-builder__row-main{min-width:0;display:flex;align-items:center;gap:.3rem;flex-wrap:wrap;flex:1 1 auto}.dynamic-view-builder__row-label{color:#243342;font-weight:600;line-height:1.35;word-break:break-word}.dynamic-view-builder__row-value{color:#627588;line-height:1.35;word-break:break-word}.dynamic-view-builder__row-separator{color:#b0bcc9;flex-shrink:0}.dynamic-view-builder__row-actions{display:flex;align-items:center;justify-content:flex-end;gap:.2rem;flex-wrap:wrap;flex:0 0 auto}.dynamic-view-builder__row--source{align-items:center;min-inline-size:min(100%,16.5rem);padding-block:.45rem}.dynamic-view-builder__row--source .dynamic-view-builder__row-main{align-items:center;flex-wrap:nowrap;gap:.18rem}.dynamic-view-builder__row-table-group{display:inline-flex;align-items:center;gap:0;min-width:0;flex:0 1 auto}.dynamic-view-builder__row-db{color:#243342;font-weight:700;line-height:1.25;white-space:nowrap}.dynamic-view-builder__row-order{display:inline-flex;align-items:center;justify-content:center;min-width:2rem;padding:.1rem .35rem;border-radius:999px;background:#eef3f8;color:#516173;font-size:.75rem;font-weight:700}.dynamic-view-builder__row-path{display:inline-flex;align-items:baseline;gap:0;min-width:0;flex-wrap:wrap}.dynamic-view-builder__row-table{color:#425466;font-weight:500;line-height:1.35}.dynamic-view-builder__row-table--accent{color:#1f8a52;font-weight:700}.dynamic-view-builder__row-dot{color:#8fa1b3;flex:0 0 auto;margin-inline:.02rem}.dynamic-view-builder__row-field{color:#1f8a52;font-weight:700;line-height:1.35;word-break:break-word}.dynamic-view-builder__row-meta{display:inline-flex;align-items:center;padding:.12rem .4rem;border-radius:999px;background:#f0f4f8;color:#627588;font-size:.74rem;line-height:1.2}.dynamic-view-builder__join-operator{display:inline-flex;align-items:center;padding:.1rem .35rem;border-radius:999px;background:#eef3f8;color:#627588;font-size:.73rem;font-weight:700;letter-spacing:.03em;text-transform:uppercase}.dynamic-view-builder__join-arrow{color:#9ab0c6;font-size:.85rem}.dynamic-view-builder__row--draggable{cursor:grab}.dynamic-view-builder__row--drag-origin{opacity:.6;border-color:#b8cae0;background:#f4f8fc}.dynamic-view-builder__row--draggable:active{cursor:grabbing}.dynamic-view-builder__alias-field{flex:0 1 5.4rem;min-inline-size:4.4rem;max-inline-size:5.8rem}.dynamic-view-builder__alias-field :where(.sdc-textbox__label-row){display:none}.dynamic-view-builder__action-link{padding:0;border:0;background:transparent;color:#6d7786;font:inherit;font-size:.82rem;font-weight:600;line-height:1.25;cursor:pointer;transition:color .18s ease;pointer-events:auto;position:relative;z-index:2;text-decoration:none}.dynamic-view-builder__action-link:disabled{opacity:.45;cursor:default}.dynamic-view-builder__action-link:hover:not(:disabled),.dynamic-view-builder__action-link:focus-visible:not(:disabled){color:#1b5cff}.dynamic-view-builder__action-link--primary{color:#1b5cff}.dynamic-view-builder__action-link--icon{display:inline-flex;align-items:center;justify-content:center;min-width:1.5rem;min-height:1.5rem}.dynamic-view-builder__action-link--icon i{font-size:.9rem;line-height:1}.dynamic-view-builder__preview-toggle{display:inline-flex;align-items:center;gap:.4rem;min-height:2rem;padding:0 .75rem;border:1px solid #dbe3ec;border-radius:999px;background:#f8fafc;color:#425466;font:inherit;font-size:.82rem;font-weight:600;cursor:pointer;transition:border-color .18s ease,background-color .18s ease,color .18s ease}.dynamic-view-builder__preview-toggle:focus-visible{outline:2px solid rgba(27,92,255,.18);outline-offset:2px}.dynamic-view-builder__preview-toggle:hover:not(:disabled),.dynamic-view-builder__preview-toggle:focus-visible:not(:disabled){border-color:#b9c7d6;background:#eef4fb;color:#1b5cff}.dynamic-view-builder__icon-action{display:inline-flex;align-items:center;justify-content:center;width:1.35rem;height:1.35rem;padding:0;border:0;background:transparent;color:#7b8ea2;cursor:pointer;transition:color .18s ease}.dynamic-view-builder__icon-action:focus-visible{outline:2px solid rgba(27,92,255,.18);outline-offset:2px;border-radius:999px}.dynamic-view-builder__icon-action:disabled{opacity:.45;cursor:default}.dynamic-view-builder__icon-action:hover:not(:disabled),.dynamic-view-builder__icon-action:focus-visible:not(:disabled){color:#1b5cff}.dynamic-view-builder__icon-action--active{color:#1c9b5f}.dynamic-view-builder__icon-action--danger{color:#8d9caf}.dynamic-view-builder__icon-action--danger:hover:not(:disabled),.dynamic-view-builder__icon-action--danger:focus-visible:not(:disabled){color:#d14343}.dynamic-view-builder__empty-row{width:auto;max-width:100%;padding:.45rem .55rem;text-align:left;color:#70839a;cursor:pointer;inline-size:fit-content;pointer-events:auto;position:relative;z-index:1}.dynamic-view-builder__info-row{padding:.45rem .55rem;color:#3d6ae8;line-height:1.35;inline-size:fit-content;max-inline-size:100%}.dynamic-view-builder__preview-area{grid-area:preview;min-width:0;display:flex;align-self:start}.dynamic-view-builder__preview{display:flex;flex:1 1 auto;flex-direction:column;border:1px solid #dbe3ec;border-radius:.5rem;background:#fff;overflow:hidden;min-height:0}.dynamic-view-builder__preview-header{padding:.75rem .9rem;border-bottom:1px solid #e7edf4;background:#f8fafc}.dynamic-view-builder__preview-title{color:#243342;font-weight:700;line-height:1.25}.dynamic-view-builder__preview-subtitle{margin-top:.2rem;color:#70839a;line-height:1.35}.dynamic-view-builder__preview-body{display:flex;flex:1 1 auto;min-height:0;padding:.55rem}.dynamic-view-builder__preview-body :where(sdc-code-editor){display:block;flex:1 1 auto;min-height:0;width:100%}.dynamic-view-builder__footer{display:flex;justify-content:flex-start;gap:.75rem;flex-wrap:wrap}.dynamic-view-builder__modal-shell{display:flex;flex-direction:column;gap:.875rem;min-height:0;height:100%}.dynamic-view-builder__modal-shell--full{height:100%}.dynamic-view-builder__modal-stage{display:flex;flex-direction:column;gap:.75rem;min-height:0}.dynamic-view-builder__modal-stage-body{flex:1 1 auto;min-height:0}.dynamic-view-builder__modal-card{padding:.85rem .95rem;border:1px solid #dbe3ec;border-radius:.65rem;background:#fff;box-shadow:0 1px 2px #0f172a0a}.dynamic-view-builder__modal-card--compact{padding:.75rem .85rem}.dynamic-view-builder__modal-card--section{display:flex;flex-direction:column;gap:.875rem}.dynamic-view-builder__modal-card--soft{background:linear-gradient(180deg,#fbfdff,#f6f9fc)}.dynamic-view-builder__modal-inline-surface{display:flex;flex-direction:column;gap:.625rem;min-width:0}.dynamic-view-builder__modal-list-shell{flex:1 1 auto;min-height:0;overflow:hidden;padding:.8rem}.dynamic-view-builder__modal-card-title{color:#243342;font-size:.92rem;font-weight:700;line-height:1.25}.dynamic-view-builder__modal-card-text{margin-top:.2rem;color:#70839a;font-size:.8rem;line-height:1.35}.dynamic-view-builder__modal-panel-title{color:#425466;font-size:.78rem;font-weight:700;letter-spacing:.04em;line-height:1.25;text-transform:uppercase}.dynamic-view-builder__modal-panel-title--section{margin-bottom:-.1rem}.dynamic-view-builder__modal-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;align-items:start;min-height:0}.dynamic-view-builder__modal-grid>*{min-width:0}.dynamic-view-builder__modal-grid--single{grid-template-columns:1fr}.dynamic-view-builder__modal-grid--filter{grid-template-columns:repeat(2,minmax(0,1fr))}.dynamic-view-builder__modal-grid--filter-controls{grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem .75rem}.dynamic-view-builder__modal-grid-column-full{grid-column:1/-1}.dynamic-view-builder__modal-field,.dynamic-view-builder__modal-picker{display:flex;flex-direction:column;gap:.625rem;min-width:0;min-height:0}.dynamic-view-builder__modal-field--stretch,.dynamic-view-builder__modal-picker--stretch{height:100%}.dynamic-view-builder__modal-field--compact{gap:.5rem}.dynamic-view-builder__modal-field--full{width:100%}.dynamic-view-builder__modal-label-row{display:inline-flex;align-items:center;gap:.35rem;min-width:0}.dynamic-view-builder__modal-label{color:#425466;font-size:.875rem;font-weight:600;line-height:1.25}.dynamic-view-builder__join-modal{display:flex;flex-direction:column;gap:.875rem}.dynamic-view-builder__selection-flow{display:flex;flex-direction:column;gap:.75rem;height:100%;min-height:0}.dynamic-view-builder__filter-modal{display:flex;flex-direction:column;gap:.875rem;min-height:min(30rem,100vh - 14rem);height:100%;overflow:hidden}.dynamic-view-builder__filter-step{display:flex;flex-direction:column;gap:.75rem;min-width:0;min-height:0;flex:1 1 auto}.dynamic-view-builder__filter-toolbar{display:flex;align-items:flex-start;justify-content:space-between;gap:.875rem;flex-wrap:wrap}.dynamic-view-builder__filter-toolbar>*{min-width:0}.dynamic-view-builder__filter-heading{display:flex;align-items:center;justify-content:space-between;gap:.5rem;min-width:0}.dynamic-view-builder__filter-base-selector,.dynamic-view-builder__filter-domain-intro{min-width:0}.dynamic-view-builder__filter-base-selector{gap:.625rem;padding:.85rem 1rem}.dynamic-view-builder__filter-mode-row{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.dynamic-view-builder__filter-mode-copy{color:#70839a;font-size:.84rem;line-height:1.4}.dynamic-view-builder__filter-mode-selector{display:flex;min-width:0}.dynamic-view-builder__filter-mode-selector :where(.select-button){max-width:100%}.dynamic-view-builder__picklist-shell{flex:1 1 auto;min-height:0;overflow:hidden;display:flex;flex-direction:column}.dynamic-view-builder__picklist-shell :where(sdc-picklist){display:flex;flex:1 1 auto;height:100%;min-height:0}.dynamic-view-builder__picklist-shell :where(.sdc-picklist){display:flex;flex-direction:column;flex:1 1 auto;min-height:0}.dynamic-view-builder__picklist-shell :where(.sdc-picklist__loading-state){display:flex;flex-direction:column;min-height:0;flex:1 1 auto}.dynamic-view-builder__picklist-shell :where(.sdc-picklist__content){min-height:0;flex:1 1 auto;overflow:auto}.dynamic-view-builder__picklist-shell :where(.sdc-picklist__list){margin:0}.dynamic-view-builder__picklist-shell :where(.sdc-picklist__search),.dynamic-view-builder__picklist-shell :where(.sdc-picklist__selected),.dynamic-view-builder__picklist-shell :where(.sdc-picklist__footer){flex:0 0 auto}.dynamic-view-builder__filter-config-card{flex:1 1 auto;min-height:0;gap:.75rem;overflow:auto;padding:.85rem 1rem}.dynamic-view-builder__filter-panel{display:flex;flex-direction:column;gap:.75rem;min-width:0;min-height:0}.dynamic-view-builder__filter-context{display:flex;flex-direction:column;gap:.2rem;padding:0 .1rem;min-width:0}.dynamic-view-builder__filter-summary{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.625rem;min-width:0}.dynamic-view-builder__filter-summary-item{display:flex;flex-direction:column;gap:.22rem;padding:.7rem .8rem;border:1px solid #dbe3ec;border-radius:.55rem;background:#f8fafc;min-width:0}.dynamic-view-builder__sort-modal{display:flex;flex-direction:column;gap:.75rem;min-width:0;min-height:0;height:100%;overflow:hidden}.dynamic-view-builder__sort-direction{display:block;width:100%;max-width:18rem;min-width:0;overflow:hidden}.dynamic-view-builder__sort-direction :where(.select-button){width:100%;max-width:100%;overflow:hidden}.dynamic-view-builder__sort-direction :where(.select-button-item){min-width:0}.dynamic-view-builder__sort-modal>.dynamic-view-builder__modal-field{flex:0 0 auto}.dynamic-view-builder__sort-modal>.dynamic-view-builder__modal-picker{flex:1 1 auto;min-height:0}.dynamic-view-builder__sort-modal :where(.select-button--soft){padding:.25rem}.dynamic-view-builder__sort-modal :where(.select-button--soft .select-button-item){min-height:2rem;padding:.4rem .65rem}.dynamic-view-builder__modal-summary{display:flex;flex-direction:column;gap:.25rem;align-self:start}.dynamic-view-builder__modal-summary--filter{gap:.35rem}.dynamic-view-builder__modal-summary--compact{width:fit-content;max-width:100%}.dynamic-view-builder__modal-summary--field{min-width:min(100%,15rem)}.dynamic-view-builder__join-modal-top{display:grid;grid-template-columns:minmax(0,1fr) minmax(12rem,14rem) minmax(0,1fr);gap:.875rem;align-items:stretch}.dynamic-view-builder__join-modal-top>*{height:100%}.dynamic-view-builder__join-modal-top .dynamic-view-builder__modal-summary,.dynamic-view-builder__join-modal-top .dynamic-view-builder__modal-field{align-self:stretch}.dynamic-view-builder__modal-summary-label{color:#70839a;font-size:.73rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.dynamic-view-builder__modal-summary-value{color:#243342;font-weight:600;line-height:1.35;word-break:break-word}.dynamic-view-builder__modal-summary-value--path{color:#1f8a52;font-family:Consolas,Courier New,monospace;font-size:.86rem;font-weight:600}.dynamic-view-builder__picker-title{color:#425466;font-weight:700;line-height:1.35}.dynamic-view-builder__picker-title--path{font-family:Consolas,Courier New,monospace;font-size:.85rem;font-weight:600}.dynamic-view-builder__modal-footer{display:flex;justify-content:flex-end;gap:.75rem;flex-wrap:wrap}.dynamic-view-builder__modal-footer--between{justify-content:space-between;align-items:center}.dynamic-view-builder__modal-footer-group{display:inline-flex;align-items:center;gap:.75rem;flex-wrap:wrap}.dynamic-view-builder__modal-footer-group--start{margin-right:auto}.dynamic-view-builder__filter-config-section{display:flex;flex-direction:column;gap:.625rem;min-width:0}.dynamic-view-builder__filter-config-section--value,.dynamic-view-builder__filter-config-section--domain{padding-top:.25rem;border-top:1px solid #e8edf3}.dynamic-view-builder__filter-optional{display:flex;align-items:flex-end;gap:.35rem;min-height:100%;padding-bottom:.15rem}.dynamic-view-builder__filter-config-section :where(.sdc-checkbox){min-height:34px}.dynamic-view-builder__filter-domain-grid,.dynamic-view-builder__filter-review-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem}.dynamic-view-builder__filter-domain-item,.dynamic-view-builder__filter-review-item{display:flex;flex-direction:column;gap:.25rem;min-width:0;padding:.8rem .9rem;border:1px solid #e5ebf2;border-radius:.6rem;background:#f8fafc}.dynamic-view-builder__filter-domain-hint{color:#70839a;font-size:.82rem;line-height:1.45}.dynamic-view-builder__filter-review-preview{display:flex;flex-direction:column;gap:.35rem;min-width:0;padding-top:.25rem;border-top:1px solid #e8edf3}.dynamic-view-builder__filter-review-code{color:#243342;font-family:Consolas,Courier New,monospace;font-size:.84rem;line-height:1.45;white-space:pre-wrap;word-break:break-word}.dynamic-view-builder__sort-direction-field{gap:.4rem}.dynamic-view-builder__selection-table{display:flex;flex-direction:column;border:1px solid #d7dde5;background:#fff;overflow:hidden;border-radius:.5rem;min-height:0;flex:1 1 auto}.dynamic-view-builder__modal-stage-body>.dynamic-view-builder__selection-table,.dynamic-view-builder__modal-stage-body.dynamic-view-builder__picklist-shell{height:100%}.dynamic-view-builder__selection-table--chooser{min-height:0}.dynamic-view-builder__selection-head{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr) 5rem;gap:.75rem;padding:.875rem 1rem;border-bottom:1px solid #e4e8ef;background:#f6f8fb}.dynamic-view-builder__selection-body{flex:1 1 auto;min-height:0;max-height:22rem;overflow:auto}.dynamic-view-builder__selection-table--fluid,.dynamic-view-builder__selection-table--fluid .dynamic-view-builder__selection-body{min-height:0;max-height:none;height:100%}.dynamic-view-builder__selection-row{width:100%;display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr) 5rem;gap:.75rem;padding:.875rem 1rem;border:0;border-bottom:1px solid #eef2f7;background:transparent;text-align:left;cursor:pointer;transition:background-color .18s ease,box-shadow .18s ease}.dynamic-view-builder__selection-row:last-child{border-bottom:0}.dynamic-view-builder__selection-row:hover{background:#f9fbff}.dynamic-view-builder__selection-row--selected{background:#eef5ff}.dynamic-view-builder__selection-row:focus-visible{outline:2px solid rgba(27,92,255,.22);outline-offset:-2px}.dynamic-view-builder__selection-col,.dynamic-view-builder__selection-cell{min-width:0;color:#425466;line-height:1.4;word-break:break-word}.dynamic-view-builder__selection-col{font-weight:700}.dynamic-view-builder__selection-cell--meta{color:#70839a}.dynamic-view-builder__selection-path{display:inline-flex;align-items:baseline;gap:0;min-width:0;flex-wrap:nowrap}.dynamic-view-builder__selection-db{color:#243342;font-weight:700}.dynamic-view-builder__selection-table-label{color:#425466;font-weight:500}.dynamic-view-builder__selection-separator{color:#9aaaba;flex:0 0 auto;margin-inline:.02rem}.dynamic-view-builder__selection-accent{color:#1f8a52;font-weight:700}.dynamic-view-builder__selection-note{display:block;margin-top:.1rem;color:#8da0b4;font-size:.74rem}.dynamic-view-builder__selection-col--select,.dynamic-view-builder__selection-cell--select{display:flex;align-items:center;justify-content:center}.dynamic-view-builder__selection-marker{display:inline-flex;align-items:center;justify-content:center;width:1.2rem;height:1.2rem;border:1px solid #c8d4e0;border-radius:.3rem;background:#fff;color:transparent}.dynamic-view-builder__selection-marker i{font-size:.72rem;line-height:1}.dynamic-view-builder__selection-marker--selected{border-color:#1b5cff;background:#1b5cff;color:#fff}.dynamic-view-builder__selection-empty{padding:1rem;color:#70839a;text-align:center;line-height:1.4}.dynamic-view-builder__modal-picker--filter,.dynamic-view-builder__modal-picker--filter .dynamic-view-builder__selection-table{min-height:100%}.dynamic-view-builder__modal-picker--filter .dynamic-view-builder__selection-body{max-height:none}.dynamic-view-builder__field-modal{display:flex;flex-direction:column;gap:1rem;min-height:0;width:100%;height:100%}.dynamic-view-builder__field-config-shell{gap:.85rem;min-height:0;height:100%}.dynamic-view-builder__field-config-toolbar{display:flex;align-items:center;justify-content:space-between;gap:.75rem;flex-wrap:wrap}.dynamic-view-builder__field-config-summary{color:#516173;font-size:.8rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.dynamic-view-builder__field-selection-toolbar{display:flex;align-items:center;justify-content:space-between;gap:.75rem;flex-wrap:wrap}.dynamic-view-builder__field-config-list,.dynamic-view-builder__source-config-list{display:flex;flex-direction:column;flex:1 1 auto;gap:.75rem;width:100%;min-height:0;overflow:auto}.dynamic-view-builder__field-config-row{display:grid;grid-template-columns:minmax(13rem,1.1fr) minmax(0,1.9fr);gap:.9rem;align-items:start;width:100%;padding:.85rem .9rem;border:1px solid #dbe3ec;border-radius:.7rem;background:#fff}.dynamic-view-builder__source-config-row{display:grid;grid-template-columns:minmax(13rem,1fr) minmax(0,1.35fr);gap:.9rem;align-items:center;width:100%;padding:.85rem .9rem;border:1px solid #dbe3ec;border-radius:.7rem;background:#fff}.dynamic-view-builder__field-config-main,.dynamic-view-builder__source-config-main{display:flex;flex-direction:column;gap:.45rem;min-width:0}.dynamic-view-builder__field-config-title{display:inline-flex;align-items:baseline;gap:0;min-width:0;flex-wrap:wrap}.dynamic-view-builder__field-config-function{display:inline-flex;align-items:center;gap:.45rem;flex-wrap:wrap}.dynamic-view-builder__field-config-controls{display:grid;grid-template-columns:minmax(0,1fr) minmax(7rem,8rem) auto auto;gap:.75rem;align-items:end;min-width:0}.dynamic-view-builder__source-config-controls{display:grid;grid-template-columns:minmax(0,1fr);gap:.75rem;align-items:end;min-width:0}.dynamic-view-builder__field-config-controls--function{grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto auto}.dynamic-view-builder__field-form{display:grid;grid-template-columns:minmax(0,1fr) minmax(10rem,11rem);gap:.75rem 1rem;align-items:start}.dynamic-view-builder__field-form--balanced{grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr)}.dynamic-view-builder__field-width{display:flex;flex-direction:column;gap:.35rem;min-width:0}.dynamic-view-builder__between{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.625rem}.dynamic-view-builder__row-chip{display:inline-flex;align-items:center;padding:.14rem .45rem;border-radius:999px;font-size:.74rem;font-weight:600;line-height:1.2}.dynamic-view-builder__row-chip--operator{background:#eef4fb;color:#1b5cff}.dynamic-view-builder__row-chip--value{background:#f4f7fa;color:#5d7084}.dynamic-view-builder__row-chip--optional{background:#f2f7f3;color:#1f8a52}.dynamic-view-builder__row-chip--domain{background:#eef4fb;color:#425466}.dynamic-view-builder__field-drop-indicator{display:inline-flex;align-self:stretch;width:.2rem;min-height:2.2rem;border-radius:999px;background:#1b5cff;box-shadow:0 0 0 3px #1b5cff24;flex:0 0 auto}@media (max-width: 1120px){.dynamic-view-builder__workspace--split{grid-template-columns:1fr;grid-template-areas:\"builder\" \"preview\"}.dynamic-view-builder__workspace--split.dynamic-view-builder__workspace--preview-hidden{justify-items:stretch}.dynamic-view-builder__sections--split{padding-right:0}}@media (max-width: 900px){.dynamic-view-builder__field-form,.dynamic-view-builder__field-form--balanced,.dynamic-view-builder__field-config-toolbar,.dynamic-view-builder__field-config-row,.dynamic-view-builder__source-config-row,.dynamic-view-builder__field-config-controls,.dynamic-view-builder__source-config-controls,.dynamic-view-builder__field-config-controls--function{grid-template-columns:1fr}.dynamic-view-builder__section-row{flex-direction:column}.dynamic-view-builder__section--half,.dynamic-view-builder__section--compact,.dynamic-view-builder__section--fluid{width:100%}.dynamic-view-builder__toolbar,.dynamic-view-builder__section-head,.dynamic-view-builder__row,.dynamic-view-builder__footer,.dynamic-view-builder__modal-footer,.dynamic-view-builder__filter-toolbar,.dynamic-view-builder__field-selection-toolbar{flex-direction:column;align-items:stretch}.dynamic-view-builder__toolbar-actions,.dynamic-view-builder__section-actions,.dynamic-view-builder__row-actions{justify-content:flex-start}.dynamic-view-builder__alias-field{min-inline-size:6rem;max-inline-size:100%}.dynamic-view-builder__modal-grid,.dynamic-view-builder__modal-grid--filter,.dynamic-view-builder__modal-grid--filter-controls,.dynamic-view-builder__filter-modal,.dynamic-view-builder__filter-summary,.dynamic-view-builder__filter-domain-grid,.dynamic-view-builder__filter-review-grid,.dynamic-view-builder__between,.dynamic-view-builder__join-modal-top{grid-template-columns:1fr}.dynamic-view-builder__row{min-inline-size:100%}}:host ::ng-deep .sdc-modal__content{display:flex;flex-direction:column;min-height:0;overflow:hidden}:host ::ng-deep .sdc-modal__content>.dynamic-view-builder__modal-shell{flex:1 1 auto;min-height:0}@media (max-width: 768px){.dynamic-view-builder__selection-head,.dynamic-view-builder__selection-row{grid-template-columns:1fr}.dynamic-view-builder__selection-col--select,.dynamic-view-builder__selection-cell--select{justify-content:flex-start}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: ButtonComponent, selector: "sdc-button", inputs: ["id", "label", "ariaLabel", "disabled", "loading", "width", "priority", "size", "type", "icon", "rightIcon", "auxiliary", "caret", "tooltip", "animation", "slide", "styleClass", "badge", "menuOptions", "menuContext", "model"], outputs: ["clicked"] }, { kind: "component", type: CheckboxComponent, selector: "sdc-checkbox", inputs: ["label", "disabled", "commonCheckbox", "labelPosition", "size", "checked"], outputs: ["checkedChange"] }, { kind: "component", type: CodeEditorComponent, selector: "sdc-code-editor", inputs: ["sql", "height", "width", "showCopy", "label", "required", "customHeaderItems", "activeHeaderKey", "readOnly", "language", "schema"], outputs: ["headerSelect", "onCopy", "languageChange", "domainFilterClick"] }, { kind: "component", type: ComboboxComponent, selector: "sdc-combobox", inputs: ["multiple", "appendTo", "zIndex", "options", "overrideChipMessage", "maxSelectedLabels", "showClear", "searchable", "iconSelector", "showIconClass", "infoTooltip", "infoTooltipPosition", "infoTooltipEvent", "infoTooltipAllowHtml"], outputs: ["onSelectedItem", "panelClosed"] }, { kind: "component", type: InfoSignComponent, selector: "sdc-info-sign", inputs: ["label", "labelParams", "tooltip", "tooltipParams", "iconClass", "iconAriaLabel", "tooltipPosition", "tooltipEvent", "allowHtml", "inline"] }, { kind: "component", type: ModalComponent, selector: "sdc-modal", inputs: ["footerButtons", "headerActions", "header", "height", "maximizable", "maximize", "resizable", "responsive", "width", "zIndex", "closable", "styleClass", "appendToBody", "visible"], outputs: ["hidden", "visibleChange"] }, { kind: "component", type: PicklistComponent, selector: "sdc-picklist", inputs: ["items", "selectedIds", "idKey", "titleKey", "subtitleKey", "iconClass", "selectionIconClass", "placeholder", "emptyTitle", "emptyText", "emptyIconClass", "resultsCounterSingularLabel", "resultsCounterPluralLabel", "filterFields", "first", "rows", "rowsPerPageOptions", "maxVisibleSelectedItems", "showPaginator", "showRowsPerPageOptions", "showSelectionCounter", "showResultsCounter", "showItemIcon", "autoResize", "autoResizeMinRows", "autoResizeMaxRows", "autoResizeItemHeight", "autoResizeViewportOffset", "maxTitleLength", "maxSubtitleLength", "autofocusSearch", "loading"], outputs: ["pageChange", "selectedIdsChange"] }, { kind: "component", type: SelectButtonComponent, selector: "sdc-select-button", inputs: ["items", "multiple", "appearance", "label", "required", "invalid", "message", "compareWith", "disabled"], outputs: ["itemSelected", "itemClicked"] }, { kind: "component", type: TextareaComponent, selector: "sdc-textarea", inputs: ["infoTooltip", "infoTooltipPosition", "infoTooltipEvent", "rows", "autoResize"] }, { kind: "component", type: TextboxComponent, selector: "sdc-textbox", inputs: ["infoTooltip", "infoTooltipPosition", "infoTooltipEvent"] }, { kind: "component", type: TimelineComponent, selector: "sdc-timeline", inputs: ["items", "activeIndex", "orientation", "interactive", "responsive", "showDescriptions", "ariaLabel", "ariaLabelParams"], outputs: ["stepSelect"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2306
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: VisualSqlEditorComponent, isStandalone: true, selector: "sdc-visual-sql-editor", inputs: { loading: "loading", config: "config" }, outputs: { configChange: "configChange", save: "save", cancel: "cancel" }, host: { listeners: { "window:resize": "onWindowResize()" } }, providers: [VisualSqlEditorFlowService, VisualSqlEditorStateService], viewQueries: [{ propertyName: "sectionsContainer", first: true, predicate: ["sectionsContainer"], descendants: true }, { propertyName: "builderSections", predicate: ["builderSection"], descendants: true }], ngImport: i0, template: "<div class=\"dynamic-view-builder\" [attr.aria-busy]=\"loading\">\n <div class=\"dynamic-view-builder__toolbar\">\n <div class=\"dynamic-view-builder__toolbar-copy\">\n <div class=\"dynamic-view-builder__title\">\n {{ config.metadata.title }}\n </div>\n <div class=\"dynamic-view-builder__subtitle\">\n {{ config.metadata.description }}\n </div>\n </div>\n <div class=\"dynamic-view-builder__toolbar-actions\">\n <span class=\"dynamic-view-builder__toolbar-label\">\n {{ (config.translationPrefix + '.fields.layoutMode') | translate }}\n </span>\n <sdc-select-button\n [items]=\"layoutModeItems\"\n [ngModel]=\"selectedLayoutModeItems\"\n (ngModelChange)=\"onLayoutModeChange($event)\"\n ></sdc-select-button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__preview-toggle\"\n (click)=\"togglePreview()\"\n [attr.aria-pressed]=\"previewVisible\"\n [title]=\"previewToggleLabel\"\n [attr.aria-label]=\"previewToggleLabel\"\n >\n <i\n [class]=\"previewVisible ? 'fas fa-eye-slash' : 'fas fa-eye'\"\n aria-hidden=\"true\"\n ></i>\n {{ previewToggleLabel }}\n </button>\n </div>\n </div>\n\n @if (selectionModalVisible) {\n <sdc-modal\n [visible]=\"selectionModalVisible\"\n (visibleChange)=\"$event ? (selectionModalVisible = true) : closeSelectionModal()\"\n [header]=\"selectionModalTitle\"\n [width]=\"modalDimensions.selection.width\"\n [height]=\"modalDimensions.selection.height\"\n [maximizable]=\"false\"\n [footerButtons]=\"[]\"\n >\n <div\n class=\"dynamic-view-builder__modal-shell dynamic-view-builder__modal-shell--full\n dynamic-view-builder__selection-flow dynamic-view-builder__modal-stage\"\n >\n @if (selectionModalMode === 'tables') {\n <div class=\"dynamic-view-builder__modal-inline-surface\">\n <sdc-textbox\n [label]=\"modalSearchLabel\"\n [placeholder]=\"modalSearchPlaceholder\"\n [ngModel]=\"selectionModalSearch\"\n (ngModelChange)=\"selectionModalSearch = $event\"\n width=\"100%\"\n ></sdc-textbox>\n </div>\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__modal-stage-body\"\n >\n <div\n class=\"dynamic-view-builder__selection-table\n dynamic-view-builder__selection-table--chooser\n dynamic-view-builder__selection-table--fluid\"\n >\n <div class=\"dynamic-view-builder__selection-head\">\n <div class=\"dynamic-view-builder__selection-col\">\n {{ modalNameLabel }}\n </div>\n <div class=\"dynamic-view-builder__selection-col\">\n {{ modalTypeLabel }}\n </div>\n <div class=\"dynamic-view-builder__selection-col dynamic-view-builder__selection-col--select\">\n {{ modalSelectLabel }}\n </div>\n </div>\n <div class=\"dynamic-view-builder__selection-body\">\n @for (row of selectionModalRows; track trackById($index, row)) {\n <div\n class=\"dynamic-view-builder__selection-row\"\n [class.dynamic-view-builder__selection-row--selected]=\"row.selected\"\n [attr.role]=\"'button'\"\n [attr.tabindex]=\"row.disabled ? -1 : 0\"\n [attr.aria-pressed]=\"row.selected\"\n [attr.aria-disabled]=\"row.disabled\"\n (click)=\"toggleSelectionModalRow(row.id)\"\n (keydown)=\"onSelectableRowKeydown($event)\"\n >\n <div class=\"dynamic-view-builder__selection-cell\">\n @if (row.tableLabel) {\n <span class=\"dynamic-view-builder__selection-path\">\n @if (row.pathType === 'table') {\n @if (row.dbLabel) {\n <span class=\"dynamic-view-builder__selection-db\">{{ row.dbLabel }}</span>\n }\n @if (row.dbLabel) {\n <span class=\"dynamic-view-builder__selection-separator\">.</span>\n }\n <span class=\"dynamic-view-builder__selection-table-label\">{{ row.tableLabel }}</span>\n } @else {\n <span class=\"dynamic-view-builder__selection-table-label\">{{ row.tableLabel }}</span>\n <span class=\"dynamic-view-builder__selection-separator\">.</span>\n <span class=\"dynamic-view-builder__selection-accent\">{{ row.name }}</span>\n }\n </span>\n } @else {\n {{ row.name }}\n }\n </div>\n <div class=\"dynamic-view-builder__selection-cell dynamic-view-builder__selection-cell--meta\">\n <span>{{ row.meta }}</span>\n @if (row.note) {\n <span class=\"dynamic-view-builder__selection-note\">\n {{ row.note }}\n </span>\n }\n </div>\n <div class=\"dynamic-view-builder__selection-cell dynamic-view-builder__selection-cell--select\">\n <span\n class=\"dynamic-view-builder__selection-marker\"\n [class.dynamic-view-builder__selection-marker--selected]=\"row.selected\"\n aria-hidden=\"true\"\n >\n <i class=\"fas fa-check\"></i>\n </span>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n } @else {\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__picklist-shell dynamic-view-builder__modal-stage-body\"\n >\n <sdc-picklist\n [items]=\"selectionModalPicklistItems\"\n [selectedIds]=\"selectionModalSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [autoResize]=\"false\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onSelectionModalSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n }\n </div>\n <div footer class=\"dynamic-view-builder__modal-footer\">\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n priority=\"secondary\"\n (click)=\"closeSelectionModal()\"\n (keydown.enter)=\"closeSelectionModal()\"\n ></sdc-button>\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.confirmSelection') | translate\"\n (click)=\"confirmSelectionModal()\"\n (keydown.enter)=\"confirmSelectionModal()\"\n ></sdc-button>\n </div>\n </sdc-modal>\n }\n\n @if (sourceModalVisible) {\n <sdc-modal\n [visible]=\"sourceModalVisible\"\n (visibleChange)=\"$event ? (sourceModalVisible = true) : closeSourceModal()\"\n [header]=\"sourceModalTitle\"\n [width]=\"modalDimensions.source.width\"\n [height]=\"modalDimensions.source.height\"\n [maximizable]=\"false\"\n [footerButtons]=\"[]\"\n >\n <div class=\"dynamic-view-builder__modal-shell dynamic-view-builder__field-modal\">\n <sdc-timeline\n [items]=\"sourceModalTimelineItems\"\n [activeIndex]=\"sourceModalConfigurationStepActive ? 1 : 0\"\n [interactive]=\"true\"\n [showDescriptions]=\"false\"\n [ariaLabel]=\"sourceModalTimelineAriaLabel\"\n (stepSelect)=\"onSourceModalTimelineStepSelect($event)\"\n ></sdc-timeline>\n @if (sourceModalSelectionStepActive) {\n <div\n class=\"dynamic-view-builder__modal-shell dynamic-view-builder__modal-shell--full\n dynamic-view-builder__selection-flow dynamic-view-builder__modal-stage\"\n >\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__picklist-shell dynamic-view-builder__modal-stage-body\"\n >\n <sdc-picklist\n [items]=\"sourceModalPicklistItems\"\n [selectedIds]=\"sourceModalSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [autoResize]=\"false\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onSourceModalSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n </div>\n } @else {\n <div\n class=\"dynamic-view-builder__modal-field dynamic-view-builder__modal-field--stretch\n dynamic-view-builder__field-config-shell\"\n >\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__modal-list-shell\"\n >\n <div class=\"dynamic-view-builder__source-config-list\">\n @for (item of sourceModalConfiguredItems; track trackById($index, item)) {\n <div class=\"dynamic-view-builder__source-config-row\">\n <div class=\"dynamic-view-builder__source-config-main\">\n <div class=\"dynamic-view-builder__field-config-title\">\n <span class=\"dynamic-view-builder__selection-table-label\">{{ item.dbLabel }}</span>\n <span class=\"dynamic-view-builder__selection-separator\">.</span>\n <span class=\"dynamic-view-builder__selection-accent\">{{ item.tableLabel }}</span>\n </div>\n </div>\n <div class=\"dynamic-view-builder__source-config-controls\">\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.alias'\"\n [ngModel]=\"item.alias\"\n (ngModelChange)=\"onSourceModalAliasChange(item.table, $event)\"\n width=\"100%\"\n [maxlength]=\"24\"\n ></sdc-textbox>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n <div footer class=\"dynamic-view-builder__modal-footer\">\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n priority=\"secondary\"\n (click)=\"closeSourceModal()\"\n (keydown.enter)=\"closeSourceModal()\"\n ></sdc-button>\n @if (sourceModalSelectionStepActive && sourceModalCanProceed) {\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.nextStep') | translate\"\n (click)=\"advanceSourceModalStep()\"\n (keydown.enter)=\"advanceSourceModalStep()\"\n ></sdc-button>\n }\n @if (sourceModalConfigurationStepActive) {\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.save') | translate\"\n [disabled]=\"!sourceModalCanProceed\"\n (click)=\"saveSourceModal()\"\n (keydown.enter)=\"saveSourceModal()\"\n ></sdc-button>\n }\n </div>\n </sdc-modal>\n }\n\n @if (joinModalVisible) {\n <sdc-modal\n [visible]=\"joinModalVisible\"\n (visibleChange)=\"$event ? (joinModalVisible = true) : closeJoinModal()\"\n [header]=\"(config.translationPrefix + '.cards.joins.title') | translate\"\n [width]=\"modalDimensions.join.width\"\n [height]=\"modalDimensions.join.height\"\n [maximizable]=\"false\"\n [footerButtons]=\"[]\"\n >\n <div class=\"dynamic-view-builder__modal-shell dynamic-view-builder__join-modal\">\n <div class=\"dynamic-view-builder__join-modal-top\">\n <div class=\"dynamic-view-builder__modal-summary dynamic-view-builder__modal-card\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.fields.left') | translate }}\n </div>\n <div\n class=\"dynamic-view-builder__modal-summary-value\n dynamic-view-builder__modal-summary-value--path\"\n >{{ joinSourceSummary }}</div>\n </div>\n <div\n class=\"dynamic-view-builder__modal-field\n dynamic-view-builder__modal-field--compact\n dynamic-view-builder__modal-card\"\n >\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.operator'\"\n [ngModel]=\"joinDraft.operator\"\n (ngModelChange)=\"joinDraft.operator = $event\"\n [options]=\"joinOperatorOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n width=\"100%\"\n ></sdc-combobox>\n </div>\n <div class=\"dynamic-view-builder__modal-summary dynamic-view-builder__modal-card\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.fields.right') | translate }}\n </div>\n <div\n class=\"dynamic-view-builder__modal-summary-value\n dynamic-view-builder__modal-summary-value--path\"\n >{{ joinTargetSummary }}</div>\n </div>\n </div>\n <div class=\"dynamic-view-builder__modal-grid dynamic-view-builder__modal-grid--fit\">\n <div\n class=\"dynamic-view-builder__modal-picker dynamic-view-builder__modal-picker--stretch\n dynamic-view-builder__modal-card dynamic-view-builder__picklist-shell\"\n >\n <div class=\"dynamic-view-builder__modal-panel-title\">\n {{ (config.translationPrefix + '.fields.left') | translate }}\n </div>\n <sdc-picklist\n [items]=\"joinSourcePicklistItems\"\n [selectedIds]=\"joinSourceSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [autoResize]=\"false\"\n [maxVisibleSelectedItems]=\"1\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onJoinSourceSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n <div\n class=\"dynamic-view-builder__modal-picker dynamic-view-builder__modal-picker--stretch\n dynamic-view-builder__modal-card dynamic-view-builder__picklist-shell\"\n >\n <div class=\"dynamic-view-builder__modal-panel-title\">\n {{ (config.translationPrefix + '.fields.right') | translate }}\n </div>\n <sdc-picklist\n [items]=\"joinTargetPicklistItems\"\n [selectedIds]=\"joinTargetSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [autoResize]=\"false\"\n [maxVisibleSelectedItems]=\"1\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onJoinTargetSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n </div>\n </div>\n <div footer class=\"dynamic-view-builder__modal-footer\">\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n priority=\"secondary\"\n (click)=\"closeJoinModal()\"\n (keydown.enter)=\"closeJoinModal()\"\n ></sdc-button>\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.save') | translate\"\n [disabled]=\"!canSaveJoin\"\n (click)=\"saveJoin()\"\n (keydown.enter)=\"saveJoin()\"\n ></sdc-button>\n </div>\n </sdc-modal>\n }\n\n @if (sortModalVisible) {\n <sdc-modal\n [visible]=\"sortModalVisible\"\n (visibleChange)=\"$event ? (sortModalVisible = true) : closeSortModal()\"\n [header]=\"sortModalTitle\"\n [width]=\"modalDimensions.sort.width\"\n [height]=\"modalDimensions.sort.height\"\n [maximizable]=\"false\"\n [footerButtons]=\"[]\"\n >\n <div class=\"dynamic-view-builder__modal-shell dynamic-view-builder__sort-modal\">\n <div\n class=\"dynamic-view-builder__modal-field\n dynamic-view-builder__modal-field--full\n dynamic-view-builder__sort-direction-field\"\n >\n <div class=\"dynamic-view-builder__modal-label\">\n {{ (config.translationPrefix + '.fields.direction') | translate }}\n </div>\n <sdc-select-button\n class=\"dynamic-view-builder__sort-direction\"\n [items]=\"sortDirectionItems\"\n appearance=\"soft\"\n [ngModel]=\"selectedSortDirectionItems\"\n (ngModelChange)=\"onSortDirectionChange($event)\"\n ></sdc-select-button>\n </div>\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__modal-picker dynamic-view-builder__modal-picker--stretch\n dynamic-view-builder__selection-flow dynamic-view-builder__picklist-shell\n dynamic-view-builder__modal-stage-body\"\n >\n <sdc-picklist\n [items]=\"sortPicklistItems\"\n [selectedIds]=\"sortSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [autoResize]=\"false\"\n [maxVisibleSelectedItems]=\"1\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onSortSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n </div>\n <div footer class=\"dynamic-view-builder__modal-footer\">\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n priority=\"secondary\"\n (click)=\"closeSortModal()\"\n (keydown.enter)=\"closeSortModal()\"\n ></sdc-button>\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.save') | translate\"\n [disabled]=\"!canSaveSort\"\n (click)=\"saveSort()\"\n (keydown.enter)=\"saveSort()\"\n ></sdc-button>\n </div>\n </sdc-modal>\n }\n\n @if (filterModalVisible) {\n <sdc-modal\n [visible]=\"filterModalVisible\"\n (visibleChange)=\"$event ? (filterModalVisible = true) : closeFilterModal()\"\n [header]=\"filterModalTitle\"\n [width]=\"modalDimensions.filter.width\"\n [height]=\"modalDimensions.filter.height\"\n [maximizable]=\"false\"\n [footerButtons]=\"[]\"\n >\n <div class=\"dynamic-view-builder__modal-shell dynamic-view-builder__filter-modal\">\n <sdc-timeline\n [items]=\"filterModalTimelineItems\"\n [activeIndex]=\"filterModalReviewStepActive ? 2 : (filterModalConfigurationStepActive ? 1 : 0)\"\n [interactive]=\"true\"\n [showDescriptions]=\"false\"\n [ariaLabel]=\"filterModalTimelineAriaLabel\"\n (stepSelect)=\"onFilterModalTimelineStepSelect($event)\"\n ></sdc-timeline>\n @if (filterModalSelectionStepActive) {\n <div class=\"dynamic-view-builder__filter-step\">\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__filter-base-selector\"\n >\n <div class=\"dynamic-view-builder__filter-heading\">\n <div class=\"dynamic-view-builder__modal-panel-title\">\n {{ (config.translationPrefix + '.modals.filter.steps.select.title') | translate }}\n </div>\n <sdc-info-sign\n [tooltip]=\"config.translationPrefix + '.filters.tooltips.mode'\"\n [tooltipPosition]=\"'left'\"\n ></sdc-info-sign>\n </div>\n <div class=\"dynamic-view-builder__filter-mode-row\">\n <div class=\"dynamic-view-builder__filter-mode-copy\">\n {{ (config.translationPrefix + '.modals.filter.title') | translate }}\n </div>\n </div>\n <div class=\"dynamic-view-builder__filter-mode-selector\">\n <sdc-select-button\n [items]=\"filterModeItems\"\n appearance=\"soft\"\n [ngModel]=\"selectedFilterModeItems\"\n (ngModelChange)=\"onFilterModeChange($event[0]?.value || 'condition')\"\n ></sdc-select-button>\n </div>\n </div>\n @if (filterModalMode === 'condition') {\n <div\n class=\"dynamic-view-builder__modal-picker\n dynamic-view-builder__modal-picker--filter\n dynamic-view-builder__modal-picker--stretch\n dynamic-view-builder__selection-flow\n dynamic-view-builder__modal-stage-body\"\n >\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__picklist-shell\"\n >\n <sdc-picklist\n [items]=\"filterModalPicklistItems\"\n [selectedIds]=\"filterModalSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [autoResize]=\"false\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [maxVisibleSelectedItems]=\"1\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onFilterModalSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n </div>\n } @else {\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__filter-domain-intro\"\n >\n <div class=\"dynamic-view-builder__filter-heading\">\n <div class=\"dynamic-view-builder__modal-panel-title\">\n {{ (config.translationPrefix + '.filters.domainLabel') | translate }}\n </div>\n <sdc-info-sign\n [tooltip]=\"filterDomainExpressionTooltip\"\n [tooltipPosition]=\"'left'\"\n ></sdc-info-sign>\n </div>\n <div class=\"dynamic-view-builder__filter-domain-grid\">\n <div class=\"dynamic-view-builder__filter-domain-item\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.fields.domainExpression') | translate }}\n </div>\n <div class=\"dynamic-view-builder__modal-summary-value\">\n {{ filterDomainExpressionTooltip }}\n </div>\n </div>\n <div class=\"dynamic-view-builder__filter-domain-item\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.fields.connector') | translate }}\n </div>\n <div class=\"dynamic-view-builder__modal-summary-value\">\n {{ filterConnectorTooltip }}\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n } @else {\n @if (filterModalConfigurationStepActive) {\n <div class=\"dynamic-view-builder__filter-step\">\n <div class=\"dynamic-view-builder__filter-toolbar\">\n <div class=\"dynamic-view-builder__modal-summary dynamic-view-builder__modal-summary--filter\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.modals.filter.steps.configure.title') | translate }}\n </div>\n <div\n class=\"dynamic-view-builder__modal-summary-value\n dynamic-view-builder__modal-summary-value--path\"\n >\n {{ filterConfigurationSummaryLabel }}\n </div>\n </div>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\"\n (click)=\"goToFilterModalStep('select')\"\n >\n {{ filterBackToSelectionLabel }}\n </button>\n </div>\n @if (filterModalMode === 'condition') {\n <div\n class=\"dynamic-view-builder__modal-field\n dynamic-view-builder__modal-field--stretch\n dynamic-view-builder__modal-card\n dynamic-view-builder__modal-card--section\n dynamic-view-builder__filter-config-card\"\n >\n <div class=\"dynamic-view-builder__filter-config-section\">\n <div class=\"dynamic-view-builder__filter-heading\">\n <div class=\"dynamic-view-builder__modal-panel-title\">\n {{ (config.translationPrefix + '.modals.filter.steps.configure.title') | translate }}\n </div>\n <sdc-info-sign\n [tooltip]=\"config.translationPrefix + '.filters.tooltips.configure'\"\n [tooltipPosition]=\"'left'\"\n ></sdc-info-sign>\n </div>\n <div class=\"dynamic-view-builder__modal-grid dynamic-view-builder__modal-grid--filter-controls\">\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.connector'\"\n [ngModel]=\"filterDraft.connector\"\n (ngModelChange)=\"filterDraft.connector = $event\"\n [options]=\"filterConnectorOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n [disabled]=\"filterConnectorDisabled\"\n [infoTooltip]=\"filterConnectorTooltip\"\n width=\"100%\"\n ></sdc-combobox>\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.operator'\"\n [ngModel]=\"filterDraft.operator\"\n (ngModelChange)=\"filterDraft.operator = $event; onFilterOperatorChange()\"\n [options]=\"filterOperatorOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n width=\"100%\"\n [disabled]=\"!filterDraft.column\"\n [infoTooltip]=\"filterOperatorTooltip\"\n ></sdc-combobox>\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.valueType'\"\n [ngModel]=\"filterDraft.valueType\"\n (ngModelChange)=\"filterDraft.valueType = $event; onFilterValueTypeChange()\"\n [options]=\"valueTypeOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n [disabled]=\"filterValueTypeDisabled\"\n [infoTooltip]=\"filterValueTypeTooltip\"\n width=\"100%\"\n ></sdc-combobox>\n <div class=\"dynamic-view-builder__filter-optional\">\n <sdc-checkbox\n [label]=\"config.translationPrefix + '.states.optional'\"\n [ngModel]=\"filterDraft.optional\"\n (ngModelChange)=\"filterDraft.optional = $event\"\n ></sdc-checkbox>\n <sdc-info-sign\n [tooltip]=\"filterOptionalTooltip\"\n [tooltipPosition]=\"'left'\"\n ></sdc-info-sign>\n </div>\n </div>\n </div>\n <div\n class=\"dynamic-view-builder__filter-config-section\n dynamic-view-builder__filter-config-section--value\"\n >\n <div class=\"dynamic-view-builder__modal-grid dynamic-view-builder__modal-grid--single\">\n @if (showFilterBooleanCombobox) {\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.value'\"\n [ngModel]=\"filterDraft.value\"\n (ngModelChange)=\"filterDraft.value = $event\"\n [options]=\"booleanValueOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n width=\"100%\"\n ></sdc-combobox>\n }\n @if (showFilterValueTextbox) {\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.value'\"\n [ngModel]=\"filterDraft.value\"\n (ngModelChange)=\"filterDraft.value = $event\"\n width=\"100%\"\n ></sdc-textbox>\n }\n @if (showFilterValuesTextbox) {\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.values'\"\n [ngModel]=\"filterDraft.valuesText\"\n (ngModelChange)=\"filterDraft.valuesText = $event\"\n width=\"100%\"\n ></sdc-textbox>\n }\n @if (showFilterBetweenInputs) {\n <div class=\"dynamic-view-builder__between dynamic-view-builder__modal-grid-column-full\">\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.valueStart'\"\n [ngModel]=\"filterDraft.betweenStart\"\n (ngModelChange)=\"filterDraft.betweenStart = $event\"\n width=\"100%\"\n ></sdc-textbox>\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.valueEnd'\"\n [ngModel]=\"filterDraft.betweenEnd\"\n (ngModelChange)=\"filterDraft.betweenEnd = $event\"\n width=\"100%\"\n ></sdc-textbox>\n </div>\n }\n @if (showFilterParameterTextbox) {\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.parameterName'\"\n [ngModel]=\"filterDraft.parameterName\"\n (ngModelChange)=\"filterDraft.parameterName = $event\"\n width=\"100%\"\n ></sdc-textbox>\n }\n </div>\n </div>\n </div>\n } @else {\n <div\n class=\"dynamic-view-builder__modal-field\n dynamic-view-builder__modal-field--stretch\n dynamic-view-builder__modal-card\n dynamic-view-builder__modal-card--section\n dynamic-view-builder__filter-config-card\"\n >\n <div class=\"dynamic-view-builder__filter-config-section\">\n <div class=\"dynamic-view-builder__modal-grid dynamic-view-builder__modal-grid--filter-controls\">\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.connector'\"\n [ngModel]=\"filterDraft.connector\"\n (ngModelChange)=\"filterDraft.connector = $event\"\n [options]=\"filterConnectorOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n [disabled]=\"filterConnectorDisabled\"\n [infoTooltip]=\"filterConnectorTooltip\"\n width=\"100%\"\n ></sdc-combobox>\n <div class=\"dynamic-view-builder__filter-optional\">\n <sdc-checkbox\n [label]=\"config.translationPrefix + '.states.optional'\"\n [ngModel]=\"filterDraft.optional\"\n (ngModelChange)=\"filterDraft.optional = $event\"\n ></sdc-checkbox>\n <sdc-info-sign\n [tooltip]=\"filterOptionalTooltip\"\n [tooltipPosition]=\"'left'\"\n ></sdc-info-sign>\n </div>\n </div>\n </div>\n <div\n class=\"dynamic-view-builder__filter-config-section\n dynamic-view-builder__filter-config-section--domain\"\n >\n <div class=\"dynamic-view-builder__filter-heading\">\n <div class=\"dynamic-view-builder__modal-panel-title\">\n {{ (config.translationPrefix + '.fields.domainExpression') | translate }}\n </div>\n <sdc-info-sign\n [tooltip]=\"filterDomainExpressionTooltip\"\n [tooltipPosition]=\"'left'\"\n ></sdc-info-sign>\n </div>\n <div class=\"dynamic-view-builder__filter-domain-hint\">\n {{ filterDomainExpressionTooltip }}\n </div>\n <sdc-textarea\n [label]=\"''\"\n [ngModel]=\"filterDraft.domainExpression\"\n (ngModelChange)=\"filterDraft.domainExpression = $event\"\n width=\"100%\"\n [rows]=\"10\"\n ></sdc-textarea>\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"dynamic-view-builder__filter-step\">\n <div class=\"dynamic-view-builder__filter-toolbar\">\n <div class=\"dynamic-view-builder__modal-summary dynamic-view-builder__modal-summary--filter\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.modals.filter.steps.review.title') | translate }}\n </div>\n <div\n class=\"dynamic-view-builder__modal-summary-value\n dynamic-view-builder__modal-summary-value--path\"\n >\n {{ filterConfigurationSummaryLabel }}\n </div>\n </div>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\"\n (click)=\"goToFilterModalStep('configure')\"\n >\n {{ filterBackToConfigurationLabel }}\n </button>\n </div>\n <div\n class=\"dynamic-view-builder__modal-field\n dynamic-view-builder__modal-field--stretch\n dynamic-view-builder__modal-card\n dynamic-view-builder__modal-card--section\n dynamic-view-builder__filter-config-card\"\n >\n <div class=\"dynamic-view-builder__filter-review-grid\">\n @for (item of filterReviewItems; track trackById($index, item)) {\n <div\n class=\"dynamic-view-builder__filter-review-item\"\n >\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ item.label }}\n </div>\n <div\n class=\"dynamic-view-builder__modal-summary-value\"\n [class.dynamic-view-builder__modal-summary-value--path]=\"item.emphasize === 'path'\"\n [class.dynamic-view-builder__filter-review-code]=\"item.emphasize === 'code'\"\n >\n {{ item.value }}\n </div>\n </div>\n }\n </div>\n <div class=\"dynamic-view-builder__filter-review-preview\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.fields.sqlPreview') | translate }}\n </div>\n <sdc-textarea\n [label]=\"''\"\n [ngModel]=\"filterReviewPreviewLabel\"\n width=\"100%\"\n [rows]=\"6\"\n [disabled]=\"true\"\n ></sdc-textarea>\n </div>\n </div>\n </div>\n }\n }\n </div>\n <div footer class=\"dynamic-view-builder__modal-footer\">\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n priority=\"secondary\"\n (click)=\"closeFilterModal()\"\n (keydown.enter)=\"closeFilterModal()\"\n ></sdc-button>\n @if (filterModalSelectionStepActive) {\n <sdc-button\n [label]=\"filterModalConfigureActionLabel\"\n [disabled]=\"!filterModalCanProceed\"\n (click)=\"advanceFilterModalStep()\"\n (keydown.enter)=\"advanceFilterModalStep()\"\n ></sdc-button>\n }\n @if (filterModalConfigurationStepActive) {\n <sdc-button\n [label]=\"filterModalReviewActionLabel\"\n [disabled]=\"!filterModalCanReview\"\n (click)=\"advanceFilterModalStep()\"\n (keydown.enter)=\"advanceFilterModalStep()\"\n ></sdc-button>\n }\n @if (filterModalReviewStepActive) {\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.save') | translate\"\n [disabled]=\"!canSaveFilter\"\n (click)=\"saveFilter()\"\n (keydown.enter)=\"saveFilter()\"\n ></sdc-button>\n }\n </div>\n </sdc-modal>\n }\n\n @if (fieldModalVisible) {\n <sdc-modal\n [visible]=\"fieldModalVisible\"\n (visibleChange)=\"$event ? (fieldModalVisible = true) : closeFieldModal()\"\n [header]=\"fieldModalTitle\"\n [width]=\"modalDimensions.field.width\"\n [height]=\"modalDimensions.field.height\"\n [maximizable]=\"false\"\n [footerButtons]=\"[]\"\n >\n <div class=\"dynamic-view-builder__modal-shell dynamic-view-builder__field-modal\">\n <sdc-timeline\n [items]=\"fieldModalTimelineItems\"\n [activeIndex]=\"fieldModalConfigurationStepActive ? 1 : 0\"\n [interactive]=\"true\"\n [showDescriptions]=\"false\"\n [ariaLabel]=\"fieldModalTimelineAriaLabel\"\n (stepSelect)=\"onFieldModalTimelineStepSelect($event)\"\n ></sdc-timeline>\n @if (fieldModalSelectionStepActive) {\n <div\n class=\"dynamic-view-builder__modal-shell dynamic-view-builder__modal-shell--full\n dynamic-view-builder__selection-flow dynamic-view-builder__modal-stage\"\n >\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__picklist-shell dynamic-view-builder__modal-stage-body\"\n >\n <sdc-picklist\n [items]=\"fieldModalPicklistItems\"\n [selectedIds]=\"fieldModalSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [autoResize]=\"false\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onFieldModalSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n </div>\n } @else {\n <div\n class=\"dynamic-view-builder__modal-field dynamic-view-builder__modal-field--stretch\n dynamic-view-builder__field-config-shell\"\n >\n <div class=\"dynamic-view-builder__field-config-toolbar\">\n <div class=\"dynamic-view-builder__field-config-summary\">\n {{ fieldModalConfiguredItems.length }}\n {{ (config.translationPrefix + '.cards.fields.title') | translate }}\n </div>\n @if (fieldModalHasSelectableColumns) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--primary\"\n (click)=\"addAnotherFieldFromModal()\"\n >\n {{ (config.translationPrefix + '.actions.selectColumns') | translate }}\n </button>\n }\n </div>\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__modal-list-shell\"\n >\n <div class=\"dynamic-view-builder__field-config-list\">\n @for (item of fieldModalConfiguredItems; track trackById($index, item)) {\n <div class=\"dynamic-view-builder__field-config-row\">\n <div class=\"dynamic-view-builder__field-config-main\">\n <div class=\"dynamic-view-builder__field-config-title\">\n <span class=\"dynamic-view-builder__selection-table-label\">{{ item.tableLabel }}</span>\n <span class=\"dynamic-view-builder__selection-separator\">.</span>\n <span class=\"dynamic-view-builder__selection-accent\">{{ item.fieldLabel }}</span>\n </div>\n @if (item.functionName && !isFieldFunctionEditing(item.column)) {\n <div class=\"dynamic-view-builder__field-config-function\">\n <span class=\"dynamic-view-builder__row-chip dynamic-view-builder__row-chip--operator\">\n {{ item.functionLabel }}\n </span>\n @if (item.functionAlias) {\n <span class=\"dynamic-view-builder__row-meta\">\n {{ item.functionAlias }}\n </span>\n }\n </div>\n }\n </div>\n @if (!isFieldFunctionEditing(item.column)) {\n <div class=\"dynamic-view-builder__field-config-controls\">\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.alias'\"\n [ngModel]=\"item.alias\"\n (ngModelChange)=\"onFieldModalAliasChange(item.column, $event)\"\n width=\"100%\"\n [maxlength]=\"24\"\n ></sdc-textbox>\n <div class=\"dynamic-view-builder__field-width\">\n <div class=\"dynamic-view-builder__modal-label-row\">\n <span class=\"dynamic-view-builder__modal-label\">\n {{ (config.translationPrefix + '.fields.width') | translate }}\n </span>\n <sdc-info-sign\n [tooltip]=\"config.translationPrefix + '.messages.fieldWidthInfo'\"\n ></sdc-info-sign>\n </div>\n <sdc-textbox\n [label]=\"''\"\n [ngModel]=\"item.width\"\n (ngModelChange)=\"onFieldModalWidthChange(item.column, $event)\"\n width=\"100%\"\n [maxlength]=\"12\"\n placeholder=\"160\"\n ></sdc-textbox>\n </div>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\"\n (click)=\"startFieldFunctionEdit(item.column)\"\n >\n {{ item.functionName\n ? ((config.translationPrefix + '.actions.configureField') | translate)\n : ((config.translationPrefix + '.fields.functionName') | translate) }}\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action\n dynamic-view-builder__icon-action--danger\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeFieldModalDraft(item.column)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n } @else {\n <div\n class=\"dynamic-view-builder__field-config-controls\n dynamic-view-builder__field-config-controls--function\"\n >\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.functionName'\"\n [ngModel]=\"fieldFunctionDraft.functionName\"\n (ngModelChange)=\"onFieldFunctionDraftNameChange($event)\"\n [options]=\"fieldModalFunctionOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n width=\"100%\"\n ></sdc-combobox>\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.alias'\"\n [ngModel]=\"fieldFunctionDraft.functionAlias\"\n (ngModelChange)=\"fieldFunctionDraft.functionAlias = $event\"\n width=\"100%\"\n [maxlength]=\"24\"\n [disabled]=\"!fieldFunctionDraft.functionName\"\n ></sdc-textbox>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action\n dynamic-view-builder__icon-action--danger\"\n [title]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n (click)=\"cancelFieldFunctionEdit()\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action\n dynamic-view-builder__icon-action--active\"\n [title]=\"(config.translationPrefix + '.actions.save') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.save') | translate\"\n (click)=\"saveFieldFunctionEdit()\"\n >\n <i class=\"fas fa-check\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n <div footer class=\"dynamic-view-builder__modal-footer dynamic-view-builder__modal-footer--between\">\n <div class=\"dynamic-view-builder__modal-footer-group dynamic-view-builder__modal-footer-group--start\">\n @if (fieldModalSelectionStepActive && fieldModalCanSelectAll) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--primary\"\n (click)=\"selectAllFieldModalColumns()\"\n >\n {{ (config.translationPrefix + '.actions.selectAllColumns') | translate }}\n </button>\n }\n </div>\n <div class=\"dynamic-view-builder__modal-footer-group\">\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n priority=\"secondary\"\n (click)=\"closeFieldModal()\"\n (keydown.enter)=\"closeFieldModal()\"\n ></sdc-button>\n @if (fieldModalSelectionStepActive && fieldModalCanProceed) {\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.nextStep') | translate\"\n (click)=\"advanceFieldModalStep()\"\n (keydown.enter)=\"advanceFieldModalStep()\"\n ></sdc-button>\n }\n @if (fieldModalConfigurationStepActive) {\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.save') | translate\"\n [disabled]=\"!canSaveFieldModal\"\n (click)=\"saveField()\"\n (keydown.enter)=\"saveField()\"\n ></sdc-button>\n }\n </div>\n </div>\n </sdc-modal>\n }\n\n <div\n class=\"dynamic-view-builder__workspace\"\n [class.dynamic-view-builder__workspace--stacked]=\"layoutMode === 'stacked'\"\n [class.dynamic-view-builder__workspace--split]=\"layoutMode === 'split'\"\n [class.dynamic-view-builder__workspace--preview-hidden]=\"!previewVisible\"\n >\n <div class=\"dynamic-view-builder__builder-area\">\n <div\n #sectionsContainer\n class=\"dynamic-view-builder__sections\"\n [class.dynamic-view-builder__sections--stacked]=\"layoutMode === 'stacked'\"\n [class.dynamic-view-builder__sections--split]=\"layoutMode === 'split'\"\n >\n <section\n #builderSection\n data-section-id=\"tables\"\n class=\"dynamic-view-builder__section\"\n >\n <div class=\"dynamic-view-builder__section-head\">\n <div class=\"dynamic-view-builder__section-label\">\n {{ (config.translationPrefix + '.cards.sources.title') | translate }}\n </div>\n <div class=\"dynamic-view-builder__section-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\n dynamic-view-builder__action-link--primary\n dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.selectTables') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.selectTables') | translate\"\n (click)=\"openSourceModal()\"\n >\n <i class=\"fas fa-plus\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !canOpenSourceConfiguration\"\n [title]=\"(config.translationPrefix + '.actions.configureAliases') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.configureAliases') | translate\"\n (click)=\"openSourceConfigurationModal()\"\n >\n <i class=\"fas fa-cog\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !sourceItems.length\"\n [title]=\"(config.translationPrefix + '.actions.clear') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.clear') | translate\"\n (click)=\"clearSources()\"\n >\n <i class=\"fas fa-trash-alt\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n @if (!sourceItems.length) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__empty-row\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.selectTables') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.selectTables') | translate\"\n (click)=\"openSourceModal()\"\n >\n {{ (config.translationPrefix + '.actions.selectTables') | translate }}\n </button>\n }\n @if (sourceItems.length) {\n <div class=\"dynamic-view-builder__stack dynamic-view-builder__stack--wrap\">\n @for (source of sourceItems; track trackById(i, source); let i = $index) {\n <div\n class=\"dynamic-view-builder__row dynamic-view-builder__row--source\"\n >\n <div class=\"dynamic-view-builder__row-main\">\n <span class=\"dynamic-view-builder__row-table-group\">\n <span class=\"dynamic-view-builder__row-db\">{{ source.dbLabel }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-table\">\n {{ source.tableLabel }}\n </span>\n </span>\n @if (source.alias) {\n <span class=\"dynamic-view-builder__row-meta\">\n Alias {{ source.alias }}\n </span>\n }\n </div>\n <div class=\"dynamic-view-builder__row-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action dynamic-view-builder__icon-action--danger\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeSource(i)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n }\n </section>\n\n <div class=\"dynamic-view-builder__section-row\">\n <section\n #builderSection\n data-section-id=\"joins\"\n class=\"dynamic-view-builder__section dynamic-view-builder__section--fluid\"\n >\n <div class=\"dynamic-view-builder__section-head\">\n <div class=\"dynamic-view-builder__section-label\">\n {{ (config.translationPrefix + '.cards.joins.title') | translate }}\n </div>\n <div class=\"dynamic-view-builder__section-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\n dynamic-view-builder__action-link--primary\n dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !canConfigureJoins\"\n [title]=\"(config.translationPrefix + '.actions.addJoin') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.addJoin') | translate\"\n (click)=\"openJoinModal()\"\n >\n <i class=\"fas fa-plus\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !joinItems.length\"\n [title]=\"(config.translationPrefix + '.actions.clear') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.clear') | translate\"\n (click)=\"clearJoins()\"\n >\n <i class=\"fas fa-trash-alt\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n @if (!canConfigureJoins) {\n <div class=\"dynamic-view-builder__info-row\">\n {{ (config.translationPrefix + '.messages.joinRequiresTwoTables') | translate }}\n </div>\n }\n @if (canConfigureJoins && !joinItems.length) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__empty-row\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.addJoin') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.addJoin') | translate\"\n (click)=\"openJoinModal()\"\n >\n {{ (config.translationPrefix + '.actions.addJoin') | translate }}\n </button>\n }\n @if (joinItems.length) {\n <div class=\"dynamic-view-builder__stack dynamic-view-builder__stack--wrap\">\n @for (item of joinItems; track trackById(i, item); let i = $index) {\n <div\n class=\"dynamic-view-builder__row\"\n >\n <div class=\"dynamic-view-builder__row-main\">\n <span class=\"dynamic-view-builder__row-path\">\n <span class=\"dynamic-view-builder__row-table\">{{ item.sourceTable }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-field\">{{ item.sourceField }}</span>\n </span>\n <span class=\"dynamic-view-builder__join-operator\">{{ item.operator }}</span>\n <span class=\"dynamic-view-builder__join-arrow\" aria-hidden=\"true\">\n <i class=\"fas fa-long-arrow-alt-right\"></i>\n </span>\n <span class=\"dynamic-view-builder__row-path\">\n <span class=\"dynamic-view-builder__row-table\">{{ item.targetTable }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-field\">{{ item.targetField }}</span>\n </span>\n </div>\n <div class=\"dynamic-view-builder__row-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.edit') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.edit') | translate\"\n (click)=\"openJoinModal(i)\"\n >\n <i class=\"fas fa-pen\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action dynamic-view-builder__icon-action--danger\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeJoin(i)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n }\n </section>\n <section\n #builderSection\n data-section-id=\"groupBy\"\n class=\"dynamic-view-builder__section dynamic-view-builder__section--compact\"\n >\n <div class=\"dynamic-view-builder__section-head\">\n <div class=\"dynamic-view-builder__section-heading\">\n <div class=\"dynamic-view-builder__section-label\">\n {{ (config.translationPrefix + '.cards.groupBy.title') | translate }}\n </div>\n </div>\n <div class=\"dynamic-view-builder__section-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\n dynamic-view-builder__action-link--primary\n dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !groupBySelectableColumns.length\"\n [title]=\"(config.translationPrefix + '.actions.selectColumns') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.selectColumns') | translate\"\n (click)=\"openSelectionModal('groupBy')\"\n >\n <i class=\"fas fa-plus\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !groupByItems.length\"\n [title]=\"(config.translationPrefix + '.actions.clear') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.clear') | translate\"\n (click)=\"clearGroupBy()\"\n >\n <i class=\"fas fa-trash-alt\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n @if (!groupByItems.length) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__empty-row\"\n [disabled]=\"isReadonly\"\n (click)=\"openSelectionModal('groupBy')\"\n >\n {{ (config.translationPrefix + '.actions.selectColumns') | translate }}\n </button>\n }\n @if (groupByItems.length) {\n <div class=\"dynamic-view-builder__stack dynamic-view-builder__stack--wrap\">\n @for (item of groupByItems; track trackById(i, item); let i = $index) {\n <div\n class=\"dynamic-view-builder__row\"\n >\n <div class=\"dynamic-view-builder__row-main\">\n <span class=\"dynamic-view-builder__row-path\">\n <span class=\"dynamic-view-builder__row-table\">{{ item.tableLabel }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-field\">{{ item.fieldLabel }}</span>\n </span>\n </div>\n <div class=\"dynamic-view-builder__row-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action dynamic-view-builder__icon-action--danger\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeGroupBy(i)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n }\n </section>\n\n </div>\n\n <section\n #builderSection\n data-section-id=\"fields\"\n class=\"dynamic-view-builder__section\"\n >\n <div class=\"dynamic-view-builder__section-head\">\n <div class=\"dynamic-view-builder__section-heading\">\n <div class=\"dynamic-view-builder__section-label\">\n {{ (config.translationPrefix + '.cards.fields.title') | translate }}\n </div>\n <sdc-info-sign\n class=\"dynamic-view-builder__hint\"\n [tooltip]=\"'Voc\u00EA pode ordenar a sequ\u00EAncia dos campos arrastando e soltando.'\"\n ></sdc-info-sign>\n </div>\n <div class=\"dynamic-view-builder__section-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\n dynamic-view-builder__action-link--primary\n dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !fieldSelectableColumns.length\"\n [title]=\"(config.translationPrefix + '.actions.selectColumns') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.selectColumns') | translate\"\n (click)=\"openFieldModal()\"\n >\n <i class=\"fas fa-plus\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !canOpenFieldConfiguration\"\n [title]=\"(config.translationPrefix + '.actions.configureField') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.configureField') | translate\"\n (click)=\"openFieldConfigurationModal()\"\n >\n <i class=\"fas fa-cog\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !fieldItems.length\"\n [title]=\"(config.translationPrefix + '.actions.clear') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.clear') | translate\"\n (click)=\"clearFields()\"\n >\n <i class=\"fas fa-trash-alt\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n @if (!fieldItems.length) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__empty-row\"\n [disabled]=\"isReadonly\"\n (click)=\"openFieldModal()\"\n >\n {{ (config.translationPrefix + '.actions.selectColumns') | translate }}\n </button>\n }\n @if (fieldItems.length) {\n <div class=\"dynamic-view-builder__stack dynamic-view-builder__stack--wrap\">\n @for (item of fieldItems; track trackById(i, item); let i = $index) {\n @if (isFieldDropIndicatorVisible(i)) {\n <div\n class=\"dynamic-view-builder__field-drop-indicator\"\n aria-hidden=\"true\"\n ></div>\n }\n <div\n class=\"dynamic-view-builder__row dynamic-view-builder__row--draggable\"\n [class.dynamic-view-builder__row--drag-origin]=\"draggingFieldIndex === item.sourceIndex\"\n [draggable]=\"!isReadonly\"\n (dragstart)=\"onFieldDragStart(item.sourceIndex)\"\n (dragover)=\"onFieldDragOver($event, i)\"\n (drop)=\"onFieldDrop()\"\n (dragend)=\"onFieldDragEnd()\"\n >\n <div class=\"dynamic-view-builder__row-main\">\n <span class=\"dynamic-view-builder__row-order\">{{ item.orderLabel }}</span>\n <span class=\"dynamic-view-builder__row-path\">\n <span class=\"dynamic-view-builder__row-table\">{{ item.tableLabel }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-field\">{{ item.fieldLabel }}</span>\n </span>\n @if (item.alias) {\n <span class=\"dynamic-view-builder__row-meta\">\n Alias {{ item.alias }}\n </span>\n }\n @if (item.width) {\n <span class=\"dynamic-view-builder__row-meta\">\n {{ item.width }}\n </span>\n }\n @if (item.functionName) {\n <span class=\"dynamic-view-builder__row-chip dynamic-view-builder__row-chip--operator\">\n {{ item.functionLabel }}\n </span>\n }\n @if (item.functionAlias) {\n <span class=\"dynamic-view-builder__row-meta\">\n {{ item.functionAlias }}\n </span>\n }\n </div>\n <div class=\"dynamic-view-builder__row-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action dynamic-view-builder__icon-action--danger\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeField(item.sourceIndex)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n }\n @if (isFieldDropIndicatorAtEndVisible()) {\n <div\n class=\"dynamic-view-builder__field-drop-indicator\"\n aria-hidden=\"true\"\n ></div>\n }\n </div>\n }\n </section>\n\n <div class=\"dynamic-view-builder__section-row\">\n <section\n #builderSection\n data-section-id=\"sorting\"\n class=\"dynamic-view-builder__section dynamic-view-builder__section--compact\"\n >\n <div class=\"dynamic-view-builder__section-head\">\n <div class=\"dynamic-view-builder__section-label\">\n {{ (config.translationPrefix + '.cards.sorting.title') | translate }}\n </div>\n <div class=\"dynamic-view-builder__section-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\n dynamic-view-builder__action-link--primary\n dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !sortSelectableItems.length\"\n [title]=\"(config.translationPrefix + '.actions.addSort') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.addSort') | translate\"\n (click)=\"openSortModal()\"\n >\n <i class=\"fas fa-plus\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !sortItems.length\"\n [title]=\"(config.translationPrefix + '.actions.clear') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.clear') | translate\"\n (click)=\"clearSorting()\"\n >\n <i class=\"fas fa-trash-alt\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n @if (!sortItems.length) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__empty-row\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.addSort') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.addSort') | translate\"\n (click)=\"openSortModal()\"\n >\n {{ (config.translationPrefix + '.actions.addSort') | translate }}\n </button>\n }\n @if (sortItems.length) {\n <div class=\"dynamic-view-builder__stack dynamic-view-builder__stack--wrap\">\n @for (item of sortItems; track trackById(i, item); let i = $index) {\n <div\n class=\"dynamic-view-builder__row\"\n >\n <div class=\"dynamic-view-builder__row-main\">\n @if (item.functionName) {\n <span class=\"dynamic-view-builder__row-chip dynamic-view-builder__row-chip--operator\">\n {{ item.functionLabel }}\n </span>\n }\n <span class=\"dynamic-view-builder__row-path\">\n <span class=\"dynamic-view-builder__row-table\">{{ item.tableLabel }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-field\">{{ item.fieldLabel }}</span>\n </span>\n <span class=\"dynamic-view-builder__row-chip dynamic-view-builder__row-chip--operator\">\n {{ item.direction }}\n </span>\n </div>\n <div class=\"dynamic-view-builder__row-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.edit') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.edit') | translate\"\n (click)=\"openSortModal(i)\"\n >\n <i class=\"fas fa-pen\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action dynamic-view-builder__icon-action--danger\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeSort(i)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n }\n </section>\n\n <section\n #builderSection\n data-section-id=\"filters\"\n class=\"dynamic-view-builder__section dynamic-view-builder__section--fluid\"\n >\n <div class=\"dynamic-view-builder__section-head\">\n <div class=\"dynamic-view-builder__section-label\">\n {{ (config.translationPrefix + '.cards.filters.title') | translate }}\n </div>\n <div class=\"dynamic-view-builder__section-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\n dynamic-view-builder__action-link--primary\n dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !availableColumns.length\"\n [title]=\"(config.translationPrefix + '.actions.addFilter') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.addFilter') | translate\"\n (click)=\"openFilterModal()\"\n >\n <i class=\"fas fa-plus\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !filterItems.length\"\n [title]=\"(config.translationPrefix + '.actions.clear') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.clear') | translate\"\n (click)=\"clearFilters()\"\n >\n <i class=\"fas fa-trash-alt\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n @if (!filterItems.length) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__empty-row\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.addFilter') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.addFilter') | translate\"\n (click)=\"openFilterModal()\"\n >\n {{ (config.translationPrefix + '.actions.addFilter') | translate }}\n </button>\n }\n @if (filterItems.length) {\n <div class=\"dynamic-view-builder__stack dynamic-view-builder__stack--wrap\">\n @for (item of filterItems; track trackById(i, item); let i = $index) {\n <div\n class=\"dynamic-view-builder__row\"\n >\n <div class=\"dynamic-view-builder__row-main\">\n @if (!item.isDomain) {\n <span class=\"dynamic-view-builder__row-path\">\n <span class=\"dynamic-view-builder__row-table\">{{ item.tableLabel }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-field\">{{ item.fieldLabel }}</span>\n </span>\n <span\n class=\"dynamic-view-builder__row-chip\n dynamic-view-builder__row-chip--operator\"\n >{{ item.operatorLabel }}</span>\n } @else {\n <span\n class=\"dynamic-view-builder__row-chip\n dynamic-view-builder__row-chip--domain\"\n >{{ item.tableLabel }}</span>\n }\n <span class=\"dynamic-view-builder__row-chip dynamic-view-builder__row-chip--value\">\n {{ item.subtitle }}\n </span>\n @if (item.optional) {\n <span class=\"dynamic-view-builder__row-chip dynamic-view-builder__row-chip--optional\">\n {{ (config.translationPrefix + '.states.optional') | translate }}\n </span>\n }\n </div>\n <div class=\"dynamic-view-builder__row-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.edit') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.edit') | translate\"\n (click)=\"openFilterModal(i)\"\n >\n <i class=\"fas fa-pen\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action dynamic-view-builder__icon-action--danger\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeFilter(i)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n }\n </section>\n </div>\n\n @for (arrow of flowArrows; track trackByArrow($index, arrow)) {\n <div\n class=\"dynamic-view-builder__flow-arrow\"\n [class.dynamic-view-builder__flow-arrow--right]=\"arrow.direction === 'right'\"\n [class.dynamic-view-builder__flow-arrow--down]=\"arrow.direction === 'down'\"\n [style.left.px]=\"arrow.left\"\n [style.top.px]=\"arrow.top\"\n aria-hidden=\"true\"\n >\n <i\n [class]=\"arrow.direction === 'right'\n ? 'fas fa-angle-double-right'\n : 'fas fa-angle-double-down'\"\n ></i>\n </div>\n }\n </div>\n </div>\n\n @if (previewVisible) {\n <aside class=\"dynamic-view-builder__preview-area\">\n <div\n class=\"dynamic-view-builder__preview\"\n [style.height]=\"sqlPreviewPanelHeight\"\n >\n <div class=\"dynamic-view-builder__preview-header\">\n <div class=\"dynamic-view-builder__preview-title\">SQL Preview</div>\n <div class=\"dynamic-view-builder__preview-subtitle\">\n Consulta gerada automaticamente a partir da configuracao atual.\n </div>\n </div>\n <div class=\"dynamic-view-builder__preview-body\">\n <sdc-code-editor\n [sql]=\"sqlPreview\"\n language=\"sql\"\n [readOnly]=\"true\"\n [showCopy]=\"true\"\n [height]=\"sqlPreviewHeight\"\n ></sdc-code-editor>\n </div>\n </div>\n </aside>\n }\n </div>\n</div>\n", styles: [":host{display:block}::ng-deep .sdc-loading-state{overflow:auto!important}.dynamic-view-builder{display:flex;flex-direction:column;gap:.75rem;color:#243342}.dynamic-view-builder__toolbar{display:flex;justify-content:space-between;align-items:center;gap:1rem;padding:.25rem 0}.dynamic-view-builder__toolbar-copy{min-width:0}.dynamic-view-builder__title{font-size:1rem;font-weight:700;line-height:1.2;color:#243342}.dynamic-view-builder__subtitle{margin-top:.2rem;color:#70839a;font-size:.875rem;line-height:1.35}.dynamic-view-builder__toolbar-actions{display:flex;align-items:center;gap:.625rem;flex-shrink:0;flex-wrap:wrap}.dynamic-view-builder__toolbar-label{color:#70839a;font-size:.75rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.dynamic-view-builder__workspace{display:grid;gap:.875rem;min-width:0}.dynamic-view-builder__workspace--preview-hidden,.dynamic-view-builder__workspace--split.dynamic-view-builder__workspace--preview-hidden{grid-template-columns:1fr;grid-template-areas:\"builder\"}.dynamic-view-builder__workspace--stacked{grid-template-columns:1fr;grid-template-areas:\"preview\" \"builder\"}.dynamic-view-builder__workspace--split{grid-template-columns:minmax(0,62fr) minmax(20rem,38fr);grid-template-areas:\"builder preview\";align-items:start}.dynamic-view-builder__builder-area{grid-area:builder;display:flex;flex-direction:column;gap:.75rem;min-width:0}.dynamic-view-builder__sections{display:flex;flex-direction:column;gap:.5rem;min-width:0;position:relative}.dynamic-view-builder__section{display:flex;flex-direction:column;gap:.4rem;min-width:0;padding:.55rem .65rem;border:1px solid #dbe3ec;border-radius:.5rem;background:#fff;min-inline-size:0;max-inline-size:100%;position:relative;width:100%}.dynamic-view-builder__section-row{display:flex;flex-wrap:wrap;align-items:stretch;gap:.5rem;min-width:0}.dynamic-view-builder__section-row>.dynamic-view-builder__section{align-self:stretch}.dynamic-view-builder__section--half{flex:1 1 18rem;width:auto}.dynamic-view-builder__section--compact{flex:0 0 clamp(18rem,30%,22rem);width:auto}.dynamic-view-builder__section--fluid{flex:1 1 26rem;min-inline-size:min(100%,26rem);width:auto}.dynamic-view-builder__flow-arrow{position:absolute;display:inline-flex;align-items:center;justify-content:center;width:1.4rem;height:1.4rem;border:1px solid #d9e3ed;border-radius:999px;background:#fff;color:#68809a;pointer-events:none;z-index:2;transform:translate(-50%,-50%)}.dynamic-view-builder__flow-arrow i{font-size:.74rem;line-height:1}.dynamic-view-builder__section-head{display:flex;justify-content:space-between;align-items:flex-start;gap:.75rem}.dynamic-view-builder__section-heading{display:inline-flex;align-items:center;gap:.4rem;min-width:0}.dynamic-view-builder__section-label{min-width:0;color:#516173;font-size:.78rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase}.dynamic-view-builder__section-actions{display:flex;align-items:center;justify-content:flex-end;gap:.5rem;flex-wrap:wrap;flex-shrink:0}.dynamic-view-builder__hint{display:inline-flex;align-items:center;justify-content:center;width:1rem;height:1rem;padding:0;border:0;background:transparent;color:#8ca0b6;cursor:help}.dynamic-view-builder__hint--legacy{display:none}.dynamic-view-builder__stack{display:flex;gap:.35rem;min-width:0}.dynamic-view-builder__stack--wrap{flex-direction:row;flex-wrap:wrap;align-items:flex-start}.dynamic-view-builder__row,.dynamic-view-builder__empty-row,.dynamic-view-builder__info-row{min-width:0;border:1px solid #e7edf4;border-radius:.4rem;background:#fbfcfe}.dynamic-view-builder__row{display:inline-flex;align-items:stretch;justify-content:space-between;gap:.45rem;padding:.5rem .6rem;inline-size:auto;min-inline-size:min(100%,12rem);max-inline-size:100%;flex:0 1 auto}.dynamic-view-builder__row-main{min-width:0;display:flex;align-items:center;gap:.3rem;flex-wrap:wrap;flex:1 1 auto}.dynamic-view-builder__row-label{color:#243342;font-weight:600;line-height:1.35;word-break:break-word}.dynamic-view-builder__row-value{color:#627588;line-height:1.35;word-break:break-word}.dynamic-view-builder__row-separator{color:#b0bcc9;flex-shrink:0}.dynamic-view-builder__row-actions{display:flex;align-items:center;justify-content:flex-end;gap:.2rem;flex-wrap:wrap;flex:0 0 auto}.dynamic-view-builder__row--source{align-items:center;min-inline-size:min(100%,16.5rem);padding-block:.45rem}.dynamic-view-builder__row--source .dynamic-view-builder__row-main{align-items:center;flex-wrap:nowrap;gap:.18rem}.dynamic-view-builder__row-table-group{display:inline-flex;align-items:center;gap:0;min-width:0;flex:0 1 auto}.dynamic-view-builder__row-db{color:#243342;font-weight:700;line-height:1.25;white-space:nowrap}.dynamic-view-builder__row-order{display:inline-flex;align-items:center;justify-content:center;min-width:2rem;padding:.1rem .35rem;border-radius:999px;background:#eef3f8;color:#516173;font-size:.75rem;font-weight:700}.dynamic-view-builder__row-path{display:inline-flex;align-items:baseline;gap:0;min-width:0;flex-wrap:wrap}.dynamic-view-builder__row-table{color:#425466;font-weight:500;line-height:1.35}.dynamic-view-builder__row-table--accent{color:#1f8a52;font-weight:700}.dynamic-view-builder__row-dot{color:#8fa1b3;flex:0 0 auto;margin-inline:.02rem}.dynamic-view-builder__row-field{color:#1f8a52;font-weight:700;line-height:1.35;word-break:break-word}.dynamic-view-builder__row-meta{display:inline-flex;align-items:center;padding:.12rem .4rem;border-radius:999px;background:#f0f4f8;color:#627588;font-size:.74rem;line-height:1.2}.dynamic-view-builder__join-operator{display:inline-flex;align-items:center;padding:.1rem .35rem;border-radius:999px;background:#eef3f8;color:#627588;font-size:.73rem;font-weight:700;letter-spacing:.03em;text-transform:uppercase}.dynamic-view-builder__join-arrow{color:#9ab0c6;font-size:.85rem}.dynamic-view-builder__row--draggable{cursor:grab}.dynamic-view-builder__row--drag-origin{opacity:.6;border-color:#b8cae0;background:#f4f8fc}.dynamic-view-builder__row--draggable:active{cursor:grabbing}.dynamic-view-builder__alias-field{flex:0 1 5.4rem;min-inline-size:4.4rem;max-inline-size:5.8rem}.dynamic-view-builder__alias-field :where(.sdc-textbox__label-row){display:none}.dynamic-view-builder__action-link{padding:0;border:0;background:transparent;color:#6d7786;font:inherit;font-size:.82rem;font-weight:600;line-height:1.25;cursor:pointer;transition:color .18s ease;pointer-events:auto;position:relative;z-index:2;text-decoration:none}.dynamic-view-builder__action-link:disabled{opacity:.45;cursor:default}.dynamic-view-builder__action-link:hover:not(:disabled),.dynamic-view-builder__action-link:focus-visible:not(:disabled){color:#1b5cff}.dynamic-view-builder__action-link--primary{color:#1b5cff}.dynamic-view-builder__action-link--icon{display:inline-flex;align-items:center;justify-content:center;min-width:1.5rem;min-height:1.5rem}.dynamic-view-builder__action-link--icon i{font-size:.9rem;line-height:1}.dynamic-view-builder__preview-toggle{display:inline-flex;align-items:center;gap:.4rem;min-height:2rem;padding:0 .75rem;border:1px solid #dbe3ec;border-radius:999px;background:#f8fafc;color:#425466;font:inherit;font-size:.82rem;font-weight:600;cursor:pointer;transition:border-color .18s ease,background-color .18s ease,color .18s ease}.dynamic-view-builder__preview-toggle:focus-visible{outline:2px solid rgba(27,92,255,.18);outline-offset:2px}.dynamic-view-builder__preview-toggle:hover:not(:disabled),.dynamic-view-builder__preview-toggle:focus-visible:not(:disabled){border-color:#b9c7d6;background:#eef4fb;color:#1b5cff}.dynamic-view-builder__icon-action{display:inline-flex;align-items:center;justify-content:center;width:1.35rem;height:1.35rem;padding:0;border:0;background:transparent;color:#7b8ea2;cursor:pointer;transition:color .18s ease}.dynamic-view-builder__icon-action:focus-visible{outline:2px solid rgba(27,92,255,.18);outline-offset:2px;border-radius:999px}.dynamic-view-builder__icon-action:disabled{opacity:.45;cursor:default}.dynamic-view-builder__icon-action:hover:not(:disabled),.dynamic-view-builder__icon-action:focus-visible:not(:disabled){color:#1b5cff}.dynamic-view-builder__icon-action--active{color:#1c9b5f}.dynamic-view-builder__icon-action--danger{color:#8d9caf}.dynamic-view-builder__icon-action--danger:hover:not(:disabled),.dynamic-view-builder__icon-action--danger:focus-visible:not(:disabled){color:#d14343}.dynamic-view-builder__empty-row{width:auto;max-width:100%;padding:.45rem .55rem;text-align:left;color:#70839a;cursor:pointer;inline-size:fit-content;pointer-events:auto;position:relative;z-index:1}.dynamic-view-builder__info-row{padding:.45rem .55rem;color:#3d6ae8;line-height:1.35;inline-size:fit-content;max-inline-size:100%}.dynamic-view-builder__preview-area{grid-area:preview;min-width:0;display:flex;align-self:start}.dynamic-view-builder__preview{display:flex;flex:1 1 auto;flex-direction:column;border:1px solid #dbe3ec;border-radius:.5rem;background:#fff;overflow:hidden;min-height:0}.dynamic-view-builder__preview-header{padding:.75rem .9rem;border-bottom:1px solid #e7edf4;background:#f8fafc}.dynamic-view-builder__preview-title{color:#243342;font-weight:700;line-height:1.25}.dynamic-view-builder__preview-subtitle{margin-top:.2rem;color:#70839a;line-height:1.35}.dynamic-view-builder__preview-body{display:flex;flex:1 1 auto;min-height:0;padding:.55rem}.dynamic-view-builder__preview-body :where(sdc-code-editor){display:block;flex:1 1 auto;min-height:0;width:100%}.dynamic-view-builder__footer{display:flex;justify-content:flex-start;gap:.75rem;flex-wrap:wrap}.dynamic-view-builder__modal-shell{display:flex;flex-direction:column;gap:.875rem;min-height:0;height:100%}.dynamic-view-builder__modal-shell--full{height:100%}.dynamic-view-builder__modal-stage{display:flex;flex-direction:column;gap:.75rem;min-height:0}.dynamic-view-builder__modal-stage-body{flex:1 1 auto;min-height:0}.dynamic-view-builder__modal-card{padding:.85rem .95rem;border:1px solid #dbe3ec;border-radius:.65rem;background:#fff;box-shadow:0 1px 2px #0f172a0a}.dynamic-view-builder__modal-card--compact{padding:.75rem .85rem}.dynamic-view-builder__modal-card--section{display:flex;flex-direction:column;gap:.875rem}.dynamic-view-builder__modal-card--soft{background:linear-gradient(180deg,#fbfdff,#f6f9fc)}.dynamic-view-builder__modal-inline-surface{display:flex;flex-direction:column;gap:.625rem;min-width:0}.dynamic-view-builder__modal-list-shell{flex:1 1 auto;min-height:0;overflow:hidden;padding:.8rem}.dynamic-view-builder__modal-card-title{color:#243342;font-size:.92rem;font-weight:700;line-height:1.25}.dynamic-view-builder__modal-card-text{margin-top:.2rem;color:#70839a;font-size:.8rem;line-height:1.35}.dynamic-view-builder__modal-panel-title{color:#425466;font-size:.78rem;font-weight:700;letter-spacing:.04em;line-height:1.25;text-transform:uppercase}.dynamic-view-builder__modal-panel-title--section{margin-bottom:-.1rem}.dynamic-view-builder__modal-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;align-items:start;min-height:0}.dynamic-view-builder__modal-grid>*{min-width:0}.dynamic-view-builder__modal-grid--single{grid-template-columns:1fr}.dynamic-view-builder__modal-grid--filter{grid-template-columns:repeat(2,minmax(0,1fr))}.dynamic-view-builder__modal-grid--filter-controls{grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem .75rem}.dynamic-view-builder__modal-grid-column-full{grid-column:1/-1}.dynamic-view-builder__modal-field,.dynamic-view-builder__modal-picker{display:flex;flex-direction:column;gap:.625rem;min-width:0;min-height:0}.dynamic-view-builder__modal-field--stretch,.dynamic-view-builder__modal-picker--stretch{height:100%}.dynamic-view-builder__modal-field--compact{gap:.5rem}.dynamic-view-builder__modal-field--full{width:100%}.dynamic-view-builder__modal-label-row{display:inline-flex;align-items:center;gap:.35rem;min-width:0}.dynamic-view-builder__modal-label{color:#425466;font-size:.875rem;font-weight:600;line-height:1.25}.dynamic-view-builder__join-modal{display:flex;flex-direction:column;gap:.875rem}.dynamic-view-builder__selection-flow{display:flex;flex-direction:column;gap:.75rem;height:100%;min-height:0}.dynamic-view-builder__filter-modal{display:flex;flex-direction:column;gap:.875rem;min-height:min(30rem,100vh - 14rem);height:100%;overflow:hidden}.dynamic-view-builder__filter-step{display:flex;flex-direction:column;gap:.75rem;min-width:0;min-height:0;flex:1 1 auto}.dynamic-view-builder__filter-toolbar{display:flex;align-items:flex-start;justify-content:space-between;gap:.875rem;flex-wrap:wrap}.dynamic-view-builder__filter-toolbar>*{min-width:0}.dynamic-view-builder__filter-heading{display:flex;align-items:center;justify-content:space-between;gap:.5rem;min-width:0}.dynamic-view-builder__filter-base-selector,.dynamic-view-builder__filter-domain-intro{min-width:0}.dynamic-view-builder__filter-base-selector{gap:.625rem;padding:.85rem 1rem}.dynamic-view-builder__filter-mode-row{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.dynamic-view-builder__filter-mode-copy{color:#70839a;font-size:.84rem;line-height:1.4}.dynamic-view-builder__filter-mode-selector{display:flex;min-width:0}.dynamic-view-builder__filter-mode-selector :where(.select-button){max-width:100%}.dynamic-view-builder__picklist-shell{flex:1 1 auto;min-height:0;overflow:hidden;display:flex;flex-direction:column}.dynamic-view-builder__picklist-shell :where(sdc-picklist){display:flex;flex:1 1 auto;height:100%;min-height:0}.dynamic-view-builder__picklist-shell :where(.sdc-picklist){display:flex;flex-direction:column;flex:1 1 auto;min-height:0}.dynamic-view-builder__picklist-shell :where(.sdc-picklist__loading-state){display:flex;flex-direction:column;min-height:0;flex:1 1 auto}.dynamic-view-builder__picklist-shell :where(.sdc-picklist__content){min-height:0;flex:1 1 auto;overflow:auto}.dynamic-view-builder__picklist-shell :where(.sdc-picklist__list){margin:0}.dynamic-view-builder__picklist-shell :where(.sdc-picklist__search),.dynamic-view-builder__picklist-shell :where(.sdc-picklist__selected),.dynamic-view-builder__picklist-shell :where(.sdc-picklist__footer){flex:0 0 auto}.dynamic-view-builder__filter-config-card{flex:1 1 auto;min-height:0;gap:.75rem;overflow:auto;padding:.85rem 1rem}.dynamic-view-builder__filter-panel{display:flex;flex-direction:column;gap:.75rem;min-width:0;min-height:0}.dynamic-view-builder__filter-context{display:flex;flex-direction:column;gap:.2rem;padding:0 .1rem;min-width:0}.dynamic-view-builder__filter-summary{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.625rem;min-width:0}.dynamic-view-builder__filter-summary-item{display:flex;flex-direction:column;gap:.22rem;padding:.7rem .8rem;border:1px solid #dbe3ec;border-radius:.55rem;background:#f8fafc;min-width:0}.dynamic-view-builder__sort-modal{display:flex;flex-direction:column;gap:.75rem;min-width:0;min-height:0;height:100%;overflow:hidden}.dynamic-view-builder__sort-direction{display:block;width:100%;max-width:18rem;min-width:0;overflow:hidden}.dynamic-view-builder__sort-direction :where(.select-button){width:100%;max-width:100%;overflow:hidden}.dynamic-view-builder__sort-direction :where(.select-button-item){min-width:0}.dynamic-view-builder__sort-modal>.dynamic-view-builder__modal-field{flex:0 0 auto}.dynamic-view-builder__sort-modal>.dynamic-view-builder__modal-picker{flex:1 1 auto;min-height:0}.dynamic-view-builder__sort-modal :where(.select-button--soft){padding:.25rem}.dynamic-view-builder__sort-modal :where(.select-button--soft .select-button-item){min-height:2rem;padding:.4rem .65rem}.dynamic-view-builder__modal-summary{display:flex;flex-direction:column;gap:.25rem;align-self:start}.dynamic-view-builder__modal-summary--filter{gap:.35rem}.dynamic-view-builder__modal-summary--compact{width:fit-content;max-width:100%}.dynamic-view-builder__modal-summary--field{min-width:min(100%,15rem)}.dynamic-view-builder__join-modal-top{display:grid;grid-template-columns:minmax(0,1fr) minmax(12rem,14rem) minmax(0,1fr);gap:.875rem;align-items:stretch}.dynamic-view-builder__join-modal-top>*{height:100%}.dynamic-view-builder__join-modal-top .dynamic-view-builder__modal-summary,.dynamic-view-builder__join-modal-top .dynamic-view-builder__modal-field{align-self:stretch}.dynamic-view-builder__modal-summary-label{color:#70839a;font-size:.73rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.dynamic-view-builder__modal-summary-value{color:#243342;font-weight:600;line-height:1.35;word-break:break-word}.dynamic-view-builder__modal-summary-value--path{color:#1f8a52;font-family:Consolas,Courier New,monospace;font-size:.86rem;font-weight:600}.dynamic-view-builder__picker-title{color:#425466;font-weight:700;line-height:1.35}.dynamic-view-builder__picker-title--path{font-family:Consolas,Courier New,monospace;font-size:.85rem;font-weight:600}.dynamic-view-builder__modal-footer{display:flex;justify-content:flex-end;gap:.75rem;flex-wrap:wrap}.dynamic-view-builder__modal-footer--between{justify-content:space-between;align-items:center}.dynamic-view-builder__modal-footer-group{display:inline-flex;align-items:center;gap:.75rem;flex-wrap:wrap}.dynamic-view-builder__modal-footer-group--start{margin-right:auto}.dynamic-view-builder__filter-config-section{display:flex;flex-direction:column;gap:.625rem;min-width:0}.dynamic-view-builder__filter-config-section--value,.dynamic-view-builder__filter-config-section--domain{padding-top:.25rem;border-top:1px solid #e8edf3}.dynamic-view-builder__filter-optional{display:flex;align-items:flex-end;gap:.35rem;min-height:100%;padding-bottom:.15rem}.dynamic-view-builder__filter-config-section :where(.sdc-checkbox){min-height:34px}.dynamic-view-builder__filter-domain-grid,.dynamic-view-builder__filter-review-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem}.dynamic-view-builder__filter-domain-item,.dynamic-view-builder__filter-review-item{display:flex;flex-direction:column;gap:.25rem;min-width:0;padding:.8rem .9rem;border:1px solid #e5ebf2;border-radius:.6rem;background:#f8fafc}.dynamic-view-builder__filter-domain-hint{color:#70839a;font-size:.82rem;line-height:1.45}.dynamic-view-builder__filter-review-preview{display:flex;flex-direction:column;gap:.35rem;min-width:0;padding-top:.25rem;border-top:1px solid #e8edf3}.dynamic-view-builder__filter-review-code{color:#243342;font-family:Consolas,Courier New,monospace;font-size:.84rem;line-height:1.45;white-space:pre-wrap;word-break:break-word}.dynamic-view-builder__sort-direction-field{gap:.4rem}.dynamic-view-builder__selection-table{display:flex;flex-direction:column;border:1px solid #d7dde5;background:#fff;overflow:hidden;border-radius:.5rem;min-height:0;flex:1 1 auto}.dynamic-view-builder__modal-stage-body>.dynamic-view-builder__selection-table,.dynamic-view-builder__modal-stage-body.dynamic-view-builder__picklist-shell{height:100%}.dynamic-view-builder__selection-table--chooser{min-height:0}.dynamic-view-builder__selection-head{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr) 5rem;gap:.75rem;padding:.875rem 1rem;border-bottom:1px solid #e4e8ef;background:#f6f8fb}.dynamic-view-builder__selection-body{flex:1 1 auto;min-height:0;max-height:22rem;overflow:auto}.dynamic-view-builder__selection-table--fluid,.dynamic-view-builder__selection-table--fluid .dynamic-view-builder__selection-body{min-height:0;max-height:none;height:100%}.dynamic-view-builder__selection-row{width:100%;display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr) 5rem;gap:.75rem;padding:.875rem 1rem;border:0;border-bottom:1px solid #eef2f7;background:transparent;text-align:left;cursor:pointer;transition:background-color .18s ease,box-shadow .18s ease}.dynamic-view-builder__selection-row:last-child{border-bottom:0}.dynamic-view-builder__selection-row:hover{background:#f9fbff}.dynamic-view-builder__selection-row--selected{background:#eef5ff}.dynamic-view-builder__selection-row:focus-visible{outline:2px solid rgba(27,92,255,.22);outline-offset:-2px}.dynamic-view-builder__selection-col,.dynamic-view-builder__selection-cell{min-width:0;color:#425466;line-height:1.4;word-break:break-word}.dynamic-view-builder__selection-col{font-weight:700}.dynamic-view-builder__selection-cell--meta{color:#70839a}.dynamic-view-builder__selection-path{display:inline-flex;align-items:baseline;gap:0;min-width:0;flex-wrap:nowrap}.dynamic-view-builder__selection-db{color:#243342;font-weight:700}.dynamic-view-builder__selection-table-label{color:#425466;font-weight:500}.dynamic-view-builder__selection-separator{color:#9aaaba;flex:0 0 auto;margin-inline:.02rem}.dynamic-view-builder__selection-accent{color:#1f8a52;font-weight:700}.dynamic-view-builder__selection-note{display:block;margin-top:.1rem;color:#8da0b4;font-size:.74rem}.dynamic-view-builder__selection-col--select,.dynamic-view-builder__selection-cell--select{display:flex;align-items:center;justify-content:center}.dynamic-view-builder__selection-marker{display:inline-flex;align-items:center;justify-content:center;width:1.2rem;height:1.2rem;border:1px solid #c8d4e0;border-radius:.3rem;background:#fff;color:transparent}.dynamic-view-builder__selection-marker i{font-size:.72rem;line-height:1}.dynamic-view-builder__selection-marker--selected{border-color:#1b5cff;background:#1b5cff;color:#fff}.dynamic-view-builder__selection-empty{padding:1rem;color:#70839a;text-align:center;line-height:1.4}.dynamic-view-builder__modal-picker--filter,.dynamic-view-builder__modal-picker--filter .dynamic-view-builder__selection-table{min-height:100%}.dynamic-view-builder__modal-picker--filter .dynamic-view-builder__selection-body{max-height:none}.dynamic-view-builder__field-modal{display:flex;flex-direction:column;gap:1rem;min-height:0;width:100%;height:100%}.dynamic-view-builder__field-config-shell{gap:.85rem;min-height:0;height:100%}.dynamic-view-builder__field-config-toolbar{display:flex;align-items:center;justify-content:space-between;gap:.75rem;flex-wrap:wrap}.dynamic-view-builder__field-config-summary{color:#516173;font-size:.8rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.dynamic-view-builder__field-selection-toolbar{display:flex;align-items:center;justify-content:space-between;gap:.75rem;flex-wrap:wrap}.dynamic-view-builder__field-config-list,.dynamic-view-builder__source-config-list{display:flex;flex-direction:column;flex:1 1 auto;gap:.75rem;width:100%;min-height:0;overflow:auto}.dynamic-view-builder__field-config-row{display:grid;grid-template-columns:minmax(13rem,1.1fr) minmax(0,1.9fr);gap:.9rem;align-items:start;width:100%;padding:.85rem .9rem;border:1px solid #dbe3ec;border-radius:.7rem;background:#fff}.dynamic-view-builder__source-config-row{display:grid;grid-template-columns:minmax(13rem,1fr) minmax(0,1.35fr);gap:.9rem;align-items:center;width:100%;padding:.85rem .9rem;border:1px solid #dbe3ec;border-radius:.7rem;background:#fff}.dynamic-view-builder__field-config-main,.dynamic-view-builder__source-config-main{display:flex;flex-direction:column;gap:.45rem;min-width:0}.dynamic-view-builder__field-config-title{display:inline-flex;align-items:baseline;gap:0;min-width:0;flex-wrap:wrap}.dynamic-view-builder__field-config-function{display:inline-flex;align-items:center;gap:.45rem;flex-wrap:wrap}.dynamic-view-builder__field-config-controls{display:grid;grid-template-columns:minmax(0,1fr) minmax(7rem,8rem) auto auto;gap:.75rem;align-items:end;min-width:0}.dynamic-view-builder__source-config-controls{display:grid;grid-template-columns:minmax(0,1fr);gap:.75rem;align-items:end;min-width:0}.dynamic-view-builder__field-config-controls--function{grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto auto}.dynamic-view-builder__field-form{display:grid;grid-template-columns:minmax(0,1fr) minmax(10rem,11rem);gap:.75rem 1rem;align-items:start}.dynamic-view-builder__field-form--balanced{grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr)}.dynamic-view-builder__field-width{display:flex;flex-direction:column;gap:.35rem;min-width:0}.dynamic-view-builder__between{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.625rem}.dynamic-view-builder__row-chip{display:inline-flex;align-items:center;padding:.14rem .45rem;border-radius:999px;font-size:.74rem;font-weight:600;line-height:1.2}.dynamic-view-builder__row-chip--operator{background:#eef4fb;color:#1b5cff}.dynamic-view-builder__row-chip--value{background:#f4f7fa;color:#5d7084}.dynamic-view-builder__row-chip--optional{background:#f2f7f3;color:#1f8a52}.dynamic-view-builder__row-chip--domain{background:#eef4fb;color:#425466}.dynamic-view-builder__field-drop-indicator{display:inline-flex;align-self:stretch;width:.2rem;min-height:2.2rem;border-radius:999px;background:#1b5cff;box-shadow:0 0 0 3px #1b5cff24;flex:0 0 auto}@media (max-width: 1120px){.dynamic-view-builder__workspace--split{grid-template-columns:1fr;grid-template-areas:\"builder\" \"preview\"}.dynamic-view-builder__workspace--split.dynamic-view-builder__workspace--preview-hidden{justify-items:stretch}.dynamic-view-builder__sections--split{padding-right:0}}@media (max-width: 900px){.dynamic-view-builder__field-form,.dynamic-view-builder__field-form--balanced,.dynamic-view-builder__field-config-toolbar,.dynamic-view-builder__field-config-row,.dynamic-view-builder__source-config-row,.dynamic-view-builder__field-config-controls,.dynamic-view-builder__source-config-controls,.dynamic-view-builder__field-config-controls--function{grid-template-columns:1fr}.dynamic-view-builder__section-row{flex-direction:column}.dynamic-view-builder__section--half,.dynamic-view-builder__section--compact,.dynamic-view-builder__section--fluid{width:100%}.dynamic-view-builder__toolbar,.dynamic-view-builder__section-head,.dynamic-view-builder__row,.dynamic-view-builder__footer,.dynamic-view-builder__modal-footer,.dynamic-view-builder__filter-toolbar,.dynamic-view-builder__field-selection-toolbar{flex-direction:column;align-items:stretch}.dynamic-view-builder__toolbar-actions,.dynamic-view-builder__section-actions,.dynamic-view-builder__row-actions{justify-content:flex-start}.dynamic-view-builder__alias-field{min-inline-size:6rem;max-inline-size:100%}.dynamic-view-builder__modal-grid,.dynamic-view-builder__modal-grid--filter,.dynamic-view-builder__modal-grid--filter-controls,.dynamic-view-builder__filter-modal,.dynamic-view-builder__filter-summary,.dynamic-view-builder__filter-domain-grid,.dynamic-view-builder__filter-review-grid,.dynamic-view-builder__between,.dynamic-view-builder__join-modal-top{grid-template-columns:1fr}.dynamic-view-builder__row{min-inline-size:100%}}:host ::ng-deep .sdc-modal__content{display:flex;flex-direction:column;min-height:0;overflow:hidden}:host ::ng-deep .sdc-modal__content>.dynamic-view-builder__modal-shell{flex:1 1 auto;min-height:0}@media (max-width: 768px){.dynamic-view-builder__selection-head,.dynamic-view-builder__selection-row{grid-template-columns:1fr}.dynamic-view-builder__selection-col--select,.dynamic-view-builder__selection-cell--select{justify-content:flex-start}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: ButtonComponent, selector: "sdc-button", inputs: ["id", "label", "ariaLabel", "disabled", "loading", "width", "priority", "size", "type", "icon", "rightIcon", "auxiliary", "rounded", "caret", "tooltip", "animation", "slide", "styleClass", "badge", "menuOptions", "menuContext", "model"], outputs: ["clicked"] }, { kind: "component", type: CheckboxComponent, selector: "sdc-checkbox", inputs: ["label", "disabled", "commonCheckbox", "labelPosition", "size", "checked"], outputs: ["checkedChange"] }, { kind: "component", type: CodeEditorComponent, selector: "sdc-code-editor", inputs: ["sql", "height", "width", "showCopy", "label", "required", "customHeaderItems", "activeHeaderKey", "readOnly", "language", "schema"], outputs: ["headerSelect", "onCopy", "languageChange", "domainFilterClick", "ctrlEnter"] }, { kind: "component", type: ComboboxComponent, selector: "sdc-combobox", inputs: ["multiple", "appendTo", "zIndex", "options", "overrideChipMessage", "maxSelectedLabels", "showClear", "searchable", "iconSelector", "showIconClass", "infoTooltip", "infoTooltipPosition", "infoTooltipEvent", "infoTooltipAllowHtml"], outputs: ["onSelectedItem", "panelClosed"] }, { kind: "component", type: InfoSignComponent, selector: "sdc-info-sign", inputs: ["label", "labelParams", "tooltip", "tooltipParams", "iconClass", "iconAriaLabel", "tooltipPosition", "tooltipEvent", "allowHtml", "inline"] }, { kind: "component", type: ModalComponent, selector: "sdc-modal", inputs: ["footerButtons", "headerActions", "header", "height", "maximizable", "maximize", "resizable", "responsive", "width", "zIndex", "closable", "styleClass", "appendToBody", "visible"], outputs: ["hidden", "visibleChange"] }, { kind: "component", type: PicklistComponent, selector: "sdc-picklist", inputs: ["loadingIndicator", "items", "selectedIds", "idKey", "titleKey", "subtitleKey", "iconClass", "selectionIconClass", "placeholder", "emptyTitle", "emptyText", "emptyIconClass", "resultsCounterSingularLabel", "resultsCounterPluralLabel", "filterFields", "first", "rows", "rowsPerPageOptions", "maxVisibleSelectedItems", "showPaginator", "showRowsPerPageOptions", "showSelectionCounter", "showResultsCounter", "showItemIcon", "autoResize", "autoResizeMinRows", "autoResizeMaxRows", "autoResizeItemHeight", "autoResizeViewportOffset", "maxTitleLength", "maxSubtitleLength", "autofocusSearch", "loading"], outputs: ["pageChange", "selectedIdsChange"] }, { kind: "component", type: SelectButtonComponent, selector: "sdc-select-button", inputs: ["items", "multiple", "appearance", "label", "required", "invalid", "message", "compareWith", "disabled"], outputs: ["itemSelected", "itemClicked"] }, { kind: "component", type: TextareaComponent, selector: "sdc-textarea", inputs: ["infoTooltip", "infoTooltipPosition", "infoTooltipEvent", "rows", "autoResize"] }, { kind: "component", type: TextboxComponent, selector: "sdc-textbox", inputs: ["infoTooltip", "infoTooltipPosition", "infoTooltipEvent"] }, { kind: "component", type: TimelineComponent, selector: "sdc-timeline", inputs: ["items", "activeIndex", "orientation", "interactive", "responsive", "showDescriptions", "ariaLabel", "ariaLabelParams"], outputs: ["stepSelect"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2307
2307
  }
2308
2308
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: VisualSqlEditorComponent, decorators: [{
2309
2309
  type: Component,
@@ -2349,4 +2349,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
2349
2349
  args: ["window:resize"]
2350
2350
  }] } });
2351
2351
  export { VisualSqlEditorComponent as DynamicViewBuilderComponent };
2352
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlzdWFsLXNxbC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy92aXN1YWwtc3FsLWVkaXRvci92aXN1YWwtc3FsLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3Zpc3VhbC1zcWwtZWRpdG9yL3Zpc3VhbC1zcWwtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBb0IsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQW9CL0YsT0FBTyxFQUNMLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUN6QixrQkFBa0IsRUFDbEIscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0QixzQkFBc0IsRUFDdEIsOEJBQThCLEVBQzlCLDZCQUE2QixFQUM3QixzQkFBc0IsRUFDdEIsd0JBQXdCLEVBQ3hCLDZCQUE2QixFQUM3QixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsb0JBQW9CLEVBQ3BCLHdCQUF3QixHQUN6QixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFB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RSxJQUFJLE1BQU0sRUFBRSxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0lBQ0QsNkJBQTZCLENBQUMsR0FBYTtRQUN6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZO1lBQ3pCLE1BQU0sSUFBSSxNQUFNLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLFdBQVcsQ0FBQztRQUV6RixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNyRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNyRSxJQUFJLE1BQU0sRUFBRSxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsTUFBYztRQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVk7WUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNsRSxDQUFDO0lBQ0QsNkJBQTZCLENBQUMsR0FBYTtRQUN6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFD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RSx3QkFBd0IsSUFBSSwyQkFBMkIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgaW5qZWN0LFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQgeyBEWU5BTUlDX1ZJRVdfQlVJTERFUl9ERUZBVUxUX1RBQkxFX1JPV1MgfSBmcm9tIFwiLi4vLi4vY29yZS9jb25zdGFudHMvZHluYW1pYy12aWV3LWJ1aWxkZXIuY29uc3RcIjtcbmltcG9ydCB7IGNyZWF0ZUR5bmFtaWNWaWV3QnVpbGRlckNvbmZpZyB9IGZyb20gXCIuLi8uLi9jb3JlL2NvbmZpZy9keW5hbWljLXZpZXctYnVpbGRlci5jb25maWdcIjtcbmltcG9ydCB0eXBlIHsgU2VsZWN0QnV0dG9uSXRlbSB9IGZyb20gXCIuLi8uLi9jb3JlL3R5cGVzL3NlbGVjdC1idXR0b24udHlwZVwiO1xuaW1wb3J0IHR5cGUgeyBUaW1lbGluZUl0ZW0sIFRpbWVsaW5lU3RlcFNlbGVjdEV2ZW50IH0gZnJvbSBcIi4uLy4uL2NvcmUvdHlwZXMvdGltZWxpbmUudHlwZVwiO1xuaW1wb3J0IHR5cGUge1xuICBEeW5hbWljVmlld0J1aWxkZXJDb2x1bW5PcHRpb24sXG4gIER5bmFtaWNWaWV3QnVpbGRlckNvbmZpZyxcbiAgRHluYW1pY1ZpZXdCdWlsZGVyRmllbGQsXG4gIER5bmFtaWNWaWV3QnVpbGRlckZpZWxkRnVuY3Rpb24sXG4gIER5bmFtaWNWaWV3QnVpbGRlckZpbHRlcixcbiAgRHluYW1pY1ZpZXdCdWlsZGVyRnVuY3Rpb24sXG4gIER5bmFtaWNWaWV3QnVpbGRlckpvaW4sXG4gIER5bmFtaWNWaWV3QnVpbGRlck9wdGlvbixcbiAgRHluYW1pY1ZpZXdCdWlsZGVyU29ydCxcbiAgRHluYW1pY1ZpZXdCdWlsZGVyVGFibGVPcHRpb24sXG59IGZyb20gXCIuLi8uLi9jb3JlL3R5cGVzL2R5bmFtaWMtdmlldy1idWlsZGVyLnR5cGVcIjtcbmltcG9ydCB0eXBlIHtcbiAgUm93QmFzZSxcbiAgVGFibGVDb2x1bW4sXG4gIFRhYmxlT3B0aW9ucyxcbn0gZnJvbSBcIi4uLy4uL2NvcmUvdHlwZXMvdGFibGUudHlwZVwiO1xuaW1wb3J0IHtcbiAgRU1QVFlfVkFMVUUsXG4gIEVNUFRZX1NPUlRfRlVOQ1RJT04sXG4gIERFRkFVTFRfRklMVEVSX09QRVJBVE9SLFxuICBERUZBVUxUX0ZJTFRFUl9WQUxVRV9UWVBFLFxuICBGSUxURVJfTU9ERV9ET01BSU4sXG4gIE9WRVJMQVlfQVBQRU5EX1RBUkdFVCxcbiAgTU9EQUxfT1ZFUkxBWV9aX0lOREVYLFxuICBGSUVMRF9QSUNLTElTVF9ST1dTLFxuICBGSUxURVJfUElDS0xJU1RfUk9XUyxcbiAgVklTVUFMX1NRTF9UQUJMRV9DT0xPUixcbiAgVklTVUFMX1NRTF9GSUVMRF9DT0xPUixcbiAgUElDS0xJU1RfREFUQV9UWVBFX0JBREdFX0NPTE9SLFxuICBQSUNLTElTVF9GVU5DVElPTl9CQURHRV9DT0xPUixcbiAgRkFMTEJBQ0tfU0VMRUNUX1RBQkxFUyxcbiAgRkFMTEJBQ0tfRU1QVFlfU0VMRUNUSU9OLFxuICBQUkVWSUVXX1JPV1NfUEVSX1BBR0VfT1BUSU9OUyxcbiAgQUxJQVNfTUFYX0xFTkdUSCxcbiAgTUlOX1BBUlRTX0ZPUl9EQixcbiAgREJfUEFSVFNfT0ZGU0VULFxuICBNSU5fUEFSVFNfRk9SX1RBQkxFLFxuICBKT0lOX09QRVJBVE9SX0xBQkVMUyxcbiAgRFlOQU1JQ19NT0RBTF9ESU1FTlNJT05TLFxufSBmcm9tIFwiLi91dGlscy92aXN1YWwtc3FsLWVkaXRvci5jb25zdGFudHNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZSwgc2x1Z2lmeSwgZGVkdXBsaWNhdGVCeUtleSB9IGZyb20gXCIuL3V0aWxzL3Zpc3VhbC1zcWwtZWRpdG9yLXRleHQudXRpbFwiO1xuaW1wb3J0IHtcbiAgYnVpbGRHZW5lcmF0ZWRTcWwsXG4gIGJ1aWxkV2hlcmVTcWwsXG4gIGJ1aWxkR3JvdXBCeVNxbCxcbiAgYnVpbGRPcmRlckJ5U3FsLFxuICByZXNvbHZlU291cmNlU3FsLFxuICByZXNvbHZlSm9pblNxbCxcbiAgcmVzb2x2ZUNvbHVtblNxbCxcbiAgcmVzb2x2ZUZpZWxkU3FsLFxuICByZXNvbHZlRnVuY3Rpb25TcWwsXG4gIHJlc29sdmVTb3J0U3FsLFxuICByZXNvbHZlRmlsdGVyU3FsLFxuICByZXNvbHZlRmlsdGVyT3BlcmF0b3JTcWwsXG4gIHJlc29sdmVGaWx0ZXJWYWx1ZVNxbCxcbiAgcXVvdGVTcWxWYWx1ZSxcbiAgZGVjb3JhdGVMaWtlVmFsdWUsXG4gIHR5cGUgU3FsQ29udGV4dCxcbn0gZnJvbSBcIi4vdXRpbHMvdmlzdWFsLXNxbC1lZGl0b3Itc3FsLnV0aWxcIjtcbmltcG9ydCB7IGlzTnVtZXJpY1R5cGUsIGlzRGF0ZVR5cGUsIGZpbHRlck9wZXJhdG9yc0ZvckNvbHVtbiB9IGZyb20gXCIuL3V0aWxzL3Zpc3VhbC1zcWwtZWRpdG9yLXNhbml0aXplLnV0aWxcIjtcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gXCIuLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tIFwiLi4vY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50XCI7XG5pbXBvcnQgeyBDb2RlRWRpdG9yQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvZGUtZWRpdG9yL2NvZGUtZWRpdG9yLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ29tYm9ib3hDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tYm9ib3gvY29tYm9ib3guY29tcG9uZW50XCI7XG5pbXBvcnQgeyBJbmZvU2lnbkNvbXBvbmVudCB9IGZyb20gXCIuLi9pbmZvLXNpZ24vaW5mby1zaWduLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTW9kYWxDb21wb25lbnQgfSBmcm9tIFwiLi4vbW9kYWwvbW9kYWwuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBQaWNrbGlzdENvbXBvbmVudCB9IGZyb20gXCIuLi9waWNrbGlzdC9waWNrbGlzdC5jb21wb25lbnRcIjtcbmltcG9ydCB7IFNlbGVjdEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gXCIuLi9zZWxlY3QtYnV0dG9uL3NlbGVjdC1idXR0b24uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBUYWJsZUNvbXBvbmVudCB9IGZyb20gXCIuLi90YWJsZS90YWJsZS5jb21wb25lbnRcIjtcbmltcG9ydCB7IFRleHRhcmVhQ29tcG9uZW50IH0gZnJvbSBcIi4uL3RleHRhcmVhL3RleHRhcmVhLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgVGV4dGJveENvbXBvbmVudCB9IGZyb20gXCIuLi90ZXh0Ym94L3RleHRib3guY29tcG9uZW50XCI7XG5pbXBvcnQgeyBUaW1lbGluZUNvbXBvbmVudCB9IGZyb20gXCIuLi90aW1lbGluZS90aW1lbGluZS5jb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHtcbiAgU2VsZWN0aW9uTW9kYWxNb2RlLFxuICBCdWlsZGVyTGF5b3V0TW9kZSxcbiAgU291cmNlTW9kYWxTdGVwLFxuICBGaWVsZE1vZGFsU3RlcCxcbiAgRmlsdGVyTW9kYWxTdGVwLFxuICBCdWlsZGVyU2VjdGlvbklkLFxuICBGaWx0ZXJNb2RhbE1vZGUsXG4gIFNlbGVjdGlvblJvdyxcbiAgU291cmNlVmlld0l0ZW0sXG4gIFNvdXJjZU1vZGFsRHJhZnQsXG4gIFNvdXJjZUNvbmZpZ3VyZWRJdGVtLFxuICBKb2luVmlld0l0ZW0sXG4gIFNpbXBsZVZpZXdJdGVtLFxuICBGaWVsZFZpZXdJdGVtLFxuICBTb3J0Vmlld0l0ZW0sXG4gIFNvcnRTZWxlY3RhYmxlSXRlbSxcbiAgRmlsdGVyVmlld0l0ZW0sXG4gIEZpbHRlclJldmlld0l0ZW0sXG4gIENvbHVtbkRpc3BsYXlQYXJ0cyxcbiAgVGFibGVEaXNwbGF5UGFydHMsXG4gIEZpZWxkTW9kYWxDb25maWd1cmVkSXRlbSxcbiAgQnVpbGRlckZsb3dBcnJvdyxcbiAgQ29sdW1uUGlja2xpc3RJdGVtLFxuICBTb3J0UGlja2xpc3RJdGVtLFxuICBUYWJsZVBpY2tsaXN0SXRlbSxcbiAgUHJldmlld0NvbHVtbkxpa2UsXG59IGZyb20gXCIuL3R5cGVzL3Zpc3VhbC1zcWwtZWRpdG9yLnR5cGVzXCI7XG5pbXBvcnQgeyBWaXN1YWxTcWxFZGl0b3JGbG93U2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL3Zpc3VhbC1zcWwtZWRpdG9yLWZsb3cuc2VydmljZVwiO1xuaW1wb3J0IHsgVmlzdWFsU3FsRWRpdG9yU3RhdGVTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvdmlzdWFsLXNxbC1lZGl0b3Itc3RhdGUuc2VydmljZVwiO1xuaW1wb3J0IHsgVmlzdWFsU3FsRWRpdG9yU291cmNlTW9kYWxDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3Zpc3VhbC1zcWwtZWRpdG9yLXNvdXJjZS1tb2RhbC92aXN1YWwtc3FsLWVkaXRvci1zb3VyY2UtbW9kYWwuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBWaXN1YWxTcWxFZGl0b3JKb2luTW9kYWxDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3Zpc3VhbC1zcWwtZWRpdG9yLWpvaW4tbW9kYWwvdmlzdWFsLXNxbC1lZGl0b3Itam9pbi1tb2RhbC5jb21wb25lbnRcIjtcbmltcG9ydCB7IFZpc3VhbFNxbEVkaXRvclNvcnRNb2RhbENvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvdmlzdWFsLXNxbC1lZGl0b3Itc29ydC1tb2RhbC92aXN1YWwtc3FsLWVkaXRvci1zb3J0LW1vZGFsLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgVmlzdWFsU3FsRWRpdG9yRmllbGRNb2RhbENvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvdmlzdWFsLXNxbC1lZGl0b3ItZmllbGQtbW9kYWwvdmlzdWFsLXNxbC1lZGl0b3ItZmllbGQtbW9kYWwuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBWaXN1YWxTcWxFZGl0b3JGaWx0ZXJNb2RhbENvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvdmlzdWFsLXNxbC1lZGl0b3ItZmlsdGVyLW1vZGFsL3Zpc3VhbC1zcWwtZWRpdG9yLWZpbHRlci1tb2RhbC5jb21wb25lbnRcIjtcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJzZGMtdmlzdWFsLXNxbC1lZGl0b3JcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJvdmlkZXJzOiBbVmlzdWFsU3FsRWRpdG9yRmxvd1NlcnZpY2UsIFZpc3VhbFNxbEVkaXRvclN0YXRlU2VydmljZV0sXG4gIGltcG9ydHM6IFtcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIENoZWNrYm94Q29tcG9uZW50LFxuICAgIENvZGVFZGl0b3JDb21wb25lbnQsXG4gICAgQ29tYm9ib3hDb21wb25lbnQsXG4gICAgSW5mb1NpZ25Db21wb25lbnQsXG4gICAgTW9kYWxDb21wb25lbnQsXG4gICAgUGlja2xpc3RDb21wb25lbnQsXG4gICAgU2VsZWN0QnV0dG9uQ29tcG9uZW50LFxuICAgIFRhYmxlQ29tcG9uZW50LFxuICAgIFRleHRhcmVhQ29tcG9uZW50LFxuICAgIFRleHRib3hDb21wb25lbnQsXG4gICAgVGltZWxpbmVDb21wb25lbnQsXG4gICAgVmlzdWFsU3FsRWRpdG9yU291cmNlTW9kYWxDb21wb25lbnQsXG4gICAgVmlzdWFsU3FsRWRpdG9ySm9pbk1vZGFsQ29tcG9uZW50LFxuICAgIFZpc3VhbFNxbEVkaXRvclNvcnRNb2RhbENvbXBvbmVudCxcbiAgICBWaXN1YWxTcWxFZGl0b3JGaWVsZE1vZGFsQ29tcG9uZW50LFxuICAgIFZpc3VhbFNxbEVkaXRvckZpbHRlck1vZGFsQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogXCIuL3Zpc3VhbC1zcWwtZWRpdG9yLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi92aXN1YWwtc3FsLWVkaXRvci5jb21wb25lbnQuc2Nzc1wiXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFZpc3VhbFNxbEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmxvd1NlcnZpY2UgPSBpbmplY3QoVmlzdWFsU3FsRWRpdG9yRmxvd1NlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YXRlU2VydmljZSA9IGluamVjdChWaXN1YWxTcWxFZGl0b3JTdGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIGludGVybmFsQ29uZmlnID0gY3JlYXRlRHluYW1pY1ZpZXdCdWlsZGVyQ29uZmlnKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VjdGlvbk9yZGVyOiBCdWlsZGVyU2VjdGlvbklkW10gPSBbXG4gICAgXCJ0YWJsZXNcIixcbiAgICBcImpvaW5zXCIsXG4gICAgXCJncm91cEJ5XCIsXG4gICAgXCJmaWVsZHNcIixcbiAgICBcInNvcnRpbmdcIixcbiAgICBcImZpbHRlcnNcIixcbiAgXTtcbiAgcmVhZG9ubHkgbGF5b3V0TW9kZUl0ZW1zOiBTZWxlY3RCdXR0b25JdGVtPEJ1aWxkZXJMYXlvdXRNb2RlPltdID0gW1xuICAgIHtcbiAgICAgIGxhYmVsOiBcIkJsb2Nvc1wiLFxuICAgICAgdmFsdWU6IFwic3RhY2tlZFwiLFxuICAgICAgaWNvbkNsYXNzOiBcImZhcyBmYS10aC1sYXJnZVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6IFwiTGlzdGFcIixcbiAgICAgIHZhbHVlOiBcInNwbGl0XCIsXG4gICAgICBpY29uQ2xhc3M6IFwiZmFzIGZhLWxpc3RcIixcbiAgICB9LFxuICBdO1xuICByZWFkb25seSBmaWx0ZXJNb2RlSXRlbXM6IFNlbGVjdEJ1dHRvbkl0ZW08RmlsdGVyTW9kYWxNb2RlPltdID0gW1xuICAgIHtcbiAgICAgIGxhYmVsOiBcIkZpbHRyb1wiLFxuICAgICAgdmFsdWU6IFwiY29uZGl0aW9uXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogXCJFeHByZXNzYW8gZGUgZG9taW5pb1wiLFxuICAgICAgdmFsdWU6IEZJTFRFUl9NT0RFX0RPTUFJTixcbiAgICB9LFxuICBdO1xuICByZWFkb25seSBzZWxlY3RlZEZpbHRlck1vZGVJdGVtczogU2VsZWN0QnV0dG9uSXRlbTxGaWx0ZXJNb2RhbE1vZGU+W10gPSBbXTtcbiAgcmVhZG9ubHkgc29ydERpcmVjdGlvbkl0ZW1zOiBTZWxlY3RCdXR0b25JdGVtPHN0cmluZz5bXSA9IFtdO1xuICByZWFkb25seSBzZWxlY3RlZExheW91dE1vZGVJdGVtczogU2VsZWN0QnV0dG9uSXRlbTxCdWlsZGVyTGF5b3V0TW9kZT5bXSA9IFtdO1xuICByZWFkb25seSBzZWxlY3RlZFNvcnREaXJlY3Rpb25JdGVtczogU2VsZWN0QnV0dG9uSXRlbTxzdHJpbmc+W10gPSBbXTtcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xuICBASW5wdXQoKSBzZXQgY29uZmlnKHZhbHVlOiBEeW5hbWljVmlld0J1aWxkZXJDb25maWcpIHtcbiAgICB0aGlzLmludGVybmFsQ29uZmlnID0gdmFsdWVcbiAgICAgID8gY3JlYXRlRHluYW1pY1ZpZXdCdWlsZGVyQ29uZmlnKHZhbHVlKVxuICAgICAgOiBjcmVhdGVEeW5hbWljVmlld0J1aWxkZXJDb25maWcoKTtcbiAgICB0aGlzLnN5bmNMYXlvdXRNb2RlSXRlbXMoKTtcbiAgICB0aGlzLnN5bmNGaWx0ZXJNb2RlSXRlbXMoKTtcbiAgICB0aGlzLnN5bmNTb3J0RGlyZWN0aW9uSXRlbXMoKTtcbiAgICB0aGlzLnNhbml0aXplQnVpbGRlcigpO1xuICB9XG4gIGdldCBjb25maWcoKTogRHluYW1pY1ZpZXdCdWlsZGVyQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5pbnRlcm5hbENvbmZpZztcbiAgfVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgY29uZmlnQ2hhbmdlID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPER5bmFtaWNWaWV3QnVpbGRlckNvbmZpZz4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPER5bmFtaWNWaWV3QnVpbGRlckNvbmZpZz4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQFZpZXdDaGlsZChcInNlY3Rpb25zQ29udGFpbmVyXCIpXG4gIHByaXZhdGUgcmVhZG9ubHkgc2VjdGlvbnNDb250YWluZXI/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgQFZpZXdDaGlsZHJlbihcImJ1aWxkZXJTZWN0aW9uXCIpXG4gIHByaXZhdGUgcmVhZG9ubHkgYnVpbGRlclNlY3Rpb25zPzogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PjtcbiAgbGF5b3V0TW9kZTogQnVpbGRlckxheW91dE1vZGUgPSBcInN0YWNrZWRcIjtcbiAgcHJldmlld1Zpc2libGUgPSBmYWxzZTtcbiAgZmxvd0Fycm93czogQnVpbGRlckZsb3dBcnJvd1tdID0gW107XG4gIG1lYXN1cmVkU3BsaXRQcmV2aWV3SGVpZ2h0ID0gXCIyNHJlbVwiO1xuICBkcmFnZ2luZ0ZpZWxkSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBkcmFnUHJldmlld0luZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcmVhZG9ubHkgb3ZlcmxheUFwcGVuZFRhcmdldCA9IE9WRVJMQVlfQVBQRU5EX1RBUkdFVDtcbiAgcmVhZG9ubHkgb3ZlcmxheVpJbmRleCA9IE1PREFMX09WRVJMQVlfWl9JTkRFWDtcbiAgcmVhZG9ubHkgbW9kYWxEaW1lbnNpb25zID0gRFlOQU1JQ19NT0RBTF9ESU1FTlNJT05TO1xuICByZWFkb25seSBmaWVsZFBpY2tsaXN0Um93cyA9IEZJRUxEX1BJQ0tMSVNUX1JPV1M7XG4gIHJlYWRvbmx5IGZpbHRlclBpY2tsaXN0Um93cyA9IEZJTFRFUl9QSUNLTElTVF9ST1dTO1xuXG4gIC8vIOKUgOKUgOKUgCBTZWxlY3Rpb24gbW9kYWwgc3RhdGUgKG5vdCBvd25lZCBieSBzdGF0ZVNlcnZpY2UpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBzZWxlY3Rpb25Nb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgc2VsZWN0aW9uTW9kYWxNb2RlOiBTZWxlY3Rpb25Nb2RhbE1vZGUgPSBcInRhYmxlc1wiO1xuICBzZWxlY3Rpb25Nb2RhbElkczogc3RyaW5nW10gPSBbXTtcbiAgc2VsZWN0aW9uTW9kYWxTZWFyY2ggPSBFTVBUWV9WQUxVRTtcblxuICAvLyDilIDilIDilIAgU2VhcmNoIHN0YXRlIChsb2NhbCB0byBjb21wb25lbnQsIG5vdCBvd25lZCBieSBzdGF0ZVNlcnZpY2UpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBqb2luU291cmNlU2VhcmNoID0gRU1QVFlfVkFMVUU7XG4gIGpvaW5UYXJnZXRTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgc29ydFNlYXJjaCA9IEVNUFRZX1ZBTFVFO1xuICBmaWVsZE1vZGFsU2VhcmNoID0gRU1QVFlfVkFMVUU7XG4gIGZpbHRlclNlYXJjaCA9IEVNUFRZX1ZBTFVFO1xuXG4gIC8vIOKUgOKUgOKUgCBEZWxlZ2F0ZSBnZXR0ZXJzOiBtb2RhbCBzdGF0ZSBpcyBvd25lZCBieSBzdGF0ZVNlcnZpY2Ug4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGdldCBzb3VyY2VNb2RhbFZpc2libGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnN0YXRlU2VydmljZS5zb3VyY2VNb2RhbFZpc2libGU7IH1cbiAgc2V0IHNvdXJjZU1vZGFsVmlzaWJsZSh2YWx1ZTogYm9vbGVhbikgeyB0aGlzLnN0YXRlU2VydmljZS5zb3VyY2VNb2RhbFZpc2libGUgPSB2YWx1ZTsgfVxuICBnZXQgc291cmNlTW9kYWxTdGVwKCk6IFNvdXJjZU1vZGFsU3RlcCB7IHJldHVybiB0aGlzLnN0YXRlU2VydmljZS5zb3VyY2VNb2RhbFN0ZXA7IH1cbiAgZ2V0IHNvdXJjZU1vZGFsRHJhZnRzKCk6IFNvdXJjZU1vZGFsRHJhZnRbXSB7IHJldHVybiB0aGlzLnN0YXRlU2VydmljZS5zb3VyY2VNb2RhbERyYWZ0czsgfVxuXG4gIGdldCBqb2luTW9kYWxWaXNpYmxlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5zdGF0ZVNlcnZpY2Uuam9pbk1vZGFsVmlzaWJsZTsgfVxuICBzZXQgam9pbk1vZGFsVmlzaWJsZSh2YWx1ZTogYm9vbGVhbikgeyB0aGlzLnN0YXRlU2VydmljZS5qb2luTW9kYWxWaXNpYmxlID0gdmFsdWU7IH1cbiAgZ2V0IGpvaW5FZGl0SW5kZXgoKTogbnVtYmVyIHwgbnVsbCB7IHJldHVybiB0aGlzLnN0YXRlU2VydmljZS5qb2luRWRpdEluZGV4OyB9XG4gIGdldCBqb2luRHJhZnQoKSB7IHJldHVybiB0aGlzLnN0YXRlU2VydmljZS5qb2luRHJhZnQ7IH1cblxuICBnZXQgc29ydE1vZGFsVmlzaWJsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuc3RhdGVTZXJ2aWNlLnNvcnRNb2RhbFZpc2libGU7IH1cbiAgc2V0IHNvcnRNb2RhbFZpc2libGUodmFsdWU6IGJvb2xlYW4pIHsgdGhpcy5zdGF0ZVNlcnZpY2Uuc29ydE1vZGFsVmlzaWJsZSA9IHZhbHVlOyB9XG4gIGdldCBzb3J0RWRpdEluZGV4KCk6IG51bWJlciB8IG51bGwgeyByZXR1cm4gdGhpcy5zdGF0ZVNlcnZpY2Uuc29ydEVkaXRJbmRleDsgfVxuICBnZXQgc29ydERyYWZ0KCkgeyByZXR1cm4gdGhpcy5zdGF0ZVNlcnZpY2Uuc29ydERyYWZ0OyB9XG5cbiAgZ2V0IGZpZWxkTW9kYWxWaXNpYmxlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5zdGF0ZVNlcnZpY2UuZmllbGRNb2RhbFZpc2libGU7IH1cbiAgc2V0IGZpZWxkTW9kYWxWaXNpYmxlKHZhbHVlOiBib29sZWFuKSB7IHRoaXMuc3RhdGVTZXJ2aWNlLmZpZWxkTW9kYWxWaXNpYmxlID0gdmFsdWU7IH1cbiAgZ2V0IGZpZWxkTW9kYWxTdGVwKCk6IEZpZWxkTW9kYWxTdGVwIHsgcmV0dXJuIHRoaXMuc3RhdGVTZXJ2aWNlLmZpZWxkTW9kYWxTdGVwOyB9XG4gIGdldCBmaWVsZE1vZGFsRHJhZnRzKCk6IER5bmFtaWNWaWV3QnVpbGRlckZpZWxkW10geyByZXR1cm4gdGhpcy5zdGF0ZVNlcnZpY2UuZmllbGRNb2RhbERyYWZ0czsgfVxuICBnZXQgZmllbGRGdW5jdGlvbkVkaXRDb2x1bW4oKTogc3RyaW5nIHwgbnVsbCB7IHJldHVybiB0aGlzLnN0YXRlU2VydmljZS5maWVsZEZ1bmN0aW9uRWRpdENvbHVtbjsgfVxuICBnZXQgZmllbGRGdW5jdGlvbkRyYWZ0KCkgeyByZXR1cm4gdGhpcy5zdGF0ZVNlcnZpY2UuZmllbGRGdW5jdGlvbkRyYWZ0OyB9XG5cbiAgZ2V0IGZpbHRlck1vZGFsVmlzaWJsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuc3RhdGVTZXJ2aWNlLmZpbHRlck1vZGFsVmlzaWJsZTsgfVxuICBzZXQgZmlsdGVyTW9kYWxWaXNpYmxlKHZhbHVlOiBib29sZWFuKSB7IHRoaXMuc3RhdGVTZXJ2aWNlLmZpbHRlck1vZGFsVmlzaWJsZSA9IHZhbHVlOyB9XG4gIGdldCBmaWx0ZXJFZGl0SW5kZXgoKTogbnVtYmVyIHwgbnVsbCB7IHJldHVybiB0aGlzLnN0YXRlU2VydmljZS5maWx0ZXJFZGl0SW5kZXg7IH1cbiAgZ2V0IGZpbHRlck1vZGFsU3RlcCgpOiBGaWx0ZXJNb2RhbFN0ZXAgeyByZXR1cm4gdGhpcy5zdGF0ZVNlcnZpY2UuZmlsdGVyTW9kYWxTdGVwOyB9XG4gIGdldCBmaWx0ZXJNb2RhbE1vZGUoKTogRmlsdGVyTW9kYWxNb2RlIHsgcmV0dXJuIHRoaXMuc3RhdGVTZXJ2aWNlLmZpbHRlck1vZGFsTW9kZTsgfVxuICBnZXQgZmlsdGVyRHJhZnQoKSB7IHJldHVybiB0aGlzLnN0YXRlU2VydmljZS5maWx0ZXJEcmFmdDsgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHRoaXMuc3luY0xheW91dE1vZGVJdGVtcygpO1xuICAgIHRoaXMuc3luY0ZpbHRlck1vZGVJdGVtcygpO1xuICAgIHRoaXMuc3luY1NvcnREaXJlY3Rpb25JdGVtcygpO1xuICAgIHRoaXMuc2FuaXRpemVCdWlsZGVyKCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBmbG93Q29udGV4dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VjdGlvbnNDb250YWluZXI6IHRoaXMuc2VjdGlvbnNDb250YWluZXIsXG4gICAgICBidWlsZGVyU2VjdGlvbnM6IHRoaXMuYnVpbGRlclNlY3Rpb25zLFxuICAgICAgc2VjdGlvbk9yZGVyOiB0aGlzLnNlY3Rpb25PcmRlcixcbiAgICAgIGNoYW5nZURldGVjdG9yUmVmOiB0aGlzLmNoYW5nZURldGVjdG9yUmVmLFxuICAgICAgb25GbG93QXJyb3dzQ2hhbmdlOiAoYXJyb3dzOiBCdWlsZGVyRmxvd0Fycm93W10sIG1lYXN1cmVkSGVpZ2h0OiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5mbG93QXJyb3dzID0gYXJyb3dzO1xuICAgICAgICB0aGlzLm1lYXN1cmVkU3BsaXRQcmV2aWV3SGVpZ2h0ID0gbWVhc3VyZWRIZWlnaHQ7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5idWlsZGVyU2VjdGlvbnM/LmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZmxvd1NlcnZpY2Uuc2NoZWR1bGVGbG93QXJyb3dSZWZyZXNoKHRoaXMuZmxvd0NvbnRleHQpO1xuICAgIH0pO1xuICAgIHRoaXMuZmxvd1NlcnZpY2Uuc2NoZWR1bGVGbG93QXJyb3dSZWZyZXNoKHRoaXMuZmxvd0NvbnRleHQpO1xuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZmxvd1NlcnZpY2UubmdPbkRlc3Ryb3koKTtcbiAgfVxuICBASG9zdExpc3RlbmVyKFwid2luZG93OnJlc2l6ZVwiKVxuICBvbldpbmRvd1Jlc2l6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmZsb3dTZXJ2aWNlLnNjaGVkdWxlRmxvd0Fycm93UmVmcmVzaCh0aGlzLmZsb3dDb250ZXh0KTtcbiAgfVxuICBnZXQgc2VsZWN0ZWRMYXlvdXRNb2RlSXRlbSgpOiBTZWxlY3RCdXR0b25JdGVtPEJ1aWxkZXJMYXlvdXRNb2RlPiB8IG51bGwge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmxheW91dE1vZGVJdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSB0aGlzLmxheW91dE1vZGUpID8/XG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBnZXQgaXNSZWFkb25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcubWV0YWRhdGEudmlld01vZGUgPT09IFwicmVhZG9ubHlcIjtcbiAgfVxuICBnZXQgam9pbk9wZXJhdG9yT3B0aW9ucygpOiBEeW5hbWljVmlld0J1aWxkZXJPcHRpb25bXSB7XG4gICAgcmV0dXJuICh0aGlzLmNvbmZpZy5hdmFpbGFibGVEYXRhLmpvaW5PcGVyYXRvcnMgPz8gW10pLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICB0ZXh0OiB0aGlzLnJlc29sdmVKb2luT3BlcmF0b3JPcHRpb25UZXh0KGl0ZW0pLFxuICAgIH0pKTtcbiAgfVxuICBnZXQgZnVuY3Rpb25PcHRpb25zKCk6IER5bmFtaWNWaWV3QnVpbGRlck9wdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuYXZhaWxhYmxlRGF0YS5mdW5jdGlvbnMgPz8gW107XG4gIH1cbiAgZ2V0IHNvcnREaXJlY3Rpb25PcHRpb25zKCk6IER5bmFtaWNWaWV3QnVpbGRlck9wdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuYXZhaWxhYmxlRGF0YS5zb3J0RGlyZWN0aW9ucyA/PyBbXTtcbiAgfVxuICBnZXQgZmlsdGVyQ29ubmVjdG9yT3B0aW9ucygpOiBEeW5hbWljVmlld0J1aWxkZXJPcHRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmF2YWlsYWJsZURhdGEuZmlsdGVyQ29ubmVjdG9ycyA/PyBbXTtcbiAgfVxuICBnZXQgdmFsdWVUeXBlT3B0aW9ucygpOiBEeW5hbWljVmlld0J1aWxkZXJPcHRpb25bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdGV4dDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLnZhbHVlVHlwZXMudmFsdWVgLFxuICAgICAgICAgIFwiVmFsb3JcIlxuICAgICAgICApLFxuICAgICAgICB2YWx1ZTogXCJ2YWx1ZVwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGV4dDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLnZhbHVlVHlwZXMucGFyYW1ldGVyYCxcbiAgICAgICAgICBcIlBhcmFtZXRyb1wiXG4gICAgICAgICksXG4gICAgICAgIHZhbHVlOiBcInBhcmFtZXRlclwiLFxuICAgICAgfSxcbiAgICBdO1xuICB9XG4gIGdldCBib29sZWFuVmFsdWVPcHRpb25zKCk6IER5bmFtaWNWaWV3QnVpbGRlck9wdGlvbltdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICB0ZXh0OiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMuYm9vbGVhbi50cnVlYCxcbiAgICAgICAgICBcIlRydWVcIlxuICAgICAgICApLFxuICAgICAgICB2YWx1ZTogXCJ0cnVlXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0ZXh0OiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMuYm9vbGVhbi5mYWxzZWAsXG4gICAgICAgICAgXCJGYWxzZVwiXG4gICAgICAgICksXG4gICAgICAgIHZhbHVlOiBcImZhbHNlXCIsXG4gICAgICB9LFxuICAgIF07XG4gIH1cbiAgZ2V0IHNlbGVjdGVkVGFibGVzKCk6IER5bmFtaWNWaWV3QnVpbGRlclRhYmxlT3B0aW9uW10ge1xuICAgIGNvbnN0IGlkcyA9IG5ldyBTZXQoXG4gICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc291cmNlcy5tYXAoKGl0ZW0pID0+IGl0ZW0udGFibGUpXG4gICAgKTtcbiAgICByZXR1cm4gKHRoaXMuY29uZmlnLmF2YWlsYWJsZURhdGEudGFibGVzID8/IFtdKS5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICBpZHMuaGFzKGl0ZW0udmFsdWUpXG4gICAgKTtcbiAgfVxuICBnZXQgYXZhaWxhYmxlQ29sdW1ucygpOiBEeW5hbWljVmlld0J1aWxkZXJDb2x1bW5PcHRpb25bXSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRUYWJsZUlkcyA9IG5ldyBTZXQoXG4gICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc291cmNlcy5tYXAoKGl0ZW0pID0+IGl0ZW0udGFibGUpXG4gICAgKTtcbiAgICByZXR1cm4gKHRoaXMuY29uZmlnLmF2YWlsYWJsZURhdGEuY29sdW1ucyA/PyBbXSkuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgc2VsZWN0ZWRUYWJsZUlkcy5oYXMoaXRlbS50YWJsZSlcbiAgICApO1xuICB9XG4gIGdldCBmaWVsZFNlbGVjdGFibGVDb2x1bW5zKCk6IER5bmFtaWNWaWV3QnVpbGRlckNvbHVtbk9wdGlvbltdIHtcbiAgICBpZiAoIXRoaXMuYXZhaWxhYmxlQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZ3JvdXBCeS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmF2YWlsYWJsZUNvbHVtbnM7XG4gICAgfVxuICAgIGNvbnN0IGdyb3VwQnkgPSBuZXcgU2V0KHRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5KTtcbiAgICByZXR1cm4gdGhpcy5hdmFpbGFibGVDb2x1bW5zLmZpbHRlcihcbiAgICAgIChpdGVtKSA9PiBncm91cEJ5LmhhcyhpdGVtLnZhbHVlKSB8fCBpdGVtLmlzQWdncmVnYXRhYmxlICE9PSBmYWxzZVxuICAgICk7XG4gIH1cbiAgZ2V0IGdyb3VwQnlTZWxlY3RhYmxlQ29sdW1ucygpOiBEeW5hbWljVmlld0J1aWxkZXJDb2x1bW5PcHRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuYXZhaWxhYmxlQ29sdW1ucy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaXNBZ2dyZWdhdGFibGUgIT09IGZhbHNlKTtcbiAgfVxuICBnZXQgc29ydFNlbGVjdGFibGVJdGVtcygpOiBTb3J0U2VsZWN0YWJsZUl0ZW1bXSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEZpZWxkcyA9IHRoaXMubm9ybWFsaXplZEZpZWxkcztcbiAgICBpZiAoIW5vcm1hbGl6ZWRGaWVsZHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZ3JvdXBCeVNldCA9IG5ldyBTZXQodGhpcy5jb25maWcuZ2VuZXJhdGVkLmdyb3VwQnkpO1xuXG4gICAgcmV0dXJuIHRoaXMuZGVkdXBsaWNhdGVCeUtleShcbiAgICAgIG5vcm1hbGl6ZWRGaWVsZHNcbiAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMucmVzb2x2ZUNvbHVtbk9wdGlvbihpdGVtLmNvbHVtbik7XG4gICAgICAgICAgaWYgKCFjb2x1bW4pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5pc1NvcnRhYmxlICE9PSBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZ3JvdXBCeVNldC5oYXMoaXRlbS5jb2x1bW4pIHx8ICEhaXRlbS5mdW5jdGlvbj8uZnVuY3Rpb25OYW1lPy50cmltKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJ0cyA9IHRoaXMucmVzb2x2ZUNvbHVtblBhcnRzKGl0ZW0uY29sdW1uKTtcbiAgICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBpdGVtLmZ1bmN0aW9uPy5mdW5jdGlvbk5hbWU/LnRyaW0oKSA/PyBFTVBUWV9WQUxVRTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICBpZDogdGhpcy5idWlsZFNvcnRTZWxlY3Rpb25JZChpdGVtLmNvbHVtbiwgZnVuY3Rpb25OYW1lKSxcbiAgICAgICAgICAgIGNvbHVtbjogaXRlbS5jb2x1bW4sXG4gICAgICAgICAgICB0YWJsZUxhYmVsOiBwYXJ0cy50YWJsZUxhYmVsLFxuICAgICAgICAgICAgZmllbGRMYWJlbDogcGFydHMuZmllbGRMYWJlbCxcbiAgICAgICAgICAgIG1ldGE6IGZ1bmN0aW9uTmFtZVxuICAgICAgICAgICAgICA/IHRoaXMucmVzb2x2ZUZ1bmN0aW9uTGFiZWwoZnVuY3Rpb25OYW1lKVxuICAgICAgICAgICAgICA6IHRoaXMucmVzb2x2ZUNvbHVtbk9wdGlvbihpdGVtLmNvbHVtbik/LmRhdGFUeXBlID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgKGl0ZW0pID0+IGl0ZW0uaWRcbiAgICApO1xuICB9XG4gIGdldCBjYW5Db25maWd1cmVKb2lucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvdXJjZXMubGVuZ3RoID4gMTtcbiAgfVxuICBnZXQgY2FuU2F2ZSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gISEodGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpZWxkcy5sZW5ndGggfHwgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmdyb3VwQnkubGVuZ3RoKTtcbiAgfVxuICBnZXQgY2FuU2F2ZUpvaW4oKTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtbiB8fFxuICAgICAgIXRoaXMuam9pbkRyYWZ0LnRhcmdldENvbHVtbiB8fFxuICAgICAgIXRoaXMuam9pbkRyYWZ0Lm9wZXJhdG9yXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMucmVzb2x2ZUNvbHVtbk9wdGlvbih0aGlzLmpvaW5EcmFmdC5zb3VyY2VDb2x1bW4pO1xuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMucmVzb2x2ZUNvbHVtbk9wdGlvbih0aGlzLmpvaW5EcmFmdC50YXJnZXRDb2x1bW4pO1xuICAgIHJldHVybiAhIXNvdXJjZSAmJiAhIXRhcmdldCAmJiBzb3VyY2UudGFibGUgIT09IHRhcmdldC50YWJsZTtcbiAgfVxuICBnZXQgY2FuU2F2ZVNvcnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5zb3J0RHJhZnQuY29sdW1uICYmICEhdGhpcy5zb3J0RHJhZnQuZGlyZWN0aW9uO1xuICB9XG4gIGdldCBjYW5TYXZlRmllbGRNb2RhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmZpZWxkTW9kYWxEcmFmdHMubGVuZ3RoICYmICF0aGlzLmZpZWxkRnVuY3Rpb25FZGl0Q29sdW1uO1xuICB9XG4gIGdldCBjYW5TYXZlRmlsdGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuYnVpbGRGaWx0ZXJGcm9tRHJhZnQoKTtcbiAgfVxuICBnZXQgZmllbGRNb2RhbENhblByb2NlZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRNb2RhbERyYWZ0cy5sZW5ndGggPiAwO1xuICB9XG4gIGdldCBjYW5PcGVuRmllbGRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkSXRlbXMubGVuZ3RoID4gMDtcbiAgfVxuICBnZXQgZmlsdGVyTW9kYWxTZWxlY3Rpb25TdGVwQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlck1vZGFsU3RlcCA9PT0gXCJzZWxlY3RcIjtcbiAgfVxuICBnZXQgZmlsdGVyTW9kYWxDb25maWd1cmF0aW9uU3RlcEFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJNb2RhbFN0ZXAgPT09IFwiY29uZmlndXJlXCI7XG4gIH1cbiAgZ2V0IGZpbHRlck1vZGFsUmV2aWV3U3RlcEFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJNb2RhbFN0ZXAgPT09IFwicmV2aWV3XCI7XG4gIH1cbiAgZ2V0IGZpbHRlck1vZGFsQ2FuUHJvY2VlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJNb2RhbE1vZGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTiB8fCAhIXRoaXMuZmlsdGVyRHJhZnQuY29sdW1uO1xuICB9XG4gIGdldCBmaWx0ZXJNb2RhbENhblJldmlldygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYW5TYXZlRmlsdGVyO1xuICB9XG4gIGdldCBmaWx0ZXJOZWVkc1ZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhW1wiRU1QVFlcIiwgXCJOT1RfRU1QVFlcIl0uaW5jbHVkZXModGhpcy5maWx0ZXJEcmFmdC5vcGVyYXRvcik7XG4gIH1cbiAgZ2V0IGZpbHRlckNvbm5lY3RvckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlclNlcXVlbmNlSW5kZXggPT09IDA7XG4gIH1cbiAgZ2V0IGZpbHRlckNvbm5lY3RvckRpc2FibGVkUmVhc29uKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmZpbHRlckNvbm5lY3RvckRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gRU1QVFlfVkFMVUU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLmRpc2FibGVkUmVhc29ucy5jb25uZWN0b3JgLFxuICAgICAgXCJPIHByaW1laXJvIGZpbHRybyBzZW1wcmUgaW5pY2lhIG8gV0hFUkUsIHBvciBpc3NvIG8gY29uZWN0b3IgZmljYSB0cmF2YWRvLlwiXG4gICAgKTtcbiAgfVxuICBnZXQgZmlsdGVyT3BlcmF0b3JEaXNhYmxlZFJlYXNvbigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbikge1xuICAgICAgcmV0dXJuIEVNUFRZX1ZBTFVFO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmlsdGVycy5kaXNhYmxlZFJlYXNvbnMub3BlcmF0b3JgLFxuICAgICAgXCJTZWxlY2lvbmUgdW0gY2FtcG8gbmEgZXRhcGEgYW50ZXJpb3IgcGFyYSBsaWJlcmFyIHNvbWVudGUgb3Mgb3BlcmFkb3JlcyBjb21wYXRpdmVpcy5cIlxuICAgICk7XG4gIH1cbiAgZ2V0IGZpbHRlclZhbHVlVHlwZURpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5maWx0ZXJEcmFmdC5jb2x1bW4gfHwgIXRoaXMuZmlsdGVyTmVlZHNWYWx1ZTtcbiAgfVxuICBnZXQgZmlsdGVyVmFsdWVUeXBlRGlzYWJsZWRSZWFzb24oKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuZmlsdGVyRHJhZnQuY29sdW1uKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmlsdGVycy5kaXNhYmxlZFJlYXNvbnMudmFsdWVUeXBlV2l0aG91dENvbHVtbmAsXG4gICAgICAgIFwiRXNjb2xoYSB1bSBjYW1wbyBlIHVtIG9wZXJhZG9yIGFudGVzIGRlIGRlZmluaXIgY29tbyBvIHZhbG9yIHNlcmEgaW5mb3JtYWRvLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5maWx0ZXJOZWVkc1ZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmlsdGVycy5kaXNhYmxlZFJlYXNvbnMudmFsdWVUeXBlV2l0aG91dFZhbHVlYCxcbiAgICAgICAgXCJPIG9wZXJhZG9yIGF0dWFsIG5hbyB1c2EgdmFsb3IsIGVudGFvIHRpcG8gZGUgdmFsb3IgZSBlbnRyYWRhIGZpY2FtIG9jdWx0b3MuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEVNUFRZX1ZBTFVFO1xuICB9XG4gIGdldCBmaWx0ZXJPcGVyYXRvclRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuZmlsdGVyRHJhZnQuY29sdW1uKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmlsdGVycy50b29sdGlwcy5vcGVyYXRvckRlZmF1bHRgLFxuICAgICAgICBcIk9zIG9wZXJhZG9yZXMgbXVkYW0gY29uZm9ybWUgbyB0aXBvIGRvIGNhbXBvIHNlbGVjaW9uYWRvLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMucmVzb2x2ZUNvbHVtbk9wdGlvbih0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbik7XG4gICAgbGV0IG9wZXJhdG9yS2V5OiBzdHJpbmc7XG4gICAgaWYgKHRoaXMuaXNOdW1lcmljVHlwZShjb2x1bW4/LmRhdGFUeXBlKSkge1xuICAgICAgb3BlcmF0b3JLZXkgPSBcIm9wZXJhdG9yTnVtZXJpY1wiO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0RhdGVUeXBlKGNvbHVtbj8uZGF0YVR5cGUpKSB7XG4gICAgICBvcGVyYXRvcktleSA9IFwib3BlcmF0b3JEYXRlXCI7XG4gICAgfSBlbHNlIGlmICgoY29sdW1uPy5kYXRhVHlwZSA/PyBFTVBUWV9WQUxVRSkudG9Mb3dlckNhc2UoKSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIG9wZXJhdG9yS2V5ID0gXCJvcGVyYXRvckJvb2xlYW5cIjtcbiAgICB9IGVsc2Uge1xuICAgICAgb3BlcmF0b3JLZXkgPSBcIm9wZXJhdG9yVGV4dFwiO1xuICAgIH1cblxuICAgIGNvbnN0IGZhbGxiYWNrQnlLZXk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBvcGVyYXRvck51bWVyaWM6IFwiQ2FtcG9zIG51bWVyaWNvcyBwZXJtaXRlbSBjb21wYXJhY29lcywgZmFpeGFzIGUgbGlzdGFzLlwiLFxuICAgICAgb3BlcmF0b3JEYXRlOiBcIkNhbXBvcyBkZSBkYXRhIGUgaG9yYSBwZXJtaXRlbSBjb21wYXJhY29lcyBjcm9ub2xvZ2ljYXMgZSBpbnRlcnZhbG8uXCIsXG4gICAgICBvcGVyYXRvckJvb2xlYW46IFwiQ2FtcG9zIGJvb2xlYW5vcyBhY2VpdGFtIGNvbXBhcmFjYW8gZGlyZXRhIG91IHZlcmlmaWNhY2FvIGRlIHZhemlvLlwiLFxuICAgICAgb3BlcmF0b3JUZXh0OiBcIkNhbXBvcyB0ZXh0dWFpcyBhY2VpdGFtIGJ1c2NhIHBvciB0cmVjaG8sIHByZWZpeG8sIHN1Zml4byBlIGxpc3Rhcy5cIlxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMudG9vbHRpcHMuJHtvcGVyYXRvcktleX1gLFxuICAgICAgZmFsbGJhY2tCeUtleVtvcGVyYXRvcktleV1cbiAgICApO1xuICB9XG4gIGdldCBmaWx0ZXJWYWx1ZVR5cGVUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbikge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMudG9vbHRpcHMudmFsdWVUeXBlRGVmYXVsdGAsXG4gICAgICAgIFwiVXNlIHZhbG9yIGRpZ2l0YWRvIHBhcmEgY29tcGFyYXIgYWdvcmEgb3UgcGFyYW1ldHJvIHBhcmEgcGVkaXIgbyB2YWxvciBlbSB0ZW1wbyBkZSBleGVjdWNhby5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZmlsdGVyTmVlZHNWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMudG9vbHRpcHMudmFsdWVUeXBlTm90UmVxdWlyZWRgLFxuICAgICAgICBcIkNvbSBlc3RlIG9wZXJhZG9yIG8gZmlsdHJvIG5hbyBwcmVjaXNhIHJlY2ViZXIgdmFsb3IuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLnRvb2x0aXBzLnZhbHVlVHlwZWAsXG4gICAgICBcIlZhbG9yIGRpZ2l0YWRvIHNhbHZhIHVtYSBjb21wYXJhY2FvIGZpeGEuIFBhcmFtZXRybyBkZWl4YSBvIHZhbG9yIGFiZXJ0byBwYXJhIHByZWVuY2hpbWVudG8gZnV0dXJvLlwiXG4gICAgKTtcbiAgfVxuICBnZXQgZmlsdGVyQ29ubmVjdG9yVG9vbHRpcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmlsdGVycy50b29sdGlwcy5jb25uZWN0b3JgLFxuICAgICAgXCJDb25lY3RvciBkZWZpbmUgY29tbyBlc3RhIHJlZ3JhIHNlIGxpZ2EgYW8gZmlsdHJvIGFudGVyaW9yOiBBTkQgcmVzdHJpbmdlLCBPUiBhbXBsaWEuXCJcbiAgICApO1xuICB9XG4gIGdldCBmaWx0ZXJPcHRpb25hbFRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMudG9vbHRpcHMub3B0aW9uYWxgLFxuICAgICAgXCJNYXJxdWUgY29tbyBvcGNpb25hbCBxdWFuZG8gYSByZWdyYSBwdWRlciBzZXIgaWdub3JhZGEgc2VtIGludmFsaWRhciBhIGV4ZWN1Y2FvLlwiXG4gICAgKTtcbiAgfVxuICBnZXQgZmlsdGVyRG9tYWluRXhwcmVzc2lvblRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMudG9vbHRpcHMuZG9tYWluRXhwcmVzc2lvbmAsXG4gICAgICBcIkV4cHJlc3NhbyBkZSBkb21pbmlvIGVudHJhIGNvbW8gY29uZGljYW8gbWFudWFsIG5vIFdIRVJFLiBVc2UgcXVhbmRvIGEgcmVncmEgbmFvIGNvdWJlciBub3Mgb3BlcmFkb3JlcyBwYWRyYW8uXCJcbiAgICApO1xuICB9XG4gIGdldCBmaWx0ZXJWYWx1ZUlucHV0VG9vbHRpcCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmZpbHRlckRyYWZ0LnZhbHVlVHlwZSA9PT0gXCJwYXJhbWV0ZXJcIikge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMudG9vbHRpcHMucGFyYW1ldGVyTmFtZWAsXG4gICAgICAgIFwiSW5mb3JtZSBvIG5vbWUgdGVjbmljbyBxdWUgc2VyYSB1c2FkbyBwYXJhIHBlZGlyIG8gdmFsb3IgZW0gdGVtcG8gZGUgZXhlY3VjYW8uXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmlsdGVyRHJhZnQub3BlcmF0b3IgPT09IFwiSU5cIikge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMudG9vbHRpcHMudmFsdWVzTGlzdGAsXG4gICAgICAgIFwiU2VwYXJlIG9zIHZhbG9yZXMgcG9yIHZpcmd1bGEgcGFyYSBtb250YXIgYSBsaXN0YSBmaW5hbCBkbyBJTi5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWx0ZXJEcmFmdC5vcGVyYXRvciA9PT0gXCJCRVRXRUVOXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLnRvb2x0aXBzLmJldHdlZW5gLFxuICAgICAgICBcIlByZWVuY2hhIGluaWNpbyBlIGZpbSBwYXJhIG1vbnRhciBvIGludGVydmFsbyBjb21wbGV0by5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMudG9vbHRpcHMudmFsdWVgLFxuICAgICAgXCJPIHZhbG9yIGZpbmFsIHJlc3BlaXRhIG8gdGlwbyBkbyBjYW1wbyBlIG8gb3BlcmFkb3IgZXNjb2xoaWRvLlwiXG4gICAgKTtcbiAgfVxuICBnZXQgc2hvd0ZpbHRlclZhbHVlVGV4dGJveCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBpc1ZhbHVlTW9kZSA9IHRoaXMuZmlsdGVyRHJhZnQudmFsdWVUeXBlID09PSBcInZhbHVlXCIgJiYgdGhpcy5maWx0ZXJOZWVkc1ZhbHVlO1xuICAgIHJldHVybiAoXG4gICAgICBpc1ZhbHVlTW9kZSAmJlxuICAgICAgIXRoaXMuc2hvd0ZpbHRlclZhbHVlc1RleHRib3ggJiZcbiAgICAgICF0aGlzLnNob3dGaWx0ZXJCZXR3ZWVuSW5wdXRzICYmXG4gICAgICAhdGhpcy5zaG93RmlsdGVyQm9vbGVhbkNvbWJvYm94XG4gICAgKTtcbiAgfVxuICBnZXQgc2hvd0ZpbHRlclZhbHVlc1RleHRib3goKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZmlsdGVyRHJhZnQudmFsdWVUeXBlID09PSBcInZhbHVlXCIgJiZcbiAgICAgIHRoaXMuZmlsdGVyRHJhZnQub3BlcmF0b3IgPT09IFwiSU5cIlxuICAgICk7XG4gIH1cbiAgZ2V0IHNob3dGaWx0ZXJCZXR3ZWVuSW5wdXRzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlVHlwZSA9PT0gXCJ2YWx1ZVwiICYmXG4gICAgICB0aGlzLmZpbHRlckRyYWZ0Lm9wZXJhdG9yID09PSBcIkJFVFdFRU5cIlxuICAgICk7XG4gIH1cbiAgZ2V0IHNob3dGaWx0ZXJQYXJhbWV0ZXJUZXh0Ym94KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlVHlwZSA9PT0gXCJwYXJhbWV0ZXJcIjtcbiAgfVxuICBnZXQgc2hvd0ZpbHRlckJvb2xlYW5Db21ib2JveCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLnJlc29sdmVDb2x1bW5PcHRpb24odGhpcy5maWx0ZXJEcmFmdC5jb2x1bW4pO1xuICAgIHJldHVybiAoXG4gICAgICAhIWNvbHVtbiAmJiBjb2x1bW4uZGF0YVR5cGUgPT09IFwiYm9vbGVhblwiICYmIHRoaXMuc2hvd0ZpbHRlclZhbHVlVGV4dGJveFxuICAgICk7XG4gIH1cbiAgZ2V0IGZpbHRlclJldmlld0l0ZW1zKCk6IEZpbHRlclJldmlld0l0ZW1bXSB7IC8vIE5PU09OQVIgLSBjb21wbGV4aXR5OiBleHRyYWN0aW9uIHdvdWxkIHJpc2sgYmVoYXZpb3IgY2hhbmdlXG4gICAgY29uc3QgdmFsdWVUeXBlTGFiZWwgPSB0aGlzLmZpbHRlck1vZGFsTW9kZSA9PT0gRklMVEVSX01PREVfRE9NQUlOXG4gICAgICA/IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMuZG9tYWluTGFiZWxgLFxuICAgICAgICBcIkV4cHJlc3NhbyBkZSBkb21pbmlvXCJcbiAgICAgIClcbiAgICAgIDogdGhpcy5yZXNvbHZlT3B0aW9uTGFiZWwodGhpcy5maWx0ZXJEcmFmdC52YWx1ZVR5cGUsIHRoaXMudmFsdWVUeXBlT3B0aW9ucyk7XG5cbiAgICBjb25zdCBpdGVtczogRmlsdGVyUmV2aWV3SXRlbVtdID0gW1xuICAgICAge1xuICAgICAgICBpZDogXCJtb2RlXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpZWxkcy50eXBlYCxcbiAgICAgICAgICBcIlRpcG9cIlxuICAgICAgICApLFxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJNb2RhbE1vZGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTlxuICAgICAgICAgID8gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMuZG9tYWluTGFiZWxgLFxuICAgICAgICAgICAgXCJFeHByZXNzYW8gZGUgZG9taW5pb1wiXG4gICAgICAgICAgKVxuICAgICAgICAgIDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMubW9kZXMuY29uZGl0aW9uYCxcbiAgICAgICAgICAgIFwiRmlsdHJvXCJcbiAgICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IFwiY29ubmVjdG9yXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpZWxkcy5jb25uZWN0b3JgLFxuICAgICAgICAgIFwiQ29uZWN0b3JcIlxuICAgICAgICApLFxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJDb25uZWN0b3JEaXNhYmxlZFxuICAgICAgICAgID8gXCJXSEVSRVwiXG4gICAgICAgICAgOiB0aGlzLnJlc29sdmVPcHRpb25MYWJlbCh0aGlzLmZpbHRlckRyYWZ0LmNvbm5lY3RvciwgdGhpcy5maWx0ZXJDb25uZWN0b3JPcHRpb25zKSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGlmICh0aGlzLmZpbHRlck1vZGFsTW9kZSA9PT0gRklMVEVSX01PREVfRE9NQUlOKSB7XG4gICAgICBpdGVtcy5wdXNoKFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IFwiZXhwcmVzc2lvblwiLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmllbGRzLmRvbWFpbkV4cHJlc3Npb25gLFxuICAgICAgICAgICAgXCJFeHByZXNzYW8gZGUgZG9taW5pb1wiXG4gICAgICAgICAgKSxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJEcmFmdC5kb21haW5FeHByZXNzaW9uLnRyaW0oKSB8fCBcIi1cIixcbiAgICAgICAgICBlbXBoYXNpemU6IFwiY29kZVwiLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXMucHVzaChcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcImZpZWxkXCIsXG4gICAgICAgICAgbGFiZWw6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWVsZHMuZmllbGRgLFxuICAgICAgICAgICAgXCJDYW1wb1wiXG4gICAgICAgICAgKSxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJEcmFmdC5jb2x1bW4gPyB0aGlzLnJlc29sdmVDb2x1bW5QYXRoKHRoaXMuZmlsdGVyRHJhZnQuY29sdW1uKSA6IFwiLVwiLFxuICAgICAgICAgIGVtcGhhc2l6ZTogXCJwYXRoXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJvcGVyYXRvclwiLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmllbGRzLm9wZXJhdG9yYCxcbiAgICAgICAgICAgIFwiT3BlcmFkb3JcIlxuICAgICAgICAgICksXG4gICAgICAgICAgdmFsdWU6IHRoaXMucmVzb2x2ZUZpbHRlck9wZXJhdG9yTGFiZWwodGhpcy5maWx0ZXJEcmFmdC5vcGVyYXRvciksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJ2YWx1ZVR5cGVcIixcbiAgICAgICAgICBsYWJlbDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpZWxkcy52YWx1ZVR5cGVgLFxuICAgICAgICAgICAgXCJUaXBvIGRlIHZhbG9yXCJcbiAgICAgICAgICApLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlck5lZWRzVmFsdWUgPyB2YWx1ZVR5cGVMYWJlbCA6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5zdGF0ZXMubm9uZWAsXG4gICAgICAgICAgICBcIlNlbSB2YWxvclwiXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcInZhbHVlXCIsXG4gICAgICAgICAgbGFiZWw6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWVsZHMudmFsdWVgLFxuICAgICAgICAgICAgXCJWYWxvclwiXG4gICAgICAgICAgKSxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5yZXNvbHZlRmlsdGVyRHJhZnREaXNwbGF5VmFsdWUoKSB8fCBcIi1cIixcbiAgICAgICAgICBlbXBoYXNpemU6IHRoaXMuZmlsdGVyRHJhZnQudmFsdWVUeXBlID09PSBcInBhcmFtZXRlclwiID8gXCJjb2RlXCIgOiBcImRlZmF1bHRcIixcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaXRlbXMucHVzaCh7XG4gICAgICBpZDogXCJvcHRpb25hbFwiLFxuICAgICAgbGFiZWw6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LnN0YXRlcy5vcHRpb25hbGAsXG4gICAgICAgIFwiT3BjaW9uYWxcIlxuICAgICAgKSxcbiAgICAgIHZhbHVlOiB0aGlzLmZpbHRlckRyYWZ0Lm9wdGlvbmFsXG4gICAgICAgID8gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5zdGF0ZXMueWVzYCxcbiAgICAgICAgICBcIlNpbVwiXG4gICAgICAgIClcbiAgICAgICAgOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LnN0YXRlcy5ub2AsXG4gICAgICAgICAgXCJOYW9cIlxuICAgICAgICApLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG4gIGdldCBmaWx0ZXJSZXZpZXdQcmV2aWV3TGFiZWwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBwcmV2aWV3ID0gdGhpcy5yZXNvbHZlRmlsdGVyRHJhZnRTcWxQcmV2aWV3KCk7XG4gICAgcmV0dXJuIHByZXZpZXcgfHwgXCItXCI7XG4gIH1cbiAgZ2V0IHNvdXJjZU1vZGFsU2VsZWN0aW9uU3RlcEFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2VNb2RhbFN0ZXAgPT09IFwic2VsZWN0XCI7XG4gIH1cbiAgZ2V0IHNvdXJjZU1vZGFsQ29uZmlndXJhdGlvblN0ZXBBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlTW9kYWxTdGVwID09PSBcImNvbmZpZ3VyZVwiO1xuICB9XG4gIGdldCBzb3VyY2VNb2RhbENhblByb2NlZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlTW9kYWxEcmFmdHMubGVuZ3RoID4gMDtcbiAgfVxuICBnZXQgY2FuT3BlblNvdXJjZUNvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlSXRlbXMubGVuZ3RoID4gMDtcbiAgfVxuICBnZXQgc291cmNlSXRlbXMoKTogU291cmNlVmlld0l0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSB0aGlzLnJlc29sdmVUYWJsZURpc3BsYXlQYXJ0cyhpdGVtLnRhYmxlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBpdGVtLnRhYmxlLFxuICAgICAgICBkYkxhYmVsOiBwYXJ0cy5kYkxhYmVsLFxuICAgICAgICB0YWJsZUxhYmVsOiBwYXJ0cy50YWJsZUxhYmVsLFxuICAgICAgICBhbGlhczogaXRlbS5hbGlhcyxcbiAgICAgICAgaGFzQ3VzdG9tQWxpYXM6IHRoaXMuaGFzQ3VzdG9tQWxpYXMoaXRlbS50YWJsZSwgaXRlbS5hbGlhcyksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIGdldCBzb3VyY2VNb2RhbFRpbWVsaW5lSXRlbXMoKTogVGltZWxpbmVJdGVtW10ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGlkOiBcInNlbGVjdFwiLFxuICAgICAgICBsYWJlbDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5hY3Rpb25zLnNlbGVjdFRhYmxlc2AsXG4gICAgICAgICAgRkFMTEJBQ0tfU0VMRUNUX1RBQkxFU1xuICAgICAgICApLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5tb2RhbHMuc291cmNlcy5zdGVwcy5zZWxlY3Quc3VidGl0bGVgLFxuICAgICAgICAgIFwiRXNjb2xoYSBhcyB0YWJlbGFzIHF1ZSBkZXZlbSBhbGltZW50YXIgYSB2aXNhbyBhbnRlcyBkZSBjb25maWd1cmFyIG9zIGFsaWFzZXMuXCJcbiAgICAgICAgKSxcbiAgICAgICAgaW5kaWNhdG9yTGFiZWw6IFwiMVwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IFwiY29uZmlndXJlXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmFjdGlvbnMuY29uZmlndXJlQWxpYXNlc2AsXG4gICAgICAgICAgXCJDb25maWd1cmFyIGFsaWFzZXNcIlxuICAgICAgICApLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5tb2RhbHMuc291cmNlcy5zdGVwcy5jb25maWd1cmUuc3VidGl0bGVgLFxuICAgICAgICAgIFwiUmV2aXNlIG9zIGFsaWFzZXMgc3VnZXJpZG9zIGUgYWp1c3RlIG9zIG5vbWVzIGZpbmFpcyBkYXMgdGFiZWxhcyBzZWxlY2lvbmFkYXMuXCJcbiAgICAgICAgKSxcbiAgICAgICAgaW5kaWNhdG9yTGFiZWw6IFwiMlwiLFxuICAgICAgICBkaXNhYmxlZDogIXRoaXMuc291cmNlTW9kYWxDYW5Qcm9jZWVkLFxuICAgICAgfSxcbiAgICBdO1xuICB9XG4gIGdldCBzb3VyY2VNb2RhbFRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5tb2RhbHMuc291cmNlcy50aXRsZWAsXG4gICAgICBGQUxMQkFDS19TRUxFQ1RfVEFCTEVTXG4gICAgKTtcbiAgfVxuICBnZXQgc291cmNlTW9kYWxUaW1lbGluZUFyaWFMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uYWNjZXNzaWJpbGl0eS5zb3VyY2VNb2RhbFRpbWVsaW5lYCxcbiAgICAgIFwiRXRhcGFzIGRhIGNvbmZpZ3VyYWNhbyBkYXMgdGFiZWxhc1wiXG4gICAgKTtcbiAgfVxuICBnZXQgc291cmNlTW9kYWxQaWNrbGlzdEl0ZW1zKCk6IFRhYmxlUGlja2xpc3RJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkVGFibGVQaWNrbGlzdEl0ZW1zKHRoaXMuY29uZmlnLmF2YWlsYWJsZURhdGEudGFibGVzID8/IFtdKTtcbiAgfVxuICBnZXQgc291cmNlTW9kYWxTZWxlY3RlZFBpY2tsaXN0SWRzKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2VNb2RhbERyYWZ0c1xuICAgICAgLm1hcCgoaXRlbSkgPT4gdGhpcy5yZXNvbHZlVGFibGVQaWNrbGlzdElkKGl0ZW0udGFibGUpKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKGl0ZW0pOiBpdGVtIGlzIG51bWJlciA9PiB0eXBlb2YgaXRlbSA9PT0gXCJudW1iZXJcIiAmJiBpdGVtID4gMFxuICAgICAgKTtcbiAgfVxuICBnZXQgc291cmNlTW9kYWxDb25maWd1cmVkSXRlbXMoKTogU291cmNlQ29uZmlndXJlZEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlTW9kYWxEcmFmdHMubWFwKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHRoaXMucmVzb2x2ZVRhYmxlRGlzcGxheVBhcnRzKGl0ZW0udGFibGUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGl0ZW0udGFibGUsXG4gICAgICAgIHRhYmxlOiBpdGVtLnRhYmxlLFxuICAgICAgICBkYkxhYmVsOiBwYXJ0cy5kYkxhYmVsLFxuICAgICAgICB0YWJsZUxhYmVsOiBwYXJ0cy50YWJsZUxhYmVsLFxuICAgICAgICBhbGlhczogaXRlbS5hbGlhcyxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgZ2V0IGpvaW5JdGVtcygpOiBKb2luVmlld0l0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5qb2lucy5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnJlc29sdmVDb2x1bW5QYXJ0cyhpdGVtLnNvdXJjZUNvbHVtbik7XG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnJlc29sdmVDb2x1bW5QYXJ0cyhpdGVtLnRhcmdldENvbHVtbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogYCR7aXRlbS5zb3VyY2VDb2x1bW59LSR7aXRlbS50YXJnZXRDb2x1bW59LSR7aW5kZXh9YCxcbiAgICAgICAgc291cmNlVGFibGU6IHNvdXJjZS50YWJsZUxhYmVsLFxuICAgICAgICBzb3VyY2VGaWVsZDogc291cmNlLmZpZWxkTGFiZWwsXG4gICAgICAgIG9wZXJhdG9yOiB0aGlzLnJlc29sdmVKb2luT3BlcmF0b3JMYWJlbChpdGVtLm9wZXJhdG9yKSxcbiAgICAgICAgdGFyZ2V0VGFibGU6IHRhcmdldC50YWJsZUxhYmVsLFxuICAgICAgICB0YXJnZXRGaWVsZDogdGFyZ2V0LmZpZWxkTGFiZWwsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIGdldCBncm91cEJ5SXRlbXMoKTogU2ltcGxlVmlld0l0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5Lm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgIGlkOiBpdGVtLFxuICAgICAgLi4udGhpcy5yZXNvbHZlQ29sdW1uUGFydHMoaXRlbSksXG4gICAgfSkpO1xuICB9XG4gIGdldCBmaWVsZEl0ZW1zTGVnYWN5KCk6IHVua25vd25bXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3JkZXJlZEZpZWxkRW50cmllcygpLm1hcCgoZW50cnksIGluZGV4KSA9PiAoe1xuICAgICAgaWQ6IGVudHJ5LmNvbHVtbixcbiAgICAgIGxhYmVsOiBgJHtpbmRleCArIDF9wrAgJHt0aGlzLnJlc29sdmVDb2x1bW5QYXRoKGVudHJ5LmNvbHVtbil9YCxcbiAgICAgIG9yZGVyOiBpbmRleCxcbiAgICB9KSk7XG4gIH1cbiAgZ2V0IGZpZWxkSXRlbXMoKTogRmllbGRWaWV3SXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPcmRlcmVkRmllbGRFbnRyaWVzKCkubWFwKChlbnRyeSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGVudHJ5LmZ1bmN0aW9uPy5mdW5jdGlvbk5hbWU/LnRyaW0oKSA/PyBFTVBUWV9WQUxVRTtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uQWxpYXMgPSBlbnRyeS5mdW5jdGlvbj8uYWxpYXM/LnRyaW0oKSA/PyBFTVBUWV9WQUxVRTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGAke2VudHJ5LmNvbHVtbn0tJHtpbmRleH1gLFxuICAgICAgICBzb3VyY2VJbmRleDogZW50cnkuc291cmNlSW5kZXgsXG4gICAgICAgIGNvbHVtbjogZW50cnkuY29sdW1uLFxuICAgICAgICBvcmRlckxhYmVsOiBgJHtpbmRleCArIDF9wrBgLFxuICAgICAgICAuLi50aGlzLnJlc29sdmVDb2x1bW5QYXJ0cyhlbnRyeS5jb2x1bW4pLFxuICAgICAgICBhbGlhczogZW50cnkuYWxpYXM/LnRyaW0oKSA/PyBFTVBUWV9WQUxVRSxcbiAgICAgICAgd2lkdGg6IGVudHJ5LndpZHRoPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICAgIGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgZnVuY3Rpb25MYWJlbDogZnVuY3Rpb25OYW1lID8gdGhpcy5yZXNvbHZlRnVuY3Rpb25MYWJlbChmdW5jdGlvbk5hbWUpIDogRU1QVFlfVkFMVUUsXG4gICAgICAgIGZ1bmN0aW9uQWxpYXMsXG4gICAgICAgIGhhc0N1c3RvbUNvbmZpZzpcbiAgICAgICAgICAhIWVudHJ5LmFsaWFzPy50cmltKCkgfHwgISFlbnRyeS53aWR0aD8udHJpbSgpIHx8ICEhZnVuY3Rpb25OYW1lIHx8ICEhZnVuY3Rpb25BbGlhcyxcbiAgICAgICAgb3JkZXI6IGluZGV4LFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICBnZXQgZmllbGRNb2RhbFNlbGVjdGlvblJvd3MoKTogU2VsZWN0aW9uUm93W10ge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkQ29sdW1uU2VsZWN0aW9uUm93cyhcbiAgICAgIHRoaXMuZmllbGRTZWxlY3RhYmxlQ29sdW1ucyxcbiAgICAgIHRoaXMuZmllbGRNb2RhbERyYWZ0cy5tYXAoKGl0ZW0pID0+IGl0ZW0uY29sdW1uKSxcbiAgICAgIHRoaXMuZmllbGRNb2RhbFNlYXJjaCxcbiAgICAgIHRydWVcbiAgICApO1xuICB9XG4gIGdldCBmaWVsZE1vZGFsQ29uZmlndXJlZEl0ZW1zKCk6IEZpZWxkTW9kYWxDb25maWd1cmVkSXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZE1vZGFsRHJhZnRzLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHBhcnRzID0gdGhpcy5yZXNvbHZlQ29sdW1uUGFydHMoaXRlbS5jb2x1bW4pO1xuICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID0gaXRlbS5mdW5jdGlvbj8uZnVuY3Rpb25OYW1lPy50cmltKCkgPz8gRU1QVFlfVkFMVUU7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgaWQ6IGAke2l0ZW0uY29sdW1ufS0ke2luZGV4fWAsXG4gICAgICAgIGNvbHVtbjogaXRlbS5jb2x1bW4sXG4gICAgICAgIHRhYmxlTGFiZWw6IHBhcnRzLnRhYmxlTGFiZWwsXG4gICAgICAgIGZpZWxkTGFiZWw6IHBhcnRzLmZpZWxkTGFiZWwsXG4gICAgICAgIGFsaWFzOiBpdGVtLmFsaWFzPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICAgIHdpZHRoOiBpdGVtLndpZHRoPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICAgIGZ1bmN0aW9uTGFiZWw6IGZ1bmN0aW9uTmFtZVxuICAgICAgICAgID8gdGhpcy5yZXNvbHZlRnVuY3Rpb25MYWJlbChmdW5jdGlvbk5hbWUpXG4gICAgICAgICAgOiBFTVBUWV9WQUxVRSxcbiAgICAgICAgZnVuY3Rpb25BbGlhczogaXRlbS5mdW5jdGlvbj8uYWxpYXM/LnRyaW0oKSA/PyBFTVBUWV9WQUxVRSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgZ2V0IGZpZWxkTW9kYWxIYXNTZWxlY3RhYmxlQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZFNlbGVjdGFibGVDb2x1bW5zLnNvbWUoXG4gICAgICAoaXRlbSkgPT4gIXRoaXMuZmllbGRNb2RhbERyYWZ0cy5zb21lKChkcmFmdCkgPT4gZHJhZnQuY29sdW1uID09PSBpdGVtLnZhbHVlKVxuICAgICk7XG4gIH1cbiAgZ2V0IGZpZWxkTW9kYWxDYW5TZWxlY3RBbGwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRNb2RhbFNlbGVjdGlvblJvd3Muc29tZSgoaXRlbSkgPT4gIWl0ZW0uc2VsZWN0ZWQpO1xuICB9XG4gIGdldCBmaWVsZE1vZGFsUGlja2xpc3RJdGVtcygpOiBDb2x1bW5QaWNrbGlzdEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRDb2x1bW5QaWNrbGlzdEl0ZW1zKHRoaXMuZmllbGRTZWxlY3RhYmxlQ29sdW1ucyk7XG4gIH1cbiAgZ2V0IGZpZWxkTW9kYWxTZWxlY3RlZFBpY2tsaXN0SWRzKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZE1vZGFsRHJhZnRzXG4gICAgICAubWFwKChpdGVtKSA9PiB0aGlzLnJlc29sdmVDb2x1bW5QaWNrbGlzdElkKGl0ZW0uY29sdW1uKSlcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChpdGVtKTogaXRlbSBpcyBudW1iZXIgPT4gdHlwZW9mIGl0ZW0gPT09IFwibnVtYmVyXCIgJiYgaXRlbSA+IDBcbiAgICAgICk7XG4gIH1cbiAgZ2V0IGZpZWxkTW9kYWxTZWxlY3Rpb25TdGVwQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkTW9kYWxTdGVwID09PSBcInNlbGVjdFwiO1xuICB9XG4gIGdldCBmaWVsZE1vZGFsQ29uZmlndXJhdGlvblN0ZXBBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRNb2RhbFN0ZXAgPT09IFwiY29uZmlndXJlXCI7XG4gIH1cbiAgZ2V0IGZpZWxkTW9kYWxUaW1lbGluZUFyaWFMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uYWNjZXNzaWJpbGl0eS5maWVsZE1vZGFsVGltZWxpbmVgLFxuICAgICAgXCJFdGFwYXMgZGEgY29uZmlndXJhY2FvIGRvIGNhbXBvXCJcbiAgICApO1xuICB9XG4gIGdldCBmaWVsZE1vZGFsVGltZWxpbmVJdGVtcygpOiBUaW1lbGluZUl0ZW1bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgaWQ6IFwic2VsZWN0XCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmFjdGlvbnMuc2VsZWN0Q29sdW1uc2AsXG4gICAgICAgICAgXCJTZWxlY2lvbmFyIGNvbHVuYXNcIlxuICAgICAgICApLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5tb2RhbHMuZmllbGRzLnN1YnRpdGxlYCxcbiAgICAgICAgICBcIkVzY29saGEgdW1hIG91IG1haXMgY29sdW5hcyBwYXJhIGV4cG9yIG5vIHJlc3VsdGFkby5cIlxuICAgICAgICApLFxuICAgICAgICBpbmRpY2F0b3JMYWJlbDogXCIxXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogXCJjb25maWd1cmVcIixcbiAgICAgICAgbGFiZWw6IHRoaXMuZmllbGRNb2RhbFRpdGxlLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5tb2RhbHMuZmllbGQuc3VidGl0bGVgLFxuICAgICAgICAgIFwiQWp1c3RlIGFsaWFzLCBsYXJndXJhIGUgZnVuY2FvIGFudGVzIGRlIHNhbHZhciBvIGNhbXBvLlwiXG4gICAgICAgICksXG4gICAgICAgIGluZGljYXRvckxhYmVsOiBcIjJcIixcbiAgICAgICAgZGlzYWJsZWQ6ICF0aGlzLmZpZWxkTW9kYWxEcmFmdHMubGVuZ3RoLFxuICAgICAgfSxcbiAgICBdO1xuICB9XG4gIGdldCBmaWx0ZXJNb2RhbFRpbWVsaW5lQXJpYUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5hY2Nlc3NpYmlsaXR5LmZpbHRlck1vZGFsVGltZWxpbmVgLFxuICAgICAgXCJFdGFwYXMgZGEgY29uZmlndXJhY2FvIGRvIGZpbHRyb1wiXG4gICAgKTtcbiAgfVxuICBnZXQgZmlsdGVyTW9kYWxUaW1lbGluZUl0ZW1zKCk6IFRpbWVsaW5lSXRlbVtdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBpZDogXCJzZWxlY3RcIixcbiAgICAgICAgbGFiZWw6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubW9kYWxzLmZpbHRlci5zdGVwcy5zZWxlY3QudGl0bGVgLFxuICAgICAgICAgIFwiU2VsZWNpb25hciBiYXNlXCJcbiAgICAgICAgKSxcbiAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubW9kYWxzLmZpbHRlci5zdGVwcy5zZWxlY3Quc3VidGl0bGVgLFxuICAgICAgICAgIFwiRXNjb2xoYSBvIHRpcG8gZGUgZmlsdHJvIGUgZGVmaW5hIG8gY2FtcG8gaW5pY2lhbCBhbnRlcyBkZSBjb25maWd1cmFyLlwiXG4gICAgICAgICksXG4gICAgICAgIGluZGljYXRvckxhYmVsOiBcIjFcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiBcImNvbmZpZ3VyZVwiLFxuICAgICAgICBsYWJlbDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5tb2RhbHMuZmlsdGVyLnN0ZXBzLmNvbmZpZ3VyZS50aXRsZWAsXG4gICAgICAgICAgXCJDb25maWd1cmFyIGZpbHRyb1wiXG4gICAgICAgICksXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9Lm1vZGFscy5maWx0ZXIuc3RlcHMuY29uZmlndXJlLnN1YnRpdGxlYCxcbiAgICAgICAgICBcIkRlZmluYSBvcGVyYWRvciwgdmFsb3IgZSBjb21wb3J0YW1lbnRvIGZpbmFsIGRvIGZpbHRyby5cIlxuICAgICAgICApLFxuICAgICAgICBpbmRpY2F0b3JMYWJlbDogXCIyXCIsXG4gICAgICAgIGRpc2FibGVkOiAhdGhpcy5maWx0ZXJNb2RhbENhblByb2NlZWQsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogXCJyZXZpZXdcIixcbiAgICAgICAgbGFiZWw6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubW9kYWxzLmZpbHRlci5zdGVwcy5yZXZpZXcudGl0bGVgLFxuICAgICAgICAgIFwiUmV2aXNhciByZWdyYVwiXG4gICAgICAgICksXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9Lm1vZGFscy5maWx0ZXIuc3RlcHMucmV2aWV3LnN1YnRpdGxlYCxcbiAgICAgICAgICBcIkNvbmZpcm1lIG8gcmVzdW1vIGZpbmFsIGRhIHJlZ3JhIGFudGVzIGRlIHNhbHZhci5cIlxuICAgICAgICApLFxuICAgICAgICBpbmRpY2F0b3JMYWJlbDogXCIzXCIsXG4gICAgICAgIGRpc2FibGVkOiAhdGhpcy5maWx0ZXJNb2RhbENhblJldmlldyxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuICBnZXQgZmlsdGVyTW9kYWxDb25maWd1cmVBY3Rpb25MYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uYWN0aW9ucy5uZXh0U3RlcGAsXG4gICAgICBcIlByb3hpbWEgZXRhcGFcIlxuICAgICk7XG4gIH1cbiAgZ2V0IGZpbHRlck1vZGFsUmV2aWV3QWN0aW9uTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmFjdGlvbnMucmV2aWV3UnVsZWAsXG4gICAgICBcIlJldmlzYXIgcmVncmFcIlxuICAgICk7XG4gIH1cbiAgZ2V0IGZpbHRlck1vZGFsU2VsZWN0aW9uSGVscGVyVGV4dCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmZpbHRlck1vZGFsTW9kZSA9PT0gRklMVEVSX01PREVfRE9NQUlOKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubW9kYWxzLmZpbHRlci5kb21haW5TZWxlY3Rpb25IaW50YCxcbiAgICAgICAgXCJBIGV4cHJlc3NhbyBkZSBkb21pbmlvIHNlcmEgY29uZmlndXJhZGEgbmEgcHJveGltYSBldGFwYS5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9Lm1vZGFscy5maWx0ZXIuY29uZGl0aW9uU2VsZWN0aW9uSGludGAsXG4gICAgICBcIlNlbGVjaW9uZSB1bSBjYW1wbyBwYXJhIGxpYmVyYXIgYSBjb25maWd1cmFjYW8gZGV0YWxoYWRhIGRvIGZpbHRyby5cIlxuICAgICk7XG4gIH1cbiAgZ2V0IGZpZWxkTW9kYWxGdW5jdGlvbk9wdGlvbnMoKTogRHluYW1pY1ZpZXdCdWlsZGVyT3B0aW9uW10ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHRleHQ6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uc3RhdGVzLm5vbmVgLFxuICAgICAgICAgIFwiU2VtIGZ1bmNhb1wiXG4gICAgICAgICksXG4gICAgICAgIHZhbHVlOiBFTVBUWV9WQUxVRSxcbiAgICAgIH0sXG4gICAgICAuLi50aGlzLmZ1bmN0aW9uT3B0aW9ucyxcbiAgICBdO1xuICB9XG4gIGdldCBzb3J0SXRlbXMoKTogU29ydFZpZXdJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc29ydGluZy5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoe1xuICAgICAgaWQ6IGAke2l0ZW0uY29sdW1ufS0ke2l0ZW0uZnVuY3Rpb25OYW1lID8/IEVNUFRZX1ZBTFVFfS0ke2l0ZW0uZGlyZWN0aW9ufS0ke2luZGV4fWAsXG4gICAgICAuLi50aGlzLnJlc29sdmVDb2x1bW5QYXJ0cyhpdGVtLmNvbHVtbiksXG4gICAgICBmdW5jdGlvbk5hbWU6IGl0ZW0uZnVuY3Rpb25OYW1lPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICBmdW5jdGlvbkxhYmVsOiBpdGVtLmZ1bmN0aW9uTmFtZVxuICAgICAgICA/IHRoaXMucmVzb2x2ZUZ1bmN0aW9uTGFiZWwoaXRlbS5mdW5jdGlvbk5hbWUpXG4gICAgICAgIDogRU1QVFlfVkFMVUUsXG4gICAgICBkaXJlY3Rpb246IHRoaXMucmVzb2x2ZU9wdGlvbkxhYmVsKFxuICAgICAgICBpdGVtLmRpcmVjdGlvbixcbiAgICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uT3B0aW9uc1xuICAgICAgKSxcbiAgICB9KSk7XG4gIH1cbiAgZ2V0IGZpbHRlckl0ZW1zTGVnYWN5KCk6IHVua25vd25bXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5maWx0ZXJzLm1hcCgoaXRlbSwgaW5kZXgpID0+ICh7XG4gICAgICBpZDogYCR7aXRlbS52YWx1ZVR5cGV9LSR7aXRlbS5jb2x1bW59LSR7aW5kZXh9YCxcbiAgICAgIHRpdGxlOlxuICAgICAgICBpdGVtLnZhbHVlVHlwZSA9PT0gRklMVEVSX01PREVfRE9NQUlOXG4gICAgICAgICAgPyB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmlsdGVycy5kb21haW5MYWJlbGAsXG4gICAgICAgICAgICBcIkV4cHJlc3NhbyBkZSBkb21pbmlvXCJcbiAgICAgICAgICApXG4gICAgICAgICAgOiBgJHt0aGlzLnJlc29sdmVDb2x1bW5MYWJlbChcbiAgICAgICAgICAgIGl0ZW0uY29sdW1uXG4gICAgICAgICAgKX0gwrcgJHt0aGlzLnJlc29sdmVGaWx0ZXJPcGVyYXRvckxhYmVsKGl0ZW0ub3BlcmF0b3IpfWAsXG4gICAgICBzdWJ0aXRsZTogdGhpcy5yZXNvbHZlRmlsdGVyRGlzcGxheVZhbHVlKGl0ZW0pLFxuICAgICAgb3B0aW9uYWw6IGl0ZW0ub3B0aW9uYWwsXG4gICAgfSkpO1xuICB9XG4gIGdldCBmaWx0ZXJJdGVtcygpOiBGaWx0ZXJWaWV3SXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpbHRlcnMubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPVxuICAgICAgICBpdGVtLnZhbHVlVHlwZSA9PT0gRklMVEVSX01PREVfRE9NQUlOXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICBkYkxhYmVsOiBFTVBUWV9WQUxVRSxcbiAgICAgICAgICAgIHRhYmxlTGFiZWw6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMuZG9tYWluTGFiZWxgLFxuICAgICAgICAgICAgICBcIkV4cHJlc3NhbyBkZSBkb21pbmlvXCJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBmaWVsZExhYmVsOiBFTVBUWV9WQUxVRSxcbiAgICAgICAgICB9XG4gICAgICAgICAgOiB0aGlzLnJlc29sdmVDb2x1bW5QYXJ0cyhpdGVtLmNvbHVtbik7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBgJHtpdGVtLnZhbHVlVHlwZX0tJHtpdGVtLmNvbHVtbn0tJHtpbmRleH1gLFxuICAgICAgICAuLi5wYXJ0cyxcbiAgICAgICAgb3BlcmF0b3JMYWJlbDpcbiAgICAgICAgICBpdGVtLnZhbHVlVHlwZSA9PT0gRklMVEVSX01PREVfRE9NQUlOXG4gICAgICAgICAgICA/IEVNUFRZX1ZBTFVFXG4gICAgICAgICAgICA6IHRoaXMucmVzb2x2ZUZpbHRlck9wZXJhdG9yTGFiZWwoaXRlbS5vcGVyYXRvciksXG4gICAgICAgIHN1YnRpdGxlOiB0aGlzLnJlc29sdmVGaWx0ZXJEaXNwbGF5VmFsdWUoaXRlbSksXG4gICAgICAgIG9wdGlvbmFsOiBpdGVtLm9wdGlvbmFsLFxuICAgICAgICBpc0RvbWFpbjogaXRlbS52YWx1ZVR5cGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTixcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgZ2V0IHNlbGVjdGlvbk1vZGFsVGl0bGUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RhbE1vZGUgPT09IFwidGFibGVzXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5tb2RhbHMuc291cmNlcy50aXRsZWAsXG4gICAgICAgIEZBTExCQUNLX1NFTEVDVF9UQUJMRVNcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGFsTW9kZSA9PT0gXCJmaWVsZHNcIikge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9Lm1vZGFscy5maWVsZHMudGl0bGVgLFxuICAgICAgICBcIlNlbGVjaW9uYXIgY2FtcG9zXCJcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubW9kYWxzLmdyb3VwQnkudGl0bGVgLFxuICAgICAgXCJTZWxlY2lvbmFyIEdyb3VwIEJ5XCJcbiAgICApO1xuICB9XG4gIGdldCBtb2RhbFNlYXJjaExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWVsZHMuc2VhcmNoYCxcbiAgICAgIFwiQnVzY2FyXCJcbiAgICApO1xuICB9XG4gIGdldCBtb2RhbFNlYXJjaFBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5tb2RhbHMuc2VhcmNoUGxhY2Vob2xkZXJgLFxuICAgICAgXCJCdXNjYXJcIlxuICAgICk7XG4gIH1cbiAgZ2V0IG1vZGFsTmFtZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWVsZHMubmFtZWAsXG4gICAgICBcIk5vbWVcIlxuICAgICk7XG4gIH1cbiAgZ2V0IG1vZGFsVHlwZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWVsZHMudHlwZWAsXG4gICAgICBcIlRpcG9cIlxuICAgICk7XG4gIH1cbiAgZ2V0IG1vZGFsU2VsZWN0TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmFjdGlvbnMuc2VsZWN0YCxcbiAgICAgIFwiU2VsZWNpb25hclwiXG4gICAgKTtcbiAgfVxuICBnZXQgZmlsdGVyTW9kYWxUaXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uY2FyZHMuZmlsdGVycy50aXRsZWAsXG4gICAgICBcIkZpbHRyb3NcIlxuICAgICk7XG4gIH1cbiAgZ2V0IHNvcnRNb2RhbFRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5jYXJkcy5zb3J0aW5nLnRpdGxlYCxcbiAgICAgIFwiT3JkZW5hY2FvXCJcbiAgICApO1xuICB9XG4gIGdldCBmaWVsZE1vZGFsVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9Lm1vZGFscy5maWVsZC50aXRsZWAsXG4gICAgICBcIkNvbmZpZ3VyYXIgY2FtcG9cIlxuICAgICk7XG4gIH1cbiAgZ2V0IHNlbGVjdGlvbk1vZGFsUm93cygpOiBTZWxlY3Rpb25Sb3dbXSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kYWxNb2RlID09PSBcInRhYmxlc1wiKSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsZFRhYmxlU2VsZWN0aW9uUm93cyhcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RhbElkcyxcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RhbFNlYXJjaFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kYWxNb2RlID09PSBcImZpZWxkc1wiKSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsZENvbHVtblNlbGVjdGlvblJvd3MoXG4gICAgICAgIHRoaXMuZmllbGRTZWxlY3RhYmxlQ29sdW1ucyxcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RhbElkcyxcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RhbFNlYXJjaFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRDb2x1bW5TZWxlY3Rpb25Sb3dzKFxuICAgICAgdGhpcy5ncm91cEJ5U2VsZWN0YWJsZUNvbHVtbnMsXG4gICAgICB0aGlzLnNlbGVjdGlvbk1vZGFsSWRzLFxuICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RhbFNlYXJjaFxuICAgICk7XG4gIH1cbiAgZ2V0IHNlbGVjdGlvbk1vZGFsUGlja2xpc3RJdGVtcygpOiBDb2x1bW5QaWNrbGlzdEl0ZW1bXSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kYWxNb2RlID09PSBcImZpZWxkc1wiKSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsZENvbHVtblBpY2tsaXN0SXRlbXModGhpcy5maWVsZFNlbGVjdGFibGVDb2x1bW5zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5idWlsZENvbHVtblBpY2tsaXN0SXRlbXModGhpcy5ncm91cEJ5U2VsZWN0YWJsZUNvbHVtbnMpO1xuICB9XG4gIGdldCBzZWxlY3Rpb25Nb2RhbFNlbGVjdGVkUGlja2xpc3RJZHMoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbk1vZGFsSWRzXG4gICAgICAubWFwKChpdGVtKSA9PiB0aGlzLnJlc29sdmVDb2x1bW5QaWNrbGlzdElkKGl0ZW0pKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKGl0ZW0pOiBpdGVtIGlzIG51bWJlciA9PiB0eXBlb2YgaXRlbSA9PT0gXCJudW1iZXJcIiAmJiBpdGVtID4gMFxuICAgICAgKTtcbiAgfVxuICBnZXQgam9pblNvdXJjZVJvd3MoKTogU2VsZWN0aW9uUm93W10ge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkQ29sdW1uU2VsZWN0aW9uUm93cyhcbiAgICAgIHRoaXMuYXZhaWxhYmxlQ29sdW1ucyxcbiAgICAgIHRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtbiA/IFt0aGlzLmpvaW5EcmFmdC5zb3VyY2VDb2x1bW5dIDogW10sXG4gICAgICB0aGlzLmpvaW5Tb3VyY2VTZWFyY2gsXG4gICAgICBmYWxzZVxuICAgICk7XG4gIH1cbiAgZ2V0IGpvaW5Tb3VyY2VQaWNrbGlzdEl0ZW1zKCk6IENvbHVtblBpY2tsaXN0SXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZENvbHVtblBpY2tsaXN0SXRlbXModGhpcy5hdmFpbGFibGVDb2x1bW5zKTtcbiAgfVxuICBnZXQgam9pblNvdXJjZVNlbGVjdGVkUGlja2xpc3RJZHMoKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHNlbGVjdGVkSWQgPSB0aGlzLnJlc29sdmVDb2x1bW5QaWNrbGlzdElkKHRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtbik7XG4gICAgcmV0dXJuIHR5cGVvZiBzZWxlY3RlZElkID09PSBcIm51bWJlclwiICYmIHNlbGVjdGVkSWQgPiAwXG4gICAgICA/IFtzZWxlY3RlZElkXVxuICAgICAgOiBbXTtcbiAgfVxuICBnZXQgam9pblRhcmdldFJvd3MoKTogU2VsZWN0aW9uUm93W10ge1xuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMucmVzb2x2ZUNvbHVtbk9wdGlvbih0aGlzLmpvaW5EcmFmdC5zb3VyY2VDb2x1bW4pO1xuICAgIGNvbnN0IGl0ZW1zID0gc291cmNlXG4gICAgICA/IHRoaXMuYXZhaWxhYmxlQ29sdW1ucy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udGFibGUgIT09IHNvdXJjZS50YWJsZSlcbiAgICAgIDogdGhpcy5hdmFpbGFibGVDb2x1bW5zO1xuICAgIHJldHVybiB0aGlzLmJ1aWxkQ29sdW1uU2VsZWN0aW9uUm93cyhcbiAgICAgIGl0ZW1zLFxuICAgICAgdGhpcy5qb2luRHJhZnQudGFyZ2V0Q29sdW1uID8gW3RoaXMuam9pbkRyYWZ0LnRhcmdldENvbHVtbl0gOiBbXSxcbiAgICAgIHRoaXMuam9pblRhcmdldFNlYXJjaCxcbiAgICAgIGZhbHNlXG4gICAgKTtcbiAgfVxuICBnZXQgam9pblRhcmdldFNlbGVjdGFibGVDb2x1bW5zKCk6IER5bmFtaWNWaWV3QnVpbGRlckNvbHVtbk9wdGlvbltdIHtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnJlc29sdmVDb2x1bW5PcHRpb24odGhpcy5qb2luRHJhZnQuc291cmNlQ29sdW1uKTtcbiAgICByZXR1cm4gc291cmNlXG4gICAgICA/IHRoaXMuYXZhaWxhYmxlQ29sdW1ucy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udGFibGUgIT09IHNvdXJjZS50YWJsZSlcbiAgICAgIDogdGhpcy5hdmFpbGFibGVDb2x1bW5zO1xuICB9XG4gIGdldCBqb2luVGFyZ2V0UGlja2xpc3RJdGVtcygpOiBDb2x1bW5QaWNrbGlzdEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRDb2x1bW5QaWNrbGlzdEl0ZW1zKHRoaXMuam9pblRhcmdldFNlbGVjdGFibGVDb2x1bW5zKTtcbiAgfVxuICBnZXQgam9pblRhcmdldFNlbGVjdGVkUGlja2xpc3RJZHMoKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHNlbGVjdGVkSWQgPSB0aGlzLnJlc29sdmVDb2x1bW5QaWNrbGlzdElkKHRoaXMuam9pbkRyYWZ0LnRhcmdldENvbHVtbik7XG4gICAgcmV0dXJuIHR5cGVvZiBzZWxlY3RlZElkID09PSBcIm51bWJlclwiICYmIHNlbGVjdGVkSWQgPiAwXG4gICAgICA/IFtzZWxlY3RlZElkXVxuICAgICAgOiBbXTtcbiAgfVxuICBnZXQgc29ydENvbHVtblJvd3MoKTogU2VsZWN0aW9uUm93W10ge1xuICAgIHJldHVybiB0aGlzLnNvcnRTZWxlY3RhYmxlSXRlbXNcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICAgIHRoaXMubWF0Y2hlc1NlYXJjaChcbiAgICAgICAgICBbaXRlbS50YWJsZUxhYmVsLCBpdGVtLmZpZWxkTGFiZWwsIGl0ZW0ubWV0YV0sXG4gICAgICAgICAgdGhpcy5zb3J0U2VhcmNoXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICBuYW1lOiBpdGVtLmZpZWxkTGFiZWwsXG4gICAgICAgIG1ldGE6IGl0ZW0ubWV0YSxcbiAgICAgICAgc2VsZWN0ZWQ6XG4gICAgICAgICAgdGhpcy5zb3J0RHJhZnQuY29sdW1uID09PSBpdGVtLmNvbHVtbiAmJlxuICAgICAgICAgICh0aGlzLnNvcnREcmFmdC5mdW5jdGlvbk5hbWUgfHwgRU1QVFlfVkFMVUUpID09PSBpdGVtLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICB0YWJsZUxhYmVsOiBpdGVtLnRhYmxlTGFiZWwsXG4gICAgICAgIHBhdGhUeXBlOiBcImNvbHVtblwiIGFzIGNvbnN0LFxuICAgICAgfSkpO1xuICB9XG4gIGdldCBzb3J0UGlja2xpc3RJdGVtcygpOiBTb3J0UGlja2xpc3RJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLnNvcnRTZWxlY3RhYmxlSXRlbXMubWFwKChpdGVtLCBpbmRleCkgPT4gKHtcbiAgICAgIGlkOiBpbmRleCArIDEsXG4gICAgICB0aXRsZTogYCR7aXRlbS50YWJsZUxhYmVsfS4ke2l0ZW0uZmllbGRMYWJlbH1gLFxuICAgICAgdGl0bGVQcmVmaXg6IGl0ZW0udGFibGVMYWJlbCxcbiAgICAgIHRpdGxlU3VmZml4OiBpdGVtLmZpZWxkTGFiZWwsXG4gICAgICB0aXRsZVByZWZpeENvbG9yOiBWSVNVQUxfU1FMX1RBQkxFX0NPTE9SLFxuICAgICAgdGl0bGVTdWZmaXhDb2xvcjogVklTVUFMX1NRTF9GSUVMRF9DT0xPUixcbiAgICAgIGJhZGdlOiBpdGVtLm1ldGEsXG4gICAgICBiYWRnZUNvbG9yOiBpdGVtLmZ1bmN0aW9uTmFtZVxuICAgICAgICA/IFBJQ0tMSVNUX0ZVTkNUSU9OX0JBREdFX0NPTE9SXG4gICAgICAgIDogUElDS0xJU1RfREFUQV9UWVBFX0JBREdFX0NPTE9SLFxuICAgICAgc2VsZWN0aW9uSWQ6IGl0ZW0uaWQsXG4gICAgICBjb2x1bW46IGl0ZW0uY29sdW1uLFxuICAgIH0pKTtcbiAgfVxuICBnZXQgc29ydFNlbGVjdGVkUGlja2xpc3RJZHMoKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zb3J0UGlja2xpc3RJdGVtcy5maW5kKFxuICAgICAgKGl0ZW0pID0+XG4gICAgICAgIGl0ZW0uY29sdW1uID09PSB0aGlzLnNvcnREcmFmdC5jb2x1bW4gJiZcbiAgICAgICAgaXRlbS5zZWxlY3Rpb25JZCA9PT1cbiAgICAgICAgdGhpcy5idWlsZFNvcnRTZWxlY3Rpb25JZChcbiAgICAgICAgICB0aGlzLnNvcnREcmFmdC5jb2x1bW4sXG4gICAgICAgICAgdGhpcy5zb3J0RHJhZnQuZnVuY3Rpb25OYW1lIHx8IEVNUFRZX1NPUlRfRlVOQ1RJT05cbiAgICAgICAgKVxuICAgICk7XG5cbiAgICByZXR1cm4gc2VsZWN0ZWQgPyBbc2VsZWN0ZWQuaWRdIDogW107XG4gIH1cbiAgZ2V0IGZpbHRlckNvbHVtblJvd3MoKTogU2VsZWN0aW9uUm93W10ge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkQ29sdW1uU2VsZWN0aW9uUm93cyhcbiAgICAgIHRoaXMuYXZhaWxhYmxlQ29sdW1ucyxcbiAgICAgIHRoaXMuZmlsdGVyRHJhZnQuY29sdW1uID8gW3RoaXMuZmlsdGVyRHJhZnQuY29sdW1uXSA6IFtdLFxuICAgICAgdGhpcy5maWx0ZXJTZWFyY2gsXG4gICAgICBmYWxzZVxuICAgICk7XG4gIH1cbiAgZ2V0IGZpbHRlck1vZGFsUGlja2xpc3RJdGVtcygpOiBDb2x1bW5QaWNrbGlzdEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRDb2x1bW5QaWNrbGlzdEl0ZW1zKHRoaXMuYXZhaWxhYmxlQ29sdW1ucyk7XG4gIH1cbiAgZ2V0IGZpbHRlck1vZGFsU2VsZWN0ZWRQaWNrbGlzdElkcygpOiBudW1iZXJbXSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRJZCA9IHRoaXMucmVzb2x2ZUNvbHVtblBpY2tsaXN0SWQodGhpcy5maWx0ZXJEcmFmdC5jb2x1bW4pO1xuICAgIHJldHVybiB0eXBlb2Ygc2VsZWN0ZWRJZCA9PT0gXCJudW1iZXJcIiAmJiBzZWxlY3RlZElkID4gMFxuICAgICAgPyBbc2VsZWN0ZWRJZF1cbiAgICAgIDogW107XG4gIH1cbiAgZ2V0IHNvcnRDb2x1bW5TdW1tYXJ5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc29ydERyYWZ0LmNvbHVtblxuICAgICAgPyB0aGlzLnJlc29sdmVTb3J0RHJhZnRMYWJlbCgpXG4gICAgICA6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LnN0YXRlcy5lbXB0eVNlbGVjdGlvbmAsXG4gICAgICAgIEZBTExCQUNLX0VNUFRZX1NFTEVDVElPTlxuICAgICAgKTtcbiAgfVxuICBnZXQgZmlsdGVyQ29sdW1uU3VtbWFyeSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmZpbHRlck1vZGFsTW9kZSA9PT0gRklMVEVSX01PREVfRE9NQUlOKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmlsdGVycy5kb21haW5MYWJlbGAsXG4gICAgICAgIFwiRXhwcmVzc2FvIGRlIGRvbWluaW9cIlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyRHJhZnQuY29sdW1uXG4gICAgICA/IHRoaXMucmVzb2x2ZUNvbHVtblBhdGgodGhpcy5maWx0ZXJEcmFmdC5jb2x1bW4pXG4gICAgICA6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LnN0YXRlcy5lbXB0eVNlbGVjdGlvbmAsXG4gICAgICAgIEZBTExCQUNLX0VNUFRZX1NFTEVDVElPTlxuICAgICAgKTtcbiAgfVxuICBnZXQgam9pblNvdXJjZVN1bW1hcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5qb2luRHJhZnQuc291cmNlQ29sdW1uXG4gICAgICA/IHRoaXMucmVzb2x2ZUNvbHVtblBhdGgodGhpcy5qb2luRHJhZnQuc291cmNlQ29sdW1uKVxuICAgICAgOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5zdGF0ZXMuZW1wdHlTZWxlY3Rpb25gLFxuICAgICAgICBGQUxMQkFDS19FTVBUWV9TRUxFQ1RJT05cbiAgICAgICk7XG4gIH1cbiAgZ2V0IGpvaW5UYXJnZXRTdW1tYXJ5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuam9pbkRyYWZ0LnRhcmdldENvbHVtblxuICAgICAgPyB0aGlzLnJlc29sdmVDb2x1bW5QYXRoKHRoaXMuam9pbkRyYWZ0LnRhcmdldENvbHVtbilcbiAgICAgIDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uc3RhdGVzLmVtcHR5U2VsZWN0aW9uYCxcbiAgICAgICAgRkFMTEJBQ0tfRU1QVFlfU0VMRUNUSU9OXG4gICAgICApO1xuICB9XG4gIGdldCBmaWx0ZXJPcGVyYXRvck9wdGlvbnMoKTogRHluYW1pY1ZpZXdCdWlsZGVyT3B0aW9uW10ge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMucmVzb2x2ZUNvbHVtbk9wdGlvbih0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbik7XG4gICAgaWYgKCFjb2x1bW4pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyT3BlcmF0b3JzRm9yQ29sdW1uKGNvbHVtbikubWFwKCh2YWx1ZSkgPT4gKHtcbiAgICAgIHZhbHVlLFxuICAgICAgdGV4dDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeFxuICAgICAgICB9LmZpbHRlcnMub3BlcmF0b3JzLiR7dmFsdWUudG9Mb3dlckNhc2UoKX1gLFxuICAgICAgICB0aGlzLmh1bWFuaXplS2V5KHZhbHVlKVxuICAgICAgKSxcbiAgICB9KSk7XG4gIH1cbiAgZ2V0IG5vcm1hbGl6ZWRGaWVsZHMoKTogRHluYW1pY1ZpZXdCdWlsZGVyRmllbGRbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5maWVsZHMubWFwKChpdGVtKSA9PlxuICAgICAgdGhpcy5ub3JtYWxpemVHZW5lcmF0ZWRGaWVsZChpdGVtKVxuICAgICk7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkU29ydERpcmVjdGlvbkl0ZW0oKTogU2VsZWN0QnV0dG9uSXRlbTxzdHJpbmc+IHwgbnVsbCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbkl0ZW1zLmZpbmQoXG4gICAgICAgIChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSB0aGlzLnNvcnREcmFmdC5kaXJlY3Rpb25cbiAgICAgICkgPz8gbnVsbFxuICAgICk7XG4gIH1cbiAgZ2V0IGZpbHRlckV4cHJlc3Npb25TdW1tYXJ5KCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZmlsdGVyTW9kYWxNb2RlID09PSBGSUxURVJfTU9ERV9ET01BSU4pIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlckRyYWZ0LmRvbWFpbkV4cHJlc3Npb24udHJpbSgpO1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmZpbHRlckRyYWZ0LmNvbHVtblxuICAgICAgPyB0aGlzLnJlc29sdmVDb2x1bW5QYXRoKHRoaXMuZmlsdGVyRHJhZnQuY29sdW1uKVxuICAgICAgOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5zdGF0ZXMuZW1wdHlTZWxlY3Rpb25gLFxuICAgICAgICBGQUxMQkFDS19FTVBUWV9TRUxFQ1RJT05cbiAgICAgICk7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSB0aGlzLmZpbHRlckRyYWZ0Lm9wZXJhdG9yXG4gICAgICA/IHRoaXMucmVzb2x2ZUZpbHRlck9wZXJhdG9yTGFiZWwodGhpcy5maWx0ZXJEcmFmdC5vcGVyYXRvcilcbiAgICAgIDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uc3RhdGVzLmVtcHR5U2VsZWN0aW9uYCxcbiAgICAgICAgRkFMTEJBQ0tfRU1QVFlfU0VMRUNUSU9OXG4gICAgICApO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5yZXNvbHZlRmlsdGVyRHJhZnREaXNwbGF5VmFsdWUoKTtcbiAgICByZXR1cm4gW2NvbHVtbiwgb3BlcmF0b3IsIHZhbHVlXS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiB8IFwiKTtcbiAgfVxuICBnZXQgZmlsdGVyQ29uZmlndXJhdGlvblN1bW1hcnlMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZpbHRlck1vZGFsTW9kZSA9PT0gRklMVEVSX01PREVfRE9NQUlOXG4gICAgICA/IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMuZG9tYWluTGFiZWxgLFxuICAgICAgICBcIkV4cHJlc3NhbyBkZSBkb21pbmlvXCJcbiAgICAgIClcbiAgICAgIDogdGhpcy5maWx0ZXJDb2x1bW5TdW1tYXJ5O1xuICB9XG4gIGdldCBmaWx0ZXJCYWNrVG9TZWxlY3Rpb25MYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uYWN0aW9ucy5iYWNrVG9TZWxlY3Rpb25gLFxuICAgICAgXCJWb2x0YXIgcGFyYSBzZWxlY2FvXCJcbiAgICApO1xuICB9XG4gIGdldCBmaWx0ZXJCYWNrVG9Db25maWd1cmF0aW9uTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmFjdGlvbnMuYmFja1RvQ29uZmlndXJhdGlvbmAsXG4gICAgICBcIlZvbHRhciBwYXJhIGNvbmZpZ3VyYWNhb1wiXG4gICAgKTtcbiAgfVxuICBnZXQgcHJldmlld0NvbHVtbnMoKTogVGFibGVDb2x1bW5bXSB7XG4gICAgY29uc3QgY29uZmlnQ29sdW1ucyA9IHRoaXMucmVzb2x2ZVByZXZpZXdDb2x1bW5zKCk7XG4gICAgcmV0dXJuIGNvbmZpZ0NvbHVtbnMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgZmllbGQ6IGl0ZW0uZmllbGQsXG4gICAgICBoZWFkZXI6IGl0ZW0uaGVhZGVyID8/IGl0ZW0uZmllbGQsXG4gICAgICB0eXBlOiAoaXRlbS50eXBlIGFzIFRhYmxlQ29sdW1uW1widHlwZVwiXSkgPz8gXCJ0ZXh0XCIsXG4gICAgfSkpO1xuICB9XG4gIGdldCBwcmV2aWV3Um93cygpOiBSb3dCYXNlW10ge1xuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMucHJldmlld0NvbHVtbnNcbiAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0uZmllbGQpXG4gICAgICAuZmlsdGVyKChmaWVsZCk6IGZpZWxkIGlzIHN0cmluZyA9PiB0eXBlb2YgZmllbGQgPT09IFwic3RyaW5nXCIpO1xuICAgIGNvbnN0IHJvd3MgPSAoKHRoaXMuY29uZmlnLnByZXZpZXc/LnJvd3MgPz8gW10pIGFzIFJvd0Jhc2VbXSkubWFwKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IG5leHQ6IFJvd0Jhc2UgPSB7fTtcbiAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICBuZXh0W2ZpZWxkXSA9IHJvd1tmaWVsZF0gPz8gRU1QVFlfVkFMVUU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH0pO1xuICAgIGlmIChyb3dzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHJvd3M7XG4gICAgfVxuICAgIGlmICghZmllbGRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogNSB9KS5tYXAoKF8sIHJvd0luZGV4KSA9PiB7XG4gICAgICBjb25zdCBuZXh0OiBSb3dCYXNlID0ge307XG4gICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgbmV4dFtmaWVsZF0gPSBgJHtmaWVsZH1fJHtyb3dJbmRleCArIDF9YDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfSk7XG4gIH1cbiAgZ2V0IHByZXZpZXdUYWJsZUNvbmZpZygpOiBUYWJsZU9wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICByb3dzOiBEWU5BTUlDX1ZJRVdfQlVJTERFUl9ERUZBVUxUX1RBQkxFX1JPV1MsXG4gICAgICBzaG93Um93c1BlclBhZ2VPcHRpb25zOiB0cnVlLFxuICAgICAgcm93c1BlclBhZ2VPcHRpb25zOiBQUkVWSUVXX1JPV1NfUEVSX1BBR0VfT1BUSU9OUyxcbiAgICAgIGVtcHR5VGl0bGU6IGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5lbXB0eS5wcmV2aWV3VGl0bGVgLFxuICAgICAgZW1wdHlTdWJ0aXRsZTogYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmVtcHR5LnByZXZpZXdUZXh0YCxcbiAgICB9IGFzIFRhYmxlT3B0aW9ucztcbiAgfVxuICBnZXQgc3FsUHJldmlldygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGdlbmVyYXRlZFNxbCA9IHRoaXMuYnVpbGRHZW5lcmF0ZWRTcWwoKTtcbiAgICBpZiAoZ2VuZXJhdGVkU3FsKSB7XG4gICAgICByZXR1cm4gZ2VuZXJhdGVkU3FsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb25maWcubWFudWFsPy5zcWwgPz8gRU1QVFlfVkFMVUU7XG4gIH1cbiAgZ2V0IHNxbFByZXZpZXdIZWlnaHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sYXlvdXRNb2RlID09PSBcInNwbGl0XCIgPyBcIjEwMCVcIiA6IFwiMjRyZW1cIjtcbiAgfVxuICBnZXQgc3FsUHJldmlld1BhbmVsSGVpZ2h0KCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmxheW91dE1vZGUgPT09IFwic3BsaXRcIlxuICAgICAgPyB0aGlzLm1lYXN1cmVkU3BsaXRQcmV2aWV3SGVpZ2h0XG4gICAgICA6IG51bGw7XG4gIH1cbiAgZ2V0IHByZXZpZXdUb2dnbGVMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uYWN0aW9ucy4ke3RoaXMucHJldmlld1Zpc2libGUgPyBcImhpZGVQcmV2aWV3XCIgOiBcInNob3dQcmV2aWV3XCJcbiAgICAgIH1gLFxuICAgICAgdGhpcy5wcmV2aWV3VmlzaWJsZSA/IFwiT2N1bHRhciBwcmV2aWV3XCIgOiBcIlZpc3VhbGl6YXIgcHJldmlld1wiXG4gICAgKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWRGaWx0ZXJNb2RlSXRlbSgpOiBTZWxlY3RCdXR0b25JdGVtPEZpbHRlck1vZGFsTW9kZT4gfCBudWxsIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5maWx0ZXJNb2RlSXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gdGhpcy5maWx0ZXJNb2RhbE1vZGUpID8/XG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICB0cmFja0J5SWQoXzogbnVtYmVyLCBpdGVtOiB7IGlkOiBzdHJpbmcgfSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGl0ZW0uaWQ7XG4gIH1cbiAgdHJhY2tCeUFycm93KF86IG51bWJlciwgaXRlbTogQnVpbGRlckZsb3dBcnJvdyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGl0ZW0uaWQ7XG4gIH1cbiAgb25MYXlvdXRNb2RlQ2hhbmdlKGl0ZW1zOiBTZWxlY3RCdXR0b25JdGVtPEJ1aWxkZXJMYXlvdXRNb2RlPltdKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9IGl0ZW1zWzBdPy52YWx1ZTtcbiAgICBpZiAobmV4dCA9PT0gXCJzdGFja2VkXCIgfHwgbmV4dCA9PT0gXCJzcGxpdFwiKSB7XG4gICAgICB0aGlzLmxheW91dE1vZGUgPSBuZXh0O1xuICAgICAgdGhpcy5zeW5jU2VsZWN0ZWRMYXlvdXRNb2RlSXRlbXMoKTtcbiAgICAgIHRoaXMuZmxvd1NlcnZpY2Uuc2NoZWR1bGVGbG93QXJyb3dSZWZyZXNoKHRoaXMuZmxvd0NvbnRleHQpO1xuICAgIH1cbiAgfVxuICB0b2dnbGVQcmV2aWV3KCk6IHZvaWQge1xuICAgIHRoaXMucHJldmlld1Zpc2libGUgPSAhdGhpcy5wcmV2aWV3VmlzaWJsZTtcbiAgICB0aGlzLmZsb3dTZXJ2aWNlLnNjaGVkdWxlRmxvd0Fycm93UmVmcmVzaCh0aGlzLmZsb3dDb250ZXh0KTtcbiAgfVxuICBvblNvcnREaXJlY3Rpb25DaGFuZ2UoaXRlbXM6IFNlbGVjdEJ1dHRvbkl0ZW08c3RyaW5nPltdKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9IGl0ZW1zWzBdPy52YWx1ZTtcbiAgICBpZiAobmV4dCkge1xuICAgICAgdGhpcy5zb3J0RHJhZnQuZGlyZWN0aW9uID0gbmV4dDtcbiAgICAgIHRoaXMuc3luY1NlbGVjdGVkU29ydERpcmVjdGlvbkl0ZW1zKCk7XG4gICAgfVxuICB9XG4gIGlzRmllbGREcm9wSW5kaWNhdG9yVmlzaWJsZShpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZHJhZ2dpbmdGaWVsZEluZGV4ICE9PSBudWxsICYmIHRoaXMuZHJhZ1ByZXZpZXdJbmRleCA9PT0gaW5kZXg7XG4gIH1cbiAgaXNGaWVsZERyb3BJbmRpY2F0b3JBdEVuZFZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZHJhZ2dpbmdGaWVsZEluZGV4ICE9PSBudWxsICYmXG4gICAgICB0aGlzLmRyYWdQcmV2aWV3SW5kZXggPT09IHRoaXMuZmllbGRJdGVtcy5sZW5ndGhcbiAgICApO1xuICB9XG4gIG9uRmllbGREcmFnU3RhcnQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZHJhZ2dpbmdGaWVsZEluZGV4ID0gaW5kZXg7XG4gICAgdGhpcy5kcmFnUHJldmlld0luZGV4ID0gdGhpcy5nZXRGaWVsZFByZXZpZXdTb3VyY2VJbmRleGVzKCkuaW5kZXhPZihpbmRleCk7XG4gIH1cbiAgb25GaWVsZERyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmICghdGFyZ2V0IHx8IHRoaXMuZHJhZ2dpbmdGaWVsZEluZGV4ID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlY3QgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qgc2hvdWxkSW5zZXJ0QWZ0ZXIgPSBldmVudC5jbGllbnRYID4gcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCAvIDI7XG4gICAgdGhpcy5kcmFnUHJldmlld0luZGV4ID0gTWF0aC5taW4oXG4gICAgICBpbmRleCArIChzaG91bGRJbnNlcnRBZnRlciA/IDEgOiAwKSxcbiAgICAgIHRoaXMuZmllbGRJdGVtcy5sZW5ndGhcbiAgICApO1xuICB9XG4gIG9uRmllbGREcm9wKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRyYWdnaW5nRmllbGRJbmRleCA9PT0gbnVsbCB8fCB0aGlzLmRyYWdQcmV2aWV3SW5kZXggPT09IG51bGwpIHtcbiAgICAgIHRoaXMuZHJhZ2dpbmdGaWVsZEluZGV4ID0gbnVsbDtcbiAgICAgIHRoaXMuZHJhZ1ByZXZpZXdJbmRleCA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByZXZpZXdJbmRleGVzID0gdGhpcy5nZXRGaWVsZFByZXZpZXdTb3VyY2VJbmRleGVzKCk7XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpZWxkcyA9IHByZXZpZXdJbmRleGVzLm1hcChcbiAgICAgIChpdGVtSW5kZXgpID0+IHRoaXMuY29uZmlnLmdlbmVyYXRlZC5maWVsZHNbaXRlbUluZGV4XVxuICAgICk7XG4gICAgdGhpcy5kcmFnZ2luZ0ZpZWxkSW5kZXggPSBudWxsO1xuICAgIHRoaXMuZHJhZ1ByZXZpZXdJbmRleCA9IG51bGw7XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIG9uRmllbGREcmFnRW5kKCk6IHZvaWQge1xuICAgIHRoaXMuZHJhZ2dpbmdGaWVsZEluZGV4ID0gbnVsbDtcbiAgICB0aGlzLmRyYWdQcmV2aWV3SW5kZXggPSBudWxsO1xuICB9XG4gIG9wZW5GaWVsZE1vZGFsKGluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9XG4gICAgICB0eXBlb2YgaW5kZXggPT09IFwibnVtYmVyXCIgPyB0aGlzLm5vcm1hbGl6ZWRGaWVsZHNbaW5kZXhdIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGRyYWZ0cyA9IHRoaXMuZ2V0T3JkZXJlZEZpZWxkRW50cmllcygpLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgIGNvbHVtbjogaXRlbS5jb2x1bW4sXG4gICAgICBhbGlhczogaXRlbS5hbGlhcz8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgd2lkdGg6IGl0ZW0ud2lkdGg/LnRyaW0oKSA/PyBFTVBUWV9WQUxVRSxcbiAgICAgIGZ1bmN0aW9uOiBpdGVtLmZ1bmN0aW9uXG4gICAgICAgID8ge1xuICAgICAgICAgIGZ1bmN0aW9uTmFtZTogaXRlbS5mdW5jdGlvbi5mdW5jdGlvbk5hbWU/LnRyaW0oKSA/PyBFTVBUWV9WQUxVRSxcbiAgICAgICAgICBhbGlhczogaXRlbS5mdW5jdGlvbi5hbGlhcz8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgICB9XG4gICAgICAgIDogbnVsbCxcbiAgICB9KSk7XG4gICAgY29uc3Qgb3BlbkF0U3RlcDogRmllbGRNb2RhbFN0ZXAgPVxuICAgICAgdHlwZW9mIGluZGV4ID09PSBcIm51bWJlclwiICYmIGN1cnJlbnQgPyBcImNvbmZpZ3VyZVwiIDogXCJzZWxlY3RcIjtcbiAgICB0aGlzLmZpZWxkTW9kYWxTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5vcGVuRmllbGRNb2RhbChkcmFmdHMsIG9wZW5BdFN0ZXApO1xuICB9XG4gIG9wZW5GaWVsZENvbmZpZ3VyYXRpb25Nb2RhbCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FuT3BlbkZpZWxkQ29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub3BlbkZpZWxkTW9kYWwoMCk7XG4gIH1cbiAgY2xvc2VGaWVsZE1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuZmllbGRNb2RhbFNlYXJjaCA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmNsb3NlRmllbGRNb2RhbCgpO1xuICB9XG4gIGdvVG9GaWVsZE1vZGFsU3RlcChzdGVwOiBGaWVsZE1vZGFsU3RlcCk6IHZvaWQge1xuICAgIGlmIChzdGVwID09PSBcInNlbGVjdFwiKSB7XG4gICAgICB0aGlzLmZpZWxkTW9kYWxTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZ29Ub0ZpZWxkTW9kYWxTdGVwKHN0ZXApO1xuICB9XG4gIGFkdmFuY2VGaWVsZE1vZGFsU3RlcCgpOiB2b2lkIHtcbiAgICB0aGlzLmdvVG9GaWVsZE1vZGFsU3RlcChcImNvbmZpZ3VyZVwiKTtcbiAgfVxuICBvbkZpZWxkTW9kYWxUaW1lbGluZVN0ZXBTZWxlY3QoZXZlbnQ6IFRpbWVsaW5lU3RlcFNlbGVjdEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5nb1RvRmllbGRNb2RhbFN0ZXAoZXZlbnQuaXRlbS5pZCA9PT0gXCJjb25maWd1cmVcIiA/IFwiY29uZmlndXJlXCIgOiBcInNlbGVjdFwiKTtcbiAgfVxuICBzZWxlY3RGaWVsZE1vZGFsQ29sdW1uKGNvbHVtbjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuc3RhdGVTZXJ2aWNlLmZpZWxkTW9kYWxEcmFmdHMuZmluZCgoaXRlbSkgPT4gaXRlbS5jb2x1bW4gPT09IGNvbHVtbik7XG4gICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgIHRoaXMucmVtb3ZlRmllbGRNb2RhbERyYWZ0KGNvbHVtbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZmllbGRNb2RhbERyYWZ0cyA9IFtcbiAgICAgIC4uLnRoaXMuc3RhdGVTZXJ2aWNlLmZpZWxkTW9kYWxEcmFmdHMsXG4gICAgICB7XG4gICAgICAgIGNvbHVtbixcbiAgICAgICAgYWxpYXM6IEVNUFRZX1ZBTFVFLFxuICAgICAgICB3aWR0aDogRU1QVFlfVkFMVUUsXG4gICAgICAgIGZ1bmN0aW9uOiBudWxsLFxuICAgICAgfSxcbiAgICBdO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmZpZWxkRnVuY3Rpb25FZGl0Q29sdW1uID0gbnVsbDtcbiAgfVxuICBzZWxlY3RBbGxGaWVsZE1vZGFsQ29sdW1ucygpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZENvbHVtbnMgPSBuZXcgU2V0KFxuICAgICAgdGhpcy5zdGF0ZVNlcnZpY2UuZmllbGRNb2RhbERyYWZ0cy5tYXAoKGl0ZW0pID0+IGl0ZW0uY29sdW1uKVxuICAgICk7XG4gICAgY29uc3Qgcm93c1RvU2VsZWN0ID0gdGhpcy5maWVsZFNlbGVjdGFibGVDb2x1bW5zLmZpbHRlcihcbiAgICAgIChpdGVtKSA9PiAhc2VsZWN0ZWRDb2x1bW5zLmhhcyhpdGVtLnZhbHVlKVxuICAgICk7XG5cbiAgICBpZiAoIXJvd3NUb1NlbGVjdC5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlU2VydmljZS5maWVsZE1vZGFsRHJhZnRzID0gW1xuICAgICAgLi4udGhpcy5zdGF0ZVNlcnZpY2UuZmllbGRNb2RhbERyYWZ0cyxcbiAgICAgIC4uLnJvd3NUb1NlbGVjdC5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgIGNvbHVtbjogaXRlbS52YWx1ZSxcbiAgICAgICAgYWxpYXM6IEVNUFRZX1ZBTFVFLFxuICAgICAgICB3aWR0aDogRU1QVFlfVkFMVUUsXG4gICAgICAgIGZ1bmN0aW9uOiBudWxsLFxuICAgICAgfSkpLFxuICAgIF07XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZmllbGRGdW5jdGlvbkVkaXRDb2x1bW4gPSBudWxsO1xuICB9XG4gIGFkZEFub3RoZXJGaWVsZEZyb21Nb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmZpZWxkTW9kYWxTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5maWVsZE1vZGFsU3RlcCA9IFwic2VsZWN0XCI7XG4gIH1cbiAgb25GaWVsZE1vZGFsU2VsZWN0ZWRJZHNDaGFuZ2UoaWRzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkQ29sdW1ucyA9IG5ldyBTZXQoXG4gICAgICBpZHNcbiAgICAgICAgLm1hcCgoaXRlbSkgPT4gdGhpcy5yZXNvbHZlQ29sdW1uUGlja2xpc3RDb2x1bW4oaXRlbSkpXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIHN0cmluZyA9PiAhIWl0ZW0pXG4gICAgKTtcbiAgICBjb25zdCBwcmVzZXJ2ZWREcmFmdHMgPSB0aGlzLnN0YXRlU2VydmljZS5maWVsZE1vZGFsRHJhZnRzLmZpbHRlcigoaXRlbSkgPT5cbiAgICAgIHNlbGVjdGVkQ29sdW1ucy5oYXMoaXRlbS5jb2x1bW4pXG4gICAgKTtcbiAgICBjb25zdCBwcmVzZXJ2ZWRDb2x1bW5zID0gbmV3IFNldChcbiAgICAgIHByZXNlcnZlZERyYWZ0cy5tYXAoKGl0ZW0pID0+IGl0ZW0uY29sdW1uKVxuICAgICk7XG4gICAgY29uc3QgYXBwZW5kZWREcmFmdHMgPSB0aGlzLmZpZWxkU2VsZWN0YWJsZUNvbHVtbnNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChpdGVtKSA9PlxuICAgICAgICAgIHNlbGVjdGVkQ29sdW1ucy5oYXMoaXRlbS52YWx1ZSkgJiYgIXByZXNlcnZlZENvbHVtbnMuaGFzKGl0ZW0udmFsdWUpXG4gICAgICApXG4gICAgICAubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICBjb2x1bW46IGl0ZW0udmFsdWUsXG4gICAgICAgIGFsaWFzOiBFTVBUWV9WQUxVRSxcbiAgICAgICAgd2lkdGg6IEVNUFRZX1ZBTFVFLFxuICAgICAgICBmdW5jdGlvbjogbnVsbCxcbiAgICAgIH0pKTtcblxuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmZpZWxkTW9kYWxEcmFmdHMgPSBbLi4ucHJlc2VydmVkRHJhZnRzLCAuLi5hcHBlbmRlZERyYWZ0c107XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXRlU2VydmljZS5maWVsZEZ1bmN0aW9uRWRpdENvbHVtbiAmJlxuICAgICAgIXNlbGVjdGVkQ29sdW1ucy5oYXModGhpcy5zdGF0ZVNlcnZpY2UuZmllbGRGdW5jdGlvbkVkaXRDb2x1bW4pXG4gICAgKSB7XG4gICAgICB0aGlzLmNhbmNlbEZpZWxkRnVuY3Rpb25FZGl0KCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnN0YXRlU2VydmljZS5maWVsZE1vZGFsRHJhZnRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zdGF0ZVNlcnZpY2UuZmllbGRNb2RhbFN0ZXAgPSBcInNlbGVjdFwiO1xuICAgIH1cbiAgfVxuICBvbkZpZWxkTW9kYWxBbGlhc0NoYW5nZShjb2x1bW46IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucGF0Y2hGaWVsZE1vZGFsRHJhZnQoY29sdW1uLCB7IGFsaWFzOiB2YWx1ZSB9KTtcbiAgfVxuICBvbkZpZWxkTW9kYWxXaWR0aENoYW5nZShjb2x1bW46IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucGF0Y2hGaWVsZE1vZGFsRHJhZnQoY29sdW1uLCB7IHdpZHRoOiB2YWx1ZSB9KTtcbiAgfVxuICByZW1vdmVGaWVsZE1vZGFsRHJhZnQoY29sdW1uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5maWVsZE1vZGFsRHJhZnRzID0gdGhpcy5zdGF0ZVNlcnZpY2UuZmllbGRNb2RhbERyYWZ0cy5maWx0ZXIoXG4gICAgICAoaXRlbSkgPT4gaXRlbS5jb2x1bW4gIT09IGNvbHVtblxuICAgICk7XG4gICAgaWYgKHRoaXMuc3RhdGVTZXJ2aWNlLmZpZWxkRnVuY3Rpb25FZGl0Q29sdW1uID09PSBjb2x1bW4pIHtcbiAgICAgIHRoaXMuY2FuY2VsRmllbGRGdW5jdGlvbkVkaXQoKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnN0YXRlU2VydmljZS5maWVsZE1vZGFsRHJhZnRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zdGF0ZVNlcnZpY2UuZmllbGRNb2RhbFN0ZXAgPSBcInNlbGVjdFwiO1xuICAgIH1cbiAgfVxuICBzdGFydEZpZWxkRnVuY3Rpb25FZGl0KGNvbHVtbjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuc3RhdGVTZXJ2aWNlLmZpZWxkTW9kYWxEcmFmdHMuZmluZCgoaXRlbSkgPT4gaXRlbS5jb2x1bW4gPT09IGNvbHVtbik7XG4gICAgaWYgKCFjdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmZpZWxkRnVuY3Rpb25FZGl0Q29sdW1uID0gY29sdW1uO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmZpZWxkRnVuY3Rpb25EcmFmdCA9IHtcbiAgICAgIGNvbHVtbixcbiAgICAgIGZ1bmN0aW9uTmFtZTogY3VycmVudC5mdW5jdGlvbj8uZnVuY3Rpb25OYW1lPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICBmdW5jdGlvbkFsaWFzOiBjdXJyZW50LmZ1bmN0aW9uPy5hbGlhcz8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgIH07XG4gIH1cbiAgY2FuY2VsRmllbGRGdW5jdGlvbkVkaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZmllbGRGdW5jdGlvbkVkaXRDb2x1bW4gPSBudWxsO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmZpZWxkRnVuY3Rpb25EcmFmdCA9IHtcbiAgICAgIGNvbHVtbjogRU1QVFlfVkFMVUUsXG4gICAgICBmdW5jdGlvbk5hbWU6IEVNUFRZX1ZBTFVFLFxuICAgICAgZnVuY3Rpb25BbGlhczogRU1QVFlfVkFMVUUsXG4gICAgfTtcbiAgfVxuICBvbkZpZWxkRnVuY3Rpb25EcmFmdE5hbWVDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZmllbGRGdW5jdGlvbkRyYWZ0LmZ1bmN0aW9uTmFtZSA9IHZhbHVlO1xuICAgIHRoaXMub25GaWVsZEZ1bmN0aW9uTmFtZUNoYW5nZSgpO1xuICB9XG4gIHNhdmVGaWVsZEZ1bmN0aW9uRWRpdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZmllbGRGdW5jdGlvbkVkaXRDb2x1bW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wYXRjaEZpZWxkTW9kYWxEcmFmdCh0aGlzLmZpZWxkRnVuY3Rpb25FZGl0Q29sdW1uLCB7XG4gICAgICBmdW5jdGlvbjogdGhpcy5idWlsZEZpZWxkRnVuY3Rpb25EcmFmdCgpLFxuICAgIH0pO1xuICAgIHRoaXMuY2FuY2VsRmllbGRGdW5jdGlvbkVkaXQoKTtcbiAgfVxuICBpc0ZpZWxkRnVuY3Rpb25FZGl0aW5nKGNvbHVtbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRGdW5jdGlvbkVkaXRDb2x1bW4gPT09IGNvbHVtbjtcbiAgfVxuICBzYXZlRmllbGQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblNhdmVGaWVsZE1vZGFsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5maWVsZHMgPSB0aGlzLnN0YXRlU2VydmljZS5maWVsZE1vZGFsRHJhZnRzLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgIGNvbHVtbjogaXRlbS5jb2x1bW4sXG4gICAgICBhbGlhczogaXRlbS5hbGlhcz8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgd2lkdGg6IGl0ZW0ud2lkdGg/LnRyaW0oKSA/PyBFTVBUWV9WQUxVRSxcbiAgICAgIGZ1bmN0aW9uOiBpdGVtLmZ1bmN0aW9uPy5mdW5jdGlvbk5hbWU/LnRyaW0oKVxuICAgICAgICA/IHtcbiAgICAgICAgICBmdW5jdGlvbk5hbWU6IGl0ZW0uZnVuY3Rpb24uZnVuY3Rpb25OYW1lLnRyaW0oKSxcbiAgICAgICAgICBhbGlhczogaXRlbS5mdW5jdGlvbi5hbGlhcz8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgICB9XG4gICAgICAgIDogbnVsbCxcbiAgICB9KSk7XG4gICAgdGhpcy5jbG9zZUZpZWxkTW9kYWwoKTtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgb3BlblNvdXJjZU1vZGFsKHN0ZXA6IFNvdXJjZU1vZGFsU3RlcCA9IFwic2VsZWN0XCIpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5vcGVuU291cmNlTW9kYWwoXG4gICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc291cmNlcyxcbiAgICAgICh0YWJsZSkgPT4gdGhpcy5yZXNvbHZlRGVmYXVsdFNvdXJjZUFsaWFzKHRhYmxlKSxcbiAgICAgIHN0ZXBcbiAgICApO1xuICB9XG4gIG9wZW5Tb3VyY2VDb25maWd1cmF0aW9uTW9kYWwoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhbk9wZW5Tb3VyY2VDb25maWd1cmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vcGVuU291cmNlTW9kYWwoXCJjb25maWd1cmVcIik7XG4gIH1cbiAgY2xvc2VTb3VyY2VNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5jbG9zZVNvdXJjZU1vZGFsKCk7XG4gIH1cbiAgZ29Ub1NvdXJjZU1vZGFsU3RlcChzdGVwOiBTb3VyY2VNb2RhbFN0ZXApOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5nb1RvU291cmNlTW9kYWxTdGVwKHN0ZXApO1xuICB9XG4gIGFkdmFuY2VTb3VyY2VNb2RhbFN0ZXAoKTogdm9pZCB7XG4gICAgdGhpcy5nb1RvU291cmNlTW9kYWxTdGVwKFwiY29uZmlndXJlXCIpO1xuICB9XG4gIG9uU291cmNlTW9kYWxUaW1lbGluZVN0ZXBTZWxlY3QoZXZlbnQ6IFRpbWVsaW5lU3RlcFNlbGVjdEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5nb1RvU291cmNlTW9kYWxTdGVwKFxuICAgICAgZXZlbnQuaXRlbS5pZCA9PT0gXCJjb25maWd1cmVcIiA/IFwiY29uZmlndXJlXCIgOiBcInNlbGVjdFwiXG4gICAgKTtcbiAgfVxuICBvblNvdXJjZU1vZGFsU2VsZWN0ZWRJZHNDaGFuZ2UoaWRzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkVGFibGVzID0gdGhpcy5yZXNvbHZlVGFibGVzRnJvbVBpY2tsaXN0SWRzKGlkcyk7XG4gICAgY29uc3QgZHJhZnRCeVRhYmxlID0gbmV3IE1hcChcbiAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNvdXJjZU1vZGFsRHJhZnRzLm1hcCgoaXRlbSkgPT4gW2l0ZW0udGFibGUsIGl0ZW1dKVxuICAgICk7XG5cbiAgICB0aGlzLnN0YXRlU2VydmljZS5zb3VyY2VNb2RhbERyYWZ0cyA9IHNlbGVjdGVkVGFibGVzLm1hcCgodGFibGUpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBkcmFmdEJ5VGFibGUuZ2V0KHRhYmxlKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGN1cnJlbnQgPz8ge1xuICAgICAgICAgIHRhYmxlLFxuICAgICAgICAgIGFsaWFzOiB0aGlzLnJlc29sdmVEZWZhdWx0U291cmNlQWxpYXModGFibGUpLFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaWYgKCF0aGlzLnN0YXRlU2VydmljZS5zb3VyY2VNb2RhbERyYWZ0cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNvdXJjZU1vZGFsU3RlcCA9IFwic2VsZWN0XCI7XG4gICAgfVxuICB9XG4gIG9uU291cmNlTW9kYWxBbGlhc0NoYW5nZSh0YWJsZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc291cmNlTW9kYWxEcmFmdHMgPSB0aGlzLnN0YXRlU2VydmljZS5zb3VyY2VNb2RhbERyYWZ0cy5tYXAoKGl0ZW0pID0+XG4gICAgICBpdGVtLnRhYmxlID09PSB0YWJsZVxuICAgICAgICA/IHtcbiAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgIGFsaWFzOiB2YWx1ZSxcbiAgICAgICAgfVxuICAgICAgICA6IGl0ZW1cbiAgICApO1xuICB9XG4gIHNhdmVTb3VyY2VNb2RhbCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3RhdGVTZXJ2aWNlLnNvdXJjZU1vZGFsRHJhZnRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzID0gdGhpcy5zdGF0ZVNlcnZpY2Uuc291cmNlTW9kYWxEcmFmdHMubWFwKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCB0YWJsZSA9IHRoaXMucmVzb2x2ZVRhYmxlT3B0aW9uKGl0ZW0udGFibGUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGFibGU6IGl0ZW0udGFibGUsXG4gICAgICAgIGFsaWFzOiBpdGVtLmFsaWFzPy50cmltKCkgfHwgdGhpcy5yZXNvbHZlRGVmYXVsdFNvdXJjZUFsaWFzKGl0ZW0udGFibGUpLCAvLyBOT1NPTkFSXG4gICAgICAgIHNjaGVtYTogdGFibGU/LnNjaGVtYSxcbiAgICAgICAgbGFiZWw6IHRhYmxlPy5kaXNwbGF5TmFtZSB8fCB0YWJsZT8udGV4dCwgLy8gTk9TT05BUlxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMuY2xvc2VTb3VyY2VNb2RhbCgpO1xuICAgIHRoaXMuYWZ0ZXJCdWlsZGVyTXV0YXRpb24oKTtcbiAgfVxuICBvcGVuU2VsZWN0aW9uTW9kYWwobW9kZTogU2VsZWN0aW9uTW9kYWxNb2RlKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3Rpb25Nb2RhbE1vZGUgPSBtb2RlO1xuICAgIHRoaXMuc2VsZWN0aW9uTW9kYWxTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICBpZiAobW9kZSA9PT0gXCJ0YWJsZXNcIikge1xuICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RhbElkcyA9IHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzLm1hcChcbiAgICAgICAgKGl0ZW0pID0+IGl0ZW0udGFibGVcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChtb2RlID09PSBcImZpZWxkc1wiKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbk1vZGFsSWRzID0gdGhpcy5ub3JtYWxpemVkRmllbGRzLm1hcCgoaXRlbSkgPT4gaXRlbS5jb2x1bW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbk1vZGFsSWRzID0gWy4uLnRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5XTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3Rpb25Nb2RhbFZpc2libGUgPSB0cnVlO1xuICB9XG4gIGNsb3NlU2VsZWN0aW9uTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3Rpb25Nb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGlvbk1vZGFsSWRzID0gW107XG4gICAgdGhpcy5zZWxlY3Rpb25Nb2RhbFNlYXJjaCA9IEVNUFRZX1ZBTFVFO1xuICB9XG4gIHRvZ2dsZVNlbGVjdGlvbk1vZGFsUm93KGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGlvbk1vZGFsSWRzID0gdGhpcy50b2dnbGVNdWx0aXBsZVZhbHVlKFxuICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RhbElkcyxcbiAgICAgIGlkXG4gICAgKTtcbiAgfVxuICBvblNlbGVjdGlvbk1vZGFsU2VsZWN0ZWRJZHNDaGFuZ2UoaWRzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uTW9kYWxJZHMgPSB0aGlzLnJlc29sdmVDb2x1bW5zRnJvbVBpY2tsaXN0SWRzKGlkcyk7XG4gIH1cbiAgb25TZWxlY3RhYmxlUm93S2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkgPT09IFwiIFwiIHx8IGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQgfCBudWxsKT8uY2xpY2soKTtcbiAgICB9XG4gIH1cbiAgY29uZmlybVNlbGVjdGlvbk1vZGFsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGFsTW9kZSA9PT0gXCJ0YWJsZXNcIikge1xuICAgICAgY29uc3QgYWxpYXNlcyA9IG5ldyBNYXAoXG4gICAgICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzLm1hcCgoaXRlbSkgPT4gW1xuICAgICAgICAgIGl0ZW0udGFibGUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWxpYXM6IGl0ZW0uYWxpYXMsXG4gICAgICAgICAgICBzY2hlbWE6IGl0ZW0uc2NoZW1hLFxuICAgICAgICAgICAgbGFiZWw6IGl0ZW0ubGFiZWwsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSlcbiAgICAgICk7XG4gICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc291cmNlcyA9ICh0aGlzLmNvbmZpZy5hdmFpbGFibGVEYXRhLnRhYmxlcyA/PyBbXSlcbiAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gdGhpcy5zZWxlY3Rpb25Nb2RhbElkcy5pbmNsdWRlcyhpdGVtLnZhbHVlKSlcbiAgICAgICAgLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgICB0YWJsZTogaXRlbS52YWx1ZSxcbiAgICAgICAgICBhbGlhczpcbiAgICAgICAgICAgIGFsaWFzZXMuZ2V0KGl0ZW0udmFsdWUpPy5hbGlhcz8udHJpbSgpIHx8IHRoaXMuYnVpbGRBbGlhc0ZvclRhYmxlKGl0ZW0pLCAvLyBOT1NPTkFSXG4gICAgICAgICAgc2NoZW1hOiBhbGlhc2VzLmdldChpdGVtLnZhbHVlKT8uc2NoZW1hID8/IGl0ZW0uc2NoZW1hLFxuICAgICAgICAgIGxhYmVsOlxuICAgICAgICAgICAgYWxpYXNlcy5nZXQoaXRlbS52YWx1ZSk/LmxhYmVsID8/XG4gICAgICAgICAgICBpdGVtLmRpc3BsYXlOYW1lID8/XG4gICAgICAgICAgICBpdGVtLnRleHQsXG4gICAgICAgIH0pKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kYWxNb2RlID09PSBcImZpZWxkc1wiKSB7XG4gICAgICBjb25zdCBmaWVsZENvbmZpZ0J5Q29sdW1uID0gbmV3IE1hcChcbiAgICAgICAgdGhpcy5ub3JtYWxpemVkRmllbGRzLm1hcCgoaXRlbSkgPT4gW2l0ZW0uY29sdW1uLCBpdGVtXSlcbiAgICAgICk7XG4gICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmllbGRzID0gdGhpcy5zZWxlY3Rpb25Nb2RhbElkcy5tYXAoXG4gICAgICAgIChjb2x1bW4pID0+IGZpZWxkQ29uZmlnQnlDb2x1bW4uZ2V0KGNvbHVtbikgPz8geyBjb2x1bW4gfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmdyb3VwQnkgPSBbLi4udGhpcy5zZWxlY3Rpb25Nb2RhbElkc107XG4gICAgfVxuICAgIHRoaXMuY2xvc2VTZWxlY3Rpb25Nb2RhbCgpO1xuICAgIHRoaXMuYWZ0ZXJCdWlsZGVyTXV0YXRpb24oKTtcbiAgfVxuICBvcGVuSm9pbk1vZGFsKGluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9XG4gICAgICB0eXBlb2YgaW5kZXggPT09IFwibnVtYmVyXCIgPyB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuam9pbnNbaW5kZXhdIDogbnVsbDtcbiAgICB0aGlzLmpvaW5Tb3VyY2VTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmpvaW5UYXJnZXRTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5vcGVuSm9pbk1vZGFsKGN1cnJlbnQsIHR5cGVvZiBpbmRleCA9PT0gXCJudW1iZXJcIiA/IGluZGV4IDogbnVsbCk7XG4gIH1cbiAgY2xvc2VKb2luTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5qb2luU291cmNlU2VhcmNoID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5qb2luVGFyZ2V0U2VhcmNoID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuY2xvc2VKb2luTW9kYWwoKTtcbiAgfVxuICBzZWxlY3RKb2luU291cmNlKGNvbHVtbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5qb2luRHJhZnQuc291cmNlQ29sdW1uID1cbiAgICAgIHRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtbiA9PT0gY29sdW1uID8gRU1QVFlfVkFMVUUgOiBjb2x1bW47XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5yZXNvbHZlQ29sdW1uT3B0aW9uKHRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtbik7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5yZXNvbHZlQ29sdW1uT3B0aW9uKHRoaXMuam9pbkRyYWZ0LnRhcmdldENvbHVtbik7XG4gICAgaWYgKHNvdXJjZT8udGFibGUgJiYgc291cmNlLnRhYmxlID09PSB0YXJnZXQ/LnRhYmxlKSB7XG4gICAgICB0aGlzLmpvaW5EcmFmdC50YXJnZXRDb2x1bW4gPSBFTVBUWV9WQUxVRTtcbiAgICB9XG4gIH1cbiAgb25Kb2luU291cmNlU2VsZWN0ZWRJZHNDaGFuZ2UoaWRzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMucmVzb2x2ZUxhc3RDb2x1bW5Gcm9tUGlja2xpc3RJZHMoaWRzKTtcblxuICAgIHRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtbiA9XG4gICAgICBjb2x1bW4gJiYgY29sdW1uID09PSB0aGlzLmpvaW5EcmFmdC5zb3VyY2VDb2x1bW4gPyBFTVBUWV9WQUxVRSA6IGNvbHVtbiA/PyBFTVBUWV9WQUxVRTtcblxuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMucmVzb2x2ZUNvbHVtbk9wdGlvbih0aGlzLmpvaW5EcmFmdC5zb3VyY2VDb2x1bW4pO1xuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMucmVzb2x2ZUNvbHVtbk9wdGlvbih0aGlzLmpvaW5EcmFmdC50YXJnZXRDb2x1bW4pO1xuICAgIGlmIChzb3VyY2U/LnRhYmxlICYmIHNvdXJjZS50YWJsZSA9PT0gdGFyZ2V0Py50YWJsZSkge1xuICAgICAgdGhpcy5qb2luRHJhZnQudGFyZ2V0Q29sdW1uID0gRU1QVFlfVkFMVUU7XG4gICAgfVxuICB9XG4gIHNlbGVjdEpvaW5UYXJnZXQoY29sdW1uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmpvaW5EcmFmdC50YXJnZXRDb2x1bW4gPVxuICAgICAgdGhpcy5qb2luRHJhZnQudGFyZ2V0Q29sdW1uID09PSBjb2x1bW4gPyBFTVBUWV9WQUxVRSA6IGNvbHVtbjtcbiAgfVxuICBvbkpvaW5UYXJnZXRTZWxlY3RlZElkc0NoYW5nZShpZHM6IG51bWJlcltdKTogdm9pZCB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5yZXNvbHZlTGFzdENvbHVtbkZyb21QaWNrbGlzdElkcyhpZHMpO1xuICAgIHRoaXMuam9pbkRyYWZ0LnRhcmdldENvbHVtbiA9XG4gICAgICBjb2x1bW4gJiYgY29sdW1uID09PSB0aGlzLmpvaW5EcmFmdC50YXJnZXRDb2x1bW4gPyBFTVBUWV9WQUxVRSA6IGNvbHVtbiA/PyBFTVBUWV9WQUxVRTtcbiAgfVxuICBzYXZlSm9pbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FuU2F2ZUpvaW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV4dDogRHluYW1pY1ZpZXdCdWlsZGVySm9pbiA9IHtcbiAgICAgIHNvdXJjZUNvbHVtbjogdGhpcy5qb2luRHJhZnQuc291cmNlQ29sdW1uLFxuICAgICAgdGFyZ2V0Q29sdW1uOiB0aGlzLmpvaW5EcmFmdC50YXJnZXRDb2x1bW4sXG4gICAgICBvcGVyYXRvcjogdGhpcy5qb2luRHJhZnQub3BlcmF0b3IsXG4gICAgfTtcbiAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLmNvbmZpZy5nZW5lcmF0ZWQuam9pbnNdO1xuICAgIGlmICh0aGlzLmpvaW5FZGl0SW5kZXggPT09IG51bGwpIHtcbiAgICAgIGl0ZW1zLnB1c2gobmV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zW3RoaXMuam9pbkVkaXRJbmRleF0gPSBuZXh0O1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuam9pbnMgPSB0aGlzLmRlZHVwbGljYXRlQnlLZXkoaXRlbXMsIChpdGVtKSA9PlxuICAgICAgW2l0ZW0uc291cmNlQ29sdW1uLCBpdGVtLnRhcmdldENvbHVtbiwgaXRlbS5vcGVyYXRvcl0uam9pbihcInxcIilcbiAgICApO1xuICAgIHRoaXMuY2xvc2VKb2luTW9kYWwoKTtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgb3BlblNvcnRNb2RhbChpbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQgPVxuICAgICAgdHlwZW9mIGluZGV4ID09PSBcIm51bWJlclwiID8gdGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvcnRpbmdbaW5kZXhdIDogbnVsbDtcbiAgICB0aGlzLnNvcnRTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5vcGVuU29ydE1vZGFsKGN1cnJlbnQsIHR5cGVvZiBpbmRleCA9PT0gXCJudW1iZXJcIiA/IGluZGV4IDogbnVsbCk7XG4gIH1cbiAgY2xvc2VTb3J0TW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5zb3J0U2VhcmNoID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuY2xvc2VTb3J0TW9kYWwoKTtcbiAgfVxuICBzZWxlY3RTb3J0Q29sdW1uKHNvcnRTZWxlY3Rpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9IHRoaXMucGFyc2VTb3J0U2VsZWN0aW9uSWQoc29ydFNlbGVjdGlvbklkKTtcbiAgICBjb25zdCBpc1NhbWVTZWxlY3Rpb24gPVxuICAgICAgdGhpcy5zb3J0RHJhZnQuY29sdW1uID09PSBuZXh0LmNvbHVtbiAmJlxuICAgICAgKHRoaXMuc29ydERyYWZ0LmZ1bmN0aW9uTmFtZSB8fCBFTVBUWV9WQUxVRSkgPT09IG5leHQuZnVuY3Rpb25OYW1lO1xuXG4gICAgdGhpcy5zb3J0RHJhZnQuY29sdW1uID0gaXNTYW1lU2VsZWN0aW9uID8gRU1QVFlfVkFMVUUgOiBuZXh0LmNvbHVtbjtcbiAgICB0aGlzLnNvcnREcmFmdC5mdW5jdGlvbk5hbWUgPSBpc1NhbWVTZWxlY3Rpb25cbiAgICAgID8gRU1QVFlfVkFMVUVcbiAgICAgIDogbmV4dC5mdW5jdGlvbk5hbWU7XG4gIH1cbiAgb25Tb3J0U2VsZWN0ZWRJZHNDaGFuZ2UoaWRzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkSWQgPSBpZHMuYXQoLTEpO1xuICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IHRoaXMuc29ydFBpY2tsaXN0SXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gc2VsZWN0ZWRJZCk7XG5cbiAgICBpZiAoIXNlbGVjdGVkSXRlbSkge1xuICAgICAgdGhpcy5zb3J0RHJhZnQuY29sdW1uID0gRU1QVFlfVkFMVUU7XG4gICAgICB0aGlzLnNvcnREcmFmdC5mdW5jdGlvbk5hbWUgPSBFTVBUWV9WQUxVRTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdFNvcnRDb2x1bW4oc2VsZWN0ZWRJdGVtLnNlbGVjdGlvbklkKTtcbiAgfVxuICBzYXZlU29ydCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FuU2F2ZVNvcnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV4dDogRHluYW1pY1ZpZXdCdWlsZGVyU29ydCA9IHtcbiAgICAgIGNvbHVtbjogdGhpcy5zb3J0RHJhZnQuY29sdW1uLFxuICAgICAgZnVuY3Rpb25OYW1lOiB0aGlzLnNvcnREcmFmdC5mdW5jdGlvbk5hbWUgfHwgdW5kZWZpbmVkLFxuICAgICAgZGlyZWN0aW9uOiB0aGlzLnNvcnREcmFmdC5kaXJlY3Rpb24sXG4gICAgfTtcbiAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc29ydGluZ107XG4gICAgaWYgKHRoaXMuc29ydEVkaXRJbmRleCA9PT0gbnVsbCkge1xuICAgICAgaXRlbXMucHVzaChuZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXNbdGhpcy5zb3J0RWRpdEluZGV4XSA9IG5leHQ7XG4gICAgfVxuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3J0aW5nID0gdGhpcy5kZWR1cGxpY2F0ZUJ5S2V5KGl0ZW1zLCAoaXRlbSkgPT5cbiAgICAgIFtpdGVtLmNvbHVtbiwgaXRlbS5mdW5jdGlvbk5hbWUgPz8gRU1QVFlfVkFMVUUsIGl0ZW0uZGlyZWN0aW9uXS5qb2luKFwifFwiKVxuICAgICk7XG4gICAgdGhpcy5jbG9zZVNvcnRNb2RhbCgpO1xuICAgIHRoaXMuYWZ0ZXJCdWlsZGVyTXV0YXRpb24oKTtcbiAgfVxuICBvcGVuRmlsdGVyTW9kYWwoaW5kZXg/OiBudW1iZXIpOiB2b2lkIHsgLy8gTk9TT05BUiAtIGNvbXBsZXhpdHk6IGV4dHJhY3Rpb24gd291bGQgcmlzayBiZWhhdmlvciBjaGFuZ2VcbiAgICBjb25zdCBjdXJyZW50ID1cbiAgICAgIHR5cGVvZiBpbmRleCA9PT0gXCJudW1iZXJcIiA/IHRoaXMuY29uZmlnLmdlbmVyYXRlZC5maWx0ZXJzW2luZGV4XSA6IG51bGw7XG4gICAgdGhpcy5maWx0ZXJTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5vcGVuRmlsdGVyTW9kYWwoY3VycmVudCwgdHlwZW9mIGluZGV4ID09PSBcIm51bWJlclwiID8gaW5kZXggOiBudWxsKTtcbiAgICB0aGlzLnN5bmNTZWxlY3RlZEZpbHRlck1vZGVJdGVtcygpO1xuICB9XG4gIGNsb3NlRmlsdGVyTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5jbG9zZUZpbHRlck1vZGFsKCk7XG4gICAgdGhpcy5zeW5jU2VsZWN0ZWRGaWx0ZXJNb2RlSXRlbXMoKTtcbiAgfVxuICBzZWxlY3RGaWx0ZXJDb2x1bW4oY29sdW1uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbiA9XG4gICAgICB0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbiA9PT0gY29sdW1uID8gRU1QVFlfVkFMVUUgOiBjb2x1bW47XG4gICAgdGhpcy5yZXNldEZpbHRlckRyYWZ0VmFsdWVTdGF0ZSgpO1xuICB9XG4gIG9uRmlsdGVyTW9kYWxTZWxlY3RlZElkc0NoYW5nZShpZHM6IG51bWJlcltdKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dFNlbGVjdGVkSWQgPSBpZHMuYXQoLTEpO1xuICAgIGNvbnN0IG5leHRDb2x1bW4gPVxuICAgICAgdHlwZW9mIG5leHRTZWxlY3RlZElkID09PSBcIm51bWJlclwiXG4gICAgICAgID8gdGhpcy5yZXNvbHZlQ29sdW1uUGlja2xpc3RDb2x1bW4obmV4dFNlbGVjdGVkSWQpID8/IEVNUFRZX1ZBTFVFXG4gICAgICAgIDogRU1QVFlfVkFMVUU7XG5cbiAgICB0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbiA9IG5leHRDb2x1bW47XG4gICAgdGhpcy5yZXNldEZpbHRlckRyYWZ0VmFsdWVTdGF0ZSgpO1xuICB9XG4gIHByaXZhdGUgcmVzZXRGaWx0ZXJEcmFmdFZhbHVlU3RhdGUoKTogdm9pZCB7XG4gICAgY29uc3QgZmlyc3RPcGVyYXRvciA9XG4gICAgICB0aGlzLmZpbHRlck9wZXJhdG9yT3B0aW9uc1swXT8udmFsdWUgPz8gREVGQVVMVF9GSUxURVJfT1BFUkFUT1I7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZmlsdGVyRHJhZnQub3BlcmF0b3IgPSBmaXJzdE9wZXJhdG9yO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmZpbHRlckRyYWZ0LnZhbHVlID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZmlsdGVyRHJhZnQudmFsdWVzVGV4dCA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmZpbHRlckRyYWZ0LmJldHdlZW5TdGFydCA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmZpbHRlckRyYWZ0LmJldHdlZW5FbmQgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5maWx0ZXJEcmFmdC5wYXJhbWV0ZXJOYW1lID0gRU1QVFlfVkFMVUU7XG4gIH1cbiAgZ29Ub0ZpbHRlck1vZGFsU3RlcChzdGVwOiBGaWx0ZXJNb2RhbFN0ZXApOiB2b2lkIHtcbiAgICBpZiAoc3RlcCA9PT0gXCJzZWxlY3RcIikge1xuICAgICAgdGhpcy5maWx0ZXJTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZ29Ub0ZpbHRlck1vZGFsU3RlcChzdGVwLCB0aGlzLmZpbHRlck1vZGFsQ2FuUHJvY2VlZCwgdGhpcy5maWx0ZXJNb2RhbENhblJldmlldyk7XG4gIH1cbiAgYWR2YW5jZUZpbHRlck1vZGFsU3RlcCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5maWx0ZXJNb2RhbFNlbGVjdGlvblN0ZXBBY3RpdmUpIHtcbiAgICAgIHRoaXMuZ29Ub0ZpbHRlck1vZGFsU3RlcChcImNvbmZpZ3VyZVwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWx0ZXJNb2RhbENvbmZpZ3VyYXRpb25TdGVwQWN0aXZlKSB7XG4gICAgICB0aGlzLmdvVG9GaWx0ZXJNb2RhbFN0ZXAoXCJyZXZpZXdcIik7XG4gICAgfVxuICB9XG4gIG9uRmlsdGVyVmFsdWVUeXBlQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyRHJhZnQudmFsdWUgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlc1RleHQgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LmJldHdlZW5TdGFydCA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuZmlsdGVyRHJhZnQuYmV0d2VlbkVuZCA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuZmlsdGVyRHJhZnQucGFyYW1ldGVyTmFtZSA9IEVNUFRZX1ZBTFVFO1xuICB9XG4gIG9uRmlsdGVyT3BlcmF0b3JDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJEcmFmdC52YWx1ZSA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuZmlsdGVyRHJhZnQudmFsdWVzVGV4dCA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuZmlsdGVyRHJhZnQuYmV0d2VlblN0YXJ0ID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5maWx0ZXJEcmFmdC5iZXR3ZWVuRW5kID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5maWx0ZXJEcmFmdC5wYXJhbWV0ZXJOYW1lID0gRU1QVFlfVkFMVUU7XG5cbiAgICBpZiAoIXRoaXMuZmlsdGVyTmVlZHNWYWx1ZSkge1xuICAgICAgdGhpcy5maWx0ZXJEcmFmdC52YWx1ZVR5cGUgPSBERUZBVUxUX0ZJTFRFUl9WQUxVRV9UWVBFO1xuICAgIH1cbiAgfVxuICBvbkZpbHRlck1vZGVDaGFuZ2UobW9kZTogRmlsdGVyTW9kYWxNb2RlKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZmlsdGVyTW9kYWxNb2RlID0gbW9kZTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5maWx0ZXJEcmFmdC5tb2RlID0gbW9kZTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5maWx0ZXJEcmFmdC5jb2x1bW4gPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5maWx0ZXJEcmFmdC5vcGVyYXRvciA9IERFRkFVTFRfRklMVEVSX09QRVJBVE9SO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmZpbHRlckRyYWZ0LnZhbHVlVHlwZSA9IERFRkFVTFRfRklMVEVSX1ZBTFVFX1RZUEU7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZmlsdGVyRHJhZnQudmFsdWUgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5maWx0ZXJEcmFmdC52YWx1ZXNUZXh0ID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZmlsdGVyRHJhZnQuYmV0d2VlblN0YXJ0ID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZmlsdGVyRHJhZnQuYmV0d2VlbkVuZCA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmZpbHRlckRyYWZ0LnBhcmFtZXRlck5hbWUgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5maWx0ZXJEcmFmdC5kb21haW5FeHByZXNzaW9uID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZmlsdGVyTW9kYWxTdGVwID0gXCJzZWxlY3RcIjtcbiAgICB0aGlzLnN5bmNTZWxlY3RlZEZpbHRlck1vZGVJdGVtcygpO1xuICB9XG4gIG9uRmlsdGVyTW9kYWxUaW1lbGluZVN0ZXBTZWxlY3QoZXZlbnQ6IFRpbWVsaW5lU3RlcFNlbGVjdEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50Lml0ZW0uaWQgPT09IFwicmV2aWV3XCIpIHtcbiAgICAgIHRoaXMuZ29Ub0ZpbHRlck1vZGFsU3RlcChcInJldmlld1wiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmdvVG9GaWx0ZXJNb2RhbFN0ZXAoZXZlbnQuaXRlbS5pZCA9PT0gXCJjb25maWd1cmVcIiA/IFwiY29uZmlndXJlXCIgOiBcInNlbGVjdFwiKTtcbiAgfVxuICBzYXZlRmlsdGVyKCk6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLmJ1aWxkRmlsdGVyRnJvbURyYWZ0KCk7XG5cbiAgICBpZiAoIW5leHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmlsdGVyc107XG4gICAgaWYgKHRoaXMuZmlsdGVyRWRpdEluZGV4ID09PSBudWxsKSB7XG4gICAgICBpdGVtcy5wdXNoKG5leHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtc1t0aGlzLmZpbHRlckVkaXRJbmRleF0gPSBuZXh0O1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmlsdGVycyA9IGl0ZW1zO1xuICAgIHRoaXMuY2xvc2VGaWx0ZXJNb2RhbCgpO1xuICAgIHRoaXMuYWZ0ZXJCdWlsZGVyTXV0YXRpb24oKTtcbiAgfVxuICBvblNvdXJjZUFsaWFzQ2hhbmdlKGluZGV4OiBudW1iZXIsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvdXJjZXNbaW5kZXhdO1xuICAgIGlmICghY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0YWJsZSA9IHRoaXMucmVzb2x2ZVRhYmxlT3B0aW9uKGN1cnJlbnQudGFibGUpO1xuICAgIGN1cnJlbnQuYWxpYXMgPVxuICAgICAgdmFsdWUudHJpbSgpIHx8ICh0YWJsZSA/IHRoaXMuYnVpbGRBbGlhc0ZvclRhYmxlKHRhYmxlKSA6IGN1cnJlbnQuYWxpYXMpO1xuICAgIHRoaXMuZW1pdENvbmZpZ0NoYW5nZSgpO1xuICAgIHRoaXMuZmxvd1NlcnZpY2Uuc2NoZWR1bGVGbG93QXJyb3dSZWZyZXNoKHRoaXMuZmxvd0NvbnRleHQpO1xuICB9XG4gIHJlbW92ZVNvdXJjZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvdXJjZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgcmVtb3ZlSm9pbihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmpvaW5zLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIHJlbW92ZUdyb3VwQnkoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5LnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIHJlbW92ZUZpZWxkKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmllbGRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIHJlbW92ZVNvcnQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3J0aW5nLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIHJlbW92ZUZpbHRlcihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpbHRlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgY2xlYXJTb3VyY2VzKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzID0gW107XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIGNsZWFySm9pbnMoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmpvaW5zID0gW107XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIGNsZWFyR3JvdXBCeSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZ3JvdXBCeSA9IFtdO1xuICAgIHRoaXMuYWZ0ZXJCdWlsZGVyTXV0YXRpb24oKTtcbiAgfVxuICBjbGVhckZpZWxkcygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmllbGRzID0gW107XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIGNsZWFyU29ydGluZygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc29ydGluZyA9IFtdO1xuICAgIHRoaXMuYWZ0ZXJCdWlsZGVyTXV0YXRpb24oKTtcbiAgfVxuICBjbGVhckZpbHRlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpbHRlcnMgPSBbXTtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgaGFuZGxlU2F2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNhbml0aXplQnVpbGRlcigpO1xuICAgIHRoaXMuc2F2ZS5lbWl0KGNyZWF0ZUR5bmFtaWNWaWV3QnVpbGRlckNvbmZpZyh0aGlzLmNvbmZpZykpO1xuICB9XG4gIHByaXZhdGUgYWZ0ZXJCdWlsZGVyTXV0YXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zYW5pdGl6ZUJ1aWxkZXIoKTtcbiAgICB0aGlzLmVtaXRDb25maWdDaGFuZ2UoKTtcbiAgICB0aGlzLmZsb3dTZXJ2aWNlLnNjaGVkdWxlRmxvd0Fycm93UmVmcmVzaCh0aGlzLmZsb3dDb250ZXh0KTtcbiAgfVxuICBwcml2YXRlIGVtaXRDb25maWdDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWdDaGFuZ2UuZW1pdChjcmVhdGVEeW5hbWljVmlld0J1aWxkZXJDb25maWcodGhpcy5jb25maWcpKTtcbiAgfVxuICBwcml2YXRlIHNhbml0aXplQnVpbGRlcigpOiB2b2lkIHtcbiAgICBjb25zdCB0YWJsZXNCeUlkID0gbmV3IE1hcChcbiAgICAgICh0aGlzLmNvbmZpZy5hdmFpbGFibGVEYXRhLnRhYmxlcyA/PyBbXSkubWFwKChpdGVtKSA9PiBbaXRlbS52YWx1ZSwgaXRlbV0pXG4gICAgKTtcbiAgICBjb25zdCBzZWxlY3RlZFNvdXJjZXMgPSB0aGlzLmRlZHVwbGljYXRlQnlLZXkoXG4gICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc291cmNlcy5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICAgIHRhYmxlc0J5SWQuaGFzKGl0ZW0udGFibGUpXG4gICAgICApLFxuICAgICAgKGl0ZW0pID0+IGl0ZW0udGFibGVcbiAgICApLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgIHRhYmxlOiBpdGVtLnRhYmxlLFxuICAgICAgYWxpYXM6XG4gICAgICAgIGl0ZW0uYWxpYXM/LnRyaW0oKSB8fFxuICAgICAgICB0aGlzLmJ1aWxkQWxpYXNGb3JUYWJsZShcbiAgICAgICAgICB0YWJsZXNCeUlkLmdldChpdGVtLnRhYmxlKSBhcyBEeW5hbWljVmlld0J1aWxkZXJUYWJsZU9wdGlvblxuICAgICAgICApLFxuICAgICAgc2NoZW1hOiBpdGVtLnNjaGVtYSA/PyB0YWJsZXNCeUlkLmdldChpdGVtLnRhYmxlKT8uc2NoZW1hLFxuICAgICAgbGFiZWw6XG4gICAgICAgIGl0ZW0ubGFiZWwgPz9cbiAgICAgICAgdGFibGVzQnlJZC5nZXQoaXRlbS50YWJsZSk/LmRpc3BsYXlOYW1lID8/XG4gICAgICAgIHRhYmxlc0J5SWQuZ2V0KGl0ZW0udGFibGUpPy50ZXh0LFxuICAgIH0pKTtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc291cmNlcyA9IHNlbGVjdGVkU291cmNlcztcbiAgICBjb25zdCBzZWxlY3RlZFRhYmxlSWRzID0gbmV3IFNldChzZWxlY3RlZFNvdXJjZXMubWFwKChpdGVtKSA9PiBpdGVtLnRhYmxlKSk7XG4gICAgY29uc3QgYXZhaWxhYmxlQ29sdW1ucyA9ICh0aGlzLmNvbmZpZy5hdmFpbGFibGVEYXRhLmNvbHVtbnMgPz8gW10pLmZpbHRlcihcbiAgICAgIChpdGVtKSA9PiBzZWxlY3RlZFRhYmxlSWRzLmhhcyhpdGVtLnRhYmxlKVxuICAgICk7XG4gICAgY29uc3QgYXZhaWxhYmxlQ29sdW1uTWFwID0gbmV3IE1hcChcbiAgICAgIGF2YWlsYWJsZUNvbHVtbnMubWFwKChpdGVtKSA9PiBbaXRlbS52YWx1ZSwgaXRlbV0pXG4gICAgKTtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZ3JvdXBCeSA9IHRoaXMuZGVkdXBsaWNhdGVCeUtleShcbiAgICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5LmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBhdmFpbGFibGVDb2x1bW5NYXAuZ2V0KGl0ZW0pO1xuICAgICAgICByZXR1cm4gISFjb2x1bW4gJiYgY29sdW1uLmlzQWdncmVnYXRhYmxlICE9PSBmYWxzZTtcbiAgICAgIH0pLFxuICAgICAgKGl0ZW0pID0+IGl0ZW1cbiAgICApO1xuICAgIGNvbnN0IGdyb3VwQnlTZXQgPSBuZXcgU2V0KHRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5KTtcbiAgICBjb25zdCBub3JtYWxpemVkRmllbGRzID0gdGhpcy5tZXJnZUxlZ2FjeUZ1bmN0aW9uc0ludG9GaWVsZHMoXG4gICAgICB0aGlzLm5vcm1hbGl6ZWRGaWVsZHMsXG4gICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZnVuY3Rpb25zXG4gICAgKTtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmllbGRzID0gdGhpcy5kZWR1cGxpY2F0ZUJ5S2V5KFxuICAgICAgbm9ybWFsaXplZEZpZWxkcy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gYXZhaWxhYmxlQ29sdW1uTWFwLmdldChpdGVtLmNvbHVtbik7XG4gICAgICAgIGlmICghY29sdW1uKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jb25maWcuZ2VuZXJhdGVkLmdyb3VwQnkubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdyb3VwQnlTZXQuaGFzKGl0ZW0uY29sdW1uKSB8fCAoISFpdGVtLmZ1bmN0aW9uPy5mdW5jdGlvbk5hbWUgJiYgY29sdW1uLmlzQWdncmVnYXRhYmxlICE9PSBmYWxzZSk7XG4gICAgICB9KSxcbiAgICAgIChpdGVtKSA9PiBgJHtpdGVtLmNvbHVtbn18JHtpdGVtLmZ1bmN0aW9uPy5mdW5jdGlvbk5hbWUgPz8gRU1QVFlfVkFMVUV9YFxuICAgICk7XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZ1bmN0aW9ucyA9IHRoaXMuZXh0cmFjdEZ1bmN0aW9uc0Zyb21GaWVsZHMoXG4gICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmllbGRzLm1hcCgoaXRlbSkgPT4gdGhpcy5ub3JtYWxpemVHZW5lcmF0ZWRGaWVsZChpdGVtKSlcbiAgICApO1xuICAgIGNvbnN0IHNvcnRBbGxvd2VkID0gbmV3IFNldChcbiAgICAgIHRoaXMuc29ydFNlbGVjdGFibGVJdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0uaWQpXG4gICAgKTtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc29ydGluZyA9IHRoaXMuZGVkdXBsaWNhdGVCeUtleShcbiAgICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3J0aW5nLmZpbHRlcigoaXRlbSkgPT5cbiAgICAgICAgc29ydEFsbG93ZWQuaGFzKFxuICAgICAgICAgIHRoaXMuYnVpbGRTb3J0U2VsZWN0aW9uSWQoaXRlbS5jb2x1bW4sIGl0ZW0uZnVuY3Rpb25OYW1lID8/IEVNUFRZX1ZBTFVFKVxuICAgICAgICApXG4gICAgICApLFxuICAgICAgKGl0ZW0pID0+IGAke2l0ZW0uY29sdW1ufXwke2l0ZW0uZnVuY3Rpb25OYW1lID8/IEVNUFRZX1ZBTFVFfXwke2l0ZW0uZGlyZWN0aW9ufWBcbiAgICApO1xuICAgIGlmIChzZWxlY3RlZFNvdXJjZXMubGVuZ3RoIDwgMikge1xuICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmpvaW5zID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5qb2lucyA9IHRoaXMuZGVkdXBsaWNhdGVCeUtleShcbiAgICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmpvaW5zLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGF2YWlsYWJsZUNvbHVtbk1hcC5nZXQoaXRlbS5zb3VyY2VDb2x1bW4pO1xuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGF2YWlsYWJsZUNvbHVtbk1hcC5nZXQoaXRlbS50YXJnZXRDb2x1bW4pO1xuICAgICAgICAgIHJldHVybiAhIXNvdXJjZSAmJiAhIXRhcmdldCAmJiBzb3VyY2UudGFibGUgIT09IHRhcmdldC50YWJsZTtcbiAgICAgICAgfSksXG4gICAgICAgIChpdGVtKSA9PiBgJHtpdGVtLnNvdXJjZUNvbHVtbn18JHtpdGVtLnRhcmdldENvbHVtbn18JHtpdGVtLm9wZXJhdG9yfWBcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5maWx0ZXJzID0gdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpbHRlcnMuZmlsdGVyKFxuICAgICAgKGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKGl0ZW0udmFsdWVUeXBlID09PSBGSUxURVJfTU9ERV9ET01BSU4pIHtcbiAgICAgICAgICByZXR1cm4gISFpdGVtLmRvbWFpbkV4cHJlc3Npb24/LnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXZhaWxhYmxlQ29sdW1uTWFwLmhhcyhpdGVtLmNvbHVtbik7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVQcmV2aWV3Q29sdW1ucygpOiBQcmV2aWV3Q29sdW1uTGlrZVtdIHtcbiAgICBjb25zdCBwcmV2aWV3Q29sdW1ucyA9IChcbiAgICAgICh0aGlzLmNvbmZpZy5wcmV2aWV3Py5jb2x1bW5zID8/IFtdKSBhcyBQcmV2aWV3Q29sdW1uTGlrZVtdXG4gICAgKVxuICAgICAgLmZpbHRlcigoaXRlbSkgPT4gISFpdGVtPy5maWVsZClcbiAgICAgIC5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgIGZpZWxkOiBpdGVtLmZpZWxkLFxuICAgICAgICBoZWFkZXI6IGl0ZW0uaGVhZGVyID8/IGl0ZW0uZmllbGQsXG4gICAgICAgIHR5cGU6IGl0ZW0udHlwZSxcbiAgICAgIH0pKTtcbiAgICBpZiAocHJldmlld0NvbHVtbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gcHJldmlld0NvbHVtbnM7XG4gICAgfVxuICAgIGNvbnN0IGdlbmVyYXRlZENvbHVtbnMgPSBbXG4gICAgICAuLi50aGlzLm5vcm1hbGl6ZWRGaWVsZHMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICBmaWVsZDpcbiAgICAgICAgICBpdGVtLmZ1bmN0aW9uPy5hbGlhcz8udHJpbSgpIHx8IC8vIE5PU09OQVJcbiAgICAgICAgICBpdGVtLmFsaWFzPy50cmltKCkgfHwgLy8gTk9TT05BUlxuICAgICAgICAgIGl0ZW0uY29sdW1uLFxuICAgICAgICBoZWFkZXI6XG4gICAgICAgICAgaXRlbS5mdW5jdGlvbj8uYWxpYXM/LnRyaW0oKSB8fCAvLyBOT1NPTkFSXG4gICAgICAgICAgaXRlbS5hbGlhcz8udHJpbSgpIHx8IC8vIE5PU09OQVJcbiAgICAgICAgICAoaXRlbS5mdW5jdGlvblxuICAgICAgICAgICAgPyBgJHt0aGlzLnJlc29sdmVGdW5jdGlvbkxhYmVsKGl0ZW0uZnVuY3Rpb24uZnVuY3Rpb25OYW1lKX0gJHt0aGlzLnJlc29sdmVDb2x1bW5MYWJlbChpdGVtLmNvbHVtbil9YFxuICAgICAgICAgICAgOiB0aGlzLnJlc29sdmVDb2x1bW5MYWJlbChpdGVtLmNvbHVtbikpLFxuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgIH0pKSxcbiAgICBdO1xuICAgIHJldHVybiB0aGlzLmRlZHVwbGljYXRlQnlLZXkoZ2VuZXJhdGVkQ29sdW1ucywgKGl0ZW0pID0+IGl0ZW0uZmllbGQpO1xuICB9XG4gIHByaXZhdGUgYnVpbGRUYWJsZVNlbGVjdGlvblJvd3MoXG4gICAgc2VsZWN0ZWRJZHM6IHN0cmluZ1tdLFxuICAgIHNlYXJjaDogc3RyaW5nXG4gICk6IFNlbGVjdGlvblJvd1tdIHtcbiAgICByZXR1cm4gKHRoaXMuY29uZmlnLmF2YWlsYWJsZURhdGEudGFibGVzID8/IFtdKVxuICAgICAgLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IHRoaXMucmVzb2x2ZVRhYmxlRGlzcGxheVBhcnRzKGl0ZW0udmFsdWUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlkOiBpdGVtLnZhbHVlLFxuICAgICAgICAgIG5hbWU6IHBhcnRzLnRhYmxlTGFiZWwsXG4gICAgICAgICAgZGJMYWJlbDogcGFydHMuZGJMYWJlbCxcbiAgICAgICAgICB0YWJsZUxhYmVsOiBwYXJ0cy50YWJsZUxhYmVsLFxuICAgICAgICAgIHBhdGhUeXBlOiBcInRhYmxlXCIgYXMgY29uc3QsXG4gICAgICAgICAgcHJlZml4OiBwYXJ0cy5kYkxhYmVsLFxuICAgICAgICAgIG1ldGE6IGl0ZW0uZGVzY3JpcHRpb24gfHwgaXRlbS5kaXNwbGF5TmFtZSB8fCBFTVBUWV9WQUxVRSwgLy8gTk9TT05BUlxuICAgICAgICAgIG5vdGU6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgc2VsZWN0ZWQ6IHNlbGVjdGVkSWRzLmluY2x1ZGVzKGl0ZW0udmFsdWUpLFxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgICB0aGlzLm1hdGNoZXNTZWFyY2goW2l0ZW0ucHJlZml4ID8/IEVNUFRZX1ZBTFVFLCBpdGVtLm5hbWUsIGl0ZW0ubWV0YSwgaXRlbS5ub3RlID8/IEVNUFRZX1ZBTFVFXSwgc2VhcmNoKVxuICAgICAgKTtcbiAgfVxuICBwcml2YXRlIGJ1aWxkQ29sdW1uU2VsZWN0aW9uUm93cyhcbiAgICBpdGVtczogRHluYW1pY1ZpZXdCdWlsZGVyQ29sdW1uT3B0aW9uW10sXG4gICAgc2VsZWN0ZWRJZHM6IHN0cmluZ1tdLFxuICAgIHNlYXJjaDogc3RyaW5nLFxuICAgIG11bHRpcGxlID0gdHJ1ZVxuICApOiBTZWxlY3Rpb25Sb3dbXSB7XG4gICAgcmV0dXJuIGl0ZW1zXG4gICAgICAubWFwKChpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gdGhpcy5yZXNvbHZlQ29sdW1uUGFydHMoaXRlbS52YWx1ZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaWQ6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgbmFtZTogcGFydHMuZmllbGRMYWJlbCxcbiAgICAgICAgICBkYkxhYmVsOiBwYXJ0cy5kYkxhYmVsLFxuICAgICAgICAgIHRhYmxlTGFiZWw6IHBhcnRzLnRhYmxlTGFiZWwsXG4gICAgICAgICAgcGF0aFR5cGU6IFwiY29sdW1uXCIgYXMgY29uc3QsXG4gICAgICAgICAgcHJlZml4OiBwYXJ0cy50YWJsZUxhYmVsLFxuICAgICAgICAgIG1ldGE6IGl0ZW0uZGF0YVR5cGUsXG4gICAgICAgICAgbm90ZTogaXRlbS5mdWxsTmFtZSxcbiAgICAgICAgICBzZWxlY3RlZDogbXVsdGlwbGVcbiAgICAgICAgICAgID8gc2VsZWN0ZWRJZHMuaW5jbHVkZXMoaXRlbS52YWx1ZSlcbiAgICAgICAgICAgIDogc2VsZWN0ZWRJZHNbMF0gPT09IGl0ZW0udmFsdWUsXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICAgIHRoaXMubWF0Y2hlc1NlYXJjaChbaXRlbS5wcmVmaXggPz8gRU1QVFlfVkFMVUUsIGl0ZW0ubmFtZSwgaXRlbS5tZXRhLCBpdGVtLm5vdGUgPz8gRU1QVFlfVkFMVUVdLCBzZWFyY2gpXG4gICAgICApO1xuICB9XG4gIHByaXZhdGUgYnVpbGRDb2x1bW5QaWNrbGlzdEl0ZW1zKFxuICAgIGl0ZW1zOiBEeW5hbWljVmlld0J1aWxkZXJDb2x1bW5PcHRpb25bXVxuICApOiBDb2x1bW5QaWNrbGlzdEl0ZW1bXSB7XG4gICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgcGlja2xpc3RJZCA9IHRoaXMucmVzb2x2ZUNvbHVtblBpY2tsaXN0SWQoaXRlbS52YWx1ZSk7XG4gICAgICBjb25zdCBwYXJ0cyA9IHRoaXMucmVzb2x2ZUNvbHVtblBhcnRzKGl0ZW0udmFsdWUpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogcGlja2xpc3RJZCA/PyAwLFxuICAgICAgICB0aXRsZTogYCR7cGFydHMudGFibGVMYWJlbH0uJHtwYXJ0cy5maWVsZExhYmVsfWAsXG4gICAgICAgIHRpdGxlUHJlZml4OiBwYXJ0cy50YWJsZUxhYmVsLFxuICAgICAgICB0aXRsZVN1ZmZpeDogcGFydHMuZmllbGRMYWJlbCxcbiAgICAgICAgdGl0bGVQcmVmaXhDb2xvcjogVklTVUFMX1NRTF9UQUJMRV9DT0xPUixcbiAgICAgICAgdGl0bGVTdWZmaXhDb2xvcjogVklTVUFMX1NRTF9GSUVMRF9DT0xPUixcbiAgICAgICAgYmFkZ2U6IGl0ZW0uZGF0YVR5cGUgPz8gRU1QVFlfVkFMVUUsXG4gICAgICAgIGJhZGdlQ29sb3I6IFBJQ0tMSVNUX0RBVEFfVFlQRV9CQURHRV9DT0xPUixcbiAgICAgICAgY29sdW1uOiBpdGVtLnZhbHVlLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIGJ1aWxkVGFibGVQaWNrbGlzdEl0ZW1zKFxuICAgIGl0ZW1zOiBEeW5hbWljVmlld0J1aWxkZXJUYWJsZU9wdGlvbltdXG4gICk6IFRhYmxlUGlja2xpc3RJdGVtW10ge1xuICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHRoaXMucmVzb2x2ZVRhYmxlRGlzcGxheVBhcnRzKGl0ZW0udmFsdWUpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogaW5kZXggKyAxLFxuICAgICAgICB0aXRsZTogYCR7cGFydHMuZGJMYWJlbH0uJHtwYXJ0cy50YWJsZUxhYmVsfWAsXG4gICAgICAgIHRpdGxlUHJlZml4OiBwYXJ0cy5kYkxhYmVsLFxuICAgICAgICB0aXRsZVN1ZmZpeDogcGFydHMudGFibGVMYWJlbCxcbiAgICAgICAgdGl0bGVQcmVmaXhDb2xvcjogVklTVUFMX1NRTF9UQUJMRV9DT0xPUixcbiAgICAgICAgdGl0bGVTdWZmaXhDb2xvcjogVklTVUFMX1NRTF9GSUVMRF9DT0xPUixcbiAgICAgICAgYmFkZ2U6XG4gICAgICAgICAgaXRlbS5kaXNwbGF5TmFtZSAmJiBpdGVtLmRpc3BsYXlOYW1lICE9PSBwYXJ0cy50YWJsZUxhYmVsXG4gICAgICAgICAgICA/IGl0ZW0uZGlzcGxheU5hbWVcbiAgICAgICAgICAgIDogRU1QVFlfVkFMVUUsXG4gICAgICAgIGJhZGdlQ29sb3I6IFBJQ0tMSVNUX0RBVEFfVFlQRV9CQURHRV9DT0xPUixcbiAgICAgICAgdGFibGU6IGl0ZW0udmFsdWUsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZUNvbHVtbnNGcm9tUGlja2xpc3RJZHMoaWRzOiBudW1iZXJbXSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gaWRzXG4gICAgICAubWFwKChpZCkgPT4gdGhpcy5yZXNvbHZlQ29sdW1uUGlja2xpc3RDb2x1bW4oaWQpKVxuICAgICAgLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgc3RyaW5nID0+ICEhaXRlbSk7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlTGFzdENvbHVtbkZyb21QaWNrbGlzdElkcyhpZHM6IG51bWJlcltdKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMucmVzb2x2ZUNvbHVtbnNGcm9tUGlja2xpc3RJZHMoaWRzKTtcbiAgICByZXR1cm4gY29sdW1ucy5hdCgtMSkgPz8gbnVsbDtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVUYWJsZVBpY2tsaXN0SWQodGFibGVWYWx1ZTogc3RyaW5nKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgY29uc3QgaXRlbUluZGV4ID0gKHRoaXMuY29uZmlnLmF2YWlsYWJsZURhdGEudGFibGVzID8/IFtdKS5maW5kSW5kZXgoXG4gICAgICAoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gdGFibGVWYWx1ZVxuICAgICk7XG5cbiAgICByZXR1cm4gaXRlbUluZGV4ID49IDAgPyBpdGVtSW5kZXggKyAxIDogbnVsbDtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVUYWJsZVBpY2tsaXN0VGFibGUoaWQ6IG51bWJlcik6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGl0ZW0gPSAodGhpcy5jb25maWcuYXZhaWxhYmxlRGF0YS50YWJsZXMgPz8gW10pLmZpbmQoXG4gICAgICAoX2VudHJ5LCBpbmRleCkgPT4gaW5kZXggKyAxID09PSBpZFxuICAgICk7XG5cbiAgICByZXR1cm4gaXRlbT8udmFsdWUgPz8gbnVsbDtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVUYWJsZXNGcm9tUGlja2xpc3RJZHMoaWRzOiBudW1iZXJbXSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gaWRzXG4gICAgICAubWFwKChpZCkgPT4gdGhpcy5yZXNvbHZlVGFibGVQaWNrbGlzdFRhYmxlKGlkKSlcbiAgICAgIC5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIHN0cmluZyA9PiAhIWl0ZW0pO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZUNvbHVtblBpY2tsaXN0SWQoY29sdW1uOiBzdHJpbmcpOiBudW1iZXIgfCBudWxsIHtcbiAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLmF2YWlsYWJsZUNvbHVtbnMuZmluZEluZGV4KFxuICAgICAgKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IGNvbHVtblxuICAgICk7XG5cbiAgICByZXR1cm4gaXRlbUluZGV4ID49IDAgPyBpdGVtSW5kZXggKyAxIDogbnVsbDtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVDb2x1bW5QaWNrbGlzdENvbHVtbihpZDogbnVtYmVyKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuYXZhaWxhYmxlQ29sdW1uc1tpZCAtIDFdO1xuICAgIHJldHVybiBpdGVtPy52YWx1ZSA/PyBudWxsO1xuICB9XG4gIHByaXZhdGUgbWF0Y2hlc1NlYXJjaCh2YWx1ZXM6IHN0cmluZ1tdLCBzZWFyY2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTZWFyY2ggPSB0aGlzLm5vcm1hbGl6ZShzZWFyY2gpO1xuICAgIGlmICghbm9ybWFsaXplZFNlYXJjaCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXMuc29tZSgodmFsdWUpID0+XG4gICAgICB0aGlzLm5vcm1hbGl6ZSh2YWx1ZSkuaW5jbHVkZXMobm9ybWFsaXplZFNlYXJjaClcbiAgICApO1xuICB9XG4gIHByaXZhdGUgbm9ybWFsaXplKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBub3JtYWxpemUodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgdG9nZ2xlTXVsdGlwbGVWYWx1ZSh2YWx1ZXM6IHN0cmluZ1tdLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB2YWx1ZXMuaW5jbHVkZXModmFsdWUpXG4gICAgICA/IHZhbHVlcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IHZhbHVlKVxuICAgICAgOiBbLi4udmFsdWVzLCB2YWx1ZV07XG4gIH1cbiAgcHJpdmF0ZSBmaWx0ZXJGdW5jdGlvblNlbGVjdGFibGVDb2x1bW5zKFxuICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nXG4gICk6IER5bmFtaWNWaWV3QnVpbGRlckNvbHVtbk9wdGlvbltdIHtcbiAgICBjb25zdCBzZWxlY3RlZEdyb3VwQnkgPSBuZXcgU2V0KHRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5KTtcbiAgICBjb25zdCBhbGwgPSB0aGlzLmF2YWlsYWJsZUNvbHVtbnMuZmlsdGVyKFxuICAgICAgKGl0ZW0pID0+ICFzZWxlY3RlZEdyb3VwQnkuaGFzKGl0ZW0udmFsdWUpXG4gICAgKTtcbiAgICBpZiAoZnVuY3Rpb25OYW1lID09PSBcImNvdW50XCIpIHtcbiAgICAgIHJldHVybiBhbGw7XG4gICAgfVxuICAgIGlmIChbXCJzdW1cIiwgXCJhdmdcIiwgXCJtaW5cIiwgXCJtYXhcIl0uaW5jbHVkZXMoZnVuY3Rpb25OYW1lLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICByZXR1cm4gYWxsLmZpbHRlcigoaXRlbSkgPT4gdGhpcy5pc051bWVyaWNUeXBlKGl0ZW0uZGF0YVR5cGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFsbDtcbiAgfVxuICBwcml2YXRlIGlzTnVtZXJpY1R5cGUodmFsdWU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNOdW1lcmljVHlwZSh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBpc0RhdGVUeXBlKHZhbHVlPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzRGF0ZVR5cGUodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgZmlsdGVyT3BlcmF0b3JzRm9yQ29sdW1uKFxuICAgIGNvbHVtbjogRHluYW1pY1ZpZXdCdWlsZGVyQ29sdW1uT3B0aW9uXG4gICk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gZmlsdGVyT3BlcmF0b3JzRm9yQ29sdW1uKGNvbHVtbik7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlVGFibGVPcHRpb24oXG4gICAgdmFsdWU6IHN0cmluZ1xuICApOiBEeW5hbWljVmlld0J1aWxkZXJUYWJsZU9wdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuICh0aGlzLmNvbmZpZy5hdmFpbGFibGVEYXRhLnRhYmxlcyA/PyBbXSkuZmluZChcbiAgICAgIChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSB2YWx1ZVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlQ29sdW1uT3B0aW9uKFxuICAgIHZhbHVlOiBzdHJpbmdcbiAgKTogRHluYW1pY1ZpZXdCdWlsZGVyQ29sdW1uT3B0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gKHRoaXMuY29uZmlnLmF2YWlsYWJsZURhdGEuY29sdW1ucyA/PyBbXSkuZmluZChcbiAgICAgIChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSB2YWx1ZVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlVGFibGVMYWJlbCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlVGFibGVPcHRpb24odmFsdWUpPy50ZXh0ID8/IHZhbHVlO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZVRhYmxlRGlzcGxheVBhcnRzKHZhbHVlOiBzdHJpbmcpOiBUYWJsZURpc3BsYXlQYXJ0cyB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnJlc29sdmVUYWJsZU9wdGlvbih2YWx1ZSk7XG4gICAgaWYgKCF0YWJsZSkge1xuICAgICAgY29uc3QgcmF3UGFydHMgPSB2YWx1ZS5zcGxpdChcIi5cIikuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGJMYWJlbDogcmF3UGFydHMubGVuZ3RoID4gMSA/IHJhd1BhcnRzLnNsaWNlKDAsIC0xKS5qb2luKFwiLlwiKSA6IFwiZGJcIixcbiAgICAgICAgdGFibGVMYWJlbDogcmF3UGFydHMuYXQoLTEpID8/IHZhbHVlLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGRiTGFiZWw6IHRhYmxlLnNjaGVtYSB8fCBcImRiXCIsIC8vIE5PU09OQVJcbiAgICAgIHRhYmxlTGFiZWw6IHRhYmxlLnZhbHVlLFxuICAgIH07XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlVGFibGVQYXRoKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhcnRzID0gdGhpcy5yZXNvbHZlVGFibGVEaXNwbGF5UGFydHModmFsdWUpO1xuICAgIHJldHVybiBwYXJ0cy5kYkxhYmVsID8gYCR7cGFydHMuZGJMYWJlbH0uJHtwYXJ0cy50YWJsZUxhYmVsfWAgOiBwYXJ0cy50YWJsZUxhYmVsO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZUNvbHVtblBhcnRzKCAvLyBOT1NPTkFSIC0gY29tcGxleGl0eTogZXh0cmFjdGlvbiB3b3VsZCByaXNrIGJlaGF2aW9yIGNoYW5nZVxuICAgIHZhbHVlOiBzdHJpbmcgfCBEeW5hbWljVmlld0J1aWxkZXJGaWVsZFxuICApOiBDb2x1bW5EaXNwbGF5UGFydHMge1xuICAgIGNvbnN0IGNvbHVtblZhbHVlID1cbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUuY29sdW1uID8/IEVNUFRZX1ZBTFVFO1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMucmVzb2x2ZUNvbHVtbk9wdGlvbihjb2x1bW5WYWx1ZSk7XG4gICAgaWYgKCFjb2x1bW4pIHtcbiAgICAgIGNvbnN0IGZhbGxiYWNrID0gYCR7Y29sdW1uVmFsdWV9YC5zcGxpdChcIi5cIikuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGJMYWJlbDogZmFsbGJhY2subGVuZ3RoID49IE1JTl9QQVJUU19GT1JfREIgPyBmYWxsYmFjay5zbGljZSgwLCBEQl9QQVJUU19PRkZTRVQpLmpvaW4oXCIuXCIpIDogRU1QVFlfVkFMVUUsXG4gICAgICAgIHRhYmxlTGFiZWw6IGZhbGxiYWNrLmxlbmd0aCA+PSBNSU5fUEFSVFNfRk9SX1RBQkxFID8gZmFsbGJhY2tbZmFsbGJhY2subGVuZ3RoIC0gTUlOX1BBUlRTX0ZPUl9UQUJMRV0gOiBjb2x1bW5WYWx1ZSxcbiAgICAgICAgZmllbGRMYWJlbDogZmFsbGJhY2suYXQoLTEpID8/IGNvbHVtblZhbHVlLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgcGFydHMgPSAoY29sdW1uLmZ1bGxOYW1lID8/IGNvbHVtblZhbHVlKS5zcGxpdChcIi5cIikuZmlsdGVyKEJvb2xlYW4pO1xuICAgIHJldHVybiB7XG4gICAgICBkYkxhYmVsOiBwYXJ0cy5sZW5ndGggPj0gTUlOX1BBUlRTX0ZPUl9EQiA/IHBhcnRzLnNsaWNlKDAsIERCX1BBUlRTX09GRlNFVCkuam9pbihcIi5cIikgOiBFTVBUWV9WQUxVRSxcbiAgICAgIHRhYmxlTGFiZWw6IHBhcnRzLmxlbmd0aCA+PSBNSU5fUEFSVFNfRk9SX1RBQkxFID8gcGFydHNbcGFydHMubGVuZ3RoIC0gTUlOX1BBUlRTX0ZPUl9UQUJMRV0gOiB0aGlzLnJlc29sdmVUYWJsZVBhdGgoY29sdW1uLnRhYmxlKSxcbiAgICAgIGZpZWxkTGFiZWw6IHBhcnRzLmF0KC0xKSA/PyBjb2x1bW4udmFsdWUsXG4gICAgfTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVDb2x1bW5MYWJlbCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlQ29sdW1uUGF0aCh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlU29ydERyYWZ0TGFiZWwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlID0gdGhpcy5yZXNvbHZlQ29sdW1uUGF0aCh0aGlzLnNvcnREcmFmdC5jb2x1bW4pO1xuICAgIGlmICghdGhpcy5zb3J0RHJhZnQuZnVuY3Rpb25OYW1lKSB7XG4gICAgICByZXR1cm4gYmFzZTtcbiAgICB9XG4gICAgcmV0dXJuIGAke3RoaXMucmVzb2x2ZUZ1bmN0aW9uTGFiZWwodGhpcy5zb3J0RHJhZnQuZnVuY3Rpb25OYW1lKX0oJHtiYXNlfSlgO1xuICB9XG4gIHByaXZhdGUgYnVpbGRTb3J0U2VsZWN0aW9uSWQoXG4gICAgY29sdW1uOiBzdHJpbmcsXG4gICAgZnVuY3Rpb25OYW1lID0gRU1QVFlfVkFMVUVcbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7Y29sdW1ufTo6JHtmdW5jdGlvbk5hbWUgfHwgRU1QVFlfU09SVF9GVU5DVElPTn1gO1xuICB9XG4gIHByaXZhdGUgcGFyc2VTb3J0U2VsZWN0aW9uSWQoXG4gICAgc2VsZWN0aW9uSWQ6IHN0cmluZ1xuICApOiB7IGNvbHVtbjogc3RyaW5nOyBmdW5jdGlvbk5hbWU6IHN0cmluZyB9IHtcbiAgICBjb25zdCBbY29sdW1uLCBmdW5jdGlvbk5hbWUgPSBFTVBUWV9TT1JUX0ZVTkNUSU9OXSA9IHNlbGVjdGlvbklkLnNwbGl0KFwiOjpcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbHVtbixcbiAgICAgIGZ1bmN0aW9uTmFtZTpcbiAgICAgICAgZnVuY3Rpb25OYW1lID09PSBFTVBUWV9TT1JUX0ZVTkNUSU9OID8gRU1QVFlfVkFMVUUgOiBmdW5jdGlvbk5hbWUsXG4gICAgfTtcbiAgfVxuICByZXNvbHZlQ29sdW1uUGF0aCh2YWx1ZTogc3RyaW5nIHwgRHluYW1pY1ZpZXdCdWlsZGVyRmllbGQpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbHVtblZhbHVlID1cbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUuY29sdW1uID8/IEVNUFRZX1ZBTFVFO1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMucmVzb2x2ZUNvbHVtbk9wdGlvbihjb2x1bW5WYWx1ZSk7XG4gICAgaWYgKCFjb2x1bW4pIHtcbiAgICAgIHJldHVybiBjb2x1bW5WYWx1ZTtcbiAgICB9XG4gICAgY29uc3QgcGFydHMgPSAoY29sdW1uLmZ1bGxOYW1lID8/IGNvbHVtblZhbHVlKS5zcGxpdChcIi5cIikuZmlsdGVyKEJvb2xlYW4pO1xuICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPj0gTUlOX1BBUlRTX0ZPUl9UQUJMRSA/IHBhcnRzLnNsaWNlKERCX1BBUlRTX09GRlNFVCkuam9pbihcIi5cIikgOiBjb2x1bW4uZnVsbE5hbWU7XG4gIH1cbiAgcHJpdmF0ZSBub3JtYWxpemVHZW5lcmF0ZWRGaWVsZChcbiAgICB2YWx1ZTogc3RyaW5nIHwgRHluYW1pY1ZpZXdCdWlsZGVyRmllbGRcbiAgKTogRHluYW1pY1ZpZXdCdWlsZGVyRmllbGQge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB7IGNvbHVtbjogdmFsdWUgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbHVtbjogdmFsdWUuY29sdW1uLFxuICAgICAgYWxpYXM6IHZhbHVlLmFsaWFzPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICB3aWR0aDogdmFsdWUud2lkdGg/LnRyaW0oKSA/PyBFTVBUWV9WQUxVRSxcbiAgICAgIGZ1bmN0aW9uOiB2YWx1ZS5mdW5jdGlvblxuICAgICAgICA/IHtcbiAgICAgICAgICBmdW5jdGlvbk5hbWU6IHZhbHVlLmZ1bmN0aW9uLmZ1bmN0aW9uTmFtZT8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgICAgIGFsaWFzOiB2YWx1ZS5mdW5jdGlvbi5hbGlhcz8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgICB9XG4gICAgICAgIDogbnVsbCxcbiAgICB9O1xuICB9XG4gIHByaXZhdGUgZ2V0T3JkZXJlZEZpZWxkRW50cmllcygpOiBBcnJheTxcbiAgICBEeW5hbWljVmlld0J1aWxkZXJGaWVsZCAmIHsgc291cmNlSW5kZXg6IG51bWJlciB9XG4gID4ge1xuICAgIGNvbnN0IGVudHJpZXMgPSB0aGlzLm5vcm1hbGl6ZWRGaWVsZHMubWFwKChpdGVtLCBzb3VyY2VJbmRleCkgPT4gKHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBzb3VyY2VJbmRleCxcbiAgICB9KSk7XG4gICAgY29uc3QgcHJldmlld0luZGV4ZXMgPSB0aGlzLmdldEZpZWxkUHJldmlld1NvdXJjZUluZGV4ZXMoKTtcbiAgICByZXR1cm4gcHJldmlld0luZGV4ZXMubWFwKChpbmRleCkgPT4gZW50cmllc1tpbmRleF0pLmZpbHRlcihCb29sZWFuKTtcbiAgfVxuICBwcml2YXRlIGdldEZpZWxkUHJldmlld1NvdXJjZUluZGV4ZXMoKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IGJhc2VJbmRleGVzID0gdGhpcy5ub3JtYWxpemVkRmllbGRzLm1hcCgoXywgaW5kZXgpID0+IGluZGV4KTtcbiAgICBpZiAodGhpcy5kcmFnZ2luZ0ZpZWxkSW5kZXggPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBiYXNlSW5kZXhlcztcbiAgICB9XG4gICAgY29uc3QgcmVtYWluaW5nSW5kZXhlcyA9IGJhc2VJbmRleGVzLmZpbHRlcihcbiAgICAgIChpbmRleCkgPT4gaW5kZXggIT09IHRoaXMuZHJhZ2dpbmdGaWVsZEluZGV4XG4gICAgKTtcbiAgICBjb25zdCBpbnNlcnRpb25JbmRleCA9XG4gICAgICB0aGlzLmRyYWdQcmV2aWV3SW5kZXggPT09IG51bGxcbiAgICAgICAgPyBiYXNlSW5kZXhlcy5pbmRleE9mKHRoaXMuZHJhZ2dpbmdGaWVsZEluZGV4KVxuICAgICAgICA6IE1hdGgubWluKHRoaXMuZHJhZ1ByZXZpZXdJbmRleCwgcmVtYWluaW5nSW5kZXhlcy5sZW5ndGgpO1xuICAgIHJlbWFpbmluZ0luZGV4ZXMuc3BsaWNlKGluc2VydGlvbkluZGV4LCAwLCB0aGlzLmRyYWdnaW5nRmllbGRJbmRleCk7XG4gICAgcmV0dXJuIHJlbWFpbmluZ0luZGV4ZXM7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlRnVuY3Rpb25MYWJlbCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlT3B0aW9uTGFiZWwodmFsdWUsIHRoaXMuZnVuY3Rpb25PcHRpb25zKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVKb2luT3BlcmF0b3JMYWJlbCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlT3B0aW9uTGFiZWwodmFsdWUsIHRoaXMuam9pbk9wZXJhdG9yT3B0aW9ucyk7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlSm9pbk9wZXJhdG9yT3B0aW9uVGV4dChvcHRpb246IER5bmFtaWNWaWV3QnVpbGRlck9wdGlvbik6IHN0cmluZyB7XG4gICAgY29uc3QgZmFsbGJhY2sgPSBKT0lOX09QRVJBVE9SX0xBQkVMU1tvcHRpb24udmFsdWVdO1xuICAgIGNvbnN0IGhhc1JlYWRhYmxlVGV4dCA9IC9bQS1aYS16w4Atw79dLy50ZXN0KG9wdGlvbi50ZXh0KTtcblxuICAgIGlmICghZmFsbGJhY2sgfHwgaGFzUmVhZGFibGVUZXh0KSB7XG4gICAgICByZXR1cm4gb3B0aW9uLnRleHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS4ke2ZhbGxiYWNrLmtleX1gLFxuICAgICAgZmFsbGJhY2suZmFsbGJhY2tcbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZUZpbHRlck9wZXJhdG9yTGFiZWwodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4XG4gICAgICB9LmZpbHRlcnMub3BlcmF0b3JzLiR7dmFsdWUudG9Mb3dlckNhc2UoKX1gLFxuICAgICAgdGhpcy5odW1hbml6ZUtleSh2YWx1ZSlcbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZU9wdGlvbkxhYmVsKFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9uczogRHluYW1pY1ZpZXdCdWlsZGVyT3B0aW9uW11cbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gb3B0aW9ucy5maW5kKChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSB2YWx1ZSk/LnRleHQgPz8gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlRmlsdGVyRGlzcGxheVZhbHVlKGZpbHRlcjogRHluYW1pY1ZpZXdCdWlsZGVyRmlsdGVyKTogc3RyaW5nIHsgLy8gTk9TT05BUiAtIGNvbXBsZXhpdHk6IGV4dHJhY3Rpb24gd291bGQgcmlzayBiZWhhdmlvciBjaGFuZ2VcbiAgICBpZiAoZmlsdGVyLnZhbHVlVHlwZSA9PT0gRklMVEVSX01PREVfRE9NQUlOKSB7XG4gICAgICByZXR1cm4gZmlsdGVyLmRvbWFpbkV4cHJlc3Npb24gPz8gRU1QVFlfVkFMVUU7XG4gICAgfVxuICAgIGlmIChmaWx0ZXIudmFsdWVUeXBlID09PSBcInBhcmFtZXRlclwiKSB7XG4gICAgICByZXR1cm4gYDoke2ZpbHRlci5wYXJhbWV0ZXJOYW1lID8/IEVNUFRZX1ZBTFVFfWA7XG4gICAgfVxuICAgIGlmIChmaWx0ZXIub3BlcmF0b3IgPT09IFwiSU5cIikge1xuICAgICAgcmV0dXJuIChmaWx0ZXIudmFsdWVzID8/IFtdKS5qb2luKFwiLCBcIik7XG4gICAgfVxuICAgIGlmIChmaWx0ZXIub3BlcmF0b3IgPT09IFwiQkVUV0VFTlwiKSB7XG4gICAgICByZXR1cm4gYCR7ZmlsdGVyLnZhbHVlcz8uWzBdID8/IEVNUFRZX1ZBTFVFfSAtICR7ZmlsdGVyLnZhbHVlcz8uWzFdID8/IEVNUFRZX1ZBTFVFXG4gICAgICAgIH1gO1xuICAgIH1cbiAgICBpZiAoW1wiRU1QVFlcIiwgXCJOT1RfRU1QVFlcIl0uaW5jbHVkZXMoZmlsdGVyLm9wZXJhdG9yKSkge1xuICAgICAgcmV0dXJuIFwiLVwiO1xuICAgIH1cbiAgICByZXR1cm4gZmlsdGVyLnZhbHVlID8/IEVNUFRZX1ZBTFVFO1xuICB9XG4gIHByaXZhdGUgYnVpbGRHZW5lcmF0ZWRTcWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYnVpbGRHZW5lcmF0ZWRTcWwoXG4gICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc291cmNlcyxcbiAgICAgIHRoaXMubm9ybWFsaXplZEZpZWxkcyxcbiAgICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5qb2lucyxcbiAgICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5maWx0ZXJzLFxuICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmdyb3VwQnksXG4gICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc29ydGluZyxcbiAgICAgIHRoaXMuZ2V0U3FsQ29udGV4dCgpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGJ1aWxkV2hlcmVTcWwoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBidWlsZFdoZXJlU3FsKHRoaXMuZ2V0U3FsQ29udGV4dCgpLCB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmlsdGVycyk7XG4gIH1cbiAgcHJpdmF0ZSBidWlsZEdyb3VwQnlTcWwoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBidWlsZEdyb3VwQnlTcWwodGhpcy5nZXRTcWxDb250ZXh0KCksIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5KTtcbiAgfVxuICBwcml2YXRlIGJ1aWxkT3JkZXJCeVNxbCgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGJ1aWxkT3JkZXJCeVNxbCh0aGlzLmdldFNxbENvbnRleHQoKSwgdGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvcnRpbmcpO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZVNvdXJjZVNxbChzb3VyY2U6IER5bmFtaWNWaWV3QnVpbGRlclRhYmxlT3B0aW9uIHwge1xuICAgIHRhYmxlOiBzdHJpbmc7XG4gICAgYWxpYXM6IHN0cmluZztcbiAgfSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVTb3VyY2VTcWwodGhpcy5nZXRTcWxDb250ZXh0KCksIHNvdXJjZSk7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlSm9pblNxbChpdGVtOiBEeW5hbWljVmlld0J1aWxkZXJKb2luKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZUpvaW5TcWwodGhpcy5nZXRTcWxDb250ZXh0KCksIGl0ZW0pO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZUNvbHVtblNxbCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZUNvbHVtblNxbCh0aGlzLmdldFNxbENvbnRleHQoKSwgdmFsdWUpO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZUZpZWxkU3FsKGZpZWxkOiBzdHJpbmcgfCBEeW5hbWljVmlld0J1aWxkZXJGaWVsZCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVGaWVsZFNxbCh0aGlzLmdldFNxbENvbnRleHQoKSwgZmllbGQpO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZUZ1bmN0aW9uU3FsKGl0ZW06IER5bmFtaWNWaWV3QnVpbGRlckZ1bmN0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZUZ1bmN0aW9uU3FsKHRoaXMuZ2V0U3FsQ29udGV4dCgpLCBpdGVtKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVTb3J0U3FsKGl0ZW06IER5bmFtaWNWaWV3QnVpbGRlclNvcnQpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXNvbHZlU29ydFNxbCh0aGlzLmdldFNxbENvbnRleHQoKSwgaXRlbSk7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlRmlsdGVyU3FsKGZpbHRlcjogRHluYW1pY1ZpZXdCdWlsZGVyRmlsdGVyKTogc3RyaW5nIHsgLy8gTk9TT05BUiAtIGNvbXBsZXhpdHk6IGV4dHJhY3Rpb24gd291bGQgcmlzayBiZWhhdmlvciBjaGFuZ2VcbiAgICByZXR1cm4gcmVzb2x2ZUZpbHRlclNxbCh0aGlzLmdldFNxbENvbnRleHQoKSwgZmlsdGVyKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVGaWx0ZXJPcGVyYXRvclNxbCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZUZpbHRlck9wZXJhdG9yU3FsKHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVGaWx0ZXJWYWx1ZVNxbChcbiAgICBjb2x1bW5WYWx1ZTogc3RyaW5nLFxuICAgIG9wZXJhdG9yOiBzdHJpbmcsXG4gICAgdmFsdWU6IHVua25vd25cbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZUZpbHRlclZhbHVlU3FsKHRoaXMuZ2V0U3FsQ29udGV4dCgpLCBjb2x1bW5WYWx1ZSwgb3BlcmF0b3IsIHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIGRlY29yYXRlTGlrZVZhbHVlKG9wZXJhdG9yOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBkZWNvcmF0ZUxpa2VWYWx1ZShvcGVyYXRvciwgdmFsdWUpO1xuICB9XG4gIHByaXZhdGUgcXVvdGVTcWxWYWx1ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcXVvdGVTcWxWYWx1ZSh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBzeW5jTGF5b3V0TW9kZUl0ZW1zKCk6IHZvaWQge1xuICAgIHRoaXMubGF5b3V0TW9kZUl0ZW1zWzBdLmxhYmVsID0gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmxheW91dE1vZGVzLnN0YWNrZWRgLFxuICAgICAgXCJCbG9jb3NcIlxuICAgICk7XG4gICAgdGhpcy5sYXlvdXRNb2RlSXRlbXNbMV0ubGFiZWwgPSB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubGF5b3V0TW9kZXMuc3BsaXRgLFxuICAgICAgXCJMaXN0YVwiXG4gICAgKTtcbiAgICB0aGlzLnN5bmNTZWxlY3RlZExheW91dE1vZGVJdGVtcygpO1xuICB9XG4gIHByaXZhdGUgc3luY0ZpbHRlck1vZGVJdGVtcygpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlck1vZGVJdGVtc1swXS5sYWJlbCA9IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLm1vZGVzLmNvbmRpdGlvbmAsXG4gICAgICBcIkZpbHRyb1wiXG4gICAgKTtcbiAgICB0aGlzLmZpbHRlck1vZGVJdGVtc1sxXS5sYWJlbCA9IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLmRvbWFpbkxhYmVsYCxcbiAgICAgIFwiRXhwcmVzc2FvIGRlIGRvbWluaW9cIlxuICAgICk7XG4gICAgdGhpcy5zeW5jU2VsZWN0ZWRGaWx0ZXJNb2RlSXRlbXMoKTtcbiAgfVxuICBwcml2YXRlIHN5bmNTb3J0RGlyZWN0aW9uSXRlbXMoKTogdm9pZCB7XG4gICAgdGhpcy5zb3J0RGlyZWN0aW9uSXRlbXMuc3BsaWNlKFxuICAgICAgMCxcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbkl0ZW1zLmxlbmd0aCxcbiAgICAgIC4uLnRoaXMuc29ydERpcmVjdGlvbk9wdGlvbnMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICBsYWJlbDogaXRlbS50ZXh0LFxuICAgICAgICB2YWx1ZTogaXRlbS52YWx1ZSxcbiAgICAgIH0pKVxuICAgICk7XG4gICAgdGhpcy5zeW5jU2VsZWN0ZWRTb3J0RGlyZWN0aW9uSXRlbXMoKTtcbiAgfVxuICBwcml2YXRlIHN5bmNTZWxlY3RlZExheW91dE1vZGVJdGVtcygpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMubGF5b3V0TW9kZUl0ZW1zLmZpbmQoXG4gICAgICAoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gdGhpcy5sYXlvdXRNb2RlXG4gICAgKTtcbiAgICB0aGlzLnNlbGVjdGVkTGF5b3V0TW9kZUl0ZW1zLnNwbGljZShcbiAgICAgIDAsXG4gICAgICB0aGlzLnNlbGVjdGVkTGF5b3V0TW9kZUl0ZW1zLmxlbmd0aCxcbiAgICAgIC4uLihzZWxlY3RlZCA/IFtzZWxlY3RlZF0gOiBbXSlcbiAgICApO1xuICB9XG4gIHByaXZhdGUgc3luY1NlbGVjdGVkRmlsdGVyTW9kZUl0ZW1zKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5maWx0ZXJNb2RlSXRlbXMuZmluZChcbiAgICAgIChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSB0aGlzLmZpbHRlck1vZGFsTW9kZVxuICAgICk7XG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlck1vZGVJdGVtcy5zcGxpY2UoXG4gICAgICAwLFxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlck1vZGVJdGVtcy5sZW5ndGgsXG4gICAgICAuLi4oc2VsZWN0ZWQgPyBbc2VsZWN0ZWRdIDogW10pXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHN5bmNTZWxlY3RlZFNvcnREaXJlY3Rpb25JdGVtcygpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc29ydERpcmVjdGlvbkl0ZW1zLmZpbmQoXG4gICAgICAoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gdGhpcy5zb3J0RHJhZnQuZGlyZWN0aW9uXG4gICAgKTtcbiAgICB0aGlzLnNlbGVjdGVkU29ydERpcmVjdGlvbkl0ZW1zLnNwbGljZShcbiAgICAgIDAsXG4gICAgICB0aGlzLnNlbGVjdGVkU29ydERpcmVjdGlvbkl0ZW1zLmxlbmd0aCxcbiAgICAgIC4uLihzZWxlY3RlZCA/IFtzZWxlY3RlZF0gOiBbXSlcbiAgICApO1xuICB9XG4gIHByaXZhdGUgZ2V0IGZpbHRlclNlcXVlbmNlSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJFZGl0SW5kZXggPz8gdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpbHRlcnMubGVuZ3RoO1xuICB9XG4gIHByaXZhdGUgZ2V0U3FsQ29udGV4dCgpOiBTcWxDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgY29sdW1uczogdGhpcy5jb25maWcuYXZhaWxhYmxlRGF0YS5jb2x1bW5zID8/IFtdLFxuICAgICAgdGFibGVzOiB0aGlzLmNvbmZpZy5hdmFpbGFibGVEYXRhLnRhYmxlcyA/PyBbXSxcbiAgICAgIHNvdXJjZXM6IHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzLFxuICAgIH07XG4gIH1cbiAgcHJpdmF0ZSBwYXJzZU11bHRpVmFsdWVUZXh0KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gICAgICAuc3BsaXQoXCIsXCIpXG4gICAgICAubWFwKChpdGVtKSA9PiBpdGVtLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gIH1cbiAgcHJpdmF0ZSBidWlsZEFsaWFzRm9yVGFibGUodGFibGU6IER5bmFtaWNWaWV3QnVpbGRlclRhYmxlT3B0aW9uKTogc3RyaW5nIHtcbiAgICBjb25zdCB3b3JkcyA9IHRhYmxlLnRleHRcbiAgICAgIC5zcGxpdCgvW1xcc18uLV0rLylcbiAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0udHJpbSgpKVxuICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgICBpZiAod29yZHMubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIHdvcmRzXG4gICAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW1bMF0/LnRvTG93ZXJDYXNlKCkgPz8gRU1QVFlfVkFMVUUpXG4gICAgICAgIC5qb2luKFwiXCIpO1xuICAgIH1cbiAgICByZXR1cm4gKHRhYmxlLnZhbHVlLnNwbGl0KFwiLlwiKS5wb3AoKSA/PyB0YWJsZS52YWx1ZSlcbiAgICAgIC5zbGljZSgwLCBBTElBU19NQVhfTEVOR1RIKVxuICAgICAgLnRvTG93ZXJDYXNlKCk7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlRGVmYXVsdFNvdXJjZUFsaWFzKHRhYmxlVmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnJlc29sdmVUYWJsZU9wdGlvbih0YWJsZVZhbHVlKTtcbiAgICByZXR1cm4gdGFibGUgPyB0aGlzLmJ1aWxkQWxpYXNGb3JUYWJsZSh0YWJsZSkgOiBFTVBUWV9WQUxVRTtcbiAgfVxuICBwcml2YXRlIGhhc0N1c3RvbUFsaWFzKHRhYmxlVmFsdWU6IHN0cmluZywgYWxpYXM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5yZXNvbHZlVGFibGVPcHRpb24odGFibGVWYWx1ZSk7XG4gICAgaWYgKCF0YWJsZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gISFhbGlhcy50cmltKCkgJiYgYWxpYXMudHJpbSgpICE9PSB0aGlzLmJ1aWxkQWxpYXNGb3JUYWJsZSh0YWJsZSk7XG4gIH1cbiAgb25GaWVsZEZ1bmN0aW9uTmFtZUNoYW5nZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZmllbGRGdW5jdGlvbkRyYWZ0LmZ1bmN0aW9uTmFtZSkge1xuICAgICAgdGhpcy5maWVsZEZ1bmN0aW9uRHJhZnQuZnVuY3Rpb25BbGlhcyA9IEVNUFRZX1ZBTFVFO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzZWxlY3RlZENvbHVtbiA9IHRoaXMucmVzb2x2ZUNvbHVtbk9wdGlvbih0aGlzLmZpZWxkRnVuY3Rpb25EcmFmdC5jb2x1bW4pO1xuICAgIGlmIChcbiAgICAgIHNlbGVjdGVkQ29sdW1uICYmXG4gICAgICAhdGhpcy5maWx0ZXJGdW5jdGlvblNlbGVjdGFibGVDb2x1bW5zKHRoaXMuZmllbGRGdW5jdGlvbkRyYWZ0LmZ1bmN0aW9uTmFtZSlcbiAgICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS52YWx1ZSlcbiAgICAgICAgLmluY2x1ZGVzKHNlbGVjdGVkQ29sdW1uLnZhbHVlKVxuICAgICkge1xuICAgICAgdGhpcy5maWVsZEZ1bmN0aW9uRHJhZnQuZnVuY3Rpb25OYW1lID0gRU1QVFlfVkFMVUU7XG4gICAgICB0aGlzLmZpZWxkRnVuY3Rpb25EcmFmdC5mdW5jdGlvbkFsaWFzID0gRU1QVFlfVkFMVUU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5maWVsZEZ1bmN0aW9uRHJhZnQuZnVuY3Rpb25BbGlhcy50cmltKCkpIHtcbiAgICAgIHRoaXMuZmllbGRGdW5jdGlvbkRyYWZ0LmZ1bmN0aW9uQWxpYXMgPSB0aGlzLmJ1aWxkRmllbGRGdW5jdGlvbkFsaWFzKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgYnVpbGRGdW5jdGlvbkFsaWFzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5yZXNvbHZlQ29sdW1uT3B0aW9uKHRoaXMuZmllbGRGdW5jdGlvbkRyYWZ0LmNvbHVtbik7XG4gICAgY29uc3QgYmFzZSA9IGNvbHVtbj8udGV4dCA/PyB0aGlzLmZpZWxkRnVuY3Rpb25EcmFmdC5jb2x1bW4gPz8gRU1QVFlfVkFMVUU7XG4gICAgY29uc3Qgc3VmZml4ID0gdGhpcy5zbHVnaWZ5KGJhc2UpO1xuICAgIHJldHVybiBzdWZmaXhcbiAgICAgID8gYCR7dGhpcy5maWVsZEZ1bmN0aW9uRHJhZnQuZnVuY3Rpb25OYW1lfV8ke3N1ZmZpeH1gXG4gICAgICA6IHRoaXMuZmllbGRGdW5jdGlvbkRyYWZ0LmZ1bmN0aW9uTmFtZTtcbiAgfVxuICBwcml2YXRlIGJ1aWxkRmllbGRGdW5jdGlvbkFsaWFzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRGdW5jdGlvbkFsaWFzKCk7XG4gIH1cbiAgcHJpdmF0ZSBidWlsZEZpZWxkRnVuY3Rpb25EcmFmdCgpOiBEeW5hbWljVmlld0J1aWxkZXJGaWVsZEZ1bmN0aW9uIHwgbnVsbCB7XG4gICAgY29uc3QgZnVuY3Rpb25OYW1lID0gdGhpcy5maWVsZEZ1bmN0aW9uRHJhZnQuZnVuY3Rpb25OYW1lLnRyaW0oKTtcbiAgICBpZiAoIWZ1bmN0aW9uTmFtZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICBhbGlhczogKFxuICAgICAgICB0aGlzLmZpZWxkRnVuY3Rpb25EcmFmdC5mdW5jdGlvbkFsaWFzIHx8IHRoaXMuYnVpbGRGaWVsZEZ1bmN0aW9uQWxpYXMoKVxuICAgICAgKS50cmltKCksXG4gICAgfTtcbiAgfVxuICBwcml2YXRlIHBhdGNoRmllbGRNb2RhbERyYWZ0KFxuICAgIGNvbHVtbjogc3RyaW5nLFxuICAgIHBhdGNoOiBQYXJ0aWFsPER5bmFtaWNWaWV3QnVpbGRlckZpZWxkPlxuICApOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5maWVsZE1vZGFsRHJhZnRzID0gdGhpcy5zdGF0ZVNlcnZpY2UuZmllbGRNb2RhbERyYWZ0cy5tYXAoKGl0ZW0pID0+XG4gICAgICBpdGVtLmNvbHVtbiA9PT0gY29sdW1uXG4gICAgICAgID8ge1xuICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgLi4ucGF0Y2gsXG4gICAgICAgIH1cbiAgICAgICAgOiBpdGVtXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIG1lcmdlTGVnYWN5RnVuY3Rpb25zSW50b0ZpZWxkcyhcbiAgICBmaWVsZHM6IER5bmFtaWNWaWV3QnVpbGRlckZpZWxkW10sXG4gICAgZnVuY3Rpb25zOiBEeW5hbWljVmlld0J1aWxkZXJGdW5jdGlvbltdXG4gICk6IER5bmFtaWNWaWV3QnVpbGRlckZpZWxkW10ge1xuICAgIGNvbnN0IGZpZWxkQnlDb2x1bW4gPSBuZXcgTWFwKGZpZWxkcy5tYXAoKGl0ZW0pID0+IFtpdGVtLmNvbHVtbiwgeyAuLi5pdGVtIH1dKSk7XG5cbiAgICBmdW5jdGlvbnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudCA9IGZpZWxkQnlDb2x1bW4uZ2V0KGl0ZW0uY29sdW1uKSA/PyB7IGNvbHVtbjogaXRlbS5jb2x1bW4gfTtcbiAgICAgIGN1cnJlbnQuZnVuY3Rpb24gPz89IHtcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBpdGVtLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgYWxpYXM6IGl0ZW0uYWxpYXMsXG4gICAgICB9O1xuICAgICAgZmllbGRCeUNvbHVtbi5zZXQoaXRlbS5jb2x1bW4sIGN1cnJlbnQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oZmllbGRCeUNvbHVtbi52YWx1ZXMoKSk7XG4gIH1cbiAgcHJpdmF0ZSBleHRyYWN0RnVuY3Rpb25zRnJvbUZpZWxkcyhcbiAgICBmaWVsZHM6IER5bmFtaWNWaWV3QnVpbGRlckZpZWxkW11cbiAgKTogRHluYW1pY1ZpZXdCdWlsZGVyRnVuY3Rpb25bXSB7XG4gICAgcmV0dXJuIGZpZWxkc1xuICAgICAgLmZpbHRlcigoaXRlbSkgPT4gISFpdGVtLmZ1bmN0aW9uPy5mdW5jdGlvbk5hbWU/LnRyaW0oKSlcbiAgICAgIC5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgIGZ1bmN0aW9uTmFtZTogaXRlbS5mdW5jdGlvbj8uZnVuY3Rpb25OYW1lPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICAgIGNvbHVtbjogaXRlbS5jb2x1bW4sXG4gICAgICAgIGFsaWFzOlxuICAgICAgICAgIGl0ZW0uZnVuY3Rpb24/LmFsaWFzPy50cmltKCkgfHwgLy8gTk9TT05BUiAtIGVtcHR5IHN0cmluZyBmYWxsYmFjayBpcyBpbnRlbnRpb25hbFxuICAgICAgICAgIGl0ZW0uYWxpYXM/LnRyaW0oKSB8fCAvLyBOT1NPTkFSIC0gZW1wdHkgc3RyaW5nIGZhbGxiYWNrIGlzIGludGVudGlvbmFsXG4gICAgICAgICAgdGhpcy5zbHVnaWZ5KGAke2l0ZW0uZnVuY3Rpb24/LmZ1bmN0aW9uTmFtZSA/PyBFTVBUWV9WQUxVRX1fJHtpdGVtLmNvbHVtbn1gKSxcbiAgICAgIH0pKTtcbiAgfVxuICBwcml2YXRlIHNsdWdpZnkodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNsdWdpZnkodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgZGVkdXBsaWNhdGVCeUtleTxUPihcbiAgICBpdGVtczogVFtdLFxuICAgIGtleVJlc29sdmVyOiAoaXRlbTogVCkgPT4gc3RyaW5nXG4gICk6IFRbXSB7XG4gICAgcmV0dXJuIGRlZHVwbGljYXRlQnlLZXkoaXRlbXMsIGtleVJlc29sdmVyKTtcbiAgfVxuICBwcml2YXRlIGh1bWFuaXplS2V5KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB2YWx1ZVxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC5zcGxpdChcIl9cIilcbiAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBpdGVtLnNsaWNlKDEpKVxuICAgICAgLmpvaW4oXCIgXCIpO1xuICB9XG4gIHByaXZhdGUgaW5zdGFudFdpdGhGYWxsYmFjayhrZXk6IHN0cmluZywgZmFsbGJhY2s6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdHJhbnNsYXRlZCA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoa2V5KTtcbiAgICByZXR1cm4gdHJhbnNsYXRlZCAmJiB0cmFuc2xhdGVkICE9PSBrZXkgPyB0cmFuc2xhdGVkIDogZmFsbGJhY2s7XG4gIH1cbiAgcHJpdmF0ZSBidWlsZEZpbHRlckZyb21EcmFmdCgpOiBEeW5hbWljVmlld0J1aWxkZXJGaWx0ZXIgfCBudWxsIHsgLy8gTk9TT05BUiAtIGNvbXBsZXhpdHk6IGV4dHJhY3Rpb24gd291bGQgcmlzayBiZWhhdmlvciBjaGFuZ2VcbiAgICBpZiAodGhpcy5maWx0ZXJNb2RhbE1vZGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTikge1xuICAgICAgY29uc3QgZG9tYWluRXhwcmVzc2lvbiA9IHRoaXMuZmlsdGVyRHJhZnQuZG9tYWluRXhwcmVzc2lvbi50cmltKCk7XG5cbiAgICAgIGlmICghZG9tYWluRXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sdW1uOiBFTVBUWV9WQUxVRSxcbiAgICAgICAgb3BlcmF0b3I6IEVNUFRZX1ZBTFVFLFxuICAgICAgICBjb25uZWN0b3I6IHRoaXMuZmlsdGVyRHJhZnQuY29ubmVjdG9yLFxuICAgICAgICBvcHRpb25hbDogdGhpcy5maWx0ZXJEcmFmdC5vcHRpb25hbCxcbiAgICAgICAgdmFsdWVUeXBlOiBGSUxURVJfTU9ERV9ET01BSU4sXG4gICAgICAgIGRvbWFpbkV4cHJlc3Npb24sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICghdGhpcy5maWx0ZXJEcmFmdC5jb2x1bW4gfHwgIXRoaXMuZmlsdGVyRHJhZnQub3BlcmF0b3IpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHQ6IER5bmFtaWNWaWV3QnVpbGRlckZpbHRlciA9IHtcbiAgICAgIGNvbHVtbjogdGhpcy5maWx0ZXJEcmFmdC5jb2x1bW4sXG4gICAgICBvcGVyYXRvcjogdGhpcy5maWx0ZXJEcmFmdC5vcGVyYXRvcixcbiAgICAgIGNvbm5lY3RvcjogdGhpcy5maWx0ZXJEcmFmdC5jb25uZWN0b3IsXG4gICAgICBvcHRpb25hbDogdGhpcy5maWx0ZXJEcmFmdC5vcHRpb25hbCxcbiAgICAgIHZhbHVlVHlwZTogdGhpcy5maWx0ZXJOZWVkc1ZhbHVlID8gdGhpcy5maWx0ZXJEcmFmdC52YWx1ZVR5cGUgOiBERUZBVUxUX0ZJTFRFUl9WQUxVRV9UWVBFLFxuICAgIH07XG5cbiAgICBpZiAoIXRoaXMuZmlsdGVyTmVlZHNWYWx1ZSkge1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmlsdGVyRHJhZnQudmFsdWVUeXBlID09PSBcInBhcmFtZXRlclwiKSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJOYW1lID0gdGhpcy5maWx0ZXJEcmFmdC5wYXJhbWV0ZXJOYW1lLnRyaW0oKTtcblxuICAgICAgaWYgKCFwYXJhbWV0ZXJOYW1lKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBuZXh0LnBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXJOYW1lO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmlsdGVyRHJhZnQub3BlcmF0b3IgPT09IFwiSU5cIikge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5wYXJzZU11bHRpVmFsdWVUZXh0KHRoaXMuZmlsdGVyRHJhZnQudmFsdWVzVGV4dCk7XG5cbiAgICAgIGlmICghdmFsdWVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbmV4dC52YWx1ZXMgPSB2YWx1ZXM7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWx0ZXJEcmFmdC5vcGVyYXRvciA9PT0gXCJCRVRXRUVOXCIpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5maWx0ZXJEcmFmdC5iZXR3ZWVuU3RhcnQudHJpbSgpO1xuICAgICAgY29uc3QgZW5kID0gdGhpcy5maWx0ZXJEcmFmdC5iZXR3ZWVuRW5kLnRyaW0oKTtcblxuICAgICAgaWYgKCFzdGFydCB8fCAhZW5kKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBuZXh0LnZhbHVlcyA9IFtzdGFydCwgZW5kXTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5maWx0ZXJEcmFmdC52YWx1ZS50cmltKCk7XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBuZXh0LnZhbHVlID0gdmFsdWU7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlRmlsdGVyRHJhZnRTcWxQcmV2aWV3KCk6IHN0cmluZyB7XG4gICAgY29uc3QgbmV4dCA9IHRoaXMuYnVpbGRGaWx0ZXJGcm9tRHJhZnQoKTtcblxuICAgIGlmICghbmV4dCkge1xuICAgICAgcmV0dXJuIEVNUFRZX1ZBTFVFO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlc29sdmVGaWx0ZXJTcWwobmV4dCk7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlRmlsdGVyRHJhZnREaXNwbGF5VmFsdWUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5maWx0ZXJNb2RhbE1vZGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTikge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyRHJhZnQuZG9tYWluRXhwcmVzc2lvbi50cmltKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmlsdGVyRHJhZnQudmFsdWVUeXBlID09PSBcInBhcmFtZXRlclwiKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXJEcmFmdC5wYXJhbWV0ZXJOYW1lXG4gICAgICAgID8gYDoke3RoaXMuZmlsdGVyRHJhZnQucGFyYW1ldGVyTmFtZX1gXG4gICAgICAgIDogRU1QVFlfVkFMVUU7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpbHRlckRyYWZ0Lm9wZXJhdG9yID09PSBcIklOXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlc1RleHQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpbHRlckRyYWZ0Lm9wZXJhdG9yID09PSBcIkJFVFdFRU5cIikge1xuICAgICAgcmV0dXJuIFt0aGlzLmZpbHRlckRyYWZ0LmJldHdlZW5TdGFydCwgdGhpcy5maWx0ZXJEcmFmdC5iZXR3ZWVuRW5kXVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5qb2luKFwiIC0gXCIpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZmlsdGVyTmVlZHNWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LnN0YXRlcy5vcHRpb25hbGAsXG4gICAgICAgIFwiU2VtIHZhbG9yXCJcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCB7IFZpc3VhbFNxbEVkaXRvckNvbXBvbmVudCBhcyBEeW5hbWljVmlld0J1aWxkZXJDb21wb25lbnQgfTtcbiIsIjxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlclwiIFthdHRyLmFyaWEtYnVzeV09XCJsb2FkaW5nXCI+XG4gIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fdG9vbGJhclwiPlxuICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fdG9vbGJhci1jb3B5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3RpdGxlXCI+XG4gICAgICAgIHt7IGNvbmZpZy5tZXRhZGF0YS50aXRsZSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3N1YnRpdGxlXCI+XG4gICAgICAgIHt7IGNvbmZpZy5tZXRhZGF0YS5kZXNjcmlwdGlvbiB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX190b29sYmFyLWFjdGlvbnNcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Rvb2xiYXItbGFiZWxcIj5cbiAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLmxheW91dE1vZGUnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNkYy1zZWxlY3QtYnV0dG9uXG4gICAgICAgIFtpdGVtc109XCJsYXlvdXRNb2RlSXRlbXNcIlxuICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZExheW91dE1vZGVJdGVtc1wiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uTGF5b3V0TW9kZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgID48L3NkYy1zZWxlY3QtYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcHJldmlldy10b2dnbGVcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlUHJldmlldygpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1wcmVzc2VkXT1cInByZXZpZXdWaXNpYmxlXCJcbiAgICAgICAgW3RpdGxlXT1cInByZXZpZXdUb2dnbGVMYWJlbFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicHJldmlld1RvZ2dsZUxhYmVsXCJcbiAgICAgICAgPlxuICAgICAgICA8aVxuICAgICAgICAgIFtjbGFzc109XCJwcmV2aWV3VmlzaWJsZSA/ICdmYXMgZmEtZXllLXNsYXNoJyA6ICdmYXMgZmEtZXllJ1wiXG4gICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgPjwvaT5cbiAgICAgICAge3sgcHJldmlld1RvZ2dsZUxhYmVsIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgQGlmIChzZWxlY3Rpb25Nb2RhbFZpc2libGUpIHtcbiAgICA8c2RjLW1vZGFsXG4gICAgICBbdmlzaWJsZV09XCJzZWxlY3Rpb25Nb2RhbFZpc2libGVcIlxuICAgICAgKHZpc2libGVDaGFuZ2UpPVwiJGV2ZW50ID8gKHNlbGVjdGlvbk1vZGFsVmlzaWJsZSA9IHRydWUpIDogY2xvc2VTZWxlY3Rpb25Nb2RhbCgpXCJcbiAgICAgIFtoZWFkZXJdPVwic2VsZWN0aW9uTW9kYWxUaXRsZVwiXG4gICAgICBbd2lkdGhdPVwibW9kYWxEaW1lbnNpb25zLnNlbGVjdGlvbi53aWR0aFwiXG4gICAgICBbaGVpZ2h0XT1cIm1vZGFsRGltZW5zaW9ucy5zZWxlY3Rpb24uaGVpZ2h0XCJcbiAgICAgIFttYXhpbWl6YWJsZV09XCJmYWxzZVwiXG4gICAgICBbZm9vdGVyQnV0dG9uc109XCJbXVwiXG4gICAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXNoZWxsIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zaGVsbC0tZnVsbFxuICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tZmxvdyBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3RhZ2VcIlxuICAgICAgICA+XG4gICAgICAgIEBpZiAoc2VsZWN0aW9uTW9kYWxNb2RlID09PSAndGFibGVzJykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtaW5saW5lLXN1cmZhY2VcIj5cbiAgICAgICAgICAgIDxzZGMtdGV4dGJveFxuICAgICAgICAgICAgICBbbGFiZWxdPVwibW9kYWxTZWFyY2hMYWJlbFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJtb2RhbFNlYXJjaFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0aW9uTW9kYWxTZWFyY2hcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3Rpb25Nb2RhbFNlYXJjaCA9ICRldmVudFwiXG4gICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICA+PC9zZGMtdGV4dGJveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1jYXJkIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1jYXJkLS1zZWN0aW9uXG4gICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdGFnZS1ib2R5XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLXRhYmxlXG4gICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi10YWJsZS0tY2hvb3NlclxuICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tdGFibGUtLWZsdWlkXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1oZWFkXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tY29sXCI+XG4gICAgICAgICAgICAgICAgICB7eyBtb2RhbE5hbWVMYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLWNvbFwiPlxuICAgICAgICAgICAgICAgICAge3sgbW9kYWxUeXBlTGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1jb2wgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1jb2wtLXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgICAge3sgbW9kYWxTZWxlY3RMYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tYm9keVwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKHJvdyBvZiBzZWxlY3Rpb25Nb2RhbFJvd3M7IHRyYWNrIHRyYWNrQnlJZCgkaW5kZXgsIHJvdykpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLXJvd1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5keW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLXJvdy0tc2VsZWN0ZWRdPVwicm93LnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIucm9sZV09XCInYnV0dG9uJ1wiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cInJvdy5kaXNhYmxlZCA/IC0xIDogMFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcHJlc3NlZF09XCJyb3cuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cInJvdy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZWxlY3Rpb25Nb2RhbFJvdyhyb3cuaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25TZWxlY3RhYmxlUm93S2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChyb3cudGFibGVMYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLXBhdGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChyb3cucGF0aFR5cGUgPT09ICd0YWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHJvdy5kYkxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tZGJcIj57eyByb3cuZGJMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChyb3cuZGJMYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLXNlcGFyYXRvclwiPi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi10YWJsZS1sYWJlbFwiPnt7IHJvdy50YWJsZUxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tdGFibGUtbGFiZWxcIj57eyByb3cudGFibGVMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tc2VwYXJhdG9yXCI+Ljwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tYWNjZW50XCI+e3sgcm93Lm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJvdy5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tY2VsbCBkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLWNlbGwtLW1ldGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyByb3cubWV0YSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKHJvdy5ub3RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tbm90ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByb3cubm90ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLWNlbGwgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1jZWxsLS1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLW1hcmtlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1tYXJrZXItLXNlbGVjdGVkXT1cInJvdy5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2hlY2tcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZCBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZC0tc2VjdGlvblxuICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fcGlja2xpc3Qtc2hlbGwgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN0YWdlLWJvZHlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPHNkYy1waWNrbGlzdFxuICAgICAgICAgICAgICBbaXRlbXNdPVwic2VsZWN0aW9uTW9kYWxQaWNrbGlzdEl0ZW1zXCJcbiAgICAgICAgICAgICAgW3NlbGVjdGVkSWRzXT1cInNlbGVjdGlvbk1vZGFsU2VsZWN0ZWRQaWNrbGlzdElkc1wiXG4gICAgICAgICAgICAgIGlkS2V5PVwiaWRcIlxuICAgICAgICAgICAgICB0aXRsZUtleT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgdGl0bGVQcmVmaXhLZXk9XCJ0aXRsZVByZWZpeFwiXG4gICAgICAgICAgICAgIHRpdGxlU3VmZml4S2V5PVwidGl0bGVTdWZmaXhcIlxuICAgICAgICAgICAgICB0aXRsZVByZWZpeENvbG9yS2V5PVwidGl0bGVQcmVmaXhDb2xvclwiXG4gICAgICAgICAgICAgIHRpdGxlU3VmZml4Q29sb3JLZXk9XCJ0aXRsZVN1ZmZpeENvbG9yXCJcbiAgICAgICAgICAgICAgYmFkZ2VLZXk9XCJiYWRnZVwiXG4gICAgICAgICAgICAgIGJhZGdlQ29sb3JLZXk9XCJiYWRnZUNvbG9yXCJcbiAgICAgICAgICAgICAgW3Nob3dQYWdpbmF0b3JdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbc2hvd0l0ZW1JY29uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW3Nob3dTZWxlY3Rpb25Db3VudGVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2F1dG9SZXNpemVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5tb2RhbHMuc2VhcmNoUGxhY2Vob2xkZXInXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGVkSWRzQ2hhbmdlKT1cIm9uU2VsZWN0aW9uTW9kYWxTZWxlY3RlZElkc0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L3NkYy1waWNrbGlzdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGZvb3RlciBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1mb290ZXJcIj5cbiAgICAgICAgPHNkYy1idXR0b25cbiAgICAgICAgICBbbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jYW5jZWwnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgcHJpb3JpdHk9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgIChjbGljayk9XCJjbG9zZVNlbGVjdGlvbk1vZGFsKClcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImNsb3NlU2VsZWN0aW9uTW9kYWwoKVwiXG4gICAgICAgID48L3NkYy1idXR0b24+XG4gICAgICAgIDxzZGMtYnV0dG9uXG4gICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY29uZmlybVNlbGVjdGlvbicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAoY2xpY2spPVwiY29uZmlybVNlbGVjdGlvbk1vZGFsKClcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImNvbmZpcm1TZWxlY3Rpb25Nb2RhbCgpXCJcbiAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvc2RjLW1vZGFsPlxuICB9XG5cbiAgQGlmIChzb3VyY2VNb2RhbFZpc2libGUpIHtcbiAgICA8c2RjLW1vZGFsXG4gICAgICBbdmlzaWJsZV09XCJzb3VyY2VNb2RhbFZpc2libGVcIlxuICAgICAgKHZpc2libGVDaGFuZ2UpPVwiJGV2ZW50ID8gKHNvdXJjZU1vZGFsVmlzaWJsZSA9IHRydWUpIDogY2xvc2VTb3VyY2VNb2RhbCgpXCJcbiAgICAgIFtoZWFkZXJdPVwic291cmNlTW9kYWxUaXRsZVwiXG4gICAgICBbd2lkdGhdPVwibW9kYWxEaW1lbnNpb25zLnNvdXJjZS53aWR0aFwiXG4gICAgICBbaGVpZ2h0XT1cIm1vZGFsRGltZW5zaW9ucy5zb3VyY2UuaGVpZ2h0XCJcbiAgICAgIFttYXhpbWl6YWJsZV09XCJmYWxzZVwiXG4gICAgICBbZm9vdGVyQnV0dG9uc109XCJbXVwiXG4gICAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXNoZWxsIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1tb2RhbFwiPlxuICAgICAgICA8c2RjLXRpbWVsaW5lXG4gICAgICAgICAgW2l0ZW1zXT1cInNvdXJjZU1vZGFsVGltZWxpbmVJdGVtc1wiXG4gICAgICAgICAgW2FjdGl2ZUluZGV4XT1cInNvdXJjZU1vZGFsQ29uZmlndXJhdGlvblN0ZXBBY3RpdmUgPyAxIDogMFwiXG4gICAgICAgICAgW2ludGVyYWN0aXZlXT1cInRydWVcIlxuICAgICAgICAgIFtzaG93RGVzY3JpcHRpb25zXT1cImZhbHNlXCJcbiAgICAgICAgICBbYXJpYUxhYmVsXT1cInNvdXJjZU1vZGFsVGltZWxpbmVBcmlhTGFiZWxcIlxuICAgICAgICAgIChzdGVwU2VsZWN0KT1cIm9uU291cmNlTW9kYWxUaW1lbGluZVN0ZXBTZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgID48L3NkYy10aW1lbGluZT5cbiAgICAgICAgQGlmIChzb3VyY2VNb2RhbFNlbGVjdGlvblN0ZXBBY3RpdmUpIHtcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zaGVsbCBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc2hlbGwtLWZ1bGxcbiAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1mbG93IGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdGFnZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQtLXNlY3Rpb25cbiAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fcGlja2xpc3Qtc2hlbGwgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN0YWdlLWJvZHlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzZGMtcGlja2xpc3RcbiAgICAgICAgICAgICAgICBbaXRlbXNdPVwic291cmNlTW9kYWxQaWNrbGlzdEl0ZW1zXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWRJZHNdPVwic291cmNlTW9kYWxTZWxlY3RlZFBpY2tsaXN0SWRzXCJcbiAgICAgICAgICAgICAgICBpZEtleT1cImlkXCJcbiAgICAgICAgICAgICAgICB0aXRsZUtleT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICB0aXRsZVByZWZpeEtleT1cInRpdGxlUHJlZml4XCJcbiAgICAgICAgICAgICAgICB0aXRsZVN1ZmZpeEtleT1cInRpdGxlU3VmZml4XCJcbiAgICAgICAgICAgICAgICB0aXRsZVByZWZpeENvbG9yS2V5PVwidGl0bGVQcmVmaXhDb2xvclwiXG4gICAgICAgICAgICAgICAgdGl0bGVTdWZmaXhDb2xvcktleT1cInRpdGxlU3VmZml4Q29sb3JcIlxuICAgICAgICAgICAgICAgIGJhZGdlS2V5PVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgIGJhZGdlQ29sb3JLZXk9XCJiYWRnZUNvbG9yXCJcbiAgICAgICAgICAgICAgICBbc2hvd1BhZ2luYXRvcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dJdGVtSWNvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dTZWxlY3Rpb25Db3VudGVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbYXV0b1Jlc2l6ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcubW9kYWxzLnNlYXJjaFBsYWNlaG9sZGVyJ1wiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkSWRzQ2hhbmdlKT1cIm9uU291cmNlTW9kYWxTZWxlY3RlZElkc0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPjwvc2RjLXBpY2tsaXN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWZpZWxkIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1maWVsZC0tc3RyZXRjaFxuICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fZmllbGQtY29uZmlnLXNoZWxsXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZCBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZC0tc2VjdGlvblxuICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1saXN0LXNoZWxsXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NvdXJjZS1jb25maWctbGlzdFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2Ygc291cmNlTW9kYWxDb25maWd1cmVkSXRlbXM7IHRyYWNrIHRyYWNrQnlJZCgkaW5kZXgsIGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NvdXJjZS1jb25maWctcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc291cmNlLWNvbmZpZy1tYWluXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi10YWJsZS1sYWJlbFwiPnt7IGl0ZW0uZGJMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1zZXBhcmF0b3JcIj4uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLWFjY2VudFwiPnt7IGl0ZW0udGFibGVMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc291cmNlLWNvbmZpZy1jb250cm9sc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzZGMtdGV4dGJveFxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLmFsaWFzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJpdGVtLmFsaWFzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU291cmNlTW9kYWxBbGlhc0NoYW5nZShpdGVtLnRhYmxlLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF4bGVuZ3RoXT1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9zZGMtdGV4dGJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBmb290ZXIgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZm9vdGVyXCI+XG4gICAgICAgIDxzZGMtYnV0dG9uXG4gICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY2FuY2VsJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIHByaW9yaXR5PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAoY2xpY2spPVwiY2xvc2VTb3VyY2VNb2RhbCgpXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJjbG9zZVNvdXJjZU1vZGFsKClcIlxuICAgICAgICA+PC9zZGMtYnV0dG9uPlxuICAgICAgICBAaWYgKHNvdXJjZU1vZGFsU2VsZWN0aW9uU3RlcEFjdGl2ZSAmJiBzb3VyY2VNb2RhbENhblByb2NlZWQpIHtcbiAgICAgICAgICA8c2RjLWJ1dHRvblxuICAgICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMubmV4dFN0ZXAnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWR2YW5jZVNvdXJjZU1vZGFsU3RlcCgpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImFkdmFuY2VTb3VyY2VNb2RhbFN0ZXAoKVwiXG4gICAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKHNvdXJjZU1vZGFsQ29uZmlndXJhdGlvblN0ZXBBY3RpdmUpIHtcbiAgICAgICAgICA8c2RjLWJ1dHRvblxuICAgICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuc2F2ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc291cmNlTW9kYWxDYW5Qcm9jZWVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzYXZlU291cmNlTW9kYWwoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzYXZlU291cmNlTW9kYWwoKVwiXG4gICAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9zZGMtbW9kYWw+XG4gIH1cblxuICBAaWYgKGpvaW5Nb2RhbFZpc2libGUpIHtcbiAgICA8c2RjLW1vZGFsXG4gICAgICBbdmlzaWJsZV09XCJqb2luTW9kYWxWaXNpYmxlXCJcbiAgICAgICh2aXNpYmxlQ2hhbmdlKT1cIiRldmVudCA/IChqb2luTW9kYWxWaXNpYmxlID0gdHJ1ZSkgOiBjbG9zZUpvaW5Nb2RhbCgpXCJcbiAgICAgIFtoZWFkZXJdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuY2FyZHMuam9pbnMudGl0bGUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICBbd2lkdGhdPVwibW9kYWxEaW1lbnNpb25zLmpvaW4ud2lkdGhcIlxuICAgICAgW2hlaWdodF09XCJtb2RhbERpbWVuc2lvbnMuam9pbi5oZWlnaHRcIlxuICAgICAgW21heGltaXphYmxlXT1cImZhbHNlXCJcbiAgICAgIFtmb290ZXJCdXR0b25zXT1cIltdXCJcbiAgICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc2hlbGwgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2pvaW4tbW9kYWxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19qb2luLW1vZGFsLXRvcFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeSBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5LWxhYmVsXCI+XG4gICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy5sZWZ0JykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5LXZhbHVlXG4gICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktdmFsdWUtLXBhdGhcIlxuICAgICAgICAgICAgICA+e3sgam9pblNvdXJjZVN1bW1hcnkgfX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1maWVsZFxuICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZmllbGQtLWNvbXBhY3RcbiAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPHNkYy1jb21ib2JveFxuICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMub3BlcmF0b3InXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiam9pbkRyYWZ0Lm9wZXJhdG9yXCJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiam9pbkRyYWZ0Lm9wZXJhdG9yID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwiam9pbk9wZXJhdG9yT3B0aW9uc1wiXG4gICAgICAgICAgICAgIFthcHBlbmRUb109XCJvdmVybGF5QXBwZW5kVGFyZ2V0XCJcbiAgICAgICAgICAgICAgW3pJbmRleF09XCJvdmVybGF5WkluZGV4XCJcbiAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgID48L3NkYy1jb21ib2JveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnkgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS1sYWJlbFwiPlxuICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMucmlnaHQnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktdmFsdWVcbiAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS12YWx1ZS0tcGF0aFwiXG4gICAgICAgICAgICAgID57eyBqb2luVGFyZ2V0U3VtbWFyeSB9fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1ncmlkIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1ncmlkLS1maXRcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1waWNrZXIgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXBpY2tlci0tc3RyZXRjaFxuICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZCBkeW5hbWljLXZpZXctYnVpbGRlcl9fcGlja2xpc3Qtc2hlbGxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1wYW5lbC10aXRsZVwiPlxuICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMubGVmdCcpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzZGMtcGlja2xpc3RcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cImpvaW5Tb3VyY2VQaWNrbGlzdEl0ZW1zXCJcbiAgICAgICAgICAgICAgW3NlbGVjdGVkSWRzXT1cImpvaW5Tb3VyY2VTZWxlY3RlZFBpY2tsaXN0SWRzXCJcbiAgICAgICAgICAgICAgaWRLZXk9XCJpZFwiXG4gICAgICAgICAgICAgIHRpdGxlS2V5PVwidGl0bGVcIlxuICAgICAgICAgICAgICB0aXRsZVByZWZpeEtleT1cInRpdGxlUHJlZml4XCJcbiAgICAgICAgICAgICAgdGl0bGVTdWZmaXhLZXk9XCJ0aXRsZVN1ZmZpeFwiXG4gICAgICAgICAgICAgIHRpdGxlUHJlZml4Q29sb3JLZXk9XCJ0aXRsZVByZWZpeENvbG9yXCJcbiAgICAgICAgICAgICAgdGl0bGVTdWZmaXhDb2xvcktleT1cInRpdGxlU3VmZml4Q29sb3JcIlxuICAgICAgICAgICAgICBiYWRnZUtleT1cImJhZGdlXCJcbiAgICAgICAgICAgICAgYmFkZ2VDb2xvcktleT1cImJhZGdlQ29sb3JcIlxuICAgICAgICAgICAgICBbc2hvd1BhZ2luYXRvcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtzaG93SXRlbUljb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbc2hvd1NlbGVjdGlvbkNvdW50ZXJdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbYXV0b1Jlc2l6ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFttYXhWaXNpYmxlU2VsZWN0ZWRJdGVtc109XCIxXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcubW9kYWxzLnNlYXJjaFBsYWNlaG9sZGVyJ1wiXG4gICAgICAgICAgICAgIChzZWxlY3RlZElkc0NoYW5nZSk9XCJvbkpvaW5Tb3VyY2VTZWxlY3RlZElkc0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L3NkYy1waWNrbGlzdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1waWNrZXIgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXBpY2tlci0tc3RyZXRjaFxuICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZCBkeW5hbWljLXZpZXctYnVpbGRlcl9fcGlja2xpc3Qtc2hlbGxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1wYW5lbC10aXRsZVwiPlxuICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMucmlnaHQnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c2RjLXBpY2tsaXN0XG4gICAgICAgICAgICAgIFtpdGVtc109XCJqb2luVGFyZ2V0UGlja2xpc3RJdGVtc1wiXG4gICAgICAgICAgICAgIFtzZWxlY3RlZElkc109XCJqb2luVGFyZ2V0U2VsZWN0ZWRQaWNrbGlzdElkc1wiXG4gICAgICAgICAgICAgIGlkS2V5PVwiaWRcIlxuICAgICAgICAgICAgICB0aXRsZUtleT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgdGl0bGVQcmVmaXhLZXk9XCJ0aXRsZVByZWZpeFwiXG4gICAgICAgICAgICAgIHRpdGxlU3VmZml4S2V5PVwidGl0bGVTdWZmaXhcIlxuICAgICAgICAgICAgICB0aXRsZVByZWZpeENvbG9yS2V5PVwidGl0bGVQcmVmaXhDb2xvclwiXG4gICAgICAgICAgICAgIHRpdGxlU3VmZml4Q29sb3JLZXk9XCJ0aXRsZVN1ZmZpeENvbG9yXCJcbiAgICAgICAgICAgICAgYmFkZ2VLZXk9XCJiYWRnZVwiXG4gICAgICAgICAgICAgIGJhZGdlQ29sb3JLZXk9XCJiYWRnZUNvbG9yXCJcbiAgICAgICAgICAgICAgW3Nob3dQYWdpbmF0b3JdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbc2hvd0l0ZW1JY29uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW3Nob3dTZWxlY3Rpb25Db3VudGVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2F1dG9SZXNpemVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbbWF4VmlzaWJsZVNlbGVjdGVkSXRlbXNdPVwiMVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLm1vZGFscy5zZWFyY2hQbGFjZWhvbGRlcidcIlxuICAgICAgICAgICAgICAoc2VsZWN0ZWRJZHNDaGFuZ2UpPVwib25Kb2luVGFyZ2V0U2VsZWN0ZWRJZHNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9zZGMtcGlja2xpc3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGZvb3RlciBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1mb290ZXJcIj5cbiAgICAgICAgPHNkYy1idXR0b25cbiAgICAgICAgICBbbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jYW5jZWwnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgcHJpb3JpdHk9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgIChjbGljayk9XCJjbG9zZUpvaW5Nb2RhbCgpXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJjbG9zZUpvaW5Nb2RhbCgpXCJcbiAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgPHNkYy1idXR0b25cbiAgICAgICAgICBbbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5zYXZlJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuU2F2ZUpvaW5cIlxuICAgICAgICAgIChjbGljayk9XCJzYXZlSm9pbigpXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzYXZlSm9pbigpXCJcbiAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvc2RjLW1vZGFsPlxuICB9XG5cbiAgQGlmIChzb3J0TW9kYWxWaXNpYmxlKSB7XG4gICAgPHNkYy1tb2RhbFxuICAgICAgW3Zpc2libGVdPVwic29ydE1vZGFsVmlzaWJsZVwiXG4gICAgICAodmlzaWJsZUNoYW5nZSk9XCIkZXZlbnQgPyAoc29ydE1vZGFsVmlzaWJsZSA9IHRydWUpIDogY2xvc2VTb3J0TW9kYWwoKVwiXG4gICAgICBbaGVhZGVyXT1cInNvcnRNb2RhbFRpdGxlXCJcbiAgICAgIFt3aWR0aF09XCJtb2RhbERpbWVuc2lvbnMuc29ydC53aWR0aFwiXG4gICAgICBbaGVpZ2h0XT1cIm1vZGFsRGltZW5zaW9ucy5zb3J0LmhlaWdodFwiXG4gICAgICBbbWF4aW1pemFibGVdPVwiZmFsc2VcIlxuICAgICAgW2Zvb3RlckJ1dHRvbnNdPVwiW11cIlxuICAgICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zaGVsbCBkeW5hbWljLXZpZXctYnVpbGRlcl9fc29ydC1tb2RhbFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZmllbGRcbiAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1maWVsZC0tZnVsbFxuICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NvcnQtZGlyZWN0aW9uLWZpZWxkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1sYWJlbFwiPlxuICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLmRpcmVjdGlvbicpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNkYy1zZWxlY3QtYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zb3J0LWRpcmVjdGlvblwiXG4gICAgICAgICAgICBbaXRlbXNdPVwic29ydERpcmVjdGlvbkl0ZW1zXCJcbiAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzb2Z0XCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkU29ydERpcmVjdGlvbkl0ZW1zXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU29ydERpcmVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9zZGMtc2VsZWN0LWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1jYXJkIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1jYXJkLS1zZWN0aW9uXG4gICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtcGlja2VyIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1waWNrZXItLXN0cmV0Y2hcbiAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tZmxvdyBkeW5hbWljLXZpZXctYnVpbGRlcl9fcGlja2xpc3Qtc2hlbGxcbiAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdGFnZS1ib2R5XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPHNkYy1waWNrbGlzdFxuICAgICAgICAgICAgW2l0ZW1zXT1cInNvcnRQaWNrbGlzdEl0ZW1zXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZElkc109XCJzb3J0U2VsZWN0ZWRQaWNrbGlzdElkc1wiXG4gICAgICAgICAgICBpZEtleT1cImlkXCJcbiAgICAgICAgICAgIHRpdGxlS2V5PVwidGl0bGVcIlxuICAgICAgICAgICAgdGl0bGVQcmVmaXhLZXk9XCJ0aXRsZVByZWZpeFwiXG4gICAgICAgICAgICB0aXRsZVN1ZmZpeEtleT1cInRpdGxlU3VmZml4XCJcbiAgICAgICAgICAgIHRpdGxlUHJlZml4Q29sb3JLZXk9XCJ0aXRsZVByZWZpeENvbG9yXCJcbiAgICAgICAgICAgIHRpdGxlU3VmZml4Q29sb3JLZXk9XCJ0aXRsZVN1ZmZpeENvbG9yXCJcbiAgICAgICAgICAgIGJhZGdlS2V5PVwiYmFkZ2VcIlxuICAgICAgICAgICAgYmFkZ2VDb2xvcktleT1cImJhZGdlQ29sb3JcIlxuICAgICAgICAgICAgW3Nob3dQYWdpbmF0b3JdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW3Nob3dJdGVtSWNvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICBbc2hvd1NlbGVjdGlvbkNvdW50ZXJdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2F1dG9SZXNpemVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW21heFZpc2libGVTZWxlY3RlZEl0ZW1zXT1cIjFcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcubW9kYWxzLnNlYXJjaFBsYWNlaG9sZGVyJ1wiXG4gICAgICAgICAgICAoc2VsZWN0ZWRJZHNDaGFuZ2UpPVwib25Tb3J0U2VsZWN0ZWRJZHNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvc2RjLXBpY2tsaXN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBmb290ZXIgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZm9vdGVyXCI+XG4gICAgICAgIDxzZGMtYnV0dG9uXG4gICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY2FuY2VsJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIHByaW9yaXR5PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAoY2xpY2spPVwiY2xvc2VTb3J0TW9kYWwoKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiY2xvc2VTb3J0TW9kYWwoKVwiXG4gICAgICAgID48L3NkYy1idXR0b24+XG4gICAgICAgIDxzZGMtYnV0dG9uXG4gICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuc2F2ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhblNhdmVTb3J0XCJcbiAgICAgICAgICAoY2xpY2spPVwic2F2ZVNvcnQoKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2F2ZVNvcnQoKVwiXG4gICAgICAgID48L3NkYy1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NkYy1tb2RhbD5cbiAgfVxuXG4gIEBpZiAoZmlsdGVyTW9kYWxWaXNpYmxlKSB7XG4gICAgPHNkYy1tb2RhbFxuICAgICAgW3Zpc2libGVdPVwiZmlsdGVyTW9kYWxWaXNpYmxlXCJcbiAgICAgICh2aXNpYmxlQ2hhbmdlKT1cIiRldmVudCA/IChmaWx0ZXJNb2RhbFZpc2libGUgPSB0cnVlKSA6IGNsb3NlRmlsdGVyTW9kYWwoKVwiXG4gICAgICBbaGVhZGVyXT1cImZpbHRlck1vZGFsVGl0bGVcIlxuICAgICAgW3dpZHRoXT1cIm1vZGFsRGltZW5zaW9ucy5maWx0ZXIud2lkdGhcIlxuICAgICAgW2hlaWdodF09XCJtb2RhbERpbWVuc2lvbnMuZmlsdGVyLmhlaWdodFwiXG4gICAgICBbbWF4aW1pemFibGVdPVwiZmFsc2VcIlxuICAgICAgW2Zvb3RlckJ1dHRvbnNdPVwiW11cIlxuICAgICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zaGVsbCBkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLW1vZGFsXCI+XG4gICAgICAgIDxzZGMtdGltZWxpbmVcbiAgICAgICAgICBbaXRlbXNdPVwiZmlsdGVyTW9kYWxUaW1lbGluZUl0ZW1zXCJcbiAgICAgICAgICBbYWN0aXZlSW5kZXhdPVwiZmlsdGVyTW9kYWxSZXZpZXdTdGVwQWN0aXZlID8gMiA6IChmaWx0ZXJNb2RhbENvbmZpZ3VyYXRpb25TdGVwQWN0aXZlID8gMSA6IDApXCJcbiAgICAgICAgICBbaW50ZXJhY3RpdmVdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Nob3dEZXNjcmlwdGlvbnNdPVwiZmFsc2VcIlxuICAgICAgICAgIFthcmlhTGFiZWxdPVwiZmlsdGVyTW9kYWxUaW1lbGluZUFyaWFMYWJlbFwiXG4gICAgICAgICAgKHN0ZXBTZWxlY3QpPVwib25GaWx0ZXJNb2RhbFRpbWVsaW5lU3RlcFNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgPjwvc2RjLXRpbWVsaW5lPlxuICAgICAgICBAaWYgKGZpbHRlck1vZGFsU2VsZWN0aW9uU3RlcEFjdGl2ZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLXN0ZXBcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZCBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZC0tc2VjdGlvblxuICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItYmFzZS1zZWxlY3RvclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtcGFuZWwtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLm1vZGFscy5maWx0ZXIuc3RlcHMuc2VsZWN0LnRpdGxlJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c2RjLWluZm8tc2lnblxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWx0ZXJzLnRvb2x0aXBzLm1vZGUnXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICA+PC9zZGMtaW5mby1zaWduPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItbW9kZS1yb3dcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1tb2RlLWNvcHlcIj5cbiAgICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLm1vZGFscy5maWx0ZXIudGl0bGUnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItbW9kZS1zZWxlY3RvclwiPlxuICAgICAgICAgICAgICAgIDxzZGMtc2VsZWN0LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImZpbHRlck1vZGVJdGVtc1wiXG4gICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwic29mdFwiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZEZpbHRlck1vZGVJdGVtc1wiXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkZpbHRlck1vZGVDaGFuZ2UoJGV2ZW50WzBdPy52YWx1ZSB8fCAnY29uZGl0aW9uJylcIlxuICAgICAgICAgICAgICAgID48L3NkYy1zZWxlY3QtYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmIChmaWx0ZXJNb2RhbE1vZGUgPT09ICdjb25kaXRpb24nKSB7XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1waWNrZXJcbiAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1waWNrZXItLWZpbHRlclxuICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXBpY2tlci0tc3RyZXRjaFxuICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1mbG93XG4gICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3RhZ2UtYm9keVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQtLXNlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3BpY2tsaXN0LXNoZWxsXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzZGMtcGlja2xpc3RcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImZpbHRlck1vZGFsUGlja2xpc3RJdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZElkc109XCJmaWx0ZXJNb2RhbFNlbGVjdGVkUGlja2xpc3RJZHNcIlxuICAgICAgICAgICAgICAgICAgICBpZEtleT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGVLZXk9XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlUHJlZml4S2V5PVwidGl0bGVQcmVmaXhcIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZVN1ZmZpeEtleT1cInRpdGxlU3VmZml4XCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGVQcmVmaXhDb2xvcktleT1cInRpdGxlUHJlZml4Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZVN1ZmZpeENvbG9yS2V5PVwidGl0bGVTdWZmaXhDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgIGJhZGdlS2V5PVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgICAgICBiYWRnZUNvbG9yS2V5PVwiYmFkZ2VDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgIFthdXRvUmVzaXplXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dQYWdpbmF0b3JdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd0l0ZW1JY29uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dTZWxlY3Rpb25Db3VudGVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW21heFZpc2libGVTZWxlY3RlZEl0ZW1zXT1cIjFcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5tb2RhbHMuc2VhcmNoUGxhY2Vob2xkZXInXCJcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkSWRzQ2hhbmdlKT1cIm9uRmlsdGVyTW9kYWxTZWxlY3RlZElkc0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgID48L3NkYy1waWNrbGlzdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQtLXNlY3Rpb25cbiAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItZG9tYWluLWludHJvXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1wYW5lbC10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWx0ZXJzLmRvbWFpbkxhYmVsJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPHNkYy1pbmZvLXNpZ25cbiAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiZmlsdGVyRG9tYWluRXhwcmVzc2lvblRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidsZWZ0J1wiXG4gICAgICAgICAgICAgICAgICA+PC9zZGMtaW5mby1zaWduPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLWRvbWFpbi1ncmlkXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1kb21haW4taXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMuZG9tYWluRXhwcmVzc2lvbicpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJEb21haW5FeHByZXNzaW9uVG9vbHRpcCB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItZG9tYWluLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5LWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLmNvbm5lY3RvcicpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJDb25uZWN0b3JUb29sdGlwIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICBAaWYgKGZpbHRlck1vZGFsQ29uZmlndXJhdGlvblN0ZXBBY3RpdmUpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLXN0ZXBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItdG9vbGJhclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeSBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS0tZmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcubW9kYWxzLmZpbHRlci5zdGVwcy5jb25maWd1cmUudGl0bGUnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS12YWx1ZS0tcGF0aFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgZmlsdGVyQ29uZmlndXJhdGlvblN1bW1hcnlMYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGlua1wiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub0ZpbHRlck1vZGFsU3RlcCgnc2VsZWN0JylcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgZmlsdGVyQmFja1RvU2VsZWN0aW9uTGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIEBpZiAoZmlsdGVyTW9kYWxNb2RlID09PSAnY29uZGl0aW9uJykge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1maWVsZC0tc3RyZXRjaFxuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZFxuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZC0tc2VjdGlvblxuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLWNvbmZpZy1jYXJkXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLWNvbmZpZy1zZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXBhbmVsLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5tb2RhbHMuZmlsdGVyLnN0ZXBzLmNvbmZpZ3VyZS50aXRsZScpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPHNkYy1pbmZvLXNpZ25cbiAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmlsdGVycy50b29sdGlwcy5jb25maWd1cmUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9zZGMtaW5mby1zaWduPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1ncmlkIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1ncmlkLS1maWx0ZXItY29udHJvbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c2RjLWNvbWJvYm94XG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMuY29ubmVjdG9yJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC5jb25uZWN0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZmlsdGVyRHJhZnQuY29ubmVjdG9yID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImZpbHRlckNvbm5lY3Rvck9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIm92ZXJsYXlBcHBlbmRUYXJnZXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3pJbmRleF09XCJvdmVybGF5WkluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWx0ZXJDb25uZWN0b3JEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5mb1Rvb2x0aXBdPVwiZmlsdGVyQ29ubmVjdG9yVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1jb21ib2JveD5cbiAgICAgICAgICAgICAgICAgICAgICA8c2RjLWNvbWJvYm94XG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMub3BlcmF0b3InXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpbHRlckRyYWZ0Lm9wZXJhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckRyYWZ0Lm9wZXJhdG9yID0gJGV2ZW50OyBvbkZpbHRlck9wZXJhdG9yQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZmlsdGVyT3BlcmF0b3JPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCJvdmVybGF5QXBwZW5kVGFyZ2V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt6SW5kZXhdPVwib3ZlcmxheVpJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFmaWx0ZXJEcmFmdC5jb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2luZm9Ub29sdGlwXT1cImZpbHRlck9wZXJhdG9yVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvc2RjLWNvbWJvYm94PlxuICAgICAgICAgICAgICAgICAgICAgIDxzZGMtY29tYm9ib3hcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy52YWx1ZVR5cGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpbHRlckRyYWZ0LnZhbHVlVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJEcmFmdC52YWx1ZVR5cGUgPSAkZXZlbnQ7IG9uRmlsdGVyVmFsdWVUeXBlQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwidmFsdWVUeXBlT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwib3ZlcmxheUFwcGVuZFRhcmdldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbekluZGV4XT1cIm92ZXJsYXlaSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpbHRlclZhbHVlVHlwZURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmZvVG9vbHRpcF09XCJmaWx0ZXJWYWx1ZVR5cGVUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvc2RjLWNvbWJvYm94PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLW9wdGlvbmFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2RjLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLnN0YXRlcy5vcHRpb25hbCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC5vcHRpb25hbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckRyYWZ0Lm9wdGlvbmFsID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZGMtaW5mby1zaWduXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cImZpbHRlck9wdGlvbmFsVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1pbmZvLXNpZ24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1jb25maWctc2VjdGlvblxuICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItY29uZmlnLXNlY3Rpb24tLXZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWdyaWQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWdyaWQtLXNpbmdsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd0ZpbHRlckJvb2xlYW5Db21ib2JveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNkYy1jb21ib2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMudmFsdWUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVyRHJhZnQudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJEcmFmdC52YWx1ZSA9ICRldmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImJvb2xlYW5WYWx1ZU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwib3ZlcmxheUFwcGVuZFRhcmdldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt6SW5kZXhdPVwib3ZlcmxheVpJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zZGMtY29tYm9ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd0ZpbHRlclZhbHVlVGV4dGJveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNkYy10ZXh0Ym94XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy52YWx1ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckRyYWZ0LnZhbHVlID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy10ZXh0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dGaWx0ZXJWYWx1ZXNUZXh0Ym94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2RjLXRleHRib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLnZhbHVlcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC52YWx1ZXNUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZmlsdGVyRHJhZnQudmFsdWVzVGV4dCA9ICRldmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zZGMtdGV4dGJveD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChzaG93RmlsdGVyQmV0d2VlbklucHV0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19iZXR3ZWVuIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1ncmlkLWNvbHVtbi1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzZGMtdGV4dGJveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy52YWx1ZVN0YXJ0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVyRHJhZnQuYmV0d2VlblN0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJEcmFmdC5iZXR3ZWVuU3RhcnQgPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy10ZXh0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c2RjLXRleHRib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMudmFsdWVFbmQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC5iZXR3ZWVuRW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJEcmFmdC5iZXR3ZWVuRW5kID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zZGMtdGV4dGJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dGaWx0ZXJQYXJhbWV0ZXJUZXh0Ym94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2RjLXRleHRib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLnBhcmFtZXRlck5hbWUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVyRHJhZnQucGFyYW1ldGVyTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckRyYWZ0LnBhcmFtZXRlck5hbWUgPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc2RjLXRleHRib3g+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1maWVsZFxuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZmllbGQtLXN0cmV0Y2hcbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmRcbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQtLXNlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1jb25maWctY2FyZFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1jb25maWctc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWdyaWQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWdyaWQtLWZpbHRlci1jb250cm9sc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzZGMtY29tYm9ib3hcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy5jb25uZWN0b3InXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpbHRlckRyYWZ0LmNvbm5lY3RvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJEcmFmdC5jb25uZWN0b3IgPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZmlsdGVyQ29ubmVjdG9yT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwib3ZlcmxheUFwcGVuZFRhcmdldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbekluZGV4XT1cIm92ZXJsYXlaSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpbHRlckNvbm5lY3RvckRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmZvVG9vbHRpcF09XCJmaWx0ZXJDb25uZWN0b3JUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvc2RjLWNvbWJvYm94PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLW9wdGlvbmFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2RjLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLnN0YXRlcy5vcHRpb25hbCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC5vcHRpb25hbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckRyYWZ0Lm9wdGlvbmFsID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZGMtaW5mby1zaWduXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cImZpbHRlck9wdGlvbmFsVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1pbmZvLXNpZ24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1jb25maWctc2VjdGlvblxuICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItY29uZmlnLXNlY3Rpb24tLWRvbWFpblwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtcGFuZWwtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy5kb21haW5FeHByZXNzaW9uJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8c2RjLWluZm8tc2lnblxuICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiZmlsdGVyRG9tYWluRXhwcmVzc2lvblRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInbGVmdCdcIlxuICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1pbmZvLXNpZ24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1kb21haW4taGludFwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlckRvbWFpbkV4cHJlc3Npb25Ub29sdGlwIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c2RjLXRleHRhcmVhXG4gICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIicnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC5kb21haW5FeHByZXNzaW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJEcmFmdC5kb21haW5FeHByZXNzaW9uID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cIjEwXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvc2RjLXRleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItc3RlcFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci10b29sYmFyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5IGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5LS1maWx0ZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5tb2RhbHMuZmlsdGVyLnN0ZXBzLnJldmlldy50aXRsZScpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS12YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5LXZhbHVlLS1wYXRoXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJDb25maWd1cmF0aW9uU3VtbWFyeUxhYmVsIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnb1RvRmlsdGVyTW9kYWxTdGVwKCdjb25maWd1cmUnKVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJCYWNrVG9Db25maWd1cmF0aW9uTGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1maWVsZFxuICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWZpZWxkLS1zdHJldGNoXG4gICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZFxuICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQtLXNlY3Rpb25cbiAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItY29uZmlnLWNhcmRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1yZXZpZXctZ3JpZFwiPlxuICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBmaWx0ZXJSZXZpZXdJdGVtczsgdHJhY2sgdHJhY2tCeUlkKCRpbmRleCwgaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1yZXZpZXctaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5LXZhbHVlLS1wYXRoXT1cIml0ZW0uZW1waGFzaXplID09PSAncGF0aCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItcmV2aWV3LWNvZGVdPVwiaXRlbS5lbXBoYXNpemUgPT09ICdjb2RlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnZhbHVlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLXJldmlldy1wcmV2aWV3XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLnNxbFByZXZpZXcnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8c2RjLXRleHRhcmVhXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpbHRlclJldmlld1ByZXZpZXdMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cIjZcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICA+PC9zZGMtdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgZm9vdGVyIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWZvb3RlclwiPlxuICAgICAgICA8c2RjLWJ1dHRvblxuICAgICAgICAgIFtsYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNhbmNlbCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBwcmlvcml0eT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgKGNsaWNrKT1cImNsb3NlRmlsdGVyTW9kYWwoKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiY2xvc2VGaWx0ZXJNb2RhbCgpXCJcbiAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgQGlmIChmaWx0ZXJNb2RhbFNlbGVjdGlvblN0ZXBBY3RpdmUpIHtcbiAgICAgICAgICA8c2RjLWJ1dHRvblxuICAgICAgICAgICAgW2xhYmVsXT1cImZpbHRlck1vZGFsQ29uZmlndXJlQWN0aW9uTGFiZWxcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFmaWx0ZXJNb2RhbENhblByb2NlZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFkdmFuY2VGaWx0ZXJNb2RhbFN0ZXAoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhZHZhbmNlRmlsdGVyTW9kYWxTdGVwKClcIlxuICAgICAgICAgID48L3NkYy1idXR0b24+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChmaWx0ZXJNb2RhbENvbmZpZ3VyYXRpb25TdGVwQWN0aXZlKSB7XG4gICAgICAgICAgPHNkYy1idXR0b25cbiAgICAgICAgICAgIFtsYWJlbF09XCJmaWx0ZXJNb2RhbFJldmlld0FjdGlvbkxhYmVsXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhZmlsdGVyTW9kYWxDYW5SZXZpZXdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFkdmFuY2VGaWx0ZXJNb2RhbFN0ZXAoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhZHZhbmNlRmlsdGVyTW9kYWxTdGVwKClcIlxuICAgICAgICAgID48L3NkYy1idXR0b24+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChmaWx0ZXJNb2RhbFJldmlld1N0ZXBBY3RpdmUpIHtcbiAgICAgICAgICA8c2RjLWJ1dHRvblxuICAgICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuc2F2ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuU2F2ZUZpbHRlclwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2F2ZUZpbHRlcigpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNhdmVGaWx0ZXIoKVwiXG4gICAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9zZGMtbW9kYWw+XG4gIH1cblxuICBAaWYgKGZpZWxkTW9kYWxWaXNpYmxlKSB7XG4gICAgPHNkYy1tb2RhbFxuICAgICAgW3Zpc2libGVdPVwiZmllbGRNb2RhbFZpc2libGVcIlxuICAgICAgKHZpc2libGVDaGFuZ2UpPVwiJGV2ZW50ID8gKGZpZWxkTW9kYWxWaXNpYmxlID0gdHJ1ZSkgOiBjbG9zZUZpZWxkTW9kYWwoKVwiXG4gICAgICBbaGVhZGVyXT1cImZpZWxkTW9kYWxUaXRsZVwiXG4gICAgICBbd2lkdGhdPVwibW9kYWxEaW1lbnNpb25zLmZpZWxkLndpZHRoXCJcbiAgICAgIFtoZWlnaHRdPVwibW9kYWxEaW1lbnNpb25zLmZpZWxkLmhlaWdodFwiXG4gICAgICBbbWF4aW1pemFibGVdPVwiZmFsc2VcIlxuICAgICAgW2Zvb3RlckJ1dHRvbnNdPVwiW11cIlxuICAgICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zaGVsbCBkeW5hbWljLXZpZXctYnVpbGRlcl9fZmllbGQtbW9kYWxcIj5cbiAgICAgICAgPHNkYy10aW1lbGluZVxuICAgICAgICAgIFtpdGVtc109XCJmaWVsZE1vZGFsVGltZWxpbmVJdGVtc1wiXG4gICAgICAgICAgW2FjdGl2ZUluZGV4XT1cImZpZWxkTW9kYWxDb25maWd1cmF0aW9uU3RlcEFjdGl2ZSA/IDEgOiAwXCJcbiAgICAgICAgICBbaW50ZXJhY3RpdmVdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Nob3dEZXNjcmlwdGlvbnNdPVwiZmFsc2VcIlxuICAgICAgICAgIFthcmlhTGFiZWxdPVwiZmllbGRNb2RhbFRpbWVsaW5lQXJpYUxhYmVsXCJcbiAgICAgICAgICAoc3RlcFNlbGVjdCk9XCJvbkZpZWxkTW9kYWxUaW1lbGluZVN0ZXBTZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgID48L3NkYy10aW1lbGluZT5cbiAgICAgICAgQGlmIChmaWVsZE1vZGFsU2VsZWN0aW9uU3RlcEFjdGl2ZSkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXNoZWxsIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zaGVsbC0tZnVsbFxuICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLWZsb3cgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN0YWdlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZCBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZC0tc2VjdGlvblxuICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19waWNrbGlzdC1zaGVsbCBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3RhZ2UtYm9keVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNkYy1waWNrbGlzdFxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJmaWVsZE1vZGFsUGlja2xpc3RJdGVtc1wiXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkSWRzXT1cImZpZWxkTW9kYWxTZWxlY3RlZFBpY2tsaXN0SWRzXCJcbiAgICAgICAgICAgICAgICBpZEtleT1cImlkXCJcbiAgICAgICAgICAgICAgICB0aXRsZUtleT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICB0aXRsZVByZWZpeEtleT1cInRpdGxlUHJlZml4XCJcbiAgICAgICAgICAgICAgICB0aXRsZVN1ZmZpeEtleT1cInRpdGxlU3VmZml4XCJcbiAgICAgICAgICAgICAgICB0aXRsZVByZWZpeENvbG9yS2V5PVwidGl0bGVQcmVmaXhDb2xvclwiXG4gICAgICAgICAgICAgICAgdGl0bGVTdWZmaXhDb2xvcktleT1cInRpdGxlU3VmZml4Q29sb3JcIlxuICAgICAgICAgICAgICAgIGJhZGdlS2V5PVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgIGJhZGdlQ29sb3JLZXk9XCJiYWRnZUNvbG9yXCJcbiAgICAgICAgICAgICAgICBbYXV0b1Jlc2l6ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dQYWdpbmF0b3JdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtzaG93SXRlbUljb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtzaG93U2VsZWN0aW9uQ291bnRlcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcubW9kYWxzLnNlYXJjaFBsYWNlaG9sZGVyJ1wiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkSWRzQ2hhbmdlKT1cIm9uRmllbGRNb2RhbFNlbGVjdGVkSWRzQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICA+PC9zZGMtcGlja2xpc3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZmllbGQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWZpZWxkLS1zdHJldGNoXG4gICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctc2hlbGxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctdG9vbGJhclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpZWxkLWNvbmZpZy1zdW1tYXJ5XCI+XG4gICAgICAgICAgICAgICAge3sgZmllbGRNb2RhbENvbmZpZ3VyZWRJdGVtcy5sZW5ndGggfX1cbiAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5jYXJkcy5maWVsZHMudGl0bGUnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgQGlmIChmaWVsZE1vZGFsSGFzU2VsZWN0YWJsZUNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0tcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkQW5vdGhlckZpZWxkRnJvbU1vZGFsKClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5zZWxlY3RDb2x1bW5zJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQtLXNlY3Rpb25cbiAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtbGlzdC1zaGVsbFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctbGlzdFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZmllbGRNb2RhbENvbmZpZ3VyZWRJdGVtczsgdHJhY2sgdHJhY2tCeUlkKCRpbmRleCwgaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmllbGQtY29uZmlnLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpZWxkLWNvbmZpZy1tYWluXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi10YWJsZS1sYWJlbFwiPnt7IGl0ZW0udGFibGVMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1zZXBhcmF0b3JcIj4uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLWFjY2VudFwiPnt7IGl0ZW0uZmllbGRMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uZnVuY3Rpb25OYW1lICYmICFpc0ZpZWxkRnVuY3Rpb25FZGl0aW5nKGl0ZW0uY29sdW1uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctZnVuY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWNoaXAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1jaGlwLS1vcGVyYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZnVuY3Rpb25MYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5mdW5jdGlvbkFsaWFzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1ldGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZnVuY3Rpb25BbGlhcyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgQGlmICghaXNGaWVsZEZ1bmN0aW9uRWRpdGluZyhpdGVtLmNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpZWxkLWNvbmZpZy1jb250cm9sc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNkYy10ZXh0Ym94XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy5hbGlhcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJpdGVtLmFsaWFzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWVsZE1vZGFsQWxpYXNDaGFuZ2UoaXRlbS5jb2x1bW4sICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4bGVuZ3RoXT1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy10ZXh0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC13aWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWxhYmVsLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMud2lkdGgnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2RjLWluZm8tc2lnblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5tZXNzYWdlcy5maWVsZFdpZHRoSW5mbydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1pbmZvLXNpZ24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c2RjLXRleHRib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIml0ZW0ud2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmllbGRNb2RhbFdpZHRoQ2hhbmdlKGl0ZW0uY29sdW1uLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhsZW5ndGhdPVwiMTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiMTYwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc2RjLXRleHRib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN0YXJ0RmllbGRGdW5jdGlvbkVkaXQoaXRlbS5jb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmZ1bmN0aW9uTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY29uZmlndXJlRmllbGQnKSB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICgoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMuZnVuY3Rpb25OYW1lJykgfCB0cmFuc2xhdGUpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uLS1kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5yZW1vdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5yZW1vdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVGaWVsZE1vZGFsRHJhZnQoaXRlbS5jb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctY29udHJvbHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpZWxkLWNvbmZpZy1jb250cm9scy0tZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNkYy1jb21ib2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMuZnVuY3Rpb25OYW1lJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpZWxkRnVuY3Rpb25EcmFmdC5mdW5jdGlvbk5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkZpZWxkRnVuY3Rpb25EcmFmdE5hbWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImZpZWxkTW9kYWxGdW5jdGlvbk9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwib3ZlcmxheUFwcGVuZFRhcmdldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt6SW5kZXhdPVwib3ZlcmxheVpJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zZGMtY29tYm9ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2RjLXRleHRib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLmFsaWFzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpZWxkRnVuY3Rpb25EcmFmdC5mdW5jdGlvbkFsaWFzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZmllbGRGdW5jdGlvbkRyYWZ0LmZ1bmN0aW9uQWxpYXMgPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4bGVuZ3RoXT1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFmaWVsZEZ1bmN0aW9uRHJhZnQuZnVuY3Rpb25OYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy10ZXh0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb24tLWRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNhbmNlbCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNhbmNlbCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbEZpZWxkRnVuY3Rpb25FZGl0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19pY29uLWFjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19pY29uLWFjdGlvbi0tYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuc2F2ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNhdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlRmllbGRGdW5jdGlvbkVkaXQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2hlY2tcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgZm9vdGVyIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWZvb3RlciBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZm9vdGVyLS1iZXR3ZWVuXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZm9vdGVyLWdyb3VwIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1mb290ZXItZ3JvdXAtLXN0YXJ0XCI+XG4gICAgICAgICAgQGlmIChmaWVsZE1vZGFsU2VsZWN0aW9uU3RlcEFjdGl2ZSAmJiBmaWVsZE1vZGFsQ2FuU2VsZWN0QWxsKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluayBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLXByaW1hcnlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0QWxsRmllbGRNb2RhbENvbHVtbnMoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5zZWxlY3RBbGxDb2x1bW5zJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZm9vdGVyLWdyb3VwXCI+XG4gICAgICAgICAgPHNkYy1idXR0b25cbiAgICAgICAgICAgIFtsYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNhbmNlbCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIHByaW9yaXR5PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbG9zZUZpZWxkTW9kYWwoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJjbG9zZUZpZWxkTW9kYWwoKVwiXG4gICAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgICBAaWYgKGZpZWxkTW9kYWxTZWxlY3Rpb25TdGVwQWN0aXZlICYmIGZpZWxkTW9kYWxDYW5Qcm9jZWVkKSB7XG4gICAgICAgICAgICA8c2RjLWJ1dHRvblxuICAgICAgICAgICAgICBbbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5uZXh0U3RlcCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFkdmFuY2VGaWVsZE1vZGFsU3RlcCgpXCJcbiAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYWR2YW5jZUZpZWxkTW9kYWxTdGVwKClcIlxuICAgICAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChmaWVsZE1vZGFsQ29uZmlndXJhdGlvblN0ZXBBY3RpdmUpIHtcbiAgICAgICAgICAgIDxzZGMtYnV0dG9uXG4gICAgICAgICAgICAgIFtsYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNhdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuU2F2ZUZpZWxkTW9kYWxcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZUZpZWxkKClcIlxuICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzYXZlRmllbGQoKVwiXG4gICAgICAgICAgICA+PC9zZGMtYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NkYy1tb2RhbD5cbiAgfVxuXG4gIDxkaXZcbiAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX193b3Jrc3BhY2VcIlxuICAgIFtjbGFzcy5keW5hbWljLXZpZXctYnVpbGRlcl9fd29ya3NwYWNlLS1zdGFja2VkXT1cImxheW91dE1vZGUgPT09ICdzdGFja2VkJ1wiXG4gICAgW2NsYXNzLmR5bmFtaWMtdmlldy1idWlsZGVyX193b3Jrc3BhY2UtLXNwbGl0XT1cImxheW91dE1vZGUgPT09ICdzcGxpdCdcIlxuICAgIFtjbGFzcy5keW5hbWljLXZpZXctYnVpbGRlcl9fd29ya3NwYWNlLS1wcmV2aWV3LWhpZGRlbl09XCIhcHJldmlld1Zpc2libGVcIlxuICAgID5cbiAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2J1aWxkZXItYXJlYVwiPlxuICAgICAgPGRpdlxuICAgICAgICAjc2VjdGlvbnNDb250YWluZXJcbiAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbnNcIlxuICAgICAgICBbY2xhc3MuZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb25zLS1zdGFja2VkXT1cImxheW91dE1vZGUgPT09ICdzdGFja2VkJ1wiXG4gICAgICAgIFtjbGFzcy5keW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbnMtLXNwbGl0XT1cImxheW91dE1vZGUgPT09ICdzcGxpdCdcIlxuICAgICAgICA+XG4gICAgICAgIDxzZWN0aW9uXG4gICAgICAgICAgI2J1aWxkZXJTZWN0aW9uXG4gICAgICAgICAgZGF0YS1zZWN0aW9uLWlkPVwidGFibGVzXCJcbiAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWhlYWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi1sYWJlbFwiPlxuICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5jYXJkcy5zb3VyY2VzLnRpdGxlJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rXG4gICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLXByaW1hcnlcbiAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0taWNvblwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNlbGVjdFRhYmxlcycpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuc2VsZWN0VGFibGVzJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuU291cmNlTW9kYWwoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmsgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rLS1pY29uXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seSB8fCAhY2FuT3BlblNvdXJjZUNvbmZpZ3VyYXRpb25cIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNvbmZpZ3VyZUFsaWFzZXMnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNvbmZpZ3VyZUFsaWFzZXMnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Tb3VyY2VDb25maWd1cmF0aW9uTW9kYWwoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNvZ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluayBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLWljb25cIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5IHx8ICFzb3VyY2VJdGVtcy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNsZWFyJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jbGVhcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJTb3VyY2VzKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10cmFzaC1hbHRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmICghc291cmNlSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19lbXB0eS1yb3dcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNlbGVjdFRhYmxlcycpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNlbGVjdFRhYmxlcycpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Tb3VyY2VNb2RhbCgpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNlbGVjdFRhYmxlcycpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChzb3VyY2VJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc3RhY2sgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3N0YWNrLS13cmFwXCI+XG4gICAgICAgICAgICAgIEBmb3IgKHNvdXJjZSBvZiBzb3VyY2VJdGVtczsgdHJhY2sgdHJhY2tCeUlkKGksIHNvdXJjZSk7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93IGR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctLXNvdXJjZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1tYWluXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy10YWJsZS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1kYlwiPnt7IHNvdXJjZS5kYkxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1kb3RcIj4uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy10YWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgc291cmNlLnRhYmxlTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzb3VyY2UuYWxpYXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctbWV0YVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQWxpYXMge3sgc291cmNlLmFsaWFzIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uIGR5bmFtaWMtdmlldy1idWlsZGVyX19pY29uLWFjdGlvbi0tZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMucmVtb3ZlJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5yZW1vdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZVNvdXJjZShpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24tcm93XCI+XG4gICAgICAgICAgPHNlY3Rpb25cbiAgICAgICAgICAgICNidWlsZGVyU2VjdGlvblxuICAgICAgICAgICAgZGF0YS1zZWN0aW9uLWlkPVwiam9pbnNcIlxuICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbiBkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi0tZmx1aWRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWhlYWRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuY2FyZHMuam9pbnMudGl0bGUnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rXG4gICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0tcHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLWljb25cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkgfHwgIWNhbkNvbmZpZ3VyZUpvaW5zXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmFkZEpvaW4nKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkSm9pbicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuSm9pbk1vZGFsKClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGx1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0taWNvblwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seSB8fCAham9pbkl0ZW1zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jbGVhcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jbGVhcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckpvaW5zKClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdHJhc2gtYWx0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmICghY2FuQ29uZmlndXJlSm9pbnMpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19pbmZvLXJvd1wiPlxuICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLm1lc3NhZ2VzLmpvaW5SZXF1aXJlc1R3b1RhYmxlcycpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChjYW5Db25maWd1cmVKb2lucyAmJiAham9pbkl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZW1wdHktcm93XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkSm9pbicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkSm9pbicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkpvaW5Nb2RhbCgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5hZGRKb2luJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGpvaW5JdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zdGFjayBkeW5hbWljLXZpZXctYnVpbGRlcl9fc3RhY2stLXdyYXBcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGpvaW5JdGVtczsgdHJhY2sgdHJhY2tCeUlkKGksIGl0ZW0pOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3dcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctcGF0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LXRhYmxlXCI+e3sgaXRlbS5zb3VyY2VUYWJsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1kb3RcIj4uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWZpZWxkXCI+e3sgaXRlbS5zb3VyY2VGaWVsZCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fam9pbi1vcGVyYXRvclwiPnt7IGl0ZW0ub3BlcmF0b3IgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fam9pbi1hcnJvd1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtbG9uZy1hcnJvdy1hbHQtcmlnaHRcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1wYXRoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctdGFibGVcIj57eyBpdGVtLnRhcmdldFRhYmxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWRvdFwiPi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctZmllbGRcIj57eyBpdGVtLnRhcmdldEZpZWxkIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmVkaXQnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuZWRpdCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuSm9pbk1vZGFsKGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBlblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uIGR5bmFtaWMtdmlldy1idWlsZGVyX19pY29uLWFjdGlvbi0tZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnJlbW92ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5yZW1vdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlSm9pbihpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8c2VjdGlvblxuICAgICAgICAgICAgI2J1aWxkZXJTZWN0aW9uXG4gICAgICAgICAgICBkYXRhLXNlY3Rpb24taWQ9XCJncm91cEJ5XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24gZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24tLWNvbXBhY3RcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWhlYWRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24tbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmNhcmRzLmdyb3VwQnkudGl0bGUnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rXG4gICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0tcHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLWljb25cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkgfHwgIWdyb3VwQnlTZWxlY3RhYmxlQ29sdW1ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuc2VsZWN0Q29sdW1ucycpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5zZWxlY3RDb2x1bW5zJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5TZWxlY3Rpb25Nb2RhbCgnZ3JvdXBCeScpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluayBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLWljb25cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkgfHwgIWdyb3VwQnlJdGVtcy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY2xlYXInKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY2xlYXInKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJHcm91cEJ5KClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdHJhc2gtYWx0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmICghZ3JvdXBCeUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZW1wdHktcm93XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5TZWxlY3Rpb25Nb2RhbCgnZ3JvdXBCeScpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5zZWxlY3RDb2x1bW5zJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGdyb3VwQnlJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zdGFjayBkeW5hbWljLXZpZXctYnVpbGRlcl9fc3RhY2stLXdyYXBcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGdyb3VwQnlJdGVtczsgdHJhY2sgdHJhY2tCeUlkKGksIGl0ZW0pOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3dcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctcGF0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LXRhYmxlXCI+e3sgaXRlbS50YWJsZUxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWRvdFwiPi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctZmllbGRcIj57eyBpdGVtLmZpZWxkTGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb24gZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uLS1kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMucmVtb3ZlJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnJlbW92ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVHcm91cEJ5KGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxzZWN0aW9uXG4gICAgICAgICAgI2J1aWxkZXJTZWN0aW9uXG4gICAgICAgICAgZGF0YS1zZWN0aW9uLWlkPVwiZmllbGRzXCJcbiAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWhlYWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi1sYWJlbFwiPlxuICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmNhcmRzLmZpZWxkcy50aXRsZScpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8c2RjLWluZm8tc2lnblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2hpbnRcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIidWb2PDqiBwb2RlIG9yZGVuYXIgYSBzZXF1w6puY2lhIGRvcyBjYW1wb3MgYXJyYXN0YW5kbyBlIHNvbHRhbmRvLidcIlxuICAgICAgICAgICAgICA+PC9zZGMtaW5mby1zaWduPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24tYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmtcbiAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0tcHJpbWFyeVxuICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rLS1pY29uXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seSB8fCAhZmllbGRTZWxlY3RhYmxlQ29sdW1ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNlbGVjdENvbHVtbnMnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNlbGVjdENvbHVtbnMnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5GaWVsZE1vZGFsKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wbHVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0taWNvblwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkgfHwgIWNhbk9wZW5GaWVsZENvbmZpZ3VyYXRpb25cIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNvbmZpZ3VyZUZpZWxkJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jb25maWd1cmVGaWVsZCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkZpZWxkQ29uZmlndXJhdGlvbk1vZGFsKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1jb2dcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmsgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rLS1pY29uXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seSB8fCAhZmllbGRJdGVtcy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNsZWFyJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jbGVhcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJGaWVsZHMoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRyYXNoLWFsdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBAaWYgKCFmaWVsZEl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZW1wdHktcm93XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkZpZWxkTW9kYWwoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5zZWxlY3RDb2x1bW5zJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGZpZWxkSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3N0YWNrIGR5bmFtaWMtdmlldy1idWlsZGVyX19zdGFjay0td3JhcFwiPlxuICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGZpZWxkSXRlbXM7IHRyYWNrIHRyYWNrQnlJZChpLCBpdGVtKTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICBAaWYgKGlzRmllbGREcm9wSW5kaWNhdG9yVmlzaWJsZShpKSkge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1kcm9wLWluZGljYXRvclwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3JvdyBkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LS1kcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctLWRyYWctb3JpZ2luXT1cImRyYWdnaW5nRmllbGRJbmRleCA9PT0gaXRlbS5zb3VyY2VJbmRleFwiXG4gICAgICAgICAgICAgICAgICBbZHJhZ2dhYmxlXT1cIiFpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgIChkcmFnc3RhcnQpPVwib25GaWVsZERyYWdTdGFydChpdGVtLnNvdXJjZUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAoZHJhZ292ZXIpPVwib25GaWVsZERyYWdPdmVyKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICAgICAgKGRyb3ApPVwib25GaWVsZERyb3AoKVwiXG4gICAgICAgICAgICAgICAgICAoZHJhZ2VuZCk9XCJvbkZpZWxkRHJhZ0VuZCgpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW9yZGVyXCI+e3sgaXRlbS5vcmRlckxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctcGF0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy10YWJsZVwiPnt7IGl0ZW0udGFibGVMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctZG90XCI+Ljwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctZmllbGRcIj57eyBpdGVtLmZpZWxkTGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmFsaWFzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1ldGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEFsaWFzIHt7IGl0ZW0uYWxpYXMgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLndpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1ldGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ud2lkdGggfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmZ1bmN0aW9uTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1jaGlwIGR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctY2hpcC0tb3BlcmF0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZnVuY3Rpb25MYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uZnVuY3Rpb25BbGlhcykge1xuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1tZXRhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmZ1bmN0aW9uQWxpYXMgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb24gZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uLS1kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5yZW1vdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnJlbW92ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlRmllbGQoaXRlbS5zb3VyY2VJbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKGlzRmllbGREcm9wSW5kaWNhdG9yQXRFbmRWaXNpYmxlKCkpIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1kcm9wLWluZGljYXRvclwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLXJvd1wiPlxuICAgICAgICAgIDxzZWN0aW9uXG4gICAgICAgICAgICAjYnVpbGRlclNlY3Rpb25cbiAgICAgICAgICAgIGRhdGEtc2VjdGlvbi1pZD1cInNvcnRpbmdcIlxuICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbiBkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi0tY29tcGFjdFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24taGVhZFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24tbGFiZWxcIj5cbiAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5jYXJkcy5zb3J0aW5nLnRpdGxlJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGlua1xuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLXByaW1hcnlcbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rLS1pY29uXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5IHx8ICFzb3J0U2VsZWN0YWJsZUl0ZW1zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5hZGRTb3J0JykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmFkZFNvcnQnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlblNvcnRNb2RhbCgpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluayBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLWljb25cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkgfHwgIXNvcnRJdGVtcy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY2xlYXInKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY2xlYXInKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJTb3J0aW5nKClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdHJhc2gtYWx0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmICghc29ydEl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZW1wdHktcm93XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkU29ydCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkU29ydCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlblNvcnRNb2RhbCgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5hZGRTb3J0JykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKHNvcnRJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zdGFjayBkeW5hbWljLXZpZXctYnVpbGRlcl9fc3RhY2stLXdyYXBcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIHNvcnRJdGVtczsgdHJhY2sgdHJhY2tCeUlkKGksIGl0ZW0pOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3dcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uZnVuY3Rpb25OYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctY2hpcCBkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWNoaXAtLW9wZXJhdG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZnVuY3Rpb25MYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctcGF0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LXRhYmxlXCI+e3sgaXRlbS50YWJsZUxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWRvdFwiPi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctZmllbGRcIj57eyBpdGVtLmZpZWxkTGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1jaGlwIGR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctY2hpcC0tb3BlcmF0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZGlyZWN0aW9uIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuZWRpdCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5lZGl0JykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Tb3J0TW9kYWwoaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb24gZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uLS1kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMucmVtb3ZlJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnJlbW92ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVTb3J0KGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgICAgPHNlY3Rpb25cbiAgICAgICAgICAgICNidWlsZGVyU2VjdGlvblxuICAgICAgICAgICAgZGF0YS1zZWN0aW9uLWlkPVwiZmlsdGVyc1wiXG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uIGR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLS1mbHVpZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24taGVhZFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24tbGFiZWxcIj5cbiAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5jYXJkcy5maWx0ZXJzLnRpdGxlJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGlua1xuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLXByaW1hcnlcbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rLS1pY29uXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5IHx8ICFhdmFpbGFibGVDb2x1bW5zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5hZGRGaWx0ZXInKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkRmlsdGVyJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5GaWx0ZXJNb2RhbCgpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluayBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLWljb25cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkgfHwgIWZpbHRlckl0ZW1zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jbGVhcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jbGVhcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckZpbHRlcnMoKVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10cmFzaC1hbHRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAaWYgKCFmaWx0ZXJJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2VtcHR5LXJvd1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmFkZEZpbHRlcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkRmlsdGVyJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRmlsdGVyTW9kYWwoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkRmlsdGVyJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGZpbHRlckl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3N0YWNrIGR5bmFtaWMtdmlldy1idWlsZGVyX19zdGFjay0td3JhcFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZmlsdGVySXRlbXM7IHRyYWNrIHRyYWNrQnlJZChpLCBpdGVtKTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1tYWluXCI+XG4gICAgICAgICAgICAgICAgICAgICAgQGlmICghaXRlbS5pc0RvbWFpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LXBhdGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LXRhYmxlXCI+e3sgaXRlbS50YWJsZUxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctZG90XCI+Ljwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWZpZWxkXCI+e3sgaXRlbS5maWVsZExhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWNoaXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWNoaXAtLW9wZXJhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGl0ZW0ub3BlcmF0b3JMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1jaGlwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1jaGlwLS1kb21haW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgaXRlbS50YWJsZUxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctY2hpcCBkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWNoaXAtLXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnN1YnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5vcHRpb25hbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWNoaXAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1jaGlwLS1vcHRpb25hbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5zdGF0ZXMub3B0aW9uYWwnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmVkaXQnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuZWRpdCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRmlsdGVyTW9kYWwoaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb24gZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uLS1kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMucmVtb3ZlJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnJlbW92ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVGaWx0ZXIoaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIEBmb3IgKGFycm93IG9mIGZsb3dBcnJvd3M7IHRyYWNrIHRyYWNrQnlBcnJvdygkaW5kZXgsIGFycm93KSkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2Zsb3ctYXJyb3dcIlxuICAgICAgICAgICAgW2NsYXNzLmR5bmFtaWMtdmlldy1idWlsZGVyX19mbG93LWFycm93LS1yaWdodF09XCJhcnJvdy5kaXJlY3Rpb24gPT09ICdyaWdodCdcIlxuICAgICAgICAgICAgW2NsYXNzLmR5bmFtaWMtdmlldy1idWlsZGVyX19mbG93LWFycm93LS1kb3duXT1cImFycm93LmRpcmVjdGlvbiA9PT0gJ2Rvd24nXCJcbiAgICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cImFycm93LmxlZnRcIlxuICAgICAgICAgICAgW3N0eWxlLnRvcC5weF09XCJhcnJvdy50b3BcIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgIFtjbGFzc109XCJhcnJvdy5kaXJlY3Rpb24gPT09ICdyaWdodCdcbiAgICAgICAgICAgICAgICA/ICdmYXMgZmEtYW5nbGUtZG91YmxlLXJpZ2h0J1xuICAgICAgICAgICAgICAgIDogJ2ZhcyBmYS1hbmdsZS1kb3VibGUtZG93bidcIlxuICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKHByZXZpZXdWaXNpYmxlKSB7XG4gICAgICA8YXNpZGUgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcHJldmlldy1hcmVhXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19wcmV2aWV3XCJcbiAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cInNxbFByZXZpZXdQYW5lbEhlaWdodFwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcHJldmlldy1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcHJldmlldy10aXRsZVwiPlNRTCBQcmV2aWV3PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3ByZXZpZXctc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgQ29uc3VsdGEgZ2VyYWRhIGF1dG9tYXRpY2FtZW50ZSBhIHBhcnRpciBkYSBjb25maWd1cmFjYW8gYXR1YWwuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3ByZXZpZXctYm9keVwiPlxuICAgICAgICAgICAgPHNkYy1jb2RlLWVkaXRvclxuICAgICAgICAgICAgICBbc3FsXT1cInNxbFByZXZpZXdcIlxuICAgICAgICAgICAgICBsYW5ndWFnZT1cInNxbFwiXG4gICAgICAgICAgICAgIFtyZWFkT25seV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3Nob3dDb3B5XT1cInRydWVcIlxuICAgICAgICAgICAgICBbaGVpZ2h0XT1cInNxbFByZXZpZXdIZWlnaHRcIlxuICAgICAgICAgICAgPjwvc2RjLWNvZGUtZWRpdG9yPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvYXNpZGU+XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
2352
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlzdWFsLXNxbC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy92aXN1YWwtc3FsLWVkaXRvci92aXN1YWwtc3FsLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3Zpc3VhbC1zcWwtZWRpdG9yL3Zpc3VhbC1zcWwtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBb0IsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQW9CL0YsT0FBTyxFQUNMLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUN6QixrQkFBa0IsRUFDbEIscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0QixzQkFBc0IsRUFDdEIsOEJBQThCLEVBQzlCLDZCQUE2QixFQUM3QixzQkFBc0IsRUFDdEIsd0JBQXdCLEVBQ3hCLDZCQUE2QixFQUM3QixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsb0JBQW9CLEVBQ3BCLHdCQUF3QixHQUN6QixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFB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RSxJQUFJLE1BQU0sRUFBRSxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0lBQ0QsNkJBQTZCLENBQUMsR0FBYTtRQUN6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZO1lBQ3pCLE1BQU0sSUFBSSxNQUFNLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLFdBQVcsQ0FBQztRQUV6RixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNyRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNyRSxJQUFJLE1BQU0sRUFBRSxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsTUFBYztRQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVk7WUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNsRSxDQUFDO0lBQ0QsNkJBQTZCLENBQUMsR0FBYTtRQUN6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFD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RSx3QkFBd0IsSUFBSSwyQkFBMkIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgaW5qZWN0LFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQgeyBEWU5BTUlDX1ZJRVdfQlVJTERFUl9ERUZBVUxUX1RBQkxFX1JPV1MgfSBmcm9tIFwiLi4vLi4vY29yZS9jb25zdGFudHMvZHluYW1pYy12aWV3LWJ1aWxkZXIuY29uc3RcIjtcbmltcG9ydCB7IGNyZWF0ZUR5bmFtaWNWaWV3QnVpbGRlckNvbmZpZyB9IGZyb20gXCIuLi8uLi9jb3JlL2NvbmZpZy9keW5hbWljLXZpZXctYnVpbGRlci5jb25maWdcIjtcbmltcG9ydCB0eXBlIHsgU2VsZWN0QnV0dG9uSXRlbSB9IGZyb20gXCIuLi8uLi9jb3JlL3R5cGVzL3NlbGVjdC1idXR0b24udHlwZVwiO1xuaW1wb3J0IHR5cGUgeyBUaW1lbGluZUl0ZW0sIFRpbWVsaW5lU3RlcFNlbGVjdEV2ZW50IH0gZnJvbSBcIi4uLy4uL2NvcmUvdHlwZXMvdGltZWxpbmUudHlwZVwiO1xuaW1wb3J0IHR5cGUge1xuICBEeW5hbWljVmlld0J1aWxkZXJDb2x1bW5PcHRpb24sXG4gIER5bmFtaWNWaWV3QnVpbGRlckNvbmZpZyxcbiAgRHluYW1pY1ZpZXdCdWlsZGVyRmllbGQsXG4gIER5bmFtaWNWaWV3QnVpbGRlckZpZWxkRnVuY3Rpb24sXG4gIER5bmFtaWNWaWV3QnVpbGRlckZpbHRlcixcbiAgRHluYW1pY1ZpZXdCdWlsZGVyRnVuY3Rpb24sXG4gIER5bmFtaWNWaWV3QnVpbGRlckpvaW4sXG4gIER5bmFtaWNWaWV3QnVpbGRlck9wdGlvbixcbiAgRHluYW1pY1ZpZXdCdWlsZGVyU29ydCxcbiAgRHluYW1pY1ZpZXdCdWlsZGVyVGFibGVPcHRpb24sXG59IGZyb20gXCIuLi8uLi9jb3JlL3R5cGVzL2R5bmFtaWMtdmlldy1idWlsZGVyLnR5cGVcIjtcbmltcG9ydCB0eXBlIHtcbiAgUm93QmFzZSxcbiAgVGFibGVDb2x1bW4sXG4gIFRhYmxlT3B0aW9ucyxcbn0gZnJvbSBcIi4uLy4uL2NvcmUvdHlwZXMvdGFibGUudHlwZVwiO1xuaW1wb3J0IHtcbiAgRU1QVFlfVkFMVUUsXG4gIEVNUFRZX1NPUlRfRlVOQ1RJT04sXG4gIERFRkFVTFRfRklMVEVSX09QRVJBVE9SLFxuICBERUZBVUxUX0ZJTFRFUl9WQUxVRV9UWVBFLFxuICBGSUxURVJfTU9ERV9ET01BSU4sXG4gIE9WRVJMQVlfQVBQRU5EX1RBUkdFVCxcbiAgTU9EQUxfT1ZFUkxBWV9aX0lOREVYLFxuICBGSUVMRF9QSUNLTElTVF9ST1dTLFxuICBGSUxURVJfUElDS0xJU1RfUk9XUyxcbiAgVklTVUFMX1NRTF9UQUJMRV9DT0xPUixcbiAgVklTVUFMX1NRTF9GSUVMRF9DT0xPUixcbiAgUElDS0xJU1RfREFUQV9UWVBFX0JBREdFX0NPTE9SLFxuICBQSUNLTElTVF9GVU5DVElPTl9CQURHRV9DT0xPUixcbiAgRkFMTEJBQ0tfU0VMRUNUX1RBQkxFUyxcbiAgRkFMTEJBQ0tfRU1QVFlfU0VMRUNUSU9OLFxuICBQUkVWSUVXX1JPV1NfUEVSX1BBR0VfT1BUSU9OUyxcbiAgQUxJQVNfTUFYX0xFTkdUSCxcbiAgTUlOX1BBUlRTX0ZPUl9EQixcbiAgREJfUEFSVFNfT0ZGU0VULFxuICBNSU5fUEFSVFNfRk9SX1RBQkxFLFxuICBKT0lOX09QRVJBVE9SX0xBQkVMUyxcbiAgRFlOQU1JQ19NT0RBTF9ESU1FTlNJT05TLFxufSBmcm9tIFwiLi91dGlscy92aXN1YWwtc3FsLWVkaXRvci5jb25zdGFudHNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZSwgc2x1Z2lmeSwgZGVkdXBsaWNhdGVCeUtleSB9IGZyb20gXCIuL3V0aWxzL3Zpc3VhbC1zcWwtZWRpdG9yLXRleHQudXRpbFwiO1xuaW1wb3J0IHtcbiAgYnVpbGRHZW5lcmF0ZWRTcWwsXG4gIGJ1aWxkV2hlcmVTcWwsXG4gIGJ1aWxkR3JvdXBCeVNxbCxcbiAgYnVpbGRPcmRlckJ5U3FsLFxuICByZXNvbHZlU291cmNlU3FsLFxuICByZXNvbHZlSm9pblNxbCxcbiAgcmVzb2x2ZUNvbHVtblNxbCxcbiAgcmVzb2x2ZUZpZWxkU3FsLFxuICByZXNvbHZlRnVuY3Rpb25TcWwsXG4gIHJlc29sdmVTb3J0U3FsLFxuICByZXNvbHZlRmlsdGVyU3FsLFxuICByZXNvbHZlRmlsdGVyT3BlcmF0b3JTcWwsXG4gIHJlc29sdmVGaWx0ZXJWYWx1ZVNxbCxcbiAgcXVvdGVTcWxWYWx1ZSxcbiAgZGVjb3JhdGVMaWtlVmFsdWUsXG4gIHR5cGUgU3FsQ29udGV4dCxcbn0gZnJvbSBcIi4vdXRpbHMvdmlzdWFsLXNxbC1lZGl0b3Itc3FsLnV0aWxcIjtcbmltcG9ydCB7IGlzTnVtZXJpY1R5cGUsIGlzRGF0ZVR5cGUsIGZpbHRlck9wZXJhdG9yc0ZvckNvbHVtbiB9IGZyb20gXCIuL3V0aWxzL3Zpc3VhbC1zcWwtZWRpdG9yLXNhbml0aXplLnV0aWxcIjtcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gXCIuLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tIFwiLi4vY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50XCI7XG5pbXBvcnQgeyBDb2RlRWRpdG9yQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvZGUtZWRpdG9yL2NvZGUtZWRpdG9yLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ29tYm9ib3hDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tYm9ib3gvY29tYm9ib3guY29tcG9uZW50XCI7XG5pbXBvcnQgeyBJbmZvU2lnbkNvbXBvbmVudCB9IGZyb20gXCIuLi9pbmZvLXNpZ24vaW5mby1zaWduLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTW9kYWxDb21wb25lbnQgfSBmcm9tIFwiLi4vbW9kYWwvbW9kYWwuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBQaWNrbGlzdENvbXBvbmVudCB9IGZyb20gXCIuLi9waWNrbGlzdC9waWNrbGlzdC5jb21wb25lbnRcIjtcbmltcG9ydCB7IFNlbGVjdEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gXCIuLi9zZWxlY3QtYnV0dG9uL3NlbGVjdC1idXR0b24uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBUYWJsZUNvbXBvbmVudCB9IGZyb20gXCIuLi90YWJsZS90YWJsZS5jb21wb25lbnRcIjtcbmltcG9ydCB7IFRleHRhcmVhQ29tcG9uZW50IH0gZnJvbSBcIi4uL3RleHRhcmVhL3RleHRhcmVhLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgVGV4dGJveENvbXBvbmVudCB9IGZyb20gXCIuLi90ZXh0Ym94L3RleHRib3guY29tcG9uZW50XCI7XG5pbXBvcnQgeyBUaW1lbGluZUNvbXBvbmVudCB9IGZyb20gXCIuLi90aW1lbGluZS90aW1lbGluZS5jb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHtcbiAgU2VsZWN0aW9uTW9kYWxNb2RlLFxuICBCdWlsZGVyTGF5b3V0TW9kZSxcbiAgU291cmNlTW9kYWxTdGVwLFxuICBGaWVsZE1vZGFsU3RlcCxcbiAgRmlsdGVyTW9kYWxTdGVwLFxuICBCdWlsZGVyU2VjdGlvbklkLFxuICBGaWx0ZXJNb2RhbE1vZGUsXG4gIFNlbGVjdGlvblJvdyxcbiAgU291cmNlVmlld0l0ZW0sXG4gIFNvdXJjZU1vZGFsRHJhZnQsXG4gIFNvdXJjZUNvbmZpZ3VyZWRJdGVtLFxuICBKb2luVmlld0l0ZW0sXG4gIFNpbXBsZVZpZXdJdGVtLFxuICBGaWVsZFZpZXdJdGVtLFxuICBTb3J0Vmlld0l0ZW0sXG4gIFNvcnRTZWxlY3RhYmxlSXRlbSxcbiAgRmlsdGVyVmlld0l0ZW0sXG4gIEZpbHRlclJldmlld0l0ZW0sXG4gIENvbHVtbkRpc3BsYXlQYXJ0cyxcbiAgVGFibGVEaXNwbGF5UGFydHMsXG4gIEZpZWxkTW9kYWxDb25maWd1cmVkSXRlbSxcbiAgQnVpbGRlckZsb3dBcnJvdyxcbiAgQ29sdW1uUGlja2xpc3RJdGVtLFxuICBTb3J0UGlja2xpc3RJdGVtLFxuICBUYWJsZVBpY2tsaXN0SXRlbSxcbiAgUHJldmlld0NvbHVtbkxpa2UsXG59IGZyb20gXCIuL3R5cGVzL3Zpc3VhbC1zcWwtZWRpdG9yLnR5cGVzXCI7XG5pbXBvcnQgeyBWaXN1YWxTcWxFZGl0b3JGbG93U2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL3Zpc3VhbC1zcWwtZWRpdG9yLWZsb3cuc2VydmljZVwiO1xuaW1wb3J0IHsgVmlzdWFsU3FsRWRpdG9yU3RhdGVTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvdmlzdWFsLXNxbC1lZGl0b3Itc3RhdGUuc2VydmljZVwiO1xuaW1wb3J0IHsgVmlzdWFsU3FsRWRpdG9yU291cmNlTW9kYWxDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3Zpc3VhbC1zcWwtZWRpdG9yLXNvdXJjZS1tb2RhbC92aXN1YWwtc3FsLWVkaXRvci1zb3VyY2UtbW9kYWwuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBWaXN1YWxTcWxFZGl0b3JKb2luTW9kYWxDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3Zpc3VhbC1zcWwtZWRpdG9yLWpvaW4tbW9kYWwvdmlzdWFsLXNxbC1lZGl0b3Itam9pbi1tb2RhbC5jb21wb25lbnRcIjtcbmltcG9ydCB7IFZpc3VhbFNxbEVkaXRvclNvcnRNb2RhbENvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvdmlzdWFsLXNxbC1lZGl0b3Itc29ydC1tb2RhbC92aXN1YWwtc3FsLWVkaXRvci1zb3J0LW1vZGFsLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgVmlzdWFsU3FsRWRpdG9yRmllbGRNb2RhbENvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvdmlzdWFsLXNxbC1lZGl0b3ItZmllbGQtbW9kYWwvdmlzdWFsLXNxbC1lZGl0b3ItZmllbGQtbW9kYWwuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBWaXN1YWxTcWxFZGl0b3JGaWx0ZXJNb2RhbENvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvdmlzdWFsLXNxbC1lZGl0b3ItZmlsdGVyLW1vZGFsL3Zpc3VhbC1zcWwtZWRpdG9yLWZpbHRlci1tb2RhbC5jb21wb25lbnRcIjtcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJzZGMtdmlzdWFsLXNxbC1lZGl0b3JcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJvdmlkZXJzOiBbVmlzdWFsU3FsRWRpdG9yRmxvd1NlcnZpY2UsIFZpc3VhbFNxbEVkaXRvclN0YXRlU2VydmljZV0sXG4gIGltcG9ydHM6IFtcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIENoZWNrYm94Q29tcG9uZW50LFxuICAgIENvZGVFZGl0b3JDb21wb25lbnQsXG4gICAgQ29tYm9ib3hDb21wb25lbnQsXG4gICAgSW5mb1NpZ25Db21wb25lbnQsXG4gICAgTW9kYWxDb21wb25lbnQsXG4gICAgUGlja2xpc3RDb21wb25lbnQsXG4gICAgU2VsZWN0QnV0dG9uQ29tcG9uZW50LFxuICAgIFRhYmxlQ29tcG9uZW50LFxuICAgIFRleHRhcmVhQ29tcG9uZW50LFxuICAgIFRleHRib3hDb21wb25lbnQsXG4gICAgVGltZWxpbmVDb21wb25lbnQsXG4gICAgVmlzdWFsU3FsRWRpdG9yU291cmNlTW9kYWxDb21wb25lbnQsXG4gICAgVmlzdWFsU3FsRWRpdG9ySm9pbk1vZGFsQ29tcG9uZW50LFxuICAgIFZpc3VhbFNxbEVkaXRvclNvcnRNb2RhbENvbXBvbmVudCxcbiAgICBWaXN1YWxTcWxFZGl0b3JGaWVsZE1vZGFsQ29tcG9uZW50LFxuICAgIFZpc3VhbFNxbEVkaXRvckZpbHRlck1vZGFsQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogXCIuL3Zpc3VhbC1zcWwtZWRpdG9yLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi92aXN1YWwtc3FsLWVkaXRvci5jb21wb25lbnQuc2Nzc1wiXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFZpc3VhbFNxbEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmxvd1NlcnZpY2UgPSBpbmplY3QoVmlzdWFsU3FsRWRpdG9yRmxvd1NlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YXRlU2VydmljZSA9IGluamVjdChWaXN1YWxTcWxFZGl0b3JTdGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIGludGVybmFsQ29uZmlnID0gY3JlYXRlRHluYW1pY1ZpZXdCdWlsZGVyQ29uZmlnKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VjdGlvbk9yZGVyOiBCdWlsZGVyU2VjdGlvbklkW10gPSBbXG4gICAgXCJ0YWJsZXNcIixcbiAgICBcImpvaW5zXCIsXG4gICAgXCJncm91cEJ5XCIsXG4gICAgXCJmaWVsZHNcIixcbiAgICBcInNvcnRpbmdcIixcbiAgICBcImZpbHRlcnNcIixcbiAgXTtcbiAgcmVhZG9ubHkgbGF5b3V0TW9kZUl0ZW1zOiBTZWxlY3RCdXR0b25JdGVtPEJ1aWxkZXJMYXlvdXRNb2RlPltdID0gW1xuICAgIHtcbiAgICAgIGxhYmVsOiBcIkJsb2Nvc1wiLFxuICAgICAgdmFsdWU6IFwic3RhY2tlZFwiLFxuICAgICAgaWNvbkNsYXNzOiBcImZhcyBmYS10aC1sYXJnZVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6IFwiTGlzdGFcIixcbiAgICAgIHZhbHVlOiBcInNwbGl0XCIsXG4gICAgICBpY29uQ2xhc3M6IFwiZmFzIGZhLWxpc3RcIixcbiAgICB9LFxuICBdO1xuICByZWFkb25seSBmaWx0ZXJNb2RlSXRlbXM6IFNlbGVjdEJ1dHRvbkl0ZW08RmlsdGVyTW9kYWxNb2RlPltdID0gW1xuICAgIHtcbiAgICAgIGxhYmVsOiBcIkZpbHRyb1wiLFxuICAgICAgdmFsdWU6IFwiY29uZGl0aW9uXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogXCJFeHByZXNzYW8gZGUgZG9taW5pb1wiLFxuICAgICAgdmFsdWU6IEZJTFRFUl9NT0RFX0RPTUFJTixcbiAgICB9LFxuICBdO1xuICByZWFkb25seSBzZWxlY3RlZEZpbHRlck1vZGVJdGVtczogU2VsZWN0QnV0dG9uSXRlbTxGaWx0ZXJNb2RhbE1vZGU+W10gPSBbXTtcbiAgcmVhZG9ubHkgc29ydERpcmVjdGlvbkl0ZW1zOiBTZWxlY3RCdXR0b25JdGVtPHN0cmluZz5bXSA9IFtdO1xuICByZWFkb25seSBzZWxlY3RlZExheW91dE1vZGVJdGVtczogU2VsZWN0QnV0dG9uSXRlbTxCdWlsZGVyTGF5b3V0TW9kZT5bXSA9IFtdO1xuICByZWFkb25seSBzZWxlY3RlZFNvcnREaXJlY3Rpb25JdGVtczogU2VsZWN0QnV0dG9uSXRlbTxzdHJpbmc+W10gPSBbXTtcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xuICBASW5wdXQoKSBzZXQgY29uZmlnKHZhbHVlOiBEeW5hbWljVmlld0J1aWxkZXJDb25maWcpIHtcbiAgICB0aGlzLmludGVybmFsQ29uZmlnID0gdmFsdWVcbiAgICAgID8gY3JlYXRlRHluYW1pY1ZpZXdCdWlsZGVyQ29uZmlnKHZhbHVlKVxuICAgICAgOiBjcmVhdGVEeW5hbWljVmlld0J1aWxkZXJDb25maWcoKTtcbiAgICB0aGlzLnN5bmNMYXlvdXRNb2RlSXRlbXMoKTtcbiAgICB0aGlzLnN5bmNGaWx0ZXJNb2RlSXRlbXMoKTtcbiAgICB0aGlzLnN5bmNTb3J0RGlyZWN0aW9uSXRlbXMoKTtcbiAgICB0aGlzLnNhbml0aXplQnVpbGRlcigpO1xuICB9XG4gIGdldCBjb25maWcoKTogRHluYW1pY1ZpZXdCdWlsZGVyQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5pbnRlcm5hbENvbmZpZztcbiAgfVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgY29uZmlnQ2hhbmdlID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPER5bmFtaWNWaWV3QnVpbGRlckNvbmZpZz4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPER5bmFtaWNWaWV3QnVpbGRlckNvbmZpZz4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQFZpZXdDaGlsZChcInNlY3Rpb25zQ29udGFpbmVyXCIpXG4gIHByaXZhdGUgcmVhZG9ubHkgc2VjdGlvbnNDb250YWluZXI/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgQFZpZXdDaGlsZHJlbihcImJ1aWxkZXJTZWN0aW9uXCIpXG4gIHByaXZhdGUgcmVhZG9ubHkgYnVpbGRlclNlY3Rpb25zPzogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PjtcbiAgbGF5b3V0TW9kZTogQnVpbGRlckxheW91dE1vZGUgPSBcInN0YWNrZWRcIjtcbiAgcHJldmlld1Zpc2libGUgPSBmYWxzZTtcbiAgZmxvd0Fycm93czogQnVpbGRlckZsb3dBcnJvd1tdID0gW107XG4gIG1lYXN1cmVkU3BsaXRQcmV2aWV3SGVpZ2h0ID0gXCIyNHJlbVwiO1xuICBkcmFnZ2luZ0ZpZWxkSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBkcmFnUHJldmlld0luZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcmVhZG9ubHkgb3ZlcmxheUFwcGVuZFRhcmdldCA9IE9WRVJMQVlfQVBQRU5EX1RBUkdFVDtcbiAgcmVhZG9ubHkgb3ZlcmxheVpJbmRleCA9IE1PREFMX09WRVJMQVlfWl9JTkRFWDtcbiAgcmVhZG9ubHkgbW9kYWxEaW1lbnNpb25zID0gRFlOQU1JQ19NT0RBTF9ESU1FTlNJT05TO1xuICByZWFkb25seSBmaWVsZFBpY2tsaXN0Um93cyA9IEZJRUxEX1BJQ0tMSVNUX1JPV1M7XG4gIHJlYWRvbmx5IGZpbHRlclBpY2tsaXN0Um93cyA9IEZJTFRFUl9QSUNLTElTVF9ST1dTO1xuXG4gIC8vIOKUgOKUgOKUgCBTZWxlY3Rpb24gbW9kYWwgc3RhdGUgKG5vdCBvd25lZCBieSBzdGF0ZVNlcnZpY2UpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBzZWxlY3Rpb25Nb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgc2VsZWN0aW9uTW9kYWxNb2RlOiBTZWxlY3Rpb25Nb2RhbE1vZGUgPSBcInRhYmxlc1wiO1xuICBzZWxlY3Rpb25Nb2RhbElkczogc3RyaW5nW10gPSBbXTtcbiAgc2VsZWN0aW9uTW9kYWxTZWFyY2ggPSBFTVBUWV9WQUxVRTtcblxuICAvLyDilIDilIDilIAgU2VhcmNoIHN0YXRlIChsb2NhbCB0byBjb21wb25lbnQsIG5vdCBvd25lZCBieSBzdGF0ZVNlcnZpY2UpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBqb2luU291cmNlU2VhcmNoID0gRU1QVFlfVkFMVUU7XG4gIGpvaW5UYXJnZXRTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgc29ydFNlYXJjaCA9IEVNUFRZX1ZBTFVFO1xuICBmaWVsZE1vZGFsU2VhcmNoID0gRU1QVFlfVkFMVUU7XG4gIGZpbHRlclNlYXJjaCA9IEVNUFRZX1ZBTFVFO1xuXG4gIC8vIOKUgOKUgOKUgCBEZWxlZ2F0ZSBnZXR0ZXJzOiBtb2RhbCBzdGF0ZSBpcyBvd25lZCBieSBzdGF0ZVNlcnZpY2Ug4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGdldCBzb3VyY2VNb2RhbFZpc2libGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnN0YXRlU2VydmljZS5zb3VyY2VNb2RhbFZpc2libGU7IH1cbiAgc2V0IHNvdXJjZU1vZGFsVmlzaWJsZSh2YWx1ZTogYm9vbGVhbikgeyB0aGlzLnN0YXRlU2VydmljZS5zb3VyY2VNb2RhbFZpc2libGUgPSB2YWx1ZTsgfVxuICBnZXQgc291cmNlTW9kYWxTdGVwKCk6IFNvdXJjZU1vZGFsU3RlcCB7IHJldHVybiB0aGlzLnN0YXRlU2VydmljZS5zb3VyY2VNb2RhbFN0ZXA7IH1cbiAgZ2V0IHNvdXJjZU1vZGFsRHJhZnRzKCk6IFNvdXJjZU1vZGFsRHJhZnRbXSB7IHJldHVybiB0aGlzLnN0YXRlU2VydmljZS5zb3VyY2VNb2RhbERyYWZ0czsgfVxuXG4gIGdldCBqb2luTW9kYWxWaXNpYmxlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5zdGF0ZVNlcnZpY2Uuam9pbk1vZGFsVmlzaWJsZTsgfVxuICBzZXQgam9pbk1vZGFsVmlzaWJsZSh2YWx1ZTogYm9vbGVhbikgeyB0aGlzLnN0YXRlU2VydmljZS5qb2luTW9kYWxWaXNpYmxlID0gdmFsdWU7IH1cbiAgZ2V0IGpvaW5FZGl0SW5kZXgoKTogbnVtYmVyIHwgbnVsbCB7IHJldHVybiB0aGlzLnN0YXRlU2VydmljZS5qb2luRWRpdEluZGV4OyB9XG4gIGdldCBqb2luRHJhZnQoKSB7IHJldHVybiB0aGlzLnN0YXRlU2VydmljZS5qb2luRHJhZnQ7IH1cblxuICBnZXQgc29ydE1vZGFsVmlzaWJsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuc3RhdGVTZXJ2aWNlLnNvcnRNb2RhbFZpc2libGU7IH1cbiAgc2V0IHNvcnRNb2RhbFZpc2libGUodmFsdWU6IGJvb2xlYW4pIHsgdGhpcy5zdGF0ZVNlcnZpY2Uuc29ydE1vZGFsVmlzaWJsZSA9IHZhbHVlOyB9XG4gIGdldCBzb3J0RWRpdEluZGV4KCk6IG51bWJlciB8IG51bGwgeyByZXR1cm4gdGhpcy5zdGF0ZVNlcnZpY2Uuc29ydEVkaXRJbmRleDsgfVxuICBnZXQgc29ydERyYWZ0KCkgeyByZXR1cm4gdGhpcy5zdGF0ZVNlcnZpY2Uuc29ydERyYWZ0OyB9XG5cbiAgZ2V0IGZpZWxkTW9kYWxWaXNpYmxlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5zdGF0ZVNlcnZpY2UuZmllbGRNb2RhbFZpc2libGU7IH1cbiAgc2V0IGZpZWxkTW9kYWxWaXNpYmxlKHZhbHVlOiBib29sZWFuKSB7IHRoaXMuc3RhdGVTZXJ2aWNlLmZpZWxkTW9kYWxWaXNpYmxlID0gdmFsdWU7IH1cbiAgZ2V0IGZpZWxkTW9kYWxTdGVwKCk6IEZpZWxkTW9kYWxTdGVwIHsgcmV0dXJuIHRoaXMuc3RhdGVTZXJ2aWNlLmZpZWxkTW9kYWxTdGVwOyB9XG4gIGdldCBmaWVsZE1vZGFsRHJhZnRzKCk6IER5bmFtaWNWaWV3QnVpbGRlckZpZWxkW10geyByZXR1cm4gdGhpcy5zdGF0ZVNlcnZpY2UuZmllbGRNb2RhbERyYWZ0czsgfVxuICBnZXQgZmllbGRGdW5jdGlvbkVkaXRDb2x1bW4oKTogc3RyaW5nIHwgbnVsbCB7IHJldHVybiB0aGlzLnN0YXRlU2VydmljZS5maWVsZEZ1bmN0aW9uRWRpdENvbHVtbjsgfVxuICBnZXQgZmllbGRGdW5jdGlvbkRyYWZ0KCkgeyByZXR1cm4gdGhpcy5zdGF0ZVNlcnZpY2UuZmllbGRGdW5jdGlvbkRyYWZ0OyB9XG5cbiAgZ2V0IGZpbHRlck1vZGFsVmlzaWJsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuc3RhdGVTZXJ2aWNlLmZpbHRlck1vZGFsVmlzaWJsZTsgfVxuICBzZXQgZmlsdGVyTW9kYWxWaXNpYmxlKHZhbHVlOiBib29sZWFuKSB7IHRoaXMuc3RhdGVTZXJ2aWNlLmZpbHRlck1vZGFsVmlzaWJsZSA9IHZhbHVlOyB9XG4gIGdldCBmaWx0ZXJFZGl0SW5kZXgoKTogbnVtYmVyIHwgbnVsbCB7IHJldHVybiB0aGlzLnN0YXRlU2VydmljZS5maWx0ZXJFZGl0SW5kZXg7IH1cbiAgZ2V0IGZpbHRlck1vZGFsU3RlcCgpOiBGaWx0ZXJNb2RhbFN0ZXAgeyByZXR1cm4gdGhpcy5zdGF0ZVNlcnZpY2UuZmlsdGVyTW9kYWxTdGVwOyB9XG4gIGdldCBmaWx0ZXJNb2RhbE1vZGUoKTogRmlsdGVyTW9kYWxNb2RlIHsgcmV0dXJuIHRoaXMuc3RhdGVTZXJ2aWNlLmZpbHRlck1vZGFsTW9kZTsgfVxuICBnZXQgZmlsdGVyRHJhZnQoKSB7IHJldHVybiB0aGlzLnN0YXRlU2VydmljZS5maWx0ZXJEcmFmdDsgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHRoaXMuc3luY0xheW91dE1vZGVJdGVtcygpO1xuICAgIHRoaXMuc3luY0ZpbHRlck1vZGVJdGVtcygpO1xuICAgIHRoaXMuc3luY1NvcnREaXJlY3Rpb25JdGVtcygpO1xuICAgIHRoaXMuc2FuaXRpemVCdWlsZGVyKCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBmbG93Q29udGV4dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VjdGlvbnNDb250YWluZXI6IHRoaXMuc2VjdGlvbnNDb250YWluZXIsXG4gICAgICBidWlsZGVyU2VjdGlvbnM6IHRoaXMuYnVpbGRlclNlY3Rpb25zLFxuICAgICAgc2VjdGlvbk9yZGVyOiB0aGlzLnNlY3Rpb25PcmRlcixcbiAgICAgIGNoYW5nZURldGVjdG9yUmVmOiB0aGlzLmNoYW5nZURldGVjdG9yUmVmLFxuICAgICAgb25GbG93QXJyb3dzQ2hhbmdlOiAoYXJyb3dzOiBCdWlsZGVyRmxvd0Fycm93W10sIG1lYXN1cmVkSGVpZ2h0OiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5mbG93QXJyb3dzID0gYXJyb3dzO1xuICAgICAgICB0aGlzLm1lYXN1cmVkU3BsaXRQcmV2aWV3SGVpZ2h0ID0gbWVhc3VyZWRIZWlnaHQ7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5idWlsZGVyU2VjdGlvbnM/LmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZmxvd1NlcnZpY2Uuc2NoZWR1bGVGbG93QXJyb3dSZWZyZXNoKHRoaXMuZmxvd0NvbnRleHQpO1xuICAgIH0pO1xuICAgIHRoaXMuZmxvd1NlcnZpY2Uuc2NoZWR1bGVGbG93QXJyb3dSZWZyZXNoKHRoaXMuZmxvd0NvbnRleHQpO1xuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZmxvd1NlcnZpY2UubmdPbkRlc3Ryb3koKTtcbiAgfVxuICBASG9zdExpc3RlbmVyKFwid2luZG93OnJlc2l6ZVwiKVxuICBvbldpbmRvd1Jlc2l6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmZsb3dTZXJ2aWNlLnNjaGVkdWxlRmxvd0Fycm93UmVmcmVzaCh0aGlzLmZsb3dDb250ZXh0KTtcbiAgfVxuICBnZXQgc2VsZWN0ZWRMYXlvdXRNb2RlSXRlbSgpOiBTZWxlY3RCdXR0b25JdGVtPEJ1aWxkZXJMYXlvdXRNb2RlPiB8IG51bGwge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmxheW91dE1vZGVJdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSB0aGlzLmxheW91dE1vZGUpID8/XG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBnZXQgaXNSZWFkb25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcubWV0YWRhdGEudmlld01vZGUgPT09IFwicmVhZG9ubHlcIjtcbiAgfVxuICBnZXQgam9pbk9wZXJhdG9yT3B0aW9ucygpOiBEeW5hbWljVmlld0J1aWxkZXJPcHRpb25bXSB7XG4gICAgcmV0dXJuICh0aGlzLmNvbmZpZy5hdmFpbGFibGVEYXRhLmpvaW5PcGVyYXRvcnMgPz8gW10pLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICB0ZXh0OiB0aGlzLnJlc29sdmVKb2luT3BlcmF0b3JPcHRpb25UZXh0KGl0ZW0pLFxuICAgIH0pKTtcbiAgfVxuICBnZXQgZnVuY3Rpb25PcHRpb25zKCk6IER5bmFtaWNWaWV3QnVpbGRlck9wdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuYXZhaWxhYmxlRGF0YS5mdW5jdGlvbnMgPz8gW107XG4gIH1cbiAgZ2V0IHNvcnREaXJlY3Rpb25PcHRpb25zKCk6IER5bmFtaWNWaWV3QnVpbGRlck9wdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuYXZhaWxhYmxlRGF0YS5zb3J0RGlyZWN0aW9ucyA/PyBbXTtcbiAgfVxuICBnZXQgZmlsdGVyQ29ubmVjdG9yT3B0aW9ucygpOiBEeW5hbWljVmlld0J1aWxkZXJPcHRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmF2YWlsYWJsZURhdGEuZmlsdGVyQ29ubmVjdG9ycyA/PyBbXTtcbiAgfVxuICBnZXQgdmFsdWVUeXBlT3B0aW9ucygpOiBEeW5hbWljVmlld0J1aWxkZXJPcHRpb25bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdGV4dDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLnZhbHVlVHlwZXMudmFsdWVgLFxuICAgICAgICAgIFwiVmFsb3JcIlxuICAgICAgICApLFxuICAgICAgICB2YWx1ZTogXCJ2YWx1ZVwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGV4dDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLnZhbHVlVHlwZXMucGFyYW1ldGVyYCxcbiAgICAgICAgICBcIlBhcmFtZXRyb1wiXG4gICAgICAgICksXG4gICAgICAgIHZhbHVlOiBcInBhcmFtZXRlclwiLFxuICAgICAgfSxcbiAgICBdO1xuICB9XG4gIGdldCBib29sZWFuVmFsdWVPcHRpb25zKCk6IER5bmFtaWNWaWV3QnVpbGRlck9wdGlvbltdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICB0ZXh0OiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMuYm9vbGVhbi50cnVlYCxcbiAgICAgICAgICBcIlRydWVcIlxuICAgICAgICApLFxuICAgICAgICB2YWx1ZTogXCJ0cnVlXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0ZXh0OiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMuYm9vbGVhbi5mYWxzZWAsXG4gICAgICAgICAgXCJGYWxzZVwiXG4gICAgICAgICksXG4gICAgICAgIHZhbHVlOiBcImZhbHNlXCIsXG4gICAgICB9LFxuICAgIF07XG4gIH1cbiAgZ2V0IHNlbGVjdGVkVGFibGVzKCk6IER5bmFtaWNWaWV3QnVpbGRlclRhYmxlT3B0aW9uW10ge1xuICAgIGNvbnN0IGlkcyA9IG5ldyBTZXQoXG4gICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc291cmNlcy5tYXAoKGl0ZW0pID0+IGl0ZW0udGFibGUpXG4gICAgKTtcbiAgICByZXR1cm4gKHRoaXMuY29uZmlnLmF2YWlsYWJsZURhdGEudGFibGVzID8/IFtdKS5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICBpZHMuaGFzKGl0ZW0udmFsdWUpXG4gICAgKTtcbiAgfVxuICBnZXQgYXZhaWxhYmxlQ29sdW1ucygpOiBEeW5hbWljVmlld0J1aWxkZXJDb2x1bW5PcHRpb25bXSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRUYWJsZUlkcyA9IG5ldyBTZXQoXG4gICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc291cmNlcy5tYXAoKGl0ZW0pID0+IGl0ZW0udGFibGUpXG4gICAgKTtcbiAgICByZXR1cm4gKHRoaXMuY29uZmlnLmF2YWlsYWJsZURhdGEuY29sdW1ucyA/PyBbXSkuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgc2VsZWN0ZWRUYWJsZUlkcy5oYXMoaXRlbS50YWJsZSlcbiAgICApO1xuICB9XG4gIGdldCBmaWVsZFNlbGVjdGFibGVDb2x1bW5zKCk6IER5bmFtaWNWaWV3QnVpbGRlckNvbHVtbk9wdGlvbltdIHtcbiAgICBpZiAoIXRoaXMuYXZhaWxhYmxlQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZ3JvdXBCeS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmF2YWlsYWJsZUNvbHVtbnM7XG4gICAgfVxuICAgIGNvbnN0IGdyb3VwQnkgPSBuZXcgU2V0KHRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5KTtcbiAgICByZXR1cm4gdGhpcy5hdmFpbGFibGVDb2x1bW5zLmZpbHRlcihcbiAgICAgIChpdGVtKSA9PiBncm91cEJ5LmhhcyhpdGVtLnZhbHVlKSB8fCBpdGVtLmlzQWdncmVnYXRhYmxlICE9PSBmYWxzZVxuICAgICk7XG4gIH1cbiAgZ2V0IGdyb3VwQnlTZWxlY3RhYmxlQ29sdW1ucygpOiBEeW5hbWljVmlld0J1aWxkZXJDb2x1bW5PcHRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuYXZhaWxhYmxlQ29sdW1ucy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaXNBZ2dyZWdhdGFibGUgIT09IGZhbHNlKTtcbiAgfVxuICBnZXQgc29ydFNlbGVjdGFibGVJdGVtcygpOiBTb3J0U2VsZWN0YWJsZUl0ZW1bXSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEZpZWxkcyA9IHRoaXMubm9ybWFsaXplZEZpZWxkcztcbiAgICBpZiAoIW5vcm1hbGl6ZWRGaWVsZHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZ3JvdXBCeVNldCA9IG5ldyBTZXQodGhpcy5jb25maWcuZ2VuZXJhdGVkLmdyb3VwQnkpO1xuXG4gICAgcmV0dXJuIHRoaXMuZGVkdXBsaWNhdGVCeUtleShcbiAgICAgIG5vcm1hbGl6ZWRGaWVsZHNcbiAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMucmVzb2x2ZUNvbHVtbk9wdGlvbihpdGVtLmNvbHVtbik7XG4gICAgICAgICAgaWYgKCFjb2x1bW4pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5pc1NvcnRhYmxlICE9PSBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZ3JvdXBCeVNldC5oYXMoaXRlbS5jb2x1bW4pIHx8ICEhaXRlbS5mdW5jdGlvbj8uZnVuY3Rpb25OYW1lPy50cmltKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJ0cyA9IHRoaXMucmVzb2x2ZUNvbHVtblBhcnRzKGl0ZW0uY29sdW1uKTtcbiAgICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBpdGVtLmZ1bmN0aW9uPy5mdW5jdGlvbk5hbWU/LnRyaW0oKSA/PyBFTVBUWV9WQUxVRTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICBpZDogdGhpcy5idWlsZFNvcnRTZWxlY3Rpb25JZChpdGVtLmNvbHVtbiwgZnVuY3Rpb25OYW1lKSxcbiAgICAgICAgICAgIGNvbHVtbjogaXRlbS5jb2x1bW4sXG4gICAgICAgICAgICB0YWJsZUxhYmVsOiBwYXJ0cy50YWJsZUxhYmVsLFxuICAgICAgICAgICAgZmllbGRMYWJlbDogcGFydHMuZmllbGRMYWJlbCxcbiAgICAgICAgICAgIG1ldGE6IGZ1bmN0aW9uTmFtZVxuICAgICAgICAgICAgICA/IHRoaXMucmVzb2x2ZUZ1bmN0aW9uTGFiZWwoZnVuY3Rpb25OYW1lKVxuICAgICAgICAgICAgICA6IHRoaXMucmVzb2x2ZUNvbHVtbk9wdGlvbihpdGVtLmNvbHVtbik/LmRhdGFUeXBlID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgKGl0ZW0pID0+IGl0ZW0uaWRcbiAgICApO1xuICB9XG4gIGdldCBjYW5Db25maWd1cmVKb2lucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvdXJjZXMubGVuZ3RoID4gMTtcbiAgfVxuICBnZXQgY2FuU2F2ZSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gISEodGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpZWxkcy5sZW5ndGggfHwgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmdyb3VwQnkubGVuZ3RoKTtcbiAgfVxuICBnZXQgY2FuU2F2ZUpvaW4oKTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtbiB8fFxuICAgICAgIXRoaXMuam9pbkRyYWZ0LnRhcmdldENvbHVtbiB8fFxuICAgICAgIXRoaXMuam9pbkRyYWZ0Lm9wZXJhdG9yXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMucmVzb2x2ZUNvbHVtbk9wdGlvbih0aGlzLmpvaW5EcmFmdC5zb3VyY2VDb2x1bW4pO1xuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMucmVzb2x2ZUNvbHVtbk9wdGlvbih0aGlzLmpvaW5EcmFmdC50YXJnZXRDb2x1bW4pO1xuICAgIHJldHVybiAhIXNvdXJjZSAmJiAhIXRhcmdldCAmJiBzb3VyY2UudGFibGUgIT09IHRhcmdldC50YWJsZTtcbiAgfVxuICBnZXQgY2FuU2F2ZVNvcnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5zb3J0RHJhZnQuY29sdW1uICYmICEhdGhpcy5zb3J0RHJhZnQuZGlyZWN0aW9uO1xuICB9XG4gIGdldCBjYW5TYXZlRmllbGRNb2RhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmZpZWxkTW9kYWxEcmFmdHMubGVuZ3RoICYmICF0aGlzLmZpZWxkRnVuY3Rpb25FZGl0Q29sdW1uO1xuICB9XG4gIGdldCBjYW5TYXZlRmlsdGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuYnVpbGRGaWx0ZXJGcm9tRHJhZnQoKTtcbiAgfVxuICBnZXQgZmllbGRNb2RhbENhblByb2NlZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRNb2RhbERyYWZ0cy5sZW5ndGggPiAwO1xuICB9XG4gIGdldCBjYW5PcGVuRmllbGRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkSXRlbXMubGVuZ3RoID4gMDtcbiAgfVxuICBnZXQgZmlsdGVyTW9kYWxTZWxlY3Rpb25TdGVwQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlck1vZGFsU3RlcCA9PT0gXCJzZWxlY3RcIjtcbiAgfVxuICBnZXQgZmlsdGVyTW9kYWxDb25maWd1cmF0aW9uU3RlcEFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJNb2RhbFN0ZXAgPT09IFwiY29uZmlndXJlXCI7XG4gIH1cbiAgZ2V0IGZpbHRlck1vZGFsUmV2aWV3U3RlcEFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJNb2RhbFN0ZXAgPT09IFwicmV2aWV3XCI7XG4gIH1cbiAgZ2V0IGZpbHRlck1vZGFsQ2FuUHJvY2VlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJNb2RhbE1vZGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTiB8fCAhIXRoaXMuZmlsdGVyRHJhZnQuY29sdW1uO1xuICB9XG4gIGdldCBmaWx0ZXJNb2RhbENhblJldmlldygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYW5TYXZlRmlsdGVyO1xuICB9XG4gIGdldCBmaWx0ZXJOZWVkc1ZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhW1wiRU1QVFlcIiwgXCJOT1RfRU1QVFlcIl0uaW5jbHVkZXModGhpcy5maWx0ZXJEcmFmdC5vcGVyYXRvcik7XG4gIH1cbiAgZ2V0IGZpbHRlckNvbm5lY3RvckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlclNlcXVlbmNlSW5kZXggPT09IDA7XG4gIH1cbiAgZ2V0IGZpbHRlckNvbm5lY3RvckRpc2FibGVkUmVhc29uKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmZpbHRlckNvbm5lY3RvckRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gRU1QVFlfVkFMVUU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLmRpc2FibGVkUmVhc29ucy5jb25uZWN0b3JgLFxuICAgICAgXCJPIHByaW1laXJvIGZpbHRybyBzZW1wcmUgaW5pY2lhIG8gV0hFUkUsIHBvciBpc3NvIG8gY29uZWN0b3IgZmljYSB0cmF2YWRvLlwiXG4gICAgKTtcbiAgfVxuICBnZXQgZmlsdGVyT3BlcmF0b3JEaXNhYmxlZFJlYXNvbigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbikge1xuICAgICAgcmV0dXJuIEVNUFRZX1ZBTFVFO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmlsdGVycy5kaXNhYmxlZFJlYXNvbnMub3BlcmF0b3JgLFxuICAgICAgXCJTZWxlY2lvbmUgdW0gY2FtcG8gbmEgZXRhcGEgYW50ZXJpb3IgcGFyYSBsaWJlcmFyIHNvbWVudGUgb3Mgb3BlcmFkb3JlcyBjb21wYXRpdmVpcy5cIlxuICAgICk7XG4gIH1cbiAgZ2V0IGZpbHRlclZhbHVlVHlwZURpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5maWx0ZXJEcmFmdC5jb2x1bW4gfHwgIXRoaXMuZmlsdGVyTmVlZHNWYWx1ZTtcbiAgfVxuICBnZXQgZmlsdGVyVmFsdWVUeXBlRGlzYWJsZWRSZWFzb24oKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuZmlsdGVyRHJhZnQuY29sdW1uKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmlsdGVycy5kaXNhYmxlZFJlYXNvbnMudmFsdWVUeXBlV2l0aG91dENvbHVtbmAsXG4gICAgICAgIFwiRXNjb2xoYSB1bSBjYW1wbyBlIHVtIG9wZXJhZG9yIGFudGVzIGRlIGRlZmluaXIgY29tbyBvIHZhbG9yIHNlcmEgaW5mb3JtYWRvLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5maWx0ZXJOZWVkc1ZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmlsdGVycy5kaXNhYmxlZFJlYXNvbnMudmFsdWVUeXBlV2l0aG91dFZhbHVlYCxcbiAgICAgICAgXCJPIG9wZXJhZG9yIGF0dWFsIG5hbyB1c2EgdmFsb3IsIGVudGFvIHRpcG8gZGUgdmFsb3IgZSBlbnRyYWRhIGZpY2FtIG9jdWx0b3MuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEVNUFRZX1ZBTFVFO1xuICB9XG4gIGdldCBmaWx0ZXJPcGVyYXRvclRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuZmlsdGVyRHJhZnQuY29sdW1uKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmlsdGVycy50b29sdGlwcy5vcGVyYXRvckRlZmF1bHRgLFxuICAgICAgICBcIk9zIG9wZXJhZG9yZXMgbXVkYW0gY29uZm9ybWUgbyB0aXBvIGRvIGNhbXBvIHNlbGVjaW9uYWRvLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMucmVzb2x2ZUNvbHVtbk9wdGlvbih0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbik7XG4gICAgbGV0IG9wZXJhdG9yS2V5OiBzdHJpbmc7XG4gICAgaWYgKHRoaXMuaXNOdW1lcmljVHlwZShjb2x1bW4/LmRhdGFUeXBlKSkge1xuICAgICAgb3BlcmF0b3JLZXkgPSBcIm9wZXJhdG9yTnVtZXJpY1wiO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0RhdGVUeXBlKGNvbHVtbj8uZGF0YVR5cGUpKSB7XG4gICAgICBvcGVyYXRvcktleSA9IFwib3BlcmF0b3JEYXRlXCI7XG4gICAgfSBlbHNlIGlmICgoY29sdW1uPy5kYXRhVHlwZSA/PyBFTVBUWV9WQUxVRSkudG9Mb3dlckNhc2UoKSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIG9wZXJhdG9yS2V5ID0gXCJvcGVyYXRvckJvb2xlYW5cIjtcbiAgICB9IGVsc2Uge1xuICAgICAgb3BlcmF0b3JLZXkgPSBcIm9wZXJhdG9yVGV4dFwiO1xuICAgIH1cblxuICAgIGNvbnN0IGZhbGxiYWNrQnlLZXk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBvcGVyYXRvck51bWVyaWM6IFwiQ2FtcG9zIG51bWVyaWNvcyBwZXJtaXRlbSBjb21wYXJhY29lcywgZmFpeGFzIGUgbGlzdGFzLlwiLFxuICAgICAgb3BlcmF0b3JEYXRlOiBcIkNhbXBvcyBkZSBkYXRhIGUgaG9yYSBwZXJtaXRlbSBjb21wYXJhY29lcyBjcm9ub2xvZ2ljYXMgZSBpbnRlcnZhbG8uXCIsXG4gICAgICBvcGVyYXRvckJvb2xlYW46IFwiQ2FtcG9zIGJvb2xlYW5vcyBhY2VpdGFtIGNvbXBhcmFjYW8gZGlyZXRhIG91IHZlcmlmaWNhY2FvIGRlIHZhemlvLlwiLFxuICAgICAgb3BlcmF0b3JUZXh0OiBcIkNhbXBvcyB0ZXh0dWFpcyBhY2VpdGFtIGJ1c2NhIHBvciB0cmVjaG8sIHByZWZpeG8sIHN1Zml4byBlIGxpc3Rhcy5cIlxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMudG9vbHRpcHMuJHtvcGVyYXRvcktleX1gLFxuICAgICAgZmFsbGJhY2tCeUtleVtvcGVyYXRvcktleV1cbiAgICApO1xuICB9XG4gIGdldCBmaWx0ZXJWYWx1ZVR5cGVUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbikge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMudG9vbHRpcHMudmFsdWVUeXBlRGVmYXVsdGAsXG4gICAgICAgIFwiVXNlIHZhbG9yIGRpZ2l0YWRvIHBhcmEgY29tcGFyYXIgYWdvcmEgb3UgcGFyYW1ldHJvIHBhcmEgcGVkaXIgbyB2YWxvciBlbSB0ZW1wbyBkZSBleGVjdWNhby5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZmlsdGVyTmVlZHNWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMudG9vbHRpcHMudmFsdWVUeXBlTm90UmVxdWlyZWRgLFxuICAgICAgICBcIkNvbSBlc3RlIG9wZXJhZG9yIG8gZmlsdHJvIG5hbyBwcmVjaXNhIHJlY2ViZXIgdmFsb3IuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLnRvb2x0aXBzLnZhbHVlVHlwZWAsXG4gICAgICBcIlZhbG9yIGRpZ2l0YWRvIHNhbHZhIHVtYSBjb21wYXJhY2FvIGZpeGEuIFBhcmFtZXRybyBkZWl4YSBvIHZhbG9yIGFiZXJ0byBwYXJhIHByZWVuY2hpbWVudG8gZnV0dXJvLlwiXG4gICAgKTtcbiAgfVxuICBnZXQgZmlsdGVyQ29ubmVjdG9yVG9vbHRpcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmlsdGVycy50b29sdGlwcy5jb25uZWN0b3JgLFxuICAgICAgXCJDb25lY3RvciBkZWZpbmUgY29tbyBlc3RhIHJlZ3JhIHNlIGxpZ2EgYW8gZmlsdHJvIGFudGVyaW9yOiBBTkQgcmVzdHJpbmdlLCBPUiBhbXBsaWEuXCJcbiAgICApO1xuICB9XG4gIGdldCBmaWx0ZXJPcHRpb25hbFRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMudG9vbHRpcHMub3B0aW9uYWxgLFxuICAgICAgXCJNYXJxdWUgY29tbyBvcGNpb25hbCBxdWFuZG8gYSByZWdyYSBwdWRlciBzZXIgaWdub3JhZGEgc2VtIGludmFsaWRhciBhIGV4ZWN1Y2FvLlwiXG4gICAgKTtcbiAgfVxuICBnZXQgZmlsdGVyRG9tYWluRXhwcmVzc2lvblRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMudG9vbHRpcHMuZG9tYWluRXhwcmVzc2lvbmAsXG4gICAgICBcIkV4cHJlc3NhbyBkZSBkb21pbmlvIGVudHJhIGNvbW8gY29uZGljYW8gbWFudWFsIG5vIFdIRVJFLiBVc2UgcXVhbmRvIGEgcmVncmEgbmFvIGNvdWJlciBub3Mgb3BlcmFkb3JlcyBwYWRyYW8uXCJcbiAgICApO1xuICB9XG4gIGdldCBmaWx0ZXJWYWx1ZUlucHV0VG9vbHRpcCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmZpbHRlckRyYWZ0LnZhbHVlVHlwZSA9PT0gXCJwYXJhbWV0ZXJcIikge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMudG9vbHRpcHMucGFyYW1ldGVyTmFtZWAsXG4gICAgICAgIFwiSW5mb3JtZSBvIG5vbWUgdGVjbmljbyBxdWUgc2VyYSB1c2FkbyBwYXJhIHBlZGlyIG8gdmFsb3IgZW0gdGVtcG8gZGUgZXhlY3VjYW8uXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmlsdGVyRHJhZnQub3BlcmF0b3IgPT09IFwiSU5cIikge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMudG9vbHRpcHMudmFsdWVzTGlzdGAsXG4gICAgICAgIFwiU2VwYXJlIG9zIHZhbG9yZXMgcG9yIHZpcmd1bGEgcGFyYSBtb250YXIgYSBsaXN0YSBmaW5hbCBkbyBJTi5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWx0ZXJEcmFmdC5vcGVyYXRvciA9PT0gXCJCRVRXRUVOXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLnRvb2x0aXBzLmJldHdlZW5gLFxuICAgICAgICBcIlByZWVuY2hhIGluaWNpbyBlIGZpbSBwYXJhIG1vbnRhciBvIGludGVydmFsbyBjb21wbGV0by5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMudG9vbHRpcHMudmFsdWVgLFxuICAgICAgXCJPIHZhbG9yIGZpbmFsIHJlc3BlaXRhIG8gdGlwbyBkbyBjYW1wbyBlIG8gb3BlcmFkb3IgZXNjb2xoaWRvLlwiXG4gICAgKTtcbiAgfVxuICBnZXQgc2hvd0ZpbHRlclZhbHVlVGV4dGJveCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBpc1ZhbHVlTW9kZSA9IHRoaXMuZmlsdGVyRHJhZnQudmFsdWVUeXBlID09PSBcInZhbHVlXCIgJiYgdGhpcy5maWx0ZXJOZWVkc1ZhbHVlO1xuICAgIHJldHVybiAoXG4gICAgICBpc1ZhbHVlTW9kZSAmJlxuICAgICAgIXRoaXMuc2hvd0ZpbHRlclZhbHVlc1RleHRib3ggJiZcbiAgICAgICF0aGlzLnNob3dGaWx0ZXJCZXR3ZWVuSW5wdXRzICYmXG4gICAgICAhdGhpcy5zaG93RmlsdGVyQm9vbGVhbkNvbWJvYm94XG4gICAgKTtcbiAgfVxuICBnZXQgc2hvd0ZpbHRlclZhbHVlc1RleHRib3goKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZmlsdGVyRHJhZnQudmFsdWVUeXBlID09PSBcInZhbHVlXCIgJiZcbiAgICAgIHRoaXMuZmlsdGVyRHJhZnQub3BlcmF0b3IgPT09IFwiSU5cIlxuICAgICk7XG4gIH1cbiAgZ2V0IHNob3dGaWx0ZXJCZXR3ZWVuSW5wdXRzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlVHlwZSA9PT0gXCJ2YWx1ZVwiICYmXG4gICAgICB0aGlzLmZpbHRlckRyYWZ0Lm9wZXJhdG9yID09PSBcIkJFVFdFRU5cIlxuICAgICk7XG4gIH1cbiAgZ2V0IHNob3dGaWx0ZXJQYXJhbWV0ZXJUZXh0Ym94KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlVHlwZSA9PT0gXCJwYXJhbWV0ZXJcIjtcbiAgfVxuICBnZXQgc2hvd0ZpbHRlckJvb2xlYW5Db21ib2JveCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLnJlc29sdmVDb2x1bW5PcHRpb24odGhpcy5maWx0ZXJEcmFmdC5jb2x1bW4pO1xuICAgIHJldHVybiAoXG4gICAgICAhIWNvbHVtbiAmJiBjb2x1bW4uZGF0YVR5cGUgPT09IFwiYm9vbGVhblwiICYmIHRoaXMuc2hvd0ZpbHRlclZhbHVlVGV4dGJveFxuICAgICk7XG4gIH1cbiAgZ2V0IGZpbHRlclJldmlld0l0ZW1zKCk6IEZpbHRlclJldmlld0l0ZW1bXSB7IC8vIE5PU09OQVIgLSBjb21wbGV4aXR5OiBleHRyYWN0aW9uIHdvdWxkIHJpc2sgYmVoYXZpb3IgY2hhbmdlXG4gICAgY29uc3QgdmFsdWVUeXBlTGFiZWwgPSB0aGlzLmZpbHRlck1vZGFsTW9kZSA9PT0gRklMVEVSX01PREVfRE9NQUlOXG4gICAgICA/IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMuZG9tYWluTGFiZWxgLFxuICAgICAgICBcIkV4cHJlc3NhbyBkZSBkb21pbmlvXCJcbiAgICAgIClcbiAgICAgIDogdGhpcy5yZXNvbHZlT3B0aW9uTGFiZWwodGhpcy5maWx0ZXJEcmFmdC52YWx1ZVR5cGUsIHRoaXMudmFsdWVUeXBlT3B0aW9ucyk7XG5cbiAgICBjb25zdCBpdGVtczogRmlsdGVyUmV2aWV3SXRlbVtdID0gW1xuICAgICAge1xuICAgICAgICBpZDogXCJtb2RlXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpZWxkcy50eXBlYCxcbiAgICAgICAgICBcIlRpcG9cIlxuICAgICAgICApLFxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJNb2RhbE1vZGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTlxuICAgICAgICAgID8gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMuZG9tYWluTGFiZWxgLFxuICAgICAgICAgICAgXCJFeHByZXNzYW8gZGUgZG9taW5pb1wiXG4gICAgICAgICAgKVxuICAgICAgICAgIDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMubW9kZXMuY29uZGl0aW9uYCxcbiAgICAgICAgICAgIFwiRmlsdHJvXCJcbiAgICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IFwiY29ubmVjdG9yXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpZWxkcy5jb25uZWN0b3JgLFxuICAgICAgICAgIFwiQ29uZWN0b3JcIlxuICAgICAgICApLFxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJDb25uZWN0b3JEaXNhYmxlZFxuICAgICAgICAgID8gXCJXSEVSRVwiXG4gICAgICAgICAgOiB0aGlzLnJlc29sdmVPcHRpb25MYWJlbCh0aGlzLmZpbHRlckRyYWZ0LmNvbm5lY3RvciwgdGhpcy5maWx0ZXJDb25uZWN0b3JPcHRpb25zKSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGlmICh0aGlzLmZpbHRlck1vZGFsTW9kZSA9PT0gRklMVEVSX01PREVfRE9NQUlOKSB7XG4gICAgICBpdGVtcy5wdXNoKFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IFwiZXhwcmVzc2lvblwiLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmllbGRzLmRvbWFpbkV4cHJlc3Npb25gLFxuICAgICAgICAgICAgXCJFeHByZXNzYW8gZGUgZG9taW5pb1wiXG4gICAgICAgICAgKSxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJEcmFmdC5kb21haW5FeHByZXNzaW9uLnRyaW0oKSB8fCBcIi1cIixcbiAgICAgICAgICBlbXBoYXNpemU6IFwiY29kZVwiLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXMucHVzaChcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcImZpZWxkXCIsXG4gICAgICAgICAgbGFiZWw6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWVsZHMuZmllbGRgLFxuICAgICAgICAgICAgXCJDYW1wb1wiXG4gICAgICAgICAgKSxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJEcmFmdC5jb2x1bW4gPyB0aGlzLnJlc29sdmVDb2x1bW5QYXRoKHRoaXMuZmlsdGVyRHJhZnQuY29sdW1uKSA6IFwiLVwiLFxuICAgICAgICAgIGVtcGhhc2l6ZTogXCJwYXRoXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJvcGVyYXRvclwiLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmllbGRzLm9wZXJhdG9yYCxcbiAgICAgICAgICAgIFwiT3BlcmFkb3JcIlxuICAgICAgICAgICksXG4gICAgICAgICAgdmFsdWU6IHRoaXMucmVzb2x2ZUZpbHRlck9wZXJhdG9yTGFiZWwodGhpcy5maWx0ZXJEcmFmdC5vcGVyYXRvciksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJ2YWx1ZVR5cGVcIixcbiAgICAgICAgICBsYWJlbDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpZWxkcy52YWx1ZVR5cGVgLFxuICAgICAgICAgICAgXCJUaXBvIGRlIHZhbG9yXCJcbiAgICAgICAgICApLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlck5lZWRzVmFsdWUgPyB2YWx1ZVR5cGVMYWJlbCA6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5zdGF0ZXMubm9uZWAsXG4gICAgICAgICAgICBcIlNlbSB2YWxvclwiXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcInZhbHVlXCIsXG4gICAgICAgICAgbGFiZWw6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWVsZHMudmFsdWVgLFxuICAgICAgICAgICAgXCJWYWxvclwiXG4gICAgICAgICAgKSxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5yZXNvbHZlRmlsdGVyRHJhZnREaXNwbGF5VmFsdWUoKSB8fCBcIi1cIixcbiAgICAgICAgICBlbXBoYXNpemU6IHRoaXMuZmlsdGVyRHJhZnQudmFsdWVUeXBlID09PSBcInBhcmFtZXRlclwiID8gXCJjb2RlXCIgOiBcImRlZmF1bHRcIixcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaXRlbXMucHVzaCh7XG4gICAgICBpZDogXCJvcHRpb25hbFwiLFxuICAgICAgbGFiZWw6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LnN0YXRlcy5vcHRpb25hbGAsXG4gICAgICAgIFwiT3BjaW9uYWxcIlxuICAgICAgKSxcbiAgICAgIHZhbHVlOiB0aGlzLmZpbHRlckRyYWZ0Lm9wdGlvbmFsXG4gICAgICAgID8gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5zdGF0ZXMueWVzYCxcbiAgICAgICAgICBcIlNpbVwiXG4gICAgICAgIClcbiAgICAgICAgOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LnN0YXRlcy5ub2AsXG4gICAgICAgICAgXCJOYW9cIlxuICAgICAgICApLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG4gIGdldCBmaWx0ZXJSZXZpZXdQcmV2aWV3TGFiZWwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBwcmV2aWV3ID0gdGhpcy5yZXNvbHZlRmlsdGVyRHJhZnRTcWxQcmV2aWV3KCk7XG4gICAgcmV0dXJuIHByZXZpZXcgfHwgXCItXCI7XG4gIH1cbiAgZ2V0IHNvdXJjZU1vZGFsU2VsZWN0aW9uU3RlcEFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2VNb2RhbFN0ZXAgPT09IFwic2VsZWN0XCI7XG4gIH1cbiAgZ2V0IHNvdXJjZU1vZGFsQ29uZmlndXJhdGlvblN0ZXBBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlTW9kYWxTdGVwID09PSBcImNvbmZpZ3VyZVwiO1xuICB9XG4gIGdldCBzb3VyY2VNb2RhbENhblByb2NlZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlTW9kYWxEcmFmdHMubGVuZ3RoID4gMDtcbiAgfVxuICBnZXQgY2FuT3BlblNvdXJjZUNvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlSXRlbXMubGVuZ3RoID4gMDtcbiAgfVxuICBnZXQgc291cmNlSXRlbXMoKTogU291cmNlVmlld0l0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSB0aGlzLnJlc29sdmVUYWJsZURpc3BsYXlQYXJ0cyhpdGVtLnRhYmxlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBpdGVtLnRhYmxlLFxuICAgICAgICBkYkxhYmVsOiBwYXJ0cy5kYkxhYmVsLFxuICAgICAgICB0YWJsZUxhYmVsOiBwYXJ0cy50YWJsZUxhYmVsLFxuICAgICAgICBhbGlhczogaXRlbS5hbGlhcyxcbiAgICAgICAgaGFzQ3VzdG9tQWxpYXM6IHRoaXMuaGFzQ3VzdG9tQWxpYXMoaXRlbS50YWJsZSwgaXRlbS5hbGlhcyksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIGdldCBzb3VyY2VNb2RhbFRpbWVsaW5lSXRlbXMoKTogVGltZWxpbmVJdGVtW10ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGlkOiBcInNlbGVjdFwiLFxuICAgICAgICBsYWJlbDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5hY3Rpb25zLnNlbGVjdFRhYmxlc2AsXG4gICAgICAgICAgRkFMTEJBQ0tfU0VMRUNUX1RBQkxFU1xuICAgICAgICApLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5tb2RhbHMuc291cmNlcy5zdGVwcy5zZWxlY3Quc3VidGl0bGVgLFxuICAgICAgICAgIFwiRXNjb2xoYSBhcyB0YWJlbGFzIHF1ZSBkZXZlbSBhbGltZW50YXIgYSB2aXNhbyBhbnRlcyBkZSBjb25maWd1cmFyIG9zIGFsaWFzZXMuXCJcbiAgICAgICAgKSxcbiAgICAgICAgaW5kaWNhdG9yTGFiZWw6IFwiMVwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IFwiY29uZmlndXJlXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmFjdGlvbnMuY29uZmlndXJlQWxpYXNlc2AsXG4gICAgICAgICAgXCJDb25maWd1cmFyIGFsaWFzZXNcIlxuICAgICAgICApLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5tb2RhbHMuc291cmNlcy5zdGVwcy5jb25maWd1cmUuc3VidGl0bGVgLFxuICAgICAgICAgIFwiUmV2aXNlIG9zIGFsaWFzZXMgc3VnZXJpZG9zIGUgYWp1c3RlIG9zIG5vbWVzIGZpbmFpcyBkYXMgdGFiZWxhcyBzZWxlY2lvbmFkYXMuXCJcbiAgICAgICAgKSxcbiAgICAgICAgaW5kaWNhdG9yTGFiZWw6IFwiMlwiLFxuICAgICAgICBkaXNhYmxlZDogIXRoaXMuc291cmNlTW9kYWxDYW5Qcm9jZWVkLFxuICAgICAgfSxcbiAgICBdO1xuICB9XG4gIGdldCBzb3VyY2VNb2RhbFRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5tb2RhbHMuc291cmNlcy50aXRsZWAsXG4gICAgICBGQUxMQkFDS19TRUxFQ1RfVEFCTEVTXG4gICAgKTtcbiAgfVxuICBnZXQgc291cmNlTW9kYWxUaW1lbGluZUFyaWFMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uYWNjZXNzaWJpbGl0eS5zb3VyY2VNb2RhbFRpbWVsaW5lYCxcbiAgICAgIFwiRXRhcGFzIGRhIGNvbmZpZ3VyYWNhbyBkYXMgdGFiZWxhc1wiXG4gICAgKTtcbiAgfVxuICBnZXQgc291cmNlTW9kYWxQaWNrbGlzdEl0ZW1zKCk6IFRhYmxlUGlja2xpc3RJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkVGFibGVQaWNrbGlzdEl0ZW1zKHRoaXMuY29uZmlnLmF2YWlsYWJsZURhdGEudGFibGVzID8/IFtdKTtcbiAgfVxuICBnZXQgc291cmNlTW9kYWxTZWxlY3RlZFBpY2tsaXN0SWRzKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2VNb2RhbERyYWZ0c1xuICAgICAgLm1hcCgoaXRlbSkgPT4gdGhpcy5yZXNvbHZlVGFibGVQaWNrbGlzdElkKGl0ZW0udGFibGUpKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKGl0ZW0pOiBpdGVtIGlzIG51bWJlciA9PiB0eXBlb2YgaXRlbSA9PT0gXCJudW1iZXJcIiAmJiBpdGVtID4gMFxuICAgICAgKTtcbiAgfVxuICBnZXQgc291cmNlTW9kYWxDb25maWd1cmVkSXRlbXMoKTogU291cmNlQ29uZmlndXJlZEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlTW9kYWxEcmFmdHMubWFwKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHRoaXMucmVzb2x2ZVRhYmxlRGlzcGxheVBhcnRzKGl0ZW0udGFibGUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGl0ZW0udGFibGUsXG4gICAgICAgIHRhYmxlOiBpdGVtLnRhYmxlLFxuICAgICAgICBkYkxhYmVsOiBwYXJ0cy5kYkxhYmVsLFxuICAgICAgICB0YWJsZUxhYmVsOiBwYXJ0cy50YWJsZUxhYmVsLFxuICAgICAgICBhbGlhczogaXRlbS5hbGlhcyxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgZ2V0IGpvaW5JdGVtcygpOiBKb2luVmlld0l0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5qb2lucy5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnJlc29sdmVDb2x1bW5QYXJ0cyhpdGVtLnNvdXJjZUNvbHVtbik7XG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnJlc29sdmVDb2x1bW5QYXJ0cyhpdGVtLnRhcmdldENvbHVtbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogYCR7aXRlbS5zb3VyY2VDb2x1bW59LSR7aXRlbS50YXJnZXRDb2x1bW59LSR7aW5kZXh9YCxcbiAgICAgICAgc291cmNlVGFibGU6IHNvdXJjZS50YWJsZUxhYmVsLFxuICAgICAgICBzb3VyY2VGaWVsZDogc291cmNlLmZpZWxkTGFiZWwsXG4gICAgICAgIG9wZXJhdG9yOiB0aGlzLnJlc29sdmVKb2luT3BlcmF0b3JMYWJlbChpdGVtLm9wZXJhdG9yKSxcbiAgICAgICAgdGFyZ2V0VGFibGU6IHRhcmdldC50YWJsZUxhYmVsLFxuICAgICAgICB0YXJnZXRGaWVsZDogdGFyZ2V0LmZpZWxkTGFiZWwsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIGdldCBncm91cEJ5SXRlbXMoKTogU2ltcGxlVmlld0l0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5Lm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgIGlkOiBpdGVtLFxuICAgICAgLi4udGhpcy5yZXNvbHZlQ29sdW1uUGFydHMoaXRlbSksXG4gICAgfSkpO1xuICB9XG4gIGdldCBmaWVsZEl0ZW1zTGVnYWN5KCk6IHVua25vd25bXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3JkZXJlZEZpZWxkRW50cmllcygpLm1hcCgoZW50cnksIGluZGV4KSA9PiAoe1xuICAgICAgaWQ6IGVudHJ5LmNvbHVtbixcbiAgICAgIGxhYmVsOiBgJHtpbmRleCArIDF9wrAgJHt0aGlzLnJlc29sdmVDb2x1bW5QYXRoKGVudHJ5LmNvbHVtbil9YCxcbiAgICAgIG9yZGVyOiBpbmRleCxcbiAgICB9KSk7XG4gIH1cbiAgZ2V0IGZpZWxkSXRlbXMoKTogRmllbGRWaWV3SXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPcmRlcmVkRmllbGRFbnRyaWVzKCkubWFwKChlbnRyeSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGVudHJ5LmZ1bmN0aW9uPy5mdW5jdGlvbk5hbWU/LnRyaW0oKSA/PyBFTVBUWV9WQUxVRTtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uQWxpYXMgPSBlbnRyeS5mdW5jdGlvbj8uYWxpYXM/LnRyaW0oKSA/PyBFTVBUWV9WQUxVRTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGAke2VudHJ5LmNvbHVtbn0tJHtpbmRleH1gLFxuICAgICAgICBzb3VyY2VJbmRleDogZW50cnkuc291cmNlSW5kZXgsXG4gICAgICAgIGNvbHVtbjogZW50cnkuY29sdW1uLFxuICAgICAgICBvcmRlckxhYmVsOiBgJHtpbmRleCArIDF9wrBgLFxuICAgICAgICAuLi50aGlzLnJlc29sdmVDb2x1bW5QYXJ0cyhlbnRyeS5jb2x1bW4pLFxuICAgICAgICBhbGlhczogZW50cnkuYWxpYXM/LnRyaW0oKSA/PyBFTVBUWV9WQUxVRSxcbiAgICAgICAgd2lkdGg6IGVudHJ5LndpZHRoPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICAgIGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgZnVuY3Rpb25MYWJlbDogZnVuY3Rpb25OYW1lID8gdGhpcy5yZXNvbHZlRnVuY3Rpb25MYWJlbChmdW5jdGlvbk5hbWUpIDogRU1QVFlfVkFMVUUsXG4gICAgICAgIGZ1bmN0aW9uQWxpYXMsXG4gICAgICAgIGhhc0N1c3RvbUNvbmZpZzpcbiAgICAgICAgICAhIWVudHJ5LmFsaWFzPy50cmltKCkgfHwgISFlbnRyeS53aWR0aD8udHJpbSgpIHx8ICEhZnVuY3Rpb25OYW1lIHx8ICEhZnVuY3Rpb25BbGlhcyxcbiAgICAgICAgb3JkZXI6IGluZGV4LFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICBnZXQgZmllbGRNb2RhbFNlbGVjdGlvblJvd3MoKTogU2VsZWN0aW9uUm93W10ge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkQ29sdW1uU2VsZWN0aW9uUm93cyhcbiAgICAgIHRoaXMuZmllbGRTZWxlY3RhYmxlQ29sdW1ucyxcbiAgICAgIHRoaXMuZmllbGRNb2RhbERyYWZ0cy5tYXAoKGl0ZW0pID0+IGl0ZW0uY29sdW1uKSxcbiAgICAgIHRoaXMuZmllbGRNb2RhbFNlYXJjaCxcbiAgICAgIHRydWVcbiAgICApO1xuICB9XG4gIGdldCBmaWVsZE1vZGFsQ29uZmlndXJlZEl0ZW1zKCk6IEZpZWxkTW9kYWxDb25maWd1cmVkSXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZE1vZGFsRHJhZnRzLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHBhcnRzID0gdGhpcy5yZXNvbHZlQ29sdW1uUGFydHMoaXRlbS5jb2x1bW4pO1xuICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID0gaXRlbS5mdW5jdGlvbj8uZnVuY3Rpb25OYW1lPy50cmltKCkgPz8gRU1QVFlfVkFMVUU7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgaWQ6IGAke2l0ZW0uY29sdW1ufS0ke2luZGV4fWAsXG4gICAgICAgIGNvbHVtbjogaXRlbS5jb2x1bW4sXG4gICAgICAgIHRhYmxlTGFiZWw6IHBhcnRzLnRhYmxlTGFiZWwsXG4gICAgICAgIGZpZWxkTGFiZWw6IHBhcnRzLmZpZWxkTGFiZWwsXG4gICAgICAgIGFsaWFzOiBpdGVtLmFsaWFzPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICAgIHdpZHRoOiBpdGVtLndpZHRoPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICAgIGZ1bmN0aW9uTGFiZWw6IGZ1bmN0aW9uTmFtZVxuICAgICAgICAgID8gdGhpcy5yZXNvbHZlRnVuY3Rpb25MYWJlbChmdW5jdGlvbk5hbWUpXG4gICAgICAgICAgOiBFTVBUWV9WQUxVRSxcbiAgICAgICAgZnVuY3Rpb25BbGlhczogaXRlbS5mdW5jdGlvbj8uYWxpYXM/LnRyaW0oKSA/PyBFTVBUWV9WQUxVRSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgZ2V0IGZpZWxkTW9kYWxIYXNTZWxlY3RhYmxlQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZFNlbGVjdGFibGVDb2x1bW5zLnNvbWUoXG4gICAgICAoaXRlbSkgPT4gIXRoaXMuZmllbGRNb2RhbERyYWZ0cy5zb21lKChkcmFmdCkgPT4gZHJhZnQuY29sdW1uID09PSBpdGVtLnZhbHVlKVxuICAgICk7XG4gIH1cbiAgZ2V0IGZpZWxkTW9kYWxDYW5TZWxlY3RBbGwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRNb2RhbFNlbGVjdGlvblJvd3Muc29tZSgoaXRlbSkgPT4gIWl0ZW0uc2VsZWN0ZWQpO1xuICB9XG4gIGdldCBmaWVsZE1vZGFsUGlja2xpc3RJdGVtcygpOiBDb2x1bW5QaWNrbGlzdEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRDb2x1bW5QaWNrbGlzdEl0ZW1zKHRoaXMuZmllbGRTZWxlY3RhYmxlQ29sdW1ucyk7XG4gIH1cbiAgZ2V0IGZpZWxkTW9kYWxTZWxlY3RlZFBpY2tsaXN0SWRzKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZE1vZGFsRHJhZnRzXG4gICAgICAubWFwKChpdGVtKSA9PiB0aGlzLnJlc29sdmVDb2x1bW5QaWNrbGlzdElkKGl0ZW0uY29sdW1uKSlcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChpdGVtKTogaXRlbSBpcyBudW1iZXIgPT4gdHlwZW9mIGl0ZW0gPT09IFwibnVtYmVyXCIgJiYgaXRlbSA+IDBcbiAgICAgICk7XG4gIH1cbiAgZ2V0IGZpZWxkTW9kYWxTZWxlY3Rpb25TdGVwQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkTW9kYWxTdGVwID09PSBcInNlbGVjdFwiO1xuICB9XG4gIGdldCBmaWVsZE1vZGFsQ29uZmlndXJhdGlvblN0ZXBBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRNb2RhbFN0ZXAgPT09IFwiY29uZmlndXJlXCI7XG4gIH1cbiAgZ2V0IGZpZWxkTW9kYWxUaW1lbGluZUFyaWFMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uYWNjZXNzaWJpbGl0eS5maWVsZE1vZGFsVGltZWxpbmVgLFxuICAgICAgXCJFdGFwYXMgZGEgY29uZmlndXJhY2FvIGRvIGNhbXBvXCJcbiAgICApO1xuICB9XG4gIGdldCBmaWVsZE1vZGFsVGltZWxpbmVJdGVtcygpOiBUaW1lbGluZUl0ZW1bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgaWQ6IFwic2VsZWN0XCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmFjdGlvbnMuc2VsZWN0Q29sdW1uc2AsXG4gICAgICAgICAgXCJTZWxlY2lvbmFyIGNvbHVuYXNcIlxuICAgICAgICApLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5tb2RhbHMuZmllbGRzLnN1YnRpdGxlYCxcbiAgICAgICAgICBcIkVzY29saGEgdW1hIG91IG1haXMgY29sdW5hcyBwYXJhIGV4cG9yIG5vIHJlc3VsdGFkby5cIlxuICAgICAgICApLFxuICAgICAgICBpbmRpY2F0b3JMYWJlbDogXCIxXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogXCJjb25maWd1cmVcIixcbiAgICAgICAgbGFiZWw6IHRoaXMuZmllbGRNb2RhbFRpdGxlLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5tb2RhbHMuZmllbGQuc3VidGl0bGVgLFxuICAgICAgICAgIFwiQWp1c3RlIGFsaWFzLCBsYXJndXJhIGUgZnVuY2FvIGFudGVzIGRlIHNhbHZhciBvIGNhbXBvLlwiXG4gICAgICAgICksXG4gICAgICAgIGluZGljYXRvckxhYmVsOiBcIjJcIixcbiAgICAgICAgZGlzYWJsZWQ6ICF0aGlzLmZpZWxkTW9kYWxEcmFmdHMubGVuZ3RoLFxuICAgICAgfSxcbiAgICBdO1xuICB9XG4gIGdldCBmaWx0ZXJNb2RhbFRpbWVsaW5lQXJpYUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5hY2Nlc3NpYmlsaXR5LmZpbHRlck1vZGFsVGltZWxpbmVgLFxuICAgICAgXCJFdGFwYXMgZGEgY29uZmlndXJhY2FvIGRvIGZpbHRyb1wiXG4gICAgKTtcbiAgfVxuICBnZXQgZmlsdGVyTW9kYWxUaW1lbGluZUl0ZW1zKCk6IFRpbWVsaW5lSXRlbVtdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBpZDogXCJzZWxlY3RcIixcbiAgICAgICAgbGFiZWw6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubW9kYWxzLmZpbHRlci5zdGVwcy5zZWxlY3QudGl0bGVgLFxuICAgICAgICAgIFwiU2VsZWNpb25hciBiYXNlXCJcbiAgICAgICAgKSxcbiAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubW9kYWxzLmZpbHRlci5zdGVwcy5zZWxlY3Quc3VidGl0bGVgLFxuICAgICAgICAgIFwiRXNjb2xoYSBvIHRpcG8gZGUgZmlsdHJvIGUgZGVmaW5hIG8gY2FtcG8gaW5pY2lhbCBhbnRlcyBkZSBjb25maWd1cmFyLlwiXG4gICAgICAgICksXG4gICAgICAgIGluZGljYXRvckxhYmVsOiBcIjFcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiBcImNvbmZpZ3VyZVwiLFxuICAgICAgICBsYWJlbDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5tb2RhbHMuZmlsdGVyLnN0ZXBzLmNvbmZpZ3VyZS50aXRsZWAsXG4gICAgICAgICAgXCJDb25maWd1cmFyIGZpbHRyb1wiXG4gICAgICAgICksXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9Lm1vZGFscy5maWx0ZXIuc3RlcHMuY29uZmlndXJlLnN1YnRpdGxlYCxcbiAgICAgICAgICBcIkRlZmluYSBvcGVyYWRvciwgdmFsb3IgZSBjb21wb3J0YW1lbnRvIGZpbmFsIGRvIGZpbHRyby5cIlxuICAgICAgICApLFxuICAgICAgICBpbmRpY2F0b3JMYWJlbDogXCIyXCIsXG4gICAgICAgIGRpc2FibGVkOiAhdGhpcy5maWx0ZXJNb2RhbENhblByb2NlZWQsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogXCJyZXZpZXdcIixcbiAgICAgICAgbGFiZWw6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubW9kYWxzLmZpbHRlci5zdGVwcy5yZXZpZXcudGl0bGVgLFxuICAgICAgICAgIFwiUmV2aXNhciByZWdyYVwiXG4gICAgICAgICksXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9Lm1vZGFscy5maWx0ZXIuc3RlcHMucmV2aWV3LnN1YnRpdGxlYCxcbiAgICAgICAgICBcIkNvbmZpcm1lIG8gcmVzdW1vIGZpbmFsIGRhIHJlZ3JhIGFudGVzIGRlIHNhbHZhci5cIlxuICAgICAgICApLFxuICAgICAgICBpbmRpY2F0b3JMYWJlbDogXCIzXCIsXG4gICAgICAgIGRpc2FibGVkOiAhdGhpcy5maWx0ZXJNb2RhbENhblJldmlldyxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuICBnZXQgZmlsdGVyTW9kYWxDb25maWd1cmVBY3Rpb25MYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uYWN0aW9ucy5uZXh0U3RlcGAsXG4gICAgICBcIlByb3hpbWEgZXRhcGFcIlxuICAgICk7XG4gIH1cbiAgZ2V0IGZpbHRlck1vZGFsUmV2aWV3QWN0aW9uTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmFjdGlvbnMucmV2aWV3UnVsZWAsXG4gICAgICBcIlJldmlzYXIgcmVncmFcIlxuICAgICk7XG4gIH1cbiAgZ2V0IGZpbHRlck1vZGFsU2VsZWN0aW9uSGVscGVyVGV4dCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmZpbHRlck1vZGFsTW9kZSA9PT0gRklMVEVSX01PREVfRE9NQUlOKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubW9kYWxzLmZpbHRlci5kb21haW5TZWxlY3Rpb25IaW50YCxcbiAgICAgICAgXCJBIGV4cHJlc3NhbyBkZSBkb21pbmlvIHNlcmEgY29uZmlndXJhZGEgbmEgcHJveGltYSBldGFwYS5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9Lm1vZGFscy5maWx0ZXIuY29uZGl0aW9uU2VsZWN0aW9uSGludGAsXG4gICAgICBcIlNlbGVjaW9uZSB1bSBjYW1wbyBwYXJhIGxpYmVyYXIgYSBjb25maWd1cmFjYW8gZGV0YWxoYWRhIGRvIGZpbHRyby5cIlxuICAgICk7XG4gIH1cbiAgZ2V0IGZpZWxkTW9kYWxGdW5jdGlvbk9wdGlvbnMoKTogRHluYW1pY1ZpZXdCdWlsZGVyT3B0aW9uW10ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHRleHQ6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uc3RhdGVzLm5vbmVgLFxuICAgICAgICAgIFwiU2VtIGZ1bmNhb1wiXG4gICAgICAgICksXG4gICAgICAgIHZhbHVlOiBFTVBUWV9WQUxVRSxcbiAgICAgIH0sXG4gICAgICAuLi50aGlzLmZ1bmN0aW9uT3B0aW9ucyxcbiAgICBdO1xuICB9XG4gIGdldCBzb3J0SXRlbXMoKTogU29ydFZpZXdJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc29ydGluZy5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoe1xuICAgICAgaWQ6IGAke2l0ZW0uY29sdW1ufS0ke2l0ZW0uZnVuY3Rpb25OYW1lID8/IEVNUFRZX1ZBTFVFfS0ke2l0ZW0uZGlyZWN0aW9ufS0ke2luZGV4fWAsXG4gICAgICAuLi50aGlzLnJlc29sdmVDb2x1bW5QYXJ0cyhpdGVtLmNvbHVtbiksXG4gICAgICBmdW5jdGlvbk5hbWU6IGl0ZW0uZnVuY3Rpb25OYW1lPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICBmdW5jdGlvbkxhYmVsOiBpdGVtLmZ1bmN0aW9uTmFtZVxuICAgICAgICA/IHRoaXMucmVzb2x2ZUZ1bmN0aW9uTGFiZWwoaXRlbS5mdW5jdGlvbk5hbWUpXG4gICAgICAgIDogRU1QVFlfVkFMVUUsXG4gICAgICBkaXJlY3Rpb246IHRoaXMucmVzb2x2ZU9wdGlvbkxhYmVsKFxuICAgICAgICBpdGVtLmRpcmVjdGlvbixcbiAgICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uT3B0aW9uc1xuICAgICAgKSxcbiAgICB9KSk7XG4gIH1cbiAgZ2V0IGZpbHRlckl0ZW1zTGVnYWN5KCk6IHVua25vd25bXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5maWx0ZXJzLm1hcCgoaXRlbSwgaW5kZXgpID0+ICh7XG4gICAgICBpZDogYCR7aXRlbS52YWx1ZVR5cGV9LSR7aXRlbS5jb2x1bW59LSR7aW5kZXh9YCxcbiAgICAgIHRpdGxlOlxuICAgICAgICBpdGVtLnZhbHVlVHlwZSA9PT0gRklMVEVSX01PREVfRE9NQUlOXG4gICAgICAgICAgPyB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmlsdGVycy5kb21haW5MYWJlbGAsXG4gICAgICAgICAgICBcIkV4cHJlc3NhbyBkZSBkb21pbmlvXCJcbiAgICAgICAgICApXG4gICAgICAgICAgOiBgJHt0aGlzLnJlc29sdmVDb2x1bW5MYWJlbChcbiAgICAgICAgICAgIGl0ZW0uY29sdW1uXG4gICAgICAgICAgKX0gwrcgJHt0aGlzLnJlc29sdmVGaWx0ZXJPcGVyYXRvckxhYmVsKGl0ZW0ub3BlcmF0b3IpfWAsXG4gICAgICBzdWJ0aXRsZTogdGhpcy5yZXNvbHZlRmlsdGVyRGlzcGxheVZhbHVlKGl0ZW0pLFxuICAgICAgb3B0aW9uYWw6IGl0ZW0ub3B0aW9uYWwsXG4gICAgfSkpO1xuICB9XG4gIGdldCBmaWx0ZXJJdGVtcygpOiBGaWx0ZXJWaWV3SXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpbHRlcnMubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPVxuICAgICAgICBpdGVtLnZhbHVlVHlwZSA9PT0gRklMVEVSX01PREVfRE9NQUlOXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICBkYkxhYmVsOiBFTVBUWV9WQUxVRSxcbiAgICAgICAgICAgIHRhYmxlTGFiZWw6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMuZG9tYWluTGFiZWxgLFxuICAgICAgICAgICAgICBcIkV4cHJlc3NhbyBkZSBkb21pbmlvXCJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBmaWVsZExhYmVsOiBFTVBUWV9WQUxVRSxcbiAgICAgICAgICB9XG4gICAgICAgICAgOiB0aGlzLnJlc29sdmVDb2x1bW5QYXJ0cyhpdGVtLmNvbHVtbik7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBgJHtpdGVtLnZhbHVlVHlwZX0tJHtpdGVtLmNvbHVtbn0tJHtpbmRleH1gLFxuICAgICAgICAuLi5wYXJ0cyxcbiAgICAgICAgb3BlcmF0b3JMYWJlbDpcbiAgICAgICAgICBpdGVtLnZhbHVlVHlwZSA9PT0gRklMVEVSX01PREVfRE9NQUlOXG4gICAgICAgICAgICA/IEVNUFRZX1ZBTFVFXG4gICAgICAgICAgICA6IHRoaXMucmVzb2x2ZUZpbHRlck9wZXJhdG9yTGFiZWwoaXRlbS5vcGVyYXRvciksXG4gICAgICAgIHN1YnRpdGxlOiB0aGlzLnJlc29sdmVGaWx0ZXJEaXNwbGF5VmFsdWUoaXRlbSksXG4gICAgICAgIG9wdGlvbmFsOiBpdGVtLm9wdGlvbmFsLFxuICAgICAgICBpc0RvbWFpbjogaXRlbS52YWx1ZVR5cGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTixcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgZ2V0IHNlbGVjdGlvbk1vZGFsVGl0bGUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RhbE1vZGUgPT09IFwidGFibGVzXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5tb2RhbHMuc291cmNlcy50aXRsZWAsXG4gICAgICAgIEZBTExCQUNLX1NFTEVDVF9UQUJMRVNcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGFsTW9kZSA9PT0gXCJmaWVsZHNcIikge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9Lm1vZGFscy5maWVsZHMudGl0bGVgLFxuICAgICAgICBcIlNlbGVjaW9uYXIgY2FtcG9zXCJcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubW9kYWxzLmdyb3VwQnkudGl0bGVgLFxuICAgICAgXCJTZWxlY2lvbmFyIEdyb3VwIEJ5XCJcbiAgICApO1xuICB9XG4gIGdldCBtb2RhbFNlYXJjaExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWVsZHMuc2VhcmNoYCxcbiAgICAgIFwiQnVzY2FyXCJcbiAgICApO1xuICB9XG4gIGdldCBtb2RhbFNlYXJjaFBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5tb2RhbHMuc2VhcmNoUGxhY2Vob2xkZXJgLFxuICAgICAgXCJCdXNjYXJcIlxuICAgICk7XG4gIH1cbiAgZ2V0IG1vZGFsTmFtZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWVsZHMubmFtZWAsXG4gICAgICBcIk5vbWVcIlxuICAgICk7XG4gIH1cbiAgZ2V0IG1vZGFsVHlwZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWVsZHMudHlwZWAsXG4gICAgICBcIlRpcG9cIlxuICAgICk7XG4gIH1cbiAgZ2V0IG1vZGFsU2VsZWN0TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmFjdGlvbnMuc2VsZWN0YCxcbiAgICAgIFwiU2VsZWNpb25hclwiXG4gICAgKTtcbiAgfVxuICBnZXQgZmlsdGVyTW9kYWxUaXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uY2FyZHMuZmlsdGVycy50aXRsZWAsXG4gICAgICBcIkZpbHRyb3NcIlxuICAgICk7XG4gIH1cbiAgZ2V0IHNvcnRNb2RhbFRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5jYXJkcy5zb3J0aW5nLnRpdGxlYCxcbiAgICAgIFwiT3JkZW5hY2FvXCJcbiAgICApO1xuICB9XG4gIGdldCBmaWVsZE1vZGFsVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9Lm1vZGFscy5maWVsZC50aXRsZWAsXG4gICAgICBcIkNvbmZpZ3VyYXIgY2FtcG9cIlxuICAgICk7XG4gIH1cbiAgZ2V0IHNlbGVjdGlvbk1vZGFsUm93cygpOiBTZWxlY3Rpb25Sb3dbXSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kYWxNb2RlID09PSBcInRhYmxlc1wiKSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsZFRhYmxlU2VsZWN0aW9uUm93cyhcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RhbElkcyxcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RhbFNlYXJjaFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kYWxNb2RlID09PSBcImZpZWxkc1wiKSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsZENvbHVtblNlbGVjdGlvblJvd3MoXG4gICAgICAgIHRoaXMuZmllbGRTZWxlY3RhYmxlQ29sdW1ucyxcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RhbElkcyxcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RhbFNlYXJjaFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRDb2x1bW5TZWxlY3Rpb25Sb3dzKFxuICAgICAgdGhpcy5ncm91cEJ5U2VsZWN0YWJsZUNvbHVtbnMsXG4gICAgICB0aGlzLnNlbGVjdGlvbk1vZGFsSWRzLFxuICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RhbFNlYXJjaFxuICAgICk7XG4gIH1cbiAgZ2V0IHNlbGVjdGlvbk1vZGFsUGlja2xpc3RJdGVtcygpOiBDb2x1bW5QaWNrbGlzdEl0ZW1bXSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kYWxNb2RlID09PSBcImZpZWxkc1wiKSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsZENvbHVtblBpY2tsaXN0SXRlbXModGhpcy5maWVsZFNlbGVjdGFibGVDb2x1bW5zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5idWlsZENvbHVtblBpY2tsaXN0SXRlbXModGhpcy5ncm91cEJ5U2VsZWN0YWJsZUNvbHVtbnMpO1xuICB9XG4gIGdldCBzZWxlY3Rpb25Nb2RhbFNlbGVjdGVkUGlja2xpc3RJZHMoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbk1vZGFsSWRzXG4gICAgICAubWFwKChpdGVtKSA9PiB0aGlzLnJlc29sdmVDb2x1bW5QaWNrbGlzdElkKGl0ZW0pKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKGl0ZW0pOiBpdGVtIGlzIG51bWJlciA9PiB0eXBlb2YgaXRlbSA9PT0gXCJudW1iZXJcIiAmJiBpdGVtID4gMFxuICAgICAgKTtcbiAgfVxuICBnZXQgam9pblNvdXJjZVJvd3MoKTogU2VsZWN0aW9uUm93W10ge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkQ29sdW1uU2VsZWN0aW9uUm93cyhcbiAgICAgIHRoaXMuYXZhaWxhYmxlQ29sdW1ucyxcbiAgICAgIHRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtbiA/IFt0aGlzLmpvaW5EcmFmdC5zb3VyY2VDb2x1bW5dIDogW10sXG4gICAgICB0aGlzLmpvaW5Tb3VyY2VTZWFyY2gsXG4gICAgICBmYWxzZVxuICAgICk7XG4gIH1cbiAgZ2V0IGpvaW5Tb3VyY2VQaWNrbGlzdEl0ZW1zKCk6IENvbHVtblBpY2tsaXN0SXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZENvbHVtblBpY2tsaXN0SXRlbXModGhpcy5hdmFpbGFibGVDb2x1bW5zKTtcbiAgfVxuICBnZXQgam9pblNvdXJjZVNlbGVjdGVkUGlja2xpc3RJZHMoKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHNlbGVjdGVkSWQgPSB0aGlzLnJlc29sdmVDb2x1bW5QaWNrbGlzdElkKHRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtbik7XG4gICAgcmV0dXJuIHR5cGVvZiBzZWxlY3RlZElkID09PSBcIm51bWJlclwiICYmIHNlbGVjdGVkSWQgPiAwXG4gICAgICA/IFtzZWxlY3RlZElkXVxuICAgICAgOiBbXTtcbiAgfVxuICBnZXQgam9pblRhcmdldFJvd3MoKTogU2VsZWN0aW9uUm93W10ge1xuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMucmVzb2x2ZUNvbHVtbk9wdGlvbih0aGlzLmpvaW5EcmFmdC5zb3VyY2VDb2x1bW4pO1xuICAgIGNvbnN0IGl0ZW1zID0gc291cmNlXG4gICAgICA/IHRoaXMuYXZhaWxhYmxlQ29sdW1ucy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udGFibGUgIT09IHNvdXJjZS50YWJsZSlcbiAgICAgIDogdGhpcy5hdmFpbGFibGVDb2x1bW5zO1xuICAgIHJldHVybiB0aGlzLmJ1aWxkQ29sdW1uU2VsZWN0aW9uUm93cyhcbiAgICAgIGl0ZW1zLFxuICAgICAgdGhpcy5qb2luRHJhZnQudGFyZ2V0Q29sdW1uID8gW3RoaXMuam9pbkRyYWZ0LnRhcmdldENvbHVtbl0gOiBbXSxcbiAgICAgIHRoaXMuam9pblRhcmdldFNlYXJjaCxcbiAgICAgIGZhbHNlXG4gICAgKTtcbiAgfVxuICBnZXQgam9pblRhcmdldFNlbGVjdGFibGVDb2x1bW5zKCk6IER5bmFtaWNWaWV3QnVpbGRlckNvbHVtbk9wdGlvbltdIHtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnJlc29sdmVDb2x1bW5PcHRpb24odGhpcy5qb2luRHJhZnQuc291cmNlQ29sdW1uKTtcbiAgICByZXR1cm4gc291cmNlXG4gICAgICA/IHRoaXMuYXZhaWxhYmxlQ29sdW1ucy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udGFibGUgIT09IHNvdXJjZS50YWJsZSlcbiAgICAgIDogdGhpcy5hdmFpbGFibGVDb2x1bW5zO1xuICB9XG4gIGdldCBqb2luVGFyZ2V0UGlja2xpc3RJdGVtcygpOiBDb2x1bW5QaWNrbGlzdEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRDb2x1bW5QaWNrbGlzdEl0ZW1zKHRoaXMuam9pblRhcmdldFNlbGVjdGFibGVDb2x1bW5zKTtcbiAgfVxuICBnZXQgam9pblRhcmdldFNlbGVjdGVkUGlja2xpc3RJZHMoKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHNlbGVjdGVkSWQgPSB0aGlzLnJlc29sdmVDb2x1bW5QaWNrbGlzdElkKHRoaXMuam9pbkRyYWZ0LnRhcmdldENvbHVtbik7XG4gICAgcmV0dXJuIHR5cGVvZiBzZWxlY3RlZElkID09PSBcIm51bWJlclwiICYmIHNlbGVjdGVkSWQgPiAwXG4gICAgICA/IFtzZWxlY3RlZElkXVxuICAgICAgOiBbXTtcbiAgfVxuICBnZXQgc29ydENvbHVtblJvd3MoKTogU2VsZWN0aW9uUm93W10ge1xuICAgIHJldHVybiB0aGlzLnNvcnRTZWxlY3RhYmxlSXRlbXNcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICAgIHRoaXMubWF0Y2hlc1NlYXJjaChcbiAgICAgICAgICBbaXRlbS50YWJsZUxhYmVsLCBpdGVtLmZpZWxkTGFiZWwsIGl0ZW0ubWV0YV0sXG4gICAgICAgICAgdGhpcy5zb3J0U2VhcmNoXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICBuYW1lOiBpdGVtLmZpZWxkTGFiZWwsXG4gICAgICAgIG1ldGE6IGl0ZW0ubWV0YSxcbiAgICAgICAgc2VsZWN0ZWQ6XG4gICAgICAgICAgdGhpcy5zb3J0RHJhZnQuY29sdW1uID09PSBpdGVtLmNvbHVtbiAmJlxuICAgICAgICAgICh0aGlzLnNvcnREcmFmdC5mdW5jdGlvbk5hbWUgfHwgRU1QVFlfVkFMVUUpID09PSBpdGVtLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICB0YWJsZUxhYmVsOiBpdGVtLnRhYmxlTGFiZWwsXG4gICAgICAgIHBhdGhUeXBlOiBcImNvbHVtblwiIGFzIGNvbnN0LFxuICAgICAgfSkpO1xuICB9XG4gIGdldCBzb3J0UGlja2xpc3RJdGVtcygpOiBTb3J0UGlja2xpc3RJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLnNvcnRTZWxlY3RhYmxlSXRlbXMubWFwKChpdGVtLCBpbmRleCkgPT4gKHtcbiAgICAgIGlkOiBpbmRleCArIDEsXG4gICAgICB0aXRsZTogYCR7aXRlbS50YWJsZUxhYmVsfS4ke2l0ZW0uZmllbGRMYWJlbH1gLFxuICAgICAgdGl0bGVQcmVmaXg6IGl0ZW0udGFibGVMYWJlbCxcbiAgICAgIHRpdGxlU3VmZml4OiBpdGVtLmZpZWxkTGFiZWwsXG4gICAgICB0aXRsZVByZWZpeENvbG9yOiBWSVNVQUxfU1FMX1RBQkxFX0NPTE9SLFxuICAgICAgdGl0bGVTdWZmaXhDb2xvcjogVklTVUFMX1NRTF9GSUVMRF9DT0xPUixcbiAgICAgIGJhZGdlOiBpdGVtLm1ldGEsXG4gICAgICBiYWRnZUNvbG9yOiBpdGVtLmZ1bmN0aW9uTmFtZVxuICAgICAgICA/IFBJQ0tMSVNUX0ZVTkNUSU9OX0JBREdFX0NPTE9SXG4gICAgICAgIDogUElDS0xJU1RfREFUQV9UWVBFX0JBREdFX0NPTE9SLFxuICAgICAgc2VsZWN0aW9uSWQ6IGl0ZW0uaWQsXG4gICAgICBjb2x1bW46IGl0ZW0uY29sdW1uLFxuICAgIH0pKTtcbiAgfVxuICBnZXQgc29ydFNlbGVjdGVkUGlja2xpc3RJZHMoKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zb3J0UGlja2xpc3RJdGVtcy5maW5kKFxuICAgICAgKGl0ZW0pID0+XG4gICAgICAgIGl0ZW0uY29sdW1uID09PSB0aGlzLnNvcnREcmFmdC5jb2x1bW4gJiZcbiAgICAgICAgaXRlbS5zZWxlY3Rpb25JZCA9PT1cbiAgICAgICAgdGhpcy5idWlsZFNvcnRTZWxlY3Rpb25JZChcbiAgICAgICAgICB0aGlzLnNvcnREcmFmdC5jb2x1bW4sXG4gICAgICAgICAgdGhpcy5zb3J0RHJhZnQuZnVuY3Rpb25OYW1lIHx8IEVNUFRZX1NPUlRfRlVOQ1RJT05cbiAgICAgICAgKVxuICAgICk7XG5cbiAgICByZXR1cm4gc2VsZWN0ZWQgPyBbc2VsZWN0ZWQuaWRdIDogW107XG4gIH1cbiAgZ2V0IGZpbHRlckNvbHVtblJvd3MoKTogU2VsZWN0aW9uUm93W10ge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkQ29sdW1uU2VsZWN0aW9uUm93cyhcbiAgICAgIHRoaXMuYXZhaWxhYmxlQ29sdW1ucyxcbiAgICAgIHRoaXMuZmlsdGVyRHJhZnQuY29sdW1uID8gW3RoaXMuZmlsdGVyRHJhZnQuY29sdW1uXSA6IFtdLFxuICAgICAgdGhpcy5maWx0ZXJTZWFyY2gsXG4gICAgICBmYWxzZVxuICAgICk7XG4gIH1cbiAgZ2V0IGZpbHRlck1vZGFsUGlja2xpc3RJdGVtcygpOiBDb2x1bW5QaWNrbGlzdEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRDb2x1bW5QaWNrbGlzdEl0ZW1zKHRoaXMuYXZhaWxhYmxlQ29sdW1ucyk7XG4gIH1cbiAgZ2V0IGZpbHRlck1vZGFsU2VsZWN0ZWRQaWNrbGlzdElkcygpOiBudW1iZXJbXSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRJZCA9IHRoaXMucmVzb2x2ZUNvbHVtblBpY2tsaXN0SWQodGhpcy5maWx0ZXJEcmFmdC5jb2x1bW4pO1xuICAgIHJldHVybiB0eXBlb2Ygc2VsZWN0ZWRJZCA9PT0gXCJudW1iZXJcIiAmJiBzZWxlY3RlZElkID4gMFxuICAgICAgPyBbc2VsZWN0ZWRJZF1cbiAgICAgIDogW107XG4gIH1cbiAgZ2V0IHNvcnRDb2x1bW5TdW1tYXJ5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc29ydERyYWZ0LmNvbHVtblxuICAgICAgPyB0aGlzLnJlc29sdmVTb3J0RHJhZnRMYWJlbCgpXG4gICAgICA6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LnN0YXRlcy5lbXB0eVNlbGVjdGlvbmAsXG4gICAgICAgIEZBTExCQUNLX0VNUFRZX1NFTEVDVElPTlxuICAgICAgKTtcbiAgfVxuICBnZXQgZmlsdGVyQ29sdW1uU3VtbWFyeSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmZpbHRlck1vZGFsTW9kZSA9PT0gRklMVEVSX01PREVfRE9NQUlOKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmlsdGVycy5kb21haW5MYWJlbGAsXG4gICAgICAgIFwiRXhwcmVzc2FvIGRlIGRvbWluaW9cIlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyRHJhZnQuY29sdW1uXG4gICAgICA/IHRoaXMucmVzb2x2ZUNvbHVtblBhdGgodGhpcy5maWx0ZXJEcmFmdC5jb2x1bW4pXG4gICAgICA6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LnN0YXRlcy5lbXB0eVNlbGVjdGlvbmAsXG4gICAgICAgIEZBTExCQUNLX0VNUFRZX1NFTEVDVElPTlxuICAgICAgKTtcbiAgfVxuICBnZXQgam9pblNvdXJjZVN1bW1hcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5qb2luRHJhZnQuc291cmNlQ29sdW1uXG4gICAgICA/IHRoaXMucmVzb2x2ZUNvbHVtblBhdGgodGhpcy5qb2luRHJhZnQuc291cmNlQ29sdW1uKVxuICAgICAgOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5zdGF0ZXMuZW1wdHlTZWxlY3Rpb25gLFxuICAgICAgICBGQUxMQkFDS19FTVBUWV9TRUxFQ1RJT05cbiAgICAgICk7XG4gIH1cbiAgZ2V0IGpvaW5UYXJnZXRTdW1tYXJ5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuam9pbkRyYWZ0LnRhcmdldENvbHVtblxuICAgICAgPyB0aGlzLnJlc29sdmVDb2x1bW5QYXRoKHRoaXMuam9pbkRyYWZ0LnRhcmdldENvbHVtbilcbiAgICAgIDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uc3RhdGVzLmVtcHR5U2VsZWN0aW9uYCxcbiAgICAgICAgRkFMTEJBQ0tfRU1QVFlfU0VMRUNUSU9OXG4gICAgICApO1xuICB9XG4gIGdldCBmaWx0ZXJPcGVyYXRvck9wdGlvbnMoKTogRHluYW1pY1ZpZXdCdWlsZGVyT3B0aW9uW10ge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMucmVzb2x2ZUNvbHVtbk9wdGlvbih0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbik7XG4gICAgaWYgKCFjb2x1bW4pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyT3BlcmF0b3JzRm9yQ29sdW1uKGNvbHVtbikubWFwKCh2YWx1ZSkgPT4gKHtcbiAgICAgIHZhbHVlLFxuICAgICAgdGV4dDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeFxuICAgICAgICB9LmZpbHRlcnMub3BlcmF0b3JzLiR7dmFsdWUudG9Mb3dlckNhc2UoKX1gLFxuICAgICAgICB0aGlzLmh1bWFuaXplS2V5KHZhbHVlKVxuICAgICAgKSxcbiAgICB9KSk7XG4gIH1cbiAgZ2V0IG5vcm1hbGl6ZWRGaWVsZHMoKTogRHluYW1pY1ZpZXdCdWlsZGVyRmllbGRbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5maWVsZHMubWFwKChpdGVtKSA9PlxuICAgICAgdGhpcy5ub3JtYWxpemVHZW5lcmF0ZWRGaWVsZChpdGVtKVxuICAgICk7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkU29ydERpcmVjdGlvbkl0ZW0oKTogU2VsZWN0QnV0dG9uSXRlbTxzdHJpbmc+IHwgbnVsbCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbkl0ZW1zLmZpbmQoXG4gICAgICAgIChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSB0aGlzLnNvcnREcmFmdC5kaXJlY3Rpb25cbiAgICAgICkgPz8gbnVsbFxuICAgICk7XG4gIH1cbiAgZ2V0IGZpbHRlckV4cHJlc3Npb25TdW1tYXJ5KCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZmlsdGVyTW9kYWxNb2RlID09PSBGSUxURVJfTU9ERV9ET01BSU4pIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlckRyYWZ0LmRvbWFpbkV4cHJlc3Npb24udHJpbSgpO1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmZpbHRlckRyYWZ0LmNvbHVtblxuICAgICAgPyB0aGlzLnJlc29sdmVDb2x1bW5QYXRoKHRoaXMuZmlsdGVyRHJhZnQuY29sdW1uKVxuICAgICAgOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5zdGF0ZXMuZW1wdHlTZWxlY3Rpb25gLFxuICAgICAgICBGQUxMQkFDS19FTVBUWV9TRUxFQ1RJT05cbiAgICAgICk7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSB0aGlzLmZpbHRlckRyYWZ0Lm9wZXJhdG9yXG4gICAgICA/IHRoaXMucmVzb2x2ZUZpbHRlck9wZXJhdG9yTGFiZWwodGhpcy5maWx0ZXJEcmFmdC5vcGVyYXRvcilcbiAgICAgIDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uc3RhdGVzLmVtcHR5U2VsZWN0aW9uYCxcbiAgICAgICAgRkFMTEJBQ0tfRU1QVFlfU0VMRUNUSU9OXG4gICAgICApO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5yZXNvbHZlRmlsdGVyRHJhZnREaXNwbGF5VmFsdWUoKTtcbiAgICByZXR1cm4gW2NvbHVtbiwgb3BlcmF0b3IsIHZhbHVlXS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiB8IFwiKTtcbiAgfVxuICBnZXQgZmlsdGVyQ29uZmlndXJhdGlvblN1bW1hcnlMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZpbHRlck1vZGFsTW9kZSA9PT0gRklMVEVSX01PREVfRE9NQUlOXG4gICAgICA/IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMuZG9tYWluTGFiZWxgLFxuICAgICAgICBcIkV4cHJlc3NhbyBkZSBkb21pbmlvXCJcbiAgICAgIClcbiAgICAgIDogdGhpcy5maWx0ZXJDb2x1bW5TdW1tYXJ5O1xuICB9XG4gIGdldCBmaWx0ZXJCYWNrVG9TZWxlY3Rpb25MYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uYWN0aW9ucy5iYWNrVG9TZWxlY3Rpb25gLFxuICAgICAgXCJWb2x0YXIgcGFyYSBzZWxlY2FvXCJcbiAgICApO1xuICB9XG4gIGdldCBmaWx0ZXJCYWNrVG9Db25maWd1cmF0aW9uTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmFjdGlvbnMuYmFja1RvQ29uZmlndXJhdGlvbmAsXG4gICAgICBcIlZvbHRhciBwYXJhIGNvbmZpZ3VyYWNhb1wiXG4gICAgKTtcbiAgfVxuICBnZXQgcHJldmlld0NvbHVtbnMoKTogVGFibGVDb2x1bW5bXSB7XG4gICAgY29uc3QgY29uZmlnQ29sdW1ucyA9IHRoaXMucmVzb2x2ZVByZXZpZXdDb2x1bW5zKCk7XG4gICAgcmV0dXJuIGNvbmZpZ0NvbHVtbnMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgZmllbGQ6IGl0ZW0uZmllbGQsXG4gICAgICBoZWFkZXI6IGl0ZW0uaGVhZGVyID8/IGl0ZW0uZmllbGQsXG4gICAgICB0eXBlOiAoaXRlbS50eXBlIGFzIFRhYmxlQ29sdW1uW1widHlwZVwiXSkgPz8gXCJ0ZXh0XCIsXG4gICAgfSkpO1xuICB9XG4gIGdldCBwcmV2aWV3Um93cygpOiBSb3dCYXNlW10ge1xuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMucHJldmlld0NvbHVtbnNcbiAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0uZmllbGQpXG4gICAgICAuZmlsdGVyKChmaWVsZCk6IGZpZWxkIGlzIHN0cmluZyA9PiB0eXBlb2YgZmllbGQgPT09IFwic3RyaW5nXCIpO1xuICAgIGNvbnN0IHJvd3MgPSAoKHRoaXMuY29uZmlnLnByZXZpZXc/LnJvd3MgPz8gW10pIGFzIFJvd0Jhc2VbXSkubWFwKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IG5leHQ6IFJvd0Jhc2UgPSB7fTtcbiAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICBuZXh0W2ZpZWxkXSA9IHJvd1tmaWVsZF0gPz8gRU1QVFlfVkFMVUU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH0pO1xuICAgIGlmIChyb3dzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHJvd3M7XG4gICAgfVxuICAgIGlmICghZmllbGRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogNSB9KS5tYXAoKF8sIHJvd0luZGV4KSA9PiB7XG4gICAgICBjb25zdCBuZXh0OiBSb3dCYXNlID0ge307XG4gICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgbmV4dFtmaWVsZF0gPSBgJHtmaWVsZH1fJHtyb3dJbmRleCArIDF9YDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfSk7XG4gIH1cbiAgZ2V0IHByZXZpZXdUYWJsZUNvbmZpZygpOiBUYWJsZU9wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICByb3dzOiBEWU5BTUlDX1ZJRVdfQlVJTERFUl9ERUZBVUxUX1RBQkxFX1JPV1MsXG4gICAgICBzaG93Um93c1BlclBhZ2VPcHRpb25zOiB0cnVlLFxuICAgICAgcm93c1BlclBhZ2VPcHRpb25zOiBQUkVWSUVXX1JPV1NfUEVSX1BBR0VfT1BUSU9OUyxcbiAgICAgIGVtcHR5VGl0bGU6IGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5lbXB0eS5wcmV2aWV3VGl0bGVgLFxuICAgICAgZW1wdHlTdWJ0aXRsZTogYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmVtcHR5LnByZXZpZXdUZXh0YCxcbiAgICB9IGFzIFRhYmxlT3B0aW9ucztcbiAgfVxuICBnZXQgc3FsUHJldmlldygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGdlbmVyYXRlZFNxbCA9IHRoaXMuYnVpbGRHZW5lcmF0ZWRTcWwoKTtcbiAgICBpZiAoZ2VuZXJhdGVkU3FsKSB7XG4gICAgICByZXR1cm4gZ2VuZXJhdGVkU3FsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb25maWcubWFudWFsPy5zcWwgPz8gRU1QVFlfVkFMVUU7XG4gIH1cbiAgZ2V0IHNxbFByZXZpZXdIZWlnaHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sYXlvdXRNb2RlID09PSBcInNwbGl0XCIgPyBcIjEwMCVcIiA6IFwiMjRyZW1cIjtcbiAgfVxuICBnZXQgc3FsUHJldmlld1BhbmVsSGVpZ2h0KCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmxheW91dE1vZGUgPT09IFwic3BsaXRcIlxuICAgICAgPyB0aGlzLm1lYXN1cmVkU3BsaXRQcmV2aWV3SGVpZ2h0XG4gICAgICA6IG51bGw7XG4gIH1cbiAgZ2V0IHByZXZpZXdUb2dnbGVMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uYWN0aW9ucy4ke3RoaXMucHJldmlld1Zpc2libGUgPyBcImhpZGVQcmV2aWV3XCIgOiBcInNob3dQcmV2aWV3XCJcbiAgICAgIH1gLFxuICAgICAgdGhpcy5wcmV2aWV3VmlzaWJsZSA/IFwiT2N1bHRhciBwcmV2aWV3XCIgOiBcIlZpc3VhbGl6YXIgcHJldmlld1wiXG4gICAgKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWRGaWx0ZXJNb2RlSXRlbSgpOiBTZWxlY3RCdXR0b25JdGVtPEZpbHRlck1vZGFsTW9kZT4gfCBudWxsIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5maWx0ZXJNb2RlSXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gdGhpcy5maWx0ZXJNb2RhbE1vZGUpID8/XG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICB0cmFja0J5SWQoXzogbnVtYmVyLCBpdGVtOiB7IGlkOiBzdHJpbmcgfSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGl0ZW0uaWQ7XG4gIH1cbiAgdHJhY2tCeUFycm93KF86IG51bWJlciwgaXRlbTogQnVpbGRlckZsb3dBcnJvdyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGl0ZW0uaWQ7XG4gIH1cbiAgb25MYXlvdXRNb2RlQ2hhbmdlKGl0ZW1zOiBTZWxlY3RCdXR0b25JdGVtPEJ1aWxkZXJMYXlvdXRNb2RlPltdKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9IGl0ZW1zWzBdPy52YWx1ZTtcbiAgICBpZiAobmV4dCA9PT0gXCJzdGFja2VkXCIgfHwgbmV4dCA9PT0gXCJzcGxpdFwiKSB7XG4gICAgICB0aGlzLmxheW91dE1vZGUgPSBuZXh0O1xuICAgICAgdGhpcy5zeW5jU2VsZWN0ZWRMYXlvdXRNb2RlSXRlbXMoKTtcbiAgICAgIHRoaXMuZmxvd1NlcnZpY2Uuc2NoZWR1bGVGbG93QXJyb3dSZWZyZXNoKHRoaXMuZmxvd0NvbnRleHQpO1xuICAgIH1cbiAgfVxuICB0b2dnbGVQcmV2aWV3KCk6IHZvaWQge1xuICAgIHRoaXMucHJldmlld1Zpc2libGUgPSAhdGhpcy5wcmV2aWV3VmlzaWJsZTtcbiAgICB0aGlzLmZsb3dTZXJ2aWNlLnNjaGVkdWxlRmxvd0Fycm93UmVmcmVzaCh0aGlzLmZsb3dDb250ZXh0KTtcbiAgfVxuICBvblNvcnREaXJlY3Rpb25DaGFuZ2UoaXRlbXM6IFNlbGVjdEJ1dHRvbkl0ZW08c3RyaW5nPltdKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9IGl0ZW1zWzBdPy52YWx1ZTtcbiAgICBpZiAobmV4dCkge1xuICAgICAgdGhpcy5zb3J0RHJhZnQuZGlyZWN0aW9uID0gbmV4dDtcbiAgICAgIHRoaXMuc3luY1NlbGVjdGVkU29ydERpcmVjdGlvbkl0ZW1zKCk7XG4gICAgfVxuICB9XG4gIGlzRmllbGREcm9wSW5kaWNhdG9yVmlzaWJsZShpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZHJhZ2dpbmdGaWVsZEluZGV4ICE9PSBudWxsICYmIHRoaXMuZHJhZ1ByZXZpZXdJbmRleCA9PT0gaW5kZXg7XG4gIH1cbiAgaXNGaWVsZERyb3BJbmRpY2F0b3JBdEVuZFZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZHJhZ2dpbmdGaWVsZEluZGV4ICE9PSBudWxsICYmXG4gICAgICB0aGlzLmRyYWdQcmV2aWV3SW5kZXggPT09IHRoaXMuZmllbGRJdGVtcy5sZW5ndGhcbiAgICApO1xuICB9XG4gIG9uRmllbGREcmFnU3RhcnQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZHJhZ2dpbmdGaWVsZEluZGV4ID0gaW5kZXg7XG4gICAgdGhpcy5kcmFnUHJldmlld0luZGV4ID0gdGhpcy5nZXRGaWVsZFByZXZpZXdTb3VyY2VJbmRleGVzKCkuaW5kZXhPZihpbmRleCk7XG4gIH1cbiAgb25GaWVsZERyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmICghdGFyZ2V0IHx8IHRoaXMuZHJhZ2dpbmdGaWVsZEluZGV4ID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlY3QgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qgc2hvdWxkSW5zZXJ0QWZ0ZXIgPSBldmVudC5jbGllbnRYID4gcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCAvIDI7XG4gICAgdGhpcy5kcmFnUHJldmlld0luZGV4ID0gTWF0aC5taW4oXG4gICAgICBpbmRleCArIChzaG91bGRJbnNlcnRBZnRlciA/IDEgOiAwKSxcbiAgICAgIHRoaXMuZmllbGRJdGVtcy5sZW5ndGhcbiAgICApO1xuICB9XG4gIG9uRmllbGREcm9wKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRyYWdnaW5nRmllbGRJbmRleCA9PT0gbnVsbCB8fCB0aGlzLmRyYWdQcmV2aWV3SW5kZXggPT09IG51bGwpIHtcbiAgICAgIHRoaXMuZHJhZ2dpbmdGaWVsZEluZGV4ID0gbnVsbDtcbiAgICAgIHRoaXMuZHJhZ1ByZXZpZXdJbmRleCA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByZXZpZXdJbmRleGVzID0gdGhpcy5nZXRGaWVsZFByZXZpZXdTb3VyY2VJbmRleGVzKCk7XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpZWxkcyA9IHByZXZpZXdJbmRleGVzLm1hcChcbiAgICAgIChpdGVtSW5kZXgpID0+IHRoaXMuY29uZmlnLmdlbmVyYXRlZC5maWVsZHNbaXRlbUluZGV4XVxuICAgICk7XG4gICAgdGhpcy5kcmFnZ2luZ0ZpZWxkSW5kZXggPSBudWxsO1xuICAgIHRoaXMuZHJhZ1ByZXZpZXdJbmRleCA9IG51bGw7XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIG9uRmllbGREcmFnRW5kKCk6IHZvaWQge1xuICAgIHRoaXMuZHJhZ2dpbmdGaWVsZEluZGV4ID0gbnVsbDtcbiAgICB0aGlzLmRyYWdQcmV2aWV3SW5kZXggPSBudWxsO1xuICB9XG4gIG9wZW5GaWVsZE1vZGFsKGluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9XG4gICAgICB0eXBlb2YgaW5kZXggPT09IFwibnVtYmVyXCIgPyB0aGlzLm5vcm1hbGl6ZWRGaWVsZHNbaW5kZXhdIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGRyYWZ0cyA9IHRoaXMuZ2V0T3JkZXJlZEZpZWxkRW50cmllcygpLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgIGNvbHVtbjogaXRlbS5jb2x1bW4sXG4gICAgICBhbGlhczogaXRlbS5hbGlhcz8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgd2lkdGg6IGl0ZW0ud2lkdGg/LnRyaW0oKSA/PyBFTVBUWV9WQUxVRSxcbiAgICAgIGZ1bmN0aW9uOiBpdGVtLmZ1bmN0aW9uXG4gICAgICAgID8ge1xuICAgICAgICAgIGZ1bmN0aW9uTmFtZTogaXRlbS5mdW5jdGlvbi5mdW5jdGlvbk5hbWU/LnRyaW0oKSA/PyBFTVBUWV9WQUxVRSxcbiAgICAgICAgICBhbGlhczogaXRlbS5mdW5jdGlvbi5hbGlhcz8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgICB9XG4gICAgICAgIDogbnVsbCxcbiAgICB9KSk7XG4gICAgY29uc3Qgb3BlbkF0U3RlcDogRmllbGRNb2RhbFN0ZXAgPVxuICAgICAgdHlwZW9mIGluZGV4ID09PSBcIm51bWJlclwiICYmIGN1cnJlbnQgPyBcImNvbmZpZ3VyZVwiIDogXCJzZWxlY3RcIjtcbiAgICB0aGlzLmZpZWxkTW9kYWxTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5vcGVuRmllbGRNb2RhbChkcmFmdHMsIG9wZW5BdFN0ZXApO1xuICB9XG4gIG9wZW5GaWVsZENvbmZpZ3VyYXRpb25Nb2RhbCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FuT3BlbkZpZWxkQ29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub3BlbkZpZWxkTW9kYWwoMCk7XG4gIH1cbiAgY2xvc2VGaWVsZE1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuZmllbGRNb2RhbFNlYXJjaCA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmNsb3NlRmllbGRNb2RhbCgpO1xuICB9XG4gIGdvVG9GaWVsZE1vZGFsU3RlcChzdGVwOiBGaWVsZE1vZGFsU3RlcCk6IHZvaWQge1xuICAgIGlmIChzdGVwID09PSBcInNlbGVjdFwiKSB7XG4gICAgICB0aGlzLmZpZWxkTW9kYWxTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZ29Ub0ZpZWxkTW9kYWxTdGVwKHN0ZXApO1xuICB9XG4gIGFkdmFuY2VGaWVsZE1vZGFsU3RlcCgpOiB2b2lkIHtcbiAgICB0aGlzLmdvVG9GaWVsZE1vZGFsU3RlcChcImNvbmZpZ3VyZVwiKTtcbiAgfVxuICBvbkZpZWxkTW9kYWxUaW1lbGluZVN0ZXBTZWxlY3QoZXZlbnQ6IFRpbWVsaW5lU3RlcFNlbGVjdEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5nb1RvRmllbGRNb2RhbFN0ZXAoZXZlbnQuaXRlbS5pZCA9PT0gXCJjb25maWd1cmVcIiA/IFwiY29uZmlndXJlXCIgOiBcInNlbGVjdFwiKTtcbiAgfVxuICBzZWxlY3RGaWVsZE1vZGFsQ29sdW1uKGNvbHVtbjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuc3RhdGVTZXJ2aWNlLmZpZWxkTW9kYWxEcmFmdHMuZmluZCgoaXRlbSkgPT4gaXRlbS5jb2x1bW4gPT09IGNvbHVtbik7XG4gICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgIHRoaXMucmVtb3ZlRmllbGRNb2RhbERyYWZ0KGNvbHVtbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZmllbGRNb2RhbERyYWZ0cyA9IFtcbiAgICAgIC4uLnRoaXMuc3RhdGVTZXJ2aWNlLmZpZWxkTW9kYWxEcmFmdHMsXG4gICAgICB7XG4gICAgICAgIGNvbHVtbixcbiAgICAgICAgYWxpYXM6IEVNUFRZX1ZBTFVFLFxuICAgICAgICB3aWR0aDogRU1QVFlfVkFMVUUsXG4gICAgICAgIGZ1bmN0aW9uOiBudWxsLFxuICAgICAgfSxcbiAgICBdO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmZpZWxkRnVuY3Rpb25FZGl0Q29sdW1uID0gbnVsbDtcbiAgfVxuICBzZWxlY3RBbGxGaWVsZE1vZGFsQ29sdW1ucygpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZENvbHVtbnMgPSBuZXcgU2V0KFxuICAgICAgdGhpcy5zdGF0ZVNlcnZpY2UuZmllbGRNb2RhbERyYWZ0cy5tYXAoKGl0ZW0pID0+IGl0ZW0uY29sdW1uKVxuICAgICk7XG4gICAgY29uc3Qgcm93c1RvU2VsZWN0ID0gdGhpcy5maWVsZFNlbGVjdGFibGVDb2x1bW5zLmZpbHRlcihcbiAgICAgIChpdGVtKSA9PiAhc2VsZWN0ZWRDb2x1bW5zLmhhcyhpdGVtLnZhbHVlKVxuICAgICk7XG5cbiAgICBpZiAoIXJvd3NUb1NlbGVjdC5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlU2VydmljZS5maWVsZE1vZGFsRHJhZnRzID0gW1xuICAgICAgLi4udGhpcy5zdGF0ZVNlcnZpY2UuZmllbGRNb2RhbERyYWZ0cyxcbiAgICAgIC4uLnJvd3NUb1NlbGVjdC5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgIGNvbHVtbjogaXRlbS52YWx1ZSxcbiAgICAgICAgYWxpYXM6IEVNUFRZX1ZBTFVFLFxuICAgICAgICB3aWR0aDogRU1QVFlfVkFMVUUsXG4gICAgICAgIGZ1bmN0aW9uOiBudWxsLFxuICAgICAgfSkpLFxuICAgIF07XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZmllbGRGdW5jdGlvbkVkaXRDb2x1bW4gPSBudWxsO1xuICB9XG4gIGFkZEFub3RoZXJGaWVsZEZyb21Nb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmZpZWxkTW9kYWxTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5maWVsZE1vZGFsU3RlcCA9IFwic2VsZWN0XCI7XG4gIH1cbiAgb25GaWVsZE1vZGFsU2VsZWN0ZWRJZHNDaGFuZ2UoaWRzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkQ29sdW1ucyA9IG5ldyBTZXQoXG4gICAgICBpZHNcbiAgICAgICAgLm1hcCgoaXRlbSkgPT4gdGhpcy5yZXNvbHZlQ29sdW1uUGlja2xpc3RDb2x1bW4oaXRlbSkpXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIHN0cmluZyA9PiAhIWl0ZW0pXG4gICAgKTtcbiAgICBjb25zdCBwcmVzZXJ2ZWREcmFmdHMgPSB0aGlzLnN0YXRlU2VydmljZS5maWVsZE1vZGFsRHJhZnRzLmZpbHRlcigoaXRlbSkgPT5cbiAgICAgIHNlbGVjdGVkQ29sdW1ucy5oYXMoaXRlbS5jb2x1bW4pXG4gICAgKTtcbiAgICBjb25zdCBwcmVzZXJ2ZWRDb2x1bW5zID0gbmV3IFNldChcbiAgICAgIHByZXNlcnZlZERyYWZ0cy5tYXAoKGl0ZW0pID0+IGl0ZW0uY29sdW1uKVxuICAgICk7XG4gICAgY29uc3QgYXBwZW5kZWREcmFmdHMgPSB0aGlzLmZpZWxkU2VsZWN0YWJsZUNvbHVtbnNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChpdGVtKSA9PlxuICAgICAgICAgIHNlbGVjdGVkQ29sdW1ucy5oYXMoaXRlbS52YWx1ZSkgJiYgIXByZXNlcnZlZENvbHVtbnMuaGFzKGl0ZW0udmFsdWUpXG4gICAgICApXG4gICAgICAubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICBjb2x1bW46IGl0ZW0udmFsdWUsXG4gICAgICAgIGFsaWFzOiBFTVBUWV9WQUxVRSxcbiAgICAgICAgd2lkdGg6IEVNUFRZX1ZBTFVFLFxuICAgICAgICBmdW5jdGlvbjogbnVsbCxcbiAgICAgIH0pKTtcblxuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmZpZWxkTW9kYWxEcmFmdHMgPSBbLi4ucHJlc2VydmVkRHJhZnRzLCAuLi5hcHBlbmRlZERyYWZ0c107XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXRlU2VydmljZS5maWVsZEZ1bmN0aW9uRWRpdENvbHVtbiAmJlxuICAgICAgIXNlbGVjdGVkQ29sdW1ucy5oYXModGhpcy5zdGF0ZVNlcnZpY2UuZmllbGRGdW5jdGlvbkVkaXRDb2x1bW4pXG4gICAgKSB7XG4gICAgICB0aGlzLmNhbmNlbEZpZWxkRnVuY3Rpb25FZGl0KCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnN0YXRlU2VydmljZS5maWVsZE1vZGFsRHJhZnRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zdGF0ZVNlcnZpY2UuZmllbGRNb2RhbFN0ZXAgPSBcInNlbGVjdFwiO1xuICAgIH1cbiAgfVxuICBvbkZpZWxkTW9kYWxBbGlhc0NoYW5nZShjb2x1bW46IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucGF0Y2hGaWVsZE1vZGFsRHJhZnQoY29sdW1uLCB7IGFsaWFzOiB2YWx1ZSB9KTtcbiAgfVxuICBvbkZpZWxkTW9kYWxXaWR0aENoYW5nZShjb2x1bW46IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucGF0Y2hGaWVsZE1vZGFsRHJhZnQoY29sdW1uLCB7IHdpZHRoOiB2YWx1ZSB9KTtcbiAgfVxuICByZW1vdmVGaWVsZE1vZGFsRHJhZnQoY29sdW1uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5maWVsZE1vZGFsRHJhZnRzID0gdGhpcy5zdGF0ZVNlcnZpY2UuZmllbGRNb2RhbERyYWZ0cy5maWx0ZXIoXG4gICAgICAoaXRlbSkgPT4gaXRlbS5jb2x1bW4gIT09IGNvbHVtblxuICAgICk7XG4gICAgaWYgKHRoaXMuc3RhdGVTZXJ2aWNlLmZpZWxkRnVuY3Rpb25FZGl0Q29sdW1uID09PSBjb2x1bW4pIHtcbiAgICAgIHRoaXMuY2FuY2VsRmllbGRGdW5jdGlvbkVkaXQoKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnN0YXRlU2VydmljZS5maWVsZE1vZGFsRHJhZnRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zdGF0ZVNlcnZpY2UuZmllbGRNb2RhbFN0ZXAgPSBcInNlbGVjdFwiO1xuICAgIH1cbiAgfVxuICBzdGFydEZpZWxkRnVuY3Rpb25FZGl0KGNvbHVtbjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuc3RhdGVTZXJ2aWNlLmZpZWxkTW9kYWxEcmFmdHMuZmluZCgoaXRlbSkgPT4gaXRlbS5jb2x1bW4gPT09IGNvbHVtbik7XG4gICAgaWYgKCFjdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmZpZWxkRnVuY3Rpb25FZGl0Q29sdW1uID0gY29sdW1uO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmZpZWxkRnVuY3Rpb25EcmFmdCA9IHtcbiAgICAgIGNvbHVtbixcbiAgICAgIGZ1bmN0aW9uTmFtZTogY3VycmVudC5mdW5jdGlvbj8uZnVuY3Rpb25OYW1lPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICBmdW5jdGlvbkFsaWFzOiBjdXJyZW50LmZ1bmN0aW9uPy5hbGlhcz8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgIH07XG4gIH1cbiAgY2FuY2VsRmllbGRGdW5jdGlvbkVkaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZmllbGRGdW5jdGlvbkVkaXRDb2x1bW4gPSBudWxsO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmZpZWxkRnVuY3Rpb25EcmFmdCA9IHtcbiAgICAgIGNvbHVtbjogRU1QVFlfVkFMVUUsXG4gICAgICBmdW5jdGlvbk5hbWU6IEVNUFRZX1ZBTFVFLFxuICAgICAgZnVuY3Rpb25BbGlhczogRU1QVFlfVkFMVUUsXG4gICAgfTtcbiAgfVxuICBvbkZpZWxkRnVuY3Rpb25EcmFmdE5hbWVDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZmllbGRGdW5jdGlvbkRyYWZ0LmZ1bmN0aW9uTmFtZSA9IHZhbHVlO1xuICAgIHRoaXMub25GaWVsZEZ1bmN0aW9uTmFtZUNoYW5nZSgpO1xuICB9XG4gIHNhdmVGaWVsZEZ1bmN0aW9uRWRpdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZmllbGRGdW5jdGlvbkVkaXRDb2x1bW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wYXRjaEZpZWxkTW9kYWxEcmFmdCh0aGlzLmZpZWxkRnVuY3Rpb25FZGl0Q29sdW1uLCB7XG4gICAgICBmdW5jdGlvbjogdGhpcy5idWlsZEZpZWxkRnVuY3Rpb25EcmFmdCgpLFxuICAgIH0pO1xuICAgIHRoaXMuY2FuY2VsRmllbGRGdW5jdGlvbkVkaXQoKTtcbiAgfVxuICBpc0ZpZWxkRnVuY3Rpb25FZGl0aW5nKGNvbHVtbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRGdW5jdGlvbkVkaXRDb2x1bW4gPT09IGNvbHVtbjtcbiAgfVxuICBzYXZlRmllbGQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblNhdmVGaWVsZE1vZGFsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5maWVsZHMgPSB0aGlzLnN0YXRlU2VydmljZS5maWVsZE1vZGFsRHJhZnRzLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgIGNvbHVtbjogaXRlbS5jb2x1bW4sXG4gICAgICBhbGlhczogaXRlbS5hbGlhcz8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgd2lkdGg6IGl0ZW0ud2lkdGg/LnRyaW0oKSA/PyBFTVBUWV9WQUxVRSxcbiAgICAgIGZ1bmN0aW9uOiBpdGVtLmZ1bmN0aW9uPy5mdW5jdGlvbk5hbWU/LnRyaW0oKVxuICAgICAgICA/IHtcbiAgICAgICAgICBmdW5jdGlvbk5hbWU6IGl0ZW0uZnVuY3Rpb24uZnVuY3Rpb25OYW1lLnRyaW0oKSxcbiAgICAgICAgICBhbGlhczogaXRlbS5mdW5jdGlvbi5hbGlhcz8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgICB9XG4gICAgICAgIDogbnVsbCxcbiAgICB9KSk7XG4gICAgdGhpcy5jbG9zZUZpZWxkTW9kYWwoKTtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgb3BlblNvdXJjZU1vZGFsKHN0ZXA6IFNvdXJjZU1vZGFsU3RlcCA9IFwic2VsZWN0XCIpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5vcGVuU291cmNlTW9kYWwoXG4gICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc291cmNlcyxcbiAgICAgICh0YWJsZSkgPT4gdGhpcy5yZXNvbHZlRGVmYXVsdFNvdXJjZUFsaWFzKHRhYmxlKSxcbiAgICAgIHN0ZXBcbiAgICApO1xuICB9XG4gIG9wZW5Tb3VyY2VDb25maWd1cmF0aW9uTW9kYWwoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhbk9wZW5Tb3VyY2VDb25maWd1cmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vcGVuU291cmNlTW9kYWwoXCJjb25maWd1cmVcIik7XG4gIH1cbiAgY2xvc2VTb3VyY2VNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5jbG9zZVNvdXJjZU1vZGFsKCk7XG4gIH1cbiAgZ29Ub1NvdXJjZU1vZGFsU3RlcChzdGVwOiBTb3VyY2VNb2RhbFN0ZXApOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5nb1RvU291cmNlTW9kYWxTdGVwKHN0ZXApO1xuICB9XG4gIGFkdmFuY2VTb3VyY2VNb2RhbFN0ZXAoKTogdm9pZCB7XG4gICAgdGhpcy5nb1RvU291cmNlTW9kYWxTdGVwKFwiY29uZmlndXJlXCIpO1xuICB9XG4gIG9uU291cmNlTW9kYWxUaW1lbGluZVN0ZXBTZWxlY3QoZXZlbnQ6IFRpbWVsaW5lU3RlcFNlbGVjdEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5nb1RvU291cmNlTW9kYWxTdGVwKFxuICAgICAgZXZlbnQuaXRlbS5pZCA9PT0gXCJjb25maWd1cmVcIiA/IFwiY29uZmlndXJlXCIgOiBcInNlbGVjdFwiXG4gICAgKTtcbiAgfVxuICBvblNvdXJjZU1vZGFsU2VsZWN0ZWRJZHNDaGFuZ2UoaWRzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkVGFibGVzID0gdGhpcy5yZXNvbHZlVGFibGVzRnJvbVBpY2tsaXN0SWRzKGlkcyk7XG4gICAgY29uc3QgZHJhZnRCeVRhYmxlID0gbmV3IE1hcChcbiAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNvdXJjZU1vZGFsRHJhZnRzLm1hcCgoaXRlbSkgPT4gW2l0ZW0udGFibGUsIGl0ZW1dKVxuICAgICk7XG5cbiAgICB0aGlzLnN0YXRlU2VydmljZS5zb3VyY2VNb2RhbERyYWZ0cyA9IHNlbGVjdGVkVGFibGVzLm1hcCgodGFibGUpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBkcmFmdEJ5VGFibGUuZ2V0KHRhYmxlKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGN1cnJlbnQgPz8ge1xuICAgICAgICAgIHRhYmxlLFxuICAgICAgICAgIGFsaWFzOiB0aGlzLnJlc29sdmVEZWZhdWx0U291cmNlQWxpYXModGFibGUpLFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaWYgKCF0aGlzLnN0YXRlU2VydmljZS5zb3VyY2VNb2RhbERyYWZ0cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNvdXJjZU1vZGFsU3RlcCA9IFwic2VsZWN0XCI7XG4gICAgfVxuICB9XG4gIG9uU291cmNlTW9kYWxBbGlhc0NoYW5nZSh0YWJsZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc291cmNlTW9kYWxEcmFmdHMgPSB0aGlzLnN0YXRlU2VydmljZS5zb3VyY2VNb2RhbERyYWZ0cy5tYXAoKGl0ZW0pID0+XG4gICAgICBpdGVtLnRhYmxlID09PSB0YWJsZVxuICAgICAgICA/IHtcbiAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgIGFsaWFzOiB2YWx1ZSxcbiAgICAgICAgfVxuICAgICAgICA6IGl0ZW1cbiAgICApO1xuICB9XG4gIHNhdmVTb3VyY2VNb2RhbCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3RhdGVTZXJ2aWNlLnNvdXJjZU1vZGFsRHJhZnRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzID0gdGhpcy5zdGF0ZVNlcnZpY2Uuc291cmNlTW9kYWxEcmFmdHMubWFwKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCB0YWJsZSA9IHRoaXMucmVzb2x2ZVRhYmxlT3B0aW9uKGl0ZW0udGFibGUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGFibGU6IGl0ZW0udGFibGUsXG4gICAgICAgIGFsaWFzOiBpdGVtLmFsaWFzPy50cmltKCkgfHwgdGhpcy5yZXNvbHZlRGVmYXVsdFNvdXJjZUFsaWFzKGl0ZW0udGFibGUpLCAvLyBOT1NPTkFSXG4gICAgICAgIHNjaGVtYTogdGFibGU/LnNjaGVtYSxcbiAgICAgICAgbGFiZWw6IHRhYmxlPy5kaXNwbGF5TmFtZSB8fCB0YWJsZT8udGV4dCwgLy8gTk9TT05BUlxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMuY2xvc2VTb3VyY2VNb2RhbCgpO1xuICAgIHRoaXMuYWZ0ZXJCdWlsZGVyTXV0YXRpb24oKTtcbiAgfVxuICBvcGVuU2VsZWN0aW9uTW9kYWwobW9kZTogU2VsZWN0aW9uTW9kYWxNb2RlKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3Rpb25Nb2RhbE1vZGUgPSBtb2RlO1xuICAgIHRoaXMuc2VsZWN0aW9uTW9kYWxTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICBpZiAobW9kZSA9PT0gXCJ0YWJsZXNcIikge1xuICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RhbElkcyA9IHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzLm1hcChcbiAgICAgICAgKGl0ZW0pID0+IGl0ZW0udGFibGVcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChtb2RlID09PSBcImZpZWxkc1wiKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbk1vZGFsSWRzID0gdGhpcy5ub3JtYWxpemVkRmllbGRzLm1hcCgoaXRlbSkgPT4gaXRlbS5jb2x1bW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbk1vZGFsSWRzID0gWy4uLnRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5XTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3Rpb25Nb2RhbFZpc2libGUgPSB0cnVlO1xuICB9XG4gIGNsb3NlU2VsZWN0aW9uTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3Rpb25Nb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGlvbk1vZGFsSWRzID0gW107XG4gICAgdGhpcy5zZWxlY3Rpb25Nb2RhbFNlYXJjaCA9IEVNUFRZX1ZBTFVFO1xuICB9XG4gIHRvZ2dsZVNlbGVjdGlvbk1vZGFsUm93KGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGlvbk1vZGFsSWRzID0gdGhpcy50b2dnbGVNdWx0aXBsZVZhbHVlKFxuICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RhbElkcyxcbiAgICAgIGlkXG4gICAgKTtcbiAgfVxuICBvblNlbGVjdGlvbk1vZGFsU2VsZWN0ZWRJZHNDaGFuZ2UoaWRzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uTW9kYWxJZHMgPSB0aGlzLnJlc29sdmVDb2x1bW5zRnJvbVBpY2tsaXN0SWRzKGlkcyk7XG4gIH1cbiAgb25TZWxlY3RhYmxlUm93S2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkgPT09IFwiIFwiIHx8IGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQgfCBudWxsKT8uY2xpY2soKTtcbiAgICB9XG4gIH1cbiAgY29uZmlybVNlbGVjdGlvbk1vZGFsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGFsTW9kZSA9PT0gXCJ0YWJsZXNcIikge1xuICAgICAgY29uc3QgYWxpYXNlcyA9IG5ldyBNYXAoXG4gICAgICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzLm1hcCgoaXRlbSkgPT4gW1xuICAgICAgICAgIGl0ZW0udGFibGUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWxpYXM6IGl0ZW0uYWxpYXMsXG4gICAgICAgICAgICBzY2hlbWE6IGl0ZW0uc2NoZW1hLFxuICAgICAgICAgICAgbGFiZWw6IGl0ZW0ubGFiZWwsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSlcbiAgICAgICk7XG4gICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc291cmNlcyA9ICh0aGlzLmNvbmZpZy5hdmFpbGFibGVEYXRhLnRhYmxlcyA/PyBbXSlcbiAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gdGhpcy5zZWxlY3Rpb25Nb2RhbElkcy5pbmNsdWRlcyhpdGVtLnZhbHVlKSlcbiAgICAgICAgLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgICB0YWJsZTogaXRlbS52YWx1ZSxcbiAgICAgICAgICBhbGlhczpcbiAgICAgICAgICAgIGFsaWFzZXMuZ2V0KGl0ZW0udmFsdWUpPy5hbGlhcz8udHJpbSgpIHx8IHRoaXMuYnVpbGRBbGlhc0ZvclRhYmxlKGl0ZW0pLCAvLyBOT1NPTkFSXG4gICAgICAgICAgc2NoZW1hOiBhbGlhc2VzLmdldChpdGVtLnZhbHVlKT8uc2NoZW1hID8/IGl0ZW0uc2NoZW1hLFxuICAgICAgICAgIGxhYmVsOlxuICAgICAgICAgICAgYWxpYXNlcy5nZXQoaXRlbS52YWx1ZSk/LmxhYmVsID8/XG4gICAgICAgICAgICBpdGVtLmRpc3BsYXlOYW1lID8/XG4gICAgICAgICAgICBpdGVtLnRleHQsXG4gICAgICAgIH0pKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kYWxNb2RlID09PSBcImZpZWxkc1wiKSB7XG4gICAgICBjb25zdCBmaWVsZENvbmZpZ0J5Q29sdW1uID0gbmV3IE1hcChcbiAgICAgICAgdGhpcy5ub3JtYWxpemVkRmllbGRzLm1hcCgoaXRlbSkgPT4gW2l0ZW0uY29sdW1uLCBpdGVtXSlcbiAgICAgICk7XG4gICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmllbGRzID0gdGhpcy5zZWxlY3Rpb25Nb2RhbElkcy5tYXAoXG4gICAgICAgIChjb2x1bW4pID0+IGZpZWxkQ29uZmlnQnlDb2x1bW4uZ2V0KGNvbHVtbikgPz8geyBjb2x1bW4gfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmdyb3VwQnkgPSBbLi4udGhpcy5zZWxlY3Rpb25Nb2RhbElkc107XG4gICAgfVxuICAgIHRoaXMuY2xvc2VTZWxlY3Rpb25Nb2RhbCgpO1xuICAgIHRoaXMuYWZ0ZXJCdWlsZGVyTXV0YXRpb24oKTtcbiAgfVxuICBvcGVuSm9pbk1vZGFsKGluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9XG4gICAgICB0eXBlb2YgaW5kZXggPT09IFwibnVtYmVyXCIgPyB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuam9pbnNbaW5kZXhdIDogbnVsbDtcbiAgICB0aGlzLmpvaW5Tb3VyY2VTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmpvaW5UYXJnZXRTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5vcGVuSm9pbk1vZGFsKGN1cnJlbnQsIHR5cGVvZiBpbmRleCA9PT0gXCJudW1iZXJcIiA/IGluZGV4IDogbnVsbCk7XG4gIH1cbiAgY2xvc2VKb2luTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5qb2luU291cmNlU2VhcmNoID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5qb2luVGFyZ2V0U2VhcmNoID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuY2xvc2VKb2luTW9kYWwoKTtcbiAgfVxuICBzZWxlY3RKb2luU291cmNlKGNvbHVtbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5qb2luRHJhZnQuc291cmNlQ29sdW1uID1cbiAgICAgIHRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtbiA9PT0gY29sdW1uID8gRU1QVFlfVkFMVUUgOiBjb2x1bW47XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5yZXNvbHZlQ29sdW1uT3B0aW9uKHRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtbik7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5yZXNvbHZlQ29sdW1uT3B0aW9uKHRoaXMuam9pbkRyYWZ0LnRhcmdldENvbHVtbik7XG4gICAgaWYgKHNvdXJjZT8udGFibGUgJiYgc291cmNlLnRhYmxlID09PSB0YXJnZXQ/LnRhYmxlKSB7XG4gICAgICB0aGlzLmpvaW5EcmFmdC50YXJnZXRDb2x1bW4gPSBFTVBUWV9WQUxVRTtcbiAgICB9XG4gIH1cbiAgb25Kb2luU291cmNlU2VsZWN0ZWRJZHNDaGFuZ2UoaWRzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMucmVzb2x2ZUxhc3RDb2x1bW5Gcm9tUGlja2xpc3RJZHMoaWRzKTtcblxuICAgIHRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtbiA9XG4gICAgICBjb2x1bW4gJiYgY29sdW1uID09PSB0aGlzLmpvaW5EcmFmdC5zb3VyY2VDb2x1bW4gPyBFTVBUWV9WQUxVRSA6IGNvbHVtbiA/PyBFTVBUWV9WQUxVRTtcblxuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMucmVzb2x2ZUNvbHVtbk9wdGlvbih0aGlzLmpvaW5EcmFmdC5zb3VyY2VDb2x1bW4pO1xuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMucmVzb2x2ZUNvbHVtbk9wdGlvbih0aGlzLmpvaW5EcmFmdC50YXJnZXRDb2x1bW4pO1xuICAgIGlmIChzb3VyY2U/LnRhYmxlICYmIHNvdXJjZS50YWJsZSA9PT0gdGFyZ2V0Py50YWJsZSkge1xuICAgICAgdGhpcy5qb2luRHJhZnQudGFyZ2V0Q29sdW1uID0gRU1QVFlfVkFMVUU7XG4gICAgfVxuICB9XG4gIHNlbGVjdEpvaW5UYXJnZXQoY29sdW1uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmpvaW5EcmFmdC50YXJnZXRDb2x1bW4gPVxuICAgICAgdGhpcy5qb2luRHJhZnQudGFyZ2V0Q29sdW1uID09PSBjb2x1bW4gPyBFTVBUWV9WQUxVRSA6IGNvbHVtbjtcbiAgfVxuICBvbkpvaW5UYXJnZXRTZWxlY3RlZElkc0NoYW5nZShpZHM6IG51bWJlcltdKTogdm9pZCB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5yZXNvbHZlTGFzdENvbHVtbkZyb21QaWNrbGlzdElkcyhpZHMpO1xuICAgIHRoaXMuam9pbkRyYWZ0LnRhcmdldENvbHVtbiA9XG4gICAgICBjb2x1bW4gJiYgY29sdW1uID09PSB0aGlzLmpvaW5EcmFmdC50YXJnZXRDb2x1bW4gPyBFTVBUWV9WQUxVRSA6IGNvbHVtbiA/PyBFTVBUWV9WQUxVRTtcbiAgfVxuICBzYXZlSm9pbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FuU2F2ZUpvaW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV4dDogRHluYW1pY1ZpZXdCdWlsZGVySm9pbiA9IHtcbiAgICAgIHNvdXJjZUNvbHVtbjogdGhpcy5qb2luRHJhZnQuc291cmNlQ29sdW1uLFxuICAgICAgdGFyZ2V0Q29sdW1uOiB0aGlzLmpvaW5EcmFmdC50YXJnZXRDb2x1bW4sXG4gICAgICBvcGVyYXRvcjogdGhpcy5qb2luRHJhZnQub3BlcmF0b3IsXG4gICAgfTtcbiAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLmNvbmZpZy5nZW5lcmF0ZWQuam9pbnNdO1xuICAgIGlmICh0aGlzLmpvaW5FZGl0SW5kZXggPT09IG51bGwpIHtcbiAgICAgIGl0ZW1zLnB1c2gobmV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zW3RoaXMuam9pbkVkaXRJbmRleF0gPSBuZXh0O1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuam9pbnMgPSB0aGlzLmRlZHVwbGljYXRlQnlLZXkoaXRlbXMsIChpdGVtKSA9PlxuICAgICAgW2l0ZW0uc291cmNlQ29sdW1uLCBpdGVtLnRhcmdldENvbHVtbiwgaXRlbS5vcGVyYXRvcl0uam9pbihcInxcIilcbiAgICApO1xuICAgIHRoaXMuY2xvc2VKb2luTW9kYWwoKTtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgb3BlblNvcnRNb2RhbChpbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQgPVxuICAgICAgdHlwZW9mIGluZGV4ID09PSBcIm51bWJlclwiID8gdGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvcnRpbmdbaW5kZXhdIDogbnVsbDtcbiAgICB0aGlzLnNvcnRTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5vcGVuU29ydE1vZGFsKGN1cnJlbnQsIHR5cGVvZiBpbmRleCA9PT0gXCJudW1iZXJcIiA/IGluZGV4IDogbnVsbCk7XG4gIH1cbiAgY2xvc2VTb3J0TW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5zb3J0U2VhcmNoID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuY2xvc2VTb3J0TW9kYWwoKTtcbiAgfVxuICBzZWxlY3RTb3J0Q29sdW1uKHNvcnRTZWxlY3Rpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9IHRoaXMucGFyc2VTb3J0U2VsZWN0aW9uSWQoc29ydFNlbGVjdGlvbklkKTtcbiAgICBjb25zdCBpc1NhbWVTZWxlY3Rpb24gPVxuICAgICAgdGhpcy5zb3J0RHJhZnQuY29sdW1uID09PSBuZXh0LmNvbHVtbiAmJlxuICAgICAgKHRoaXMuc29ydERyYWZ0LmZ1bmN0aW9uTmFtZSB8fCBFTVBUWV9WQUxVRSkgPT09IG5leHQuZnVuY3Rpb25OYW1lO1xuXG4gICAgdGhpcy5zb3J0RHJhZnQuY29sdW1uID0gaXNTYW1lU2VsZWN0aW9uID8gRU1QVFlfVkFMVUUgOiBuZXh0LmNvbHVtbjtcbiAgICB0aGlzLnNvcnREcmFmdC5mdW5jdGlvbk5hbWUgPSBpc1NhbWVTZWxlY3Rpb25cbiAgICAgID8gRU1QVFlfVkFMVUVcbiAgICAgIDogbmV4dC5mdW5jdGlvbk5hbWU7XG4gIH1cbiAgb25Tb3J0U2VsZWN0ZWRJZHNDaGFuZ2UoaWRzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkSWQgPSBpZHMuYXQoLTEpO1xuICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IHRoaXMuc29ydFBpY2tsaXN0SXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gc2VsZWN0ZWRJZCk7XG5cbiAgICBpZiAoIXNlbGVjdGVkSXRlbSkge1xuICAgICAgdGhpcy5zb3J0RHJhZnQuY29sdW1uID0gRU1QVFlfVkFMVUU7XG4gICAgICB0aGlzLnNvcnREcmFmdC5mdW5jdGlvbk5hbWUgPSBFTVBUWV9WQUxVRTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdFNvcnRDb2x1bW4oc2VsZWN0ZWRJdGVtLnNlbGVjdGlvbklkKTtcbiAgfVxuICBzYXZlU29ydCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FuU2F2ZVNvcnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV4dDogRHluYW1pY1ZpZXdCdWlsZGVyU29ydCA9IHtcbiAgICAgIGNvbHVtbjogdGhpcy5zb3J0RHJhZnQuY29sdW1uLFxuICAgICAgZnVuY3Rpb25OYW1lOiB0aGlzLnNvcnREcmFmdC5mdW5jdGlvbk5hbWUgfHwgdW5kZWZpbmVkLFxuICAgICAgZGlyZWN0aW9uOiB0aGlzLnNvcnREcmFmdC5kaXJlY3Rpb24sXG4gICAgfTtcbiAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc29ydGluZ107XG4gICAgaWYgKHRoaXMuc29ydEVkaXRJbmRleCA9PT0gbnVsbCkge1xuICAgICAgaXRlbXMucHVzaChuZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXNbdGhpcy5zb3J0RWRpdEluZGV4XSA9IG5leHQ7XG4gICAgfVxuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3J0aW5nID0gdGhpcy5kZWR1cGxpY2F0ZUJ5S2V5KGl0ZW1zLCAoaXRlbSkgPT5cbiAgICAgIFtpdGVtLmNvbHVtbiwgaXRlbS5mdW5jdGlvbk5hbWUgPz8gRU1QVFlfVkFMVUUsIGl0ZW0uZGlyZWN0aW9uXS5qb2luKFwifFwiKVxuICAgICk7XG4gICAgdGhpcy5jbG9zZVNvcnRNb2RhbCgpO1xuICAgIHRoaXMuYWZ0ZXJCdWlsZGVyTXV0YXRpb24oKTtcbiAgfVxuICBvcGVuRmlsdGVyTW9kYWwoaW5kZXg/OiBudW1iZXIpOiB2b2lkIHsgLy8gTk9TT05BUiAtIGNvbXBsZXhpdHk6IGV4dHJhY3Rpb24gd291bGQgcmlzayBiZWhhdmlvciBjaGFuZ2VcbiAgICBjb25zdCBjdXJyZW50ID1cbiAgICAgIHR5cGVvZiBpbmRleCA9PT0gXCJudW1iZXJcIiA/IHRoaXMuY29uZmlnLmdlbmVyYXRlZC5maWx0ZXJzW2luZGV4XSA6IG51bGw7XG4gICAgdGhpcy5maWx0ZXJTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5vcGVuRmlsdGVyTW9kYWwoY3VycmVudCwgdHlwZW9mIGluZGV4ID09PSBcIm51bWJlclwiID8gaW5kZXggOiBudWxsKTtcbiAgICB0aGlzLnN5bmNTZWxlY3RlZEZpbHRlck1vZGVJdGVtcygpO1xuICB9XG4gIGNsb3NlRmlsdGVyTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5jbG9zZUZpbHRlck1vZGFsKCk7XG4gICAgdGhpcy5zeW5jU2VsZWN0ZWRGaWx0ZXJNb2RlSXRlbXMoKTtcbiAgfVxuICBzZWxlY3RGaWx0ZXJDb2x1bW4oY29sdW1uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbiA9XG4gICAgICB0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbiA9PT0gY29sdW1uID8gRU1QVFlfVkFMVUUgOiBjb2x1bW47XG4gICAgdGhpcy5yZXNldEZpbHRlckRyYWZ0VmFsdWVTdGF0ZSgpO1xuICB9XG4gIG9uRmlsdGVyTW9kYWxTZWxlY3RlZElkc0NoYW5nZShpZHM6IG51bWJlcltdKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dFNlbGVjdGVkSWQgPSBpZHMuYXQoLTEpO1xuICAgIGNvbnN0IG5leHRDb2x1bW4gPVxuICAgICAgdHlwZW9mIG5leHRTZWxlY3RlZElkID09PSBcIm51bWJlclwiXG4gICAgICAgID8gdGhpcy5yZXNvbHZlQ29sdW1uUGlja2xpc3RDb2x1bW4obmV4dFNlbGVjdGVkSWQpID8/IEVNUFRZX1ZBTFVFXG4gICAgICAgIDogRU1QVFlfVkFMVUU7XG5cbiAgICB0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbiA9IG5leHRDb2x1bW47XG4gICAgdGhpcy5yZXNldEZpbHRlckRyYWZ0VmFsdWVTdGF0ZSgpO1xuICB9XG4gIHByaXZhdGUgcmVzZXRGaWx0ZXJEcmFmdFZhbHVlU3RhdGUoKTogdm9pZCB7XG4gICAgY29uc3QgZmlyc3RPcGVyYXRvciA9XG4gICAgICB0aGlzLmZpbHRlck9wZXJhdG9yT3B0aW9uc1swXT8udmFsdWUgPz8gREVGQVVMVF9GSUxURVJfT1BFUkFUT1I7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZmlsdGVyRHJhZnQub3BlcmF0b3IgPSBmaXJzdE9wZXJhdG9yO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmZpbHRlckRyYWZ0LnZhbHVlID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZmlsdGVyRHJhZnQudmFsdWVzVGV4dCA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmZpbHRlckRyYWZ0LmJldHdlZW5TdGFydCA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmZpbHRlckRyYWZ0LmJldHdlZW5FbmQgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5maWx0ZXJEcmFmdC5wYXJhbWV0ZXJOYW1lID0gRU1QVFlfVkFMVUU7XG4gIH1cbiAgZ29Ub0ZpbHRlck1vZGFsU3RlcChzdGVwOiBGaWx0ZXJNb2RhbFN0ZXApOiB2b2lkIHtcbiAgICBpZiAoc3RlcCA9PT0gXCJzZWxlY3RcIikge1xuICAgICAgdGhpcy5maWx0ZXJTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZ29Ub0ZpbHRlck1vZGFsU3RlcChzdGVwLCB0aGlzLmZpbHRlck1vZGFsQ2FuUHJvY2VlZCwgdGhpcy5maWx0ZXJNb2RhbENhblJldmlldyk7XG4gIH1cbiAgYWR2YW5jZUZpbHRlck1vZGFsU3RlcCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5maWx0ZXJNb2RhbFNlbGVjdGlvblN0ZXBBY3RpdmUpIHtcbiAgICAgIHRoaXMuZ29Ub0ZpbHRlck1vZGFsU3RlcChcImNvbmZpZ3VyZVwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWx0ZXJNb2RhbENvbmZpZ3VyYXRpb25TdGVwQWN0aXZlKSB7XG4gICAgICB0aGlzLmdvVG9GaWx0ZXJNb2RhbFN0ZXAoXCJyZXZpZXdcIik7XG4gICAgfVxuICB9XG4gIG9uRmlsdGVyVmFsdWVUeXBlQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyRHJhZnQudmFsdWUgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlc1RleHQgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LmJldHdlZW5TdGFydCA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuZmlsdGVyRHJhZnQuYmV0d2VlbkVuZCA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuZmlsdGVyRHJhZnQucGFyYW1ldGVyTmFtZSA9IEVNUFRZX1ZBTFVFO1xuICB9XG4gIG9uRmlsdGVyT3BlcmF0b3JDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJEcmFmdC52YWx1ZSA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuZmlsdGVyRHJhZnQudmFsdWVzVGV4dCA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuZmlsdGVyRHJhZnQuYmV0d2VlblN0YXJ0ID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5maWx0ZXJEcmFmdC5iZXR3ZWVuRW5kID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5maWx0ZXJEcmFmdC5wYXJhbWV0ZXJOYW1lID0gRU1QVFlfVkFMVUU7XG5cbiAgICBpZiAoIXRoaXMuZmlsdGVyTmVlZHNWYWx1ZSkge1xuICAgICAgdGhpcy5maWx0ZXJEcmFmdC52YWx1ZVR5cGUgPSBERUZBVUxUX0ZJTFRFUl9WQUxVRV9UWVBFO1xuICAgIH1cbiAgfVxuICBvbkZpbHRlck1vZGVDaGFuZ2UobW9kZTogRmlsdGVyTW9kYWxNb2RlKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZmlsdGVyTW9kYWxNb2RlID0gbW9kZTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5maWx0ZXJEcmFmdC5tb2RlID0gbW9kZTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5maWx0ZXJEcmFmdC5jb2x1bW4gPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5maWx0ZXJEcmFmdC5vcGVyYXRvciA9IERFRkFVTFRfRklMVEVSX09QRVJBVE9SO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmZpbHRlckRyYWZ0LnZhbHVlVHlwZSA9IERFRkFVTFRfRklMVEVSX1ZBTFVFX1RZUEU7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZmlsdGVyRHJhZnQudmFsdWUgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5maWx0ZXJEcmFmdC52YWx1ZXNUZXh0ID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZmlsdGVyRHJhZnQuYmV0d2VlblN0YXJ0ID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZmlsdGVyRHJhZnQuYmV0d2VlbkVuZCA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmZpbHRlckRyYWZ0LnBhcmFtZXRlck5hbWUgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5maWx0ZXJEcmFmdC5kb21haW5FeHByZXNzaW9uID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuZmlsdGVyTW9kYWxTdGVwID0gXCJzZWxlY3RcIjtcbiAgICB0aGlzLnN5bmNTZWxlY3RlZEZpbHRlck1vZGVJdGVtcygpO1xuICB9XG4gIG9uRmlsdGVyTW9kYWxUaW1lbGluZVN0ZXBTZWxlY3QoZXZlbnQ6IFRpbWVsaW5lU3RlcFNlbGVjdEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50Lml0ZW0uaWQgPT09IFwicmV2aWV3XCIpIHtcbiAgICAgIHRoaXMuZ29Ub0ZpbHRlck1vZGFsU3RlcChcInJldmlld1wiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmdvVG9GaWx0ZXJNb2RhbFN0ZXAoZXZlbnQuaXRlbS5pZCA9PT0gXCJjb25maWd1cmVcIiA/IFwiY29uZmlndXJlXCIgOiBcInNlbGVjdFwiKTtcbiAgfVxuICBzYXZlRmlsdGVyKCk6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLmJ1aWxkRmlsdGVyRnJvbURyYWZ0KCk7XG5cbiAgICBpZiAoIW5leHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmlsdGVyc107XG4gICAgaWYgKHRoaXMuZmlsdGVyRWRpdEluZGV4ID09PSBudWxsKSB7XG4gICAgICBpdGVtcy5wdXNoKG5leHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtc1t0aGlzLmZpbHRlckVkaXRJbmRleF0gPSBuZXh0O1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmlsdGVycyA9IGl0ZW1zO1xuICAgIHRoaXMuY2xvc2VGaWx0ZXJNb2RhbCgpO1xuICAgIHRoaXMuYWZ0ZXJCdWlsZGVyTXV0YXRpb24oKTtcbiAgfVxuICBvblNvdXJjZUFsaWFzQ2hhbmdlKGluZGV4OiBudW1iZXIsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvdXJjZXNbaW5kZXhdO1xuICAgIGlmICghY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0YWJsZSA9IHRoaXMucmVzb2x2ZVRhYmxlT3B0aW9uKGN1cnJlbnQudGFibGUpO1xuICAgIGN1cnJlbnQuYWxpYXMgPVxuICAgICAgdmFsdWUudHJpbSgpIHx8ICh0YWJsZSA/IHRoaXMuYnVpbGRBbGlhc0ZvclRhYmxlKHRhYmxlKSA6IGN1cnJlbnQuYWxpYXMpO1xuICAgIHRoaXMuZW1pdENvbmZpZ0NoYW5nZSgpO1xuICAgIHRoaXMuZmxvd1NlcnZpY2Uuc2NoZWR1bGVGbG93QXJyb3dSZWZyZXNoKHRoaXMuZmxvd0NvbnRleHQpO1xuICB9XG4gIHJlbW92ZVNvdXJjZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvdXJjZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgcmVtb3ZlSm9pbihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmpvaW5zLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIHJlbW92ZUdyb3VwQnkoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5LnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIHJlbW92ZUZpZWxkKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmllbGRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIHJlbW92ZVNvcnQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3J0aW5nLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIHJlbW92ZUZpbHRlcihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpbHRlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgY2xlYXJTb3VyY2VzKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzID0gW107XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIGNsZWFySm9pbnMoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmpvaW5zID0gW107XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIGNsZWFyR3JvdXBCeSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZ3JvdXBCeSA9IFtdO1xuICAgIHRoaXMuYWZ0ZXJCdWlsZGVyTXV0YXRpb24oKTtcbiAgfVxuICBjbGVhckZpZWxkcygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmllbGRzID0gW107XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIGNsZWFyU29ydGluZygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc29ydGluZyA9IFtdO1xuICAgIHRoaXMuYWZ0ZXJCdWlsZGVyTXV0YXRpb24oKTtcbiAgfVxuICBjbGVhckZpbHRlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpbHRlcnMgPSBbXTtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgaGFuZGxlU2F2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNhbml0aXplQnVpbGRlcigpO1xuICAgIHRoaXMuc2F2ZS5lbWl0KGNyZWF0ZUR5bmFtaWNWaWV3QnVpbGRlckNvbmZpZyh0aGlzLmNvbmZpZykpO1xuICB9XG4gIHByaXZhdGUgYWZ0ZXJCdWlsZGVyTXV0YXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zYW5pdGl6ZUJ1aWxkZXIoKTtcbiAgICB0aGlzLmVtaXRDb25maWdDaGFuZ2UoKTtcbiAgICB0aGlzLmZsb3dTZXJ2aWNlLnNjaGVkdWxlRmxvd0Fycm93UmVmcmVzaCh0aGlzLmZsb3dDb250ZXh0KTtcbiAgfVxuICBwcml2YXRlIGVtaXRDb25maWdDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWdDaGFuZ2UuZW1pdChjcmVhdGVEeW5hbWljVmlld0J1aWxkZXJDb25maWcodGhpcy5jb25maWcpKTtcbiAgfVxuICBwcml2YXRlIHNhbml0aXplQnVpbGRlcigpOiB2b2lkIHtcbiAgICBjb25zdCB0YWJsZXNCeUlkID0gbmV3IE1hcChcbiAgICAgICh0aGlzLmNvbmZpZy5hdmFpbGFibGVEYXRhLnRhYmxlcyA/PyBbXSkubWFwKChpdGVtKSA9PiBbaXRlbS52YWx1ZSwgaXRlbV0pXG4gICAgKTtcbiAgICBjb25zdCBzZWxlY3RlZFNvdXJjZXMgPSB0aGlzLmRlZHVwbGljYXRlQnlLZXkoXG4gICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc291cmNlcy5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICAgIHRhYmxlc0J5SWQuaGFzKGl0ZW0udGFibGUpXG4gICAgICApLFxuICAgICAgKGl0ZW0pID0+IGl0ZW0udGFibGVcbiAgICApLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgIHRhYmxlOiBpdGVtLnRhYmxlLFxuICAgICAgYWxpYXM6XG4gICAgICAgIGl0ZW0uYWxpYXM/LnRyaW0oKSB8fFxuICAgICAgICB0aGlzLmJ1aWxkQWxpYXNGb3JUYWJsZShcbiAgICAgICAgICB0YWJsZXNCeUlkLmdldChpdGVtLnRhYmxlKSBhcyBEeW5hbWljVmlld0J1aWxkZXJUYWJsZU9wdGlvblxuICAgICAgICApLFxuICAgICAgc2NoZW1hOiBpdGVtLnNjaGVtYSA/PyB0YWJsZXNCeUlkLmdldChpdGVtLnRhYmxlKT8uc2NoZW1hLFxuICAgICAgbGFiZWw6XG4gICAgICAgIGl0ZW0ubGFiZWwgPz9cbiAgICAgICAgdGFibGVzQnlJZC5nZXQoaXRlbS50YWJsZSk/LmRpc3BsYXlOYW1lID8/XG4gICAgICAgIHRhYmxlc0J5SWQuZ2V0KGl0ZW0udGFibGUpPy50ZXh0LFxuICAgIH0pKTtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc291cmNlcyA9IHNlbGVjdGVkU291cmNlcztcbiAgICBjb25zdCBzZWxlY3RlZFRhYmxlSWRzID0gbmV3IFNldChzZWxlY3RlZFNvdXJjZXMubWFwKChpdGVtKSA9PiBpdGVtLnRhYmxlKSk7XG4gICAgY29uc3QgYXZhaWxhYmxlQ29sdW1ucyA9ICh0aGlzLmNvbmZpZy5hdmFpbGFibGVEYXRhLmNvbHVtbnMgPz8gW10pLmZpbHRlcihcbiAgICAgIChpdGVtKSA9PiBzZWxlY3RlZFRhYmxlSWRzLmhhcyhpdGVtLnRhYmxlKVxuICAgICk7XG4gICAgY29uc3QgYXZhaWxhYmxlQ29sdW1uTWFwID0gbmV3IE1hcChcbiAgICAgIGF2YWlsYWJsZUNvbHVtbnMubWFwKChpdGVtKSA9PiBbaXRlbS52YWx1ZSwgaXRlbV0pXG4gICAgKTtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZ3JvdXBCeSA9IHRoaXMuZGVkdXBsaWNhdGVCeUtleShcbiAgICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5LmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBhdmFpbGFibGVDb2x1bW5NYXAuZ2V0KGl0ZW0pO1xuICAgICAgICByZXR1cm4gISFjb2x1bW4gJiYgY29sdW1uLmlzQWdncmVnYXRhYmxlICE9PSBmYWxzZTtcbiAgICAgIH0pLFxuICAgICAgKGl0ZW0pID0+IGl0ZW1cbiAgICApO1xuICAgIGNvbnN0IGdyb3VwQnlTZXQgPSBuZXcgU2V0KHRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5KTtcbiAgICBjb25zdCBub3JtYWxpemVkRmllbGRzID0gdGhpcy5tZXJnZUxlZ2FjeUZ1bmN0aW9uc0ludG9GaWVsZHMoXG4gICAgICB0aGlzLm5vcm1hbGl6ZWRGaWVsZHMsXG4gICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZnVuY3Rpb25zXG4gICAgKTtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmllbGRzID0gdGhpcy5kZWR1cGxpY2F0ZUJ5S2V5KFxuICAgICAgbm9ybWFsaXplZEZpZWxkcy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gYXZhaWxhYmxlQ29sdW1uTWFwLmdldChpdGVtLmNvbHVtbik7XG4gICAgICAgIGlmICghY29sdW1uKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jb25maWcuZ2VuZXJhdGVkLmdyb3VwQnkubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdyb3VwQnlTZXQuaGFzKGl0ZW0uY29sdW1uKSB8fCAoISFpdGVtLmZ1bmN0aW9uPy5mdW5jdGlvbk5hbWUgJiYgY29sdW1uLmlzQWdncmVnYXRhYmxlICE9PSBmYWxzZSk7XG4gICAgICB9KSxcbiAgICAgIChpdGVtKSA9PiBgJHtpdGVtLmNvbHVtbn18JHtpdGVtLmZ1bmN0aW9uPy5mdW5jdGlvbk5hbWUgPz8gRU1QVFlfVkFMVUV9YFxuICAgICk7XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZ1bmN0aW9ucyA9IHRoaXMuZXh0cmFjdEZ1bmN0aW9uc0Zyb21GaWVsZHMoXG4gICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmllbGRzLm1hcCgoaXRlbSkgPT4gdGhpcy5ub3JtYWxpemVHZW5lcmF0ZWRGaWVsZChpdGVtKSlcbiAgICApO1xuICAgIGNvbnN0IHNvcnRBbGxvd2VkID0gbmV3IFNldChcbiAgICAgIHRoaXMuc29ydFNlbGVjdGFibGVJdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0uaWQpXG4gICAgKTtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc29ydGluZyA9IHRoaXMuZGVkdXBsaWNhdGVCeUtleShcbiAgICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3J0aW5nLmZpbHRlcigoaXRlbSkgPT5cbiAgICAgICAgc29ydEFsbG93ZWQuaGFzKFxuICAgICAgICAgIHRoaXMuYnVpbGRTb3J0U2VsZWN0aW9uSWQoaXRlbS5jb2x1bW4sIGl0ZW0uZnVuY3Rpb25OYW1lID8/IEVNUFRZX1ZBTFVFKVxuICAgICAgICApXG4gICAgICApLFxuICAgICAgKGl0ZW0pID0+IGAke2l0ZW0uY29sdW1ufXwke2l0ZW0uZnVuY3Rpb25OYW1lID8/IEVNUFRZX1ZBTFVFfXwke2l0ZW0uZGlyZWN0aW9ufWBcbiAgICApO1xuICAgIGlmIChzZWxlY3RlZFNvdXJjZXMubGVuZ3RoIDwgMikge1xuICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmpvaW5zID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5qb2lucyA9IHRoaXMuZGVkdXBsaWNhdGVCeUtleShcbiAgICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmpvaW5zLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGF2YWlsYWJsZUNvbHVtbk1hcC5nZXQoaXRlbS5zb3VyY2VDb2x1bW4pO1xuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGF2YWlsYWJsZUNvbHVtbk1hcC5nZXQoaXRlbS50YXJnZXRDb2x1bW4pO1xuICAgICAgICAgIHJldHVybiAhIXNvdXJjZSAmJiAhIXRhcmdldCAmJiBzb3VyY2UudGFibGUgIT09IHRhcmdldC50YWJsZTtcbiAgICAgICAgfSksXG4gICAgICAgIChpdGVtKSA9PiBgJHtpdGVtLnNvdXJjZUNvbHVtbn18JHtpdGVtLnRhcmdldENvbHVtbn18JHtpdGVtLm9wZXJhdG9yfWBcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5maWx0ZXJzID0gdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpbHRlcnMuZmlsdGVyKFxuICAgICAgKGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKGl0ZW0udmFsdWVUeXBlID09PSBGSUxURVJfTU9ERV9ET01BSU4pIHtcbiAgICAgICAgICByZXR1cm4gISFpdGVtLmRvbWFpbkV4cHJlc3Npb24/LnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXZhaWxhYmxlQ29sdW1uTWFwLmhhcyhpdGVtLmNvbHVtbik7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVQcmV2aWV3Q29sdW1ucygpOiBQcmV2aWV3Q29sdW1uTGlrZVtdIHtcbiAgICBjb25zdCBwcmV2aWV3Q29sdW1ucyA9IChcbiAgICAgICh0aGlzLmNvbmZpZy5wcmV2aWV3Py5jb2x1bW5zID8/IFtdKSBhcyBQcmV2aWV3Q29sdW1uTGlrZVtdXG4gICAgKVxuICAgICAgLmZpbHRlcigoaXRlbSkgPT4gISFpdGVtPy5maWVsZClcbiAgICAgIC5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgIGZpZWxkOiBpdGVtLmZpZWxkLFxuICAgICAgICBoZWFkZXI6IGl0ZW0uaGVhZGVyID8/IGl0ZW0uZmllbGQsXG4gICAgICAgIHR5cGU6IGl0ZW0udHlwZSxcbiAgICAgIH0pKTtcbiAgICBpZiAocHJldmlld0NvbHVtbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gcHJldmlld0NvbHVtbnM7XG4gICAgfVxuICAgIGNvbnN0IGdlbmVyYXRlZENvbHVtbnMgPSBbXG4gICAgICAuLi50aGlzLm5vcm1hbGl6ZWRGaWVsZHMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICBmaWVsZDpcbiAgICAgICAgICBpdGVtLmZ1bmN0aW9uPy5hbGlhcz8udHJpbSgpIHx8IC8vIE5PU09OQVJcbiAgICAgICAgICBpdGVtLmFsaWFzPy50cmltKCkgfHwgLy8gTk9TT05BUlxuICAgICAgICAgIGl0ZW0uY29sdW1uLFxuICAgICAgICBoZWFkZXI6XG4gICAgICAgICAgaXRlbS5mdW5jdGlvbj8uYWxpYXM/LnRyaW0oKSB8fCAvLyBOT1NPTkFSXG4gICAgICAgICAgaXRlbS5hbGlhcz8udHJpbSgpIHx8IC8vIE5PU09OQVJcbiAgICAgICAgICAoaXRlbS5mdW5jdGlvblxuICAgICAgICAgICAgPyBgJHt0aGlzLnJlc29sdmVGdW5jdGlvbkxhYmVsKGl0ZW0uZnVuY3Rpb24uZnVuY3Rpb25OYW1lKX0gJHt0aGlzLnJlc29sdmVDb2x1bW5MYWJlbChpdGVtLmNvbHVtbil9YFxuICAgICAgICAgICAgOiB0aGlzLnJlc29sdmVDb2x1bW5MYWJlbChpdGVtLmNvbHVtbikpLFxuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgIH0pKSxcbiAgICBdO1xuICAgIHJldHVybiB0aGlzLmRlZHVwbGljYXRlQnlLZXkoZ2VuZXJhdGVkQ29sdW1ucywgKGl0ZW0pID0+IGl0ZW0uZmllbGQpO1xuICB9XG4gIHByaXZhdGUgYnVpbGRUYWJsZVNlbGVjdGlvblJvd3MoXG4gICAgc2VsZWN0ZWRJZHM6IHN0cmluZ1tdLFxuICAgIHNlYXJjaDogc3RyaW5nXG4gICk6IFNlbGVjdGlvblJvd1tdIHtcbiAgICByZXR1cm4gKHRoaXMuY29uZmlnLmF2YWlsYWJsZURhdGEudGFibGVzID8/IFtdKVxuICAgICAgLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IHRoaXMucmVzb2x2ZVRhYmxlRGlzcGxheVBhcnRzKGl0ZW0udmFsdWUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlkOiBpdGVtLnZhbHVlLFxuICAgICAgICAgIG5hbWU6IHBhcnRzLnRhYmxlTGFiZWwsXG4gICAgICAgICAgZGJMYWJlbDogcGFydHMuZGJMYWJlbCxcbiAgICAgICAgICB0YWJsZUxhYmVsOiBwYXJ0cy50YWJsZUxhYmVsLFxuICAgICAgICAgIHBhdGhUeXBlOiBcInRhYmxlXCIgYXMgY29uc3QsXG4gICAgICAgICAgcHJlZml4OiBwYXJ0cy5kYkxhYmVsLFxuICAgICAgICAgIG1ldGE6IGl0ZW0uZGVzY3JpcHRpb24gfHwgaXRlbS5kaXNwbGF5TmFtZSB8fCBFTVBUWV9WQUxVRSwgLy8gTk9TT05BUlxuICAgICAgICAgIG5vdGU6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgc2VsZWN0ZWQ6IHNlbGVjdGVkSWRzLmluY2x1ZGVzKGl0ZW0udmFsdWUpLFxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgICB0aGlzLm1hdGNoZXNTZWFyY2goW2l0ZW0ucHJlZml4ID8/IEVNUFRZX1ZBTFVFLCBpdGVtLm5hbWUsIGl0ZW0ubWV0YSwgaXRlbS5ub3RlID8/IEVNUFRZX1ZBTFVFXSwgc2VhcmNoKVxuICAgICAgKTtcbiAgfVxuICBwcml2YXRlIGJ1aWxkQ29sdW1uU2VsZWN0aW9uUm93cyhcbiAgICBpdGVtczogRHluYW1pY1ZpZXdCdWlsZGVyQ29sdW1uT3B0aW9uW10sXG4gICAgc2VsZWN0ZWRJZHM6IHN0cmluZ1tdLFxuICAgIHNlYXJjaDogc3RyaW5nLFxuICAgIG11bHRpcGxlID0gdHJ1ZVxuICApOiBTZWxlY3Rpb25Sb3dbXSB7XG4gICAgcmV0dXJuIGl0ZW1zXG4gICAgICAubWFwKChpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gdGhpcy5yZXNvbHZlQ29sdW1uUGFydHMoaXRlbS52YWx1ZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaWQ6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgbmFtZTogcGFydHMuZmllbGRMYWJlbCxcbiAgICAgICAgICBkYkxhYmVsOiBwYXJ0cy5kYkxhYmVsLFxuICAgICAgICAgIHRhYmxlTGFiZWw6IHBhcnRzLnRhYmxlTGFiZWwsXG4gICAgICAgICAgcGF0aFR5cGU6IFwiY29sdW1uXCIgYXMgY29uc3QsXG4gICAgICAgICAgcHJlZml4OiBwYXJ0cy50YWJsZUxhYmVsLFxuICAgICAgICAgIG1ldGE6IGl0ZW0uZGF0YVR5cGUsXG4gICAgICAgICAgbm90ZTogaXRlbS5mdWxsTmFtZSxcbiAgICAgICAgICBzZWxlY3RlZDogbXVsdGlwbGVcbiAgICAgICAgICAgID8gc2VsZWN0ZWRJZHMuaW5jbHVkZXMoaXRlbS52YWx1ZSlcbiAgICAgICAgICAgIDogc2VsZWN0ZWRJZHNbMF0gPT09IGl0ZW0udmFsdWUsXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICAgIHRoaXMubWF0Y2hlc1NlYXJjaChbaXRlbS5wcmVmaXggPz8gRU1QVFlfVkFMVUUsIGl0ZW0ubmFtZSwgaXRlbS5tZXRhLCBpdGVtLm5vdGUgPz8gRU1QVFlfVkFMVUVdLCBzZWFyY2gpXG4gICAgICApO1xuICB9XG4gIHByaXZhdGUgYnVpbGRDb2x1bW5QaWNrbGlzdEl0ZW1zKFxuICAgIGl0ZW1zOiBEeW5hbWljVmlld0J1aWxkZXJDb2x1bW5PcHRpb25bXVxuICApOiBDb2x1bW5QaWNrbGlzdEl0ZW1bXSB7XG4gICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgcGlja2xpc3RJZCA9IHRoaXMucmVzb2x2ZUNvbHVtblBpY2tsaXN0SWQoaXRlbS52YWx1ZSk7XG4gICAgICBjb25zdCBwYXJ0cyA9IHRoaXMucmVzb2x2ZUNvbHVtblBhcnRzKGl0ZW0udmFsdWUpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogcGlja2xpc3RJZCA/PyAwLFxuICAgICAgICB0aXRsZTogYCR7cGFydHMudGFibGVMYWJlbH0uJHtwYXJ0cy5maWVsZExhYmVsfWAsXG4gICAgICAgIHRpdGxlUHJlZml4OiBwYXJ0cy50YWJsZUxhYmVsLFxuICAgICAgICB0aXRsZVN1ZmZpeDogcGFydHMuZmllbGRMYWJlbCxcbiAgICAgICAgdGl0bGVQcmVmaXhDb2xvcjogVklTVUFMX1NRTF9UQUJMRV9DT0xPUixcbiAgICAgICAgdGl0bGVTdWZmaXhDb2xvcjogVklTVUFMX1NRTF9GSUVMRF9DT0xPUixcbiAgICAgICAgYmFkZ2U6IGl0ZW0uZGF0YVR5cGUgPz8gRU1QVFlfVkFMVUUsXG4gICAgICAgIGJhZGdlQ29sb3I6IFBJQ0tMSVNUX0RBVEFfVFlQRV9CQURHRV9DT0xPUixcbiAgICAgICAgY29sdW1uOiBpdGVtLnZhbHVlLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIGJ1aWxkVGFibGVQaWNrbGlzdEl0ZW1zKFxuICAgIGl0ZW1zOiBEeW5hbWljVmlld0J1aWxkZXJUYWJsZU9wdGlvbltdXG4gICk6IFRhYmxlUGlja2xpc3RJdGVtW10ge1xuICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHRoaXMucmVzb2x2ZVRhYmxlRGlzcGxheVBhcnRzKGl0ZW0udmFsdWUpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogaW5kZXggKyAxLFxuICAgICAgICB0aXRsZTogYCR7cGFydHMuZGJMYWJlbH0uJHtwYXJ0cy50YWJsZUxhYmVsfWAsXG4gICAgICAgIHRpdGxlUHJlZml4OiBwYXJ0cy5kYkxhYmVsLFxuICAgICAgICB0aXRsZVN1ZmZpeDogcGFydHMudGFibGVMYWJlbCxcbiAgICAgICAgdGl0bGVQcmVmaXhDb2xvcjogVklTVUFMX1NRTF9UQUJMRV9DT0xPUixcbiAgICAgICAgdGl0bGVTdWZmaXhDb2xvcjogVklTVUFMX1NRTF9GSUVMRF9DT0xPUixcbiAgICAgICAgYmFkZ2U6XG4gICAgICAgICAgaXRlbS5kaXNwbGF5TmFtZSAmJiBpdGVtLmRpc3BsYXlOYW1lICE9PSBwYXJ0cy50YWJsZUxhYmVsXG4gICAgICAgICAgICA/IGl0ZW0uZGlzcGxheU5hbWVcbiAgICAgICAgICAgIDogRU1QVFlfVkFMVUUsXG4gICAgICAgIGJhZGdlQ29sb3I6IFBJQ0tMSVNUX0RBVEFfVFlQRV9CQURHRV9DT0xPUixcbiAgICAgICAgdGFibGU6IGl0ZW0udmFsdWUsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZUNvbHVtbnNGcm9tUGlja2xpc3RJZHMoaWRzOiBudW1iZXJbXSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gaWRzXG4gICAgICAubWFwKChpZCkgPT4gdGhpcy5yZXNvbHZlQ29sdW1uUGlja2xpc3RDb2x1bW4oaWQpKVxuICAgICAgLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgc3RyaW5nID0+ICEhaXRlbSk7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlTGFzdENvbHVtbkZyb21QaWNrbGlzdElkcyhpZHM6IG51bWJlcltdKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMucmVzb2x2ZUNvbHVtbnNGcm9tUGlja2xpc3RJZHMoaWRzKTtcbiAgICByZXR1cm4gY29sdW1ucy5hdCgtMSkgPz8gbnVsbDtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVUYWJsZVBpY2tsaXN0SWQodGFibGVWYWx1ZTogc3RyaW5nKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgY29uc3QgaXRlbUluZGV4ID0gKHRoaXMuY29uZmlnLmF2YWlsYWJsZURhdGEudGFibGVzID8/IFtdKS5maW5kSW5kZXgoXG4gICAgICAoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gdGFibGVWYWx1ZVxuICAgICk7XG5cbiAgICByZXR1cm4gaXRlbUluZGV4ID49IDAgPyBpdGVtSW5kZXggKyAxIDogbnVsbDtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVUYWJsZVBpY2tsaXN0VGFibGUoaWQ6IG51bWJlcik6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGl0ZW0gPSAodGhpcy5jb25maWcuYXZhaWxhYmxlRGF0YS50YWJsZXMgPz8gW10pLmZpbmQoXG4gICAgICAoX2VudHJ5LCBpbmRleCkgPT4gaW5kZXggKyAxID09PSBpZFxuICAgICk7XG5cbiAgICByZXR1cm4gaXRlbT8udmFsdWUgPz8gbnVsbDtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVUYWJsZXNGcm9tUGlja2xpc3RJZHMoaWRzOiBudW1iZXJbXSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gaWRzXG4gICAgICAubWFwKChpZCkgPT4gdGhpcy5yZXNvbHZlVGFibGVQaWNrbGlzdFRhYmxlKGlkKSlcbiAgICAgIC5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIHN0cmluZyA9PiAhIWl0ZW0pO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZUNvbHVtblBpY2tsaXN0SWQoY29sdW1uOiBzdHJpbmcpOiBudW1iZXIgfCBudWxsIHtcbiAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLmF2YWlsYWJsZUNvbHVtbnMuZmluZEluZGV4KFxuICAgICAgKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IGNvbHVtblxuICAgICk7XG5cbiAgICByZXR1cm4gaXRlbUluZGV4ID49IDAgPyBpdGVtSW5kZXggKyAxIDogbnVsbDtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVDb2x1bW5QaWNrbGlzdENvbHVtbihpZDogbnVtYmVyKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuYXZhaWxhYmxlQ29sdW1uc1tpZCAtIDFdO1xuICAgIHJldHVybiBpdGVtPy52YWx1ZSA/PyBudWxsO1xuICB9XG4gIHByaXZhdGUgbWF0Y2hlc1NlYXJjaCh2YWx1ZXM6IHN0cmluZ1tdLCBzZWFyY2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTZWFyY2ggPSB0aGlzLm5vcm1hbGl6ZShzZWFyY2gpO1xuICAgIGlmICghbm9ybWFsaXplZFNlYXJjaCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXMuc29tZSgodmFsdWUpID0+XG4gICAgICB0aGlzLm5vcm1hbGl6ZSh2YWx1ZSkuaW5jbHVkZXMobm9ybWFsaXplZFNlYXJjaClcbiAgICApO1xuICB9XG4gIHByaXZhdGUgbm9ybWFsaXplKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBub3JtYWxpemUodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgdG9nZ2xlTXVsdGlwbGVWYWx1ZSh2YWx1ZXM6IHN0cmluZ1tdLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB2YWx1ZXMuaW5jbHVkZXModmFsdWUpXG4gICAgICA/IHZhbHVlcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IHZhbHVlKVxuICAgICAgOiBbLi4udmFsdWVzLCB2YWx1ZV07XG4gIH1cbiAgcHJpdmF0ZSBmaWx0ZXJGdW5jdGlvblNlbGVjdGFibGVDb2x1bW5zKFxuICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nXG4gICk6IER5bmFtaWNWaWV3QnVpbGRlckNvbHVtbk9wdGlvbltdIHtcbiAgICBjb25zdCBzZWxlY3RlZEdyb3VwQnkgPSBuZXcgU2V0KHRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5KTtcbiAgICBjb25zdCBhbGwgPSB0aGlzLmF2YWlsYWJsZUNvbHVtbnMuZmlsdGVyKFxuICAgICAgKGl0ZW0pID0+ICFzZWxlY3RlZEdyb3VwQnkuaGFzKGl0ZW0udmFsdWUpXG4gICAgKTtcbiAgICBpZiAoZnVuY3Rpb25OYW1lID09PSBcImNvdW50XCIpIHtcbiAgICAgIHJldHVybiBhbGw7XG4gICAgfVxuICAgIGlmIChbXCJzdW1cIiwgXCJhdmdcIiwgXCJtaW5cIiwgXCJtYXhcIl0uaW5jbHVkZXMoZnVuY3Rpb25OYW1lLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICByZXR1cm4gYWxsLmZpbHRlcigoaXRlbSkgPT4gdGhpcy5pc051bWVyaWNUeXBlKGl0ZW0uZGF0YVR5cGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFsbDtcbiAgfVxuICBwcml2YXRlIGlzTnVtZXJpY1R5cGUodmFsdWU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNOdW1lcmljVHlwZSh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBpc0RhdGVUeXBlKHZhbHVlPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzRGF0ZVR5cGUodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgZmlsdGVyT3BlcmF0b3JzRm9yQ29sdW1uKFxuICAgIGNvbHVtbjogRHluYW1pY1ZpZXdCdWlsZGVyQ29sdW1uT3B0aW9uXG4gICk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gZmlsdGVyT3BlcmF0b3JzRm9yQ29sdW1uKGNvbHVtbik7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlVGFibGVPcHRpb24oXG4gICAgdmFsdWU6IHN0cmluZ1xuICApOiBEeW5hbWljVmlld0J1aWxkZXJUYWJsZU9wdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuICh0aGlzLmNvbmZpZy5hdmFpbGFibGVEYXRhLnRhYmxlcyA/PyBbXSkuZmluZChcbiAgICAgIChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSB2YWx1ZVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlQ29sdW1uT3B0aW9uKFxuICAgIHZhbHVlOiBzdHJpbmdcbiAgKTogRHluYW1pY1ZpZXdCdWlsZGVyQ29sdW1uT3B0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gKHRoaXMuY29uZmlnLmF2YWlsYWJsZURhdGEuY29sdW1ucyA/PyBbXSkuZmluZChcbiAgICAgIChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSB2YWx1ZVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlVGFibGVMYWJlbCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlVGFibGVPcHRpb24odmFsdWUpPy50ZXh0ID8/IHZhbHVlO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZVRhYmxlRGlzcGxheVBhcnRzKHZhbHVlOiBzdHJpbmcpOiBUYWJsZURpc3BsYXlQYXJ0cyB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnJlc29sdmVUYWJsZU9wdGlvbih2YWx1ZSk7XG4gICAgaWYgKCF0YWJsZSkge1xuICAgICAgY29uc3QgcmF3UGFydHMgPSB2YWx1ZS5zcGxpdChcIi5cIikuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGJMYWJlbDogcmF3UGFydHMubGVuZ3RoID4gMSA/IHJhd1BhcnRzLnNsaWNlKDAsIC0xKS5qb2luKFwiLlwiKSA6IFwiZGJcIixcbiAgICAgICAgdGFibGVMYWJlbDogcmF3UGFydHMuYXQoLTEpID8/IHZhbHVlLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGRiTGFiZWw6IHRhYmxlLnNjaGVtYSB8fCBcImRiXCIsIC8vIE5PU09OQVJcbiAgICAgIHRhYmxlTGFiZWw6IHRhYmxlLnZhbHVlLFxuICAgIH07XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlVGFibGVQYXRoKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhcnRzID0gdGhpcy5yZXNvbHZlVGFibGVEaXNwbGF5UGFydHModmFsdWUpO1xuICAgIHJldHVybiBwYXJ0cy5kYkxhYmVsID8gYCR7cGFydHMuZGJMYWJlbH0uJHtwYXJ0cy50YWJsZUxhYmVsfWAgOiBwYXJ0cy50YWJsZUxhYmVsO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZUNvbHVtblBhcnRzKCAvLyBOT1NPTkFSIC0gY29tcGxleGl0eTogZXh0cmFjdGlvbiB3b3VsZCByaXNrIGJlaGF2aW9yIGNoYW5nZVxuICAgIHZhbHVlOiBzdHJpbmcgfCBEeW5hbWljVmlld0J1aWxkZXJGaWVsZFxuICApOiBDb2x1bW5EaXNwbGF5UGFydHMge1xuICAgIGNvbnN0IGNvbHVtblZhbHVlID1cbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUuY29sdW1uID8/IEVNUFRZX1ZBTFVFO1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMucmVzb2x2ZUNvbHVtbk9wdGlvbihjb2x1bW5WYWx1ZSk7XG4gICAgaWYgKCFjb2x1bW4pIHtcbiAgICAgIGNvbnN0IGZhbGxiYWNrID0gYCR7Y29sdW1uVmFsdWV9YC5zcGxpdChcIi5cIikuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGJMYWJlbDogZmFsbGJhY2subGVuZ3RoID49IE1JTl9QQVJUU19GT1JfREIgPyBmYWxsYmFjay5zbGljZSgwLCBEQl9QQVJUU19PRkZTRVQpLmpvaW4oXCIuXCIpIDogRU1QVFlfVkFMVUUsXG4gICAgICAgIHRhYmxlTGFiZWw6IGZhbGxiYWNrLmxlbmd0aCA+PSBNSU5fUEFSVFNfRk9SX1RBQkxFID8gZmFsbGJhY2tbZmFsbGJhY2subGVuZ3RoIC0gTUlOX1BBUlRTX0ZPUl9UQUJMRV0gOiBjb2x1bW5WYWx1ZSxcbiAgICAgICAgZmllbGRMYWJlbDogZmFsbGJhY2suYXQoLTEpID8/IGNvbHVtblZhbHVlLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgcGFydHMgPSAoY29sdW1uLmZ1bGxOYW1lID8/IGNvbHVtblZhbHVlKS5zcGxpdChcIi5cIikuZmlsdGVyKEJvb2xlYW4pO1xuICAgIHJldHVybiB7XG4gICAgICBkYkxhYmVsOiBwYXJ0cy5sZW5ndGggPj0gTUlOX1BBUlRTX0ZPUl9EQiA/IHBhcnRzLnNsaWNlKDAsIERCX1BBUlRTX09GRlNFVCkuam9pbihcIi5cIikgOiBFTVBUWV9WQUxVRSxcbiAgICAgIHRhYmxlTGFiZWw6IHBhcnRzLmxlbmd0aCA+PSBNSU5fUEFSVFNfRk9SX1RBQkxFID8gcGFydHNbcGFydHMubGVuZ3RoIC0gTUlOX1BBUlRTX0ZPUl9UQUJMRV0gOiB0aGlzLnJlc29sdmVUYWJsZVBhdGgoY29sdW1uLnRhYmxlKSxcbiAgICAgIGZpZWxkTGFiZWw6IHBhcnRzLmF0KC0xKSA/PyBjb2x1bW4udmFsdWUsXG4gICAgfTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVDb2x1bW5MYWJlbCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlQ29sdW1uUGF0aCh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlU29ydERyYWZ0TGFiZWwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlID0gdGhpcy5yZXNvbHZlQ29sdW1uUGF0aCh0aGlzLnNvcnREcmFmdC5jb2x1bW4pO1xuICAgIGlmICghdGhpcy5zb3J0RHJhZnQuZnVuY3Rpb25OYW1lKSB7XG4gICAgICByZXR1cm4gYmFzZTtcbiAgICB9XG4gICAgcmV0dXJuIGAke3RoaXMucmVzb2x2ZUZ1bmN0aW9uTGFiZWwodGhpcy5zb3J0RHJhZnQuZnVuY3Rpb25OYW1lKX0oJHtiYXNlfSlgO1xuICB9XG4gIHByaXZhdGUgYnVpbGRTb3J0U2VsZWN0aW9uSWQoXG4gICAgY29sdW1uOiBzdHJpbmcsXG4gICAgZnVuY3Rpb25OYW1lID0gRU1QVFlfVkFMVUVcbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7Y29sdW1ufTo6JHtmdW5jdGlvbk5hbWUgfHwgRU1QVFlfU09SVF9GVU5DVElPTn1gO1xuICB9XG4gIHByaXZhdGUgcGFyc2VTb3J0U2VsZWN0aW9uSWQoXG4gICAgc2VsZWN0aW9uSWQ6IHN0cmluZ1xuICApOiB7IGNvbHVtbjogc3RyaW5nOyBmdW5jdGlvbk5hbWU6IHN0cmluZyB9IHtcbiAgICBjb25zdCBbY29sdW1uLCBmdW5jdGlvbk5hbWUgPSBFTVBUWV9TT1JUX0ZVTkNUSU9OXSA9IHNlbGVjdGlvbklkLnNwbGl0KFwiOjpcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbHVtbixcbiAgICAgIGZ1bmN0aW9uTmFtZTpcbiAgICAgICAgZnVuY3Rpb25OYW1lID09PSBFTVBUWV9TT1JUX0ZVTkNUSU9OID8gRU1QVFlfVkFMVUUgOiBmdW5jdGlvbk5hbWUsXG4gICAgfTtcbiAgfVxuICByZXNvbHZlQ29sdW1uUGF0aCh2YWx1ZTogc3RyaW5nIHwgRHluYW1pY1ZpZXdCdWlsZGVyRmllbGQpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbHVtblZhbHVlID1cbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUuY29sdW1uID8/IEVNUFRZX1ZBTFVFO1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMucmVzb2x2ZUNvbHVtbk9wdGlvbihjb2x1bW5WYWx1ZSk7XG4gICAgaWYgKCFjb2x1bW4pIHtcbiAgICAgIHJldHVybiBjb2x1bW5WYWx1ZTtcbiAgICB9XG4gICAgY29uc3QgcGFydHMgPSAoY29sdW1uLmZ1bGxOYW1lID8/IGNvbHVtblZhbHVlKS5zcGxpdChcIi5cIikuZmlsdGVyKEJvb2xlYW4pO1xuICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPj0gTUlOX1BBUlRTX0ZPUl9UQUJMRSA/IHBhcnRzLnNsaWNlKERCX1BBUlRTX09GRlNFVCkuam9pbihcIi5cIikgOiBjb2x1bW4uZnVsbE5hbWU7XG4gIH1cbiAgcHJpdmF0ZSBub3JtYWxpemVHZW5lcmF0ZWRGaWVsZChcbiAgICB2YWx1ZTogc3RyaW5nIHwgRHluYW1pY1ZpZXdCdWlsZGVyRmllbGRcbiAgKTogRHluYW1pY1ZpZXdCdWlsZGVyRmllbGQge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB7IGNvbHVtbjogdmFsdWUgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbHVtbjogdmFsdWUuY29sdW1uLFxuICAgICAgYWxpYXM6IHZhbHVlLmFsaWFzPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICB3aWR0aDogdmFsdWUud2lkdGg/LnRyaW0oKSA/PyBFTVBUWV9WQUxVRSxcbiAgICAgIGZ1bmN0aW9uOiB2YWx1ZS5mdW5jdGlvblxuICAgICAgICA/IHtcbiAgICAgICAgICBmdW5jdGlvbk5hbWU6IHZhbHVlLmZ1bmN0aW9uLmZ1bmN0aW9uTmFtZT8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgICAgIGFsaWFzOiB2YWx1ZS5mdW5jdGlvbi5hbGlhcz8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgICB9XG4gICAgICAgIDogbnVsbCxcbiAgICB9O1xuICB9XG4gIHByaXZhdGUgZ2V0T3JkZXJlZEZpZWxkRW50cmllcygpOiBBcnJheTxcbiAgICBEeW5hbWljVmlld0J1aWxkZXJGaWVsZCAmIHsgc291cmNlSW5kZXg6IG51bWJlciB9XG4gID4ge1xuICAgIGNvbnN0IGVudHJpZXMgPSB0aGlzLm5vcm1hbGl6ZWRGaWVsZHMubWFwKChpdGVtLCBzb3VyY2VJbmRleCkgPT4gKHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBzb3VyY2VJbmRleCxcbiAgICB9KSk7XG4gICAgY29uc3QgcHJldmlld0luZGV4ZXMgPSB0aGlzLmdldEZpZWxkUHJldmlld1NvdXJjZUluZGV4ZXMoKTtcbiAgICByZXR1cm4gcHJldmlld0luZGV4ZXMubWFwKChpbmRleCkgPT4gZW50cmllc1tpbmRleF0pLmZpbHRlcihCb29sZWFuKTtcbiAgfVxuICBwcml2YXRlIGdldEZpZWxkUHJldmlld1NvdXJjZUluZGV4ZXMoKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IGJhc2VJbmRleGVzID0gdGhpcy5ub3JtYWxpemVkRmllbGRzLm1hcCgoXywgaW5kZXgpID0+IGluZGV4KTtcbiAgICBpZiAodGhpcy5kcmFnZ2luZ0ZpZWxkSW5kZXggPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBiYXNlSW5kZXhlcztcbiAgICB9XG4gICAgY29uc3QgcmVtYWluaW5nSW5kZXhlcyA9IGJhc2VJbmRleGVzLmZpbHRlcihcbiAgICAgIChpbmRleCkgPT4gaW5kZXggIT09IHRoaXMuZHJhZ2dpbmdGaWVsZEluZGV4XG4gICAgKTtcbiAgICBjb25zdCBpbnNlcnRpb25JbmRleCA9XG4gICAgICB0aGlzLmRyYWdQcmV2aWV3SW5kZXggPT09IG51bGxcbiAgICAgICAgPyBiYXNlSW5kZXhlcy5pbmRleE9mKHRoaXMuZHJhZ2dpbmdGaWVsZEluZGV4KVxuICAgICAgICA6IE1hdGgubWluKHRoaXMuZHJhZ1ByZXZpZXdJbmRleCwgcmVtYWluaW5nSW5kZXhlcy5sZW5ndGgpO1xuICAgIHJlbWFpbmluZ0luZGV4ZXMuc3BsaWNlKGluc2VydGlvbkluZGV4LCAwLCB0aGlzLmRyYWdnaW5nRmllbGRJbmRleCk7XG4gICAgcmV0dXJuIHJlbWFpbmluZ0luZGV4ZXM7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlRnVuY3Rpb25MYWJlbCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlT3B0aW9uTGFiZWwodmFsdWUsIHRoaXMuZnVuY3Rpb25PcHRpb25zKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVKb2luT3BlcmF0b3JMYWJlbCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlT3B0aW9uTGFiZWwodmFsdWUsIHRoaXMuam9pbk9wZXJhdG9yT3B0aW9ucyk7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlSm9pbk9wZXJhdG9yT3B0aW9uVGV4dChvcHRpb246IER5bmFtaWNWaWV3QnVpbGRlck9wdGlvbik6IHN0cmluZyB7XG4gICAgY29uc3QgZmFsbGJhY2sgPSBKT0lOX09QRVJBVE9SX0xBQkVMU1tvcHRpb24udmFsdWVdO1xuICAgIGNvbnN0IGhhc1JlYWRhYmxlVGV4dCA9IC9bQS1aYS16w4Atw79dLy50ZXN0KG9wdGlvbi50ZXh0KTtcblxuICAgIGlmICghZmFsbGJhY2sgfHwgaGFzUmVhZGFibGVUZXh0KSB7XG4gICAgICByZXR1cm4gb3B0aW9uLnRleHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS4ke2ZhbGxiYWNrLmtleX1gLFxuICAgICAgZmFsbGJhY2suZmFsbGJhY2tcbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZUZpbHRlck9wZXJhdG9yTGFiZWwodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4XG4gICAgICB9LmZpbHRlcnMub3BlcmF0b3JzLiR7dmFsdWUudG9Mb3dlckNhc2UoKX1gLFxuICAgICAgdGhpcy5odW1hbml6ZUtleSh2YWx1ZSlcbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZU9wdGlvbkxhYmVsKFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9uczogRHluYW1pY1ZpZXdCdWlsZGVyT3B0aW9uW11cbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gb3B0aW9ucy5maW5kKChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSB2YWx1ZSk/LnRleHQgPz8gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlRmlsdGVyRGlzcGxheVZhbHVlKGZpbHRlcjogRHluYW1pY1ZpZXdCdWlsZGVyRmlsdGVyKTogc3RyaW5nIHsgLy8gTk9TT05BUiAtIGNvbXBsZXhpdHk6IGV4dHJhY3Rpb24gd291bGQgcmlzayBiZWhhdmlvciBjaGFuZ2VcbiAgICBpZiAoZmlsdGVyLnZhbHVlVHlwZSA9PT0gRklMVEVSX01PREVfRE9NQUlOKSB7XG4gICAgICByZXR1cm4gZmlsdGVyLmRvbWFpbkV4cHJlc3Npb24gPz8gRU1QVFlfVkFMVUU7XG4gICAgfVxuICAgIGlmIChmaWx0ZXIudmFsdWVUeXBlID09PSBcInBhcmFtZXRlclwiKSB7XG4gICAgICByZXR1cm4gYDoke2ZpbHRlci5wYXJhbWV0ZXJOYW1lID8/IEVNUFRZX1ZBTFVFfWA7XG4gICAgfVxuICAgIGlmIChmaWx0ZXIub3BlcmF0b3IgPT09IFwiSU5cIikge1xuICAgICAgcmV0dXJuIChmaWx0ZXIudmFsdWVzID8/IFtdKS5qb2luKFwiLCBcIik7XG4gICAgfVxuICAgIGlmIChmaWx0ZXIub3BlcmF0b3IgPT09IFwiQkVUV0VFTlwiKSB7XG4gICAgICByZXR1cm4gYCR7ZmlsdGVyLnZhbHVlcz8uWzBdID8/IEVNUFRZX1ZBTFVFfSAtICR7ZmlsdGVyLnZhbHVlcz8uWzFdID8/IEVNUFRZX1ZBTFVFXG4gICAgICAgIH1gO1xuICAgIH1cbiAgICBpZiAoW1wiRU1QVFlcIiwgXCJOT1RfRU1QVFlcIl0uaW5jbHVkZXMoZmlsdGVyLm9wZXJhdG9yKSkge1xuICAgICAgcmV0dXJuIFwiLVwiO1xuICAgIH1cbiAgICByZXR1cm4gZmlsdGVyLnZhbHVlID8/IEVNUFRZX1ZBTFVFO1xuICB9XG4gIHByaXZhdGUgYnVpbGRHZW5lcmF0ZWRTcWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYnVpbGRHZW5lcmF0ZWRTcWwoXG4gICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc291cmNlcyxcbiAgICAgIHRoaXMubm9ybWFsaXplZEZpZWxkcyxcbiAgICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5qb2lucyxcbiAgICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5maWx0ZXJzLFxuICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmdyb3VwQnksXG4gICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc29ydGluZyxcbiAgICAgIHRoaXMuZ2V0U3FsQ29udGV4dCgpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGJ1aWxkV2hlcmVTcWwoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBidWlsZFdoZXJlU3FsKHRoaXMuZ2V0U3FsQ29udGV4dCgpLCB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmlsdGVycyk7XG4gIH1cbiAgcHJpdmF0ZSBidWlsZEdyb3VwQnlTcWwoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBidWlsZEdyb3VwQnlTcWwodGhpcy5nZXRTcWxDb250ZXh0KCksIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5KTtcbiAgfVxuICBwcml2YXRlIGJ1aWxkT3JkZXJCeVNxbCgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGJ1aWxkT3JkZXJCeVNxbCh0aGlzLmdldFNxbENvbnRleHQoKSwgdGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvcnRpbmcpO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZVNvdXJjZVNxbChzb3VyY2U6IER5bmFtaWNWaWV3QnVpbGRlclRhYmxlT3B0aW9uIHwge1xuICAgIHRhYmxlOiBzdHJpbmc7XG4gICAgYWxpYXM6IHN0cmluZztcbiAgfSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVTb3VyY2VTcWwodGhpcy5nZXRTcWxDb250ZXh0KCksIHNvdXJjZSk7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlSm9pblNxbChpdGVtOiBEeW5hbWljVmlld0J1aWxkZXJKb2luKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZUpvaW5TcWwodGhpcy5nZXRTcWxDb250ZXh0KCksIGl0ZW0pO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZUNvbHVtblNxbCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZUNvbHVtblNxbCh0aGlzLmdldFNxbENvbnRleHQoKSwgdmFsdWUpO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZUZpZWxkU3FsKGZpZWxkOiBzdHJpbmcgfCBEeW5hbWljVmlld0J1aWxkZXJGaWVsZCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVGaWVsZFNxbCh0aGlzLmdldFNxbENvbnRleHQoKSwgZmllbGQpO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZUZ1bmN0aW9uU3FsKGl0ZW06IER5bmFtaWNWaWV3QnVpbGRlckZ1bmN0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZUZ1bmN0aW9uU3FsKHRoaXMuZ2V0U3FsQ29udGV4dCgpLCBpdGVtKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVTb3J0U3FsKGl0ZW06IER5bmFtaWNWaWV3QnVpbGRlclNvcnQpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXNvbHZlU29ydFNxbCh0aGlzLmdldFNxbENvbnRleHQoKSwgaXRlbSk7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlRmlsdGVyU3FsKGZpbHRlcjogRHluYW1pY1ZpZXdCdWlsZGVyRmlsdGVyKTogc3RyaW5nIHsgLy8gTk9TT05BUiAtIGNvbXBsZXhpdHk6IGV4dHJhY3Rpb24gd291bGQgcmlzayBiZWhhdmlvciBjaGFuZ2VcbiAgICByZXR1cm4gcmVzb2x2ZUZpbHRlclNxbCh0aGlzLmdldFNxbENvbnRleHQoKSwgZmlsdGVyKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVGaWx0ZXJPcGVyYXRvclNxbCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZUZpbHRlck9wZXJhdG9yU3FsKHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVGaWx0ZXJWYWx1ZVNxbChcbiAgICBjb2x1bW5WYWx1ZTogc3RyaW5nLFxuICAgIG9wZXJhdG9yOiBzdHJpbmcsXG4gICAgdmFsdWU6IHVua25vd25cbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZUZpbHRlclZhbHVlU3FsKHRoaXMuZ2V0U3FsQ29udGV4dCgpLCBjb2x1bW5WYWx1ZSwgb3BlcmF0b3IsIHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIGRlY29yYXRlTGlrZVZhbHVlKG9wZXJhdG9yOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBkZWNvcmF0ZUxpa2VWYWx1ZShvcGVyYXRvciwgdmFsdWUpO1xuICB9XG4gIHByaXZhdGUgcXVvdGVTcWxWYWx1ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcXVvdGVTcWxWYWx1ZSh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBzeW5jTGF5b3V0TW9kZUl0ZW1zKCk6IHZvaWQge1xuICAgIHRoaXMubGF5b3V0TW9kZUl0ZW1zWzBdLmxhYmVsID0gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmxheW91dE1vZGVzLnN0YWNrZWRgLFxuICAgICAgXCJCbG9jb3NcIlxuICAgICk7XG4gICAgdGhpcy5sYXlvdXRNb2RlSXRlbXNbMV0ubGFiZWwgPSB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubGF5b3V0TW9kZXMuc3BsaXRgLFxuICAgICAgXCJMaXN0YVwiXG4gICAgKTtcbiAgICB0aGlzLnN5bmNTZWxlY3RlZExheW91dE1vZGVJdGVtcygpO1xuICB9XG4gIHByaXZhdGUgc3luY0ZpbHRlck1vZGVJdGVtcygpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlck1vZGVJdGVtc1swXS5sYWJlbCA9IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLm1vZGVzLmNvbmRpdGlvbmAsXG4gICAgICBcIkZpbHRyb1wiXG4gICAgKTtcbiAgICB0aGlzLmZpbHRlck1vZGVJdGVtc1sxXS5sYWJlbCA9IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLmRvbWFpbkxhYmVsYCxcbiAgICAgIFwiRXhwcmVzc2FvIGRlIGRvbWluaW9cIlxuICAgICk7XG4gICAgdGhpcy5zeW5jU2VsZWN0ZWRGaWx0ZXJNb2RlSXRlbXMoKTtcbiAgfVxuICBwcml2YXRlIHN5bmNTb3J0RGlyZWN0aW9uSXRlbXMoKTogdm9pZCB7XG4gICAgdGhpcy5zb3J0RGlyZWN0aW9uSXRlbXMuc3BsaWNlKFxuICAgICAgMCxcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbkl0ZW1zLmxlbmd0aCxcbiAgICAgIC4uLnRoaXMuc29ydERpcmVjdGlvbk9wdGlvbnMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICBsYWJlbDogaXRlbS50ZXh0LFxuICAgICAgICB2YWx1ZTogaXRlbS52YWx1ZSxcbiAgICAgIH0pKVxuICAgICk7XG4gICAgdGhpcy5zeW5jU2VsZWN0ZWRTb3J0RGlyZWN0aW9uSXRlbXMoKTtcbiAgfVxuICBwcml2YXRlIHN5bmNTZWxlY3RlZExheW91dE1vZGVJdGVtcygpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMubGF5b3V0TW9kZUl0ZW1zLmZpbmQoXG4gICAgICAoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gdGhpcy5sYXlvdXRNb2RlXG4gICAgKTtcbiAgICB0aGlzLnNlbGVjdGVkTGF5b3V0TW9kZUl0ZW1zLnNwbGljZShcbiAgICAgIDAsXG4gICAgICB0aGlzLnNlbGVjdGVkTGF5b3V0TW9kZUl0ZW1zLmxlbmd0aCxcbiAgICAgIC4uLihzZWxlY3RlZCA/IFtzZWxlY3RlZF0gOiBbXSlcbiAgICApO1xuICB9XG4gIHByaXZhdGUgc3luY1NlbGVjdGVkRmlsdGVyTW9kZUl0ZW1zKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5maWx0ZXJNb2RlSXRlbXMuZmluZChcbiAgICAgIChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSB0aGlzLmZpbHRlck1vZGFsTW9kZVxuICAgICk7XG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlck1vZGVJdGVtcy5zcGxpY2UoXG4gICAgICAwLFxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlck1vZGVJdGVtcy5sZW5ndGgsXG4gICAgICAuLi4oc2VsZWN0ZWQgPyBbc2VsZWN0ZWRdIDogW10pXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHN5bmNTZWxlY3RlZFNvcnREaXJlY3Rpb25JdGVtcygpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc29ydERpcmVjdGlvbkl0ZW1zLmZpbmQoXG4gICAgICAoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gdGhpcy5zb3J0RHJhZnQuZGlyZWN0aW9uXG4gICAgKTtcbiAgICB0aGlzLnNlbGVjdGVkU29ydERpcmVjdGlvbkl0ZW1zLnNwbGljZShcbiAgICAgIDAsXG4gICAgICB0aGlzLnNlbGVjdGVkU29ydERpcmVjdGlvbkl0ZW1zLmxlbmd0aCxcbiAgICAgIC4uLihzZWxlY3RlZCA/IFtzZWxlY3RlZF0gOiBbXSlcbiAgICApO1xuICB9XG4gIHByaXZhdGUgZ2V0IGZpbHRlclNlcXVlbmNlSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJFZGl0SW5kZXggPz8gdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpbHRlcnMubGVuZ3RoO1xuICB9XG4gIHByaXZhdGUgZ2V0U3FsQ29udGV4dCgpOiBTcWxDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgY29sdW1uczogdGhpcy5jb25maWcuYXZhaWxhYmxlRGF0YS5jb2x1bW5zID8/IFtdLFxuICAgICAgdGFibGVzOiB0aGlzLmNvbmZpZy5hdmFpbGFibGVEYXRhLnRhYmxlcyA/PyBbXSxcbiAgICAgIHNvdXJjZXM6IHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzLFxuICAgIH07XG4gIH1cbiAgcHJpdmF0ZSBwYXJzZU11bHRpVmFsdWVUZXh0KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gICAgICAuc3BsaXQoXCIsXCIpXG4gICAgICAubWFwKChpdGVtKSA9PiBpdGVtLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gIH1cbiAgcHJpdmF0ZSBidWlsZEFsaWFzRm9yVGFibGUodGFibGU6IER5bmFtaWNWaWV3QnVpbGRlclRhYmxlT3B0aW9uKTogc3RyaW5nIHtcbiAgICBjb25zdCB3b3JkcyA9IHRhYmxlLnRleHRcbiAgICAgIC5zcGxpdCgvW1xcc18uLV0rLylcbiAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0udHJpbSgpKVxuICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgICBpZiAod29yZHMubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIHdvcmRzXG4gICAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW1bMF0/LnRvTG93ZXJDYXNlKCkgPz8gRU1QVFlfVkFMVUUpXG4gICAgICAgIC5qb2luKFwiXCIpO1xuICAgIH1cbiAgICByZXR1cm4gKHRhYmxlLnZhbHVlLnNwbGl0KFwiLlwiKS5wb3AoKSA/PyB0YWJsZS52YWx1ZSlcbiAgICAgIC5zbGljZSgwLCBBTElBU19NQVhfTEVOR1RIKVxuICAgICAgLnRvTG93ZXJDYXNlKCk7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlRGVmYXVsdFNvdXJjZUFsaWFzKHRhYmxlVmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnJlc29sdmVUYWJsZU9wdGlvbih0YWJsZVZhbHVlKTtcbiAgICByZXR1cm4gdGFibGUgPyB0aGlzLmJ1aWxkQWxpYXNGb3JUYWJsZSh0YWJsZSkgOiBFTVBUWV9WQUxVRTtcbiAgfVxuICBwcml2YXRlIGhhc0N1c3RvbUFsaWFzKHRhYmxlVmFsdWU6IHN0cmluZywgYWxpYXM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5yZXNvbHZlVGFibGVPcHRpb24odGFibGVWYWx1ZSk7XG4gICAgaWYgKCF0YWJsZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gISFhbGlhcy50cmltKCkgJiYgYWxpYXMudHJpbSgpICE9PSB0aGlzLmJ1aWxkQWxpYXNGb3JUYWJsZSh0YWJsZSk7XG4gIH1cbiAgb25GaWVsZEZ1bmN0aW9uTmFtZUNoYW5nZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZmllbGRGdW5jdGlvbkRyYWZ0LmZ1bmN0aW9uTmFtZSkge1xuICAgICAgdGhpcy5maWVsZEZ1bmN0aW9uRHJhZnQuZnVuY3Rpb25BbGlhcyA9IEVNUFRZX1ZBTFVFO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzZWxlY3RlZENvbHVtbiA9IHRoaXMucmVzb2x2ZUNvbHVtbk9wdGlvbih0aGlzLmZpZWxkRnVuY3Rpb25EcmFmdC5jb2x1bW4pO1xuICAgIGlmIChcbiAgICAgIHNlbGVjdGVkQ29sdW1uICYmXG4gICAgICAhdGhpcy5maWx0ZXJGdW5jdGlvblNlbGVjdGFibGVDb2x1bW5zKHRoaXMuZmllbGRGdW5jdGlvbkRyYWZ0LmZ1bmN0aW9uTmFtZSlcbiAgICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS52YWx1ZSlcbiAgICAgICAgLmluY2x1ZGVzKHNlbGVjdGVkQ29sdW1uLnZhbHVlKVxuICAgICkge1xuICAgICAgdGhpcy5maWVsZEZ1bmN0aW9uRHJhZnQuZnVuY3Rpb25OYW1lID0gRU1QVFlfVkFMVUU7XG4gICAgICB0aGlzLmZpZWxkRnVuY3Rpb25EcmFmdC5mdW5jdGlvbkFsaWFzID0gRU1QVFlfVkFMVUU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5maWVsZEZ1bmN0aW9uRHJhZnQuZnVuY3Rpb25BbGlhcy50cmltKCkpIHtcbiAgICAgIHRoaXMuZmllbGRGdW5jdGlvbkRyYWZ0LmZ1bmN0aW9uQWxpYXMgPSB0aGlzLmJ1aWxkRmllbGRGdW5jdGlvbkFsaWFzKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgYnVpbGRGdW5jdGlvbkFsaWFzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5yZXNvbHZlQ29sdW1uT3B0aW9uKHRoaXMuZmllbGRGdW5jdGlvbkRyYWZ0LmNvbHVtbik7XG4gICAgY29uc3QgYmFzZSA9IGNvbHVtbj8udGV4dCA/PyB0aGlzLmZpZWxkRnVuY3Rpb25EcmFmdC5jb2x1bW4gPz8gRU1QVFlfVkFMVUU7XG4gICAgY29uc3Qgc3VmZml4ID0gdGhpcy5zbHVnaWZ5KGJhc2UpO1xuICAgIHJldHVybiBzdWZmaXhcbiAgICAgID8gYCR7dGhpcy5maWVsZEZ1bmN0aW9uRHJhZnQuZnVuY3Rpb25OYW1lfV8ke3N1ZmZpeH1gXG4gICAgICA6IHRoaXMuZmllbGRGdW5jdGlvbkRyYWZ0LmZ1bmN0aW9uTmFtZTtcbiAgfVxuICBwcml2YXRlIGJ1aWxkRmllbGRGdW5jdGlvbkFsaWFzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRGdW5jdGlvbkFsaWFzKCk7XG4gIH1cbiAgcHJpdmF0ZSBidWlsZEZpZWxkRnVuY3Rpb25EcmFmdCgpOiBEeW5hbWljVmlld0J1aWxkZXJGaWVsZEZ1bmN0aW9uIHwgbnVsbCB7XG4gICAgY29uc3QgZnVuY3Rpb25OYW1lID0gdGhpcy5maWVsZEZ1bmN0aW9uRHJhZnQuZnVuY3Rpb25OYW1lLnRyaW0oKTtcbiAgICBpZiAoIWZ1bmN0aW9uTmFtZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICBhbGlhczogKFxuICAgICAgICB0aGlzLmZpZWxkRnVuY3Rpb25EcmFmdC5mdW5jdGlvbkFsaWFzIHx8IHRoaXMuYnVpbGRGaWVsZEZ1bmN0aW9uQWxpYXMoKVxuICAgICAgKS50cmltKCksXG4gICAgfTtcbiAgfVxuICBwcml2YXRlIHBhdGNoRmllbGRNb2RhbERyYWZ0KFxuICAgIGNvbHVtbjogc3RyaW5nLFxuICAgIHBhdGNoOiBQYXJ0aWFsPER5bmFtaWNWaWV3QnVpbGRlckZpZWxkPlxuICApOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5maWVsZE1vZGFsRHJhZnRzID0gdGhpcy5zdGF0ZVNlcnZpY2UuZmllbGRNb2RhbERyYWZ0cy5tYXAoKGl0ZW0pID0+XG4gICAgICBpdGVtLmNvbHVtbiA9PT0gY29sdW1uXG4gICAgICAgID8ge1xuICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgLi4ucGF0Y2gsXG4gICAgICAgIH1cbiAgICAgICAgOiBpdGVtXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIG1lcmdlTGVnYWN5RnVuY3Rpb25zSW50b0ZpZWxkcyhcbiAgICBmaWVsZHM6IER5bmFtaWNWaWV3QnVpbGRlckZpZWxkW10sXG4gICAgZnVuY3Rpb25zOiBEeW5hbWljVmlld0J1aWxkZXJGdW5jdGlvbltdXG4gICk6IER5bmFtaWNWaWV3QnVpbGRlckZpZWxkW10ge1xuICAgIGNvbnN0IGZpZWxkQnlDb2x1bW4gPSBuZXcgTWFwKGZpZWxkcy5tYXAoKGl0ZW0pID0+IFtpdGVtLmNvbHVtbiwgeyAuLi5pdGVtIH1dKSk7XG5cbiAgICBmdW5jdGlvbnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudCA9IGZpZWxkQnlDb2x1bW4uZ2V0KGl0ZW0uY29sdW1uKSA/PyB7IGNvbHVtbjogaXRlbS5jb2x1bW4gfTtcbiAgICAgIGN1cnJlbnQuZnVuY3Rpb24gPz89IHtcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBpdGVtLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgYWxpYXM6IGl0ZW0uYWxpYXMsXG4gICAgICB9O1xuICAgICAgZmllbGRCeUNvbHVtbi5zZXQoaXRlbS5jb2x1bW4sIGN1cnJlbnQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oZmllbGRCeUNvbHVtbi52YWx1ZXMoKSk7XG4gIH1cbiAgcHJpdmF0ZSBleHRyYWN0RnVuY3Rpb25zRnJvbUZpZWxkcyhcbiAgICBmaWVsZHM6IER5bmFtaWNWaWV3QnVpbGRlckZpZWxkW11cbiAgKTogRHluYW1pY1ZpZXdCdWlsZGVyRnVuY3Rpb25bXSB7XG4gICAgcmV0dXJuIGZpZWxkc1xuICAgICAgLmZpbHRlcigoaXRlbSkgPT4gISFpdGVtLmZ1bmN0aW9uPy5mdW5jdGlvbk5hbWU/LnRyaW0oKSlcbiAgICAgIC5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgIGZ1bmN0aW9uTmFtZTogaXRlbS5mdW5jdGlvbj8uZnVuY3Rpb25OYW1lPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICAgIGNvbHVtbjogaXRlbS5jb2x1bW4sXG4gICAgICAgIGFsaWFzOlxuICAgICAgICAgIGl0ZW0uZnVuY3Rpb24/LmFsaWFzPy50cmltKCkgfHwgLy8gTk9TT05BUiAtIGVtcHR5IHN0cmluZyBmYWxsYmFjayBpcyBpbnRlbnRpb25hbFxuICAgICAgICAgIGl0ZW0uYWxpYXM/LnRyaW0oKSB8fCAvLyBOT1NPTkFSIC0gZW1wdHkgc3RyaW5nIGZhbGxiYWNrIGlzIGludGVudGlvbmFsXG4gICAgICAgICAgdGhpcy5zbHVnaWZ5KGAke2l0ZW0uZnVuY3Rpb24/LmZ1bmN0aW9uTmFtZSA/PyBFTVBUWV9WQUxVRX1fJHtpdGVtLmNvbHVtbn1gKSxcbiAgICAgIH0pKTtcbiAgfVxuICBwcml2YXRlIHNsdWdpZnkodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNsdWdpZnkodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgZGVkdXBsaWNhdGVCeUtleTxUPihcbiAgICBpdGVtczogVFtdLFxuICAgIGtleVJlc29sdmVyOiAoaXRlbTogVCkgPT4gc3RyaW5nXG4gICk6IFRbXSB7XG4gICAgcmV0dXJuIGRlZHVwbGljYXRlQnlLZXkoaXRlbXMsIGtleVJlc29sdmVyKTtcbiAgfVxuICBwcml2YXRlIGh1bWFuaXplS2V5KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB2YWx1ZVxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC5zcGxpdChcIl9cIilcbiAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBpdGVtLnNsaWNlKDEpKVxuICAgICAgLmpvaW4oXCIgXCIpO1xuICB9XG4gIHByaXZhdGUgaW5zdGFudFdpdGhGYWxsYmFjayhrZXk6IHN0cmluZywgZmFsbGJhY2s6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdHJhbnNsYXRlZCA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoa2V5KTtcbiAgICByZXR1cm4gdHJhbnNsYXRlZCAmJiB0cmFuc2xhdGVkICE9PSBrZXkgPyB0cmFuc2xhdGVkIDogZmFsbGJhY2s7XG4gIH1cbiAgcHJpdmF0ZSBidWlsZEZpbHRlckZyb21EcmFmdCgpOiBEeW5hbWljVmlld0J1aWxkZXJGaWx0ZXIgfCBudWxsIHsgLy8gTk9TT05BUiAtIGNvbXBsZXhpdHk6IGV4dHJhY3Rpb24gd291bGQgcmlzayBiZWhhdmlvciBjaGFuZ2VcbiAgICBpZiAodGhpcy5maWx0ZXJNb2RhbE1vZGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTikge1xuICAgICAgY29uc3QgZG9tYWluRXhwcmVzc2lvbiA9IHRoaXMuZmlsdGVyRHJhZnQuZG9tYWluRXhwcmVzc2lvbi50cmltKCk7XG5cbiAgICAgIGlmICghZG9tYWluRXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sdW1uOiBFTVBUWV9WQUxVRSxcbiAgICAgICAgb3BlcmF0b3I6IEVNUFRZX1ZBTFVFLFxuICAgICAgICBjb25uZWN0b3I6IHRoaXMuZmlsdGVyRHJhZnQuY29ubmVjdG9yLFxuICAgICAgICBvcHRpb25hbDogdGhpcy5maWx0ZXJEcmFmdC5vcHRpb25hbCxcbiAgICAgICAgdmFsdWVUeXBlOiBGSUxURVJfTU9ERV9ET01BSU4sXG4gICAgICAgIGRvbWFpbkV4cHJlc3Npb24sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICghdGhpcy5maWx0ZXJEcmFmdC5jb2x1bW4gfHwgIXRoaXMuZmlsdGVyRHJhZnQub3BlcmF0b3IpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHQ6IER5bmFtaWNWaWV3QnVpbGRlckZpbHRlciA9IHtcbiAgICAgIGNvbHVtbjogdGhpcy5maWx0ZXJEcmFmdC5jb2x1bW4sXG4gICAgICBvcGVyYXRvcjogdGhpcy5maWx0ZXJEcmFmdC5vcGVyYXRvcixcbiAgICAgIGNvbm5lY3RvcjogdGhpcy5maWx0ZXJEcmFmdC5jb25uZWN0b3IsXG4gICAgICBvcHRpb25hbDogdGhpcy5maWx0ZXJEcmFmdC5vcHRpb25hbCxcbiAgICAgIHZhbHVlVHlwZTogdGhpcy5maWx0ZXJOZWVkc1ZhbHVlID8gdGhpcy5maWx0ZXJEcmFmdC52YWx1ZVR5cGUgOiBERUZBVUxUX0ZJTFRFUl9WQUxVRV9UWVBFLFxuICAgIH07XG5cbiAgICBpZiAoIXRoaXMuZmlsdGVyTmVlZHNWYWx1ZSkge1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmlsdGVyRHJhZnQudmFsdWVUeXBlID09PSBcInBhcmFtZXRlclwiKSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJOYW1lID0gdGhpcy5maWx0ZXJEcmFmdC5wYXJhbWV0ZXJOYW1lLnRyaW0oKTtcblxuICAgICAgaWYgKCFwYXJhbWV0ZXJOYW1lKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBuZXh0LnBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXJOYW1lO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmlsdGVyRHJhZnQub3BlcmF0b3IgPT09IFwiSU5cIikge1xuICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5wYXJzZU11bHRpVmFsdWVUZXh0KHRoaXMuZmlsdGVyRHJhZnQudmFsdWVzVGV4dCk7XG5cbiAgICAgIGlmICghdmFsdWVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbmV4dC52YWx1ZXMgPSB2YWx1ZXM7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWx0ZXJEcmFmdC5vcGVyYXRvciA9PT0gXCJCRVRXRUVOXCIpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5maWx0ZXJEcmFmdC5iZXR3ZWVuU3RhcnQudHJpbSgpO1xuICAgICAgY29uc3QgZW5kID0gdGhpcy5maWx0ZXJEcmFmdC5iZXR3ZWVuRW5kLnRyaW0oKTtcblxuICAgICAgaWYgKCFzdGFydCB8fCAhZW5kKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBuZXh0LnZhbHVlcyA9IFtzdGFydCwgZW5kXTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5maWx0ZXJEcmFmdC52YWx1ZS50cmltKCk7XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBuZXh0LnZhbHVlID0gdmFsdWU7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlRmlsdGVyRHJhZnRTcWxQcmV2aWV3KCk6IHN0cmluZyB7XG4gICAgY29uc3QgbmV4dCA9IHRoaXMuYnVpbGRGaWx0ZXJGcm9tRHJhZnQoKTtcblxuICAgIGlmICghbmV4dCkge1xuICAgICAgcmV0dXJuIEVNUFRZX1ZBTFVFO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlc29sdmVGaWx0ZXJTcWwobmV4dCk7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlRmlsdGVyRHJhZnREaXNwbGF5VmFsdWUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5maWx0ZXJNb2RhbE1vZGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTikge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyRHJhZnQuZG9tYWluRXhwcmVzc2lvbi50cmltKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmlsdGVyRHJhZnQudmFsdWVUeXBlID09PSBcInBhcmFtZXRlclwiKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXJEcmFmdC5wYXJhbWV0ZXJOYW1lXG4gICAgICAgID8gYDoke3RoaXMuZmlsdGVyRHJhZnQucGFyYW1ldGVyTmFtZX1gXG4gICAgICAgIDogRU1QVFlfVkFMVUU7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpbHRlckRyYWZ0Lm9wZXJhdG9yID09PSBcIklOXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlc1RleHQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpbHRlckRyYWZ0Lm9wZXJhdG9yID09PSBcIkJFVFdFRU5cIikge1xuICAgICAgcmV0dXJuIFt0aGlzLmZpbHRlckRyYWZ0LmJldHdlZW5TdGFydCwgdGhpcy5maWx0ZXJEcmFmdC5iZXR3ZWVuRW5kXVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5qb2luKFwiIC0gXCIpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZmlsdGVyTmVlZHNWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LnN0YXRlcy5vcHRpb25hbGAsXG4gICAgICAgIFwiU2VtIHZhbG9yXCJcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCB7IFZpc3VhbFNxbEVkaXRvckNvbXBvbmVudCBhcyBEeW5hbWljVmlld0J1aWxkZXJDb21wb25lbnQgfTtcbiIsIjxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlclwiIFthdHRyLmFyaWEtYnVzeV09XCJsb2FkaW5nXCI+XG4gIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fdG9vbGJhclwiPlxuICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fdG9vbGJhci1jb3B5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3RpdGxlXCI+XG4gICAgICAgIHt7IGNvbmZpZy5tZXRhZGF0YS50aXRsZSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3N1YnRpdGxlXCI+XG4gICAgICAgIHt7IGNvbmZpZy5tZXRhZGF0YS5kZXNjcmlwdGlvbiB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX190b29sYmFyLWFjdGlvbnNcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Rvb2xiYXItbGFiZWxcIj5cbiAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLmxheW91dE1vZGUnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNkYy1zZWxlY3QtYnV0dG9uXG4gICAgICAgIFtpdGVtc109XCJsYXlvdXRNb2RlSXRlbXNcIlxuICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZExheW91dE1vZGVJdGVtc1wiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uTGF5b3V0TW9kZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgID48L3NkYy1zZWxlY3QtYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcHJldmlldy10b2dnbGVcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlUHJldmlldygpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1wcmVzc2VkXT1cInByZXZpZXdWaXNpYmxlXCJcbiAgICAgICAgW3RpdGxlXT1cInByZXZpZXdUb2dnbGVMYWJlbFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicHJldmlld1RvZ2dsZUxhYmVsXCJcbiAgICAgICAgPlxuICAgICAgICA8aVxuICAgICAgICAgIFtjbGFzc109XCJwcmV2aWV3VmlzaWJsZSA/ICdmYXMgZmEtZXllLXNsYXNoJyA6ICdmYXMgZmEtZXllJ1wiXG4gICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgPjwvaT5cbiAgICAgICAge3sgcHJldmlld1RvZ2dsZUxhYmVsIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgQGlmIChzZWxlY3Rpb25Nb2RhbFZpc2libGUpIHtcbiAgICA8c2RjLW1vZGFsXG4gICAgICBbdmlzaWJsZV09XCJzZWxlY3Rpb25Nb2RhbFZpc2libGVcIlxuICAgICAgKHZpc2libGVDaGFuZ2UpPVwiJGV2ZW50ID8gKHNlbGVjdGlvbk1vZGFsVmlzaWJsZSA9IHRydWUpIDogY2xvc2VTZWxlY3Rpb25Nb2RhbCgpXCJcbiAgICAgIFtoZWFkZXJdPVwic2VsZWN0aW9uTW9kYWxUaXRsZVwiXG4gICAgICBbd2lkdGhdPVwibW9kYWxEaW1lbnNpb25zLnNlbGVjdGlvbi53aWR0aFwiXG4gICAgICBbaGVpZ2h0XT1cIm1vZGFsRGltZW5zaW9ucy5zZWxlY3Rpb24uaGVpZ2h0XCJcbiAgICAgIFttYXhpbWl6YWJsZV09XCJmYWxzZVwiXG4gICAgICBbZm9vdGVyQnV0dG9uc109XCJbXVwiXG4gICAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXNoZWxsIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zaGVsbC0tZnVsbFxuICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tZmxvdyBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3RhZ2VcIlxuICAgICAgICA+XG4gICAgICAgIEBpZiAoc2VsZWN0aW9uTW9kYWxNb2RlID09PSAndGFibGVzJykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtaW5saW5lLXN1cmZhY2VcIj5cbiAgICAgICAgICAgIDxzZGMtdGV4dGJveFxuICAgICAgICAgICAgICBbbGFiZWxdPVwibW9kYWxTZWFyY2hMYWJlbFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJtb2RhbFNlYXJjaFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0aW9uTW9kYWxTZWFyY2hcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3Rpb25Nb2RhbFNlYXJjaCA9ICRldmVudFwiXG4gICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICA+PC9zZGMtdGV4dGJveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1jYXJkIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1jYXJkLS1zZWN0aW9uXG4gICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdGFnZS1ib2R5XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLXRhYmxlXG4gICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi10YWJsZS0tY2hvb3NlclxuICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tdGFibGUtLWZsdWlkXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1oZWFkXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tY29sXCI+XG4gICAgICAgICAgICAgICAgICB7eyBtb2RhbE5hbWVMYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLWNvbFwiPlxuICAgICAgICAgICAgICAgICAge3sgbW9kYWxUeXBlTGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1jb2wgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1jb2wtLXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgICAge3sgbW9kYWxTZWxlY3RMYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tYm9keVwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKHJvdyBvZiBzZWxlY3Rpb25Nb2RhbFJvd3M7IHRyYWNrIHRyYWNrQnlJZCgkaW5kZXgsIHJvdykpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLXJvd1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5keW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLXJvdy0tc2VsZWN0ZWRdPVwicm93LnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIucm9sZV09XCInYnV0dG9uJ1wiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cInJvdy5kaXNhYmxlZCA/IC0xIDogMFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcHJlc3NlZF09XCJyb3cuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cInJvdy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZWxlY3Rpb25Nb2RhbFJvdyhyb3cuaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25TZWxlY3RhYmxlUm93S2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChyb3cudGFibGVMYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLXBhdGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChyb3cucGF0aFR5cGUgPT09ICd0YWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHJvdy5kYkxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tZGJcIj57eyByb3cuZGJMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChyb3cuZGJMYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLXNlcGFyYXRvclwiPi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi10YWJsZS1sYWJlbFwiPnt7IHJvdy50YWJsZUxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tdGFibGUtbGFiZWxcIj57eyByb3cudGFibGVMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tc2VwYXJhdG9yXCI+Ljwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tYWNjZW50XCI+e3sgcm93Lm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJvdy5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tY2VsbCBkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLWNlbGwtLW1ldGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyByb3cubWV0YSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKHJvdy5ub3RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tbm90ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByb3cubm90ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLWNlbGwgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1jZWxsLS1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLW1hcmtlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1tYXJrZXItLXNlbGVjdGVkXT1cInJvdy5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2hlY2tcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZCBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZC0tc2VjdGlvblxuICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fcGlja2xpc3Qtc2hlbGwgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN0YWdlLWJvZHlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPHNkYy1waWNrbGlzdFxuICAgICAgICAgICAgICBbaXRlbXNdPVwic2VsZWN0aW9uTW9kYWxQaWNrbGlzdEl0ZW1zXCJcbiAgICAgICAgICAgICAgW3NlbGVjdGVkSWRzXT1cInNlbGVjdGlvbk1vZGFsU2VsZWN0ZWRQaWNrbGlzdElkc1wiXG4gICAgICAgICAgICAgIGlkS2V5PVwiaWRcIlxuICAgICAgICAgICAgICB0aXRsZUtleT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgdGl0bGVQcmVmaXhLZXk9XCJ0aXRsZVByZWZpeFwiXG4gICAgICAgICAgICAgIHRpdGxlU3VmZml4S2V5PVwidGl0bGVTdWZmaXhcIlxuICAgICAgICAgICAgICB0aXRsZVByZWZpeENvbG9yS2V5PVwidGl0bGVQcmVmaXhDb2xvclwiXG4gICAgICAgICAgICAgIHRpdGxlU3VmZml4Q29sb3JLZXk9XCJ0aXRsZVN1ZmZpeENvbG9yXCJcbiAgICAgICAgICAgICAgYmFkZ2VLZXk9XCJiYWRnZVwiXG4gICAgICAgICAgICAgIGJhZGdlQ29sb3JLZXk9XCJiYWRnZUNvbG9yXCJcbiAgICAgICAgICAgICAgW3Nob3dQYWdpbmF0b3JdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbc2hvd0l0ZW1JY29uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW3Nob3dTZWxlY3Rpb25Db3VudGVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2F1dG9SZXNpemVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5tb2RhbHMuc2VhcmNoUGxhY2Vob2xkZXInXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGVkSWRzQ2hhbmdlKT1cIm9uU2VsZWN0aW9uTW9kYWxTZWxlY3RlZElkc0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L3NkYy1waWNrbGlzdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGZvb3RlciBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1mb290ZXJcIj5cbiAgICAgICAgPHNkYy1idXR0b25cbiAgICAgICAgICBbbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jYW5jZWwnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgcHJpb3JpdHk9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgIChjbGljayk9XCJjbG9zZVNlbGVjdGlvbk1vZGFsKClcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImNsb3NlU2VsZWN0aW9uTW9kYWwoKVwiXG4gICAgICAgID48L3NkYy1idXR0b24+XG4gICAgICAgIDxzZGMtYnV0dG9uXG4gICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY29uZmlybVNlbGVjdGlvbicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAoY2xpY2spPVwiY29uZmlybVNlbGVjdGlvbk1vZGFsKClcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImNvbmZpcm1TZWxlY3Rpb25Nb2RhbCgpXCJcbiAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvc2RjLW1vZGFsPlxuICB9XG5cbiAgQGlmIChzb3VyY2VNb2RhbFZpc2libGUpIHtcbiAgICA8c2RjLW1vZGFsXG4gICAgICBbdmlzaWJsZV09XCJzb3VyY2VNb2RhbFZpc2libGVcIlxuICAgICAgKHZpc2libGVDaGFuZ2UpPVwiJGV2ZW50ID8gKHNvdXJjZU1vZGFsVmlzaWJsZSA9IHRydWUpIDogY2xvc2VTb3VyY2VNb2RhbCgpXCJcbiAgICAgIFtoZWFkZXJdPVwic291cmNlTW9kYWxUaXRsZVwiXG4gICAgICBbd2lkdGhdPVwibW9kYWxEaW1lbnNpb25zLnNvdXJjZS53aWR0aFwiXG4gICAgICBbaGVpZ2h0XT1cIm1vZGFsRGltZW5zaW9ucy5zb3VyY2UuaGVpZ2h0XCJcbiAgICAgIFttYXhpbWl6YWJsZV09XCJmYWxzZVwiXG4gICAgICBbZm9vdGVyQnV0dG9uc109XCJbXVwiXG4gICAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXNoZWxsIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1tb2RhbFwiPlxuICAgICAgICA8c2RjLXRpbWVsaW5lXG4gICAgICAgICAgW2l0ZW1zXT1cInNvdXJjZU1vZGFsVGltZWxpbmVJdGVtc1wiXG4gICAgICAgICAgW2FjdGl2ZUluZGV4XT1cInNvdXJjZU1vZGFsQ29uZmlndXJhdGlvblN0ZXBBY3RpdmUgPyAxIDogMFwiXG4gICAgICAgICAgW2ludGVyYWN0aXZlXT1cInRydWVcIlxuICAgICAgICAgIFtzaG93RGVzY3JpcHRpb25zXT1cImZhbHNlXCJcbiAgICAgICAgICBbYXJpYUxhYmVsXT1cInNvdXJjZU1vZGFsVGltZWxpbmVBcmlhTGFiZWxcIlxuICAgICAgICAgIChzdGVwU2VsZWN0KT1cIm9uU291cmNlTW9kYWxUaW1lbGluZVN0ZXBTZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgID48L3NkYy10aW1lbGluZT5cbiAgICAgICAgQGlmIChzb3VyY2VNb2RhbFNlbGVjdGlvblN0ZXBBY3RpdmUpIHtcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zaGVsbCBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc2hlbGwtLWZ1bGxcbiAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1mbG93IGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdGFnZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQtLXNlY3Rpb25cbiAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fcGlja2xpc3Qtc2hlbGwgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN0YWdlLWJvZHlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzZGMtcGlja2xpc3RcbiAgICAgICAgICAgICAgICBbaXRlbXNdPVwic291cmNlTW9kYWxQaWNrbGlzdEl0ZW1zXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWRJZHNdPVwic291cmNlTW9kYWxTZWxlY3RlZFBpY2tsaXN0SWRzXCJcbiAgICAgICAgICAgICAgICBpZEtleT1cImlkXCJcbiAgICAgICAgICAgICAgICB0aXRsZUtleT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICB0aXRsZVByZWZpeEtleT1cInRpdGxlUHJlZml4XCJcbiAgICAgICAgICAgICAgICB0aXRsZVN1ZmZpeEtleT1cInRpdGxlU3VmZml4XCJcbiAgICAgICAgICAgICAgICB0aXRsZVByZWZpeENvbG9yS2V5PVwidGl0bGVQcmVmaXhDb2xvclwiXG4gICAgICAgICAgICAgICAgdGl0bGVTdWZmaXhDb2xvcktleT1cInRpdGxlU3VmZml4Q29sb3JcIlxuICAgICAgICAgICAgICAgIGJhZGdlS2V5PVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgIGJhZGdlQ29sb3JLZXk9XCJiYWRnZUNvbG9yXCJcbiAgICAgICAgICAgICAgICBbc2hvd1BhZ2luYXRvcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dJdGVtSWNvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dTZWxlY3Rpb25Db3VudGVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbYXV0b1Jlc2l6ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcubW9kYWxzLnNlYXJjaFBsYWNlaG9sZGVyJ1wiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkSWRzQ2hhbmdlKT1cIm9uU291cmNlTW9kYWxTZWxlY3RlZElkc0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPjwvc2RjLXBpY2tsaXN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWZpZWxkIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1maWVsZC0tc3RyZXRjaFxuICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fZmllbGQtY29uZmlnLXNoZWxsXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZCBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZC0tc2VjdGlvblxuICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1saXN0LXNoZWxsXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NvdXJjZS1jb25maWctbGlzdFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2Ygc291cmNlTW9kYWxDb25maWd1cmVkSXRlbXM7IHRyYWNrIHRyYWNrQnlJZCgkaW5kZXgsIGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NvdXJjZS1jb25maWctcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc291cmNlLWNvbmZpZy1tYWluXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi10YWJsZS1sYWJlbFwiPnt7IGl0ZW0uZGJMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1zZXBhcmF0b3JcIj4uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLWFjY2VudFwiPnt7IGl0ZW0udGFibGVMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc291cmNlLWNvbmZpZy1jb250cm9sc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzZGMtdGV4dGJveFxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLmFsaWFzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJpdGVtLmFsaWFzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU291cmNlTW9kYWxBbGlhc0NoYW5nZShpdGVtLnRhYmxlLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF4bGVuZ3RoXT1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9zZGMtdGV4dGJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBmb290ZXIgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZm9vdGVyXCI+XG4gICAgICAgIDxzZGMtYnV0dG9uXG4gICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY2FuY2VsJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIHByaW9yaXR5PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAoY2xpY2spPVwiY2xvc2VTb3VyY2VNb2RhbCgpXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJjbG9zZVNvdXJjZU1vZGFsKClcIlxuICAgICAgICA+PC9zZGMtYnV0dG9uPlxuICAgICAgICBAaWYgKHNvdXJjZU1vZGFsU2VsZWN0aW9uU3RlcEFjdGl2ZSAmJiBzb3VyY2VNb2RhbENhblByb2NlZWQpIHtcbiAgICAgICAgICA8c2RjLWJ1dHRvblxuICAgICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMubmV4dFN0ZXAnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWR2YW5jZVNvdXJjZU1vZGFsU3RlcCgpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImFkdmFuY2VTb3VyY2VNb2RhbFN0ZXAoKVwiXG4gICAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKHNvdXJjZU1vZGFsQ29uZmlndXJhdGlvblN0ZXBBY3RpdmUpIHtcbiAgICAgICAgICA8c2RjLWJ1dHRvblxuICAgICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuc2F2ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc291cmNlTW9kYWxDYW5Qcm9jZWVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzYXZlU291cmNlTW9kYWwoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzYXZlU291cmNlTW9kYWwoKVwiXG4gICAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9zZGMtbW9kYWw+XG4gIH1cblxuICBAaWYgKGpvaW5Nb2RhbFZpc2libGUpIHtcbiAgICA8c2RjLW1vZGFsXG4gICAgICBbdmlzaWJsZV09XCJqb2luTW9kYWxWaXNpYmxlXCJcbiAgICAgICh2aXNpYmxlQ2hhbmdlKT1cIiRldmVudCA/IChqb2luTW9kYWxWaXNpYmxlID0gdHJ1ZSkgOiBjbG9zZUpvaW5Nb2RhbCgpXCJcbiAgICAgIFtoZWFkZXJdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuY2FyZHMuam9pbnMudGl0bGUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICBbd2lkdGhdPVwibW9kYWxEaW1lbnNpb25zLmpvaW4ud2lkdGhcIlxuICAgICAgW2hlaWdodF09XCJtb2RhbERpbWVuc2lvbnMuam9pbi5oZWlnaHRcIlxuICAgICAgW21heGltaXphYmxlXT1cImZhbHNlXCJcbiAgICAgIFtmb290ZXJCdXR0b25zXT1cIltdXCJcbiAgICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc2hlbGwgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2pvaW4tbW9kYWxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19qb2luLW1vZGFsLXRvcFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeSBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5LWxhYmVsXCI+XG4gICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy5sZWZ0JykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5LXZhbHVlXG4gICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktdmFsdWUtLXBhdGhcIlxuICAgICAgICAgICAgICA+e3sgam9pblNvdXJjZVN1bW1hcnkgfX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1maWVsZFxuICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZmllbGQtLWNvbXBhY3RcbiAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPHNkYy1jb21ib2JveFxuICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMub3BlcmF0b3InXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiam9pbkRyYWZ0Lm9wZXJhdG9yXCJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiam9pbkRyYWZ0Lm9wZXJhdG9yID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwiam9pbk9wZXJhdG9yT3B0aW9uc1wiXG4gICAgICAgICAgICAgIFthcHBlbmRUb109XCJvdmVybGF5QXBwZW5kVGFyZ2V0XCJcbiAgICAgICAgICAgICAgW3pJbmRleF09XCJvdmVybGF5WkluZGV4XCJcbiAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgID48L3NkYy1jb21ib2JveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnkgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS1sYWJlbFwiPlxuICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMucmlnaHQnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktdmFsdWVcbiAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS12YWx1ZS0tcGF0aFwiXG4gICAgICAgICAgICAgID57eyBqb2luVGFyZ2V0U3VtbWFyeSB9fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1ncmlkIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1ncmlkLS1maXRcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1waWNrZXIgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXBpY2tlci0tc3RyZXRjaFxuICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZCBkeW5hbWljLXZpZXctYnVpbGRlcl9fcGlja2xpc3Qtc2hlbGxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1wYW5lbC10aXRsZVwiPlxuICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMubGVmdCcpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzZGMtcGlja2xpc3RcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cImpvaW5Tb3VyY2VQaWNrbGlzdEl0ZW1zXCJcbiAgICAgICAgICAgICAgW3NlbGVjdGVkSWRzXT1cImpvaW5Tb3VyY2VTZWxlY3RlZFBpY2tsaXN0SWRzXCJcbiAgICAgICAgICAgICAgaWRLZXk9XCJpZFwiXG4gICAgICAgICAgICAgIHRpdGxlS2V5PVwidGl0bGVcIlxuICAgICAgICAgICAgICB0aXRsZVByZWZpeEtleT1cInRpdGxlUHJlZml4XCJcbiAgICAgICAgICAgICAgdGl0bGVTdWZmaXhLZXk9XCJ0aXRsZVN1ZmZpeFwiXG4gICAgICAgICAgICAgIHRpdGxlUHJlZml4Q29sb3JLZXk9XCJ0aXRsZVByZWZpeENvbG9yXCJcbiAgICAgICAgICAgICAgdGl0bGVTdWZmaXhDb2xvcktleT1cInRpdGxlU3VmZml4Q29sb3JcIlxuICAgICAgICAgICAgICBiYWRnZUtleT1cImJhZGdlXCJcbiAgICAgICAgICAgICAgYmFkZ2VDb2xvcktleT1cImJhZGdlQ29sb3JcIlxuICAgICAgICAgICAgICBbc2hvd1BhZ2luYXRvcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtzaG93SXRlbUljb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbc2hvd1NlbGVjdGlvbkNvdW50ZXJdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbYXV0b1Jlc2l6ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFttYXhWaXNpYmxlU2VsZWN0ZWRJdGVtc109XCIxXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcubW9kYWxzLnNlYXJjaFBsYWNlaG9sZGVyJ1wiXG4gICAgICAgICAgICAgIChzZWxlY3RlZElkc0NoYW5nZSk9XCJvbkpvaW5Tb3VyY2VTZWxlY3RlZElkc0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L3NkYy1waWNrbGlzdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1waWNrZXIgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXBpY2tlci0tc3RyZXRjaFxuICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZCBkeW5hbWljLXZpZXctYnVpbGRlcl9fcGlja2xpc3Qtc2hlbGxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1wYW5lbC10aXRsZVwiPlxuICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMucmlnaHQnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c2RjLXBpY2tsaXN0XG4gICAgICAgICAgICAgIFtpdGVtc109XCJqb2luVGFyZ2V0UGlja2xpc3RJdGVtc1wiXG4gICAgICAgICAgICAgIFtzZWxlY3RlZElkc109XCJqb2luVGFyZ2V0U2VsZWN0ZWRQaWNrbGlzdElkc1wiXG4gICAgICAgICAgICAgIGlkS2V5PVwiaWRcIlxuICAgICAgICAgICAgICB0aXRsZUtleT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgdGl0bGVQcmVmaXhLZXk9XCJ0aXRsZVByZWZpeFwiXG4gICAgICAgICAgICAgIHRpdGxlU3VmZml4S2V5PVwidGl0bGVTdWZmaXhcIlxuICAgICAgICAgICAgICB0aXRsZVByZWZpeENvbG9yS2V5PVwidGl0bGVQcmVmaXhDb2xvclwiXG4gICAgICAgICAgICAgIHRpdGxlU3VmZml4Q29sb3JLZXk9XCJ0aXRsZVN1ZmZpeENvbG9yXCJcbiAgICAgICAgICAgICAgYmFkZ2VLZXk9XCJiYWRnZVwiXG4gICAgICAgICAgICAgIGJhZGdlQ29sb3JLZXk9XCJiYWRnZUNvbG9yXCJcbiAgICAgICAgICAgICAgW3Nob3dQYWdpbmF0b3JdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbc2hvd0l0ZW1JY29uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW3Nob3dTZWxlY3Rpb25Db3VudGVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2F1dG9SZXNpemVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbbWF4VmlzaWJsZVNlbGVjdGVkSXRlbXNdPVwiMVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLm1vZGFscy5zZWFyY2hQbGFjZWhvbGRlcidcIlxuICAgICAgICAgICAgICAoc2VsZWN0ZWRJZHNDaGFuZ2UpPVwib25Kb2luVGFyZ2V0U2VsZWN0ZWRJZHNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9zZGMtcGlja2xpc3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGZvb3RlciBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1mb290ZXJcIj5cbiAgICAgICAgPHNkYy1idXR0b25cbiAgICAgICAgICBbbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jYW5jZWwnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgcHJpb3JpdHk9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgIChjbGljayk9XCJjbG9zZUpvaW5Nb2RhbCgpXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJjbG9zZUpvaW5Nb2RhbCgpXCJcbiAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgPHNkYy1idXR0b25cbiAgICAgICAgICBbbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5zYXZlJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuU2F2ZUpvaW5cIlxuICAgICAgICAgIChjbGljayk9XCJzYXZlSm9pbigpXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzYXZlSm9pbigpXCJcbiAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvc2RjLW1vZGFsPlxuICB9XG5cbiAgQGlmIChzb3J0TW9kYWxWaXNpYmxlKSB7XG4gICAgPHNkYy1tb2RhbFxuICAgICAgW3Zpc2libGVdPVwic29ydE1vZGFsVmlzaWJsZVwiXG4gICAgICAodmlzaWJsZUNoYW5nZSk9XCIkZXZlbnQgPyAoc29ydE1vZGFsVmlzaWJsZSA9IHRydWUpIDogY2xvc2VTb3J0TW9kYWwoKVwiXG4gICAgICBbaGVhZGVyXT1cInNvcnRNb2RhbFRpdGxlXCJcbiAgICAgIFt3aWR0aF09XCJtb2RhbERpbWVuc2lvbnMuc29ydC53aWR0aFwiXG4gICAgICBbaGVpZ2h0XT1cIm1vZGFsRGltZW5zaW9ucy5zb3J0LmhlaWdodFwiXG4gICAgICBbbWF4aW1pemFibGVdPVwiZmFsc2VcIlxuICAgICAgW2Zvb3RlckJ1dHRvbnNdPVwiW11cIlxuICAgICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zaGVsbCBkeW5hbWljLXZpZXctYnVpbGRlcl9fc29ydC1tb2RhbFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZmllbGRcbiAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1maWVsZC0tZnVsbFxuICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NvcnQtZGlyZWN0aW9uLWZpZWxkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1sYWJlbFwiPlxuICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLmRpcmVjdGlvbicpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNkYy1zZWxlY3QtYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zb3J0LWRpcmVjdGlvblwiXG4gICAgICAgICAgICBbaXRlbXNdPVwic29ydERpcmVjdGlvbkl0ZW1zXCJcbiAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzb2Z0XCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkU29ydERpcmVjdGlvbkl0ZW1zXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU29ydERpcmVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9zZGMtc2VsZWN0LWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1jYXJkIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1jYXJkLS1zZWN0aW9uXG4gICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtcGlja2VyIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1waWNrZXItLXN0cmV0Y2hcbiAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tZmxvdyBkeW5hbWljLXZpZXctYnVpbGRlcl9fcGlja2xpc3Qtc2hlbGxcbiAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdGFnZS1ib2R5XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPHNkYy1waWNrbGlzdFxuICAgICAgICAgICAgW2l0ZW1zXT1cInNvcnRQaWNrbGlzdEl0ZW1zXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZElkc109XCJzb3J0U2VsZWN0ZWRQaWNrbGlzdElkc1wiXG4gICAgICAgICAgICBpZEtleT1cImlkXCJcbiAgICAgICAgICAgIHRpdGxlS2V5PVwidGl0bGVcIlxuICAgICAgICAgICAgdGl0bGVQcmVmaXhLZXk9XCJ0aXRsZVByZWZpeFwiXG4gICAgICAgICAgICB0aXRsZVN1ZmZpeEtleT1cInRpdGxlU3VmZml4XCJcbiAgICAgICAgICAgIHRpdGxlUHJlZml4Q29sb3JLZXk9XCJ0aXRsZVByZWZpeENvbG9yXCJcbiAgICAgICAgICAgIHRpdGxlU3VmZml4Q29sb3JLZXk9XCJ0aXRsZVN1ZmZpeENvbG9yXCJcbiAgICAgICAgICAgIGJhZGdlS2V5PVwiYmFkZ2VcIlxuICAgICAgICAgICAgYmFkZ2VDb2xvcktleT1cImJhZGdlQ29sb3JcIlxuICAgICAgICAgICAgW3Nob3dQYWdpbmF0b3JdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW3Nob3dJdGVtSWNvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICBbc2hvd1NlbGVjdGlvbkNvdW50ZXJdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2F1dG9SZXNpemVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW21heFZpc2libGVTZWxlY3RlZEl0ZW1zXT1cIjFcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcubW9kYWxzLnNlYXJjaFBsYWNlaG9sZGVyJ1wiXG4gICAgICAgICAgICAoc2VsZWN0ZWRJZHNDaGFuZ2UpPVwib25Tb3J0U2VsZWN0ZWRJZHNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvc2RjLXBpY2tsaXN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBmb290ZXIgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZm9vdGVyXCI+XG4gICAgICAgIDxzZGMtYnV0dG9uXG4gICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY2FuY2VsJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIHByaW9yaXR5PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAoY2xpY2spPVwiY2xvc2VTb3J0TW9kYWwoKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiY2xvc2VTb3J0TW9kYWwoKVwiXG4gICAgICAgID48L3NkYy1idXR0b24+XG4gICAgICAgIDxzZGMtYnV0dG9uXG4gICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuc2F2ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhblNhdmVTb3J0XCJcbiAgICAgICAgICAoY2xpY2spPVwic2F2ZVNvcnQoKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2F2ZVNvcnQoKVwiXG4gICAgICAgID48L3NkYy1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NkYy1tb2RhbD5cbiAgfVxuXG4gIEBpZiAoZmlsdGVyTW9kYWxWaXNpYmxlKSB7XG4gICAgPHNkYy1tb2RhbFxuICAgICAgW3Zpc2libGVdPVwiZmlsdGVyTW9kYWxWaXNpYmxlXCJcbiAgICAgICh2aXNpYmxlQ2hhbmdlKT1cIiRldmVudCA/IChmaWx0ZXJNb2RhbFZpc2libGUgPSB0cnVlKSA6IGNsb3NlRmlsdGVyTW9kYWwoKVwiXG4gICAgICBbaGVhZGVyXT1cImZpbHRlck1vZGFsVGl0bGVcIlxuICAgICAgW3dpZHRoXT1cIm1vZGFsRGltZW5zaW9ucy5maWx0ZXIud2lkdGhcIlxuICAgICAgW2hlaWdodF09XCJtb2RhbERpbWVuc2lvbnMuZmlsdGVyLmhlaWdodFwiXG4gICAgICBbbWF4aW1pemFibGVdPVwiZmFsc2VcIlxuICAgICAgW2Zvb3RlckJ1dHRvbnNdPVwiW11cIlxuICAgICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zaGVsbCBkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLW1vZGFsXCI+XG4gICAgICAgIDxzZGMtdGltZWxpbmVcbiAgICAgICAgICBbaXRlbXNdPVwiZmlsdGVyTW9kYWxUaW1lbGluZUl0ZW1zXCJcbiAgICAgICAgICBbYWN0aXZlSW5kZXhdPVwiZmlsdGVyTW9kYWxSZXZpZXdTdGVwQWN0aXZlID8gMiA6IChmaWx0ZXJNb2RhbENvbmZpZ3VyYXRpb25TdGVwQWN0aXZlID8gMSA6IDApXCJcbiAgICAgICAgICBbaW50ZXJhY3RpdmVdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Nob3dEZXNjcmlwdGlvbnNdPVwiZmFsc2VcIlxuICAgICAgICAgIFthcmlhTGFiZWxdPVwiZmlsdGVyTW9kYWxUaW1lbGluZUFyaWFMYWJlbFwiXG4gICAgICAgICAgKHN0ZXBTZWxlY3QpPVwib25GaWx0ZXJNb2RhbFRpbWVsaW5lU3RlcFNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgPjwvc2RjLXRpbWVsaW5lPlxuICAgICAgICBAaWYgKGZpbHRlck1vZGFsU2VsZWN0aW9uU3RlcEFjdGl2ZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLXN0ZXBcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZCBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZC0tc2VjdGlvblxuICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItYmFzZS1zZWxlY3RvclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtcGFuZWwtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLm1vZGFscy5maWx0ZXIuc3RlcHMuc2VsZWN0LnRpdGxlJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c2RjLWluZm8tc2lnblxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWx0ZXJzLnRvb2x0aXBzLm1vZGUnXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICA+PC9zZGMtaW5mby1zaWduPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItbW9kZS1yb3dcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1tb2RlLWNvcHlcIj5cbiAgICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLm1vZGFscy5maWx0ZXIudGl0bGUnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItbW9kZS1zZWxlY3RvclwiPlxuICAgICAgICAgICAgICAgIDxzZGMtc2VsZWN0LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImZpbHRlck1vZGVJdGVtc1wiXG4gICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwic29mdFwiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZEZpbHRlck1vZGVJdGVtc1wiXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkZpbHRlck1vZGVDaGFuZ2UoJGV2ZW50WzBdPy52YWx1ZSB8fCAnY29uZGl0aW9uJylcIlxuICAgICAgICAgICAgICAgID48L3NkYy1zZWxlY3QtYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmIChmaWx0ZXJNb2RhbE1vZGUgPT09ICdjb25kaXRpb24nKSB7XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1waWNrZXJcbiAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1waWNrZXItLWZpbHRlclxuICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXBpY2tlci0tc3RyZXRjaFxuICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1mbG93XG4gICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3RhZ2UtYm9keVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQtLXNlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3BpY2tsaXN0LXNoZWxsXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzZGMtcGlja2xpc3RcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImZpbHRlck1vZGFsUGlja2xpc3RJdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZElkc109XCJmaWx0ZXJNb2RhbFNlbGVjdGVkUGlja2xpc3RJZHNcIlxuICAgICAgICAgICAgICAgICAgICBpZEtleT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGVLZXk9XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlUHJlZml4S2V5PVwidGl0bGVQcmVmaXhcIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZVN1ZmZpeEtleT1cInRpdGxlU3VmZml4XCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGVQcmVmaXhDb2xvcktleT1cInRpdGxlUHJlZml4Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZVN1ZmZpeENvbG9yS2V5PVwidGl0bGVTdWZmaXhDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgIGJhZGdlS2V5PVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgICAgICBiYWRnZUNvbG9yS2V5PVwiYmFkZ2VDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgIFthdXRvUmVzaXplXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dQYWdpbmF0b3JdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd0l0ZW1JY29uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dTZWxlY3Rpb25Db3VudGVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW21heFZpc2libGVTZWxlY3RlZEl0ZW1zXT1cIjFcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5tb2RhbHMuc2VhcmNoUGxhY2Vob2xkZXInXCJcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkSWRzQ2hhbmdlKT1cIm9uRmlsdGVyTW9kYWxTZWxlY3RlZElkc0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgID48L3NkYy1waWNrbGlzdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQtLXNlY3Rpb25cbiAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItZG9tYWluLWludHJvXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1wYW5lbC10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWx0ZXJzLmRvbWFpbkxhYmVsJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPHNkYy1pbmZvLXNpZ25cbiAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiZmlsdGVyRG9tYWluRXhwcmVzc2lvblRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidsZWZ0J1wiXG4gICAgICAgICAgICAgICAgICA+PC9zZGMtaW5mby1zaWduPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLWRvbWFpbi1ncmlkXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1kb21haW4taXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMuZG9tYWluRXhwcmVzc2lvbicpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJEb21haW5FeHByZXNzaW9uVG9vbHRpcCB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItZG9tYWluLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5LWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLmNvbm5lY3RvcicpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJDb25uZWN0b3JUb29sdGlwIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICBAaWYgKGZpbHRlck1vZGFsQ29uZmlndXJhdGlvblN0ZXBBY3RpdmUpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLXN0ZXBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItdG9vbGJhclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeSBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS0tZmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcubW9kYWxzLmZpbHRlci5zdGVwcy5jb25maWd1cmUudGl0bGUnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS12YWx1ZS0tcGF0aFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgZmlsdGVyQ29uZmlndXJhdGlvblN1bW1hcnlMYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGlua1wiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub0ZpbHRlck1vZGFsU3RlcCgnc2VsZWN0JylcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgZmlsdGVyQmFja1RvU2VsZWN0aW9uTGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIEBpZiAoZmlsdGVyTW9kYWxNb2RlID09PSAnY29uZGl0aW9uJykge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1maWVsZC0tc3RyZXRjaFxuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZFxuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZC0tc2VjdGlvblxuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLWNvbmZpZy1jYXJkXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLWNvbmZpZy1zZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXBhbmVsLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5tb2RhbHMuZmlsdGVyLnN0ZXBzLmNvbmZpZ3VyZS50aXRsZScpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPHNkYy1pbmZvLXNpZ25cbiAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmlsdGVycy50b29sdGlwcy5jb25maWd1cmUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9zZGMtaW5mby1zaWduPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1ncmlkIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1ncmlkLS1maWx0ZXItY29udHJvbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c2RjLWNvbWJvYm94XG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMuY29ubmVjdG9yJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC5jb25uZWN0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZmlsdGVyRHJhZnQuY29ubmVjdG9yID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImZpbHRlckNvbm5lY3Rvck9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIm92ZXJsYXlBcHBlbmRUYXJnZXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3pJbmRleF09XCJvdmVybGF5WkluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWx0ZXJDb25uZWN0b3JEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5mb1Rvb2x0aXBdPVwiZmlsdGVyQ29ubmVjdG9yVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1jb21ib2JveD5cbiAgICAgICAgICAgICAgICAgICAgICA8c2RjLWNvbWJvYm94XG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMub3BlcmF0b3InXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpbHRlckRyYWZ0Lm9wZXJhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckRyYWZ0Lm9wZXJhdG9yID0gJGV2ZW50OyBvbkZpbHRlck9wZXJhdG9yQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZmlsdGVyT3BlcmF0b3JPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCJvdmVybGF5QXBwZW5kVGFyZ2V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt6SW5kZXhdPVwib3ZlcmxheVpJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFmaWx0ZXJEcmFmdC5jb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2luZm9Ub29sdGlwXT1cImZpbHRlck9wZXJhdG9yVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvc2RjLWNvbWJvYm94PlxuICAgICAgICAgICAgICAgICAgICAgIDxzZGMtY29tYm9ib3hcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy52YWx1ZVR5cGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpbHRlckRyYWZ0LnZhbHVlVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJEcmFmdC52YWx1ZVR5cGUgPSAkZXZlbnQ7IG9uRmlsdGVyVmFsdWVUeXBlQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwidmFsdWVUeXBlT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwib3ZlcmxheUFwcGVuZFRhcmdldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbekluZGV4XT1cIm92ZXJsYXlaSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpbHRlclZhbHVlVHlwZURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmZvVG9vbHRpcF09XCJmaWx0ZXJWYWx1ZVR5cGVUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvc2RjLWNvbWJvYm94PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLW9wdGlvbmFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2RjLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLnN0YXRlcy5vcHRpb25hbCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC5vcHRpb25hbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckRyYWZ0Lm9wdGlvbmFsID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZGMtaW5mby1zaWduXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cImZpbHRlck9wdGlvbmFsVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1pbmZvLXNpZ24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1jb25maWctc2VjdGlvblxuICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItY29uZmlnLXNlY3Rpb24tLXZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWdyaWQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWdyaWQtLXNpbmdsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd0ZpbHRlckJvb2xlYW5Db21ib2JveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNkYy1jb21ib2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMudmFsdWUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVyRHJhZnQudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJEcmFmdC52YWx1ZSA9ICRldmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImJvb2xlYW5WYWx1ZU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwib3ZlcmxheUFwcGVuZFRhcmdldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt6SW5kZXhdPVwib3ZlcmxheVpJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zZGMtY29tYm9ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd0ZpbHRlclZhbHVlVGV4dGJveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNkYy10ZXh0Ym94XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy52YWx1ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckRyYWZ0LnZhbHVlID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy10ZXh0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dGaWx0ZXJWYWx1ZXNUZXh0Ym94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2RjLXRleHRib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLnZhbHVlcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC52YWx1ZXNUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZmlsdGVyRHJhZnQudmFsdWVzVGV4dCA9ICRldmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zZGMtdGV4dGJveD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChzaG93RmlsdGVyQmV0d2VlbklucHV0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19iZXR3ZWVuIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1ncmlkLWNvbHVtbi1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzZGMtdGV4dGJveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy52YWx1ZVN0YXJ0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVyRHJhZnQuYmV0d2VlblN0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJEcmFmdC5iZXR3ZWVuU3RhcnQgPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy10ZXh0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c2RjLXRleHRib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMudmFsdWVFbmQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC5iZXR3ZWVuRW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJEcmFmdC5iZXR3ZWVuRW5kID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zZGMtdGV4dGJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dGaWx0ZXJQYXJhbWV0ZXJUZXh0Ym94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2RjLXRleHRib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLnBhcmFtZXRlck5hbWUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVyRHJhZnQucGFyYW1ldGVyTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckRyYWZ0LnBhcmFtZXRlck5hbWUgPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc2RjLXRleHRib3g+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1maWVsZFxuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZmllbGQtLXN0cmV0Y2hcbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmRcbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQtLXNlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1jb25maWctY2FyZFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1jb25maWctc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWdyaWQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWdyaWQtLWZpbHRlci1jb250cm9sc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzZGMtY29tYm9ib3hcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy5jb25uZWN0b3InXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpbHRlckRyYWZ0LmNvbm5lY3RvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJEcmFmdC5jb25uZWN0b3IgPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZmlsdGVyQ29ubmVjdG9yT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwib3ZlcmxheUFwcGVuZFRhcmdldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbekluZGV4XT1cIm92ZXJsYXlaSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpbHRlckNvbm5lY3RvckRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmZvVG9vbHRpcF09XCJmaWx0ZXJDb25uZWN0b3JUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvc2RjLWNvbWJvYm94PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLW9wdGlvbmFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2RjLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLnN0YXRlcy5vcHRpb25hbCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC5vcHRpb25hbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckRyYWZ0Lm9wdGlvbmFsID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZGMtaW5mby1zaWduXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cImZpbHRlck9wdGlvbmFsVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1pbmZvLXNpZ24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1jb25maWctc2VjdGlvblxuICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItY29uZmlnLXNlY3Rpb24tLWRvbWFpblwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtcGFuZWwtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy5kb21haW5FeHByZXNzaW9uJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8c2RjLWluZm8tc2lnblxuICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiZmlsdGVyRG9tYWluRXhwcmVzc2lvblRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInbGVmdCdcIlxuICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1pbmZvLXNpZ24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1kb21haW4taGludFwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlckRvbWFpbkV4cHJlc3Npb25Ub29sdGlwIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c2RjLXRleHRhcmVhXG4gICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIicnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC5kb21haW5FeHByZXNzaW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJEcmFmdC5kb21haW5FeHByZXNzaW9uID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cIjEwXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvc2RjLXRleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItc3RlcFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci10b29sYmFyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5IGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5LS1maWx0ZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5tb2RhbHMuZmlsdGVyLnN0ZXBzLnJldmlldy50aXRsZScpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS12YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5LXZhbHVlLS1wYXRoXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJDb25maWd1cmF0aW9uU3VtbWFyeUxhYmVsIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnb1RvRmlsdGVyTW9kYWxTdGVwKCdjb25maWd1cmUnKVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJCYWNrVG9Db25maWd1cmF0aW9uTGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1maWVsZFxuICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWZpZWxkLS1zdHJldGNoXG4gICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZFxuICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQtLXNlY3Rpb25cbiAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItY29uZmlnLWNhcmRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1yZXZpZXctZ3JpZFwiPlxuICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBmaWx0ZXJSZXZpZXdJdGVtczsgdHJhY2sgdHJhY2tCeUlkKCRpbmRleCwgaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1yZXZpZXctaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5LXZhbHVlLS1wYXRoXT1cIml0ZW0uZW1waGFzaXplID09PSAncGF0aCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItcmV2aWV3LWNvZGVdPVwiaXRlbS5lbXBoYXNpemUgPT09ICdjb2RlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnZhbHVlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLXJldmlldy1wcmV2aWV3XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLnNxbFByZXZpZXcnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8c2RjLXRleHRhcmVhXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpbHRlclJldmlld1ByZXZpZXdMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cIjZcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICA+PC9zZGMtdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgZm9vdGVyIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWZvb3RlclwiPlxuICAgICAgICA8c2RjLWJ1dHRvblxuICAgICAgICAgIFtsYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNhbmNlbCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBwcmlvcml0eT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgKGNsaWNrKT1cImNsb3NlRmlsdGVyTW9kYWwoKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiY2xvc2VGaWx0ZXJNb2RhbCgpXCJcbiAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgQGlmIChmaWx0ZXJNb2RhbFNlbGVjdGlvblN0ZXBBY3RpdmUpIHtcbiAgICAgICAgICA8c2RjLWJ1dHRvblxuICAgICAgICAgICAgW2xhYmVsXT1cImZpbHRlck1vZGFsQ29uZmlndXJlQWN0aW9uTGFiZWxcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFmaWx0ZXJNb2RhbENhblByb2NlZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFkdmFuY2VGaWx0ZXJNb2RhbFN0ZXAoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhZHZhbmNlRmlsdGVyTW9kYWxTdGVwKClcIlxuICAgICAgICAgID48L3NkYy1idXR0b24+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChmaWx0ZXJNb2RhbENvbmZpZ3VyYXRpb25TdGVwQWN0aXZlKSB7XG4gICAgICAgICAgPHNkYy1idXR0b25cbiAgICAgICAgICAgIFtsYWJlbF09XCJmaWx0ZXJNb2RhbFJldmlld0FjdGlvbkxhYmVsXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhZmlsdGVyTW9kYWxDYW5SZXZpZXdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFkdmFuY2VGaWx0ZXJNb2RhbFN0ZXAoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhZHZhbmNlRmlsdGVyTW9kYWxTdGVwKClcIlxuICAgICAgICAgID48L3NkYy1idXR0b24+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChmaWx0ZXJNb2RhbFJldmlld1N0ZXBBY3RpdmUpIHtcbiAgICAgICAgICA8c2RjLWJ1dHRvblxuICAgICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuc2F2ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuU2F2ZUZpbHRlclwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2F2ZUZpbHRlcigpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNhdmVGaWx0ZXIoKVwiXG4gICAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9zZGMtbW9kYWw+XG4gIH1cblxuICBAaWYgKGZpZWxkTW9kYWxWaXNpYmxlKSB7XG4gICAgPHNkYy1tb2RhbFxuICAgICAgW3Zpc2libGVdPVwiZmllbGRNb2RhbFZpc2libGVcIlxuICAgICAgKHZpc2libGVDaGFuZ2UpPVwiJGV2ZW50ID8gKGZpZWxkTW9kYWxWaXNpYmxlID0gdHJ1ZSkgOiBjbG9zZUZpZWxkTW9kYWwoKVwiXG4gICAgICBbaGVhZGVyXT1cImZpZWxkTW9kYWxUaXRsZVwiXG4gICAgICBbd2lkdGhdPVwibW9kYWxEaW1lbnNpb25zLmZpZWxkLndpZHRoXCJcbiAgICAgIFtoZWlnaHRdPVwibW9kYWxEaW1lbnNpb25zLmZpZWxkLmhlaWdodFwiXG4gICAgICBbbWF4aW1pemFibGVdPVwiZmFsc2VcIlxuICAgICAgW2Zvb3RlckJ1dHRvbnNdPVwiW11cIlxuICAgICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zaGVsbCBkeW5hbWljLXZpZXctYnVpbGRlcl9fZmllbGQtbW9kYWxcIj5cbiAgICAgICAgPHNkYy10aW1lbGluZVxuICAgICAgICAgIFtpdGVtc109XCJmaWVsZE1vZGFsVGltZWxpbmVJdGVtc1wiXG4gICAgICAgICAgW2FjdGl2ZUluZGV4XT1cImZpZWxkTW9kYWxDb25maWd1cmF0aW9uU3RlcEFjdGl2ZSA/IDEgOiAwXCJcbiAgICAgICAgICBbaW50ZXJhY3RpdmVdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Nob3dEZXNjcmlwdGlvbnNdPVwiZmFsc2VcIlxuICAgICAgICAgIFthcmlhTGFiZWxdPVwiZmllbGRNb2RhbFRpbWVsaW5lQXJpYUxhYmVsXCJcbiAgICAgICAgICAoc3RlcFNlbGVjdCk9XCJvbkZpZWxkTW9kYWxUaW1lbGluZVN0ZXBTZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgID48L3NkYy10aW1lbGluZT5cbiAgICAgICAgQGlmIChmaWVsZE1vZGFsU2VsZWN0aW9uU3RlcEFjdGl2ZSkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXNoZWxsIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zaGVsbC0tZnVsbFxuICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLWZsb3cgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN0YWdlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZCBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZC0tc2VjdGlvblxuICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19waWNrbGlzdC1zaGVsbCBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3RhZ2UtYm9keVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNkYy1waWNrbGlzdFxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJmaWVsZE1vZGFsUGlja2xpc3RJdGVtc1wiXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkSWRzXT1cImZpZWxkTW9kYWxTZWxlY3RlZFBpY2tsaXN0SWRzXCJcbiAgICAgICAgICAgICAgICBpZEtleT1cImlkXCJcbiAgICAgICAgICAgICAgICB0aXRsZUtleT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICB0aXRsZVByZWZpeEtleT1cInRpdGxlUHJlZml4XCJcbiAgICAgICAgICAgICAgICB0aXRsZVN1ZmZpeEtleT1cInRpdGxlU3VmZml4XCJcbiAgICAgICAgICAgICAgICB0aXRsZVByZWZpeENvbG9yS2V5PVwidGl0bGVQcmVmaXhDb2xvclwiXG4gICAgICAgICAgICAgICAgdGl0bGVTdWZmaXhDb2xvcktleT1cInRpdGxlU3VmZml4Q29sb3JcIlxuICAgICAgICAgICAgICAgIGJhZGdlS2V5PVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgIGJhZGdlQ29sb3JLZXk9XCJiYWRnZUNvbG9yXCJcbiAgICAgICAgICAgICAgICBbYXV0b1Jlc2l6ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dQYWdpbmF0b3JdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtzaG93SXRlbUljb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtzaG93U2VsZWN0aW9uQ291bnRlcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcubW9kYWxzLnNlYXJjaFBsYWNlaG9sZGVyJ1wiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkSWRzQ2hhbmdlKT1cIm9uRmllbGRNb2RhbFNlbGVjdGVkSWRzQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICA+PC9zZGMtcGlja2xpc3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZmllbGQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWZpZWxkLS1zdHJldGNoXG4gICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctc2hlbGxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctdG9vbGJhclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpZWxkLWNvbmZpZy1zdW1tYXJ5XCI+XG4gICAgICAgICAgICAgICAge3sgZmllbGRNb2RhbENvbmZpZ3VyZWRJdGVtcy5sZW5ndGggfX1cbiAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5jYXJkcy5maWVsZHMudGl0bGUnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgQGlmIChmaWVsZE1vZGFsSGFzU2VsZWN0YWJsZUNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0tcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkQW5vdGhlckZpZWxkRnJvbU1vZGFsKClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5zZWxlY3RDb2x1bW5zJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQtLXNlY3Rpb25cbiAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtbGlzdC1zaGVsbFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctbGlzdFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZmllbGRNb2RhbENvbmZpZ3VyZWRJdGVtczsgdHJhY2sgdHJhY2tCeUlkKCRpbmRleCwgaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmllbGQtY29uZmlnLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpZWxkLWNvbmZpZy1tYWluXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi10YWJsZS1sYWJlbFwiPnt7IGl0ZW0udGFibGVMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1zZXBhcmF0b3JcIj4uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLWFjY2VudFwiPnt7IGl0ZW0uZmllbGRMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uZnVuY3Rpb25OYW1lICYmICFpc0ZpZWxkRnVuY3Rpb25FZGl0aW5nKGl0ZW0uY29sdW1uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctZnVuY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWNoaXAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1jaGlwLS1vcGVyYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZnVuY3Rpb25MYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5mdW5jdGlvbkFsaWFzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1ldGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZnVuY3Rpb25BbGlhcyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgQGlmICghaXNGaWVsZEZ1bmN0aW9uRWRpdGluZyhpdGVtLmNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpZWxkLWNvbmZpZy1jb250cm9sc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNkYy10ZXh0Ym94XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy5hbGlhcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJpdGVtLmFsaWFzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWVsZE1vZGFsQWxpYXNDaGFuZ2UoaXRlbS5jb2x1bW4sICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4bGVuZ3RoXT1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy10ZXh0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC13aWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWxhYmVsLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMud2lkdGgnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2RjLWluZm8tc2lnblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5tZXNzYWdlcy5maWVsZFdpZHRoSW5mbydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1pbmZvLXNpZ24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c2RjLXRleHRib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIml0ZW0ud2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmllbGRNb2RhbFdpZHRoQ2hhbmdlKGl0ZW0uY29sdW1uLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhsZW5ndGhdPVwiMTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiMTYwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc2RjLXRleHRib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN0YXJ0RmllbGRGdW5jdGlvbkVkaXQoaXRlbS5jb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmZ1bmN0aW9uTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY29uZmlndXJlRmllbGQnKSB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICgoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMuZnVuY3Rpb25OYW1lJykgfCB0cmFuc2xhdGUpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uLS1kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5yZW1vdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5yZW1vdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVGaWVsZE1vZGFsRHJhZnQoaXRlbS5jb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctY29udHJvbHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpZWxkLWNvbmZpZy1jb250cm9scy0tZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNkYy1jb21ib2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMuZnVuY3Rpb25OYW1lJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpZWxkRnVuY3Rpb25EcmFmdC5mdW5jdGlvbk5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkZpZWxkRnVuY3Rpb25EcmFmdE5hbWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImZpZWxkTW9kYWxGdW5jdGlvbk9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwib3ZlcmxheUFwcGVuZFRhcmdldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt6SW5kZXhdPVwib3ZlcmxheVpJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zZGMtY29tYm9ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2RjLXRleHRib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLmFsaWFzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpZWxkRnVuY3Rpb25EcmFmdC5mdW5jdGlvbkFsaWFzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZmllbGRGdW5jdGlvbkRyYWZ0LmZ1bmN0aW9uQWxpYXMgPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4bGVuZ3RoXT1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFmaWVsZEZ1bmN0aW9uRHJhZnQuZnVuY3Rpb25OYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy10ZXh0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb24tLWRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNhbmNlbCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNhbmNlbCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbEZpZWxkRnVuY3Rpb25FZGl0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19pY29uLWFjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19pY29uLWFjdGlvbi0tYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuc2F2ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNhdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlRmllbGRGdW5jdGlvbkVkaXQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2hlY2tcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgZm9vdGVyIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWZvb3RlciBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZm9vdGVyLS1iZXR3ZWVuXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZm9vdGVyLWdyb3VwIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1mb290ZXItZ3JvdXAtLXN0YXJ0XCI+XG4gICAgICAgICAgQGlmIChmaWVsZE1vZGFsU2VsZWN0aW9uU3RlcEFjdGl2ZSAmJiBmaWVsZE1vZGFsQ2FuU2VsZWN0QWxsKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluayBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLXByaW1hcnlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0QWxsRmllbGRNb2RhbENvbHVtbnMoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5zZWxlY3RBbGxDb2x1bW5zJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZm9vdGVyLWdyb3VwXCI+XG4gICAgICAgICAgPHNkYy1idXR0b25cbiAgICAgICAgICAgIFtsYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNhbmNlbCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIHByaW9yaXR5PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbG9zZUZpZWxkTW9kYWwoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJjbG9zZUZpZWxkTW9kYWwoKVwiXG4gICAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgICBAaWYgKGZpZWxkTW9kYWxTZWxlY3Rpb25TdGVwQWN0aXZlICYmIGZpZWxkTW9kYWxDYW5Qcm9jZWVkKSB7XG4gICAgICAgICAgICA8c2RjLWJ1dHRvblxuICAgICAgICAgICAgICBbbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5uZXh0U3RlcCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFkdmFuY2VGaWVsZE1vZGFsU3RlcCgpXCJcbiAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYWR2YW5jZUZpZWxkTW9kYWxTdGVwKClcIlxuICAgICAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChmaWVsZE1vZGFsQ29uZmlndXJhdGlvblN0ZXBBY3RpdmUpIHtcbiAgICAgICAgICAgIDxzZGMtYnV0dG9uXG4gICAgICAgICAgICAgIFtsYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNhdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuU2F2ZUZpZWxkTW9kYWxcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZUZpZWxkKClcIlxuICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzYXZlRmllbGQoKVwiXG4gICAgICAgICAgICA+PC9zZGMtYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NkYy1tb2RhbD5cbiAgfVxuXG4gIDxkaXZcbiAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX193b3Jrc3BhY2VcIlxuICAgIFtjbGFzcy5keW5hbWljLXZpZXctYnVpbGRlcl9fd29ya3NwYWNlLS1zdGFja2VkXT1cImxheW91dE1vZGUgPT09ICdzdGFja2VkJ1wiXG4gICAgW2NsYXNzLmR5bmFtaWMtdmlldy1idWlsZGVyX193b3Jrc3BhY2UtLXNwbGl0XT1cImxheW91dE1vZGUgPT09ICdzcGxpdCdcIlxuICAgIFtjbGFzcy5keW5hbWljLXZpZXctYnVpbGRlcl9fd29ya3NwYWNlLS1wcmV2aWV3LWhpZGRlbl09XCIhcHJldmlld1Zpc2libGVcIlxuICAgID5cbiAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2J1aWxkZXItYXJlYVwiPlxuICAgICAgPGRpdlxuICAgICAgICAjc2VjdGlvbnNDb250YWluZXJcbiAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbnNcIlxuICAgICAgICBbY2xhc3MuZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb25zLS1zdGFja2VkXT1cImxheW91dE1vZGUgPT09ICdzdGFja2VkJ1wiXG4gICAgICAgIFtjbGFzcy5keW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbnMtLXNwbGl0XT1cImxheW91dE1vZGUgPT09ICdzcGxpdCdcIlxuICAgICAgICA+XG4gICAgICAgIDxzZWN0aW9uXG4gICAgICAgICAgI2J1aWxkZXJTZWN0aW9uXG4gICAgICAgICAgZGF0YS1zZWN0aW9uLWlkPVwidGFibGVzXCJcbiAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWhlYWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi1sYWJlbFwiPlxuICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5jYXJkcy5zb3VyY2VzLnRpdGxlJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rXG4gICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLXByaW1hcnlcbiAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0taWNvblwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNlbGVjdFRhYmxlcycpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuc2VsZWN0VGFibGVzJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuU291cmNlTW9kYWwoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmsgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rLS1pY29uXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seSB8fCAhY2FuT3BlblNvdXJjZUNvbmZpZ3VyYXRpb25cIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNvbmZpZ3VyZUFsaWFzZXMnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNvbmZpZ3VyZUFsaWFzZXMnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Tb3VyY2VDb25maWd1cmF0aW9uTW9kYWwoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNvZ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluayBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLWljb25cIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5IHx8ICFzb3VyY2VJdGVtcy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNsZWFyJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jbGVhcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJTb3VyY2VzKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10cmFzaC1hbHRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmICghc291cmNlSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19lbXB0eS1yb3dcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNlbGVjdFRhYmxlcycpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNlbGVjdFRhYmxlcycpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Tb3VyY2VNb2RhbCgpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNlbGVjdFRhYmxlcycpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChzb3VyY2VJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc3RhY2sgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3N0YWNrLS13cmFwXCI+XG4gICAgICAgICAgICAgIEBmb3IgKHNvdXJjZSBvZiBzb3VyY2VJdGVtczsgdHJhY2sgdHJhY2tCeUlkKGksIHNvdXJjZSk7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93IGR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctLXNvdXJjZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1tYWluXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy10YWJsZS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1kYlwiPnt7IHNvdXJjZS5kYkxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1kb3RcIj4uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy10YWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgc291cmNlLnRhYmxlTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzb3VyY2UuYWxpYXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctbWV0YVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQWxpYXMge3sgc291cmNlLmFsaWFzIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uIGR5bmFtaWMtdmlldy1idWlsZGVyX19pY29uLWFjdGlvbi0tZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMucmVtb3ZlJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5yZW1vdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZVNvdXJjZShpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24tcm93XCI+XG4gICAgICAgICAgPHNlY3Rpb25cbiAgICAgICAgICAgICNidWlsZGVyU2VjdGlvblxuICAgICAgICAgICAgZGF0YS1zZWN0aW9uLWlkPVwiam9pbnNcIlxuICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbiBkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi0tZmx1aWRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWhlYWRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuY2FyZHMuam9pbnMudGl0bGUnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rXG4gICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0tcHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLWljb25cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkgfHwgIWNhbkNvbmZpZ3VyZUpvaW5zXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmFkZEpvaW4nKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkSm9pbicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuSm9pbk1vZGFsKClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGx1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0taWNvblwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seSB8fCAham9pbkl0ZW1zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jbGVhcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jbGVhcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckpvaW5zKClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdHJhc2gtYWx0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmICghY2FuQ29uZmlndXJlSm9pbnMpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19pbmZvLXJvd1wiPlxuICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLm1lc3NhZ2VzLmpvaW5SZXF1aXJlc1R3b1RhYmxlcycpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChjYW5Db25maWd1cmVKb2lucyAmJiAham9pbkl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZW1wdHktcm93XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkSm9pbicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkSm9pbicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkpvaW5Nb2RhbCgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5hZGRKb2luJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGpvaW5JdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zdGFjayBkeW5hbWljLXZpZXctYnVpbGRlcl9fc3RhY2stLXdyYXBcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGpvaW5JdGVtczsgdHJhY2sgdHJhY2tCeUlkKGksIGl0ZW0pOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3dcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctcGF0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LXRhYmxlXCI+e3sgaXRlbS5zb3VyY2VUYWJsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1kb3RcIj4uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWZpZWxkXCI+e3sgaXRlbS5zb3VyY2VGaWVsZCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fam9pbi1vcGVyYXRvclwiPnt7IGl0ZW0ub3BlcmF0b3IgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fam9pbi1hcnJvd1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtbG9uZy1hcnJvdy1hbHQtcmlnaHRcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1wYXRoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctdGFibGVcIj57eyBpdGVtLnRhcmdldFRhYmxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWRvdFwiPi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctZmllbGRcIj57eyBpdGVtLnRhcmdldEZpZWxkIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmVkaXQnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuZWRpdCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuSm9pbk1vZGFsKGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBlblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uIGR5bmFtaWMtdmlldy1idWlsZGVyX19pY29uLWFjdGlvbi0tZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnJlbW92ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5yZW1vdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlSm9pbihpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8c2VjdGlvblxuICAgICAgICAgICAgI2J1aWxkZXJTZWN0aW9uXG4gICAgICAgICAgICBkYXRhLXNlY3Rpb24taWQ9XCJncm91cEJ5XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24gZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24tLWNvbXBhY3RcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWhlYWRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24tbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmNhcmRzLmdyb3VwQnkudGl0bGUnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rXG4gICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0tcHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLWljb25cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkgfHwgIWdyb3VwQnlTZWxlY3RhYmxlQ29sdW1ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuc2VsZWN0Q29sdW1ucycpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5zZWxlY3RDb2x1bW5zJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5TZWxlY3Rpb25Nb2RhbCgnZ3JvdXBCeScpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluayBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLWljb25cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkgfHwgIWdyb3VwQnlJdGVtcy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY2xlYXInKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY2xlYXInKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJHcm91cEJ5KClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdHJhc2gtYWx0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmICghZ3JvdXBCeUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZW1wdHktcm93XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5TZWxlY3Rpb25Nb2RhbCgnZ3JvdXBCeScpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5zZWxlY3RDb2x1bW5zJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGdyb3VwQnlJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zdGFjayBkeW5hbWljLXZpZXctYnVpbGRlcl9fc3RhY2stLXdyYXBcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGdyb3VwQnlJdGVtczsgdHJhY2sgdHJhY2tCeUlkKGksIGl0ZW0pOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3dcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctcGF0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LXRhYmxlXCI+e3sgaXRlbS50YWJsZUxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWRvdFwiPi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctZmllbGRcIj57eyBpdGVtLmZpZWxkTGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb24gZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uLS1kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMucmVtb3ZlJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnJlbW92ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVHcm91cEJ5KGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxzZWN0aW9uXG4gICAgICAgICAgI2J1aWxkZXJTZWN0aW9uXG4gICAgICAgICAgZGF0YS1zZWN0aW9uLWlkPVwiZmllbGRzXCJcbiAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWhlYWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi1sYWJlbFwiPlxuICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmNhcmRzLmZpZWxkcy50aXRsZScpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8c2RjLWluZm8tc2lnblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2hpbnRcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIidWb2PDqiBwb2RlIG9yZGVuYXIgYSBzZXF1w6puY2lhIGRvcyBjYW1wb3MgYXJyYXN0YW5kbyBlIHNvbHRhbmRvLidcIlxuICAgICAgICAgICAgICA+PC9zZGMtaW5mby1zaWduPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24tYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmtcbiAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0tcHJpbWFyeVxuICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rLS1pY29uXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seSB8fCAhZmllbGRTZWxlY3RhYmxlQ29sdW1ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNlbGVjdENvbHVtbnMnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNlbGVjdENvbHVtbnMnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5GaWVsZE1vZGFsKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wbHVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0taWNvblwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkgfHwgIWNhbk9wZW5GaWVsZENvbmZpZ3VyYXRpb25cIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNvbmZpZ3VyZUZpZWxkJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jb25maWd1cmVGaWVsZCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkZpZWxkQ29uZmlndXJhdGlvbk1vZGFsKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1jb2dcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmsgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rLS1pY29uXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seSB8fCAhZmllbGRJdGVtcy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNsZWFyJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jbGVhcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJGaWVsZHMoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRyYXNoLWFsdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBAaWYgKCFmaWVsZEl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZW1wdHktcm93XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkZpZWxkTW9kYWwoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5zZWxlY3RDb2x1bW5zJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGZpZWxkSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3N0YWNrIGR5bmFtaWMtdmlldy1idWlsZGVyX19zdGFjay0td3JhcFwiPlxuICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGZpZWxkSXRlbXM7IHRyYWNrIHRyYWNrQnlJZChpLCBpdGVtKTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICBAaWYgKGlzRmllbGREcm9wSW5kaWNhdG9yVmlzaWJsZShpKSkge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1kcm9wLWluZGljYXRvclwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3JvdyBkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LS1kcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctLWRyYWctb3JpZ2luXT1cImRyYWdnaW5nRmllbGRJbmRleCA9PT0gaXRlbS5zb3VyY2VJbmRleFwiXG4gICAgICAgICAgICAgICAgICBbZHJhZ2dhYmxlXT1cIiFpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgIChkcmFnc3RhcnQpPVwib25GaWVsZERyYWdTdGFydChpdGVtLnNvdXJjZUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAoZHJhZ292ZXIpPVwib25GaWVsZERyYWdPdmVyKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICAgICAgKGRyb3ApPVwib25GaWVsZERyb3AoKVwiXG4gICAgICAgICAgICAgICAgICAoZHJhZ2VuZCk9XCJvbkZpZWxkRHJhZ0VuZCgpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW9yZGVyXCI+e3sgaXRlbS5vcmRlckxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctcGF0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy10YWJsZVwiPnt7IGl0ZW0udGFibGVMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctZG90XCI+Ljwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctZmllbGRcIj57eyBpdGVtLmZpZWxkTGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmFsaWFzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1ldGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEFsaWFzIHt7IGl0ZW0uYWxpYXMgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLndpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1ldGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ud2lkdGggfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmZ1bmN0aW9uTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1jaGlwIGR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctY2hpcC0tb3BlcmF0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZnVuY3Rpb25MYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uZnVuY3Rpb25BbGlhcykge1xuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1tZXRhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmZ1bmN0aW9uQWxpYXMgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb24gZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uLS1kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5yZW1vdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnJlbW92ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlRmllbGQoaXRlbS5zb3VyY2VJbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKGlzRmllbGREcm9wSW5kaWNhdG9yQXRFbmRWaXNpYmxlKCkpIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1kcm9wLWluZGljYXRvclwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLXJvd1wiPlxuICAgICAgICAgIDxzZWN0aW9uXG4gICAgICAgICAgICAjYnVpbGRlclNlY3Rpb25cbiAgICAgICAgICAgIGRhdGEtc2VjdGlvbi1pZD1cInNvcnRpbmdcIlxuICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbiBkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi0tY29tcGFjdFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24taGVhZFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24tbGFiZWxcIj5cbiAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5jYXJkcy5zb3J0aW5nLnRpdGxlJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGlua1xuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLXByaW1hcnlcbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rLS1pY29uXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5IHx8ICFzb3J0U2VsZWN0YWJsZUl0ZW1zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5hZGRTb3J0JykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmFkZFNvcnQnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlblNvcnRNb2RhbCgpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluayBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLWljb25cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkgfHwgIXNvcnRJdGVtcy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY2xlYXInKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY2xlYXInKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJTb3J0aW5nKClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdHJhc2gtYWx0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmICghc29ydEl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZW1wdHktcm93XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkU29ydCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkU29ydCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlblNvcnRNb2RhbCgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5hZGRTb3J0JykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKHNvcnRJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zdGFjayBkeW5hbWljLXZpZXctYnVpbGRlcl9fc3RhY2stLXdyYXBcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIHNvcnRJdGVtczsgdHJhY2sgdHJhY2tCeUlkKGksIGl0ZW0pOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3dcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uZnVuY3Rpb25OYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctY2hpcCBkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWNoaXAtLW9wZXJhdG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZnVuY3Rpb25MYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctcGF0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LXRhYmxlXCI+e3sgaXRlbS50YWJsZUxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWRvdFwiPi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctZmllbGRcIj57eyBpdGVtLmZpZWxkTGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1jaGlwIGR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctY2hpcC0tb3BlcmF0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZGlyZWN0aW9uIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuZWRpdCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5lZGl0JykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Tb3J0TW9kYWwoaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb24gZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uLS1kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMucmVtb3ZlJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnJlbW92ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVTb3J0KGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgICAgPHNlY3Rpb25cbiAgICAgICAgICAgICNidWlsZGVyU2VjdGlvblxuICAgICAgICAgICAgZGF0YS1zZWN0aW9uLWlkPVwiZmlsdGVyc1wiXG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uIGR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLS1mbHVpZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24taGVhZFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24tbGFiZWxcIj5cbiAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5jYXJkcy5maWx0ZXJzLnRpdGxlJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGlua1xuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLXByaW1hcnlcbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rLS1pY29uXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5IHx8ICFhdmFpbGFibGVDb2x1bW5zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5hZGRGaWx0ZXInKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkRmlsdGVyJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5GaWx0ZXJNb2RhbCgpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluayBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLWljb25cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkgfHwgIWZpbHRlckl0ZW1zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jbGVhcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jbGVhcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckZpbHRlcnMoKVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10cmFzaC1hbHRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAaWYgKCFmaWx0ZXJJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2VtcHR5LXJvd1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmFkZEZpbHRlcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkRmlsdGVyJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRmlsdGVyTW9kYWwoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkRmlsdGVyJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGZpbHRlckl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3N0YWNrIGR5bmFtaWMtdmlldy1idWlsZGVyX19zdGFjay0td3JhcFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZmlsdGVySXRlbXM7IHRyYWNrIHRyYWNrQnlJZChpLCBpdGVtKTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1tYWluXCI+XG4gICAgICAgICAgICAgICAgICAgICAgQGlmICghaXRlbS5pc0RvbWFpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LXBhdGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LXRhYmxlXCI+e3sgaXRlbS50YWJsZUxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctZG90XCI+Ljwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWZpZWxkXCI+e3sgaXRlbS5maWVsZExhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWNoaXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWNoaXAtLW9wZXJhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGl0ZW0ub3BlcmF0b3JMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1jaGlwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1jaGlwLS1kb21haW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgaXRlbS50YWJsZUxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctY2hpcCBkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWNoaXAtLXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnN1YnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5vcHRpb25hbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWNoaXAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1jaGlwLS1vcHRpb25hbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5zdGF0ZXMub3B0aW9uYWwnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmVkaXQnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuZWRpdCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRmlsdGVyTW9kYWwoaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb24gZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uLS1kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMucmVtb3ZlJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnJlbW92ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVGaWx0ZXIoaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIEBmb3IgKGFycm93IG9mIGZsb3dBcnJvd3M7IHRyYWNrIHRyYWNrQnlBcnJvdygkaW5kZXgsIGFycm93KSkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2Zsb3ctYXJyb3dcIlxuICAgICAgICAgICAgW2NsYXNzLmR5bmFtaWMtdmlldy1idWlsZGVyX19mbG93LWFycm93LS1yaWdodF09XCJhcnJvdy5kaXJlY3Rpb24gPT09ICdyaWdodCdcIlxuICAgICAgICAgICAgW2NsYXNzLmR5bmFtaWMtdmlldy1idWlsZGVyX19mbG93LWFycm93LS1kb3duXT1cImFycm93LmRpcmVjdGlvbiA9PT0gJ2Rvd24nXCJcbiAgICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cImFycm93LmxlZnRcIlxuICAgICAgICAgICAgW3N0eWxlLnRvcC5weF09XCJhcnJvdy50b3BcIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgIFtjbGFzc109XCJhcnJvdy5kaXJlY3Rpb24gPT09ICdyaWdodCdcbiAgICAgICAgICAgICAgICA/ICdmYXMgZmEtYW5nbGUtZG91YmxlLXJpZ2h0J1xuICAgICAgICAgICAgICAgIDogJ2ZhcyBmYS1hbmdsZS1kb3VibGUtZG93bidcIlxuICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKHByZXZpZXdWaXNpYmxlKSB7XG4gICAgICA8YXNpZGUgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcHJldmlldy1hcmVhXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19wcmV2aWV3XCJcbiAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cInNxbFByZXZpZXdQYW5lbEhlaWdodFwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcHJldmlldy1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcHJldmlldy10aXRsZVwiPlNRTCBQcmV2aWV3PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3ByZXZpZXctc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgQ29uc3VsdGEgZ2VyYWRhIGF1dG9tYXRpY2FtZW50ZSBhIHBhcnRpciBkYSBjb25maWd1cmFjYW8gYXR1YWwuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3ByZXZpZXctYm9keVwiPlxuICAgICAgICAgICAgPHNkYy1jb2RlLWVkaXRvclxuICAgICAgICAgICAgICBbc3FsXT1cInNxbFByZXZpZXdcIlxuICAgICAgICAgICAgICBsYW5ndWFnZT1cInNxbFwiXG4gICAgICAgICAgICAgIFtyZWFkT25seV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3Nob3dDb3B5XT1cInRydWVcIlxuICAgICAgICAgICAgICBbaGVpZ2h0XT1cInNxbFByZXZpZXdIZWlnaHRcIlxuICAgICAgICAgICAgPjwvc2RjLWNvZGUtZWRpdG9yPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvYXNpZGU+XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19