ngx-touch-keyboard 4.2.0 → 4.3.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.
package/README.md CHANGED
@@ -71,6 +71,10 @@ Add the directive to your input elements:
71
71
  <input ngxTouchKeyboard [(ngxTouchKeyboardOpen)]="isOpen">
72
72
  ```
73
73
 
74
+ ```html
75
+ <input ngxTouchKeyboard ngxTouchKeyboardOpenOnFocus>
76
+ ```
77
+
74
78
  ## API Reference
75
79
 
76
80
  ### Directives
@@ -88,6 +92,7 @@ Add the directive to your input elements:
88
92
  | Name | Type | Default | Description |
89
93
  | --------------------------------- | ------------------------ | ------- | ---------------------------------------------- |
90
94
  | `ngxTouchKeyboardOpen` | `boolean` | `false` | Controls the visibility of the keyboard |
95
+ | `ngxTouchKeyboardOpenOnFocus` | `boolean` | `false` | Open the visibility of the keyboard On focus |
91
96
  | `ngxTouchKeyboardLocale` | `Locale` | `enUS` | Sets the keyboard locale |
92
97
  | `ngxTouchKeyboardFullScreen` | `boolean` | `false` | Enables full-screen mode |
93
98
  | `ngxTouchKeyboardDebug` | `boolean` | `false` | Enables debug mode |
@@ -3,8 +3,7 @@ import { DomSanitizer } from '@angular/platform-browser';
3
3
  import { NGX_TOUCH_KEYBOARD_LOCALE } from './ngx-touch-keyboard.constants';
4
4
  import { fnButton } from './Locale/constants';
5
5
  import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/common";
7
- import * as i2 from "@angular/cdk/bidi";
6
+ import * as i1 from "@angular/cdk/bidi";
8
7
  export class NgxTouchKeyboardComponent {
9
8
  constructor() {
10
9
  this._sanitizer = inject(DomSanitizer);
@@ -497,10 +496,9 @@ export class NgxTouchKeyboardComponent {
497
496
  console.log('Caret at:', this._caretPosition, this._caretPositionEnd, event && event.target.tagName.toLowerCase(), event);
498
497
  }
499
498
  }
500
- else if (event.type === 'pointerup' && this._activeInputElement === document.activeElement) {
501
- if (this._isMouseHold) {
502
- this.handleButtonUp('');
503
- }
499
+ else if (event.type === 'pointerup' && this._activeInputElement === document.activeElement && this._isMouseHold) {
500
+ // This is needed to ensure that if the user releases the button outside of the window, the keyboard doesn't get stuck.
501
+ this.handleButtonUp('');
504
502
  return;
505
503
  }
506
504
  else if (!isKeyboard && event?.type !== 'selectionchange') {
@@ -607,11 +605,11 @@ export class NgxTouchKeyboardComponent {
607
605
  }
608
606
  }
609
607
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgxTouchKeyboardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
610
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: NgxTouchKeyboardComponent, selector: "ngx-touch-keyboard", outputs: { closePanel: "closePanel" }, host: { listeners: { "window:keyup": "handleKeyUp($event)", "window:keydown": "handleKeyDown($event)", "window:pointerup": "handleMouseUp($event)", "window:select": "handleSelect($event)", "window:selectionchange": "handleSelectionChange($event)" } }, ngImport: i0, template: "<div class=\"touch-keyboard\" [ngClass]=\"'layout-' + layoutMode + '-' + layoutName\">\r\n @for (row of locale.layouts[layoutMode + '_' + layoutName]; track row[0]; let rowIndex = $index) {\r\n <div class=\"touch-keyboard-row\">\r\n @for (key of row; track key) {\r\n <button\r\n [name]=\"key\"\r\n type=\"button\"\r\n [dir]=\"locale.dir\"\r\n class=\"touch-keyboard-key\"\r\n [ngClass]=\"[getButtonClass(key)]\"\r\n [attr.data-layout]=\"layoutMode\"\r\n (pointerup)=\"handleButtonUp(key, $event)\"\r\n (pointerdown)=\"handleButtonDown(key, $event)\"\r\n (pointercancel)=\"handleButtonUp(key, $event)\"\r\n [innerHtml]=\"getButtonDisplayName(key)\"\r\n ></button>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;inset:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:rgba(0,0,0,0);transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:#00000052}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}:root{--tk-color-text: #27272a;--tk-background: rgba(238, 238, 238, .87);--tk-background-button: rgba(255, 255, 255, .96);--tk-background-button-fn: rgba(255, 255, 255, .5);--tk-background-button-active: rgba(0, 0, 0, .04)}.dark{--tk-color-text: #ffffff;--tk-background: rgba(33, 33, 33, .87);--tk-background-button: rgba(66, 66, 66, .96);--tk-background-button-fn: rgba(66, 66, 66, .5);--tk-background-button-active: rgba(255, 255, 255, .2)}ngx-touch-keyboard{width:100%;padding:.25rem .25rem .375rem;border-radius:.375rem;touch-action:manipulation;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;justify-content:center;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:var(--tk-background);box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.ngx-touch-keyboard-fullScreen>ngx-touch-keyboard{border-radius:0}.touch-keyboard{flex:1 1 auto;max-width:840px}.touch-keyboard .touch-keyboard-row{display:flex;flex-direction:row}.touch-keyboard .touch-keyboard-row:not(:last-child){margin-bottom:.25rem}.touch-keyboard .touch-keyboard-key{width:20px;box-sizing:border-box;position:relative;-webkit-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;text-align:center;margin:0;line-height:32px;padding:.25rem;border-radius:.375rem;font-size:14px;font-weight:500;display:flex;flex-grow:1;align-items:center;justify-content:center;color:var(--tk-color-text);background-color:var(--tk-background-button);box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.touch-keyboard .touch-keyboard-key>svg{fill:var(--tk-color-text)}.touch-keyboard .touch-keyboard-key.function-key:not(.space-key){background-color:var(--tk-background-button-fn)}.touch-keyboard .touch-keyboard-key.active{background-color:var(--tk-background-button-active)!important}.touch-keyboard .touch-keyboard-key.alphabetic-key,.touch-keyboard .touch-keyboard-key.backspace-key,.touch-keyboard .touch-keyboard-key.shift-key,.touch-keyboard .touch-keyboard-key.numeric-key,.touch-keyboard .touch-keyboard-key.symbolic-key,.touch-keyboard .touch-keyboard-key.language-key,.touch-keyboard .touch-keyboard-key.search-key,.touch-keyboard .touch-keyboard-key.enter-key,.touch-keyboard .touch-keyboard-key.done-key{max-width:4rem}.touch-keyboard .touch-keyboard-key.space-key{min-width:40%}.touch-keyboard .touch-keyboard-key.hidden-key{visibility:hidden}.touch-keyboard .touch-keyboard-key[data-layout=numeric],.touch-keyboard .touch-keyboard-key[data-layout=decimal],.touch-keyboard .touch-keyboard-key[data-layout=tel]{width:24.33%!important;max-width:none!important}.touch-keyboard .touch-keyboard-key[data-layout=numeric].function-key,.touch-keyboard .touch-keyboard-key[data-layout=decimal].function-key,.touch-keyboard .touch-keyboard-key[data-layout=tel].function-key{max-width:24.33%!important}.touch-keyboard .touch-keyboard-key:not(:last-child){margin-right:.25rem}@media (min-width: 600px){.touch-keyboard .touch-keyboard-key.alphabetic-key,.touch-keyboard .touch-keyboard-key.backspace-key,.touch-keyboard .touch-keyboard-key.shift-key,.touch-keyboard .touch-keyboard-key.numeric-key,.touch-keyboard .touch-keyboard-key.symbolic-key,.touch-keyboard .touch-keyboard-key.language-key,.touch-keyboard .touch-keyboard-key.search-key,.touch-keyboard .touch-keyboard-key.enter-key,.touch-keyboard .touch-keyboard-key.done-key{max-width:6rem}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
608
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: NgxTouchKeyboardComponent, selector: "ngx-touch-keyboard", outputs: { closePanel: "closePanel" }, host: { listeners: { "window:keyup": "handleKeyUp($event)", "window:keydown": "handleKeyDown($event)", "window:pointerup": "handleMouseUp($event)", "window:select": "handleSelect($event)", "window:selectionchange": "handleSelectionChange($event)" } }, ngImport: i0, template: "<div class=\"touch-keyboard\" [class]=\"'layout-' + layoutMode + '-' + layoutName\">\r\n @for (row of locale.layouts[layoutMode + \"_\" + layoutName]; track row[0]; let rowIndex = $index) {\r\n <div class=\"touch-keyboard-row\">\r\n @for (key of row; track key) {\r\n <button\r\n [name]=\"key\"\r\n type=\"button\"\r\n [dir]=\"locale.dir\"\r\n class=\"touch-keyboard-key\"\r\n [class]=\"getButtonClass(key)\"\r\n [attr.data-layout]=\"layoutMode\"\r\n (pointerup)=\"handleButtonUp(key, $event)\"\r\n (pointerdown)=\"handleButtonDown(key, $event)\"\r\n (pointercancel)=\"handleButtonUp(key, $event)\"\r\n [innerHtml]=\"getButtonDisplayName(key)\"\r\n ></button>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;inset:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:rgba(0,0,0,0);transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:#00000052}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}:root{--tk-color-text: #27272a;--tk-background: rgba(238, 238, 238, .87);--tk-background-button: rgba(255, 255, 255, .96);--tk-background-button-fn: rgba(255, 255, 255, .5);--tk-background-button-active: rgba(0, 0, 0, .04)}.dark{--tk-color-text: #ffffff;--tk-background: rgba(33, 33, 33, .87);--tk-background-button: rgba(66, 66, 66, .96);--tk-background-button-fn: rgba(66, 66, 66, .5);--tk-background-button-active: rgba(255, 255, 255, .2)}ngx-touch-keyboard{width:100%;padding:.25rem .25rem .375rem;border-radius:.375rem;touch-action:manipulation;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;justify-content:center;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:var(--tk-background);box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.ngx-touch-keyboard-fullScreen>ngx-touch-keyboard{border-radius:0}.touch-keyboard{flex:1 1 auto;max-width:840px}.touch-keyboard .touch-keyboard-row{display:flex;flex-direction:row}.touch-keyboard .touch-keyboard-row:not(:last-child){margin-bottom:.25rem}.touch-keyboard .touch-keyboard-key{width:20px;box-sizing:border-box;position:relative;-webkit-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;text-align:center;margin:0;line-height:32px;padding:.25rem;border-radius:.375rem;font-size:14px;font-weight:500;display:flex;flex-grow:1;align-items:center;justify-content:center;color:var(--tk-color-text);background-color:var(--tk-background-button);box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.touch-keyboard .touch-keyboard-key>svg{fill:var(--tk-color-text)}.touch-keyboard .touch-keyboard-key.function-key:not(.space-key){background-color:var(--tk-background-button-fn)}.touch-keyboard .touch-keyboard-key.active{background-color:var(--tk-background-button-active)!important}.touch-keyboard .touch-keyboard-key.alphabetic-key,.touch-keyboard .touch-keyboard-key.backspace-key,.touch-keyboard .touch-keyboard-key.shift-key,.touch-keyboard .touch-keyboard-key.numeric-key,.touch-keyboard .touch-keyboard-key.symbolic-key,.touch-keyboard .touch-keyboard-key.language-key,.touch-keyboard .touch-keyboard-key.search-key,.touch-keyboard .touch-keyboard-key.enter-key,.touch-keyboard .touch-keyboard-key.done-key{max-width:4rem}.touch-keyboard .touch-keyboard-key.space-key{min-width:40%}.touch-keyboard .touch-keyboard-key.hidden-key{visibility:hidden}.touch-keyboard .touch-keyboard-key[data-layout=numeric],.touch-keyboard .touch-keyboard-key[data-layout=decimal],.touch-keyboard .touch-keyboard-key[data-layout=tel]{width:24.33%!important;max-width:none!important}.touch-keyboard .touch-keyboard-key[data-layout=numeric].function-key,.touch-keyboard .touch-keyboard-key[data-layout=decimal].function-key,.touch-keyboard .touch-keyboard-key[data-layout=tel].function-key{max-width:24.33%!important}.touch-keyboard .touch-keyboard-key:not(:last-child){margin-right:.25rem}@media (min-width: 600px){.touch-keyboard .touch-keyboard-key.alphabetic-key,.touch-keyboard .touch-keyboard-key.backspace-key,.touch-keyboard .touch-keyboard-key.shift-key,.touch-keyboard .touch-keyboard-key.numeric-key,.touch-keyboard .touch-keyboard-key.symbolic-key,.touch-keyboard .touch-keyboard-key.language-key,.touch-keyboard .touch-keyboard-key.search-key,.touch-keyboard .touch-keyboard-key.enter-key,.touch-keyboard .touch-keyboard-key.done-key{max-width:6rem}}\n"], dependencies: [{ kind: "directive", type: i1.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
611
609
  }
612
610
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgxTouchKeyboardComponent, decorators: [{
613
611
  type: Component,
614
- args: [{ selector: 'ngx-touch-keyboard', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"touch-keyboard\" [ngClass]=\"'layout-' + layoutMode + '-' + layoutName\">\r\n @for (row of locale.layouts[layoutMode + '_' + layoutName]; track row[0]; let rowIndex = $index) {\r\n <div class=\"touch-keyboard-row\">\r\n @for (key of row; track key) {\r\n <button\r\n [name]=\"key\"\r\n type=\"button\"\r\n [dir]=\"locale.dir\"\r\n class=\"touch-keyboard-key\"\r\n [ngClass]=\"[getButtonClass(key)]\"\r\n [attr.data-layout]=\"layoutMode\"\r\n (pointerup)=\"handleButtonUp(key, $event)\"\r\n (pointerdown)=\"handleButtonDown(key, $event)\"\r\n (pointercancel)=\"handleButtonUp(key, $event)\"\r\n [innerHtml]=\"getButtonDisplayName(key)\"\r\n ></button>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;inset:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:rgba(0,0,0,0);transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:#00000052}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}:root{--tk-color-text: #27272a;--tk-background: rgba(238, 238, 238, .87);--tk-background-button: rgba(255, 255, 255, .96);--tk-background-button-fn: rgba(255, 255, 255, .5);--tk-background-button-active: rgba(0, 0, 0, .04)}.dark{--tk-color-text: #ffffff;--tk-background: rgba(33, 33, 33, .87);--tk-background-button: rgba(66, 66, 66, .96);--tk-background-button-fn: rgba(66, 66, 66, .5);--tk-background-button-active: rgba(255, 255, 255, .2)}ngx-touch-keyboard{width:100%;padding:.25rem .25rem .375rem;border-radius:.375rem;touch-action:manipulation;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;justify-content:center;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:var(--tk-background);box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.ngx-touch-keyboard-fullScreen>ngx-touch-keyboard{border-radius:0}.touch-keyboard{flex:1 1 auto;max-width:840px}.touch-keyboard .touch-keyboard-row{display:flex;flex-direction:row}.touch-keyboard .touch-keyboard-row:not(:last-child){margin-bottom:.25rem}.touch-keyboard .touch-keyboard-key{width:20px;box-sizing:border-box;position:relative;-webkit-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;text-align:center;margin:0;line-height:32px;padding:.25rem;border-radius:.375rem;font-size:14px;font-weight:500;display:flex;flex-grow:1;align-items:center;justify-content:center;color:var(--tk-color-text);background-color:var(--tk-background-button);box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.touch-keyboard .touch-keyboard-key>svg{fill:var(--tk-color-text)}.touch-keyboard .touch-keyboard-key.function-key:not(.space-key){background-color:var(--tk-background-button-fn)}.touch-keyboard .touch-keyboard-key.active{background-color:var(--tk-background-button-active)!important}.touch-keyboard .touch-keyboard-key.alphabetic-key,.touch-keyboard .touch-keyboard-key.backspace-key,.touch-keyboard .touch-keyboard-key.shift-key,.touch-keyboard .touch-keyboard-key.numeric-key,.touch-keyboard .touch-keyboard-key.symbolic-key,.touch-keyboard .touch-keyboard-key.language-key,.touch-keyboard .touch-keyboard-key.search-key,.touch-keyboard .touch-keyboard-key.enter-key,.touch-keyboard .touch-keyboard-key.done-key{max-width:4rem}.touch-keyboard .touch-keyboard-key.space-key{min-width:40%}.touch-keyboard .touch-keyboard-key.hidden-key{visibility:hidden}.touch-keyboard .touch-keyboard-key[data-layout=numeric],.touch-keyboard .touch-keyboard-key[data-layout=decimal],.touch-keyboard .touch-keyboard-key[data-layout=tel]{width:24.33%!important;max-width:none!important}.touch-keyboard .touch-keyboard-key[data-layout=numeric].function-key,.touch-keyboard .touch-keyboard-key[data-layout=decimal].function-key,.touch-keyboard .touch-keyboard-key[data-layout=tel].function-key{max-width:24.33%!important}.touch-keyboard .touch-keyboard-key:not(:last-child){margin-right:.25rem}@media (min-width: 600px){.touch-keyboard .touch-keyboard-key.alphabetic-key,.touch-keyboard .touch-keyboard-key.backspace-key,.touch-keyboard .touch-keyboard-key.shift-key,.touch-keyboard .touch-keyboard-key.numeric-key,.touch-keyboard .touch-keyboard-key.symbolic-key,.touch-keyboard .touch-keyboard-key.language-key,.touch-keyboard .touch-keyboard-key.search-key,.touch-keyboard .touch-keyboard-key.enter-key,.touch-keyboard .touch-keyboard-key.done-key{max-width:6rem}}\n"] }]
612
+ args: [{ selector: 'ngx-touch-keyboard', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"touch-keyboard\" [class]=\"'layout-' + layoutMode + '-' + layoutName\">\r\n @for (row of locale.layouts[layoutMode + \"_\" + layoutName]; track row[0]; let rowIndex = $index) {\r\n <div class=\"touch-keyboard-row\">\r\n @for (key of row; track key) {\r\n <button\r\n [name]=\"key\"\r\n type=\"button\"\r\n [dir]=\"locale.dir\"\r\n class=\"touch-keyboard-key\"\r\n [class]=\"getButtonClass(key)\"\r\n [attr.data-layout]=\"layoutMode\"\r\n (pointerup)=\"handleButtonUp(key, $event)\"\r\n (pointerdown)=\"handleButtonDown(key, $event)\"\r\n (pointercancel)=\"handleButtonUp(key, $event)\"\r\n [innerHtml]=\"getButtonDisplayName(key)\"\r\n ></button>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;inset:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:rgba(0,0,0,0);transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:#00000052}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}:root{--tk-color-text: #27272a;--tk-background: rgba(238, 238, 238, .87);--tk-background-button: rgba(255, 255, 255, .96);--tk-background-button-fn: rgba(255, 255, 255, .5);--tk-background-button-active: rgba(0, 0, 0, .04)}.dark{--tk-color-text: #ffffff;--tk-background: rgba(33, 33, 33, .87);--tk-background-button: rgba(66, 66, 66, .96);--tk-background-button-fn: rgba(66, 66, 66, .5);--tk-background-button-active: rgba(255, 255, 255, .2)}ngx-touch-keyboard{width:100%;padding:.25rem .25rem .375rem;border-radius:.375rem;touch-action:manipulation;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;justify-content:center;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:var(--tk-background);box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.ngx-touch-keyboard-fullScreen>ngx-touch-keyboard{border-radius:0}.touch-keyboard{flex:1 1 auto;max-width:840px}.touch-keyboard .touch-keyboard-row{display:flex;flex-direction:row}.touch-keyboard .touch-keyboard-row:not(:last-child){margin-bottom:.25rem}.touch-keyboard .touch-keyboard-key{width:20px;box-sizing:border-box;position:relative;-webkit-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;text-align:center;margin:0;line-height:32px;padding:.25rem;border-radius:.375rem;font-size:14px;font-weight:500;display:flex;flex-grow:1;align-items:center;justify-content:center;color:var(--tk-color-text);background-color:var(--tk-background-button);box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.touch-keyboard .touch-keyboard-key>svg{fill:var(--tk-color-text)}.touch-keyboard .touch-keyboard-key.function-key:not(.space-key){background-color:var(--tk-background-button-fn)}.touch-keyboard .touch-keyboard-key.active{background-color:var(--tk-background-button-active)!important}.touch-keyboard .touch-keyboard-key.alphabetic-key,.touch-keyboard .touch-keyboard-key.backspace-key,.touch-keyboard .touch-keyboard-key.shift-key,.touch-keyboard .touch-keyboard-key.numeric-key,.touch-keyboard .touch-keyboard-key.symbolic-key,.touch-keyboard .touch-keyboard-key.language-key,.touch-keyboard .touch-keyboard-key.search-key,.touch-keyboard .touch-keyboard-key.enter-key,.touch-keyboard .touch-keyboard-key.done-key{max-width:4rem}.touch-keyboard .touch-keyboard-key.space-key{min-width:40%}.touch-keyboard .touch-keyboard-key.hidden-key{visibility:hidden}.touch-keyboard .touch-keyboard-key[data-layout=numeric],.touch-keyboard .touch-keyboard-key[data-layout=decimal],.touch-keyboard .touch-keyboard-key[data-layout=tel]{width:24.33%!important;max-width:none!important}.touch-keyboard .touch-keyboard-key[data-layout=numeric].function-key,.touch-keyboard .touch-keyboard-key[data-layout=decimal].function-key,.touch-keyboard .touch-keyboard-key[data-layout=tel].function-key{max-width:24.33%!important}.touch-keyboard .touch-keyboard-key:not(:last-child){margin-right:.25rem}@media (min-width: 600px){.touch-keyboard .touch-keyboard-key.alphabetic-key,.touch-keyboard .touch-keyboard-key.backspace-key,.touch-keyboard .touch-keyboard-key.shift-key,.touch-keyboard .touch-keyboard-key.numeric-key,.touch-keyboard .touch-keyboard-key.symbolic-key,.touch-keyboard .touch-keyboard-key.language-key,.touch-keyboard .touch-keyboard-key.search-key,.touch-keyboard .touch-keyboard-key.enter-key,.touch-keyboard .touch-keyboard-key.done-key{max-width:6rem}}\n"] }]
615
613
  }], propDecorators: { handleKeyUp: [{
616
614
  type: HostListener,
617
615
  args: ['window:keyup', ['$event']]
@@ -628,4 +626,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
628
626
  type: HostListener,
629
627
  args: ['window:selectionchange', ['$event']]
630
628
  }] } });
631
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRvdWNoLWtleWJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10b3VjaC1rZXlib2FyZC9zcmMvbGliL25neC10b3VjaC1rZXlib2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdG91Y2gta2V5Ym9hcmQvc3JjL2xpYi9uZ3gtdG91Y2gta2V5Ym9hcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFFbkUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7O0FBVTlDLE1BQU0sT0FBTyx5QkFBeUI7SUFQdEM7UUFRVSxlQUFVLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2xDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLENBQUEsVUFBNEIsQ0FBQSxDQUFDLENBQUM7UUFDbkQsbUJBQWMsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUUzRCxXQUFNLEdBQVcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNyQyxlQUFVLEdBQUcsTUFBTSxDQUFDO1FBQ3BCLGVBQVUsR0FBRyxZQUFZLENBQUM7UUFDMUIsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUVkLGVBQVUsR0FBRyxNQUFNLEVBQVEsQ0FBQztRQUVwQix1QkFBa0IsR0FBRyxRQUFRLENBQUM7UUFJOUIsbUJBQWMsR0FBa0IsSUFBSSxDQUFDO1FBQ3JDLHNCQUFpQixHQUFrQixJQUFJLENBQUM7UUFpSWhEOztXQUVHO1FBQ0gscUJBQWdCLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztLQXFoQjVHO0lBdHBCQyx3R0FBd0c7SUFDeEcsY0FBYztJQUNkLHdHQUF3RztJQUV4Rzs7T0FFRztJQUNILElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixFQUFFLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLEtBQUssVUFBVSxDQUFDO0lBQ3ZELENBQUM7SUFFRCx3R0FBd0c7SUFDeEcsc0JBQXNCO0lBQ3RCLHdHQUF3RztJQUV4Rzs7T0FFRztJQUVILFdBQVcsQ0FBQyxLQUFvQjtRQUM5QixJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFFSCxhQUFhLENBQUMsS0FBb0I7UUFDaEMsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFFSCxhQUFhLENBQUMsS0FBbUI7UUFDL0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUVILFlBQVksQ0FBQyxLQUFZO1FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7O09BRUc7SUFFSCxxQkFBcUIsQ0FBQyxLQUFZO1FBQ2hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsd0dBQXdHO0lBQ3hHLG1CQUFtQjtJQUNuQix3R0FBd0c7SUFFeEc7Ozs7T0FJRztJQUNILFNBQVMsQ0FBQyxRQUFnQixJQUFJLENBQUMsY0FBYztRQUMzQyxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWMsQ0FBQyxLQUE2QztRQUMxRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBRWpDOztXQUVHO1FBQ0gsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFNBQVMsQ0FBQztRQUN0RCxJQUFJLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDOUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDOUIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztRQUMzQixDQUFDO1FBRUQsSUFBSSxTQUFTLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDNUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDOUIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQztRQUNqQyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM5QyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUVEOztXQUVHO1FBQ0gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXZHLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFFRCx5QkFBeUI7UUFDekIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQU9EOzs7OztPQUtHO0lBQ0gsYUFBYSxDQUFDLE1BQWM7UUFDMUIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO0lBQ3pFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGNBQWMsQ0FBQyxNQUFjO1FBQzNCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkQsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLElBQUksZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBRTFCLElBQUksZUFBZSxLQUFLLGNBQWM7WUFBRSxnQkFBZ0IsR0FBRyxHQUFHLG1CQUFtQixNQUFNLENBQUM7UUFFeEYsT0FBTyxHQUFHLGVBQWUsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILG9CQUFvQixDQUFDLE1BQWM7UUFDakMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGlCQUFpQixDQUFDLE1BQWMsRUFBRSxDQUFTO1FBQ3pDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELElBQUksTUFBTSxLQUFLLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUM1RSxPQUFPO1FBQ1QsQ0FBQzthQUFNLElBQUksTUFBTSxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQThCLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM5RyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUVuRCwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ25DLG1CQUFtQjtZQUNuQixJQUFJLE1BQU0sS0FBSyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2xDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxHQUFHLFlBQVksQ0FBQyxDQUFDO1lBQ25ELENBQUM7WUFDRCxlQUFlO2lCQUNWLElBQUksTUFBTSxLQUFLLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDbkMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLFlBQVksQ0FBQyxDQUFDO1lBQzNELENBQUM7WUFDRCxhQUFhO2lCQUNSLElBQUksTUFBTSxLQUFLLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDakMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFlBQVksQ0FBQyxDQUFDO1lBQzVELENBQUM7WUFDRCxlQUFlO2lCQUNWLElBQUksTUFBTSxLQUFLLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQ3BCLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxZQUFZLENBQUMsQ0FBQztnQkFDNUQsQ0FBQztZQUNILENBQUM7WUFDRCxnQkFBZ0I7aUJBQ1gsQ0FBQztnQkFDSixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pELE9BQU87WUFDVCxDQUFDO1FBQ0gsQ0FBQztRQUNELHlCQUF5QjthQUNwQixDQUFDO1lBQ0osTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLFlBQVksQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO1lBRXhDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNyRixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsZ0JBQWdCLENBQUMsTUFBYyxFQUFFLENBQVM7UUFDeEMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBRUQsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNOOztlQUVHO1lBQ0gsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ25CLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN0QixDQUFDO1FBRUQ7O1dBRUc7UUFDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFOUIsSUFBSSxJQUFJLENBQUMsdUJBQXVCO1lBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzdFLElBQUksSUFBSSxDQUFDLFlBQVk7WUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBRXpCOztXQUVHO1FBQ0gsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUN6QyxJQUNFLElBQUksQ0FBQyxZQUFZO2dCQUNqQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLE1BQU0sS0FBSyxRQUFRLENBQUMsU0FBUyxJQUFJLE1BQU0sS0FBSyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQ2hILENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3RDLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hDLENBQUM7WUFDRCxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2xDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVSOztXQUVHO1FBQ0gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxjQUFjLENBQUMsTUFBYyxFQUFFLENBQVM7UUFDdEMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBRUQsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNOOztlQUVHO1lBQ0gsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ25CLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN0QixDQUFDO1FBRUQ7O1dBRUc7UUFDSCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUUzQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLElBQUksQ0FBQyx1QkFBdUI7WUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCLENBQUMsTUFBYztRQUM3QixJQUFJLElBQUksQ0FBQyx1QkFBdUI7WUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFFN0U7O1dBRUc7UUFDSCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDcEQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixZQUFZLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDN0MsQ0FBQztRQUNILENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCx3R0FBd0c7SUFDeEcsb0JBQW9CO0lBQ3BCLHdHQUF3RztJQUV4Rzs7Ozs7O09BTUc7SUFDSyxpQkFBaUIsQ0FBQyxRQUF1QixFQUFFLFdBQVcsR0FBRyxRQUFRO1FBQ3ZFLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO1FBQy9CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxXQUFXLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLGVBQWUsQ0FBQyxNQUFjLEVBQUUsS0FBSyxHQUFHLEtBQUs7UUFDbkQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEMsbUJBQW1CO1FBQ25CLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDO2dCQUNqQyxHQUFHLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVk7YUFDeEIsQ0FBQyxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLHFCQUFxQixDQUFDLE1BQWMsRUFBRSxLQUFLLEdBQUcsS0FBSztRQUN6RCxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBRXhDLElBQUksYUFBYSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzFCLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1YsSUFBSSxhQUFhLEdBQUcsQ0FBQztvQkFBRSxhQUFhLEdBQUcsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUNoRSxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sYUFBYSxHQUFHLGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDekMsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNLLFNBQVMsQ0FBQyxNQUFjLEVBQUUsUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxHQUFHLEtBQUs7UUFDeEcsSUFBSSxRQUFRLEtBQUssQ0FBQyxJQUFJLFdBQVcsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUM7UUFFWCxJQUFJLFFBQVEsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUM3QixJQUFJLFlBQVksQ0FBQztZQUNqQixJQUFJLFlBQVksQ0FBQztZQUNqQixNQUFNLGVBQWUsR0FBRyxtQ0FBbUMsQ0FBQztZQUU1RDs7O2VBR0c7WUFDSCxJQUFJLFFBQVEsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLFlBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ3hELFlBQVksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUVuRCxJQUFJLFlBQVksRUFBRSxDQUFDO29CQUNqQixNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3hFLElBQUksU0FBUzt3QkFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDL0MsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDeEUsSUFBSSxTQUFTO3dCQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUMvQyxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLFlBQVksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUVuRCxJQUFJLFlBQVksRUFBRSxDQUFDO29CQUNqQixNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDN0IsSUFBSSxTQUFTO3dCQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUMvQyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzdCLElBQUksU0FBUzt3QkFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDL0MsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQy9ELElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25DLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ssWUFBWSxDQUNsQixNQUFjLEVBQ2QsR0FBVyxFQUNYLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUN4QixXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFDM0IsU0FBUyxHQUFHLEtBQUs7UUFFakIsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzdELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQztRQUVYLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ3hCLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDOUUsSUFBSSxTQUFTO2dCQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssZUFBZSxDQUFDLE1BQWM7UUFDcEMsSUFBSSxHQUFHLEVBQUUsSUFBSSxDQUFDO1FBQ2QsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNqRCxrQkFBa0I7WUFDbEIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdkQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRCxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2IsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLEdBQUcsTUFBTSxDQUFDO1lBQ2IsSUFBSSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7UUFDNUYsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFzQjtZQUNuQyxPQUFPLEVBQUUsSUFBSTtZQUNiLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLE9BQU87WUFDcEMsR0FBRyxFQUFFLEdBQUc7WUFDUixJQUFJLEVBQUUsSUFBSTtZQUNWLFFBQVEsRUFBRSxDQUFDO1NBQ1osQ0FBQztRQUVGLDZDQUE2QztRQUM3QyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsYUFBYSxDQUFDLElBQUksYUFBYSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxhQUFhLENBQUMsSUFBSSxhQUFhLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDbEYsSUFBSSxDQUFDLG1CQUFtQixFQUFFLGFBQWEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxhQUFhLENBQUMsSUFBSSxhQUFhLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFFL0UseUJBQXlCO1FBQ3pCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLGtCQUFrQixDQUFDLEtBQVU7UUFDbkMsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN6QixhQUFhLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckQsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUNmLGFBQWEsS0FBSyxVQUFVO1lBQzVCLENBQUMsYUFBYSxLQUFLLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUVuSCxNQUFNLFVBQVUsR0FDZCxLQUFLLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYTtZQUMvQyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRTFFLElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDNUQ7OztlQUdHO1lBQ0gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFL0UsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FDVCxXQUFXLEVBQ1gsSUFBSSxDQUFDLGNBQWMsRUFDbkIsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQzNDLEtBQUssQ0FDTixDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDN0YsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUIsQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO2FBQU0sSUFBSSxDQUFDLFVBQVUsSUFBSSxLQUFLLEVBQUUsSUFBSSxLQUFLLGlCQUFpQixFQUFFLENBQUM7WUFDNUQ7O2VBRUc7WUFDSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFN0IsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsS0FBSyxFQUFFLElBQUksU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzNFLENBQUM7WUFFRDs7ZUFFRztZQUNILElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssaUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyx1QkFBdUIsQ0FBQyxLQUFvQjtRQUNsRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEQ7O1dBRUc7UUFDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0sscUJBQXFCLENBQUMsS0FBb0I7UUFDaEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hEOztXQUVHO1FBQ0gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLHFCQUFxQixDQUFDLEtBQW9CO1FBQ2hELElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFFdEMsSUFDRSxLQUFLLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUN4QixLQUFLLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUN6QixLQUFLLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQztZQUM1QixLQUFLLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUMzQixLQUFLLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUN2QixDQUFDO1lBQ0QsTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUNuQyxDQUFDO2FBQU0sSUFBSSxLQUFLLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVGLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDbEMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDM0IsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzVELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssZ0JBQWdCLENBQUMsVUFBa0I7UUFDekMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pHLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM5QyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxtQkFBbUIsQ0FBQyxVQUFtQjtRQUM3QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1RSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN6QyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ2pELENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3JELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzs4R0F6cUJVLHlCQUF5QjtrR0FBekIseUJBQXlCLDZWQ3RCdEMsZ3dCQW9CQTs7MkZERWEseUJBQXlCO2tCQVByQyxTQUFTOytCQUNFLG9CQUFvQixpQkFHZixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNOzhCQWdEL0MsV0FBVztzQkFEVixZQUFZO3VCQUFDLGNBQWMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFZeEMsYUFBYTtzQkFEWixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVcxQyxhQUFhO3NCQURaLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUzVDLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBU3pDLHFCQUFxQjtzQkFEcEIsWUFBWTt1QkFBQyx3QkFBd0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIGluamVjdCxcclxuICBvdXRwdXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuXHJcbmltcG9ydCB7IE5HWF9UT1VDSF9LRVlCT0FSRF9MT0NBTEUgfSBmcm9tICcuL25neC10b3VjaC1rZXlib2FyZC5jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBmbkJ1dHRvbiB9IGZyb20gJy4vTG9jYWxlL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IExvY2FsZSB9IGZyb20gJy4vTG9jYWxlL3R5cGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZ3gtdG91Y2gta2V5Ym9hcmQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9uZ3gtdG91Y2gta2V5Ym9hcmQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25neC10b3VjaC1rZXlib2FyZC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hUb3VjaEtleWJvYXJkQ29tcG9uZW50IHtcclxuICBwcml2YXRlIF9zYW5pdGl6ZXIgPSBpbmplY3QoRG9tU2FuaXRpemVyKTtcclxuICBwcml2YXRlIF9lbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4pO1xyXG4gIHByaXZhdGUgX2RlZmF1bHRMb2NhbGUgPSBpbmplY3QoTkdYX1RPVUNIX0tFWUJPQVJEX0xPQ0FMRSk7XHJcblxyXG4gIGxvY2FsZTogTG9jYWxlID0gdGhpcy5fZGVmYXVsdExvY2FsZTtcclxuICBsYXlvdXRNb2RlID0gJ3RleHQnO1xyXG4gIGxheW91dE5hbWUgPSAnYWxwaGFiZXRpYyc7XHJcbiAgZGVidWcgPSBmYWxzZTtcclxuXHJcbiAgY2xvc2VQYW5lbCA9IG91dHB1dDx2b2lkPigpO1xyXG5cclxuICBwcml2YXRlIF9hY3RpdmVCdXR0b25DbGFzcyA9ICdhY3RpdmUnO1xyXG4gIHByaXZhdGUgX2hvbGRJbnRlcmFjdGlvblRpbWVvdXQhOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfaG9sZFRpbWVvdXQhOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfaXNNb3VzZUhvbGQhOiBib29sZWFuO1xyXG4gIHByaXZhdGUgX2NhcmV0UG9zaXRpb246IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgX2NhcmV0UG9zaXRpb25FbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgX2FjdGl2ZUlucHV0RWxlbWVudCE6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50IHwgbnVsbDtcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBAIEFjY2Vzc29yc1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHRlciBmb3IgbWF4TGVuZ3RoXHJcbiAgICovXHJcbiAgZ2V0IG1heExlbmd0aCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZUlucHV0RWxlbWVudD8ubWF4TGVuZ3RoID8/IC0xO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0dGVyIGZvciB0eXBlIG9mIGlucHV0XHJcbiAgICovXHJcbiAgZ2V0IGlzVGV4dGFyZWEoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlSW5wdXRFbGVtZW50Py50eXBlID09PSAndGV4dGFyZWEnO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBAIERlY29yYXRlZCBtZXRob2RzXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLyoqXHJcbiAgICogT24ga2V5dXBcclxuICAgKi9cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5dXAnLCBbJyRldmVudCddKVxyXG4gIGhhbmRsZUtleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoZXZlbnQuaXNUcnVzdGVkKSB7XHJcbiAgICAgIHRoaXMuX2NhcmV0RXZlbnRIYW5kbGVyKGV2ZW50KTtcclxuICAgICAgdGhpcy5faGFuZGxlSGlnaGxpZ2h0S2V5VXAoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT24ga2V5ZG93blxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXlkb3duJywgWyckZXZlbnQnXSlcclxuICBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoZXZlbnQuaXNUcnVzdGVkKSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUhpZ2hsaWdodEtleURvd24oZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT24gcG9pbnRlcnVwIChtb3VzZXVwIG9yIHRvdWNoZW5kKVxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpwb2ludGVydXAnLCBbJyRldmVudCddKVxyXG4gIGhhbmRsZU1vdXNlVXAoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY2FyZXRFdmVudEhhbmRsZXIoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT24gc2VsZWN0XHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNlbGVjdCcsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlU2VsZWN0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY2FyZXRFdmVudEhhbmRsZXIoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT24gc2VsZWN0aW9uY2hhbmdlXHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNlbGVjdGlvbmNoYW5nZScsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY2FyZXRFdmVudEhhbmRsZXIoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBAIFB1YmxpYyBtZXRob2RzXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGxvY2FsZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHZhbHVlIExvY2FsZVxyXG4gICAqL1xyXG4gIHNldExvY2FsZSh2YWx1ZTogTG9jYWxlID0gdGhpcy5fZGVmYXVsdExvY2FsZSk6IHZvaWQge1xyXG4gICAgaWYgKCEodmFsdWUgJiYgdmFsdWUubGF5b3V0cykpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb2NhbGUgaXMgbm90IGRlZmluZWQnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvY2FsZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGFjdGl2ZSBpbnB1dFxyXG4gICAqXHJcbiAgICogQHBhcmFtIGlucHV0IElucHV0IG5hdGl2ZSBlbGVtZW50XHJcbiAgICovXHJcbiAgc2V0QWN0aXZlSW5wdXQoaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQgPSBpbnB1dDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYWNraW5nIGtleWJvYXJkIGxheW91dFxyXG4gICAgICovXHJcbiAgICBjb25zdCBpbnB1dE1vZGUgPSB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQ/LmlucHV0TW9kZTtcclxuICAgIGlmIChpbnB1dE1vZGUgJiYgWyd0ZXh0JywgJ3NlYXJjaCcsICdlbWFpbCcsICd1cmwnLCAnbnVtZXJpYycsICdkZWNpbWFsJywgJ3RlbCddLnNvbWUoKGkpID0+IGkgPT09IGlucHV0TW9kZSkpIHtcclxuICAgICAgdGhpcy5sYXlvdXRNb2RlID0gaW5wdXRNb2RlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5sYXlvdXRNb2RlID0gJ3RleHQnO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbnB1dE1vZGUgJiYgWydudW1lcmljJywgJ2RlY2ltYWwnLCAndGVsJ10uc29tZSgoaSkgPT4gaSA9PT0gaW5wdXRNb2RlKSkge1xyXG4gICAgICB0aGlzLmxheW91dE5hbWUgPSAnZGVmYXVsdCc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxheW91dE5hbWUgPSAnYWxwaGFiZXRpYyc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0xvY2FsZTonLCBgJHt0aGlzLmxvY2FsZS5jb2RlfWApO1xyXG4gICAgICBjb25zb2xlLmxvZygnTGF5b3V0OicsIGAke3RoaXMubGF5b3V0TW9kZX1fJHt0aGlzLmxheW91dE5hbWV9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiB3ZSBtdXN0IGVuc3VyZSBjYXJldFBvc2l0aW9uIGRvZXNuJ3QgcGVyc2lzdCBvbmNlIHJlYWN0aXZhdGVkLlxyXG4gICAgICovXHJcbiAgICB0aGlzLl9zZXRDYXJldFBvc2l0aW9uKHRoaXMuX2FjdGl2ZUlucHV0RWxlbWVudC5zZWxlY3Rpb25TdGFydCwgdGhpcy5fYWN0aXZlSW5wdXRFbGVtZW50LnNlbGVjdGlvbkVuZCk7XHJcblxyXG4gICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0NhcmV0IHN0YXJ0IGF0OicsIHRoaXMuX2NhcmV0UG9zaXRpb24sIHRoaXMuX2NhcmV0UG9zaXRpb25FbmQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFuZCBzZXQgZm9jdXMgdG8gaW5wdXRcclxuICAgIHRoaXMuX2ZvY3VzQWN0aXZlSW5wdXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIGJ1dHRvbiBpcyBhIHN0YW5kYXJkIGJ1dHRvblxyXG4gICAqL1xyXG4gIGlzU3RhbmRhcmRCdXR0b24gPSAoYnV0dG9uOiBzdHJpbmcpID0+IGJ1dHRvbiAmJiAhKGJ1dHRvblswXSA9PT0gJ3snICYmIGJ1dHRvbltidXR0b24ubGVuZ3RoIC0gMV0gPT09ICd9Jyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIGJ1dHRvbiB0eXBlXHJcbiAgICpcclxuICAgKiBAcGFyYW0gYnV0dG9uIFRoZSBidXR0b24ncyBsYXlvdXQgbmFtZVxyXG4gICAqIEByZXR1cm4gVGhlIGJ1dHRvbiB0eXBlXHJcbiAgICovXHJcbiAgZ2V0QnV0dG9uVHlwZShidXR0b246IHN0cmluZyk6ICdzdGFuZGFyZC1rZXknIHwgJ2Z1bmN0aW9uLWtleScge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNTdGFuZGFyZEJ1dHRvbihidXR0b24pID8gJ3N0YW5kYXJkLWtleScgOiAnZnVuY3Rpb24ta2V5JztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgZGVmYXVsdCBjbGFzc2VzIHRvIGEgZ2l2ZW4gYnV0dG9uXHJcbiAgICpcclxuICAgKiBAcGFyYW0gYnV0dG9uIFRoZSBidXR0b24ncyBsYXlvdXQgbmFtZVxyXG4gICAqIEByZXR1cm4gVGhlIGNsYXNzZXMgdG8gYmUgYWRkZWQgdG8gdGhlIGJ1dHRvblxyXG4gICAqL1xyXG4gIGdldEJ1dHRvbkNsYXNzKGJ1dHRvbjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGJ1dHRvblR5cGVDbGFzcyA9IHRoaXMuZ2V0QnV0dG9uVHlwZShidXR0b24pO1xyXG4gICAgY29uc3QgYnV0dG9uV2l0aG91dEJyYWNlcyA9IGJ1dHRvbi5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7XHJcbiAgICBsZXQgYnV0dG9uTm9ybWFsaXplZCA9ICcnO1xyXG5cclxuICAgIGlmIChidXR0b25UeXBlQ2xhc3MgIT09ICdzdGFuZGFyZC1rZXknKSBidXR0b25Ob3JtYWxpemVkID0gYCR7YnV0dG9uV2l0aG91dEJyYWNlc30ta2V5YDtcclxuXHJcbiAgICByZXR1cm4gYCR7YnV0dG9uVHlwZUNsYXNzfSAke2J1dHRvbk5vcm1hbGl6ZWR9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGRpc3BsYXkgKGxhYmVsKSBuYW1lIGZvciBhIGdpdmVuIGJ1dHRvblxyXG4gICAqXHJcbiAgICogQHBhcmFtIGJ1dHRvbiBUaGUgYnV0dG9uJ3MgbGF5b3V0IG5hbWVcclxuICAgKiBAcmV0dXJuIFRoZSBkaXNwbGF5IG5hbWUgdG8gYmUgc2hvdyB0byB0aGUgYnV0dG9uXHJcbiAgICovXHJcbiAgZ2V0QnV0dG9uRGlzcGxheU5hbWUoYnV0dG9uOiBzdHJpbmcpOiBTYWZlSHRtbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHRoaXMubG9jYWxlLmRpc3BsYXlbYnV0dG9uXSB8fCBidXR0b24pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBjbGlja3MgbWFkZSB0byBrZXlib2FyZCBidXR0b25zXHJcbiAgICpcclxuICAgKiBAcGFyYW0gYnV0dG9uIFRoZSBidXR0b24gbGF5b3V0IG5hbWUuXHJcbiAgICogQHBhcmFtIGV2ZW50IFRoZSBidXR0b24gZXZlbnQuXHJcbiAgICovXHJcbiAgaGFuZGxlQnV0dG9uUHJlc3MoYnV0dG9uOiBzdHJpbmcsIGU/OiBFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0tleSBwcmVzczonLCBidXR0b24pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChidXR0b24gPT09IGZuQnV0dG9uLlNISUZUKSB7XHJcbiAgICAgIHRoaXMubGF5b3V0TmFtZSA9IHRoaXMubGF5b3V0TmFtZSA9PT0gJ2FscGhhYmV0aWMnID8gJ3NoaWZ0JyA6ICdhbHBoYWJldGljJztcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIGlmIChidXR0b24gPT09IGZuQnV0dG9uLkRPTkUpIHtcclxuICAgICAgdGhpcy5jbG9zZVBhbmVsLmVtaXQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbW1vblBhcmFtczogW251bWJlciwgbnVtYmVyLCBib29sZWFuXSA9IFt0aGlzLl9jYXJldFBvc2l0aW9uIHx8IDAsIHRoaXMuX2NhcmV0UG9zaXRpb25FbmQgfHwgMCwgdHJ1ZV07XHJcbiAgICBsZXQgb3V0cHV0ID0gdGhpcy5fYWN0aXZlSW5wdXRFbGVtZW50Py52YWx1ZSB8fCAnJztcclxuXHJcbiAgICAvLyBIYW5kZWwgZnVuY3Rpb25hbCBidXR0b25cclxuICAgIGlmICghdGhpcy5pc1N0YW5kYXJkQnV0dG9uKGJ1dHRvbikpIHtcclxuICAgICAgLy8gSGFuZGVsIEJBQ0tTUEFDRVxyXG4gICAgICBpZiAoYnV0dG9uID09PSBmbkJ1dHRvbi5CQUNLU1BBQ0UpIHtcclxuICAgICAgICBvdXRwdXQgPSB0aGlzLl9yZW1vdmVBdChvdXRwdXQsIC4uLmNvbW1vblBhcmFtcyk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gSGFuZGVsIFNQQUNFXHJcbiAgICAgIGVsc2UgaWYgKGJ1dHRvbiA9PT0gZm5CdXR0b24uU1BBQ0UpIHtcclxuICAgICAgICBvdXRwdXQgPSB0aGlzLl9hZGRTdHJpbmdBdChvdXRwdXQsICcgJywgLi4uY29tbW9uUGFyYW1zKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBIYW5kZWwgVEFCXHJcbiAgICAgIGVsc2UgaWYgKGJ1dHRvbiA9PT0gZm5CdXR0b24uVEFCKSB7XHJcbiAgICAgICAgb3V0cHV0ID0gdGhpcy5fYWRkU3RyaW5nQXQob3V0cHV0LCAnXFx0JywgLi4uY29tbW9uUGFyYW1zKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBIYW5kZWwgRU5URVJcclxuICAgICAgZWxzZSBpZiAoYnV0dG9uID09PSBmbkJ1dHRvbi5FTlRFUikge1xyXG4gICAgICAgIGlmICh0aGlzLmlzVGV4dGFyZWEpIHtcclxuICAgICAgICAgIG91dHB1dCA9IHRoaXMuX2FkZFN0cmluZ0F0KG91dHB1dCwgJ1xcbicsIC4uLmNvbW1vblBhcmFtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIEhhbmRlbCBMQVlPVVRcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sYXlvdXROYW1lID0gYnV0dG9uLnN1YnN0cmluZygxLCBidXR0b24ubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBIYW5kZWwgc3RhbmRhcmQgYnV0dG9uXHJcbiAgICBlbHNlIHtcclxuICAgICAgb3V0cHV0ID0gdGhpcy5fYWRkU3RyaW5nQXQob3V0cHV0LCBidXR0b24sIC4uLmNvbW1vblBhcmFtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2FjdGl2ZUlucHV0RWxlbWVudCkge1xyXG4gICAgICB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQudmFsdWUgPSBvdXRwdXQ7XHJcblxyXG4gICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDYXJldCBhdDonLCB0aGlzLl9jYXJldFBvc2l0aW9uLCB0aGlzLl9jYXJldFBvc2l0aW9uRW5kLCAnQnV0dG9uJywgZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9kaXNwYXRjaEV2ZW50cyhidXR0b24pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBidXR0b24gZG93blxyXG4gICAqXHJcbiAgICogQHBhcmFtIGJ1dHRvbiBUaGUgYnV0dG9uIGxheW91dCBuYW1lLlxyXG4gICAqIEBwYXJhbSBldmVudCBUaGUgYnV0dG9uIGV2ZW50LlxyXG4gICAqL1xyXG4gIGhhbmRsZUJ1dHRvbkRvd24oYnV0dG9uOiBzdHJpbmcsIGU/OiBFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0tleSBkb3duOicsIGJ1dHRvbik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGUpIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEhhbmRsZSBldmVudCBvcHRpb25zXHJcbiAgICAgICAqL1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYWN0aXZlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX3NldEFjdGl2ZUJ1dHRvbihidXR0b24pO1xyXG5cclxuICAgIGlmICh0aGlzLl9ob2xkSW50ZXJhY3Rpb25UaW1lb3V0KSBjbGVhclRpbWVvdXQodGhpcy5faG9sZEludGVyYWN0aW9uVGltZW91dCk7XHJcbiAgICBpZiAodGhpcy5faG9sZFRpbWVvdXQpIGNsZWFyVGltZW91dCh0aGlzLl9ob2xkVGltZW91dCk7XHJcbiAgICB0aGlzLl9pc01vdXNlSG9sZCA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaW1lIHRvIHdhaXQgdW50aWwgYSBrZXkgaG9sZCBpcyBkZXRlY3RlZFxyXG4gICAgICovXHJcbiAgICB0aGlzLl9ob2xkVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuX2lzTW91c2VIb2xkICYmXHJcbiAgICAgICAgKCghYnV0dG9uLmluY2x1ZGVzKCd7JykgJiYgIWJ1dHRvbi5pbmNsdWRlcygnfScpKSB8fCBidXR0b24gPT09IGZuQnV0dG9uLkJBQ0tTUEFDRSB8fCBidXR0b24gPT09IGZuQnV0dG9uLlNQQUNFKVxyXG4gICAgICApIHtcclxuICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0J1dHRvbiBob2xkOicsIGJ1dHRvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaGFuZGxlQnV0dG9uSG9sZChidXR0b24pO1xyXG4gICAgICB9XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9ob2xkVGltZW91dCk7XHJcbiAgICB9LCA1MDApO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGVsIGJ1dHRvbiBDbGljayBhZnRlciBidXR0b24gZG93blxyXG4gICAgICovXHJcbiAgICB0aGlzLmhhbmRsZUJ1dHRvblByZXNzKGJ1dHRvbiwgZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGJ1dHRvbiB1cFxyXG4gICAqXHJcbiAgICogQHBhcmFtIGJ1dHRvbiBUaGUgYnV0dG9uIGxheW91dCBuYW1lLlxyXG4gICAqIEBwYXJhbSBldmVudCBUaGUgYnV0dG9uIGV2ZW50LlxyXG4gICAqL1xyXG4gIGhhbmRsZUJ1dHRvblVwKGJ1dHRvbjogc3RyaW5nLCBlPzogRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRlYnVnKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdLZXkgdXA6JywgYnV0dG9uKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZSkge1xyXG4gICAgICAvKipcclxuICAgICAgICogSGFuZGxlIGV2ZW50IG9wdGlvbnNcclxuICAgICAgICovXHJcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBhY3RpdmUgY2xhc3NcclxuICAgICAqL1xyXG4gICAgdGhpcy5fcmVtb3ZlQWN0aXZlQnV0dG9uKCk7XHJcblxyXG4gICAgdGhpcy5faXNNb3VzZUhvbGQgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLl9ob2xkSW50ZXJhY3Rpb25UaW1lb3V0KSBjbGVhclRpbWVvdXQodGhpcy5faG9sZEludGVyYWN0aW9uVGltZW91dCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGJ1dHRvbiBob2xkXHJcbiAgICovXHJcbiAgaGFuZGxlQnV0dG9uSG9sZChidXR0b246IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2hvbGRJbnRlcmFjdGlvblRpbWVvdXQpIGNsZWFyVGltZW91dCh0aGlzLl9ob2xkSW50ZXJhY3Rpb25UaW1lb3V0KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRpbWVvdXQgZGljdGF0aW5nIHRoZSBzcGVlZCBvZiBrZXkgaG9sZCBpdGVyYXRpb25zXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2hvbGRJbnRlcmFjdGlvblRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLl9pc01vdXNlSG9sZCkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlQnV0dG9uUHJlc3MoYnV0dG9uKTtcclxuICAgICAgICB0aGlzLmhhbmRsZUJ1dHRvbkhvbGQoYnV0dG9uKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5faG9sZEludGVyYWN0aW9uVGltZW91dCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIEAgUHJpdmF0ZSBtZXRob2RzXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hhbmdlcyB0aGUgaW50ZXJuYWwgY2FyZXQgcG9zaXRpb25cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHBhcmFtIHBvc2l0aW9uIFRoZSBjYXJldCdzIHN0YXJ0IHBvc2l0aW9uXHJcbiAgICogQHBhcmFtIHBvc2l0aW9uRW5kIFRoZSBjYXJldCdzIGVuZCBwb3NpdGlvblxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3NldENhcmV0UG9zaXRpb24ocG9zaXRpb246IG51bWJlciB8IG51bGwsIGVuZFBvc2l0aW9uID0gcG9zaXRpb24pOiB2b2lkIHtcclxuICAgIHRoaXMuX2NhcmV0UG9zaXRpb24gPSBwb3NpdGlvbjtcclxuICAgIHRoaXMuX2NhcmV0UG9zaXRpb25FbmQgPSBlbmRQb3NpdGlvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1vdmVzIHRoZSBjdXJzb3IgcG9zaXRpb24gYnkgYSBnaXZlbiBhbW91bnRcclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHBhcmFtIGxlbmd0aCBSZXByZXNlbnRzIGJ5IGhvdyBtYW55IGNoYXJhY3RlcnMgdGhlIGlucHV0IHNob3VsZCBiZSBtb3ZlZFxyXG4gICAqIEBwYXJhbSBtaW51cyBXaGV0aGVyIHRoZSBjdXJzb3Igc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBsZWZ0IG9yIG5vdC5cclxuICAgKi9cclxuICBwcml2YXRlIF91cGRhdGVDYXJldFBvcyhsZW5ndGg6IG51bWJlciwgbWludXMgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgbmV3Q2FyZXRQb3MgPSB0aGlzLl91cGRhdGVDYXJldFBvc0FjdGlvbihsZW5ndGgsIG1pbnVzKTtcclxuICAgIHRoaXMuX3NldENhcmV0UG9zaXRpb24obmV3Q2FyZXRQb3MpO1xyXG4gICAgLy8gU2Nyb2xsIHRvIGJvdHRvbVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuX2FjdGl2ZUlucHV0RWxlbWVudD8uc2Nyb2xsVG8oe1xyXG4gICAgICAgIHRvcDogdGhpcy5fYWN0aXZlSW5wdXRFbGVtZW50LnNjcm9sbEhlaWdodCxcclxuICAgICAgfSBhcyBTY3JvbGxUb09wdGlvbnMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBY3Rpb24gbWV0aG9kIG9mIHVwZGF0ZUNhcmV0UG9zXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIEBwYXJhbSBsZW5ndGggUmVwcmVzZW50cyBieSBob3cgbWFueSBjaGFyYWN0ZXJzIHRoZSBpbnB1dCBzaG91bGQgYmUgbW92ZWRcclxuICAgKiBAcGFyYW0gbWludXMgV2hldGhlciB0aGUgY3Vyc29yIHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgbGVmdCBvciBub3QuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfdXBkYXRlQ2FyZXRQb3NBY3Rpb24obGVuZ3RoOiBudW1iZXIsIG1pbnVzID0gZmFsc2UpIHtcclxuICAgIGxldCBjYXJldFBvc2l0aW9uID0gdGhpcy5fY2FyZXRQb3NpdGlvbjtcclxuXHJcbiAgICBpZiAoY2FyZXRQb3NpdGlvbiAhPSBudWxsKSB7XHJcbiAgICAgIGlmIChtaW51cykge1xyXG4gICAgICAgIGlmIChjYXJldFBvc2l0aW9uID4gMCkgY2FyZXRQb3NpdGlvbiA9IGNhcmV0UG9zaXRpb24gLSBsZW5ndGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY2FyZXRQb3NpdGlvbiA9IGNhcmV0UG9zaXRpb24gKyBsZW5ndGg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2FyZXRQb3NpdGlvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZXMgYW4gYW1vdW50IG9mIGNoYXJhY3RlcnMgYmVmb3JlIGEgZ2l2ZW4gcG9zaXRpb25cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIGlucHV0XHJcbiAgICogQHBhcmFtIHBvc2l0aW9uIFRoZSAoY3Vyc29yKSBwb3NpdGlvbiBmcm9tIHdoZXJlIHRoZSBjaGFyYWN0ZXJzIHNob3VsZCBiZSByZW1vdmVkXHJcbiAgICogQHBhcmFtIG1vdmVDYXJldCBXaGV0aGVyIHRvIHVwZGF0ZSBpbnB1dCBjdXJzb3JcclxuICAgKi9cclxuICBwcml2YXRlIF9yZW1vdmVBdChzb3VyY2U6IHN0cmluZywgcG9zaXRpb24gPSBzb3VyY2UubGVuZ3RoLCBwb3NpdGlvbkVuZCA9IHNvdXJjZS5sZW5ndGgsIG1vdmVDYXJldCA9IGZhbHNlKSB7XHJcbiAgICBpZiAocG9zaXRpb24gPT09IDAgJiYgcG9zaXRpb25FbmQgPT09IDApIHtcclxuICAgICAgcmV0dXJuIHNvdXJjZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgb3V0cHV0O1xyXG5cclxuICAgIGlmIChwb3NpdGlvbiA9PT0gcG9zaXRpb25FbmQpIHtcclxuICAgICAgbGV0IHByZXZUd29DaGFycztcclxuICAgICAgbGV0IGVtb2ppTWF0Y2hlZDtcclxuICAgICAgY29uc3QgZW1vamlNYXRjaGVkUmVnID0gLyhbXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdKS9nO1xyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEVtb2ppcyBhcmUgbWFkZSBvdXQgb2YgdHdvIGNoYXJhY3RlcnMsIHNvIHdlIG11c3QgdGFrZSBhIGN1c3RvbSBhcHByb2FjaCB0byB0cmltIHRoZW0uXHJcbiAgICAgICAqIEZvciBtb3JlIGluZm86IGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LXVuaWNvZGVcclxuICAgICAgICovXHJcbiAgICAgIGlmIChwb3NpdGlvbiAmJiBwb3NpdGlvbiA+PSAwKSB7XHJcbiAgICAgICAgcHJldlR3b0NoYXJzID0gc291cmNlLnN1YnN0cmluZyhwb3NpdGlvbiAtIDIsIHBvc2l0aW9uKTtcclxuICAgICAgICBlbW9qaU1hdGNoZWQgPSBwcmV2VHdvQ2hhcnMubWF0Y2goZW1vamlNYXRjaGVkUmVnKTtcclxuXHJcbiAgICAgICAgaWYgKGVtb2ppTWF0Y2hlZCkge1xyXG4gICAgICAgICAgb3V0cHV0ID0gc291cmNlLnN1YnN0cmluZygwLCBwb3NpdGlvbiAtIDIpICsgc291cmNlLnN1YnN0cmluZyhwb3NpdGlvbik7XHJcbiAgICAgICAgICBpZiAobW92ZUNhcmV0KSB0aGlzLl91cGRhdGVDYXJldFBvcygyLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb3V0cHV0ID0gc291cmNlLnN1YnN0cmluZygwLCBwb3NpdGlvbiAtIDEpICsgc291cmNlLnN1YnN0cmluZyhwb3NpdGlvbik7XHJcbiAgICAgICAgICBpZiAobW92ZUNhcmV0KSB0aGlzLl91cGRhdGVDYXJldFBvcygxLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcHJldlR3b0NoYXJzID0gc291cmNlLnNsaWNlKC0yKTtcclxuICAgICAgICBlbW9qaU1hdGNoZWQgPSBwcmV2VHdvQ2hhcnMubWF0Y2goZW1vamlNYXRjaGVkUmVnKTtcclxuXHJcbiAgICAgICAgaWYgKGVtb2ppTWF0Y2hlZCkge1xyXG4gICAgICAgICAgb3V0cHV0ID0gc291cmNlLnNsaWNlKDAsIC0yKTtcclxuICAgICAgICAgIGlmIChtb3ZlQ2FyZXQpIHRoaXMuX3VwZGF0ZUNhcmV0UG9zKDIsIHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvdXRwdXQgPSBzb3VyY2Uuc2xpY2UoMCwgLTEpO1xyXG4gICAgICAgICAgaWYgKG1vdmVDYXJldCkgdGhpcy5fdXBkYXRlQ2FyZXRQb3MoMSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvdXRwdXQgPSBzb3VyY2Uuc2xpY2UoMCwgcG9zaXRpb24pICsgc291cmNlLnNsaWNlKHBvc2l0aW9uRW5kKTtcclxuICAgICAgaWYgKG1vdmVDYXJldCkge1xyXG4gICAgICAgIHRoaXMuX3NldENhcmV0UG9zaXRpb24ocG9zaXRpb24pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dHB1dDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYSBzdHJpbmcgdG8gdGhlIGlucHV0IGF0IGEgZ2l2ZW4gcG9zaXRpb25cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIGlucHV0XHJcbiAgICogQHBhcmFtIHN0ciBUaGUgc3RyaW5nIHRvIGFkZFxyXG4gICAqIEBwYXJhbSBwb3NpdGlvbiBUaGUgKGN1cnNvcikgcG9zaXRpb24gd2hlcmUgdGhlIHN0cmluZyBzaG91bGQgYmUgYWRkZWRcclxuICAgKiBAcGFyYW0gbW92ZUNhcmV0IFdoZXRoZXIgdG8gdXBkYXRlIHZpcnR1YWwta2V5Ym9hcmQgY3Vyc29yXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfYWRkU3RyaW5nQXQoXHJcbiAgICBzb3VyY2U6IHN0cmluZyxcclxuICAgIHN0cjogc3RyaW5nLFxyXG4gICAgcG9zaXRpb24gPSBzb3VyY2UubGVuZ3RoLFxyXG4gICAgcG9zaXRpb25FbmQgPSBzb3VyY2UubGVuZ3RoLFxyXG4gICAgbW92ZUNhcmV0ID0gZmFsc2VcclxuICApIHtcclxuICAgIGlmICh0aGlzLm1heExlbmd0aCAhPT0gLTEgJiYgc291cmNlLmxlbmd0aCA+PSB0aGlzLm1heExlbmd0aCkge1xyXG4gICAgICByZXR1cm4gc291cmNlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBvdXRwdXQ7XHJcblxyXG4gICAgaWYgKCFwb3NpdGlvbiAmJiBwb3NpdGlvbiAhPT0gMCkge1xyXG4gICAgICBvdXRwdXQgPSBzb3VyY2UgKyBzdHI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvdXRwdXQgPSBbc291cmNlLnNsaWNlKDAsIHBvc2l0aW9uKSwgc3RyLCBzb3VyY2Uuc2xpY2UocG9zaXRpb25FbmQpXS5qb2luKCcnKTtcclxuICAgICAgaWYgKG1vdmVDYXJldCkgdGhpcy5fdXBkYXRlQ2FyZXRQb3Moc3RyLmxlbmd0aCwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2QgdG8gZGlzcGF0Y2ggbmVjZXNzYXJ5IGtleWJvYXJkIGV2ZW50cyB0byBjdXJyZW50IGlucHV0IGVsZW1lbnQuXHJcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vdWlldmVudHMvdG9vbHMva2V5LWV2ZW50LXZpZXdlci5odG1sXHJcbiAgICpcclxuICAgKiBAcGFyYW0gYnV0dG9uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZGlzcGF0Y2hFdmVudHMoYnV0dG9uOiBzdHJpbmcpIHtcclxuICAgIGxldCBrZXksIGNvZGU7XHJcbiAgICBpZiAoYnV0dG9uLmluY2x1ZGVzKCd7JykgJiYgYnV0dG9uLmluY2x1ZGVzKCd9JykpIHtcclxuICAgICAgLy8gQ2FwaXRhbGl6ZSBuYW1lXHJcbiAgICAgIGtleSA9IGJ1dHRvbi5zbGljZSgxLCBidXR0b24ubGVuZ3RoIC0gMSkudG9Mb3dlckNhc2UoKTtcclxuICAgICAga2V5ID0ga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpO1xyXG4gICAgICBjb2RlID0ga2V5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAga2V5ID0gYnV0dG9uO1xyXG4gICAgICBjb2RlID0gTnVtYmVyLmlzSW50ZWdlcihOdW1iZXIoYnV0dG9uKSkgPyBgRGlnaXQke2J1dHRvbn1gIDogYEtleSR7YnV0dG9uLnRvVXBwZXJDYXNlKCl9YDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBldmVudEluaXQ6IEtleWJvYXJkRXZlbnRJbml0ID0ge1xyXG4gICAgICBidWJibGVzOiB0cnVlLFxyXG4gICAgICBjYW5jZWxhYmxlOiB0cnVlLFxyXG4gICAgICBzaGlmdEtleTogdGhpcy5sYXlvdXROYW1lID09ICdzaGlmdCcsXHJcbiAgICAgIGtleToga2V5LFxyXG4gICAgICBjb2RlOiBjb2RlLFxyXG4gICAgICBsb2NhdGlvbjogMCxcclxuICAgIH07XHJcblxyXG4gICAgLy8gU2ltdWxhdGUgYWxsIG5lZWRlZCBldmVudHMgb24gYmFzZSBlbGVtZW50XHJcbiAgICB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQ/LmRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoJ2tleWRvd24nLCBldmVudEluaXQpKTtcclxuICAgIHRoaXMuX2FjdGl2ZUlucHV0RWxlbWVudD8uZGlzcGF0Y2hFdmVudChuZXcgS2V5Ym9hcmRFdmVudCgna2V5cHJlc3MnLCBldmVudEluaXQpKTtcclxuICAgIHRoaXMuX2FjdGl2ZUlucHV0RWxlbWVudD8uZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2lucHV0JywgeyBidWJibGVzOiB0cnVlIH0pKTtcclxuICAgIHRoaXMuX2FjdGl2ZUlucHV0RWxlbWVudD8uZGlzcGF0Y2hFdmVudChuZXcgS2V5Ym9hcmRFdmVudCgna2V5dXAnLCBldmVudEluaXQpKTtcclxuXHJcbiAgICAvLyBBbmQgc2V0IGZvY3VzIHRvIGlucHV0XHJcbiAgICB0aGlzLl9mb2N1c0FjdGl2ZUlucHV0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxsZWQgd2hlbiBhbiBldmVudCB0aGF0IHdhcnJhbnRzIGEgY3Vyc29yIHBvc2l0aW9uIHVwZGF0ZSBpcyB0cmlnZ2VyZWRcclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfY2FyZXRFdmVudEhhbmRsZXIoZXZlbnQ6IGFueSkge1xyXG4gICAgbGV0IHRhcmdldFRhZ05hbWUgPSAnJztcclxuICAgIGlmIChldmVudC50YXJnZXQudGFnTmFtZSkge1xyXG4gICAgICB0YXJnZXRUYWdOYW1lID0gZXZlbnQudGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpc1RleHRJbnB1dCA9XHJcbiAgICAgIHRhcmdldFRhZ05hbWUgPT09ICd0ZXh0YXJlYScgfHxcclxuICAgICAgKHRhcmdldFRhZ05hbWUgPT09ICdpbnB1dCcgJiYgWyd0ZXh0JywgJ3NlYXJjaCcsICdlbWFpbCcsICdwYXNzd29yZCcsICd1cmwnLCAndGVsJ10uaW5jbHVkZXMoZXZlbnQudGFyZ2V0LnR5cGUpKTtcclxuXHJcbiAgICBjb25zdCBpc0tleWJvYXJkID1cclxuICAgICAgZXZlbnQudGFyZ2V0ID09PSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgfHxcclxuICAgICAgKGV2ZW50LnRhcmdldCAmJiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSk7XHJcblxyXG4gICAgaWYgKGlzVGV4dElucHV0ICYmIHRoaXMuX2FjdGl2ZUlucHV0RWxlbWVudCA9PSBldmVudC50YXJnZXQpIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFRyYWNrcyBjdXJyZW50IGN1cnNvciBwb3NpdGlvblxyXG4gICAgICAgKiBBcyBrZXlzIGFyZSBwcmVzc2VkLCB0ZXh0IHdpbGwgYmUgYWRkZWQvcmVtb3ZlZCBhdCB0aGF0IHBvc2l0aW9uIHdpdGhpbiB0aGUgaW5wdXQuXHJcbiAgICAgICAqL1xyXG4gICAgICB0aGlzLl9zZXRDYXJldFBvc2l0aW9uKGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydCwgZXZlbnQudGFyZ2V0LnNlbGVjdGlvbkVuZCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgJ0NhcmV0IGF0OicsXHJcbiAgICAgICAgICB0aGlzLl9jYXJldFBvc2l0aW9uLFxyXG4gICAgICAgICAgdGhpcy5fY2FyZXRQb3NpdGlvbkVuZCxcclxuICAgICAgICAgIGV2ZW50ICYmIGV2ZW50LnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCksXHJcbiAgICAgICAgICBldmVudFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gJ3BvaW50ZXJ1cCcgJiYgdGhpcy5fYWN0aXZlSW5wdXRFbGVtZW50ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XHJcbiAgICAgIGlmICh0aGlzLl9pc01vdXNlSG9sZCkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlQnV0dG9uVXAoJycpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSBpZiAoIWlzS2V5Ym9hcmQgJiYgZXZlbnQ/LnR5cGUgIT09ICdzZWxlY3Rpb25jaGFuZ2UnKSB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiB3ZSBtdXN0IGVuc3VyZSBjYXJldFBvc2l0aW9uIGRvZXNuJ3QgcGVyc2lzdCBvbmNlIHJlYWN0aXZhdGVkLlxyXG4gICAgICAgKi9cclxuICAgICAgdGhpcy5fc2V0Q2FyZXRQb3NpdGlvbihudWxsKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmRlYnVnKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYENhcmV0IHBvc2l0aW9uIHJlc2V0IGR1ZSB0byBcIiR7ZXZlbnQ/LnR5cGV9XCIgZXZlbnRgLCBldmVudCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBDbG9zZSBwYW5lbFxyXG4gICAgICAgKi9cclxuICAgICAgdGhpcy5jbG9zZVBhbmVsLmVtaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvY3VzIHRvIGlucHV0XHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2ZvY3VzQWN0aXZlSW5wdXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQ/LmZvY3VzKCk7XHJcbiAgICB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQ/LnNldFNlbGVjdGlvblJhbmdlKHRoaXMuX2NhcmV0UG9zaXRpb24sIHRoaXMuX2NhcmV0UG9zaXRpb25FbmQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGVsIGhpZ2hsaWdodCBvbiBrZXkgZG93blxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIEtleWJvYXJkRXZlbnRcclxuICAgKi9cclxuICBwcml2YXRlIF9oYW5kbGVIaWdobGlnaHRLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBidXR0b25QcmVzc2VkID0gdGhpcy5fZ2V0S2V5Ym9hcmRMYXlvdXRLZXkoZXZlbnQpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYWN0aXZlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX3NldEFjdGl2ZUJ1dHRvbihidXR0b25QcmVzc2VkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRlbCBoaWdobGlnaHQgb24ga2V5IHVwXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIEBwYXJhbSBldmVudCBUaGUgS2V5Ym9hcmRFdmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2hhbmRsZUhpZ2hsaWdodEtleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBidXR0b25QcmVzc2VkID0gdGhpcy5fZ2V0S2V5Ym9hcmRMYXlvdXRLZXkoZXZlbnQpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgYWN0aXZlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX3JlbW92ZUFjdGl2ZUJ1dHRvbihidXR0b25QcmVzc2VkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyYW5zZm9ybXMgYSBLZXlib2FyZEV2ZW50J3MgXCJrZXkuY29kZVwiIHN0cmluZyBpbnRvIGEgdmlydHVhbC1rZXlib2FyZCBsYXlvdXQgZm9ybWF0XHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIEBwYXJhbSBldmVudCBUaGUgS2V5Ym9hcmRFdmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2dldEtleWJvYXJkTGF5b3V0S2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBsZXQgb3V0cHV0ID0gJyc7XHJcbiAgICBjb25zdCBrZXlJZCA9IGV2ZW50LmNvZGUgfHwgZXZlbnQua2V5O1xyXG5cclxuICAgIGlmIChcclxuICAgICAga2V5SWQ/LmluY2x1ZGVzKCdTcGFjZScpIHx8XHJcbiAgICAgIGtleUlkPy5pbmNsdWRlcygnTnVtcGFkJykgfHxcclxuICAgICAga2V5SWQ/LmluY2x1ZGVzKCdCYWNrc3BhY2UnKSB8fFxyXG4gICAgICBrZXlJZD8uaW5jbHVkZXMoJ0NhcHNMb2NrJykgfHxcclxuICAgICAga2V5SWQ/LmluY2x1ZGVzKCdNZXRhJylcclxuICAgICkge1xyXG4gICAgICBvdXRwdXQgPSBgeyR7ZXZlbnQuY29kZX19YCB8fCAnJztcclxuICAgIH0gZWxzZSBpZiAoa2V5SWQ/LmluY2x1ZGVzKCdDb250cm9sJykgfHwga2V5SWQ/LmluY2x1ZGVzKCdTaGlmdCcpIHx8IGtleUlkPy5pbmNsdWRlcygnQWx0JykpIHtcclxuICAgICAgb3V0cHV0ID0gYHske2V2ZW50LmtleX19YCB8fCAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG91dHB1dCA9IGV2ZW50LmtleSB8fCAnJztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0cHV0Lmxlbmd0aCA+IDEgPyBvdXRwdXQ/LnRvTG93ZXJDYXNlKCkgOiBvdXRwdXQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgYWN0aXZlIGNsYXNzIGluIGJ1dHRvblxyXG4gICAqXHJcbiAgICogQHBhcmFtIGJ1dHRvbk5hbWVcclxuICAgKi9cclxuICBwcml2YXRlIF9zZXRBY3RpdmVCdXR0b24oYnV0dG9uTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBub2RlID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKS5uYW1lZEl0ZW0oYnV0dG9uTmFtZSk7XHJcbiAgICBpZiAobm9kZSAmJiBub2RlLmNsYXNzTGlzdCkge1xyXG4gICAgICBub2RlLmNsYXNzTGlzdC5hZGQodGhpcy5fYWN0aXZlQnV0dG9uQ2xhc3MpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGFjdGl2ZSBidXR0b25cclxuICAgKlxyXG4gICAqIEBwYXJhbSBidXR0b25OYW1lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlQWN0aXZlQnV0dG9uKGJ1dHRvbk5hbWU/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKTtcclxuICAgIGlmIChidXR0b25OYW1lKSB7XHJcbiAgICAgIGNvbnN0IG5vZGUgPSBub2Rlcy5uYW1lZEl0ZW0oYnV0dG9uTmFtZSk7XHJcbiAgICAgIGlmIChub2RlICYmIG5vZGUuY2xhc3NMaXN0KSB7XHJcbiAgICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2FjdGl2ZUJ1dHRvbkNsYXNzKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIG5vZGVzW2ldLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fYWN0aXZlQnV0dG9uQ2xhc3MpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ0b3VjaC1rZXlib2FyZFwiIFtuZ0NsYXNzXT1cIidsYXlvdXQtJyArIGxheW91dE1vZGUgKyAnLScgKyBsYXlvdXROYW1lXCI+XHJcbiAgQGZvciAocm93IG9mIGxvY2FsZS5sYXlvdXRzW2xheW91dE1vZGUgKyAnXycgKyBsYXlvdXROYW1lXTsgdHJhY2sgcm93WzBdOyBsZXQgcm93SW5kZXggPSAkaW5kZXgpIHtcclxuICA8ZGl2IGNsYXNzPVwidG91Y2gta2V5Ym9hcmQtcm93XCI+XHJcbiAgICBAZm9yIChrZXkgb2Ygcm93OyB0cmFjayBrZXkpIHtcclxuICAgIDxidXR0b25cclxuICAgICAgW25hbWVdPVwia2V5XCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIFtkaXJdPVwibG9jYWxlLmRpclwiXHJcbiAgICAgIGNsYXNzPVwidG91Y2gta2V5Ym9hcmQta2V5XCJcclxuICAgICAgW25nQ2xhc3NdPVwiW2dldEJ1dHRvbkNsYXNzKGtleSldXCJcclxuICAgICAgW2F0dHIuZGF0YS1sYXlvdXRdPVwibGF5b3V0TW9kZVwiXHJcbiAgICAgIChwb2ludGVydXApPVwiaGFuZGxlQnV0dG9uVXAoa2V5LCAkZXZlbnQpXCJcclxuICAgICAgKHBvaW50ZXJkb3duKT1cImhhbmRsZUJ1dHRvbkRvd24oa2V5LCAkZXZlbnQpXCJcclxuICAgICAgKHBvaW50ZXJjYW5jZWwpPVwiaGFuZGxlQnV0dG9uVXAoa2V5LCAkZXZlbnQpXCJcclxuICAgICAgW2lubmVySHRtbF09XCJnZXRCdXR0b25EaXNwbGF5TmFtZShrZXkpXCJcclxuICAgID48L2J1dHRvbj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuICB9XHJcbjwvZGl2PlxyXG4iXX0=
629
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRvdWNoLWtleWJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10b3VjaC1rZXlib2FyZC9zcmMvbGliL25neC10b3VjaC1rZXlib2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdG91Y2gta2V5Ym9hcmQvc3JjL2xpYi9uZ3gtdG91Y2gta2V5Ym9hcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFFbkUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7QUFVOUMsTUFBTSxPQUFPLHlCQUF5QjtJQVB0QztRQVFVLGVBQVUsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQSxVQUE0QixDQUFBLENBQUMsQ0FBQztRQUNuRCxtQkFBYyxHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBRTNELFdBQU0sR0FBVyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3JDLGVBQVUsR0FBRyxNQUFNLENBQUM7UUFDcEIsZUFBVSxHQUFHLFlBQVksQ0FBQztRQUMxQixVQUFLLEdBQUcsS0FBSyxDQUFDO1FBRWQsZUFBVSxHQUFHLE1BQU0sRUFBUSxDQUFDO1FBRXBCLHVCQUFrQixHQUFHLFFBQVEsQ0FBQztRQUk5QixtQkFBYyxHQUFrQixJQUFJLENBQUM7UUFDckMsc0JBQWlCLEdBQWtCLElBQUks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QkFBa0IsQ0FBQyxDQUFDO1lBQ3JELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzs4R0F4cUJVLHlCQUF5QjtrR0FBekIseUJBQXlCLDZWQ3RCdEMsb3pCQW9CQTs7MkZERWEseUJBQXlCO2tCQVByQyxTQUFTOytCQUNFLG9CQUFvQixpQkFHZixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNOzhCQWdEL0MsV0FBVztzQkFEVixZQUFZO3VCQUFDLGNBQWMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFZeEMsYUFBYTtzQkFEWixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVcxQyxhQUFhO3NCQURaLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUzVDLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBU3pDLHFCQUFxQjtzQkFEcEIsWUFBWTt1QkFBQyx3QkFBd0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIGluamVjdCxcclxuICBvdXRwdXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuXHJcbmltcG9ydCB7IE5HWF9UT1VDSF9LRVlCT0FSRF9MT0NBTEUgfSBmcm9tICcuL25neC10b3VjaC1rZXlib2FyZC5jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBmbkJ1dHRvbiB9IGZyb20gJy4vTG9jYWxlL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IExvY2FsZSB9IGZyb20gJy4vTG9jYWxlL3R5cGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZ3gtdG91Y2gta2V5Ym9hcmQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9uZ3gtdG91Y2gta2V5Ym9hcmQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25neC10b3VjaC1rZXlib2FyZC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hUb3VjaEtleWJvYXJkQ29tcG9uZW50IHtcclxuICBwcml2YXRlIF9zYW5pdGl6ZXIgPSBpbmplY3QoRG9tU2FuaXRpemVyKTtcclxuICBwcml2YXRlIF9lbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4pO1xyXG4gIHByaXZhdGUgX2RlZmF1bHRMb2NhbGUgPSBpbmplY3QoTkdYX1RPVUNIX0tFWUJPQVJEX0xPQ0FMRSk7XHJcblxyXG4gIGxvY2FsZTogTG9jYWxlID0gdGhpcy5fZGVmYXVsdExvY2FsZTtcclxuICBsYXlvdXRNb2RlID0gJ3RleHQnO1xyXG4gIGxheW91dE5hbWUgPSAnYWxwaGFiZXRpYyc7XHJcbiAgZGVidWcgPSBmYWxzZTtcclxuXHJcbiAgY2xvc2VQYW5lbCA9IG91dHB1dDx2b2lkPigpO1xyXG5cclxuICBwcml2YXRlIF9hY3RpdmVCdXR0b25DbGFzcyA9ICdhY3RpdmUnO1xyXG4gIHByaXZhdGUgX2hvbGRJbnRlcmFjdGlvblRpbWVvdXQhOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfaG9sZFRpbWVvdXQhOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfaXNNb3VzZUhvbGQhOiBib29sZWFuO1xyXG4gIHByaXZhdGUgX2NhcmV0UG9zaXRpb246IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgX2NhcmV0UG9zaXRpb25FbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgX2FjdGl2ZUlucHV0RWxlbWVudCE6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50IHwgbnVsbDtcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBAIEFjY2Vzc29yc1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHRlciBmb3IgbWF4TGVuZ3RoXHJcbiAgICovXHJcbiAgZ2V0IG1heExlbmd0aCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZUlucHV0RWxlbWVudD8ubWF4TGVuZ3RoID8/IC0xO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0dGVyIGZvciB0eXBlIG9mIGlucHV0XHJcbiAgICovXHJcbiAgZ2V0IGlzVGV4dGFyZWEoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlSW5wdXRFbGVtZW50Py50eXBlID09PSAndGV4dGFyZWEnO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBAIERlY29yYXRlZCBtZXRob2RzXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLyoqXHJcbiAgICogT24ga2V5dXBcclxuICAgKi9cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5dXAnLCBbJyRldmVudCddKVxyXG4gIGhhbmRsZUtleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoZXZlbnQuaXNUcnVzdGVkKSB7XHJcbiAgICAgIHRoaXMuX2NhcmV0RXZlbnRIYW5kbGVyKGV2ZW50KTtcclxuICAgICAgdGhpcy5faGFuZGxlSGlnaGxpZ2h0S2V5VXAoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT24ga2V5ZG93blxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXlkb3duJywgWyckZXZlbnQnXSlcclxuICBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoZXZlbnQuaXNUcnVzdGVkKSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUhpZ2hsaWdodEtleURvd24oZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT24gcG9pbnRlcnVwIChtb3VzZXVwIG9yIHRvdWNoZW5kKVxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpwb2ludGVydXAnLCBbJyRldmVudCddKVxyXG4gIGhhbmRsZU1vdXNlVXAoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY2FyZXRFdmVudEhhbmRsZXIoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT24gc2VsZWN0XHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNlbGVjdCcsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlU2VsZWN0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY2FyZXRFdmVudEhhbmRsZXIoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT24gc2VsZWN0aW9uY2hhbmdlXHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNlbGVjdGlvbmNoYW5nZScsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY2FyZXRFdmVudEhhbmRsZXIoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBAIFB1YmxpYyBtZXRob2RzXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGxvY2FsZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHZhbHVlIExvY2FsZVxyXG4gICAqL1xyXG4gIHNldExvY2FsZSh2YWx1ZTogTG9jYWxlID0gdGhpcy5fZGVmYXVsdExvY2FsZSk6IHZvaWQge1xyXG4gICAgaWYgKCEodmFsdWUgJiYgdmFsdWUubGF5b3V0cykpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb2NhbGUgaXMgbm90IGRlZmluZWQnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvY2FsZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGFjdGl2ZSBpbnB1dFxyXG4gICAqXHJcbiAgICogQHBhcmFtIGlucHV0IElucHV0IG5hdGl2ZSBlbGVtZW50XHJcbiAgICovXHJcbiAgc2V0QWN0aXZlSW5wdXQoaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQgPSBpbnB1dDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYWNraW5nIGtleWJvYXJkIGxheW91dFxyXG4gICAgICovXHJcbiAgICBjb25zdCBpbnB1dE1vZGUgPSB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQ/LmlucHV0TW9kZTtcclxuICAgIGlmIChpbnB1dE1vZGUgJiYgWyd0ZXh0JywgJ3NlYXJjaCcsICdlbWFpbCcsICd1cmwnLCAnbnVtZXJpYycsICdkZWNpbWFsJywgJ3RlbCddLnNvbWUoKGkpID0+IGkgPT09IGlucHV0TW9kZSkpIHtcclxuICAgICAgdGhpcy5sYXlvdXRNb2RlID0gaW5wdXRNb2RlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5sYXlvdXRNb2RlID0gJ3RleHQnO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbnB1dE1vZGUgJiYgWydudW1lcmljJywgJ2RlY2ltYWwnLCAndGVsJ10uc29tZSgoaSkgPT4gaSA9PT0gaW5wdXRNb2RlKSkge1xyXG4gICAgICB0aGlzLmxheW91dE5hbWUgPSAnZGVmYXVsdCc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxheW91dE5hbWUgPSAnYWxwaGFiZXRpYyc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0xvY2FsZTonLCBgJHt0aGlzLmxvY2FsZS5jb2RlfWApO1xyXG4gICAgICBjb25zb2xlLmxvZygnTGF5b3V0OicsIGAke3RoaXMubGF5b3V0TW9kZX1fJHt0aGlzLmxheW91dE5hbWV9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiB3ZSBtdXN0IGVuc3VyZSBjYXJldFBvc2l0aW9uIGRvZXNuJ3QgcGVyc2lzdCBvbmNlIHJlYWN0aXZhdGVkLlxyXG4gICAgICovXHJcbiAgICB0aGlzLl9zZXRDYXJldFBvc2l0aW9uKHRoaXMuX2FjdGl2ZUlucHV0RWxlbWVudC5zZWxlY3Rpb25TdGFydCwgdGhpcy5fYWN0aXZlSW5wdXRFbGVtZW50LnNlbGVjdGlvbkVuZCk7XHJcblxyXG4gICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0NhcmV0IHN0YXJ0IGF0OicsIHRoaXMuX2NhcmV0UG9zaXRpb24sIHRoaXMuX2NhcmV0UG9zaXRpb25FbmQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFuZCBzZXQgZm9jdXMgdG8gaW5wdXRcclxuICAgIHRoaXMuX2ZvY3VzQWN0aXZlSW5wdXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIGJ1dHRvbiBpcyBhIHN0YW5kYXJkIGJ1dHRvblxyXG4gICAqL1xyXG4gIGlzU3RhbmRhcmRCdXR0b24gPSAoYnV0dG9uOiBzdHJpbmcpID0+IGJ1dHRvbiAmJiAhKGJ1dHRvblswXSA9PT0gJ3snICYmIGJ1dHRvbltidXR0b24ubGVuZ3RoIC0gMV0gPT09ICd9Jyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIGJ1dHRvbiB0eXBlXHJcbiAgICpcclxuICAgKiBAcGFyYW0gYnV0dG9uIFRoZSBidXR0b24ncyBsYXlvdXQgbmFtZVxyXG4gICAqIEByZXR1cm4gVGhlIGJ1dHRvbiB0eXBlXHJcbiAgICovXHJcbiAgZ2V0QnV0dG9uVHlwZShidXR0b246IHN0cmluZyk6ICdzdGFuZGFyZC1rZXknIHwgJ2Z1bmN0aW9uLWtleScge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNTdGFuZGFyZEJ1dHRvbihidXR0b24pID8gJ3N0YW5kYXJkLWtleScgOiAnZnVuY3Rpb24ta2V5JztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgZGVmYXVsdCBjbGFzc2VzIHRvIGEgZ2l2ZW4gYnV0dG9uXHJcbiAgICpcclxuICAgKiBAcGFyYW0gYnV0dG9uIFRoZSBidXR0b24ncyBsYXlvdXQgbmFtZVxyXG4gICAqIEByZXR1cm4gVGhlIGNsYXNzZXMgdG8gYmUgYWRkZWQgdG8gdGhlIGJ1dHRvblxyXG4gICAqL1xyXG4gIGdldEJ1dHRvbkNsYXNzKGJ1dHRvbjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGJ1dHRvblR5cGVDbGFzcyA9IHRoaXMuZ2V0QnV0dG9uVHlwZShidXR0b24pO1xyXG4gICAgY29uc3QgYnV0dG9uV2l0aG91dEJyYWNlcyA9IGJ1dHRvbi5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7XHJcbiAgICBsZXQgYnV0dG9uTm9ybWFsaXplZCA9ICcnO1xyXG5cclxuICAgIGlmIChidXR0b25UeXBlQ2xhc3MgIT09ICdzdGFuZGFyZC1rZXknKSBidXR0b25Ob3JtYWxpemVkID0gYCR7YnV0dG9uV2l0aG91dEJyYWNlc30ta2V5YDtcclxuXHJcbiAgICByZXR1cm4gYCR7YnV0dG9uVHlwZUNsYXNzfSAke2J1dHRvbk5vcm1hbGl6ZWR9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGRpc3BsYXkgKGxhYmVsKSBuYW1lIGZvciBhIGdpdmVuIGJ1dHRvblxyXG4gICAqXHJcbiAgICogQHBhcmFtIGJ1dHRvbiBUaGUgYnV0dG9uJ3MgbGF5b3V0IG5hbWVcclxuICAgKiBAcmV0dXJuIFRoZSBkaXNwbGF5IG5hbWUgdG8gYmUgc2hvdyB0byB0aGUgYnV0dG9uXHJcbiAgICovXHJcbiAgZ2V0QnV0dG9uRGlzcGxheU5hbWUoYnV0dG9uOiBzdHJpbmcpOiBTYWZlSHRtbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHRoaXMubG9jYWxlLmRpc3BsYXlbYnV0dG9uXSB8fCBidXR0b24pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBjbGlja3MgbWFkZSB0byBrZXlib2FyZCBidXR0b25zXHJcbiAgICpcclxuICAgKiBAcGFyYW0gYnV0dG9uIFRoZSBidXR0b24gbGF5b3V0IG5hbWUuXHJcbiAgICogQHBhcmFtIGV2ZW50IFRoZSBidXR0b24gZXZlbnQuXHJcbiAgICovXHJcbiAgaGFuZGxlQnV0dG9uUHJlc3MoYnV0dG9uOiBzdHJpbmcsIGU/OiBFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0tleSBwcmVzczonLCBidXR0b24pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChidXR0b24gPT09IGZuQnV0dG9uLlNISUZUKSB7XHJcbiAgICAgIHRoaXMubGF5b3V0TmFtZSA9IHRoaXMubGF5b3V0TmFtZSA9PT0gJ2FscGhhYmV0aWMnID8gJ3NoaWZ0JyA6ICdhbHBoYWJldGljJztcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIGlmIChidXR0b24gPT09IGZuQnV0dG9uLkRPTkUpIHtcclxuICAgICAgdGhpcy5jbG9zZVBhbmVsLmVtaXQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbW1vblBhcmFtczogW251bWJlciwgbnVtYmVyLCBib29sZWFuXSA9IFt0aGlzLl9jYXJldFBvc2l0aW9uIHx8IDAsIHRoaXMuX2NhcmV0UG9zaXRpb25FbmQgfHwgMCwgdHJ1ZV07XHJcbiAgICBsZXQgb3V0cHV0ID0gdGhpcy5fYWN0aXZlSW5wdXRFbGVtZW50Py52YWx1ZSB8fCAnJztcclxuXHJcbiAgICAvLyBIYW5kZWwgZnVuY3Rpb25hbCBidXR0b25cclxuICAgIGlmICghdGhpcy5pc1N0YW5kYXJkQnV0dG9uKGJ1dHRvbikpIHtcclxuICAgICAgLy8gSGFuZGVsIEJBQ0tTUEFDRVxyXG4gICAgICBpZiAoYnV0dG9uID09PSBmbkJ1dHRvbi5CQUNLU1BBQ0UpIHtcclxuICAgICAgICBvdXRwdXQgPSB0aGlzLl9yZW1vdmVBdChvdXRwdXQsIC4uLmNvbW1vblBhcmFtcyk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gSGFuZGVsIFNQQUNFXHJcbiAgICAgIGVsc2UgaWYgKGJ1dHRvbiA9PT0gZm5CdXR0b24uU1BBQ0UpIHtcclxuICAgICAgICBvdXRwdXQgPSB0aGlzLl9hZGRTdHJpbmdBdChvdXRwdXQsICcgJywgLi4uY29tbW9uUGFyYW1zKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBIYW5kZWwgVEFCXHJcbiAgICAgIGVsc2UgaWYgKGJ1dHRvbiA9PT0gZm5CdXR0b24uVEFCKSB7XHJcbiAgICAgICAgb3V0cHV0ID0gdGhpcy5fYWRkU3RyaW5nQXQob3V0cHV0LCAnXFx0JywgLi4uY29tbW9uUGFyYW1zKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBIYW5kZWwgRU5URVJcclxuICAgICAgZWxzZSBpZiAoYnV0dG9uID09PSBmbkJ1dHRvbi5FTlRFUikge1xyXG4gICAgICAgIGlmICh0aGlzLmlzVGV4dGFyZWEpIHtcclxuICAgICAgICAgIG91dHB1dCA9IHRoaXMuX2FkZFN0cmluZ0F0KG91dHB1dCwgJ1xcbicsIC4uLmNvbW1vblBhcmFtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIEhhbmRlbCBMQVlPVVRcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sYXlvdXROYW1lID0gYnV0dG9uLnN1YnN0cmluZygxLCBidXR0b24ubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBIYW5kZWwgc3RhbmRhcmQgYnV0dG9uXHJcbiAgICBlbHNlIHtcclxuICAgICAgb3V0cHV0ID0gdGhpcy5fYWRkU3RyaW5nQXQob3V0cHV0LCBidXR0b24sIC4uLmNvbW1vblBhcmFtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2FjdGl2ZUlucHV0RWxlbWVudCkge1xyXG4gICAgICB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQudmFsdWUgPSBvdXRwdXQ7XHJcblxyXG4gICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDYXJldCBhdDonLCB0aGlzLl9jYXJldFBvc2l0aW9uLCB0aGlzLl9jYXJldFBvc2l0aW9uRW5kLCAnQnV0dG9uJywgZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9kaXNwYXRjaEV2ZW50cyhidXR0b24pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBidXR0b24gZG93blxyXG4gICAqXHJcbiAgICogQHBhcmFtIGJ1dHRvbiBUaGUgYnV0dG9uIGxheW91dCBuYW1lLlxyXG4gICAqIEBwYXJhbSBldmVudCBUaGUgYnV0dG9uIGV2ZW50LlxyXG4gICAqL1xyXG4gIGhhbmRsZUJ1dHRvbkRvd24oYnV0dG9uOiBzdHJpbmcsIGU/OiBFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0tleSBkb3duOicsIGJ1dHRvbik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGUpIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEhhbmRsZSBldmVudCBvcHRpb25zXHJcbiAgICAgICAqL1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYWN0aXZlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX3NldEFjdGl2ZUJ1dHRvbihidXR0b24pO1xyXG5cclxuICAgIGlmICh0aGlzLl9ob2xkSW50ZXJhY3Rpb25UaW1lb3V0KSBjbGVhclRpbWVvdXQodGhpcy5faG9sZEludGVyYWN0aW9uVGltZW91dCk7XHJcbiAgICBpZiAodGhpcy5faG9sZFRpbWVvdXQpIGNsZWFyVGltZW91dCh0aGlzLl9ob2xkVGltZW91dCk7XHJcbiAgICB0aGlzLl9pc01vdXNlSG9sZCA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaW1lIHRvIHdhaXQgdW50aWwgYSBrZXkgaG9sZCBpcyBkZXRlY3RlZFxyXG4gICAgICovXHJcbiAgICB0aGlzLl9ob2xkVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuX2lzTW91c2VIb2xkICYmXHJcbiAgICAgICAgKCghYnV0dG9uLmluY2x1ZGVzKCd7JykgJiYgIWJ1dHRvbi5pbmNsdWRlcygnfScpKSB8fCBidXR0b24gPT09IGZuQnV0dG9uLkJBQ0tTUEFDRSB8fCBidXR0b24gPT09IGZuQnV0dG9uLlNQQUNFKVxyXG4gICAgICApIHtcclxuICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0J1dHRvbiBob2xkOicsIGJ1dHRvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaGFuZGxlQnV0dG9uSG9sZChidXR0b24pO1xyXG4gICAgICB9XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9ob2xkVGltZW91dCk7XHJcbiAgICB9LCA1MDApO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGVsIGJ1dHRvbiBDbGljayBhZnRlciBidXR0b24gZG93blxyXG4gICAgICovXHJcbiAgICB0aGlzLmhhbmRsZUJ1dHRvblByZXNzKGJ1dHRvbiwgZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGJ1dHRvbiB1cFxyXG4gICAqXHJcbiAgICogQHBhcmFtIGJ1dHRvbiBUaGUgYnV0dG9uIGxheW91dCBuYW1lLlxyXG4gICAqIEBwYXJhbSBldmVudCBUaGUgYnV0dG9uIGV2ZW50LlxyXG4gICAqL1xyXG4gIGhhbmRsZUJ1dHRvblVwKGJ1dHRvbjogc3RyaW5nLCBlPzogRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRlYnVnKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdLZXkgdXA6JywgYnV0dG9uKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZSkge1xyXG4gICAgICAvKipcclxuICAgICAgICogSGFuZGxlIGV2ZW50IG9wdGlvbnNcclxuICAgICAgICovXHJcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBhY3RpdmUgY2xhc3NcclxuICAgICAqL1xyXG4gICAgdGhpcy5fcmVtb3ZlQWN0aXZlQnV0dG9uKCk7XHJcblxyXG4gICAgdGhpcy5faXNNb3VzZUhvbGQgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLl9ob2xkSW50ZXJhY3Rpb25UaW1lb3V0KSBjbGVhclRpbWVvdXQodGhpcy5faG9sZEludGVyYWN0aW9uVGltZW91dCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGJ1dHRvbiBob2xkXHJcbiAgICovXHJcbiAgaGFuZGxlQnV0dG9uSG9sZChidXR0b246IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2hvbGRJbnRlcmFjdGlvblRpbWVvdXQpIGNsZWFyVGltZW91dCh0aGlzLl9ob2xkSW50ZXJhY3Rpb25UaW1lb3V0KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRpbWVvdXQgZGljdGF0aW5nIHRoZSBzcGVlZCBvZiBrZXkgaG9sZCBpdGVyYXRpb25zXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2hvbGRJbnRlcmFjdGlvblRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLl9pc01vdXNlSG9sZCkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlQnV0dG9uUHJlc3MoYnV0dG9uKTtcclxuICAgICAgICB0aGlzLmhhbmRsZUJ1dHRvbkhvbGQoYnV0dG9uKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5faG9sZEludGVyYWN0aW9uVGltZW91dCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIEAgUHJpdmF0ZSBtZXRob2RzXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hhbmdlcyB0aGUgaW50ZXJuYWwgY2FyZXQgcG9zaXRpb25cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHBhcmFtIHBvc2l0aW9uIFRoZSBjYXJldCdzIHN0YXJ0IHBvc2l0aW9uXHJcbiAgICogQHBhcmFtIHBvc2l0aW9uRW5kIFRoZSBjYXJldCdzIGVuZCBwb3NpdGlvblxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3NldENhcmV0UG9zaXRpb24ocG9zaXRpb246IG51bWJlciB8IG51bGwsIGVuZFBvc2l0aW9uID0gcG9zaXRpb24pOiB2b2lkIHtcclxuICAgIHRoaXMuX2NhcmV0UG9zaXRpb24gPSBwb3NpdGlvbjtcclxuICAgIHRoaXMuX2NhcmV0UG9zaXRpb25FbmQgPSBlbmRQb3NpdGlvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1vdmVzIHRoZSBjdXJzb3IgcG9zaXRpb24gYnkgYSBnaXZlbiBhbW91bnRcclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHBhcmFtIGxlbmd0aCBSZXByZXNlbnRzIGJ5IGhvdyBtYW55IGNoYXJhY3RlcnMgdGhlIGlucHV0IHNob3VsZCBiZSBtb3ZlZFxyXG4gICAqIEBwYXJhbSBtaW51cyBXaGV0aGVyIHRoZSBjdXJzb3Igc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBsZWZ0IG9yIG5vdC5cclxuICAgKi9cclxuICBwcml2YXRlIF91cGRhdGVDYXJldFBvcyhsZW5ndGg6IG51bWJlciwgbWludXMgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgbmV3Q2FyZXRQb3MgPSB0aGlzLl91cGRhdGVDYXJldFBvc0FjdGlvbihsZW5ndGgsIG1pbnVzKTtcclxuICAgIHRoaXMuX3NldENhcmV0UG9zaXRpb24obmV3Q2FyZXRQb3MpO1xyXG4gICAgLy8gU2Nyb2xsIHRvIGJvdHRvbVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuX2FjdGl2ZUlucHV0RWxlbWVudD8uc2Nyb2xsVG8oe1xyXG4gICAgICAgIHRvcDogdGhpcy5fYWN0aXZlSW5wdXRFbGVtZW50LnNjcm9sbEhlaWdodCxcclxuICAgICAgfSBhcyBTY3JvbGxUb09wdGlvbnMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBY3Rpb24gbWV0aG9kIG9mIHVwZGF0ZUNhcmV0UG9zXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIEBwYXJhbSBsZW5ndGggUmVwcmVzZW50cyBieSBob3cgbWFueSBjaGFyYWN0ZXJzIHRoZSBpbnB1dCBzaG91bGQgYmUgbW92ZWRcclxuICAgKiBAcGFyYW0gbWludXMgV2hldGhlciB0aGUgY3Vyc29yIHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgbGVmdCBvciBub3QuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfdXBkYXRlQ2FyZXRQb3NBY3Rpb24obGVuZ3RoOiBudW1iZXIsIG1pbnVzID0gZmFsc2UpIHtcclxuICAgIGxldCBjYXJldFBvc2l0aW9uID0gdGhpcy5fY2FyZXRQb3NpdGlvbjtcclxuXHJcbiAgICBpZiAoY2FyZXRQb3NpdGlvbiAhPSBudWxsKSB7XHJcbiAgICAgIGlmIChtaW51cykge1xyXG4gICAgICAgIGlmIChjYXJldFBvc2l0aW9uID4gMCkgY2FyZXRQb3NpdGlvbiA9IGNhcmV0UG9zaXRpb24gLSBsZW5ndGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY2FyZXRQb3NpdGlvbiA9IGNhcmV0UG9zaXRpb24gKyBsZW5ndGg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2FyZXRQb3NpdGlvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZXMgYW4gYW1vdW50IG9mIGNoYXJhY3RlcnMgYmVmb3JlIGEgZ2l2ZW4gcG9zaXRpb25cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIGlucHV0XHJcbiAgICogQHBhcmFtIHBvc2l0aW9uIFRoZSAoY3Vyc29yKSBwb3NpdGlvbiBmcm9tIHdoZXJlIHRoZSBjaGFyYWN0ZXJzIHNob3VsZCBiZSByZW1vdmVkXHJcbiAgICogQHBhcmFtIG1vdmVDYXJldCBXaGV0aGVyIHRvIHVwZGF0ZSBpbnB1dCBjdXJzb3JcclxuICAgKi9cclxuICBwcml2YXRlIF9yZW1vdmVBdChzb3VyY2U6IHN0cmluZywgcG9zaXRpb24gPSBzb3VyY2UubGVuZ3RoLCBwb3NpdGlvbkVuZCA9IHNvdXJjZS5sZW5ndGgsIG1vdmVDYXJldCA9IGZhbHNlKSB7XHJcbiAgICBpZiAocG9zaXRpb24gPT09IDAgJiYgcG9zaXRpb25FbmQgPT09IDApIHtcclxuICAgICAgcmV0dXJuIHNvdXJjZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgb3V0cHV0O1xyXG5cclxuICAgIGlmIChwb3NpdGlvbiA9PT0gcG9zaXRpb25FbmQpIHtcclxuICAgICAgbGV0IHByZXZUd29DaGFycztcclxuICAgICAgbGV0IGVtb2ppTWF0Y2hlZDtcclxuICAgICAgY29uc3QgZW1vamlNYXRjaGVkUmVnID0gLyhbXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdKS9nO1xyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEVtb2ppcyBhcmUgbWFkZSBvdXQgb2YgdHdvIGNoYXJhY3RlcnMsIHNvIHdlIG11c3QgdGFrZSBhIGN1c3RvbSBhcHByb2FjaCB0byB0cmltIHRoZW0uXHJcbiAgICAgICAqIEZvciBtb3JlIGluZm86IGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LXVuaWNvZGVcclxuICAgICAgICovXHJcbiAgICAgIGlmIChwb3NpdGlvbiAmJiBwb3NpdGlvbiA+PSAwKSB7XHJcbiAgICAgICAgcHJldlR3b0NoYXJzID0gc291cmNlLnN1YnN0cmluZyhwb3NpdGlvbiAtIDIsIHBvc2l0aW9uKTtcclxuICAgICAgICBlbW9qaU1hdGNoZWQgPSBwcmV2VHdvQ2hhcnMubWF0Y2goZW1vamlNYXRjaGVkUmVnKTtcclxuXHJcbiAgICAgICAgaWYgKGVtb2ppTWF0Y2hlZCkge1xyXG4gICAgICAgICAgb3V0cHV0ID0gc291cmNlLnN1YnN0cmluZygwLCBwb3NpdGlvbiAtIDIpICsgc291cmNlLnN1YnN0cmluZyhwb3NpdGlvbik7XHJcbiAgICAgICAgICBpZiAobW92ZUNhcmV0KSB0aGlzLl91cGRhdGVDYXJldFBvcygyLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb3V0cHV0ID0gc291cmNlLnN1YnN0cmluZygwLCBwb3NpdGlvbiAtIDEpICsgc291cmNlLnN1YnN0cmluZyhwb3NpdGlvbik7XHJcbiAgICAgICAgICBpZiAobW92ZUNhcmV0KSB0aGlzLl91cGRhdGVDYXJldFBvcygxLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcHJldlR3b0NoYXJzID0gc291cmNlLnNsaWNlKC0yKTtcclxuICAgICAgICBlbW9qaU1hdGNoZWQgPSBwcmV2VHdvQ2hhcnMubWF0Y2goZW1vamlNYXRjaGVkUmVnKTtcclxuXHJcbiAgICAgICAgaWYgKGVtb2ppTWF0Y2hlZCkge1xyXG4gICAgICAgICAgb3V0cHV0ID0gc291cmNlLnNsaWNlKDAsIC0yKTtcclxuICAgICAgICAgIGlmIChtb3ZlQ2FyZXQpIHRoaXMuX3VwZGF0ZUNhcmV0UG9zKDIsIHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvdXRwdXQgPSBzb3VyY2Uuc2xpY2UoMCwgLTEpO1xyXG4gICAgICAgICAgaWYgKG1vdmVDYXJldCkgdGhpcy5fdXBkYXRlQ2FyZXRQb3MoMSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvdXRwdXQgPSBzb3VyY2Uuc2xpY2UoMCwgcG9zaXRpb24pICsgc291cmNlLnNsaWNlKHBvc2l0aW9uRW5kKTtcclxuICAgICAgaWYgKG1vdmVDYXJldCkge1xyXG4gICAgICAgIHRoaXMuX3NldENhcmV0UG9zaXRpb24ocG9zaXRpb24pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dHB1dDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYSBzdHJpbmcgdG8gdGhlIGlucHV0IGF0IGEgZ2l2ZW4gcG9zaXRpb25cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIGlucHV0XHJcbiAgICogQHBhcmFtIHN0ciBUaGUgc3RyaW5nIHRvIGFkZFxyXG4gICAqIEBwYXJhbSBwb3NpdGlvbiBUaGUgKGN1cnNvcikgcG9zaXRpb24gd2hlcmUgdGhlIHN0cmluZyBzaG91bGQgYmUgYWRkZWRcclxuICAgKiBAcGFyYW0gbW92ZUNhcmV0IFdoZXRoZXIgdG8gdXBkYXRlIHZpcnR1YWwta2V5Ym9hcmQgY3Vyc29yXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfYWRkU3RyaW5nQXQoXHJcbiAgICBzb3VyY2U6IHN0cmluZyxcclxuICAgIHN0cjogc3RyaW5nLFxyXG4gICAgcG9zaXRpb24gPSBzb3VyY2UubGVuZ3RoLFxyXG4gICAgcG9zaXRpb25FbmQgPSBzb3VyY2UubGVuZ3RoLFxyXG4gICAgbW92ZUNhcmV0ID0gZmFsc2UsXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5tYXhMZW5ndGggIT09IC0xICYmIHNvdXJjZS5sZW5ndGggPj0gdGhpcy5tYXhMZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIHNvdXJjZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgb3V0cHV0O1xyXG5cclxuICAgIGlmICghcG9zaXRpb24gJiYgcG9zaXRpb24gIT09IDApIHtcclxuICAgICAgb3V0cHV0ID0gc291cmNlICsgc3RyO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgb3V0cHV0ID0gW3NvdXJjZS5zbGljZSgwLCBwb3NpdGlvbiksIHN0ciwgc291cmNlLnNsaWNlKHBvc2l0aW9uRW5kKV0uam9pbignJyk7XHJcbiAgICAgIGlmIChtb3ZlQ2FyZXQpIHRoaXMuX3VwZGF0ZUNhcmV0UG9zKHN0ci5sZW5ndGgsIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0cHV0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kIHRvIGRpc3BhdGNoIG5lY2Vzc2FyeSBrZXlib2FyZCBldmVudHMgdG8gY3VycmVudCBpbnB1dCBlbGVtZW50LlxyXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3VpZXZlbnRzL3Rvb2xzL2tleS1ldmVudC12aWV3ZXIuaHRtbFxyXG4gICAqXHJcbiAgICogQHBhcmFtIGJ1dHRvblxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2Rpc3BhdGNoRXZlbnRzKGJ1dHRvbjogc3RyaW5nKSB7XHJcbiAgICBsZXQga2V5LCBjb2RlO1xyXG4gICAgaWYgKGJ1dHRvbi5pbmNsdWRlcygneycpICYmIGJ1dHRvbi5pbmNsdWRlcygnfScpKSB7XHJcbiAgICAgIC8vIENhcGl0YWxpemUgbmFtZVxyXG4gICAgICBrZXkgPSBidXR0b24uc2xpY2UoMSwgYnV0dG9uLmxlbmd0aCAtIDEpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGtleSA9IGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKTtcclxuICAgICAgY29kZSA9IGtleTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGtleSA9IGJ1dHRvbjtcclxuICAgICAgY29kZSA9IE51bWJlci5pc0ludGVnZXIoTnVtYmVyKGJ1dHRvbikpID8gYERpZ2l0JHtidXR0b259YCA6IGBLZXkke2J1dHRvbi50b1VwcGVyQ2FzZSgpfWA7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZXZlbnRJbml0OiBLZXlib2FyZEV2ZW50SW5pdCA9IHtcclxuICAgICAgYnViYmxlczogdHJ1ZSxcclxuICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcclxuICAgICAgc2hpZnRLZXk6IHRoaXMubGF5b3V0TmFtZSA9PSAnc2hpZnQnLFxyXG4gICAgICBrZXk6IGtleSxcclxuICAgICAgY29kZTogY29kZSxcclxuICAgICAgbG9jYXRpb246IDAsXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIFNpbXVsYXRlIGFsbCBuZWVkZWQgZXZlbnRzIG9uIGJhc2UgZWxlbWVudFxyXG4gICAgdGhpcy5fYWN0aXZlSW5wdXRFbGVtZW50Py5kaXNwYXRjaEV2ZW50KG5ldyBLZXlib2FyZEV2ZW50KCdrZXlkb3duJywgZXZlbnRJbml0KSk7XHJcbiAgICB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQ/LmRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoJ2tleXByZXNzJywgZXZlbnRJbml0KSk7XHJcbiAgICB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQ/LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSB9KSk7XHJcbiAgICB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQ/LmRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoJ2tleXVwJywgZXZlbnRJbml0KSk7XHJcblxyXG4gICAgLy8gQW5kIHNldCBmb2N1cyB0byBpbnB1dFxyXG4gICAgdGhpcy5fZm9jdXNBY3RpdmVJbnB1dCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIHdoZW4gYW4gZXZlbnQgdGhhdCB3YXJyYW50cyBhIGN1cnNvciBwb3NpdGlvbiB1cGRhdGUgaXMgdHJpZ2dlcmVkXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIEBwYXJhbSBldmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2NhcmV0RXZlbnRIYW5kbGVyKGV2ZW50OiBhbnkpIHtcclxuICAgIGxldCB0YXJnZXRUYWdOYW1lID0gJyc7XHJcbiAgICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUpIHtcclxuICAgICAgdGFyZ2V0VGFnTmFtZSA9IGV2ZW50LnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaXNUZXh0SW5wdXQgPVxyXG4gICAgICB0YXJnZXRUYWdOYW1lID09PSAndGV4dGFyZWEnIHx8XHJcbiAgICAgICh0YXJnZXRUYWdOYW1lID09PSAnaW5wdXQnICYmIFsndGV4dCcsICdzZWFyY2gnLCAnZW1haWwnLCAncGFzc3dvcmQnLCAndXJsJywgJ3RlbCddLmluY2x1ZGVzKGV2ZW50LnRhcmdldC50eXBlKSk7XHJcblxyXG4gICAgY29uc3QgaXNLZXlib2FyZCA9XHJcbiAgICAgIGV2ZW50LnRhcmdldCA9PT0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IHx8XHJcbiAgICAgIChldmVudC50YXJnZXQgJiYgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpO1xyXG5cclxuICAgIGlmIChpc1RleHRJbnB1dCAmJiB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQgPT0gZXZlbnQudGFyZ2V0KSB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBUcmFja3MgY3VycmVudCBjdXJzb3IgcG9zaXRpb25cclxuICAgICAgICogQXMga2V5cyBhcmUgcHJlc3NlZCwgdGV4dCB3aWxsIGJlIGFkZGVkL3JlbW92ZWQgYXQgdGhhdCBwb3NpdGlvbiB3aXRoaW4gdGhlIGlucHV0LlxyXG4gICAgICAgKi9cclxuICAgICAgdGhpcy5fc2V0Q2FyZXRQb3NpdGlvbihldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQsIGV2ZW50LnRhcmdldC5zZWxlY3Rpb25FbmQpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICdDYXJldCBhdDonLFxyXG4gICAgICAgICAgdGhpcy5fY2FyZXRQb3NpdGlvbixcclxuICAgICAgICAgIHRoaXMuX2NhcmV0UG9zaXRpb25FbmQsXHJcbiAgICAgICAgICBldmVudCAmJiBldmVudC50YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgICAgZXZlbnQsXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChldmVudC50eXBlID09PSAncG9pbnRlcnVwJyAmJiB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgdGhpcy5faXNNb3VzZUhvbGQpIHtcclxuICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgdG8gZW5zdXJlIHRoYXQgaWYgdGhlIHVzZXIgcmVsZWFzZXMgdGhlIGJ1dHRvbiBvdXRzaWRlIG9mIHRoZSB3aW5kb3csIHRoZSBrZXlib2FyZCBkb2Vzbid0IGdldCBzdHVjay5cclxuICAgICAgdGhpcy5oYW5kbGVCdXR0b25VcCgnJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSBpZiAoIWlzS2V5Ym9hcmQgJiYgZXZlbnQ/LnR5cGUgIT09ICdzZWxlY3Rpb25jaGFuZ2UnKSB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiB3ZSBtdXN0IGVuc3VyZSBjYXJldFBvc2l0aW9uIGRvZXNuJ3QgcGVyc2lzdCBvbmNlIHJlYWN0aXZhdGVkLlxyXG4gICAgICAgKi9cclxuICAgICAgdGhpcy5fc2V0Q2FyZXRQb3NpdGlvbihudWxsKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmRlYnVnKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYENhcmV0IHBvc2l0aW9uIHJlc2V0IGR1ZSB0byBcIiR7ZXZlbnQ/LnR5cGV9XCIgZXZlbnRgLCBldmVudCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBDbG9zZSBwYW5lbFxyXG4gICAgICAgKi9cclxuICAgICAgdGhpcy5jbG9zZVBhbmVsLmVtaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvY3VzIHRvIGlucHV0XHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2ZvY3VzQWN0aXZlSW5wdXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQ/LmZvY3VzKCk7XHJcbiAgICB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQ/LnNldFNlbGVjdGlvblJhbmdlKHRoaXMuX2NhcmV0UG9zaXRpb24sIHRoaXMuX2NhcmV0UG9zaXRpb25FbmQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGVsIGhpZ2hsaWdodCBvbiBrZXkgZG93blxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIEtleWJvYXJkRXZlbnRcclxuICAgKi9cclxuICBwcml2YXRlIF9oYW5kbGVIaWdobGlnaHRLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBidXR0b25QcmVzc2VkID0gdGhpcy5fZ2V0S2V5Ym9hcmRMYXlvdXRLZXkoZXZlbnQpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYWN0aXZlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX3NldEFjdGl2ZUJ1dHRvbihidXR0b25QcmVzc2VkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRlbCBoaWdobGlnaHQgb24ga2V5IHVwXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIEBwYXJhbSBldmVudCBUaGUgS2V5Ym9hcmRFdmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2hhbmRsZUhpZ2hsaWdodEtleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBidXR0b25QcmVzc2VkID0gdGhpcy5fZ2V0S2V5Ym9hcmRMYXlvdXRLZXkoZXZlbnQpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgYWN0aXZlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX3JlbW92ZUFjdGl2ZUJ1dHRvbihidXR0b25QcmVzc2VkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyYW5zZm9ybXMgYSBLZXlib2FyZEV2ZW50J3MgXCJrZXkuY29kZVwiIHN0cmluZyBpbnRvIGEgdmlydHVhbC1rZXlib2FyZCBsYXlvdXQgZm9ybWF0XHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIEBwYXJhbSBldmVudCBUaGUgS2V5Ym9hcmRFdmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2dldEtleWJvYXJkTGF5b3V0S2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBsZXQgb3V0cHV0ID0gJyc7XHJcbiAgICBjb25zdCBrZXlJZCA9IGV2ZW50LmNvZGUgfHwgZXZlbnQua2V5O1xyXG5cclxuICAgIGlmIChcclxuICAgICAga2V5SWQ/LmluY2x1ZGVzKCdTcGFjZScpIHx8XHJcbiAgICAgIGtleUlkPy5pbmNsdWRlcygnTnVtcGFkJykgfHxcclxuICAgICAga2V5SWQ/LmluY2x1ZGVzKCdCYWNrc3BhY2UnKSB8fFxyXG4gICAgICBrZXlJZD8uaW5jbHVkZXMoJ0NhcHNMb2NrJykgfHxcclxuICAgICAga2V5SWQ/LmluY2x1ZGVzKCdNZXRhJylcclxuICAgICkge1xyXG4gICAgICBvdXRwdXQgPSBgeyR7ZXZlbnQuY29kZX19YCB8fCAnJztcclxuICAgIH0gZWxzZSBpZiAoa2V5SWQ/LmluY2x1ZGVzKCdDb250cm9sJykgfHwga2V5SWQ/LmluY2x1ZGVzKCdTaGlmdCcpIHx8IGtleUlkPy5pbmNsdWRlcygnQWx0JykpIHtcclxuICAgICAgb3V0cHV0ID0gYHske2V2ZW50LmtleX19YCB8fCAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG91dHB1dCA9IGV2ZW50LmtleSB8fCAnJztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0cHV0Lmxlbmd0aCA+IDEgPyBvdXRwdXQ/LnRvTG93ZXJDYXNlKCkgOiBvdXRwdXQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgYWN0aXZlIGNsYXNzIGluIGJ1dHRvblxyXG4gICAqXHJcbiAgICogQHBhcmFtIGJ1dHRvbk5hbWVcclxuICAgKi9cclxuICBwcml2YXRlIF9zZXRBY3RpdmVCdXR0b24oYnV0dG9uTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBub2RlID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKS5uYW1lZEl0ZW0oYnV0dG9uTmFtZSk7XHJcbiAgICBpZiAobm9kZSAmJiBub2RlLmNsYXNzTGlzdCkge1xyXG4gICAgICBub2RlLmNsYXNzTGlzdC5hZGQodGhpcy5fYWN0aXZlQnV0dG9uQ2xhc3MpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGFjdGl2ZSBidXR0b25cclxuICAgKlxyXG4gICAqIEBwYXJhbSBidXR0b25OYW1lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlQWN0aXZlQnV0dG9uKGJ1dHRvbk5hbWU/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKTtcclxuICAgIGlmIChidXR0b25OYW1lKSB7XHJcbiAgICAgIGNvbnN0IG5vZGUgPSBub2Rlcy5uYW1lZEl0ZW0oYnV0dG9uTmFtZSk7XHJcbiAgICAgIGlmIChub2RlICYmIG5vZGUuY2xhc3NMaXN0KSB7XHJcbiAgICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2FjdGl2ZUJ1dHRvbkNsYXNzKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIG5vZGVzW2ldLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fYWN0aXZlQnV0dG9uQ2xhc3MpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ0b3VjaC1rZXlib2FyZFwiIFtjbGFzc109XCInbGF5b3V0LScgKyBsYXlvdXRNb2RlICsgJy0nICsgbGF5b3V0TmFtZVwiPlxyXG4gIEBmb3IgKHJvdyBvZiBsb2NhbGUubGF5b3V0c1tsYXlvdXRNb2RlICsgXCJfXCIgKyBsYXlvdXROYW1lXTsgdHJhY2sgcm93WzBdOyBsZXQgcm93SW5kZXggPSAkaW5kZXgpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJ0b3VjaC1rZXlib2FyZC1yb3dcIj5cclxuICAgICAgQGZvciAoa2V5IG9mIHJvdzsgdHJhY2sga2V5KSB7XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgW25hbWVdPVwia2V5XCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgW2Rpcl09XCJsb2NhbGUuZGlyXCJcclxuICAgICAgICAgIGNsYXNzPVwidG91Y2gta2V5Ym9hcmQta2V5XCJcclxuICAgICAgICAgIFtjbGFzc109XCJnZXRCdXR0b25DbGFzcyhrZXkpXCJcclxuICAgICAgICAgIFthdHRyLmRhdGEtbGF5b3V0XT1cImxheW91dE1vZGVcIlxyXG4gICAgICAgICAgKHBvaW50ZXJ1cCk9XCJoYW5kbGVCdXR0b25VcChrZXksICRldmVudClcIlxyXG4gICAgICAgICAgKHBvaW50ZXJkb3duKT1cImhhbmRsZUJ1dHRvbkRvd24oa2V5LCAkZXZlbnQpXCJcclxuICAgICAgICAgIChwb2ludGVyY2FuY2VsKT1cImhhbmRsZUJ1dHRvblVwKGtleSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICBbaW5uZXJIdG1sXT1cImdldEJ1dHRvbkRpc3BsYXlOYW1lKGtleSlcIlxyXG4gICAgICAgID48L2J1dHRvbj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgfVxyXG48L2Rpdj5cclxuIl19
@@ -1,4 +1,4 @@
1
- import { booleanAttribute, Directive, effect, ElementRef, inject, input, model, } from '@angular/core';
1
+ import { booleanAttribute, Directive, effect, ElementRef, HostListener, inject, input, model, } from '@angular/core';
2
2
  import { ComponentPortal } from '@angular/cdk/portal';
3
3
  import { Overlay } from '@angular/cdk/overlay';
4
4
  import { NgxTouchKeyboardComponent } from './ngx-touch-keyboard.component';
@@ -26,15 +26,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
26
26
  * It also handles the creation and configuration of the overlay used to display the keyboard.
27
27
  */
28
28
  export class NgxTouchKeyboardDirective {
29
+ onFocus() {
30
+ if (this.openOnFocus()) {
31
+ this.open.set(true);
32
+ }
33
+ }
29
34
  /**
30
35
  * constructor
31
36
  */
32
37
  constructor() {
33
38
  this._overlay = inject(Overlay);
34
39
  this._elementRef = inject((ElementRef));
40
+ this._isMobile = /Android|iPhone|iPad|iPod/i.test(navigator.userAgent);
35
41
  this.open = model(false, {
36
42
  alias: 'ngxTouchKeyboardOpen',
37
43
  });
44
+ this.openOnFocus = input(false, {
45
+ alias: 'ngxTouchKeyboardOpenOnFocus',
46
+ transform: booleanAttribute,
47
+ });
38
48
  this.locale = input(undefined, {
39
49
  alias: 'ngxTouchKeyboardLocale',
40
50
  });
@@ -91,18 +101,25 @@ export class NgxTouchKeyboardDirective {
91
101
  this._overlayRef.updatePositionStrategy(this._getPositionStrategy(this.fullScreenMode()));
92
102
  // Update size the overlay
93
103
  this._overlayRef.updateSize(this._getOverlaySize(this.fullScreenMode()));
104
+ // Set input to readonly on mobile devices to prevent the native keyboard from appearing
105
+ if (this._isMobile)
106
+ this._elementRef.nativeElement.readOnly = true;
94
107
  // Attach the portal to the overlay
95
108
  this._panelRef = this._overlayRef.attach(new ComponentPortal(NgxTouchKeyboardComponent));
96
109
  this._panelRef.instance.debug = this.debugMode();
97
110
  this._panelRef.instance.setLocale(this.locale());
98
111
  this._panelRef.instance.setActiveInput(this._elementRef.nativeElement);
99
- this._panelRef.instance.closePanel.subscribe(() => this.closePanel());
112
+ this._panelRef.instance.closePanel.subscribe(() => this.open.set(false));
100
113
  this.open.set(true);
101
114
  }
102
115
  /**
103
116
  * Close keyboard panel
104
117
  */
105
118
  closePanel() {
119
+ if (this._isMobile) {
120
+ this._elementRef.nativeElement.readOnly = false;
121
+ this._elementRef.nativeElement.blur();
122
+ }
106
123
  this._overlayRef?.detach();
107
124
  this.open.set(false);
108
125
  }
@@ -219,7 +236,7 @@ export class NgxTouchKeyboardDirective {
219
236
  return element;
220
237
  }
221
238
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgxTouchKeyboardDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
222
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.0", type: NgxTouchKeyboardDirective, selector: "input[ngxTouchKeyboard], textarea[ngxTouchKeyboard]", inputs: { open: { classPropertyName: "open", publicName: "ngxTouchKeyboardOpen", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "ngxTouchKeyboardLocale", isSignal: true, isRequired: false, transformFunction: null }, debugMode: { classPropertyName: "debugMode", publicName: "ngxTouchKeyboardDebug", isSignal: true, isRequired: false, transformFunction: null }, fullScreenMode: { classPropertyName: "fullScreenMode", publicName: "ngxTouchKeyboardFullScreen", isSignal: true, isRequired: false, transformFunction: null }, origin: { classPropertyName: "origin", publicName: "ngxConnectedTouchKeyboardOrigin", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "ngxTouchKeyboardOpenChange" }, exportAs: ["ngxTouchKeyboard"], ngImport: i0 }); }
239
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.0", type: NgxTouchKeyboardDirective, selector: "input[ngxTouchKeyboard], textarea[ngxTouchKeyboard]", inputs: { open: { classPropertyName: "open", publicName: "ngxTouchKeyboardOpen", isSignal: true, isRequired: false, transformFunction: null }, openOnFocus: { classPropertyName: "openOnFocus", publicName: "ngxTouchKeyboardOpenOnFocus", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "ngxTouchKeyboardLocale", isSignal: true, isRequired: false, transformFunction: null }, debugMode: { classPropertyName: "debugMode", publicName: "ngxTouchKeyboardDebug", isSignal: true, isRequired: false, transformFunction: null }, fullScreenMode: { classPropertyName: "fullScreenMode", publicName: "ngxTouchKeyboardFullScreen", isSignal: true, isRequired: false, transformFunction: null }, origin: { classPropertyName: "origin", publicName: "ngxConnectedTouchKeyboardOrigin", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "ngxTouchKeyboardOpenChange" }, host: { listeners: { "focus": "onFocus()" } }, exportAs: ["ngxTouchKeyboard"], ngImport: i0 }); }
223
240
  }
224
241
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgxTouchKeyboardDirective, decorators: [{
225
242
  type: Directive,
@@ -227,5 +244,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
227
244
  selector: 'input[ngxTouchKeyboard], textarea[ngxTouchKeyboard]',
228
245
  exportAs: 'ngxTouchKeyboard',
229
246
  }]
230
- }], ctorParameters: () => [] });
231
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRvdWNoLWtleWJvYXJkLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10b3VjaC1rZXlib2FyZC9zcmMvbGliL25neC10b3VjaC1rZXlib2FyZC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGdCQUFnQixFQUVoQixTQUFTLEVBQ1QsTUFBTSxFQUNOLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssR0FFTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE9BQU8sRUFBbUQsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFHM0U7OztHQUdHO0FBS0gsTUFBTSxPQUFPLHNCQUFzQjtJQUpuQztRQUtFLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDakM7OEdBRlksc0JBQXNCO2tHQUF0QixzQkFBc0I7OzJGQUF0QixzQkFBc0I7a0JBSmxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDBCQUEwQjtvQkFDcEMsUUFBUSxFQUFFLHdCQUF3QjtpQkFDbkM7O0FBS0Q7OztHQUdHO0FBS0gsTUFBTSxPQUFPLHlCQUF5QjtJQTZCcEM7O09BRUc7SUFDSDtRQS9CUSxhQUFRLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLGdCQUFXLEdBQUcsTUFBTSxDQUFDLENBQUEsVUFBNEIsQ0FBQSxDQUFDLENBQUM7UUFFM0QsU0FBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDbEIsS0FBSyxFQUFFLHNCQUFzQjtTQUM5QixDQUFDLENBQUM7UUFFSCxXQUFNLEdBQUcsS0FBSyxDQUFxQixTQUFTLEVBQUU7WUFDNUMsS0FBSyxFQUFFLHdC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Q0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7WUFDcEQsdUNBQXVDO1lBQ3ZDLE9BQU8sT0FBTyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUM7UUFDeEMsQ0FBQztRQUVELDRCQUE0QjtRQUM1QixJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQztZQUN4RCw4Q0FBOEM7WUFDOUMsT0FBTyxPQUFPLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUM7UUFDcEQsQ0FBQztRQUVELGVBQWU7UUFDZixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDOzhHQTdOVSx5QkFBeUI7a0dBQXpCLHlCQUF5Qjs7MkZBQXpCLHlCQUF5QjtrQkFKckMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUscURBQXFEO29CQUMvRCxRQUFRLEVBQUUsa0JBQWtCO2lCQUM3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcclxuICBDb21wb25lbnRSZWYsXHJcbiAgRGlyZWN0aXZlLFxyXG4gIGVmZmVjdCxcclxuICBFbGVtZW50UmVmLFxyXG4gIGluamVjdCxcclxuICBpbnB1dCxcclxuICBtb2RlbCxcclxuICBPbkRlc3Ryb3ksXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQgeyBPdmVybGF5LCBPdmVybGF5UmVmLCBPdmVybGF5U2l6ZUNvbmZpZywgUG9zaXRpb25TdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgTmd4VG91Y2hLZXlib2FyZENvbXBvbmVudCB9IGZyb20gJy4vbmd4LXRvdWNoLWtleWJvYXJkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExvY2FsZSB9IGZyb20gJy4vTG9jYWxlL3R5cGUnO1xyXG5cclxuLyoqXHJcbiAqIERpcmVjdGl2ZSBhcHBsaWVkIHRvIGFuIGVsZW1lbnQgdG8gbWFrZSBpdCB1c2FibGUgYXMgYW4gb3JpZ2luIGZvciBhbiBrZXlib2FyZCB1c2luZyBhXHJcbiAqIENvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3kuXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tuZ3hUb3VjaEtleWJvYXJkT3JpZ2luXScsXHJcbiAgZXhwb3J0QXM6ICduZ3hUb3VjaEtleWJvYXJkT3JpZ2luJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5neFRvdWNoS2V5Ym9hcmRPcmlnaW4ge1xyXG4gIGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaGlzIGRpcmVjdGl2ZSBwcm92aWRlcyBtZXRob2RzIHRvIG9wZW4sIGNsb3NlLCBhbmQgdG9nZ2xlIHRoZSB0b3VjaCBrZXlib2FyZCBwYW5lbC5cclxuICogSXQgYWxzbyBoYW5kbGVzIHRoZSBjcmVhdGlvbiBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgb3ZlcmxheSB1c2VkIHRvIGRpc3BsYXkgdGhlIGtleWJvYXJkLlxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdpbnB1dFtuZ3hUb3VjaEtleWJvYXJkXSwgdGV4dGFyZWFbbmd4VG91Y2hLZXlib2FyZF0nLFxyXG4gIGV4cG9ydEFzOiAnbmd4VG91Y2hLZXlib2FyZCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hUb3VjaEtleWJvYXJkRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICBwcml2YXRlIF9vdmVybGF5ID0gaW5qZWN0KE92ZXJsYXkpO1xyXG4gIHByaXZhdGUgX2VsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pik7XHJcblxyXG4gIG9wZW4gPSBtb2RlbChmYWxzZSwge1xyXG4gICAgYWxpYXM6ICduZ3hUb3VjaEtleWJvYXJkT3BlbicsXHJcbiAgfSk7XHJcblxyXG4gIGxvY2FsZSA9IGlucHV0PExvY2FsZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7XHJcbiAgICBhbGlhczogJ25neFRvdWNoS2V5Ym9hcmRMb2NhbGUnLFxyXG4gIH0pO1xyXG5cclxuICBkZWJ1Z01vZGUgPSBpbnB1dChmYWxzZSwge1xyXG4gICAgYWxpYXM6ICduZ3hUb3VjaEtleWJvYXJkRGVidWcnLFxyXG4gICAgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlLFxyXG4gIH0pO1xyXG5cclxuICBmdWxsU2NyZWVuTW9kZSA9IGlucHV0KGZhbHNlLCB7XHJcbiAgICBhbGlhczogJ25neFRvdWNoS2V5Ym9hcmRGdWxsU2NyZWVuJyxcclxuICAgIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSxcclxuICB9KTtcclxuXHJcbiAgb3JpZ2luID0gaW5wdXQ8Tmd4VG91Y2hLZXlib2FyZE9yaWdpbiB8IG51bGw+KG51bGwsIHtcclxuICAgIGFsaWFzOiAnbmd4Q29ubmVjdGVkVG91Y2hLZXlib2FyZE9yaWdpbicsXHJcbiAgfSk7XHJcblxyXG4gIHByaXZhdGUgX292ZXJsYXlSZWYhOiBPdmVybGF5UmVmO1xyXG4gIHByaXZhdGUgX3BhbmVsUmVmITogQ29tcG9uZW50UmVmPE5neFRvdWNoS2V5Ym9hcmRDb21wb25lbnQ+O1xyXG5cclxuICAvKipcclxuICAgKiBjb25zdHJ1Y3RvclxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgdGhpcy5vcGVuKCkgPyB0aGlzLm9wZW5QYW5lbCgpIDogdGhpcy5jbG9zZVBhbmVsKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gQCBMaWZlY3ljbGUgaG9va3NcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAvKipcclxuICAgKiBPbiBkZXN0cm95XHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAvLyBEaXNwb3NlIHRoZSBvdmVybGF5XHJcbiAgICBpZiAodGhpcy5fb3ZlcmxheVJlZikge1xyXG4gICAgICB0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gQCBQdWJsaWMgbWV0aG9kc1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qKlxyXG4gICAqIE9wZW4ga2V5Ym9hcmQgcGFuZWxcclxuICAgKi9cclxuICBvcGVuUGFuZWwoKTogdm9pZCB7XHJcbiAgICAvLyByZXR1cm4gaWYgcGFuZWwgaXMgYXR0YWNoZWRcclxuICAgIGlmICh0aGlzLl9vdmVybGF5UmVmPy5oYXNBdHRhY2hlZCgpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDcmVhdGUgdGhlIG92ZXJsYXkgaWYgaXQgZG9lc24ndCBleGlzdFxyXG4gICAgaWYgKCF0aGlzLl9vdmVybGF5UmVmKSB7XHJcbiAgICAgIHRoaXMuX2NyZWF0ZU92ZXJsYXkoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTZXQgb3ZlcmxheSBjbGFzc1xyXG4gICAgaWYgKHRoaXMuZnVsbFNjcmVlbk1vZGUoKSkge1xyXG4gICAgICB0aGlzLl9vdmVybGF5UmVmLmFkZFBhbmVsQ2xhc3MoJ25neC10b3VjaC1rZXlib2FyZC1mdWxsU2NyZWVuJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9vdmVybGF5UmVmLnJlbW92ZVBhbmVsQ2xhc3MoJ25neC10b3VjaC1rZXlib2FyZC1mdWxsU2NyZWVuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBkYXRlIHBvc2l0aW9uIHRoZSBvdmVybGF5XHJcbiAgICB0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5fZ2V0UG9zaXRpb25TdHJhdGVneSh0aGlzLmZ1bGxTY3JlZW5Nb2RlKCkpKTtcclxuXHJcbiAgICAvLyBVcGRhdGUgc2l6ZSB0aGUgb3ZlcmxheVxyXG4gICAgdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVTaXplKHRoaXMuX2dldE92ZXJsYXlTaXplKHRoaXMuZnVsbFNjcmVlbk1vZGUoKSkpO1xyXG5cclxuICAgIC8vIEF0dGFjaCB0aGUgcG9ydGFsIHRvIHRoZSBvdmVybGF5XHJcbiAgICB0aGlzLl9wYW5lbFJlZiA9IHRoaXMuX292ZXJsYXlSZWYuYXR0YWNoKG5ldyBDb21wb25lbnRQb3J0YWwoTmd4VG91Y2hLZXlib2FyZENvbXBvbmVudCkpO1xyXG4gICAgdGhpcy5fcGFuZWxSZWYuaW5zdGFuY2UuZGVidWcgPSB0aGlzLmRlYnVnTW9kZSgpO1xyXG4gICAgdGhpcy5fcGFuZWxSZWYuaW5zdGFuY2Uuc2V0TG9jYWxlKHRoaXMubG9jYWxlKCkpO1xyXG4gICAgdGhpcy5fcGFuZWxSZWYuaW5zdGFuY2Uuc2V0QWN0aXZlSW5wdXQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcclxuICAgIHRoaXMuX3BhbmVsUmVmLmluc3RhbmNlLmNsb3NlUGFuZWwuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xvc2VQYW5lbCgpKTtcclxuICAgIHRoaXMub3Blbi5zZXQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbG9zZSBrZXlib2FyZCBwYW5lbFxyXG4gICAqL1xyXG4gIGNsb3NlUGFuZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9vdmVybGF5UmVmPy5kZXRhY2goKTtcclxuICAgIHRoaXMub3Blbi5zZXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlIGtleWJvYXJkIHBhbmVsXHJcbiAgICovXHJcbiAgdG9nZ2xlUGFuZWwoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5vcGVuKCkpIHtcclxuICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9wZW5QYW5lbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBAIFByaXZhdGUgbWV0aG9kc1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSB0aGUgb3ZlcmxheVxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIF9jcmVhdGVPdmVybGF5KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fb3ZlcmxheVJlZiA9IHRoaXMuX292ZXJsYXkuY3JlYXRlKHtcclxuICAgICAgZGlyZWN0aW9uOiAnbHRyJyxcclxuICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxyXG4gICAgICBwYW5lbENsYXNzOiAnbmd4LXRvdWNoLWtleWJvYXJkLW92ZXJsYXktcGFuZScsXHJcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLl9vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMubm9vcCgpLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgcG9zaXRpb24gc3RyYXRlZ3lcclxuICAgKlxyXG4gICAqIEBwYXJhbSBmdWxsc2NyZWVuXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIF9nZXRQb3NpdGlvblN0cmF0ZWd5KGZ1bGxzY3JlZW46IGJvb2xlYW4pOiBQb3NpdGlvblN0cmF0ZWd5IHtcclxuICAgIGlmIChmdWxsc2NyZWVuKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCkuY2VudGVySG9yaXpvbnRhbGx5KCkuYm90dG9tKCcwJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX292ZXJsYXlcclxuICAgICAgLnBvc2l0aW9uKClcclxuICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZ2V0T3JpZ2luRWxlbWVudCgpKVxyXG4gICAgICAud2l0aExvY2tlZFBvc2l0aW9uKClcclxuICAgICAgLndpdGhQdXNoKClcclxuICAgICAgLndpdGhQb3NpdGlvbnMoW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXHJcbiAgICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcclxuICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxyXG4gICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcclxuICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxyXG4gICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXHJcbiAgICAgICAgICBvdmVybGF5WTogJ2JvdHRvbScsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcclxuICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxyXG4gICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxyXG4gICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgb3JpZ2luWDogJ2VuZCcsXHJcbiAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcclxuICAgICAgICAgIG92ZXJsYXlYOiAnZW5kJyxcclxuICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcclxuICAgICAgICB9LFxyXG4gICAgICBdKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBvdmVybGF5IHNpemVcclxuICAgKlxyXG4gICAqIEBwYXJhbSBmdWxsc2NyZWVuXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIF9nZXRPdmVybGF5U2l6ZShmdWxsc2NyZWVuOiBib29sZWFuKTogT3ZlcmxheVNpemVDb25maWcge1xyXG4gICAgaWYgKGZ1bGxzY3JlZW4pIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgICAgIG1heFdpZHRoOiAnMTAwJScsXHJcbiAgICAgICAgbWluV2lkdGg6ICcxMDAlJyxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB3aWR0aDogdGhpcy5fZ2V0T3JpZ2luRWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLFxyXG4gICAgICBtYXhXaWR0aDogdGhpcy5fZ2V0T3JpZ2luRWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLFxyXG4gICAgICBtaW5XaWR0aDogJzI2MHB4JyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBvcmlnaW4gZWxlbWVudCBmb3IgdGhlIGtleWJvYXJkIHBhbmVsLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIF9nZXRPcmlnaW5FbGVtZW50KCk6IGFueSB7XHJcbiAgICBpZiAodGhpcy5vcmlnaW4oKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5vcmlnaW4oKT8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgLy8gTWF0ZXJpYWwgZm9ybSBmaWVsZCA8PSB2MTRcclxuICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbWF0LWlucHV0LWVsZW1lbnQnKSkge1xyXG4gICAgICAvLyBSZXR1cm4gW21hdC1mb3JtLWZpZWxkLWZsZXhdIGVsZW1lbnRcclxuICAgICAgcmV0dXJuIGVsZW1lbnQucGFyZW50Tm9kZT8ucGFyZW50Tm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNYXRlcmlhbCBmb3JtIGZpZWxkID4gdjE0XHJcbiAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ21hdC1tZGMtaW5wdXQtZWxlbWVudCcpKSB7XHJcbiAgICAgIC8vIFJldHVybiBbbWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXJdIGVsZW1lbnRcclxuICAgICAgcmV0dXJuIGVsZW1lbnQucGFyZW50Tm9kZT8ucGFyZW50Tm9kZT8ucGFyZW50Tm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXR1cm4gaW5wdXRcclxuICAgIHJldHVybiBlbGVtZW50O1xyXG4gIH1cclxufVxyXG4iXX0=
247
+ }], ctorParameters: () => [], propDecorators: { onFocus: [{
248
+ type: HostListener,
249
+ args: ['focus']
250
+ }] } });
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRvdWNoLWtleWJvYXJkLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10b3VjaC1rZXlib2FyZC9zcmMvbGliL25neC10b3VjaC1rZXlib2FyZC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGdCQUFnQixFQUVoQixTQUFTLEVBQ1QsTUFBTSxFQUNOLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEdBRU4sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQW1ELE1BQU0sc0JBQXNCLENBQUM7QUFDaEcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7O0FBRzNFOzs7R0FHRztBQUtILE1BQU0sT0FBTyxzQkFBc0I7SUFKbkM7UUFLRSxlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ2pDOzhHQUZZLHNCQUFzQjtrR0FBdEIsc0JBQXNCOzsyRkFBdEIsc0JBQXNCO2tCQUpsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwwQkFBMEI7b0JBQ3BDLFFBQVEsRUFBRSx3QkFBd0I7aUJBQ25DOztBQUtEOzs7R0FHRztBQUtILE1BQU0sT0FBTyx5QkFBeUI7SUFvQ3BDLE9BQU87UUFDTCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSDtRQTVDUSxhQUFRLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLGdCQUFXLEdBQUcsTUFBTSxDQUFDLENBQUEsVUFBNEIsQ0FBQSxDQUFDLENB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QkFBQztvQkFDVCxRQUFRLEVBQUUscURBQXFEO29CQUMvRCxRQUFRLEVBQUUsa0JBQWtCO2lCQUM3Qjt3REFxQ0MsT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXHJcbiAgQ29tcG9uZW50UmVmLFxyXG4gIERpcmVjdGl2ZSxcclxuICBlZmZlY3QsXHJcbiAgRWxlbWVudFJlZixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgaW5qZWN0LFxyXG4gIGlucHV0LFxyXG4gIG1vZGVsLFxyXG4gIE9uRGVzdHJveSxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XHJcbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlSZWYsIE92ZXJsYXlTaXplQ29uZmlnLCBQb3NpdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBOZ3hUb3VjaEtleWJvYXJkQ29tcG9uZW50IH0gZnJvbSAnLi9uZ3gtdG91Y2gta2V5Ym9hcmQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTG9jYWxlIH0gZnJvbSAnLi9Mb2NhbGUvdHlwZSc7XHJcblxyXG4vKipcclxuICogRGlyZWN0aXZlIGFwcGxpZWQgdG8gYW4gZWxlbWVudCB0byBtYWtlIGl0IHVzYWJsZSBhcyBhbiBvcmlnaW4gZm9yIGFuIGtleWJvYXJkIHVzaW5nIGFcclxuICogQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneS5cclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW25neFRvdWNoS2V5Ym9hcmRPcmlnaW5dJyxcclxuICBleHBvcnRBczogJ25neFRvdWNoS2V5Ym9hcmRPcmlnaW4nLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4VG91Y2hLZXlib2FyZE9yaWdpbiB7XHJcbiAgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRoaXMgZGlyZWN0aXZlIHByb3ZpZGVzIG1ldGhvZHMgdG8gb3BlbiwgY2xvc2UsIGFuZCB0b2dnbGUgdGhlIHRvdWNoIGtleWJvYXJkIHBhbmVsLlxyXG4gKiBJdCBhbHNvIGhhbmRsZXMgdGhlIGNyZWF0aW9uIGFuZCBjb25maWd1cmF0aW9uIG9mIHRoZSBvdmVybGF5IHVzZWQgdG8gZGlzcGxheSB0aGUga2V5Ym9hcmQuXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ2lucHV0W25neFRvdWNoS2V5Ym9hcmRdLCB0ZXh0YXJlYVtuZ3hUb3VjaEtleWJvYXJkXScsXHJcbiAgZXhwb3J0QXM6ICduZ3hUb3VjaEtleWJvYXJkJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5neFRvdWNoS2V5Ym9hcmREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgX292ZXJsYXkgPSBpbmplY3QoT3ZlcmxheSk7XHJcbiAgcHJpdmF0ZSBfZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+KTtcclxuICBwcml2YXRlIF9pc01vYmlsZSA9IC9BbmRyb2lkfGlQaG9uZXxpUGFkfGlQb2QvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xyXG5cclxuICBvcGVuID0gbW9kZWwoZmFsc2UsIHtcclxuICAgIGFsaWFzOiAnbmd4VG91Y2hLZXlib2FyZE9wZW4nLFxyXG4gIH0pO1xyXG5cclxuICBvcGVuT25Gb2N1cyA9IGlucHV0KGZhbHNlLCB7XHJcbiAgICBhbGlhczogJ25neFRvdWNoS2V5Ym9hcmRPcGVuT25Gb2N1cycsXHJcbiAgICB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUsXHJcbiAgfSk7XHJcblxyXG4gIGxvY2FsZSA9IGlucHV0PExvY2FsZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7XHJcbiAgICBhbGlhczogJ25neFRvdWNoS2V5Ym9hcmRMb2NhbGUnLFxyXG4gIH0pO1xyXG5cclxuICBkZWJ1Z01vZGUgPSBpbnB1dChmYWxzZSwge1xyXG4gICAgYWxpYXM6ICduZ3hUb3VjaEtleWJvYXJkRGVidWcnLFxyXG4gICAgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlLFxyXG4gIH0pO1xyXG5cclxuICBmdWxsU2NyZWVuTW9kZSA9IGlucHV0KGZhbHNlLCB7XHJcbiAgICBhbGlhczogJ25neFRvdWNoS2V5Ym9hcmRGdWxsU2NyZWVuJyxcclxuICAgIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSxcclxuICB9KTtcclxuXHJcbiAgb3JpZ2luID0gaW5wdXQ8Tmd4VG91Y2hLZXlib2FyZE9yaWdpbiB8IG51bGw+KG51bGwsIHtcclxuICAgIGFsaWFzOiAnbmd4Q29ubmVjdGVkVG91Y2hLZXlib2FyZE9yaWdpbicsXHJcbiAgfSk7XHJcblxyXG4gIHByaXZhdGUgX292ZXJsYXlSZWYhOiBPdmVybGF5UmVmO1xyXG4gIHByaXZhdGUgX3BhbmVsUmVmITogQ29tcG9uZW50UmVmPE5neFRvdWNoS2V5Ym9hcmRDb21wb25lbnQ+O1xyXG5cclxuICBASG9zdExpc3RlbmVyKCdmb2N1cycpXHJcbiAgb25Gb2N1cygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm9wZW5PbkZvY3VzKCkpIHtcclxuICAgICAgdGhpcy5vcGVuLnNldCh0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGNvbnN0cnVjdG9yXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICB0aGlzLm9wZW4oKSA/IHRoaXMub3BlblBhbmVsKCkgOiB0aGlzLmNsb3NlUGFuZWwoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBAIExpZmVjeWNsZSBob29rc1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qKlxyXG4gICAqIE9uIGRlc3Ryb3lcclxuICAgKi9cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIC8vIERpc3Bvc2UgdGhlIG92ZXJsYXlcclxuICAgIGlmICh0aGlzLl9vdmVybGF5UmVmKSB7XHJcbiAgICAgIHRoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBAIFB1YmxpYyBtZXRob2RzXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLyoqXHJcbiAgICogT3BlbiBrZXlib2FyZCBwYW5lbFxyXG4gICAqL1xyXG4gIG9wZW5QYW5lbCgpOiB2b2lkIHtcclxuICAgIC8vIHJldHVybiBpZiBwYW5lbCBpcyBhdHRhY2hlZFxyXG4gICAgaWYgKHRoaXMuX292ZXJsYXlSZWY/Lmhhc0F0dGFjaGVkKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENyZWF0ZSB0aGUgb3ZlcmxheSBpZiBpdCBkb2Vzbid0IGV4aXN0XHJcbiAgICBpZiAoIXRoaXMuX292ZXJsYXlSZWYpIHtcclxuICAgICAgdGhpcy5fY3JlYXRlT3ZlcmxheSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNldCBvdmVybGF5IGNsYXNzXHJcbiAgICBpZiAodGhpcy5mdWxsU2NyZWVuTW9kZSgpKSB7XHJcbiAgICAgIHRoaXMuX292ZXJsYXlSZWYuYWRkUGFuZWxDbGFzcygnbmd4LXRvdWNoLWtleWJvYXJkLWZ1bGxTY3JlZW4nKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX292ZXJsYXlSZWYucmVtb3ZlUGFuZWxDbGFzcygnbmd4LXRvdWNoLWtleWJvYXJkLWZ1bGxTY3JlZW4nKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVcGRhdGUgcG9zaXRpb24gdGhlIG92ZXJsYXlcclxuICAgIHRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLl9nZXRQb3NpdGlvblN0cmF0ZWd5KHRoaXMuZnVsbFNjcmVlbk1vZGUoKSkpO1xyXG5cclxuICAgIC8vIFVwZGF0ZSBzaXplIHRoZSBvdmVybGF5XHJcbiAgICB0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVNpemUodGhpcy5fZ2V0T3ZlcmxheVNpemUodGhpcy5mdWxsU2NyZWVuTW9kZSgpKSk7XHJcblxyXG4gICAgLy8gU2V0IGlucHV0IHRvIHJlYWRvbmx5IG9uIG1vYmlsZSBkZXZpY2VzIHRvIHByZXZlbnQgdGhlIG5hdGl2ZSBrZXlib2FyZCBmcm9tIGFwcGVhcmluZ1xyXG4gICAgaWYgKHRoaXMuX2lzTW9iaWxlKSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucmVhZE9ubHkgPSB0cnVlO1xyXG5cclxuICAgIC8vIEF0dGFjaCB0aGUgcG9ydGFsIHRvIHRoZSBvdmVybGF5XHJcbiAgICB0aGlzLl9wYW5lbFJlZiA9IHRoaXMuX292ZXJsYXlSZWYuYXR0YWNoKG5ldyBDb21wb25lbnRQb3J0YWwoTmd4VG91Y2hLZXlib2FyZENvbXBvbmVudCkpO1xyXG4gICAgdGhpcy5fcGFuZWxSZWYuaW5zdGFuY2UuZGVidWcgPSB0aGlzLmRlYnVnTW9kZSgpO1xyXG4gICAgdGhpcy5fcGFuZWxSZWYuaW5zdGFuY2Uuc2V0TG9jYWxlKHRoaXMubG9jYWxlKCkpO1xyXG4gICAgdGhpcy5fcGFuZWxSZWYuaW5zdGFuY2Uuc2V0QWN0aXZlSW5wdXQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcclxuICAgIHRoaXMuX3BhbmVsUmVmLmluc3RhbmNlLmNsb3NlUGFuZWwuc3Vic2NyaWJlKCgpID0+IHRoaXMub3Blbi5zZXQoZmFsc2UpKTtcclxuICAgIHRoaXMub3Blbi5zZXQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbG9zZSBrZXlib2FyZCBwYW5lbFxyXG4gICAqL1xyXG4gIGNsb3NlUGFuZWwoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5faXNNb2JpbGUpIHtcclxuICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlYWRPbmx5ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5ibHVyKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9vdmVybGF5UmVmPy5kZXRhY2goKTtcclxuICAgIHRoaXMub3Blbi5zZXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlIGtleWJvYXJkIHBhbmVsXHJcbiAgICovXHJcbiAgdG9nZ2xlUGFuZWwoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5vcGVuKCkpIHtcclxuICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9wZW5QYW5lbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBAIFByaXZhdGUgbWV0aG9kc1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSB0aGUgb3ZlcmxheVxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIF9jcmVhdGVPdmVybGF5KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fb3ZlcmxheVJlZiA9IHRoaXMuX292ZXJsYXkuY3JlYXRlKHtcclxuICAgICAgZGlyZWN0aW9uOiAnbHRyJyxcclxuICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxyXG4gICAgICBwYW5lbENsYXNzOiAnbmd4LXRvdWNoLWtleWJvYXJkLW92ZXJsYXktcGFuZScsXHJcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLl9vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMubm9vcCgpLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgcG9zaXRpb24gc3RyYXRlZ3lcclxuICAgKlxyXG4gICAqIEBwYXJhbSBmdWxsc2NyZWVuXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIF9nZXRQb3NpdGlvblN0cmF0ZWd5KGZ1bGxzY3JlZW46IGJvb2xlYW4pOiBQb3NpdGlvblN0cmF0ZWd5IHtcclxuICAgIGlmIChmdWxsc2NyZWVuKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCkuY2VudGVySG9yaXpvbnRhbGx5KCkuYm90dG9tKCcwJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX292ZXJsYXlcclxuICAgICAgLnBvc2l0aW9uKClcclxuICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZ2V0T3JpZ2luRWxlbWVudCgpKVxyXG4gICAgICAud2l0aExvY2tlZFBvc2l0aW9uKClcclxuICAgICAgLndpdGhQdXNoKClcclxuICAgICAgLndpdGhQb3NpdGlvbnMoW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXHJcbiAgICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcclxuICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxyXG4gICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcclxuICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxyXG4gICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXHJcbiAgICAgICAgICBvdmVybGF5WTogJ2JvdHRvbScsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcclxuICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxyXG4gICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxyXG4gICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgb3JpZ2luWDogJ2VuZCcsXHJcbiAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcclxuICAgICAgICAgIG92ZXJsYXlYOiAnZW5kJyxcclxuICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcclxuICAgICAgICB9LFxyXG4gICAgICBdKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBvdmVybGF5IHNpemVcclxuICAgKlxyXG4gICAqIEBwYXJhbSBmdWxsc2NyZWVuXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIF9nZXRPdmVybGF5U2l6ZShmdWxsc2NyZWVuOiBib29sZWFuKTogT3ZlcmxheVNpemVDb25maWcge1xyXG4gICAgaWYgKGZ1bGxzY3JlZW4pIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgICAgIG1heFdpZHRoOiAnMTAwJScsXHJcbiAgICAgICAgbWluV2lkdGg6ICcxMDAlJyxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB3aWR0aDogdGhpcy5fZ2V0T3JpZ2luRWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLFxyXG4gICAgICBtYXhXaWR0aDogdGhpcy5fZ2V0T3JpZ2luRWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLFxyXG4gICAgICBtaW5XaWR0aDogJzI2MHB4JyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBvcmlnaW4gZWxlbWVudCBmb3IgdGhlIGtleWJvYXJkIHBhbmVsLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIF9nZXRPcmlnaW5FbGVtZW50KCk6IGFueSB7XHJcbiAgICBpZiAodGhpcy5vcmlnaW4oKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5vcmlnaW4oKT8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgLy8gTWF0ZXJpYWwgZm9ybSBmaWVsZCA8PSB2MTRcclxuICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbWF0LWlucHV0LWVsZW1lbnQnKSkge1xyXG4gICAgICAvLyBSZXR1cm4gW21hdC1mb3JtLWZpZWxkLWZsZXhdIGVsZW1lbnRcclxuICAgICAgcmV0dXJuIGVsZW1lbnQucGFyZW50Tm9kZT8ucGFyZW50Tm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNYXRlcmlhbCBmb3JtIGZpZWxkID4gdjE0XHJcbiAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ21hdC1tZGMtaW5wdXQtZWxlbWVudCcpKSB7XHJcbiAgICAgIC8vIFJldHVybiBbbWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXJdIGVsZW1lbnRcclxuICAgICAgcmV0dXJuIGVsZW1lbnQucGFyZW50Tm9kZT8ucGFyZW50Tm9kZT8ucGFyZW50Tm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXR1cm4gaW5wdXRcclxuICAgIHJldHVybiBlbGVtZW50O1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,4 +1,3 @@
1
- import { NgClass } from '@angular/common';
2
1
  import { NgModule } from '@angular/core';
3
2
  import { PortalModule } from '@angular/cdk/portal';
4
3
  import { OverlayModule } from '@angular/cdk/overlay';
@@ -7,15 +6,15 @@ import { NgxTouchKeyboardComponent } from './ngx-touch-keyboard.component';
7
6
  import * as i0 from "@angular/core";
8
7
  export class NgxTouchKeyboardModule {
9
8
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgxTouchKeyboardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
10
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.0", ngImport: i0, type: NgxTouchKeyboardModule, declarations: [NgxTouchKeyboardOrigin, NgxTouchKeyboardDirective, NgxTouchKeyboardComponent], imports: [NgClass, PortalModule, OverlayModule], exports: [NgxTouchKeyboardOrigin, NgxTouchKeyboardDirective, NgxTouchKeyboardComponent] }); }
9
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.0", ngImport: i0, type: NgxTouchKeyboardModule, declarations: [NgxTouchKeyboardOrigin, NgxTouchKeyboardDirective, NgxTouchKeyboardComponent], imports: [PortalModule, OverlayModule], exports: [NgxTouchKeyboardOrigin, NgxTouchKeyboardDirective, NgxTouchKeyboardComponent] }); }
11
10
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgxTouchKeyboardModule, imports: [PortalModule, OverlayModule] }); }
12
11
  }
13
12
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgxTouchKeyboardModule, decorators: [{
14
13
  type: NgModule,
15
14
  args: [{
16
- imports: [NgClass, PortalModule, OverlayModule],
15
+ imports: [PortalModule, OverlayModule],
17
16
  declarations: [NgxTouchKeyboardOrigin, NgxTouchKeyboardDirective, NgxTouchKeyboardComponent],
18
17
  exports: [NgxTouchKeyboardOrigin, NgxTouchKeyboardDirective, NgxTouchKeyboardComponent],
19
18
  }]
20
19
  }] });
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRvdWNoLWtleWJvYXJkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10b3VjaC1rZXlib2FyZC9zcmMvbGliL25neC10b3VjaC1rZXlib2FyZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFPM0UsTUFBTSxPQUFPLHNCQUFzQjs4R0FBdEIsc0JBQXNCOytHQUF0QixzQkFBc0IsaUJBSGxCLHNCQUFzQixFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixhQURqRixPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsYUFFcEMsc0JBQXNCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCOytHQUUzRSxzQkFBc0IsWUFKZCxZQUFZLEVBQUUsYUFBYTs7MkZBSW5DLHNCQUFzQjtrQkFMbEMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsQ0FBQztvQkFDL0MsWUFBWSxFQUFFLENBQUMsc0JBQXNCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLENBQUM7b0JBQzVGLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixDQUFDO2lCQUN4RiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQb3J0YWxNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcclxuaW1wb3J0IHsgT3ZlcmxheU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuXHJcbmltcG9ydCB7IE5neFRvdWNoS2V5Ym9hcmRPcmlnaW4sIE5neFRvdWNoS2V5Ym9hcmREaXJlY3RpdmUgfSBmcm9tICcuL25neC10b3VjaC1rZXlib2FyZC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBOZ3hUb3VjaEtleWJvYXJkQ29tcG9uZW50IH0gZnJvbSAnLi9uZ3gtdG91Y2gta2V5Ym9hcmQuY29tcG9uZW50JztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW05nQ2xhc3MsIFBvcnRhbE1vZHVsZSwgT3ZlcmxheU1vZHVsZV0sXHJcbiAgZGVjbGFyYXRpb25zOiBbTmd4VG91Y2hLZXlib2FyZE9yaWdpbiwgTmd4VG91Y2hLZXlib2FyZERpcmVjdGl2ZSwgTmd4VG91Y2hLZXlib2FyZENvbXBvbmVudF0sXHJcbiAgZXhwb3J0czogW05neFRvdWNoS2V5Ym9hcmRPcmlnaW4sIE5neFRvdWNoS2V5Ym9hcmREaXJlY3RpdmUsIE5neFRvdWNoS2V5Ym9hcmRDb21wb25lbnRdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4VG91Y2hLZXlib2FyZE1vZHVsZSB7fVxyXG4iXX0=
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRvdWNoLWtleWJvYXJkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10b3VjaC1rZXlib2FyZC9zcmMvbGliL25neC10b3VjaC1rZXlib2FyZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXJELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25HLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQU8zRSxNQUFNLE9BQU8sc0JBQXNCOzhHQUF0QixzQkFBc0I7K0dBQXRCLHNCQUFzQixpQkFIbEIsc0JBQXNCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLGFBRGpGLFlBQVksRUFBRSxhQUFhLGFBRTNCLHNCQUFzQixFQUFFLHlCQUF5QixFQUFFLHlCQUF5QjsrR0FFM0Usc0JBQXNCLFlBSnZCLFlBQVksRUFBRSxhQUFhOzsyRkFJMUIsc0JBQXNCO2tCQUxsQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUM7b0JBQ3RDLFlBQVksRUFBRSxDQUFDLHNCQUFzQixFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixDQUFDO29CQUM1RixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSx5QkFBeUIsRUFBRSx5QkFBeUIsQ0FBQztpQkFDeEYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQb3J0YWxNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcclxuaW1wb3J0IHsgT3ZlcmxheU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuXHJcbmltcG9ydCB7IE5neFRvdWNoS2V5Ym9hcmRPcmlnaW4sIE5neFRvdWNoS2V5Ym9hcmREaXJlY3RpdmUgfSBmcm9tICcuL25neC10b3VjaC1rZXlib2FyZC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBOZ3hUb3VjaEtleWJvYXJkQ29tcG9uZW50IH0gZnJvbSAnLi9uZ3gtdG91Y2gta2V5Ym9hcmQuY29tcG9uZW50JztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1BvcnRhbE1vZHVsZSwgT3ZlcmxheU1vZHVsZV0sXHJcbiAgZGVjbGFyYXRpb25zOiBbTmd4VG91Y2hLZXlib2FyZE9yaWdpbiwgTmd4VG91Y2hLZXlib2FyZERpcmVjdGl2ZSwgTmd4VG91Y2hLZXlib2FyZENvbXBvbmVudF0sXHJcbiAgZXhwb3J0czogW05neFRvdWNoS2V5Ym9hcmRPcmlnaW4sIE5neFRvdWNoS2V5Ym9hcmREaXJlY3RpdmUsIE5neFRvdWNoS2V5Ym9hcmRDb21wb25lbnRdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4VG91Y2hLZXlib2FyZE1vZHVsZSB7fVxyXG4iXX0=