@ieeesa-npm/dashboard 0.0.2 → 0.0.4
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/esm2022/lib/assets/constants.json +7 -3
- package/esm2022/lib/components/event-group-card/event-group-card.component.mjs +103 -13
- package/esm2022/lib/components/meeting-attendance-row/meeting-attendance-row.component.mjs +101 -23
- package/esm2022/lib/components/upcoming-meetings-events/upcoming-meetings-events.component.mjs +70 -6
- package/esm2022/lib/components/your-groups/your-groups.component.mjs +132 -23
- package/esm2022/lib/dashboard.component.mjs +93 -9
- package/esm2022/lib/models/attendance-state.model.mjs +8 -1
- package/esm2022/lib/models/dashboard-route-config.model.mjs +1 -1
- package/esm2022/lib/models/event-meeting-list-item.model.mjs +1 -1
- package/esm2022/lib/models/event-meeting-list-payload.model.mjs +7 -5
- package/esm2022/lib/models/meeting-row.model.mjs +1 -1
- package/esm2022/lib/models/upcoming-event.model.mjs +1 -1
- package/esm2022/lib/services/dashboard.service.mjs +71 -126
- package/esm2022/lib/services/user-permissions.service.mjs +23 -9
- package/esm2022/lib/utils/event-meeting-mapper.util.mjs +47 -41
- package/fesm2022/ieeesa-npm-dashboard.mjs +657 -306
- package/fesm2022/ieeesa-npm-dashboard.mjs.map +1 -1
- package/lib/components/event-group-card/event-group-card.component.d.ts +75 -6
- package/lib/components/meeting-attendance-row/meeting-attendance-row.component.d.ts +61 -7
- package/lib/components/member-level-badge/member-level-badge.component.d.ts +12 -1
- package/lib/components/upcoming-meetings-events/upcoming-meetings-events.component.d.ts +51 -3
- package/lib/components/your-groups/your-groups.component.d.ts +72 -14
- package/lib/dashboard.component.d.ts +53 -3
- package/lib/models/attendance-state.model.d.ts +8 -1
- package/lib/models/dashboard-route-config.model.d.ts +14 -0
- package/lib/models/event-meeting-list-item.model.d.ts +68 -68
- package/lib/models/event-meeting-list-payload.model.d.ts +14 -25
- package/lib/models/meeting-row.model.d.ts +2 -0
- package/lib/models/upcoming-event.model.d.ts +9 -0
- package/lib/services/dashboard.service.d.ts +25 -53
- package/lib/services/user-permissions.service.d.ts +8 -4
- package/lib/utils/event-meeting-mapper.util.d.ts +15 -21
- package/package.json +1 -1
|
@@ -1,9 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure mappers converting the raw "home" events-&-meetings backend list/detail
|
|
3
|
+
* items into the dashboard view models. No Angular / service dependencies so
|
|
4
|
+
* they are trivially unit-testable and shared by {@link DashboardService}.
|
|
5
|
+
*
|
|
6
|
+
* Backend dates are ISO-8601 strings; callers format them with luxon at render
|
|
7
|
+
* time. The list mapper enforces the dashboard rule that STANDALONE_MEETING rows
|
|
8
|
+
* always sort LAST within the section.
|
|
9
|
+
*/
|
|
10
|
+
import { AttendanceState } from '../models/attendance-state.model';
|
|
1
11
|
import { UpcomingItemKind, } from '../models/upcoming-event.model';
|
|
2
|
-
import { computeDayIndicator } from './date-format.util';
|
|
3
12
|
/**
|
|
4
13
|
* Determines whether a raw list item is an EVENT (owns child meetings) or a
|
|
5
|
-
* STANDALONE_MEETING
|
|
6
|
-
*
|
|
14
|
+
* STANDALONE_MEETING, using the backend `isMeetingEvent` discriminator (falling
|
|
15
|
+
* back to `hasChildren`).
|
|
7
16
|
* @param {EventMeetingListItem} item - The raw list item.
|
|
8
17
|
* @return {UpcomingItemKind} The resolved render kind.
|
|
9
18
|
*/
|
|
@@ -13,43 +22,40 @@ export function resolveItemKind(item) {
|
|
|
13
22
|
}
|
|
14
23
|
/**
|
|
15
24
|
* Maps a raw backend list item to the {@link UpcomingEvent} view model. EVENT
|
|
16
|
-
* rows
|
|
17
|
-
*
|
|
25
|
+
* rows carry their total / open-for-attendance counts and start with an empty
|
|
26
|
+
* `meetings` array (child meetings are lazily loaded on drill-down);
|
|
27
|
+
* STANDALONE_MEETING rows carry their own group/location + attendance state.
|
|
18
28
|
* @param {EventMeetingListItem} item - The raw list item.
|
|
19
29
|
* @return {UpcomingEvent} The mapped view model.
|
|
20
30
|
*/
|
|
21
31
|
export function mapListItemToUpcomingEvent(item) {
|
|
22
32
|
const kind = resolveItemKind(item);
|
|
23
|
-
const
|
|
24
|
-
const dayIndicator = item?.dayIndicator ??
|
|
25
|
-
(kind === UpcomingItemKind.EVENT
|
|
26
|
-
? computeDayIndicator(item?.startDateTime, item?.endDateTime, timezone)
|
|
27
|
-
: '');
|
|
33
|
+
const isEvent = kind === UpcomingItemKind.EVENT;
|
|
28
34
|
return {
|
|
29
|
-
eventId: item?.id ??
|
|
35
|
+
eventId: item?.id ?? '',
|
|
30
36
|
kind,
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
// The list
|
|
34
|
-
|
|
35
|
-
dayIndicator,
|
|
36
|
-
meetingCount:
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
title: item?.name ?? '',
|
|
38
|
+
status: item?.status ?? '',
|
|
39
|
+
// The list endpoint has no day indicator; it is populated on drill-down
|
|
40
|
+
// from the event's currentDay / totalDays.
|
|
41
|
+
dayIndicator: '',
|
|
42
|
+
meetingCount: isEvent ? item?.totalMeetingCount ?? 0 : 1,
|
|
43
|
+
openForAttendanceCount: isEvent
|
|
44
|
+
? item?.meetingsOpenForAttendanceCount ?? 0
|
|
45
|
+
: 0,
|
|
40
46
|
startDateTime: item?.startDateTime,
|
|
41
47
|
endDateTime: item?.endDateTime,
|
|
42
|
-
timezone,
|
|
48
|
+
timezone: item?.timeZone ?? '',
|
|
43
49
|
groupOrCommittee: item?.groupName ?? item?.groupAcronym ?? '',
|
|
44
|
-
roomOrLocation: item?.meetingLocation ??
|
|
45
|
-
|
|
50
|
+
roomOrLocation: item?.meetingLocation ?? '',
|
|
51
|
+
attendanceState: isEvent ? undefined : item?.attendanceState,
|
|
46
52
|
meetings: [],
|
|
47
53
|
};
|
|
48
54
|
}
|
|
49
55
|
/**
|
|
50
|
-
* Maps a raw backend list
|
|
51
|
-
*
|
|
52
|
-
*
|
|
56
|
+
* Maps a raw backend combined list into the dashboard view models, enforcing
|
|
57
|
+
* that STANDALONE_MEETING rows always sort LAST while preserving the backend's
|
|
58
|
+
* within-group ordering for each partition (stable sort).
|
|
53
59
|
* @param {EventMeetingListItem[]} items - The raw list items.
|
|
54
60
|
* @return {UpcomingEvent[]} The mapped, standalone-last ordered view models.
|
|
55
61
|
*/
|
|
@@ -60,37 +66,37 @@ export function mapEventMeetingList(items) {
|
|
|
60
66
|
return [...events, ...standalone];
|
|
61
67
|
}
|
|
62
68
|
/**
|
|
63
|
-
* Maps a raw backend
|
|
69
|
+
* Maps a raw backend drill-down meeting item to the {@link MeetingRow} view
|
|
64
70
|
* model used by the event block's expanded meeting list.
|
|
65
71
|
* @param {EventMeetingDetailItem} item - The raw child-meeting item.
|
|
72
|
+
* @param {string} [eventId] - The owning event id (for navigation).
|
|
66
73
|
* @return {MeetingRow} The mapped meeting row.
|
|
67
74
|
*/
|
|
68
|
-
export function mapDetailItemToMeetingRow(item) {
|
|
75
|
+
export function mapDetailItemToMeetingRow(item, eventId = '') {
|
|
69
76
|
const status = item?.status ?? '';
|
|
70
|
-
|
|
71
|
-
// meetingsDetails endpoint has no dedicated flag, so derive it from status
|
|
72
|
-
// (honouring an explicit backend flag when one is provided).
|
|
73
|
-
const isOpenForAttendance = item?.isOpenForAttendance ?? status.trim().toLowerCase() === 'in progress';
|
|
77
|
+
const attendanceState = item?.attendanceState ?? AttendanceState.NOT_ATTENDING;
|
|
74
78
|
return {
|
|
75
79
|
meetingId: item?.meetingId ?? '',
|
|
80
|
+
eventId,
|
|
76
81
|
meetingName: item?.meetingTitle ?? '',
|
|
77
|
-
groupOrCommittee: item?.groupName ?? '',
|
|
78
|
-
roomOrLocation: item?.
|
|
82
|
+
groupOrCommittee: item?.groupName ?? item?.groupAcronym ?? '',
|
|
83
|
+
roomOrLocation: item?.location ?? '',
|
|
79
84
|
startDateTime: item?.meetingStDate,
|
|
80
85
|
endDateTime: item?.meetingEdDate,
|
|
81
86
|
timezone: item?.timeZone ?? '',
|
|
82
87
|
status,
|
|
83
|
-
|
|
84
|
-
isOpenForAttendance,
|
|
88
|
+
attendanceState,
|
|
89
|
+
isOpenForAttendance: status.trim().toLowerCase() === 'in progress',
|
|
85
90
|
};
|
|
86
91
|
}
|
|
87
92
|
/**
|
|
88
|
-
* Maps a raw backend
|
|
89
|
-
*
|
|
93
|
+
* Maps a raw backend drill-down meeting list to {@link MeetingRow} view models,
|
|
94
|
+
* tagging each with its owning event id for navigation.
|
|
90
95
|
* @param {EventMeetingDetailItem[]} items - The raw child-meeting items.
|
|
96
|
+
* @param {string} [eventId] - The owning event id.
|
|
91
97
|
* @return {MeetingRow[]} The mapped meeting rows.
|
|
92
98
|
*/
|
|
93
|
-
export function mapEventMeetingDetails(items) {
|
|
94
|
-
return (items ?? []).map((item) => mapDetailItemToMeetingRow(item));
|
|
99
|
+
export function mapEventMeetingDetails(items, eventId = '') {
|
|
100
|
+
return (items ?? []).map((item) => mapDetailItemToMeetingRow(item, eventId));
|
|
95
101
|
}
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtbWVldGluZy1tYXBwZXIudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rhc2hib2FyZC9zcmMvbGliL3V0aWxzL2V2ZW50LW1lZXRpbmctbWFwcGVyLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBY0EsT0FBTyxFQUVMLGdCQUFnQixHQUNqQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXpEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQzdCLElBQTBCO0lBRTFCLE1BQU0sT0FBTyxHQUFHLElBQUksRUFBRSxjQUFjLEtBQUssSUFBSSxJQUFJLElBQUksRUFBRSxXQUFXLEtBQUssSUFBSSxDQUFDO0lBQzVFLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDO0FBQ2hGLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQ3hDLElBQTBCO0lBRTFCLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxNQUFNLFFBQVEsR0FBRyxJQUFJLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQztJQUN0QyxNQUFNLFlBQVksR0FDaEIsSUFBSSxFQUFFLFlBQVk7UUFDbEIsQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsS0FBSztZQUM5QixDQUFDLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQztZQUN2RSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDVixPQUFPO1FBQ0wsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE9BQU8sSUFBSSxJQUFJLEVBQUUsU0FBUyxJQUFJLEVBQUU7UUFDM0QsSUFBSTtRQUNKLCtFQUErRTtRQUMvRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsWUFBWSxJQUFJLEVBQUU7UUFDN0Msc0VBQXNFO1FBQ3RFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxJQUFJLElBQUksRUFBRSxnQkFBZ0IsSUFBSSxFQUFFO1FBQ3BELFlBQVk7UUFDWixZQUFZLEVBQ1YsSUFBSSxLQUFLLGdCQUFnQixDQUFDLGtCQUFrQjtZQUMxQyxDQUFDLENBQUMsQ0FBQztZQUNILENBQUMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxJQUFJLENBQUM7UUFDN0Isc0JBQXNCLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixJQUFJLENBQUM7UUFDekQsYUFBYSxFQUFFLElBQUksRUFBRSxhQUFhO1FBQ2xDLFdBQVcsRUFBRSxJQUFJLEVBQUUsV0FBVztRQUM5QixRQUFRO1FBQ1IsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLFNBQVMsSUFBSSxJQUFJLEVBQUUsWUFBWSxJQUFJLEVBQUU7UUFDN0QsY0FBYyxFQUFFLElBQUksRUFBRSxlQUFlLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFO1FBQ3pELGVBQWUsRUFBRSxJQUFJLEVBQUUsZUFBZSxJQUFJLEtBQUs7UUFDL0MsUUFBUSxFQUFFLEVBQUU7S0FDYixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsS0FBNkI7SUFFN0IsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQzFCLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLEtBQUssQ0FDakQsQ0FBQztJQUNGLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQzlCLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLGtCQUFrQixDQUM5RCxDQUFDO0lBQ0YsT0FBTyxDQUFDLEdBQUcsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHlCQUF5QixDQUN2QyxJQUE0QjtJQUU1QixNQUFNLE1BQU0sR0FBRyxJQUFJLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUNsQyxrRUFBa0U7SUFDbEUsMkVBQTJFO0lBQzNFLDZEQUE2RDtJQUM3RCxNQUFNLG1CQUFtQixHQUN2QixJQUFJLEVBQUUsbUJBQW1CLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLGFBQWEsQ0FBQztJQUM3RSxPQUFPO1FBQ0wsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLElBQUksRUFBRTtRQUNoQyxXQUFXLEVBQUUsSUFBSSxFQUFFLFlBQVksSUFBSSxFQUFFO1FBQ3JDLGdCQUFnQixFQUFFLElBQUksRUFBRSxTQUFTLElBQUksRUFBRTtRQUN2QyxjQUFjLEVBQUUsSUFBSSxFQUFFLGVBQWUsSUFBSSxFQUFFO1FBQzNDLGFBQWEsRUFBRSxJQUFJLEVBQUUsYUFBYTtRQUNsQyxXQUFXLEVBQUUsSUFBSSxFQUFFLGFBQWE7UUFDaEMsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLElBQUksRUFBRTtRQUM5QixNQUFNO1FBQ04sZUFBZSxFQUFFLElBQUksRUFBRSxlQUFlLElBQUksS0FBSztRQUMvQyxtQkFBbUI7S0FDcEIsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FDcEMsS0FBK0I7SUFFL0IsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBQdXJlIG1hcHBlcnMgY29udmVydGluZyB0aGUgcmF3IFwiZXZlbnRzICYgbWVldGluZ3NcIiBiYWNrZW5kIGxpc3QvZGV0YWlsIGl0ZW1zXHJcbiAqIGludG8gdGhlIGRhc2hib2FyZCB2aWV3IG1vZGVscy4gTm8gQW5ndWxhciAvIHNlcnZpY2UgZGVwZW5kZW5jaWVzIHNvIHRoZXkgYXJlXHJcbiAqIHRyaXZpYWxseSB1bml0LXRlc3RhYmxlIGFuZCBzaGFyZWQgYnkge0BsaW5rIERhc2hib2FyZFNlcnZpY2V9LlxyXG4gKlxyXG4gKiBCYWNrZW5kIGRhdGVzIGFyZSBlcG9jaCBtaWxsaXNlY29uZHM7IGNhbGxlcnMgZm9ybWF0IHRoZW0gd2l0aCBsdXhvblxyXG4gKiBgRGF0ZVRpbWUuZnJvbU1pbGxpc2AgYXQgcmVuZGVyIHRpbWUuIFRoZSBsaXN0IG1hcHBlciBlbmZvcmNlcyB0aGUgZGFzaGJvYXJkXHJcbiAqIHJ1bGUgdGhhdCBTVEFOREFMT05FX01FRVRJTkcgcm93cyBhbHdheXMgc29ydCBMQVNUIHdpdGhpbiB0aGUgc2VjdGlvbi5cclxuICovXHJcbmltcG9ydCB7XHJcbiAgRXZlbnRNZWV0aW5nRGV0YWlsSXRlbSxcclxuICBFdmVudE1lZXRpbmdMaXN0SXRlbSxcclxufSBmcm9tICcuLi9tb2RlbHMvZXZlbnQtbWVldGluZy1saXN0LWl0ZW0ubW9kZWwnO1xyXG5pbXBvcnQgeyBNZWV0aW5nUm93IH0gZnJvbSAnLi4vbW9kZWxzL21lZXRpbmctcm93Lm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBVcGNvbWluZ0V2ZW50LFxyXG4gIFVwY29taW5nSXRlbUtpbmQsXHJcbn0gZnJvbSAnLi4vbW9kZWxzL3VwY29taW5nLWV2ZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgY29tcHV0ZURheUluZGljYXRvciB9IGZyb20gJy4vZGF0ZS1mb3JtYXQudXRpbCc7XHJcblxyXG4vKipcclxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgcmF3IGxpc3QgaXRlbSBpcyBhbiBFVkVOVCAob3ducyBjaGlsZCBtZWV0aW5ncykgb3IgYVxyXG4gKiBTVEFOREFMT05FX01FRVRJTkcuIEFuIGl0ZW0gaXMgYW4gRVZFTlQgd2hlbiB0aGUgYmFja2VuZCBmbGFncyBpdCB3aXRoXHJcbiAqIGBpc01lZXRpbmdFdmVudCA9PT0gdHJ1ZWAgb3IgYGhhc0NoaWxkcmVuID09PSB0cnVlYC5cclxuICogQHBhcmFtIHtFdmVudE1lZXRpbmdMaXN0SXRlbX0gaXRlbSAtIFRoZSByYXcgbGlzdCBpdGVtLlxyXG4gKiBAcmV0dXJuIHtVcGNvbWluZ0l0ZW1LaW5kfSBUaGUgcmVzb2x2ZWQgcmVuZGVyIGtpbmQuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUl0ZW1LaW5kKFxyXG4gIGl0ZW06IEV2ZW50TWVldGluZ0xpc3RJdGVtXHJcbik6IFVwY29taW5nSXRlbUtpbmQge1xyXG4gIGNvbnN0IGlzRXZlbnQgPSBpdGVtPy5pc01lZXRpbmdFdmVudCA9PT0gdHJ1ZSB8fCBpdGVtPy5oYXNDaGlsZHJlbiA9PT0gdHJ1ZTtcclxuICByZXR1cm4gaXNFdmVudCA/IFVwY29taW5nSXRlbUtpbmQuRVZFTlQgOiBVcGNvbWluZ0l0ZW1LaW5kLlNUQU5EQUxPTkVfTUVFVElORztcclxufVxyXG5cclxuLyoqXHJcbiAqIE1hcHMgYSByYXcgYmFja2VuZCBsaXN0IGl0ZW0gdG8gdGhlIHtAbGluayBVcGNvbWluZ0V2ZW50fSB2aWV3IG1vZGVsLiBFVkVOVFxyXG4gKiByb3dzIHN0YXJ0IHdpdGggYW4gZW1wdHkgYG1lZXRpbmdzYCBhcnJheSAoY2hpbGQgbWVldGluZ3MgYXJlIGxhemlseSBsb2FkZWQgb25cclxuICogZXhwYW5kKTsgU1RBTkRBTE9ORV9NRUVUSU5HIHJvd3MgY2FycnkgdGhlaXIgb3duIGdyb3VwL2xvY2F0aW9uIGZpZWxkcy5cclxuICogQHBhcmFtIHtFdmVudE1lZXRpbmdMaXN0SXRlbX0gaXRlbSAtIFRoZSByYXcgbGlzdCBpdGVtLlxyXG4gKiBAcmV0dXJuIHtVcGNvbWluZ0V2ZW50fSBUaGUgbWFwcGVkIHZpZXcgbW9kZWwuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gbWFwTGlzdEl0ZW1Ub1VwY29taW5nRXZlbnQoXHJcbiAgaXRlbTogRXZlbnRNZWV0aW5nTGlzdEl0ZW1cclxuKTogVXBjb21pbmdFdmVudCB7XHJcbiAgY29uc3Qga2luZCA9IHJlc29sdmVJdGVtS2luZChpdGVtKTtcclxuICBjb25zdCB0aW1lem9uZSA9IGl0ZW0/LnRpbWVab25lID8/ICcnO1xyXG4gIGNvbnN0IGRheUluZGljYXRvciA9XHJcbiAgICBpdGVtPy5kYXlJbmRpY2F0b3IgPz9cclxuICAgIChraW5kID09PSBVcGNvbWluZ0l0ZW1LaW5kLkVWRU5UXHJcbiAgICAgID8gY29tcHV0ZURheUluZGljYXRvcihpdGVtPy5zdGFydERhdGVUaW1lLCBpdGVtPy5lbmREYXRlVGltZSwgdGltZXpvbmUpXHJcbiAgICAgIDogJycpO1xyXG4gIHJldHVybiB7XHJcbiAgICBldmVudElkOiBpdGVtPy5pZCA/PyBpdGVtPy5ldmVudElkID8/IGl0ZW0/Lm1lZXRpbmdJZCA/PyAnJyxcclxuICAgIGtpbmQsXHJcbiAgICAvLyBUaGUgbGlzdCBlbmRwb2ludCB1c2VzIGBuYW1lYDsgZmFsbCBiYWNrIHRvIGBtZWV0aW5nVGl0bGVgIGZvciBtZWV0aW5nIHJvd3MuXHJcbiAgICB0aXRsZTogaXRlbT8ubmFtZSA/PyBpdGVtPy5tZWV0aW5nVGl0bGUgPz8gJycsXHJcbiAgICAvLyBUaGUgbGlzdCBzY3JlZW4gY29waWVzIHN0YXR1cyBpbnRvIGNvbnRlbnRVbmRlckxpbms7IGFjY2VwdCBlaXRoZXIuXHJcbiAgICBzdGF0dXM6IGl0ZW0/LnN0YXR1cyA/PyBpdGVtPy5jb250ZW50VW5kZXJMaW5rID8/ICcnLFxyXG4gICAgZGF5SW5kaWNhdG9yLFxyXG4gICAgbWVldGluZ0NvdW50OlxyXG4gICAgICBraW5kID09PSBVcGNvbWluZ0l0ZW1LaW5kLlNUQU5EQUxPTkVfTUVFVElOR1xyXG4gICAgICAgID8gMVxyXG4gICAgICAgIDogaXRlbT8ubWVldGluZ0NvdW50ID8/IDAsXHJcbiAgICBvcGVuRm9yQXR0ZW5kYW5jZUNvdW50OiBpdGVtPy5vcGVuRm9yQXR0ZW5kYW5jZUNvdW50ID8/IDAsXHJcbiAgICBzdGFydERhdGVUaW1lOiBpdGVtPy5zdGFydERhdGVUaW1lLFxyXG4gICAgZW5kRGF0ZVRpbWU6IGl0ZW0/LmVuZERhdGVUaW1lLFxyXG4gICAgdGltZXpvbmUsXHJcbiAgICBncm91cE9yQ29tbWl0dGVlOiBpdGVtPy5ncm91cE5hbWUgPz8gaXRlbT8uZ3JvdXBBY3JvbnltID8/ICcnLFxyXG4gICAgcm9vbU9yTG9jYXRpb246IGl0ZW0/Lm1lZXRpbmdMb2NhdGlvbiA/PyBpdGVtPy5yb29tID8/ICcnLFxyXG4gICAgaXNNZW1iZXJPZkdyb3VwOiBpdGVtPy5pc01lbWJlck9mR3JvdXAgPz8gZmFsc2UsXHJcbiAgICBtZWV0aW5nczogW10sXHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIE1hcHMgYSByYXcgYmFja2VuZCBsaXN0IG9mIGV2ZW50cyAmIG1lZXRpbmdzIGludG8gdGhlIGRhc2hib2FyZCB2aWV3IG1vZGVscyxcclxuICogZW5mb3JjaW5nIHRoYXQgU1RBTkRBTE9ORV9NRUVUSU5HIHJvd3MgYWx3YXlzIHNvcnQgTEFTVCB3aGlsZSBwcmVzZXJ2aW5nIHRoZVxyXG4gKiBiYWNrZW5kJ3Mgd2l0aGluLWdyb3VwIG9yZGVyaW5nIGZvciBlYWNoIHBhcnRpdGlvbiAoc3RhYmxlIHNvcnQpLlxyXG4gKiBAcGFyYW0ge0V2ZW50TWVldGluZ0xpc3RJdGVtW119IGl0ZW1zIC0gVGhlIHJhdyBsaXN0IGl0ZW1zLlxyXG4gKiBAcmV0dXJuIHtVcGNvbWluZ0V2ZW50W119IFRoZSBtYXBwZWQsIHN0YW5kYWxvbmUtbGFzdCBvcmRlcmVkIHZpZXcgbW9kZWxzLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG1hcEV2ZW50TWVldGluZ0xpc3QoXHJcbiAgaXRlbXM6IEV2ZW50TWVldGluZ0xpc3RJdGVtW11cclxuKTogVXBjb21pbmdFdmVudFtdIHtcclxuICBjb25zdCBtYXBwZWQgPSAoaXRlbXMgPz8gW10pLm1hcCgoaXRlbSkgPT4gbWFwTGlzdEl0ZW1Ub1VwY29taW5nRXZlbnQoaXRlbSkpO1xyXG4gIGNvbnN0IGV2ZW50cyA9IG1hcHBlZC5maWx0ZXIoXHJcbiAgICAoZW50cnkpID0+IGVudHJ5LmtpbmQgPT09IFVwY29taW5nSXRlbUtpbmQuRVZFTlRcclxuICApO1xyXG4gIGNvbnN0IHN0YW5kYWxvbmUgPSBtYXBwZWQuZmlsdGVyKFxyXG4gICAgKGVudHJ5KSA9PiBlbnRyeS5raW5kID09PSBVcGNvbWluZ0l0ZW1LaW5kLlNUQU5EQUxPTkVfTUVFVElOR1xyXG4gICk7XHJcbiAgcmV0dXJuIFsuLi5ldmVudHMsIC4uLnN0YW5kYWxvbmVdO1xyXG59XHJcblxyXG4vKipcclxuICogTWFwcyBhIHJhdyBiYWNrZW5kIGNoaWxkLW1lZXRpbmcgZGV0YWlsIGl0ZW0gdG8gdGhlIHtAbGluayBNZWV0aW5nUm93fSB2aWV3XHJcbiAqIG1vZGVsIHVzZWQgYnkgdGhlIGV2ZW50IGJsb2NrJ3MgZXhwYW5kZWQgbWVldGluZyBsaXN0LlxyXG4gKiBAcGFyYW0ge0V2ZW50TWVldGluZ0RldGFpbEl0ZW19IGl0ZW0gLSBUaGUgcmF3IGNoaWxkLW1lZXRpbmcgaXRlbS5cclxuICogQHJldHVybiB7TWVldGluZ1Jvd30gVGhlIG1hcHBlZCBtZWV0aW5nIHJvdy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBtYXBEZXRhaWxJdGVtVG9NZWV0aW5nUm93KFxyXG4gIGl0ZW06IEV2ZW50TWVldGluZ0RldGFpbEl0ZW1cclxuKTogTWVldGluZ1JvdyB7XHJcbiAgY29uc3Qgc3RhdHVzID0gaXRlbT8uc3RhdHVzID8/ICcnO1xyXG4gIC8vIEEgbWVldGluZyBpcyBcIm9wZW4gZm9yIGF0dGVuZGFuY2VcIiB3aGlsZSBpdCBpcyBJbiBQcm9ncmVzcy4gVGhlXHJcbiAgLy8gbWVldGluZ3NEZXRhaWxzIGVuZHBvaW50IGhhcyBubyBkZWRpY2F0ZWQgZmxhZywgc28gZGVyaXZlIGl0IGZyb20gc3RhdHVzXHJcbiAgLy8gKGhvbm91cmluZyBhbiBleHBsaWNpdCBiYWNrZW5kIGZsYWcgd2hlbiBvbmUgaXMgcHJvdmlkZWQpLlxyXG4gIGNvbnN0IGlzT3BlbkZvckF0dGVuZGFuY2UgPVxyXG4gICAgaXRlbT8uaXNPcGVuRm9yQXR0ZW5kYW5jZSA/PyBzdGF0dXMudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09ICdpbiBwcm9ncmVzcyc7XHJcbiAgcmV0dXJuIHtcclxuICAgIG1lZXRpbmdJZDogaXRlbT8ubWVldGluZ0lkID8/ICcnLFxyXG4gICAgbWVldGluZ05hbWU6IGl0ZW0/Lm1lZXRpbmdUaXRsZSA/PyAnJyxcclxuICAgIGdyb3VwT3JDb21taXR0ZWU6IGl0ZW0/Lmdyb3VwTmFtZSA/PyAnJyxcclxuICAgIHJvb21PckxvY2F0aW9uOiBpdGVtPy5tZWV0aW5nTG9jYXRpb24gPz8gJycsXHJcbiAgICBzdGFydERhdGVUaW1lOiBpdGVtPy5tZWV0aW5nU3REYXRlLFxyXG4gICAgZW5kRGF0ZVRpbWU6IGl0ZW0/Lm1lZXRpbmdFZERhdGUsXHJcbiAgICB0aW1lem9uZTogaXRlbT8udGltZVpvbmUgPz8gJycsXHJcbiAgICBzdGF0dXMsXHJcbiAgICBpc01lbWJlck9mR3JvdXA6IGl0ZW0/LmlzTWVtYmVyT2ZHcm91cCA/PyBmYWxzZSxcclxuICAgIGlzT3BlbkZvckF0dGVuZGFuY2UsXHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIE1hcHMgYSByYXcgYmFja2VuZCBsaXN0IG9mIGNoaWxkLW1lZXRpbmcgZGV0YWlsIGl0ZW1zIHRvIHtAbGluayBNZWV0aW5nUm93fVxyXG4gKiB2aWV3IG1vZGVscy5cclxuICogQHBhcmFtIHtFdmVudE1lZXRpbmdEZXRhaWxJdGVtW119IGl0ZW1zIC0gVGhlIHJhdyBjaGlsZC1tZWV0aW5nIGl0ZW1zLlxyXG4gKiBAcmV0dXJuIHtNZWV0aW5nUm93W119IFRoZSBtYXBwZWQgbWVldGluZyByb3dzLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG1hcEV2ZW50TWVldGluZ0RldGFpbHMoXHJcbiAgaXRlbXM6IEV2ZW50TWVldGluZ0RldGFpbEl0ZW1bXVxyXG4pOiBNZWV0aW5nUm93W10ge1xyXG4gIHJldHVybiAoaXRlbXMgPz8gW10pLm1hcCgoaXRlbSkgPT4gbWFwRGV0YWlsSXRlbVRvTWVldGluZ1JvdyhpdGVtKSk7XHJcbn1cclxuIl19
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtbWVldGluZy1tYXBwZXIudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rhc2hib2FyZC9zcmMvbGliL3V0aWxzL2V2ZW50LW1lZXRpbmctbWFwcGVyLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFDSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFNbkUsT0FBTyxFQUVMLGdCQUFnQixHQUNqQixNQUFNLGdDQUFnQyxDQUFDO0FBRXhDOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQzdCLElBQTBCO0lBRTFCLE1BQU0sT0FBTyxHQUFHLElBQUksRUFBRSxjQUFjLEtBQUssSUFBSSxJQUFJLElBQUksRUFBRSxXQUFXLEtBQUssSUFBSSxDQUFDO0lBQzVFLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDO0FBQ2hGLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQixDQUN4QyxJQUEwQjtJQUUxQixNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxLQUFLLGdCQUFnQixDQUFDLEtBQUssQ0FBQztJQUNoRCxPQUFPO1FBQ0wsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRTtRQUN2QixJQUFJO1FBQ0osS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksRUFBRTtRQUN2QixNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sSUFBSSxFQUFFO1FBQzFCLHdFQUF3RTtRQUN4RSwyQ0FBMkM7UUFDM0MsWUFBWSxFQUFFLEVBQUU7UUFDaEIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLGlCQUFpQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RCxzQkFBc0IsRUFBRSxPQUFPO1lBQzdCLENBQUMsQ0FBQyxJQUFJLEVBQUUsOEJBQThCLElBQUksQ0FBQztZQUMzQyxDQUFDLENBQUMsQ0FBQztRQUNMLGFBQWEsRUFBRSxJQUFJLEVBQUUsYUFBYTtRQUNsQyxXQUFXLEVBQUUsSUFBSSxFQUFFLFdBQVc7UUFDOUIsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLElBQUksRUFBRTtRQUM5QixnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsU0FBUyxJQUFJLElBQUksRUFBRSxZQUFZLElBQUksRUFBRTtRQUM3RCxjQUFjLEVBQUUsSUFBSSxFQUFFLGVBQWUsSUFBSSxFQUFFO1FBQzNDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLGVBQWU7UUFDNUQsUUFBUSxFQUFFLEVBQUU7S0FDYixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsS0FBNkI7SUFFN0IsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQzFCLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLEtBQUssQ0FDakQsQ0FBQztJQUNGLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQzlCLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLGtCQUFrQixDQUM5RCxDQUFDO0lBQ0YsT0FBTyxDQUFDLEdBQUcsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSx5QkFBeUIsQ0FDdkMsSUFBNEIsRUFDNUIsT0FBTyxHQUFHLEVBQUU7SUFFWixNQUFNLE1BQU0sR0FBRyxJQUFJLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUNsQyxNQUFNLGVBQWUsR0FDbkIsSUFBSSxFQUFFLGVBQWUsSUFBSSxlQUFlLENBQUMsYUFBYSxDQUFDO0lBQ3pELE9BQU87UUFDTCxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsSUFBSSxFQUFFO1FBQ2hDLE9BQU87UUFDUCxXQUFXLEVBQUUsSUFBSSxFQUFFLFlBQVksSUFBSSxFQUFFO1FBQ3JDLGdCQUFnQixFQUFFLElBQUksRUFBRSxTQUFTLElBQUksSUFBSSxFQUFFLFlBQVksSUFBSSxFQUFFO1FBQzdELGNBQWMsRUFBRSxJQUFJLEVBQUUsUUFBUSxJQUFJLEVBQUU7UUFDcEMsYUFBYSxFQUFFLElBQUksRUFBRSxhQUFhO1FBQ2xDLFdBQVcsRUFBRSxJQUFJLEVBQUUsYUFBYTtRQUNoQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsSUFBSSxFQUFFO1FBQzlCLE1BQU07UUFDTixlQUFlO1FBQ2YsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLGFBQWE7S0FDbkUsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLEtBQStCLEVBQy9CLE9BQU8sR0FBRyxFQUFFO0lBRVosT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNoQyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQ3pDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFB1cmUgbWFwcGVycyBjb252ZXJ0aW5nIHRoZSByYXcgXCJob21lXCIgZXZlbnRzLSYtbWVldGluZ3MgYmFja2VuZCBsaXN0L2RldGFpbFxyXG4gKiBpdGVtcyBpbnRvIHRoZSBkYXNoYm9hcmQgdmlldyBtb2RlbHMuIE5vIEFuZ3VsYXIgLyBzZXJ2aWNlIGRlcGVuZGVuY2llcyBzb1xyXG4gKiB0aGV5IGFyZSB0cml2aWFsbHkgdW5pdC10ZXN0YWJsZSBhbmQgc2hhcmVkIGJ5IHtAbGluayBEYXNoYm9hcmRTZXJ2aWNlfS5cclxuICpcclxuICogQmFja2VuZCBkYXRlcyBhcmUgSVNPLTg2MDEgc3RyaW5nczsgY2FsbGVycyBmb3JtYXQgdGhlbSB3aXRoIGx1eG9uIGF0IHJlbmRlclxyXG4gKiB0aW1lLiBUaGUgbGlzdCBtYXBwZXIgZW5mb3JjZXMgdGhlIGRhc2hib2FyZCBydWxlIHRoYXQgU1RBTkRBTE9ORV9NRUVUSU5HIHJvd3NcclxuICogYWx3YXlzIHNvcnQgTEFTVCB3aXRoaW4gdGhlIHNlY3Rpb24uXHJcbiAqL1xyXG5pbXBvcnQgeyBBdHRlbmRhbmNlU3RhdGUgfSBmcm9tICcuLi9tb2RlbHMvYXR0ZW5kYW5jZS1zdGF0ZS5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgRXZlbnRNZWV0aW5nRGV0YWlsSXRlbSxcclxuICBFdmVudE1lZXRpbmdMaXN0SXRlbSxcclxufSBmcm9tICcuLi9tb2RlbHMvZXZlbnQtbWVldGluZy1saXN0LWl0ZW0ubW9kZWwnO1xyXG5pbXBvcnQgeyBNZWV0aW5nUm93IH0gZnJvbSAnLi4vbW9kZWxzL21lZXRpbmctcm93Lm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBVcGNvbWluZ0V2ZW50LFxyXG4gIFVwY29taW5nSXRlbUtpbmQsXHJcbn0gZnJvbSAnLi4vbW9kZWxzL3VwY29taW5nLWV2ZW50Lm1vZGVsJztcclxuXHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSByYXcgbGlzdCBpdGVtIGlzIGFuIEVWRU5UIChvd25zIGNoaWxkIG1lZXRpbmdzKSBvciBhXHJcbiAqIFNUQU5EQUxPTkVfTUVFVElORywgdXNpbmcgdGhlIGJhY2tlbmQgYGlzTWVldGluZ0V2ZW50YCBkaXNjcmltaW5hdG9yIChmYWxsaW5nXHJcbiAqIGJhY2sgdG8gYGhhc0NoaWxkcmVuYCkuXHJcbiAqIEBwYXJhbSB7RXZlbnRNZWV0aW5nTGlzdEl0ZW19IGl0ZW0gLSBUaGUgcmF3IGxpc3QgaXRlbS5cclxuICogQHJldHVybiB7VXBjb21pbmdJdGVtS2luZH0gVGhlIHJlc29sdmVkIHJlbmRlciBraW5kLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVJdGVtS2luZChcclxuICBpdGVtOiBFdmVudE1lZXRpbmdMaXN0SXRlbVxyXG4pOiBVcGNvbWluZ0l0ZW1LaW5kIHtcclxuICBjb25zdCBpc0V2ZW50ID0gaXRlbT8uaXNNZWV0aW5nRXZlbnQgPT09IHRydWUgfHwgaXRlbT8uaGFzQ2hpbGRyZW4gPT09IHRydWU7XHJcbiAgcmV0dXJuIGlzRXZlbnQgPyBVcGNvbWluZ0l0ZW1LaW5kLkVWRU5UIDogVXBjb21pbmdJdGVtS2luZC5TVEFOREFMT05FX01FRVRJTkc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBNYXBzIGEgcmF3IGJhY2tlbmQgbGlzdCBpdGVtIHRvIHRoZSB7QGxpbmsgVXBjb21pbmdFdmVudH0gdmlldyBtb2RlbC4gRVZFTlRcclxuICogcm93cyBjYXJyeSB0aGVpciB0b3RhbCAvIG9wZW4tZm9yLWF0dGVuZGFuY2UgY291bnRzIGFuZCBzdGFydCB3aXRoIGFuIGVtcHR5XHJcbiAqIGBtZWV0aW5nc2AgYXJyYXkgKGNoaWxkIG1lZXRpbmdzIGFyZSBsYXppbHkgbG9hZGVkIG9uIGRyaWxsLWRvd24pO1xyXG4gKiBTVEFOREFMT05FX01FRVRJTkcgcm93cyBjYXJyeSB0aGVpciBvd24gZ3JvdXAvbG9jYXRpb24gKyBhdHRlbmRhbmNlIHN0YXRlLlxyXG4gKiBAcGFyYW0ge0V2ZW50TWVldGluZ0xpc3RJdGVtfSBpdGVtIC0gVGhlIHJhdyBsaXN0IGl0ZW0uXHJcbiAqIEByZXR1cm4ge1VwY29taW5nRXZlbnR9IFRoZSBtYXBwZWQgdmlldyBtb2RlbC5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBtYXBMaXN0SXRlbVRvVXBjb21pbmdFdmVudChcclxuICBpdGVtOiBFdmVudE1lZXRpbmdMaXN0SXRlbVxyXG4pOiBVcGNvbWluZ0V2ZW50IHtcclxuICBjb25zdCBraW5kID0gcmVzb2x2ZUl0ZW1LaW5kKGl0ZW0pO1xyXG4gIGNvbnN0IGlzRXZlbnQgPSBraW5kID09PSBVcGNvbWluZ0l0ZW1LaW5kLkVWRU5UO1xyXG4gIHJldHVybiB7XHJcbiAgICBldmVudElkOiBpdGVtPy5pZCA/PyAnJyxcclxuICAgIGtpbmQsXHJcbiAgICB0aXRsZTogaXRlbT8ubmFtZSA/PyAnJyxcclxuICAgIHN0YXR1czogaXRlbT8uc3RhdHVzID8/ICcnLFxyXG4gICAgLy8gVGhlIGxpc3QgZW5kcG9pbnQgaGFzIG5vIGRheSBpbmRpY2F0b3I7IGl0IGlzIHBvcHVsYXRlZCBvbiBkcmlsbC1kb3duXHJcbiAgICAvLyBmcm9tIHRoZSBldmVudCdzIGN1cnJlbnREYXkgLyB0b3RhbERheXMuXHJcbiAgICBkYXlJbmRpY2F0b3I6ICcnLFxyXG4gICAgbWVldGluZ0NvdW50OiBpc0V2ZW50ID8gaXRlbT8udG90YWxNZWV0aW5nQ291bnQgPz8gMCA6IDEsXHJcbiAgICBvcGVuRm9yQXR0ZW5kYW5jZUNvdW50OiBpc0V2ZW50XHJcbiAgICAgID8gaXRlbT8ubWVldGluZ3NPcGVuRm9yQXR0ZW5kYW5jZUNvdW50ID8/IDBcclxuICAgICAgOiAwLFxyXG4gICAgc3RhcnREYXRlVGltZTogaXRlbT8uc3RhcnREYXRlVGltZSxcclxuICAgIGVuZERhdGVUaW1lOiBpdGVtPy5lbmREYXRlVGltZSxcclxuICAgIHRpbWV6b25lOiBpdGVtPy50aW1lWm9uZSA/PyAnJyxcclxuICAgIGdyb3VwT3JDb21taXR0ZWU6IGl0ZW0/Lmdyb3VwTmFtZSA/PyBpdGVtPy5ncm91cEFjcm9ueW0gPz8gJycsXHJcbiAgICByb29tT3JMb2NhdGlvbjogaXRlbT8ubWVldGluZ0xvY2F0aW9uID8/ICcnLFxyXG4gICAgYXR0ZW5kYW5jZVN0YXRlOiBpc0V2ZW50ID8gdW5kZWZpbmVkIDogaXRlbT8uYXR0ZW5kYW5jZVN0YXRlLFxyXG4gICAgbWVldGluZ3M6IFtdLFxyXG4gIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBNYXBzIGEgcmF3IGJhY2tlbmQgY29tYmluZWQgbGlzdCBpbnRvIHRoZSBkYXNoYm9hcmQgdmlldyBtb2RlbHMsIGVuZm9yY2luZ1xyXG4gKiB0aGF0IFNUQU5EQUxPTkVfTUVFVElORyByb3dzIGFsd2F5cyBzb3J0IExBU1Qgd2hpbGUgcHJlc2VydmluZyB0aGUgYmFja2VuZCdzXHJcbiAqIHdpdGhpbi1ncm91cCBvcmRlcmluZyBmb3IgZWFjaCBwYXJ0aXRpb24gKHN0YWJsZSBzb3J0KS5cclxuICogQHBhcmFtIHtFdmVudE1lZXRpbmdMaXN0SXRlbVtdfSBpdGVtcyAtIFRoZSByYXcgbGlzdCBpdGVtcy5cclxuICogQHJldHVybiB7VXBjb21pbmdFdmVudFtdfSBUaGUgbWFwcGVkLCBzdGFuZGFsb25lLWxhc3Qgb3JkZXJlZCB2aWV3IG1vZGVscy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBtYXBFdmVudE1lZXRpbmdMaXN0KFxyXG4gIGl0ZW1zOiBFdmVudE1lZXRpbmdMaXN0SXRlbVtdXHJcbik6IFVwY29taW5nRXZlbnRbXSB7XHJcbiAgY29uc3QgbWFwcGVkID0gKGl0ZW1zID8/IFtdKS5tYXAoKGl0ZW0pID0+IG1hcExpc3RJdGVtVG9VcGNvbWluZ0V2ZW50KGl0ZW0pKTtcclxuICBjb25zdCBldmVudHMgPSBtYXBwZWQuZmlsdGVyKFxyXG4gICAgKGVudHJ5KSA9PiBlbnRyeS5raW5kID09PSBVcGNvbWluZ0l0ZW1LaW5kLkVWRU5UXHJcbiAgKTtcclxuICBjb25zdCBzdGFuZGFsb25lID0gbWFwcGVkLmZpbHRlcihcclxuICAgIChlbnRyeSkgPT4gZW50cnkua2luZCA9PT0gVXBjb21pbmdJdGVtS2luZC5TVEFOREFMT05FX01FRVRJTkdcclxuICApO1xyXG4gIHJldHVybiBbLi4uZXZlbnRzLCAuLi5zdGFuZGFsb25lXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIE1hcHMgYSByYXcgYmFja2VuZCBkcmlsbC1kb3duIG1lZXRpbmcgaXRlbSB0byB0aGUge0BsaW5rIE1lZXRpbmdSb3d9IHZpZXdcclxuICogbW9kZWwgdXNlZCBieSB0aGUgZXZlbnQgYmxvY2sncyBleHBhbmRlZCBtZWV0aW5nIGxpc3QuXHJcbiAqIEBwYXJhbSB7RXZlbnRNZWV0aW5nRGV0YWlsSXRlbX0gaXRlbSAtIFRoZSByYXcgY2hpbGQtbWVldGluZyBpdGVtLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW2V2ZW50SWRdIC0gVGhlIG93bmluZyBldmVudCBpZCAoZm9yIG5hdmlnYXRpb24pLlxyXG4gKiBAcmV0dXJuIHtNZWV0aW5nUm93fSBUaGUgbWFwcGVkIG1lZXRpbmcgcm93LlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG1hcERldGFpbEl0ZW1Ub01lZXRpbmdSb3coXHJcbiAgaXRlbTogRXZlbnRNZWV0aW5nRGV0YWlsSXRlbSxcclxuICBldmVudElkID0gJydcclxuKTogTWVldGluZ1JvdyB7XHJcbiAgY29uc3Qgc3RhdHVzID0gaXRlbT8uc3RhdHVzID8/ICcnO1xyXG4gIGNvbnN0IGF0dGVuZGFuY2VTdGF0ZSA9XHJcbiAgICBpdGVtPy5hdHRlbmRhbmNlU3RhdGUgPz8gQXR0ZW5kYW5jZVN0YXRlLk5PVF9BVFRFTkRJTkc7XHJcbiAgcmV0dXJuIHtcclxuICAgIG1lZXRpbmdJZDogaXRlbT8ubWVldGluZ0lkID8/ICcnLFxyXG4gICAgZXZlbnRJZCxcclxuICAgIG1lZXRpbmdOYW1lOiBpdGVtPy5tZWV0aW5nVGl0bGUgPz8gJycsXHJcbiAgICBncm91cE9yQ29tbWl0dGVlOiBpdGVtPy5ncm91cE5hbWUgPz8gaXRlbT8uZ3JvdXBBY3JvbnltID8/ICcnLFxyXG4gICAgcm9vbU9yTG9jYXRpb246IGl0ZW0/LmxvY2F0aW9uID8/ICcnLFxyXG4gICAgc3RhcnREYXRlVGltZTogaXRlbT8ubWVldGluZ1N0RGF0ZSxcclxuICAgIGVuZERhdGVUaW1lOiBpdGVtPy5tZWV0aW5nRWREYXRlLFxyXG4gICAgdGltZXpvbmU6IGl0ZW0/LnRpbWVab25lID8/ICcnLFxyXG4gICAgc3RhdHVzLFxyXG4gICAgYXR0ZW5kYW5jZVN0YXRlLFxyXG4gICAgaXNPcGVuRm9yQXR0ZW5kYW5jZTogc3RhdHVzLnRyaW0oKS50b0xvd2VyQ2FzZSgpID09PSAnaW4gcHJvZ3Jlc3MnLFxyXG4gIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBNYXBzIGEgcmF3IGJhY2tlbmQgZHJpbGwtZG93biBtZWV0aW5nIGxpc3QgdG8ge0BsaW5rIE1lZXRpbmdSb3d9IHZpZXcgbW9kZWxzLFxyXG4gKiB0YWdnaW5nIGVhY2ggd2l0aCBpdHMgb3duaW5nIGV2ZW50IGlkIGZvciBuYXZpZ2F0aW9uLlxyXG4gKiBAcGFyYW0ge0V2ZW50TWVldGluZ0RldGFpbEl0ZW1bXX0gaXRlbXMgLSBUaGUgcmF3IGNoaWxkLW1lZXRpbmcgaXRlbXMuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZXZlbnRJZF0gLSBUaGUgb3duaW5nIGV2ZW50IGlkLlxyXG4gKiBAcmV0dXJuIHtNZWV0aW5nUm93W119IFRoZSBtYXBwZWQgbWVldGluZyByb3dzLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG1hcEV2ZW50TWVldGluZ0RldGFpbHMoXHJcbiAgaXRlbXM6IEV2ZW50TWVldGluZ0RldGFpbEl0ZW1bXSxcclxuICBldmVudElkID0gJydcclxuKTogTWVldGluZ1Jvd1tdIHtcclxuICByZXR1cm4gKGl0ZW1zID8/IFtdKS5tYXAoKGl0ZW0pID0+XHJcbiAgICBtYXBEZXRhaWxJdGVtVG9NZWV0aW5nUm93KGl0ZW0sIGV2ZW50SWQpXHJcbiAgKTtcclxufVxyXG4iXX0=
|