ng-zorro-antd-extension 16.1.0 → 16.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/README.md +1 -0
  2. package/configurable-query/configurable-query.component.d.ts +13 -13
  3. package/configurable-query/type.d.ts +2 -2
  4. package/esm2022/configurable-query/configurable-query.component.mjs +66 -41
  5. package/esm2022/configurable-query/type.mjs +1 -1
  6. package/esm2022/print/nzx-print-content.directive.mjs +22 -0
  7. package/esm2022/print/nzx-print-v.component.mjs +300 -0
  8. package/esm2022/print/nzx-print.component.mjs +36 -27
  9. package/esm2022/print/nzx-print.directive.mjs +9 -6
  10. package/esm2022/print/nzx-print.module.mjs +20 -6
  11. package/esm2022/print/public-api.mjs +3 -1
  12. package/esm2022/table-select/page-table-select/page-table-select.component.mjs +3 -3
  13. package/esm2022/table-select/table-select/table-select.component.mjs +3 -3
  14. package/esm2022/util/lib/getElementByTag.mjs +31 -0
  15. package/esm2022/util/public-api.mjs +2 -1
  16. package/fesm2022/ng-zorro-antd-extension-configurable-query.mjs +64 -39
  17. package/fesm2022/ng-zorro-antd-extension-configurable-query.mjs.map +1 -1
  18. package/fesm2022/ng-zorro-antd-extension-print.mjs +368 -36
  19. package/fesm2022/ng-zorro-antd-extension-print.mjs.map +1 -1
  20. package/fesm2022/ng-zorro-antd-extension-table-select.mjs +4 -4
  21. package/fesm2022/ng-zorro-antd-extension-table-select.mjs.map +1 -1
  22. package/fesm2022/ng-zorro-antd-extension-util.mjs +32 -1
  23. package/fesm2022/ng-zorro-antd-extension-util.mjs.map +1 -1
  24. package/package.json +2 -1
  25. package/pipes/safe-url.pipe.d.ts +1 -1
  26. package/print/nzx-print-content.directive.d.ts +10 -0
  27. package/print/nzx-print-v.component.d.ts +45 -0
  28. package/print/nzx-print.component.d.ts +7 -7
  29. package/print/nzx-print.directive.d.ts +2 -1
  30. package/print/nzx-print.module.d.ts +7 -3
  31. package/print/public-api.d.ts +2 -0
  32. package/public-api.d.ts +1 -1
  33. package/timer-button/timer-button.directive.d.ts +1 -1
  34. package/util/lib/getElementByTag.d.ts +8 -0
  35. package/util/public-api.d.ts +1 -0
  36. package/esm2022/print/util.mjs +0 -9
  37. package/print/util.d.ts +0 -1
package/README.md CHANGED
@@ -65,6 +65,7 @@ export class AppModule {}
65
65
  | ^14.0.0 | ^14.0.0 | ^14.0.0 | end |
66
66
  | ^15.0.0 | ^15.0.0 | ^15.0.0 | 2024-05-18 |
67
67
  | ^16.0.0 | ^16.0.0 | ^15.6.0 | 2024-11-08 |
68
+ | ^17.0.0 | ^17.0.0 | ^15.6.0 | 2025-05-15 |
68
69
 
69
70
  Install the specified version if required using:
70
71
 
@@ -1,4 +1,4 @@
1
- import { AfterContentInit, ChangeDetectorRef, EventEmitter, OnChanges, OnDestroy, OnInit, QueryList, SimpleChanges } from '@angular/core';
1
+ import { AfterContentInit, AfterViewInit, ChangeDetectorRef, EventEmitter, OnChanges, OnDestroy, OnInit, QueryList, SimpleChanges } from '@angular/core';
2
2
  import { AbstractControl, FormBuilder, FormGroup } from '@angular/forms';
3
3
  import { NzxQueryI18nInterface } from 'ng-zorro-antd-extension/i18n';
4
4
  import { NzJustify } from 'ng-zorro-antd/grid';
@@ -10,7 +10,7 @@ import * as i0 from "@angular/core";
10
10
  * 查询组件
11
11
  * 支持模板自定义,在使用模板自定义时,要注意controlType应该设置为Template并且确保controlName与指令上的nzxControl应该相同
12
12
  */
