@rivet-health/design-system 40.4.0 → 40.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/navigation/views/edit-view/edit-view.component.mjs +44 -85
- package/esm2020/lib/navigation/views/permission-picker/permission-picker.component.mjs +151 -0
- package/esm2020/lib/navigation/views/state.mjs +2 -2
- package/esm2020/lib/riv.module.mjs +6 -1
- package/esm2020/lib/visualization/chart/chart.component.mjs +3 -3
- package/esm2020/lib/visualization/chart/chart.mjs +110 -1
- package/esm2020/public-api.mjs +2 -1
- package/fesm2015/rivet-health-design-system.mjs +259 -48
- package/fesm2015/rivet-health-design-system.mjs.map +1 -1
- package/fesm2020/rivet-health-design-system.mjs +265 -48
- package/fesm2020/rivet-health-design-system.mjs.map +1 -1
- package/lib/navigation/views/edit-view/edit-view.component.d.ts +8 -21
- package/lib/navigation/views/permission-picker/permission-picker.component.d.ts +37 -0
- package/lib/navigation/views/state.d.ts +1 -1
- package/lib/riv.module.d.ts +48 -47
- package/lib/visualization/chart/chart.d.ts +3 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -1,26 +1,13 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
|
|
2
2
|
import { cloneDeep, isEqual } from 'lodash';
|
|
3
|
-
import { RivSelect } from '../../../input/select/state';
|
|
4
3
|
import { RivViews } from '../state';
|
|
5
4
|
import * as i0 from "@angular/core";
|
|
6
5
|
import * as i1 from "@angular/common";
|
|
7
6
|
import * as i2 from "../../../input/button/button.component";
|
|
8
7
|
import * as i3 from "../../../overlay/callout/callout.component";
|
|
9
|
-
import * as i4 from "../../../
|
|
10
|
-
import * as i5 from "
|
|
11
|
-
import * as i6 from "../../../input/
|
|
12
|
-
import * as i7 from "../../../input/select/select/select.component";
|
|
13
|
-
import * as i8 from "../../../input/text-field/text-field.component";
|
|
14
|
-
const titles = {
|
|
15
|
-
private: 'Private',
|
|
16
|
-
public: 'Public',
|
|
17
|
-
shared: 'Shared',
|
|
18
|
-
};
|
|
19
|
-
const subtitles = {
|
|
20
|
-
private: 'Only visible to you',
|
|
21
|
-
public: 'Visible to everyone',
|
|
22
|
-
shared: 'Only visible to those with access',
|
|
23
|
-
};
|
|
8
|
+
import * as i4 from "../../../overlay/overlay.directive";
|
|
9
|
+
import * as i5 from "../permission-picker/permission-picker.component";
|
|
10
|
+
import * as i6 from "../../../input/text-field/text-field.component";
|
|
24
11
|
export class EditViewComponent {
|
|
25
12
|
constructor(cdr) {
|
|
26
13
|
this.cdr = cdr;
|
|
@@ -30,17 +17,9 @@ export class EditViewComponent {
|
|
|
30
17
|
this.save = new EventEmitter();
|
|
31
18
|
this.delete = new EventEmitter();
|
|
32
19
|
this.close = new EventEmitter();
|
|
33
|
-
this.permissionOptions = RivViews.ViewPermissions.map(permission => ({
|
|
34
|
-
value: permission,
|
|
35
|
-
title: titles[permission],
|
|
36
|
-
subtitle: subtitles[permission],
|
|
37
|
-
}));
|
|
38
|
-
this.userOptions = [];
|
|
39
|
-
this.selectedUsers = [];
|
|
40
20
|
}
|
|
41
21
|
resetView() {
|
|
42
22
|
this.editedView = cloneDeep(this.view);
|
|
43
|
-
this.setUpUserSelectManager();
|
|
44
23
|
}
|
|
45
24
|
ngOnInit() {
|
|
46
25
|
this.resetView();
|
|
@@ -50,9 +29,6 @@ export class EditViewComponent {
|
|
|
50
29
|
this.resetView();
|
|
51
30
|
}
|
|
52
31
|
}
|
|
53
|
-
ngOnDestroy() {
|
|
54
|
-
this.tearDownUserSelectManager();
|
|
55
|
-
}
|
|
56
32
|
canEdit() {
|
|
57
33
|
return this.mode === 'edit';
|
|
58
34
|
}
|
|
@@ -62,77 +38,60 @@ export class EditViewComponent {
|
|
|
62
38
|
titleChange(value) {
|
|
63
39
|
if (this.editedView)
|
|
64
40
|
this.editedView.title = value;
|
|
41
|
+
// These handlers fire from the permission picker / text field, which render
|
|
42
|
+
// in the overlay outlet's change-detection subtree — a different branch than
|
|
43
|
+
// this OnPush component. Without markForCheck the updated editedView never
|
|
44
|
+
// flows back into the child input bindings (e.g. the highlighted option).
|
|
45
|
+
this.cdr.markForCheck();
|
|
65
46
|
}
|
|
66
|
-
|
|
67
|
-
if (this.editedView)
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
this.userSelectSubscription?.unsubscribe();
|
|
78
|
-
}
|
|
79
|
-
async setUpUserSelectManager() {
|
|
80
|
-
this.tearDownUserSelectManager();
|
|
81
|
-
if (this.userSelectMode === 'search-select') {
|
|
82
|
-
const users = await (this.userSource || (() => []))();
|
|
83
|
-
this.userOptions = users.map(u => ({
|
|
84
|
-
...u,
|
|
85
|
-
new: u.new ?? false,
|
|
86
|
-
}));
|
|
87
|
-
this.selectedUsers = this.getSharedUsers(this.editedView).map(u => ({
|
|
88
|
-
...u,
|
|
89
|
-
new: u.new ?? false,
|
|
90
|
-
}));
|
|
91
|
-
this.cdr.markForCheck();
|
|
47
|
+
onPermissionChange(value) {
|
|
48
|
+
if (!this.editedView)
|
|
49
|
+
return;
|
|
50
|
+
if (value === 'shared') {
|
|
51
|
+
if (!RivViews.isSharedView(this.editedView)) {
|
|
52
|
+
this.editedView = {
|
|
53
|
+
...this.editedView,
|
|
54
|
+
permission: 'shared',
|
|
55
|
+
sharedUsers: [],
|
|
56
|
+
};
|
|
57
|
+
}
|
|
92
58
|
}
|
|
93
59
|
else {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
});
|
|
105
|
-
this.userSelectSubscription = this.userSelectManager.state.subscribe(state => {
|
|
106
|
-
if (RivViews.isSharedView(this.editedView)) {
|
|
107
|
-
this.editedView.sharedUsers = [...state.selection.selected];
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
this.userSelectManager.actions.next({ type: 'load' });
|
|
60
|
+
if (RivViews.isSharedView(this.editedView)) {
|
|
61
|
+
const { sharedUsers, ...rest } = this.editedView;
|
|
62
|
+
this.editedView = {
|
|
63
|
+
...rest,
|
|
64
|
+
permission: value,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
this.editedView.permission = value;
|
|
69
|
+
}
|
|
111
70
|
}
|
|
71
|
+
this.cdr.markForCheck();
|
|
112
72
|
}
|
|
113
|
-
|
|
114
|
-
this.selectedUsers = users;
|
|
73
|
+
onSharedUsersChange(users) {
|
|
115
74
|
if (RivViews.isSharedView(this.editedView)) {
|
|
116
|
-
this.editedView.sharedUsers =
|
|
75
|
+
this.editedView.sharedUsers = users;
|
|
117
76
|
}
|
|
77
|
+
this.cdr.markForCheck();
|
|
118
78
|
}
|
|
119
|
-
|
|
120
|
-
if (
|
|
121
|
-
return;
|
|
122
|
-
const newUser = this.onAddUser(searchText);
|
|
123
|
-
this.userOptions = [...this.userOptions, newUser];
|
|
124
|
-
this.selectedUsers = [...this.selectedUsers, newUser];
|
|
125
|
-
if (RivViews.isSharedView(this.editedView)) {
|
|
126
|
-
this.editedView.sharedUsers = RivViews.toSharedUsers(this.selectedUsers);
|
|
79
|
+
getSharedUsers(view) {
|
|
80
|
+
if (RivViews.isSharedView(view)) {
|
|
81
|
+
return view.sharedUsers;
|
|
127
82
|
}
|
|
128
|
-
|
|
83
|
+
return EditViewComponent.NO_SHARED_USERS;
|
|
129
84
|
}
|
|
130
85
|
}
|
|
86
|
+
// Stable empty-array reference for the non-shared branch, so this getter
|
|
87
|
+
// doesn't hand the permission picker a fresh [] on every change-detection
|
|
88
|
+
// cycle (which would churn its @Input and trigger needless work).
|
|
89
|
+
EditViewComponent.NO_SHARED_USERS = [];
|
|
131
90
|
EditViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: EditViewComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
132
|
-
EditViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: EditViewComponent, selector: "riv-edit-view", inputs: { anchor: "anchor", autoSelectName: "autoSelectName", view: "view", userSource: "userSource", userSelectMode: "userSelectMode", onAddUser: "onAddUser", newTooltip: "newTooltip", mode: "mode" }, outputs: { save: "save", delete: "delete", close: "close" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"editedView; let ev\">\n <riv-callout\n *riv-overlay\n [anchor]=\"anchor ?? null\"\n [isModal]=\"true\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [preferredPosition]=\"'bottom-right'\"\n [fallbackDirection]=\"'clockwise'\"\n (close)=\"close.emit()\"\n >\n <div class=\"edit-view\">\n <div class=\"name-input\">\n <span class=\"name-label\">Name * </span>\n <riv-text-field\n [autoFocus]=\"autoSelectName ? 'select' : false\"\n [value]=\"ev.title ?? ''\"\n (valueChange)=\"titleChange($event)\"\n ></riv-text-field>\n </div>\n\n <hr class=\"divider\" />\n\n <
|
|
91
|
+
EditViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: EditViewComponent, selector: "riv-edit-view", inputs: { anchor: "anchor", autoSelectName: "autoSelectName", view: "view", userSource: "userSource", userSelectMode: "userSelectMode", onAddUser: "onAddUser", newTooltip: "newTooltip", mode: "mode" }, outputs: { save: "save", delete: "delete", close: "close" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"editedView; let ev\">\n <riv-callout\n *riv-overlay\n [anchor]=\"anchor ?? null\"\n [isModal]=\"true\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [preferredPosition]=\"'bottom-right'\"\n [fallbackDirection]=\"'clockwise'\"\n (close)=\"close.emit()\"\n >\n <div class=\"edit-view\">\n <div class=\"name-input\">\n <span class=\"name-label\">Name * </span>\n <riv-text-field\n [autoFocus]=\"autoSelectName ? 'select' : false\"\n [value]=\"ev.title ?? ''\"\n (valueChange)=\"titleChange($event)\"\n ></riv-text-field>\n </div>\n\n <hr class=\"divider\" />\n\n <riv-permission-picker\n [permission]=\"ev.permission\"\n [sharedUsers]=\"getSharedUsers(ev)\"\n [userSelectMode]=\"userSelectMode\"\n [userSource]=\"userSource\"\n [onAddUser]=\"onAddUser\"\n [newTooltip]=\"newTooltip\"\n (permissionChange)=\"onPermissionChange($event)\"\n (sharedUsersChange)=\"onSharedUsersChange($event)\"\n ></riv-permission-picker>\n\n <hr class=\"divider\" />\n\n <div class=\"actions\">\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'Trash2'\"\n (click)=\"delete.emit(ev); close.emit()\"\n *ngIf=\"canEdit()\"\n >\n Delete\n </button>\n\n <div class=\"actions-spacer\"></div>\n\n <div class=\"primary-actions\">\n <button rivButton [variant]=\"'ghost'\" (click)=\"close.emit()\">\n Cancel\n </button>\n <button\n rivButton\n [variant]=\"'primary'\"\n [disabled]=\"canEdit() && isClean()\"\n (click)=\"save.emit(ev); close.emit()\"\n >\n Save\n </button>\n </div>\n </div>\n </div>\n </riv-callout>\n</ng-container>\n", styles: [".edit-view{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-large);width:calc(var(--base-grid-size) * 104);max-width:50vw;max-height:80vh;overflow-y:auto}.divider{height:var(--border-width);background-color:var(--border-light);border:0;width:100%}.name-label{font:var(--title-02)}.name-input{display:flex;flex-direction:column;gap:var(--size-small)}.actions{display:flex;justify-content:space-between;align-items:center}.actions-spacer{flex-grow:1}.primary-actions{display:flex;align-items:center;gap:var(--size-small)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "component", type: i3.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "directive", type: i4.OverlayDirective, selector: "[riv-overlay]" }, { kind: "component", type: i5.PermissionPickerComponent, selector: "riv-permission-picker", inputs: ["permission", "sharedUsers", "userSelectMode", "userSource", "onAddUser", "newTooltip", "disabledPermissions"], outputs: ["permissionChange", "sharedUsersChange"] }, { kind: "component", type: i6.TextFieldComponent, selector: "riv-text-field", inputs: ["disabled", "readonly", "placeholder", "casing", "type", "size", "autoFocus", "name", "minLength", "maxLength", "value"], outputs: ["valueChange", "blur"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
133
92
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: EditViewComponent, decorators: [{
|
|
134
93
|
type: Component,
|
|
135
|
-
args: [{ selector: 'riv-edit-view', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"editedView; let ev\">\n <riv-callout\n *riv-overlay\n [anchor]=\"anchor ?? null\"\n [isModal]=\"true\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [preferredPosition]=\"'bottom-right'\"\n [fallbackDirection]=\"'clockwise'\"\n (close)=\"close.emit()\"\n >\n <div class=\"edit-view\">\n <div class=\"name-input\">\n <span class=\"name-label\">Name * </span>\n <riv-text-field\n [autoFocus]=\"autoSelectName ? 'select' : false\"\n [value]=\"ev.title ?? ''\"\n (valueChange)=\"titleChange($event)\"\n ></riv-text-field>\n </div>\n\n <hr class=\"divider\" />\n\n <
|
|
94
|
+
args: [{ selector: 'riv-edit-view', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"editedView; let ev\">\n <riv-callout\n *riv-overlay\n [anchor]=\"anchor ?? null\"\n [isModal]=\"true\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [preferredPosition]=\"'bottom-right'\"\n [fallbackDirection]=\"'clockwise'\"\n (close)=\"close.emit()\"\n >\n <div class=\"edit-view\">\n <div class=\"name-input\">\n <span class=\"name-label\">Name * </span>\n <riv-text-field\n [autoFocus]=\"autoSelectName ? 'select' : false\"\n [value]=\"ev.title ?? ''\"\n (valueChange)=\"titleChange($event)\"\n ></riv-text-field>\n </div>\n\n <hr class=\"divider\" />\n\n <riv-permission-picker\n [permission]=\"ev.permission\"\n [sharedUsers]=\"getSharedUsers(ev)\"\n [userSelectMode]=\"userSelectMode\"\n [userSource]=\"userSource\"\n [onAddUser]=\"onAddUser\"\n [newTooltip]=\"newTooltip\"\n (permissionChange)=\"onPermissionChange($event)\"\n (sharedUsersChange)=\"onSharedUsersChange($event)\"\n ></riv-permission-picker>\n\n <hr class=\"divider\" />\n\n <div class=\"actions\">\n <button\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'Trash2'\"\n (click)=\"delete.emit(ev); close.emit()\"\n *ngIf=\"canEdit()\"\n >\n Delete\n </button>\n\n <div class=\"actions-spacer\"></div>\n\n <div class=\"primary-actions\">\n <button rivButton [variant]=\"'ghost'\" (click)=\"close.emit()\">\n Cancel\n </button>\n <button\n rivButton\n [variant]=\"'primary'\"\n [disabled]=\"canEdit() && isClean()\"\n (click)=\"save.emit(ev); close.emit()\"\n >\n Save\n </button>\n </div>\n </div>\n </div>\n </riv-callout>\n</ng-container>\n", styles: [".edit-view{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-large);width:calc(var(--base-grid-size) * 104);max-width:50vw;max-height:80vh;overflow-y:auto}.divider{height:var(--border-width);background-color:var(--border-light);border:0;width:100%}.name-label{font:var(--title-02)}.name-input{display:flex;flex-direction:column;gap:var(--size-small)}.actions{display:flex;justify-content:space-between;align-items:center}.actions-spacer{flex-grow:1}.primary-actions{display:flex;align-items:center;gap:var(--size-small)}\n"] }]
|
|
136
95
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { anchor: [{
|
|
137
96
|
type: Input
|
|
138
97
|
}], autoSelectName: [{
|
|
@@ -156,4 +115,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
156
115
|
}], close: [{
|
|
157
116
|
type: Output
|
|
158
117
|
}] } });
|
|
159
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL25hdmlnYXRpb24vdmlld3MvZWRpdC12aWV3L2VkaXQtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9uYXZpZ2F0aW9uL3ZpZXdzL2VkaXQtdmlldy9lZGl0LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7Ozs7QUFFcEMsTUFBTSxNQUFNLEdBQTRDO0lBQ3RELE9BQU8sRUFBRSxTQUFTO0lBQ2xCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLE1BQU0sRUFBRSxRQUFRO0NBQ2pCLENBQUM7QUFFRixNQUFNLFNBQVMsR0FBNEM7SUFDekQsT0FBTyxFQUFFLHFCQUFxQjtJQUM5QixNQUFNLEVBQUUscUJBQXFCO0lBQzdCLE1BQU0sRUFBRSxtQ0FBbUM7Q0FDNUMsQ0FBQztBQVFGLE1BQU0sT0FBTyxpQkFBaUI7SUE4RjVCLFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBckYxQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQVdoQyxtQkFBYyxHQUE0QixRQUFRLENBQUM7UUFTbkQsU0FBSSxHQUFzQixNQUFNLENBQUM7UUFHakMsU0FBSSxHQUFHLElBQUksWUFBWSxFQUEyQixDQUFDO1FB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eSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJpdlNlbGVjdCB9IGZyb20gJy4uLy4uLy4uL2lucHV0L3NlbGVjdC9zdGF0ZSc7XG5pbXBvcnQgeyBSaXZWaWV3cyB9IGZyb20gJy4uL3N0YXRlJztcblxuY29uc3QgdGl0bGVzOiBSZWNvcmQ8Uml2Vmlld3MuVmlld1Blcm1pc3Npb24sIHN0cmluZz4gPSB7XG4gIHByaXZhdGU6ICdQcml2YXRlJyxcbiAgcHVibGljOiAnUHVibGljJyxcbiAgc2hhcmVkOiAnU2hhcmVkJyxcbn07XG5cbmNvbnN0IHN1YnRpdGxlczogUmVjb3JkPFJpdlZpZXdzLlZpZXdQZXJtaXNzaW9uLCBzdHJpbmc+ID0ge1xuICBwcml2YXRlOiAnT25seSB2aXNpYmxlIHRvIHlvdScsXG4gIHB1YmxpYzogJ1Zpc2libGUgdG8gZXZlcnlvbmUnLFxuICBzaGFyZWQ6ICdPbmx5IHZpc2libGUgdG8gdGhvc2Ugd2l0aCBhY2Nlc3MnLFxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LWVkaXQtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9lZGl0LXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lZGl0LXZpZXcuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRWRpdFZpZXdDb21wb25lbnQ8XG4gIFUgZXh0ZW5kcyBSaXZWaWV3cy5Vc2VyLFxuICBWIGV4dGVuZHMgUml2Vmlld3MuVmlldzxVPixcbj4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95XG57XG4gIEBJbnB1dCgpXG4gIGFuY2hvcj86IEVsZW1lbnQgfCBET01SZWN0IHwgbnVsbDtcblxuICBASW5wdXQoKVxuICBhdXRvU2VsZWN0TmFtZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHZpZXc/OiBSaXZWaWV3cy5GdWxsVmlldzxVLCBWPjtcblxuICBlZGl0ZWRWaWV3PzogUml2Vmlld3MuRnVsbFZpZXc8VSwgVj47XG5cbiAgQElucHV0KClcbiAgdXNlclNvdXJjZT86IFJpdlZpZXdzLlVzZXJTb3VyY2U8VT47XG5cbiAgQElucHV0KClcbiAgdXNlclNlbGVjdE1vZGU6IFJpdlZpZXdzLlVzZXJTZWxlY3RNb2RlID0gJ3NlbGVjdCc7XG5cbiAgQElucHV0KClcbiAgb25BZGRVc2VyPzogUml2Vmlld3MuT25BZGRVc2VyPFU+O1xuXG4gIEBJbnB1dCgpXG4gIG5ld1Rvb2x0aXA/OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgbW9kZTogJ2VkaXQnIHwgJ2NyZWF0ZScgPSAnZWRpdCc7XG5cbiAgQE91dHB1dCgpXG4gIHNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPFJpdlZpZXdzLkZ1bGxWaWV3PFUsIFY+PigpO1xuXG4gIEBPdXRwdXQoKVxuICBkZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPFJpdlZpZXdzLkZ1bGxWaWV3PFUsIFY+PigpO1xuXG4gIEBPdXRwdXQoKVxuICBjbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICByZWFkb25seSBwZXJtaXNzaW9uT3B0aW9ucyA9IFJpdlZpZXdzLlZpZXdQZXJtaXNzaW9ucy5tYXAocGVybWlzc2lvbiA9PiAoe1xuICAgIHZhbHVlOiBwZXJtaXNzaW9uLFxuICAgIHRpdGxlOiB0aXRsZXNbcGVybWlzc2lvbl0sXG4gICAgc3VidGl0bGU6IHN1YnRpdGxlc1twZXJtaXNzaW9uXSxcbiAgfSkpO1xuXG4gIHByaXZhdGUgcmVzZXRWaWV3KCkge1xuICAgIHRoaXMuZWRpdGVkVmlldyA9IGNsb25lRGVlcCh0aGlzLnZpZXcpO1xuICAgIHRoaXMuc2V0VXBVc2VyU2VsZWN0TWFuYWdlcigpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldFZpZXcoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1sndmlldyddKSB7XG4gICAgICB0aGlzLnJlc2V0VmlldygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudGVhckRvd25Vc2VyU2VsZWN0TWFuYWdlcigpO1xuICB9XG5cbiAgY2FuRWRpdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnZWRpdCc7XG4gIH1cblxuICBpc0NsZWFuKCkge1xuICAgIHJldHVybiBpc0VxdWFsKHRoaXMuZWRpdGVkVmlldywgdGhpcy52aWV3KTtcbiAgfVxuXG4gIHRpdGxlQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lZGl0ZWRWaWV3KSB0aGlzLmVkaXRlZFZpZXcudGl0bGUgPSB2YWx1ZTtcbiAgfVxuXG4gIHBlcm1pc3Npb25DaGFuZ2UodmFsdWU6IFJpdlZpZXdzLlZpZXdQZXJtaXNzaW9uKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWRpdGVkVmlldykgdGhpcy5lZGl0ZWRWaWV3LnBlcm1pc3Npb24gPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2hhcmVkVXNlcnModmlldz86IFJpdlZpZXdzLkZ1bGxWaWV3PFUsIFY+KTogVVtdIHtcbiAgICBpZiAoUml2Vmlld3MuaXNTaGFyZWRWaWV3KHZpZXcpKSB7XG4gICAgICByZXR1cm4gdmlldy5zaGFyZWRVc2VycztcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgdXNlclNlbGVjdE1hbmFnZXI/OiBSaXZTZWxlY3QuTWFuYWdlcjxVPjtcbiAgcHJpdmF0ZSB1c2VyU2VsZWN0U3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIHVzZXJPcHRpb25zOiBSaXZWaWV3cy5TZWFyY2hTZWxlY3RVc2VyPFU+W10gPSBbXTtcbiAgc2VsZWN0ZWRVc2VyczogUml2Vmlld3MuU2VhcmNoU2VsZWN0VXNlcjxVPltdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIHByaXZhdGUgdGVhckRvd25Vc2VyU2VsZWN0TWFuYWdlcigpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJTZWxlY3RTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldFVwVXNlclNlbGVjdE1hbmFnZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy50ZWFyRG93blVzZXJTZWxlY3RNYW5hZ2VyKCk7XG5cbiAgICBpZiAodGhpcy51c2VyU2VsZWN0TW9kZSA9PT0gJ3NlYXJjaC1zZWxlY3QnKSB7XG4gICAgICBjb25zdCB1c2VycyA9IGF3YWl0ICh0aGlzLnVzZXJTb3VyY2UgfHwgKCgpID0+IFtdKSkoKTtcbiAgICAgIHRoaXMudXNlck9wdGlvbnMgPSB1c2Vycy5tYXAodSA9PiAoe1xuICAgICAgICAuLi51LFxuICAgICAgICBuZXc6ICh1IGFzIFJpdlZpZXdzLlNlYXJjaFNlbGVjdFVzZXI8VT4pLm5ldyA/PyBmYWxzZSxcbiAgICAgIH0pKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VycyA9IHRoaXMuZ2V0U2hhcmVkVXNlcnModGhpcy5lZGl0ZWRWaWV3KS5tYXAodSA9PiAoe1xuICAgICAgICAuLi51LFxuICAgICAgICBuZXc6ICh1IGFzIFJpdlZpZXdzLlNlYXJjaFNlbGVjdFVzZXI8VT4pLm5ldyA/PyBmYWxzZSxcbiAgICAgIH0pKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVzZXJTZWxlY3RNYW5hZ2VyID0gUml2U2VsZWN0LmNyZWF0ZUluTWVtb3J5TWFuYWdlcihcbiAgICAgICAgYXN5bmMgKCkgPT4gW3sgb3B0aW9uczogYXdhaXQgKHRoaXMudXNlclNvdXJjZSB8fCAoKCkgPT4gW10pKSgpIH1dLFxuICAgICAgICB7XG4gICAgICAgICAgYWxsb3dTZWFyY2g6IHRydWUsXG4gICAgICAgICAgYWxsb3dTZWxlY3RBbGw6IHRydWUsXG4gICAgICAgICAgYWxsb3dNdWx0aVNlbGVjdDogdHJ1ZSxcbiAgICAgICAgICBkaXNwbGF5TGltaXQ6IDUwMCxcbiAgICAgICAgICBpbml0aWFsU3RhdGU6IHtcbiAgICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgICBzZWxlY3RlZDogbmV3IFJpdlNlbGVjdC5PcHRpb25TZXQoXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTaGFyZWRVc2Vycyh0aGlzLmVkaXRlZFZpZXcpLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIHRoaXMudXNlclNlbGVjdFN1YnNjcmlwdGlvbiA9IHRoaXMudXNlclNlbGVjdE1hbmFnZXIuc3RhdGUuc3Vic2NyaWJlKFxuICAgICAgICBzdGF0ZSA9PiB7XG4gICAgICAgICAgaWYgKFJpdlZpZXdzLmlzU2hhcmVkVmlldyh0aGlzLmVkaXRlZFZpZXcpKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRlZFZpZXcuc2hhcmVkVXNlcnMgPSBbLi4uc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkXSBhcyBVW107XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIHRoaXMudXNlclNlbGVjdE1hbmFnZXIuYWN0aW9ucy5uZXh0KHsgdHlwZTogJ2xvYWQnIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uU2VsZWN0ZWRVc2Vyc0NoYW5nZSh1c2VyczogUml2Vmlld3MuU2VhcmNoU2VsZWN0VXNlcjxVPltdKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFVzZXJzID0gdXNlcnM7XG4gICAgaWYgKFJpdlZpZXdzLmlzU2hhcmVkVmlldyh0aGlzLmVkaXRlZFZpZXcpKSB7XG4gICAgICB0aGlzLmVkaXRlZFZpZXcuc2hhcmVkVXNlcnMgPSBSaXZWaWV3cy50b1NoYXJlZFVzZXJzKHVzZXJzKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVBZGRVc2VyKHNlYXJjaFRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5vbkFkZFVzZXIpIHJldHVybjtcbiAgICBjb25zdCBuZXdVc2VyID0gdGhpcy5vbkFkZFVzZXIoc2VhcmNoVGV4dCk7XG4gICAgdGhpcy51c2VyT3B0aW9ucyA9IFsuLi50aGlzLnVzZXJPcHRpb25zLCBuZXdVc2VyXTtcbiAgICB0aGlzLnNlbGVjdGVkVXNlcnMgPSBbLi4udGhpcy5zZWxlY3RlZFVzZXJzLCBuZXdVc2VyXTtcbiAgICBpZiAoUml2Vmlld3MuaXNTaGFyZWRWaWV3KHRoaXMuZWRpdGVkVmlldykpIHtcbiAgICAgIHRoaXMuZWRpdGVkVmlldy5zaGFyZWRVc2VycyA9IFJpdlZpZXdzLnRvU2hhcmVkVXNlcnModGhpcy5zZWxlY3RlZFVzZXJzKTtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0ZWRWaWV3OyBsZXQgZXZcIj5cbiAgPHJpdi1jYWxsb3V0XG4gICAgKnJpdi1vdmVybGF5XG4gICAgW2FuY2hvcl09XCJhbmNob3IgPz8gbnVsbFwiXG4gICAgW2lzTW9kYWxdPVwidHJ1ZVwiXG4gICAgW3Nob3dDYXJldF09XCJmYWxzZVwiXG4gICAgW3RoZW1lXT1cIidsaWdodCdcIlxuICAgIFtwcmVmZXJyZWRQb3NpdGlvbl09XCInYm90dG9tLXJpZ2h0J1wiXG4gICAgW2ZhbGxiYWNrRGlyZWN0aW9uXT1cIidjbG9ja3dpc2UnXCJcbiAgICAoY2xvc2UpPVwiY2xvc2UuZW1pdCgpXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJlZGl0LXZpZXdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJuYW1lLWlucHV0XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibmFtZS1sYWJlbFwiPk5hbWUgKiA8L3NwYW4+XG4gICAgICAgIDxyaXYtdGV4dC1maWVsZFxuICAgICAgICAgIFthdXRvRm9jdXNdPVwiYXV0b1NlbGVjdE5hbWUgPyAnc2VsZWN0JyA6IGZhbHNlXCJcbiAgICAgICAgICBbdmFsdWVdPVwiZXYudGl0bGUgPz8gJydcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJ0aXRsZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgPjwvcml2LXRleHQtZmllbGQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGhyIGNsYXNzPVwiZGl2aWRlclwiIC8+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJwZXJtaXNzaW9uc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGVybWlzc2lvbi1sYWJlbFwiPlZpZXcgcGVybWlzc2lvbnM8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicGVybWlzc2lvbi1vcHRpb25zXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwZXJtaXNzaW9uT3B0aW9uc1wiXG4gICAgICAgICAgICBjbGFzcz1cInBlcm1pc3Npb24tb3B0aW9uXCJcbiAgICAgICAgICAgIFtjbGFzcy5jdXJyZW50XT1cImV2LnBlcm1pc3Npb24gPT09IG9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJldi5wZXJtaXNzaW9uID09PSBvcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJvcHRpb24udGl0bGUgKyAnIHBlcm1pc3Npb24nXCJcbiAgICAgICAgICAgIChjbGljayk9XCJwZXJtaXNzaW9uQ2hhbmdlKG9wdGlvbi52YWx1ZSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb24tY29udGVudFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgb3B0aW9uLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3B0aW9uLWRlc2NyaXB0aW9uXCI+e3sgb3B0aW9uLnN1YnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHJpdi1pY29uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJldi5wZXJtaXNzaW9uID09PSBvcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicGVybWlzc2lvbi1pbmRpY2F0b3JcIlxuICAgICAgICAgICAgICAgIFtuYW1lXT1cIidDaGVjaydcIlxuICAgICAgICAgICAgICAgIFtzaXplXT1cIjE2XCJcbiAgICAgICAgICAgICAgPjwvcml2LWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxyaXYtc2VsZWN0XG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgZXYucGVybWlzc2lvbiA9PT0gJ3NoYXJlZCcgJiZcbiAgICAgICAgICAgICAgICBvcHRpb24udmFsdWUgPT09ICdzaGFyZWQnICYmXG4gICAgICAgICAgICAgICAgdXNlclNlbGVjdE1vZGUgPT09ICdzZWxlY3QnICYmXG4gICAgICAgICAgICAgICAgdXNlclNlbGVjdE1hbmFnZXJcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIidVc2VycyB3aXRoIGFjY2VzcydcIlxuICAgICAgICAgICAgICBbbWFuYWdlcl09XCJ1c2VyU2VsZWN0TWFuYWdlclwiXG4gICAgICAgICAgICA+PC9yaXYtc2VsZWN0PlxuICAgICAgICAgICAgPHJpdi1zZWFyY2gtc2VsZWN0XG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgZXYucGVybWlzc2lvbiA9PT0gJ3NoYXJlZCcgJiZcbiAgICAgICAgICAgICAgICBvcHRpb24udmFsdWUgPT09ICdzaGFyZWQnICYmXG4gICAgICAgICAgICAgICAgdXNlclNlbGVjdE1vZGUgPT09ICdzZWFyY2gtc2VsZWN0J1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIidVc2VycyB3aXRoIGFjY2VzcydcIlxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJ1c2VyT3B0aW9uc1wiXG4gICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZFVzZXJzXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWFyY2ggdXNlcnMnXCJcbiAgICAgICAgICAgICAgW2FkZE5ld0xhYmVsXT1cIidBZGQnXCJcbiAgICAgICAgICAgICAgW25ld1Rvb2x0aXBdPVwibmV3VG9vbHRpcFwiXG4gICAgICAgICAgICAgIChzZWxlY3RlZENoYW5nZSk9XCJvblNlbGVjdGVkVXNlcnNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChhZGROZXcpPVwiaGFuZGxlQWRkVXNlcigkZXZlbnQpXCJcbiAgICAgICAgICAgID48L3Jpdi1zZWFyY2gtc2VsZWN0PlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8aHIgY2xhc3M9XCJkaXZpZGVyXCIgLz5cblxuICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHJpdkJ1dHRvblxuICAgICAgICAgIFt2YXJpYW50XT1cIidnaG9zdCdcIlxuICAgICAgICAgIFtpY29uXT1cIidUcmFzaDInXCJcbiAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlLmVtaXQoZXYpOyBjbG9zZS5lbWl0KClcIlxuICAgICAgICAgICpuZ0lmPVwiY2FuRWRpdCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIERlbGV0ZVxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9ucy1zcGFjZXJcIj48L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJpbWFyeS1hY3Rpb25zXCI+XG4gICAgICAgICAgPGJ1dHRvbiByaXZCdXR0b24gW3ZhcmlhbnRdPVwiJ2dob3N0J1wiIChjbGljayk9XCJjbG9zZS5lbWl0KClcIj5cbiAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHJpdkJ1dHRvblxuICAgICAgICAgICAgW3ZhcmlhbnRdPVwiJ3ByaW1hcnknXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjYW5FZGl0KCkgJiYgaXNDbGVhbigpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzYXZlLmVtaXQoZXYpOyBjbG9zZS5lbWl0KClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFNhdmVcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9yaXYtY2FsbG91dD5cbjwvbmctY29udGFpbmVyPlxuIl19
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL25hdmlnYXRpb24vdmlld3MvZWRpdC12aWV3L2VkaXQtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9uYXZpZ2F0aW9uL3ZpZXdzL2VkaXQtdmlldy9lZGl0LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDNUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7Ozs7QUFRcEMsTUFBTSxPQUFPLGlCQUFpQjtJQXdDNUIsWUFBNkIsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUEvQm5ELG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBV2hDLG1CQUFjLEdBQTRCLFFBQVEsQ0FBQztRQVNuRCxTQUFJLEdBQXNCLE1BQU0sQ0FBQztRQUdqQyxTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQTJCLENBQUM7UUFHbkQsV0FBTSxHQUFHLElBQUksWUFBWSxFQUEyQixDQUFDO1FBR3JELFVBQUssR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBRXFCLENBQUM7SUFFL0MsU0FBUztRQUNmLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hD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bmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFJpdlZpZXdzIH0gZnJvbSAnLi4vc3RhdGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtZWRpdC12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VkaXQtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VkaXQtdmlldy5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBFZGl0Vmlld0NvbXBvbmVudDxcbiAgVSBleHRlbmRzIFJpdlZpZXdzLlVzZXIsXG4gIFYgZXh0ZW5kcyBSaXZWaWV3cy5WaWV3PFU+LFxuPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzXG57XG4gIEBJbnB1dCgpXG4gIGFuY2hvcj86IEVsZW1lbnQgfCBET01SZWN0IHwgbnVsbDtcblxuICBASW5wdXQoKVxuICBhdXRvU2VsZWN0TmFtZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHZpZXc/OiBSaXZWaWV3cy5GdWxsVmlldzxVLCBWPjtcblxuICBlZGl0ZWRWaWV3PzogUml2Vmlld3MuRnVsbFZpZXc8VSwgVj47XG5cbiAgQElucHV0KClcbiAgdXNlclNvdXJjZT86IFJpdlZpZXdzLlVzZXJTb3VyY2U8VT47XG5cbiAgQElucHV0KClcbiAgdXNlclNlbGVjdE1vZGU6IFJpdlZpZXdzLlVzZXJTZWxlY3RNb2RlID0gJ3NlbGVjdCc7XG5cbiAgQElucHV0KClcbiAgb25BZGRVc2VyPzogUml2Vmlld3MuT25BZGRVc2VyPFU+O1xuXG4gIEBJbnB1dCgpXG4gIG5ld1Rvb2x0aXA/OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgbW9kZTogJ2VkaXQnIHwgJ2NyZWF0ZScgPSAnZWRpdCc7XG5cbiAgQE91dHB1dCgpXG4gIHNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPFJpdlZpZXdzLkZ1bGxWaWV3PFUsIFY+PigpO1xuXG4gIEBPdXRwdXQoKVxuICBkZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPFJpdlZpZXdzLkZ1bGxWaWV3PFUsIFY+PigpO1xuXG4gIEBPdXRwdXQoKVxuICBjbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgcHJpdmF0ZSByZXNldFZpZXcoKSB7XG4gICAgdGhpcy5lZGl0ZWRWaWV3ID0gY2xvbmVEZWVwKHRoaXMudmlldyk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0VmlldygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWyd2aWV3J10pIHtcbiAgICAgIHRoaXMucmVzZXRWaWV3KCk7XG4gICAgfVxuICB9XG5cbiAgY2FuRWRpdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnZWRpdCc7XG4gIH1cblxuICBpc0NsZWFuKCkge1xuICAgIHJldHVybiBpc0VxdWFsKHRoaXMuZWRpdGVkVmlldywgdGhpcy52aWV3KTtcbiAgfVxuXG4gIHRpdGxlQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lZGl0ZWRWaWV3KSB0aGlzLmVkaXRlZFZpZXcudGl0bGUgPSB2YWx1ZTtcbiAgICAvLyBUaGVzZSBoYW5kbGVycyBmaXJlIGZyb20gdGhlIHBlcm1pc3Npb24gcGlja2VyIC8gdGV4dCBmaWVsZCwgd2hpY2ggcmVuZGVyXG4gICAgLy8gaW4gdGhlIG92ZXJsYXkgb3V0bGV0J3MgY2hhbmdlLWRldGVjdGlvbiBzdWJ0cmVlIOKAlCBhIGRpZmZlcmVudCBicmFuY2ggdGhhblxuICAgIC8vIHRoaXMgT25QdXNoIGNvbXBvbmVudC4gV2l0aG91dCBtYXJrRm9yQ2hlY2sgdGhlIHVwZGF0ZWQgZWRpdGVkVmlldyBuZXZlclxuICAgIC8vIGZsb3dzIGJhY2sgaW50byB0aGUgY2hpbGQgaW5wdXQgYmluZGluZ3MgKGUuZy4gdGhlIGhpZ2hsaWdodGVkIG9wdGlvbikuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvblBlcm1pc3Npb25DaGFuZ2UodmFsdWU6IFJpdlZpZXdzLlZpZXdQZXJtaXNzaW9uKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVkaXRlZFZpZXcpIHJldHVybjtcblxuICAgIGlmICh2YWx1ZSA9PT0gJ3NoYXJlZCcpIHtcbiAgICAgIGlmICghUml2Vmlld3MuaXNTaGFyZWRWaWV3KHRoaXMuZWRpdGVkVmlldykpIHtcbiAgICAgICAgdGhpcy5lZGl0ZWRWaWV3ID0ge1xuICAgICAgICAgIC4uLnRoaXMuZWRpdGVkVmlldyxcbiAgICAgICAgICBwZXJtaXNzaW9uOiAnc2hhcmVkJyxcbiAgICAgICAgICBzaGFyZWRVc2VyczogW10sXG4gICAgICAgIH0gYXMgdW5rbm93biBhcyBSaXZWaWV3cy5GdWxsVmlldzxVLCBWPjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFJpdlZpZXdzLmlzU2hhcmVkVmlldyh0aGlzLmVkaXRlZFZpZXcpKSB7XG4gICAgICAgIGNvbnN0IHsgc2hhcmVkVXNlcnMsIC4uLnJlc3QgfSA9IHRoaXMuZWRpdGVkVmlldztcbiAgICAgICAgdGhpcy5lZGl0ZWRWaWV3ID0ge1xuICAgICAgICAgIC4uLnJlc3QsXG4gICAgICAgICAgcGVybWlzc2lvbjogdmFsdWUsXG4gICAgICAgIH0gYXMgdW5rbm93biBhcyBSaXZWaWV3cy5GdWxsVmlldzxVLCBWPjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZWRpdGVkVmlldy5wZXJtaXNzaW9uID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25TaGFyZWRVc2Vyc0NoYW5nZSh1c2VyczogVVtdKTogdm9pZCB7XG4gICAgaWYgKFJpdlZpZXdzLmlzU2hhcmVkVmlldyh0aGlzLmVkaXRlZFZpZXcpKSB7XG4gICAgICB0aGlzLmVkaXRlZFZpZXcuc2hhcmVkVXNlcnMgPSB1c2VycztcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyBTdGFibGUgZW1wdHktYXJyYXkgcmVmZXJlbmNlIGZvciB0aGUgbm9uLXNoYXJlZCBicmFuY2gsIHNvIHRoaXMgZ2V0dGVyXG4gIC8vIGRvZXNuJ3QgaGFuZCB0aGUgcGVybWlzc2lvbiBwaWNrZXIgYSBmcmVzaCBbXSBvbiBldmVyeSBjaGFuZ2UtZGV0ZWN0aW9uXG4gIC8vIGN5Y2xlICh3aGljaCB3b3VsZCBjaHVybiBpdHMgQElucHV0IGFuZCB0cmlnZ2VyIG5lZWRsZXNzIHdvcmspLlxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBOT19TSEFSRURfVVNFUlM6IFJpdlZpZXdzLlVzZXJbXSA9IFtdO1xuXG4gIGdldFNoYXJlZFVzZXJzKHZpZXc/OiBSaXZWaWV3cy5GdWxsVmlldzxVLCBWPik6IFVbXSB7XG4gICAgaWYgKFJpdlZpZXdzLmlzU2hhcmVkVmlldyh2aWV3KSkge1xuICAgICAgcmV0dXJuIHZpZXcuc2hhcmVkVXNlcnM7XG4gICAgfVxuICAgIHJldHVybiBFZGl0Vmlld0NvbXBvbmVudC5OT19TSEFSRURfVVNFUlMgYXMgVVtdO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiZWRpdGVkVmlldzsgbGV0IGV2XCI+XG4gIDxyaXYtY2FsbG91dFxuICAgICpyaXYtb3ZlcmxheVxuICAgIFthbmNob3JdPVwiYW5jaG9yID8/IG51bGxcIlxuICAgIFtpc01vZGFsXT1cInRydWVcIlxuICAgIFtzaG93Q2FyZXRdPVwiZmFsc2VcIlxuICAgIFt0aGVtZV09XCInbGlnaHQnXCJcbiAgICBbcHJlZmVycmVkUG9zaXRpb25dPVwiJ2JvdHRvbS1yaWdodCdcIlxuICAgIFtmYWxsYmFja0RpcmVjdGlvbl09XCInY2xvY2t3aXNlJ1wiXG4gICAgKGNsb3NlKT1cImNsb3NlLmVtaXQoKVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiZWRpdC12aWV3XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibmFtZS1pbnB1dFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm5hbWUtbGFiZWxcIj5OYW1lICogPC9zcGFuPlxuICAgICAgICA8cml2LXRleHQtZmllbGRcbiAgICAgICAgICBbYXV0b0ZvY3VzXT1cImF1dG9TZWxlY3ROYW1lID8gJ3NlbGVjdCcgOiBmYWxzZVwiXG4gICAgICAgICAgW3ZhbHVlXT1cImV2LnRpdGxlID8/ICcnXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwidGl0bGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID48L3Jpdi10ZXh0LWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxociBjbGFzcz1cImRpdmlkZXJcIiAvPlxuXG4gICAgICA8cml2LXBlcm1pc3Npb24tcGlja2VyXG4gICAgICAgIFtwZXJtaXNzaW9uXT1cImV2LnBlcm1pc3Npb25cIlxuICAgICAgICBbc2hhcmVkVXNlcnNdPVwiZ2V0U2hhcmVkVXNlcnMoZXYpXCJcbiAgICAgICAgW3VzZXJTZWxlY3RNb2RlXT1cInVzZXJTZWxlY3RNb2RlXCJcbiAgICAgICAgW3VzZXJTb3VyY2VdPVwidXNlclNvdXJjZVwiXG4gICAgICAgIFtvbkFkZFVzZXJdPVwib25BZGRVc2VyXCJcbiAgICAgICAgW25ld1Rvb2x0aXBdPVwibmV3VG9vbHRpcFwiXG4gICAgICAgIChwZXJtaXNzaW9uQ2hhbmdlKT1cIm9uUGVybWlzc2lvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKHNoYXJlZFVzZXJzQ2hhbmdlKT1cIm9uU2hhcmVkVXNlcnNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICA+PC9yaXYtcGVybWlzc2lvbi1waWNrZXI+XG5cbiAgICAgIDxociBjbGFzcz1cImRpdmlkZXJcIiAvPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgcml2QnV0dG9uXG4gICAgICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICAgICAgW2ljb25dPVwiJ1RyYXNoMidcIlxuICAgICAgICAgIChjbGljayk9XCJkZWxldGUuZW1pdChldik7IGNsb3NlLmVtaXQoKVwiXG4gICAgICAgICAgKm5nSWY9XCJjYW5FZGl0KClcIlxuICAgICAgICA+XG4gICAgICAgICAgRGVsZXRlXG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zLXNwYWNlclwiPjwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcmltYXJ5LWFjdGlvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uIHJpdkJ1dHRvbiBbdmFyaWFudF09XCInZ2hvc3QnXCIgKGNsaWNrKT1cImNsb3NlLmVtaXQoKVwiPlxuICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgcml2QnV0dG9uXG4gICAgICAgICAgICBbdmFyaWFudF09XCIncHJpbWFyeSdcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNhbkVkaXQoKSAmJiBpc0NsZWFuKClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNhdmUuZW1pdChldik7IGNsb3NlLmVtaXQoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgU2F2ZVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L3Jpdi1jYWxsb3V0PlxuPC9uZy1jb250YWluZXI+XG4iXX0=
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
|
|
2
|
+
import { isEqual } from 'lodash';
|
|
3
|
+
import { distinctUntilChanged, map } from 'rxjs/operators';
|
|
4
|
+
import { RivSelect } from '../../../input/select/state';
|
|
5
|
+
import { RivViews } from '../state';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/common";
|
|
8
|
+
import * as i2 from "../../../icon/icon.component";
|
|
9
|
+
import * as i3 from "../../../input/search-select/search-select.component";
|
|
10
|
+
import * as i4 from "../../../input/select/select/select.component";
|
|
11
|
+
const titles = {
|
|
12
|
+
private: 'Private',
|
|
13
|
+
public: 'Public',
|
|
14
|
+
shared: 'Shared',
|
|
15
|
+
};
|
|
16
|
+
const subtitles = {
|
|
17
|
+
private: 'Only visible to you',
|
|
18
|
+
public: 'Visible to everyone',
|
|
19
|
+
shared: 'Only visible to those with access',
|
|
20
|
+
};
|
|
21
|
+
export class PermissionPickerComponent {
|
|
22
|
+
constructor(cdr) {
|
|
23
|
+
this.cdr = cdr;
|
|
24
|
+
this.permission = 'private';
|
|
25
|
+
this.sharedUsers = [];
|
|
26
|
+
this.userSelectMode = 'select';
|
|
27
|
+
this.disabledPermissions = [];
|
|
28
|
+
this.permissionChange = new EventEmitter();
|
|
29
|
+
this.sharedUsersChange = new EventEmitter();
|
|
30
|
+
this.permissionOptions = RivViews.ViewPermissions.map(permission => ({
|
|
31
|
+
value: permission,
|
|
32
|
+
title: titles[permission],
|
|
33
|
+
subtitle: subtitles[permission],
|
|
34
|
+
}));
|
|
35
|
+
this.userOptions = [];
|
|
36
|
+
this.selectedUsers = [];
|
|
37
|
+
}
|
|
38
|
+
ngOnInit() {
|
|
39
|
+
this.setUpUserSelectManager();
|
|
40
|
+
}
|
|
41
|
+
ngOnChanges(changes) {
|
|
42
|
+
// ngOnInit performs the initial setup, so ignore first-change events here.
|
|
43
|
+
// Rebuild only on a genuine change: a new data source, a mode switch, or a
|
|
44
|
+
// value-level change to the seeded selection. Comparing sharedUsers by value
|
|
45
|
+
// (rather than reference) is essential — the parent binds a fresh array each
|
|
46
|
+
// change-detection cycle, and reacting to that reference churn would rebuild
|
|
47
|
+
// the manager on every cycle.
|
|
48
|
+
const userSourceChanged = changes['userSource'] && !changes['userSource'].firstChange;
|
|
49
|
+
const userSelectModeChanged = changes['userSelectMode'] && !changes['userSelectMode'].firstChange;
|
|
50
|
+
const sharedUsersChanged = changes['sharedUsers'] &&
|
|
51
|
+
!changes['sharedUsers'].firstChange &&
|
|
52
|
+
!isEqual(changes['sharedUsers'].previousValue, changes['sharedUsers'].currentValue);
|
|
53
|
+
if (userSourceChanged || userSelectModeChanged || sharedUsersChanged) {
|
|
54
|
+
this.setUpUserSelectManager();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
ngOnDestroy() {
|
|
58
|
+
this.tearDownUserSelectManager();
|
|
59
|
+
}
|
|
60
|
+
tearDownUserSelectManager() {
|
|
61
|
+
this.userSelectSubscription?.unsubscribe();
|
|
62
|
+
}
|
|
63
|
+
async setUpUserSelectManager() {
|
|
64
|
+
this.tearDownUserSelectManager();
|
|
65
|
+
if (this.userSelectMode === 'search-select') {
|
|
66
|
+
const users = await (this.userSource || (() => []))();
|
|
67
|
+
this.userOptions = users.map(u => ({
|
|
68
|
+
...u,
|
|
69
|
+
new: u.new ?? false,
|
|
70
|
+
}));
|
|
71
|
+
this.selectedUsers = this.sharedUsers.map(u => ({
|
|
72
|
+
...u,
|
|
73
|
+
new: u.new ?? false,
|
|
74
|
+
}));
|
|
75
|
+
this.cdr.markForCheck();
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
this.userSelectManager = RivSelect.createInMemoryManager(async () => [{ options: await (this.userSource || (() => []))() }], {
|
|
79
|
+
allowSearch: true,
|
|
80
|
+
allowSelectAll: true,
|
|
81
|
+
allowMultiSelect: true,
|
|
82
|
+
displayLimit: 500,
|
|
83
|
+
initialState: {
|
|
84
|
+
selection: {
|
|
85
|
+
selected: new RivSelect.OptionSet(this.sharedUsers),
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
this.userSelectSubscription = this.userSelectManager.state
|
|
90
|
+
.pipe(map(state => [...state.selection.selected]), distinctUntilChanged(isEqual))
|
|
91
|
+
.subscribe(users => {
|
|
92
|
+
// The manager replays its initial (seeded) selection synchronously on
|
|
93
|
+
// subscribe. Emitting that back would echo the sharedUsers input to
|
|
94
|
+
// the parent, which mutates its view and feeds a new array reference
|
|
95
|
+
// straight back into this component — an infinite change-detection
|
|
96
|
+
// loop. Only propagate genuine, user-driven selection changes.
|
|
97
|
+
if (!isEqual(users, this.sharedUsers)) {
|
|
98
|
+
this.sharedUsersChange.emit(users);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
this.userSelectManager.actions.next({ type: 'load' });
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
onPermissionClick(value) {
|
|
105
|
+
if (this.isDisabled(value)) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
this.permissionChange.emit(value);
|
|
109
|
+
}
|
|
110
|
+
isDisabled(permission) {
|
|
111
|
+
return this.disabledPermissions?.includes(permission) ?? false;
|
|
112
|
+
}
|
|
113
|
+
onSelectedUsersChange(users) {
|
|
114
|
+
this.selectedUsers = users;
|
|
115
|
+
this.sharedUsersChange.emit(RivViews.toSharedUsers(users));
|
|
116
|
+
}
|
|
117
|
+
handleAddUser(searchText) {
|
|
118
|
+
if (!this.onAddUser)
|
|
119
|
+
return;
|
|
120
|
+
const newUser = this.onAddUser(searchText);
|
|
121
|
+
this.userOptions = [...this.userOptions, newUser];
|
|
122
|
+
this.selectedUsers = [...this.selectedUsers, newUser];
|
|
123
|
+
this.sharedUsersChange.emit(RivViews.toSharedUsers(this.selectedUsers));
|
|
124
|
+
this.cdr.markForCheck();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
PermissionPickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PermissionPickerComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
128
|
+
PermissionPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PermissionPickerComponent, selector: "riv-permission-picker", inputs: { permission: "permission", sharedUsers: "sharedUsers", userSelectMode: "userSelectMode", userSource: "userSource", onAddUser: "onAddUser", newTooltip: "newTooltip", disabledPermissions: "disabledPermissions" }, outputs: { permissionChange: "permissionChange", sharedUsersChange: "sharedUsersChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"permission-picker\">\n <div class=\"permission-label\">View permissions</div>\n\n <div class=\"permission-options\">\n <button\n *ngFor=\"let option of permissionOptions\"\n class=\"permission-option\"\n [class.current]=\"permission === option.value\"\n [class.disabled]=\"isDisabled(option.value)\"\n type=\"button\"\n [attr.aria-checked]=\"permission === option.value\"\n [attr.aria-label]=\"option.title + ' permission'\"\n [attr.aria-disabled]=\"isDisabled(option.value)\"\n (click)=\"onPermissionClick(option.value)\"\n >\n <div class=\"option-content\">\n <div class=\"option-title\">\n <span>{{ option.title }}</span>\n <span class=\"option-description\">{{ option.subtitle }}</span>\n </div>\n <riv-icon\n *ngIf=\"permission === option.value\"\n class=\"permission-indicator\"\n [name]=\"'Check'\"\n [size]=\"16\"\n ></riv-icon>\n </div>\n <riv-select\n *ngIf=\"\n permission === 'shared' &&\n option.value === 'shared' &&\n userSelectMode === 'select' &&\n userSelectManager\n \"\n [label]=\"'Users with access'\"\n [manager]=\"userSelectManager\"\n ></riv-select>\n <riv-search-select\n *ngIf=\"\n permission === 'shared' &&\n option.value === 'shared' &&\n userSelectMode === 'search-select'\n \"\n (click)=\"$event.stopPropagation()\"\n [label]=\"'Users with access'\"\n [options]=\"userOptions\"\n [selected]=\"selectedUsers\"\n [placeholder]=\"'Search users'\"\n [addNewLabel]=\"'Add'\"\n [newTooltip]=\"newTooltip\"\n (selectedChange)=\"onSelectedUsersChange($event)\"\n (addNew)=\"handleAddUser($event)\"\n ></riv-search-select>\n </button>\n </div>\n</div>\n", styles: [".permission-picker{display:flex;flex-direction:column;gap:var(--size-medium)}.permission-options{display:flex;flex-direction:column}.permission-label{font:var(--title-02)}.permission-option{display:flex;flex-direction:column;gap:var(--size-small);padding:var(--size-small) var(--size-medium);border-radius:var(--border-radius-large);cursor:pointer;text-align:left}.permission-option:hover:not(.disabled){background-color:var(--surface-light-1)}.permission-option:active:not(.disabled),.permission-option.current{background-color:var(--surface-light-2)}.permission-option.disabled{cursor:not-allowed;opacity:.5}.option-content{display:flex;justify-content:space-between;align-items:center}.option-title{font:var(--body-medium);display:flex;flex-direction:column;align-items:flex-start}.option-description{font:var(--body-medium);color:var(--type-light-low-contrast)}.permission-indicator{color:var(--type-light-link)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IconComponent, selector: "riv-icon", inputs: ["name", "fillColor", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i3.SearchSelectComponent, selector: "riv-search-select", inputs: ["options", "selected", "placeholder", "addNewLabel", "newTooltip", "size", "disabled", "label", "help", "required", "state", "errorMessage", "optionTemplate", "chipTemplate"], outputs: ["selectedChange", "addNew"] }, { kind: "component", type: i4.SelectComponent, selector: "riv-select", inputs: ["manager", "size", "disabled", "locked", "allowedCalloutPositions", "preferredCalloutPosition"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
129
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PermissionPickerComponent, decorators: [{
|
|
130
|
+
type: Component,
|
|
131
|
+
args: [{ selector: 'riv-permission-picker', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"permission-picker\">\n <div class=\"permission-label\">View permissions</div>\n\n <div class=\"permission-options\">\n <button\n *ngFor=\"let option of permissionOptions\"\n class=\"permission-option\"\n [class.current]=\"permission === option.value\"\n [class.disabled]=\"isDisabled(option.value)\"\n type=\"button\"\n [attr.aria-checked]=\"permission === option.value\"\n [attr.aria-label]=\"option.title + ' permission'\"\n [attr.aria-disabled]=\"isDisabled(option.value)\"\n (click)=\"onPermissionClick(option.value)\"\n >\n <div class=\"option-content\">\n <div class=\"option-title\">\n <span>{{ option.title }}</span>\n <span class=\"option-description\">{{ option.subtitle }}</span>\n </div>\n <riv-icon\n *ngIf=\"permission === option.value\"\n class=\"permission-indicator\"\n [name]=\"'Check'\"\n [size]=\"16\"\n ></riv-icon>\n </div>\n <riv-select\n *ngIf=\"\n permission === 'shared' &&\n option.value === 'shared' &&\n userSelectMode === 'select' &&\n userSelectManager\n \"\n [label]=\"'Users with access'\"\n [manager]=\"userSelectManager\"\n ></riv-select>\n <riv-search-select\n *ngIf=\"\n permission === 'shared' &&\n option.value === 'shared' &&\n userSelectMode === 'search-select'\n \"\n (click)=\"$event.stopPropagation()\"\n [label]=\"'Users with access'\"\n [options]=\"userOptions\"\n [selected]=\"selectedUsers\"\n [placeholder]=\"'Search users'\"\n [addNewLabel]=\"'Add'\"\n [newTooltip]=\"newTooltip\"\n (selectedChange)=\"onSelectedUsersChange($event)\"\n (addNew)=\"handleAddUser($event)\"\n ></riv-search-select>\n </button>\n </div>\n</div>\n", styles: [".permission-picker{display:flex;flex-direction:column;gap:var(--size-medium)}.permission-options{display:flex;flex-direction:column}.permission-label{font:var(--title-02)}.permission-option{display:flex;flex-direction:column;gap:var(--size-small);padding:var(--size-small) var(--size-medium);border-radius:var(--border-radius-large);cursor:pointer;text-align:left}.permission-option:hover:not(.disabled){background-color:var(--surface-light-1)}.permission-option:active:not(.disabled),.permission-option.current{background-color:var(--surface-light-2)}.permission-option.disabled{cursor:not-allowed;opacity:.5}.option-content{display:flex;justify-content:space-between;align-items:center}.option-title{font:var(--body-medium);display:flex;flex-direction:column;align-items:flex-start}.option-description{font:var(--body-medium);color:var(--type-light-low-contrast)}.permission-indicator{color:var(--type-light-link)}\n"] }]
|
|
132
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { permission: [{
|
|
133
|
+
type: Input
|
|
134
|
+
}], sharedUsers: [{
|
|
135
|
+
type: Input
|
|
136
|
+
}], userSelectMode: [{
|
|
137
|
+
type: Input
|
|
138
|
+
}], userSource: [{
|
|
139
|
+
type: Input
|
|
140
|
+
}], onAddUser: [{
|
|
141
|
+
type: Input
|
|
142
|
+
}], newTooltip: [{
|
|
143
|
+
type: Input
|
|
144
|
+
}], disabledPermissions: [{
|
|
145
|
+
type: Input
|
|
146
|
+
}], permissionChange: [{
|
|
147
|
+
type: Output
|
|
148
|
+
}], sharedUsersChange: [{
|
|
149
|
+
type: Output
|
|
150
|
+
}] } });
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvbmF2aWdhdGlvbi92aWV3cy9wZXJtaXNzaW9uLXBpY2tlci9wZXJtaXNzaW9uLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9uYXZpZ2F0aW9uL3ZpZXdzL3Blcm1pc3Npb24tcGlja2VyL3Blcm1pc3Npb24tcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFakMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDOzs7Ozs7QUFFcEMsTUFBTSxNQUFNLEdBQTRDO0lBQ3RELE9BQU8sRUFBRSxTQUFTO0lBQ2xCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLE1BQU0sRUFBRSxRQUFRO0NBQ2pCLENBQUM7QUFFRixNQUFNLFNBQVMsR0FBNEM7SUFDekQsT0FBTyxFQUFFLHFCQUFxQjtJQUM5QixNQUFNLEVBQUUscUJBQXFCO0lBQzdCLE1BQU0sRUFBRSxtQ0FBbUM7Q0FDNUMsQ0FBQztBQVFGLE1BQU0sT0FBTyx5QkFBeUI7SUEwQ3BDLFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBdEMxQyxlQUFVLEdBQTRCLFNBQVMsQ0FBQztRQUdoRCxnQkFBVyxHQUFRLEVBQUUsQ0FBQztRQUd0QixtQkFBYyxHQUE0QixRQUFRLENBQUM7UUFZbkQsd0JBQW1CLEdBQThCLEVBQUUsQ0FBQztRQUdwRCxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBMkIsQ0FBQztRQUcvRCxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRW5DLHNCQUFpQixHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2RSxLQUFLLEVBQUUsVUFBVTtZQUNqQixLQUFLLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQztZQUN6QixRQUFRLEVBQUUsU0FBUyxDQUFDLFVBQVUsQ0FBQztTQUNoQyxDQUFDLENBQUMsQ0FBQztRQUtKLGdCQUFXLEdBQW1DLEVBQUUsQ0FBQztRQUNqRCxrQkFBYSxHQUFtQyxFQUFFLENBQUM7SUFFTixDQUFDO0lBRTlDLFFBQVE7UUFDTixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLDJFQUEyRTtRQUMzRSwyRUFBMkU7UUFDM0UsNkVBQTZFO1FBQzdFLDZFQUE2RTtRQUM3RSw2RUFBNkU7UUFDN0UsOEJBQThCO1FBQzlCLE1BQU0saUJBQWlCLEdBQ3JCLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDOUQsTUFBTSxxQkFBcUIsR0FDekIsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDdEUsTUFBTSxrQkFBa0IsR0FDdEIsT0FBTyxDQUFDLGFBQWEsQ0FBQztZQUN0QixDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxXQUFXO1lBQ25DLENBQUMsT0FBTyxDQUNOLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxhQUFhLEVBQ3BDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxZQUFZLENBQ3BDLENBQUM7UUFFSixJQUFJLGlCQUFpQixJQUFJLHFCQUFxQixJQUFJLGtCQUFrQixFQUFFO1lBQ3BFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRU8seUJBQXlCO1FBQy9CLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRU8sS0FBSyxDQUFDLHNCQUFzQjtRQUNsQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUVqQyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssZUFBZSxFQUFFO1lBQzNDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2pDLEdBQUcsQ0FBQztnQkFDSixHQUFHLEVBQUcsQ0FBa0MsQ0FBQyxHQUFHLElBQUksS0FBSzthQUN0RCxDQUFDLENBQUMsQ0FBQztZQUNKLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM5QyxHQUFHLENBQUM7Z0JBQ0osR0FBRyxFQUFHLENBQWtDLENBQUMsR0FBRyxJQUFJLEtBQUs7YUFDdEQsQ0FBQyxDQUFDLENBQUM7WUFDSixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3pCO2FBQU07WUFDTCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDLHFCQUFxQixDQUN0RCxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUNsRTtnQkFDRSxXQUFXLEVBQUUsSUFBSTtnQkFDakIsY0FBYyxFQUFFLElBQUk7Z0JBQ3BCLGdCQUFnQixFQUFFLElBQUk7Z0JBQ3RCLFlBQVksRUFBRSxHQUFHO2dCQUNqQixZQUFZLEVBQUU7b0JBQ1osU0FBUyxFQUFFO3dCQUNULFFBQVEsRUFBRSxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztxQkFDcEQ7aUJBQ0Y7YUFDRixDQUNGLENBQUM7WUFDRixJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUs7aUJBQ3ZELElBQUksQ0FDSCxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQVEsQ0FBQyxFQUNsRCxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FDOUI7aUJBQ0EsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNqQixzRUFBc0U7Z0JBQ3RFLG9FQUFvRTtnQkFDcEUscUVBQXFFO2dCQUNyRSxtRUFBbUU7Z0JBQ25FLCtEQUErRDtnQkFDL0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFO29CQUNyQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNwQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztTQUN2RDtJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUE4QjtRQUM5QyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsVUFBVSxDQUFDLFVBQW1DO1FBQzVDLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUM7SUFDakUsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQXFDO1FBQ3pELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxhQUFhLENBQUMsVUFBa0I7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTztRQUM1QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDOztzSEF2SlUseUJBQXlCOzBHQUF6Qix5QkFBeUIseVlDcEN0Qyx1NERBd0RBOzJGRHBCYSx5QkFBeUI7a0JBTnJDLFNBQVM7K0JBQ0UsdUJBQXVCLG1CQUdoQix1QkFBdUIsQ0FBQyxNQUFNO3dHQU0vQyxVQUFVO3NCQURULEtBQUs7Z0JBSU4sV0FBVztzQkFEVixLQUFLO2dCQUlOLGNBQWM7c0JBRGIsS0FBSztnQkFJTixVQUFVO3NCQURULEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLFVBQVU7c0JBRFQsS0FBSztnQkFJTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBSU4sZ0JBQWdCO3NCQURmLE1BQU07Z0JBSVAsaUJBQWlCO3NCQURoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJpdlNlbGVjdCB9IGZyb20gJy4uLy4uLy4uL2lucHV0L3NlbGVjdC9zdGF0ZSc7XG5pbXBvcnQgeyBSaXZWaWV3cyB9IGZyb20gJy4uL3N0YXRlJztcblxuY29uc3QgdGl0bGVzOiBSZWNvcmQ8Uml2Vmlld3MuVmlld1Blcm1pc3Npb24sIHN0cmluZz4gPSB7XG4gIHByaXZhdGU6ICdQcml2YXRlJyxcbiAgcHVibGljOiAnUHVibGljJyxcbiAgc2hhcmVkOiAnU2hhcmVkJyxcbn07XG5cbmNvbnN0IHN1YnRpdGxlczogUmVjb3JkPFJpdlZpZXdzLlZpZXdQZXJtaXNzaW9uLCBzdHJpbmc+ID0ge1xuICBwcml2YXRlOiAnT25seSB2aXNpYmxlIHRvIHlvdScsXG4gIHB1YmxpYzogJ1Zpc2libGUgdG8gZXZlcnlvbmUnLFxuICBzaGFyZWQ6ICdPbmx5IHZpc2libGUgdG8gdGhvc2Ugd2l0aCBhY2Nlc3MnLFxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LXBlcm1pc3Npb24tcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Blcm1pc3Npb24tcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcGVybWlzc2lvbi1waWNrZXIuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvblBpY2tlckNvbXBvbmVudDxVIGV4dGVuZHMgUml2Vmlld3MuVXNlcj5cbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95XG57XG4gIEBJbnB1dCgpXG4gIHBlcm1pc3Npb246IFJpdlZpZXdzLlZpZXdQZXJtaXNzaW9uID0gJ3ByaXZhdGUnO1xuXG4gIEBJbnB1dCgpXG4gIHNoYXJlZFVzZXJzOiBVW10gPSBbXTtcblxuICBASW5wdXQoKVxuICB1c2VyU2VsZWN0TW9kZTogUml2Vmlld3MuVXNlclNlbGVjdE1vZGUgPSAnc2VsZWN0JztcblxuICBASW5wdXQoKVxuICB1c2VyU291cmNlPzogUml2Vmlld3MuVXNlclNvdXJjZTxVPjtcblxuICBASW5wdXQoKVxuICBvbkFkZFVzZXI/OiBSaXZWaWV3cy5PbkFkZFVzZXI8VT47XG5cbiAgQElucHV0KClcbiAgbmV3VG9vbHRpcD86IHN0cmluZztcblxuICBASW5wdXQoKVxuICBkaXNhYmxlZFBlcm1pc3Npb25zOiBSaXZWaWV3cy5WaWV3UGVybWlzc2lvbltdID0gW107XG5cbiAgQE91dHB1dCgpXG4gIHBlcm1pc3Npb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFJpdlZpZXdzLlZpZXdQZXJtaXNzaW9uPigpO1xuXG4gIEBPdXRwdXQoKVxuICBzaGFyZWRVc2Vyc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VVtdPigpO1xuXG4gIHJlYWRvbmx5IHBlcm1pc3Npb25PcHRpb25zID0gUml2Vmlld3MuVmlld1Blcm1pc3Npb25zLm1hcChwZXJtaXNzaW9uID0+ICh7XG4gICAgdmFsdWU6IHBlcm1pc3Npb24sXG4gICAgdGl0bGU6IHRpdGxlc1twZXJtaXNzaW9uXSxcbiAgICBzdWJ0aXRsZTogc3VidGl0bGVzW3Blcm1pc3Npb25dLFxuICB9KSk7XG5cbiAgdXNlclNlbGVjdE1hbmFnZXI/OiBSaXZTZWxlY3QuTWFuYWdlcjxVPjtcbiAgcHJpdmF0ZSB1c2VyU2VsZWN0U3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIHVzZXJPcHRpb25zOiBSaXZWaWV3cy5TZWFyY2hTZWxlY3RVc2VyPFU+W10gPSBbXTtcbiAgc2VsZWN0ZWRVc2VyczogUml2Vmlld3MuU2VhcmNoU2VsZWN0VXNlcjxVPltdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0VXBVc2VyU2VsZWN0TWFuYWdlcigpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIC8vIG5nT25Jbml0IHBlcmZvcm1zIHRoZSBpbml0aWFsIHNldHVwLCBzbyBpZ25vcmUgZmlyc3QtY2hhbmdlIGV2ZW50cyBoZXJlLlxuICAgIC8vIFJlYnVpbGQgb25seSBvbiBhIGdlbnVpbmUgY2hhbmdlOiBhIG5ldyBkYXRhIHNvdXJjZSwgYSBtb2RlIHN3aXRjaCwgb3IgYVxuICAgIC8vIHZhbHVlLWxldmVsIGNoYW5nZSB0byB0aGUgc2VlZGVkIHNlbGVjdGlvbi4gQ29tcGFyaW5nIHNoYXJlZFVzZXJzIGJ5IHZhbHVlXG4gICAgLy8gKHJhdGhlciB0aGFuIHJlZmVyZW5jZSkgaXMgZXNzZW50aWFsIOKAlCB0aGUgcGFyZW50IGJpbmRzIGEgZnJlc2ggYXJyYXkgZWFjaFxuICAgIC8vIGNoYW5nZS1kZXRlY3Rpb24gY3ljbGUsIGFuZCByZWFjdGluZyB0byB0aGF0IHJlZmVyZW5jZSBjaHVybiB3b3VsZCByZWJ1aWxkXG4gICAgLy8gdGhlIG1hbmFnZXIgb24gZXZlcnkgY3ljbGUuXG4gICAgY29uc3QgdXNlclNvdXJjZUNoYW5nZWQgPVxuICAgICAgY2hhbmdlc1sndXNlclNvdXJjZSddICYmICFjaGFuZ2VzWyd1c2VyU291cmNlJ10uZmlyc3RDaGFuZ2U7XG4gICAgY29uc3QgdXNlclNlbGVjdE1vZGVDaGFuZ2VkID1cbiAgICAgIGNoYW5nZXNbJ3VzZXJTZWxlY3RNb2RlJ10gJiYgIWNoYW5nZXNbJ3VzZXJTZWxlY3RNb2RlJ10uZmlyc3RDaGFuZ2U7XG4gICAgY29uc3Qgc2hhcmVkVXNlcnNDaGFuZ2VkID1cbiAgICAgIGNoYW5nZXNbJ3NoYXJlZFVzZXJzJ10gJiZcbiAgICAgICFjaGFuZ2VzWydzaGFyZWRVc2VycyddLmZpcnN0Q2hhbmdlICYmXG4gICAgICAhaXNFcXVhbChcbiAgICAgICAgY2hhbmdlc1snc2hhcmVkVXNlcnMnXS5wcmV2aW91c1ZhbHVlLFxuICAgICAgICBjaGFuZ2VzWydzaGFyZWRVc2VycyddLmN1cnJlbnRWYWx1ZSxcbiAgICAgICk7XG5cbiAgICBpZiAodXNlclNvdXJjZUNoYW5nZWQgfHwgdXNlclNlbGVjdE1vZGVDaGFuZ2VkIHx8IHNoYXJlZFVzZXJzQ2hhbmdlZCkge1xuICAgICAgdGhpcy5zZXRVcFVzZXJTZWxlY3RNYW5hZ2VyKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy50ZWFyRG93blVzZXJTZWxlY3RNYW5hZ2VyKCk7XG4gIH1cblxuICBwcml2YXRlIHRlYXJEb3duVXNlclNlbGVjdE1hbmFnZXIoKTogdm9pZCB7XG4gICAgdGhpcy51c2VyU2VsZWN0U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXRVcFVzZXJTZWxlY3RNYW5hZ2VyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMudGVhckRvd25Vc2VyU2VsZWN0TWFuYWdlcigpO1xuXG4gICAgaWYgKHRoaXMudXNlclNlbGVjdE1vZGUgPT09ICdzZWFyY2gtc2VsZWN0Jykge1xuICAgICAgY29uc3QgdXNlcnMgPSBhd2FpdCAodGhpcy51c2VyU291cmNlIHx8ICgoKSA9PiBbXSkpKCk7XG4gICAgICB0aGlzLnVzZXJPcHRpb25zID0gdXNlcnMubWFwKHUgPT4gKHtcbiAgICAgICAgLi4udSxcbiAgICAgICAgbmV3OiAodSBhcyBSaXZWaWV3cy5TZWFyY2hTZWxlY3RVc2VyPFU+KS5uZXcgPz8gZmFsc2UsXG4gICAgICB9KSk7XG4gICAgICB0aGlzLnNlbGVjdGVkVXNlcnMgPSB0aGlzLnNoYXJlZFVzZXJzLm1hcCh1ID0+ICh7XG4gICAgICAgIC4uLnUsXG4gICAgICAgIG5ldzogKHUgYXMgUml2Vmlld3MuU2VhcmNoU2VsZWN0VXNlcjxVPikubmV3ID8/IGZhbHNlLFxuICAgICAgfSkpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXNlclNlbGVjdE1hbmFnZXIgPSBSaXZTZWxlY3QuY3JlYXRlSW5NZW1vcnlNYW5hZ2VyKFxuICAgICAgICBhc3luYyAoKSA9PiBbeyBvcHRpb25zOiBhd2FpdCAodGhpcy51c2VyU291cmNlIHx8ICgoKSA9PiBbXSkpKCkgfV0sXG4gICAgICAgIHtcbiAgICAgICAgICBhbGxvd1NlYXJjaDogdHJ1ZSxcbiAgICAgICAgICBhbGxvd1NlbGVjdEFsbDogdHJ1ZSxcbiAgICAgICAgICBhbGxvd011bHRpU2VsZWN0OiB0cnVlLFxuICAgICAgICAgIGRpc3BsYXlMaW1pdDogNTAwLFxuICAgICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkOiBuZXcgUml2U2VsZWN0Lk9wdGlvblNldCh0aGlzLnNoYXJlZFVzZXJzKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICB0aGlzLnVzZXJTZWxlY3RTdWJzY3JpcHRpb24gPSB0aGlzLnVzZXJTZWxlY3RNYW5hZ2VyLnN0YXRlXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcChzdGF0ZSA9PiBbLi4uc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkXSBhcyBVW10pLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzRXF1YWwpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUodXNlcnMgPT4ge1xuICAgICAgICAgIC8vIFRoZSBtYW5hZ2VyIHJlcGxheXMgaXRzIGluaXRpYWwgKHNlZWRlZCkgc2VsZWN0aW9uIHN5bmNocm9ub3VzbHkgb25cbiAgICAgICAgICAvLyBzdWJzY3JpYmUuIEVtaXR0aW5nIHRoYXQgYmFjayB3b3VsZCBlY2hvIHRoZSBzaGFyZWRVc2VycyBpbnB1dCB0b1xuICAgICAgICAgIC8vIHRoZSBwYXJlbnQsIHdoaWNoIG11dGF0ZXMgaXRzIHZpZXcgYW5kIGZlZWRzIGEgbmV3IGFycmF5IHJlZmVyZW5jZVxuICAgICAgICAgIC8vIHN0cmFpZ2h0IGJhY2sgaW50byB0aGlzIGNvbXBvbmVudCDigJQgYW4gaW5maW5pdGUgY2hhbmdlLWRldGVjdGlvblxuICAgICAgICAgIC8vIGxvb3AuIE9ubHkgcHJvcGFnYXRlIGdlbnVpbmUsIHVzZXItZHJpdmVuIHNlbGVjdGlvbiBjaGFuZ2VzLlxuICAgICAgICAgIGlmICghaXNFcXVhbCh1c2VycywgdGhpcy5zaGFyZWRVc2VycykpIHtcbiAgICAgICAgICAgIHRoaXMuc2hhcmVkVXNlcnNDaGFuZ2UuZW1pdCh1c2Vycyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIHRoaXMudXNlclNlbGVjdE1hbmFnZXIuYWN0aW9ucy5uZXh0KHsgdHlwZTogJ2xvYWQnIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uUGVybWlzc2lvbkNsaWNrKHZhbHVlOiBSaXZWaWV3cy5WaWV3UGVybWlzc2lvbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGlzYWJsZWQodmFsdWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucGVybWlzc2lvbkNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIGlzRGlzYWJsZWQocGVybWlzc2lvbjogUml2Vmlld3MuVmlld1Blcm1pc3Npb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZFBlcm1pc3Npb25zPy5pbmNsdWRlcyhwZXJtaXNzaW9uKSA/PyBmYWxzZTtcbiAgfVxuXG4gIG9uU2VsZWN0ZWRVc2Vyc0NoYW5nZSh1c2VyczogUml2Vmlld3MuU2VhcmNoU2VsZWN0VXNlcjxVPltdKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFVzZXJzID0gdXNlcnM7XG4gICAgdGhpcy5zaGFyZWRVc2Vyc0NoYW5nZS5lbWl0KFJpdlZpZXdzLnRvU2hhcmVkVXNlcnModXNlcnMpKTtcbiAgfVxuXG4gIGhhbmRsZUFkZFVzZXIoc2VhcmNoVGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm9uQWRkVXNlcikgcmV0dXJuO1xuICAgIGNvbnN0IG5ld1VzZXIgPSB0aGlzLm9uQWRkVXNlcihzZWFyY2hUZXh0KTtcbiAgICB0aGlzLnVzZXJPcHRpb25zID0gWy4uLnRoaXMudXNlck9wdGlvbnMsIG5ld1VzZXJdO1xuICAgIHRoaXMuc2VsZWN0ZWRVc2VycyA9IFsuLi50aGlzLnNlbGVjdGVkVXNlcnMsIG5ld1VzZXJdO1xuICAgIHRoaXMuc2hhcmVkVXNlcnNDaGFuZ2UuZW1pdChSaXZWaWV3cy50b1NoYXJlZFVzZXJzKHRoaXMuc2VsZWN0ZWRVc2VycykpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicGVybWlzc2lvbi1waWNrZXJcIj5cbiAgPGRpdiBjbGFzcz1cInBlcm1pc3Npb24tbGFiZWxcIj5WaWV3IHBlcm1pc3Npb25zPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInBlcm1pc3Npb24tb3B0aW9uc1wiPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcGVybWlzc2lvbk9wdGlvbnNcIlxuICAgICAgY2xhc3M9XCJwZXJtaXNzaW9uLW9wdGlvblwiXG4gICAgICBbY2xhc3MuY3VycmVudF09XCJwZXJtaXNzaW9uID09PSBvcHRpb24udmFsdWVcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImlzRGlzYWJsZWQob3B0aW9uLnZhbHVlKVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJwZXJtaXNzaW9uID09PSBvcHRpb24udmFsdWVcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJvcHRpb24udGl0bGUgKyAnIHBlcm1pc3Npb24nXCJcbiAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXNEaXNhYmxlZChvcHRpb24udmFsdWUpXCJcbiAgICAgIChjbGljayk9XCJvblBlcm1pc3Npb25DbGljayhvcHRpb24udmFsdWUpXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uLWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi10aXRsZVwiPlxuICAgICAgICAgIDxzcGFuPnt7IG9wdGlvbi50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9wdGlvbi1kZXNjcmlwdGlvblwiPnt7IG9wdGlvbi5zdWJ0aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxyaXYtaWNvblxuICAgICAgICAgICpuZ0lmPVwicGVybWlzc2lvbiA9PT0gb3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICBjbGFzcz1cInBlcm1pc3Npb24taW5kaWNhdG9yXCJcbiAgICAgICAgICBbbmFtZV09XCInQ2hlY2snXCJcbiAgICAgICAgICBbc2l6ZV09XCIxNlwiXG4gICAgICAgID48L3Jpdi1pY29uPlxuICAgICAgPC9kaXY+XG4gICAgICA8cml2LXNlbGVjdFxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIHBlcm1pc3Npb24gPT09ICdzaGFyZWQnICYmXG4gICAgICAgICAgb3B0aW9uLnZhbHVlID09PSAnc2hhcmVkJyAmJlxuICAgICAgICAgIHVzZXJTZWxlY3RNb2RlID09PSAnc2VsZWN0JyAmJlxuICAgICAgICAgIHVzZXJTZWxlY3RNYW5hZ2VyXG4gICAgICAgIFwiXG4gICAgICAgIFtsYWJlbF09XCInVXNlcnMgd2l0aCBhY2Nlc3MnXCJcbiAgICAgICAgW21hbmFnZXJdPVwidXNlclNlbGVjdE1hbmFnZXJcIlxuICAgICAgPjwvcml2LXNlbGVjdD5cbiAgICAgIDxyaXYtc2VhcmNoLXNlbGVjdFxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIHBlcm1pc3Npb24gPT09ICdzaGFyZWQnICYmXG4gICAgICAgICAgb3B0aW9uLnZhbHVlID09PSAnc2hhcmVkJyAmJlxuICAgICAgICAgIHVzZXJTZWxlY3RNb2RlID09PSAnc2VhcmNoLXNlbGVjdCdcbiAgICAgICAgXCJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIFtsYWJlbF09XCInVXNlcnMgd2l0aCBhY2Nlc3MnXCJcbiAgICAgICAgW29wdGlvbnNdPVwidXNlck9wdGlvbnNcIlxuICAgICAgICBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRVc2Vyc1wiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VhcmNoIHVzZXJzJ1wiXG4gICAgICAgIFthZGROZXdMYWJlbF09XCInQWRkJ1wiXG4gICAgICAgIFtuZXdUb29sdGlwXT1cIm5ld1Rvb2x0aXBcIlxuICAgICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwib25TZWxlY3RlZFVzZXJzQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoYWRkTmV3KT1cImhhbmRsZUFkZFVzZXIoJGV2ZW50KVwiXG4gICAgICA+PC9yaXYtc2VhcmNoLXNlbGVjdD5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|