@lenne.tech/ng-base 13.29.0 → 13.30.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 (27) hide show
  1. package/base-cms/pages/base-cms/base-cms.component.d.ts +11 -4
  2. package/base-components/components/model-form/model-form.component.d.ts +11 -3
  3. package/base-components/components/model-table/model-table.component.d.ts +2 -3
  4. package/esm2020/base-cms/pages/base-cms/base-cms.component.mjs +22 -11
  5. package/esm2020/base-components/components/model-form/model-form.component.mjs +95 -56
  6. package/esm2020/base-components/components/model-table/model-table.component.mjs +9 -6
  7. package/esm2020/base-prototype/pages/profile/profile.component.mjs +1 -1
  8. package/esm2020/shared/classes/graphql-meta.class.mjs +8 -1
  9. package/esm2020/shared/interfaces/graphql-crud-type.interface.mjs +1 -1
  10. package/fesm2015/lenne.tech-ng-base-base-cms.mjs +22 -11
  11. package/fesm2015/lenne.tech-ng-base-base-cms.mjs.map +1 -1
  12. package/fesm2015/lenne.tech-ng-base-base-components.mjs +106 -59
  13. package/fesm2015/lenne.tech-ng-base-base-components.mjs.map +1 -1
  14. package/fesm2015/lenne.tech-ng-base-base-prototype.mjs +1 -1
  15. package/fesm2015/lenne.tech-ng-base-base-prototype.mjs.map +1 -1
  16. package/fesm2015/lenne.tech-ng-base-shared.mjs +7 -0
  17. package/fesm2015/lenne.tech-ng-base-shared.mjs.map +1 -1
  18. package/fesm2020/lenne.tech-ng-base-base-cms.mjs +21 -10
  19. package/fesm2020/lenne.tech-ng-base-base-cms.mjs.map +1 -1
  20. package/fesm2020/lenne.tech-ng-base-base-components.mjs +99 -57
  21. package/fesm2020/lenne.tech-ng-base-base-components.mjs.map +1 -1
  22. package/fesm2020/lenne.tech-ng-base-base-prototype.mjs +1 -1
  23. package/fesm2020/lenne.tech-ng-base-base-prototype.mjs.map +1 -1
  24. package/fesm2020/lenne.tech-ng-base-shared.mjs +7 -0
  25. package/fesm2020/lenne.tech-ng-base-shared.mjs.map +1 -1
  26. package/package.json +1 -1
  27. package/shared/interfaces/graphql-crud-type.interface.d.ts +1 -0
@@ -3,16 +3,20 @@ import { BasicUser, GraphQLRequestType, } from '@lenne.tech/ng-base/shared';
3
3
  import { FormControl, FormGroup, Validators } from '@angular/forms';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "@lenne.tech/ng-base/shared";
6
- import * as i2 from "../model-form-sub/model-form-sub.component";
7
- import * as i3 from "@angular/common";
8
- import * as i4 from "@angular/forms";
6
+ import * as i2 from "@angular/router";
7
+ import * as i3 from "../model-form-sub/model-form-sub.component";
8
+ import * as i4 from "@angular/common";
9
+ import * as i5 from "@angular/forms";
9
10
  export class ModelFormComponent {
10
- constructor(graphQLMetaService, graphQLService, formsService, authService) {
11
+ constructor(graphQLMetaService, graphQLService, formsService, authService, router, route) {
11
12
  this.graphQLMetaService = graphQLMetaService;
12
13
  this.graphQLService = graphQLService;
13
14
  this.formsService = formsService;
14
15
  this.authService = authService;
16
+ this.router = router;
17
+ this.route = route;
15
18
  this.delete = true;
19
+ this.duplicate = false;
16
20
  this.logging = false;
17
21
  this.config = {};
18
22
  this.finished = new EventEmitter();
@@ -98,7 +102,7 @@ export class ModelFormComponent {
98
102
  },
99
103
  error: (err) => {
100
104
  console.error('Error on load object', err);
101
- this.finished.emit(false);
105
+ this.finished.emit(null);
102
106
  },
103
107
  });
104
108
  }
@@ -167,7 +171,7 @@ export class ModelFormComponent {
167
171
  })
168
172
  .subscribe({
169
173
  next: (value) => {
170
- this.finished.emit(true);
174
+ this.finished.emit(null);
171
175
  },
172
176
  error: (err) => {
173
177
  console.error('Error on delete object', err);
@@ -175,6 +179,33 @@ export class ModelFormComponent {
175
179
  });
176
180
  }
177
181
  }
182
+ /**
183
+ * It sends a GraphQL mutation to the server to duplicate the object
184
+ */
185
+ async duplicateObject() {
186
+ if (confirm('Möchtest du das Objekt wirklich duplizieren?')) {
187
+ await this.submit(true);
188
+ this.graphQLService
189
+ .graphQl('duplicate' + this.capitalizeFirstLetter(this.modelName), {
190
+ arguments: { id: this.id },
191
+ fields: ['id'],
192
+ type: GraphQLRequestType.MUTATION,
193
+ })
194
+ .subscribe({
195
+ next: (value) => {
196
+ if (value?.id) {
197
+ this.router.navigate(['../' + value.id], { relativeTo: this.route });
198
+ }
199
+ else {
200
+ this.finished.emit(null);
201
+ }
202
+ },
203
+ error: (err) => {
204
+ console.error('Error on duplicate object', err);
205
+ },
206
+ });
207
+ }
208
+ }
178
209
  /**
179
210
  * It takes a string, capitalizes the first letter, and returns the modified string
180
211
  *
@@ -199,64 +230,70 @@ export class ModelFormComponent {
199
230
  * @returns The id of the newly created or updated object.
200
231
  */