13
- export declare class NzxConfigurableQueryComponent implements OnChanges, OnInit, AfterContentInit, OnDestroy {
13
+ export declare class NzxConfigurableQueryComponent implements OnChanges, OnInit, AfterViewInit, AfterContentInit, OnDestroy {
14
14
  private i18n;
15
15
  private fb;
16
16
  private cd;
@@ -24,8 +24,6 @@ export declare class NzxConfigurableQueryComponent implements OnChanges, OnInit,
24
24
  lineNumber: number;
25
25
  /** 操作按钮所占栅格数,24则换行 */
26
26
  nzxBtnSpan: number | null;
27
- /**启用折叠 */
28
- nzxCollapse: boolean;
29
27
  /** 初始化时,主动查询 */
30
28
  initQuery: boolean;
31
29
  /** 缺省 固定参数 */
@@ -39,18 +37,19 @@ export declare class NzxConfigurableQueryComponent implements OnChanges, OnInit,
39
37
  /** 查询组件出参*/
40
38
  get queryParams(): any;
41
39
  set queryParams(value: any);
42
- get collapseText(): string;
43
- get collapseIcon(): "down" | "up";
40
+ get nzxCollapse(): boolean;
44
41
  locale: NzxQueryI18nInterface;
45
- /**是否展开状态*/
46
- private isCollapse;
42
+ collapseIcon: string;
43
+ collapseText: string;
47
44
  private _queryParams;
48
45
  private defaultValue;
49
46
  private cacheParams;
50
47
  private destroy$;
51
48
  private _nzxBtnSpan;
49
+ private queyFormEl;
52
50
  controlTemplateList: QueryList<NzxControlDirective>;
53
51
  constructor(i18n: NzI18nService, fb: FormBuilder, cd: ChangeDetectorRef);
52
+ ngAfterViewInit(): void;
54
53
  ngOnChanges(changes: SimpleChanges): void;
55
54
  ngOnInit(): void;
56
55
  ngAfterContentInit(): void;
@@ -62,8 +61,10 @@ export declare class NzxConfigurableQueryComponent implements OnChanges, OnInit,
62
61
  setControl(controlName: string, config: Partial<NzxQueryControlOptions>): void;
63
62
  /**
64
63
  * 动态添加控件
64
+ * @param config 配置项
65
+ * @param position 添加位置 不传为末尾
65
66
  */
66
- addControl(config: NzxQueryControlOptions): void;
67
+ addControl(config: NzxQueryControlOptions, position?: number | undefined): void;
67
68
  /**
68
69
  * 根据控件名删除控件
69
70
  */
@@ -78,18 +79,17 @@ export declare class NzxConfigurableQueryComponent implements OnChanges, OnInit,
78
79
  */
79
80
  getFormControl(path: string | readonly (string | number)[]): AbstractControl<any, any> | null;
80
81
  /** 查询 */
81
- search(): void;
82
+ search(event?: Event): void;
82
83
  /** 重置 */
83
84
  reset(): void;
84
85
  /**展开、收起*/
85
86
  toggleCollapse(): void;
86
87
  ngOnDestroy(): void;
88
+ private calculateText;
87
89
  /** 清空表单控件 */
88
90
  private clearFormControl;
89
- /** 折叠 */
90
- private collapse;
91
91
  /** 生成表单 */
92
92
  private generateForm;
93
93
  static ɵfac: i0.ɵɵFactoryDeclaration<NzxConfigurableQueryComponent, never>;
94
- static ɵcmp: i0.ɵɵComponentDeclaration<NzxConfigurableQueryComponent, "nzx-configurable-query", ["NzxConfigurableQuery"], { "controls": { "alias": "controls"; "required": false; }; "nzxJustify": { "alias": "nzxJustify"; "required": false; }; "nzxGutter": { "alias": "nzxGutter"; "required": false; }; "lineNumber": { "alias": "lineNumber"; "required": false; }; "nzxBtnSpan": { "alias": "nzxBtnSpan"; "required": false; }; "nzxCollapse": { "alias": "nzxCollapse"; "required": false; }; "initQuery": { "alias": "initQuery"; "required": false; }; "fixedParams": { "alias": "fixedParams"; "required": false; }; }, { "queryChange": "queryChange"; "resetChange": "resetChange"; }, ["controlTemplateList"], ["*"], false, never>;
94
+ static ɵcmp: i0.ɵɵComponentDeclaration<NzxConfigurableQueryComponent, "nzx-configurable-query", ["NzxConfigurableQuery"], { "controls": { "alias": "controls"; "required": false; }; "nzxJustify": { "alias": "nzxJustify"; "required": false; }; "nzxGutter": { "alias": "nzxGutter"; "required": false; }; "lineNumber": { "alias": "lineNumber"; "required": false; }; "nzxBtnSpan": { "alias": "nzxBtnSpan"; "required": false; }; "initQuery": { "alias": "initQuery"; "required": false; }; "fixedParams": { "alias": "fixedParams"; "required": false; }; }, { "queryChange": "queryChange"; "resetChange": "resetChange"; }, ["controlTemplateList"], ["*"], false, never>;
95
95
  }
@@ -62,9 +62,9 @@ export interface NzxQueryControlOptions {
62
62
  */
63
63
  errorTip?: string;
64
64
  /**
65
- * 是否要折叠(nzxCollapse必须为true才生效)
65
+ * 折叠
66
66
  */
67
- collapse?: boolean;
67
+ collapse?: true;
68
68
  /**
69
69
  * 隐藏控件(主要用来携带查询参数但界面不可见)
70
70
  */
@@ -1,6 +1,6 @@
1
- import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, Input, Output, } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
2
2
  import { updateControlStatus } from 'ng-zorro-antd-extension/util';
3
- import { Subject, takeUntil } from 'rxjs';
3
+ import { Subject, fromEvent, takeUntil } from 'rxjs';
4
4
  import { NzxControlDirective } from './control.directive';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "ng-zorro-antd/i18n";
@@ -25,11 +25,8 @@ export class NzxConfigurableQueryComponent {
25
25
  set queryParams(value) {
26
26
  this._queryParams = value;
27
27
  }
28
- get collapseText() {
29
- return this.isCollapse ? this.locale.expand : this.locale.collapse;
30
- }
31
- get collapseIcon() {
32
- return this.isCollapse ? 'down' : 'up';
28
+ get nzxCollapse() {
29
+ return this.controls.some((i) => i.hasOwnProperty('collapse'));
33
30
  }
34
31
  constructor(i18n, fb, cd) {
35
32
  this.i18n = i18n;
@@ -45,8 +42,6 @@ export class NzxConfigurableQueryComponent {
45
42
  this.lineNumber = 3;
46
43
  /** 操作按钮所占栅格数,24则换行 */
47
44
  this.nzxBtnSpan = null;
48
- /**启用折叠 */
49
- this.nzxCollapse = true;
50
45
  /** 初始化时,主动查询 */
51
46
  this.initQuery = false;
52
47
  /** 缺省 固定参数 */
@@ -55,8 +50,8 @@ export class NzxConfigurableQueryComponent {
55
50
  this.queryChange = new EventEmitter();
56
51
  /** 重置时会触发抛出查询参数 */
57
52
  this.resetChange = new EventEmitter();
58
- /**是否展开状态*/
59
- this.isCollapse = true;
53
+ this.collapseIcon = 'down';
54
+ this.collapseText = '';
60
55
  this._queryParams = {};
61
56
  this.defaultValue = {};
62
57
  this.cacheParams = {};
@@ -64,6 +59,26 @@ export class NzxConfigurableQueryComponent {
64
59
  this._nzxBtnSpan = null;
65
60
  this.queryForm = this.fb.group({});
66
61
  }
62
+ ngAfterViewInit() {
63
+ if (this.queyFormEl) {
64
+ fromEvent(this.queyFormEl.nativeElement, 'keydown')
65
+ .pipe(takeUntil(this.destroy$))
66
+ .subscribe((event) => {
67
+ if (event.key === 'Enter') {
68
+ event.stopPropagation();
69
+ event.preventDefault();
70
+ this.search();
71
+ }
72
+ // 检查是否同时按下了Ctrl键(在Windows/Linux上)和S键
73
+ if ((event.ctrlKey || event.metaKey) && event.key === 'r') {
74
+ // 注意:event.metaKey用于兼容Mac的Command键
75
+ event.preventDefault(); // 阻止浏览器默认的保存行为
76
+ event.stopPropagation();
77
+ this.reset();
78
+ }
79
+ });
80
+ }
81
+ }
67
82
  ngOnChanges(changes) {
68
83
  if (changes['controls'] && !changes['controls'].isFirstChange()) {
69
84
  const controls = changes['controls'].currentValue;
@@ -113,16 +128,22 @@ export class NzxConfigurableQueryComponent {
113
128
  }
114
129
  /**
115
130
  * 动态添加控件
131
+ * @param config 配置项
132
+ * @param position 添加位置 不传为末尾
116
133
  */
117
- addControl(config) {
134
+ addControl(config, position) {
118
135
  const control = this.getControl(config.controlName);
119
136
  if (!control) {
120
- this.collapse();
121
137
  if (config.controlName) {
122
138
  this.queryForm.addControl(config.controlName, config.controlInstance ?? this.fb.control(config.default ?? null));
123
139
  }
124
- this.controls.push(config);
125
- this.cd.markForCheck();
140
+ if (position === void 0 || position === null) {
141
+ this.controls.push(config);
142
+ }
143
+ else {
144
+ this.controls.splice(position - 1, 0, config);
145
+ }
146
+ this.calculateText();
126
147
  }
127
148
  else {
128
149
  throw `The control name: '${config.controlName}' already exists!`;
@@ -134,10 +155,9 @@ export class NzxConfigurableQueryComponent {
134
155
  removeControl(controlName) {
135
156
  const control = this.getControl(controlName);
136
157
  if (control) {
137
- this.collapse();
138
158
  this.queryForm.removeControl(controlName);
139
159
  this.controls = this.controls.filter((c) => c.controlName !== controlName);
140
- this.cd.markForCheck();
160
+ this.calculateText();
141
161
  }
142
162
  else {
143
163
  throw `The control name: '${controlName}' not find!`;
@@ -157,7 +177,10 @@ export class NzxConfigurableQueryComponent {
157
177
  return this.queryForm.get(path);
158
178
  }
159
179
  /** 查询 */
160
- search() {
180
+ search(event) {
181
+ if (event) {
182
+ event.stopPropagation();
183
+ }
161
184
  if (this.queryForm.invalid) {
162
185
  updateControlStatus(this.queryForm);
163
186
  return;
@@ -175,39 +198,39 @@ export class NzxConfigurableQueryComponent {
175
198
  }
176
199
  /**展开、收起*/
177
200
  toggleCollapse() {
178
- this.controls.forEach((config) => {
179
- if (this.isCollapse && config.collapse === true) {
180
- // 展开
201
+ for (let index = 0; index < this.controls.length; index++) {
202
+ const config = this.controls[index];
203
+ if (config.hasOwnProperty('collapse') && config.collapse === true) {
181
204
  config.collapse = false;
182
- this.nzxBtnSpan = 24;
183
205
  }
184
- if (!this.isCollapse && config.collapse === false) {
206
+ else if (config.hasOwnProperty('collapse') &&
207
+ config.collapse === false) {
185
208
  config.collapse = true;
186
- this.nzxBtnSpan = this._nzxBtnSpan;
187
209
  }
188
- });
189
- this.isCollapse = !this.isCollapse;
210
+ }
211
+ this.calculateText();
190
212
  }
191
213
  ngOnDestroy() {
192
214
  this.destroy$.next();
193
215
  this.destroy$.complete();
194
216
  }
217
+ calculateText() {
218
+ if (this.controls.some((i) => i.collapse === true)) {
219
+ this.collapseIcon = 'down';
220
+ this.collapseText = this.locale.expand;
221
+ }
222
+ else {
223
+ this.collapseIcon = 'up';
224
+ this.collapseText = this.locale.collapse;
225
+ }
226
+ this.cd.markForCheck();
227
+ }
195
228
  /** 清空表单控件 */
196
229
  clearFormControl() {
197
230
  Object.keys(this.queryForm.controls).forEach((key) => {
198
231
  this.queryForm.removeControl(key);
199
232
  });
200
233
  }
201
- /** 折叠 */
202
- collapse() {
203
- this.isCollapse = true;
204
- this.controls.forEach((config) => {
205
- if (config.collapse === false) {
206
- config.collapse = true;
207
- this.nzxBtnSpan = this._nzxBtnSpan;
208
- }
209
- });
210
- }
211
234
  /** 生成表单 */
212
235
  generateForm(controlConfigs) {
213
236
  this.clearFormControl();
@@ -227,13 +250,14 @@ export class NzxConfigurableQueryComponent {
227
250
  // 缓存回显查询条件
228
251
  this.queryForm.patchValue(this.cacheParams);
229
252
  }
253
+ this.calculateText();
230
254
  }
231
255
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NzxConfigurableQueryComponent, deps: [{ token: i1.NzI18nService }, { token: i2.FormBuilder }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
232
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NzxConfigurableQueryComponent, selector: "nzx-configurable-query", inputs: { controls: "controls", nzxJustify: "nzxJustify", nzxGutter: "nzxGutter", lineNumber: "lineNumber", nzxBtnSpan: "nzxBtnSpan", nzxCollapse: "nzxCollapse", initQuery: "initQuery", fixedParams: "fixedParams" }, outputs: { queryChange: "queryChange", resetChange: "resetChange" }, queries: [{ propertyName: "controlTemplateList", predicate: NzxControlDirective, descendants: true }], exportAs: ["NzxConfigurableQuery"], usesOnChanges: true, ngImport: i0, template: "<form class=\"nzx-query-container\" nz-form [formGroup]=\"queryForm\">\n <div nz-row [nzGutter]=\"nzxGutter\" [nzJustify]=\"nzxJustify\">\n <ng-container *ngFor=\"let config of controls\">\n <div\n *ngIf=\"!config.hidden\"\n nz-col\n [nzSpan]=\"config.nzxSpan || 24 / lineNumber\"\n [hidden]=\"nzxCollapse && config.collapse\"\n >\n <nzx-configurable-query-item\n *ngIf=\"config.controlName\"\n [form]=\"queryForm\"\n [control]=\"config\"\n ></nzx-configurable-query-item>\n </div>\n </ng-container>\n\n <div class=\"nzx-query-btn\" nz-col [nzSpan]=\"nzxBtnSpan || 24 / lineNumber\">\n <div nz-row nzJustify=\"end\" nzAlign=\"middle\">\n <button nz-button nzType=\"primary\" type=\"button\" (click)=\"search()\">\n {{ locale[\"query\"] }}\n </button>\n <button nz-button type=\"button\" (click)=\"reset()\">\n {{ locale[\"reset\"] }}\n </button>\n <ng-content></ng-content>\n <a\n *ngIf=\"nzxCollapse\"\n nz-button\n nzType=\"link\"\n (click)=\"toggleCollapse()\"\n >\n {{ collapseText }}\n <i nz-icon [nzType]=\"collapseIcon\"></i>\n </a>\n </div>\n </div>\n </div>\n</form>\n", styles: [".nzx-query-container{padding:12px;background-color:#fff;border-radius:8px}.nzx-query-container [nz-form-label]{overflow:visible}.nzx-query-container .nzx-query-btn{flex-grow:2;max-width:none}.nzx-query-container .nzx-query-btn button{margin:0 4px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i4.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "directive", type: i5.NzFormDirective, selector: "[nz-form]", inputs: ["nzLayout", "nzNoColon", "nzAutoTips", "nzDisableAutoTips", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzForm"] }, { kind: "component", type: i6.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i7.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i8.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "directive", type: i9.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: i10.NzxConfigurableQueryItemComponent, selector: "nzx-configurable-query-item", inputs: ["form", "control"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
256
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NzxConfigurableQueryComponent, selector: "nzx-configurable-query", inputs: { controls: "controls", nzxJustify: "nzxJustify", nzxGutter: "nzxGutter", lineNumber: "lineNumber", nzxBtnSpan: "nzxBtnSpan", initQuery: "initQuery", fixedParams: "fixedParams" }, outputs: { queryChange: "queryChange", resetChange: "resetChange" }, queries: [{ propertyName: "controlTemplateList", predicate: NzxControlDirective, descendants: true }], viewQueries: [{ propertyName: "queyFormEl", first: true, predicate: ["queyForm"], descendants: true }], exportAs: ["NzxConfigurableQuery"], usesOnChanges: true, ngImport: i0, template: "<form #queyForm class=\"nzx-query-container\" nz-form [formGroup]=\"queryForm\">\n\t<div nz-row [nzGutter]=\"nzxGutter\" [nzJustify]=\"nzxJustify\">\n\t\t<ng-container *ngFor=\"let config of controls; let i = index\">\n\t\t\t<div\n\t\t\t\t*ngIf=\"!config.hidden\"\n\t\t\t\tnz-col\n\t\t\t\t[nzSpan]=\"config.nzxSpan || 24 / lineNumber\"\n\t\t\t\t[hidden]=\"config.collapse\"\n\t\t\t\t[nzOrder]=\"i\"\n\t\t\t>\n\t\t\t\t<nzx-configurable-query-item\n\t\t\t\t\t*ngIf=\"config.controlName\"\n\t\t\t\t\t[form]=\"queryForm\"\n\t\t\t\t\t[control]=\"config\"\n\t\t\t\t></nzx-configurable-query-item>\n\t\t\t</div>\n\t\t</ng-container>\n\n\t\t<div\n\t\t\t[nzOrder]=\"controls.length\"\n\t\t\tclass=\"nzx-query-btn\"\n\t\t\tnz-col\n\t\t\t[nzSpan]=\"nzxBtnSpan || 24 / lineNumber\"\n\t\t>\n\t\t\t<div nz-row nzJustify=\"end\" nzAlign=\"middle\">\n\t\t\t\t<button\n\t\t\t\t\tnz-button\n\t\t\t\t\tnzType=\"primary\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttitle=\"Enter\"\n\t\t\t\t\t(click)=\"search($event)\"\n\t\t\t\t>\n\t\t\t\t\t{{ locale['query'] }}\n\t\t\t\t</button>\n\t\t\t\t<button nz-button type=\"button\" title=\"ctrl+r\" (click)=\"reset()\">\n\t\t\t\t\t{{ locale['reset'] }}\n\t\t\t\t</button>\n\t\t\t\t<ng-content></ng-content>\n\t\t\t\t<a\n\t\t\t\t\t*ngIf=\"nzxCollapse\"\n\t\t\t\t\tnz-button\n\t\t\t\t\tnzType=\"link\"\n\t\t\t\t\t(click)=\"toggleCollapse()\"\n\t\t\t\t>\n\t\t\t\t\t{{ collapseText }}\n\t\t\t\t\t<i nz-icon [nzType]=\"collapseIcon\"></i>\n\t\t\t\t</a>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</form>\n", styles: [".nzx-query-container{padding:12px;background-color:#fff;border-radius:8px}.nzx-query-container [nz-form-label]{overflow:visible}.nzx-query-container .nzx-query-btn{flex-grow:2;max-width:none}.nzx-query-container .nzx-query-btn button{margin:0 4px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i4.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "directive", type: i5.NzFormDirective, selector: "[nz-form]", inputs: ["nzLayout", "nzNoColon", "nzAutoTips", "nzDisableAutoTips", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzForm"] }, { kind: "component", type: i6.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i7.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i8.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "directive", type: i9.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: i10.NzxConfigurableQueryItemComponent, selector: "nzx-configurable-query-item", inputs: ["form", "control"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
233
257
  }
234
258
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NzxConfigurableQueryComponent, decorators: [{
235
259
  type: Component,
236
- args: [{ selector: 'nzx-configurable-query', changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'NzxConfigurableQuery', template: "<form class=\"nzx-query-container\" nz-form [formGroup]=\"queryForm\">\n <div nz-row [nzGutter]=\"nzxGutter\" [nzJustify]=\"nzxJustify\">\n <ng-container *ngFor=\"let config of controls\">\n <div\n *ngIf=\"!config.hidden\"\n nz-col\n [nzSpan]=\"config.nzxSpan || 24 / lineNumber\"\n [hidden]=\"nzxCollapse && config.collapse\"\n >\n <nzx-configurable-query-item\n *ngIf=\"config.controlName\"\n [form]=\"queryForm\"\n [control]=\"config\"\n ></nzx-configurable-query-item>\n </div>\n </ng-container>\n\n <div class=\"nzx-query-btn\" nz-col [nzSpan]=\"nzxBtnSpan || 24 / lineNumber\">\n <div nz-row nzJustify=\"end\" nzAlign=\"middle\">\n <button nz-button nzType=\"primary\" type=\"button\" (click)=\"search()\">\n {{ locale[\"query\"] }}\n </button>\n <button nz-button type=\"button\" (click)=\"reset()\">\n {{ locale[\"reset\"] }}\n </button>\n <ng-content></ng-content>\n <a\n *ngIf=\"nzxCollapse\"\n nz-button\n nzType=\"link\"\n (click)=\"toggleCollapse()\"\n >\n {{ collapseText }}\n <i nz-icon [nzType]=\"collapseIcon\"></i>\n </a>\n </div>\n </div>\n </div>\n</form>\n", styles: [".nzx-query-container{padding:12px;background-color:#fff;border-radius:8px}.nzx-query-container [nz-form-label]{overflow:visible}.nzx-query-container .nzx-query-btn{flex-grow:2;max-width:none}.nzx-query-container .nzx-query-btn button{margin:0 4px}\n"] }]
260
+ args: [{ selector: 'nzx-configurable-query', changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'NzxConfigurableQuery', template: "<form #queyForm class=\"nzx-query-container\" nz-form [formGroup]=\"queryForm\">\n\t<div nz-row [nzGutter]=\"nzxGutter\" [nzJustify]=\"nzxJustify\">\n\t\t<ng-container *ngFor=\"let config of controls; let i = index\">\n\t\t\t<div\n\t\t\t\t*ngIf=\"!config.hidden\"\n\t\t\t\tnz-col\n\t\t\t\t[nzSpan]=\"config.nzxSpan || 24 / lineNumber\"\n\t\t\t\t[hidden]=\"config.collapse\"\n\t\t\t\t[nzOrder]=\"i\"\n\t\t\t>\n\t\t\t\t<nzx-configurable-query-item\n\t\t\t\t\t*ngIf=\"config.controlName\"\n\t\t\t\t\t[form]=\"queryForm\"\n\t\t\t\t\t[control]=\"config\"\n\t\t\t\t></nzx-configurable-query-item>\n\t\t\t</div>\n\t\t</ng-container>\n\n\t\t<div\n\t\t\t[nzOrder]=\"controls.length\"\n\t\t\tclass=\"nzx-query-btn\"\n\t\t\tnz-col\n\t\t\t[nzSpan]=\"nzxBtnSpan || 24 / lineNumber\"\n\t\t>\n\t\t\t<div nz-row nzJustify=\"end\" nzAlign=\"middle\">\n\t\t\t\t<button\n\t\t\t\t\tnz-button\n\t\t\t\t\tnzType=\"primary\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttitle=\"Enter\"\n\t\t\t\t\t(click)=\"search($event)\"\n\t\t\t\t>\n\t\t\t\t\t{{ locale['query'] }}\n\t\t\t\t</button>\n\t\t\t\t<button nz-button type=\"button\" title=\"ctrl+r\" (click)=\"reset()\">\n\t\t\t\t\t{{ locale['reset'] }}\n\t\t\t\t</button>\n\t\t\t\t<ng-content></ng-content>\n\t\t\t\t<a\n\t\t\t\t\t*ngIf=\"nzxCollapse\"\n\t\t\t\t\tnz-button\n\t\t\t\t\tnzType=\"link\"\n\t\t\t\t\t(click)=\"toggleCollapse()\"\n\t\t\t\t>\n\t\t\t\t\t{{ collapseText }}\n\t\t\t\t\t<i nz-icon [nzType]=\"collapseIcon\"></i>\n\t\t\t\t</a>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</form>\n", styles: [".nzx-query-container{padding:12px;background-color:#fff;border-radius:8px}.nzx-query-container [nz-form-label]{overflow:visible}.nzx-query-container .nzx-query-btn{flex-grow:2;max-width:none}.nzx-query-container .nzx-query-btn button{margin:0 4px}\n"] }]
237
261
  }], ctorParameters: function () { return [{ type: i1.NzI18nService }, { type: i2.FormBuilder }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { controls: [{
238
262
  type: Input
239
263
  }], nzxJustify: [{
@@ -244,8 +268,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
244
268
  type: Input
245
269
  }], nzxBtnSpan: [{
246
270
  type: Input
247
- }], nzxCollapse: [{
248
- type: Input
249
271
  }], initQuery: [{
250
272
  type: Input
251
273
  }], fixedParams: [{
@@ -254,8 +276,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
254
276
  type: Output
255
277
  }], resetChange: [{
256
278
  type: Output
279
+ }], queyFormEl: [{
280
+ type: ViewChild,
281
+ args: ['queyForm']
257
282
  }], controlTemplateList: [{
258
283
  type: ContentChildren,
259
284
  args: [NzxControlDirective, { descendants: true }]
260
285
  }] } });
261
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhYmxlLXF1ZXJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY29uZmlndXJhYmxlLXF1ZXJ5L2NvbmZpZ3VyYWJsZS1xdWVyeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb21wb25lbnRzL2NvbmZpZ3VyYWJsZS1xdWVyeS9jb25maWd1cmFibGUtcXVlcnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxHQUlQLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBR25FLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7QUFHMUQ7OztHQUdHO0FBU0gsTUFBTSxPQUFPLDZCQUE2QjtJQTZCeEMsWUFBWTtJQUNaLElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsS0FBVTtRQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFDckUsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7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SSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsV0FBVztZQUNYLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUM3QztJQUNILENBQUM7K0dBelFVLDZCQUE2QjttR0FBN0IsNkJBQTZCLCtYQXdEdkIsbUJBQW1CLHlHQy9GdEMsbXlDQXVDQTs7NEZEQWEsNkJBQTZCO2tCQVB6QyxTQUFTOytCQUNFLHdCQUF3QixtQkFHakIsdUJBQXVCLENBQUMsTUFBTSxZQUNyQyxzQkFBc0I7OEpBTXZCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFHSSxXQUFXO3NCQUFwQixNQUFNO2dCQUVHLFdBQVc7c0JBQXBCLE1BQU07Z0JBaUNQLG1CQUFtQjtzQkFEbEIsZUFBZTt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyQ29udGVudEluaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbnRlbnRDaGlsZHJlbixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuaW1wb3J0IHsgTnp4UXVlcnlJMThuSW50ZXJmYWNlIH0gZnJvbSAnbmctem9ycm8tYW50ZC1leHRlbnNpb24vaTE4bic7XHJcbmltcG9ydCB7IHVwZGF0ZUNvbnRyb2xTdGF0dXMgfSBmcm9tICduZy16b3Jyby1hbnRkLWV4dGVuc2lvbi91dGlsJztcclxuaW1wb3J0IHsgTnpKdXN0aWZ5IH0gZnJvbSAnbmctem9ycm8tYW50ZC9ncmlkJztcclxuaW1wb3J0IHsgTnpJMThuU2VydmljZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvaTE4bic7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBOenhDb250cm9sRGlyZWN0aXZlIH0gZnJvbSAnLi9jb250cm9sLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE56eFF1ZXJ5Q29udHJvbE9wdGlvbnMsIE56eFF1ZXJ5UGFyYW1zIH0gZnJvbSAnLi90eXBlJztcclxuXHJcbi8qKlxyXG4gKiDmn6Xor6Lnu4Tku7ZcclxuICog5pSv5oyB5qih5p2/6Ieq5a6a5LmJ77yM5Zyo5L2/55So5qih5p2/6Ieq5a6a5LmJ5pe277yM6KaB5rOo5oSPY29udHJvbFR5cGXlupTor6Xorr7nva7kuLpUZW1wbGF0ZeW5tuS4lOehruS/nWNvbnRyb2xOYW1l5LiO5oyH5Luk5LiK55qEbnp4Q29udHJvbOW6lOivpeebuOWQjFxyXG4gKi9cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbnp4LWNvbmZpZ3VyYWJsZS1xdWVyeScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbmZpZ3VyYWJsZS1xdWVyeS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29uZmlndXJhYmxlLXF1ZXJ5LmNvbXBvbmVudC5sZXNzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZXhwb3J0QXM6ICdOenhDb25maWd1cmFibGVRdWVyeScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOenhDb25maWd1cmFibGVRdWVyeUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveVxyXG57XHJcbiAgLyoqIOmFjee9rumhuSAqL1xyXG4gIEBJbnB1dCgpIGNvbnRyb2xzOiBBcnJheTxOenhRdWVyeUNvbnRyb2xPcHRpb25zPiA9IFtdO1xyXG4gIC8qKiDmn6Xor6LooajljZXmjpLliJfmlrnlvI8gKi9cclxuICBASW5wdXQoKSBuenhKdXN0aWZ5OiBOekp1c3RpZnkgPSAnc3RhcnQnO1xyXG4gIC8qKiDmn6Xor6Lpobnpl7TpmpQgKi9cclxuICBASW5wdXQoKSBuenhHdXR0ZXI6IG51bWJlciA9IDg7XHJcbiAgLyoqIOS4gOihjOWxleekuuWkmuWwkeafpeivoumhuSAqL1xyXG4gIEBJbnB1dCgpIGxpbmVOdW1iZXI6IG51bWJlciA9IDM7XHJcbiAgLyoqIOaTjeS9nOaMiemSruaJgOWNoOagheagvOaVsO+8jDI05YiZ5o2i6KGMICovXHJcbiAgQElucHV0KCkgbnp4QnRuU3BhbjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgLyoq5ZCv55So5oqY5Y+gICovXHJcbiAgQElucHV0KCkgbnp4Q29sbGFwc2UgPSB0cnVlO1xyXG4gIC8qKiDliJ3lp4vljJbml7bvvIzkuLvliqjmn6Xor6IgKi9cclxuICBASW5wdXQoKSBpbml0UXVlcnkgPSBmYWxzZTtcclxuXHJcbiAgLyoqIOe8uuecgSDlm7rlrprlj4LmlbAgKi9cclxuICBASW5wdXQoKSBmaXhlZFBhcmFtcyA9IHt9O1xyXG5cclxuICAvKiog5p+l6K+i5pe25Lya6Kem5Y+R5oqb5Ye65p+l6K+i5Y+C5pWwICovXHJcbiAgQE91dHB1dCgpIHF1ZXJ5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxOenhRdWVyeVBhcmFtcz4oKTtcclxuICAvKiog6YeN572u5pe25Lya6Kem5Y+R5oqb5Ye65p+l6K+i5Y+C5pWwICovXHJcbiAgQE91dHB1dCgpIHJlc2V0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxOenhRdWVyeVBhcmFtcz4oKTtcclxuXHJcbiAgLyoqIGZvcm0g6KGo5Y2VKi9cclxuICBxdWVyeUZvcm0hOiBGb3JtR3JvdXA7XHJcblxyXG4gIC8qKiDmn6Xor6Lnu4Tku7blh7rlj4IqL1xyXG4gIGdldCBxdWVyeVBhcmFtcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9xdWVyeVBhcmFtcztcclxuICB9XHJcblxyXG4gIHNldCBxdWVyeVBhcmFtcyh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLl9xdWVyeVBhcmFtcyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbGxhcHNlVGV4dCgpIHtcclxuICAgIHJldHVybiB0aGlzLmlzQ29sbGFwc2UgPyB0aGlzLmxvY2FsZS5leHBhbmQgOiB0aGlzLmxvY2FsZS5jb2xsYXBzZTtcclxuICB9XHJcblxyXG4gIGdldCBjb2xsYXBzZUljb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0NvbGxhcHNlID8gJ2Rvd24nIDogJ3VwJztcclxuICB9XHJcblxyXG4gIGxvY2FsZSE6IE56eFF1ZXJ5STE4bkludGVyZmFjZTtcclxuXHJcbiAgLyoq5piv5ZCm5bGV5byA54q25oCBKi9cclxuICBwcml2YXRlIGlzQ29sbGFwc2UgPSB0cnVlO1xyXG4gIHByaXZhdGUgX3F1ZXJ5UGFyYW1zOiBOenhRdWVyeVBhcmFtcyA9IHt9O1xyXG4gIHByaXZhdGUgZGVmYXVsdFZhbHVlOiBOenhRdWVyeVBhcmFtcyA9IHt9O1xyXG4gIHByaXZhdGUgY2FjaGVQYXJhbXM6IE56eFF1ZXJ5UGFyYW1zID0ge307XHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJpdmF0ZSBfbnp4QnRuU3BhbjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIEBDb250ZW50Q2hpbGRyZW4oTnp4Q29udHJvbERpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxyXG4gIGNvbnRyb2xUZW1wbGF0ZUxpc3QhOiBRdWVyeUxpc3Q8Tnp4Q29udHJvbERpcmVjdGl2ZT47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBpMThuOiBOekkxOG5TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkge1xyXG4gICAgdGhpcy5xdWVyeUZvcm0gPSB0aGlzLmZiLmdyb3VwKHt9KTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydjb250cm9scyddICYmICFjaGFuZ2VzWydjb250cm9scyddLmlzRmlyc3RDaGFuZ2UoKSkge1xyXG4gICAgICBjb25zdCBjb250cm9scyA9IGNoYW5nZXNbJ2NvbnRyb2xzJ10uY3VycmVudFZhbHVlO1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjb250cm9scykpIHtcclxuICAgICAgICB0aGlzLmdlbmVyYXRlRm9ybShjb250cm9scyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pMThuLmxvY2FsZUNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5sb2NhbGUgPSB0aGlzLmkxOG4uZ2V0TG9jYWxlRGF0YSgnUXVlcnknKTtcclxuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucXVlcnlGb3JtLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHZhbCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3F1ZXJ5UGFyYW1zID0ge1xyXG4gICAgICAgICAgLi4udmFsLFxyXG4gICAgICAgICAgLi4udGhpcy5maXhlZFBhcmFtcyxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9uenhCdG5TcGFuID0gdGhpcy5uenhCdG5TcGFuO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZW5lcmF0ZUZvcm0odGhpcy5jb250cm9scyk7XHJcblxyXG4gICAgaWYgKHRoaXMuaW5pdFF1ZXJ5KSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiog6K6+572u5p+l6K+i5YC86L+b6KGM5Zue5pi+ICovXHJcbiAgc2V0UXVlcnlQYXJhbXMoY2FjaGVQYXJhbXM6IE56eFF1ZXJ5UGFyYW1zKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhY2hlUGFyYW1zID0gY2FjaGVQYXJhbXM7XHJcbiAgICB0aGlzLnF1ZXJ5Rm9ybS5wYXRjaFZhbHVlKGNhY2hlUGFyYW1zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOagueaNrmNvbnRyb2xOYW1l6K6+572uY29uZmln5YC8XHJcbiAgICovXHJcbiAgc2V0Q29udHJvbChcclxuICAgIGNvbnRyb2xOYW1lOiBzdHJpbmcsXHJcbiAgICBjb25maWc6IFBhcnRpYWw8Tnp4UXVlcnlDb250cm9sT3B0aW9ucz5cclxuICApOiB2b2lkIHtcclxuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRDb250cm9sKGNvbnRyb2xOYW1lKTtcclxuICAgICAgaWYgKGNvbnRyb2wpIHtcclxuICAgICAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgKGNvbnRyb2wgYXMgYW55KVtrZXldID0gKGNvbmZpZyBhcyBhbnkpW2tleV07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5Yqo5oCB5re75Yqg5o6n5Lu2XHJcbiAgICovXHJcbiAgYWRkQ29udHJvbChjb25maWc6IE56eFF1ZXJ5Q29udHJvbE9wdGlvbnMpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woY29uZmlnLmNvbnRyb2xOYW1lKTtcclxuICAgIGlmICghY29udHJvbCkge1xyXG4gICAgICB0aGlzLmNvbGxhcHNlKCk7XHJcbiAgICAgIGlmIChjb25maWcuY29udHJvbE5hbWUpIHtcclxuICAgICAgICB0aGlzLnF1ZXJ5Rm9ybS5hZGRDb250cm9sKFxyXG4gICAgICAgICAgY29uZmlnLmNvbnRyb2xOYW1lLFxyXG4gICAgICAgICAgY29uZmlnLmNvbnRyb2xJbnN0YW5jZSA/PyB0aGlzLmZiLmNvbnRyb2woY29uZmlnLmRlZmF1bHQgPz8gbnVsbClcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29udHJvbHMucHVzaChjb25maWcpO1xyXG4gICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgYFRoZSBjb250cm9sIG5hbWU6ICcke2NvbmZpZy5jb250cm9sTmFtZX0nIGFscmVhZHkgZXhpc3RzIWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmoLnmja7mjqfku7blkI3liKDpmaTmjqfku7ZcclxuICAgKi9cclxuICByZW1vdmVDb250cm9sKGNvbnRyb2xOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woY29udHJvbE5hbWUpO1xyXG4gICAgaWYgKGNvbnRyb2wpIHtcclxuICAgICAgdGhpcy5jb2xsYXBzZSgpO1xyXG4gICAgICB0aGlzLnF1ZXJ5Rm9ybS5yZW1vdmVDb250cm9sKGNvbnRyb2xOYW1lKTtcclxuICAgICAgdGhpcy5jb250cm9scyA9IHRoaXMuY29udHJvbHMuZmlsdGVyKFxyXG4gICAgICAgIChjKSA9PiBjLmNvbnRyb2xOYW1lICE9PSBjb250cm9sTmFtZVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IGBUaGUgY29udHJvbCBuYW1lOiAnJHtjb250cm9sTmFtZX0nIG5vdCBmaW5kIWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmoLnmja5jb250cm9sTmFtZeiOt+WPlmNvbmZpZ+mhuVxyXG4gICAqL1xyXG4gIGdldENvbnRyb2woXHJcbiAgICBjb250cm9sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkXHJcbiAgKTogTnp4UXVlcnlDb250cm9sT3B0aW9ucyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250cm9scy5maW5kKChjb25maWcpID0+IGNvbmZpZy5jb250cm9sTmFtZSA9PT0gY29udHJvbE5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5qOA57Si57uZ5a6a5o6n5Lu25ZCN56ew5oiW6Lev5b6E55qE5a2Q5o6n5Lu244CCXHJcbiAgICog6L+Z5LiqIGdldEZvcm1Db250cm9sIOetvuWQjeaUr+aMgeWtl+espuS4suWSjCBjb25zdCDmlbDnu4TvvIguZ2V0Rm9ybUNvbnRyb2woWydmb28nLCAnYmFyJ10gYXMgY29uc3Qp77yJXHJcbiAgICovXHJcbiAgZ2V0Rm9ybUNvbnRyb2woXHJcbiAgICBwYXRoOiBzdHJpbmcgfCByZWFkb25seSAoc3RyaW5nIHwgbnVtYmVyKVtdXHJcbiAgKTogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMucXVlcnlGb3JtLmdldChwYXRoKTtcclxuICB9XHJcblxyXG4gIC8qKiDmn6Xor6IgKi9cclxuICBzZWFyY2goKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5xdWVyeUZvcm0uaW52YWxpZCkge1xyXG4gICAgICB1cGRhdGVDb250cm9sU3RhdHVzKHRoaXMucXVlcnlGb3JtKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5xdWVyeUNoYW5nZS5lbWl0KHRoaXMuX3F1ZXJ5UGFyYW1zKTtcclxuICB9XHJcblxyXG4gIC8qKiDph43nva4gKi9cclxuICByZXNldCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnF1ZXJ5Rm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgIHVwZGF0ZUNvbnRyb2xTdGF0dXModGhpcy5xdWVyeUZvcm0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnF1ZXJ5Rm9ybS5yZXNldCh0aGlzLmRlZmF1bHRWYWx1ZSk7XHJcbiAgICB0aGlzLnJlc2V0Q2hhbmdlLmVtaXQodGhpcy5fcXVlcnlQYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgLyoq5bGV5byA44CB5pS26LW3Ki9cclxuICB0b2dnbGVDb2xsYXBzZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY29udHJvbHMuZm9yRWFjaCgoY29uZmlnKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmlzQ29sbGFwc2UgJiYgY29uZmlnLmNvbGxhcHNlID09PSB0cnVlKSB7XHJcbiAgICAgICAgLy8g5bGV5byAXHJcbiAgICAgICAgY29uZmlnLmNvbGxhcHNlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uenhCdG5TcGFuID0gMjQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLmlzQ29sbGFwc2UgJiYgY29uZmlnLmNvbGxhcHNlID09PSBmYWxzZSkge1xyXG4gICAgICAgIGNvbmZpZy5jb2xsYXBzZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5uenhCdG5TcGFuID0gdGhpcy5fbnp4QnRuU3BhbjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmlzQ29sbGFwc2UgPSAhdGhpcy5pc0NvbGxhcHNlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIC8qKiDmuIXnqbrooajljZXmjqfku7YgKi9cclxuICBwcml2YXRlIGNsZWFyRm9ybUNvbnRyb2woKTogdm9pZCB7XHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5Rm9ybS5jb250cm9scykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgIHRoaXMucXVlcnlGb3JtLnJlbW92ZUNvbnRyb2woa2V5KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIOaKmOWPoCAqL1xyXG4gIHByaXZhdGUgY29sbGFwc2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzQ29sbGFwc2UgPSB0cnVlO1xyXG4gICAgdGhpcy5jb250cm9scy5mb3JFYWNoKChjb25maWcpID0+IHtcclxuICAgICAgaWYgKGNvbmZpZy5jb2xsYXBzZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICBjb25maWcuY29sbGFwc2UgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubnp4QnRuU3BhbiA9IHRoaXMuX256eEJ0blNwYW47XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIOeUn+aIkOihqOWNlSAqL1xyXG4gIHByaXZhdGUgZ2VuZXJhdGVGb3JtKGNvbnRyb2xDb25maWdzOiBBcnJheTxOenhRdWVyeUNvbnRyb2xPcHRpb25zPik6IHZvaWQge1xyXG4gICAgdGhpcy5jbGVhckZvcm1Db250cm9sKCk7XHJcblxyXG4gICAgZm9yIChjb25zdCBjb25maWcgb2YgY29udHJvbENvbmZpZ3MpIHtcclxuICAgICAgaWYgKGNvbmZpZy5jb250cm9sVHlwZSA9PT0gJ1RlbXBsYXRlJykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNvbnRyb2xUZW1wbGF0ZUxpc3QuZmluZChcclxuICAgICAgICAgIChkaXJlY3RpdmUpID0+IGRpcmVjdGl2ZS5uenhDb250cm9sID09PSBjb25maWcuY29udHJvbE5hbWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICBjb25maWcudGVtcGxhdGVSZWYgPSBpdGVtLnRlbXBsYXRlUmVmO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmNvbnRyb2xOYW1lKSB7XHJcbiAgICAgICAgdGhpcy5xdWVyeUZvcm0uYWRkQ29udHJvbChcclxuICAgICAgICAgIGNvbmZpZy5jb250cm9sTmFtZSxcclxuICAgICAgICAgIGNvbmZpZy5jb250cm9sSW5zdGFuY2UgPz8gdGhpcy5mYi5jb250cm9sKGNvbmZpZy5kZWZhdWx0ID8/IG51bGwpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5kZWZhdWx0VmFsdWUgPSB0aGlzLnF1ZXJ5Rm9ybS5nZXRSYXdWYWx1ZSgpO1xyXG4gICAgaWYgKHRoaXMuY2FjaGVQYXJhbXMpIHtcclxuICAgICAgLy8g57yT5a2Y5Zue5pi+5p+l6K+i5p2h5Lu2XHJcbiAgICAgIHRoaXMucXVlcnlGb3JtLnBhdGNoVmFsdWUodGhpcy5jYWNoZVBhcmFtcyk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxmb3JtIGNsYXNzPVwibnp4LXF1ZXJ5LWNvbnRhaW5lclwiIG56LWZvcm0gW2Zvcm1Hcm91cF09XCJxdWVyeUZvcm1cIj5cbiAgPGRpdiBuei1yb3cgW256R3V0dGVyXT1cIm56eEd1dHRlclwiIFtuekp1c3RpZnldPVwibnp4SnVzdGlmeVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbmZpZyBvZiBjb250cm9sc1wiPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIiFjb25maWcuaGlkZGVuXCJcbiAgICAgICAgbnotY29sXG4gICAgICAgIFtuelNwYW5dPVwiY29uZmlnLm56eFNwYW4gfHwgMjQgLyBsaW5lTnVtYmVyXCJcbiAgICAgICAgW2hpZGRlbl09XCJuenhDb2xsYXBzZSAmJiBjb25maWcuY29sbGFwc2VcIlxuICAgICAgPlxuICAgICAgICA8bnp4LWNvbmZpZ3VyYWJsZS1xdWVyeS1pdGVtXG4gICAgICAgICAgKm5nSWY9XCJjb25maWcuY29udHJvbE5hbWVcIlxuICAgICAgICAgIFtmb3JtXT1cInF1ZXJ5Rm9ybVwiXG4gICAgICAgICAgW2NvbnRyb2xdPVwiY29uZmlnXCJcbiAgICAgICAgPjwvbnp4LWNvbmZpZ3VyYWJsZS1xdWVyeS1pdGVtPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwibnp4LXF1ZXJ5LWJ0blwiIG56LWNvbCBbbnpTcGFuXT1cIm56eEJ0blNwYW4gfHwgMjQgLyBsaW5lTnVtYmVyXCI+XG4gICAgICA8ZGl2IG56LXJvdyBuekp1c3RpZnk9XCJlbmRcIiBuekFsaWduPVwibWlkZGxlXCI+XG4gICAgICAgIDxidXR0b24gbnotYnV0dG9uIG56VHlwZT1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNlYXJjaCgpXCI+XG4gICAgICAgICAge3sgbG9jYWxlW1wicXVlcnlcIl0gfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gbnotYnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwicmVzZXQoKVwiPlxuICAgICAgICAgIHt7IGxvY2FsZVtcInJlc2V0XCJdIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDxhXG4gICAgICAgICAgKm5nSWY9XCJuenhDb2xsYXBzZVwiXG4gICAgICAgICAgbnotYnV0dG9uXG4gICAgICAgICAgbnpUeXBlPVwibGlua1wiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNvbGxhcHNlKClcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgY29sbGFwc2VUZXh0IH19XG4gICAgICAgICAgPGkgbnotaWNvbiBbbnpUeXBlXT1cImNvbGxhcHNlSWNvblwiPjwvaT5cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9mb3JtPlxuIl19
286
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhYmxlLXF1ZXJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY29uZmlndXJhYmxlLXF1ZXJ5L2NvbmZpZ3VyYWJsZS1xdWVyeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb21wb25lbnRzL2NvbmZpZ3VyYWJsZS1xdWVyeS9jb25maWd1cmFibGUtcXVlcnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdOLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsZUFBZSxFQUVmLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUdOLFNBQVMsR0FFVCxNQUFNLGVBQWUsQ0FBQztBQUt2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUduRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7Ozs7OztBQUcxRDs7O0dBR0c7QUFTSCxNQUFNLE9BQU8sNkJBQTZCO0lBNkJ6QyxZQUFZO0lBQ1osSUFBSSxXQUFXO1FBQ2QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFdBQVcsQ0FBQyxLQUFVO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQWlCRCxZQUNTLElBQW1CLEVBQ25CLEVBQWUsRUFDZixFQUFxQjtRQUZyQixTQUFJLEdBQUosSUFBSSxDQUFlO1FBQ25C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QztJQUN0QixDQUFDOytHQXpTVyw2QkFBNkI7bUdBQTdCLDZCQUE2QixtV0FzRHhCLG1CQUFtQixpTkNoR3JDLDArQ0FtREE7OzRGRFRhLDZCQUE2QjtrQkFQekMsU0FBUzsrQkFDQyx3QkFBd0IsbUJBR2pCLHVCQUF1QixDQUFDLE1BQU0sWUFDckMsc0JBQXNCOzhKQU12QixRQUFRO3NCQUFoQixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUdJLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUcsV0FBVztzQkFBcEIsTUFBTTtnQkE0QndCLFVBQVU7c0JBQXhDLFNBQVM7dUJBQUMsVUFBVTtnQkFHckIsbUJBQW1CO3NCQURsQixlQUFlO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcblx0QWZ0ZXJDb250ZW50SW5pdCxcclxuXHRBZnRlclZpZXdJbml0LFxyXG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG5cdENoYW5nZURldGVjdG9yUmVmLFxyXG5cdENvbXBvbmVudCxcclxuXHRDb250ZW50Q2hpbGRyZW4sXHJcblx0RWxlbWVudFJlZixcclxuXHRFdmVudEVtaXR0ZXIsXHJcblx0SW5wdXQsXHJcblx0T25DaGFuZ2VzLFxyXG5cdE9uRGVzdHJveSxcclxuXHRPbkluaXQsXHJcblx0T3V0cHV0LFxyXG5cdFF1ZXJ5TGlzdCxcclxuXHRTaW1wbGVDaGFuZ2VzLFxyXG5cdFZpZXdDaGlsZCxcclxuXHRWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IE56eFF1ZXJ5STE4bkludGVyZmFjZSB9IGZyb20gJ25nLXpvcnJvLWFudGQtZXh0ZW5zaW9uL2kxOG4nO1xyXG5pbXBvcnQgeyB1cGRhdGVDb250cm9sU3RhdHVzIH0gZnJvbSAnbmctem9ycm8tYW50ZC1leHRlbnNpb24vdXRpbCc7XHJcbmltcG9ydCB7IE56SnVzdGlmeSB9IGZyb20gJ25nLXpvcnJvLWFudGQvZ3JpZCc7XHJcbmltcG9ydCB7IE56STE4blNlcnZpY2UgfSBmcm9tICduZy16b3Jyby1hbnRkL2kxOG4nO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBmcm9tRXZlbnQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBOenhDb250cm9sRGlyZWN0aXZlIH0gZnJvbSAnLi9jb250cm9sLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE56eFF1ZXJ5Q29udHJvbE9wdGlvbnMsIE56eFF1ZXJ5UGFyYW1zIH0gZnJvbSAnLi90eXBlJztcclxuXHJcbi8qKlxyXG4gKiDmn6Xor6Lnu4Tku7ZcclxuICog5pSv5oyB5qih5p2/6Ieq5a6a5LmJ77yM5Zyo5L2/55So5qih5p2/6Ieq5a6a5LmJ5pe277yM6KaB5rOo5oSPY29udHJvbFR5cGXlupTor6Xorr7nva7kuLpUZW1wbGF0ZeW5tuS4lOehruS/nWNvbnRyb2xOYW1l5LiO5oyH5Luk5LiK55qEbnp4Q29udHJvbOW6lOivpeebuOWQjFxyXG4gKi9cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnbnp4LWNvbmZpZ3VyYWJsZS1xdWVyeScsXHJcblx0dGVtcGxhdGVVcmw6ICcuL2NvbmZpZ3VyYWJsZS1xdWVyeS5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmxzOiBbJy4vY29uZmlndXJhYmxlLXF1ZXJ5LmNvbXBvbmVudC5sZXNzJ10sXHJcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcblx0ZXhwb3J0QXM6ICdOenhDb25maWd1cmFibGVRdWVyeScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOenhDb25maWd1cmFibGVRdWVyeUNvbXBvbmVudFxyXG5cdGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveVxyXG57XHJcblx0LyoqIOmFjee9rumhuSAqL1xyXG5cdEBJbnB1dCgpIGNvbnRyb2xzOiBBcnJheTxOenhRdWVyeUNvbnRyb2xPcHRpb25zPiA9IFtdO1xyXG5cclxuXHQvKiog5p+l6K+i6KGo5Y2V5o6S5YiX5pa55byPICovXHJcblx0QElucHV0KCkgbnp4SnVzdGlmeTogTnpKdXN0aWZ5ID0gJ3N0YXJ0JztcclxuXHQvKiog5p+l6K+i6aG56Ze06ZqUICovXHJcblx0QElucHV0KCkgbnp4R3V0dGVyOiBudW1iZXIgPSA4O1xyXG5cdC8qKiDkuIDooYzlsZXnpLrlpJrlsJHmn6Xor6LpobkgKi9cclxuXHRASW5wdXQoKSBsaW5lTnVtYmVyOiBudW1iZXIgPSAzO1xyXG5cdC8qKiDmk43kvZzmjInpkq7miYDljaDmoIXmoLzmlbDvvIwyNOWImeaNouihjCAqL1xyXG5cdEBJbnB1dCgpIG56eEJ0blNwYW46IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuXHQvKiog5Yid5aeL5YyW5pe277yM5Li75Yqo5p+l6K+iICovXHJcblx0QElucHV0KCkgaW5pdFF1ZXJ5ID0gZmFsc2U7XHJcblxyXG5cdC8qKiDnvLrnnIEg5Zu65a6a5Y+C5pWwICovXHJcblx0QElucHV0KCkgZml4ZWRQYXJhbXMgPSB7fTtcclxuXHJcblx0LyoqIOafpeivouaXtuS8muinpuWPkeaKm+WHuuafpeivouWPguaVsCAqL1xyXG5cdEBPdXRwdXQoKSBxdWVyeUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Tnp4UXVlcnlQYXJhbXM+KCk7XHJcblx0LyoqIOmHjee9ruaXtuS8muinpuWPkeaKm+WHuuafpeivouWPguaVsCAqL1xyXG5cdEBPdXRwdXQoKSByZXNldENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Tnp4UXVlcnlQYXJhbXM+KCk7XHJcblxyXG5cdC8qKiBmb3JtIOihqOWNlSovXHJcblx0cXVlcnlGb3JtITogRm9ybUdyb3VwO1xyXG5cclxuXHQvKiog5p+l6K+i57uE5Lu25Ye65Y+CKi9cclxuXHRnZXQgcXVlcnlQYXJhbXMoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbXM7XHJcblx0fVxyXG5cclxuXHRzZXQgcXVlcnlQYXJhbXModmFsdWU6IGFueSkge1xyXG5cdFx0dGhpcy5fcXVlcnlQYXJhbXMgPSB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGdldCBuenhDb2xsYXBzZSgpIHtcclxuXHRcdHJldHVybiB0aGlzLmNvbnRyb2xzLnNvbWUoKGkpID0+IGkuaGFzT3duUHJvcGVydHkoJ2NvbGxhcHNlJykpO1xyXG5cdH1cclxuXHJcblx0bG9jYWxlITogTnp4UXVlcnlJMThuSW50ZXJmYWNlO1xyXG5cdGNvbGxhcHNlSWNvbjogc3RyaW5nID0gJ2Rvd24nO1xyXG5cdGNvbGxhcHNlVGV4dDogc3RyaW5nID0gJyc7XHJcblxyXG5cdHByaXZhdGUgX3F1ZXJ5UGFyYW1zOiBOenhRdWVyeVBhcmFtcyA9IHt9O1xyXG5cdHByaXZhdGUgZGVmYXVsdFZhbHVlOiBOenhRdWVyeVBhcmFtcyA9IHt9O1xyXG5cdHByaXZhdGUgY2FjaGVQYXJhbXM6IE56eFF1ZXJ5UGFyYW1zID0ge307XHJcblx0cHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblx0cHJpdmF0ZSBfbnp4QnRuU3BhbjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdEBWaWV3Q2hpbGQoJ3F1ZXlGb3JtJykgcHJpdmF0ZSBxdWV5Rm9ybUVsITogRWxlbWVudFJlZjxIVE1MRm9ybUVsZW1lbnQ+O1xyXG5cclxuXHRAQ29udGVudENoaWxkcmVuKE56eENvbnRyb2xEaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcclxuXHRjb250cm9sVGVtcGxhdGVMaXN0ITogUXVlcnlMaXN0PE56eENvbnRyb2xEaXJlY3RpdmU+O1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByaXZhdGUgaTE4bjogTnpJMThuU2VydmljZSxcclxuXHRcdHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG5cdFx0cHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuXHQpIHtcclxuXHRcdHRoaXMucXVlcnlGb3JtID0gdGhpcy5mYi5ncm91cCh7fSk7XHJcblx0fVxyXG5cclxuXHRuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5xdWV5Rm9ybUVsKSB7XHJcblx0XHRcdGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pih0aGlzLnF1ZXlGb3JtRWwubmF0aXZlRWxlbWVudCwgJ2tleWRvd24nKVxyXG5cdFx0XHRcdC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuXHRcdFx0XHQuc3Vic2NyaWJlKChldmVudCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xyXG5cdFx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZWFyY2goKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdC8vIOajgOafpeaYr+WQpuWQjOaXtuaMieS4i+S6hkN0cmzplK7vvIjlnKhXaW5kb3dzL0xpbnV45LiK77yJ5ZKMU+mUrlxyXG5cdFx0XHRcdFx0aWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LmtleSA9PT0gJ3InKSB7XHJcblx0XHRcdFx0XHRcdC8vIOazqOaEj++8mmV2ZW50Lm1ldGFLZXnnlKjkuo7lhbzlrrlNYWPnmoRDb21tYW5k6ZSuXHJcblx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIOmYu+atoua1j+iniOWZqOm7mOiupOeahOS/neWtmOihjOS4ulxyXG5cdFx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5yZXNldCgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG5cdFx0aWYgKGNoYW5nZXNbJ2NvbnRyb2xzJ10gJiYgIWNoYW5nZXNbJ2NvbnRyb2xzJ10uaXNGaXJzdENoYW5nZSgpKSB7XHJcblx0XHRcdGNvbnN0IGNvbnRyb2xzID0gY2hhbmdlc1snY29udHJvbHMnXS5jdXJyZW50VmFsdWU7XHJcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KGNvbnRyb2xzKSkge1xyXG5cdFx0XHRcdHRoaXMuZ2VuZXJhdGVGb3JtKGNvbnRyb2xzKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bmdPbkluaXQoKTogdm9pZCB7XHJcblx0XHR0aGlzLmkxOG4ubG9jYWxlQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cdFx0XHR0aGlzLmxvY2FsZSA9IHRoaXMuaTE4bi5nZXRMb2NhbGVEYXRhKCdRdWVyeScpO1xyXG5cclxuXHRcdFx0dGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdHRoaXMucXVlcnlGb3JtLnZhbHVlQ2hhbmdlc1xyXG5cdFx0XHQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcblx0XHRcdC5zdWJzY3JpYmUoKHZhbCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMuX3F1ZXJ5UGFyYW1zID0ge1xyXG5cdFx0XHRcdFx0Li4udmFsLFxyXG5cdFx0XHRcdFx0Li4udGhpcy5maXhlZFBhcmFtcyxcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHR0aGlzLl9uenhCdG5TcGFuID0gdGhpcy5uenhCdG5TcGFuO1xyXG5cdH1cclxuXHJcblx0bmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5nZW5lcmF0ZUZvcm0odGhpcy5jb250cm9scyk7XHJcblxyXG5cdFx0aWYgKHRoaXMuaW5pdFF1ZXJ5KSB7XHJcblx0XHRcdHRoaXMuc2VhcmNoKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKiog6K6+572u5p+l6K+i5YC86L+b6KGM5Zue5pi+ICovXHJcblx0c2V0UXVlcnlQYXJhbXMoY2FjaGVQYXJhbXM6IE56eFF1ZXJ5UGFyYW1zKTogdm9pZCB7XHJcblx0XHR0aGlzLmNhY2hlUGFyYW1zID0gY2FjaGVQYXJhbXM7XHJcblx0XHR0aGlzLnF1ZXJ5Rm9ybS5wYXRjaFZhbHVlKGNhY2hlUGFyYW1zKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIOagueaNrmNvbnRyb2xOYW1l6K6+572uY29uZmln5YC8XHJcblx0ICovXHJcblx0c2V0Q29udHJvbChcclxuXHRcdGNvbnRyb2xOYW1lOiBzdHJpbmcsXHJcblx0XHRjb25maWc6IFBhcnRpYWw8Tnp4UXVlcnlDb250cm9sT3B0aW9ucz5cclxuXHQpOiB2b2lkIHtcclxuXHRcdFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xyXG5cdFx0XHRjb25zdCBjb250cm9sID0gdGhpcy5nZXRDb250cm9sKGNvbnRyb2xOYW1lKTtcclxuXHRcdFx0aWYgKGNvbnRyb2wpIHtcclxuXHRcdFx0XHRPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKGtleSkgPT4ge1xyXG5cdFx0XHRcdFx0KGNvbnRyb2wgYXMgYW55KVtrZXldID0gKGNvbmZpZyBhcyBhbnkpW2tleV07XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICog5Yqo5oCB5re75Yqg5o6n5Lu2XHJcblx0ICogQHBhcmFtIGNvbmZpZyDphY3nva7poblcclxuXHQgKiBAcGFyYW0gcG9zaXRpb24g5re75Yqg5L2N572uIOS4jeS8oOS4uuacq+WwvlxyXG5cdCAqL1xyXG5cdGFkZENvbnRyb2woXHJcblx0XHRjb25maWc6IE56eFF1ZXJ5Q29udHJvbE9wdGlvbnMsXHJcblx0XHRwb3NpdGlvbj86IG51bWJlciB8IHVuZGVmaW5lZFxyXG5cdCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgY29udHJvbCA9IHRoaXMuZ2V0Q29udHJvbChjb25maWcuY29udHJvbE5hbWUpO1xyXG5cdFx0aWYgKCFjb250cm9sKSB7XHJcblx0XHRcdGlmIChjb25maWcuY29udHJvbE5hbWUpIHtcclxuXHRcdFx0XHR0aGlzLnF1ZXJ5Rm9ybS5hZGRDb250cm9sKFxyXG5cdFx0XHRcdFx0Y29uZmlnLmNvbnRyb2xOYW1lLFxyXG5cdFx0XHRcdFx0Y29uZmlnLmNvbnRyb2xJbnN0YW5jZSA/PyB0aGlzLmZiLmNvbnRyb2woY29uZmlnLmRlZmF1bHQgPz8gbnVsbClcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChwb3NpdGlvbiA9PT0gdm9pZCAwIHx8IHBvc2l0aW9uID09PSBudWxsKSB7XHJcblx0XHRcdFx0dGhpcy5jb250cm9scy5wdXNoKGNvbmZpZyk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5jb250cm9scy5zcGxpY2UocG9zaXRpb24gLSAxLCAwLCBjb25maWcpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuY2FsY3VsYXRlVGV4dCgpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhyb3cgYFRoZSBjb250cm9sIG5hbWU6ICcke2NvbmZpZy5jb250cm9sTmFtZX0nIGFscmVhZHkgZXhpc3RzIWA7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiDmoLnmja7mjqfku7blkI3liKDpmaTmjqfku7ZcclxuXHQgKi9cclxuXHRyZW1vdmVDb250cm9sKGNvbnRyb2xOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woY29udHJvbE5hbWUpO1xyXG5cdFx0aWYgKGNvbnRyb2wpIHtcclxuXHRcdFx0dGhpcy5xdWVyeUZvcm0ucmVtb3ZlQ29udHJvbChjb250cm9sTmFtZSk7XHJcblx0XHRcdHRoaXMuY29udHJvbHMgPSB0aGlzLmNvbnRyb2xzLmZpbHRlcihcclxuXHRcdFx0XHQoYykgPT4gYy5jb250cm9sTmFtZSAhPT0gY29udHJvbE5hbWVcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdHRoaXMuY2FsY3VsYXRlVGV4dCgpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhyb3cgYFRoZSBjb250cm9sIG5hbWU6ICcke2NvbnRyb2xOYW1lfScgbm90IGZpbmQhYDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIOagueaNrmNvbnRyb2xOYW1l6I635Y+WY29uZmln6aG5XHJcblx0ICovXHJcblx0Z2V0Q29udHJvbChcclxuXHRcdGNvbnRyb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWRcclxuXHQpOiBOenhRdWVyeUNvbnRyb2xPcHRpb25zIHwgdW5kZWZpbmVkIHtcclxuXHRcdHJldHVybiB0aGlzLmNvbnRyb2xzLmZpbmQoKGNvbmZpZykgPT4gY29uZmlnLmNvbnRyb2xOYW1lID09PSBjb250cm9sTmFtZSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiDmo4DntKLnu5nlrprmjqfku7blkI3np7DmiJbot6/lvoTnmoTlrZDmjqfku7bjgIJcclxuXHQgKiDov5nkuKogZ2V0Rm9ybUNvbnRyb2wg562+5ZCN5pSv5oyB5a2X56ym5Liy5ZKMIGNvbnN0IOaVsOe7hO+8iC5nZXRGb3JtQ29udHJvbChbJ2ZvbycsICdiYXInXSBhcyBjb25zdCnvvIlcclxuXHQgKi9cclxuXHRnZXRGb3JtQ29udHJvbChcclxuXHRcdHBhdGg6IHN0cmluZyB8IHJlYWRvbmx5IChzdHJpbmcgfCBudW1iZXIpW11cclxuXHQpOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+IHwgbnVsbCB7XHJcblx0XHRyZXR1cm4gdGhpcy5xdWVyeUZvcm0uZ2V0KHBhdGgpO1xyXG5cdH1cclxuXHJcblx0LyoqIOafpeivoiAqL1xyXG5cdHNlYXJjaChldmVudD86IEV2ZW50KTogdm9pZCB7XHJcblx0XHRpZiAoZXZlbnQpIHtcclxuXHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5xdWVyeUZvcm0uaW52YWxpZCkge1xyXG5cdFx0XHR1cGRhdGVDb250cm9sU3RhdHVzKHRoaXMucXVlcnlGb3JtKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5xdWVyeUNoYW5nZS5lbWl0KHRoaXMuX3F1ZXJ5UGFyYW1zKTtcclxuXHR9XHJcblxyXG5cdC8qKiDph43nva4gKi9cclxuXHRyZXNldCgpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLnF1ZXJ5Rm9ybS5pbnZhbGlkKSB7XHJcblx0XHRcdHVwZGF0ZUNvbnRyb2xTdGF0dXModGhpcy5xdWVyeUZvcm0pO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLnF1ZXJ5Rm9ybS5yZXNldCh0aGlzLmRlZmF1bHRWYWx1ZSk7XHJcblx0XHR0aGlzLnJlc2V0Q2hhbmdlLmVtaXQodGhpcy5fcXVlcnlQYXJhbXMpO1xyXG5cdH1cclxuXHJcblx0Lyoq5bGV5byA44CB5pS26LW3Ki9cclxuXHR0b2dnbGVDb2xsYXBzZSgpOiB2b2lkIHtcclxuXHRcdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmNvbnRyb2xzLmxlbmd0aDsgaW5kZXgrKykge1xyXG5cdFx0XHRjb25zdCBjb25maWcgPSB0aGlzLmNvbnRyb2xzW2luZGV4XTtcclxuXHRcdFx0aWYgKGNvbmZpZy5oYXNPd25Qcm9wZXJ0eSgnY29sbGFwc2UnKSAmJiBjb25maWcuY29sbGFwc2UgPT09IHRydWUpIHtcclxuXHRcdFx0XHQoY29uZmlnLmNvbGxhcHNlIGFzIGJvb2xlYW4pID0gZmFsc2U7XHJcblx0XHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdFx0Y29uZmlnLmhhc093blByb3BlcnR5KCdjb2xsYXBzZScpICYmXHJcblx0XHRcdFx0KGNvbmZpZy5jb2xsYXBzZSBhcyBib29sZWFuKSA9PT0gZmFsc2VcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0Y29uZmlnLmNvbGxhcHNlID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0dGhpcy5jYWxjdWxhdGVUZXh0KCk7XHJcblx0fVxyXG5cclxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuXHRcdHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG5cdFx0dGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjYWxjdWxhdGVUZXh0KCkge1xyXG5cdFx0aWYgKHRoaXMuY29udHJvbHMuc29tZSgoaSkgPT4gaS5jb2xsYXBzZSA9PT0gdHJ1ZSkpIHtcclxuXHRcdFx0dGhpcy5jb2xsYXBzZUljb24gPSAnZG93bic7XHJcblx0XHRcdHRoaXMuY29sbGFwc2VUZXh0ID0gdGhpcy5sb2NhbGUuZXhwYW5kO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5jb2xsYXBzZUljb24gPSAndXAnO1xyXG5cdFx0XHR0aGlzLmNvbGxhcHNlVGV4dCA9IHRoaXMubG9jYWxlLmNvbGxhcHNlO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuXHR9XHJcblxyXG5cdC8qKiDmuIXnqbrooajljZXmjqfku7YgKi9cclxuXHRwcml2YXRlIGNsZWFyRm9ybUNvbnRyb2woKTogdm9pZCB7XHJcblx0XHRPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5Rm9ybS5jb250cm9scykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcblx0XHRcdHRoaXMucXVlcnlGb3JtLnJlbW92ZUNvbnRyb2woa2V5KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqIOeUn+aIkOihqOWNlSAqL1xyXG5cdHByaXZhdGUgZ2VuZXJhdGVGb3JtKGNvbnRyb2xDb25maWdzOiBBcnJheTxOenhRdWVyeUNvbnRyb2xPcHRpb25zPik6IHZvaWQge1xyXG5cdFx0dGhpcy5jbGVhckZvcm1Db250cm9sKCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb25maWcgb2YgY29udHJvbENvbmZpZ3MpIHtcclxuXHRcdFx0aWYgKGNvbmZpZy5jb250cm9sVHlwZSA9PT0gJ1RlbXBsYXRlJykge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW0gPSB0aGlzLmNvbnRyb2xUZW1wbGF0ZUxpc3QuZmluZChcclxuXHRcdFx0XHRcdChkaXJlY3RpdmUpID0+IGRpcmVjdGl2ZS5uenhDb250cm9sID09PSBjb25maWcuY29udHJvbE5hbWVcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGlmIChpdGVtKSB7XHJcblx0XHRcdFx0XHRjb25maWcudGVtcGxhdGVSZWYgPSBpdGVtLnRlbXBsYXRlUmVmO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoY29uZmlnLmNvbnRyb2xOYW1lKSB7XHJcblx0XHRcdFx0dGhpcy5xdWVyeUZvcm0uYWRkQ29udHJvbChcclxuXHRcdFx0XHRcdGNvbmZpZy5jb250cm9sTmFtZSxcclxuXHRcdFx0XHRcdGNvbmZpZy5jb250cm9sSW5zdGFuY2UgPz8gdGhpcy5mYi5jb250cm9sKGNvbmZpZy5kZWZhdWx0ID8/IG51bGwpXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0dGhpcy5kZWZhdWx0VmFsdWUgPSB0aGlzLnF1ZXJ5Rm9ybS5nZXRSYXdWYWx1ZSgpO1xyXG5cdFx0aWYgKHRoaXMuY2FjaGVQYXJhbXMpIHtcclxuXHRcdFx0Ly8g57yT5a2Y5Zue5pi+5p+l6K+i5p2h5Lu2XHJcblx0XHRcdHRoaXMucXVlcnlGb3JtLnBhdGNoVmFsdWUodGhpcy5jYWNoZVBhcmFtcyk7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5jYWxjdWxhdGVUZXh0KCk7XHJcblx0fVxyXG59XHJcbiIsIjxmb3JtICNxdWV5Rm9ybSBjbGFzcz1cIm56eC1xdWVyeS1jb250YWluZXJcIiBuei1mb3JtIFtmb3JtR3JvdXBdPVwicXVlcnlGb3JtXCI+XG5cdDxkaXYgbnotcm93IFtuekd1dHRlcl09XCJuenhHdXR0ZXJcIiBbbnpKdXN0aWZ5XT1cIm56eEp1c3RpZnlcIj5cblx0XHQ8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb25maWcgb2YgY29udHJvbHM7IGxldCBpID0gaW5kZXhcIj5cblx0XHRcdDxkaXZcblx0XHRcdFx0Km5nSWY9XCIhY29uZmlnLmhpZGRlblwiXG5cdFx0XHRcdG56LWNvbFxuXHRcdFx0XHRbbnpTcGFuXT1cImNvbmZpZy5uenhTcGFuIHx8IDI0IC8gbGluZU51bWJlclwiXG5cdFx0XHRcdFtoaWRkZW5dPVwiY29uZmlnLmNvbGxhcHNlXCJcblx0XHRcdFx0W256T3JkZXJdPVwiaVwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxuengtY29uZmlndXJhYmxlLXF1ZXJ5LWl0ZW1cblx0XHRcdFx0XHQqbmdJZj1cImNvbmZpZy5jb250cm9sTmFtZVwiXG5cdFx0XHRcdFx0W2Zvcm1dPVwicXVlcnlGb3JtXCJcblx0XHRcdFx0XHRbY29udHJvbF09XCJjb25maWdcIlxuXHRcdFx0XHQ+PC9uengtY29uZmlndXJhYmxlLXF1ZXJ5LWl0ZW0+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L25nLWNvbnRhaW5lcj5cblxuXHRcdDxkaXZcblx0XHRcdFtuek9yZGVyXT1cImNvbnRyb2xzLmxlbmd0aFwiXG5cdFx0XHRjbGFzcz1cIm56eC1xdWVyeS1idG5cIlxuXHRcdFx0bnotY29sXG5cdFx0XHRbbnpTcGFuXT1cIm56eEJ0blNwYW4gfHwgMjQgLyBsaW5lTnVtYmVyXCJcblx0XHQ+XG5cdFx0XHQ8ZGl2IG56LXJvdyBuekp1c3RpZnk9XCJlbmRcIiBuekFsaWduPVwibWlkZGxlXCI+XG5cdFx0XHRcdDxidXR0b25cblx0XHRcdFx0XHRuei1idXR0b25cblx0XHRcdFx0XHRuelR5cGU9XCJwcmltYXJ5XCJcblx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHR0aXRsZT1cIkVudGVyXCJcblx0XHRcdFx0XHQoY2xpY2spPVwic2VhcmNoKCRldmVudClcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3sgbG9jYWxlWydxdWVyeSddIH19XG5cdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHQ8YnV0dG9uIG56LWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGl0bGU9XCJjdHJsK3JcIiAoY2xpY2spPVwicmVzZXQoKVwiPlxuXHRcdFx0XHRcdHt7IGxvY2FsZVsncmVzZXQnXSB9fVxuXHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdFx0PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXHRcdFx0XHQ8YVxuXHRcdFx0XHRcdCpuZ0lmPVwibnp4Q29sbGFwc2VcIlxuXHRcdFx0XHRcdG56LWJ1dHRvblxuXHRcdFx0XHRcdG56VHlwZT1cImxpbmtcIlxuXHRcdFx0XHRcdChjbGljayk9XCJ0b2dnbGVDb2xsYXBzZSgpXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7IGNvbGxhcHNlVGV4dCB9fVxuXHRcdFx0XHRcdDxpIG56LWljb24gW256VHlwZV09XCJjb2xsYXBzZUljb25cIj48L2k+XG5cdFx0XHRcdDwvYT5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY29uZmlndXJhYmxlLXF1ZXJ5L3R5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOenhPcHRpb25zIH0gZnJvbSAnbmctem9ycm8tYW50ZC1leHRlbnNpb24vdHlwZXMnO1xuaW1wb3J0IHsgTnp4QWJzdHJhY3RDb250cm9sIH0gZnJvbSAnLi9jb250cm9scy9hYnN0cmFjdC5jb250cm9sJztcblxuLyoqXG4gKiDmn6Xor6Llj4LmlbBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOenhRdWVyeVBhcmFtcyB7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxudHlwZSBDb250cm9sVHlwZSA9XG4gIHwgJ2lucHV0J1xuICB8ICdzZWxlY3QnXG4gIHwgJ2RhdGVQaWNrZXInXG4gIHwgJ3JhbmdlUGlja2VyJ1xuICB8ICdUZW1wbGF0ZSdcbiAgfCBzdHJpbmc7XG5cbi8qKlxuICog6YWN572u6aG5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnp4UXVlcnlDb250cm9sT3B0aW9ucyB7XG4gIC8qKlxuICAgKiDmjqfku7blkI3lr7nlupTmn6Xor6Llj4LmlbDnmoRrZXlcbiAgICovXG4gIGNvbnRyb2xOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICog5o6n5Lu257G75Z6LXG4gICAqL1xuICBjb250cm9sVHlwZT86IENvbnRyb2xUeXBlO1xuXG4gIC8qKlxuICAgKiDmn6Xor6LmoYZsYWJlbFxuICAgKi9cbiAgbGFiZWw/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiDmn6Xor6LmoYZwbGFjZWhvbGRlclxuICAgKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiDmjqfku7bkuLpzZWxlY3Tml7bkuIvmi4npm4blkIhcbiAgICovXG4gIG1lbnVMaXN0PzogQXJyYXk8Tnp4T3B0aW9uczxhbnk+PjtcbiAgLyoqXG4gICAqIOaOp+S7tuS4unNlbGVjdOaXtuWFgeiuuOWNleeLrOa4heepulxuICAgKi9cbiAgbnp4QWxsb3dDbGVhcj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiDmjqfku7bkuLpzZWxlY3Tml7blhYHorrjliY3nq6/mkJzntKJcbiAgICovXG4gIG56eFNob3dTZWFyY2g/OiBib29sZWFuO1xuICAvKipcbiAgICog5p+l6K+i6aG55omA5Y2g5qCF5qC85pWwXG4gICAqL1xuICBuenhTcGFuPzogbnVtYmVyO1xuICAvKipcbiAgICog5o6n5Lu26buY6K6k5YC877yM5rOo5oSP6buY6K6k5YC86YeN572u5pe25LiN5Lya5riF56m6XG4gICAqL1xuICBkZWZhdWx0PzogYW55O1xuICAvKipcbiAgICog5p+l6K+i6aG5bGFiZWzmiYDljaDmoIXmoLzmlbBcbiAgICovXG4gIG56eExTcGFuPzogbnVtYmVyO1xuICAvKipcbiAgICog5p+l6K+i6aG55o6n5Lu25omA5Y2g5qCF5qC85pWwXG4gICAqL1xuICBuenhSU3Bhbj86IG51bWJlcjtcbiAgLyoqXG4gICAqIOagoemqjOmUmeivr+aPkOekulxuICAgKi9cbiAgZXJyb3JUaXA/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiDmmK/lkKbopoHmipjlj6DvvIhuenhDb2xsYXBzZeW/hemhu+S4unRydWXmiY3nlJ/mlYjvvIlcbiAgICovXG4gIGNvbGxhcHNlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOmakOiXj+aOp+S7tijkuLvopoHnlKjmnaXmkLrluKbmn6Xor6Llj4LmlbDkvYbnlYzpnaLkuI3lj6/op4EpXG4gICAqL1xuICBoaWRkZW4/OiBib29sZWFuO1xuICAvKipcbiAgICog5o6n5Lu25a6e5L6L77yM5Y+v6YCJXG4gICAqL1xuICBjb250cm9sSW5zdGFuY2U/OiBBYnN0cmFjdENvbnRyb2w7XG4gIC8qKlxuICAgKiDoh6rlrprkuYnmqKHmnb9cbiAgICovXG4gIHRlbXBsYXRlUmVmPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE56eFF1ZXJ5Q29udHJvbFR5cGUge1xuICBrZXk6IHN0cmluZztcbiAgY29tcG9uZW50OiB0eXBlb2YgTnp4QWJzdHJhY3RDb250cm9sO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE56eFF1ZXJ5Q29uZmlnIHtcbiAgY29udHJvbFR5cGVzOiBOenhRdWVyeUNvbnRyb2xUeXBlW107XG59XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY29uZmlndXJhYmxlLXF1ZXJ5L3R5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOenhPcHRpb25zIH0gZnJvbSAnbmctem9ycm8tYW50ZC1leHRlbnNpb24vdHlwZXMnO1xuaW1wb3J0IHsgTnp4QWJzdHJhY3RDb250cm9sIH0gZnJvbSAnLi9jb250cm9scy9hYnN0cmFjdC5jb250cm9sJztcblxuLyoqXG4gKiDmn6Xor6Llj4LmlbBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOenhRdWVyeVBhcmFtcyB7XG5cdFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxudHlwZSBDb250cm9sVHlwZSA9XG5cdHwgJ2lucHV0J1xuXHR8ICdzZWxlY3QnXG5cdHwgJ2RhdGVQaWNrZXInXG5cdHwgJ3JhbmdlUGlja2VyJ1xuXHR8ICdUZW1wbGF0ZSdcblx0fCBzdHJpbmc7XG5cbi8qKlxuICog6YWN572u6aG5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnp4UXVlcnlDb250cm9sT3B0aW9ucyB7XG5cdC8qKlxuXHQgKiDmjqfku7blkI3lr7nlupTmn6Xor6Llj4LmlbDnmoRrZXlcblx0ICovXG5cdGNvbnRyb2xOYW1lPzogc3RyaW5nO1xuXHQvKipcblx0ICog5o6n5Lu257G75Z6LXG5cdCAqL1xuXHRjb250cm9sVHlwZT86IENvbnRyb2xUeXBlO1xuXG5cdC8qKlxuXHQgKiDmn6Xor6LmoYZsYWJlbFxuXHQgKi9cblx0bGFiZWw/OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiDmn6Xor6LmoYZwbGFjZWhvbGRlclxuXHQgKi9cblx0cGxhY2Vob2xkZXI/OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiDmjqfku7bkuLpzZWxlY3Tml7bkuIvmi4npm4blkIhcblx0ICovXG5cdG1lbnVMaXN0PzogQXJyYXk8Tnp4T3B0aW9uczxhbnk+Pjtcblx0LyoqXG5cdCAqIOaOp+S7tuS4unNlbGVjdOaXtuWFgeiuuOWNleeLrOa4heepulxuXHQgKi9cblx0bnp4QWxsb3dDbGVhcj86IGJvb2xlYW47XG5cdC8qKlxuXHQgKiDmjqfku7bkuLpzZWxlY3Tml7blhYHorrjliY3nq6/mkJzntKJcblx0ICovXG5cdG56eFNob3dTZWFyY2g/OiBib29sZWFuO1xuXHQvKipcblx0ICog5p+l6K+i6aG55omA5Y2g5qCF5qC85pWwXG5cdCAqL1xuXHRuenhTcGFuPzogbnVtYmVyO1xuXHQvKipcblx0ICog5o6n5Lu26buY6K6k5YC877yM5rOo5oSP6buY6K6k5YC86YeN572u5pe25LiN5Lya5riF56m6XG5cdCAqL1xuXHRkZWZhdWx0PzogYW55O1xuXHQvKipcblx0ICog5p+l6K+i6aG5bGFiZWzmiYDljaDmoIXmoLzmlbBcblx0ICovXG5cdG56eExTcGFuPzogbnVtYmVyO1xuXHQvKipcblx0ICog5p+l6K+i6aG55o6n5Lu25omA5Y2g5qCF5qC85pWwXG5cdCAqL1xuXHRuenhSU3Bhbj86IG51bWJlcjtcblx0LyoqXG5cdCAqIOagoemqjOmUmeivr+aPkOekulxuXHQgKi9cblx0ZXJyb3JUaXA/OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiDmipjlj6Bcblx0ICovXG5cdGNvbGxhcHNlPzogdHJ1ZTtcblx0LyoqXG5cdCAqIOmakOiXj+aOp+S7tijkuLvopoHnlKjmnaXmkLrluKbmn6Xor6Llj4LmlbDkvYbnlYzpnaLkuI3lj6/op4EpXG5cdCAqL1xuXHRoaWRkZW4/OiBib29sZWFuO1xuXHQvKipcblx0ICog5o6n5Lu25a6e5L6L77yM5Y+v6YCJXG5cdCAqL1xuXHRjb250cm9sSW5zdGFuY2U/OiBBYnN0cmFjdENvbnRyb2w7XG5cdC8qKlxuXHQgKiDoh6rlrprkuYnmqKHmnb9cblx0ICovXG5cdHRlbXBsYXRlUmVmPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cblx0W2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE56eFF1ZXJ5Q29udHJvbFR5cGUge1xuXHRrZXk6IHN0cmluZztcblx0Y29tcG9uZW50OiB0eXBlb2YgTnp4QWJzdHJhY3RDb250cm9sO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE56eFF1ZXJ5Q29uZmlnIHtcblx0Y29udHJvbFR5cGVzOiBOenhRdWVyeUNvbnRyb2xUeXBlW107XG59XG4iXX0=
@@ -0,0 +1,22 @@
1
+ import { Directive, Input } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ export class NzxPrintContentDirective {
4
+ constructor(elementRef) {
5
+ this.elementRef = elementRef;
6
+ this.identifierStr = '';
7
+ this.customStyle = '';
8
+ }
9
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NzxPrintContentDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
10
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: NzxPrintContentDirective, selector: "[nzxPrintContent]", inputs: { identifierStr: "identifierStr", customStyle: "customStyle" }, ngImport: i0 }); }
11
+ }
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NzxPrintContentDirective, decorators: [{
13
+ type: Directive,
14
+ args: [{
15
+ selector: '[nzxPrintContent]',
16
+ }]
17
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { identifierStr: [{
18
+ type: Input
19
+ }], customStyle: [{
20
+ type: Input
21
+ }] } });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnp4LXByaW50LWNvbnRlbnQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29tcG9uZW50cy9wcmludC9uengtcHJpbnQtY29udGVudC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzdELE1BQU0sT0FBTyx3QkFBd0I7SUFHcEMsWUFBbUIsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUZoQyxrQkFBYSxHQUFzQixFQUFFLENBQUM7UUFDdEMsZ0JBQVcsR0FBRyxFQUFFLENBQUM7SUFDa0IsQ0FBQzsrR0FIakMsd0JBQXdCO21HQUF4Qix3QkFBd0I7OzRGQUF4Qix3QkFBd0I7a0JBSHBDLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLG1CQUFtQjtpQkFDN0I7aUdBRVMsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbkBEaXJlY3RpdmUoe1xuXHRzZWxlY3RvcjogJ1tuenhQcmludENvbnRlbnRdJyxcbn0pXG5leHBvcnQgY2xhc3MgTnp4UHJpbnRDb250ZW50RGlyZWN0aXZlIHtcblx0QElucHV0KCkgaWRlbnRpZmllclN0cjogc3RyaW5nIHwgc3RyaW5nW10gPSAnJztcblx0QElucHV0KCkgY3VzdG9tU3R5bGUgPSAnJztcblx0Y29uc3RydWN0b3IocHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG59XG4iXX0=