@vendasta/meetings 0.73.1 → 0.74.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/_generated/host.service.mjs +25 -0
- package/esm2020/lib/_internal/enums/dayofweek.enum.mjs +18 -0
- package/esm2020/lib/_internal/enums/index.mjs +11 -0
- package/esm2020/lib/_internal/enums/meeting-source.enum.mjs +20 -0
- package/esm2020/lib/_internal/enums/shared.enum.mjs +21 -0
- package/{esm2015/lib/_internal/enums/zoom.enum.js → esm2020/lib/_internal/enums/zoom.enum.mjs} +1 -1
- package/esm2020/lib/_internal/google-meet.api.service.mjs +41 -0
- package/esm2020/lib/_internal/index.mjs +15 -0
- package/esm2020/lib/_internal/interfaces/date-range.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/datetime.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/dayofweek.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/field-mask.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/google-meet.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/index.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/meeting-guest.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/meeting-host.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/meeting-source.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/meeting-type.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/shared.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/timeofday.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/zoom.interface.mjs +8 -0
- package/esm2020/lib/_internal/meeting-guest.api.service.mjs +84 -0
- package/esm2020/lib/_internal/meeting-host.api.service.mjs +170 -0
- package/esm2020/lib/_internal/meeting-source-api.api.service.mjs +41 -0
- package/esm2020/lib/_internal/objects/date-range.mjs +36 -0
- package/esm2020/lib/_internal/objects/datetime.mjs +77 -0
- package/esm2020/lib/_internal/objects/dayofweek.mjs +7 -0
- package/esm2020/lib/_internal/objects/field-mask.mjs +27 -0
- package/esm2020/lib/_internal/objects/google-meet.mjs +539 -0
- package/esm2020/lib/_internal/objects/index.mjs +18 -0
- package/esm2020/lib/_internal/objects/meeting-guest.mjs +511 -0
- package/esm2020/lib/_internal/objects/meeting-host.mjs +1485 -0
- package/esm2020/lib/_internal/objects/meeting-source.mjs +121 -0
- package/esm2020/lib/_internal/objects/meeting-type.mjs +119 -0
- package/esm2020/lib/_internal/objects/shared.mjs +426 -0
- package/esm2020/lib/_internal/objects/timeofday.mjs +36 -0
- package/esm2020/lib/_internal/objects/zoom.mjs +377 -0
- package/esm2020/lib/_internal/zoom.api.service.mjs +41 -0
- package/esm2020/lib/guest/guest.service.mjs +86 -0
- package/esm2020/lib/guest/index.mjs +2 -0
- package/esm2020/lib/host/host.service.mjs +308 -0
- package/esm2020/lib/host/url.mjs +39 -0
- package/esm2020/lib/index.mjs +8 -0
- package/esm2020/lib/meetings.service.mjs +168 -0
- package/esm2020/lib/shared/availability.mjs +2 -0
- package/esm2020/lib/shared/calendar.mjs +29 -0
- package/esm2020/lib/shared/duration.mjs +41 -0
- package/esm2020/lib/shared/environment.mjs +17 -0
- package/esm2020/lib/shared/fieldmask.mjs +6 -0
- package/esm2020/lib/shared/host-id.mjs +20 -0
- package/esm2020/lib/shared/host-url-map.mjs +2 -0
- package/esm2020/lib/shared/host-user.mjs +8 -0
- package/esm2020/lib/shared/host.mjs +8 -0
- package/esm2020/lib/shared/index.mjs +14 -0
- package/esm2020/lib/shared/meeting-type.mjs +60 -0
- package/esm2020/lib/shared/meeting.mjs +89 -0
- package/esm2020/lib/shared/paged-response.mjs +8 -0
- package/esm2020/lib/shared/preferences.mjs +12 -0
- package/esm2020/lib/shared/time-span.mjs +7 -0
- package/esm2020/public_api.mjs +2 -0
- package/esm2020/vendasta-meetings.mjs +5 -0
- package/fesm2015/{vendasta-meetings.js → vendasta-meetings.mjs} +487 -519
- package/fesm2015/vendasta-meetings.mjs.map +1 -0
- package/fesm2020/vendasta-meetings.mjs +5086 -0
- package/fesm2020/vendasta-meetings.mjs.map +1 -0
- package/lib/_generated/host.service.d.ts +5 -9
- package/lib/_internal/google-meet.api.service.d.ts +4 -0
- package/lib/_internal/meeting-guest.api.service.d.ts +4 -0
- package/lib/_internal/meeting-host.api.service.d.ts +4 -0
- package/lib/_internal/meeting-source-api.api.service.d.ts +4 -0
- package/lib/_internal/zoom.api.service.d.ts +4 -0
- package/lib/guest/guest.service.d.ts +4 -3
- package/lib/host/host.service.d.ts +4 -3
- package/lib/host/url.d.ts +1 -1
- package/lib/meetings.service.d.ts +3 -0
- package/lib/shared/environment.d.ts +8 -0
- package/lib/shared/meeting-type.d.ts +1 -1
- package/package.json +26 -15
- package/src/README.md +12 -0
- package/vendasta-meetings.d.ts +1 -0
- package/bundles/vendasta-meetings.umd.js +0 -5517
- package/bundles/vendasta-meetings.umd.js.map +0 -1
- package/bundles/vendasta-meetings.umd.min.js +0 -16
- package/bundles/vendasta-meetings.umd.min.js.map +0 -1
- package/esm2015/lib/_generated/host.service.js +0 -65
- package/esm2015/lib/_internal/enums/dayofweek.enum.js +0 -18
- package/esm2015/lib/_internal/enums/index.js +0 -11
- package/esm2015/lib/_internal/enums/meeting-source.enum.js +0 -20
- package/esm2015/lib/_internal/enums/shared.enum.js +0 -21
- package/esm2015/lib/_internal/google-meet.api.service.js +0 -42
- package/esm2015/lib/_internal/index.js +0 -15
- package/esm2015/lib/_internal/interfaces/date-range.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/datetime.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/dayofweek.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/field-mask.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/google-meet.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/index.js +0 -2
- package/esm2015/lib/_internal/interfaces/meeting-guest.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/meeting-host.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/meeting-source.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/meeting-type.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/shared.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/timeofday.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/zoom.interface.js +0 -8
- package/esm2015/lib/_internal/meeting-guest.api.service.js +0 -85
- package/esm2015/lib/_internal/meeting-host.api.service.js +0 -171
- package/esm2015/lib/_internal/meeting-source-api.api.service.js +0 -42
- package/esm2015/lib/_internal/objects/date-range.js +0 -36
- package/esm2015/lib/_internal/objects/datetime.js +0 -77
- package/esm2015/lib/_internal/objects/dayofweek.js +0 -7
- package/esm2015/lib/_internal/objects/field-mask.js +0 -27
- package/esm2015/lib/_internal/objects/google-meet.js +0 -539
- package/esm2015/lib/_internal/objects/index.js +0 -18
- package/esm2015/lib/_internal/objects/meeting-guest.js +0 -511
- package/esm2015/lib/_internal/objects/meeting-host.js +0 -1485
- package/esm2015/lib/_internal/objects/meeting-source.js +0 -121
- package/esm2015/lib/_internal/objects/meeting-type.js +0 -119
- package/esm2015/lib/_internal/objects/shared.js +0 -426
- package/esm2015/lib/_internal/objects/timeofday.js +0 -36
- package/esm2015/lib/_internal/objects/zoom.js +0 -377
- package/esm2015/lib/_internal/zoom.api.service.js +0 -42
- package/esm2015/lib/guest/guest.service.js +0 -86
- package/esm2015/lib/guest/index.js +0 -2
- package/esm2015/lib/host/host.service.js +0 -287
- package/esm2015/lib/host/url.js +0 -39
- package/esm2015/lib/index.js +0 -8
- package/esm2015/lib/meetings.service.js +0 -170
- package/esm2015/lib/shared/availability.js +0 -2
- package/esm2015/lib/shared/calendar.js +0 -29
- package/esm2015/lib/shared/duration.js +0 -41
- package/esm2015/lib/shared/fieldmask.js +0 -6
- package/esm2015/lib/shared/host-id.js +0 -20
- package/esm2015/lib/shared/host-url-map.js +0 -2
- package/esm2015/lib/shared/host-user.js +0 -8
- package/esm2015/lib/shared/host.js +0 -8
- package/esm2015/lib/shared/index.js +0 -14
- package/esm2015/lib/shared/meeting-type.js +0 -52
- package/esm2015/lib/shared/meeting.js +0 -89
- package/esm2015/lib/shared/paged-response.js +0 -8
- package/esm2015/lib/shared/preferences.js +0 -12
- package/esm2015/lib/shared/time-span.js +0 -7
- package/esm2015/public_api.js +0 -2
- package/esm2015/vendasta-meetings.js +0 -5
- package/fesm2015/vendasta-meetings.js.map +0 -1
- package/vendasta-meetings.metadata.json +0 -1
|
@@ -1,539 +0,0 @@
|
|
|
1
|
-
export function enumStringToValue(enumRef, value) {
|
|
2
|
-
if (typeof value === 'number') {
|
|
3
|
-
return value;
|
|
4
|
-
}
|
|
5
|
-
return enumRef[value];
|
|
6
|
-
}
|
|
7
|
-
export class GoogleMeetConferenceData {
|
|
8
|
-
constructor(kwargs) {
|
|
9
|
-
if (!kwargs) {
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
Object.assign(this, kwargs);
|
|
13
|
-
}
|
|
14
|
-
static fromProto(proto) {
|
|
15
|
-
let m = new GoogleMeetConferenceData();
|
|
16
|
-
m = Object.assign(m, proto);
|
|
17
|
-
if (proto.conferenceSolution) {
|
|
18
|
-
m.conferenceSolution = GoogleMeetConferenceSolution.fromProto(proto.conferenceSolution);
|
|
19
|
-
}
|
|
20
|
-
if (proto.createRequest) {
|
|
21
|
-
m.createRequest = GoogleMeetCreateConferenceRequest.fromProto(proto.createRequest);
|
|
22
|
-
}
|
|
23
|
-
if (proto.entryPoints) {
|
|
24
|
-
m.entryPoints = proto.entryPoints.map(GoogleMeetEntryPoint.fromProto);
|
|
25
|
-
}
|
|
26
|
-
return m;
|
|
27
|
-
}
|
|
28
|
-
toApiJson() {
|
|
29
|
-
const toReturn = {};
|
|
30
|
-
if (typeof this.conferenceId !== 'undefined') {
|
|
31
|
-
toReturn['conferenceId'] = this.conferenceId;
|
|
32
|
-
}
|
|
33
|
-
if (typeof this.conferenceSolution !== 'undefined' && this.conferenceSolution !== null) {
|
|
34
|
-
toReturn['conferenceSolution'] = 'toApiJson' in this.conferenceSolution ? this.conferenceSolution.toApiJson() : this.conferenceSolution;
|
|
35
|
-
}
|
|
36
|
-
if (typeof this.createRequest !== 'undefined' && this.createRequest !== null) {
|
|
37
|
-
toReturn['createRequest'] = 'toApiJson' in this.createRequest ? this.createRequest.toApiJson() : this.createRequest;
|
|
38
|
-
}
|
|
39
|
-
if (typeof this.entryPoints !== 'undefined' && this.entryPoints !== null) {
|
|
40
|
-
toReturn['entryPoints'] = 'toApiJson' in this.entryPoints ? this.entryPoints.toApiJson() : this.entryPoints;
|
|
41
|
-
}
|
|
42
|
-
if (typeof this.notes !== 'undefined') {
|
|
43
|
-
toReturn['notes'] = this.notes;
|
|
44
|
-
}
|
|
45
|
-
if (typeof this.signature !== 'undefined') {
|
|
46
|
-
toReturn['signature'] = this.signature;
|
|
47
|
-
}
|
|
48
|
-
return toReturn;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
export class GoogleMeetConferenceRequestStatus {
|
|
52
|
-
constructor(kwargs) {
|
|
53
|
-
if (!kwargs) {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
Object.assign(this, kwargs);
|
|
57
|
-
}
|
|
58
|
-
static fromProto(proto) {
|
|
59
|
-
let m = new GoogleMeetConferenceRequestStatus();
|
|
60
|
-
m = Object.assign(m, proto);
|
|
61
|
-
return m;
|
|
62
|
-
}
|
|
63
|
-
toApiJson() {
|
|
64
|
-
const toReturn = {};
|
|
65
|
-
if (typeof this.statusCode !== 'undefined') {
|
|
66
|
-
toReturn['statusCode'] = this.statusCode;
|
|
67
|
-
}
|
|
68
|
-
return toReturn;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
export class GoogleMeetConferenceSolution {
|
|
72
|
-
constructor(kwargs) {
|
|
73
|
-
if (!kwargs) {
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
Object.assign(this, kwargs);
|
|
77
|
-
}
|
|
78
|
-
static fromProto(proto) {
|
|
79
|
-
let m = new GoogleMeetConferenceSolution();
|
|
80
|
-
m = Object.assign(m, proto);
|
|
81
|
-
if (proto.key) {
|
|
82
|
-
m.key = GoogleMeetConferenceSolutionKey.fromProto(proto.key);
|
|
83
|
-
}
|
|
84
|
-
return m;
|
|
85
|
-
}
|
|
86
|
-
toApiJson() {
|
|
87
|
-
const toReturn = {};
|
|
88
|
-
if (typeof this.iconUri !== 'undefined') {
|
|
89
|
-
toReturn['iconUri'] = this.iconUri;
|
|
90
|
-
}
|
|
91
|
-
if (typeof this.key !== 'undefined' && this.key !== null) {
|
|
92
|
-
toReturn['key'] = 'toApiJson' in this.key ? this.key.toApiJson() : this.key;
|
|
93
|
-
}
|
|
94
|
-
if (typeof this.name !== 'undefined') {
|
|
95
|
-
toReturn['name'] = this.name;
|
|
96
|
-
}
|
|
97
|
-
return toReturn;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
export class GoogleMeetConferenceSolutionKey {
|
|
101
|
-
constructor(kwargs) {
|
|
102
|
-
if (!kwargs) {
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
Object.assign(this, kwargs);
|
|
106
|
-
}
|
|
107
|
-
static fromProto(proto) {
|
|
108
|
-
let m = new GoogleMeetConferenceSolutionKey();
|
|
109
|
-
m = Object.assign(m, proto);
|
|
110
|
-
return m;
|
|
111
|
-
}
|
|
112
|
-
toApiJson() {
|
|
113
|
-
const toReturn = {};
|
|
114
|
-
if (typeof this.type !== 'undefined') {
|
|
115
|
-
toReturn['type'] = this.type;
|
|
116
|
-
}
|
|
117
|
-
return toReturn;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
export class GoogleMeetCreateConferenceRequest {
|
|
121
|
-
constructor(kwargs) {
|
|
122
|
-
if (!kwargs) {
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
Object.assign(this, kwargs);
|
|
126
|
-
}
|
|
127
|
-
static fromProto(proto) {
|
|
128
|
-
let m = new GoogleMeetCreateConferenceRequest();
|
|
129
|
-
m = Object.assign(m, proto);
|
|
130
|
-
if (proto.conferenceSolutionKey) {
|
|
131
|
-
m.conferenceSolutionKey = GoogleMeetConferenceSolutionKey.fromProto(proto.conferenceSolutionKey);
|
|
132
|
-
}
|
|
133
|
-
if (proto.status) {
|
|
134
|
-
m.status = GoogleMeetConferenceRequestStatus.fromProto(proto.status);
|
|
135
|
-
}
|
|
136
|
-
return m;
|
|
137
|
-
}
|
|
138
|
-
toApiJson() {
|
|
139
|
-
const toReturn = {};
|
|
140
|
-
if (typeof this.conferenceSolutionKey !== 'undefined' && this.conferenceSolutionKey !== null) {
|
|
141
|
-
toReturn['conferenceSolutionKey'] = 'toApiJson' in this.conferenceSolutionKey ? this.conferenceSolutionKey.toApiJson() : this.conferenceSolutionKey;
|
|
142
|
-
}
|
|
143
|
-
if (typeof this.requestId !== 'undefined') {
|
|
144
|
-
toReturn['requestId'] = this.requestId;
|
|
145
|
-
}
|
|
146
|
-
if (typeof this.status !== 'undefined' && this.status !== null) {
|
|
147
|
-
toReturn['status'] = 'toApiJson' in this.status ? this.status.toApiJson() : this.status;
|
|
148
|
-
}
|
|
149
|
-
return toReturn;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
export class GoogleMeetCreateMeetingRequest {
|
|
153
|
-
constructor(kwargs) {
|
|
154
|
-
if (!kwargs) {
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
Object.assign(this, kwargs);
|
|
158
|
-
}
|
|
159
|
-
static fromProto(proto) {
|
|
160
|
-
let m = new GoogleMeetCreateMeetingRequest();
|
|
161
|
-
m = Object.assign(m, proto);
|
|
162
|
-
if (proto.meeting) {
|
|
163
|
-
m.meeting = GoogleMeetMeeting.fromProto(proto.meeting);
|
|
164
|
-
}
|
|
165
|
-
return m;
|
|
166
|
-
}
|
|
167
|
-
toApiJson() {
|
|
168
|
-
const toReturn = {};
|
|
169
|
-
if (typeof this.calenderId !== 'undefined') {
|
|
170
|
-
toReturn['calenderId'] = this.calenderId;
|
|
171
|
-
}
|
|
172
|
-
if (typeof this.meeting !== 'undefined' && this.meeting !== null) {
|
|
173
|
-
toReturn['meeting'] = 'toApiJson' in this.meeting ? this.meeting.toApiJson() : this.meeting;
|
|
174
|
-
}
|
|
175
|
-
return toReturn;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
export class GoogleMeetCreateMeetingResponse {
|
|
179
|
-
constructor(kwargs) {
|
|
180
|
-
if (!kwargs) {
|
|
181
|
-
return;
|
|
182
|
-
}
|
|
183
|
-
Object.assign(this, kwargs);
|
|
184
|
-
}
|
|
185
|
-
static fromProto(proto) {
|
|
186
|
-
let m = new GoogleMeetCreateMeetingResponse();
|
|
187
|
-
m = Object.assign(m, proto);
|
|
188
|
-
if (proto.meeting) {
|
|
189
|
-
m.meeting = GoogleMeetMeeting.fromProto(proto.meeting);
|
|
190
|
-
}
|
|
191
|
-
return m;
|
|
192
|
-
}
|
|
193
|
-
toApiJson() {
|
|
194
|
-
const toReturn = {};
|
|
195
|
-
if (typeof this.iamUserId !== 'undefined') {
|
|
196
|
-
toReturn['iamUserId'] = this.iamUserId;
|
|
197
|
-
}
|
|
198
|
-
if (typeof this.calenderId !== 'undefined') {
|
|
199
|
-
toReturn['calenderId'] = this.calenderId;
|
|
200
|
-
}
|
|
201
|
-
if (typeof this.meeting !== 'undefined' && this.meeting !== null) {
|
|
202
|
-
toReturn['meeting'] = 'toApiJson' in this.meeting ? this.meeting.toApiJson() : this.meeting;
|
|
203
|
-
}
|
|
204
|
-
return toReturn;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
export class GoogleMeetEntryPoint {
|
|
208
|
-
constructor(kwargs) {
|
|
209
|
-
if (!kwargs) {
|
|
210
|
-
return;
|
|
211
|
-
}
|
|
212
|
-
Object.assign(this, kwargs);
|
|
213
|
-
}
|
|
214
|
-
static fromProto(proto) {
|
|
215
|
-
let m = new GoogleMeetEntryPoint();
|
|
216
|
-
m = Object.assign(m, proto);
|
|
217
|
-
return m;
|
|
218
|
-
}
|
|
219
|
-
toApiJson() {
|
|
220
|
-
const toReturn = {};
|
|
221
|
-
if (typeof this.accessCode !== 'undefined') {
|
|
222
|
-
toReturn['accessCode'] = this.accessCode;
|
|
223
|
-
}
|
|
224
|
-
if (typeof this.entryPointFeatures !== 'undefined') {
|
|
225
|
-
toReturn['entryPointFeatures'] = this.entryPointFeatures;
|
|
226
|
-
}
|
|
227
|
-
if (typeof this.entryPointType !== 'undefined') {
|
|
228
|
-
toReturn['entryPointType'] = this.entryPointType;
|
|
229
|
-
}
|
|
230
|
-
if (typeof this.label !== 'undefined') {
|
|
231
|
-
toReturn['label'] = this.label;
|
|
232
|
-
}
|
|
233
|
-
if (typeof this.meetingCode !== 'undefined') {
|
|
234
|
-
toReturn['meetingCode'] = this.meetingCode;
|
|
235
|
-
}
|
|
236
|
-
if (typeof this.passcode !== 'undefined') {
|
|
237
|
-
toReturn['passcode'] = this.passcode;
|
|
238
|
-
}
|
|
239
|
-
if (typeof this.password !== 'undefined') {
|
|
240
|
-
toReturn['password'] = this.password;
|
|
241
|
-
}
|
|
242
|
-
if (typeof this.pin !== 'undefined') {
|
|
243
|
-
toReturn['pin'] = this.pin;
|
|
244
|
-
}
|
|
245
|
-
if (typeof this.regionCode !== 'undefined') {
|
|
246
|
-
toReturn['regionCode'] = this.regionCode;
|
|
247
|
-
}
|
|
248
|
-
if (typeof this.uri !== 'undefined') {
|
|
249
|
-
toReturn['uri'] = this.uri;
|
|
250
|
-
}
|
|
251
|
-
return toReturn;
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
export class GoogleMeetMeeting {
|
|
255
|
-
constructor(kwargs) {
|
|
256
|
-
if (!kwargs) {
|
|
257
|
-
return;
|
|
258
|
-
}
|
|
259
|
-
Object.assign(this, kwargs);
|
|
260
|
-
}
|
|
261
|
-
static fromProto(proto) {
|
|
262
|
-
let m = new GoogleMeetMeeting();
|
|
263
|
-
m = Object.assign(m, proto);
|
|
264
|
-
if (proto.attendees) {
|
|
265
|
-
m.attendees = proto.attendees.map(GoogleMeetMeetingAttendee.fromProto);
|
|
266
|
-
}
|
|
267
|
-
if (proto.conferenceData) {
|
|
268
|
-
m.conferenceData = GoogleMeetConferenceData.fromProto(proto.conferenceData);
|
|
269
|
-
}
|
|
270
|
-
if (proto.end) {
|
|
271
|
-
m.end = GoogleMeetMeetingDateTime.fromProto(proto.end);
|
|
272
|
-
}
|
|
273
|
-
if (proto.originalStartTime) {
|
|
274
|
-
m.originalStartTime = GoogleMeetMeetingDateTime.fromProto(proto.originalStartTime);
|
|
275
|
-
}
|
|
276
|
-
if (proto.reminders) {
|
|
277
|
-
m.reminders = GoogleMeetMeetingReminders.fromProto(proto.reminders);
|
|
278
|
-
}
|
|
279
|
-
if (proto.sequence) {
|
|
280
|
-
m.sequence = parseInt(proto.sequence, 10);
|
|
281
|
-
}
|
|
282
|
-
if (proto.start) {
|
|
283
|
-
m.start = GoogleMeetMeetingDateTime.fromProto(proto.start);
|
|
284
|
-
}
|
|
285
|
-
if (proto.creator) {
|
|
286
|
-
m.creator = GoogleMeetMeetingCreator.fromProto(proto.creator);
|
|
287
|
-
}
|
|
288
|
-
return m;
|
|
289
|
-
}
|
|
290
|
-
toApiJson() {
|
|
291
|
-
const toReturn = {};
|
|
292
|
-
if (typeof this.anyoneCanAddSelf !== 'undefined') {
|
|
293
|
-
toReturn['anyoneCanAddSelf'] = this.anyoneCanAddSelf;
|
|
294
|
-
}
|
|
295
|
-
if (typeof this.attendees !== 'undefined' && this.attendees !== null) {
|
|
296
|
-
toReturn['attendees'] = 'toApiJson' in this.attendees ? this.attendees.toApiJson() : this.attendees;
|
|
297
|
-
}
|
|
298
|
-
if (typeof this.attendeesOmitted !== 'undefined') {
|
|
299
|
-
toReturn['attendeesOmitted'] = this.attendeesOmitted;
|
|
300
|
-
}
|
|
301
|
-
if (typeof this.colorId !== 'undefined') {
|
|
302
|
-
toReturn['colorId'] = this.colorId;
|
|
303
|
-
}
|
|
304
|
-
if (typeof this.conferenceData !== 'undefined' && this.conferenceData !== null) {
|
|
305
|
-
toReturn['conferenceData'] = 'toApiJson' in this.conferenceData ? this.conferenceData.toApiJson() : this.conferenceData;
|
|
306
|
-
}
|
|
307
|
-
if (typeof this.description !== 'undefined') {
|
|
308
|
-
toReturn['description'] = this.description;
|
|
309
|
-
}
|
|
310
|
-
if (typeof this.end !== 'undefined' && this.end !== null) {
|
|
311
|
-
toReturn['end'] = 'toApiJson' in this.end ? this.end.toApiJson() : this.end;
|
|
312
|
-
}
|
|
313
|
-
if (typeof this.endTimeUnspecified !== 'undefined') {
|
|
314
|
-
toReturn['endTimeUnspecified'] = this.endTimeUnspecified;
|
|
315
|
-
}
|
|
316
|
-
if (typeof this.etag !== 'undefined') {
|
|
317
|
-
toReturn['etag'] = this.etag;
|
|
318
|
-
}
|
|
319
|
-
if (typeof this.icalUid !== 'undefined') {
|
|
320
|
-
toReturn['icalUid'] = this.icalUid;
|
|
321
|
-
}
|
|
322
|
-
if (typeof this.id !== 'undefined') {
|
|
323
|
-
toReturn['id'] = this.id;
|
|
324
|
-
}
|
|
325
|
-
if (typeof this.kind !== 'undefined') {
|
|
326
|
-
toReturn['kind'] = this.kind;
|
|
327
|
-
}
|
|
328
|
-
if (typeof this.location !== 'undefined') {
|
|
329
|
-
toReturn['location'] = this.location;
|
|
330
|
-
}
|
|
331
|
-
if (typeof this.locked !== 'undefined') {
|
|
332
|
-
toReturn['locked'] = this.locked;
|
|
333
|
-
}
|
|
334
|
-
if (typeof this.originalStartTime !== 'undefined' && this.originalStartTime !== null) {
|
|
335
|
-
toReturn['originalStartTime'] = 'toApiJson' in this.originalStartTime ? this.originalStartTime.toApiJson() : this.originalStartTime;
|
|
336
|
-
}
|
|
337
|
-
if (typeof this.recurrence !== 'undefined') {
|
|
338
|
-
toReturn['recurrence'] = this.recurrence;
|
|
339
|
-
}
|
|
340
|
-
if (typeof this.recurringMeetingId !== 'undefined') {
|
|
341
|
-
toReturn['recurringMeetingId'] = this.recurringMeetingId;
|
|
342
|
-
}
|
|
343
|
-
if (typeof this.reminders !== 'undefined' && this.reminders !== null) {
|
|
344
|
-
toReturn['reminders'] = 'toApiJson' in this.reminders ? this.reminders.toApiJson() : this.reminders;
|
|
345
|
-
}
|
|
346
|
-
if (typeof this.sequence !== 'undefined') {
|
|
347
|
-
toReturn['sequence'] = this.sequence;
|
|
348
|
-
}
|
|
349
|
-
if (typeof this.start !== 'undefined' && this.start !== null) {
|
|
350
|
-
toReturn['start'] = 'toApiJson' in this.start ? this.start.toApiJson() : this.start;
|
|
351
|
-
}
|
|
352
|
-
if (typeof this.status !== 'undefined') {
|
|
353
|
-
toReturn['status'] = this.status;
|
|
354
|
-
}
|
|
355
|
-
if (typeof this.summary !== 'undefined') {
|
|
356
|
-
toReturn['summary'] = this.summary;
|
|
357
|
-
}
|
|
358
|
-
if (typeof this.transparency !== 'undefined') {
|
|
359
|
-
toReturn['transparency'] = this.transparency;
|
|
360
|
-
}
|
|
361
|
-
if (typeof this.visibility !== 'undefined') {
|
|
362
|
-
toReturn['visibility'] = this.visibility;
|
|
363
|
-
}
|
|
364
|
-
if (typeof this.hangoutLink !== 'undefined') {
|
|
365
|
-
toReturn['hangoutLink'] = this.hangoutLink;
|
|
366
|
-
}
|
|
367
|
-
if (typeof this.htmlLink !== 'undefined') {
|
|
368
|
-
toReturn['htmlLink'] = this.htmlLink;
|
|
369
|
-
}
|
|
370
|
-
if (typeof this.created !== 'undefined') {
|
|
371
|
-
toReturn['created'] = this.created;
|
|
372
|
-
}
|
|
373
|
-
if (typeof this.creator !== 'undefined' && this.creator !== null) {
|
|
374
|
-
toReturn['creator'] = 'toApiJson' in this.creator ? this.creator.toApiJson() : this.creator;
|
|
375
|
-
}
|
|
376
|
-
if (typeof this.updated !== 'undefined') {
|
|
377
|
-
toReturn['updated'] = this.updated;
|
|
378
|
-
}
|
|
379
|
-
return toReturn;
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
export class GoogleMeetMeetingAttendee {
|
|
383
|
-
constructor(kwargs) {
|
|
384
|
-
if (!kwargs) {
|
|
385
|
-
return;
|
|
386
|
-
}
|
|
387
|
-
Object.assign(this, kwargs);
|
|
388
|
-
}
|
|
389
|
-
static fromProto(proto) {
|
|
390
|
-
let m = new GoogleMeetMeetingAttendee();
|
|
391
|
-
m = Object.assign(m, proto);
|
|
392
|
-
if (proto.additionalGuests) {
|
|
393
|
-
m.additionalGuests = parseInt(proto.additionalGuests, 10);
|
|
394
|
-
}
|
|
395
|
-
return m;
|
|
396
|
-
}
|
|
397
|
-
toApiJson() {
|
|
398
|
-
const toReturn = {};
|
|
399
|
-
if (typeof this.additionalGuests !== 'undefined') {
|
|
400
|
-
toReturn['additionalGuests'] = this.additionalGuests;
|
|
401
|
-
}
|
|
402
|
-
if (typeof this.comment !== 'undefined') {
|
|
403
|
-
toReturn['comment'] = this.comment;
|
|
404
|
-
}
|
|
405
|
-
if (typeof this.displayName !== 'undefined') {
|
|
406
|
-
toReturn['displayName'] = this.displayName;
|
|
407
|
-
}
|
|
408
|
-
if (typeof this.email !== 'undefined') {
|
|
409
|
-
toReturn['email'] = this.email;
|
|
410
|
-
}
|
|
411
|
-
if (typeof this.id !== 'undefined') {
|
|
412
|
-
toReturn['id'] = this.id;
|
|
413
|
-
}
|
|
414
|
-
if (typeof this.optional !== 'undefined') {
|
|
415
|
-
toReturn['optional'] = this.optional;
|
|
416
|
-
}
|
|
417
|
-
if (typeof this.organizer !== 'undefined') {
|
|
418
|
-
toReturn['organizer'] = this.organizer;
|
|
419
|
-
}
|
|
420
|
-
if (typeof this.resource !== 'undefined') {
|
|
421
|
-
toReturn['resource'] = this.resource;
|
|
422
|
-
}
|
|
423
|
-
if (typeof this.responseStatus !== 'undefined') {
|
|
424
|
-
toReturn['responseStatus'] = this.responseStatus;
|
|
425
|
-
}
|
|
426
|
-
if (typeof this.self !== 'undefined') {
|
|
427
|
-
toReturn['self'] = this.self;
|
|
428
|
-
}
|
|
429
|
-
return toReturn;
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
export class GoogleMeetMeetingCreator {
|
|
433
|
-
constructor(kwargs) {
|
|
434
|
-
if (!kwargs) {
|
|
435
|
-
return;
|
|
436
|
-
}
|
|
437
|
-
Object.assign(this, kwargs);
|
|
438
|
-
}
|
|
439
|
-
static fromProto(proto) {
|
|
440
|
-
let m = new GoogleMeetMeetingCreator();
|
|
441
|
-
m = Object.assign(m, proto);
|
|
442
|
-
return m;
|
|
443
|
-
}
|
|
444
|
-
toApiJson() {
|
|
445
|
-
const toReturn = {};
|
|
446
|
-
if (typeof this.displayName !== 'undefined') {
|
|
447
|
-
toReturn['displayName'] = this.displayName;
|
|
448
|
-
}
|
|
449
|
-
if (typeof this.email !== 'undefined') {
|
|
450
|
-
toReturn['email'] = this.email;
|
|
451
|
-
}
|
|
452
|
-
if (typeof this.id !== 'undefined') {
|
|
453
|
-
toReturn['id'] = this.id;
|
|
454
|
-
}
|
|
455
|
-
if (typeof this.self !== 'undefined') {
|
|
456
|
-
toReturn['self'] = this.self;
|
|
457
|
-
}
|
|
458
|
-
return toReturn;
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
export class GoogleMeetMeetingDateTime {
|
|
462
|
-
constructor(kwargs) {
|
|
463
|
-
if (!kwargs) {
|
|
464
|
-
return;
|
|
465
|
-
}
|
|
466
|
-
Object.assign(this, kwargs);
|
|
467
|
-
}
|
|
468
|
-
static fromProto(proto) {
|
|
469
|
-
let m = new GoogleMeetMeetingDateTime();
|
|
470
|
-
m = Object.assign(m, proto);
|
|
471
|
-
return m;
|
|
472
|
-
}
|
|
473
|
-
toApiJson() {
|
|
474
|
-
const toReturn = {};
|
|
475
|
-
if (typeof this.date !== 'undefined') {
|
|
476
|
-
toReturn['date'] = this.date;
|
|
477
|
-
}
|
|
478
|
-
if (typeof this.dateTime !== 'undefined') {
|
|
479
|
-
toReturn['dateTime'] = this.dateTime;
|
|
480
|
-
}
|
|
481
|
-
if (typeof this.timeZone !== 'undefined') {
|
|
482
|
-
toReturn['timeZone'] = this.timeZone;
|
|
483
|
-
}
|
|
484
|
-
return toReturn;
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
|
-
export class GoogleMeetMeetingReminder {
|
|
488
|
-
constructor(kwargs) {
|
|
489
|
-
if (!kwargs) {
|
|
490
|
-
return;
|
|
491
|
-
}
|
|
492
|
-
Object.assign(this, kwargs);
|
|
493
|
-
}
|
|
494
|
-
static fromProto(proto) {
|
|
495
|
-
let m = new GoogleMeetMeetingReminder();
|
|
496
|
-
m = Object.assign(m, proto);
|
|
497
|
-
if (proto.minutes) {
|
|
498
|
-
m.minutes = parseInt(proto.minutes, 10);
|
|
499
|
-
}
|
|
500
|
-
return m;
|
|
501
|
-
}
|
|
502
|
-
toApiJson() {
|
|
503
|
-
const toReturn = {};
|
|
504
|
-
if (typeof this.method !== 'undefined') {
|
|
505
|
-
toReturn['method'] = this.method;
|
|
506
|
-
}
|
|
507
|
-
if (typeof this.minutes !== 'undefined') {
|
|
508
|
-
toReturn['minutes'] = this.minutes;
|
|
509
|
-
}
|
|
510
|
-
return toReturn;
|
|
511
|
-
}
|
|
512
|
-
}
|
|
513
|
-
export class GoogleMeetMeetingReminders {
|
|
514
|
-
constructor(kwargs) {
|
|
515
|
-
if (!kwargs) {
|
|
516
|
-
return;
|
|
517
|
-
}
|
|
518
|
-
Object.assign(this, kwargs);
|
|
519
|
-
}
|
|
520
|
-
static fromProto(proto) {
|
|
521
|
-
let m = new GoogleMeetMeetingReminders();
|
|
522
|
-
m = Object.assign(m, proto);
|
|
523
|
-
if (proto.overrides) {
|
|
524
|
-
m.overrides = proto.overrides.map(GoogleMeetMeetingReminder.fromProto);
|
|
525
|
-
}
|
|
526
|
-
return m;
|
|
527
|
-
}
|
|
528
|
-
toApiJson() {
|
|
529
|
-
const toReturn = {};
|
|
530
|
-
if (typeof this.overrides !== 'undefined' && this.overrides !== null) {
|
|
531
|
-
toReturn['overrides'] = 'toApiJson' in this.overrides ? this.overrides.toApiJson() : this.overrides;
|
|
532
|
-
}
|
|
533
|
-
if (typeof this.useDefault !== 'undefined') {
|
|
534
|
-
toReturn['useDefault'] = this.useDefault;
|
|
535
|
-
}
|
|
536
|
-
return toReturn;
|
|
537
|
-
}
|
|
538
|
-
}
|
|
539
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1lZXQuanMiLCJzb3VyY2VSb290IjoiL2NvZGVmcmVzaC92b2x1bWUvbWVldGluZ3Mvc2Rrcy90eXBlc2NyaXB0L3NyYy9tZWV0aW5nc19zZGsvc3JjLyIsInNvdXJjZXMiOlsibGliL19pbnRlcm5hbC9vYmplY3RzL2dvb2dsZS1tZWV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVVBLE1BQU0sVUFBVSxpQkFBaUIsQ0FBSSxPQUFZLEVBQUUsS0FBYTtJQUM5RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUM3QixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQUVELE1BQU0sT0FBTyx3QkFBd0I7SUFpQmpDLFlBQVksTUFBNEM7UUFDcEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFkRCxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO1FBQ3ZDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxrQkFBa0IsRUFBRTtZQUFDLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyw0QkFBNEIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7U0FBQztRQUN4SCxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFBQyxDQUFDLENBQUMsYUFBYSxHQUFHLGlDQUFpQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7U0FBQztRQUM5RyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUU7WUFBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEtBQUss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QUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFO1lBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUFDO1FBQzlGLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQVNELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxTQUFpQixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQUM7UUFDckwsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUN2RixPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHNka2dlblxuLy8gRE8gTk9UIEVESVQhLlxuLy9cbi8vIE9iamVjdHMuXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbmltcG9ydCAqIGFzIGkgZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmltcG9ydCAqIGFzIGUgZnJvbSAnLi4vZW51bXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZW51bVN0cmluZ1RvVmFsdWU8RT4oZW51bVJlZjogYW55LCB2YWx1ZTogc3RyaW5nKTogRSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBlbnVtUmVmW3ZhbHVlXTtcbn1cblxuZXhwb3J0IGNsYXNzIEdvb2dsZU1lZXRDb25mZXJlbmNlRGF0YSBpbXBsZW1lbnRzIGkuR29vZ2xlTWVldENvbmZlcmVuY2VEYXRhSW50ZXJmYWNlIHtcbiAgICBjb25mZXJlbmNlSWQ6IHN0cmluZztcbiAgICBjb25mZXJlbmNlU29sdXRpb246IEdvb2dsZU1lZXRDb25mZXJlbmNlU29sdXRpb247XG4gICAgY3JlYXRlUmVxdWVzdDogR29vZ2xlTWVldENyZWF0ZUNvbmZlcmVuY2VSZXF1ZXN0O1xuICAgIGVudHJ5UG9pbnRzOiBHb29nbGVNZWV0RW50cnlQb2ludFtdO1xuICAgIG5vdGVzOiBzdHJpbmc7XG4gICAgc2lnbmF0dXJlOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHb29nbGVNZWV0Q29uZmVyZW5jZURhdGEge1xuICAgICAgICBsZXQgbSA9IG5ldyBHb29nbGVNZWV0Q29uZmVyZW5jZURhdGEoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY29uZmVyZW5jZVNvbHV0aW9uKSB7bS5jb25mZXJlbmNlU29sdXRpb24gPSBHb29nbGVNZWV0Q29uZmVyZW5jZVNvbHV0aW9uLmZyb21Qcm90byhwcm90by5jb25mZXJlbmNlU29sdXRpb24pO31cbiAgICAgICAgaWYgKHByb3RvLmNyZWF0ZVJlcXVlc3QpIHttLmNyZWF0ZVJlcXVlc3QgPSBHb29nbGVNZWV0Q3JlYXRlQ29uZmVyZW5jZVJlcXVlc3QuZnJvbVByb3RvKHByb3RvLmNyZWF0ZVJlcXVlc3QpO31cbiAgICAgICAgaWYgKHByb3RvLmVudHJ5UG9pbnRzKSB7bS5lbnRyeVBvaW50cyA9IHByb3RvLmVudHJ5UG9pbnRzLm1hcChHb29nbGVNZWV0RW50cnlQb2ludC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Hb29nbGVNZWV0Q29uZmVyZW5jZURhdGFJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb25mZXJlbmNlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbmZlcmVuY2VJZCddID0gdGhpcy5jb25mZXJlbmNlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29uZmVyZW5jZVNvbHV0aW9uICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNvbmZlcmVuY2VTb2x1dGlvbiAhPT0gbnVsbCkge3RvUmV0dXJuWydjb25mZXJlbmNlU29sdXRpb24nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY29uZmVyZW5jZVNvbHV0aW9uID8gKHRoaXMuY29uZmVyZW5jZVNvbHV0aW9uIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNvbmZlcmVuY2VTb2x1dGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jcmVhdGVSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNyZWF0ZVJlcXVlc3QgIT09IG51bGwpIHt0b1JldHVyblsnY3JlYXRlUmVxdWVzdCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jcmVhdGVSZXF1ZXN0ID8gKHRoaXMuY3JlYXRlUmVxdWVzdCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jcmVhdGVSZXF1ZXN0O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVudHJ5UG9pbnRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmVudHJ5UG9pbnRzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2VudHJ5UG9pbnRzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmVudHJ5UG9pbnRzID8gKHRoaXMuZW50cnlQb2ludHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZW50cnlQb2ludHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubm90ZXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25vdGVzJ10gPSB0aGlzLm5vdGVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNpZ25hdHVyZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2lnbmF0dXJlJ10gPSB0aGlzLnNpZ25hdHVyZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHb29nbGVNZWV0Q29uZmVyZW5jZVJlcXVlc3RTdGF0dXMgaW1wbGVtZW50cyBpLkdvb2dsZU1lZXRDb25mZXJlbmNlUmVxdWVzdFN0YXR1c0ludGVyZmFjZSB7XG4gICAgc3RhdHVzQ29kZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR29vZ2xlTWVldENvbmZlcmVuY2VSZXF1ZXN0U3RhdHVzIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR29vZ2xlTWVldENvbmZlcmVuY2VSZXF1ZXN0U3RhdHVzKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Hb29nbGVNZWV0Q29uZmVyZW5jZVJlcXVlc3RTdGF0dXNJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGF0dXNDb2RlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdGF0dXNDb2RlJ10gPSB0aGlzLnN0YXR1c0NvZGU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR29vZ2xlTWVldENvbmZlcmVuY2VTb2x1dGlvbiBpbXBsZW1lbnRzIGkuR29vZ2xlTWVldENvbmZlcmVuY2VTb2x1dGlvbkludGVyZmFjZSB7XG4gICAgaWNvblVyaTogc3RyaW5nO1xuICAgIGtleTogR29vZ2xlTWVldENvbmZlcmVuY2VTb2x1dGlvbktleTtcbiAgICBuYW1lOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHb29nbGVNZWV0Q29uZmVyZW5jZVNvbHV0aW9uIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR29vZ2xlTWVldENvbmZlcmVuY2VTb2x1dGlvbigpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5rZXkpIHttLmtleSA9IEdvb2dsZU1lZXRDb25mZXJlbmNlU29sdXRpb25LZXkuZnJvbVByb3RvKHByb3RvLmtleSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdvb2dsZU1lZXRDb25mZXJlbmNlU29sdXRpb25JbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pY29uVXJpICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpY29uVXJpJ10gPSB0aGlzLmljb25Vcmk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMua2V5ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmtleSAhPT0gbnVsbCkge3RvUmV0dXJuWydrZXknXSA9ICd0b0FwaUpzb24nIGluIHRoaXMua2V5ID8gKHRoaXMua2V5IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmtleTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5uYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyduYW1lJ10gPSB0aGlzLm5hbWU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR29vZ2xlTWVldENvbmZlcmVuY2VTb2x1dGlvbktleSBpbXBsZW1lbnRzIGkuR29vZ2xlTWVldENvbmZlcmVuY2VTb2x1dGlvbktleUludGVyZmFjZSB7XG4gICAgdHlwZTogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR29vZ2xlTWVldENvbmZlcmVuY2VTb2x1dGlvbktleSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdvb2dsZU1lZXRDb25mZXJlbmNlU29sdXRpb25LZXkoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdvb2dsZU1lZXRDb25mZXJlbmNlU29sdXRpb25LZXlJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50eXBlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0eXBlJ10gPSB0aGlzLnR5cGU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR29vZ2xlTWVldENyZWF0ZUNvbmZlcmVuY2VSZXF1ZXN0IGltcGxlbWVudHMgaS5Hb29nbGVNZWV0Q3JlYXRlQ29uZmVyZW5jZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGNvbmZlcmVuY2VTb2x1dGlvbktleTogR29vZ2xlTWVldENvbmZlcmVuY2VTb2x1dGlvbktleTtcbiAgICByZXF1ZXN0SWQ6IHN0cmluZztcbiAgICBzdGF0dXM6IEdvb2dsZU1lZXRDb25mZXJlbmNlUmVxdWVzdFN0YXR1cztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdvb2dsZU1lZXRDcmVhdGVDb25mZXJlbmNlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdvb2dsZU1lZXRDcmVhdGVDb25mZXJlbmNlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5jb25mZXJlbmNlU29sdXRpb25LZXkpIHttLmNvbmZlcmVuY2VTb2x1dGlvbktleSA9IEdvb2dsZU1lZXRDb25mZXJlbmNlU29sdXRpb25LZXkuZnJvbVByb3RvKHByb3RvLmNvbmZlcmVuY2VTb2x1dGlvbktleSk7fVxuICAgICAgICBpZiAocHJvdG8uc3RhdHVzKSB7bS5zdGF0dXMgPSBHb29nbGVNZWV0Q29uZmVyZW5jZVJlcXVlc3RTdGF0dXMuZnJvbVByb3RvKHByb3RvLnN0YXR1cyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdvb2dsZU1lZXRDcmVhdGVDb25mZXJlbmNlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZlcmVuY2VTb2x1dGlvbktleSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jb25mZXJlbmNlU29sdXRpb25LZXkgIT09IG51bGwpIHt0b1JldHVyblsnY29uZmVyZW5jZVNvbHV0aW9uS2V5J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNvbmZlcmVuY2VTb2x1dGlvbktleSA/ICh0aGlzLmNvbmZlcmVuY2VTb2x1dGlvbktleSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jb25mZXJlbmNlU29sdXRpb25LZXk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmVxdWVzdElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydyZXF1ZXN0SWQnXSA9IHRoaXMucmVxdWVzdElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXR1cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zdGF0dXMgIT09IG51bGwpIHt0b1JldHVyblsnc3RhdHVzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnN0YXR1cyA/ICh0aGlzLnN0YXR1cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5zdGF0dXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR29vZ2xlTWVldENyZWF0ZU1lZXRpbmdSZXF1ZXN0IGltcGxlbWVudHMgaS5Hb29nbGVNZWV0Q3JlYXRlTWVldGluZ1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGNhbGVuZGVySWQ6IHN0cmluZztcbiAgICBtZWV0aW5nOiBHb29nbGVNZWV0TWVldGluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdvb2dsZU1lZXRDcmVhdGVNZWV0aW5nUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdvb2dsZU1lZXRDcmVhdGVNZWV0aW5nUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5tZWV0aW5nKSB7bS5tZWV0aW5nID0gR29vZ2xlTWVldE1lZXRpbmcuZnJvbVByb3RvKHByb3RvLm1lZXRpbmcpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Hb29nbGVNZWV0Q3JlYXRlTWVldGluZ1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYWxlbmRlcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjYWxlbmRlcklkJ10gPSB0aGlzLmNhbGVuZGVySWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVldGluZyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tZWV0aW5nICE9PSBudWxsKSB7dG9SZXR1cm5bJ21lZXRpbmcnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubWVldGluZyA/ICh0aGlzLm1lZXRpbmcgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubWVldGluZzt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHb29nbGVNZWV0Q3JlYXRlTWVldGluZ1Jlc3BvbnNlIGltcGxlbWVudHMgaS5Hb29nbGVNZWV0Q3JlYXRlTWVldGluZ1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBpYW1Vc2VySWQ6IHN0cmluZztcbiAgICBjYWxlbmRlcklkOiBzdHJpbmc7XG4gICAgbWVldGluZzogR29vZ2xlTWVldE1lZXRpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHb29nbGVNZWV0Q3JlYXRlTWVldGluZ1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR29vZ2xlTWVldENyZWF0ZU1lZXRpbmdSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5tZWV0aW5nKSB7bS5tZWV0aW5nID0gR29vZ2xlTWVldE1lZXRpbmcuZnJvbVByb3RvKHByb3RvLm1lZXRpbmcpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Hb29nbGVNZWV0Q3JlYXRlTWVldGluZ1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWFtVXNlcklkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpYW1Vc2VySWQnXSA9IHRoaXMuaWFtVXNlcklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbGVuZGVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NhbGVuZGVySWQnXSA9IHRoaXMuY2FsZW5kZXJJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWV0aW5nICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1lZXRpbmcgIT09IG51bGwpIHt0b1JldHVyblsnbWVldGluZyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tZWV0aW5nID8gKHRoaXMubWVldGluZyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tZWV0aW5nO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdvb2dsZU1lZXRFbnRyeVBvaW50IGltcGxlbWVudHMgaS5Hb29nbGVNZWV0RW50cnlQb2ludEludGVyZmFjZSB7XG4gICAgYWNjZXNzQ29kZTogc3RyaW5nO1xuICAgIGVudHJ5UG9pbnRGZWF0dXJlczogc3RyaW5nW107XG4gICAgZW50cnlQb2ludFR5cGU6IHN0cmluZztcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIG1lZXRpbmdDb2RlOiBzdHJpbmc7XG4gICAgcGFzc2NvZGU6IHN0cmluZztcbiAgICBwYXNzd29yZDogc3RyaW5nO1xuICAgIHBpbjogc3RyaW5nO1xuICAgIHJlZ2lvbkNvZGU6IHN0cmluZztcbiAgICB1cmk6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdvb2dsZU1lZXRFbnRyeVBvaW50IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR29vZ2xlTWVldEVudHJ5UG9pbnQoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdvb2dsZU1lZXRFbnRyeVBvaW50SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWNjZXNzQ29kZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjZXNzQ29kZSddID0gdGhpcy5hY2Nlc3NDb2RlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVudHJ5UG9pbnRGZWF0dXJlcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZW50cnlQb2ludEZlYXR1cmVzJ10gPSB0aGlzLmVudHJ5UG9pbnRGZWF0dXJlczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbnRyeVBvaW50VHlwZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZW50cnlQb2ludFR5cGUnXSA9IHRoaXMuZW50cnlQb2ludFR5cGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubGFiZWwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2xhYmVsJ10gPSB0aGlzLmxhYmVsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lZXRpbmdDb2RlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZWV0aW5nQ29kZSddID0gdGhpcy5tZWV0aW5nQ29kZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXNzY29kZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFzc2NvZGUnXSA9IHRoaXMucGFzc2NvZGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGFzc3dvcmQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Bhc3N3b3JkJ10gPSB0aGlzLnBhc3N3b3JkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBpbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGluJ10gPSB0aGlzLnBpbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZWdpb25Db2RlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydyZWdpb25Db2RlJ10gPSB0aGlzLnJlZ2lvbkNvZGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudXJpICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1cmknXSA9IHRoaXMudXJpO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdvb2dsZU1lZXRNZWV0aW5nIGltcGxlbWVudHMgaS5Hb29nbGVNZWV0TWVldGluZ0ludGVyZmFjZSB7XG4gICAgYW55b25lQ2FuQWRkU2VsZjogYm9vbGVhbjtcbiAgICBhdHRlbmRlZXM6IEdvb2dsZU1lZXRNZWV0aW5nQXR0ZW5kZWVbXTtcbiAgICBhdHRlbmRlZXNPbWl0dGVkOiBib29sZWFuO1xuICAgIGNvbG9ySWQ6IHN0cmluZztcbiAgICBjb25mZXJlbmNlRGF0YTogR29vZ2xlTWVldENvbmZlcmVuY2VEYXRhO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgZW5kOiBHb29nbGVNZWV0TWVldGluZ0RhdGVUaW1lO1xuICAgIGVuZFRpbWVVbnNwZWNpZmllZDogYm9vbGVhbjtcbiAgICBldGFnOiBzdHJpbmc7XG4gICAgaWNhbFVpZDogc3RyaW5nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAga2luZDogc3RyaW5nO1xuICAgIGxvY2F0aW9uOiBzdHJpbmc7XG4gICAgbG9ja2VkOiBib29sZWFuO1xuICAgIG9yaWdpbmFsU3RhcnRUaW1lOiBHb29nbGVNZWV0TWVldGluZ0RhdGVUaW1lO1xuICAgIHJlY3VycmVuY2U6IHN0cmluZ1tdO1xuICAgIHJlY3VycmluZ01lZXRpbmdJZDogc3RyaW5nO1xuICAgIHJlbWluZGVyczogR29vZ2xlTWVldE1lZXRpbmdSZW1pbmRlcnM7XG4gICAgc2VxdWVuY2U6IG51bWJlcjtcbiAgICBzdGFydDogR29vZ2xlTWVldE1lZXRpbmdEYXRlVGltZTtcbiAgICBzdGF0dXM6IHN0cmluZztcbiAgICBzdW1tYXJ5OiBzdHJpbmc7XG4gICAgdHJhbnNwYXJlbmN5OiBzdHJpbmc7XG4gICAgdmlzaWJpbGl0eTogc3RyaW5nO1xuICAgIGhhbmdvdXRMaW5rOiBzdHJpbmc7XG4gICAgaHRtbExpbms6IHN0cmluZztcbiAgICBjcmVhdGVkOiBzdHJpbmc7XG4gICAgY3JlYXRvcjogR29vZ2xlTWVldE1lZXRpbmdDcmVhdG9yO1xuICAgIHVwZGF0ZWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdvb2dsZU1lZXRNZWV0aW5nIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR29vZ2xlTWVldE1lZXRpbmcoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYXR0ZW5kZWVzKSB7bS5hdHRlbmRlZXMgPSBwcm90by5hdHRlbmRlZXMubWFwKEdvb2dsZU1lZXRNZWV0aW5nQXR0ZW5kZWUuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by5jb25mZXJlbmNlRGF0YSkge20uY29uZmVyZW5jZURhdGEgPSBHb29nbGVNZWV0Q29uZmVyZW5jZURhdGEuZnJvbVByb3RvKHByb3RvLmNvbmZlcmVuY2VEYXRhKTt9XG4gICAgICAgIGlmIChwcm90by5lbmQpIHttLmVuZCA9IEdvb2dsZU1lZXRNZWV0aW5nRGF0ZVRpbWUuZnJvbVByb3RvKHByb3RvLmVuZCk7fVxuICAgICAgICBpZiAocHJvdG8ub3JpZ2luYWxTdGFydFRpbWUpIHttLm9yaWdpbmFsU3RhcnRUaW1lID0gR29vZ2xlTWVldE1lZXRpbmdEYXRlVGltZS5mcm9tUHJvdG8ocHJvdG8ub3JpZ2luYWxTdGFydFRpbWUpO31cbiAgICAgICAgaWYgKHByb3RvLnJlbWluZGVycykge20ucmVtaW5kZXJzID0gR29vZ2xlTWVldE1lZXRpbmdSZW1pbmRlcnMuZnJvbVByb3RvKHByb3RvLnJlbWluZGVycyk7fVxuICAgICAgICBpZiAocHJvdG8uc2VxdWVuY2UpIHttLnNlcXVlbmNlID0gcGFyc2VJbnQocHJvdG8uc2VxdWVuY2UsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by5zdGFydCkge20uc3RhcnQgPSBHb29nbGVNZWV0TWVldGluZ0RhdGVUaW1lLmZyb21Qcm90byhwcm90by5zdGFydCk7fVxuICAgICAgICBpZiAocHJvdG8uY3JlYXRvcikge20uY3JlYXRvciA9IEdvb2dsZU1lZXRNZWV0aW5nQ3JlYXRvci5mcm9tUHJvdG8ocHJvdG8uY3JlYXRvcik7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdvb2dsZU1lZXRNZWV0aW5nSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYW55b25lQ2FuQWRkU2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYW55b25lQ2FuQWRkU2VsZiddID0gdGhpcy5hbnlvbmVDYW5BZGRTZWxmO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmF0dGVuZGVlcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5hdHRlbmRlZXMgIT09IG51bGwpIHt0b1JldHVyblsnYXR0ZW5kZWVzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmF0dGVuZGVlcyA/ICh0aGlzLmF0dGVuZGVlcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5hdHRlbmRlZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXR0ZW5kZWVzT21pdHRlZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYXR0ZW5kZWVzT21pdHRlZCddID0gdGhpcy5hdHRlbmRlZXNPbWl0dGVkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbG9ySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbG9ySWQnXSA9IHRoaXMuY29sb3JJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb25mZXJlbmNlRGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jb25mZXJlbmNlRGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWydjb25mZXJlbmNlRGF0YSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jb25mZXJlbmNlRGF0YSA/ICh0aGlzLmNvbmZlcmVuY2VEYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmNvbmZlcmVuY2VEYXRhO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlc2NyaXB0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkZXNjcmlwdGlvbiddID0gdGhpcy5kZXNjcmlwdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbmQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZW5kICE9PSBudWxsKSB7dG9SZXR1cm5bJ2VuZCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5lbmQgPyAodGhpcy5lbmQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZW5kO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVuZFRpbWVVbnNwZWNpZmllZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZW5kVGltZVVuc3BlY2lmaWVkJ10gPSB0aGlzLmVuZFRpbWVVbnNwZWNpZmllZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ldGFnICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydldGFnJ10gPSB0aGlzLmV0YWc7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWNhbFVpZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWNhbFVpZCddID0gdGhpcy5pY2FsVWlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5raW5kICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydraW5kJ10gPSB0aGlzLmtpbmQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubG9jYXRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2xvY2F0aW9uJ10gPSB0aGlzLmxvY2F0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxvY2tlZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbG9ja2VkJ10gPSB0aGlzLmxvY2tlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcmlnaW5hbFN0YXJ0VGltZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5vcmlnaW5hbFN0YXJ0VGltZSAhPT0gbnVsbCkge3RvUmV0dXJuWydvcmlnaW5hbFN0YXJ0VGltZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5vcmlnaW5hbFN0YXJ0VGltZSA/ICh0aGlzLm9yaWdpbmFsU3RhcnRUaW1lIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm9yaWdpbmFsU3RhcnRUaW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJlY3VycmVuY2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3JlY3VycmVuY2UnXSA9IHRoaXMucmVjdXJyZW5jZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZWN1cnJpbmdNZWV0aW5nSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3JlY3VycmluZ01lZXRpbmdJZCddID0gdGhpcy5yZWN1cnJpbmdNZWV0aW5nSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmVtaW5kZXJzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnJlbWluZGVycyAhPT0gbnVsbCkge3RvUmV0dXJuWydyZW1pbmRlcnMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucmVtaW5kZXJzID8gKHRoaXMucmVtaW5kZXJzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnJlbWluZGVyczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZXF1ZW5jZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2VxdWVuY2UnXSA9IHRoaXMuc2VxdWVuY2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhcnQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc3RhcnQgIT09IG51bGwpIHt0b1JldHVyblsnc3RhcnQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3RhcnQgPyAodGhpcy5zdGFydCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5zdGFydDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGF0dXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N0YXR1cyddID0gdGhpcy5zdGF0dXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3VtbWFyeSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3VtbWFyeSddID0gdGhpcy5zdW1tYXJ5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRyYW5zcGFyZW5jeSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndHJhbnNwYXJlbmN5J10gPSB0aGlzLnRyYW5zcGFyZW5jeTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52aXNpYmlsaXR5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd2aXNpYmlsaXR5J10gPSB0aGlzLnZpc2liaWxpdHk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaGFuZ291dExpbmsgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hhbmdvdXRMaW5rJ10gPSB0aGlzLmhhbmdvdXRMaW5rO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmh0bWxMaW5rICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydodG1sTGluayddID0gdGhpcy5odG1sTGluazt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jcmVhdGVkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjcmVhdGVkJ10gPSB0aGlzLmNyZWF0ZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3JlYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jcmVhdG9yICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NyZWF0b3InXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY3JlYXRvciA/ICh0aGlzLmNyZWF0b3IgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY3JlYXRvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy51cGRhdGVkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd1cGRhdGVkJ10gPSB0aGlzLnVwZGF0ZWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR29vZ2xlTWVldE1lZXRpbmdBdHRlbmRlZSBpbXBsZW1lbnRzIGkuR29vZ2xlTWVldE1lZXRpbmdBdHRlbmRlZUludGVyZmFjZSB7XG4gICAgYWRkaXRpb25hbEd1ZXN0czogbnVtYmVyO1xuICAgIGNvbW1lbnQ6IHN0cmluZztcbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgaWQ6IHN0cmluZztcbiAgICBvcHRpb25hbDogYm9vbGVhbjtcbiAgICBvcmdhbml6ZXI6IGJvb2xlYW47XG4gICAgcmVzb3VyY2U6IGJvb2xlYW47XG4gICAgcmVzcG9uc2VTdGF0dXM6IHN0cmluZztcbiAgICBzZWxmOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR29vZ2xlTWVldE1lZXRpbmdBdHRlbmRlZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdvb2dsZU1lZXRNZWV0aW5nQXR0ZW5kZWUoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYWRkaXRpb25hbEd1ZXN0cykge20uYWRkaXRpb25hbEd1ZXN0cyA9IHBhcnNlSW50KHByb3RvLmFkZGl0aW9uYWxHdWVzdHMsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR29vZ2xlTWVldE1lZXRpbmdBdHRlbmRlZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFkZGl0aW9uYWxHdWVzdHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FkZGl0aW9uYWxHdWVzdHMnXSA9IHRoaXMuYWRkaXRpb25hbEd1ZXN0czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb21tZW50ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb21tZW50J10gPSB0aGlzLmNvbW1lbnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGlzcGxheU5hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rpc3BsYXlOYW1lJ10gPSB0aGlzLmRpc3BsYXlOYW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVtYWlsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydlbWFpbCddID0gdGhpcy5lbWFpbDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9uYWwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ29wdGlvbmFsJ10gPSB0aGlzLm9wdGlvbmFsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9yZ2FuaXplciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnb3JnYW5pemVyJ10gPSB0aGlzLm9yZ2FuaXplcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXNvdXJjZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncmVzb3VyY2UnXSA9IHRoaXMucmVzb3VyY2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmVzcG9uc2VTdGF0dXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Jlc3BvbnNlU3RhdHVzJ10gPSB0aGlzLnJlc3BvbnNlU3RhdHVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNlbGYgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NlbGYnXSA9IHRoaXMuc2VsZjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHb29nbGVNZWV0TWVldGluZ0NyZWF0b3IgaW1wbGVtZW50cyBpLkdvb2dsZU1lZXRNZWV0aW5nQ3JlYXRvckludGVyZmFjZSB7XG4gICAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgICBlbWFpbDogc3RyaW5nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgc2VsZjogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdvb2dsZU1lZXRNZWV0aW5nQ3JlYXRvciB7XG4gICAgICAgIGxldCBtID0gbmV3IEdvb2dsZU1lZXRNZWV0aW5nQ3JlYXRvcigpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR29vZ2xlTWVldE1lZXRpbmdDcmVhdG9ySW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGlzcGxheU5hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rpc3BsYXlOYW1lJ10gPSB0aGlzLmRpc3BsYXlOYW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVtYWlsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydlbWFpbCddID0gdGhpcy5lbWFpbDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2VsZiddID0gdGhpcy5zZWxmO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdvb2dsZU1lZXRNZWV0aW5nRGF0ZVRpbWUgaW1wbGVtZW50cyBpLkdvb2dsZU1lZXRNZWV0aW5nRGF0ZVRpbWVJbnRlcmZhY2Uge1xuICAgIGRhdGU6IHN0cmluZztcbiAgICBkYXRlVGltZTogc3RyaW5nO1xuICAgIHRpbWVab25lOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHb29nbGVNZWV0TWVldGluZ0RhdGVUaW1lIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR29vZ2xlTWVldE1lZXRpbmdEYXRlVGltZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR29vZ2xlTWVldE1lZXRpbmdEYXRlVGltZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRhdGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2RhdGUnXSA9IHRoaXMuZGF0ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kYXRlVGltZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGF0ZVRpbWUnXSA9IHRoaXMuZGF0ZVRpbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGltZVpvbmUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RpbWVab25lJ10gPSB0aGlzLnRpbWVab25lO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdvb2dsZU1lZXRNZWV0aW5nUmVtaW5kZXIgaW1wbGVtZW50cyBpLkdvb2dsZU1lZXRNZWV0aW5nUmVtaW5kZXJJbnRlcmZhY2Uge1xuICAgIG1ldGhvZDogc3RyaW5nO1xuICAgIG1pbnV0ZXM6IG51bWJlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdvb2dsZU1lZXRNZWV0aW5nUmVtaW5kZXIge1xuICAgICAgICBsZXQgbSA9IG5ldyBHb29nbGVNZWV0TWVldGluZ1JlbWluZGVyKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLm1pbnV0ZXMpIHttLm1pbnV0ZXMgPSBwYXJzZUludChwcm90by5taW51dGVzLCAxMCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdvb2dsZU1lZXRNZWV0aW5nUmVtaW5kZXJJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXRob2QgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21ldGhvZCddID0gdGhpcy5tZXRob2Q7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWludXRlcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWludXRlcyddID0gdGhpcy5taW51dGVzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdvb2dsZU1lZXRNZWV0aW5nUmVtaW5kZXJzIGltcGxlbWVudHMgaS5Hb29nbGVNZWV0TWVldGluZ1JlbWluZGVyc0ludGVyZmFjZSB7XG4gICAgb3ZlcnJpZGVzOiBHb29nbGVNZWV0TWVldGluZ1JlbWluZGVyW107XG4gICAgdXNlRGVmYXVsdDogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdvb2dsZU1lZXRNZWV0aW5nUmVtaW5kZXJzIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR29vZ2xlTWVldE1lZXRpbmdSZW1pbmRlcnMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ub3ZlcnJpZGVzKSB7bS5vdmVycmlkZXMgPSBwcm90by5vdmVycmlkZXMubWFwKEdvb2dsZU1lZXRNZWV0aW5nUmVtaW5kZXIuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR29vZ2xlTWVldE1lZXRpbmdSZW1pbmRlcnNJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vdmVycmlkZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMub3ZlcnJpZGVzICE9PSBudWxsKSB7dG9SZXR1cm5bJ292ZXJyaWRlcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5vdmVycmlkZXMgPyAodGhpcy5vdmVycmlkZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMub3ZlcnJpZGVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVzZURlZmF1bHQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3VzZURlZmF1bHQnXSA9IHRoaXMudXNlRGVmYXVsdDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbiJdfQ==
|