201
232
  submit(secret = false) {
202
- if (!secret) {
203
- this.loading = true;
204
- }
205
- if (this.form.invalid && !secret) {
206
- this.formsService.validateAllFormFields(this.form);
207
- this.loading = false;
208
- return;
209
- }
210
- if (this.operation === 'update' && !this.id) {
211
- console.error('ID is missing for update!');
212
- this.loading = false;
213
- return;
214
- }
215
- if (this.logging) {
216
- console.log('ModelFormComponent::submit->formValue', this.form.value);
217
- }
218
- const data = Object.assign({}, this.form.value);
219
- for (const [key, value] of Object.entries(data)) {
220
- if ((this.config[key]?.roles ? !this.user.hasAllRoles(this.config[key]?.roles) : false) ||
221
- this.config[key]?.exclude) {
222
- delete data[key];
233
+ return new Promise((resolve, reject) => {
234
+ if (!secret) {
235
+ this.loading = true;
223
236
  }
224
- // Set type for graphql method
225
- if (this.fields[key]?.type === 'Float') {
226
- data[key] = Number(value);
237
+ if (this.form.invalid && !secret) {
238
+ this.formsService.validateAllFormFields(this.form);
239
+ this.loading = false;
240
+ reject();
241
+ return;
227
242
  }
228
- }
229
- if (this.logging) {
230
- console.log('ModelFormComponent::submit->valueToGraphql', data);
231
- }
232
- this.graphQLService
233
- .graphQl(this.operation + this.capitalizeFirstLetter(this.modelName), {
234
- arguments: this.operation === 'update' ? { id: this.id, input: data } : { input: data },
235
- fields: ['id'],
236
- type: GraphQLRequestType.MUTATION,
237
- })
238
- .subscribe({
239
- next: (value) => {
240
- if (!secret) {
241
- this.loading = false;
242
- this.finished.emit(true);
243
+ if (this.operation === 'update' && !this.id) {
244
+ console.error('ID is missing for update!');
245
+ this.loading = false;
246
+ reject();
247
+ return;
248
+ }
249
+ if (this.logging) {
250
+ console.log('ModelFormComponent::submit->formValue', this.form.value);
251
+ }
252
+ const data = Object.assign({}, this.form.value);
253
+ for (const [key, value] of Object.entries(data)) {
254
+ if ((this.config[key]?.roles ? !this.user.hasAllRoles(this.config[key]?.roles) : false) ||
255
+ this.config[key]?.exclude) {
256
+ delete data[key];
243
257
  }
244
- },
245
- error: (err) => {
246
- if (!secret) {
247
- console.error('Failed on ' + this.operation, err);
248
- this.loading = false;
258
+ // Set type for graphql method
259
+ if (this.fields[key]?.type === 'Float') {
260
+ data[key] = Number(value);
249
261
  }
250
- },
262
+ }
263
+ if (this.logging) {
264
+ console.log('ModelFormComponent::submit->valueToGraphql', data);
265
+ }
266
+ this.graphQLService
267
+ .graphQl(this.operation + this.capitalizeFirstLetter(this.modelName), {
268
+ arguments: this.operation === 'update' ? { id: this.id, input: data } : { input: data },
269
+ fields: ['id'],
270
+ type: GraphQLRequestType.MUTATION,
271
+ })
272
+ .subscribe({
273
+ next: (value) => {
274
+ if (!secret) {
275
+ this.loading = false;
276
+ this.finished.emit(null);
277
+ }
278
+ resolve(value);
279
+ },
280
+ error: (err) => {
281
+ if (!secret) {
282
+ console.error('Failed on ' + this.operation, err);
283
+ this.loading = false;
284
+ }
285
+ reject();
286
+ },
287
+ });
251
288
  });
252
289
  }
253
290
  }
254
- ModelFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ModelFormComponent, deps: [{ token: i1.GraphQLMetaService }, { token: i1.GraphQLService }, { token: i1.FormsService }, { token: i1.AuthService }], target: i0.ɵɵFactoryTarget.Component });
255
- ModelFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: ModelFormComponent, selector: "base-model-form", inputs: { modelName: "modelName", label: "label", id: "id", delete: "delete", logging: "logging", config: "config" }, outputs: { finished: "finished" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"w-100\" *ngIf=\"form\">\n <h2>\n {{ label ? label : capitalizeFirstLetter(modelName) }} {{ operation === 'update' ? 'bearbeiten' : 'erstellen' }}\n </h2>\n\n <form [formGroup]=\"form\">\n <base-model-form-sub\n [fields]=\"fields\"\n [config]=\"config\"\n [form]=\"form\"\n (imageChanged)=\"id ? submit(true) : null\"\n ></base-model-form-sub>\n\n <div class=\"d-flex mt-4\" [ngClass]=\"id && delete ? 'justify-content-between' : 'justify-content-end'\">\n <div *ngIf=\"id && delete\">\n <button class=\"btn btn-danger\" type=\"button\" (click)=\"deleteObject()\">L\u00F6schen</button>\n </div>\n <div>\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"submit(false)\" *ngIf=\"!loading\">\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n </form>\n</div>\n", styles: [""], components: [{ type: i2.ModelFormSubComponent, selector: "base-model-form-sub", inputs: ["fields", "form", "config"], outputs: ["imageChanged"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
291
+ ModelFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ModelFormComponent, deps: [{ token: i1.GraphQLMetaService }, { token: i1.GraphQLService }, { token: i1.FormsService }, { token: i1.AuthService }, { token: i2.Router }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
292
+ ModelFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: ModelFormComponent, selector: "base-model-form", inputs: { modelName: "modelName", label: "label", id: "id", delete: "delete", duplicate: "duplicate", logging: "logging", config: "config" }, outputs: { finished: "finished" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"w-100\" *ngIf=\"form\">\n <div class=\"d-flex flex-row justify-content-between mt-3\">\n <h2>\n {{ label ? label : capitalizeFirstLetter(modelName) }} {{ operation === 'update' ? 'bearbeiten' : 'erstellen' }}\n </h2>\n\n <div>\n <button class=\"btn btn-outline-primary me-2\" *ngIf=\"id && duplicate && !loading\" (click)=\"duplicateObject()\">\n Duplizieren\n </button>\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"submit(false)\" *ngIf=\"!loading\">\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n\n <form [formGroup]=\"form\">\n <base-model-form-sub\n [fields]=\"fields\"\n [config]=\"config\"\n [form]=\"form\"\n (imageChanged)=\"id ? submit(true) : null\"\n ></base-model-form-sub>\n\n <div class=\"d-flex mt-4\" [ngClass]=\"id && delete ? 'justify-content-between' : 'justify-content-end'\">\n <div *ngIf=\"id && delete\">\n <button class=\"btn btn-danger\" type=\"button\" (click)=\"deleteObject()\">L\u00F6schen</button>\n </div>\n <div>\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"submit(false)\" *ngIf=\"!loading\">\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n </form>\n</div>\n", styles: [""], components: [{ type: i3.ModelFormSubComponent, selector: "base-model-form-sub", inputs: ["fields", "form", "config"], outputs: ["imageChanged"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
256
293
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ModelFormComponent, decorators: [{
257
294
  type: Component,
258
- args: [{ selector: 'base-model-form', template: "<div class=\"w-100\" *ngIf=\"form\">\n <h2>\n {{ label ? label : capitalizeFirstLetter(modelName) }} {{ operation === 'update' ? 'bearbeiten' : 'erstellen' }}\n </h2>\n\n <form [formGroup]=\"form\">\n <base-model-form-sub\n [fields]=\"fields\"\n [config]=\"config\"\n [form]=\"form\"\n (imageChanged)=\"id ? submit(true) : null\"\n ></base-model-form-sub>\n\n <div class=\"d-flex mt-4\" [ngClass]=\"id && delete ? 'justify-content-between' : 'justify-content-end'\">\n <div *ngIf=\"id && delete\">\n <button class=\"btn btn-danger\" type=\"button\" (click)=\"deleteObject()\">L\u00F6schen</button>\n </div>\n <div>\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"submit(false)\" *ngIf=\"!loading\">\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n </form>\n</div>\n", styles: [""] }]
259
- }], ctorParameters: function () { return [{ type: i1.GraphQLMetaService }, { type: i1.GraphQLService }, { type: i1.FormsService }, { type: i1.AuthService }]; }, propDecorators: { modelName: [{
295
+ args: [{ selector: 'base-model-form', template: "<div class=\"w-100\" *ngIf=\"form\">\n <div class=\"d-flex flex-row justify-content-between mt-3\">\n <h2>\n {{ label ? label : capitalizeFirstLetter(modelName) }} {{ operation === 'update' ? 'bearbeiten' : 'erstellen' }}\n </h2>\n\n <div>\n <button class=\"btn btn-outline-primary me-2\" *ngIf=\"id && duplicate && !loading\" (click)=\"duplicateObject()\">\n Duplizieren\n </button>\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"submit(false)\" *ngIf=\"!loading\">\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n\n <form [formGroup]=\"form\">\n <base-model-form-sub\n [fields]=\"fields\"\n [config]=\"config\"\n [form]=\"form\"\n (imageChanged)=\"id ? submit(true) : null\"\n ></base-model-form-sub>\n\n <div class=\"d-flex mt-4\" [ngClass]=\"id && delete ? 'justify-content-between' : 'justify-content-end'\">\n <div *ngIf=\"id && delete\">\n <button class=\"btn btn-danger\" type=\"button\" (click)=\"deleteObject()\">L\u00F6schen</button>\n </div>\n <div>\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"submit(false)\" *ngIf=\"!loading\">\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}\n </button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n {{ operation === 'create' ? 'Erstellen' : 'Speichern' }}...\n </button>\n </div>\n </div>\n </form>\n</div>\n", styles: [""] }]
296
+ }], ctorParameters: function () { return [{ type: i1.GraphQLMetaService }, { type: i1.GraphQLService }, { type: i1.FormsService }, { type: i1.AuthService }, { type: i2.Router }, { type: i2.ActivatedRoute }]; }, propDecorators: { modelName: [{
260
297
  type: Input
261
298
  }], label: [{
262
299
  type: Input
@@ -264,6 +301,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
264
301
  type: Input
265
302
  }], delete: [{
266
303
  type: Input
304
+ }], duplicate: [{
305
+ type: Input
267
306
  }], logging: [{
268
307
  type: Input
269
308
  }], config: [{
@@ -271,4 +310,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
271
310
  }], finished: [{
272
311
  type: Output
273
312
  }] } });
274
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL21vZGVsLWZvcm0vbW9kZWwtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL21vZGVsLWZvcm0vbW9kZWwtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUVMLFNBQVMsRUFJVCxrQkFBa0IsR0FFbkIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQW1CLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQVFyRixNQUFNLE9BQU8sa0JBQWtCO0lBa0I3QixZQUNVLGtCQUFzQyxFQUN0QyxjQUE4QixFQUM5QixZQUEwQixFQUMxQixXQUF3QjtRQUh4Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQWxCekIsV0FBTSxHQUFHLElBQUksQ0FBQztRQUNkLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsV0FBTSxHQUFRLEVBQUUsQ0FBQztRQUVoQixhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUl4QyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBR2hCLFNBQUksR0FBYSxFQUFFLENBQUM7SUFRakIsQ0FBQztJQUVKLFFBQVE7UUFDTiwyQkFBMkI7UUFDM0IsSUFBSSxDQUFD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a0IscU9DbEIvQiwwcUNBNkJBOzJGRFhhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSxpQkFBaUI7MkxBS2xCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBdXRoU2VydmljZSxcbiAgQmFzaWNVc2VyLFxuICBGb3Jtc1NlcnZpY2UsXG4gIEdyYXBoUUxNZXRhLFxuICBHcmFwaFFMTWV0YVNlcnZpY2UsXG4gIEdyYXBoUUxSZXF1ZXN0VHlwZSxcbiAgR3JhcGhRTFNlcnZpY2UsXG59IGZyb20gJ0BsZW5uZS50ZWNoL25nLWJhc2Uvc2hhcmVkJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElHcmFwaFFMVHlwZUNvbGxlY3Rpb24gfSBmcm9tICdAbGVubmUudGVjaC9uZy1iYXNlL3NoYXJlZCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Jhc2UtbW9kZWwtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb2RlbC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW9kZWwtZm9ybS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBNb2RlbEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIG1vZGVsTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xuICBASW5wdXQoKSBpZDogc3RyaW5nIHwgbnVsbDtcbiAgQElucHV0KCkgZGVsZXRlID0gdHJ1ZTtcbiAgQElucHV0KCkgbG9nZ2luZyA9IGZhbHNlO1xuICBASW5wdXQoKSBjb25maWc6IGFueSA9IHt9O1xuXG4gIEBPdXRwdXQoKSBmaW5pc2hlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBtZXRhOiBHcmFwaFFMTWV0YTtcbiAgZm9ybTogRm9ybUdyb3VwO1xuICBsb2FkaW5nID0gZmFsc2U7XG4gIGZpZWxkczogYW55O1xuICBvcGVyYXRpb246IHN0cmluZztcbiAga2V5czogc3RyaW5nW10gPSBbXTtcbiAgdXNlcjogQmFzaWNVc2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZ3JhcGhRTE1ldGFTZXJ2aWNlOiBHcmFwaFFMTWV0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBncmFwaFFMU2VydmljZTogR3JhcGhRTFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3Jtc1NlcnZpY2U6IEZvcm1zU2VydmljZSxcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gU2V0IHVzZXIgZm9yIHJvbGVzIGNoZWNrXG4gICAgdGhpcy51c2VyID0gQmFzaWNVc2VyLm1hcCh0aGlzLmF1dGhTZXJ2aWNlLmN1cnJlbnRVc2VyKTtcblxuICAgIHRoaXMuZ3JhcGhRTE1ldGFTZXJ2aWNlLmdldE1ldGEoKS5zdWJzY3JpYmUoKG1ldGEpID0+IHtcbiAgICAgIHRoaXMubWV0YSA9IG1ldGE7XG5cbiAgICAgIGlmICh0aGlzLm1vZGVsTmFtZSkge1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snbW9kZWxOYW1lJ10gfHwgY2hhbmdlc1sndmFsdWUnXSkge1xuICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqID4gSWYgdGhlIG1vZGVsIG5hbWUgYW5kIG1ldGEgZGF0YSBhcmUgcHJlc2VudCwgc2V0IHRoZSBvcGVyYXRpb24gdG8gdXBkYXRlIG9yIGNyZWF0ZSwgZ2V0IHRoZSBmaWVsZHMgZnJvbSB0aGUgbWV0YVxuICAgKiBkYXRhLCBjcmVhdGUgdGhlIGZvcm0sIGFuZCBpZiB0aGUgdmFsdWUgaXMgcHJlc2VudCwgcGF0Y2ggdGhlIGZvcm0gd2l0aCB0aGUgdmFsdWVcbiAgICovXG4gIGluaXQoKSB7XG4gICAgaWYgKHRoaXMubW9kZWxOYW1lICYmIHRoaXMubWV0YSkge1xuICAgICAgdGhpcy5vcGVyYXRpb24gPSB0aGlzLmlkID8gJ3VwZGF0ZScgOiAnY3JlYXRlJztcbiAgICAgIHRoaXMuZmllbGRzID0gdGhpcy5tZXRhLmdldEFyZ3ModGhpcy5vcGVyYXRpb24gKyB0aGlzLmNhcGl0YWxpemVGaXJzdExldHRlcih0aGlzLm1vZGVsTmFtZSksIHtcbiAgICAgICAgdHlwZTogR3JhcGhRTFJlcXVlc3RUeXBlLk1VVEFUSU9OLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmZpZWxkcyA9IHRoaXMuZmllbGRzWydpbnB1dCddIGFzIGFueTtcbiAgICAgIHRoaXMua2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZmllbGRzKTtcblxuICAgICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50Ojppbml0LT5maWVsZHMnLCB0aGlzLmZpZWxkcyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OmluaXQtPmtleXMnLCB0aGlzLmtleXMpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZvcm0gPSB0aGlzLmNyZWF0ZUZvcm0odGhpcy5maWVsZHMpO1xuXG4gICAgICBpZiAodGhpcy5pZCkge1xuICAgICAgICB0aGlzLmdldE9iamVjdEJ5SWQodGhpcy5pZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0S2V5c0Zyb21TdWJPYmplY3Qoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5maWVsZHNba2V5XSk7XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYW4gaWQsIGFuZCB0aGVuIGNhbGxzIHRoZSBncmFwaFFMU2VydmljZSB0byBnZXQgdGhlIG9iamVjdCBmcm9tIHRoZSBkYXRhYmFzZVxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgaWQgb2YgdGhlIG9iamVjdCB0byBiZSBsb2FkZWRcbiAgICovXG4gIGdldE9iamVjdEJ5SWQoaWQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OmdldE9iamVjdEJ5SWQtPmlkJywgaWQpO1xuICAgICAgY29uc29sZS5sb2coJ01vZGVsRm9ybUNvbXBvbmVudDo6Z2V0T2JqZWN0QnlJZC0+cmVxdWVzdEZpZWxkcycsIHRoaXMuY3JlYXRlUmVxdWVzdE9iamVjdCh0aGlzLmZpZWxkcykpO1xuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhRTFNlcnZpY2VcbiAgICAgIC5ncmFwaFFsKCdnZXQnICsgdGhpcy5jYXBpdGFsaXplRmlyc3RMZXR0ZXIodGhpcy5tb2RlbE5hbWUpLCB7XG4gICAgICAgIGFyZ3VtZW50czogeyBpZCB9LFxuICAgICAgICBmaWVsZHM6IHRoaXMuY3JlYXRlUmVxdWVzdE9iamVjdCh0aGlzLmZpZWxkcyksXG4gICAgICAgIHR5cGU6IEdyYXBoUUxSZXF1ZXN0VHlwZS5RVUVSWSxcbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ01vZGVsRm9ybUNvbXBvbmVudDo6Z2V0LT52YWx1ZScsIHJlc3BvbnNlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IC4uLnt9LCAuLi5yZXNwb25zZSB9KTtcblxuICAgICAgICAgIC8vIFByb2Nlc3MgcGF0Y2hGaWVsZHMgZm9yIHJlZmVyZW5jZSBpbnB1dFxuICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY29uZmlnKSkge1xuICAgICAgICAgICAgLy8gSWYgaXQgbm90IGFuIGFycmF5XG4gICAgICAgICAgICBpZiAodGhpcy5jb25maWdba2V5XT8ucGF0Y2hGaWVsZCAmJiAhdGhpcy5maWVsZHNba2V5XT8uaXNMaXN0KSB7XG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoa2V5KS5wYXRjaFZhbHVlKHJlc3BvbnNlW3RoaXMuY29uZmlnW2tleV0/LnBhdGNoRmllbGRdPy5pZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIHZhbHVlIGlzIGFuIGFycmF5XG4gICAgICAgICAgICBpZiAodGhpcy5jb25maWdba2V5XT8ucGF0Y2hGaWVsZCAmJiB0aGlzLmZpZWxkc1trZXldPy5pc0xpc3QpIHtcbiAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldChrZXkpLnBhdGNoVmFsdWUocmVzcG9uc2VbdGhpcy5jb25maWdba2V5XT8ucGF0Y2hGaWVsZF0/Lm1hcCgoZSkgPT4gZT8uaWQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5sb2dnaW5nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50OjpnZXRPYmplY3RCeUlkLT5wYXRjaGVkRm9ybScsIHRoaXMuZm9ybSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIG9uIGxvYWQgb2JqZWN0JywgZXJyKTtcbiAgICAgICAgICB0aGlzLmZpbmlzaGVkLmVtaXQoZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYSBHcmFwaFFMIHR5cGUgY29sbGVjdGlvbiBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBzdHJpbmdzIGFuZCBvYmplY3RzXG4gICAqXG4gICAqIEBwYXJhbSBmaWVsZHMgLSBJR3JhcGhRTFR5cGVDb2xsZWN0aW9uIC0gVGhpcyBpcyB0aGUgb2JqZWN0IHRoYXQgaXMgcmV0dXJuZWQgZnJvbSB0aGVcbiAgICogaW50cm9zcGVjdGlvbiBxdWVyeS5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc3RyaW5ncyBhbmQgb2JqZWN0cy5cbiAgICovXG4gIGNyZWF0ZVJlcXVlc3RPYmplY3QoZmllbGRzOiBJR3JhcGhRTFR5cGVDb2xsZWN0aW9uKSB7XG4gICAgY29uc3QgcmVxdWVzdEZpZWxkczogYW55ID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmaWVsZHMpKSB7XG4gICAgICBpZiAoZmllbGRzW2tleV0/LnR5cGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZ1trZXldPy5wYXRjaEZpZWxkKSB7XG4gICAgICAgICAgcmVxdWVzdEZpZWxkcy5wdXNoKGtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxdWVzdEZpZWxkcy5wdXNoKHsgW3RoaXMuY29uZmlnW2tleV0/LnBhdGNoRmllbGRdOiBbJ2lkJ10gfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHN1YmtleXMgPSB0aGlzLmNyZWF0ZVJlcXVlc3RPYmplY3QoZmllbGRzW2tleV0gYXMgSUdyYXBoUUxUeXBlQ29sbGVjdGlvbik7XG4gICAgICAgIGNvbnN0IHJlc3VsdE9iamVjdCA9IHt9O1xuICAgICAgICByZXN1bHRPYmplY3Rba2V5XSA9IHN1YmtleXM7XG4gICAgICAgIHJlcXVlc3RGaWVsZHMucHVzaChyZXN1bHRPYmplY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OmNyZWF0ZVJlcXVlc3RPYmplY3QtPnJlcXVlc3RGaWVsZHMnLCByZXF1ZXN0RmllbGRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVxdWVzdEZpZWxkcztcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhIGNvbGxlY3Rpb24gb2YgR3JhcGhRTCB0eXBlcyBhbmQgY3JlYXRlcyBhIGZvcm0gZ3JvdXAgd2l0aCBhIGZvcm0gY29udHJvbCBmb3IgZWFjaCB0eXBlXG4gICAqXG4gICAqIEBwYXJhbSBmaWVsZHMgLSBJR3JhcGhRTFR5cGVDb2xsZWN0aW9uXG4gICAqL1xuICBjcmVhdGVGb3JtKGZpZWxkczogSUdyYXBoUUxUeXBlQ29sbGVjdGlvbikge1xuICAgIGNvbnN0IGdyb3VwOiBhbnkgPSB7fTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZpZWxkcykpIHtcbiAgICAgIGlmICh2YWx1ZT8udHlwZSkge1xuICAgICAgICBncm91cFtrZXldID0gbmV3IEZvcm1Db250cm9sKFxuICAgICAgICAgIHZhbHVlPy50eXBlID09PSAnRmxvYXQnID8gbnVsbCA6ICcnLFxuICAgICAgICAgICh0aGlzLmNvbmZpZ1trZXldICYmIHRoaXMuY29uZmlnW2tleV0/LnJlcXVpcmVkICE9PSB1bmRlZmluZWQgPyB0aGlzLmNvbmZpZ1trZXldPy5yZXF1aXJlZCA6IHZhbHVlLmlzUmVxdWlyZWQpXG4gICAgICAgICAgICA/IFZhbGlkYXRvcnMucmVxdWlyZWRcbiAgICAgICAgICAgIDogW11cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdyb3VwW2tleV0gPSB0aGlzLmNyZWF0ZUZvcm0oZmllbGRzW2tleV0gYXMgSUdyYXBoUUxUeXBlQ29sbGVjdGlvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgY29uc29sZS5sb2coJ01vZGVsRm9ybUNvbXBvbmVudDo6Y3JlYXRlRm9ybS0+Z3JvdXAnLCBncm91cCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBGb3JtR3JvdXAoZ3JvdXApO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IGNhbGxzIHRoZSBncmFwaFFMU2VydmljZSB0byBkZWxldGUgdGhlIG9iamVjdCB3aXRoIHRoZSBpZCBvZiB0aGUgb2JqZWN0IHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIGVkaXRlZFxuICAgKi9cbiAgZGVsZXRlT2JqZWN0KCkge1xuICAgIGlmIChjb25maXJtKCdNw7ZjaHRlc3QgZHUgZGFzIE9iamVrdCB3aXJrbGljaCBsw7ZzY2hlbj8nKSkge1xuICAgICAgdGhpcy5ncmFwaFFMU2VydmljZVxuICAgICAgICAuZ3JhcGhRbCgnZGVsZXRlJyArIHRoaXMuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHRoaXMubW9kZWxOYW1lKSwge1xuICAgICAgICAgIGFyZ3VtZW50czogeyBpZDogdGhpcy5pZCB9LFxuICAgICAgICAgIGZpZWxkczogWydpZCddLFxuICAgICAgICAgIHR5cGU6IEdyYXBoUUxSZXF1ZXN0VHlwZS5NVVRBVElPTixcbiAgICAgICAgfSlcbiAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaGVkLmVtaXQodHJ1ZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igb24gZGVsZXRlIG9iamVjdCcsIGVycik7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIGEgc3RyaW5nLCBjYXBpdGFsaXplcyB0aGUgZmlyc3QgbGV0dGVyLCBhbmQgcmV0dXJucyB0aGUgbW9kaWZpZWQgc3RyaW5nXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBzdHJpbmcgdG8gY2FwaXRhbGl6ZS5cbiAgICogQHJldHVybnMgVGhlIGZpcnN0IGxldHRlciBvZiB0aGUgc3RyaW5nIGlzIGJlaW5nIGNhcGl0YWxpemVkIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIGlzIGJlaW5nIHJldHVybmVkLlxuICAgKi9cbiAgY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zbGljZSgxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhbiBBYnN0cmFjdENvbnRyb2wgYW5kIHJldHVybnMgYSBGb3JtQ29udHJvbFxuICAgKlxuICAgKiBAcGFyYW0gY29udHJvbCAtIEFic3RyYWN0Q29udHJvbCB8IG51bGwgfCB1bmRlZmluZWRcbiAgICogQHJldHVybnMgQSBGb3JtQ29udHJvbFxuICAgKi9cbiAgdHJhbnNmb3JtVG9Db250cm9sKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY29udHJvbCBhcyBGb3JtQ29udHJvbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyB0aGUgZm9ybSwgdmFsaWRhdGVzIGl0LCBhbmQgdGhlbiBzZW5kcyBpdCB0byB0aGUgR3JhcGhRTCBzZXJ2ZXJcbiAgICpcbiAgICogQHJldHVybnMgVGhlIGlkIG9mIHRoZSBuZXdseSBjcmVhdGVkIG9yIHVwZGF0ZWQgb2JqZWN0LlxuICAgKi9cbiAgc3VibWl0KHNlY3JldCA9IGZhbHNlKSB7XG4gICAgaWYgKCFzZWNyZXQpIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkICYmICFzZWNyZXQpIHtcbiAgICAgIHRoaXMuZm9ybXNTZXJ2aWNlLnZhbGlkYXRlQWxsRm9ybUZpZWxkcyh0aGlzLmZvcm0gYXMgYW55KTtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScgJiYgIXRoaXMuaWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0lEIGlzIG1pc3NpbmcgZm9yIHVwZGF0ZSEnKTtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OnN1Ym1pdC0+Zm9ybVZhbHVlJywgdGhpcy5mb3JtLnZhbHVlKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5mb3JtLnZhbHVlKTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xuICAgICAgaWYgKFxuICAgICAgICAodGhpcy5jb25maWdba2V5XT8ucm9sZXMgPyAhdGhpcy51c2VyLmhhc0FsbFJvbGVzKHRoaXMuY29uZmlnW2tleV0/LnJvbGVzKSA6IGZhbHNlKSB8fFxuICAgICAgICB0aGlzLmNvbmZpZ1trZXldPy5leGNsdWRlXG4gICAgICApIHtcbiAgICAgICAgZGVsZXRlIGRhdGFba2V5XTtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHR5cGUgZm9yIGdyYXBocWwgbWV0aG9kXG4gICAgICBpZiAodGhpcy5maWVsZHNba2V5XT8udHlwZSA9PT0gJ0Zsb2F0Jykge1xuICAgICAgICBkYXRhW2tleV0gPSBOdW1iZXIodmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OnN1Ym1pdC0+dmFsdWVUb0dyYXBocWwnLCBkYXRhKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoUUxTZXJ2aWNlXG4gICAgICAuZ3JhcGhRbCh0aGlzLm9wZXJhdGlvbiArIHRoaXMuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHRoaXMubW9kZWxOYW1lKSwge1xuICAgICAgICBhcmd1bWVudHM6IHRoaXMub3BlcmF0aW9uID09PSAndXBkYXRlJyA/IHsgaWQ6IHRoaXMuaWQsIGlucHV0OiBkYXRhIH0gOiB7IGlucHV0OiBkYXRhIH0sXG4gICAgICAgIGZpZWxkczogWydpZCddLFxuICAgICAgICB0eXBlOiBHcmFwaFFMUmVxdWVzdFR5cGUuTVVUQVRJT04sXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICghc2VjcmV0KSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoZWQuZW1pdCh0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgaWYgKCFzZWNyZXQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCBvbiAnICsgdGhpcy5vcGVyYXRpb24sIGVycik7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInctMTAwXCIgKm5nSWY9XCJmb3JtXCI+XG4gIDxoMj5cbiAgICB7eyBsYWJlbCA/IGxhYmVsIDogY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKG1vZGVsTmFtZSkgfX0ge3sgb3BlcmF0aW9uID09PSAndXBkYXRlJyA/ICdiZWFyYmVpdGVuJyA6ICdlcnN0ZWxsZW4nIH19XG4gIDwvaDI+XG5cbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgPGJhc2UtbW9kZWwtZm9ybS1zdWJcbiAgICAgIFtmaWVsZHNdPVwiZmllbGRzXCJcbiAgICAgIFtjb25maWddPVwiY29uZmlnXCJcbiAgICAgIFtmb3JtXT1cImZvcm1cIlxuICAgICAgKGltYWdlQ2hhbmdlZCk9XCJpZCA/IHN1Ym1pdCh0cnVlKSA6IG51bGxcIlxuICAgID48L2Jhc2UtbW9kZWwtZm9ybS1zdWI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG10LTRcIiBbbmdDbGFzc109XCJpZCAmJiBkZWxldGUgPyAnanVzdGlmeS1jb250ZW50LWJldHdlZW4nIDogJ2p1c3RpZnktY29udGVudC1lbmQnXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaWQgJiYgZGVsZXRlXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZGVsZXRlT2JqZWN0KClcIj5Mw7ZzY2hlbjwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzdWJtaXQoZmFsc2UpXCIgKm5nSWY9XCIhbG9hZGluZ1wiPlxuICAgICAgICAgIHt7IG9wZXJhdGlvbiA9PT0gJ2NyZWF0ZScgPyAnRXJzdGVsbGVuJyA6ICdTcGVpY2hlcm4nIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIGRpc2FibGVkICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc21cIiByb2xlPVwic3RhdHVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgICAgICAgIHt7IG9wZXJhdGlvbiA9PT0gJ2NyZWF0ZScgPyAnRXJzdGVsbGVuJyA6ICdTcGVpY2hlcm4nIH19Li4uXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbjwvZGl2PlxuIl19
313
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL21vZGVsLWZvcm0vbW9kZWwtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL21vZGVsLWZvcm0vbW9kZWwtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUVMLFNBQVMsRUFJVCxrQkFBa0IsR0FFbkIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQW1CLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUFTckYsTUFBTSxPQUFPLGtCQUFrQjtJQW1CN0IsWUFDVSxrQkFBc0MsRUFDdEMsY0FBOEIsRUFDOUIsWUFBMEIsRUFDMUIsV0FBd0IsRUFDeEIsTUFBYyxFQUNkLEtBQXFCO1FBTHJCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQXJCdEIsV0FBTSxHQUFHLElBQUksQ0FBQztRQUNkLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixXQUFNLEdBQVEsRUFBRSxDQUFDO1FBRWhCLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFD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QUM7d0JBQ2xELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO3FCQUN0QjtvQkFFRCxNQUFNLEVBQUUsQ0FBQztnQkFDWCxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzsrR0F4VVUsa0JBQWtCO21HQUFsQixrQkFBa0IsNlBDbkIvQixnNERBNENBOzJGRHpCYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsaUJBQWlCOzZPQUtsQixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBdXRoU2VydmljZSxcbiAgQmFzaWNVc2VyLFxuICBGb3Jtc1NlcnZpY2UsXG4gIEdyYXBoUUxNZXRhLFxuICBHcmFwaFFMTWV0YVNlcnZpY2UsXG4gIEdyYXBoUUxSZXF1ZXN0VHlwZSxcbiAgR3JhcGhRTFNlcnZpY2UsXG59IGZyb20gJ0BsZW5uZS50ZWNoL25nLWJhc2Uvc2hhcmVkJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElHcmFwaFFMVHlwZUNvbGxlY3Rpb24gfSBmcm9tICdAbGVubmUudGVjaC9uZy1iYXNlL3NoYXJlZCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYmFzZS1tb2RlbC1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21vZGVsLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tb2RlbC1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE1vZGVsRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgbW9kZWxOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlkOiBzdHJpbmcgfCBudWxsO1xuICBASW5wdXQoKSBkZWxldGUgPSB0cnVlO1xuICBASW5wdXQoKSBkdXBsaWNhdGUgPSBmYWxzZTtcbiAgQElucHV0KCkgbG9nZ2luZyA9IGZhbHNlO1xuICBASW5wdXQoKSBjb25maWc6IGFueSA9IHt9O1xuXG4gIEBPdXRwdXQoKSBmaW5pc2hlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBtZXRhOiBHcmFwaFFMTWV0YTtcbiAgZm9ybTogRm9ybUdyb3VwO1xuICBsb2FkaW5nID0gZmFsc2U7XG4gIGZpZWxkczogYW55O1xuICBvcGVyYXRpb246IHN0cmluZztcbiAga2V5czogc3RyaW5nW10gPSBbXTtcbiAgdXNlcjogQmFzaWNVc2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZ3JhcGhRTE1ldGFTZXJ2aWNlOiBHcmFwaFFMTWV0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBncmFwaFFMU2VydmljZTogR3JhcGhRTFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3Jtc1NlcnZpY2U6IEZvcm1zU2VydmljZSxcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBTZXQgdXNlciBmb3Igcm9sZXMgY2hlY2tcbiAgICB0aGlzLnVzZXIgPSBCYXNpY1VzZXIubWFwKHRoaXMuYXV0aFNlcnZpY2UuY3VycmVudFVzZXIpO1xuXG4gICAgdGhpcy5ncmFwaFFMTWV0YVNlcnZpY2UuZ2V0TWV0YSgpLnN1YnNjcmliZSgobWV0YSkgPT4ge1xuICAgICAgdGhpcy5tZXRhID0gbWV0YTtcblxuICAgICAgaWYgKHRoaXMubW9kZWxOYW1lKSB7XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydtb2RlbE5hbWUnXSB8fCBjaGFuZ2VzWyd2YWx1ZSddKSB7XG4gICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogPiBJZiB0aGUgbW9kZWwgbmFtZSBhbmQgbWV0YSBkYXRhIGFyZSBwcmVzZW50LCBzZXQgdGhlIG9wZXJhdGlvbiB0byB1cGRhdGUgb3IgY3JlYXRlLCBnZXQgdGhlIGZpZWxkcyBmcm9tIHRoZSBtZXRhXG4gICAqIGRhdGEsIGNyZWF0ZSB0aGUgZm9ybSwgYW5kIGlmIHRoZSB2YWx1ZSBpcyBwcmVzZW50LCBwYXRjaCB0aGUgZm9ybSB3aXRoIHRoZSB2YWx1ZVxuICAgKi9cbiAgaW5pdCgpIHtcbiAgICBpZiAodGhpcy5tb2RlbE5hbWUgJiYgdGhpcy5tZXRhKSB7XG4gICAgICB0aGlzLm9wZXJhdGlvbiA9IHRoaXMuaWQgPyAndXBkYXRlJyA6ICdjcmVhdGUnO1xuICAgICAgdGhpcy5maWVsZHMgPSB0aGlzLm1ldGEuZ2V0QXJncyh0aGlzLm9wZXJhdGlvbiArIHRoaXMuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHRoaXMubW9kZWxOYW1lKSwge1xuICAgICAgICB0eXBlOiBHcmFwaFFMUmVxdWVzdFR5cGUuTVVUQVRJT04sXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZmllbGRzID0gdGhpcy5maWVsZHNbJ2lucHV0J10gYXMgYW55O1xuICAgICAgdGhpcy5rZXlzID0gT2JqZWN0LmtleXModGhpcy5maWVsZHMpO1xuXG4gICAgICBpZiAodGhpcy5sb2dnaW5nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OmluaXQtPmZpZWxkcycsIHRoaXMuZmllbGRzKTtcbiAgICAgICAgY29uc29sZS5sb2coJ01vZGVsRm9ybUNvbXBvbmVudDo6aW5pdC0+a2V5cycsIHRoaXMua2V5cyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZm9ybSA9IHRoaXMuY3JlYXRlRm9ybSh0aGlzLmZpZWxkcyk7XG5cbiAgICAgIGlmICh0aGlzLmlkKSB7XG4gICAgICAgIHRoaXMuZ2V0T2JqZWN0QnlJZCh0aGlzLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRLZXlzRnJvbVN1Yk9iamVjdChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmZpZWxkc1trZXldKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhbiBpZCwgYW5kIHRoZW4gY2FsbHMgdGhlIGdyYXBoUUxTZXJ2aWNlIHRvIGdldCB0aGUgb2JqZWN0IGZyb20gdGhlIGRhdGFiYXNlXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgb2JqZWN0IHRvIGJlIGxvYWRlZFxuICAgKi9cbiAgZ2V0T2JqZWN0QnlJZChpZDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgY29uc29sZS5sb2coJ01vZGVsRm9ybUNvbXBvbmVudDo6Z2V0T2JqZWN0QnlJZC0+aWQnLCBpZCk7XG4gICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50OjpnZXRPYmplY3RCeUlkLT5yZXF1ZXN0RmllbGRzJywgdGhpcy5jcmVhdGVSZXF1ZXN0T2JqZWN0KHRoaXMuZmllbGRzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaFFMU2VydmljZVxuICAgICAgLmdyYXBoUWwoJ2dldCcgKyB0aGlzLmNhcGl0YWxpemVGaXJzdExldHRlcih0aGlzLm1vZGVsTmFtZSksIHtcbiAgICAgICAgYXJndW1lbnRzOiB7IGlkIH0sXG4gICAgICAgIGZpZWxkczogdGhpcy5jcmVhdGVSZXF1ZXN0T2JqZWN0KHRoaXMuZmllbGRzKSxcbiAgICAgICAgdHlwZTogR3JhcGhRTFJlcXVlc3RUeXBlLlFVRVJZLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5sb2dnaW5nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50OjpnZXQtPnZhbHVlJywgcmVzcG9uc2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgLi4ue30sIC4uLnJlc3BvbnNlIH0pO1xuXG4gICAgICAgICAgLy8gUHJvY2VzcyBwYXRjaEZpZWxkcyBmb3IgcmVmZXJlbmNlIGlucHV0XG4gICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5jb25maWcpKSB7XG4gICAgICAgICAgICAvLyBJZiBpdCBub3QgYW4gYXJyYXlcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZ1trZXldPy5wYXRjaEZpZWxkICYmICF0aGlzLmZpZWxkc1trZXldPy5pc0xpc3QpIHtcbiAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldChrZXkpLnBhdGNoVmFsdWUocmVzcG9uc2VbdGhpcy5jb25maWdba2V5XT8ucGF0Y2hGaWVsZF0/LmlkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgdmFsdWUgaXMgYW4gYXJyYXlcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZ1trZXldPy5wYXRjaEZpZWxkICYmIHRoaXMuZmllbGRzW2tleV0/LmlzTGlzdCkge1xuICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KGtleSkucGF0Y2hWYWx1ZShyZXNwb25zZVt0aGlzLmNvbmZpZ1trZXldPy5wYXRjaEZpZWxkXT8ubWFwKChlKSA9PiBlPy5pZCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OmdldE9iamVjdEJ5SWQtPnBhdGNoZWRGb3JtJywgdGhpcy5mb3JtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igb24gbG9hZCBvYmplY3QnLCBlcnIpO1xuICAgICAgICAgIHRoaXMuZmluaXNoZWQuZW1pdChudWxsKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIGEgR3JhcGhRTCB0eXBlIGNvbGxlY3Rpb24gYW5kIHJldHVybnMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBhbmQgb2JqZWN0c1xuICAgKlxuICAgKiBAcGFyYW0gZmllbGRzIC0gSUdyYXBoUUxUeXBlQ29sbGVjdGlvbiAtIFRoaXMgaXMgdGhlIG9iamVjdCB0aGF0IGlzIHJldHVybmVkIGZyb20gdGhlXG4gICAqIGludHJvc3BlY3Rpb24gcXVlcnkuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHN0cmluZ3MgYW5kIG9iamVjdHMuXG4gICAqL1xuICBjcmVhdGVSZXF1ZXN0T2JqZWN0KGZpZWxkczogSUdyYXBoUUxUeXBlQ29sbGVjdGlvbikge1xuICAgIGNvbnN0IHJlcXVlc3RGaWVsZHM6IGFueSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZmllbGRzKSkge1xuICAgICAgaWYgKGZpZWxkc1trZXldPy50eXBlKSB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWdba2V5XT8ucGF0Y2hGaWVsZCkge1xuICAgICAgICAgIHJlcXVlc3RGaWVsZHMucHVzaChrZXkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcXVlc3RGaWVsZHMucHVzaCh7IFt0aGlzLmNvbmZpZ1trZXldPy5wYXRjaEZpZWxkXTogWydpZCddIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdWJrZXlzID0gdGhpcy5jcmVhdGVSZXF1ZXN0T2JqZWN0KGZpZWxkc1trZXldIGFzIElHcmFwaFFMVHlwZUNvbGxlY3Rpb24pO1xuICAgICAgICBjb25zdCByZXN1bHRPYmplY3QgPSB7fTtcbiAgICAgICAgcmVzdWx0T2JqZWN0W2tleV0gPSBzdWJrZXlzO1xuICAgICAgICByZXF1ZXN0RmllbGRzLnB1c2gocmVzdWx0T2JqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb2dnaW5nKSB7XG4gICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50OjpjcmVhdGVSZXF1ZXN0T2JqZWN0LT5yZXF1ZXN0RmllbGRzJywgcmVxdWVzdEZpZWxkcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3RGaWVsZHM7XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYSBjb2xsZWN0aW9uIG9mIEdyYXBoUUwgdHlwZXMgYW5kIGNyZWF0ZXMgYSBmb3JtIGdyb3VwIHdpdGggYSBmb3JtIGNvbnRyb2wgZm9yIGVhY2ggdHlwZVxuICAgKlxuICAgKiBAcGFyYW0gZmllbGRzIC0gSUdyYXBoUUxUeXBlQ29sbGVjdGlvblxuICAgKi9cbiAgY3JlYXRlRm9ybShmaWVsZHM6IElHcmFwaFFMVHlwZUNvbGxlY3Rpb24pIHtcbiAgICBjb25zdCBncm91cDogYW55ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmaWVsZHMpKSB7XG4gICAgICBpZiAodmFsdWU/LnR5cGUpIHtcbiAgICAgICAgZ3JvdXBba2V5XSA9IG5ldyBGb3JtQ29udHJvbChcbiAgICAgICAgICB2YWx1ZT8udHlwZSA9PT0gJ0Zsb2F0JyA/IG51bGwgOiAnJyxcbiAgICAgICAgICAodGhpcy5jb25maWdba2V5XSAmJiB0aGlzLmNvbmZpZ1trZXldPy5yZXF1aXJlZCAhPT0gdW5kZWZpbmVkID8gdGhpcy5jb25maWdba2V5XT8ucmVxdWlyZWQgOiB2YWx1ZS5pc1JlcXVpcmVkKVxuICAgICAgICAgICAgPyBWYWxpZGF0b3JzLnJlcXVpcmVkXG4gICAgICAgICAgICA6IFtdXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBncm91cFtrZXldID0gdGhpcy5jcmVhdGVGb3JtKGZpZWxkc1trZXldIGFzIElHcmFwaFFMVHlwZUNvbGxlY3Rpb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OmNyZWF0ZUZvcm0tPmdyb3VwJywgZ3JvdXApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRm9ybUdyb3VwKGdyb3VwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCBjYWxscyB0aGUgZ3JhcGhRTFNlcnZpY2UgdG8gZGVsZXRlIHRoZSBvYmplY3Qgd2l0aCB0aGUgaWQgb2YgdGhlIG9iamVjdCB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBlZGl0ZWRcbiAgICovXG4gIGRlbGV0ZU9iamVjdCgpIHtcbiAgICBpZiAoY29uZmlybSgnTcO2Y2h0ZXN0IGR1IGRhcyBPYmpla3Qgd2lya2xpY2ggbMO2c2NoZW4/JykpIHtcbiAgICAgIHRoaXMuZ3JhcGhRTFNlcnZpY2VcbiAgICAgICAgLmdyYXBoUWwoJ2RlbGV0ZScgKyB0aGlzLmNhcGl0YWxpemVGaXJzdExldHRlcih0aGlzLm1vZGVsTmFtZSksIHtcbiAgICAgICAgICBhcmd1bWVudHM6IHsgaWQ6IHRoaXMuaWQgfSxcbiAgICAgICAgICBmaWVsZHM6IFsnaWQnXSxcbiAgICAgICAgICB0eXBlOiBHcmFwaFFMUmVxdWVzdFR5cGUuTVVUQVRJT04sXG4gICAgICAgIH0pXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5maW5pc2hlZC5lbWl0KG51bGwpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIG9uIGRlbGV0ZSBvYmplY3QnLCBlcnIpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdCBzZW5kcyBhIEdyYXBoUUwgbXV0YXRpb24gdG8gdGhlIHNlcnZlciB0byBkdXBsaWNhdGUgdGhlIG9iamVjdFxuICAgKi9cbiAgYXN5bmMgZHVwbGljYXRlT2JqZWN0KCkge1xuICAgIGlmIChjb25maXJtKCdNw7ZjaHRlc3QgZHUgZGFzIE9iamVrdCB3aXJrbGljaCBkdXBsaXppZXJlbj8nKSkge1xuICAgICAgYXdhaXQgdGhpcy5zdWJtaXQodHJ1ZSk7XG4gICAgICB0aGlzLmdyYXBoUUxTZXJ2aWNlXG4gICAgICAgIC5ncmFwaFFsKCdkdXBsaWNhdGUnICsgdGhpcy5jYXBpdGFsaXplRmlyc3RMZXR0ZXIodGhpcy5tb2RlbE5hbWUpLCB7XG4gICAgICAgICAgYXJndW1lbnRzOiB7IGlkOiB0aGlzLmlkIH0sXG4gICAgICAgICAgZmllbGRzOiBbJ2lkJ10sXG4gICAgICAgICAgdHlwZTogR3JhcGhRTFJlcXVlc3RUeXBlLk1VVEFUSU9OLFxuICAgICAgICB9KVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZT8uaWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLi8nICsgdmFsdWUuaWRdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmZpbmlzaGVkLmVtaXQobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igb24gZHVwbGljYXRlIG9iamVjdCcsIGVycik7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIGEgc3RyaW5nLCBjYXBpdGFsaXplcyB0aGUgZmlyc3QgbGV0dGVyLCBhbmQgcmV0dXJucyB0aGUgbW9kaWZpZWQgc3RyaW5nXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBzdHJpbmcgdG8gY2FwaXRhbGl6ZS5cbiAgICogQHJldHVybnMgVGhlIGZpcnN0IGxldHRlciBvZiB0aGUgc3RyaW5nIGlzIGJlaW5nIGNhcGl0YWxpemVkIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIGlzIGJlaW5nIHJldHVybmVkLlxuICAgKi9cbiAgY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zbGljZSgxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhbiBBYnN0cmFjdENvbnRyb2wgYW5kIHJldHVybnMgYSBGb3JtQ29udHJvbFxuICAgKlxuICAgKiBAcGFyYW0gY29udHJvbCAtIEFic3RyYWN0Q29udHJvbCB8IG51bGwgfCB1bmRlZmluZWRcbiAgICogQHJldHVybnMgQSBGb3JtQ29udHJvbFxuICAgKi9cbiAgdHJhbnNmb3JtVG9Db250cm9sKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY29udHJvbCBhcyBGb3JtQ29udHJvbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyB0aGUgZm9ybSwgdmFsaWRhdGVzIGl0LCBhbmQgdGhlbiBzZW5kcyBpdCB0byB0aGUgR3JhcGhRTCBzZXJ2ZXJcbiAgICpcbiAgICogQHJldHVybnMgVGhlIGlkIG9mIHRoZSBuZXdseSBjcmVhdGVkIG9yIHVwZGF0ZWQgb2JqZWN0LlxuICAgKi9cbiAgc3VibWl0KHNlY3JldCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghc2VjcmV0KSB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCAmJiAhc2VjcmV0KSB7XG4gICAgICAgIHRoaXMuZm9ybXNTZXJ2aWNlLnZhbGlkYXRlQWxsRm9ybUZpZWxkcyh0aGlzLmZvcm0gYXMgYW55KTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHJlamVjdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScgJiYgIXRoaXMuaWQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSUQgaXMgbWlzc2luZyBmb3IgdXBkYXRlIScpO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmVqZWN0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50OjpzdWJtaXQtPmZvcm1WYWx1ZScsIHRoaXMuZm9ybS52YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmZvcm0udmFsdWUpO1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICh0aGlzLmNvbmZpZ1trZXldPy5yb2xlcyA/ICF0aGlzLnVzZXIuaGFzQWxsUm9sZXModGhpcy5jb25maWdba2V5XT8ucm9sZXMpIDogZmFsc2UpIHx8XG4gICAgICAgICAgdGhpcy5jb25maWdba2V5XT8uZXhjbHVkZVxuICAgICAgICApIHtcbiAgICAgICAgICBkZWxldGUgZGF0YVtrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IHR5cGUgZm9yIGdyYXBocWwgbWV0aG9kXG4gICAgICAgIGlmICh0aGlzLmZpZWxkc1trZXldPy50eXBlID09PSAnRmxvYXQnKSB7XG4gICAgICAgICAgZGF0YVtrZXldID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5sb2dnaW5nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OnN1Ym1pdC0+dmFsdWVUb0dyYXBocWwnLCBkYXRhKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5ncmFwaFFMU2VydmljZVxuICAgICAgICAuZ3JhcGhRbCh0aGlzLm9wZXJhdGlvbiArIHRoaXMuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHRoaXMubW9kZWxOYW1lKSwge1xuICAgICAgICAgIGFyZ3VtZW50czogdGhpcy5vcGVyYXRpb24gPT09ICd1cGRhdGUnID8geyBpZDogdGhpcy5pZCwgaW5wdXQ6IGRhdGEgfSA6IHsgaW5wdXQ6IGRhdGEgfSxcbiAgICAgICAgICBmaWVsZHM6IFsnaWQnXSxcbiAgICAgICAgICB0eXBlOiBHcmFwaFFMUmVxdWVzdFR5cGUuTVVUQVRJT04sXG4gICAgICAgIH0pXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFzZWNyZXQpIHtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuZmluaXNoZWQuZW1pdChudWxsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgaWYgKCFzZWNyZXQpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIG9uICcgKyB0aGlzLm9wZXJhdGlvbiwgZXJyKTtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidy0xMDBcIiAqbmdJZj1cImZvcm1cIj5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtdC0zXCI+XG4gICAgPGgyPlxuICAgICAge3sgbGFiZWwgPyBsYWJlbCA6IGNhcGl0YWxpemVGaXJzdExldHRlcihtb2RlbE5hbWUpIH19IHt7IG9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScgPyAnYmVhcmJlaXRlbicgOiAnZXJzdGVsbGVuJyB9fVxuICAgIDwvaDI+XG5cbiAgICA8ZGl2PlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IG1lLTJcIiAqbmdJZj1cImlkICYmIGR1cGxpY2F0ZSAmJiAhbG9hZGluZ1wiIChjbGljayk9XCJkdXBsaWNhdGVPYmplY3QoKVwiPlxuICAgICAgICBEdXBsaXppZXJlblxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzdWJtaXQoZmFsc2UpXCIgKm5nSWY9XCIhbG9hZGluZ1wiPlxuICAgICAgICB7eyBvcGVyYXRpb24gPT09ICdjcmVhdGUnID8gJ0Vyc3RlbGxlbicgOiAnU3BlaWNoZXJuJyB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIGRpc2FibGVkICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtXCIgcm9sZT1cInN0YXR1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAge3sgb3BlcmF0aW9uID09PSAnY3JlYXRlJyA/ICdFcnN0ZWxsZW4nIDogJ1NwZWljaGVybicgfX0uLi5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICA8YmFzZS1tb2RlbC1mb3JtLXN1YlxuICAgICAgW2ZpZWxkc109XCJmaWVsZHNcIlxuICAgICAgW2NvbmZpZ109XCJjb25maWdcIlxuICAgICAgW2Zvcm1dPVwiZm9ybVwiXG4gICAgICAoaW1hZ2VDaGFuZ2VkKT1cImlkID8gc3VibWl0KHRydWUpIDogbnVsbFwiXG4gICAgPjwvYmFzZS1tb2RlbC1mb3JtLXN1Yj5cblxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbXQtNFwiIFtuZ0NsYXNzXT1cImlkICYmIGRlbGV0ZSA/ICdqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbicgOiAnanVzdGlmeS1jb250ZW50LWVuZCdcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJpZCAmJiBkZWxldGVcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJkZWxldGVPYmplY3QoKVwiPkzDtnNjaGVuPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInN1Ym1pdChmYWxzZSlcIiAqbmdJZj1cIiFsb2FkaW5nXCI+XG4gICAgICAgICAge3sgb3BlcmF0aW9uID09PSAnY3JlYXRlJyA/ICdFcnN0ZWxsZW4nIDogJ1NwZWljaGVybicgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgZGlzYWJsZWQgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbVwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG4gICAgICAgICAge3sgb3BlcmF0aW9uID09PSAnY3JlYXRlJyA/ICdFcnN0ZWxsZW4nIDogJ1NwZWljaGVybicgfX0uLi5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9kaXY+XG4iXX0=
@@ -13,6 +13,7 @@ export class ModelTableComponent {
13
13
  this.create = true;
14
14
  this.update = true;
15
15
  this.delete = true;
16
+ this.duplicate = true;
16
17
  this.config = {};
17
18
  this.fieldConfig = {};
18
19
  this.idSelected = new EventEmitter();
@@ -111,7 +112,9 @@ export class ModelTableComponent {
111
112
  if (this.logging) {
112
113
  console.log('ModelTableComponent::loadObjects->value', value);
113
114
  }
114
- this.objects = value;
115
+ const arrayForSort = [...value];
116
+ this.objects = arrayForSort.sort((a, b) => (b?.createdAt ? new Date(b?.createdAt)?.getTime() : new Date().getTime()) -
117
+ (a?.createdAt ? new Date(a?.createdAt)?.getTime() : new Date().getTime()));
115
118
  },
116
119
  error: (err) => {
117
120
  console.log('Error on loading objects', err);
@@ -121,8 +124,6 @@ export class ModelTableComponent {
121
124
  /**
122
125
  * If the update property is true, then set the selectedId property to the id of the object passed in, and emit the
123
126
  * selectedId property
124
- *
125
- * @param object - any - this is the object that is passed in from the child component.
126
127
  */
127
128
  selectId(object) {
128
129
  if (!object) {
@@ -145,10 +146,10 @@ export class ModelTableComponent {
145
146
  }
146
147
  }
147
148
  ModelTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ModelTableComponent, deps: [{ token: i1.GraphQLMetaService }, { token: i1.GraphQLService }], target: i0.ɵɵFactoryTarget.Component });
148
- ModelTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: ModelTableComponent, selector: "base-model-table", inputs: { modelName: "modelName", objectId: "objectId", createMode: "createMode", logging: "logging", create: "create", update: "update", delete: "delete", config: "config", fieldConfig: "fieldConfig" }, outputs: { idSelected: "idSelected", createModeChanged: "createModeChanged" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"!selectedId && !createMode\">\n <div class=\"w-100 d-flex flex-row justify-content-between mb-4\">\n <h2 *ngIf=\"modelName\">\n {{ config?.plural ? config?.plural : config?.label ? config?.label : capitalizeFirstLetter(modelName) + 's' }}\n </h2>\n <div class=\"d-flex align-items-center\">\n <button class=\"btn btn-primary\" (click)=\"createNewObject()\" *ngIf=\"create\">Erstellen</button>\n </div>\n </div>\n <table class=\"table table-hover table-responsive bg-white\">\n <thead>\n <tr>\n <th scope=\"col\" *ngFor=\"let field of availableFields\">\n {{ tableFields[field]?.label ? tableFields[field]?.label : capitalizeFirstLetter(field) }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let object of objects\">\n <td class=\"cursor-pointer\" *ngFor=\"let field of availableFields\" (click)=\"selectId(object)\">\n <ng-container *ngIf=\"tableFields[field]?.dateFormat\">\n {{ object[field] | date: tableFields[field]?.dateFormat }} Uhr\n </ng-container>\n\n <ng-container *ngIf=\"!tableFields[field]?.dateFormat\">\n {{ object[field] }}\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n\n<div class=\"w-100\" *ngIf=\"selectedId || createMode\">\n <button class=\"btn btn-outline-primary mb-3\" (click)=\"selectId('')\">Zur\u00FCck</button>\n <base-model-form\n [modelName]=\"modelName\"\n [label]=\"config?.label\"\n [config]=\"fieldConfig\"\n [logging]=\"logging\"\n [id]=\"selectedId\"\n (finished)=\"selectId('')\"\n [delete]=\"delete\"\n ></base-model-form>\n</div>\n", styles: [".cursor-pointer{cursor:pointer}.table>:not(:first-child){border-top:0}table{border-radius:.25rem;border-color:#e2e8f0!important}table thead{text-transform:uppercase;font-size:12px}table thead th{padding:12px 24px}table tbody tr td{font-weight:400!important;font-size:16px;padding:16px 24px}\n"], components: [{ type: i2.ModelFormComponent, selector: "base-model-form", inputs: ["modelName", "label", "id", "delete", "logging", "config"], outputs: ["finished"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "date": i3.DatePipe } });
149
+ ModelTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: ModelTableComponent, selector: "base-model-table", inputs: { modelName: "modelName", objectId: "objectId", createMode: "createMode", logging: "logging", create: "create", update: "update", delete: "delete", duplicate: "duplicate", config: "config", fieldConfig: "fieldConfig" }, outputs: { idSelected: "idSelected", createModeChanged: "createModeChanged" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"!selectedId && !createMode\">\n <div class=\"w-100 d-flex flex-row justify-content-between mb-4\">\n <h2 *ngIf=\"modelName\">\n {{ config?.plural ? config?.plural : config?.label ? config?.label : capitalizeFirstLetter(modelName) + 's' }}\n </h2>\n <div class=\"d-flex align-items-center\">\n <button class=\"btn btn-primary\" (click)=\"createNewObject()\" *ngIf=\"create\">Erstellen</button>\n </div>\n </div>\n <table class=\"table table-hover table-responsive bg-white\">\n <thead>\n <tr>\n <th scope=\"col\" *ngFor=\"let field of availableFields\">\n {{ tableFields[field]?.label ? tableFields[field]?.label : capitalizeFirstLetter(field) }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let object of objects\">\n <td class=\"cursor-pointer\" *ngFor=\"let field of availableFields\" (click)=\"selectId(object)\">\n <ng-container *ngIf=\"tableFields[field]?.dateFormat\">\n {{ object[field] | date: tableFields[field]?.dateFormat }} Uhr\n </ng-container>\n\n <ng-container *ngIf=\"!tableFields[field]?.dateFormat\">\n {{ object[field] }}\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n\n<div class=\"w-100\" *ngIf=\"selectedId || createMode\">\n <button class=\"btn btn-outline-primary mb-3\" (click)=\"selectId('')\">Zur\u00FCck</button>\n <base-model-form\n [modelName]=\"modelName\"\n [label]=\"config?.label\"\n [config]=\"fieldConfig\"\n [logging]=\"logging\"\n [id]=\"selectedId\"\n (finished)=\"selectId('')\"\n [delete]=\"delete\"\n [duplicate]=\"duplicate\"\n ></base-model-form>\n</div>\n", styles: [".cursor-pointer{cursor:pointer}.table>:not(:first-child){border-top:0}table{border-radius:.25rem;border-color:#e2e8f0!important}table thead{text-transform:uppercase;font-size:12px}table thead th{padding:12px 24px}table tbody tr td{font-weight:400!important;font-size:16px;padding:16px 24px}\n"], components: [{ type: i2.ModelFormComponent, selector: "base-model-form", inputs: ["modelName", "label", "id", "delete", "duplicate", "logging", "config"], outputs: ["finished"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "date": i3.DatePipe } });
149
150
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ModelTableComponent, decorators: [{
150
151
  type: Component,
151
- args: [{ selector: 'base-model-table', template: "<div *ngIf=\"!selectedId && !createMode\">\n <div class=\"w-100 d-flex flex-row justify-content-between mb-4\">\n <h2 *ngIf=\"modelName\">\n {{ config?.plural ? config?.plural : config?.label ? config?.label : capitalizeFirstLetter(modelName) + 's' }}\n </h2>\n <div class=\"d-flex align-items-center\">\n <button class=\"btn btn-primary\" (click)=\"createNewObject()\" *ngIf=\"create\">Erstellen</button>\n </div>\n </div>\n <table class=\"table table-hover table-responsive bg-white\">\n <thead>\n <tr>\n <th scope=\"col\" *ngFor=\"let field of availableFields\">\n {{ tableFields[field]?.label ? tableFields[field]?.label : capitalizeFirstLetter(field) }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let object of objects\">\n <td class=\"cursor-pointer\" *ngFor=\"let field of availableFields\" (click)=\"selectId(object)\">\n <ng-container *ngIf=\"tableFields[field]?.dateFormat\">\n {{ object[field] | date: tableFields[field]?.dateFormat }} Uhr\n </ng-container>\n\n <ng-container *ngIf=\"!tableFields[field]?.dateFormat\">\n {{ object[field] }}\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n\n<div class=\"w-100\" *ngIf=\"selectedId || createMode\">\n <button class=\"btn btn-outline-primary mb-3\" (click)=\"selectId('')\">Zur\u00FCck</button>\n <base-model-form\n [modelName]=\"modelName\"\n [label]=\"config?.label\"\n [config]=\"fieldConfig\"\n [logging]=\"logging\"\n [id]=\"selectedId\"\n (finished)=\"selectId('')\"\n [delete]=\"delete\"\n ></base-model-form>\n</div>\n", styles: [".cursor-pointer{cursor:pointer}.table>:not(:first-child){border-top:0}table{border-radius:.25rem;border-color:#e2e8f0!important}table thead{text-transform:uppercase;font-size:12px}table thead th{padding:12px 24px}table tbody tr td{font-weight:400!important;font-size:16px;padding:16px 24px}\n"] }]
152
+ args: [{ selector: 'base-model-table', template: "<div *ngIf=\"!selectedId && !createMode\">\n <div class=\"w-100 d-flex flex-row justify-content-between mb-4\">\n <h2 *ngIf=\"modelName\">\n {{ config?.plural ? config?.plural : config?.label ? config?.label : capitalizeFirstLetter(modelName) + 's' }}\n </h2>\n <div class=\"d-flex align-items-center\">\n <button class=\"btn btn-primary\" (click)=\"createNewObject()\" *ngIf=\"create\">Erstellen</button>\n </div>\n </div>\n <table class=\"table table-hover table-responsive bg-white\">\n <thead>\n <tr>\n <th scope=\"col\" *ngFor=\"let field of availableFields\">\n {{ tableFields[field]?.label ? tableFields[field]?.label : capitalizeFirstLetter(field) }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let object of objects\">\n <td class=\"cursor-pointer\" *ngFor=\"let field of availableFields\" (click)=\"selectId(object)\">\n <ng-container *ngIf=\"tableFields[field]?.dateFormat\">\n {{ object[field] | date: tableFields[field]?.dateFormat }} Uhr\n </ng-container>\n\n <ng-container *ngIf=\"!tableFields[field]?.dateFormat\">\n {{ object[field] }}\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n\n<div class=\"w-100\" *ngIf=\"selectedId || createMode\">\n <button class=\"btn btn-outline-primary mb-3\" (click)=\"selectId('')\">Zur\u00FCck</button>\n <base-model-form\n [modelName]=\"modelName\"\n [label]=\"config?.label\"\n [config]=\"fieldConfig\"\n [logging]=\"logging\"\n [id]=\"selectedId\"\n (finished)=\"selectId('')\"\n [delete]=\"delete\"\n [duplicate]=\"duplicate\"\n ></base-model-form>\n</div>\n", styles: [".cursor-pointer{cursor:pointer}.table>:not(:first-child){border-top:0}table{border-radius:.25rem;border-color:#e2e8f0!important}table thead{text-transform:uppercase;font-size:12px}table thead th{padding:12px 24px}table tbody tr td{font-weight:400!important;font-size:16px;padding:16px 24px}\n"] }]
152
153
  }], ctorParameters: function () { return [{ type: i1.GraphQLMetaService }, { type: i1.GraphQLService }]; }, propDecorators: { modelName: [{
153
154
  type: Input
154
155
  }], objectId: [{
@@ -163,6 +164,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
163
164
  type: Input
164
165
  }], delete: [{
165
166
  type: Input
167
+ }], duplicate: [{
168
+ type: Input
166
169
  }], config: [{
167
170
  type: Input
168
171
  }], fieldConfig: [{
@@ -172,4 +175,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
172
175
  }], createModeChanged: [{
173
176
  type: Output
174
177
  }] } });
175
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9iYXNlLWNvbXBvbmVudHMvY29tcG9uZW50cy9tb2RlbC10YWJsZS9tb2RlbC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL21vZGVsLXRhYmxlL21vZGVsLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQW1DLGtCQUFrQixFQUFrQixNQUFNLDRCQUE0QixDQUFDOzs7OztBQU9qSCxNQUFNLE9BQU8sbUJBQW1CO0lBNkI5QixZQUFvQixrQkFBc0MsRUFBVSxjQUE4QjtRQUE5RSx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBMUJ6RixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsV0FBTSxHQUFHLElBQUksQ0FBQztRQUNkLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxXQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2QsV0FBTSxHQUFRLEVBQUUsQ0FBQztRQUNqQixnQkFBVyxHQUFRLEVBQUUsQ0FBQztRQUVyQixlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN4QyxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRTFELGdCQUFXLEdBQUc7WUFDWixFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO1lBQ25CLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7WUFDdkIsS0FB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SUFDSCxRQUFRLENBQUMsTUFBVztRQUNsQixJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDeEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNwQztRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNmLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN2QztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHFCQUFxQixDQUFDLEtBQWE7UUFDakMsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQzs7Z0hBOUpVLG1CQUFtQjtvR0FBbkIsbUJBQW1CLHdXQ1JoQywwcERBNkNBOzJGRHJDYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0Usa0JBQWtCO3NJQUtuQixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdyYXBoUUxNZXRhLCBHcmFwaFFMTWV0YVNlcnZpY2UsIEdyYXBoUUxSZXF1ZXN0VHlwZSwgR3JhcGhRTFNlcnZpY2UgfSBmcm9tICdAbGVubmUudGVjaC9uZy1iYXNlL3NoYXJlZCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Jhc2UtbW9kZWwtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vbW9kZWwtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tb2RlbC10YWJsZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBNb2RlbFRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBtb2RlbE5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgb2JqZWN0SWQ6IHN0cmluZztcbiAgQElucHV0KCkgY3JlYXRlTW9kZSA9IGZhbHNlO1xuICBASW5wdXQoKSBsb2dnaW5nID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNyZWF0ZSA9IHRydWU7XG4gIEBJbnB1dCgpIHVwZGF0ZSA9IHRydWU7XG4gIEBJbnB1dCgpIGRlbGV0ZSA9IHRydWU7XG4gIEBJbnB1dCgpIGNvbmZpZzogYW55ID0ge307XG4gIEBJbnB1dCgpIGZpZWxkQ29uZmlnOiBhbnkgPSB7fTtcblxuICBAT3V0cHV0KCkgaWRTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgY3JlYXRlTW9kZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgdGFibGVGaWVsZHMgPSB7XG4gICAgaWQ6IHsgbGFiZWw6ICdJRCcgfSxcbiAgICBuYW1lOiB7IGxhYmVsOiAnTmFtZScgfSxcbiAgICB0aXRsZTogeyBsYWJlbDogJ1RpdGVsJyB9LFxuICAgIGRlc2NyaXB0aW9uOiB7IGxhYmVsOiAnQmVzY2hyZWlidW5nJyB9LFxuICAgIGVtYWlsOiB7IGxhYmVsOiAnRS1NYWlsJyB9LFxuICAgIGNyZWF0ZWRBdDogeyBsYWJlbDogJ0Vyc3RlbGx0IGFtJywgZGF0ZUZvcm1hdDogJ2RkLk1NLllZWVkgSEg6bW0nIH0sXG4gICAgdXBkYXRlZEF0OiB7IGxhYmVsOiAnQmVhcmJlaXRldCBhbScsIGRhdGVGb3JtYXQ6ICdkZC5NTS5ZWVlZIEhIOm1tJyB9LFxuICB9O1xuICBtZXRhITogR3JhcGhRTE1ldGE7XG4gIG9iamVjdHM6IGFueVtdID0gW107XG4gIGF2YWlsYWJsZUZpZWxkczogc3RyaW5nW10gPSBbXTtcbiAgc2VsZWN0ZWRJZCA9ICcnO1xuICBxdWVyeU5hbWUgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZ3JhcGhRTE1ldGFTZXJ2aWNlOiBHcmFwaFFMTWV0YVNlcnZpY2UsIHByaXZhdGUgZ3JhcGhRTFNlcnZpY2U6IEdyYXBoUUxTZXJ2aWNlKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZ3JhcGhRTE1ldGFTZXJ2aWNlLmdldE1ldGEoKS5zdWJzY3JpYmUoKG1ldGEpID0+IHtcbiAgICAgIHRoaXMubWV0YSA9IG1ldGE7XG5cbiAgICAgIGlmICh0aGlzLm1vZGVsTmFtZSkge1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub2JqZWN0SWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZElkID0gdGhpcy5vYmplY3RJZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snbW9kZWxOYW1lJ10gJiYgdGhpcy5tZXRhKSB7XG4gICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snb2JqZWN0SWQnXSAmJiB0aGlzLm1ldGEpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkSWQgIT09IHRoaXMub2JqZWN0SWQpIHtcbiAgICAgICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdNb2RlbFRhYmxlQ29tcG9uZW50OjpuZ09uQ2hhbmdlcy0+c2VsZWN0ZWRJZCcsIHRoaXMuc2VsZWN0ZWRJZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkSWQgPSB0aGlzLm9iamVjdElkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXZSdyZSB1c2luZyB0aGUgYG1ldGFgIHNlcnZpY2UgdG8gZ2V0IHRoZSBmaWVsZHMgdGhhdCBhcmUgYXZhaWxhYmxlIGZvciB0aGUgYGZpbmRgIHF1ZXJ5IGZvciB0aGUgbW9kZWwgd2UncmUgd29ya2luZ1xuICAgKiB3aXRoLiBXZSdyZSB0aGVuIHVzaW5nIHRoYXQgaW5mb3JtYXRpb24gdG8gcG9wdWxhdGUgdGhlIGBhdmFpbGFibGVGaWVsZHNgIGFycmF5XG4gICAqL1xuICBpbml0KCkge1xuICAgIHRoaXMuYXZhaWxhYmxlRmllbGRzID0gW107XG5cbiAgICAvLyBTZXQgcXVlcnkgbmFtZVxuICAgIGlmICghdGhpcy5jb25maWc/LnF1ZXJ5TmFtZSkge1xuICAgICAgdGhpcy5xdWVyeU5hbWUgPSAnZmluZCcgKyB0aGlzLmNhcGl0YWxpemVGaXJzdExldHRlcih0aGlzLm1vZGVsTmFtZSkgKyAncyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucXVlcnlOYW1lID0gdGhpcy5jb25maWc/LnF1ZXJ5TmFtZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWc/LnRhYmxlRmllbGRzKSB7XG4gICAgICB0aGlzLnRhYmxlRmllbGRzID0gdGhpcy5jb25maWcudGFibGVGaWVsZHM7XG4gICAgfVxuXG4gICAgY29uc3QgcG9zc2libGVGaWVsZHMgPSB0aGlzLm1ldGEuZ2V0RmllbGRzKHRoaXMucXVlcnlOYW1lKTtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocG9zc2libGVGaWVsZHMpO1xuICAgIGNvbnN0IHRhYmxlRmllbGRLZXlzID0gT2JqZWN0LmtleXModGhpcy50YWJsZUZpZWxkcyk7XG4gICAgdGFibGVGaWVsZEtleXM/LmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICBpZiAoa2V5cy5pbmNsdWRlcyhmaWVsZCkpIHtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVGaWVsZHMucHVzaChmaWVsZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5sb2dnaW5nKSB7XG4gICAgICBjb25zb2xlLmxvZygnTW9kZWxUYWJsZUNvbXBvbmVudDo6aW5pdC0+cG9zc2libGVGaWVsZHMnLCBwb3NzaWJsZUZpZWxkcyk7XG4gICAgICBjb25zb2xlLmxvZygnTW9kZWxUYWJsZUNvbXBvbmVudDo6aW5pdC0+a2V5cycsIGtleXMpO1xuICAgICAgY29uc29sZS5sb2coJ01vZGVsVGFibGVDb21wb25lbnQ6OmluaXQtPmF2YWlsYWJsZUZpZWxkcycsIHRoaXMuYXZhaWxhYmxlRmllbGRzKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvYWRPYmplY3RzKHRoaXMuYXZhaWxhYmxlRmllbGRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgXCJDcmVhdGUgTmV3XCIgYnV0dG9uLCB0aGUgY3JlYXRlTW9kZUNoYW5nZWQgZXZlbnQgaXMgZW1pdHRlZCwgd2hpY2ggaXMgdGhlbiBoYW5kbGVkIGJ5IHRoZVxuICAgKiBwYXJlbnQgY29tcG9uZW50XG4gICAqL1xuICBjcmVhdGVOZXdPYmplY3QoKSB7XG4gICAgdGhpcy5jcmVhdGVNb2RlID0gdHJ1ZTtcbiAgICB0aGlzLmNyZWF0ZU1vZGVDaGFuZ2VkLmVtaXQodHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogSXQgbG9hZHMgdGhlIG9iamVjdHMgZnJvbSB0aGUgZGF0YWJhc2UgYW5kIHN0b3JlcyB0aGVtIGluIHRoZSBvYmplY3RzIHZhcmlhYmxlXG4gICAqXG4gICAqIEBwYXJhbSBmaWVsZHMgLSBzdHJpbmdbXSAtIFRoZSBmaWVsZHMgeW91IHdhbnQgdG8gbG9hZCBmcm9tIHRoZSBkYXRhYmFzZS5cbiAgICovXG4gIGxvYWRPYmplY3RzKGZpZWxkczogc3RyaW5nW10pIHtcbiAgICB0aGlzLm9iamVjdHMgPSBbXTtcbiAgICB0aGlzLmdyYXBoUUxTZXJ2aWNlXG4gICAgICAuZ3JhcGhRbCh0aGlzLnF1ZXJ5TmFtZSwge1xuICAgICAgICBmaWVsZHMsXG4gICAgICAgIHR5cGU6IEdyYXBoUUxSZXF1ZXN0VHlwZS5RVUVSWSxcbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ01vZGVsVGFibGVDb21wb25lbnQ6OmxvYWRPYmplY3RzLT52YWx1ZScsIHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLm9iamVjdHMgPSB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3Igb24gbG9hZGluZyBvYmplY3RzJywgZXJyKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSB1cGRhdGUgcHJvcGVydHkgaXMgdHJ1ZSwgdGhlbiBzZXQgdGhlIHNlbGVjdGVkSWQgcHJvcGVydHkgdG8gdGhlIGlkIG9mIHRoZSBvYmplY3QgcGFzc2VkIGluLCBhbmQgZW1pdCB0aGVcbiAgICogc2VsZWN0ZWRJZCBwcm9wZXJ0eVxuICAgKlxuICAgKiBAcGFyYW0gb2JqZWN0IC0gYW55IC0gdGhpcyBpcyB0aGUgb2JqZWN0IHRoYXQgaXMgcGFzc2VkIGluIGZyb20gdGhlIGNoaWxkIGNvbXBvbmVudC5cbiAgICovXG4gIHNlbGVjdElkKG9iamVjdDogYW55KSB7XG4gICAgaWYgKCFvYmplY3QpIHtcbiAgICAgIHRoaXMuY3JlYXRlTW9kZSA9IGZhbHNlO1xuICAgICAgdGhpcy5jcmVhdGVNb2RlQ2hhbmdlZC5lbWl0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy51cGRhdGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZCA9IG9iamVjdFsnaWQnXTtcbiAgICAgIHRoaXMuaWRTZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWRJZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIGEgc3RyaW5nLCBjYXBpdGFsaXplcyB0aGUgZmlyc3QgbGV0dGVyLCBhbmQgcmV0dXJucyB0aGUgbW9kaWZpZWQgc3RyaW5nXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBzdHJpbmcgdG8gY2FwaXRhbGl6ZS5cbiAgICogQHJldHVybnMgVGhlIGZpcnN0IGxldHRlciBvZiB0aGUgc3RyaW5nIGlzIGJlaW5nIGNhcGl0YWxpemVkIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIGlzIGJlaW5nIHJldHVybmVkLlxuICAgKi9cbiAgY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zbGljZSgxKTtcbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cIiFzZWxlY3RlZElkICYmICFjcmVhdGVNb2RlXCI+XG4gIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItNFwiPlxuICAgIDxoMiAqbmdJZj1cIm1vZGVsTmFtZVwiPlxuICAgICAge3sgY29uZmlnPy5wbHVyYWwgPyBjb25maWc/LnBsdXJhbCA6IGNvbmZpZz8ubGFiZWwgPyBjb25maWc/LmxhYmVsIDogY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKG1vZGVsTmFtZSkgKyAncycgfX1cbiAgICA8L2gyPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImNyZWF0ZU5ld09iamVjdCgpXCIgKm5nSWY9XCJjcmVhdGVcIj5FcnN0ZWxsZW48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWhvdmVyIHRhYmxlLXJlc3BvbnNpdmUgYmctd2hpdGVcIj5cbiAgICA8dGhlYWQ+XG4gICAgICA8dHI+XG4gICAgICAgIDx0aCBzY29wZT1cImNvbFwiICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBhdmFpbGFibGVGaWVsZHNcIj5cbiAgICAgICAgICB7eyB0YWJsZUZpZWxkc1tmaWVsZF0/LmxhYmVsID8gdGFibGVGaWVsZHNbZmllbGRdPy5sYWJlbCA6IGNhcGl0YWxpemVGaXJzdExldHRlcihmaWVsZCkgfX1cbiAgICAgICAgPC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cbiAgICA8dGJvZHk+XG4gICAgICA8dHIgKm5nRm9yPVwibGV0IG9iamVjdCBvZiBvYmplY3RzXCI+XG4gICAgICAgIDx0ZCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGF2YWlsYWJsZUZpZWxkc1wiIChjbGljayk9XCJzZWxlY3RJZChvYmplY3QpXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYmxlRmllbGRzW2ZpZWxkXT8uZGF0ZUZvcm1hdFwiPlxuICAgICAgICAgICAge3sgb2JqZWN0W2ZpZWxkXSB8IGRhdGU6IHRhYmxlRmllbGRzW2ZpZWxkXT8uZGF0ZUZvcm1hdCB9fSBVaHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFibGVGaWVsZHNbZmllbGRdPy5kYXRlRm9ybWF0XCI+XG4gICAgICAgICAgICB7eyBvYmplY3RbZmllbGRdIH19XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvdGJvZHk+XG4gIDwvdGFibGU+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cInctMTAwXCIgKm5nSWY9XCJzZWxlY3RlZElkIHx8IGNyZWF0ZU1vZGVcIj5cbiAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IG1iLTNcIiAoY2xpY2spPVwic2VsZWN0SWQoJycpXCI+WnVyw7xjazwvYnV0dG9uPlxuICA8YmFzZS1tb2RlbC1mb3JtXG4gICAgW21vZGVsTmFtZV09XCJtb2RlbE5hbWVcIlxuICAgIFtsYWJlbF09XCJjb25maWc/LmxhYmVsXCJcbiAgICBbY29uZmlnXT1cImZpZWxkQ29uZmlnXCJcbiAgICBbbG9nZ2luZ109XCJsb2dnaW5nXCJcbiAgICBbaWRdPVwic2VsZWN0ZWRJZFwiXG4gICAgKGZpbmlzaGVkKT1cInNlbGVjdElkKCcnKVwiXG4gICAgW2RlbGV0ZV09XCJkZWxldGVcIlxuICA+PC9iYXNlLW1vZGVsLWZvcm0+XG48L2Rpdj5cbiJdfQ==
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9iYXNlLWNvbXBvbmVudHMvY29tcG9uZW50cy9tb2RlbC10YWJsZS9tb2RlbC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL21vZGVsLXRhYmxlL21vZGVsLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQW1DLGtCQUFrQixFQUFrQixNQUFNLDRCQUE0QixDQUFDOzs7OztBQU9qSCxNQUFNLE9BQU8sbUJBQW1CO0lBOEI5QixZQUFvQixrQkFBc0MsRUFBVSxjQUE4QjtRQUE5RSx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBM0J6RixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsV0FBTSxHQUFHLElBQUksQ0FBQztRQUNkLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxXQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2QsY0FBUyxHQUFHLElBQUksQ0FBQztRQUNqQixXQUFNLEdBQVEsRUFBRSxDQUFDO1FBQ2pCLGdCQUFXLEdBQVEsRUFBRSxDQUFDO1FBRXJCLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3hDLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFMUQsZ0JBQVcsR0FBRztZQUNaLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7WUFDbkIsSUFBSSxFQUFFLEVBQUUsS0FB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QjtrQkFML0IsU0FBUzsrQkFDRSxrQkFBa0I7c0lBS25CLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHcmFwaFFMTWV0YSwgR3JhcGhRTE1ldGFTZXJ2aWNlLCBHcmFwaFFMUmVxdWVzdFR5cGUsIEdyYXBoUUxTZXJ2aWNlIH0gZnJvbSAnQGxlbm5lLnRlY2gvbmctYmFzZS9zaGFyZWQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdiYXNlLW1vZGVsLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21vZGVsLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW9kZWwtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTW9kZWxUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgbW9kZWxOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9iamVjdElkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNyZWF0ZU1vZGUgPSBmYWxzZTtcbiAgQElucHV0KCkgbG9nZ2luZyA9IGZhbHNlO1xuICBASW5wdXQoKSBjcmVhdGUgPSB0cnVlO1xuICBASW5wdXQoKSB1cGRhdGUgPSB0cnVlO1xuICBASW5wdXQoKSBkZWxldGUgPSB0cnVlO1xuICBASW5wdXQoKSBkdXBsaWNhdGUgPSB0cnVlO1xuICBASW5wdXQoKSBjb25maWc6IGFueSA9IHt9O1xuICBASW5wdXQoKSBmaWVsZENvbmZpZzogYW55ID0ge307XG5cbiAgQE91dHB1dCgpIGlkU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGNyZWF0ZU1vZGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIHRhYmxlRmllbGRzID0ge1xuICAgIGlkOiB7IGxhYmVsOiAnSUQnIH0sXG4gICAgbmFtZTogeyBsYWJlbDogJ05hbWUnIH0sXG4gICAgdGl0bGU6IHsgbGFiZWw6ICdUaXRlbCcgfSxcbiAgICBkZXNjcmlwdGlvbjogeyBsYWJlbDogJ0Jlc2NocmVpYnVuZycgfSxcbiAgICBlbWFpbDogeyBsYWJlbDogJ0UtTWFpbCcgfSxcbiAgICBjcmVhdGVkQXQ6IHsgbGFiZWw6ICdFcnN0ZWxsdCBhbScsIGRhdGVGb3JtYXQ6ICdkZC5NTS5ZWVlZIEhIOm1tJyB9LFxuICAgIHVwZGF0ZWRBdDogeyBsYWJlbDogJ0JlYXJiZWl0ZXQgYW0nLCBkYXRlRm9ybWF0OiAnZGQuTU0uWVlZWSBISDptbScgfSxcbiAgfTtcbiAgbWV0YSE6IEdyYXBoUUxNZXRhO1xuICBvYmplY3RzOiBhbnlbXSA9IFtdO1xuICBhdmFpbGFibGVGaWVsZHM6IHN0cmluZ1tdID0gW107XG4gIHNlbGVjdGVkSWQgPSAnJztcbiAgcXVlcnlOYW1lID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGdyYXBoUUxNZXRhU2VydmljZTogR3JhcGhRTE1ldGFTZXJ2aWNlLCBwcml2YXRlIGdyYXBoUUxTZXJ2aWNlOiBHcmFwaFFMU2VydmljZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdyYXBoUUxNZXRhU2VydmljZS5nZXRNZXRhKCkuc3Vic2NyaWJlKChtZXRhKSA9PiB7XG4gICAgICB0aGlzLm1ldGEgPSBtZXRhO1xuXG4gICAgICBpZiAodGhpcy5tb2RlbE5hbWUpIHtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9iamVjdElkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZCA9IHRoaXMub2JqZWN0SWQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ21vZGVsTmFtZSddICYmIHRoaXMubWV0YSkge1xuICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ29iamVjdElkJ10gJiYgdGhpcy5tZXRhKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZElkICE9PSB0aGlzLm9iamVjdElkKSB7XG4gICAgICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnTW9kZWxUYWJsZUNvbXBvbmVudDo6bmdPbkNoYW5nZXMtPnNlbGVjdGVkSWQnLCB0aGlzLnNlbGVjdGVkSWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZElkID0gdGhpcy5vYmplY3RJZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2UncmUgdXNpbmcgdGhlIGBtZXRhYCBzZXJ2aWNlIHRvIGdldCB0aGUgZmllbGRzIHRoYXQgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIGBmaW5kYCBxdWVyeSBmb3IgdGhlIG1vZGVsIHdlJ3JlIHdvcmtpbmdcbiAgICogd2l0aC4gV2UncmUgdGhlbiB1c2luZyB0aGF0IGluZm9ybWF0aW9uIHRvIHBvcHVsYXRlIHRoZSBgYXZhaWxhYmxlRmllbGRzYCBhcnJheVxuICAgKi9cbiAgaW5pdCgpIHtcbiAgICB0aGlzLmF2YWlsYWJsZUZpZWxkcyA9IFtdO1xuXG4gICAgLy8gU2V0IHF1ZXJ5IG5hbWVcbiAgICBpZiAoIXRoaXMuY29uZmlnPy5xdWVyeU5hbWUpIHtcbiAgICAgIHRoaXMucXVlcnlOYW1lID0gJ2ZpbmQnICsgdGhpcy5jYXBpdGFsaXplRmlyc3RMZXR0ZXIodGhpcy5tb2RlbE5hbWUpICsgJ3MnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnF1ZXJ5TmFtZSA9IHRoaXMuY29uZmlnPy5xdWVyeU5hbWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnPy50YWJsZUZpZWxkcykge1xuICAgICAgdGhpcy50YWJsZUZpZWxkcyA9IHRoaXMuY29uZmlnLnRhYmxlRmllbGRzO1xuICAgIH1cblxuICAgIGNvbnN0IHBvc3NpYmxlRmllbGRzID0gdGhpcy5tZXRhLmdldEZpZWxkcyh0aGlzLnF1ZXJ5TmFtZSk7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHBvc3NpYmxlRmllbGRzKTtcbiAgICBjb25zdCB0YWJsZUZpZWxkS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMudGFibGVGaWVsZHMpO1xuICAgIHRhYmxlRmllbGRLZXlzPy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgaWYgKGtleXMuaW5jbHVkZXMoZmllbGQpKSB7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlRmllbGRzLnB1c2goZmllbGQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgY29uc29sZS5sb2coJ01vZGVsVGFibGVDb21wb25lbnQ6OmluaXQtPnBvc3NpYmxlRmllbGRzJywgcG9zc2libGVGaWVsZHMpO1xuICAgICAgY29uc29sZS5sb2coJ01vZGVsVGFibGVDb21wb25lbnQ6OmluaXQtPmtleXMnLCBrZXlzKTtcbiAgICAgIGNvbnNvbGUubG9nKCdNb2RlbFRhYmxlQ29tcG9uZW50Ojppbml0LT5hdmFpbGFibGVGaWVsZHMnLCB0aGlzLmF2YWlsYWJsZUZpZWxkcyk7XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkT2JqZWN0cyh0aGlzLmF2YWlsYWJsZUZpZWxkcyk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB0aGUgdXNlciBjbGlja3MgdGhlIFwiQ3JlYXRlIE5ld1wiIGJ1dHRvbiwgdGhlIGNyZWF0ZU1vZGVDaGFuZ2VkIGV2ZW50IGlzIGVtaXR0ZWQsIHdoaWNoIGlzIHRoZW4gaGFuZGxlZCBieSB0aGVcbiAgICogcGFyZW50IGNvbXBvbmVudFxuICAgKi9cbiAgY3JlYXRlTmV3T2JqZWN0KCkge1xuICAgIHRoaXMuY3JlYXRlTW9kZSA9IHRydWU7XG4gICAgdGhpcy5jcmVhdGVNb2RlQ2hhbmdlZC5lbWl0KHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IGxvYWRzIHRoZSBvYmplY3RzIGZyb20gdGhlIGRhdGFiYXNlIGFuZCBzdG9yZXMgdGhlbSBpbiB0aGUgb2JqZWN0cyB2YXJpYWJsZVxuICAgKlxuICAgKiBAcGFyYW0gZmllbGRzIC0gc3RyaW5nW10gLSBUaGUgZmllbGRzIHlvdSB3YW50IHRvIGxvYWQgZnJvbSB0aGUgZGF0YWJhc2UuXG4gICAqL1xuICBsb2FkT2JqZWN0cyhmaWVsZHM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5vYmplY3RzID0gW107XG4gICAgdGhpcy5ncmFwaFFMU2VydmljZVxuICAgICAgLmdyYXBoUWwodGhpcy5xdWVyeU5hbWUsIHtcbiAgICAgICAgZmllbGRzLFxuICAgICAgICB0eXBlOiBHcmFwaFFMUmVxdWVzdFR5cGUuUVVFUlksXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdNb2RlbFRhYmxlQ29tcG9uZW50Ojpsb2FkT2JqZWN0cy0+dmFsdWUnLCB2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYXJyYXlGb3JTb3J0ID0gWy4uLnZhbHVlXTtcbiAgICAgICAgICB0aGlzLm9iamVjdHMgPSBhcnJheUZvclNvcnQuc29ydChcbiAgICAgICAgICAgIChhLCBiKSA9PlxuICAgICAgICAgICAgICAoYj8uY3JlYXRlZEF0ID8gbmV3IERhdGUoYj8uY3JlYXRlZEF0KT8uZ2V0VGltZSgpIDogbmV3IERhdGUoKS5nZXRUaW1lKCkpIC1cbiAgICAgICAgICAgICAgKGE/LmNyZWF0ZWRBdCA/IG5ldyBEYXRlKGE/LmNyZWF0ZWRBdCk/LmdldFRpbWUoKSA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpKVxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIG9uIGxvYWRpbmcgb2JqZWN0cycsIGVycik7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgdXBkYXRlIHByb3BlcnR5IGlzIHRydWUsIHRoZW4gc2V0IHRoZSBzZWxlY3RlZElkIHByb3BlcnR5IHRvIHRoZSBpZCBvZiB0aGUgb2JqZWN0IHBhc3NlZCBpbiwgYW5kIGVtaXQgdGhlXG4gICAqIHNlbGVjdGVkSWQgcHJvcGVydHlcbiAgICovXG4gIHNlbGVjdElkKG9iamVjdDogYW55KSB7XG4gICAgaWYgKCFvYmplY3QpIHtcbiAgICAgIHRoaXMuY3JlYXRlTW9kZSA9IGZhbHNlO1xuICAgICAgdGhpcy5jcmVhdGVNb2RlQ2hhbmdlZC5lbWl0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy51cGRhdGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZCA9IG9iamVjdFsnaWQnXTtcbiAgICAgIHRoaXMuaWRTZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWRJZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIGEgc3RyaW5nLCBjYXBpdGFsaXplcyB0aGUgZmlyc3QgbGV0dGVyLCBhbmQgcmV0dXJucyB0aGUgbW9kaWZpZWQgc3RyaW5nXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBzdHJpbmcgdG8gY2FwaXRhbGl6ZS5cbiAgICogQHJldHVybnMgVGhlIGZpcnN0IGxldHRlciBvZiB0aGUgc3RyaW5nIGlzIGJlaW5nIGNhcGl0YWxpemVkIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIGlzIGJlaW5nIHJldHVybmVkLlxuICAgKi9cbiAgY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zbGljZSgxKTtcbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cIiFzZWxlY3RlZElkICYmICFjcmVhdGVNb2RlXCI+XG4gIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItNFwiPlxuICAgIDxoMiAqbmdJZj1cIm1vZGVsTmFtZVwiPlxuICAgICAge3sgY29uZmlnPy5wbHVyYWwgPyBjb25maWc/LnBsdXJhbCA6IGNvbmZpZz8ubGFiZWwgPyBjb25maWc/LmxhYmVsIDogY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKG1vZGVsTmFtZSkgKyAncycgfX1cbiAgICA8L2gyPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImNyZWF0ZU5ld09iamVjdCgpXCIgKm5nSWY9XCJjcmVhdGVcIj5FcnN0ZWxsZW48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWhvdmVyIHRhYmxlLXJlc3BvbnNpdmUgYmctd2hpdGVcIj5cbiAgICA8dGhlYWQ+XG4gICAgICA8dHI+XG4gICAgICAgIDx0aCBzY29wZT1cImNvbFwiICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBhdmFpbGFibGVGaWVsZHNcIj5cbiAgICAgICAgICB7eyB0YWJsZUZpZWxkc1tmaWVsZF0/LmxhYmVsID8gdGFibGVGaWVsZHNbZmllbGRdPy5sYWJlbCA6IGNhcGl0YWxpemVGaXJzdExldHRlcihmaWVsZCkgfX1cbiAgICAgICAgPC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cbiAgICA8dGJvZHk+XG4gICAgICA8dHIgKm5nRm9yPVwibGV0IG9iamVjdCBvZiBvYmplY3RzXCI+XG4gICAgICAgIDx0ZCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGF2YWlsYWJsZUZpZWxkc1wiIChjbGljayk9XCJzZWxlY3RJZChvYmplY3QpXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYmxlRmllbGRzW2ZpZWxkXT8uZGF0ZUZvcm1hdFwiPlxuICAgICAgICAgICAge3sgb2JqZWN0W2ZpZWxkXSB8IGRhdGU6IHRhYmxlRmllbGRzW2ZpZWxkXT8uZGF0ZUZvcm1hdCB9fSBVaHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFibGVGaWVsZHNbZmllbGRdPy5kYXRlRm9ybWF0XCI+XG4gICAgICAgICAgICB7eyBvYmplY3RbZmllbGRdIH19XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvdGJvZHk+XG4gIDwvdGFibGU+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cInctMTAwXCIgKm5nSWY9XCJzZWxlY3RlZElkIHx8IGNyZWF0ZU1vZGVcIj5cbiAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IG1iLTNcIiAoY2xpY2spPVwic2VsZWN0SWQoJycpXCI+WnVyw7xjazwvYnV0dG9uPlxuICA8YmFzZS1tb2RlbC1mb3JtXG4gICAgW21vZGVsTmFtZV09XCJtb2RlbE5hbWVcIlxuICAgIFtsYWJlbF09XCJjb25maWc/LmxhYmVsXCJcbiAgICBbY29uZmlnXT1cImZpZWxkQ29uZmlnXCJcbiAgICBbbG9nZ2luZ109XCJsb2dnaW5nXCJcbiAgICBbaWRdPVwic2VsZWN0ZWRJZFwiXG4gICAgKGZpbmlzaGVkKT1cInNlbGVjdElkKCcnKVwiXG4gICAgW2RlbGV0ZV09XCJkZWxldGVcIlxuICAgIFtkdXBsaWNhdGVdPVwiZHVwbGljYXRlXCJcbiAgPjwvYmFzZS1tb2RlbC1mb3JtPlxuPC9kaXY+XG4iXX0=
@@ -50,7 +50,7 @@ export class ProfileComponent {
50
50
  }
51
51
  }
52
52
  ProfileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ProfileComponent, deps: [{ token: i1.AuthService }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
53
- ProfileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: ProfileComponent, selector: "base-profile", inputs: { config: "config" }, ngImport: i0, template: "<div class=\"container\">\n <div class=\"py-5\">\n <base-model-form\n [id]=\"currentUser?.id\"\n [modelName]=\"'user'\"\n [label]=\"'Mein Profil'\"\n [config]=\"profileConfig || {}\"\n [delete]=\"false\"\n ></base-model-form>\n </div>\n</div>\n", styles: [""], components: [{ type: i3.ModelFormComponent, selector: "base-model-form", inputs: ["modelName", "label", "id", "delete", "logging", "config"], outputs: ["finished"] }] });
53
+ ProfileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: ProfileComponent, selector: "base-profile", inputs: { config: "config" }, ngImport: i0, template: "<div class=\"container\">\n <div class=\"py-5\">\n <base-model-form\n [id]=\"currentUser?.id\"\n [modelName]=\"'user'\"\n [label]=\"'Mein Profil'\"\n [config]=\"profileConfig || {}\"\n [delete]=\"false\"\n ></base-model-form>\n </div>\n</div>\n", styles: [""], components: [{ type: i3.ModelFormComponent, selector: "base-model-form", inputs: ["modelName", "label", "id", "delete", "duplicate", "logging", "config"], outputs: ["finished"] }] });
54
54
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ProfileComponent, decorators: [{
55
55
  type: Component,
56
56
  args: [{ selector: 'base-profile', template: "<div class=\"container\">\n <div class=\"py-5\">\n <base-model-form\n [id]=\"currentUser?.id\"\n [modelName]=\"'user'\"\n [label]=\"'Mein Profil'\"\n [config]=\"profileConfig || {}\"\n [delete]=\"false\"\n ></base-model-form>\n </div>\n</div>\n", styles: [""] }]