nuxeo-development-framework 4.3.1 → 4.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/nuxeo-development-framework.umd.js +4365 -3037
- package/bundles/nuxeo-development-framework.umd.js.map +1 -1
- package/esm2015/lib/components/charts/chart.const.js +3 -0
- package/esm2015/lib/components/charts/chart.token.js +3 -0
- package/esm2015/lib/components/charts/charts.module.js +19 -0
- package/esm2015/lib/components/charts/components/base-chart.component.js +44 -0
- package/esm2015/lib/components/charts/components/chart.component.js +135 -0
- package/esm2015/lib/components/charts/components/data-chart.component.js +169 -0
- package/esm2015/lib/components/charts/components/index.js +4 -0
- package/esm2015/lib/components/charts/defaults/bar.js +18 -0
- package/esm2015/lib/components/charts/defaults/doughnut.js +18 -0
- package/esm2015/lib/components/charts/defaults/index.js +5 -0
- package/esm2015/lib/components/charts/defaults/line.js +36 -0
- package/esm2015/lib/components/charts/defaults/pie.js +20 -0
- package/esm2015/lib/components/charts/index.js +10 -0
- package/esm2015/lib/components/charts/models/index.js +5 -0
- package/esm2015/lib/components/charts/models/options.js +2 -0
- package/esm2015/lib/components/charts/models/plugins-options.js +2 -0
- package/esm2015/lib/components/charts/models/response.js +2 -0
- package/esm2015/lib/components/charts/models/statistic-request-config.js +2 -0
- package/esm2015/lib/components/charts/plugins/doughnut-center-text.js +25 -0
- package/esm2015/lib/components/charts/plugins/doughnut-empty-state.js +34 -0
- package/esm2015/lib/components/charts/plugins/index.js +4 -0
- package/esm2015/lib/components/charts/plugins/legend-margin.js +16 -0
- package/esm2015/lib/components/charts/services/index.js +2 -0
- package/esm2015/lib/components/charts/services/statistic.service.js +75 -0
- package/esm2015/lib/components/charts/utility/colors.js +79 -0
- package/esm2015/lib/components/charts/utility/common.js +7 -0
- package/esm2015/lib/components/charts/utility/index.js +3 -0
- package/esm2015/lib/components/comments/comments.module.js +9 -5
- package/esm2015/lib/components/comments/components/comment-item/comment-item.component.js +30 -23
- package/esm2015/lib/components/comments/components/edit-delete-modal/edit-delete-modal.component.js +28 -34
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.js +22 -22
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-create-form/correspondence-relation-create-form.component.js +16 -18
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-list/correspondence-relation-list.component.js +6 -6
- package/esm2015/lib/components/correspondence-relation/components/versions/versions.component.js +3 -2
- package/esm2015/lib/components/correspondence-relation/correspondence-relation.module.js +33 -29
- package/esm2015/lib/components/correspondence-relation/services/correspondence-realation.service.js +32 -24
- package/esm2015/lib/components/diagrams/components/connection-label.component.js +1 -1
- package/esm2015/lib/components/diagrams/directive/diagram.directive.js +2 -3
- package/esm2015/lib/components/diagrams/editor/customize.js +11 -14
- package/esm2015/lib/components/diagrams/editor/overrides/connection-path.transformers.js +21 -34
- package/esm2015/lib/components/diagrams/editor/path-plugin.js +11 -10
- package/esm2015/lib/components/diagrams/models/base-node.model.js +2 -1
- package/esm2015/lib/components/diagrams/models/connection.model.js +1 -1
- package/esm2015/lib/components/diagrams/types/common.type.js +1 -1
- package/esm2015/lib/components/diagrams/types/diagram-config.type.js +1 -1
- package/esm2015/lib/components/diagrams/types/node-definition.js +1 -1
- package/esm2015/lib/components/diagrams/utilities/random.js +9 -3
- package/esm2015/lib/components/documents/components/document-list/documents-list.component.js +9 -11
- package/esm2015/lib/components/documents/components/document-upload/document-upload.component.js +17 -7
- package/esm2015/lib/components/documents/components/documents/documents.component.js +1 -1
- package/esm2015/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.js +45 -40
- package/esm2015/lib/components/dynamic-chart/dynamic-chart.module.js +21 -17
- package/esm2015/lib/components/dynamic-chart/services/chart-data.service.js +98 -92
- package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.js +22 -10
- package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer.module.js +8 -4
- package/esm2015/lib/components/dynamic-form/components/department-form/department-form.component.js +28 -29
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/dynamic-form-department.component.js +16 -3
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/services/department-management.service.js +26 -18
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-textarea/dynamic-form-textarea.component.js +2 -2
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select.component.js +4 -2
- package/esm2015/lib/components/dynamic-form/dynamic-form.module.js +13 -10
- package/esm2015/lib/components/dynamic-search/dynamic-search/dynamic-search.component.js +3 -3
- package/esm2015/lib/components/dynamic-table/dynamic-table/dynamic-table.component.js +68 -29
- package/esm2015/lib/components/file-manger/components/add-to-collection/add-to-collection.component.js +60 -42
- package/esm2015/lib/components/file-manger/components/copy/copy.component.js +66 -36
- package/esm2015/lib/components/file-manger/components/create-directory/create-directory.component.js +40 -13
- package/esm2015/lib/components/file-manger/components/create-modal/create-modal.component.js +238 -200
- package/esm2015/lib/components/file-manger/components/creation-type/creation-type.component.js +14 -12
- package/esm2015/lib/components/file-manger/components/delete/delete.component.js +49 -20
- package/esm2015/lib/components/file-manger/components/folder-modal/folder-modal.component.js +45 -43
- package/esm2015/lib/components/file-manger/components/loan-request/loan-request.component.js +63 -36
- package/esm2015/lib/components/file-manger/components/move/move.component.js +61 -31
- package/esm2015/lib/components/file-manger/components/publish-dialog/publish-dialog.component.js +81 -81
- package/esm2015/lib/components/file-manger/components/rename/rename.component.js +58 -30
- package/esm2015/lib/components/file-manger/components/scan-modal/scan-modal.component.js +99 -66
- package/esm2015/lib/components/file-manger/components/share-dialog/share-dialog.component.js +95 -75
- package/esm2015/lib/components/file-manger/components/template-modal/template-modal.component.js +15 -11
- package/esm2015/lib/components/file-manger/components/transfer-doc/transfer-doc.component.js +54 -23
- package/esm2015/lib/components/file-manger/components/update-modal/update-modal.component.js +24 -24
- package/esm2015/lib/components/file-manger/file-manager.abstract.js +266 -264
- package/esm2015/lib/components/file-manger/file-manger.module.js +39 -35
- package/esm2015/lib/components/filter/filter/filter.component.js +1 -1
- package/esm2015/lib/components/notifications/components/base-notifications.component.js +2 -16
- package/esm2015/lib/components/notifications/components/notification-item/notification-item.component.js +3 -3
- package/esm2015/lib/components/notifications/components/notifications-button/notifications-button.component.js +24 -4
- package/esm2015/lib/components/notifications/containers/notifications-settings-container/notifications-settings-container.component.js +3 -2
- package/esm2015/lib/components/notifications/models/notification-message.mode.js +1 -1
- package/esm2015/lib/components/notifications/models/notifications-list-options.js +1 -1
- package/esm2015/lib/components/notifications/services/notifications.service.js +23 -17
- package/esm2015/lib/components/notifications/services/socket.service.js +13 -5
- package/esm2015/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.js +107 -90
- package/esm2015/lib/components/permissions/permissions/permissions.component.js +100 -57
- package/esm2015/lib/components/permissions/permissions-template/permissions-template.component.js +36 -52
- package/esm2015/lib/components/permissions/permissions.module.js +23 -7
- package/esm2015/lib/components/select-users-by-department/select-users-by-departments/select-users-by-departments.component.js +1 -1
- package/esm2015/lib/components/spell-checker-field/spell-checker-field.module.js +37 -0
- package/esm2015/lib/components/spell-checker-field/spell-checker-text-field/spell-checker-text-field.component.js +88 -0
- package/esm2015/lib/components/table/dynamic-component.js +59 -0
- package/esm2015/lib/components/table/page-sizes-list/page-sizes-list.component.js +38 -0
- package/esm2015/lib/components/table/table/table.component.js +39 -21
- package/esm2015/lib/components/table/table.module.js +22 -18
- package/esm2015/lib/components/vocabulary/services/vocabulary-api.service.js +11 -6
- package/esm2015/lib/core/services/callApi/call-api.service.js +23 -6
- package/esm2015/lib/shared/components/base/base-selector.component.js +1 -1
- package/esm2015/lib/shared/components/base/base.component.js +5 -5
- package/esm2015/lib/shared/components/nuxeo-dialog/confirmation/ndf-confirmation-dialog.component.js +1 -1
- package/esm2015/lib/shared/components/nuxeo-dialog/nuxeo-dialog.module.js +8 -4
- package/esm2015/lib/shared/components/nuxeo-dialog/nuxeo.dialog.js +11 -7
- package/esm2015/lib/shared/services/base/http-base.service.js +10 -19
- package/esm2015/lib/shared-services/dialog-mangment.service.js +66 -21
- package/esm2015/lib/shared-services/shared-docs.service.js +20 -26
- package/esm2015/public-api.js +8 -2
- package/fesm2015/nuxeo-development-framework.js +3555 -2277
- package/fesm2015/nuxeo-development-framework.js.map +1 -1
- package/lib/components/charts/chart.const.d.ts +2 -0
- package/lib/components/charts/chart.token.d.ts +8 -0
- package/lib/components/charts/charts.module.d.ts +9 -0
- package/lib/components/charts/components/base-chart.component.d.ts +21 -0
- package/lib/components/charts/components/chart.component.d.ts +28 -0
- package/lib/components/charts/components/data-chart.component.d.ts +39 -0
- package/lib/components/charts/components/index.d.ts +3 -0
- package/lib/components/charts/defaults/bar.d.ts +2 -0
- package/lib/components/charts/defaults/doughnut.d.ts +2 -0
- package/lib/components/charts/defaults/index.d.ts +4 -0
- package/lib/components/charts/defaults/line.d.ts +2 -0
- package/lib/components/charts/defaults/pie.d.ts +2 -0
- package/lib/components/charts/index.d.ts +9 -0
- package/lib/components/charts/models/index.d.ts +4 -0
- package/lib/components/charts/models/options.d.ts +12 -0
- package/lib/components/charts/models/plugins-options.d.ts +18 -0
- package/lib/components/charts/models/response.d.ts +5 -0
- package/lib/components/charts/models/statistic-request-config.d.ts +30 -0
- package/lib/components/charts/plugins/doughnut-center-text.d.ts +2 -0
- package/lib/components/charts/plugins/doughnut-empty-state.d.ts +2 -0
- package/lib/components/charts/plugins/index.d.ts +3 -0
- package/lib/components/charts/plugins/legend-margin.d.ts +2 -0
- package/lib/components/charts/services/index.d.ts +1 -0
- package/lib/components/charts/services/statistic.service.d.ts +23 -0
- package/lib/components/charts/utility/colors.d.ts +11 -0
- package/lib/components/charts/utility/common.d.ts +4 -0
- package/lib/components/charts/utility/index.d.ts +2 -0
- package/lib/components/comments/comments.module.d.ts +2 -1
- package/lib/components/comments/components/comment-item/comment-item.component.d.ts +3 -1
- package/lib/components/comments/components/edit-delete-modal/edit-delete-modal.component.d.ts +8 -5
- package/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.d.ts +8 -8
- package/lib/components/correspondence-relation/components/correspondence-relation-create-form/correspondence-relation-create-form.component.d.ts +5 -5
- package/lib/components/correspondence-relation/correspondence-relation.module.d.ts +3 -2
- package/lib/components/diagrams/editor/customize.d.ts +7 -7
- package/lib/components/diagrams/editor/overrides/connection-path.transformers.d.ts +2 -5
- package/lib/components/diagrams/models/base-node.model.d.ts +1 -1
- package/lib/components/diagrams/models/connection.model.d.ts +2 -1
- package/lib/components/diagrams/types/common.type.d.ts +4 -0
- package/lib/components/diagrams/types/diagram-config.type.d.ts +7 -7
- package/lib/components/diagrams/types/node-definition.d.ts +1 -0
- package/lib/components/diagrams/utilities/random.d.ts +1 -1
- package/lib/components/documents/components/document-upload/document-upload.component.d.ts +3 -1
- package/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.d.ts +11 -10
- package/lib/components/dynamic-chart/dynamic-chart.module.d.ts +5 -6
- package/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.d.ts +6 -2
- package/lib/components/dynamic-fields-renderer/dynamic-fields-renderer.module.d.ts +2 -1
- package/lib/components/dynamic-form/components/department-form/department-form.component.d.ts +4 -4
- package/lib/components/dynamic-form/components/dynamic-form-department/dynamic-form-department.component.d.ts +5 -1
- package/lib/components/dynamic-form/components/dynamic-form-department/services/department-management.service.d.ts +3 -1
- package/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select.component.d.ts +5 -1
- package/lib/components/dynamic-form/dynamic-form.module.d.ts +2 -1
- package/lib/components/dynamic-table/dynamic-table/dynamic-table.component.d.ts +29 -11
- package/lib/components/file-manger/components/add-to-collection/add-to-collection.component.d.ts +11 -5
- package/lib/components/file-manger/components/copy/copy.component.d.ts +11 -4
- package/lib/components/file-manger/components/create-directory/create-directory.component.d.ts +9 -4
- package/lib/components/file-manger/components/create-modal/create-modal.component.d.ts +13 -19
- package/lib/components/file-manger/components/creation-type/creation-type.component.d.ts +6 -4
- package/lib/components/file-manger/components/delete/delete.component.d.ts +11 -4
- package/lib/components/file-manger/components/folder-modal/folder-modal.component.d.ts +9 -11
- package/lib/components/file-manger/components/loan-request/loan-request.component.d.ts +11 -5
- package/lib/components/file-manger/components/move/move.component.d.ts +11 -4
- package/lib/components/file-manger/components/publish-dialog/publish-dialog.component.d.ts +12 -10
- package/lib/components/file-manger/components/rename/rename.component.d.ts +11 -5
- package/lib/components/file-manger/components/scan-modal/scan-modal.component.d.ts +9 -8
- package/lib/components/file-manger/components/share-dialog/share-dialog.component.d.ts +6 -7
- package/lib/components/file-manger/components/template-modal/template-modal.component.d.ts +4 -3
- package/lib/components/file-manger/components/transfer-doc/transfer-doc.component.d.ts +11 -4
- package/lib/components/file-manger/components/update-modal/update-modal.component.d.ts +9 -8
- package/lib/components/file-manger/file-manager.abstract.d.ts +24 -22
- package/lib/components/file-manger/file-manger.module.d.ts +2 -1
- package/lib/components/notifications/components/base-notifications.component.d.ts +2 -8
- package/lib/components/notifications/components/notification-item/notification-item.component.d.ts +1 -1
- package/lib/components/notifications/components/notifications-button/notifications-button.component.d.ts +4 -1
- package/lib/components/notifications/models/notification-message.mode.d.ts +1 -0
- package/lib/components/notifications/models/notifications-list-options.d.ts +4 -0
- package/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.d.ts +8 -6
- package/lib/components/permissions/permissions/permissions.component.d.ts +3 -1
- package/lib/components/permissions/permissions-template/permissions-template.component.d.ts +3 -3
- package/lib/components/permissions/permissions.module.d.ts +2 -1
- package/lib/components/spell-checker-field/spell-checker-field.module.d.ts +10 -0
- package/lib/components/spell-checker-field/spell-checker-text-field/spell-checker-text-field.component.d.ts +24 -0
- package/lib/components/table/dynamic-component.d.ts +20 -0
- package/lib/components/table/page-sizes-list/page-sizes-list.component.d.ts +15 -0
- package/lib/components/table/table/table.component.d.ts +15 -6
- package/lib/components/table/table.module.d.ts +14 -10
- package/lib/components/vocabulary/services/vocabulary-api.service.d.ts +2 -2
- package/lib/core/services/callApi/call-api.service.d.ts +8 -1
- package/lib/shared/components/base/base-selector.component.d.ts +4 -4
- package/lib/shared/components/base/base.component.d.ts +5 -5
- package/lib/shared/components/nuxeo-dialog/nuxeo-dialog.module.d.ts +2 -1
- package/lib/shared/components/nuxeo-dialog/nuxeo.dialog.d.ts +2 -1
- package/lib/shared/services/base/http-base.service.d.ts +3 -1
- package/lib/shared-services/dialog-mangment.service.d.ts +5 -1
- package/lib/shared-services/shared-docs.service.d.ts +3 -1
- package/package.json +3 -4
- package/public-api.d.ts +7 -1
- package/esm2015/lib/components/dynamic-chart/dynamic-single-chart/dynamic-single-chart.component.js +0 -164
- package/lib/components/dynamic-chart/dynamic-single-chart/dynamic-single-chart.component.d.ts +0 -33
package/esm2015/lib/components/file-manger/components/share-dialog/share-dialog.component.js
CHANGED
|
@@ -2,17 +2,18 @@ import { Component, Inject, ViewEncapsulation } from '@angular/core';
|
|
|
2
2
|
import { FormControl, Validators } from '@angular/forms';
|
|
3
3
|
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
4
4
|
import { combineLatest, of, Subject } from 'rxjs';
|
|
5
|
-
import { switchMap, takeUntil } from 'rxjs/operators';
|
|
5
|
+
import { switchMap, takeUntil, tap } from 'rxjs/operators';
|
|
6
6
|
import { UserPreferenceValues } from '../../../../core/services/user/user-preferences.service';
|
|
7
7
|
import { ConfirmationDialogComponent } from '../../../confirmation-dialog/confirmation-dialog/confirmation-dialog.component';
|
|
8
|
+
import { BaseDialogComponent } from '../../../../shared/components/base/base-dialog.component';
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
10
|
import * as i1 from "@angular/material/dialog";
|
|
10
11
|
import * as i2 from "@angular/forms";
|
|
11
12
|
import * as i3 from "../../../../shared-services/shared-docs.service";
|
|
12
13
|
import * as i4 from "../../../custom-toastr/services/custom-toastr.service";
|
|
13
|
-
import * as i5 from "../../../../core/services/
|
|
14
|
-
import * as i6 from "../../../../core/services/
|
|
15
|
-
import * as i7 from "../../../../
|
|
14
|
+
import * as i5 from "../../../../core/services/nuxeo/nuxeo.service";
|
|
15
|
+
import * as i6 from "../../../../core/services/user/user-preferences.service";
|
|
16
|
+
import * as i7 from "../../../../shared/components/nuxeo-dialog/nuxeo.dialog";
|
|
16
17
|
import * as i8 from "../../../select-users-by-department/select-users-by-departments/select-users-by-departments.component";
|
|
17
18
|
import * as i9 from "@ng-select/ng-select";
|
|
18
19
|
import * as i10 from "@angular/material/icon";
|
|
@@ -23,16 +24,16 @@ import * as i14 from "@angular/material/tooltip";
|
|
|
23
24
|
import * as i15 from "../../../../directive/permissions/permissions.directive";
|
|
24
25
|
import * as i16 from "@ngx-translate/core";
|
|
25
26
|
import * as i17 from "../../../../pipes/localized-date.pipe";
|
|
26
|
-
export class ShareDialogComponent {
|
|
27
|
-
constructor(data, dialogRef, dialog, fb, shared, tosterService,
|
|
28
|
-
var _a, _b, _c;
|
|
27
|
+
export class ShareDialogComponent extends BaseDialogComponent {
|
|
28
|
+
constructor(data, dialogRef, dialog, fb, shared, tosterService, nuxeoService, userPreferenceService, injector) {
|
|
29
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
30
|
+
super(injector);
|
|
29
31
|
this.data = data;
|
|
30
32
|
this.dialogRef = dialogRef;
|
|
31
33
|
this.dialog = dialog;
|
|
32
34
|
this.fb = fb;
|
|
33
35
|
this.shared = shared;
|
|
34
36
|
this.tosterService = tosterService;
|
|
35
|
-
this.translateService = translateService;
|
|
36
37
|
this.nuxeoService = nuxeoService;
|
|
37
38
|
this.userPreferenceService = userPreferenceService;
|
|
38
39
|
this.selectedUsers = [];
|
|
@@ -49,54 +50,81 @@ export class ShareDialogComponent {
|
|
|
49
50
|
this.rights = [];
|
|
50
51
|
this.copied = false;
|
|
51
52
|
this.shareableUrl = '';
|
|
52
|
-
this.isArabic = false;
|
|
53
53
|
this.onDestroy$ = new Subject();
|
|
54
|
+
this.share = () => {
|
|
55
|
+
if (this.shareForm.invalid) {
|
|
56
|
+
alert(this.translateService.instant('share.select_user_to_share'));
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
this.allowUsersToShare = [];
|
|
60
|
+
if (this.selectedItem.entity.properties.secrecyLevel &&
|
|
61
|
+
this.selectedItem.entity.properties.secrecyLevel != 'Normal') {
|
|
62
|
+
return this.checkIfCanViewSecret().pipe(tap((res) => {
|
|
63
|
+
if (!res.length) {
|
|
64
|
+
this.selectedUsers.forEach((element) => {
|
|
65
|
+
this.allowUsersToShare.push(element.properties.username);
|
|
66
|
+
});
|
|
67
|
+
this.doShare(this.allowUsersToShare);
|
|
68
|
+
}
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
this.selectedUsers.forEach((element) => {
|
|
73
|
+
this.allowUsersToShare.push(element.properties.username);
|
|
74
|
+
});
|
|
75
|
+
return of(this.allowUsersToShare).pipe(tap((allowUsersToShare) => this.doShare(allowUsersToShare)));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return of(null);
|
|
79
|
+
};
|
|
54
80
|
if (this.userPreferenceService) {
|
|
55
81
|
this.userPreferenceService
|
|
56
82
|
.select(UserPreferenceValues.Locale)
|
|
57
83
|
.pipe(takeUntil(this.onDestroy$))
|
|
58
84
|
.subscribe((locale) => {
|
|
59
85
|
this.locale = locale;
|
|
60
|
-
(this.locale === 'en') ? this.isArabic = false : this.isArabic = true;
|
|
61
86
|
});
|
|
62
87
|
}
|
|
63
88
|
this.rights = [
|
|
64
89
|
{
|
|
65
|
-
label:
|
|
66
|
-
value:
|
|
90
|
+
label: this.locale === 'en' ? 'Read' : 'قراءة',
|
|
91
|
+
value: 'Read'
|
|
67
92
|
},
|
|
68
93
|
{
|
|
69
|
-
label:
|
|
70
|
-
value:
|
|
94
|
+
label: this.locale === 'en' ? 'ReadWrite' : 'قراءة و تعديل',
|
|
95
|
+
value: 'ReadWrite'
|
|
71
96
|
}
|
|
72
97
|
];
|
|
73
|
-
this.currentUser =
|
|
98
|
+
this.currentUser =
|
|
99
|
+
(_c = (_b = (_a = this.nuxeoService) === null || _a === void 0 ? void 0 : _a.nuxeoClient) === null || _b === void 0 ? void 0 : _b.user) === null || _c === void 0 ? void 0 : _c.properties.username;
|
|
74
100
|
this.selectedItem = data.selectedItem;
|
|
75
|
-
if (this.selectedItem
|
|
101
|
+
if (((_d = this.selectedItem) === null || _d === void 0 ? void 0 : _d.entity.type) === 'Folder' ||
|
|
102
|
+
((_e = this.selectedItem) === null || _e === void 0 ? void 0 : _e.entity.type) === 'DmsFolder') {
|
|
76
103
|
this.shareableUrl = `${window.location.protocol}//${window.location.host}/dms/files?id=${this.selectedItem.entity.uid}`;
|
|
77
104
|
}
|
|
78
105
|
else {
|
|
79
|
-
this.selectedItemType =
|
|
80
|
-
|
|
106
|
+
this.selectedItemType =
|
|
107
|
+
(_f = this.selectedItem) === null || _f === void 0 ? void 0 : _f.entity.properties['file:content']['mime-type'];
|
|
108
|
+
if ((_g = this.selectedItemType) === null || _g === void 0 ? void 0 : _g.includes('image')) {
|
|
81
109
|
this.typeToUrl = 'image';
|
|
82
110
|
}
|
|
83
|
-
else if (this.selectedItemType.includes('video')) {
|
|
111
|
+
else if ((_h = this.selectedItemType) === null || _h === void 0 ? void 0 : _h.includes('video')) {
|
|
84
112
|
this.typeToUrl = 'video';
|
|
85
113
|
}
|
|
86
114
|
else {
|
|
87
115
|
this.typeToUrl = 'file';
|
|
88
116
|
}
|
|
89
|
-
this.shareableUrl = `${window.location.protocol}//${window.location.host}/dms/share(viewer:view/${this.typeToUrl}/${this.selectedItem.entity.uid})?location=/share&formType=${this.selectedItem.entity.type}`;
|
|
117
|
+
this.shareableUrl = `${window.location.protocol}//${window.location.host}/dms/share(viewer:view/${this.typeToUrl}/${(_j = this.selectedItem) === null || _j === void 0 ? void 0 : _j.entity.uid})?location=/share&formType=${(_k = this.selectedItem) === null || _k === void 0 ? void 0 : _k.entity.type}`;
|
|
90
118
|
}
|
|
91
119
|
}
|
|
92
120
|
ngOnInit() {
|
|
93
121
|
this.shareForm = this.fb.group({
|
|
94
122
|
depAnditsUsers: new FormControl('', Validators.required),
|
|
95
|
-
rights: new FormControl('', Validators.required)
|
|
123
|
+
rights: new FormControl('', Validators.required)
|
|
96
124
|
});
|
|
97
|
-
this.shareForm.get('depAnditsUsers').valueChanges.subscribe(res => {
|
|
125
|
+
this.shareForm.get('depAnditsUsers').valueChanges.subscribe((res) => {
|
|
98
126
|
if (res === null || res === void 0 ? void 0 : res.users) {
|
|
99
|
-
|
|
127
|
+
JSON.stringify(this.selectedUsers) != JSON.stringify(res.users)
|
|
100
128
|
? this.setUser(res.users)
|
|
101
129
|
: null;
|
|
102
130
|
}
|
|
@@ -105,8 +133,9 @@ export class ShareDialogComponent {
|
|
|
105
133
|
this.getMyShare();
|
|
106
134
|
}
|
|
107
135
|
removeFromForbiddenArr(event) {
|
|
108
|
-
|
|
109
|
-
this.forbiddenUsers.splice(this.forbiddenUsers.indexOf(event.label), 1)
|
|
136
|
+
this.forbiddenUsers.includes(event.label)
|
|
137
|
+
? this.forbiddenUsers.splice(this.forbiddenUsers.indexOf(event.label), 1)
|
|
138
|
+
: '';
|
|
110
139
|
}
|
|
111
140
|
copy() {
|
|
112
141
|
this.copied = true;
|
|
@@ -128,7 +157,11 @@ export class ShareDialogComponent {
|
|
|
128
157
|
});
|
|
129
158
|
}
|
|
130
159
|
setRight(event) {
|
|
131
|
-
|
|
160
|
+
!this.sameCurrentUser &&
|
|
161
|
+
!this.isSharedBefore.length &&
|
|
162
|
+
this.shareForm.get('rights').value
|
|
163
|
+
? (this.disabled = false)
|
|
164
|
+
: (this.disabled = true);
|
|
132
165
|
}
|
|
133
166
|
close() {
|
|
134
167
|
this.dialogRef.close();
|
|
@@ -136,7 +169,7 @@ export class ShareDialogComponent {
|
|
|
136
169
|
checkIfCanViewSecret() {
|
|
137
170
|
this.forbiddenUsers = [];
|
|
138
171
|
let arr = [];
|
|
139
|
-
this.selectedUsers.map(element => {
|
|
172
|
+
this.selectedUsers.map((element) => {
|
|
140
173
|
let context = {
|
|
141
174
|
username: element.properties.username,
|
|
142
175
|
secrecyLevel: this.selectedItem.entity.properties.secrecyLevel
|
|
@@ -146,7 +179,7 @@ export class ShareDialogComponent {
|
|
|
146
179
|
})));
|
|
147
180
|
});
|
|
148
181
|
return combineLatest(arr).pipe(switchMap((res) => {
|
|
149
|
-
res.forEach(e => {
|
|
182
|
+
res.forEach((e) => {
|
|
150
183
|
if (!e.canViewSecretFiles) {
|
|
151
184
|
this.forbiddenUsers.push(e.element.properties.fullName);
|
|
152
185
|
}
|
|
@@ -159,56 +192,35 @@ export class ShareDialogComponent {
|
|
|
159
192
|
users: users,
|
|
160
193
|
mode: this.shareForm.get('rights').value
|
|
161
194
|
};
|
|
162
|
-
this.subscriptions$.concat([
|
|
195
|
+
this.subscriptions$.concat([
|
|
196
|
+
this.shared
|
|
197
|
+
.shareDocumentWithUser(context, this.selectedItem.entity.uid)
|
|
198
|
+
.subscribe((res) => {
|
|
163
199
|
if (res)
|
|
164
|
-
this.tosterService.show('success', 'TOASTER.SUCCESS',
|
|
200
|
+
this.tosterService.show('success', 'TOASTER.SUCCESS', 'TOASTER.share_Doc_success');
|
|
165
201
|
this.depUsers = [];
|
|
166
202
|
this.shareForm.reset();
|
|
167
203
|
this.disabled = true;
|
|
168
204
|
this.getMyShare();
|
|
169
|
-
}, err => {
|
|
205
|
+
}, (err) => {
|
|
170
206
|
this.tosterService.show('error', 'TOASTER.ERROR', 'TOASTER.share_Doc_fail');
|
|
171
207
|
})
|
|
172
208
|
]);
|
|
173
209
|
}
|
|
174
|
-
share() {
|
|
175
|
-
if (this.shareForm.invalid) {
|
|
176
|
-
alert(this.translateService.instant("share.select_user_to_share"));
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
this.allowUsersToShare = [];
|
|
180
|
-
if (this.selectedItem.entity.properties.secrecyLevel
|
|
181
|
-
&& this.selectedItem.entity.properties.secrecyLevel != "Normal") {
|
|
182
|
-
this.checkIfCanViewSecret().subscribe(res => {
|
|
183
|
-
if (!res.length) {
|
|
184
|
-
this.selectedUsers.forEach(element => {
|
|
185
|
-
this.allowUsersToShare.push(element.properties.username);
|
|
186
|
-
});
|
|
187
|
-
this.doShare(this.allowUsersToShare);
|
|
188
|
-
}
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
192
|
-
this.selectedUsers.forEach(element => {
|
|
193
|
-
this.allowUsersToShare.push(element.properties.username);
|
|
194
|
-
});
|
|
195
|
-
this.doShare(this.allowUsersToShare);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
210
|
openDialog(functionToDo, username, sharedMode) {
|
|
200
211
|
let message;
|
|
201
|
-
|
|
202
|
-
|
|
212
|
+
functionToDo === 'Rem_ALL_shares'
|
|
213
|
+
? (message = 'confirmDialog.Rem_All_shares')
|
|
214
|
+
: (message = 'confirmDialog.Rem_custom_share');
|
|
203
215
|
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
|
204
216
|
width: '510px',
|
|
205
217
|
data: {
|
|
206
|
-
title: this.translateService.instant(
|
|
218
|
+
title: this.translateService.instant('confirmDialog.confirm'),
|
|
207
219
|
message: this.translateService.instant(message),
|
|
208
220
|
confirmButton: `BUTTONS.Remove`,
|
|
209
|
-
cancelButton:
|
|
221
|
+
cancelButton: 'BUTTONS.Cancel'
|
|
210
222
|
},
|
|
211
|
-
disableClose: true
|
|
223
|
+
disableClose: true
|
|
212
224
|
});
|
|
213
225
|
// const dialogRef = this.fuseConfirmationService.open(
|
|
214
226
|
// {
|
|
@@ -230,13 +242,16 @@ export class ShareDialogComponent {
|
|
|
230
242
|
// );
|
|
231
243
|
dialogRef.afterClosed().subscribe((result) => {
|
|
232
244
|
if (result) {
|
|
233
|
-
if (functionToDo ===
|
|
234
|
-
this.subscriptions$.concat([
|
|
245
|
+
if (functionToDo === 'Rem_ALL_shares') {
|
|
246
|
+
this.subscriptions$.concat([
|
|
247
|
+
this.shared
|
|
248
|
+
.removeAllSharesforDocs(this.selectedItem.entity.uid)
|
|
249
|
+
.subscribe((res) => {
|
|
235
250
|
if (res) {
|
|
236
|
-
this.tosterService.show('success', 'TOASTER.SUCCESS',
|
|
251
|
+
this.tosterService.show('success', 'TOASTER.SUCCESS', 'TOASTER.Rm_All_Shares_success');
|
|
237
252
|
this.getMyShare();
|
|
238
253
|
}
|
|
239
|
-
}, err => {
|
|
254
|
+
}, (err) => {
|
|
240
255
|
this.tosterService.show('error', 'TOASTER.ERROR', 'TOASTER.Rm_All_Shares_fail');
|
|
241
256
|
})
|
|
242
257
|
]);
|
|
@@ -247,12 +262,14 @@ export class ShareDialogComponent {
|
|
|
247
262
|
mode: sharedMode
|
|
248
263
|
};
|
|
249
264
|
this.subscriptions$.concat([
|
|
250
|
-
this.shared
|
|
265
|
+
this.shared
|
|
266
|
+
.removeCustomShare(context, this.selectedItem.entity.uid)
|
|
267
|
+
.subscribe((res) => {
|
|
251
268
|
if (res) {
|
|
252
|
-
this.tosterService.show('success', 'TOASTER.SUCCESS',
|
|
269
|
+
this.tosterService.show('success', 'TOASTER.SUCCESS', 'TOASTER.Rem_custom_share_success');
|
|
253
270
|
this.getMyShare();
|
|
254
271
|
}
|
|
255
|
-
}, err => {
|
|
272
|
+
}, (err) => {
|
|
256
273
|
this.tosterService.show('error', 'TOASTER.ERROR', 'TOASTER.Rem_custom_share_fail');
|
|
257
274
|
})
|
|
258
275
|
]);
|
|
@@ -261,12 +278,15 @@ export class ShareDialogComponent {
|
|
|
261
278
|
});
|
|
262
279
|
}
|
|
263
280
|
getMyShare() {
|
|
281
|
+
var _a;
|
|
264
282
|
this.sharedListUser = this.sharedList = [];
|
|
265
283
|
this.subscriptions$.concat([
|
|
266
|
-
this.shared
|
|
284
|
+
this.shared
|
|
285
|
+
.getSharesByMe((_a = this.selectedItem) === null || _a === void 0 ? void 0 : _a.entity.uid, true)
|
|
286
|
+
.subscribe((res) => {
|
|
267
287
|
this.sharedList = res;
|
|
268
288
|
if (this.sharedList.length) {
|
|
269
|
-
this.sharedList.forEach(element => {
|
|
289
|
+
this.sharedList.forEach((element) => {
|
|
270
290
|
this.sharedListUser.push(element.user.properties.username);
|
|
271
291
|
});
|
|
272
292
|
}
|
|
@@ -274,11 +294,11 @@ export class ShareDialogComponent {
|
|
|
274
294
|
]);
|
|
275
295
|
}
|
|
276
296
|
ngOnDestroy() {
|
|
277
|
-
this.subscriptions$.forEach(sub => sub.unsubscribe());
|
|
297
|
+
this.subscriptions$.forEach((sub) => sub.unsubscribe());
|
|
278
298
|
}
|
|
279
299
|
}
|
|
280
|
-
ShareDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ShareDialogComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: i1.MatDialog }, { token: i2.FormBuilder }, { token: i3.SharedDocsService }, { token: i4.CustomToastrService }, { token: i5.
|
|
281
|
-
ShareDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ShareDialogComponent, selector: "app-share-dialog", ngImport: i0, template: "<form [formGroup]=\"shareForm\" class=\"h-full p-5 overflow-auto\" SetRtl>\r\n\r\n <div class=\"flex flex-col justify-between h-full\">\r\n <!--Form Section-->\r\n <div class=\"add-permsion-wrapper\">\r\n <span class=\"text-gray-900 text-lg\">\r\n {{ \"share.shareDialogTitle\" | translate }}\r\n </span>\r\n <div class=\"mt-5 selectorsWrapper\">\r\n <app-select-users-by-departments\r\n formControlName=\"depAnditsUsers\"\r\n [allowMultipleUsers]= \"true\"\r\n [userLabel]=\"'share.users' | translate\"\r\n [depLabel]=\"'share.Dep' | translate\"\r\n [display]=\"'column'\">\r\n </app-select-users-by-departments>\r\n </div>\r\n <div *ngIf=\"forbiddenUsers.length\" class=\"flex\">\r\n <ng-container *ngFor=\"let p of forbiddenUsers; let i as index\">\r\n <span class=\"text-red-500 text-base\">\r\n {{p}} \r\n </span>\r\n </ng-container>\r\n <span class=\"text-red-500 text-base\">\r\n <p *ngIf=\"forbiddenUsers.length == 1\">\r\n {{ \"share.single_forbidden\" | translate }}\r\n </p>\r\n <p *ngIf=\"forbiddenUsers.length > 1\">\r\n {{ \"share.multi_forbidden\" | translate }}\r\n </p>\r\n </span>\r\n </div>\r\n <div *ngIf=\"sameCurrentUser\">\r\n <span class=\"text-red-500 text-base\">\r\n {{ \"share.shareWithLoggedInUser\" | translate }}\r\n </span>\r\n </div>\r\n <div *ngIf=\"isSharedBefore.length\" class=\"flex\">\r\n <span class=\"text-red-500 text-base\">\r\n {{ \"share.share_exists\" | translate }}\r\n <ng-container *ngFor=\"let p of isSharedBefore\">\r\n {{p}}\r\n </ng-container>\r\n {{ \"share.before\" | translate }}\r\n </span>\r\n </div>\r\n <div class=\"mt-4 rightsSelector\">\r\n <label class=\"text-base font-bold mb-0\">\r\n {{ \"share.Rights\" | translate }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <ng-select \r\n [items]=\"rights\" \r\n bindLabel=\"label\"\r\n bindValue=\"value\"\r\n [placeholder]=\"'permission.rightsPlaceholder' | translate\"\r\n formControlName=\"rights\"\r\n (change)=\"setRight($event)\"\r\n >\r\n </ng-select>\r\n </div>\r\n <div *ngIf=\"sharedList.length\" class=\"mt-4\">\r\n <div>\r\n <label class=\"text-base font-bold mb-0\">\r\n {{ \"share.fileUrl\" | translate }}\r\n </label>\r\n <div class=\"flex relative\">\r\n <input \r\n #fileUrl\r\n [value]=\"shareableUrl\"\r\n disabled\r\n class=\"appearance-none block w-full bg-accent-100 text-gray-700 border border-gray-200 rounded py-2.5 px-4 \r\n leading-tight focus:outline-none focus:bg-white focus:border-gray-500\"\r\n type=\"text\"\r\n >\r\n <button class=\"absolute pt-2.5 bg-accent-100\"\r\n [matTooltip] = \"'BUTTONS.COPY' | translate\"\r\n [ngClass]=\"(locale === 'en') ? 'right-2' : 'left-2'\"\r\n [cdkCopyToClipboard]=\"fileUrl.value\"\r\n (click)=\"copy()\">\r\n <mat-icon svgIcon=\"mat_solid:content_copy\" class=\"icon-size-6\"></mat-icon>\r\n </button>\r\n <div *ngIf=\"copied\" class=\"flex absolute justify-around w-24 -mt-10 border \r\n border-red-700 h-7 rounded bg-gray-200\"\r\n [ngClass]=\"(locale === 'en') ? 'right-0' : 'left-0'\">\r\n <div class=\"w-3 h-3 justify-center bg-gray-200 transform rotate-45 border\r\n mt-5 borders-color\">\r\n </div>\r\n <span class=\"absolute font-extralight\">{{ \"share.copied\" | translate }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!--Shares Section-->\r\n <div *ngIf=\"sharedList.length\">\r\n <div class=\"flex flex-row justify-between h-7 border-b-2 border-accent-100 mt-2\">\r\n <span class=\"text-base font-bold\">\r\n {{ \"share.shares\" | translate }}\r\n </span>\r\n <button mat-icon-button *permission=\"{name: 'canRemoveShare', entity: selectedItem.entity}\"\r\n matTooltip=\"{{'share.Rm_All_shares' | translate}}\" (click)=\"openDialog('Rem_ALL_shares')\">\r\n <mat-icon [svgIcon]=\"'heroicons_outline:trash'\"\r\n [ngClass]=\"(locale === 'en') ? 'mr-2' : 'ml-2'\"></mat-icon>\r\n </button>\r\n </div>\r\n <div class=\"h-52 overflow-y-auto\">\r\n <div class=\"flex flex-row justify-between mt-2.5\">\r\n <span class=\"w-1/2 text-base font-bold\">{{\"share.shareWith\" | translate}}</span>\r\n <span class=\"w-1/4 text-base font-bold\">{{\"share.share_date\" | translate}}</span>\r\n <span class=\"w-1/4 text-base font-bold\">{{\"share.permission\" | translate}}</span>\r\n <span> </span>\r\n </div>\r\n <ng-container *ngFor=\"let d of sharedList\">\r\n <div class=\"flex flex-row justify-between mt-2.5\">\r\n <div class=\"flex flex-row w-1/2\">\r\n <div class=\"flex-0 w-8 h-8 rounded-full overflow-hidden\">\r\n <cts-avatar [user]=\"{\r\n properties: {\r\n firstName: d.user.properties?.firstName,\r\n lastName: d.user.properties?.lastName\r\n }\r\n }\">\r\n </cts-avatar>\r\n </div>\r\n <div class=\"flex flex-col -mt-2 px-2 break-all\">\r\n <span>{{d.user.fullName}}</span>\r\n <span>{{d.user.properties.email}}</span>\r\n </div>\r\n </div>\r\n <div class=\"w-1/4 mt-1.5 break-all px-2.5\">\r\n <span>{{d.sharedDate | localizedDate:\"dd MMMM yyyy\":(isArabic? 'ar-AR' : 'en-US')}}</span>\r\n </div>\r\n <div class=\"w-1/4 mt-1.5 break-all px-4\">\r\n <span>{{\"rights.\" + d.sharedMode | translate}}</span>\r\n </div>\r\n <div class=\"mt-1.5\">\r\n <button mat-icon-button *permission=\"{name: 'canRemoveShare', entity: selectedItem.entity}\"\r\n matTooltip=\"{{'share.Rm_custom_share' | translate}}\"\r\n (click)=\"openDialog('Rem_custom_share',d.user.properties.username,d.sharedMode)\">\r\n <i class=\"ms-Icon ms-Icon--ChromeClose\" aria-hidden=\"true\"\r\n [ngClass]=\"(locale === 'en') ? 'mr-2.5' : 'ml-2.5'\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <!--Buttons Section-->\r\n <div class=\"flex flex-row justify-between mt-2 py-1\">\r\n <button class=\"submission-button\" [disabled]=\"disabled\" (click)=\"share()\">\r\n {{ \"share.shareButton\" | translate }}\r\n </button>\r\n <button class=\"cancelation-button\" (click)=\"close()\">\r\n {{ \"BUTTONS.Cancel\" | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n</form>", styles: [".share-dialog-wrapper .mat-dialog-container{overflow:hidden;padding:0!important}.share-dialog-wrapper .borders-color{--tw-border-opacity: 1;border-bottom-color:rgba(185,28,28,var(--tw-border-opacity))!important;border-right-color:rgba(185,28,28,var(--tw-border-opacity))!important}.share-dialog-wrapper .rightsSelector .ng-select-container .ng-value-container .ng-placeholder{font-size:12px;margin-top:3px}.share-dialog-wrapper .selectorsWrapper .dep-label,.share-dialog-wrapper .selectorsWrapper .users-label{@apply text-base font-bold mb-0;}\n"], components: [{ type: i8.SelectUsersByDepartmentsComponent, selector: "app-select-users-by-departments", inputs: ["display", "depLabel", "userLabel", "allowMultipleUsers"], outputs: ["formChanged"] }, { type: i9.NgSelectComponent, selector: "ng-select", inputs: ["markFirst", "dropdownPosition", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "bufferAmount", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "bindLabel", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "virtualScroll", "openOnEnter", "appendTo", "bindValue", "appearance", "maxSelectedItems", "groupBy", "groupValue", "tabIndex", "typeahead"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i11.AvatarComponent, selector: "cts-avatar", inputs: ["user"] }], directives: [{ type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i12.SetRtlDirective, selector: "[SetRtl]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i14.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltipPosition", "matTooltipDisabled", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { type: i13.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i15.PermissionsDirective, selector: "[permission]", inputs: ["permission"] }], pipes: { "translate": i16.TranslatePipe, "localizedDate": i17.LocalizedDatePipe }, encapsulation: i0.ViewEncapsulation.None });
|
|
300
|
+
ShareDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ShareDialogComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: i1.MatDialog }, { token: i2.FormBuilder }, { token: i3.SharedDocsService }, { token: i4.CustomToastrService }, { token: i5.NuxeoService }, { token: i6.UserPreferencesService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
301
|
+
ShareDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ShareDialogComponent, selector: "app-share-dialog", usesInheritance: true, ngImport: i0, template: "<ndf-nuxeo-dialog dialogTitle=\"{{ 'CREATE.SHARE' | translate }}\">\r\n\t<ng-template #contentTemplate>\r\n\t\t<form [formGroup]=\"shareForm\" class=\"h-full p-5 overflow-auto\" SetRtl>\r\n\t\t\t<div class=\"flex flex-col justify-between h-full\">\r\n\t\t\t\t<!--Form Section-->\r\n\t\t\t\t<div class=\"add-permsion-wrapper\">\r\n\t\t\t\t\t<span class=\"text-gray-900 text-lg\">\r\n\t\t\t\t\t\t{{ 'share.shareDialogTitle' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<div class=\"mt-5 selectorsWrapper\">\r\n\t\t\t\t\t\t<app-select-users-by-departments\r\n\t\t\t\t\t\t\tformControlName=\"depAnditsUsers\"\r\n\t\t\t\t\t\t\t[allowMultipleUsers]=\"true\"\r\n\t\t\t\t\t\t\t[userLabel]=\"'share.users' | translate\"\r\n\t\t\t\t\t\t\t[depLabel]=\"'share.Dep' | translate\"\r\n\t\t\t\t\t\t\t[display]=\"'column'\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t</app-select-users-by-departments>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div *ngIf=\"forbiddenUsers.length\" class=\"flex\">\r\n\t\t\t\t\t\t<ng-container *ngFor=\"let p of forbiddenUsers; let i; as: index\">\r\n\t\t\t\t\t\t\t<span class=\"text-red-500 text-base\"> {{ p }} </span>\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t<span class=\"text-red-500 text-base\">\r\n\t\t\t\t\t\t\t<p *ngIf=\"forbiddenUsers.length == 1\">\r\n\t\t\t\t\t\t\t\t{{ 'share.single_forbidden' | translate }}\r\n\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t<p *ngIf=\"forbiddenUsers.length > 1\">\r\n\t\t\t\t\t\t\t\t{{ 'share.multi_forbidden' | translate }}\r\n\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div *ngIf=\"sameCurrentUser\">\r\n\t\t\t\t\t\t<span class=\"text-red-500 text-base\">\r\n\t\t\t\t\t\t\t{{ 'share.shareWithLoggedInUser' | translate }}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div *ngIf=\"isSharedBefore.length\" class=\"flex\">\r\n\t\t\t\t\t\t<span class=\"text-red-500 text-base\">\r\n\t\t\t\t\t\t\t{{ 'share.share_exists' | translate }}\r\n\t\t\t\t\t\t\t<ng-container *ngFor=\"let p of isSharedBefore\">\r\n\t\t\t\t\t\t\t\t{{ p }}\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t{{ 'share.before' | translate }}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"mt-4 rightsSelector\">\r\n\t\t\t\t\t\t<label class=\"text-base font-bold mb-0\">\r\n\t\t\t\t\t\t\t{{ 'share.Rights' | translate }}\r\n\t\t\t\t\t\t\t<span class=\"text-danger\">*</span>\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<ng-select\r\n\t\t\t\t\t\t\t[items]=\"rights\"\r\n\t\t\t\t\t\t\tbindLabel=\"label\"\r\n\t\t\t\t\t\t\tbindValue=\"value\"\r\n\t\t\t\t\t\t\t[placeholder]=\"'permission.rightsPlaceholder' | translate\"\r\n\t\t\t\t\t\t\tformControlName=\"rights\"\r\n\t\t\t\t\t\t\t(change)=\"setRight($event)\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t</ng-select>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div *ngIf=\"sharedList.length\" class=\"mt-4\">\r\n\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t<label class=\"text-base font-bold mb-0\">\r\n\t\t\t\t\t\t\t\t{{ 'share.fileUrl' | translate }}\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t<div class=\"flex relative\">\r\n\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\t#fileUrl\r\n\t\t\t\t\t\t\t\t\t[value]=\"shareableUrl\"\r\n\t\t\t\t\t\t\t\t\tdisabled\r\n\t\t\t\t\t\t\t\t\tclass=\"appearance-none block w-full bg-accent-100 text-gray-700 border border-gray-200 rounded py-2.5 px-4 leading-tight focus:outline-none focus:bg-white focus:border-gray-500\"\r\n\t\t\t\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\tclass=\"absolute pt-2.5 bg-accent-100\"\r\n\t\t\t\t\t\t\t\t\t[matTooltip]=\"'BUTTONS.COPY' | translate\"\r\n\t\t\t\t\t\t\t\t\t[ngClass]=\"locale === 'en' ? 'right-2' : 'left-2'\"\r\n\t\t\t\t\t\t\t\t\t[cdkCopyToClipboard]=\"fileUrl.value\"\r\n\t\t\t\t\t\t\t\t\t(click)=\"copy()\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t\t\t\t\tsvgIcon=\"mat_solid:content_copy\"\r\n\t\t\t\t\t\t\t\t\t\tclass=\"icon-size-6\"\r\n\t\t\t\t\t\t\t\t\t></mat-icon>\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"copied\"\r\n\t\t\t\t\t\t\t\t\tclass=\"flex absolute justify-around w-24 -mt-10 border border-red-700 h-7 rounded bg-gray-200\"\r\n\t\t\t\t\t\t\t\t\t[ngClass]=\"locale === 'en' ? 'right-0' : 'left-0'\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\tclass=\"w-3 h-3 justify-center bg-gray-200 transform rotate-45 border mt-5 borders-color\"\r\n\t\t\t\t\t\t\t\t\t></div>\r\n\t\t\t\t\t\t\t\t\t<span class=\"absolute font-extralight\">{{\r\n\t\t\t\t\t\t\t\t\t\t'share.copied' | translate\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<!--Shares Section-->\r\n\t\t\t\t<div *ngIf=\"sharedList.length\">\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclass=\"flex flex-row justify-between h-7 border-b-2 border-accent-100 mt-2\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<span class=\"text-base font-bold\">\r\n\t\t\t\t\t\t\t{{ 'share.shares' | translate }}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\tmat-icon-button\r\n\t\t\t\t\t\t\t*permission=\"{\r\n\t\t\t\t\t\t\t\tname: 'canRemoveShare',\r\n\t\t\t\t\t\t\t\tentity: selectedItem.entity\r\n\t\t\t\t\t\t\t}\"\r\n\t\t\t\t\t\t\tmatTooltip=\"{{ 'share.Rm_All_shares' | translate }}\"\r\n\t\t\t\t\t\t\t(click)=\"openDialog('Rem_ALL_shares')\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t\t\t[svgIcon]=\"'heroicons_outline:trash'\"\r\n\t\t\t\t\t\t\t\t[ngClass]=\"locale === 'en' ? 'mr-2' : 'ml-2'\"\r\n\t\t\t\t\t\t\t></mat-icon>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"h-52 overflow-y-auto\">\r\n\t\t\t\t\t\t<div class=\"flex flex-row justify-between mt-2.5\">\r\n\t\t\t\t\t\t\t<span class=\"w-1/2 text-base font-bold\">{{\r\n\t\t\t\t\t\t\t\t'share.shareWith' | translate\r\n\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t<span class=\"w-1/4 text-base font-bold\">{{\r\n\t\t\t\t\t\t\t\t'share.share_date' | translate\r\n\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t<span class=\"w-1/4 text-base font-bold\">{{\r\n\t\t\t\t\t\t\t\t'share.permission' | translate\r\n\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t<span> </span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<ng-container *ngFor=\"let d of sharedList\">\r\n\t\t\t\t\t\t\t<div class=\"flex flex-row justify-between mt-2.5\">\r\n\t\t\t\t\t\t\t\t<div class=\"flex flex-row w-1/2\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"flex-0 w-8 h-8 rounded-full overflow-hidden\">\r\n\t\t\t\t\t\t\t\t\t\t<cts-avatar\r\n\t\t\t\t\t\t\t\t\t\t\t[user]=\"{\r\n\t\t\t\t\t\t\t\t\t\t\t\tproperties: {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfirstName: d.user.properties?.firstName,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tlastName: d.user.properties?.lastName\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}\"\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t</cts-avatar>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div class=\"flex flex-col -mt-2 px-2 break-all\">\r\n\t\t\t\t\t\t\t\t\t\t<span>{{ d.user.fullName }}</span>\r\n\t\t\t\t\t\t\t\t\t\t<span>{{ d.user.properties.email }}</span>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"w-1/4 mt-1.5 break-all px-2.5\">\r\n\t\t\t\t\t\t\t\t\t<span>{{\r\n\t\t\t\t\t\t\t\t\t\td.sharedDate\r\n\t\t\t\t\t\t\t\t\t\t\t| localizedDate\r\n\t\t\t\t\t\t\t\t\t\t\t\t: 'dd MMMM yyyy'\r\n\t\t\t\t\t\t\t\t\t\t\t\t: (isArabic ? 'ar-AR' : 'en-US')\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"w-1/4 mt-1.5 break-all px-4\">\r\n\t\t\t\t\t\t\t\t\t<span>{{ 'rights.' + d.sharedMode | translate }}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"mt-1.5\">\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\tmat-icon-button\r\n\t\t\t\t\t\t\t\t\t\t*permission=\"{\r\n\t\t\t\t\t\t\t\t\t\t\tname: 'canRemoveShare',\r\n\t\t\t\t\t\t\t\t\t\t\tentity: selectedItem.entity\r\n\t\t\t\t\t\t\t\t\t\t}\"\r\n\t\t\t\t\t\t\t\t\t\tmatTooltip=\"{{ 'share.Rm_custom_share' | translate }}\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"\r\n\t\t\t\t\t\t\t\t\t\t\topenDialog(\r\n\t\t\t\t\t\t\t\t\t\t\t\t'Rem_custom_share',\r\n\t\t\t\t\t\t\t\t\t\t\t\td.user.properties.username,\r\n\t\t\t\t\t\t\t\t\t\t\t\td.sharedMode\r\n\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<i\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"ms-Icon ms-Icon--ChromeClose\"\r\n\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\r\n\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"locale === 'en' ? 'mr-2.5' : 'ml-2.5'\"\r\n\t\t\t\t\t\t\t\t\t\t></i>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</form>\r\n\t</ng-template>\r\n\r\n\t<ng-template #actionsTemplate let-dialog=\"dialog\">\r\n\t\t<button\r\n\t\t\tclass=\"submission-button\"\r\n\t\t\t[disabled]=\"disabled\"\r\n\t\t\t(click)=\"dialog.executeAction(share)\"\r\n\t\t>\r\n\t\t\t{{ 'share.shareButton' | translate }}\r\n\t\t</button>\r\n\t</ng-template>\r\n</ndf-nuxeo-dialog>\r\n", styles: [".share-dialog-wrapper .mat-dialog-container{overflow:hidden;padding:0!important}.share-dialog-wrapper .borders-color{--tw-border-opacity: 1;border-bottom-color:rgba(185,28,28,var(--tw-border-opacity))!important;border-right-color:rgba(185,28,28,var(--tw-border-opacity))!important}.share-dialog-wrapper .rightsSelector .ng-select-container .ng-value-container .ng-placeholder{font-size:12px;margin-top:3px}.share-dialog-wrapper .selectorsWrapper .dep-label,.share-dialog-wrapper .selectorsWrapper .users-label{@apply text-base font-bold mb-0;}\n"], components: [{ type: i7.NdfNuxeoDialog, selector: "ndf-nuxeo-dialog", inputs: ["dialogTitle", "subTitle", "panelClass", "loaderMode"] }, { type: i8.SelectUsersByDepartmentsComponent, selector: "app-select-users-by-departments", inputs: ["display", "depLabel", "userLabel", "allowMultipleUsers"], outputs: ["formChanged"] }, { type: i9.NgSelectComponent, selector: "ng-select", inputs: ["markFirst", "dropdownPosition", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "bufferAmount", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "bindLabel", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "virtualScroll", "openOnEnter", "appendTo", "bindValue", "appearance", "maxSelectedItems", "groupBy", "groupValue", "tabIndex", "typeahead"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i11.AvatarComponent, selector: "cts-avatar", inputs: ["user"] }], directives: [{ type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i12.SetRtlDirective, selector: "[SetRtl]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i14.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltipPosition", "matTooltipDisabled", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { type: i13.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i15.PermissionsDirective, selector: "[permission]", inputs: ["permission"] }], pipes: { "translate": i16.TranslatePipe, "localizedDate": i17.LocalizedDatePipe }, encapsulation: i0.ViewEncapsulation.None });
|
|
282
302
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ShareDialogComponent, decorators: [{
|
|
283
303
|
type: Component,
|
|
284
304
|
args: [{
|
|
@@ -290,5 +310,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
290
310
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
291
311
|
type: Inject,
|
|
292
312
|
args: [MAT_DIALOG_DATA]
|
|
293
|
-
}] }, { type: i1.MatDialogRef }, { type: i1.MatDialog }, { type: i2.FormBuilder }, { type: i3.SharedDocsService }, { type: i4.CustomToastrService }, { type: i5.
|
|
294
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmUtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9zaGFyZS1kaWFsb2cvc2hhcmUtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9zaGFyZS1kaWFsb2cvc2hhcmUtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFxQixpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQWUsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQTJCLE1BQU0sMEJBQTBCLENBQUM7QUFFcEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS3RELE9BQU8sRUFBMEIsb0JBQW9CLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUN2SCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnRkFBZ0YsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVU3SCxNQUFNLE9BQU8sb0JBQW9CO0lBd0IvQixZQUE0QyxJQUFJLEVBQ3RDLFNBQTZDLEVBQzdDLE1BQWtCLEVBQ2xCLEVBQWUsRUFDZixNQUF5QixFQUN6QixhQUFrQyxFQUNsQyxnQkFBb0MsRUFDcEMsWUFBMEIsRUFD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QUUsQ0FBQywrQkFBK0IsQ0FBQztvQkFDNUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7aUJBQ3RDOzswQkF5QmMsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcblxyXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQ3VzdG9tVG9hc3RyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2N1c3RvbS10b2FzdHIvc2VydmljZXMvY3VzdG9tLXRvYXN0ci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy90cmFuc2xhdGlvbi90cmFuc2xhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTnV4ZW9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9udXhlby9udXhlby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclByZWZlcmVuY2VzU2VydmljZSwgVXNlclByZWZlcmVuY2VWYWx1ZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2VzL3VzZXIvdXNlci1wcmVmZXJlbmNlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29uZmlybWF0aW9uLWRpYWxvZy9jb25maXJtYXRpb24tZGlhbG9nL2NvbmZpcm1hdGlvbi1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2hhcmVkRG9jc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvc2hhcmVkLWRvY3Muc2VydmljZSc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtc2hhcmUtZGlhbG9nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2hhcmUtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zaGFyZS1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTaGFyZURpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgc2VsZWN0ZWRJdGVtOiBhbnk7XHJcbiAgc2VsZWN0ZWRJdGVtVHlwZTogYW55O1xyXG4gIHNoYXJlRm9ybTogRm9ybUdyb3VwO1xyXG4gIHNlbGVjdGVkVXNlcnMgPSBbXTtcclxuICBzdWJzY3JpcHRpb25zJDogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBteVNoYXJlZGF0YTogYW55ID0gW107XHJcbiAgc2hhcmVkTGlzdCA9IFtdO1xyXG4gIHNoYXJlZExpc3RVc2VyID0gW107XHJcbiAgZGVwVXNlcnMgPSBbXTtcclxuICBhbGxvd1VzZXJzVG9TaGFyZSA9IFtdO1xyXG4gIGZvcmJpZGRlblVzZXJzID0gW107XHJcbiAgaXNTaGFyZWRCZWZvcmUgPSBbXTtcclxuICBjdXJyZW50VXNlcjogYW55O1xyXG4gIHNhbWVDdXJyZW50VXNlciA9IGZhbHNlO1xyXG4gIGRpc2FibGVkID0gdHJ1ZTtcclxuICByaWdodHMgPSBbXTtcclxuICBjb3BpZWQgPSBmYWxzZTtcclxuICBzaGFyZWFibGVVcmwgPSAnJztcclxuICB0eXBlVG9Vcmw6IGFueTtcclxuICBpc0FyYWJpYyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgb25EZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgbG9jYWxlO1xyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YSxcclxuICAgIHByaXZhdGUgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8U2hhcmVEaWFsb2dDb21wb25lbnQ+LFxyXG4gICAgcHJpdmF0ZSBkaWFsb2cgOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgc2hhcmVkOiBTaGFyZWREb2NzU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9zdGVyU2VydmljZTogQ3VzdG9tVG9hc3RyU2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBudXhlb1NlcnZpY2U6IE51eGVvU2VydmljZSxcclxuICAgIHByaXZhdGUgdXNlclByZWZlcmVuY2VTZXJ2aWNlOiBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlKSB7XHJcbiAgICBpZiAodGhpcy51c2VyUHJlZmVyZW5jZVNlcnZpY2UpIHtcclxuICAgICAgdGhpcy51c2VyUHJlZmVyZW5jZVNlcnZpY2VcclxuICAgICAgICAuc2VsZWN0KFVzZXJQcmVmZXJlbmNlVmFsdWVzLkxvY2FsZSlcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChsb2NhbGUpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxlO1xyXG4gICAgICAgICAgKHRoaXMubG9jYWxlID09PSAnZW4nKSA/IHRoaXMuaXNBcmFiaWMgPSBmYWxzZSA6IHRoaXMuaXNBcmFiaWMgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yaWdodHMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBsYWJlbDogKHRoaXMubG9jYWxlID09PSAnZW4nKSA/IFwiUmVhZFwiIDogXCLZgtix2KfYodipXCIsXHJcbiAgICAgICAgdmFsdWU6IFwiUmVhZFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBsYWJlbDogKHRoaXMubG9jYWxlID09PSAnZW4nKSA/IFwiUmVhZFdyaXRlXCIgOiBcItmC2LHYp9ih2Kkg2Ygg2KrYudiv2YrZhFwiLFxyXG4gICAgICAgIHZhbHVlOiBcIlJlYWRXcml0ZVwiXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgICB0aGlzLmN1cnJlbnRVc2VyID0gdGhpcy5udXhlb1NlcnZpY2U/Lm51eGVvQ2xpZW50Py51c2VyPy5wcm9wZXJ0aWVzLnVzZXJuYW1lO1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBkYXRhLnNlbGVjdGVkSXRlbTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbS5lbnRpdHkudHlwZSA9PT0gXCJGb2xkZXJcIiB8fCB0aGlzLnNlbGVjdGVkSXRlbS5lbnRpdHkudHlwZSA9PT0gXCJEbXNGb2xkZXJcIikge1xyXG4gICAgICB0aGlzLnNoYXJlYWJsZVVybCA9IGAke3dpbmRvdy5sb2NhdGlvbi5wcm90b2NvbH0vLyR7d2luZG93LmxvY2F0aW9uLmhvc3R9L2Rtcy9maWxlcz9pZD0ke3RoaXMuc2VsZWN0ZWRJdGVtLmVudGl0eS51aWR9YFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1UeXBlID0gdGhpcy5zZWxlY3RlZEl0ZW0uZW50aXR5LnByb3BlcnRpZXNbJ2ZpbGU6Y29udGVudCddWydtaW1lLXR5cGUnXTtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtVHlwZS5pbmNsdWRlcygnaW1hZ2UnKSkge1xyXG4gICAgICAgIHRoaXMudHlwZVRvVXJsID0gJ2ltYWdlJ1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtVHlwZS5pbmNsdWRlcygndmlkZW8nKSkge1xyXG4gICAgICAgIHRoaXMudHlwZVRvVXJsID0gJ3ZpZGVvJ1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudHlwZVRvVXJsID0gJ2ZpbGUnXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zaGFyZWFibGVVcmwgPSBgJHt3aW5kb3cubG9jYXRpb24ucHJvdG9jb2x9Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9kbXMvc2hhcmUodmlld2VyOnZpZXcvJHt0aGlzLnR5cGVUb1VybH0vJHt0aGlzLnNlbGVjdGVkSXRlbS5lbnRpdHkudWlkfSk/bG9jYXRpb249L3NoYXJlJmZvcm1UeXBlPSR7dGhpcy5zZWxlY3RlZEl0ZW0uZW50aXR5LnR5cGV9YFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNoYXJlRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBkZXBBbmRpdHNVc2VyczogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgcmlnaHRzOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNoYXJlRm9ybS5nZXQoJ2RlcEFuZGl0c1VzZXJzJykudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICBpZiAocmVzPy51c2Vycykge1xyXG4gICAgICAgIChKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkVXNlcnMpICE9IEpTT04uc3RyaW5naWZ5KHJlcy51c2VycykpXHJcbiAgICAgICAgICA/IHRoaXMuc2V0VXNlcihyZXMudXNlcnMpXHJcbiAgICAgICAgICA6IG51bGxcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHRoaXMuc2hhcmVGb3JtLnJlc2V0KCk7XHJcbiAgICB0aGlzLmdldE15U2hhcmUoKTtcclxuICB9XHJcbiAgcmVtb3ZlRnJvbUZvcmJpZGRlbkFycihldmVudCkge1xyXG4gICAgKHRoaXMuZm9yYmlkZGVuVXNlcnMuaW5jbHVkZXMoZXZlbnQubGFiZWwpKSA/XHJcbiAgICAgIHRoaXMuZm9yYmlkZGVuVXNlcnMuc3BsaWNlKHRoaXMuZm9yYmlkZGVuVXNlcnMuaW5kZXhPZihldmVudC5sYWJlbCksIDEpIDogJyc7XHJcbiAgfVxyXG4gIGNvcHkoKSB7XHJcbiAgICB0aGlzLmNvcGllZCA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5jb3BpZWQgPSBmYWxzZTtcclxuICAgIH0sIDIwMDApXHJcbiAgfVxyXG4gIHNldFVzZXIodXNlcnMpIHtcclxuICAgIHRoaXMuaXNTaGFyZWRCZWZvcmUgPSBbXTtcclxuICAgIHRoaXMuc2FtZUN1cnJlbnRVc2VyID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdGVkVXNlcnMgPSB1c2VycztcclxuICAgIHRoaXMuc2VsZWN0ZWRVc2Vycy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgIGlmIChlbGVtZW50LnByb3BlcnRpZXMudXNlcm5hbWUgPT09IHRoaXMuY3VycmVudFVzZXIpIHtcclxuICAgICAgICB0aGlzLnNhbWVDdXJyZW50VXNlciA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc2hhcmVkTGlzdFVzZXIuaW5jbHVkZXMoZWxlbWVudC5wcm9wZXJ0aWVzLnVzZXJuYW1lKSkge1xyXG4gICAgICAgIHRoaXMuaXNTaGFyZWRCZWZvcmUucHVzaChlbGVtZW50LnByb3BlcnRpZXMuZnVsbE5hbWUpXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBzZXRSaWdodChldmVudCkge1xyXG4gICAgKCF0aGlzLnNhbWVDdXJyZW50VXNlciAmJiAhdGhpcy5pc1NoYXJlZEJlZm9yZS5sZW5ndGggJiYgdGhpcy5zaGFyZUZvcm0uZ2V0KCdyaWdodHMnKS52YWx1ZSkgPyB0aGlzLmRpc2FibGVkID0gZmFsc2UgOiB0aGlzLmRpc2FibGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIGNoZWNrSWZDYW5WaWV3U2VjcmV0KCkge1xyXG4gICAgdGhpcy5mb3JiaWRkZW5Vc2VycyA9IFtdO1xyXG4gICAgbGV0IGFyciA9IFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZFVzZXJzLm1hcChlbGVtZW50ID0+IHtcclxuICAgICAgbGV0IGNvbnRleHQgPSB7XHJcbiAgICAgICAgdXNlcm5hbWU6IGVsZW1lbnQucHJvcGVydGllcy51c2VybmFtZSxcclxuICAgICAgICBzZWNyZWN5TGV2ZWw6IHRoaXMuc2VsZWN0ZWRJdGVtLmVudGl0eS5wcm9wZXJ0aWVzLnNlY3JlY3lMZXZlbFxyXG4gICAgICB9XHJcbiAgICAgIGFyci5wdXNoKFxyXG4gICAgICAgIHRoaXMuc2hhcmVkLmNhblNlZVNlY3JldGRvY3MoY29udGV4dCkucGlwZShcclxuICAgICAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKHsgZWxlbWVudCwgLi4ucmVzIH0pXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgfSlcclxuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KGFycikucGlwZShcclxuICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHJlcy5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgICAgaWYgKCFlLmNhblZpZXdTZWNyZXRGaWxlcykge1xyXG4gICAgICAgICAgICB0aGlzLmZvcmJpZGRlblVzZXJzLnB1c2goZS5lbGVtZW50LnByb3BlcnRpZXMuZnVsbE5hbWUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICByZXR1cm4gb2YodGhpcy5mb3JiaWRkZW5Vc2VycylcclxuICAgICAgfSkpXHJcbiAgfVxyXG4gIGRvU2hhcmUodXNlcnMpIHtcclxuICAgIGxldCBjb250ZXh0ID0ge1xyXG4gICAgICB1c2VyczogdXNlcnMsXHJcbiAgICAgIG1vZGU6IHRoaXMuc2hhcmVGb3JtLmdldCgncmlnaHRzJykudmFsdWVcclxuICAgIH1cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQuY29uY2F0KFt0aGlzLnNoYXJlZC5zaGFyZURvY3VtZW50V2l0aFVzZXIoY29udGV4dCwgdGhpcy5zZWxlY3RlZEl0ZW0uZW50aXR5LnVpZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzKVxyXG4gICAgICAgIHRoaXMudG9zdGVyU2VydmljZS5zaG93KCdzdWNjZXNzJywgJ1RPQVNURVIuU1VDQ0VTUycsIFwiVE9BU1RFUi5zaGFyZV9Eb2Nfc3VjY2Vzc1wiKTtcclxuICAgICAgdGhpcy5kZXBVc2VycyA9IFtdO1xyXG4gICAgICB0aGlzLnNoYXJlRm9ybS5yZXNldCgpO1xyXG4gICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5nZXRNeVNoYXJlKCk7XHJcbiAgICB9LCBlcnIgPT4ge1xyXG4gICAgICB0aGlzLnRvc3RlclNlcnZpY2Uuc2hvdygnZXJyb3InLCAnVE9BU1RFUi5FUlJPUicsICdUT0FTVEVSLnNoYXJlX0RvY19mYWlsJyk7XHJcbiAgICB9KVxyXG4gICAgXSlcclxuICB9XHJcblxyXG4gIHNoYXJlKCkge1xyXG4gICAgaWYgKHRoaXMuc2hhcmVGb3JtLmludmFsaWQpIHtcclxuICAgICAgYWxlcnQodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXCJzaGFyZS5zZWxlY3RfdXNlcl90b19zaGFyZVwiKSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmFsbG93VXNlcnNUb1NoYXJlID0gW107XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbS5lbnRpdHkucHJvcGVydGllcy5zZWNyZWN5TGV2ZWxcclxuICAgICAgICAmJiB0aGlzLnNlbGVjdGVkSXRlbS5lbnRpdHkucHJvcGVydGllcy5zZWNyZWN5TGV2ZWwgIT0gXCJOb3JtYWxcIikge1xyXG4gICAgICAgIHRoaXMuY2hlY2tJZkNhblZpZXdTZWNyZXQoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgIGlmICghcmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcnMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmFsbG93VXNlcnNUb1NoYXJlLnB1c2goZWxlbWVudC5wcm9wZXJ0aWVzLnVzZXJuYW1lKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5kb1NoYXJlKHRoaXMuYWxsb3dVc2Vyc1RvU2hhcmUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcnMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgIHRoaXMuYWxsb3dVc2Vyc1RvU2hhcmUucHVzaChlbGVtZW50LnByb3BlcnRpZXMudXNlcm5hbWUpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5kb1NoYXJlKHRoaXMuYWxsb3dVc2Vyc1RvU2hhcmUpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW5EaWFsb2coZnVuY3Rpb25Ub0RvLCB1c2VybmFtZT8sIHNoYXJlZE1vZGU/KSB7XHJcbiAgICBsZXQgbWVzc2FnZTogYW55O1xyXG4gICAgKGZ1bmN0aW9uVG9EbyA9PT0gXCJSZW1fQUxMX3NoYXJlc1wiKSA/IG1lc3NhZ2UgPSBcImNvbmZpcm1EaWFsb2cuUmVtX0FsbF9zaGFyZXNcIlxyXG4gICAgICA6IG1lc3NhZ2UgPSBcImNvbmZpcm1EaWFsb2cuUmVtX2N1c3RvbV9zaGFyZVwiO1xyXG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCAsIHtcclxuICAgICAgd2lkdGg6ICc1MTBweCcsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcImNvbmZpcm1EaWFsb2cuY29uZmlybVwiKSxcclxuICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KG1lc3NhZ2UpLFxyXG4gICAgICAgICAgY29uZmlybUJ1dHRvbiA6IGBCVVRUT05TLlJlbW92ZWAsXHJcbiAgICAgICAgICBjYW5jZWxCdXR0b24gOiBcIkJVVFRPTlMuQ2FuY2VsXCJcclxuICAgICAgfSxcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgfSlcclxuICAgIC8vIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZnVzZUNvbmZpcm1hdGlvblNlcnZpY2Uub3BlbihcclxuICAgIC8vICAge1xyXG4gICAgLy8gICAgIGRpc21pc3NpYmxlOiB0cnVlLFxyXG4gICAgLy8gICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcImNvbmZpcm1EaWFsb2cuY29uZmlybVwiKSxcclxuICAgIC8vICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChtZXNzYWdlKSxcclxuICAgIC8vICAgICBhY3Rpb25zOiB7XHJcbiAgICAvLyAgICAgICBjb25maXJtOiB7XHJcbiAgICAvLyAgICAgICAgIHNob3c6IHRydWUsXHJcbiAgICAvLyAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcIkJVVFRPTlMuUmVtb3ZlXCIpLFxyXG4gICAgLy8gICAgICAgICBjb2xvcjogXCJ3YXJuXCJcclxuICAgIC8vICAgICAgIH0sXHJcbiAgICAvLyAgICAgICBjYW5jZWw6IHtcclxuICAgIC8vICAgICAgICAgc2hvdzogdHJ1ZSxcclxuICAgIC8vICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFwiQlVUVE9OUy5DYW5jZWxcIiksXHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9XHJcbiAgICAvLyApO1xyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIGlmIChmdW5jdGlvblRvRG8gPT09IFwiUmVtX0FMTF9zaGFyZXNcIikge1xyXG4gICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zJC5jb25jYXQoW3RoaXMuc2hhcmVkLnJlbW92ZUFsbFNoYXJlc2ZvckRvY3ModGhpcy5zZWxlY3RlZEl0ZW0uZW50aXR5LnVpZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b3N0ZXJTZXJ2aWNlLnNob3coJ3N1Y2Nlc3MnLCAnVE9BU1RFUi5TVUNDRVNTJywgXCJUT0FTVEVSLlJtX0FsbF9TaGFyZXNfc3VjY2Vzc1wiKTtcclxuICAgICAgICAgICAgICB0aGlzLmdldE15U2hhcmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSwgZXJyID0+IHtcclxuICAgICAgICAgICAgdGhpcy50b3N0ZXJTZXJ2aWNlLnNob3coJ2Vycm9yJywgJ1RPQVNURVIuRVJST1InLCAnVE9BU1RFUi5SbV9BbGxfU2hhcmVzX2ZhaWwnKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgY29udGV4dCA9IHtcclxuICAgICAgICAgICAgdXNlcjogdXNlcm5hbWUsXHJcbiAgICAgICAgICAgIG1vZGU6IHNoYXJlZE1vZGVcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQuY29uY2F0KFtcclxuICAgICAgICAgICAgdGhpcy5zaGFyZWQucmVtb3ZlQ3VzdG9tU2hhcmUoY29udGV4dCwgdGhpcy5zZWxlY3RlZEl0ZW0uZW50aXR5LnVpZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9zdGVyU2VydmljZS5zaG93KCdzdWNjZXNzJywgJ1RPQVNURVIuU1VDQ0VTUycsIFwiVE9BU1RFUi5SZW1fY3VzdG9tX3NoYXJlX3N1Y2Nlc3NcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldE15U2hhcmUoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b3N0ZXJTZXJ2aWNlLnNob3coJ2Vycm9yJywgJ1RPQVNURVIuRVJST1InLCAnVE9BU1RFUi5SZW1fY3VzdG9tX3NoYXJlX2ZhaWwnKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldE15U2hhcmUoKSB7XHJcbiAgICB0aGlzLnNoYXJlZExpc3RVc2VyID0gdGhpcy5zaGFyZWRMaXN0ID0gW107XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMkLmNvbmNhdChbXHJcbiAgICAgIHRoaXMuc2hhcmVkLmdldFNoYXJlc0J5TWUodGhpcy5zZWxlY3RlZEl0ZW0uZW50aXR5LnVpZCwgdHJ1ZSkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICB0aGlzLnNoYXJlZExpc3QgPSByZXM7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hhcmVkTGlzdC5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMuc2hhcmVkTGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNoYXJlZExpc3RVc2VyLnB1c2goZWxlbWVudC51c2VyLnByb3BlcnRpZXMudXNlcm5hbWUpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMkLmZvckVhY2goc3ViID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcclxuICB9XHJcbn1cclxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJzaGFyZUZvcm1cIiBjbGFzcz1cImgtZnVsbCBwLTUgb3ZlcmZsb3ctYXV0b1wiIFNldFJ0bD5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuIGgtZnVsbFwiPlxyXG4gICAgPCEtLUZvcm0gU2VjdGlvbi0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImFkZC1wZXJtc2lvbi13cmFwcGVyXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ncmF5LTkwMCB0ZXh0LWxnXCI+XHJcbiAgICAgICAge3sgXCJzaGFyZS5zaGFyZURpYWxvZ1RpdGxlXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibXQtNSBzZWxlY3RvcnNXcmFwcGVyXCI+XHJcbiAgICAgICAgPGFwcC1zZWxlY3QtdXNlcnMtYnktZGVwYXJ0bWVudHNcclxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRlcEFuZGl0c1VzZXJzXCJcclxuICAgICAgICAgIFthbGxvd011bHRpcGxlVXNlcnNdPSBcInRydWVcIlxyXG4gICAgICAgICAgW3VzZXJMYWJlbF09XCInc2hhcmUudXNlcnMnICB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICBbZGVwTGFiZWxdPVwiJ3NoYXJlLkRlcCcgIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgIFtkaXNwbGF5XT1cIidjb2x1bW4nXCI+XHJcbiAgICAgICAgPC9hcHAtc2VsZWN0LXVzZXJzLWJ5LWRlcGFydG1lbnRzPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cImZvcmJpZGRlblVzZXJzLmxlbmd0aFwiIGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHAgb2YgZm9yYmlkZGVuVXNlcnM7IGxldCBpIGFzIGluZGV4XCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMCB0ZXh0LWJhc2VcIj5cclxuICAgICAgICAgICAge3twfX0mbmJzcDtcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMCB0ZXh0LWJhc2VcIj5cclxuICAgICAgICAgICA8cCAqbmdJZj1cImZvcmJpZGRlblVzZXJzLmxlbmd0aCA9PSAxXCI+XHJcbiAgICAgICAgICAgIHt7IFwic2hhcmUuc2luZ2xlX2ZvcmJpZGRlblwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgIDxwICpuZ0lmPVwiZm9yYmlkZGVuVXNlcnMubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgICAgICB7eyBcInNoYXJlLm11bHRpX2ZvcmJpZGRlblwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzYW1lQ3VycmVudFVzZXJcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMCB0ZXh0LWJhc2VcIj5cclxuICAgICAgICAgIHt7IFwic2hhcmUuc2hhcmVXaXRoTG9nZ2VkSW5Vc2VyXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNTaGFyZWRCZWZvcmUubGVuZ3RoXCIgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMCB0ZXh0LWJhc2VcIj5cclxuICAgICAgICAgICAge3sgXCJzaGFyZS5zaGFyZV9leGlzdHNcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwIG9mIGlzU2hhcmVkQmVmb3JlXCI+XHJcbiAgICAgICAgICAgICAge3twfX1cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIHt7IFwic2hhcmUuYmVmb3JlXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtdC00IHJpZ2h0c1NlbGVjdG9yXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC1iYXNlIGZvbnQtYm9sZCBtYi0wXCI+XHJcbiAgICAgICAgICB7eyBcInNoYXJlLlJpZ2h0c1wiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDxuZy1zZWxlY3QgXHJcbiAgICAgICAgICBbaXRlbXNdPVwicmlnaHRzXCIgXHJcbiAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXHJcbiAgICAgICAgICBiaW5kVmFsdWU9XCJ2YWx1ZVwiXHJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3Blcm1pc3Npb24ucmlnaHRzUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJpZ2h0c1wiXHJcbiAgICAgICAgICAoY2hhbmdlKT1cInNldFJpZ2h0KCRldmVudClcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzaGFyZWRMaXN0Lmxlbmd0aFwiIGNsYXNzPVwibXQtNFwiPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LWJhc2UgZm9udC1ib2xkIG1iLTBcIj5cclxuICAgICAgICAgICAge3sgXCJzaGFyZS5maWxlVXJsXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgICAgI2ZpbGVVcmxcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwic2hhcmVhYmxlVXJsXCJcclxuICAgICAgICAgICAgICBkaXNhYmxlZFxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYXBwZWFyYW5jZS1ub25lIGJsb2NrIHctZnVsbCAgYmctYWNjZW50LTEwMCB0ZXh0LWdyYXktNzAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZCBweS0yLjUgcHgtNCBcclxuICAgICAgICAgICAgICBsZWFkaW5nLXRpZ2h0IGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpiZy13aGl0ZSBmb2N1czpib3JkZXItZ3JheS01MDBcIlxyXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWJzb2x1dGUgcHQtMi41IGJnLWFjY2VudC0xMDBcIlxyXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXSA9IFwiJ0JVVFRPTlMuQ09QWScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIihsb2NhbGUgPT09ICdlbicpICA/ICdyaWdodC0yJyA6ICdsZWZ0LTInXCJcclxuICAgICAgICAgICAgICBbY2RrQ29weVRvQ2xpcGJvYXJkXT1cImZpbGVVcmwudmFsdWVcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJjb3B5KClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cIm1hdF9zb2xpZDpjb250ZW50X2NvcHlcIiBjbGFzcz1cImljb24tc2l6ZS02XCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb3BpZWRcIiBjbGFzcz1cImZsZXggYWJzb2x1dGUganVzdGlmeS1hcm91bmQgdy0yNCAtbXQtMTAgYm9yZGVyIFxyXG4gICAgICAgICAgICBib3JkZXItcmVkLTcwMCBoLTcgcm91bmRlZCBiZy1ncmF5LTIwMFwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIihsb2NhbGUgPT09ICdlbicpICA/ICdyaWdodC0wJyA6ICdsZWZ0LTAnXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMyBoLTMganVzdGlmeS1jZW50ZXIgYmctZ3JheS0yMDAgdHJhbnNmb3JtIHJvdGF0ZS00NSBib3JkZXJcclxuICAgICAgICAgICAgICAgbXQtNSBib3JkZXJzLWNvbG9yXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhYnNvbHV0ZSBmb250LWV4dHJhbGlnaHRcIj57eyBcInNoYXJlLmNvcGllZFwiIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLVNoYXJlcyBTZWN0aW9uLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwic2hhcmVkTGlzdC5sZW5ndGhcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIGgtNyBib3JkZXItYi0yIGJvcmRlci1hY2NlbnQtMTAwIG10LTJcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYmFzZSBmb250LWJvbGRcIj5cclxuICAgICAgICAgIHt7IFwic2hhcmUuc2hhcmVzXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKnBlcm1pc3Npb249XCJ7bmFtZTogJ2NhblJlbW92ZVNoYXJlJywgZW50aXR5OiBzZWxlY3RlZEl0ZW0uZW50aXR5fVwiXHJcbiAgICAgICAgICBtYXRUb29sdGlwPVwie3snc2hhcmUuUm1fQWxsX3NoYXJlcycgfCB0cmFuc2xhdGV9fVwiIChjbGljayk9XCJvcGVuRGlhbG9nKCdSZW1fQUxMX3NoYXJlcycpXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24gW3N2Z0ljb25dPVwiJ2hlcm9pY29uc19vdXRsaW5lOnRyYXNoJ1wiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCIobG9jYWxlID09PSAnZW4nKSAgPyAnbXItMicgOiAnbWwtMidcIj48L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImgtNTIgb3ZlcmZsb3cteS1hdXRvXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIG10LTIuNVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3LTEvMiB0ZXh0LWJhc2UgZm9udC1ib2xkXCI+e3tcInNoYXJlLnNoYXJlV2l0aFwiIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInctMS80IHRleHQtYmFzZSBmb250LWJvbGRcIj57e1wic2hhcmUuc2hhcmVfZGF0ZVwiIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInctMS80IHRleHQtYmFzZSBmb250LWJvbGRcIj57e1wic2hhcmUucGVybWlzc2lvblwiIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgICAgICA8c3Bhbj4mbmJzcDs8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZCBvZiBzaGFyZWRMaXN0XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gbXQtMi41XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IHctMS8yXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtMCB3LTggaC04IHJvdW5kZWQtZnVsbCBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgIDxjdHMtYXZhdGFyIFt1c2VyXT1cIntcclxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcclxuICAgICAgICAgICAgICAgICAgZmlyc3ROYW1lOiBkLnVzZXIucHJvcGVydGllcz8uZmlyc3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgICBsYXN0TmFtZTogZC51c2VyLnByb3BlcnRpZXM/Lmxhc3ROYW1lXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgPC9jdHMtYXZhdGFyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIC1tdC0yIHB4LTIgYnJlYWstYWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57e2QudXNlci5mdWxsTmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3tkLnVzZXIucHJvcGVydGllcy5lbWFpbH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMS80IG10LTEuNSBicmVhay1hbGwgcHgtMi41XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3tkLnNoYXJlZERhdGUgIHwgbG9jYWxpemVkRGF0ZTpcImRkIE1NTU0geXl5eVwiOihpc0FyYWJpYz8gJ2FyLUFSJyA6ICdlbi1VUycpfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzQgbXQtMS41IGJyZWFrLWFsbCBweC00XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3tcInJpZ2h0cy5cIiArIGQuc2hhcmVkTW9kZSB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTEuNVwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uICpwZXJtaXNzaW9uPVwie25hbWU6ICdjYW5SZW1vdmVTaGFyZScsIGVudGl0eTogc2VsZWN0ZWRJdGVtLmVudGl0eX1cIlxyXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cInt7J3NoYXJlLlJtX2N1c3RvbV9zaGFyZScgfCB0cmFuc2xhdGV9fVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkRpYWxvZygnUmVtX2N1c3RvbV9zaGFyZScsZC51c2VyLnByb3BlcnRpZXMudXNlcm5hbWUsZC5zaGFyZWRNb2RlKVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtcy1JY29uIG1zLUljb24tLUNocm9tZUNsb3NlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIihsb2NhbGUgPT09ICdlbicpICA/ICdtci0yLjUnIDogJ21sLTIuNSdcIj48L2k+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tQnV0dG9ucyBTZWN0aW9uLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gbXQtMiBweS0xXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJzdWJtaXNzaW9uLWJ1dHRvblwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIChjbGljayk9XCJzaGFyZSgpXCI+XHJcbiAgICAgICAge3sgXCJzaGFyZS5zaGFyZUJ1dHRvblwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsYXRpb24tYnV0dG9uXCIgKGNsaWNrKT1cImNsb3NlKClcIj5cclxuICAgICAgICB7eyBcIkJVVFRPTlMuQ2FuY2VsXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9mb3JtPiJdfQ==
|
|
313
|
+
}] }, { type: i1.MatDialogRef }, { type: i1.MatDialog }, { type: i2.FormBuilder }, { type: i3.SharedDocsService }, { type: i4.CustomToastrService }, { type: i5.NuxeoService }, { type: i6.UserPreferencesService }, { type: i0.Injector }]; } });
|
|
314
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmUtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9zaGFyZS1kaWFsb2cvc2hhcmUtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9zaGFyZS1kaWFsb2cvc2hhcmUtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixTQUFTLEVBQ1QsTUFBTSxFQUlOLGlCQUFpQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRU4sV0FBVyxFQUVYLFVBQVUsRUFDVixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTixlQUFlLEVBR2YsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSzNELE9BQU8sRUFFTixvQkFBb0IsRUFDcEIsTUFBTSx5REFBeUQsQ0FBQztBQUNqRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnRkFBZ0YsQ0FBQztBQUU3SCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwREFBMEQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVMvRixNQUFNLE9BQU8sb0JBQ1osU0FBUSxtQkFBbUQ7SUF3QjNELFlBQ2lDLElBQUksRUFDNUIsU0FBNkMsRUFDN0MsTUFB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LEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7O2tIQXhVVyxvQkFBb0Isa0JBMEJ2QixlQUFlO3NHQTFCWixvQkFBb0IsK0VDekNqQyx3d1JBaU5BOzRGRHhLYSxvQkFBb0I7a0JBTmhDLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsV0FBVyxFQUFFLCtCQUErQjtvQkFDNUMsU0FBUyxFQUFFLENBQUMsK0JBQStCLENBQUM7b0JBQzVDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2lCQUNyQzs7MEJBMkJFLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcblx0Q29tcG9uZW50LFxyXG5cdEluamVjdCxcclxuXHRJbmplY3RvcixcclxuXHRPbkRlc3Ryb3ksXHJcblx0T25Jbml0LFxyXG5cdFZpZXdFbmNhcHN1bGF0aW9uXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcblx0Rm9ybUJ1aWxkZXIsXHJcblx0Rm9ybUNvbnRyb2wsXHJcblx0Rm9ybUdyb3VwLFxyXG5cdFZhbGlkYXRvcnNcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7XHJcblx0TUFUX0RJQUxPR19EQVRBLFxyXG5cdE1hdERpYWxvZyxcclxuXHRNYXREaWFsb2dSZWZcclxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5cclxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQ3VzdG9tVG9hc3RyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2N1c3RvbS10b2FzdHIvc2VydmljZXMvY3VzdG9tLXRvYXN0ci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy90cmFuc2xhdGlvbi90cmFuc2xhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTnV4ZW9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9udXhlby9udXhlby5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuXHRVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlLFxyXG5cdFVzZXJQcmVmZXJlbmNlVmFsdWVzXHJcbn0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy91c2VyL3VzZXItcHJlZmVyZW5jZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvbmZpcm1hdGlvbi1kaWFsb2cvY29uZmlybWF0aW9uLWRpYWxvZy9jb25maXJtYXRpb24tZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNoYXJlZERvY3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkLXNlcnZpY2VzL3NoYXJlZC1kb2NzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvYmFzZS9iYXNlLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEaWFsb2dBY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvbnV4ZW8tZGlhbG9nL21vZGVscy9kaWFsb2ctb3B0aW9uLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnYXBwLXNoYXJlLWRpYWxvZycsXHJcblx0dGVtcGxhdGVVcmw6ICcuL3NoYXJlLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmxzOiBbJy4vc2hhcmUtZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXHJcblx0ZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2hhcmVEaWFsb2dDb21wb25lbnRcclxuXHRleHRlbmRzIEJhc2VEaWFsb2dDb21wb25lbnQ8U2hhcmVEaWFsb2dDb21wb25lbnQsIGFueSwgYW55PlxyXG5cdGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcclxue1xyXG5cdHNlbGVjdGVkSXRlbTogYW55O1xyXG5cdHNlbGVjdGVkSXRlbVR5cGU6IGFueTtcclxuXHRzaGFyZUZvcm06IEZvcm1Hcm91cDtcclxuXHRzZWxlY3RlZFVzZXJzID0gW107XHJcblx0c3Vic2NyaXB0aW9ucyQ6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblx0bXlTaGFyZWRhdGE6IGFueSA9IFtdO1xyXG5cdHNoYXJlZExpc3QgPSBbXTtcclxuXHRzaGFyZWRMaXN0VXNlciA9IFtdO1xyXG5cdGRlcFVzZXJzID0gW107XHJcblx0YWxsb3dVc2Vyc1RvU2hhcmUgPSBbXTtcclxuXHRmb3JiaWRkZW5Vc2VycyA9IFtdO1xyXG5cdGlzU2hhcmVkQmVmb3JlID0gW107XHJcblx0Y3VycmVudFVzZXI6IGFueTtcclxuXHRzYW1lQ3VycmVudFVzZXIgPSBmYWxzZTtcclxuXHRkaXNhYmxlZCA9IHRydWU7XHJcblx0cmlnaHRzID0gW107XHJcblx0Y29waWVkID0gZmFsc2U7XHJcblx0c2hhcmVhYmxlVXJsID0gJyc7XHJcblx0dHlwZVRvVXJsOiBhbnk7XHJcblx0cHJpdmF0ZSBvbkRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHRsb2NhbGU7XHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGEsXHJcblx0XHRwcml2YXRlIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFNoYXJlRGlhbG9nQ29tcG9uZW50PixcclxuXHRcdHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcblx0XHRwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuXHRcdHByaXZhdGUgc2hhcmVkOiBTaGFyZWREb2NzU2VydmljZSxcclxuXHRcdHByaXZhdGUgdG9zdGVyU2VydmljZTogQ3VzdG9tVG9hc3RyU2VydmljZSxcclxuXHRcdHByaXZhdGUgbnV4ZW9TZXJ2aWNlOiBOdXhlb1NlcnZpY2UsXHJcblx0XHRwcml2YXRlIHVzZXJQcmVmZXJlbmNlU2VydmljZTogVXNlclByZWZlcmVuY2VzU2VydmljZSxcclxuXHRcdGluamVjdG9yOiBJbmplY3RvclxyXG5cdCkge1xyXG5cdFx0c3VwZXIoaW5qZWN0b3IpO1xyXG5cdFx0aWYgKHRoaXMudXNlclByZWZlcmVuY2VTZXJ2aWNlKSB7XHJcblx0XHRcdHRoaXMudXNlclByZWZlcmVuY2VTZXJ2aWNlXHJcblx0XHRcdFx0LnNlbGVjdChVc2VyUHJlZmVyZW5jZVZhbHVlcy5Mb2NhbGUpXHJcblx0XHRcdFx0LnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95JCkpXHJcblx0XHRcdFx0LnN1YnNjcmliZSgobG9jYWxlKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmxvY2FsZSA9IGxvY2FsZTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdHRoaXMucmlnaHRzID0gW1xyXG5cdFx0XHR7XHJcblx0XHRcdFx0bGFiZWw6IHRoaXMubG9jYWxlID09PSAnZW4nID8gJ1JlYWQnIDogJ9mC2LHYp9ih2KknLFxyXG5cdFx0XHRcdHZhbHVlOiAnUmVhZCdcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGxhYmVsOiB0aGlzLmxvY2FsZSA9PT0gJ2VuJyA/ICdSZWFkV3JpdGUnIDogJ9mC2LHYp9ih2Kkg2Ygg2KrYudiv2YrZhCcsXHJcblx0XHRcdFx0dmFsdWU6ICdSZWFkV3JpdGUnXHJcblx0XHRcdH1cclxuXHRcdF07XHJcblx0XHR0aGlzLmN1cnJlbnRVc2VyID1cclxuXHRcdFx0dGhpcy5udXhlb1NlcnZpY2U/Lm51eGVvQ2xpZW50Py51c2VyPy5wcm9wZXJ0aWVzLnVzZXJuYW1lO1xyXG5cdFx0dGhpcy5zZWxlY3RlZEl0ZW0gPSBkYXRhLnNlbGVjdGVkSXRlbTtcclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW0/LmVudGl0eS50eXBlID09PSAnRm9sZGVyJyB8fFxyXG5cdFx0XHR0aGlzLnNlbGVjdGVkSXRlbT8uZW50aXR5LnR5cGUgPT09ICdEbXNGb2xkZXInXHJcblx0XHQpIHtcclxuXHRcdFx0dGhpcy5zaGFyZWFibGVVcmwgPSBgJHt3aW5kb3cubG9jYXRpb24ucHJvdG9jb2x9Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9kbXMvZmlsZXM/aWQ9JHt0aGlzLnNlbGVjdGVkSXRlbS5lbnRpdHkudWlkfWA7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkSXRlbVR5cGUgPVxyXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtPy5lbnRpdHkucHJvcGVydGllc1snZmlsZTpjb250ZW50J11bJ21pbWUtdHlwZSddO1xyXG5cdFx0XHRpZiAodGhpcy5zZWxlY3RlZEl0ZW1UeXBlPy5pbmNsdWRlcygnaW1hZ2UnKSkge1xyXG5cdFx0XHRcdHRoaXMudHlwZVRvVXJsID0gJ2ltYWdlJztcclxuXHRcdFx0fSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkSXRlbVR5cGU/LmluY2x1ZGVzKCd2aWRlbycpKSB7XHJcblx0XHRcdFx0dGhpcy50eXBlVG9VcmwgPSAndmlkZW8nO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMudHlwZVRvVXJsID0gJ2ZpbGUnO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuc2hhcmVhYmxlVXJsID0gYCR7d2luZG93LmxvY2F0aW9uLnByb3RvY29sfS8vJHt3aW5kb3cubG9jYXRpb24uaG9zdH0vZG1zL3NoYXJlKHZpZXdlcjp2aWV3LyR7dGhpcy50eXBlVG9Vcmx9LyR7dGhpcy5zZWxlY3RlZEl0ZW0/LmVudGl0eS51aWR9KT9sb2NhdGlvbj0vc2hhcmUmZm9ybVR5cGU9JHt0aGlzLnNlbGVjdGVkSXRlbT8uZW50aXR5LnR5cGV9YDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zaGFyZUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuXHRcdFx0ZGVwQW5kaXRzVXNlcnM6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcblx0XHRcdHJpZ2h0czogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLnNoYXJlRm9ybS5nZXQoJ2RlcEFuZGl0c1VzZXJzJykudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcblx0XHRcdGlmIChyZXM/LnVzZXJzKSB7XHJcblx0XHRcdFx0SlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZFVzZXJzKSAhPSBKU09OLnN0cmluZ2lmeShyZXMudXNlcnMpXHJcblx0XHRcdFx0XHQ/IHRoaXMuc2V0VXNlcihyZXMudXNlcnMpXHJcblx0XHRcdFx0XHQ6IG51bGw7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5zaGFyZUZvcm0ucmVzZXQoKTtcclxuXHRcdHRoaXMuZ2V0TXlTaGFyZSgpO1xyXG5cdH1cclxuXHRyZW1vdmVGcm9tRm9yYmlkZGVuQXJyKGV2ZW50KSB7XHJcblx0XHR0aGlzLmZvcmJpZGRlblVzZXJzLmluY2x1ZGVzKGV2ZW50LmxhYmVsKVxyXG5cdFx0XHQ/IHRoaXMuZm9yYmlkZGVuVXNlcnMuc3BsaWNlKHRoaXMuZm9yYmlkZGVuVXNlcnMuaW5kZXhPZihldmVudC5sYWJlbCksIDEpXHJcblx0XHRcdDogJyc7XHJcblx0fVxyXG5cdGNvcHkoKSB7XHJcblx0XHR0aGlzLmNvcGllZCA9IHRydWU7XHJcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0dGhpcy5jb3BpZWQgPSBmYWxzZTtcclxuXHRcdH0sIDIwMDApO1xyXG5cdH1cclxuXHRzZXRVc2VyKHVzZXJzKSB7XHJcblx0XHR0aGlzLmlzU2hhcmVkQmVmb3JlID0gW107XHJcblx0XHR0aGlzLnNhbWVDdXJyZW50VXNlciA9IGZhbHNlO1xyXG5cdFx0dGhpcy5zZWxlY3RlZFVzZXJzID0gdXNlcnM7XHJcblx0XHR0aGlzLnNlbGVjdGVkVXNlcnMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG5cdFx0XHRpZiAoZWxlbWVudC5wcm9wZXJ0aWVzLnVzZXJuYW1lID09PSB0aGlzLmN1cnJlbnRVc2VyKSB7XHJcblx0XHRcdFx0dGhpcy5zYW1lQ3VycmVudFVzZXIgPSB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0aGlzLnNoYXJlZExpc3RVc2VyLmluY2x1ZGVzKGVsZW1lbnQucHJvcGVydGllcy51c2VybmFtZSkpIHtcclxuXHRcdFx0XHR0aGlzLmlzU2hhcmVkQmVmb3JlLnB1c2goZWxlbWVudC5wcm9wZXJ0aWVzLmZ1bGxOYW1lKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHNldFJpZ2h0KGV2ZW50KSB7XHJcblx0XHQhdGhpcy5zYW1lQ3VycmVudFVzZXIgJiZcclxuXHRcdCF0aGlzLmlzU2hhcmVkQmVmb3JlLmxlbmd0aCAmJlxyXG5cdFx0dGhpcy5zaGFyZUZvcm0uZ2V0KCdyaWdodHMnKS52YWx1ZVxyXG5cdFx0XHQ/ICh0aGlzLmRpc2FibGVkID0gZmFsc2UpXHJcblx0XHRcdDogKHRoaXMuZGlzYWJsZWQgPSB0cnVlKTtcclxuXHR9XHJcblxyXG5cdGNsb3NlKCkge1xyXG5cdFx0dGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcclxuXHR9XHJcblxyXG5cdGNoZWNrSWZDYW5WaWV3U2VjcmV0KCkge1xyXG5cdFx0dGhpcy5mb3JiaWRkZW5Vc2VycyA9IFtdO1xyXG5cdFx0bGV0IGFyciA9IFtdO1xyXG5cdFx0dGhpcy5zZWxlY3RlZFVzZXJzLm1hcCgoZWxlbWVudCkgPT4ge1xyXG5cdFx0XHRsZXQgY29udGV4dCA9IHtcclxuXHRcdFx0XHR1c2VybmFtZTogZWxlbWVudC5wcm9wZXJ0aWVzLnVzZXJuYW1lLFxyXG5cdFx0XHRcdHNlY3JlY3lMZXZlbDogdGhpcy5zZWxlY3RlZEl0ZW0uZW50aXR5LnByb3BlcnRpZXMuc2VjcmVjeUxldmVsXHJcblx0XHRcdH07XHJcblx0XHRcdGFyci5wdXNoKFxyXG5cdFx0XHRcdHRoaXMuc2hhcmVkLmNhblNlZVNlY3JldGRvY3MoY29udGV4dCkucGlwZShcclxuXHRcdFx0XHRcdHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIG9mKHsgZWxlbWVudCwgLi4ucmVzIH0pO1xyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHQpXHJcblx0XHRcdCk7XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiBjb21iaW5lTGF0ZXN0KGFycikucGlwZShcclxuXHRcdFx0c3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xyXG5cdFx0XHRcdHJlcy5mb3JFYWNoKChlKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoIWUuY2FuVmlld1NlY3JldEZpbGVzKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuZm9yYmlkZGVuVXNlcnMucHVzaChlLmVsZW1lbnQucHJvcGVydGllcy5mdWxsTmFtZSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0cmV0dXJuIG9mKHRoaXMuZm9yYmlkZGVuVXNlcnMpO1xyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuXHR9XHJcblx0ZG9TaGFyZSh1c2Vycykge1xyXG5cdFx0bGV0IGNvbnRleHQgPSB7XHJcblx0XHRcdHVzZXJzOiB1c2VycyxcclxuXHRcdFx0bW9kZTogdGhpcy5zaGFyZUZvcm0uZ2V0KCdyaWdodHMnKS52YWx1ZVxyXG5cdFx0fTtcclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucyQuY29uY2F0KFtcclxuXHRcdFx0dGhpcy5zaGFyZWRcclxuXHRcdFx0XHQuc2hhcmVEb2N1bWVudFdpdGhVc2VyKGNvbnRleHQsIHRoaXMuc2VsZWN0ZWRJdGVtLmVudGl0eS51aWQpXHJcblx0XHRcdFx0LnN1YnNjcmliZShcclxuXHRcdFx0XHRcdChyZXM6IGFueSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAocmVzKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMudG9zdGVyU2VydmljZS5zaG93KFxyXG5cdFx0XHRcdFx0XHRcdFx0J3N1Y2Nlc3MnLFxyXG5cdFx0XHRcdFx0XHRcdFx0J1RPQVNURVIuU1VDQ0VTUycsXHJcblx0XHRcdFx0XHRcdFx0XHQnVE9BU1RFUi5zaGFyZV9Eb2Nfc3VjY2VzcydcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmRlcFVzZXJzID0gW107XHJcblx0XHRcdFx0XHRcdHRoaXMuc2hhcmVGb3JtLnJlc2V0KCk7XHJcblx0XHRcdFx0XHRcdHRoaXMuZGlzYWJsZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmdldE15U2hhcmUoKTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHQoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMudG9zdGVyU2VydmljZS5zaG93KFxyXG5cdFx0XHRcdFx0XHRcdCdlcnJvcicsXHJcblx0XHRcdFx0XHRcdFx0J1RPQVNURVIuRVJST1InLFxyXG5cdFx0XHRcdFx0XHRcdCdUT0FTVEVSLnNoYXJlX0RvY19mYWlsJ1xyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdClcclxuXHRcdF0pO1xyXG5cdH1cclxuXHJcblx0c2hhcmU6IERpYWxvZ0FjdGlvblR5cGUgPSAoKSA9PiB7XHJcblx0XHRpZiAodGhpcy5zaGFyZUZvcm0uaW52YWxpZCkge1xyXG5cdFx0XHRhbGVydCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnc2hhcmUuc2VsZWN0X3VzZXJfdG9fc2hhcmUnKSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmFsbG93VXNlcnNUb1NoYXJlID0gW107XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbS5lbnRpdHkucHJvcGVydGllcy5zZWNyZWN5TGV2ZWwgJiZcclxuXHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbS5lbnRpdHkucHJvcGVydGllcy5zZWNyZWN5TGV2ZWwgIT0gJ05vcm1hbCdcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2hlY2tJZkNhblZpZXdTZWNyZXQoKS5waXBlKFxyXG5cdFx0XHRcdFx0dGFwKChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKCFyZXMubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZFVzZXJzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYWxsb3dVc2Vyc1RvU2hhcmUucHVzaChlbGVtZW50LnByb3BlcnRpZXMudXNlcm5hbWUpO1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZG9TaGFyZSh0aGlzLmFsbG93VXNlcnNUb1NoYXJlKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRVc2Vycy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmFsbG93VXNlcnNUb1NoYXJlLnB1c2goZWxlbWVudC5wcm9wZXJ0aWVzLnVzZXJuYW1lKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRyZXR1cm4gb2YodGhpcy5hbGxvd1VzZXJzVG9TaGFyZSkucGlwZShcclxuXHRcdFx0XHRcdHRhcCgoYWxsb3dVc2Vyc1RvU2hhcmUpID0+IHRoaXMuZG9TaGFyZShhbGxvd1VzZXJzVG9TaGFyZSkpXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG9mKG51bGwpO1xyXG5cdH07XHJcblxyXG5cdG9wZW5EaWFsb2coZnVuY3Rpb25Ub0RvLCB1c2VybmFtZT8sIHNoYXJlZE1vZGU/KSB7XHJcblx0XHRsZXQgbWVzc2FnZTogYW55O1xyXG5cdFx0ZnVuY3Rpb25Ub0RvID09PSAnUmVtX0FMTF9zaGFyZXMnXHJcblx0XHRcdD8gKG1lc3NhZ2UgPSAnY29uZmlybURpYWxvZy5SZW1fQWxsX3NoYXJlcycpXHJcblx0XHRcdDogKG1lc3NhZ2UgPSAnY29uZmlybURpYWxvZy5SZW1fY3VzdG9tX3NoYXJlJyk7XHJcblx0XHRjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCwge1xyXG5cdFx0XHR3aWR0aDogJzUxMHB4JyxcclxuXHRcdFx0ZGF0YToge1xyXG5cdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnY29uZmlybURpYWxvZy5jb25maXJtJyksXHJcblx0XHRcdFx0bWVzc2FnZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQobWVzc2FnZSksXHJcblx0XHRcdFx0Y29uZmlybUJ1dHRvbjogYEJVVFRPTlMuUmVtb3ZlYCxcclxuXHRcdFx0XHRjYW5jZWxCdXR0b246ICdCVVRUT05TLkNhbmNlbCdcclxuXHRcdFx0fSxcclxuXHRcdFx0ZGlzYWJsZUNsb3NlOiB0cnVlXHJcblx0XHR9KTtcclxuXHRcdC8vIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZnVzZUNvbmZpcm1hdGlvblNlcnZpY2Uub3BlbihcclxuXHRcdC8vICAge1xyXG5cdFx0Ly8gICAgIGRpc21pc3NpYmxlOiB0cnVlLFxyXG5cdFx0Ly8gICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcImNvbmZpcm1EaWFsb2cuY29uZmlybVwiKSxcclxuXHRcdC8vICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChtZXNzYWdlKSxcclxuXHRcdC8vICAgICBhY3Rpb25zOiB7XHJcblx0XHQvLyAgICAgICBjb25maXJtOiB7XHJcblx0XHQvLyAgICAgICAgIHNob3c6IHRydWUsXHJcblx0XHQvLyAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcIkJVVFRPTlMuUmVtb3ZlXCIpLFxyXG5cdFx0Ly8gICAgICAgICBjb2xvcjogXCJ3YXJuXCJcclxuXHRcdC8vICAgICAgIH0sXHJcblx0XHQvLyAgICAgICBjYW5jZWw6IHtcclxuXHRcdC8vICAgICAgICAgc2hvdzogdHJ1ZSxcclxuXHRcdC8vICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFwiQlVUVE9OUy5DYW5jZWxcIiksXHJcblx0XHQvLyAgICAgICB9XHJcblx0XHQvLyAgICAgfVxyXG5cdFx0Ly8gICB9XHJcblx0XHQvLyApO1xyXG5cdFx0ZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuXHRcdFx0aWYgKHJlc3VsdCkge1xyXG5cdFx0XHRcdGlmIChmdW5jdGlvblRvRG8gPT09ICdSZW1fQUxMX3NoYXJlcycpIHtcclxuXHRcdFx0XHRcdHRoaXMuc3Vic2NyaXB0aW9ucyQuY29uY2F0KFtcclxuXHRcdFx0XHRcdFx0dGhpcy5zaGFyZWRcclxuXHRcdFx0XHRcdFx0XHQucmVtb3ZlQWxsU2hhcmVzZm9yRG9jcyh0aGlzLnNlbGVjdGVkSXRlbS5lbnRpdHkudWlkKVxyXG5cdFx0XHRcdFx0XHRcdC5zdWJzY3JpYmUoXHJcblx0XHRcdFx0XHRcdFx0XHQocmVzOiBhbnkpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMudG9zdGVyU2VydmljZS5zaG93KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3N1Y2Nlc3MnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J1RPQVNURVIuU1VDQ0VTUycsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnVE9BU1RFUi5SbV9BbGxfU2hhcmVzX3N1Y2Nlc3MnXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdldE15U2hhcmUoKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHRcdChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy50b3N0ZXJTZXJ2aWNlLnNob3coXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0J2Vycm9yJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQnVE9BU1RFUi5FUlJPUicsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0J1RPQVNURVIuUm1fQWxsX1NoYXJlc19mYWlsJ1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdF0pO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRsZXQgY29udGV4dCA9IHtcclxuXHRcdFx0XHRcdFx0dXNlcjogdXNlcm5hbWUsXHJcblx0XHRcdFx0XHRcdG1vZGU6IHNoYXJlZE1vZGVcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR0aGlzLnN1YnNjcmlwdGlvbnMkLmNvbmNhdChbXHJcblx0XHRcdFx0XHRcdHRoaXMuc2hhcmVkXHJcblx0XHRcdFx0XHRcdFx0LnJlbW92ZUN1c3RvbVNoYXJlKGNvbnRleHQsIHRoaXMuc2VsZWN0ZWRJdGVtLmVudGl0eS51aWQpXHJcblx0XHRcdFx0XHRcdFx0LnN1YnNjcmliZShcclxuXHRcdFx0XHRcdFx0XHRcdChyZXM6IGFueSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy50b3N0ZXJTZXJ2aWNlLnNob3coXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnc3VjY2VzcycsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnVE9BU1RFUi5TVUNDRVNTJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdUT0FTVEVSLlJlbV9jdXN0b21fc2hhcmVfc3VjY2VzcydcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ2V0TXlTaGFyZSgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdFx0KGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnRvc3RlclNlcnZpY2Uuc2hvdyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQnZXJyb3InLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCdUT0FTVEVSLkVSUk9SJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQnVE9BU1RFUi5SZW1fY3VzdG9tX3NoYXJlX2ZhaWwnXHJcblx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGdldE15U2hhcmUoKSB7XHJcblx0XHR0aGlzLnNoYXJlZExpc3RVc2VyID0gdGhpcy5zaGFyZWRMaXN0ID0gW107XHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMkLmNvbmNhdChbXHJcblx0XHRcdHRoaXMuc2hhcmVkXHJcblx0XHRcdFx0LmdldFNoYXJlc0J5TWUodGhpcy5zZWxlY3RlZEl0ZW0/LmVudGl0eS51aWQsIHRydWUpXHJcblx0XHRcdFx0LnN1YnNjcmliZSgocmVzKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLnNoYXJlZExpc3QgPSByZXM7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5zaGFyZWRMaXN0Lmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNoYXJlZExpc3QuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuc2hhcmVkTGlzdFVzZXIucHVzaChlbGVtZW50LnVzZXIucHJvcGVydGllcy51c2VybmFtZSk7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRdKTtcclxuXHR9XHJcblxyXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zJC5mb3JFYWNoKChzdWIpID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcclxuXHR9XHJcbn1cclxuIiwiPG5kZi1udXhlby1kaWFsb2cgZGlhbG9nVGl0bGU9XCJ7eyAnQ1JFQVRFLlNIQVJFJyB8IHRyYW5zbGF0ZSB9fVwiPlxyXG5cdDxuZy10ZW1wbGF0ZSAjY29udGVudFRlbXBsYXRlPlxyXG5cdFx0PGZvcm0gW2Zvcm1Hcm91cF09XCJzaGFyZUZvcm1cIiBjbGFzcz1cImgtZnVsbCBwLTUgb3ZlcmZsb3ctYXV0b1wiIFNldFJ0bD5cclxuXHRcdFx0PGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuIGgtZnVsbFwiPlxyXG5cdFx0XHRcdDwhLS1Gb3JtIFNlY3Rpb24tLT5cclxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYWRkLXBlcm1zaW9uLXdyYXBwZXJcIj5cclxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwidGV4dC1ncmF5LTkwMCB0ZXh0LWxnXCI+XHJcblx0XHRcdFx0XHRcdHt7ICdzaGFyZS5zaGFyZURpYWxvZ1RpdGxlJyB8IHRyYW5zbGF0ZSB9fVxyXG5cdFx0XHRcdFx0PC9zcGFuPlxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cIm10LTUgc2VsZWN0b3JzV3JhcHBlclwiPlxyXG5cdFx0XHRcdFx0XHQ8YXBwLXNlbGVjdC11c2Vycy1ieS1kZXBhcnRtZW50c1xyXG5cdFx0XHRcdFx0XHRcdGZvcm1Db250cm9sTmFtZT1cImRlcEFuZGl0c1VzZXJzXCJcclxuXHRcdFx0XHRcdFx0XHRbYWxsb3dNdWx0aXBsZVVzZXJzXT1cInRydWVcIlxyXG5cdFx0XHRcdFx0XHRcdFt1c2VyTGFiZWxdPVwiJ3NoYXJlLnVzZXJzJyB8IHRyYW5zbGF0ZVwiXHJcblx0XHRcdFx0XHRcdFx0W2RlcExhYmVsXT1cIidzaGFyZS5EZXAnIHwgdHJhbnNsYXRlXCJcclxuXHRcdFx0XHRcdFx0XHRbZGlzcGxheV09XCInY29sdW1uJ1wiXHJcblx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0PC9hcHAtc2VsZWN0LXVzZXJzLWJ5LWRlcGFydG1lbnRzPlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8ZGl2ICpuZ0lmPVwiZm9yYmlkZGVuVXNlcnMubGVuZ3RoXCIgY2xhc3M9XCJmbGV4XCI+XHJcblx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHAgb2YgZm9yYmlkZGVuVXNlcnM7IGxldCBpOyBhczogaW5kZXhcIj5cclxuXHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMCB0ZXh0LWJhc2VcIj4ge3sgcCB9fSZuYnNwOyA8L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMCB0ZXh0LWJhc2VcIj5cclxuXHRcdFx0XHRcdFx0XHQ8cCAqbmdJZj1cImZvcmJpZGRlblVzZXJzLmxlbmd0aCA9PSAxXCI+XHJcblx0XHRcdFx0XHRcdFx0XHR7eyAnc2hhcmUuc2luZ2xlX2ZvcmJpZGRlbicgfCB0cmFuc2xhdGUgfX1cclxuXHRcdFx0XHRcdFx0XHQ8L3A+XHJcblx0XHRcdFx0XHRcdFx0PHAgKm5nSWY9XCJmb3JiaWRkZW5Vc2Vycy5sZW5ndGggPiAxXCI+XHJcblx0XHRcdFx0XHRcdFx0XHR7eyAnc2hhcmUubXVsdGlfZm9yYmlkZGVuJyB8IHRyYW5zbGF0ZSB9fVxyXG5cdFx0XHRcdFx0XHRcdDwvcD5cclxuXHRcdFx0XHRcdFx0PC9zcGFuPlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8ZGl2ICpuZ0lmPVwic2FtZUN1cnJlbnRVc2VyXCI+XHJcblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwidGV4dC1yZWQtNTAwIHRleHQtYmFzZVwiPlxyXG5cdFx0XHRcdFx0XHRcdHt7ICdzaGFyZS5zaGFyZVdpdGhMb2dnZWRJblVzZXInIHwgdHJhbnNsYXRlIH19XHJcblx0XHRcdFx0XHRcdDwvc3Bhbj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PGRpdiAqbmdJZj1cImlzU2hhcmVkQmVmb3JlLmxlbmd0aFwiIGNsYXNzPVwiZmxleFwiPlxyXG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMCB0ZXh0LWJhc2VcIj5cclxuXHRcdFx0XHRcdFx0XHR7eyAnc2hhcmUuc2hhcmVfZXhpc3RzJyB8IHRyYW5zbGF0ZSB9fVxyXG5cdFx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHAgb2YgaXNTaGFyZWRCZWZvcmVcIj5cclxuXHRcdFx0XHRcdFx0XHRcdHt7IHAgfX1cclxuXHRcdFx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cclxuXHRcdFx0XHRcdFx0XHR7eyAnc2hhcmUuYmVmb3JlJyB8IHRyYW5zbGF0ZSB9fVxyXG5cdFx0XHRcdFx0XHQ8L3NwYW4+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJtdC00IHJpZ2h0c1NlbGVjdG9yXCI+XHJcblx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cInRleHQtYmFzZSBmb250LWJvbGQgbWItMFwiPlxyXG5cdFx0XHRcdFx0XHRcdHt7ICdzaGFyZS5SaWdodHMnIHwgdHJhbnNsYXRlIH19XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvbGFiZWw+XHJcblx0XHRcdFx0XHRcdDxuZy1zZWxlY3RcclxuXHRcdFx0XHRcdFx0XHRbaXRlbXNdPVwicmlnaHRzXCJcclxuXHRcdFx0XHRcdFx0XHRiaW5kTGFiZWw9XCJsYWJlbFwiXHJcblx0XHRcdFx0XHRcdFx0YmluZFZhbHVlPVwidmFsdWVcIlxyXG5cdFx0XHRcdFx0XHRcdFtwbGFjZWhvbGRlcl09XCIncGVybWlzc2lvbi5yaWdodHNQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdGZvcm1Db250cm9sTmFtZT1cInJpZ2h0c1wiXHJcblx0XHRcdFx0XHRcdFx0KGNoYW5nZSk9XCJzZXRSaWdodCgkZXZlbnQpXCJcclxuXHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHQ8L25nLXNlbGVjdD5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PGRpdiAqbmdJZj1cInNoYXJlZExpc3QubGVuZ3RoXCIgY2xhc3M9XCJtdC00XCI+XHJcblx0XHRcdFx0XHRcdDxkaXY+XHJcblx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwidGV4dC1iYXNlIGZvbnQtYm9sZCBtYi0wXCI+XHJcblx0XHRcdFx0XHRcdFx0XHR7eyAnc2hhcmUuZmlsZVVybCcgfCB0cmFuc2xhdGUgfX1cclxuXHRcdFx0XHRcdFx0XHQ8L2xhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IHJlbGF0aXZlXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXRcclxuXHRcdFx0XHRcdFx0XHRcdFx0I2ZpbGVVcmxcclxuXHRcdFx0XHRcdFx0XHRcdFx0W3ZhbHVlXT1cInNoYXJlYWJsZVVybFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiYXBwZWFyYW5jZS1ub25lIGJsb2NrIHctZnVsbCBiZy1hY2NlbnQtMTAwIHRleHQtZ3JheS03MDAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkIHB5LTIuNSBweC00IGxlYWRpbmctdGlnaHQgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOmJnLXdoaXRlIGZvY3VzOmJvcmRlci1ncmF5LTUwMFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJ0ZXh0XCJcclxuXHRcdFx0XHRcdFx0XHRcdC8+XHJcblx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiYWJzb2x1dGUgcHQtMi41IGJnLWFjY2VudC0xMDBcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRbbWF0VG9vbHRpcF09XCInQlVUVE9OUy5DT1BZJyB8IHRyYW5zbGF0ZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFtuZ0NsYXNzXT1cImxvY2FsZSA9PT0gJ2VuJyA/ICdyaWdodC0yJyA6ICdsZWZ0LTInXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0W2Nka0NvcHlUb0NsaXBib2FyZF09XCJmaWxlVXJsLnZhbHVlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImNvcHkoKVwiXHJcblx0XHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxtYXQtaWNvblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN2Z0ljb249XCJtYXRfc29saWQ6Y29udGVudF9jb3B5XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImljb24tc2l6ZS02XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0PjwvbWF0LWljb24+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0XHRcdDxkaXZcclxuXHRcdFx0XHRcdFx0XHRcdFx0Km5nSWY9XCJjb3BpZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImZsZXggYWJzb2x1dGUganVzdGlmeS1hcm91bmQgdy0yNCAtbXQtMTAgYm9yZGVyIGJvcmRlci1yZWQtNzAwIGgtNyByb3VuZGVkIGJnLWdyYXktMjAwXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0W25nQ2xhc3NdPVwibG9jYWxlID09PSAnZW4nID8gJ3JpZ2h0LTAnIDogJ2xlZnQtMCdcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJ3LTMgaC0zIGp1c3RpZnktY2VudGVyIGJnLWdyYXktMjAwIHRyYW5zZm9ybSByb3RhdGUtNDUgYm9yZGVyIG10LTUgYm9yZGVycy1jb2xvclwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdD48L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJhYnNvbHV0ZSBmb250LWV4dHJhbGlnaHRcIj57e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCdzaGFyZS5jb3BpZWQnIHwgdHJhbnNsYXRlXHJcblx0XHRcdFx0XHRcdFx0XHRcdH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PCEtLVNoYXJlcyBTZWN0aW9uLS0+XHJcblx0XHRcdFx0PGRpdiAqbmdJZj1cInNoYXJlZExpc3QubGVuZ3RoXCI+XHJcblx0XHRcdFx0XHQ8ZGl2XHJcblx0XHRcdFx0XHRcdGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gaC03IGJvcmRlci1iLTIgYm9yZGVyLWFjY2VudC0xMDAgbXQtMlwiXHJcblx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwidGV4dC1iYXNlIGZvbnQtYm9sZFwiPlxyXG5cdFx0XHRcdFx0XHRcdHt7ICdzaGFyZS5zaGFyZXMnIHwgdHJhbnNsYXRlIH19XHJcblx0XHRcdFx0XHRcdDwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0PGJ1dHRvblxyXG5cdFx0XHRcdFx0XHRcdG1hdC1pY29uLWJ1dHRvblxyXG5cdFx0XHRcdFx0XHRcdCpwZXJtaXNzaW9uPVwie1xyXG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogJ2NhblJlbW92ZVNoYXJlJyxcclxuXHRcdFx0XHRcdFx0XHRcdGVudGl0eTogc2VsZWN0ZWRJdGVtLmVudGl0eVxyXG5cdFx0XHRcdFx0XHRcdH1cIlxyXG5cdFx0XHRcdFx0XHRcdG1hdFRvb2x0aXA9XCJ7eyAnc2hhcmUuUm1fQWxsX3NoYXJlcycgfCB0cmFuc2xhdGUgfX1cIlxyXG5cdFx0XHRcdFx0XHRcdChjbGljayk9XCJvcGVuRGlhbG9nKCdSZW1fQUxMX3NoYXJlcycpXCJcclxuXHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdDxtYXQtaWNvblxyXG5cdFx0XHRcdFx0XHRcdFx0W3N2Z0ljb25dPVwiJ2hlcm9pY29uc19vdXRsaW5lOnRyYXNoJ1wiXHJcblx0XHRcdFx0XHRcdFx0XHRbbmdDbGFzc109XCJsb2NhbGUgPT09ICdlbicgPyAnbXItMicgOiAnbWwtMidcIlxyXG5cdFx0XHRcdFx0XHRcdD48L21hdC1pY29uPlxyXG5cdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImgtNTIgb3ZlcmZsb3cteS1hdXRvXCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktYmV0d2VlbiBtdC0yLjVcIj5cclxuXHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInctMS8yIHRleHQtYmFzZSBmb250LWJvbGRcIj57e1xyXG5cdFx0XHRcdFx0XHRcdFx0J3NoYXJlLnNoYXJlV2l0aCcgfCB0cmFuc2xhdGVcclxuXHRcdFx0XHRcdFx0XHR9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInctMS80IHRleHQtYmFzZSBmb250LWJvbGRcIj57e1xyXG5cdFx0XHRcdFx0XHRcdFx0J3NoYXJlLnNoYXJlX2RhdGUnIHwgdHJhbnNsYXRlXHJcblx0XHRcdFx0XHRcdFx0fX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJ3LTEvNCB0ZXh0LWJhc2UgZm9udC1ib2xkXCI+e3tcclxuXHRcdFx0XHRcdFx0XHRcdCdzaGFyZS5wZXJtaXNzaW9uJyB8IHRyYW5zbGF0ZVxyXG5cdFx0XHRcdFx0XHRcdH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdDxzcGFuPiZuYnNwOzwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGQgb2Ygc2hhcmVkTGlzdFwiPlxyXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktYmV0d2VlbiBtdC0yLjVcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IHctMS8yXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4LTAgdy04IGgtOCByb3VuZGVkLWZ1bGwgb3ZlcmZsb3ctaGlkZGVuXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGN0cy1hdmF0YXJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFt1c2VyXT1cIntcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydGllczoge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpcnN0TmFtZTogZC51c2VyLnByb3BlcnRpZXM/LmZpcnN0TmFtZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsYXN0TmFtZTogZC51c2VyLnByb3BlcnRpZXM/Lmxhc3ROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2N0cy1hdmF0YXI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCAtbXQtMiBweC0yIGJyZWFrLWFsbFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuPnt7IGQudXNlci5mdWxsTmFtZSB9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3Bhbj57eyBkLnVzZXIucHJvcGVydGllcy5lbWFpbCB9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ3LTEvNCBtdC0xLjUgYnJlYWstYWxsIHB4LTIuNVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3Bhbj57e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGQuc2hhcmVkRGF0ZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fCBsb2NhbGl6ZWREYXRlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogJ2RkIE1NTU0geXl5eSdcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiAoaXNBcmFiaWMgPyAnYXItQVInIDogJ2VuLVVTJylcclxuXHRcdFx0XHRcdFx0XHRcdFx0fX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ3LTEvNCBtdC0xLjUgYnJlYWstYWxsIHB4LTRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4+e3sgJ3JpZ2h0cy4nICsgZC5zaGFyZWRNb2RlIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibXQtMS41XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXQtaWNvbi1idXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQqcGVybWlzc2lvbj1cIntcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6ICdjYW5SZW1vdmVTaGFyZScsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbnRpdHk6IHNlbGVjdGVkSXRlbS5lbnRpdHlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXRUb29sdGlwPVwie3sgJ3NoYXJlLlJtX2N1c3RvbV9zaGFyZScgfCB0cmFuc2xhdGUgfX1cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdChjbGljayk9XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9wZW5EaWFsb2coXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdSZW1fY3VzdG9tX3NoYXJlJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZC51c2VyLnByb3BlcnRpZXMudXNlcm5hbWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGQuc2hhcmVkTW9kZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8aVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJtcy1JY29uIG1zLUljb24tLUNocm9tZUNsb3NlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbbmdDbGFzc109XCJsb2NhbGUgPT09ICdlbicgPyAnbXItMi41JyA6ICdtbC0yLjUnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+PC9pPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvZm9ybT5cclxuXHQ8L25nLXRlbXBsYXRlPlxyXG5cclxuXHQ8bmctdGVtcGxhdGUgI2FjdGlvbnNUZW1wbGF0ZSBsZXQtZGlhbG9nPVwiZGlhbG9nXCI+XHJcblx0XHQ8YnV0dG9uXHJcblx0XHRcdGNsYXNzPVwic3VibWlzc2lvbi1idXR0b25cIlxyXG5cdFx0XHRbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG5cdFx0XHQoY2xpY2spPVwiZGlhbG9nLmV4ZWN1dGVBY3Rpb24oc2hhcmUpXCJcclxuXHRcdD5cclxuXHRcdFx0e3sgJ3NoYXJlLnNoYXJlQnV0dG9uJyB8IHRyYW5zbGF0ZSB9fVxyXG5cdFx0PC9idXR0b24+XHJcblx0PC9uZy10ZW1wbGF0ZT5cclxuPC9uZGYtbnV4ZW8tZGlhbG9nPlxyXG4iXX0=
|