barsa-novin-ray-core 1.0.377 → 1.0.379
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/services/notification.service.mjs +45 -17
- package/esm2020/lib/services/portal.service.mjs +15 -1
- package/fesm2015/barsa-novin-ray-core.mjs +51 -16
- package/fesm2015/barsa-novin-ray-core.mjs.map +1 -1
- package/fesm2020/barsa-novin-ray-core.mjs +57 -16
- package/fesm2020/barsa-novin-ray-core.mjs.map +1 -1
- package/lib/services/notification.service.d.ts +9 -2
- package/lib/services/portal.service.d.ts +5 -0
- package/package.json +1 -1
|
@@ -8,14 +8,16 @@ import * as i2 from "@angular/common";
|
|
|
8
8
|
import * as i3 from "../pipes/bbb-translate.pipe";
|
|
9
9
|
import * as i4 from "@angular/platform-browser";
|
|
10
10
|
import * as i5 from "./notification-sw.service";
|
|
11
|
+
import * as i6 from "./portal.service";
|
|
11
12
|
export class NotificationService {
|
|
12
|
-
constructor(_popupService, _logService, _lowerCase, _bbbTranslate, _domSanitizer, _serviceWorkerNotification, _ngZone) {
|
|
13
|
+
constructor(_popupService, _logService, _lowerCase, _bbbTranslate, _domSanitizer, _serviceWorkerNotification, _portalService, _ngZone) {
|
|
13
14
|
this._popupService = _popupService;
|
|
14
15
|
this._logService = _logService;
|
|
15
16
|
this._lowerCase = _lowerCase;
|
|
16
17
|
this._bbbTranslate = _bbbTranslate;
|
|
17
18
|
this._domSanitizer = _domSanitizer;
|
|
18
19
|
this._serviceWorkerNotification = _serviceWorkerNotification;
|
|
20
|
+
this._portalService = _portalService;
|
|
19
21
|
this._ngZone = _ngZone;
|
|
20
22
|
this._notifications$ = new BehaviorSubject([]);
|
|
21
23
|
this._notificationCount$ = new BehaviorSubject({ unread: 0, all: 0 });
|
|
@@ -55,35 +57,57 @@ export class NotificationService {
|
|
|
55
57
|
}
|
|
56
58
|
});
|
|
57
59
|
}
|
|
60
|
+
ShowNotificationRelatedMo(e) {
|
|
61
|
+
const ee = {
|
|
62
|
+
...e,
|
|
63
|
+
afterReady: (e2) => {
|
|
64
|
+
BarsaApi.Bw.RunBlMethodAsync({
|
|
65
|
+
Parameters: [e.tag],
|
|
66
|
+
Method: 'SetReadRadifCartableByTag',
|
|
67
|
+
FailFn: (err) => {
|
|
68
|
+
this._logService.error(err);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
this._portalService.ShowForm(ee);
|
|
74
|
+
}
|
|
58
75
|
handleTopic(eventTopic, content, ownerKey) {
|
|
59
|
-
if (eventTopic === '
|
|
60
|
-
const {
|
|
76
|
+
if (eventTopic === 'DeleteNotificationMessage') {
|
|
77
|
+
const { Tags } = content;
|
|
61
78
|
const notifications = this._notifications$.getValue();
|
|
62
|
-
const { findInNotifications, unreadCount, count } = this.
|
|
79
|
+
const { findInNotifications, unreadCount, count } = this._findNotificationsMessage(Tags, notifications);
|
|
63
80
|
if (findInNotifications) {
|
|
64
|
-
this._notifications$.next(notifications.filter((c) => !
|
|
81
|
+
this._notifications$.next(notifications.filter((c) => !Tags.includes(c.Tag)));
|
|
65
82
|
}
|
|
66
83
|
if (unreadCount > 0) {
|
|
67
84
|
this.increaseNotifcationCount(-unreadCount, -count);
|
|
68
85
|
}
|
|
69
86
|
}
|
|
70
|
-
else if (eventTopic === '
|
|
87
|
+
else if (eventTopic === 'SetReadNotificationMessage') {
|
|
71
88
|
const notifications = this._notifications$.getValue();
|
|
72
|
-
const {
|
|
73
|
-
|
|
74
|
-
const
|
|
75
|
-
if (
|
|
76
|
-
|
|
89
|
+
const { Tags } = content;
|
|
90
|
+
Tags.forEach((tag) => {
|
|
91
|
+
const foundIndex = notifications.findIndex((c) => c.Tag === tag);
|
|
92
|
+
if (foundIndex > -1) {
|
|
93
|
+
notifications[foundIndex] = {
|
|
94
|
+
...notifications[foundIndex],
|
|
95
|
+
Unread: false,
|
|
96
|
+
Unread$Caption: 'نادرست'
|
|
97
|
+
};
|
|
98
|
+
this._notifications$.next([...notifications]);
|
|
77
99
|
}
|
|
78
100
|
});
|
|
101
|
+
const notificationsCount = this._notificationCount$.getValue();
|
|
102
|
+
this.increaseNotifcationCount(-Tags.length, notificationsCount.all);
|
|
79
103
|
}
|
|
80
104
|
}
|
|
81
|
-
|
|
105
|
+
_findNotificationsMessage(Tags, notifications) {
|
|
82
106
|
let findInNotifications = false;
|
|
83
107
|
let unreadCount = 0;
|
|
84
108
|
let count = 0;
|
|
85
|
-
|
|
86
|
-
const foundNotification = notifications.find((c) => c.
|
|
109
|
+
Tags.forEach((tag) => {
|
|
110
|
+
const foundNotification = notifications.find((c) => c.Tag === tag);
|
|
87
111
|
if (foundNotification) {
|
|
88
112
|
findInNotifications = true;
|
|
89
113
|
count++;
|
|
@@ -110,6 +134,7 @@ export class NotificationService {
|
|
|
110
134
|
Tag: '',
|
|
111
135
|
Priority: 0,
|
|
112
136
|
Subject: '',
|
|
137
|
+
$SafeContent: this._domSanitizer.bypassSecurityTrustHtml(msg),
|
|
113
138
|
CreationDate: new Date(),
|
|
114
139
|
CreationDate$Caption: this._bbbTranslate.transform('DateR_Today')
|
|
115
140
|
};
|
|
@@ -196,6 +221,9 @@ export class NotificationService {
|
|
|
196
221
|
return typeof Notification !== 'undefined' && this._serviceWorkerNotification.isEnabled;
|
|
197
222
|
}
|
|
198
223
|
showNotification(notificationItem, mo, uiOptions, otherOptions) {
|
|
224
|
+
if (notificationItem.Title && notificationItem.Title.startsWith('[') && notificationItem.Title.endsWith(']')) {
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
199
227
|
if (!this.SupportNotifications) {
|
|
200
228
|
this._logService.warn(`InApp Notification is not supported.`);
|
|
201
229
|
uiOptions = uiOptions ?? {};
|
|
@@ -255,12 +283,12 @@ export class NotificationService {
|
|
|
255
283
|
});
|
|
256
284
|
}
|
|
257
285
|
}
|
|
258
|
-
NotificationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: NotificationService, deps: [{ token: NOTIFICATAION_POPUP_SERVER }, { token: i1.LogService }, { token: i2.LowerCasePipe }, { token: i3.BbbTranslatePipe }, { token: i4.DomSanitizer }, { token: i5.ServiceWorkerNotificationService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
286
|
+
NotificationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: NotificationService, deps: [{ token: NOTIFICATAION_POPUP_SERVER }, { token: i1.LogService }, { token: i2.LowerCasePipe }, { token: i3.BbbTranslatePipe }, { token: i4.DomSanitizer }, { token: i5.ServiceWorkerNotificationService }, { token: i6.PortalService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
259
287
|
NotificationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: NotificationService });
|
|
260
288
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: NotificationService, decorators: [{
|
|
261
289
|
type: Injectable
|
|
262
290
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
263
291
|
type: Inject,
|
|
264
292
|
args: [NOTIFICATAION_POPUP_SERVER]
|
|
265
|
-
}] }, { type: i1.LogService }, { type: i2.LowerCasePipe }, { type: i3.BbbTranslatePipe }, { type: i4.DomSanitizer }, { type: i5.ServiceWorkerNotificationService }, { type: i0.NgZone }]; } });
|
|
266
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1ub3Zpbi1yYXktY29yZS9zcmMvbGliL3NlcnZpY2VzL25vdGlmaWNhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRTNELE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFFbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXpELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7O0FBT2xFLE1BQU0sT0FBTyxtQkFBbUI7SUFPNUIsWUFDa0QsYUFBdUMsRUFDN0UsV0FBdUIsRUFDdkIsVUFBeUIsRUFDekIsYUFBK0IsRUFDL0IsYUFBMkIsRUFDM0IsMEJBQTRELEVBQzVELE9BQWU7UUFOdUIsa0JBQWEsR0FBYixhQUFhLENBQTBCO1FBQzdFLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLGVBQVUsR0FBVixVQUFVLENBQWU7UUFDekIsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQy9CLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQzNCLCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBa0M7UUFDNUQsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQWJuQixvQkFBZSxHQUFHLElBQUksZUFBZSxDQUF3QixFQUFFLENBQUMsQ0FBQztRQUNqRSx3QkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBa0MsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xHLDhCQUF5QixHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzNELDBCQUFxQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUss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WyJpbXBvcnQgeyBMb3dlckNhc2VQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgQmFyc2FBcGkgfSBmcm9tICcuLi9hYnN0cmFjdC1jbGFzc2VzL2JhcnNhLWFwaSc7XHJcbmltcG9ydCB7IE1ldGFvYmplY3REYXRhTW9kZWwsIE5vdGlmaWNhdGlvbkl0ZW0sIE5vdGlmeU9wdGlvbnMgfSBmcm9tICcuLi9hYnN0cmFjdC1jbGFzc2VzL21vZGVscyc7XHJcbmltcG9ydCB7IE5PVElGSUNBVEFJT05fUE9QVVBfU0VSVkVSIH0gZnJvbSAnLi4vaW5qZGVjdGlvbi10b2tlbnMnO1xyXG5pbXBvcnQgeyBCYmJUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vcGlwZXMvYmJiLXRyYW5zbGF0ZS5waXBlJztcclxuaW1wb3J0IHsgTG9nU2VydmljZSB9IGZyb20gJy4vbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb3RpZmljYXRpb25Qb3B1cFNlcnZpY2UgfSBmcm9tICcuL25vdGlmaWNhdGlvbi1wb3B1cC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2VydmljZVdvcmtlck5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuL25vdGlmaWNhdGlvbi1zdy5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvblNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSBfbm90aWZpY2F0aW9ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1ldGFvYmplY3REYXRhTW9kZWxbXT4oW10pO1xyXG4gICAgcHJpdmF0ZSBfbm90aWZpY2F0aW9uQ291bnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IHVucmVhZDogbnVtYmVyOyBhbGw6IG51bWJlciB9Pih7IHVucmVhZDogMCwgYWxsOiAwIH0pO1xyXG4gICAgcHJpdmF0ZSBfbm90aWZpY2F0aW9uVW5yZWFkQ291bnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gICAgcHJpdmF0ZSBfbm90aWZpY2F0aW9uTG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHBhZ2VDb3VudCA9IDE7XHJcbiAgICBwYWdlSW5kZXggPSAwO1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdChOT1RJRklDQVRBSU9OX1BPUFVQX1NFUlZFUikgcHJvdGVjdGVkIF9wb3B1cFNlcnZpY2U6IE5vdGlmaWNhdGlvblBvcHVwU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9sb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2xvd2VyQ2FzZTogTG93ZXJDYXNlUGlwZSxcclxuICAgICAgICBwcml2YXRlIF9iYmJUcmFuc2xhdGU6IEJiYlRyYW5zbGF0ZVBpcGUsXHJcbiAgICAgICAgcHJpdmF0ZSBfZG9tU2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBfc2VydmljZVdvcmtlck5vdGlmaWNhdGlvbjogU2VydmljZVdvcmtlck5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmVcclxuICAgICkge31cclxuICAgIGdldCBub3RpZmljYXRpb25Db3VudCQoKTogT2JzZXJ2YWJsZTx7IHVucmVhZDogbnVtYmVyOyBhbGw6IG51bWJlciB9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWNhdGlvbkNvdW50JC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbm90aWZpY2F0aW9ucyQoKTogT2JzZXJ2YWJsZTxNZXRhb2JqZWN0RGF0YU1vZGVsW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpY2F0aW9ucyQuYXNPYnNlcnZhYmxlKCkucGlwZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IG5vdGlmaWNhdGlvbkxvYWRpbmckKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmljYXRpb25Mb2FkaW5nJC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBsb2FkTW9yZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmxvYWROb3RpZmljYXRpb25zKHRoaXMucGFnZUluZGV4KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXROb3RpZmljYXRpb25WaWV3ZWQodGFnczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgICAgICBCYXJzYUFwaS5Cdy5SdW5CbE1ldGhvZEFzeW5jKHtcclxuICAgICAgICAgICAgUGFyYW1ldGVyczogW3RhZ3NdLFxyXG4gICAgICAgICAgICBNZXRob2Q6ICdTZXROb3RpZmljYXRpb25WaWV3ZWQnLFxyXG4gICAgICAgICAgICBTdWNjZXNzRm46ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1vbGlzdEN1cnIgPSB0aGlzLl9ub3RpZmljYXRpb25zJC5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFVucmVhZE1vTGlzdCA9IG1vbGlzdEN1cnIubWFwKChjKSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLmMsXHJcbiAgICAgICAgICAgICAgICAgICAgVW5yZWFkOiB0YWdzLmluZGV4T2YoYy5UYWcpID4gLTEgPyBmYWxzZSA6IGMuVW5yZWFkXHJcbiAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25zJC5uZXh0KFsuLi51cGRhdGVkVW5yZWFkTW9MaXN0XSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluY3JlYXNlTm90aWZjYXRpb25Db3VudCgtdGFncy5sZW5ndGgsIDApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhZ3M7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIEZhaWxGbjogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ1NlcnZpY2UuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBoYW5kbGVUb3BpYyhldmVudFRvcGljLCBjb250ZW50LCBvd25lcktleSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChldmVudFRvcGljID09PSAnR2xvYmFsUmVwb3J0TW9EZWxldGUnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgSWRMaXN0IH06IHsgSWRMaXN0OiBzdHJpbmdbXSB9ID0gY29udGVudDtcclxuICAgICAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IHRoaXMuX25vdGlmaWNhdGlvbnMkLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgZmluZEluTm90aWZpY2F0aW9ucywgdW5yZWFkQ291bnQsIGNvdW50IH0gPSB0aGlzLl9maW5kTm90aWZpY2F0aW9uc0RldGFpbHMoSWRMaXN0LCBub3RpZmljYXRpb25zKTtcclxuICAgICAgICAgICAgaWYgKGZpbmRJbk5vdGlmaWNhdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvbnMkLm5leHQobm90aWZpY2F0aW9ucy5maWx0ZXIoKGMpID0+ICFJZExpc3QuaW5jbHVkZXMoYy5JZCkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodW5yZWFkQ291bnQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluY3JlYXNlTm90aWZjYXRpb25Db3VudCgtdW5yZWFkQ291bnQsIC1jb3VudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50VG9waWMgPT09ICdHbG9iYWxSZXBvcnRNb1VwZGF0ZScpIHtcclxuICAgICAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IHRoaXMuX25vdGlmaWNhdGlvbnMkLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgTW9EYXRhTGlzdCB9ID0gY29udGVudDtcclxuICAgICAgICAgICAgbm90aWZpY2F0aW9ucy5mb3JFYWNoKChjKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBub3RpZk1lc3NhZ2UgPSBNb0RhdGFMaXN0LmZpbmQoKGQpID0+IGMuSWQgPT09IGQuSWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vdGlmTWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGMuVW5yZWFkID0gbm90aWZNZXNzYWdlLlVucmVhZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfZmluZE5vdGlmaWNhdGlvbnNEZXRhaWxzKFxyXG4gICAgICAgIElkTGlzdDogc3RyaW5nW10sXHJcbiAgICAgICAgbm90aWZpY2F0aW9uczogTWV0YW9iamVjdERhdGFNb2RlbFtdXHJcbiAgICApOiB7IGZpbmRJbk5vdGlmaWNhdGlvbnM6IGJvb2xlYW47IHVucmVhZENvdW50OiBudW1iZXI7IGNvdW50OiBudW1iZXIgfSB7XHJcbiAgICAgICAgbGV0IGZpbmRJbk5vdGlmaWNhdGlvbnMgPSBmYWxzZTtcclxuICAgICAgICBsZXQgdW5yZWFkQ291bnQgPSAwO1xyXG4gICAgICAgIGxldCBjb3VudCA9IDA7XHJcbiAgICAgICAgSWRMaXN0LmZvckVhY2goKGlkKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kTm90aWZpY2F0aW9uID0gbm90aWZpY2F0aW9ucy5maW5kKChjKSA9PiBjLklkID09PSBpZCk7XHJcbiAgICAgICAgICAgIGlmIChmb3VuZE5vdGlmaWNhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgZmluZEluTm90aWZpY2F0aW9ucyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kTm90aWZpY2F0aW9uLlVucmVhZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVucmVhZENvdW50Kys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4geyBmaW5kSW5Ob3RpZmljYXRpb25zLCB1bnJlYWRDb3VudCwgY291bnQgfTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkTm90aWZpY2F0aW9uKFxyXG4gICAgICAgIG1zZzogc3RyaW5nLFxyXG4gICAgICAgIHRpdGxlOiBzdHJpbmcsXHJcbiAgICAgICAgdHlwZTogc3RyaW5nLFxyXG4gICAgICAgIGltYWdlOiBzdHJpbmcsXHJcbiAgICAgICAgbW8sXHJcbiAgICAgICAgdWlPcHRpb25zOiBOb3RpZnlPcHRpb25zLFxyXG4gICAgICAgIG90aGVyT3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55PlxyXG4gICAgKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChvdGhlck9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgTW9JZCwgVHlwZURlZklkIH0gPSBvdGhlck9wdGlvbnM7XHJcbiAgICAgICAgICAgICAgICBsZXQgbmV3Tm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25JdGVtID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICRDYXB0aW9uOiB0aXRsZSxcclxuICAgICAgICAgICAgICAgICAgICBJZDogTW9JZCxcclxuICAgICAgICAgICAgICAgICAgICAkVHlwZURlZklkOiBUeXBlRGVmSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgVGl0bGU6IHRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICAgIFVucmVhZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBJY29uOiBpbWFnZSxcclxuICAgICAgICAgICAgICAgICAgICBJbWFnZTogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgQ29udGVudDogbXNnLFxyXG4gICAgICAgICAgICAgICAgICAgIFRhZzogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHk6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgU3ViamVjdDogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgQ3JlYXRpb25EYXRlOiBuZXcgRGF0ZSgpLFxyXG4gICAgICAgICAgICAgICAgICAgIENyZWF0aW9uRGF0ZSRDYXB0aW9uOiB0aGlzLl9iYmJUcmFuc2xhdGUudHJhbnNmb3JtKCdEYXRlUl9Ub2RheScpXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkTW8gPSBtbyA/IEJhcnNhQXBpLkV4dC5kZWNvZGUobW8pIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIG5ld05vdGlmaWNhdGlvbiA9IHRoaXMuX3ByZXBhcmVQcm9wZXJ0aWVzKG5ld05vdGlmaWNhdGlvbiwgcGFyc2VkTW8sIG1zZyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZE1vKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9saXN0ID0gdGhpcy5fbm90aWZpY2F0aW9ucyQuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25zJC5uZXh0KFtuZXdOb3RpZmljYXRpb24sIC4uLm1vbGlzdF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5jcmVhc2VOb3RpZmNhdGlvbkNvdW50KDEsIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93Tm90aWZpY2F0aW9uKG5ld05vdGlmaWNhdGlvbiwgcGFyc2VkTW8sIHVpT3B0aW9ucywgb3RoZXJPcHRpb25zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbmNyZWFzZU5vdGlmY2F0aW9uQ291bnQodW5yZWFkOiBudW1iZXIsIGNvdW50OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjb3VudFZhbHVlID0gdGhpcy5fbm90aWZpY2F0aW9uQ291bnQkLmdldFZhbHVlKCk7XHJcbiAgICAgICAgY29uc3Qgc3VtVW5yZWFkID0gY291bnRWYWx1ZS51bnJlYWQgKyArdW5yZWFkO1xyXG4gICAgICAgIGNvbnN0IHN1bUFsbCA9IGNvdW50VmFsdWUuYWxsICsgK2NvdW50O1xyXG4gICAgICAgIHRoaXMuX25vdGlmaWNhdGlvbkNvdW50JC5uZXh0KHsgdW5yZWFkOiBzdW1VbnJlYWQgPiAwID8gc3VtVW5yZWFkIDogMCwgYWxsOiBzdW1BbGwgPiAwID8gc3VtQWxsIDogMCB9KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBsb2FkVW5yZWFkTm90aWZpY2F0aW9uQ291bnQoKTogdm9pZCB7XHJcbiAgICAgICAgQmFyc2FBcGkuQncuUnVuQmxNZXRob2RBc3luYyh7XHJcbiAgICAgICAgICAgIFBhcmFtZXRlcnM6IFtdLFxyXG4gICAgICAgICAgICBNZXRob2Q6ICdHZXRTaGVsbGJhck5vdGlmaWNhdGlvbkNvdW50JyxcclxuICAgICAgICAgICAgU3VjY2Vzc0ZuOiAoZTogeyBVbnJlYWQ6IG51bWJlcjsgQWxsOiBudW1iZXIgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVW5yZWFkQW5kQ291bnQoZSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIEZhaWxGbjogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ1NlcnZpY2UuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBsb2FkTm90aWZpY2F0aW9ucyhwYWdlSW5kZXg6IG51bWJlciA9IDApOiB2b2lkIHtcclxuICAgICAgICBpZiAocGFnZUluZGV4ICsgMSA+IHRoaXMucGFnZUNvdW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25Mb2FkaW5nKHRydWUpO1xyXG4gICAgICAgIEJhcnNhQXBpLkJ3LlJ1bkJsTWV0aG9kQXN5bmMoe1xyXG4gICAgICAgICAgICBQYXJhbWV0ZXJzOiBbcGFnZUluZGV4XSxcclxuICAgICAgICAgICAgTWV0aG9kOiAnR2V0U2hlbGxiYXJOb3RpZmljYXRpb25zJyxcclxuICAgICAgICAgICAgU3VjY2Vzc0ZuOiAoZTogeyBQYWdlQ291bnQ6IG51bWJlcjsgTW9MaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10gfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IHRoaXMuX25vdGlmaWNhdGlvbnMkLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBub3RpZkxpc3RPZlRhZ3MgPSBub3RpZmljYXRpb25zLm1hcCgoYykgPT4gYy5UYWcpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9saXN0ID0gZS5Nb0xpc3QuZmlsdGVyKChjKSA9PiBub3RpZkxpc3RPZlRhZ3MuaW5kZXhPZihjLlRhZykgPT09IC0xKS5tYXAoKG1vKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVQcm9wZXJ0aWVzKDxOb3RpZmljYXRpb25JdGVtPm1vLCBtbywgbW8uSU1lc3NhZ2U/LkNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9ucyQubmV4dChbLi4ubm90aWZpY2F0aW9ucywgLi4ubW9saXN0XSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VDb3VudCA9ICtlLlBhZ2VDb3VudDtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFnZUluZGV4ID0gcGFnZUluZGV4ICsgMTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uTG9hZGluZyhmYWxzZSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIEZhaWxGbjogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ1NlcnZpY2UuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkxvYWRpbmcoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZU5vdGlmaWNhdGlvbihtb2xpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSwgY2xvc2VOb3RpZmljYXRpb24gPSB0cnVlKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgbW9JZHMgPSB0aGlzLl9zZXROb3RpZmljYXRpb25Mb2FkaW5nKG1vbGlzdCwgdHJ1ZSk7XHJcbiAgICAgICAgQmFyc2FBcGkuQncuUnVuQmxNZXRob2RBc3luYyh7XHJcbiAgICAgICAgICAgIFBhcmFtZXRlcnM6IFttb0lkc10sXHJcbiAgICAgICAgICAgIE1ldGhvZDogJ1JlbW92ZVNoZWxsYmFyTm90aWZpY2F0aW9uJyxcclxuICAgICAgICAgICAgU3VjY2Vzc0ZuOiAoZTogeyBVbnJlYWQ6IG51bWJlcjsgQWxsOiBudW1iZXIgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uTGlzdCA9IHRoaXMuX25vdGlmaWNhdGlvbnMkLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVVbnJlYWRBbmRDb3VudChlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld01vTGlzdCA9IG5vdGlmaWNhdGlvbkxpc3QuZmlsdGVyKChjKSA9PiBtb0lkcy5pbmRleE9mKGMuSWQpID09PSAtMSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25zJC5uZXh0KG5ld01vTGlzdCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2xvc2VOb3RpZmljYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXJ2aWNlV29ya2VyTm90aWZpY2F0aW9uLmNsb3NlTm90aWZpY2F0aW9ucyhtb0lkcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbm90aWZpY2F0aW9uQ291bnQkLmdldFZhbHVlKCkuYWxsID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZE5vdGlmaWNhdGlvbnModGhpcy5wYWdlSW5kZXggLSAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgRmFpbEZuOiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nU2VydmljZS5lcnJvcihlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldE5vdGlmaWNhdGlvbkxvYWRpbmcobW9saXN0LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3VwZGF0ZVVucmVhZEFuZENvdW50KGU6IHsgVW5yZWFkOiBudW1iZXI7IEFsbDogbnVtYmVyIH0pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25VbnJlYWRDb3VudCQubmV4dCgrZS5VbnJlYWQpO1xyXG4gICAgICAgIHRoaXMuX25vdGlmaWNhdGlvbkNvdW50JC5uZXh0KHsgdW5yZWFkOiArZS5VbnJlYWQsIGFsbDogK2UuQWxsIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBTdXBwb3J0Tm90aWZpY2F0aW9ucygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIE5vdGlmaWNhdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5fc2VydmljZVdvcmtlck5vdGlmaWNhdGlvbi5pc0VuYWJsZWQ7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2hvd05vdGlmaWNhdGlvbihcclxuICAgICAgICBub3RpZmljYXRpb25JdGVtOiBOb3RpZmljYXRpb25JdGVtLFxyXG4gICAgICAgIG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHwgbnVsbCxcclxuICAgICAgICB1aU9wdGlvbnM6IE5vdGlmeU9wdGlvbnMsXHJcbiAgICAgICAgb3RoZXJPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+XHJcbiAgICApOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuU3VwcG9ydE5vdGlmaWNhdGlvbnMpIHtcclxuICAgICAgICAgICAgdGhpcy5fbG9nU2VydmljZS53YXJuKGBJbkFwcCBOb3RpZmljYXRpb24gaXMgbm90IHN1cHBvcnRlZC5gKTtcclxuICAgICAgICAgICAgdWlPcHRpb25zID0gdWlPcHRpb25zID8/IHt9O1xyXG4gICAgICAgICAgICB1aU9wdGlvbnMuTm90aWZpY2F0aW9uSXRlbSA9IG5vdGlmaWNhdGlvbkl0ZW07XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwTm90aWZ5KG5vdGlmaWNhdGlvbkl0ZW0sIG1vLCB1aU9wdGlvbnMsIG90aGVyT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5faW5BcHBOb3RpZnkobm90aWZpY2F0aW9uSXRlbSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvbkxvYWRpbmcobG9hZGluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX25vdGlmaWNhdGlvbkxvYWRpbmckLm5leHQobG9hZGluZyk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9zZXROb3RpZmljYXRpb25Mb2FkaW5nKG1vbGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdLCBsb2FkaW5nOiBib29sZWFuID0gdHJ1ZSk6IHN0cmluZ1tdIHtcclxuICAgICAgICBjb25zdCBtb2xpc3RDdXJyID0gdGhpcy5fbm90aWZpY2F0aW9ucyQuZ2V0VmFsdWUoKTtcclxuICAgICAgICBjb25zdCBtb0lkcyA9IG1vbGlzdC5tYXAoKGMpID0+IGMuSWQpO1xyXG4gICAgICAgIGNvbnN0IG1vbGlzdFdpdGhMb2FkaW5nUHJvcGVydHkgPSBtb2xpc3RDdXJyLm1hcCgoYykgPT4gKHtcclxuICAgICAgICAgICAgLi4uYyxcclxuICAgICAgICAgICAgJE5vdGlmaWNhdG9pbkxvYWRpbmc6IG1vSWRzLmluZGV4T2YoYy5JZCkgIT09IC0xID8gbG9hZGluZyA6IGMuJE5vdGlmaWNhdG9pbkxvYWRpbmdcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9ucyQubmV4dChbLi4ubW9saXN0V2l0aExvYWRpbmdQcm9wZXJ0eV0pO1xyXG4gICAgICAgIHJldHVybiBtb0lkcztcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3BvcHVwTm90aWZ5KFxyXG4gICAgICAgIG5vdGlmaWNhdGlvbkl0ZW06IE5vdGlmaWNhdGlvbkl0ZW0sXHJcbiAgICAgICAgbW86IE1ldGFvYmplY3REYXRhTW9kZWwgfCBudWxsLFxyXG4gICAgICAgIHVpT3B0aW9uczogTm90aWZ5T3B0aW9ucyxcclxuICAgICAgICBvdGhlck9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT5cclxuICAgICk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3BvcHVwU2VydmljZS5wb3B1cE5vdGlmeShcclxuICAgICAgICAgICAgbm90aWZpY2F0aW9uSXRlbS4kU2FmZUNvbnRlbnQsXHJcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbkl0ZW0uVGl0bGUsXHJcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbkl0ZW0uU3ViamVjdCxcclxuICAgICAgICAgICAgbm90aWZpY2F0aW9uSXRlbS5JbWFnZSxcclxuICAgICAgICAgICAgbW8sXHJcbiAgICAgICAgICAgIHVpT3B0aW9ucyxcclxuICAgICAgICAgICAgb3RoZXJPcHRpb25zXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3ByZXBhcmVQcm9wZXJ0aWVzKFxyXG4gICAgICAgIG5vdGlmaWNhdGlvbkl0ZW06IE5vdGlmaWNhdGlvbkl0ZW0sXHJcbiAgICAgICAgbW86IE1ldGFvYmplY3REYXRhTW9kZWwsXHJcbiAgICAgICAgY29udGVudDogc3RyaW5nXHJcbiAgICApOiBOb3RpZmljYXRpb25JdGVtIHtcclxuICAgICAgICBpZiAoIW1vKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBub3RpZmljYXRpb25JdGVtO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5ub3RpZmljYXRpb25JdGVtLFxyXG4gICAgICAgICAgICAuLi5tbyxcclxuICAgICAgICAgICAgVWlBY3Rpb25zOiAhbW8uVWlBY3Rpb25zID8gW10gOiBKU09OLnBhcnNlKG1vLlVpQWN0aW9ucyksXHJcbiAgICAgICAgICAgIENyZWF0aW9uRGF0ZTogbW8uSU1lc3NhZ2UuQ3JlYXRpb25EYXRlLFxyXG4gICAgICAgICAgICBDcmVhdGlvbkRhdGUkQ2FwdGlvbjogbW8uSU1lc3NhZ2UuQ3JlYXRpb25EYXRlJENhcHRpb24sXHJcbiAgICAgICAgICAgIENyZWF0b3JVc2VyOiBtby5JTWVzc2FnZS5DcmVhdG9yVXNlcixcclxuICAgICAgICAgICAgQ3JlYXRvclVzZXIkQ2FwdGlvbjogbW8uSU1lc3NhZ2UuQ3JlYXRvclVzZXIkQ2FwdGlvbixcclxuICAgICAgICAgICAgSWNvbjogYCR7QmFyc2FBcGkuQncuT3JpZ2luKCl9JHtub3RpZmljYXRpb25JdGVtLkljb259YCxcclxuICAgICAgICAgICAgJFNhZmVDb250ZW50OiB0aGlzLl9kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoY29udGVudClcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfaW5BcHBOb3RpZnkobm90aWZpY2F0aW9uSXRlbTogTm90aWZpY2F0aW9uSXRlbSk6IHZvaWQge1xyXG4gICAgICAgIE5vdGlmaWNhdGlvbi5yZXF1ZXN0UGVybWlzc2lvbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhbmcgPSBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLkN1bHR1cmU7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzUnRsID0gQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5DdWx0dXJlc1J0bFtsYW5nXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09ICdncmFudGVkJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VydmljZVdvcmtlck5vdGlmaWNhdGlvbi5zaG93Tm90aWZpY2F0aW9uKHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZmljYXRpb25JdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzUnRsLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhbmdcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETzpwZXJtaXNzaW9uIGRlbmllZFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nU2VydmljZS5lcnJvcignbm90aWZpY2F0aW9uIHBlcm1pc3Npb24gZGVuaWVkLicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
293
|
+
}] }, { type: i1.LogService }, { type: i2.LowerCasePipe }, { type: i3.BbbTranslatePipe }, { type: i4.DomSanitizer }, { type: i5.ServiceWorkerNotificationService }, { type: i6.PortalService }, { type: i0.NgZone }]; } });
|
|
294
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1ub3Zpbi1yYXktY29yZS9zcmMvbGliL3NlcnZpY2VzL25vdGlmaWNhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRTNELE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFFbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXpELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7OztBQVFsRSxNQUFNLE9BQU8sbUJBQW1CO0lBTzVCLFlBQ2tELGFBQXVDLEVBQzdFLFdBQXVCLEVBQ3ZCLFVBQXlCLEVBQ3pCLGFBQStCLEVBQy9CLGFBQTJCLEVBQzNCLDBCQUE0RCxFQUM1RCxjQUE2QixFQUM3QixPQUFlO1FBUHVCLGtCQUFhLEdBQWIsYUFBYSxDQUEwQjtRQUM3RSxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixlQUFVLEdBQVYsVUFBVSxDQUFlO1FBQ3pCLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUMvQixrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQiwrQkFBMEIsR0FBMUIsMEJBQTBCLENBQWtDO1FBQzVELG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFkbkIsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBd0IsRUFBRSxDQUFDLENBQUM7UUFDakUsd0JBQW1CLEdBQUcsSUFBSSxlQUFlLENBQWtDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsRyw4QkFBeUIsR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FB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QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvd2VyQ2FzZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEJhcnNhQXBpIH0gZnJvbSAnLi4vYWJzdHJhY3QtY2xhc3Nlcy9iYXJzYS1hcGknO1xuaW1wb3J0IHsgTWV0YW9iamVjdERhdGFNb2RlbCwgTm90aWZpY2F0aW9uSXRlbSwgTm90aWZ5T3B0aW9ucyB9IGZyb20gJy4uL2Fic3RyYWN0LWNsYXNzZXMvbW9kZWxzJztcbmltcG9ydCB7IE5PVElGSUNBVEFJT05fUE9QVVBfU0VSVkVSIH0gZnJvbSAnLi4vaW5qZGVjdGlvbi10b2tlbnMnO1xuaW1wb3J0IHsgQmJiVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uL3BpcGVzL2JiYi10cmFuc2xhdGUucGlwZSc7XG5pbXBvcnQgeyBMb2dTZXJ2aWNlIH0gZnJvbSAnLi9sb2cuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25Qb3B1cFNlcnZpY2UgfSBmcm9tICcuL25vdGlmaWNhdGlvbi1wb3B1cC5zZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VXb3JrZXJOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9ub3RpZmljYXRpb24tc3cuc2VydmljZSc7XG5pbXBvcnQgeyBQb3J0YWxTZXJ2aWNlIH0gZnJvbSAnLi9wb3J0YWwuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25TZXJ2aWNlIHtcbiAgICBwcml2YXRlIF9ub3RpZmljYXRpb25zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWV0YW9iamVjdERhdGFNb2RlbFtdPihbXSk7XG4gICAgcHJpdmF0ZSBfbm90aWZpY2F0aW9uQ291bnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IHVucmVhZDogbnVtYmVyOyBhbGw6IG51bWJlciB9Pih7IHVucmVhZDogMCwgYWxsOiAwIH0pO1xuICAgIHByaXZhdGUgX25vdGlmaWNhdGlvblVucmVhZENvdW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgICBwcml2YXRlIF9ub3RpZmljYXRpb25Mb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHBhZ2VDb3VudCA9IDE7XG4gICAgcGFnZUluZGV4ID0gMDtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChOT1RJRklDQVRBSU9OX1BPUFVQX1NFUlZFUikgcHJvdGVjdGVkIF9wb3B1cFNlcnZpY2U6IE5vdGlmaWNhdGlvblBvcHVwU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfbG9nU2VydmljZTogTG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfbG93ZXJDYXNlOiBMb3dlckNhc2VQaXBlLFxuICAgICAgICBwcml2YXRlIF9iYmJUcmFuc2xhdGU6IEJiYlRyYW5zbGF0ZVBpcGUsXG4gICAgICAgIHByaXZhdGUgX2RvbVNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgICAgICBwcml2YXRlIF9zZXJ2aWNlV29ya2VyTm90aWZpY2F0aW9uOiBTZXJ2aWNlV29ya2VyTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfcG9ydGFsU2VydmljZTogUG9ydGFsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmVcbiAgICApIHt9XG4gICAgZ2V0IG5vdGlmaWNhdGlvbkNvdW50JCgpOiBPYnNlcnZhYmxlPHsgdW5yZWFkOiBudW1iZXI7IGFsbDogbnVtYmVyIH0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWNhdGlvbkNvdW50JC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBnZXQgbm90aWZpY2F0aW9ucyQoKTogT2JzZXJ2YWJsZTxNZXRhb2JqZWN0RGF0YU1vZGVsW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWNhdGlvbnMkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoKTtcbiAgICB9XG4gICAgZ2V0IG5vdGlmaWNhdGlvbkxvYWRpbmckKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpY2F0aW9uTG9hZGluZyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHB1YmxpYyBsb2FkTW9yZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2FkTm90aWZpY2F0aW9ucyh0aGlzLnBhZ2VJbmRleCk7XG4gICAgfVxuICAgIHB1YmxpYyBzZXROb3RpZmljYXRpb25WaWV3ZWQodGFnczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgQmFyc2FBcGkuQncuUnVuQmxNZXRob2RBc3luYyh7XG4gICAgICAgICAgICBQYXJhbWV0ZXJzOiBbdGFnc10sXG4gICAgICAgICAgICBNZXRob2Q6ICdTZXROb3RpZmljYXRpb25WaWV3ZWQnLFxuICAgICAgICAgICAgU3VjY2Vzc0ZuOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9saXN0Q3VyciA9IHRoaXMuX25vdGlmaWNhdGlvbnMkLmdldFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFVucmVhZE1vTGlzdCA9IG1vbGlzdEN1cnIubWFwKChjKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5jLFxuICAgICAgICAgICAgICAgICAgICBVbnJlYWQ6IHRhZ3MuaW5kZXhPZihjLlRhZykgPiAtMSA/IGZhbHNlIDogYy5VbnJlYWRcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9ucyQubmV4dChbLi4udXBkYXRlZFVucmVhZE1vTGlzdF0pO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5jcmVhc2VOb3RpZmNhdGlvbkNvdW50KC10YWdzLmxlbmd0aCwgMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhZ3M7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRmFpbEZuOiAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ1NlcnZpY2UuZXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwdWJsaWMgU2hvd05vdGlmaWNhdGlvblJlbGF0ZWRNbyhlOiB7IHRhZzogc3RyaW5nOyBtbzogTWV0YW9iamVjdERhdGFNb2RlbDsgbmFtYTogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWUgPSB7XG4gICAgICAgICAgICAuLi5lLFxuICAgICAgICAgICAgYWZ0ZXJSZWFkeTogKGUyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBCYXJzYUFwaS5Cdy5SdW5CbE1ldGhvZEFzeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgUGFyYW1ldGVyczogW2UudGFnXSxcbiAgICAgICAgICAgICAgICAgICAgTWV0aG9kOiAnU2V0UmVhZFJhZGlmQ2FydGFibGVCeVRhZycsXG4gICAgICAgICAgICAgICAgICAgIEZhaWxGbjogKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nU2VydmljZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX3BvcnRhbFNlcnZpY2UuU2hvd0Zvcm0oZWUpO1xuICAgIH1cbiAgICBwdWJsaWMgaGFuZGxlVG9waWMoZXZlbnRUb3BpYywgY29udGVudCwgb3duZXJLZXkpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50VG9waWMgPT09ICdEZWxldGVOb3RpZmljYXRpb25NZXNzYWdlJykge1xuICAgICAgICAgICAgY29uc3QgeyBUYWdzIH06IHsgVGFnczogc3RyaW5nW10gfSA9IGNvbnRlbnQ7XG4gICAgICAgICAgICBjb25zdCBub3RpZmljYXRpb25zID0gdGhpcy5fbm90aWZpY2F0aW9ucyQuZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgIGNvbnN0IHsgZmluZEluTm90aWZpY2F0aW9ucywgdW5yZWFkQ291bnQsIGNvdW50IH0gPSB0aGlzLl9maW5kTm90aWZpY2F0aW9uc01lc3NhZ2UoVGFncywgbm90aWZpY2F0aW9ucyk7XG4gICAgICAgICAgICBpZiAoZmluZEluTm90aWZpY2F0aW9ucykge1xuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvbnMkLm5leHQobm90aWZpY2F0aW9ucy5maWx0ZXIoKGMpID0+ICFUYWdzLmluY2x1ZGVzKGMuVGFnKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHVucmVhZENvdW50ID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5jcmVhc2VOb3RpZmNhdGlvbkNvdW50KC11bnJlYWRDb3VudCwgLWNvdW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChldmVudFRvcGljID09PSAnU2V0UmVhZE5vdGlmaWNhdGlvbk1lc3NhZ2UnKSB7XG4gICAgICAgICAgICBjb25zdCBub3RpZmljYXRpb25zID0gdGhpcy5fbm90aWZpY2F0aW9ucyQuZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgIGNvbnN0IHsgVGFncyB9OiB7IFRhZ3M6IHN0cmluZ1tdIH0gPSBjb250ZW50O1xuICAgICAgICAgICAgVGFncy5mb3JFYWNoKCh0YWcpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZEluZGV4ID0gbm90aWZpY2F0aW9ucy5maW5kSW5kZXgoKGMpID0+IGMuVGFnID09PSB0YWcpO1xuICAgICAgICAgICAgICAgIGlmIChmb3VuZEluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uc1tmb3VuZEluZGV4XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLm5vdGlmaWNhdGlvbnNbZm91bmRJbmRleF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBVbnJlYWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgVW5yZWFkJENhcHRpb246ICfZhtin2K/Ysdiz2KonXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvbnMkLm5leHQoWy4uLm5vdGlmaWNhdGlvbnNdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uc0NvdW50ID0gdGhpcy5fbm90aWZpY2F0aW9uQ291bnQkLmdldFZhbHVlKCk7XG4gICAgICAgICAgICB0aGlzLmluY3JlYXNlTm90aWZjYXRpb25Db3VudCgtVGFncy5sZW5ndGgsIG5vdGlmaWNhdGlvbnNDb3VudC5hbGwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgX2ZpbmROb3RpZmljYXRpb25zTWVzc2FnZShcbiAgICAgICAgVGFnczogc3RyaW5nW10sXG4gICAgICAgIG5vdGlmaWNhdGlvbnM6IE1ldGFvYmplY3REYXRhTW9kZWxbXVxuICAgICk6IHsgZmluZEluTm90aWZpY2F0aW9uczogYm9vbGVhbjsgdW5yZWFkQ291bnQ6IG51bWJlcjsgY291bnQ6IG51bWJlciB9IHtcbiAgICAgICAgbGV0IGZpbmRJbk5vdGlmaWNhdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgbGV0IHVucmVhZENvdW50ID0gMDtcbiAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgVGFncy5mb3JFYWNoKCh0YWcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kTm90aWZpY2F0aW9uID0gbm90aWZpY2F0aW9ucy5maW5kKChjKSA9PiBjLlRhZyA9PT0gdGFnKTtcbiAgICAgICAgICAgIGlmIChmb3VuZE5vdGlmaWNhdGlvbikge1xuICAgICAgICAgICAgICAgIGZpbmRJbk5vdGlmaWNhdGlvbnMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kTm90aWZpY2F0aW9uLlVucmVhZCkge1xuICAgICAgICAgICAgICAgICAgICB1bnJlYWRDb3VudCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7IGZpbmRJbk5vdGlmaWNhdGlvbnMsIHVucmVhZENvdW50LCBjb3VudCB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGROb3RpZmljYXRpb24oXG4gICAgICAgIG1zZzogc3RyaW5nLFxuICAgICAgICB0aXRsZTogc3RyaW5nLFxuICAgICAgICB0eXBlOiBzdHJpbmcsXG4gICAgICAgIGltYWdlOiBzdHJpbmcsXG4gICAgICAgIG1vLFxuICAgICAgICB1aU9wdGlvbnM6IE5vdGlmeU9wdGlvbnMsXG4gICAgICAgIG90aGVyT3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55PlxuICAgICk6IHZvaWQge1xuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChvdGhlck9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IE1vSWQsIFR5cGVEZWZJZCB9ID0gb3RoZXJPcHRpb25zO1xuICAgICAgICAgICAgICAgIGxldCBuZXdOb3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgICRDYXB0aW9uOiB0aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgSWQ6IE1vSWQsXG4gICAgICAgICAgICAgICAgICAgICRUeXBlRGVmSWQ6IFR5cGVEZWZJZCxcbiAgICAgICAgICAgICAgICAgICAgVGl0bGU6IHRpdGxlLFxuICAgICAgICAgICAgICAgICAgICBVbnJlYWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIEljb246IGltYWdlLFxuICAgICAgICAgICAgICAgICAgICBJbWFnZTogJycsXG4gICAgICAgICAgICAgICAgICAgIENvbnRlbnQ6IG1zZyxcbiAgICAgICAgICAgICAgICAgICAgVGFnOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHk6IDAsXG4gICAgICAgICAgICAgICAgICAgIFN1YmplY3Q6ICcnLFxuICAgICAgICAgICAgICAgICAgICAkU2FmZUNvbnRlbnQ6IHRoaXMuX2RvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChtc2cpLFxuICAgICAgICAgICAgICAgICAgICBDcmVhdGlvbkRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgICAgIENyZWF0aW9uRGF0ZSRDYXB0aW9uOiB0aGlzLl9iYmJUcmFuc2xhdGUudHJhbnNmb3JtKCdEYXRlUl9Ub2RheScpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRNbyA9IG1vID8gQmFyc2FBcGkuRXh0LmRlY29kZShtbykgOiBudWxsO1xuICAgICAgICAgICAgICAgIG5ld05vdGlmaWNhdGlvbiA9IHRoaXMuX3ByZXBhcmVQcm9wZXJ0aWVzKG5ld05vdGlmaWNhdGlvbiwgcGFyc2VkTW8sIG1zZyk7XG5cbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkTW8pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9saXN0ID0gdGhpcy5fbm90aWZpY2F0aW9ucyQuZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9ucyQubmV4dChbbmV3Tm90aWZpY2F0aW9uLCAuLi5tb2xpc3RdKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmNyZWFzZU5vdGlmY2F0aW9uQ291bnQoMSwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd05vdGlmaWNhdGlvbihuZXdOb3RpZmljYXRpb24sIHBhcnNlZE1vLCB1aU9wdGlvbnMsIG90aGVyT3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbmNyZWFzZU5vdGlmY2F0aW9uQ291bnQodW5yZWFkOiBudW1iZXIsIGNvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY291bnRWYWx1ZSA9IHRoaXMuX25vdGlmaWNhdGlvbkNvdW50JC5nZXRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBzdW1VbnJlYWQgPSBjb3VudFZhbHVlLnVucmVhZCArICt1bnJlYWQ7XG4gICAgICAgIGNvbnN0IHN1bUFsbCA9IGNvdW50VmFsdWUuYWxsICsgK2NvdW50O1xuICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25Db3VudCQubmV4dCh7IHVucmVhZDogc3VtVW5yZWFkID4gMCA/IHN1bVVucmVhZCA6IDAsIGFsbDogc3VtQWxsID4gMCA/IHN1bUFsbCA6IDAgfSk7XG4gICAgfVxuICAgIHB1YmxpYyBsb2FkVW5yZWFkTm90aWZpY2F0aW9uQ291bnQoKTogdm9pZCB7XG4gICAgICAgIEJhcnNhQXBpLkJ3LlJ1bkJsTWV0aG9kQXN5bmMoe1xuICAgICAgICAgICAgUGFyYW1ldGVyczogW10sXG4gICAgICAgICAgICBNZXRob2Q6ICdHZXRTaGVsbGJhck5vdGlmaWNhdGlvbkNvdW50JyxcbiAgICAgICAgICAgIFN1Y2Nlc3NGbjogKGU6IHsgVW5yZWFkOiBudW1iZXI7IEFsbDogbnVtYmVyIH0pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVVbnJlYWRBbmRDb3VudChlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBGYWlsRm46IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nU2VydmljZS5lcnJvcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHB1YmxpYyBsb2FkTm90aWZpY2F0aW9ucyhwYWdlSW5kZXg6IG51bWJlciA9IDApOiB2b2lkIHtcbiAgICAgICAgaWYgKHBhZ2VJbmRleCArIDEgPiB0aGlzLnBhZ2VDb3VudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uTG9hZGluZyh0cnVlKTtcbiAgICAgICAgQmFyc2FBcGkuQncuUnVuQmxNZXRob2RBc3luYyh7XG4gICAgICAgICAgICBQYXJhbWV0ZXJzOiBbcGFnZUluZGV4XSxcbiAgICAgICAgICAgIE1ldGhvZDogJ0dldFNoZWxsYmFyTm90aWZpY2F0aW9ucycsXG4gICAgICAgICAgICBTdWNjZXNzRm46IChlOiB7IFBhZ2VDb3VudDogbnVtYmVyOyBNb0xpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IHRoaXMuX25vdGlmaWNhdGlvbnMkLmdldFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm90aWZMaXN0T2ZUYWdzID0gbm90aWZpY2F0aW9ucy5tYXAoKGMpID0+IGMuVGFnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2xpc3QgPSBlLk1vTGlzdC5maWx0ZXIoKGMpID0+IG5vdGlmTGlzdE9mVGFncy5pbmRleE9mKGMuVGFnKSA9PT0gLTEpLm1hcCgobW8pID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVQcm9wZXJ0aWVzKDxOb3RpZmljYXRpb25JdGVtPm1vLCBtbywgbW8uSU1lc3NhZ2U/LkNvbnRlbnQpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25zJC5uZXh0KFsuLi5ub3RpZmljYXRpb25zLCAuLi5tb2xpc3RdKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VDb3VudCA9ICtlLlBhZ2VDb3VudDtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VJbmRleCA9IHBhZ2VJbmRleCArIDE7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25Mb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBGYWlsRm46IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nU2VydmljZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkxvYWRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlTm90aWZpY2F0aW9uKG1vbGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdLCBjbG9zZU5vdGlmaWNhdGlvbiA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW9JZHMgPSB0aGlzLl9zZXROb3RpZmljYXRpb25Mb2FkaW5nKG1vbGlzdCwgdHJ1ZSk7XG4gICAgICAgIEJhcnNhQXBpLkJ3LlJ1bkJsTWV0aG9kQXN5bmMoe1xuICAgICAgICAgICAgUGFyYW1ldGVyczogW21vSWRzXSxcbiAgICAgICAgICAgIE1ldGhvZDogJ1JlbW92ZVNoZWxsYmFyTm90aWZpY2F0aW9uJyxcbiAgICAgICAgICAgIFN1Y2Nlc3NGbjogKGU6IHsgVW5yZWFkOiBudW1iZXI7IEFsbDogbnVtYmVyIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBub3RpZmljYXRpb25MaXN0ID0gdGhpcy5fbm90aWZpY2F0aW9ucyQuZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVVbnJlYWRBbmRDb3VudChlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdNb0xpc3QgPSBub3RpZmljYXRpb25MaXN0LmZpbHRlcigoYykgPT4gbW9JZHMuaW5kZXhPZihjLklkKSA9PT0gLTEpO1xuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvbnMkLm5leHQobmV3TW9MaXN0KTtcbiAgICAgICAgICAgICAgICBpZiAoY2xvc2VOb3RpZmljYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VydmljZVdvcmtlck5vdGlmaWNhdGlvbi5jbG9zZU5vdGlmaWNhdGlvbnMobW9JZHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbm90aWZpY2F0aW9uQ291bnQkLmdldFZhbHVlKCkuYWxsID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWROb3RpZmljYXRpb25zKHRoaXMucGFnZUluZGV4IC0gMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEZhaWxGbjogKGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dTZXJ2aWNlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldE5vdGlmaWNhdGlvbkxvYWRpbmcobW9saXN0LCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwcml2YXRlIF91cGRhdGVVbnJlYWRBbmRDb3VudChlOiB7IFVucmVhZDogbnVtYmVyOyBBbGw6IG51bWJlciB9KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX25vdGlmaWNhdGlvblVucmVhZENvdW50JC5uZXh0KCtlLlVucmVhZCk7XG4gICAgICAgIHRoaXMuX25vdGlmaWNhdGlvbkNvdW50JC5uZXh0KHsgdW5yZWFkOiArZS5VbnJlYWQsIGFsbDogK2UuQWxsIH0pO1xuICAgIH1cblxuICAgIGdldCBTdXBwb3J0Tm90aWZpY2F0aW9ucygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBOb3RpZmljYXRpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuX3NlcnZpY2VXb3JrZXJOb3RpZmljYXRpb24uaXNFbmFibGVkO1xuICAgIH1cbiAgICBwdWJsaWMgc2hvd05vdGlmaWNhdGlvbihcbiAgICAgICAgbm90aWZpY2F0aW9uSXRlbTogTm90aWZpY2F0aW9uSXRlbSxcbiAgICAgICAgbW86IE1ldGFvYmplY3REYXRhTW9kZWwgfCBudWxsLFxuICAgICAgICB1aU9wdGlvbnM6IE5vdGlmeU9wdGlvbnMsXG4gICAgICAgIG90aGVyT3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55PlxuICAgICk6IHZvaWQge1xuICAgICAgICBpZiAobm90aWZpY2F0aW9uSXRlbS5UaXRsZSAmJiBub3RpZmljYXRpb25JdGVtLlRpdGxlLnN0YXJ0c1dpdGgoJ1snKSAmJiBub3RpZmljYXRpb25JdGVtLlRpdGxlLmVuZHNXaXRoKCddJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuU3VwcG9ydE5vdGlmaWNhdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ1NlcnZpY2Uud2FybihgSW5BcHAgTm90aWZpY2F0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgICAgICAgICB1aU9wdGlvbnMgPSB1aU9wdGlvbnMgPz8ge307XG4gICAgICAgICAgICB1aU9wdGlvbnMuTm90aWZpY2F0aW9uSXRlbSA9IG5vdGlmaWNhdGlvbkl0ZW07XG4gICAgICAgICAgICB0aGlzLl9wb3B1cE5vdGlmeShub3RpZmljYXRpb25JdGVtLCBtbywgdWlPcHRpb25zLCBvdGhlck9wdGlvbnMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2luQXBwTm90aWZ5KG5vdGlmaWNhdGlvbkl0ZW0pO1xuICAgIH1cbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvbkxvYWRpbmcobG9hZGluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25Mb2FkaW5nJC5uZXh0KGxvYWRpbmcpO1xuICAgIH1cbiAgICBwcml2YXRlIF9zZXROb3RpZmljYXRpb25Mb2FkaW5nKG1vbGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdLCBsb2FkaW5nOiBib29sZWFuID0gdHJ1ZSk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgbW9saXN0Q3VyciA9IHRoaXMuX25vdGlmaWNhdGlvbnMkLmdldFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IG1vSWRzID0gbW9saXN0Lm1hcCgoYykgPT4gYy5JZCk7XG4gICAgICAgIGNvbnN0IG1vbGlzdFdpdGhMb2FkaW5nUHJvcGVydHkgPSBtb2xpc3RDdXJyLm1hcCgoYykgPT4gKHtcbiAgICAgICAgICAgIC4uLmMsXG4gICAgICAgICAgICAkTm90aWZpY2F0b2luTG9hZGluZzogbW9JZHMuaW5kZXhPZihjLklkKSAhPT0gLTEgPyBsb2FkaW5nIDogYy4kTm90aWZpY2F0b2luTG9hZGluZ1xuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMuX25vdGlmaWNhdGlvbnMkLm5leHQoWy4uLm1vbGlzdFdpdGhMb2FkaW5nUHJvcGVydHldKTtcbiAgICAgICAgcmV0dXJuIG1vSWRzO1xuICAgIH1cbiAgICBwcml2YXRlIF9wb3B1cE5vdGlmeShcbiAgICAgICAgbm90aWZpY2F0aW9uSXRlbTogTm90aWZpY2F0aW9uSXRlbSxcbiAgICAgICAgbW86IE1ldGFvYmplY3REYXRhTW9kZWwgfCBudWxsLFxuICAgICAgICB1aU9wdGlvbnM6IE5vdGlmeU9wdGlvbnMsXG4gICAgICAgIG90aGVyT3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55PlxuICAgICk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wb3B1cFNlcnZpY2UucG9wdXBOb3RpZnkoXG4gICAgICAgICAgICBub3RpZmljYXRpb25JdGVtLiRTYWZlQ29udGVudCxcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbkl0ZW0uVGl0bGUsXG4gICAgICAgICAgICBub3RpZmljYXRpb25JdGVtLlN1YmplY3QsXG4gICAgICAgICAgICBub3RpZmljYXRpb25JdGVtLkltYWdlLFxuICAgICAgICAgICAgbW8sXG4gICAgICAgICAgICB1aU9wdGlvbnMsXG4gICAgICAgICAgICBvdGhlck9wdGlvbnNcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcHJlcGFyZVByb3BlcnRpZXMoXG4gICAgICAgIG5vdGlmaWNhdGlvbkl0ZW06IE5vdGlmaWNhdGlvbkl0ZW0sXG4gICAgICAgIG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLFxuICAgICAgICBjb250ZW50OiBzdHJpbmdcbiAgICApOiBOb3RpZmljYXRpb25JdGVtIHtcbiAgICAgICAgaWYgKCFtbykge1xuICAgICAgICAgICAgcmV0dXJuIG5vdGlmaWNhdGlvbkl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLm5vdGlmaWNhdGlvbkl0ZW0sXG4gICAgICAgICAgICAuLi5tbyxcbiAgICAgICAgICAgIFVpQWN0aW9uczogIW1vLlVpQWN0aW9ucyA/IFtdIDogSlNPTi5wYXJzZShtby5VaUFjdGlvbnMpLFxuICAgICAgICAgICAgQ3JlYXRpb25EYXRlOiBtby5JTWVzc2FnZS5DcmVhdGlvbkRhdGUsXG4gICAgICAgICAgICBDcmVhdGlvbkRhdGUkQ2FwdGlvbjogbW8uSU1lc3NhZ2UuQ3JlYXRpb25EYXRlJENhcHRpb24sXG4gICAgICAgICAgICBDcmVhdG9yVXNlcjogbW8uSU1lc3NhZ2UuQ3JlYXRvclVzZXIsXG4gICAgICAgICAgICBDcmVhdG9yVXNlciRDYXB0aW9uOiBtby5JTWVzc2FnZS5DcmVhdG9yVXNlciRDYXB0aW9uLFxuICAgICAgICAgICAgSWNvbjogYCR7QmFyc2FBcGkuQncuT3JpZ2luKCl9JHtub3RpZmljYXRpb25JdGVtLkljb259YCxcbiAgICAgICAgICAgICRTYWZlQ29udGVudDogdGhpcy5fZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGNvbnRlbnQpXG4gICAgICAgIH07XG4gICAgfVxuICAgIHByaXZhdGUgX2luQXBwTm90aWZ5KG5vdGlmaWNhdGlvbkl0ZW06IE5vdGlmaWNhdGlvbkl0ZW0pOiB2b2lkIHtcbiAgICAgICAgTm90aWZpY2F0aW9uLnJlcXVlc3RQZXJtaXNzaW9uKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxhbmcgPSBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLkN1bHR1cmU7XG4gICAgICAgICAgICBjb25zdCBpc1J0bCA9IEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuQ3VsdHVyZXNSdGxbbGFuZ107XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09ICdncmFudGVkJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlcnZpY2VXb3JrZXJOb3RpZmljYXRpb24uc2hvd05vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbkl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGlzUnRsLFxuICAgICAgICAgICAgICAgICAgICBsYW5nXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86cGVybWlzc2lvbiBkZW5pZWRcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dTZXJ2aWNlLmVycm9yKCdub3RpZmljYXRpb24gcGVybWlzc2lvbiBkZW5pZWQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|