@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,1139 +0,0 @@
|
|
|
1
|
-
import { BinaryReader, BinaryWriter } from 'google-protobuf';
|
|
2
|
-
import * as armonikApiGrpcV1Result_status001 from './result-status.pb';
|
|
3
|
-
import * as armonikApiGrpcV1Task_status003 from './task-status.pb';
|
|
4
|
-
import * as armonikApiGrpcV1Results005 from './results-filters.pb';
|
|
5
|
-
import * as armonikApiGrpcV1Tasks006 from './tasks-filters.pb';
|
|
6
|
-
export var EventsEnum;
|
|
7
|
-
(function (EventsEnum) {
|
|
8
|
-
EventsEnum[EventsEnum["EVENTS_ENUM_UNSPECIFIED"] = 0] = "EVENTS_ENUM_UNSPECIFIED";
|
|
9
|
-
EventsEnum[EventsEnum["EVENTS_ENUM_NEW_TASK"] = 1] = "EVENTS_ENUM_NEW_TASK";
|
|
10
|
-
EventsEnum[EventsEnum["EVENTS_ENUM_TASK_STATUS_UPDATE"] = 2] = "EVENTS_ENUM_TASK_STATUS_UPDATE";
|
|
11
|
-
EventsEnum[EventsEnum["EVENTS_ENUM_NEW_RESULT"] = 3] = "EVENTS_ENUM_NEW_RESULT";
|
|
12
|
-
EventsEnum[EventsEnum["EVENTS_ENUM_RESULT_STATUS_UPDATE"] = 4] = "EVENTS_ENUM_RESULT_STATUS_UPDATE";
|
|
13
|
-
EventsEnum[EventsEnum["EVENTS_ENUM_RESULT_OWNER_UPDATE"] = 5] = "EVENTS_ENUM_RESULT_OWNER_UPDATE";
|
|
14
|
-
})(EventsEnum || (EventsEnum = {}));
|
|
15
|
-
/**
|
|
16
|
-
* Message implementation for armonik.api.grpc.v1.events.EventSubscriptionRequest
|
|
17
|
-
*/
|
|
18
|
-
export class EventSubscriptionRequest {
|
|
19
|
-
static { this.id = 'armonik.api.grpc.v1.events.EventSubscriptionRequest'; }
|
|
20
|
-
/**
|
|
21
|
-
* Deserialize binary data to message
|
|
22
|
-
* @param instance message instance
|
|
23
|
-
*/
|
|
24
|
-
static deserializeBinary(bytes) {
|
|
25
|
-
const instance = new EventSubscriptionRequest();
|
|
26
|
-
EventSubscriptionRequest.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
27
|
-
return instance;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Check all the properties and set default protobuf values if necessary
|
|
31
|
-
* @param _instance message instance
|
|
32
|
-
*/
|
|
33
|
-
static refineValues(_instance) {
|
|
34
|
-
_instance.sessionId = _instance.sessionId || '';
|
|
35
|
-
_instance.tasksFilters = _instance.tasksFilters || undefined;
|
|
36
|
-
_instance.resultsFilters = _instance.resultsFilters || undefined;
|
|
37
|
-
_instance.returnedEvents = _instance.returnedEvents || [];
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
41
|
-
* @param _instance message instance
|
|
42
|
-
* @param _reader binary reader instance
|
|
43
|
-
*/
|
|
44
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
45
|
-
while (_reader.nextField()) {
|
|
46
|
-
if (_reader.isEndGroup())
|
|
47
|
-
break;
|
|
48
|
-
switch (_reader.getFieldNumber()) {
|
|
49
|
-
case 1:
|
|
50
|
-
_instance.sessionId = _reader.readString();
|
|
51
|
-
break;
|
|
52
|
-
case 2:
|
|
53
|
-
_instance.tasksFilters = new armonikApiGrpcV1Tasks006.Filters();
|
|
54
|
-
_reader.readMessage(_instance.tasksFilters, armonikApiGrpcV1Tasks006.Filters.deserializeBinaryFromReader);
|
|
55
|
-
break;
|
|
56
|
-
case 3:
|
|
57
|
-
_instance.resultsFilters = new armonikApiGrpcV1Results005.Filters();
|
|
58
|
-
_reader.readMessage(_instance.resultsFilters, armonikApiGrpcV1Results005.Filters.deserializeBinaryFromReader);
|
|
59
|
-
break;
|
|
60
|
-
case 4:
|
|
61
|
-
(_instance.returnedEvents = _instance.returnedEvents || []).push(...(_reader.readPackedEnum() || []));
|
|
62
|
-
break;
|
|
63
|
-
default:
|
|
64
|
-
_reader.skipField();
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
EventSubscriptionRequest.refineValues(_instance);
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Serializes a message to binary format using provided binary reader
|
|
71
|
-
* @param _instance message instance
|
|
72
|
-
* @param _writer binary writer instance
|
|
73
|
-
*/
|
|
74
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
75
|
-
if (_instance.sessionId) {
|
|
76
|
-
_writer.writeString(1, _instance.sessionId);
|
|
77
|
-
}
|
|
78
|
-
if (_instance.tasksFilters) {
|
|
79
|
-
_writer.writeMessage(2, _instance.tasksFilters, armonikApiGrpcV1Tasks006.Filters.serializeBinaryToWriter);
|
|
80
|
-
}
|
|
81
|
-
if (_instance.resultsFilters) {
|
|
82
|
-
_writer.writeMessage(3, _instance.resultsFilters, armonikApiGrpcV1Results005.Filters.serializeBinaryToWriter);
|
|
83
|
-
}
|
|
84
|
-
if (_instance.returnedEvents && _instance.returnedEvents.length) {
|
|
85
|
-
_writer.writePackedEnum(4, _instance.returnedEvents);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
90
|
-
* @param _value initial values object or instance of EventSubscriptionRequest to deeply clone from
|
|
91
|
-
*/
|
|
92
|
-
constructor(_value) {
|
|
93
|
-
_value = _value || {};
|
|
94
|
-
this.sessionId = _value.sessionId;
|
|
95
|
-
this.tasksFilters = _value.tasksFilters
|
|
96
|
-
? new armonikApiGrpcV1Tasks006.Filters(_value.tasksFilters)
|
|
97
|
-
: undefined;
|
|
98
|
-
this.resultsFilters = _value.resultsFilters
|
|
99
|
-
? new armonikApiGrpcV1Results005.Filters(_value.resultsFilters)
|
|
100
|
-
: undefined;
|
|
101
|
-
this.returnedEvents = (_value.returnedEvents || []).slice();
|
|
102
|
-
EventSubscriptionRequest.refineValues(this);
|
|
103
|
-
}
|
|
104
|
-
get sessionId() {
|
|
105
|
-
return this._sessionId;
|
|
106
|
-
}
|
|
107
|
-
set sessionId(value) {
|
|
108
|
-
this._sessionId = value;
|
|
109
|
-
}
|
|
110
|
-
get tasksFilters() {
|
|
111
|
-
return this._tasksFilters;
|
|
112
|
-
}
|
|
113
|
-
set tasksFilters(value) {
|
|
114
|
-
this._tasksFilters = value;
|
|
115
|
-
}
|
|
116
|
-
get resultsFilters() {
|
|
117
|
-
return this._resultsFilters;
|
|
118
|
-
}
|
|
119
|
-
set resultsFilters(value) {
|
|
120
|
-
this._resultsFilters = value;
|
|
121
|
-
}
|
|
122
|
-
get returnedEvents() {
|
|
123
|
-
return this._returnedEvents;
|
|
124
|
-
}
|
|
125
|
-
set returnedEvents(value) {
|
|
126
|
-
this._returnedEvents = value;
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Serialize message to binary data
|
|
130
|
-
* @param instance message instance
|
|
131
|
-
*/
|
|
132
|
-
serializeBinary() {
|
|
133
|
-
const writer = new BinaryWriter();
|
|
134
|
-
EventSubscriptionRequest.serializeBinaryToWriter(this, writer);
|
|
135
|
-
return writer.getResultBuffer();
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
139
|
-
*/
|
|
140
|
-
toObject() {
|
|
141
|
-
return {
|
|
142
|
-
sessionId: this.sessionId,
|
|
143
|
-
tasksFilters: this.tasksFilters
|
|
144
|
-
? this.tasksFilters.toObject()
|
|
145
|
-
: undefined,
|
|
146
|
-
resultsFilters: this.resultsFilters
|
|
147
|
-
? this.resultsFilters.toObject()
|
|
148
|
-
: undefined,
|
|
149
|
-
returnedEvents: (this.returnedEvents || []).slice()
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
154
|
-
*/
|
|
155
|
-
toJSON() {
|
|
156
|
-
return this.toObject();
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
160
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
161
|
-
* 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
|
|
162
|
-
*/
|
|
163
|
-
toProtobufJSON(
|
|
164
|
-
// @ts-ignore
|
|
165
|
-
options) {
|
|
166
|
-
return {
|
|
167
|
-
sessionId: this.sessionId,
|
|
168
|
-
tasksFilters: this.tasksFilters
|
|
169
|
-
? this.tasksFilters.toProtobufJSON(options)
|
|
170
|
-
: null,
|
|
171
|
-
resultsFilters: this.resultsFilters
|
|
172
|
-
? this.resultsFilters.toProtobufJSON(options)
|
|
173
|
-
: null,
|
|
174
|
-
returnedEvents: (this.returnedEvents || []).map(v => EventsEnum[v])
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
/**
|
|
179
|
-
* Message implementation for armonik.api.grpc.v1.events.EventSubscriptionResponse
|
|
180
|
-
*/
|
|
181
|
-
export class EventSubscriptionResponse {
|
|
182
|
-
static { this.id = 'armonik.api.grpc.v1.events.EventSubscriptionResponse'; }
|
|
183
|
-
/**
|
|
184
|
-
* Deserialize binary data to message
|
|
185
|
-
* @param instance message instance
|
|
186
|
-
*/
|
|
187
|
-
static deserializeBinary(bytes) {
|
|
188
|
-
const instance = new EventSubscriptionResponse();
|
|
189
|
-
EventSubscriptionResponse.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
190
|
-
return instance;
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Check all the properties and set default protobuf values if necessary
|
|
194
|
-
* @param _instance message instance
|
|
195
|
-
*/
|
|
196
|
-
static refineValues(_instance) {
|
|
197
|
-
_instance.sessionId = _instance.sessionId || '';
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
201
|
-
* @param _instance message instance
|
|
202
|
-
* @param _reader binary reader instance
|
|
203
|
-
*/
|
|
204
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
205
|
-
while (_reader.nextField()) {
|
|
206
|
-
if (_reader.isEndGroup())
|
|
207
|
-
break;
|
|
208
|
-
switch (_reader.getFieldNumber()) {
|
|
209
|
-
case 1:
|
|
210
|
-
_instance.sessionId = _reader.readString();
|
|
211
|
-
break;
|
|
212
|
-
case 2:
|
|
213
|
-
_instance.taskStatusUpdate = new EventSubscriptionResponse.TaskStatusUpdate();
|
|
214
|
-
_reader.readMessage(_instance.taskStatusUpdate, EventSubscriptionResponse.TaskStatusUpdate
|
|
215
|
-
.deserializeBinaryFromReader);
|
|
216
|
-
break;
|
|
217
|
-
case 3:
|
|
218
|
-
_instance.resultStatusUpdate = new EventSubscriptionResponse.ResultStatusUpdate();
|
|
219
|
-
_reader.readMessage(_instance.resultStatusUpdate, EventSubscriptionResponse.ResultStatusUpdate
|
|
220
|
-
.deserializeBinaryFromReader);
|
|
221
|
-
break;
|
|
222
|
-
case 4:
|
|
223
|
-
_instance.resultOwnerUpdate = new EventSubscriptionResponse.ResultOwnerUpdate();
|
|
224
|
-
_reader.readMessage(_instance.resultOwnerUpdate, EventSubscriptionResponse.ResultOwnerUpdate
|
|
225
|
-
.deserializeBinaryFromReader);
|
|
226
|
-
break;
|
|
227
|
-
case 5:
|
|
228
|
-
_instance.newTask = new EventSubscriptionResponse.NewTask();
|
|
229
|
-
_reader.readMessage(_instance.newTask, EventSubscriptionResponse.NewTask.deserializeBinaryFromReader);
|
|
230
|
-
break;
|
|
231
|
-
case 6:
|
|
232
|
-
_instance.newResult = new EventSubscriptionResponse.NewResult();
|
|
233
|
-
_reader.readMessage(_instance.newResult, EventSubscriptionResponse.NewResult.deserializeBinaryFromReader);
|
|
234
|
-
break;
|
|
235
|
-
default:
|
|
236
|
-
_reader.skipField();
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
EventSubscriptionResponse.refineValues(_instance);
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* Serializes a message to binary format using provided binary reader
|
|
243
|
-
* @param _instance message instance
|
|
244
|
-
* @param _writer binary writer instance
|
|
245
|
-
*/
|
|
246
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
247
|
-
if (_instance.sessionId) {
|
|
248
|
-
_writer.writeString(1, _instance.sessionId);
|
|
249
|
-
}
|
|
250
|
-
if (_instance.taskStatusUpdate) {
|
|
251
|
-
_writer.writeMessage(2, _instance.taskStatusUpdate, EventSubscriptionResponse.TaskStatusUpdate.serializeBinaryToWriter);
|
|
252
|
-
}
|
|
253
|
-
if (_instance.resultStatusUpdate) {
|
|
254
|
-
_writer.writeMessage(3, _instance.resultStatusUpdate, EventSubscriptionResponse.ResultStatusUpdate.serializeBinaryToWriter);
|
|
255
|
-
}
|
|
256
|
-
if (_instance.resultOwnerUpdate) {
|
|
257
|
-
_writer.writeMessage(4, _instance.resultOwnerUpdate, EventSubscriptionResponse.ResultOwnerUpdate.serializeBinaryToWriter);
|
|
258
|
-
}
|
|
259
|
-
if (_instance.newTask) {
|
|
260
|
-
_writer.writeMessage(5, _instance.newTask, EventSubscriptionResponse.NewTask.serializeBinaryToWriter);
|
|
261
|
-
}
|
|
262
|
-
if (_instance.newResult) {
|
|
263
|
-
_writer.writeMessage(6, _instance.newResult, EventSubscriptionResponse.NewResult.serializeBinaryToWriter);
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
/**
|
|
267
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
268
|
-
* @param _value initial values object or instance of EventSubscriptionResponse to deeply clone from
|
|
269
|
-
*/
|
|
270
|
-
constructor(_value) {
|
|
271
|
-
this._update = EventSubscriptionResponse.UpdateCase.none;
|
|
272
|
-
_value = _value || {};
|
|
273
|
-
this.sessionId = _value.sessionId;
|
|
274
|
-
this.taskStatusUpdate = _value.taskStatusUpdate
|
|
275
|
-
? new EventSubscriptionResponse.TaskStatusUpdate(_value.taskStatusUpdate)
|
|
276
|
-
: undefined;
|
|
277
|
-
this.resultStatusUpdate = _value.resultStatusUpdate
|
|
278
|
-
? new EventSubscriptionResponse.ResultStatusUpdate(_value.resultStatusUpdate)
|
|
279
|
-
: undefined;
|
|
280
|
-
this.resultOwnerUpdate = _value.resultOwnerUpdate
|
|
281
|
-
? new EventSubscriptionResponse.ResultOwnerUpdate(_value.resultOwnerUpdate)
|
|
282
|
-
: undefined;
|
|
283
|
-
this.newTask = _value.newTask
|
|
284
|
-
? new EventSubscriptionResponse.NewTask(_value.newTask)
|
|
285
|
-
: undefined;
|
|
286
|
-
this.newResult = _value.newResult
|
|
287
|
-
? new EventSubscriptionResponse.NewResult(_value.newResult)
|
|
288
|
-
: undefined;
|
|
289
|
-
EventSubscriptionResponse.refineValues(this);
|
|
290
|
-
}
|
|
291
|
-
get sessionId() {
|
|
292
|
-
return this._sessionId;
|
|
293
|
-
}
|
|
294
|
-
set sessionId(value) {
|
|
295
|
-
this._sessionId = value;
|
|
296
|
-
}
|
|
297
|
-
get taskStatusUpdate() {
|
|
298
|
-
return this._taskStatusUpdate;
|
|
299
|
-
}
|
|
300
|
-
set taskStatusUpdate(value) {
|
|
301
|
-
if (value !== undefined && value !== null) {
|
|
302
|
-
this._resultStatusUpdate = this._resultOwnerUpdate = this._newTask = this._newResult = undefined;
|
|
303
|
-
this._update = EventSubscriptionResponse.UpdateCase.taskStatusUpdate;
|
|
304
|
-
}
|
|
305
|
-
this._taskStatusUpdate = value;
|
|
306
|
-
}
|
|
307
|
-
get resultStatusUpdate() {
|
|
308
|
-
return this._resultStatusUpdate;
|
|
309
|
-
}
|
|
310
|
-
set resultStatusUpdate(value) {
|
|
311
|
-
if (value !== undefined && value !== null) {
|
|
312
|
-
this._taskStatusUpdate = this._resultOwnerUpdate = this._newTask = this._newResult = undefined;
|
|
313
|
-
this._update = EventSubscriptionResponse.UpdateCase.resultStatusUpdate;
|
|
314
|
-
}
|
|
315
|
-
this._resultStatusUpdate = value;
|
|
316
|
-
}
|
|
317
|
-
get resultOwnerUpdate() {
|
|
318
|
-
return this._resultOwnerUpdate;
|
|
319
|
-
}
|
|
320
|
-
set resultOwnerUpdate(value) {
|
|
321
|
-
if (value !== undefined && value !== null) {
|
|
322
|
-
this._taskStatusUpdate = this._resultStatusUpdate = this._newTask = this._newResult = undefined;
|
|
323
|
-
this._update = EventSubscriptionResponse.UpdateCase.resultOwnerUpdate;
|
|
324
|
-
}
|
|
325
|
-
this._resultOwnerUpdate = value;
|
|
326
|
-
}
|
|
327
|
-
get newTask() {
|
|
328
|
-
return this._newTask;
|
|
329
|
-
}
|
|
330
|
-
set newTask(value) {
|
|
331
|
-
if (value !== undefined && value !== null) {
|
|
332
|
-
this._taskStatusUpdate = this._resultStatusUpdate = this._resultOwnerUpdate = this._newResult = undefined;
|
|
333
|
-
this._update = EventSubscriptionResponse.UpdateCase.newTask;
|
|
334
|
-
}
|
|
335
|
-
this._newTask = value;
|
|
336
|
-
}
|
|
337
|
-
get newResult() {
|
|
338
|
-
return this._newResult;
|
|
339
|
-
}
|
|
340
|
-
set newResult(value) {
|
|
341
|
-
if (value !== undefined && value !== null) {
|
|
342
|
-
this._taskStatusUpdate = this._resultStatusUpdate = this._resultOwnerUpdate = this._newTask = undefined;
|
|
343
|
-
this._update = EventSubscriptionResponse.UpdateCase.newResult;
|
|
344
|
-
}
|
|
345
|
-
this._newResult = value;
|
|
346
|
-
}
|
|
347
|
-
get update() {
|
|
348
|
-
return this._update;
|
|
349
|
-
}
|
|
350
|
-
/**
|
|
351
|
-
* Serialize message to binary data
|
|
352
|
-
* @param instance message instance
|
|
353
|
-
*/
|
|
354
|
-
serializeBinary() {
|
|
355
|
-
const writer = new BinaryWriter();
|
|
356
|
-
EventSubscriptionResponse.serializeBinaryToWriter(this, writer);
|
|
357
|
-
return writer.getResultBuffer();
|
|
358
|
-
}
|
|
359
|
-
/**
|
|
360
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
361
|
-
*/
|
|
362
|
-
toObject() {
|
|
363
|
-
return {
|
|
364
|
-
sessionId: this.sessionId,
|
|
365
|
-
taskStatusUpdate: this.taskStatusUpdate
|
|
366
|
-
? this.taskStatusUpdate.toObject()
|
|
367
|
-
: undefined,
|
|
368
|
-
resultStatusUpdate: this.resultStatusUpdate
|
|
369
|
-
? this.resultStatusUpdate.toObject()
|
|
370
|
-
: undefined,
|
|
371
|
-
resultOwnerUpdate: this.resultOwnerUpdate
|
|
372
|
-
? this.resultOwnerUpdate.toObject()
|
|
373
|
-
: undefined,
|
|
374
|
-
newTask: this.newTask ? this.newTask.toObject() : undefined,
|
|
375
|
-
newResult: this.newResult ? this.newResult.toObject() : undefined
|
|
376
|
-
};
|
|
377
|
-
}
|
|
378
|
-
/**
|
|
379
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
380
|
-
*/
|
|
381
|
-
toJSON() {
|
|
382
|
-
return this.toObject();
|
|
383
|
-
}
|
|
384
|
-
/**
|
|
385
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
386
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
387
|
-
* 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
|
|
388
|
-
*/
|
|
389
|
-
toProtobufJSON(
|
|
390
|
-
// @ts-ignore
|
|
391
|
-
options) {
|
|
392
|
-
return {
|
|
393
|
-
sessionId: this.sessionId,
|
|
394
|
-
taskStatusUpdate: this.taskStatusUpdate
|
|
395
|
-
? this.taskStatusUpdate.toProtobufJSON(options)
|
|
396
|
-
: null,
|
|
397
|
-
resultStatusUpdate: this.resultStatusUpdate
|
|
398
|
-
? this.resultStatusUpdate.toProtobufJSON(options)
|
|
399
|
-
: null,
|
|
400
|
-
resultOwnerUpdate: this.resultOwnerUpdate
|
|
401
|
-
? this.resultOwnerUpdate.toProtobufJSON(options)
|
|
402
|
-
: null,
|
|
403
|
-
newTask: this.newTask ? this.newTask.toProtobufJSON(options) : null,
|
|
404
|
-
newResult: this.newResult ? this.newResult.toProtobufJSON(options) : null
|
|
405
|
-
};
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
(function (EventSubscriptionResponse) {
|
|
409
|
-
let UpdateCase;
|
|
410
|
-
(function (UpdateCase) {
|
|
411
|
-
UpdateCase[UpdateCase["none"] = 0] = "none";
|
|
412
|
-
UpdateCase[UpdateCase["taskStatusUpdate"] = 1] = "taskStatusUpdate";
|
|
413
|
-
UpdateCase[UpdateCase["resultStatusUpdate"] = 2] = "resultStatusUpdate";
|
|
414
|
-
UpdateCase[UpdateCase["resultOwnerUpdate"] = 3] = "resultOwnerUpdate";
|
|
415
|
-
UpdateCase[UpdateCase["newTask"] = 4] = "newTask";
|
|
416
|
-
UpdateCase[UpdateCase["newResult"] = 5] = "newResult";
|
|
417
|
-
})(UpdateCase = EventSubscriptionResponse.UpdateCase || (EventSubscriptionResponse.UpdateCase = {}));
|
|
418
|
-
/**
|
|
419
|
-
* Message implementation for armonik.api.grpc.v1.events.EventSubscriptionResponse.TaskStatusUpdate
|
|
420
|
-
*/
|
|
421
|
-
class TaskStatusUpdate {
|
|
422
|
-
static { this.id = 'armonik.api.grpc.v1.events.EventSubscriptionResponse.TaskStatusUpdate'; }
|
|
423
|
-
/**
|
|
424
|
-
* Deserialize binary data to message
|
|
425
|
-
* @param instance message instance
|
|
426
|
-
*/
|
|
427
|
-
static deserializeBinary(bytes) {
|
|
428
|
-
const instance = new TaskStatusUpdate();
|
|
429
|
-
TaskStatusUpdate.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
430
|
-
return instance;
|
|
431
|
-
}
|
|
432
|
-
/**
|
|
433
|
-
* Check all the properties and set default protobuf values if necessary
|
|
434
|
-
* @param _instance message instance
|
|
435
|
-
*/
|
|
436
|
-
static refineValues(_instance) {
|
|
437
|
-
_instance.taskId = _instance.taskId || '';
|
|
438
|
-
_instance.status = _instance.status || 0;
|
|
439
|
-
}
|
|
440
|
-
/**
|
|
441
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
442
|
-
* @param _instance message instance
|
|
443
|
-
* @param _reader binary reader instance
|
|
444
|
-
*/
|
|
445
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
446
|
-
while (_reader.nextField()) {
|
|
447
|
-
if (_reader.isEndGroup())
|
|
448
|
-
break;
|
|
449
|
-
switch (_reader.getFieldNumber()) {
|
|
450
|
-
case 10:
|
|
451
|
-
_instance.taskId = _reader.readString();
|
|
452
|
-
break;
|
|
453
|
-
case 11:
|
|
454
|
-
_instance.status = _reader.readEnum();
|
|
455
|
-
break;
|
|
456
|
-
default:
|
|
457
|
-
_reader.skipField();
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
TaskStatusUpdate.refineValues(_instance);
|
|
461
|
-
}
|
|
462
|
-
/**
|
|
463
|
-
* Serializes a message to binary format using provided binary reader
|
|
464
|
-
* @param _instance message instance
|
|
465
|
-
* @param _writer binary writer instance
|
|
466
|
-
*/
|
|
467
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
468
|
-
if (_instance.taskId) {
|
|
469
|
-
_writer.writeString(10, _instance.taskId);
|
|
470
|
-
}
|
|
471
|
-
if (_instance.status) {
|
|
472
|
-
_writer.writeEnum(11, _instance.status);
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
|
-
/**
|
|
476
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
477
|
-
* @param _value initial values object or instance of TaskStatusUpdate to deeply clone from
|
|
478
|
-
*/
|
|
479
|
-
constructor(_value) {
|
|
480
|
-
_value = _value || {};
|
|
481
|
-
this.taskId = _value.taskId;
|
|
482
|
-
this.status = _value.status;
|
|
483
|
-
TaskStatusUpdate.refineValues(this);
|
|
484
|
-
}
|
|
485
|
-
get taskId() {
|
|
486
|
-
return this._taskId;
|
|
487
|
-
}
|
|
488
|
-
set taskId(value) {
|
|
489
|
-
this._taskId = value;
|
|
490
|
-
}
|
|
491
|
-
get status() {
|
|
492
|
-
return this._status;
|
|
493
|
-
}
|
|
494
|
-
set status(value) {
|
|
495
|
-
this._status = value;
|
|
496
|
-
}
|
|
497
|
-
/**
|
|
498
|
-
* Serialize message to binary data
|
|
499
|
-
* @param instance message instance
|
|
500
|
-
*/
|
|
501
|
-
serializeBinary() {
|
|
502
|
-
const writer = new BinaryWriter();
|
|
503
|
-
TaskStatusUpdate.serializeBinaryToWriter(this, writer);
|
|
504
|
-
return writer.getResultBuffer();
|
|
505
|
-
}
|
|
506
|
-
/**
|
|
507
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
508
|
-
*/
|
|
509
|
-
toObject() {
|
|
510
|
-
return {
|
|
511
|
-
taskId: this.taskId,
|
|
512
|
-
status: this.status
|
|
513
|
-
};
|
|
514
|
-
}
|
|
515
|
-
/**
|
|
516
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
517
|
-
*/
|
|
518
|
-
toJSON() {
|
|
519
|
-
return this.toObject();
|
|
520
|
-
}
|
|
521
|
-
/**
|
|
522
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
523
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
524
|
-
* 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
|
|
525
|
-
*/
|
|
526
|
-
toProtobufJSON(
|
|
527
|
-
// @ts-ignore
|
|
528
|
-
options) {
|
|
529
|
-
return {
|
|
530
|
-
taskId: this.taskId,
|
|
531
|
-
status: armonikApiGrpcV1Task_status003.TaskStatus[this.status === null || this.status === undefined ? 0 : this.status]
|
|
532
|
-
};
|
|
533
|
-
}
|
|
534
|
-
}
|
|
535
|
-
EventSubscriptionResponse.TaskStatusUpdate = TaskStatusUpdate;
|
|
536
|
-
/**
|
|
537
|
-
* Message implementation for armonik.api.grpc.v1.events.EventSubscriptionResponse.ResultStatusUpdate
|
|
538
|
-
*/
|
|
539
|
-
class ResultStatusUpdate {
|
|
540
|
-
static { this.id = 'armonik.api.grpc.v1.events.EventSubscriptionResponse.ResultStatusUpdate'; }
|
|
541
|
-
/**
|
|
542
|
-
* Deserialize binary data to message
|
|
543
|
-
* @param instance message instance
|
|
544
|
-
*/
|
|
545
|
-
static deserializeBinary(bytes) {
|
|
546
|
-
const instance = new ResultStatusUpdate();
|
|
547
|
-
ResultStatusUpdate.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
548
|
-
return instance;
|
|
549
|
-
}
|
|
550
|
-
/**
|
|
551
|
-
* Check all the properties and set default protobuf values if necessary
|
|
552
|
-
* @param _instance message instance
|
|
553
|
-
*/
|
|
554
|
-
static refineValues(_instance) {
|
|
555
|
-
_instance.resultId = _instance.resultId || '';
|
|
556
|
-
_instance.status = _instance.status || 0;
|
|
557
|
-
}
|
|
558
|
-
/**
|
|
559
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
560
|
-
* @param _instance message instance
|
|
561
|
-
* @param _reader binary reader instance
|
|
562
|
-
*/
|
|
563
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
564
|
-
while (_reader.nextField()) {
|
|
565
|
-
if (_reader.isEndGroup())
|
|
566
|
-
break;
|
|
567
|
-
switch (_reader.getFieldNumber()) {
|
|
568
|
-
case 20:
|
|
569
|
-
_instance.resultId = _reader.readString();
|
|
570
|
-
break;
|
|
571
|
-
case 21:
|
|
572
|
-
_instance.status = _reader.readEnum();
|
|
573
|
-
break;
|
|
574
|
-
default:
|
|
575
|
-
_reader.skipField();
|
|
576
|
-
}
|
|
577
|
-
}
|
|
578
|
-
ResultStatusUpdate.refineValues(_instance);
|
|
579
|
-
}
|
|
580
|
-
/**
|
|
581
|
-
* Serializes a message to binary format using provided binary reader
|
|
582
|
-
* @param _instance message instance
|
|
583
|
-
* @param _writer binary writer instance
|
|
584
|
-
*/
|
|
585
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
586
|
-
if (_instance.resultId) {
|
|
587
|
-
_writer.writeString(20, _instance.resultId);
|
|
588
|
-
}
|
|
589
|
-
if (_instance.status) {
|
|
590
|
-
_writer.writeEnum(21, _instance.status);
|
|
591
|
-
}
|
|
592
|
-
}
|
|
593
|
-
/**
|
|
594
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
595
|
-
* @param _value initial values object or instance of ResultStatusUpdate to deeply clone from
|
|
596
|
-
*/
|
|
597
|
-
constructor(_value) {
|
|
598
|
-
_value = _value || {};
|
|
599
|
-
this.resultId = _value.resultId;
|
|
600
|
-
this.status = _value.status;
|
|
601
|
-
ResultStatusUpdate.refineValues(this);
|
|
602
|
-
}
|
|
603
|
-
get resultId() {
|
|
604
|
-
return this._resultId;
|
|
605
|
-
}
|
|
606
|
-
set resultId(value) {
|
|
607
|
-
this._resultId = value;
|
|
608
|
-
}
|
|
609
|
-
get status() {
|
|
610
|
-
return this._status;
|
|
611
|
-
}
|
|
612
|
-
set status(value) {
|
|
613
|
-
this._status = value;
|
|
614
|
-
}
|
|
615
|
-
/**
|
|
616
|
-
* Serialize message to binary data
|
|
617
|
-
* @param instance message instance
|
|
618
|
-
*/
|
|
619
|
-
serializeBinary() {
|
|
620
|
-
const writer = new BinaryWriter();
|
|
621
|
-
ResultStatusUpdate.serializeBinaryToWriter(this, writer);
|
|
622
|
-
return writer.getResultBuffer();
|
|
623
|
-
}
|
|
624
|
-
/**
|
|
625
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
626
|
-
*/
|
|
627
|
-
toObject() {
|
|
628
|
-
return {
|
|
629
|
-
resultId: this.resultId,
|
|
630
|
-
status: this.status
|
|
631
|
-
};
|
|
632
|
-
}
|
|
633
|
-
/**
|
|
634
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
635
|
-
*/
|
|
636
|
-
toJSON() {
|
|
637
|
-
return this.toObject();
|
|
638
|
-
}
|
|
639
|
-
/**
|
|
640
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
641
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
642
|
-
* 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
|
|
643
|
-
*/
|
|
644
|
-
toProtobufJSON(
|
|
645
|
-
// @ts-ignore
|
|
646
|
-
options) {
|
|
647
|
-
return {
|
|
648
|
-
resultId: this.resultId,
|
|
649
|
-
status: armonikApiGrpcV1Result_status001.ResultStatus[this.status === null || this.status === undefined ? 0 : this.status]
|
|
650
|
-
};
|
|
651
|
-
}
|
|
652
|
-
}
|
|
653
|
-
EventSubscriptionResponse.ResultStatusUpdate = ResultStatusUpdate;
|
|
654
|
-
/**
|
|
655
|
-
* Message implementation for armonik.api.grpc.v1.events.EventSubscriptionResponse.ResultOwnerUpdate
|
|
656
|
-
*/
|
|
657
|
-
class ResultOwnerUpdate {
|
|
658
|
-
static { this.id = 'armonik.api.grpc.v1.events.EventSubscriptionResponse.ResultOwnerUpdate'; }
|
|
659
|
-
/**
|
|
660
|
-
* Deserialize binary data to message
|
|
661
|
-
* @param instance message instance
|
|
662
|
-
*/
|
|
663
|
-
static deserializeBinary(bytes) {
|
|
664
|
-
const instance = new ResultOwnerUpdate();
|
|
665
|
-
ResultOwnerUpdate.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
666
|
-
return instance;
|
|
667
|
-
}
|
|
668
|
-
/**
|
|
669
|
-
* Check all the properties and set default protobuf values if necessary
|
|
670
|
-
* @param _instance message instance
|
|
671
|
-
*/
|
|
672
|
-
static refineValues(_instance) {
|
|
673
|
-
_instance.resultId = _instance.resultId || '';
|
|
674
|
-
_instance.previousOwnerId = _instance.previousOwnerId || '';
|
|
675
|
-
_instance.currentOwnerId = _instance.currentOwnerId || '';
|
|
676
|
-
}
|
|
677
|
-
/**
|
|
678
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
679
|
-
* @param _instance message instance
|
|
680
|
-
* @param _reader binary reader instance
|
|
681
|
-
*/
|
|
682
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
683
|
-
while (_reader.nextField()) {
|
|
684
|
-
if (_reader.isEndGroup())
|
|
685
|
-
break;
|
|
686
|
-
switch (_reader.getFieldNumber()) {
|
|
687
|
-
case 30:
|
|
688
|
-
_instance.resultId = _reader.readString();
|
|
689
|
-
break;
|
|
690
|
-
case 31:
|
|
691
|
-
_instance.previousOwnerId = _reader.readString();
|
|
692
|
-
break;
|
|
693
|
-
case 32:
|
|
694
|
-
_instance.currentOwnerId = _reader.readString();
|
|
695
|
-
break;
|
|
696
|
-
default:
|
|
697
|
-
_reader.skipField();
|
|
698
|
-
}
|
|
699
|
-
}
|
|
700
|
-
ResultOwnerUpdate.refineValues(_instance);
|
|
701
|
-
}
|
|
702
|
-
/**
|
|
703
|
-
* Serializes a message to binary format using provided binary reader
|
|
704
|
-
* @param _instance message instance
|
|
705
|
-
* @param _writer binary writer instance
|
|
706
|
-
*/
|
|
707
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
708
|
-
if (_instance.resultId) {
|
|
709
|
-
_writer.writeString(30, _instance.resultId);
|
|
710
|
-
}
|
|
711
|
-
if (_instance.previousOwnerId) {
|
|
712
|
-
_writer.writeString(31, _instance.previousOwnerId);
|
|
713
|
-
}
|
|
714
|
-
if (_instance.currentOwnerId) {
|
|
715
|
-
_writer.writeString(32, _instance.currentOwnerId);
|
|
716
|
-
}
|
|
717
|
-
}
|
|
718
|
-
/**
|
|
719
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
720
|
-
* @param _value initial values object or instance of ResultOwnerUpdate to deeply clone from
|
|
721
|
-
*/
|
|
722
|
-
constructor(_value) {
|
|
723
|
-
_value = _value || {};
|
|
724
|
-
this.resultId = _value.resultId;
|
|
725
|
-
this.previousOwnerId = _value.previousOwnerId;
|
|
726
|
-
this.currentOwnerId = _value.currentOwnerId;
|
|
727
|
-
ResultOwnerUpdate.refineValues(this);
|
|
728
|
-
}
|
|
729
|
-
get resultId() {
|
|
730
|
-
return this._resultId;
|
|
731
|
-
}
|
|
732
|
-
set resultId(value) {
|
|
733
|
-
this._resultId = value;
|
|
734
|
-
}
|
|
735
|
-
get previousOwnerId() {
|
|
736
|
-
return this._previousOwnerId;
|
|
737
|
-
}
|
|
738
|
-
set previousOwnerId(value) {
|
|
739
|
-
this._previousOwnerId = value;
|
|
740
|
-
}
|
|
741
|
-
get currentOwnerId() {
|
|
742
|
-
return this._currentOwnerId;
|
|
743
|
-
}
|
|
744
|
-
set currentOwnerId(value) {
|
|
745
|
-
this._currentOwnerId = value;
|
|
746
|
-
}
|
|
747
|
-
/**
|
|
748
|
-
* Serialize message to binary data
|
|
749
|
-
* @param instance message instance
|
|
750
|
-
*/
|
|
751
|
-
serializeBinary() {
|
|
752
|
-
const writer = new BinaryWriter();
|
|
753
|
-
ResultOwnerUpdate.serializeBinaryToWriter(this, writer);
|
|
754
|
-
return writer.getResultBuffer();
|
|
755
|
-
}
|
|
756
|
-
/**
|
|
757
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
758
|
-
*/
|
|
759
|
-
toObject() {
|
|
760
|
-
return {
|
|
761
|
-
resultId: this.resultId,
|
|
762
|
-
previousOwnerId: this.previousOwnerId,
|
|
763
|
-
currentOwnerId: this.currentOwnerId
|
|
764
|
-
};
|
|
765
|
-
}
|
|
766
|
-
/**
|
|
767
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
768
|
-
*/
|
|
769
|
-
toJSON() {
|
|
770
|
-
return this.toObject();
|
|
771
|
-
}
|
|
772
|
-
/**
|
|
773
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
774
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
775
|
-
* 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
|
|
776
|
-
*/
|
|
777
|
-
toProtobufJSON(
|
|
778
|
-
// @ts-ignore
|
|
779
|
-
options) {
|
|
780
|
-
return {
|
|
781
|
-
resultId: this.resultId,
|
|
782
|
-
previousOwnerId: this.previousOwnerId,
|
|
783
|
-
currentOwnerId: this.currentOwnerId
|
|
784
|
-
};
|
|
785
|
-
}
|
|
786
|
-
}
|
|
787
|
-
EventSubscriptionResponse.ResultOwnerUpdate = ResultOwnerUpdate;
|
|
788
|
-
/**
|
|
789
|
-
* Message implementation for armonik.api.grpc.v1.events.EventSubscriptionResponse.NewTask
|
|
790
|
-
*/
|
|
791
|
-
class NewTask {
|
|
792
|
-
static { this.id = 'armonik.api.grpc.v1.events.EventSubscriptionResponse.NewTask'; }
|
|
793
|
-
/**
|
|
794
|
-
* Deserialize binary data to message
|
|
795
|
-
* @param instance message instance
|
|
796
|
-
*/
|
|
797
|
-
static deserializeBinary(bytes) {
|
|
798
|
-
const instance = new NewTask();
|
|
799
|
-
NewTask.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
800
|
-
return instance;
|
|
801
|
-
}
|
|
802
|
-
/**
|
|
803
|
-
* Check all the properties and set default protobuf values if necessary
|
|
804
|
-
* @param _instance message instance
|
|
805
|
-
*/
|
|
806
|
-
static refineValues(_instance) {
|
|
807
|
-
_instance.taskId = _instance.taskId || '';
|
|
808
|
-
_instance.payloadId = _instance.payloadId || '';
|
|
809
|
-
_instance.originTaskId = _instance.originTaskId || '';
|
|
810
|
-
_instance.status = _instance.status || 0;
|
|
811
|
-
_instance.expectedOutputKeys = _instance.expectedOutputKeys || [];
|
|
812
|
-
_instance.dataDependencies = _instance.dataDependencies || [];
|
|
813
|
-
_instance.retryOfIds = _instance.retryOfIds || [];
|
|
814
|
-
_instance.parentTaskIds = _instance.parentTaskIds || [];
|
|
815
|
-
}
|
|
816
|
-
/**
|
|
817
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
818
|
-
* @param _instance message instance
|
|
819
|
-
* @param _reader binary reader instance
|
|
820
|
-
*/
|
|
821
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
822
|
-
while (_reader.nextField()) {
|
|
823
|
-
if (_reader.isEndGroup())
|
|
824
|
-
break;
|
|
825
|
-
switch (_reader.getFieldNumber()) {
|
|
826
|
-
case 40:
|
|
827
|
-
_instance.taskId = _reader.readString();
|
|
828
|
-
break;
|
|
829
|
-
case 41:
|
|
830
|
-
_instance.payloadId = _reader.readString();
|
|
831
|
-
break;
|
|
832
|
-
case 42:
|
|
833
|
-
_instance.originTaskId = _reader.readString();
|
|
834
|
-
break;
|
|
835
|
-
case 43:
|
|
836
|
-
_instance.status = _reader.readEnum();
|
|
837
|
-
break;
|
|
838
|
-
case 44:
|
|
839
|
-
(_instance.expectedOutputKeys =
|
|
840
|
-
_instance.expectedOutputKeys || []).push(_reader.readString());
|
|
841
|
-
break;
|
|
842
|
-
case 45:
|
|
843
|
-
(_instance.dataDependencies =
|
|
844
|
-
_instance.dataDependencies || []).push(_reader.readString());
|
|
845
|
-
break;
|
|
846
|
-
case 46:
|
|
847
|
-
(_instance.retryOfIds = _instance.retryOfIds || []).push(_reader.readString());
|
|
848
|
-
break;
|
|
849
|
-
case 47:
|
|
850
|
-
(_instance.parentTaskIds = _instance.parentTaskIds || []).push(_reader.readString());
|
|
851
|
-
break;
|
|
852
|
-
default:
|
|
853
|
-
_reader.skipField();
|
|
854
|
-
}
|
|
855
|
-
}
|
|
856
|
-
NewTask.refineValues(_instance);
|
|
857
|
-
}
|
|
858
|
-
/**
|
|
859
|
-
* Serializes a message to binary format using provided binary reader
|
|
860
|
-
* @param _instance message instance
|
|
861
|
-
* @param _writer binary writer instance
|
|
862
|
-
*/
|
|
863
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
864
|
-
if (_instance.taskId) {
|
|
865
|
-
_writer.writeString(40, _instance.taskId);
|
|
866
|
-
}
|
|
867
|
-
if (_instance.payloadId) {
|
|
868
|
-
_writer.writeString(41, _instance.payloadId);
|
|
869
|
-
}
|
|
870
|
-
if (_instance.originTaskId) {
|
|
871
|
-
_writer.writeString(42, _instance.originTaskId);
|
|
872
|
-
}
|
|
873
|
-
if (_instance.status) {
|
|
874
|
-
_writer.writeEnum(43, _instance.status);
|
|
875
|
-
}
|
|
876
|
-
if (_instance.expectedOutputKeys && _instance.expectedOutputKeys.length) {
|
|
877
|
-
_writer.writeRepeatedString(44, _instance.expectedOutputKeys);
|
|
878
|
-
}
|
|
879
|
-
if (_instance.dataDependencies && _instance.dataDependencies.length) {
|
|
880
|
-
_writer.writeRepeatedString(45, _instance.dataDependencies);
|
|
881
|
-
}
|
|
882
|
-
if (_instance.retryOfIds && _instance.retryOfIds.length) {
|
|
883
|
-
_writer.writeRepeatedString(46, _instance.retryOfIds);
|
|
884
|
-
}
|
|
885
|
-
if (_instance.parentTaskIds && _instance.parentTaskIds.length) {
|
|
886
|
-
_writer.writeRepeatedString(47, _instance.parentTaskIds);
|
|
887
|
-
}
|
|
888
|
-
}
|
|
889
|
-
/**
|
|
890
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
891
|
-
* @param _value initial values object or instance of NewTask to deeply clone from
|
|
892
|
-
*/
|
|
893
|
-
constructor(_value) {
|
|
894
|
-
_value = _value || {};
|
|
895
|
-
this.taskId = _value.taskId;
|
|
896
|
-
this.payloadId = _value.payloadId;
|
|
897
|
-
this.originTaskId = _value.originTaskId;
|
|
898
|
-
this.status = _value.status;
|
|
899
|
-
this.expectedOutputKeys = (_value.expectedOutputKeys || []).slice();
|
|
900
|
-
this.dataDependencies = (_value.dataDependencies || []).slice();
|
|
901
|
-
this.retryOfIds = (_value.retryOfIds || []).slice();
|
|
902
|
-
this.parentTaskIds = (_value.parentTaskIds || []).slice();
|
|
903
|
-
NewTask.refineValues(this);
|
|
904
|
-
}
|
|
905
|
-
get taskId() {
|
|
906
|
-
return this._taskId;
|
|
907
|
-
}
|
|
908
|
-
set taskId(value) {
|
|
909
|
-
this._taskId = value;
|
|
910
|
-
}
|
|
911
|
-
get payloadId() {
|
|
912
|
-
return this._payloadId;
|
|
913
|
-
}
|
|
914
|
-
set payloadId(value) {
|
|
915
|
-
this._payloadId = value;
|
|
916
|
-
}
|
|
917
|
-
get originTaskId() {
|
|
918
|
-
return this._originTaskId;
|
|
919
|
-
}
|
|
920
|
-
set originTaskId(value) {
|
|
921
|
-
this._originTaskId = value;
|
|
922
|
-
}
|
|
923
|
-
get status() {
|
|
924
|
-
return this._status;
|
|
925
|
-
}
|
|
926
|
-
set status(value) {
|
|
927
|
-
this._status = value;
|
|
928
|
-
}
|
|
929
|
-
get expectedOutputKeys() {
|
|
930
|
-
return this._expectedOutputKeys;
|
|
931
|
-
}
|
|
932
|
-
set expectedOutputKeys(value) {
|
|
933
|
-
this._expectedOutputKeys = value;
|
|
934
|
-
}
|
|
935
|
-
get dataDependencies() {
|
|
936
|
-
return this._dataDependencies;
|
|
937
|
-
}
|
|
938
|
-
set dataDependencies(value) {
|
|
939
|
-
this._dataDependencies = value;
|
|
940
|
-
}
|
|
941
|
-
get retryOfIds() {
|
|
942
|
-
return this._retryOfIds;
|
|
943
|
-
}
|
|
944
|
-
set retryOfIds(value) {
|
|
945
|
-
this._retryOfIds = value;
|
|
946
|
-
}
|
|
947
|
-
get parentTaskIds() {
|
|
948
|
-
return this._parentTaskIds;
|
|
949
|
-
}
|
|
950
|
-
set parentTaskIds(value) {
|
|
951
|
-
this._parentTaskIds = value;
|
|
952
|
-
}
|
|
953
|
-
/**
|
|
954
|
-
* Serialize message to binary data
|
|
955
|
-
* @param instance message instance
|
|
956
|
-
*/
|
|
957
|
-
serializeBinary() {
|
|
958
|
-
const writer = new BinaryWriter();
|
|
959
|
-
NewTask.serializeBinaryToWriter(this, writer);
|
|
960
|
-
return writer.getResultBuffer();
|
|
961
|
-
}
|
|
962
|
-
/**
|
|
963
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
964
|
-
*/
|
|
965
|
-
toObject() {
|
|
966
|
-
return {
|
|
967
|
-
taskId: this.taskId,
|
|
968
|
-
payloadId: this.payloadId,
|
|
969
|
-
originTaskId: this.originTaskId,
|
|
970
|
-
status: this.status,
|
|
971
|
-
expectedOutputKeys: (this.expectedOutputKeys || []).slice(),
|
|
972
|
-
dataDependencies: (this.dataDependencies || []).slice(),
|
|
973
|
-
retryOfIds: (this.retryOfIds || []).slice(),
|
|
974
|
-
parentTaskIds: (this.parentTaskIds || []).slice()
|
|
975
|
-
};
|
|
976
|
-
}
|
|
977
|
-
/**
|
|
978
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
979
|
-
*/
|
|
980
|
-
toJSON() {
|
|
981
|
-
return this.toObject();
|
|
982
|
-
}
|
|
983
|
-
/**
|
|
984
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
985
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
986
|
-
* 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
|
|
987
|
-
*/
|
|
988
|
-
toProtobufJSON(
|
|
989
|
-
// @ts-ignore
|
|
990
|
-
options) {
|
|
991
|
-
return {
|
|
992
|
-
taskId: this.taskId,
|
|
993
|
-
payloadId: this.payloadId,
|
|
994
|
-
originTaskId: this.originTaskId,
|
|
995
|
-
status: armonikApiGrpcV1Task_status003.TaskStatus[this.status === null || this.status === undefined ? 0 : this.status],
|
|
996
|
-
expectedOutputKeys: (this.expectedOutputKeys || []).slice(),
|
|
997
|
-
dataDependencies: (this.dataDependencies || []).slice(),
|
|
998
|
-
retryOfIds: (this.retryOfIds || []).slice(),
|
|
999
|
-
parentTaskIds: (this.parentTaskIds || []).slice()
|
|
1000
|
-
};
|
|
1001
|
-
}
|
|
1002
|
-
}
|
|
1003
|
-
EventSubscriptionResponse.NewTask = NewTask;
|
|
1004
|
-
/**
|
|
1005
|
-
* Message implementation for armonik.api.grpc.v1.events.EventSubscriptionResponse.NewResult
|
|
1006
|
-
*/
|
|
1007
|
-
class NewResult {
|
|
1008
|
-
static { this.id = 'armonik.api.grpc.v1.events.EventSubscriptionResponse.NewResult'; }
|
|
1009
|
-
/**
|
|
1010
|
-
* Deserialize binary data to message
|
|
1011
|
-
* @param instance message instance
|
|
1012
|
-
*/
|
|
1013
|
-
static deserializeBinary(bytes) {
|
|
1014
|
-
const instance = new NewResult();
|
|
1015
|
-
NewResult.deserializeBinaryFromReader(instance, new BinaryReader(bytes));
|
|
1016
|
-
return instance;
|
|
1017
|
-
}
|
|
1018
|
-
/**
|
|
1019
|
-
* Check all the properties and set default protobuf values if necessary
|
|
1020
|
-
* @param _instance message instance
|
|
1021
|
-
*/
|
|
1022
|
-
static refineValues(_instance) {
|
|
1023
|
-
_instance.resultId = _instance.resultId || '';
|
|
1024
|
-
_instance.ownerId = _instance.ownerId || '';
|
|
1025
|
-
_instance.status = _instance.status || 0;
|
|
1026
|
-
}
|
|
1027
|
-
/**
|
|
1028
|
-
* Deserializes / reads binary message into message instance using provided binary reader
|
|
1029
|
-
* @param _instance message instance
|
|
1030
|
-
* @param _reader binary reader instance
|
|
1031
|
-
*/
|
|
1032
|
-
static deserializeBinaryFromReader(_instance, _reader) {
|
|
1033
|
-
while (_reader.nextField()) {
|
|
1034
|
-
if (_reader.isEndGroup())
|
|
1035
|
-
break;
|
|
1036
|
-
switch (_reader.getFieldNumber()) {
|
|
1037
|
-
case 50:
|
|
1038
|
-
_instance.resultId = _reader.readString();
|
|
1039
|
-
break;
|
|
1040
|
-
case 51:
|
|
1041
|
-
_instance.ownerId = _reader.readString();
|
|
1042
|
-
break;
|
|
1043
|
-
case 52:
|
|
1044
|
-
_instance.status = _reader.readEnum();
|
|
1045
|
-
break;
|
|
1046
|
-
default:
|
|
1047
|
-
_reader.skipField();
|
|
1048
|
-
}
|
|
1049
|
-
}
|
|
1050
|
-
NewResult.refineValues(_instance);
|
|
1051
|
-
}
|
|
1052
|
-
/**
|
|
1053
|
-
* Serializes a message to binary format using provided binary reader
|
|
1054
|
-
* @param _instance message instance
|
|
1055
|
-
* @param _writer binary writer instance
|
|
1056
|
-
*/
|
|
1057
|
-
static serializeBinaryToWriter(_instance, _writer) {
|
|
1058
|
-
if (_instance.resultId) {
|
|
1059
|
-
_writer.writeString(50, _instance.resultId);
|
|
1060
|
-
}
|
|
1061
|
-
if (_instance.ownerId) {
|
|
1062
|
-
_writer.writeString(51, _instance.ownerId);
|
|
1063
|
-
}
|
|
1064
|
-
if (_instance.status) {
|
|
1065
|
-
_writer.writeEnum(52, _instance.status);
|
|
1066
|
-
}
|
|
1067
|
-
}
|
|
1068
|
-
/**
|
|
1069
|
-
* Message constructor. Initializes the properties and applies default Protobuf values if necessary
|
|
1070
|
-
* @param _value initial values object or instance of NewResult to deeply clone from
|
|
1071
|
-
*/
|
|
1072
|
-
constructor(_value) {
|
|
1073
|
-
_value = _value || {};
|
|
1074
|
-
this.resultId = _value.resultId;
|
|
1075
|
-
this.ownerId = _value.ownerId;
|
|
1076
|
-
this.status = _value.status;
|
|
1077
|
-
NewResult.refineValues(this);
|
|
1078
|
-
}
|
|
1079
|
-
get resultId() {
|
|
1080
|
-
return this._resultId;
|
|
1081
|
-
}
|
|
1082
|
-
set resultId(value) {
|
|
1083
|
-
this._resultId = value;
|
|
1084
|
-
}
|
|
1085
|
-
get ownerId() {
|
|
1086
|
-
return this._ownerId;
|
|
1087
|
-
}
|
|
1088
|
-
set ownerId(value) {
|
|
1089
|
-
this._ownerId = value;
|
|
1090
|
-
}
|
|
1091
|
-
get status() {
|
|
1092
|
-
return this._status;
|
|
1093
|
-
}
|
|
1094
|
-
set status(value) {
|
|
1095
|
-
this._status = value;
|
|
1096
|
-
}
|
|
1097
|
-
/**
|
|
1098
|
-
* Serialize message to binary data
|
|
1099
|
-
* @param instance message instance
|
|
1100
|
-
*/
|
|
1101
|
-
serializeBinary() {
|
|
1102
|
-
const writer = new BinaryWriter();
|
|
1103
|
-
NewResult.serializeBinaryToWriter(this, writer);
|
|
1104
|
-
return writer.getResultBuffer();
|
|
1105
|
-
}
|
|
1106
|
-
/**
|
|
1107
|
-
* Cast message to standard JavaScript object (all non-primitive values are deeply cloned)
|
|
1108
|
-
*/
|
|
1109
|
-
toObject() {
|
|
1110
|
-
return {
|
|
1111
|
-
resultId: this.resultId,
|
|
1112
|
-
ownerId: this.ownerId,
|
|
1113
|
-
status: this.status
|
|
1114
|
-
};
|
|
1115
|
-
}
|
|
1116
|
-
/**
|
|
1117
|
-
* Convenience method to support JSON.stringify(message), replicates the structure of toObject()
|
|
1118
|
-
*/
|
|
1119
|
-
toJSON() {
|
|
1120
|
-
return this.toObject();
|
|
1121
|
-
}
|
|
1122
|
-
/**
|
|
1123
|
-
* Cast message to JSON using protobuf JSON notation: https://developers.google.com/protocol-buffers/docs/proto3#json
|
|
1124
|
-
* Attention: output differs from toObject() e.g. enums are represented as names and not as numbers, Timestamp is an ISO Date string format etc.
|
|
1125
|
-
* 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
|
|
1126
|
-
*/
|
|
1127
|
-
toProtobufJSON(
|
|
1128
|
-
// @ts-ignore
|
|
1129
|
-
options) {
|
|
1130
|
-
return {
|
|
1131
|
-
resultId: this.resultId,
|
|
1132
|
-
ownerId: this.ownerId,
|
|
1133
|
-
status: armonikApiGrpcV1Result_status001.ResultStatus[this.status === null || this.status === undefined ? 0 : this.status]
|
|
1134
|
-
};
|
|
1135
|
-
}
|
|
1136
|
-
}
|
|
1137
|
-
EventSubscriptionResponse.NewResult = NewResult;
|
|
1138
|
-
})(EventSubscriptionResponse || (EventSubscriptionResponse = {}));
|
|
1139
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLWNvbW1vbi5wYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZW9jb25zdWx0aW5nZnIvYXJtb25pay5hcGkuYW5ndWxhci9zcmMvbGliL2dlbmVyYXRlZC9ldmVudHMtY29tbW9uLnBiLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBLE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFjLE1BQU0saUJBQWlCLENBQUM7QUFFekUsT0FBTyxLQUFLLGdDQUFnQyxNQUFNLG9CQUFvQixDQUFDO0FBRXZFLE9BQU8sS0FBSyw4QkFBOEIsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRSxPQUFPLEtBQUssMEJBQTBCLE1BQU0sc0JBQXNCLENBQUM7QUFDbkUsT0FBTyxLQUFLLHdCQUF3QixNQUFNLG9CQUFvQixDQUFDO0FBQy9ELE1BQU0sQ0FBTixJQUFZLFVBT1g7QUFQRCxXQUFZLFVBQVU7SUFDcEIsaUZBQTJCLENBQUE7SUFDM0IsMkVBQXdCLENBQUE7SUFDeEIsK0ZBQWtDLENBQUE7SUFDbEMsK0VBQTBCLENBQUE7SUFDMUIsbUdBQW9DLENBQUE7SUFDcEMsaUdBQW1DLENBQUE7QUFDckMsQ0FBQyxFQVBXLFVBQVUsS0FBVixVQUFVLFFBT3JCO0FBQ0Q7O0dBRUc7QUFDSCxNQUFNLE9BQU8sd0JBQXdCO2FBQzVCLE9BQUUsR0FBRyxxREFBcUQsQ0FBQztJQUVsRTs7O09BR0c7SUFDSCxNQUFNLENBQUMsaUJBQWlCLENBQUMsS0FBaUI7UUFDeEMsTUFBTSxRQUFRLEdBQUcsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO1FBQ2hELHdCQUF3QixDQUFDLDJCQUEyQixDQUNsRCxRQUFRLEVBQ1IsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQ3hCLENBQUM7UUFDRixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFtQztRQUNy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QXVCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2hELE9BQU8sTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ2xDLENBQUM7UUFFRDs7V0FFRztRQUNILFFBQVE7WUFDTixPQUFPO2dCQUNMLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNyQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07YUFDcEIsQ0FBQztRQUNKLENBQUM7UUFFRDs7V0FFRztRQUNILE1BQU07WUFDSixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QixDQUFDO1FBRUQ7Ozs7V0FJRztRQUNILGNBQWM7UUFDWixhQUFhO1FBQ2IsT0FBK0I7WUFFL0IsT0FBTztnQkFDTCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDckIsTUFBTSxFQUNKLGdDQUFnQyxDQUFDLFlBQVksQ0FDM0MsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FDcEU7YUFDSixDQUFDO1FBQ0osQ0FBQzs7SUF6SlUsbUNBQVMsWUEwSnJCLENBQUE7QUFvQkgsQ0FBQyxFQTE5QmEseUJBQXlCLEtBQXpCLHlCQUF5QixRQTA5QnRDIiwic291cmNlc0NvbnRlbnQiOlsiLyogdHNsaW50OmRpc2FibGUgKi9cbi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBAdHMtbm9jaGVja1xuLy9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRVxuLy8gRE8gTk9UIE1PRElGWSBJVCEgWU9VUiBDSEFOR0VTIFdJTEwgQkUgTE9TVFxuaW1wb3J0IHtcbiAgR3JwY01lc3NhZ2UsXG4gIFJlY3Vyc2l2ZVBhcnRpYWwsXG4gIFRvUHJvdG9idWZKU09OT3B0aW9uc1xufSBmcm9tICdAbmd4LWdycGMvY29tbW9uJztcbmltcG9ydCB7IEJpbmFyeVJlYWRlciwgQmluYXJ5V3JpdGVyLCBCeXRlU291cmNlIH0gZnJvbSAnZ29vZ2xlLXByb3RvYnVmJztcbmltcG9ydCAqIGFzIGFybW9uaWtBcGlHcnBjVjEwMDAgZnJvbSAnLi9maWx0ZXJzLWNvbW1vbi5wYic7XG5pbXBvcnQgKiBhcyBhcm1vbmlrQXBpR3JwY1YxUmVzdWx0X3N0YXR1czAwMSBmcm9tICcuL3Jlc3VsdC1zdGF0dXMucGInO1xuaW1wb3J0ICogYXMgYXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDIgZnJvbSAnLi9yZXN1bHRzLWZpZWxkcy5wYic7XG5pbXBvcnQgKiBhcyBhcm1vbmlrQXBpR3JwY1YxVGFza19zdGF0dXMwMDMgZnJvbSAnLi90YXNrLXN0YXR1cy5wYic7XG5pbXBvcnQgKiBhcyBhcm1vbmlrQXBpR3JwY1YxVGFza3MwMDQgZnJvbSAnLi90YXNrcy1maWVsZHMucGInO1xuaW1wb3J0ICogYXMgYXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDUgZnJvbSAnLi9yZXN1bHRzLWZpbHRlcnMucGInO1xuaW1wb3J0ICogYXMgYXJtb25pa0FwaUdycGNWMVRhc2tzMDA2IGZyb20gJy4vdGFza3MtZmlsdGVycy5wYic7XG5leHBvcnQgZW51bSBFdmVudHNFbnVtIHtcbiAgRVZFTlRTX0VOVU1fVU5TUEVDSUZJRUQgPSAwLFxuICBFVkVOVFNfRU5VTV9ORVdfVEFTSyA9IDEsXG4gIEVWRU5UU19FTlVNX1RBU0tfU1RBVFVTX1VQREFURSA9IDIsXG4gIEVWRU5UU19FTlVNX05FV19SRVNVTFQgPSAzLFxuICBFVkVOVFNfRU5VTV9SRVNVTFRfU1RBVFVTX1VQREFURSA9IDQsXG4gIEVWRU5UU19FTlVNX1JFU1VMVF9PV05FUl9VUERBVEUgPSA1XG59XG4vKipcbiAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIGFybW9uaWsuYXBpLmdycGMudjEuZXZlbnRzLkV2ZW50U3Vic2NyaXB0aW9uUmVxdWVzdFxuICovXG5leHBvcnQgY2xhc3MgRXZlbnRTdWJzY3JpcHRpb25SZXF1ZXN0IGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICBzdGF0aWMgaWQgPSAnYXJtb25pay5hcGkuZ3JwYy52MS5ldmVudHMuRXZlbnRTdWJzY3JpcHRpb25SZXF1ZXN0JztcblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRXZlbnRTdWJzY3JpcHRpb25SZXF1ZXN0KCk7XG4gICAgRXZlbnRTdWJzY3JpcHRpb25SZXF1ZXN0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIGluc3RhbmNlLFxuICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICApO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBhbGwgdGhlIHByb3BlcnRpZXMgYW5kIHNldCBkZWZhdWx0IHByb3RvYnVmIHZhbHVlcyBpZiBuZWNlc3NhcnlcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgcmVmaW5lVmFsdWVzKF9pbnN0YW5jZTogRXZlbnRTdWJzY3JpcHRpb25SZXF1ZXN0KSB7XG4gICAgX2luc3RhbmNlLnNlc3Npb25JZCA9IF9pbnN0YW5jZS5zZXNzaW9uSWQgfHwgJyc7XG4gICAgX2luc3RhbmNlLnRhc2tzRmlsdGVycyA9IF9pbnN0YW5jZS50YXNrc0ZpbHRlcnMgfHwgdW5kZWZpbmVkO1xuICAgIF9pbnN0YW5jZS5yZXN1bHRzRmlsdGVycyA9IF9pbnN0YW5jZS5yZXN1bHRzRmlsdGVycyB8fCB1bmRlZmluZWQ7XG4gICAgX2luc3RhbmNlLnJldHVybmVkRXZlbnRzID0gX2luc3RhbmNlLnJldHVybmVkRXZlbnRzIHx8IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgIF9pbnN0YW5jZTogRXZlbnRTdWJzY3JpcHRpb25SZXF1ZXN0LFxuICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICApIHtcbiAgICB3aGlsZSAoX3JlYWRlci5uZXh0RmllbGQoKSkge1xuICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIF9pbnN0YW5jZS5zZXNzaW9uSWQgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIF9pbnN0YW5jZS50YXNrc0ZpbHRlcnMgPSBuZXcgYXJtb25pa0FwaUdycGNWMVRhc2tzMDA2LkZpbHRlcnMoKTtcbiAgICAgICAgICBfcmVhZGVyLnJlYWRNZXNzYWdlKFxuICAgICAgICAgICAgX2luc3RhbmNlLnRhc2tzRmlsdGVycyxcbiAgICAgICAgICAgIGFybW9uaWtBcGlHcnBjVjFUYXNrczAwNi5GaWx0ZXJzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBfaW5zdGFuY2UucmVzdWx0c0ZpbHRlcnMgPSBuZXcgYXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDUuRmlsdGVycygpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2UucmVzdWx0c0ZpbHRlcnMsXG4gICAgICAgICAgICBhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwNS5GaWx0ZXJzLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAoX2luc3RhbmNlLnJldHVybmVkRXZlbnRzID0gX2luc3RhbmNlLnJldHVybmVkRXZlbnRzIHx8IFtdKS5wdXNoKFxuICAgICAgICAgICAgLi4uKF9yZWFkZXIucmVhZFBhY2tlZEVudW0oKSB8fCBbXSlcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgRXZlbnRTdWJzY3JpcHRpb25SZXF1ZXN0LnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgIF9pbnN0YW5jZTogRXZlbnRTdWJzY3JpcHRpb25SZXF1ZXN0LFxuICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICApIHtcbiAgICBpZiAoX2luc3RhbmNlLnNlc3Npb25JZCkge1xuICAgICAgX3dyaXRlci53cml0ZVN0cmluZygxLCBfaW5zdGFuY2Uuc2Vzc2lvbklkKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS50YXNrc0ZpbHRlcnMpIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICAyLFxuICAgICAgICBfaW5zdGFuY2UudGFza3NGaWx0ZXJzIGFzIGFueSxcbiAgICAgICAgYXJtb25pa0FwaUdycGNWMVRhc2tzMDA2LkZpbHRlcnMuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UucmVzdWx0c0ZpbHRlcnMpIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICAzLFxuICAgICAgICBfaW5zdGFuY2UucmVzdWx0c0ZpbHRlcnMgYXMgYW55LFxuICAgICAgICBhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwNS5GaWx0ZXJzLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnJldHVybmVkRXZlbnRzICYmIF9pbnN0YW5jZS5yZXR1cm5lZEV2ZW50cy5sZW5ndGgpIHtcbiAgICAgIF93cml0ZXIud3JpdGVQYWNrZWRFbnVtKDQsIF9pbnN0YW5jZS5yZXR1cm5lZEV2ZW50cyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX3Rhc2tzRmlsdGVycz86IGFybW9uaWtBcGlHcnBjVjFUYXNrczAwNi5GaWx0ZXJzO1xuICBwcml2YXRlIF9yZXN1bHRzRmlsdGVycz86IGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA1LkZpbHRlcnM7XG4gIHByaXZhdGUgX3JldHVybmVkRXZlbnRzOiBFdmVudHNFbnVtW107XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgKiBAcGFyYW0gX3ZhbHVlIGluaXRpYWwgdmFsdWVzIG9iamVjdCBvciBpbnN0YW5jZSBvZiBFdmVudFN1YnNjcmlwdGlvblJlcXVlc3QgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8RXZlbnRTdWJzY3JpcHRpb25SZXF1ZXN0LkFzT2JqZWN0Pikge1xuICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICB0aGlzLnNlc3Npb25JZCA9IF92YWx1ZS5zZXNzaW9uSWQ7XG4gICAgdGhpcy50YXNrc0ZpbHRlcnMgPSBfdmFsdWUudGFza3NGaWx0ZXJzXG4gICAgICA/IG5ldyBhcm1vbmlrQXBpR3JwY1YxVGFza3MwMDYuRmlsdGVycyhfdmFsdWUudGFza3NGaWx0ZXJzKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5yZXN1bHRzRmlsdGVycyA9IF92YWx1ZS5yZXN1bHRzRmlsdGVyc1xuICAgICAgPyBuZXcgYXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDUuRmlsdGVycyhfdmFsdWUucmVzdWx0c0ZpbHRlcnMpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJldHVybmVkRXZlbnRzID0gKF92YWx1ZS5yZXR1cm5lZEV2ZW50cyB8fCBbXSkuc2xpY2UoKTtcbiAgICBFdmVudFN1YnNjcmlwdGlvblJlcXVlc3QucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG4gIHNldCBzZXNzaW9uSWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHZhbHVlO1xuICB9XG4gIGdldCB0YXNrc0ZpbHRlcnMoKTogYXJtb25pa0FwaUdycGNWMVRhc2tzMDA2LkZpbHRlcnMgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl90YXNrc0ZpbHRlcnM7XG4gIH1cbiAgc2V0IHRhc2tzRmlsdGVycyh2YWx1ZTogYXJtb25pa0FwaUdycGNWMVRhc2tzMDA2LkZpbHRlcnMgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl90YXNrc0ZpbHRlcnMgPSB2YWx1ZTtcbiAgfVxuICBnZXQgcmVzdWx0c0ZpbHRlcnMoKTogYXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDUuRmlsdGVycyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3Jlc3VsdHNGaWx0ZXJzO1xuICB9XG4gIHNldCByZXN1bHRzRmlsdGVycyh2YWx1ZTogYXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDUuRmlsdGVycyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3Jlc3VsdHNGaWx0ZXJzID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHJldHVybmVkRXZlbnRzKCk6IEV2ZW50c0VudW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuX3JldHVybmVkRXZlbnRzO1xuICB9XG4gIHNldCByZXR1cm5lZEV2ZW50cyh2YWx1ZTogRXZlbnRzRW51bVtdKSB7XG4gICAgdGhpcy5fcmV0dXJuZWRFdmVudHMgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBFdmVudFN1YnNjcmlwdGlvblJlcXVlc3Quc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgKi9cbiAgdG9PYmplY3QoKTogRXZlbnRTdWJzY3JpcHRpb25SZXF1ZXN0LkFzT2JqZWN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCxcbiAgICAgIHRhc2tzRmlsdGVyczogdGhpcy50YXNrc0ZpbHRlcnNcbiAgICAgICAgPyB0aGlzLnRhc2tzRmlsdGVycy50b09iamVjdCgpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgcmVzdWx0c0ZpbHRlcnM6IHRoaXMucmVzdWx0c0ZpbHRlcnNcbiAgICAgICAgPyB0aGlzLnJlc3VsdHNGaWx0ZXJzLnRvT2JqZWN0KClcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICByZXR1cm5lZEV2ZW50czogKHRoaXMucmV0dXJuZWRFdmVudHMgfHwgW10pLnNsaWNlKClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAqIEF0dGVudGlvbjogb3V0cHV0IGRpZmZlcnMgZnJvbSB0b09iamVjdCgpIGUuZy4gZW51bXMgYXJlIHJlcHJlc2VudGVkIGFzIG5hbWVzIGFuZCBub3QgYXMgbnVtYmVycywgVGltZXN0YW1wIGlzIGFuIElTTyBEYXRlIHN0cmluZyBmb3JtYXQgZXRjLlxuICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAqL1xuICB0b1Byb3RvYnVmSlNPTihcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICApOiBFdmVudFN1YnNjcmlwdGlvblJlcXVlc3QuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLFxuICAgICAgdGFza3NGaWx0ZXJzOiB0aGlzLnRhc2tzRmlsdGVyc1xuICAgICAgICA/IHRoaXMudGFza3NGaWx0ZXJzLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHJlc3VsdHNGaWx0ZXJzOiB0aGlzLnJlc3VsdHNGaWx0ZXJzXG4gICAgICAgID8gdGhpcy5yZXN1bHRzRmlsdGVycy50b1Byb3RvYnVmSlNPTihvcHRpb25zKVxuICAgICAgICA6IG51bGwsXG4gICAgICByZXR1cm5lZEV2ZW50czogKHRoaXMucmV0dXJuZWRFdmVudHMgfHwgW10pLm1hcCh2ID0+IEV2ZW50c0VudW1bdl0pXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IG1vZHVsZSBFdmVudFN1YnNjcmlwdGlvblJlcXVlc3Qge1xuICAvKipcbiAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIEV2ZW50U3Vic2NyaXB0aW9uUmVxdWVzdFxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gICAgdGFza3NGaWx0ZXJzPzogYXJtb25pa0FwaUdycGNWMVRhc2tzMDA2LkZpbHRlcnMuQXNPYmplY3Q7XG4gICAgcmVzdWx0c0ZpbHRlcnM/OiBhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwNS5GaWx0ZXJzLkFzT2JqZWN0O1xuICAgIHJldHVybmVkRXZlbnRzOiBFdmVudHNFbnVtW107XG4gIH1cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgRXZlbnRTdWJzY3JpcHRpb25SZXF1ZXN0XG4gICAqL1xuICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgICB0YXNrc0ZpbHRlcnM6IGFybW9uaWtBcGlHcnBjVjFUYXNrczAwNi5GaWx0ZXJzLkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgICByZXN1bHRzRmlsdGVyczogYXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDUuRmlsdGVycy5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgcmV0dXJuZWRFdmVudHM6IHN0cmluZ1tdO1xuICB9XG59XG5cbi8qKlxuICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3IgYXJtb25pay5hcGkuZ3JwYy52MS5ldmVudHMuRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZVxuICovXG5leHBvcnQgY2xhc3MgRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZSBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgc3RhdGljIGlkID0gJ2FybW9uaWsuYXBpLmdycGMudjEuZXZlbnRzLkV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2UnO1xuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBFdmVudFN1YnNjcmlwdGlvblJlc3BvbnNlKCk7XG4gICAgRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZS5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IEV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICBfaW5zdGFuY2Uuc2Vzc2lvbklkID0gX2luc3RhbmNlLnNlc3Npb25JZCB8fCAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICBfaW5zdGFuY2U6IEV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgX3JlYWRlcjogQmluYXJ5UmVhZGVyXG4gICkge1xuICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICBpZiAoX3JlYWRlci5pc0VuZEdyb3VwKCkpIGJyZWFrO1xuXG4gICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgX2luc3RhbmNlLnNlc3Npb25JZCA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgX2luc3RhbmNlLnRhc2tTdGF0dXNVcGRhdGUgPSBuZXcgRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZS5UYXNrU3RhdHVzVXBkYXRlKCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS50YXNrU3RhdHVzVXBkYXRlLFxuICAgICAgICAgICAgRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZS5UYXNrU3RhdHVzVXBkYXRlXG4gICAgICAgICAgICAgIC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgX2luc3RhbmNlLnJlc3VsdFN0YXR1c1VwZGF0ZSA9IG5ldyBFdmVudFN1YnNjcmlwdGlvblJlc3BvbnNlLlJlc3VsdFN0YXR1c1VwZGF0ZSgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2UucmVzdWx0U3RhdHVzVXBkYXRlLFxuICAgICAgICAgICAgRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZS5SZXN1bHRTdGF0dXNVcGRhdGVcbiAgICAgICAgICAgICAgLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBfaW5zdGFuY2UucmVzdWx0T3duZXJVcGRhdGUgPSBuZXcgRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZS5SZXN1bHRPd25lclVwZGF0ZSgpO1xuICAgICAgICAgIF9yZWFkZXIucmVhZE1lc3NhZ2UoXG4gICAgICAgICAgICBfaW5zdGFuY2UucmVzdWx0T3duZXJVcGRhdGUsXG4gICAgICAgICAgICBFdmVudFN1YnNjcmlwdGlvblJlc3BvbnNlLlJlc3VsdE93bmVyVXBkYXRlXG4gICAgICAgICAgICAgIC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgX2luc3RhbmNlLm5ld1Rhc2sgPSBuZXcgRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZS5OZXdUYXNrKCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5uZXdUYXNrLFxuICAgICAgICAgICAgRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZS5OZXdUYXNrLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBfaW5zdGFuY2UubmV3UmVzdWx0ID0gbmV3IEV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2UuTmV3UmVzdWx0KCk7XG4gICAgICAgICAgX3JlYWRlci5yZWFkTWVzc2FnZShcbiAgICAgICAgICAgIF9pbnN0YW5jZS5uZXdSZXN1bHQsXG4gICAgICAgICAgICBFdmVudFN1YnNjcmlwdGlvblJlc3BvbnNlLk5ld1Jlc3VsdC5kZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZS5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICBfaW5zdGFuY2U6IEV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICkge1xuICAgIGlmIChfaW5zdGFuY2Uuc2Vzc2lvbklkKSB7XG4gICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDEsIF9pbnN0YW5jZS5zZXNzaW9uSWQpO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLnRhc2tTdGF0dXNVcGRhdGUpIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICAyLFxuICAgICAgICBfaW5zdGFuY2UudGFza1N0YXR1c1VwZGF0ZSBhcyBhbnksXG4gICAgICAgIEV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2UuVGFza1N0YXR1c1VwZGF0ZS5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5yZXN1bHRTdGF0dXNVcGRhdGUpIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICAzLFxuICAgICAgICBfaW5zdGFuY2UucmVzdWx0U3RhdHVzVXBkYXRlIGFzIGFueSxcbiAgICAgICAgRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZS5SZXN1bHRTdGF0dXNVcGRhdGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChfaW5zdGFuY2UucmVzdWx0T3duZXJVcGRhdGUpIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICA0LFxuICAgICAgICBfaW5zdGFuY2UucmVzdWx0T3duZXJVcGRhdGUgYXMgYW55LFxuICAgICAgICBFdmVudFN1YnNjcmlwdGlvblJlc3BvbnNlLlJlc3VsdE93bmVyVXBkYXRlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlLm5ld1Rhc2spIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICA1LFxuICAgICAgICBfaW5zdGFuY2UubmV3VGFzayBhcyBhbnksXG4gICAgICAgIEV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2UuTmV3VGFzay5zZXJpYWxpemVCaW5hcnlUb1dyaXRlclxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZS5uZXdSZXN1bHQpIHtcbiAgICAgIF93cml0ZXIud3JpdGVNZXNzYWdlKFxuICAgICAgICA2LFxuICAgICAgICBfaW5zdGFuY2UubmV3UmVzdWx0IGFzIGFueSxcbiAgICAgICAgRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZS5OZXdSZXN1bHQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX3Rhc2tTdGF0dXNVcGRhdGU/OiBFdmVudFN1YnNjcmlwdGlvblJlc3BvbnNlLlRhc2tTdGF0dXNVcGRhdGU7XG4gIHByaXZhdGUgX3Jlc3VsdFN0YXR1c1VwZGF0ZT86IEV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2UuUmVzdWx0U3RhdHVzVXBkYXRlO1xuICBwcml2YXRlIF9yZXN1bHRPd25lclVwZGF0ZT86IEV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2UuUmVzdWx0T3duZXJVcGRhdGU7XG4gIHByaXZhdGUgX25ld1Rhc2s/OiBFdmVudFN1YnNjcmlwdGlvblJlc3BvbnNlLk5ld1Rhc2s7XG4gIHByaXZhdGUgX25ld1Jlc3VsdD86IEV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2UuTmV3UmVzdWx0O1xuXG4gIHByaXZhdGUgX3VwZGF0ZTogRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZS5VcGRhdGVDYXNlID1cbiAgICBFdmVudFN1YnNjcmlwdGlvblJlc3BvbnNlLlVwZGF0ZUNhc2Uubm9uZTtcblxuICAvKipcbiAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIEV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2UgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICovXG4gIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8RXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZS5Bc09iamVjdD4pIHtcbiAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgdGhpcy5zZXNzaW9uSWQgPSBfdmFsdWUuc2Vzc2lvbklkO1xuICAgIHRoaXMudGFza1N0YXR1c1VwZGF0ZSA9IF92YWx1ZS50YXNrU3RhdHVzVXBkYXRlXG4gICAgICA/IG5ldyBFdmVudFN1YnNjcmlwdGlvblJlc3BvbnNlLlRhc2tTdGF0dXNVcGRhdGUoX3ZhbHVlLnRhc2tTdGF0dXNVcGRhdGUpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlc3VsdFN0YXR1c1VwZGF0ZSA9IF92YWx1ZS5yZXN1bHRTdGF0dXNVcGRhdGVcbiAgICAgID8gbmV3IEV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2UuUmVzdWx0U3RhdHVzVXBkYXRlKFxuICAgICAgICAgIF92YWx1ZS5yZXN1bHRTdGF0dXNVcGRhdGVcbiAgICAgICAgKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5yZXN1bHRPd25lclVwZGF0ZSA9IF92YWx1ZS5yZXN1bHRPd25lclVwZGF0ZVxuICAgICAgPyBuZXcgRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZS5SZXN1bHRPd25lclVwZGF0ZShcbiAgICAgICAgICBfdmFsdWUucmVzdWx0T3duZXJVcGRhdGVcbiAgICAgICAgKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5uZXdUYXNrID0gX3ZhbHVlLm5ld1Rhc2tcbiAgICAgID8gbmV3IEV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2UuTmV3VGFzayhfdmFsdWUubmV3VGFzaylcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMubmV3UmVzdWx0ID0gX3ZhbHVlLm5ld1Jlc3VsdFxuICAgICAgPyBuZXcgRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZS5OZXdSZXN1bHQoX3ZhbHVlLm5ld1Jlc3VsdClcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIEV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2UucmVmaW5lVmFsdWVzKHRoaXMpO1xuICB9XG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG4gIHNldCBzZXNzaW9uSWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHZhbHVlO1xuICB9XG4gIGdldCB0YXNrU3RhdHVzVXBkYXRlKCk6XG4gICAgfCBFdmVudFN1YnNjcmlwdGlvblJlc3BvbnNlLlRhc2tTdGF0dXNVcGRhdGVcbiAgICB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3Rhc2tTdGF0dXNVcGRhdGU7XG4gIH1cbiAgc2V0IHRhc2tTdGF0dXNVcGRhdGUoXG4gICAgdmFsdWU6IEV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2UuVGFza1N0YXR1c1VwZGF0ZSB8IHVuZGVmaW5lZFxuICApIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fcmVzdWx0U3RhdHVzVXBkYXRlID0gdGhpcy5fcmVzdWx0T3duZXJVcGRhdGUgPSB0aGlzLl9uZXdUYXNrID0gdGhpcy5fbmV3UmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fdXBkYXRlID0gRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZS5VcGRhdGVDYXNlLnRhc2tTdGF0dXNVcGRhdGU7XG4gICAgfVxuICAgIHRoaXMuX3Rhc2tTdGF0dXNVcGRhdGUgPSB2YWx1ZTtcbiAgfVxuICBnZXQgcmVzdWx0U3RhdHVzVXBkYXRlKCk6XG4gICAgfCBFdmVudFN1YnNjcmlwdGlvblJlc3BvbnNlLlJlc3VsdFN0YXR1c1VwZGF0ZVxuICAgIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzdWx0U3RhdHVzVXBkYXRlO1xuICB9XG4gIHNldCByZXN1bHRTdGF0dXNVcGRhdGUoXG4gICAgdmFsdWU6IEV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2UuUmVzdWx0U3RhdHVzVXBkYXRlIHwgdW5kZWZpbmVkXG4gICkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl90YXNrU3RhdHVzVXBkYXRlID0gdGhpcy5fcmVzdWx0T3duZXJVcGRhdGUgPSB0aGlzLl9uZXdUYXNrID0gdGhpcy5fbmV3UmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fdXBkYXRlID0gRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZS5VcGRhdGVDYXNlLnJlc3VsdFN0YXR1c1VwZGF0ZTtcbiAgICB9XG4gICAgdGhpcy5fcmVzdWx0U3RhdHVzVXBkYXRlID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHJlc3VsdE93bmVyVXBkYXRlKCk6XG4gICAgfCBFdmVudFN1YnNjcmlwdGlvblJlc3BvbnNlLlJlc3VsdE93bmVyVXBkYXRlXG4gICAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9yZXN1bHRPd25lclVwZGF0ZTtcbiAgfVxuICBzZXQgcmVzdWx0T3duZXJVcGRhdGUoXG4gICAgdmFsdWU6IEV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2UuUmVzdWx0T3duZXJVcGRhdGUgfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3Rhc2tTdGF0dXNVcGRhdGUgPSB0aGlzLl9yZXN1bHRTdGF0dXNVcGRhdGUgPSB0aGlzLl9uZXdUYXNrID0gdGhpcy5fbmV3UmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fdXBkYXRlID0gRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZS5VcGRhdGVDYXNlLnJlc3VsdE93bmVyVXBkYXRlO1xuICAgIH1cbiAgICB0aGlzLl9yZXN1bHRPd25lclVwZGF0ZSA9IHZhbHVlO1xuICB9XG4gIGdldCBuZXdUYXNrKCk6IEV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2UuTmV3VGFzayB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX25ld1Rhc2s7XG4gIH1cbiAgc2V0IG5ld1Rhc2sodmFsdWU6IEV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2UuTmV3VGFzayB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl90YXNrU3RhdHVzVXBkYXRlID0gdGhpcy5fcmVzdWx0U3RhdHVzVXBkYXRlID0gdGhpcy5fcmVzdWx0T3duZXJVcGRhdGUgPSB0aGlzLl9uZXdSZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl91cGRhdGUgPSBFdmVudFN1YnNjcmlwdGlvblJlc3BvbnNlLlVwZGF0ZUNhc2UubmV3VGFzaztcbiAgICB9XG4gICAgdGhpcy5fbmV3VGFzayA9IHZhbHVlO1xuICB9XG4gIGdldCBuZXdSZXN1bHQoKTogRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZS5OZXdSZXN1bHQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9uZXdSZXN1bHQ7XG4gIH1cbiAgc2V0IG5ld1Jlc3VsdCh2YWx1ZTogRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZS5OZXdSZXN1bHQgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fdGFza1N0YXR1c1VwZGF0ZSA9IHRoaXMuX3Jlc3VsdFN0YXR1c1VwZGF0ZSA9IHRoaXMuX3Jlc3VsdE93bmVyVXBkYXRlID0gdGhpcy5fbmV3VGFzayA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3VwZGF0ZSA9IEV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2UuVXBkYXRlQ2FzZS5uZXdSZXN1bHQ7XG4gICAgfVxuICAgIHRoaXMuX25ld1Jlc3VsdCA9IHZhbHVlO1xuICB9XG4gIGdldCB1cGRhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VwZGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgKi9cbiAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICBFdmVudFN1YnNjcmlwdGlvblJlc3BvbnNlLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgcmV0dXJuIHdyaXRlci5nZXRSZXN1bHRCdWZmZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgKGFsbCBub24tcHJpbWl0aXZlIHZhbHVlcyBhcmUgZGVlcGx5IGNsb25lZClcbiAgICovXG4gIHRvT2JqZWN0KCk6IEV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2UuQXNPYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLFxuICAgICAgdGFza1N0YXR1c1VwZGF0ZTogdGhpcy50YXNrU3RhdHVzVXBkYXRlXG4gICAgICAgID8gdGhpcy50YXNrU3RhdHVzVXBkYXRlLnRvT2JqZWN0KClcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICByZXN1bHRTdGF0dXNVcGRhdGU6IHRoaXMucmVzdWx0U3RhdHVzVXBkYXRlXG4gICAgICAgID8gdGhpcy5yZXN1bHRTdGF0dXNVcGRhdGUudG9PYmplY3QoKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHJlc3VsdE93bmVyVXBkYXRlOiB0aGlzLnJlc3VsdE93bmVyVXBkYXRlXG4gICAgICAgID8gdGhpcy5yZXN1bHRPd25lclVwZGF0ZS50b09iamVjdCgpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgbmV3VGFzazogdGhpcy5uZXdUYXNrID8gdGhpcy5uZXdUYXNrLnRvT2JqZWN0KCkgOiB1bmRlZmluZWQsXG4gICAgICBuZXdSZXN1bHQ6IHRoaXMubmV3UmVzdWx0ID8gdGhpcy5uZXdSZXN1bHQudG9PYmplY3QoKSA6IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAqIElmIHRoZSBtZXNzYWdlIGl0c2VsZiBvciBzb21lIG9mIGRlc2NlbmRhbnQgbWVzc2FnZXMgaXMgZ29vZ2xlLnByb3RvYnVmLkFueSwgeW91IE1VU1QgcHJvdmlkZSBhIG1lc3NhZ2UgcG9vbCBhcyBvcHRpb25zLiBJZiBub3QsIHRoZSBtZXNzYWdlUG9vbCBpcyBub3QgcmVxdWlyZWRcbiAgICovXG4gIHRvUHJvdG9idWZKU09OKFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICk6IEV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2UuQXNQcm90b2J1ZkpTT04ge1xuICAgIHJldHVybiB7XG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLFxuICAgICAgdGFza1N0YXR1c1VwZGF0ZTogdGhpcy50YXNrU3RhdHVzVXBkYXRlXG4gICAgICAgID8gdGhpcy50YXNrU3RhdHVzVXBkYXRlLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpXG4gICAgICAgIDogbnVsbCxcbiAgICAgIHJlc3VsdFN0YXR1c1VwZGF0ZTogdGhpcy5yZXN1bHRTdGF0dXNVcGRhdGVcbiAgICAgICAgPyB0aGlzLnJlc3VsdFN0YXR1c1VwZGF0ZS50b1Byb3RvYnVmSlNPTihvcHRpb25zKVxuICAgICAgICA6IG51bGwsXG4gICAgICByZXN1bHRPd25lclVwZGF0ZTogdGhpcy5yZXN1bHRPd25lclVwZGF0ZVxuICAgICAgICA/IHRoaXMucmVzdWx0T3duZXJVcGRhdGUudG9Qcm90b2J1ZkpTT04ob3B0aW9ucylcbiAgICAgICAgOiBudWxsLFxuICAgICAgbmV3VGFzazogdGhpcy5uZXdUYXNrID8gdGhpcy5uZXdUYXNrLnRvUHJvdG9idWZKU09OKG9wdGlvbnMpIDogbnVsbCxcbiAgICAgIG5ld1Jlc3VsdDogdGhpcy5uZXdSZXN1bHQgPyB0aGlzLm5ld1Jlc3VsdC50b1Byb3RvYnVmSlNPTihvcHRpb25zKSA6IG51bGxcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbW9kdWxlIEV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2Uge1xuICAvKipcbiAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIEV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2VcbiAgICovXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgIHNlc3Npb25JZDogc3RyaW5nO1xuICAgIHRhc2tTdGF0dXNVcGRhdGU/OiBFdmVudFN1YnNjcmlwdGlvblJlc3BvbnNlLlRhc2tTdGF0dXNVcGRhdGUuQXNPYmplY3Q7XG4gICAgcmVzdWx0U3RhdHVzVXBkYXRlPzogRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZS5SZXN1bHRTdGF0dXNVcGRhdGUuQXNPYmplY3Q7XG4gICAgcmVzdWx0T3duZXJVcGRhdGU/OiBFdmVudFN1YnNjcmlwdGlvblJlc3BvbnNlLlJlc3VsdE93bmVyVXBkYXRlLkFzT2JqZWN0O1xuICAgIG5ld1Rhc2s/OiBFdmVudFN1YnNjcmlwdGlvblJlc3BvbnNlLk5ld1Rhc2suQXNPYmplY3Q7XG4gICAgbmV3UmVzdWx0PzogRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZS5OZXdSZXN1bHQuQXNPYmplY3Q7XG4gIH1cblxuICAvKipcbiAgICogUHJvdG9idWYgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZVxuICAgKi9cbiAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gICAgdGFza1N0YXR1c1VwZGF0ZTogRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZS5UYXNrU3RhdHVzVXBkYXRlLkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgICByZXN1bHRTdGF0dXNVcGRhdGU6IEV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2UuUmVzdWx0U3RhdHVzVXBkYXRlLkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgICByZXN1bHRPd25lclVwZGF0ZTogRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZS5SZXN1bHRPd25lclVwZGF0ZS5Bc1Byb3RvYnVmSlNPTiB8IG51bGw7XG4gICAgbmV3VGFzazogRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZS5OZXdUYXNrLkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgICBuZXdSZXN1bHQ6IEV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2UuTmV3UmVzdWx0LkFzUHJvdG9idWZKU09OIHwgbnVsbDtcbiAgfVxuICBleHBvcnQgZW51bSBVcGRhdGVDYXNlIHtcbiAgICBub25lID0gMCxcbiAgICB0YXNrU3RhdHVzVXBkYXRlID0gMSxcbiAgICByZXN1bHRTdGF0dXNVcGRhdGUgPSAyLFxuICAgIHJlc3VsdE93bmVyVXBkYXRlID0gMyxcbiAgICBuZXdUYXNrID0gNCxcbiAgICBuZXdSZXN1bHQgPSA1XG4gIH1cbiAgLyoqXG4gICAqIE1lc3NhZ2UgaW1wbGVtZW50YXRpb24gZm9yIGFybW9uaWsuYXBpLmdycGMudjEuZXZlbnRzLkV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2UuVGFza1N0YXR1c1VwZGF0ZVxuICAgKi9cbiAgZXhwb3J0IGNsYXNzIFRhc2tTdGF0dXNVcGRhdGUgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gICAgc3RhdGljIGlkID1cbiAgICAgICdhcm1vbmlrLmFwaS5ncnBjLnYxLmV2ZW50cy5FdmVudFN1YnNjcmlwdGlvblJlc3BvbnNlLlRhc2tTdGF0dXNVcGRhdGUnO1xuXG4gICAgLyoqXG4gICAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBUYXNrU3RhdHVzVXBkYXRlKCk7XG4gICAgICBUYXNrU3RhdHVzVXBkYXRlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgICApO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBUYXNrU3RhdHVzVXBkYXRlKSB7XG4gICAgICBfaW5zdGFuY2UudGFza0lkID0gX2luc3RhbmNlLnRhc2tJZCB8fCAnJztcbiAgICAgIF9pbnN0YW5jZS5zdGF0dXMgPSBfaW5zdGFuY2Uuc3RhdHVzIHx8IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIF9pbnN0YW5jZTogVGFza1N0YXR1c1VwZGF0ZSxcbiAgICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICAgICkge1xuICAgICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICBfaW5zdGFuY2UudGFza0lkID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgX2luc3RhbmNlLnN0YXR1cyA9IF9yZWFkZXIucmVhZEVudW0oKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIFRhc2tTdGF0dXNVcGRhdGUucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICAgIF9pbnN0YW5jZTogVGFza1N0YXR1c1VwZGF0ZSxcbiAgICAgIF93cml0ZXI6IEJpbmFyeVdyaXRlclxuICAgICkge1xuICAgICAgaWYgKF9pbnN0YW5jZS50YXNrSWQpIHtcbiAgICAgICAgX3dyaXRlci53cml0ZVN0cmluZygxMCwgX2luc3RhbmNlLnRhc2tJZCk7XG4gICAgICB9XG4gICAgICBpZiAoX2luc3RhbmNlLnN0YXR1cykge1xuICAgICAgICBfd3JpdGVyLndyaXRlRW51bSgxMSwgX2luc3RhbmNlLnN0YXR1cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdGFza0lkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfc3RhdHVzOiBhcm1vbmlrQXBpR3JwY1YxVGFza19zdGF0dXMwMDMuVGFza1N0YXR1cztcblxuICAgIC8qKlxuICAgICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIFRhc2tTdGF0dXNVcGRhdGUgdG8gZGVlcGx5IGNsb25lIGZyb21cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihfdmFsdWU/OiBSZWN1cnNpdmVQYXJ0aWFsPFRhc2tTdGF0dXNVcGRhdGUuQXNPYmplY3Q+KSB7XG4gICAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgICB0aGlzLnRhc2tJZCA9IF92YWx1ZS50YXNrSWQ7XG4gICAgICB0aGlzLnN0YXR1cyA9IF92YWx1ZS5zdGF0dXM7XG4gICAgICBUYXNrU3RhdHVzVXBkYXRlLnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgICB9XG4gICAgZ2V0IHRhc2tJZCgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuX3Rhc2tJZDtcbiAgICB9XG4gICAgc2V0IHRhc2tJZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICB0aGlzLl90YXNrSWQgPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IHN0YXR1cygpOiBhcm1vbmlrQXBpR3JwY1YxVGFza19zdGF0dXMwMDMuVGFza1N0YXR1cyB7XG4gICAgICByZXR1cm4gdGhpcy5fc3RhdHVzO1xuICAgIH1cbiAgICBzZXQgc3RhdHVzKHZhbHVlOiBhcm1vbmlrQXBpR3JwY1YxVGFza19zdGF0dXMwMDMuVGFza1N0YXR1cykge1xuICAgICAgdGhpcy5fc3RhdHVzID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VyaWFsaXplIG1lc3NhZ2UgdG8gYmluYXJ5IGRhdGFcbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqL1xuICAgIHNlcmlhbGl6ZUJpbmFyeSgpIHtcbiAgICAgIGNvbnN0IHdyaXRlciA9IG5ldyBCaW5hcnlXcml0ZXIoKTtcbiAgICAgIFRhc2tTdGF0dXNVcGRhdGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAgICovXG4gICAgdG9PYmplY3QoKTogVGFza1N0YXR1c1VwZGF0ZS5Bc09iamVjdCB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0YXNrSWQ6IHRoaXMudGFza0lkLFxuICAgICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgICAqL1xuICAgIHRvUHJvdG9idWZKU09OKFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICAgICk6IFRhc2tTdGF0dXNVcGRhdGUuQXNQcm90b2J1ZkpTT04ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGFza0lkOiB0aGlzLnRhc2tJZCxcbiAgICAgICAgc3RhdHVzOlxuICAgICAgICAgIGFybW9uaWtBcGlHcnBjVjFUYXNrX3N0YXR1czAwMy5UYXNrU3RhdHVzW1xuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPT09IG51bGwgfHwgdGhpcy5zdGF0dXMgPT09IHVuZGVmaW5lZCA/IDAgOiB0aGlzLnN0YXR1c1xuICAgICAgICAgIF1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGV4cG9ydCBtb2R1bGUgVGFza1N0YXR1c1VwZGF0ZSB7XG4gICAgLyoqXG4gICAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIFRhc2tTdGF0dXNVcGRhdGVcbiAgICAgKi9cbiAgICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICAgIHRhc2tJZDogc3RyaW5nO1xuICAgICAgc3RhdHVzOiBhcm1vbmlrQXBpR3JwY1YxVGFza19zdGF0dXMwMDMuVGFza1N0YXR1cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBUYXNrU3RhdHVzVXBkYXRlXG4gICAgICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgICB0YXNrSWQ6IHN0cmluZztcbiAgICAgIHN0YXR1czogc3RyaW5nO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBhcm1vbmlrLmFwaS5ncnBjLnYxLmV2ZW50cy5FdmVudFN1YnNjcmlwdGlvblJlc3BvbnNlLlJlc3VsdFN0YXR1c1VwZGF0ZVxuICAgKi9cbiAgZXhwb3J0IGNsYXNzIFJlc3VsdFN0YXR1c1VwZGF0ZSBpbXBsZW1lbnRzIEdycGNNZXNzYWdlIHtcbiAgICBzdGF0aWMgaWQgPVxuICAgICAgJ2FybW9uaWsuYXBpLmdycGMudjEuZXZlbnRzLkV2ZW50U3Vic2NyaXB0aW9uUmVzcG9uc2UuUmVzdWx0U3RhdHVzVXBkYXRlJztcblxuICAgIC8qKlxuICAgICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgUmVzdWx0U3RhdHVzVXBkYXRlKCk7XG4gICAgICBSZXN1bHRTdGF0dXNVcGRhdGUuZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgbmV3IEJpbmFyeVJlYWRlcihieXRlcylcbiAgICAgICk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgYWxsIHRoZSBwcm9wZXJ0aWVzIGFuZCBzZXQgZGVmYXVsdCBwcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIHJlZmluZVZhbHVlcyhfaW5zdGFuY2U6IFJlc3VsdFN0YXR1c1VwZGF0ZSkge1xuICAgICAgX2luc3RhbmNlLnJlc3VsdElkID0gX2luc3RhbmNlLnJlc3VsdElkIHx8ICcnO1xuICAgICAgX2luc3RhbmNlLnN0YXR1cyA9IF9pbnN0YW5jZS5zdGF0dXMgfHwgMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXNlcmlhbGl6ZXMgLyByZWFkcyBiaW5hcnkgbWVzc2FnZSBpbnRvIG1lc3NhZ2UgaW5zdGFuY2UgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSBfcmVhZGVyIGJpbmFyeSByZWFkZXIgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnlGcm9tUmVhZGVyKFxuICAgICAgX2luc3RhbmNlOiBSZXN1bHRTdGF0dXNVcGRhdGUsXG4gICAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgICApIHtcbiAgICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgICAgX2luc3RhbmNlLnJlc3VsdElkID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgX2luc3RhbmNlLnN0YXR1cyA9IF9yZWFkZXIucmVhZEVudW0oKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBfcmVhZGVyLnNraXBGaWVsZCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIFJlc3VsdFN0YXR1c1VwZGF0ZS5yZWZpbmVWYWx1ZXMoX2luc3RhbmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemVzIGEgbWVzc2FnZSB0byBiaW5hcnkgZm9ybWF0IHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0gX3dyaXRlciBiaW5hcnkgd3JpdGVyIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIHNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKFxuICAgICAgX2luc3RhbmNlOiBSZXN1bHRTdGF0dXNVcGRhdGUsXG4gICAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgICApIHtcbiAgICAgIGlmIChfaW5zdGFuY2UucmVzdWx0SWQpIHtcbiAgICAgICAgX3dyaXRlci53cml0ZVN0cmluZygyMCwgX2luc3RhbmNlLnJlc3VsdElkKTtcbiAgICAgIH1cbiAgICAgIGlmIChfaW5zdGFuY2Uuc3RhdHVzKSB7XG4gICAgICAgIF93cml0ZXIud3JpdGVFbnVtKDIxLCBfaW5zdGFuY2Uuc3RhdHVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZXN1bHRJZDogc3RyaW5nO1xuICAgIHByaXZhdGUgX3N0YXR1czogYXJtb25pa0FwaUdycGNWMVJlc3VsdF9zdGF0dXMwMDEuUmVzdWx0U3RhdHVzO1xuXG4gICAgLyoqXG4gICAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgUmVzdWx0U3RhdHVzVXBkYXRlIHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxSZXN1bHRTdGF0dXNVcGRhdGUuQXNPYmplY3Q+KSB7XG4gICAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgICB0aGlzLnJlc3VsdElkID0gX3ZhbHVlLnJlc3VsdElkO1xuICAgICAgdGhpcy5zdGF0dXMgPSBfdmFsdWUuc3RhdHVzO1xuICAgICAgUmVzdWx0U3RhdHVzVXBkYXRlLnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgICB9XG4gICAgZ2V0IHJlc3VsdElkKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVzdWx0SWQ7XG4gICAgfVxuICAgIHNldCByZXN1bHRJZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICB0aGlzLl9yZXN1bHRJZCA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgc3RhdHVzKCk6IGFybW9uaWtBcGlHcnBjVjFSZXN1bHRfc3RhdHVzMDAxLlJlc3VsdFN0YXR1cyB7XG4gICAgICByZXR1cm4gdGhpcy5fc3RhdHVzO1xuICAgIH1cbiAgICBzZXQgc3RhdHVzKHZhbHVlOiBhcm1vbmlrQXBpR3JwY1YxUmVzdWx0X3N0YXR1czAwMS5SZXN1bHRTdGF0dXMpIHtcbiAgICAgIHRoaXMuX3N0YXR1cyA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgICBSZXN1bHRTdGF0dXNVcGRhdGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAgICovXG4gICAgdG9PYmplY3QoKTogUmVzdWx0U3RhdHVzVXBkYXRlLkFzT2JqZWN0IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3VsdElkOiB0aGlzLnJlc3VsdElkLFxuICAgICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgICAqL1xuICAgIHRvUHJvdG9idWZKU09OKFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICAgICk6IFJlc3VsdFN0YXR1c1VwZGF0ZS5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXN1bHRJZDogdGhpcy5yZXN1bHRJZCxcbiAgICAgICAgc3RhdHVzOlxuICAgICAgICAgIGFybW9uaWtBcGlHcnBjVjFSZXN1bHRfc3RhdHVzMDAxLlJlc3VsdFN0YXR1c1tcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID09PSBudWxsIHx8IHRoaXMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAwIDogdGhpcy5zdGF0dXNcbiAgICAgICAgICBdXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBleHBvcnQgbW9kdWxlIFJlc3VsdFN0YXR1c1VwZGF0ZSB7XG4gICAgLyoqXG4gICAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIFJlc3VsdFN0YXR1c1VwZGF0ZVxuICAgICAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgQXNPYmplY3Qge1xuICAgICAgcmVzdWx0SWQ6IHN0cmluZztcbiAgICAgIHN0YXR1czogYXJtb25pa0FwaUdycGNWMVJlc3VsdF9zdGF0dXMwMDEuUmVzdWx0U3RhdHVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIFJlc3VsdFN0YXR1c1VwZGF0ZVxuICAgICAqL1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgQXNQcm90b2J1ZkpTT04ge1xuICAgICAgcmVzdWx0SWQ6IHN0cmluZztcbiAgICAgIHN0YXR1czogc3RyaW5nO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBhcm1vbmlrLmFwaS5ncnBjLnYxLmV2ZW50cy5FdmVudFN1YnNjcmlwdGlvblJlc3BvbnNlLlJlc3VsdE93bmVyVXBkYXRlXG4gICAqL1xuICBleHBvcnQgY2xhc3MgUmVzdWx0T3duZXJVcGRhdGUgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gICAgc3RhdGljIGlkID1cbiAgICAgICdhcm1vbmlrLmFwaS5ncnBjLnYxLmV2ZW50cy5FdmVudFN1YnNjcmlwdGlvblJlc3BvbnNlLlJlc3VsdE93bmVyVXBkYXRlJztcblxuICAgIC8qKlxuICAgICAqIERlc2VyaWFsaXplIGJpbmFyeSBkYXRhIHRvIG1lc3NhZ2VcbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeShieXRlczogQnl0ZVNvdXJjZSkge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgUmVzdWx0T3duZXJVcGRhdGUoKTtcbiAgICAgIFJlc3VsdE93bmVyVXBkYXRlLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgIG5ldyBCaW5hcnlSZWFkZXIoYnl0ZXMpXG4gICAgICApO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBSZXN1bHRPd25lclVwZGF0ZSkge1xuICAgICAgX2luc3RhbmNlLnJlc3VsdElkID0gX2luc3RhbmNlLnJlc3VsdElkIHx8ICcnO1xuICAgICAgX2luc3RhbmNlLnByZXZpb3VzT3duZXJJZCA9IF9pbnN0YW5jZS5wcmV2aW91c093bmVySWQgfHwgJyc7XG4gICAgICBfaW5zdGFuY2UuY3VycmVudE93bmVySWQgPSBfaW5zdGFuY2UuY3VycmVudE93bmVySWQgfHwgJyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIF9pbnN0YW5jZTogUmVzdWx0T3duZXJVcGRhdGUsXG4gICAgICBfcmVhZGVyOiBCaW5hcnlSZWFkZXJcbiAgICApIHtcbiAgICAgIHdoaWxlIChfcmVhZGVyLm5leHRGaWVsZCgpKSB7XG4gICAgICAgIGlmIChfcmVhZGVyLmlzRW5kR3JvdXAoKSkgYnJlYWs7XG5cbiAgICAgICAgc3dpdGNoIChfcmVhZGVyLmdldEZpZWxkTnVtYmVyKCkpIHtcbiAgICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgICAgX2luc3RhbmNlLnJlc3VsdElkID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgICAgX2luc3RhbmNlLnByZXZpb3VzT3duZXJJZCA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgIF9pbnN0YW5jZS5jdXJyZW50T3duZXJJZCA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIF9yZWFkZXIuc2tpcEZpZWxkKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgUmVzdWx0T3duZXJVcGRhdGUucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICAgIF9pbnN0YW5jZTogUmVzdWx0T3duZXJVcGRhdGUsXG4gICAgICBfd3JpdGVyOiBCaW5hcnlXcml0ZXJcbiAgICApIHtcbiAgICAgIGlmIChfaW5zdGFuY2UucmVzdWx0SWQpIHtcbiAgICAgICAgX3dyaXRlci53cml0ZVN0cmluZygzMCwgX2luc3RhbmNlLnJlc3VsdElkKTtcbiAgICAgIH1cbiAgICAgIGlmIChfaW5zdGFuY2UucHJldmlvdXNPd25lcklkKSB7XG4gICAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoMzEsIF9pbnN0YW5jZS5wcmV2aW91c093bmVySWQpO1xuICAgICAgfVxuICAgICAgaWYgKF9pbnN0YW5jZS5jdXJyZW50T3duZXJJZCkge1xuICAgICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDMyLCBfaW5zdGFuY2UuY3VycmVudE93bmVySWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3Jlc3VsdElkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfcHJldmlvdXNPd25lcklkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfY3VycmVudE93bmVySWQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIE1lc3NhZ2UgY29uc3RydWN0b3IuIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGRlZmF1bHQgUHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgICAqIEBwYXJhbSBfdmFsdWUgaW5pdGlhbCB2YWx1ZXMgb2JqZWN0IG9yIGluc3RhbmNlIG9mIFJlc3VsdE93bmVyVXBkYXRlIHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxSZXN1bHRPd25lclVwZGF0ZS5Bc09iamVjdD4pIHtcbiAgICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICAgIHRoaXMucmVzdWx0SWQgPSBfdmFsdWUucmVzdWx0SWQ7XG4gICAgICB0aGlzLnByZXZpb3VzT3duZXJJZCA9IF92YWx1ZS5wcmV2aW91c093bmVySWQ7XG4gICAgICB0aGlzLmN1cnJlbnRPd25lcklkID0gX3ZhbHVlLmN1cnJlbnRPd25lcklkO1xuICAgICAgUmVzdWx0T3duZXJVcGRhdGUucmVmaW5lVmFsdWVzKHRoaXMpO1xuICAgIH1cbiAgICBnZXQgcmVzdWx0SWQoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZXN1bHRJZDtcbiAgICB9XG4gICAgc2V0IHJlc3VsdElkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgIHRoaXMuX3Jlc3VsdElkID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBwcmV2aW91c093bmVySWQoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcmV2aW91c093bmVySWQ7XG4gICAgfVxuICAgIHNldCBwcmV2aW91c093bmVySWQodmFsdWU6IHN0cmluZykge1xuICAgICAgdGhpcy5fcHJldmlvdXNPd25lcklkID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBjdXJyZW50T3duZXJJZCgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRPd25lcklkO1xuICAgIH1cbiAgICBzZXQgY3VycmVudE93bmVySWQodmFsdWU6IHN0cmluZykge1xuICAgICAgdGhpcy5fY3VycmVudE93bmVySWQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemUgbWVzc2FnZSB0byBiaW5hcnkgZGF0YVxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICovXG4gICAgc2VyaWFsaXplQmluYXJ5KCkge1xuICAgICAgY29uc3Qgd3JpdGVyID0gbmV3IEJpbmFyeVdyaXRlcigpO1xuICAgICAgUmVzdWx0T3duZXJVcGRhdGUuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAgICovXG4gICAgdG9PYmplY3QoKTogUmVzdWx0T3duZXJVcGRhdGUuQXNPYmplY3Qge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdWx0SWQ6IHRoaXMucmVzdWx0SWQsXG4gICAgICAgIHByZXZpb3VzT3duZXJJZDogdGhpcy5wcmV2aW91c093bmVySWQsXG4gICAgICAgIGN1cnJlbnRPd25lcklkOiB0aGlzLmN1cnJlbnRPd25lcklkXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBzdXBwb3J0IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLCByZXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdG9PYmplY3QoKVxuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvT2JqZWN0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FzdCBtZXNzYWdlIHRvIEpTT04gdXNpbmcgcHJvdG9idWYgSlNPTiBub3RhdGlvbjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvMyNqc29uXG4gICAgICogQXR0ZW50aW9uOiBvdXRwdXQgZGlmZmVycyBmcm9tIHRvT2JqZWN0KCkgZS5nLiBlbnVtcyBhcmUgcmVwcmVzZW50ZWQgYXMgbmFtZXMgYW5kIG5vdCBhcyBudW1iZXJzLCBUaW1lc3RhbXAgaXMgYW4gSVNPIERhdGUgc3RyaW5nIGZvcm1hdCBldGMuXG4gICAgICogSWYgdGhlIG1lc3NhZ2UgaXRzZWxmIG9yIHNvbWUgb2YgZGVzY2VuZGFudCBtZXNzYWdlcyBpcyBnb29nbGUucHJvdG9idWYuQW55LCB5b3UgTVVTVCBwcm92aWRlIGEgbWVzc2FnZSBwb29sIGFzIG9wdGlvbnMuIElmIG5vdCwgdGhlIG1lc3NhZ2VQb29sIGlzIG5vdCByZXF1aXJlZFxuICAgICAqL1xuICAgIHRvUHJvdG9idWZKU09OKFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgb3B0aW9ucz86IFRvUHJvdG9idWZKU09OT3B0aW9uc1xuICAgICk6IFJlc3VsdE93bmVyVXBkYXRlLkFzUHJvdG9idWZKU09OIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3VsdElkOiB0aGlzLnJlc3VsdElkLFxuICAgICAgICBwcmV2aW91c093bmVySWQ6IHRoaXMucHJldmlvdXNPd25lcklkLFxuICAgICAgICBjdXJyZW50T3duZXJJZDogdGhpcy5jdXJyZW50T3duZXJJZFxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgZXhwb3J0IG1vZHVsZSBSZXN1bHRPd25lclVwZGF0ZSB7XG4gICAgLyoqXG4gICAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIFJlc3VsdE93bmVyVXBkYXRlXG4gICAgICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBBc09iamVjdCB7XG4gICAgICByZXN1bHRJZDogc3RyaW5nO1xuICAgICAgcHJldmlvdXNPd25lcklkOiBzdHJpbmc7XG4gICAgICBjdXJyZW50T3duZXJJZDogc3RyaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIFJlc3VsdE93bmVyVXBkYXRlXG4gICAgICovXG4gICAgZXhwb3J0IGludGVyZmFjZSBBc1Byb3RvYnVmSlNPTiB7XG4gICAgICByZXN1bHRJZDogc3RyaW5nO1xuICAgICAgcHJldmlvdXNPd25lcklkOiBzdHJpbmc7XG4gICAgICBjdXJyZW50T3duZXJJZDogc3RyaW5nO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGltcGxlbWVudGF0aW9uIGZvciBhcm1vbmlrLmFwaS5ncnBjLnYxLmV2ZW50cy5FdmVudFN1YnNjcmlwdGlvblJlc3BvbnNlLk5ld1Rhc2tcbiAgICovXG4gIGV4cG9ydCBjbGFzcyBOZXdUYXNrIGltcGxlbWVudHMgR3JwY01lc3NhZ2Uge1xuICAgIHN0YXRpYyBpZCA9ICdhcm1vbmlrLmFwaS5ncnBjLnYxLmV2ZW50cy5FdmVudFN1YnNjcmlwdGlvblJlc3BvbnNlLk5ld1Rhc2snO1xuXG4gICAgLyoqXG4gICAgICogRGVzZXJpYWxpemUgYmluYXJ5IGRhdGEgdG8gbWVzc2FnZVxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5KGJ5dGVzOiBCeXRlU291cmNlKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBOZXdUYXNrKCk7XG4gICAgICBOZXdUYXNrLmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihpbnN0YW5jZSwgbmV3IEJpbmFyeVJlYWRlcihieXRlcykpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBOZXdUYXNrKSB7XG4gICAgICBfaW5zdGFuY2UudGFza0lkID0gX2luc3RhbmNlLnRhc2tJZCB8fCAnJztcbiAgICAgIF9pbnN0YW5jZS5wYXlsb2FkSWQgPSBfaW5zdGFuY2UucGF5bG9hZElkIHx8ICcnO1xuICAgICAgX2luc3RhbmNlLm9yaWdpblRhc2tJZCA9IF9pbnN0YW5jZS5vcmlnaW5UYXNrSWQgfHwgJyc7XG4gICAgICBfaW5zdGFuY2Uuc3RhdHVzID0gX2luc3RhbmNlLnN0YXR1cyB8fCAwO1xuICAgICAgX2luc3RhbmNlLmV4cGVjdGVkT3V0cHV0S2V5cyA9IF9pbnN0YW5jZS5leHBlY3RlZE91dHB1dEtleXMgfHwgW107XG4gICAgICBfaW5zdGFuY2UuZGF0YURlcGVuZGVuY2llcyA9IF9pbnN0YW5jZS5kYXRhRGVwZW5kZW5jaWVzIHx8IFtdO1xuICAgICAgX2luc3RhbmNlLnJldHJ5T2ZJZHMgPSBfaW5zdGFuY2UucmV0cnlPZklkcyB8fCBbXTtcbiAgICAgIF9pbnN0YW5jZS5wYXJlbnRUYXNrSWRzID0gX2luc3RhbmNlLnBhcmVudFRhc2tJZHMgfHwgW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzZXJpYWxpemVzIC8gcmVhZHMgYmluYXJ5IG1lc3NhZ2UgaW50byBtZXNzYWdlIGluc3RhbmNlIHVzaW5nIHByb3ZpZGVkIGJpbmFyeSByZWFkZXJcbiAgICAgKiBAcGFyYW0gX2luc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0gX3JlYWRlciBiaW5hcnkgcmVhZGVyIGluc3RhbmNlXG4gICAgICovXG4gICAgc3RhdGljIGRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihcbiAgICAgIF9pbnN0YW5jZTogTmV3VGFzayxcbiAgICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICAgICkge1xuICAgICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICBfaW5zdGFuY2UudGFza0lkID0gX3JlYWRlci5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgICAgX2luc3RhbmNlLnBheWxvYWRJZCA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgICAgIF9pbnN0YW5jZS5vcmlnaW5UYXNrSWQgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDM6XG4gICAgICAgICAgICBfaW5zdGFuY2Uuc3RhdHVzID0gX3JlYWRlci5yZWFkRW51bSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0NDpcbiAgICAgICAgICAgIChfaW5zdGFuY2UuZXhwZWN0ZWRPdXRwdXRLZXlzID1cbiAgICAgICAgICAgICAgX2luc3RhbmNlLmV4cGVjdGVkT3V0cHV0S2V5cyB8fCBbXSkucHVzaChfcmVhZGVyLnJlYWRTdHJpbmcoKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgICAgKF9pbnN0YW5jZS5kYXRhRGVwZW5kZW5jaWVzID1cbiAgICAgICAgICAgICAgX2luc3RhbmNlLmRhdGFEZXBlbmRlbmNpZXMgfHwgW10pLnB1c2goX3JlYWRlci5yZWFkU3RyaW5nKCkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0NjpcbiAgICAgICAgICAgIChfaW5zdGFuY2UucmV0cnlPZklkcyA9IF9pbnN0YW5jZS5yZXRyeU9mSWRzIHx8IFtdKS5wdXNoKFxuICAgICAgICAgICAgICBfcmVhZGVyLnJlYWRTdHJpbmcoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgICAoX2luc3RhbmNlLnBhcmVudFRhc2tJZHMgPSBfaW5zdGFuY2UucGFyZW50VGFza0lkcyB8fCBbXSkucHVzaChcbiAgICAgICAgICAgICAgX3JlYWRlci5yZWFkU3RyaW5nKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBOZXdUYXNrLnJlZmluZVZhbHVlcyhfaW5zdGFuY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZXMgYSBtZXNzYWdlIHRvIGJpbmFyeSBmb3JtYXQgdXNpbmcgcHJvdmlkZWQgYmluYXJ5IHJlYWRlclxuICAgICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSBfd3JpdGVyIGJpbmFyeSB3cml0ZXIgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIoX2luc3RhbmNlOiBOZXdUYXNrLCBfd3JpdGVyOiBCaW5hcnlXcml0ZXIpIHtcbiAgICAgIGlmIChfaW5zdGFuY2UudGFza0lkKSB7XG4gICAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoNDAsIF9pbnN0YW5jZS50YXNrSWQpO1xuICAgICAgfVxuICAgICAgaWYgKF9pbnN0YW5jZS5wYXlsb2FkSWQpIHtcbiAgICAgICAgX3dyaXRlci53cml0ZVN0cmluZyg0MSwgX2luc3RhbmNlLnBheWxvYWRJZCk7XG4gICAgICB9XG4gICAgICBpZiAoX2luc3RhbmNlLm9yaWdpblRhc2tJZCkge1xuICAgICAgICBfd3JpdGVyLndyaXRlU3RyaW5nKDQyLCBfaW5zdGFuY2Uub3JpZ2luVGFza0lkKTtcbiAgICAgIH1cbiAgICAgIGlmIChfaW5zdGFuY2Uuc3RhdHVzKSB7XG4gICAgICAgIF93cml0ZXIud3JpdGVFbnVtKDQzLCBfaW5zdGFuY2Uuc3RhdHVzKTtcbiAgICAgIH1cbiAgICAgIGlmIChfaW5zdGFuY2UuZXhwZWN0ZWRPdXRwdXRLZXlzICYmIF9pbnN0YW5jZS5leHBlY3RlZE91dHB1dEtleXMubGVuZ3RoKSB7XG4gICAgICAgIF93cml0ZXIud3JpdGVSZXBlYXRlZFN0cmluZyg0NCwgX2luc3RhbmNlLmV4cGVjdGVkT3V0cHV0S2V5cyk7XG4gICAgICB9XG4gICAgICBpZiAoX2luc3RhbmNlLmRhdGFEZXBlbmRlbmNpZXMgJiYgX2luc3RhbmNlLmRhdGFEZXBlbmRlbmNpZXMubGVuZ3RoKSB7XG4gICAgICAgIF93cml0ZXIud3JpdGVSZXBlYXRlZFN0cmluZyg0NSwgX2luc3RhbmNlLmRhdGFEZXBlbmRlbmNpZXMpO1xuICAgICAgfVxuICAgICAgaWYgKF9pbnN0YW5jZS5yZXRyeU9mSWRzICYmIF9pbnN0YW5jZS5yZXRyeU9mSWRzLmxlbmd0aCkge1xuICAgICAgICBfd3JpdGVyLndyaXRlUmVwZWF0ZWRTdHJpbmcoNDYsIF9pbnN0YW5jZS5yZXRyeU9mSWRzKTtcbiAgICAgIH1cbiAgICAgIGlmIChfaW5zdGFuY2UucGFyZW50VGFza0lkcyAmJiBfaW5zdGFuY2UucGFyZW50VGFza0lkcy5sZW5ndGgpIHtcbiAgICAgICAgX3dyaXRlci53cml0ZVJlcGVhdGVkU3RyaW5nKDQ3LCBfaW5zdGFuY2UucGFyZW50VGFza0lkcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdGFza0lkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfcGF5bG9hZElkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfb3JpZ2luVGFza0lkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfc3RhdHVzOiBhcm1vbmlrQXBpR3JwY1YxVGFza19zdGF0dXMwMDMuVGFza1N0YXR1cztcbiAgICBwcml2YXRlIF9leHBlY3RlZE91dHB1dEtleXM6IHN0cmluZ1tdO1xuICAgIHByaXZhdGUgX2RhdGFEZXBlbmRlbmNpZXM6IHN0cmluZ1tdO1xuICAgIHByaXZhdGUgX3JldHJ5T2ZJZHM6IHN0cmluZ1tdO1xuICAgIHByaXZhdGUgX3BhcmVudFRhc2tJZHM6IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgTmV3VGFzayB0byBkZWVwbHkgY2xvbmUgZnJvbVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKF92YWx1ZT86IFJlY3Vyc2l2ZVBhcnRpYWw8TmV3VGFzay5Bc09iamVjdD4pIHtcbiAgICAgIF92YWx1ZSA9IF92YWx1ZSB8fCB7fTtcbiAgICAgIHRoaXMudGFza0lkID0gX3ZhbHVlLnRhc2tJZDtcbiAgICAgIHRoaXMucGF5bG9hZElkID0gX3ZhbHVlLnBheWxvYWRJZDtcbiAgICAgIHRoaXMub3JpZ2luVGFza0lkID0gX3ZhbHVlLm9yaWdpblRhc2tJZDtcbiAgICAgIHRoaXMuc3RhdHVzID0gX3ZhbHVlLnN0YXR1cztcbiAgICAgIHRoaXMuZXhwZWN0ZWRPdXRwdXRLZXlzID0gKF92YWx1ZS5leHBlY3RlZE91dHB1dEtleXMgfHwgW10pLnNsaWNlKCk7XG4gICAgICB0aGlzLmRhdGFEZXBlbmRlbmNpZXMgPSAoX3ZhbHVlLmRhdGFEZXBlbmRlbmNpZXMgfHwgW10pLnNsaWNlKCk7XG4gICAgICB0aGlzLnJldHJ5T2ZJZHMgPSAoX3ZhbHVlLnJldHJ5T2ZJZHMgfHwgW10pLnNsaWNlKCk7XG4gICAgICB0aGlzLnBhcmVudFRhc2tJZHMgPSAoX3ZhbHVlLnBhcmVudFRhc2tJZHMgfHwgW10pLnNsaWNlKCk7XG4gICAgICBOZXdUYXNrLnJlZmluZVZhbHVlcyh0aGlzKTtcbiAgICB9XG4gICAgZ2V0IHRhc2tJZCgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuX3Rhc2tJZDtcbiAgICB9XG4gICAgc2V0IHRhc2tJZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICB0aGlzLl90YXNrSWQgPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IHBheWxvYWRJZCgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuX3BheWxvYWRJZDtcbiAgICB9XG4gICAgc2V0IHBheWxvYWRJZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICB0aGlzLl9wYXlsb2FkSWQgPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IG9yaWdpblRhc2tJZCgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuX29yaWdpblRhc2tJZDtcbiAgICB9XG4gICAgc2V0IG9yaWdpblRhc2tJZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICB0aGlzLl9vcmlnaW5UYXNrSWQgPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IHN0YXR1cygpOiBhcm1vbmlrQXBpR3JwY1YxVGFza19zdGF0dXMwMDMuVGFza1N0YXR1cyB7XG4gICAgICByZXR1cm4gdGhpcy5fc3RhdHVzO1xuICAgIH1cbiAgICBzZXQgc3RhdHVzKHZhbHVlOiBhcm1vbmlrQXBpR3JwY1YxVGFza19zdGF0dXMwMDMuVGFza1N0YXR1cykge1xuICAgICAgdGhpcy5fc3RhdHVzID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBleHBlY3RlZE91dHB1dEtleXMoKTogc3RyaW5nW10ge1xuICAgICAgcmV0dXJuIHRoaXMuX2V4cGVjdGVkT3V0cHV0S2V5cztcbiAgICB9XG4gICAgc2V0IGV4cGVjdGVkT3V0cHV0S2V5cyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICAgIHRoaXMuX2V4cGVjdGVkT3V0cHV0S2V5cyA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgZGF0YURlcGVuZGVuY2llcygpOiBzdHJpbmdbXSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGF0YURlcGVuZGVuY2llcztcbiAgICB9XG4gICAgc2V0IGRhdGFEZXBlbmRlbmNpZXModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgICB0aGlzLl9kYXRhRGVwZW5kZW5jaWVzID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCByZXRyeU9mSWRzKCk6IHN0cmluZ1tdIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZXRyeU9mSWRzO1xuICAgIH1cbiAgICBzZXQgcmV0cnlPZklkcyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICAgIHRoaXMuX3JldHJ5T2ZJZHMgPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IHBhcmVudFRhc2tJZHMoKTogc3RyaW5nW10ge1xuICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudFRhc2tJZHM7XG4gICAgfVxuICAgIHNldCBwYXJlbnRUYXNrSWRzKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgICAgdGhpcy5fcGFyZW50VGFza0lkcyA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgICBOZXdUYXNrLnNlcmlhbGl6ZUJpbmFyeVRvV3JpdGVyKHRoaXMsIHdyaXRlcik7XG4gICAgICByZXR1cm4gd3JpdGVyLmdldFJlc3VsdEJ1ZmZlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhc3QgbWVzc2FnZSB0byBzdGFuZGFyZCBKYXZhU2NyaXB0IG9iamVjdCAoYWxsIG5vbi1wcmltaXRpdmUgdmFsdWVzIGFyZSBkZWVwbHkgY2xvbmVkKVxuICAgICAqL1xuICAgIHRvT2JqZWN0KCk6IE5ld1Rhc2suQXNPYmplY3Qge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGFza0lkOiB0aGlzLnRhc2tJZCxcbiAgICAgICAgcGF5bG9hZElkOiB0aGlzLnBheWxvYWRJZCxcbiAgICAgICAgb3JpZ2luVGFza0lkOiB0aGlzLm9yaWdpblRhc2tJZCxcbiAgICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgICAgZXhwZWN0ZWRPdXRwdXRLZXlzOiAodGhpcy5leHBlY3RlZE91dHB1dEtleXMgfHwgW10pLnNsaWNlKCksXG4gICAgICAgIGRhdGFEZXBlbmRlbmNpZXM6ICh0aGlzLmRhdGFEZXBlbmRlbmNpZXMgfHwgW10pLnNsaWNlKCksXG4gICAgICAgIHJldHJ5T2ZJZHM6ICh0aGlzLnJldHJ5T2ZJZHMgfHwgW10pLnNsaWNlKCksXG4gICAgICAgIHBhcmVudFRhc2tJZHM6ICh0aGlzLnBhcmVudFRhc2tJZHMgfHwgW10pLnNsaWNlKClcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAgICovXG4gICAgdG9KU09OKCkge1xuICAgICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAgICovXG4gICAgdG9Qcm90b2J1ZkpTT04oXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICAgKTogTmV3VGFzay5Bc1Byb3RvYnVmSlNPTiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0YXNrSWQ6IHRoaXMudGFza0lkLFxuICAgICAgICBwYXlsb2FkSWQ6IHRoaXMucGF5bG9hZElkLFxuICAgICAgICBvcmlnaW5UYXNrSWQ6IHRoaXMub3JpZ2luVGFza0lkLFxuICAgICAgICBzdGF0dXM6XG4gICAgICAgICAgYXJtb25pa0FwaUdycGNWMVRhc2tfc3RhdHVzMDAzLlRhc2tTdGF0dXNbXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9PT0gbnVsbCB8fCB0aGlzLnN0YXR1cyA9PT0gdW5kZWZpbmVkID8gMCA6IHRoaXMuc3RhdHVzXG4gICAgICAgICAgXSxcbiAgICAgICAgZXhwZWN0ZWRPdXRwdXRLZXlzOiAodGhpcy5leHBlY3RlZE91dHB1dEtleXMgfHwgW10pLnNsaWNlKCksXG4gICAgICAgIGRhdGFEZXBlbmRlbmNpZXM6ICh0aGlzLmRhdGFEZXBlbmRlbmNpZXMgfHwgW10pLnNsaWNlKCksXG4gICAgICAgIHJldHJ5T2ZJZHM6ICh0aGlzLnJldHJ5T2ZJZHMgfHwgW10pLnNsaWNlKCksXG4gICAgICAgIHBhcmVudFRhc2tJZHM6ICh0aGlzLnBhcmVudFRhc2tJZHMgfHwgW10pLnNsaWNlKClcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGV4cG9ydCBtb2R1bGUgTmV3VGFzayB7XG4gICAgLyoqXG4gICAgICogU3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIE5ld1Rhc2tcbiAgICAgKi9cbiAgICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICAgIHRhc2tJZDogc3RyaW5nO1xuICAgICAgcGF5bG9hZElkOiBzdHJpbmc7XG4gICAgICBvcmlnaW5UYXNrSWQ6IHN0cmluZztcbiAgICAgIHN0YXR1czogYXJtb25pa0FwaUdycGNWMVRhc2tfc3RhdHVzMDAzLlRhc2tTdGF0dXM7XG4gICAgICBleHBlY3RlZE91dHB1dEtleXM6IHN0cmluZ1tdO1xuICAgICAgZGF0YURlcGVuZGVuY2llczogc3RyaW5nW107XG4gICAgICByZXRyeU9mSWRzOiBzdHJpbmdbXTtcbiAgICAgIHBhcmVudFRhc2tJZHM6IHN0cmluZ1tdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb3RvYnVmIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIE5ld1Rhc2tcbiAgICAgKi9cbiAgICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICAgIHRhc2tJZDogc3RyaW5nO1xuICAgICAgcGF5bG9hZElkOiBzdHJpbmc7XG4gICAgICBvcmlnaW5UYXNrSWQ6IHN0cmluZztcbiAgICAgIHN0YXR1czogc3RyaW5nO1xuICAgICAgZXhwZWN0ZWRPdXRwdXRLZXlzOiBzdHJpbmdbXTtcbiAgICAgIGRhdGFEZXBlbmRlbmNpZXM6IHN0cmluZ1tdO1xuICAgICAgcmV0cnlPZklkczogc3RyaW5nW107XG4gICAgICBwYXJlbnRUYXNrSWRzOiBzdHJpbmdbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWVzc2FnZSBpbXBsZW1lbnRhdGlvbiBmb3IgYXJtb25pay5hcGkuZ3JwYy52MS5ldmVudHMuRXZlbnRTdWJzY3JpcHRpb25SZXNwb25zZS5OZXdSZXN1bHRcbiAgICovXG4gIGV4cG9ydCBjbGFzcyBOZXdSZXN1bHQgaW1wbGVtZW50cyBHcnBjTWVzc2FnZSB7XG4gICAgc3RhdGljIGlkID1cbiAgICAgICdhcm1vbmlrLmFwaS5ncnBjLnYxLmV2ZW50cy5FdmVudFN1YnNjcmlwdGlvblJlc3BvbnNlLk5ld1Jlc3VsdCc7XG5cbiAgICAvKipcbiAgICAgKiBEZXNlcmlhbGl6ZSBiaW5hcnkgZGF0YSB0byBtZXNzYWdlXG4gICAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzdGF0aWMgZGVzZXJpYWxpemVCaW5hcnkoYnl0ZXM6IEJ5dGVTb3VyY2UpIHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IE5ld1Jlc3VsdCgpO1xuICAgICAgTmV3UmVzdWx0LmRlc2VyaWFsaXplQmluYXJ5RnJvbVJlYWRlcihpbnN0YW5jZSwgbmV3IEJpbmFyeVJlYWRlcihieXRlcykpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGFsbCB0aGUgcHJvcGVydGllcyBhbmQgc2V0IGRlZmF1bHQgcHJvdG9idWYgdmFsdWVzIGlmIG5lY2Vzc2FyeVxuICAgICAqIEBwYXJhbSBfaW5zdGFuY2UgbWVzc2FnZSBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyByZWZpbmVWYWx1ZXMoX2luc3RhbmNlOiBOZXdSZXN1bHQpIHtcbiAgICAgIF9pbnN0YW5jZS5yZXN1bHRJZCA9IF9pbnN0YW5jZS5yZXN1bHRJZCB8fCAnJztcbiAgICAgIF9pbnN0YW5jZS5vd25lcklkID0gX2luc3RhbmNlLm93bmVySWQgfHwgJyc7XG4gICAgICBfaW5zdGFuY2Uuc3RhdHVzID0gX2luc3RhbmNlLnN0YXR1cyB8fCAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc2VyaWFsaXplcyAvIHJlYWRzIGJpbmFyeSBtZXNzYWdlIGludG8gbWVzc2FnZSBpbnN0YW5jZSB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICogQHBhcmFtIF9yZWFkZXIgYmluYXJ5IHJlYWRlciBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyBkZXNlcmlhbGl6ZUJpbmFyeUZyb21SZWFkZXIoXG4gICAgICBfaW5zdGFuY2U6IE5ld1Jlc3VsdCxcbiAgICAgIF9yZWFkZXI6IEJpbmFyeVJlYWRlclxuICAgICkge1xuICAgICAgd2hpbGUgKF9yZWFkZXIubmV4dEZpZWxkKCkpIHtcbiAgICAgICAgaWYgKF9yZWFkZXIuaXNFbmRHcm91cCgpKSBicmVhaztcblxuICAgICAgICBzd2l0Y2ggKF9yZWFkZXIuZ2V0RmllbGROdW1iZXIoKSkge1xuICAgICAgICAgIGNhc2UgNTA6XG4gICAgICAgICAgICBfaW5zdGFuY2UucmVzdWx0SWQgPSBfcmVhZGVyLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNTE6XG4gICAgICAgICAgICBfaW5zdGFuY2Uub3duZXJJZCA9IF9yZWFkZXIucmVhZFN0cmluZygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICAgIF9pbnN0YW5jZS5zdGF0dXMgPSBfcmVhZGVyLnJlYWRFbnVtKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgX3JlYWRlci5za2lwRmllbGQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBOZXdSZXN1bHQucmVmaW5lVmFsdWVzKF9pbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VyaWFsaXplcyBhIG1lc3NhZ2UgdG8gYmluYXJ5IGZvcm1hdCB1c2luZyBwcm92aWRlZCBiaW5hcnkgcmVhZGVyXG4gICAgICogQHBhcmFtIF9pbnN0YW5jZSBtZXNzYWdlIGluc3RhbmNlXG4gICAgICogQHBhcmFtIF93cml0ZXIgYmluYXJ5IHdyaXRlciBpbnN0YW5jZVxuICAgICAqL1xuICAgIHN0YXRpYyBzZXJpYWxpemVCaW5hcnlUb1dyaXRlcihcbiAgICAgIF9pbnN0YW5jZTogTmV3UmVzdWx0LFxuICAgICAgX3dyaXRlcjogQmluYXJ5V3JpdGVyXG4gICAgKSB7XG4gICAgICBpZiAoX2luc3RhbmNlLnJlc3VsdElkKSB7XG4gICAgICAgIF93cml0ZXIud3JpdGVTdHJpbmcoNTAsIF9pbnN0YW5jZS5yZXN1bHRJZCk7XG4gICAgICB9XG4gICAgICBpZiAoX2luc3RhbmNlLm93bmVySWQpIHtcbiAgICAgICAgX3dyaXRlci53cml0ZVN0cmluZyg1MSwgX2luc3RhbmNlLm93bmVySWQpO1xuICAgICAgfVxuICAgICAgaWYgKF9pbnN0YW5jZS5zdGF0dXMpIHtcbiAgICAgICAgX3dyaXRlci53cml0ZUVudW0oNTIsIF9pbnN0YW5jZS5zdGF0dXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3Jlc3VsdElkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfb3duZXJJZDogc3RyaW5nO1xuICAgIHByaXZhdGUgX3N0YXR1czogYXJtb25pa0FwaUdycGNWMVJlc3VsdF9zdGF0dXMwMDEuUmVzdWx0U3RhdHVzO1xuXG4gICAgLyoqXG4gICAgICogTWVzc2FnZSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgYW5kIGFwcGxpZXMgZGVmYXVsdCBQcm90b2J1ZiB2YWx1ZXMgaWYgbmVjZXNzYXJ5XG4gICAgICogQHBhcmFtIF92YWx1ZSBpbml0aWFsIHZhbHVlcyBvYmplY3Qgb3IgaW5zdGFuY2Ugb2YgTmV3UmVzdWx0IHRvIGRlZXBseSBjbG9uZSBmcm9tXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoX3ZhbHVlPzogUmVjdXJzaXZlUGFydGlhbDxOZXdSZXN1bHQuQXNPYmplY3Q+KSB7XG4gICAgICBfdmFsdWUgPSBfdmFsdWUgfHwge307XG4gICAgICB0aGlzLnJlc3VsdElkID0gX3ZhbHVlLnJlc3VsdElkO1xuICAgICAgdGhpcy5vd25lcklkID0gX3ZhbHVlLm93bmVySWQ7XG4gICAgICB0aGlzLnN0YXR1cyA9IF92YWx1ZS5zdGF0dXM7XG4gICAgICBOZXdSZXN1bHQucmVmaW5lVmFsdWVzKHRoaXMpO1xuICAgIH1cbiAgICBnZXQgcmVzdWx0SWQoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZXN1bHRJZDtcbiAgICB9XG4gICAgc2V0IHJlc3VsdElkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgIHRoaXMuX3Jlc3VsdElkID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBvd25lcklkKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5fb3duZXJJZDtcbiAgICB9XG4gICAgc2V0IG93bmVySWQodmFsdWU6IHN0cmluZykge1xuICAgICAgdGhpcy5fb3duZXJJZCA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgc3RhdHVzKCk6IGFybW9uaWtBcGlHcnBjVjFSZXN1bHRfc3RhdHVzMDAxLlJlc3VsdFN0YXR1cyB7XG4gICAgICByZXR1cm4gdGhpcy5fc3RhdHVzO1xuICAgIH1cbiAgICBzZXQgc3RhdHVzKHZhbHVlOiBhcm1vbmlrQXBpR3JwY1YxUmVzdWx0X3N0YXR1czAwMS5SZXN1bHRTdGF0dXMpIHtcbiAgICAgIHRoaXMuX3N0YXR1cyA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZSBtZXNzYWdlIHRvIGJpbmFyeSBkYXRhXG4gICAgICogQHBhcmFtIGluc3RhbmNlIG1lc3NhZ2UgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBzZXJpYWxpemVCaW5hcnkoKSB7XG4gICAgICBjb25zdCB3cml0ZXIgPSBuZXcgQmluYXJ5V3JpdGVyKCk7XG4gICAgICBOZXdSZXN1bHQuc2VyaWFsaXplQmluYXJ5VG9Xcml0ZXIodGhpcywgd3JpdGVyKTtcbiAgICAgIHJldHVybiB3cml0ZXIuZ2V0UmVzdWx0QnVmZmVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FzdCBtZXNzYWdlIHRvIHN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IChhbGwgbm9uLXByaW1pdGl2ZSB2YWx1ZXMgYXJlIGRlZXBseSBjbG9uZWQpXG4gICAgICovXG4gICAgdG9PYmplY3QoKTogTmV3UmVzdWx0LkFzT2JqZWN0IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3VsdElkOiB0aGlzLnJlc3VsdElkLFxuICAgICAgICBvd25lcklkOiB0aGlzLm93bmVySWQsXG4gICAgICAgIHN0YXR1czogdGhpcy5zdGF0dXNcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHN1cHBvcnQgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksIHJlcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiB0b09iamVjdCgpXG4gICAgICovXG4gICAgdG9KU09OKCkge1xuICAgICAgcmV0dXJuIHRoaXMudG9PYmplY3QoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXN0IG1lc3NhZ2UgdG8gSlNPTiB1c2luZyBwcm90b2J1ZiBKU09OIG5vdGF0aW9uOiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zI2pzb25cbiAgICAgKiBBdHRlbnRpb246IG91dHB1dCBkaWZmZXJzIGZyb20gdG9PYmplY3QoKSBlLmcuIGVudW1zIGFyZSByZXByZXNlbnRlZCBhcyBuYW1lcyBhbmQgbm90IGFzIG51bWJlcnMsIFRpbWVzdGFtcCBpcyBhbiBJU08gRGF0ZSBzdHJpbmcgZm9ybWF0IGV0Yy5cbiAgICAgKiBJZiB0aGUgbWVzc2FnZSBpdHNlbGYgb3Igc29tZSBvZiBkZXNjZW5kYW50IG1lc3NhZ2VzIGlzIGdvb2dsZS5wcm90b2J1Zi5BbnksIHlvdSBNVVNUIHByb3ZpZGUgYSBtZXNzYWdlIHBvb2wgYXMgb3B0aW9ucy4gSWYgbm90LCB0aGUgbWVzc2FnZVBvb2wgaXMgbm90IHJlcXVpcmVkXG4gICAgICovXG4gICAgdG9Qcm90b2J1ZkpTT04oXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBvcHRpb25zPzogVG9Qcm90b2J1ZkpTT05PcHRpb25zXG4gICAgKTogTmV3UmVzdWx0LkFzUHJvdG9idWZKU09OIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc3VsdElkOiB0aGlzLnJlc3VsdElkLFxuICAgICAgICBvd25lcklkOiB0aGlzLm93bmVySWQsXG4gICAgICAgIHN0YXR1czpcbiAgICAgICAgICBhcm1vbmlrQXBpR3JwY1YxUmVzdWx0X3N0YXR1czAwMS5SZXN1bHRTdGF0dXNbXG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9PT0gbnVsbCB8fCB0aGlzLnN0YXR1cyA9PT0gdW5kZWZpbmVkID8gMCA6IHRoaXMuc3RhdHVzXG4gICAgICAgICAgXVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgZXhwb3J0IG1vZHVsZSBOZXdSZXN1bHQge1xuICAgIC8qKlxuICAgICAqIFN0YW5kYXJkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciBOZXdSZXN1bHRcbiAgICAgKi9cbiAgICBleHBvcnQgaW50ZXJmYWNlIEFzT2JqZWN0IHtcbiAgICAgIHJlc3VsdElkOiBzdHJpbmc7XG4gICAgICBvd25lcklkOiBzdHJpbmc7XG4gICAgICBzdGF0dXM6IGFybW9uaWtBcGlHcnBjVjFSZXN1bHRfc3RhdHVzMDAxLlJlc3VsdFN0YXR1cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm90b2J1ZiBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBOZXdSZXN1bHRcbiAgICAgKi9cbiAgICBleHBvcnQgaW50ZXJmYWNlIEFzUHJvdG9idWZKU09OIHtcbiAgICAgIHJlc3VsdElkOiBzdHJpbmc7XG4gICAgICBvd25lcklkOiBzdHJpbmc7XG4gICAgICBzdGF0dXM6IHN0cmluZztcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|