@aneoconsultingfr/armonik.api.angular 3.29.0-edge.13.eb211e2 → 3.29.0-edge.68.23f0ea8b
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/fesm2022/aneoconsultingfr-armonik.api.angular.mjs +29 -29
- package/fesm2022/aneoconsultingfr-armonik.api.angular.mjs.map +1 -1
- package/index.d.ts +11699 -3
- package/package.json +6 -8
- package/esm2022/aneoconsultingfr-armonik.api.angular.mjs +0 -5
- package/esm2022/lib/generated/applications-common.pb.mjs +0 -586
- package/esm2022/lib/generated/applications-fields.pb.mjs +0 -231
- package/esm2022/lib/generated/applications-filters.pb.mjs +0 -349
- package/esm2022/lib/generated/applications-service.pb.mjs +0 -2
- package/esm2022/lib/generated/applications-service.pbconf.mjs +0 -13
- package/esm2022/lib/generated/applications-service.pbsc.mjs +0 -74
- package/esm2022/lib/generated/auth-common.pb.mjs +0 -318
- package/esm2022/lib/generated/auth-service.pb.mjs +0 -2
- package/esm2022/lib/generated/auth-service.pbconf.mjs +0 -13
- package/esm2022/lib/generated/auth-service.pbsc.mjs +0 -74
- package/esm2022/lib/generated/events-common.pb.mjs +0 -1139
- package/esm2022/lib/generated/events-service.pb.mjs +0 -2
- package/esm2022/lib/generated/events-service.pbconf.mjs +0 -13
- package/esm2022/lib/generated/events-service.pbsc.mjs +0 -74
- package/esm2022/lib/generated/filters-common.pb.mjs +0 -774
- package/esm2022/lib/generated/health-checks-common.pb.mjs +0 -331
- package/esm2022/lib/generated/health-checks-service.pb.mjs +0 -2
- package/esm2022/lib/generated/health-checks-service.pbconf.mjs +0 -13
- package/esm2022/lib/generated/health-checks-service.pbsc.mjs +0 -74
- package/esm2022/lib/generated/objects.pb.mjs +0 -2721
- package/esm2022/lib/generated/partitions-common.pb.mjs +0 -978
- package/esm2022/lib/generated/partitions-fields.pb.mjs +0 -233
- package/esm2022/lib/generated/partitions-filters.pb.mjs +0 -431
- package/esm2022/lib/generated/partitions-service.pb.mjs +0 -2
- package/esm2022/lib/generated/partitions-service.pbconf.mjs +0 -13
- package/esm2022/lib/generated/partitions-service.pbsc.mjs +0 -104
- package/esm2022/lib/generated/result-status.pb.mjs +0 -16
- package/esm2022/lib/generated/results-common.pb.mjs +0 -3476
- package/esm2022/lib/generated/results-fields.pb.mjs +0 -238
- package/esm2022/lib/generated/results-filters.pb.mjs +0 -573
- package/esm2022/lib/generated/results-service.pb.mjs +0 -2
- package/esm2022/lib/generated/results-service.pbconf.mjs +0 -13
- package/esm2022/lib/generated/results-service.pbsc.mjs +0 -375
- package/esm2022/lib/generated/session-status.pb.mjs +0 -17
- package/esm2022/lib/generated/sessions-common.pb.mjs +0 -2638
- package/esm2022/lib/generated/sessions-fields.pb.mjs +0 -509
- package/esm2022/lib/generated/sessions-filters.pb.mjs +0 -629
- package/esm2022/lib/generated/sessions-service.pb.mjs +0 -2
- package/esm2022/lib/generated/sessions-service.pbconf.mjs +0 -13
- package/esm2022/lib/generated/sessions-service.pbsc.mjs +0 -344
- package/esm2022/lib/generated/sort-direction.pb.mjs +0 -13
- package/esm2022/lib/generated/task-status.pb.mjs +0 -24
- package/esm2022/lib/generated/tasks-common.pb.mjs +0 -3383
- package/esm2022/lib/generated/tasks-fields.pb.mjs +0 -518
- package/esm2022/lib/generated/tasks-filters.pb.mjs +0 -629
- package/esm2022/lib/generated/tasks-service.pb.mjs +0 -2
- package/esm2022/lib/generated/tasks-service.pbconf.mjs +0 -13
- package/esm2022/lib/generated/tasks-service.pbsc.mjs +0 -254
- package/esm2022/lib/generated/versions-common.pb.mjs +0 -200
- package/esm2022/lib/generated/versions-service.pb.mjs +0 -2
- package/esm2022/lib/generated/versions-service.pbconf.mjs +0 -13
- package/esm2022/lib/generated/versions-service.pbsc.mjs +0 -74
- package/esm2022/lib/index.mjs +0 -35
- package/esm2022/public-api.mjs +0 -5
- package/lib/generated/applications-common.pb.d.ts +0 -331
- package/lib/generated/applications-fields.pb.d.ts +0 -153
- package/lib/generated/applications-filters.pb.d.ts +0 -222
- package/lib/generated/applications-service.pb.d.ts +0 -1
- package/lib/generated/applications-service.pbconf.d.ts +0 -6
- package/lib/generated/applications-service.pbsc.d.ts +0 -38
- package/lib/generated/auth-common.pb.d.ts +0 -214
- package/lib/generated/auth-service.pb.d.ts +0 -1
- package/lib/generated/auth-service.pbconf.d.ts +0 -6
- package/lib/generated/auth-service.pbsc.d.ts +0 -38
- package/lib/generated/events-common.pb.d.ts +0 -612
- package/lib/generated/events-service.pb.d.ts +0 -1
- package/lib/generated/events-service.pbconf.d.ts +0 -6
- package/lib/generated/events-service.pbsc.d.ts +0 -38
- package/lib/generated/filters-common.pb.d.ts +0 -491
- package/lib/generated/health-checks-common.pb.d.ts +0 -220
- package/lib/generated/health-checks-service.pb.d.ts +0 -1
- package/lib/generated/health-checks-service.pbconf.d.ts +0 -6
- package/lib/generated/health-checks-service.pbsc.d.ts +0 -38
- package/lib/generated/objects.pb.d.ts +0 -1678
- package/lib/generated/partitions-common.pb.d.ts +0 -566
- package/lib/generated/partitions-fields.pb.d.ts +0 -155
- package/lib/generated/partitions-filters.pb.d.ts +0 -240
- package/lib/generated/partitions-service.pb.d.ts +0 -1
- package/lib/generated/partitions-service.pbconf.d.ts +0 -6
- package/lib/generated/partitions-service.pbsc.d.ts +0 -54
- package/lib/generated/result-status.pb.d.ts +0 -8
- package/lib/generated/results-common.pb.d.ts +0 -2121
- package/lib/generated/results-fields.pb.d.ts +0 -160
- package/lib/generated/results-filters.pb.d.ts +0 -321
- package/lib/generated/results-service.pb.d.ts +0 -1
- package/lib/generated/results-service.pbconf.d.ts +0 -6
- package/lib/generated/results-service.pbsc.d.ts +0 -199
- package/lib/generated/session-status.pb.d.ts +0 -9
- package/lib/generated/sessions-common.pb.d.ts +0 -1637
- package/lib/generated/sessions-fields.pb.d.ts +0 -323
- package/lib/generated/sessions-filters.pb.d.ts +0 -333
- package/lib/generated/sessions-service.pb.d.ts +0 -1
- package/lib/generated/sessions-service.pbconf.d.ts +0 -6
- package/lib/generated/sessions-service.pbsc.d.ts +0 -182
- package/lib/generated/sort-direction.pb.d.ts +0 -5
- package/lib/generated/task-status.pb.d.ts +0 -16
- package/lib/generated/tasks-common.pb.d.ts +0 -1754
- package/lib/generated/tasks-fields.pb.d.ts +0 -332
- package/lib/generated/tasks-filters.pb.d.ts +0 -333
- package/lib/generated/tasks-service.pb.d.ts +0 -1
- package/lib/generated/tasks-service.pbconf.d.ts +0 -6
- package/lib/generated/tasks-service.pbsc.d.ts +0 -134
- package/lib/generated/versions-common.pb.d.ts +0 -140
- package/lib/generated/versions-service.pb.d.ts +0 -1
- package/lib/generated/versions-service.pbconf.d.ts +0 -6
- package/lib/generated/versions-service.pbsc.d.ts +0 -38
- package/lib/index.d.ts +0 -34
- package/public-api.d.ts +0 -1
|
@@ -1,3383 +0,0 @@
|
|
|
1
|
-
import { BinaryReader, BinaryWriter } from 'google-protobuf';
|
|
2
|
-
import * as googleProtobuf000 from '@ngx-grpc/well-known-types';
|
|
3
|
-
import * as armonikApiGrpcV1Task_status001 from './task-status.pb';
|
|
4
|
-
import * as armonikApiGrpcV1Tasks003 from './tasks-fields.pb';
|
|
5
|
-
import * as googleProtobuf004 from '@ngx-grpc/well-known-types';
|
|
6
|
-
import * as armonikApiGrpcV1005 from './objects.pb';
|
|
7
|
-
import * as armonikApiGrpcV1Sort_direction006 from './sort-direction.pb';
|
|
8
|
-
import * as armonikApiGrpcV1Tasks007 from './tasks-filters.pb';
|
|
9
|
-
/**
|
|
10
|
-
* Message implementation for armonik.api.grpc.v1.tasks.TaskDetailed
|
|
11
|
-
*/
|
|
12
|
-
export class TaskDetailed {
|
|
13
|
-
static { this.id = 'armonik.api.grpc.v1.tasks.TaskDetailed'; }
|
|
14
|
-
/**
|
|
15
|
-
* Deserialize binary data to message
|
|
16
|
-
* @param instance message instance
|
|
17
|
-
*/
|
|
18
|
-
static deserializeBinary(bytes) {
|
|
19
|
-
const instance = new TaskDetailed();
|
|
20
|
-
TaskDetailed.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
21
|
-
return instance;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Check all the properties and set default protobuf values if necessary
|
|
25
|
-
* @param _instance message instance
|
|
26
|
-
*/
|
|
27
|
-
static refineValues(_instance) {
|
|
28
|
-
_instance.id = _instance.id || '';
|
|
29
|
-
_instance.sessionId = _instance.sessionId || '';
|
|
30
|
-
_instance.ownerPodId = _instance.ownerPodId || '';
|
|
31
|
-
_instance.initialTaskId = _instance.initialTaskId || '';
|
|
32
|
-
_instance.parentTaskIds = _instance.parentTaskIds || [];
|
|
33
|
-
_instance.dataDependencies = _instance.dataDependencies || [];
|
|
34
|
-
_instance.expectedOutputIds = _instance.expectedOutputIds || [];
|
|
35
|
-
_instance.retryOfIds = _instance.retryOfIds || [];
|
|
36
|
-
_instance.status = _instance.status || 0;
|
|
37
|
-
_instance.statusMessage = _instance.statusMessage || '';
|
|
38
|
-
_instance.options = _instance.options || undefined;
|
|
39
|
-
_instance.createdAt = _instance.createdAt || undefined;
|
|
40
|
-
_instance.submittedAt = _instance.submittedAt || undefined;
|
|
41
|
-
_instance.receivedAt = _instance.receivedAt || undefined;
|
|
42
|
-
_instance.acquiredAt = _instance.acquiredAt || undefined;
|
|
43
|
-
_instance.fetchedAt = _instance.fetchedAt || undefined;
|
|
44
|
-
_instance.startedAt = _instance.startedAt || undefined;
|
|
45
|
-
_instance.processedAt = _instance.processedAt || undefined;
|
|
46
|
-
_instance.endedAt = _instance.endedAt || undefined;
|
|
47
|
-
_instance.podTtl = _instance.podTtl || undefined;
|
|
48
|
-
_instance.creationToEndDuration =
|
|
49
|
-
_instance.creationToEndDuration || undefined;
|
|
50
|
-
_instance.processingToEndDuration =
|
|
51
|
-
_instance.processingToEndDuration || undefined;
|
|
52
|
-
_instance.receivedToEndDuration =
|
|
53
|
-
_instance.receivedToEndDuration || undefined;
|
|
54
|
-
_instance.payloadId = _instance.payloadId || '';
|
|
55
|
-
_instance.createdBy = _instance.createdBy || '';
|
|
56
|
-
_instance.output = _instance.output || undefined;
|
|
57
|
-
_instance.podHostname = _instance.podHostname || '';
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
61
|
-
* @param _instance message instance
|
|
62
|
-
* @param _reader binary reader instance
|
|
63
|
-
*/
|
|
64
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
65
|
-
while (_reader.nextField()) {
|
|
66
|
-
if (_reader.isEndGroup())
|
|
67
|
-
break;
|
|
68
|
-
switch (_reader.getFieldNumber()) {
|
|
69
|
-
case 1:
|
|
70
|
-
_instance.id = _reader.readString();
|
|
71
|
-
break;
|
|
72
|
-
case 2:
|
|
73
|
-
_instance.sessionId = _reader.readString();
|
|
74
|
-
break;
|
|
75
|
-
case 3:
|
|
76
|
-
_instance.ownerPodId = _reader.readString();
|
|
77
|
-
break;
|
|
78
|
-
case 22:
|
|
79
|
-
_instance.initialTaskId = _reader.readString();
|
|
80
|
-
break;
|
|
81
|
-
case 4:
|
|
82
|
-
(_instance.parentTaskIds = _instance.parentTaskIds || []).push(_reader.readString());
|
|
83
|
-
break;
|
|
84
|
-
case 5:
|
|
85
|
-
(_instance.dataDependencies = _instance.dataDependencies || []).push(_reader.readString());
|
|
86
|
-
break;
|
|
87
|
-
case 6:
|
|
88
|
-
(_instance.expectedOutputIds =
|
|
89
|
-
_instance.expectedOutputIds || []).push(_reader.readString());
|
|
90
|
-
break;
|
|
91
|
-
case 7:
|
|
92
|
-
(_instance.retryOfIds = _instance.retryOfIds || []).push(_reader.readString());
|
|
93
|
-
break;
|
|
94
|
-
case 8:
|
|
95
|
-
_instance.status = _reader.readEnum();
|
|
96
|
-
break;
|
|
97
|
-
case 9:
|
|
98
|
-
_instance.statusMessage = _reader.readString();
|
|
99
|
-
break;
|
|
100
|
-
case 10:
|
|
101
|
-
_instance.options = new armonikApiGrpcV1005.TaskOptions();
|
|
102
|
-
_reader.readMessage(_instance.options, armonikApiGrpcV1005.TaskOptions.deserializeBinaryFromReader);
|
|
103
|
-
break;
|
|
104
|
-
case 11:
|
|
105
|
-
_instance.createdAt = new googleProtobuf004.Timestamp();
|
|
106
|
-
_reader.readMessage(_instance.createdAt, googleProtobuf004.Timestamp.deserializeBinaryFromReader);
|
|
107
|
-
break;
|
|
108
|
-
case 12:
|
|
109
|
-
_instance.submittedAt = new googleProtobuf004.Timestamp();
|
|
110
|
-
_reader.readMessage(_instance.submittedAt, googleProtobuf004.Timestamp.deserializeBinaryFromReader);
|
|
111
|
-
break;
|
|
112
|
-
case 18:
|
|
113
|
-
_instance.receivedAt = new googleProtobuf004.Timestamp();
|
|
114
|
-
_reader.readMessage(_instance.receivedAt, googleProtobuf004.Timestamp.deserializeBinaryFromReader);
|
|
115
|
-
break;
|
|
116
|
-
case 19:
|
|
117
|
-
_instance.acquiredAt = new googleProtobuf004.Timestamp();
|
|
118
|
-
_reader.readMessage(_instance.acquiredAt, googleProtobuf004.Timestamp.deserializeBinaryFromReader);
|
|
119
|
-
break;
|
|
120
|
-
case 25:
|
|
121
|
-
_instance.fetchedAt = new googleProtobuf004.Timestamp();
|
|
122
|
-
_reader.readMessage(_instance.fetchedAt, googleProtobuf004.Timestamp.deserializeBinaryFromReader);
|
|
123
|
-
break;
|
|
124
|
-
case 13:
|
|
125
|
-
_instance.startedAt = new googleProtobuf004.Timestamp();
|
|
126
|
-
_reader.readMessage(_instance.startedAt, googleProtobuf004.Timestamp.deserializeBinaryFromReader);
|
|
127
|
-
break;
|
|
128
|
-
case 24:
|
|
129
|
-
_instance.processedAt = new googleProtobuf004.Timestamp();
|
|
130
|
-
_reader.readMessage(_instance.processedAt, googleProtobuf004.Timestamp.deserializeBinaryFromReader);
|
|
131
|
-
break;
|
|
132
|
-
case 14:
|
|
133
|
-
_instance.endedAt = new googleProtobuf004.Timestamp();
|
|
134
|
-
_reader.readMessage(_instance.endedAt, googleProtobuf004.Timestamp.deserializeBinaryFromReader);
|
|
135
|
-
break;
|
|
136
|
-
case 15:
|
|
137
|
-
_instance.podTtl = new googleProtobuf004.Timestamp();
|
|
138
|
-
_reader.readMessage(_instance.podTtl, googleProtobuf004.Timestamp.deserializeBinaryFromReader);
|
|
139
|
-
break;
|
|
140
|
-
case 20:
|
|
141
|
-
_instance.creationToEndDuration = new googleProtobuf000.Duration();
|
|
142
|
-
_reader.readMessage(_instance.creationToEndDuration, googleProtobuf000.Duration.deserializeBinaryFromReader);
|
|
143
|
-
break;
|
|
144
|
-
case 21:
|
|
145
|
-
_instance.processingToEndDuration = new googleProtobuf000.Duration();
|
|
146
|
-
_reader.readMessage(_instance.processingToEndDuration, googleProtobuf000.Duration.deserializeBinaryFromReader);
|
|
147
|
-
break;
|
|
148
|
-
case 23:
|
|
149
|
-
_instance.receivedToEndDuration = new googleProtobuf000.Duration();
|
|
150
|
-
_reader.readMessage(_instance.receivedToEndDuration, googleProtobuf000.Duration.deserializeBinaryFromReader);
|
|
151
|
-
break;
|
|
152
|
-
case 26:
|
|
153
|
-
_instance.payloadId = _reader.readString();
|
|
154
|
-
break;
|
|
155
|
-
case 27:
|
|
156
|
-
_instance.createdBy = _reader.readString();
|
|
157
|
-
break;
|
|
158
|
-
case 16:
|
|
159
|
-
_instance.output = new TaskDetailed.Output();
|
|
160
|
-
_reader.readMessage(_instance.output, TaskDetailed.Output.deserializeBinaryFromReader);
|
|
161
|
-
break;
|
|
162
|
-
case 17:
|
|
163
|
-
_instance.podHostname = _reader.readString();
|
|
164
|
-
break;
|
|
165
|
-
default:
|
|
166
|
-
_reader.skipField();
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
TaskDetailed.refineValues(_instance);
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* Serializes a message to binary format using provided binary reader
|
|
173
|
-
* @param _instance message instance
|
|
174
|
-
* @param _writer binary writer instance
|
|
175
|
-
*/
|
|
176
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
177
|
-
if (_instance.id) {
|
|
178
|
-
_writer.writeString(1, _instance.id);
|
|
179
|
-
}
|
|
180
|
-
if (_instance.sessionId) {
|
|
181
|
-
_writer.writeString(2, _instance.sessionId);
|
|
182
|
-
}
|
|
183
|
-
if (_instance.ownerPodId) {
|
|
184
|
-
_writer.writeString(3, _instance.ownerPodId);
|
|
185
|
-
}
|
|
186
|
-
if (_instance.initialTaskId) {
|
|
187
|
-
_writer.writeString(22, _instance.initialTaskId);
|
|
188
|
-
}
|
|
189
|
-
if (_instance.parentTaskIds && _instance.parentTaskIds.length) {
|
|
190
|
-
_writer.writeRepeatedString(4, _instance.parentTaskIds);
|
|
191
|
-
}
|
|
192
|
-
if (_instance.dataDependencies && _instance.dataDependencies.length) {
|
|
193
|
-
_writer.writeRepeatedString(5, _instance.dataDependencies);
|
|
194
|
-
}
|
|
195
|
-
if (_instance.expectedOutputIds && _instance.expectedOutputIds.length) {
|
|
196
|
-
_writer.writeRepeatedString(6, _instance.expectedOutputIds);
|
|
197
|
-
}
|
|
198
|
-
if (_instance.retryOfIds && _instance.retryOfIds.length) {
|
|
199
|
-
_writer.writeRepeatedString(7, _instance.retryOfIds);
|
|
200
|
-
}
|
|
201
|
-
if (_instance.status) {
|
|
202
|
-
_writer.writeEnum(8, _instance.status);
|
|
203
|
-
}
|
|
204
|
-
if (_instance.statusMessage) {
|
|
205
|
-
_writer.writeString(9, _instance.statusMessage);
|
|
206
|
-
}
|
|
207
|
-
if (_instance.options) {
|
|
208
|
-
_writer.writeMessage(10, _instance.options, armonikApiGrpcV1005.TaskOptions.serializeBinaryToWriter);
|
|
209
|
-
}
|
|
210
|
-
if (_instance.createdAt) {
|
|
211
|
-
_writer.writeMessage(11, _instance.createdAt, googleProtobuf004.Timestamp.serializeBinaryToWriter);
|
|
212
|
-
}
|
|
213
|
-
if (_instance.submittedAt) {
|
|
214
|
-
_writer.writeMessage(12, _instance.submittedAt, googleProtobuf004.Timestamp.serializeBinaryToWriter);
|
|
215
|
-
}
|
|
216
|
-
if (_instance.receivedAt) {
|
|
217
|
-
_writer.writeMessage(18, _instance.receivedAt, googleProtobuf004.Timestamp.serializeBinaryToWriter);
|
|
218
|
-
}
|
|
219
|
-
if (_instance.acquiredAt) {
|
|
220
|
-
_writer.writeMessage(19, _instance.acquiredAt, googleProtobuf004.Timestamp.serializeBinaryToWriter);
|
|
221
|
-
}
|
|
222
|
-
if (_instance.fetchedAt) {
|
|
223
|
-
_writer.writeMessage(25, _instance.fetchedAt, googleProtobuf004.Timestamp.serializeBinaryToWriter);
|
|
224
|
-
}
|
|
225
|
-
if (_instance.startedAt) {
|
|
226
|
-
_writer.writeMessage(13, _instance.startedAt, googleProtobuf004.Timestamp.serializeBinaryToWriter);
|
|
227
|
-
}
|
|
228
|
-
if (_instance.processedAt) {
|
|
229
|
-
_writer.writeMessage(24, _instance.processedAt, googleProtobuf004.Timestamp.serializeBinaryToWriter);
|
|
230
|
-
}
|
|
231
|
-
if (_instance.endedAt) {
|
|
232
|
-
_writer.writeMessage(14, _instance.endedAt, googleProtobuf004.Timestamp.serializeBinaryToWriter);
|
|
233
|
-
}
|
|
234
|
-
if (_instance.podTtl) {
|
|
235
|
-
_writer.writeMessage(15, _instance.podTtl, googleProtobuf004.Timestamp.serializeBinaryToWriter);
|
|
236
|
-
}
|
|
237
|
-
if (_instance.creationToEndDuration) {
|
|
238
|
-
_writer.writeMessage(20, _instance.creationToEndDuration, googleProtobuf000.Duration.serializeBinaryToWriter);
|
|
239
|
-
}
|
|
240
|
-
if (_instance.processingToEndDuration) {
|
|
241
|
-
_writer.writeMessage(21, _instance.processingToEndDuration, googleProtobuf000.Duration.serializeBinaryToWriter);
|
|
242
|
-
}
|
|
243
|
-
if (_instance.receivedToEndDuration) {
|
|
244
|
-
_writer.writeMessage(23, _instance.receivedToEndDuration, googleProtobuf000.Duration.serializeBinaryToWriter);
|
|
245
|
-
}
|
|
246
|
-
if (_instance.payloadId) {
|
|
247
|
-
_writer.writeString(26, _instance.payloadId);
|
|
248
|
-
}
|
|
249
|
-
if (_instance.createdBy) {
|
|
250
|
-
_writer.writeString(27, _instance.createdBy);
|
|
251
|
-
}
|
|
252
|
-
if (_instance.output) {
|
|
253
|
-
_writer.writeMessage(16, _instance.output, TaskDetailed.Output.serializeBinaryToWriter);
|
|
254
|
-
}
|
|
255
|
-
if (_instance.podHostname) {
|
|
256
|
-
_writer.writeString(17, _instance.podHostname);
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
/**
|
|
260
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
261
|
-
* @param _value initial values object or instance of TaskDetailed to deeply clone from
|
|
262
|
-
*/
|
|
263
|
-
constructor(_value) {
|
|
264
|
-
_value = _value || {};
|
|
265
|
-
this.id = _value.id;
|
|
266
|
-
this.sessionId = _value.sessionId;
|
|
267
|
-
this.ownerPodId = _value.ownerPodId;
|
|
268
|
-
this.initialTaskId = _value.initialTaskId;
|
|
269
|
-
this.parentTaskIds = (_value.parentTaskIds || []).slice();
|
|
270
|
-
this.dataDependencies = (_value.dataDependencies || []).slice();
|
|
271
|
-
this.expectedOutputIds = (_value.expectedOutputIds || []).slice();
|
|
272
|
-
this.retryOfIds = (_value.retryOfIds || []).slice();
|
|
273
|
-
this.status = _value.status;
|
|
274
|
-
this.statusMessage = _value.statusMessage;
|
|
275
|
-
this.options = _value.options
|
|
276
|
-
? new armonikApiGrpcV1005.TaskOptions(_value.options)
|
|
277
|
-
: undefined;
|
|
278
|
-
this.createdAt = _value.createdAt
|
|
279
|
-
? new googleProtobuf004.Timestamp(_value.createdAt)
|
|
280
|
-
: undefined;
|
|
281
|
-
this.submittedAt = _value.submittedAt
|
|
282
|
-
? new googleProtobuf004.Timestamp(_value.submittedAt)
|
|
283
|
-
: undefined;
|
|
284
|
-
this.receivedAt = _value.receivedAt
|
|
285
|
-
? new googleProtobuf004.Timestamp(_value.receivedAt)
|
|
286
|
-
: undefined;
|
|
287
|
-
this.acquiredAt = _value.acquiredAt
|
|
288
|
-
? new googleProtobuf004.Timestamp(_value.acquiredAt)
|
|
289
|
-
: undefined;
|
|
290
|
-
this.fetchedAt = _value.fetchedAt
|
|
291
|
-
? new googleProtobuf004.Timestamp(_value.fetchedAt)
|
|
292
|
-
: undefined;
|
|
293
|
-
this.startedAt = _value.startedAt
|
|
294
|
-
? new googleProtobuf004.Timestamp(_value.startedAt)
|
|
295
|
-
: undefined;
|
|
296
|
-
this.processedAt = _value.processedAt
|
|
297
|
-
? new googleProtobuf004.Timestamp(_value.processedAt)
|
|
298
|
-
: undefined;
|
|
299
|
-
this.endedAt = _value.endedAt
|
|
300
|
-
? new googleProtobuf004.Timestamp(_value.endedAt)
|
|
301
|
-
: undefined;
|
|
302
|
-
this.podTtl = _value.podTtl
|
|
303
|
-
? new googleProtobuf004.Timestamp(_value.podTtl)
|
|
304
|
-
: undefined;
|
|
305
|
-
this.creationToEndDuration = _value.creationToEndDuration
|
|
306
|
-
? new googleProtobuf000.Duration(_value.creationToEndDuration)
|
|
307
|
-
: undefined;
|
|
308
|
-
this.processingToEndDuration = _value.processingToEndDuration
|
|
309
|
-
? new googleProtobuf000.Duration(_value.processingToEndDuration)
|
|
310
|
-
: undefined;
|
|
311
|
-
this.receivedToEndDuration = _value.receivedToEndDuration
|
|
312
|
-
? new googleProtobuf000.Duration(_value.receivedToEndDuration)
|
|
313
|
-
: undefined;
|
|
314
|
-
this.payloadId = _value.payloadId;
|
|
315
|
-
this.createdBy = _value.createdBy;
|
|
316
|
-
this.output = _value.output
|
|
317
|
-
? new TaskDetailed.Output(_value.output)
|
|
318
|
-
: undefined;
|
|
319
|
-
this.podHostname = _value.podHostname;
|
|
320
|
-
TaskDetailed.refineValues(this);
|
|
321
|
-
}
|
|
322
|
-
get id() {
|
|
323
|
-
return this._id;
|
|
324
|
-
}
|
|
325
|
-
set id(value) {
|
|
326
|
-
this._id = value;
|
|
327
|
-
}
|
|
328
|
-
get sessionId() {
|
|
329
|
-
return this._sessionId;
|
|
330
|
-
}
|
|
331
|
-
set sessionId(value) {
|
|
332
|
-
this._sessionId = value;
|
|
333
|
-
}
|
|
334
|
-
get ownerPodId() {
|
|
335
|
-
return this._ownerPodId;
|
|
336
|
-
}
|
|
337
|
-
set ownerPodId(value) {
|
|
338
|
-
this._ownerPodId = value;
|
|
339
|
-
}
|
|
340
|
-
get initialTaskId() {
|
|
341
|
-
return this._initialTaskId;
|
|
342
|
-
}
|
|
343
|
-
set initialTaskId(value) {
|
|
344
|
-
this._initialTaskId = value;
|
|
345
|
-
}
|
|
346
|
-
get parentTaskIds() {
|
|
347
|
-
return this._parentTaskIds;
|
|
348
|
-
}
|
|
349
|
-
set parentTaskIds(value) {
|
|
350
|
-
this._parentTaskIds = value;
|
|
351
|
-
}
|
|
352
|
-
get dataDependencies() {
|
|
353
|
-
return this._dataDependencies;
|
|
354
|
-
}
|
|
355
|
-
set dataDependencies(value) {
|
|
356
|
-
this._dataDependencies = value;
|
|
357
|
-
}
|
|
358
|
-
get expectedOutputIds() {
|
|
359
|
-
return this._expectedOutputIds;
|
|
360
|
-
}
|
|
361
|
-
set expectedOutputIds(value) {
|
|
362
|
-
this._expectedOutputIds = value;
|
|
363
|
-
}
|
|
364
|
-
get retryOfIds() {
|
|
365
|
-
return this._retryOfIds;
|
|
366
|
-
}
|
|
367
|
-
set retryOfIds(value) {
|
|
368
|
-
this._retryOfIds = value;
|
|
369
|
-
}
|
|
370
|
-
get status() {
|
|
371
|
-
return this._status;
|
|
372
|
-
}
|
|
373
|
-
set status(value) {
|
|
374
|
-
this._status = value;
|
|
375
|
-
}
|
|
376
|
-
get statusMessage() {
|
|
377
|
-
return this._statusMessage;
|
|
378
|
-
}
|
|
379
|
-
set statusMessage(value) {
|
|
380
|
-
this._statusMessage = value;
|
|
381
|
-
}
|
|
382
|
-
get options() {
|
|
383
|
-
return this._options;
|
|
384
|
-
}
|
|
385
|
-
set options(value) {
|
|
386
|
-
this._options = value;
|
|
387
|
-
}
|
|
388
|
-
get createdAt() {
|
|
389
|
-
return this._createdAt;
|
|
390
|
-
}
|
|
391
|
-
set createdAt(value) {
|
|
392
|
-
this._createdAt = value;
|
|
393
|
-
}
|
|
394
|
-
get submittedAt() {
|
|
395
|
-
return this._submittedAt;
|
|
396
|
-
}
|
|
397
|
-
set submittedAt(value) {
|
|
398
|
-
this._submittedAt = value;
|
|
399
|
-
}
|
|
400
|
-
get receivedAt() {
|
|
401
|
-
return this._receivedAt;
|
|
402
|
-
}
|
|
403
|
-
set receivedAt(value) {
|
|
404
|
-
this._receivedAt = value;
|
|
405
|
-
}
|
|
406
|
-
get acquiredAt() {
|
|
407
|
-
return this._acquiredAt;
|
|
408
|
-
}
|
|
409
|
-
set acquiredAt(value) {
|
|
410
|
-
this._acquiredAt = value;
|
|
411
|
-
}
|
|
412
|
-
get fetchedAt() {
|
|
413
|
-
return this._fetchedAt;
|
|
414
|
-
}
|
|
415
|
-
set fetchedAt(value) {
|
|
416
|
-
this._fetchedAt = value;
|
|
417
|
-
}
|
|
418
|
-
get startedAt() {
|
|
419
|
-
return this._startedAt;
|
|
420
|
-
}
|
|
421
|
-
set startedAt(value) {
|
|
422
|
-
this._startedAt = value;
|
|
423
|
-
}
|
|
424
|
-
get processedAt() {
|
|
425
|
-
return this._processedAt;
|
|
426
|
-
}
|
|
427
|
-
set processedAt(value) {
|
|
428
|
-
this._processedAt = value;
|
|
429
|
-
}
|
|
430
|
-
get endedAt() {
|
|
431
|
-
return this._endedAt;
|
|
432
|
-
}
|
|
433
|
-
set endedAt(value) {
|
|
434
|
-
this._endedAt = value;
|
|
435
|
-
}
|
|
436
|
-
get podTtl() {
|
|
437
|
-
return this._podTtl;
|
|
438
|
-
}
|
|
439
|
-
set podTtl(value) {
|
|
440
|
-
this._podTtl = value;
|
|
441
|
-
}
|
|
442
|
-
get creationToEndDuration() {
|
|
443
|
-
return this._creationToEndDuration;
|
|
444
|
-
}
|
|
445
|
-
set creationToEndDuration(value) {
|
|
446
|
-
this._creationToEndDuration = value;
|
|
447
|
-
}
|
|
448
|
-
get processingToEndDuration() {
|
|
449
|
-
return this._processingToEndDuration;
|
|
450
|
-
}
|
|
451
|
-
set processingToEndDuration(value) {
|
|
452
|
-
this._processingToEndDuration = value;
|
|
453
|
-
}
|
|
454
|
-
get receivedToEndDuration() {
|
|
455
|
-
return this._receivedToEndDuration;
|
|
456
|
-
}
|
|
457
|
-
set receivedToEndDuration(value) {
|
|
458
|
-
this._receivedToEndDuration = value;
|
|
459
|
-
}
|
|
460
|
-
get payloadId() {
|
|
461
|
-
return this._payloadId;
|
|
462
|
-
}
|
|
463
|
-
set payloadId(value) {
|
|
464
|
-
this._payloadId = value;
|
|
465
|
-
}
|
|
466
|
-
get createdBy() {
|
|
467
|
-
return this._createdBy;
|
|
468
|
-
}
|
|
469
|
-
set createdBy(value) {
|
|
470
|
-
this._createdBy = value;
|
|
471
|
-
}
|
|
472
|
-
get output() {
|
|
473
|
-
return this._output;
|
|
474
|
-
}
|
|
475
|
-
set output(value) {
|
|
476
|
-
this._output = value;
|
|
477
|
-
}
|
|
478
|
-
get podHostname() {
|
|
479
|
-
return this._podHostname;
|
|
480
|
-
}
|
|
481
|
-
set podHostname(value) {
|
|
482
|
-
this._podHostname = value;
|
|
483
|
-
}
|
|
484
|
-
/**
|
|
485
|
-
* Serialize message to binary data
|
|
486
|
-
* @param instance message instance
|
|
487
|
-
*/
|
|
488
|
-
serializeBinary() {
|
|
489
|
-
const writer = new BinaryWriter();
|
|
490
|
-
TaskDetailed.serializeBinaryToWriter(this, writer);
|
|
491
|
-
return writer.getResultBuffer();
|
|
492
|
-
}
|
|
493
|
-
/**
|
|
494
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
495
|
-
*/
|
|
496
|
-
toObject() {
|
|
497
|
-
return {
|
|
498
|
-
id: this.id,
|
|
499
|
-
sessionId: this.sessionId,
|
|
500
|
-
ownerPodId: this.ownerPodId,
|
|
501
|
-
initialTaskId: this.initialTaskId,
|
|
502
|
-
parentTaskIds: (this.parentTaskIds || []).slice(),
|
|
503
|
-
dataDependencies: (this.dataDependencies || []).slice(),
|
|
504
|
-
expectedOutputIds: (this.expectedOutputIds || []).slice(),
|
|
505
|
-
retryOfIds: (this.retryOfIds || []).slice(),
|
|
506
|
-
status: this.status,
|
|
507
|
-
statusMessage: this.statusMessage,
|
|
508
|
-
options: this.options ? this.options.toObject() : undefined,
|
|
509
|
-
createdAt: this.createdAt ? this.createdAt.toObject() : undefined,
|
|
510
|
-
submittedAt: this.submittedAt ? this.submittedAt.toObject() : undefined,
|
|
511
|
-
receivedAt: this.receivedAt ? this.receivedAt.toObject() : undefined,
|
|
512
|
-
acquiredAt: this.acquiredAt ? this.acquiredAt.toObject() : undefined,
|
|
513
|
-
fetchedAt: this.fetchedAt ? this.fetchedAt.toObject() : undefined,
|
|
514
|
-
startedAt: this.startedAt ? this.startedAt.toObject() : undefined,
|
|
515
|
-
processedAt: this.processedAt ? this.processedAt.toObject() : undefined,
|
|
516
|
-
endedAt: this.endedAt ? this.endedAt.toObject() : undefined,
|
|
517
|
-
podTtl: this.podTtl ? this.podTtl.toObject() : undefined,
|
|
518
|
-
creationToEndDuration: this.creationToEndDuration
|
|
519
|
-
? this.creationToEndDuration.toObject()
|
|
520
|
-
: undefined,
|
|
521
|
-
processingToEndDuration: this.processingToEndDuration
|
|
522
|
-
? this.processingToEndDuration.toObject()
|
|
523
|
-
: undefined,
|
|
524
|
-
receivedToEndDuration: this.receivedToEndDuration
|
|
525
|
-
? this.receivedToEndDuration.toObject()
|
|
526
|
-
: undefined,
|
|
527
|
-
payloadId: this.payloadId,
|
|
528
|
-
createdBy: this.createdBy,
|
|
529
|
-
output: this.output ? this.output.toObject() : undefined,
|
|
530
|
-
podHostname: this.podHostname
|
|
531
|
-
};
|
|
532
|
-
}
|
|
533
|
-
/**
|
|
534
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
535
|
-
*/
|
|
536
|
-
toJSON() {
|
|
537
|
-
return this.toObject();
|
|
538
|
-
}
|
|
539
|
-
/**
|
|
540
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
541
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
542
|
-
* 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
|
|
543
|
-
*/
|
|
544
|
-
toProtobufJSON(
|
|
545
|
-
// @ts-ignore
|
|
546
|
-
options) {
|
|
547
|
-
return {
|
|
548
|
-
id: this.id,
|
|
549
|
-
sessionId: this.sessionId,
|
|
550
|
-
ownerPodId: this.ownerPodId,
|
|
551
|
-
initialTaskId: this.initialTaskId,
|
|
552
|
-
parentTaskIds: (this.parentTaskIds || []).slice(),
|
|
553
|
-
dataDependencies: (this.dataDependencies || []).slice(),
|
|
554
|
-
expectedOutputIds: (this.expectedOutputIds || []).slice(),
|
|
555
|
-
retryOfIds: (this.retryOfIds || []).slice(),
|
|
556
|
-
status: armonikApiGrpcV1Task_status001.TaskStatus[this.status === null || this.status === undefined ? 0 : this.status],
|
|
557
|
-
statusMessage: this.statusMessage,
|
|
558
|
-
options: this.options ? this.options.toProtobufJSON(options) : null,
|
|
559
|
-
createdAt: this.createdAt ? this.createdAt.toProtobufJSON(options) : null,
|
|
560
|
-
submittedAt: this.submittedAt
|
|
561
|
-
? this.submittedAt.toProtobufJSON(options)
|
|
562
|
-
: null,
|
|
563
|
-
receivedAt: this.receivedAt
|
|
564
|
-
? this.receivedAt.toProtobufJSON(options)
|
|
565
|
-
: null,
|
|
566
|
-
acquiredAt: this.acquiredAt
|
|
567
|
-
? this.acquiredAt.toProtobufJSON(options)
|
|
568
|
-
: null,
|
|
569
|
-
fetchedAt: this.fetchedAt ? this.fetchedAt.toProtobufJSON(options) : null,
|
|
570
|
-
startedAt: this.startedAt ? this.startedAt.toProtobufJSON(options) : null,
|
|
571
|
-
processedAt: this.processedAt
|
|
572
|
-
? this.processedAt.toProtobufJSON(options)
|
|
573
|
-
: null,
|
|
574
|
-
endedAt: this.endedAt ? this.endedAt.toProtobufJSON(options) : null,
|
|
575
|
-
podTtl: this.podTtl ? this.podTtl.toProtobufJSON(options) : null,
|
|
576
|
-
creationToEndDuration: this.creationToEndDuration
|
|
577
|
-
? this.creationToEndDuration.toProtobufJSON(options)
|
|
578
|
-
: null,
|
|
579
|
-
processingToEndDuration: this.processingToEndDuration
|
|
580
|
-
? this.processingToEndDuration.toProtobufJSON(options)
|
|
581
|
-
: null,
|
|
582
|
-
receivedToEndDuration: this.receivedToEndDuration
|
|
583
|
-
? this.receivedToEndDuration.toProtobufJSON(options)
|
|
584
|
-
: null,
|
|
585
|
-
payloadId: this.payloadId,
|
|
586
|
-
createdBy: this.createdBy,
|
|
587
|
-
output: this.output ? this.output.toProtobufJSON(options) : null,
|
|
588
|
-
podHostname: this.podHostname
|
|
589
|
-
};
|
|
590
|
-
}
|
|
591
|
-
}
|
|
592
|
-
(function (TaskDetailed) {
|
|
593
|
-
/**
|
|
594
|
-
* Message implementation for armonik.api.grpc.v1.tasks.TaskDetailed.Output
|
|
595
|
-
*/
|
|
596
|
-
class Output {
|
|
597
|
-
static { this.id = 'armonik.api.grpc.v1.tasks.TaskDetailed.Output'; }
|
|
598
|
-
/**
|
|
599
|
-
* Deserialize binary data to message
|
|
600
|
-
* @param instance message instance
|
|
601
|
-
*/
|
|
602
|
-
static deserializeBinary(bytes) {
|
|
603
|
-
const instance = new Output();
|
|
604
|
-
Output.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
605
|
-
return instance;
|
|
606
|
-
}
|
|
607
|
-
/**
|
|
608
|
-
* Check all the properties and set default protobuf values if necessary
|
|
609
|
-
* @param _instance message instance
|
|
610
|
-
*/
|
|
611
|
-
static refineValues(_instance) {
|
|
612
|
-
_instance.success = _instance.success || false;
|
|
613
|
-
_instance.error = _instance.error || '';
|
|
614
|
-
}
|
|
615
|
-
/**
|
|
616
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
617
|
-
* @param _instance message instance
|
|
618
|
-
* @param _reader binary reader instance
|
|
619
|
-
*/
|
|
620
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
621
|
-
while (_reader.nextField()) {
|
|
622
|
-
if (_reader.isEndGroup())
|
|
623
|
-
break;
|
|
624
|
-
switch (_reader.getFieldNumber()) {
|
|
625
|
-
case 1:
|
|
626
|
-
_instance.success = _reader.readBool();
|
|
627
|
-
break;
|
|
628
|
-
case 2:
|
|
629
|
-
_instance.error = _reader.readString();
|
|
630
|
-
break;
|
|
631
|
-
default:
|
|
632
|
-
_reader.skipField();
|
|
633
|
-
}
|
|
634
|
-
}
|
|
635
|
-
Output.refineValues(_instance);
|
|
636
|
-
}
|
|
637
|
-
/**
|
|
638
|
-
* Serializes a message to binary format using provided binary reader
|
|
639
|
-
* @param _instance message instance
|
|
640
|
-
* @param _writer binary writer instance
|
|
641
|
-
*/
|
|
642
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
643
|
-
if (_instance.success) {
|
|
644
|
-
_writer.writeBool(1, _instance.success);
|
|
645
|
-
}
|
|
646
|
-
if (_instance.error) {
|
|
647
|
-
_writer.writeString(2, _instance.error);
|
|
648
|
-
}
|
|
649
|
-
}
|
|
650
|
-
/**
|
|
651
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
652
|
-
* @param _value initial values object or instance of Output to deeply clone from
|
|
653
|
-
*/
|
|
654
|
-
constructor(_value) {
|
|
655
|
-
_value = _value || {};
|
|
656
|
-
this.success = _value.success;
|
|
657
|
-
this.error = _value.error;
|
|
658
|
-
Output.refineValues(this);
|
|
659
|
-
}
|
|
660
|
-
get success() {
|
|
661
|
-
return this._success;
|
|
662
|
-
}
|
|
663
|
-
set success(value) {
|
|
664
|
-
this._success = value;
|
|
665
|
-
}
|
|
666
|
-
get error() {
|
|
667
|
-
return this._error;
|
|
668
|
-
}
|
|
669
|
-
set error(value) {
|
|
670
|
-
this._error = value;
|
|
671
|
-
}
|
|
672
|
-
/**
|
|
673
|
-
* Serialize message to binary data
|
|
674
|
-
* @param instance message instance
|
|
675
|
-
*/
|
|
676
|
-
serializeBinary() {
|
|
677
|
-
const writer = new BinaryWriter();
|
|
678
|
-
Output.serializeBinaryToWriter(this, writer);
|
|
679
|
-
return writer.getResultBuffer();
|
|
680
|
-
}
|
|
681
|
-
/**
|
|
682
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
683
|
-
*/
|
|
684
|
-
toObject() {
|
|
685
|
-
return {
|
|
686
|
-
success: this.success,
|
|
687
|
-
error: this.error
|
|
688
|
-
};
|
|
689
|
-
}
|
|
690
|
-
/**
|
|
691
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
692
|
-
*/
|
|
693
|
-
toJSON() {
|
|
694
|
-
return this.toObject();
|
|
695
|
-
}
|
|
696
|
-
/**
|
|
697
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
698
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
699
|
-
* 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
|
|
700
|
-
*/
|
|
701
|
-
toProtobufJSON(
|
|
702
|
-
// @ts-ignore
|
|
703
|
-
options) {
|
|
704
|
-
return {
|
|
705
|
-
success: this.success,
|
|
706
|
-
error: this.error
|
|
707
|
-
};
|
|
708
|
-
}
|
|
709
|
-
}
|
|
710
|
-
TaskDetailed.Output = Output;
|
|
711
|
-
})(TaskDetailed || (TaskDetailed = {}));
|
|
712
|
-
/**
|
|
713
|
-
* Message implementation for armonik.api.grpc.v1.tasks.TaskSummary
|
|
714
|
-
*/
|
|
715
|
-
export class TaskSummary {
|
|
716
|
-
static { this.id = 'armonik.api.grpc.v1.tasks.TaskSummary'; }
|
|
717
|
-
/**
|
|
718
|
-
* Deserialize binary data to message
|
|
719
|
-
* @param instance message instance
|
|
720
|
-
*/
|
|
721
|
-
static deserializeBinary(bytes) {
|
|
722
|
-
const instance = new TaskSummary();
|
|
723
|
-
TaskSummary.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
724
|
-
return instance;
|
|
725
|
-
}
|
|
726
|
-
/**
|
|
727
|
-
* Check all the properties and set default protobuf values if necessary
|
|
728
|
-
* @param _instance message instance
|
|
729
|
-
*/
|
|
730
|
-
static refineValues(_instance) {
|
|
731
|
-
_instance.id = _instance.id || '';
|
|
732
|
-
_instance.sessionId = _instance.sessionId || '';
|
|
733
|
-
_instance.ownerPodId = _instance.ownerPodId || '';
|
|
734
|
-
_instance.initialTaskId = _instance.initialTaskId || '';
|
|
735
|
-
_instance.countParentTaskIds = _instance.countParentTaskIds || '0';
|
|
736
|
-
_instance.countDataDependencies = _instance.countDataDependencies || '0';
|
|
737
|
-
_instance.countExpectedOutputIds = _instance.countExpectedOutputIds || '0';
|
|
738
|
-
_instance.countRetryOfIds = _instance.countRetryOfIds || '0';
|
|
739
|
-
_instance.status = _instance.status || 0;
|
|
740
|
-
_instance.statusMessage = _instance.statusMessage || '';
|
|
741
|
-
_instance.options = _instance.options || undefined;
|
|
742
|
-
_instance.createdAt = _instance.createdAt || undefined;
|
|
743
|
-
_instance.submittedAt = _instance.submittedAt || undefined;
|
|
744
|
-
_instance.receivedAt = _instance.receivedAt || undefined;
|
|
745
|
-
_instance.acquiredAt = _instance.acquiredAt || undefined;
|
|
746
|
-
_instance.fetchedAt = _instance.fetchedAt || undefined;
|
|
747
|
-
_instance.startedAt = _instance.startedAt || undefined;
|
|
748
|
-
_instance.processedAt = _instance.processedAt || undefined;
|
|
749
|
-
_instance.endedAt = _instance.endedAt || undefined;
|
|
750
|
-
_instance.podTtl = _instance.podTtl || undefined;
|
|
751
|
-
_instance.creationToEndDuration =
|
|
752
|
-
_instance.creationToEndDuration || undefined;
|
|
753
|
-
_instance.processingToEndDuration =
|
|
754
|
-
_instance.processingToEndDuration || undefined;
|
|
755
|
-
_instance.receivedToEndDuration =
|
|
756
|
-
_instance.receivedToEndDuration || undefined;
|
|
757
|
-
_instance.payloadId = _instance.payloadId || '';
|
|
758
|
-
_instance.createdBy = _instance.createdBy || '';
|
|
759
|
-
_instance.error = _instance.error || '';
|
|
760
|
-
_instance.podHostname = _instance.podHostname || '';
|
|
761
|
-
}
|
|
762
|
-
/**
|
|
763
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
764
|
-
* @param _instance message instance
|
|
765
|
-
* @param _reader binary reader instance
|
|
766
|
-
*/
|
|
767
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
768
|
-
while (_reader.nextField()) {
|
|
769
|
-
if (_reader.isEndGroup())
|
|
770
|
-
break;
|
|
771
|
-
switch (_reader.getFieldNumber()) {
|
|
772
|
-
case 1:
|
|
773
|
-
_instance.id = _reader.readString();
|
|
774
|
-
break;
|
|
775
|
-
case 2:
|
|
776
|
-
_instance.sessionId = _reader.readString();
|
|
777
|
-
break;
|
|
778
|
-
case 10:
|
|
779
|
-
_instance.ownerPodId = _reader.readString();
|
|
780
|
-
break;
|
|
781
|
-
case 22:
|
|
782
|
-
_instance.initialTaskId = _reader.readString();
|
|
783
|
-
break;
|
|
784
|
-
case 21:
|
|
785
|
-
_instance.countParentTaskIds = _reader.readInt64String();
|
|
786
|
-
break;
|
|
787
|
-
case 11:
|
|
788
|
-
_instance.countDataDependencies = _reader.readInt64String();
|
|
789
|
-
break;
|
|
790
|
-
case 13:
|
|
791
|
-
_instance.countExpectedOutputIds = _reader.readInt64String();
|
|
792
|
-
break;
|
|
793
|
-
case 14:
|
|
794
|
-
_instance.countRetryOfIds = _reader.readInt64String();
|
|
795
|
-
break;
|
|
796
|
-
case 4:
|
|
797
|
-
_instance.status = _reader.readEnum();
|
|
798
|
-
break;
|
|
799
|
-
case 9:
|
|
800
|
-
_instance.statusMessage = _reader.readString();
|
|
801
|
-
break;
|
|
802
|
-
case 3:
|
|
803
|
-
_instance.options = new armonikApiGrpcV1005.TaskOptions();
|
|
804
|
-
_reader.readMessage(_instance.options, armonikApiGrpcV1005.TaskOptions.deserializeBinaryFromReader);
|
|
805
|
-
break;
|
|
806
|
-
case 5:
|
|
807
|
-
_instance.createdAt = new googleProtobuf004.Timestamp();
|
|
808
|
-
_reader.readMessage(_instance.createdAt, googleProtobuf004.Timestamp.deserializeBinaryFromReader);
|
|
809
|
-
break;
|
|
810
|
-
case 12:
|
|
811
|
-
_instance.submittedAt = new googleProtobuf004.Timestamp();
|
|
812
|
-
_reader.readMessage(_instance.submittedAt, googleProtobuf004.Timestamp.deserializeBinaryFromReader);
|
|
813
|
-
break;
|
|
814
|
-
case 18:
|
|
815
|
-
_instance.receivedAt = new googleProtobuf004.Timestamp();
|
|
816
|
-
_reader.readMessage(_instance.receivedAt, googleProtobuf004.Timestamp.deserializeBinaryFromReader);
|
|
817
|
-
break;
|
|
818
|
-
case 19:
|
|
819
|
-
_instance.acquiredAt = new googleProtobuf004.Timestamp();
|
|
820
|
-
_reader.readMessage(_instance.acquiredAt, googleProtobuf004.Timestamp.deserializeBinaryFromReader);
|
|
821
|
-
break;
|
|
822
|
-
case 25:
|
|
823
|
-
_instance.fetchedAt = new googleProtobuf004.Timestamp();
|
|
824
|
-
_reader.readMessage(_instance.fetchedAt, googleProtobuf004.Timestamp.deserializeBinaryFromReader);
|
|
825
|
-
break;
|
|
826
|
-
case 6:
|
|
827
|
-
_instance.startedAt = new googleProtobuf004.Timestamp();
|
|
828
|
-
_reader.readMessage(_instance.startedAt, googleProtobuf004.Timestamp.deserializeBinaryFromReader);
|
|
829
|
-
break;
|
|
830
|
-
case 23:
|
|
831
|
-
_instance.processedAt = new googleProtobuf004.Timestamp();
|
|
832
|
-
_reader.readMessage(_instance.processedAt, googleProtobuf004.Timestamp.deserializeBinaryFromReader);
|
|
833
|
-
break;
|
|
834
|
-
case 7:
|
|
835
|
-
_instance.endedAt = new googleProtobuf004.Timestamp();
|
|
836
|
-
_reader.readMessage(_instance.endedAt, googleProtobuf004.Timestamp.deserializeBinaryFromReader);
|
|
837
|
-
break;
|
|
838
|
-
case 20:
|
|
839
|
-
_instance.podTtl = new googleProtobuf004.Timestamp();
|
|
840
|
-
_reader.readMessage(_instance.podTtl, googleProtobuf004.Timestamp.deserializeBinaryFromReader);
|
|
841
|
-
break;
|
|
842
|
-
case 15:
|
|
843
|
-
_instance.creationToEndDuration = new googleProtobuf000.Duration();
|
|
844
|
-
_reader.readMessage(_instance.creationToEndDuration, googleProtobuf000.Duration.deserializeBinaryFromReader);
|
|
845
|
-
break;
|
|
846
|
-
case 16:
|
|
847
|
-
_instance.processingToEndDuration = new googleProtobuf000.Duration();
|
|
848
|
-
_reader.readMessage(_instance.processingToEndDuration, googleProtobuf000.Duration.deserializeBinaryFromReader);
|
|
849
|
-
break;
|
|
850
|
-
case 24:
|
|
851
|
-
_instance.receivedToEndDuration = new googleProtobuf000.Duration();
|
|
852
|
-
_reader.readMessage(_instance.receivedToEndDuration, googleProtobuf000.Duration.deserializeBinaryFromReader);
|
|
853
|
-
break;
|
|
854
|
-
case 26:
|
|
855
|
-
_instance.payloadId = _reader.readString();
|
|
856
|
-
break;
|
|
857
|
-
case 27:
|
|
858
|
-
_instance.createdBy = _reader.readString();
|
|
859
|
-
break;
|
|
860
|
-
case 8:
|
|
861
|
-
_instance.error = _reader.readString();
|
|
862
|
-
break;
|
|
863
|
-
case 17:
|
|
864
|
-
_instance.podHostname = _reader.readString();
|
|
865
|
-
break;
|
|
866
|
-
default:
|
|
867
|
-
_reader.skipField();
|
|
868
|
-
}
|
|
869
|
-
}
|
|
870
|
-
TaskSummary.refineValues(_instance);
|
|
871
|
-
}
|
|
872
|
-
/**
|
|
873
|
-
* Serializes a message to binary format using provided binary reader
|
|
874
|
-
* @param _instance message instance
|
|
875
|
-
* @param _writer binary writer instance
|
|
876
|
-
*/
|
|
877
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
878
|
-
if (_instance.id) {
|
|
879
|
-
_writer.writeString(1, _instance.id);
|
|
880
|
-
}
|
|
881
|
-
if (_instance.sessionId) {
|
|
882
|
-
_writer.writeString(2, _instance.sessionId);
|
|
883
|
-
}
|
|
884
|
-
if (_instance.ownerPodId) {
|
|
885
|
-
_writer.writeString(10, _instance.ownerPodId);
|
|
886
|
-
}
|
|
887
|
-
if (_instance.initialTaskId) {
|
|
888
|
-
_writer.writeString(22, _instance.initialTaskId);
|
|
889
|
-
}
|
|
890
|
-
if (_instance.countParentTaskIds) {
|
|
891
|
-
_writer.writeInt64String(21, _instance.countParentTaskIds);
|
|
892
|
-
}
|
|
893
|
-
if (_instance.countDataDependencies) {
|
|
894
|
-
_writer.writeInt64String(11, _instance.countDataDependencies);
|
|
895
|
-
}
|
|
896
|
-
if (_instance.countExpectedOutputIds) {
|
|
897
|
-
_writer.writeInt64String(13, _instance.countExpectedOutputIds);
|
|
898
|
-
}
|
|
899
|
-
if (_instance.countRetryOfIds) {
|
|
900
|
-
_writer.writeInt64String(14, _instance.countRetryOfIds);
|
|
901
|
-
}
|
|
902
|
-
if (_instance.status) {
|
|
903
|
-
_writer.writeEnum(4, _instance.status);
|
|
904
|
-
}
|
|
905
|
-
if (_instance.statusMessage) {
|
|
906
|
-
_writer.writeString(9, _instance.statusMessage);
|
|
907
|
-
}
|
|
908
|
-
if (_instance.options) {
|
|
909
|
-
_writer.writeMessage(3, _instance.options, armonikApiGrpcV1005.TaskOptions.serializeBinaryToWriter);
|
|
910
|
-
}
|
|
911
|
-
if (_instance.createdAt) {
|
|
912
|
-
_writer.writeMessage(5, _instance.createdAt, googleProtobuf004.Timestamp.serializeBinaryToWriter);
|
|
913
|
-
}
|
|
914
|
-
if (_instance.submittedAt) {
|
|
915
|
-
_writer.writeMessage(12, _instance.submittedAt, googleProtobuf004.Timestamp.serializeBinaryToWriter);
|
|
916
|
-
}
|
|
917
|
-
if (_instance.receivedAt) {
|
|
918
|
-
_writer.writeMessage(18, _instance.receivedAt, googleProtobuf004.Timestamp.serializeBinaryToWriter);
|
|
919
|
-
}
|
|
920
|
-
if (_instance.acquiredAt) {
|
|
921
|
-
_writer.writeMessage(19, _instance.acquiredAt, googleProtobuf004.Timestamp.serializeBinaryToWriter);
|
|
922
|
-
}
|
|
923
|
-
if (_instance.fetchedAt) {
|
|
924
|
-
_writer.writeMessage(25, _instance.fetchedAt, googleProtobuf004.Timestamp.serializeBinaryToWriter);
|
|
925
|
-
}
|
|
926
|
-
if (_instance.startedAt) {
|
|
927
|
-
_writer.writeMessage(6, _instance.startedAt, googleProtobuf004.Timestamp.serializeBinaryToWriter);
|
|
928
|
-
}
|
|
929
|
-
if (_instance.processedAt) {
|
|
930
|
-
_writer.writeMessage(23, _instance.processedAt, googleProtobuf004.Timestamp.serializeBinaryToWriter);
|
|
931
|
-
}
|
|
932
|
-
if (_instance.endedAt) {
|
|
933
|
-
_writer.writeMessage(7, _instance.endedAt, googleProtobuf004.Timestamp.serializeBinaryToWriter);
|
|
934
|
-
}
|
|
935
|
-
if (_instance.podTtl) {
|
|
936
|
-
_writer.writeMessage(20, _instance.podTtl, googleProtobuf004.Timestamp.serializeBinaryToWriter);
|
|
937
|
-
}
|
|
938
|
-
if (_instance.creationToEndDuration) {
|
|
939
|
-
_writer.writeMessage(15, _instance.creationToEndDuration, googleProtobuf000.Duration.serializeBinaryToWriter);
|
|
940
|
-
}
|
|
941
|
-
if (_instance.processingToEndDuration) {
|
|
942
|
-
_writer.writeMessage(16, _instance.processingToEndDuration, googleProtobuf000.Duration.serializeBinaryToWriter);
|
|
943
|
-
}
|
|
944
|
-
if (_instance.receivedToEndDuration) {
|
|
945
|
-
_writer.writeMessage(24, _instance.receivedToEndDuration, googleProtobuf000.Duration.serializeBinaryToWriter);
|
|
946
|
-
}
|
|
947
|
-
if (_instance.payloadId) {
|
|
948
|
-
_writer.writeString(26, _instance.payloadId);
|
|
949
|
-
}
|
|
950
|
-
if (_instance.createdBy) {
|
|
951
|
-
_writer.writeString(27, _instance.createdBy);
|
|
952
|
-
}
|
|
953
|
-
if (_instance.error) {
|
|
954
|
-
_writer.writeString(8, _instance.error);
|
|
955
|
-
}
|
|
956
|
-
if (_instance.podHostname) {
|
|
957
|
-
_writer.writeString(17, _instance.podHostname);
|
|
958
|
-
}
|
|
959
|
-
}
|
|
960
|
-
/**
|
|
961
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
962
|
-
* @param _value initial values object or instance of TaskSummary to deeply clone from
|
|
963
|
-
*/
|
|
964
|
-
constructor(_value) {
|
|
965
|
-
_value = _value || {};
|
|
966
|
-
this.id = _value.id;
|
|
967
|
-
this.sessionId = _value.sessionId;
|
|
968
|
-
this.ownerPodId = _value.ownerPodId;
|
|
969
|
-
this.initialTaskId = _value.initialTaskId;
|
|
970
|
-
this.countParentTaskIds = _value.countParentTaskIds;
|
|
971
|
-
this.countDataDependencies = _value.countDataDependencies;
|
|
972
|
-
this.countExpectedOutputIds = _value.countExpectedOutputIds;
|
|
973
|
-
this.countRetryOfIds = _value.countRetryOfIds;
|
|
974
|
-
this.status = _value.status;
|
|
975
|
-
this.statusMessage = _value.statusMessage;
|
|
976
|
-
this.options = _value.options
|
|
977
|
-
? new armonikApiGrpcV1005.TaskOptions(_value.options)
|
|
978
|
-
: undefined;
|
|
979
|
-
this.createdAt = _value.createdAt
|
|
980
|
-
? new googleProtobuf004.Timestamp(_value.createdAt)
|
|
981
|
-
: undefined;
|
|
982
|
-
this.submittedAt = _value.submittedAt
|
|
983
|
-
? new googleProtobuf004.Timestamp(_value.submittedAt)
|
|
984
|
-
: undefined;
|
|
985
|
-
this.receivedAt = _value.receivedAt
|
|
986
|
-
? new googleProtobuf004.Timestamp(_value.receivedAt)
|
|
987
|
-
: undefined;
|
|
988
|
-
this.acquiredAt = _value.acquiredAt
|
|
989
|
-
? new googleProtobuf004.Timestamp(_value.acquiredAt)
|
|
990
|
-
: undefined;
|
|
991
|
-
this.fetchedAt = _value.fetchedAt
|
|
992
|
-
? new googleProtobuf004.Timestamp(_value.fetchedAt)
|
|
993
|
-
: undefined;
|
|
994
|
-
this.startedAt = _value.startedAt
|
|
995
|
-
? new googleProtobuf004.Timestamp(_value.startedAt)
|
|
996
|
-
: undefined;
|
|
997
|
-
this.processedAt = _value.processedAt
|
|
998
|
-
? new googleProtobuf004.Timestamp(_value.processedAt)
|
|
999
|
-
: undefined;
|
|
1000
|
-
this.endedAt = _value.endedAt
|
|
1001
|
-
? new googleProtobuf004.Timestamp(_value.endedAt)
|
|
1002
|
-
: undefined;
|
|
1003
|
-
this.podTtl = _value.podTtl
|
|
1004
|
-
? new googleProtobuf004.Timestamp(_value.podTtl)
|
|
1005
|
-
: undefined;
|
|
1006
|
-
this.creationToEndDuration = _value.creationToEndDuration
|
|
1007
|
-
? new googleProtobuf000.Duration(_value.creationToEndDuration)
|
|
1008
|
-
: undefined;
|
|
1009
|
-
this.processingToEndDuration = _value.processingToEndDuration
|
|
1010
|
-
? new googleProtobuf000.Duration(_value.processingToEndDuration)
|
|
1011
|
-
: undefined;
|
|
1012
|
-
this.receivedToEndDuration = _value.receivedToEndDuration
|
|
1013
|
-
? new googleProtobuf000.Duration(_value.receivedToEndDuration)
|
|
1014
|
-
: undefined;
|
|
1015
|
-
this.payloadId = _value.payloadId;
|
|
1016
|
-
this.createdBy = _value.createdBy;
|
|
1017
|
-
this.error = _value.error;
|
|
1018
|
-
this.podHostname = _value.podHostname;
|
|
1019
|
-
TaskSummary.refineValues(this);
|
|
1020
|
-
}
|
|
1021
|
-
get id() {
|
|
1022
|
-
return this._id;
|
|
1023
|
-
}
|
|
1024
|
-
set id(value) {
|
|
1025
|
-
this._id = value;
|
|
1026
|
-
}
|
|
1027
|
-
get sessionId() {
|
|
1028
|
-
return this._sessionId;
|
|
1029
|
-
}
|
|
1030
|
-
set sessionId(value) {
|
|
1031
|
-
this._sessionId = value;
|
|
1032
|
-
}
|
|
1033
|
-
get ownerPodId() {
|
|
1034
|
-
return this._ownerPodId;
|
|
1035
|
-
}
|
|
1036
|
-
set ownerPodId(value) {
|
|
1037
|
-
this._ownerPodId = value;
|
|
1038
|
-
}
|
|
1039
|
-
get initialTaskId() {
|
|
1040
|
-
return this._initialTaskId;
|
|
1041
|
-
}
|
|
1042
|
-
set initialTaskId(value) {
|
|
1043
|
-
this._initialTaskId = value;
|
|
1044
|
-
}
|
|
1045
|
-
get countParentTaskIds() {
|
|
1046
|
-
return this._countParentTaskIds;
|
|
1047
|
-
}
|
|
1048
|
-
set countParentTaskIds(value) {
|
|
1049
|
-
this._countParentTaskIds = value;
|
|
1050
|
-
}
|
|
1051
|
-
get countDataDependencies() {
|
|
1052
|
-
return this._countDataDependencies;
|
|
1053
|
-
}
|
|
1054
|
-
set countDataDependencies(value) {
|
|
1055
|
-
this._countDataDependencies = value;
|
|
1056
|
-
}
|
|
1057
|
-
get countExpectedOutputIds() {
|
|
1058
|
-
return this._countExpectedOutputIds;
|
|
1059
|
-
}
|
|
1060
|
-
set countExpectedOutputIds(value) {
|
|
1061
|
-
this._countExpectedOutputIds = value;
|
|
1062
|
-
}
|
|
1063
|
-
get countRetryOfIds() {
|
|
1064
|
-
return this._countRetryOfIds;
|
|
1065
|
-
}
|
|
1066
|
-
set countRetryOfIds(value) {
|
|
1067
|
-
this._countRetryOfIds = value;
|
|
1068
|
-
}
|
|
1069
|
-
get status() {
|
|
1070
|
-
return this._status;
|
|
1071
|
-
}
|
|
1072
|
-
set status(value) {
|
|
1073
|
-
this._status = value;
|
|
1074
|
-
}
|
|
1075
|
-
get statusMessage() {
|
|
1076
|
-
return this._statusMessage;
|
|
1077
|
-
}
|
|
1078
|
-
set statusMessage(value) {
|
|
1079
|
-
this._statusMessage = value;
|
|
1080
|
-
}
|
|
1081
|
-
get options() {
|
|
1082
|
-
return this._options;
|
|
1083
|
-
}
|
|
1084
|
-
set options(value) {
|
|
1085
|
-
this._options = value;
|
|
1086
|
-
}
|
|
1087
|
-
get createdAt() {
|
|
1088
|
-
return this._createdAt;
|
|
1089
|
-
}
|
|
1090
|
-
set createdAt(value) {
|
|
1091
|
-
this._createdAt = value;
|
|
1092
|
-
}
|
|
1093
|
-
get submittedAt() {
|
|
1094
|
-
return this._submittedAt;
|
|
1095
|
-
}
|
|
1096
|
-
set submittedAt(value) {
|
|
1097
|
-
this._submittedAt = value;
|
|
1098
|
-
}
|
|
1099
|
-
get receivedAt() {
|
|
1100
|
-
return this._receivedAt;
|
|
1101
|
-
}
|
|
1102
|
-
set receivedAt(value) {
|
|
1103
|
-
this._receivedAt = value;
|
|
1104
|
-
}
|
|
1105
|
-
get acquiredAt() {
|
|
1106
|
-
return this._acquiredAt;
|
|
1107
|
-
}
|
|
1108
|
-
set acquiredAt(value) {
|
|
1109
|
-
this._acquiredAt = value;
|
|
1110
|
-
}
|
|
1111
|
-
get fetchedAt() {
|
|
1112
|
-
return this._fetchedAt;
|
|
1113
|
-
}
|
|
1114
|
-
set fetchedAt(value) {
|
|
1115
|
-
this._fetchedAt = value;
|
|
1116
|
-
}
|
|
1117
|
-
get startedAt() {
|
|
1118
|
-
return this._startedAt;
|
|
1119
|
-
}
|
|
1120
|
-
set startedAt(value) {
|
|
1121
|
-
this._startedAt = value;
|
|
1122
|
-
}
|
|
1123
|
-
get processedAt() {
|
|
1124
|
-
return this._processedAt;
|
|
1125
|
-
}
|
|
1126
|
-
set processedAt(value) {
|
|
1127
|
-
this._processedAt = value;
|
|
1128
|
-
}
|
|
1129
|
-
get endedAt() {
|
|
1130
|
-
return this._endedAt;
|
|
1131
|
-
}
|
|
1132
|
-
set endedAt(value) {
|
|
1133
|
-
this._endedAt = value;
|
|
1134
|
-
}
|
|
1135
|
-
get podTtl() {
|
|
1136
|
-
return this._podTtl;
|
|
1137
|
-
}
|
|
1138
|
-
set podTtl(value) {
|
|
1139
|
-
this._podTtl = value;
|
|
1140
|
-
}
|
|
1141
|
-
get creationToEndDuration() {
|
|
1142
|
-
return this._creationToEndDuration;
|
|
1143
|
-
}
|
|
1144
|
-
set creationToEndDuration(value) {
|
|
1145
|
-
this._creationToEndDuration = value;
|
|
1146
|
-
}
|
|
1147
|
-
get processingToEndDuration() {
|
|
1148
|
-
return this._processingToEndDuration;
|
|
1149
|
-
}
|
|
1150
|
-
set processingToEndDuration(value) {
|
|
1151
|
-
this._processingToEndDuration = value;
|
|
1152
|
-
}
|
|
1153
|
-
get receivedToEndDuration() {
|
|
1154
|
-
return this._receivedToEndDuration;
|
|
1155
|
-
}
|
|
1156
|
-
set receivedToEndDuration(value) {
|
|
1157
|
-
this._receivedToEndDuration = value;
|
|
1158
|
-
}
|
|
1159
|
-
get payloadId() {
|
|
1160
|
-
return this._payloadId;
|
|
1161
|
-
}
|
|
1162
|
-
set payloadId(value) {
|
|
1163
|
-
this._payloadId = value;
|
|
1164
|
-
}
|
|
1165
|
-
get createdBy() {
|
|
1166
|
-
return this._createdBy;
|
|
1167
|
-
}
|
|
1168
|
-
set createdBy(value) {
|
|
1169
|
-
this._createdBy = value;
|
|
1170
|
-
}
|
|
1171
|
-
get error() {
|
|
1172
|
-
return this._error;
|
|
1173
|
-
}
|
|
1174
|
-
set error(value) {
|
|
1175
|
-
this._error = value;
|
|
1176
|
-
}
|
|
1177
|
-
get podHostname() {
|
|
1178
|
-
return this._podHostname;
|
|
1179
|
-
}
|
|
1180
|
-
set podHostname(value) {
|
|
1181
|
-
this._podHostname = value;
|
|
1182
|
-
}
|
|
1183
|
-
/**
|
|
1184
|
-
* Serialize message to binary data
|
|
1185
|
-
* @param instance message instance
|
|
1186
|
-
*/
|
|
1187
|
-
serializeBinary() {
|
|
1188
|
-
const writer = new BinaryWriter();
|
|
1189
|
-
TaskSummary.serializeBinaryToWriter(this, writer);
|
|
1190
|
-
return writer.getResultBuffer();
|
|
1191
|
-
}
|
|
1192
|
-
/**
|
|
1193
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1194
|
-
*/
|
|
1195
|
-
toObject() {
|
|
1196
|
-
return {
|
|
1197
|
-
id: this.id,
|
|
1198
|
-
sessionId: this.sessionId,
|
|
1199
|
-
ownerPodId: this.ownerPodId,
|
|
1200
|
-
initialTaskId: this.initialTaskId,
|
|
1201
|
-
countParentTaskIds: this.countParentTaskIds,
|
|
1202
|
-
countDataDependencies: this.countDataDependencies,
|
|
1203
|
-
countExpectedOutputIds: this.countExpectedOutputIds,
|
|
1204
|
-
countRetryOfIds: this.countRetryOfIds,
|
|
1205
|
-
status: this.status,
|
|
1206
|
-
statusMessage: this.statusMessage,
|
|
1207
|
-
options: this.options ? this.options.toObject() : undefined,
|
|
1208
|
-
createdAt: this.createdAt ? this.createdAt.toObject() : undefined,
|
|
1209
|
-
submittedAt: this.submittedAt ? this.submittedAt.toObject() : undefined,
|
|
1210
|
-
receivedAt: this.receivedAt ? this.receivedAt.toObject() : undefined,
|
|
1211
|
-
acquiredAt: this.acquiredAt ? this.acquiredAt.toObject() : undefined,
|
|
1212
|
-
fetchedAt: this.fetchedAt ? this.fetchedAt.toObject() : undefined,
|
|
1213
|
-
startedAt: this.startedAt ? this.startedAt.toObject() : undefined,
|
|
1214
|
-
processedAt: this.processedAt ? this.processedAt.toObject() : undefined,
|
|
1215
|
-
endedAt: this.endedAt ? this.endedAt.toObject() : undefined,
|
|
1216
|
-
podTtl: this.podTtl ? this.podTtl.toObject() : undefined,
|
|
1217
|
-
creationToEndDuration: this.creationToEndDuration
|
|
1218
|
-
? this.creationToEndDuration.toObject()
|
|
1219
|
-
: undefined,
|
|
1220
|
-
processingToEndDuration: this.processingToEndDuration
|
|
1221
|
-
? this.processingToEndDuration.toObject()
|
|
1222
|
-
: undefined,
|
|
1223
|
-
receivedToEndDuration: this.receivedToEndDuration
|
|
1224
|
-
? this.receivedToEndDuration.toObject()
|
|
1225
|
-
: undefined,
|
|
1226
|
-
payloadId: this.payloadId,
|
|
1227
|
-
createdBy: this.createdBy,
|
|
1228
|
-
error: this.error,
|
|
1229
|
-
podHostname: this.podHostname
|
|
1230
|
-
};
|
|
1231
|
-
}
|
|
1232
|
-
/**
|
|
1233
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1234
|
-
*/
|
|
1235
|
-
toJSON() {
|
|
1236
|
-
return this.toObject();
|
|
1237
|
-
}
|
|
1238
|
-
/**
|
|
1239
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1240
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1241
|
-
* 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
|
|
1242
|
-
*/
|
|
1243
|
-
toProtobufJSON(
|
|
1244
|
-
// @ts-ignore
|
|
1245
|
-
options) {
|
|
1246
|
-
return {
|
|
1247
|
-
id: this.id,
|
|
1248
|
-
sessionId: this.sessionId,
|
|
1249
|
-
ownerPodId: this.ownerPodId,
|
|
1250
|
-
initialTaskId: this.initialTaskId,
|
|
1251
|
-
countParentTaskIds: this.countParentTaskIds,
|
|
1252
|
-
countDataDependencies: this.countDataDependencies,
|
|
1253
|
-
countExpectedOutputIds: this.countExpectedOutputIds,
|
|
1254
|
-
countRetryOfIds: this.countRetryOfIds,
|
|
1255
|
-
status: armonikApiGrpcV1Task_status001.TaskStatus[this.status === null || this.status === undefined ? 0 : this.status],
|
|
1256
|
-
statusMessage: this.statusMessage,
|
|
1257
|
-
options: this.options ? this.options.toProtobufJSON(options) : null,
|
|
1258
|
-
createdAt: this.createdAt ? this.createdAt.toProtobufJSON(options) : null,
|
|
1259
|
-
submittedAt: this.submittedAt
|
|
1260
|
-
? this.submittedAt.toProtobufJSON(options)
|
|
1261
|
-
: null,
|
|
1262
|
-
receivedAt: this.receivedAt
|
|
1263
|
-
? this.receivedAt.toProtobufJSON(options)
|
|
1264
|
-
: null,
|
|
1265
|
-
acquiredAt: this.acquiredAt
|
|
1266
|
-
? this.acquiredAt.toProtobufJSON(options)
|
|
1267
|
-
: null,
|
|
1268
|
-
fetchedAt: this.fetchedAt ? this.fetchedAt.toProtobufJSON(options) : null,
|
|
1269
|
-
startedAt: this.startedAt ? this.startedAt.toProtobufJSON(options) : null,
|
|
1270
|
-
processedAt: this.processedAt
|
|
1271
|
-
? this.processedAt.toProtobufJSON(options)
|
|
1272
|
-
: null,
|
|
1273
|
-
endedAt: this.endedAt ? this.endedAt.toProtobufJSON(options) : null,
|
|
1274
|
-
podTtl: this.podTtl ? this.podTtl.toProtobufJSON(options) : null,
|
|
1275
|
-
creationToEndDuration: this.creationToEndDuration
|
|
1276
|
-
? this.creationToEndDuration.toProtobufJSON(options)
|
|
1277
|
-
: null,
|
|
1278
|
-
processingToEndDuration: this.processingToEndDuration
|
|
1279
|
-
? this.processingToEndDuration.toProtobufJSON(options)
|
|
1280
|
-
: null,
|
|
1281
|
-
receivedToEndDuration: this.receivedToEndDuration
|
|
1282
|
-
? this.receivedToEndDuration.toProtobufJSON(options)
|
|
1283
|
-
: null,
|
|
1284
|
-
payloadId: this.payloadId,
|
|
1285
|
-
createdBy: this.createdBy,
|
|
1286
|
-
error: this.error,
|
|
1287
|
-
podHostname: this.podHostname
|
|
1288
|
-
};
|
|
1289
|
-
}
|
|
1290
|
-
}
|
|
1291
|
-
/**
|
|
1292
|
-
* Message implementation for armonik.api.grpc.v1.tasks.ListTasksRequest
|
|
1293
|
-
*/
|
|
1294
|
-
export class ListTasksRequest {
|
|
1295
|
-
static { this.id = 'armonik.api.grpc.v1.tasks.ListTasksRequest'; }
|
|
1296
|
-
/**
|
|
1297
|
-
* Deserialize binary data to message
|
|
1298
|
-
* @param instance message instance
|
|
1299
|
-
*/
|
|
1300
|
-
static deserializeBinary(bytes) {
|
|
1301
|
-
const instance = new ListTasksRequest();
|
|
1302
|
-
ListTasksRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1303
|
-
return instance;
|
|
1304
|
-
}
|
|
1305
|
-
/**
|
|
1306
|
-
* Check all the properties and set default protobuf values if necessary
|
|
1307
|
-
* @param _instance message instance
|
|
1308
|
-
*/
|
|
1309
|
-
static refineValues(_instance) {
|
|
1310
|
-
_instance.page = _instance.page || 0;
|
|
1311
|
-
_instance.pageSize = _instance.pageSize || 0;
|
|
1312
|
-
_instance.filters = _instance.filters || undefined;
|
|
1313
|
-
_instance.sort = _instance.sort || undefined;
|
|
1314
|
-
_instance.withErrors = _instance.withErrors || false;
|
|
1315
|
-
}
|
|
1316
|
-
/**
|
|
1317
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1318
|
-
* @param _instance message instance
|
|
1319
|
-
* @param _reader binary reader instance
|
|
1320
|
-
*/
|
|
1321
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1322
|
-
while (_reader.nextField()) {
|
|
1323
|
-
if (_reader.isEndGroup())
|
|
1324
|
-
break;
|
|
1325
|
-
switch (_reader.getFieldNumber()) {
|
|
1326
|
-
case 1:
|
|
1327
|
-
_instance.page = _reader.readInt32();
|
|
1328
|
-
break;
|
|
1329
|
-
case 2:
|
|
1330
|
-
_instance.pageSize = _reader.readInt32();
|
|
1331
|
-
break;
|
|
1332
|
-
case 3:
|
|
1333
|
-
_instance.filters = new armonikApiGrpcV1Tasks007.Filters();
|
|
1334
|
-
_reader.readMessage(_instance.filters, armonikApiGrpcV1Tasks007.Filters.deserializeBinaryFromReader);
|
|
1335
|
-
break;
|
|
1336
|
-
case 4:
|
|
1337
|
-
_instance.sort = new ListTasksRequest.Sort();
|
|
1338
|
-
_reader.readMessage(_instance.sort, ListTasksRequest.Sort.deserializeBinaryFromReader);
|
|
1339
|
-
break;
|
|
1340
|
-
case 5:
|
|
1341
|
-
_instance.withErrors = _reader.readBool();
|
|
1342
|
-
break;
|
|
1343
|
-
default:
|
|
1344
|
-
_reader.skipField();
|
|
1345
|
-
}
|
|
1346
|
-
}
|
|
1347
|
-
ListTasksRequest.refineValues(_instance);
|
|
1348
|
-
}
|
|
1349
|
-
/**
|
|
1350
|
-
* Serializes a message to binary format using provided binary reader
|
|
1351
|
-
* @param _instance message instance
|
|
1352
|
-
* @param _writer binary writer instance
|
|
1353
|
-
*/
|
|
1354
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
1355
|
-
if (_instance.page) {
|
|
1356
|
-
_writer.writeInt32(1, _instance.page);
|
|
1357
|
-
}
|
|
1358
|
-
if (_instance.pageSize) {
|
|
1359
|
-
_writer.writeInt32(2, _instance.pageSize);
|
|
1360
|
-
}
|
|
1361
|
-
if (_instance.filters) {
|
|
1362
|
-
_writer.writeMessage(3, _instance.filters, armonikApiGrpcV1Tasks007.Filters.serializeBinaryToWriter);
|
|
1363
|
-
}
|
|
1364
|
-
if (_instance.sort) {
|
|
1365
|
-
_writer.writeMessage(4, _instance.sort, ListTasksRequest.Sort.serializeBinaryToWriter);
|
|
1366
|
-
}
|
|
1367
|
-
if (_instance.withErrors) {
|
|
1368
|
-
_writer.writeBool(5, _instance.withErrors);
|
|
1369
|
-
}
|
|
1370
|
-
}
|
|
1371
|
-
/**
|
|
1372
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1373
|
-
* @param _value initial values object or instance of ListTasksRequest to deeply clone from
|
|
1374
|
-
*/
|
|
1375
|
-
constructor(_value) {
|
|
1376
|
-
_value = _value || {};
|
|
1377
|
-
this.page = _value.page;
|
|
1378
|
-
this.pageSize = _value.pageSize;
|
|
1379
|
-
this.filters = _value.filters
|
|
1380
|
-
? new armonikApiGrpcV1Tasks007.Filters(_value.filters)
|
|
1381
|
-
: undefined;
|
|
1382
|
-
this.sort = _value.sort
|
|
1383
|
-
? new ListTasksRequest.Sort(_value.sort)
|
|
1384
|
-
: undefined;
|
|
1385
|
-
this.withErrors = _value.withErrors;
|
|
1386
|
-
ListTasksRequest.refineValues(this);
|
|
1387
|
-
}
|
|
1388
|
-
get page() {
|
|
1389
|
-
return this._page;
|
|
1390
|
-
}
|
|
1391
|
-
set page(value) {
|
|
1392
|
-
this._page = value;
|
|
1393
|
-
}
|
|
1394
|
-
get pageSize() {
|
|
1395
|
-
return this._pageSize;
|
|
1396
|
-
}
|
|
1397
|
-
set pageSize(value) {
|
|
1398
|
-
this._pageSize = value;
|
|
1399
|
-
}
|
|
1400
|
-
get filters() {
|
|
1401
|
-
return this._filters;
|
|
1402
|
-
}
|
|
1403
|
-
set filters(value) {
|
|
1404
|
-
this._filters = value;
|
|
1405
|
-
}
|
|
1406
|
-
get sort() {
|
|
1407
|
-
return this._sort;
|
|
1408
|
-
}
|
|
1409
|
-
set sort(value) {
|
|
1410
|
-
this._sort = value;
|
|
1411
|
-
}
|
|
1412
|
-
get withErrors() {
|
|
1413
|
-
return this._withErrors;
|
|
1414
|
-
}
|
|
1415
|
-
set withErrors(value) {
|
|
1416
|
-
this._withErrors = value;
|
|
1417
|
-
}
|
|
1418
|
-
/**
|
|
1419
|
-
* Serialize message to binary data
|
|
1420
|
-
* @param instance message instance
|
|
1421
|
-
*/
|
|
1422
|
-
serializeBinary() {
|
|
1423
|
-
const writer = new BinaryWriter();
|
|
1424
|
-
ListTasksRequest.serializeBinaryToWriter(this, writer);
|
|
1425
|
-
return writer.getResultBuffer();
|
|
1426
|
-
}
|
|
1427
|
-
/**
|
|
1428
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1429
|
-
*/
|
|
1430
|
-
toObject() {
|
|
1431
|
-
return {
|
|
1432
|
-
page: this.page,
|
|
1433
|
-
pageSize: this.pageSize,
|
|
1434
|
-
filters: this.filters ? this.filters.toObject() : undefined,
|
|
1435
|
-
sort: this.sort ? this.sort.toObject() : undefined,
|
|
1436
|
-
withErrors: this.withErrors
|
|
1437
|
-
};
|
|
1438
|
-
}
|
|
1439
|
-
/**
|
|
1440
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1441
|
-
*/
|
|
1442
|
-
toJSON() {
|
|
1443
|
-
return this.toObject();
|
|
1444
|
-
}
|
|
1445
|
-
/**
|
|
1446
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1447
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1448
|
-
* 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
|
|
1449
|
-
*/
|
|
1450
|
-
toProtobufJSON(
|
|
1451
|
-
// @ts-ignore
|
|
1452
|
-
options) {
|
|
1453
|
-
return {
|
|
1454
|
-
page: this.page,
|
|
1455
|
-
pageSize: this.pageSize,
|
|
1456
|
-
filters: this.filters ? this.filters.toProtobufJSON(options) : null,
|
|
1457
|
-
sort: this.sort ? this.sort.toProtobufJSON(options) : null,
|
|
1458
|
-
withErrors: this.withErrors
|
|
1459
|
-
};
|
|
1460
|
-
}
|
|
1461
|
-
}
|
|
1462
|
-
(function (ListTasksRequest) {
|
|
1463
|
-
/**
|
|
1464
|
-
* Message implementation for armonik.api.grpc.v1.tasks.ListTasksRequest.Sort
|
|
1465
|
-
*/
|
|
1466
|
-
class Sort {
|
|
1467
|
-
static { this.id = 'armonik.api.grpc.v1.tasks.ListTasksRequest.Sort'; }
|
|
1468
|
-
/**
|
|
1469
|
-
* Deserialize binary data to message
|
|
1470
|
-
* @param instance message instance
|
|
1471
|
-
*/
|
|
1472
|
-
static deserializeBinary(bytes) {
|
|
1473
|
-
const instance = new Sort();
|
|
1474
|
-
Sort.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1475
|
-
return instance;
|
|
1476
|
-
}
|
|
1477
|
-
/**
|
|
1478
|
-
* Check all the properties and set default protobuf values if necessary
|
|
1479
|
-
* @param _instance message instance
|
|
1480
|
-
*/
|
|
1481
|
-
static refineValues(_instance) {
|
|
1482
|
-
_instance.field = _instance.field || undefined;
|
|
1483
|
-
_instance.direction = _instance.direction || 0;
|
|
1484
|
-
}
|
|
1485
|
-
/**
|
|
1486
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1487
|
-
* @param _instance message instance
|
|
1488
|
-
* @param _reader binary reader instance
|
|
1489
|
-
*/
|
|
1490
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1491
|
-
while (_reader.nextField()) {
|
|
1492
|
-
if (_reader.isEndGroup())
|
|
1493
|
-
break;
|
|
1494
|
-
switch (_reader.getFieldNumber()) {
|
|
1495
|
-
case 1:
|
|
1496
|
-
_instance.field = new armonikApiGrpcV1Tasks003.TaskField();
|
|
1497
|
-
_reader.readMessage(_instance.field, armonikApiGrpcV1Tasks003.TaskField.deserializeBinaryFromReader);
|
|
1498
|
-
break;
|
|
1499
|
-
case 2:
|
|
1500
|
-
_instance.direction = _reader.readEnum();
|
|
1501
|
-
break;
|
|
1502
|
-
default:
|
|
1503
|
-
_reader.skipField();
|
|
1504
|
-
}
|
|
1505
|
-
}
|
|
1506
|
-
Sort.refineValues(_instance);
|
|
1507
|
-
}
|
|
1508
|
-
/**
|
|
1509
|
-
* Serializes a message to binary format using provided binary reader
|
|
1510
|
-
* @param _instance message instance
|
|
1511
|
-
* @param _writer binary writer instance
|
|
1512
|
-
*/
|
|
1513
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
1514
|
-
if (_instance.field) {
|
|
1515
|
-
_writer.writeMessage(1, _instance.field, armonikApiGrpcV1Tasks003.TaskField.serializeBinaryToWriter);
|
|
1516
|
-
}
|
|
1517
|
-
if (_instance.direction) {
|
|
1518
|
-
_writer.writeEnum(2, _instance.direction);
|
|
1519
|
-
}
|
|
1520
|
-
}
|
|
1521
|
-
/**
|
|
1522
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1523
|
-
* @param _value initial values object or instance of Sort to deeply clone from
|
|
1524
|
-
*/
|
|
1525
|
-
constructor(_value) {
|
|
1526
|
-
_value = _value || {};
|
|
1527
|
-
this.field = _value.field
|
|
1528
|
-
? new armonikApiGrpcV1Tasks003.TaskField(_value.field)
|
|
1529
|
-
: undefined;
|
|
1530
|
-
this.direction = _value.direction;
|
|
1531
|
-
Sort.refineValues(this);
|
|
1532
|
-
}
|
|
1533
|
-
get field() {
|
|
1534
|
-
return this._field;
|
|
1535
|
-
}
|
|
1536
|
-
set field(value) {
|
|
1537
|
-
this._field = value;
|
|
1538
|
-
}
|
|
1539
|
-
get direction() {
|
|
1540
|
-
return this._direction;
|
|
1541
|
-
}
|
|
1542
|
-
set direction(value) {
|
|
1543
|
-
this._direction = value;
|
|
1544
|
-
}
|
|
1545
|
-
/**
|
|
1546
|
-
* Serialize message to binary data
|
|
1547
|
-
* @param instance message instance
|
|
1548
|
-
*/
|
|
1549
|
-
serializeBinary() {
|
|
1550
|
-
const writer = new BinaryWriter();
|
|
1551
|
-
Sort.serializeBinaryToWriter(this, writer);
|
|
1552
|
-
return writer.getResultBuffer();
|
|
1553
|
-
}
|
|
1554
|
-
/**
|
|
1555
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1556
|
-
*/
|
|
1557
|
-
toObject() {
|
|
1558
|
-
return {
|
|
1559
|
-
field: this.field ? this.field.toObject() : undefined,
|
|
1560
|
-
direction: this.direction
|
|
1561
|
-
};
|
|
1562
|
-
}
|
|
1563
|
-
/**
|
|
1564
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1565
|
-
*/
|
|
1566
|
-
toJSON() {
|
|
1567
|
-
return this.toObject();
|
|
1568
|
-
}
|
|
1569
|
-
/**
|
|
1570
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1571
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1572
|
-
* 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
|
|
1573
|
-
*/
|
|
1574
|
-
toProtobufJSON(
|
|
1575
|
-
// @ts-ignore
|
|
1576
|
-
options) {
|
|
1577
|
-
return {
|
|
1578
|
-
field: this.field ? this.field.toProtobufJSON(options) : null,
|
|
1579
|
-
direction: armonikApiGrpcV1Sort_direction006.SortDirection[this.direction === null || this.direction === undefined
|
|
1580
|
-
? 0
|
|
1581
|
-
: this.direction]
|
|
1582
|
-
};
|
|
1583
|
-
}
|
|
1584
|
-
}
|
|
1585
|
-
ListTasksRequest.Sort = Sort;
|
|
1586
|
-
})(ListTasksRequest || (ListTasksRequest = {}));
|
|
1587
|
-
/**
|
|
1588
|
-
* Message implementation for armonik.api.grpc.v1.tasks.ListTasksResponse
|
|
1589
|
-
*/
|
|
1590
|
-
export class ListTasksResponse {
|
|
1591
|
-
static { this.id = 'armonik.api.grpc.v1.tasks.ListTasksResponse'; }
|
|
1592
|
-
/**
|
|
1593
|
-
* Deserialize binary data to message
|
|
1594
|
-
* @param instance message instance
|
|
1595
|
-
*/
|
|
1596
|
-
static deserializeBinary(bytes) {
|
|
1597
|
-
const instance = new ListTasksResponse();
|
|
1598
|
-
ListTasksResponse.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1599
|
-
return instance;
|
|
1600
|
-
}
|
|
1601
|
-
/**
|
|
1602
|
-
* Check all the properties and set default protobuf values if necessary
|
|
1603
|
-
* @param _instance message instance
|
|
1604
|
-
*/
|
|
1605
|
-
static refineValues(_instance) {
|
|
1606
|
-
_instance.tasks = _instance.tasks || [];
|
|
1607
|
-
_instance.page = _instance.page || 0;
|
|
1608
|
-
_instance.pageSize = _instance.pageSize || 0;
|
|
1609
|
-
_instance.total = _instance.total || 0;
|
|
1610
|
-
}
|
|
1611
|
-
/**
|
|
1612
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1613
|
-
* @param _instance message instance
|
|
1614
|
-
* @param _reader binary reader instance
|
|
1615
|
-
*/
|
|
1616
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1617
|
-
while (_reader.nextField()) {
|
|
1618
|
-
if (_reader.isEndGroup())
|
|
1619
|
-
break;
|
|
1620
|
-
switch (_reader.getFieldNumber()) {
|
|
1621
|
-
case 1:
|
|
1622
|
-
const messageInitializer1 = new TaskSummary();
|
|
1623
|
-
_reader.readMessage(messageInitializer1, TaskSummary.deserializeBinaryFromReader);
|
|
1624
|
-
(_instance.tasks = _instance.tasks || []).push(messageInitializer1);
|
|
1625
|
-
break;
|
|
1626
|
-
case 2:
|
|
1627
|
-
_instance.page = _reader.readInt32();
|
|
1628
|
-
break;
|
|
1629
|
-
case 3:
|
|
1630
|
-
_instance.pageSize = _reader.readInt32();
|
|
1631
|
-
break;
|
|
1632
|
-
case 4:
|
|
1633
|
-
_instance.total = _reader.readInt32();
|
|
1634
|
-
break;
|
|
1635
|
-
default:
|
|
1636
|
-
_reader.skipField();
|
|
1637
|
-
}
|
|
1638
|
-
}
|
|
1639
|
-
ListTasksResponse.refineValues(_instance);
|
|
1640
|
-
}
|
|
1641
|
-
/**
|
|
1642
|
-
* Serializes a message to binary format using provided binary reader
|
|
1643
|
-
* @param _instance message instance
|
|
1644
|
-
* @param _writer binary writer instance
|
|
1645
|
-
*/
|
|
1646
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
1647
|
-
if (_instance.tasks && _instance.tasks.length) {
|
|
1648
|
-
_writer.writeRepeatedMessage(1, _instance.tasks, TaskSummary.serializeBinaryToWriter);
|
|
1649
|
-
}
|
|
1650
|
-
if (_instance.page) {
|
|
1651
|
-
_writer.writeInt32(2, _instance.page);
|
|
1652
|
-
}
|
|
1653
|
-
if (_instance.pageSize) {
|
|
1654
|
-
_writer.writeInt32(3, _instance.pageSize);
|
|
1655
|
-
}
|
|
1656
|
-
if (_instance.total) {
|
|
1657
|
-
_writer.writeInt32(4, _instance.total);
|
|
1658
|
-
}
|
|
1659
|
-
}
|
|
1660
|
-
/**
|
|
1661
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1662
|
-
* @param _value initial values object or instance of ListTasksResponse to deeply clone from
|
|
1663
|
-
*/
|
|
1664
|
-
constructor(_value) {
|
|
1665
|
-
_value = _value || {};
|
|
1666
|
-
this.tasks = (_value.tasks || []).map(m => new TaskSummary(m));
|
|
1667
|
-
this.page = _value.page;
|
|
1668
|
-
this.pageSize = _value.pageSize;
|
|
1669
|
-
this.total = _value.total;
|
|
1670
|
-
ListTasksResponse.refineValues(this);
|
|
1671
|
-
}
|
|
1672
|
-
get tasks() {
|
|
1673
|
-
return this._tasks;
|
|
1674
|
-
}
|
|
1675
|
-
set tasks(value) {
|
|
1676
|
-
this._tasks = value;
|
|
1677
|
-
}
|
|
1678
|
-
get page() {
|
|
1679
|
-
return this._page;
|
|
1680
|
-
}
|
|
1681
|
-
set page(value) {
|
|
1682
|
-
this._page = value;
|
|
1683
|
-
}
|
|
1684
|
-
get pageSize() {
|
|
1685
|
-
return this._pageSize;
|
|
1686
|
-
}
|
|
1687
|
-
set pageSize(value) {
|
|
1688
|
-
this._pageSize = value;
|
|
1689
|
-
}
|
|
1690
|
-
get total() {
|
|
1691
|
-
return this._total;
|
|
1692
|
-
}
|
|
1693
|
-
set total(value) {
|
|
1694
|
-
this._total = value;
|
|
1695
|
-
}
|
|
1696
|
-
/**
|
|
1697
|
-
* Serialize message to binary data
|
|
1698
|
-
* @param instance message instance
|
|
1699
|
-
*/
|
|
1700
|
-
serializeBinary() {
|
|
1701
|
-
const writer = new BinaryWriter();
|
|
1702
|
-
ListTasksResponse.serializeBinaryToWriter(this, writer);
|
|
1703
|
-
return writer.getResultBuffer();
|
|
1704
|
-
}
|
|
1705
|
-
/**
|
|
1706
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1707
|
-
*/
|
|
1708
|
-
toObject() {
|
|
1709
|
-
return {
|
|
1710
|
-
tasks: (this.tasks || []).map(m => m.toObject()),
|
|
1711
|
-
page: this.page,
|
|
1712
|
-
pageSize: this.pageSize,
|
|
1713
|
-
total: this.total
|
|
1714
|
-
};
|
|
1715
|
-
}
|
|
1716
|
-
/**
|
|
1717
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1718
|
-
*/
|
|
1719
|
-
toJSON() {
|
|
1720
|
-
return this.toObject();
|
|
1721
|
-
}
|
|
1722
|
-
/**
|
|
1723
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1724
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1725
|
-
* 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
|
|
1726
|
-
*/
|
|
1727
|
-
toProtobufJSON(
|
|
1728
|
-
// @ts-ignore
|
|
1729
|
-
options) {
|
|
1730
|
-
return {
|
|
1731
|
-
tasks: (this.tasks || []).map(m => m.toProtobufJSON(options)),
|
|
1732
|
-
page: this.page,
|
|
1733
|
-
pageSize: this.pageSize,
|
|
1734
|
-
total: this.total
|
|
1735
|
-
};
|
|
1736
|
-
}
|
|
1737
|
-
}
|
|
1738
|
-
/**
|
|
1739
|
-
* Message implementation for armonik.api.grpc.v1.tasks.ListTasksDetailedResponse
|
|
1740
|
-
*/
|
|
1741
|
-
export class ListTasksDetailedResponse {
|
|
1742
|
-
static { this.id = 'armonik.api.grpc.v1.tasks.ListTasksDetailedResponse'; }
|
|
1743
|
-
/**
|
|
1744
|
-
* Deserialize binary data to message
|
|
1745
|
-
* @param instance message instance
|
|
1746
|
-
*/
|
|
1747
|
-
static deserializeBinary(bytes) {
|
|
1748
|
-
const instance = new ListTasksDetailedResponse();
|
|
1749
|
-
ListTasksDetailedResponse.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1750
|
-
return instance;
|
|
1751
|
-
}
|
|
1752
|
-
/**
|
|
1753
|
-
* Check all the properties and set default protobuf values if necessary
|
|
1754
|
-
* @param _instance message instance
|
|
1755
|
-
*/
|
|
1756
|
-
static refineValues(_instance) {
|
|
1757
|
-
_instance.tasks = _instance.tasks || [];
|
|
1758
|
-
_instance.page = _instance.page || 0;
|
|
1759
|
-
_instance.pageSize = _instance.pageSize || 0;
|
|
1760
|
-
_instance.total = _instance.total || 0;
|
|
1761
|
-
}
|
|
1762
|
-
/**
|
|
1763
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1764
|
-
* @param _instance message instance
|
|
1765
|
-
* @param _reader binary reader instance
|
|
1766
|
-
*/
|
|
1767
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1768
|
-
while (_reader.nextField()) {
|
|
1769
|
-
if (_reader.isEndGroup())
|
|
1770
|
-
break;
|
|
1771
|
-
switch (_reader.getFieldNumber()) {
|
|
1772
|
-
case 1:
|
|
1773
|
-
const messageInitializer1 = new TaskDetailed();
|
|
1774
|
-
_reader.readMessage(messageInitializer1, TaskDetailed.deserializeBinaryFromReader);
|
|
1775
|
-
(_instance.tasks = _instance.tasks || []).push(messageInitializer1);
|
|
1776
|
-
break;
|
|
1777
|
-
case 2:
|
|
1778
|
-
_instance.page = _reader.readInt32();
|
|
1779
|
-
break;
|
|
1780
|
-
case 3:
|
|
1781
|
-
_instance.pageSize = _reader.readInt32();
|
|
1782
|
-
break;
|
|
1783
|
-
case 4:
|
|
1784
|
-
_instance.total = _reader.readInt32();
|
|
1785
|
-
break;
|
|
1786
|
-
default:
|
|
1787
|
-
_reader.skipField();
|
|
1788
|
-
}
|
|
1789
|
-
}
|
|
1790
|
-
ListTasksDetailedResponse.refineValues(_instance);
|
|
1791
|
-
}
|
|
1792
|
-
/**
|
|
1793
|
-
* Serializes a message to binary format using provided binary reader
|
|
1794
|
-
* @param _instance message instance
|
|
1795
|
-
* @param _writer binary writer instance
|
|
1796
|
-
*/
|
|
1797
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
1798
|
-
if (_instance.tasks && _instance.tasks.length) {
|
|
1799
|
-
_writer.writeRepeatedMessage(1, _instance.tasks, TaskDetailed.serializeBinaryToWriter);
|
|
1800
|
-
}
|
|
1801
|
-
if (_instance.page) {
|
|
1802
|
-
_writer.writeInt32(2, _instance.page);
|
|
1803
|
-
}
|
|
1804
|
-
if (_instance.pageSize) {
|
|
1805
|
-
_writer.writeInt32(3, _instance.pageSize);
|
|
1806
|
-
}
|
|
1807
|
-
if (_instance.total) {
|
|
1808
|
-
_writer.writeInt32(4, _instance.total);
|
|
1809
|
-
}
|
|
1810
|
-
}
|
|
1811
|
-
/**
|
|
1812
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1813
|
-
* @param _value initial values object or instance of ListTasksDetailedResponse to deeply clone from
|
|
1814
|
-
*/
|
|
1815
|
-
constructor(_value) {
|
|
1816
|
-
_value = _value || {};
|
|
1817
|
-
this.tasks = (_value.tasks || []).map(m => new TaskDetailed(m));
|
|
1818
|
-
this.page = _value.page;
|
|
1819
|
-
this.pageSize = _value.pageSize;
|
|
1820
|
-
this.total = _value.total;
|
|
1821
|
-
ListTasksDetailedResponse.refineValues(this);
|
|
1822
|
-
}
|
|
1823
|
-
get tasks() {
|
|
1824
|
-
return this._tasks;
|
|
1825
|
-
}
|
|
1826
|
-
set tasks(value) {
|
|
1827
|
-
this._tasks = value;
|
|
1828
|
-
}
|
|
1829
|
-
get page() {
|
|
1830
|
-
return this._page;
|
|
1831
|
-
}
|
|
1832
|
-
set page(value) {
|
|
1833
|
-
this._page = value;
|
|
1834
|
-
}
|
|
1835
|
-
get pageSize() {
|
|
1836
|
-
return this._pageSize;
|
|
1837
|
-
}
|
|
1838
|
-
set pageSize(value) {
|
|
1839
|
-
this._pageSize = value;
|
|
1840
|
-
}
|
|
1841
|
-
get total() {
|
|
1842
|
-
return this._total;
|
|
1843
|
-
}
|
|
1844
|
-
set total(value) {
|
|
1845
|
-
this._total = value;
|
|
1846
|
-
}
|
|
1847
|
-
/**
|
|
1848
|
-
* Serialize message to binary data
|
|
1849
|
-
* @param instance message instance
|
|
1850
|
-
*/
|
|
1851
|
-
serializeBinary() {
|
|
1852
|
-
const writer = new BinaryWriter();
|
|
1853
|
-
ListTasksDetailedResponse.serializeBinaryToWriter(this, writer);
|
|
1854
|
-
return writer.getResultBuffer();
|
|
1855
|
-
}
|
|
1856
|
-
/**
|
|
1857
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1858
|
-
*/
|
|
1859
|
-
toObject() {
|
|
1860
|
-
return {
|
|
1861
|
-
tasks: (this.tasks || []).map(m => m.toObject()),
|
|
1862
|
-
page: this.page,
|
|
1863
|
-
pageSize: this.pageSize,
|
|
1864
|
-
total: this.total
|
|
1865
|
-
};
|
|
1866
|
-
}
|
|
1867
|
-
/**
|
|
1868
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1869
|
-
*/
|
|
1870
|
-
toJSON() {
|
|
1871
|
-
return this.toObject();
|
|
1872
|
-
}
|
|
1873
|
-
/**
|
|
1874
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1875
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1876
|
-
* 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
|
|
1877
|
-
*/
|
|
1878
|
-
toProtobufJSON(
|
|
1879
|
-
// @ts-ignore
|
|
1880
|
-
options) {
|
|
1881
|
-
return {
|
|
1882
|
-
tasks: (this.tasks || []).map(m => m.toProtobufJSON(options)),
|
|
1883
|
-
page: this.page,
|
|
1884
|
-
pageSize: this.pageSize,
|
|
1885
|
-
total: this.total
|
|
1886
|
-
};
|
|
1887
|
-
}
|
|
1888
|
-
}
|
|
1889
|
-
/**
|
|
1890
|
-
* Message implementation for armonik.api.grpc.v1.tasks.GetTaskRequest
|
|
1891
|
-
*/
|
|
1892
|
-
export class GetTaskRequest {
|
|
1893
|
-
static { this.id = 'armonik.api.grpc.v1.tasks.GetTaskRequest'; }
|
|
1894
|
-
/**
|
|
1895
|
-
* Deserialize binary data to message
|
|
1896
|
-
* @param instance message instance
|
|
1897
|
-
*/
|
|
1898
|
-
static deserializeBinary(bytes) {
|
|
1899
|
-
const instance = new GetTaskRequest();
|
|
1900
|
-
GetTaskRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1901
|
-
return instance;
|
|
1902
|
-
}
|
|
1903
|
-
/**
|
|
1904
|
-
* Check all the properties and set default protobuf values if necessary
|
|
1905
|
-
* @param _instance message instance
|
|
1906
|
-
*/
|
|
1907
|
-
static refineValues(_instance) {
|
|
1908
|
-
_instance.taskId = _instance.taskId || '';
|
|
1909
|
-
}
|
|
1910
|
-
/**
|
|
1911
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1912
|
-
* @param _instance message instance
|
|
1913
|
-
* @param _reader binary reader instance
|
|
1914
|
-
*/
|
|
1915
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1916
|
-
while (_reader.nextField()) {
|
|
1917
|
-
if (_reader.isEndGroup())
|
|
1918
|
-
break;
|
|
1919
|
-
switch (_reader.getFieldNumber()) {
|
|
1920
|
-
case 1:
|
|
1921
|
-
_instance.taskId = _reader.readString();
|
|
1922
|
-
break;
|
|
1923
|
-
default:
|
|
1924
|
-
_reader.skipField();
|
|
1925
|
-
}
|
|
1926
|
-
}
|
|
1927
|
-
GetTaskRequest.refineValues(_instance);
|
|
1928
|
-
}
|
|
1929
|
-
/**
|
|
1930
|
-
* Serializes a message to binary format using provided binary reader
|
|
1931
|
-
* @param _instance message instance
|
|
1932
|
-
* @param _writer binary writer instance
|
|
1933
|
-
*/
|
|
1934
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
1935
|
-
if (_instance.taskId) {
|
|
1936
|
-
_writer.writeString(1, _instance.taskId);
|
|
1937
|
-
}
|
|
1938
|
-
}
|
|
1939
|
-
/**
|
|
1940
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1941
|
-
* @param _value initial values object or instance of GetTaskRequest to deeply clone from
|
|
1942
|
-
*/
|
|
1943
|
-
constructor(_value) {
|
|
1944
|
-
_value = _value || {};
|
|
1945
|
-
this.taskId = _value.taskId;
|
|
1946
|
-
GetTaskRequest.refineValues(this);
|
|
1947
|
-
}
|
|
1948
|
-
get taskId() {
|
|
1949
|
-
return this._taskId;
|
|
1950
|
-
}
|
|
1951
|
-
set taskId(value) {
|
|
1952
|
-
this._taskId = value;
|
|
1953
|
-
}
|
|
1954
|
-
/**
|
|
1955
|
-
* Serialize message to binary data
|
|
1956
|
-
* @param instance message instance
|
|
1957
|
-
*/
|
|
1958
|
-
serializeBinary() {
|
|
1959
|
-
const writer = new BinaryWriter();
|
|
1960
|
-
GetTaskRequest.serializeBinaryToWriter(this, writer);
|
|
1961
|
-
return writer.getResultBuffer();
|
|
1962
|
-
}
|
|
1963
|
-
/**
|
|
1964
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1965
|
-
*/
|
|
1966
|
-
toObject() {
|
|
1967
|
-
return {
|
|
1968
|
-
taskId: this.taskId
|
|
1969
|
-
};
|
|
1970
|
-
}
|
|
1971
|
-
/**
|
|
1972
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1973
|
-
*/
|
|
1974
|
-
toJSON() {
|
|
1975
|
-
return this.toObject();
|
|
1976
|
-
}
|
|
1977
|
-
/**
|
|
1978
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1979
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1980
|
-
* 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
|
|
1981
|
-
*/
|
|
1982
|
-
toProtobufJSON(
|
|
1983
|
-
// @ts-ignore
|
|
1984
|
-
options) {
|
|
1985
|
-
return {
|
|
1986
|
-
taskId: this.taskId
|
|
1987
|
-
};
|
|
1988
|
-
}
|
|
1989
|
-
}
|
|
1990
|
-
/**
|
|
1991
|
-
* Message implementation for armonik.api.grpc.v1.tasks.GetTaskResponse
|
|
1992
|
-
*/
|
|
1993
|
-
export class GetTaskResponse {
|
|
1994
|
-
static { this.id = 'armonik.api.grpc.v1.tasks.GetTaskResponse'; }
|
|
1995
|
-
/**
|
|
1996
|
-
* Deserialize binary data to message
|
|
1997
|
-
* @param instance message instance
|
|
1998
|
-
*/
|
|
1999
|
-
static deserializeBinary(bytes) {
|
|
2000
|
-
const instance = new GetTaskResponse();
|
|
2001
|
-
GetTaskResponse.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2002
|
-
return instance;
|
|
2003
|
-
}
|
|
2004
|
-
/**
|
|
2005
|
-
* Check all the properties and set default protobuf values if necessary
|
|
2006
|
-
* @param _instance message instance
|
|
2007
|
-
*/
|
|
2008
|
-
static refineValues(_instance) {
|
|
2009
|
-
_instance.task = _instance.task || undefined;
|
|
2010
|
-
}
|
|
2011
|
-
/**
|
|
2012
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2013
|
-
* @param _instance message instance
|
|
2014
|
-
* @param _reader binary reader instance
|
|
2015
|
-
*/
|
|
2016
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2017
|
-
while (_reader.nextField()) {
|
|
2018
|
-
if (_reader.isEndGroup())
|
|
2019
|
-
break;
|
|
2020
|
-
switch (_reader.getFieldNumber()) {
|
|
2021
|
-
case 1:
|
|
2022
|
-
_instance.task = new TaskDetailed();
|
|
2023
|
-
_reader.readMessage(_instance.task, TaskDetailed.deserializeBinaryFromReader);
|
|
2024
|
-
break;
|
|
2025
|
-
default:
|
|
2026
|
-
_reader.skipField();
|
|
2027
|
-
}
|
|
2028
|
-
}
|
|
2029
|
-
GetTaskResponse.refineValues(_instance);
|
|
2030
|
-
}
|
|
2031
|
-
/**
|
|
2032
|
-
* Serializes a message to binary format using provided binary reader
|
|
2033
|
-
* @param _instance message instance
|
|
2034
|
-
* @param _writer binary writer instance
|
|
2035
|
-
*/
|
|
2036
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
2037
|
-
if (_instance.task) {
|
|
2038
|
-
_writer.writeMessage(1, _instance.task, TaskDetailed.serializeBinaryToWriter);
|
|
2039
|
-
}
|
|
2040
|
-
}
|
|
2041
|
-
/**
|
|
2042
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2043
|
-
* @param _value initial values object or instance of GetTaskResponse to deeply clone from
|
|
2044
|
-
*/
|
|
2045
|
-
constructor(_value) {
|
|
2046
|
-
_value = _value || {};
|
|
2047
|
-
this.task = _value.task ? new TaskDetailed(_value.task) : undefined;
|
|
2048
|
-
GetTaskResponse.refineValues(this);
|
|
2049
|
-
}
|
|
2050
|
-
get task() {
|
|
2051
|
-
return this._task;
|
|
2052
|
-
}
|
|
2053
|
-
set task(value) {
|
|
2054
|
-
this._task = value;
|
|
2055
|
-
}
|
|
2056
|
-
/**
|
|
2057
|
-
* Serialize message to binary data
|
|
2058
|
-
* @param instance message instance
|
|
2059
|
-
*/
|
|
2060
|
-
serializeBinary() {
|
|
2061
|
-
const writer = new BinaryWriter();
|
|
2062
|
-
GetTaskResponse.serializeBinaryToWriter(this, writer);
|
|
2063
|
-
return writer.getResultBuffer();
|
|
2064
|
-
}
|
|
2065
|
-
/**
|
|
2066
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2067
|
-
*/
|
|
2068
|
-
toObject() {
|
|
2069
|
-
return {
|
|
2070
|
-
task: this.task ? this.task.toObject() : undefined
|
|
2071
|
-
};
|
|
2072
|
-
}
|
|
2073
|
-
/**
|
|
2074
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2075
|
-
*/
|
|
2076
|
-
toJSON() {
|
|
2077
|
-
return this.toObject();
|
|
2078
|
-
}
|
|
2079
|
-
/**
|
|
2080
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2081
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2082
|
-
* 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
|
|
2083
|
-
*/
|
|
2084
|
-
toProtobufJSON(
|
|
2085
|
-
// @ts-ignore
|
|
2086
|
-
options) {
|
|
2087
|
-
return {
|
|
2088
|
-
task: this.task ? this.task.toProtobufJSON(options) : null
|
|
2089
|
-
};
|
|
2090
|
-
}
|
|
2091
|
-
}
|
|
2092
|
-
/**
|
|
2093
|
-
* Message implementation for armonik.api.grpc.v1.tasks.CancelTasksRequest
|
|
2094
|
-
*/
|
|
2095
|
-
export class CancelTasksRequest {
|
|
2096
|
-
static { this.id = 'armonik.api.grpc.v1.tasks.CancelTasksRequest'; }
|
|
2097
|
-
/**
|
|
2098
|
-
* Deserialize binary data to message
|
|
2099
|
-
* @param instance message instance
|
|
2100
|
-
*/
|
|
2101
|
-
static deserializeBinary(bytes) {
|
|
2102
|
-
const instance = new CancelTasksRequest();
|
|
2103
|
-
CancelTasksRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2104
|
-
return instance;
|
|
2105
|
-
}
|
|
2106
|
-
/**
|
|
2107
|
-
* Check all the properties and set default protobuf values if necessary
|
|
2108
|
-
* @param _instance message instance
|
|
2109
|
-
*/
|
|
2110
|
-
static refineValues(_instance) {
|
|
2111
|
-
_instance.taskIds = _instance.taskIds || [];
|
|
2112
|
-
}
|
|
2113
|
-
/**
|
|
2114
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2115
|
-
* @param _instance message instance
|
|
2116
|
-
* @param _reader binary reader instance
|
|
2117
|
-
*/
|
|
2118
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2119
|
-
while (_reader.nextField()) {
|
|
2120
|
-
if (_reader.isEndGroup())
|
|
2121
|
-
break;
|
|
2122
|
-
switch (_reader.getFieldNumber()) {
|
|
2123
|
-
case 1:
|
|
2124
|
-
(_instance.taskIds = _instance.taskIds || []).push(_reader.readString());
|
|
2125
|
-
break;
|
|
2126
|
-
default:
|
|
2127
|
-
_reader.skipField();
|
|
2128
|
-
}
|
|
2129
|
-
}
|
|
2130
|
-
CancelTasksRequest.refineValues(_instance);
|
|
2131
|
-
}
|
|
2132
|
-
/**
|
|
2133
|
-
* Serializes a message to binary format using provided binary reader
|
|
2134
|
-
* @param _instance message instance
|
|
2135
|
-
* @param _writer binary writer instance
|
|
2136
|
-
*/
|
|
2137
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
2138
|
-
if (_instance.taskIds && _instance.taskIds.length) {
|
|
2139
|
-
_writer.writeRepeatedString(1, _instance.taskIds);
|
|
2140
|
-
}
|
|
2141
|
-
}
|
|
2142
|
-
/**
|
|
2143
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2144
|
-
* @param _value initial values object or instance of CancelTasksRequest to deeply clone from
|
|
2145
|
-
*/
|
|
2146
|
-
constructor(_value) {
|
|
2147
|
-
_value = _value || {};
|
|
2148
|
-
this.taskIds = (_value.taskIds || []).slice();
|
|
2149
|
-
CancelTasksRequest.refineValues(this);
|
|
2150
|
-
}
|
|
2151
|
-
get taskIds() {
|
|
2152
|
-
return this._taskIds;
|
|
2153
|
-
}
|
|
2154
|
-
set taskIds(value) {
|
|
2155
|
-
this._taskIds = value;
|
|
2156
|
-
}
|
|
2157
|
-
/**
|
|
2158
|
-
* Serialize message to binary data
|
|
2159
|
-
* @param instance message instance
|
|
2160
|
-
*/
|
|
2161
|
-
serializeBinary() {
|
|
2162
|
-
const writer = new BinaryWriter();
|
|
2163
|
-
CancelTasksRequest.serializeBinaryToWriter(this, writer);
|
|
2164
|
-
return writer.getResultBuffer();
|
|
2165
|
-
}
|
|
2166
|
-
/**
|
|
2167
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2168
|
-
*/
|
|
2169
|
-
toObject() {
|
|
2170
|
-
return {
|
|
2171
|
-
taskIds: (this.taskIds || []).slice()
|
|
2172
|
-
};
|
|
2173
|
-
}
|
|
2174
|
-
/**
|
|
2175
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2176
|
-
*/
|
|
2177
|
-
toJSON() {
|
|
2178
|
-
return this.toObject();
|
|
2179
|
-
}
|
|
2180
|
-
/**
|
|
2181
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2182
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2183
|
-
* 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
|
|
2184
|
-
*/
|
|
2185
|
-
toProtobufJSON(
|
|
2186
|
-
// @ts-ignore
|
|
2187
|
-
options) {
|
|
2188
|
-
return {
|
|
2189
|
-
taskIds: (this.taskIds || []).slice()
|
|
2190
|
-
};
|
|
2191
|
-
}
|
|
2192
|
-
}
|
|
2193
|
-
/**
|
|
2194
|
-
* Message implementation for armonik.api.grpc.v1.tasks.CancelTasksResponse
|
|
2195
|
-
*/
|
|
2196
|
-
export class CancelTasksResponse {
|
|
2197
|
-
static { this.id = 'armonik.api.grpc.v1.tasks.CancelTasksResponse'; }
|
|
2198
|
-
/**
|
|
2199
|
-
* Deserialize binary data to message
|
|
2200
|
-
* @param instance message instance
|
|
2201
|
-
*/
|
|
2202
|
-
static deserializeBinary(bytes) {
|
|
2203
|
-
const instance = new CancelTasksResponse();
|
|
2204
|
-
CancelTasksResponse.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2205
|
-
return instance;
|
|
2206
|
-
}
|
|
2207
|
-
/**
|
|
2208
|
-
* Check all the properties and set default protobuf values if necessary
|
|
2209
|
-
* @param _instance message instance
|
|
2210
|
-
*/
|
|
2211
|
-
static refineValues(_instance) {
|
|
2212
|
-
_instance.tasks = _instance.tasks || [];
|
|
2213
|
-
}
|
|
2214
|
-
/**
|
|
2215
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2216
|
-
* @param _instance message instance
|
|
2217
|
-
* @param _reader binary reader instance
|
|
2218
|
-
*/
|
|
2219
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2220
|
-
while (_reader.nextField()) {
|
|
2221
|
-
if (_reader.isEndGroup())
|
|
2222
|
-
break;
|
|
2223
|
-
switch (_reader.getFieldNumber()) {
|
|
2224
|
-
case 1:
|
|
2225
|
-
const messageInitializer1 = new TaskSummary();
|
|
2226
|
-
_reader.readMessage(messageInitializer1, TaskSummary.deserializeBinaryFromReader);
|
|
2227
|
-
(_instance.tasks = _instance.tasks || []).push(messageInitializer1);
|
|
2228
|
-
break;
|
|
2229
|
-
default:
|
|
2230
|
-
_reader.skipField();
|
|
2231
|
-
}
|
|
2232
|
-
}
|
|
2233
|
-
CancelTasksResponse.refineValues(_instance);
|
|
2234
|
-
}
|
|
2235
|
-
/**
|
|
2236
|
-
* Serializes a message to binary format using provided binary reader
|
|
2237
|
-
* @param _instance message instance
|
|
2238
|
-
* @param _writer binary writer instance
|
|
2239
|
-
*/
|
|
2240
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
2241
|
-
if (_instance.tasks && _instance.tasks.length) {
|
|
2242
|
-
_writer.writeRepeatedMessage(1, _instance.tasks, TaskSummary.serializeBinaryToWriter);
|
|
2243
|
-
}
|
|
2244
|
-
}
|
|
2245
|
-
/**
|
|
2246
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2247
|
-
* @param _value initial values object or instance of CancelTasksResponse to deeply clone from
|
|
2248
|
-
*/
|
|
2249
|
-
constructor(_value) {
|
|
2250
|
-
_value = _value || {};
|
|
2251
|
-
this.tasks = (_value.tasks || []).map(m => new TaskSummary(m));
|
|
2252
|
-
CancelTasksResponse.refineValues(this);
|
|
2253
|
-
}
|
|
2254
|
-
get tasks() {
|
|
2255
|
-
return this._tasks;
|
|
2256
|
-
}
|
|
2257
|
-
set tasks(value) {
|
|
2258
|
-
this._tasks = value;
|
|
2259
|
-
}
|
|
2260
|
-
/**
|
|
2261
|
-
* Serialize message to binary data
|
|
2262
|
-
* @param instance message instance
|
|
2263
|
-
*/
|
|
2264
|
-
serializeBinary() {
|
|
2265
|
-
const writer = new BinaryWriter();
|
|
2266
|
-
CancelTasksResponse.serializeBinaryToWriter(this, writer);
|
|
2267
|
-
return writer.getResultBuffer();
|
|
2268
|
-
}
|
|
2269
|
-
/**
|
|
2270
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2271
|
-
*/
|
|
2272
|
-
toObject() {
|
|
2273
|
-
return {
|
|
2274
|
-
tasks: (this.tasks || []).map(m => m.toObject())
|
|
2275
|
-
};
|
|
2276
|
-
}
|
|
2277
|
-
/**
|
|
2278
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2279
|
-
*/
|
|
2280
|
-
toJSON() {
|
|
2281
|
-
return this.toObject();
|
|
2282
|
-
}
|
|
2283
|
-
/**
|
|
2284
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2285
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2286
|
-
* 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
|
|
2287
|
-
*/
|
|
2288
|
-
toProtobufJSON(
|
|
2289
|
-
// @ts-ignore
|
|
2290
|
-
options) {
|
|
2291
|
-
return {
|
|
2292
|
-
tasks: (this.tasks || []).map(m => m.toProtobufJSON(options))
|
|
2293
|
-
};
|
|
2294
|
-
}
|
|
2295
|
-
}
|
|
2296
|
-
/**
|
|
2297
|
-
* Message implementation for armonik.api.grpc.v1.tasks.GetResultIdsRequest
|
|
2298
|
-
*/
|
|
2299
|
-
export class GetResultIdsRequest {
|
|
2300
|
-
static { this.id = 'armonik.api.grpc.v1.tasks.GetResultIdsRequest'; }
|
|
2301
|
-
/**
|
|
2302
|
-
* Deserialize binary data to message
|
|
2303
|
-
* @param instance message instance
|
|
2304
|
-
*/
|
|
2305
|
-
static deserializeBinary(bytes) {
|
|
2306
|
-
const instance = new GetResultIdsRequest();
|
|
2307
|
-
GetResultIdsRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2308
|
-
return instance;
|
|
2309
|
-
}
|
|
2310
|
-
/**
|
|
2311
|
-
* Check all the properties and set default protobuf values if necessary
|
|
2312
|
-
* @param _instance message instance
|
|
2313
|
-
*/
|
|
2314
|
-
static refineValues(_instance) {
|
|
2315
|
-
_instance.taskId = _instance.taskId || [];
|
|
2316
|
-
}
|
|
2317
|
-
/**
|
|
2318
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2319
|
-
* @param _instance message instance
|
|
2320
|
-
* @param _reader binary reader instance
|
|
2321
|
-
*/
|
|
2322
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2323
|
-
while (_reader.nextField()) {
|
|
2324
|
-
if (_reader.isEndGroup())
|
|
2325
|
-
break;
|
|
2326
|
-
switch (_reader.getFieldNumber()) {
|
|
2327
|
-
case 1:
|
|
2328
|
-
(_instance.taskId = _instance.taskId || []).push(_reader.readString());
|
|
2329
|
-
break;
|
|
2330
|
-
default:
|
|
2331
|
-
_reader.skipField();
|
|
2332
|
-
}
|
|
2333
|
-
}
|
|
2334
|
-
GetResultIdsRequest.refineValues(_instance);
|
|
2335
|
-
}
|
|
2336
|
-
/**
|
|
2337
|
-
* Serializes a message to binary format using provided binary reader
|
|
2338
|
-
* @param _instance message instance
|
|
2339
|
-
* @param _writer binary writer instance
|
|
2340
|
-
*/
|
|
2341
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
2342
|
-
if (_instance.taskId && _instance.taskId.length) {
|
|
2343
|
-
_writer.writeRepeatedString(1, _instance.taskId);
|
|
2344
|
-
}
|
|
2345
|
-
}
|
|
2346
|
-
/**
|
|
2347
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2348
|
-
* @param _value initial values object or instance of GetResultIdsRequest to deeply clone from
|
|
2349
|
-
*/
|
|
2350
|
-
constructor(_value) {
|
|
2351
|
-
_value = _value || {};
|
|
2352
|
-
this.taskId = (_value.taskId || []).slice();
|
|
2353
|
-
GetResultIdsRequest.refineValues(this);
|
|
2354
|
-
}
|
|
2355
|
-
get taskId() {
|
|
2356
|
-
return this._taskId;
|
|
2357
|
-
}
|
|
2358
|
-
set taskId(value) {
|
|
2359
|
-
this._taskId = value;
|
|
2360
|
-
}
|
|
2361
|
-
/**
|
|
2362
|
-
* Serialize message to binary data
|
|
2363
|
-
* @param instance message instance
|
|
2364
|
-
*/
|
|
2365
|
-
serializeBinary() {
|
|
2366
|
-
const writer = new BinaryWriter();
|
|
2367
|
-
GetResultIdsRequest.serializeBinaryToWriter(this, writer);
|
|
2368
|
-
return writer.getResultBuffer();
|
|
2369
|
-
}
|
|
2370
|
-
/**
|
|
2371
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2372
|
-
*/
|
|
2373
|
-
toObject() {
|
|
2374
|
-
return {
|
|
2375
|
-
taskId: (this.taskId || []).slice()
|
|
2376
|
-
};
|
|
2377
|
-
}
|
|
2378
|
-
/**
|
|
2379
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2380
|
-
*/
|
|
2381
|
-
toJSON() {
|
|
2382
|
-
return this.toObject();
|
|
2383
|
-
}
|
|
2384
|
-
/**
|
|
2385
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2386
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2387
|
-
* 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
|
|
2388
|
-
*/
|
|
2389
|
-
toProtobufJSON(
|
|
2390
|
-
// @ts-ignore
|
|
2391
|
-
options) {
|
|
2392
|
-
return {
|
|
2393
|
-
taskId: (this.taskId || []).slice()
|
|
2394
|
-
};
|
|
2395
|
-
}
|
|
2396
|
-
}
|
|
2397
|
-
/**
|
|
2398
|
-
* Message implementation for armonik.api.grpc.v1.tasks.GetResultIdsResponse
|
|
2399
|
-
*/
|
|
2400
|
-
export class GetResultIdsResponse {
|
|
2401
|
-
static { this.id = 'armonik.api.grpc.v1.tasks.GetResultIdsResponse'; }
|
|
2402
|
-
/**
|
|
2403
|
-
* Deserialize binary data to message
|
|
2404
|
-
* @param instance message instance
|
|
2405
|
-
*/
|
|
2406
|
-
static deserializeBinary(bytes) {
|
|
2407
|
-
const instance = new GetResultIdsResponse();
|
|
2408
|
-
GetResultIdsResponse.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2409
|
-
return instance;
|
|
2410
|
-
}
|
|
2411
|
-
/**
|
|
2412
|
-
* Check all the properties and set default protobuf values if necessary
|
|
2413
|
-
* @param _instance message instance
|
|
2414
|
-
*/
|
|
2415
|
-
static refineValues(_instance) {
|
|
2416
|
-
_instance.taskResults = _instance.taskResults || [];
|
|
2417
|
-
}
|
|
2418
|
-
/**
|
|
2419
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2420
|
-
* @param _instance message instance
|
|
2421
|
-
* @param _reader binary reader instance
|
|
2422
|
-
*/
|
|
2423
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2424
|
-
while (_reader.nextField()) {
|
|
2425
|
-
if (_reader.isEndGroup())
|
|
2426
|
-
break;
|
|
2427
|
-
switch (_reader.getFieldNumber()) {
|
|
2428
|
-
case 1:
|
|
2429
|
-
const messageInitializer1 = new GetResultIdsResponse.MapTaskResult();
|
|
2430
|
-
_reader.readMessage(messageInitializer1, GetResultIdsResponse.MapTaskResult.deserializeBinaryFromReader);
|
|
2431
|
-
(_instance.taskResults = _instance.taskResults || []).push(messageInitializer1);
|
|
2432
|
-
break;
|
|
2433
|
-
default:
|
|
2434
|
-
_reader.skipField();
|
|
2435
|
-
}
|
|
2436
|
-
}
|
|
2437
|
-
GetResultIdsResponse.refineValues(_instance);
|
|
2438
|
-
}
|
|
2439
|
-
/**
|
|
2440
|
-
* Serializes a message to binary format using provided binary reader
|
|
2441
|
-
* @param _instance message instance
|
|
2442
|
-
* @param _writer binary writer instance
|
|
2443
|
-
*/
|
|
2444
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
2445
|
-
if (_instance.taskResults && _instance.taskResults.length) {
|
|
2446
|
-
_writer.writeRepeatedMessage(1, _instance.taskResults, GetResultIdsResponse.MapTaskResult.serializeBinaryToWriter);
|
|
2447
|
-
}
|
|
2448
|
-
}
|
|
2449
|
-
/**
|
|
2450
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2451
|
-
* @param _value initial values object or instance of GetResultIdsResponse to deeply clone from
|
|
2452
|
-
*/
|
|
2453
|
-
constructor(_value) {
|
|
2454
|
-
_value = _value || {};
|
|
2455
|
-
this.taskResults = (_value.taskResults || []).map(m => new GetResultIdsResponse.MapTaskResult(m));
|
|
2456
|
-
GetResultIdsResponse.refineValues(this);
|
|
2457
|
-
}
|
|
2458
|
-
get taskResults() {
|
|
2459
|
-
return this._taskResults;
|
|
2460
|
-
}
|
|
2461
|
-
set taskResults(value) {
|
|
2462
|
-
this._taskResults = value;
|
|
2463
|
-
}
|
|
2464
|
-
/**
|
|
2465
|
-
* Serialize message to binary data
|
|
2466
|
-
* @param instance message instance
|
|
2467
|
-
*/
|
|
2468
|
-
serializeBinary() {
|
|
2469
|
-
const writer = new BinaryWriter();
|
|
2470
|
-
GetResultIdsResponse.serializeBinaryToWriter(this, writer);
|
|
2471
|
-
return writer.getResultBuffer();
|
|
2472
|
-
}
|
|
2473
|
-
/**
|
|
2474
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2475
|
-
*/
|
|
2476
|
-
toObject() {
|
|
2477
|
-
return {
|
|
2478
|
-
taskResults: (this.taskResults || []).map(m => m.toObject())
|
|
2479
|
-
};
|
|
2480
|
-
}
|
|
2481
|
-
/**
|
|
2482
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2483
|
-
*/
|
|
2484
|
-
toJSON() {
|
|
2485
|
-
return this.toObject();
|
|
2486
|
-
}
|
|
2487
|
-
/**
|
|
2488
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2489
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2490
|
-
* 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
|
|
2491
|
-
*/
|
|
2492
|
-
toProtobufJSON(
|
|
2493
|
-
// @ts-ignore
|
|
2494
|
-
options) {
|
|
2495
|
-
return {
|
|
2496
|
-
taskResults: (this.taskResults || []).map(m => m.toProtobufJSON(options))
|
|
2497
|
-
};
|
|
2498
|
-
}
|
|
2499
|
-
}
|
|
2500
|
-
(function (GetResultIdsResponse) {
|
|
2501
|
-
/**
|
|
2502
|
-
* Message implementation for armonik.api.grpc.v1.tasks.GetResultIdsResponse.MapTaskResult
|
|
2503
|
-
*/
|
|
2504
|
-
class MapTaskResult {
|
|
2505
|
-
static { this.id = 'armonik.api.grpc.v1.tasks.GetResultIdsResponse.MapTaskResult'; }
|
|
2506
|
-
/**
|
|
2507
|
-
* Deserialize binary data to message
|
|
2508
|
-
* @param instance message instance
|
|
2509
|
-
*/
|
|
2510
|
-
static deserializeBinary(bytes) {
|
|
2511
|
-
const instance = new MapTaskResult();
|
|
2512
|
-
MapTaskResult.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2513
|
-
return instance;
|
|
2514
|
-
}
|
|
2515
|
-
/**
|
|
2516
|
-
* Check all the properties and set default protobuf values if necessary
|
|
2517
|
-
* @param _instance message instance
|
|
2518
|
-
*/
|
|
2519
|
-
static refineValues(_instance) {
|
|
2520
|
-
_instance.taskId = _instance.taskId || '';
|
|
2521
|
-
_instance.resultIds = _instance.resultIds || [];
|
|
2522
|
-
}
|
|
2523
|
-
/**
|
|
2524
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2525
|
-
* @param _instance message instance
|
|
2526
|
-
* @param _reader binary reader instance
|
|
2527
|
-
*/
|
|
2528
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2529
|
-
while (_reader.nextField()) {
|
|
2530
|
-
if (_reader.isEndGroup())
|
|
2531
|
-
break;
|
|
2532
|
-
switch (_reader.getFieldNumber()) {
|
|
2533
|
-
case 1:
|
|
2534
|
-
_instance.taskId = _reader.readString();
|
|
2535
|
-
break;
|
|
2536
|
-
case 2:
|
|
2537
|
-
(_instance.resultIds = _instance.resultIds || []).push(_reader.readString());
|
|
2538
|
-
break;
|
|
2539
|
-
default:
|
|
2540
|
-
_reader.skipField();
|
|
2541
|
-
}
|
|
2542
|
-
}
|
|
2543
|
-
MapTaskResult.refineValues(_instance);
|
|
2544
|
-
}
|
|
2545
|
-
/**
|
|
2546
|
-
* Serializes a message to binary format using provided binary reader
|
|
2547
|
-
* @param _instance message instance
|
|
2548
|
-
* @param _writer binary writer instance
|
|
2549
|
-
*/
|
|
2550
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
2551
|
-
if (_instance.taskId) {
|
|
2552
|
-
_writer.writeString(1, _instance.taskId);
|
|
2553
|
-
}
|
|
2554
|
-
if (_instance.resultIds && _instance.resultIds.length) {
|
|
2555
|
-
_writer.writeRepeatedString(2, _instance.resultIds);
|
|
2556
|
-
}
|
|
2557
|
-
}
|
|
2558
|
-
/**
|
|
2559
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2560
|
-
* @param _value initial values object or instance of MapTaskResult to deeply clone from
|
|
2561
|
-
*/
|
|
2562
|
-
constructor(_value) {
|
|
2563
|
-
_value = _value || {};
|
|
2564
|
-
this.taskId = _value.taskId;
|
|
2565
|
-
this.resultIds = (_value.resultIds || []).slice();
|
|
2566
|
-
MapTaskResult.refineValues(this);
|
|
2567
|
-
}
|
|
2568
|
-
get taskId() {
|
|
2569
|
-
return this._taskId;
|
|
2570
|
-
}
|
|
2571
|
-
set taskId(value) {
|
|
2572
|
-
this._taskId = value;
|
|
2573
|
-
}
|
|
2574
|
-
get resultIds() {
|
|
2575
|
-
return this._resultIds;
|
|
2576
|
-
}
|
|
2577
|
-
set resultIds(value) {
|
|
2578
|
-
this._resultIds = value;
|
|
2579
|
-
}
|
|
2580
|
-
/**
|
|
2581
|
-
* Serialize message to binary data
|
|
2582
|
-
* @param instance message instance
|
|
2583
|
-
*/
|
|
2584
|
-
serializeBinary() {
|
|
2585
|
-
const writer = new BinaryWriter();
|
|
2586
|
-
MapTaskResult.serializeBinaryToWriter(this, writer);
|
|
2587
|
-
return writer.getResultBuffer();
|
|
2588
|
-
}
|
|
2589
|
-
/**
|
|
2590
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2591
|
-
*/
|
|
2592
|
-
toObject() {
|
|
2593
|
-
return {
|
|
2594
|
-
taskId: this.taskId,
|
|
2595
|
-
resultIds: (this.resultIds || []).slice()
|
|
2596
|
-
};
|
|
2597
|
-
}
|
|
2598
|
-
/**
|
|
2599
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2600
|
-
*/
|
|
2601
|
-
toJSON() {
|
|
2602
|
-
return this.toObject();
|
|
2603
|
-
}
|
|
2604
|
-
/**
|
|
2605
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2606
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2607
|
-
* 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
|
|
2608
|
-
*/
|
|
2609
|
-
toProtobufJSON(
|
|
2610
|
-
// @ts-ignore
|
|
2611
|
-
options) {
|
|
2612
|
-
return {
|
|
2613
|
-
taskId: this.taskId,
|
|
2614
|
-
resultIds: (this.resultIds || []).slice()
|
|
2615
|
-
};
|
|
2616
|
-
}
|
|
2617
|
-
}
|
|
2618
|
-
GetResultIdsResponse.MapTaskResult = MapTaskResult;
|
|
2619
|
-
})(GetResultIdsResponse || (GetResultIdsResponse = {}));
|
|
2620
|
-
/**
|
|
2621
|
-
* Message implementation for armonik.api.grpc.v1.tasks.CountTasksByStatusRequest
|
|
2622
|
-
*/
|
|
2623
|
-
export class CountTasksByStatusRequest {
|
|
2624
|
-
static { this.id = 'armonik.api.grpc.v1.tasks.CountTasksByStatusRequest'; }
|
|
2625
|
-
/**
|
|
2626
|
-
* Deserialize binary data to message
|
|
2627
|
-
* @param instance message instance
|
|
2628
|
-
*/
|
|
2629
|
-
static deserializeBinary(bytes) {
|
|
2630
|
-
const instance = new CountTasksByStatusRequest();
|
|
2631
|
-
CountTasksByStatusRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2632
|
-
return instance;
|
|
2633
|
-
}
|
|
2634
|
-
/**
|
|
2635
|
-
* Check all the properties and set default protobuf values if necessary
|
|
2636
|
-
* @param _instance message instance
|
|
2637
|
-
*/
|
|
2638
|
-
static refineValues(_instance) {
|
|
2639
|
-
_instance.filters = _instance.filters || undefined;
|
|
2640
|
-
}
|
|
2641
|
-
/**
|
|
2642
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2643
|
-
* @param _instance message instance
|
|
2644
|
-
* @param _reader binary reader instance
|
|
2645
|
-
*/
|
|
2646
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2647
|
-
while (_reader.nextField()) {
|
|
2648
|
-
if (_reader.isEndGroup())
|
|
2649
|
-
break;
|
|
2650
|
-
switch (_reader.getFieldNumber()) {
|
|
2651
|
-
case 1:
|
|
2652
|
-
_instance.filters = new armonikApiGrpcV1Tasks007.Filters();
|
|
2653
|
-
_reader.readMessage(_instance.filters, armonikApiGrpcV1Tasks007.Filters.deserializeBinaryFromReader);
|
|
2654
|
-
break;
|
|
2655
|
-
default:
|
|
2656
|
-
_reader.skipField();
|
|
2657
|
-
}
|
|
2658
|
-
}
|
|
2659
|
-
CountTasksByStatusRequest.refineValues(_instance);
|
|
2660
|
-
}
|
|
2661
|
-
/**
|
|
2662
|
-
* Serializes a message to binary format using provided binary reader
|
|
2663
|
-
* @param _instance message instance
|
|
2664
|
-
* @param _writer binary writer instance
|
|
2665
|
-
*/
|
|
2666
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
2667
|
-
if (_instance.filters) {
|
|
2668
|
-
_writer.writeMessage(1, _instance.filters, armonikApiGrpcV1Tasks007.Filters.serializeBinaryToWriter);
|
|
2669
|
-
}
|
|
2670
|
-
}
|
|
2671
|
-
/**
|
|
2672
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2673
|
-
* @param _value initial values object or instance of CountTasksByStatusRequest to deeply clone from
|
|
2674
|
-
*/
|
|
2675
|
-
constructor(_value) {
|
|
2676
|
-
_value = _value || {};
|
|
2677
|
-
this.filters = _value.filters
|
|
2678
|
-
? new armonikApiGrpcV1Tasks007.Filters(_value.filters)
|
|
2679
|
-
: undefined;
|
|
2680
|
-
CountTasksByStatusRequest.refineValues(this);
|
|
2681
|
-
}
|
|
2682
|
-
get filters() {
|
|
2683
|
-
return this._filters;
|
|
2684
|
-
}
|
|
2685
|
-
set filters(value) {
|
|
2686
|
-
this._filters = value;
|
|
2687
|
-
}
|
|
2688
|
-
/**
|
|
2689
|
-
* Serialize message to binary data
|
|
2690
|
-
* @param instance message instance
|
|
2691
|
-
*/
|
|
2692
|
-
serializeBinary() {
|
|
2693
|
-
const writer = new BinaryWriter();
|
|
2694
|
-
CountTasksByStatusRequest.serializeBinaryToWriter(this, writer);
|
|
2695
|
-
return writer.getResultBuffer();
|
|
2696
|
-
}
|
|
2697
|
-
/**
|
|
2698
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2699
|
-
*/
|
|
2700
|
-
toObject() {
|
|
2701
|
-
return {
|
|
2702
|
-
filters: this.filters ? this.filters.toObject() : undefined
|
|
2703
|
-
};
|
|
2704
|
-
}
|
|
2705
|
-
/**
|
|
2706
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2707
|
-
*/
|
|
2708
|
-
toJSON() {
|
|
2709
|
-
return this.toObject();
|
|
2710
|
-
}
|
|
2711
|
-
/**
|
|
2712
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2713
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2714
|
-
* 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
|
|
2715
|
-
*/
|
|
2716
|
-
toProtobufJSON(
|
|
2717
|
-
// @ts-ignore
|
|
2718
|
-
options) {
|
|
2719
|
-
return {
|
|
2720
|
-
filters: this.filters ? this.filters.toProtobufJSON(options) : null
|
|
2721
|
-
};
|
|
2722
|
-
}
|
|
2723
|
-
}
|
|
2724
|
-
/**
|
|
2725
|
-
* Message implementation for armonik.api.grpc.v1.tasks.CountTasksByStatusResponse
|
|
2726
|
-
*/
|
|
2727
|
-
export class CountTasksByStatusResponse {
|
|
2728
|
-
static { this.id = 'armonik.api.grpc.v1.tasks.CountTasksByStatusResponse'; }
|
|
2729
|
-
/**
|
|
2730
|
-
* Deserialize binary data to message
|
|
2731
|
-
* @param instance message instance
|
|
2732
|
-
*/
|
|
2733
|
-
static deserializeBinary(bytes) {
|
|
2734
|
-
const instance = new CountTasksByStatusResponse();
|
|
2735
|
-
CountTasksByStatusResponse.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2736
|
-
return instance;
|
|
2737
|
-
}
|
|
2738
|
-
/**
|
|
2739
|
-
* Check all the properties and set default protobuf values if necessary
|
|
2740
|
-
* @param _instance message instance
|
|
2741
|
-
*/
|
|
2742
|
-
static refineValues(_instance) {
|
|
2743
|
-
_instance.status = _instance.status || [];
|
|
2744
|
-
}
|
|
2745
|
-
/**
|
|
2746
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2747
|
-
* @param _instance message instance
|
|
2748
|
-
* @param _reader binary reader instance
|
|
2749
|
-
*/
|
|
2750
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2751
|
-
while (_reader.nextField()) {
|
|
2752
|
-
if (_reader.isEndGroup())
|
|
2753
|
-
break;
|
|
2754
|
-
switch (_reader.getFieldNumber()) {
|
|
2755
|
-
case 1:
|
|
2756
|
-
const messageInitializer1 = new armonikApiGrpcV1005.StatusCount();
|
|
2757
|
-
_reader.readMessage(messageInitializer1, armonikApiGrpcV1005.StatusCount.deserializeBinaryFromReader);
|
|
2758
|
-
(_instance.status = _instance.status || []).push(messageInitializer1);
|
|
2759
|
-
break;
|
|
2760
|
-
default:
|
|
2761
|
-
_reader.skipField();
|
|
2762
|
-
}
|
|
2763
|
-
}
|
|
2764
|
-
CountTasksByStatusResponse.refineValues(_instance);
|
|
2765
|
-
}
|
|
2766
|
-
/**
|
|
2767
|
-
* Serializes a message to binary format using provided binary reader
|
|
2768
|
-
* @param _instance message instance
|
|
2769
|
-
* @param _writer binary writer instance
|
|
2770
|
-
*/
|
|
2771
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
2772
|
-
if (_instance.status && _instance.status.length) {
|
|
2773
|
-
_writer.writeRepeatedMessage(1, _instance.status, armonikApiGrpcV1005.StatusCount.serializeBinaryToWriter);
|
|
2774
|
-
}
|
|
2775
|
-
}
|
|
2776
|
-
/**
|
|
2777
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2778
|
-
* @param _value initial values object or instance of CountTasksByStatusResponse to deeply clone from
|
|
2779
|
-
*/
|
|
2780
|
-
constructor(_value) {
|
|
2781
|
-
_value = _value || {};
|
|
2782
|
-
this.status = (_value.status || []).map(m => new armonikApiGrpcV1005.StatusCount(m));
|
|
2783
|
-
CountTasksByStatusResponse.refineValues(this);
|
|
2784
|
-
}
|
|
2785
|
-
get status() {
|
|
2786
|
-
return this._status;
|
|
2787
|
-
}
|
|
2788
|
-
set status(value) {
|
|
2789
|
-
this._status = value;
|
|
2790
|
-
}
|
|
2791
|
-
/**
|
|
2792
|
-
* Serialize message to binary data
|
|
2793
|
-
* @param instance message instance
|
|
2794
|
-
*/
|
|
2795
|
-
serializeBinary() {
|
|
2796
|
-
const writer = new BinaryWriter();
|
|
2797
|
-
CountTasksByStatusResponse.serializeBinaryToWriter(this, writer);
|
|
2798
|
-
return writer.getResultBuffer();
|
|
2799
|
-
}
|
|
2800
|
-
/**
|
|
2801
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2802
|
-
*/
|
|
2803
|
-
toObject() {
|
|
2804
|
-
return {
|
|
2805
|
-
status: (this.status || []).map(m => m.toObject())
|
|
2806
|
-
};
|
|
2807
|
-
}
|
|
2808
|
-
/**
|
|
2809
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2810
|
-
*/
|
|
2811
|
-
toJSON() {
|
|
2812
|
-
return this.toObject();
|
|
2813
|
-
}
|
|
2814
|
-
/**
|
|
2815
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2816
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2817
|
-
* 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
|
|
2818
|
-
*/
|
|
2819
|
-
toProtobufJSON(
|
|
2820
|
-
// @ts-ignore
|
|
2821
|
-
options) {
|
|
2822
|
-
return {
|
|
2823
|
-
status: (this.status || []).map(m => m.toProtobufJSON(options))
|
|
2824
|
-
};
|
|
2825
|
-
}
|
|
2826
|
-
}
|
|
2827
|
-
/**
|
|
2828
|
-
* Message implementation for armonik.api.grpc.v1.tasks.SubmitTasksRequest
|
|
2829
|
-
*/
|
|
2830
|
-
export class SubmitTasksRequest {
|
|
2831
|
-
static { this.id = 'armonik.api.grpc.v1.tasks.SubmitTasksRequest'; }
|
|
2832
|
-
/**
|
|
2833
|
-
* Deserialize binary data to message
|
|
2834
|
-
* @param instance message instance
|
|
2835
|
-
*/
|
|
2836
|
-
static deserializeBinary(bytes) {
|
|
2837
|
-
const instance = new SubmitTasksRequest();
|
|
2838
|
-
SubmitTasksRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2839
|
-
return instance;
|
|
2840
|
-
}
|
|
2841
|
-
/**
|
|
2842
|
-
* Check all the properties and set default protobuf values if necessary
|
|
2843
|
-
* @param _instance message instance
|
|
2844
|
-
*/
|
|
2845
|
-
static refineValues(_instance) {
|
|
2846
|
-
_instance.sessionId = _instance.sessionId || '';
|
|
2847
|
-
_instance.taskOptions = _instance.taskOptions || undefined;
|
|
2848
|
-
_instance.taskCreations = _instance.taskCreations || [];
|
|
2849
|
-
}
|
|
2850
|
-
/**
|
|
2851
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2852
|
-
* @param _instance message instance
|
|
2853
|
-
* @param _reader binary reader instance
|
|
2854
|
-
*/
|
|
2855
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2856
|
-
while (_reader.nextField()) {
|
|
2857
|
-
if (_reader.isEndGroup())
|
|
2858
|
-
break;
|
|
2859
|
-
switch (_reader.getFieldNumber()) {
|
|
2860
|
-
case 1:
|
|
2861
|
-
_instance.sessionId = _reader.readString();
|
|
2862
|
-
break;
|
|
2863
|
-
case 2:
|
|
2864
|
-
_instance.taskOptions = new armonikApiGrpcV1005.TaskOptions();
|
|
2865
|
-
_reader.readMessage(_instance.taskOptions, armonikApiGrpcV1005.TaskOptions.deserializeBinaryFromReader);
|
|
2866
|
-
break;
|
|
2867
|
-
case 3:
|
|
2868
|
-
const messageInitializer3 = new SubmitTasksRequest.TaskCreation();
|
|
2869
|
-
_reader.readMessage(messageInitializer3, SubmitTasksRequest.TaskCreation.deserializeBinaryFromReader);
|
|
2870
|
-
(_instance.taskCreations = _instance.taskCreations || []).push(messageInitializer3);
|
|
2871
|
-
break;
|
|
2872
|
-
default:
|
|
2873
|
-
_reader.skipField();
|
|
2874
|
-
}
|
|
2875
|
-
}
|
|
2876
|
-
SubmitTasksRequest.refineValues(_instance);
|
|
2877
|
-
}
|
|
2878
|
-
/**
|
|
2879
|
-
* Serializes a message to binary format using provided binary reader
|
|
2880
|
-
* @param _instance message instance
|
|
2881
|
-
* @param _writer binary writer instance
|
|
2882
|
-
*/
|
|
2883
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
2884
|
-
if (_instance.sessionId) {
|
|
2885
|
-
_writer.writeString(1, _instance.sessionId);
|
|
2886
|
-
}
|
|
2887
|
-
if (_instance.taskOptions) {
|
|
2888
|
-
_writer.writeMessage(2, _instance.taskOptions, armonikApiGrpcV1005.TaskOptions.serializeBinaryToWriter);
|
|
2889
|
-
}
|
|
2890
|
-
if (_instance.taskCreations && _instance.taskCreations.length) {
|
|
2891
|
-
_writer.writeRepeatedMessage(3, _instance.taskCreations, SubmitTasksRequest.TaskCreation.serializeBinaryToWriter);
|
|
2892
|
-
}
|
|
2893
|
-
}
|
|
2894
|
-
/**
|
|
2895
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
2896
|
-
* @param _value initial values object or instance of SubmitTasksRequest to deeply clone from
|
|
2897
|
-
*/
|
|
2898
|
-
constructor(_value) {
|
|
2899
|
-
_value = _value || {};
|
|
2900
|
-
this.sessionId = _value.sessionId;
|
|
2901
|
-
this.taskOptions = _value.taskOptions
|
|
2902
|
-
? new armonikApiGrpcV1005.TaskOptions(_value.taskOptions)
|
|
2903
|
-
: undefined;
|
|
2904
|
-
this.taskCreations = (_value.taskCreations || []).map(m => new SubmitTasksRequest.TaskCreation(m));
|
|
2905
|
-
SubmitTasksRequest.refineValues(this);
|
|
2906
|
-
}
|
|
2907
|
-
get sessionId() {
|
|
2908
|
-
return this._sessionId;
|
|
2909
|
-
}
|
|
2910
|
-
set sessionId(value) {
|
|
2911
|
-
this._sessionId = value;
|
|
2912
|
-
}
|
|
2913
|
-
get taskOptions() {
|
|
2914
|
-
return this._taskOptions;
|
|
2915
|
-
}
|
|
2916
|
-
set taskOptions(value) {
|
|
2917
|
-
this._taskOptions = value;
|
|
2918
|
-
}
|
|
2919
|
-
get taskCreations() {
|
|
2920
|
-
return this._taskCreations;
|
|
2921
|
-
}
|
|
2922
|
-
set taskCreations(value) {
|
|
2923
|
-
this._taskCreations = value;
|
|
2924
|
-
}
|
|
2925
|
-
/**
|
|
2926
|
-
* Serialize message to binary data
|
|
2927
|
-
* @param instance message instance
|
|
2928
|
-
*/
|
|
2929
|
-
serializeBinary() {
|
|
2930
|
-
const writer = new BinaryWriter();
|
|
2931
|
-
SubmitTasksRequest.serializeBinaryToWriter(this, writer);
|
|
2932
|
-
return writer.getResultBuffer();
|
|
2933
|
-
}
|
|
2934
|
-
/**
|
|
2935
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
2936
|
-
*/
|
|
2937
|
-
toObject() {
|
|
2938
|
-
return {
|
|
2939
|
-
sessionId: this.sessionId,
|
|
2940
|
-
taskOptions: this.taskOptions ? this.taskOptions.toObject() : undefined,
|
|
2941
|
-
taskCreations: (this.taskCreations || []).map(m => m.toObject())
|
|
2942
|
-
};
|
|
2943
|
-
}
|
|
2944
|
-
/**
|
|
2945
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
2946
|
-
*/
|
|
2947
|
-
toJSON() {
|
|
2948
|
-
return this.toObject();
|
|
2949
|
-
}
|
|
2950
|
-
/**
|
|
2951
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
2952
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
2953
|
-
* 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
|
|
2954
|
-
*/
|
|
2955
|
-
toProtobufJSON(
|
|
2956
|
-
// @ts-ignore
|
|
2957
|
-
options) {
|
|
2958
|
-
return {
|
|
2959
|
-
sessionId: this.sessionId,
|
|
2960
|
-
taskOptions: this.taskOptions
|
|
2961
|
-
? this.taskOptions.toProtobufJSON(options)
|
|
2962
|
-
: null,
|
|
2963
|
-
taskCreations: (this.taskCreations || []).map(m => m.toProtobufJSON(options))
|
|
2964
|
-
};
|
|
2965
|
-
}
|
|
2966
|
-
}
|
|
2967
|
-
(function (SubmitTasksRequest) {
|
|
2968
|
-
/**
|
|
2969
|
-
* Message implementation for armonik.api.grpc.v1.tasks.SubmitTasksRequest.TaskCreation
|
|
2970
|
-
*/
|
|
2971
|
-
class TaskCreation {
|
|
2972
|
-
static { this.id = 'armonik.api.grpc.v1.tasks.SubmitTasksRequest.TaskCreation'; }
|
|
2973
|
-
/**
|
|
2974
|
-
* Deserialize binary data to message
|
|
2975
|
-
* @param instance message instance
|
|
2976
|
-
*/
|
|
2977
|
-
static deserializeBinary(bytes) {
|
|
2978
|
-
const instance = new TaskCreation();
|
|
2979
|
-
TaskCreation.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
2980
|
-
return instance;
|
|
2981
|
-
}
|
|
2982
|
-
/**
|
|
2983
|
-
* Check all the properties and set default protobuf values if necessary
|
|
2984
|
-
* @param _instance message instance
|
|
2985
|
-
*/
|
|
2986
|
-
static refineValues(_instance) {
|
|
2987
|
-
_instance.expectedOutputKeys = _instance.expectedOutputKeys || [];
|
|
2988
|
-
_instance.dataDependencies = _instance.dataDependencies || [];
|
|
2989
|
-
_instance.payloadId = _instance.payloadId || '';
|
|
2990
|
-
_instance.taskOptions = _instance.taskOptions || undefined;
|
|
2991
|
-
}
|
|
2992
|
-
/**
|
|
2993
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
2994
|
-
* @param _instance message instance
|
|
2995
|
-
* @param _reader binary reader instance
|
|
2996
|
-
*/
|
|
2997
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
2998
|
-
while (_reader.nextField()) {
|
|
2999
|
-
if (_reader.isEndGroup())
|
|
3000
|
-
break;
|
|
3001
|
-
switch (_reader.getFieldNumber()) {
|
|
3002
|
-
case 1:
|
|
3003
|
-
(_instance.expectedOutputKeys =
|
|
3004
|
-
_instance.expectedOutputKeys || []).push(_reader.readString());
|
|
3005
|
-
break;
|
|
3006
|
-
case 2:
|
|
3007
|
-
(_instance.dataDependencies =
|
|
3008
|
-
_instance.dataDependencies || []).push(_reader.readString());
|
|
3009
|
-
break;
|
|
3010
|
-
case 3:
|
|
3011
|
-
_instance.payloadId = _reader.readString();
|
|
3012
|
-
break;
|
|
3013
|
-
case 4:
|
|
3014
|
-
_instance.taskOptions = new armonikApiGrpcV1005.TaskOptions();
|
|
3015
|
-
_reader.readMessage(_instance.taskOptions, armonikApiGrpcV1005.TaskOptions.deserializeBinaryFromReader);
|
|
3016
|
-
break;
|
|
3017
|
-
default:
|
|
3018
|
-
_reader.skipField();
|
|
3019
|
-
}
|
|
3020
|
-
}
|
|
3021
|
-
TaskCreation.refineValues(_instance);
|
|
3022
|
-
}
|
|
3023
|
-
/**
|
|
3024
|
-
* Serializes a message to binary format using provided binary reader
|
|
3025
|
-
* @param _instance message instance
|
|
3026
|
-
* @param _writer binary writer instance
|
|
3027
|
-
*/
|
|
3028
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
3029
|
-
if (_instance.expectedOutputKeys && _instance.expectedOutputKeys.length) {
|
|
3030
|
-
_writer.writeRepeatedString(1, _instance.expectedOutputKeys);
|
|
3031
|
-
}
|
|
3032
|
-
if (_instance.dataDependencies && _instance.dataDependencies.length) {
|
|
3033
|
-
_writer.writeRepeatedString(2, _instance.dataDependencies);
|
|
3034
|
-
}
|
|
3035
|
-
if (_instance.payloadId) {
|
|
3036
|
-
_writer.writeString(3, _instance.payloadId);
|
|
3037
|
-
}
|
|
3038
|
-
if (_instance.taskOptions) {
|
|
3039
|
-
_writer.writeMessage(4, _instance.taskOptions, armonikApiGrpcV1005.TaskOptions.serializeBinaryToWriter);
|
|
3040
|
-
}
|
|
3041
|
-
}
|
|
3042
|
-
/**
|
|
3043
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
3044
|
-
* @param _value initial values object or instance of TaskCreation to deeply clone from
|
|
3045
|
-
*/
|
|
3046
|
-
constructor(_value) {
|
|
3047
|
-
_value = _value || {};
|
|
3048
|
-
this.expectedOutputKeys = (_value.expectedOutputKeys || []).slice();
|
|
3049
|
-
this.dataDependencies = (_value.dataDependencies || []).slice();
|
|
3050
|
-
this.payloadId = _value.payloadId;
|
|
3051
|
-
this.taskOptions = _value.taskOptions
|
|
3052
|
-
? new armonikApiGrpcV1005.TaskOptions(_value.taskOptions)
|
|
3053
|
-
: undefined;
|
|
3054
|
-
TaskCreation.refineValues(this);
|
|
3055
|
-
}
|
|
3056
|
-
get expectedOutputKeys() {
|
|
3057
|
-
return this._expectedOutputKeys;
|
|
3058
|
-
}
|
|
3059
|
-
set expectedOutputKeys(value) {
|
|
3060
|
-
this._expectedOutputKeys = value;
|
|
3061
|
-
}
|
|
3062
|
-
get dataDependencies() {
|
|
3063
|
-
return this._dataDependencies;
|
|
3064
|
-
}
|
|
3065
|
-
set dataDependencies(value) {
|
|
3066
|
-
this._dataDependencies = value;
|
|
3067
|
-
}
|
|
3068
|
-
get payloadId() {
|
|
3069
|
-
return this._payloadId;
|
|
3070
|
-
}
|
|
3071
|
-
set payloadId(value) {
|
|
3072
|
-
this._payloadId = value;
|
|
3073
|
-
}
|
|
3074
|
-
get taskOptions() {
|
|
3075
|
-
return this._taskOptions;
|
|
3076
|
-
}
|
|
3077
|
-
set taskOptions(value) {
|
|
3078
|
-
this._taskOptions = value;
|
|
3079
|
-
}
|
|
3080
|
-
/**
|
|
3081
|
-
* Serialize message to binary data
|
|
3082
|
-
* @param instance message instance
|
|
3083
|
-
*/
|
|
3084
|
-
serializeBinary() {
|
|
3085
|
-
const writer = new BinaryWriter();
|
|
3086
|
-
TaskCreation.serializeBinaryToWriter(this, writer);
|
|
3087
|
-
return writer.getResultBuffer();
|
|
3088
|
-
}
|
|
3089
|
-
/**
|
|
3090
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
3091
|
-
*/
|
|
3092
|
-
toObject() {
|
|
3093
|
-
return {
|
|
3094
|
-
expectedOutputKeys: (this.expectedOutputKeys || []).slice(),
|
|
3095
|
-
dataDependencies: (this.dataDependencies || []).slice(),
|
|
3096
|
-
payloadId: this.payloadId,
|
|
3097
|
-
taskOptions: this.taskOptions ? this.taskOptions.toObject() : undefined
|
|
3098
|
-
};
|
|
3099
|
-
}
|
|
3100
|
-
/**
|
|
3101
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
3102
|
-
*/
|
|
3103
|
-
toJSON() {
|
|
3104
|
-
return this.toObject();
|
|
3105
|
-
}
|
|
3106
|
-
/**
|
|
3107
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
3108
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
3109
|
-
* 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
|
|
3110
|
-
*/
|
|
3111
|
-
toProtobufJSON(
|
|
3112
|
-
// @ts-ignore
|
|
3113
|
-
options) {
|
|
3114
|
-
return {
|
|
3115
|
-
expectedOutputKeys: (this.expectedOutputKeys || []).slice(),
|
|
3116
|
-
dataDependencies: (this.dataDependencies || []).slice(),
|
|
3117
|
-
payloadId: this.payloadId,
|
|
3118
|
-
taskOptions: this.taskOptions
|
|
3119
|
-
? this.taskOptions.toProtobufJSON(options)
|
|
3120
|
-
: null
|
|
3121
|
-
};
|
|
3122
|
-
}
|
|
3123
|
-
}
|
|
3124
|
-
SubmitTasksRequest.TaskCreation = TaskCreation;
|
|
3125
|
-
})(SubmitTasksRequest || (SubmitTasksRequest = {}));
|
|
3126
|
-
/**
|
|
3127
|
-
* Message implementation for armonik.api.grpc.v1.tasks.SubmitTasksResponse
|
|
3128
|
-
*/
|
|
3129
|
-
export class SubmitTasksResponse {
|
|
3130
|
-
static { this.id = 'armonik.api.grpc.v1.tasks.SubmitTasksResponse'; }
|
|
3131
|
-
/**
|
|
3132
|
-
* Deserialize binary data to message
|
|
3133
|
-
* @param instance message instance
|
|
3134
|
-
*/
|
|
3135
|
-
static deserializeBinary(bytes) {
|
|
3136
|
-
const instance = new SubmitTasksResponse();
|
|
3137
|
-
SubmitTasksResponse.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
3138
|
-
return instance;
|
|
3139
|
-
}
|
|
3140
|
-
/**
|
|
3141
|
-
* Check all the properties and set default protobuf values if necessary
|
|
3142
|
-
* @param _instance message instance
|
|
3143
|
-
*/
|
|
3144
|
-
static refineValues(_instance) {
|
|
3145
|
-
_instance.taskInfos = _instance.taskInfos || [];
|
|
3146
|
-
}
|
|
3147
|
-
/**
|
|
3148
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
3149
|
-
* @param _instance message instance
|
|
3150
|
-
* @param _reader binary reader instance
|
|
3151
|
-
*/
|
|
3152
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
3153
|
-
while (_reader.nextField()) {
|
|
3154
|
-
if (_reader.isEndGroup())
|
|
3155
|
-
break;
|
|
3156
|
-
switch (_reader.getFieldNumber()) {
|
|
3157
|
-
case 1:
|
|
3158
|
-
const messageInitializer1 = new SubmitTasksResponse.TaskInfo();
|
|
3159
|
-
_reader.readMessage(messageInitializer1, SubmitTasksResponse.TaskInfo.deserializeBinaryFromReader);
|
|
3160
|
-
(_instance.taskInfos = _instance.taskInfos || []).push(messageInitializer1);
|
|
3161
|
-
break;
|
|
3162
|
-
default:
|
|
3163
|
-
_reader.skipField();
|
|
3164
|
-
}
|
|
3165
|
-
}
|
|
3166
|
-
SubmitTasksResponse.refineValues(_instance);
|
|
3167
|
-
}
|
|
3168
|
-
/**
|
|
3169
|
-
* Serializes a message to binary format using provided binary reader
|
|
3170
|
-
* @param _instance message instance
|
|
3171
|
-
* @param _writer binary writer instance
|
|
3172
|
-
*/
|
|
3173
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
3174
|
-
if (_instance.taskInfos && _instance.taskInfos.length) {
|
|
3175
|
-
_writer.writeRepeatedMessage(1, _instance.taskInfos, SubmitTasksResponse.TaskInfo.serializeBinaryToWriter);
|
|
3176
|
-
}
|
|
3177
|
-
}
|
|
3178
|
-
/**
|
|
3179
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
3180
|
-
* @param _value initial values object or instance of SubmitTasksResponse to deeply clone from
|
|
3181
|
-
*/
|
|
3182
|
-
constructor(_value) {
|
|
3183
|
-
_value = _value || {};
|
|
3184
|
-
this.taskInfos = (_value.taskInfos || []).map(m => new SubmitTasksResponse.TaskInfo(m));
|
|
3185
|
-
SubmitTasksResponse.refineValues(this);
|
|
3186
|
-
}
|
|
3187
|
-
get taskInfos() {
|
|
3188
|
-
return this._taskInfos;
|
|
3189
|
-
}
|
|
3190
|
-
set taskInfos(value) {
|
|
3191
|
-
this._taskInfos = value;
|
|
3192
|
-
}
|
|
3193
|
-
/**
|
|
3194
|
-
* Serialize message to binary data
|
|
3195
|
-
* @param instance message instance
|
|
3196
|
-
*/
|
|
3197
|
-
serializeBinary() {
|
|
3198
|
-
const writer = new BinaryWriter();
|
|
3199
|
-
SubmitTasksResponse.serializeBinaryToWriter(this, writer);
|
|
3200
|
-
return writer.getResultBuffer();
|
|
3201
|
-
}
|
|
3202
|
-
/**
|
|
3203
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
3204
|
-
*/
|
|
3205
|
-
toObject() {
|
|
3206
|
-
return {
|
|
3207
|
-
taskInfos: (this.taskInfos || []).map(m => m.toObject())
|
|
3208
|
-
};
|
|
3209
|
-
}
|
|
3210
|
-
/**
|
|
3211
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
3212
|
-
*/
|
|
3213
|
-
toJSON() {
|
|
3214
|
-
return this.toObject();
|
|
3215
|
-
}
|
|
3216
|
-
/**
|
|
3217
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
3218
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
3219
|
-
* 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
|
|
3220
|
-
*/
|
|
3221
|
-
toProtobufJSON(
|
|
3222
|
-
// @ts-ignore
|
|
3223
|
-
options) {
|
|
3224
|
-
return {
|
|
3225
|
-
taskInfos: (this.taskInfos || []).map(m => m.toProtobufJSON(options))
|
|
3226
|
-
};
|
|
3227
|
-
}
|
|
3228
|
-
}
|
|
3229
|
-
(function (SubmitTasksResponse) {
|
|
3230
|
-
/**
|
|
3231
|
-
* Message implementation for armonik.api.grpc.v1.tasks.SubmitTasksResponse.TaskInfo
|
|
3232
|
-
*/
|
|
3233
|
-
class TaskInfo {
|
|
3234
|
-
static { this.id = 'armonik.api.grpc.v1.tasks.SubmitTasksResponse.TaskInfo'; }
|
|
3235
|
-
/**
|
|
3236
|
-
* Deserialize binary data to message
|
|
3237
|
-
* @param instance message instance
|
|
3238
|
-
*/
|
|
3239
|
-
static deserializeBinary(bytes) {
|
|
3240
|
-
const instance = new TaskInfo();
|
|
3241
|
-
TaskInfo.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
3242
|
-
return instance;
|
|
3243
|
-
}
|
|
3244
|
-
/**
|
|
3245
|
-
* Check all the properties and set default protobuf values if necessary
|
|
3246
|
-
* @param _instance message instance
|
|
3247
|
-
*/
|
|
3248
|
-
static refineValues(_instance) {
|
|
3249
|
-
_instance.taskId = _instance.taskId || '';
|
|
3250
|
-
_instance.expectedOutputIds = _instance.expectedOutputIds || [];
|
|
3251
|
-
_instance.dataDependencies = _instance.dataDependencies || [];
|
|
3252
|
-
_instance.payloadId = _instance.payloadId || '';
|
|
3253
|
-
}
|
|
3254
|
-
/**
|
|
3255
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
3256
|
-
* @param _instance message instance
|
|
3257
|
-
* @param _reader binary reader instance
|
|
3258
|
-
*/
|
|
3259
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
3260
|
-
while (_reader.nextField()) {
|
|
3261
|
-
if (_reader.isEndGroup())
|
|
3262
|
-
break;
|
|
3263
|
-
switch (_reader.getFieldNumber()) {
|
|
3264
|
-
case 1:
|
|
3265
|
-
_instance.taskId = _reader.readString();
|
|
3266
|
-
break;
|
|
3267
|
-
case 2:
|
|
3268
|
-
(_instance.expectedOutputIds =
|
|
3269
|
-
_instance.expectedOutputIds || []).push(_reader.readString());
|
|
3270
|
-
break;
|
|
3271
|
-
case 3:
|
|
3272
|
-
(_instance.dataDependencies =
|
|
3273
|
-
_instance.dataDependencies || []).push(_reader.readString());
|
|
3274
|
-
break;
|
|
3275
|
-
case 4:
|
|
3276
|
-
_instance.payloadId = _reader.readString();
|
|
3277
|
-
break;
|
|
3278
|
-
default:
|
|
3279
|
-
_reader.skipField();
|
|
3280
|
-
}
|
|
3281
|
-
}
|
|
3282
|
-
TaskInfo.refineValues(_instance);
|
|
3283
|
-
}
|
|
3284
|
-
/**
|
|
3285
|
-
* Serializes a message to binary format using provided binary reader
|
|
3286
|
-
* @param _instance message instance
|
|
3287
|
-
* @param _writer binary writer instance
|
|
3288
|
-
*/
|
|
3289
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
3290
|
-
if (_instance.taskId) {
|
|
3291
|
-
_writer.writeString(1, _instance.taskId);
|
|
3292
|
-
}
|
|
3293
|
-
if (_instance.expectedOutputIds && _instance.expectedOutputIds.length) {
|
|
3294
|
-
_writer.writeRepeatedString(2, _instance.expectedOutputIds);
|
|
3295
|
-
}
|
|
3296
|
-
if (_instance.dataDependencies && _instance.dataDependencies.length) {
|
|
3297
|
-
_writer.writeRepeatedString(3, _instance.dataDependencies);
|
|
3298
|
-
}
|
|
3299
|
-
if (_instance.payloadId) {
|
|
3300
|
-
_writer.writeString(4, _instance.payloadId);
|
|
3301
|
-
}
|
|
3302
|
-
}
|
|
3303
|
-
/**
|
|
3304
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
3305
|
-
* @param _value initial values object or instance of TaskInfo to deeply clone from
|
|
3306
|
-
*/
|
|
3307
|
-
constructor(_value) {
|
|
3308
|
-
_value = _value || {};
|
|
3309
|
-
this.taskId = _value.taskId;
|
|
3310
|
-
this.expectedOutputIds = (_value.expectedOutputIds || []).slice();
|
|
3311
|
-
this.dataDependencies = (_value.dataDependencies || []).slice();
|
|
3312
|
-
this.payloadId = _value.payloadId;
|
|
3313
|
-
TaskInfo.refineValues(this);
|
|
3314
|
-
}
|
|
3315
|
-
get taskId() {
|
|
3316
|
-
return this._taskId;
|
|
3317
|
-
}
|
|
3318
|
-
set taskId(value) {
|
|
3319
|
-
this._taskId = value;
|
|
3320
|
-
}
|
|
3321
|
-
get expectedOutputIds() {
|
|
3322
|
-
return this._expectedOutputIds;
|
|
3323
|
-
}
|
|
3324
|
-
set expectedOutputIds(value) {
|
|
3325
|
-
this._expectedOutputIds = value;
|
|
3326
|
-
}
|
|
3327
|
-
get dataDependencies() {
|
|
3328
|
-
return this._dataDependencies;
|
|
3329
|
-
}
|
|
3330
|
-
set dataDependencies(value) {
|
|
3331
|
-
this._dataDependencies = value;
|
|
3332
|
-
}
|
|
3333
|
-
get payloadId() {
|
|
3334
|
-
return this._payloadId;
|
|
3335
|
-
}
|
|
3336
|
-
set payloadId(value) {
|
|
3337
|
-
this._payloadId = value;
|
|
3338
|
-
}
|
|
3339
|
-
/**
|
|
3340
|
-
* Serialize message to binary data
|
|
3341
|
-
* @param instance message instance
|
|
3342
|
-
*/
|
|
3343
|
-
serializeBinary() {
|
|
3344
|
-
const writer = new BinaryWriter();
|
|
3345
|
-
TaskInfo.serializeBinaryToWriter(this, writer);
|
|
3346
|
-
return writer.getResultBuffer();
|
|
3347
|
-
}
|
|
3348
|
-
/**
|
|
3349
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
3350
|
-
*/
|
|
3351
|
-
toObject() {
|
|
3352
|
-
return {
|
|
3353
|
-
taskId: this.taskId,
|
|
3354
|
-
expectedOutputIds: (this.expectedOutputIds || []).slice(),
|
|
3355
|
-
dataDependencies: (this.dataDependencies || []).slice(),
|
|
3356
|
-
payloadId: this.payloadId
|
|
3357
|
-
};
|
|
3358
|
-
}
|
|
3359
|
-
/**
|
|
3360
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
3361
|
-
*/
|
|
3362
|
-
toJSON() {
|
|
3363
|
-
return this.toObject();
|
|
3364
|
-
}
|
|
3365
|
-
/**
|
|
3366
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
3367
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
3368
|
-
* 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
|
|
3369
|
-
*/
|
|
3370
|
-
toProtobufJSON(
|
|
3371
|
-
// @ts-ignore
|
|
3372
|
-
options) {
|
|
3373
|
-
return {
|
|
3374
|
-
taskId: this.taskId,
|
|
3375
|
-
expectedOutputIds: (this.expectedOutputIds || []).slice(),
|
|
3376
|
-
dataDependencies: (this.dataDependencies || []).slice(),
|
|
3377
|
-
payloadId: this.payloadId
|
|
3378
|
-
};
|
|
3379
|
-
}
|
|
3380
|
-
}
|
|
3381
|
-
SubmitTasksResponse.TaskInfo = TaskInfo;
|
|
3382
|
-
})(SubmitTasksResponse || (SubmitTasksResponse = {}));
|
|
3383
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza3MtY29tbW9uLnBiLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5lb2NvbnN1bHRpbmdmci9hcm1vbmlrLmFwaS5hbmd1bGFyL3NyYy9saWIvZ2VuZXJhdGVkL3Rhc2tzLWNvbW1vbi5wYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFXQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBYyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pFLE9BQU8sS0FBSyxpQkFBaUIsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEtBQUssOEJBQThCLE1BQU0sa0JBQWtCLENBQUM7QUFFbkUsT0FBTyxLQUFLLHdCQUF3QixNQUFNLG1CQUFtQixDQUFDO0FBQzlELE9BQU8sS0FBSyxpQkFBaUIsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEtBQUssbUJBQW1CLE1BQU0sY0FBYyxDQUFDO0FBQ3BELE9BQU8sS0FBSyxpQ0FBaUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RSxPQUFPLEtBQUssd0JBQXdCLE1BQU0sb0JBQW9CLENBQUM7QUFDL0Q7O0dBRUc7QUFDSCxNQUFNLE9BQU8sWUFBWTthQUNoQixPQUFFLEdBQUcsd0NBQXdDLENBQUM7SUFFckQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQWlCO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDcEMsWUFBWSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsRUFBRSxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQXVCO1FBQ3pDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDbEMsU0FBUyxDQUFDLFNBQVMsR0FB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LFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUztZQUMvQixDQUFDLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUNuRCxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVztZQUNuQyxDQUFDLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUNyRCxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVTtZQUNqQyxDQUFDLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztZQUNwRCxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVTtZQUNqQyxDQUFDLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztZQUNwRCxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUztZQUMvQixDQUFDLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUNuRCxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUztZQUMvQixDQUFDLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUNuRCxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVztZQUNuQyxDQUFDLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUNyRCxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsSUFBSSxD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QixDQUFDLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUNyRCxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUztZQUMvQixDQUFDLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUNuRCxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVztZQUNuQyxDQUFDLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUNyRCxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVTtZQUNqQyxDQUFDLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztZQUNwRCxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVTtZQUNqQyxDQUFDLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztZQUNwRCxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUztZQUMvQixDQUFDLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUNuRCxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUztZQUMvQixDQUFDLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUNuRCxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVztZ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Q0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUU7Z0JBQ3pELGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRTtnQkFDdkQsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2FBQzFCLENBQUM7UUFDSixDQUFDO1FBRUQ7O1dBRUc7UUFDSCxNQUFNO1lBQ0osT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsQ0FBQztRQUVEOzs7O1dBSUc7UUFDSCxjQUFjO1FBQ1osYUFBYTtRQUNiLE9BQStCO1lBRS9CLE9BQU87Z0JBQ0wsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2dCQUNuQixpQkFBaUIsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUU7Z0JBQ3pELGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRTtnQkFDdkQsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2FBQzFCLENBQUM7UUFDSixDQUFDOztJQXJLVSw0QkFBUSxXQXNLcEIsQ0FBQTtBQXNCSCxDQUFDLEVBOU1hLG1CQUFtQixLQUFuQixtQkFBbUIsUUE4TWhDIiwic291cmNlc0NvbnRlbnQiOlsiLyogdHNsaW50OmRpc2FibGUgKi9cbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBAdHMtbm9jaGVja1xuLy9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRVxuLy8gRE8gTk9UIE1PRElGWSBJVCEgWU9VUiBDSEFOR0VTIFdJTEwgQkUgTE9TVFxuaW1wb3J0IHtcbiAgR3JwY01lc3NhZ2UsXG4gIFJlY3Vyc2l2ZVBhcnRpYWwsXG4gIFRvUHJvdG9idWZKU09OT3B0aW9uc1xufSBmcm9tICdAbmd4LWdycGMvY29tbW9uJztcbmltcG9ydCB7IEJpbmFyeVJlYWRlciwgQmluYXJ5V3JpdGVyLCBCeXRlU291cmNlIH0gZnJvbSAnZ29vZ2xlLXByb3RvYnVmJztcbmltcG9ydCAqIGFzIGdvb2dsZVByb3RvYnVmMDAwIGZyb20gJ0BuZ3gtZ3JwYy93ZWxsLWtub3duLXR5cGVzJztcbmltcG9ydCAqIGFzIGFybW9uaWtBcGlHcnBjVjFUYXNrX3N0YXR1czAwMSBmcm9tICcuL3Rhc2stc3RhdHVzLnBiJztcbmltcG9ydCAqIGFzIGFybW9uaWtBcGlHcnBjVjEwMDIgZnJvbSAnLi9maWx0ZXJzLWNvbW1vbi5wYic7XG5pbXBvcnQgKiBhcyBhcm1vbmlrQXBpR3JwY1YxVGFza3MwMDMgZnJvbSAnLi90YXNrcy1maWVsZHMucGInO1xuaW1wb3J0ICogYXMgZ29vZ2xlUHJvdG9idWYwMDQgZnJvbSAnQG5neC1ncnBjL3dlbGwta25vd24tdHlwZXMnO1xuaW1wb3J0ICogYXMgYXJtb25pa0FwaUdycGNWMTAwNSBmcm9tICcuL29iamVjdHMucGInO1xuaW1wb3J0ICogYXMgYXJtb25pa0FwaUdycGNWMVNvcnRfZGlyZWN0aW9uMDA2IGZyb20gJy4vc29ydC1kaXJlY3Rpb24ucGInO1xuaW1wb3J0ICogYXMgYXJtb25pa0FwaUdycGNWMVRhc2tzMDA3IGZyb20gJy4vdGFza3MtZmlsdGVycy5wYic7XG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIGFybW9uaWsuYXBpLmdycGMudjEudGFza3MuVGFza0RldGFpbGVkXG4gKi9cbmV4cG9ydCBjbGFzcyBUYXNrRGV0YWlsZWQgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdhcm1vbmlrLmFwaS5ncnBjLnYxLnRhc2tzLlRhc2tEZXRhaWxlZCc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFRhc2tEZXRhaWxlZCgpO1xuICAgIFRhc2tEZXRhaWxlZC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoaW5zdGFuY2UsIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IFRhc2tEZXRhaWxlZCkge1xuICAgIF9pbnN0YW5jZS5pZCA9IF9pbnN0YW5jZS5pZCB8fCAnJztcbiAgICBfaW5zdGFuY2Uuc2Vzc2lvbklkID0gX2luc3RhbmNlLnNlc3Npb25JZCB8fCAnJztcbiAgICBfaW5zdGFuY2Uub3duZXJQb2RJZCA9IF9pbnN0YW5jZS5vd25lclBvZElkIHx8ICcnO1xuICAgIF9pbnN0YW5jZS5pbml0aWFsVGFza0lkID0gX2luc3RhbmNlLmluaXRpYWxUYXNrSWQgfHwgJyc7XG4gICAgX2luc3RhbmNlLnBhcmVudFRhc2tJZHMgPSBfaW5zdGFuY2UucGFyZW50VGFza0lkcyB8fCBbXTtcbiAgICBfaW5zdGFuY2UuZGF0YURlcGVuZGVuY2llcyA9IF9pbnN0YW5jZS5kYXRhRGVwZW5kZW5jaWVzIHx8IFtdO1xuICAgIF9pbnN0YW5jZS5leHBlY3RlZE91dHB1dElkcyA9IF9pbnN0YW5jZS5leHBlY3RlZE91dHB1dElkcyB8fCBbXTtcbiAgICBfaW5zdGFuY2UucmV0cnlPZklkcyA9IF9pbnN0YW5jZS5yZXRyeU9mSWRzIHx8IFtdO1xuICAgIF9pbnN0YW5jZS5zdGF0dXMgPSBfaW5zdGFuY2Uuc3RhdHVzIHx8IDA7XG4gICAgX2luc3RhbmNlLnN0YXR1c01lc3NhZ2UgPSBfaW5zdGFuY2Uuc3RhdHVzTWVzc2FnZSB8fCAnJztcbiAgICBfaW5zdGFuY2Uub3B0aW9ucyA9IF9pbnN0YW5jZS5vcHRpb25zIHx8IHVuZGVmaW5lZDtcbiAgICBfaW5zdGFuY2UuY3JlYXRlZEF0ID0gX2luc3RhbmNlLmNyZWF0ZWRBdCB8fCB1bmRlZmluZWQ7XG4gICAgX2luc3RhbmNlLnN1Ym1pdHRlZEF0ID0gX2luc3RhbmNlLnN1Ym1pdHRlZEF0IHx8IHVuZGVmaW5lZDtcbiAgICBfaW5zdGFuY2UucmVjZWl2ZWRBdCA9IF9pbnN0YW5jZS5yZWNlaXZlZEF0IHx8IHVuZGVmaW5lZDtcbiAgICBfaW5zdGFuY2UuYWNxdWlyZWRBdCA9IF9pbnN0YW5jZS5hY3F1aXJlZEF0IHx8IHVuZGVmaW5lZDtcbiAgICBfaW5zdGFuY2UuZmV0Y2hlZEF0ID0gX2luc3RhbmNlLmZldGNoZWRBdCB8fCB1bmRlZmluZWQ7XG4gICAgX2luc3RhbmNlLnN0YXJ0ZWRBdCA9IF9pbnN0YW5jZS5zdGFydGVkQXQgfHwgdW5kZWZpbmVkO1xuICAgIF9pbnN0YW5jZS5wcm9jZXNzZWRBdCA9IF9pbnN0YW5jZS5wcm9jZXNzZWRBdCB8fCB1bmRlZmluZWQ7XG4gICAgX2luc3RhbmNlLmVuZGVkQXQgPSBfaW5zdGFuY2UuZW5kZWRBdCB8fCB1bmRlZmluZWQ7XG4gICAgX2luc3RhbmNlLnBvZFR0bCA9IF9pbnN0YW5jZS5wb2RUdGwgfHwgdW5kZWZpbmVkO1xuICAgIF9pbnN0YW5jZS5jcmVhdGlvblRvRW5kRHVyYXRpb24gPVxuICAgICAgX2luc3RhbmNlLmNyZWF0aW9uVG9FbmREdXJhdGlvbiB8fCB1bmRlZmluZWQ7XG4gICAgX2luc3RhbmNlLnByb2Nlc3NpbmdUb0VuZER1cmF0aW9uID1cbiAgICAgIF9pbnN0YW5jZS5wcm9jZXNzaW5nVG9FbmREdXJhdGlvbiB8fCB1bmRlZmluZWQ7XG4gICAgX2luc3RhbmNlLnJlY2VpdmVkVG9FbmREdXJhdGlvbiA9XG4gICAgICBfaW5zdGFuY2UucmVjZWl2ZWRUb0VuZER1cmF0aW9uIHx8IHVuZGVmaW5lZDtcbiAgICBfaW5zdGFuY2UucGF5bG9hZElkID0gX2luc3RhbmNlLnBheWxvYWRJZCB8fCAnJztcbiAgICBfaW5zdGFuY2UuY3JlYXRlZEJ5ID0gX2luc3RhbmNlLmNyZWF0ZWRCeSB8fCAnJztcbiAgICBfaW5zdGFuY2Uub3V0cHV0ID0gX2luc3RhbmNlLm91dHB1dCB8fCB1bmRlZmluZWQ7XG4gICAgX2luc3RhbmNlLnBvZEhvc3RuYW1lID0gX2luc3RhbmNlLnBvZEhvc3RuYW1lIHx8ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgIF9pbnN0YW5jZTogVGFza0RldGFpbGVkLFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIF9pbnN0YW5jZS5pZCA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgX2luc3RhbmNlLnNlc3Npb25JZCA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgX2luc3RhbmNlLm93bmVyUG9kSWQgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICBfaW5zdGFuY2UuaW5pdGlhbFRhc2tJZCA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgKF9pbnN0YW5jZS5wYXJlbnRUYXNrSWRzID0gX2luc3RhbmNlLnBhcmVudFRhc2tJZHMgfHwgW10pLnB1c2goXG4gICAgICAgICAgICBfcmVhZGVyLnJlYWRTdHJpbmcoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAoX2luc3RhbmNlLmRhdGFEZXBlbmRlbmNpZXMgPSBfaW5zdGFuY2UuZGF0YURlcGVuZGVuY2llcyB8fCBbXSkucHVzaChcbiAgICAgICAgICAgIF9yZWFkZXIucmVhZFN0cmluZygpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIChfaW5zdGFuY2UuZXhwZWN0ZWRPdXRwdXRJZHMgPVxuICAgICAgICAgICAgX2luc3RhbmNlLmV4cGVjdGVkT3V0cHV0SWRzIHx8IFtdKS5wdXNoKF9yZWFkZXIucmVhZFN0cmluZygpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIChfaW5zdGFuY2UucmV0cnlPZklkcyA9IF9pbnN0YW5jZS5yZXRyeU9mSWRzIHx8IFtdKS5wdXNoKFxuICAgICAgICAgICAgX3JlYWRlci5yZWFkU3RyaW5nKClcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgX2luc3RhbmNlLnN0YXR1cyA9IF9yZWFkZXIucmVhZEVudW0oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIF9pbnN0YW5jZS5zdGF0dXNNZXNzYWdlID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgX2luc3RhbmNlLm9wdGlvbnMgPSBuZXcgYXJtb25pa0FwaUdycGNWMTAwNS5UYXNrT3B0aW9ucygpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2Uub3B0aW9ucyxcbiAgICAgICAgICAgIGFybW9uaWtBcGlHcnBjVjEwMDUuVGFza09wdGlvbnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICBfaW5zdGFuY2UuY3JlYXRlZEF0ID0gbmV3IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcCgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2UuY3JlYXRlZEF0LFxuICAgICAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgX2luc3RhbmNlLnN1Ym1pdHRlZEF0ID0gbmV3IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcCgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2Uuc3VibWl0dGVkQXQsXG4gICAgICAgICAgICBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICBfaW5zdGFuY2UucmVjZWl2ZWRBdCA9IG5ldyBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgX2luc3RhbmNlLnJlY2VpdmVkQXQsXG4gICAgICAgICAgICBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICBfaW5zdGFuY2UuYWNxdWlyZWRBdCA9IG5ldyBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgX2luc3RhbmNlLmFjcXVpcmVkQXQsXG4gICAgICAgICAgICBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICBfaW5zdGFuY2UuZmV0Y2hlZEF0ID0gbmV3IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcCgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2UuZmV0Y2hlZEF0LFxuICAgICAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgX2luc3RhbmNlLnN0YXJ0ZWRBdCA9IG5ldyBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgX2luc3RhbmNlLnN0YXJ0ZWRBdCxcbiAgICAgICAgICAgIGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIF9pbnN0YW5jZS5wcm9jZXNzZWRBdCA9IG5ldyBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgX2luc3RhbmNlLnByb2Nlc3NlZEF0LFxuICAgICAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgX2luc3RhbmNlLmVuZGVkQXQgPSBuZXcgZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wKCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5lbmRlZEF0LFxuICAgICAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgX2luc3RhbmNlLnBvZFR0bCA9IG5ldyBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgX2luc3RhbmNlLnBvZFR0bCxcbiAgICAgICAgICAgIGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgIF9pbnN0YW5jZS5jcmVhdGlvblRvRW5kRHVyYXRpb24gPSBuZXcgZ29vZ2xlUHJvdG9idWYwMDAuRHVyYXRpb24oKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgX2luc3RhbmNlLmNyZWF0aW9uVG9FbmREdXJhdGlvbixcbiAgICAgICAgICAgIGdvb2dsZVByb3RvYnVmMDAwLkR1cmF0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgX2luc3RhbmNlLnByb2Nlc3NpbmdUb0VuZER1cmF0aW9uID0gbmV3IGdvb2dsZVByb3RvYnVmMDAwLkR1cmF0aW9uKCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5wcm9jZXNzaW5nVG9FbmREdXJhdGlvbixcbiAgICAgICAgICAgIGdvb2dsZVByb3RvYnVmMDAwLkR1cmF0aW9uLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgX2luc3RhbmNlLnJlY2VpdmVkVG9FbmREdXJhdGlvbiA9IG5ldyBnb29nbGVQcm90b2J1ZjAwMC5EdXJhdGlvbigpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2UucmVjZWl2ZWRUb0VuZER1cmF0aW9uLFxuICAgICAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDAuRHVyYXRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICBfaW5zdGFuY2UucGF5bG9hZElkID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgX2luc3RhbmNlLmNyZWF0ZWRCeSA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgIF9pbnN0YW5jZS5vdXRwdXQgPSBuZXcgVGFza0RldGFpbGVkLk91dHB1dCgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2Uub3V0cHV0LFxuICAgICAgICAgICAgVGFza0RldGFpbGVkLk91dHB1dC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgIF9pbnN0YW5jZS5wb2RIb3N0bmFtZSA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgVGFza0RldGFpbGVkLnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogVGFza0RldGFpbGVkLFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLmlkKSB7XG4gICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDEsIF9pbnN0YW5jZS5pZCk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2Uuc2Vzc2lvbklkKSB7XG4gICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDIsIF9pbnN0YW5jZS5zZXNzaW9uSWQpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLm93bmVyUG9kSWQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMywgX2luc3RhbmNlLm93bmVyUG9kSWQpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmluaXRpYWxUYXNrSWQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMjIsIF9pbnN0YW5jZS5pbml0aWFsVGFza0lkKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5wYXJlbnRUYXNrSWRzICYmIF9pbnN0YW5jZS5wYXJlbnRUYXNrSWRzLmxlbmd0aCkge1xuICAgICAgX3dyaXRlci53cml0ZVJlcGVhdGVkU3RyaW5nKDQsIF9pbnN0YW5jZS5wYXJlbnRUYXNrSWRzKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5kYXRhRGVwZW5kZW5jaWVzICYmIF9pbnN0YW5jZS5kYXRhRGVwZW5kZW5jaWVzLmxlbmd0aCkge1xuICAgICAgX3dyaXRlci53cml0ZVJlcGVhdGVkU3RyaW5nKDUsIF9pbnN0YW5jZS5kYXRhRGVwZW5kZW5jaWVzKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5leHBlY3RlZE91dHB1dElkcyAmJiBfaW5zdGFuY2UuZXhwZWN0ZWRPdXRwdXRJZHMubGVuZ3RoKSB7XG4gICAgICBfd3JpdGVyLndyaXRlUmVwZWF0ZWRTdHJpbmcoNiwgX2luc3RhbmNlLmV4cGVjdGVkT3V0cHV0SWRzKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5yZXRyeU9mSWRzICYmIF9pbnN0YW5jZS5yZXRyeU9mSWRzLmxlbmd0aCkge1xuICAgICAgX3dyaXRlci53cml0ZVJlcGVhdGVkU3RyaW5nKDcsIF9pbnN0YW5jZS5yZXRyeU9mSWRzKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5zdGF0dXMpIHtcbiAgICAgIF93cml0ZXIud3JpdGVFbnVtKDgsIF9pbnN0YW5jZS5zdGF0dXMpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnN0YXR1c01lc3NhZ2UpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoOSwgX2luc3RhbmNlLnN0YXR1c01lc3NhZ2UpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLm9wdGlvbnMpIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICAxMCxcbiAgICAgICAgX2luc3RhbmNlLm9wdGlvbnMgYXMgYW55LFxuICAgICAgICBhcm1vbmlrQXBpR3JwY1YxMDA1LlRhc2tPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmNyZWF0ZWRBdCkge1xuICAgICAgX3dyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAgIDExLFxuICAgICAgICBfaW5zdGFuY2UuY3JlYXRlZEF0IGFzIGFueSxcbiAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnN1Ym1pdHRlZEF0KSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMTIsXG4gICAgICAgIF9pbnN0YW5jZS5zdWJtaXR0ZWRBdCBhcyBhbnksXG4gICAgICAgIGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5yZWNlaXZlZEF0KSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMTgsXG4gICAgICAgIF9pbnN0YW5jZS5yZWNlaXZlZEF0IGFzIGFueSxcbiAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmFjcXVpcmVkQXQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICAxOSxcbiAgICAgICAgX2luc3RhbmNlLmFjcXVpcmVkQXQgYXMgYW55LFxuICAgICAgICBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UuZmV0Y2hlZEF0KSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMjUsXG4gICAgICAgIF9pbnN0YW5jZS5mZXRjaGVkQXQgYXMgYW55LFxuICAgICAgICBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2Uuc3RhcnRlZEF0KSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMTMsXG4gICAgICAgIF9pbnN0YW5jZS5zdGFydGVkQXQgYXMgYW55LFxuICAgICAgICBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UucHJvY2Vzc2VkQXQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICAyNCxcbiAgICAgICAgX2luc3RhbmNlLnByb2Nlc3NlZEF0IGFzIGFueSxcbiAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmVuZGVkQXQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICAxNCxcbiAgICAgICAgX2luc3RhbmNlLmVuZGVkQXQgYXMgYW55LFxuICAgICAgICBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UucG9kVHRsKSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMTUsXG4gICAgICAgIF9pbnN0YW5jZS5wb2RUdGwgYXMgYW55LFxuICAgICAgICBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UuY3JlYXRpb25Ub0VuZER1cmF0aW9uKSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMjAsXG4gICAgICAgIF9pbnN0YW5jZS5jcmVhdGlvblRvRW5kRHVyYXRpb24gYXMgYW55LFxuICAgICAgICBnb29nbGVQcm90b2J1ZjAwMC5EdXJhdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5wcm9jZXNzaW5nVG9FbmREdXJhdGlvbikge1xuICAgICAgX3dyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAgIDIxLFxuICAgICAgICBfaW5zdGFuY2UucHJvY2Vzc2luZ1RvRW5kRHVyYXRpb24gYXMgYW55LFxuICAgICAgICBnb29nbGVQcm90b2J1ZjAwMC5EdXJhdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5yZWNlaXZlZFRvRW5kRHVyYXRpb24pIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICAyMyxcbiAgICAgICAgX2luc3RhbmNlLnJlY2VpdmVkVG9FbmREdXJhdGlvbiBhcyBhbnksXG4gICAgICAgIGdvb2dsZVByb3RvYnVmMDAwLkR1cmF0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnBheWxvYWRJZCkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygyNiwgX2luc3RhbmNlLnBheWxvYWRJZCk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UuY3JlYXRlZEJ5KSB7XG4gICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDI3LCBfaW5zdGFuY2UuY3JlYXRlZEJ5KTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5vdXRwdXQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICAxNixcbiAgICAgICAgX2luc3RhbmNlLm91dHB1dCBhcyBhbnksXG4gICAgICAgIFRhc2tEZXRhaWxlZC5PdXRwdXQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UucG9kSG9zdG5hbWUpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMTcsIF9pbnN0YW5jZS5wb2RIb3N0bmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX293bmVyUG9kSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfaW5pdGlhbFRhc2tJZDogc3RyaW5nO1xuICBwcml2YXRlIF9wYXJlbnRUYXNrSWRzOiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSBfZGF0YURlcGVuZGVuY2llczogc3RyaW5nW107XG4gIHByaXZhdGUgX2V4cGVjdGVkT3V0cHV0SWRzOiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSBfcmV0cnlPZklkczogc3RyaW5nW107XG4gIHByaXZhdGUgX3N0YXR1czogYXJtb25pa0FwaUdycGNWMVRhc2tfc3RhdHVzMDAxLlRhc2tTdGF0dXM7XG4gIHByaXZhdGUgX3N0YXR1c01lc3NhZ2U6IHN0cmluZztcbiAgcHJpdmF0ZSBfb3B0aW9ucz86IGFybW9uaWtBcGlHcnBjVjEwMDUuVGFza09wdGlvbnM7XG4gIHByaXZhdGUgX2NyZWF0ZWRBdD86IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcDtcbiAgcHJpdmF0ZSBfc3VibWl0dGVkQXQ/OiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXA7XG4gIHByaXZhdGUgX3JlY2VpdmVkQXQ/OiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXA7XG4gIHByaXZhdGUgX2FjcXVpcmVkQXQ/OiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXA7XG4gIHByaXZhdGUgX2ZldGNoZWRBdD86IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcDtcbiAgcHJpdmF0ZSBfc3RhcnRlZEF0PzogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wO1xuICBwcml2YXRlIF9wcm9jZXNzZWRBdD86IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcDtcbiAgcHJpdmF0ZSBfZW5kZWRBdD86IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcDtcbiAgcHJpdmF0ZSBfcG9kVHRsPzogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wO1xuICBwcml2YXRlIF9jcmVhdGlvblRvRW5kRHVyYXRpb24/OiBnb29nbGVQcm90b2J1ZjAwMC5EdXJhdGlvbjtcbiAgcHJpdmF0ZSBfcHJvY2Vzc2luZ1RvRW5kRHVyYXRpb24/OiBnb29nbGVQcm90b2J1ZjAwMC5EdXJhdGlvbjtcbiAgcHJpdmF0ZSBfcmVjZWl2ZWRUb0VuZER1cmF0aW9uPzogZ29vZ2xlUHJvdG9idWYwMDAuRHVyYXRpb247XG4gIHByaXZhdGUgX3BheWxvYWRJZDogc3RyaW5nO1xuICBwcml2YXRlIF9jcmVhdGVkQnk6IHN0cmluZztcbiAgcHJpdmF0ZSBfb3V0cHV0PzogVGFza0RldGFpbGVkLk91dHB1dDtcbiAgcHJpdmF0ZSBfcG9kSG9zdG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIFRhc2tEZXRhaWxlZCB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxUYXNrRGV0YWlsZWQuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMuaWQgPSBfdmFsdWUuaWQ7XG4gICAgdGhpcy5zZXNzaW9uSWQgPSBfdmFsdWUuc2Vzc2lvbklkO1xuICAgIHRoaXMub3duZXJQb2RJZCA9IF92YWx1ZS5vd25lclBvZElkO1xuICAgIHRoaXMuaW5pdGlhbFRhc2tJZCA9IF92YWx1ZS5pbml0aWFsVGFza0lkO1xuICAgIHRoaXMucGFyZW50VGFza0lkcyA9IChfdmFsdWUucGFyZW50VGFza0lkcyB8fCBbXSkuc2xpY2UoKTtcbiAgICB0aGlzLmRhdGFEZXBlbmRlbmNpZXMgPSAoX3ZhbHVlLmRhdGFEZXBlbmRlbmNpZXMgfHwgW10pLnNsaWNlKCk7XG4gICAgdGhpcy5leHBlY3RlZE91dHB1dElkcyA9IChfdmFsdWUuZXhwZWN0ZWRPdXRwdXRJZHMgfHwgW10pLnNsaWNlKCk7XG4gICAgdGhpcy5yZXRyeU9mSWRzID0gKF92YWx1ZS5yZXRyeU9mSWRzIHx8IFtdKS5zbGljZSgpO1xuICAgIHRoaXMuc3RhdHVzID0gX3ZhbHVlLnN0YXR1cztcbiAgICB0aGlzLnN0YXR1c01lc3NhZ2UgPSBfdmFsdWUuc3RhdHVzTWVzc2FnZTtcbiAgICB0aGlzLm9wdGlvbnMgPSBfdmFsdWUub3B0aW9uc1xuICAgICAgPyBuZXcgYXJtb25pa0FwaUdycGNWMTAwNS5UYXNrT3B0aW9ucyhfdmFsdWUub3B0aW9ucylcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gX3ZhbHVlLmNyZWF0ZWRBdFxuICAgICAgPyBuZXcgZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wKF92YWx1ZS5jcmVhdGVkQXQpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLnN1Ym1pdHRlZEF0ID0gX3ZhbHVlLnN1Ym1pdHRlZEF0XG4gICAgICA/IG5ldyBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAoX3ZhbHVlLnN1Ym1pdHRlZEF0KVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5yZWNlaXZlZEF0ID0gX3ZhbHVlLnJlY2VpdmVkQXRcbiAgICAgID8gbmV3IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcChfdmFsdWUucmVjZWl2ZWRBdClcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuYWNxdWlyZWRBdCA9IF92YWx1ZS5hY3F1aXJlZEF0XG4gICAgICA/IG5ldyBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAoX3ZhbHVlLmFjcXVpcmVkQXQpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLmZldGNoZWRBdCA9IF92YWx1ZS5mZXRjaGVkQXRcbiAgICAgID8gbmV3IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcChfdmFsdWUuZmV0Y2hlZEF0KVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5zdGFydGVkQXQgPSBfdmFsdWUuc3RhcnRlZEF0XG4gICAgICA/IG5ldyBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAoX3ZhbHVlLnN0YXJ0ZWRBdClcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMucHJvY2Vzc2VkQXQgPSBfdmFsdWUucHJvY2Vzc2VkQXRcbiAgICAgID8gbmV3IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcChfdmFsdWUucHJvY2Vzc2VkQXQpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVuZGVkQXQgPSBfdmFsdWUuZW5kZWRBdFxuICAgICAgPyBuZXcgZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wKF92YWx1ZS5lbmRlZEF0KVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5wb2RUdGwgPSBfdmFsdWUucG9kVHRsXG4gICAgICA/IG5ldyBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAoX3ZhbHVlLnBvZFR0bClcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuY3JlYXRpb25Ub0VuZER1cmF0aW9uID0gX3ZhbHVlLmNyZWF0aW9uVG9FbmREdXJhdGlvblxuICAgICAgPyBuZXcgZ29vZ2xlUHJvdG9idWYwMDAuRHVyYXRpb24oX3ZhbHVlLmNyZWF0aW9uVG9FbmREdXJhdGlvbilcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMucHJvY2Vzc2luZ1RvRW5kRHVyYXRpb24gPSBfdmFsdWUucHJvY2Vzc2luZ1RvRW5kRHVyYXRpb25cbiAgICAgID8gbmV3IGdvb2dsZVByb3RvYnVmMDAwLkR1cmF0aW9uKF92YWx1ZS5wcm9jZXNzaW5nVG9FbmREdXJhdGlvbilcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMucmVjZWl2ZWRUb0VuZER1cmF0aW9uID0gX3ZhbHVlLnJlY2VpdmVkVG9FbmREdXJhdGlvblxuICAgICAgPyBuZXcgZ29vZ2xlUHJvdG9idWYwMDAuRHVyYXRpb24oX3ZhbHVlLnJlY2VpdmVkVG9FbmREdXJhdGlvbilcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMucGF5bG9hZElkID0gX3ZhbHVlLnBheWxvYWRJZDtcbiAgICB0aGlzLmNyZWF0ZWRCeSA9IF92YWx1ZS5jcmVhdGVkQnk7XG4gICAgdGhpcy5vdXRwdXQgPSBfdmFsdWUub3V0cHV0XG4gICAgICA/IG5ldyBUYXNrRGV0YWlsZWQuT3V0cHV0KF92YWx1ZS5vdXRwdXQpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBvZEhvc3RuYW1lID0gX3ZhbHVlLnBvZEhvc3RuYW1lO1xuICAgIFRhc2tEZXRhaWxlZC5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2lkO1xuICB9XG4gIHNldCBpZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5faWQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25JZDtcbiAgfVxuICBzZXQgc2Vzc2lvbklkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgb3duZXJQb2RJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9vd25lclBvZElkO1xuICB9XG4gIHNldCBvd25lclBvZElkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9vd25lclBvZElkID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGluaXRpYWxUYXNrSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faW5pdGlhbFRhc2tJZDtcbiAgfVxuICBzZXQgaW5pdGlhbFRhc2tJZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5faW5pdGlhbFRhc2tJZCA9IHZhbHVlO1xuICB9XG4gIGdldCBwYXJlbnRUYXNrSWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50VGFza0lkcztcbiAgfVxuICBzZXQgcGFyZW50VGFza0lkcyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLl9wYXJlbnRUYXNrSWRzID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGRhdGFEZXBlbmRlbmNpZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhRGVwZW5kZW5jaWVzO1xuICB9XG4gIHNldCBkYXRhRGVwZW5kZW5jaWVzKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuX2RhdGFEZXBlbmRlbmNpZXMgPSB2YWx1ZTtcbiAgfVxuICBnZXQgZXhwZWN0ZWRPdXRwdXRJZHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9leHBlY3RlZE91dHB1dElkcztcbiAgfVxuICBzZXQgZXhwZWN0ZWRPdXRwdXRJZHModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fZXhwZWN0ZWRPdXRwdXRJZHMgPSB2YWx1ZTtcbiAgfVxuICBnZXQgcmV0cnlPZklkcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3JldHJ5T2ZJZHM7XG4gIH1cbiAgc2V0IHJldHJ5T2ZJZHModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fcmV0cnlPZklkcyA9IHZhbHVlO1xuICB9XG4gIGdldCBzdGF0dXMoKTogYXJtb25pa0FwaUdycGNWMVRhc2tfc3RhdHVzMDAxLlRhc2tTdGF0dXMge1xuICAgIHJldHVybiB0aGlzLl9zdGF0dXM7XG4gIH1cbiAgc2V0IHN0YXR1cyh2YWx1ZTogYXJtb25pa0FwaUdycGNWMVRhc2tfc3RhdHVzMDAxLlRhc2tTdGF0dXMpIHtcbiAgICB0aGlzLl9zdGF0dXMgPSB2YWx1ZTtcbiAgfVxuICBnZXQgc3RhdHVzTWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdGF0dXNNZXNzYWdlO1xuICB9XG4gIHNldCBzdGF0dXNNZXNzYWdlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zdGF0dXNNZXNzYWdlID0gdmFsdWU7XG4gIH1cbiAgZ2V0IG9wdGlvbnMoKTogYXJtb25pa0FwaUdycGNWMTAwNS5UYXNrT3B0aW9ucyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cbiAgc2V0IG9wdGlvbnModmFsdWU6IGFybW9uaWtBcGlHcnBjVjEwMDUuVGFza09wdGlvbnMgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9vcHRpb25zID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGNyZWF0ZWRBdCgpOiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9jcmVhdGVkQXQ7XG4gIH1cbiAgc2V0IGNyZWF0ZWRBdCh2YWx1ZTogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fY3JlYXRlZEF0ID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHN1Ym1pdHRlZEF0KCk6IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3N1Ym1pdHRlZEF0O1xuICB9XG4gIHNldCBzdWJtaXR0ZWRBdCh2YWx1ZTogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fc3VibWl0dGVkQXQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgcmVjZWl2ZWRBdCgpOiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9yZWNlaXZlZEF0O1xuICB9XG4gIHNldCByZWNlaXZlZEF0KHZhbHVlOiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9yZWNlaXZlZEF0ID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGFjcXVpcmVkQXQoKTogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fYWNxdWlyZWRBdDtcbiAgfVxuICBzZXQgYWNxdWlyZWRBdCh2YWx1ZTogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fYWNxdWlyZWRBdCA9IHZhbHVlO1xuICB9XG4gIGdldCBmZXRjaGVkQXQoKTogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmV0Y2hlZEF0O1xuICB9XG4gIHNldCBmZXRjaGVkQXQodmFsdWU6IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2ZldGNoZWRBdCA9IHZhbHVlO1xuICB9XG4gIGdldCBzdGFydGVkQXQoKTogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRlZEF0O1xuICB9XG4gIHNldCBzdGFydGVkQXQodmFsdWU6IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3N0YXJ0ZWRBdCA9IHZhbHVlO1xuICB9XG4gIGdldCBwcm9jZXNzZWRBdCgpOiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9wcm9jZXNzZWRBdDtcbiAgfVxuICBzZXQgcHJvY2Vzc2VkQXQodmFsdWU6IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3Byb2Nlc3NlZEF0ID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGVuZGVkQXQoKTogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZW5kZWRBdDtcbiAgfVxuICBzZXQgZW5kZWRBdCh2YWx1ZTogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZW5kZWRBdCA9IHZhbHVlO1xuICB9XG4gIGdldCBwb2RUdGwoKTogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcG9kVHRsO1xuICB9XG4gIHNldCBwb2RUdGwodmFsdWU6IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3BvZFR0bCA9IHZhbHVlO1xuICB9XG4gIGdldCBjcmVhdGlvblRvRW5kRHVyYXRpb24oKTogZ29vZ2xlUHJvdG9idWYwMDAuRHVyYXRpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9jcmVhdGlvblRvRW5kRHVyYXRpb247XG4gIH1cbiAgc2V0IGNyZWF0aW9uVG9FbmREdXJhdGlvbih2YWx1ZTogZ29vZ2xlUHJvdG9idWYwMDAuRHVyYXRpb24gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9jcmVhdGlvblRvRW5kRHVyYXRpb24gPSB2YWx1ZTtcbiAgfVxuICBnZXQgcHJvY2Vzc2luZ1RvRW5kRHVyYXRpb24oKTogZ29vZ2xlUHJvdG9idWYwMDAuRHVyYXRpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9wcm9jZXNzaW5nVG9FbmREdXJhdGlvbjtcbiAgfVxuICBzZXQgcHJvY2Vzc2luZ1RvRW5kRHVyYXRpb24odmFsdWU6IGdvb2dsZVByb3RvYnVmMDAwLkR1cmF0aW9uIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcHJvY2Vzc2luZ1RvRW5kRHVyYXRpb24gPSB2YWx1ZTtcbiAgfVxuICBnZXQgcmVjZWl2ZWRUb0VuZER1cmF0aW9uKCk6IGdvb2dsZVByb3RvYnVmMDAwLkR1cmF0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcmVjZWl2ZWRUb0VuZER1cmF0aW9uO1xuICB9XG4gIHNldCByZWNlaXZlZFRvRW5kRHVyYXRpb24odmFsdWU6IGdvb2dsZVByb3RvYnVmMDAwLkR1cmF0aW9uIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcmVjZWl2ZWRUb0VuZER1cmF0aW9uID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHBheWxvYWRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wYXlsb2FkSWQ7XG4gIH1cbiAgc2V0IHBheWxvYWRJZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcGF5bG9hZElkID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGNyZWF0ZWRCeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jcmVhdGVkQnk7XG4gIH1cbiAgc2V0IGNyZWF0ZWRCeSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fY3JlYXRlZEJ5ID0gdmFsdWU7XG4gIH1cbiAgZ2V0IG91dHB1dCgpOiBUYXNrRGV0YWlsZWQuT3V0cHV0IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fb3V0cHV0O1xuICB9XG4gIHNldCBvdXRwdXQodmFsdWU6IFRhc2tEZXRhaWxlZC5PdXRwdXQgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9vdXRwdXQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgcG9kSG9zdG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcG9kSG9zdG5hbWU7XG4gIH1cbiAgc2V0IHBvZEhvc3RuYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wb2RIb3N0bmFtZSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIFRhc2tEZXRhaWxlZC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBUYXNrRGV0YWlsZWQuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQsXG4gICAgICBvd25lclBvZElkOiB0aGlzLm93bmVyUG9kSWQsXG4gICAgICBpbml0aWFsVGFza0lkOiB0aGlzLmluaXRpYWxUYXNrSWQsXG4gICAgICBwYXJlbnRUYXNrSWRzOiAodGhpcy5wYXJlbnRUYXNrSWRzIHx8IFtdKS5zbGljZSgpLFxuICAgICAgZGF0YURlcGVuZGVuY2llczogKHRoaXMuZGF0YURlcGVuZGVuY2llcyB8fCBbXSkuc2xpY2UoKSxcbiAgICAgIGV4cGVjdGVkT3V0cHV0SWRzOiAodGhpcy5leHBlY3RlZE91dHB1dElkcyB8fCBbXSkuc2xpY2UoKSxcbiAgICAgIHJldHJ5T2ZJZHM6ICh0aGlzLnJldHJ5T2ZJZHMgfHwgW10pLnNsaWNlKCksXG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgc3RhdHVzTWVzc2FnZTogdGhpcy5zdGF0dXNNZXNzYWdlLFxuICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zID8gdGhpcy5vcHRpb25zLnRvT2JqZWN0KCkgOiB1bmRlZmluZWQsXG4gICAgICBjcmVhdGVkQXQ6IHRoaXMuY3JlYXRlZEF0ID8gdGhpcy5jcmVhdGVkQXQudG9PYmplY3QoKSA6IHVuZGVmaW5lZCxcbiAgICAgIHN1Ym1pdHRlZEF0OiB0aGlzLnN1Ym1pdHRlZEF0ID8gdGhpcy5zdWJtaXR0ZWRBdC50b09iamVjdCgpIDogdW5kZWZpbmVkLFxuICAgICAgcmVjZWl2ZWRBdDogdGhpcy5yZWNlaXZlZEF0ID8gdGhpcy5yZWNlaXZlZEF0LnRvT2JqZWN0KCkgOiB1bmRlZmluZWQsXG4gICAgICBhY3F1aXJlZEF0OiB0aGlzLmFjcXVpcmVkQXQgPyB0aGlzLmFjcXVpcmVkQXQudG9PYmplY3QoKSA6IHVuZGVmaW5lZCxcbiAgICAgIGZldGNoZWRBdDogdGhpcy5mZXRjaGVkQXQgPyB0aGlzLmZldGNoZWRBdC50b09iamVjdCgpIDogdW5kZWZpbmVkLFxuICAgICAgc3RhcnRlZEF0OiB0aGlzLnN0YXJ0ZWRBdCA/IHRoaXMuc3RhcnRlZEF0LnRvT2JqZWN0KCkgOiB1bmRlZmluZWQsXG4gICAgICBwcm9jZXNzZWRBdDogdGhpcy5wcm9jZXNzZWRBdCA/IHRoaXMucHJvY2Vzc2VkQXQudG9PYmplY3QoKSA6IHVuZGVmaW5lZCxcbiAgICAgIGVuZGVkQXQ6IHRoaXMuZW5kZWRBdCA/IHRoaXMuZW5kZWRBdC50b09iamVjdCgpIDogdW5kZWZpbmVkLFxuICAgICAgcG9kVHRsOiB0aGlzLnBvZFR0bCA/IHRoaXMucG9kVHRsLnRvT2JqZWN0KCkgOiB1bmRlZmluZWQsXG4gICAgICBjcmVhdGlvblRvRW5kRHVyYXRpb246IHRoaXMuY3JlYXRpb25Ub0VuZER1cmF0aW9uXG4gICAgICAgID8gdGhpcy5jcmVhdGlvblRvRW5kRHVyYXRpb24udG9PYmplY3QoKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHByb2Nlc3NpbmdUb0VuZER1cmF0aW9uOiB0aGlzLnByb2Nlc3NpbmdUb0VuZER1cmF0aW9uXG4gICAgICAgID8gdGhpcy5wcm9jZXNzaW5nVG9FbmREdXJhdGlvbi50b09iamVjdCgpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgcmVjZWl2ZWRUb0VuZER1cmF0aW9uOiB0aGlzLnJlY2VpdmVkVG9FbmREdXJhdGlvblxuICAgICAgICA/IHRoaXMucmVjZWl2ZWRUb0VuZER1cmF0aW9uLnRvT2JqZWN0KClcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBwYXlsb2FkSWQ6IHRoaXMucGF5bG9hZElkLFxuICAgICAgY3JlYXRlZEJ5OiB0aGlzLmNyZWF0ZWRCeSxcbiAgICAgIG91dHB1dDogdGhpcy5vdXRwdXQgPyB0aGlzLm91dHB1dC50b09iamVjdCgpIDogdW5kZWZpbmVkLFxuICAgICAgcG9kSG9zdG5hbWU6IHRoaXMucG9kSG9zdG5hbWVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBUYXNrRGV0YWlsZWQuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQsXG4gICAgICBvd25lclBvZElkOiB0aGlzLm93bmVyUG9kSWQsXG4gICAgICBpbml0aWFsVGFza0lkOiB0aGlzLmluaXRpYWxUYXNrSWQsXG4gICAgICBwYXJlbnRUYXNrSWRzOiAodGhpcy5wYXJlbnRUYXNrSWRzIHx8IFtdKS5zbGljZSgpLFxuICAgICAgZGF0YURlcGVuZGVuY2llczogKHRoaXMuZGF0YURlcGVuZGVuY2llcyB8fCBbXSkuc2xpY2UoKSxcbiAgICAgIGV4cGVjdGVkT3V0cHV0SWRzOiAodGhpcy5leHBlY3RlZE91dHB1dElkcyB8fCBbXSkuc2xpY2UoKSxcbiAgICAgIHJldHJ5T2ZJZHM6ICh0aGlzLnJldHJ5T2ZJZHMgfHwgW10pLnNsaWNlKCksXG4gICAgICBzdGF0dXM6XG4gICAgICAgIGFybW9uaWtBcGlHcnBjVjFUYXNrX3N0YXR1czAwMS5UYXNrU3RhdHVzW1xuICAgICAgICAgIHRoaXMuc3RhdHVzID09PSBudWxsIHx8IHRoaXMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAwIDogdGhpcy5zdGF0dXNcbiAgICAgICAgXSxcbiAgICAgIHN0YXR1c01lc3NhZ2U6IHRoaXMuc3RhdHVzTWVzc2FnZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9ucyA/IHRoaXMub3B0aW9ucy50b1Byb3RvYnVmSlNPTihvcHRpb25zKSA6IG51bGwsXG4gICAgICBjcmVhdGVkQXQ6IHRoaXMuY3JlYXRlZEF0ID8gdGhpcy5jcmVhdGVkQXQudG9Qcm90b2J1ZkpTT04ob3B0aW9ucykgOiBudWxsLFxuICAgICAgc3VibWl0dGVkQXQ6IHRoaXMuc3VibWl0dGVkQXRcbiAgICAgICAgPyB0aGlzLnN1Ym1pdHRlZEF0LnRvUHJvdG9idWZKU09OKG9wdGlvbnMpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHJlY2VpdmVkQXQ6IHRoaXMucmVjZWl2ZWRBdFxuICAgICAgICA/IHRoaXMucmVjZWl2ZWRBdC50b1Byb3RvYnVmSlNPTihvcHRpb25zKVxuICAgICAgICA6IG51bGwsXG4gICAgICBhY3F1aXJlZEF0OiB0aGlzLmFjcXVpcmVkQXRcbiAgICAgICAgPyB0aGlzLmFjcXVpcmVkQXQudG9Qcm90b2J1ZkpTT04ob3B0aW9ucylcbiAgICAgICAgOiBudWxsLFxuICAgICAgZmV0Y2hlZEF0OiB0aGlzLmZldGNoZWRBdCA/IHRoaXMuZmV0Y2hlZEF0LnRvUHJvdG9idWZKU09OKG9wdGlvbnMpIDogbnVsbCxcbiAgICAgIHN0YXJ0ZWRBdDogdGhpcy5zdGFydGVkQXQgPyB0aGlzLnN0YXJ0ZWRBdC50b1Byb3RvYnVmSlNPTihvcHRpb25zKSA6IG51bGwsXG4gICAgICBwcm9jZXNzZWRBdDogdGhpcy5wcm9jZXNzZWRBdFxuICAgICAgICA/IHRoaXMucHJvY2Vzc2VkQXQudG9Qcm90b2J1ZkpTT04ob3B0aW9ucylcbiAgICAgICAgOiBudWxsLFxuICAgICAgZW5kZWRBdDogdGhpcy5lbmRlZEF0ID8gdGhpcy5lbmRlZEF0LnRvUHJvdG9idWZKU09OKG9wdGlvbnMpIDogbnVsbCxcbiAgICAgIHBvZFR0bDogdGhpcy5wb2RUdGwgPyB0aGlzLnBvZFR0bC50b1Byb3RvYnVmSlNPTihvcHRpb25zKSA6IG51bGwsXG4gICAgICBjcmVhdGlvblRvRW5kRHVyYXRpb246IHRoaXMuY3JlYXRpb25Ub0VuZER1cmF0aW9uXG4gICAgICAgID8gdGhpcy5jcmVhdGlvblRvRW5kRHVyYXRpb24udG9Qcm90b2J1ZkpTT04ob3B0aW9ucylcbiAgICAgICAgOiBudWxsLFxuICAgICAgcHJvY2Vzc2luZ1RvRW5kRHVyYXRpb246IHRoaXMucHJvY2Vzc2luZ1RvRW5kRHVyYXRpb25cbiAgICAgICAgPyB0aGlzLnByb2Nlc3NpbmdUb0VuZER1cmF0aW9uLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHJlY2VpdmVkVG9FbmREdXJhdGlvbjogdGhpcy5yZWNlaXZlZFRvRW5kRHVyYXRpb25cbiAgICAgICAgPyB0aGlzLnJlY2VpdmVkVG9FbmREdXJhdGlvbi50b1Byb3RvYnVmSlNPTihvcHRpb25zKVxuICAgICAgICA6IG51bGwsXG4gICAgICBwYXlsb2FkSWQ6IHRoaXMucGF5bG9hZElkLFxuICAgICAgY3JlYXRlZEJ5OiB0aGlzLmNyZWF0ZWRCeSxcbiAgICAgIG91dHB1dDogdGhpcy5vdXRwdXQgPyB0aGlzLm91dHB1dC50b1Byb3RvYnVmSlNPTihvcHRpb25zKSA6IG51bGwsXG4gICAgICBwb2RIb3N0bmFtZTogdGhpcy5wb2RIb3N0bmFtZVxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgVGFza0RldGFpbGVkIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBUYXNrRGV0YWlsZWRcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gICAgb3duZXJQb2RJZDogc3RyaW5nO1xuICAgIGluaXRpYWxUYXNrSWQ6IHN0cmluZztcbiAgICBwYXJlbnRUYXNrSWRzOiBzdHJpbmdbXTtcbiAgICBkYXRhRGVwZW5kZW5jaWVzOiBzdHJpbmdbXTtcbiAgICBleHBlY3RlZE91dHB1dElkczogc3RyaW5nW107XG4gICAgcmV0cnlPZklkczogc3RyaW5nW107XG4gICAgc3RhdHVzOiBhcm1vbmlrQXBpR3JwY1YxVGFza19zdGF0dXMwMDEuVGFza1N0YXR1cztcbiAgICBzdGF0dXNNZXNzYWdlOiBzdHJpbmc7XG4gICAgb3B0aW9ucz86IGFybW9uaWtBcGlHcnBjVjEwMDUuVGFza09wdGlvbnMuQXNPYmplY3Q7XG4gICAgY3JlYXRlZEF0PzogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLkFzT2JqZWN0O1xuICAgIHN1Ym1pdHRlZEF0PzogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLkFzT2JqZWN0O1xuICAgIHJlY2VpdmVkQXQ/OiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAuQXNPYmplY3Q7XG4gICAgYWNxdWlyZWRBdD86IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcC5Bc09iamVjdDtcbiAgICBmZXRjaGVkQXQ/OiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAuQXNPYmplY3Q7XG4gICAgc3RhcnRlZEF0PzogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLkFzT2JqZWN0O1xuICAgIHByb2Nlc3NlZEF0PzogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLkFzT2JqZWN0O1xuICAgIGVuZGVkQXQ/OiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAuQXNPYmplY3Q7XG4gICAgcG9kVHRsPzogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLkFzT2JqZWN0O1xuICAgIGNyZWF0aW9uVG9FbmREdXJhdGlvbj86IGdvb2dsZVByb3RvYnVmMDAwLkR1cmF0aW9uLkFzT2JqZWN0O1xuICAgIHByb2Nlc3NpbmdUb0VuZER1cmF0aW9uPzogZ29vZ2xlUHJvdG9idWYwMDAuRHVyYXRpb24uQXNPYmplY3Q7XG4gICAgcmVjZWl2ZWRUb0VuZER1cmF0aW9uPzogZ29vZ2xlUHJvdG9idWYwMDAuRHVyYXRpb24uQXNPYmplY3Q7XG4gICAgcGF5bG9hZElkOiBzdHJpbmc7XG4gICAgY3JlYXRlZEJ5OiBzdHJpbmc7XG4gICAgb3V0cHV0PzogVGFza0RldGFpbGVkLk91dHB1dC5Bc09iamVjdDtcbiAgICBwb2RIb3N0bmFtZTogc3RyaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIFRhc2tEZXRhaWxlZFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgICBvd25lclBvZElkOiBzdHJpbmc7XG4gICAgaW5pdGlhbFRhc2tJZDogc3RyaW5nO1xuICAgIHBhcmVudFRhc2tJZHM6IHN0cmluZ1tdO1xuICAgIGRhdGFEZXBlbmRlbmNpZXM6IHN0cmluZ1tdO1xuICAgIGV4cGVjdGVkT3V0cHV0SWRzOiBzdHJpbmdbXTtcbiAgICByZXRyeU9mSWRzOiBzdHJpbmdbXTtcbiAgICBzdGF0dXM6IHN0cmluZztcbiAgICBzdGF0dXNNZXNzYWdlOiBzdHJpbmc7XG4gICAgb3B0aW9uczogYXJtb25pa0FwaUdycGNWMTAwNS5UYXNrT3B0aW9ucy5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgY3JlYXRlZEF0OiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAuQXNQcm90b2J1ZkpTT04gfCBudWxsO1xuICAgIHN1Ym1pdHRlZEF0OiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAuQXNQcm90b2J1ZkpTT04gfCBudWxsO1xuICAgIHJlY2VpdmVkQXQ6IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcC5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgYWNxdWlyZWRBdDogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgICBmZXRjaGVkQXQ6IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcC5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgc3RhcnRlZEF0OiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAuQXNQcm90b2J1ZkpTT04gfCBudWxsO1xuICAgIHByb2Nlc3NlZEF0OiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAuQXNQcm90b2J1ZkpTT04gfCBudWxsO1xuICAgIGVuZGVkQXQ6IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcC5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgcG9kVHRsOiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAuQXNQcm90b2J1ZkpTT04gfCBudWxsO1xuICAgIGNyZWF0aW9uVG9FbmREdXJhdGlvbjogZ29vZ2xlUHJvdG9idWYwMDAuRHVyYXRpb24uQXNQcm90b2J1ZkpTT04gfCBudWxsO1xuICAgIHByb2Nlc3NpbmdUb0VuZER1cmF0aW9uOiBnb29nbGVQcm90b2J1ZjAwMC5EdXJhdGlvbi5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgcmVjZWl2ZWRUb0VuZER1cmF0aW9uOiBnb29nbGVQcm90b2J1ZjAwMC5EdXJhdGlvbi5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgcGF5bG9hZElkOiBzdHJpbmc7XG4gICAgY3JlYXRlZEJ5OiBzdHJpbmc7XG4gICAgb3V0cHV0OiBUYXNrRGV0YWlsZWQuT3V0cHV0LkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgICBwb2RIb3N0bmFtZTogc3RyaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIGFybW9uaWsuYXBpLmdycGMudjEudGFza3MuVGFza0RldGFpbGVkLk91dHB1dFxuICAgKi9cbiAgZXhwb3J0IGNsYXNzIE91dHB1dCBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgICBzdGF0aWMgaWQgPSAnYXJtb25pay5hcGkuZ3JwYy52MS50YXNrcy5UYXNrRGV0YWlsZWQuT3V0cHV0JztcblxuICAgIC8qKlxuICAgICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgT3V0cHV0KCk7XG4gICAgICBPdXRwdXQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGluc3RhbmNlLCBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IE91dHB1dCkge1xuICAgICAgX2luc3RhbmNlLnN1Y2Nlc3MgPSBfaW5zdGFuY2Uuc3VjY2VzcyB8fCBmYWxzZTtcbiAgICAgIF9pbnN0YW5jZS5lcnJvciA9IF9pbnN0YW5jZS5lcnJvciB8fCAnJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgX2luc3RhbmNlOiBPdXRwdXQsXG4gICAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgICApIHtcbiAgICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBfaW5zdGFuY2Uuc3VjY2VzcyA9IF9yZWFkZXIucmVhZEJvb2woKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIF9pbnN0YW5jZS5lcnJvciA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgT3V0cHV0LnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoX2luc3RhbmNlOiBPdXRwdXQsIF93cml0ZXI6IEJpbmFyeVdyaXRlcikge1xuICAgICAgaWYgKF9pbnN0YW5jZS5zdWNjZXNzKSB7XG4gICAgICAgIF93cml0ZXIud3JpdGVCb29sKDEsIF9pbnN0YW5jZS5zdWNjZXNzKTtcbiAgICAgIH1cbiAgICAgIGlmIChfaW5zdGFuY2UuZXJyb3IpIHtcbiAgICAgICAgX3dyaXRlci53cml0ZVN0cmluZygyLCBfaW5zdGFuY2UuZXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfZXJyb3I6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIE91dHB1dCB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8T3V0cHV0LkFzT2JqZWN0Pikge1xuICAgICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgICAgdGhpcy5zdWNjZXNzID0gX3ZhbHVlLnN1Y2Nlc3M7XG4gICAgICB0aGlzLmVycm9yID0gX3ZhbHVlLmVycm9yO1xuICAgICAgT3V0cHV0LnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgICB9XG4gICAgZ2V0IHN1Y2Nlc3MoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5fc3VjY2VzcztcbiAgICB9XG4gICAgc2V0IHN1Y2Nlc3ModmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgIHRoaXMuX3N1Y2Nlc3MgPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IGVycm9yKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5fZXJyb3I7XG4gICAgfVxuICAgIHNldCBlcnJvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgICB0aGlzLl9lcnJvciA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgICBPdXRwdXQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAgICovXG4gICAgdG9PYmplY3QoKTogT3V0cHV0LkFzT2JqZWN0IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IHRoaXMuc3VjY2VzcyxcbiAgICAgICAgZXJyb3I6IHRoaXMuZXJyb3JcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAgICovXG4gICAgdG9KU09OKCkge1xuICAgICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAgICovXG4gICAgdG9Qcm90b2J1ZkpTT04oXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICAgKTogT3V0cHV0LkFzUHJvdG9idWZKU09OIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IHRoaXMuc3VjY2VzcyxcbiAgICAgICAgZXJyb3I6IHRoaXMuZXJyb3JcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGV4cG9ydCBtb2R1bGUgT3V0cHV0IHtcbiAgICAvKipcbiAgICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgT3V0cHV0XG4gICAgICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgICBzdWNjZXNzOiBib29sZWFuO1xuICAgICAgZXJyb3I6IHN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBPdXRwdXRcbiAgICAgKi9cbiAgICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICAgIHN1Y2Nlc3M6IGJvb2xlYW47XG4gICAgICBlcnJvcjogc3RyaW5nO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIGFybW9uaWsuYXBpLmdycGMudjEudGFza3MuVGFza1N1bW1hcnlcbiAqL1xuZXhwb3J0IGNsYXNzIFRhc2tTdW1tYXJ5IGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnYXJtb25pay5hcGkuZ3JwYy52MS50YXNrcy5UYXNrU3VtbWFyeSc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFRhc2tTdW1tYXJ5KCk7XG4gICAgVGFza1N1bW1hcnkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGluc3RhbmNlLCBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKSk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBUYXNrU3VtbWFyeSkge1xuICAgIF9pbnN0YW5jZS5pZCA9IF9pbnN0YW5jZS5pZCB8fCAnJztcbiAgICBfaW5zdGFuY2Uuc2Vzc2lvbklkID0gX2luc3RhbmNlLnNlc3Npb25JZCB8fCAnJztcbiAgICBfaW5zdGFuY2Uub3duZXJQb2RJZCA9IF9pbnN0YW5jZS5vd25lclBvZElkIHx8ICcnO1xuICAgIF9pbnN0YW5jZS5pbml0aWFsVGFza0lkID0gX2luc3RhbmNlLmluaXRpYWxUYXNrSWQgfHwgJyc7XG4gICAgX2luc3RhbmNlLmNvdW50UGFyZW50VGFza0lkcyA9IF9pbnN0YW5jZS5jb3VudFBhcmVudFRhc2tJZHMgfHwgJzAnO1xuICAgIF9pbnN0YW5jZS5jb3VudERhdGFEZXBlbmRlbmNpZXMgPSBfaW5zdGFuY2UuY291bnREYXRhRGVwZW5kZW5jaWVzIHx8ICcwJztcbiAgICBfaW5zdGFuY2UuY291bnRFeHBlY3RlZE91dHB1dElkcyA9IF9pbnN0YW5jZS5jb3VudEV4cGVjdGVkT3V0cHV0SWRzIHx8ICcwJztcbiAgICBfaW5zdGFuY2UuY291bnRSZXRyeU9mSWRzID0gX2luc3RhbmNlLmNvdW50UmV0cnlPZklkcyB8fCAnMCc7XG4gICAgX2luc3RhbmNlLnN0YXR1cyA9IF9pbnN0YW5jZS5zdGF0dXMgfHwgMDtcbiAgICBfaW5zdGFuY2Uuc3RhdHVzTWVzc2FnZSA9IF9pbnN0YW5jZS5zdGF0dXNNZXNzYWdlIHx8ICcnO1xuICAgIF9pbnN0YW5jZS5vcHRpb25zID0gX2luc3RhbmNlLm9wdGlvbnMgfHwgdW5kZWZpbmVkO1xuICAgIF9pbnN0YW5jZS5jcmVhdGVkQXQgPSBfaW5zdGFuY2UuY3JlYXRlZEF0IHx8IHVuZGVmaW5lZDtcbiAgICBfaW5zdGFuY2Uuc3VibWl0dGVkQXQgPSBfaW5zdGFuY2Uuc3VibWl0dGVkQXQgfHwgdW5kZWZpbmVkO1xuICAgIF9pbnN0YW5jZS5yZWNlaXZlZEF0ID0gX2luc3RhbmNlLnJlY2VpdmVkQXQgfHwgdW5kZWZpbmVkO1xuICAgIF9pbnN0YW5jZS5hY3F1aXJlZEF0ID0gX2luc3RhbmNlLmFjcXVpcmVkQXQgfHwgdW5kZWZpbmVkO1xuICAgIF9pbnN0YW5jZS5mZXRjaGVkQXQgPSBfaW5zdGFuY2UuZmV0Y2hlZEF0IHx8IHVuZGVmaW5lZDtcbiAgICBfaW5zdGFuY2Uuc3RhcnRlZEF0ID0gX2luc3RhbmNlLnN0YXJ0ZWRBdCB8fCB1bmRlZmluZWQ7XG4gICAgX2luc3RhbmNlLnByb2Nlc3NlZEF0ID0gX2luc3RhbmNlLnByb2Nlc3NlZEF0IHx8IHVuZGVmaW5lZDtcbiAgICBfaW5zdGFuY2UuZW5kZWRBdCA9IF9pbnN0YW5jZS5lbmRlZEF0IHx8IHVuZGVmaW5lZDtcbiAgICBfaW5zdGFuY2UucG9kVHRsID0gX2luc3RhbmNlLnBvZFR0bCB8fCB1bmRlZmluZWQ7XG4gICAgX2luc3RhbmNlLmNyZWF0aW9uVG9FbmREdXJhdGlvbiA9XG4gICAgICBfaW5zdGFuY2UuY3JlYXRpb25Ub0VuZER1cmF0aW9uIHx8IHVuZGVmaW5lZDtcbiAgICBfaW5zdGFuY2UucHJvY2Vzc2luZ1RvRW5kRHVyYXRpb24gPVxuICAgICAgX2luc3RhbmNlLnByb2Nlc3NpbmdUb0VuZER1cmF0aW9uIHx8IHVuZGVmaW5lZDtcbiAgICBfaW5zdGFuY2UucmVjZWl2ZWRUb0VuZER1cmF0aW9uID1cbiAgICAgIF9pbnN0YW5jZS5yZWNlaXZlZFRvRW5kRHVyYXRpb24gfHwgdW5kZWZpbmVkO1xuICAgIF9pbnN0YW5jZS5wYXlsb2FkSWQgPSBfaW5zdGFuY2UucGF5bG9hZElkIHx8ICcnO1xuICAgIF9pbnN0YW5jZS5jcmVhdGVkQnkgPSBfaW5zdGFuY2UuY3JlYXRlZEJ5IHx8ICcnO1xuICAgIF9pbnN0YW5jZS5lcnJvciA9IF9pbnN0YW5jZS5lcnJvciB8fCAnJztcbiAgICBfaW5zdGFuY2UucG9kSG9zdG5hbWUgPSBfaW5zdGFuY2UucG9kSG9zdG5hbWUgfHwgJyc7XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgX2luc3RhbmNlOiBUYXNrU3VtbWFyeSxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBfaW5zdGFuY2UuaWQgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIF9pbnN0YW5jZS5zZXNzaW9uSWQgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBfaW5zdGFuY2Uub3duZXJQb2RJZCA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIF9pbnN0YW5jZS5pbml0aWFsVGFza0lkID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgX2luc3RhbmNlLmNvdW50UGFyZW50VGFza0lkcyA9IF9yZWFkZXIucmVhZEludDY0U3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgX2luc3RhbmNlLmNvdW50RGF0YURlcGVuZGVuY2llcyA9IF9yZWFkZXIucmVhZEludDY0U3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgX2luc3RhbmNlLmNvdW50RXhwZWN0ZWRPdXRwdXRJZHMgPSBfcmVhZGVyLnJlYWRJbnQ2NFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgIF9pbnN0YW5jZS5jb3VudFJldHJ5T2ZJZHMgPSBfcmVhZGVyLnJlYWRJbnQ2NFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgX2luc3RhbmNlLnN0YXR1cyA9IF9yZWFkZXIucmVhZEVudW0oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIF9pbnN0YW5jZS5zdGF0dXNNZXNzYWdlID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBfaW5zdGFuY2Uub3B0aW9ucyA9IG5ldyBhcm1vbmlrQXBpR3JwY1YxMDA1LlRhc2tPcHRpb25zKCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5vcHRpb25zLFxuICAgICAgICAgICAgYXJtb25pa0FwaUdycGNWMTAwNS5UYXNrT3B0aW9ucy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgX2luc3RhbmNlLmNyZWF0ZWRBdCA9IG5ldyBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgX2luc3RhbmNlLmNyZWF0ZWRBdCxcbiAgICAgICAgICAgIGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIF9pbnN0YW5jZS5zdWJtaXR0ZWRBdCA9IG5ldyBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgX2luc3RhbmNlLnN1Ym1pdHRlZEF0LFxuICAgICAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgX2luc3RhbmNlLnJlY2VpdmVkQXQgPSBuZXcgZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wKCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5yZWNlaXZlZEF0LFxuICAgICAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgX2luc3RhbmNlLmFjcXVpcmVkQXQgPSBuZXcgZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wKCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5hY3F1aXJlZEF0LFxuICAgICAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgX2luc3RhbmNlLmZldGNoZWRBdCA9IG5ldyBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgX2luc3RhbmNlLmZldGNoZWRBdCxcbiAgICAgICAgICAgIGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgX2luc3RhbmNlLnN0YXJ0ZWRBdCA9IG5ldyBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgX2luc3RhbmNlLnN0YXJ0ZWRBdCxcbiAgICAgICAgICAgIGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgIF9pbnN0YW5jZS5wcm9jZXNzZWRBdCA9IG5ldyBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgX2luc3RhbmNlLnByb2Nlc3NlZEF0LFxuICAgICAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBfaW5zdGFuY2UuZW5kZWRBdCA9IG5ldyBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgX2luc3RhbmNlLmVuZGVkQXQsXG4gICAgICAgICAgICBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICBfaW5zdGFuY2UucG9kVHRsID0gbmV3IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcCgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2UucG9kVHRsLFxuICAgICAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgX2luc3RhbmNlLmNyZWF0aW9uVG9FbmREdXJhdGlvbiA9IG5ldyBnb29nbGVQcm90b2J1ZjAwMC5EdXJhdGlvbigpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2UuY3JlYXRpb25Ub0VuZER1cmF0aW9uLFxuICAgICAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDAuRHVyYXRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICBfaW5zdGFuY2UucHJvY2Vzc2luZ1RvRW5kRHVyYXRpb24gPSBuZXcgZ29vZ2xlUHJvdG9idWYwMDAuRHVyYXRpb24oKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgX2luc3RhbmNlLnByb2Nlc3NpbmdUb0VuZER1cmF0aW9uLFxuICAgICAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDAuRHVyYXRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICBfaW5zdGFuY2UucmVjZWl2ZWRUb0VuZER1cmF0aW9uID0gbmV3IGdvb2dsZVByb3RvYnVmMDAwLkR1cmF0aW9uKCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5yZWNlaXZlZFRvRW5kRHVyYXRpb24sXG4gICAgICAgICAgICBnb29nbGVQcm90b2J1ZjAwMC5EdXJhdGlvbi5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgIF9pbnN0YW5jZS5wYXlsb2FkSWQgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICBfaW5zdGFuY2UuY3JlYXRlZEJ5ID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICBfaW5zdGFuY2UuZXJyb3IgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICBfaW5zdGFuY2UucG9kSG9zdG5hbWUgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIFRhc2tTdW1tYXJ5LnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogVGFza1N1bW1hcnksXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UuaWQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMSwgX2luc3RhbmNlLmlkKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5zZXNzaW9uSWQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMiwgX2luc3RhbmNlLnNlc3Npb25JZCk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2Uub3duZXJQb2RJZCkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygxMCwgX2luc3RhbmNlLm93bmVyUG9kSWQpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmluaXRpYWxUYXNrSWQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMjIsIF9pbnN0YW5jZS5pbml0aWFsVGFza0lkKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5jb3VudFBhcmVudFRhc2tJZHMpIHtcbiAgICAgIF93cml0ZXIud3JpdGVJbnQ2NFN0cmluZygyMSwgX2luc3RhbmNlLmNvdW50UGFyZW50VGFza0lkcyk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UuY291bnREYXRhRGVwZW5kZW5jaWVzKSB7XG4gICAgICBfd3JpdGVyLndyaXRlSW50NjRTdHJpbmcoMTEsIF9pbnN0YW5jZS5jb3VudERhdGFEZXBlbmRlbmNpZXMpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmNvdW50RXhwZWN0ZWRPdXRwdXRJZHMpIHtcbiAgICAgIF93cml0ZXIud3JpdGVJbnQ2NFN0cmluZygxMywgX2luc3RhbmNlLmNvdW50RXhwZWN0ZWRPdXRwdXRJZHMpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmNvdW50UmV0cnlPZklkcykge1xuICAgICAgX3dyaXRlci53cml0ZUludDY0U3RyaW5nKDE0LCBfaW5zdGFuY2UuY291bnRSZXRyeU9mSWRzKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5zdGF0dXMpIHtcbiAgICAgIF93cml0ZXIud3JpdGVFbnVtKDQsIF9pbnN0YW5jZS5zdGF0dXMpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnN0YXR1c01lc3NhZ2UpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoOSwgX2luc3RhbmNlLnN0YXR1c01lc3NhZ2UpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLm9wdGlvbnMpIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICAzLFxuICAgICAgICBfaW5zdGFuY2Uub3B0aW9ucyBhcyBhbnksXG4gICAgICAgIGFybW9uaWtBcGlHcnBjVjEwMDUuVGFza09wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UuY3JlYXRlZEF0KSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgNSxcbiAgICAgICAgX2luc3RhbmNlLmNyZWF0ZWRBdCBhcyBhbnksXG4gICAgICAgIGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5zdWJtaXR0ZWRBdCkge1xuICAgICAgX3dyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAgIDEyLFxuICAgICAgICBfaW5zdGFuY2Uuc3VibWl0dGVkQXQgYXMgYW55LFxuICAgICAgICBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UucmVjZWl2ZWRBdCkge1xuICAgICAgX3dyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAgIDE4LFxuICAgICAgICBfaW5zdGFuY2UucmVjZWl2ZWRBdCBhcyBhbnksXG4gICAgICAgIGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5hY3F1aXJlZEF0KSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMTksXG4gICAgICAgIF9pbnN0YW5jZS5hY3F1aXJlZEF0IGFzIGFueSxcbiAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmZldGNoZWRBdCkge1xuICAgICAgX3dyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAgIDI1LFxuICAgICAgICBfaW5zdGFuY2UuZmV0Y2hlZEF0IGFzIGFueSxcbiAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnN0YXJ0ZWRBdCkge1xuICAgICAgX3dyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAgIDYsXG4gICAgICAgIF9pbnN0YW5jZS5zdGFydGVkQXQgYXMgYW55LFxuICAgICAgICBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UucHJvY2Vzc2VkQXQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICAyMyxcbiAgICAgICAgX2luc3RhbmNlLnByb2Nlc3NlZEF0IGFzIGFueSxcbiAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmVuZGVkQXQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICA3LFxuICAgICAgICBfaW5zdGFuY2UuZW5kZWRBdCBhcyBhbnksXG4gICAgICAgIGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5wb2RUdGwpIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICAyMCxcbiAgICAgICAgX2luc3RhbmNlLnBvZFR0bCBhcyBhbnksXG4gICAgICAgIGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5jcmVhdGlvblRvRW5kRHVyYXRpb24pIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICAxNSxcbiAgICAgICAgX2luc3RhbmNlLmNyZWF0aW9uVG9FbmREdXJhdGlvbiBhcyBhbnksXG4gICAgICAgIGdvb2dsZVByb3RvYnVmMDAwLkR1cmF0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnByb2Nlc3NpbmdUb0VuZER1cmF0aW9uKSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMTYsXG4gICAgICAgIF9pbnN0YW5jZS5wcm9jZXNzaW5nVG9FbmREdXJhdGlvbiBhcyBhbnksXG4gICAgICAgIGdvb2dsZVByb3RvYnVmMDAwLkR1cmF0aW9uLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnJlY2VpdmVkVG9FbmREdXJhdGlvbikge1xuICAgICAgX3dyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAgIDI0LFxuICAgICAgICBfaW5zdGFuY2UucmVjZWl2ZWRUb0VuZER1cmF0aW9uIGFzIGFueSxcbiAgICAgICAgZ29vZ2xlUHJvdG9idWYwMDAuRHVyYXRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UucGF5bG9hZElkKSB7XG4gICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDI2LCBfaW5zdGFuY2UucGF5bG9hZElkKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5jcmVhdGVkQnkpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMjcsIF9pbnN0YW5jZS5jcmVhdGVkQnkpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLmVycm9yKSB7XG4gICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDgsIF9pbnN0YW5jZS5lcnJvcik7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UucG9kSG9zdG5hbWUpIHtcbiAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMTcsIF9pbnN0YW5jZS5wb2RIb3N0bmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX293bmVyUG9kSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfaW5pdGlhbFRhc2tJZDogc3RyaW5nO1xuICBwcml2YXRlIF9jb3VudFBhcmVudFRhc2tJZHM6IHN0cmluZztcbiAgcHJpdmF0ZSBfY291bnREYXRhRGVwZW5kZW5jaWVzOiBzdHJpbmc7XG4gIHByaXZhdGUgX2NvdW50RXhwZWN0ZWRPdXRwdXRJZHM6IHN0cmluZztcbiAgcHJpdmF0ZSBfY291bnRSZXRyeU9mSWRzOiBzdHJpbmc7XG4gIHByaXZhdGUgX3N0YXR1czogYXJtb25pa0FwaUdycGNWMVRhc2tfc3RhdHVzMDAxLlRhc2tTdGF0dXM7XG4gIHByaXZhdGUgX3N0YXR1c01lc3NhZ2U6IHN0cmluZztcbiAgcHJpdmF0ZSBfb3B0aW9ucz86IGFybW9uaWtBcGlHcnBjVjEwMDUuVGFza09wdGlvbnM7XG4gIHByaXZhdGUgX2NyZWF0ZWRBdD86IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcDtcbiAgcHJpdmF0ZSBfc3VibWl0dGVkQXQ/OiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXA7XG4gIHByaXZhdGUgX3JlY2VpdmVkQXQ/OiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXA7XG4gIHByaXZhdGUgX2FjcXVpcmVkQXQ/OiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXA7XG4gIHByaXZhdGUgX2ZldGNoZWRBdD86IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcDtcbiAgcHJpdmF0ZSBfc3RhcnRlZEF0PzogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wO1xuICBwcml2YXRlIF9wcm9jZXNzZWRBdD86IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcDtcbiAgcHJpdmF0ZSBfZW5kZWRBdD86IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcDtcbiAgcHJpdmF0ZSBfcG9kVHRsPzogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wO1xuICBwcml2YXRlIF9jcmVhdGlvblRvRW5kRHVyYXRpb24/OiBnb29nbGVQcm90b2J1ZjAwMC5EdXJhdGlvbjtcbiAgcHJpdmF0ZSBfcHJvY2Vzc2luZ1RvRW5kRHVyYXRpb24/OiBnb29nbGVQcm90b2J1ZjAwMC5EdXJhdGlvbjtcbiAgcHJpdmF0ZSBfcmVjZWl2ZWRUb0VuZER1cmF0aW9uPzogZ29vZ2xlUHJvdG9idWYwMDAuRHVyYXRpb247XG4gIHByaXZhdGUgX3BheWxvYWRJZDogc3RyaW5nO1xuICBwcml2YXRlIF9jcmVhdGVkQnk6IHN0cmluZztcbiAgcHJpdmF0ZSBfZXJyb3I6IHN0cmluZztcbiAgcHJpdmF0ZSBfcG9kSG9zdG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIFRhc2tTdW1tYXJ5IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPFRhc2tTdW1tYXJ5LkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLmlkID0gX3ZhbHVlLmlkO1xuICAgIHRoaXMuc2Vzc2lvbklkID0gX3ZhbHVlLnNlc3Npb25JZDtcbiAgICB0aGlzLm93bmVyUG9kSWQgPSBfdmFsdWUub3duZXJQb2RJZDtcbiAgICB0aGlzLmluaXRpYWxUYXNrSWQgPSBfdmFsdWUuaW5pdGlhbFRhc2tJZDtcbiAgICB0aGlzLmNvdW50UGFyZW50VGFza0lkcyA9IF92YWx1ZS5jb3VudFBhcmVudFRhc2tJZHM7XG4gICAgdGhpcy5jb3VudERhdGFEZXBlbmRlbmNpZXMgPSBfdmFsdWUuY291bnREYXRhRGVwZW5kZW5jaWVzO1xuICAgIHRoaXMuY291bnRFeHBlY3RlZE91dHB1dElkcyA9IF92YWx1ZS5jb3VudEV4cGVjdGVkT3V0cHV0SWRzO1xuICAgIHRoaXMuY291bnRSZXRyeU9mSWRzID0gX3ZhbHVlLmNvdW50UmV0cnlPZklkcztcbiAgICB0aGlzLnN0YXR1cyA9IF92YWx1ZS5zdGF0dXM7XG4gICAgdGhpcy5zdGF0dXNNZXNzYWdlID0gX3ZhbHVlLnN0YXR1c01lc3NhZ2U7XG4gICAgdGhpcy5vcHRpb25zID0gX3ZhbHVlLm9wdGlvbnNcbiAgICAgID8gbmV3IGFybW9uaWtBcGlHcnBjVjEwMDUuVGFza09wdGlvbnMoX3ZhbHVlLm9wdGlvbnMpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IF92YWx1ZS5jcmVhdGVkQXRcbiAgICAgID8gbmV3IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcChfdmFsdWUuY3JlYXRlZEF0KVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5zdWJtaXR0ZWRBdCA9IF92YWx1ZS5zdWJtaXR0ZWRBdFxuICAgICAgPyBuZXcgZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wKF92YWx1ZS5zdWJtaXR0ZWRBdClcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMucmVjZWl2ZWRBdCA9IF92YWx1ZS5yZWNlaXZlZEF0XG4gICAgICA/IG5ldyBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAoX3ZhbHVlLnJlY2VpdmVkQXQpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFjcXVpcmVkQXQgPSBfdmFsdWUuYWNxdWlyZWRBdFxuICAgICAgPyBuZXcgZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wKF92YWx1ZS5hY3F1aXJlZEF0KVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5mZXRjaGVkQXQgPSBfdmFsdWUuZmV0Y2hlZEF0XG4gICAgICA/IG5ldyBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAoX3ZhbHVlLmZldGNoZWRBdClcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuc3RhcnRlZEF0ID0gX3ZhbHVlLnN0YXJ0ZWRBdFxuICAgICAgPyBuZXcgZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wKF92YWx1ZS5zdGFydGVkQXQpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLnByb2Nlc3NlZEF0ID0gX3ZhbHVlLnByb2Nlc3NlZEF0XG4gICAgICA/IG5ldyBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAoX3ZhbHVlLnByb2Nlc3NlZEF0KVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5lbmRlZEF0ID0gX3ZhbHVlLmVuZGVkQXRcbiAgICAgID8gbmV3IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcChfdmFsdWUuZW5kZWRBdClcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMucG9kVHRsID0gX3ZhbHVlLnBvZFR0bFxuICAgICAgPyBuZXcgZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wKF92YWx1ZS5wb2RUdGwpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNyZWF0aW9uVG9FbmREdXJhdGlvbiA9IF92YWx1ZS5jcmVhdGlvblRvRW5kRHVyYXRpb25cbiAgICAgID8gbmV3IGdvb2dsZVByb3RvYnVmMDAwLkR1cmF0aW9uKF92YWx1ZS5jcmVhdGlvblRvRW5kRHVyYXRpb24pXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLnByb2Nlc3NpbmdUb0VuZER1cmF0aW9uID0gX3ZhbHVlLnByb2Nlc3NpbmdUb0VuZER1cmF0aW9uXG4gICAgICA/IG5ldyBnb29nbGVQcm90b2J1ZjAwMC5EdXJhdGlvbihfdmFsdWUucHJvY2Vzc2luZ1RvRW5kRHVyYXRpb24pXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlY2VpdmVkVG9FbmREdXJhdGlvbiA9IF92YWx1ZS5yZWNlaXZlZFRvRW5kRHVyYXRpb25cbiAgICAgID8gbmV3IGdvb2dsZVByb3RvYnVmMDAwLkR1cmF0aW9uKF92YWx1ZS5yZWNlaXZlZFRvRW5kRHVyYXRpb24pXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBheWxvYWRJZCA9IF92YWx1ZS5wYXlsb2FkSWQ7XG4gICAgdGhpcy5jcmVhdGVkQnkgPSBfdmFsdWUuY3JlYXRlZEJ5O1xuICAgIHRoaXMuZXJyb3IgPSBfdmFsdWUuZXJyb3I7XG4gICAgdGhpcy5wb2RIb3N0bmFtZSA9IF92YWx1ZS5wb2RIb3N0bmFtZTtcbiAgICBUYXNrU3VtbWFyeS5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2lkO1xuICB9XG4gIHNldCBpZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5faWQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25JZDtcbiAgfVxuICBzZXQgc2Vzc2lvbklkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgb3duZXJQb2RJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9vd25lclBvZElkO1xuICB9XG4gIHNldCBvd25lclBvZElkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9vd25lclBvZElkID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGluaXRpYWxUYXNrSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faW5pdGlhbFRhc2tJZDtcbiAgfVxuICBzZXQgaW5pdGlhbFRhc2tJZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5faW5pdGlhbFRhc2tJZCA9IHZhbHVlO1xuICB9XG4gIGdldCBjb3VudFBhcmVudFRhc2tJZHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY291bnRQYXJlbnRUYXNrSWRzO1xuICB9XG4gIHNldCBjb3VudFBhcmVudFRhc2tJZHModmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2NvdW50UGFyZW50VGFza0lkcyA9IHZhbHVlO1xuICB9XG4gIGdldCBjb3VudERhdGFEZXBlbmRlbmNpZXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY291bnREYXRhRGVwZW5kZW5jaWVzO1xuICB9XG4gIHNldCBjb3VudERhdGFEZXBlbmRlbmNpZXModmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2NvdW50RGF0YURlcGVuZGVuY2llcyA9IHZhbHVlO1xuICB9XG4gIGdldCBjb3VudEV4cGVjdGVkT3V0cHV0SWRzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvdW50RXhwZWN0ZWRPdXRwdXRJZHM7XG4gIH1cbiAgc2V0IGNvdW50RXhwZWN0ZWRPdXRwdXRJZHModmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2NvdW50RXhwZWN0ZWRPdXRwdXRJZHMgPSB2YWx1ZTtcbiAgfVxuICBnZXQgY291bnRSZXRyeU9mSWRzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvdW50UmV0cnlPZklkcztcbiAgfVxuICBzZXQgY291bnRSZXRyeU9mSWRzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jb3VudFJldHJ5T2ZJZHMgPSB2YWx1ZTtcbiAgfVxuICBnZXQgc3RhdHVzKCk6IGFybW9uaWtBcGlHcnBjVjFUYXNrX3N0YXR1czAwMS5UYXNrU3RhdHVzIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdHVzO1xuICB9XG4gIHNldCBzdGF0dXModmFsdWU6IGFybW9uaWtBcGlHcnBjVjFUYXNrX3N0YXR1czAwMS5UYXNrU3RhdHVzKSB7XG4gICAgdGhpcy5fc3RhdHVzID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHN0YXR1c01lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdHVzTWVzc2FnZTtcbiAgfVxuICBzZXQgc3RhdHVzTWVzc2FnZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fc3RhdHVzTWVzc2FnZSA9IHZhbHVlO1xuICB9XG4gIGdldCBvcHRpb25zKCk6IGFybW9uaWtBcGlHcnBjVjEwMDUuVGFza09wdGlvbnMgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICB9XG4gIHNldCBvcHRpb25zKHZhbHVlOiBhcm1vbmlrQXBpR3JwY1YxMDA1LlRhc2tPcHRpb25zIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IHZhbHVlO1xuICB9XG4gIGdldCBjcmVhdGVkQXQoKTogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlZEF0O1xuICB9XG4gIHNldCBjcmVhdGVkQXQodmFsdWU6IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2NyZWF0ZWRBdCA9IHZhbHVlO1xuICB9XG4gIGdldCBzdWJtaXR0ZWRBdCgpOiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9zdWJtaXR0ZWRBdDtcbiAgfVxuICBzZXQgc3VibWl0dGVkQXQodmFsdWU6IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3N1Ym1pdHRlZEF0ID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHJlY2VpdmVkQXQoKTogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcmVjZWl2ZWRBdDtcbiAgfVxuICBzZXQgcmVjZWl2ZWRBdCh2YWx1ZTogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcmVjZWl2ZWRBdCA9IHZhbHVlO1xuICB9XG4gIGdldCBhY3F1aXJlZEF0KCk6IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2FjcXVpcmVkQXQ7XG4gIH1cbiAgc2V0IGFjcXVpcmVkQXQodmFsdWU6IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2FjcXVpcmVkQXQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgZmV0Y2hlZEF0KCk6IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZldGNoZWRBdDtcbiAgfVxuICBzZXQgZmV0Y2hlZEF0KHZhbHVlOiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9mZXRjaGVkQXQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgc3RhcnRlZEF0KCk6IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0ZWRBdDtcbiAgfVxuICBzZXQgc3RhcnRlZEF0KHZhbHVlOiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9zdGFydGVkQXQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgcHJvY2Vzc2VkQXQoKTogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc2VkQXQ7XG4gIH1cbiAgc2V0IHByb2Nlc3NlZEF0KHZhbHVlOiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9wcm9jZXNzZWRBdCA9IHZhbHVlO1xuICB9XG4gIGdldCBlbmRlZEF0KCk6IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2VuZGVkQXQ7XG4gIH1cbiAgc2V0IGVuZGVkQXQodmFsdWU6IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2VuZGVkQXQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgcG9kVHRsKCk6IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3BvZFR0bDtcbiAgfVxuICBzZXQgcG9kVHRsKHZhbHVlOiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9wb2RUdGwgPSB2YWx1ZTtcbiAgfVxuICBnZXQgY3JlYXRpb25Ub0VuZER1cmF0aW9uKCk6IGdvb2dsZVByb3RvYnVmMDAwLkR1cmF0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRpb25Ub0VuZER1cmF0aW9uO1xuICB9XG4gIHNldCBjcmVhdGlvblRvRW5kRHVyYXRpb24odmFsdWU6IGdvb2dsZVByb3RvYnVmMDAwLkR1cmF0aW9uIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fY3JlYXRpb25Ub0VuZER1cmF0aW9uID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHByb2Nlc3NpbmdUb0VuZER1cmF0aW9uKCk6IGdvb2dsZVByb3RvYnVmMDAwLkR1cmF0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc2luZ1RvRW5kRHVyYXRpb247XG4gIH1cbiAgc2V0IHByb2Nlc3NpbmdUb0VuZER1cmF0aW9uKHZhbHVlOiBnb29nbGVQcm90b2J1ZjAwMC5EdXJhdGlvbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3Byb2Nlc3NpbmdUb0VuZER1cmF0aW9uID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHJlY2VpdmVkVG9FbmREdXJhdGlvbigpOiBnb29nbGVQcm90b2J1ZjAwMC5EdXJhdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3JlY2VpdmVkVG9FbmREdXJhdGlvbjtcbiAgfVxuICBzZXQgcmVjZWl2ZWRUb0VuZER1cmF0aW9uKHZhbHVlOiBnb29nbGVQcm90b2J1ZjAwMC5EdXJhdGlvbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3JlY2VpdmVkVG9FbmREdXJhdGlvbiA9IHZhbHVlO1xuICB9XG4gIGdldCBwYXlsb2FkSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcGF5bG9hZElkO1xuICB9XG4gIHNldCBwYXlsb2FkSWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3BheWxvYWRJZCA9IHZhbHVlO1xuICB9XG4gIGdldCBjcmVhdGVkQnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlZEJ5O1xuICB9XG4gIHNldCBjcmVhdGVkQnkodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2NyZWF0ZWRCeSA9IHZhbHVlO1xuICB9XG4gIGdldCBlcnJvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lcnJvcjtcbiAgfVxuICBzZXQgZXJyb3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2Vycm9yID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHBvZEhvc3RuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BvZEhvc3RuYW1lO1xuICB9XG4gIHNldCBwb2RIb3N0bmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcG9kSG9zdG5hbWUgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBUYXNrU3VtbWFyeS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBUYXNrU3VtbWFyeS5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCxcbiAgICAgIG93bmVyUG9kSWQ6IHRoaXMub3duZXJQb2RJZCxcbiAgICAgIGluaXRpYWxUYXNrSWQ6IHRoaXMuaW5pdGlhbFRhc2tJZCxcbiAgICAgIGNvdW50UGFyZW50VGFza0lkczogdGhpcy5jb3VudFBhcmVudFRhc2tJZHMsXG4gICAgICBjb3VudERhdGFEZXBlbmRlbmNpZXM6IHRoaXMuY291bnREYXRhRGVwZW5kZW5jaWVzLFxuICAgICAgY291bnRFeHBlY3RlZE91dHB1dElkczogdGhpcy5jb3VudEV4cGVjdGVkT3V0cHV0SWRzLFxuICAgICAgY291bnRSZXRyeU9mSWRzOiB0aGlzLmNvdW50UmV0cnlPZklkcyxcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgICBzdGF0dXNNZXNzYWdlOiB0aGlzLnN0YXR1c01lc3NhZ2UsXG4gICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMgPyB0aGlzLm9wdGlvbnMudG9PYmplY3QoKSA6IHVuZGVmaW5lZCxcbiAgICAgIGNyZWF0ZWRBdDogdGhpcy5jcmVhdGVkQXQgPyB0aGlzLmNyZWF0ZWRBdC50b09iamVjdCgpIDogdW5kZWZpbmVkLFxuICAgICAgc3VibWl0dGVkQXQ6IHRoaXMuc3VibWl0dGVkQXQgPyB0aGlzLnN1Ym1pdHRlZEF0LnRvT2JqZWN0KCkgOiB1bmRlZmluZWQsXG4gICAgICByZWNlaXZlZEF0OiB0aGlzLnJlY2VpdmVkQXQgPyB0aGlzLnJlY2VpdmVkQXQudG9PYmplY3QoKSA6IHVuZGVmaW5lZCxcbiAgICAgIGFjcXVpcmVkQXQ6IHRoaXMuYWNxdWlyZWRBdCA/IHRoaXMuYWNxdWlyZWRBdC50b09iamVjdCgpIDogdW5kZWZpbmVkLFxuICAgICAgZmV0Y2hlZEF0OiB0aGlzLmZldGNoZWRBdCA/IHRoaXMuZmV0Y2hlZEF0LnRvT2JqZWN0KCkgOiB1bmRlZmluZWQsXG4gICAgICBzdGFydGVkQXQ6IHRoaXMuc3RhcnRlZEF0ID8gdGhpcy5zdGFydGVkQXQudG9PYmplY3QoKSA6IHVuZGVmaW5lZCxcbiAgICAgIHByb2Nlc3NlZEF0OiB0aGlzLnByb2Nlc3NlZEF0ID8gdGhpcy5wcm9jZXNzZWRBdC50b09iamVjdCgpIDogdW5kZWZpbmVkLFxuICAgICAgZW5kZWRBdDogdGhpcy5lbmRlZEF0ID8gdGhpcy5lbmRlZEF0LnRvT2JqZWN0KCkgOiB1bmRlZmluZWQsXG4gICAgICBwb2RUdGw6IHRoaXMucG9kVHRsID8gdGhpcy5wb2RUdGwudG9PYmplY3QoKSA6IHVuZGVmaW5lZCxcbiAgICAgIGNyZWF0aW9uVG9FbmREdXJhdGlvbjogdGhpcy5jcmVhdGlvblRvRW5kRHVyYXRpb25cbiAgICAgICAgPyB0aGlzLmNyZWF0aW9uVG9FbmREdXJhdGlvbi50b09iamVjdCgpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgcHJvY2Vzc2luZ1RvRW5kRHVyYXRpb246IHRoaXMucHJvY2Vzc2luZ1RvRW5kRHVyYXRpb25cbiAgICAgICAgPyB0aGlzLnByb2Nlc3NpbmdUb0VuZER1cmF0aW9uLnRvT2JqZWN0KClcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICByZWNlaXZlZFRvRW5kRHVyYXRpb246IHRoaXMucmVjZWl2ZWRUb0VuZER1cmF0aW9uXG4gICAgICAgID8gdGhpcy5yZWNlaXZlZFRvRW5kRHVyYXRpb24udG9PYmplY3QoKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHBheWxvYWRJZDogdGhpcy5wYXlsb2FkSWQsXG4gICAgICBjcmVhdGVkQnk6IHRoaXMuY3JlYXRlZEJ5LFxuICAgICAgZXJyb3I6IHRoaXMuZXJyb3IsXG4gICAgICBwb2RIb3N0bmFtZTogdGhpcy5wb2RIb3N0bmFtZVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IFRhc2tTdW1tYXJ5LkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLFxuICAgICAgb3duZXJQb2RJZDogdGhpcy5vd25lclBvZElkLFxuICAgICAgaW5pdGlhbFRhc2tJZDogdGhpcy5pbml0aWFsVGFza0lkLFxuICAgICAgY291bnRQYXJlbnRUYXNrSWRzOiB0aGlzLmNvdW50UGFyZW50VGFza0lkcyxcbiAgICAgIGNvdW50RGF0YURlcGVuZGVuY2llczogdGhpcy5jb3VudERhdGFEZXBlbmRlbmNpZXMsXG4gICAgICBjb3VudEV4cGVjdGVkT3V0cHV0SWRzOiB0aGlzLmNvdW50RXhwZWN0ZWRPdXRwdXRJZHMsXG4gICAgICBjb3VudFJldHJ5T2ZJZHM6IHRoaXMuY291bnRSZXRyeU9mSWRzLFxuICAgICAgc3RhdHVzOlxuICAgICAgICBhcm1vbmlrQXBpR3JwY1YxVGFza19zdGF0dXMwMDEuVGFza1N0YXR1c1tcbiAgICAgICAgICB0aGlzLnN0YXR1cyA9PT0gbnVsbCB8fCB0aGlzLnN0YXR1cyA9PT0gdW5kZWZpbmVkID8gMCA6IHRoaXMuc3RhdHVzXG4gICAgICAgIF0sXG4gICAgICBzdGF0dXNNZXNzYWdlOiB0aGlzLnN0YXR1c01lc3NhZ2UsXG4gICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMgPyB0aGlzLm9wdGlvbnMudG9Qcm90b2J1ZkpTT04ob3B0aW9ucykgOiBudWxsLFxuICAgICAgY3JlYXRlZEF0OiB0aGlzLmNyZWF0ZWRBdCA/IHRoaXMuY3JlYXRlZEF0LnRvUHJvdG9idWZKU09OKG9wdGlvbnMpIDogbnVsbCxcbiAgICAgIHN1Ym1pdHRlZEF0OiB0aGlzLnN1Ym1pdHRlZEF0XG4gICAgICAgID8gdGhpcy5zdWJtaXR0ZWRBdC50b1Byb3RvYnVmSlNPTihvcHRpb25zKVxuICAgICAgICA6IG51bGwsXG4gICAgICByZWNlaXZlZEF0OiB0aGlzLnJlY2VpdmVkQXRcbiAgICAgICAgPyB0aGlzLnJlY2VpdmVkQXQudG9Qcm90b2J1ZkpTT04ob3B0aW9ucylcbiAgICAgICAgOiBudWxsLFxuICAgICAgYWNxdWlyZWRBdDogdGhpcy5hY3F1aXJlZEF0XG4gICAgICAgID8gdGhpcy5hY3F1aXJlZEF0LnRvUHJvdG9idWZKU09OKG9wdGlvbnMpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGZldGNoZWRBdDogdGhpcy5mZXRjaGVkQXQgPyB0aGlzLmZldGNoZWRBdC50b1Byb3RvYnVmSlNPTihvcHRpb25zKSA6IG51bGwsXG4gICAgICBzdGFydGVkQXQ6IHRoaXMuc3RhcnRlZEF0ID8gdGhpcy5zdGFydGVkQXQudG9Qcm90b2J1ZkpTT04ob3B0aW9ucykgOiBudWxsLFxuICAgICAgcHJvY2Vzc2VkQXQ6IHRoaXMucHJvY2Vzc2VkQXRcbiAgICAgICAgPyB0aGlzLnByb2Nlc3NlZEF0LnRvUHJvdG9idWZKU09OKG9wdGlvbnMpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGVuZGVkQXQ6IHRoaXMuZW5kZWRBdCA/IHRoaXMuZW5kZWRBdC50b1Byb3RvYnVmSlNPTihvcHRpb25zKSA6IG51bGwsXG4gICAgICBwb2RUdGw6IHRoaXMucG9kVHRsID8gdGhpcy5wb2RUdGwudG9Qcm90b2J1ZkpTT04ob3B0aW9ucykgOiBudWxsLFxuICAgICAgY3JlYXRpb25Ub0VuZER1cmF0aW9uOiB0aGlzLmNyZWF0aW9uVG9FbmREdXJhdGlvblxuICAgICAgICA/IHRoaXMuY3JlYXRpb25Ub0VuZER1cmF0aW9uLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHByb2Nlc3NpbmdUb0VuZER1cmF0aW9uOiB0aGlzLnByb2Nlc3NpbmdUb0VuZER1cmF0aW9uXG4gICAgICAgID8gdGhpcy5wcm9jZXNzaW5nVG9FbmREdXJhdGlvbi50b1Byb3RvYnVmSlNPTihvcHRpb25zKVxuICAgICAgICA6IG51bGwsXG4gICAgICByZWNlaXZlZFRvRW5kRHVyYXRpb246IHRoaXMucmVjZWl2ZWRUb0VuZER1cmF0aW9uXG4gICAgICAgID8gdGhpcy5yZWNlaXZlZFRvRW5kRHVyYXRpb24udG9Qcm90b2J1ZkpTT04ob3B0aW9ucylcbiAgICAgICAgOiBudWxsLFxuICAgICAgcGF5bG9hZElkOiB0aGlzLnBheWxvYWRJZCxcbiAgICAgIGNyZWF0ZWRCeTogdGhpcy5jcmVhdGVkQnksXG4gICAgICBlcnJvcjogdGhpcy5lcnJvcixcbiAgICAgIHBvZEhvc3RuYW1lOiB0aGlzLnBvZEhvc3RuYW1lXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBUYXNrU3VtbWFyeSB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgVGFza1N1bW1hcnlcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gICAgb3duZXJQb2RJZDogc3RyaW5nO1xuICAgIGluaXRpYWxUYXNrSWQ6IHN0cmluZztcbiAgICBjb3VudFBhcmVudFRhc2tJZHM6IHN0cmluZztcbiAgICBjb3VudERhdGFEZXBlbmRlbmNpZXM6IHN0cmluZztcbiAgICBjb3VudEV4cGVjdGVkT3V0cHV0SWRzOiBzdHJpbmc7XG4gICAgY291bnRSZXRyeU9mSWRzOiBzdHJpbmc7XG4gICAgc3RhdHVzOiBhcm1vbmlrQXBpR3JwY1YxVGFza19zdGF0dXMwMDEuVGFza1N0YXR1cztcbiAgICBzdGF0dXNNZXNzYWdlOiBzdHJpbmc7XG4gICAgb3B0aW9ucz86IGFybW9uaWtBcGlHcnBjVjEwMDUuVGFza09wdGlvbnMuQXNPYmplY3Q7XG4gICAgY3JlYXRlZEF0PzogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLkFzT2JqZWN0O1xuICAgIHN1Ym1pdHRlZEF0PzogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLkFzT2JqZWN0O1xuICAgIHJlY2VpdmVkQXQ/OiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAuQXNPYmplY3Q7XG4gICAgYWNxdWlyZWRBdD86IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcC5Bc09iamVjdDtcbiAgICBmZXRjaGVkQXQ/OiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAuQXNPYmplY3Q7XG4gICAgc3RhcnRlZEF0PzogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLkFzT2JqZWN0O1xuICAgIHByb2Nlc3NlZEF0PzogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLkFzT2JqZWN0O1xuICAgIGVuZGVkQXQ/OiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAuQXNPYmplY3Q7XG4gICAgcG9kVHRsPzogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLkFzT2JqZWN0O1xuICAgIGNyZWF0aW9uVG9FbmREdXJhdGlvbj86IGdvb2dsZVByb3RvYnVmMDAwLkR1cmF0aW9uLkFzT2JqZWN0O1xuICAgIHByb2Nlc3NpbmdUb0VuZER1cmF0aW9uPzogZ29vZ2xlUHJvdG9idWYwMDAuRHVyYXRpb24uQXNPYmplY3Q7XG4gICAgcmVjZWl2ZWRUb0VuZER1cmF0aW9uPzogZ29vZ2xlUHJvdG9idWYwMDAuRHVyYXRpb24uQXNPYmplY3Q7XG4gICAgcGF5bG9hZElkOiBzdHJpbmc7XG4gICAgY3JlYXRlZEJ5OiBzdHJpbmc7XG4gICAgZXJyb3I6IHN0cmluZztcbiAgICBwb2RIb3N0bmFtZTogc3RyaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIFRhc2tTdW1tYXJ5XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHNlc3Npb25JZDogc3RyaW5nO1xuICAgIG93bmVyUG9kSWQ6IHN0cmluZztcbiAgICBpbml0aWFsVGFza0lkOiBzdHJpbmc7XG4gICAgY291bnRQYXJlbnRUYXNrSWRzOiBzdHJpbmc7XG4gICAgY291bnREYXRhRGVwZW5kZW5jaWVzOiBzdHJpbmc7XG4gICAgY291bnRFeHBlY3RlZE91dHB1dElkczogc3RyaW5nO1xuICAgIGNvdW50UmV0cnlPZklkczogc3RyaW5nO1xuICAgIHN0YXR1czogc3RyaW5nO1xuICAgIHN0YXR1c01lc3NhZ2U6IHN0cmluZztcbiAgICBvcHRpb25zOiBhcm1vbmlrQXBpR3JwY1YxMDA1LlRhc2tPcHRpb25zLkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgICBjcmVhdGVkQXQ6IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcC5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgc3VibWl0dGVkQXQ6IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcC5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgcmVjZWl2ZWRBdDogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgICBhY3F1aXJlZEF0OiBnb29nbGVQcm90b2J1ZjAwNC5UaW1lc3RhbXAuQXNQcm90b2J1ZkpTT04gfCBudWxsO1xuICAgIGZldGNoZWRBdDogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgICBzdGFydGVkQXQ6IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcC5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgcHJvY2Vzc2VkQXQ6IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcC5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgZW5kZWRBdDogZ29vZ2xlUHJvdG9idWYwMDQuVGltZXN0YW1wLkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgICBwb2RUdGw6IGdvb2dsZVByb3RvYnVmMDA0LlRpbWVzdGFtcC5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgY3JlYXRpb25Ub0VuZER1cmF0aW9uOiBnb29nbGVQcm90b2J1ZjAwMC5EdXJhdGlvbi5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgcHJvY2Vzc2luZ1RvRW5kRHVyYXRpb246IGdvb2dsZVByb3RvYnVmMDAwLkR1cmF0aW9uLkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgICByZWNlaXZlZFRvRW5kRHVyYXRpb246IGdvb2dsZVByb3RvYnVmMDAwLkR1cmF0aW9uLkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgICBwYXlsb2FkSWQ6IHN0cmluZztcbiAgICBjcmVhdGVkQnk6IHN0cmluZztcbiAgICBlcnJvcjogc3RyaW5nO1xuICAgIHBvZEhvc3RuYW1lOiBzdHJpbmc7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBhcm1vbmlrLmFwaS5ncnBjLnYxLnRhc2tzLkxpc3RUYXNrc1JlcXVlc3RcbiAqL1xuZXhwb3J0IGNsYXNzIExpc3RUYXNrc1JlcXVlc3QgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdhcm1vbmlrLmFwaS5ncnBjLnYxLnRhc2tzLkxpc3RUYXNrc1JlcXVlc3QnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBMaXN0VGFza3NSZXF1ZXN0KCk7XG4gICAgTGlzdFRhc2tzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IExpc3RUYXNrc1JlcXVlc3QpIHtcbiAgICBfaW5zdGFuY2UucGFnZSA9IF9pbnN0YW5jZS5wYWdlIHx8IDA7XG4gICAgX2luc3RhbmNlLnBhZ2VTaXplID0gX2luc3RhbmNlLnBhZ2VTaXplIHx8IDA7XG4gICAgX2luc3RhbmNlLmZpbHRlcnMgPSBfaW5zdGFuY2UuZmlsdGVycyB8fCB1bmRlZmluZWQ7XG4gICAgX2luc3RhbmNlLnNvcnQgPSBfaW5zdGFuY2Uuc29ydCB8fCB1bmRlZmluZWQ7XG4gICAgX2luc3RhbmNlLndpdGhFcnJvcnMgPSBfaW5zdGFuY2Uud2l0aEVycm9ycyB8fCBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IExpc3RUYXNrc1JlcXVlc3QsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgX2luc3RhbmNlLnBhZ2UgPSBfcmVhZGVyLnJlYWRJbnQzMigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgX2luc3RhbmNlLnBhZ2VTaXplID0gX3JlYWRlci5yZWFkSW50MzIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIF9pbnN0YW5jZS5maWx0ZXJzID0gbmV3IGFybW9uaWtBcGlHcnBjVjFUYXNrczAwNy5GaWx0ZXJzKCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5maWx0ZXJzLFxuICAgICAgICAgICAgYXJtb25pa0FwaUdycGNWMVRhc2tzMDA3LkZpbHRlcnMuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIF9pbnN0YW5jZS5zb3J0ID0gbmV3IExpc3RUYXNrc1JlcXVlc3QuU29ydCgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2Uuc29ydCxcbiAgICAgICAgICAgIExpc3RUYXNrc1JlcXVlc3QuU29ydC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgX2luc3RhbmNlLndpdGhFcnJvcnMgPSBfcmVhZGVyLnJlYWRCb29sKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBMaXN0VGFza3NSZXF1ZXN0LnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogTGlzdFRhc2tzUmVxdWVzdCxcbiAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgKSB7XG4gICAgaWYgKF9pbnN0YW5jZS5wYWdlKSB7XG4gICAgICBfd3JpdGVyLndyaXRlSW50MzIoMSwgX2luc3RhbmNlLnBhZ2UpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnBhZ2VTaXplKSB7XG4gICAgICBfd3JpdGVyLndyaXRlSW50MzIoMiwgX2luc3RhbmNlLnBhZ2VTaXplKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5maWx0ZXJzKSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMyxcbiAgICAgICAgX2luc3RhbmNlLmZpbHRlcnMgYXMgYW55LFxuICAgICAgICBhcm1vbmlrQXBpR3JwY1YxVGFza3MwMDcuRmlsdGVycy5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5zb3J0KSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgNCxcbiAgICAgICAgX2luc3RhbmNlLnNvcnQgYXMgYW55LFxuICAgICAgICBMaXN0VGFza3NSZXF1ZXN0LlNvcnQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2Uud2l0aEVycm9ycykge1xuICAgICAgX3dyaXRlci53cml0ZUJvb2woNSwgX2luc3RhbmNlLndpdGhFcnJvcnMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3BhZ2U6IG51bWJlcjtcbiAgcHJpdmF0ZSBfcGFnZVNpemU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfZmlsdGVycz86IGFybW9uaWtBcGlHcnBjVjFUYXNrczAwNy5GaWx0ZXJzO1xuICBwcml2YXRlIF9zb3J0PzogTGlzdFRhc2tzUmVxdWVzdC5Tb3J0O1xuICBwcml2YXRlIF93aXRoRXJyb3JzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgTGlzdFRhc2tzUmVxdWVzdCB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxMaXN0VGFza3NSZXF1ZXN0LkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLnBhZ2UgPSBfdmFsdWUucGFnZTtcbiAgICB0aGlzLnBhZ2VTaXplID0gX3ZhbHVlLnBhZ2VTaXplO1xuICAgIHRoaXMuZmlsdGVycyA9IF92YWx1ZS5maWx0ZXJzXG4gICAgICA/IG5ldyBhcm1vbmlrQXBpR3JwY1YxVGFza3MwMDcuRmlsdGVycyhfdmFsdWUuZmlsdGVycylcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuc29ydCA9IF92YWx1ZS5zb3J0XG4gICAgICA/IG5ldyBMaXN0VGFza3NSZXF1ZXN0LlNvcnQoX3ZhbHVlLnNvcnQpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLndpdGhFcnJvcnMgPSBfdmFsdWUud2l0aEVycm9ycztcbiAgICBMaXN0VGFza3NSZXF1ZXN0LnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgcGFnZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9wYWdlO1xuICB9XG4gIHNldCBwYWdlKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wYWdlID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHBhZ2VTaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VTaXplO1xuICB9XG4gIHNldCBwYWdlU2l6ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fcGFnZVNpemUgPSB2YWx1ZTtcbiAgfVxuICBnZXQgZmlsdGVycygpOiBhcm1vbmlrQXBpR3JwY1YxVGFza3MwMDcuRmlsdGVycyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnM7XG4gIH1cbiAgc2V0IGZpbHRlcnModmFsdWU6IGFybW9uaWtBcGlHcnBjVjFUYXNrczAwNy5GaWx0ZXJzIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZmlsdGVycyA9IHZhbHVlO1xuICB9XG4gIGdldCBzb3J0KCk6IExpc3RUYXNrc1JlcXVlc3QuU29ydCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnQ7XG4gIH1cbiAgc2V0IHNvcnQodmFsdWU6IExpc3RUYXNrc1JlcXVlc3QuU29ydCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3NvcnQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgd2l0aEVycm9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fd2l0aEVycm9ycztcbiAgfVxuICBzZXQgd2l0aEVycm9ycyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3dpdGhFcnJvcnMgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBMaXN0VGFza3NSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IExpc3RUYXNrc1JlcXVlc3QuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcbiAgICAgIGZpbHRlcnM6IHRoaXMuZmlsdGVycyA/IHRoaXMuZmlsdGVycy50b09iamVjdCgpIDogdW5kZWZpbmVkLFxuICAgICAgc29ydDogdGhpcy5zb3J0ID8gdGhpcy5zb3J0LnRvT2JqZWN0KCkgOiB1bmRlZmluZWQsXG4gICAgICB3aXRoRXJyb3JzOiB0aGlzLndpdGhFcnJvcnNcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBMaXN0VGFza3NSZXF1ZXN0LkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZTogdGhpcy5wYWdlLFxuICAgICAgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsXG4gICAgICBmaWx0ZXJzOiB0aGlzLmZpbHRlcnMgPyB0aGlzLmZpbHRlcnMudG9Qcm90b2J1ZkpTT04ob3B0aW9ucykgOiBudWxsLFxuICAgICAgc29ydDogdGhpcy5zb3J0ID8gdGhpcy5zb3J0LnRvUHJvdG9idWZKU09OKG9wdGlvbnMpIDogbnVsbCxcbiAgICAgIHdpdGhFcnJvcnM6IHRoaXMud2l0aEVycm9yc1xuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgTGlzdFRhc2tzUmVxdWVzdCB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgTGlzdFRhc2tzUmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgcGFnZTogbnVtYmVyO1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG4gICAgZmlsdGVycz86IGFybW9uaWtBcGlHcnBjVjFUYXNrczAwNy5GaWx0ZXJzLkFzT2JqZWN0O1xuICAgIHNvcnQ/OiBMaXN0VGFza3NSZXF1ZXN0LlNvcnQuQXNPYmplY3Q7XG4gICAgd2l0aEVycm9yczogYm9vbGVhbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBMaXN0VGFza3NSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICBwYWdlOiBudW1iZXI7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICBmaWx0ZXJzOiBhcm1vbmlrQXBpR3JwY1YxVGFza3MwMDcuRmlsdGVycy5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgc29ydDogTGlzdFRhc2tzUmVxdWVzdC5Tb3J0LkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgICB3aXRoRXJyb3JzOiBib29sZWFuO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIGFybW9uaWsuYXBpLmdycGMudjEudGFza3MuTGlzdFRhc2tzUmVxdWVzdC5Tb3J0XG4gICAqL1xuICBleHBvcnQgY2xhc3MgU29ydCBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgICBzdGF0aWMgaWQgPSAnYXJtb25pay5hcGkuZ3JwYy52MS50YXNrcy5MaXN0VGFza3NSZXF1ZXN0LlNvcnQnO1xuXG4gICAgLyoqXG4gICAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBTb3J0KCk7XG4gICAgICBTb3J0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihpbnN0YW5jZSwgbmV3IEJpbmFyeVJlYWRlcihieXRlcykpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBTb3J0KSB7XG4gICAgICBfaW5zdGFuY2UuZmllbGQgPSBfaW5zdGFuY2UuZmllbGQgfHwgdW5kZWZpbmVkO1xuICAgICAgX2luc3RhbmNlLmRpcmVjdGlvbiA9IF9pbnN0YW5jZS5kaXJlY3Rpb24gfHwgMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKF9pbnN0YW5jZTogU29ydCwgX3JlYWRlcjogQmluYXJ5UmVhZGVyKSB7XG4gICAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgX2luc3RhbmNlLmZpZWxkID0gbmV3IGFybW9uaWtBcGlHcnBjVjFUYXNrczAwMy5UYXNrRmllbGQoKTtcbiAgICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICAgIF9pbnN0YW5jZS5maWVsZCxcbiAgICAgICAgICAgICAgYXJtb25pa0FwaUdycGNWMVRhc2tzMDAzLlRhc2tGaWVsZC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBfaW5zdGFuY2UuZGlyZWN0aW9uID0gX3JlYWRlci5yZWFkRW51bSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgU29ydC5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKF9pbnN0YW5jZTogU29ydCwgX3dyaXRlcjogQmluYXJ5V3JpdGVyKSB7XG4gICAgICBpZiAoX2luc3RhbmNlLmZpZWxkKSB7XG4gICAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICAgIDEsXG4gICAgICAgICAgX2luc3RhbmNlLmZpZWxkIGFzIGFueSxcbiAgICAgICAgICBhcm1vbmlrQXBpR3JwY1YxVGFza3MwMDMuVGFza0ZpZWxkLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoX2luc3RhbmNlLmRpcmVjdGlvbikge1xuICAgICAgICBfd3JpdGVyLndyaXRlRW51bSgyLCBfaW5zdGFuY2UuZGlyZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9maWVsZD86IGFybW9uaWtBcGlHcnBjVjFUYXNrczAwMy5UYXNrRmllbGQ7XG4gICAgcHJpdmF0ZSBfZGlyZWN0aW9uOiBhcm1vbmlrQXBpR3JwY1YxU29ydF9kaXJlY3Rpb24wMDYuU29ydERpcmVjdGlvbjtcblxuICAgIC8qKlxuICAgICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIFNvcnQgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPFNvcnQuQXNPYmplY3Q+KSB7XG4gICAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgICB0aGlzLmZpZWxkID0gX3ZhbHVlLmZpZWxkXG4gICAgICAgID8gbmV3IGFybW9uaWtBcGlHcnBjVjFUYXNrczAwMy5UYXNrRmllbGQoX3ZhbHVlLmZpZWxkKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZGlyZWN0aW9uID0gX3ZhbHVlLmRpcmVjdGlvbjtcbiAgICAgIFNvcnQucmVmaW5lVmFsdWVzKHRoaXMpO1xuICAgIH1cbiAgICBnZXQgZmllbGQoKTogYXJtb25pa0FwaUdycGNWMVRhc2tzMDAzLlRhc2tGaWVsZCB8IHVuZGVmaW5lZCB7XG4gICAgICByZXR1cm4gdGhpcy5fZmllbGQ7XG4gICAgfVxuICAgIHNldCBmaWVsZCh2YWx1ZTogYXJtb25pa0FwaUdycGNWMVRhc2tzMDAzLlRhc2tGaWVsZCB8IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fZmllbGQgPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IGRpcmVjdGlvbigpOiBhcm1vbmlrQXBpR3JwY1YxU29ydF9kaXJlY3Rpb24wMDYuU29ydERpcmVjdGlvbiB7XG4gICAgICByZXR1cm4gdGhpcy5fZGlyZWN0aW9uO1xuICAgIH1cbiAgICBzZXQgZGlyZWN0aW9uKHZhbHVlOiBhcm1vbmlrQXBpR3JwY1YxU29ydF9kaXJlY3Rpb24wMDYuU29ydERpcmVjdGlvbikge1xuICAgICAgdGhpcy5fZGlyZWN0aW9uID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqL1xuICAgIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICAgIFNvcnQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAgICovXG4gICAgdG9PYmplY3QoKTogU29ydC5Bc09iamVjdCB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWVsZDogdGhpcy5maWVsZCA/IHRoaXMuZmllbGQudG9PYmplY3QoKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZGlyZWN0aW9uOiB0aGlzLmRpcmVjdGlvblxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICAgKi9cbiAgICB0b1Byb3RvYnVmSlNPTihcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgICApOiBTb3J0LkFzUHJvdG9idWZKU09OIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpZWxkOiB0aGlzLmZpZWxkID8gdGhpcy5maWVsZC50b1Byb3RvYnVmSlNPTihvcHRpb25zKSA6IG51bGwsXG4gICAgICAgIGRpcmVjdGlvbjpcbiAgICAgICAgICBhcm1vbmlrQXBpR3JwY1YxU29ydF9kaXJlY3Rpb24wMDYuU29ydERpcmVjdGlvbltcbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uID09PSBudWxsIHx8IHRoaXMuZGlyZWN0aW9uID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgIDogdGhpcy5kaXJlY3Rpb25cbiAgICAgICAgICBdXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBleHBvcnQgbW9kdWxlIFNvcnQge1xuICAgIC8qKlxuICAgICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBTb3J0XG4gICAgICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgICBmaWVsZD86IGFybW9uaWtBcGlHcnBjVjFUYXNrczAwMy5UYXNrRmllbGQuQXNPYmplY3Q7XG4gICAgICBkaXJlY3Rpb246IGFybW9uaWtBcGlHcnBjVjFTb3J0X2RpcmVjdGlvbjAwNi5Tb3J0RGlyZWN0aW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIFNvcnRcbiAgICAgKi9cbiAgICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICAgIGZpZWxkOiBhcm1vbmlrQXBpR3JwY1YxVGFza3MwMDMuVGFza0ZpZWxkLkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgICAgIGRpcmVjdGlvbjogc3RyaW5nO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIGFybW9uaWsuYXBpLmdycGMudjEudGFza3MuTGlzdFRhc2tzUmVzcG9uc2VcbiAqL1xuZXhwb3J0IGNsYXNzIExpc3RUYXNrc1Jlc3BvbnNlIGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnYXJtb25pay5hcGkuZ3JwYy52MS50YXNrcy5MaXN0VGFza3NSZXNwb25zZSc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IExpc3RUYXNrc1Jlc3BvbnNlKCk7XG4gICAgTGlzdFRhc2tzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBMaXN0VGFza3NSZXNwb25zZSkge1xuICAgIF9pbnN0YW5jZS50YXNrcyA9IF9pbnN0YW5jZS50YXNrcyB8fCBbXTtcbiAgICBfaW5zdGFuY2UucGFnZSA9IF9pbnN0YW5jZS5wYWdlIHx8IDA7XG4gICAgX2luc3RhbmNlLnBhZ2VTaXplID0gX2luc3RhbmNlLnBhZ2VTaXplIHx8IDA7XG4gICAgX2luc3RhbmNlLnRvdGFsID0gX2luc3RhbmNlLnRvdGFsIHx8IDA7XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgX2luc3RhbmNlOiBMaXN0VGFza3NSZXNwb25zZSxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBjb25zdCBtZXNzYWdlSW5pdGlhbGl6ZXIxID0gbmV3IFRhc2tTdW1tYXJ5KCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIG1lc3NhZ2VJbml0aWFsaXplcjEsXG4gICAgICAgICAgICBUYXNrU3VtbWFyeS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIChfaW5zdGFuY2UudGFza3MgPSBfaW5zdGFuY2UudGFza3MgfHwgW10pLnB1c2gobWVzc2FnZUluaXRpYWxpemVyMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBfaW5zdGFuY2UucGFnZSA9IF9yZWFkZXIucmVhZEludDMyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBfaW5zdGFuY2UucGFnZVNpemUgPSBfcmVhZGVyLnJlYWRJbnQzMigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgX2luc3RhbmNlLnRvdGFsID0gX3JlYWRlci5yZWFkSW50MzIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIExpc3RUYXNrc1Jlc3BvbnNlLnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogTGlzdFRhc2tzUmVzcG9uc2UsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UudGFza3MgJiYgX2luc3RhbmNlLnRhc2tzLmxlbmd0aCkge1xuICAgICAgX3dyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgICAgMSxcbiAgICAgICAgX2luc3RhbmNlLnRhc2tzIGFzIGFueSxcbiAgICAgICAgVGFza1N1bW1hcnkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UucGFnZSkge1xuICAgICAgX3dyaXRlci53cml0ZUludDMyKDIsIF9pbnN0YW5jZS5wYWdlKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5wYWdlU2l6ZSkge1xuICAgICAgX3dyaXRlci53cml0ZUludDMyKDMsIF9pbnN0YW5jZS5wYWdlU2l6ZSk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UudG90YWwpIHtcbiAgICAgIF93cml0ZXIud3JpdGVJbnQzMig0LCBfaW5zdGFuY2UudG90YWwpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3Rhc2tzPzogVGFza1N1bW1hcnlbXTtcbiAgcHJpdmF0ZSBfcGFnZTogbnVtYmVyO1xuICBwcml2YXRlIF9wYWdlU2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIF90b3RhbDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgTGlzdFRhc2tzUmVzcG9uc2UgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8TGlzdFRhc2tzUmVzcG9uc2UuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMudGFza3MgPSAoX3ZhbHVlLnRhc2tzIHx8IFtdKS5tYXAobSA9PiBuZXcgVGFza1N1bW1hcnkobSkpO1xuICAgIHRoaXMucGFnZSA9IF92YWx1ZS5wYWdlO1xuICAgIHRoaXMucGFnZVNpemUgPSBfdmFsdWUucGFnZVNpemU7XG4gICAgdGhpcy50b3RhbCA9IF92YWx1ZS50b3RhbDtcbiAgICBMaXN0VGFza3NSZXNwb25zZS5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IHRhc2tzKCk6IFRhc2tTdW1tYXJ5W10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl90YXNrcztcbiAgfVxuICBzZXQgdGFza3ModmFsdWU6IFRhc2tTdW1tYXJ5W10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl90YXNrcyA9IHZhbHVlO1xuICB9XG4gIGdldCBwYWdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2U7XG4gIH1cbiAgc2V0IHBhZ2UodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3BhZ2UgPSB2YWx1ZTtcbiAgfVxuICBnZXQgcGFnZVNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZVNpemU7XG4gIH1cbiAgc2V0IHBhZ2VTaXplKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wYWdlU2l6ZSA9IHZhbHVlO1xuICB9XG4gIGdldCB0b3RhbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl90b3RhbDtcbiAgfVxuICBzZXQgdG90YWwodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3RvdGFsID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgTGlzdFRhc2tzUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogTGlzdFRhc2tzUmVzcG9uc2UuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICB0YXNrczogKHRoaXMudGFza3MgfHwgW10pLm1hcChtID0+IG0udG9PYmplY3QoKSksXG4gICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcbiAgICAgIHRvdGFsOiB0aGlzLnRvdGFsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogTGlzdFRhc2tzUmVzcG9uc2UuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICB0YXNrczogKHRoaXMudGFza3MgfHwgW10pLm1hcChtID0+IG0udG9Qcm90b2J1ZkpTT04ob3B0aW9ucykpLFxuICAgICAgcGFnZTogdGhpcy5wYWdlLFxuICAgICAgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsXG4gICAgICB0b3RhbDogdGhpcy50b3RhbFxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgTGlzdFRhc2tzUmVzcG9uc2Uge1xuICAvKipcbiAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIExpc3RUYXNrc1Jlc3BvbnNlXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICB0YXNrcz86IFRhc2tTdW1tYXJ5LkFzT2JqZWN0W107XG4gICAgcGFnZTogbnVtYmVyO1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBMaXN0VGFza3NSZXNwb25zZVxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgdGFza3M6IFRhc2tTdW1tYXJ5LkFzUHJvdG9idWZKU09OW10gfCBudWxsO1xuICAgIHBhZ2U6IG51bWJlcjtcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICAgIHRvdGFsOiBudW1iZXI7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBhcm1vbmlrLmFwaS5ncnBjLnYxLnRhc2tzLkxpc3RUYXNrc0RldGFpbGVkUmVzcG9uc2VcbiAqL1xuZXhwb3J0IGNsYXNzIExpc3RUYXNrc0RldGFpbGVkUmVzcG9uc2UgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdhcm1vbmlrLmFwaS5ncnBjLnYxLnRhc2tzLkxpc3RUYXNrc0RldGFpbGVkUmVzcG9uc2UnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBMaXN0VGFza3NEZXRhaWxlZFJlc3BvbnNlKCk7XG4gICAgTGlzdFRhc2tzRGV0YWlsZWRSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IExpc3RUYXNrc0RldGFpbGVkUmVzcG9uc2UpIHtcbiAgICBfaW5zdGFuY2UudGFza3MgPSBfaW5zdGFuY2UudGFza3MgfHwgW107XG4gICAgX2luc3RhbmNlLnBhZ2UgPSBfaW5zdGFuY2UucGFnZSB8fCAwO1xuICAgIF9pbnN0YW5jZS5wYWdlU2l6ZSA9IF9pbnN0YW5jZS5wYWdlU2l6ZSB8fCAwO1xuICAgIF9pbnN0YW5jZS50b3RhbCA9IF9pbnN0YW5jZS50b3RhbCB8fCAwO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgIF9pbnN0YW5jZTogTGlzdFRhc2tzRGV0YWlsZWRSZXNwb25zZSxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBjb25zdCBtZXNzYWdlSW5pdGlhbGl6ZXIxID0gbmV3IFRhc2tEZXRhaWxlZCgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBtZXNzYWdlSW5pdGlhbGl6ZXIxLFxuICAgICAgICAgICAgVGFza0RldGFpbGVkLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgKF9pbnN0YW5jZS50YXNrcyA9IF9pbnN0YW5jZS50YXNrcyB8fCBbXSkucHVzaChtZXNzYWdlSW5pdGlhbGl6ZXIxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIF9pbnN0YW5jZS5wYWdlID0gX3JlYWRlci5yZWFkSW50MzIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIF9pbnN0YW5jZS5wYWdlU2l6ZSA9IF9yZWFkZXIucmVhZEludDMyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBfaW5zdGFuY2UudG90YWwgPSBfcmVhZGVyLnJlYWRJbnQzMigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgTGlzdFRhc2tzRGV0YWlsZWRSZXNwb25zZS5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IExpc3RUYXNrc0RldGFpbGVkUmVzcG9uc2UsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UudGFza3MgJiYgX2luc3RhbmNlLnRhc2tzLmxlbmd0aCkge1xuICAgICAgX3dyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgICAgMSxcbiAgICAgICAgX2luc3RhbmNlLnRhc2tzIGFzIGFueSxcbiAgICAgICAgVGFza0RldGFpbGVkLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnBhZ2UpIHtcbiAgICAgIF93cml0ZXIud3JpdGVJbnQzMigyLCBfaW5zdGFuY2UucGFnZSk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UucGFnZVNpemUpIHtcbiAgICAgIF93cml0ZXIud3JpdGVJbnQzMigzLCBfaW5zdGFuY2UucGFnZVNpemUpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnRvdGFsKSB7XG4gICAgICBfd3JpdGVyLndyaXRlSW50MzIoNCwgX2luc3RhbmNlLnRvdGFsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF90YXNrcz86IFRhc2tEZXRhaWxlZFtdO1xuICBwcml2YXRlIF9wYWdlOiBudW1iZXI7XG4gIHByaXZhdGUgX3BhZ2VTaXplOiBudW1iZXI7XG4gIHByaXZhdGUgX3RvdGFsOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBMaXN0VGFza3NEZXRhaWxlZFJlc3BvbnNlIHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPExpc3RUYXNrc0RldGFpbGVkUmVzcG9uc2UuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMudGFza3MgPSAoX3ZhbHVlLnRhc2tzIHx8IFtdKS5tYXAobSA9PiBuZXcgVGFza0RldGFpbGVkKG0pKTtcbiAgICB0aGlzLnBhZ2UgPSBfdmFsdWUucGFnZTtcbiAgICB0aGlzLnBhZ2VTaXplID0gX3ZhbHVlLnBhZ2VTaXplO1xuICAgIHRoaXMudG90YWwgPSBfdmFsdWUudG90YWw7XG4gICAgTGlzdFRhc2tzRGV0YWlsZWRSZXNwb25zZS5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IHRhc2tzKCk6IFRhc2tEZXRhaWxlZFtdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdGFza3M7XG4gIH1cbiAgc2V0IHRhc2tzKHZhbHVlOiBUYXNrRGV0YWlsZWRbXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3Rhc2tzID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHBhZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZTtcbiAgfVxuICBzZXQgcGFnZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fcGFnZSA9IHZhbHVlO1xuICB9XG4gIGdldCBwYWdlU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9wYWdlU2l6ZTtcbiAgfVxuICBzZXQgcGFnZVNpemUodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3BhZ2VTaXplID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHRvdGFsKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RvdGFsO1xuICB9XG4gIHNldCB0b3RhbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fdG90YWwgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBMaXN0VGFza3NEZXRhaWxlZFJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IExpc3RUYXNrc0RldGFpbGVkUmVzcG9uc2UuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICB0YXNrczogKHRoaXMudGFza3MgfHwgW10pLm1hcChtID0+IG0udG9PYmplY3QoKSksXG4gICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcbiAgICAgIHRvdGFsOiB0aGlzLnRvdGFsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogTGlzdFRhc2tzRGV0YWlsZWRSZXNwb25zZS5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhc2tzOiAodGhpcy50YXNrcyB8fCBbXSkubWFwKG0gPT4gbS50b1Byb3RvYnVmSlNPTihvcHRpb25zKSksXG4gICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcbiAgICAgIHRvdGFsOiB0aGlzLnRvdGFsXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBMaXN0VGFza3NEZXRhaWxlZFJlc3BvbnNlIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBMaXN0VGFza3NEZXRhaWxlZFJlc3BvbnNlXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICB0YXNrcz86IFRhc2tEZXRhaWxlZC5Bc09iamVjdFtdO1xuICAgIHBhZ2U6IG51bWJlcjtcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICAgIHRvdGFsOiBudW1iZXI7XG4gIH1cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgTGlzdFRhc2tzRGV0YWlsZWRSZXNwb25zZVxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgdGFza3M6IFRhc2tEZXRhaWxlZC5Bc1Byb3RvYnVmSlNPTltdIHwgbnVsbDtcbiAgICBwYWdlOiBudW1iZXI7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICB0b3RhbDogbnVtYmVyO1xuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3IgYXJtb25pay5hcGkuZ3JwYy52MS50YXNrcy5HZXRUYXNrUmVxdWVzdFxuICovXG5leHBvcnQgY2xhc3MgR2V0VGFza1JlcXVlc3QgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdhcm1vbmlrLmFwaS5ncnBjLnYxLnRhc2tzLkdldFRhc2tSZXF1ZXN0JztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgR2V0VGFza1JlcXVlc3QoKTtcbiAgICBHZXRUYXNrUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IEdldFRhc2tSZXF1ZXN0KSB7XG4gICAgX2luc3RhbmNlLnRhc2tJZCA9IF9pbnN0YW5jZS50YXNrSWQgfHwgJyc7XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgX2luc3RhbmNlOiBHZXRUYXNrUmVxdWVzdCxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBfaW5zdGFuY2UudGFza0lkID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBHZXRUYXNrUmVxdWVzdC5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IEdldFRhc2tSZXF1ZXN0LFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLnRhc2tJZCkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygxLCBfaW5zdGFuY2UudGFza0lkKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF90YXNrSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIEdldFRhc2tSZXF1ZXN0IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPEdldFRhc2tSZXF1ZXN0LkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLnRhc2tJZCA9IF92YWx1ZS50YXNrSWQ7XG4gICAgR2V0VGFza1JlcXVlc3QucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCB0YXNrSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGFza0lkO1xuICB9XG4gIHNldCB0YXNrSWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3Rhc2tJZCA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIEdldFRhc2tSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IEdldFRhc2tSZXF1ZXN0LkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFza0lkOiB0aGlzLnRhc2tJZFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IEdldFRhc2tSZXF1ZXN0LkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFza0lkOiB0aGlzLnRhc2tJZFxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgR2V0VGFza1JlcXVlc3Qge1xuICAvKipcbiAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIEdldFRhc2tSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICB0YXNrSWQ6IHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBHZXRUYXNrUmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgdGFza0lkOiBzdHJpbmc7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBhcm1vbmlrLmFwaS5ncnBjLnYxLnRhc2tzLkdldFRhc2tSZXNwb25zZVxuICovXG5leHBvcnQgY2xhc3MgR2V0VGFza1Jlc3BvbnNlIGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnYXJtb25pay5hcGkuZ3JwYy52MS50YXNrcy5HZXRUYXNrUmVzcG9uc2UnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBHZXRUYXNrUmVzcG9uc2UoKTtcbiAgICBHZXRUYXNrUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBHZXRUYXNrUmVzcG9uc2UpIHtcbiAgICBfaW5zdGFuY2UudGFzayA9IF9pbnN0YW5jZS50YXNrIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IEdldFRhc2tSZXNwb25zZSxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBfaW5zdGFuY2UudGFzayA9IG5ldyBUYXNrRGV0YWlsZWQoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgX2luc3RhbmNlLnRhc2ssXG4gICAgICAgICAgICBUYXNrRGV0YWlsZWQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEdldFRhc2tSZXNwb25zZS5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IEdldFRhc2tSZXNwb25zZSxcbiAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgKSB7XG4gICAgaWYgKF9pbnN0YW5jZS50YXNrKSB7XG4gICAgICBfd3JpdGVyLndyaXRlTWVzc2FnZShcbiAgICAgICAgMSxcbiAgICAgICAgX2luc3RhbmNlLnRhc2sgYXMgYW55LFxuICAgICAgICBUYXNrRGV0YWlsZWQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdGFzaz86IFRhc2tEZXRhaWxlZDtcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIEdldFRhc2tSZXNwb25zZSB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxHZXRUYXNrUmVzcG9uc2UuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMudGFzayA9IF92YWx1ZS50YXNrID8gbmV3IFRhc2tEZXRhaWxlZChfdmFsdWUudGFzaykgOiB1bmRlZmluZWQ7XG4gICAgR2V0VGFza1Jlc3BvbnNlLnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgdGFzaygpOiBUYXNrRGV0YWlsZWQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl90YXNrO1xuICB9XG4gIHNldCB0YXNrKHZhbHVlOiBUYXNrRGV0YWlsZWQgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl90YXNrID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgR2V0VGFza1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IEdldFRhc2tSZXNwb25zZS5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhc2s6IHRoaXMudGFzayA/IHRoaXMudGFzay50b09iamVjdCgpIDogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogR2V0VGFza1Jlc3BvbnNlLkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFzazogdGhpcy50YXNrID8gdGhpcy50YXNrLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpIDogbnVsbFxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgR2V0VGFza1Jlc3BvbnNlIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBHZXRUYXNrUmVzcG9uc2VcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIHRhc2s/OiBUYXNrRGV0YWlsZWQuQXNPYmplY3Q7XG4gIH1cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgR2V0VGFza1Jlc3BvbnNlXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICB0YXNrOiBUYXNrRGV0YWlsZWQuQXNQcm90b2J1ZkpTT04gfCBudWxsO1xuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3IgYXJtb25pay5hcGkuZ3JwYy52MS50YXNrcy5DYW5jZWxUYXNrc1JlcXVlc3RcbiAqL1xuZXhwb3J0IGNsYXNzIENhbmNlbFRhc2tzUmVxdWVzdCBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ2FybW9uaWsuYXBpLmdycGMudjEudGFza3MuQ2FuY2VsVGFza3NSZXF1ZXN0JztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQ2FuY2VsVGFza3NSZXF1ZXN0KCk7XG4gICAgQ2FuY2VsVGFza3NSZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIGluc3RhbmNlLFxuICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICApO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogQ2FuY2VsVGFza3NSZXF1ZXN0KSB7XG4gICAgX2luc3RhbmNlLnRhc2tJZHMgPSBfaW5zdGFuY2UudGFza0lkcyB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IENhbmNlbFRhc2tzUmVxdWVzdCxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAoX2luc3RhbmNlLnRhc2tJZHMgPSBfaW5zdGFuY2UudGFza0lkcyB8fCBbXSkucHVzaChcbiAgICAgICAgICAgIF9yZWFkZXIucmVhZFN0cmluZygpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIENhbmNlbFRhc2tzUmVxdWVzdC5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IENhbmNlbFRhc2tzUmVxdWVzdCxcbiAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgKSB7XG4gICAgaWYgKF9pbnN0YW5jZS50YXNrSWRzICYmIF9pbnN0YW5jZS50YXNrSWRzLmxlbmd0aCkge1xuICAgICAgX3dyaXRlci53cml0ZVJlcGVhdGVkU3RyaW5nKDEsIF9pbnN0YW5jZS50YXNrSWRzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF90YXNrSWRzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIENhbmNlbFRhc2tzUmVxdWVzdCB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxDYW5jZWxUYXNrc1JlcXVlc3QuQXNPYmplY3Q+KSB7XG4gICAgX3ZhbHVlID0gX3ZhbHVlIHx8IHt9O1xuICAgIHRoaXMudGFza0lkcyA9IChfdmFsdWUudGFza0lkcyB8fCBbXSkuc2xpY2UoKTtcbiAgICBDYW5jZWxUYXNrc1JlcXVlc3QucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCB0YXNrSWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fdGFza0lkcztcbiAgfVxuICBzZXQgdGFza0lkcyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLl90YXNrSWRzID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgQ2FuY2VsVGFza3NSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IENhbmNlbFRhc2tzUmVxdWVzdC5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhc2tJZHM6ICh0aGlzLnRhc2tJZHMgfHwgW10pLnNsaWNlKClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBDYW5jZWxUYXNrc1JlcXVlc3QuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICB0YXNrSWRzOiAodGhpcy50YXNrSWRzIHx8IFtdKS5zbGljZSgpXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBDYW5jZWxUYXNrc1JlcXVlc3Qge1xuICAvKipcbiAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIENhbmNlbFRhc2tzUmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgdGFza0lkczogc3RyaW5nW107XG4gIH1cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgQ2FuY2VsVGFza3NSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICB0YXNrSWRzOiBzdHJpbmdbXTtcbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIGFybW9uaWsuYXBpLmdycGMudjEudGFza3MuQ2FuY2VsVGFza3NSZXNwb25zZVxuICovXG5leHBvcnQgY2xhc3MgQ2FuY2VsVGFza3NSZXNwb25zZSBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ2FybW9uaWsuYXBpLmdycGMudjEudGFza3MuQ2FuY2VsVGFza3NSZXNwb25zZSc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IENhbmNlbFRhc2tzUmVzcG9uc2UoKTtcbiAgICBDYW5jZWxUYXNrc1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIGluc3RhbmNlLFxuICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICApO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogQ2FuY2VsVGFza3NSZXNwb25zZSkge1xuICAgIF9pbnN0YW5jZS50YXNrcyA9IF9pbnN0YW5jZS50YXNrcyB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IENhbmNlbFRhc2tzUmVzcG9uc2UsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgY29uc3QgbWVzc2FnZUluaXRpYWxpemVyMSA9IG5ldyBUYXNrU3VtbWFyeSgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBtZXNzYWdlSW5pdGlhbGl6ZXIxLFxuICAgICAgICAgICAgVGFza1N1bW1hcnkuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICAoX2luc3RhbmNlLnRhc2tzID0gX2luc3RhbmNlLnRhc2tzIHx8IFtdKS5wdXNoKG1lc3NhZ2VJbml0aWFsaXplcjEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQ2FuY2VsVGFza3NSZXNwb25zZS5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IENhbmNlbFRhc2tzUmVzcG9uc2UsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UudGFza3MgJiYgX2luc3RhbmNlLnRhc2tzLmxlbmd0aCkge1xuICAgICAgX3dyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgICAgMSxcbiAgICAgICAgX2luc3RhbmNlLnRhc2tzIGFzIGFueSxcbiAgICAgICAgVGFza1N1bW1hcnkuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdGFza3M/OiBUYXNrU3VtbWFyeVtdO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgQ2FuY2VsVGFza3NSZXNwb25zZSB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxDYW5jZWxUYXNrc1Jlc3BvbnNlLkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLnRhc2tzID0gKF92YWx1ZS50YXNrcyB8fCBbXSkubWFwKG0gPT4gbmV3IFRhc2tTdW1tYXJ5KG0pKTtcbiAgICBDYW5jZWxUYXNrc1Jlc3BvbnNlLnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgdGFza3MoKTogVGFza1N1bW1hcnlbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3Rhc2tzO1xuICB9XG4gIHNldCB0YXNrcyh2YWx1ZTogVGFza1N1bW1hcnlbXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3Rhc2tzID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgQ2FuY2VsVGFza3NSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBDYW5jZWxUYXNrc1Jlc3BvbnNlLkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFza3M6ICh0aGlzLnRhc2tzIHx8IFtdKS5tYXAobSA9PiBtLnRvT2JqZWN0KCkpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogQ2FuY2VsVGFza3NSZXNwb25zZS5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhc2tzOiAodGhpcy50YXNrcyB8fCBbXSkubWFwKG0gPT4gbS50b1Byb3RvYnVmSlNPTihvcHRpb25zKSlcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIENhbmNlbFRhc2tzUmVzcG9uc2Uge1xuICAvKipcbiAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIENhbmNlbFRhc2tzUmVzcG9uc2VcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIHRhc2tzPzogVGFza1N1bW1hcnkuQXNPYmplY3RbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBDYW5jZWxUYXNrc1Jlc3BvbnNlXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICB0YXNrczogVGFza1N1bW1hcnkuQXNQcm90b2J1ZkpTT05bXSB8IG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBhcm1vbmlrLmFwaS5ncnBjLnYxLnRhc2tzLkdldFJlc3VsdElkc1JlcXVlc3RcbiAqL1xuZXhwb3J0IGNsYXNzIEdldFJlc3VsdElkc1JlcXVlc3QgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdhcm1vbmlrLmFwaS5ncnBjLnYxLnRhc2tzLkdldFJlc3VsdElkc1JlcXVlc3QnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBHZXRSZXN1bHRJZHNSZXF1ZXN0KCk7XG4gICAgR2V0UmVzdWx0SWRzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IEdldFJlc3VsdElkc1JlcXVlc3QpIHtcbiAgICBfaW5zdGFuY2UudGFza0lkID0gX2luc3RhbmNlLnRhc2tJZCB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IEdldFJlc3VsdElkc1JlcXVlc3QsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgKF9pbnN0YW5jZS50YXNrSWQgPSBfaW5zdGFuY2UudGFza0lkIHx8IFtdKS5wdXNoKFxuICAgICAgICAgICAgX3JlYWRlci5yZWFkU3RyaW5nKClcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgR2V0UmVzdWx0SWRzUmVxdWVzdC5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IEdldFJlc3VsdElkc1JlcXVlc3QsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UudGFza0lkICYmIF9pbnN0YW5jZS50YXNrSWQubGVuZ3RoKSB7XG4gICAgICBfd3JpdGVyLndyaXRlUmVwZWF0ZWRTdHJpbmcoMSwgX2luc3RhbmNlLnRhc2tJZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdGFza0lkOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIEdldFJlc3VsdElkc1JlcXVlc3QgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8R2V0UmVzdWx0SWRzUmVxdWVzdC5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy50YXNrSWQgPSAoX3ZhbHVlLnRhc2tJZCB8fCBbXSkuc2xpY2UoKTtcbiAgICBHZXRSZXN1bHRJZHNSZXF1ZXN0LnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgdGFza0lkKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fdGFza0lkO1xuICB9XG4gIHNldCB0YXNrSWQodmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fdGFza0lkID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgR2V0UmVzdWx0SWRzUmVxdWVzdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBHZXRSZXN1bHRJZHNSZXF1ZXN0LkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFza0lkOiAodGhpcy50YXNrSWQgfHwgW10pLnNsaWNlKClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBHZXRSZXN1bHRJZHNSZXF1ZXN0LkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFza0lkOiAodGhpcy50YXNrSWQgfHwgW10pLnNsaWNlKClcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIEdldFJlc3VsdElkc1JlcXVlc3Qge1xuICAvKipcbiAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIEdldFJlc3VsdElkc1JlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIHRhc2tJZDogc3RyaW5nW107XG4gIH1cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgR2V0UmVzdWx0SWRzUmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgdGFza0lkOiBzdHJpbmdbXTtcbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIGFybW9uaWsuYXBpLmdycGMudjEudGFza3MuR2V0UmVzdWx0SWRzUmVzcG9uc2VcbiAqL1xuZXhwb3J0IGNsYXNzIEdldFJlc3VsdElkc1Jlc3BvbnNlIGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnYXJtb25pay5hcGkuZ3JwYy52MS50YXNrcy5HZXRSZXN1bHRJZHNSZXNwb25zZSc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEdldFJlc3VsdElkc1Jlc3BvbnNlKCk7XG4gICAgR2V0UmVzdWx0SWRzUmVzcG9uc2UuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKVxuICAgICk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBHZXRSZXN1bHRJZHNSZXNwb25zZSkge1xuICAgIF9pbnN0YW5jZS50YXNrUmVzdWx0cyA9IF9pbnN0YW5jZS50YXNrUmVzdWx0cyB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IEdldFJlc3VsdElkc1Jlc3BvbnNlLFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VJbml0aWFsaXplcjEgPSBuZXcgR2V0UmVzdWx0SWRzUmVzcG9uc2UuTWFwVGFza1Jlc3VsdCgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBtZXNzYWdlSW5pdGlhbGl6ZXIxLFxuICAgICAgICAgICAgR2V0UmVzdWx0SWRzUmVzcG9uc2UuTWFwVGFza1Jlc3VsdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIChfaW5zdGFuY2UudGFza1Jlc3VsdHMgPSBfaW5zdGFuY2UudGFza1Jlc3VsdHMgfHwgW10pLnB1c2goXG4gICAgICAgICAgICBtZXNzYWdlSW5pdGlhbGl6ZXIxXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEdldFJlc3VsdElkc1Jlc3BvbnNlLnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogR2V0UmVzdWx0SWRzUmVzcG9uc2UsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UudGFza1Jlc3VsdHMgJiYgX2luc3RhbmNlLnRhc2tSZXN1bHRzLmxlbmd0aCkge1xuICAgICAgX3dyaXRlci53cml0ZVJlcGVhdGVkTWVzc2FnZShcbiAgICAgICAgMSxcbiAgICAgICAgX2luc3RhbmNlLnRhc2tSZXN1bHRzIGFzIGFueSxcbiAgICAgICAgR2V0UmVzdWx0SWRzUmVzcG9uc2UuTWFwVGFza1Jlc3VsdC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF90YXNrUmVzdWx0cz86IEdldFJlc3VsdElkc1Jlc3BvbnNlLk1hcFRhc2tSZXN1bHRbXTtcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIEdldFJlc3VsdElkc1Jlc3BvbnNlIHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPEdldFJlc3VsdElkc1Jlc3BvbnNlLkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLnRhc2tSZXN1bHRzID0gKF92YWx1ZS50YXNrUmVzdWx0cyB8fCBbXSkubWFwKFxuICAgICAgbSA9PiBuZXcgR2V0UmVzdWx0SWRzUmVzcG9uc2UuTWFwVGFza1Jlc3VsdChtKVxuICAgICk7XG4gICAgR2V0UmVzdWx0SWRzUmVzcG9uc2UucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCB0YXNrUmVzdWx0cygpOiBHZXRSZXN1bHRJZHNSZXNwb25zZS5NYXBUYXNrUmVzdWx0W10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl90YXNrUmVzdWx0cztcbiAgfVxuICBzZXQgdGFza1Jlc3VsdHModmFsdWU6IEdldFJlc3VsdElkc1Jlc3BvbnNlLk1hcFRhc2tSZXN1bHRbXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3Rhc2tSZXN1bHRzID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgR2V0UmVzdWx0SWRzUmVzcG9uc2Uuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogR2V0UmVzdWx0SWRzUmVzcG9uc2UuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICB0YXNrUmVzdWx0czogKHRoaXMudGFza1Jlc3VsdHMgfHwgW10pLm1hcChtID0+IG0udG9PYmplY3QoKSlcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBHZXRSZXN1bHRJZHNSZXNwb25zZS5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhc2tSZXN1bHRzOiAodGhpcy50YXNrUmVzdWx0cyB8fCBbXSkubWFwKG0gPT4gbS50b1Byb3RvYnVmSlNPTihvcHRpb25zKSlcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIEdldFJlc3VsdElkc1Jlc3BvbnNlIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBHZXRSZXN1bHRJZHNSZXNwb25zZVxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgdGFza1Jlc3VsdHM/OiBHZXRSZXN1bHRJZHNSZXNwb25zZS5NYXBUYXNrUmVzdWx0LkFzT2JqZWN0W107XG4gIH1cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgR2V0UmVzdWx0SWRzUmVzcG9uc2VcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIHRhc2tSZXN1bHRzOiBHZXRSZXN1bHRJZHNSZXNwb25zZS5NYXBUYXNrUmVzdWx0LkFzUHJvdG9idWZKU09OW10gfCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIGFybW9uaWsuYXBpLmdycGMudjEudGFza3MuR2V0UmVzdWx0SWRzUmVzcG9uc2UuTWFwVGFza1Jlc3VsdFxuICAgKi9cbiAgZXhwb3J0IGNsYXNzIE1hcFRhc2tSZXN1bHQgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gICAgc3RhdGljIGlkID0gJ2FybW9uaWsuYXBpLmdycGMudjEudGFza3MuR2V0UmVzdWx0SWRzUmVzcG9uc2UuTWFwVGFza1Jlc3VsdCc7XG5cbiAgICAvKipcbiAgICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IE1hcFRhc2tSZXN1bHQoKTtcbiAgICAgIE1hcFRhc2tSZXN1bHQuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICAgICk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IE1hcFRhc2tSZXN1bHQpIHtcbiAgICAgIF9pbnN0YW5jZS50YXNrSWQgPSBfaW5zdGFuY2UudGFza0lkIHx8ICcnO1xuICAgICAgX2luc3RhbmNlLnJlc3VsdElkcyA9IF9pbnN0YW5jZS5yZXN1bHRJZHMgfHwgW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIF9pbnN0YW5jZTogTWFwVGFza1Jlc3VsdCxcbiAgICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICAgICkge1xuICAgICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIF9pbnN0YW5jZS50YXNrSWQgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIChfaW5zdGFuY2UucmVzdWx0SWRzID0gX2luc3RhbmNlLnJlc3VsdElkcyB8fCBbXSkucHVzaChcbiAgICAgICAgICAgICAgX3JlYWRlci5yZWFkU3RyaW5nKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBNYXBUYXNrUmVzdWx0LnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoXG4gICAgICBfaW5zdGFuY2U6IE1hcFRhc2tSZXN1bHQsXG4gICAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgICApIHtcbiAgICAgIGlmIChfaW5zdGFuY2UudGFza0lkKSB7XG4gICAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMSwgX2luc3RhbmNlLnRhc2tJZCk7XG4gICAgICB9XG4gICAgICBpZiAoX2luc3RhbmNlLnJlc3VsdElkcyAmJiBfaW5zdGFuY2UucmVzdWx0SWRzLmxlbmd0aCkge1xuICAgICAgICBfd3JpdGVyLndyaXRlUmVwZWF0ZWRTdHJpbmcoMiwgX2luc3RhbmNlLnJlc3VsdElkcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdGFza0lkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfcmVzdWx0SWRzOiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIE1hcFRhc2tSZXN1bHQgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPE1hcFRhc2tSZXN1bHQuQXNPYmplY3Q+KSB7XG4gICAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgICB0aGlzLnRhc2tJZCA9IF92YWx1ZS50YXNrSWQ7XG4gICAgICB0aGlzLnJlc3VsdElkcyA9IChfdmFsdWUucmVzdWx0SWRzIHx8IFtdKS5zbGljZSgpO1xuICAgICAgTWFwVGFza1Jlc3VsdC5yZWZpbmVWYWx1ZXModGhpcyk7XG4gICAgfVxuICAgIGdldCB0YXNrSWQoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLl90YXNrSWQ7XG4gICAgfVxuICAgIHNldCB0YXNrSWQodmFsdWU6IHN0cmluZykge1xuICAgICAgdGhpcy5fdGFza0lkID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCByZXN1bHRJZHMoKTogc3RyaW5nW10ge1xuICAgICAgcmV0dXJuIHRoaXMuX3Jlc3VsdElkcztcbiAgICB9XG4gICAgc2V0IHJlc3VsdElkcyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICAgIHRoaXMuX3Jlc3VsdElkcyA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgICBNYXBUYXNrUmVzdWx0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgICAqL1xuICAgIHRvT2JqZWN0KCk6IE1hcFRhc2tSZXN1bHQuQXNPYmplY3Qge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGFza0lkOiB0aGlzLnRhc2tJZCxcbiAgICAgICAgcmVzdWx0SWRzOiAodGhpcy5yZXN1bHRJZHMgfHwgW10pLnNsaWNlKClcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAgICovXG4gICAgdG9KU09OKCkge1xuICAgICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAgICovXG4gICAgdG9Qcm90b2J1ZkpTT04oXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICAgKTogTWFwVGFza1Jlc3VsdC5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0YXNrSWQ6IHRoaXMudGFza0lkLFxuICAgICAgICByZXN1bHRJZHM6ICh0aGlzLnJlc3VsdElkcyB8fCBbXSkuc2xpY2UoKVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgZXhwb3J0IG1vZHVsZSBNYXBUYXNrUmVzdWx0IHtcbiAgICAvKipcbiAgICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgTWFwVGFza1Jlc3VsdFxuICAgICAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgICAgdGFza0lkOiBzdHJpbmc7XG4gICAgICByZXN1bHRJZHM6IHN0cmluZ1tdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIE1hcFRhc2tSZXN1bHRcbiAgICAgKi9cbiAgICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICAgIHRhc2tJZDogc3RyaW5nO1xuICAgICAgcmVzdWx0SWRzOiBzdHJpbmdbXTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBhcm1vbmlrLmFwaS5ncnBjLnYxLnRhc2tzLkNvdW50VGFza3NCeVN0YXR1c1JlcXVlc3RcbiAqL1xuZXhwb3J0IGNsYXNzIENvdW50VGFza3NCeVN0YXR1c1JlcXVlc3QgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdhcm1vbmlrLmFwaS5ncnBjLnYxLnRhc2tzLkNvdW50VGFza3NCeVN0YXR1c1JlcXVlc3QnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBDb3VudFRhc2tzQnlTdGF0dXNSZXF1ZXN0KCk7XG4gICAgQ291bnRUYXNrc0J5U3RhdHVzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IENvdW50VGFza3NCeVN0YXR1c1JlcXVlc3QpIHtcbiAgICBfaW5zdGFuY2UuZmlsdGVycyA9IF9pbnN0YW5jZS5maWx0ZXJzIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IENvdW50VGFza3NCeVN0YXR1c1JlcXVlc3QsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgX2luc3RhbmNlLmZpbHRlcnMgPSBuZXcgYXJtb25pa0FwaUdycGNWMVRhc2tzMDA3LkZpbHRlcnMoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgX2luc3RhbmNlLmZpbHRlcnMsXG4gICAgICAgICAgICBhcm1vbmlrQXBpR3JwY1YxVGFza3MwMDcuRmlsdGVycy5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQ291bnRUYXNrc0J5U3RhdHVzUmVxdWVzdC5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IENvdW50VGFza3NCeVN0YXR1c1JlcXVlc3QsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2UuZmlsdGVycykge1xuICAgICAgX3dyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAgIDEsXG4gICAgICAgIF9pbnN0YW5jZS5maWx0ZXJzIGFzIGFueSxcbiAgICAgICAgYXJtb25pa0FwaUdycGNWMVRhc2tzMDA3LkZpbHRlcnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZmlsdGVycz86IGFybW9uaWtBcGlHcnBjVjFUYXNrczAwNy5GaWx0ZXJzO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgQ291bnRUYXNrc0J5U3RhdHVzUmVxdWVzdCB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxDb3VudFRhc2tzQnlTdGF0dXNSZXF1ZXN0LkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLmZpbHRlcnMgPSBfdmFsdWUuZmlsdGVyc1xuICAgICAgPyBuZXcgYXJtb25pa0FwaUdycGNWMVRhc2tzMDA3LkZpbHRlcnMoX3ZhbHVlLmZpbHRlcnMpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBDb3VudFRhc2tzQnlTdGF0dXNSZXF1ZXN0LnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgfVxuICBnZXQgZmlsdGVycygpOiBhcm1vbmlrQXBpR3JwY1YxVGFza3MwMDcuRmlsdGVycyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnM7XG4gIH1cbiAgc2V0IGZpbHRlcnModmFsdWU6IGFybW9uaWtBcGlHcnBjVjFUYXNrczAwNy5GaWx0ZXJzIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZmlsdGVycyA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIENvdW50VGFza3NCeVN0YXR1c1JlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogQ291bnRUYXNrc0J5U3RhdHVzUmVxdWVzdC5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbHRlcnM6IHRoaXMuZmlsdGVycyA/IHRoaXMuZmlsdGVycy50b09iamVjdCgpIDogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgKi9cbiAgdG9Qcm90b2J1ZkpTT04oXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgKTogQ291bnRUYXNrc0J5U3RhdHVzUmVxdWVzdC5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbHRlcnM6IHRoaXMuZmlsdGVycyA/IHRoaXMuZmlsdGVycy50b1Byb3RvYnVmSlNPTihvcHRpb25zKSA6IG51bGxcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIENvdW50VGFza3NCeVN0YXR1c1JlcXVlc3Qge1xuICAvKipcbiAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIENvdW50VGFza3NCeVN0YXR1c1JlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIGZpbHRlcnM/OiBhcm1vbmlrQXBpR3JwY1YxVGFza3MwMDcuRmlsdGVycy5Bc09iamVjdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBDb3VudFRhc2tzQnlTdGF0dXNSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICBmaWx0ZXJzOiBhcm1vbmlrQXBpR3JwY1YxVGFza3MwMDcuRmlsdGVycy5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBhcm1vbmlrLmFwaS5ncnBjLnYxLnRhc2tzLkNvdW50VGFza3NCeVN0YXR1c1Jlc3BvbnNlXG4gKi9cbmV4cG9ydCBjbGFzcyBDb3VudFRhc2tzQnlTdGF0dXNSZXNwb25zZSBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ2FybW9uaWsuYXBpLmdycGMudjEudGFza3MuQ291bnRUYXNrc0J5U3RhdHVzUmVzcG9uc2UnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBDb3VudFRhc2tzQnlTdGF0dXNSZXNwb25zZSgpO1xuICAgIENvdW50VGFza3NCeVN0YXR1c1Jlc3BvbnNlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIGluc3RhbmNlLFxuICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICApO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogQ291bnRUYXNrc0J5U3RhdHVzUmVzcG9uc2UpIHtcbiAgICBfaW5zdGFuY2Uuc3RhdHVzID0gX2luc3RhbmNlLnN0YXR1cyB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IENvdW50VGFza3NCeVN0YXR1c1Jlc3BvbnNlLFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VJbml0aWFsaXplcjEgPSBuZXcgYXJtb25pa0FwaUdycGNWMTAwNS5TdGF0dXNDb3VudCgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBtZXNzYWdlSW5pdGlhbGl6ZXIxLFxuICAgICAgICAgICAgYXJtb25pa0FwaUdycGNWMTAwNS5TdGF0dXNDb3VudC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIChfaW5zdGFuY2Uuc3RhdHVzID0gX2luc3RhbmNlLnN0YXR1cyB8fCBbXSkucHVzaChtZXNzYWdlSW5pdGlhbGl6ZXIxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIENvdW50VGFza3NCeVN0YXR1c1Jlc3BvbnNlLnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogQ291bnRUYXNrc0J5U3RhdHVzUmVzcG9uc2UsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2Uuc3RhdHVzICYmIF9pbnN0YW5jZS5zdGF0dXMubGVuZ3RoKSB7XG4gICAgICBfd3JpdGVyLndyaXRlUmVwZWF0ZWRNZXNzYWdlKFxuICAgICAgICAxLFxuICAgICAgICBfaW5zdGFuY2Uuc3RhdHVzIGFzIGFueSxcbiAgICAgICAgYXJtb25pa0FwaUdycGNWMTAwNS5TdGF0dXNDb3VudC5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zdGF0dXM/OiBhcm1vbmlrQXBpR3JwY1YxMDA1LlN0YXR1c0NvdW50W107XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBDb3VudFRhc2tzQnlTdGF0dXNSZXNwb25zZSB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgKi9cbiAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxDb3VudFRhc2tzQnlTdGF0dXNSZXNwb25zZS5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5zdGF0dXMgPSAoX3ZhbHVlLnN0YXR1cyB8fCBbXSkubWFwKFxuICAgICAgbSA9PiBuZXcgYXJtb25pa0FwaUdycGNWMTAwNS5TdGF0dXNDb3VudChtKVxuICAgICk7XG4gICAgQ291bnRUYXNrc0J5U3RhdHVzUmVzcG9uc2UucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBzdGF0dXMoKTogYXJtb25pa0FwaUdycGNWMTAwNS5TdGF0dXNDb3VudFtdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdHVzO1xuICB9XG4gIHNldCBzdGF0dXModmFsdWU6IGFybW9uaWtBcGlHcnBjVjEwMDUuU3RhdHVzQ291bnRbXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3N0YXR1cyA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgIENvdW50VGFza3NCeVN0YXR1c1Jlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IENvdW50VGFza3NCeVN0YXR1c1Jlc3BvbnNlLkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiAodGhpcy5zdGF0dXMgfHwgW10pLm1hcChtID0+IG0udG9PYmplY3QoKSlcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBDb3VudFRhc2tzQnlTdGF0dXNSZXNwb25zZS5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogKHRoaXMuc3RhdHVzIHx8IFtdKS5tYXAobSA9PiBtLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpKVxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBtb2R1bGUgQ291bnRUYXNrc0J5U3RhdHVzUmVzcG9uc2Uge1xuICAvKipcbiAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIENvdW50VGFza3NCeVN0YXR1c1Jlc3BvbnNlXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICBzdGF0dXM/OiBhcm1vbmlrQXBpR3JwY1YxMDA1LlN0YXR1c0NvdW50LkFzT2JqZWN0W107XG4gIH1cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgQ291bnRUYXNrc0J5U3RhdHVzUmVzcG9uc2VcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIHN0YXR1czogYXJtb25pa0FwaUdycGNWMTAwNS5TdGF0dXNDb3VudC5Bc1Byb3RvYnVmSlNPTltdIHwgbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIGFybW9uaWsuYXBpLmdycGMudjEudGFza3MuU3VibWl0VGFza3NSZXF1ZXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBTdWJtaXRUYXNrc1JlcXVlc3QgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdhcm1vbmlrLmFwaS5ncnBjLnYxLnRhc2tzLlN1Ym1pdFRhc2tzUmVxdWVzdCc7XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFN1Ym1pdFRhc2tzUmVxdWVzdCgpO1xuICAgIFN1Ym1pdFRhc2tzUmVxdWVzdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IFN1Ym1pdFRhc2tzUmVxdWVzdCkge1xuICAgIF9pbnN0YW5jZS5zZXNzaW9uSWQgPSBfaW5zdGFuY2Uuc2Vzc2lvbklkIHx8ICcnO1xuICAgIF9pbnN0YW5jZS50YXNrT3B0aW9ucyA9IF9pbnN0YW5jZS50YXNrT3B0aW9ucyB8fCB1bmRlZmluZWQ7XG4gICAgX2luc3RhbmNlLnRhc2tDcmVhdGlvbnMgPSBfaW5zdGFuY2UudGFza0NyZWF0aW9ucyB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IFN1Ym1pdFRhc2tzUmVxdWVzdCxcbiAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgKSB7XG4gICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgIHN3aXRjaCAoX3JlYWRlci5nZXRGaWVsZE51bWJlcigpKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBfaW5zdGFuY2Uuc2Vzc2lvbklkID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBfaW5zdGFuY2UudGFza09wdGlvbnMgPSBuZXcgYXJtb25pa0FwaUdycGNWMTAwNS5UYXNrT3B0aW9ucygpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2UudGFza09wdGlvbnMsXG4gICAgICAgICAgICBhcm1vbmlrQXBpR3JwY1YxMDA1LlRhc2tPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBjb25zdCBtZXNzYWdlSW5pdGlhbGl6ZXIzID0gbmV3IFN1Ym1pdFRhc2tzUmVxdWVzdC5UYXNrQ3JlYXRpb24oKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgbWVzc2FnZUluaXRpYWxpemVyMyxcbiAgICAgICAgICAgIFN1Ym1pdFRhc2tzUmVxdWVzdC5UYXNrQ3JlYXRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICAoX2luc3RhbmNlLnRhc2tDcmVhdGlvbnMgPSBfaW5zdGFuY2UudGFza0NyZWF0aW9ucyB8fCBbXSkucHVzaChcbiAgICAgICAgICAgIG1lc3NhZ2VJbml0aWFsaXplcjNcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgU3VibWl0VGFza3NSZXF1ZXN0LnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogU3VibWl0VGFza3NSZXF1ZXN0LFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLnNlc3Npb25JZCkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygxLCBfaW5zdGFuY2Uuc2Vzc2lvbklkKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS50YXNrT3B0aW9ucykge1xuICAgICAgX3dyaXRlci53cml0ZU1lc3NhZ2UoXG4gICAgICAgIDIsXG4gICAgICAgIF9pbnN0YW5jZS50YXNrT3B0aW9ucyBhcyBhbnksXG4gICAgICAgIGFybW9uaWtBcGlHcnBjVjEwMDUuVGFza09wdGlvbnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UudGFza0NyZWF0aW9ucyAmJiBfaW5zdGFuY2UudGFza0NyZWF0aW9ucy5sZW5ndGgpIHtcbiAgICAgIF93cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAgIDMsXG4gICAgICAgIF9pbnN0YW5jZS50YXNrQ3JlYXRpb25zIGFzIGFueSxcbiAgICAgICAgU3VibWl0VGFza3NSZXF1ZXN0LlRhc2tDcmVhdGlvbi5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfdGFza09wdGlvbnM/OiBhcm1vbmlrQXBpR3JwY1YxMDA1LlRhc2tPcHRpb25zO1xuICBwcml2YXRlIF90YXNrQ3JlYXRpb25zPzogU3VibWl0VGFza3NSZXF1ZXN0LlRhc2tDcmVhdGlvbltdO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgU3VibWl0VGFza3NSZXF1ZXN0IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPFN1Ym1pdFRhc2tzUmVxdWVzdC5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5zZXNzaW9uSWQgPSBfdmFsdWUuc2Vzc2lvbklkO1xuICAgIHRoaXMudGFza09wdGlvbnMgPSBfdmFsdWUudGFza09wdGlvbnNcbiAgICAgID8gbmV3IGFybW9uaWtBcGlHcnBjVjEwMDUuVGFza09wdGlvbnMoX3ZhbHVlLnRhc2tPcHRpb25zKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy50YXNrQ3JlYXRpb25zID0gKF92YWx1ZS50YXNrQ3JlYXRpb25zIHx8IFtdKS5tYXAoXG4gICAgICBtID0+IG5ldyBTdWJtaXRUYXNrc1JlcXVlc3QuVGFza0NyZWF0aW9uKG0pXG4gICAgKTtcbiAgICBTdWJtaXRUYXNrc1JlcXVlc3QucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG4gIHNldCBzZXNzaW9uSWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHZhbHVlO1xuICB9XG4gIGdldCB0YXNrT3B0aW9ucygpOiBhcm1vbmlrQXBpR3JwY1YxMDA1LlRhc2tPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdGFza09wdGlvbnM7XG4gIH1cbiAgc2V0IHRhc2tPcHRpb25zKHZhbHVlOiBhcm1vbmlrQXBpR3JwY1YxMDA1LlRhc2tPcHRpb25zIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fdGFza09wdGlvbnMgPSB2YWx1ZTtcbiAgfVxuICBnZXQgdGFza0NyZWF0aW9ucygpOiBTdWJtaXRUYXNrc1JlcXVlc3QuVGFza0NyZWF0aW9uW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl90YXNrQ3JlYXRpb25zO1xuICB9XG4gIHNldCB0YXNrQ3JlYXRpb25zKHZhbHVlOiBTdWJtaXRUYXNrc1JlcXVlc3QuVGFza0NyZWF0aW9uW10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl90YXNrQ3JlYXRpb25zID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgU3VibWl0VGFza3NSZXF1ZXN0LnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IFN1Ym1pdFRhc2tzUmVxdWVzdC5Bc09iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQsXG4gICAgICB0YXNrT3B0aW9uczogdGhpcy50YXNrT3B0aW9ucyA/IHRoaXMudGFza09wdGlvbnMudG9PYmplY3QoKSA6IHVuZGVmaW5lZCxcbiAgICAgIHRhc2tDcmVhdGlvbnM6ICh0aGlzLnRhc2tDcmVhdGlvbnMgfHwgW10pLm1hcChtID0+IG0udG9PYmplY3QoKSlcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBTdWJtaXRUYXNrc1JlcXVlc3QuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLFxuICAgICAgdGFza09wdGlvbnM6IHRoaXMudGFza09wdGlvbnNcbiAgICAgICAgPyB0aGlzLnRhc2tPcHRpb25zLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRhc2tDcmVhdGlvbnM6ICh0aGlzLnRhc2tDcmVhdGlvbnMgfHwgW10pLm1hcChtID0+XG4gICAgICAgIG0udG9Qcm90b2J1ZkpTT04ob3B0aW9ucylcbiAgICAgIClcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIFN1Ym1pdFRhc2tzUmVxdWVzdCB7XG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBmb3IgU3VibWl0VGFza3NSZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgICB0YXNrT3B0aW9ucz86IGFybW9uaWtBcGlHcnBjVjEwMDUuVGFza09wdGlvbnMuQXNPYmplY3Q7XG4gICAgdGFza0NyZWF0aW9ucz86IFN1Ym1pdFRhc2tzUmVxdWVzdC5UYXNrQ3JlYXRpb24uQXNPYmplY3RbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBTdWJtaXRUYXNrc1JlcXVlc3RcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgIHNlc3Npb25JZDogc3RyaW5nO1xuICAgIHRhc2tPcHRpb25zOiBhcm1vbmlrQXBpR3JwY1YxMDA1LlRhc2tPcHRpb25zLkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgICB0YXNrQ3JlYXRpb25zOiBTdWJtaXRUYXNrc1JlcXVlc3QuVGFza0NyZWF0aW9uLkFzUHJvdG9idWZKU09OW10gfCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIGFybW9uaWsuYXBpLmdycGMudjEudGFza3MuU3VibWl0VGFza3NSZXF1ZXN0LlRhc2tDcmVhdGlvblxuICAgKi9cbiAgZXhwb3J0IGNsYXNzIFRhc2tDcmVhdGlvbiBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgICBzdGF0aWMgaWQgPSAnYXJtb25pay5hcGkuZ3JwYy52MS50YXNrcy5TdWJtaXRUYXNrc1JlcXVlc3QuVGFza0NyZWF0aW9uJztcblxuICAgIC8qKlxuICAgICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgVGFza0NyZWF0aW9uKCk7XG4gICAgICBUYXNrQ3JlYXRpb24uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICAgICk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IFRhc2tDcmVhdGlvbikge1xuICAgICAgX2luc3RhbmNlLmV4cGVjdGVkT3V0cHV0S2V5cyA9IF9pbnN0YW5jZS5leHBlY3RlZE91dHB1dEtleXMgfHwgW107XG4gICAgICBfaW5zdGFuY2UuZGF0YURlcGVuZGVuY2llcyA9IF9pbnN0YW5jZS5kYXRhRGVwZW5kZW5jaWVzIHx8IFtdO1xuICAgICAgX2luc3RhbmNlLnBheWxvYWRJZCA9IF9pbnN0YW5jZS5wYXlsb2FkSWQgfHwgJyc7XG4gICAgICBfaW5zdGFuY2UudGFza09wdGlvbnMgPSBfaW5zdGFuY2UudGFza09wdGlvbnMgfHwgdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBfaW5zdGFuY2U6IFRhc2tDcmVhdGlvbixcbiAgICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICAgICkge1xuICAgICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIChfaW5zdGFuY2UuZXhwZWN0ZWRPdXRwdXRLZXlzID1cbiAgICAgICAgICAgICAgX2luc3RhbmNlLmV4cGVjdGVkT3V0cHV0S2V5cyB8fCBbXSkucHVzaChfcmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAoX2luc3RhbmNlLmRhdGFEZXBlbmRlbmNpZXMgPVxuICAgICAgICAgICAgICBfaW5zdGFuY2UuZGF0YURlcGVuZGVuY2llcyB8fCBbXSkucHVzaChfcmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBfaW5zdGFuY2UucGF5bG9hZElkID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBfaW5zdGFuY2UudGFza09wdGlvbnMgPSBuZXcgYXJtb25pa0FwaUdycGNWMTAwNS5UYXNrT3B0aW9ucygpO1xuICAgICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgICAgX2luc3RhbmNlLnRhc2tPcHRpb25zLFxuICAgICAgICAgICAgICBhcm1vbmlrQXBpR3JwY1YxMDA1LlRhc2tPcHRpb25zLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIFRhc2tDcmVhdGlvbi5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgICAgX2luc3RhbmNlOiBUYXNrQ3JlYXRpb24sXG4gICAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgICApIHtcbiAgICAgIGlmIChfaW5zdGFuY2UuZXhwZWN0ZWRPdXRwdXRLZXlzICYmIF9pbnN0YW5jZS5leHBlY3RlZE91dHB1dEtleXMubGVuZ3RoKSB7XG4gICAgICAgIF93cml0ZXIud3JpdGVSZXBlYXRlZFN0cmluZygxLCBfaW5zdGFuY2UuZXhwZWN0ZWRPdXRwdXRLZXlzKTtcbiAgICAgIH1cbiAgICAgIGlmIChfaW5zdGFuY2UuZGF0YURlcGVuZGVuY2llcyAmJiBfaW5zdGFuY2UuZGF0YURlcGVuZGVuY2llcy5sZW5ndGgpIHtcbiAgICAgICAgX3dyaXRlci53cml0ZVJlcGVhdGVkU3RyaW5nKDIsIF9pbnN0YW5jZS5kYXRhRGVwZW5kZW5jaWVzKTtcbiAgICAgIH1cbiAgICAgIGlmIChfaW5zdGFuY2UucGF5bG9hZElkKSB7XG4gICAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMywgX2luc3RhbmNlLnBheWxvYWRJZCk7XG4gICAgICB9XG4gICAgICBpZiAoX2luc3RhbmNlLnRhc2tPcHRpb25zKSB7XG4gICAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICAgIDQsXG4gICAgICAgICAgX2luc3RhbmNlLnRhc2tPcHRpb25zIGFzIGFueSxcbiAgICAgICAgICBhcm1vbmlrQXBpR3JwY1YxMDA1LlRhc2tPcHRpb25zLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZXhwZWN0ZWRPdXRwdXRLZXlzOiBzdHJpbmdbXTtcbiAgICBwcml2YXRlIF9kYXRhRGVwZW5kZW5jaWVzOiBzdHJpbmdbXTtcbiAgICBwcml2YXRlIF9wYXlsb2FkSWQ6IHN0cmluZztcbiAgICBwcml2YXRlIF90YXNrT3B0aW9ucz86IGFybW9uaWtBcGlHcnBjVjEwMDUuVGFza09wdGlvbnM7XG5cbiAgICAvKipcbiAgICAgKiBNZXNzYWdlIGNvbnN0cnVjdG9yLiBJbml0aWFsaXplcyB0aGUgcHJvcGVydGllcyBhbmQgYXBwbGllcyBkZWZhdWx0IFByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBUYXNrQ3JlYXRpb24gdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPFRhc2tDcmVhdGlvbi5Bc09iamVjdD4pIHtcbiAgICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICAgIHRoaXMuZXhwZWN0ZWRPdXRwdXRLZXlzID0gKF92YWx1ZS5leHBlY3RlZE91dHB1dEtleXMgfHwgW10pLnNsaWNlKCk7XG4gICAgICB0aGlzLmRhdGFEZXBlbmRlbmNpZXMgPSAoX3ZhbHVlLmRhdGFEZXBlbmRlbmNpZXMgfHwgW10pLnNsaWNlKCk7XG4gICAgICB0aGlzLnBheWxvYWRJZCA9IF92YWx1ZS5wYXlsb2FkSWQ7XG4gICAgICB0aGlzLnRhc2tPcHRpb25zID0gX3ZhbHVlLnRhc2tPcHRpb25zXG4gICAgICAgID8gbmV3IGFybW9uaWtBcGlHcnBjVjEwMDUuVGFza09wdGlvbnMoX3ZhbHVlLnRhc2tPcHRpb25zKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIFRhc2tDcmVhdGlvbi5yZWZpbmVWYWx1ZXModGhpcyk7XG4gICAgfVxuICAgIGdldCBleHBlY3RlZE91dHB1dEtleXMoKTogc3RyaW5nW10ge1xuICAgICAgcmV0dXJuIHRoaXMuX2V4cGVjdGVkT3V0cHV0S2V5cztcbiAgICB9XG4gICAgc2V0IGV4cGVjdGVkT3V0cHV0S2V5cyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICAgIHRoaXMuX2V4cGVjdGVkT3V0cHV0S2V5cyA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgZGF0YURlcGVuZGVuY2llcygpOiBzdHJpbmdbXSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGF0YURlcGVuZGVuY2llcztcbiAgICB9XG4gICAgc2V0IGRhdGFEZXBlbmRlbmNpZXModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgICB0aGlzLl9kYXRhRGVwZW5kZW5jaWVzID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBwYXlsb2FkSWQoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLl9wYXlsb2FkSWQ7XG4gICAgfVxuICAgIHNldCBwYXlsb2FkSWQodmFsdWU6IHN0cmluZykge1xuICAgICAgdGhpcy5fcGF5bG9hZElkID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCB0YXNrT3B0aW9ucygpOiBhcm1vbmlrQXBpR3JwY1YxMDA1LlRhc2tPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgICAgIHJldHVybiB0aGlzLl90YXNrT3B0aW9ucztcbiAgICB9XG4gICAgc2V0IHRhc2tPcHRpb25zKHZhbHVlOiBhcm1vbmlrQXBpR3JwY1YxMDA1LlRhc2tPcHRpb25zIHwgdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl90YXNrT3B0aW9ucyA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgICBUYXNrQ3JlYXRpb24uc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAgICovXG4gICAgdG9PYmplY3QoKTogVGFza0NyZWF0aW9uLkFzT2JqZWN0IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4cGVjdGVkT3V0cHV0S2V5czogKHRoaXMuZXhwZWN0ZWRPdXRwdXRLZXlzIHx8IFtdKS5zbGljZSgpLFxuICAgICAgICBkYXRhRGVwZW5kZW5jaWVzOiAodGhpcy5kYXRhRGVwZW5kZW5jaWVzIHx8IFtdKS5zbGljZSgpLFxuICAgICAgICBwYXlsb2FkSWQ6IHRoaXMucGF5bG9hZElkLFxuICAgICAgICB0YXNrT3B0aW9uczogdGhpcy50YXNrT3B0aW9ucyA/IHRoaXMudGFza09wdGlvbnMudG9PYmplY3QoKSA6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICAgKi9cbiAgICB0b1Byb3RvYnVmSlNPTihcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgICApOiBUYXNrQ3JlYXRpb24uQXNQcm90b2J1ZkpTT04ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXhwZWN0ZWRPdXRwdXRLZXlzOiAodGhpcy5leHBlY3RlZE91dHB1dEtleXMgfHwgW10pLnNsaWNlKCksXG4gICAgICAgIGRhdGFEZXBlbmRlbmNpZXM6ICh0aGlzLmRhdGFEZXBlbmRlbmNpZXMgfHwgW10pLnNsaWNlKCksXG4gICAgICAgIHBheWxvYWRJZDogdGhpcy5wYXlsb2FkSWQsXG4gICAgICAgIHRhc2tPcHRpb25zOiB0aGlzLnRhc2tPcHRpb25zXG4gICAgICAgICAgPyB0aGlzLnRhc2tPcHRpb25zLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpXG4gICAgICAgICAgOiBudWxsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBleHBvcnQgbW9kdWxlIFRhc2tDcmVhdGlvbiB7XG4gICAgLyoqXG4gICAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIFRhc2tDcmVhdGlvblxuICAgICAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgICAgZXhwZWN0ZWRPdXRwdXRLZXlzOiBzdHJpbmdbXTtcbiAgICAgIGRhdGFEZXBlbmRlbmNpZXM6IHN0cmluZ1tdO1xuICAgICAgcGF5bG9hZElkOiBzdHJpbmc7XG4gICAgICB0YXNrT3B0aW9ucz86IGFybW9uaWtBcGlHcnBjVjEwMDUuVGFza09wdGlvbnMuQXNPYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgVGFza0NyZWF0aW9uXG4gICAgICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgICBleHBlY3RlZE91dHB1dEtleXM6IHN0cmluZ1tdO1xuICAgICAgZGF0YURlcGVuZGVuY2llczogc3RyaW5nW107XG4gICAgICBwYXlsb2FkSWQ6IHN0cmluZztcbiAgICAgIHRhc2tPcHRpb25zOiBhcm1vbmlrQXBpR3JwY1YxMDA1LlRhc2tPcHRpb25zLkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBhcm1vbmlrLmFwaS5ncnBjLnYxLnRhc2tzLlN1Ym1pdFRhc2tzUmVzcG9uc2VcbiAqL1xuZXhwb3J0IGNsYXNzIFN1Ym1pdFRhc2tzUmVzcG9uc2UgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gIHN0YXRpYyBpZCA9ICdhcm1vbmlrLmFwaS5ncnBjLnYxLnRhc2tzLlN1Ym1pdFRhc2tzUmVzcG9uc2UnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBTdWJtaXRUYXNrc1Jlc3BvbnNlKCk7XG4gICAgU3VibWl0VGFza3NSZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IFN1Ym1pdFRhc2tzUmVzcG9uc2UpIHtcbiAgICBfaW5zdGFuY2UudGFza0luZm9zID0gX2luc3RhbmNlLnRhc2tJbmZvcyB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IFN1Ym1pdFRhc2tzUmVzcG9uc2UsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgY29uc3QgbWVzc2FnZUluaXRpYWxpemVyMSA9IG5ldyBTdWJtaXRUYXNrc1Jlc3BvbnNlLlRhc2tJbmZvKCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIG1lc3NhZ2VJbml0aWFsaXplcjEsXG4gICAgICAgICAgICBTdWJtaXRUYXNrc1Jlc3BvbnNlLlRhc2tJbmZvLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgKF9pbnN0YW5jZS50YXNrSW5mb3MgPSBfaW5zdGFuY2UudGFza0luZm9zIHx8IFtdKS5wdXNoKFxuICAgICAgICAgICAgbWVzc2FnZUluaXRpYWxpemVyMVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBTdWJtaXRUYXNrc1Jlc3BvbnNlLnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogU3VibWl0VGFza3NSZXNwb25zZSxcbiAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgKSB7XG4gICAgaWYgKF9pbnN0YW5jZS50YXNrSW5mb3MgJiYgX2luc3RhbmNlLnRhc2tJbmZvcy5sZW5ndGgpIHtcbiAgICAgIF93cml0ZXIud3JpdGVSZXBlYXRlZE1lc3NhZ2UoXG4gICAgICAgIDEsXG4gICAgICAgIF9pbnN0YW5jZS50YXNrSW5mb3MgYXMgYW55LFxuICAgICAgICBTdWJtaXRUYXNrc1Jlc3BvbnNlLlRhc2tJbmZvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3Rhc2tJbmZvcz86IFN1Ym1pdFRhc2tzUmVzcG9uc2UuVGFza0luZm9bXTtcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIFN1Ym1pdFRhc2tzUmVzcG9uc2UgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8U3VibWl0VGFza3NSZXNwb25zZS5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy50YXNrSW5mb3MgPSAoX3ZhbHVlLnRhc2tJbmZvcyB8fCBbXSkubWFwKFxuICAgICAgbSA9PiBuZXcgU3VibWl0VGFza3NSZXNwb25zZS5UYXNrSW5mbyhtKVxuICAgICk7XG4gICAgU3VibWl0VGFza3NSZXNwb25zZS5yZWZpbmVWYWx1ZXModGhpcyk7XG4gIH1cbiAgZ2V0IHRhc2tJbmZvcygpOiBTdWJtaXRUYXNrc1Jlc3BvbnNlLlRhc2tJbmZvW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl90YXNrSW5mb3M7XG4gIH1cbiAgc2V0IHRhc2tJbmZvcyh2YWx1ZTogU3VibWl0VGFza3NSZXNwb25zZS5UYXNrSW5mb1tdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fdGFza0luZm9zID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICovXG4gIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgU3VibWl0VGFza3NSZXNwb25zZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlcih0aGlzLCB3cml0ZXIpO1xuICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAqL1xuICB0b09iamVjdCgpOiBTdWJtaXRUYXNrc1Jlc3BvbnNlLkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFza0luZm9zOiAodGhpcy50YXNrSW5mb3MgfHwgW10pLm1hcChtID0+IG0udG9PYmplY3QoKSlcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBTdWJtaXRUYXNrc1Jlc3BvbnNlLkFzUHJvdG9idWZKU09OIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFza0luZm9zOiAodGhpcy50YXNrSW5mb3MgfHwgW10pLm1hcChtID0+IG0udG9Qcm90b2J1ZkpTT04ob3B0aW9ucykpXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBTdWJtaXRUYXNrc1Jlc3BvbnNlIHtcbiAgLyoqXG4gICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBTdWJtaXRUYXNrc1Jlc3BvbnNlXG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICB0YXNrSW5mb3M/OiBTdWJtaXRUYXNrc1Jlc3BvbnNlLlRhc2tJbmZvLkFzT2JqZWN0W107XG4gIH1cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgU3VibWl0VGFza3NSZXNwb25zZVxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgdGFza0luZm9zOiBTdWJtaXRUYXNrc1Jlc3BvbnNlLlRhc2tJbmZvLkFzUHJvdG9idWZKU09OW10gfCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIGFybW9uaWsuYXBpLmdycGMudjEudGFza3MuU3VibWl0VGFza3NSZXNwb25zZS5UYXNrSW5mb1xuICAgKi9cbiAgZXhwb3J0IGNsYXNzIFRhc2tJbmZvIGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICAgIHN0YXRpYyBpZCA9ICdhcm1vbmlrLmFwaS5ncnBjLnYxLnRhc2tzLlN1Ym1pdFRhc2tzUmVzcG9uc2UuVGFza0luZm8nO1xuXG4gICAgLyoqXG4gICAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBUYXNrSW5mbygpO1xuICAgICAgVGFza0luZm8uZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKGluc3RhbmNlLCBuZXcgQmluYXJ5UmVhZGVyKGJ5dGVzKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IFRhc2tJbmZvKSB7XG4gICAgICBfaW5zdGFuY2UudGFza0lkID0gX2luc3RhbmNlLnRhc2tJZCB8fCAnJztcbiAgICAgIF9pbnN0YW5jZS5leHBlY3RlZE91dHB1dElkcyA9IF9pbnN0YW5jZS5leHBlY3RlZE91dHB1dElkcyB8fCBbXTtcbiAgICAgIF9pbnN0YW5jZS5kYXRhRGVwZW5kZW5jaWVzID0gX2luc3RhbmNlLmRhdGFEZXBlbmRlbmNpZXMgfHwgW107XG4gICAgICBfaW5zdGFuY2UucGF5bG9hZElkID0gX2luc3RhbmNlLnBheWxvYWRJZCB8fCAnJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgX2luc3RhbmNlOiBUYXNrSW5mbyxcbiAgICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICAgICkge1xuICAgICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIF9pbnN0YW5jZS50YXNrSWQgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIChfaW5zdGFuY2UuZXhwZWN0ZWRPdXRwdXRJZHMgPVxuICAgICAgICAgICAgICBfaW5zdGFuY2UuZXhwZWN0ZWRPdXRwdXRJZHMgfHwgW10pLnB1c2goX3JlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgKF9pbnN0YW5jZS5kYXRhRGVwZW5kZW5jaWVzID1cbiAgICAgICAgICAgICAgX2luc3RhbmNlLmRhdGFEZXBlbmRlbmNpZXMgfHwgW10pLnB1c2goX3JlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgX2luc3RhbmNlLnBheWxvYWRJZCA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgVGFza0luZm8ucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihfaW5zdGFuY2U6IFRhc2tJbmZvLCBfd3JpdGVyOiBCaW5hcnlXcml0ZXIpIHtcbiAgICAgIGlmIChfaW5zdGFuY2UudGFza0lkKSB7XG4gICAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMSwgX2luc3RhbmNlLnRhc2tJZCk7XG4gICAgICB9XG4gICAgICBpZiAoX2luc3RhbmNlLmV4cGVjdGVkT3V0cHV0SWRzICYmIF9pbnN0YW5jZS5leHBlY3RlZE91dHB1dElkcy5sZW5ndGgpIHtcbiAgICAgICAgX3dyaXRlci53cml0ZVJlcGVhdGVkU3RyaW5nKDIsIF9pbnN0YW5jZS5leHBlY3RlZE91dHB1dElkcyk7XG4gICAgICB9XG4gICAgICBpZiAoX2luc3RhbmNlLmRhdGFEZXBlbmRlbmNpZXMgJiYgX2luc3RhbmNlLmRhdGFEZXBlbmRlbmNpZXMubGVuZ3RoKSB7XG4gICAgICAgIF93cml0ZXIud3JpdGVSZXBlYXRlZFN0cmluZygzLCBfaW5zdGFuY2UuZGF0YURlcGVuZGVuY2llcyk7XG4gICAgICB9XG4gICAgICBpZiAoX2luc3RhbmNlLnBheWxvYWRJZCkge1xuICAgICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDQsIF9pbnN0YW5jZS5wYXlsb2FkSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3Rhc2tJZDogc3RyaW5nO1xuICAgIHByaXZhdGUgX2V4cGVjdGVkT3V0cHV0SWRzOiBzdHJpbmdbXTtcbiAgICBwcml2YXRlIF9kYXRhRGVwZW5kZW5jaWVzOiBzdHJpbmdbXTtcbiAgICBwcml2YXRlIF9wYXlsb2FkSWQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIFRhc2tJbmZvIHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxUYXNrSW5mby5Bc09iamVjdD4pIHtcbiAgICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICAgIHRoaXMudGFza0lkID0gX3ZhbHVlLnRhc2tJZDtcbiAgICAgIHRoaXMuZXhwZWN0ZWRPdXRwdXRJZHMgPSAoX3ZhbHVlLmV4cGVjdGVkT3V0cHV0SWRzIHx8IFtdKS5zbGljZSgpO1xuICAgICAgdGhpcy5kYXRhRGVwZW5kZW5jaWVzID0gKF92YWx1ZS5kYXRhRGVwZW5kZW5jaWVzIHx8IFtdKS5zbGljZSgpO1xuICAgICAgdGhpcy5wYXlsb2FkSWQgPSBfdmFsdWUucGF5bG9hZElkO1xuICAgICAgVGFza0luZm8ucmVmaW5lVmFsdWVzKHRoaXMpO1xuICAgIH1cbiAgICBnZXQgdGFza0lkKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5fdGFza0lkO1xuICAgIH1cbiAgICBzZXQgdGFza0lkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgIHRoaXMuX3Rhc2tJZCA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgZXhwZWN0ZWRPdXRwdXRJZHMoKTogc3RyaW5nW10ge1xuICAgICAgcmV0dXJuIHRoaXMuX2V4cGVjdGVkT3V0cHV0SWRzO1xuICAgIH1cbiAgICBzZXQgZXhwZWN0ZWRPdXRwdXRJZHModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgICB0aGlzLl9leHBlY3RlZE91dHB1dElkcyA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgZGF0YURlcGVuZGVuY2llcygpOiBzdHJpbmdbXSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGF0YURlcGVuZGVuY2llcztcbiAgICB9XG4gICAgc2V0IGRhdGFEZXBlbmRlbmNpZXModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgICB0aGlzLl9kYXRhRGVwZW5kZW5jaWVzID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBwYXlsb2FkSWQoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLl9wYXlsb2FkSWQ7XG4gICAgfVxuICAgIHNldCBwYXlsb2FkSWQodmFsdWU6IHN0cmluZykge1xuICAgICAgdGhpcy5fcGF5bG9hZElkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqL1xuICAgIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICAgIFRhc2tJbmZvLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgICAqL1xuICAgIHRvT2JqZWN0KCk6IFRhc2tJbmZvLkFzT2JqZWN0IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRhc2tJZDogdGhpcy50YXNrSWQsXG4gICAgICAgIGV4cGVjdGVkT3V0cHV0SWRzOiAodGhpcy5leHBlY3RlZE91dHB1dElkcyB8fCBbXSkuc2xpY2UoKSxcbiAgICAgICAgZGF0YURlcGVuZGVuY2llczogKHRoaXMuZGF0YURlcGVuZGVuY2llcyB8fCBbXSkuc2xpY2UoKSxcbiAgICAgICAgcGF5bG9hZElkOiB0aGlzLnBheWxvYWRJZFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZW5pZW5jZSBtZXRob2QgdG8gc3VwcG9ydCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgcmVwbGljYXRlcyB0aGUgc3RydWN0dXJlIG9mIHRvT2JqZWN0KClcbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICByZXR1cm4gdGhpcy50b09iamVjdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhc3QgbWVzc2FnZSB0byBKU09OIHVzaW5nIHByb3RvYnVmIEpTT04gbm90YXRpb246IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvZG9jcy9wcm90bzMjanNvblxuICAgICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICAgKi9cbiAgICB0b1Byb3RvYnVmSlNPTihcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG9wdGlvbnM/OiBUb1Byb3RvYnVmSlNPTk9wdGlvbnNcbiAgICApOiBUYXNrSW5mby5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0YXNrSWQ6IHRoaXMudGFza0lkLFxuICAgICAgICBleHBlY3RlZE91dHB1dElkczogKHRoaXMuZXhwZWN0ZWRPdXRwdXRJZHMgfHwgW10pLnNsaWNlKCksXG4gICAgICAgIGRhdGFEZXBlbmRlbmNpZXM6ICh0aGlzLmRhdGFEZXBlbmRlbmNpZXMgfHwgW10pLnNsaWNlKCksXG4gICAgICAgIHBheWxvYWRJZDogdGhpcy5wYXlsb2FkSWRcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGV4cG9ydCBtb2R1bGUgVGFza0luZm8ge1xuICAgIC8qKlxuICAgICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBUYXNrSW5mb1xuICAgICAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgICAgdGFza0lkOiBzdHJpbmc7XG4gICAgICBleHBlY3RlZE91dHB1dElkczogc3RyaW5nW107XG4gICAgICBkYXRhRGVwZW5kZW5jaWVzOiBzdHJpbmdbXTtcbiAgICAgIHBheWxvYWRJZDogc3RyaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIFRhc2tJbmZvXG4gICAgICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgICB0YXNrSWQ6IHN0cmluZztcbiAgICAgIGV4cGVjdGVkT3V0cHV0SWRzOiBzdHJpbmdbXTtcbiAgICAgIGRhdGFEZXBlbmRlbmNpZXM6IHN0cmluZ1tdO1xuICAgICAgcGF5bG9hZElkOiBzdHJpbmc7XG4gICAgfVxuICB9XG59XG4iXX0=
|