@aneoconsultingfr/armonik.api.angular 3.11.0-edge.89.ab31d7c → 3.11.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.
Files changed (55) hide show
  1. package/README.md +1 -1
  2. package/esm2022/lib/generated/applications-common.pb.mjs +22 -618
  3. package/esm2022/lib/generated/applications-fields.pb.mjs +231 -0
  4. package/esm2022/lib/generated/applications-filters.pb.mjs +349 -0
  5. package/esm2022/lib/generated/applications-service.pb.mjs +1 -1
  6. package/esm2022/lib/generated/applications-service.pbsc.mjs +6 -36
  7. package/esm2022/lib/generated/events-common.pb.mjs +19 -3
  8. package/esm2022/lib/generated/filters-common.pb.mjs +642 -0
  9. package/esm2022/lib/generated/partitions-common.pb.mjs +25 -433
  10. package/esm2022/lib/generated/partitions-fields.pb.mjs +233 -0
  11. package/esm2022/lib/generated/partitions-filters.pb.mjs +431 -0
  12. package/esm2022/lib/generated/partitions-service.pb.mjs +1 -1
  13. package/esm2022/lib/generated/partitions-service.pbsc.mjs +10 -10
  14. package/esm2022/lib/generated/results-common.pb.mjs +33 -565
  15. package/esm2022/lib/generated/results-fields.pb.mjs +234 -0
  16. package/esm2022/lib/generated/results-filters.pb.mjs +546 -0
  17. package/esm2022/lib/generated/results-service.pb.mjs +1 -1
  18. package/esm2022/lib/generated/results-service.pbsc.mjs +39 -39
  19. package/esm2022/lib/generated/sessions-common.pb.mjs +104 -822
  20. package/esm2022/lib/generated/sessions-fields.pb.mjs +504 -0
  21. package/esm2022/lib/generated/sessions-filters.pb.mjs +602 -0
  22. package/esm2022/lib/generated/sessions-service.pb.mjs +1 -1
  23. package/esm2022/lib/generated/sessions-service.pbsc.mjs +24 -24
  24. package/esm2022/lib/generated/tasks-common.pb.mjs +166 -900
  25. package/esm2022/lib/generated/tasks-fields.pb.mjs +513 -0
  26. package/esm2022/lib/generated/tasks-filters.pb.mjs +602 -0
  27. package/esm2022/lib/generated/tasks-service.pb.mjs +1 -1
  28. package/esm2022/lib/generated/tasks-service.pbsc.mjs +36 -36
  29. package/esm2022/lib/index.mjs +22 -12
  30. package/fesm2022/aneoconsultingfr-armonik.api.angular.mjs +11857 -10006
  31. package/fesm2022/aneoconsultingfr-armonik.api.angular.mjs.map +1 -1
  32. package/lib/generated/applications-common.pb.d.ts +11 -388
  33. package/lib/generated/applications-fields.pb.d.ts +153 -0
  34. package/lib/generated/applications-filters.pb.d.ts +222 -0
  35. package/lib/generated/applications-service.pbsc.d.ts +5 -21
  36. package/lib/generated/events-common.pb.d.ts +5 -0
  37. package/lib/generated/filters-common.pb.d.ts +408 -0
  38. package/lib/generated/partitions-common.pb.d.ts +15 -260
  39. package/lib/generated/partitions-fields.pb.d.ts +155 -0
  40. package/lib/generated/partitions-filters.pb.d.ts +240 -0
  41. package/lib/generated/partitions-service.pbsc.d.ts +9 -9
  42. package/lib/generated/results-common.pb.d.ts +24 -295
  43. package/lib/generated/results-fields.pb.d.ts +156 -0
  44. package/lib/generated/results-filters.pb.d.ts +315 -0
  45. package/lib/generated/results-service.pbsc.d.ts +38 -38
  46. package/lib/generated/sessions-common.pb.d.ts +76 -489
  47. package/lib/generated/sessions-fields.pb.d.ts +318 -0
  48. package/lib/generated/sessions-filters.pb.d.ts +327 -0
  49. package/lib/generated/sessions-service.pbsc.d.ts +19 -19
  50. package/lib/generated/tasks-common.pb.d.ts +139 -561
  51. package/lib/generated/tasks-fields.pb.d.ts +327 -0
  52. package/lib/generated/tasks-filters.pb.d.ts +327 -0
  53. package/lib/generated/tasks-service.pbsc.d.ts +31 -31
  54. package/lib/index.d.ts +21 -11
  55. package/package.json +2 -2
