@gomomento/sdk-core 1.99.0 → 1.99.1
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/dist/src/errors/errors.d.ts +15 -2
- package/dist/src/errors/errors.js +62 -4
- package/package.json +1 -1
@@ -39,7 +39,7 @@ export declare class MomentoErrorTransportDetails {
|
|
39
39
|
export declare abstract class SdkError extends Error {
|
40
40
|
protected readonly _errorCode: MomentoErrorCode;
|
41
41
|
protected readonly _messageWrapper: string;
|
42
|
-
|
42
|
+
protected readonly _transportDetails: MomentoErrorTransportDetails;
|
43
43
|
constructor(message: string, code?: number, metadata?: object | undefined, stack?: string | undefined);
|
44
44
|
wrappedErrorMessage(): string;
|
45
45
|
errorCode(): MomentoErrorCode;
|
@@ -111,12 +111,24 @@ export declare class InvalidArgumentError extends SdkError {
|
|
111
111
|
_errorCode: MomentoErrorCode;
|
112
112
|
_messageWrapper: string;
|
113
113
|
}
|
114
|
+
declare enum LimitExceededMessageWrapper {
|
115
|
+
TOPIC_SUBSCRIPTIONS_LIMIT_EXCEEDED = "Topic subscriptions limit exceeded for this account",
|
116
|
+
OPERATIONS_RATE_LIMIT_EXCEEDED = "Request rate limit exceeded for this account",
|
117
|
+
THROUGHPUT_RATE_LIMIT_EXCEEDED = "Bandwidth limit exceeded for this account",
|
118
|
+
REQUEST_SIZE_LIMIT_EXCEEDED = "Request size limit exceeded for this account",
|
119
|
+
ITEM_SIZE_LIMIT_EXCEEDED = "Item size limit exceeded for this account",
|
120
|
+
ELEMENT_SIZE_LIMIT_EXCEEDED = "Element size limit exceeded for this account",
|
121
|
+
UNKNOWN_LIMIT_EXCEEDED = "Limit exceeded for this account"
|
122
|
+
}
|
114
123
|
/**
|
115
124
|
* Error when calls are throttled due to request limit rate
|
116
125
|
*/
|
117
126
|
export declare class LimitExceededError extends SdkError {
|
118
127
|
_errorCode: MomentoErrorCode;
|
119
|
-
_messageWrapper:
|
128
|
+
_messageWrapper: LimitExceededMessageWrapper;
|
129
|
+
private errCause;
|
130
|
+
constructor(message: string, code?: number, metadata?: object | undefined, stack?: string | undefined, errCause?: string);
|
131
|
+
private determineMessageWrapper;
|
120
132
|
}
|
121
133
|
/**
|
122
134
|
* Error that occurs when trying to get a cache that doesn't exist. To resolve, make sure that the cache you are trying
|
@@ -177,3 +189,4 @@ export declare class UnknownServiceError extends SdkError {
|
|
177
189
|
_errorCode: MomentoErrorCode;
|
178
190
|
_messageWrapper: string;
|
179
191
|
}
|
192
|
+
export {};
|
@@ -183,14 +183,72 @@ class InvalidArgumentError extends SdkError {
|
|
183
183
|
}
|
184
184
|
}
|
185
185
|
exports.InvalidArgumentError = InvalidArgumentError;
|
186
|
+
var LimitExceededMessageWrapper;
|
187
|
+
(function (LimitExceededMessageWrapper) {
|
188
|
+
LimitExceededMessageWrapper["TOPIC_SUBSCRIPTIONS_LIMIT_EXCEEDED"] = "Topic subscriptions limit exceeded for this account";
|
189
|
+
LimitExceededMessageWrapper["OPERATIONS_RATE_LIMIT_EXCEEDED"] = "Request rate limit exceeded for this account";
|
190
|
+
LimitExceededMessageWrapper["THROUGHPUT_RATE_LIMIT_EXCEEDED"] = "Bandwidth limit exceeded for this account";
|
191
|
+
LimitExceededMessageWrapper["REQUEST_SIZE_LIMIT_EXCEEDED"] = "Request size limit exceeded for this account";
|
192
|
+
LimitExceededMessageWrapper["ITEM_SIZE_LIMIT_EXCEEDED"] = "Item size limit exceeded for this account";
|
193
|
+
LimitExceededMessageWrapper["ELEMENT_SIZE_LIMIT_EXCEEDED"] = "Element size limit exceeded for this account";
|
194
|
+
LimitExceededMessageWrapper["UNKNOWN_LIMIT_EXCEEDED"] = "Limit exceeded for this account";
|
195
|
+
})(LimitExceededMessageWrapper || (LimitExceededMessageWrapper = {}));
|
186
196
|
/**
|
187
197
|
* Error when calls are throttled due to request limit rate
|
188
198
|
*/
|
189
199
|
class LimitExceededError extends SdkError {
|
190
|
-
constructor() {
|
191
|
-
super(
|
200
|
+
constructor(message, code = 0, metadata = undefined, stack = undefined, errCause) {
|
201
|
+
super(message, code, metadata, stack);
|
192
202
|
this._errorCode = MomentoErrorCode.LIMIT_EXCEEDED_ERROR;
|
193
|
-
this._messageWrapper =
|
203
|
+
this._messageWrapper = this.determineMessageWrapper();
|
204
|
+
this.errCause = errCause;
|
205
|
+
}
|
206
|
+
determineMessageWrapper() {
|
207
|
+
// If provided, we use the `err` metadata value to determine the most
|
208
|
+
// appropriate error message to return.
|
209
|
+
if (this.errCause !== undefined) {
|
210
|
+
switch (this.errCause) {
|
211
|
+
case 'topic_subscriptions_limit_exceeded':
|
212
|
+
return LimitExceededMessageWrapper.TOPIC_SUBSCRIPTIONS_LIMIT_EXCEEDED;
|
213
|
+
case 'operations_rate_limit_exceeded':
|
214
|
+
return LimitExceededMessageWrapper.OPERATIONS_RATE_LIMIT_EXCEEDED;
|
215
|
+
case 'throughput_rate_limit_exceeded':
|
216
|
+
return LimitExceededMessageWrapper.THROUGHPUT_RATE_LIMIT_EXCEEDED;
|
217
|
+
case 'request_size_limit_exceeded':
|
218
|
+
return LimitExceededMessageWrapper.REQUEST_SIZE_LIMIT_EXCEEDED;
|
219
|
+
case 'item_size_limit_exceeded':
|
220
|
+
return LimitExceededMessageWrapper.ITEM_SIZE_LIMIT_EXCEEDED;
|
221
|
+
case 'element_size_limit_exceeded':
|
222
|
+
return LimitExceededMessageWrapper.ELEMENT_SIZE_LIMIT_EXCEEDED;
|
223
|
+
default:
|
224
|
+
return LimitExceededMessageWrapper.UNKNOWN_LIMIT_EXCEEDED;
|
225
|
+
}
|
226
|
+
}
|
227
|
+
// If `err` metadata is unavailable, try to use the error details field
|
228
|
+
// to return the an appropriate error message.
|
229
|
+
if (this._transportDetails.grpc.details !== undefined) {
|
230
|
+
const details = this._transportDetails.grpc.details.toLowerCase();
|
231
|
+
if (details.includes('subscribers')) {
|
232
|
+
return LimitExceededMessageWrapper.TOPIC_SUBSCRIPTIONS_LIMIT_EXCEEDED;
|
233
|
+
}
|
234
|
+
else if (details.includes('operations')) {
|
235
|
+
return LimitExceededMessageWrapper.OPERATIONS_RATE_LIMIT_EXCEEDED;
|
236
|
+
}
|
237
|
+
else if (details.includes('throughput')) {
|
238
|
+
return LimitExceededMessageWrapper.THROUGHPUT_RATE_LIMIT_EXCEEDED;
|
239
|
+
}
|
240
|
+
else if (details.includes('request limit')) {
|
241
|
+
return LimitExceededMessageWrapper.REQUEST_SIZE_LIMIT_EXCEEDED;
|
242
|
+
}
|
243
|
+
else if (details.includes('item size')) {
|
244
|
+
return LimitExceededMessageWrapper.ITEM_SIZE_LIMIT_EXCEEDED;
|
245
|
+
}
|
246
|
+
else if (details.includes('element size')) {
|
247
|
+
return LimitExceededMessageWrapper.ELEMENT_SIZE_LIMIT_EXCEEDED;
|
248
|
+
}
|
249
|
+
}
|
250
|
+
// If all else fails, return a generic "limit exceeded" message
|
251
|
+
return LimitExceededMessageWrapper.UNKNOWN_LIMIT_EXCEEDED;
|
194
252
|
}
|
195
253
|
}
|
196
254
|
exports.LimitExceededError = LimitExceededError;
|
@@ -285,4 +343,4 @@ class UnknownServiceError extends SdkError {
|
|
285
343
|
}
|
286
344
|
}
|
287
345
|
exports.UnknownServiceError = UnknownServiceError;
|
288
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Vycm9ycy9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBWSxnQkEyQ1g7QUEzQ0QsV0FBWSxnQkFBZ0I7SUFDMUIsNENBQTRDO0lBQzVDLHFFQUFpRCxDQUFBO0lBQ2pELHVDQUF1QztJQUN2QyxtRUFBK0MsQ0FBQTtJQUMvQywyQ0FBMkM7SUFDM0MsdUVBQW1ELENBQUE7SUFDbkQseURBQXlEO0lBQ3pELGlFQUE2QyxDQUFBO0lBQzdDLDJDQUEyQztJQUMzQyx1RUFBbUQsQ0FBQTtJQUNuRCwwQ0FBMEM7SUFDMUMsNkRBQXlDLENBQUE7SUFDekMsb0RBQW9EO0lBQ3BELHVEQUFtQyxDQUFBO0lBQ25DLDBDQUEwQztJQUMxQyxtRUFBK0MsQ0FBQTtJQUMvQyx3Q0FBd0M7SUFDeEMsNkVBQXlELENBQUE7SUFDekQsbUVBQW1FO0lBQ25FLG1FQUErQyxDQUFBO0lBQy9DLGdEQUFnRDtJQUNoRCx5REFBcUMsQ0FBQTtJQUNyQyxpRUFBaUU7SUFDakUsaUVBQTZDLENBQUE7SUFDN0Msc0NBQXNDO0lBQ3RDLHVEQUFtQyxDQUFBO0lBQ25DLHNDQUFzQztJQUN0Qyx5REFBcUMsQ0FBQTtJQUNyQyw4RUFBOEU7SUFDOUUsaUVBQTZDLENBQUE7SUFDN0Msc0JBQXNCO0lBQ3RCLDJEQUF1QyxDQUFBO0lBQ3ZDLDJDQUEyQztJQUMzQyxtREFBK0IsQ0FBQTtJQUMvQiwwQ0FBMEM7SUFDMUMsNkRBQXlDLENBQUE7SUFDekMsdURBQXVEO0lBQ3ZELDJFQUF1RCxDQUFBO0lBQ3ZELGtFQUFrRTtJQUNsRSwyRUFBdUQsQ0FBQTtJQUN2RCw2QkFBNkI7SUFDN0IsbURBQStCLENBQUE7QUFDakMsQ0FBQyxFQTNDVyxnQkFBZ0IsR0FBaEIsd0JBQWdCLEtBQWhCLHdCQUFnQixRQTJDM0I7QUFFRCxNQUFhLHVCQUF1QjtJQUlsQyxZQUFZLElBQVksRUFBRSxPQUFlLEVBQUUsUUFBaUI7UUFDMUQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztDQUNGO0FBVEQsMERBU0M7QUFFRCxNQUFhLDRCQUE0QjtJQUV2QyxZQUFZLElBQTZCO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQUxELG9FQUtDO0FBQ0Q7O0dBRUc7QUFDSCxNQUFzQixRQUFTLFNBQVEsS0FBSztJQUkxQyxZQUNFLE9BQWUsRUFDZixJQUFJLEdBQUcsQ0FBQyxFQUNSLFdBQStCLFNBQVMsRUFDeEMsUUFBNEIsU0FBUztRQUVyQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixNQUFNLFdBQVcsR0FBRyxJQUFJLHVCQUF1QixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksNEJBQTRCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLGFBQUwsS0FBSyxjQUFMLEtBQUssR0FBSSxTQUFTLENBQUM7SUFDbEMsQ0FBQztJQUVNLG1CQUFtQjtRQUN4QixPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVNLFNBQVM7UUFDZCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVNLGdCQUFnQjtRQUNyQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0NBQ0Y7QUEzQkQsNEJBMkJDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQWEsdUJBQXdCLFNBQVEsUUFBUTtJQUFyRDs7UUFDVyxlQUFVLEdBQUcsZ0JBQWdCLENBQUMsMEJBQTBCLENBQUM7UUFDekQsb0JBQWUsR0FDdEIsc0pBQXNKLENBQUM7SUFDM0osQ0FBQztDQUFBO0FBSkQsMERBSUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSx1QkFBd0IsU0FBUSxRQUFRO0lBQXJEOztRQUNXLGVBQVUsR0FBRyxnQkFBZ0IsQ0FBQywwQkFBMEIsQ0FBQztRQUN6RCxvQkFBZSxHQUN0QixzSkFBc0osQ0FBQztJQUMzSixDQUFDO0NBQUE7QUFKRCwwREFJQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxtQkFBb0IsU0FBUSxRQUFRO0lBQWpEOztRQUNXLGVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQztRQUNuRCxvQkFBZSxHQUN0QixnRUFBZ0UsQ0FBQztJQUNyRSxDQUFDO0NBQUE7QUFKRCxrREFJQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxlQUFnQixTQUFRLFFBQVE7SUFBN0M7O1FBQ1csZUFBVSxHQUFHLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDO1FBQ2hELG9CQUFlLEdBQ3RCLHFFQUFxRSxDQUFDO0lBQzFFLENBQUM7Q0FBQTtBQUpELDBDQUlDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLGNBQWUsU0FBUSxRQUFRO0lBQTVDOztRQUNXLGVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUM7UUFDOUMsb0JBQWUsR0FDdEIscUZBQXFGLENBQUM7SUFDMUYsQ0FBQztDQUFBO0FBSkQsd0NBSUM7QUFFRDs7R0FFRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxRQUFRO0lBQTdDOztRQUNXLGVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQztJQUMxRCxDQUFDO0NBQUE7QUFGRCwwQ0FFQztBQUVEOztHQUVHO0FBQ0gsTUFBYSx1QkFBd0IsU0FBUSxRQUFRO0lBQXJEOztRQUNXLGVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyx5QkFBeUIsQ0FBQztRQUN4RCxvQkFBZSxHQUN0QixpRUFBaUUsQ0FBQztJQUN0RSxDQUFDO0NBQUE7QUFKRCwwREFJQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxtQkFBb0IsU0FBUSxRQUFRO0lBQWpEOztRQUNXLGVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQztRQUNwRCxvQkFBZSxHQUN0Qiw4R0FBOEcsQ0FBQztJQUNuSCxDQUFDO0NBQUE7QUFKRCxrREFJQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxvQkFBcUIsU0FBUSxRQUFRO0lBQWxEOztRQUNXLGVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQztRQUNyRCxvQkFBZSxHQUFHLDJDQUEyQyxDQUFDO0lBQ3pFLENBQUM7Q0FBQTtBQUhELG9EQUdDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLGtCQUFtQixTQUFRLFFBQVE7SUFBaEQ7O1FBQ1csZUFBVSxHQUFHLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDO1FBQ25ELG9CQUFlLEdBQ3RCLDJNQUEyTSxDQUFDO0lBQ2hOLENBQUM7Q0FBQTtBQUpELGdEQUlDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSxRQUFRO0lBQWhEOztRQUNXLGVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQztRQUNwRCxvQkFBZSxHQUN0QiwwSUFBMEksQ0FBQztJQUMvSSxDQUFDO0NBQUE7QUFKRCxnREFJQztBQUVEOzs7R0FHRztBQUNILE1BQWEsa0JBQW1CLFNBQVEsUUFBUTtJQUFoRDs7UUFDVyxlQUFVLEdBQUcsZ0JBQWdCLENBQUMscUJBQXFCLENBQUM7UUFDcEQsb0JBQWUsR0FDdEIsMElBQTBJLENBQUM7SUFDL0ksQ0FBQztDQUFBO0FBSkQsZ0RBSUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFhLHNCQUF1QixTQUFRLFFBQVE7SUFBcEQ7O1FBQ1csZUFBVSxHQUFHLGdCQUFnQixDQUFDLDBCQUEwQixDQUFDO1FBQ3pELG9CQUFlLEdBQUcsK0NBQStDLENBQUM7SUFDN0UsQ0FBQztDQUFBO0FBSEQsd0RBR0M7QUFFRDs7R0FFRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxRQUFRO0lBQTdDOztRQUNXLGVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQztRQUMvQyxvQkFBZSxHQUN0Qiw2REFBNkQsQ0FBQztJQUNsRSxDQUFDO0NBQUE7QUFKRCwwQ0FJQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxzQkFBdUIsU0FBUSxRQUFRO0lBQXBEOztRQUNXLGVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQztRQUNqRCxvQkFBZSxHQUN0QixvSUFBb0ksQ0FBQztJQUN6SSxDQUFDO0NBQUE7QUFKRCx3REFJQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxZQUFhLFNBQVEsUUFBUTtJQUExQzs7UUFDVyxlQUFVLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDO1FBQzVDLG9CQUFlLEdBQ3RCLDhHQUE4RyxDQUFDO0lBQ25ILENBQUM7Q0FBQTtBQUpELG9DQUlDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLFlBQWEsU0FBUSxRQUFRO0lBQTFDOztRQUNXLGVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUM7UUFDNUMsb0JBQWUsR0FBRyw0QkFBNEIsQ0FBQztJQUMxRCxDQUFDO0NBQUE7QUFIRCxvQ0FHQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxtQkFBb0IsU0FBUSxRQUFRO0lBQWpEOztRQUNXLGVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQztRQUNwRCxvQkFBZSxHQUN0QixrRkFBa0YsQ0FBQztJQUN2RixDQUFDO0NBQUE7QUFKRCxrREFJQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIE1vbWVudG9FcnJvckNvZGUge1xuICAvLyBJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byBNb21lbnRvIGNsaWVudFxuICBJTlZBTElEX0FSR1VNRU5UX0VSUk9SID0gJ0lOVkFMSURfQVJHVU1FTlRfRVJST1InLFxuICAvLyBTZXJ2aWNlIHJldHVybmVkIGFuIHVua25vd24gcmVzcG9uc2VcbiAgVU5LTk9XTl9TRVJWSUNFX0VSUk9SID0gJ1VOS05PV05fU0VSVklDRV9FUlJPUicsXG4gIC8vIENhY2hlIHdpdGggc3BlY2lmaWVkIG5hbWUgYWxyZWFkeSBleGlzdHNcbiAgQ0FDSEVfQUxSRUFEWV9FWElTVFNfRVJST1IgPSAnQUxSRUFEWV9FWElTVFNfRVJST1InLFxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIENBQ0hFX0FMUkVBRFlfRVhJU1RTX0VSUk9SIGluc3RlYWQgKi9cbiAgQUxSRUFEWV9FWElTVFNfRVJST1IgPSAnQUxSRUFEWV9FWElTVFNfRVJST1InLFxuICAvLyBTdG9yZSB3aXRoIHNwZWNpZmllZCBuYW1lIGFscmVhZHkgZXhpc3RzXG4gIFNUT1JFX0FMUkVBRFlfRVhJU1RTX0VSUk9SID0gJ0FMUkVBRFlfRVhJU1RTX0VSUk9SJyxcbiAgLy8gQ2FjaGUgd2l0aCBzcGVjaWZpZWQgbmFtZSBkb2Vzbid0IGV4aXN0XG4gIENBQ0hFX05PVF9GT1VORF9FUlJPUiA9ICdOT1RfRk9VTkRfRVJST1InLFxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIENBQ0hFX05PVF9GT1VORF9FUlJPUiBpbnN0ZWFkICovXG4gIE5PVF9GT1VORF9FUlJPUiA9ICdOT1RfRk9VTkRfRVJST1InLFxuICAvLyBTdG9yZSB3aXRoIHNwZWNpZmllZCBuYW1lIGRvZXNuJ3QgZXhpc3RcbiAgU1RPUkVfTk9UX0ZPVU5EX0VSUk9SID0gJ1NUT1JFX05PVF9GT1VORF9FUlJPUicsXG4gIC8vIEl0ZW0gd2l0aCBzcGVjaWZpZWQga2V5IGRvZXNuJ3QgZXhpc3RcbiAgU1RPUkVfSVRFTV9OT1RfRk9VTkRfRVJST1IgPSAnU1RPUkVfSVRFTV9OT1RfRk9VTkRfRVJST1InLFxuICAvLyBBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byBmdWxmaWxsIHRoZSByZXF1ZXN0XG4gIElOVEVSTkFMX1NFUlZFUl9FUlJPUiA9ICdJTlRFUk5BTF9TRVJWRVJfRVJST1InLFxuICAvLyBJbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMgdG8gcGVyZm9ybSBvcGVyYXRpb25cbiAgUEVSTUlTU0lPTl9FUlJPUiA9ICdQRVJNSVNTSU9OX0VSUk9SJyxcbiAgLy8gSW52YWxpZCBhdXRoZW50aWNhdGlvbiBjcmVkZW50aWFscyB0byBjb25uZWN0IHRvIGNhY2hlIHNlcnZpY2VcbiAgQVVUSEVOVElDQVRJT05fRVJST1IgPSAnQVVUSEVOVElDQVRJT05fRVJST1InLFxuICAvLyBSZXF1ZXN0IHdhcyBjYW5jZWxsZWQgYnkgdGhlIHNlcnZlclxuICBDQU5DRUxMRURfRVJST1IgPSAnQ0FOQ0VMTEVEX0VSUk9SJyxcbiAgLy8gRXJyb3IgY29ubmVjdGluZyB0byBNb21lbnRvIHNlcnZlcnNcbiAgQ09OTkVDVElPTl9FUlJPUiA9ICdDT05ORUNUSU9OX0VSUk9SJyxcbiAgLy8gUmVxdWVzdCByYXRlLCBiYW5kd2lkdGgsIG9yIG9iamVjdCBzaXplIGV4Y2VlZGVkIHRoZSBsaW1pdHMgZm9yIHRoZSBhY2NvdW50XG4gIExJTUlUX0VYQ0VFREVEX0VSUk9SID0gJ0xJTUlUX0VYQ0VFREVEX0VSUk9SJyxcbiAgLy8gUmVxdWVzdCB3YXMgaW52YWxpZFxuICBCQURfUkVRVUVTVF9FUlJPUiA9ICdCQURfUkVRVUVTVF9FUlJPUicsXG4gIC8vIENsaWVudCdzIGNvbmZpZ3VyZWQgdGltZW91dCB3YXMgZXhjZWVkZWRcbiAgVElNRU9VVF9FUlJPUiA9ICdUSU1FT1VUX0VSUk9SJyxcbiAgLy8gU2VydmVyIHdhcyB1bmFibGUgdG8gaGFuZGxlIHRoZSByZXF1ZXN0XG4gIFNFUlZFUl9VTkFWQUlMQUJMRSA9ICdTRVJWRVJfVU5BVkFJTEFCTEUnLFxuICAvLyBBIGNsaWVudCByZXNvdXJjZSAobW9zdCBsaWtlbHkgbWVtb3J5KSB3YXMgZXhoYXVzdGVkXG4gIENMSUVOVF9SRVNPVVJDRV9FWEhBVVNURUQgPSAnQ0xJRU5UX1JFU09VUkNFX0VYSEFVU1RFRCcsXG4gIC8vIFN5c3RlbSBpcyBub3QgaW4gYSBzdGF0ZSByZXF1aXJlZCBmb3IgdGhlIG9wZXJhdGlvbidzIGV4ZWN1dGlvblxuICBGQUlMRURfUFJFQ09ORElUSU9OX0VSUk9SID0gJ0ZBSUxFRF9QUkVDT05ESVRJT05fRVJST1InLFxuICAvLyBVbmtub3duIGVycm9yIGhhcyBvY2N1cnJlZFxuICBVTktOT1dOX0VSUk9SID0gJ1VOS05PV05fRVJST1InLFxufVxuXG5leHBvcnQgY2xhc3MgTW9tZW50b0dycGNFcnJvckRldGFpbHMge1xuICBwdWJsaWMgcmVhZG9ubHkgY29kZTogbnVtYmVyO1xuICBwdWJsaWMgcmVhZG9ubHkgZGV0YWlsczogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgbWV0YWRhdGE/OiBvYmplY3Q7XG4gIGNvbnN0cnVjdG9yKGNvZGU6IG51bWJlciwgZGV0YWlsczogc3RyaW5nLCBtZXRhZGF0YT86IG9iamVjdCkge1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgdGhpcy5kZXRhaWxzID0gZGV0YWlscztcbiAgICB0aGlzLm1ldGFkYXRhID0gbWV0YWRhdGE7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1vbWVudG9FcnJvclRyYW5zcG9ydERldGFpbHMge1xuICBwdWJsaWMgcmVhZG9ubHkgZ3JwYzogTW9tZW50b0dycGNFcnJvckRldGFpbHM7XG4gIGNvbnN0cnVjdG9yKGdycGM6IE1vbWVudG9HcnBjRXJyb3JEZXRhaWxzKSB7XG4gICAgdGhpcy5ncnBjID0gZ3JwYztcbiAgfVxufVxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgZXJyb3JzIHRocm93biBieSB0aGUgc2RrXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTZGtFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9lcnJvckNvZGU6IE1vbWVudG9FcnJvckNvZGU7XG4gIHByb3RlY3RlZCByZWFkb25seSBfbWVzc2FnZVdyYXBwZXI6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdHJhbnNwb3J0RGV0YWlsczogTW9tZW50b0Vycm9yVHJhbnNwb3J0RGV0YWlscztcbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGNvZGUgPSAwLFxuICAgIG1ldGFkYXRhOiBvYmplY3QgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gICAgc3RhY2s6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICBjb25zdCBncnBjRGV0YWlscyA9IG5ldyBNb21lbnRvR3JwY0Vycm9yRGV0YWlscyhjb2RlLCBtZXNzYWdlLCBtZXRhZGF0YSk7XG4gICAgdGhpcy5fdHJhbnNwb3J0RGV0YWlscyA9IG5ldyBNb21lbnRvRXJyb3JUcmFuc3BvcnREZXRhaWxzKGdycGNEZXRhaWxzKTtcbiAgICB0aGlzLnN0YWNrID0gc3RhY2sgPz8gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHdyYXBwZWRFcnJvck1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5fbWVzc2FnZVdyYXBwZXJ9OiAke3RoaXMubWVzc2FnZX1gO1xuICB9XG5cbiAgcHVibGljIGVycm9yQ29kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZXJyb3JDb2RlO1xuICB9XG5cbiAgcHVibGljIHRyYW5zcG9ydERldGFpbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydERldGFpbHM7XG4gIH1cbn1cblxuLyoqXG4gKiBFcnJvciB0aGF0IG9jY3VycyB3aGVuIHRyeWluZyB0byBjcmVhdGUgYSBjYWNoZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcgY2FjaGUuIFRvIHJlc29sdmUgdGhpcyBlcnJvcixcbiAqIGVpdGhlciBkZWxldGUgdGhlIGV4aXN0aW5nIGNhY2hlIGFuZCBtYWtlIGEgbmV3IG9uZSwgb3IgY2hhbmdlIHRoZSBuYW1lIG9mIHRoZSBjYWNoZSB5b3UgYXJlIHRyeWluZyB0byBjcmVhdGUgdG9cbiAqIG9uZSB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdFxuICovXG5leHBvcnQgY2xhc3MgQ2FjaGVBbHJlYWR5RXhpc3RzRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLkNBQ0hFX0FMUkVBRFlfRVhJU1RTX0VSUk9SO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPVxuICAgICdBIGNhY2hlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGFscmVhZHkgZXhpc3RzLiAgVG8gcmVzb2x2ZSB0aGlzIGVycm9yLCBlaXRoZXIgZGVsZXRlIHRoZSBleGlzdGluZyBjYWNoZSBhbmQgbWFrZSBhIG5ldyBvbmUsIG9yIHVzZSBhIGRpZmZlcmVudCBuYW1lJztcbn1cblxuLyoqXG4gKiBFcnJvciB0aGF0IG9jY3VycyB3aGVuIHRyeWluZyB0byBjcmVhdGUgYSBzdG9yZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcgY2FjaGUuIFRvIHJlc29sdmUgdGhpcyBlcnJvcixcbiAqIGVpdGhlciBkZWxldGUgdGhlIGV4aXN0aW5nIHN0b3JlIGFuZCBtYWtlIGEgbmV3IG9uZSwgb3IgY2hhbmdlIHRoZSBuYW1lIG9mIHRoZSBzdG9yZSB5b3UgYXJlIHRyeWluZyB0byBjcmVhdGUgdG9cbiAqIG9uZSB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdFxuICovXG5leHBvcnQgY2xhc3MgU3RvcmVBbHJlYWR5RXhpc3RzRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLlNUT1JFX0FMUkVBRFlfRVhJU1RTX0VSUk9SO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPVxuICAgICdBIHN0b3JlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGFscmVhZHkgZXhpc3RzLiAgVG8gcmVzb2x2ZSB0aGlzIGVycm9yLCBlaXRoZXIgZGVsZXRlIHRoZSBleGlzdGluZyBzdG9yZSBhbmQgbWFrZSBhIG5ldyBvbmUsIG9yIHVzZSBhIGRpZmZlcmVudCBuYW1lJztcbn1cblxuLyoqXG4gKiBFcnJvciB3aGVuIGF1dGhlbnRpY2F0aW9uIHdpdGggQ2FjaGUgU2VydmljZSBmYWlsc1xuICovXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRpb25FcnJvciBleHRlbmRzIFNka0Vycm9yIHtcbiAgb3ZlcnJpZGUgX2Vycm9yQ29kZSA9IE1vbWVudG9FcnJvckNvZGUuQVVUSEVOVElDQVRJT05fRVJST1I7XG4gIG92ZXJyaWRlIF9tZXNzYWdlV3JhcHBlciA9XG4gICAgJ0ludmFsaWQgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMgdG8gY29ubmVjdCB0byBjYWNoZSBzZXJ2aWNlJztcbn1cblxuLyoqXG4gKiBFcnJvciByYWlzZWQgaW4gcmVzcG9uc2UgdG8gYW4gaW52YWxpZCByZXF1ZXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBCYWRSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLkJBRF9SRVFVRVNUX0VSUk9SO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPVxuICAgICdUaGUgcmVxdWVzdCB3YXMgaW52YWxpZDsgcGxlYXNlIGNvbnRhY3QgdXMgYXQgc3VwcG9ydEBtb21lbnRvaHEuY29tJztcbn1cblxuLyoqXG4gKiBFcnJvciB3aGVuIGFuIG9wZXJhdGlvbiB3aXRoIENhY2hlIFNlcnZpY2Ugd2FzIGNhbmNlbGxlZFxuICovXG5leHBvcnQgY2xhc3MgQ2FuY2VsbGVkRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLkNBTkNFTExFRF9FUlJPUjtcbiAgb3ZlcnJpZGUgX21lc3NhZ2VXcmFwcGVyID1cbiAgICAnVGhlIHJlcXVlc3Qgd2FzIGNhbmNlbGxlZCBieSB0aGUgc2VydmVyOyBwbGVhc2UgY29udGFjdCB1cyBhdCBzdXBwb3J0QG1vbWVudG9ocS5jb20nO1xufVxuXG4vKipcbiAqIEVycm9yIHdoZW4gdGhlcmUncyBhIGZhaWx1cmUgdG8gY29ubmVjdCB0byBNb21lbnRvIHNlcnZlcnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25uZWN0aW9uRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLkNPTk5FQ1RJT05fRVJST1I7XG59XG5cbi8qKlxuICogRXJyb3IgcmFpc2VkIHdoZW4gc3lzdGVtIGluIG5vdCBpbiBhIHN0YXRlIHJlcXVpcmVkIGZvciB0aGUgb3BlcmF0aW9uJ3Mgc3VjY2Vzc1xuICovXG5leHBvcnQgY2xhc3MgRmFpbGVkUHJlY29uZGl0aW9uRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLkZBSUxFRF9QUkVDT05ESVRJT05fRVJST1I7XG4gIG92ZXJyaWRlIF9tZXNzYWdlV3JhcHBlciA9XG4gICAgXCJTeXN0ZW0gaXMgbm90IGluIGEgc3RhdGUgcmVxdWlyZWQgZm9yIHRoZSBvcGVyYXRpb24ncyBleGVjdXRpb25cIjtcbn1cblxuLyoqXG4gKiBDYWNoZSBTZXJ2aWNlIGVuY291bnRlcmVkIGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uIHdoaWxlIHRyeWluZyB0byBmdWxmaWxsIHRoZSByZXF1ZXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBJbnRlcm5hbFNlcnZlckVycm9yIGV4dGVuZHMgU2RrRXJyb3Ige1xuICBvdmVycmlkZSBfZXJyb3JDb2RlID0gTW9tZW50b0Vycm9yQ29kZS5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIG92ZXJyaWRlIF9tZXNzYWdlV3JhcHBlciA9XG4gICAgJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIGZ1bGZpbGwgdGhlIHJlcXVlc3Q7IHBsZWFzZSBjb250YWN0IHVzIGF0IHN1cHBvcnRAbW9tZW50b2hxLmNvbSc7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBlcnJvcnMgdGhyb3duIHdoZW4gaW52YWxpZCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdG8gdGhlIE1vbWVudG8gQ2FjaGVcbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgU2RrRXJyb3Ige1xuICBvdmVycmlkZSBfZXJyb3JDb2RlID0gTW9tZW50b0Vycm9yQ29kZS5JTlZBTElEX0FSR1VNRU5UX0VSUk9SO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPSAnSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gTW9tZW50byBjbGllbnQnO1xufVxuXG4vKipcbiAqIEVycm9yIHdoZW4gY2FsbHMgYXJlIHRocm90dGxlZCBkdWUgdG8gcmVxdWVzdCBsaW1pdCByYXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBMaW1pdEV4Y2VlZGVkRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLkxJTUlUX0VYQ0VFREVEX0VSUk9SO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPVxuICAgICdSZXF1ZXN0IHJhdGUsIGJhbmR3aWR0aCwgb3Igb2JqZWN0IHNpemUgZXhjZWVkZWQgdGhlIGxpbWl0cyBmb3IgdGhpcyBhY2NvdW50LiAgVG8gcmVzb2x2ZSB0aGlzIGVycm9yLCByZWR1Y2UgeW91ciB1c2FnZSBhcyBhcHByb3ByaWF0ZSBvciBjb250YWN0IHVzIGF0IHN1cHBvcnRAbW9tZW50b2hxLmNvbSB0byByZXF1ZXN0IGEgbGltaXQgaW5jcmVhc2UnO1xufVxuXG4vKipcbiAqIEVycm9yIHRoYXQgb2NjdXJzIHdoZW4gdHJ5aW5nIHRvIGdldCBhIGNhY2hlIHRoYXQgZG9lc24ndCBleGlzdC4gVG8gcmVzb2x2ZSwgbWFrZSBzdXJlIHRoYXQgdGhlIGNhY2hlIHlvdSBhcmUgdHJ5aW5nXG4gKiB0byBnZXQgZXhpc3RzLiBJZiBpdCBkb2Vzbid0IGNyZWF0ZSBpdCBmaXJzdCBhbmQgdGhlbiB0cnkgYWdhaW5cbiAqL1xuZXhwb3J0IGNsYXNzIENhY2hlTm90Rm91bmRFcnJvciBleHRlbmRzIFNka0Vycm9yIHtcbiAgb3ZlcnJpZGUgX2Vycm9yQ29kZSA9IE1vbWVudG9FcnJvckNvZGUuQ0FDSEVfTk9UX0ZPVU5EX0VSUk9SO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPVxuICAgICdBIGNhY2hlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGRvZXMgbm90IGV4aXN0LiAgVG8gcmVzb2x2ZSB0aGlzIGVycm9yLCBtYWtlIHN1cmUgeW91IGhhdmUgY3JlYXRlZCB0aGUgY2FjaGUgYmVmb3JlIGF0dGVtcHRpbmcgdG8gdXNlIGl0Jztcbn1cblxuLyoqXG4gKiBFcnJvciB0aGF0IG9jY3VycyB3aGVuIHRyeWluZyB0byBnZXQgYSBzdG9yZSB0aGF0IGRvZXNuJ3QgZXhpc3QuIFRvIHJlc29sdmUsIG1ha2Ugc3VyZSB0aGF0IHRoZSBzdG9yZSB5b3UgYXJlIHRyeWluZ1xuICogdG8gZ2V0IGV4aXN0cy4gSWYgaXQgZG9lc24ndCBjcmVhdGUgaXQgZmlyc3QgYW5kIHRoZW4gdHJ5IGFnYWluLlxuICovXG5leHBvcnQgY2xhc3MgU3RvcmVOb3RGb3VuZEVycm9yIGV4dGVuZHMgU2RrRXJyb3Ige1xuICBvdmVycmlkZSBfZXJyb3JDb2RlID0gTW9tZW50b0Vycm9yQ29kZS5TVE9SRV9OT1RfRk9VTkRfRVJST1I7XG4gIG92ZXJyaWRlIF9tZXNzYWdlV3JhcHBlciA9XG4gICAgJ0Egc3RvcmUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgZG9lcyBub3QgZXhpc3QuICBUbyByZXNvbHZlIHRoaXMgZXJyb3IsIG1ha2Ugc3VyZSB5b3UgaGF2ZSBjcmVhdGVkIHRoZSBzdG9yZSBiZWZvcmUgYXR0ZW1wdGluZyB0byB1c2UgaXQnO1xufVxuXG4vKipcbiAqIEVycm9yIHRoYXQgb2NjdXJzIHdoZW4gdHJ5aW5nIHRvIGdldCBhbiBpdGVtIGZyb20gc3RvcmUgdGhhdCBkb2Vzbid0IGV4aXN0LiBUbyByZXNvbHZlLCBtYWtlIHN1cmUgdGhhdCB0aGUgaXRlbSB5b3UgYXJlIHRyeWluZ1xuICogdG8gZ2V0IGV4aXN0cy4gSWYgaXQgZG9lc24ndCBjcmVhdGUgaXQgZmlyc3QgYW5kIHRoZW4gdHJ5IGFnYWluLlxuICovXG5leHBvcnQgY2xhc3MgU3RvcmVJdGVtTm90Rm91bmRFcnJvciBleHRlbmRzIFNka0Vycm9yIHtcbiAgb3ZlcnJpZGUgX2Vycm9yQ29kZSA9IE1vbWVudG9FcnJvckNvZGUuU1RPUkVfSVRFTV9OT1RfRk9VTkRfRVJST1I7XG4gIG92ZXJyaWRlIF9tZXNzYWdlV3JhcHBlciA9ICdBbiBpdGVtIHdpdGggdGhlIHNwZWNpZmllZCBrZXkgZG9lcyBub3QgZXhpc3QnO1xufVxuXG4vKipcbiAqIEluc3VmZmljaWVudCBwZXJtaXNzaW9ucyB0byBwZXJmb3JtIGFuIG9wZXJhdGlvbiBvbiBDYWNoZSBTZXJ2aWNlXG4gKi9cbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLlBFUk1JU1NJT05fRVJST1I7XG4gIG92ZXJyaWRlIF9tZXNzYWdlV3JhcHBlciA9XG4gICAgJ0luc3VmZmljaWVudCBwZXJtaXNzaW9ucyB0byBwZXJmb3JtIGFuIG9wZXJhdGlvbiBvbiBhIGNhY2hlJztcbn1cblxuLyoqXG4gKiBTZXJ2ZXIgd2FzIHVuYWJsZSB0byBoYW5kbGUgdGhlIHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZXJ2ZXJVbmF2YWlsYWJsZUVycm9yIGV4dGVuZHMgU2RrRXJyb3Ige1xuICBvdmVycmlkZSBfZXJyb3JDb2RlID0gTW9tZW50b0Vycm9yQ29kZS5TRVJWRVJfVU5BVkFJTEFCTEU7XG4gIG92ZXJyaWRlIF9tZXNzYWdlV3JhcHBlciA9XG4gICAgJ1RoZSBzZXJ2ZXIgd2FzIHVuYWJsZSB0byBoYW5kbGUgdGhlIHJlcXVlc3Q7IGNvbnNpZGVyIHJldHJ5aW5nLiAgSWYgdGhlIGVycm9yIHBlcnNpc3RzLCBwbGVhc2UgY29udGFjdCB1cyBhdCBzdXBwb3J0QG1vbWVudG9ocS5jb20nO1xufVxuXG4vKipcbiAqIEVycm9yIHdoZW4gYW4gb3BlcmF0aW9uIGRpZCBub3QgY29tcGxldGUgaW4gdGltZVxuICovXG5leHBvcnQgY2xhc3MgVGltZW91dEVycm9yIGV4dGVuZHMgU2RrRXJyb3Ige1xuICBvdmVycmlkZSBfZXJyb3JDb2RlID0gTW9tZW50b0Vycm9yQ29kZS5USU1FT1VUX0VSUk9SO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPVxuICAgIFwiVGhlIGNsaWVudCdzIGNvbmZpZ3VyZWQgdGltZW91dCB3YXMgZXhjZWVkZWQ7IHlvdSBtYXkgbmVlZCB0byB1c2UgYSBDb25maWd1cmF0aW9uIHdpdGggbW9yZSBsZW5pZW50IHRpbWVvdXRzXCI7XG59XG5cbi8qKlxuICogRXJyb3IgcmFpc2VkIHdoZW4gdGhlIHVuZGVybHlpbmcgY2F1c2UgaW4gdW5rbm93blxuICovXG5leHBvcnQgY2xhc3MgVW5rbm93bkVycm9yIGV4dGVuZHMgU2RrRXJyb3Ige1xuICBvdmVycmlkZSBfZXJyb3JDb2RlID0gTW9tZW50b0Vycm9yQ29kZS5VTktOT1dOX0VSUk9SO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPSAnVW5rbm93biBlcnJvciBoYXMgb2NjdXJyZWQnO1xufVxuXG4vKipcbiAqIEVycm9yIHJhaXNlZCB3aGVuIHRoZSBzZXJ2aWNlIHJldHVybnMgYW4gdW5rbm93biByZXNwb25zZVxuICovXG5leHBvcnQgY2xhc3MgVW5rbm93blNlcnZpY2VFcnJvciBleHRlbmRzIFNka0Vycm9yIHtcbiAgb3ZlcnJpZGUgX2Vycm9yQ29kZSA9IE1vbWVudG9FcnJvckNvZGUuVU5LTk9XTl9TRVJWSUNFX0VSUk9SO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPVxuICAgICdTZXJ2aWNlIHJldHVybmVkIGFuIHVua25vd24gcmVzcG9uc2U7IHBsZWFzZSBjb250YWN0IHVzIGF0IHN1cHBvcnRAbW9tZW50b2hxLmNvbSc7XG59XG4iXX0=
|
346
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Vycm9ycy9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBWSxnQkEyQ1g7QUEzQ0QsV0FBWSxnQkFBZ0I7SUFDMUIsNENBQTRDO0lBQzVDLHFFQUFpRCxDQUFBO0lBQ2pELHVDQUF1QztJQUN2QyxtRUFBK0MsQ0FBQTtJQUMvQywyQ0FBMkM7SUFDM0MsdUVBQW1ELENBQUE7SUFDbkQseURBQXlEO0lBQ3pELGlFQUE2QyxDQUFBO0lBQzdDLDJDQUEyQztJQUMzQyx1RUFBbUQsQ0FBQTtJQUNuRCwwQ0FBMEM7SUFDMUMsNkRBQXlDLENBQUE7SUFDekMsb0RBQW9EO0lBQ3BELHVEQUFtQyxDQUFBO0lBQ25DLDBDQUEwQztJQUMxQyxtRUFBK0MsQ0FBQTtJQUMvQyx3Q0FBd0M7SUFDeEMsNkVBQXlELENBQUE7SUFDekQsbUVBQW1FO0lBQ25FLG1FQUErQyxDQUFBO0lBQy9DLGdEQUFnRDtJQUNoRCx5REFBcUMsQ0FBQTtJQUNyQyxpRUFBaUU7SUFDakUsaUVBQTZDLENBQUE7SUFDN0Msc0NBQXNDO0lBQ3RDLHVEQUFtQyxDQUFBO0lBQ25DLHNDQUFzQztJQUN0Qyx5REFBcUMsQ0FBQTtJQUNyQyw4RUFBOEU7SUFDOUUsaUVBQTZDLENBQUE7SUFDN0Msc0JBQXNCO0lBQ3RCLDJEQUF1QyxDQUFBO0lBQ3ZDLDJDQUEyQztJQUMzQyxtREFBK0IsQ0FBQTtJQUMvQiwwQ0FBMEM7SUFDMUMsNkRBQXlDLENBQUE7SUFDekMsdURBQXVEO0lBQ3ZELDJFQUF1RCxDQUFBO0lBQ3ZELGtFQUFrRTtJQUNsRSwyRUFBdUQsQ0FBQTtJQUN2RCw2QkFBNkI7SUFDN0IsbURBQStCLENBQUE7QUFDakMsQ0FBQyxFQTNDVyxnQkFBZ0IsR0FBaEIsd0JBQWdCLEtBQWhCLHdCQUFnQixRQTJDM0I7QUFFRCxNQUFhLHVCQUF1QjtJQUlsQyxZQUFZLElBQVksRUFBRSxP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ekksQ0FBQztDQUFBO0FBSkQsd0RBSUM7QUFFRDs7R0FFRztBQUNILE1BQWEsWUFBYSxTQUFRLFFBQVE7SUFBMUM7O1FBQ1csZUFBVSxHQUFHLGdCQUFnQixDQUFDLGFBQWEsQ0FBQztRQUM1QyxvQkFBZSxHQUN0Qiw4R0FBOEcsQ0FBQztJQUNuSCxDQUFDO0NBQUE7QUFKRCxvQ0FJQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxZQUFhLFNBQVEsUUFBUTtJQUExQzs7UUFDVyxlQUFVLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDO1FBQzVDLG9CQUFlLEdBQUcsNEJBQTRCLENBQUM7SUFDMUQsQ0FBQztDQUFBO0FBSEQsb0NBR0M7QUFFRDs7R0FFRztBQUNILE1BQWEsbUJBQW9CLFNBQVEsUUFBUTtJQUFqRDs7UUFDVyxlQUFVLEdBQUcsZ0JBQWdCLENBQUMscUJBQXFCLENBQUM7UUFDcEQsb0JBQWUsR0FDdEIsa0ZBQWtGLENBQUM7SUFDdkYsQ0FBQztDQUFBO0FBSkQsa0RBSUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBNb21lbnRvRXJyb3JDb2RlIHtcbiAgLy8gSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gTW9tZW50byBjbGllbnRcbiAgSU5WQUxJRF9BUkdVTUVOVF9FUlJPUiA9ICdJTlZBTElEX0FSR1VNRU5UX0VSUk9SJyxcbiAgLy8gU2VydmljZSByZXR1cm5lZCBhbiB1bmtub3duIHJlc3BvbnNlXG4gIFVOS05PV05fU0VSVklDRV9FUlJPUiA9ICdVTktOT1dOX1NFUlZJQ0VfRVJST1InLFxuICAvLyBDYWNoZSB3aXRoIHNwZWNpZmllZCBuYW1lIGFscmVhZHkgZXhpc3RzXG4gIENBQ0hFX0FMUkVBRFlfRVhJU1RTX0VSUk9SID0gJ0FMUkVBRFlfRVhJU1RTX0VSUk9SJyxcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBDQUNIRV9BTFJFQURZX0VYSVNUU19FUlJPUiBpbnN0ZWFkICovXG4gIEFMUkVBRFlfRVhJU1RTX0VSUk9SID0gJ0FMUkVBRFlfRVhJU1RTX0VSUk9SJyxcbiAgLy8gU3RvcmUgd2l0aCBzcGVjaWZpZWQgbmFtZSBhbHJlYWR5IGV4aXN0c1xuICBTVE9SRV9BTFJFQURZX0VYSVNUU19FUlJPUiA9ICdBTFJFQURZX0VYSVNUU19FUlJPUicsXG4gIC8vIENhY2hlIHdpdGggc3BlY2lmaWVkIG5hbWUgZG9lc24ndCBleGlzdFxuICBDQUNIRV9OT1RfRk9VTkRfRVJST1IgPSAnTk9UX0ZPVU5EX0VSUk9SJyxcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBDQUNIRV9OT1RfRk9VTkRfRVJST1IgaW5zdGVhZCAqL1xuICBOT1RfRk9VTkRfRVJST1IgPSAnTk9UX0ZPVU5EX0VSUk9SJyxcbiAgLy8gU3RvcmUgd2l0aCBzcGVjaWZpZWQgbmFtZSBkb2Vzbid0IGV4aXN0XG4gIFNUT1JFX05PVF9GT1VORF9FUlJPUiA9ICdTVE9SRV9OT1RfRk9VTkRfRVJST1InLFxuICAvLyBJdGVtIHdpdGggc3BlY2lmaWVkIGtleSBkb2Vzbid0IGV4aXN0XG4gIFNUT1JFX0lURU1fTk9UX0ZPVU5EX0VSUk9SID0gJ1NUT1JFX0lURU1fTk9UX0ZPVU5EX0VSUk9SJyxcbiAgLy8gQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gZnVsZmlsbCB0aGUgcmVxdWVzdFxuICBJTlRFUk5BTF9TRVJWRVJfRVJST1IgPSAnSU5URVJOQUxfU0VSVkVSX0VSUk9SJyxcbiAgLy8gSW5zdWZmaWNpZW50IHBlcm1pc3Npb25zIHRvIHBlcmZvcm0gb3BlcmF0aW9uXG4gIFBFUk1JU1NJT05fRVJST1IgPSAnUEVSTUlTU0lPTl9FUlJPUicsXG4gIC8vIEludmFsaWQgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMgdG8gY29ubmVjdCB0byBjYWNoZSBzZXJ2aWNlXG4gIEFVVEhFTlRJQ0FUSU9OX0VSUk9SID0gJ0FVVEhFTlRJQ0FUSU9OX0VSUk9SJyxcbiAgLy8gUmVxdWVzdCB3YXMgY2FuY2VsbGVkIGJ5IHRoZSBzZXJ2ZXJcbiAgQ0FOQ0VMTEVEX0VSUk9SID0gJ0NBTkNFTExFRF9FUlJPUicsXG4gIC8vIEVycm9yIGNvbm5lY3RpbmcgdG8gTW9tZW50byBzZXJ2ZXJzXG4gIENPTk5FQ1RJT05fRVJST1IgPSAnQ09OTkVDVElPTl9FUlJPUicsXG4gIC8vIFJlcXVlc3QgcmF0ZSwgYmFuZHdpZHRoLCBvciBvYmplY3Qgc2l6ZSBleGNlZWRlZCB0aGUgbGltaXRzIGZvciB0aGUgYWNjb3VudFxuICBMSU1JVF9FWENFRURFRF9FUlJPUiA9ICdMSU1JVF9FWENFRURFRF9FUlJPUicsXG4gIC8vIFJlcXVlc3Qgd2FzIGludmFsaWRcbiAgQkFEX1JFUVVFU1RfRVJST1IgPSAnQkFEX1JFUVVFU1RfRVJST1InLFxuICAvLyBDbGllbnQncyBjb25maWd1cmVkIHRpbWVvdXQgd2FzIGV4Y2VlZGVkXG4gIFRJTUVPVVRfRVJST1IgPSAnVElNRU9VVF9FUlJPUicsXG4gIC8vIFNlcnZlciB3YXMgdW5hYmxlIHRvIGhhbmRsZSB0aGUgcmVxdWVzdFxuICBTRVJWRVJfVU5BVkFJTEFCTEUgPSAnU0VSVkVSX1VOQVZBSUxBQkxFJyxcbiAgLy8gQSBjbGllbnQgcmVzb3VyY2UgKG1vc3QgbGlrZWx5IG1lbW9yeSkgd2FzIGV4aGF1c3RlZFxuICBDTElFTlRfUkVTT1VSQ0VfRVhIQVVTVEVEID0gJ0NMSUVOVF9SRVNPVVJDRV9FWEhBVVNURUQnLFxuICAvLyBTeXN0ZW0gaXMgbm90IGluIGEgc3RhdGUgcmVxdWlyZWQgZm9yIHRoZSBvcGVyYXRpb24ncyBleGVjdXRpb25cbiAgRkFJTEVEX1BSRUNPTkRJVElPTl9FUlJPUiA9ICdGQUlMRURfUFJFQ09ORElUSU9OX0VSUk9SJyxcbiAgLy8gVW5rbm93biBlcnJvciBoYXMgb2NjdXJyZWRcbiAgVU5LTk9XTl9FUlJPUiA9ICdVTktOT1dOX0VSUk9SJyxcbn1cblxuZXhwb3J0IGNsYXNzIE1vbWVudG9HcnBjRXJyb3JEZXRhaWxzIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvZGU6IG51bWJlcjtcbiAgcHVibGljIHJlYWRvbmx5IGRldGFpbHM6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IG1ldGFkYXRhPzogb2JqZWN0O1xuICBjb25zdHJ1Y3Rvcihjb2RlOiBudW1iZXIsIGRldGFpbHM6IHN0cmluZywgbWV0YWRhdGE/OiBvYmplY3QpIHtcbiAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgIHRoaXMuZGV0YWlscyA9IGRldGFpbHM7XG4gICAgdGhpcy5tZXRhZGF0YSA9IG1ldGFkYXRhO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNb21lbnRvRXJyb3JUcmFuc3BvcnREZXRhaWxzIHtcbiAgcHVibGljIHJlYWRvbmx5IGdycGM6IE1vbWVudG9HcnBjRXJyb3JEZXRhaWxzO1xuICBjb25zdHJ1Y3RvcihncnBjOiBNb21lbnRvR3JwY0Vycm9yRGV0YWlscykge1xuICAgIHRoaXMuZ3JwYyA9IGdycGM7XG4gIH1cbn1cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYWxsIGVycm9ycyB0aHJvd24gYnkgdGhlIHNka1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2RrRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHByb3RlY3RlZCByZWFkb25seSBfZXJyb3JDb2RlOiBNb21lbnRvRXJyb3JDb2RlO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX21lc3NhZ2VXcmFwcGVyOiBzdHJpbmc7XG4gIHByb3RlY3RlZCByZWFkb25seSBfdHJhbnNwb3J0RGV0YWlsczogTW9tZW50b0Vycm9yVHJhbnNwb3J0RGV0YWlscztcbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGNvZGUgPSAwLFxuICAgIG1ldGFkYXRhOiBvYmplY3QgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gICAgc3RhY2s6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICBjb25zdCBncnBjRGV0YWlscyA9IG5ldyBNb21lbnRvR3JwY0Vycm9yRGV0YWlscyhjb2RlLCBtZXNzYWdlLCBtZXRhZGF0YSk7XG4gICAgdGhpcy5fdHJhbnNwb3J0RGV0YWlscyA9IG5ldyBNb21lbnRvRXJyb3JUcmFuc3BvcnREZXRhaWxzKGdycGNEZXRhaWxzKTtcbiAgICB0aGlzLnN0YWNrID0gc3RhY2sgPz8gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHdyYXBwZWRFcnJvck1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5fbWVzc2FnZVdyYXBwZXJ9OiAke3RoaXMubWVzc2FnZX1gO1xuICB9XG5cbiAgcHVibGljIGVycm9yQ29kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZXJyb3JDb2RlO1xuICB9XG5cbiAgcHVibGljIHRyYW5zcG9ydERldGFpbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydERldGFpbHM7XG4gIH1cbn1cblxuLyoqXG4gKiBFcnJvciB0aGF0IG9jY3VycyB3aGVuIHRyeWluZyB0byBjcmVhdGUgYSBjYWNoZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcgY2FjaGUuIFRvIHJlc29sdmUgdGhpcyBlcnJvcixcbiAqIGVpdGhlciBkZWxldGUgdGhlIGV4aXN0aW5nIGNhY2hlIGFuZCBtYWtlIGEgbmV3IG9uZSwgb3IgY2hhbmdlIHRoZSBuYW1lIG9mIHRoZSBjYWNoZSB5b3UgYXJlIHRyeWluZyB0byBjcmVhdGUgdG9cbiAqIG9uZSB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdFxuICovXG5leHBvcnQgY2xhc3MgQ2FjaGVBbHJlYWR5RXhpc3RzRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLkNBQ0hFX0FMUkVBRFlfRVhJU1RTX0VSUk9SO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPVxuICAgICdBIGNhY2hlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGFscmVhZHkgZXhpc3RzLiAgVG8gcmVzb2x2ZSB0aGlzIGVycm9yLCBlaXRoZXIgZGVsZXRlIHRoZSBleGlzdGluZyBjYWNoZSBhbmQgbWFrZSBhIG5ldyBvbmUsIG9yIHVzZSBhIGRpZmZlcmVudCBuYW1lJztcbn1cblxuLyoqXG4gKiBFcnJvciB0aGF0IG9jY3VycyB3aGVuIHRyeWluZyB0byBjcmVhdGUgYSBzdG9yZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcgY2FjaGUuIFRvIHJlc29sdmUgdGhpcyBlcnJvcixcbiAqIGVpdGhlciBkZWxldGUgdGhlIGV4aXN0aW5nIHN0b3JlIGFuZCBtYWtlIGEgbmV3IG9uZSwgb3IgY2hhbmdlIHRoZSBuYW1lIG9mIHRoZSBzdG9yZSB5b3UgYXJlIHRyeWluZyB0byBjcmVhdGUgdG9cbiAqIG9uZSB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdFxuICovXG5leHBvcnQgY2xhc3MgU3RvcmVBbHJlYWR5RXhpc3RzRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLlNUT1JFX0FMUkVBRFlfRVhJU1RTX0VSUk9SO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPVxuICAgICdBIHN0b3JlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGFscmVhZHkgZXhpc3RzLiAgVG8gcmVzb2x2ZSB0aGlzIGVycm9yLCBlaXRoZXIgZGVsZXRlIHRoZSBleGlzdGluZyBzdG9yZSBhbmQgbWFrZSBhIG5ldyBvbmUsIG9yIHVzZSBhIGRpZmZlcmVudCBuYW1lJztcbn1cblxuLyoqXG4gKiBFcnJvciB3aGVuIGF1dGhlbnRpY2F0aW9uIHdpdGggQ2FjaGUgU2VydmljZSBmYWlsc1xuICovXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRpb25FcnJvciBleHRlbmRzIFNka0Vycm9yIHtcbiAgb3ZlcnJpZGUgX2Vycm9yQ29kZSA9IE1vbWVudG9FcnJvckNvZGUuQVVUSEVOVElDQVRJT05fRVJST1I7XG4gIG92ZXJyaWRlIF9tZXNzYWdlV3JhcHBlciA9XG4gICAgJ0ludmFsaWQgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMgdG8gY29ubmVjdCB0byBjYWNoZSBzZXJ2aWNlJztcbn1cblxuLyoqXG4gKiBFcnJvciByYWlzZWQgaW4gcmVzcG9uc2UgdG8gYW4gaW52YWxpZCByZXF1ZXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBCYWRSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLkJBRF9SRVFVRVNUX0VSUk9SO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPVxuICAgICdUaGUgcmVxdWVzdCB3YXMgaW52YWxpZDsgcGxlYXNlIGNvbnRhY3QgdXMgYXQgc3VwcG9ydEBtb21lbnRvaHEuY29tJztcbn1cblxuLyoqXG4gKiBFcnJvciB3aGVuIGFuIG9wZXJhdGlvbiB3aXRoIENhY2hlIFNlcnZpY2Ugd2FzIGNhbmNlbGxlZFxuICovXG5leHBvcnQgY2xhc3MgQ2FuY2VsbGVkRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLkNBTkNFTExFRF9FUlJPUjtcbiAgb3ZlcnJpZGUgX21lc3NhZ2VXcmFwcGVyID1cbiAgICAnVGhlIHJlcXVlc3Qgd2FzIGNhbmNlbGxlZCBieSB0aGUgc2VydmVyOyBwbGVhc2UgY29udGFjdCB1cyBhdCBzdXBwb3J0QG1vbWVudG9ocS5jb20nO1xufVxuXG4vKipcbiAqIEVycm9yIHdoZW4gdGhlcmUncyBhIGZhaWx1cmUgdG8gY29ubmVjdCB0byBNb21lbnRvIHNlcnZlcnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25uZWN0aW9uRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLkNPTk5FQ1RJT05fRVJST1I7XG59XG5cbi8qKlxuICogRXJyb3IgcmFpc2VkIHdoZW4gc3lzdGVtIGluIG5vdCBpbiBhIHN0YXRlIHJlcXVpcmVkIGZvciB0aGUgb3BlcmF0aW9uJ3Mgc3VjY2Vzc1xuICovXG5leHBvcnQgY2xhc3MgRmFpbGVkUHJlY29uZGl0aW9uRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLkZBSUxFRF9QUkVDT05ESVRJT05fRVJST1I7XG4gIG92ZXJyaWRlIF9tZXNzYWdlV3JhcHBlciA9XG4gICAgXCJTeXN0ZW0gaXMgbm90IGluIGEgc3RhdGUgcmVxdWlyZWQgZm9yIHRoZSBvcGVyYXRpb24ncyBleGVjdXRpb25cIjtcbn1cblxuLyoqXG4gKiBDYWNoZSBTZXJ2aWNlIGVuY291bnRlcmVkIGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uIHdoaWxlIHRyeWluZyB0byBmdWxmaWxsIHRoZSByZXF1ZXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBJbnRlcm5hbFNlcnZlckVycm9yIGV4dGVuZHMgU2RrRXJyb3Ige1xuICBvdmVycmlkZSBfZXJyb3JDb2RlID0gTW9tZW50b0Vycm9yQ29kZS5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIG92ZXJyaWRlIF9tZXNzYWdlV3JhcHBlciA9XG4gICAgJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIGZ1bGZpbGwgdGhlIHJlcXVlc3Q7IHBsZWFzZSBjb250YWN0IHVzIGF0IHN1cHBvcnRAbW9tZW50b2hxLmNvbSc7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBlcnJvcnMgdGhyb3duIHdoZW4gaW52YWxpZCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdG8gdGhlIE1vbWVudG8gQ2FjaGVcbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgU2RrRXJyb3Ige1xuICBvdmVycmlkZSBfZXJyb3JDb2RlID0gTW9tZW50b0Vycm9yQ29kZS5JTlZBTElEX0FSR1VNRU5UX0VSUk9SO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPSAnSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gTW9tZW50byBjbGllbnQnO1xufVxuXG5lbnVtIExpbWl0RXhjZWVkZWRNZXNzYWdlV3JhcHBlciB7XG4gIFRPUElDX1NVQlNDUklQVElPTlNfTElNSVRfRVhDRUVERUQgPSAnVG9waWMgc3Vic2NyaXB0aW9ucyBsaW1pdCBleGNlZWRlZCBmb3IgdGhpcyBhY2NvdW50JyxcbiAgT1BFUkFUSU9OU19SQVRFX0xJTUlUX0VYQ0VFREVEID0gJ1JlcXVlc3QgcmF0ZSBsaW1pdCBleGNlZWRlZCBmb3IgdGhpcyBhY2NvdW50JyxcbiAgVEhST1VHSFBVVF9SQVRFX0xJTUlUX0VYQ0VFREVEID0gJ0JhbmR3aWR0aCBsaW1pdCBleGNlZWRlZCBmb3IgdGhpcyBhY2NvdW50JyxcbiAgUkVRVUVTVF9TSVpFX0xJTUlUX0VYQ0VFREVEID0gJ1JlcXVlc3Qgc2l6ZSBsaW1pdCBleGNlZWRlZCBmb3IgdGhpcyBhY2NvdW50JyxcbiAgSVRFTV9TSVpFX0xJTUlUX0VYQ0VFREVEID0gJ0l0ZW0gc2l6ZSBsaW1pdCBleGNlZWRlZCBmb3IgdGhpcyBhY2NvdW50JyxcbiAgRUxFTUVOVF9TSVpFX0xJTUlUX0VYQ0VFREVEID0gJ0VsZW1lbnQgc2l6ZSBsaW1pdCBleGNlZWRlZCBmb3IgdGhpcyBhY2NvdW50JyxcbiAgVU5LTk9XTl9MSU1JVF9FWENFRURFRCA9ICdMaW1pdCBleGNlZWRlZCBmb3IgdGhpcyBhY2NvdW50Jyxcbn1cblxuLyoqXG4gKiBFcnJvciB3aGVuIGNhbGxzIGFyZSB0aHJvdHRsZWQgZHVlIHRvIHJlcXVlc3QgbGltaXQgcmF0ZVxuICovXG5leHBvcnQgY2xhc3MgTGltaXRFeGNlZWRlZEVycm9yIGV4dGVuZHMgU2RrRXJyb3Ige1xuICBvdmVycmlkZSBfZXJyb3JDb2RlID0gTW9tZW50b0Vycm9yQ29kZS5MSU1JVF9FWENFRURFRF9FUlJPUjtcbiAgb3ZlcnJpZGUgX21lc3NhZ2VXcmFwcGVyID0gdGhpcy5kZXRlcm1pbmVNZXNzYWdlV3JhcHBlcigpO1xuICBwcml2YXRlIGVyckNhdXNlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGNvZGUgPSAwLFxuICAgIG1ldGFkYXRhOiBvYmplY3QgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gICAgc3RhY2s6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbiAgICBlcnJDYXVzZT86IHN0cmluZ1xuICApIHtcbiAgICBzdXBlcihtZXNzYWdlLCBjb2RlLCBtZXRhZGF0YSwgc3RhY2spO1xuICAgIHRoaXMuZXJyQ2F1c2UgPSBlcnJDYXVzZTtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lTWVzc2FnZVdyYXBwZXIoKSB7XG4gICAgLy8gSWYgcHJvdmlkZWQsIHdlIHVzZSB0aGUgYGVycmAgbWV0YWRhdGEgdmFsdWUgdG8gZGV0ZXJtaW5lIHRoZSBtb3N0XG4gICAgLy8gYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZSB0byByZXR1cm4uXG4gICAgaWYgKHRoaXMuZXJyQ2F1c2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc3dpdGNoICh0aGlzLmVyckNhdXNlKSB7XG4gICAgICAgIGNhc2UgJ3RvcGljX3N1YnNjcmlwdGlvbnNfbGltaXRfZXhjZWVkZWQnOlxuICAgICAgICAgIHJldHVybiBMaW1pdEV4Y2VlZGVkTWVzc2FnZVdyYXBwZXIuVE9QSUNfU1VCU0NSSVBUSU9OU19MSU1JVF9FWENFRURFRDtcbiAgICAgICAgY2FzZSAnb3BlcmF0aW9uc19yYXRlX2xpbWl0X2V4Y2VlZGVkJzpcbiAgICAgICAgICByZXR1cm4gTGltaXRFeGNlZWRlZE1lc3NhZ2VXcmFwcGVyLk9QRVJBVElPTlNfUkFURV9MSU1JVF9FWENFRURFRDtcbiAgICAgICAgY2FzZSAndGhyb3VnaHB1dF9yYXRlX2xpbWl0X2V4Y2VlZGVkJzpcbiAgICAgICAgICByZXR1cm4gTGltaXRFeGNlZWRlZE1lc3NhZ2VXcmFwcGVyLlRIUk9VR0hQVVRfUkFURV9MSU1JVF9FWENFRURFRDtcbiAgICAgICAgY2FzZSAncmVxdWVzdF9zaXplX2xpbWl0X2V4Y2VlZGVkJzpcbiAgICAgICAgICByZXR1cm4gTGltaXRFeGNlZWRlZE1lc3NhZ2VXcmFwcGVyLlJFUVVFU1RfU0laRV9MSU1JVF9FWENFRURFRDtcbiAgICAgICAgY2FzZSAnaXRlbV9zaXplX2xpbWl0X2V4Y2VlZGVkJzpcbiAgICAgICAgICByZXR1cm4gTGltaXRFeGNlZWRlZE1lc3NhZ2VXcmFwcGVyLklURU1fU0laRV9MSU1JVF9FWENFRURFRDtcbiAgICAgICAgY2FzZSAnZWxlbWVudF9zaXplX2xpbWl0X2V4Y2VlZGVkJzpcbiAgICAgICAgICByZXR1cm4gTGltaXRFeGNlZWRlZE1lc3NhZ2VXcmFwcGVyLkVMRU1FTlRfU0laRV9MSU1JVF9FWENFRURFRDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gTGltaXRFeGNlZWRlZE1lc3NhZ2VXcmFwcGVyLlVOS05PV05fTElNSVRfRVhDRUVERUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgYGVycmAgbWV0YWRhdGEgaXMgdW5hdmFpbGFibGUsIHRyeSB0byB1c2UgdGhlIGVycm9yIGRldGFpbHMgZmllbGRcbiAgICAvLyB0byByZXR1cm4gdGhlIGFuIGFwcHJvcHJpYXRlIGVycm9yIG1lc3NhZ2UuXG4gICAgaWYgKHRoaXMuX3RyYW5zcG9ydERldGFpbHMuZ3JwYy5kZXRhaWxzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGRldGFpbHMgPSB0aGlzLl90cmFuc3BvcnREZXRhaWxzLmdycGMuZGV0YWlscy50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGRldGFpbHMuaW5jbHVkZXMoJ3N1YnNjcmliZXJzJykpIHtcbiAgICAgICAgcmV0dXJuIExpbWl0RXhjZWVkZWRNZXNzYWdlV3JhcHBlci5UT1BJQ19TVUJTQ1JJUFRJT05TX0xJTUlUX0VYQ0VFREVEO1xuICAgICAgfSBlbHNlIGlmIChkZXRhaWxzLmluY2x1ZGVzKCdvcGVyYXRpb25zJykpIHtcbiAgICAgICAgcmV0dXJuIExpbWl0RXhjZWVkZWRNZXNzYWdlV3JhcHBlci5PUEVSQVRJT05TX1JBVEVfTElNSVRfRVhDRUVERUQ7XG4gICAgICB9IGVsc2UgaWYgKGRldGFpbHMuaW5jbHVkZXMoJ3Rocm91Z2hwdXQnKSkge1xuICAgICAgICByZXR1cm4gTGltaXRFeGNlZWRlZE1lc3NhZ2VXcmFwcGVyLlRIUk9VR0hQVVRfUkFURV9MSU1JVF9FWENFRURFRDtcbiAgICAgIH0gZWxzZSBpZiAoZGV0YWlscy5pbmNsdWRlcygncmVxdWVzdCBsaW1pdCcpKSB7XG4gICAgICAgIHJldHVybiBMaW1pdEV4Y2VlZGVkTWVzc2FnZVdyYXBwZXIuUkVRVUVTVF9TSVpFX0xJTUlUX0VYQ0VFREVEO1xuICAgICAgfSBlbHNlIGlmIChkZXRhaWxzLmluY2x1ZGVzKCdpdGVtIHNpemUnKSkge1xuICAgICAgICByZXR1cm4gTGltaXRFeGNlZWRlZE1lc3NhZ2VXcmFwcGVyLklURU1fU0laRV9MSU1JVF9FWENFRURFRDtcbiAgICAgIH0gZWxzZSBpZiAoZGV0YWlscy5pbmNsdWRlcygnZWxlbWVudCBzaXplJykpIHtcbiAgICAgICAgcmV0dXJuIExpbWl0RXhjZWVkZWRNZXNzYWdlV3JhcHBlci5FTEVNRU5UX1NJWkVfTElNSVRfRVhDRUVERUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgYWxsIGVsc2UgZmFpbHMsIHJldHVybiBhIGdlbmVyaWMgXCJsaW1pdCBleGNlZWRlZFwiIG1lc3NhZ2VcbiAgICByZXR1cm4gTGltaXRFeGNlZWRlZE1lc3NhZ2VXcmFwcGVyLlVOS05PV05fTElNSVRfRVhDRUVERUQ7XG4gIH1cbn1cblxuLyoqXG4gKiBFcnJvciB0aGF0IG9jY3VycyB3aGVuIHRyeWluZyB0byBnZXQgYSBjYWNoZSB0aGF0IGRvZXNuJ3QgZXhpc3QuIFRvIHJlc29sdmUsIG1ha2Ugc3VyZSB0aGF0IHRoZSBjYWNoZSB5b3UgYXJlIHRyeWluZ1xuICogdG8gZ2V0IGV4aXN0cy4gSWYgaXQgZG9lc24ndCBjcmVhdGUgaXQgZmlyc3QgYW5kIHRoZW4gdHJ5IGFnYWluXG4gKi9cbmV4cG9ydCBjbGFzcyBDYWNoZU5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLkNBQ0hFX05PVF9GT1VORF9FUlJPUjtcbiAgb3ZlcnJpZGUgX21lc3NhZ2VXcmFwcGVyID1cbiAgICAnQSBjYWNoZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBkb2VzIG5vdCBleGlzdC4gIFRvIHJlc29sdmUgdGhpcyBlcnJvciwgbWFrZSBzdXJlIHlvdSBoYXZlIGNyZWF0ZWQgdGhlIGNhY2hlIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHVzZSBpdCc7XG59XG5cbi8qKlxuICogRXJyb3IgdGhhdCBvY2N1cnMgd2hlbiB0cnlpbmcgdG8gZ2V0IGEgc3RvcmUgdGhhdCBkb2Vzbid0IGV4aXN0LiBUbyByZXNvbHZlLCBtYWtlIHN1cmUgdGhhdCB0aGUgc3RvcmUgeW91IGFyZSB0cnlpbmdcbiAqIHRvIGdldCBleGlzdHMuIElmIGl0IGRvZXNuJ3QgY3JlYXRlIGl0IGZpcnN0IGFuZCB0aGVuIHRyeSBhZ2Fpbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFN0b3JlTm90Rm91bmRFcnJvciBleHRlbmRzIFNka0Vycm9yIHtcbiAgb3ZlcnJpZGUgX2Vycm9yQ29kZSA9IE1vbWVudG9FcnJvckNvZGUuU1RPUkVfTk9UX0ZPVU5EX0VSUk9SO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPVxuICAgICdBIHN0b3JlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGRvZXMgbm90IGV4aXN0LiAgVG8gcmVzb2x2ZSB0aGlzIGVycm9yLCBtYWtlIHN1cmUgeW91IGhhdmUgY3JlYXRlZCB0aGUgc3RvcmUgYmVmb3JlIGF0dGVtcHRpbmcgdG8gdXNlIGl0Jztcbn1cblxuLyoqXG4gKiBFcnJvciB0aGF0IG9jY3VycyB3aGVuIHRyeWluZyB0byBnZXQgYW4gaXRlbSBmcm9tIHN0b3JlIHRoYXQgZG9lc24ndCBleGlzdC4gVG8gcmVzb2x2ZSwgbWFrZSBzdXJlIHRoYXQgdGhlIGl0ZW0geW91IGFyZSB0cnlpbmdcbiAqIHRvIGdldCBleGlzdHMuIElmIGl0IGRvZXNuJ3QgY3JlYXRlIGl0IGZpcnN0IGFuZCB0aGVuIHRyeSBhZ2Fpbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFN0b3JlSXRlbU5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLlNUT1JFX0lURU1fTk9UX0ZPVU5EX0VSUk9SO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPSAnQW4gaXRlbSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5IGRvZXMgbm90IGV4aXN0Jztcbn1cblxuLyoqXG4gKiBJbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMgdG8gcGVyZm9ybSBhbiBvcGVyYXRpb24gb24gQ2FjaGUgU2VydmljZVxuICovXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbkVycm9yIGV4dGVuZHMgU2RrRXJyb3Ige1xuICBvdmVycmlkZSBfZXJyb3JDb2RlID0gTW9tZW50b0Vycm9yQ29kZS5QRVJNSVNTSU9OX0VSUk9SO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPVxuICAgICdJbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMgdG8gcGVyZm9ybSBhbiBvcGVyYXRpb24gb24gYSBjYWNoZSc7XG59XG5cbi8qKlxuICogU2VydmVyIHdhcyB1bmFibGUgdG8gaGFuZGxlIHRoZSByZXF1ZXN0LlxuICovXG5leHBvcnQgY2xhc3MgU2VydmVyVW5hdmFpbGFibGVFcnJvciBleHRlbmRzIFNka0Vycm9yIHtcbiAgb3ZlcnJpZGUgX2Vycm9yQ29kZSA9IE1vbWVudG9FcnJvckNvZGUuU0VSVkVSX1VOQVZBSUxBQkxFO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPVxuICAgICdUaGUgc2VydmVyIHdhcyB1bmFibGUgdG8gaGFuZGxlIHRoZSByZXF1ZXN0OyBjb25zaWRlciByZXRyeWluZy4gIElmIHRoZSBlcnJvciBwZXJzaXN0cywgcGxlYXNlIGNvbnRhY3QgdXMgYXQgc3VwcG9ydEBtb21lbnRvaHEuY29tJztcbn1cblxuLyoqXG4gKiBFcnJvciB3aGVuIGFuIG9wZXJhdGlvbiBkaWQgbm90IGNvbXBsZXRlIGluIHRpbWVcbiAqL1xuZXhwb3J0IGNsYXNzIFRpbWVvdXRFcnJvciBleHRlbmRzIFNka0Vycm9yIHtcbiAgb3ZlcnJpZGUgX2Vycm9yQ29kZSA9IE1vbWVudG9FcnJvckNvZGUuVElNRU9VVF9FUlJPUjtcbiAgb3ZlcnJpZGUgX21lc3NhZ2VXcmFwcGVyID1cbiAgICBcIlRoZSBjbGllbnQncyBjb25maWd1cmVkIHRpbWVvdXQgd2FzIGV4Y2VlZGVkOyB5b3UgbWF5IG5lZWQgdG8gdXNlIGEgQ29uZmlndXJhdGlvbiB3aXRoIG1vcmUgbGVuaWVudCB0aW1lb3V0c1wiO1xufVxuXG4vKipcbiAqIEVycm9yIHJhaXNlZCB3aGVuIHRoZSB1bmRlcmx5aW5nIGNhdXNlIGluIHVua25vd25cbiAqL1xuZXhwb3J0IGNsYXNzIFVua25vd25FcnJvciBleHRlbmRzIFNka0Vycm9yIHtcbiAgb3ZlcnJpZGUgX2Vycm9yQ29kZSA9IE1vbWVudG9FcnJvckNvZGUuVU5LTk9XTl9FUlJPUjtcbiAgb3ZlcnJpZGUgX21lc3NhZ2VXcmFwcGVyID0gJ1Vua25vd24gZXJyb3IgaGFzIG9jY3VycmVkJztcbn1cblxuLyoqXG4gKiBFcnJvciByYWlzZWQgd2hlbiB0aGUgc2VydmljZSByZXR1cm5zIGFuIHVua25vd24gcmVzcG9uc2VcbiAqL1xuZXhwb3J0IGNsYXNzIFVua25vd25TZXJ2aWNlRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLlVOS05PV05fU0VSVklDRV9FUlJPUjtcbiAgb3ZlcnJpZGUgX21lc3NhZ2VXcmFwcGVyID1cbiAgICAnU2VydmljZSByZXR1cm5lZCBhbiB1bmtub3duIHJlc3BvbnNlOyBwbGVhc2UgY29udGFjdCB1cyBhdCBzdXBwb3J0QG1vbWVudG9ocS5jb20nO1xufVxuIl19
|