ng2-iq-select2-exe 16.2.0 → 16.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -35,7 +35,7 @@ import { IqSelect2Module } from 'ng2-iq-select2';
35
35
  *html file*
36
36
  ```html
37
37
  <form [formGroup]="form">
38
- <iq-select2 css="form-control input-sm"
38
+ <iq-select2 inputContainerClass="form-control input-sm"
39
39
  formControlName="country"
40
40
  [dataSourceProvider]="listCountries"
41
41
  [selectedProvider]="loadFromIds"
@@ -46,7 +46,7 @@ import { IqSelect2Module } from 'ng2-iq-select2';
46
46
  *html file (custom template)*
47
47
  ```html
48
48
  <form [formGroup]="form">
49
- <iq-select2 css="form-control input-sm"
49
+ <iq-select2 inputContainerClass="form-control input-sm"
50
50
  formControlName="country"
51
51
  [dataSourceProvider]="listCountries"
52
52
  [selectedProvider]="loadFromIds"
@@ -1,9 +1,9 @@
1
- import { Component, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';
1
+ import { Component, ElementRef, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';
2
2
  import { IqSelect2ResultsComponent } from '../iq-select2-results/iq-select2-results.component';
3
- import { UntypedFormControl, NG_VALUE_ACCESSOR } from '@angular/forms';
4
- import { Messages } from './messages';
3
+ import { NG_VALUE_ACCESSOR, UntypedFormControl } from '@angular/forms';
5
4
  import { of } from 'rxjs';
6
5
  import { debounceTime, distinctUntilChanged, filter, map, mergeMap, switchMap, tap } from 'rxjs/operators';
6
+ import Messages from "./messages";
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "@angular/common";
9
9
  import * as i2 from "@angular/forms";
@@ -18,33 +18,31 @@ const VALUE_ACCESSOR = {
18
18
  useExisting: forwardRef(() => IqSelect2Component),
19
19
  multi: true
20
20
  };
21
- const noop = () => {
22
- };
23
21
  export class IqSelect2Component {
24
22
  constructor() {
25
- this.MORE_RESULTS_MSG = 'Showing ' + Messages.PARTIAL_COUNT_VAR + ' of ' + Messages.TOTAL_COUNT_VAR + ' results. Refine your search to show more results.';
26
- this.NO_RESULTS_MSG = 'No results available';
27
23
  this.referenceMode = 'id';
28
24
  this.multiple = false;
29
- this.searchDelay = 250;
30
25
  this.placeholder = '';
31
- this.minimumInputLength = 2;
32
26
  this.disabled = false;
33
- this.messages = {
34
- moreResultsAvailableMsg: this.MORE_RESULTS_MSG,
35
- noResultsAvailableMsg: this.NO_RESULTS_MSG
36
- };
37
27
  this.clientMode = false;
38
28
  this.badgeColor = 'info';
29
+ this.wrapSelectedText = 'nowrap';
30
+ this.debounceDelay = 250;
31
+ this.debounceLength = 2;
32
+ this.iconCaret = '&#9660;';
33
+ this.iconDelete = '&#215;';
34
+ this.messageMoreResults = Messages.MORE_RESULTS;
35
+ this.messageNoResults = Messages.NO_RESULTS;
39
36
  this.onSelect = new EventEmitter();
40
37
  this.onRemove = new EventEmitter();
41
38
  this.term = new UntypedFormControl();
42
39
  this.resultsVisible = false;
40
+ this.listData = [];
43
41
  this.selectedItems = [];
44
42
  this.searchFocused = false;
45
43
  this.placeholderSelected = '';
46
- this.onTouchedCallback = noop;
47
- this.onChangeCallback = noop;
44
+ this.onTouchedCallback = () => false;
45
+ this.onChangeCallback = () => false;
48
46
  }
49
47
  ngAfterViewInit() {
50
48
  this.subscribeToChangesAndLoadDataFromObservable();
@@ -73,11 +71,10 @@ export class IqSelect2Component {
73
71
  this.disabled = isDisabled;
74
72
  }
75
73
  subscribeToChangesAndLoadDataFromObservable() {
76
- const observable = this.term.valueChanges.pipe(debounceTime(this.searchDelay), distinctUntilChanged());
77
- this.subscribeToResults(observable);
74
+ this.subscribeToResults(this.term.valueChanges.pipe(debounceTime(this.debounceDelay), distinctUntilChanged()));
78
75
  }
79
76
  subscribeToResults(observable) {
80
- observable.pipe(tap(() => this.resultsVisible = false), filter((term) => term.length >= this.minimumInputLength), switchMap(term => this.loadDataFromObservable(term)), map(items => items.filter(item => !(this.multiple && this.alreadySelected(item)))), tap(() => this.resultsVisible = this.searchFocused)).subscribe((items) => this.listData = items);
77
+ observable.pipe(tap(() => this.resultsVisible = false), filter((term) => term.length >= this.debounceLength), switchMap(term => this.loadDataFromObservable(term)), map(items => items.filter(item => !(this.multiple && this.alreadySelected(item)))), tap(() => this.resultsVisible = this.searchFocused)).subscribe((items) => this.listData = items);
81
78
  }
82
79
  loadDataFromObservable(term) {
83
80
  return this.clientMode ? this.fetchAndfilterLocalData(term) : this.fetchData(term);
@@ -100,15 +97,7 @@ export class IqSelect2Component {
100
97
  return item.text.toUpperCase().indexOf(term.toUpperCase()) !== -1;
101
98
  }
102
99
  fetchData(term) {
103
- return this
104
- .dataSourceProvider(term, this.buildValue())
105
- .pipe(map((items) => this.adaptItems(items)));
106
- }
107
- adaptItems(items) {
108
- const convertedItems = [];
109
- items.map((item) => this.iqSelect2ItemAdapter(item))
110
- .forEach((iqSelect2Item) => convertedItems.push(iqSelect2Item));
111
- return convertedItems;
100
+ return this.dataSourceProvider(term, this.buildValue()).pipe(map((items) => items.map((item) => this.iqSelect2ItemAdapter(item))));
112
101
  }
113
102
  populateItemsFromEntities(selectedValues) {
114
103
  if (this.multiple) {
@@ -194,9 +183,7 @@ export class IqSelect2Component {
194
183
  }
195
184
  getSelectedIds() {
196
185
  if (this.multiple) {
197
- const ids = [];
198
- this.selectedItems.forEach(item => ids.push(item.id));
199
- return ids;
186
+ return this.selectedItems.map(item => item.id);
200
187
  }
201
188
  else {
202
189
  return this.selectedItems.length === 0 ? null : this.selectedItems[0].id;
@@ -204,11 +191,7 @@ export class IqSelect2Component {
204
191
  }
205
192
  getEntities() {
206
193
  if (this.multiple) {
207
- const entities = [];
208
- this.selectedItems.forEach(item => {
209
- entities.push(item.entity);
210
- });
211
- return entities;
194
+ return this.selectedItems.map(item => item.entity);
212
195
  }
213
196
  else {
214
197
  return this.selectedItems.length === 0 ? null : this.selectedItems[0].entity;
@@ -264,7 +247,7 @@ export class IqSelect2Component {
264
247
  }
265
248
  }
266
249
  else {
267
- if (this.minimumInputLength === 0) {
250
+ if (this.debounceLength === 0) {
268
251
  if (ev.keyCode === KEY_CODE_ENTER || ev.keyCode === KEY_CODE_DOWN_ARROW) {
269
252
  this.focusAndShowResults();
270
253
  }
@@ -272,6 +255,9 @@ export class IqSelect2Component {
272
255
  }
273
256
  }
274
257
  onKeyDown(ev) {
258
+ if (ev.keyCode === KEY_CODE_ENTER) {
259
+ ev.preventDefault();
260
+ }
275
261
  if (this.results) {
276
262
  if (ev.keyCode === KEY_CODE_TAB) {
277
263
  this.results.selectCurrentItem();
@@ -284,32 +270,15 @@ export class IqSelect2Component {
284
270
  }
285
271
  }
286
272
  }
287
- onKeyPress(ev) {
288
- if (ev.keyCode === KEY_CODE_ENTER) {
289
- ev.preventDefault();
290
- }
291
- }
292
- getCss() {
293
- return 'select2-selection-container ' + (this.css === undefined ? '' : this.css);
294
- }
295
273
  getPlaceholder() {
296
274
  return this.selectedItems.length > 0 ? this.placeholderSelected : this.placeholder;
297
275
  }
298
- getCountMessage() {
299
- let msg = this.messages && this.messages.moreResultsAvailableMsg ? this.messages.moreResultsAvailableMsg : this.MORE_RESULTS_MSG;
300
- msg = msg.replace(Messages.PARTIAL_COUNT_VAR, String(this.listData.length));
301
- msg = msg.replace(Messages.TOTAL_COUNT_VAR, String(this.resultsCount - this.selectedItems.length));
302
- return msg;
303
- }
304
- getBadgeColor() {
305
- return this.multiple ? 'bg-' + this.badgeColor : '';
306
- }
307
276
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.4", ngImport: i0, type: IqSelect2Component, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
308
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.4", type: IqSelect2Component, selector: "iq-select2", inputs: { dataSourceProvider: "dataSourceProvider", selectedProvider: "selectedProvider", iqSelect2ItemAdapter: "iqSelect2ItemAdapter", referenceMode: "referenceMode", multiple: "multiple", searchDelay: "searchDelay", css: "css", placeholder: "placeholder", minimumInputLength: "minimumInputLength", disabled: "disabled", searchIcon: "searchIcon", deleteIcon: "deleteIcon", messages: "messages", resultsCount: "resultsCount", clientMode: "clientMode", badgeColor: "badgeColor" }, outputs: { onSelect: "onSelect", onRemove: "onRemove" }, providers: [VALUE_ACCESSOR], viewQueries: [{ propertyName: "termInput", first: true, predicate: ["termInput"], descendants: true }, { propertyName: "results", first: true, predicate: ["results"], descendants: true }], ngImport: i0, template: "<div class=\"select2-container\">\r\n <ul (click)=\"focusAndShowResults()\"\r\n [class]=\"getCss()\"\r\n [class.simple-selection]=\"!multiple\"\r\n [class.multiple-selection]=\"multiple\"\r\n [class.search-focused]=\"searchFocused\"\r\n [class.readonly]=\"disabled\">\r\n\r\n <ng-container *ngIf=\"!searchFocused || multiple\">\r\n <li *ngFor=\"let item of selectedItems\"\r\n [class]=\"'select2-selected ' + getBadgeColor()\"\r\n [class.badge]=\"multiple\">\r\n\r\n <span class=\"selectedItemText\">{{item.text}}</span>\r\n <div *ngIf=\"!disabled\" class=\"select2-selection-remove\" (click)=\"removeItem(item)\">\r\n <i *ngIf=\"deleteIcon\" [class]=\"deleteIcon\"></i>\r\n <button *ngIf=\"!deleteIcon\" (click)=\"removeItem(item)\" type=\"button\" class=\"btn-close\" [class.btn-close-white]=\"multiple\" aria-label=\"Close\"></button>\r\n </div>\r\n\r\n </li>\r\n </ng-container>\r\n <li class=\"select2-input\">\r\n <input #termInput type=\"text\"\r\n [placeholder]=\"getPlaceholder()\"\r\n [formControl]=\"term\"\r\n [class.transparent]=\"!multiple && selectedItems.length > 0 && !searchFocused\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n (keyup)=\"onKeyUp($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (keypress)=\"onKeyPress($event)\"\r\n *ngIf=\"!disabled\"/>\r\n </li>\r\n\r\n <div *ngIf=\"!disabled && (multiple || (!multiple && selectedItems.length === 0))\" class=\"caret\">\r\n <span *ngIf=\"!searchIcon\" class=\"caret-symbol\">&#9660;</span>\r\n <span [class]=\"searchIcon\" *ngIf=\"searchIcon && minimumInputLength===0\"\r\n (click)=\"focusAndShowResults()\"></span>\r\n <span [class]=\"searchIcon\" *ngIf=\"searchIcon && minimumInputLength!==0\"></span>\r\n </div>\r\n\r\n </ul>\r\n\r\n <div class=\"results-container\" *ngIf=\"resultsVisible\">\r\n <span class=\"results-msg\" *ngIf=\"listData && (listData.length + selectedItems.length) < resultsCount\">\r\n {{getCountMessage()}}\r\n </span>\r\n <span class=\"results-msg no-results-msg\" *ngIf=\"searchFocused && listData && listData.length === 0\">\r\n {{messages && messages.noResultsAvailableMsg ? messages.noResultsAvailableMsg : NO_RESULTS_MSG}}\r\n </span>\r\n <iq-select2-results #results [selectedItems]=\"selectedItems\" [items]=\"listData\"\r\n (itemSelectedEvent)=\"onItemSelected($event);\"\r\n [templateRef]=\"templateRef\"\r\n [searchFocused]=\"searchFocused\"></iq-select2-results>\r\n </div>\r\n</div>\r\n", styles: ["ul{list-style-type:none;position:relative}ul li{display:inline-block}ul.simple-selection li{display:block}input{border:none;padding:0}input:focus{outline:none}.simple-selection input.transparent{opacity:0;position:absolute;inset:0 30px 0 0}.form-control-sm ul,.form-control-lg ul{padding:2px 8px}.caret{position:absolute;right:8px;font-size:8px;top:0;bottom:0;line-height:38px}.form-control-sm .caret{line-height:31px}.form-control-lg .caret{line-height:48px;right:12px}.select2-container{position:relative}.results-container{position:absolute;margin-top:-6px;width:100%;z-index:3}div.select2-selection-remove{position:absolute;right:10px;top:0;display:inline-block}.multiple-selection .select2-selected{margin:0 1px 2px;--bs-badge-font-size: 1em;display:inline-flex;align-items:center;gap:.2em}.multiple-selection div.select2-selection-remove{position:relative;right:initial}div.select2-selection-remove:hover{cursor:pointer}.multiple-selection div.select2-selection-remove{display:flex;align-items:center}div.select2-selection-remove .btn-close{width:.3em;height:.3em;padding:.2em}.select2-container .search-focused{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem #007bff40}.results-msg{display:block;position:relative;margin-top:-10px;margin-bottom:10px;font-size:.8em;padding:3px 5px;border-left:1px solid #ced4da;border-right:1px solid #ced4da;border-bottom:1px solid #ced4da;background:#fafafa}.readonly{background-color:#eaecf0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.IqSelect2ResultsComponent, selector: "iq-select2-results", inputs: ["items", "searchFocused", "selectedItems", "templateRef"], outputs: ["itemSelectedEvent"] }] }); }
277
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.4", type: IqSelect2Component, selector: "iq-select2", inputs: { dataSourceProvider: "dataSourceProvider", selectedProvider: "selectedProvider", iqSelect2ItemAdapter: "iqSelect2ItemAdapter", referenceMode: "referenceMode", multiple: "multiple", inputContainerClass: "inputContainerClass", placeholder: "placeholder", disabled: "disabled", maxResults: "maxResults", clientMode: "clientMode", badgeColor: "badgeColor", wrapSelectedText: "wrapSelectedText", debounceDelay: "debounceDelay", debounceLength: "debounceLength", iconCaret: "iconCaret", iconDelete: "iconDelete", messageMoreResults: "messageMoreResults", messageNoResults: "messageNoResults" }, outputs: { onSelect: "onSelect", onRemove: "onRemove" }, providers: [VALUE_ACCESSOR], viewQueries: [{ propertyName: "termInput", first: true, predicate: ["termInput"], descendants: true }, { propertyName: "results", first: true, predicate: ["results"], descendants: true }], ngImport: i0, template: "<div class=\"select2-container\">\r\n <div\r\n class=\"select2-inner-container\" [ngClass]=\"inputContainerClass ? inputContainerClass : ''\"\r\n [class.simple-selection]=\"!multiple\" [class.multiple-selection]=\"multiple\"\r\n [class.search-focused]=\"searchFocused\" [class.readonly]=\"disabled\"\r\n (click)=\"focusAndShowResults()\"\r\n >\r\n <ul class=\"select2-selection-container\">\r\n <ng-container *ngIf=\"!searchFocused || multiple\">\r\n <li *ngFor=\"let item of selectedItems\" class=\"select2-selected\">\r\n <span class=\"select2-selected-item\" [ngStyle]=\"{whitespace: wrapSelectedText}\" [title]=\"item.text\">{{item.text}}</span>\r\n <button *ngIf=\"!disabled\" class=\"select2-icon\" aria-label=\"Close\" (click)=\"removeItem(item)\">\r\n <span class=\"select2-selection-remove\" [innerHTML]=\"iconDelete\"></span>\r\n </button>\r\n </li>\r\n </ng-container>\r\n\r\n <li class=\"select2-input-container\">\r\n <input #termInput *ngIf=\"!disabled\" [formControl]=\"term\" type=\"text\" [placeholder]=\"getPlaceholder()\"\r\n [class.transparent]=\"!multiple && selectedItems.length > 0 && !searchFocused\"\r\n (focus)=\"onFocus()\" (blur)=\"onBlur()\"\r\n (keyup)=\"onKeyUp($event)\" (keydown)=\"onKeyDown($event)\"\r\n />\r\n </li>\r\n </ul>\r\n\r\n <div *ngIf=\"(multiple || (!multiple && selectedItems.length === 0))\" class=\"select2-icon\">\r\n <span class=\"select2-selection-caret\" [innerHTML]=\"iconCaret\"></span>\r\n </div>\r\n </div>\r\n\r\n <iq-select2-results *ngIf=\"!disabled\" #results [resultsVisible]=\"resultsVisible\"\r\n [items]=\"listData\" [selectedItems]=\"selectedItems\" [maxResults]=\"maxResults\"\r\n [messageMoreResults]=\"messageMoreResults\" [messageNoResults]=\"messageNoResults\"\r\n [templateRef]=\"templateRef\" (onItemSelected)=\"onItemSelected($event);\"\r\n >\r\n </iq-select2-results>\r\n</div>\r\n", styles: [".select2-container{position:relative;width:100%;--select2-color-background: hsl(0, 0%, 96%);--select2-color-border: hsl(0, 0%, 90%);--select2-color-disabled: hsl(220, 20%, 90%);--select2-color-focused-border: hsl(220, 100%, 80%);--select2-color-focused-shadow: hsla(220, 80%, 40%);--select2-color-scrollbar-track: hsl(0, 0%, 90%);--select2-color-scrollbar-thumb: hsl(220, 25%, 25%);--select2-color-item-text: hsl(0, 0%, 96%);--select2-color-item-background: hsl(200, 90%, 50%);--select2-color-list-active: hsl(200, 70%, 70%);--select2-color-list-selected: hsl(200, 70%, 50%)}.select2-inner-container{display:grid;grid-template-columns:1fr min-content;gap:.2em}.select2-inner-container.search-focused{color:invert(var(--select2-color-item-text));background-color:var(--select2-color-background);border-color:var(--select2-color-focused-border);outline:0;box-shadow:0 0 0 .1rem var(--select2-color-focused-shadow)}.simple-selection .select2-selection-container{display:grid;grid-auto-columns:100%}.simple-selection .select2-selection-container>*{grid-area:1 / 1}.simple-selection .select2-selected{width:100%;padding:0}.simple-selection input.transparent{opacity:0}.multiple-selection .select2-selected{color:var(--select2-color-item-text);background-color:var(--select2-color-item-background);padding:.1em .4em;border-radius:.25em;max-width:100%}.select2-selection-container{width:100%;display:flex;flex-flow:row wrap;align-items:baseline;justify-content:flex-start;gap:.2em;overflow:hidden;list-style-type:none;padding:0;margin:0}.select2-selected{display:inline-flex;flex-flow:row nowrap;align-items:baseline;justify-content:space-between;gap:.2em;padding:.25em}.select2-input-container{flex-grow:1}.select2-input-container input{background-color:transparent;border:none;outline:none;padding:0;width:100%}.select2-icon{color:inherit;font-size:1em;z-index:5;display:grid}.select2-icon:is(button){background-color:transparent;border:0;outline:0;padding:0}:not(.readonly)>.select2-icon{cursor:pointer}.select2-selected-item{width:100%;overflow:hidden;text-overflow:ellipsis}.readonly{background-color:var(--select2-color-disabled);cursor:not-allowed}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.IqSelect2ResultsComponent, selector: "iq-select2-results", inputs: ["items", "maxResults", "messageMoreResults", "messageNoResults", "resultsVisible", "selectedItems", "templateRef"], outputs: ["onItemSelected"] }] }); }
309
278
  }
310
279
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.4", ngImport: i0, type: IqSelect2Component, decorators: [{
311
280
  type: Component,
312
- args: [{ selector: 'iq-select2', providers: [VALUE_ACCESSOR], template: "<div class=\"select2-container\">\r\n <ul (click)=\"focusAndShowResults()\"\r\n [class]=\"getCss()\"\r\n [class.simple-selection]=\"!multiple\"\r\n [class.multiple-selection]=\"multiple\"\r\n [class.search-focused]=\"searchFocused\"\r\n [class.readonly]=\"disabled\">\r\n\r\n <ng-container *ngIf=\"!searchFocused || multiple\">\r\n <li *ngFor=\"let item of selectedItems\"\r\n [class]=\"'select2-selected ' + getBadgeColor()\"\r\n [class.badge]=\"multiple\">\r\n\r\n <span class=\"selectedItemText\">{{item.text}}</span>\r\n <div *ngIf=\"!disabled\" class=\"select2-selection-remove\" (click)=\"removeItem(item)\">\r\n <i *ngIf=\"deleteIcon\" [class]=\"deleteIcon\"></i>\r\n <button *ngIf=\"!deleteIcon\" (click)=\"removeItem(item)\" type=\"button\" class=\"btn-close\" [class.btn-close-white]=\"multiple\" aria-label=\"Close\"></button>\r\n </div>\r\n\r\n </li>\r\n </ng-container>\r\n <li class=\"select2-input\">\r\n <input #termInput type=\"text\"\r\n [placeholder]=\"getPlaceholder()\"\r\n [formControl]=\"term\"\r\n [class.transparent]=\"!multiple && selectedItems.length > 0 && !searchFocused\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n (keyup)=\"onKeyUp($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (keypress)=\"onKeyPress($event)\"\r\n *ngIf=\"!disabled\"/>\r\n </li>\r\n\r\n <div *ngIf=\"!disabled && (multiple || (!multiple && selectedItems.length === 0))\" class=\"caret\">\r\n <span *ngIf=\"!searchIcon\" class=\"caret-symbol\">&#9660;</span>\r\n <span [class]=\"searchIcon\" *ngIf=\"searchIcon && minimumInputLength===0\"\r\n (click)=\"focusAndShowResults()\"></span>\r\n <span [class]=\"searchIcon\" *ngIf=\"searchIcon && minimumInputLength!==0\"></span>\r\n </div>\r\n\r\n </ul>\r\n\r\n <div class=\"results-container\" *ngIf=\"resultsVisible\">\r\n <span class=\"results-msg\" *ngIf=\"listData && (listData.length + selectedItems.length) < resultsCount\">\r\n {{getCountMessage()}}\r\n </span>\r\n <span class=\"results-msg no-results-msg\" *ngIf=\"searchFocused && listData && listData.length === 0\">\r\n {{messages && messages.noResultsAvailableMsg ? messages.noResultsAvailableMsg : NO_RESULTS_MSG}}\r\n </span>\r\n <iq-select2-results #results [selectedItems]=\"selectedItems\" [items]=\"listData\"\r\n (itemSelectedEvent)=\"onItemSelected($event);\"\r\n [templateRef]=\"templateRef\"\r\n [searchFocused]=\"searchFocused\"></iq-select2-results>\r\n </div>\r\n</div>\r\n", styles: ["ul{list-style-type:none;position:relative}ul li{display:inline-block}ul.simple-selection li{display:block}input{border:none;padding:0}input:focus{outline:none}.simple-selection input.transparent{opacity:0;position:absolute;inset:0 30px 0 0}.form-control-sm ul,.form-control-lg ul{padding:2px 8px}.caret{position:absolute;right:8px;font-size:8px;top:0;bottom:0;line-height:38px}.form-control-sm .caret{line-height:31px}.form-control-lg .caret{line-height:48px;right:12px}.select2-container{position:relative}.results-container{position:absolute;margin-top:-6px;width:100%;z-index:3}div.select2-selection-remove{position:absolute;right:10px;top:0;display:inline-block}.multiple-selection .select2-selected{margin:0 1px 2px;--bs-badge-font-size: 1em;display:inline-flex;align-items:center;gap:.2em}.multiple-selection div.select2-selection-remove{position:relative;right:initial}div.select2-selection-remove:hover{cursor:pointer}.multiple-selection div.select2-selection-remove{display:flex;align-items:center}div.select2-selection-remove .btn-close{width:.3em;height:.3em;padding:.2em}.select2-container .search-focused{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem #007bff40}.results-msg{display:block;position:relative;margin-top:-10px;margin-bottom:10px;font-size:.8em;padding:3px 5px;border-left:1px solid #ced4da;border-right:1px solid #ced4da;border-bottom:1px solid #ced4da;background:#fafafa}.readonly{background-color:#eaecf0}\n"] }]
281
+ args: [{ selector: 'iq-select2', providers: [VALUE_ACCESSOR], template: "<div class=\"select2-container\">\r\n <div\r\n class=\"select2-inner-container\" [ngClass]=\"inputContainerClass ? inputContainerClass : ''\"\r\n [class.simple-selection]=\"!multiple\" [class.multiple-selection]=\"multiple\"\r\n [class.search-focused]=\"searchFocused\" [class.readonly]=\"disabled\"\r\n (click)=\"focusAndShowResults()\"\r\n >\r\n <ul class=\"select2-selection-container\">\r\n <ng-container *ngIf=\"!searchFocused || multiple\">\r\n <li *ngFor=\"let item of selectedItems\" class=\"select2-selected\">\r\n <span class=\"select2-selected-item\" [ngStyle]=\"{whitespace: wrapSelectedText}\" [title]=\"item.text\">{{item.text}}</span>\r\n <button *ngIf=\"!disabled\" class=\"select2-icon\" aria-label=\"Close\" (click)=\"removeItem(item)\">\r\n <span class=\"select2-selection-remove\" [innerHTML]=\"iconDelete\"></span>\r\n </button>\r\n </li>\r\n </ng-container>\r\n\r\n <li class=\"select2-input-container\">\r\n <input #termInput *ngIf=\"!disabled\" [formControl]=\"term\" type=\"text\" [placeholder]=\"getPlaceholder()\"\r\n [class.transparent]=\"!multiple && selectedItems.length > 0 && !searchFocused\"\r\n (focus)=\"onFocus()\" (blur)=\"onBlur()\"\r\n (keyup)=\"onKeyUp($event)\" (keydown)=\"onKeyDown($event)\"\r\n />\r\n </li>\r\n </ul>\r\n\r\n <div *ngIf=\"(multiple || (!multiple && selectedItems.length === 0))\" class=\"select2-icon\">\r\n <span class=\"select2-selection-caret\" [innerHTML]=\"iconCaret\"></span>\r\n </div>\r\n </div>\r\n\r\n <iq-select2-results *ngIf=\"!disabled\" #results [resultsVisible]=\"resultsVisible\"\r\n [items]=\"listData\" [selectedItems]=\"selectedItems\" [maxResults]=\"maxResults\"\r\n [messageMoreResults]=\"messageMoreResults\" [messageNoResults]=\"messageNoResults\"\r\n [templateRef]=\"templateRef\" (onItemSelected)=\"onItemSelected($event);\"\r\n >\r\n </iq-select2-results>\r\n</div>\r\n", styles: [".select2-container{position:relative;width:100%;--select2-color-background: hsl(0, 0%, 96%);--select2-color-border: hsl(0, 0%, 90%);--select2-color-disabled: hsl(220, 20%, 90%);--select2-color-focused-border: hsl(220, 100%, 80%);--select2-color-focused-shadow: hsla(220, 80%, 40%);--select2-color-scrollbar-track: hsl(0, 0%, 90%);--select2-color-scrollbar-thumb: hsl(220, 25%, 25%);--select2-color-item-text: hsl(0, 0%, 96%);--select2-color-item-background: hsl(200, 90%, 50%);--select2-color-list-active: hsl(200, 70%, 70%);--select2-color-list-selected: hsl(200, 70%, 50%)}.select2-inner-container{display:grid;grid-template-columns:1fr min-content;gap:.2em}.select2-inner-container.search-focused{color:invert(var(--select2-color-item-text));background-color:var(--select2-color-background);border-color:var(--select2-color-focused-border);outline:0;box-shadow:0 0 0 .1rem var(--select2-color-focused-shadow)}.simple-selection .select2-selection-container{display:grid;grid-auto-columns:100%}.simple-selection .select2-selection-container>*{grid-area:1 / 1}.simple-selection .select2-selected{width:100%;padding:0}.simple-selection input.transparent{opacity:0}.multiple-selection .select2-selected{color:var(--select2-color-item-text);background-color:var(--select2-color-item-background);padding:.1em .4em;border-radius:.25em;max-width:100%}.select2-selection-container{width:100%;display:flex;flex-flow:row wrap;align-items:baseline;justify-content:flex-start;gap:.2em;overflow:hidden;list-style-type:none;padding:0;margin:0}.select2-selected{display:inline-flex;flex-flow:row nowrap;align-items:baseline;justify-content:space-between;gap:.2em;padding:.25em}.select2-input-container{flex-grow:1}.select2-input-container input{background-color:transparent;border:none;outline:none;padding:0;width:100%}.select2-icon{color:inherit;font-size:1em;z-index:5;display:grid}.select2-icon:is(button){background-color:transparent;border:0;outline:0;padding:0}:not(.readonly)>.select2-icon{cursor:pointer}.select2-selected-item{width:100%;overflow:hidden;text-overflow:ellipsis}.readonly{background-color:var(--select2-color-disabled);cursor:not-allowed}\n"] }]
313
282
  }], ctorParameters: function () { return []; }, propDecorators: { dataSourceProvider: [{
314
283
  type: Input
315
284
  }], selectedProvider: [{
@@ -320,27 +289,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.4", ngImpor
320
289
  type: Input
321
290
  }], multiple: [{
322
291
  type: Input
323
- }], searchDelay: [{
324
- type: Input
325
- }], css: [{
292
+ }], inputContainerClass: [{
326
293
  type: Input
327
294
  }], placeholder: [{
328
295
  type: Input
329
- }], minimumInputLength: [{
330
- type: Input
331
296
  }], disabled: [{
332
297
  type: Input
333
- }], searchIcon: [{
298
+ }], maxResults: [{
334
299
  type: Input
335
- }], deleteIcon: [{
300
+ }], clientMode: [{
336
301
  type: Input
337
- }], messages: [{
302
+ }], badgeColor: [{
338
303
  type: Input
339
- }], resultsCount: [{
304
+ }], wrapSelectedText: [{
340
305
  type: Input
341
- }], clientMode: [{
306
+ }], debounceDelay: [{
342
307
  type: Input
343
- }], badgeColor: [{
308
+ }], debounceLength: [{
309
+ type: Input
310
+ }], iconCaret: [{
311
+ type: Input
312
+ }], iconDelete: [{
313
+ type: Input
314
+ }], messageMoreResults: [{
315
+ type: Input
316
+ }], messageNoResults: [{
344
317
  type: Input
345
318
  }], onSelect: [{
346
319
  type: Output
@@ -353,4 +326,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.4", ngImpor
353
326
  type: ViewChild,
354
327
  args: ['results']
355
328
  }] } });
356
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXEtc2VsZWN0Mi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzItaXEtc2VsZWN0Mi9zcmMvbGliL2lxLXNlbGVjdDIvaXEtc2VsZWN0Mi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzItaXEtc2VsZWN0Mi9zcmMvbGliL2lxLXNlbGVjdDIvaXEtc2VsZWN0Mi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXhILE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLG9EQUFvRCxDQUFDO0FBQzdGLE9BQU8sRUFBdUIsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBYSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFDLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBRXpHLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FBQy9CLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO0FBQzdCLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUMxQixNQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLE1BQU0sY0FBYyxHQUFHO0lBQ25CLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFB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Q0FBQyxFQUFFLENBQUM7SUFDeEQsQ0FBQzs4R0F2VlEsa0JBQWtCO2tHQUFsQixrQkFBa0IsOGpCQUZoQixDQUFDLGNBQWMsQ0FBQyx1TkN6Qi9CLG03RkF3REE7OzJGRDdCYSxrQkFBa0I7a0JBTjlCLFNBQVM7K0JBQ0ksWUFBWSxhQUdYLENBQUMsY0FBYyxDQUFDOzBFQU9sQixrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFJRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ3lCLFNBQVM7c0JBQXhDLFNBQVM7dUJBQUMsV0FBVztnQkFDQSxPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbnB1dCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtJcVNlbGVjdDJJdGVtfSBmcm9tICcuL2lxLXNlbGVjdDItaXRlbSc7XHJcbmltcG9ydCB7SXFTZWxlY3QyUmVzdWx0c0NvbXBvbmVudH0gZnJvbSAnLi4vaXEtc2VsZWN0Mi1yZXN1bHRzL2lxLXNlbGVjdDItcmVzdWx0cy5jb21wb25lbnQnO1xyXG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBVbnR5cGVkRm9ybUNvbnRyb2wsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7TWVzc2FnZXN9IGZyb20gJy4vbWVzc2FnZXMnO1xyXG5pbXBvcnQge09ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAsIHN3aXRjaE1hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5jb25zdCBLRVlfQ09ERV9ET1dOX0FSUk9XID0gNDA7XHJcbmNvbnN0IEtFWV9DT0RFX1VQX0FSUk9XID0gMzg7XHJcbmNvbnN0IEtFWV9DT0RFX0VOVEVSID0gMTM7XHJcbmNvbnN0IEtFWV9DT0RFX1RBQiA9IDk7XHJcbmNvbnN0IEtFWV9DT0RFX0RFTEVURSA9IDg7XHJcbmNvbnN0IFZBTFVFX0FDQ0VTU09SID0ge1xyXG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJcVNlbGVjdDJDb21wb25lbnQpLFxyXG4gICAgbXVsdGk6IHRydWVcclxufTtcclxuY29uc3Qgbm9vcCA9ICgpID0+IHtcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdpcS1zZWxlY3QyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9pcS1zZWxlY3QyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2lxLXNlbGVjdDIuY29tcG9uZW50LmNzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbVkFMVUVfQUNDRVNTT1JdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJcVNlbGVjdDJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gICAgTU9SRV9SRVNVTFRTX01TRyA9ICdTaG93aW5nICcgKyBNZXNzYWdlcy5QQVJUSUFMX0NPVU5UX1ZBUiArICcgb2YgJyArIE1lc3NhZ2VzLlRPVEFMX0NPVU5UX1ZBUiArICcgcmVzdWx0cy4gUmVmaW5lIHlvdXIgc2VhcmNoIHRvIHNob3cgbW9yZSByZXN1bHRzLic7XHJcbiAgICBOT19SRVNVTFRTX01TRyA9ICdObyByZXN1bHRzIGF2YWlsYWJsZSc7XHJcblxyXG4gICAgQElucHV0KCkgZGF0YVNvdXJjZVByb3ZpZGVyOiAodGVybTogc3RyaW5nLCBzZWxlY3RlZD86IGFueVtdKSA9PiBPYnNlcnZhYmxlPGFueVtdPjtcclxuICAgIEBJbnB1dCgpIHNlbGVjdGVkUHJvdmlkZXI6IChpZHM6IHN0cmluZ1tdKSA9PiBPYnNlcnZhYmxlPGFueVtdPjtcclxuICAgIEBJbnB1dCgpIGlxU2VsZWN0Mkl0ZW1BZGFwdGVyOiAoZW50aXR5OiBhbnkpID0+IElxU2VsZWN0Mkl0ZW07XHJcbiAgICBASW5wdXQoKSByZWZlcmVuY2VNb2RlOiAnaWQnIHwgJ2VudGl0eScgPSAnaWQnO1xyXG4gICAgQElucHV0KCkgbXVsdGlwbGUgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHNlYXJjaERlbGF5ID0gMjUwO1xyXG4gICAgQElucHV0KCkgY3NzOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICcnO1xyXG4gICAgQElucHV0KCkgbWluaW11bUlucHV0TGVuZ3RoID0gMjtcclxuICAgIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBzZWFyY2hJY29uO1xyXG4gICAgQElucHV0KCkgZGVsZXRlSWNvbjtcclxuICAgIEBJbnB1dCgpIG1lc3NhZ2VzOiBNZXNzYWdlcyA9IHtcclxuICAgICAgICBtb3JlUmVzdWx0c0F2YWlsYWJsZU1zZzogdGhpcy5NT1JFX1JFU1VMVFNfTVNHLFxyXG4gICAgICAgIG5vUmVzdWx0c0F2YWlsYWJsZU1zZzogdGhpcy5OT19SRVNVTFRTX01TR1xyXG4gICAgfTtcclxuICAgIEBJbnB1dCgpIHJlc3VsdHNDb3VudDtcclxuICAgIEBJbnB1dCgpIGNsaWVudE1vZGUgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIGJhZGdlQ29sb3IgPSAnaW5mbyc7XHJcbiAgICBAT3V0cHV0KCkgb25TZWxlY3Q6IEV2ZW50RW1pdHRlcjxJcVNlbGVjdDJJdGVtPiA9IG5ldyBFdmVudEVtaXR0ZXI8SXFTZWxlY3QySXRlbT4oKTtcclxuICAgIEBPdXRwdXQoKSBvblJlbW92ZTogRXZlbnRFbWl0dGVyPElxU2VsZWN0Mkl0ZW0+ID0gbmV3IEV2ZW50RW1pdHRlcjxJcVNlbGVjdDJJdGVtPigpO1xyXG4gICAgQFZpZXdDaGlsZCgndGVybUlucHV0JykgcHJpdmF0ZSB0ZXJtSW5wdXQ7XHJcbiAgICBAVmlld0NoaWxkKCdyZXN1bHRzJykgcmVzdWx0czogSXFTZWxlY3QyUmVzdWx0c0NvbXBvbmVudDtcclxuICAgIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgdGVybSA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcclxuICAgIHJlc3VsdHNWaXNpYmxlID0gZmFsc2U7XHJcbiAgICBsaXN0RGF0YTogSXFTZWxlY3QySXRlbVtdO1xyXG4gICAgZnVsbERhdGFMaXN0OiBJcVNlbGVjdDJJdGVtW107XHJcbiAgICBzZWxlY3RlZEl0ZW1zOiBJcVNlbGVjdDJJdGVtW10gPSBbXTtcclxuICAgIHNlYXJjaEZvY3VzZWQgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgcGxhY2Vob2xkZXJTZWxlY3RlZCA9ICcnO1xyXG4gICAgb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xyXG4gICAgb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9DaGFuZ2VzQW5kTG9hZERhdGFGcm9tT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHdyaXRlVmFsdWUoc2VsZWN0ZWRWYWx1ZXM6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChzZWxlY3RlZFZhbHVlcykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZWZlcmVuY2VNb2RlID09PSAnaWQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVsYXRlSXRlbXNGcm9tSWRzKHNlbGVjdGVkVmFsdWVzKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9wdWxhdGVJdGVtc0Zyb21FbnRpdGllcyhzZWxlY3RlZFZhbHVlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyU2VsZWN0ZWQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb0NoYW5nZXNBbmRMb2FkRGF0YUZyb21PYnNlcnZhYmxlKCkge1xyXG4gICAgICAgIGNvbnN0IG9ic2VydmFibGUgPSB0aGlzLnRlcm0udmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSh0aGlzLnNlYXJjaERlbGF5KSxcclxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb1Jlc3VsdHMob2JzZXJ2YWJsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb1Jlc3VsdHMob2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxzdHJpbmc+KTogdm9pZCB7XHJcbiAgICAgICAgb2JzZXJ2YWJsZS5waXBlKFxyXG4gICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5yZXN1bHRzVmlzaWJsZSA9IGZhbHNlKSxcclxuICAgICAgICAgICAgZmlsdGVyKCh0ZXJtKSA9PiB0ZXJtLmxlbmd0aCA+PSB0aGlzLm1pbmltdW1JbnB1dExlbmd0aCksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcCh0ZXJtID0+IHRoaXMubG9hZERhdGFGcm9tT2JzZXJ2YWJsZSh0ZXJtKSksXHJcbiAgICAgICAgICAgIG1hcChpdGVtcyA9PiBpdGVtcy5maWx0ZXIoaXRlbSA9PiAhKHRoaXMubXVsdGlwbGUgJiYgdGhpcy5hbHJlYWR5U2VsZWN0ZWQoaXRlbSkpKSksXHJcbiAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnJlc3VsdHNWaXNpYmxlID0gdGhpcy5zZWFyY2hGb2N1c2VkKVxyXG4gICAgICAgICkuc3Vic2NyaWJlKChpdGVtcykgPT4gdGhpcy5saXN0RGF0YSA9IGl0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWREYXRhRnJvbU9ic2VydmFibGUodGVybTogc3RyaW5nKTogT2JzZXJ2YWJsZTxJcVNlbGVjdDJJdGVtW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnRNb2RlID8gdGhpcy5mZXRjaEFuZGZpbHRlckxvY2FsRGF0YSh0ZXJtKSA6IHRoaXMuZmV0Y2hEYXRhKHRlcm0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmV0Y2hBbmRmaWx0ZXJMb2NhbERhdGEodGVybTogc3RyaW5nKTogT2JzZXJ2YWJsZTxJcVNlbGVjdDJJdGVtW10+IHtcclxuICAgICAgICBpZiAoIXRoaXMuZnVsbERhdGFMaXN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZldGNoRGF0YSgnJykucGlwZShcclxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKChpdGVtcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZnVsbERhdGFMaXN0ID0gaXRlbXM7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyTG9jYWxEYXRhKHRlcm0pO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJMb2NhbERhdGEodGVybSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmlsdGVyTG9jYWxEYXRhKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8SXFTZWxlY3QySXRlbVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIG9mKHRoaXMuZnVsbERhdGFMaXN0LmZpbHRlcigoaXRlbSkgPT4gdGhpcy5jb250YWluc1RleHQoaXRlbSwgdGVybSkpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbnRhaW5zVGV4dChpdGVtLCB0ZXJtOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gaXRlbS50ZXh0LnRvVXBwZXJDYXNlKCkuaW5kZXhPZih0ZXJtLnRvVXBwZXJDYXNlKCkpICE9PSAtMTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZldGNoRGF0YSh0ZXJtOiBzdHJpbmcpOiBPYnNlcnZhYmxlPElxU2VsZWN0Mkl0ZW1bXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICAgICAgICAgIC5kYXRhU291cmNlUHJvdmlkZXIodGVybSwgdGhpcy5idWlsZFZhbHVlKCkpXHJcbiAgICAgICAgICAgIC5waXBlKG1hcCgoaXRlbXM6IGFueVtdKSA9PiB0aGlzLmFkYXB0SXRlbXMoaXRlbXMpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGFwdEl0ZW1zKGl0ZW1zOiBhbnlbXSk6IElxU2VsZWN0Mkl0ZW1bXSB7XHJcbiAgICAgICAgY29uc3QgY29udmVydGVkSXRlbXMgPSBbXTtcclxuICAgICAgICBpdGVtcy5tYXAoKGl0ZW0pID0+IHRoaXMuaXFTZWxlY3QySXRlbUFkYXB0ZXIoaXRlbSkpXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKChpcVNlbGVjdDJJdGVtKSA9PiBjb252ZXJ0ZWRJdGVtcy5wdXNoKGlxU2VsZWN0Mkl0ZW0pKTtcclxuICAgICAgICByZXR1cm4gY29udmVydGVkSXRlbXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwb3B1bGF0ZUl0ZW1zRnJvbUVudGl0aWVzKHNlbGVjdGVkVmFsdWVzOiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZU11bHRpcGxlV2l0aEVudGl0aWVzKHNlbGVjdGVkVmFsdWVzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBpcVNlbGVjdDJJdGVtID0gdGhpcy5pcVNlbGVjdDJJdGVtQWRhcHRlcihzZWxlY3RlZFZhbHVlcyk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtpcVNlbGVjdDJJdGVtXTtcclxuICAgICAgICAgICAgdGhpcy5wbGFjZWhvbGRlclNlbGVjdGVkID0gaXFTZWxlY3QySXRlbS50ZXh0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZU11bHRpcGxlV2l0aEVudGl0aWVzKHNlbGVjdGVkVmFsdWVzOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcclxuICAgICAgICBzZWxlY3RlZFZhbHVlcy5mb3JFYWNoKChlbnRpdHkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaXFTZWxlY3QySXRlbUFkYXB0ZXIoZW50aXR5KTtcclxuICAgICAgICAgICAgY29uc3QgaWRzID0gdGhpcy5nZXRTZWxlY3RlZElkcygpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGlkcy5pbmRleE9mKGl0ZW0uaWQpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHBvcHVsYXRlSXRlbXNGcm9tSWRzKHNlbGVjdGVkVmFsdWVzOiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZU11bHRpcGxlV2l0aElkcyhzZWxlY3RlZFZhbHVlcyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVTaW5nbGVXaXRoSWQoc2VsZWN0ZWRWYWx1ZXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZU11bHRpcGxlV2l0aElkcyhzZWxlY3RlZFZhbHVlczogYW55KSB7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkVmFsdWVzICE9PSB1bmRlZmluZWQgJiYgdGhpcy5zZWxlY3RlZFByb3ZpZGVyICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgdW5pcXVlSWRzID0gW107XHJcbiAgICAgICAgICAgIHNlbGVjdGVkVmFsdWVzLmZvckVhY2goKGlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodW5pcXVlSWRzLmluZGV4T2YoaWQpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVuaXF1ZUlkcy5wdXNoKGlkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvdmlkZXIodW5pcXVlSWRzKS5zdWJzY3JpYmUoKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gaXRlbXMubWFwKHRoaXMuaXFTZWxlY3QySXRlbUFkYXB0ZXIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVTaW5nbGVXaXRoSWQoaWQ6IGFueSkge1xyXG4gICAgICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuc2VsZWN0ZWRQcm92aWRlciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm92aWRlcihbaWRdKS5zdWJzY3JpYmUoKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlxU2VsZWN0Mkl0ZW0gPSB0aGlzLmlxU2VsZWN0Mkl0ZW1BZGFwdGVyKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtpcVNlbGVjdDJJdGVtXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyU2VsZWN0ZWQgPSBpcVNlbGVjdDJJdGVtLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWxyZWFkeVNlbGVjdGVkKGl0ZW06IElxU2VsZWN0Mkl0ZW0pOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmZvckVhY2goc2VsZWN0ZWRJdGVtID0+IHtcclxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkSXRlbS5pZCA9PT0gaXRlbS5pZCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgb25JdGVtU2VsZWN0ZWQoaXRlbTogSXFTZWxlY3QySXRlbSkge1xyXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubGlzdERhdGEuaW5kZXhPZihpdGVtLCAwKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdERhdGEuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh0aGlzLmJ1aWxkVmFsdWUoKSk7XHJcbiAgICAgICAgdGhpcy50ZXJtLnBhdGNoVmFsdWUoJycsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvY3VzKCksIDEpO1xyXG4gICAgICAgIHRoaXMucmVzdWx0c1Zpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm9uU2VsZWN0LmVtaXQoaXRlbSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXJTZWxlY3RlZCA9IGl0ZW0udGV4dDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3RlZElkcygpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlkczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKGl0ZW0gPT4gaWRzLnB1c2goaXRlbS5pZCkpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGlkcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMCA/IG51bGwgOiB0aGlzLnNlbGVjdGVkSXRlbXNbMF0uaWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RW50aXRpZXMoKTogYW55W10ge1xyXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVudGl0aWVzID0gW107XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIGVudGl0aWVzLnB1c2goaXRlbS5lbnRpdHkpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBlbnRpdGllcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMCA/IG51bGwgOiB0aGlzLnNlbGVjdGVkSXRlbXNbMF0uZW50aXR5O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVJdGVtKGl0ZW06IElxU2VsZWN0Mkl0ZW0pIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5pbmRleE9mKGl0ZW0sIDApO1xyXG5cclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh0aGlzLmJ1aWxkVmFsdWUoKSk7XHJcbiAgICAgICAgdGhpcy5vblJlbW92ZS5lbWl0KGl0ZW0pO1xyXG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyU2VsZWN0ZWQgPSAnJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBidWlsZFZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiAnaWQnID09PSB0aGlzLnJlZmVyZW5jZU1vZGUgPyB0aGlzLmdldFNlbGVjdGVkSWRzKCkgOiB0aGlzLmdldEVudGl0aWVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Gb2N1cygpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaEZvY3VzZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQmx1cigpIHtcclxuICAgICAgICB0aGlzLnRlcm0ucGF0Y2hWYWx1ZSgnJywge2VtaXRFdmVudDogZmFsc2V9KTtcclxuICAgICAgICB0aGlzLnNlYXJjaEZvY3VzZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlc3VsdHNWaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvY3VzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnRlcm1JbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0c1Zpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWFyY2hGb2N1c2VkID0gIXRoaXMuZGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZm9jdXNBbmRTaG93UmVzdWx0cygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy50ZXJtSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZVRvUmVzdWx0cyhvZignJykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlYXJjaEZvY3VzZWQgPSAhdGhpcy5kaXNhYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICBvbktleVVwKGV2KSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVzdWx0cykge1xyXG4gICAgICAgICAgICBpZiAoZXYua2V5Q29kZSA9PT0gS0VZX0NPREVfRE9XTl9BUlJPVykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzLmFjdGl2ZU5leHQoKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChldi5rZXlDb2RlID09PSBLRVlfQ09ERV9VUF9BUlJPVykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzLmFjdGl2ZVByZXZpb3VzKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXYua2V5Q29kZSA9PT0gS0VZX0NPREVfRU5URVIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cy5zZWxlY3RDdXJyZW50SXRlbSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubWluaW11bUlucHV0TGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXYua2V5Q29kZSA9PT0gS0VZX0NPREVfRU5URVIgfHwgZXYua2V5Q29kZSA9PT0gS0VZX0NPREVfRE9XTl9BUlJPVykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNBbmRTaG93UmVzdWx0cygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uS2V5RG93bihldikge1xyXG4gICAgICAgIGlmICh0aGlzLnJlc3VsdHMpIHtcclxuICAgICAgICAgICAgaWYgKGV2LmtleUNvZGUgPT09IEtFWV9DT0RFX1RBQikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzLnNlbGVjdEN1cnJlbnRJdGVtKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChldi5rZXlDb2RlID09PSBLRVlfQ09ERV9ERUxFVEUpIHtcclxuICAgICAgICAgICAgY29uc3QgdGV4dEVudGVyZWQgPSAhdGhpcy50ZXJtLnZhbHVlIHx8IHRoaXMudGVybS52YWx1ZS5sZW5ndGggPT09IDA7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0RW50ZXJlZCAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKHRoaXMuc2VsZWN0ZWRJdGVtc1t0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoIC0gMV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uS2V5UHJlc3MoZXYpIHtcclxuICAgICAgICBpZiAoZXYua2V5Q29kZSA9PT0gS0VZX0NPREVfRU5URVIpIHtcclxuICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3NzKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICdzZWxlY3QyLXNlbGVjdGlvbi1jb250YWluZXIgJyArICh0aGlzLmNzcyA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzLmNzcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDAgPyB0aGlzLnBsYWNlaG9sZGVyU2VsZWN0ZWQgOiB0aGlzLnBsYWNlaG9sZGVyO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvdW50TWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBtc2cgPSB0aGlzLm1lc3NhZ2VzICYmIHRoaXMubWVzc2FnZXMubW9yZVJlc3VsdHNBdmFpbGFibGVNc2cgPyB0aGlzLm1lc3NhZ2VzLm1vcmVSZXN1bHRzQXZhaWxhYmxlTXNnIDogdGhpcy5NT1JFX1JFU1VMVFNfTVNHO1xyXG4gICAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKE1lc3NhZ2VzLlBBUlRJQUxfQ09VTlRfVkFSLCBTdHJpbmcodGhpcy5saXN0RGF0YS5sZW5ndGgpKTtcclxuICAgICAgICBtc2cgPSBtc2cucmVwbGFjZShNZXNzYWdlcy5UT1RBTF9DT1VOVF9WQVIsIFN0cmluZyh0aGlzLnJlc3VsdHNDb3VudCAtIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGgpKTtcclxuICAgICAgICByZXR1cm4gbXNnO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJhZGdlQ29sb3IoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSA/ICdiZy0nICsgdGhpcy5iYWRnZUNvbG9yIDogJyc7XHJcbiAgICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJzZWxlY3QyLWNvbnRhaW5lclwiPlxyXG4gICAgPHVsIChjbGljayk9XCJmb2N1c0FuZFNob3dSZXN1bHRzKClcIlxyXG4gICAgICAgIFtjbGFzc109XCJnZXRDc3MoKVwiXHJcbiAgICAgICAgW2NsYXNzLnNpbXBsZS1zZWxlY3Rpb25dPVwiIW11bHRpcGxlXCJcclxuICAgICAgICBbY2xhc3MubXVsdGlwbGUtc2VsZWN0aW9uXT1cIm11bHRpcGxlXCJcclxuICAgICAgICBbY2xhc3Muc2VhcmNoLWZvY3VzZWRdPVwic2VhcmNoRm9jdXNlZFwiXHJcbiAgICAgICAgW2NsYXNzLnJlYWRvbmx5XT1cImRpc2FibGVkXCI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VhcmNoRm9jdXNlZCB8fCBtdWx0aXBsZVwiPlxyXG4gICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc2VsZWN0ZWRJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwiJ3NlbGVjdDItc2VsZWN0ZWQgJyArIGdldEJhZGdlQ29sb3IoKVwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYmFkZ2VdPVwibXVsdGlwbGVcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlbGVjdGVkSXRlbVRleHRcIj57e2l0ZW0udGV4dH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFkaXNhYmxlZFwiIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3Rpb24tcmVtb3ZlXCIgKGNsaWNrKT1cInJlbW92ZUl0ZW0oaXRlbSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImRlbGV0ZUljb25cIiBbY2xhc3NdPVwiZGVsZXRlSWNvblwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWRlbGV0ZUljb25cIiAoY2xpY2spPVwicmVtb3ZlSXRlbShpdGVtKVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIFtjbGFzcy5idG4tY2xvc2Utd2hpdGVdPVwibXVsdGlwbGVcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bGkgY2xhc3M9XCJzZWxlY3QyLWlucHV0XCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCAjdGVybUlucHV0IHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJnZXRQbGFjZWhvbGRlcigpXCJcclxuICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJ0ZXJtXCJcclxuICAgICAgICAgICAgICAgICAgIFtjbGFzcy50cmFuc3BhcmVudF09XCIhbXVsdGlwbGUgJiYgc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwICYmICFzZWFyY2hGb2N1c2VkXCJcclxuICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKClcIlxyXG4gICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgKGtleXVwKT1cIm9uS2V5VXAoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib25LZXlQcmVzcygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWRpc2FibGVkXCIvPlxyXG4gICAgICAgIDwvbGk+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhZGlzYWJsZWQgJiYgKG11bHRpcGxlIHx8ICghbXVsdGlwbGUgJiYgc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDApKVwiIGNsYXNzPVwiY2FyZXRcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhc2VhcmNoSWNvblwiIGNsYXNzPVwiY2FyZXQtc3ltYm9sXCI+JiM5NjYwOzwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cInNlYXJjaEljb25cIiAqbmdJZj1cInNlYXJjaEljb24gJiYgbWluaW11bUlucHV0TGVuZ3RoPT09MFwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb2N1c0FuZFNob3dSZXN1bHRzKClcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJzZWFyY2hJY29uXCIgKm5nSWY9XCJzZWFyY2hJY29uICYmIG1pbmltdW1JbnB1dExlbmd0aCE9PTBcIj48L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC91bD5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicmVzdWx0cy1jb250YWluZXJcIiAqbmdJZj1cInJlc3VsdHNWaXNpYmxlXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXN1bHRzLW1zZ1wiICpuZ0lmPVwibGlzdERhdGEgJiYgKGxpc3REYXRhLmxlbmd0aCArIHNlbGVjdGVkSXRlbXMubGVuZ3RoKSA8IHJlc3VsdHNDb3VudFwiPlxyXG4gICAgICAgICAgICB7e2dldENvdW50TWVzc2FnZSgpfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXN1bHRzLW1zZyBuby1yZXN1bHRzLW1zZ1wiICpuZ0lmPVwic2VhcmNoRm9jdXNlZCAmJiBsaXN0RGF0YSAmJiBsaXN0RGF0YS5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAge3ttZXNzYWdlcyAmJiBtZXNzYWdlcy5ub1Jlc3VsdHNBdmFpbGFibGVNc2cgPyBtZXNzYWdlcy5ub1Jlc3VsdHNBdmFpbGFibGVNc2cgOiBOT19SRVNVTFRTX01TR319XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxpcS1zZWxlY3QyLXJlc3VsdHMgI3Jlc3VsdHMgW3NlbGVjdGVkSXRlbXNdPVwic2VsZWN0ZWRJdGVtc1wiIFtpdGVtc109XCJsaXN0RGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbVNlbGVjdGVkRXZlbnQpPVwib25JdGVtU2VsZWN0ZWQoJGV2ZW50KTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RlbXBsYXRlUmVmXT1cInRlbXBsYXRlUmVmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hGb2N1c2VkXT1cInNlYXJjaEZvY3VzZWRcIj48L2lxLXNlbGVjdDItcmVzdWx0cz5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
329
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXEtc2VsZWN0Mi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzItaXEtc2VsZWN0Mi9zcmMvbGliL2lxLXNlbGVjdDIvaXEtc2VsZWN0Mi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzItaXEtc2VsZWN0Mi9zcmMvbGliL2lxLXNlbGVjdDIvaXEtc2VsZWN0Mi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFlLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVwSSxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxvREFBb0QsQ0FBQztBQUM3RixPQUFPLEVBQXVCLGlCQUFpQixFQUFFLGtCQUFrQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0YsT0FBTyxFQUFhLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUMsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RyxPQUFPLFFBQVEsTUFBTSxZQUFZLENBQUM7Ozs7O0FBRWxDLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FBQy9CLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO0FBQzdCLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUMxQixNQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLE1BQU0sY0FBYyxHQUFHO0lBQ3JCLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFB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YUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBRXlCLFNBQVM7c0JBQXhDLFNBQVM7dUJBQUMsV0FBVztnQkFDQSxPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbnB1dCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtJcVNlbGVjdDJJdGVtfSBmcm9tICcuL2lxLXNlbGVjdDItaXRlbSc7XHJcbmltcG9ydCB7SXFTZWxlY3QyUmVzdWx0c0NvbXBvbmVudH0gZnJvbSAnLi4vaXEtc2VsZWN0Mi1yZXN1bHRzL2lxLXNlbGVjdDItcmVzdWx0cy5jb21wb25lbnQnO1xyXG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiwgVW50eXBlZEZvcm1Db250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge2RlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBtZXJnZU1hcCwgc3dpdGNoTWFwLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IE1lc3NhZ2VzIGZyb20gXCIuL21lc3NhZ2VzXCI7XHJcblxyXG5jb25zdCBLRVlfQ09ERV9ET1dOX0FSUk9XID0gNDA7XHJcbmNvbnN0IEtFWV9DT0RFX1VQX0FSUk9XID0gMzg7XHJcbmNvbnN0IEtFWV9DT0RFX0VOVEVSID0gMTM7XHJcbmNvbnN0IEtFWV9DT0RFX1RBQiA9IDk7XHJcbmNvbnN0IEtFWV9DT0RFX0RFTEVURSA9IDg7XHJcbmNvbnN0IFZBTFVFX0FDQ0VTU09SID0ge1xyXG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElxU2VsZWN0MkNvbXBvbmVudCksXHJcbiAgbXVsdGk6IHRydWVcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaXEtc2VsZWN0MicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2lxLXNlbGVjdDIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2lxLXNlbGVjdDIuY29tcG9uZW50LmNzcyddLFxyXG4gIHByb3ZpZGVyczogW1ZBTFVFX0FDQ0VTU09SXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSXFTZWxlY3QyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG5cclxuICBASW5wdXQoKSBkYXRhU291cmNlUHJvdmlkZXI6ICh0ZXJtOiBzdHJpbmcsIHNlbGVjdGVkPzogYW55W10pID0+IE9ic2VydmFibGU8YW55W10+O1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkUHJvdmlkZXI6IChpZHM6IHN0cmluZ1tdKSA9PiBPYnNlcnZhYmxlPGFueVtdPjtcclxuICBASW5wdXQoKSBpcVNlbGVjdDJJdGVtQWRhcHRlcjogKGVudGl0eTogYW55KSA9PiBJcVNlbGVjdDJJdGVtO1xyXG5cclxuICBASW5wdXQoKSByZWZlcmVuY2VNb2RlOiAnaWQnIHwgJ2VudGl0eScgPSAnaWQnO1xyXG4gIEBJbnB1dCgpIG11bHRpcGxlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaW5wdXRDb250YWluZXJDbGFzczogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJyc7XHJcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBtYXhSZXN1bHRzOiBudW1iZXI7XHJcbiAgQElucHV0KCkgY2xpZW50TW9kZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGJhZGdlQ29sb3IgPSAnaW5mbyc7XHJcbiAgQElucHV0KCkgd3JhcFNlbGVjdGVkVGV4dCA9ICdub3dyYXAnXHJcblxyXG4gIEBJbnB1dCgpIGRlYm91bmNlRGVsYXkgPSAyNTBcclxuICBASW5wdXQoKSBkZWJvdW5jZUxlbmd0aCA9IDJcclxuICBASW5wdXQoKSBpY29uQ2FyZXQgPSAnJiM5NjYwOydcclxuICBASW5wdXQoKSBpY29uRGVsZXRlID0gJyYjMjE1OydcclxuICBASW5wdXQoKSBtZXNzYWdlTW9yZVJlc3VsdHM6IHN0cmluZyA9IE1lc3NhZ2VzLk1PUkVfUkVTVUxUUztcclxuICBASW5wdXQoKSBtZXNzYWdlTm9SZXN1bHRzOiBzdHJpbmcgPSBNZXNzYWdlcy5OT19SRVNVTFRTO1xyXG5cclxuICBAT3V0cHV0KCkgb25TZWxlY3Q6IEV2ZW50RW1pdHRlcjxJcVNlbGVjdDJJdGVtPiA9IG5ldyBFdmVudEVtaXR0ZXI8SXFTZWxlY3QySXRlbT4oKTtcclxuICBAT3V0cHV0KCkgb25SZW1vdmU6IEV2ZW50RW1pdHRlcjxJcVNlbGVjdDJJdGVtPiA9IG5ldyBFdmVudEVtaXR0ZXI8SXFTZWxlY3QySXRlbT4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgndGVybUlucHV0JykgcHJpdmF0ZSB0ZXJtSW5wdXQ6IEVsZW1lbnRSZWZcclxuICBAVmlld0NoaWxkKCdyZXN1bHRzJykgcmVzdWx0czogSXFTZWxlY3QyUmVzdWx0c0NvbXBvbmVudDtcclxuXHJcbiAgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgdGVybSA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcclxuICByZXN1bHRzVmlzaWJsZSA9IGZhbHNlO1xyXG4gIGxpc3REYXRhOiBJcVNlbGVjdDJJdGVtW10gPSBbXVxyXG4gIGZ1bGxEYXRhTGlzdDogSXFTZWxlY3QySXRlbVtdO1xyXG4gIHNlbGVjdGVkSXRlbXM6IElxU2VsZWN0Mkl0ZW1bXSA9IFtdO1xyXG4gIHNlYXJjaEZvY3VzZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIHBsYWNlaG9sZGVyU2VsZWN0ZWQgPSAnJztcclxuXHJcbiAgb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSAoKSA9PiBmYWxzZVxyXG4gIG9uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSAoKSA9PiBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnN1YnNjcmliZVRvQ2hhbmdlc0FuZExvYWREYXRhRnJvbU9ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUoc2VsZWN0ZWRWYWx1ZXM6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHNlbGVjdGVkVmFsdWVzKSB7XHJcbiAgICAgIGlmICh0aGlzLnJlZmVyZW5jZU1vZGUgPT09ICdpZCcpIHtcclxuICAgICAgICB0aGlzLnBvcHVsYXRlSXRlbXNGcm9tSWRzKHNlbGVjdGVkVmFsdWVzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBvcHVsYXRlSXRlbXNGcm9tRW50aXRpZXMoc2VsZWN0ZWRWYWx1ZXMpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBsYWNlaG9sZGVyU2VsZWN0ZWQgPSAnJztcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9DaGFuZ2VzQW5kTG9hZERhdGFGcm9tT2JzZXJ2YWJsZSgpIHtcclxuICAgIHRoaXMuc3Vic2NyaWJlVG9SZXN1bHRzKHRoaXMudGVybS52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZURlbGF5KSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb1Jlc3VsdHMob2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxzdHJpbmc+KTogdm9pZCB7XHJcbiAgICBvYnNlcnZhYmxlLnBpcGUoXHJcbiAgICAgIHRhcCgoKSA9PiB0aGlzLnJlc3VsdHNWaXNpYmxlID0gZmFsc2UpLFxyXG4gICAgICBmaWx0ZXIoKHRlcm0pID0+IHRlcm0ubGVuZ3RoID49IHRoaXMuZGVib3VuY2VMZW5ndGgpLFxyXG4gICAgICBzd2l0Y2hNYXAodGVybSA9PiB0aGlzLmxvYWREYXRhRnJvbU9ic2VydmFibGUodGVybSkpLFxyXG4gICAgICBtYXAoaXRlbXMgPT4gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gISh0aGlzLm11bHRpcGxlICYmIHRoaXMuYWxyZWFkeVNlbGVjdGVkKGl0ZW0pKSkpLFxyXG4gICAgICB0YXAoKCkgPT4gdGhpcy5yZXN1bHRzVmlzaWJsZSA9IHRoaXMuc2VhcmNoRm9jdXNlZClcclxuICAgICkuc3Vic2NyaWJlKChpdGVtcykgPT4gdGhpcy5saXN0RGF0YSA9IGl0ZW1zKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZERhdGFGcm9tT2JzZXJ2YWJsZSh0ZXJtOiBzdHJpbmcpOiBPYnNlcnZhYmxlPElxU2VsZWN0Mkl0ZW1bXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2xpZW50TW9kZSA/IHRoaXMuZmV0Y2hBbmRmaWx0ZXJMb2NhbERhdGEodGVybSkgOiB0aGlzLmZldGNoRGF0YSh0ZXJtKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmV0Y2hBbmRmaWx0ZXJMb2NhbERhdGEodGVybTogc3RyaW5nKTogT2JzZXJ2YWJsZTxJcVNlbGVjdDJJdGVtW10+IHtcclxuICAgIGlmICghdGhpcy5mdWxsRGF0YUxpc3QpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hEYXRhKCcnKS5waXBlKFxyXG4gICAgICAgIG1lcmdlTWFwKChpdGVtcykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5mdWxsRGF0YUxpc3QgPSBpdGVtcztcclxuICAgICAgICAgIHJldHVybiB0aGlzLmZpbHRlckxvY2FsRGF0YSh0ZXJtKTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyTG9jYWxEYXRhKHRlcm0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaWx0ZXJMb2NhbERhdGEodGVybTogc3RyaW5nKTogT2JzZXJ2YWJsZTxJcVNlbGVjdDJJdGVtW10+IHtcclxuICAgIHJldHVybiBvZih0aGlzLmZ1bGxEYXRhTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHRoaXMuY29udGFpbnNUZXh0KGl0ZW0sIHRlcm0pKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnRhaW5zVGV4dChpdGVtLCB0ZXJtOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBpdGVtLnRleHQudG9VcHBlckNhc2UoKS5pbmRleE9mKHRlcm0udG9VcHBlckNhc2UoKSkgIT09IC0xO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmZXRjaERhdGEodGVybTogc3RyaW5nKTogT2JzZXJ2YWJsZTxJcVNlbGVjdDJJdGVtW10+IHtcclxuICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2VQcm92aWRlcih0ZXJtLCB0aGlzLmJ1aWxkVmFsdWUoKSkucGlwZShtYXAoKGl0ZW1zOiBhbnlbXSkgPT4gaXRlbXMubWFwKChpdGVtKSA9PiB0aGlzLmlxU2VsZWN0Mkl0ZW1BZGFwdGVyKGl0ZW0pKSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwb3B1bGF0ZUl0ZW1zRnJvbUVudGl0aWVzKHNlbGVjdGVkVmFsdWVzOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlTXVsdGlwbGVXaXRoRW50aXRpZXMoc2VsZWN0ZWRWYWx1ZXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaXFTZWxlY3QySXRlbSA9IHRoaXMuaXFTZWxlY3QySXRlbUFkYXB0ZXIoc2VsZWN0ZWRWYWx1ZXMpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbaXFTZWxlY3QySXRlbV07XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXJTZWxlY3RlZCA9IGlxU2VsZWN0Mkl0ZW0udGV4dDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTXVsdGlwbGVXaXRoRW50aXRpZXMoc2VsZWN0ZWRWYWx1ZXM6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XHJcblxyXG4gICAgc2VsZWN0ZWRWYWx1ZXMuZm9yRWFjaCgoZW50aXR5KSA9PiB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmlxU2VsZWN0Mkl0ZW1BZGFwdGVyKGVudGl0eSk7XHJcbiAgICAgIGNvbnN0IGlkcyA9IHRoaXMuZ2V0U2VsZWN0ZWRJZHMoKTtcclxuXHJcbiAgICAgIGlmIChpZHMuaW5kZXhPZihpdGVtLmlkKSA9PT0gLTEpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBvcHVsYXRlSXRlbXNGcm9tSWRzKHNlbGVjdGVkVmFsdWVzOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlTXVsdGlwbGVXaXRoSWRzKHNlbGVjdGVkVmFsdWVzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlU2luZ2xlV2l0aElkKHNlbGVjdGVkVmFsdWVzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTXVsdGlwbGVXaXRoSWRzKHNlbGVjdGVkVmFsdWVzOiBhbnkpIHtcclxuICAgIGlmIChzZWxlY3RlZFZhbHVlcyAhPT0gdW5kZWZpbmVkICYmIHRoaXMuc2VsZWN0ZWRQcm92aWRlciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IHVuaXF1ZUlkcyA9IFtdO1xyXG4gICAgICBzZWxlY3RlZFZhbHVlcy5mb3JFYWNoKChpZCkgPT4ge1xyXG4gICAgICAgIGlmICh1bmlxdWVJZHMuaW5kZXhPZihpZCkgPT09IC0xKSB7XHJcbiAgICAgICAgICB1bmlxdWVJZHMucHVzaChpZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcm92aWRlcih1bmlxdWVJZHMpLnN1YnNjcmliZSgoaXRlbXM6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gaXRlbXMubWFwKHRoaXMuaXFTZWxlY3QySXRlbUFkYXB0ZXIpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlU2luZ2xlV2l0aElkKGlkOiBhbnkpIHtcclxuICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuc2VsZWN0ZWRQcm92aWRlciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcm92aWRlcihbaWRdKS5zdWJzY3JpYmUoKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgIGNvbnN0IGlxU2VsZWN0Mkl0ZW0gPSB0aGlzLmlxU2VsZWN0Mkl0ZW1BZGFwdGVyKGl0ZW0pO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW2lxU2VsZWN0Mkl0ZW1dO1xyXG4gICAgICAgICAgdGhpcy5wbGFjZWhvbGRlclNlbGVjdGVkID0gaXFTZWxlY3QySXRlbS50ZXh0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWxyZWFkeVNlbGVjdGVkKGl0ZW06IElxU2VsZWN0Mkl0ZW0pOiBib29sZWFuIHtcclxuICAgIGxldCByZXN1bHQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZm9yRWFjaChzZWxlY3RlZEl0ZW0gPT4ge1xyXG4gICAgICBpZiAoc2VsZWN0ZWRJdGVtLmlkID09PSBpdGVtLmlkKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIG9uSXRlbVNlbGVjdGVkKGl0ZW06IElxU2VsZWN0Mkl0ZW0pIHtcclxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMubGlzdERhdGEuaW5kZXhPZihpdGVtLCAwKTtcclxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICB0aGlzLmxpc3REYXRhLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPSAwO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sodGhpcy5idWlsZFZhbHVlKCkpO1xyXG4gICAgdGhpcy50ZXJtLnBhdGNoVmFsdWUoJycsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZm9jdXMoKSwgMSk7XHJcbiAgICB0aGlzLnJlc3VsdHNWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLm9uU2VsZWN0LmVtaXQoaXRlbSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXJTZWxlY3RlZCA9IGl0ZW0udGV4dDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWRJZHMoKTogYW55IHtcclxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5pZClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwID8gbnVsbCA6IHRoaXMuc2VsZWN0ZWRJdGVtc1swXS5pZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RW50aXRpZXMoKTogYW55W10ge1xyXG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcy5tYXAoaXRlbSA9PiBpdGVtLmVudGl0eSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwID8gbnVsbCA6IHRoaXMuc2VsZWN0ZWRJdGVtc1swXS5lbnRpdHk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVJdGVtKGl0ZW06IElxU2VsZWN0Mkl0ZW0pIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmluZGV4T2YoaXRlbSwgMCk7XHJcblxyXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHRoaXMuYnVpbGRWYWx1ZSgpKTtcclxuICAgIHRoaXMub25SZW1vdmUuZW1pdChpdGVtKTtcclxuXHJcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgdGhpcy5wbGFjZWhvbGRlclNlbGVjdGVkID0gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkVmFsdWUoKSB7XHJcbiAgICByZXR1cm4gJ2lkJyA9PT0gdGhpcy5yZWZlcmVuY2VNb2RlID8gdGhpcy5nZXRTZWxlY3RlZElkcygpIDogdGhpcy5nZXRFbnRpdGllcygpO1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1cygpIHtcclxuICAgIHRoaXMuc2VhcmNoRm9jdXNlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBvbkJsdXIoKSB7XHJcbiAgICB0aGlzLnRlcm0ucGF0Y2hWYWx1ZSgnJywge2VtaXRFdmVudDogZmFsc2V9KTtcclxuICAgIHRoaXMuc2VhcmNoRm9jdXNlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5yZXN1bHRzVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjaygpO1xyXG4gIH1cclxuXHJcbiAgZm9jdXMoKSB7XHJcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy50ZXJtSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICB0aGlzLnJlc3VsdHNWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWFyY2hGb2N1c2VkID0gIXRoaXMuZGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBmb2N1c0FuZFNob3dSZXN1bHRzKCkge1xyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMudGVybUlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgdGhpcy5zdWJzY3JpYmVUb1Jlc3VsdHMob2YoJycpKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlYXJjaEZvY3VzZWQgPSAhdGhpcy5kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIG9uS2V5VXAoZXYpIHtcclxuICAgIGlmICh0aGlzLnJlc3VsdHMpIHtcclxuICAgICAgaWYgKGV2LmtleUNvZGUgPT09IEtFWV9DT0RFX0RPV05fQVJST1cpIHtcclxuICAgICAgICB0aGlzLnJlc3VsdHMuYWN0aXZlTmV4dCgpO1xyXG4gICAgICB9IGVsc2UgaWYgKGV2LmtleUNvZGUgPT09IEtFWV9DT0RFX1VQX0FSUk9XKSB7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzLmFjdGl2ZVByZXZpb3VzKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZXYua2V5Q29kZSA9PT0gS0VZX0NPREVfRU5URVIpIHtcclxuICAgICAgICB0aGlzLnJlc3VsdHMuc2VsZWN0Q3VycmVudEl0ZW0oKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuZGVib3VuY2VMZW5ndGggPT09IDApIHtcclxuICAgICAgICBpZiAoZXYua2V5Q29kZSA9PT0gS0VZX0NPREVfRU5URVIgfHwgZXYua2V5Q29kZSA9PT0gS0VZX0NPREVfRE9XTl9BUlJPVykge1xyXG4gICAgICAgICAgdGhpcy5mb2N1c0FuZFNob3dSZXN1bHRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbktleURvd24oZXYpIHtcclxuICAgIGlmIChldi5rZXlDb2RlID09PSBLRVlfQ09ERV9FTlRFUikge1xyXG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnJlc3VsdHMpIHtcclxuICAgICAgaWYgKGV2LmtleUNvZGUgPT09IEtFWV9DT0RFX1RBQikge1xyXG4gICAgICAgIHRoaXMucmVzdWx0cy5zZWxlY3RDdXJyZW50SXRlbSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2LmtleUNvZGUgPT09IEtFWV9DT0RFX0RFTEVURSkge1xyXG4gICAgICBjb25zdCB0ZXh0RW50ZXJlZCA9ICF0aGlzLnRlcm0udmFsdWUgfHwgdGhpcy50ZXJtLnZhbHVlLmxlbmd0aCA9PT0gMDtcclxuICAgICAgaWYgKHRleHRFbnRlcmVkICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVJdGVtKHRoaXMuc2VsZWN0ZWRJdGVtc1t0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoIC0gMV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQbGFjZWhvbGRlcigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwID8gdGhpcy5wbGFjZWhvbGRlclNlbGVjdGVkIDogdGhpcy5wbGFjZWhvbGRlcjtcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJzZWxlY3QyLWNvbnRhaW5lclwiPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwic2VsZWN0Mi1pbm5lci1jb250YWluZXJcIiBbbmdDbGFzc109XCJpbnB1dENvbnRhaW5lckNsYXNzID8gaW5wdXRDb250YWluZXJDbGFzcyA6ICcnXCJcclxuICAgIFtjbGFzcy5zaW1wbGUtc2VsZWN0aW9uXT1cIiFtdWx0aXBsZVwiIFtjbGFzcy5tdWx0aXBsZS1zZWxlY3Rpb25dPVwibXVsdGlwbGVcIlxyXG4gICAgW2NsYXNzLnNlYXJjaC1mb2N1c2VkXT1cInNlYXJjaEZvY3VzZWRcIiBbY2xhc3MucmVhZG9ubHldPVwiZGlzYWJsZWRcIlxyXG4gICAgKGNsaWNrKT1cImZvY3VzQW5kU2hvd1Jlc3VsdHMoKVwiXHJcbiAgPlxyXG4gICAgPHVsIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3Rpb24tY29udGFpbmVyXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VhcmNoRm9jdXNlZCB8fCBtdWx0aXBsZVwiPlxyXG4gICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzZWxlY3RlZEl0ZW1zXCIgY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGVkXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlbGVjdDItc2VsZWN0ZWQtaXRlbVwiIFtuZ1N0eWxlXT1cInt3aGl0ZXNwYWNlOiB3cmFwU2VsZWN0ZWRUZXh0fVwiIFt0aXRsZV09XCJpdGVtLnRleHRcIj57e2l0ZW0udGV4dH19PC9zcGFuPlxyXG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFkaXNhYmxlZFwiIGNsYXNzPVwic2VsZWN0Mi1pY29uXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cInJlbW92ZUl0ZW0oaXRlbSlcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbi1yZW1vdmVcIiBbaW5uZXJIVE1MXT1cImljb25EZWxldGVcIj48L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxsaSBjbGFzcz1cInNlbGVjdDItaW5wdXQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGlucHV0ICN0ZXJtSW5wdXQgKm5nSWY9XCIhZGlzYWJsZWRcIiBbZm9ybUNvbnRyb2xdPVwidGVybVwiIHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cImdldFBsYWNlaG9sZGVyKClcIlxyXG4gICAgICAgICAgW2NsYXNzLnRyYW5zcGFyZW50XT1cIiFtdWx0aXBsZSAmJiBzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDAgJiYgIXNlYXJjaEZvY3VzZWRcIlxyXG4gICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoKVwiIChibHVyKT1cIm9uQmx1cigpXCJcclxuICAgICAgICAgIChrZXl1cCk9XCJvbktleVVwKCRldmVudClcIiAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9saT5cclxuICAgIDwvdWw+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cIihtdWx0aXBsZSB8fCAoIW11bHRpcGxlICYmIHNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwKSlcIiBjbGFzcz1cInNlbGVjdDItaWNvblwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInNlbGVjdDItc2VsZWN0aW9uLWNhcmV0XCIgW2lubmVySFRNTF09XCJpY29uQ2FyZXRcIj48L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGlxLXNlbGVjdDItcmVzdWx0cyAqbmdJZj1cIiFkaXNhYmxlZFwiICNyZXN1bHRzIFtyZXN1bHRzVmlzaWJsZV09XCJyZXN1bHRzVmlzaWJsZVwiXHJcbiAgICBbaXRlbXNdPVwibGlzdERhdGFcIiBbc2VsZWN0ZWRJdGVtc109XCJzZWxlY3RlZEl0ZW1zXCIgW21heFJlc3VsdHNdPVwibWF4UmVzdWx0c1wiXHJcbiAgICBbbWVzc2FnZU1vcmVSZXN1bHRzXT1cIm1lc3NhZ2VNb3JlUmVzdWx0c1wiIFttZXNzYWdlTm9SZXN1bHRzXT1cIm1lc3NhZ2VOb1Jlc3VsdHNcIlxyXG4gICAgW3RlbXBsYXRlUmVmXT1cInRlbXBsYXRlUmVmXCIgKG9uSXRlbVNlbGVjdGVkKT1cIm9uSXRlbVNlbGVjdGVkKCRldmVudCk7XCJcclxuICA+XHJcbiAgPC9pcS1zZWxlY3QyLXJlc3VsdHM+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -1,8 +1,7 @@
1
- /**
2
- * Created by diego on 3/13/17.
3
- */
4
- export class Messages {
5
- static { this.PARTIAL_COUNT_VAR = '%PARTIAL_COUNT%'; }
6
- static { this.TOTAL_COUNT_VAR = '%TOTAL_COUNT%'; }
1
+ export default class Messages {
2
+ static { this.VISIBLE_COUNT_VAR = '%VISIBLE_COUNT%'; }
3
+ static { this.MAX_COUNT_VAR = '%MAX_COUNT%'; }
4
+ static { this.MORE_RESULTS = 'Showing ' + this.VISIBLE_COUNT_VAR + ' of ' + this.MAX_COUNT_VAR + ' results. Refine your search to show more results.'; }
5
+ static { this.NO_RESULTS = 'No results available'; }
7
6
  }
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzItaXEtc2VsZWN0Mi9zcmMvbGliL2lxLXNlbGVjdDIvbWVzc2FnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxNQUFNLE9BQU8sUUFBUTthQUVELHNCQUFpQixHQUFHLGlCQUFpQixDQUFDO2FBQ3RDLG9CQUFlLEdBQUcsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENyZWF0ZWQgYnkgZGllZ28gb24gMy8xMy8xNy5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBNZXNzYWdlcyB7XHJcblxyXG4gICAgc3RhdGljIHJlYWRvbmx5IFBBUlRJQUxfQ09VTlRfVkFSID0gJyVQQVJUSUFMX0NPVU5UJSc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgVE9UQUxfQ09VTlRfVkFSID0gJyVUT1RBTF9DT1VOVCUnO1xyXG5cclxuICAgIG1vcmVSZXN1bHRzQXZhaWxhYmxlTXNnPzogc3RyaW5nO1xyXG4gICAgbm9SZXN1bHRzQXZhaWxhYmxlTXNnPzogc3RyaW5nO1xyXG59XHJcbiJdfQ==
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzItaXEtc2VsZWN0Mi9zcmMvbGliL2lxLXNlbGVjdDIvbWVzc2FnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE9BQU8sT0FBTyxRQUFRO2FBRVgsc0JBQWlCLEdBQUcsaUJBQWlCLENBQUM7YUFDdEMsa0JBQWEsR0FBRyxhQUFhLENBQUM7YUFFOUIsaUJBQVksR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLG9EQUFvRCxDQUFDO2FBQ3hJLGVBQVUsR0FBRyxzQkFBc0IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lc3NhZ2VzIHtcclxuXHJcbiAgc3RhdGljIHJlYWRvbmx5IFZJU0lCTEVfQ09VTlRfVkFSID0gJyVWSVNJQkxFX0NPVU5UJSc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE1BWF9DT1VOVF9WQVIgPSAnJU1BWF9DT1VOVCUnO1xyXG5cclxuICBzdGF0aWMgcmVhZG9ubHkgTU9SRV9SRVNVTFRTID0gJ1Nob3dpbmcgJyArIHRoaXMuVklTSUJMRV9DT1VOVF9WQVIgKyAnIG9mICcgKyB0aGlzLk1BWF9DT1VOVF9WQVIgKyAnIHJlc3VsdHMuIFJlZmluZSB5b3VyIHNlYXJjaCB0byBzaG93IG1vcmUgcmVzdWx0cy4nO1xyXG4gIHN0YXRpYyByZWFkb25seSBOT19SRVNVTFRTID0gJ05vIHJlc3VsdHMgYXZhaWxhYmxlJ1xyXG5cclxufVxyXG4iXX0=