@@ -0,0 +1,513 @@
1
+ import { BinaryReader, BinaryWriter } from 'google-protobuf';
2
+ export var TaskSummaryEnumField;
3
+ (function (TaskSummaryEnumField) {
4
+ TaskSummaryEnumField[TaskSummaryEnumField["TASK_SUMMARY_ENUM_FIELD_UNSPECIFIED"] = 0] = "TASK_SUMMARY_ENUM_FIELD_UNSPECIFIED";
5
+ TaskSummaryEnumField[TaskSummaryEnumField["TASK_SUMMARY_ENUM_FIELD_TASK_ID"] = 16] = "TASK_SUMMARY_ENUM_FIELD_TASK_ID";
6
+ TaskSummaryEnumField[TaskSummaryEnumField["TASK_SUMMARY_ENUM_FIELD_SESSION_ID"] = 1] = "TASK_SUMMARY_ENUM_FIELD_SESSION_ID";
7
+ TaskSummaryEnumField[TaskSummaryEnumField["TASK_SUMMARY_ENUM_FIELD_OWNER_POD_ID"] = 9] = "TASK_SUMMARY_ENUM_FIELD_OWNER_POD_ID";
8
+ TaskSummaryEnumField[TaskSummaryEnumField["TASK_SUMMARY_ENUM_FIELD_INITIAL_TASK_ID"] = 10] = "TASK_SUMMARY_ENUM_FIELD_INITIAL_TASK_ID";
9
+ TaskSummaryEnumField[TaskSummaryEnumField["TASK_SUMMARY_ENUM_FIELD_STATUS"] = 2] = "TASK_SUMMARY_ENUM_FIELD_STATUS";
10
+ TaskSummaryEnumField[TaskSummaryEnumField["TASK_SUMMARY_ENUM_FIELD_CREATED_AT"] = 3] = "TASK_SUMMARY_ENUM_FIELD_CREATED_AT";
11
+ TaskSummaryEnumField[TaskSummaryEnumField["TASK_SUMMARY_ENUM_FIELD_SUBMITTED_AT"] = 11] = "TASK_SUMMARY_ENUM_FIELD_SUBMITTED_AT";
12
+ TaskSummaryEnumField[TaskSummaryEnumField["TASK_SUMMARY_ENUM_FIELD_STARTED_AT"] = 4] = "TASK_SUMMARY_ENUM_FIELD_STARTED_AT";
13
+ TaskSummaryEnumField[TaskSummaryEnumField["TASK_SUMMARY_ENUM_FIELD_ENDED_AT"] = 5] = "TASK_SUMMARY_ENUM_FIELD_ENDED_AT";
14
+ TaskSummaryEnumField[TaskSummaryEnumField["TASK_SUMMARY_ENUM_FIELD_CREATION_TO_END_DURATION"] = 6] = "TASK_SUMMARY_ENUM_FIELD_CREATION_TO_END_DURATION";
15
+ TaskSummaryEnumField[TaskSummaryEnumField["TASK_SUMMARY_ENUM_FIELD_PROCESSING_TO_END_DURATION"] = 7] = "TASK_SUMMARY_ENUM_FIELD_PROCESSING_TO_END_DURATION";
16
+ TaskSummaryEnumField[TaskSummaryEnumField["TASK_SUMMARY_ENUM_FIELD_POD_TTL"] = 12] = "TASK_SUMMARY_ENUM_FIELD_POD_TTL";
17
+ TaskSummaryEnumField[TaskSummaryEnumField["TASK_SUMMARY_ENUM_FIELD_POD_HOSTNAME"] = 13] = "TASK_SUMMARY_ENUM_FIELD_POD_HOSTNAME";
18
+ TaskSummaryEnumField[TaskSummaryEnumField["TASK_SUMMARY_ENUM_FIELD_RECEIVED_AT"] = 14] = "TASK_SUMMARY_ENUM_FIELD_RECEIVED_AT";
19
+ TaskSummaryEnumField[TaskSummaryEnumField["TASK_SUMMARY_ENUM_FIELD_ACQUIRED_AT"] = 15] = "TASK_SUMMARY_ENUM_FIELD_ACQUIRED_AT";
20
+ TaskSummaryEnumField[TaskSummaryEnumField["TASK_SUMMARY_ENUM_FIELD_ERROR"] = 8] = "TASK_SUMMARY_ENUM_FIELD_ERROR";
21
+ })(TaskSummaryEnumField || (TaskSummaryEnumField = {}));
22
+ export var TaskOptionEnumField;
23
+ (function (TaskOptionEnumField) {
24
+ TaskOptionEnumField[TaskOptionEnumField["TASK_OPTION_ENUM_FIELD_UNSPECIFIED"] = 0] = "TASK_OPTION_ENUM_FIELD_UNSPECIFIED";
25
+ TaskOptionEnumField[TaskOptionEnumField["TASK_OPTION_ENUM_FIELD_MAX_DURATION"] = 1] = "TASK_OPTION_ENUM_FIELD_MAX_DURATION";
26
+ TaskOptionEnumField[TaskOptionEnumField["TASK_OPTION_ENUM_FIELD_MAX_RETRIES"] = 2] = "TASK_OPTION_ENUM_FIELD_MAX_RETRIES";
27
+ TaskOptionEnumField[TaskOptionEnumField["TASK_OPTION_ENUM_FIELD_PRIORITY"] = 3] = "TASK_OPTION_ENUM_FIELD_PRIORITY";
28
+ TaskOptionEnumField[TaskOptionEnumField["TASK_OPTION_ENUM_FIELD_PARTITION_ID"] = 4] = "TASK_OPTION_ENUM_FIELD_PARTITION_ID";
29
+ TaskOptionEnumField[TaskOptionEnumField["TASK_OPTION_ENUM_FIELD_APPLICATION_NAME"] = 5] = "TASK_OPTION_ENUM_FIELD_APPLICATION_NAME";
30
+ TaskOptionEnumField[TaskOptionEnumField["TASK_OPTION_ENUM_FIELD_APPLICATION_VERSION"] = 6] = "TASK_OPTION_ENUM_FIELD_APPLICATION_VERSION";
31
+ TaskOptionEnumField[TaskOptionEnumField["TASK_OPTION_ENUM_FIELD_APPLICATION_NAMESPACE"] = 7] = "TASK_OPTION_ENUM_FIELD_APPLICATION_NAMESPACE";
32
+ TaskOptionEnumField[TaskOptionEnumField["TASK_OPTION_ENUM_FIELD_APPLICATION_SERVICE"] = 8] = "TASK_OPTION_ENUM_FIELD_APPLICATION_SERVICE";
33
+ TaskOptionEnumField[TaskOptionEnumField["TASK_OPTION_ENUM_FIELD_ENGINE_TYPE"] = 9] = "TASK_OPTION_ENUM_FIELD_ENGINE_TYPE";
34
+ })(TaskOptionEnumField || (TaskOptionEnumField = {}));
35
+ /**
36
+ * Message implementation for armonik.api.grpc.v1.tasks.TaskSummaryField
37
+ */
38
+ export class TaskSummaryField {
39
+ static { this.id = 'armonik.api.grpc.v1.tasks.TaskSummaryField'; }
40
+ /**
41
+ * Deserialize binary data to message
42
+ * @param instance message instance
43
+ */
44
+ static deserializeBinary(bytes) {
45
+ const instance = new TaskSummaryField();
46
+ TaskSummaryField.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
47
+ return instance;
48
+ }
49
+ /**
50
+ * Check all the properties and set default protobuf values if necessary
51
+ * @param _instance message instance
52
+ */
53
+ static refineValues(_instance) {
54
+ _instance.field = _instance.field || 0;
55
+ }
56
+ /**
57
+ * Deserializes / reads binary message into message instance using provided binary reader
58
+ * @param _instance message instance
59
+ * @param _reader binary reader instance
60
+ */
61
+ static deserializeBinaryFromReader(_instance, _reader) {
62
+ while (_reader.nextField()) {
63
+ if (_reader.isEndGroup())
64
+ break;
65
+ switch (_reader.getFieldNumber()) {
66
+ case 1:
67
+ _instance.field = _reader.readEnum();
68
+ break;
69
+ default:
70
+ _reader.skipField();
71
+ }
72
+ }
73
+ TaskSummaryField.refineValues(_instance);
74
+ }
75
+ /**
76
+ * Serializes a message to binary format using provided binary reader
77
+ * @param _instance message instance
78
+ * @param _writer binary writer instance
79
+ */
80
+ static serializeBinaryToWriter(_instance, _writer) {
81
+ if (_instance.field) {
82
+ _writer.writeEnum(1, _instance.field);
83
+ }
84
+ }
85
+ /**
86
+ * Message constructor. Initializes the properties and applies default Protobuf values if necessary
87
+ * @param _value initial values object or instance of TaskSummaryField to deeply clone from
88
+ */
89
+ constructor(_value) {
90
+ _value = _value || {};
91
+ this.field = _value.field;
92
+ TaskSummaryField.refineValues(this);
93
+ }
94
+ get field() {
95
+ return this._field;
96
+ }
97
+ set field(value) {
98
+ this._field = value;
99
+ }
100
+ /**
101
+ * Serialize message to binary data
102
+ * @param instance message instance
103
+ */
104
+ serializeBinary() {
105
+ const writer = new BinaryWriter();
106
+ TaskSummaryField.serializeBinaryToWriter(this, writer);
107
+ return writer.getResultBuffer();
108
+ }
109
+ /**
110
+ * Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
111
+ */
112
+ toObject() {
113
+ return {
114
+ field: this.field
115
+ };
116
+ }
117
+ /**
118
+ * Convenience method to support JSON.stringify(message), replicates the structure of toObject()
119
+ */
120
+ toJSON() {
121
+ return this.toObject();
122
+ }
123
+ /**
124
+ * Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
125
+ * Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
126
+ * If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
127
+ */
128
+ toProtobufJSON(
129
+ // @ts-ignore
130
+ options) {
131
+ return {
132
+ field: TaskSummaryEnumField[this.field === null || this.field === undefined ? 0 : this.field]
133
+ };
134
+ }
135
+ }
136
+ /**
137
+ * Message implementation for armonik.api.grpc.v1.tasks.TaskOptionField
138
+ */
139
+ export class TaskOptionField {
140
+ static { this.id = 'armonik.api.grpc.v1.tasks.TaskOptionField'; }
141
+ /**
142
+ * Deserialize binary data to message
143
+ * @param instance message instance
144
+ */
145
+ static deserializeBinary(bytes) {
146
+ const instance = new TaskOptionField();
147
+ TaskOptionField.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
148
+ return instance;
149
+ }
150
+ /**
151
+ * Check all the properties and set default protobuf values if necessary
152
+ * @param _instance message instance
153
+ */
154
+ static refineValues(_instance) {
155
+ _instance.field = _instance.field || 0;
156
+ }
157
+ /**
158
+ * Deserializes / reads binary message into message instance using provided binary reader
159
+ * @param _instance message instance
160
+ * @param _reader binary reader instance
161
+ */
162
+ static deserializeBinaryFromReader(_instance, _reader) {
163
+ while (_reader.nextField()) {
164
+ if (_reader.isEndGroup())
165
+ break;
166
+ switch (_reader.getFieldNumber()) {
167
+ case 1:
168
+ _instance.field = _reader.readEnum();
169
+ break;
170
+ default:
171
+ _reader.skipField();
172
+ }
173
+ }
174
+ TaskOptionField.refineValues(_instance);
175
+ }
176
+ /**
177
+ * Serializes a message to binary format using provided binary reader
178
+ * @param _instance message instance
179
+ * @param _writer binary writer instance
180
+ */
181
+ static serializeBinaryToWriter(_instance, _writer) {
182
+ if (_instance.field) {
183
+ _writer.writeEnum(1, _instance.field);
184
+ }
185
+ }
186
+ /**
187
+ * Message constructor. Initializes the properties and applies default Protobuf values if necessary
188
+ * @param _value initial values object or instance of TaskOptionField to deeply clone from
189
+ */
190
+ constructor(_value) {
191
+ _value = _value || {};
192
+ this.field = _value.field;
193
+ TaskOptionField.refineValues(this);
194
+ }
195
+ get field() {
196
+ return this._field;
197
+ }
198
+ set field(value) {
199
+ this._field = value;
200
+ }
201
+ /**
202
+ * Serialize message to binary data
203
+ * @param instance message instance
204
+ */
205
+ serializeBinary() {
206
+ const writer = new BinaryWriter();
207
+ TaskOptionField.serializeBinaryToWriter(this, writer);
208
+ return writer.getResultBuffer();
209
+ }
210
+ /**
211
+ * Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
212
+ */
213
+ toObject() {
214
+ return {
215
+ field: this.field
216
+ };
217
+ }
218
+ /**
219
+ * Convenience method to support JSON.stringify(message), replicates the structure of toObject()
220
+ */
221
+ toJSON() {
222
+ return this.toObject();
223
+ }
224
+ /**
225
+ * Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
226
+ * Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
227
+ * If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
228
+ */
229
+ toProtobufJSON(
230
+ // @ts-ignore
231
+ options) {
232
+ return {
233
+ field: TaskOptionEnumField[this.field === null || this.field === undefined ? 0 : this.field]
234
+ };
235
+ }
236
+ }
237
+ /**
238
+ * Message implementation for armonik.api.grpc.v1.tasks.TaskOptionGenericField
239
+ */
240
+ export class TaskOptionGenericField {
241
+ static { this.id = 'armonik.api.grpc.v1.tasks.TaskOptionGenericField'; }
242
+ /**
243
+ * Deserialize binary data to message
244
+ * @param instance message instance
245
+ */
246
+ static deserializeBinary(bytes) {
247
+ const instance = new TaskOptionGenericField();
248
+ TaskOptionGenericField.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
249
+ return instance;
250
+ }
251
+ /**
252
+ * Check all the properties and set default protobuf values if necessary
253
+ * @param _instance message instance
254
+ */
255
+ static refineValues(_instance) {
256
+ _instance.field = _instance.field || '';
257
+ }
258
+ /**
259
+ * Deserializes / reads binary message into message instance using provided binary reader
260
+ * @param _instance message instance
261
+ * @param _reader binary reader instance
262
+ */
263
+ static deserializeBinaryFromReader(_instance, _reader) {
264
+ while (_reader.nextField()) {
265
+ if (_reader.isEndGroup())
266
+ break;
267
+ switch (_reader.getFieldNumber()) {
268
+ case 1:
269
+ _instance.field = _reader.readString();
270
+ break;
271
+ default:
272
+ _reader.skipField();
273
+ }
274
+ }
275
+ TaskOptionGenericField.refineValues(_instance);
276
+ }
277
+ /**
278
+ * Serializes a message to binary format using provided binary reader
279
+ * @param _instance message instance
280
+ * @param _writer binary writer instance
281
+ */
282
+ static serializeBinaryToWriter(_instance, _writer) {
283
+ if (_instance.field) {
284
+ _writer.writeString(1, _instance.field);
285
+ }
286
+ }
287
+ /**
288
+ * Message constructor. Initializes the properties and applies default Protobuf values if necessary
289
+ * @param _value initial values object or instance of TaskOptionGenericField to deeply clone from
290
+ */
291
+ constructor(_value) {
292
+ _value = _value || {};
293
+ this.field = _value.field;
294
+ TaskOptionGenericField.refineValues(this);
295
+ }
296
+ get field() {
297
+ return this._field;
298
+ }
299
+ set field(value) {
300
+ this._field = value;
301
+ }
302
+ /**
303
+ * Serialize message to binary data
304
+ * @param instance message instance
305
+ */
306
+ serializeBinary() {
307
+ const writer = new BinaryWriter();
308
+ TaskOptionGenericField.serializeBinaryToWriter(this, writer);
309
+ return writer.getResultBuffer();
310
+ }
311
+ /**
312
+ * Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
313
+ */
314
+ toObject() {
315
+ return {
316
+ field: this.field
317
+ };
318
+ }
319
+ /**
320
+ * Convenience method to support JSON.stringify(message), replicates the structure of toObject()
321
+ */
322
+ toJSON() {
323
+ return this.toObject();
324
+ }
325
+ /**
326
+ * Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
327
+ * Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
328
+ * If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
329
+ */
330
+ toProtobufJSON(
331
+ // @ts-ignore
332
+ options) {
333
+ return {
334
+ field: this.field
335
+ };
336
+ }
337
+ }
338
+ /**
339
+ * Message implementation for armonik.api.grpc.v1.tasks.TaskField
340
+ */
341
+ export class TaskField {
342
+ static { this.id = 'armonik.api.grpc.v1.tasks.TaskField'; }
343
+ /**
344
+ * Deserialize binary data to message
345
+ * @param instance message instance
346
+ */
347
+ static deserializeBinary(bytes) {
348
+ const instance = new TaskField();
349
+ TaskField.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
350
+ return instance;
351
+ }
352
+ /**
353
+ * Check all the properties and set default protobuf values if necessary
354
+ * @param _instance message instance
355
+ */
356
+ static refineValues(_instance) { }
357
+ /**
358
+ * Deserializes / reads binary message into message instance using provided binary reader
359
+ * @param _instance message instance
360
+ * @param _reader binary reader instance
361
+ */
362
+ static deserializeBinaryFromReader(_instance, _reader) {
363
+ while (_reader.nextField()) {
364
+ if (_reader.isEndGroup())
365
+ break;
366
+ switch (_reader.getFieldNumber()) {
367
+ case 1:
368
+ _instance.taskSummaryField = new TaskSummaryField();
369
+ _reader.readMessage(_instance.taskSummaryField, TaskSummaryField.deserializeBinaryFromReader);
370
+ break;
371
+ case 2:
372
+ _instance.taskOptionField = new TaskOptionField();
373
+ _reader.readMessage(_instance.taskOptionField, TaskOptionField.deserializeBinaryFromReader);
374
+ break;
375
+ case 3:
376
+ _instance.taskOptionGenericField = new TaskOptionGenericField();
377
+ _reader.readMessage(_instance.taskOptionGenericField, TaskOptionGenericField.deserializeBinaryFromReader);
378
+ break;
379
+ default:
380
+ _reader.skipField();
381
+ }
382
+ }
383
+ TaskField.refineValues(_instance);
384
+ }
385
+ /**
386
+ * Serializes a message to binary format using provided binary reader
387
+ * @param _instance message instance
388
+ * @param _writer binary writer instance
389
+ */
390
+ static serializeBinaryToWriter(_instance, _writer) {
391
+ if (_instance.taskSummaryField) {
392
+ _writer.writeMessage(1, _instance.taskSummaryField, TaskSummaryField.serializeBinaryToWriter);
393
+ }
394
+ if (_instance.taskOptionField) {
395
+ _writer.writeMessage(2, _instance.taskOptionField, TaskOptionField.serializeBinaryToWriter);
396
+ }
397
+ if (_instance.taskOptionGenericField) {
398
+ _writer.writeMessage(3, _instance.taskOptionGenericField, TaskOptionGenericField.serializeBinaryToWriter);
399
+ }
400
+ }
401
+ /**
402
+ * Message constructor. Initializes the properties and applies default Protobuf values if necessary
403
+ * @param _value initial values object or instance of TaskField to deeply clone from
404
+ */
405
+ constructor(_value) {
406
+ this._field = TaskField.FieldCase.none;
407
+ _value = _value || {};
408
+ this.taskSummaryField = _value.taskSummaryField
409
+ ? new TaskSummaryField(_value.taskSummaryField)
410
+ : undefined;
411
+ this.taskOptionField = _value.taskOptionField
412
+ ? new TaskOptionField(_value.taskOptionField)
413
+ : undefined;
414
+ this.taskOptionGenericField = _value.taskOptionGenericField
415
+ ? new TaskOptionGenericField(_value.taskOptionGenericField)
416
+ : undefined;
417
+ TaskField.refineValues(this);
418
+ }
419
+ get taskSummaryField() {
420
+ return this._taskSummaryField;
421
+ }
422
+ set taskSummaryField(value) {
423
+ if (value !== undefined && value !== null) {
424
+ this._taskOptionField = this._taskOptionGenericField = undefined;
425
+ this._field = TaskField.FieldCase.taskSummaryField;
426
+ }
427
+ this._taskSummaryField = value;
428
+ }
429
+ get taskOptionField() {
430
+ return this._taskOptionField;
431
+ }
432
+ set taskOptionField(value) {
433
+ if (value !== undefined && value !== null) {
434
+ this._taskSummaryField = this._taskOptionGenericField = undefined;
435
+ this._field = TaskField.FieldCase.taskOptionField;
436
+ }
437
+ this._taskOptionField = value;
438
+ }
439
+ get taskOptionGenericField() {
440
+ return this._taskOptionGenericField;
441
+ }
442
+ set taskOptionGenericField(value) {
443
+ if (value !== undefined && value !== null) {
444
+ this._taskSummaryField = this._taskOptionField = undefined;
445
+ this._field = TaskField.FieldCase.taskOptionGenericField;
446
+ }
447
+ this._taskOptionGenericField = value;
448
+ }
449
+ get field() {
450
+ return this._field;
451
+ }
452
+ /**
453
+ * Serialize message to binary data
454
+ * @param instance message instance
455
+ */
456
+ serializeBinary() {
457
+ const writer = new BinaryWriter();
458
+ TaskField.serializeBinaryToWriter(this, writer);
459
+ return writer.getResultBuffer();
460
+ }
461
+ /**
462
+ * Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
463
+ */
464
+ toObject() {
465
+ return {
466
+ taskSummaryField: this.taskSummaryField
467
+ ? this.taskSummaryField.toObject()
468
+ : undefined,
469
+ taskOptionField: this.taskOptionField
470
+ ? this.taskOptionField.toObject()
471
+ : undefined,
472
+ taskOptionGenericField: this.taskOptionGenericField
473
+ ? this.taskOptionGenericField.toObject()
474
+ : undefined
475
+ };
476
+ }
477
+ /**
478
+ * Convenience method to support JSON.stringify(message), replicates the structure of toObject()
479
+ */
480
+ toJSON() {
481
+ return this.toObject();
482
+ }
483
+ /**
484
+ * Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
485
+ * Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
486
+ * If the message itself or some of descendant messages is google.protobuf.Any, you MUST provide a message pool as options. If not, the messagePool is not required
487
+ */
488
+ toProtobufJSON(
489
+ // @ts-ignore
490
+ options) {
491
+ return {
492
+ taskSummaryField: this.taskSummaryField
493
+ ? this.taskSummaryField.toProtobufJSON(options)
494
+ : null,
495
+ taskOptionField: this.taskOptionField
496
+ ? this.taskOptionField.toProtobufJSON(options)
497
+ : null,
498
+ taskOptionGenericField: this.taskOptionGenericField
499
+ ? this.taskOptionGenericField.toProtobufJSON(options)
500
+ : null
501
+ };
502
+ }
503
+ }
504
+ (function (TaskField) {
505
+ let FieldCase;
506
+ (function (FieldCase) {
507
+ FieldCase[FieldCase["none"] = 0] = "none";
508
+ FieldCase[FieldCase["taskSummaryField"] = 1] = "taskSummaryField";
509
+ FieldCase[FieldCase["taskOptionField"] = 2] = "taskOptionField";
510
+ FieldCase[FieldCase["taskOptionGenericField"] = 3] = "taskOptionGenericField";
511
+ })(FieldCase = TaskField.FieldCase || (TaskField.FieldCase = {}));
512
+ })(TaskField || (TaskField = {}));
513
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza3MtZmllbGRzLnBiLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5lb2NvbnN1bHRpbmdmci9hcm1vbmlrLmFwaS5hbmd1bGFyL3NyYy9saWIvZ2VuZXJhdGVkL3Rhc2tzLWZpZWxkcy5wYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFXQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBYyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pFLE1BQU0sQ0FBTixJQUFZLG9CQWtCWDtBQWxCRCxXQUFZLG9CQUFvQjtJQUM5Qiw2SEFBdUMsQ0FBQTtJQUN2QyxzSEFBb0MsQ0FBQTtJQUNwQywySEFBc0MsQ0FBQTtJQUN0QywrSEFBd0MsQ0FBQTtJQUN4QyxzSUFBNEMsQ0FBQTtJQUM1QyxtSEFBa0MsQ0FBQTtJQUNsQywySEFBc0MsQ0FBQTtJQUN0QyxnSUFBeUMsQ0FBQTtJQUN6QywySEFBc0MsQ0FBQTtJQUN0Qyx1SEFBb0MsQ0FBQTtJQUNwQyx1SkFBb0QsQ0FBQTtJQUNwRCwySkFBc0QsQ0FBQTtJQUN0RCxzSEFBb0MsQ0FBQTtJQUNwQyxnSUFBeUMsQ0FBQTtJQUN6Qyw4SEFBd0MsQ0FBQTtJQUN4Qyw4SEFBd0MsQ0FBQTtJQUN4QyxpSEFBaUMsQ0FBQTtBQUNuQyxDQUFDLEVBbEJXLG9CQUFvQixLQUFwQixvQkFBb0IsUUFrQi9CO0FBQ0QsTUFBTSxDQUFOLElBQVksbUJBV1g7QUFYRCxXQUFZLG1CQUFtQjtJQUM3Qix5SEFBc0MsQ0FBQTtJQUN0QywySEFBdUMsQ0FBQTtJQUN2Qyx5SEFBc0MsQ0FBQTtJQUN0QyxtSEFBbUMsQ0FBQTtJQUNuQywySEFBdUMsQ0FBQTtJQUN2QyxtSUFBMkMsQ0FBQTtJQUMzQyx5SUFBOEMsQ0FBQTtJQUM5Qyw2SUFBZ0QsQ0FBQTtJQUNoRCx5SUFBOEMsQ0FBQTtJQUM5Qyx5SEFBc0MsQ0FBQTtBQUN4QyxDQUFDLEVBWFcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQVc5QjtBQUNEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjthQUNwQixPQUFFLEdBQUcsNENBQTRDLENBQUM7SUFFekQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQWlCO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QyxnQkFBZ0IsQ0FBQywyQkFBMkIsQ0FDMUMsUUFBUSxFQUNSLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUN4QixDQUFDO1FBQ0YsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBMkI7UUFDN0MsU0FBUyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQywyQkFBMkIsQ0FDaEMsU0FBMkIsRUFDM0IsT0FBcUI7UUFFckIsT0FBTyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDMUIsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFO2dCQUFFLE1BQU07WUFFaEMsUUFBUSxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUU7Z0JBQ2hDLEtBQUssQ0FBQztvQkFDSixTQUFTLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDckMsTUFBTTtnQkFDUjtvQkFDRSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7YUFDdkI7U0FDRjtRQUVELGdCQUFnQixDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyx1QkFBdUIsQ0FDNUIsU0FBMkIsRUFDM0IsT0FBcUI7UUFFckIsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFO1lBQ25CLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2QztJQUNILENBQUM7SUFJRDs7O09BR0c7SUFDSCxZQUFZLE1BQW9EO1FBQzlELE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMxQixnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUNELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsS0FBMkI7UUFDbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWU7UUFDYixNQUFNLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2xDLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN2RCxPQUFPLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRO1FBQ04sT0FBTztZQUNMLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztTQUNsQixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsY0FBYztJQUNaLGFBQWE7SUFDYixPQUErQjtRQUUvQixPQUFPO1lBQ0wsS0FBSyxFQUNILG9CQUFvQixDQUNsQixJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUNqRTtTQUNKLENBQUM7SUFDSixDQUFDOztBQWtCSDs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFlO2FBQ25CLE9BQUUsR0FBRywyQ0FBMkMsQ0FBQztJQUV4RDs7O09BR0c7SUFDSCxNQUFNLENBQUMsaUJBQWlCLENBQUMsS0FBaUI7UUFDeEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUN2QyxlQUFlLENBQUMsMkJBQTJCLENBQ3pDLFFBQVEsRUFDUixJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FDeEIsQ0FBQztRQUNGLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQTBCO1FBQzVDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsMkJBQTJCLENBQ2hDLFNBQTBCLEVBQzFCLE9BQXFCO1FBRXJCLE9BQU8sT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQzFCLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRTtnQkFBRSxNQUFNO1lBRWhDLFFBQVEsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFO2dCQUNoQyxLQUFLLENBQUM7b0JBQ0osU0FBUyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3JDLE1BQU07Z0JBQ1I7b0JBQ0UsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQ3ZCO1NBQ0Y7UUFFRCxlQUFlLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLHVCQUF1QixDQUM1QixTQUEwQixFQUMxQixPQUFxQjtRQUVyQixJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUU7WUFDbkIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQztJQUlEOzs7T0FHRztJQUNILFlBQVksTUFBbUQ7UUFDN0QsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzFCLGVBQWUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUNELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsS0FBMEI7UUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWU7UUFDYixNQUFNLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2xDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdEQsT0FBTyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNOLE9BQU87WUFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7U0FDbEIsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWM7SUFDWixhQUFhO0lBQ2IsT0FBK0I7UUFFL0IsT0FBTztZQUNMLEtBQUssRUFDSCxtQkFBbUIsQ0FDakIsSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FDakU7U0FDSixDQUFDO0lBQ0osQ0FBQzs7QUFrQkg7O0dBRUc7QUFDSCxNQUFNLE9BQU8sc0JBQXNCO2FBQzFCLE9BQUUsR0FBRyxrREFBa0QsQ0FBQztJQUUvRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsaUJBQWlCLENBQUMsS0FBaUI7UUFDeEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1FBQzlDLHNCQUFzQixDQUFDLDJCQUEyQixDQUNoRCxRQUFRLEVBQ1IsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQ3hCLENBQUM7UUFDRixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFpQztRQUNuRCxTQUFTLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLDJCQUEyQixDQUNoQyxTQUFpQyxFQUNqQyxPQUFxQjtRQUVyQixPQUFPLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUMxQixJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUU7Z0JBQUUsTUFBTTtZQUVoQyxRQUFRLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRTtnQkFDaEMsS0FBSyxDQUFDO29CQUNKLFNBQVMsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUN2QyxNQUFNO2dCQUNSO29CQUNFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQzthQUN2QjtTQUNGO1FBRUQsc0JBQXNCLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLHVCQUF1QixDQUM1QixTQUFpQyxFQUNqQyxPQUFxQjtRQUVyQixJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUU7WUFDbkIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQztJQUlEOzs7T0FHRztJQUNILFlBQVksTUFBMEQ7UUFDcEUsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzFCLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxLQUFhO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxlQUFlO1FBQ2IsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsQyxzQkFBc0IsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0QsT0FBTyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNOLE9BQU87WUFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7U0FDbEIsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWM7SUFDWixhQUFhO0lBQ2IsT0FBK0I7UUFFL0IsT0FBTztZQUNMLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztTQUNsQixDQUFDO0lBQ0osQ0FBQzs7QUFrQkg7O0dBRUc7QUFDSCxNQUFNLE9BQU8sU0FBUzthQUNiLE9BQUUsR0FBRyxxQ0FBcUMsQUFBeEMsQ0FBeUM7SUFFbEQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQWlCO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7UUFDakMsU0FBUyxDQUFDLDJCQUEyQixDQUFDLFFBQVEsRUFBRSxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQW9CLElBQUcsQ0FBQztJQUU1Qzs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLDJCQUEyQixDQUNoQyxTQUFvQixFQUNwQixPQUFxQjtRQUVyQixPQUFPLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUMxQixJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUU7Z0JBQUUsTUFBTTtZQUVoQyxRQUFRLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRTtnQkFDaEMsS0FBSyxDQUFDO29CQUNKLFNBQVMsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7b0JBQ3BELE9BQU8sQ0FBQyxXQUFXLENBQ2pCLFNBQVMsQ0FBQyxnQkFBZ0IsRUFDMUIsZ0JBQWdCLENBQUMsMkJBQTJCLENBQzdDLENBQUM7b0JBQ0YsTUFBTTtnQkFDUixLQUFLLENBQUM7b0JBQ0osU0FBUyxDQUFDLGVBQWUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO29CQUNsRCxPQUFPLENBQUMsV0FBVyxDQUNqQixTQUFTLENBQUMsZUFBZSxFQUN6QixlQUFlLENBQUMsMkJBQTJCLENBQzVDLENBQUM7b0JBQ0YsTUFBTTtnQkFDUixLQUFLLENBQUM7b0JBQ0osU0FBUyxDQUFDLHNCQUFzQixHQUFHLElBQUksc0JBQXNCLEVBQUUsQ0FBQztvQkFDaEUsT0FBTyxDQUFDLFdBQVcsQ0FDakIsU0FBUyxDQUFDLHNCQUFzQixFQUNoQyxzQkFBc0IsQ0FBQywyQkFBMkIsQ0FDbkQsQ0FBQztvQkFDRixNQUFNO2dCQUNSO29CQUNFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQzthQUN2QjtTQUNGO1FBRUQsU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxTQUFvQixFQUFFLE9BQXFCO1FBQ3hFLElBQUksU0FBUyxDQUFDLGdCQUFnQixFQUFFO1lBQzlCLE9BQU8sQ0FBQyxZQUFZLENBQ2xCLENBQUMsRUFDRCxTQUFTLENBQUMsZ0JBQXVCLEVBQ2pDLGdCQUFnQixDQUFDLHVCQUF1QixDQUN6QyxDQUFDO1NBQ0g7UUFDRCxJQUFJLFNBQVMsQ0FBQyxlQUFlLEVBQUU7WUFDN0IsT0FBTyxDQUFDLFlBQVksQ0FDbEIsQ0FBQyxFQUNELFNBQVMsQ0FBQyxlQUFzQixFQUNoQyxlQUFlLENBQUMsdUJBQXVCLENBQ3hDLENBQUM7U0FDSDtRQUNELElBQUksU0FBUyxDQUFDLHNCQUFzQixFQUFFO1lBQ3BDLE9BQU8sQ0FBQyxZQUFZLENBQ2xCLENBQUMsRUFDRCxTQUFTLENBQUMsc0JBQTZCLEVBQ3ZDLHNCQUFzQixDQUFDLHVCQUF1QixDQUMvQyxDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBUUQ7OztPQUdHO0lBQ0gsWUFBWSxNQUE2QztRQU5qRCxXQUFNLEdBQXdCLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBTzdELE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCO1lBQzdDLENBQUMsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztZQUMvQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsZUFBZTtZQUMzQyxDQUFDLENBQUMsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztZQUM3QyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsSUFBSSxDQUFDLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxzQkFBc0I7WUFDekQsQ0FBQyxDQUFDLElBQUksc0JBQXNCLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDO1lBQzNELENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDZCxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFDRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFtQztRQUN0RCxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtZQUN6QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixHQUFHLFNBQVMsQ0FBQztZQUNqRSxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUM7U0FDcEQ7UUFDRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQ2pDLENBQUM7SUFDRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksZUFBZSxDQUFDLEtBQWtDO1FBQ3BELElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ3pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsU0FBUyxDQUFDO1lBQ2xFLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7U0FDbkQ7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxJQUFJLHNCQUFzQjtRQUN4QixPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsSUFBSSxzQkFBc0IsQ0FBQyxLQUF5QztRQUNsRSxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtZQUN6QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztZQUMzRCxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUM7U0FDMUQ7UUFDRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWU7UUFDYixNQUFNLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2xDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDaEQsT0FBTyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNOLE9BQU87WUFDTCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2dCQUNyQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRTtnQkFDbEMsQ0FBQyxDQUFDLFNBQVM7WUFDYixlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7Z0JBQ25DLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRTtnQkFDakMsQ0FBQyxDQUFDLFNBQVM7WUFDYixzQkFBc0IsRUFBRSxJQUFJLENBQUMsc0JBQXNCO2dCQUNqRCxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtnQkFDeEMsQ0FBQyxDQUFDLFNBQVM7U0FDZCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsY0FBYztJQUNaLGFBQWE7SUFDYixPQUErQjtRQUUvQixPQUFPO1lBQ0wsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtnQkFDckMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDO2dCQUMvQyxDQUFDLENBQUMsSUFBSTtZQUNSLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtnQkFDbkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztnQkFDOUMsQ0FBQyxDQUFDLElBQUk7WUFDUixzQkFBc0IsRUFBRSxJQUFJLENBQUMsc0JBQXNCO2dCQUNqRCxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7Z0JBQ3JELENBQUMsQ0FBQyxJQUFJO1NBQ1QsQ0FBQztJQUNKLENBQUM7O0FBRUgsV0FBYyxTQUFTO0lBa0JyQixJQUFZLFNBS1g7SUFMRCxXQUFZLFNBQVM7UUFDbkIseUNBQVEsQ0FBQTtRQUNSLGlFQUFvQixDQUFBO1FBQ3BCLCtEQUFtQixDQUFBO1FBQ25CLDZFQUEwQixDQUFBO0lBQzVCLENBQUMsRUFMVyxTQUFTLEdBQVQsbUJBQVMsS0FBVCxtQkFBUyxRQUtwQjtBQUNILENBQUMsRUF4QmEsU0FBUyxLQUFULFNBQVMsUUF3QnRCIiwic291cmNlc0NvbnRlbnQiOlsiLyogdHNsaW50OmRpc2FibGUgKi9cbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBAdHMtbm9jaGVja1xuLy9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRVxuLy8gRE8gTk9UIE1PRElGWSBJVCEgWU9VUiBDSEFOR0VTIFdJTEwgQkUgTE9TVFxuaW1wb3J0IHtcbiAgR3JwY01lc3NhZ2UsXG4gIFJlY3Vyc2l2ZVBhcnRpYWwsXG4gIFRvUHJvdG9idWZKU09OT3B0aW9uc1xufSBmcm9tICdAbmd4LWdycGMvY29tbW9uJztcbmltcG9ydCB7IEJpbmFyeVJlYWRlciwgQmluYXJ5V3JpdGVyLCBCeXRlU291cmNlIH0gZnJvbSAnZ29vZ2xlLXByb3RvYnVmJztcbmV4cG9ydCBlbnVtIFRhc2tTdW1tYXJ5RW51bUZpZWxkIHtcbiAgVEFTS19TVU1NQVJZX0VOVU1fRklFTERfVU5TUEVDSUZJRUQgPSAwLFxuICBUQVNLX1NVTU1BUllfRU5VTV9GSUVMRF9UQVNLX0lEID0gMTYsXG4gIFRBU0tfU1VNTUFSWV9FTlVNX0ZJRUxEX1NFU1NJT05fSUQgPSAxLFxuICBUQVNLX1NVTU1BUllfRU5VTV9GSUVMRF9PV05FUl9QT0RfSUQgPSA5LFxuICBUQVNLX1NVTU1BUllfRU5VTV9GSUVMRF9JTklUSUFMX1RBU0tfSUQgPSAxMCxcbiAgVEFTS19TVU1NQVJZX0VOVU1fRklFTERfU1RBVFVTID0gMixcbiAgVEFTS19TVU1NQVJZX0VOVU1fRklFTERfQ1JFQVRFRF9BVCA9IDMsXG4gIFRBU0tfU1VNTUFSWV9FTlVNX0ZJRUxEX1NVQk1JVFRFRF9BVCA9IDExLFxuICBUQVNLX1NVTU1BUllfRU5VTV9GSUVMRF9TVEFSVEVEX0FUID0gNCxcbiAgVEFTS19TVU1NQVJZX0VOVU1fRklFTERfRU5ERURfQVQgPSA1LFxuICBUQVNLX1NVTU1BUllfRU5VTV9GSUVMRF9DUkVBVElPTl9UT19FTkRfRFVSQVRJT04gPSA2LFxuICBUQVNLX1NVTU1BUllfRU5VTV9GSUVMRF9QUk9DRVNTSU5HX1RPX0VORF9EVVJBVElPTiA9IDcsXG4gIFRBU0tfU1VNTUFSWV9FTlVNX0ZJRUxEX1BPRF9UVEwgPSAxMixcbiAgVEFTS19TVU1NQVJZX0VOVU1fRklFTERfUE9EX0hPU1ROQU1FID0gMTMsXG4gIFRBU0tfU1VNTUFSWV9FTlVNX0ZJRUxEX1JFQ0VJVkVEX0FUID0gMTQsXG4gIFRBU0tfU1VNTUFSWV9FTlVNX0ZJRUxEX0FDUVVJUkVEX0FUID0gMTUsXG4gIFRBU0tfU1VNTUFSWV9FTlVNX0ZJRUxEX0VSUk9SID0gOFxufVxuZXhwb3J0IGVudW0gVGFza09wdGlvbkVudW1GaWVsZCB7XG4gIFRBU0tfT1BUSU9OX0VOVU1fRklFTERfVU5TUEVDSUZJRUQgPSAwLFxuICBUQVNLX09QVElPTl9FTlVNX0ZJRUxEX01BWF9EVVJBVElPTiA9IDEsXG4gIFRBU0tfT1BUSU9OX0VOVU1fRklFTERfTUFYX1JFVFJJRVMgPSAyLFxuICBUQVNLX09QVElPTl9FTlVNX0ZJRUxEX1BSSU9SSVRZID0gMyxcbiAgVEFTS19PUFRJT05fRU5VTV9GSUVMRF9QQVJUSVRJT05fSUQgPSA0LFxuICBUQVNLX09QVElPTl9FTlVNX0ZJRUxEX0FQUExJQ0FUSU9OX05BTUUgPSA1LFxuICBUQVNLX09QVElPTl9FTlVNX0ZJRUxEX0FQUExJQ0FUSU9OX1ZFUlNJT04gPSA2LFxuICBUQVNLX09QVElPTl9FTlVNX0ZJRUxEX0FQUExJQ0FUSU9OX05BTUVTUEFDRSA9IDcsXG4gIFRBU0tfT1BUSU9OX0VOVU1fRklFTERfQVBQTElDQVRJT05fU0VSVklDRSA9IDgsXG4gIFRBU0tfT1BUSU9OX0VOVU1fRklFTERfRU5HSU5FX1RZUEUgPSA5XG59XG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIGFybW9uaWsuYXBpLmdycGMudjEudGFza3MuVGFza1N1bW1hcnlGaWVsZFxuICovXG5leHBvcnQgY2xhc3MgVGFza1N1bW1hcnlGaWVsZCBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ2FybW9uaWsuYXBpLmdycGMudjEudGFza3MuVGFza1N1bW1hcnlGaWVsZCc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFRhc2tTdW1tYXJ5RmllbGQoKTtcbiAgICBUYXNrU3VtbWFyeUZpZWxkLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIGluc3RhbmNlLFxuICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICApO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogVGFza1N1bW1hcnlGaWVsZCkge1xuICAgIF9pbnN0YW5jZS5maWVsZCA9IF9pbnN0YW5jZS5maWVsZCB8fCAwO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgIF9pbnN0YW5jZTogVGFza1N1bW1hcnlGaWVsZCxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBfaW5zdGFuY2UuZmllbGQgPSBfcmVhZGVyLnJlYWRFbnVtKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBUYXNrU3VtbWFyeUZpZWxkLnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogVGFza1N1bW1hcnlGaWVsZCxcbiAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgKSB7XG4gICAgaWYgKF9pbnN0YW5jZS5maWVsZCkge1xuICAgICAgX3dyaXRlci53cml0ZUVudW0oMSwgX2luc3RhbmNlLmZpZWxkKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9maWVsZDogVGFza1N1bW1hcnlFbnVtRmllbGQ7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBUYXNrU3VtbWFyeUZpZWxkIHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPFRhc2tTdW1tYXJ5RmllbGQuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMuZmllbGQgPSBfdmFsdWUuZmllbGQ7XG4gICAgVGFza1N1bW1hcnlGaWVsZC5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IGZpZWxkKCk6IFRhc2tTdW1tYXJ5RW51bUZpZWxkIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGQ7XG4gIH1cbiAgc2V0IGZpZWxkKHZhbHVlOiBUYXNrU3VtbWFyeUVudW1GaWVsZCkge1xuICAgIHRoaXMuX2ZpZWxkID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgVGFza1N1bW1hcnlGaWVsZC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBUYXNrU3VtbWFyeUZpZWxkLkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgZmllbGQ6IHRoaXMuZmllbGRcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBUYXNrU3VtbWFyeUZpZWxkLkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgZmllbGQ6XG4gICAgICAgIFRhc2tTdW1tYXJ5RW51bUZpZWxkW1xuICAgICAgICAgIHRoaXMuZmllbGQgPT09IG51bGwgfHwgdGhpcy5maWVsZCA9PT0gdW5kZWZpbmVkID8gMCA6IHRoaXMuZmllbGRcbiAgICAgICAgXVxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgVGFza1N1bW1hcnlGaWVsZCB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgVGFza1N1bW1hcnlGaWVsZFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgZmllbGQ6IFRhc2tTdW1tYXJ5RW51bUZpZWxkO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIFRhc2tTdW1tYXJ5RmllbGRcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIGZpZWxkOiBzdHJpbmc7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBhcm1vbmlrLmFwaS5ncnBjLnYxLnRhc2tzLlRhc2tPcHRpb25GaWVsZFxuICovXG5leHBvcnQgY2xhc3MgVGFza09wdGlvbkZpZWxkIGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnYXJtb25pay5hcGkuZ3JwYy52MS50YXNrcy5UYXNrT3B0aW9uRmllbGQnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBUYXNrT3B0aW9uRmllbGQoKTtcbiAgICBUYXNrT3B0aW9uRmllbGQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBUYXNrT3B0aW9uRmllbGQpIHtcbiAgICBfaW5zdGFuY2UuZmllbGQgPSBfaW5zdGFuY2UuZmllbGQgfHwgMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IFRhc2tPcHRpb25GaWVsZCxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBfaW5zdGFuY2UuZmllbGQgPSBfcmVhZGVyLnJlYWRFbnVtKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBUYXNrT3B0aW9uRmllbGQucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoXG4gICAgX2luc3RhbmNlOiBUYXNrT3B0aW9uRmllbGQsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UuZmllbGQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVFbnVtKDEsIF9pbnN0YW5jZS5maWVsZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZmllbGQ6IFRhc2tPcHRpb25FbnVtRmllbGQ7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBUYXNrT3B0aW9uRmllbGQgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8VGFza09wdGlvbkZpZWxkLkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLmZpZWxkID0gX3ZhbHVlLmZpZWxkO1xuICAgIFRhc2tPcHRpb25GaWVsZC5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IGZpZWxkKCk6IFRhc2tPcHRpb25FbnVtRmllbGQge1xuICAgIHJldHVybiB0aGlzLl9maWVsZDtcbiAgfVxuICBzZXQgZmllbGQodmFsdWU6IFRhc2tPcHRpb25FbnVtRmllbGQpIHtcbiAgICB0aGlzLl9maWVsZCA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIFRhc2tPcHRpb25GaWVsZC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBUYXNrT3B0aW9uRmllbGQuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBmaWVsZDogdGhpcy5maWVsZFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IFRhc2tPcHRpb25GaWVsZC5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpZWxkOlxuICAgICAgICBUYXNrT3B0aW9uRW51bUZpZWxkW1xuICAgICAgICAgIHRoaXMuZmllbGQgPT09IG51bGwgfHwgdGhpcy5maWVsZCA9PT0gdW5kZWZpbmVkID8gMCA6IHRoaXMuZmllbGRcbiAgICAgICAgXVxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgVGFza09wdGlvbkZpZWxkIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBUYXNrT3B0aW9uRmllbGRcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIGZpZWxkOiBUYXNrT3B0aW9uRW51bUZpZWxkO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIFRhc2tPcHRpb25GaWVsZFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgZmllbGQ6IHN0cmluZztcbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIGFybW9uaWsuYXBpLmdycGMudjEudGFza3MuVGFza09wdGlvbkdlbmVyaWNGaWVsZFxuICovXG5leHBvcnQgY2xhc3MgVGFza09wdGlvbkdlbmVyaWNGaWVsZCBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ2FybW9uaWsuYXBpLmdycGMudjEudGFza3MuVGFza09wdGlvbkdlbmVyaWNGaWVsZCc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFRhc2tPcHRpb25HZW5lcmljRmllbGQoKTtcbiAgICBUYXNrT3B0aW9uR2VuZXJpY0ZpZWxkLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIGluc3RhbmNlLFxuICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICApO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogVGFza09wdGlvbkdlbmVyaWNGaWVsZCkge1xuICAgIF9pbnN0YW5jZS5maWVsZCA9IF9pbnN0YW5jZS5maWVsZCB8fCAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IFRhc2tPcHRpb25HZW5lcmljRmllbGQsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgX2luc3RhbmNlLmZpZWxkID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBUYXNrT3B0aW9uR2VuZXJpY0ZpZWxkLnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogVGFza09wdGlvbkdlbmVyaWNGaWVsZCxcbiAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgKSB7XG4gICAgaWYgKF9pbnN0YW5jZS5maWVsZCkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygxLCBfaW5zdGFuY2UuZmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2ZpZWxkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBUYXNrT3B0aW9uR2VuZXJpY0ZpZWxkIHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPFRhc2tPcHRpb25HZW5lcmljRmllbGQuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMuZmllbGQgPSBfdmFsdWUuZmllbGQ7XG4gICAgVGFza09wdGlvbkdlbmVyaWNGaWVsZC5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IGZpZWxkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkO1xuICB9XG4gIHNldCBmaWVsZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZmllbGQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBUYXNrT3B0aW9uR2VuZXJpY0ZpZWxkLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IFRhc2tPcHRpb25HZW5lcmljRmllbGQuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBmaWVsZDogdGhpcy5maWVsZFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IFRhc2tPcHRpb25HZW5lcmljRmllbGQuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBmaWVsZDogdGhpcy5maWVsZFxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgVGFza09wdGlvbkdlbmVyaWNGaWVsZCB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgVGFza09wdGlvbkdlbmVyaWNGaWVsZFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgZmllbGQ6IHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBUYXNrT3B0aW9uR2VuZXJpY0ZpZWxkXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICBmaWVsZDogc3RyaW5nO1xuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3IgYXJtb25pay5hcGkuZ3JwYy52MS50YXNrcy5UYXNrRmllbGRcbiAqL1xuZXhwb3J0IGNsYXNzIFRhc2tGaWVsZCBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ2FybW9uaWsuYXBpLmdycGMudjEudGFza3MuVGFza0ZpZWxkJztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgVGFza0ZpZWxkKCk7XG4gICAgVGFza0ZpZWxkLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihpbnN0YW5jZSwgbmV3IEJpbmFyeVJlYWRlcihieXRlcykpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogVGFza0ZpZWxkKSB7fVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IFRhc2tGaWVsZCxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBfaW5zdGFuY2UudGFza1N1bW1hcnlGaWVsZCA9IG5ldyBUYXNrU3VtbWFyeUZpZWxkKCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS50YXNrU3VtbWFyeUZpZWxkLFxuICAgICAgICAgICAgVGFza1N1bW1hcnlGaWVsZC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgX2luc3RhbmNlLnRhc2tPcHRpb25GaWVsZCA9IG5ldyBUYXNrT3B0aW9uRmllbGQoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgX2luc3RhbmNlLnRhc2tPcHRpb25GaWVsZCxcbiAgICAgICAgICAgIFRhc2tPcHRpb25GaWVsZC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgX2luc3RhbmNlLnRhc2tPcHRpb25HZW5lcmljRmllbGQgPSBuZXcgVGFza09wdGlvbkdlbmVyaWNGaWVsZCgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2UudGFza09wdGlvbkdlbmVyaWNGaWVsZCxcbiAgICAgICAgICAgIFRhc2tPcHRpb25HZW5lcmljRmllbGQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIFRhc2tGaWVsZC5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihfaW5zdGFuY2U6IFRhc2tGaWVsZCwgX3dyaXRlcjogQmluYXJ5V3JpdGVyKSB7XG4gICAgaWYgKF9pbnN0YW5jZS50YXNrU3VtbWFyeUZpZWxkKSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMSxcbiAgICAgICAgX2luc3RhbmNlLnRhc2tTdW1tYXJ5RmllbGQgYXMgYW55LFxuICAgICAgICBUYXNrU3VtbWFyeUZpZWxkLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnRhc2tPcHRpb25GaWVsZCkge1xuICAgICAgX3dyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAgIDIsXG4gICAgICAgIF9pbnN0YW5jZS50YXNrT3B0aW9uRmllbGQgYXMgYW55LFxuICAgICAgICBUYXNrT3B0aW9uRmllbGQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UudGFza09wdGlvbkdlbmVyaWNGaWVsZCkge1xuICAgICAgX3dyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAgIDMsXG4gICAgICAgIF9pbnN0YW5jZS50YXNrT3B0aW9uR2VuZXJpY0ZpZWxkIGFzIGFueSxcbiAgICAgICAgVGFza09wdGlvbkdlbmVyaWNGaWVsZC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF90YXNrU3VtbWFyeUZpZWxkPzogVGFza1N1bW1hcnlGaWVsZDtcbiAgcHJpdmF0ZSBfdGFza09wdGlvbkZpZWxkPzogVGFza09wdGlvbkZpZWxkO1xuICBwcml2YXRlIF90YXNrT3B0aW9uR2VuZXJpY0ZpZWxkPzogVGFza09wdGlvbkdlbmVyaWNGaWVsZDtcblxuICBwcml2YXRlIF9maWVsZDogVGFza0ZpZWxkLkZpZWxkQ2FzZSA9IFRhc2tGaWVsZC5GaWVsZENhc2Uubm9uZTtcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIFRhc2tGaWVsZCB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxUYXNrRmllbGQuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMudGFza1N1bW1hcnlGaWVsZCA9IF92YWx1ZS50YXNrU3VtbWFyeUZpZWxkXG4gICAgICA/IG5ldyBUYXNrU3VtbWFyeUZpZWxkKF92YWx1ZS50YXNrU3VtbWFyeUZpZWxkKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy50YXNrT3B0aW9uRmllbGQgPSBfdmFsdWUudGFza09wdGlvbkZpZWxkXG4gICAgICA/IG5ldyBUYXNrT3B0aW9uRmllbGQoX3ZhbHVlLnRhc2tPcHRpb25GaWVsZClcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMudGFza09wdGlvbkdlbmVyaWNGaWVsZCA9IF92YWx1ZS50YXNrT3B0aW9uR2VuZXJpY0ZpZWxkXG4gICAgICA/IG5ldyBUYXNrT3B0aW9uR2VuZXJpY0ZpZWxkKF92YWx1ZS50YXNrT3B0aW9uR2VuZXJpY0ZpZWxkKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgVGFza0ZpZWxkLnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgdGFza1N1bW1hcnlGaWVsZCgpOiBUYXNrU3VtbWFyeUZpZWxkIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdGFza1N1bW1hcnlGaWVsZDtcbiAgfVxuICBzZXQgdGFza1N1bW1hcnlGaWVsZCh2YWx1ZTogVGFza1N1bW1hcnlGaWVsZCB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl90YXNrT3B0aW9uRmllbGQgPSB0aGlzLl90YXNrT3B0aW9uR2VuZXJpY0ZpZWxkID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fZmllbGQgPSBUYXNrRmllbGQuRmllbGRDYXNlLnRhc2tTdW1tYXJ5RmllbGQ7XG4gICAgfVxuICAgIHRoaXMuX3Rhc2tTdW1tYXJ5RmllbGQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgdGFza09wdGlvbkZpZWxkKCk6IFRhc2tPcHRpb25GaWVsZCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3Rhc2tPcHRpb25GaWVsZDtcbiAgfVxuICBzZXQgdGFza09wdGlvbkZpZWxkKHZhbHVlOiBUYXNrT3B0aW9uRmllbGQgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fdGFza1N1bW1hcnlGaWVsZCA9IHRoaXMuX3Rhc2tPcHRpb25HZW5lcmljRmllbGQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9maWVsZCA9IFRhc2tGaWVsZC5GaWVsZENhc2UudGFza09wdGlvbkZpZWxkO1xuICAgIH1cbiAgICB0aGlzLl90YXNrT3B0aW9uRmllbGQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgdGFza09wdGlvbkdlbmVyaWNGaWVsZCgpOiBUYXNrT3B0aW9uR2VuZXJpY0ZpZWxkIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdGFza09wdGlvbkdlbmVyaWNGaWVsZDtcbiAgfVxuICBzZXQgdGFza09wdGlvbkdlbmVyaWNGaWVsZCh2YWx1ZTogVGFza09wdGlvbkdlbmVyaWNGaWVsZCB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl90YXNrU3VtbWFyeUZpZWxkID0gdGhpcy5fdGFza09wdGlvbkZpZWxkID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fZmllbGQgPSBUYXNrRmllbGQuRmllbGRDYXNlLnRhc2tPcHRpb25HZW5lcmljRmllbGQ7XG4gICAgfVxuICAgIHRoaXMuX3Rhc2tPcHRpb25HZW5lcmljRmllbGQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgZmllbGQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIFRhc2tGaWVsZC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBUYXNrRmllbGQuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICB0YXNrU3VtbWFyeUZpZWxkOiB0aGlzLnRhc2tTdW1tYXJ5RmllbGRcbiAgICAgICAgPyB0aGlzLnRhc2tTdW1tYXJ5RmllbGQudG9PYmplY3QoKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHRhc2tPcHRpb25GaWVsZDogdGhpcy50YXNrT3B0aW9uRmllbGRcbiAgICAgICAgPyB0aGlzLnRhc2tPcHRpb25GaWVsZC50b09iamVjdCgpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgdGFza09wdGlvbkdlbmVyaWNGaWVsZDogdGhpcy50YXNrT3B0aW9uR2VuZXJpY0ZpZWxkXG4gICAgICAgID8gdGhpcy50YXNrT3B0aW9uR2VuZXJpY0ZpZWxkLnRvT2JqZWN0KClcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBUYXNrRmllbGQuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICB0YXNrU3VtbWFyeUZpZWxkOiB0aGlzLnRhc2tTdW1tYXJ5RmllbGRcbiAgICAgICAgPyB0aGlzLnRhc2tTdW1tYXJ5RmllbGQudG9Qcm90b2J1ZkpTT04ob3B0aW9ucylcbiAgICAgICAgOiBudWxsLFxuICAgICAgdGFza09wdGlvbkZpZWxkOiB0aGlzLnRhc2tPcHRpb25GaWVsZFxuICAgICAgICA/IHRoaXMudGFza09wdGlvbkZpZWxkLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRhc2tPcHRpb25HZW5lcmljRmllbGQ6IHRoaXMudGFza09wdGlvbkdlbmVyaWNGaWVsZFxuICAgICAgICA/IHRoaXMudGFza09wdGlvbkdlbmVyaWNGaWVsZC50b1Byb3RvYnVmSlNPTihvcHRpb25zKVxuICAgICAgICA6IG51bGxcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIFRhc2tGaWVsZCB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgVGFza0ZpZWxkXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICB0YXNrU3VtbWFyeUZpZWxkPzogVGFza1N1bW1hcnlGaWVsZC5Bc09iamVjdDtcbiAgICB0YXNrT3B0aW9uRmllbGQ/OiBUYXNrT3B0aW9uRmllbGQuQXNPYmplY3Q7XG4gICAgdGFza09wdGlvbkdlbmVyaWNGaWVsZD86IFRhc2tPcHRpb25HZW5lcmljRmllbGQuQXNPYmplY3Q7XG4gIH1cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgVGFza0ZpZWxkXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICB0YXNrU3VtbWFyeUZpZWxkOiBUYXNrU3VtbWFyeUZpZWxkLkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgICB0YXNrT3B0aW9uRmllbGQ6IFRhc2tPcHRpb25GaWVsZC5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgdGFza09wdGlvbkdlbmVyaWNGaWVsZDogVGFza09wdGlvbkdlbmVyaWNGaWVsZC5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gIH1cbiAgZXhwb3J0IGVudW0gRmllbGRDYXNlIHtcbiAgICBub25lID0gMCxcbiAgICB0YXNrU3VtbWFyeUZpZWxkID0gMSxcbiAgICB0YXNrT3B0aW9uRmllbGQgPSAyLFxuICAgIHRhc2tPcHRpb25HZW5lcmljRmllbGQgPSAzXG4gIH1cbn1cbiJdfQ==