@flogeez/angular-tiptap-editor 3.1.5 → 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.
@@ -30,6 +30,7 @@ import { AteEditorCommandsService } from "../../services/ate-editor-commands.ser
30
30
  import { AteColorPickerService } from "../../services/ate-color-picker.service";
31
31
  import { AteLinkService } from "../../services/ate-link.service";
32
32
  import { AteExportService } from "../../services/ate-export.service";
33
+ import { AteEditorRegistry } from "../../services/ate-editor-registry.service";
33
34
  import { AteNoopValueAccessorDirective } from "../../directives/ate-noop-value-accessor.directive";
34
35
  import { NgControl } from "@angular/forms";
35
36
  import { filterSlashCommands, } from "../../config/ate-slash-commands.config";
@@ -134,6 +135,11 @@ export class AngularTiptapEditorComponent {
134
135
  * ```
135
136
  */
136
137
  this.imageUploadHandler = input(undefined);
138
+ /**
139
+ * Optional unique identifier for the editor instance in the registry.
140
+ * If not specified, a unique ID is automatically generated.
141
+ */
142
+ this.editorId = input(undefined);
137
143
  // Nouveaux outputs
138
144
  this.contentChange = output();
139
145
  this.editorCreated = output();
@@ -326,6 +332,9 @@ export class AngularTiptapEditorComponent {
326
332
  this.editorCommandsService = inject(AteEditorCommandsService);
327
333
  // Access editor state via service
328
334
  this.editorState = this.editorCommandsService.editorState;
335
+ this.editorRegistry = inject(AteEditorRegistry);
336
+ this._registeredId = signal(null);
337
+ this.registeredId = this._registeredId.asReadonly();
329
338
  this.injector = inject(Injector);
330
339
  this.globalConfig = inject(ATE_GLOBAL_CONFIG, { optional: true });
331
340
  /**
@@ -436,6 +445,11 @@ export class AngularTiptapEditorComponent {
436
445
  currentEditor.destroy();
437
446
  }
438
447
  this._editorFullyInitialized.set(false);
448
+ // Unregister from the global registry
449
+ const id = this.registeredId();
450
+ if (id) {
451
+ this.editorRegistry.unregister(id);
452
+ }
439
453
  }
440
454
  initEditor() {
441
455
  const extensions = [
@@ -608,6 +622,10 @@ export class AngularTiptapEditorComponent {
608
622
  }, 100);
609
623
  },
610
624
  onFocus: ({ editor, event }) => {
625
+ const id = this.registeredId();
626
+ if (id) {
627
+ this.editorRegistry.setActive(id);
628
+ }
611
629
  this.editorFocus.emit({ editor, event });
612
630
  },
613
631
  onBlur: ({ editor, event }) => {
@@ -620,6 +638,9 @@ export class AngularTiptapEditorComponent {
620
638
  });
621
639
  // Stocker la référence de l'éditeur immédiatement
622
640
  this._editor.set(newEditor);
641
+ // Register editor in the global registry
642
+ const registeredId = this.editorRegistry.register(this.editorId(), () => this.editor(), this.editorCommandsService);
643
+ this._registeredId.set(registeredId);
623
644
  }
624
645
  toggleEditMode(event) {
625
646
  event.preventDefault();
@@ -746,7 +767,7 @@ export class AngularTiptapEditorComponent {
746
767
  }
747
768
  }
748
769
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AngularTiptapEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
749
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AngularTiptapEditorComponent, isStandalone: true, selector: "angular-tiptap-editor", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, minHeight: { classPropertyName: "minHeight", publicName: "minHeight", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, fillContainer: { classPropertyName: "fillContainer", publicName: "fillContainer", isSignal: true, isRequired: false, transformFunction: null }, showToolbar: { classPropertyName: "showToolbar", publicName: "showToolbar", isSignal: true, isRequired: false, transformFunction: null }, showFooter: { classPropertyName: "showFooter", publicName: "showFooter", isSignal: true, isRequired: false, transformFunction: null }, showCharacterCount: { classPropertyName: "showCharacterCount", publicName: "showCharacterCount", isSignal: true, isRequired: false, transformFunction: null }, showWordCount: { classPropertyName: "showWordCount", publicName: "showWordCount", isSignal: true, isRequired: false, transformFunction: null }, maxCharacters: { classPropertyName: "maxCharacters", publicName: "maxCharacters", isSignal: true, isRequired: false, transformFunction: null }, enableOfficePaste: { classPropertyName: "enableOfficePaste", publicName: "enableOfficePaste", isSignal: true, isRequired: false, transformFunction: null }, enableSlashCommands: { classPropertyName: "enableSlashCommands", publicName: "enableSlashCommands", isSignal: true, isRequired: false, transformFunction: null }, slashCommands: { classPropertyName: "slashCommands", publicName: "slashCommands", isSignal: true, isRequired: false, transformFunction: null }, customSlashCommands: { classPropertyName: "customSlashCommands", publicName: "customSlashCommands", isSignal: true, isRequired: false, transformFunction: null }, blockControls: { classPropertyName: "blockControls", publicName: "blockControls", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, autofocus: { classPropertyName: "autofocus", publicName: "autofocus", isSignal: true, isRequired: false, transformFunction: null }, seamless: { classPropertyName: "seamless", publicName: "seamless", isSignal: true, isRequired: false, transformFunction: null }, floatingToolbar: { classPropertyName: "floatingToolbar", publicName: "floatingToolbar", isSignal: true, isRequired: false, transformFunction: null }, showEditToggle: { classPropertyName: "showEditToggle", publicName: "showEditToggle", isSignal: true, isRequired: false, transformFunction: null }, spellcheck: { classPropertyName: "spellcheck", publicName: "spellcheck", isSignal: true, isRequired: false, transformFunction: null }, tiptapExtensions: { classPropertyName: "tiptapExtensions", publicName: "tiptapExtensions", isSignal: true, isRequired: false, transformFunction: null }, tiptapOptions: { classPropertyName: "tiptapOptions", publicName: "tiptapOptions", isSignal: true, isRequired: false, transformFunction: null }, showBubbleMenu: { classPropertyName: "showBubbleMenu", publicName: "showBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, bubbleMenu: { classPropertyName: "bubbleMenu", publicName: "bubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, showImageBubbleMenu: { classPropertyName: "showImageBubbleMenu", publicName: "showImageBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, imageBubbleMenu: { classPropertyName: "imageBubbleMenu", publicName: "imageBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, toolbar: { classPropertyName: "toolbar", publicName: "toolbar", isSignal: true, isRequired: false, transformFunction: null }, showTableBubbleMenu: { classPropertyName: "showTableBubbleMenu", publicName: "showTableBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, tableBubbleMenu: { classPropertyName: "tableBubbleMenu", publicName: "tableBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, showCellBubbleMenu: { classPropertyName: "showCellBubbleMenu", publicName: "showCellBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, cellBubbleMenu: { classPropertyName: "cellBubbleMenu", publicName: "cellBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, stateCalculators: { classPropertyName: "stateCalculators", publicName: "stateCalculators", isSignal: true, isRequired: false, transformFunction: null }, imageUpload: { classPropertyName: "imageUpload", publicName: "imageUpload", isSignal: true, isRequired: false, transformFunction: null }, imageUploadHandler: { classPropertyName: "imageUploadHandler", publicName: "imageUploadHandler", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { contentChange: "contentChange", editorCreated: "editorCreated", editorUpdate: "editorUpdate", editorFocus: "editorFocus", editorBlur: "editorBlur", editableChange: "editableChange" }, host: { properties: { "class.fill-container": "finalFillContainer()", "class.floating-toolbar": "finalFloatingToolbar()", "class.is-readonly": "!finalEditable() && !mergedDisabled()", "class.is-disabled": "mergedDisabled()", "style.--ate-border-width": "finalSeamless() || mergedDisabled() ? '0' : null", "style.--ate-background": "finalSeamless() ? 'transparent' : (mergedDisabled() ? 'var(--ate-surface-tertiary)' : null)", "style.--ate-toolbar-border-color": "finalSeamless() ? 'transparent' : null", "style.--ate-counter-background": "finalSeamless() ? 'transparent' : null", "style.--ate-counter-border-color": "finalSeamless() ? 'transparent' : null", "class.dark": "config().theme === 'dark'", "class.ate-blocks-inside": "finalBlockControls() === 'inside'", "class.ate-blocks-outside": "finalBlockControls() === 'outside'", "attr.data-theme": "config().theme" } }, providers: [AteEditorCommandsService, AteImageService, AteColorPickerService, AteLinkService, AteExportService], viewQueries: [{ propertyName: "editorElement", first: true, predicate: ["editorElement"], descendants: true, isSignal: true }], hostDirectives: [{ directive: i1.AteNoopValueAccessorDirective }], ngImport: i0, template: `
770
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AngularTiptapEditorComponent, isStandalone: true, selector: "angular-tiptap-editor", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, minHeight: { classPropertyName: "minHeight", publicName: "minHeight", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, fillContainer: { classPropertyName: "fillContainer", publicName: "fillContainer", isSignal: true, isRequired: false, transformFunction: null }, showToolbar: { classPropertyName: "showToolbar", publicName: "showToolbar", isSignal: true, isRequired: false, transformFunction: null }, showFooter: { classPropertyName: "showFooter", publicName: "showFooter", isSignal: true, isRequired: false, transformFunction: null }, showCharacterCount: { classPropertyName: "showCharacterCount", publicName: "showCharacterCount", isSignal: true, isRequired: false, transformFunction: null }, showWordCount: { classPropertyName: "showWordCount", publicName: "showWordCount", isSignal: true, isRequired: false, transformFunction: null }, maxCharacters: { classPropertyName: "maxCharacters", publicName: "maxCharacters", isSignal: true, isRequired: false, transformFunction: null }, enableOfficePaste: { classPropertyName: "enableOfficePaste", publicName: "enableOfficePaste", isSignal: true, isRequired: false, transformFunction: null }, enableSlashCommands: { classPropertyName: "enableSlashCommands", publicName: "enableSlashCommands", isSignal: true, isRequired: false, transformFunction: null }, slashCommands: { classPropertyName: "slashCommands", publicName: "slashCommands", isSignal: true, isRequired: false, transformFunction: null }, customSlashCommands: { classPropertyName: "customSlashCommands", publicName: "customSlashCommands", isSignal: true, isRequired: false, transformFunction: null }, blockControls: { classPropertyName: "blockControls", publicName: "blockControls", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, autofocus: { classPropertyName: "autofocus", publicName: "autofocus", isSignal: true, isRequired: false, transformFunction: null }, seamless: { classPropertyName: "seamless", publicName: "seamless", isSignal: true, isRequired: false, transformFunction: null }, floatingToolbar: { classPropertyName: "floatingToolbar", publicName: "floatingToolbar", isSignal: true, isRequired: false, transformFunction: null }, showEditToggle: { classPropertyName: "showEditToggle", publicName: "showEditToggle", isSignal: true, isRequired: false, transformFunction: null }, spellcheck: { classPropertyName: "spellcheck", publicName: "spellcheck", isSignal: true, isRequired: false, transformFunction: null }, tiptapExtensions: { classPropertyName: "tiptapExtensions", publicName: "tiptapExtensions", isSignal: true, isRequired: false, transformFunction: null }, tiptapOptions: { classPropertyName: "tiptapOptions", publicName: "tiptapOptions", isSignal: true, isRequired: false, transformFunction: null }, showBubbleMenu: { classPropertyName: "showBubbleMenu", publicName: "showBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, bubbleMenu: { classPropertyName: "bubbleMenu", publicName: "bubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, showImageBubbleMenu: { classPropertyName: "showImageBubbleMenu", publicName: "showImageBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, imageBubbleMenu: { classPropertyName: "imageBubbleMenu", publicName: "imageBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, toolbar: { classPropertyName: "toolbar", publicName: "toolbar", isSignal: true, isRequired: false, transformFunction: null }, showTableBubbleMenu: { classPropertyName: "showTableBubbleMenu", publicName: "showTableBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, tableBubbleMenu: { classPropertyName: "tableBubbleMenu", publicName: "tableBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, showCellBubbleMenu: { classPropertyName: "showCellBubbleMenu", publicName: "showCellBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, cellBubbleMenu: { classPropertyName: "cellBubbleMenu", publicName: "cellBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, stateCalculators: { classPropertyName: "stateCalculators", publicName: "stateCalculators", isSignal: true, isRequired: false, transformFunction: null }, imageUpload: { classPropertyName: "imageUpload", publicName: "imageUpload", isSignal: true, isRequired: false, transformFunction: null }, imageUploadHandler: { classPropertyName: "imageUploadHandler", publicName: "imageUploadHandler", isSignal: true, isRequired: false, transformFunction: null }, editorId: { classPropertyName: "editorId", publicName: "editorId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { contentChange: "contentChange", editorCreated: "editorCreated", editorUpdate: "editorUpdate", editorFocus: "editorFocus", editorBlur: "editorBlur", editableChange: "editableChange" }, host: { properties: { "class.fill-container": "finalFillContainer()", "class.floating-toolbar": "finalFloatingToolbar()", "class.is-readonly": "!finalEditable() && !mergedDisabled()", "class.is-disabled": "mergedDisabled()", "style.--ate-border-width": "finalSeamless() || mergedDisabled() ? '0' : null", "style.--ate-background": "finalSeamless() ? 'transparent' : (mergedDisabled() ? 'var(--ate-surface-tertiary)' : null)", "style.--ate-toolbar-border-color": "finalSeamless() ? 'transparent' : null", "style.--ate-counter-background": "finalSeamless() ? 'transparent' : null", "style.--ate-counter-border-color": "finalSeamless() ? 'transparent' : null", "class.dark": "config().theme === 'dark'", "class.ate-blocks-inside": "finalBlockControls() === 'inside'", "class.ate-blocks-outside": "finalBlockControls() === 'outside'", "attr.data-theme": "config().theme" } }, providers: [AteEditorCommandsService, AteImageService, AteColorPickerService, AteLinkService, AteExportService], viewQueries: [{ propertyName: "editorElement", first: true, predicate: ["editorElement"], descendants: true, isSignal: true }], hostDirectives: [{ directive: i1.AteNoopValueAccessorDirective }], ngImport: i0, template: `
750
771
  <div class="ate-editor">
751
772
  <!-- Toolbar -->
752
773
  @if (finalEditable() && !mergedDisabled() && finalShowToolbar() && editor()) {
@@ -1029,4 +1050,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
1029
1050
  </div>
1030
1051
  `, styles: [":host{--ate-primary: #2563eb;--ate-primary-hover: #153ca9;--ate-primary-contrast: #ffffff;--ate-primary-light: color-mix(in srgb, var(--ate-primary), transparent 90%);--ate-primary-lighter: color-mix(in srgb, var(--ate-primary), transparent 95%);--ate-primary-light-alpha: color-mix(in srgb, var(--ate-primary), transparent 85%);--ate-surface: #ffffff;--ate-surface-secondary: #f8f9fa;--ate-surface-tertiary: #f1f5f9;--ate-text: #2d3748;--ate-text-secondary: #64748b;--ate-text-muted: #a0aec0;--ate-border: #e2e8f0;--ate-highlight-bg: #fef08a;--ate-highlight-color: #854d0e;--ate-button-hover: #f1f5f9;--ate-button-active: #e2e8f0;--ate-selection-bg: var(--ate-primary-light-alpha);--ate-error-color: #c53030;--ate-error-bg: #fed7d7;--ate-error-border: #feb2b2;--ate-border-color: var(--ate-border);--ate-border-width: 2px;--ate-border-radius: 12px;--ate-focus-color: var(--ate-primary);--ate-background: var(--ate-surface);--ate-sub-border-radius: 8px;--ate-text-color: var(--ate-text);--ate-placeholder-color: var(--ate-text-muted);--ate-line-height: 1.6;--ate-content-padding-block: 16px;--ate-content-padding-inline: 16px;--ate-content-gutter: 0px;--ate-menu-bg: var(--ate-surface);--ate-menu-border-radius: var(--ate-border-radius);--ate-menu-border: var(--ate-border);--ate-menu-shadow: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05);--ate-menu-padding: 4px;--ate-menu-gap: 2px;--ate-toolbar-padding: var(--ate-menu-padding);--ate-toolbar-gap: var(--ate-menu-gap);--ate-toolbar-background: var(--ate-surface-secondary);--ate-toolbar-border-color: var(--ate-border);--ate-toolbar-button-color: var(--ate-text-secondary);--ate-toolbar-button-hover-background: transparent;--ate-toolbar-button-active-background: var(--ate-primary-light);--ate-toolbar-button-active-color: var(--ate-primary);--ate-counter-color: var(--ate-text-secondary);--ate-counter-background: var(--ate-surface-secondary);--ate-counter-border-color: var(--ate-border);--ate-drag-background: #f0f8ff;--ate-drag-border-color: var(--ate-primary);--ate-blockquote-border-color: var(--ate-border);--ate-blockquote-background: var(--ate-surface-secondary);--ate-code-background: var(--ate-surface-secondary);--ate-code-color: var(--ate-text);--ate-code-border-color: var(--ate-border);--ate-code-block-background: #0f172a;--ate-code-block-color: #e2e8f0;--ate-code-block-border-color: var(--ate-border);--ate-image-border-radius: 16px;--ate-image-selected-color: var(--ate-primary);--ate-scrollbar-width: 10px;--ate-scrollbar-thumb: var(--ate-border);--ate-scrollbar-thumb-hover: var(--ate-text-muted);--ate-scrollbar-track: transparent;--ate-table-border-color: var(--ate-border);--ate-table-header-background: var(--ate-surface-secondary);--ate-table-header-color: var(--ate-text);--ate-table-cell-background: var(--ate-surface);--ate-table-cell-selected-background: var(--ate-primary-light);--ate-table-resize-handle-color: var(--ate-primary);--ate-table-row-hover-background: var(--ate-primary-lighter);--ate-tooltip-bg: var(--ate-code-block-background, #0f172a);--ate-tooltip-color: var(--ate-code-block-color, #e2e8f0)}:host(.dark),:host([data-theme=\"dark\"]){--ate-primary: #3b82f6;--ate-primary-contrast: #ffffff;--ate-primary-light: color-mix(in srgb, var(--ate-primary), transparent 85%);--ate-primary-lighter: color-mix(in srgb, var(--ate-primary), transparent 92%);--ate-primary-light-alpha: color-mix(in srgb, var(--ate-primary), transparent 80%);--ate-surface: #020617;--ate-surface-secondary: #0f172a;--ate-surface-tertiary: #1e293b;--ate-text: #f8fafc;--ate-text-secondary: #94a3b8;--ate-text-muted: #64748b;--ate-border: #1e293b;--ate-highlight-bg: #854d0e;--ate-highlight-color: #fef08a;--ate-button-hover: #1e293b;--ate-button-active: #0f172a;--ate-menu-border: rgba(255, 255, 255, .1);--ate-menu-shadow: 0 20px 25px -5px rgba(0, 0, 0, .3), 0 10px 10px -5px rgba(0, 0, 0, .2);--ate-error-color: #f87171;--ate-error-bg: #450a0a;--ate-error-border: #7f1d1d;--ate-drag-background: var(--ate-surface-tertiary);--ate-drag-border-color: var(--ate-primary);--ate-blockquote-border-color: var(--ate-primary);--ate-toolbar-button-active-background: var(--ate-primary-light);--ate-toolbar-button-active-color: var(--ate-primary);--ate-button-hover: var(--ate-surface-tertiary);--ate-button-active: var(--ate-surface-secondary);--ate-scrollbar-thumb: var(--ate-surface-tertiary);--ate-scrollbar-thumb-hover: var(--ate-text-muted)}:host(.fill-container){display:block;height:100%}.ate-editor{border:var(--ate-border-width) solid var(--ate-border-color);border-radius:var(--ate-border-radius);background:var(--ate-background);overflow:visible;transition:border-color .2s ease;position:relative}:host(.floating-toolbar) .ate-editor{overflow:visible}:host(.fill-container) .ate-editor{display:flex;flex-direction:column;height:100%}:host(.fill-container) .ate-content-wrapper{flex:1;min-height:0}:host(.fill-container) .ate-content{flex:1;min-height:0;overflow-y:auto}.ate-editor:focus-within{border-color:var(--ate-focus-color)}.ate-content{min-height:var(--editor-min-height, 200px);height:var(--editor-height, auto);max-height:var(--editor-max-height, none);overflow-y:var(--editor-overflow, visible);outline:none;position:relative;scrollbar-width:thin;scrollbar-color:var(--ate-scrollbar-thumb) var(--ate-scrollbar-track)}:host(.is-disabled) .ate-content{cursor:not-allowed;opacity:.7;-webkit-user-select:none;user-select:none;pointer-events:none;background-color:var(--ate-surface-tertiary)}:host(.is-readonly) .ate-content{cursor:default;-webkit-user-select:text;user-select:text}:host(.is-readonly) .ate-content ::ng-deep .ate-link{cursor:pointer;pointer-events:auto}.ate-content::-webkit-scrollbar{width:var(--ate-scrollbar-width)}.ate-content-wrapper{position:relative;display:flex;flex-direction:column;min-height:0}.ate-content-wrapper .ate-content{flex:1}.ate-content::-webkit-scrollbar-track{background:var(--ate-scrollbar-track)}.ate-content::-webkit-scrollbar-thumb{background:var(--ate-scrollbar-thumb);border:3px solid transparent;background-clip:content-box;border-radius:10px}.ate-content::-webkit-scrollbar-thumb:hover{background:var(--ate-scrollbar-thumb-hover);background-clip:content-box}.ate-content.drag-over{background:var(--ate-drag-background);border:2px dashed var(--ate-drag-border-color)}.character-count{padding:6px 8px;font-size:12px;color:var(--ate-counter-color);text-align:right;border-top:1px solid var(--ate-counter-border-color);background:var(--ate-counter-background);transition:color .2s ease;border-bottom-left-radius:calc(var(--ate-border-radius) - var(--ate-border-width));border-bottom-right-radius:calc(var(--ate-border-radius) - var(--ate-border-width))}.character-count.limit-reached{color:var(--ate-error-color, #ef4444);font-weight:600}:host.ate-blocks-inside{--ate-content-gutter: 54px}@media (max-width: 768px){:host.ate-blocks-inside{--ate-content-gutter: 0px}ate-block-controls{display:none!important}}:host ::ng-deep .ProseMirror{padding-inline:calc(var(--ate-content-padding-inline) + var(--ate-content-gutter));padding-block:var(--ate-content-padding-block);outline:none;line-height:var(--ate-line-height);color:var(--ate-text-color);min-height:100%;height:100%;word-wrap:break-word;overflow-wrap:break-word}:host ::ng-deep .ProseMirror ::selection{background-color:var(--ate-selection-bg);color:inherit}:host ::ng-deep .ProseMirror ::-moz-selection{background-color:var(--ate-selection-bg);color:inherit}:host ::ng-deep .ProseMirror h1{font-size:2em;font-weight:700;margin-top:0;margin-bottom:.5em}:host ::ng-deep .ProseMirror h2{font-size:1.5em;font-weight:700;margin-top:1em;margin-bottom:.5em}:host ::ng-deep .ProseMirror h3{font-size:1.25em;font-weight:700;margin-top:1em;margin-bottom:.5em}:host ::ng-deep .ProseMirror p{margin:.5em 0}:host ::ng-deep .ProseMirror ul,:host ::ng-deep .ProseMirror ol{padding-left:2em;margin:.5em 0}:host ::ng-deep .ProseMirror blockquote{border-left:4px solid var(--ate-blockquote-border-color);margin:1em 0;background:var(--ate-blockquote-background);padding:.5em 1em;border-radius:0 4px 4px 0}:host ::ng-deep .ProseMirror code{background:var(--ate-code-background);color:var(--ate-code-color);border:1px solid var(--ate-code-border-color);padding:.15em .4em;border-radius:4px;font-family:JetBrains Mono,Fira Code,Monaco,Consolas,monospace;font-size:.85em;font-weight:500}:host ::ng-deep .ProseMirror pre{background:var(--ate-code-block-background);color:var(--ate-code-block-color);border:1px solid var(--ate-code-block-border-color);padding:1em;border-radius:var(--ate-border-radius);overflow-x:auto;margin:1em 0}:host ::ng-deep .ProseMirror pre code{background:none;color:inherit;border:none;padding:0}:host ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);color:var(--ate-placeholder-color);pointer-events:none;float:left;height:0}:host ::ng-deep .ProseMirror[contenteditable=false] img{cursor:pointer}:host ::ng-deep .ProseMirror[contenteditable=false] a{cursor:pointer}:host ::ng-deep .ProseMirror[contenteditable=false] img:hover{transform:none;box-shadow:0 2px 8px #0000001a}:host ::ng-deep .ProseMirror[contenteditable=false] img.ProseMirror-selectednode{outline:none}:host ::ng-deep .ProseMirror img{position:relative;display:inline-block;max-width:100%;height:auto;cursor:pointer;transition:all .2s ease;border:2px solid transparent;border-radius:var(--ate-image-border-radius)}:host ::ng-deep .ProseMirror img:hover{border-color:var(--ate-border-color);box-shadow:0 2px 4px #0000001a}:host ::ng-deep .ProseMirror img.ProseMirror-selectednode,:host ::ng-deep .resizable-image-container.selected img{border-color:var(--ate-image-selected-color);transition:all .2s ease}:host ::ng-deep .ProseMirror [data-text-align=center],:host ::ng-deep .ProseMirror [data-align=center]{text-align:center}:host ::ng-deep .ProseMirror [data-text-align=right],:host ::ng-deep .ProseMirror [data-align=right]{text-align:right}:host ::ng-deep .ProseMirror [data-text-align=left],:host ::ng-deep .ProseMirror [data-align=left]{text-align:left}:host ::ng-deep .resizable-image-wrapper{display:block;width:100%;margin:.5em 0}:host ::ng-deep .resizable-image-container{position:relative;display:inline-block;max-width:100%}:host ::ng-deep .resize-controls{position:absolute;inset:0;pointer-events:none;z-index:1000;opacity:0;transition:opacity .2s ease}:host:not(.is-readonly):not(.is-disabled) ::ng-deep .resizable-image-container:hover .resize-controls,:host:not(.is-readonly):not(.is-disabled) ::ng-deep body.resizing .resize-controls{opacity:1}:host ::ng-deep .resize-handle{position:absolute;width:.35rem;height:2rem;background:var(--ate-primary);border:2px solid var(--ate-surface);border-radius:var(--ate-border-radius);pointer-events:all;cursor:pointer;z-index:1001;transition:all .15s ease;box-shadow:0 2px 6px #0003}:host ::ng-deep .resize-handle:hover{background:var(--ate-primary);box-shadow:0 3px 8px #0000004d}:host ::ng-deep .resize-handle:active{background:var(--ate-primary)}:host ::ng-deep .resize-handle-w:hover,:host ::ng-deep .resize-handle-e:hover{background:var(--ate-primary-hover)}:host ::ng-deep .resize-handle-w:active,:host ::ng-deep .resize-handle-e:active{transform:translateY(-50%) scale(.9);background:var(--ate-primary-hover)}:host ::ng-deep .resize-handle-w{top:50%;left:.35rem;transform:translateY(-50%);cursor:w-resize}:host ::ng-deep .resize-handle-e{top:50%;right:.35rem;transform:translateY(-50%);cursor:e-resize}:host ::ng-deep body.resizing{-webkit-user-select:none;user-select:none;cursor:crosshair}:host ::ng-deep body.resizing .ProseMirror{pointer-events:none}:host ::ng-deep body.resizing .ProseMirror .resizable-image-container{pointer-events:none}:host ::ng-deep .image-size-info{position:absolute;bottom:-20px;left:50%;transform:translate(-50%);background:#000c;color:#fff;padding:2px 6px;border-radius:3px;font-size:11px;white-space:nowrap;opacity:0;transition:opacity .2s ease}:host ::ng-deep .resizable-image-container:hover .image-size-info{opacity:1}:host ::ng-deep .ProseMirror table{border-collapse:separate;border-spacing:0;margin:0;table-layout:fixed;width:100%;border-radius:8px;overflow:hidden}:host ::ng-deep .ProseMirror table td,:host ::ng-deep .ProseMirror table th{border:none;border-right:1px solid var(--ate-table-border-color);border-bottom:1px solid var(--ate-table-border-color);box-sizing:border-box;min-width:1em;padding:8px 12px;position:relative;vertical-align:top;text-align:left}:host ::ng-deep .ProseMirror table td{background:var(--ate-table-cell-background)}:host ::ng-deep .ProseMirror table td:first-child,:host ::ng-deep .ProseMirror table th:first-child{border-left:1px solid var(--ate-table-border-color)}:host ::ng-deep .ProseMirror table tr:first-child td,:host ::ng-deep .ProseMirror table tr:first-child th{border-top:1px solid var(--ate-table-border-color)}:host ::ng-deep .ProseMirror table tr:first-child th:first-child{border-top-left-radius:8px}:host ::ng-deep .ProseMirror table tr:first-child th:last-child{border-top-right-radius:8px}:host ::ng-deep .ProseMirror table tr:last-child td:first-child{border-bottom-left-radius:8px}:host ::ng-deep .ProseMirror table tr:last-child td:last-child{border-bottom-right-radius:8px}:host ::ng-deep .ProseMirror table th{background:var(--ate-table-header-background);font-weight:600;color:var(--ate-table-header-color)}:host ::ng-deep .ProseMirror table .selectedCell:after{background:var(--ate-table-cell-selected-background);content:\"\";inset:0;pointer-events:none;position:absolute;z-index:2}:host ::ng-deep .ProseMirror table .column-resize-handle{position:absolute;right:-2px;top:0;bottom:0;width:4px;background-color:var(--ate-table-resize-handle-color);opacity:0;transition:opacity .2s ease}:host ::ng-deep .ProseMirror table:hover .column-resize-handle{opacity:1}:host ::ng-deep .ProseMirror table .column-resize-handle:hover{background-color:var(--ate-focus-color)}:host ::ng-deep .ProseMirror .tableWrapper{overflow-x:auto;margin:1em 0;border-radius:8px}:host ::ng-deep .ProseMirror .tableWrapper table{margin:0;border-radius:8px;min-width:600px;overflow:hidden}:host ::ng-deep .ProseMirror table p{margin:0}:host ::ng-deep .ProseMirror table tbody tr:hover td{background-color:var(--ate-table-row-hover-background)}\n"] }]
1031
1052
  }], ctorParameters: () => [] });
1032
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aXB0YXAtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdGlwdGFwLWVkaXRvci9zcmMvbGliL2NvbXBvbmVudHMvZWRpdG9yL2FuZ3VsYXItdGlwdGFwLWVkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUVOLFNBQVMsRUFDVCxNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFFUixNQUFNLEVBQ04sVUFBVSxFQUNWLHVCQUF1QixFQUN2QixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBcUQsTUFBTSxjQUFjLENBQUM7QUFDekYsT0FBTyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLFdBQVcsTUFBTSwyQ0FBMkMsQ0FBQztBQUdwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUs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RSxnQkFBZ0IsQ0FBQyxZQUNyRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEhUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBPbkRlc3Ryb3ksXG4gIHZpZXdDaGlsZCxcbiAgZWZmZWN0LFxuICBzaWduYWwsXG4gIGNvbXB1dGVkLFxuICBBZnRlclZpZXdJbml0LFxuICBpbmplY3QsXG4gIERlc3Ryb3lSZWYsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICB1bnRyYWNrZWQsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3BcIjtcbmltcG9ydCB7IEVkaXRvciwgRWRpdG9yT3B0aW9ucywgRXh0ZW5zaW9uLCBOb2RlLCBNYXJrLCBKU09OQ29udGVudCB9IGZyb20gXCJAdGlwdGFwL2NvcmVcIjtcbmltcG9ydCBTdGFydGVyS2l0IGZyb20gXCJAdGlwdGFwL3N0YXJ0ZXIta2l0XCI7XG5pbXBvcnQgeyBQbGFjZWhvbGRlciwgQ2hhcmFjdGVyQ291bnQgfSBmcm9tIFwiQHRpcHRhcC9leHRlbnNpb25zXCI7XG5pbXBvcnQgeyBTdXBlcnNjcmlwdCB9IGZyb20gXCJAdGlwdGFwL2V4dGVuc2lvbi1zdXBlcnNjcmlwdFwiO1xuaW1wb3J0IHsgU3Vic2NyaXB0IH0gZnJvbSBcIkB0aXB0YXAvZXh0ZW5zaW9uLXN1YnNjcmlwdFwiO1xuaW1wb3J0IHsgVGV4dEFsaWduIH0gZnJvbSBcIkB0aXB0YXAvZXh0ZW5zaW9uLXRleHQtYWxpZ25cIjtcbmltcG9ydCB7IEhpZ2hsaWdodCB9IGZyb20gXCJAdGlwdGFwL2V4dGVuc2lvbi1oaWdobGlnaHRcIjtcbmltcG9ydCB7IFRleHRTdHlsZSB9IGZyb20gXCJAdGlwdGFwL2V4dGVuc2lvbi10ZXh0LXN0eWxlXCI7XG5pbXBvcnQgeyBDb2xvciB9IGZyb20gXCJAdGlwdGFwL2V4dGVuc2lvbi1jb2xvclwiO1xuaW1wb3J0IE9mZmljZVBhc3RlIGZyb20gXCJAaW50ZXZhdGlvbi90aXB0YXAtZXh0ZW5zaW9uLW9mZmljZS1wYXN0ZVwiO1xuaW1wb3J0IHsgTm9kZSBhcyBQTU5vZGUgfSBmcm9tIFwiQHRpcHRhcC9wbS9tb2RlbFwiO1xuXG5pbXBvcnQgeyBBdGVSZXNpemFibGVJbWFnZSB9IGZyb20gXCIuLi8uLi9leHRlbnNpb25zL2F0ZS1yZXNpemFibGUtaW1hZ2UuZXh0ZW5zaW9uXCI7XG5pbXBvcnQgeyBBdGVVcGxvYWRQcm9ncmVzcyB9IGZyb20gXCIuLi8uLi9leHRlbnNpb25zL2F0ZS11cGxvYWQtcHJvZ3Jlc3MuZXh0ZW5zaW9uXCI7XG5pbXBvcnQgeyBBdGVUYWJsZUV4dGVuc2lvbiB9IGZyb20gXCIuLi8uLi9leHRlbnNpb25zL2F0ZS10YWJsZS5leHRlbnNpb25cIjtcbmltcG9ydCB7IEF0ZVRpcHRhcFN0YXRlRXh0ZW5zaW9uIH0gZnJvbSBcIi4uLy4uL2V4dGVuc2lvbnMvYXRlLXRpcHRhcC1zdGF0ZS5leHRlbnNpb25cIjtcbmltcG9ydCB7IEF0ZVRvb2xiYXJDb21wb25lbnQgfSBmcm9tIFwiLi4vdG9vbGJhci9hdGUtdG9vbGJhci5jb21wb25lbnRcIjtcbmltcG9ydCB7IEF0ZUJ1YmJsZU1lbnVDb21wb25lbnQgfSBmcm9tIFwiLi4vYnViYmxlLW1lbnVzL3RleHQvYXRlLWJ1YmJsZS1tZW51LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQXRlSW1hZ2VCdWJibGVNZW51Q29tcG9uZW50IH0gZnJvbSBcIi4uL2J1YmJsZS1tZW51cy9pbWFnZS9hdGUtaW1hZ2UtYnViYmxlLW1lbnUuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBBdGVUYWJsZUJ1YmJsZU1lbnVDb21wb25lbnQgfSBmcm9tIFwiLi4vYnViYmxlLW1lbnVzL3RhYmxlL2F0ZS10YWJsZS1idWJibGUtbWVudS5jb21wb25lbnRcIjtcbmltcG9ydCB7IEF0ZUNlbGxCdWJibGVNZW51Q29tcG9uZW50IH0gZnJvbSBcIi4uL2J1YmJsZS1tZW51cy90YWJsZS9hdGUtY2VsbC1idWJibGUtbWVudS5jb21wb25lbnRcIjtcbmltcG9ydCB7IEF0ZUxpbmtCdWJibGVNZW51Q29tcG9uZW50IH0gZnJvbSBcIi4uL2J1YmJsZS1tZW51cy9saW5rL2F0ZS1saW5rLWJ1YmJsZS1tZW51LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQXRlQ29sb3JCdWJibGVNZW51Q29tcG9uZW50IH0gZnJvbSBcIi4uL2J1YmJsZS1tZW51cy9jb2xvci9hdGUtY29sb3ItYnViYmxlLW1lbnUuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBBdGVTbGFzaENvbW1hbmRzQ29tcG9uZW50IH0gZnJvbSBcIi4uL3NsYXNoLWNvbW1hbmRzL2F0ZS1zbGFzaC1jb21tYW5kcy5jb21wb25lbnRcIjtcbmltcG9ydCB7IEF0ZUJsb2NrQ29udHJvbHNDb21wb25lbnQgfSBmcm9tIFwiLi9hdGUtYmxvY2stY29udHJvbHMuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBBdGVDdXN0b21TbGFzaENvbW1hbmRzIH0gZnJvbSBcIi4uLy4uL21vZGVscy9hdGUtc2xhc2gtY29tbWFuZC5tb2RlbFwiO1xuaW1wb3J0IHsgQXRlRWRpdFRvZ2dsZUNvbXBvbmVudCB9IGZyb20gXCIuLi9lZGl0LXRvZ2dsZS9hdGUtZWRpdC10b2dnbGUuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBBdGVJbWFnZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXRlLWltYWdlLnNlcnZpY2VcIjtcbmltcG9ydCB7IEF0ZUkxOG5TZXJ2aWNlLCBTdXBwb3J0ZWRMb2NhbGUgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXRlLWkxOG4uc2VydmljZVwiO1xuaW1wb3J0IHsgQXRlRWRpdG9yQ29tbWFuZHNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F0ZS1lZGl0b3ItY29tbWFuZHMuc2VydmljZVwiO1xuaW1wb3J0IHsgQXRlQ29sb3JQaWNrZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F0ZS1jb2xvci1waWNrZXIuc2VydmljZVwiO1xuaW1wb3J0IHsgQXRlTGlua1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXRlLWxpbmsuc2VydmljZVwiO1xuaW1wb3J0IHsgQXRlRXhwb3J0U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdGUtZXhwb3J0LnNlcnZpY2VcIjtcbmltcG9ydCB7IEF0ZU5vb3BWYWx1ZUFjY2Vzc29yRGlyZWN0aXZlIH0gZnJvbSBcIi4uLy4uL2RpcmVjdGl2ZXMvYXRlLW5vb3AtdmFsdWUtYWNjZXNzb3IuZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBBdGVTdGF0ZUNhbGN1bGF0b3IgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2F0ZS1lZGl0b3Itc3RhdGUubW9kZWxcIjtcbmltcG9ydCB7IE5nQ29udHJvbCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHtcbiAgZmlsdGVyU2xhc2hDb21tYW5kcyxcbiAgQXRlU2xhc2hDb21tYW5kc0NvbmZpZyxcbn0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hdGUtc2xhc2gtY29tbWFuZHMuY29uZmlnXCI7XG5pbXBvcnQgeyByZWdpc3RlckFuZ3VsYXJDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vbm9kZS12aWV3L2F0ZS1yZWdpc3Rlci1hbmd1bGFyLWNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUmVnaXN0ZXJBbmd1bGFyQ29tcG9uZW50T3B0aW9ucyB9IGZyb20gXCIuLi8uLi9ub2RlLXZpZXcvYXRlLW5vZGUtdmlldy5tb2RlbHNcIjtcbmltcG9ydCB7IEFURV9HTE9CQUxfQ09ORklHIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hdGUtZ2xvYmFsLWNvbmZpZy50b2tlblwiO1xuaW1wb3J0IHsgVHlwZSwgSW5qZWN0b3IgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5pbXBvcnQgeyBBdGVTZWxlY3Rpb25DYWxjdWxhdG9yIH0gZnJvbSBcIi4uLy4uL2V4dGVuc2lvbnMvY2FsY3VsYXRvcnMvYXRlLXNlbGVjdGlvbi5jYWxjdWxhdG9yXCI7XG5pbXBvcnQgeyBBdGVNYXJrc0NhbGN1bGF0b3IgfSBmcm9tIFwiLi4vLi4vZXh0ZW5zaW9ucy9jYWxjdWxhdG9ycy9hdGUtbWFya3MuY2FsY3VsYXRvclwiO1xuaW1wb3J0IHsgQXRlVGFibGVDYWxjdWxhdG9yIH0gZnJvbSBcIi4uLy4uL2V4dGVuc2lvbnMvY2FsY3VsYXRvcnMvYXRlLXRhYmxlLmNhbGN1bGF0b3JcIjtcbmltcG9ydCB7IEF0ZUltYWdlQ2FsY3VsYXRvciB9IGZyb20gXCIuLi8uLi9leHRlbnNpb25zL2NhbGN1bGF0b3JzL2F0ZS1pbWFnZS5jYWxjdWxhdG9yXCI7XG5pbXBvcnQgeyBBdGVTdHJ1Y3R1cmVDYWxjdWxhdG9yIH0gZnJvbSBcIi4uLy4uL2V4dGVuc2lvbnMvY2FsY3VsYXRvcnMvYXRlLXN0cnVjdHVyZS5jYWxjdWxhdG9yXCI7XG5pbXBvcnQgeyBBdGVEaXNjb3ZlcnlDYWxjdWxhdG9yIH0gZnJvbSBcIi4uLy4uL2V4dGVuc2lvbnMvY2FsY3VsYXRvcnMvYXRlLWRpc2NvdmVyeS5jYWxjdWxhdG9yXCI7XG5cbmltcG9ydCB7IEF0ZVRvb2xiYXJDb25maWcgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2F0ZS10b29sYmFyLm1vZGVsXCI7XG5pbXBvcnQge1xuICBBdGVCdWJibGVNZW51Q29uZmlnLFxuICBBdGVJbWFnZUJ1YmJsZU1lbnVDb25maWcsXG4gIEF0ZVRhYmxlQnViYmxlTWVudUNvbmZpZyxcbiAgQXRlQ2VsbEJ1YmJsZU1lbnVDb25maWcsXG59IGZyb20gXCIuLi8uLi9tb2RlbHMvYXRlLWJ1YmJsZS1tZW51Lm1vZGVsXCI7XG5pbXBvcnQge1xuICBBdGVFZGl0b3JDb25maWcsXG4gIEF0ZUFuZ3VsYXJOb2RlLFxuICBBdGVCbG9ja0NvbnRyb2xzTW9kZSxcbiAgQXRlQXV0b2ZvY3VzTW9kZSxcbn0gZnJvbSBcIi4uLy4uL21vZGVscy9hdGUtZWRpdG9yLWNvbmZpZy5tb2RlbFwiO1xuaW1wb3J0IHsgQXRlTGlua0NsaWNrQmVoYXZpb3IgfSBmcm9tIFwiLi4vLi4vZXh0ZW5zaW9ucy9hdGUtbGluay1jbGljay1iZWhhdmlvci5leHRlbnNpb25cIjtcbmltcG9ydCB7IEF0ZUJsb2NrQ29udHJvbHNFeHRlbnNpb24gfSBmcm9tIFwiLi4vLi4vZXh0ZW5zaW9ucy9hdGUtYmxvY2stY29udHJvbHMuZXh0ZW5zaW9uXCI7XG5pbXBvcnQge1xuICBBVEVfREVGQVVMVF9UT09MQkFSX0NPTkZJRyxcbiAgQVRFX0RFRkFVTFRfQlVCQkxFX01FTlVfQ09ORklHLFxuICBBVEVfREVGQVVMVF9JTUFHRV9CVUJCTEVfTUVOVV9DT05GSUcsXG4gIEFURV9ERUZBVUxUX0lNQUdFX1VQTE9BRF9DT05GSUcsXG4gIEFURV9ERUZBVUxUX1RBQkxFX01FTlVfQ09ORklHLFxuICBBVEVfREVGQVVMVF9DRUxMX01FTlVfQ09ORklHLFxuICBBVEVfREVGQVVMVF9DT05GSUcsXG59IGZyb20gXCIuLi8uLi9jb25maWcvYXRlLWVkaXRvci5jb25maWdcIjtcbmltcG9ydCB7IGNvbmNhdCwgZGVmZXIsIE9ic2VydmFibGUsIG9mLCB0YXAgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgQXRlSW1hZ2VVcGxvYWRIYW5kbGVyLCBBdGVJbWFnZVVwbG9hZE9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2F0ZS1pbWFnZS5tb2RlbFwiO1xuXG4vLyBTbGFzaCBjb21tYW5kcyBjb25maWd1cmF0aW9uIGlzIGhhbmRsZWQgZHluYW1pY2FsbHkgdmlhIHNsYXNoQ29tbWFuZHNDb25maWdDb21wdXRlZFxuXG4vKipcbiAqIFRoZSBtYWluIHJpY2gtdGV4dCBlZGl0b3IgY29tcG9uZW50IGZvciBBbmd1bGFyLlxuICpcbiAqIFBvd2VyZWQgYnkgVGlwdGFwIGFuZCBidWlsdCB3aXRoIGEgbmF0aXZlIFNpZ25hbC1iYXNlZCBhcmNoaXRlY3R1cmUsIGl0IHByb3ZpZGVzXG4gKiBhIHNlYW1sZXNzLCBoaWdoLXBlcmZvcm1hbmNlIGVkaXRpbmcgZXhwZXJpZW5jZS4gU3VwcG9ydHMgYXV0b21hdGljIHJlZ2lzdHJhdGlvblxuICogb2YgQW5ndWxhciBjb21wb25lbnRzIGFzIGludGVyYWN0aXZlIG5vZGVzICgnQW5ndWxhciBOb2RlcycpLCBmdWxsIFJlYWN0aXZlIEZvcm1zXG4gKiBpbnRlZ3JhdGlvbiwgYW5kIGV4dGVuc2l2ZSBjdXN0b21pemF0aW9uIHZpYSB0aGUgQXRlRWRpdG9yQ29uZmlnLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYW5ndWxhci10aXB0YXAtZWRpdG9yXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0RGlyZWN0aXZlczogW0F0ZU5vb3BWYWx1ZUFjY2Vzc29yRGlyZWN0aXZlXSxcbiAgaG9zdDoge1xuICAgIFwiW2NsYXNzLmZpbGwtY29udGFpbmVyXVwiOiBcImZpbmFsRmlsbENvbnRhaW5lcigpXCIsXG4gICAgXCJbY2xhc3MuZmxvYXRpbmctdG9vbGJhcl1cIjogXCJmaW5hbEZsb2F0aW5nVG9vbGJhcigpXCIsXG4gICAgXCJbY2xhc3MuaXMtcmVhZG9ubHldXCI6IFwiIWZpbmFsRWRpdGFibGUoKSAmJiAhbWVyZ2VkRGlzYWJsZWQoKVwiLFxuICAgIFwiW2NsYXNzLmlzLWRpc2FibGVkXVwiOiBcIm1lcmdlZERpc2FibGVkKClcIixcbiAgICBcIltzdHlsZS4tLWF0ZS1ib3JkZXItd2lkdGhdXCI6IFwiZmluYWxTZWFtbGVzcygpIHx8IG1lcmdlZERpc2FibGVkKCkgPyAnMCcgOiBudWxsXCIsXG4gICAgXCJbc3R5bGUuLS1hdGUtYmFja2dyb3VuZF1cIjpcbiAgICAgIFwiZmluYWxTZWFtbGVzcygpID8gJ3RyYW5zcGFyZW50JyA6IChtZXJnZWREaXNhYmxlZCgpID8gJ3ZhcigtLWF0ZS1zdXJmYWNlLXRlcnRpYXJ5KScgOiBudWxsKVwiLFxuICAgIFwiW3N0eWxlLi0tYXRlLXRvb2xiYXItYm9yZGVyLWNvbG9yXVwiOiBcImZpbmFsU2VhbWxlc3MoKSA/ICd0cmFuc3BhcmVudCcgOiBudWxsXCIsXG4gICAgXCJbc3R5bGUuLS1hdGUtY291bnRlci1iYWNrZ3JvdW5kXVwiOiBcImZpbmFsU2VhbWxlc3MoKSA/ICd0cmFuc3BhcmVudCcgOiBudWxsXCIsXG4gICAgXCJbc3R5bGUuLS1hdGUtY291bnRlci1ib3JkZXItY29sb3JdXCI6IFwiZmluYWxTZWFtbGVzcygpID8gJ3RyYW5zcGFyZW50JyA6IG51bGxcIixcbiAgICBcIltjbGFzcy5kYXJrXVwiOiBcImNvbmZpZygpLnRoZW1lID09PSAnZGFyaydcIixcbiAgICBcIltjbGFzcy5hdGUtYmxvY2tzLWluc2lkZV1cIjogXCJmaW5hbEJsb2NrQ29udHJvbHMoKSA9PT0gJ2luc2lkZSdcIixcbiAgICBcIltjbGFzcy5hdGUtYmxvY2tzLW91dHNpZGVdXCI6IFwiZmluYWxCbG9ja0NvbnRyb2xzKCkgPT09ICdvdXRzaWRlJ1wiLFxuICAgIFwiW2F0dHIuZGF0YS10aGVtZV1cIjogXCJjb25maWcoKS50aGVtZVwiLFxuICB9LFxuICBpbXBvcnRzOiBbXG4gICAgQXRlVG9vbGJhckNvbXBvbmVudCxcbiAgICBBdGVCdWJibGVNZW51Q29tcG9uZW50LFxuICAgIEF0ZUltYWdlQnViYmxlTWVudUNvbXBvbmVudCxcbiAgICBBdGVUYWJsZUJ1YmJsZU1lbnVDb21wb25lbnQsXG4gICAgQXRlQ2VsbEJ1YmJsZU1lbnVDb21wb25lbnQsXG4gICAgQXRlU2xhc2hDb21tYW5kc0NvbXBvbmVudCxcbiAgICBBdGVMaW5rQnViYmxlTWVudUNvbXBvbmVudCxcbiAgICBBdGVDb2xvckJ1YmJsZU1lbnVDb21wb25lbnQsXG4gICAgQXRlRWRpdFRvZ2dsZUNvbXBvbmVudCxcbiAgICBBdGVCbG9ja0NvbnRyb2xzQ29tcG9uZW50LFxuICBdLFxuICBwcm92aWRlcnM6IFtBdGVFZGl0b3JDb21tYW5kc1NlcnZpY2UsIEF0ZUltYWdlU2VydmljZSwgQXRlQ29sb3JQaWNrZXJTZXJ2aWNlLCBBdGVMaW5rU2VydmljZSwgQXRlRXhwb3J0U2VydmljZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImF0ZS1lZGl0b3JcIj5cbiAgICAgIDwhLS0gVG9vbGJhciAtLT5cbiAgICAgIEBpZiAoZmluYWxFZGl0YWJsZSgpICYmICFtZXJnZWREaXNhYmxlZCgpICYmIGZpbmFsU2hvd1Rvb2xiYXIoKSAmJiBlZGl0b3IoKSkge1xuICAgICAgICA8YXRlLXRvb2xiYXJcbiAgICAgICAgICBbZWRpdG9yXT1cImVkaXRvcigpIVwiXG4gICAgICAgICAgW2NvbmZpZ109XCJmaW5hbFRvb2xiYXJDb25maWcoKVwiXG4gICAgICAgICAgW2ltYWdlVXBsb2FkXT1cImZpbmFsSW1hZ2VVcGxvYWRDb25maWcoKVwiXG4gICAgICAgICAgW2Zsb2F0aW5nXT1cImZpbmFsRmxvYXRpbmdUb29sYmFyKClcIlxuICAgICAgICAgIChtb3VzZWVudGVyKT1cImhpZGVCdWJibGVNZW51cygpXCJcbiAgICAgICAgICAobW91c2VsZWF2ZSk9XCJzaG93QnViYmxlTWVudXMoKVwiIC8+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoZmluYWxTaG93RWRpdFRvZ2dsZSgpICYmICFtZXJnZWREaXNhYmxlZCgpKSB7XG4gICAgICAgIDxhdGUtZWRpdC10b2dnbGVcbiAgICAgICAgICBbZWRpdGFibGVdPVwiZmluYWxFZGl0YWJsZSgpXCJcbiAgICAgICAgICBbdHJhbnNsYXRpb25zXT1cImN1cnJlbnRUcmFuc2xhdGlvbnMoKVwiXG4gICAgICAgICAgKGVkaXRUb2dnbGUpPVwidG9nZ2xlRWRpdE1vZGUoJGV2ZW50KVwiIC8+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gRWRpdG9yIENvbnRlbnQgLS0+XG4gICAgICA8ZGl2XG4gICAgICAgICNlZGl0b3JFbGVtZW50XG4gICAgICAgIGNsYXNzPVwiYXRlLWNvbnRlbnRcIlxuICAgICAgICBbY2xhc3MuZHJhZy1vdmVyXT1cImlzRHJhZ092ZXIoKVwiXG4gICAgICAgIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIlxuICAgICAgICAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50KVwiXG4gICAgICAgIChjbGljayk9XCJvbkVkaXRvckNsaWNrKCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvbkVkaXRvckNsaWNrKCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJvbkVkaXRvckNsaWNrKCRldmVudClcIlxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICByb2xlPVwiYXBwbGljYXRpb25cIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImN1cnJlbnRUcmFuc2xhdGlvbnMoKS5lZGl0b3IucGxhY2Vob2xkZXJcIj48L2Rpdj5cblxuICAgICAgPCEtLSBCbG9jayBDb250cm9scyAoUGx1cyArIERyYWcpIC0tPlxuICAgICAgQGlmIChmaW5hbEVkaXRhYmxlKCkgJiYgIW1lcmdlZERpc2FibGVkKCkgJiYgZWRpdG9yKCkgJiYgZmluYWxCbG9ja0NvbnRyb2xzKCkgIT09IFwibm9uZVwiKSB7XG4gICAgICAgIDxhdGUtYmxvY2stY29udHJvbHNcbiAgICAgICAgICBbZWRpdG9yXT1cImVkaXRvcigpIVwiXG4gICAgICAgICAgW2hvdmVyZWREYXRhXT1cImhvdmVyZWRCbG9jaygpXCJcbiAgICAgICAgICBbc3R5bGUuZGlzcGxheV09XCJlZGl0b3JGdWxseUluaXRpYWxpemVkKCkgPyAnYmxvY2snIDogJ25vbmUnXCI+PC9hdGUtYmxvY2stY29udHJvbHM+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gVGV4dCBCdWJibGUgTWVudSAtLT5cbiAgICAgIEBpZiAoZmluYWxFZGl0YWJsZSgpICYmIGZpbmFsU2hvd0J1YmJsZU1lbnUoKSAmJiBlZGl0b3IoKSkge1xuICAgICAgICA8YXRlLWJ1YmJsZS1tZW51XG4gICAgICAgICAgW2VkaXRvcl09XCJlZGl0b3IoKSFcIlxuICAgICAgICAgIFtjb25maWddPVwiZmluYWxCdWJibGVNZW51Q29uZmlnKClcIlxuICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImVkaXRvckZ1bGx5SW5pdGlhbGl6ZWQoKSA/ICdibG9jaycgOiAnbm9uZSdcIj48L2F0ZS1idWJibGUtbWVudT5cbiAgICAgIH1cblxuICAgICAgPCEtLSBJbWFnZSBCdWJibGUgTWVudSAtLT5cbiAgICAgIEBpZiAoZmluYWxTaG93SW1hZ2VCdWJibGVNZW51KCkgJiYgZWRpdG9yKCkpIHtcbiAgICAgICAgPGF0ZS1pbWFnZS1idWJibGUtbWVudVxuICAgICAgICAgIFtlZGl0b3JdPVwiZWRpdG9yKCkhXCJcbiAgICAgICAgICBbY29uZmlnXT1cImZpbmFsSW1hZ2VCdWJibGVNZW51Q29uZmlnKClcIlxuICAgICAgICAgIFtpbWFnZVVwbG9hZF09XCJmaW5hbEltYWdlVXBsb2FkQ29uZmlnKClcIlxuICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImVkaXRvckZ1bGx5SW5pdGlhbGl6ZWQoKSA/ICdibG9jaycgOiAnbm9uZSdcIj48L2F0ZS1pbWFnZS1idWJibGUtbWVudT5cbiAgICAgIH1cblxuICAgICAgPCEtLSBMaW5rIEJ1YmJsZSBNZW51IC0tPlxuICAgICAgQGlmIChmaW5hbEVkaXRhYmxlKCkgJiYgZWRpdG9yKCkpIHtcbiAgICAgICAgPGF0ZS1saW5rLWJ1YmJsZS1tZW51XG4gICAgICAgICAgW2VkaXRvcl09XCJlZGl0b3IoKSFcIlxuICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImVkaXRvckZ1bGx5SW5pdGlhbGl6ZWQoKSA/ICdibG9jaycgOiAnbm9uZSdcIj48L2F0ZS1saW5rLWJ1YmJsZS1tZW51PlxuICAgICAgfVxuXG4gICAgICA8IS0tIENvbG9yIEJ1YmJsZSBNZW51IC0tPlxuICAgICAgQGlmIChmaW5hbEVkaXRhYmxlKCkgJiYgZWRpdG9yKCkpIHtcbiAgICAgICAgPGF0ZS1jb2xvci1idWJibGUtbWVudVxuICAgICAgICAgIFtlZGl0b3JdPVwiZWRpdG9yKCkhXCJcbiAgICAgICAgICBbc3R5bGUuZGlzcGxheV09XCJlZGl0b3JGdWxseUluaXRpYWxpemVkKCkgPyAnYmxvY2snIDogJ25vbmUnXCI+PC9hdGUtY29sb3ItYnViYmxlLW1lbnU+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gU2xhc2ggQ29tbWFuZHMgLS0+XG4gICAgICBAaWYgKGZpbmFsRWRpdGFibGUoKSAmJiBmaW5hbEVuYWJsZVNsYXNoQ29tbWFuZHMoKSAmJiBlZGl0b3IoKSkge1xuICAgICAgICA8YXRlLXNsYXNoLWNvbW1hbmRzXG4gICAgICAgICAgW2VkaXRvcl09XCJlZGl0b3IoKSFcIlxuICAgICAgICAgIFtjb25maWddPVwiZmluYWxTbGFzaENvbW1hbmRzQ29uZmlnKClcIlxuICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImVkaXRvckZ1bGx5SW5pdGlhbGl6ZWQoKSA/ICdibG9jaycgOiAnbm9uZSdcIj48L2F0ZS1zbGFzaC1jb21tYW5kcz5cbiAgICAgIH1cblxuICAgICAgPCEtLSBUYWJsZSBNZW51IC0tPlxuICAgICAgQGlmIChmaW5hbEVkaXRhYmxlKCkgJiYgZmluYWxTaG93VGFibGVCdWJibGVNZW51KCkgJiYgZWRpdG9yKCkpIHtcbiAgICAgICAgPGF0ZS10YWJsZS1idWJibGUtbWVudVxuICAgICAgICAgIFtlZGl0b3JdPVwiZWRpdG9yKCkhXCJcbiAgICAgICAgICBbY29uZmlnXT1cImZpbmFsVGFibGVCdWJibGVNZW51Q29uZmlnKClcIlxuICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImVkaXRvckZ1bGx5SW5pdGlhbGl6ZWQoKSA/ICdibG9jaycgOiAnbm9uZSdcIj48L2F0ZS10YWJsZS1idWJibGUtbWVudT5cbiAgICAgIH1cblxuICAgICAgPCEtLSBDZWxsIE1lbnUgLS0+XG4gICAgICBAaWYgKGZpbmFsRWRpdGFibGUoKSAmJiBmaW5hbFNob3dDZWxsQnViYmxlTWVudSgpICYmIGVkaXRvcigpKSB7XG4gICAgICAgIDxhdGUtY2VsbC1idWJibGUtbWVudVxuICAgICAgICAgIFtlZGl0b3JdPVwiZWRpdG9yKCkhXCJcbiAgICAgICAgICBbY29uZmlnXT1cImZpbmFsQ2VsbEJ1YmJsZU1lbnVDb25maWcoKVwiXG4gICAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwiZWRpdG9yRnVsbHlJbml0aWFsaXplZCgpID8gJ2Jsb2NrJyA6ICdub25lJ1wiPjwvYXRlLWNlbGwtYnViYmxlLW1lbnU+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gQ291bnRlcnMgLS0+XG4gICAgICBAaWYgKFxuICAgICAgICBmaW5hbEVkaXRhYmxlKCkgJiZcbiAgICAgICAgIW1lcmdlZERpc2FibGVkKCkgJiZcbiAgICAgICAgZmluYWxTaG93Rm9vdGVyKCkgJiZcbiAgICAgICAgKGZpbmFsU2hvd0NoYXJhY3RlckNvdW50KCkgfHwgZmluYWxTaG93V29yZENvdW50KCkpXG4gICAgICApIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY2hhcmFjdGVyLWNvdW50XCJcbiAgICAgICAgICBbY2xhc3MubGltaXQtcmVhY2hlZF09XCJmaW5hbE1heENoYXJhY3RlcnMoKSAmJiBjaGFyYWN0ZXJDb3VudCgpID49IGZpbmFsTWF4Q2hhcmFjdGVycygpIVwiPlxuICAgICAgICAgIEBpZiAoZmluYWxTaG93Q2hhcmFjdGVyQ291bnQoKSkge1xuICAgICAgICAgICAge3sgY2hhcmFjdGVyQ291bnQoKSB9fVxuICAgICAgICAgICAge3sgY3VycmVudFRyYW5zbGF0aW9ucygpLmVkaXRvci5jaGFyYWN0ZXIgfX17eyBjaGFyYWN0ZXJDb3VudCgpID4gMSA/IFwic1wiIDogXCJcIiB9fVxuICAgICAgICAgICAgQGlmIChmaW5hbE1heENoYXJhY3RlcnMoKSkge1xuICAgICAgICAgICAgICAvIHt7IGZpbmFsTWF4Q2hhcmFjdGVycygpIH19XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGlmIChmaW5hbFNob3dDaGFyYWN0ZXJDb3VudCgpICYmIGZpbmFsU2hvd1dvcmRDb3VudCgpKSB7XG4gICAgICAgICAgICAsXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGlmIChmaW5hbFNob3dXb3JkQ291bnQoKSkge1xuICAgICAgICAgICAge3sgd29yZENvdW50KCkgfX1cbiAgICAgICAgICAgIHt7IGN1cnJlbnRUcmFuc2xhdGlvbnMoKS5lZGl0b3Iud29yZCB9fXt7IHdvcmRDb3VudCgpID4gMSA/IFwic1wiIDogXCJcIiB9fVxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG5cbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAgQ1NTIEN1c3RvbSBQcm9wZXJ0aWVzIChWYXJpYWJsZXMpXG4gICAgICAgICBPdmVycmlkZSB0aGVzZSB0byBjdXN0b21pemUgdGhlIGVkaXRvclxuICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuICAgICAgOmhvc3Qge1xuICAgICAgICAvKiA9PT09PSBCQVNFIFRPS0VOUyAoY3VzdG9taXplIHRoZXNlIGZvciBlYXN5IHRoZW1pbmcpID09PT09ICovXG4gICAgICAgIC0tYXRlLXByaW1hcnk6ICMyNTYzZWI7XG4gICAgICAgIC0tYXRlLXByaW1hcnktaG92ZXI6ICMxNTNjYTk7XG4gICAgICAgIC0tYXRlLXByaW1hcnktY29udHJhc3Q6ICNmZmZmZmY7XG4gICAgICAgIC0tYXRlLXByaW1hcnktbGlnaHQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hdGUtcHJpbWFyeSksIHRyYW5zcGFyZW50IDkwJSk7XG4gICAgICAgIC0tYXRlLXByaW1hcnktbGlnaHRlcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWF0ZS1wcmltYXJ5KSwgdHJhbnNwYXJlbnQgOTUlKTtcbiAgICAgICAgLS1hdGUtcHJpbWFyeS1saWdodC1hbHBoYTogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWF0ZS1wcmltYXJ5KSwgdHJhbnNwYXJlbnQgODUlKTtcblxuICAgICAgICAtLWF0ZS1zdXJmYWNlOiAjZmZmZmZmO1xuICAgICAgICAtLWF0ZS1zdXJmYWNlLXNlY29uZGFyeTogI2Y4ZjlmYTtcbiAgICAgICAgLS1hdGUtc3VyZmFjZS10ZXJ0aWFyeTogI2YxZjVmOTtcblxuICAgICAgICAtLWF0ZS10ZXh0OiAjMmQzNzQ4O1xuICAgICAgICAtLWF0ZS10ZXh0LXNlY29uZGFyeTogIzY0NzQ4YjtcbiAgICAgICAgLS1hdGUtdGV4dC1tdXRlZDogI2EwYWVjMDtcblxuICAgICAgICAtLWF0ZS1ib3JkZXI6ICNlMmU4ZjA7XG5cbiAgICAgICAgLS1hdGUtaGlnaGxpZ2h0LWJnOiAjZmVmMDhhO1xuICAgICAgICAtLWF0ZS1oaWdobGlnaHQtY29sb3I6ICM4NTRkMGU7XG5cbiAgICAgICAgLS1hdGUtYnV0dG9uLWhvdmVyOiAjZjFmNWY5O1xuICAgICAgICAtLWF0ZS1idXR0b24tYWN0aXZlOiAjZTJlOGYwO1xuXG4gICAgICAgIC0tYXRlLXNlbGVjdGlvbi1iZzogdmFyKC0tYXRlLXByaW1hcnktbGlnaHQtYWxwaGEpO1xuXG4gICAgICAgIC0tYXRlLWVycm9yLWNvbG9yOiAjYzUzMDMwO1xuICAgICAgICAtLWF0ZS1lcnJvci1iZzogI2ZlZDdkNztcbiAgICAgICAgLS1hdGUtZXJyb3ItYm9yZGVyOiAjZmViMmIyO1xuXG4gICAgICAgIC8qID09PT09IENPTVBPTkVOVCBUT0tFTlMgKHVzZSBiYXNlIHRva2VucyBieSBkZWZhdWx0KSA9PT09PSAqL1xuICAgICAgICAvKiBCb3JkZXIgJiBDb250YWluZXIgKi9cbiAgICAgICAgLS1hdGUtYm9yZGVyLWNvbG9yOiB2YXIoLS1hdGUtYm9yZGVyKTtcbiAgICAgICAgLS1hdGUtYm9yZGVyLXdpZHRoOiAycHg7XG4gICAgICAgIC0tYXRlLWJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgICAgIC0tYXRlLWZvY3VzLWNvbG9yOiB2YXIoLS1hdGUtcHJpbWFyeSk7XG4gICAgICAgIC0tYXRlLWJhY2tncm91bmQ6IHZhcigtLWF0ZS1zdXJmYWNlKTtcbiAgICAgICAgLS1hdGUtc3ViLWJvcmRlci1yYWRpdXM6IDhweDtcblxuICAgICAgICAvKiBDb250ZW50ICovXG4gICAgICAgIC0tYXRlLXRleHQtY29sb3I6IHZhcigtLWF0ZS10ZXh0KTtcbiAgICAgICAgLS1hdGUtcGxhY2Vob2xkZXItY29sb3I6IHZhcigtLWF0ZS10ZXh0LW11dGVkKTtcbiAgICAgICAgLS1hdGUtbGluZS1oZWlnaHQ6IDEuNjtcbiAgICAgICAgLS1hdGUtY29udGVudC1wYWRkaW5nLWJsb2NrOiAxNnB4O1xuICAgICAgICAtLWF0ZS1jb250ZW50LXBhZGRpbmctaW5saW5lOiAxNnB4O1xuICAgICAgICAtLWF0ZS1jb250ZW50LWd1dHRlcjogMHB4O1xuXG4gICAgICAgIC8qID09PT09IE1FTlVTIChTbGFzaC9CdWJibGUpID09PT09ICovXG4gICAgICAgIC0tYXRlLW1lbnUtYmc6IHZhcigtLWF0ZS1zdXJmYWNlKTtcbiAgICAgICAgLS1hdGUtbWVudS1ib3JkZXItcmFkaXVzOiB2YXIoLS1hdGUtYm9yZGVyLXJhZGl1cyk7XG4gICAgICAgIC0tYXRlLW1lbnUtYm9yZGVyOiB2YXIoLS1hdGUtYm9yZGVyKTtcbiAgICAgICAgLS1hdGUtbWVudS1zaGFkb3c6IDAgMTBweCAxNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDRweCA2cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICAgICAgICAtLWF0ZS1tZW51LXBhZGRpbmc6IDRweDtcbiAgICAgICAgLS1hdGUtbWVudS1nYXA6IDJweDtcblxuICAgICAgICAvKiBUb29sYmFyICovXG4gICAgICAgIC0tYXRlLXRvb2xiYXItcGFkZGluZzogdmFyKC0tYXRlLW1lbnUtcGFkZGluZyk7XG4gICAgICAgIC0tYXRlLXRvb2xiYXItZ2FwOiB2YXIoLS1hdGUtbWVudS1nYXApO1xuICAgICAgICAtLWF0ZS10b29sYmFyLWJhY2tncm91bmQ6IHZhcigtLWF0ZS1zdXJmYWNlLXNlY29uZGFyeSk7XG4gICAgICAgIC0tYXRlLXRvb2xiYXItYm9yZGVyLWNvbG9yOiB2YXIoLS1hdGUtYm9yZGVyKTtcbiAgICAgICAgLS1hdGUtdG9vbGJhci1idXR0b24tY29sb3I6IHZhcigtLWF0ZS10ZXh0LXNlY29uZGFyeSk7XG4gICAgICAgIC0tYXRlLXRvb2xiYXItYnV0dG9uLWhvdmVyLWJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICAtLWF0ZS10b29sYmFyLWJ1dHRvbi1hY3RpdmUtYmFja2dyb3VuZDogdmFyKC0tYXRlLXByaW1hcnktbGlnaHQpO1xuICAgICAgICAtLWF0ZS10b29sYmFyLWJ1dHRvbi1hY3RpdmUtY29sb3I6IHZhcigtLWF0ZS1wcmltYXJ5KTtcblxuICAgICAgICAvKiBDb3VudGVyICovXG4gICAgICAgIC0tYXRlLWNvdW50ZXItY29sb3I6IHZhcigtLWF0ZS10ZXh0LXNlY29uZGFyeSk7XG4gICAgICAgIC0tYXRlLWNvdW50ZXItYmFja2dyb3VuZDogdmFyKC0tYXRlLXN1cmZhY2Utc2Vjb25kYXJ5KTtcbiAgICAgICAgLS1hdGUtY291bnRlci1ib3JkZXItY29sb3I6IHZhcigtLWF0ZS1ib3JkZXIpO1xuXG4gICAgICAgIC8qIERyYWcgJiBEcm9wICovXG4gICAgICAgIC0tYXRlLWRyYWctYmFja2dyb3VuZDogI2YwZjhmZjtcbiAgICAgICAgLS1hdGUtZHJhZy1ib3JkZXItY29sb3I6IHZhcigtLWF0ZS1wcmltYXJ5KTtcblxuICAgICAgICAvKiBCbG9ja3F1b3RlICovXG4gICAgICAgIC0tYXRlLWJsb2NrcXVvdGUtYm9yZGVyLWNvbG9yOiB2YXIoLS1hdGUtYm9yZGVyKTtcbiAgICAgICAgLS1hdGUtYmxvY2txdW90ZS1iYWNrZ3JvdW5kOiB2YXIoLS1hdGUtc3VyZmFjZS1zZWNvbmRhcnkpO1xuXG4gICAgICAgIC8qIENvZGUgKi9cbiAgICAgICAgLS1hdGUtY29kZS1iYWNrZ3JvdW5kOiB2YXIoLS1hdGUtc3VyZmFjZS1zZWNvbmRhcnkpO1xuICAgICAgICAtLWF0ZS1jb2RlLWNvbG9yOiB2YXIoLS1hdGUtdGV4dCk7XG4gICAgICAgIC0tYXRlLWNvZGUtYm9yZGVyLWNvbG9yOiB2YXIoLS1hdGUtYm9yZGVyKTtcblxuICAgICAgICAtLWF0ZS1jb2RlLWJsb2NrLWJhY2tncm91bmQ6ICMwZjE3MmE7XG4gICAgICAgIC0tYXRlLWNvZGUtYmxvY2stY29sb3I6ICNlMmU4ZjA7XG4gICAgICAgIC0tYXRlLWNvZGUtYmxvY2stYm9yZGVyLWNvbG9yOiB2YXIoLS1hdGUtYm9yZGVyKTtcblxuICAgICAgICAvKiBJbWFnZXMgKi9cbiAgICAgICAgLS1hdGUtaW1hZ2UtYm9yZGVyLXJhZGl1czogMTZweDtcbiAgICAgICAgLS1hdGUtaW1hZ2Utc2VsZWN0ZWQtY29sb3I6IHZhcigtLWF0ZS1wcmltYXJ5KTtcblxuICAgICAgICAvKiBTY3JvbGxiYXJzICovXG4gICAgICAgIC0tYXRlLXNjcm9sbGJhci13aWR0aDogMTBweDtcbiAgICAgICAgLS1hdGUtc2Nyb2xsYmFyLXRodW1iOiB2YXIoLS1hdGUtYm9yZGVyKTtcbiAgICAgICAgLS1hdGUtc2Nyb2xsYmFyLXRodW1iLWhvdmVyOiB2YXIoLS1hdGUtdGV4dC1tdXRlZCk7XG4gICAgICAgIC0tYXRlLXNjcm9sbGJhci10cmFjazogdHJhbnNwYXJlbnQ7XG5cbiAgICAgICAgLyogVGFibGVzICovXG4gICAgICAgIC0tYXRlLXRhYmxlLWJvcmRlci1jb2xvcjogdmFyKC0tYXRlLWJvcmRlcik7XG4gICAgICAgIC0tYXRlLXRhYmxlLWhlYWRlci1iYWNrZ3JvdW5kOiB2YXIoLS1hdGUtc3VyZmFjZS1zZWNvbmRhcnkpO1xuICAgICAgICAtLWF0ZS10YWJsZS1oZWFkZXItY29sb3I6IHZhcigtLWF0ZS10ZXh0KTtcbiAgICAgICAgLS1hdGUtdGFibGUtY2VsbC1iYWNrZ3JvdW5kOiB2YXIoLS1hdGUtc3VyZmFjZSk7XG4gICAgICAgIC0tYXRlLXRhYmxlLWNlbGwtc2VsZWN0ZWQtYmFja2dyb3VuZDogdmFyKC0tYXRlLXByaW1hcnktbGlnaHQpO1xuICAgICAgICAtLWF0ZS10YWJsZS1yZXNpemUtaGFuZGxlLWNvbG9yOiB2YXIoLS1hdGUtcHJpbWFyeSk7XG4gICAgICAgIC0tYXRlLXRhYmxlLXJvdy1ob3Zlci1iYWNrZ3JvdW5kOiB2YXIoLS1hdGUtcHJpbWFyeS1saWdodGVyKTtcblxuICAgICAgICAvKiBGbG9hdGluZyBVSSAmIFRvb2x0aXBzICovXG4gICAgICAgIC0tYXRlLXRvb2x0aXAtYmc6IHZhcigtLWF0ZS1jb2RlLWJsb2NrLWJhY2tncm91bmQsICMwZjE3MmEpO1xuICAgICAgICAtLWF0ZS10b29sdGlwLWNvbG9yOiB2YXIoLS1hdGUtY29kZS1ibG9jay1jb2xvciwgI2UyZThmMCk7XG4gICAgICB9XG5cbiAgICAgIC8qIE1hbnVhbCBkYXJrIG1vZGUgd2l0aCBjbGFzcyBvciBkYXRhIGF0dHJpYnV0ZSAqL1xuICAgICAgOmhvc3QoLmRhcmspLFxuICAgICAgOmhvc3QoW2RhdGEtdGhlbWU9XCJkYXJrXCJdKSB7XG4gICAgICAgIC8qID09PT09IERBUksgQkFTRSBUT0tFTlMgPT09PT0gKi9cbiAgICAgICAgLS1hdGUtcHJpbWFyeTogIzNiODJmNjtcbiAgICAgICAgLS1hdGUtcHJpbWFyeS1jb250cmFzdDogI2ZmZmZmZjtcbiAgICAgICAgLS1hdGUtcHJpbWFyeS1saWdodDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWF0ZS1wcmltYXJ5KSwgdHJhbnNwYXJlbnQgODUlKTtcbiAgICAgICAgLS1hdGUtcHJpbWFyeS1saWdodGVyOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYXRlLXByaW1hcnkpLCB0cmFuc3BhcmVudCA5MiUpO1xuICAgICAgICAtLWF0ZS1wcmltYXJ5LWxpZ2h0LWFscGhhOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYXRlLXByaW1hcnkpLCB0cmFuc3BhcmVudCA4MCUpO1xuXG4gICAgICAgIC0tYXRlLXN1cmZhY2U6ICMwMjA2MTc7XG4gICAgICAgIC0tYXRlLXN1cmZhY2Utc2Vjb25kYXJ5OiAjMGYxNzJhO1xuICAgICAgICAtLWF0ZS1zdXJmYWNlLXRlcnRpYXJ5OiAjMWUyOTNiO1xuXG4gICAgICAgIC0tYXRlLXRleHQ6ICNmOGZhZmM7XG4gICAgICAgIC0tYXRlLXRleHQtc2Vjb25kYXJ5OiAjOTRhM2I4O1xuICAgICAgICAtLWF0ZS10ZXh0LW11dGVkOiAjNjQ3NDhiO1xuXG4gICAgICAgIC0tYXRlLWJvcmRlcjogIzFlMjkzYjtcblxuICAgICAgICAtLWF0ZS1oaWdobGlnaHQtYmc6ICM4NTRkMGU7XG4gICAgICAgIC0tYXRlLWhpZ2hsaWdodC1jb2xvcjogI2ZlZjA4YTtcblxuICAgICAgICAtLWF0ZS1idXR0b24taG92ZXI6ICMxZTI5M2I7XG4gICAgICAgIC0tYXRlLWJ1dHRvbi1hY3RpdmU6ICMwZjE3MmE7XG5cbiAgICAgICAgLyogPT09PT0gTUVOVVMgKFNsYXNoL0J1YmJsZSkgPT09PT0gKi9cbiAgICAgICAgLS1hdGUtbWVudS1ib3JkZXI6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTtcbiAgICAgICAgLS1hdGUtbWVudS1zaGFkb3c6IDAgMjBweCAyNXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjMpLCAwIDEwcHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcblxuICAgICAgICAtLWF0ZS1lcnJvci1jb2xvcjogI2Y4NzE3MTtcbiAgICAgICAgLS1hdGUtZXJyb3ItYmc6ICM0NTBhMGE7XG4gICAgICAgIC0tYXRlLWVycm9yLWJvcmRlcjogIzdmMWQxZDtcblxuICAgICAgICAvKiA9PT09PSBEQVJLIENPTVBPTkVOVCBPVkVSUklERVMgPT09PT0gKi9cbiAgICAgICAgLS1hdGUtZHJhZy1iYWNrZ3JvdW5kOiB2YXIoLS1hdGUtc3VyZmFjZS10ZXJ0aWFyeSk7XG4gICAgICAgIC0tYXRlLWRyYWctYm9yZGVyLWNvbG9yOiB2YXIoLS1hdGUtcHJpbWFyeSk7XG4gICAgICAgIC0tYXRlLWJsb2NrcXVvdGUtYm9yZGVyLWNvbG9yOiB2YXIoLS1hdGUtcHJpbWFyeSk7XG4gICAgICAgIC0tYXRlLXRvb2xiYXItYnV0dG9uLWFjdGl2ZS1iYWNrZ3JvdW5kOiB2YXIoLS1hdGUtcHJpbWFyeS1saWdodCk7XG4gICAgICAgIC0tYXRlLXRvb2xiYXItYnV0dG9uLWFjdGl2ZS1jb2xvcjogdmFyKC0tYXRlLXByaW1hcnkpO1xuICAgICAgICAtLWF0ZS1idXR0b24taG92ZXI6IHZhcigtLWF0ZS1zdXJmYWNlLXRlcnRpYXJ5KTtcbiAgICAgICAgLS1hdGUtYnV0dG9uLWFjdGl2ZTogdmFyKC0tYXRlLXN1cmZhY2Utc2Vjb25kYXJ5KTtcbiAgICAgICAgLS1hdGUtc2Nyb2xsYmFyLXRodW1iOiB2YXIoLS1hdGUtc3VyZmFjZS10ZXJ0aWFyeSk7XG4gICAgICAgIC0tYXRlLXNjcm9sbGJhci10aHVtYi1ob3ZlcjogdmFyKC0tYXRlLXRleHQtbXV0ZWQpO1xuICAgICAgfVxuXG4gICAgICAvKiBIb3N0IHN0eWxlcyBwb3VyIGZpbGxDb250YWluZXIgKi9cbiAgICAgIDpob3N0KC5maWxsLWNvbnRhaW5lcikge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuXG4gICAgICAvKiBNYWluIGVkaXRvciBjb250YWluZXIgKi9cbiAgICAgIC5hdGUtZWRpdG9yIHtcbiAgICAgICAgYm9yZGVyOiB2YXIoLS1hdGUtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1hdGUtYm9yZGVyLWNvbG9yKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYXRlLWJvcmRlci1yYWRpdXMpO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtYmFja2dyb3VuZCk7XG4gICAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4ycyBlYXNlO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB9XG5cbiAgICAgIC8qIEZsb2F0aW5nIFRvb2xiYXIgTW9kZSAqL1xuICAgICAgOmhvc3QoLmZsb2F0aW5nLXRvb2xiYXIpIC5hdGUtZWRpdG9yIHtcbiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gICAgICB9XG5cbiAgICAgIC8qIEZpbGwgY29udGFpbmVyIG1vZGUgLSBlZGl0b3IgZmlsbHMgaXRzIHBhcmVudCAqL1xuICAgICAgOmhvc3QoLmZpbGwtY29udGFpbmVyKSAuYXRlLWVkaXRvciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QoLmZpbGwtY29udGFpbmVyKSAuYXRlLWNvbnRlbnQtd3JhcHBlciB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICB9XG5cbiAgICAgIDpob3N0KC5maWxsLWNvbnRhaW5lcikgLmF0ZS1jb250ZW50IHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgIH1cblxuICAgICAgLmF0ZS1lZGl0b3I6Zm9jdXMtd2l0aGluIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1hdGUtZm9jdXMtY29sb3IpO1xuICAgICAgfVxuXG4gICAgICAvKiBFZGl0b3IgY29udGVudCBhcmVhICovXG4gICAgICAuYXRlLWNvbnRlbnQge1xuICAgICAgICBtaW4taGVpZ2h0OiB2YXIoLS1lZGl0b3ItbWluLWhlaWdodCwgMjAwcHgpO1xuICAgICAgICBoZWlnaHQ6IHZhcigtLWVkaXRvci1oZWlnaHQsIGF1dG8pO1xuICAgICAgICBtYXgtaGVpZ2h0OiB2YXIoLS1lZGl0b3ItbWF4LWhlaWdodCwgbm9uZSk7XG4gICAgICAgIG92ZXJmbG93LXk6IHZhcigtLWVkaXRvci1vdmVyZmxvdywgdmlzaWJsZSk7XG4gICAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluO1xuICAgICAgICBzY3JvbGxiYXItY29sb3I6IHZhcigtLWF0ZS1zY3JvbGxiYXItdGh1bWIpIHZhcigtLWF0ZS1zY3JvbGxiYXItdHJhY2spO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCguaXMtZGlzYWJsZWQpIC5hdGUtY29udGVudCB7XG4gICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hdGUtc3VyZmFjZS10ZXJ0aWFyeSk7XG4gICAgICB9XG5cbiAgICAgIDpob3N0KC5pcy1yZWFkb25seSkgLmF0ZS1jb250ZW50IHtcbiAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICB1c2VyLXNlbGVjdDogdGV4dDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QoLmlzLXJlYWRvbmx5KSAuYXRlLWNvbnRlbnQgOjpuZy1kZWVwIC5hdGUtbGluayB7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgICB9XG5cbiAgICAgIC5hdGUtY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgICAgICB3aWR0aDogdmFyKC0tYXRlLXNjcm9sbGJhci13aWR0aCk7XG4gICAgICB9XG5cbiAgICAgIC5hdGUtY29udGVudC13cmFwcGVyIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgfVxuXG4gICAgICAuYXRlLWNvbnRlbnQtd3JhcHBlciAuYXRlLWNvbnRlbnQge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgfVxuXG4gICAgICAuYXRlLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXNjcm9sbGJhci10cmFjayk7XG4gICAgICB9XG5cbiAgICAgIC5hdGUtY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtc2Nyb2xsYmFyLXRodW1iKTtcbiAgICAgICAgYm9yZGVyOiAzcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICAgIGJhY2tncm91bmQtY2xpcDogY29udGVudC1ib3g7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgICB9XG5cbiAgICAgIC5hdGUtY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtc2Nyb2xsYmFyLXRodW1iLWhvdmVyKTtcbiAgICAgICAgYmFja2dyb3VuZC1jbGlwOiBjb250ZW50LWJveDtcbiAgICAgIH1cblxuICAgICAgLmF0ZS1jb250ZW50LmRyYWctb3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS1kcmFnLWJhY2tncm91bmQpO1xuICAgICAgICBib3JkZXI6IDJweCBkYXNoZWQgdmFyKC0tYXRlLWRyYWctYm9yZGVyLWNvbG9yKTtcbiAgICAgIH1cblxuICAgICAgLyogQ29tcHRldXIgZGUgY2FyYWN0w6hyZXMgKi9cbiAgICAgIC5jaGFyYWN0ZXItY291bnQge1xuICAgICAgICBwYWRkaW5nOiA2cHggOHB4O1xuICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1hdGUtY291bnRlci1jb2xvcik7XG4gICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYXRlLWNvdW50ZXItYm9yZGVyLWNvbG9yKTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLWNvdW50ZXItYmFja2dyb3VuZCk7XG4gICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnMgZWFzZTtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogY2FsYyh2YXIoLS1hdGUtYm9yZGVyLXJhZGl1cykgLSB2YXIoLS1hdGUtYm9yZGVyLXdpZHRoKSk7XG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiBjYWxjKHZhcigtLWF0ZS1ib3JkZXItcmFkaXVzKSAtIHZhcigtLWF0ZS1ib3JkZXItd2lkdGgpKTtcbiAgICAgIH1cblxuICAgICAgLmNoYXJhY3Rlci1jb3VudC5saW1pdC1yZWFjaGVkIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWF0ZS1lcnJvci1jb2xvciwgI2VmNDQ0NCk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICB9XG5cbiAgICAgIDpob3N0LmF0ZS1ibG9ja3MtaW5zaWRlIHtcbiAgICAgICAgLS1hdGUtY29udGVudC1ndXR0ZXI6IDU0cHg7XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgICA6aG9zdC5hdGUtYmxvY2tzLWluc2lkZSB7XG4gICAgICAgICAgLS1hdGUtY29udGVudC1ndXR0ZXI6IDBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIGF0ZS1ibG9jay1jb250cm9scyB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qIFN0eWxlcyBQcm9zZU1pcnJvciBhdmVjIDpob3N0IDo6bmctZGVlcCAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB7XG4gICAgICAgIHBhZGRpbmctaW5saW5lOiBjYWxjKHZhcigtLWF0ZS1jb250ZW50LXBhZGRpbmctaW5saW5lKSArIHZhcigtLWF0ZS1jb250ZW50LWd1dHRlcikpO1xuICAgICAgICBwYWRkaW5nLWJsb2NrOiB2YXIoLS1hdGUtY29udGVudC1wYWRkaW5nLWJsb2NrKTtcbiAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IHZhcigtLWF0ZS1saW5lLWhlaWdodCk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1hdGUtdGV4dC1jb2xvcik7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgLyogUydhc3N1cmVyIHF1ZSBsZSBjb250ZW51IHMnw6l0ZW5kIGNvcnJlY3RlbWVudCBkYW5zIHVuIGNvbnRlbmV1ciBzY3JvbGxhYmxlICovXG4gICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgICAgICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciA6OnNlbGVjdGlvbiB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWF0ZS1zZWxlY3Rpb24tYmcpO1xuICAgICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciA6Oi1tb3otc2VsZWN0aW9uIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYXRlLXNlbGVjdGlvbi1iZyk7XG4gICAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgfVxuXG4gICAgICAvKiBUaXRyZXMgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgaDEge1xuICAgICAgICBmb250LXNpemU6IDJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDAuNWVtO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIGgyIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjVlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgIG1hcmdpbi10b3A6IDFlbTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgaDMge1xuICAgICAgICBmb250LXNpemU6IDEuMjVlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgIG1hcmdpbi10b3A6IDFlbTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gICAgICB9XG5cbiAgICAgIC8qIFBhcmFncmFwaGVzIGV0IGxpc3RlcyAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBwIHtcbiAgICAgICAgbWFyZ2luOiAwLjVlbSAwO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHVsLFxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBvbCB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMmVtO1xuICAgICAgICBtYXJnaW46IDAuNWVtIDA7XG4gICAgICB9XG5cbiAgICAgIC8qIENpdGF0aW9ucyAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBibG9ja3F1b3RlIHtcbiAgICAgICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB2YXIoLS1hdGUtYmxvY2txdW90ZS1ib3JkZXItY29sb3IpO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDFlbTtcbiAgICAgICAgbWFyZ2luOiAxZW0gMDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLWJsb2NrcXVvdGUtYmFja2dyb3VuZCk7XG4gICAgICAgIHBhZGRpbmc6IDAuNWVtIDFlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMCA0cHggNHB4IDA7XG4gICAgICB9XG5cbiAgICAgIC8qIENvZGUgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgY29kZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS1jb2RlLWJhY2tncm91bmQpO1xuICAgICAgICBjb2xvcjogdmFyKC0tYXRlLWNvZGUtY29sb3IpO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hdGUtY29kZS1ib3JkZXItY29sb3IpO1xuICAgICAgICBwYWRkaW5nOiAwLjE1ZW0gMC40ZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiSmV0QnJhaW5zIE1vbm9cIiwgXCJGaXJhIENvZGVcIiwgXCJNb25hY29cIiwgXCJDb25zb2xhc1wiLCBtb25vc3BhY2U7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NWVtO1xuICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHByZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS1jb2RlLWJsb2NrLWJhY2tncm91bmQpO1xuICAgICAgICBjb2xvcjogdmFyKC0tYXRlLWNvZGUtYmxvY2stY29sb3IpO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hdGUtY29kZS1ibG9jay1ib3JkZXItY29sb3IpO1xuICAgICAgICBwYWRkaW5nOiAxZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWF0ZS1ib3JkZXItcmFkaXVzKTtcbiAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgICAgbWFyZ2luOiAxZW0gMDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBwcmUgY29kZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICB9XG5cbiAgICAgIC8qIFBsYWNlaG9sZGVyICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHAuaXMtZWRpdG9yLWVtcHR5OmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiBhdHRyKGRhdGEtcGxhY2Vob2xkZXIpO1xuICAgICAgICBjb2xvcjogdmFyKC0tYXRlLXBsYWNlaG9sZGVyLWNvbG9yKTtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgICBoZWlnaHQ6IDA7XG4gICAgICB9XG5cbiAgICAgIC8qIE1vZGUgbGVjdHVyZSBzZXVsZSAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvcltjb250ZW50ZWRpdGFibGU9XCJmYWxzZVwiXSB7XG4gICAgICAgIC8qIEFsbG93IGludGVyYWN0aW9uIGluIHJlYWQtb25seSBtb2RlIChsaW5rcywgbm9kZSBzZWxlY3Rpb24pICovXG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3JbY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIl0gaW1nIHtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yW2NvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJdIGEge1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3JbY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIl0gaW1nOmhvdmVyIHtcbiAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuICAgICAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yW2NvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJdIGltZy5Qcm9zZU1pcnJvci1zZWxlY3RlZG5vZGUge1xuICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgfVxuXG4gICAgICAvKiBTdHlsZXMgcG91ciBsZXMgaW1hZ2VzICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIGltZyB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlO1xuICAgICAgICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYXRlLWltYWdlLWJvcmRlci1yYWRpdXMpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIGltZzpob3ZlciB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tYXRlLWJvcmRlci1jb2xvcik7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgaW1nLlByb3NlTWlycm9yLXNlbGVjdGVkbm9kZSxcbiAgICAgIDpob3N0IDo6bmctZGVlcCAucmVzaXphYmxlLWltYWdlLWNvbnRhaW5lci5zZWxlY3RlZCBpbWcge1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWF0ZS1pbWFnZS1zZWxlY3RlZC1jb2xvcik7XG4gICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XG4gICAgICB9XG5cbiAgICAgIC8qIEFsaWdubWVudCBTdXBwb3J0IChQcm9zZU1pcnJvciAvIEFURSBXcmFwcGVyKSAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBbZGF0YS10ZXh0LWFsaWduPVwiY2VudGVyXCJdLFxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBbZGF0YS1hbGlnbj1cImNlbnRlclwiXSB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBbZGF0YS10ZXh0LWFsaWduPVwicmlnaHRcIl0sXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIFtkYXRhLWFsaWduPVwicmlnaHRcIl0ge1xuICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBbZGF0YS10ZXh0LWFsaWduPVwibGVmdFwiXSxcbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgW2RhdGEtYWxpZ249XCJsZWZ0XCJdIHtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIH1cblxuICAgICAgLyogQ29udGVuZXVyIHBvdXIgbGVzIGltYWdlcyByZWRpbWVuc2lvbm5hYmxlcyAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5yZXNpemFibGUtaW1hZ2Utd3JhcHBlciB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWFyZ2luOiAwLjVlbSAwO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6YWJsZS1pbWFnZS1jb250YWluZXIge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgfVxuXG4gICAgICAvKiBDb250ZW5ldXIgZGVzIGNvbnRyw7RsZXMgZGUgcmVkaW1lbnNpb25uZW1lbnQgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAucmVzaXplLWNvbnRyb2xzIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICB6LWluZGV4OiAxMDAwO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTtcbiAgICAgIH1cblxuICAgICAgLyogQWZmaWNoZXIgbGVzIHBvaWduw6llcyBhdSBob3ZlciAobcOqbWUgc2kgbm9uIHPDqWxlY3Rpb25uw6kpIC0gVW5pcXVlbWVudCBzaSDDqWRpdGFibGUgKi9cbiAgICAgIDpob3N0Om5vdCguaXMtcmVhZG9ubHkpOm5vdCguaXMtZGlzYWJsZWQpXG4gICAgICAgIDo6bmctZGVlcFxuICAgICAgICAucmVzaXphYmxlLWltYWdlLWNvbnRhaW5lcjpob3ZlclxuICAgICAgICAucmVzaXplLWNvbnRyb2xzLFxuICAgICAgOmhvc3Q6bm90KC5pcy1yZWFkb25seSk6bm90KC5pcy1kaXNhYmxlZCkgOjpuZy1kZWVwIGJvZHkucmVzaXppbmcgLnJlc2l6ZS1jb250cm9scyB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB9XG5cbiAgICAgIC8qIFBvaWduw6llcyBkZSByZWRpbWVuc2lvbm5lbWVudCAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5yZXNpemUtaGFuZGxlIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB3aWR0aDogMC4zNXJlbTtcbiAgICAgICAgaGVpZ2h0OiAycmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtcHJpbWFyeSk7XG4gICAgICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWF0ZS1zdXJmYWNlKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYXRlLWJvcmRlci1yYWRpdXMpO1xuICAgICAgICBwb2ludGVyLWV2ZW50czogYWxsO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIHotaW5kZXg6IDEwMDE7XG4gICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlO1xuICAgICAgICBib3gtc2hhZG93OiAwIDJweCA2cHggcmdiYSgwLCAwLCAwLCAwLjIpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6ZS1oYW5kbGU6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtcHJpbWFyeSk7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgM3B4IDhweCByZ2JhKDAsIDAsIDAsIDAuMyk7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAucmVzaXplLWhhbmRsZTphY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtcHJpbWFyeSk7XG4gICAgICB9XG5cbiAgICAgIC8qIFBvaWduw6llcyBkZXMgY8O0dMOpcyBhdmVjIHNjYWxlIHPDqXBhcsOpIHBvdXIgY2VudHJhZ2UgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAucmVzaXplLWhhbmRsZS13OmhvdmVyLFxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5yZXNpemUtaGFuZGxlLWU6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtcHJpbWFyeS1ob3Zlcik7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAucmVzaXplLWhhbmRsZS13OmFjdGl2ZSxcbiAgICAgIDpob3N0IDo6bmctZGVlcCAucmVzaXplLWhhbmRsZS1lOmFjdGl2ZSB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKSBzY2FsZSgwLjkpO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtcHJpbWFyeS1ob3Zlcik7XG4gICAgICB9XG5cbiAgICAgIC8qIFBvc2l0aW9ucyBzcMOpY2lmaXF1ZXMgcG91ciBjaGFxdWUgcG9pZ27DqWUgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAucmVzaXplLWhhbmRsZS13IHtcbiAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgIGxlZnQ6IDAuMzVyZW07XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgY3Vyc29yOiB3LXJlc2l6ZTtcbiAgICAgIH1cbiAgICAgIDpob3N0IDo6bmctZGVlcCAucmVzaXplLWhhbmRsZS1lIHtcbiAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgIHJpZ2h0OiAwLjM1cmVtO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgIGN1cnNvcjogZS1yZXNpemU7XG4gICAgICB9XG5cbiAgICAgIC8qIFN0eWxlcyBwb3VyIGxlIHJlZGltZW5zaW9ubmVtZW50IGVuIGNvdXJzICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgYm9keS5yZXNpemluZyB7XG4gICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICBjdXJzb3I6IGNyb3NzaGFpcjtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIGJvZHkucmVzaXppbmcgLlByb3NlTWlycm9yIHtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCBib2R5LnJlc2l6aW5nIC5Qcm9zZU1pcnJvciAucmVzaXphYmxlLWltYWdlLWNvbnRhaW5lciB7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgfVxuXG4gICAgICAvKiBTdHlsZXMgcG91ciBsZXMgaW5mb3JtYXRpb25zIGRlIHRhaWxsZSBkJ2ltYWdlICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLmltYWdlLXNpemUtaW5mbyB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgYm90dG9tOiAtMjBweDtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44KTtcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICBwYWRkaW5nOiAycHggNnB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2U7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAucmVzaXphYmxlLWltYWdlLWNvbnRhaW5lcjpob3ZlciAuaW1hZ2Utc2l6ZS1pbmZvIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgIH1cbiAgICAgIC8qIFN0eWxlcyBwb3VyIGxlcyB0YWJsZXMgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgdGFibGUge1xuICAgICAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlO1xuICAgICAgICBib3JkZXItc3BhY2luZzogMDtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB0YWJsZS1sYXlvdXQ6IGZpeGVkO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIHRkLFxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSB0aCB7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tYXRlLXRhYmxlLWJvcmRlci1jb2xvcik7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1hdGUtdGFibGUtYm9yZGVyLWNvbG9yKTtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgbWluLXdpZHRoOiAxZW07XG4gICAgICAgIHBhZGRpbmc6IDhweCAxMnB4O1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgdGFibGUgdGQge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtdGFibGUtY2VsbC1iYWNrZ3JvdW5kKTtcbiAgICAgIH1cblxuICAgICAgLyogQWpvdXRlciBsZXMgYm9yZHVyZXMgZXh0ZXJuZXMgbWFucXVhbnRlcyBwb3VyIGZvcm1lciBsYSBib3JkdXJlIGR1IHRhYmxlYXUgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgdGFibGUgdGQ6Zmlyc3QtY2hpbGQsXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIHRoOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1hdGUtdGFibGUtYm9yZGVyLWNvbG9yKTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSB0cjpmaXJzdC1jaGlsZCB0ZCxcbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgdGFibGUgdHI6Zmlyc3QtY2hpbGQgdGgge1xuICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYXRlLXRhYmxlLWJvcmRlci1jb2xvcik7XG4gICAgICB9XG5cbiAgICAgIC8qIENvaW5zIGFycm9uZGlzICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogOHB4O1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIHRyOmZpcnN0LWNoaWxkIHRoOmxhc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogOHB4O1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA4cHg7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgdGFibGUgdHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDhweDtcbiAgICAgIH1cblxuICAgICAgLyogRW4tdMOqdGVzIGRlIHRhYmxlICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIHRoIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXRhYmxlLWhlYWRlci1iYWNrZ3JvdW5kKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWF0ZS10YWJsZS1oZWFkZXItY29sb3IpO1xuICAgICAgfVxuXG4gICAgICAvKiBDZWxsdWxlcyBzw6lsZWN0aW9ubsOpZXMgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgdGFibGUgLnNlbGVjdGVkQ2VsbDphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS10YWJsZS1jZWxsLXNlbGVjdGVkLWJhY2tncm91bmQpO1xuICAgICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG5cbiAgICAgIC8qIFBvaWduw6llcyBkZSByZWRpbWVuc2lvbm5lbWVudCAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSAuY29sdW1uLXJlc2l6ZS1oYW5kbGUge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHJpZ2h0OiAtMnB4O1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgd2lkdGg6IDRweDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYXRlLXRhYmxlLXJlc2l6ZS1oYW5kbGUtY29sb3IpO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZTpob3ZlciAuY29sdW1uLXJlc2l6ZS1oYW5kbGUge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIC5jb2x1bW4tcmVzaXplLWhhbmRsZTpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWF0ZS1mb2N1cy1jb2xvcik7XG4gICAgICB9XG5cbiAgICAgIC8qIENvbnRhaW5lciBhdmVjIHNjcm9sbCBob3Jpem9udGFsICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIC50YWJsZVdyYXBwZXIge1xuICAgICAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgICAgICBtYXJnaW46IDFlbSAwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgLnRhYmxlV3JhcHBlciB0YWJsZSB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgICBtaW4td2lkdGg6IDYwMHB4O1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgfVxuXG4gICAgICAvKiBQYXJhZ3JhcGhlcyBkYW5zIGxlcyB0YWJsZXMgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgdGFibGUgcCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgIH1cblxuICAgICAgLyogU3R5bGVzIHBvdXIgbGVzIGxpZ25lcyBhdmVjIGhvdmVyICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIHRib2R5IHRyOmhvdmVyIHRkIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYXRlLXRhYmxlLXJvdy1ob3Zlci1iYWNrZ3JvdW5kKTtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBbmd1bGFyVGlwdGFwRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgLyoqIENvbmZpZ3VyYXRpb24gZ2xvYmFsZSBkZSBsJ8OpZGl0ZXVyICovXG4gIGNvbmZpZyA9IGlucHV0PEF0ZUVkaXRvckNvbmZpZz4oe30pO1xuXG4gIGNvbnRlbnQgPSBpbnB1dDxzdHJpbmc+KFwiXCIpO1xuICBwbGFjZWhvbGRlciA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgZWRpdGFibGUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBkaXNhYmxlZCA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIG1pbkhlaWdodCA9IGlucHV0PG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgaGVpZ2h0ID0gaW5wdXQ8bnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBtYXhIZWlnaHQgPSBpbnB1dDxudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGZpbGxDb250YWluZXIgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBzaG93VG9vbGJhciA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHNob3dGb290ZXIgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBzaG93Q2hhcmFjdGVyQ291bnQgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBzaG93V29yZENvdW50ID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgbWF4Q2hhcmFjdGVycyA9IGlucHV0PG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgZW5hYmxlT2ZmaWNlUGFzdGUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBlbmFibGVTbGFzaENvbW1hbmRzID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgc2xhc2hDb21tYW5kcyA9IGlucHV0PEF0ZVNsYXNoQ29tbWFuZHNDb25maWcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGN1c3RvbVNsYXNoQ29tbWFuZHMgPSBpbnB1dDxBdGVDdXN0b21TbGFzaENvbW1hbmRzIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBibG9ja0NvbnRyb2xzID0gaW5wdXQ8QXRlQmxvY2tDb250cm9sc01vZGU+KCk7XG4gIGxvY2FsZSA9IGlucHV0PFN1cHBvcnRlZExvY2FsZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgYXV0b2ZvY3VzID0gaW5wdXQ8QXRlQXV0b2ZvY3VzTW9kZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgc2VhbWxlc3MgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBmbG9hdGluZ1Rvb2xiYXIgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBzaG93RWRpdFRvZ2dsZSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHNwZWxsY2hlY2sgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHRpcHRhcEV4dGVuc2lvbnMgPSBpbnB1dDwoRXh0ZW5zaW9uIHwgTm9kZSB8IE1hcmspW10gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHRpcHRhcE9wdGlvbnMgPSBpbnB1dDxQYXJ0aWFsPEVkaXRvck9wdGlvbnM+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIC8vIE5vdXZlYXV4IGlucHV0cyBwb3VyIGxlcyBidWJibGUgbWVudXNcbiAgc2hvd0J1YmJsZU1lbnUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBidWJibGVNZW51ID0gaW5wdXQ8UGFydGlhbDxBdGVCdWJibGVNZW51Q29uZmlnPiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgc2hvd0ltYWdlQnViYmxlTWVudSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGltYWdlQnViYmxlTWVudSA9IGlucHV0PFBhcnRpYWw8QXRlSW1hZ2VCdWJibGVNZW51Q29uZmlnPiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAvLyBDb25maWd1cmF0aW9uIGRlIGxhIHRvb2xiYXJcbiAgdG9vbGJhciA9IGlucHV0PFBhcnRpYWw8QXRlVG9vbGJhckNvbmZpZz4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgLy8gQ29uZmlndXJhdGlvbiBkZXMgbWVudXMgZGUgdGFibGVcbiAgc2hvd1RhYmxlQnViYmxlTWVudSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHRhYmxlQnViYmxlTWVudSA9IGlucHV0PFBhcnRpYWw8QXRlVGFibGVCdWJibGVNZW51Q29uZmlnPiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgc2hvd0NlbGxCdWJibGVNZW51ID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgY2VsbEJ1YmJsZU1lbnUgPSBpbnB1dDxQYXJ0aWFsPEF0ZUNlbGxCdWJibGVNZW51Q29uZmlnPiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAvKipcbiAgICogQWRkaXRpb25uYWwgc3RhdGUgY2FsY3VsYXRvcnMgdG8gZXh0ZW5kIHRoZSByZWFjdGl2ZSBlZGl0b3Igc3RhdGUuXG4gICAqL1xuICBzdGF0ZUNhbGN1bGF0b3JzID0gaW5wdXQ8QXRlU3RhdGVDYWxjdWxhdG9yW10gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgLy8gTm91dmVhdSBpbnB1dCBwb3VyIGxhIGNvbmZpZ3VyYXRpb24gZGUgbCd1cGxvYWQgZCdpbWFnZXNcbiAgaW1hZ2VVcGxvYWQgPSBpbnB1dDxQYXJ0aWFsPEF0ZUltYWdlVXBsb2FkT3B0aW9ucz4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBoYW5kbGVyIGZvciBpbWFnZSB1cGxvYWRzLlxuICAgKiBXaGVuIHByb3ZpZGVkLCBpbWFnZXMgd2lsbCBiZSBwcm9jZXNzZWQgdGhyb3VnaCB0aGlzIGhhbmRsZXIgaW5zdGVhZCBvZiBiZWluZyBjb252ZXJ0ZWQgdG8gYmFzZTY0LlxuICAgKiBUaGlzIGFsbG93cyB5b3UgdG8gdXBsb2FkIGltYWdlcyB0byB5b3VyIG93biBzZXJ2ZXIvc3RvcmFnZSBhbmQgdXNlIHRoZSByZXR1cm5lZCBVUkwuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogbXlVcGxvYWRIYW5kbGVyOiBJbWFnZVVwbG9hZEhhbmRsZXIgPSBhc3luYyAoY29udGV4dCkgPT4ge1xuICAgKiAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAqICAgZm9ybURhdGEuYXBwZW5kKCdpbWFnZScsIGNvbnRleHQuZmlsZSk7XG4gICAqICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2FwaS91cGxvYWQnLCB7IG1ldGhvZDogJ1BPU1QnLCBib2R5OiBmb3JtRGF0YSB9KTtcbiAgICogICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgKiAgIHJldHVybiB7IHNyYzogZGF0YS5pbWFnZVVybCB9O1xuICAgKiB9O1xuICAgKlxuICAgKiAvLyBJbiB0ZW1wbGF0ZTpcbiAgICogLy8gPGFuZ3VsYXItdGlwdGFwLWVkaXRvciBbaW1hZ2VVcGxvYWRIYW5kbGVyXT1cIm15VXBsb2FkSGFuZGxlclwiIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgaW1hZ2VVcGxvYWRIYW5kbGVyID0gaW5wdXQ8QXRlSW1hZ2VVcGxvYWRIYW5kbGVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIC8vIE5vdXZlYXV4IG91dHB1dHNcbiAgY29udGVudENoYW5nZSA9IG91dHB1dDxzdHJpbmc+KCk7XG4gIGVkaXRvckNyZWF0ZWQgPSBvdXRwdXQ8RWRpdG9yPigpO1xuICBlZGl0b3JVcGRhdGUgPSBvdXRwdXQ8eyBlZGl0b3I6IEVkaXRvcjsgdHJhbnNhY3Rpb246IHVua25vd24gfT4oKTtcbiAgZWRpdG9yRm9jdXMgPSBvdXRwdXQ8eyBlZGl0b3I6IEVkaXRvcjsgZXZlbnQ6IEZvY3VzRXZlbnQgfT4oKTtcbiAgZWRpdG9yQmx1ciA9IG91dHB1dDx7IGVkaXRvcjogRWRpdG9yOyBldmVudDogRm9jdXNFdmVudCB9PigpO1xuICBlZGl0YWJsZUNoYW5nZSA9IG91dHB1dDxib29sZWFuPigpO1xuXG4gIC8vIFZpZXdDaGlsZCB3aXRoIHNpZ25hbFxuICBlZGl0b3JFbGVtZW50ID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KFwiZWRpdG9yRWxlbWVudFwiKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBUb29sYmFyIC8gQnViYmxlIE1lbnUgQ29vcmRpbmF0aW9uXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIGhpZGVCdWJibGVNZW51cygpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS5zZXRUb29sYmFySW50ZXJhY3RpbmcodHJ1ZSk7XG4gIH1cblxuICBzaG93QnViYmxlTWVudXMoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0b3JDb21tYW5kc1NlcnZpY2Uuc2V0VG9vbGJhckludGVyYWN0aW5nKGZhbHNlKTtcbiAgfVxuXG4gIC8vIFByaXZhdGUgc2lnbmFscyBmb3IgaW50ZXJuYWwgc3RhdGVcbiAgcHJpdmF0ZSBfZWRpdG9yID0gc2lnbmFsPEVkaXRvciB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIF9jaGFyYWN0ZXJDb3VudCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcml2YXRlIF93b3JkQ291bnQgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSBfaXNEcmFnT3ZlciA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgX2VkaXRvckZ1bGx5SW5pdGlhbGl6ZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIF9ob3ZlcmVkQmxvY2sgPSBzaWduYWw8eyBub2RlOiBQTU5vZGU7IGVsZW1lbnQ6IEhUTUxFbGVtZW50OyBwb3M6IG51bWJlciB9IHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gQW50aS1lY2hvOiB0cmFjayBsYXN0IGVtaXR0ZWQgSFRNTCB0byBwcmV2ZW50IGN1cnNvciByZXNldCBvbiBwYXJlbnQgZWNob1xuICBwcml2YXRlIGxhc3RFbWl0dGVkSHRtbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gUmVhZC1vbmx5IGFjY2VzcyB0byBzaWduYWxzXG4gIHJlYWRvbmx5IGVkaXRvciA9IHRoaXMuX2VkaXRvci5hc1JlYWRvbmx5KCk7XG4gIHJlYWRvbmx5IGNoYXJhY3RlckNvdW50ID0gdGhpcy5fY2hhcmFjdGVyQ291bnQuYXNSZWFkb25seSgpO1xuICByZWFkb25seSB3b3JkQ291bnQgPSB0aGlzLl93b3JkQ291bnQuYXNSZWFkb25seSgpO1xuICByZWFkb25seSBpc0RyYWdPdmVyID0gdGhpcy5faXNEcmFnT3Zlci5hc1JlYWRvbmx5KCk7XG4gIHJlYWRvbmx5IGVkaXRvckZ1bGx5SW5pdGlhbGl6ZWQgPSB0aGlzLl9lZGl0b3JGdWxseUluaXRpYWxpemVkLmFzUmVhZG9ubHkoKTtcbiAgcmVhZG9ubHkgaG92ZXJlZEJsb2NrID0gdGhpcy5faG92ZXJlZEJsb2NrLmFzUmVhZG9ubHkoKTtcblxuICBwcml2YXRlIF9pc0Zvcm1Db250cm9sRGlzYWJsZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBpc0Zvcm1Db250cm9sRGlzYWJsZWQgPSB0aGlzLl9pc0Zvcm1Db250cm9sRGlzYWJsZWQuYXNSZWFkb25seSgpO1xuXG4gIC8vIENvbWJpbmVkIGRpc2FibGVkIHN0YXRlIChJbnB1dCArIEZvcm1Db250cm9sKVxuICByZWFkb25seSBtZXJnZWREaXNhYmxlZCA9IGNvbXB1dGVkKFxuICAgICgpID0+ICh0aGlzLmRpc2FibGVkKCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5kaXNhYmxlZCkgfHwgdGhpcy5pc0Zvcm1Db250cm9sRGlzYWJsZWQoKVxuICApO1xuXG4gIC8vIENvbXB1dGVkIGZvciBlZGl0b3Igc3RhdGVzXG4gIGlzRWRpdG9yUmVhZHkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmVkaXRvcigpICE9PSBudWxsKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBVTklGSUVEIENPTkZJR1VSQVRJT04gQ09NUFVURUQgUFJPUEVSVElFU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8vIEFwcGVhcmFuY2UgJiBGdW5kYW1lbnRhbHNcbiAgcmVhZG9ubHkgZmluYWxTZWFtbGVzcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBpbnB1dFZhbCA9IHRoaXMuc2VhbWxlc3MoKTtcbiAgICBpZiAoaW5wdXRWYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGlucHV0VmFsO1xuICAgIH1cblxuICAgIGNvbnN0IGZyb21Db25maWcgPSB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLm1vZGU7XG4gICAgcmV0dXJuIGZyb21Db25maWcgPT09IFwic2VhbWxlc3NcIjtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZmluYWxFZGl0YWJsZSA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuZWRpdGFibGUoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmVkaXRhYmxlID8/IHRydWVcbiAgKTtcbiAgcmVhZG9ubHkgZmluYWxQbGFjZWhvbGRlciA9IGNvbXB1dGVkKFxuICAgICgpID0+XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyKCkgPz9cbiAgICAgIHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkucGxhY2Vob2xkZXIgPz9cbiAgICAgIHRoaXMuY3VycmVudFRyYW5zbGF0aW9ucygpLmVkaXRvci5wbGFjZWhvbGRlclxuICApO1xuICByZWFkb25seSBmaW5hbEZpbGxDb250YWluZXIgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLmZpbGxDb250YWluZXIoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmZpbGxDb250YWluZXJcbiAgKTtcbiAgcmVhZG9ubHkgZmluYWxTaG93Rm9vdGVyID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5zaG93Rm9vdGVyKCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5zaG93Rm9vdGVyID8/IHRydWVcbiAgKTtcbiAgcmVhZG9ubHkgZmluYWxTaG93RWRpdFRvZ2dsZSA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuc2hvd0VkaXRUb2dnbGUoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLnNob3dFZGl0VG9nZ2xlID8/IGZhbHNlXG4gICk7XG5cbiAgcmVhZG9ubHkgZmluYWxIZWlnaHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgaCA9IHRoaXMuaGVpZ2h0KCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5oZWlnaHQ7XG4gICAgcmV0dXJuIHR5cGVvZiBoID09PSBcIm51bWJlclwiID8gYCR7aH1weGAgOiBoO1xuICB9KTtcbiAgcmVhZG9ubHkgZmluYWxNaW5IZWlnaHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbWggPSB0aGlzLm1pbkhlaWdodCgpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkubWluSGVpZ2h0O1xuICAgIHJldHVybiB0eXBlb2YgbWggPT09IFwibnVtYmVyXCIgPyBgJHttaH1weGAgOiBtaDtcbiAgfSk7XG4gIHJlYWRvbmx5IGZpbmFsTWF4SGVpZ2h0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG1oID0gdGhpcy5tYXhIZWlnaHQoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLm1heEhlaWdodDtcbiAgICByZXR1cm4gdHlwZW9mIG1oID09PSBcIm51bWJlclwiID8gYCR7bWh9cHhgIDogbWg7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpbmFsU3BlbGxjaGVjayA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuc3BlbGxjaGVjaygpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuc3BlbGxjaGVjayA/PyB0cnVlXG4gICk7XG4gIHJlYWRvbmx5IGZpbmFsRW5hYmxlT2ZmaWNlUGFzdGUgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLmVuYWJsZU9mZmljZVBhc3RlKCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5lbmFibGVPZmZpY2VQYXN0ZSA/PyB0cnVlXG4gICk7XG5cbiAgLy8gRmVhdHVyZXNcbiAgcmVhZG9ubHkgZmluYWxTaG93VG9vbGJhciA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuc2hvd1Rvb2xiYXIoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLnNob3dUb29sYmFyID8/IHRydWVcbiAgKTtcblxuICByZWFkb25seSBmaW5hbFRvb2xiYXJDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZnJvbUlucHV0ID0gdGhpcy50b29sYmFyKCk7XG4gICAgY29uc3QgZnJvbUNvbmZpZyA9IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkudG9vbGJhcjtcbiAgICBjb25zdCBiYXNlID0gQVRFX0RFRkFVTFRfVE9PTEJBUl9DT05GSUc7XG5cbiAgICBpZiAoZnJvbUlucHV0ICYmIE9iamVjdC5rZXlzKGZyb21JbnB1dCkubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgLi4uZnJvbUlucHV0IH07XG4gICAgfVxuICAgIGlmIChmcm9tQ29uZmlnKSB7XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCAuLi5mcm9tQ29uZmlnIH07XG4gICAgfVxuICAgIHJldHVybiBiYXNlO1xuICB9KTtcblxuICByZWFkb25seSBmaW5hbEZsb2F0aW5nVG9vbGJhciA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuZmxvYXRpbmdUb29sYmFyKCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5mbG9hdGluZ1Rvb2xiYXIgPz8gZmFsc2VcbiAgKTtcblxuICByZWFkb25seSBmaW5hbFNob3dCdWJibGVNZW51ID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5zaG93QnViYmxlTWVudSgpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuc2hvd0J1YmJsZU1lbnUgPz8gdHJ1ZVxuICApO1xuXG4gIHJlYWRvbmx5IGZpbmFsQnViYmxlTWVudUNvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBmcm9tSW5wdXQgPSB0aGlzLmJ1YmJsZU1lbnUoKTtcbiAgICBjb25zdCBmcm9tQ29uZmlnID0gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5idWJibGVNZW51O1xuICAgIGNvbnN0IGJhc2UgPSBBVEVfREVGQVVMVF9CVUJCTEVfTUVOVV9DT05GSUc7XG5cbiAgICBpZiAoZnJvbUlucHV0ICYmIE9iamVjdC5rZXlzKGZyb21JbnB1dCkubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgLi4uZnJvbUlucHV0IH07XG4gICAgfVxuICAgIGlmIChmcm9tQ29uZmlnKSB7XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCAuLi5mcm9tQ29uZmlnIH07XG4gICAgfVxuICAgIHJldHVybiBiYXNlO1xuICB9KTtcblxuICByZWFkb25seSBmaW5hbFNob3dJbWFnZUJ1YmJsZU1lbnUgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnNob3dJbWFnZUJ1YmJsZU1lbnUoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLnNob3dJbWFnZUJ1YmJsZU1lbnUgPz8gdHJ1ZVxuICApO1xuXG4gIHJlYWRvbmx5IGZpbmFsSW1hZ2VCdWJibGVNZW51Q29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGZyb21JbnB1dCA9IHRoaXMuaW1hZ2VCdWJibGVNZW51KCk7XG4gICAgY29uc3QgZnJvbUNvbmZpZyA9IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuaW1hZ2VCdWJibGVNZW51O1xuICAgIGNvbnN0IGJhc2UgPSBBVEVfREVGQVVMVF9JTUFHRV9CVUJCTEVfTUVOVV9DT05GSUc7XG5cbiAgICBpZiAoZnJvbUlucHV0ICYmIE9iamVjdC5rZXlzKGZyb21JbnB1dCkubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgLi4uZnJvbUlucHV0IH07XG4gICAgfVxuICAgIGlmIChmcm9tQ29uZmlnKSB7XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCAuLi5mcm9tQ29uZmlnIH07XG4gICAgfVxuICAgIHJldHVybiBiYXNlO1xuICB9KTtcblxuICByZWFkb25seSBmaW5hbFNob3dUYWJsZUJ1YmJsZU1lbnUgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnNob3dUYWJsZUJ1YmJsZU1lbnUoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLnNob3dUYWJsZU1lbnUgPz8gdHJ1ZVxuICApO1xuXG4gIHJlYWRvbmx5IGZpbmFsVGFibGVCdWJibGVNZW51Q29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGZyb21JbnB1dCA9IHRoaXMudGFibGVCdWJibGVNZW51KCk7XG4gICAgY29uc3QgZnJvbUNvbmZpZyA9IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkudGFibGVCdWJibGVNZW51O1xuICAgIGNvbnN0IGJhc2UgPSBBVEVfREVGQVVMVF9UQUJMRV9NRU5VX0NPTkZJRztcblxuICAgIGlmIChmcm9tSW5wdXQgJiYgT2JqZWN0LmtleXMoZnJvbUlucHV0KS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCAuLi5mcm9tSW5wdXQgfTtcbiAgICB9XG4gICAgaWYgKGZyb21Db25maWcpIHtcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIC4uLmZyb21Db25maWcgfTtcbiAgICB9XG4gICAgcmV0dXJuIGJhc2U7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpbmFsU2hvd0NlbGxCdWJibGVNZW51ID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5zaG93Q2VsbEJ1YmJsZU1lbnUoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLnNob3dDZWxsTWVudSA/PyB0cnVlXG4gICk7XG5cbiAgcmVhZG9ubHkgZmluYWxDZWxsQnViYmxlTWVudUNvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBmcm9tSW5wdXQgPSB0aGlzLmNlbGxCdWJibGVNZW51KCk7XG4gICAgY29uc3QgZnJvbUNvbmZpZyA9IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuY2VsbEJ1YmJsZU1lbnU7XG4gICAgY29uc3QgYmFzZSA9IEFURV9ERUZBVUxUX0NFTExfTUVOVV9DT05GSUc7XG5cbiAgICBpZiAoZnJvbUlucHV0ICYmIE9iamVjdC5rZXlzKGZyb21JbnB1dCkubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgLi4uZnJvbUlucHV0IH07XG4gICAgfVxuICAgIGlmIChmcm9tQ29uZmlnKSB7XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCAuLi5mcm9tQ29uZmlnIH07XG4gICAgfVxuICAgIHJldHVybiBiYXNlO1xuICB9KTtcblxuICByZWFkb25seSBmaW5hbEVuYWJsZVNsYXNoQ29tbWFuZHMgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLmVuYWJsZVNsYXNoQ29tbWFuZHMoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmVuYWJsZVNsYXNoQ29tbWFuZHMgPz8gdHJ1ZVxuICApO1xuXG4gIHJlYWRvbmx5IGZpbmFsU2xhc2hDb21tYW5kc0NvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBmcm9tSW5wdXRDb21wb25lbnQgPSB0aGlzLmN1c3RvbVNsYXNoQ29tbWFuZHMoKTtcbiAgICBjb25zdCBmcm9tQ29uZmlnQ29tcG9uZW50ID0gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5jdXN0b21TbGFzaENvbW1hbmRzO1xuICAgIGNvbnN0IGN1c3RvbUNvbmZpZyA9IGZyb21JbnB1dENvbXBvbmVudCA/PyBmcm9tQ29uZmlnQ29tcG9uZW50O1xuXG4gICAgaWYgKGN1c3RvbUNvbmZpZykge1xuICAgICAgcmV0dXJuIGN1c3RvbUNvbmZpZztcbiAgICB9XG5cbiAgICBjb25zdCBmcm9tSW5wdXRPcHRpb25zID0gdGhpcy5zbGFzaENvbW1hbmRzKCk7XG4gICAgY29uc3QgZnJvbUNvbmZpZ09wdGlvbnMgPSB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLnNsYXNoQ29tbWFuZHM7XG4gICAgY29uc3QgYmFzZUNvbmZpZyA9XG4gICAgICBmcm9tSW5wdXRPcHRpb25zICYmIE9iamVjdC5rZXlzKGZyb21JbnB1dE9wdGlvbnMpLmxlbmd0aCA+IDBcbiAgICAgICAgPyBmcm9tSW5wdXRPcHRpb25zXG4gICAgICAgIDogZnJvbUNvbmZpZ09wdGlvbnM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29tbWFuZHM6IGZpbHRlclNsYXNoQ29tbWFuZHMoXG4gICAgICAgIGJhc2VDb25maWcgfHwge30sXG4gICAgICAgIHRoaXMuaTE4blNlcnZpY2UsXG4gICAgICAgIHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlLFxuICAgICAgICB0aGlzLmZpbmFsSW1hZ2VVcGxvYWRDb25maWcoKVxuICAgICAgKSxcbiAgICB9O1xuICB9KTtcblxuICAvLyBCZWhhdmlvclxuICByZWFkb25seSBmaW5hbEF1dG9mb2N1cyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYXV0b2ZvY3VzKCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5hdXRvZm9jdXMpO1xuICByZWFkb25seSBmaW5hbE1heENoYXJhY3RlcnMgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLm1heENoYXJhY3RlcnMoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLm1heENoYXJhY3RlcnNcbiAgKTtcbiAgcmVhZG9ubHkgZmluYWxCbG9ja0NvbnRyb2xzID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5ibG9ja0NvbnRyb2xzKCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5ibG9ja0NvbnRyb2xzID8/IFwibm9uZVwiXG4gICk7XG4gIHJlYWRvbmx5IGZpbmFsU2hvd0NoYXJhY3RlckNvdW50ID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5zaG93Q2hhcmFjdGVyQ291bnQoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLnNob3dDaGFyYWN0ZXJDb3VudCA/PyB0cnVlXG4gICk7XG4gIHJlYWRvbmx5IGZpbmFsU2hvd1dvcmRDb3VudCA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuc2hvd1dvcmRDb3VudCgpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuc2hvd1dvcmRDb3VudCA/PyB0cnVlXG4gICk7XG4gIHJlYWRvbmx5IGZpbmFsTG9jYWxlID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gKHRoaXMubG9jYWxlKCkgYXMgU3VwcG9ydGVkTG9jYWxlKSA/PyAodGhpcy5lZmZlY3RpdmVDb25maWcoKS5sb2NhbGUgYXMgU3VwcG9ydGVkTG9jYWxlKVxuICApO1xuXG4gIC8vIEV4dGVuc2lvbnMgJiBPcHRpb25zXG4gIHJlYWRvbmx5IGZpbmFsVGlwdGFwRXh0ZW5zaW9ucyA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMudGlwdGFwRXh0ZW5zaW9ucygpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkudGlwdGFwRXh0ZW5zaW9ucyA/PyBbXVxuICApO1xuXG4gIHJlYWRvbmx5IGZpbmFsVGlwdGFwT3B0aW9ucyA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMudGlwdGFwT3B0aW9ucygpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkudGlwdGFwT3B0aW9ucyA/PyB7fVxuICApO1xuXG4gIHJlYWRvbmx5IGZpbmFsU3RhdGVDYWxjdWxhdG9ycyA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuc3RhdGVDYWxjdWxhdG9ycygpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuc3RhdGVDYWxjdWxhdG9ycyA/PyBbXVxuICApO1xuXG4gIHJlYWRvbmx5IGZpbmFsQW5ndWxhck5vZGVzQ29uZmlnID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5hbmd1bGFyTm9kZXMgPz8gW10pO1xuXG4gIC8vIEltYWdlIFVwbG9hZFxuICByZWFkb25seSBmaW5hbEltYWdlVXBsb2FkQ29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGZyb21JbnB1dCA9IHRoaXMuaW1hZ2VVcGxvYWQoKTtcbiAgICBjb25zdCBmcm9tQ29uZmlnID0gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5pbWFnZVVwbG9hZDtcbiAgICBjb25zdCBiYXNlID0gQVRFX0RFRkFVTFRfSU1BR0VfVVBMT0FEX0NPTkZJRztcblxuICAgIGNvbnN0IG1lcmdlZCA9IHtcbiAgICAgIC4uLmJhc2UsXG4gICAgICAuLi5mcm9tQ29uZmlnLFxuICAgICAgLi4uZnJvbUlucHV0LFxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubWVyZ2VkLFxuICAgICAgbWF4U2l6ZTogKG1lcmdlZC5tYXhTaXplID8/IDUpICogMTAyNCAqIDEwMjQsIC8vIENvbnZlcnQgTUIgdG8gYnl0ZXMgZm9yIGludGVybmFsIHNlcnZpY2VcbiAgICB9O1xuICB9KTtcblxuICByZWFkb25seSBmaW5hbEltYWdlVXBsb2FkSGFuZGxlciA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuaW1hZ2VVcGxvYWRIYW5kbGVyKCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5pbWFnZVVwbG9hZD8uaGFuZGxlclxuICApO1xuXG4gIC8vIENvbXB1dGVkIGZvciBjdXJyZW50IHRyYW5zbGF0aW9ucyAoYWxsb3dzIHBlci1pbnN0YW5jZSBvdmVycmlkZSB2aWEgY29uZmlnIG9yIGlucHV0KVxuICByZWFkb25seSBjdXJyZW50VHJhbnNsYXRpb25zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGxvY2FsZU92ZXJyaWRlID0gdGhpcy5maW5hbExvY2FsZSgpO1xuICAgIGlmIChsb2NhbGVPdmVycmlkZSkge1xuICAgICAgY29uc3QgYWxsVHJhbnNsYXRpb25zID0gdGhpcy5pMThuU2VydmljZS5hbGxUcmFuc2xhdGlvbnMoKTtcbiAgICAgIHJldHVybiBhbGxUcmFuc2xhdGlvbnNbbG9jYWxlT3ZlcnJpZGVdIHx8IHRoaXMuaTE4blNlcnZpY2UudHJhbnNsYXRpb25zKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmkxOG5TZXJ2aWNlLnRyYW5zbGF0aW9ucygpO1xuICB9KTtcblxuICBwcml2YXRlIF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAvLyBOZ0NvbnRyb2wgZm9yIG1hbmFnZW1lbnQgb2YgRm9ybUNvbnRyb2xzXG4gIHByaXZhdGUgbmdDb250cm9sID0gaW5qZWN0KE5nQ29udHJvbCwgeyBzZWxmOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICByZWFkb25seSBpMThuU2VydmljZSA9IGluamVjdChBdGVJMThuU2VydmljZSk7XG4gIHJlYWRvbmx5IGVkaXRvckNvbW1hbmRzU2VydmljZSA9IGluamVjdChBdGVFZGl0b3JDb21tYW5kc1NlcnZpY2UpO1xuICAvLyBBY2Nlc3MgZWRpdG9yIHN0YXRlIHZpYSBzZXJ2aWNlXG4gIHJlYWRvbmx5IGVkaXRvclN0YXRlID0gdGhpcy5lZGl0b3JDb21tYW5kc1NlcnZpY2UuZWRpdG9yU3RhdGU7XG4gIHByaXZhdGUgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICBwcml2YXRlIGdsb2JhbENvbmZpZyA9IGluamVjdChBVEVfR0xPQkFMX0NPTkZJRywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAvKipcbiAgICogRmluYWwgbWVyZ2VkIGNvbmZpZ3VyYXRpb24uXG4gICAqIFByaW9yaXR5OiBJbnB1dCBbY29uZmlnXSA+IEdsb2JhbCBjb25maWcgdmlhIHByb3ZpZGVBdGVFZGl0b3IoKVxuICAgKi9cbiAgcmVhZG9ubHkgZWZmZWN0aXZlQ29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGZyb21JbnB1dCA9IHRoaXMuY29uZmlnKCk7XG4gICAgY29uc3QgZnJvbUdsb2JhbCA9IHRoaXMuZ2xvYmFsQ29uZmlnIHx8IHt9O1xuICAgIHJldHVybiB7IC4uLkFURV9ERUZBVUxUX0NPTkZJRywgLi4uZnJvbUdsb2JhbCwgLi4uZnJvbUlucHV0IH07XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIEVmZmVjdCB0byB1cGRhdGUgZWRpdG9yIGNvbnRlbnQgKHdpdGggYW50aS1lY2hvKVxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50KCk7IC8vIFNvbGUgcmVhY3RpdmUgZGVwZW5kZW5jeVxuXG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcigpO1xuICAgICAgICBjb25zdCBoYXNGb3JtQ29udHJvbCA9ICEhKHRoaXMubmdDb250cm9sIGFzIHsgY29udHJvbD86IHVua25vd24gfSk/LmNvbnRyb2w7XG5cbiAgICAgICAgaWYgKCFlZGl0b3IgfHwgY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQW50aS3DqWNobyA6IG9uIGlnbm9yZSBjZSBxdSdvbiB2aWVudCBkJ8OpbWV0dHJlIG5vdXMtbcOqbWVzXG4gICAgICAgIGlmIChjb250ZW50ID09PSB0aGlzLmxhc3RFbWl0dGVkSHRtbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERvdWJsZSBzw6ljdXJpdMOpIDogb24gdsOpcmlmaWUgbGUgY29udGVudSBhY3R1ZWwgZGUgbCfDqWRpdGV1clxuICAgICAgICBpZiAoY29udGVudCA9PT0gZWRpdG9yLmdldEhUTUwoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERvIG5vdCBvdmVyd3JpdGUgY29udGVudCBpZiB3ZSBoYXZlIGEgRm9ybUNvbnRyb2wgYW5kIGNvbnRlbnQgaXMgZW1wdHlcbiAgICAgICAgaWYgKGhhc0Zvcm1Db250cm9sICYmICFjb250ZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZWRpdG9yLmNvbW1hbmRzLnNldENvbnRlbnQoY29udGVudCwgeyBlbWl0VXBkYXRlOiBmYWxzZSB9KTtcbiAgICAgIH0pO1xuICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG5cbiAgICAvLyBFZmZlY3QgdG8gdXBkYXRlIGhlaWdodCBwcm9wZXJ0aWVzXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IG1pbkhlaWdodCA9IHRoaXMuZmluYWxNaW5IZWlnaHQoKTtcbiAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZmluYWxIZWlnaHQoKTtcbiAgICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuZmluYWxNYXhIZWlnaHQoKTtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVkaXRvckVsZW1lbnQoKT8ubmF0aXZlRWxlbWVudDtcblxuICAgICAgLy8gQXV0b21hdGljYWxseSBjYWxjdWxhdGUgaWYgc2Nyb2xsIGlzIG5lZWRlZFxuICAgICAgY29uc3QgbmVlZHNTY3JvbGwgPSBoZWlnaHQgIT09IHVuZGVmaW5lZCB8fCBtYXhIZWlnaHQgIT09IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tZWRpdG9yLW1pbi1oZWlnaHRcIiwgbWluSGVpZ2h0ID8/IFwiYXV0b1wiKTtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tZWRpdG9yLWhlaWdodFwiLCBoZWlnaHQgPz8gXCJhdXRvXCIpO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwiLS1lZGl0b3ItbWF4LWhlaWdodFwiLCBtYXhIZWlnaHQgPz8gXCJub25lXCIpO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwiLS1lZGl0b3Itb3ZlcmZsb3dcIiwgbmVlZHNTY3JvbGwgPyBcImF1dG9cIiA6IFwidmlzaWJsZVwiKTtcbiAgICAgIH1cbiAgICB9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pO1xuXG4gICAgLy8gRWZmZWN0IHRvIG1vbml0b3IgZWRpdGFiaWxpdHkgY2hhbmdlc1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RWRpdG9yID0gdGhpcy5lZGl0b3IoKTtcbiAgICAgIC8vIEFuIGVkaXRvciBpcyBcImVkaXRhYmxlXCIgaWYgaXQncyBub3QgZGlzYWJsZWQgYW5kIGVkaXRhYmxlIG1vZGUgaXMgT05cbiAgICAgIGNvbnN0IGlzRWRpdGFibGUgPSB0aGlzLmZpbmFsRWRpdGFibGUoKSAmJiAhdGhpcy5tZXJnZWREaXNhYmxlZCgpO1xuICAgICAgLy8gQW4gZWRpdG9yIGlzIFwicmVhZG9ubHlcIiBpZiBpdCdzIGV4cGxpY2l0bHkgbm9uLWVkaXRhYmxlIGFuZCBub3QgZGlzYWJsZWRcbiAgICAgIC8vIGNvbnN0IGlzUmVhZE9ubHkgPSAhdGhpcy5maW5hbEVkaXRhYmxlKCkgJiYgIXRoaXMubWVyZ2VkRGlzYWJsZWQoKTsgLy8gVW51c2VkIHZhcmlhYmxlXG5cbiAgICAgIGlmIChjdXJyZW50RWRpdG9yKSB7XG4gICAgICAgIHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlLnNldEVkaXRhYmxlKGN1cnJlbnRFZGl0b3IsIGlzRWRpdGFibGUpO1xuICAgICAgfVxuICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG5cbiAgICAvLyBFZmZlY3QgdG8gc3luY2hyb25pemUgaW1hZ2UgdXBsb2FkIGhhbmRsZXIgd2l0aCB0aGUgc2VydmljZVxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5maW5hbEltYWdlVXBsb2FkSGFuZGxlcigpO1xuICAgICAgdGhpcy5lZGl0b3JDb21tYW5kc1NlcnZpY2UudXBsb2FkSGFuZGxlciA9IGhhbmRsZXIgfHwgbnVsbDtcbiAgICB9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pO1xuXG4gICAgLy8gRWZmZWN0IHRvIHVwZGF0ZSBjaGFyYWN0ZXIgY291bnQgbGltaXQgZHluYW1pY2FsbHlcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3IoKTtcbiAgICAgIGNvbnN0IGxpbWl0ID0gdGhpcy5maW5hbE1heENoYXJhY3RlcnMoKTtcblxuICAgICAgaWYgKGVkaXRvciAmJiBlZGl0b3IuZXh0ZW5zaW9uTWFuYWdlcikge1xuICAgICAgICBjb25zdCBjaGFyYWN0ZXJDb3VudEV4dGVuc2lvbiA9IGVkaXRvci5leHRlbnNpb25NYW5hZ2VyLmV4dGVuc2lvbnMuZmluZChcbiAgICAgICAgICBleHQgPT4gZXh0Lm5hbWUgPT09IFwiY2hhcmFjdGVyQ291bnRcIlxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChjaGFyYWN0ZXJDb3VudEV4dGVuc2lvbikge1xuICAgICAgICAgIGNoYXJhY3RlckNvdW50RXh0ZW5zaW9uLm9wdGlvbnMubGltaXQgPSBsaW1pdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG5cbiAgICAvLyBFZmZlY3QgdG8gcmUtaW5pdGlhbGl6ZSBlZGl0b3Igd2hlbiB0ZWNobmljYWwgY29uZmlndXJhdGlvbiBjaGFuZ2VzXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIC8vIE1vbml0b3IgdGVjaG5pY2FsIGRlcGVuZGVuY2llc1xuICAgICAgdGhpcy5maW5hbFRpcHRhcEV4dGVuc2lvbnMoKTtcbiAgICAgIHRoaXMuZmluYWxUaXB0YXBPcHRpb25zKCk7XG4gICAgICB0aGlzLmZpbmFsQW5ndWxhck5vZGVzQ29uZmlnKCk7XG4gICAgICB0aGlzLmZpbmFsQmxvY2tDb250cm9scygpO1xuXG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAvLyBPbmx5IGlmIGFscmVhZHkgaW5pdGlhbGl6ZWQgKHBvc3QgQWZ0ZXJWaWV3SW5pdClcbiAgICAgICAgaWYgKHRoaXMuZWRpdG9yRnVsbHlJbml0aWFsaXplZCgpKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudEVkaXRvciA9IHRoaXMuZWRpdG9yKCk7XG4gICAgICAgICAgaWYgKGN1cnJlbnRFZGl0b3IpIHtcbiAgICAgICAgICAgIGN1cnJlbnRFZGl0b3IuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5fZWRpdG9yRnVsbHlJbml0aWFsaXplZC5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5pbml0RWRpdG9yKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIExhIHZ1ZSBlc3QgZMOpasOgIGNvbXBsw6h0ZW1lbnQgaW5pdGlhbGlzw6llIGRhbnMgbmdBZnRlclZpZXdJbml0XG4gICAgLy8gSW5pdGlhbGlzZXIgbCfDqWRpdGV1clxuICAgIHRoaXMuaW5pdEVkaXRvcigpO1xuXG4gICAgLy8gUydhYm9ubmVyIGF1eCBjaGFuZ2VtZW50cyBkdSBGb3JtQ29udHJvbFxuICAgIHRoaXMuc2V0dXBGb3JtQ29udHJvbFN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgY29uc3QgY3VycmVudEVkaXRvciA9IHRoaXMuZWRpdG9yKCk7XG4gICAgaWYgKGN1cnJlbnRFZGl0b3IpIHtcbiAgICAgIGN1cnJlbnRFZGl0b3IuZGVzdHJveSgpO1xuICAgIH1cbiAgICB0aGlzLl9lZGl0b3JGdWxseUluaXRpYWxpemVkLnNldChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRFZGl0b3IoKSB7XG4gICAgY29uc3QgZXh0ZW5zaW9uczogKEV4dGVuc2lvbiB8IE5vZGUgfCBNYXJrKVtdID0gW1xuICAgICAgU3RhcnRlcktpdC5jb25maWd1cmUoe1xuICAgICAgICBsaW5rOiB7XG4gICAgICAgICAgb3Blbk9uQ2xpY2s6IGZhbHNlLFxuICAgICAgICAgIEhUTUxBdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICBjbGFzczogXCJhdGUtbGlua1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIFRleHRTdHlsZSxcbiAgICAgIENvbG9yLmNvbmZpZ3VyZSh7XG4gICAgICAgIHR5cGVzOiBbXCJ0ZXh0U3R5bGVcIl0sXG4gICAgICB9KSxcbiAgICAgIFBsYWNlaG9sZGVyLmNvbmZpZ3VyZSh7XG4gICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLmZpbmFsUGxhY2Vob2xkZXIoKSxcbiAgICAgIH0pLFxuICAgICAgU3VwZXJzY3JpcHQsXG4gICAgICBTdWJzY3JpcHQsXG4gICAgICBUZXh0QWxpZ24uY29uZmlndXJlKHtcbiAgICAgICAgdHlwZXM6IFtcImhlYWRpbmdcIiwgXCJwYXJhZ3JhcGhcIiwgXCJyZXNpemFibGVJbWFnZVwiXSxcbiAgICAgIH0pLFxuICAgICAgQXRlTGlua0NsaWNrQmVoYXZpb3IsXG4gICAgICBIaWdobGlnaHQuY29uZmlndXJlKHtcbiAgICAgICAgbXVsdGljb2xvcjogdHJ1ZSxcbiAgICAgICAgSFRNTEF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBjbGFzczogXCJhdGUtaGlnaGxpZ2h0XCIsXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIEF0ZVJlc2l6YWJsZUltYWdlLmNvbmZpZ3VyZSh7XG4gICAgICAgIGlubGluZTogZmFsc2UsXG4gICAgICAgIGFsbG93QmFzZTY0OiB0cnVlLFxuICAgICAgICBIVE1MQXR0cmlidXRlczoge1xuICAgICAgICAgIGNsYXNzOiBcImF0ZS1pbWFnZVwiLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBBdGVVcGxvYWRQcm9ncmVzcy5jb25maWd1cmUoe1xuICAgICAgICBpc1VwbG9hZGluZzogKCkgPT4gdGhpcy5lZGl0b3JDb21tYW5kc1NlcnZpY2UuaXNVcGxvYWRpbmcoKSxcbiAgICAgICAgdXBsb2FkUHJvZ3Jlc3M6ICgpID0+IHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlLnVwbG9hZFByb2dyZXNzKCksXG4gICAgICAgIHVwbG9hZE1lc3NhZ2U6ICgpID0+IHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlLnVwbG9hZE1lc3NhZ2UoKSxcbiAgICAgIH0pLFxuICAgICAgQXRlVGFibGVFeHRlbnNpb24sXG4gICAgICBBdGVUaXB0YXBTdGF0ZUV4dGVuc2lvbi5jb25maWd1cmUoe1xuICAgICAgICBvblVwZGF0ZTogc3RhdGUgPT4gdGhpcy5lZGl0b3JDb21tYW5kc1NlcnZpY2UudXBkYXRlU3RhdGUoc3RhdGUpLFxuICAgICAgICBjYWxjdWxhdG9yczogW1xuICAgICAgICAgIEF0ZVNlbGVjdGlvbkNhbGN1bGF0b3IsXG4gICAgICAgICAgQXRlTWFya3NDYWxjdWxhdG9yLFxuICAgICAgICAgIEF0ZVRhYmxlQ2FsY3VsYXRvcixcbiAgICAgICAgICBBdGVJbWFnZUNhbGN1bGF0b3IsXG4gICAgICAgICAgQXRlU3RydWN0dXJlQ2FsY3VsYXRvcixcbiAgICAgICAgICBBdGVEaXNjb3ZlcnlDYWxjdWxhdG9yLFxuICAgICAgICAgIC4uLnRoaXMuZmluYWxTdGF0ZUNhbGN1bGF0b3JzKCksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICBdO1xuXG4gICAgaWYgKHRoaXMuZmluYWxCbG9ja0NvbnRyb2xzKCkgIT09IFwibm9uZVwiKSB7XG4gICAgICBleHRlbnNpb25zLnB1c2goXG4gICAgICAgIEF0ZUJsb2NrQ29udHJvbHNFeHRlbnNpb24uY29uZmlndXJlKHtcbiAgICAgICAgICBvbkhvdmVyOiBkYXRhID0+IHRoaXMuX2hvdmVyZWRCbG9jay5zZXQoZGF0YSksXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEFqb3V0ZXIgbCdleHRlbnNpb24gT2ZmaWNlIFBhc3RlIHNpIGFjdGl2w6llXG4gICAgaWYgKHRoaXMuZmluYWxFbmFibGVPZmZpY2VQYXN0ZSgpKSB7XG4gICAgICBleHRlbnNpb25zLnB1c2goXG4gICAgICAgIE9mZmljZVBhc3RlLmNvbmZpZ3VyZSh7XG4gICAgICAgICAgLy8gQ29uZmlndXJhdGlvbiBwYXIgZMOpZmF1dCBwb3VyIHVuZSBtZWlsbGV1cmUgY29tcGF0aWJpbGl0w6lcbiAgICAgICAgICB0cmFuc2Zvcm1QYXN0ZWRIVE1MOiB0cnVlLFxuICAgICAgICAgIHRyYW5zZm9ybVBhc3RlZFRleHQ6IHRydWUsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZpbmFsU2hvd0NoYXJhY3RlckNvdW50KCkgfHwgdGhpcy5maW5hbFNob3dXb3JkQ291bnQoKSkge1xuICAgICAgZXh0ZW5zaW9ucy5wdXNoKFxuICAgICAgICBDaGFyYWN0ZXJDb3VudC5jb25maWd1cmUoe1xuICAgICAgICAgIGxpbWl0OiB0aGlzLmZpbmFsTWF4Q2hhcmFjdGVycygpLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBSZWdpc3RlciBhdXRvbWF0aWMgbm9kZSB2aWV3cyBmcm9tIGNvbmZpZ1xuICAgIGNvbnN0IGF1dG9Ob2RlVmlld3MgPSB0aGlzLmZpbmFsQW5ndWxhck5vZGVzQ29uZmlnKCk7XG4gICAgYXV0b05vZGVWaWV3cy5mb3JFYWNoKChyZWc6IEF0ZUFuZ3VsYXJOb2RlKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25zID1cbiAgICAgICAgdHlwZW9mIHJlZyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyB7IGNvbXBvbmVudDogcmVnIGFzIFR5cGU8dW5rbm93bj4gfVxuICAgICAgICAgIDogKHJlZyBhcyBSZWdpc3RlckFuZ3VsYXJDb21wb25lbnRPcHRpb25zPHVua25vd24+KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gcmVnaXN0ZXJBbmd1bGFyQ29tcG9uZW50KHRoaXMuaW5qZWN0b3IsIG9wdGlvbnMpO1xuICAgICAgICBleHRlbnNpb25zLnB1c2goZXh0ZW5zaW9uKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIltBVEVdIEZhaWxlZCB0byBhdXRvLXJlZ2lzdGVyIG5vZGUgdmlldzpcIiwgZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBBbGxvdyBhZGRpdGlvbiBvZiBjdXN0b20gZXh0ZW5zaW9ucywgYnV0IGF2b2lkIGR1cGxpY2F0ZXMgYnkgZmlsdGVyaW5nIGJ5IG5hbWVcbiAgICBjb25zdCBjdXN0b21FeHRlbnNpb25zID0gdGhpcy5maW5hbFRpcHRhcEV4dGVuc2lvbnMoKTtcbiAgICBpZiAoY3VzdG9tRXh0ZW5zaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBleGlzdGluZ05hbWVzID0gbmV3IFNldChcbiAgICAgICAgZXh0ZW5zaW9uc1xuICAgICAgICAgIC5tYXAoKGV4dDogRXh0ZW5zaW9uIHwgTm9kZSB8IE1hcmspID0+IChleHQgYXMgeyBuYW1lPzogc3RyaW5nIH0pPy5uYW1lKVxuICAgICAgICAgIC5maWx0ZXIoKG5hbWUpOiBuYW1lIGlzIHN0cmluZyA9PiAhIW5hbWUpXG4gICAgICApO1xuXG4gICAgICBjb25zdCB0b0FkZCA9IGN1c3RvbUV4dGVuc2lvbnMuZmlsdGVyKChleHQ6IEV4dGVuc2lvbiB8IE5vZGUgfCBNYXJrKSA9PiB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSAoZXh0IGFzIHsgbmFtZT86IHN0cmluZyB9KT8ubmFtZTtcbiAgICAgICAgcmV0dXJuICFuYW1lIHx8ICFleGlzdGluZ05hbWVzLmhhcyhuYW1lKTtcbiAgICAgIH0pO1xuXG4gICAgICBleHRlbnNpb25zLnB1c2goLi4udG9BZGQpO1xuICAgIH1cblxuICAgIC8vIEFsc28gYWxsb3cgYW55IHRpcHRhcCB1c2VyIG9wdGlvbnNcbiAgICBjb25zdCB1c2VyT3B0aW9ucyA9IHRoaXMuZmluYWxUaXB0YXBPcHRpb25zKCk7XG4gICAgY29uc3QgdXNlckVkaXRvclByb3BzID0gdXNlck9wdGlvbnMuZWRpdG9yUHJvcHM7XG4gICAgY29uc3QgdXNlckhhbmRsZVBhc3RlID0gdXNlckVkaXRvclByb3BzPy5oYW5kbGVQYXN0ZTtcbiAgICBjb25zdCB1c2VySGFuZGxlRE9NUGFzdGUgPSB1c2VyRWRpdG9yUHJvcHM/LmhhbmRsZURPTUV2ZW50cz8ucGFzdGU7XG5cbiAgICB0eXBlIEVkaXRvckhhbmRsZVBhc3RlID0gTm9uTnVsbGFibGU8Tm9uTnVsbGFibGU8RWRpdG9yT3B0aW9uc1tcImVkaXRvclByb3BzXCJdPltcImhhbmRsZVBhc3RlXCJdPjtcbiAgICB0eXBlIEVkaXRvckRPTVBhc3RlSGFuZGxlciA9IE5vbk51bGxhYmxlPFxuICAgICAgTm9uTnVsbGFibGU8Tm9uTnVsbGFibGU8RWRpdG9yT3B0aW9uc1tcImVkaXRvclByb3BzXCJdPltcImhhbmRsZURPTUV2ZW50c1wiXT5bXCJwYXN0ZVwiXVxuICAgID47XG5cbiAgICBjb25zdCBoYW5kbGVET01QYXN0ZTogRWRpdG9yRE9NUGFzdGVIYW5kbGVyID0gKHZpZXcsIGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RWRpdG9yID0gdGhpcy5lZGl0b3IoKTtcbiAgICAgIGlmIChcbiAgICAgICAgY3VycmVudEVkaXRvciAmJlxuICAgICAgICB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS5oYW5kbGVJbWFnZVBhc3RlKFxuICAgICAgICAgIGN1cnJlbnRFZGl0b3IsXG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgdGhpcy5nZXRJbWFnZVVwbG9hZE9wdGlvbnMoKVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghdXNlckhhbmRsZURPTVBhc3RlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXNlclJlc3VsdCA9IHVzZXJIYW5kbGVET01QYXN0ZSh2aWV3LCBldmVudCk7XG4gICAgICByZXR1cm4gdXNlclJlc3VsdCA9PT0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlUGFzdGU6IEVkaXRvckhhbmRsZVBhc3RlID0gKHZpZXcsIGV2ZW50LCBzbGljZSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudEVkaXRvciA9IHRoaXMuZWRpdG9yKCk7XG4gICAgICBpZiAoXG4gICAgICAgIGN1cnJlbnRFZGl0b3IgJiZcbiAgICAgICAgdGhpcy5lZGl0b3JDb21tYW5kc1NlcnZpY2UuaGFuZGxlSW1hZ2VQYXN0ZShcbiAgICAgICAgICBjdXJyZW50RWRpdG9yLFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIHRoaXMuZ2V0SW1hZ2VVcGxvYWRPcHRpb25zKClcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXVzZXJIYW5kbGVQYXN0ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVzZXJSZXN1bHQgPSB1c2VySGFuZGxlUGFzdGUodmlldywgZXZlbnQsIHNsaWNlKTtcbiAgICAgIHJldHVybiB1c2VyUmVzdWx0ID09PSB0cnVlO1xuICAgIH07XG5cbiAgICBjb25zdCBuZXdFZGl0b3IgPSBuZXcgRWRpdG9yKHtcbiAgICAgIC4uLnVzZXJPcHRpb25zLFxuICAgICAgZWxlbWVudDogdGhpcy5lZGl0b3JFbGVtZW50KCkubmF0aXZlRWxlbWVudCxcbiAgICAgIGV4dGVuc2lvbnM6IGV4dGVuc2lvbnMsXG4gICAgICBjb250ZW50OiB0aGlzLmNvbnRlbnQoKSxcbiAgICAgIGVkaXRhYmxlOiB0aGlzLmZpbmFsRWRpdGFibGUoKSAmJiAhdGhpcy5tZXJnZWREaXNhYmxlZCgpLFxuICAgICAgYXV0b2ZvY3VzOiB0aGlzLmZpbmFsQXV0b2ZvY3VzKCksXG4gICAgICBlZGl0b3JQcm9wczoge1xuICAgICAgICAuLi51c2VyRWRpdG9yUHJvcHMsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAuLi51c2VyRWRpdG9yUHJvcHM/LmF0dHJpYnV0ZXMsXG4gICAgICAgICAgc3BlbGxjaGVjazogdGhpcy5maW5hbFNwZWxsY2hlY2soKS50b1N0cmluZygpLFxuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVET01FdmVudHM6IHtcbiAgICAgICAgICAuLi51c2VyRWRpdG9yUHJvcHM/LmhhbmRsZURPTUV2ZW50cyxcbiAgICAgICAgICBwYXN0ZTogaGFuZGxlRE9NUGFzdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZVBhc3RlLFxuICAgICAgfSxcbiAgICAgIG9uVXBkYXRlOiAoeyBlZGl0b3IsIHRyYW5zYWN0aW9uIH0pID0+IHtcbiAgICAgICAgY29uc3QgaHRtbCA9IGVkaXRvci5nZXRIVE1MKCk7XG5cbiAgICAgICAgLy8gQW50aS3DqWNobyA6IG3DqW1vcmlzZXIgY2UgcXUnb24gw6ltZXQgcG91ciDDqXZpdGVyIGxhIGJvdWNsZVxuICAgICAgICB0aGlzLmxhc3RFbWl0dGVkSHRtbCA9IGh0bWw7XG5cbiAgICAgICAgdGhpcy5jb250ZW50Q2hhbmdlLmVtaXQoaHRtbCk7XG4gICAgICAgIC8vIE1ldHRyZSDDoCBqb3VyIGxlIEZvcm1Db250cm9sIHNpIGlsIGV4aXN0ZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKFxuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wgYXMge1xuICAgICAgICAgICAgICBjb250cm9sPzogeyBzZXRWYWx1ZTogKHZhbHVlOiBzdHJpbmcsIG9wdGlvbnM6IHsgZW1pdEV2ZW50OiBib29sZWFuIH0pID0+IHZvaWQgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApPy5jb250cm9sXG4gICAgICAgICkge1xuICAgICAgICAgIChcbiAgICAgICAgICAgIHRoaXMubmdDb250cm9sIGFzIHtcbiAgICAgICAgICAgICAgY29udHJvbDogeyBzZXRWYWx1ZTogKHZhbHVlOiBzdHJpbmcsIG9wdGlvbnM6IHsgZW1pdEV2ZW50OiBib29sZWFuIH0pID0+IHZvaWQgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApLmNvbnRyb2wuc2V0VmFsdWUoaHRtbCwge1xuICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVkaXRvclVwZGF0ZS5lbWl0KHsgZWRpdG9yLCB0cmFuc2FjdGlvbiB9KTtcbiAgICAgICAgdGhpcy51cGRhdGVDaGFyYWN0ZXJDb3VudChlZGl0b3IpO1xuICAgICAgfSxcbiAgICAgIG9uQ3JlYXRlOiAoeyBlZGl0b3IgfSkgPT4ge1xuICAgICAgICB0aGlzLmVkaXRvckNyZWF0ZWQuZW1pdChlZGl0b3IpO1xuICAgICAgICB0aGlzLnVwZGF0ZUNoYXJhY3RlckNvdW50KGVkaXRvcik7XG5cbiAgICAgICAgLy8gTWFycXVlciBsJ8OpZGl0ZXVyIGNvbW1lIGNvbXBsw6h0ZW1lbnQgaW5pdGlhbGlzw6kgYXByw6hzIHVuIGNvdXJ0IGTDqWxhaVxuICAgICAgICAvLyBwb3VyIHMnYXNzdXJlciBxdWUgdG91cyBsZXMgcGx1Z2lucyBldCBleHRlbnNpb25zIHNvbnQgcHLDqnRzXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2VkaXRvckZ1bGx5SW5pdGlhbGl6ZWQuc2V0KHRydWUpO1xuICAgICAgICB9LCAxMDApO1xuICAgICAgfSxcbiAgICAgIG9uRm9jdXM6ICh7IGVkaXRvciwgZXZlbnQgfSkgPT4ge1xuICAgICAgICB0aGlzLmVkaXRvckZvY3VzLmVtaXQoeyBlZGl0b3IsIGV2ZW50IH0pO1xuICAgICAgfSxcbiAgICAgIG9uQmx1cjogKHsgZWRpdG9yLCBldmVudCB9KSA9PiB7XG4gICAgICAgIC8vIE1hcnF1ZXIgbGUgRm9ybUNvbnRyb2wgY29tbWUgdG91Y2jDqSBzaSBpbCBleGlzdGVcbiAgICAgICAgaWYgKCh0aGlzLm5nQ29udHJvbCBhcyB7IGNvbnRyb2w/OiB7IG1hcmtBc1RvdWNoZWQ6ICgpID0+IHZvaWQgfSB9KT8uY29udHJvbCkge1xuICAgICAgICAgICh0aGlzLm5nQ29udHJvbCBhcyB7IGNvbnRyb2w6IHsgbWFya0FzVG91Y2hlZDogKCkgPT4gdm9pZCB9IH0pLmNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWRpdG9yQmx1ci5lbWl0KHsgZWRpdG9yLCBldmVudCB9KTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBTdG9ja2VyIGxhIHLDqWbDqXJlbmNlIGRlIGwnw6lkaXRldXIgaW1tw6lkaWF0ZW1lbnRcbiAgICB0aGlzLl9lZGl0b3Iuc2V0KG5ld0VkaXRvcik7XG4gIH1cblxuICB0b2dnbGVFZGl0TW9kZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IG5ld0VkaXRhYmxlID0gIXRoaXMuZmluYWxFZGl0YWJsZSgpO1xuICAgIHRoaXMuZWRpdGFibGVDaGFuZ2UuZW1pdChuZXdFZGl0YWJsZSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNoYXJhY3RlckNvdW50KGVkaXRvcjogRWRpdG9yKSB7XG4gICAgaWYgKFxuICAgICAgKHRoaXMuZmluYWxTaG93Q2hhcmFjdGVyQ291bnQoKSB8fCB0aGlzLmZpbmFsU2hvd1dvcmRDb3VudCgpKSAmJlxuICAgICAgZWRpdG9yLnN0b3JhZ2VbXCJjaGFyYWN0ZXJDb3VudFwiXVxuICAgICkge1xuICAgICAgY29uc3Qgc3RvcmFnZSA9IGVkaXRvci5zdG9yYWdlW1wiY2hhcmFjdGVyQ291bnRcIl07XG4gICAgICB0aGlzLl9jaGFyYWN0ZXJDb3VudC5zZXQoc3RvcmFnZS5jaGFyYWN0ZXJzKCkpO1xuICAgICAgdGhpcy5fd29yZENvdW50LnNldChzdG9yYWdlLndvcmRzKCkpO1xuICAgIH1cbiAgfVxuXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5faXNEcmFnT3Zlci5zZXQodHJ1ZSk7XG4gIH1cblxuICBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yKCk7XG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgdGhpcy5lZGl0b3JDb21tYW5kc1NlcnZpY2UuaGFuZGxlSW1hZ2VEcm9wKGVkaXRvciwgZXZlbnQsIHRoaXMuZ2V0SW1hZ2VVcGxvYWRPcHRpb25zKCkpO1xuICAgICAgdGhpcy5faXNEcmFnT3Zlci5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW1hZ2VVcGxvYWRPcHRpb25zKCk6IEF0ZUltYWdlVXBsb2FkT3B0aW9ucyB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5maW5hbEltYWdlVXBsb2FkQ29uZmlnKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHF1YWxpdHk6IGNvbmZpZy5xdWFsaXR5LFxuICAgICAgbWF4V2lkdGg6IGNvbmZpZy5tYXhXaWR0aCxcbiAgICAgIG1heEhlaWdodDogY29uZmlnLm1heEhlaWdodCxcbiAgICAgIG1heFNpemU6IGNvbmZpZy5tYXhTaXplLFxuICAgICAgYWxsb3dlZFR5cGVzOiBjb25maWcuYWxsb3dlZFR5cGVzLFxuICAgIH07XG4gIH1cblxuICAvLyBQdWJsaWMgbWV0aG9kc1xuICBnZXRIVE1MKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yKCk/LmdldEhUTUwoKSB8fCBcIlwiO1xuICB9XG5cbiAgZ2V0SlNPTigpOiBKU09OQ29udGVudCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yKCk/LmdldEpTT04oKTtcbiAgfVxuXG4gIGdldFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IoKT8uZ2V0VGV4dCgpIHx8IFwiXCI7XG4gIH1cblxuICBzZXRDb250ZW50KGNvbnRlbnQ6IHN0cmluZywgZW1pdFVwZGF0ZSA9IHRydWUpIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcigpO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlLnNldENvbnRlbnQoZWRpdG9yLCBjb250ZW50LCBlbWl0VXBkYXRlKTtcbiAgICB9XG4gIH1cblxuICBmb2N1cygpIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcigpO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlLmZvY3VzKGVkaXRvcik7XG4gICAgfVxuICB9XG5cbiAgYmx1cigpIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcigpO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlLmJsdXIoZWRpdG9yKTtcbiAgICB9XG4gIH1cblxuICBjbGVhckNvbnRlbnQoKSB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3IoKTtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS5jbGVhckNvbnRlbnQoZWRpdG9yKTtcbiAgICB9XG4gIH1cblxuICAvLyBNw6l0aG9kZSBwdWJsaXF1ZSBwb3VyIG9idGVuaXIgbCfDqWRpdGV1clxuICBnZXRFZGl0b3IoKTogRWRpdG9yIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yKCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwRm9ybUNvbnRyb2xTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbCA9IChcbiAgICAgIHRoaXMubmdDb250cm9sIGFzIHtcbiAgICAgICAgY29udHJvbD86IHtcbiAgICAgICAgICB2YWx1ZTogc3RyaW5nO1xuICAgICAgICAgIHZhbHVlQ2hhbmdlczogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICAgICAgICAgIHN0YXR1czogc3RyaW5nO1xuICAgICAgICAgIHN0YXR1c0NoYW5nZXM6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICApPy5jb250cm9sO1xuICAgIGlmIChjb250cm9sKSB7XG4gICAgICAvLyBTeW5jaHJvbml6ZSBmb3JtIGNvbnRyb2wgdmFsdWUgd2l0aCBlZGl0b3IgY29udGVudFxuICAgICAgY29uc3QgZm9ybVZhbHVlJDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gY29uY2F0KFxuICAgICAgICBkZWZlcigoKSA9PiBvZihjb250cm9sLnZhbHVlKSksXG4gICAgICAgIGNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICApO1xuXG4gICAgICBmb3JtVmFsdWUkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3IoKTtcbiAgICAgICAgICAgIGlmIChlZGl0b3IpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRDb250ZW50KHZhbHVlLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgICAvLyBTeW5jaHJvbml6ZSBmb3JtIGNvbnRyb2wgc3RhdHVzIHdpdGggZWRpdG9yIGRpc2FibGVkIHN0YXRlXG4gICAgICBjb25zdCBmb3JtU3RhdHVzJDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gY29uY2F0KFxuICAgICAgICBkZWZlcigoKSA9PiBvZihjb250cm9sLnN0YXR1cykpLFxuICAgICAgICBjb250cm9sLnN0YXR1c0NoYW5nZXNcbiAgICAgICk7XG5cbiAgICAgIGZvcm1TdGF0dXMkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoc3RhdHVzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2lzRm9ybUNvbnRyb2xEaXNhYmxlZC5zZXQoc3RhdHVzID09PSBcIkRJU0FCTEVEXCIpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBvbkVkaXRvckNsaWNrKGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yKCk7XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJbiByZWFkLW9ubHkgbW9kZSwgaGFuZGxlIGNsZWFyaW5nIG9mIG5vZGUgc2VsZWN0aW9uXG4gICAgaWYgKCF0aGlzLmZpbmFsRWRpdGFibGUoKSkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgY29uc3QgZWRpdG9yRWxlbWVudCA9IHRoaXMuZWRpdG9yRWxlbWVudCgpPy5uYXRpdmVFbGVtZW50O1xuICAgICAgaWYgKHRhcmdldCA9PT0gZWRpdG9yRWxlbWVudCB8fCB0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYXRlLWNvbnRlbnRcIikpIHtcbiAgICAgICAgLy8gQ2xlYXIgc2VsZWN0aW9uIHRvIGhpZGUgYnViYmxlIG1lbnVzXG4gICAgICAgIGVkaXRvci5jb21tYW5kcy5zZXRUZXh0U2VsZWN0aW9uKDApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZlcmlmeSBpZiBpbnRlcmFjdGlvbiBpcyBvbiB0aGUgY29udGFpbmVyIGVsZW1lbnQgYW5kIG5vdCBvbiB0aGUgY29udGVudFxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBlZGl0b3JFbGVtZW50ID0gdGhpcy5lZGl0b3JFbGVtZW50KCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBpZiAodGFyZ2V0ID09PSBlZGl0b3JFbGVtZW50IHx8IHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoXCJhdGUtY29udGVudFwiKSkge1xuICAgICAgLy8gSW50ZXJhY3Rpb24gaW4gdGhlIGVtcHR5IHNwYWNlLCBwb3NpdGlvbiB0aGUgY3Vyc29yIGF0IHRoZSBlbmRcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGRvYyB9ID0gZWRpdG9yLnN0YXRlO1xuICAgICAgICBjb25zdCBlbmRQb3MgPSBkb2MuY29udGVudC5zaXplO1xuICAgICAgICBlZGl0b3IuY29tbWFuZHMuc2V0VGV4dFNlbGVjdGlvbihlbmRQb3MpO1xuICAgICAgICBlZGl0b3IuY29tbWFuZHMuZm9jdXMoKTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIC8vIE1ldGhvZHMgZm9yIHRhYmxlIGVkaXQgYnV0dG9uIC0gUmVtb3ZlZCBhcyByZXBsYWNlZCBieSBidWJibGUgbWVudVxufVxuIl19
1053
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aXB0YXAtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdGlwdGFwLWVkaXRvci9zcmMvbGliL2NvbXBvbmVudHMvZWRpdG9yL2FuZ3VsYXItdGlwdGFwLWVkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUVOLFNBQVMsRUFDVCxNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFFUixNQUFNLEVBQ04sVUFBVSxFQUNWLHVCQUF1QixFQUN2QixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBcUQsTUFBTSxjQUFjLENBQUM7QUFDekYsT0FBTyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLFdBQVcsTUFBTSwyQ0FBMkMsQ0FBQztBQUdwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUs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bXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIE9uRGVzdHJveSxcbiAgdmlld0NoaWxkLFxuICBlZmZlY3QsXG4gIHNpZ25hbCxcbiAgY29tcHV0ZWQsXG4gIEFmdGVyVmlld0luaXQsXG4gIGluamVjdCxcbiAgRGVzdHJveVJlZixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIHVudHJhY2tlZCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcFwiO1xuaW1wb3J0IHsgRWRpdG9yLCBFZGl0b3JPcHRpb25zLCBFeHRlbnNpb24sIE5vZGUsIE1hcmssIEpTT05Db250ZW50IH0gZnJvbSBcIkB0aXB0YXAvY29yZVwiO1xuaW1wb3J0IFN0YXJ0ZXJLaXQgZnJvbSBcIkB0aXB0YXAvc3RhcnRlci1raXRcIjtcbmltcG9ydCB7IFBsYWNlaG9sZGVyLCBDaGFyYWN0ZXJDb3VudCB9IGZyb20gXCJAdGlwdGFwL2V4dGVuc2lvbnNcIjtcbmltcG9ydCB7IFN1cGVyc2NyaXB0IH0gZnJvbSBcIkB0aXB0YXAvZXh0ZW5zaW9uLXN1cGVyc2NyaXB0XCI7XG5pbXBvcnQgeyBTdWJzY3JpcHQgfSBmcm9tIFwiQHRpcHRhcC9leHRlbnNpb24tc3Vic2NyaXB0XCI7XG5pbXBvcnQgeyBUZXh0QWxpZ24gfSBmcm9tIFwiQHRpcHRhcC9leHRlbnNpb24tdGV4dC1hbGlnblwiO1xuaW1wb3J0IHsgSGlnaGxpZ2h0IH0gZnJvbSBcIkB0aXB0YXAvZXh0ZW5zaW9uLWhpZ2hsaWdodFwiO1xuaW1wb3J0IHsgVGV4dFN0eWxlIH0gZnJvbSBcIkB0aXB0YXAvZXh0ZW5zaW9uLXRleHQtc3R5bGVcIjtcbmltcG9ydCB7IENvbG9yIH0gZnJvbSBcIkB0aXB0YXAvZXh0ZW5zaW9uLWNvbG9yXCI7XG5pbXBvcnQgT2ZmaWNlUGFzdGUgZnJvbSBcIkBpbnRldmF0aW9uL3RpcHRhcC1leHRlbnNpb24tb2ZmaWNlLXBhc3RlXCI7XG5pbXBvcnQgeyBOb2RlIGFzIFBNTm9kZSB9IGZyb20gXCJAdGlwdGFwL3BtL21vZGVsXCI7XG5cbmltcG9ydCB7IEF0ZVJlc2l6YWJsZUltYWdlIH0gZnJvbSBcIi4uLy4uL2V4dGVuc2lvbnMvYXRlLXJlc2l6YWJsZS1pbWFnZS5leHRlbnNpb25cIjtcbmltcG9ydCB7IEF0ZVVwbG9hZFByb2dyZXNzIH0gZnJvbSBcIi4uLy4uL2V4dGVuc2lvbnMvYXRlLXVwbG9hZC1wcm9ncmVzcy5leHRlbnNpb25cIjtcbmltcG9ydCB7IEF0ZVRhYmxlRXh0ZW5zaW9uIH0gZnJvbSBcIi4uLy4uL2V4dGVuc2lvbnMvYXRlLXRhYmxlLmV4dGVuc2lvblwiO1xuaW1wb3J0IHsgQXRlVGlwdGFwU3RhdGVFeHRlbnNpb24gfSBmcm9tIFwiLi4vLi4vZXh0ZW5zaW9ucy9hdGUtdGlwdGFwLXN0YXRlLmV4dGVuc2lvblwiO1xuaW1wb3J0IHsgQXRlVG9vbGJhckNvbXBvbmVudCB9IGZyb20gXCIuLi90b29sYmFyL2F0ZS10b29sYmFyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQXRlQnViYmxlTWVudUNvbXBvbmVudCB9IGZyb20gXCIuLi9idWJibGUtbWVudXMvdGV4dC9hdGUtYnViYmxlLW1lbnUuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBBdGVJbWFnZUJ1YmJsZU1lbnVDb21wb25lbnQgfSBmcm9tIFwiLi4vYnViYmxlLW1lbnVzL2ltYWdlL2F0ZS1pbWFnZS1idWJibGUtbWVudS5jb21wb25lbnRcIjtcbmltcG9ydCB7IEF0ZVRhYmxlQnViYmxlTWVudUNvbXBvbmVudCB9IGZyb20gXCIuLi9idWJibGUtbWVudXMvdGFibGUvYXRlLXRhYmxlLWJ1YmJsZS1tZW51LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQXRlQ2VsbEJ1YmJsZU1lbnVDb21wb25lbnQgfSBmcm9tIFwiLi4vYnViYmxlLW1lbnVzL3RhYmxlL2F0ZS1jZWxsLWJ1YmJsZS1tZW51LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQXRlTGlua0J1YmJsZU1lbnVDb21wb25lbnQgfSBmcm9tIFwiLi4vYnViYmxlLW1lbnVzL2xpbmsvYXRlLWxpbmstYnViYmxlLW1lbnUuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBBdGVDb2xvckJ1YmJsZU1lbnVDb21wb25lbnQgfSBmcm9tIFwiLi4vYnViYmxlLW1lbnVzL2NvbG9yL2F0ZS1jb2xvci1idWJibGUtbWVudS5jb21wb25lbnRcIjtcbmltcG9ydCB7IEF0ZVNsYXNoQ29tbWFuZHNDb21wb25lbnQgfSBmcm9tIFwiLi4vc2xhc2gtY29tbWFuZHMvYXRlLXNsYXNoLWNvbW1hbmRzLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQXRlQmxvY2tDb250cm9sc0NvbXBvbmVudCB9IGZyb20gXCIuL2F0ZS1ibG9jay1jb250cm9scy5jb21wb25lbnRcIjtcbmltcG9ydCB7IEF0ZUN1c3RvbVNsYXNoQ29tbWFuZHMgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2F0ZS1zbGFzaC1jb21tYW5kLm1vZGVsXCI7XG5pbXBvcnQgeyBBdGVFZGl0VG9nZ2xlQ29tcG9uZW50IH0gZnJvbSBcIi4uL2VkaXQtdG9nZ2xlL2F0ZS1lZGl0LXRvZ2dsZS5jb21wb25lbnRcIjtcbmltcG9ydCB7IEF0ZUltYWdlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdGUtaW1hZ2Uuc2VydmljZVwiO1xuaW1wb3J0IHsgQXRlSTE4blNlcnZpY2UsIFN1cHBvcnRlZExvY2FsZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdGUtaTE4bi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBdGVFZGl0b3JDb21tYW5kc1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXRlLWVkaXRvci1jb21tYW5kcy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBdGVDb2xvclBpY2tlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXRlLWNvbG9yLXBpY2tlci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBdGVMaW5rU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdGUtbGluay5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBdGVFeHBvcnRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F0ZS1leHBvcnQuc2VydmljZVwiO1xuaW1wb3J0IHsgQXRlRWRpdG9yUmVnaXN0cnkgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXRlLWVkaXRvci1yZWdpc3RyeS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBdGVOb29wVmFsdWVBY2Nlc3NvckRpcmVjdGl2ZSB9IGZyb20gXCIuLi8uLi9kaXJlY3RpdmVzL2F0ZS1ub29wLXZhbHVlLWFjY2Vzc29yLmRpcmVjdGl2ZVwiO1xuaW1wb3J0IHsgQXRlU3RhdGVDYWxjdWxhdG9yIH0gZnJvbSBcIi4uLy4uL21vZGVscy9hdGUtZWRpdG9yLXN0YXRlLm1vZGVsXCI7XG5pbXBvcnQgeyBOZ0NvbnRyb2wgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7XG4gIGZpbHRlclNsYXNoQ29tbWFuZHMsXG4gIEF0ZVNsYXNoQ29tbWFuZHNDb25maWcsXG59IGZyb20gXCIuLi8uLi9jb25maWcvYXRlLXNsYXNoLWNvbW1hbmRzLmNvbmZpZ1wiO1xuaW1wb3J0IHsgcmVnaXN0ZXJBbmd1bGFyQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL25vZGUtdmlldy9hdGUtcmVnaXN0ZXItYW5ndWxhci1jb21wb25lbnRcIjtcbmltcG9ydCB7IFJlZ2lzdGVyQW5ndWxhckNvbXBvbmVudE9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vbm9kZS12aWV3L2F0ZS1ub2RlLXZpZXcubW9kZWxzXCI7XG5pbXBvcnQgeyBBVEVfR0xPQkFMX0NPTkZJRyB9IGZyb20gXCIuLi8uLi9jb25maWcvYXRlLWdsb2JhbC1jb25maWcudG9rZW5cIjtcbmltcG9ydCB7IFR5cGUsIEluamVjdG9yIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuaW1wb3J0IHsgQXRlU2VsZWN0aW9uQ2FsY3VsYXRvciB9IGZyb20gXCIuLi8uLi9leHRlbnNpb25zL2NhbGN1bGF0b3JzL2F0ZS1zZWxlY3Rpb24uY2FsY3VsYXRvclwiO1xuaW1wb3J0IHsgQXRlTWFya3NDYWxjdWxhdG9yIH0gZnJvbSBcIi4uLy4uL2V4dGVuc2lvbnMvY2FsY3VsYXRvcnMvYXRlLW1hcmtzLmNhbGN1bGF0b3JcIjtcbmltcG9ydCB7IEF0ZVRhYmxlQ2FsY3VsYXRvciB9IGZyb20gXCIuLi8uLi9leHRlbnNpb25zL2NhbGN1bGF0b3JzL2F0ZS10YWJsZS5jYWxjdWxhdG9yXCI7XG5pbXBvcnQgeyBBdGVJbWFnZUNhbGN1bGF0b3IgfSBmcm9tIFwiLi4vLi4vZXh0ZW5zaW9ucy9jYWxjdWxhdG9ycy9hdGUtaW1hZ2UuY2FsY3VsYXRvclwiO1xuaW1wb3J0IHsgQXRlU3RydWN0dXJlQ2FsY3VsYXRvciB9IGZyb20gXCIuLi8uLi9leHRlbnNpb25zL2NhbGN1bGF0b3JzL2F0ZS1zdHJ1Y3R1cmUuY2FsY3VsYXRvclwiO1xuaW1wb3J0IHsgQXRlRGlzY292ZXJ5Q2FsY3VsYXRvciB9IGZyb20gXCIuLi8uLi9leHRlbnNpb25zL2NhbGN1bGF0b3JzL2F0ZS1kaXNjb3ZlcnkuY2FsY3VsYXRvclwiO1xuXG5pbXBvcnQgeyBBdGVUb29sYmFyQ29uZmlnIH0gZnJvbSBcIi4uLy4uL21vZGVscy9hdGUtdG9vbGJhci5tb2RlbFwiO1xuaW1wb3J0IHtcbiAgQXRlQnViYmxlTWVudUNvbmZpZyxcbiAgQXRlSW1hZ2VCdWJibGVNZW51Q29uZmlnLFxuICBBdGVUYWJsZUJ1YmJsZU1lbnVDb25maWcsXG4gIEF0ZUNlbGxCdWJibGVNZW51Q29uZmlnLFxufSBmcm9tIFwiLi4vLi4vbW9kZWxzL2F0ZS1idWJibGUtbWVudS5tb2RlbFwiO1xuaW1wb3J0IHtcbiAgQXRlRWRpdG9yQ29uZmlnLFxuICBBdGVBbmd1bGFyTm9kZSxcbiAgQXRlQmxvY2tDb250cm9sc01vZGUsXG4gIEF0ZUF1dG9mb2N1c01vZGUsXG59IGZyb20gXCIuLi8uLi9tb2RlbHMvYXRlLWVkaXRvci1jb25maWcubW9kZWxcIjtcbmltcG9ydCB7IEF0ZUxpbmtDbGlja0JlaGF2aW9yIH0gZnJvbSBcIi4uLy4uL2V4dGVuc2lvbnMvYXRlLWxpbmstY2xpY2stYmVoYXZpb3IuZXh0ZW5zaW9uXCI7XG5pbXBvcnQgeyBBdGVCbG9ja0NvbnRyb2xzRXh0ZW5zaW9uIH0gZnJvbSBcIi4uLy4uL2V4dGVuc2lvbnMvYXRlLWJsb2NrLWNvbnRyb2xzLmV4dGVuc2lvblwiO1xuaW1wb3J0IHtcbiAgQVRFX0RFRkFVTFRfVE9PTEJBUl9DT05GSUcsXG4gIEFURV9ERUZBVUxUX0JVQkJMRV9NRU5VX0NPTkZJRyxcbiAgQVRFX0RFRkFVTFRfSU1BR0VfQlVCQkxFX01FTlVfQ09ORklHLFxuICBBVEVfREVGQVVMVF9JTUFHRV9VUExPQURfQ09ORklHLFxuICBBVEVfREVGQVVMVF9UQUJMRV9NRU5VX0NPTkZJRyxcbiAgQVRFX0RFRkFVTFRfQ0VMTF9NRU5VX0NPTkZJRyxcbiAgQVRFX0RFRkFVTFRfQ09ORklHLFxufSBmcm9tIFwiLi4vLi4vY29uZmlnL2F0ZS1lZGl0b3IuY29uZmlnXCI7XG5pbXBvcnQgeyBjb25jYXQsIGRlZmVyLCBPYnNlcnZhYmxlLCBvZiwgdGFwIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IEF0ZUltYWdlVXBsb2FkSGFuZGxlciwgQXRlSW1hZ2VVcGxvYWRPcHRpb25zIH0gZnJvbSBcIi4uLy4uL21vZGVscy9hdGUtaW1hZ2UubW9kZWxcIjtcblxuLy8gU2xhc2ggY29tbWFuZHMgY29uZmlndXJhdGlvbiBpcyBoYW5kbGVkIGR5bmFtaWNhbGx5IHZpYSBzbGFzaENvbW1hbmRzQ29uZmlnQ29tcHV0ZWRcblxuLyoqXG4gKiBUaGUgbWFpbiByaWNoLXRleHQgZWRpdG9yIGNvbXBvbmVudCBmb3IgQW5ndWxhci5cbiAqXG4gKiBQb3dlcmVkIGJ5IFRpcHRhcCBhbmQgYnVpbHQgd2l0aCBhIG5hdGl2ZSBTaWduYWwtYmFzZWQgYXJjaGl0ZWN0dXJlLCBpdCBwcm92aWRlc1xuICogYSBzZWFtbGVzcywgaGlnaC1wZXJmb3JtYW5jZSBlZGl0aW5nIGV4cGVyaWVuY2UuIFN1cHBvcnRzIGF1dG9tYXRpYyByZWdpc3RyYXRpb25cbiAqIG9mIEFuZ3VsYXIgY29tcG9uZW50cyBhcyBpbnRlcmFjdGl2ZSBub2RlcyAoJ0FuZ3VsYXIgTm9kZXMnKSwgZnVsbCBSZWFjdGl2ZSBGb3Jtc1xuICogaW50ZWdyYXRpb24sIGFuZCBleHRlbnNpdmUgY3VzdG9taXphdGlvbiB2aWEgdGhlIEF0ZUVkaXRvckNvbmZpZy5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImFuZ3VsYXItdGlwdGFwLWVkaXRvclwiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdERpcmVjdGl2ZXM6IFtBdGVOb29wVmFsdWVBY2Nlc3NvckRpcmVjdGl2ZV0sXG4gIGhvc3Q6IHtcbiAgICBcIltjbGFzcy5maWxsLWNvbnRhaW5lcl1cIjogXCJmaW5hbEZpbGxDb250YWluZXIoKVwiLFxuICAgIFwiW2NsYXNzLmZsb2F0aW5nLXRvb2xiYXJdXCI6IFwiZmluYWxGbG9hdGluZ1Rvb2xiYXIoKVwiLFxuICAgIFwiW2NsYXNzLmlzLXJlYWRvbmx5XVwiOiBcIiFmaW5hbEVkaXRhYmxlKCkgJiYgIW1lcmdlZERpc2FibGVkKClcIixcbiAgICBcIltjbGFzcy5pcy1kaXNhYmxlZF1cIjogXCJtZXJnZWREaXNhYmxlZCgpXCIsXG4gICAgXCJbc3R5bGUuLS1hdGUtYm9yZGVyLXdpZHRoXVwiOiBcImZpbmFsU2VhbWxlc3MoKSB8fCBtZXJnZWREaXNhYmxlZCgpID8gJzAnIDogbnVsbFwiLFxuICAgIFwiW3N0eWxlLi0tYXRlLWJhY2tncm91bmRdXCI6XG4gICAgICBcImZpbmFsU2VhbWxlc3MoKSA/ICd0cmFuc3BhcmVudCcgOiAobWVyZ2VkRGlzYWJsZWQoKSA/ICd2YXIoLS1hdGUtc3VyZmFjZS10ZXJ0aWFyeSknIDogbnVsbClcIixcbiAgICBcIltzdHlsZS4tLWF0ZS10b29sYmFyLWJvcmRlci1jb2xvcl1cIjogXCJmaW5hbFNlYW1sZXNzKCkgPyAndHJhbnNwYXJlbnQnIDogbnVsbFwiLFxuICAgIFwiW3N0eWxlLi0tYXRlLWNvdW50ZXItYmFja2dyb3VuZF1cIjogXCJmaW5hbFNlYW1sZXNzKCkgPyAndHJhbnNwYXJlbnQnIDogbnVsbFwiLFxuICAgIFwiW3N0eWxlLi0tYXRlLWNvdW50ZXItYm9yZGVyLWNvbG9yXVwiOiBcImZpbmFsU2VhbWxlc3MoKSA/ICd0cmFuc3BhcmVudCcgOiBudWxsXCIsXG4gICAgXCJbY2xhc3MuZGFya11cIjogXCJjb25maWcoKS50aGVtZSA9PT0gJ2RhcmsnXCIsXG4gICAgXCJbY2xhc3MuYXRlLWJsb2Nrcy1pbnNpZGVdXCI6IFwiZmluYWxCbG9ja0NvbnRyb2xzKCkgPT09ICdpbnNpZGUnXCIsXG4gICAgXCJbY2xhc3MuYXRlLWJsb2Nrcy1vdXRzaWRlXVwiOiBcImZpbmFsQmxvY2tDb250cm9scygpID09PSAnb3V0c2lkZSdcIixcbiAgICBcIlthdHRyLmRhdGEtdGhlbWVdXCI6IFwiY29uZmlnKCkudGhlbWVcIixcbiAgfSxcbiAgaW1wb3J0czogW1xuICAgIEF0ZVRvb2xiYXJDb21wb25lbnQsXG4gICAgQXRlQnViYmxlTWVudUNvbXBvbmVudCxcbiAgICBBdGVJbWFnZUJ1YmJsZU1lbnVDb21wb25lbnQsXG4gICAgQXRlVGFibGVCdWJibGVNZW51Q29tcG9uZW50LFxuICAgIEF0ZUNlbGxCdWJibGVNZW51Q29tcG9uZW50LFxuICAgIEF0ZVNsYXNoQ29tbWFuZHNDb21wb25lbnQsXG4gICAgQXRlTGlua0J1YmJsZU1lbnVDb21wb25lbnQsXG4gICAgQXRlQ29sb3JCdWJibGVNZW51Q29tcG9uZW50LFxuICAgIEF0ZUVkaXRUb2dnbGVDb21wb25lbnQsXG4gICAgQXRlQmxvY2tDb250cm9sc0NvbXBvbmVudCxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbQXRlRWRpdG9yQ29tbWFuZHNTZXJ2aWNlLCBBdGVJbWFnZVNlcnZpY2UsIEF0ZUNvbG9yUGlja2VyU2VydmljZSwgQXRlTGlua1NlcnZpY2UsIEF0ZUV4cG9ydFNlcnZpY2VdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJhdGUtZWRpdG9yXCI+XG4gICAgICA8IS0tIFRvb2xiYXIgLS0+XG4gICAgICBAaWYgKGZpbmFsRWRpdGFibGUoKSAmJiAhbWVyZ2VkRGlzYWJsZWQoKSAmJiBmaW5hbFNob3dUb29sYmFyKCkgJiYgZWRpdG9yKCkpIHtcbiAgICAgICAgPGF0ZS10b29sYmFyXG4gICAgICAgICAgW2VkaXRvcl09XCJlZGl0b3IoKSFcIlxuICAgICAgICAgIFtjb25maWddPVwiZmluYWxUb29sYmFyQ29uZmlnKClcIlxuICAgICAgICAgIFtpbWFnZVVwbG9hZF09XCJmaW5hbEltYWdlVXBsb2FkQ29uZmlnKClcIlxuICAgICAgICAgIFtmbG9hdGluZ109XCJmaW5hbEZsb2F0aW5nVG9vbGJhcigpXCJcbiAgICAgICAgICAobW91c2VlbnRlcik9XCJoaWRlQnViYmxlTWVudXMoKVwiXG4gICAgICAgICAgKG1vdXNlbGVhdmUpPVwic2hvd0J1YmJsZU1lbnVzKClcIiAvPlxuICAgICAgfVxuXG4gICAgICBAaWYgKGZpbmFsU2hvd0VkaXRUb2dnbGUoKSAmJiAhbWVyZ2VkRGlzYWJsZWQoKSkge1xuICAgICAgICA8YXRlLWVkaXQtdG9nZ2xlXG4gICAgICAgICAgW2VkaXRhYmxlXT1cImZpbmFsRWRpdGFibGUoKVwiXG4gICAgICAgICAgW3RyYW5zbGF0aW9uc109XCJjdXJyZW50VHJhbnNsYXRpb25zKClcIlxuICAgICAgICAgIChlZGl0VG9nZ2xlKT1cInRvZ2dsZUVkaXRNb2RlKCRldmVudClcIiAvPlxuICAgICAgfVxuXG4gICAgICA8IS0tIEVkaXRvciBDb250ZW50IC0tPlxuICAgICAgPGRpdlxuICAgICAgICAjZWRpdG9yRWxlbWVudFxuICAgICAgICBjbGFzcz1cImF0ZS1jb250ZW50XCJcbiAgICAgICAgW2NsYXNzLmRyYWctb3Zlcl09XCJpc0RyYWdPdmVyKClcIlxuICAgICAgICAoZHJhZ292ZXIpPVwib25EcmFnT3ZlcigkZXZlbnQpXCJcbiAgICAgICAgKGRyb3ApPVwib25Ecm9wKCRldmVudClcIlxuICAgICAgICAoY2xpY2spPVwib25FZGl0b3JDbGljaygkZXZlbnQpXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25FZGl0b3JDbGljaygkZXZlbnQpXCJcbiAgICAgICAgKGtleWRvd24uc3BhY2UpPVwib25FZGl0b3JDbGljaygkZXZlbnQpXCJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgcm9sZT1cImFwcGxpY2F0aW9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJjdXJyZW50VHJhbnNsYXRpb25zKCkuZWRpdG9yLnBsYWNlaG9sZGVyXCI+PC9kaXY+XG5cbiAgICAgIDwhLS0gQmxvY2sgQ29udHJvbHMgKFBsdXMgKyBEcmFnKSAtLT5cbiAgICAgIEBpZiAoZmluYWxFZGl0YWJsZSgpICYmICFtZXJnZWREaXNhYmxlZCgpICYmIGVkaXRvcigpICYmIGZpbmFsQmxvY2tDb250cm9scygpICE9PSBcIm5vbmVcIikge1xuICAgICAgICA8YXRlLWJsb2NrLWNvbnRyb2xzXG4gICAgICAgICAgW2VkaXRvcl09XCJlZGl0b3IoKSFcIlxuICAgICAgICAgIFtob3ZlcmVkRGF0YV09XCJob3ZlcmVkQmxvY2soKVwiXG4gICAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwiZWRpdG9yRnVsbHlJbml0aWFsaXplZCgpID8gJ2Jsb2NrJyA6ICdub25lJ1wiPjwvYXRlLWJsb2NrLWNvbnRyb2xzPlxuICAgICAgfVxuXG4gICAgICA8IS0tIFRleHQgQnViYmxlIE1lbnUgLS0+XG4gICAgICBAaWYgKGZpbmFsRWRpdGFibGUoKSAmJiBmaW5hbFNob3dCdWJibGVNZW51KCkgJiYgZWRpdG9yKCkpIHtcbiAgICAgICAgPGF0ZS1idWJibGUtbWVudVxuICAgICAgICAgIFtlZGl0b3JdPVwiZWRpdG9yKCkhXCJcbiAgICAgICAgICBbY29uZmlnXT1cImZpbmFsQnViYmxlTWVudUNvbmZpZygpXCJcbiAgICAgICAgICBbc3R5bGUuZGlzcGxheV09XCJlZGl0b3JGdWxseUluaXRpYWxpemVkKCkgPyAnYmxvY2snIDogJ25vbmUnXCI+PC9hdGUtYnViYmxlLW1lbnU+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gSW1hZ2UgQnViYmxlIE1lbnUgLS0+XG4gICAgICBAaWYgKGZpbmFsU2hvd0ltYWdlQnViYmxlTWVudSgpICYmIGVkaXRvcigpKSB7XG4gICAgICAgIDxhdGUtaW1hZ2UtYnViYmxlLW1lbnVcbiAgICAgICAgICBbZWRpdG9yXT1cImVkaXRvcigpIVwiXG4gICAgICAgICAgW2NvbmZpZ109XCJmaW5hbEltYWdlQnViYmxlTWVudUNvbmZpZygpXCJcbiAgICAgICAgICBbaW1hZ2VVcGxvYWRdPVwiZmluYWxJbWFnZVVwbG9hZENvbmZpZygpXCJcbiAgICAgICAgICBbc3R5bGUuZGlzcGxheV09XCJlZGl0b3JGdWxseUluaXRpYWxpemVkKCkgPyAnYmxvY2snIDogJ25vbmUnXCI+PC9hdGUtaW1hZ2UtYnViYmxlLW1lbnU+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gTGluayBCdWJibGUgTWVudSAtLT5cbiAgICAgIEBpZiAoZmluYWxFZGl0YWJsZSgpICYmIGVkaXRvcigpKSB7XG4gICAgICAgIDxhdGUtbGluay1idWJibGUtbWVudVxuICAgICAgICAgIFtlZGl0b3JdPVwiZWRpdG9yKCkhXCJcbiAgICAgICAgICBbc3R5bGUuZGlzcGxheV09XCJlZGl0b3JGdWxseUluaXRpYWxpemVkKCkgPyAnYmxvY2snIDogJ25vbmUnXCI+PC9hdGUtbGluay1idWJibGUtbWVudT5cbiAgICAgIH1cblxuICAgICAgPCEtLSBDb2xvciBCdWJibGUgTWVudSAtLT5cbiAgICAgIEBpZiAoZmluYWxFZGl0YWJsZSgpICYmIGVkaXRvcigpKSB7XG4gICAgICAgIDxhdGUtY29sb3ItYnViYmxlLW1lbnVcbiAgICAgICAgICBbZWRpdG9yXT1cImVkaXRvcigpIVwiXG4gICAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwiZWRpdG9yRnVsbHlJbml0aWFsaXplZCgpID8gJ2Jsb2NrJyA6ICdub25lJ1wiPjwvYXRlLWNvbG9yLWJ1YmJsZS1tZW51PlxuICAgICAgfVxuXG4gICAgICA8IS0tIFNsYXNoIENvbW1hbmRzIC0tPlxuICAgICAgQGlmIChmaW5hbEVkaXRhYmxlKCkgJiYgZmluYWxFbmFibGVTbGFzaENvbW1hbmRzKCkgJiYgZWRpdG9yKCkpIHtcbiAgICAgICAgPGF0ZS1zbGFzaC1jb21tYW5kc1xuICAgICAgICAgIFtlZGl0b3JdPVwiZWRpdG9yKCkhXCJcbiAgICAgICAgICBbY29uZmlnXT1cImZpbmFsU2xhc2hDb21tYW5kc0NvbmZpZygpXCJcbiAgICAgICAgICBbc3R5bGUuZGlzcGxheV09XCJlZGl0b3JGdWxseUluaXRpYWxpemVkKCkgPyAnYmxvY2snIDogJ25vbmUnXCI+PC9hdGUtc2xhc2gtY29tbWFuZHM+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gVGFibGUgTWVudSAtLT5cbiAgICAgIEBpZiAoZmluYWxFZGl0YWJsZSgpICYmIGZpbmFsU2hvd1RhYmxlQnViYmxlTWVudSgpICYmIGVkaXRvcigpKSB7XG4gICAgICAgIDxhdGUtdGFibGUtYnViYmxlLW1lbnVcbiAgICAgICAgICBbZWRpdG9yXT1cImVkaXRvcigpIVwiXG4gICAgICAgICAgW2NvbmZpZ109XCJmaW5hbFRhYmxlQnViYmxlTWVudUNvbmZpZygpXCJcbiAgICAgICAgICBbc3R5bGUuZGlzcGxheV09XCJlZGl0b3JGdWxseUluaXRpYWxpemVkKCkgPyAnYmxvY2snIDogJ25vbmUnXCI+PC9hdGUtdGFibGUtYnViYmxlLW1lbnU+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gQ2VsbCBNZW51IC0tPlxuICAgICAgQGlmIChmaW5hbEVkaXRhYmxlKCkgJiYgZmluYWxTaG93Q2VsbEJ1YmJsZU1lbnUoKSAmJiBlZGl0b3IoKSkge1xuICAgICAgICA8YXRlLWNlbGwtYnViYmxlLW1lbnVcbiAgICAgICAgICBbZWRpdG9yXT1cImVkaXRvcigpIVwiXG4gICAgICAgICAgW2NvbmZpZ109XCJmaW5hbENlbGxCdWJibGVNZW51Q29uZmlnKClcIlxuICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImVkaXRvckZ1bGx5SW5pdGlhbGl6ZWQoKSA/ICdibG9jaycgOiAnbm9uZSdcIj48L2F0ZS1jZWxsLWJ1YmJsZS1tZW51PlxuICAgICAgfVxuXG4gICAgICA8IS0tIENvdW50ZXJzIC0tPlxuICAgICAgQGlmIChcbiAgICAgICAgZmluYWxFZGl0YWJsZSgpICYmXG4gICAgICAgICFtZXJnZWREaXNhYmxlZCgpICYmXG4gICAgICAgIGZpbmFsU2hvd0Zvb3RlcigpICYmXG4gICAgICAgIChmaW5hbFNob3dDaGFyYWN0ZXJDb3VudCgpIHx8IGZpbmFsU2hvd1dvcmRDb3VudCgpKVxuICAgICAgKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNoYXJhY3Rlci1jb3VudFwiXG4gICAgICAgICAgW2NsYXNzLmxpbWl0LXJlYWNoZWRdPVwiZmluYWxNYXhDaGFyYWN0ZXJzKCkgJiYgY2hhcmFjdGVyQ291bnQoKSA+PSBmaW5hbE1heENoYXJhY3RlcnMoKSFcIj5cbiAgICAgICAgICBAaWYgKGZpbmFsU2hvd0NoYXJhY3RlckNvdW50KCkpIHtcbiAgICAgICAgICAgIHt7IGNoYXJhY3RlckNvdW50KCkgfX1cbiAgICAgICAgICAgIHt7IGN1cnJlbnRUcmFuc2xhdGlvbnMoKS5lZGl0b3IuY2hhcmFjdGVyIH19e3sgY2hhcmFjdGVyQ291bnQoKSA+IDEgPyBcInNcIiA6IFwiXCIgfX1cbiAgICAgICAgICAgIEBpZiAoZmluYWxNYXhDaGFyYWN0ZXJzKCkpIHtcbiAgICAgICAgICAgICAgLyB7eyBmaW5hbE1heENoYXJhY3RlcnMoKSB9fVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIEBpZiAoZmluYWxTaG93Q2hhcmFjdGVyQ291bnQoKSAmJiBmaW5hbFNob3dXb3JkQ291bnQoKSkge1xuICAgICAgICAgICAgLFxuICAgICAgICAgIH1cblxuICAgICAgICAgIEBpZiAoZmluYWxTaG93V29yZENvdW50KCkpIHtcbiAgICAgICAgICAgIHt7IHdvcmRDb3VudCgpIH19XG4gICAgICAgICAgICB7eyBjdXJyZW50VHJhbnNsYXRpb25zKCkuZWRpdG9yLndvcmQgfX17eyB3b3JkQ291bnQoKSA+IDEgPyBcInNcIiA6IFwiXCIgfX1cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgIENTUyBDdXN0b20gUHJvcGVydGllcyAoVmFyaWFibGVzKVxuICAgICAgICAgT3ZlcnJpZGUgdGhlc2UgdG8gY3VzdG9taXplIHRoZSBlZGl0b3JcbiAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbiAgICAgIDpob3N0IHtcbiAgICAgICAgLyogPT09PT0gQkFTRSBUT0tFTlMgKGN1c3RvbWl6ZSB0aGVzZSBmb3IgZWFzeSB0aGVtaW5nKSA9PT09PSAqL1xuICAgICAgICAtLWF0ZS1wcmltYXJ5OiAjMjU2M2ViO1xuICAgICAgICAtLWF0ZS1wcmltYXJ5LWhvdmVyOiAjMTUzY2E5O1xuICAgICAgICAtLWF0ZS1wcmltYXJ5LWNvbnRyYXN0OiAjZmZmZmZmO1xuICAgICAgICAtLWF0ZS1wcmltYXJ5LWxpZ2h0OiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYXRlLXByaW1hcnkpLCB0cmFuc3BhcmVudCA5MCUpO1xuICAgICAgICAtLWF0ZS1wcmltYXJ5LWxpZ2h0ZXI6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hdGUtcHJpbWFyeSksIHRyYW5zcGFyZW50IDk1JSk7XG4gICAgICAgIC0tYXRlLXByaW1hcnktbGlnaHQtYWxwaGE6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hdGUtcHJpbWFyeSksIHRyYW5zcGFyZW50IDg1JSk7XG5cbiAgICAgICAgLS1hdGUtc3VyZmFjZTogI2ZmZmZmZjtcbiAgICAgICAgLS1hdGUtc3VyZmFjZS1zZWNvbmRhcnk6ICNmOGY5ZmE7XG4gICAgICAgIC0tYXRlLXN1cmZhY2UtdGVydGlhcnk6ICNmMWY1Zjk7XG5cbiAgICAgICAgLS1hdGUtdGV4dDogIzJkMzc0ODtcbiAgICAgICAgLS1hdGUtdGV4dC1zZWNvbmRhcnk6ICM2NDc0OGI7XG4gICAgICAgIC0tYXRlLXRleHQtbXV0ZWQ6ICNhMGFlYzA7XG5cbiAgICAgICAgLS1hdGUtYm9yZGVyOiAjZTJlOGYwO1xuXG4gICAgICAgIC0tYXRlLWhpZ2hsaWdodC1iZzogI2ZlZjA4YTtcbiAgICAgICAgLS1hdGUtaGlnaGxpZ2h0LWNvbG9yOiAjODU0ZDBlO1xuXG4gICAgICAgIC0tYXRlLWJ1dHRvbi1ob3ZlcjogI2YxZjVmOTtcbiAgICAgICAgLS1hdGUtYnV0dG9uLWFjdGl2ZTogI2UyZThmMDtcblxuICAgICAgICAtLWF0ZS1zZWxlY3Rpb24tYmc6IHZhcigtLWF0ZS1wcmltYXJ5LWxpZ2h0LWFscGhhKTtcblxuICAgICAgICAtLWF0ZS1lcnJvci1jb2xvcjogI2M1MzAzMDtcbiAgICAgICAgLS1hdGUtZXJyb3ItYmc6ICNmZWQ3ZDc7XG4gICAgICAgIC0tYXRlLWVycm9yLWJvcmRlcjogI2ZlYjJiMjtcblxuICAgICAgICAvKiA9PT09PSBDT01QT05FTlQgVE9LRU5TICh1c2UgYmFzZSB0b2tlbnMgYnkgZGVmYXVsdCkgPT09PT0gKi9cbiAgICAgICAgLyogQm9yZGVyICYgQ29udGFpbmVyICovXG4gICAgICAgIC0tYXRlLWJvcmRlci1jb2xvcjogdmFyKC0tYXRlLWJvcmRlcik7XG4gICAgICAgIC0tYXRlLWJvcmRlci13aWR0aDogMnB4O1xuICAgICAgICAtLWF0ZS1ib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgICAgICAtLWF0ZS1mb2N1cy1jb2xvcjogdmFyKC0tYXRlLXByaW1hcnkpO1xuICAgICAgICAtLWF0ZS1iYWNrZ3JvdW5kOiB2YXIoLS1hdGUtc3VyZmFjZSk7XG4gICAgICAgIC0tYXRlLXN1Yi1ib3JkZXItcmFkaXVzOiA4cHg7XG5cbiAgICAgICAgLyogQ29udGVudCAqL1xuICAgICAgICAtLWF0ZS10ZXh0LWNvbG9yOiB2YXIoLS1hdGUtdGV4dCk7XG4gICAgICAgIC0tYXRlLXBsYWNlaG9sZGVyLWNvbG9yOiB2YXIoLS1hdGUtdGV4dC1tdXRlZCk7XG4gICAgICAgIC0tYXRlLWxpbmUtaGVpZ2h0OiAxLjY7XG4gICAgICAgIC0tYXRlLWNvbnRlbnQtcGFkZGluZy1ibG9jazogMTZweDtcbiAgICAgICAgLS1hdGUtY29udGVudC1wYWRkaW5nLWlubGluZTogMTZweDtcbiAgICAgICAgLS1hdGUtY29udGVudC1ndXR0ZXI6IDBweDtcblxuICAgICAgICAvKiA9PT09PSBNRU5VUyAoU2xhc2gvQnViYmxlKSA9PT09PSAqL1xuICAgICAgICAtLWF0ZS1tZW51LWJnOiB2YXIoLS1hdGUtc3VyZmFjZSk7XG4gICAgICAgIC0tYXRlLW1lbnUtYm9yZGVyLXJhZGl1czogdmFyKC0tYXRlLWJvcmRlci1yYWRpdXMpO1xuICAgICAgICAtLWF0ZS1tZW51LWJvcmRlcjogdmFyKC0tYXRlLWJvcmRlcik7XG4gICAgICAgIC0tYXRlLW1lbnUtc2hhZG93OiAwIDEwcHggMTVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCA0cHggNnB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICAgICAgLS1hdGUtbWVudS1wYWRkaW5nOiA0cHg7XG4gICAgICAgIC0tYXRlLW1lbnUtZ2FwOiAycHg7XG5cbiAgICAgICAgLyogVG9vbGJhciAqL1xuICAgICAgICAtLWF0ZS10b29sYmFyLXBhZGRpbmc6IHZhcigtLWF0ZS1tZW51LXBhZGRpbmcpO1xuICAgICAgICAtLWF0ZS10b29sYmFyLWdhcDogdmFyKC0tYXRlLW1lbnUtZ2FwKTtcbiAgICAgICAgLS1hdGUtdG9vbGJhci1iYWNrZ3JvdW5kOiB2YXIoLS1hdGUtc3VyZmFjZS1zZWNvbmRhcnkpO1xuICAgICAgICAtLWF0ZS10b29sYmFyLWJvcmRlci1jb2xvcjogdmFyKC0tYXRlLWJvcmRlcik7XG4gICAgICAgIC0tYXRlLXRvb2xiYXItYnV0dG9uLWNvbG9yOiB2YXIoLS1hdGUtdGV4dC1zZWNvbmRhcnkpO1xuICAgICAgICAtLWF0ZS10b29sYmFyLWJ1dHRvbi1ob3Zlci1iYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgLS1hdGUtdG9vbGJhci1idXR0b24tYWN0aXZlLWJhY2tncm91bmQ6IHZhcigtLWF0ZS1wcmltYXJ5LWxpZ2h0KTtcbiAgICAgICAgLS1hdGUtdG9vbGJhci1idXR0b24tYWN0aXZlLWNvbG9yOiB2YXIoLS1hdGUtcHJpbWFyeSk7XG5cbiAgICAgICAgLyogQ291bnRlciAqL1xuICAgICAgICAtLWF0ZS1jb3VudGVyLWNvbG9yOiB2YXIoLS1hdGUtdGV4dC1zZWNvbmRhcnkpO1xuICAgICAgICAtLWF0ZS1jb3VudGVyLWJhY2tncm91bmQ6IHZhcigtLWF0ZS1zdXJmYWNlLXNlY29uZGFyeSk7XG4gICAgICAgIC0tYXRlLWNvdW50ZXItYm9yZGVyLWNvbG9yOiB2YXIoLS1hdGUtYm9yZGVyKTtcblxuICAgICAgICAvKiBEcmFnICYgRHJvcCAqL1xuICAgICAgICAtLWF0ZS1kcmFnLWJhY2tncm91bmQ6ICNmMGY4ZmY7XG4gICAgICAgIC0tYXRlLWRyYWctYm9yZGVyLWNvbG9yOiB2YXIoLS1hdGUtcHJpbWFyeSk7XG5cbiAgICAgICAgLyogQmxvY2txdW90ZSAqL1xuICAgICAgICAtLWF0ZS1ibG9ja3F1b3RlLWJvcmRlci1jb2xvcjogdmFyKC0tYXRlLWJvcmRlcik7XG4gICAgICAgIC0tYXRlLWJsb2NrcXVvdGUtYmFja2dyb3VuZDogdmFyKC0tYXRlLXN1cmZhY2Utc2Vjb25kYXJ5KTtcblxuICAgICAgICAvKiBDb2RlICovXG4gICAgICAgIC0tYXRlLWNvZGUtYmFja2dyb3VuZDogdmFyKC0tYXRlLXN1cmZhY2Utc2Vjb25kYXJ5KTtcbiAgICAgICAgLS1hdGUtY29kZS1jb2xvcjogdmFyKC0tYXRlLXRleHQpO1xuICAgICAgICAtLWF0ZS1jb2RlLWJvcmRlci1jb2xvcjogdmFyKC0tYXRlLWJvcmRlcik7XG5cbiAgICAgICAgLS1hdGUtY29kZS1ibG9jay1iYWNrZ3JvdW5kOiAjMGYxNzJhO1xuICAgICAgICAtLWF0ZS1jb2RlLWJsb2NrLWNvbG9yOiAjZTJlOGYwO1xuICAgICAgICAtLWF0ZS1jb2RlLWJsb2NrLWJvcmRlci1jb2xvcjogdmFyKC0tYXRlLWJvcmRlcik7XG5cbiAgICAgICAgLyogSW1hZ2VzICovXG4gICAgICAgIC0tYXRlLWltYWdlLWJvcmRlci1yYWRpdXM6IDE2cHg7XG4gICAgICAgIC0tYXRlLWltYWdlLXNlbGVjdGVkLWNvbG9yOiB2YXIoLS1hdGUtcHJpbWFyeSk7XG5cbiAgICAgICAgLyogU2Nyb2xsYmFycyAqL1xuICAgICAgICAtLWF0ZS1zY3JvbGxiYXItd2lkdGg6IDEwcHg7XG4gICAgICAgIC0tYXRlLXNjcm9sbGJhci10aHVtYjogdmFyKC0tYXRlLWJvcmRlcik7XG4gICAgICAgIC0tYXRlLXNjcm9sbGJhci10aHVtYi1ob3ZlcjogdmFyKC0tYXRlLXRleHQtbXV0ZWQpO1xuICAgICAgICAtLWF0ZS1zY3JvbGxiYXItdHJhY2s6IHRyYW5zcGFyZW50O1xuXG4gICAgICAgIC8qIFRhYmxlcyAqL1xuICAgICAgICAtLWF0ZS10YWJsZS1ib3JkZXItY29sb3I6IHZhcigtLWF0ZS1ib3JkZXIpO1xuICAgICAgICAtLWF0ZS10YWJsZS1oZWFkZXItYmFja2dyb3VuZDogdmFyKC0tYXRlLXN1cmZhY2Utc2Vjb25kYXJ5KTtcbiAgICAgICAgLS1hdGUtdGFibGUtaGVhZGVyLWNvbG9yOiB2YXIoLS1hdGUtdGV4dCk7XG4gICAgICAgIC0tYXRlLXRhYmxlLWNlbGwtYmFja2dyb3VuZDogdmFyKC0tYXRlLXN1cmZhY2UpO1xuICAgICAgICAtLWF0ZS10YWJsZS1jZWxsLXNlbGVjdGVkLWJhY2tncm91bmQ6IHZhcigtLWF0ZS1wcmltYXJ5LWxpZ2h0KTtcbiAgICAgICAgLS1hdGUtdGFibGUtcmVzaXplLWhhbmRsZS1jb2xvcjogdmFyKC0tYXRlLXByaW1hcnkpO1xuICAgICAgICAtLWF0ZS10YWJsZS1yb3ctaG92ZXItYmFja2dyb3VuZDogdmFyKC0tYXRlLXByaW1hcnktbGlnaHRlcik7XG5cbiAgICAgICAgLyogRmxvYXRpbmcgVUkgJiBUb29sdGlwcyAqL1xuICAgICAgICAtLWF0ZS10b29sdGlwLWJnOiB2YXIoLS1hdGUtY29kZS1ibG9jay1iYWNrZ3JvdW5kLCAjMGYxNzJhKTtcbiAgICAgICAgLS1hdGUtdG9vbHRpcC1jb2xvcjogdmFyKC0tYXRlLWNvZGUtYmxvY2stY29sb3IsICNlMmU4ZjApO1xuICAgICAgfVxuXG4gICAgICAvKiBNYW51YWwgZGFyayBtb2RlIHdpdGggY2xhc3Mgb3IgZGF0YSBhdHRyaWJ1dGUgKi9cbiAgICAgIDpob3N0KC5kYXJrKSxcbiAgICAgIDpob3N0KFtkYXRhLXRoZW1lPVwiZGFya1wiXSkge1xuICAgICAgICAvKiA9PT09PSBEQVJLIEJBU0UgVE9LRU5TID09PT09ICovXG4gICAgICAgIC0tYXRlLXByaW1hcnk6ICMzYjgyZjY7XG4gICAgICAgIC0tYXRlLXByaW1hcnktY29udHJhc3Q6ICNmZmZmZmY7XG4gICAgICAgIC0tYXRlLXByaW1hcnktbGlnaHQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hdGUtcHJpbWFyeSksIHRyYW5zcGFyZW50IDg1JSk7XG4gICAgICAgIC0tYXRlLXByaW1hcnktbGlnaHRlcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWF0ZS1wcmltYXJ5KSwgdHJhbnNwYXJlbnQgOTIlKTtcbiAgICAgICAgLS1hdGUtcHJpbWFyeS1saWdodC1hbHBoYTogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWF0ZS1wcmltYXJ5KSwgdHJhbnNwYXJlbnQgODAlKTtcblxuICAgICAgICAtLWF0ZS1zdXJmYWNlOiAjMDIwNjE3O1xuICAgICAgICAtLWF0ZS1zdXJmYWNlLXNlY29uZGFyeTogIzBmMTcyYTtcbiAgICAgICAgLS1hdGUtc3VyZmFjZS10ZXJ0aWFyeTogIzFlMjkzYjtcblxuICAgICAgICAtLWF0ZS10ZXh0OiAjZjhmYWZjO1xuICAgICAgICAtLWF0ZS10ZXh0LXNlY29uZGFyeTogIzk0YTNiODtcbiAgICAgICAgLS1hdGUtdGV4dC1tdXRlZDogIzY0NzQ4YjtcblxuICAgICAgICAtLWF0ZS1ib3JkZXI6ICMxZTI5M2I7XG5cbiAgICAgICAgLS1hdGUtaGlnaGxpZ2h0LWJnOiAjODU0ZDBlO1xuICAgICAgICAtLWF0ZS1oaWdobGlnaHQtY29sb3I6ICNmZWYwOGE7XG5cbiAgICAgICAgLS1hdGUtYnV0dG9uLWhvdmVyOiAjMWUyOTNiO1xuICAgICAgICAtLWF0ZS1idXR0b24tYWN0aXZlOiAjMGYxNzJhO1xuXG4gICAgICAgIC8qID09PT09IE1FTlVTIChTbGFzaC9CdWJibGUpID09PT09ICovXG4gICAgICAgIC0tYXRlLW1lbnUtYm9yZGVyOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7XG4gICAgICAgIC0tYXRlLW1lbnUtc2hhZG93OiAwIDIwcHggMjVweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4zKSwgMCAxMHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMik7XG5cbiAgICAgICAgLS1hdGUtZXJyb3ItY29sb3I6ICNmODcxNzE7XG4gICAgICAgIC0tYXRlLWVycm9yLWJnOiAjNDUwYTBhO1xuICAgICAgICAtLWF0ZS1lcnJvci1ib3JkZXI6ICM3ZjFkMWQ7XG5cbiAgICAgICAgLyogPT09PT0gREFSSyBDT01QT05FTlQgT1ZFUlJJREVTID09PT09ICovXG4gICAgICAgIC0tYXRlLWRyYWctYmFja2dyb3VuZDogdmFyKC0tYXRlLXN1cmZhY2UtdGVydGlhcnkpO1xuICAgICAgICAtLWF0ZS1kcmFnLWJvcmRlci1jb2xvcjogdmFyKC0tYXRlLXByaW1hcnkpO1xuICAgICAgICAtLWF0ZS1ibG9ja3F1b3RlLWJvcmRlci1jb2xvcjogdmFyKC0tYXRlLXByaW1hcnkpO1xuICAgICAgICAtLWF0ZS10b29sYmFyLWJ1dHRvbi1hY3RpdmUtYmFja2dyb3VuZDogdmFyKC0tYXRlLXByaW1hcnktbGlnaHQpO1xuICAgICAgICAtLWF0ZS10b29sYmFyLWJ1dHRvbi1hY3RpdmUtY29sb3I6IHZhcigtLWF0ZS1wcmltYXJ5KTtcbiAgICAgICAgLS1hdGUtYnV0dG9uLWhvdmVyOiB2YXIoLS1hdGUtc3VyZmFjZS10ZXJ0aWFyeSk7XG4gICAgICAgIC0tYXRlLWJ1dHRvbi1hY3RpdmU6IHZhcigtLWF0ZS1zdXJmYWNlLXNlY29uZGFyeSk7XG4gICAgICAgIC0tYXRlLXNjcm9sbGJhci10aHVtYjogdmFyKC0tYXRlLXN1cmZhY2UtdGVydGlhcnkpO1xuICAgICAgICAtLWF0ZS1zY3JvbGxiYXItdGh1bWItaG92ZXI6IHZhcigtLWF0ZS10ZXh0LW11dGVkKTtcbiAgICAgIH1cblxuICAgICAgLyogSG9zdCBzdHlsZXMgcG91ciBmaWxsQ29udGFpbmVyICovXG4gICAgICA6aG9zdCguZmlsbC1jb250YWluZXIpIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgLyogTWFpbiBlZGl0b3IgY29udGFpbmVyICovXG4gICAgICAuYXRlLWVkaXRvciB7XG4gICAgICAgIGJvcmRlcjogdmFyKC0tYXRlLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tYXRlLWJvcmRlci1jb2xvcik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWF0ZS1ib3JkZXItcmFkaXVzKTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLWJhY2tncm91bmQpO1xuICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMnMgZWFzZTtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgfVxuXG4gICAgICAvKiBGbG9hdGluZyBUb29sYmFyIE1vZGUgKi9cbiAgICAgIDpob3N0KC5mbG9hdGluZy10b29sYmFyKSAuYXRlLWVkaXRvciB7XG4gICAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgICAgfVxuXG4gICAgICAvKiBGaWxsIGNvbnRhaW5lciBtb2RlIC0gZWRpdG9yIGZpbGxzIGl0cyBwYXJlbnQgKi9cbiAgICAgIDpob3N0KC5maWxsLWNvbnRhaW5lcikgLmF0ZS1lZGl0b3Ige1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9XG5cbiAgICAgIDpob3N0KC5maWxsLWNvbnRhaW5lcikgLmF0ZS1jb250ZW50LXdyYXBwZXIge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCguZmlsbC1jb250YWluZXIpIC5hdGUtY29udGVudCB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgICB9XG5cbiAgICAgIC5hdGUtZWRpdG9yOmZvY3VzLXdpdGhpbiB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tYXRlLWZvY3VzLWNvbG9yKTtcbiAgICAgIH1cblxuICAgICAgLyogRWRpdG9yIGNvbnRlbnQgYXJlYSAqL1xuICAgICAgLmF0ZS1jb250ZW50IHtcbiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tZWRpdG9yLW1pbi1oZWlnaHQsIDIwMHB4KTtcbiAgICAgICAgaGVpZ2h0OiB2YXIoLS1lZGl0b3ItaGVpZ2h0LCBhdXRvKTtcbiAgICAgICAgbWF4LWhlaWdodDogdmFyKC0tZWRpdG9yLW1heC1oZWlnaHQsIG5vbmUpO1xuICAgICAgICBvdmVyZmxvdy15OiB2YXIoLS1lZGl0b3Itb3ZlcmZsb3csIHZpc2libGUpO1xuICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjtcbiAgICAgICAgc2Nyb2xsYmFyLWNvbG9yOiB2YXIoLS1hdGUtc2Nyb2xsYmFyLXRodW1iKSB2YXIoLS1hdGUtc2Nyb2xsYmFyLXRyYWNrKTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QoLmlzLWRpc2FibGVkKSAuYXRlLWNvbnRlbnQge1xuICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYXRlLXN1cmZhY2UtdGVydGlhcnkpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCguaXMtcmVhZG9ubHkpIC5hdGUtY29udGVudCB7XG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgdXNlci1zZWxlY3Q6IHRleHQ7XG4gICAgICB9XG5cbiAgICAgIDpob3N0KC5pcy1yZWFkb25seSkgLmF0ZS1jb250ZW50IDo6bmctZGVlcCAuYXRlLWxpbmsge1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgICAgfVxuXG4gICAgICAuYXRlLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICAgICAgd2lkdGg6IHZhcigtLWF0ZS1zY3JvbGxiYXItd2lkdGgpO1xuICAgICAgfVxuXG4gICAgICAuYXRlLWNvbnRlbnQtd3JhcHBlciB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIH1cblxuICAgICAgLmF0ZS1jb250ZW50LXdyYXBwZXIgLmF0ZS1jb250ZW50IHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgIH1cblxuICAgICAgLmF0ZS1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS1zY3JvbGxiYXItdHJhY2spO1xuICAgICAgfVxuXG4gICAgICAuYXRlLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXNjcm9sbGJhci10aHVtYik7XG4gICAgICAgIGJvcmRlcjogM3B4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgICBiYWNrZ3JvdW5kLWNsaXA6IGNvbnRlbnQtYm94O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAgICAgfVxuXG4gICAgICAuYXRlLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXNjcm9sbGJhci10aHVtYi1ob3Zlcik7XG4gICAgICAgIGJhY2tncm91bmQtY2xpcDogY29udGVudC1ib3g7XG4gICAgICB9XG5cbiAgICAgIC5hdGUtY29udGVudC5kcmFnLW92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtZHJhZy1iYWNrZ3JvdW5kKTtcbiAgICAgICAgYm9yZGVyOiAycHggZGFzaGVkIHZhcigtLWF0ZS1kcmFnLWJvcmRlci1jb2xvcik7XG4gICAgICB9XG5cbiAgICAgIC8qIENvbXB0ZXVyIGRlIGNhcmFjdMOocmVzICovXG4gICAgICAuY2hhcmFjdGVyLWNvdW50IHtcbiAgICAgICAgcGFkZGluZzogNnB4IDhweDtcbiAgICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgICBjb2xvcjogdmFyKC0tYXRlLWNvdW50ZXItY29sb3IpO1xuICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWF0ZS1jb3VudGVyLWJvcmRlci1jb2xvcik7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS1jb3VudGVyLWJhY2tncm91bmQpO1xuICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzIGVhc2U7XG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IGNhbGModmFyKC0tYXRlLWJvcmRlci1yYWRpdXMpIC0gdmFyKC0tYXRlLWJvcmRlci13aWR0aCkpO1xuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogY2FsYyh2YXIoLS1hdGUtYm9yZGVyLXJhZGl1cykgLSB2YXIoLS1hdGUtYm9yZGVyLXdpZHRoKSk7XG4gICAgICB9XG5cbiAgICAgIC5jaGFyYWN0ZXItY291bnQubGltaXQtcmVhY2hlZCB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1hdGUtZXJyb3ItY29sb3IsICNlZjQ0NDQpO1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgfVxuXG4gICAgICA6aG9zdC5hdGUtYmxvY2tzLWluc2lkZSB7XG4gICAgICAgIC0tYXRlLWNvbnRlbnQtZ3V0dGVyOiA1NHB4O1xuICAgICAgfVxuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAgICAgOmhvc3QuYXRlLWJsb2Nrcy1pbnNpZGUge1xuICAgICAgICAgIC0tYXRlLWNvbnRlbnQtZ3V0dGVyOiAwcHg7XG4gICAgICAgIH1cblxuICAgICAgICBhdGUtYmxvY2stY29udHJvbHMge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKiBTdHlsZXMgUHJvc2VNaXJyb3IgYXZlYyA6aG9zdCA6Om5nLWRlZXAgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3Ige1xuICAgICAgICBwYWRkaW5nLWlubGluZTogY2FsYyh2YXIoLS1hdGUtY29udGVudC1wYWRkaW5nLWlubGluZSkgKyB2YXIoLS1hdGUtY29udGVudC1ndXR0ZXIpKTtcbiAgICAgICAgcGFkZGluZy1ibG9jazogdmFyKC0tYXRlLWNvbnRlbnQtcGFkZGluZy1ibG9jayk7XG4gICAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1hdGUtbGluZS1oZWlnaHQpO1xuICAgICAgICBjb2xvcjogdmFyKC0tYXRlLXRleHQtY29sb3IpO1xuICAgICAgICBtaW4taGVpZ2h0OiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIC8qIFMnYXNzdXJlciBxdWUgbGUgY29udGVudSBzJ8OpdGVuZCBjb3JyZWN0ZW1lbnQgZGFucyB1biBjb250ZW5ldXIgc2Nyb2xsYWJsZSAqL1xuICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgOjpzZWxlY3Rpb24ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hdGUtc2VsZWN0aW9uLWJnKTtcbiAgICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgOjotbW96LXNlbGVjdGlvbiB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWF0ZS1zZWxlY3Rpb24tYmcpO1xuICAgICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICAgIH1cblxuICAgICAgLyogVGl0cmVzICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIGgxIHtcbiAgICAgICAgZm9udC1zaXplOiAyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBoMiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41ZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICBtYXJnaW4tdG9wOiAxZW07XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDAuNWVtO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIGgzIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1ZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICBtYXJnaW4tdG9wOiAxZW07XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDAuNWVtO1xuICAgICAgfVxuXG4gICAgICAvKiBQYXJhZ3JhcGhlcyBldCBsaXN0ZXMgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgcCB7XG4gICAgICAgIG1hcmdpbjogMC41ZW0gMDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB1bCxcbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3Igb2wge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDJlbTtcbiAgICAgICAgbWFyZ2luOiAwLjVlbSAwO1xuICAgICAgfVxuXG4gICAgICAvKiBDaXRhdGlvbnMgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgYmxvY2txdW90ZSB7XG4gICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdmFyKC0tYXRlLWJsb2NrcXVvdGUtYm9yZGVyLWNvbG9yKTtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAxZW07XG4gICAgICAgIG1hcmdpbjogMWVtIDA7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS1ibG9ja3F1b3RlLWJhY2tncm91bmQpO1xuICAgICAgICBwYWRkaW5nOiAwLjVlbSAxZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAgNHB4IDRweCAwO1xuICAgICAgfVxuXG4gICAgICAvKiBDb2RlICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIGNvZGUge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtY29kZS1iYWNrZ3JvdW5kKTtcbiAgICAgICAgY29sb3I6IHZhcigtLWF0ZS1jb2RlLWNvbG9yKTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYXRlLWNvZGUtYm9yZGVyLWNvbG9yKTtcbiAgICAgICAgcGFkZGluZzogMC4xNWVtIDAuNGVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIkpldEJyYWlucyBNb25vXCIsIFwiRmlyYSBDb2RlXCIsIFwiTW9uYWNvXCIsIFwiQ29uc29sYXNcIiwgbW9ub3NwYWNlO1xuICAgICAgICBmb250LXNpemU6IDAuODVlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBwcmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtY29kZS1ibG9jay1iYWNrZ3JvdW5kKTtcbiAgICAgICAgY29sb3I6IHZhcigtLWF0ZS1jb2RlLWJsb2NrLWNvbG9yKTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYXRlLWNvZGUtYmxvY2stYm9yZGVyLWNvbG9yKTtcbiAgICAgICAgcGFkZGluZzogMWVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1hdGUtYm9yZGVyLXJhZGl1cyk7XG4gICAgICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgICAgIG1hcmdpbjogMWVtIDA7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgcHJlIGNvZGUge1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgfVxuXG4gICAgICAvKiBQbGFjZWhvbGRlciAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBwLmlzLWVkaXRvci1lbXB0eTpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogYXR0cihkYXRhLXBsYWNlaG9sZGVyKTtcbiAgICAgICAgY29sb3I6IHZhcigtLWF0ZS1wbGFjZWhvbGRlci1jb2xvcik7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgaGVpZ2h0OiAwO1xuICAgICAgfVxuXG4gICAgICAvKiBNb2RlIGxlY3R1cmUgc2V1bGUgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3JbY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIl0ge1xuICAgICAgICAvKiBBbGxvdyBpbnRlcmFjdGlvbiBpbiByZWFkLW9ubHkgbW9kZSAobGlua3MsIG5vZGUgc2VsZWN0aW9uKSAqL1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yW2NvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJdIGltZyB7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvcltjb250ZW50ZWRpdGFibGU9XCJmYWxzZVwiXSBhIHtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yW2NvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJdIGltZzpob3ZlciB7XG4gICAgICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvcltjb250ZW50ZWRpdGFibGU9XCJmYWxzZVwiXSBpbWcuUHJvc2VNaXJyb3Itc2VsZWN0ZWRub2RlIHtcbiAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgIH1cblxuICAgICAgLyogU3R5bGVzIHBvdXIgbGVzIGltYWdlcyAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBpbWcge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcbiAgICAgICAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWF0ZS1pbWFnZS1ib3JkZXItcmFkaXVzKTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBpbWc6aG92ZXIge1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWF0ZS1ib3JkZXItY29sb3IpO1xuICAgICAgICBib3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIGltZy5Qcm9zZU1pcnJvci1zZWxlY3RlZG5vZGUsXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6YWJsZS1pbWFnZS1jb250YWluZXIuc2VsZWN0ZWQgaW1nIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1hdGUtaW1hZ2Utc2VsZWN0ZWQtY29sb3IpO1xuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlO1xuICAgICAgfVxuXG4gICAgICAvKiBBbGlnbm1lbnQgU3VwcG9ydCAoUHJvc2VNaXJyb3IgLyBBVEUgV3JhcHBlcikgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgW2RhdGEtdGV4dC1hbGlnbj1cImNlbnRlclwiXSxcbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgW2RhdGEtYWxpZ249XCJjZW50ZXJcIl0ge1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgW2RhdGEtdGV4dC1hbGlnbj1cInJpZ2h0XCJdLFxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciBbZGF0YS1hbGlnbj1cInJpZ2h0XCJdIHtcbiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgW2RhdGEtdGV4dC1hbGlnbj1cImxlZnRcIl0sXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIFtkYXRhLWFsaWduPVwibGVmdFwiXSB7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICB9XG5cbiAgICAgIC8qIENvbnRlbmV1ciBwb3VyIGxlcyBpbWFnZXMgcmVkaW1lbnNpb25uYWJsZXMgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAucmVzaXphYmxlLWltYWdlLXdyYXBwZXIge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1hcmdpbjogMC41ZW0gMDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5yZXNpemFibGUtaW1hZ2UtY29udGFpbmVyIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgLyogQ29udGVuZXVyIGRlcyBjb250csO0bGVzIGRlIHJlZGltZW5zaW9ubmVtZW50ICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6ZS1jb250cm9scyB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgei1pbmRleDogMTAwMDtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2U7XG4gICAgICB9XG5cbiAgICAgIC8qIEFmZmljaGVyIGxlcyBwb2lnbsOpZXMgYXUgaG92ZXIgKG3Dqm1lIHNpIG5vbiBzw6lsZWN0aW9ubsOpKSAtIFVuaXF1ZW1lbnQgc2kgw6lkaXRhYmxlICovXG4gICAgICA6aG9zdDpub3QoLmlzLXJlYWRvbmx5KTpub3QoLmlzLWRpc2FibGVkKVxuICAgICAgICA6Om5nLWRlZXBcbiAgICAgICAgLnJlc2l6YWJsZS1pbWFnZS1jb250YWluZXI6aG92ZXJcbiAgICAgICAgLnJlc2l6ZS1jb250cm9scyxcbiAgICAgIDpob3N0Om5vdCguaXMtcmVhZG9ubHkpOm5vdCguaXMtZGlzYWJsZWQpIDo6bmctZGVlcCBib2R5LnJlc2l6aW5nIC5yZXNpemUtY29udHJvbHMge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuXG4gICAgICAvKiBQb2lnbsOpZXMgZGUgcmVkaW1lbnNpb25uZW1lbnQgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAucmVzaXplLWhhbmRsZSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgd2lkdGg6IDAuMzVyZW07XG4gICAgICAgIGhlaWdodDogMnJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXByaW1hcnkpO1xuICAgICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1hdGUtc3VyZmFjZSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWF0ZS1ib3JkZXItcmFkaXVzKTtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IGFsbDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB6LWluZGV4OiAxMDAxO1xuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAycHggNnB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5yZXNpemUtaGFuZGxlOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXByaW1hcnkpO1xuICAgICAgICBib3gtc2hhZG93OiAwIDNweCA4cHggcmdiYSgwLCAwLCAwLCAwLjMpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6ZS1oYW5kbGU6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXByaW1hcnkpO1xuICAgICAgfVxuXG4gICAgICAvKiBQb2lnbsOpZXMgZGVzIGPDtHTDqXMgYXZlYyBzY2FsZSBzw6lwYXLDqSBwb3VyIGNlbnRyYWdlICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6ZS1oYW5kbGUtdzpob3ZlcixcbiAgICAgIDpob3N0IDo6bmctZGVlcCAucmVzaXplLWhhbmRsZS1lOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXByaW1hcnktaG92ZXIpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6ZS1oYW5kbGUtdzphY3RpdmUsXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6ZS1oYW5kbGUtZTphY3RpdmUge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSkgc2NhbGUoMC45KTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXByaW1hcnktaG92ZXIpO1xuICAgICAgfVxuXG4gICAgICAvKiBQb3NpdGlvbnMgc3DDqWNpZmlxdWVzIHBvdXIgY2hhcXVlIHBvaWduw6llICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6ZS1oYW5kbGUtdyB7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICBsZWZ0OiAwLjM1cmVtO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgIGN1cnNvcjogdy1yZXNpemU7XG4gICAgICB9XG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6ZS1oYW5kbGUtZSB7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICByaWdodDogMC4zNXJlbTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgICBjdXJzb3I6IGUtcmVzaXplO1xuICAgICAgfVxuXG4gICAgICAvKiBTdHlsZXMgcG91ciBsZSByZWRpbWVuc2lvbm5lbWVudCBlbiBjb3VycyAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIGJvZHkucmVzaXppbmcge1xuICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgY3Vyc29yOiBjcm9zc2hhaXI7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCBib2R5LnJlc2l6aW5nIC5Qcm9zZU1pcnJvciB7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgYm9keS5yZXNpemluZyAuUHJvc2VNaXJyb3IgLnJlc2l6YWJsZS1pbWFnZS1jb250YWluZXIge1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIH1cblxuICAgICAgLyogU3R5bGVzIHBvdXIgbGVzIGluZm9ybWF0aW9ucyBkZSB0YWlsbGUgZCdpbWFnZSAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5pbWFnZS1zaXplLWluZm8ge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJvdHRvbTogLTIwcHg7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOCk7XG4gICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgICAgcGFkZGluZzogMnB4IDZweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICBmb250LXNpemU6IDExcHg7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlO1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLnJlc2l6YWJsZS1pbWFnZS1jb250YWluZXI6aG92ZXIgLmltYWdlLXNpemUtaW5mbyB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB9XG4gICAgICAvKiBTdHlsZXMgcG91ciBsZXMgdGFibGVzICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIHtcbiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTtcbiAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgdGFibGUtbGF5b3V0OiBmaXhlZDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSB0ZCxcbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgdGFibGUgdGgge1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLWF0ZS10YWJsZS1ib3JkZXItY29sb3IpO1xuICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYXRlLXRhYmxlLWJvcmRlci1jb2xvcik7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIG1pbi13aWR0aDogMWVtO1xuICAgICAgICBwYWRkaW5nOiA4cHggMTJweDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIHRkIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXRhYmxlLWNlbGwtYmFja2dyb3VuZCk7XG4gICAgICB9XG5cbiAgICAgIC8qIEFqb3V0ZXIgbGVzIGJvcmR1cmVzIGV4dGVybmVzIG1hbnF1YW50ZXMgcG91ciBmb3JtZXIgbGEgYm9yZHVyZSBkdSB0YWJsZWF1ICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIHRkOmZpcnN0LWNoaWxkLFxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSB0aDpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tYXRlLXRhYmxlLWJvcmRlci1jb2xvcik7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgdGFibGUgdHI6Zmlyc3QtY2hpbGQgdGQsXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIHRyOmZpcnN0LWNoaWxkIHRoIHtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWF0ZS10YWJsZS1ib3JkZXItY29sb3IpO1xuICAgICAgfVxuXG4gICAgICAvKiBDb2lucyBhcnJvbmRpcyAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDhweDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDhweDtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogOHB4O1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA4cHg7XG4gICAgICB9XG5cbiAgICAgIC8qIEVuLXTDqnRlcyBkZSB0YWJsZSAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSB0aCB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS10YWJsZS1oZWFkZXItYmFja2dyb3VuZCk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1hdGUtdGFibGUtaGVhZGVyLWNvbG9yKTtcbiAgICAgIH1cblxuICAgICAgLyogQ2VsbHVsZXMgc8OpbGVjdGlvbm7DqWVzICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIC5zZWxlY3RlZENlbGw6YWZ0ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtdGFibGUtY2VsbC1zZWxlY3RlZC1iYWNrZ3JvdW5kKTtcbiAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB6LWluZGV4OiAyO1xuICAgICAgfVxuXG4gICAgICAvKiBQb2lnbsOpZXMgZGUgcmVkaW1lbnNpb25uZW1lbnQgKi9cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgdGFibGUgLmNvbHVtbi1yZXNpemUtaGFuZGxlIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogLTJweDtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIHdpZHRoOiA0cHg7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWF0ZS10YWJsZS1yZXNpemUtaGFuZGxlLWNvbG9yKTtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2U7XG4gICAgICB9XG5cbiAgICAgIDpob3N0IDo6bmctZGVlcCAuUHJvc2VNaXJyb3IgdGFibGU6aG92ZXIgLmNvbHVtbi1yZXNpemUtaGFuZGxlIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSAuY29sdW1uLXJlc2l6ZS1oYW5kbGU6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hdGUtZm9jdXMtY29sb3IpO1xuICAgICAgfVxuXG4gICAgICAvKiBDb250YWluZXIgYXZlYyBzY3JvbGwgaG9yaXpvbnRhbCAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciAudGFibGVXcmFwcGVyIHtcbiAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgICAgbWFyZ2luOiAxZW0gMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgfVxuXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIC50YWJsZVdyYXBwZXIgdGFibGUge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgICAgbWluLXdpZHRoOiA2MDBweDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIH1cblxuICAgICAgLyogUGFyYWdyYXBoZXMgZGFucyBsZXMgdGFibGVzICovXG4gICAgICA6aG9zdCA6Om5nLWRlZXAgLlByb3NlTWlycm9yIHRhYmxlIHAge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG5cbiAgICAgIC8qIFN0eWxlcyBwb3VyIGxlcyBsaWduZXMgYXZlYyBob3ZlciAqL1xuICAgICAgOmhvc3QgOjpuZy1kZWVwIC5Qcm9zZU1pcnJvciB0YWJsZSB0Ym9keSB0cjpob3ZlciB0ZCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWF0ZS10YWJsZS1yb3ctaG92ZXItYmFja2dyb3VuZCk7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQW5ndWxhclRpcHRhcEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIC8qKiBDb25maWd1cmF0aW9uIGdsb2JhbGUgZGUgbCfDqWRpdGV1ciAqL1xuICBjb25maWcgPSBpbnB1dDxBdGVFZGl0b3JDb25maWc+KHt9KTtcblxuICBjb250ZW50ID0gaW5wdXQ8c3RyaW5nPihcIlwiKTtcbiAgcGxhY2Vob2xkZXIgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGVkaXRhYmxlID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgZGlzYWJsZWQgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBtaW5IZWlnaHQgPSBpbnB1dDxudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGhlaWdodCA9IGlucHV0PG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgbWF4SGVpZ2h0ID0gaW5wdXQ8bnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBmaWxsQ29udGFpbmVyID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgc2hvd1Rvb2xiYXIgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBzaG93Rm9vdGVyID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgc2hvd0NoYXJhY3RlckNvdW50ID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgc2hvd1dvcmRDb3VudCA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIG1heENoYXJhY3RlcnMgPSBpbnB1dDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGVuYWJsZU9mZmljZVBhc3RlID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgZW5hYmxlU2xhc2hDb21tYW5kcyA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHNsYXNoQ29tbWFuZHMgPSBpbnB1dDxBdGVTbGFzaENvbW1hbmRzQ29uZmlnIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBjdXN0b21TbGFzaENvbW1hbmRzID0gaW5wdXQ8QXRlQ3VzdG9tU2xhc2hDb21tYW5kcyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgYmxvY2tDb250cm9scyA9IGlucHV0PEF0ZUJsb2NrQ29udHJvbHNNb2RlPigpO1xuICBsb2NhbGUgPSBpbnB1dDxTdXBwb3J0ZWRMb2NhbGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGF1dG9mb2N1cyA9IGlucHV0PEF0ZUF1dG9mb2N1c01vZGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHNlYW1sZXNzID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgZmxvYXRpbmdUb29sYmFyID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgc2hvd0VkaXRUb2dnbGUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBzcGVsbGNoZWNrID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICB0aXB0YXBFeHRlbnNpb25zID0gaW5wdXQ8KEV4dGVuc2lvbiB8IE5vZGUgfCBNYXJrKVtdIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICB0aXB0YXBPcHRpb25zID0gaW5wdXQ8UGFydGlhbDxFZGl0b3JPcHRpb25zPiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAvLyBOb3V2ZWF1eCBpbnB1dHMgcG91ciBsZXMgYnViYmxlIG1lbnVzXG4gIHNob3dCdWJibGVNZW51ID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgYnViYmxlTWVudSA9IGlucHV0PFBhcnRpYWw8QXRlQnViYmxlTWVudUNvbmZpZz4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHNob3dJbWFnZUJ1YmJsZU1lbnUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBpbWFnZUJ1YmJsZU1lbnUgPSBpbnB1dDxQYXJ0aWFsPEF0ZUltYWdlQnViYmxlTWVudUNvbmZpZz4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgLy8gQ29uZmlndXJhdGlvbiBkZSBsYSB0b29sYmFyXG4gIHRvb2xiYXIgPSBpbnB1dDxQYXJ0aWFsPEF0ZVRvb2xiYXJDb25maWc+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIC8vIENvbmZpZ3VyYXRpb24gZGVzIG1lbnVzIGRlIHRhYmxlXG4gIHNob3dUYWJsZUJ1YmJsZU1lbnUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICB0YWJsZUJ1YmJsZU1lbnUgPSBpbnB1dDxQYXJ0aWFsPEF0ZVRhYmxlQnViYmxlTWVudUNvbmZpZz4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHNob3dDZWxsQnViYmxlTWVudSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGNlbGxCdWJibGVNZW51ID0gaW5wdXQ8UGFydGlhbDxBdGVDZWxsQnViYmxlTWVudUNvbmZpZz4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9ubmFsIHN0YXRlIGNhbGN1bGF0b3JzIHRvIGV4dGVuZCB0aGUgcmVhY3RpdmUgZWRpdG9yIHN0YXRlLlxuICAgKi9cbiAgc3RhdGVDYWxjdWxhdG9ycyA9IGlucHV0PEF0ZVN0YXRlQ2FsY3VsYXRvcltdIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIC8vIE5vdXZlYXUgaW5wdXQgcG91ciBsYSBjb25maWd1cmF0aW9uIGRlIGwndXBsb2FkIGQnaW1hZ2VzXG4gIGltYWdlVXBsb2FkID0gaW5wdXQ8UGFydGlhbDxBdGVJbWFnZVVwbG9hZE9wdGlvbnM+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gaGFuZGxlciBmb3IgaW1hZ2UgdXBsb2Fkcy5cbiAgICogV2hlbiBwcm92aWRlZCwgaW1hZ2VzIHdpbGwgYmUgcHJvY2Vzc2VkIHRocm91Z2ggdGhpcyBoYW5kbGVyIGluc3RlYWQgb2YgYmVpbmcgY29udmVydGVkIHRvIGJhc2U2NC5cbiAgICogVGhpcyBhbGxvd3MgeW91IHRvIHVwbG9hZCBpbWFnZXMgdG8geW91ciBvd24gc2VydmVyL3N0b3JhZ2UgYW5kIHVzZSB0aGUgcmV0dXJuZWQgVVJMLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIG15VXBsb2FkSGFuZGxlcjogSW1hZ2VVcGxvYWRIYW5kbGVyID0gYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICogICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgKiAgIGZvcm1EYXRhLmFwcGVuZCgnaW1hZ2UnLCBjb250ZXh0LmZpbGUpO1xuICAgKiAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJy9hcGkvdXBsb2FkJywgeyBtZXRob2Q6ICdQT1NUJywgYm9keTogZm9ybURhdGEgfSk7XG4gICAqICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICogICByZXR1cm4geyBzcmM6IGRhdGEuaW1hZ2VVcmwgfTtcbiAgICogfTtcbiAgICpcbiAgICogLy8gSW4gdGVtcGxhdGU6XG4gICAqIC8vIDxhbmd1bGFyLXRpcHRhcC1lZGl0b3IgW2ltYWdlVXBsb2FkSGFuZGxlcl09XCJteVVwbG9hZEhhbmRsZXJcIiAvPlxuICAgKiBgYGBcbiAgICovXG4gIGltYWdlVXBsb2FkSGFuZGxlciA9IGlucHV0PEF0ZUltYWdlVXBsb2FkSGFuZGxlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBlZGl0b3IgaW5zdGFuY2UgaW4gdGhlIHJlZ2lzdHJ5LlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBhIHVuaXF1ZSBJRCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC5cbiAgICovXG4gIGVkaXRvcklkID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIC8vIE5vdXZlYXV4IG91dHB1dHNcbiAgY29udGVudENoYW5nZSA9IG91dHB1dDxzdHJpbmc+KCk7XG4gIGVkaXRvckNyZWF0ZWQgPSBvdXRwdXQ8RWRpdG9yPigpO1xuICBlZGl0b3JVcGRhdGUgPSBvdXRwdXQ8eyBlZGl0b3I6IEVkaXRvcjsgdHJhbnNhY3Rpb246IHVua25vd24gfT4oKTtcbiAgZWRpdG9yRm9jdXMgPSBvdXRwdXQ8eyBlZGl0b3I6IEVkaXRvcjsgZXZlbnQ6IEZvY3VzRXZlbnQgfT4oKTtcbiAgZWRpdG9yQmx1ciA9IG91dHB1dDx7IGVkaXRvcjogRWRpdG9yOyBldmVudDogRm9jdXNFdmVudCB9PigpO1xuICBlZGl0YWJsZUNoYW5nZSA9IG91dHB1dDxib29sZWFuPigpO1xuXG4gIC8vIFZpZXdDaGlsZCB3aXRoIHNpZ25hbFxuICBlZGl0b3JFbGVtZW50ID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KFwiZWRpdG9yRWxlbWVudFwiKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBUb29sYmFyIC8gQnViYmxlIE1lbnUgQ29vcmRpbmF0aW9uXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIGhpZGVCdWJibGVNZW51cygpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS5zZXRUb29sYmFySW50ZXJhY3RpbmcodHJ1ZSk7XG4gIH1cblxuICBzaG93QnViYmxlTWVudXMoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0b3JDb21tYW5kc1NlcnZpY2Uuc2V0VG9vbGJhckludGVyYWN0aW5nKGZhbHNlKTtcbiAgfVxuXG4gIC8vIFByaXZhdGUgc2lnbmFscyBmb3IgaW50ZXJuYWwgc3RhdGVcbiAgcHJpdmF0ZSBfZWRpdG9yID0gc2lnbmFsPEVkaXRvciB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIF9jaGFyYWN0ZXJDb3VudCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcml2YXRlIF93b3JkQ291bnQgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSBfaXNEcmFnT3ZlciA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgX2VkaXRvckZ1bGx5SW5pdGlhbGl6ZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIF9ob3ZlcmVkQmxvY2sgPSBzaWduYWw8eyBub2RlOiBQTU5vZGU7IGVsZW1lbnQ6IEhUTUxFbGVtZW50OyBwb3M6IG51bWJlciB9IHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gQW50aS1lY2hvOiB0cmFjayBsYXN0IGVtaXR0ZWQgSFRNTCB0byBwcmV2ZW50IGN1cnNvciByZXNldCBvbiBwYXJlbnQgZWNob1xuICBwcml2YXRlIGxhc3RFbWl0dGVkSHRtbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gUmVhZC1vbmx5IGFjY2VzcyB0byBzaWduYWxzXG4gIHJlYWRvbmx5IGVkaXRvciA9IHRoaXMuX2VkaXRvci5hc1JlYWRvbmx5KCk7XG4gIHJlYWRvbmx5IGNoYXJhY3RlckNvdW50ID0gdGhpcy5fY2hhcmFjdGVyQ291bnQuYXNSZWFkb25seSgpO1xuICByZWFkb25seSB3b3JkQ291bnQgPSB0aGlzLl93b3JkQ291bnQuYXNSZWFkb25seSgpO1xuICByZWFkb25seSBpc0RyYWdPdmVyID0gdGhpcy5faXNEcmFnT3Zlci5hc1JlYWRvbmx5KCk7XG4gIHJlYWRvbmx5IGVkaXRvckZ1bGx5SW5pdGlhbGl6ZWQgPSB0aGlzLl9lZGl0b3JGdWxseUluaXRpYWxpemVkLmFzUmVhZG9ubHkoKTtcbiAgcmVhZG9ubHkgaG92ZXJlZEJsb2NrID0gdGhpcy5faG92ZXJlZEJsb2NrLmFzUmVhZG9ubHkoKTtcblxuICBwcml2YXRlIF9pc0Zvcm1Db250cm9sRGlzYWJsZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBpc0Zvcm1Db250cm9sRGlzYWJsZWQgPSB0aGlzLl9pc0Zvcm1Db250cm9sRGlzYWJsZWQuYXNSZWFkb25seSgpO1xuXG4gIC8vIENvbWJpbmVkIGRpc2FibGVkIHN0YXRlIChJbnB1dCArIEZvcm1Db250cm9sKVxuICByZWFkb25seSBtZXJnZWREaXNhYmxlZCA9IGNvbXB1dGVkKFxuICAgICgpID0+ICh0aGlzLmRpc2FibGVkKCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5kaXNhYmxlZCkgfHwgdGhpcy5pc0Zvcm1Db250cm9sRGlzYWJsZWQoKVxuICApO1xuXG4gIC8vIENvbXB1dGVkIGZvciBlZGl0b3Igc3RhdGVzXG4gIGlzRWRpdG9yUmVhZHkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmVkaXRvcigpICE9PSBudWxsKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBVTklGSUVEIENPTkZJR1VSQVRJT04gQ09NUFVURUQgUFJPUEVSVElFU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8vIEFwcGVhcmFuY2UgJiBGdW5kYW1lbnRhbHNcbiAgcmVhZG9ubHkgZmluYWxTZWFtbGVzcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBpbnB1dFZhbCA9IHRoaXMuc2VhbWxlc3MoKTtcbiAgICBpZiAoaW5wdXRWYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGlucHV0VmFsO1xuICAgIH1cblxuICAgIGNvbnN0IGZyb21Db25maWcgPSB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLm1vZGU7XG4gICAgcmV0dXJuIGZyb21Db25maWcgPT09IFwic2VhbWxlc3NcIjtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZmluYWxFZGl0YWJsZSA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuZWRpdGFibGUoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmVkaXRhYmxlID8/IHRydWVcbiAgKTtcbiAgcmVhZG9ubHkgZmluYWxQbGFjZWhvbGRlciA9IGNvbXB1dGVkKFxuICAgICgpID0+XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyKCkgPz9cbiAgICAgIHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkucGxhY2Vob2xkZXIgPz9cbiAgICAgIHRoaXMuY3VycmVudFRyYW5zbGF0aW9ucygpLmVkaXRvci5wbGFjZWhvbGRlclxuICApO1xuICByZWFkb25seSBmaW5hbEZpbGxDb250YWluZXIgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLmZpbGxDb250YWluZXIoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmZpbGxDb250YWluZXJcbiAgKTtcbiAgcmVhZG9ubHkgZmluYWxTaG93Rm9vdGVyID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5zaG93Rm9vdGVyKCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5zaG93Rm9vdGVyID8/IHRydWVcbiAgKTtcbiAgcmVhZG9ubHkgZmluYWxTaG93RWRpdFRvZ2dsZSA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuc2hvd0VkaXRUb2dnbGUoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLnNob3dFZGl0VG9nZ2xlID8/IGZhbHNlXG4gICk7XG5cbiAgcmVhZG9ubHkgZmluYWxIZWlnaHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgaCA9IHRoaXMuaGVpZ2h0KCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5oZWlnaHQ7XG4gICAgcmV0dXJuIHR5cGVvZiBoID09PSBcIm51bWJlclwiID8gYCR7aH1weGAgOiBoO1xuICB9KTtcbiAgcmVhZG9ubHkgZmluYWxNaW5IZWlnaHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbWggPSB0aGlzLm1pbkhlaWdodCgpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkubWluSGVpZ2h0O1xuICAgIHJldHVybiB0eXBlb2YgbWggPT09IFwibnVtYmVyXCIgPyBgJHttaH1weGAgOiBtaDtcbiAgfSk7XG4gIHJlYWRvbmx5IGZpbmFsTWF4SGVpZ2h0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG1oID0gdGhpcy5tYXhIZWlnaHQoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLm1heEhlaWdodDtcbiAgICByZXR1cm4gdHlwZW9mIG1oID09PSBcIm51bWJlclwiID8gYCR7bWh9cHhgIDogbWg7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpbmFsU3BlbGxjaGVjayA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuc3BlbGxjaGVjaygpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuc3BlbGxjaGVjayA/PyB0cnVlXG4gICk7XG4gIHJlYWRvbmx5IGZpbmFsRW5hYmxlT2ZmaWNlUGFzdGUgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLmVuYWJsZU9mZmljZVBhc3RlKCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5lbmFibGVPZmZpY2VQYXN0ZSA/PyB0cnVlXG4gICk7XG5cbiAgLy8gRmVhdHVyZXNcbiAgcmVhZG9ubHkgZmluYWxTaG93VG9vbGJhciA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuc2hvd1Rvb2xiYXIoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLnNob3dUb29sYmFyID8/IHRydWVcbiAgKTtcblxuICByZWFkb25seSBmaW5hbFRvb2xiYXJDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZnJvbUlucHV0ID0gdGhpcy50b29sYmFyKCk7XG4gICAgY29uc3QgZnJvbUNvbmZpZyA9IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkudG9vbGJhcjtcbiAgICBjb25zdCBiYXNlID0gQVRFX0RFRkFVTFRfVE9PTEJBUl9DT05GSUc7XG5cbiAgICBpZiAoZnJvbUlucHV0ICYmIE9iamVjdC5rZXlzKGZyb21JbnB1dCkubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgLi4uZnJvbUlucHV0IH07XG4gICAgfVxuICAgIGlmIChmcm9tQ29uZmlnKSB7XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCAuLi5mcm9tQ29uZmlnIH07XG4gICAgfVxuICAgIHJldHVybiBiYXNlO1xuICB9KTtcblxuICByZWFkb25seSBmaW5hbEZsb2F0aW5nVG9vbGJhciA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuZmxvYXRpbmdUb29sYmFyKCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5mbG9hdGluZ1Rvb2xiYXIgPz8gZmFsc2VcbiAgKTtcblxuICByZWFkb25seSBmaW5hbFNob3dCdWJibGVNZW51ID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5zaG93QnViYmxlTWVudSgpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuc2hvd0J1YmJsZU1lbnUgPz8gdHJ1ZVxuICApO1xuXG4gIHJlYWRvbmx5IGZpbmFsQnViYmxlTWVudUNvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBmcm9tSW5wdXQgPSB0aGlzLmJ1YmJsZU1lbnUoKTtcbiAgICBjb25zdCBmcm9tQ29uZmlnID0gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5idWJibGVNZW51O1xuICAgIGNvbnN0IGJhc2UgPSBBVEVfREVGQVVMVF9CVUJCTEVfTUVOVV9DT05GSUc7XG5cbiAgICBpZiAoZnJvbUlucHV0ICYmIE9iamVjdC5rZXlzKGZyb21JbnB1dCkubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgLi4uZnJvbUlucHV0IH07XG4gICAgfVxuICAgIGlmIChmcm9tQ29uZmlnKSB7XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCAuLi5mcm9tQ29uZmlnIH07XG4gICAgfVxuICAgIHJldHVybiBiYXNlO1xuICB9KTtcblxuICByZWFkb25seSBmaW5hbFNob3dJbWFnZUJ1YmJsZU1lbnUgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnNob3dJbWFnZUJ1YmJsZU1lbnUoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLnNob3dJbWFnZUJ1YmJsZU1lbnUgPz8gdHJ1ZVxuICApO1xuXG4gIHJlYWRvbmx5IGZpbmFsSW1hZ2VCdWJibGVNZW51Q29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGZyb21JbnB1dCA9IHRoaXMuaW1hZ2VCdWJibGVNZW51KCk7XG4gICAgY29uc3QgZnJvbUNvbmZpZyA9IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuaW1hZ2VCdWJibGVNZW51O1xuICAgIGNvbnN0IGJhc2UgPSBBVEVfREVGQVVMVF9JTUFHRV9CVUJCTEVfTUVOVV9DT05GSUc7XG5cbiAgICBpZiAoZnJvbUlucHV0ICYmIE9iamVjdC5rZXlzKGZyb21JbnB1dCkubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgLi4uZnJvbUlucHV0IH07XG4gICAgfVxuICAgIGlmIChmcm9tQ29uZmlnKSB7XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCAuLi5mcm9tQ29uZmlnIH07XG4gICAgfVxuICAgIHJldHVybiBiYXNlO1xuICB9KTtcblxuICByZWFkb25seSBmaW5hbFNob3dUYWJsZUJ1YmJsZU1lbnUgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnNob3dUYWJsZUJ1YmJsZU1lbnUoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLnNob3dUYWJsZU1lbnUgPz8gdHJ1ZVxuICApO1xuXG4gIHJlYWRvbmx5IGZpbmFsVGFibGVCdWJibGVNZW51Q29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGZyb21JbnB1dCA9IHRoaXMudGFibGVCdWJibGVNZW51KCk7XG4gICAgY29uc3QgZnJvbUNvbmZpZyA9IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkudGFibGVCdWJibGVNZW51O1xuICAgIGNvbnN0IGJhc2UgPSBBVEVfREVGQVVMVF9UQUJMRV9NRU5VX0NPTkZJRztcblxuICAgIGlmIChmcm9tSW5wdXQgJiYgT2JqZWN0LmtleXMoZnJvbUlucHV0KS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCAuLi5mcm9tSW5wdXQgfTtcbiAgICB9XG4gICAgaWYgKGZyb21Db25maWcpIHtcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIC4uLmZyb21Db25maWcgfTtcbiAgICB9XG4gICAgcmV0dXJuIGJhc2U7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpbmFsU2hvd0NlbGxCdWJibGVNZW51ID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5zaG93Q2VsbEJ1YmJsZU1lbnUoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLnNob3dDZWxsTWVudSA/PyB0cnVlXG4gICk7XG5cbiAgcmVhZG9ubHkgZmluYWxDZWxsQnViYmxlTWVudUNvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBmcm9tSW5wdXQgPSB0aGlzLmNlbGxCdWJibGVNZW51KCk7XG4gICAgY29uc3QgZnJvbUNvbmZpZyA9IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuY2VsbEJ1YmJsZU1lbnU7XG4gICAgY29uc3QgYmFzZSA9IEFURV9ERUZBVUxUX0NFTExfTUVOVV9DT05GSUc7XG5cbiAgICBpZiAoZnJvbUlucHV0ICYmIE9iamVjdC5rZXlzKGZyb21JbnB1dCkubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgLi4uZnJvbUlucHV0IH07XG4gICAgfVxuICAgIGlmIChmcm9tQ29uZmlnKSB7XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCAuLi5mcm9tQ29uZmlnIH07XG4gICAgfVxuICAgIHJldHVybiBiYXNlO1xuICB9KTtcblxuICByZWFkb25seSBmaW5hbEVuYWJsZVNsYXNoQ29tbWFuZHMgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLmVuYWJsZVNsYXNoQ29tbWFuZHMoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLmVuYWJsZVNsYXNoQ29tbWFuZHMgPz8gdHJ1ZVxuICApO1xuXG4gIHJlYWRvbmx5IGZpbmFsU2xhc2hDb21tYW5kc0NvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBmcm9tSW5wdXRDb21wb25lbnQgPSB0aGlzLmN1c3RvbVNsYXNoQ29tbWFuZHMoKTtcbiAgICBjb25zdCBmcm9tQ29uZmlnQ29tcG9uZW50ID0gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5jdXN0b21TbGFzaENvbW1hbmRzO1xuICAgIGNvbnN0IGN1c3RvbUNvbmZpZyA9IGZyb21JbnB1dENvbXBvbmVudCA/PyBmcm9tQ29uZmlnQ29tcG9uZW50O1xuXG4gICAgaWYgKGN1c3RvbUNvbmZpZykge1xuICAgICAgcmV0dXJuIGN1c3RvbUNvbmZpZztcbiAgICB9XG5cbiAgICBjb25zdCBmcm9tSW5wdXRPcHRpb25zID0gdGhpcy5zbGFzaENvbW1hbmRzKCk7XG4gICAgY29uc3QgZnJvbUNvbmZpZ09wdGlvbnMgPSB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLnNsYXNoQ29tbWFuZHM7XG4gICAgY29uc3QgYmFzZUNvbmZpZyA9XG4gICAgICBmcm9tSW5wdXRPcHRpb25zICYmIE9iamVjdC5rZXlzKGZyb21JbnB1dE9wdGlvbnMpLmxlbmd0aCA+IDBcbiAgICAgICAgPyBmcm9tSW5wdXRPcHRpb25zXG4gICAgICAgIDogZnJvbUNvbmZpZ09wdGlvbnM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29tbWFuZHM6IGZpbHRlclNsYXNoQ29tbWFuZHMoXG4gICAgICAgIGJhc2VDb25maWcgfHwge30sXG4gICAgICAgIHRoaXMuaTE4blNlcnZpY2UsXG4gICAgICAgIHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlLFxuICAgICAgICB0aGlzLmZpbmFsSW1hZ2VVcGxvYWRDb25maWcoKVxuICAgICAgKSxcbiAgICB9O1xuICB9KTtcblxuICAvLyBCZWhhdmlvclxuICByZWFkb25seSBmaW5hbEF1dG9mb2N1cyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYXV0b2ZvY3VzKCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5hdXRvZm9jdXMpO1xuICByZWFkb25seSBmaW5hbE1heENoYXJhY3RlcnMgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLm1heENoYXJhY3RlcnMoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLm1heENoYXJhY3RlcnNcbiAgKTtcbiAgcmVhZG9ubHkgZmluYWxCbG9ja0NvbnRyb2xzID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5ibG9ja0NvbnRyb2xzKCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5ibG9ja0NvbnRyb2xzID8/IFwibm9uZVwiXG4gICk7XG4gIHJlYWRvbmx5IGZpbmFsU2hvd0NoYXJhY3RlckNvdW50ID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5zaG93Q2hhcmFjdGVyQ291bnQoKSA/PyB0aGlzLmVmZmVjdGl2ZUNvbmZpZygpLnNob3dDaGFyYWN0ZXJDb3VudCA/PyB0cnVlXG4gICk7XG4gIHJlYWRvbmx5IGZpbmFsU2hvd1dvcmRDb3VudCA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuc2hvd1dvcmRDb3VudCgpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuc2hvd1dvcmRDb3VudCA/PyB0cnVlXG4gICk7XG4gIHJlYWRvbmx5IGZpbmFsTG9jYWxlID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gKHRoaXMubG9jYWxlKCkgYXMgU3VwcG9ydGVkTG9jYWxlKSA/PyAodGhpcy5lZmZlY3RpdmVDb25maWcoKS5sb2NhbGUgYXMgU3VwcG9ydGVkTG9jYWxlKVxuICApO1xuXG4gIC8vIEV4dGVuc2lvbnMgJiBPcHRpb25zXG4gIHJlYWRvbmx5IGZpbmFsVGlwdGFwRXh0ZW5zaW9ucyA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMudGlwdGFwRXh0ZW5zaW9ucygpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkudGlwdGFwRXh0ZW5zaW9ucyA/PyBbXVxuICApO1xuXG4gIHJlYWRvbmx5IGZpbmFsVGlwdGFwT3B0aW9ucyA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMudGlwdGFwT3B0aW9ucygpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkudGlwdGFwT3B0aW9ucyA/PyB7fVxuICApO1xuXG4gIHJlYWRvbmx5IGZpbmFsU3RhdGVDYWxjdWxhdG9ycyA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuc3RhdGVDYWxjdWxhdG9ycygpID8/IHRoaXMuZWZmZWN0aXZlQ29uZmlnKCkuc3RhdGVDYWxjdWxhdG9ycyA/PyBbXVxuICApO1xuXG4gIHJlYWRvbmx5IGZpbmFsQW5ndWxhck5vZGVzQ29uZmlnID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5hbmd1bGFyTm9kZXMgPz8gW10pO1xuXG4gIC8vIEltYWdlIFVwbG9hZFxuICByZWFkb25seSBmaW5hbEltYWdlVXBsb2FkQ29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGZyb21JbnB1dCA9IHRoaXMuaW1hZ2VVcGxvYWQoKTtcbiAgICBjb25zdCBmcm9tQ29uZmlnID0gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5pbWFnZVVwbG9hZDtcbiAgICBjb25zdCBiYXNlID0gQVRFX0RFRkFVTFRfSU1BR0VfVVBMT0FEX0NPTkZJRztcblxuICAgIGNvbnN0IG1lcmdlZCA9IHtcbiAgICAgIC4uLmJhc2UsXG4gICAgICAuLi5mcm9tQ29uZmlnLFxuICAgICAgLi4uZnJvbUlucHV0LFxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubWVyZ2VkLFxuICAgICAgbWF4U2l6ZTogKG1lcmdlZC5tYXhTaXplID8/IDUpICogMTAyNCAqIDEwMjQsIC8vIENvbnZlcnQgTUIgdG8gYnl0ZXMgZm9yIGludGVybmFsIHNlcnZpY2VcbiAgICB9O1xuICB9KTtcblxuICByZWFkb25seSBmaW5hbEltYWdlVXBsb2FkSGFuZGxlciA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuaW1hZ2VVcGxvYWRIYW5kbGVyKCkgPz8gdGhpcy5lZmZlY3RpdmVDb25maWcoKS5pbWFnZVVwbG9hZD8uaGFuZGxlclxuICApO1xuXG4gIC8vIENvbXB1dGVkIGZvciBjdXJyZW50IHRyYW5zbGF0aW9ucyAoYWxsb3dzIHBlci1pbnN0YW5jZSBvdmVycmlkZSB2aWEgY29uZmlnIG9yIGlucHV0KVxuICByZWFkb25seSBjdXJyZW50VHJhbnNsYXRpb25zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGxvY2FsZU92ZXJyaWRlID0gdGhpcy5maW5hbExvY2FsZSgpO1xuICAgIGlmIChsb2NhbGVPdmVycmlkZSkge1xuICAgICAgY29uc3QgYWxsVHJhbnNsYXRpb25zID0gdGhpcy5pMThuU2VydmljZS5hbGxUcmFuc2xhdGlvbnMoKTtcbiAgICAgIHJldHVybiBhbGxUcmFuc2xhdGlvbnNbbG9jYWxlT3ZlcnJpZGVdIHx8IHRoaXMuaTE4blNlcnZpY2UudHJhbnNsYXRpb25zKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmkxOG5TZXJ2aWNlLnRyYW5zbGF0aW9ucygpO1xuICB9KTtcblxuICBwcml2YXRlIF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAvLyBOZ0NvbnRyb2wgZm9yIG1hbmFnZW1lbnQgb2YgRm9ybUNvbnRyb2xzXG4gIHByaXZhdGUgbmdDb250cm9sID0gaW5qZWN0KE5nQ29udHJvbCwgeyBzZWxmOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICByZWFkb25seSBpMThuU2VydmljZSA9IGluamVjdChBdGVJMThuU2VydmljZSk7XG4gIHJlYWRvbmx5IGVkaXRvckNvbW1hbmRzU2VydmljZSA9IGluamVjdChBdGVFZGl0b3JDb21tYW5kc1NlcnZpY2UpO1xuICAvLyBBY2Nlc3MgZWRpdG9yIHN0YXRlIHZpYSBzZXJ2aWNlXG4gIHJlYWRvbmx5IGVkaXRvclN0YXRlID0gdGhpcy5lZGl0b3JDb21tYW5kc1NlcnZpY2UuZWRpdG9yU3RhdGU7XG5cbiAgcHJpdmF0ZSBlZGl0b3JSZWdpc3RyeSA9IGluamVjdChBdGVFZGl0b3JSZWdpc3RyeSk7XG4gIHByaXZhdGUgX3JlZ2lzdGVyZWRJZCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgcmVnaXN0ZXJlZElkID0gdGhpcy5fcmVnaXN0ZXJlZElkLmFzUmVhZG9ubHkoKTtcblxuICBwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgcHJpdmF0ZSBnbG9iYWxDb25maWcgPSBpbmplY3QoQVRFX0dMT0JBTF9DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgLyoqXG4gICAqIEZpbmFsIG1lcmdlZCBjb25maWd1cmF0aW9uLlxuICAgKiBQcmlvcml0eTogSW5wdXQgW2NvbmZpZ10gPiBHbG9iYWwgY29uZmlnIHZpYSBwcm92aWRlQXRlRWRpdG9yKClcbiAgICovXG4gIHJlYWRvbmx5IGVmZmVjdGl2ZUNvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBmcm9tSW5wdXQgPSB0aGlzLmNvbmZpZygpO1xuICAgIGNvbnN0IGZyb21HbG9iYWwgPSB0aGlzLmdsb2JhbENvbmZpZyB8fCB7fTtcbiAgICByZXR1cm4geyAuLi5BVEVfREVGQVVMVF9DT05GSUcsIC4uLmZyb21HbG9iYWwsIC4uLmZyb21JbnB1dCB9O1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBFZmZlY3QgdG8gdXBkYXRlIGVkaXRvciBjb250ZW50ICh3aXRoIGFudGktZWNobylcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgY29udGVudCA9IHRoaXMuY29udGVudCgpOyAvLyBTb2xlIHJlYWN0aXZlIGRlcGVuZGVuY3lcblxuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3IoKTtcbiAgICAgICAgY29uc3QgaGFzRm9ybUNvbnRyb2wgPSAhISh0aGlzLm5nQ29udHJvbCBhcyB7IGNvbnRyb2w/OiB1bmtub3duIH0pPy5jb250cm9sO1xuXG4gICAgICAgIGlmICghZWRpdG9yIHx8IGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFudGktw6ljaG8gOiBvbiBpZ25vcmUgY2UgcXUnb24gdmllbnQgZCfDqW1ldHRyZSBub3VzLW3Dqm1lc1xuICAgICAgICBpZiAoY29udGVudCA9PT0gdGhpcy5sYXN0RW1pdHRlZEh0bWwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEb3VibGUgc8OpY3VyaXTDqSA6IG9uIHbDqXJpZmllIGxlIGNvbnRlbnUgYWN0dWVsIGRlIGwnw6lkaXRldXJcbiAgICAgICAgaWYgKGNvbnRlbnQgPT09IGVkaXRvci5nZXRIVE1MKCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEbyBub3Qgb3ZlcndyaXRlIGNvbnRlbnQgaWYgd2UgaGF2ZSBhIEZvcm1Db250cm9sIGFuZCBjb250ZW50IGlzIGVtcHR5XG4gICAgICAgIGlmIChoYXNGb3JtQ29udHJvbCAmJiAhY29udGVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGVkaXRvci5jb21tYW5kcy5zZXRDb250ZW50KGNvbnRlbnQsIHsgZW1pdFVwZGF0ZTogZmFsc2UgfSk7XG4gICAgICB9KTtcbiAgICB9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pO1xuXG4gICAgLy8gRWZmZWN0IHRvIHVwZGF0ZSBoZWlnaHQgcHJvcGVydGllc1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBtaW5IZWlnaHQgPSB0aGlzLmZpbmFsTWluSGVpZ2h0KCk7XG4gICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmZpbmFsSGVpZ2h0KCk7XG4gICAgICBjb25zdCBtYXhIZWlnaHQgPSB0aGlzLmZpbmFsTWF4SGVpZ2h0KCk7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lZGl0b3JFbGVtZW50KCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgIC8vIEF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlIGlmIHNjcm9sbCBpcyBuZWVkZWRcbiAgICAgIGNvbnN0IG5lZWRzU2Nyb2xsID0gaGVpZ2h0ICE9PSB1bmRlZmluZWQgfHwgbWF4SGVpZ2h0ICE9PSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCItLWVkaXRvci1taW4taGVpZ2h0XCIsIG1pbkhlaWdodCA/PyBcImF1dG9cIik7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCItLWVkaXRvci1oZWlnaHRcIiwgaGVpZ2h0ID8/IFwiYXV0b1wiKTtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tZWRpdG9yLW1heC1oZWlnaHRcIiwgbWF4SGVpZ2h0ID8/IFwibm9uZVwiKTtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tZWRpdG9yLW92ZXJmbG93XCIsIG5lZWRzU2Nyb2xsID8gXCJhdXRvXCIgOiBcInZpc2libGVcIik7XG4gICAgICB9XG4gICAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KTtcblxuICAgIC8vIEVmZmVjdCB0byBtb25pdG9yIGVkaXRhYmlsaXR5IGNoYW5nZXNcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudEVkaXRvciA9IHRoaXMuZWRpdG9yKCk7XG4gICAgICAvLyBBbiBlZGl0b3IgaXMgXCJlZGl0YWJsZVwiIGlmIGl0J3Mgbm90IGRpc2FibGVkIGFuZCBlZGl0YWJsZSBtb2RlIGlzIE9OXG4gICAgICBjb25zdCBpc0VkaXRhYmxlID0gdGhpcy5maW5hbEVkaXRhYmxlKCkgJiYgIXRoaXMubWVyZ2VkRGlzYWJsZWQoKTtcbiAgICAgIC8vIEFuIGVkaXRvciBpcyBcInJlYWRvbmx5XCIgaWYgaXQncyBleHBsaWNpdGx5IG5vbi1lZGl0YWJsZSBhbmQgbm90IGRpc2FibGVkXG4gICAgICAvLyBjb25zdCBpc1JlYWRPbmx5ID0gIXRoaXMuZmluYWxFZGl0YWJsZSgpICYmICF0aGlzLm1lcmdlZERpc2FibGVkKCk7IC8vIFVudXNlZCB2YXJpYWJsZVxuXG4gICAgICBpZiAoY3VycmVudEVkaXRvcikge1xuICAgICAgICB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS5zZXRFZGl0YWJsZShjdXJyZW50RWRpdG9yLCBpc0VkaXRhYmxlKTtcbiAgICAgIH1cbiAgICB9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pO1xuXG4gICAgLy8gRWZmZWN0IHRvIHN5bmNocm9uaXplIGltYWdlIHVwbG9hZCBoYW5kbGVyIHdpdGggdGhlIHNlcnZpY2VcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuZmluYWxJbWFnZVVwbG9hZEhhbmRsZXIoKTtcbiAgICAgIHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlLnVwbG9hZEhhbmRsZXIgPSBoYW5kbGVyIHx8IG51bGw7XG4gICAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KTtcblxuICAgIC8vIEVmZmVjdCB0byB1cGRhdGUgY2hhcmFjdGVyIGNvdW50IGxpbWl0IGR5bmFtaWNhbGx5XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yKCk7XG4gICAgICBjb25zdCBsaW1pdCA9IHRoaXMuZmluYWxNYXhDaGFyYWN0ZXJzKCk7XG5cbiAgICAgIGlmIChlZGl0b3IgJiYgZWRpdG9yLmV4dGVuc2lvbk1hbmFnZXIpIHtcbiAgICAgICAgY29uc3QgY2hhcmFjdGVyQ291bnRFeHRlbnNpb24gPSBlZGl0b3IuZXh0ZW5zaW9uTWFuYWdlci5leHRlbnNpb25zLmZpbmQoXG4gICAgICAgICAgZXh0ID0+IGV4dC5uYW1lID09PSBcImNoYXJhY3RlckNvdW50XCJcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoY2hhcmFjdGVyQ291bnRFeHRlbnNpb24pIHtcbiAgICAgICAgICBjaGFyYWN0ZXJDb3VudEV4dGVuc2lvbi5vcHRpb25zLmxpbWl0ID0gbGltaXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pO1xuXG4gICAgLy8gRWZmZWN0IHRvIHJlLWluaXRpYWxpemUgZWRpdG9yIHdoZW4gdGVjaG5pY2FsIGNvbmZpZ3VyYXRpb24gY2hhbmdlc1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAvLyBNb25pdG9yIHRlY2huaWNhbCBkZXBlbmRlbmNpZXNcbiAgICAgIHRoaXMuZmluYWxUaXB0YXBFeHRlbnNpb25zKCk7XG4gICAgICB0aGlzLmZpbmFsVGlwdGFwT3B0aW9ucygpO1xuICAgICAgdGhpcy5maW5hbEFuZ3VsYXJOb2Rlc0NvbmZpZygpO1xuICAgICAgdGhpcy5maW5hbEJsb2NrQ29udHJvbHMoKTtcblxuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgLy8gT25seSBpZiBhbHJlYWR5IGluaXRpYWxpemVkIChwb3N0IEFmdGVyVmlld0luaXQpXG4gICAgICAgIGlmICh0aGlzLmVkaXRvckZ1bGx5SW5pdGlhbGl6ZWQoKSkge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRFZGl0b3IgPSB0aGlzLmVkaXRvcigpO1xuICAgICAgICAgIGlmIChjdXJyZW50RWRpdG9yKSB7XG4gICAgICAgICAgICBjdXJyZW50RWRpdG9yLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuX2VkaXRvckZ1bGx5SW5pdGlhbGl6ZWQuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuaW5pdEVkaXRvcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyBMYSB2dWUgZXN0IGTDqWrDoCBjb21wbMOodGVtZW50IGluaXRpYWxpc8OpZSBkYW5zIG5nQWZ0ZXJWaWV3SW5pdFxuICAgIC8vIEluaXRpYWxpc2VyIGwnw6lkaXRldXJcbiAgICB0aGlzLmluaXRFZGl0b3IoKTtcblxuICAgIC8vIFMnYWJvbm5lciBhdXggY2hhbmdlbWVudHMgZHUgRm9ybUNvbnRyb2xcbiAgICB0aGlzLnNldHVwRm9ybUNvbnRyb2xTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGNvbnN0IGN1cnJlbnRFZGl0b3IgPSB0aGlzLmVkaXRvcigpO1xuICAgIGlmIChjdXJyZW50RWRpdG9yKSB7XG4gICAgICBjdXJyZW50RWRpdG9yLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgdGhpcy5fZWRpdG9yRnVsbHlJbml0aWFsaXplZC5zZXQoZmFsc2UpO1xuXG4gICAgLy8gVW5yZWdpc3RlciBmcm9tIHRoZSBnbG9iYWwgcmVnaXN0cnlcbiAgICBjb25zdCBpZCA9IHRoaXMucmVnaXN0ZXJlZElkKCk7XG4gICAgaWYgKGlkKSB7XG4gICAgICB0aGlzLmVkaXRvclJlZ2lzdHJ5LnVucmVnaXN0ZXIoaWQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdEVkaXRvcigpIHtcbiAgICBjb25zdCBleHRlbnNpb25zOiAoRXh0ZW5zaW9uIHwgTm9kZSB8IE1hcmspW10gPSBbXG4gICAgICBTdGFydGVyS2l0LmNvbmZpZ3VyZSh7XG4gICAgICAgIGxpbms6IHtcbiAgICAgICAgICBvcGVuT25DbGljazogZmFsc2UsXG4gICAgICAgICAgSFRNTEF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIGNsYXNzOiBcImF0ZS1saW5rXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgVGV4dFN0eWxlLFxuICAgICAgQ29sb3IuY29uZmlndXJlKHtcbiAgICAgICAgdHlwZXM6IFtcInRleHRTdHlsZVwiXSxcbiAgICAgIH0pLFxuICAgICAgUGxhY2Vob2xkZXIuY29uZmlndXJlKHtcbiAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMuZmluYWxQbGFjZWhvbGRlcigpLFxuICAgICAgfSksXG4gICAgICBTdXBlcnNjcmlwdCxcbiAgICAgIFN1YnNjcmlwdCxcbiAgICAgIFRleHRBbGlnbi5jb25maWd1cmUoe1xuICAgICAgICB0eXBlczogW1wiaGVhZGluZ1wiLCBcInBhcmFncmFwaFwiLCBcInJlc2l6YWJsZUltYWdlXCJdLFxuICAgICAgfSksXG4gICAgICBBdGVMaW5rQ2xpY2tCZWhhdmlvcixcbiAgICAgIEhpZ2hsaWdodC5jb25maWd1cmUoe1xuICAgICAgICBtdWx0aWNvbG9yOiB0cnVlLFxuICAgICAgICBIVE1MQXR0cmlidXRlczoge1xuICAgICAgICAgIGNsYXNzOiBcImF0ZS1oaWdobGlnaHRcIixcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgQXRlUmVzaXphYmxlSW1hZ2UuY29uZmlndXJlKHtcbiAgICAgICAgaW5saW5lOiBmYWxzZSxcbiAgICAgICAgYWxsb3dCYXNlNjQ6IHRydWUsXG4gICAgICAgIEhUTUxBdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgY2xhc3M6IFwiYXRlLWltYWdlXCIsXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIEF0ZVVwbG9hZFByb2dyZXNzLmNvbmZpZ3VyZSh7XG4gICAgICAgIGlzVXBsb2FkaW5nOiAoKSA9PiB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS5pc1VwbG9hZGluZygpLFxuICAgICAgICB1cGxvYWRQcm9ncmVzczogKCkgPT4gdGhpcy5lZGl0b3JDb21tYW5kc1NlcnZpY2UudXBsb2FkUHJvZ3Jlc3MoKSxcbiAgICAgICAgdXBsb2FkTWVzc2FnZTogKCkgPT4gdGhpcy5lZGl0b3JDb21tYW5kc1NlcnZpY2UudXBsb2FkTWVzc2FnZSgpLFxuICAgICAgfSksXG4gICAgICBBdGVUYWJsZUV4dGVuc2lvbixcbiAgICAgIEF0ZVRpcHRhcFN0YXRlRXh0ZW5zaW9uLmNvbmZpZ3VyZSh7XG4gICAgICAgIG9uVXBkYXRlOiBzdGF0ZSA9PiB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS51cGRhdGVTdGF0ZShzdGF0ZSksXG4gICAgICAgIGNhbGN1bGF0b3JzOiBbXG4gICAgICAgICAgQXRlU2VsZWN0aW9uQ2FsY3VsYXRvcixcbiAgICAgICAgICBBdGVNYXJrc0NhbGN1bGF0b3IsXG4gICAgICAgICAgQXRlVGFibGVDYWxjdWxhdG9yLFxuICAgICAgICAgIEF0ZUltYWdlQ2FsY3VsYXRvcixcbiAgICAgICAgICBBdGVTdHJ1Y3R1cmVDYWxjdWxhdG9yLFxuICAgICAgICAgIEF0ZURpc2NvdmVyeUNhbGN1bGF0b3IsXG4gICAgICAgICAgLi4udGhpcy5maW5hbFN0YXRlQ2FsY3VsYXRvcnMoKSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgIF07XG5cbiAgICBpZiAodGhpcy5maW5hbEJsb2NrQ29udHJvbHMoKSAhPT0gXCJub25lXCIpIHtcbiAgICAgIGV4dGVuc2lvbnMucHVzaChcbiAgICAgICAgQXRlQmxvY2tDb250cm9sc0V4dGVuc2lvbi5jb25maWd1cmUoe1xuICAgICAgICAgIG9uSG92ZXI6IGRhdGEgPT4gdGhpcy5faG92ZXJlZEJsb2NrLnNldChkYXRhKSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQWpvdXRlciBsJ2V4dGVuc2lvbiBPZmZpY2UgUGFzdGUgc2kgYWN0aXbDqWVcbiAgICBpZiAodGhpcy5maW5hbEVuYWJsZU9mZmljZVBhc3RlKCkpIHtcbiAgICAgIGV4dGVuc2lvbnMucHVzaChcbiAgICAgICAgT2ZmaWNlUGFzdGUuY29uZmlndXJlKHtcbiAgICAgICAgICAvLyBDb25maWd1cmF0aW9uIHBhciBkw6lmYXV0IHBvdXIgdW5lIG1laWxsZXVyZSBjb21wYXRpYmlsaXTDqVxuICAgICAgICAgIHRyYW5zZm9ybVBhc3RlZEhUTUw6IHRydWUsXG4gICAgICAgICAgdHJhbnNmb3JtUGFzdGVkVGV4dDogdHJ1ZSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmluYWxTaG93Q2hhcmFjdGVyQ291bnQoKSB8fCB0aGlzLmZpbmFsU2hvd1dvcmRDb3VudCgpKSB7XG4gICAgICBleHRlbnNpb25zLnB1c2goXG4gICAgICAgIENoYXJhY3RlckNvdW50LmNvbmZpZ3VyZSh7XG4gICAgICAgICAgbGltaXQ6IHRoaXMuZmluYWxNYXhDaGFyYWN0ZXJzKCksXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFJlZ2lzdGVyIGF1dG9tYXRpYyBub2RlIHZpZXdzIGZyb20gY29uZmlnXG4gICAgY29uc3QgYXV0b05vZGVWaWV3cyA9IHRoaXMuZmluYWxBbmd1bGFyTm9kZXNDb25maWcoKTtcbiAgICBhdXRvTm9kZVZpZXdzLmZvckVhY2goKHJlZzogQXRlQW5ndWxhck5vZGUpID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPVxuICAgICAgICB0eXBlb2YgcmVnID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IHsgY29tcG9uZW50OiByZWcgYXMgVHlwZTx1bmtub3duPiB9XG4gICAgICAgICAgOiAocmVnIGFzIFJlZ2lzdGVyQW5ndWxhckNvbXBvbmVudE9wdGlvbnM8dW5rbm93bj4pO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBleHRlbnNpb24gPSByZWdpc3RlckFuZ3VsYXJDb21wb25lbnQodGhpcy5pbmplY3Rvciwgb3B0aW9ucyk7XG4gICAgICAgIGV4dGVuc2lvbnMucHVzaChleHRlbnNpb24pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiW0FURV0gRmFpbGVkIHRvIGF1dG8tcmVnaXN0ZXIgbm9kZSB2aWV3OlwiLCBlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEFsbG93IGFkZGl0aW9uIG9mIGN1c3RvbSBleHRlbnNpb25zLCBidXQgYXZvaWQgZHVwbGljYXRlcyBieSBmaWx0ZXJpbmcgYnkgbmFtZVxuICAgIGNvbnN0IGN1c3RvbUV4dGVuc2lvbnMgPSB0aGlzLmZpbmFsVGlwdGFwRXh0ZW5zaW9ucygpO1xuICAgIGlmIChjdXN0b21FeHRlbnNpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nTmFtZXMgPSBuZXcgU2V0KFxuICAgICAgICBleHRlbnNpb25zXG4gICAgICAgICAgLm1hcCgoZXh0OiBFeHRlbnNpb24gfCBOb2RlIHwgTWFyaykgPT4gKGV4dCBhcyB7IG5hbWU/OiBzdHJpbmcgfSk/Lm5hbWUpXG4gICAgICAgICAgLmZpbHRlcigobmFtZSk6IG5hbWUgaXMgc3RyaW5nID0+ICEhbmFtZSlcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHRvQWRkID0gY3VzdG9tRXh0ZW5zaW9ucy5maWx0ZXIoKGV4dDogRXh0ZW5zaW9uIHwgTm9kZSB8IE1hcmspID0+IHtcbiAgICAgICAgY29uc3QgbmFtZSA9IChleHQgYXMgeyBuYW1lPzogc3RyaW5nIH0pPy5uYW1lO1xuICAgICAgICByZXR1cm4gIW5hbWUgfHwgIWV4aXN0aW5nTmFtZXMuaGFzKG5hbWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGV4dGVuc2lvbnMucHVzaCguLi50b0FkZCk7XG4gICAgfVxuXG4gICAgLy8gQWxzbyBhbGxvdyBhbnkgdGlwdGFwIHVzZXIgb3B0aW9uc1xuICAgIGNvbnN0IHVzZXJPcHRpb25zID0gdGhpcy5maW5hbFRpcHRhcE9wdGlvbnMoKTtcbiAgICBjb25zdCB1c2VyRWRpdG9yUHJvcHMgPSB1c2VyT3B0aW9ucy5lZGl0b3JQcm9wcztcbiAgICBjb25zdCB1c2VySGFuZGxlUGFzdGUgPSB1c2VyRWRpdG9yUHJvcHM/LmhhbmRsZVBhc3RlO1xuICAgIGNvbnN0IHVzZXJIYW5kbGVET01QYXN0ZSA9IHVzZXJFZGl0b3JQcm9wcz8uaGFuZGxlRE9NRXZlbnRzPy5wYXN0ZTtcblxuICAgIHR5cGUgRWRpdG9ySGFuZGxlUGFzdGUgPSBOb25OdWxsYWJsZTxOb25OdWxsYWJsZTxFZGl0b3JPcHRpb25zW1wiZWRpdG9yUHJvcHNcIl0+W1wiaGFuZGxlUGFzdGVcIl0+O1xuICAgIHR5cGUgRWRpdG9yRE9NUGFzdGVIYW5kbGVyID0gTm9uTnVsbGFibGU8XG4gICAgICBOb25OdWxsYWJsZTxOb25OdWxsYWJsZTxFZGl0b3JPcHRpb25zW1wiZWRpdG9yUHJvcHNcIl0+W1wiaGFuZGxlRE9NRXZlbnRzXCJdPltcInBhc3RlXCJdXG4gICAgPjtcblxuICAgIGNvbnN0IGhhbmRsZURPTVBhc3RlOiBFZGl0b3JET01QYXN0ZUhhbmRsZXIgPSAodmlldywgZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRFZGl0b3IgPSB0aGlzLmVkaXRvcigpO1xuICAgICAgaWYgKFxuICAgICAgICBjdXJyZW50RWRpdG9yICYmXG4gICAgICAgIHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlLmhhbmRsZUltYWdlUGFzdGUoXG4gICAgICAgICAgY3VycmVudEVkaXRvcixcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICB0aGlzLmdldEltYWdlVXBsb2FkT3B0aW9ucygpXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF1c2VySGFuZGxlRE9NUGFzdGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB1c2VyUmVzdWx0ID0gdXNlckhhbmRsZURPTVBhc3RlKHZpZXcsIGV2ZW50KTtcbiAgICAgIHJldHVybiB1c2VyUmVzdWx0ID09PSB0cnVlO1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVQYXN0ZTogRWRpdG9ySGFuZGxlUGFzdGUgPSAodmlldywgZXZlbnQsIHNsaWNlKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RWRpdG9yID0gdGhpcy5lZGl0b3IoKTtcbiAgICAgIGlmIChcbiAgICAgICAgY3VycmVudEVkaXRvciAmJlxuICAgICAgICB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS5oYW5kbGVJbWFnZVBhc3RlKFxuICAgICAgICAgIGN1cnJlbnRFZGl0b3IsXG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgdGhpcy5nZXRJbWFnZVVwbG9hZE9wdGlvbnMoKVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghdXNlckhhbmRsZVBhc3RlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXNlclJlc3VsdCA9IHVzZXJIYW5kbGVQYXN0ZSh2aWV3LCBldmVudCwgc2xpY2UpO1xuICAgICAgcmV0dXJuIHVzZXJSZXN1bHQgPT09IHRydWU7XG4gICAgfTtcblxuICAgIGNvbnN0IG5ld0VkaXRvciA9IG5ldyBFZGl0b3Ioe1xuICAgICAgLi4udXNlck9wdGlvbnMsXG4gICAgICBlbGVtZW50OiB0aGlzLmVkaXRvckVsZW1lbnQoKS5uYXRpdmVFbGVtZW50LFxuICAgICAgZXh0ZW5zaW9uczogZXh0ZW5zaW9ucyxcbiAgICAgIGNvbnRlbnQ6IHRoaXMuY29udGVudCgpLFxuICAgICAgZWRpdGFibGU6IHRoaXMuZmluYWxFZGl0YWJsZSgpICYmICF0aGlzLm1lcmdlZERpc2FibGVkKCksXG4gICAgICBhdXRvZm9jdXM6IHRoaXMuZmluYWxBdXRvZm9jdXMoKSxcbiAgICAgIGVkaXRvclByb3BzOiB7XG4gICAgICAgIC4uLnVzZXJFZGl0b3JQcm9wcyxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIC4uLnVzZXJFZGl0b3JQcm9wcz8uYXR0cmlidXRlcyxcbiAgICAgICAgICBzcGVsbGNoZWNrOiB0aGlzLmZpbmFsU3BlbGxjaGVjaygpLnRvU3RyaW5nKCksXG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZURPTUV2ZW50czoge1xuICAgICAgICAgIC4uLnVzZXJFZGl0b3JQcm9wcz8uaGFuZGxlRE9NRXZlbnRzLFxuICAgICAgICAgIHBhc3RlOiBoYW5kbGVET01QYXN0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlUGFzdGUsXG4gICAgICB9LFxuICAgICAgb25VcGRhdGU6ICh7IGVkaXRvciwgdHJhbnNhY3Rpb24gfSkgPT4ge1xuICAgICAgICBjb25zdCBodG1sID0gZWRpdG9yLmdldEhUTUwoKTtcblxuICAgICAgICAvLyBBbnRpLcOpY2hvIDogbcOpbW9yaXNlciBjZSBxdSdvbiDDqW1ldCBwb3VyIMOpdml0ZXIgbGEgYm91Y2xlXG4gICAgICAgIHRoaXMubGFzdEVtaXR0ZWRIdG1sID0gaHRtbDtcblxuICAgICAgICB0aGlzLmNvbnRlbnRDaGFuZ2UuZW1pdChodG1sKTtcbiAgICAgICAgLy8gTWV0dHJlIMOgIGpvdXIgbGUgRm9ybUNvbnRyb2wgc2kgaWwgZXhpc3RlXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoXG4gICAgICAgICAgICB0aGlzLm5nQ29udHJvbCBhcyB7XG4gICAgICAgICAgICAgIGNvbnRyb2w/OiB7IHNldFZhbHVlOiAodmFsdWU6IHN0cmluZywgb3B0aW9uczogeyBlbWl0RXZlbnQ6IGJvb2xlYW4gfSkgPT4gdm9pZCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk/LmNvbnRyb2xcbiAgICAgICAgKSB7XG4gICAgICAgICAgKFxuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wgYXMge1xuICAgICAgICAgICAgICBjb250cm9sOiB7IHNldFZhbHVlOiAodmFsdWU6IHN0cmluZywgb3B0aW9uczogeyBlbWl0RXZlbnQ6IGJvb2xlYW4gfSkgPT4gdm9pZCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICkuY29udHJvbC5zZXRWYWx1ZShodG1sLCB7XG4gICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWRpdG9yVXBkYXRlLmVtaXQoeyBlZGl0b3IsIHRyYW5zYWN0aW9uIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZUNoYXJhY3RlckNvdW50KGVkaXRvcik7XG4gICAgICB9LFxuICAgICAgb25DcmVhdGU6ICh7IGVkaXRvciB9KSA9PiB7XG4gICAgICAgIHRoaXMuZWRpdG9yQ3JlYXRlZC5lbWl0KGVkaXRvcik7XG4gICAgICAgIHRoaXMudXBkYXRlQ2hhcmFjdGVyQ291bnQoZWRpdG9yKTtcblxuICAgICAgICAvLyBNYXJxdWVyIGwnw6lkaXRldXIgY29tbWUgY29tcGzDqHRlbWVudCBpbml0aWFsaXPDqSBhcHLDqHMgdW4gY291cnQgZMOpbGFpXG4gICAgICAgIC8vIHBvdXIgcydhc3N1cmVyIHF1ZSB0b3VzIGxlcyBwbHVnaW5zIGV0IGV4dGVuc2lvbnMgc29udCBwcsOqdHNcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZWRpdG9yRnVsbHlJbml0aWFsaXplZC5zZXQodHJ1ZSk7XG4gICAgICAgIH0sIDEwMCk7XG4gICAgICB9LFxuICAgICAgb25Gb2N1czogKHsgZWRpdG9yLCBldmVudCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5yZWdpc3RlcmVkSWQoKTtcbiAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgdGhpcy5lZGl0b3JSZWdpc3RyeS5zZXRBY3RpdmUoaWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWRpdG9yRm9jdXMuZW1pdCh7IGVkaXRvciwgZXZlbnQgfSk7XG4gICAgICB9LFxuICAgICAgb25CbHVyOiAoeyBlZGl0b3IsIGV2ZW50IH0pID0+IHtcbiAgICAgICAgLy8gTWFycXVlciBsZSBGb3JtQ29udHJvbCBjb21tZSB0b3VjaMOpIHNpIGlsIGV4aXN0ZVxuICAgICAgICBpZiAoKHRoaXMubmdDb250cm9sIGFzIHsgY29udHJvbD86IHsgbWFya0FzVG91Y2hlZDogKCkgPT4gdm9pZCB9IH0pPy5jb250cm9sKSB7XG4gICAgICAgICAgKHRoaXMubmdDb250cm9sIGFzIHsgY29udHJvbDogeyBtYXJrQXNUb3VjaGVkOiAoKSA9PiB2b2lkIH0gfSkuY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lZGl0b3JCbHVyLmVtaXQoeyBlZGl0b3IsIGV2ZW50IH0pO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIFN0b2NrZXIgbGEgcsOpZsOpcmVuY2UgZGUgbCfDqWRpdGV1ciBpbW3DqWRpYXRlbWVudFxuICAgIHRoaXMuX2VkaXRvci5zZXQobmV3RWRpdG9yKTtcblxuICAgIC8vIFJlZ2lzdGVyIGVkaXRvciBpbiB0aGUgZ2xvYmFsIHJlZ2lzdHJ5XG4gICAgY29uc3QgcmVnaXN0ZXJlZElkID0gdGhpcy5lZGl0b3JSZWdpc3RyeS5yZWdpc3RlcihcbiAgICAgIHRoaXMuZWRpdG9ySWQoKSxcbiAgICAgICgpID0+IHRoaXMuZWRpdG9yKCksXG4gICAgICB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZVxuICAgICk7XG4gICAgdGhpcy5fcmVnaXN0ZXJlZElkLnNldChyZWdpc3RlcmVkSWQpO1xuICB9XG5cbiAgdG9nZ2xlRWRpdE1vZGUoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBuZXdFZGl0YWJsZSA9ICF0aGlzLmZpbmFsRWRpdGFibGUoKTtcbiAgICB0aGlzLmVkaXRhYmxlQ2hhbmdlLmVtaXQobmV3RWRpdGFibGUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDaGFyYWN0ZXJDb3VudChlZGl0b3I6IEVkaXRvcikge1xuICAgIGlmIChcbiAgICAgICh0aGlzLmZpbmFsU2hvd0NoYXJhY3RlckNvdW50KCkgfHwgdGhpcy5maW5hbFNob3dXb3JkQ291bnQoKSkgJiZcbiAgICAgIGVkaXRvci5zdG9yYWdlW1wiY2hhcmFjdGVyQ291bnRcIl1cbiAgICApIHtcbiAgICAgIGNvbnN0IHN0b3JhZ2UgPSBlZGl0b3Iuc3RvcmFnZVtcImNoYXJhY3RlckNvdW50XCJdO1xuICAgICAgdGhpcy5fY2hhcmFjdGVyQ291bnQuc2V0KHN0b3JhZ2UuY2hhcmFjdGVycygpKTtcbiAgICAgIHRoaXMuX3dvcmRDb3VudC5zZXQoc3RvcmFnZS53b3JkcygpKTtcbiAgICB9XG4gIH1cblxuICBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuX2lzRHJhZ092ZXIuc2V0KHRydWUpO1xuICB9XG5cbiAgb25Ecm9wKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcigpO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuZWRpdG9yQ29tbWFuZHNTZXJ2aWNlLmhhbmRsZUltYWdlRHJvcChlZGl0b3IsIGV2ZW50LCB0aGlzLmdldEltYWdlVXBsb2FkT3B0aW9ucygpKTtcbiAgICAgIHRoaXMuX2lzRHJhZ092ZXIuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEltYWdlVXBsb2FkT3B0aW9ucygpOiBBdGVJbWFnZVVwbG9hZE9wdGlvbnMge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZmluYWxJbWFnZVVwbG9hZENvbmZpZygpO1xuICAgIHJldHVybiB7XG4gICAgICBxdWFsaXR5OiBjb25maWcucXVhbGl0eSxcbiAgICAgIG1heFdpZHRoOiBjb25maWcubWF4V2lkdGgsXG4gICAgICBtYXhIZWlnaHQ6IGNvbmZpZy5tYXhIZWlnaHQsXG4gICAgICBtYXhTaXplOiBjb25maWcubWF4U2l6ZSxcbiAgICAgIGFsbG93ZWRUeXBlczogY29uZmlnLmFsbG93ZWRUeXBlcyxcbiAgICB9O1xuICB9XG5cbiAgLy8gUHVibGljIG1ldGhvZHNcbiAgZ2V0SFRNTCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVkaXRvcigpPy5nZXRIVE1MKCkgfHwgXCJcIjtcbiAgfVxuXG4gIGdldEpTT04oKTogSlNPTkNvbnRlbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmVkaXRvcigpPy5nZXRKU09OKCk7XG4gIH1cblxuICBnZXRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yKCk/LmdldFRleHQoKSB8fCBcIlwiO1xuICB9XG5cbiAgc2V0Q29udGVudChjb250ZW50OiBzdHJpbmcsIGVtaXRVcGRhdGUgPSB0cnVlKSB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3IoKTtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS5zZXRDb250ZW50KGVkaXRvciwgY29udGVudCwgZW1pdFVwZGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXMoKSB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3IoKTtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS5mb2N1cyhlZGl0b3IpO1xuICAgIH1cbiAgfVxuXG4gIGJsdXIoKSB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3IoKTtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICB0aGlzLmVkaXRvckNvbW1hbmRzU2VydmljZS5ibHVyKGVkaXRvcik7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJDb250ZW50KCkge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yKCk7XG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgdGhpcy5lZGl0b3JDb21tYW5kc1NlcnZpY2UuY2xlYXJDb250ZW50KGVkaXRvcik7XG4gICAgfVxuICB9XG5cbiAgLy8gTcOpdGhvZGUgcHVibGlxdWUgcG91ciBvYnRlbmlyIGwnw6lkaXRldXJcbiAgZ2V0RWRpdG9yKCk6IEVkaXRvciB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmVkaXRvcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEZvcm1Db250cm9sU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRyb2wgPSAoXG4gICAgICB0aGlzLm5nQ29udHJvbCBhcyB7XG4gICAgICAgIGNvbnRyb2w/OiB7XG4gICAgICAgICAgdmFsdWU6IHN0cmluZztcbiAgICAgICAgICB2YWx1ZUNoYW5nZXM6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgICAgICAgICBzdGF0dXM6IHN0cmluZztcbiAgICAgICAgICBzdGF0dXNDaGFuZ2VzOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgKT8uY29udHJvbDtcbiAgICBpZiAoY29udHJvbCkge1xuICAgICAgLy8gU3luY2hyb25pemUgZm9ybSBjb250cm9sIHZhbHVlIHdpdGggZWRpdG9yIGNvbnRlbnRcbiAgICAgIGNvbnN0IGZvcm1WYWx1ZSQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IGNvbmNhdChcbiAgICAgICAgZGVmZXIoKCkgPT4gb2YoY29udHJvbC52YWx1ZSkpLFxuICAgICAgICBjb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgKTtcblxuICAgICAgZm9ybVZhbHVlJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yKCk7XG4gICAgICAgICAgICBpZiAoZWRpdG9yKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0Q29udGVudCh2YWx1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgICAgLy8gU3luY2hyb25pemUgZm9ybSBjb250cm9sIHN0YXR1cyB3aXRoIGVkaXRvciBkaXNhYmxlZCBzdGF0ZVxuICAgICAgY29uc3QgZm9ybVN0YXR1cyQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IGNvbmNhdChcbiAgICAgICAgZGVmZXIoKCkgPT4gb2YoY29udHJvbC5zdGF0dXMpKSxcbiAgICAgICAgY29udHJvbC5zdGF0dXNDaGFuZ2VzXG4gICAgICApO1xuXG4gICAgICBmb3JtU3RhdHVzJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKHN0YXR1czogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9pc0Zvcm1Db250cm9sRGlzYWJsZWQuc2V0KHN0YXR1cyA9PT0gXCJESVNBQkxFRFwiKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZilcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgb25FZGl0b3JDbGljayhldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcigpO1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSW4gcmVhZC1vbmx5IG1vZGUsIGhhbmRsZSBjbGVhcmluZyBvZiBub2RlIHNlbGVjdGlvblxuICAgIGlmICghdGhpcy5maW5hbEVkaXRhYmxlKCkpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IGVkaXRvckVsZW1lbnQgPSB0aGlzLmVkaXRvckVsZW1lbnQoKT8ubmF0aXZlRWxlbWVudDtcbiAgICAgIGlmICh0YXJnZXQgPT09IGVkaXRvckVsZW1lbnQgfHwgdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImF0ZS1jb250ZW50XCIpKSB7XG4gICAgICAgIC8vIENsZWFyIHNlbGVjdGlvbiB0byBoaWRlIGJ1YmJsZSBtZW51c1xuICAgICAgICBlZGl0b3IuY29tbWFuZHMuc2V0VGV4dFNlbGVjdGlvbigwKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBWZXJpZnkgaWYgaW50ZXJhY3Rpb24gaXMgb24gdGhlIGNvbnRhaW5lciBlbGVtZW50IGFuZCBub3Qgb24gdGhlIGNvbnRlbnRcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgZWRpdG9yRWxlbWVudCA9IHRoaXMuZWRpdG9yRWxlbWVudCgpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgaWYgKHRhcmdldCA9PT0gZWRpdG9yRWxlbWVudCB8fCB0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYXRlLWNvbnRlbnRcIikpIHtcbiAgICAgIC8vIEludGVyYWN0aW9uIGluIHRoZSBlbXB0eSBzcGFjZSwgcG9zaXRpb24gdGhlIGN1cnNvciBhdCB0aGUgZW5kXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgeyBkb2MgfSA9IGVkaXRvci5zdGF0ZTtcbiAgICAgICAgY29uc3QgZW5kUG9zID0gZG9jLmNvbnRlbnQuc2l6ZTtcbiAgICAgICAgZWRpdG9yLmNvbW1hbmRzLnNldFRleHRTZWxlY3Rpb24oZW5kUG9zKTtcbiAgICAgICAgZWRpdG9yLmNvbW1hbmRzLmZvY3VzKCk7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICAvLyBNZXRob2RzIGZvciB0YWJsZSBlZGl0IGJ1dHRvbiAtIFJlbW92ZWQgYXMgcmVwbGFjZWQgYnkgYnViYmxlIG1lbnVcbn1cbiJdfQ==