@vendasta/developer-training 0.8.0 → 0.9.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/_internal/index.mjs +1 -5
- package/esm2020/lib/_internal/interfaces/index.mjs +1 -1
- package/esm2020/lib/_internal/interfaces/lfossenier-todo.interface.mjs +1 -1
- package/esm2020/lib/_internal/l-fossenier-todo.api.service.mjs +5 -5
- package/esm2020/lib/_internal/objects/index.mjs +2 -5
- package/esm2020/lib/_internal/objects/lfossenier-todo.mjs +27 -27
- package/fesm2015/vendasta-developer-training.mjs +38 -1149
- package/fesm2015/vendasta-developer-training.mjs.map +1 -1
- package/fesm2020/vendasta-developer-training.mjs +38 -1149
- package/fesm2020/vendasta-developer-training.mjs.map +1 -1
- package/lib/_internal/index.d.ts +0 -4
- package/lib/_internal/interfaces/index.d.ts +1 -4
- package/lib/_internal/interfaces/lfossenier-todo.interface.d.ts +5 -5
- package/lib/_internal/l-fossenier-todo.api.service.d.ts +3 -3
- package/lib/_internal/objects/index.d.ts +1 -4
- package/lib/_internal/objects/lfossenier-todo.d.ts +8 -8
- package/package.json +1 -1
- package/esm2020/lib/_internal/a-hundal-to-do-project.api.service.mjs +0 -61
- package/esm2020/lib/_internal/hdo-todo.api.service.mjs +0 -60
- package/esm2020/lib/_internal/interfaces/annotations.interface.mjs +0 -8
- package/esm2020/lib/_internal/interfaces/api.interface.mjs +0 -8
- package/esm2020/lib/_internal/interfaces/tkabakovtodo.interface.mjs +0 -8
- package/esm2020/lib/_internal/m-mugot-list-qa.api.service.mjs +0 -50
- package/esm2020/lib/_internal/objects/annotations.mjs +0 -24
- package/esm2020/lib/_internal/objects/api.mjs +0 -639
- package/esm2020/lib/_internal/objects/tkabakovtodo.mjs +0 -268
- package/esm2020/lib/_internal/t-kabakov-to-do.api.service.mjs +0 -61
- package/lib/_internal/a-hundal-to-do-project.api.service.d.ts +0 -20
- package/lib/_internal/hdo-todo.api.service.d.ts +0 -20
- package/lib/_internal/interfaces/annotations.interface.d.ts +0 -4
- package/lib/_internal/interfaces/api.interface.d.ts +0 -98
- package/lib/_internal/interfaces/tkabakovtodo.interface.d.ts +0 -40
- package/lib/_internal/m-mugot-list-qa.api.service.d.ts +0 -18
- package/lib/_internal/objects/annotations.d.ts +0 -8
- package/lib/_internal/objects/api.d.ts +0 -183
- package/lib/_internal/objects/tkabakovtodo.d.ts +0 -77
- package/lib/_internal/t-kabakov-to-do.api.service.d.ts +0 -20
@@ -1,639 +0,0 @@
|
|
1
|
-
export class AHundalAddTaskRequest {
|
2
|
-
static fromProto(proto) {
|
3
|
-
let m = new AHundalAddTaskRequest();
|
4
|
-
m = Object.assign(m, proto);
|
5
|
-
if (proto.newTask) {
|
6
|
-
m.newTask = AHundalTask.fromProto(proto.newTask);
|
7
|
-
}
|
8
|
-
return m;
|
9
|
-
}
|
10
|
-
constructor(kwargs) {
|
11
|
-
if (!kwargs) {
|
12
|
-
return;
|
13
|
-
}
|
14
|
-
Object.assign(this, kwargs);
|
15
|
-
}
|
16
|
-
toApiJson() {
|
17
|
-
const toReturn = {};
|
18
|
-
if (typeof this.newTask !== 'undefined' && this.newTask !== null) {
|
19
|
-
toReturn['newTask'] = 'toApiJson' in this.newTask ? this.newTask.toApiJson() : this.newTask;
|
20
|
-
}
|
21
|
-
return toReturn;
|
22
|
-
}
|
23
|
-
}
|
24
|
-
export class AHundalAddTaskResponse {
|
25
|
-
static fromProto(proto) {
|
26
|
-
let m = new AHundalAddTaskResponse();
|
27
|
-
m = Object.assign(m, proto);
|
28
|
-
return m;
|
29
|
-
}
|
30
|
-
constructor(kwargs) {
|
31
|
-
if (!kwargs) {
|
32
|
-
return;
|
33
|
-
}
|
34
|
-
Object.assign(this, kwargs);
|
35
|
-
}
|
36
|
-
toApiJson() {
|
37
|
-
const toReturn = {};
|
38
|
-
if (typeof this.addSuccesfull !== 'undefined') {
|
39
|
-
toReturn['addSuccesfull'] = this.addSuccesfull;
|
40
|
-
}
|
41
|
-
return toReturn;
|
42
|
-
}
|
43
|
-
}
|
44
|
-
export class AHundalDeleteTaskRequest {
|
45
|
-
static fromProto(proto) {
|
46
|
-
let m = new AHundalDeleteTaskRequest();
|
47
|
-
m = Object.assign(m, proto);
|
48
|
-
return m;
|
49
|
-
}
|
50
|
-
constructor(kwargs) {
|
51
|
-
if (!kwargs) {
|
52
|
-
return;
|
53
|
-
}
|
54
|
-
Object.assign(this, kwargs);
|
55
|
-
}
|
56
|
-
toApiJson() {
|
57
|
-
const toReturn = {};
|
58
|
-
if (typeof this.taskId !== 'undefined') {
|
59
|
-
toReturn['taskId'] = this.taskId;
|
60
|
-
}
|
61
|
-
return toReturn;
|
62
|
-
}
|
63
|
-
}
|
64
|
-
export class AHundalDeleteTaskResponse {
|
65
|
-
static fromProto(proto) {
|
66
|
-
let m = new AHundalDeleteTaskResponse();
|
67
|
-
m = Object.assign(m, proto);
|
68
|
-
return m;
|
69
|
-
}
|
70
|
-
constructor(kwargs) {
|
71
|
-
if (!kwargs) {
|
72
|
-
return;
|
73
|
-
}
|
74
|
-
Object.assign(this, kwargs);
|
75
|
-
}
|
76
|
-
toApiJson() {
|
77
|
-
const toReturn = {};
|
78
|
-
if (typeof this.deleteSuccesfull !== 'undefined') {
|
79
|
-
toReturn['deleteSuccesfull'] = this.deleteSuccesfull;
|
80
|
-
}
|
81
|
-
return toReturn;
|
82
|
-
}
|
83
|
-
}
|
84
|
-
export class AHundalEditTaskRequest {
|
85
|
-
static fromProto(proto) {
|
86
|
-
let m = new AHundalEditTaskRequest();
|
87
|
-
m = Object.assign(m, proto);
|
88
|
-
if (proto.editedTask) {
|
89
|
-
m.editedTask = AHundalTask.fromProto(proto.editedTask);
|
90
|
-
}
|
91
|
-
return m;
|
92
|
-
}
|
93
|
-
constructor(kwargs) {
|
94
|
-
if (!kwargs) {
|
95
|
-
return;
|
96
|
-
}
|
97
|
-
Object.assign(this, kwargs);
|
98
|
-
}
|
99
|
-
toApiJson() {
|
100
|
-
const toReturn = {};
|
101
|
-
if (typeof this.editedTask !== 'undefined' && this.editedTask !== null) {
|
102
|
-
toReturn['editedTask'] = 'toApiJson' in this.editedTask ? this.editedTask.toApiJson() : this.editedTask;
|
103
|
-
}
|
104
|
-
return toReturn;
|
105
|
-
}
|
106
|
-
}
|
107
|
-
export class AHundalEditTaskResponse {
|
108
|
-
static fromProto(proto) {
|
109
|
-
let m = new AHundalEditTaskResponse();
|
110
|
-
m = Object.assign(m, proto);
|
111
|
-
return m;
|
112
|
-
}
|
113
|
-
constructor(kwargs) {
|
114
|
-
if (!kwargs) {
|
115
|
-
return;
|
116
|
-
}
|
117
|
-
Object.assign(this, kwargs);
|
118
|
-
}
|
119
|
-
toApiJson() {
|
120
|
-
const toReturn = {};
|
121
|
-
if (typeof this.editSuccesfull !== 'undefined') {
|
122
|
-
toReturn['editSuccesfull'] = this.editSuccesfull;
|
123
|
-
}
|
124
|
-
return toReturn;
|
125
|
-
}
|
126
|
-
}
|
127
|
-
export class AHundalGetSpecificTaskRequest {
|
128
|
-
static fromProto(proto) {
|
129
|
-
let m = new AHundalGetSpecificTaskRequest();
|
130
|
-
m = Object.assign(m, proto);
|
131
|
-
return m;
|
132
|
-
}
|
133
|
-
constructor(kwargs) {
|
134
|
-
if (!kwargs) {
|
135
|
-
return;
|
136
|
-
}
|
137
|
-
Object.assign(this, kwargs);
|
138
|
-
}
|
139
|
-
toApiJson() {
|
140
|
-
const toReturn = {};
|
141
|
-
if (typeof this.taskId !== 'undefined') {
|
142
|
-
toReturn['taskId'] = this.taskId;
|
143
|
-
}
|
144
|
-
return toReturn;
|
145
|
-
}
|
146
|
-
}
|
147
|
-
export class AHundalGetSpecificTaskResponse {
|
148
|
-
static fromProto(proto) {
|
149
|
-
let m = new AHundalGetSpecificTaskResponse();
|
150
|
-
m = Object.assign(m, proto);
|
151
|
-
if (proto.ahundalTask) {
|
152
|
-
m.ahundalTask = AHundalTask.fromProto(proto.ahundalTask);
|
153
|
-
}
|
154
|
-
return m;
|
155
|
-
}
|
156
|
-
constructor(kwargs) {
|
157
|
-
if (!kwargs) {
|
158
|
-
return;
|
159
|
-
}
|
160
|
-
Object.assign(this, kwargs);
|
161
|
-
}
|
162
|
-
toApiJson() {
|
163
|
-
const toReturn = {};
|
164
|
-
if (typeof this.ahundalTask !== 'undefined' && this.ahundalTask !== null) {
|
165
|
-
toReturn['ahundalTask'] = 'toApiJson' in this.ahundalTask ? this.ahundalTask.toApiJson() : this.ahundalTask;
|
166
|
-
}
|
167
|
-
return toReturn;
|
168
|
-
}
|
169
|
-
}
|
170
|
-
export class AHundalGetTasksRequest {
|
171
|
-
static fromProto(proto) {
|
172
|
-
let m = new AHundalGetTasksRequest();
|
173
|
-
m = Object.assign(m, proto);
|
174
|
-
return m;
|
175
|
-
}
|
176
|
-
constructor(kwargs) {
|
177
|
-
if (!kwargs) {
|
178
|
-
return;
|
179
|
-
}
|
180
|
-
Object.assign(this, kwargs);
|
181
|
-
}
|
182
|
-
toApiJson() {
|
183
|
-
const toReturn = {};
|
184
|
-
if (typeof this.taskId !== 'undefined') {
|
185
|
-
toReturn['taskId'] = this.taskId;
|
186
|
-
}
|
187
|
-
return toReturn;
|
188
|
-
}
|
189
|
-
}
|
190
|
-
export class AHundalGetTasksResponse {
|
191
|
-
static fromProto(proto) {
|
192
|
-
let m = new AHundalGetTasksResponse();
|
193
|
-
m = Object.assign(m, proto);
|
194
|
-
if (proto.ahundalTask) {
|
195
|
-
m.ahundalTask = proto.ahundalTask.map(AHundalTask.fromProto);
|
196
|
-
}
|
197
|
-
return m;
|
198
|
-
}
|
199
|
-
constructor(kwargs) {
|
200
|
-
if (!kwargs) {
|
201
|
-
return;
|
202
|
-
}
|
203
|
-
Object.assign(this, kwargs);
|
204
|
-
}
|
205
|
-
toApiJson() {
|
206
|
-
const toReturn = {};
|
207
|
-
if (typeof this.ahundalTask !== 'undefined' && this.ahundalTask !== null) {
|
208
|
-
toReturn['ahundalTask'] = 'toApiJson' in this.ahundalTask ? this.ahundalTask.toApiJson() : this.ahundalTask;
|
209
|
-
}
|
210
|
-
return toReturn;
|
211
|
-
}
|
212
|
-
}
|
213
|
-
export class AHundalTask {
|
214
|
-
static fromProto(proto) {
|
215
|
-
let m = new AHundalTask();
|
216
|
-
m = Object.assign(m, proto);
|
217
|
-
return m;
|
218
|
-
}
|
219
|
-
constructor(kwargs) {
|
220
|
-
if (!kwargs) {
|
221
|
-
return;
|
222
|
-
}
|
223
|
-
Object.assign(this, kwargs);
|
224
|
-
}
|
225
|
-
toApiJson() {
|
226
|
-
const toReturn = {};
|
227
|
-
if (typeof this.id !== 'undefined') {
|
228
|
-
toReturn['id'] = this.id;
|
229
|
-
}
|
230
|
-
if (typeof this.taskTitle !== 'undefined') {
|
231
|
-
toReturn['taskTitle'] = this.taskTitle;
|
232
|
-
}
|
233
|
-
if (typeof this.day !== 'undefined') {
|
234
|
-
toReturn['day'] = this.day;
|
235
|
-
}
|
236
|
-
if (typeof this.month !== 'undefined') {
|
237
|
-
toReturn['month'] = this.month;
|
238
|
-
}
|
239
|
-
if (typeof this.year !== 'undefined') {
|
240
|
-
toReturn['year'] = this.year;
|
241
|
-
}
|
242
|
-
if (typeof this.description !== 'undefined') {
|
243
|
-
toReturn['description'] = this.description;
|
244
|
-
}
|
245
|
-
if (typeof this.completed !== 'undefined') {
|
246
|
-
toReturn['completed'] = this.completed;
|
247
|
-
}
|
248
|
-
if (typeof this.isDeleted !== 'undefined') {
|
249
|
-
toReturn['isDeleted'] = this.isDeleted;
|
250
|
-
}
|
251
|
-
return toReturn;
|
252
|
-
}
|
253
|
-
}
|
254
|
-
export class CreateHdoTodoRequest {
|
255
|
-
static fromProto(proto) {
|
256
|
-
let m = new CreateHdoTodoRequest();
|
257
|
-
m = Object.assign(m, proto);
|
258
|
-
if (proto.todo) {
|
259
|
-
m.todo = HdoTodoItem.fromProto(proto.todo);
|
260
|
-
}
|
261
|
-
return m;
|
262
|
-
}
|
263
|
-
constructor(kwargs) {
|
264
|
-
if (!kwargs) {
|
265
|
-
return;
|
266
|
-
}
|
267
|
-
Object.assign(this, kwargs);
|
268
|
-
}
|
269
|
-
toApiJson() {
|
270
|
-
const toReturn = {};
|
271
|
-
if (typeof this.todo !== 'undefined' && this.todo !== null) {
|
272
|
-
toReturn['todo'] = 'toApiJson' in this.todo ? this.todo.toApiJson() : this.todo;
|
273
|
-
}
|
274
|
-
return toReturn;
|
275
|
-
}
|
276
|
-
}
|
277
|
-
export class CreateHdoTodoResponse {
|
278
|
-
static fromProto(proto) {
|
279
|
-
let m = new CreateHdoTodoResponse();
|
280
|
-
m = Object.assign(m, proto);
|
281
|
-
if (proto.todo) {
|
282
|
-
m.todo = HdoTodoItem.fromProto(proto.todo);
|
283
|
-
}
|
284
|
-
return m;
|
285
|
-
}
|
286
|
-
constructor(kwargs) {
|
287
|
-
if (!kwargs) {
|
288
|
-
return;
|
289
|
-
}
|
290
|
-
Object.assign(this, kwargs);
|
291
|
-
}
|
292
|
-
toApiJson() {
|
293
|
-
const toReturn = {};
|
294
|
-
if (typeof this.todo !== 'undefined' && this.todo !== null) {
|
295
|
-
toReturn['todo'] = 'toApiJson' in this.todo ? this.todo.toApiJson() : this.todo;
|
296
|
-
}
|
297
|
-
return toReturn;
|
298
|
-
}
|
299
|
-
}
|
300
|
-
export class DeleteHdoTodoRequest {
|
301
|
-
static fromProto(proto) {
|
302
|
-
let m = new DeleteHdoTodoRequest();
|
303
|
-
m = Object.assign(m, proto);
|
304
|
-
return m;
|
305
|
-
}
|
306
|
-
constructor(kwargs) {
|
307
|
-
if (!kwargs) {
|
308
|
-
return;
|
309
|
-
}
|
310
|
-
Object.assign(this, kwargs);
|
311
|
-
}
|
312
|
-
toApiJson() {
|
313
|
-
const toReturn = {};
|
314
|
-
if (typeof this.id !== 'undefined') {
|
315
|
-
toReturn['id'] = this.id;
|
316
|
-
}
|
317
|
-
return toReturn;
|
318
|
-
}
|
319
|
-
}
|
320
|
-
export class DeleteHdoTodoResponse {
|
321
|
-
static fromProto(proto) {
|
322
|
-
let m = new DeleteHdoTodoResponse();
|
323
|
-
m = Object.assign(m, proto);
|
324
|
-
return m;
|
325
|
-
}
|
326
|
-
constructor(kwargs) {
|
327
|
-
if (!kwargs) {
|
328
|
-
return;
|
329
|
-
}
|
330
|
-
Object.assign(this, kwargs);
|
331
|
-
}
|
332
|
-
toApiJson() {
|
333
|
-
const toReturn = {};
|
334
|
-
if (typeof this.message !== 'undefined') {
|
335
|
-
toReturn['message'] = this.message;
|
336
|
-
}
|
337
|
-
return toReturn;
|
338
|
-
}
|
339
|
-
}
|
340
|
-
export class GetHdoTodoRequest {
|
341
|
-
static fromProto(proto) {
|
342
|
-
let m = new GetHdoTodoRequest();
|
343
|
-
m = Object.assign(m, proto);
|
344
|
-
return m;
|
345
|
-
}
|
346
|
-
constructor(kwargs) {
|
347
|
-
if (!kwargs) {
|
348
|
-
return;
|
349
|
-
}
|
350
|
-
Object.assign(this, kwargs);
|
351
|
-
}
|
352
|
-
toApiJson() {
|
353
|
-
const toReturn = {};
|
354
|
-
if (typeof this.id !== 'undefined') {
|
355
|
-
toReturn['id'] = this.id;
|
356
|
-
}
|
357
|
-
return toReturn;
|
358
|
-
}
|
359
|
-
}
|
360
|
-
export class GetHdoTodoResponse {
|
361
|
-
static fromProto(proto) {
|
362
|
-
let m = new GetHdoTodoResponse();
|
363
|
-
m = Object.assign(m, proto);
|
364
|
-
if (proto.todo) {
|
365
|
-
m.todo = HdoTodoItem.fromProto(proto.todo);
|
366
|
-
}
|
367
|
-
return m;
|
368
|
-
}
|
369
|
-
constructor(kwargs) {
|
370
|
-
if (!kwargs) {
|
371
|
-
return;
|
372
|
-
}
|
373
|
-
Object.assign(this, kwargs);
|
374
|
-
}
|
375
|
-
toApiJson() {
|
376
|
-
const toReturn = {};
|
377
|
-
if (typeof this.todo !== 'undefined' && this.todo !== null) {
|
378
|
-
toReturn['todo'] = 'toApiJson' in this.todo ? this.todo.toApiJson() : this.todo;
|
379
|
-
}
|
380
|
-
return toReturn;
|
381
|
-
}
|
382
|
-
}
|
383
|
-
export class HdoTodoItem {
|
384
|
-
static fromProto(proto) {
|
385
|
-
let m = new HdoTodoItem();
|
386
|
-
m = Object.assign(m, proto);
|
387
|
-
return m;
|
388
|
-
}
|
389
|
-
constructor(kwargs) {
|
390
|
-
if (!kwargs) {
|
391
|
-
return;
|
392
|
-
}
|
393
|
-
Object.assign(this, kwargs);
|
394
|
-
}
|
395
|
-
toApiJson() {
|
396
|
-
const toReturn = {};
|
397
|
-
if (typeof this.id !== 'undefined') {
|
398
|
-
toReturn['id'] = this.id;
|
399
|
-
}
|
400
|
-
if (typeof this.title !== 'undefined') {
|
401
|
-
toReturn['title'] = this.title;
|
402
|
-
}
|
403
|
-
if (typeof this.description !== 'undefined') {
|
404
|
-
toReturn['description'] = this.description;
|
405
|
-
}
|
406
|
-
if (typeof this.completed !== 'undefined') {
|
407
|
-
toReturn['completed'] = this.completed;
|
408
|
-
}
|
409
|
-
if (typeof this.deleted !== 'undefined') {
|
410
|
-
toReturn['deleted'] = this.deleted;
|
411
|
-
}
|
412
|
-
return toReturn;
|
413
|
-
}
|
414
|
-
}
|
415
|
-
export class ListHdoTodoRequest {
|
416
|
-
static fromProto(proto) {
|
417
|
-
let m = new ListHdoTodoRequest();
|
418
|
-
m = Object.assign(m, proto);
|
419
|
-
return m;
|
420
|
-
}
|
421
|
-
constructor(kwargs) {
|
422
|
-
if (!kwargs) {
|
423
|
-
return;
|
424
|
-
}
|
425
|
-
Object.assign(this, kwargs);
|
426
|
-
}
|
427
|
-
toApiJson() {
|
428
|
-
const toReturn = {};
|
429
|
-
return toReturn;
|
430
|
-
}
|
431
|
-
}
|
432
|
-
export class ListHdoTodoResponse {
|
433
|
-
static fromProto(proto) {
|
434
|
-
let m = new ListHdoTodoResponse();
|
435
|
-
m = Object.assign(m, proto);
|
436
|
-
if (proto.todos) {
|
437
|
-
m.todos = proto.todos.map(HdoTodoItem.fromProto);
|
438
|
-
}
|
439
|
-
return m;
|
440
|
-
}
|
441
|
-
constructor(kwargs) {
|
442
|
-
if (!kwargs) {
|
443
|
-
return;
|
444
|
-
}
|
445
|
-
Object.assign(this, kwargs);
|
446
|
-
}
|
447
|
-
toApiJson() {
|
448
|
-
const toReturn = {};
|
449
|
-
if (typeof this.todos !== 'undefined' && this.todos !== null) {
|
450
|
-
toReturn['todos'] = 'toApiJson' in this.todos ? this.todos.toApiJson() : this.todos;
|
451
|
-
}
|
452
|
-
return toReturn;
|
453
|
-
}
|
454
|
-
}
|
455
|
-
export class MMugotCreateTaskRequest {
|
456
|
-
static fromProto(proto) {
|
457
|
-
let m = new MMugotCreateTaskRequest();
|
458
|
-
m = Object.assign(m, proto);
|
459
|
-
if (proto.task) {
|
460
|
-
m.task = MMugotTask.fromProto(proto.task);
|
461
|
-
}
|
462
|
-
return m;
|
463
|
-
}
|
464
|
-
constructor(kwargs) {
|
465
|
-
if (!kwargs) {
|
466
|
-
return;
|
467
|
-
}
|
468
|
-
Object.assign(this, kwargs);
|
469
|
-
}
|
470
|
-
toApiJson() {
|
471
|
-
const toReturn = {};
|
472
|
-
if (typeof this.task !== 'undefined' && this.task !== null) {
|
473
|
-
toReturn['task'] = 'toApiJson' in this.task ? this.task.toApiJson() : this.task;
|
474
|
-
}
|
475
|
-
return toReturn;
|
476
|
-
}
|
477
|
-
}
|
478
|
-
export class MMugotCreateTaskResponse {
|
479
|
-
static fromProto(proto) {
|
480
|
-
let m = new MMugotCreateTaskResponse();
|
481
|
-
m = Object.assign(m, proto);
|
482
|
-
return m;
|
483
|
-
}
|
484
|
-
constructor(kwargs) {
|
485
|
-
if (!kwargs) {
|
486
|
-
return;
|
487
|
-
}
|
488
|
-
Object.assign(this, kwargs);
|
489
|
-
}
|
490
|
-
toApiJson() {
|
491
|
-
const toReturn = {};
|
492
|
-
if (typeof this.isCreated !== 'undefined') {
|
493
|
-
toReturn['isCreated'] = this.isCreated;
|
494
|
-
}
|
495
|
-
return toReturn;
|
496
|
-
}
|
497
|
-
}
|
498
|
-
export class MMugotDeleteTaskRequest {
|
499
|
-
static fromProto(proto) {
|
500
|
-
let m = new MMugotDeleteTaskRequest();
|
501
|
-
m = Object.assign(m, proto);
|
502
|
-
return m;
|
503
|
-
}
|
504
|
-
constructor(kwargs) {
|
505
|
-
if (!kwargs) {
|
506
|
-
return;
|
507
|
-
}
|
508
|
-
Object.assign(this, kwargs);
|
509
|
-
}
|
510
|
-
toApiJson() {
|
511
|
-
const toReturn = {};
|
512
|
-
if (typeof this.taskId !== 'undefined') {
|
513
|
-
toReturn['taskId'] = this.taskId;
|
514
|
-
}
|
515
|
-
return toReturn;
|
516
|
-
}
|
517
|
-
}
|
518
|
-
export class MMugotListTaskRequest {
|
519
|
-
static fromProto(proto) {
|
520
|
-
let m = new MMugotListTaskRequest();
|
521
|
-
m = Object.assign(m, proto);
|
522
|
-
return m;
|
523
|
-
}
|
524
|
-
constructor(kwargs) {
|
525
|
-
if (!kwargs) {
|
526
|
-
return;
|
527
|
-
}
|
528
|
-
Object.assign(this, kwargs);
|
529
|
-
}
|
530
|
-
toApiJson() {
|
531
|
-
const toReturn = {};
|
532
|
-
if (typeof this.taskId !== 'undefined') {
|
533
|
-
toReturn['taskId'] = this.taskId;
|
534
|
-
}
|
535
|
-
return toReturn;
|
536
|
-
}
|
537
|
-
}
|
538
|
-
export class MMugotListTaskResponse {
|
539
|
-
static fromProto(proto) {
|
540
|
-
let m = new MMugotListTaskResponse();
|
541
|
-
m = Object.assign(m, proto);
|
542
|
-
if (proto.task) {
|
543
|
-
m.task = MMugotTask.fromProto(proto.task);
|
544
|
-
}
|
545
|
-
return m;
|
546
|
-
}
|
547
|
-
constructor(kwargs) {
|
548
|
-
if (!kwargs) {
|
549
|
-
return;
|
550
|
-
}
|
551
|
-
Object.assign(this, kwargs);
|
552
|
-
}
|
553
|
-
toApiJson() {
|
554
|
-
const toReturn = {};
|
555
|
-
if (typeof this.task !== 'undefined' && this.task !== null) {
|
556
|
-
toReturn['task'] = 'toApiJson' in this.task ? this.task.toApiJson() : this.task;
|
557
|
-
}
|
558
|
-
return toReturn;
|
559
|
-
}
|
560
|
-
}
|
561
|
-
export class MMugotTask {
|
562
|
-
static fromProto(proto) {
|
563
|
-
let m = new MMugotTask();
|
564
|
-
m = Object.assign(m, proto);
|
565
|
-
return m;
|
566
|
-
}
|
567
|
-
constructor(kwargs) {
|
568
|
-
if (!kwargs) {
|
569
|
-
return;
|
570
|
-
}
|
571
|
-
Object.assign(this, kwargs);
|
572
|
-
}
|
573
|
-
toApiJson() {
|
574
|
-
const toReturn = {};
|
575
|
-
if (typeof this.taskName !== 'undefined') {
|
576
|
-
toReturn['taskName'] = this.taskName;
|
577
|
-
}
|
578
|
-
if (typeof this.taskDescription !== 'undefined') {
|
579
|
-
toReturn['taskDescription'] = this.taskDescription;
|
580
|
-
}
|
581
|
-
if (typeof this.isComplete !== 'undefined') {
|
582
|
-
toReturn['isComplete'] = this.isComplete;
|
583
|
-
}
|
584
|
-
if (typeof this.taskId !== 'undefined') {
|
585
|
-
toReturn['taskId'] = this.taskId;
|
586
|
-
}
|
587
|
-
if (typeof this.isDeleted !== 'undefined') {
|
588
|
-
toReturn['isDeleted'] = this.isDeleted;
|
589
|
-
}
|
590
|
-
return toReturn;
|
591
|
-
}
|
592
|
-
}
|
593
|
-
export class UpdateHdoTodoRequest {
|
594
|
-
static fromProto(proto) {
|
595
|
-
let m = new UpdateHdoTodoRequest();
|
596
|
-
m = Object.assign(m, proto);
|
597
|
-
if (proto.todo) {
|
598
|
-
m.todo = HdoTodoItem.fromProto(proto.todo);
|
599
|
-
}
|
600
|
-
return m;
|
601
|
-
}
|
602
|
-
constructor(kwargs) {
|
603
|
-
if (!kwargs) {
|
604
|
-
return;
|
605
|
-
}
|
606
|
-
Object.assign(this, kwargs);
|
607
|
-
}
|
608
|
-
toApiJson() {
|
609
|
-
const toReturn = {};
|
610
|
-
if (typeof this.todo !== 'undefined' && this.todo !== null) {
|
611
|
-
toReturn['todo'] = 'toApiJson' in this.todo ? this.todo.toApiJson() : this.todo;
|
612
|
-
}
|
613
|
-
return toReturn;
|
614
|
-
}
|
615
|
-
}
|
616
|
-
export class UpdateHdoTodoResponse {
|
617
|
-
static fromProto(proto) {
|
618
|
-
let m = new UpdateHdoTodoResponse();
|
619
|
-
m = Object.assign(m, proto);
|
620
|
-
if (proto.todo) {
|
621
|
-
m.todo = HdoTodoItem.fromProto(proto.todo);
|
622
|
-
}
|
623
|
-
return m;
|
624
|
-
}
|
625
|
-
constructor(kwargs) {
|
626
|
-
if (!kwargs) {
|
627
|
-
return;
|
628
|
-
}
|
629
|
-
Object.assign(this, kwargs);
|
630
|
-
}
|
631
|
-
toApiJson() {
|
632
|
-
const toReturn = {};
|
633
|
-
if (typeof this.todo !== 'undefined' && this.todo !== null) {
|
634
|
-
toReturn['todo'] = 'toApiJson' in this.todo ? this.todo.toApiJson() : this.todo;
|
635
|
-
}
|
636
|
-
return toReturn;
|
637
|
-
}
|
638
|
-
}
|
639
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vZGV2ZWxvcGVyX3RyYWluaW5nX3Nkay9zcmMvbGliL19pbnRlcm5hbC9vYmplY3RzL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSxNQUFNLE9BQU8scUJBQXFCO0lBRzlCLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDcEMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FBQztRQUN0RSxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxZQUFZLE1BQXlDO1FBQ2pELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLE9BQWUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQ3pLLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxzQkFBc0I7SUFHL0IsTUFBTSxDQUFDLFNB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LFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUNwQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFO1lBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUFDO1FBQzdELE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksTUFBeUM7UUFDakQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsSUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQUM7UUFDdkosT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vLyBDb2RlIGdlbmVyYXRlZCBieSBzZGtnZW5cbi8vIERPIE5PVCBFRElUIS5cbi8vXG4vLyBPYmplY3RzLlxuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5pbXBvcnQgKiBhcyBpIGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5cbmV4cG9ydCBjbGFzcyBBSHVuZGFsQWRkVGFza1JlcXVlc3QgaW1wbGVtZW50cyBpLkFIdW5kYWxBZGRUYXNrUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbmV3VGFzazogQUh1bmRhbFRhc2s7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBSHVuZGFsQWRkVGFza1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBBSHVuZGFsQWRkVGFza1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ubmV3VGFzaykge20ubmV3VGFzayA9IEFIdW5kYWxUYXNrLmZyb21Qcm90byhwcm90by5uZXdUYXNrKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQUh1bmRhbEFkZFRhc2tSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmV3VGFzayAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5uZXdUYXNrICE9PSBudWxsKSB7dG9SZXR1cm5bJ25ld1Rhc2snXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubmV3VGFzayA/ICh0aGlzLm5ld1Rhc2sgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubmV3VGFzazt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBSHVuZGFsQWRkVGFza1Jlc3BvbnNlIGltcGxlbWVudHMgaS5BSHVuZGFsQWRkVGFza1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBhZGRTdWNjZXNmdWxsOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQUh1bmRhbEFkZFRhc2tSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEFIdW5kYWxBZGRUYXNrUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFIdW5kYWxBZGRUYXNrUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hZGRTdWNjZXNmdWxsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhZGRTdWNjZXNmdWxsJ10gPSB0aGlzLmFkZFN1Y2Nlc2Z1bGw7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQUh1bmRhbERlbGV0ZVRhc2tSZXF1ZXN0IGltcGxlbWVudHMgaS5BSHVuZGFsRGVsZXRlVGFza1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIHRhc2tJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQUh1bmRhbERlbGV0ZVRhc2tSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQUh1bmRhbERlbGV0ZVRhc2tSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BSHVuZGFsRGVsZXRlVGFza1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50YXNrSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Rhc2tJZCddID0gdGhpcy50YXNrSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQUh1bmRhbERlbGV0ZVRhc2tSZXNwb25zZSBpbXBsZW1lbnRzIGkuQUh1bmRhbERlbGV0ZVRhc2tSZXNwb25zZUludGVyZmFjZSB7XG4gICAgZGVsZXRlU3VjY2VzZnVsbDogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEFIdW5kYWxEZWxldGVUYXNrUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBBSHVuZGFsRGVsZXRlVGFza1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BSHVuZGFsRGVsZXRlVGFza1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVsZXRlU3VjY2VzZnVsbCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGVsZXRlU3VjY2VzZnVsbCddID0gdGhpcy5kZWxldGVTdWNjZXNmdWxsO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFIdW5kYWxFZGl0VGFza1JlcXVlc3QgaW1wbGVtZW50cyBpLkFIdW5kYWxFZGl0VGFza1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGVkaXRlZFRhc2s6IEFIdW5kYWxUYXNrO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQUh1bmRhbEVkaXRUYXNrUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEFIdW5kYWxFZGl0VGFza1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZWRpdGVkVGFzaykge20uZWRpdGVkVGFzayA9IEFIdW5kYWxUYXNrLmZyb21Qcm90byhwcm90by5lZGl0ZWRUYXNrKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQUh1bmRhbEVkaXRUYXNrUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVkaXRlZFRhc2sgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZWRpdGVkVGFzayAhPT0gbnVsbCkge3RvUmV0dXJuWydlZGl0ZWRUYXNrJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmVkaXRlZFRhc2sgPyAodGhpcy5lZGl0ZWRUYXNrIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmVkaXRlZFRhc2s7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQUh1bmRhbEVkaXRUYXNrUmVzcG9uc2UgaW1wbGVtZW50cyBpLkFIdW5kYWxFZGl0VGFza1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBlZGl0U3VjY2VzZnVsbDogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEFIdW5kYWxFZGl0VGFza1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQUh1bmRhbEVkaXRUYXNrUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFIdW5kYWxFZGl0VGFza1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZWRpdFN1Y2Nlc2Z1bGwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2VkaXRTdWNjZXNmdWxsJ10gPSB0aGlzLmVkaXRTdWNjZXNmdWxsO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFIdW5kYWxHZXRTcGVjaWZpY1Rhc2tSZXF1ZXN0IGltcGxlbWVudHMgaS5BSHVuZGFsR2V0U3BlY2lmaWNUYXNrUmVxdWVzdEludGVyZmFjZSB7XG4gICAgdGFza0lkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBSHVuZGFsR2V0U3BlY2lmaWNUYXNrUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEFIdW5kYWxHZXRTcGVjaWZpY1Rhc2tSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BSHVuZGFsR2V0U3BlY2lmaWNUYXNrUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhc2tJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGFza0lkJ10gPSB0aGlzLnRhc2tJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBSHVuZGFsR2V0U3BlY2lmaWNUYXNrUmVzcG9uc2UgaW1wbGVtZW50cyBpLkFIdW5kYWxHZXRTcGVjaWZpY1Rhc2tSZXNwb25zZUludGVyZmFjZSB7XG4gICAgYWh1bmRhbFRhc2s6IEFIdW5kYWxUYXNrO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQUh1bmRhbEdldFNwZWNpZmljVGFza1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQUh1bmRhbEdldFNwZWNpZmljVGFza1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmFodW5kYWxUYXNrKSB7bS5haHVuZGFsVGFzayA9IEFIdW5kYWxUYXNrLmZyb21Qcm90byhwcm90by5haHVuZGFsVGFzayk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFIdW5kYWxHZXRTcGVjaWZpY1Rhc2tSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFodW5kYWxUYXNrICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmFodW5kYWxUYXNrICE9PSBudWxsKSB7dG9SZXR1cm5bJ2FodW5kYWxUYXNrJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmFodW5kYWxUYXNrID8gKHRoaXMuYWh1bmRhbFRhc2sgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYWh1bmRhbFRhc2s7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQUh1bmRhbEdldFRhc2tzUmVxdWVzdCBpbXBsZW1lbnRzIGkuQUh1bmRhbEdldFRhc2tzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgdGFza0lkOiBudW1iZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBSHVuZGFsR2V0VGFza3NSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQUh1bmRhbEdldFRhc2tzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQUh1bmRhbEdldFRhc2tzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhc2tJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGFza0lkJ10gPSB0aGlzLnRhc2tJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBSHVuZGFsR2V0VGFza3NSZXNwb25zZSBpbXBsZW1lbnRzIGkuQUh1bmRhbEdldFRhc2tzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGFodW5kYWxUYXNrOiBBSHVuZGFsVGFza1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQUh1bmRhbEdldFRhc2tzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBBSHVuZGFsR2V0VGFza3NSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5haHVuZGFsVGFzaykge20uYWh1bmRhbFRhc2sgPSBwcm90by5haHVuZGFsVGFzay5tYXAoQUh1bmRhbFRhc2suZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQUh1bmRhbEdldFRhc2tzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5haHVuZGFsVGFzayAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5haHVuZGFsVGFzayAhPT0gbnVsbCkge3RvUmV0dXJuWydhaHVuZGFsVGFzayddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5haHVuZGFsVGFzayA/ICh0aGlzLmFodW5kYWxUYXNrIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmFodW5kYWxUYXNrO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFIdW5kYWxUYXNrIGltcGxlbWVudHMgaS5BSHVuZGFsVGFza0ludGVyZmFjZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB0YXNrVGl0bGU6IHN0cmluZztcbiAgICBkYXk6IG51bWJlcjtcbiAgICBtb250aDogbnVtYmVyO1xuICAgIHllYXI6IG51bWJlcjtcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIGNvbXBsZXRlZDogYm9vbGVhbjtcbiAgICBpc0RlbGV0ZWQ6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBSHVuZGFsVGFzayB7XG4gICAgICAgIGxldCBtID0gbmV3IEFIdW5kYWxUYXNrKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BSHVuZGFsVGFza0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50YXNrVGl0bGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Rhc2tUaXRsZSddID0gdGhpcy50YXNrVGl0bGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGF5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkYXknXSA9IHRoaXMuZGF5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1vbnRoICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtb250aCddID0gdGhpcy5tb250aDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy55ZWFyICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd5ZWFyJ10gPSB0aGlzLnllYXI7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rlc2NyaXB0aW9uJ10gPSB0aGlzLmRlc2NyaXB0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbXBsZXRlZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29tcGxldGVkJ10gPSB0aGlzLmNvbXBsZXRlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc0RlbGV0ZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lzRGVsZXRlZCddID0gdGhpcy5pc0RlbGV0ZWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlSGRvVG9kb1JlcXVlc3QgaW1wbGVtZW50cyBpLkNyZWF0ZUhkb1RvZG9SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB0b2RvOiBIZG9Ub2RvSXRlbTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZUhkb1RvZG9SZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlSGRvVG9kb1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udG9kbykge20udG9kbyA9IEhkb1RvZG9JdGVtLmZyb21Qcm90byhwcm90by50b2RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlSGRvVG9kb1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50b2RvICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnRvZG8gIT09IG51bGwpIHt0b1JldHVyblsndG9kbyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50b2RvID8gKHRoaXMudG9kbyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy50b2RvO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZUhkb1RvZG9SZXNwb25zZSBpbXBsZW1lbnRzIGkuQ3JlYXRlSGRvVG9kb1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICB0b2RvOiBIZG9Ub2RvSXRlbTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZUhkb1RvZG9SZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZUhkb1RvZG9SZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by50b2RvKSB7bS50b2RvID0gSGRvVG9kb0l0ZW0uZnJvbVByb3RvKHByb3RvLnRvZG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVIZG9Ub2RvUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50b2RvICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnRvZG8gIT09IG51bGwpIHt0b1JldHVyblsndG9kbyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50b2RvID8gKHRoaXMudG9kbyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy50b2RvO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlbGV0ZUhkb1RvZG9SZXF1ZXN0IGltcGxlbWVudHMgaS5EZWxldGVIZG9Ub2RvUmVxdWVzdEludGVyZmFjZSB7XG4gICAgaWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IERlbGV0ZUhkb1RvZG9SZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRGVsZXRlSGRvVG9kb1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkRlbGV0ZUhkb1RvZG9SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lkJ10gPSB0aGlzLmlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlbGV0ZUhkb1RvZG9SZXNwb25zZSBpbXBsZW1lbnRzIGkuRGVsZXRlSGRvVG9kb1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBEZWxldGVIZG9Ub2RvUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBEZWxldGVIZG9Ub2RvUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkRlbGV0ZUhkb1RvZG9SZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lc3NhZ2UgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lc3NhZ2UnXSA9IHRoaXMubWVzc2FnZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRIZG9Ub2RvUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0SGRvVG9kb1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRIZG9Ub2RvUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldEhkb1RvZG9SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRIZG9Ub2RvUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRIZG9Ub2RvUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldEhkb1RvZG9SZXNwb25zZUludGVyZmFjZSB7XG4gICAgdG9kbzogSGRvVG9kb0l0ZW07XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRIZG9Ub2RvUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRIZG9Ub2RvUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udG9kbykge20udG9kbyA9IEhkb1RvZG9JdGVtLmZyb21Qcm90byhwcm90by50b2RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0SGRvVG9kb1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudG9kbyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50b2RvICE9PSBudWxsKSB7dG9SZXR1cm5bJ3RvZG8nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudG9kbyA/ICh0aGlzLnRvZG8gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudG9kbzt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBIZG9Ub2RvSXRlbSBpbXBsZW1lbnRzIGkuSGRvVG9kb0l0ZW1JbnRlcmZhY2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIGNvbXBsZXRlZDogYm9vbGVhbjtcbiAgICBkZWxldGVkOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogSGRvVG9kb0l0ZW0ge1xuICAgICAgICBsZXQgbSA9IG5ldyBIZG9Ub2RvSXRlbSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuSGRvVG9kb0l0ZW1JbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGl0bGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RpdGxlJ10gPSB0aGlzLnRpdGxlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlc2NyaXB0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkZXNjcmlwdGlvbiddID0gdGhpcy5kZXNjcmlwdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb21wbGV0ZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbXBsZXRlZCddID0gdGhpcy5jb21wbGV0ZWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVsZXRlZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGVsZXRlZCddID0gdGhpcy5kZWxldGVkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RIZG9Ub2RvUmVxdWVzdCBpbXBsZW1lbnRzIGkuTGlzdEhkb1RvZG9SZXF1ZXN0SW50ZXJmYWNlIHtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RIZG9Ub2RvUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RIZG9Ub2RvUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdEhkb1RvZG9SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdEhkb1RvZG9SZXNwb25zZSBpbXBsZW1lbnRzIGkuTGlzdEhkb1RvZG9SZXNwb25zZUludGVyZmFjZSB7XG4gICAgdG9kb3M6IEhkb1RvZG9JdGVtW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0SGRvVG9kb1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdEhkb1RvZG9SZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by50b2Rvcykge20udG9kb3MgPSBwcm90by50b2Rvcy5tYXAoSGRvVG9kb0l0ZW0uZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdEhkb1RvZG9SZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRvZG9zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnRvZG9zICE9PSBudWxsKSB7dG9SZXR1cm5bJ3RvZG9zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnRvZG9zID8gKHRoaXMudG9kb3MgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudG9kb3M7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTU11Z290Q3JlYXRlVGFza1JlcXVlc3QgaW1wbGVtZW50cyBpLk1NdWdvdENyZWF0ZVRhc2tSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB0YXNrOiBNTXVnb3RUYXNrO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTU11Z290Q3JlYXRlVGFza1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBNTXVnb3RDcmVhdGVUYXNrUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by50YXNrKSB7bS50YXNrID0gTU11Z290VGFzay5mcm9tUHJvdG8ocHJvdG8udGFzayk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLk1NdWdvdENyZWF0ZVRhc2tSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGFzayAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50YXNrICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Rhc2snXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudGFzayA/ICh0aGlzLnRhc2sgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudGFzazt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNTXVnb3RDcmVhdGVUYXNrUmVzcG9uc2UgaW1wbGVtZW50cyBpLk1NdWdvdENyZWF0ZVRhc2tSZXNwb25zZUludGVyZmFjZSB7XG4gICAgaXNDcmVhdGVkOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTU11Z290Q3JlYXRlVGFza1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTU11Z290Q3JlYXRlVGFza1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5NTXVnb3RDcmVhdGVUYXNrUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc0NyZWF0ZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lzQ3JlYXRlZCddID0gdGhpcy5pc0NyZWF0ZWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTU11Z290RGVsZXRlVGFza1JlcXVlc3QgaW1wbGVtZW50cyBpLk1NdWdvdERlbGV0ZVRhc2tSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB0YXNrSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IE1NdWdvdERlbGV0ZVRhc2tSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTU11Z290RGVsZXRlVGFza1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLk1NdWdvdERlbGV0ZVRhc2tSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGFza0lkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0YXNrSWQnXSA9IHRoaXMudGFza0lkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1NdWdvdExpc3RUYXNrUmVxdWVzdCBpbXBsZW1lbnRzIGkuTU11Z290TGlzdFRhc2tSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB0YXNrSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IE1NdWdvdExpc3RUYXNrUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IE1NdWdvdExpc3RUYXNrUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTU11Z290TGlzdFRhc2tSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGFza0lkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0YXNrSWQnXSA9IHRoaXMudGFza0lkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1NdWdvdExpc3RUYXNrUmVzcG9uc2UgaW1wbGVtZW50cyBpLk1NdWdvdExpc3RUYXNrUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHRhc2s6IE1NdWdvdFRhc2s7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBNTXVnb3RMaXN0VGFza1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTU11Z290TGlzdFRhc2tSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by50YXNrKSB7bS50YXNrID0gTU11Z290VGFzay5mcm9tUHJvdG8ocHJvdG8udGFzayk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLk1NdWdvdExpc3RUYXNrUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50YXNrICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnRhc2sgIT09IG51bGwpIHt0b1JldHVyblsndGFzayddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50YXNrID8gKHRoaXMudGFzayBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy50YXNrO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1NdWdvdFRhc2sgaW1wbGVtZW50cyBpLk1NdWdvdFRhc2tJbnRlcmZhY2Uge1xuICAgIHRhc2tOYW1lOiBzdHJpbmc7XG4gICAgdGFza0Rlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgaXNDb21wbGV0ZTogYm9vbGVhbjtcbiAgICB0YXNrSWQ6IHN0cmluZztcbiAgICBpc0RlbGV0ZWQ6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBNTXVnb3RUYXNrIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTU11Z290VGFzaygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTU11Z290VGFza0ludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhc2tOYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0YXNrTmFtZSddID0gdGhpcy50YXNrTmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50YXNrRGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Rhc2tEZXNjcmlwdGlvbiddID0gdGhpcy50YXNrRGVzY3JpcHRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaXNDb21wbGV0ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaXNDb21wbGV0ZSddID0gdGhpcy5pc0NvbXBsZXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhc2tJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGFza0lkJ10gPSB0aGlzLnRhc2tJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc0RlbGV0ZWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lzRGVsZXRlZCddID0gdGhpcy5pc0RlbGV0ZWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlSGRvVG9kb1JlcXVlc3QgaW1wbGVtZW50cyBpLlVwZGF0ZUhkb1RvZG9SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICB0b2RvOiBIZG9Ub2RvSXRlbTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZUhkb1RvZG9SZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlSGRvVG9kb1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udG9kbykge20udG9kbyA9IEhkb1RvZG9JdGVtLmZyb21Qcm90byhwcm90by50b2RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlSGRvVG9kb1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50b2RvICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnRvZG8gIT09IG51bGwpIHt0b1JldHVyblsndG9kbyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50b2RvID8gKHRoaXMudG9kbyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy50b2RvO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZUhkb1RvZG9SZXNwb25zZSBpbXBsZW1lbnRzIGkuVXBkYXRlSGRvVG9kb1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICB0b2RvOiBIZG9Ub2RvSXRlbTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZUhkb1RvZG9SZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZUhkb1RvZG9SZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by50b2RvKSB7bS50b2RvID0gSGRvVG9kb0l0ZW0uZnJvbVByb3RvKHByb3RvLnRvZG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVIZG9Ub2RvUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50b2RvICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnRvZG8gIT09IG51bGwpIHt0b1JldHVyblsndG9kbyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy50b2RvID8gKHRoaXMudG9kbyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy50b2RvO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuIl19
|