@pipeline-builder/api-core 5.0.9 → 5.0.10
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/lib/services/quota.js +28 -1
- package/lib/types/error-codes.d.ts +3 -0
- package/lib/types/error-codes.js +5 -1
- package/lib/types/remote-audit-actions.d.ts +1 -1
- package/lib/types/remote-audit-actions.js +9 -1
- package/lib/types/wire-vocabulary.d.ts +11 -0
- package/lib/types/wire-vocabulary.js +11 -1
- package/lib/utils/secret-encryption.js +18 -2
- package/package.json +1 -1
package/lib/services/quota.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
import { createSafeClient } from './http-client.js';
|
|
4
4
|
import { getServiceAuthHeader } from '../middleware/service-tokens.js';
|
|
5
|
+
import { SYSTEM_ORG_ID } from '../middleware/system-org.js';
|
|
5
6
|
import { ErrorCode } from '../types/error-codes.js';
|
|
6
7
|
import { DEFAULT_TIER, isValidTier } from '../types/quota-tiers.js';
|
|
7
8
|
import { envBool } from '../utils/env.js';
|
|
@@ -212,6 +213,9 @@ export function createQuotaService(config = {}) {
|
|
|
212
213
|
}
|
|
213
214
|
},
|
|
214
215
|
async getTier(orgId, authHeader, requestId) {
|
|
216
|
+
const known = constantTierFor(orgId);
|
|
217
|
+
if (known)
|
|
218
|
+
return known;
|
|
215
219
|
const read = await readTier(orgId, authHeader, requestId);
|
|
216
220
|
if (read.tier)
|
|
217
221
|
return read.tier;
|
|
@@ -222,6 +226,9 @@ export function createQuotaService(config = {}) {
|
|
|
222
226
|
return DEFAULT_TIER;
|
|
223
227
|
},
|
|
224
228
|
async getTierStrict(orgId, authHeader, requestId) {
|
|
229
|
+
const known = constantTierFor(orgId);
|
|
230
|
+
if (known)
|
|
231
|
+
return known;
|
|
225
232
|
const read = await readTier(orgId, authHeader, requestId);
|
|
226
233
|
if (read.tier)
|
|
227
234
|
return read.tier;
|
|
@@ -231,6 +238,26 @@ export function createQuotaService(config = {}) {
|
|
|
231
238
|
},
|
|
232
239
|
};
|
|
233
240
|
}
|
|
241
|
+
/**
|
|
242
|
+
* The system org's tier is a CONSTANT, not a billing fact, so it is answered
|
|
243
|
+
* without a lookup.
|
|
244
|
+
*
|
|
245
|
+
* The platform's own org is always `unlimited` (platform/src/services/
|
|
246
|
+
* auth-service.ts seeds it that way): nothing meters it and it is never sold.
|
|
247
|
+
* Asking the quota service was therefore a network hop whose only possible
|
|
248
|
+
* outcomes were the answer we already knew, or a failure.
|
|
249
|
+
*
|
|
250
|
+
* The failure is what made this worth fixing. `getTier` fails OPEN to
|
|
251
|
+
* DEFAULT_TIER, which with billing enabled is `developer` — the most
|
|
252
|
+
* constrained tier — and its documented job is build-queue partitioning. A
|
|
253
|
+
* blip in the quota service therefore routed the SYSTEM org's builds onto the
|
|
254
|
+
* developer queue; the Official catalog load is 119 of them. `getTierStrict`
|
|
255
|
+
* fails CLOSED to null, so a sweep that must not guess would skip the
|
|
256
|
+
* platform's own org instead.
|
|
257
|
+
*/
|
|
258
|
+
function constantTierFor(orgId) {
|
|
259
|
+
return orgId.toLowerCase() === SYSTEM_ORG_ID ? 'unlimited' : null;
|
|
260
|
+
}
|
|
234
261
|
/**
|
|
235
262
|
* Fire-and-forget quota METERING increment with standardized error logging.
|
|
236
263
|
*
|
|
@@ -299,4 +326,4 @@ export function sendQuotaReserveDenied(res, quotaType, reservation) {
|
|
|
299
326
|
export function decrementQuota(quotaService, orgId, quotaType, authHeader, logWarn, amount = 1, resetAtSnapshot) {
|
|
300
327
|
quotaService.decrement(orgId, quotaType, authHeader, amount, resetAtSnapshot).catch((err) => logWarn('Quota rollback failed', { error: errorMessage(err) }));
|
|
301
328
|
}
|
|
302
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvcXVvdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUl0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQXVCLE1BQU0sa0JBQWtCLENBQUM7QUFDekUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFdkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFrQixNQUFNLHlCQUF5QixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRS9EOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxxQkFBcUIsR0FBK0Q7SUFDeEYsbUJBQW1CLEVBQUUsQ0FBQztJQUN0QixVQUFVLEVBQUUsQ0FBQztDQUNkLENBQUM7QUFFRixNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFckMsK0NBQStDO0FBQy9DLEVBQUU7QUFDRiw4RUFBOEU7QUFDOUUsZ0ZBQWdGO0FBQ2hGLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUseUVBQXlFO0FBQ3pFLGdGQUFnRjtBQUNoRixpRkFBaUY7QUFDakYsb0VBQW9FO0FBQ3BFLG1FQUFtRTtBQUNuRSwyRUFBMkU7QUFDM0UsNEVBQTRFO0FBQzVFLDRFQUE0RTtBQUM1RSxnRkFBZ0Y7QUFDaEYs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QkFBaUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNsRixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUUsWUFBMEIsRUFDeEQsS0FBYSxFQUNiLFNBQW9CLEVBQ3BCLFVBQWtCLEVBQ2xCLE9BQWtELEVBQ2xELE1BQU0sR0FBVyxDQUFDLEVBQ2xCLGVBQXdCO0lBRXhCLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQVksRUFBRSxFQUFFLENBQ25HLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUMvRCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5cbmltcG9ydCB7IGNyZWF0ZVNhZmVDbGllbnQsIHR5cGUgUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuL2h0dHAtY2xpZW50LmpzJztcbmltcG9ydCB7IGdldFNlcnZpY2VBdXRoSGVhZGVyIH0gZnJvbSAnLi4vbWlkZGxld2FyZS9zZXJ2aWNlLXRva2Vucy5qcyc7XG5pbXBvcnQgdHlwZSB7IFF1b3RhVHlwZSwgUXVvdGFDaGVja1Jlc3VsdCwgU2VydmljZUNvbmZpZyB9IGZyb20gJy4uL3R5cGVzL2NvbW1vbi5qcyc7XG5pbXBvcnQgeyBFcnJvckNvZGUgfSBmcm9tICcuLi90eXBlcy9lcnJvci1jb2Rlcy5qcyc7XG5pbXBvcnQgeyBERUZBVUxUX1RJRVIsIGlzVmFsaWRUaWVyLCB0eXBlIFF1b3RhVGllciB9IGZyb20gJy4uL3R5cGVzL3F1b3RhLXRpZXJzLmpzJztcbmltcG9ydCB7IGVudkJvb2wgfSBmcm9tICcuLi91dGlscy9lbnYuanMnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IGVtaXRDb3VudGVyIH0gZnJvbSAnLi4vdXRpbHMvbWV0cmljLWVtaXR0ZXIuanMnO1xuaW1wb3J0IHsgZXJyb3JNZXNzYWdlLCBzZW5kRXJyb3IsIHNlbmRRdW90YUV4Y2VlZGVkIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UuanMnO1xuaW1wb3J0IHsgc2VydmljZUVuZHBvaW50IH0gZnJvbSAnLi4vdXRpbHMvc2VydmljZS1yZWdpc3RyeS5qcyc7XG5cbi8qKlxuICogUmV0cnkgb3B0aW9ucyBmb3IgcXVvdGEgY2FsbHMg4oCUIGZhaWwgZmFzdCAoYSBzbG93IHF1b3RhIHNlcnZpY2UgbXVzdCBub3Qgc3RhbGwgdGhlIHJlcXVlc3QpLlxuICpcbiAqIE5FVkVSIHJldHJ5IGEgNDI5LiBUaGUgcXVvdGEgc2VydmljZSBhbnN3ZXJzIGFuIG92ZXItbGltaXQgb3JnIHdpdGggNDI5XG4gKiBRVU9UQV9FWENFRURFRCBhbmQgYFJldHJ5LUFmdGVyYCA9IHNlY29uZHMgdW50aWwgdGhlIHBlcmlvZCByZXNldHM7IHRoZSBIVFRQXG4gKiBjbGllbnQgaG9ub3JzIHRoYXQgKGNhcHBlZCBhdCA2MHMpLCBzbyBhIHNpbmdsZSByYXRlLWxpbWl0IHJldHJ5IHN0YWxsZWQgdGhlXG4gKiByZXF1ZXN0IHdlbGwgcGFzdCB0aGUgaGFuZGxlciB0aW1lb3V0LCB3aGljaCB0aGVuIGFuc3dlcmVkIDUwMyBhbmQgdGhlIHJlYWxcbiAqIDQyOSB3YXMgbG9zdC4gQSA0MjkgaXMgYSBmaW5hbCBhbnN3ZXIgaGVyZS5cbiAqL1xuY29uc3QgUVVPVEFfUkVRVUVTVF9PUFRJT05TOiBQaWNrPFJlcXVlc3RPcHRpb25zLCAnbWF4UmF0ZUxpbWl0UmV0cmllcycgfCAnbWF4UmV0cmllcyc+ID0ge1xuICBtYXhSYXRlTGltaXRSZXRyaWVzOiAwLFxuICBtYXhSZXRyaWVzOiAxLFxufTtcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdxdW90YScpO1xuXG4vLyBSRVNFUlZFIEZBSUwgTU9ERSDigJQgZXhwbGljaXQsIHNpbmdsZSBwb2xpY3kuXG4vL1xuLy8gYHJlc2VydmVgIGdhdGVzIEVYUEVOU0lWRSwgYmlsbGFibGUgcmVzb3VyY2VzIChwaXBlbGluZXMsIHBsdWdpbiBidWlsZHMsIEFJXG4vLyBjYWxscywgcGxhdGZvcm0gZmVhdHVyZSBzbG90cykuIEV2ZXJ5IHF1b3RhIHR5cGUgaXMgYSBwZXItcGVyaW9kIEZMT1cgY291bnRlclxuLy8gd2l0aCBubyBhZnRlci10aGUtZmFjdCByZWNvbmNpbGlhdGlvbjogYSB1bml0IGNvbnN1bWVkIHdoaWxlIHRoZSByZXNlcnZhdGlvblxuLy8gY291bGQgbm90IGJlIGNvbmZpcm1lZCBpcyBuZXZlciBjb3VudGVkLCBzbyBmYWlsLW9wZW4gbGV0cyBhbiBvcmcgY29uc3VtZVxuLy8gdW5ib3VuZGVkIHVubWV0ZXJlZCB1bml0cyBmb3IgdGhlIHdob2xlIGxlbmd0aCBvZiBhbiBpbmNpZGVudCDigJQgYW5kIGFuXG4vLyB1bmNvbmZpcm1lZCByZXNlcnZlICh0aW1lb3V0LCBvcGVuIGNpcmN1aXQpIG1heSBldmVuIGhhdmUgbGFuZGVkIHNlcnZlci1zaWRlLlxuLy8gU28gYHJlc2VydmVgIGZhaWxzIENMT1NFRCB3aGVuZXZlciB0aGUgcXVvdGEgc2VydmljZSBkaWQgbm90IENPTkZJUk0gdGhlIHNsb3Q6XG4vLyAgIC0gdW5yZWFjaGFibGUgLyB0aW1lZCBvdXQgLyBjaXJjdWl0IGJyZWFrZXIgb3BlbiAobm8gcmVzcG9uc2UpLFxuLy8gICAtIGEgcmVhY2hhYmxlLWJ1dC1lcnJvcmVkIHJlc3BvbnNlICg1eHgsIDR4eCwgbWFsZm9ybWVkIGJvZHkpLFxuLy8gICAtIGEgNDI5IHRoYXQgaXMgTk9UIGEgZ2VudWluZSBRVU9UQV9FWENFRURFRCAoZ2F0ZXdheSAvIHJhdGUgbGltaXRlcikuXG4vLyBPcGVyYXRvcnMgd2hvIHByZWZlciBhdmFpbGFiaWxpdHkgb3ZlciBlbmZvcmNlbWVudCBvcHQgdGhlIFdIT0xFIHNldCBpbnRvXG4vLyBmYWlsLW9wZW4gd2l0aCBRVU9UQV9SRVNFUlZFX0ZBSUxfT1BFTj10cnVlLiBCb3RoIG91dGNvbWVzIGVtaXQgYSBjb3VudGVyXG4vLyAoYHF1b3RhX2ZhaWxfY2xvc2VkX3RvdGFsYCAvIGBxdW90YV9mYWlsX29wZW5fdG90YWxgKSB0YWdnZWQgd2l0aCB0aGUgcmVhc29uLlxuLy8gYGNoZWNrYCAoYSBjaGVhcCByZWFkIGdhdGUpIHN0YXlzIGZhaWwtb3BlbjsgYGluY3JlbWVudGAgaXMgZmlyZS1hbmQtZm9yZ2V0LlxuY29uc3QgUVVPVEFfUkVTRVJWRV9GQUlMX09QRU4gPSBlbnZCb29sKCdRVU9UQV9SRVNFUlZFX0ZBSUxfT1BFTicsIGZhbHNlKTtcblxuLyoqXG4gKiBTZXJ2aWNlLXByaW5jaXBhbCBgQXV0aG9yaXphdGlvbmAgaGVhZGVyIGZvciBhIHF1b3RhIGNhbGwgbWFkZSBvbiBiZWhhbGYgb2ZcbiAqIGBvcmdJZGAgYnkgdGhlIENVUlJFTlQgc2VydmljZSAoYFNFUlZJQ0VfTkFNRWAsIHRoZSBzYW1lIGlkZW50aXR5IHRoZSBoZWFsdGhcbiAqIHJvdXRlciByZXBvcnRzKS5cbiAqXG4gKiBUaGUgcXVvdGEgc2VydmljZSdzIG11dGF0aW9uIGVuZHBvaW50cyAoYC86b3JnSWQvaW5jcmVtZW50YCwgYC9kZWNyZW1lbnRgKVxuICogcmVqZWN0IGFueXRoaW5nIGJ1dCBhIHNpZ25lZCBzZXJ2aWNlIHByaW5jaXBhbCBvciBhIHN5c3RlbSBhZG1pbiwgc29cbiAqIGZvcndhcmRpbmcgdGhlIGVuZCB1c2VyJ3MgYmVhcmVyIHRva2VuIHRoZXJlIGlzIGFsd2F5cyBhIDQwMy4gU2VydmljZSB0b2tlbnNcbiAqIGFyZSBhbHNvIGV4ZW1wdCBmcm9tIHRoZSBxdW90YSBzZXJ2aWNlJ3MgcGVyLUlQIHJhdGUgbGltaXRlciwgc28gaG90LXBhdGhcbiAqIHF1b3RhIHRyYWZmaWMgZnJvbSBhIGJ1c3kgcG9kIGNhbid0IGV4aGF1c3QgdGhhdCBwb2QgSVAncyBidWNrZXQgYW5kIHNpbGVudGx5XG4gKiB0dXJuIGVuZm9yY2VtZW50IG9mZi4gU2NvcGVkIHRvIHRoZSB0YXJnZXQgb3JnIHdpdGggdGhlIGxvd2VzdCByb2xlIChtZW1iZXIpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UXVvdGFTZXJ2aWNlQXV0aEhlYWRlcihvcmdJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGdldFNlcnZpY2VBdXRoSGVhZGVyKHsgc2VydmljZU5hbWU6IHByb2Nlc3MuZW52LlNFUlZJQ0VfTkFNRSB8fCAnYXBpJywgb3JnSWQsIHJvbGU6ICdtZW1iZXInIH0pO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBhIHN5bmNocm9ub3VzIHF1b3RhIHJlc2VydmF0aW9uICB0aGUgYXRvbWljIGNoZWNrK2luY3JlbWVudFxuICogdmFyaWFudC4gYGV4Y2VlZGVkOiB0cnVlYCBtZWFucyB0aGUgb3BlcmF0aW9uIHdhcyByZWplY3RlZCBhdCB0aGUgREJcbiAqIGxldmVsOyB0aGUgY2FsbGVyIHNob3VsZCByZXR1cm4gNDI5IHdpdGhvdXQgcnVubmluZyB0aGUgZ2F0ZWQgYWN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1b3RhUmVzZXJ2ZVJlc3VsdCB7XG4gIC8qKiBUcnVlIHdoZW4gdGhlIHNsb3Qgd2FzIE5PVCByZXNlcnZlZCDigJQgdGhlIGdhdGVkIGFjdGlvbiBtdXN0IG5vdCBydW4uICovXG4gIGV4Y2VlZGVkOiBib29sZWFuO1xuICAvKipcbiAgICogU2V0ICh0cnVlKSBieSB0aGUgcXVvdGEgQ0xJRU5UIHdoZW4gdGhlIHJlc2VydmF0aW9uIHdhcyBkZW5pZWQgYmVjYXVzZSB0aGVcbiAgICogcXVvdGEgc2VydmljZSBjb3VsZCBub3QgQ09ORklSTSBpdCAodW5yZWFjaGFibGUgLyB0aW1lb3V0IC8gY2lyY3VpdCBvcGVuIC9cbiAgICogZXJyb3JlZCkg4oCUIG5vdCBiZWNhdXNlIHRoZSBvcmcgaXMgb3ZlciBpdHMgbGltaXQuIEFsd2F5cyBwYWlyZWQgd2l0aFxuICAgKiBgZXhjZWVkZWQ6IHRydWVgLiBBbnN3ZXIgd2l0aCB7QGxpbmsgc2VuZFF1b3RhUmVzZXJ2ZURlbmllZH0sIHdoaWNoIG1hcHMgaXQgdG9cbiAgICogNTAzIGluc3RlYWQgb2YgYSBtaXNsZWFkaW5nIDQyOSBcInF1b3RhIGV4Y2VlZGVkXCIuXG4gICAqL1xuICB1bmF2YWlsYWJsZT86IGJvb2xlYW47XG4gIHF1b3RhOiB7XG4gICAgdHlwZTogUXVvdGFUeXBlO1xuICAgIGxpbWl0OiBudW1iZXI7XG4gICAgdXNlZDogbnVtYmVyO1xuICAgIHJlbWFpbmluZzogbnVtYmVyO1xuICAgIHJlc2V0QXQ/OiBzdHJpbmc7XG4gIH07XG59XG5cbi8qKlxuICogUXVvdGEgc2VydmljZSBjbGllbnQgaW50ZXJmYWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1b3RhU2VydmljZSB7XG4gIC8qKiBDaGVjayBpZiBxdW90YSBpcyBhdmFpbGFibGUgKGZhaWwtb3BlbiBvbiBlcnJvcikuICovXG4gIGNoZWNrKG9yZ0lkOiBzdHJpbmcsIHF1b3RhVHlwZTogUXVvdGFUeXBlLCBhdXRoSGVhZGVyOiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8UXVvdGFDaGVja1Jlc3VsdD47XG4gIC8qKiBJbmNyZW1lbnQgcXVvdGEgdXNhZ2UuIFJldHVybnMgYSBwcm9taXNlIHNvIGNhbGxlcnMgY2FuIG9wdGlvbmFsbHkgaGFuZGxlIGVycm9ycy4gKi9cbiAgaW5jcmVtZW50KG9yZ0lkOiBzdHJpbmcsIHF1b3RhVHlwZTogUXVvdGFUeXBlLCBhdXRoSGVhZGVyOiBzdHJpbmcsIGFtb3VudD86IG51bWJlciwgcmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIEF0b21pYyByZXNlcnZlICB0aGUgc2FtZSBhdG9taWMgY2hlY2sraW5jcmVtZW50IGFzIGBpbmNyZW1lbnRgLCBidXRcbiAgICogcGFyc2VzIHRoZSByZXNwb25zZSBzbyBjYWxsZXJzIGNhbiBzZWUgd2hldGhlciB0aGUgc2xvdCB3YXMgYWN0dWFsbHlcbiAgICogcmVzZXJ2ZWQuIFVzZSB0aGlzIGZvciBleHBlbnNpdmUgcmVzb3VyY2VzIHdoZXJlIHRoZSBwb3N0LWhvYyBmaXJlLVxuICAgKiBhbmQtZm9yZ2V0IHBhdHRlcm4gYWxsb3dzIGNvbmN1cnJlbnQgb3Zlci1zcGVuZC5cbiAgICpcbiAgICogRmFpbHMgQ0xPU0VEIChgZXhjZWVkZWQ6IHRydWVgKSB3aGVuZXZlciB0aGUgc2xvdCBpcyBub3QgY29uZmlybWVkIOKAlFxuICAgKiB1bnJlYWNoYWJsZSwgdGltZW91dCwgb3BlbiBjaXJjdWl0LCBub24tb2ssIG9yIGEgbm9uLXF1b3RhIDQyOSDigJQgdW5sZXNzXG4gICAqIGBRVU9UQV9SRVNFUlZFX0ZBSUxfT1BFTj10cnVlYCAoc2VlIHRoZSBwb2xpY3kgbm90ZSBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZSkuXG4gICAqL1xuICByZXNlcnZlKG9yZ0lkOiBzdHJpbmcsIHF1b3RhVHlwZTogUXVvdGFUeXBlLCBhdXRoSGVhZGVyOiBzdHJpbmcsIGFtb3VudD86IG51bWJlciwgcmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxRdW90YVJlc2VydmVSZXN1bHQ+O1xuICAvKipcbiAgICogUm9sbCBiYWNrIGEgcHJldmlvdXNseSByZXNlcnZlZCBzbG90LiBGaXJlLWFuZC1mb3JnZXQg4oCUIG5ldmVyIHRocm93cy5cbiAgICogUGFzcyBgcmVzZXRBdFNuYXBzaG90YCAodGhlIGBxdW90YS5yZXNldEF0YCBvYnNlcnZlZCB3aGVuIHRoZSBzbG90IHdhc1xuICAgKiByZXNlcnZlZCkgdG8gbWFrZSB0aGUgcm9sbGJhY2sgY29uZGl0aW9uYWw6IGlmIHRoZSBwZXJpb2Qgcm9sbGVkIG92ZXJcbiAgICogYmV0d2VlbiByZXNlcnZlIGFuZCByb2xsYmFjaywgdGhlIHNlcnZlciBza2lwcyB0aGUgZGVjcmVtZW50IHNvIGl0IGRvZXNuJ3RcbiAgICogc3RlYWwgY2FwYWNpdHkgZnJvbSB0aGUgbmV3IHBlcmlvZC5cbiAgICovXG4gIGRlY3JlbWVudChvcmdJZDogc3RyaW5nLCBxdW90YVR5cGU6IFF1b3RhVHlwZSwgYXV0aEhlYWRlcjogc3RyaW5nLCBhbW91bnQ/OiBudW1iZXIsIHJlc2V0QXRTbmFwc2hvdD86IHN0cmluZywgcmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIEdldCB0aGUgb3JnJ3MgcXVvdGEgYFF1b3RhVGllcmAuIFVzZWQgYnkgdGhlIHBsdWdpbi1idWlsZCBxdWV1ZSBwYXJ0aXRpb25pbmdcbiAgICogdG8gcm91dGUgYSBidWlsZCB0byB0aGUgcmlnaHQgcGVyLXRpZXIgcXVldWUuIEZhaWwtb3BlbiByZXR1cm5zIGBERUZBVUxUX1RJRVJgXG4gICAqIChgZGV2ZWxvcGVyYCB3aGVuIGJpbGxpbmcgaXMgZW5hYmxlZCwgYHVubGltaXRlZGAgd2hlbiBpdCdzIGRpc2FibGVkKTsgYVxuICAgKiBtaXNjbGFzc2lmaWVkIG9yZyBzdGlsbCBidWlsZHMgb24gdGhlIGRlZmF1bHQgcXVldWUsIGp1c3Qgd2l0aG91dCB0aGVcbiAgICogdGllci1zY29wZWQgc2NoZWR1bGluZyBib29zdC5cbiAgICovXG4gIGdldFRpZXIob3JnSWQ6IHN0cmluZywgYXV0aEhlYWRlcjogc3RyaW5nLCByZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPFF1b3RhVGllcj47XG4gIC8qKlxuICAgKiBGQUlMLUNMT1NFRCB0d2luIG9mIHtAbGluayBnZXRUaWVyfTogdGhlIG9yZydzIHRpZXIgYXMgdGhlIHF1b3RhIHNlcnZpY2VcbiAgICogQ09ORklSTUVEIGl0LCBvciBgbnVsbGAgd2hlbiBpdCBjb3VsZCBub3QgYmUgY29uZmlybWVkICh1bnJlYWNoYWJsZSwgbm9uLW9rLFxuICAgKiBtaXNzaW5nIG9yIHVucmVjb2duaXplZCB0aWVyKS4gRm9yIGRlY2lzaW9ucyB0aGF0IG11c3QgbmV2ZXIgYmUgdGFrZW4gb24gYVxuICAgKiBndWVzcyDigJQgYW55dGhpbmcgdGhhdCByZXZva2VzLCBkb3duZ3JhZGVzIG9yIGRlbGV0ZXMgb24gdGhlIHN0cmVuZ3RoIG9mIGFcbiAgICogdGllciAoZS5nLiBhIHZlcmlmaWVkLXB1Ymxpc2hlciBncmFjZSBzd2VlcCkgbXVzdCBza2lwIHRoZSBvcmcgb24gYG51bGxgLFxuICAgKiBuZXZlciBhY3Qgb24gYERFRkFVTFRfVElFUmAuXG4gICAqL1xuICBnZXRUaWVyU3RyaWN0KG9yZ0lkOiBzdHJpbmcsIGF1dGhIZWFkZXI6IHN0cmluZywgcmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxRdW90YVRpZXIgfCBudWxsPjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBxdW90YSBzZXJ2aWNlIGNsaWVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdW90YVNlcnZpY2VDb25maWcge1xuICAvKiogUXVvdGEgc2VydmljZSBob3N0IChkZWZhdWx0OiBlbnYgUVVPVEFfU0VSVklDRV9IT1NUIG9yICdxdW90YScpICovXG4gIGhvc3Q/OiBzdHJpbmc7XG4gIC8qKiBRdW90YSBzZXJ2aWNlIHBvcnQgKGRlZmF1bHQ6IGVudiBRVU9UQV9TRVJWSUNFX1BPUlQgb3IgMzAwMCkgKi9cbiAgcG9ydD86IG51bWJlcjtcbiAgLyoqIFJlcXVlc3QgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IDUwMDApICovXG4gIHRpbWVvdXQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQXBwbHkgdGhlIGV4cGxpY2l0IHJlc2VydmUgZmFpbC1tb2RlIHBvbGljeSB0byBhIHJlc2VydmF0aW9uIHRoZSBxdW90YSBzZXJ2aWNlXG4gKiBkaWQgTk9UIGNvbmZpcm0gKHNlZSBRVU9UQV9SRVNFUlZFX0ZBSUxfT1BFTiBhYm92ZSkuIERlZmF1bHQ6IGRlbnkuXG4gKi9cbmZ1bmN0aW9uIHVuY29uZmlybWVkUmVzZXJ2ZShcbiAgb3JnSWQ6IHN0cmluZyxcbiAgcXVvdGFUeXBlOiBRdW90YVR5cGUsXG4gIHJlYXNvbjogJ3VucmVhY2hhYmxlJyB8ICd0cmFuc2llbnQtNDI5JyB8ICdub24tb2snLFxuICBzdGF0dXNDb2RlPzogbnVtYmVyLFxuKTogUXVvdGFSZXNlcnZlUmVzdWx0IHtcbiAgaWYgKFFVT1RBX1JFU0VSVkVfRkFJTF9PUEVOKSB7XG4gICAgbG9nZ2VyLndhcm4oJ1FVT1RBX0ZBSUxfT1BFTjogcXVvdGEgcmVzZXJ2ZSBub3QgY29uZmlybWVkLCBhbGxvd2luZyByZXF1ZXN0JywgeyBvcmdJZCwgcXVvdGFUeXBlLCByZWFzb24sIHN0YXR1c0NvZGUgfSk7XG4gICAgZW1pdENvdW50ZXIoJ3F1b3RhX2ZhaWxfb3Blbl90b3RhbCcsIHsgb3BlcmF0aW9uOiAncmVzZXJ2ZScsIHJlYXNvbiwgcXVvdGFUeXBlIH0pO1xuICAgIHJldHVybiB7IGV4Y2VlZGVkOiBmYWxzZSwgcXVvdGE6IHsgdHlwZTogcXVvdGFUeXBlLCBsaW1pdDogLTEsIHVzZWQ6IDAsIHJlbWFpbmluZzogLTEgfSB9O1xuICB9XG4gIGxvZ2dlci53YXJuKCdRVU9UQV9GQUlMX0NMT1NFRDogcXVvdGEgcmVzZXJ2ZSBub3QgY29uZmlybWVkLCBkZW55aW5nIHJlcXVlc3QnLCB7IG9yZ0lkLCBxdW90YVR5cGUsIHJlYXNvbiwgc3RhdHVzQ29kZSB9KTtcbiAgZW1pdENvdW50ZXIoJ3F1b3RhX2ZhaWxfY2xvc2VkX3RvdGFsJywgeyBvcGVyYXRpb246ICdyZXNlcnZlJywgcmVhc29uLCBxdW90YVR5cGUgfSk7XG4gIHJldHVybiB7IGV4Y2VlZGVkOiB0cnVlLCB1bmF2YWlsYWJsZTogdHJ1ZSwgcXVvdGE6IHsgdHlwZTogcXVvdGFUeXBlLCBsaW1pdDogMCwgdXNlZDogMCwgcmVtYWluaW5nOiAwIH0gfTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBmYWlsLW9wZW4gcXVvdGEgcmVzdWx0IChhbGxvd3MgdGhlIHJlcXVlc3QpLlxuICovXG5mdW5jdGlvbiBjcmVhdGVGYWlsT3BlblJlc3VsdCgpOiBRdW90YUNoZWNrUmVzdWx0IHtcbiAgcmV0dXJuIHtcbiAgICBhbGxvd2VkOiB0cnVlLFxuICAgIGxpbWl0OiAtMSxcbiAgICB1c2VkOiAwLFxuICAgIHJlbWFpbmluZzogLTEsXG4gICAgcmVzZXRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHVubGltaXRlZDogdHJ1ZSxcbiAgICAvLyBUYWcgdGhlIHNlbnRpbmVsIHNvIGZhaWwtY2xvc2VkIGNhbGxlcnMgY2FuIHRlbGwgYW4gb3V0YWdlIGFwYXJ0IGZyb20gYVxuICAgIC8vIHJlYWwgdW5saW1pdGVkICgtMSkgcmVhZGluZy4gUmVhbCBxdW90YSByZXN1bHRzIG5ldmVyIHNldCB0aGlzLlxuICAgIGZhaWxPcGVuOiB0cnVlLFxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIGNvbW1vbiByZXF1ZXN0IGhlYWRlcnMgd2l0aCBvcHRpb25hbCByZXF1ZXN0IElEIGZvciBkaXN0cmlidXRlZCB0cmFjaW5nLlxuICovXG5mdW5jdGlvbiBidWlsZEhlYWRlcnMob3JnSWQ6IHN0cmluZywgYXV0aEhlYWRlcj86IHN0cmluZywgcmVxdWVzdElkPzogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7ICd4LW9yZy1pZCc6IG9yZ0lkIH07XG4gIGlmIChhdXRoSGVhZGVyKSBoZWFkZXJzLkF1dGhvcml6YXRpb24gPSBhdXRoSGVhZGVyO1xuICBpZiAocmVxdWVzdElkKSBoZWFkZXJzWydYLVJlcXVlc3QtSWQnXSA9IHJlcXVlc3RJZDtcbiAgcmV0dXJuIGhlYWRlcnM7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgcXVvdGEgc2VydmljZSBjbGllbnQuXG4gKlxuICogQHBhcmFtIGNvbmZpZyAtIE9wdGlvbmFsIHNlcnZpY2UgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgUXVvdGEgc2VydmljZSBjbGllbnRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcXVvdGFTZXJ2aWNlID0gY3JlYXRlUXVvdGFTZXJ2aWNlKCk7XG4gKlxuICogLy8gQ2hlY2sgcXVvdGEgYmVmb3JlIHByb2Nlc3NpbmdcbiAqIGNvbnN0IHF1b3RhID0gYXdhaXQgcXVvdGFTZXJ2aWNlLmNoZWNrKG9yZ0lkLCAnYXBpQ2FsbHMnLCBhdXRoSGVhZGVyKTtcbiAqIGlmICghcXVvdGEuYWxsb3dlZCkge1xuICogcmV0dXJuIHJlcy5zdGF0dXMoNDI5KS5qc29uKHsgZXJyb3I6ICdRdW90YSBleGNlZWRlZCcgfSk7XG4gKiB9XG4gKlxuICogLy8gSW5jcmVtZW50IHF1b3RhIGFmdGVyIHN1Y2Nlc3NcbiAqIHF1b3RhU2VydmljZS5pbmNyZW1lbnQob3JnSWQsICdhcGlDYWxscycsIGF1dGhIZWFkZXIpLmNhdGNoKGVyciA9PiBsb2dnZXIud2FybignUXVvdGEgaW5jcmVtZW50IGZhaWxlZCcsIHsgZXJyb3I6IGVyciB9KSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVF1b3RhU2VydmljZShjb25maWc6IFF1b3RhU2VydmljZUNvbmZpZyA9IHt9KTogUXVvdGFTZXJ2aWNlIHtcbiAgY29uc3Qgc2VydmljZUNvbmZpZzogU2VydmljZUNvbmZpZyA9IHtcbiAgICBob3N0OiBjb25maWcuaG9zdCA/PyBzZXJ2aWNlRW5kcG9pbnQoJ3F1b3RhJykuaG9zdCxcbiAgICBwb3J0OiBjb25maWcucG9ydCA/PyBzZXJ2aWNlRW5kcG9pbnQoJ3F1b3RhJykucG9ydCxcbiAgICB0aW1lb3V0OiBjb25maWcudGltZW91dCA/PyA1MDAwLFxuICB9O1xuXG4gIGNvbnN0IGNsaWVudCA9IGNyZWF0ZVNhZmVDbGllbnQoc2VydmljZUNvbmZpZyk7XG5cbiAgLyoqIE9uZSB0aWVyIHJlYWQ6IHRoZSBjb25maXJtZWQgdGllciwgb3Igd2h5IHRoZXJlIGlzbid0IG9uZS4gKi9cbiAgYXN5bmMgZnVuY3Rpb24gcmVhZFRpZXIoXG4gICAgb3JnSWQ6IHN0cmluZywgYXV0aEhlYWRlcjogc3RyaW5nLCByZXF1ZXN0SWQ/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8eyB0aWVyOiBRdW90YVRpZXI7IHJlYXNvbj86IHVuZGVmaW5lZDsgc3RhdHVzQ29kZT86IG51bWJlciB9IHwgeyB0aWVyOiBudWxsOyByZWFzb246ICd1bnJlYWNoYWJsZScgfCAnbm9uLW9rJyB8ICdpbnZhbGlkLXRpZXInOyBzdGF0dXNDb2RlPzogbnVtYmVyIH0+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8e1xuICAgICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICAgIGRhdGE/OiB7IHF1b3RhPzogeyB0aWVyPzogc3RyaW5nIH0gfTtcbiAgICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgfT4oYC9xdW90YXMvJHtlbmNvZGVVUklDb21wb25lbnQob3JnSWQpfWAsIHsgaGVhZGVyczogYnVpbGRIZWFkZXJzKG9yZ0lkLCBhdXRoSGVhZGVyLCByZXF1ZXN0SWQpLCAuLi5RVU9UQV9SRVFVRVNUX09QVElPTlMgfSk7XG4gICAgaWYgKCFyZXNwb25zZSkgcmV0dXJuIHsgdGllcjogbnVsbCwgcmVhc29uOiAndW5yZWFjaGFibGUnIH07XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCB8fCAhcmVzcG9uc2UuYm9keT8uc3VjY2VzcykgcmV0dXJuIHsgdGllcjogbnVsbCwgcmVhc29uOiAnbm9uLW9rJywgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzQ29kZSB9O1xuICAgIGNvbnN0IHRpZXIgPSByZXNwb25zZS5ib2R5LmRhdGE/LnF1b3RhPy50aWVyO1xuICAgIGlmICghdGllciB8fCAhaXNWYWxpZFRpZXIodGllcikpIHJldHVybiB7IHRpZXI6IG51bGwsIHJlYXNvbjogJ2ludmFsaWQtdGllcicsIHN0YXR1c0NvZGU6IHJlc3BvbnNlLnN0YXR1c0NvZGUgfTtcbiAgICByZXR1cm4geyB0aWVyLCBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXNDb2RlIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFzeW5jIGNoZWNrKG9yZ0lkOiBzdHJpbmcsIHF1b3RhVHlwZTogUXVvdGFUeXBlLCBhdXRoSGVhZGVyOiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8UXVvdGFDaGVja1Jlc3VsdD4ge1xuICAgICAgY29uc3QgcGF0aCA9IGAvcXVvdGFzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9yZ0lkKX0vJHtlbmNvZGVVUklDb21wb25lbnQocXVvdGFUeXBlKX1gO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8e1xuICAgICAgICBzdWNjZXNzOiBib29sZWFuO1xuICAgICAgICBkYXRhPzogeyBxdW90YVR5cGU6IHN0cmluZzsgc3RhdHVzOiBRdW90YUNoZWNrUmVzdWx0IH07XG4gICAgICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgICB9PihwYXRoLCB7IGhlYWRlcnM6IGJ1aWxkSGVhZGVycyhvcmdJZCwgYXV0aEhlYWRlciwgcmVxdWVzdElkKSwgLi4uUVVPVEFfUkVRVUVTVF9PUFRJT05TIH0pO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdRVU9UQV9GQUlMX09QRU46IFF1b3RhIHNlcnZpY2UgdW5yZWFjaGFibGUsIGFsbG93aW5nIHJlcXVlc3QnLCB7IG9yZ0lkLCBxdW90YVR5cGUgfSk7XG4gICAgICAgIGVtaXRDb3VudGVyKCdxdW90YV9mYWlsX29wZW5fdG90YWwnLCB7IG9wZXJhdGlvbjogJ2NoZWNrJywgcmVhc29uOiAndW5yZWFjaGFibGUnLCBxdW90YVR5cGUgfSk7XG4gICAgICAgIHJldHVybiBjcmVhdGVGYWlsT3BlblJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMjAwIHx8ICFyZXNwb25zZS5ib2R5LnN1Y2Nlc3MgfHwgIXJlc3BvbnNlLmJvZHkuZGF0YT8uc3RhdHVzKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdRVU9UQV9GQUlMX09QRU46IFF1b3RhIGNoZWNrIHJldHVybmVkIG5vbi1vaywgYWxsb3dpbmcgcmVxdWVzdCcsIHtcbiAgICAgICAgICBvcmdJZCwgcXVvdGFUeXBlLCBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXNDb2RlLCBtZXNzYWdlOiByZXNwb25zZS5ib2R5Lm1lc3NhZ2UsXG4gICAgICAgIH0pO1xuICAgICAgICBlbWl0Q291bnRlcigncXVvdGFfZmFpbF9vcGVuX3RvdGFsJywgeyBvcGVyYXRpb246ICdjaGVjaycsIHJlYXNvbjogJ25vbi1vaycsIHF1b3RhVHlwZSB9KTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZhaWxPcGVuUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNwb25zZS5ib2R5LmRhdGEuc3RhdHVzO1xuICAgIH0sXG5cbiAgICBhc3luYyBpbmNyZW1lbnQob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgYW1vdW50OiBudW1iZXIgPSAxLCByZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGNvbnN0IHBhdGggPSBgL3F1b3Rhcy8ke2VuY29kZVVSSUNvbXBvbmVudChvcmdJZCl9L2luY3JlbWVudGA7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50XG4gICAgICAgIC5wb3N0KHBhdGgsIHsgcXVvdGFUeXBlLCBhbW91bnQgfSwgeyBoZWFkZXJzOiBidWlsZEhlYWRlcnMob3JnSWQsIGF1dGhIZWFkZXIsIHJlcXVlc3RJZCksIC4uLlFVT1RBX1JFUVVFU1RfT1BUSU9OUyB9KTtcblxuICAgICAgaWYgKCFyZXNwb25zZSB8fCByZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byBpbmNyZW1lbnQgcXVvdGEnLCB7XG4gICAgICAgICAgb3JnSWQsIHF1b3RhVHlwZSwgYW1vdW50LCBzdGF0dXNDb2RlOiByZXNwb25zZT8uc3RhdHVzQ29kZSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ1F1b3RhIGluY3JlbWVudGVkJywgeyBvcmdJZCwgcXVvdGFUeXBlLCBhbW91bnQgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHJlc2VydmUob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgYW1vdW50OiBudW1iZXIgPSAxLCByZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPFF1b3RhUmVzZXJ2ZVJlc3VsdD4ge1xuICAgICAgY29uc3QgcGF0aCA9IGAvcXVvdGFzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9yZ0lkKX0vaW5jcmVtZW50YDtcblxuICAgICAgLy8gMjAwIGNhcnJpZXMgYGRhdGEucXVvdGFgOyA0MjkgKFFVT1RBX0VYQ0VFREVEKSBjYXJyaWVzIGBkZXRhaWxzLnF1b3RhYC5cbiAgICAgIC8vIEJvdGggc2hhcGVzIGFyZSBub3JtYWxpemVkIGludG8gUXVvdGFSZXNlcnZlUmVzdWx0LlxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdDx7XG4gICAgICAgIHN1Y2Nlc3M6IGJvb2xlYW47XG4gICAgICAgIGRhdGE/OiB7IHF1b3RhPzogUXVvdGFSZXNlcnZlUmVzdWx0WydxdW90YSddIH07XG4gICAgICAgIGRldGFpbHM/OiB7IHF1b3RhPzogUXVvdGFSZXNlcnZlUmVzdWx0WydxdW90YSddIH07XG4gICAgICAgIC8qKiBgc2VuZEVycm9yYCdzIGVycm9yLWNvZGUgZmllbGQuICovXG4gICAgICAgIGNvZGU/OiBzdHJpbmc7XG4gICAgICB9PihwYXRoLCB7IHF1b3RhVHlwZSwgYW1vdW50IH0sIHsgaGVhZGVyczogYnVpbGRIZWFkZXJzKG9yZ0lkLCBhdXRoSGVhZGVyLCByZXF1ZXN0SWQpLCAuLi5RVU9UQV9SRVFVRVNUX09QVElPTlMgfSk7XG5cbiAgICAgIGlmICghcmVzcG9uc2UpIHJldHVybiB1bmNvbmZpcm1lZFJlc2VydmUob3JnSWQsIHF1b3RhVHlwZSwgJ3VucmVhY2hhYmxlJyk7XG5cbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlID09PSA0MjkpIHtcbiAgICAgICAgY29uc3QgcSA9IHJlc3BvbnNlLmJvZHkuZGV0YWlscz8ucXVvdGE7XG4gICAgICAgIC8vIE9ubHkgYSBHRU5VSU5FIHF1b3RhLWV4Y2VlZGVkIDQyOSBtZWFucyBcIm92ZXIgcXVvdGFcIi4gQSBnZW5lcmljIDQyOSDigJRcbiAgICAgICAgLy8gYW4gaW50ZXJ2ZW5pbmcgZ2F0ZXdheSBvciByYXRlIGxpbWl0ZXIg4oCUIGRpZCBub3QgY29uZmlybSBhbnl0aGluZywgc29cbiAgICAgICAgLy8gaXQgZ29lcyB0aHJvdWdoIHRoZSBzYW1lIHVuY29uZmlybWVkLXJlc2VydmF0aW9uIHBvbGljeSBhcyBhbiBvdXRhZ2UuXG4gICAgICAgIGlmIChyZXNwb25zZS5ib2R5LmNvZGUgPT09IEVycm9yQ29kZS5RVU9UQV9FWENFRURFRCB8fCBxKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV4Y2VlZGVkOiB0cnVlLFxuICAgICAgICAgICAgcXVvdGE6IHEgPz8geyB0eXBlOiBxdW90YVR5cGUsIGxpbWl0OiAwLCB1c2VkOiAwLCByZW1haW5pbmc6IDAgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmNvbmZpcm1lZFJlc2VydmUob3JnSWQsIHF1b3RhVHlwZSwgJ3RyYW5zaWVudC00MjknLCByZXNwb25zZS5zdGF0dXNDb2RlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCB8fCAhcmVzcG9uc2UuYm9keS5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiB1bmNvbmZpcm1lZFJlc2VydmUob3JnSWQsIHF1b3RhVHlwZSwgJ25vbi1vaycsIHJlc3BvbnNlLnN0YXR1c0NvZGUpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBxID0gcmVzcG9uc2UuYm9keS5kYXRhPy5xdW90YTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4Y2VlZGVkOiBmYWxzZSxcbiAgICAgICAgcXVvdGE6IHEgPz8geyB0eXBlOiBxdW90YVR5cGUsIGxpbWl0OiAtMSwgdXNlZDogMCwgcmVtYWluaW5nOiAtMSB9LFxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVjcmVtZW50KG9yZ0lkOiBzdHJpbmcsIHF1b3RhVHlwZTogUXVvdGFUeXBlLCBhdXRoSGVhZGVyOiBzdHJpbmcsIGFtb3VudDogbnVtYmVyID0gMSwgcmVzZXRBdFNuYXBzaG90Pzogc3RyaW5nLCByZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGNvbnN0IHBhdGggPSBgL3F1b3Rhcy8ke2VuY29kZVVSSUNvbXBvbmVudChvcmdJZCl9L2RlY3JlbWVudGA7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudFxuICAgICAgICAucG9zdChwYXRoLCB7IHF1b3RhVHlwZSwgYW1vdW50LCAuLi4ocmVzZXRBdFNuYXBzaG90ICYmIHsgcmVzZXRBdFNuYXBzaG90IH0pIH0sIHsgaGVhZGVyczogYnVpbGRIZWFkZXJzKG9yZ0lkLCBhdXRoSGVhZGVyLCByZXF1ZXN0SWQpLCAuLi5RVU9UQV9SRVFVRVNUX09QVElPTlMgfSk7XG5cbiAgICAgIGlmICghcmVzcG9uc2UgfHwgcmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICAgIC8vIFJvbGxiYWNrIGZhaWx1cmUgaXMgbG9nZ2VkIGJ1dCBuZXZlciBwcm9wYWdhdGVkICB0aGUgYWN0aW9uJ3Mgb3duXG4gICAgICAgIC8vIGZhaWx1cmUgaGFzIGFscmVhZHkgYmVlbiBzdXJmYWNlZCB0byB0aGUgY2FsbGVyOyBhIHN0dWNrIGNvdW50ZXJcbiAgICAgICAgLy8gcmVzb2x2ZXMgb24gdGhlIG5leHQgcGVyaW9kIHJlc2V0LlxuICAgICAgICBsb2dnZXIud2FybignRmFpbGVkIHRvIGRlY3JlbWVudCBxdW90YSAoc2xvdCB3aWxsIHJlc2V0IG9uIG5leHQgcGVyaW9kKScsIHtcbiAgICAgICAgICBvcmdJZCwgcXVvdGFUeXBlLCBhbW91bnQsIHN0YXR1c0NvZGU6IHJlc3BvbnNlPy5zdGF0dXNDb2RlLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnUXVvdGEgZGVjcmVtZW50ZWQnLCB7IG9yZ0lkLCBxdW90YVR5cGUsIGFtb3VudCB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VGllcihvcmdJZDogc3RyaW5nLCBhdXRoSGVhZGVyOiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8UXVvdGFUaWVyPiB7XG4gICAgICBjb25zdCByZWFkID0gYXdhaXQgcmVhZFRpZXIob3JnSWQsIGF1dGhIZWFkZXIsIHJlcXVlc3RJZCk7XG4gICAgICBpZiAocmVhZC50aWVyKSByZXR1cm4gcmVhZC50aWVyO1xuICAgICAgbG9nZ2VyLndhcm4oYFFVT1RBX0ZBSUxfT1BFTjogdGllciBsb29rdXAgZmFpbGVkLCBkZWZhdWx0aW5nIHRvICR7REVGQVVMVF9USUVSfSB0aWVyYCwge1xuICAgICAgICBvcmdJZCwgc3RhdHVzQ29kZTogcmVhZC5zdGF0dXNDb2RlLCByZWFzb246IHJlYWQucmVhc29uLCBkZWZhdWx0VGllcjogREVGQVVMVF9USUVSLFxuICAgICAgfSk7XG4gICAgICBlbWl0Q291bnRlcigncXVvdGFfZmFpbF9vcGVuX3RvdGFsJywgeyBvcGVyYXRpb246ICd0aWVyJywgcmVhc29uOiByZWFkLnJlYXNvbiwgcXVvdGFUeXBlOiAndGllcicgfSk7XG4gICAgICByZXR1cm4gREVGQVVMVF9USUVSO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaWVyU3RyaWN0KG9yZ0lkOiBzdHJpbmcsIGF1dGhIZWFkZXI6IHN0cmluZywgcmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxRdW90YVRpZXIgfCBudWxsPiB7XG4gICAgICBjb25zdCByZWFkID0gYXdhaXQgcmVhZFRpZXIob3JnSWQsIGF1dGhIZWFkZXIsIHJlcXVlc3RJZCk7XG4gICAgICBpZiAocmVhZC50aWVyKSByZXR1cm4gcmVhZC50aWVyO1xuICAgICAgbG9nZ2VyLndhcm4oJ1FVT1RBX0ZBSUxfQ0xPU0VEOiB0aWVyIGNvdWxkIG5vdCBiZSBjb25maXJtZWQnLCB7IG9yZ0lkLCBzdGF0dXNDb2RlOiByZWFkLnN0YXR1c0NvZGUsIHJlYXNvbjogcmVhZC5yZWFzb24gfSk7XG4gICAgICBlbWl0Q291bnRlcigncXVvdGFfZmFpbF9jbG9zZWRfdG90YWwnLCB7IG9wZXJhdGlvbjogJ3RpZXInLCByZWFzb246IHJlYWQucmVhc29uLCBxdW90YVR5cGU6ICd0aWVyJyB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogRmlyZS1hbmQtZm9yZ2V0IHF1b3RhIE1FVEVSSU5HIGluY3JlbWVudCB3aXRoIHN0YW5kYXJkaXplZCBlcnJvciBsb2dnaW5nLlxuICpcbiAqIEF1dGhlbnRpY2F0ZXMgYXMgdGhlIGNhbGxpbmcgU0VSVklDRSAoe0BsaW5rIGdldFF1b3RhU2VydmljZUF1dGhIZWFkZXJ9KSwgbmV2ZXJcbiAqIHdpdGggdGhlIGVuZCB1c2VyJ3MgdG9rZW46IGAvcXVvdGFzLzpvcmdJZC9pbmNyZW1lbnRgIGlzIHNlcnZpY2UtcHJpbmNpcGFsIC9cbiAqIHN5c3RlbS1hZG1pbiBvbmx5LCBzbyBhIGZvcndhcmRlZCB1c2VyIEpXVCB3YXMgYWx3YXlzIHJlamVjdGVkICg0MDMpIGFuZCB0aGVcbiAqIG1ldGVyZWQgcXVvdGEgKGUuZy4gYGFwaUNhbGxzYCwgYW5kIHRoZSBgYXBpX3BhY2tgIGJ1bmRsZSByYWlzaW5nIGl0KSBuZXZlclxuICogbW92ZWQuXG4gKlxuICogQHBhcmFtIHF1b3RhU2VydmljZSAtIFF1b3RhIHNlcnZpY2UgY2xpZW50XG4gKiBAcGFyYW0gb3JnSWQgLSBPcmdhbml6YXRpb24gSUQgd2hvc2UgY291bnRlciBpcyBpbmNyZW1lbnRlZFxuICogQHBhcmFtIHF1b3RhVHlwZSAtIFF1b3RhIHR5cGUgdG8gaW5jcmVtZW50XG4gKiBAcGFyYW0gbG9nV2FybiAtIExvZ2dpbmcgZnVuY3Rpb24gZm9yIHdhcm5pbmdzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmNyZW1lbnRRdW90YSggcXVvdGFTZXJ2aWNlOiBRdW90YVNlcnZpY2UsXG4gIG9yZ0lkOiBzdHJpbmcsXG4gIHF1b3RhVHlwZTogUXVvdGFUeXBlLFxuICBsb2dXYXJuOiAobWVzc2FnZTogc3RyaW5nLCBkYXRhPzogdW5rbm93bikgPT4gdm9pZCxcbik6IHZvaWQge1xuICBxdW90YVNlcnZpY2UuaW5jcmVtZW50KG9yZ0lkLCBxdW90YVR5cGUsIGdldFF1b3RhU2VydmljZUF1dGhIZWFkZXIob3JnSWQpKS5jYXRjaCgoZXJyOiB1bmtub3duKSA9PlxuICAgIGxvZ1dhcm4oJ1F1b3RhIGluY3JlbWVudCBmYWlsZWQnLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSB9KSxcbiAgKTtcbn1cblxuLyoqXG4gKiBBdG9taWMgcmVzZXJ2ZSBoZWxwZXIgZm9yIHRoZSBcInJlc2VydmUgKyBjb21taXQgLyByb2xsYmFja1wiIHBhdHRlcm4uXG4gKiBVc2UgZm9yIGV4cGVuc2l2ZSByZXNvdXJjZXMgKHBpcGVsaW5lcywgcGx1Z2lucywgQUkgY2FsbHMpIHdoZXJlIHRoZVxuICogZmlyZS1hbmQtZm9yZ2V0IHBvc3QtaG9jIGBpbmNyZW1lbnRRdW90YWAgYWxsb3dzIGNvbmN1cnJlbnQgb3Zlci1zcGVuZC5cbiAqXG4gKiBSZXR1cm5zIHRoZSBzdHJ1Y3R1cmVkIHJlc3VsdCBzbyB0aGUgY2FsbGVyIGNhbiBkZWNpZGUgd2hldGhlciB0byBydW5cbiAqIHRoZSBnYXRlZCBhY3Rpb24gb3IgNDI5IHRoZSBjbGllbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJlc2VydmF0aW9uID0gYXdhaXQgcmVzZXJ2ZVF1b3RhKHF1b3RhU2VydmljZSwgb3JnSWQsICdwaXBlbGluZXMnLCBhdXRoSGVhZGVyKTtcbiAqIGlmIChyZXNlcnZhdGlvbi5leGNlZWRlZCkgcmV0dXJuIHNlbmRRdW90YVJlc2VydmVEZW5pZWQocmVzLCAncGlwZWxpbmVzJywgcmVzZXJ2YXRpb24pO1xuICogdHJ5IHtcbiAqIGF3YWl0IGRvRXhwZW5zaXZlVGhpbmcoKTtcbiAqIH0gY2F0Y2ggKGVycikge1xuICogLy8gUGFzcyB0aGUgcmVzZXJ2ZWQgcmVzZXRBdCBzbyBhIHBlcmlvZCByb2xsb3ZlciBkb2Vzbid0IGdldCBkb3VibGUtY2hhcmdlZC5cbiAqIGRlY3JlbWVudFF1b3RhKHF1b3RhU2VydmljZSwgb3JnSWQsICdwaXBlbGluZXMnLCBhdXRoSGVhZGVyLCBsb2dXYXJuLCAxLCByZXNlcnZhdGlvbi5xdW90YS5yZXNldEF0KTtcbiAqIHRocm93IGVycjtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXJ2ZVF1b3RhKCBxdW90YVNlcnZpY2U6IFF1b3RhU2VydmljZSxcbiAgb3JnSWQ6IHN0cmluZyxcbiAgcXVvdGFUeXBlOiBRdW90YVR5cGUsXG4gIGF1dGhIZWFkZXI6IHN0cmluZyxcbiAgYW1vdW50OiBudW1iZXIgPSAxLFxuICByZXF1ZXN0SWQ/OiBzdHJpbmcsXG4pOiBQcm9taXNlPFF1b3RhUmVzZXJ2ZVJlc3VsdD4ge1xuICByZXR1cm4gcXVvdGFTZXJ2aWNlLnJlc2VydmUob3JnSWQsIHF1b3RhVHlwZSwgYXV0aEhlYWRlciwgYW1vdW50LCByZXF1ZXN0SWQpO1xufVxuXG4vKiogU2Vjb25kcyBhIGNsaWVudCBzaG91bGQgd2FpdCBiZWZvcmUgcmV0cnlpbmcgd2hlbiBxdW90YSBjb3VsZG4ndCBiZSBjb25maXJtZWQuICovXG5jb25zdCBRVU9UQV9VTkFWQUlMQUJMRV9SRVRSWV9BRlRFUl9TRUNPTkRTID0gNTtcblxuLyoqXG4gKiBBbnN3ZXIgYSBERU5JRUQgcmVzZXJ2YXRpb24gKGByZXNlcnZhdGlvbi5leGNlZWRlZCA9PT0gdHJ1ZWApLlxuICpcbiAqIC0gYHVuYXZhaWxhYmxlYCAodGhlIHF1b3RhIHNlcnZpY2UgY291bGRuJ3QgY29uZmlybSB0aGUgc2xvdCkg4oaSICoqNTAzKipcbiAqICAgYFNFUlZJQ0VfVU5BVkFJTEFCTEVgIHdpdGggYSBzaG9ydCBgUmV0cnktQWZ0ZXJgOiB0aGUgb3JnIGlzIG5vdCBvdmVyIGl0c1xuICogICBsaW1pdCwgc28gYSA0MjkgXCJxdW90YSBleGNlZWRlZFwiIHdvdWxkIHNlbmQgdXNlcnMgdG8gdXBncmFkZSBmb3IgYW4gb3V0YWdlLlxuICogLSBvdGhlcndpc2Ug4oaSIHRoZSBzdGFuZGFyZCA0MjkgYFFVT1RBX0VYQ0VFREVEYCB3aXRoIHRoZSBYLVF1b3RhLSogaGVhZGVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbmRRdW90YVJlc2VydmVEZW5pZWQocmVzOiBSZXNwb25zZSwgcXVvdGFUeXBlOiBRdW90YVR5cGUsIHJlc2VydmF0aW9uOiBRdW90YVJlc2VydmVSZXN1bHQpOiB2b2lkIHtcbiAgaWYgKHJlc2VydmF0aW9uLnVuYXZhaWxhYmxlKSB7XG4gICAgaWYgKCFyZXMuaGVhZGVyc1NlbnQpIHJlcy5zZXRIZWFkZXIoJ1JldHJ5LUFmdGVyJywgUVVPVEFfVU5BVkFJTEFCTEVfUkVUUllfQUZURVJfU0VDT05EUyk7XG4gICAgc2VuZEVycm9yKFxuICAgICAgcmVzLFxuICAgICAgNTAzLFxuICAgICAgYFVuYWJsZSB0byBjb25maXJtICR7cXVvdGFUeXBlfSBxdW90YSByaWdodCBub3cuIFBsZWFzZSB0cnkgYWdhaW4gc2hvcnRseS5gLFxuICAgICAgRXJyb3JDb2RlLlNFUlZJQ0VfVU5BVkFJTEFCTEUsXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cbiAgc2VuZFF1b3RhRXhjZWVkZWQocmVzLCBxdW90YVR5cGUsIHJlc2VydmF0aW9uLnF1b3RhLCByZXNlcnZhdGlvbi5xdW90YS5yZXNldEF0KTtcbn1cblxuLyoqXG4gKiBGaXJlLWFuZC1mb3JnZXQgcm9sbGJhY2sgZm9yIGEgcHJldmlvdXNseSByZXNlcnZlZCBxdW90YSBzbG90LlxuICogTG9ncyBvbiBmYWlsdXJlIGJ1dCBuZXZlciB0aHJvd3MgIHRoZSBhY3Rpb24gdGhhdCBuZWVkZWQgdGhlIHJvbGxiYWNrXG4gKiBoYXMgYWxyZWFkeSBmYWlsZWQsIG5vIHBvaW50IGNvbXBvdW5kaW5nIHRoZSBlcnJvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY3JlbWVudFF1b3RhKCBxdW90YVNlcnZpY2U6IFF1b3RhU2VydmljZSxcbiAgb3JnSWQ6IHN0cmluZyxcbiAgcXVvdGFUeXBlOiBRdW90YVR5cGUsXG4gIGF1dGhIZWFkZXI6IHN0cmluZyxcbiAgbG9nV2FybjogKG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IHVua25vd24pID0+IHZvaWQsXG4gIGFtb3VudDogbnVtYmVyID0gMSxcbiAgcmVzZXRBdFNuYXBzaG90Pzogc3RyaW5nLFxuKTogdm9pZCB7XG4gIHF1b3RhU2VydmljZS5kZWNyZW1lbnQob3JnSWQsIHF1b3RhVHlwZSwgYXV0aEhlYWRlciwgYW1vdW50LCByZXNldEF0U25hcHNob3QpLmNhdGNoKChlcnI6IHVua25vd24pID0+XG4gICAgbG9nV2FybignUXVvdGEgcm9sbGJhY2sgZmFpbGVkJywgeyBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSksXG4gICk7XG59XG4iXX0=
|
|
329
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvcXVvdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUl0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQXVCLE1BQU0sa0JBQWtCLENBQUM7QUFDekUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBa0IsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUvRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0scUJBQXFCLEdBQStEO0lBQ3hGLG1CQUFtQixFQUFFLENBQUM7SUFDdEIsVUFBVSxFQUFFLENBQUM7Q0FDZCxDQUFDO0FBRUYsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRXJDLCtDQUErQztBQUMvQyxFQUFFO0FBQ0YsOEVBQThFO0FBQzlFLGdGQUFnRjtBQUNoRiwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLHlFQUF5RTtBQUN6RSxnRkFBZ0Y7QUFDaEYsaUZBQWlGO0FBQ2pGLG9FQUFvRTtBQUNwRSxtRUFBbUU7QUFDbkUsMkVBQTJFO0FB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RSxDQUFDO0FBRUQscUZBQXFGO0FBQ3JGLE1BQU0scUNBQXFDLEdBQUcsQ0FBQyxDQUFDO0FBRWhEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsR0FBYSxFQUFFLFNBQW9CLEVBQUUsV0FBK0I7SUFDekcsSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXO1lBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUscUNBQXFDLENBQUMsQ0FBQztRQUMxRixTQUFTLENBQ1AsR0FBRyxFQUNILEdBQUcsRUFDSCxxQkFBcUIsU0FBUyw2Q0FBNkMsRUFDM0UsU0FBUyxDQUFDLG1CQUFtQixDQUM5QixDQUFDO1FBQ0YsT0FBTztJQUNULENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNsRixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUUsWUFBMEIsRUFDeEQsS0FBYSxFQUNiLFNBQW9CLEVBQ3BCLFVBQWtCLEVBQ2xCLE9BQWtELEVBQ2xELE1BQU0sR0FBVyxDQUFDLEVBQ2xCLGVBQXdCO0lBRXhCLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQVksRUFBRSxFQUFFLENBQ25HLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUMvRCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5cbmltcG9ydCB7IGNyZWF0ZVNhZmVDbGllbnQsIHR5cGUgUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuL2h0dHAtY2xpZW50LmpzJztcbmltcG9ydCB7IGdldFNlcnZpY2VBdXRoSGVhZGVyIH0gZnJvbSAnLi4vbWlkZGxld2FyZS9zZXJ2aWNlLXRva2Vucy5qcyc7XG5pbXBvcnQgeyBTWVNURU1fT1JHX0lEIH0gZnJvbSAnLi4vbWlkZGxld2FyZS9zeXN0ZW0tb3JnLmpzJztcbmltcG9ydCB0eXBlIHsgUXVvdGFUeXBlLCBRdW90YUNoZWNrUmVzdWx0LCBTZXJ2aWNlQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMvY29tbW9uLmpzJztcbmltcG9ydCB7IEVycm9yQ29kZSB9IGZyb20gJy4uL3R5cGVzL2Vycm9yLWNvZGVzLmpzJztcbmltcG9ydCB7IERFRkFVTFRfVElFUiwgaXNWYWxpZFRpZXIsIHR5cGUgUXVvdGFUaWVyIH0gZnJvbSAnLi4vdHlwZXMvcXVvdGEtdGllcnMuanMnO1xuaW1wb3J0IHsgZW52Qm9vbCB9IGZyb20gJy4uL3V0aWxzL2Vudi5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZW1pdENvdW50ZXIgfSBmcm9tICcuLi91dGlscy9tZXRyaWMtZW1pdHRlci5qcyc7XG5pbXBvcnQgeyBlcnJvck1lc3NhZ2UsIHNlbmRFcnJvciwgc2VuZFF1b3RhRXhjZWVkZWQgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5pbXBvcnQgeyBzZXJ2aWNlRW5kcG9pbnQgfSBmcm9tICcuLi91dGlscy9zZXJ2aWNlLXJlZ2lzdHJ5LmpzJztcblxuLyoqXG4gKiBSZXRyeSBvcHRpb25zIGZvciBxdW90YSBjYWxscyDigJQgZmFpbCBmYXN0IChhIHNsb3cgcXVvdGEgc2VydmljZSBtdXN0IG5vdCBzdGFsbCB0aGUgcmVxdWVzdCkuXG4gKlxuICogTkVWRVIgcmV0cnkgYSA0MjkuIFRoZSBxdW90YSBzZXJ2aWNlIGFuc3dlcnMgYW4gb3Zlci1saW1pdCBvcmcgd2l0aCA0MjlcbiAqIFFVT1RBX0VYQ0VFREVEIGFuZCBgUmV0cnktQWZ0ZXJgID0gc2Vjb25kcyB1bnRpbCB0aGUgcGVyaW9kIHJlc2V0czsgdGhlIEhUVFBcbiAqIGNsaWVudCBob25vcnMgdGhhdCAoY2FwcGVkIGF0IDYwcyksIHNvIGEgc2luZ2xlIHJhdGUtbGltaXQgcmV0cnkgc3RhbGxlZCB0aGVcbiAqIHJlcXVlc3Qgd2VsbCBwYXN0IHRoZSBoYW5kbGVyIHRpbWVvdXQsIHdoaWNoIHRoZW4gYW5zd2VyZWQgNTAzIGFuZCB0aGUgcmVhbFxuICogNDI5IHdhcyBsb3N0LiBBIDQyOSBpcyBhIGZpbmFsIGFuc3dlciBoZXJlLlxuICovXG5jb25zdCBRVU9UQV9SRVFVRVNUX09QVElPTlM6IFBpY2s8UmVxdWVzdE9wdGlvbnMsICdtYXhSYXRlTGltaXRSZXRyaWVzJyB8ICdtYXhSZXRyaWVzJz4gPSB7XG4gIG1heFJhdGVMaW1pdFJldHJpZXM6IDAsXG4gIG1heFJldHJpZXM6IDEsXG59O1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3F1b3RhJyk7XG5cbi8vIFJFU0VSVkUgRkFJTCBNT0RFIOKAlCBleHBsaWNpdCwgc2luZ2xlIHBvbGljeS5cbi8vXG4vLyBgcmVzZXJ2ZWAgZ2F0ZXMgRVhQRU5TSVZFLCBiaWxsYWJsZSByZXNvdXJjZXMgKHBpcGVsaW5lcywgcGx1Z2luIGJ1aWxkcywgQUlcbi8vIGNhbGxzLCBwbGF0Zm9ybSBmZWF0dXJlIHNsb3RzKS4gRXZlcnkgcXVvdGEgdHlwZSBpcyBhIHBlci1wZXJpb2QgRkxPVyBjb3VudGVyXG4vLyB3aXRoIG5vIGFmdGVyLXRoZS1mYWN0IHJlY29uY2lsaWF0aW9uOiBhIHVuaXQgY29uc3VtZWQgd2hpbGUgdGhlIHJlc2VydmF0aW9uXG4vLyBjb3VsZCBub3QgYmUgY29uZmlybWVkIGlzIG5ldmVyIGNvdW50ZWQsIHNvIGZhaWwtb3BlbiBsZXRzIGFuIG9yZyBjb25zdW1lXG4vLyB1bmJvdW5kZWQgdW5tZXRlcmVkIHVuaXRzIGZvciB0aGUgd2hvbGUgbGVuZ3RoIG9mIGFuIGluY2lkZW50IOKAlCBhbmQgYW5cbi8vIHVuY29uZmlybWVkIHJlc2VydmUgKHRpbWVvdXQsIG9wZW4gY2lyY3VpdCkgbWF5IGV2ZW4gaGF2ZSBsYW5kZWQgc2VydmVyLXNpZGUuXG4vLyBTbyBgcmVzZXJ2ZWAgZmFpbHMgQ0xPU0VEIHdoZW5ldmVyIHRoZSBxdW90YSBzZXJ2aWNlIGRpZCBub3QgQ09ORklSTSB0aGUgc2xvdDpcbi8vICAgLSB1bnJlYWNoYWJsZSAvIHRpbWVkIG91dCAvIGNpcmN1aXQgYnJlYWtlciBvcGVuIChubyByZXNwb25zZSksXG4vLyAgIC0gYSByZWFjaGFibGUtYnV0LWVycm9yZWQgcmVzcG9uc2UgKDV4eCwgNHh4LCBtYWxmb3JtZWQgYm9keSksXG4vLyAgIC0gYSA0MjkgdGhhdCBpcyBOT1QgYSBnZW51aW5lIFFVT1RBX0VYQ0VFREVEIChnYXRld2F5IC8gcmF0ZSBsaW1pdGVyKS5cbi8vIE9wZXJhdG9ycyB3aG8gcHJlZmVyIGF2YWlsYWJpbGl0eSBvdmVyIGVuZm9yY2VtZW50IG9wdCB0aGUgV0hPTEUgc2V0IGludG9cbi8vIGZhaWwtb3BlbiB3aXRoIFFVT1RBX1JFU0VSVkVfRkFJTF9PUEVOPXRydWUuIEJvdGggb3V0Y29tZXMgZW1pdCBhIGNvdW50ZXJcbi8vIChgcXVvdGFfZmFpbF9jbG9zZWRfdG90YWxgIC8gYHF1b3RhX2ZhaWxfb3Blbl90b3RhbGApIHRhZ2dlZCB3aXRoIHRoZSByZWFzb24uXG4vLyBgY2hlY2tgIChhIGNoZWFwIHJlYWQgZ2F0ZSkgc3RheXMgZmFpbC1vcGVuOyBgaW5jcmVtZW50YCBpcyBmaXJlLWFuZC1mb3JnZXQuXG5jb25zdCBRVU9UQV9SRVNFUlZFX0ZBSUxfT1BFTiA9IGVudkJvb2woJ1FVT1RBX1JFU0VSVkVfRkFJTF9PUEVOJywgZmFsc2UpO1xuXG4vKipcbiAqIFNlcnZpY2UtcHJpbmNpcGFsIGBBdXRob3JpemF0aW9uYCBoZWFkZXIgZm9yIGEgcXVvdGEgY2FsbCBtYWRlIG9uIGJlaGFsZiBvZlxuICogYG9yZ0lkYCBieSB0aGUgQ1VSUkVOVCBzZXJ2aWNlIChgU0VSVklDRV9OQU1FYCwgdGhlIHNhbWUgaWRlbnRpdHkgdGhlIGhlYWx0aFxuICogcm91dGVyIHJlcG9ydHMpLlxuICpcbiAqIFRoZSBxdW90YSBzZXJ2aWNlJ3MgbXV0YXRpb24gZW5kcG9pbnRzIChgLzpvcmdJZC9pbmNyZW1lbnRgLCBgL2RlY3JlbWVudGApXG4gKiByZWplY3QgYW55dGhpbmcgYnV0IGEgc2lnbmVkIHNlcnZpY2UgcHJpbmNpcGFsIG9yIGEgc3lzdGVtIGFkbWluLCBzb1xuICogZm9yd2FyZGluZyB0aGUgZW5kIHVzZXIncyBiZWFyZXIgdG9rZW4gdGhlcmUgaXMgYWx3YXlzIGEgNDAzLiBTZXJ2aWNlIHRva2Vuc1xuICogYXJlIGFsc28gZXhlbXB0IGZyb20gdGhlIHF1b3RhIHNlcnZpY2UncyBwZXItSVAgcmF0ZSBsaW1pdGVyLCBzbyBob3QtcGF0aFxuICogcXVvdGEgdHJhZmZpYyBmcm9tIGEgYnVzeSBwb2QgY2FuJ3QgZXhoYXVzdCB0aGF0IHBvZCBJUCdzIGJ1Y2tldCBhbmQgc2lsZW50bHlcbiAqIHR1cm4gZW5mb3JjZW1lbnQgb2ZmLiBTY29wZWQgdG8gdGhlIHRhcmdldCBvcmcgd2l0aCB0aGUgbG93ZXN0IHJvbGUgKG1lbWJlcikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRRdW90YVNlcnZpY2VBdXRoSGVhZGVyKG9yZ0lkOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gZ2V0U2VydmljZUF1dGhIZWFkZXIoeyBzZXJ2aWNlTmFtZTogcHJvY2Vzcy5lbnYuU0VSVklDRV9OQU1FIHx8ICdhcGknLCBvcmdJZCwgcm9sZTogJ21lbWJlcicgfSk7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGEgc3luY2hyb25vdXMgcXVvdGEgcmVzZXJ2YXRpb24gIHRoZSBhdG9taWMgY2hlY2sraW5jcmVtZW50XG4gKiB2YXJpYW50LiBgZXhjZWVkZWQ6IHRydWVgIG1lYW5zIHRoZSBvcGVyYXRpb24gd2FzIHJlamVjdGVkIGF0IHRoZSBEQlxuICogbGV2ZWw7IHRoZSBjYWxsZXIgc2hvdWxkIHJldHVybiA0Mjkgd2l0aG91dCBydW5uaW5nIHRoZSBnYXRlZCBhY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVvdGFSZXNlcnZlUmVzdWx0IHtcbiAgLyoqIFRydWUgd2hlbiB0aGUgc2xvdCB3YXMgTk9UIHJlc2VydmVkIOKAlCB0aGUgZ2F0ZWQgYWN0aW9uIG11c3Qgbm90IHJ1bi4gKi9cbiAgZXhjZWVkZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTZXQgKHRydWUpIGJ5IHRoZSBxdW90YSBDTElFTlQgd2hlbiB0aGUgcmVzZXJ2YXRpb24gd2FzIGRlbmllZCBiZWNhdXNlIHRoZVxuICAgKiBxdW90YSBzZXJ2aWNlIGNvdWxkIG5vdCBDT05GSVJNIGl0ICh1bnJlYWNoYWJsZSAvIHRpbWVvdXQgLyBjaXJjdWl0IG9wZW4gL1xuICAgKiBlcnJvcmVkKSDigJQgbm90IGJlY2F1c2UgdGhlIG9yZyBpcyBvdmVyIGl0cyBsaW1pdC4gQWx3YXlzIHBhaXJlZCB3aXRoXG4gICAqIGBleGNlZWRlZDogdHJ1ZWAuIEFuc3dlciB3aXRoIHtAbGluayBzZW5kUXVvdGFSZXNlcnZlRGVuaWVkfSwgd2hpY2ggbWFwcyBpdCB0b1xuICAgKiA1MDMgaW5zdGVhZCBvZiBhIG1pc2xlYWRpbmcgNDI5IFwicXVvdGEgZXhjZWVkZWRcIi5cbiAgICovXG4gIHVuYXZhaWxhYmxlPzogYm9vbGVhbjtcbiAgcXVvdGE6IHtcbiAgICB0eXBlOiBRdW90YVR5cGU7XG4gICAgbGltaXQ6IG51bWJlcjtcbiAgICB1c2VkOiBudW1iZXI7XG4gICAgcmVtYWluaW5nOiBudW1iZXI7XG4gICAgcmVzZXRBdD86IHN0cmluZztcbiAgfTtcbn1cblxuLyoqXG4gKiBRdW90YSBzZXJ2aWNlIGNsaWVudCBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVvdGFTZXJ2aWNlIHtcbiAgLyoqIENoZWNrIGlmIHF1b3RhIGlzIGF2YWlsYWJsZSAoZmFpbC1vcGVuIG9uIGVycm9yKS4gKi9cbiAgY2hlY2sob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgcmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxRdW90YUNoZWNrUmVzdWx0PjtcbiAgLyoqIEluY3JlbWVudCBxdW90YSB1c2FnZS4gUmV0dXJucyBhIHByb21pc2Ugc28gY2FsbGVycyBjYW4gb3B0aW9uYWxseSBoYW5kbGUgZXJyb3JzLiAqL1xuICBpbmNyZW1lbnQob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgYW1vdW50PzogbnVtYmVyLCByZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogQXRvbWljIHJlc2VydmUgIHRoZSBzYW1lIGF0b21pYyBjaGVjaytpbmNyZW1lbnQgYXMgYGluY3JlbWVudGAsIGJ1dFxuICAgKiBwYXJzZXMgdGhlIHJlc3BvbnNlIHNvIGNhbGxlcnMgY2FuIHNlZSB3aGV0aGVyIHRoZSBzbG90IHdhcyBhY3R1YWxseVxuICAgKiByZXNlcnZlZC4gVXNlIHRoaXMgZm9yIGV4cGVuc2l2ZSByZXNvdXJjZXMgd2hlcmUgdGhlIHBvc3QtaG9jIGZpcmUtXG4gICAqIGFuZC1mb3JnZXQgcGF0dGVybiBhbGxvd3MgY29uY3VycmVudCBvdmVyLXNwZW5kLlxuICAgKlxuICAgKiBGYWlscyBDTE9TRUQgKGBleGNlZWRlZDogdHJ1ZWApIHdoZW5ldmVyIHRoZSBzbG90IGlzIG5vdCBjb25maXJtZWQg4oCUXG4gICAqIHVucmVhY2hhYmxlLCB0aW1lb3V0LCBvcGVuIGNpcmN1aXQsIG5vbi1vaywgb3IgYSBub24tcXVvdGEgNDI5IOKAlCB1bmxlc3NcbiAgICogYFFVT1RBX1JFU0VSVkVfRkFJTF9PUEVOPXRydWVgIChzZWUgdGhlIHBvbGljeSBub3RlIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlKS5cbiAgICovXG4gIHJlc2VydmUob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgYW1vdW50PzogbnVtYmVyLCByZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPFF1b3RhUmVzZXJ2ZVJlc3VsdD47XG4gIC8qKlxuICAgKiBSb2xsIGJhY2sgYSBwcmV2aW91c2x5IHJlc2VydmVkIHNsb3QuIEZpcmUtYW5kLWZvcmdldCDigJQgbmV2ZXIgdGhyb3dzLlxuICAgKiBQYXNzIGByZXNldEF0U25hcHNob3RgICh0aGUgYHF1b3RhLnJlc2V0QXRgIG9ic2VydmVkIHdoZW4gdGhlIHNsb3Qgd2FzXG4gICAqIHJlc2VydmVkKSB0byBtYWtlIHRoZSByb2xsYmFjayBjb25kaXRpb25hbDogaWYgdGhlIHBlcmlvZCByb2xsZWQgb3ZlclxuICAgKiBiZXR3ZWVuIHJlc2VydmUgYW5kIHJvbGxiYWNrLCB0aGUgc2VydmVyIHNraXBzIHRoZSBkZWNyZW1lbnQgc28gaXQgZG9lc24ndFxuICAgKiBzdGVhbCBjYXBhY2l0eSBmcm9tIHRoZSBuZXcgcGVyaW9kLlxuICAgKi9cbiAgZGVjcmVtZW50KG9yZ0lkOiBzdHJpbmcsIHF1b3RhVHlwZTogUXVvdGFUeXBlLCBhdXRoSGVhZGVyOiBzdHJpbmcsIGFtb3VudD86IG51bWJlciwgcmVzZXRBdFNuYXBzaG90Pzogc3RyaW5nLCByZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogR2V0IHRoZSBvcmcncyBxdW90YSBgUXVvdGFUaWVyYC4gVXNlZCBieSB0aGUgcGx1Z2luLWJ1aWxkIHF1ZXVlIHBhcnRpdGlvbmluZ1xuICAgKiB0byByb3V0ZSBhIGJ1aWxkIHRvIHRoZSByaWdodCBwZXItdGllciBxdWV1ZS4gRmFpbC1vcGVuIHJldHVybnMgYERFRkFVTFRfVElFUmBcbiAgICogKGBkZXZlbG9wZXJgIHdoZW4gYmlsbGluZyBpcyBlbmFibGVkLCBgdW5saW1pdGVkYCB3aGVuIGl0J3MgZGlzYWJsZWQpOyBhXG4gICAqIG1pc2NsYXNzaWZpZWQgb3JnIHN0aWxsIGJ1aWxkcyBvbiB0aGUgZGVmYXVsdCBxdWV1ZSwganVzdCB3aXRob3V0IHRoZVxuICAgKiB0aWVyLXNjb3BlZCBzY2hlZHVsaW5nIGJvb3N0LlxuICAgKi9cbiAgZ2V0VGllcihvcmdJZDogc3RyaW5nLCBhdXRoSGVhZGVyOiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8UXVvdGFUaWVyPjtcbiAgLyoqXG4gICAqIEZBSUwtQ0xPU0VEIHR3aW4gb2Yge0BsaW5rIGdldFRpZXJ9OiB0aGUgb3JnJ3MgdGllciBhcyB0aGUgcXVvdGEgc2VydmljZVxuICAgKiBDT05GSVJNRUQgaXQsIG9yIGBudWxsYCB3aGVuIGl0IGNvdWxkIG5vdCBiZSBjb25maXJtZWQgKHVucmVhY2hhYmxlLCBub24tb2ssXG4gICAqIG1pc3Npbmcgb3IgdW5yZWNvZ25pemVkIHRpZXIpLiBGb3IgZGVjaXNpb25zIHRoYXQgbXVzdCBuZXZlciBiZSB0YWtlbiBvbiBhXG4gICAqIGd1ZXNzIOKAlCBhbnl0aGluZyB0aGF0IHJldm9rZXMsIGRvd25ncmFkZXMgb3IgZGVsZXRlcyBvbiB0aGUgc3RyZW5ndGggb2YgYVxuICAgKiB0aWVyIChlLmcuIGEgdmVyaWZpZWQtcHVibGlzaGVyIGdyYWNlIHN3ZWVwKSBtdXN0IHNraXAgdGhlIG9yZyBvbiBgbnVsbGAsXG4gICAqIG5ldmVyIGFjdCBvbiBgREVGQVVMVF9USUVSYC5cbiAgICovXG4gIGdldFRpZXJTdHJpY3Qob3JnSWQ6IHN0cmluZywgYXV0aEhlYWRlcjogc3RyaW5nLCByZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPFF1b3RhVGllciB8IG51bGw+O1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHF1b3RhIHNlcnZpY2UgY2xpZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1b3RhU2VydmljZUNvbmZpZyB7XG4gIC8qKiBRdW90YSBzZXJ2aWNlIGhvc3QgKGRlZmF1bHQ6IGVudiBRVU9UQV9TRVJWSUNFX0hPU1Qgb3IgJ3F1b3RhJykgKi9cbiAgaG9zdD86IHN0cmluZztcbiAgLyoqIFF1b3RhIHNlcnZpY2UgcG9ydCAoZGVmYXVsdDogZW52IFFVT1RBX1NFUlZJQ0VfUE9SVCBvciAzMDAwKSAqL1xuICBwb3J0PzogbnVtYmVyO1xuICAvKiogUmVxdWVzdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdDogNTAwMCkgKi9cbiAgdGltZW91dD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBcHBseSB0aGUgZXhwbGljaXQgcmVzZXJ2ZSBmYWlsLW1vZGUgcG9saWN5IHRvIGEgcmVzZXJ2YXRpb24gdGhlIHF1b3RhIHNlcnZpY2VcbiAqIGRpZCBOT1QgY29uZmlybSAoc2VlIFFVT1RBX1JFU0VSVkVfRkFJTF9PUEVOIGFib3ZlKS4gRGVmYXVsdDogZGVueS5cbiAqL1xuZnVuY3Rpb24gdW5jb25maXJtZWRSZXNlcnZlKFxuICBvcmdJZDogc3RyaW5nLFxuICBxdW90YVR5cGU6IFF1b3RhVHlwZSxcbiAgcmVhc29uOiAndW5yZWFjaGFibGUnIHwgJ3RyYW5zaWVudC00MjknIHwgJ25vbi1vaycsXG4gIHN0YXR1c0NvZGU/OiBudW1iZXIsXG4pOiBRdW90YVJlc2VydmVSZXN1bHQge1xuICBpZiAoUVVPVEFfUkVTRVJWRV9GQUlMX09QRU4pIHtcbiAgICBsb2dnZXIud2FybignUVVPVEFfRkFJTF9PUEVOOiBxdW90YSByZXNlcnZlIG5vdCBjb25maXJtZWQsIGFsbG93aW5nIHJlcXVlc3QnLCB7IG9yZ0lkLCBxdW90YVR5cGUsIHJlYXNvbiwgc3RhdHVzQ29kZSB9KTtcbiAgICBlbWl0Q291bnRlcigncXVvdGFfZmFpbF9vcGVuX3RvdGFsJywgeyBvcGVyYXRpb246ICdyZXNlcnZlJywgcmVhc29uLCBxdW90YVR5cGUgfSk7XG4gICAgcmV0dXJuIHsgZXhjZWVkZWQ6IGZhbHNlLCBxdW90YTogeyB0eXBlOiBxdW90YVR5cGUsIGxpbWl0OiAtMSwgdXNlZDogMCwgcmVtYWluaW5nOiAtMSB9IH07XG4gIH1cbiAgbG9nZ2VyLndhcm4oJ1FVT1RBX0ZBSUxfQ0xPU0VEOiBxdW90YSByZXNlcnZlIG5vdCBjb25maXJtZWQsIGRlbnlpbmcgcmVxdWVzdCcsIHsgb3JnSWQsIHF1b3RhVHlwZSwgcmVhc29uLCBzdGF0dXNDb2RlIH0pO1xuICBlbWl0Q291bnRlcigncXVvdGFfZmFpbF9jbG9zZWRfdG90YWwnLCB7IG9wZXJhdGlvbjogJ3Jlc2VydmUnLCByZWFzb24sIHF1b3RhVHlwZSB9KTtcbiAgcmV0dXJuIHsgZXhjZWVkZWQ6IHRydWUsIHVuYXZhaWxhYmxlOiB0cnVlLCBxdW90YTogeyB0eXBlOiBxdW90YVR5cGUsIGxpbWl0OiAwLCB1c2VkOiAwLCByZW1haW5pbmc6IDAgfSB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGZhaWwtb3BlbiBxdW90YSByZXN1bHQgKGFsbG93cyB0aGUgcmVxdWVzdCkuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUZhaWxPcGVuUmVzdWx0KCk6IFF1b3RhQ2hlY2tSZXN1bHQge1xuICByZXR1cm4ge1xuICAgIGFsbG93ZWQ6IHRydWUsXG4gICAgbGltaXQ6IC0xLFxuICAgIHVzZWQ6IDAsXG4gICAgcmVtYWluaW5nOiAtMSxcbiAgICByZXNldEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgdW5saW1pdGVkOiB0cnVlLFxuICAgIC8vIFRhZyB0aGUgc2VudGluZWwgc28gZmFpbC1jbG9zZWQgY2FsbGVycyBjYW4gdGVsbCBhbiBvdXRhZ2UgYXBhcnQgZnJvbSBhXG4gICAgLy8gcmVhbCB1bmxpbWl0ZWQgKC0xKSByZWFkaW5nLiBSZWFsIHF1b3RhIHJlc3VsdHMgbmV2ZXIgc2V0IHRoaXMuXG4gICAgZmFpbE9wZW46IHRydWUsXG4gIH07XG59XG5cbi8qKlxuICogQnVpbGQgY29tbW9uIHJlcXVlc3QgaGVhZGVycyB3aXRoIG9wdGlvbmFsIHJlcXVlc3QgSUQgZm9yIGRpc3RyaWJ1dGVkIHRyYWNpbmcuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkSGVhZGVycyhvcmdJZDogc3RyaW5nLCBhdXRoSGVhZGVyPzogc3RyaW5nLCByZXF1ZXN0SWQ/OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgJ3gtb3JnLWlkJzogb3JnSWQgfTtcbiAgaWYgKGF1dGhIZWFkZXIpIGhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IGF1dGhIZWFkZXI7XG4gIGlmIChyZXF1ZXN0SWQpIGhlYWRlcnNbJ1gtUmVxdWVzdC1JZCddID0gcmVxdWVzdElkO1xuICByZXR1cm4gaGVhZGVycztcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBxdW90YSBzZXJ2aWNlIGNsaWVudC5cbiAqXG4gKiBAcGFyYW0gY29uZmlnIC0gT3B0aW9uYWwgc2VydmljZSBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBRdW90YSBzZXJ2aWNlIGNsaWVudFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBxdW90YVNlcnZpY2UgPSBjcmVhdGVRdW90YVNlcnZpY2UoKTtcbiAqXG4gKiAvLyBDaGVjayBxdW90YSBiZWZvcmUgcHJvY2Vzc2luZ1xuICogY29uc3QgcXVvdGEgPSBhd2FpdCBxdW90YVNlcnZpY2UuY2hlY2sob3JnSWQsICdhcGlDYWxscycsIGF1dGhIZWFkZXIpO1xuICogaWYgKCFxdW90YS5hbGxvd2VkKSB7XG4gKiByZXR1cm4gcmVzLnN0YXR1cyg0MjkpLmpzb24oeyBlcnJvcjogJ1F1b3RhIGV4Y2VlZGVkJyB9KTtcbiAqIH1cbiAqXG4gKiAvLyBJbmNyZW1lbnQgcXVvdGEgYWZ0ZXIgc3VjY2Vzc1xuICogcXVvdGFTZXJ2aWNlLmluY3JlbWVudChvcmdJZCwgJ2FwaUNhbGxzJywgYXV0aEhlYWRlcikuY2F0Y2goZXJyID0+IGxvZ2dlci53YXJuKCdRdW90YSBpbmNyZW1lbnQgZmFpbGVkJywgeyBlcnJvcjogZXJyIH0pKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUXVvdGFTZXJ2aWNlKGNvbmZpZzogUXVvdGFTZXJ2aWNlQ29uZmlnID0ge30pOiBRdW90YVNlcnZpY2Uge1xuICBjb25zdCBzZXJ2aWNlQ29uZmlnOiBTZXJ2aWNlQ29uZmlnID0ge1xuICAgIGhvc3Q6IGNvbmZpZy5ob3N0ID8/IHNlcnZpY2VFbmRwb2ludCgncXVvdGEnKS5ob3N0LFxuICAgIHBvcnQ6IGNvbmZpZy5wb3J0ID8/IHNlcnZpY2VFbmRwb2ludCgncXVvdGEnKS5wb3J0LFxuICAgIHRpbWVvdXQ6IGNvbmZpZy50aW1lb3V0ID8/IDUwMDAsXG4gIH07XG5cbiAgY29uc3QgY2xpZW50ID0gY3JlYXRlU2FmZUNsaWVudChzZXJ2aWNlQ29uZmlnKTtcblxuICAvKiogT25lIHRpZXIgcmVhZDogdGhlIGNvbmZpcm1lZCB0aWVyLCBvciB3aHkgdGhlcmUgaXNuJ3Qgb25lLiAqL1xuICBhc3luYyBmdW5jdGlvbiByZWFkVGllcihcbiAgICBvcmdJZDogc3RyaW5nLCBhdXRoSGVhZGVyOiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZyxcbiAgKTogUHJvbWlzZTx7IHRpZXI6IFF1b3RhVGllcjsgcmVhc29uPzogdW5kZWZpbmVkOyBzdGF0dXNDb2RlPzogbnVtYmVyIH0gfCB7IHRpZXI6IG51bGw7IHJlYXNvbjogJ3VucmVhY2hhYmxlJyB8ICdub24tb2snIHwgJ2ludmFsaWQtdGllcic7IHN0YXR1c0NvZGU/OiBudW1iZXIgfT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDx7XG4gICAgICBzdWNjZXNzOiBib29sZWFuO1xuICAgICAgZGF0YT86IHsgcXVvdGE/OiB7IHRpZXI/OiBzdHJpbmcgfSB9O1xuICAgICAgbWVzc2FnZT86IHN0cmluZztcbiAgICB9PihgL3F1b3Rhcy8ke2VuY29kZVVSSUNvbXBvbmVudChvcmdJZCl9YCwgeyBoZWFkZXJzOiBidWlsZEhlYWRlcnMob3JnSWQsIGF1dGhIZWFkZXIsIHJlcXVlc3RJZCksIC4uLlFVT1RBX1JFUVVFU1RfT1BUSU9OUyB9KTtcbiAgICBpZiAoIXJlc3BvbnNlKSByZXR1cm4geyB0aWVyOiBudWxsLCByZWFzb246ICd1bnJlYWNoYWJsZScgfTtcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMjAwIHx8ICFyZXNwb25zZS5ib2R5Py5zdWNjZXNzKSByZXR1cm4geyB0aWVyOiBudWxsLCByZWFzb246ICdub24tb2snLCBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXNDb2RlIH07XG4gICAgY29uc3QgdGllciA9IHJlc3BvbnNlLmJvZHkuZGF0YT8ucXVvdGE/LnRpZXI7XG4gICAgaWYgKCF0aWVyIHx8ICFpc1ZhbGlkVGllcih0aWVyKSkgcmV0dXJuIHsgdGllcjogbnVsbCwgcmVhc29uOiAnaW52YWxpZC10aWVyJywgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzQ29kZSB9O1xuICAgIHJldHVybiB7IHRpZXIsIHN0YXR1c0NvZGU6IHJlc3BvbnNlLnN0YXR1c0NvZGUgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgY2hlY2sob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgcmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxRdW90YUNoZWNrUmVzdWx0PiB7XG4gICAgICBjb25zdCBwYXRoID0gYC9xdW90YXMvJHtlbmNvZGVVUklDb21wb25lbnQob3JnSWQpfS8ke2VuY29kZVVSSUNvbXBvbmVudChxdW90YVR5cGUpfWA7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDx7XG4gICAgICAgIHN1Y2Nlc3M6IGJvb2xlYW47XG4gICAgICAgIGRhdGE/OiB7IHF1b3RhVHlwZTogc3RyaW5nOyBzdGF0dXM6IFF1b3RhQ2hlY2tSZXN1bHQgfTtcbiAgICAgICAgbWVzc2FnZT86IHN0cmluZztcbiAgICAgIH0+KHBhdGgsIHsgaGVhZGVyczogYnVpbGRIZWFkZXJzKG9yZ0lkLCBhdXRoSGVhZGVyLCByZXF1ZXN0SWQpLCAuLi5RVU9UQV9SRVFVRVNUX09QVElPTlMgfSk7XG5cbiAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1FVT1RBX0ZBSUxfT1BFTjogUXVvdGEgc2VydmljZSB1bnJlYWNoYWJsZSwgYWxsb3dpbmcgcmVxdWVzdCcsIHsgb3JnSWQsIHF1b3RhVHlwZSB9KTtcbiAgICAgICAgZW1pdENvdW50ZXIoJ3F1b3RhX2ZhaWxfb3Blbl90b3RhbCcsIHsgb3BlcmF0aW9uOiAnY2hlY2snLCByZWFzb246ICd1bnJlYWNoYWJsZScsIHF1b3RhVHlwZSB9KTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZhaWxPcGVuUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDAgfHwgIXJlc3BvbnNlLmJvZHkuc3VjY2VzcyB8fCAhcmVzcG9uc2UuYm9keS5kYXRhPy5zdGF0dXMpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1FVT1RBX0ZBSUxfT1BFTjogUXVvdGEgY2hlY2sgcmV0dXJuZWQgbm9uLW9rLCBhbGxvd2luZyByZXF1ZXN0Jywge1xuICAgICAgICAgIG9yZ0lkLCBxdW90YVR5cGUsIHN0YXR1c0NvZGU6IHJlc3BvbnNlLnN0YXR1c0NvZGUsIG1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkubWVzc2FnZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGVtaXRDb3VudGVyKCdxdW90YV9mYWlsX29wZW5fdG90YWwnLCB7IG9wZXJhdGlvbjogJ2NoZWNrJywgcmVhc29uOiAnbm9uLW9rJywgcXVvdGFUeXBlIH0pO1xuICAgICAgICByZXR1cm4gY3JlYXRlRmFpbE9wZW5SZXN1bHQoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHkuZGF0YS5zdGF0dXM7XG4gICAgfSxcblxuICAgIGFzeW5jIGluY3JlbWVudChvcmdJZDogc3RyaW5nLCBxdW90YVR5cGU6IFF1b3RhVHlwZSwgYXV0aEhlYWRlcjogc3RyaW5nLCBhbW91bnQ6IG51bWJlciA9IDEsIHJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgY29uc3QgcGF0aCA9IGAvcXVvdGFzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9yZ0lkKX0vaW5jcmVtZW50YDtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnRcbiAgICAgICAgLnBvc3QocGF0aCwgeyBxdW90YVR5cGUsIGFtb3VudCB9LCB7IGhlYWRlcnM6IGJ1aWxkSGVhZGVycyhvcmdJZCwgYXV0aEhlYWRlciwgcmVxdWVzdElkKSwgLi4uUVVPVEFfUkVRVUVTVF9PUFRJT05TIH0pO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlIHx8IHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICBsb2dnZXIud2FybignRmFpbGVkIHRvIGluY3JlbWVudCBxdW90YScsIHtcbiAgICAgICAgICBvcmdJZCwgcXVvdGFUeXBlLCBhbW91bnQsIHN0YXR1c0NvZGU6IHJlc3BvbnNlPy5zdGF0dXNDb2RlLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnUXVvdGEgaW5jcmVtZW50ZWQnLCB7IG9yZ0lkLCBxdW90YVR5cGUsIGFtb3VudCB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgcmVzZXJ2ZShvcmdJZDogc3RyaW5nLCBxdW90YVR5cGU6IFF1b3RhVHlwZSwgYXV0aEhlYWRlcjogc3RyaW5nLCBhbW91bnQ6IG51bWJlciA9IDEsIHJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8UXVvdGFSZXNlcnZlUmVzdWx0PiB7XG4gICAgICBjb25zdCBwYXRoID0gYC9xdW90YXMvJHtlbmNvZGVVUklDb21wb25lbnQob3JnSWQpfS9pbmNyZW1lbnRgO1xuXG4gICAgICAvLyAyMDAgY2FycmllcyBgZGF0YS5xdW90YWA7IDQyOSAoUVVPVEFfRVhDRUVERUQpIGNhcnJpZXMgYGRldGFpbHMucXVvdGFgLlxuICAgICAgLy8gQm90aCBzaGFwZXMgYXJlIG5vcm1hbGl6ZWQgaW50byBRdW90YVJlc2VydmVSZXN1bHQuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0PHtcbiAgICAgICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICAgICAgZGF0YT86IHsgcXVvdGE/OiBRdW90YVJlc2VydmVSZXN1bHRbJ3F1b3RhJ10gfTtcbiAgICAgICAgZGV0YWlscz86IHsgcXVvdGE/OiBRdW90YVJlc2VydmVSZXN1bHRbJ3F1b3RhJ10gfTtcbiAgICAgICAgLyoqIGBzZW5kRXJyb3JgJ3MgZXJyb3ItY29kZSBmaWVsZC4gKi9cbiAgICAgICAgY29kZT86IHN0cmluZztcbiAgICAgIH0+KHBhdGgsIHsgcXVvdGFUeXBlLCBhbW91bnQgfSwgeyBoZWFkZXJzOiBidWlsZEhlYWRlcnMob3JnSWQsIGF1dGhIZWFkZXIsIHJlcXVlc3RJZCksIC4uLlFVT1RBX1JFUVVFU1RfT1BUSU9OUyB9KTtcblxuICAgICAgaWYgKCFyZXNwb25zZSkgcmV0dXJuIHVuY29uZmlybWVkUmVzZXJ2ZShvcmdJZCwgcXVvdGFUeXBlLCAndW5yZWFjaGFibGUnKTtcblxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgPT09IDQyOSkge1xuICAgICAgICBjb25zdCBxID0gcmVzcG9uc2UuYm9keS5kZXRhaWxzPy5xdW90YTtcbiAgICAgICAgLy8gT25seSBhIEdFTlVJTkUgcXVvdGEtZXhjZWVkZWQgNDI5IG1lYW5zIFwib3ZlciBxdW90YVwiLiBBIGdlbmVyaWMgNDI5IOKAlFxuICAgICAgICAvLyBhbiBpbnRlcnZlbmluZyBnYXRld2F5IG9yIHJhdGUgbGltaXRlciDigJQgZGlkIG5vdCBjb25maXJtIGFueXRoaW5nLCBzb1xuICAgICAgICAvLyBpdCBnb2VzIHRocm91Z2ggdGhlIHNhbWUgdW5jb25maXJtZWQtcmVzZXJ2YXRpb24gcG9saWN5IGFzIGFuIG91dGFnZS5cbiAgICAgICAgaWYgKHJlc3BvbnNlLmJvZHkuY29kZSA9PT0gRXJyb3JDb2RlLlFVT1RBX0VYQ0VFREVEIHx8IHEpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXhjZWVkZWQ6IHRydWUsXG4gICAgICAgICAgICBxdW90YTogcSA/PyB7IHR5cGU6IHF1b3RhVHlwZSwgbGltaXQ6IDAsIHVzZWQ6IDAsIHJlbWFpbmluZzogMCB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuY29uZmlybWVkUmVzZXJ2ZShvcmdJZCwgcXVvdGFUeXBlLCAndHJhbnNpZW50LTQyOScsIHJlc3BvbnNlLnN0YXR1c0NvZGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMjAwIHx8ICFyZXNwb25zZS5ib2R5LnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHVuY29uZmlybWVkUmVzZXJ2ZShvcmdJZCwgcXVvdGFUeXBlLCAnbm9uLW9rJywgcmVzcG9uc2Uuc3RhdHVzQ29kZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHEgPSByZXNwb25zZS5ib2R5LmRhdGE/LnF1b3RhO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXhjZWVkZWQ6IGZhbHNlLFxuICAgICAgICBxdW90YTogcSA/PyB7IHR5cGU6IHF1b3RhVHlwZSwgbGltaXQ6IC0xLCB1c2VkOiAwLCByZW1haW5pbmc6IC0xIH0sXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWNyZW1lbnQob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgYW1vdW50OiBudW1iZXIgPSAxLCByZXNldEF0U25hcHNob3Q/OiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgY29uc3QgcGF0aCA9IGAvcXVvdGFzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9yZ0lkKX0vZGVjcmVtZW50YDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50XG4gICAgICAgIC5wb3N0KHBhdGgsIHsgcXVvdGFUeXBlLCBhbW91bnQsIC4uLihyZXNldEF0U25hcHNob3QgJiYgeyByZXNldEF0U25hcHNob3QgfSkgfSwgeyBoZWFkZXJzOiBidWlsZEhlYWRlcnMob3JnSWQsIGF1dGhIZWFkZXIsIHJlcXVlc3RJZCksIC4uLlFVT1RBX1JFUVVFU1RfT1BUSU9OUyB9KTtcblxuICAgICAgaWYgKCFyZXNwb25zZSB8fCByZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgICAgLy8gUm9sbGJhY2sgZmFpbHVyZSBpcyBsb2dnZWQgYnV0IG5ldmVyIHByb3BhZ2F0ZWQgIHRoZSBhY3Rpb24ncyBvd25cbiAgICAgICAgLy8gZmFpbHVyZSBoYXMgYWxyZWFkeSBiZWVuIHN1cmZhY2VkIHRvIHRoZSBjYWxsZXI7IGEgc3R1Y2sgY291bnRlclxuICAgICAgICAvLyByZXNvbHZlcyBvbiB0aGUgbmV4dCBwZXJpb2QgcmVzZXQuXG4gICAgICAgIGxvZ2dlci53YXJuKCdGYWlsZWQgdG8gZGVjcmVtZW50IHF1b3RhIChzbG90IHdpbGwgcmVzZXQgb24gbmV4dCBwZXJpb2QpJywge1xuICAgICAgICAgIG9yZ0lkLCBxdW90YVR5cGUsIGFtb3VudCwgc3RhdHVzQ29kZTogcmVzcG9uc2U/LnN0YXR1c0NvZGUsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdRdW90YSBkZWNyZW1lbnRlZCcsIHsgb3JnSWQsIHF1b3RhVHlwZSwgYW1vdW50IH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaWVyKG9yZ0lkOiBzdHJpbmcsIGF1dGhIZWFkZXI6IHN0cmluZywgcmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxRdW90YVRpZXI+IHtcbiAgICAgIGNvbnN0IGtub3duID0gY29uc3RhbnRUaWVyRm9yKG9yZ0lkKTtcbiAgICAgIGlmIChrbm93bikgcmV0dXJuIGtub3duO1xuICAgICAgY29uc3QgcmVhZCA9IGF3YWl0IHJlYWRUaWVyKG9yZ0lkLCBhdXRoSGVhZGVyLCByZXF1ZXN0SWQpO1xuICAgICAgaWYgKHJlYWQudGllcikgcmV0dXJuIHJlYWQudGllcjtcbiAgICAgIGxvZ2dlci53YXJuKGBRVU9UQV9GQUlMX09QRU46IHRpZXIgbG9va3VwIGZhaWxlZCwgZGVmYXVsdGluZyB0byAke0RFRkFVTFRfVElFUn0gdGllcmAsIHtcbiAgICAgICAgb3JnSWQsIHN0YXR1c0NvZGU6IHJlYWQuc3RhdHVzQ29kZSwgcmVhc29uOiByZWFkLnJlYXNvbiwgZGVmYXVsdFRpZXI6IERFRkFVTFRfVElFUixcbiAgICAgIH0pO1xuICAgICAgZW1pdENvdW50ZXIoJ3F1b3RhX2ZhaWxfb3Blbl90b3RhbCcsIHsgb3BlcmF0aW9uOiAndGllcicsIHJlYXNvbjogcmVhZC5yZWFzb24sIHF1b3RhVHlwZTogJ3RpZXInIH0pO1xuICAgICAgcmV0dXJuIERFRkFVTFRfVElFUjtcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VGllclN0cmljdChvcmdJZDogc3RyaW5nLCBhdXRoSGVhZGVyOiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8UXVvdGFUaWVyIHwgbnVsbD4ge1xuICAgICAgY29uc3Qga25vd24gPSBjb25zdGFudFRpZXJGb3Iob3JnSWQpO1xuICAgICAgaWYgKGtub3duKSByZXR1cm4ga25vd247XG4gICAgICBjb25zdCByZWFkID0gYXdhaXQgcmVhZFRpZXIob3JnSWQsIGF1dGhIZWFkZXIsIHJlcXVlc3RJZCk7XG4gICAgICBpZiAocmVhZC50aWVyKSByZXR1cm4gcmVhZC50aWVyO1xuICAgICAgbG9nZ2VyLndhcm4oJ1FVT1RBX0ZBSUxfQ0xPU0VEOiB0aWVyIGNvdWxkIG5vdCBiZSBjb25maXJtZWQnLCB7IG9yZ0lkLCBzdGF0dXNDb2RlOiByZWFkLnN0YXR1c0NvZGUsIHJlYXNvbjogcmVhZC5yZWFzb24gfSk7XG4gICAgICBlbWl0Q291bnRlcigncXVvdGFfZmFpbF9jbG9zZWRfdG90YWwnLCB7IG9wZXJhdGlvbjogJ3RpZXInLCByZWFzb246IHJlYWQucmVhc29uLCBxdW90YVR5cGU6ICd0aWVyJyB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogVGhlIHN5c3RlbSBvcmcncyB0aWVyIGlzIGEgQ09OU1RBTlQsIG5vdCBhIGJpbGxpbmcgZmFjdCwgc28gaXQgaXMgYW5zd2VyZWRcbiAqIHdpdGhvdXQgYSBsb29rdXAuXG4gKlxuICogVGhlIHBsYXRmb3JtJ3Mgb3duIG9yZyBpcyBhbHdheXMgYHVubGltaXRlZGAgKHBsYXRmb3JtL3NyYy9zZXJ2aWNlcy9cbiAqIGF1dGgtc2VydmljZS50cyBzZWVkcyBpdCB0aGF0IHdheSk6IG5vdGhpbmcgbWV0ZXJzIGl0IGFuZCBpdCBpcyBuZXZlciBzb2xkLlxuICogQXNraW5nIHRoZSBxdW90YSBzZXJ2aWNlIHdhcyB0aGVyZWZvcmUgYSBuZXR3b3JrIGhvcCB3aG9zZSBvbmx5IHBvc3NpYmxlXG4gKiBvdXRjb21lcyB3ZXJlIHRoZSBhbnN3ZXIgd2UgYWxyZWFkeSBrbmV3LCBvciBhIGZhaWx1cmUuXG4gKlxuICogVGhlIGZhaWx1cmUgaXMgd2hhdCBtYWRlIHRoaXMgd29ydGggZml4aW5nLiBgZ2V0VGllcmAgZmFpbHMgT1BFTiB0b1xuICogREVGQVVMVF9USUVSLCB3aGljaCB3aXRoIGJpbGxpbmcgZW5hYmxlZCBpcyBgZGV2ZWxvcGVyYCDigJQgdGhlIG1vc3RcbiAqIGNvbnN0cmFpbmVkIHRpZXIg4oCUIGFuZCBpdHMgZG9jdW1lbnRlZCBqb2IgaXMgYnVpbGQtcXVldWUgcGFydGl0aW9uaW5nLiBBXG4gKiBibGlwIGluIHRoZSBxdW90YSBzZXJ2aWNlIHRoZXJlZm9yZSByb3V0ZWQgdGhlIFNZU1RFTSBvcmcncyBidWlsZHMgb250byB0aGVcbiAqIGRldmVsb3BlciBxdWV1ZTsgdGhlIE9mZmljaWFsIGNhdGFsb2cgbG9hZCBpcyAxMTkgb2YgdGhlbS4gYGdldFRpZXJTdHJpY3RgXG4gKiBmYWlscyBDTE9TRUQgdG8gbnVsbCwgc28gYSBzd2VlcCB0aGF0IG11c3Qgbm90IGd1ZXNzIHdvdWxkIHNraXAgdGhlXG4gKiBwbGF0Zm9ybSdzIG93biBvcmcgaW5zdGVhZC5cbiAqL1xuZnVuY3Rpb24gY29uc3RhbnRUaWVyRm9yKG9yZ0lkOiBzdHJpbmcpOiBRdW90YVRpZXIgfCBudWxsIHtcbiAgcmV0dXJuIG9yZ0lkLnRvTG93ZXJDYXNlKCkgPT09IFNZU1RFTV9PUkdfSUQgPyAndW5saW1pdGVkJyA6IG51bGw7XG59XG5cbi8qKlxuICogRmlyZS1hbmQtZm9yZ2V0IHF1b3RhIE1FVEVSSU5HIGluY3JlbWVudCB3aXRoIHN0YW5kYXJkaXplZCBlcnJvciBsb2dnaW5nLlxuICpcbiAqIEF1dGhlbnRpY2F0ZXMgYXMgdGhlIGNhbGxpbmcgU0VSVklDRSAoe0BsaW5rIGdldFF1b3RhU2VydmljZUF1dGhIZWFkZXJ9KSwgbmV2ZXJcbiAqIHdpdGggdGhlIGVuZCB1c2VyJ3MgdG9rZW46IGAvcXVvdGFzLzpvcmdJZC9pbmNyZW1lbnRgIGlzIHNlcnZpY2UtcHJpbmNpcGFsIC9cbiAqIHN5c3RlbS1hZG1pbiBvbmx5LCBzbyBhIGZvcndhcmRlZCB1c2VyIEpXVCB3YXMgYWx3YXlzIHJlamVjdGVkICg0MDMpIGFuZCB0aGVcbiAqIG1ldGVyZWQgcXVvdGEgKGUuZy4gYGFwaUNhbGxzYCwgYW5kIHRoZSBgYXBpX3BhY2tgIGJ1bmRsZSByYWlzaW5nIGl0KSBuZXZlclxuICogbW92ZWQuXG4gKlxuICogQHBhcmFtIHF1b3RhU2VydmljZSAtIFF1b3RhIHNlcnZpY2UgY2xpZW50XG4gKiBAcGFyYW0gb3JnSWQgLSBPcmdhbml6YXRpb24gSUQgd2hvc2UgY291bnRlciBpcyBpbmNyZW1lbnRlZFxuICogQHBhcmFtIHF1b3RhVHlwZSAtIFF1b3RhIHR5cGUgdG8gaW5jcmVtZW50XG4gKiBAcGFyYW0gbG9nV2FybiAtIExvZ2dpbmcgZnVuY3Rpb24gZm9yIHdhcm5pbmdzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmNyZW1lbnRRdW90YSggcXVvdGFTZXJ2aWNlOiBRdW90YVNlcnZpY2UsXG4gIG9yZ0lkOiBzdHJpbmcsXG4gIHF1b3RhVHlwZTogUXVvdGFUeXBlLFxuICBsb2dXYXJuOiAobWVzc2FnZTogc3RyaW5nLCBkYXRhPzogdW5rbm93bikgPT4gdm9pZCxcbik6IHZvaWQge1xuICBxdW90YVNlcnZpY2UuaW5jcmVtZW50KG9yZ0lkLCBxdW90YVR5cGUsIGdldFF1b3RhU2VydmljZUF1dGhIZWFkZXIob3JnSWQpKS5jYXRjaCgoZXJyOiB1bmtub3duKSA9PlxuICAgIGxvZ1dhcm4oJ1F1b3RhIGluY3JlbWVudCBmYWlsZWQnLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSB9KSxcbiAgKTtcbn1cblxuLyoqXG4gKiBBdG9taWMgcmVzZXJ2ZSBoZWxwZXIgZm9yIHRoZSBcInJlc2VydmUgKyBjb21taXQgLyByb2xsYmFja1wiIHBhdHRlcm4uXG4gKiBVc2UgZm9yIGV4cGVuc2l2ZSByZXNvdXJjZXMgKHBpcGVsaW5lcywgcGx1Z2lucywgQUkgY2FsbHMpIHdoZXJlIHRoZVxuICogZmlyZS1hbmQtZm9yZ2V0IHBvc3QtaG9jIGBpbmNyZW1lbnRRdW90YWAgYWxsb3dzIGNvbmN1cnJlbnQgb3Zlci1zcGVuZC5cbiAqXG4gKiBSZXR1cm5zIHRoZSBzdHJ1Y3R1cmVkIHJlc3VsdCBzbyB0aGUgY2FsbGVyIGNhbiBkZWNpZGUgd2hldGhlciB0byBydW5cbiAqIHRoZSBnYXRlZCBhY3Rpb24gb3IgNDI5IHRoZSBjbGllbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJlc2VydmF0aW9uID0gYXdhaXQgcmVzZXJ2ZVF1b3RhKHF1b3RhU2VydmljZSwgb3JnSWQsICdwaXBlbGluZXMnLCBhdXRoSGVhZGVyKTtcbiAqIGlmIChyZXNlcnZhdGlvbi5leGNlZWRlZCkgcmV0dXJuIHNlbmRRdW90YVJlc2VydmVEZW5pZWQocmVzLCAncGlwZWxpbmVzJywgcmVzZXJ2YXRpb24pO1xuICogdHJ5IHtcbiAqIGF3YWl0IGRvRXhwZW5zaXZlVGhpbmcoKTtcbiAqIH0gY2F0Y2ggKGVycikge1xuICogLy8gUGFzcyB0aGUgcmVzZXJ2ZWQgcmVzZXRBdCBzbyBhIHBlcmlvZCByb2xsb3ZlciBkb2Vzbid0IGdldCBkb3VibGUtY2hhcmdlZC5cbiAqIGRlY3JlbWVudFF1b3RhKHF1b3RhU2VydmljZSwgb3JnSWQsICdwaXBlbGluZXMnLCBhdXRoSGVhZGVyLCBsb2dXYXJuLCAxLCByZXNlcnZhdGlvbi5xdW90YS5yZXNldEF0KTtcbiAqIHRocm93IGVycjtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXJ2ZVF1b3RhKCBxdW90YVNlcnZpY2U6IFF1b3RhU2VydmljZSxcbiAgb3JnSWQ6IHN0cmluZyxcbiAgcXVvdGFUeXBlOiBRdW90YVR5cGUsXG4gIGF1dGhIZWFkZXI6IHN0cmluZyxcbiAgYW1vdW50OiBudW1iZXIgPSAxLFxuICByZXF1ZXN0SWQ/OiBzdHJpbmcsXG4pOiBQcm9taXNlPFF1b3RhUmVzZXJ2ZVJlc3VsdD4ge1xuICByZXR1cm4gcXVvdGFTZXJ2aWNlLnJlc2VydmUob3JnSWQsIHF1b3RhVHlwZSwgYXV0aEhlYWRlciwgYW1vdW50LCByZXF1ZXN0SWQpO1xufVxuXG4vKiogU2Vjb25kcyBhIGNsaWVudCBzaG91bGQgd2FpdCBiZWZvcmUgcmV0cnlpbmcgd2hlbiBxdW90YSBjb3VsZG4ndCBiZSBjb25maXJtZWQuICovXG5jb25zdCBRVU9UQV9VTkFWQUlMQUJMRV9SRVRSWV9BRlRFUl9TRUNPTkRTID0gNTtcblxuLyoqXG4gKiBBbnN3ZXIgYSBERU5JRUQgcmVzZXJ2YXRpb24gKGByZXNlcnZhdGlvbi5leGNlZWRlZCA9PT0gdHJ1ZWApLlxuICpcbiAqIC0gYHVuYXZhaWxhYmxlYCAodGhlIHF1b3RhIHNlcnZpY2UgY291bGRuJ3QgY29uZmlybSB0aGUgc2xvdCkg4oaSICoqNTAzKipcbiAqICAgYFNFUlZJQ0VfVU5BVkFJTEFCTEVgIHdpdGggYSBzaG9ydCBgUmV0cnktQWZ0ZXJgOiB0aGUgb3JnIGlzIG5vdCBvdmVyIGl0c1xuICogICBsaW1pdCwgc28gYSA0MjkgXCJxdW90YSBleGNlZWRlZFwiIHdvdWxkIHNlbmQgdXNlcnMgdG8gdXBncmFkZSBmb3IgYW4gb3V0YWdlLlxuICogLSBvdGhlcndpc2Ug4oaSIHRoZSBzdGFuZGFyZCA0MjkgYFFVT1RBX0VYQ0VFREVEYCB3aXRoIHRoZSBYLVF1b3RhLSogaGVhZGVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbmRRdW90YVJlc2VydmVEZW5pZWQocmVzOiBSZXNwb25zZSwgcXVvdGFUeXBlOiBRdW90YVR5cGUsIHJlc2VydmF0aW9uOiBRdW90YVJlc2VydmVSZXN1bHQpOiB2b2lkIHtcbiAgaWYgKHJlc2VydmF0aW9uLnVuYXZhaWxhYmxlKSB7XG4gICAgaWYgKCFyZXMuaGVhZGVyc1NlbnQpIHJlcy5zZXRIZWFkZXIoJ1JldHJ5LUFmdGVyJywgUVVPVEFfVU5BVkFJTEFCTEVfUkVUUllfQUZURVJfU0VDT05EUyk7XG4gICAgc2VuZEVycm9yKFxuICAgICAgcmVzLFxuICAgICAgNTAzLFxuICAgICAgYFVuYWJsZSB0byBjb25maXJtICR7cXVvdGFUeXBlfSBxdW90YSByaWdodCBub3cuIFBsZWFzZSB0cnkgYWdhaW4gc2hvcnRseS5gLFxuICAgICAgRXJyb3JDb2RlLlNFUlZJQ0VfVU5BVkFJTEFCTEUsXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cbiAgc2VuZFF1b3RhRXhjZWVkZWQocmVzLCBxdW90YVR5cGUsIHJlc2VydmF0aW9uLnF1b3RhLCByZXNlcnZhdGlvbi5xdW90YS5yZXNldEF0KTtcbn1cblxuLyoqXG4gKiBGaXJlLWFuZC1mb3JnZXQgcm9sbGJhY2sgZm9yIGEgcHJldmlvdXNseSByZXNlcnZlZCBxdW90YSBzbG90LlxuICogTG9ncyBvbiBmYWlsdXJlIGJ1dCBuZXZlciB0aHJvd3MgIHRoZSBhY3Rpb24gdGhhdCBuZWVkZWQgdGhlIHJvbGxiYWNrXG4gKiBoYXMgYWxyZWFkeSBmYWlsZWQsIG5vIHBvaW50IGNvbXBvdW5kaW5nIHRoZSBlcnJvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY3JlbWVudFF1b3RhKCBxdW90YVNlcnZpY2U6IFF1b3RhU2VydmljZSxcbiAgb3JnSWQ6IHN0cmluZyxcbiAgcXVvdGFUeXBlOiBRdW90YVR5cGUsXG4gIGF1dGhIZWFkZXI6IHN0cmluZyxcbiAgbG9nV2FybjogKG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IHVua25vd24pID0+IHZvaWQsXG4gIGFtb3VudDogbnVtYmVyID0gMSxcbiAgcmVzZXRBdFNuYXBzaG90Pzogc3RyaW5nLFxuKTogdm9pZCB7XG4gIHF1b3RhU2VydmljZS5kZWNyZW1lbnQob3JnSWQsIHF1b3RhVHlwZSwgYXV0aEhlYWRlciwgYW1vdW50LCByZXNldEF0U25hcHNob3QpLmNhdGNoKChlcnI6IHVua25vd24pID0+XG4gICAgbG9nV2FybignUXVvdGEgcm9sbGJhY2sgZmFpbGVkJywgeyBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSksXG4gICk7XG59XG4iXX0=
|
|
@@ -143,6 +143,9 @@ export declare enum ErrorCode {
|
|
|
143
143
|
/** The built image has more fixable Critical findings than the platform
|
|
144
144
|
* floor `PLUGIN_VULN_MAX_CRITICAL`; the message lists them with their fixes. */
|
|
145
145
|
PLUGIN_VULN_GATE = "PLUGIN_VULN_GATE",
|
|
146
|
+
/** An upload whose NAME would override a listing or the parent org's plugin,
|
|
147
|
+
* refused because the consumption policy says `shadowing: deny`. */
|
|
148
|
+
PLUGIN_NAME_SHADOWS = "PLUGIN_NAME_SHADOWS",
|
|
146
149
|
PAYMENT_METHOD_REQUIRED = "PAYMENT_METHOD_REQUIRED",// 402
|
|
147
150
|
DISCOUNT_CEILING_EXCEEDED = "DISCOUNT_CEILING_EXCEEDED",// 400
|
|
148
151
|
DISCOUNT_NOT_FOUND = "DISCOUNT_NOT_FOUND",// 404
|
package/lib/types/error-codes.js
CHANGED
|
@@ -155,6 +155,9 @@ export var ErrorCode;
|
|
|
155
155
|
/** The built image has more fixable Critical findings than the platform
|
|
156
156
|
* floor `PLUGIN_VULN_MAX_CRITICAL`; the message lists them with their fixes. */
|
|
157
157
|
ErrorCode["PLUGIN_VULN_GATE"] = "PLUGIN_VULN_GATE";
|
|
158
|
+
/** An upload whose NAME would override a listing or the parent org's plugin,
|
|
159
|
+
* refused because the consumption policy says `shadowing: deny`. */
|
|
160
|
+
ErrorCode["PLUGIN_NAME_SHADOWS"] = "PLUGIN_NAME_SHADOWS";
|
|
158
161
|
// Billing errors
|
|
159
162
|
ErrorCode["PAYMENT_METHOD_REQUIRED"] = "PAYMENT_METHOD_REQUIRED";
|
|
160
163
|
ErrorCode["DISCOUNT_CEILING_EXCEEDED"] = "DISCOUNT_CEILING_EXCEEDED";
|
|
@@ -235,6 +238,7 @@ export const ErrorCodeStatus = {
|
|
|
235
238
|
[ErrorCode.PLUGIN_VERSION_VULN_BLOCKED]: 409,
|
|
236
239
|
[ErrorCode.IMAGE_SCAN_UNAVAILABLE]: 422,
|
|
237
240
|
[ErrorCode.PLUGIN_VULN_GATE]: 422,
|
|
241
|
+
[ErrorCode.PLUGIN_NAME_SHADOWS]: 409,
|
|
238
242
|
[ErrorCode.PAYMENT_METHOD_REQUIRED]: 402,
|
|
239
243
|
[ErrorCode.DISCOUNT_CEILING_EXCEEDED]: 400,
|
|
240
244
|
[ErrorCode.DISCOUNT_NOT_FOUND]: 404,
|
|
@@ -253,4 +257,4 @@ export const ErrorCodeStatus = {
|
|
|
253
257
|
export function getStatusForErrorCode(code) {
|
|
254
258
|
return ErrorCodeStatus[code] ?? 500;
|
|
255
259
|
}
|
|
256
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItY29kZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvZXJyb3ItY29kZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFOLElBQVksU0E0S1g7QUE1S0QsV0FBWSxTQUFTO0lBQ25CLDhCQUE4QjtJQUM5QiwwQ0FBNkIsQ0FBQTtJQUM3Qiw0Q0FBK0IsQ0FBQTtJQUMvQiw0Q0FBK0IsQ0FBQTtJQUMvQiw0Q0FBK0IsQ0FBQTtJQUMvQiw0Q0FBK0IsQ0FBQTtJQUMvQjs7O3VEQUdtRDtJQUNuRCwwQ0FBNkIsQ0FBQTtJQUM3Qjs4RUFDMEU7SUFDMUUsZ0RBQW1DLENBQUE7SUFFbkMsNkJBQTZCO0lBQzdCLGtFQUFxRCxDQUFBO0lBQ3JEO3dFQUNvRTtJQUNwRSw4REFBaUQsQ0FBQTtJQUNqRDtvRUFDZ0U7SUFDaEUsZ0VBQW1ELENBQUE7SUFDbkQ7a0VBQzhEO0lBQzlELGdFQUFtRCxDQUFBO0lBQ25EOztvRkFFZ0Y7SUFDaEYsd0RBQTJDLENBQUE7SUFDM0M7d0VBQ29FO0lBQ3BFLGtFQUFxRCxDQUFBO0lBQ3JEOzJCQUN1QjtJQUN2Qix3RUFBMkQsQ0FBQTtJQUMzRCxvREFBb0Q7SUFDcEQsd0RBQTJDLENBQUE7SUFDM0Msd0ZBQXdGO0lBQ3hGLHNFQUF5RCxDQUFBO0lBQ3pEO3lEQUNxRDtJQUNyRCxnRUFBbUQsQ0FBQTtJQUNuRDsyREFDdUQ7SUFDdkQsNERBQStDLENBQUE7SUFDL0M7OzJDQUV1QztJQUN2QywwREFBNkMsQ0FBQTtJQUM3QywwQ0FBNkIsQ0FBQTtJQUM3QiwwREFBNkMsQ0FBQTtJQUU3Qyx5QkFBeUI7SUFDekIsb0NBQXVCLENBQUE7SUFDdkIsNENBQStCLENBQUE7SUFDL0I7OytEQUUyRDtJQUMzRCwwREFBNkMsQ0FBQTtJQUU3QywwQkFBMEI7SUFDMUIsa0RBQXFDLENBQUE7SUFDckMs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QkFBa0IsQ0FBQyxFQUFFLEdBQUc7SUFDbkMsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsRUFBRSxHQUFHO0lBQ25DLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUc7SUFDM0IsQ0FBQyxTQUFTLENBQUMsMkJBQTJCLENBQUMsRUFBRSxHQUFHO0lBQzVDLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsR0FBRztJQUN2QyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUc7SUFDakMsQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsRUFBRSxHQUFHO0lBQ3hDLENBQUMsU0FBUyxDQUFDLHlCQUF5QixDQUFDLEVBQUUsR0FBRztJQUMxQyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEdBQUc7SUFDbkMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxHQUFHO0lBQ2xDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUc7SUFDOUIsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUUsR0FBRztJQUMvQixDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRSxHQUFHO0lBQy9CLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUc7SUFDL0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEVBQUUsR0FBRztJQUNoQyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEdBQUc7SUFDcEMsQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsRUFBRSxHQUFHO0NBQ2hELENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxJQUFlO0lBQ25ELE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQztBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogU3RhbmRhcmRpemVkIGVycm9yIGNvZGVzIHVzZWQgYWNyb3NzIGFsbCBBUEkgbWljcm9zZXJ2aWNlcy5cbiAqIFVzZSB0aGVzZSBjb2RlcyBpbiBlcnJvciByZXNwb25zZXMgZm9yIGNvbnNpc3RlbnQgY2xpZW50IGhhbmRsaW5nLlxuICpcbiAqIEVhY2ggSFRUUCBzdGF0dXMgY2F0ZWdvcnkgaGFzIG9uZSBwcmltYXJ5IGNvZGUuIFVzZSB0aGUgYGRldGFpbHNgXG4gKiBmaWVsZCBpbiBlcnJvciByZXNwb25zZXMgZm9yIHN1Yi10eXBlIGluZm9ybWF0aW9uIChlLmcuIHdoaWNoIHF1b3RhXG4gKiB3YXMgZXhjZWVkZWQsIHdoaWNoIGZpZWxkIGZhaWxlZCB2YWxpZGF0aW9uKS5cbiAqL1xuZXhwb3J0IGVudW0gRXJyb3JDb2RlIHtcbiAgLy8gQXV0aGVudGljYXRpb24gZXJyb3JzICg0MDEpXG4gIFVOQVVUSE9SSVpFRCA9ICdVTkFVVEhPUklaRUQnLFxuICBUT0tFTl9FWFBJUkVEID0gJ1RPS0VOX0VYUElSRUQnLFxuICBUT0tFTl9JTlZBTElEID0gJ1RPS0VOX0lOVkFMSUQnLFxuICBUT0tFTl9NSVNTSU5HID0gJ1RPS0VOX01JU1NJTkcnLFxuICBUT0tFTl9SRVZPS0VEID0gJ1RPS0VOX1JFVk9LRUQnLFxuICAvKiogVGhlIHNlc3Npb24gaXMgbm90IE1GQS1ncmFkZSAoYGFhbGAgYmVsb3cgdGhlIHJvdXRlJ3MgYG1pbkFzc3VyYW5jZWApLlxuICAgKiAgVGhlIGNsaWVudCBzZW5kcyB0aGUgcGVyc29uIHRvIGVucm9sIC8gc2lnbiBpbiBhZ2FpbiB3aXRoIGEgc2Vjb25kXG4gICAqICBmYWN0b3Ig4oCUIGl0IG11c3QgTk9UIHNpZ24gdGhlbSBvdXQgb3IgcmV0cnkgYSB0b2tlbiByZWZyZXNoLCBzaW5jZSBhXG4gICAqICByZWZyZXNoIGNhbiBuZXZlciByYWlzZSB0aGUgYXNzdXJhbmNlIGxldmVsLiAqL1xuICBNRkFfUkVRVUlSRUQgPSAnTUZBX1JFUVVJUkVEJyxcbiAgLyoqIFRoZSBzZXNzaW9uIGlzIE1GQS1ncmFkZSBidXQgaXRzIGBhdXRoX3RpbWVgIGlzIG9sZGVyIHRoYW4gdGhlIHJvdXRlJ3NcbiAgICogIGBtYXhBZ2VgIOKAlCB0aGUgcGVyc29uIG11c3QgYXV0aGVudGljYXRlIGFnYWluIChub3QgbWVyZWx5IHJlZnJlc2gpLiAqL1xuICBSRUFVVEhfUkVRVUlSRUQgPSAnUkVBVVRIX1JFUVVJUkVEJyxcblxuICAvLyBBdXRob3JpemF0aW9uIGVycm9ycyAoNDAzKVxuICBJTlNVRkZJQ0lFTlRfUEVSTUlTU0lPTlMgPSAnSU5TVUZGSUNJRU5UX1BFUk1JU1NJT05TJyxcbiAgLyoqIEEgbWFjaGluZSBjcmVkZW50aWFsIChzZXJ2aWNlIHByaW5jaXBhbCwgb3JnIHNlcnZpY2UgYWNjb3VudCwgb3IgYW5cbiAgICogIGV4Y2hhbmdlZCBhY2Nlc3Mga2V5KSByZWFjaGVkIGEgcm91dGUgdGhhdCByZXF1aXJlcyBhIHBlcnNvbi4gKi9cbiAgSFVNQU5fU0VTU0lPTl9SRVFVSVJFRCA9ICdIVU1BTl9TRVNTSU9OX1JFUVVJUkVEJyxcbiAgLyoqIEEgYm9vdHN0cmFwLWFkbWluIGVucm9sbWVudCBzZXNzaW9uIChgbWZhRW5yb2xsbWVudFBlbmRpbmdgKSByZWFjaGVkIGFcbiAgICogIHJvdXRlIG91dHNpZGUgdGhlIGVucm9sbWVudCAvIHNpZ24tb3V0IC8gc2V0dXAgYWxsb3dsaXN0LiAqL1xuICBNRkFfRU5ST0xMTUVOVF9SRVFVSVJFRCA9ICdNRkFfRU5ST0xMTUVOVF9SRVFVSVJFRCcsXG4gIC8qKiBBIHJlYWQtb25seSBpbXBlcnNvbmF0aW9uIHRva2VuIChgaW1wZXJzb25hdGlvblJlYWRPbmx5YCkgYXR0ZW1wdGVkIGFcbiAgICogIHN0YXRlLWNoYW5naW5nIHJlcXVlc3QgKGFueXRoaW5nIGJ1dCBHRVQvSEVBRC9PUFRJT05TKS4gKi9cbiAgSU1QRVJTT05BVElPTl9SRUFEX09OTFkgPSAnSU1QRVJTT05BVElPTl9SRUFEX09OTFknLFxuICAvKiogQSBwbHVnaW4tZWNvc3lzdGVtIGdvdmVybmFuY2Ugcm91dGUgKGRvY3MvcnVuYm9va3MvZWNvc3lzdGVtLW1vZGVyYXRpb24ubWQpXG4gICAqICB3YXMgY2FsbGVkIGZyb20gYW4gYWN0aXZlIG9yZyBvdGhlciB0aGFuIHRoZSBzeXN0ZW0gb3JnIOKAlCBhIHRva2VuIG1pbnRlZCBpblxuICAgKiAgYSB0ZW5hbnQgb3JnIGlzIHJlZnVzZWQgZXZlbiBmb3IgdGhlIHNhbWUgdXNlci4gU3dpdGNoIHRvIHRoZSBzeXN0ZW0gb3JnLiAqL1xuICBTWVNURU1fT1JHX1JFUVVJUkVEID0gJ1NZU1RFTV9PUkdfUkVRVUlSRUQnLFxuICAvKiogVGhlIHB1Ymxpc2hlciBoYXNuJ3QgYWNjZXB0ZWQgdGhlIENVUlJFTlQgcHVibGlzaGVyIHRlcm1zIHZlcnNpb24sIHNvIGl0XG4gICAqICBjYW4ndCBzdWJtaXQgbmV3IHJlcXVlc3RzIChleGlzdGluZyBsaXN0aW5ncyBhcmUgdW5hZmZlY3RlZCkuICovXG4gIFBVQkxJU0hFUl9URVJNU19SRVFVSVJFRCA9ICdQVUJMSVNIRVJfVEVSTVNfUkVRVUlSRUQnLFxuICAvKiogUHVibGlzaGluZyBpcyBkb25lIGZyb20gdGhlIFJPT1Qgb3JnOyBhIHRlYW0gb3JnIGNhbid0IG93biBhIHB1Ymxpc2hlciBvclxuICAgKiAgc3VibWl0IHJlcXVlc3RzLiAqL1xuICBQVUJMSVNIRVJfUk9PVF9PUkdfUkVRVUlSRUQgPSAnUFVCTElTSEVSX1JPT1RfT1JHX1JFUVVJUkVEJyxcbiAgLyoqIFRoZSBwdWJsaXNoZXIgaXMgc3VzcGVuZGVkIGJ5IHRoZSBzeXN0ZW0gb3JnLiAqL1xuICBQVUJMSVNIRVJfU1VTUEVOREVEID0gJ1BVQkxJU0hFUl9TVVNQRU5ERUQnLFxuICAvKiogVGVuYW50IHB1Ymxpc2hpbmcgaXMgc3dpdGNoZWQgb2ZmIG9uIHRoaXMgaW5zdGFuY2UgKGBQTFVHSU5fUFVCTElTSElOR19FTkFCTEVEYCkuICovXG4gIFBMVUdJTl9QVUJMSVNISU5HX0RJU0FCTEVEID0gJ1BMVUdJTl9QVUJMSVNISU5HX0RJU0FCTEVEJyxcbiAgLyoqIFJldmlldyB3cml0ZXMgYXJlIHN3aXRjaGVkIG9mZiBvbiB0aGlzIGluc3RhbmNlIChgUExVR0lOX1JFVklFV1NfRU5BQkxFRGApOlxuICAgKiAgcmV2aWV3cyBzdGF5IHJlYWRhYmxlLCBub3RoaW5nIG5ldyBpcyB3cml0dGVuLiAqL1xuICBQTFVHSU5fUkVWSUVXU19ESVNBQkxFRCA9ICdQTFVHSU5fUkVWSUVXU19ESVNBQkxFRCcsXG4gIC8qKiBBIG1lbWJlciBvZiB0aGUgcHVibGlzaGVyJ3Mgb3duIG9yZ2FuaXphdGlvbiB0cmllZCB0byByZXZpZXcgKG9yIHZvdGUgb24gYVxuICAgKiAgcmV2aWV3IG9mKSBvbmUgb2YgaXRzIGxpc3RpbmdzIChzZWxmLXByb21vdGlvbikuICovXG4gIFJFVklFV19TRUxGX1BST01PVElPTiA9ICdSRVZJRVdfU0VMRl9QUk9NT1RJT04nLFxuICAvKiogU2VwYXJhdGlvbiBvZiBkdXRpZXM6IHRoZSBjYWxsZXIgbWF5IG5vdCBkZWNpZGUgdGhpcyByZXF1ZXN0IOKAlFxuICAgKiAgaXQgY2FtZSBmcm9tIGFuIG9yZyB0aGV5IGJlbG9uZyB0bywgdGhleSB1cGxvYWRlZCB0aGUgdmVyc2lvbiwgb3IgdGhleVxuICAgKiAgZ2F2ZSB0aGUgZmlyc3Qgb2YgdHdvIGFwcHJvdmFscy4gKi9cbiAgU0VQQVJBVElPTl9PRl9EVVRJRVMgPSAnU0VQQVJBVElPTl9PRl9EVVRJRVMnLFxuICBPUkdfTUlTTUFUQ0ggPSAnT1JHX01JU01BVENIJyxcbiAgQ09NUExJQU5DRV9WSU9MQVRJT04gPSAnQ09NUExJQU5DRV9WSU9MQVRJT04nLFxuXG4gIC8vIE5vdCBmb3VuZCBlcnJvcnMgKDQwNClcbiAgTk9UX0ZPVU5EID0gJ05PVF9GT1VORCcsXG4gIE9SR19OT1RfRk9VTkQgPSAnT1JHX05PVF9GT1VORCcsXG4gIC8qKiBUaGUgYW5vbnltb3VzIHBsdWdpbiBzdWJtaXNzaW9uIEFQSSBpcyBvZmYgb24gdGhpcyBpbnN0YW5jZVxuICAgKiAgKGBBTk9OWU1PVVNfU1VCTUlTU0lPTlNfRU5BQkxFRGAsIG9yIG91dGJvdW5kIGVtYWlsIGlzbid0IGNvbmZpZ3VyZWQpIOKAlFxuICAgKiAgYW5zd2VyZWQgYXMgYSBwbGFpbiA0MDQgKGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQpLiAqL1xuICBTVUJNSVNTSU9OU19ESVNBQkxFRCA9ICdTVUJNSVNTSU9OU19ESVNBQkxFRCcsXG5cbiAgLy8gVmFsaWRhdGlvbiBlcnJvcnMgKDQwMClcbiAgVkFMSURBVElPTl9FUlJPUiA9ICdWQUxJREFUSU9OX0VSUk9SJyxcbiAgTUlTU0lOR19SRVFVSVJFRF9GSUVMRCA9ICdNSVNTSU5HX1JFUVVJUkVEX0ZJRUxEJyxcbiAgLyoqIEEgcHJvb2Ytb2Ytd29yayBhbnN3ZXIgaXMgbWlzc2luZywgbWFsZm9ybWVkLCBleHBpcmVkLCB0b28gZWFzeSwgd3JvbmcsXG4gICAqICBvciB3YXMgYWxyZWFkeSB1c2VkIChhbm9ueW1vdXMgc3VibWlzc2lvbnMpLiAqL1xuICBQUk9PRl9PRl9XT1JLX0lOVkFMSUQgPSAnUFJPT0ZfT0ZfV09SS19JTlZBTElEJyxcbiAgVEVNUExBVEVfVU5LTk9XTl9QQVRIID0gJ1RFTVBMQVRFX1VOS05PV05fUEFUSCcsXG4gIFRFTVBMQVRFX0NZQ0xFID0gJ1RFTVBMQVRFX0NZQ0xFJyxcbiAgVEVNUExBVEVfUEFSU0VfRVJST1IgPSAnVEVNUExBVEVfUEFSU0VfRVJST1InLFxuICBURU1QTEFURV9UWVBFX01JU01BVENIID0gJ1RFTVBMQVRFX1RZUEVfTUlTTUFUQ0gnLFxuICBURU1QTEFURV9TRUNSRVRTX1JFU0VSVkVEID0gJ1RFTVBMQVRFX1NFQ1JFVFNfUkVTRVJWRUQnLFxuICBURU1QTEFURV9DT05UUkFDVF9WSU9MQVRJT04gPSAnVEVNUExBVEVfQ09OVFJBQ1RfVklPTEFUSU9OJyxcbiAgVEVNUExBVEVfU0laRV9FWENFRURFRCA9ICdURU1QTEFURV9TSVpFX0VYQ0VFREVEJyxcbiAgVEVNUExBVEVfVkFMSURBVElPTl9GQUlMRUQgPSAnVEVNUExBVEVfVkFMSURBVElPTl9GQUlMRUQnLFxuXG4gIC8vIFF1b3RhL1JhdGUgbGltaXQgZXJyb3JzICg0MjkpXG4gIFFVT1RBX0VYQ0VFREVEID0gJ1FVT1RBX0VYQ0VFREVEJyxcbiAgUkFURV9MSU1JVF9FWENFRURFRCA9ICdSQVRFX0xJTUlUX0VYQ0VFREVEJyxcbiAgLyoqIEFuIGFub255bW91cyBzdWJtaXR0ZXIgKHBlciB2ZXJpZmllZCBlbWFpbCwgb3IgcGVyIGNsaWVudCBJUCkgaXMgYXQgdGhlXG4gICAqICByb2xsaW5nIDI0LWhvdXIgc3VibWlzc2lvbiBjYXAuICovXG4gIFNVQk1JU1NJT05fTElNSVQgPSAnU1VCTUlTU0lPTl9MSU1JVCcsXG5cbiAgLy8gUGF5bG9hZCBlcnJvcnMgKDQxMylcbiAgUEFZTE9BRF9UT09fTEFSR0UgPSAnUEFZTE9BRF9UT09fTEFSR0UnLFxuXG4gIC8vIENvbmZsaWN0IGVycm9ycyAoNDA5KVxuICBDT05GTElDVCA9ICdDT05GTElDVCcsXG4gIERVUExJQ0FURV9FTlRSWSA9ICdEVVBMSUNBVEVfRU5UUlknLFxuICBTQ0FOX0NPTkZMSUNUID0gJ1NDQU5fQ09ORkxJQ1QnLFxuICAvKiogQSBwbHVnaW4gaW1hZ2UncyBjb3NpZ24gc2lnbmF0dXJlIChvciBpdHMgc2lnbmVkIFNCT00gYXR0ZXN0YXRpb24pIGRpZFxuICAgKiAgbm90IHZlcmlmeSBhZ2FpbnN0IHRoZSBwbGF0Zm9ybSdzIHBsdWdpbi1zaWduaW5nIGtleSDigJQgdGhlIHJlZ2lzdHJ5XG4gICAqICBjb250ZW50IG5vIGxvbmdlciBtYXRjaGVzIHdoYXQgdGhlIHBsYXRmb3JtIGJ1aWx0IGFuZCBzaWduZWQuICovXG4gIElNQUdFX1ZFUklGSUNBVElPTl9GQUlMRUQgPSAnSU1BR0VfVkVSSUZJQ0FUSU9OX0ZBSUxFRCcsXG4gIC8qKiBUaGUgcGx1Z2luIHZlcnNpb24gaXMgaW1tdXRhYmxlIOKAlCBhIHB1Ymxpc2ggcmVxdWVzdCByZWZlcmVuY2VzIGl0XG4gICAqICAoYGZyb3plbl9hdGAgc2V0KSBvciBpdCBpcyBwdWJsaXNoZWQgdG8gYSBsaXN0aW5nIOKAlCBzbyBpdCBjYW4gYmUgbmVpdGhlclxuICAgKiAgcmUtdXBsb2FkZWQsIGVkaXRlZCBub3IgZGVsZXRlZCAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCkuICovXG4gIFBMVUdJTl9WRVJTSU9OX0ZST1pFTiA9ICdQTFVHSU5fVkVSU0lPTl9GUk9aRU4nLFxuICAvKiogVGhlIHBsdWdpbiB2ZXJzaW9uIGlzIHJlZmVyZW5jZWQgYnkgb25lIG9mIHRoZSBvcmcncyBwaXBlbGluZXMsIG9yIHB1Ymxpc2hlZFxuICAgKiAgdG8gYW4gZWNvc3lzdGVtIGxpc3Rpbmc7IGRlbGV0aW5nIGl0IG5lZWRzIGA/Zm9yY2U9dHJ1ZWAgcGx1cyBhIHN0ZXAtdXAuICovXG4gIFBMVUdJTl9WRVJTSU9OX0lOX1VTRSA9ICdQTFVHSU5fVkVSU0lPTl9JTl9VU0UnLFxuICAvKiogQSBmcmVlemUgbmFtZWQgYW4gaW1hZ2UgZGlnZXN0IHRoYXQgaXMgbm90IHRoZSB2ZXJzaW9uJ3Mgc3RvcmVkIGRpZ2VzdFxuICAgKiAgKGZhaWwgY2xvc2VkOiB3aGF0IHdhcyByZXF1ZXN0ZWQgaXMgbm90IHdoYXQgd291bGQgYmUgcHVibGlzaGVkKS4gKi9cbiAgUExVR0lOX0RJR0VTVF9NSVNNQVRDSCA9ICdQTFVHSU5fRElHRVNUX01JU01BVENIJyxcbiAgLyoqIEEgcHVibGlzaCByZXF1ZXN0IG5lZWRzIHRoZSBvcmcncyBwdWJsaXNoZXIgcHJvZmlsZSwgd2hpY2ggZG9lc24ndCBleGlzdFxuICAgKiAgeWV0IChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS4gQ2xhaW0gYSBoYW5kbGUgZmlyc3QuICovXG4gIFBVQkxJU0hFUl9SRVFVSVJFRCA9ICdQVUJMSVNIRVJfUkVRVUlSRUQnLFxuICAvKiogVGhlIHJlcXVlc3RlZCBwdWJsaXNoZXIgaGFuZGxlIGlzIHJlc2VydmVkIChPZmZpY2lhbC9WZXJpZmllZFxuICAgKiAgcmVzZXJ2YXRpb25zLCBjb25mdXNhYmxlcykuIFN1Ym1pdCBhIGBjbGFpbWAgcmVxdWVzdCBpbnN0ZWFkLiAqL1xuICBQVUJMSVNIRVJfSEFORExFX1JFU0VSVkVEID0gJ1BVQkxJU0hFUl9IQU5ETEVfUkVTRVJWRUQnLFxuICAvKiogQSBwdWJsaXNoIHJlcXVlc3QgZmFpbGVkIGEgc3VibWl0IGdhdGUgKHB1YmxpYyB2aXNpYmlsaXR5LCBTUERYIGxpY2Vuc2UsXG4gICAqICBSRUFETUUsIHNpZ25hdHVyZSwgc2NhbiwgdnVsbmVyYWJpbGl0eSBnYXRlIOKApik7IGBkZXRhaWxzLmdhdGVzYCBsaXN0cyB0aGVtLiAqL1xuICBQVUJMSVNIX0dBVEVfRkFJTEVEID0gJ1BVQkxJU0hfR0FURV9GQUlMRUQnLFxuICAvKiogQSBWZXJpZmllZC1wdWJsaXNoZXIgYXBwbGljYXRpb24gKG9yIGl0cyBkZWNpc2lvbikgZnJvbSBhbiBvcmcgd2hvc2UgcGxhblxuICAgKiAgbGFja3MgdGhlIGB2ZXJpZmllZF9wdWJsaXNoZXJgIGZlYXR1cmUgKFRlYW0rLCBkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS4gKi9cbiAgVkVSSUZJRURfUExBTl9SRVFVSVJFRCA9ICdWRVJJRklFRF9QTEFOX1JFUVVJUkVEJyxcbiAgLyoqIEEgVmVyaWZpZWQtcHVibGlzaGVyIGFwcGxpY2F0aW9uIGZyb20gYW4gb3JnIHdpdGggbm8gRE5TLXZlcmlmaWVkIGRvbWFpbi4gKi9cbiAgVkVSSUZJRURfRE9NQUlOX1JFUVVJUkVEID0gJ1ZFUklGSUVEX0RPTUFJTl9SRVFVSVJFRCcsXG4gIC8qKiBBIFZlcmlmaWVkLXB1Ymxpc2hlciBhcHBsaWNhdGlvbiBmcm9tIGFuIG9yZyB3aG9zZSBvd25lciBoYXMgbm8gc2Vjb25kXG4gICAqICBmYWN0b3IgKHBhc3NrZXkgb3IgYXV0aGVudGljYXRvciBhcHApLiAqL1xuICBWRVJJRklFRF9PV05FUl9NRkFfUkVRVUlSRUQgPSAnVkVSSUZJRURfT1dORVJfTUZBX1JFUVVJUkVEJyxcbiAgLyoqIEEgcGx1Z2luIHJlZmVyZW5jZSBuYW1lcyBhbiBlY29zeXN0ZW0gbGlzdGluZyB0aGUgb3JnIGhhc24ndCBpbnN0YWxsZWQgKG9yXG4gICAqICB3aG9zZSBpbnN0YWxsIGlzIHBlbmRpbmcsIGRlbmllZCwgb3IgZG9lc24ndCBjb3ZlciB0aGUgdmVyc2lvbiBhc2tlZCBmb3I7XG4gICAqICBgZGV0YWlscy5yZWFzb25gKSDigJQgZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCAqL1xuICBQTFVHSU5fTk9UX0lOU1RBTExFRCA9ICdQTFVHSU5fTk9UX0lOU1RBTExFRCcsXG4gIC8qKiBUaGUgb3JnJ3MgY29uc3VtcHRpb24gcG9saWN5IHJlZnVzZXMgdGhlIGxpc3Rpbmc6IGl0cyB0aWVyIGlzbid0IGFsbG93ZWQsXG4gICAqICB0aGUgbGlzdGluZyBpcyBibG9ja2VkLCBvciBhbiBhZHZpc29yeSBibG9ja3MgdGhlIHZlcnNpb24gKGBkZXRhaWxzLnJlYXNvbmApLiAqL1xuICBQTFVHSU5fQkxPQ0tFRF9CWV9QT0xJQ1kgPSAnUExVR0lOX0JMT0NLRURfQllfUE9MSUNZJyxcbiAgLyoqIFRoZSBsaXN0aW5nIG9yIHZlcnNpb24gY2FuJ3QgYmUgdXNlZDogeWFua2VkLCBzdXNwZW5kZWQsIG9yIHBhdXNlZCBmb3IgbmV3XG4gICAqICBpbnN0YWxscyAoYGRldGFpbHMucmVhc29uYCkuICovXG4gIFBMVUdJTl9VTkFWQUlMQUJMRSA9ICdQTFVHSU5fVU5BVkFJTEFCTEUnLFxuICAvKiogQW4gYXV0by1jcmVhdGVkIHBsYWNlaG9sZGVyIHBsdWdpbiBjYW4ndCB0YWtlIHRoZSBuYW1lIG9mIGEgbGlzdGVkIHBsdWdpblxuICAgKiDigJQgaW5zdGFsbCB0aGUgbGlzdGluZyBpbnN0ZWFkLiAqL1xuICBQTFVHSU5fTkFNRV9MSVNURUQgPSAnUExVR0lOX05BTUVfTElTVEVEJyxcbiAgLyoqIEFuIGFub255bW91cyBzdWJtaXNzaW9uIG5hbWVzIGEgY29tbXVuaXR5IGxpc3RpbmcgYW5vdGhlciBzdWJtaXR0ZXIgb3ducyxcbiAgICogIGEgcmVzZXJ2ZWQgbmFtZSwgYW4gT2ZmaWNpYWwvVmVyaWZpZWQgbGlzdGluZydzIG5hbWUsIG9yIG9uZSBjb25mdXNhYmxlXG4gICAqICB3aXRoIGEgdG9wIGxpc3Rpbmc7IGBkZXRhaWxzLnJlYXNvbmAgc2F5cyB3aGljaC4gKi9cbiAgTkFNRV9UQUtFTiA9ICdOQU1FX1RBS0VOJyxcbiAgLyoqIEEgZmxhZ2dlZCBwbHVnaW4gdmVyc2lvbiAoYSByZXNjYW4gZm91bmQgZml4YWJsZSBDcml0aWNhbCBmaW5kaW5ncyBhYm92ZVxuICAgKiAgYFBMVUdJTl9WVUxOX01BWF9DUklUSUNBTGApIHdhcyBwaW5uZWQgZXhhY3RseSB3aGlsZVxuICAgKiAgYFBMVUdJTl9CTE9DS19PTl9ORVdfQ1JJVElDQUxgIGlzIG9uOyB0aGUgbWVzc2FnZSBuYW1lcyB0aGUgZml4LiBSYW5nZXNcbiAgICogIGFuZCB0aGUgZGVmYXVsdCBza2lwIGZsYWdnZWQgdmVyc2lvbnMgaW5zdGVhZCAoZG9jcy9wbHVnaW4taW5zdGFsbGluZy5tZCkuICovXG4gIFBMVUdJTl9WRVJTSU9OX1ZVTE5fQkxPQ0tFRCA9ICdQTFVHSU5fVkVSU0lPTl9WVUxOX0JMT0NLRUQnLFxuXG4gIC8vIFBsdWdpbiBidWlsZCBvdXRjb21lcyAoNDIyKSDigJQgdGVybWluYWwgYnVpbGQgZmFpbHVyZXMsIHJlcG9ydGVkIG9uIHRoZSBidWlsZFxuICAvLyBzdHJlYW0gYW5kIGluIHRoZSBidWlsZCdzIGZhaWx1cmUgcmVjb3JkLCBuZXZlciBhbnN3ZXJlZCBvbiBhIHJlcXVlc3QuXG4gIC8qKiBUaGUgYnVpbHQgaW1hZ2UgY291bGQgbm90IGJlIHZ1bG5lcmFiaWxpdHktc2Nhbm5lZCBhZnRlciBldmVyeSByZXRyeSwgc29cbiAgICogIG5vdGhpbmcgd2FzIHBlcnNpc3RlZCAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCkuICovXG4gIElNQUdFX1NDQU5fVU5BVkFJTEFCTEUgPSAnSU1BR0VfU0NBTl9VTkFWQUlMQUJMRScsXG4gIC8qKiBUaGUgYnVpbHQgaW1hZ2UgaGFzIG1vcmUgZml4YWJsZSBDcml0aWNhbCBmaW5kaW5ncyB0aGFuIHRoZSBwbGF0Zm9ybVxuICAgKiAgZmxvb3IgYFBMVUdJTl9WVUxOX01BWF9DUklUSUNBTGA7IHRoZSBtZXNzYWdlIGxpc3RzIHRoZW0gd2l0aCB0aGVpciBmaXhlcy4gKi9cbiAgUExVR0lOX1ZVTE5fR0FURSA9ICdQTFVHSU5fVlVMTl9HQVRFJyxcblxuICAvLyBCaWxsaW5nIGVycm9yc1xuICBQQVlNRU5UX01FVEhPRF9SRVFVSVJFRCA9ICdQQVlNRU5UX01FVEhPRF9SRVFVSVJFRCcsIC8vIDQwMlxuICBESVNDT1VOVF9DRUlMSU5HX0VYQ0VFREVEID0gJ0RJU0NPVU5UX0NFSUxJTkdfRVhDRUVERUQnLCAvLyA0MDBcbiAgRElTQ09VTlRfTk9UX0ZPVU5EID0gJ0RJU0NPVU5UX05PVF9GT1VORCcsIC8vIDQwNFxuICBESVNDT1VOVF9JTkFDVElWRSA9ICdESVNDT1VOVF9JTkFDVElWRScsIC8vIDQwOVxuICBQTEFOX09WRVJfQ0FQID0gJ1BMQU5fT1ZFUl9DQVAnLCAvLyA0MDlcbiAgQURET05fT1ZFUl9DQVAgPSAnQURET05fT1ZFUl9DQVAnLCAvLyA0MDlcblxuICAvLyBTZXJ2ZXIgZXJyb3JzICg1MDApXG4gIElOVEVSTkFMX0VSUk9SID0gJ0lOVEVSTkFMX0VSUk9SJyxcbiAgREFUQUJBU0VfRVJST1IgPSAnREFUQUJBU0VfRVJST1InLFxuXG4gIC8vIE5vdCBpbXBsZW1lbnRlZCAoNTAxKSDigJQgdGhlIGNvbmZpZ3VyZWQgcHJvdmlkZXIgaGFzIG5vIHN1Y2ggY2FwYWJpbGl0eVxuICBOT1RfSU1QTEVNRU5URUQgPSAnTk9UX0lNUExFTUVOVEVEJyxcblxuICAvLyBTZXJ2aWNlIHVuYXZhaWxhYmxlICg1MDMpXG4gIFNFUlZJQ0VfVU5BVkFJTEFCTEUgPSAnU0VSVklDRV9VTkFWQUlMQUJMRScsXG4gIENPTVBMSUFOQ0VfU0VSVklDRV9VTkFWQUlMQUJMRSA9ICdDT01QTElBTkNFX1NFUlZJQ0VfVU5BVkFJTEFCTEUnLFxufVxuXG4vKipcbiAqIE1hcHMgZXJyb3IgY29kZXMgdG8gdGhlaXIgZGVmYXVsdCBIVFRQIHN0YXR1cyBjb2Rlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IEVycm9yQ29kZVN0YXR1czogUmVjb3JkPEVycm9yQ29kZSwgbnVtYmVyPiA9IHtcbiAgW0Vycm9yQ29kZS5VTkFVVEhPUklaRURdOiA0MDEsXG4gIFtFcnJvckNvZGUuVE9LRU5fRVhQSVJFRF06IDQwMSxcbiAgW0Vycm9yQ29kZS5UT0tFTl9JTlZBTElEXTogNDAxLFxuICBbRXJyb3JDb2RlLlRPS0VOX01JU1NJTkddOiA0MDEsXG4gIFtFcnJvckNvZGUuVE9LRU5fUkVWT0tFRF06IDQwMSxcbiAgW0Vycm9yQ29kZS5NRkFfUkVRVUlSRURdOiA0MDEsXG4gIFtFcnJvckNvZGUuUkVBVVRIX1JFUVVJUkVEXTogNDAxLFxuICBbRXJyb3JDb2RlLklOU1VGRklDSUVOVF9QRVJNSVNTSU9OU106IDQwMyxcbiAgW0Vycm9yQ29kZS5TWVNURU1fT1JHX1JFUVVJUkVEXTogNDAzLFxuICBbRXJyb3JDb2RlLlBVQkxJU0hFUl9URVJNU19SRVFVSVJFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QVUJMSVNIRVJfUk9PVF9PUkdfUkVRVUlSRURdOiA0MDMsXG4gIFtFcnJvckNvZGUuUFVCTElTSEVSX1NVU1BFTkRFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fUFVCTElTSElOR19ESVNBQkxFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fUkVWSUVXU19ESVNBQkxFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5SRVZJRVdfU0VMRl9QUk9NT1RJT05dOiA0MDMsXG4gIFtFcnJvckNvZGUuU0VQQVJBVElPTl9PRl9EVVRJRVNdOiA0MDMsXG4gIFtFcnJvckNvZGUuSFVNQU5fU0VTU0lPTl9SRVFVSVJFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5NRkFfRU5ST0xMTUVOVF9SRVFVSVJFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5JTVBFUlNPTkFUSU9OX1JFQURfT05MWV06IDQwMyxcbiAgW0Vycm9yQ29kZS5PUkdfTUlTTUFUQ0hdOiA0MDMsXG4gIFtFcnJvckNvZGUuQ09NUExJQU5DRV9WSU9MQVRJT05dOiA0MDMsXG4gIFtFcnJvckNvZGUuTk9UX0ZPVU5EXTogNDA0LFxuICBbRXJyb3JDb2RlLk9SR19OT1RfRk9VTkRdOiA0MDQsXG4gIFtFcnJvckNvZGUuU1VCTUlTU0lPTlNfRElTQUJMRURdOiA0MDQsXG4gIFtFcnJvckNvZGUuVkFMSURBVElPTl9FUlJPUl06IDQwMCxcbiAgW0Vycm9yQ29kZS5NSVNTSU5HX1JFUVVJUkVEX0ZJRUxEXTogNDAwLFxuICBbRXJyb3JDb2RlLlBST09GX09GX1dPUktfSU5WQUxJRF06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9VTktOT1dOX1BBVEhdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfQ1lDTEVdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfUEFSU0VfRVJST1JdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfVFlQRV9NSVNNQVRDSF06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9TRUNSRVRTX1JFU0VSVkVEXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX0NPTlRSQUNUX1ZJT0xBVElPTl06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9TSVpFX0VYQ0VFREVEXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX1ZBTElEQVRJT05fRkFJTEVEXTogNDAwLFxuICBbRXJyb3JDb2RlLlFVT1RBX0VYQ0VFREVEXTogNDI5LFxuICBbRXJyb3JDb2RlLlJBVEVfTElNSVRfRVhDRUVERURdOiA0MjksXG4gIFtFcnJvckNvZGUuU1VCTUlTU0lPTl9MSU1JVF06IDQyOSxcbiAgW0Vycm9yQ29kZS5QQVlMT0FEX1RPT19MQVJHRV06IDQxMyxcbiAgW0Vycm9yQ29kZS5DT05GTElDVF06IDQwOSxcbiAgW0Vycm9yQ29kZS5EVVBMSUNBVEVfRU5UUlldOiA0MDksXG4gIFtFcnJvckNvZGUuU0NBTl9DT05GTElDVF06IDQwOSxcbiAgW0Vycm9yQ29kZS5JTUFHRV9WRVJJRklDQVRJT05fRkFJTEVEXTogNDA5LFxuICBbRXJyb3JDb2RlLlBMVUdJTl9WRVJTSU9OX0ZST1pFTl06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fVkVSU0lPTl9JTl9VU0VdOiA0MDksXG4gIFtFcnJvckNvZGUuUExVR0lOX0RJR0VTVF9NSVNNQVRDSF06IDQwOSxcbiAgW0Vycm9yQ29kZS5QVUJMSVNIRVJfUkVRVUlSRURdOiA0MDksXG4gIFtFcnJvckNvZGUuUFVCTElTSEVSX0hBTkRMRV9SRVNFUlZFRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5QVUJMSVNIX0dBVEVfRkFJTEVEXTogNDA5LFxuICBbRXJyb3JDb2RlLlZFUklGSUVEX1BMQU5fUkVRVUlSRURdOiA0MDMsXG4gIFtFcnJvckNvZGUuVkVSSUZJRURfRE9NQUlOX1JFUVVJUkVEXTogNDA5LFxuICBbRXJyb3JDb2RlLlZFUklGSUVEX09XTkVSX01GQV9SRVFVSVJFRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fTk9UX0lOU1RBTExFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fQkxPQ0tFRF9CWV9QT0xJQ1ldOiA0MDMsXG4gIFtFcnJvckNvZGUuUExVR0lOX1VOQVZBSUxBQkxFXTogNDA5LFxuICBbRXJyb3JDb2RlLlBMVUdJTl9OQU1FX0xJU1RFRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5OQU1FX1RBS0VOXTogNDA5LFxuICBbRXJyb3JDb2RlLlBMVUdJTl9WRVJTSU9OX1ZVTE5fQkxPQ0tFRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5JTUFHRV9TQ0FOX1VOQVZBSUxBQkxFXTogNDIyLFxuICBbRXJyb3JDb2RlLlBMVUdJTl9WVUxOX0dBVEVdOiA0MjIsXG4gIFtFcnJvckNvZGUuUEFZTUVOVF9NRVRIT0RfUkVRVUlSRURdOiA0MDIsXG4gIFtFcnJvckNvZGUuRElTQ09VTlRfQ0VJTElOR19FWENFRURFRF06IDQwMCxcbiAgW0Vycm9yQ29kZS5ESVNDT1VOVF9OT1RfRk9VTkRdOiA0MDQsXG4gIFtFcnJvckNvZGUuRElTQ09VTlRfSU5BQ1RJVkVdOiA0MDksXG4gIFtFcnJvckNvZGUuUExBTl9PVkVSX0NBUF06IDQwOSxcbiAgW0Vycm9yQ29kZS5BRERPTl9PVkVSX0NBUF06IDQwOSxcbiAgW0Vycm9yQ29kZS5JTlRFUk5BTF9FUlJPUl06IDUwMCxcbiAgW0Vycm9yQ29kZS5EQVRBQkFTRV9FUlJPUl06IDUwMCxcbiAgW0Vycm9yQ29kZS5OT1RfSU1QTEVNRU5URURdOiA1MDEsXG4gIFtFcnJvckNvZGUuU0VSVklDRV9VTkFWQUlMQUJMRV06IDUwMyxcbiAgW0Vycm9yQ29kZS5DT01QTElBTkNFX1NFUlZJQ0VfVU5BVkFJTEFCTEVdOiA1MDMsXG59O1xuXG4vKipcbiAqIEdldCB0aGUgSFRUUCBzdGF0dXMgY29kZSBmb3IgYW4gZXJyb3IgY29kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXR1c0ZvckVycm9yQ29kZShjb2RlOiBFcnJvckNvZGUpOiBudW1iZXIge1xuICByZXR1cm4gRXJyb3JDb2RlU3RhdHVzW2NvZGVdID8/IDUwMDtcbn1cbiJdfQ==
|
|
260
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItY29kZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvZXJyb3ItY29kZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFOLElBQVksU0ErS1g7QUEvS0QsV0FBWSxTQUFTO0lBQ25CLDhCQUE4QjtJQUM5QiwwQ0FBNkIsQ0FBQTtJQUM3Qiw0Q0FBK0IsQ0FBQTtJQUMvQiw0Q0FBK0IsQ0FBQTtJQUMvQiw0Q0FBK0IsQ0FBQTtJQUMvQiw0Q0FBK0IsQ0FBQTtJQUMvQjs7O3VEQUdtRDtJQUNuRCwwQ0FBNkIsQ0FBQTtJQUM3Qjs4RUFDMEU7SUFDMUUsZ0RBQW1DLENBQUE7SUFFbkMsNkJBQTZCO0lBQzdCLGtFQUFxRCxDQUFBO0lBQ3JEO3dFQUNvRTtJQUNwRSw4REFBaUQsQ0FBQTtJQUNqRDtvRUFDZ0U7SUFDaEUsZ0VBQW1ELENBQUE7SUFDbkQ7a0VBQzhEO0lBQzlELGdFQUFtRCxDQUFBO0lBQ25EOztvRkFFZ0Y7SUFDaEYsd0RBQTJDLENBQUE7SUFDM0M7d0VBQ29FO0lBQ3BFLGtFQUFxRCxDQUFBO0lBQ3JEOzJCQUN1QjtJQUN2Qix3RUFBMkQsQ0FBQTtJQUMzRCxvREFBb0Q7SUFDcEQsd0RBQTJDLENBQUE7SUFDM0Msd0ZBQXdGO0lBQ3hGLHNFQUF5RCxDQUFBO0lBQ3pEO3lEQUNxRDtJQUNyRCxnRUFBbUQsQ0FBQTtJQUNuRDsyREFDdUQ7SUFDdkQsNERBQStDLENBQUE7SUFDL0M7OzJDQUV1QztJQUN2QywwREFBNkMsQ0FBQTtJQUM3QywwQ0FBNkIsQ0FBQTtJQUM3QiwwREFBNkMsQ0FBQTtJQUU3Qyx5QkFBeUI7SUFDekIsb0NBQXVCLENBQUE7SUFDdkIsNENBQStCLENBQUE7SUFDL0I7OytEQUUyRDtJQUMzRCwwREFBNkMsQ0FBQTtJQUU3QywwQkFBMEI7SUFDMUIsa0RBQXFDLENBQUE7SUFDckMsOERBQWlELENBQUE7SUFDakQ7dURBQ21EO0lBQ25ELDREQUErQyxDQUFBO0lBQy9DLDREQUErQyxDQUFBO0lBQy9DLDhDQUFpQyxDQUFBO0lBQ2pDLDBEQUE2QyxDQUFBO0lBQzdDLDhEQUFpRCxDQUFBO0lBQ2pELG9FQUF1RCxDQUFBO0lBQ3ZELHdFQUEyRCxDQUFBO0lBQzNELDhEQUFpRCxDQUFBO0lBQ2pELHNFQUF5RCxDQUFBO0lBRXpELGdDQUFnQztJQUNoQyw4Q0FBaUMsQ0FBQTtJQUNqQyx3REFBMkMsQ0FBQTtJQUMzQzswQ0FDc0M7SUFDdEMsa0RBQXFDLENBQUE7SUFFckMsdUJBQXVCO0lBQ3ZCLG9EQUF1QyxDQUFBO0lBRXZDLHdCQUF3QjtJQUN4QixrQ0FBcUIsQ0FBQTtJQUNyQixnREFBbUMsQ0FBQTtJQUNuQyw0Q0FBK0IsQ0FBQTtJQUMvQjs7d0VBRW9FO0lBQ3BFLG9FQUF1RCxDQUFBO0lBQ3ZEOzt1RUFFbUU7SUFDbkUsNERBQStDLENBQUE7SUFDL0M7bUZBQytFO0lBQy9FLDREQUErQyxDQUFBO0lBQy9DOzRFQUN3RTtJQUN4RSw4REFBaUQsQ0FBQTtJQUNqRDtpRUFDNkQ7SUFDN0Qsc0RBQXlDLENBQUE7SUFDekM7d0VBQ29FO0lBQ3BFLG9FQUF1RCxDQUFBO0lBQ3ZEO3NGQUNrRjtJQUNsRix3REFBMkMsQ0FBQTtJQUMzQztxRkFDaUY7SUFDakYsOERBQWlELENBQUE7SUFDakQsZ0ZBQWdGO0lBQ2hGLGtFQUFxRCxDQUFBO0lBQ3JEO2lEQUM2QztJQUM3Qyx3RUFBMkQsQ0FBQTtJQUMzRDs7d0RBRW9EO0lBQ3BELDBEQUE2QyxDQUFBO0lBQzdDO3dGQUNvRjtJQUNwRixrRUFBcUQsQ0FBQTtJQUNyRDt1Q0FDbUM7SUFDbkMsc0RBQXlDLENBQUE7SUFDekM7d0NBQ29DO0lBQ3BDLHNEQUF5QyxDQUFBO0lBQ3pDOzsyREFFdUQ7SUFDdkQsc0NBQXlCLENBQUE7SUFDekI7OztxRkFHaUY7SUFDakYsd0VBQTJELENBQUE7SUFFM0QsK0VBQStFO0lBQy9FLHlFQUF5RTtJQUN6RTs2REFDeUQ7SUFDekQsOERBQWlELENBQUE7SUFDakQ7cUZBQ2lGO0lBQ2pGLGtEQUFxQyxDQUFBO0lBQ3JDO3lFQUNxRTtJQUNyRSx3REFBMkMsQ0FBQTtJQUUzQyxpQkFBaUI7SUFDakIsZ0VBQW1ELENBQUE7SUFDbkQsb0VBQXVELENBQUE7SUFDdkQsc0RBQXlDLENBQUE7SUFDekMsb0RBQXVDLENBQUE7SUFDdkMsNENBQStCLENBQUE7SUFDL0IsOENBQWlDLENBQUE7SUFFakMsc0JBQXNCO0lBQ3RCLDhDQUFpQyxDQUFBO0lBQ2pDLDhDQUFpQyxDQUFBO0lBRWpDLHlFQUF5RTtJQUN6RSxnREFBbUMsQ0FBQTtJQUVuQyw0QkFBNEI7SUFDNUIsd0RBQTJDLENBQUE7SUFDM0MsOEVBQWlFLENBQUE7QUFDbkUsQ0FBQyxFQS9LVyxTQUFTLEtBQVQsU0FBUyxRQStLcEI7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBOEI7SUFDeEQsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRztJQUM3QixDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHO0lBQzlCLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUc7SUFDOUIsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRztJQUM5QixDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHO0lBQzlCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUc7SUFDN0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEVBQUUsR0FBRztJQUNoQyxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLEdBQUc7SUFDekMsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsRUFBRSxHQUFHO0lBQ3BDLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDLEVBQUUsR0FBRztJQUN6QyxDQUFDLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLEdBQUc7SUFDNUMsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsRUFBRSxHQUFHO0lBQ3BDLENBQUMsU0FBUyxDQUFDLDBCQUEwQixDQUFDLEVBQUUsR0FBRztJQUMzQyxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLEdBQUc7SUFDeEMsQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsRUFBRSxHQUFHO0lBQ3RDLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsR0FBRztJQUNyQyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLEdBQUc7SUFDdkMsQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsRUFBRSxHQUFHO0lBQ3hDLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsR0FBRztJQUN4QyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHO0lBQzdCLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsR0FBRztJQUNyQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHO0lBQzFCLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUc7SUFDOUIsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsRUFBRSxHQUFHO0lBQ3JDLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsR0FBRztJQUNqQyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLEdBQUc7SUFDdkMsQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsRUFBRSxHQUFHO0lBQ3RDLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsR0FBRztJQUN0QyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRSxHQUFHO0lBQy9CLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsR0FBRztJQUNyQyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLEdBQUc7SUFDdkMsQ0FBQyxTQUFTLENBQUMseUJBQXlCLENBQUMsRUFBRSxHQUFHO0lBQzFDLENBQUMsU0FBUyxDQUFDLDJCQUEyQixDQUFDLEVBQUUsR0FBRztJQUM1QyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLEdBQUc7SUFDdkMsQ0FBQyxTQUFTLENBQUMsMEJBQTBCLENBQUMsRUFBRSxHQUFHO0lBQzNDLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUc7SUFDL0IsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsRUFBRSxHQUFHO0lBQ3BDLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsR0FBRztJQUNqQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEdBQUc7SUFDbEMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRztJQUN6QixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsRUFBRSxHQUFHO0lBQ2hDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUc7SUFDOUIsQ0FBQyxTQUFTLENBQUMseUJBQXlCLENBQUMsRUFBRSxHQUFHO0lBQzFDLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsR0FBRztJQUN0QyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEdBQUc7SUFDdEMsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsRUFBRSxHQUFHO0lBQ3ZDLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsR0FBRztJQUNuQyxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLEdBQUc7SUFDMUMsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsRUFBRSxHQUFHO0lBQ3BDLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsR0FBRztJQUN2QyxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLEdBQUc7SUFDekMsQ0FBQyxTQUFTLENBQUMsMkJBQTJCLENBQUMsRUFBRSxHQUFHO0lBQzVDLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsR0FBRztJQUNyQyxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLEdBQUc7SUFDekMsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsRUFBRSxHQUFHO0lBQ25DLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsR0FBRztJQUNuQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxHQUFHO0lBQzNCLENBQUMsU0FBUyxDQUFDLDJCQUEyQixDQUFDLEVBQUUsR0FBRztJQUM1QyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLEdBQUc7SUFDdkMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxHQUFHO0lBQ2pDLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsR0FBRztJQUNwQyxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLEdBQUc7SUFDeEMsQ0FBQyxTQUFTLENBQUMseUJBQXlCLENBQUMsRUFBRSxHQUFHO0lBQzFDLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsR0FBRztJQUNuQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEdBQUc7SUFDbEMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRztJQUM5QixDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRSxHQUFHO0lBQy9CLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUc7SUFDL0IsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUUsR0FBRztJQUMvQixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsRUFBRSxHQUFHO0lBQ2hDLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsR0FBRztJQUNwQyxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLEdBQUc7Q0FDaEQsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLElBQWU7SUFDbkQsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBTdGFuZGFyZGl6ZWQgZXJyb3IgY29kZXMgdXNlZCBhY3Jvc3MgYWxsIEFQSSBtaWNyb3NlcnZpY2VzLlxuICogVXNlIHRoZXNlIGNvZGVzIGluIGVycm9yIHJlc3BvbnNlcyBmb3IgY29uc2lzdGVudCBjbGllbnQgaGFuZGxpbmcuXG4gKlxuICogRWFjaCBIVFRQIHN0YXR1cyBjYXRlZ29yeSBoYXMgb25lIHByaW1hcnkgY29kZS4gVXNlIHRoZSBgZGV0YWlsc2BcbiAqIGZpZWxkIGluIGVycm9yIHJlc3BvbnNlcyBmb3Igc3ViLXR5cGUgaW5mb3JtYXRpb24gKGUuZy4gd2hpY2ggcXVvdGFcbiAqIHdhcyBleGNlZWRlZCwgd2hpY2ggZmllbGQgZmFpbGVkIHZhbGlkYXRpb24pLlxuICovXG5leHBvcnQgZW51bSBFcnJvckNvZGUge1xuICAvLyBBdXRoZW50aWNhdGlvbiBlcnJvcnMgKDQwMSlcbiAgVU5BVVRIT1JJWkVEID0gJ1VOQVVUSE9SSVpFRCcsXG4gIFRPS0VOX0VYUElSRUQgPSAnVE9LRU5fRVhQSVJFRCcsXG4gIFRPS0VOX0lOVkFMSUQgPSAnVE9LRU5fSU5WQUxJRCcsXG4gIFRPS0VOX01JU1NJTkcgPSAnVE9LRU5fTUlTU0lORycsXG4gIFRPS0VOX1JFVk9LRUQgPSAnVE9LRU5fUkVWT0tFRCcsXG4gIC8qKiBUaGUgc2Vzc2lvbiBpcyBub3QgTUZBLWdyYWRlIChgYWFsYCBiZWxvdyB0aGUgcm91dGUncyBgbWluQXNzdXJhbmNlYCkuXG4gICAqICBUaGUgY2xpZW50IHNlbmRzIHRoZSBwZXJzb24gdG8gZW5yb2wgLyBzaWduIGluIGFnYWluIHdpdGggYSBzZWNvbmRcbiAgICogIGZhY3RvciDigJQgaXQgbXVzdCBOT1Qgc2lnbiB0aGVtIG91dCBvciByZXRyeSBhIHRva2VuIHJlZnJlc2gsIHNpbmNlIGFcbiAgICogIHJlZnJlc2ggY2FuIG5ldmVyIHJhaXNlIHRoZSBhc3N1cmFuY2UgbGV2ZWwuICovXG4gIE1GQV9SRVFVSVJFRCA9ICdNRkFfUkVRVUlSRUQnLFxuICAvKiogVGhlIHNlc3Npb24gaXMgTUZBLWdyYWRlIGJ1dCBpdHMgYGF1dGhfdGltZWAgaXMgb2xkZXIgdGhhbiB0aGUgcm91dGUnc1xuICAgKiAgYG1heEFnZWAg4oCUIHRoZSBwZXJzb24gbXVzdCBhdXRoZW50aWNhdGUgYWdhaW4gKG5vdCBtZXJlbHkgcmVmcmVzaCkuICovXG4gIFJFQVVUSF9SRVFVSVJFRCA9ICdSRUFVVEhfUkVRVUlSRUQnLFxuXG4gIC8vIEF1dGhvcml6YXRpb24gZXJyb3JzICg0MDMpXG4gIElOU1VGRklDSUVOVF9QRVJNSVNTSU9OUyA9ICdJTlNVRkZJQ0lFTlRfUEVSTUlTU0lPTlMnLFxuICAvKiogQSBtYWNoaW5lIGNyZWRlbnRpYWwgKHNlcnZpY2UgcHJpbmNpcGFsLCBvcmcgc2VydmljZSBhY2NvdW50LCBvciBhblxuICAgKiAgZXhjaGFuZ2VkIGFjY2VzcyBrZXkpIHJlYWNoZWQgYSByb3V0ZSB0aGF0IHJlcXVpcmVzIGEgcGVyc29uLiAqL1xuICBIVU1BTl9TRVNTSU9OX1JFUVVJUkVEID0gJ0hVTUFOX1NFU1NJT05fUkVRVUlSRUQnLFxuICAvKiogQSBib290c3RyYXAtYWRtaW4gZW5yb2xtZW50IHNlc3Npb24gKGBtZmFFbnJvbGxtZW50UGVuZGluZ2ApIHJlYWNoZWQgYVxuICAgKiAgcm91dGUgb3V0c2lkZSB0aGUgZW5yb2xtZW50IC8gc2lnbi1vdXQgLyBzZXR1cCBhbGxvd2xpc3QuICovXG4gIE1GQV9FTlJPTExNRU5UX1JFUVVJUkVEID0gJ01GQV9FTlJPTExNRU5UX1JFUVVJUkVEJyxcbiAgLyoqIEEgcmVhZC1vbmx5IGltcGVyc29uYXRpb24gdG9rZW4gKGBpbXBlcnNvbmF0aW9uUmVhZE9ubHlgKSBhdHRlbXB0ZWQgYVxuICAgKiAgc3RhdGUtY2hhbmdpbmcgcmVxdWVzdCAoYW55dGhpbmcgYnV0IEdFVC9IRUFEL09QVElPTlMpLiAqL1xuICBJTVBFUlNPTkFUSU9OX1JFQURfT05MWSA9ICdJTVBFUlNPTkFUSU9OX1JFQURfT05MWScsXG4gIC8qKiBBIHBsdWdpbi1lY29zeXN0ZW0gZ292ZXJuYW5jZSByb3V0ZSAoZG9jcy9ydW5ib29rcy9lY29zeXN0ZW0tbW9kZXJhdGlvbi5tZClcbiAgICogIHdhcyBjYWxsZWQgZnJvbSBhbiBhY3RpdmUgb3JnIG90aGVyIHRoYW4gdGhlIHN5c3RlbSBvcmcg4oCUIGEgdG9rZW4gbWludGVkIGluXG4gICAqICBhIHRlbmFudCBvcmcgaXMgcmVmdXNlZCBldmVuIGZvciB0aGUgc2FtZSB1c2VyLiBTd2l0Y2ggdG8gdGhlIHN5c3RlbSBvcmcuICovXG4gIFNZU1RFTV9PUkdfUkVRVUlSRUQgPSAnU1lTVEVNX09SR19SRVFVSVJFRCcsXG4gIC8qKiBUaGUgcHVibGlzaGVyIGhhc24ndCBhY2NlcHRlZCB0aGUgQ1VSUkVOVCBwdWJsaXNoZXIgdGVybXMgdmVyc2lvbiwgc28gaXRcbiAgICogIGNhbid0IHN1Ym1pdCBuZXcgcmVxdWVzdHMgKGV4aXN0aW5nIGxpc3RpbmdzIGFyZSB1bmFmZmVjdGVkKS4gKi9cbiAgUFVCTElTSEVSX1RFUk1TX1JFUVVJUkVEID0gJ1BVQkxJU0hFUl9URVJNU19SRVFVSVJFRCcsXG4gIC8qKiBQdWJsaXNoaW5nIGlzIGRvbmUgZnJvbSB0aGUgUk9PVCBvcmc7IGEgdGVhbSBvcmcgY2FuJ3Qgb3duIGEgcHVibGlzaGVyIG9yXG4gICAqICBzdWJtaXQgcmVxdWVzdHMuICovXG4gIFBVQkxJU0hFUl9ST09UX09SR19SRVFVSVJFRCA9ICdQVUJMSVNIRVJfUk9PVF9PUkdfUkVRVUlSRUQnLFxuICAvKiogVGhlIHB1Ymxpc2hlciBpcyBzdXNwZW5kZWQgYnkgdGhlIHN5c3RlbSBvcmcuICovXG4gIFBVQkxJU0hFUl9TVVNQRU5ERUQgPSAnUFVCTElTSEVSX1NVU1BFTkRFRCcsXG4gIC8qKiBUZW5hbnQgcHVibGlzaGluZyBpcyBzd2l0Y2hlZCBvZmYgb24gdGhpcyBpbnN0YW5jZSAoYFBMVUdJTl9QVUJMSVNISU5HX0VOQUJMRURgKS4gKi9cbiAgUExVR0lOX1BVQkxJU0hJTkdfRElTQUJMRUQgPSAnUExVR0lOX1BVQkxJU0hJTkdfRElTQUJMRUQnLFxuICAvKiogUmV2aWV3IHdyaXRlcyBhcmUgc3dpdGNoZWQgb2ZmIG9uIHRoaXMgaW5zdGFuY2UgKGBQTFVHSU5fUkVWSUVXU19FTkFCTEVEYCk6XG4gICAqICByZXZpZXdzIHN0YXkgcmVhZGFibGUsIG5vdGhpbmcgbmV3IGlzIHdyaXR0ZW4uICovXG4gIFBMVUdJTl9SRVZJRVdTX0RJU0FCTEVEID0gJ1BMVUdJTl9SRVZJRVdTX0RJU0FCTEVEJyxcbiAgLyoqIEEgbWVtYmVyIG9mIHRoZSBwdWJsaXNoZXIncyBvd24gb3JnYW5pemF0aW9uIHRyaWVkIHRvIHJldmlldyAob3Igdm90ZSBvbiBhXG4gICAqICByZXZpZXcgb2YpIG9uZSBvZiBpdHMgbGlzdGluZ3MgKHNlbGYtcHJvbW90aW9uKS4gKi9cbiAgUkVWSUVXX1NFTEZfUFJPTU9USU9OID0gJ1JFVklFV19TRUxGX1BST01PVElPTicsXG4gIC8qKiBTZXBhcmF0aW9uIG9mIGR1dGllczogdGhlIGNhbGxlciBtYXkgbm90IGRlY2lkZSB0aGlzIHJlcXVlc3Qg4oCUXG4gICAqICBpdCBjYW1lIGZyb20gYW4gb3JnIHRoZXkgYmVsb25nIHRvLCB0aGV5IHVwbG9hZGVkIHRoZSB2ZXJzaW9uLCBvciB0aGV5XG4gICAqICBnYXZlIHRoZSBmaXJzdCBvZiB0d28gYXBwcm92YWxzLiAqL1xuICBTRVBBUkFUSU9OX09GX0RVVElFUyA9ICdTRVBBUkFUSU9OX09GX0RVVElFUycsXG4gIE9SR19NSVNNQVRDSCA9ICdPUkdfTUlTTUFUQ0gnLFxuICBDT01QTElBTkNFX1ZJT0xBVElPTiA9ICdDT01QTElBTkNFX1ZJT0xBVElPTicsXG5cbiAgLy8gTm90IGZvdW5kIGVycm9ycyAoNDA0KVxuICBOT1RfRk9VTkQgPSAnTk9UX0ZPVU5EJyxcbiAgT1JHX05PVF9GT1VORCA9ICdPUkdfTk9UX0ZPVU5EJyxcbiAgLyoqIFRoZSBhbm9ueW1vdXMgcGx1Z2luIHN1Ym1pc3Npb24gQVBJIGlzIG9mZiBvbiB0aGlzIGluc3RhbmNlXG4gICAqICAoYEFOT05ZTU9VU19TVUJNSVNTSU9OU19FTkFCTEVEYCwgb3Igb3V0Ym91bmQgZW1haWwgaXNuJ3QgY29uZmlndXJlZCkg4oCUXG4gICAqICBhbnN3ZXJlZCBhcyBhIHBsYWluIDQwNCAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCkuICovXG4gIFNVQk1JU1NJT05TX0RJU0FCTEVEID0gJ1NVQk1JU1NJT05TX0RJU0FCTEVEJyxcblxuICAvLyBWYWxpZGF0aW9uIGVycm9ycyAoNDAwKVxuICBWQUxJREFUSU9OX0VSUk9SID0gJ1ZBTElEQVRJT05fRVJST1InLFxuICBNSVNTSU5HX1JFUVVJUkVEX0ZJRUxEID0gJ01JU1NJTkdfUkVRVUlSRURfRklFTEQnLFxuICAvKiogQSBwcm9vZi1vZi13b3JrIGFuc3dlciBpcyBtaXNzaW5nLCBtYWxmb3JtZWQsIGV4cGlyZWQsIHRvbyBlYXN5LCB3cm9uZyxcbiAgICogIG9yIHdhcyBhbHJlYWR5IHVzZWQgKGFub255bW91cyBzdWJtaXNzaW9ucykuICovXG4gIFBST09GX09GX1dPUktfSU5WQUxJRCA9ICdQUk9PRl9PRl9XT1JLX0lOVkFMSUQnLFxuICBURU1QTEFURV9VTktOT1dOX1BBVEggPSAnVEVNUExBVEVfVU5LTk9XTl9QQVRIJyxcbiAgVEVNUExBVEVfQ1lDTEUgPSAnVEVNUExBVEVfQ1lDTEUnLFxuICBURU1QTEFURV9QQVJTRV9FUlJPUiA9ICdURU1QTEFURV9QQVJTRV9FUlJPUicsXG4gIFRFTVBMQVRFX1RZUEVfTUlTTUFUQ0ggPSAnVEVNUExBVEVfVFlQRV9NSVNNQVRDSCcsXG4gIFRFTVBMQVRFX1NFQ1JFVFNfUkVTRVJWRUQgPSAnVEVNUExBVEVfU0VDUkVUU19SRVNFUlZFRCcsXG4gIFRFTVBMQVRFX0NPTlRSQUNUX1ZJT0xBVElPTiA9ICdURU1QTEFURV9DT05UUkFDVF9WSU9MQVRJT04nLFxuICBURU1QTEFURV9TSVpFX0VYQ0VFREVEID0gJ1RFTVBMQVRFX1NJWkVfRVhDRUVERUQnLFxuICBURU1QTEFURV9WQUxJREFUSU9OX0ZBSUxFRCA9ICdURU1QTEFURV9WQUxJREFUSU9OX0ZBSUxFRCcsXG5cbiAgLy8gUXVvdGEvUmF0ZSBsaW1pdCBlcnJvcnMgKDQyOSlcbiAgUVVPVEFfRVhDRUVERUQgPSAnUVVPVEFfRVhDRUVERUQnLFxuICBSQVRFX0xJTUlUX0VYQ0VFREVEID0gJ1JBVEVfTElNSVRfRVhDRUVERUQnLFxuICAvKiogQW4gYW5vbnltb3VzIHN1Ym1pdHRlciAocGVyIHZlcmlmaWVkIGVtYWlsLCBvciBwZXIgY2xpZW50IElQKSBpcyBhdCB0aGVcbiAgICogIHJvbGxpbmcgMjQtaG91ciBzdWJtaXNzaW9uIGNhcC4gKi9cbiAgU1VCTUlTU0lPTl9MSU1JVCA9ICdTVUJNSVNTSU9OX0xJTUlUJyxcblxuICAvLyBQYXlsb2FkIGVycm9ycyAoNDEzKVxuICBQQVlMT0FEX1RPT19MQVJHRSA9ICdQQVlMT0FEX1RPT19MQVJHRScsXG5cbiAgLy8gQ29uZmxpY3QgZXJyb3JzICg0MDkpXG4gIENPTkZMSUNUID0gJ0NPTkZMSUNUJyxcbiAgRFVQTElDQVRFX0VOVFJZID0gJ0RVUExJQ0FURV9FTlRSWScsXG4gIFNDQU5fQ09ORkxJQ1QgPSAnU0NBTl9DT05GTElDVCcsXG4gIC8qKiBBIHBsdWdpbiBpbWFnZSdzIGNvc2lnbiBzaWduYXR1cmUgKG9yIGl0cyBzaWduZWQgU0JPTSBhdHRlc3RhdGlvbikgZGlkXG4gICAqICBub3QgdmVyaWZ5IGFnYWluc3QgdGhlIHBsYXRmb3JtJ3MgcGx1Z2luLXNpZ25pbmcga2V5IOKAlCB0aGUgcmVnaXN0cnlcbiAgICogIGNvbnRlbnQgbm8gbG9uZ2VyIG1hdGNoZXMgd2hhdCB0aGUgcGxhdGZvcm0gYnVpbHQgYW5kIHNpZ25lZC4gKi9cbiAgSU1BR0VfVkVSSUZJQ0FUSU9OX0ZBSUxFRCA9ICdJTUFHRV9WRVJJRklDQVRJT05fRkFJTEVEJyxcbiAgLyoqIFRoZSBwbHVnaW4gdmVyc2lvbiBpcyBpbW11dGFibGUg4oCUIGEgcHVibGlzaCByZXF1ZXN0IHJlZmVyZW5jZXMgaXRcbiAgICogIChgZnJvemVuX2F0YCBzZXQpIG9yIGl0IGlzIHB1Ymxpc2hlZCB0byBhIGxpc3Rpbmcg4oCUIHNvIGl0IGNhbiBiZSBuZWl0aGVyXG4gICAqICByZS11cGxvYWRlZCwgZWRpdGVkIG5vciBkZWxldGVkIChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS4gKi9cbiAgUExVR0lOX1ZFUlNJT05fRlJPWkVOID0gJ1BMVUdJTl9WRVJTSU9OX0ZST1pFTicsXG4gIC8qKiBUaGUgcGx1Z2luIHZlcnNpb24gaXMgcmVmZXJlbmNlZCBieSBvbmUgb2YgdGhlIG9yZydzIHBpcGVsaW5lcywgb3IgcHVibGlzaGVkXG4gICAqICB0byBhbiBlY29zeXN0ZW0gbGlzdGluZzsgZGVsZXRpbmcgaXQgbmVlZHMgYD9mb3JjZT10cnVlYCBwbHVzIGEgc3RlcC11cC4gKi9cbiAgUExVR0lOX1ZFUlNJT05fSU5fVVNFID0gJ1BMVUdJTl9WRVJTSU9OX0lOX1VTRScsXG4gIC8qKiBBIGZyZWV6ZSBuYW1lZCBhbiBpbWFnZSBkaWdlc3QgdGhhdCBpcyBub3QgdGhlIHZlcnNpb24ncyBzdG9yZWQgZGlnZXN0XG4gICAqICAoZmFpbCBjbG9zZWQ6IHdoYXQgd2FzIHJlcXVlc3RlZCBpcyBub3Qgd2hhdCB3b3VsZCBiZSBwdWJsaXNoZWQpLiAqL1xuICBQTFVHSU5fRElHRVNUX01JU01BVENIID0gJ1BMVUdJTl9ESUdFU1RfTUlTTUFUQ0gnLFxuICAvKiogQSBwdWJsaXNoIHJlcXVlc3QgbmVlZHMgdGhlIG9yZydzIHB1Ymxpc2hlciBwcm9maWxlLCB3aGljaCBkb2Vzbid0IGV4aXN0XG4gICAqICB5ZXQgKGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQpLiBDbGFpbSBhIGhhbmRsZSBmaXJzdC4gKi9cbiAgUFVCTElTSEVSX1JFUVVJUkVEID0gJ1BVQkxJU0hFUl9SRVFVSVJFRCcsXG4gIC8qKiBUaGUgcmVxdWVzdGVkIHB1Ymxpc2hlciBoYW5kbGUgaXMgcmVzZXJ2ZWQgKE9mZmljaWFsL1ZlcmlmaWVkXG4gICAqICByZXNlcnZhdGlvbnMsIGNvbmZ1c2FibGVzKS4gU3VibWl0IGEgYGNsYWltYCByZXF1ZXN0IGluc3RlYWQuICovXG4gIFBVQkxJU0hFUl9IQU5ETEVfUkVTRVJWRUQgPSAnUFVCTElTSEVSX0hBTkRMRV9SRVNFUlZFRCcsXG4gIC8qKiBBIHB1Ymxpc2ggcmVxdWVzdCBmYWlsZWQgYSBzdWJtaXQgZ2F0ZSAocHVibGljIHZpc2liaWxpdHksIFNQRFggbGljZW5zZSxcbiAgICogIFJFQURNRSwgc2lnbmF0dXJlLCBzY2FuLCB2dWxuZXJhYmlsaXR5IGdhdGUg4oCmKTsgYGRldGFpbHMuZ2F0ZXNgIGxpc3RzIHRoZW0uICovXG4gIFBVQkxJU0hfR0FURV9GQUlMRUQgPSAnUFVCTElTSF9HQVRFX0ZBSUxFRCcsXG4gIC8qKiBBIFZlcmlmaWVkLXB1Ymxpc2hlciBhcHBsaWNhdGlvbiAob3IgaXRzIGRlY2lzaW9uKSBmcm9tIGFuIG9yZyB3aG9zZSBwbGFuXG4gICAqICBsYWNrcyB0aGUgYHZlcmlmaWVkX3B1Ymxpc2hlcmAgZmVhdHVyZSAoVGVhbSssIGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQpLiAqL1xuICBWRVJJRklFRF9QTEFOX1JFUVVJUkVEID0gJ1ZFUklGSUVEX1BMQU5fUkVRVUlSRUQnLFxuICAvKiogQSBWZXJpZmllZC1wdWJsaXNoZXIgYXBwbGljYXRpb24gZnJvbSBhbiBvcmcgd2l0aCBubyBETlMtdmVyaWZpZWQgZG9tYWluLiAqL1xuICBWRVJJRklFRF9ET01BSU5fUkVRVUlSRUQgPSAnVkVSSUZJRURfRE9NQUlOX1JFUVVJUkVEJyxcbiAgLyoqIEEgVmVyaWZpZWQtcHVibGlzaGVyIGFwcGxpY2F0aW9uIGZyb20gYW4gb3JnIHdob3NlIG93bmVyIGhhcyBubyBzZWNvbmRcbiAgICogIGZhY3RvciAocGFzc2tleSBvciBhdXRoZW50aWNhdG9yIGFwcCkuICovXG4gIFZFUklGSUVEX09XTkVSX01GQV9SRVFVSVJFRCA9ICdWRVJJRklFRF9PV05FUl9NRkFfUkVRVUlSRUQnLFxuICAvKiogQSBwbHVnaW4gcmVmZXJlbmNlIG5hbWVzIGFuIGVjb3N5c3RlbSBsaXN0aW5nIHRoZSBvcmcgaGFzbid0IGluc3RhbGxlZCAob3JcbiAgICogIHdob3NlIGluc3RhbGwgaXMgcGVuZGluZywgZGVuaWVkLCBvciBkb2Vzbid0IGNvdmVyIHRoZSB2ZXJzaW9uIGFza2VkIGZvcjtcbiAgICogIGBkZXRhaWxzLnJlYXNvbmApIOKAlCBkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kICovXG4gIFBMVUdJTl9OT1RfSU5TVEFMTEVEID0gJ1BMVUdJTl9OT1RfSU5TVEFMTEVEJyxcbiAgLyoqIFRoZSBvcmcncyBjb25zdW1wdGlvbiBwb2xpY3kgcmVmdXNlcyB0aGUgbGlzdGluZzogaXRzIHRpZXIgaXNuJ3QgYWxsb3dlZCxcbiAgICogIHRoZSBsaXN0aW5nIGlzIGJsb2NrZWQsIG9yIGFuIGFkdmlzb3J5IGJsb2NrcyB0aGUgdmVyc2lvbiAoYGRldGFpbHMucmVhc29uYCkuICovXG4gIFBMVUdJTl9CTE9DS0VEX0JZX1BPTElDWSA9ICdQTFVHSU5fQkxPQ0tFRF9CWV9QT0xJQ1knLFxuICAvKiogVGhlIGxpc3Rpbmcgb3IgdmVyc2lvbiBjYW4ndCBiZSB1c2VkOiB5YW5rZWQsIHN1c3BlbmRlZCwgb3IgcGF1c2VkIGZvciBuZXdcbiAgICogIGluc3RhbGxzIChgZGV0YWlscy5yZWFzb25gKS4gKi9cbiAgUExVR0lOX1VOQVZBSUxBQkxFID0gJ1BMVUdJTl9VTkFWQUlMQUJMRScsXG4gIC8qKiBBbiBhdXRvLWNyZWF0ZWQgcGxhY2Vob2xkZXIgcGx1Z2luIGNhbid0IHRha2UgdGhlIG5hbWUgb2YgYSBsaXN0ZWQgcGx1Z2luXG4gICAqIOKAlCBpbnN0YWxsIHRoZSBsaXN0aW5nIGluc3RlYWQuICovXG4gIFBMVUdJTl9OQU1FX0xJU1RFRCA9ICdQTFVHSU5fTkFNRV9MSVNURUQnLFxuICAvKiogQW4gYW5vbnltb3VzIHN1Ym1pc3Npb24gbmFtZXMgYSBjb21tdW5pdHkgbGlzdGluZyBhbm90aGVyIHN1Ym1pdHRlciBvd25zLFxuICAgKiAgYSByZXNlcnZlZCBuYW1lLCBhbiBPZmZpY2lhbC9WZXJpZmllZCBsaXN0aW5nJ3MgbmFtZSwgb3Igb25lIGNvbmZ1c2FibGVcbiAgICogIHdpdGggYSB0b3AgbGlzdGluZzsgYGRldGFpbHMucmVhc29uYCBzYXlzIHdoaWNoLiAqL1xuICBOQU1FX1RBS0VOID0gJ05BTUVfVEFLRU4nLFxuICAvKiogQSBmbGFnZ2VkIHBsdWdpbiB2ZXJzaW9uIChhIHJlc2NhbiBmb3VuZCBmaXhhYmxlIENyaXRpY2FsIGZpbmRpbmdzIGFib3ZlXG4gICAqICBgUExVR0lOX1ZVTE5fTUFYX0NSSVRJQ0FMYCkgd2FzIHBpbm5lZCBleGFjdGx5IHdoaWxlXG4gICAqICBgUExVR0lOX0JMT0NLX09OX05FV19DUklUSUNBTGAgaXMgb247IHRoZSBtZXNzYWdlIG5hbWVzIHRoZSBmaXguIFJhbmdlc1xuICAgKiAgYW5kIHRoZSBkZWZhdWx0IHNraXAgZmxhZ2dlZCB2ZXJzaW9ucyBpbnN0ZWFkIChkb2NzL3BsdWdpbi1pbnN0YWxsaW5nLm1kKS4gKi9cbiAgUExVR0lOX1ZFUlNJT05fVlVMTl9CTE9DS0VEID0gJ1BMVUdJTl9WRVJTSU9OX1ZVTE5fQkxPQ0tFRCcsXG5cbiAgLy8gUGx1Z2luIGJ1aWxkIG91dGNvbWVzICg0MjIpIOKAlCB0ZXJtaW5hbCBidWlsZCBmYWlsdXJlcywgcmVwb3J0ZWQgb24gdGhlIGJ1aWxkXG4gIC8vIHN0cmVhbSBhbmQgaW4gdGhlIGJ1aWxkJ3MgZmFpbHVyZSByZWNvcmQsIG5ldmVyIGFuc3dlcmVkIG9uIGEgcmVxdWVzdC5cbiAgLyoqIFRoZSBidWlsdCBpbWFnZSBjb3VsZCBub3QgYmUgdnVsbmVyYWJpbGl0eS1zY2FubmVkIGFmdGVyIGV2ZXJ5IHJldHJ5LCBzb1xuICAgKiAgbm90aGluZyB3YXMgcGVyc2lzdGVkIChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS4gKi9cbiAgSU1BR0VfU0NBTl9VTkFWQUlMQUJMRSA9ICdJTUFHRV9TQ0FOX1VOQVZBSUxBQkxFJyxcbiAgLyoqIFRoZSBidWlsdCBpbWFnZSBoYXMgbW9yZSBmaXhhYmxlIENyaXRpY2FsIGZpbmRpbmdzIHRoYW4gdGhlIHBsYXRmb3JtXG4gICAqICBmbG9vciBgUExVR0lOX1ZVTE5fTUFYX0NSSVRJQ0FMYDsgdGhlIG1lc3NhZ2UgbGlzdHMgdGhlbSB3aXRoIHRoZWlyIGZpeGVzLiAqL1xuICBQTFVHSU5fVlVMTl9HQVRFID0gJ1BMVUdJTl9WVUxOX0dBVEUnLFxuICAvKiogQW4gdXBsb2FkIHdob3NlIE5BTUUgd291bGQgb3ZlcnJpZGUgYSBsaXN0aW5nIG9yIHRoZSBwYXJlbnQgb3JnJ3MgcGx1Z2luLFxuICAgKiAgcmVmdXNlZCBiZWNhdXNlIHRoZSBjb25zdW1wdGlvbiBwb2xpY3kgc2F5cyBgc2hhZG93aW5nOiBkZW55YC4gKi9cbiAgUExVR0lOX05BTUVfU0hBRE9XUyA9ICdQTFVHSU5fTkFNRV9TSEFET1dTJyxcblxuICAvLyBCaWxsaW5nIGVycm9yc1xuICBQQVlNRU5UX01FVEhPRF9SRVFVSVJFRCA9ICdQQVlNRU5UX01FVEhPRF9SRVFVSVJFRCcsIC8vIDQwMlxuICBESVNDT1VOVF9DRUlMSU5HX0VYQ0VFREVEID0gJ0RJU0NPVU5UX0NFSUxJTkdfRVhDRUVERUQnLCAvLyA0MDBcbiAgRElTQ09VTlRfTk9UX0ZPVU5EID0gJ0RJU0NPVU5UX05PVF9GT1VORCcsIC8vIDQwNFxuICBESVNDT1VOVF9JTkFDVElWRSA9ICdESVNDT1VOVF9JTkFDVElWRScsIC8vIDQwOVxuICBQTEFOX09WRVJfQ0FQID0gJ1BMQU5fT1ZFUl9DQVAnLCAvLyA0MDlcbiAgQURET05fT1ZFUl9DQVAgPSAnQURET05fT1ZFUl9DQVAnLCAvLyA0MDlcblxuICAvLyBTZXJ2ZXIgZXJyb3JzICg1MDApXG4gIElOVEVSTkFMX0VSUk9SID0gJ0lOVEVSTkFMX0VSUk9SJyxcbiAgREFUQUJBU0VfRVJST1IgPSAnREFUQUJBU0VfRVJST1InLFxuXG4gIC8vIE5vdCBpbXBsZW1lbnRlZCAoNTAxKSDigJQgdGhlIGNvbmZpZ3VyZWQgcHJvdmlkZXIgaGFzIG5vIHN1Y2ggY2FwYWJpbGl0eVxuICBOT1RfSU1QTEVNRU5URUQgPSAnTk9UX0lNUExFTUVOVEVEJyxcblxuICAvLyBTZXJ2aWNlIHVuYXZhaWxhYmxlICg1MDMpXG4gIFNFUlZJQ0VfVU5BVkFJTEFCTEUgPSAnU0VSVklDRV9VTkFWQUlMQUJMRScsXG4gIENPTVBMSUFOQ0VfU0VSVklDRV9VTkFWQUlMQUJMRSA9ICdDT01QTElBTkNFX1NFUlZJQ0VfVU5BVkFJTEFCTEUnLFxufVxuXG4vKipcbiAqIE1hcHMgZXJyb3IgY29kZXMgdG8gdGhlaXIgZGVmYXVsdCBIVFRQIHN0YXR1cyBjb2Rlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IEVycm9yQ29kZVN0YXR1czogUmVjb3JkPEVycm9yQ29kZSwgbnVtYmVyPiA9IHtcbiAgW0Vycm9yQ29kZS5VTkFVVEhPUklaRURdOiA0MDEsXG4gIFtFcnJvckNvZGUuVE9LRU5fRVhQSVJFRF06IDQwMSxcbiAgW0Vycm9yQ29kZS5UT0tFTl9JTlZBTElEXTogNDAxLFxuICBbRXJyb3JDb2RlLlRPS0VOX01JU1NJTkddOiA0MDEsXG4gIFtFcnJvckNvZGUuVE9LRU5fUkVWT0tFRF06IDQwMSxcbiAgW0Vycm9yQ29kZS5NRkFfUkVRVUlSRURdOiA0MDEsXG4gIFtFcnJvckNvZGUuUkVBVVRIX1JFUVVJUkVEXTogNDAxLFxuICBbRXJyb3JDb2RlLklOU1VGRklDSUVOVF9QRVJNSVNTSU9OU106IDQwMyxcbiAgW0Vycm9yQ29kZS5TWVNURU1fT1JHX1JFUVVJUkVEXTogNDAzLFxuICBbRXJyb3JDb2RlLlBVQkxJU0hFUl9URVJNU19SRVFVSVJFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QVUJMSVNIRVJfUk9PVF9PUkdfUkVRVUlSRURdOiA0MDMsXG4gIFtFcnJvckNvZGUuUFVCTElTSEVSX1NVU1BFTkRFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fUFVCTElTSElOR19ESVNBQkxFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fUkVWSUVXU19ESVNBQkxFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5SRVZJRVdfU0VMRl9QUk9NT1RJT05dOiA0MDMsXG4gIFtFcnJvckNvZGUuU0VQQVJBVElPTl9PRl9EVVRJRVNdOiA0MDMsXG4gIFtFcnJvckNvZGUuSFVNQU5fU0VTU0lPTl9SRVFVSVJFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5NRkFfRU5ST0xMTUVOVF9SRVFVSVJFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5JTVBFUlNPTkFUSU9OX1JFQURfT05MWV06IDQwMyxcbiAgW0Vycm9yQ29kZS5PUkdfTUlTTUFUQ0hdOiA0MDMsXG4gIFtFcnJvckNvZGUuQ09NUExJQU5DRV9WSU9MQVRJT05dOiA0MDMsXG4gIFtFcnJvckNvZGUuTk9UX0ZPVU5EXTogNDA0LFxuICBbRXJyb3JDb2RlLk9SR19OT1RfRk9VTkRdOiA0MDQsXG4gIFtFcnJvckNvZGUuU1VCTUlTU0lPTlNfRElTQUJMRURdOiA0MDQsXG4gIFtFcnJvckNvZGUuVkFMSURBVElPTl9FUlJPUl06IDQwMCxcbiAgW0Vycm9yQ29kZS5NSVNTSU5HX1JFUVVJUkVEX0ZJRUxEXTogNDAwLFxuICBbRXJyb3JDb2RlLlBST09GX09GX1dPUktfSU5WQUxJRF06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9VTktOT1dOX1BBVEhdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfQ1lDTEVdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfUEFSU0VfRVJST1JdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfVFlQRV9NSVNNQVRDSF06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9TRUNSRVRTX1JFU0VSVkVEXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX0NPTlRSQUNUX1ZJT0xBVElPTl06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9TSVpFX0VYQ0VFREVEXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX1ZBTElEQVRJT05fRkFJTEVEXTogNDAwLFxuICBbRXJyb3JDb2RlLlFVT1RBX0VYQ0VFREVEXTogNDI5LFxuICBbRXJyb3JDb2RlLlJBVEVfTElNSVRfRVhDRUVERURdOiA0MjksXG4gIFtFcnJvckNvZGUuU1VCTUlTU0lPTl9MSU1JVF06IDQyOSxcbiAgW0Vycm9yQ29kZS5QQVlMT0FEX1RPT19MQVJHRV06IDQxMyxcbiAgW0Vycm9yQ29kZS5DT05GTElDVF06IDQwOSxcbiAgW0Vycm9yQ29kZS5EVVBMSUNBVEVfRU5UUlldOiA0MDksXG4gIFtFcnJvckNvZGUuU0NBTl9DT05GTElDVF06IDQwOSxcbiAgW0Vycm9yQ29kZS5JTUFHRV9WRVJJRklDQVRJT05fRkFJTEVEXTogNDA5LFxuICBbRXJyb3JDb2RlLlBMVUdJTl9WRVJTSU9OX0ZST1pFTl06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fVkVSU0lPTl9JTl9VU0VdOiA0MDksXG4gIFtFcnJvckNvZGUuUExVR0lOX0RJR0VTVF9NSVNNQVRDSF06IDQwOSxcbiAgW0Vycm9yQ29kZS5QVUJMSVNIRVJfUkVRVUlSRURdOiA0MDksXG4gIFtFcnJvckNvZGUuUFVCTElTSEVSX0hBTkRMRV9SRVNFUlZFRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5QVUJMSVNIX0dBVEVfRkFJTEVEXTogNDA5LFxuICBbRXJyb3JDb2RlLlZFUklGSUVEX1BMQU5fUkVRVUlSRURdOiA0MDMsXG4gIFtFcnJvckNvZGUuVkVSSUZJRURfRE9NQUlOX1JFUVVJUkVEXTogNDA5LFxuICBbRXJyb3JDb2RlLlZFUklGSUVEX09XTkVSX01GQV9SRVFVSVJFRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fTk9UX0lOU1RBTExFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fQkxPQ0tFRF9CWV9QT0xJQ1ldOiA0MDMsXG4gIFtFcnJvckNvZGUuUExVR0lOX1VOQVZBSUxBQkxFXTogNDA5LFxuICBbRXJyb3JDb2RlLlBMVUdJTl9OQU1FX0xJU1RFRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5OQU1FX1RBS0VOXTogNDA5LFxuICBbRXJyb3JDb2RlLlBMVUdJTl9WRVJTSU9OX1ZVTE5fQkxPQ0tFRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5JTUFHRV9TQ0FOX1VOQVZBSUxBQkxFXTogNDIyLFxuICBbRXJyb3JDb2RlLlBMVUdJTl9WVUxOX0dBVEVdOiA0MjIsXG4gIFtFcnJvckNvZGUuUExVR0lOX05BTUVfU0hBRE9XU106IDQwOSxcbiAgW0Vycm9yQ29kZS5QQVlNRU5UX01FVEhPRF9SRVFVSVJFRF06IDQwMixcbiAgW0Vycm9yQ29kZS5ESVNDT1VOVF9DRUlMSU5HX0VYQ0VFREVEXTogNDAwLFxuICBbRXJyb3JDb2RlLkRJU0NPVU5UX05PVF9GT1VORF06IDQwNCxcbiAgW0Vycm9yQ29kZS5ESVNDT1VOVF9JTkFDVElWRV06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTEFOX09WRVJfQ0FQXTogNDA5LFxuICBbRXJyb3JDb2RlLkFERE9OX09WRVJfQ0FQXTogNDA5LFxuICBbRXJyb3JDb2RlLklOVEVSTkFMX0VSUk9SXTogNTAwLFxuICBbRXJyb3JDb2RlLkRBVEFCQVNFX0VSUk9SXTogNTAwLFxuICBbRXJyb3JDb2RlLk5PVF9JTVBMRU1FTlRFRF06IDUwMSxcbiAgW0Vycm9yQ29kZS5TRVJWSUNFX1VOQVZBSUxBQkxFXTogNTAzLFxuICBbRXJyb3JDb2RlLkNPTVBMSUFOQ0VfU0VSVklDRV9VTkFWQUlMQUJMRV06IDUwMyxcbn07XG5cbi8qKlxuICogR2V0IHRoZSBIVFRQIHN0YXR1cyBjb2RlIGZvciBhbiBlcnJvciBjb2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhdHVzRm9yRXJyb3JDb2RlKGNvZGU6IEVycm9yQ29kZSk6IG51bWJlciB7XG4gIHJldHVybiBFcnJvckNvZGVTdGF0dXNbY29kZV0gPz8gNTAwO1xufVxuIl19
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* (`admin.superadmin.grant`, `org.ownership.transfer`, `user.login`, …). Keep
|
|
18
18
|
* this list free of any platform-only action.
|
|
19
19
|
*/
|
|
20
|
-
export declare const REMOTE_AUDIT_ACTIONS: readonly ['plugin.build.completed', 'plugin.build.failed', 'plugin.build.timeout', 'plugin.scan.skipped', 'plugin.vuln.waived', 'plugin.delete', 'plugin.restore', 'plugin.purge', 'plugin.update', 'plugin.upload', 'plugin.deploy', 'plugin.bulk.update', 'plugin.bulk.delete', 'plugin.dlq.purge', 'plugin.build.retry', 'plugin.dlq.replay', 'pipeline.create', 'pipeline.update', 'pipeline.delete', 'pipeline.restore', 'pipeline.purge', 'pipeline_template.create', 'pipeline_template.update', 'pipeline_template.delete', 'pipeline_template.restore', 'pipeline_template.purge', 'pipeline.execution.start', 'pipeline.execution.cancel', 'pipeline.registry.register', 'pipeline.registry.deregister', 'quota.reset', 'quota.limit.update', 'quota.delete', 'compliance.exemption.approve', 'compliance.exemption.revoke', 'compliance.rule.toggle', 'compliance.rule.create', 'compliance.rule.update', 'compliance.rule.delete', 'compliance.rule.restore', 'compliance.rule.purge', 'compliance.policy.create', 'compliance.policy.update', 'compliance.policy.delete', 'compliance.policy.restore', 'compliance.policy.purge', 'compliance.scan-schedule.create', 'compliance.scan-schedule.update', 'compliance.scan-schedule.delete', 'compliance.template.apply', 'compliance.scan.create', 'compliance.scan.cancel', 'compliance.notification-preference.update', 'registry.gc', 'registry.image.delete', 'registry.image.copy', 'registry.image.sign', 'message.announcement.create', 'message.delete', 'message.restore', 'message.purge', 'billing.subscription.create', 'billing.subscription.update', 'billing.subscription.reactivate', 'billing.subscription.cancel', 'billing.subscription.delete', 'billing.tier.override', 'billing.addon.add', 'billing.addon.remove', 'billing.addon.prune', 'billing.discount.generate', 'billing.discount.issue', 'billing.discount.apply', 'billing.discount.remove', 'billing.discount.revoke', 'billing.promotion.create', 'billing.promotion.update', 'billing.promotion.revoke', 'billing.promotion.grant', 'billing.promotion.activate', 'billing.credit.consumed', 'billing.credit.exhausted', 'billing.combo.expired', 'reporting.settings.update', 'reporting.deployment.outcome', 'reporting.retention.sync', 'reporting.report.definition.create', 'reporting.report.definition.update', 'reporting.report.definition.delete', 'reporting.report.ownership.transfer', 'reporting.report.published', 'reporting.report.republished', 'reporting.report.link.created', 'reporting.report.link.revoked', 'reporting.report.recipient.added', 'reporting.report.recipient.removed', 'reporting.report.policy.update', 'reporting.report.paused', 'reporting.report.resumed', 'authz.denied', 'ask.query', 'ask.agent.turn', 'publisher.create', 'publisher.update', 'publisher.terms.accept', 'publisher.verify.request', 'publisher.verify.approve', 'publisher.verify.reject', 'publisher.tier.change', 'publisher.suspend', 'publisher.unsuspend', 'publisher.transfer.request', 'publisher.transfer.accept', 'publisher.transfer.decline', 'publisher.transfer.approve', 'publisher.transfer.reject', 'publisher.profile-change.approve', 'publisher.profile-change.reject', 'plugin.request.submit', 'plugin.request.withdraw', 'plugin.request.approve', 'plugin.request.second-approve', 'plugin.request.reject', 'plugin.request.auto-approve', 'plugin.listing.publish', 'plugin.listing.unlist', 'plugin.listing.update', 'plugin.listing.state.change', 'plugin.listing.pause', 'plugin.listing.unpause', 'plugin.version.pause', 'plugin.version.yank', 'plugin.version.unyank', 'plugin.version.deprecate', 'plugin.collection.update', 'ecosystem.auto-approval-rule.create', 'ecosystem.auto-approval-rule.update', 'ecosystem.auto-approval-rule.delete', 'ecosystem.reserved-name.update', 'ecosystem.sla.update', 'registry.image.publish', 'registry.image.resign', 'registry.image.yank', 'registry.image.gc', 'plugin.install.request', 'plugin.install.approve', 'plugin.install.deny', 'plugin.install.create', 'plugin.install.upgrade', 'plugin.install.change-request', 'plugin.install.change-approve', 'plugin.install.change-reject', 'plugin.install.remove', 'org.plugin-install-policy.update', 'plugin.review.create', 'plugin.review.update', 'plugin.review.delete', 'plugin.review.report', 'plugin.review.hold', 'plugin.review.release', 'plugin.review.remove', 'plugin.review.anonymize', 'plugin.review.reply.create', 'plugin.review.reply.update', 'plugin.review.reply.delete', 'plugin.submission.create', 'plugin.submission.verify', 'plugin.submission.gate-fail', 'plugin.submission.approve', 'plugin.submission.reject', 'plugin.submission.claim', 'plugin.submission.expire', 'plugin.advisory.create', 'plugin.advisory.update', 'plugin.advisory.publish', 'plugin.advisory.withdraw', 'plugin.security_notifications.update', 'plugin.security_notifications.external_email.verify', 'plugin.security_notifications.test'];
|
|
20
|
+
export declare const REMOTE_AUDIT_ACTIONS: readonly ['plugin.build.completed', 'plugin.build.failed', 'plugin.build.timeout', 'plugin.scan.skipped', 'plugin.vuln.waived', 'plugin.delete', 'plugin.restore', 'plugin.purge', 'plugin.update', 'plugin.upload', 'plugin.deploy', 'plugin.bulk.update', 'plugin.bulk.delete', 'plugin.dlq.purge', 'plugin.build.retry', 'plugin.dlq.replay', 'pipeline.create', 'pipeline.update', 'pipeline.delete', 'pipeline.restore', 'pipeline.purge', 'pipeline_template.create', 'pipeline_template.update', 'pipeline_template.delete', 'pipeline_template.restore', 'pipeline_template.purge', 'pipeline.execution.start', 'pipeline.execution.cancel', 'pipeline.registry.register', 'pipeline.registry.deregister', 'quota.reset', 'quota.limit.update', 'quota.delete', 'compliance.exemption.approve', 'compliance.exemption.revoke', 'compliance.rule.toggle', 'compliance.rule.create', 'compliance.rule.update', 'compliance.rule.delete', 'compliance.rule.restore', 'compliance.rule.purge', 'compliance.policy.create', 'compliance.policy.update', 'compliance.policy.delete', 'compliance.policy.restore', 'compliance.policy.purge', 'compliance.scan-schedule.create', 'compliance.scan-schedule.update', 'compliance.scan-schedule.delete', 'compliance.template.apply', 'compliance.scan.create', 'compliance.scan.cancel', 'compliance.notification-preference.update', 'registry.gc', 'registry.image.delete', 'registry.image.copy', 'registry.image.sign', 'message.announcement.create', 'message.delete', 'message.restore', 'message.purge', 'billing.subscription.create', 'billing.subscription.update', 'billing.subscription.reactivate', 'billing.subscription.cancel', 'billing.subscription.delete', 'billing.tier.override', 'billing.addon.add', 'billing.addon.remove', 'billing.addon.prune', 'billing.discount.generate', 'billing.discount.issue', 'billing.discount.apply', 'billing.discount.remove', 'billing.discount.revoke', 'billing.promotion.create', 'billing.promotion.update', 'billing.promotion.revoke', 'billing.promotion.grant', 'billing.promotion.activate', 'billing.credit.consumed', 'billing.credit.exhausted', 'billing.combo.expired', 'reporting.settings.update', 'reporting.deployment.outcome', 'reporting.retention.sync', 'reporting.report.definition.create', 'reporting.report.definition.update', 'reporting.report.definition.delete', 'reporting.report.ownership.transfer', 'reporting.report.published', 'reporting.report.republished', 'reporting.report.link.created', 'reporting.report.link.revoked', 'reporting.report.recipient.added', 'reporting.report.recipient.removed', 'reporting.report.policy.update', 'reporting.report.paused', 'reporting.report.resumed', 'authz.denied', 'ask.query', 'ask.agent.turn', 'publisher.create', 'publisher.update', 'publisher.terms.accept', 'publisher.verify.request', 'publisher.verify.approve', 'publisher.verify.reject', 'publisher.tier.change', 'publisher.suspend', 'publisher.unsuspend', 'publisher.transfer.request', 'publisher.transfer.accept', 'publisher.transfer.decline', 'publisher.transfer.approve', 'publisher.transfer.reject', 'publisher.profile-change.approve', 'publisher.profile-change.reject', 'plugin.request.submit', 'plugin.request.withdraw', 'plugin.request.approve', 'plugin.request.second-approve', 'plugin.request.reject', 'plugin.request.auto-approve', 'plugin.listing.publish', 'plugin.listing.unlist', 'plugin.listing.update', 'plugin.listing.state.change', 'plugin.listing.pause', 'plugin.listing.unpause', 'plugin.version.pause', 'plugin.version.yank', 'plugin.version.unyank', 'plugin.version.deprecate', 'plugin.collection.update', 'ecosystem.auto-approval-rule.create', 'ecosystem.auto-approval-rule.update', 'ecosystem.auto-approval-rule.delete', 'ecosystem.reserved-name.update', 'ecosystem.sla.update', 'registry.image.publish', 'registry.image.resign', 'registry.image.yank', 'registry.image.gc', 'plugin.install.request', 'plugin.install.approve', 'plugin.install.deny', 'plugin.install.create', 'plugin.install.upgrade', 'plugin.install.change-request', 'plugin.install.change-approve', 'plugin.install.change-reject', 'plugin.install.remove', 'org.plugin-install-policy.update', 'plugin.shadowing.denied', 'plugin.review.create', 'plugin.review.update', 'plugin.review.delete', 'plugin.review.report', 'plugin.review.hold', 'plugin.review.release', 'plugin.review.remove', 'plugin.review.anonymize', 'plugin.review.reply.create', 'plugin.review.reply.update', 'plugin.review.reply.delete', 'plugin.submission.create', 'plugin.submission.verify', 'plugin.submission.gate-fail', 'plugin.submission.approve', 'plugin.submission.reject', 'plugin.submission.claim', 'plugin.submission.expire', 'plugin.advisory.create', 'plugin.advisory.update', 'plugin.advisory.publish', 'plugin.advisory.withdraw', 'plugin.security_notifications.update', 'plugin.security_notifications.external_email.verify', 'plugin.security_notifications.test'];
|
|
21
21
|
export type RemoteAuditAction = typeof REMOTE_AUDIT_ACTIONS[number];
|
|
22
22
|
/** Whether `value` is an action a remote service may emit (the ingest allow-list). */
|
|
23
23
|
export declare function isRemoteAuditAction(value: string): value is RemoteAuditAction;
|
|
@@ -305,6 +305,14 @@ export const REMOTE_AUDIT_ACTIONS = [
|
|
|
305
305
|
'plugin.install.change-reject',
|
|
306
306
|
'plugin.install.remove',
|
|
307
307
|
'org.plugin-install-policy.update',
|
|
308
|
+
// An upload REFUSED because its name would override something the org already
|
|
309
|
+
// resolves — a listing, or a team's parent-org plugin — and the consumption
|
|
310
|
+
// policy says `shadowing: deny`. Audited because a refusal otherwise returns
|
|
311
|
+
// an error to the caller and leaves nothing behind: an attempt to define
|
|
312
|
+
// `trivy` over the Official scanner is exactly the thing someone should be
|
|
313
|
+
// able to find afterwards. `details` carry the name and what it would have
|
|
314
|
+
// overridden.
|
|
315
|
+
'plugin.shadowing.denied',
|
|
308
316
|
// Reviews and replies.
|
|
309
317
|
'plugin.review.create',
|
|
310
318
|
'plugin.review.update',
|
|
@@ -343,4 +351,4 @@ export const REMOTE_AUDIT_ACTIONS = [
|
|
|
343
351
|
export function isRemoteAuditAction(value) {
|
|
344
352
|
return REMOTE_AUDIT_ACTIONS.includes(value);
|
|
345
353
|
}
|
|
346
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWF1ZGl0LWFjdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcmVtb3RlLWF1ZGl0LWFjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7OztHQU9HO0FBR0g7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHO0lBQ2xDLHdCQUF3QjtJQUN4QixxQkFBcUI7SUFDckIsc0JBQXNCO0lBQ3RCLDhFQUE4RTtJQUM5RSwyRUFBMkU7SUFDM0UsOEVBQThFO0lBQzlFLHFCQUFxQjtJQUNyQix1RUFBdUU7SUFDdkUsMkVBQTJFO0lBQzNFLCtFQUErRTtJQUMvRSw4RUFBOEU7SUFDOUUsa0VBQWtFO0lBQ2xFLHlFQUF5RTtJQUN6RSxvQkFBb0I7SUFDcEIsNkVBQTZFO0lBQzdFLCtFQUErRTtJQUMvRSxxRUFBcUU7SUFDckUsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQiw0RUFBNEU7SUFDNUUsd0VBQXdFO0lBQ3hFLGNBQWM7SUFDZCxlQUFlO0lBQ2YsZUFBZTtJQUNmLGVBQWU7SUFDZiw4RUFBOEU7SUFDOUUsNEVBQTRFO0lBQzVFLG9CQUFvQjtJQUNwQixvQkFBb0I7SUFDcEIsa0JBQWtCO0lBQ2xCLHlFQUF5RTtJQUN6RSw0RUFBNEU7SUFDNUUsNEVBQTRFO0lBQzVFLHVFQUF1RTtJQUN2RSxvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLGdFQUFnRTtJQUNoRSxxRUFBcUU7SUFDckUsb0RBQW9EO0lBQ3BELGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixtRUFBbUU7SUFDbkUsNEVBQTRFO0lBQzVFLDBEQUEwRDtJQUMxRCxnQkFBZ0I7SUFDaEIsMEJBQTBCO0lBQzFCLDBCQUEwQjtJQUMxQiwwQkFBMEI7SUFDMUIsMkJBQTJCO0lBQzNCLHlCQUF5QjtJQUN6Qiww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dHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSByZW1vdGUgKG5vbi1wbGF0Zm9ybSkgYXVkaXQgQUNUSU9OIFZPQ0FCVUxBUlkuXG4gKlxuICogS2VwdCBhcGFydCBmcm9tIHRoZSBjbGllbnQgdGhhdCBzaGlwcyB0aGUgZXZlbnRzIChgc2VydmljZXMvcmVtb3RlLWF1ZGl0LWNsaWVudC50c2ApXG4gKiBiZWNhdXNlIGl0IGlzIGFuIGFsbG93LWxpc3QsIG5vdCBtYWNoaW5lcnk6IGl0IGlzIHRoZSB0aGluZyBhIHJldmlld2VyIHJlYWRzXG4gKiBlbmQgdG8gZW5kIHdoZW4gZGVjaWRpbmcgd2hldGhlciBhIHNlcnZpY2UgbWF5IGVtaXQgYSBnaXZlbiBhY3Rpb24sIGFuZCBpdCBpc1xuICogd2hhdCBwbGF0Zm9ybSdzIGluZ2VzdCB2YWxpZGF0ZXMgYWdhaW5zdC5cbiAqL1xuXG5cbi8qKlxuICogVGhlIGV4YWN0IHNldCBvZiBhdWRpdCBhY3Rpb25zIGEgTk9OLVBMQVRGT1JNIChyZW1vdGUpIHNlcnZpY2UgaXMgcGVybWl0dGVkIHRvXG4gKiBlbWl0IHRocm91Z2ggYFBPU1QgL2F1ZGl0L2V2ZW50c2AuIFRoaXMgaXMgdGhlIFNJTkdMRSBTT1VSQ0Ug4oCUIGBSZW1vdGVBdWRpdEFjdGlvbmBcbiAqIGlzIGRlcml2ZWQgZnJvbSBpdCwgc28gdGhlIHR5cGUgYW5kIHRoZSBydW50aW1lIGFsbG93LWxpc3QgY2FuIG5ldmVyIGRyaWZ0LlxuICpcbiAqIFNFQ1VSSVRZOiBwbGF0Zm9ybSdzIGluZ2VzdCB2YWxpZGF0ZXMgYGFjdGlvbmAgYWdhaW5zdCB0aGlzIHN1YnNldCAodmlhXG4gKiB7QGxpbmsgaXNSZW1vdGVBdWRpdEFjdGlvbn0pLCBOT1QgdGhlIGZ1bGwgcGxhdGZvcm0gYEF1ZGl0QWN0aW9uYCB1bmlvbiDigJQgYVxuICogYHNlcnZpY2U6KmAgdG9rZW4gbXVzdCBub3QgYmUgYWJsZSB0byBmb3JnZSBwbGF0Zm9ybS1hdXRob3JpdHkgZXZlbnRzXG4gKiAoYGFkbWluLnN1cGVyYWRtaW4uZ3JhbnRgLCBgb3JnLm93bmVyc2hpcC50cmFuc2ZlcmAsIGB1c2VyLmxvZ2luYCwg4oCmKS4gS2VlcFxuICogdGhpcyBsaXN0IGZyZWUgb2YgYW55IHBsYXRmb3JtLW9ubHkgYWN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgUkVNT1RFX0FVRElUX0FDVElPTlMgPSBbXG4gICdwbHVnaW4uYnVpbGQuY29tcGxldGVkJyxcbiAgJ3BsdWdpbi5idWlsZC5mYWlsZWQnLFxuICAncGx1Z2luLmJ1aWxkLnRpbWVvdXQnLFxuICAvLyBBIHZlcnNpb24gcGVyc2lzdGVkIFVOU0NBTk5FRCBiZWNhdXNlIHRoZSBidWlsZC10aW1lIHNjYW4gY291bGQgbm90IHJ1biBhbmRcbiAgLy8gdGhlIG9wZXJhdG9yIGVzY2FwZSBoYXRjaCBgUExVR0lOX0FMTE9XX1VOU0NBTk5FRGAgaXMgb24gKHdpdGhvdXQgaXQgdGhlXG4gIC8vIGJ1aWxkIGZhaWxzIGBJTUFHRV9TQ0FOX1VOQVZBSUxBQkxFYCkuIGBkZXRhaWxzYCBjYXJyeSBuYW1lL3ZlcnNpb24vZGlnZXN0LlxuICAncGx1Z2luLnNjYW4uc2tpcHBlZCcsXG4gIC8vIEZpeGFibGUgQ3JpdGljYWwgZmluZGluZ3Mgd2VyZSBFWEVNUFRFRCBmcm9tIHRoZSBwbGF0Zm9ybSBmbG9vciBieSBhXG4gIC8vIGBQTFVHSU5fVlVMTl9XQUlWRVJTYCBlbnRyeSwgc28gYSBidWlsZCB0aGF0IHdvdWxkIG90aGVyd2lzZSBoYXZlIGZhaWxlZFxuICAvLyBQTFVHSU5fVlVMTl9HQVRFIHdhcyBhbGxvd2VkIHRocm91Z2guIFRoZSBvdGhlciBoYWxmIG9mIHBsdWdpbi5zY2FuLnNraXBwZWQ6XG4gIC8vIGJvdGggYXJlIG9wZXJhdG9yIGVzY2FwZSBoYXRjaGVzIHRoYXQgY2hhbmdlIGEgZ2F0ZSdzIHZlcmRpY3QsIGFuZCBhIG1ldHJpY1xuICAvLyBhbmQgYSBsb2cgbGluZSBhcmUgbm90IGEgZHVyYWJsZSByZWNvcmQgb2Ygb25lLiBgZGV0YWlsc2AgY2FycnlcbiAgLy8gbmFtZS92ZXJzaW9uL2RpZ2VzdCwgaG93IG1hbnkgZmluZGluZ3Mgd2VyZSB3YWl2ZWQgYW5kIHdoaWNoIHBhY2thZ2VzLlxuICAncGx1Z2luLnZ1bG4ud2FpdmVkJyxcbiAgLy8gUGx1Z2luIGxpZmVjeWNsZSBtdXRhdGlvbnMgKGFwaS9wbHVnaW4gcm91dGUgaGFuZGxlcnMpIOKAlCB0aGUgZGVzdHJ1Y3RpdmUgL1xuICAvLyBwdWJsaXNoaW5nIHN1cmZhY2UgdGhhdCBidWlsZHMgYWxyZWFkeSBhdWRpdCdzIGNvdW50ZXJwYXJ0OiByZWdpc3RyeSBkZWxldGUsXG4gIC8vIHNvdXJjZSB1cGxvYWQsIGFuZCBkZXBsb3ktdG8tY2x1c3Rlci4gYHRhcmdldElkYCBpcyB0aGUgcGx1Z2luIGlkLlxuICAncGx1Z2luLmRlbGV0ZScsXG4gICdwbHVnaW4ucmVzdG9yZScsXG4gIC8vIE1hbnVhbCBwdXJnZTogcGVybWFuZW50IGhhcmQtZGVsZXRlIG9mIGEgc29mdC1kZWxldGVkIHBsdWdpbiB0b21ic3RvbmUgb25cbiAgLy8gZGVtYW5kIChmaW5hbGl6ZXMgd2hhdCB0aGUgcmV0ZW50aW9uIHN3ZWVwIHdvdWxkIG90aGVyd2lzZSBkbyBsYXRlcikuXG4gICdwbHVnaW4ucHVyZ2UnLFxuICAncGx1Z2luLnVwZGF0ZScsXG4gICdwbHVnaW4udXBsb2FkJyxcbiAgJ3BsdWdpbi5kZXBsb3knLFxuICAvLyBQbHVnaW4gYnVsayBtdXRhdGlvbnMgKGFwaS9wbHVnaW4gYnVsay1wbHVnaW4gcm91dGUpICsgRExRIHB1cmdlIChkcm9wcyBhbGxcbiAgLy8gZGVhZC1sZXR0ZXJlZCBidWlsZCBqb2JzLCBjcm9zcy1vcmcsIHN5c2FkbWluKS4gYGRldGFpbHNgIGNhcnJpZXMgY291bnRzLlxuICAncGx1Z2luLmJ1bGsudXBkYXRlJyxcbiAgJ3BsdWdpbi5idWxrLmRlbGV0ZScsXG4gICdwbHVnaW4uZGxxLnB1cmdlJyxcbiAgLy8gQnVpbGQgcmUtcnVucyBmcm9tIHRoZSBxdWV1ZS10cmlhZ2Ugc3VyZmFjZTogcmUtZW5xdWV1ZSBhIEZBSUxFRCBidWlsZFxuICAvLyAoYHBsdWdpbi5idWlsZC5yZXRyeWApIG9yIGEgZGVhZC1sZXR0ZXJlZCBvbmUgKGBwbHVnaW4uZGxxLnJlcGxheWApLiBCb3RoXG4gIC8vIHJlLXJ1biBhbiBpbWFnZSBidWlsZCArIHBsdWdpbiBwZXJzaXN0IG9uIHRoZSBjYWxsZXIncyBhdXRob3JpdHksIHNvIHRoZXlcbiAgLy8gYXJlIGF1ZGl0ZWQgbXV0YXRpb25zOyBgYWZmZWN0ZWRPcmdJZGAgY2FycmllcyB0aGUgam9iJ3Mgb3duaW5nIG9yZy5cbiAgJ3BsdWdpbi5idWlsZC5yZXRyeScsXG4gICdwbHVnaW4uZGxxLnJlcGxheScsXG4gIC8vIFBpcGVsaW5lIG11dGF0aW9ucyDigJQgZW1pdHRlZCBieSBhcGkvcGlwZWxpbmUncyByb3V0ZSBoYW5kbGVyc1xuICAvLyAoY3JlYXRlL3VwZGF0ZS9kZWxldGUgKyBDb2RlUGlwZWxpbmUgZXhlY3V0aW9uIHRyaWdnZXIvY2FuY2VsKSBhbmRcbiAgLy8gcG9zdGVkIHRvIHBsYXRmb3JtJ3MgYFBPU1QgL2F1ZGl0L2V2ZW50c2AgaW5nZXN0LlxuICAncGlwZWxpbmUuY3JlYXRlJyxcbiAgJ3BpcGVsaW5lLnVwZGF0ZScsXG4gICdwaXBlbGluZS5kZWxldGUnLFxuICAncGlwZWxpbmUucmVzdG9yZScsXG4gIC8vIE1hbnVhbCBwdXJnZTogcGVybWFuZW50IGhhcmQtZGVsZXRlIG9mIGEgc29mdC1kZWxldGVkIHBpcGVsaW5lIC9cbiAgLy8gcGlwZWxpbmVfdGVtcGxhdGUgdG9tYnN0b25lIG9uIGRlbWFuZCAoZmluYWxpemVzIHdoYXQgdGhlIHJldGVudGlvbiBzd2VlcFxuICAvLyB3b3VsZCBvdGhlcndpc2UgZG8gbGF0ZXIpLiBgdGFyZ2V0SWRgIGlzIHRoZSBwdXJnZWQgaWQuXG4gICdwaXBlbGluZS5wdXJnZScsXG4gICdwaXBlbGluZV90ZW1wbGF0ZS5jcmVhdGUnLFxuICAncGlwZWxpbmVfdGVtcGxhdGUudXBkYXRlJyxcbiAgJ3BpcGVsaW5lX3RlbXBsYXRlLmRlbGV0ZScsXG4gICdwaXBlbGluZV90ZW1wbGF0ZS5yZXN0b3JlJyxcbiAgJ3BpcGVsaW5lX3RlbXBsYXRlLnB1cmdlJyxcbiAgJ3BpcGVsaW5lLmV4ZWN1dGlvbi5zdGFydCcsXG4gICdwaXBlbGluZS5leGVjdXRpb24uY2FuY2VsJyxcbiAgLy8gQ29kZVBpcGVsaW5lIEFSTi1yZWdpc3RyeSBjb25maWcgKGFwaS9waXBlbGluZSByZWdpc3RyeSByb3V0ZSkg4oCUIHJlZ2lzdGVyaW5nIC9cbiAgLy8gZGVyZWdpc3RlcmluZyB0aGUgZXh0ZXJuYWwgQ29kZVBpcGVsaW5lIHRoYXQgYmFja3MgYSBwaXBlbGluZSAoZGVwbG95LWFmZmVjdGluZykuXG4gICdwaXBlbGluZS5yZWdpc3RyeS5yZWdpc3RlcicsXG4gICdwaXBlbGluZS5yZWdpc3RyeS5kZXJlZ2lzdGVyJyxcbiAgLy8gUXVvdGEgYWRtaW5pc3RyYXRpb24gKGFwaS9xdW90YSkg4oCUIGEgc3VwZXJhZG1pbiByZXNldHRpbmcgYW4gb3JnJ3MgdXNhZ2VcbiAgLy8gY291bnRlciBvciBlZGl0aW5nIGl0cyB0aWVyIGxpbWl0cy4gYGFmZmVjdGVkT3JnSWRgIGlzIHRoZSBvcmcgY2hhbmdlZDtcbiAgLy8gYGRldGFpbHNgIGNhcnJpZXMgdGhlIHF1b3RhVHlwZSArIG9sZC9uZXcgdmFsdWUuXG4gICdxdW90YS5yZXNldCcsXG4gICdxdW90YS5saW1pdC51cGRhdGUnLFxuICAvLyBBIHN1cGVyYWRtaW4gZGVsZXRpbmcgYW4gb3JnJ3MgZW50aXJlIHF1b3RhIGRvY3VtZW50LlxuICAncXVvdGEuZGVsZXRlJyxcbiAgLy8gQ29tcGxpYW5jZSBhZG1pbmlzdHJhdGlvbiAoYXBpL2NvbXBsaWFuY2UpIOKAlCB0aGUgZW5mb3JjZW1lbnQtcG9zdHVyZSBzdXJmYWNlLlxuICAvLyBBcHByb3ZpbmcvcmV2b2tpbmcgYW4gZXhlbXB0aW9uLCB0b2dnbGluZy9hdXRob3JpbmcvZGVsZXRpbmcgYSBydWxlLFxuICAvLyBhdXRob3JpbmcvZGVsZXRpbmcgYSBwb2xpY3ksIG1hbmFnaW5nIHNjYW4gc2NoZWR1bGVzLCBhcHBseWluZyBhIHRlbXBsYXRlLFxuICAvLyBvciBjYW5jZWxsaW5nIGEgcnVubmluZyBzY2FuLiBgdGFyZ2V0SWRgIGlzIHRoZSBydWxlL3BvbGljeS9leGVtcHRpb24vc2NhbiBpZC5cbiAgJ2NvbXBsaWFuY2UuZXhlbXB0aW9uLmFwcHJvdmUnLFxuICAnY29tcGxpYW5jZS5leGVtcHRpb24ucmV2b2tlJyxcbiAgJ2NvbXBsaWFuY2UucnVsZS50b2dnbGUnLFxuICAnY29tcGxpYW5jZS5ydWxlLmNyZWF0ZScsXG4gICdjb21wbGlhbmNlLnJ1bGUudXBkYXRlJyxcbiAgJ2NvbXBsaWFuY2UucnVsZS5kZWxldGUnLFxuICAnY29tcGxpYW5jZS5ydWxlLnJlc3RvcmUnLFxuICAvLyBNYW51YWwgb24tZGVtYW5kIGhhcmQtZGVsZXRlIChQVVJHRSkgb2YgYSBzb2Z0LWRlbGV0ZWQgcnVsZS9wb2xpY3kgdG9tYnN0b25lIOKAlFxuICAvLyB0aGUgY2FsbGVyLWluaXRpYXRlZCBjb3VudGVycGFydCB0byB0aGUgcmV0ZW50aW9uIHN3ZWVwJ3MgYXV0by1wdXJnZS4gRGVzdHJveXNcbiAgLy8gdGhlIHRvbWJzdG9uZSBwZXJtYW5lbnRseSwgc28gaXQgY2FycmllcyB0aGUgZHVyYWJsZSwgdGFtcGVyLWV2aWRlbnQgdHJhaWwuXG4gICdjb21wbGlhbmNlLnJ1bGUucHVyZ2UnLFxuICAnY29tcGxpYW5jZS5wb2xpY3kuY3JlYXRlJyxcbiAgJ2NvbXBsaWFuY2UucG9saWN5LnVwZGF0ZScsXG4gICdjb21wbGlhbmNlLnBvbGljeS5kZWxldGUnLFxuICAnY29tcGxpYW5jZS5wb2xpY3kucmVzdG9yZScsXG4gICdjb21wbGlhbmNlLnBvbGljeS5wdXJnZScsXG4gICdjb21wbGlhbmNlLnNjYW4tc2NoZWR1bGUuY3JlYXRlJyxcbiAgJ2NvbXBsaWFuY2Uuc2Nhbi1zY2hlZHVsZS51cGRhdGUnLFxuICAnY29tcGxpYW5jZS5zY2FuLXNjaGVkdWxlLmRlbGV0ZScsXG4gICdjb21wbGlhbmNlLnRlbXBsYXRlLmFwcGx5JyxcbiAgLy8gTGF1bmNoaW5nIGFuIG9yZy13aWRlIHJlLWV2YWx1YXRpb24gKHRoZSBjb3VudGVycGFydCB0byBgLmNhbmNlbGApIOKAlCBpdFxuICAvLyBwZXJzaXN0cyBhIHNjYW4gYW5kIGNhbiBibG9jayBlbnRpdGllcyB0aGF0IHBhc3NlZCBiZWZvcmUuXG4gICdjb21wbGlhbmNlLnNjYW4uY3JlYXRlJyxcbiAgJ2NvbXBsaWFuY2Uuc2Nhbi5jYW5jZWwnLFxuICAvLyBQZXItb3JnIGNvbXBsaWFuY2Ugbm90aWZpY2F0aW9uIHNldHRpbmdzOiByZWNpcGllbnRzICsgdGhlIG91dGJvdW5kIHdlYmhvb2tcbiAgLy8gVVJML3NlY3JldC4gQmVhcmVyLWVxdWl2YWxlbnQgY29uZmlnIHRoYXQgcmVkaXJlY3RzIHZpb2xhdGlvbiBub3RpY2VzLCBzbyBhXG4gIC8vIGNoYW5nZSBjYXJyaWVzIHRoZSBkdXJhYmxlIHRyYWlsIChuZXZlciB0aGUgc2VjcmV0IGl0c2VsZikuXG4gICdjb21wbGlhbmNlLm5vdGlmaWNhdGlvbi1wcmVmZXJlbmNlLnVwZGF0ZScsXG4gIC8vIEltYWdlLXJlZ2lzdHJ5IGRlc3RydWN0aXZlIG9wcyAoYXBpL2ltYWdlLXJlZ2lzdHJ5KSDigJQgZ2FyYmFnZS1jb2xsZWN0aW9uXG4gIC8vIHN3ZWVwcyBhbmQgZXhwbGljaXQgaW1hZ2UvdGFnIGRlbGV0ZXMuXG4gICdyZWdpc3RyeS5nYycsXG4gICdyZWdpc3RyeS5pbWFnZS5kZWxldGUnLFxuICAvLyBDcm9zcy1yZXBvIHRhZy9pbWFnZSBjb3B5IChhcGkvaW1hZ2UtcmVnaXN0cnkgUE9TVCAvYXBpL2ltYWdlcy9jb3B5KS4gQVxuICAvLyBjcm9zcy10ZW5hbnQgY29weSBtb3ZlcyBkYXRhIGFjcm9zcyBjdXN0b21lciBib3VuZGFyaWVzLCBzbyBpdCBuZWVkcyB0aGVcbiAgLy8gZHVyYWJsZSwgdGFtcGVyLWV2aWRlbnQgdHJhaWwg4oCUIG5vdCBqdXN0IHRoZSBMb2tpIG9wZXJhdG9yIGxpbmUuXG4gICdyZWdpc3RyeS5pbWFnZS5jb3B5JyxcbiAgLy8gQSBwbHVnaW4gaW1hZ2Ugc2lnbmVkICsgU0JPTS1hdHRlc3RlZCBieSB0aGUgcGxhdGZvcm0ncyBwbHVnaW4tc2lnbmluZyBrZXlcbiAgLy8gKGFwaS9pbWFnZS1yZWdpc3RyeSBQT1NUIC9pbnRlcm5hbC9wbHVnaW4tc2lnbmF0dXJlcywgY2FsbGVkIGJ5IHRoZSBwbHVnaW5cbiAgLy8gYnVpbGQgd29ya2VyKS4gVGhlIGtleSBpcyB3aGF0IHN5bnRoIHRydXN0cywgc28gZXZlcnkgdXNlIGlzIG9uIHRoZSB0cmFpbC5cbiAgJ3JlZ2lzdHJ5LmltYWdlLnNpZ24nLFxuICAvLyBNZXNzYWdpbmcgKGFwaS9tZXNzYWdlKSDigJQgYWRtaW4gQlJPQURDQVNUIGFubm91bmNlbWVudHMgKyBkZXN0cnVjdGl2ZVxuICAvLyBkZWxldGVzLiAxOjEgdXNlciBtZXNzYWdlcyBhcmUgaW50ZW50aW9uYWxseSBOT1QgYXVkaXRlZCAobm9pc2UgKyB0aGV5IHdvdWxkXG4gIC8vIHB1bGwgcHJpdmF0ZSBjb250ZW50IGludG8gdGhlIHRyYWlsKS4gYGRldGFpbHNgIGNhcnJ5IG1ldGFkYXRhIG9ubHlcbiAgLy8gKHN1YmplY3QvdHlwZS9zY29wZSksIE5FVkVSIG1lc3NhZ2UgYm9keSBjb250ZW50LlxuICAnbWVzc2FnZS5hbm5vdW5jZW1lbnQuY3JlYXRlJyxcbiAgJ21lc3NhZ2UuZGVsZXRlJyxcbiAgJ21lc3NhZ2UucmVzdG9yZScsXG4gIC8vIE1hbnVhbCBvbi1kZW1hbmQgUFVSR0UgKHBlcm1hbmVudCBoYXJkLWRlbGV0ZSkgb2YgYW4gYWxyZWFkeS1zb2Z0LWRlbGV0ZWRcbiAgLy8gbWVzc2FnZSB0b21ic3RvbmUg4oCUIHRoZSBkZXN0cnVjdGl2ZSBmaW5hbGl6ZXIgdGhlIHJldGVudGlvbiBzd2VlcCB3b3VsZFxuICAvLyBvdGhlcndpc2UgcGVyZm9ybSBhdCB0aGUgcHVyZ2UgZGVhZGxpbmUuIGBkZXRhaWxzYCBjYXJyeSBtZXRhZGF0YSBvbmx5LlxuICAnbWVzc2FnZS5wdXJnZScsXG4gIC8vIEJpbGxpbmcgKGFwaS9iaWxsaW5nKSDigJQgc3Vic2NyaXB0aW9uICsgZW50aXRsZW1lbnQgbXV0YXRpb25zLCBtaXJyb3JlZCB0byB0aGVcbiAgLy8gY2VudHJhbCBhdWRpdCB0cmFpbCAodGhlc2UgYWxzbyB3cml0ZSB0byB0aGUgc2VydmljZS1sb2NhbCBiaWxsaW5nX2V2ZW50c1xuICAvLyBjb2xsZWN0aW9uKS4gYGRldGFpbHNgIGNhcnJ5IHBsYW4vdGllci9hZGRvbiBpZHMgb25seSDigJQgbmV2ZXIgY2FyZC9wYXltZW50XG4gIC8vIHNlY3JldHMgb3IgYW4gQVdTIGFjY291bnQgaWQuXG4gIC8vIFN1YnNjcmlwdGlvbiBsaWZlY3ljbGUgYSBDVVNUT01FUiBkcml2ZXMgKHRoZSBhZG1pbiBjb3VudGVycGFydCBpc1xuICAvLyBgYmlsbGluZy50aWVyLm92ZXJyaWRlYCk6IHNlbGYtc2VydmUgY3JlYXRlIChkaXJlY3Qgb3IgTWFya2V0cGxhY2UgY2xhaW0pLFxuICAvLyBwbGFuL2ludGVydmFsIGNoYW5nZSwgY2FuY2VsLWF0LXBlcmlvZC1lbmQsIHVuZG8tY2FuY2VsLCBjYXNjYWRlIGRlbGV0ZS5cbiAgJ2JpbGxpbmcuc3Vic2NyaXB0aW9uLmNyZWF0ZScsXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi51cGRhdGUnLFxuICAnYmlsbGluZy5zdWJzY3JpcHRpb24ucmVhY3RpdmF0ZScsXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi5jYW5jZWwnLFxuICAnYmlsbGluZy5zdWJzY3JpcHRpb24uZGVsZXRlJyxcbiAgJ2JpbGxpbmcudGllci5vdmVycmlkZScsXG4gIC8vIE9wZXJhdG9yLW9ubHkgcmVzZWVkIG9mIHRoZSBpbnZvaWNlIGxlZGdlciBmcm9tIHRoZSBwYXltZW50IHByb3ZpZGVyJ3NcbiAgLy8gaGlzdG9yeSAoUE9TVCAvYmlsbGluZy9hZG1pbi9iYWNrZmlsbCkg4oCUIG11dGF0ZXMgZmluYW5jZSBkYXRhIGZsZWV0LXdpZGUuXG4gICdiaWxsaW5nLmFkZG9uLmFkZCcsXG4gICdiaWxsaW5nLmFkZG9uLnJlbW92ZScsXG4gIC8vIFN5c3RlbS1pbml0aWF0ZWQgcmVtb3ZhbCBvZiBhIHRpZXItaW5jbHVkZWQgYWRkLW9uIG9uIGEgcGxhbiB1cGdyYWRlICh0aGVcbiAgLy8gYWNjb3VudCdzIG5ldyB0aWVyIG5vdyBidW5kbGVzIHRoZSBmZWF0dXJlKSDigJQgZGlzdGluY3QgZnJvbSBhIHVzZXItaW5pdGlhdGVkXG4gIC8vIGByZW1vdmVgIHNvIGZpbmFuY2UgY2FuIHRlbGwgYW4gYXV0by1wcnVuZSBmcm9tIGEgY3VzdG9tZXIgYWN0aW9uLlxuICAnYmlsbGluZy5hZGRvbi5wcnVuZScsXG4gIC8vIERpc2NvdW50cyAoZG9jcy9iaWxsaW5nLWRpc2NvdW50cy5tZCkg4oCUIG1pbnQvaXNzdWUvYXBwbHkvcmVtb3ZlL3Jldm9rZSBvZiBhXG4gIC8vIHByaWNlIGNvdXBvbiBvciB1c2FnZSBjcmVkaXQuIGBkZXRhaWxzYCBjYXJyeSB0aGUgZGlzY291bnQgaWQgKyBraW5kL3ZhbHVlXG4gIC8vIG9ubHksIG5ldmVyIHRoZSBvcGFxdWUgdG9rZW4gb3Igc2lnbmluZyBrZXkuXG4gICdiaWxsaW5nLmRpc2NvdW50LmdlbmVyYXRlJyxcbiAgJ2JpbGxpbmcuZGlzY291bnQuaXNzdWUnLFxuICAnYmlsbGluZy5kaXNjb3VudC5hcHBseScsXG4gICdiaWxsaW5nLmRpc2NvdW50LnJlbW92ZScsXG4gICdiaWxsaW5nLmRpc2NvdW50LnJldm9rZScsXG4gIC8vIFByb21vdGlvbnMgKGRvY3MvYmlsbGluZy1kaXNjb3VudHMubWQjcHJvbW90aW9ucykg4oCUIHJ1bGUtZHJpdmVuIGF1dG8tZ3JhbnRcbiAgLy8gY2FtcGFpZ25zLiBgZGV0YWlsc2AgY2FycnkgdGhlIHByb21vdGlvbiBpZCArIGNlbnRzL2V2ZW50IG9ubHkuXG4gICdiaWxsaW5nLnByb21vdGlvbi5jcmVhdGUnLFxuICAnYmlsbGluZy5wcm9tb3Rpb24udXBkYXRlJyxcbiAgJ2JpbGxpbmcucHJvbW90aW9uLnJldm9rZScsXG4gICdiaWxsaW5nLnByb21vdGlvbi5ncmFudCcsXG4gICdiaWxsaW5nLnByb21vdGlvbi5hY3RpdmF0ZScsXG4gIC8vIFVzYWdlLWNyZWRpdCByZWFsaXphdGlvbiDigJQgYSBjdXN0b21lci9jb21wbGlhbmNlLXZpc2libGUgcmVjb3JkIG9mIGNyZWRpdFxuICAvLyBtb3ZlbWVudDogYGNvbnN1bWVkYCAoTWFya2V0cGxhY2UgbWV0ZXJlZCBkcmF3ZG93biksIGBleGhhdXN0ZWRgIChiYWxhbmNlIGhpdFxuICAvLyB6ZXJvKSwgYW5kIGEgY29tYm8gZW5kaW5nLiBgZGV0YWlsc2AgY2FycnkgY2VudHMvaWRzIG9ubHksIG5vIHBheW1lbnQgc2VjcmV0cy5cbiAgJ2JpbGxpbmcuY3JlZGl0LmNvbnN1bWVkJyxcbiAgJ2JpbGxpbmcuY3JlZGl0LmV4aGF1c3RlZCcsXG4gICdiaWxsaW5nLmNvbWJvLmV4cGlyZWQnLFxuICAvLyBSZXBvcnRpbmcgKGFwaS9yZXBvcnRpbmcpIOKAlCB0aGUgdGhyZWUgcmVwb3J0aW5nIG11dGF0aW9ucyB3aG9zZSBlZmZlY3RcbiAgLy8gb3V0bGl2ZXMgYSByZXF1ZXN0IGxvZzogdGhlIHBlci1vcmcgY29ycmVsYXRpb24td2luZG93IGNvbmZpZyB3cml0ZSwgYVxuICAvLyBwb3N0LWRlcGxveSBvdXRjb21lIG1hcmtlciAoaXQgbW92ZXMgdGhlIG9yZydzIERPUkEgQ0ZSL01UVFIpLCBhbmQgdGhlXG4gIC8vIGluYm91bmQgYmlsbGluZ+KGknJlcG9ydGluZyByZXRlbnRpb24tZW50aXRsZW1lbnQgc3luYyAoYSByZXRlbnRpb24gY3V0IGlzIGFcbiAgLy8gZGF0YS1kZXN0cm95aW5nIGNoYW5nZSBhcHBsaWVkIGJ5IHRoZSBuZXh0IHN3ZWVwKS4gYGRldGFpbHNgIGNhcnJ5IHRoZVxuICAvLyBzZXR0aW5ncy9vdXRjb21lIHZhbHVlcyBvbmx5LlxuICAncmVwb3J0aW5nLnNldHRpbmdzLnVwZGF0ZScsXG4gICdyZXBvcnRpbmcuZGVwbG95bWVudC5vdXRjb21lJyxcbiAgJ3JlcG9ydGluZy5yZXRlbnRpb24uc3luYycsXG4gIC8vIFN0YWtlaG9sZGVyIHJlcG9ydHMg4oCUIHRoZSBhZGQtb24ncyBhdXRob3JpbmcgYW5kIFBVQkxJU0hJTkcgc3VyZmFjZS4gUHVibGlzaGluZ1xuICAvLyBpcyB0aGUgbW9tZW50IGludGVybmFsIGRlbGl2ZXJ5IG51bWJlcnMgbGVhdmUgdGhlIHBsYXRmb3JtLCBzbyB0aGUgd2hvbGVcbiAgLy8gb3V0d2FyZCBwYXRoIGlzIGF1ZGl0YWJsZTogd2hpY2ggcmVwb3J0LCB3aGljaCBwZXJpb2QncyBmcm96ZW4gc25hcHNob3QsXG4gIC8vIHdoaWNoIHZlcnNpb24sIGFuZCB3aG8gbGV0IGl0IG91dC4gYGxpbmsuY3JlYXRlZGAgLyBgbGluay5yZXZva2VkYCBjb3ZlciB0aGVcbiAgLy8gVVJMcyB0aGF0IGxldCBzb21lb25lIHdpdGhvdXQgYW4gYWNjb3VudCByZWFkIGl0OyBgcmVjaXBpZW50LmFkZGVkYCAvXG4gIC8vIGByZWNpcGllbnQucmVtb3ZlZGAgY292ZXIgd2hvIGlzIG9uIHRoZSBkaXN0cmlidXRpb24gbGlzdCwgd2hpY2ggaXMgdGhlIG90aGVyXG4gIC8vIHdheSBkYXRhIHJlYWNoZXMgYSBwZXJzb24uIGBvd25lcnNoaXAudHJhbnNmZXJgIGlzIGEgcHJpdmlsZWdlIG1vdmU6IGFcbiAgLy8gc2NoZWR1bGVkIHJ1biBpcyBhdXRob3JpemVkIGFzIGl0cyBPV05FUiwgc28gaGFuZGluZyBhIGRlZmluaXRpb24gb3ZlciBoYW5kc1xuICAvLyBvdmVyIHdob3NlIGFjY2VzcyB0aGUgbnVtYmVycyBhcmUgY29tcHV0ZWQgd2l0aC5cbiAgLy9cbiAgLy8gRGVsaWJlcmF0ZWx5IE5PVCBhdWRpdGVkOiByZWFkaW5nIGEgc2hhcmVkIHJlcG9ydC4gVGhlIGFjY2VzcyBpcyBsb2dnZWQgYW5kXG4gIC8vIGNvdW50ZWQgcGVyIGxpbmssIGJ1dCBpdCBpcyBhbiBVTkFVVEhFTlRJQ0FURUQsIGV4dGVybmFsbHktdHJpZ2dlcmVkIGV2ZW50IOKAlFxuICAvLyBhbnlvbmUgaG9sZGluZyBhIFVSTCBjb3VsZCBvdGhlcndpc2Ugd3JpdGUgdW5ib3VuZGVkIHJvd3MgaW50byB0aGUgb3JnJ3MgYXVkaXRcbiAgLy8gdHJhaWwsIHdoaWNoIHR1cm5zIGEgcmVhZCBpbnRvIGEgd2F5IHRvIGJ1cnkgdGhlIGVudHJpZXMgdGhhdCBtYXR0ZXIuXG4gICdyZXBvcnRpbmcucmVwb3J0LmRlZmluaXRpb24uY3JlYXRlJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQuZGVmaW5pdGlvbi51cGRhdGUnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5kZWZpbml0aW9uLmRlbGV0ZScsXG4gICdyZXBvcnRpbmcucmVwb3J0Lm93bmVyc2hpcC50cmFuc2ZlcicsXG4gICdyZXBvcnRpbmcucmVwb3J0LnB1Ymxpc2hlZCcsXG4gICdyZXBvcnRpbmcucmVwb3J0LnJlcHVibGlzaGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQubGluay5jcmVhdGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQubGluay5yZXZva2VkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVjaXBpZW50LmFkZGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVjaXBpZW50LnJlbW92ZWQnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5wb2xpY3kudXBkYXRlJyxcbiAgLy8gQSBkZWZpbml0aW9uIFNUT1BQRUQgcHJvZHVjaW5nIHJlcG9ydHMgd2l0aG91dCBhbnlvbmUgYXNraW5nIGl0IHRvOiB0aGUgb3duZXJcbiAgLy8gd2FzIGRlYWN0aXZhdGVkIG9yIHJlbW92ZWQsIG9yIGxvc3QgdGhlIHBlcm1pc3Npb24gYSBydW4gaXMgYXV0aG9yaXplZCB3aXRoLlxuICAvLyBSZWNvcmRlZCBiZWNhdXNlIHRoZSBlZmZlY3QgaXMgc2lsZW50IOKAlCBhIG1hbmFnZXIgZmluZHMgb3V0IGJ5IG5vdCByZWNlaXZpbmdcbiAgLy8gdGhlIHJlcG9ydCDigJQgc28gdGhlIHRyYWlsIGhhcyB0byBzYXkgd2hpY2ggcmVwb3J0cyBzdG9wcGVkIGFuZCB3aHkuXG4gICdyZXBvcnRpbmcucmVwb3J0LnBhdXNlZCcsXG4gIC8vIOKApmFuZCBzdGFydGVkIGFnYWluLiBJdHMgb3duIGFjdGlvbiByYXRoZXIgdGhhbiBhIGRldGFpbCBvbiB0aGUgcGF1c2UsIGJlY2F1c2UgdGhlXG4gIC8vIHF1ZXN0aW9uIGEgcmV2aWV3ZXIgYXNrcyBpcyBcIndhcyB0aGlzIGFjY291bnQncyByZXBvcnRpbmcgb2ZmIGJldHdlZW4gdGhlc2UgdHdvXG4gIC8vIGRhdGVzXCIsIGFuZCBhbnN3ZXJpbmcgaXQgZnJvbSBhIHNpbmdsZSBhY3Rpb24ncyBkZXRhaWxzIG1lYW5zIHJlYWRpbmcgZXZlcnkgcm93LlxuICAncmVwb3J0aW5nLnJlcG9ydC5yZXN1bWVkJyxcbiAgLy8gRGVuaWVkIGF1dGhvcml6YXRpb24gYXR0ZW1wdCDigJQgZW1pdHRlZCBiZXN0LWVmZm9ydCBieSB0aGUgc2hhcmVkXG4gIC8vIGByZXF1aXJlUGVybWlzc2lvbmAgLyBgcmVxdWlyZVN5c3RlbUFkbWluYCBnYXRlIHdoZW4gYSBzdGF0ZS1jaGFuZ2luZ1xuICAvLyAobm9uLUdFVCkgcmVxdWVzdCBpcyByZWplY3RlZCwgc28gcHJvYmluZy9lc2NhbGF0aW9uIGF0dGVtcHRzIGFyZSB2aXNpYmxlXG4gIC8vIHJhdGhlciB0aGFuIGludmlzaWJsZS4gYGRldGFpbHNgIGNhcnJpZXMgdGhlIHJlcXVpcmVkIHBlcm1pc3Npb24gKyBwYXRoO1xuICAvLyBgb3V0Y29tZWAgaXMgJ2ZhaWx1cmUnLlxuICAnYXV0aHouZGVuaWVkJyxcbiAgLy8gXCJBc2tcIiBhc3Npc3RhbnQgYWN0aXZpdHkg4oCUIHZpc2liaWxpdHkgaW50byB3aGF0IHRoZSBhc3Npc3RhbnQgZGlkIG9uIGEgdXNlcidzXG4gIC8vIGJlaGFsZi4gYGFzay5xdWVyeWAgaXMgYSByZWFkLW9ubHkgaG93LXRvIHR1cm47IGBhc2suYWdlbnQudHVybmAgaXMgYSB0b29sLWNhbGxpbmdcbiAgLy8gdHVybi4gYGRldGFpbHNgIGNhcnJ5IFNBRkUgTUVUQURBVEEgT05MWSAodG9vbHMgdXNlZCwgcHJvcG9zYWwga2luZHMsIHF1ZXJ5XG4gIC8vIGxlbmd0aCwgb3V0Y29tZSksIG5ldmVyIHRoZSByYXcgcXVlcnkgdGV4dC5cbiAgJ2Fzay5xdWVyeScsXG4gICdhc2suYWdlbnQudHVybicsXG4gIC8vIFBsdWdpbiBlY29zeXN0ZW0gKGRvY3MvcnVuYm9va3MvZWNvc3lzdGVtLW1vZGVyYXRpb24ubWQpLiBHb3Zlcm5hbmNlIGFjdGlvbnNcbiAgLy8gYXJlIHJlY29yZGVkIHdpdGggYG9yZ0lkYCA9IHRoZSBzeXN0ZW0gb3JnOyBgYWZmZWN0ZWRPcmdJZGAgaXMgdGhlXG4gIC8vIHB1Ymxpc2hlcidzIG9yZyAobGlzdGluZy92ZXJzaW9uL3Jldmlldy9hZHZpc29yeS9wdWJsaXNoZXIgbW9kZXJhdGlvbikgb3JcbiAgLy8gdGhlIGluc3RhbGxpbmcgb3JnIChpbnN0YWxscyArIHBvbGljeSkuIEFub255bW91cyBzdWJtaXNzaW9ucyB1c2UgdGhlXG4gIC8vIGBBTk9OWU1PVVNfQUNUT1JfSURgIGFjdG9yIHdpdGggYGRldGFpbHMuc3VibWlzc2lvbklkYC4gYGRldGFpbHNgIGNhcnJ5IGlkcyxcbiAgLy8gdmVyc2lvbnMsIGRpZ2VzdHMsIHRpZXIsIHN0YXRlIGFuZCByZWFzb24gY29kZXMgb25seSDigJQgbmV2ZXIgcmV2aWV3IGJvZGllcyxcbiAgLy8gUkVBRE1FIGNvbnRlbnQsIHNlY3JldHMgb3IgZW1haWxzLlxuICAvLyBQdWJsaXNoZXJzLlxuICAncHVibGlzaGVyLmNyZWF0ZScsXG4gICdwdWJsaXNoZXIudXBkYXRlJyxcbiAgJ3B1Ymxpc2hlci50ZXJtcy5hY2NlcHQnLFxuICAncHVibGlzaGVyLnZlcmlmeS5yZXF1ZXN0JyxcbiAgJ3B1Ymxpc2hlci52ZXJpZnkuYXBwcm92ZScsXG4gICdwdWJsaXNoZXIudmVyaWZ5LnJlamVjdCcsXG4gICdwdWJsaXNoZXIudGllci5jaGFuZ2UnLFxuICAncHVibGlzaGVyLnN1c3BlbmQnLFxuICAncHVibGlzaGVyLnVuc3VzcGVuZCcsXG4gICdwdWJsaXNoZXIudHJhbnNmZXIucmVxdWVzdCcsXG4gICdwdWJsaXNoZXIudHJhbnNmZXIuYWNjZXB0JyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5kZWNsaW5lJyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5hcHByb3ZlJyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5yZWplY3QnLFxuICAncHVibGlzaGVyLnByb2ZpbGUtY2hhbmdlLmFwcHJvdmUnLFxuICAncHVibGlzaGVyLnByb2ZpbGUtY2hhbmdlLnJlamVjdCcsXG4gIC8vIFB1Ymxpc2ggcmVxdWVzdHMgKHRlbmFudCDihpIgc3lzdGVtIG9yZykuIGBkZXRhaWxzLmtpbmRgIG5hbWVzIHRoZSByZXF1ZXN0LlxuICAncGx1Z2luLnJlcXVlc3Quc3VibWl0JyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LndpdGhkcmF3JyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LmFwcHJvdmUnLFxuICAncGx1Z2luLnJlcXVlc3Quc2Vjb25kLWFwcHJvdmUnLFxuICAncGx1Z2luLnJlcXVlc3QucmVqZWN0JyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LmF1dG8tYXBwcm92ZScsXG4gIC8vIExpc3RpbmdzIGFuZCB2ZXJzaW9ucyAoc3lzdGVtIG9yZywgZXhjZXB0IHRoZSB0ZW5hbnQgcGF1c2UpLlxuICAncGx1Z2luLmxpc3RpbmcucHVibGlzaCcsXG4gICdwbHVnaW4ubGlzdGluZy51bmxpc3QnLFxuICAncGx1Z2luLmxpc3RpbmcudXBkYXRlJyxcbiAgJ3BsdWdpbi5saXN0aW5nLnN0YXRlLmNoYW5nZScsXG4gICdwbHVnaW4ubGlzdGluZy5wYXVzZScsXG4gICdwbHVnaW4ubGlzdGluZy51bnBhdXNlJyxcbiAgJ3BsdWdpbi52ZXJzaW9uLnBhdXNlJyxcbiAgJ3BsdWdpbi52ZXJzaW9uLnlhbmsnLFxuICAncGx1Z2luLnZlcnNpb24udW55YW5rJyxcbiAgJ3BsdWdpbi52ZXJzaW9uLmRlcHJlY2F0ZScsXG4gICdwbHVnaW4uY29sbGVjdGlvbi51cGRhdGUnLFxuICAvLyBFY29zeXN0ZW0gY29uZmlndXJhdGlvbiAoc3lzdGVtIG9yZykuXG4gICdlY29zeXN0ZW0uYXV0by1hcHByb3ZhbC1ydWxlLmNyZWF0ZScsXG4gICdlY29zeXN0ZW0uYXV0by1hcHByb3ZhbC1ydWxlLnVwZGF0ZScsXG4gICdlY29zeXN0ZW0uYXV0by1hcHByb3ZhbC1ydWxlLmRlbGV0ZScsXG4gICdlY29zeXN0ZW0ucmVzZXJ2ZWQtbmFtZS51cGRhdGUnLFxuICAnZWNvc3lzdGVtLnNsYS51cGRhdGUnLFxuICAvLyBQdWJsaWMgcmVnaXN0cnkgbmFtZXNwYWNlIChgcHVibGljLypgKTogY29weSArIHNpZ24gKyBhdHRlc3Qgb24gcHVibGlzaCxcbiAgLy8gdGhlIHRpZXItY2hhbmdlL3N1c3BlbnNpb24gcmUtc2lnbiBqb2IsIHRhZyByZW1vdmFsIG9uIHlhbmsvdGFrZWRvd24sIGFuZFxuICAvLyB0aGUgcmV0ZW50aW9uIHN3ZWVwLlxuICAncmVnaXN0cnkuaW1hZ2UucHVibGlzaCcsXG4gICdyZWdpc3RyeS5pbWFnZS5yZXNpZ24nLFxuICAncmVnaXN0cnkuaW1hZ2UueWFuaycsXG4gICdyZWdpc3RyeS5pbWFnZS5nYycsXG4gIC8vIEluc3RhbGxzIGFuZCB0aGUgaW5zdGFsbGluZyBvcmcncyBjb25zdW1wdGlvbiBwb2xpY3kgKG9yZy1sb2NhbCkuXG4gICdwbHVnaW4uaW5zdGFsbC5yZXF1ZXN0JyxcbiAgJ3BsdWdpbi5pbnN0YWxsLmFwcHJvdmUnLFxuICAncGx1Z2luLmluc3RhbGwuZGVueScsXG4gICdwbHVnaW4uaW5zdGFsbC5jcmVhdGUnLFxuICAncGx1Z2luLmluc3RhbGwudXBncmFkZScsXG4gIC8vIEEgbWVtYmVyJ3MgcmVxdWVzdCB0byBjaGFuZ2UgYW4gaW5zdGFsbCBwYXN0IHdoYXQgdGhleSBtYXkgZG8gYWxvbmUsIGFuZCBpdHMgZGVjaXNpb24uXG4gICdwbHVnaW4uaW5zdGFsbC5jaGFuZ2UtcmVxdWVzdCcsXG4gICdwbHVnaW4uaW5zdGFsbC5jaGFuZ2UtYXBwcm92ZScsXG4gICdwbHVnaW4uaW5zdGFsbC5jaGFuZ2UtcmVqZWN0JyxcbiAgJ3BsdWdpbi5pbnN0YWxsLnJlbW92ZScsXG4gICdvcmcucGx1Z2luLWluc3RhbGwtcG9saWN5LnVwZGF0ZScsXG4gIC8vIFJldmlld3MgYW5kIHJlcGxpZXMuXG4gICdwbHVnaW4ucmV2aWV3LmNyZWF0ZScsXG4gICdwbHVnaW4ucmV2aWV3LnVwZGF0ZScsXG4gICdwbHVnaW4ucmV2aWV3LmRlbGV0ZScsXG4gICdwbHVnaW4ucmV2aWV3LnJlcG9ydCcsXG4gICdwbHVnaW4ucmV2aWV3LmhvbGQnLFxuICAncGx1Z2luLnJldmlldy5yZWxlYXNlJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVtb3ZlJyxcbiAgJ3BsdWdpbi5yZXZpZXcuYW5vbnltaXplJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVwbHkuY3JlYXRlJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVwbHkudXBkYXRlJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVwbHkuZGVsZXRlJyxcbiAgLy8gQW5vbnltb3VzIHN1Ym1pc3Npb25zLlxuICAncGx1Z2luLnN1Ym1pc3Npb24uY3JlYXRlJyxcbiAgJ3BsdWdpbi5zdWJtaXNzaW9uLnZlcmlmeScsXG4gICdwbHVnaW4uc3VibWlzc2lvbi5nYXRlLWZhaWwnLFxuICAncGx1Z2luLnN1Ym1pc3Npb24uYXBwcm92ZScsXG4gICdwbHVnaW4uc3VibWlzc2lvbi5yZWplY3QnLFxuICAncGx1Z2luLnN1Ym1pc3Npb24uY2xhaW0nLFxuICAncGx1Z2luLnN1Ym1pc3Npb24uZXhwaXJlJyxcbiAgLy8gU2VjdXJpdHkgYWR2aXNvcmllcyAocHVibGlzaC93aXRoZHJhdyBhcmUgc3lzdGVtLW9yZyBvbmx5OyB1cGRhdGUgPSBhXG4gIC8vIG1vZGVyYXRvciBlZGl0aW5nIGEgZHJhZnQgYmVmb3JlIGl0IGlzIHB1Ymxpc2hlZCkuXG4gICdwbHVnaW4uYWR2aXNvcnkuY3JlYXRlJyxcbiAgJ3BsdWdpbi5hZHZpc29yeS51cGRhdGUnLFxuICAncGx1Z2luLmFkdmlzb3J5LnB1Ymxpc2gnLFxuICAncGx1Z2luLmFkdmlzb3J5LndpdGhkcmF3JyxcbiAgLy8gUGVyLW9yZyBwbHVnaW4gc2VjdXJpdHkgbm90aWZpY2F0aW9ucyAocGx1Z2luIHNjYW4gZ2F0ZXMpOiB0aGUgc2V0dGluZ3NcbiAgLy8gKHJlY2lwaWVudHMsIGRpZ2VzdCwgd2ViaG9vaywgZXh0ZXJuYWwgYWRkcmVzcyDigJQgY2hhbmdlZCBmaWVsZCBuYW1lcyBhbmRcbiAgLy8gdGhlIHdlYmhvb2sgaG9zdCBvbmx5LCBuZXZlciB0aGUgc2VjcmV0IG9yIHRoZSBhZGRyZXNzKSwgYW4gZXh0ZXJuYWxcbiAgLy8gYWRkcmVzcyBjb25maXJtZWQgdGhyb3VnaCBpdHMgZW1haWxlZCBzaW5nbGUtdXNlIGxpbmssIGFuZCBhIHRlc3Qgc2VuZC5cbiAgJ3BsdWdpbi5zZWN1cml0eV9ub3RpZmljYXRpb25zLnVwZGF0ZScsXG4gICdwbHVnaW4uc2VjdXJpdHlfbm90aWZpY2F0aW9ucy5leHRlcm5hbF9lbWFpbC52ZXJpZnknLFxuICAncGx1Z2luLnNlY3VyaXR5X25vdGlmaWNhdGlvbnMudGVzdCcsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBSZW1vdGVBdWRpdEFjdGlvbiA9IHR5cGVvZiBSRU1PVEVfQVVESVRfQUNUSU9OU1tudW1iZXJdO1xuXG4vKiogV2hldGhlciBgdmFsdWVgIGlzIGFuIGFjdGlvbiBhIHJlbW90ZSBzZXJ2aWNlIG1heSBlbWl0ICh0aGUgaW5nZXN0IGFsbG93LWxpc3QpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVtb3RlQXVkaXRBY3Rpb24odmFsdWU6IHN0cmluZyk6IHZhbHVlIGlzIFJlbW90ZUF1ZGl0QWN0aW9uIHtcbiAgcmV0dXJuIChSRU1PVEVfQVVESVRfQUNUSU9OUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModmFsdWUpO1xufVxuIl19
|
|
354
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWF1ZGl0LWFjdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcmVtb3RlLWF1ZGl0LWFjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7OztHQU9HO0FBR0g7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHO0lBQ2xDLHdCQUF3QjtJQUN4QixxQkFBcUI7SUFDckIsc0JBQXNCO0lBQ3RCLDhFQUE4RTtJQUM5RSwyRUFBMkU7SUFDM0UsOEVBQThFO0lBQzlFLHFCQUFxQjtJQUNyQix1RUFBdUU7SUFDdkUsMkVBQTJFO0lBQzNFLCtFQUErRTtJQUMvRSw4RUFBOEU7SUFDOUUsa0VBQWtFO0lBQ2xFLHlFQUF5RTtJQUN6RSxvQkFBb0I7SUFDcEIsNkVBQTZFO0lBQzdFLCtFQUErRTtJQUMvRSxxRUFBcUU7SUFDckUsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQiw0RUFBNEU7SUFDNUUsd0VBQXdFO0lBQ3hFLGNBQWM7SUFDZCxlQUFlO0lBQ2YsZUFBZTtJQUNmLGVBQWU7SUFDZiw4RUFBOEU7SUFDOUUsNEVBQTRFO0lBQzVFLG9CQUFvQjtJQUNwQixvQkFBb0I7SUFDcEIsa0JBQWtCO0lBQ2xCLHlFQUF5RTtJQUN6RSw0RUFBNEU7SUFDNUUsNEVBQTRFO0lBQzVFLHVFQUF1RTtJQUN2RSxvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLGdFQUFnRTtJQUNoRSxxRUFBcUU7SUFDckUsb0RBQW9EO0lBQ3BELGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixtRUFBbUU7SUFDbkUsNEVBQTRFO0lBQzVFLDBEQUEwRDtJQUMxRCxnQkFBZ0I7SUFDaEIsMEJBQTBCO0lBQzFCLDBCQUEwQjtJQUMxQiwwQkFBMEI7SUFDMUIsMkJBQTJCO0lBQzNCLHlCQUF5QjtJQUN6Qiww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QyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGhlIHJlbW90ZSAobm9uLXBsYXRmb3JtKSBhdWRpdCBBQ1RJT04gVk9DQUJVTEFSWS5cbiAqXG4gKiBLZXB0IGFwYXJ0IGZyb20gdGhlIGNsaWVudCB0aGF0IHNoaXBzIHRoZSBldmVudHMgKGBzZXJ2aWNlcy9yZW1vdGUtYXVkaXQtY2xpZW50LnRzYClcbiAqIGJlY2F1c2UgaXQgaXMgYW4gYWxsb3ctbGlzdCwgbm90IG1hY2hpbmVyeTogaXQgaXMgdGhlIHRoaW5nIGEgcmV2aWV3ZXIgcmVhZHNcbiAqIGVuZCB0byBlbmQgd2hlbiBkZWNpZGluZyB3aGV0aGVyIGEgc2VydmljZSBtYXkgZW1pdCBhIGdpdmVuIGFjdGlvbiwgYW5kIGl0IGlzXG4gKiB3aGF0IHBsYXRmb3JtJ3MgaW5nZXN0IHZhbGlkYXRlcyBhZ2FpbnN0LlxuICovXG5cblxuLyoqXG4gKiBUaGUgZXhhY3Qgc2V0IG9mIGF1ZGl0IGFjdGlvbnMgYSBOT04tUExBVEZPUk0gKHJlbW90ZSkgc2VydmljZSBpcyBwZXJtaXR0ZWQgdG9cbiAqIGVtaXQgdGhyb3VnaCBgUE9TVCAvYXVkaXQvZXZlbnRzYC4gVGhpcyBpcyB0aGUgU0lOR0xFIFNPVVJDRSDigJQgYFJlbW90ZUF1ZGl0QWN0aW9uYFxuICogaXMgZGVyaXZlZCBmcm9tIGl0LCBzbyB0aGUgdHlwZSBhbmQgdGhlIHJ1bnRpbWUgYWxsb3ctbGlzdCBjYW4gbmV2ZXIgZHJpZnQuXG4gKlxuICogU0VDVVJJVFk6IHBsYXRmb3JtJ3MgaW5nZXN0IHZhbGlkYXRlcyBgYWN0aW9uYCBhZ2FpbnN0IHRoaXMgc3Vic2V0ICh2aWFcbiAqIHtAbGluayBpc1JlbW90ZUF1ZGl0QWN0aW9ufSksIE5PVCB0aGUgZnVsbCBwbGF0Zm9ybSBgQXVkaXRBY3Rpb25gIHVuaW9uIOKAlCBhXG4gKiBgc2VydmljZToqYCB0b2tlbiBtdXN0IG5vdCBiZSBhYmxlIHRvIGZvcmdlIHBsYXRmb3JtLWF1dGhvcml0eSBldmVudHNcbiAqIChgYWRtaW4uc3VwZXJhZG1pbi5ncmFudGAsIGBvcmcub3duZXJzaGlwLnRyYW5zZmVyYCwgYHVzZXIubG9naW5gLCDigKYpLiBLZWVwXG4gKiB0aGlzIGxpc3QgZnJlZSBvZiBhbnkgcGxhdGZvcm0tb25seSBhY3Rpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBSRU1PVEVfQVVESVRfQUNUSU9OUyA9IFtcbiAgJ3BsdWdpbi5idWlsZC5jb21wbGV0ZWQnLFxuICAncGx1Z2luLmJ1aWxkLmZhaWxlZCcsXG4gICdwbHVnaW4uYnVpbGQudGltZW91dCcsXG4gIC8vIEEgdmVyc2lvbiBwZXJzaXN0ZWQgVU5TQ0FOTkVEIGJlY2F1c2UgdGhlIGJ1aWxkLXRpbWUgc2NhbiBjb3VsZCBub3QgcnVuIGFuZFxuICAvLyB0aGUgb3BlcmF0b3IgZXNjYXBlIGhhdGNoIGBQTFVHSU5fQUxMT1dfVU5TQ0FOTkVEYCBpcyBvbiAod2l0aG91dCBpdCB0aGVcbiAgLy8gYnVpbGQgZmFpbHMgYElNQUdFX1NDQU5fVU5BVkFJTEFCTEVgKS4gYGRldGFpbHNgIGNhcnJ5IG5hbWUvdmVyc2lvbi9kaWdlc3QuXG4gICdwbHVnaW4uc2Nhbi5za2lwcGVkJyxcbiAgLy8gRml4YWJsZSBDcml0aWNhbCBmaW5kaW5ncyB3ZXJlIEVYRU1QVEVEIGZyb20gdGhlIHBsYXRmb3JtIGZsb29yIGJ5IGFcbiAgLy8gYFBMVUdJTl9WVUxOX1dBSVZFUlNgIGVudHJ5LCBzbyBhIGJ1aWxkIHRoYXQgd291bGQgb3RoZXJ3aXNlIGhhdmUgZmFpbGVkXG4gIC8vIFBMVUdJTl9WVUxOX0dBVEUgd2FzIGFsbG93ZWQgdGhyb3VnaC4gVGhlIG90aGVyIGhhbGYgb2YgcGx1Z2luLnNjYW4uc2tpcHBlZDpcbiAgLy8gYm90aCBhcmUgb3BlcmF0b3IgZXNjYXBlIGhhdGNoZXMgdGhhdCBjaGFuZ2UgYSBnYXRlJ3MgdmVyZGljdCwgYW5kIGEgbWV0cmljXG4gIC8vIGFuZCBhIGxvZyBsaW5lIGFyZSBub3QgYSBkdXJhYmxlIHJlY29yZCBvZiBvbmUuIGBkZXRhaWxzYCBjYXJyeVxuICAvLyBuYW1lL3ZlcnNpb24vZGlnZXN0LCBob3cgbWFueSBmaW5kaW5ncyB3ZXJlIHdhaXZlZCBhbmQgd2hpY2ggcGFja2FnZXMuXG4gICdwbHVnaW4udnVsbi53YWl2ZWQnLFxuICAvLyBQbHVnaW4gbGlmZWN5Y2xlIG11dGF0aW9ucyAoYXBpL3BsdWdpbiByb3V0ZSBoYW5kbGVycykg4oCUIHRoZSBkZXN0cnVjdGl2ZSAvXG4gIC8vIHB1Ymxpc2hpbmcgc3VyZmFjZSB0aGF0IGJ1aWxkcyBhbHJlYWR5IGF1ZGl0J3MgY291bnRlcnBhcnQ6IHJlZ2lzdHJ5IGRlbGV0ZSxcbiAgLy8gc291cmNlIHVwbG9hZCwgYW5kIGRlcGxveS10by1jbHVzdGVyLiBgdGFyZ2V0SWRgIGlzIHRoZSBwbHVnaW4gaWQuXG4gICdwbHVnaW4uZGVsZXRlJyxcbiAgJ3BsdWdpbi5yZXN0b3JlJyxcbiAgLy8gTWFudWFsIHB1cmdlOiBwZXJtYW5lbnQgaGFyZC1kZWxldGUgb2YgYSBzb2Z0LWRlbGV0ZWQgcGx1Z2luIHRvbWJzdG9uZSBvblxuICAvLyBkZW1hbmQgKGZpbmFsaXplcyB3aGF0IHRoZSByZXRlbnRpb24gc3dlZXAgd291bGQgb3RoZXJ3aXNlIGRvIGxhdGVyKS5cbiAgJ3BsdWdpbi5wdXJnZScsXG4gICdwbHVnaW4udXBkYXRlJyxcbiAgJ3BsdWdpbi51cGxvYWQnLFxuICAncGx1Z2luLmRlcGxveScsXG4gIC8vIFBsdWdpbiBidWxrIG11dGF0aW9ucyAoYXBpL3BsdWdpbiBidWxrLXBsdWdpbiByb3V0ZSkgKyBETFEgcHVyZ2UgKGRyb3BzIGFsbFxuICAvLyBkZWFkLWxldHRlcmVkIGJ1aWxkIGpvYnMsIGNyb3NzLW9yZywgc3lzYWRtaW4pLiBgZGV0YWlsc2AgY2FycmllcyBjb3VudHMuXG4gICdwbHVnaW4uYnVsay51cGRhdGUnLFxuICAncGx1Z2luLmJ1bGsuZGVsZXRlJyxcbiAgJ3BsdWdpbi5kbHEucHVyZ2UnLFxuICAvLyBCdWlsZCByZS1ydW5zIGZyb20gdGhlIHF1ZXVlLXRyaWFnZSBzdXJmYWNlOiByZS1lbnF1ZXVlIGEgRkFJTEVEIGJ1aWxkXG4gIC8vIChgcGx1Z2luLmJ1aWxkLnJldHJ5YCkgb3IgYSBkZWFkLWxldHRlcmVkIG9uZSAoYHBsdWdpbi5kbHEucmVwbGF5YCkuIEJvdGhcbiAgLy8gcmUtcnVuIGFuIGltYWdlIGJ1aWxkICsgcGx1Z2luIHBlcnNpc3Qgb24gdGhlIGNhbGxlcidzIGF1dGhvcml0eSwgc28gdGhleVxuICAvLyBhcmUgYXVkaXRlZCBtdXRhdGlvbnM7IGBhZmZlY3RlZE9yZ0lkYCBjYXJyaWVzIHRoZSBqb2IncyBvd25pbmcgb3JnLlxuICAncGx1Z2luLmJ1aWxkLnJldHJ5JyxcbiAgJ3BsdWdpbi5kbHEucmVwbGF5JyxcbiAgLy8gUGlwZWxpbmUgbXV0YXRpb25zIOKAlCBlbWl0dGVkIGJ5IGFwaS9waXBlbGluZSdzIHJvdXRlIGhhbmRsZXJzXG4gIC8vIChjcmVhdGUvdXBkYXRlL2RlbGV0ZSArIENvZGVQaXBlbGluZSBleGVjdXRpb24gdHJpZ2dlci9jYW5jZWwpIGFuZFxuICAvLyBwb3N0ZWQgdG8gcGxhdGZvcm0ncyBgUE9TVCAvYXVkaXQvZXZlbnRzYCBpbmdlc3QuXG4gICdwaXBlbGluZS5jcmVhdGUnLFxuICAncGlwZWxpbmUudXBkYXRlJyxcbiAgJ3BpcGVsaW5lLmRlbGV0ZScsXG4gICdwaXBlbGluZS5yZXN0b3JlJyxcbiAgLy8gTWFudWFsIHB1cmdlOiBwZXJtYW5lbnQgaGFyZC1kZWxldGUgb2YgYSBzb2Z0LWRlbGV0ZWQgcGlwZWxpbmUgL1xuICAvLyBwaXBlbGluZV90ZW1wbGF0ZSB0b21ic3RvbmUgb24gZGVtYW5kIChmaW5hbGl6ZXMgd2hhdCB0aGUgcmV0ZW50aW9uIHN3ZWVwXG4gIC8vIHdvdWxkIG90aGVyd2lzZSBkbyBsYXRlcikuIGB0YXJnZXRJZGAgaXMgdGhlIHB1cmdlZCBpZC5cbiAgJ3BpcGVsaW5lLnB1cmdlJyxcbiAgJ3BpcGVsaW5lX3RlbXBsYXRlLmNyZWF0ZScsXG4gICdwaXBlbGluZV90ZW1wbGF0ZS51cGRhdGUnLFxuICAncGlwZWxpbmVfdGVtcGxhdGUuZGVsZXRlJyxcbiAgJ3BpcGVsaW5lX3RlbXBsYXRlLnJlc3RvcmUnLFxuICAncGlwZWxpbmVfdGVtcGxhdGUucHVyZ2UnLFxuICAncGlwZWxpbmUuZXhlY3V0aW9uLnN0YXJ0JyxcbiAgJ3BpcGVsaW5lLmV4ZWN1dGlvbi5jYW5jZWwnLFxuICAvLyBDb2RlUGlwZWxpbmUgQVJOLXJlZ2lzdHJ5IGNvbmZpZyAoYXBpL3BpcGVsaW5lIHJlZ2lzdHJ5IHJvdXRlKSDigJQgcmVnaXN0ZXJpbmcgL1xuICAvLyBkZXJlZ2lzdGVyaW5nIHRoZSBleHRlcm5hbCBDb2RlUGlwZWxpbmUgdGhhdCBiYWNrcyBhIHBpcGVsaW5lIChkZXBsb3ktYWZmZWN0aW5nKS5cbiAgJ3BpcGVsaW5lLnJlZ2lzdHJ5LnJlZ2lzdGVyJyxcbiAgJ3BpcGVsaW5lLnJlZ2lzdHJ5LmRlcmVnaXN0ZXInLFxuICAvLyBRdW90YSBhZG1pbmlzdHJhdGlvbiAoYXBpL3F1b3RhKSDigJQgYSBzdXBlcmFkbWluIHJlc2V0dGluZyBhbiBvcmcncyB1c2FnZVxuICAvLyBjb3VudGVyIG9yIGVkaXRpbmcgaXRzIHRpZXIgbGltaXRzLiBgYWZmZWN0ZWRPcmdJZGAgaXMgdGhlIG9yZyBjaGFuZ2VkO1xuICAvLyBgZGV0YWlsc2AgY2FycmllcyB0aGUgcXVvdGFUeXBlICsgb2xkL25ldyB2YWx1ZS5cbiAgJ3F1b3RhLnJlc2V0JyxcbiAgJ3F1b3RhLmxpbWl0LnVwZGF0ZScsXG4gIC8vIEEgc3VwZXJhZG1pbiBkZWxldGluZyBhbiBvcmcncyBlbnRpcmUgcXVvdGEgZG9jdW1lbnQuXG4gICdxdW90YS5kZWxldGUnLFxuICAvLyBDb21wbGlhbmNlIGFkbWluaXN0cmF0aW9uIChhcGkvY29tcGxpYW5jZSkg4oCUIHRoZSBlbmZvcmNlbWVudC1wb3N0dXJlIHN1cmZhY2UuXG4gIC8vIEFwcHJvdmluZy9yZXZva2luZyBhbiBleGVtcHRpb24sIHRvZ2dsaW5nL2F1dGhvcmluZy9kZWxldGluZyBhIHJ1bGUsXG4gIC8vIGF1dGhvcmluZy9kZWxldGluZyBhIHBvbGljeSwgbWFuYWdpbmcgc2NhbiBzY2hlZHVsZXMsIGFwcGx5aW5nIGEgdGVtcGxhdGUsXG4gIC8vIG9yIGNhbmNlbGxpbmcgYSBydW5uaW5nIHNjYW4uIGB0YXJnZXRJZGAgaXMgdGhlIHJ1bGUvcG9saWN5L2V4ZW1wdGlvbi9zY2FuIGlkLlxuICAnY29tcGxpYW5jZS5leGVtcHRpb24uYXBwcm92ZScsXG4gICdjb21wbGlhbmNlLmV4ZW1wdGlvbi5yZXZva2UnLFxuICAnY29tcGxpYW5jZS5ydWxlLnRvZ2dsZScsXG4gICdjb21wbGlhbmNlLnJ1bGUuY3JlYXRlJyxcbiAgJ2NvbXBsaWFuY2UucnVsZS51cGRhdGUnLFxuICAnY29tcGxpYW5jZS5ydWxlLmRlbGV0ZScsXG4gICdjb21wbGlhbmNlLnJ1bGUucmVzdG9yZScsXG4gIC8vIE1hbnVhbCBvbi1kZW1hbmQgaGFyZC1kZWxldGUgKFBVUkdFKSBvZiBhIHNvZnQtZGVsZXRlZCBydWxlL3BvbGljeSB0b21ic3RvbmUg4oCUXG4gIC8vIHRoZSBjYWxsZXItaW5pdGlhdGVkIGNvdW50ZXJwYXJ0IHRvIHRoZSByZXRlbnRpb24gc3dlZXAncyBhdXRvLXB1cmdlLiBEZXN0cm95c1xuICAvLyB0aGUgdG9tYnN0b25lIHBlcm1hbmVudGx5LCBzbyBpdCBjYXJyaWVzIHRoZSBkdXJhYmxlLCB0YW1wZXItZXZpZGVudCB0cmFpbC5cbiAgJ2NvbXBsaWFuY2UucnVsZS5wdXJnZScsXG4gICdjb21wbGlhbmNlLnBvbGljeS5jcmVhdGUnLFxuICAnY29tcGxpYW5jZS5wb2xpY3kudXBkYXRlJyxcbiAgJ2NvbXBsaWFuY2UucG9saWN5LmRlbGV0ZScsXG4gICdjb21wbGlhbmNlLnBvbGljeS5yZXN0b3JlJyxcbiAgJ2NvbXBsaWFuY2UucG9saWN5LnB1cmdlJyxcbiAgJ2NvbXBsaWFuY2Uuc2Nhbi1zY2hlZHVsZS5jcmVhdGUnLFxuICAnY29tcGxpYW5jZS5zY2FuLXNjaGVkdWxlLnVwZGF0ZScsXG4gICdjb21wbGlhbmNlLnNjYW4tc2NoZWR1bGUuZGVsZXRlJyxcbiAgJ2NvbXBsaWFuY2UudGVtcGxhdGUuYXBwbHknLFxuICAvLyBMYXVuY2hpbmcgYW4gb3JnLXdpZGUgcmUtZXZhbHVhdGlvbiAodGhlIGNvdW50ZXJwYXJ0IHRvIGAuY2FuY2VsYCkg4oCUIGl0XG4gIC8vIHBlcnNpc3RzIGEgc2NhbiBhbmQgY2FuIGJsb2NrIGVudGl0aWVzIHRoYXQgcGFzc2VkIGJlZm9yZS5cbiAgJ2NvbXBsaWFuY2Uuc2Nhbi5jcmVhdGUnLFxuICAnY29tcGxpYW5jZS5zY2FuLmNhbmNlbCcsXG4gIC8vIFBlci1vcmcgY29tcGxpYW5jZSBub3RpZmljYXRpb24gc2V0dGluZ3M6IHJlY2lwaWVudHMgKyB0aGUgb3V0Ym91bmQgd2ViaG9va1xuICAvLyBVUkwvc2VjcmV0LiBCZWFyZXItZXF1aXZhbGVudCBjb25maWcgdGhhdCByZWRpcmVjdHMgdmlvbGF0aW9uIG5vdGljZXMsIHNvIGFcbiAgLy8gY2hhbmdlIGNhcnJpZXMgdGhlIGR1cmFibGUgdHJhaWwgKG5ldmVyIHRoZSBzZWNyZXQgaXRzZWxmKS5cbiAgJ2NvbXBsaWFuY2Uubm90aWZpY2F0aW9uLXByZWZlcmVuY2UudXBkYXRlJyxcbiAgLy8gSW1hZ2UtcmVnaXN0cnkgZGVzdHJ1Y3RpdmUgb3BzIChhcGkvaW1hZ2UtcmVnaXN0cnkpIOKAlCBnYXJiYWdlLWNvbGxlY3Rpb25cbiAgLy8gc3dlZXBzIGFuZCBleHBsaWNpdCBpbWFnZS90YWcgZGVsZXRlcy5cbiAgJ3JlZ2lzdHJ5LmdjJyxcbiAgJ3JlZ2lzdHJ5LmltYWdlLmRlbGV0ZScsXG4gIC8vIENyb3NzLXJlcG8gdGFnL2ltYWdlIGNvcHkgKGFwaS9pbWFnZS1yZWdpc3RyeSBQT1NUIC9hcGkvaW1hZ2VzL2NvcHkpLiBBXG4gIC8vIGNyb3NzLXRlbmFudCBjb3B5IG1vdmVzIGRhdGEgYWNyb3NzIGN1c3RvbWVyIGJvdW5kYXJpZXMsIHNvIGl0IG5lZWRzIHRoZVxuICAvLyBkdXJhYmxlLCB0YW1wZXItZXZpZGVudCB0cmFpbCDigJQgbm90IGp1c3QgdGhlIExva2kgb3BlcmF0b3IgbGluZS5cbiAgJ3JlZ2lzdHJ5LmltYWdlLmNvcHknLFxuICAvLyBBIHBsdWdpbiBpbWFnZSBzaWduZWQgKyBTQk9NLWF0dGVzdGVkIGJ5IHRoZSBwbGF0Zm9ybSdzIHBsdWdpbi1zaWduaW5nIGtleVxuICAvLyAoYXBpL2ltYWdlLXJlZ2lzdHJ5IFBPU1QgL2ludGVybmFsL3BsdWdpbi1zaWduYXR1cmVzLCBjYWxsZWQgYnkgdGhlIHBsdWdpblxuICAvLyBidWlsZCB3b3JrZXIpLiBUaGUga2V5IGlzIHdoYXQgc3ludGggdHJ1c3RzLCBzbyBldmVyeSB1c2UgaXMgb24gdGhlIHRyYWlsLlxuICAncmVnaXN0cnkuaW1hZ2Uuc2lnbicsXG4gIC8vIE1lc3NhZ2luZyAoYXBpL21lc3NhZ2UpIOKAlCBhZG1pbiBCUk9BRENBU1QgYW5ub3VuY2VtZW50cyArIGRlc3RydWN0aXZlXG4gIC8vIGRlbGV0ZXMuIDE6MSB1c2VyIG1lc3NhZ2VzIGFyZSBpbnRlbnRpb25hbGx5IE5PVCBhdWRpdGVkIChub2lzZSArIHRoZXkgd291bGRcbiAgLy8gcHVsbCBwcml2YXRlIGNvbnRlbnQgaW50byB0aGUgdHJhaWwpLiBgZGV0YWlsc2AgY2FycnkgbWV0YWRhdGEgb25seVxuICAvLyAoc3ViamVjdC90eXBlL3Njb3BlKSwgTkVWRVIgbWVzc2FnZSBib2R5IGNvbnRlbnQuXG4gICdtZXNzYWdlLmFubm91bmNlbWVudC5jcmVhdGUnLFxuICAnbWVzc2FnZS5kZWxldGUnLFxuICAnbWVzc2FnZS5yZXN0b3JlJyxcbiAgLy8gTWFudWFsIG9uLWRlbWFuZCBQVVJHRSAocGVybWFuZW50IGhhcmQtZGVsZXRlKSBvZiBhbiBhbHJlYWR5LXNvZnQtZGVsZXRlZFxuICAvLyBtZXNzYWdlIHRvbWJzdG9uZSDigJQgdGhlIGRlc3RydWN0aXZlIGZpbmFsaXplciB0aGUgcmV0ZW50aW9uIHN3ZWVwIHdvdWxkXG4gIC8vIG90aGVyd2lzZSBwZXJmb3JtIGF0IHRoZSBwdXJnZSBkZWFkbGluZS4gYGRldGFpbHNgIGNhcnJ5IG1ldGFkYXRhIG9ubHkuXG4gICdtZXNzYWdlLnB1cmdlJyxcbiAgLy8gQmlsbGluZyAoYXBpL2JpbGxpbmcpIOKAlCBzdWJzY3JpcHRpb24gKyBlbnRpdGxlbWVudCBtdXRhdGlvbnMsIG1pcnJvcmVkIHRvIHRoZVxuICAvLyBjZW50cmFsIGF1ZGl0IHRyYWlsICh0aGVzZSBhbHNvIHdyaXRlIHRvIHRoZSBzZXJ2aWNlLWxvY2FsIGJpbGxpbmdfZXZlbnRzXG4gIC8vIGNvbGxlY3Rpb24pLiBgZGV0YWlsc2AgY2FycnkgcGxhbi90aWVyL2FkZG9uIGlkcyBvbmx5IOKAlCBuZXZlciBjYXJkL3BheW1lbnRcbiAgLy8gc2VjcmV0cyBvciBhbiBBV1MgYWNjb3VudCBpZC5cbiAgLy8gU3Vic2NyaXB0aW9uIGxpZmVjeWNsZSBhIENVU1RPTUVSIGRyaXZlcyAodGhlIGFkbWluIGNvdW50ZXJwYXJ0IGlzXG4gIC8vIGBiaWxsaW5nLnRpZXIub3ZlcnJpZGVgKTogc2VsZi1zZXJ2ZSBjcmVhdGUgKGRpcmVjdCBvciBNYXJrZXRwbGFjZSBjbGFpbSksXG4gIC8vIHBsYW4vaW50ZXJ2YWwgY2hhbmdlLCBjYW5jZWwtYXQtcGVyaW9kLWVuZCwgdW5kby1jYW5jZWwsIGNhc2NhZGUgZGVsZXRlLlxuICAnYmlsbGluZy5zdWJzY3JpcHRpb24uY3JlYXRlJyxcbiAgJ2JpbGxpbmcuc3Vic2NyaXB0aW9uLnVwZGF0ZScsXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi5yZWFjdGl2YXRlJyxcbiAgJ2JpbGxpbmcuc3Vic2NyaXB0aW9uLmNhbmNlbCcsXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi5kZWxldGUnLFxuICAnYmlsbGluZy50aWVyLm92ZXJyaWRlJyxcbiAgLy8gT3BlcmF0b3Itb25seSByZXNlZWQgb2YgdGhlIGludm9pY2UgbGVkZ2VyIGZyb20gdGhlIHBheW1lbnQgcHJvdmlkZXInc1xuICAvLyBoaXN0b3J5IChQT1NUIC9iaWxsaW5nL2FkbWluL2JhY2tmaWxsKSDigJQgbXV0YXRlcyBmaW5hbmNlIGRhdGEgZmxlZXQtd2lkZS5cbiAgJ2JpbGxpbmcuYWRkb24uYWRkJyxcbiAgJ2JpbGxpbmcuYWRkb24ucmVtb3ZlJyxcbiAgLy8gU3lzdGVtLWluaXRpYXRlZCByZW1vdmFsIG9mIGEgdGllci1pbmNsdWRlZCBhZGQtb24gb24gYSBwbGFuIHVwZ3JhZGUgKHRoZVxuICAvLyBhY2NvdW50J3MgbmV3IHRpZXIgbm93IGJ1bmRsZXMgdGhlIGZlYXR1cmUpIOKAlCBkaXN0aW5jdCBmcm9tIGEgdXNlci1pbml0aWF0ZWRcbiAgLy8gYHJlbW92ZWAgc28gZmluYW5jZSBjYW4gdGVsbCBhbiBhdXRvLXBydW5lIGZyb20gYSBjdXN0b21lciBhY3Rpb24uXG4gICdiaWxsaW5nLmFkZG9uLnBydW5lJyxcbiAgLy8gRGlzY291bnRzIChkb2NzL2JpbGxpbmctZGlzY291bnRzLm1kKSDigJQgbWludC9pc3N1ZS9hcHBseS9yZW1vdmUvcmV2b2tlIG9mIGFcbiAgLy8gcHJpY2UgY291cG9uIG9yIHVzYWdlIGNyZWRpdC4gYGRldGFpbHNgIGNhcnJ5IHRoZSBkaXNjb3VudCBpZCArIGtpbmQvdmFsdWVcbiAgLy8gb25seSwgbmV2ZXIgdGhlIG9wYXF1ZSB0b2tlbiBvciBzaWduaW5nIGtleS5cbiAgJ2JpbGxpbmcuZGlzY291bnQuZ2VuZXJhdGUnLFxuICAnYmlsbGluZy5kaXNjb3VudC5pc3N1ZScsXG4gICdiaWxsaW5nLmRpc2NvdW50LmFwcGx5JyxcbiAgJ2JpbGxpbmcuZGlzY291bnQucmVtb3ZlJyxcbiAgJ2JpbGxpbmcuZGlzY291bnQucmV2b2tlJyxcbiAgLy8gUHJvbW90aW9ucyAoZG9jcy9iaWxsaW5nLWRpc2NvdW50cy5tZCNwcm9tb3Rpb25zKSDigJQgcnVsZS1kcml2ZW4gYXV0by1ncmFudFxuICAvLyBjYW1wYWlnbnMuIGBkZXRhaWxzYCBjYXJyeSB0aGUgcHJvbW90aW9uIGlkICsgY2VudHMvZXZlbnQgb25seS5cbiAgJ2JpbGxpbmcucHJvbW90aW9uLmNyZWF0ZScsXG4gICdiaWxsaW5nLnByb21vdGlvbi51cGRhdGUnLFxuICAnYmlsbGluZy5wcm9tb3Rpb24ucmV2b2tlJyxcbiAgJ2JpbGxpbmcucHJvbW90aW9uLmdyYW50JyxcbiAgJ2JpbGxpbmcucHJvbW90aW9uLmFjdGl2YXRlJyxcbiAgLy8gVXNhZ2UtY3JlZGl0IHJlYWxpemF0aW9uIOKAlCBhIGN1c3RvbWVyL2NvbXBsaWFuY2UtdmlzaWJsZSByZWNvcmQgb2YgY3JlZGl0XG4gIC8vIG1vdmVtZW50OiBgY29uc3VtZWRgIChNYXJrZXRwbGFjZSBtZXRlcmVkIGRyYXdkb3duKSwgYGV4aGF1c3RlZGAgKGJhbGFuY2UgaGl0XG4gIC8vIHplcm8pLCBhbmQgYSBjb21ibyBlbmRpbmcuIGBkZXRhaWxzYCBjYXJyeSBjZW50cy9pZHMgb25seSwgbm8gcGF5bWVudCBzZWNyZXRzLlxuICAnYmlsbGluZy5jcmVkaXQuY29uc3VtZWQnLFxuICAnYmlsbGluZy5jcmVkaXQuZXhoYXVzdGVkJyxcbiAgJ2JpbGxpbmcuY29tYm8uZXhwaXJlZCcsXG4gIC8vIFJlcG9ydGluZyAoYXBpL3JlcG9ydGluZykg4oCUIHRoZSB0aHJlZSByZXBvcnRpbmcgbXV0YXRpb25zIHdob3NlIGVmZmVjdFxuICAvLyBvdXRsaXZlcyBhIHJlcXVlc3QgbG9nOiB0aGUgcGVyLW9yZyBjb3JyZWxhdGlvbi13aW5kb3cgY29uZmlnIHdyaXRlLCBhXG4gIC8vIHBvc3QtZGVwbG95IG91dGNvbWUgbWFya2VyIChpdCBtb3ZlcyB0aGUgb3JnJ3MgRE9SQSBDRlIvTVRUUiksIGFuZCB0aGVcbiAgLy8gaW5ib3VuZCBiaWxsaW5n4oaScmVwb3J0aW5nIHJldGVudGlvbi1lbnRpdGxlbWVudCBzeW5jIChhIHJldGVudGlvbiBjdXQgaXMgYVxuICAvLyBkYXRhLWRlc3Ryb3lpbmcgY2hhbmdlIGFwcGxpZWQgYnkgdGhlIG5leHQgc3dlZXApLiBgZGV0YWlsc2AgY2FycnkgdGhlXG4gIC8vIHNldHRpbmdzL291dGNvbWUgdmFsdWVzIG9ubHkuXG4gICdyZXBvcnRpbmcuc2V0dGluZ3MudXBkYXRlJyxcbiAgJ3JlcG9ydGluZy5kZXBsb3ltZW50Lm91dGNvbWUnLFxuICAncmVwb3J0aW5nLnJldGVudGlvbi5zeW5jJyxcbiAgLy8gU3Rha2Vob2xkZXIgcmVwb3J0cyDigJQgdGhlIGFkZC1vbidzIGF1dGhvcmluZyBhbmQgUFVCTElTSElORyBzdXJmYWNlLiBQdWJsaXNoaW5nXG4gIC8vIGlzIHRoZSBtb21lbnQgaW50ZXJuYWwgZGVsaXZlcnkgbnVtYmVycyBsZWF2ZSB0aGUgcGxhdGZvcm0sIHNvIHRoZSB3aG9sZVxuICAvLyBvdXR3YXJkIHBhdGggaXMgYXVkaXRhYmxlOiB3aGljaCByZXBvcnQsIHdoaWNoIHBlcmlvZCdzIGZyb3plbiBzbmFwc2hvdCxcbiAgLy8gd2hpY2ggdmVyc2lvbiwgYW5kIHdobyBsZXQgaXQgb3V0LiBgbGluay5jcmVhdGVkYCAvIGBsaW5rLnJldm9rZWRgIGNvdmVyIHRoZVxuICAvLyBVUkxzIHRoYXQgbGV0IHNvbWVvbmUgd2l0aG91dCBhbiBhY2NvdW50IHJlYWQgaXQ7IGByZWNpcGllbnQuYWRkZWRgIC9cbiAgLy8gYHJlY2lwaWVudC5yZW1vdmVkYCBjb3ZlciB3aG8gaXMgb24gdGhlIGRpc3RyaWJ1dGlvbiBsaXN0LCB3aGljaCBpcyB0aGUgb3RoZXJcbiAgLy8gd2F5IGRhdGEgcmVhY2hlcyBhIHBlcnNvbi4gYG93bmVyc2hpcC50cmFuc2ZlcmAgaXMgYSBwcml2aWxlZ2UgbW92ZTogYVxuICAvLyBzY2hlZHVsZWQgcnVuIGlzIGF1dGhvcml6ZWQgYXMgaXRzIE9XTkVSLCBzbyBoYW5kaW5nIGEgZGVmaW5pdGlvbiBvdmVyIGhhbmRzXG4gIC8vIG92ZXIgd2hvc2UgYWNjZXNzIHRoZSBudW1iZXJzIGFyZSBjb21wdXRlZCB3aXRoLlxuICAvL1xuICAvLyBEZWxpYmVyYXRlbHkgTk9UIGF1ZGl0ZWQ6IHJlYWRpbmcgYSBzaGFyZWQgcmVwb3J0LiBUaGUgYWNjZXNzIGlzIGxvZ2dlZCBhbmRcbiAgLy8gY291bnRlZCBwZXIgbGluaywgYnV0IGl0IGlzIGFuIFVOQVVUSEVOVElDQVRFRCwgZXh0ZXJuYWxseS10cmlnZ2VyZWQgZXZlbnQg4oCUXG4gIC8vIGFueW9uZSBob2xkaW5nIGEgVVJMIGNvdWxkIG90aGVyd2lzZSB3cml0ZSB1bmJvdW5kZWQgcm93cyBpbnRvIHRoZSBvcmcncyBhdWRpdFxuICAvLyB0cmFpbCwgd2hpY2ggdHVybnMgYSByZWFkIGludG8gYSB3YXkgdG8gYnVyeSB0aGUgZW50cmllcyB0aGF0IG1hdHRlci5cbiAgJ3JlcG9ydGluZy5yZXBvcnQuZGVmaW5pdGlvbi5jcmVhdGUnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5kZWZpbml0aW9uLnVwZGF0ZScsXG4gICdyZXBvcnRpbmcucmVwb3J0LmRlZmluaXRpb24uZGVsZXRlJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQub3duZXJzaGlwLnRyYW5zZmVyJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucHVibGlzaGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVwdWJsaXNoZWQnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5saW5rLmNyZWF0ZWQnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5saW5rLnJldm9rZWQnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5yZWNpcGllbnQuYWRkZWQnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5yZWNpcGllbnQucmVtb3ZlZCcsXG4gICdyZXBvcnRpbmcucmVwb3J0LnBvbGljeS51cGRhdGUnLFxuICAvLyBBIGRlZmluaXRpb24gU1RPUFBFRCBwcm9kdWNpbmcgcmVwb3J0cyB3aXRob3V0IGFueW9uZSBhc2tpbmcgaXQgdG86IHRoZSBvd25lclxuICAvLyB3YXMgZGVhY3RpdmF0ZWQgb3IgcmVtb3ZlZCwgb3IgbG9zdCB0aGUgcGVybWlzc2lvbiBhIHJ1biBpcyBhdXRob3JpemVkIHdpdGguXG4gIC8vIFJlY29yZGVkIGJlY2F1c2UgdGhlIGVmZmVjdCBpcyBzaWxlbnQg4oCUIGEgbWFuYWdlciBmaW5kcyBvdXQgYnkgbm90IHJlY2VpdmluZ1xuICAvLyB0aGUgcmVwb3J0IOKAlCBzbyB0aGUgdHJhaWwgaGFzIHRvIHNheSB3aGljaCByZXBvcnRzIHN0b3BwZWQgYW5kIHdoeS5cbiAgJ3JlcG9ydGluZy5yZXBvcnQucGF1c2VkJyxcbiAgLy8g4oCmYW5kIHN0YXJ0ZWQgYWdhaW4uIEl0cyBvd24gYWN0aW9uIHJhdGhlciB0aGFuIGEgZGV0YWlsIG9uIHRoZSBwYXVzZSwgYmVjYXVzZSB0aGVcbiAgLy8gcXVlc3Rpb24gYSByZXZpZXdlciBhc2tzIGlzIFwid2FzIHRoaXMgYWNjb3VudCdzIHJlcG9ydGluZyBvZmYgYmV0d2VlbiB0aGVzZSB0d29cbiAgLy8gZGF0ZXNcIiwgYW5kIGFuc3dlcmluZyBpdCBmcm9tIGEgc2luZ2xlIGFjdGlvbidzIGRldGFpbHMgbWVhbnMgcmVhZGluZyBldmVyeSByb3cuXG4gICdyZXBvcnRpbmcucmVwb3J0LnJlc3VtZWQnLFxuICAvLyBEZW5pZWQgYXV0aG9yaXphdGlvbiBhdHRlbXB0IOKAlCBlbWl0dGVkIGJlc3QtZWZmb3J0IGJ5IHRoZSBzaGFyZWRcbiAgLy8gYHJlcXVpcmVQZXJtaXNzaW9uYCAvIGByZXF1aXJlU3lzdGVtQWRtaW5gIGdhdGUgd2hlbiBhIHN0YXRlLWNoYW5naW5nXG4gIC8vIChub24tR0VUKSByZXF1ZXN0IGlzIHJlamVjdGVkLCBzbyBwcm9iaW5nL2VzY2FsYXRpb24gYXR0ZW1wdHMgYXJlIHZpc2libGVcbiAgLy8gcmF0aGVyIHRoYW4gaW52aXNpYmxlLiBgZGV0YWlsc2AgY2FycmllcyB0aGUgcmVxdWlyZWQgcGVybWlzc2lvbiArIHBhdGg7XG4gIC8vIGBvdXRjb21lYCBpcyAnZmFpbHVyZScuXG4gICdhdXRoei5kZW5pZWQnLFxuICAvLyBcIkFza1wiIGFzc2lzdGFudCBhY3Rpdml0eSDigJQgdmlzaWJpbGl0eSBpbnRvIHdoYXQgdGhlIGFzc2lzdGFudCBkaWQgb24gYSB1c2VyJ3NcbiAgLy8gYmVoYWxmLiBgYXNrLnF1ZXJ5YCBpcyBhIHJlYWQtb25seSBob3ctdG8gdHVybjsgYGFzay5hZ2VudC50dXJuYCBpcyBhIHRvb2wtY2FsbGluZ1xuICAvLyB0dXJuLiBgZGV0YWlsc2AgY2FycnkgU0FGRSBNRVRBREFUQSBPTkxZICh0b29scyB1c2VkLCBwcm9wb3NhbCBraW5kcywgcXVlcnlcbiAgLy8gbGVuZ3RoLCBvdXRjb21lKSwgbmV2ZXIgdGhlIHJhdyBxdWVyeSB0ZXh0LlxuICAnYXNrLnF1ZXJ5JyxcbiAgJ2Fzay5hZ2VudC50dXJuJyxcbiAgLy8gUGx1Z2luIGVjb3N5c3RlbSAoZG9jcy9ydW5ib29rcy9lY29zeXN0ZW0tbW9kZXJhdGlvbi5tZCkuIEdvdmVybmFuY2UgYWN0aW9uc1xuICAvLyBhcmUgcmVjb3JkZWQgd2l0aCBgb3JnSWRgID0gdGhlIHN5c3RlbSBvcmc7IGBhZmZlY3RlZE9yZ0lkYCBpcyB0aGVcbiAgLy8gcHVibGlzaGVyJ3Mgb3JnIChsaXN0aW5nL3ZlcnNpb24vcmV2aWV3L2Fkdmlzb3J5L3B1Ymxpc2hlciBtb2RlcmF0aW9uKSBvclxuICAvLyB0aGUgaW5zdGFsbGluZyBvcmcgKGluc3RhbGxzICsgcG9saWN5KS4gQW5vbnltb3VzIHN1Ym1pc3Npb25zIHVzZSB0aGVcbiAgLy8gYEFOT05ZTU9VU19BQ1RPUl9JRGAgYWN0b3Igd2l0aCBgZGV0YWlscy5zdWJtaXNzaW9uSWRgLiBgZGV0YWlsc2AgY2FycnkgaWRzLFxuICAvLyB2ZXJzaW9ucywgZGlnZXN0cywgdGllciwgc3RhdGUgYW5kIHJlYXNvbiBjb2RlcyBvbmx5IOKAlCBuZXZlciByZXZpZXcgYm9kaWVzLFxuICAvLyBSRUFETUUgY29udGVudCwgc2VjcmV0cyBvciBlbWFpbHMuXG4gIC8vIFB1Ymxpc2hlcnMuXG4gICdwdWJsaXNoZXIuY3JlYXRlJyxcbiAgJ3B1Ymxpc2hlci51cGRhdGUnLFxuICAncHVibGlzaGVyLnRlcm1zLmFjY2VwdCcsXG4gICdwdWJsaXNoZXIudmVyaWZ5LnJlcXVlc3QnLFxuICAncHVibGlzaGVyLnZlcmlmeS5hcHByb3ZlJyxcbiAgJ3B1Ymxpc2hlci52ZXJpZnkucmVqZWN0JyxcbiAgJ3B1Ymxpc2hlci50aWVyLmNoYW5nZScsXG4gICdwdWJsaXNoZXIuc3VzcGVuZCcsXG4gICdwdWJsaXNoZXIudW5zdXNwZW5kJyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5yZXF1ZXN0JyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5hY2NlcHQnLFxuICAncHVibGlzaGVyLnRyYW5zZmVyLmRlY2xpbmUnLFxuICAncHVibGlzaGVyLnRyYW5zZmVyLmFwcHJvdmUnLFxuICAncHVibGlzaGVyLnRyYW5zZmVyLnJlamVjdCcsXG4gICdwdWJsaXNoZXIucHJvZmlsZS1jaGFuZ2UuYXBwcm92ZScsXG4gICdwdWJsaXNoZXIucHJvZmlsZS1jaGFuZ2UucmVqZWN0JyxcbiAgLy8gUHVibGlzaCByZXF1ZXN0cyAodGVuYW50IOKGkiBzeXN0ZW0gb3JnKS4gYGRldGFpbHMua2luZGAgbmFtZXMgdGhlIHJlcXVlc3QuXG4gICdwbHVnaW4ucmVxdWVzdC5zdWJtaXQnLFxuICAncGx1Z2luLnJlcXVlc3Qud2l0aGRyYXcnLFxuICAncGx1Z2luLnJlcXVlc3QuYXBwcm92ZScsXG4gICdwbHVnaW4ucmVxdWVzdC5zZWNvbmQtYXBwcm92ZScsXG4gICdwbHVnaW4ucmVxdWVzdC5yZWplY3QnLFxuICAncGx1Z2luLnJlcXVlc3QuYXV0by1hcHByb3ZlJyxcbiAgLy8gTGlzdGluZ3MgYW5kIHZlcnNpb25zIChzeXN0ZW0gb3JnLCBleGNlcHQgdGhlIHRlbmFudCBwYXVzZSkuXG4gICdwbHVnaW4ubGlzdGluZy5wdWJsaXNoJyxcbiAgJ3BsdWdpbi5saXN0aW5nLnVubGlzdCcsXG4gICdwbHVnaW4ubGlzdGluZy51cGRhdGUnLFxuICAncGx1Z2luLmxpc3Rpbmcuc3RhdGUuY2hhbmdlJyxcbiAgJ3BsdWdpbi5saXN0aW5nLnBhdXNlJyxcbiAgJ3BsdWdpbi5saXN0aW5nLnVucGF1c2UnLFxuICAncGx1Z2luLnZlcnNpb24ucGF1c2UnLFxuICAncGx1Z2luLnZlcnNpb24ueWFuaycsXG4gICdwbHVnaW4udmVyc2lvbi51bnlhbmsnLFxuICAncGx1Z2luLnZlcnNpb24uZGVwcmVjYXRlJyxcbiAgJ3BsdWdpbi5jb2xsZWN0aW9uLnVwZGF0ZScsXG4gIC8vIEVjb3N5c3RlbSBjb25maWd1cmF0aW9uIChzeXN0ZW0gb3JnKS5cbiAgJ2Vjb3N5c3RlbS5hdXRvLWFwcHJvdmFsLXJ1bGUuY3JlYXRlJyxcbiAgJ2Vjb3N5c3RlbS5hdXRvLWFwcHJvdmFsLXJ1bGUudXBkYXRlJyxcbiAgJ2Vjb3N5c3RlbS5hdXRvLWFwcHJvdmFsLXJ1bGUuZGVsZXRlJyxcbiAgJ2Vjb3N5c3RlbS5yZXNlcnZlZC1uYW1lLnVwZGF0ZScsXG4gICdlY29zeXN0ZW0uc2xhLnVwZGF0ZScsXG4gIC8vIFB1YmxpYyByZWdpc3RyeSBuYW1lc3BhY2UgKGBwdWJsaWMvKmApOiBjb3B5ICsgc2lnbiArIGF0dGVzdCBvbiBwdWJsaXNoLFxuICAvLyB0aGUgdGllci1jaGFuZ2Uvc3VzcGVuc2lvbiByZS1zaWduIGpvYiwgdGFnIHJlbW92YWwgb24geWFuay90YWtlZG93biwgYW5kXG4gIC8vIHRoZSByZXRlbnRpb24gc3dlZXAuXG4gICdyZWdpc3RyeS5pbWFnZS5wdWJsaXNoJyxcbiAgJ3JlZ2lzdHJ5LmltYWdlLnJlc2lnbicsXG4gICdyZWdpc3RyeS5pbWFnZS55YW5rJyxcbiAgJ3JlZ2lzdHJ5LmltYWdlLmdjJyxcbiAgLy8gSW5zdGFsbHMgYW5kIHRoZSBpbnN0YWxsaW5nIG9yZydzIGNvbnN1bXB0aW9uIHBvbGljeSAob3JnLWxvY2FsKS5cbiAgJ3BsdWdpbi5pbnN0YWxsLnJlcXVlc3QnLFxuICAncGx1Z2luLmluc3RhbGwuYXBwcm92ZScsXG4gICdwbHVnaW4uaW5zdGFsbC5kZW55JyxcbiAgJ3BsdWdpbi5pbnN0YWxsLmNyZWF0ZScsXG4gICdwbHVnaW4uaW5zdGFsbC51cGdyYWRlJyxcbiAgLy8gQSBtZW1iZXIncyByZXF1ZXN0IHRvIGNoYW5nZSBhbiBpbnN0YWxsIHBhc3Qgd2hhdCB0aGV5IG1heSBkbyBhbG9uZSwgYW5kIGl0cyBkZWNpc2lvbi5cbiAgJ3BsdWdpbi5pbnN0YWxsLmNoYW5nZS1yZXF1ZXN0JyxcbiAgJ3BsdWdpbi5pbnN0YWxsLmNoYW5nZS1hcHByb3ZlJyxcbiAgJ3BsdWdpbi5pbnN0YWxsLmNoYW5nZS1yZWplY3QnLFxuICAncGx1Z2luLmluc3RhbGwucmVtb3ZlJyxcbiAgJ29yZy5wbHVnaW4taW5zdGFsbC1wb2xpY3kudXBkYXRlJyxcbiAgLy8gQW4gdXBsb2FkIFJFRlVTRUQgYmVjYXVzZSBpdHMgbmFtZSB3b3VsZCBvdmVycmlkZSBzb21ldGhpbmcgdGhlIG9yZyBhbHJlYWR5XG4gIC8vIHJlc29sdmVzIOKAlCBhIGxpc3RpbmcsIG9yIGEgdGVhbSdzIHBhcmVudC1vcmcgcGx1Z2luIOKAlCBhbmQgdGhlIGNvbnN1bXB0aW9uXG4gIC8vIHBvbGljeSBzYXlzIGBzaGFkb3dpbmc6IGRlbnlgLiBBdWRpdGVkIGJlY2F1c2UgYSByZWZ1c2FsIG90aGVyd2lzZSByZXR1cm5zXG4gIC8vIGFuIGVycm9yIHRvIHRoZSBjYWxsZXIgYW5kIGxlYXZlcyBub3RoaW5nIGJlaGluZDogYW4gYXR0ZW1wdCB0byBkZWZpbmVcbiAgLy8gYHRyaXZ5YCBvdmVyIHRoZSBPZmZpY2lhbCBzY2FubmVyIGlzIGV4YWN0bHkgdGhlIHRoaW5nIHNvbWVvbmUgc2hvdWxkIGJlXG4gIC8vIGFibGUgdG8gZmluZCBhZnRlcndhcmRzLiBgZGV0YWlsc2AgY2FycnkgdGhlIG5hbWUgYW5kIHdoYXQgaXQgd291bGQgaGF2ZVxuICAvLyBvdmVycmlkZGVuLlxuICAncGx1Z2luLnNoYWRvd2luZy5kZW5pZWQnLFxuICAvLyBSZXZpZXdzIGFuZCByZXBsaWVzLlxuICAncGx1Z2luLnJldmlldy5jcmVhdGUnLFxuICAncGx1Z2luLnJldmlldy51cGRhdGUnLFxuICAncGx1Z2luLnJldmlldy5kZWxldGUnLFxuICAncGx1Z2luLnJldmlldy5yZXBvcnQnLFxuICAncGx1Z2luLnJldmlldy5ob2xkJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVsZWFzZScsXG4gICdwbHVnaW4ucmV2aWV3LnJlbW92ZScsXG4gICdwbHVnaW4ucmV2aWV3LmFub255bWl6ZScsXG4gICdwbHVnaW4ucmV2aWV3LnJlcGx5LmNyZWF0ZScsXG4gICdwbHVnaW4ucmV2aWV3LnJlcGx5LnVwZGF0ZScsXG4gICdwbHVnaW4ucmV2aWV3LnJlcGx5LmRlbGV0ZScsXG4gIC8vIEFub255bW91cyBzdWJtaXNzaW9ucy5cbiAgJ3BsdWdpbi5zdWJtaXNzaW9uLmNyZWF0ZScsXG4gICdwbHVnaW4uc3VibWlzc2lvbi52ZXJpZnknLFxuICAncGx1Z2luLnN1Ym1pc3Npb24uZ2F0ZS1mYWlsJyxcbiAgJ3BsdWdpbi5zdWJtaXNzaW9uLmFwcHJvdmUnLFxuICAncGx1Z2luLnN1Ym1pc3Npb24ucmVqZWN0JyxcbiAgJ3BsdWdpbi5zdWJtaXNzaW9uLmNsYWltJyxcbiAgJ3BsdWdpbi5zdWJtaXNzaW9uLmV4cGlyZScsXG4gIC8vIFNlY3VyaXR5IGFkdmlzb3JpZXMgKHB1Ymxpc2gvd2l0aGRyYXcgYXJlIHN5c3RlbS1vcmcgb25seTsgdXBkYXRlID0gYVxuICAvLyBtb2RlcmF0b3IgZWRpdGluZyBhIGRyYWZ0IGJlZm9yZSBpdCBpcyBwdWJsaXNoZWQpLlxuICAncGx1Z2luLmFkdmlzb3J5LmNyZWF0ZScsXG4gICdwbHVnaW4uYWR2aXNvcnkudXBkYXRlJyxcbiAgJ3BsdWdpbi5hZHZpc29yeS5wdWJsaXNoJyxcbiAgJ3BsdWdpbi5hZHZpc29yeS53aXRoZHJhdycsXG4gIC8vIFBlci1vcmcgcGx1Z2luIHNlY3VyaXR5IG5vdGlmaWNhdGlvbnMgKHBsdWdpbiBzY2FuIGdhdGVzKTogdGhlIHNldHRpbmdzXG4gIC8vIChyZWNpcGllbnRzLCBkaWdlc3QsIHdlYmhvb2ssIGV4dGVybmFsIGFkZHJlc3Mg4oCUIGNoYW5nZWQgZmllbGQgbmFtZXMgYW5kXG4gIC8vIHRoZSB3ZWJob29rIGhvc3Qgb25seSwgbmV2ZXIgdGhlIHNlY3JldCBvciB0aGUgYWRkcmVzcyksIGFuIGV4dGVybmFsXG4gIC8vIGFkZHJlc3MgY29uZmlybWVkIHRocm91Z2ggaXRzIGVtYWlsZWQgc2luZ2xlLXVzZSBsaW5rLCBhbmQgYSB0ZXN0IHNlbmQuXG4gICdwbHVnaW4uc2VjdXJpdHlfbm90aWZpY2F0aW9ucy51cGRhdGUnLFxuICAncGx1Z2luLnNlY3VyaXR5X25vdGlmaWNhdGlvbnMuZXh0ZXJuYWxfZW1haWwudmVyaWZ5JyxcbiAgJ3BsdWdpbi5zZWN1cml0eV9ub3RpZmljYXRpb25zLnRlc3QnLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgUmVtb3RlQXVkaXRBY3Rpb24gPSB0eXBlb2YgUkVNT1RFX0FVRElUX0FDVElPTlNbbnVtYmVyXTtcblxuLyoqIFdoZXRoZXIgYHZhbHVlYCBpcyBhbiBhY3Rpb24gYSByZW1vdGUgc2VydmljZSBtYXkgZW1pdCAodGhlIGluZ2VzdCBhbGxvdy1saXN0KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JlbW90ZUF1ZGl0QWN0aW9uKHZhbHVlOiBzdHJpbmcpOiB2YWx1ZSBpcyBSZW1vdGVBdWRpdEFjdGlvbiB7XG4gIHJldHVybiAoUkVNT1RFX0FVRElUX0FDVElPTlMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHZhbHVlKTtcbn1cbiJdfQ==
|
|
@@ -79,6 +79,17 @@ export type BlockOnAdvisory = (typeof BLOCK_ON_ADVISORY_LEVELS)[number];
|
|
|
79
79
|
/** Whether official plugins need an explicit install before a pipeline can use them. */
|
|
80
80
|
export declare const OFFICIAL_INSTALLS_MODES: readonly ['implicit', 'explicit'];
|
|
81
81
|
export type OfficialInstalls = (typeof OFFICIAL_INSTALLS_MODES)[number];
|
|
82
|
+
/**
|
|
83
|
+
* What happens when an org defines a plugin NAME that overrides something it
|
|
84
|
+
* would otherwise resolve — a listing, or (for a team) its parent org's plugin.
|
|
85
|
+
*
|
|
86
|
+
* `allow` keeps today's behaviour: the override is silent beyond the dashboard
|
|
87
|
+
* banner. `warn` is the same resolution with the fact recorded prominently.
|
|
88
|
+
* `deny` refuses the upload, which is the only setting that actually stops a
|
|
89
|
+
* team replacing the Official `trivy` for every pipeline that names it.
|
|
90
|
+
*/
|
|
91
|
+
export declare const SHADOWING_MODES: readonly ['allow', 'warn', 'deny'];
|
|
92
|
+
export type ShadowingMode = (typeof SHADOWING_MODES)[number];
|
|
82
93
|
export declare const REVIEW_STATUSES: readonly ['published', 'held', 'removed'];
|
|
83
94
|
export type ReviewStatus = (typeof REVIEW_STATUSES)[number];
|
|
84
95
|
/** Why a held review is held. */
|
|
@@ -75,6 +75,16 @@ export const INSTALL_STATUSES = ['active', 'pending_approval', 'denied'];
|
|
|
75
75
|
export const BLOCK_ON_ADVISORY_LEVELS = ['critical', 'high', 'never'];
|
|
76
76
|
/** Whether official plugins need an explicit install before a pipeline can use them. */
|
|
77
77
|
export const OFFICIAL_INSTALLS_MODES = ['implicit', 'explicit'];
|
|
78
|
+
/**
|
|
79
|
+
* What happens when an org defines a plugin NAME that overrides something it
|
|
80
|
+
* would otherwise resolve — a listing, or (for a team) its parent org's plugin.
|
|
81
|
+
*
|
|
82
|
+
* `allow` keeps today's behaviour: the override is silent beyond the dashboard
|
|
83
|
+
* banner. `warn` is the same resolution with the fact recorded prominently.
|
|
84
|
+
* `deny` refuses the upload, which is the only setting that actually stops a
|
|
85
|
+
* team replacing the Official `trivy` for every pipeline that names it.
|
|
86
|
+
*/
|
|
87
|
+
export const SHADOWING_MODES = ['allow', 'warn', 'deny'];
|
|
78
88
|
export const REVIEW_STATUSES = ['published', 'held', 'removed'];
|
|
79
89
|
/** Why a held review is held. */
|
|
80
90
|
export const REVIEW_HOLD_REASONS = ['reports', 'burst', 'filter', 'security', 'moderator'];
|
|
@@ -99,4 +109,4 @@ export const SUBMISSION_STATUSES = [
|
|
|
99
109
|
export const PLUGIN_SECURITY_RECIPIENT_MODES = ['writers', 'users'];
|
|
100
110
|
/** How rescan findings (N31) are batched; blocked builds (N30) are always immediate. */
|
|
101
111
|
export const PLUGIN_SECURITY_DIGEST_MODES = ['immediate', 'daily', 'weekly'];
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lyZS12b2NhYnVsYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL3dpcmUtdm9jYWJ1bGFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7R0FTRztBQUVILGdGQUFnRjtBQUNoRixtQkFBbUI7QUFDbkIsZ0ZBQWdGO0FBRWhGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFVLENBQUM7QUFHekUsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBVSxDQUFDO0FBRzVELHVGQUF1RjtBQUN2RixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDNUIsSUFBSSxFQUFFLEtBQUs7SUFDWCxVQUFVLEVBQUUsYUFBYTtJQUN6QixPQUFPO0lBQ1AsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSztJQUN4QixJQUFJLEVBQUUsT0FBTztJQUNiLFFBQVEsRUFBRSxXQUFXLEVBQUUsVUFBVTtJQUNqQyxTQUFTLEVBQUUsU0FBUztJQUNwQixVQUFVLEVBQUUsVUFBVTtDQUNkLENBQUM7QUFHWCxzRUFBc0U7QUFDdEUsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBNEMsQ0FBQztBQUV2SCwwREFBMEQ7QUFDMUQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFVLENBQUM7QUFHNUQsNEVBQTRFO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQVUsQ0FBQztBQUd6RCxnRkFBZ0Y7QUFDaEYsV0FBVztBQUNYLGdGQUFnRjtBQUVoRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxjQUFjLEVBQUUs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QUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBVSxDQUFDO0FBRzVGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFVLENBQUM7QUFHbEYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQVUsQ0FBQztBQUc1RSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBVSxDQUFDO0FBRzVGOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRztJQUNqQyxzQkFBc0IsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVM7Q0FDM0csQ0FBQztBQUdYLGdGQUFnRjtBQUNoRiwwQ0FBMEM7QUFDMUMsZ0ZBQWdGO0FBRWhGOzJFQUMyRTtBQUMzRSxNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQVUsQ0FBQztBQUc3RSx3RkFBd0Y7QUFDeEYsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogQ2xvc2VkIHN0cmluZyB2b2NhYnVsYXJpZXMgdGhhdCBjcm9zcyB0aGUgd2lyZSBiZXR3ZWVuIHRoZSBzZXJ2aWNlcyBhbmQgdGhlXG4gKiBicm93c2VyLiBFYWNoIGlzIGFuIGBhcyBjb25zdGAgYXJyYXkgKHRoZSBydW50aW1lIGxpc3QgYSBab2QgZW51bSwgYSBNb25nb29zZVxuICogZW51bSBvciBhIGRyaXp6bGUgYCR0eXBlYCBidWlsZHMgZnJvbSkgcGx1cyB0aGUgdW5pb24gdHlwZSBkZXJpdmVkIGZyb20gaXQuXG4gKlxuICogRGVwZW5kZW5jeS1mcmVlIG9uIHB1cnBvc2U6IHRoZSBmcm9udGVuZCBpbXBvcnRzIHRoZXNlIHR5cGVzLCBzbyBhIHZhbHVlIGFkZGVkXG4gKiBoZXJlIHJlYWNoZXMgdGhlIFVJJ3MgZXhoYXVzdGl2ZSBsYWJlbCBtYXBzIGFzIGEgY29tcGlsZSBlcnJvciBpbnN0ZWFkIG9mIGFcbiAqIHNpbGVudGx5IHVuaGFuZGxlZCBzdHJpbmcuIFRoZSBQb3N0Z3JlcyBDSEVDSyBjb25zdHJhaW50cyBpbiBlYWNoIGRlcGxveVxuICogdGFyZ2V0J3MgYHBvc3RncmVzLWluaXQuc3FsYCBtaXJyb3IgdGhlIG9uZXMgc3RvcmVkIGluIFNRTC5cbiAqL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ29tcGxpYW5jZSBydWxlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGNvbnN0IFJVTEVfU0VWRVJJVElFUyA9IFsnd2FybmluZycsICdlcnJvcicsICdjcml0aWNhbCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUnVsZVNldmVyaXR5ID0gKHR5cGVvZiBSVUxFX1NFVkVSSVRJRVMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBSVUxFX1RBUkdFVFMgPSBbJ3BsdWdpbicsICdwaXBlbGluZSddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUnVsZVRhcmdldCA9ICh0eXBlb2YgUlVMRV9UQVJHRVRTKVtudW1iZXJdO1xuXG4vKiogRmllbGQtZXZhbHVhdGlvbiBvcGVyYXRvcnM7IHRoZSBlbmdpbmUncyBpbXBsZW1lbnRhdGlvbnMgbGl2ZSBpbiBhcGkvY29tcGxpYW5jZS4gKi9cbmV4cG9ydCBjb25zdCBSVUxFX09QRVJBVE9SUyA9IFtcbiAgJ2VxJywgJ25lcScsXG4gICdjb250YWlucycsICdub3RDb250YWlucycsXG4gICdyZWdleCcsXG4gICdndCcsICdndGUnLCAnbHQnLCAnbHRlJyxcbiAgJ2luJywgJ25vdEluJyxcbiAgJ2V4aXN0cycsICdub3RFeGlzdHMnLCAnbm90RW1wdHknLFxuICAnY291bnRHdCcsICdjb3VudEx0JyxcbiAgJ2xlbmd0aEd0JywgJ2xlbmd0aEx0Jyxcbl0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBSdWxlT3BlcmF0b3IgPSAodHlwZW9mIFJVTEVfT1BFUkFUT1JTKVtudW1iZXJdO1xuXG4vKiogT3BlcmF0b3JzIHRoYXQgdGVzdCBwcmVzZW5jZSBvbmx5IGFuZCB0YWtlIG5vIGNvbXBhcmlzb24gdmFsdWUuICovXG5leHBvcnQgY29uc3QgVkFMVUVMRVNTX1JVTEVfT1BFUkFUT1JTID0gWydleGlzdHMnLCAnbm90RXhpc3RzJywgJ25vdEVtcHR5J10gYXMgY29uc3Qgc2F0aXNmaWVzIHJlYWRvbmx5IFJ1bGVPcGVyYXRvcltdO1xuXG4vKiogSG93IGEgbXVsdGktY29uZGl0aW9uIHJ1bGUgY29tYmluZXMgaXRzIGNvbmRpdGlvbnMuICovXG5leHBvcnQgY29uc3QgUlVMRV9DT05ESVRJT05fTU9ERVMgPSBbJ2FsbCcsICdhbnknXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFJ1bGVDb25kaXRpb25Nb2RlID0gKHR5cGVvZiBSVUxFX0NPTkRJVElPTl9NT0RFUylbbnVtYmVyXTtcblxuLyoqIGBwdWJsaXNoZWRgIHJ1bGVzIGJlbG9uZyB0byB0aGUgc3lzdGVtIG9yZyBhbmQgYXBwbHkgYnkgc3Vic2NyaXB0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IFJVTEVfU0NPUEVTID0gWydvcmcnLCAncHVibGlzaGVkJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBSdWxlU2NvcGUgPSAodHlwZW9mIFJVTEVfU0NPUEVTKVtudW1iZXJdO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTWVzc2FnZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBNRVNTQUdFX1RZUEVTID0gWydhbm5vdW5jZW1lbnQnLCAnY29udmVyc2F0aW9uJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBNZXNzYWdlVHlwZSA9ICh0eXBlb2YgTUVTU0FHRV9UWVBFUylbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IE1FU1NBR0VfUFJJT1JJVElFUyA9IFsnbm9ybWFsJywgJ2hpZ2gnLCAndXJnZW50J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBNZXNzYWdlUHJpb3JpdHkgPSAodHlwZW9mIE1FU1NBR0VfUFJJT1JJVElFUylbbnVtYmVyXTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEJpbGxpbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBTVUJTQ1JJUFRJT05fU1RBVFVTRVMgPSBbJ2FjdGl2ZScsICdjYW5jZWxlZCcsICdwYXN0X2R1ZScsICd0cmlhbGluZycsICdpbmNvbXBsZXRlJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBTdWJzY3JpcHRpb25TdGF0dXMgPSAodHlwZW9mIFNVQlNDUklQVElPTl9TVEFUVVNFUylbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IEJJTExJTkdfSU5URVJWQUxTID0gWydtb250aGx5JywgJ2FubnVhbCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgQmlsbGluZ0ludGVydmFsID0gKHR5cGVvZiBCSUxMSU5HX0lOVEVSVkFMUylbbnVtYmVyXTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIElkZW50aXR5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogT0lEQyBwcm92aWRlcnMgYW4gb3JnIElkUCBjb25maWcgY2FuIG5hbWUgKEdpdEh1YiBpcyBPQXV0aC1vbmx5IGFuZCByZWZ1c2VkIGJ5IHRoZSBPSURDIGVuZ2luZSkuICovXG5leHBvcnQgY29uc3QgSURQX1BST1ZJREVSUyA9IFsnZ2VuZXJpYy1vaWRjJywgJ2NvZ25pdG8nLCAnZ29vZ2xlJywgJ2dpdGh1YiddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgSWRwUHJvdmlkZXIgPSAodHlwZW9mIElEUF9QUk9WSURFUlMpW251bWJlcl07XG5cbi8qKiBUaGUgZmVkZXJhdGlvbiBwcm90b2NvbCBhbiBvcmcgc2lnbnMgaW4gb3ZlciDigJQgb25lIHBlciBvcmcuICovXG5leHBvcnQgY29uc3QgSURQX1BST1RPQ09MUyA9IFsnb2lkYycsICdzYW1sJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBJZHBQcm90b2NvbCA9ICh0eXBlb2YgSURQX1BST1RPQ09MUylbbnVtYmVyXTtcblxuLyoqXG4gKiBXaGljaCBTQU1MIGFzc2VydGlvbiBhdHRyaWJ1dGUgY2FycmllcyB3aGljaCBpZGVudGl0eSBmaWVsZC4gQW4gZW1wdHkgbmFtZVxuICogbWVhbnMgXCJ1c2UgdGhlIGNvbW1vbiBzcGVsbGluZ3NcIiAoc2hvcnQgbmFtZXMgcGx1cyB0aGUgRW50cmEvU2hpYmJvbGV0aCBVUklzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYW1sQXR0cmlidXRlTWFwcGluZyB7XG4gIC8qKiBBdHRyaWJ1dGUgaG9sZGluZyB0aGUgdXNlcidzIGVtYWlsIGFkZHJlc3MuICovXG4gIGVtYWlsPzogc3RyaW5nO1xuICAvKiogQXR0cmlidXRlIGhvbGRpbmcgdGhlIGRpc3BsYXkgbmFtZS4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIEF0dHJpYnV0ZSBob2xkaW5nIGdyb3VwIG1lbWJlcnNoaXBzIChkcml2ZXMgSklUIHJvbGUgbWFwcGluZykuICovXG4gIGdyb3Vwcz86IHN0cmluZztcbn1cblxuLyoqIFRoZSBjb2Fyc2UgZ3JhbnQgYSBwZXJtaXNzaW9uIHJvbGUgZ2l2ZXMgaXRzIG1lbWJlcnMuICovXG5leHBvcnQgY29uc3QgUk9MRV9HUkFOVFMgPSBbJ3N1cGVyYWRtaW4nLCAnYWRtaW4nLCAnbWVtYmVyJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBSb2xlR3JhbnQgPSAodHlwZW9mIFJPTEVfR1JBTlRTKVtudW1iZXJdO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUGx1Z2luIGVjb3N5c3RlbSAoZWFjaCBtaXJyb3JlZCBieSBhIENIRUNLIGluIHBvc3RncmVzLWluaXQuc3FsKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIFB1Ymxpc2hlciB0cnVzdCB0aWVyLiAqL1xuZXhwb3J0IGNvbnN0IFBVQkxJU0hFUl9USUVSUyA9IFsnb2ZmaWNpYWwnLCAndmVyaWZpZWQnLCAnY29tbXVuaXR5JywgJ3VudmVyaWZpZWQnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFB1Ymxpc2hlclRpZXIgPSAodHlwZW9mIFBVQkxJU0hFUl9USUVSUylbbnVtYmVyXTtcblxuLyoqIEEgZGlyZWN0b3J5IGxpc3RpbmcncyBsaWZlY3ljbGUgc3RhdGUuICovXG5leHBvcnQgY29uc3QgTElTVElOR19TVEFURVMgPSBbJ2xpc3RlZCcsICd1bm1haW50YWluZWQnLCAnc3VzcGVuZGVkJywgJ3RyYW5zZmVycmVkJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBMaXN0aW5nU3RhdGUgPSAodHlwZW9mIExJU1RJTkdfU1RBVEVTKVtudW1iZXJdO1xuXG4vKiogV2hhdCBhIHB1Ymxpc2ggcmVxdWVzdCBhc2tzIHRoZSBzeXN0ZW0gb3JnIHRvIGRvLiAqL1xuZXhwb3J0IGNvbnN0IFBVQkxJU0hfUkVRVUVTVF9LSU5EUyA9IFtcbiAgJ25ld19saXN0aW5nJywgJ25ld192ZXJzaW9uJywgJ2xpc3RpbmdfdXBkYXRlJywgJ3lhbmsnLCAndW5wYXVzZScsXG4gICd0cmFuc2ZlcicsICdjbGFpbScsICdwcm9maWxlX2NoYW5nZScsICdhZHZpc29yeScsICd2ZXJpZnknLCAnbW9kZXJhdGlvbicsICdzdWJtaXNzaW9uJyxcbl0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBQdWJsaXNoUmVxdWVzdEtpbmQgPSAodHlwZW9mIFBVQkxJU0hfUkVRVUVTVF9LSU5EUylbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IFBVQkxJU0hfUkVRVUVTVF9TVEFUVVNFUyA9IFsncGVuZGluZycsICdwZW5kaW5nX3NlY29uZF9hcHByb3ZhbCcsICdhcHByb3ZlZCcsICdyZWplY3RlZCcsICd3aXRoZHJhd24nXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFB1Ymxpc2hSZXF1ZXN0U3RhdHVzID0gKHR5cGVvZiBQVUJMSVNIX1JFUVVFU1RfU1RBVFVTRVMpW251bWJlcl07XG5cbi8qKiBUaGUgc3RhdHVzZXMgYSByZXF1ZXN0IGlzIHN0aWxsIFwib3BlblwiIGluIChkcml2ZXMgdGhlIG9uZS1vcGVuLXJlcXVlc3QgaW5kZXgpLiAqL1xuZXhwb3J0IGNvbnN0IE9QRU5fUFVCTElTSF9SRVFVRVNUX1NUQVRVU0VTID0gWydwZW5kaW5nJywgJ3BlbmRpbmdfc2Vjb25kX2FwcHJvdmFsJ10gYXMgY29uc3Qgc2F0aXNmaWVzIHJlYWRvbmx5IFB1Ymxpc2hSZXF1ZXN0U3RhdHVzW107XG5cbi8qKiBgc2VjdXJpdHlgIHJlcXVlc3RzIGp1bXAgdGhlIG1vZGVyYXRpb24gcXVldWUuICovXG5leHBvcnQgY29uc3QgUFVCTElTSF9SRVFVRVNUX0xBTkVTID0gWydzdGFuZGFyZCcsICdzZWN1cml0eSddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUHVibGlzaFJlcXVlc3RMYW5lID0gKHR5cGVvZiBQVUJMSVNIX1JFUVVFU1RfTEFORVMpW251bWJlcl07XG5cbi8qKiBJbnN0YWxsIHZlcnNpb24gcG9saWN5OiBleGFjdCwgYH5gLCBgXmAsIG9yIGFueXRoaW5nIG5vbi1icmVha2luZy4gKi9cbmV4cG9ydCBjb25zdCBJTlNUQUxMX1ZFUlNJT05fUE9MSUNJRVMgPSBbJ3Bpbm5lZCcsICdwYXRjaCcsICdtaW5vcicsICdsYXRlc3QnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEluc3RhbGxWZXJzaW9uUG9saWN5ID0gKHR5cGVvZiBJTlNUQUxMX1ZFUlNJT05fUE9MSUNJRVMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBJTlNUQUxMX1NUQVRVU0VTID0gWydhY3RpdmUnLCAncGVuZGluZ19hcHByb3ZhbCcsICdkZW5pZWQnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEluc3RhbGxTdGF0dXMgPSAodHlwZW9mIElOU1RBTExfU1RBVFVTRVMpW251bWJlcl07XG5cbi8qKiBUaGUgYWR2aXNvcnkgc2V2ZXJpdHkgYXQgd2hpY2ggYSBjb25zdW1wdGlvbiBwb2xpY3kgYmxvY2tzIGluc3RhbGxzLiAqL1xuZXhwb3J0IGNvbnN0IEJMT0NLX09OX0FEVklTT1JZX0xFVkVMUyA9IFsnY3JpdGljYWwnLCAnaGlnaCcsICduZXZlciddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgQmxvY2tPbkFkdmlzb3J5ID0gKHR5cGVvZiBCTE9DS19PTl9BRFZJU09SWV9MRVZFTFMpW251bWJlcl07XG5cbi8qKiBXaGV0aGVyIG9mZmljaWFsIHBsdWdpbnMgbmVlZCBhbiBleHBsaWNpdCBpbnN0YWxsIGJlZm9yZSBhIHBpcGVsaW5lIGNhbiB1c2UgdGhlbS4gKi9cbmV4cG9ydCBjb25zdCBPRkZJQ0lBTF9JTlNUQUxMU19NT0RFUyA9IFsnaW1wbGljaXQnLCAnZXhwbGljaXQnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIE9mZmljaWFsSW5zdGFsbHMgPSAodHlwZW9mIE9GRklDSUFMX0lOU1RBTExTX01PREVTKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgUkVWSUVXX1NUQVRVU0VTID0gWydwdWJsaXNoZWQnLCAnaGVsZCcsICdyZW1vdmVkJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBSZXZpZXdTdGF0dXMgPSAodHlwZW9mIFJFVklFV19TVEFUVVNFUylbbnVtYmVyXTtcblxuLyoqIFdoeSBhIGhlbGQgcmV2aWV3IGlzIGhlbGQuICovXG5leHBvcnQgY29uc3QgUkVWSUVXX0hPTERfUkVBU09OUyA9IFsncmVwb3J0cycsICdidXJzdCcsICdmaWx0ZXInLCAnc2VjdXJpdHknLCAnbW9kZXJhdG9yJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBSZXZpZXdIb2xkUmVhc29uID0gKHR5cGVvZiBSRVZJRVdfSE9MRF9SRUFTT05TKVtudW1iZXJdO1xuXG4vKiogQSByZXZpZXcgcmVwb3J0J3MgY2F0ZWdvcnk7IGBzZWN1cml0eWAgcm91dGVzIHByaXZhdGVseSB0byB0aGUgYWR2aXNvcnkgcGF0aC4gKi9cbmV4cG9ydCBjb25zdCBSRVZJRVdfUkVQT1JUX0NBVEVHT1JJRVMgPSBbJ3NwYW0nLCAnYWJ1c2UnLCAnb2ZmX3RvcGljJywgJ3NlY3VyaXR5J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBSZXZpZXdSZXBvcnRDYXRlZ29yeSA9ICh0eXBlb2YgUkVWSUVXX1JFUE9SVF9DQVRFR09SSUVTKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgQURWSVNPUllfU0VWRVJJVElFUyA9IFsnY3JpdGljYWwnLCAnaGlnaCcsICdtZWRpdW0nLCAnbG93J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBBZHZpc29yeVNldmVyaXR5ID0gKHR5cGVvZiBBRFZJU09SWV9TRVZFUklUSUVTKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgQURWSVNPUllfU1RBVEVTID0gWydkcmFmdCcsICdwdWJsaXNoZWQnLCAnd2l0aGRyYXduJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBBZHZpc29yeVN0YXRlID0gKHR5cGVvZiBBRFZJU09SWV9TVEFURVMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBBRFZJU09SWV9TT1VSQ0VTID0gWydwdWJsaXNoZXInLCAnbW9kZXJhdG9yJywgJ2N2ZV9yZXNjYW4nLCAncmV2aWV3J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBBZHZpc29yeVNvdXJjZSA9ICh0eXBlb2YgQURWSVNPUllfU09VUkNFUylbbnVtYmVyXTtcblxuLyoqXG4gKiBBbiBhbm9ueW1vdXMgc3VibWlzc2lvbidzIGxpZmVjeWNsZS4gYHB1Ymxpc2hpbmdgIGlzIHRoZSBzaG9ydCBjbGFpbSBhblxuICogYXBwcm92YWwgdGFrZXMgYmVmb3JlIGl0IGNvcGllcyB0aGUgcXVhcmFudGluZWQgaW1hZ2Ugb3V0LCBzbyBhbiBleHBpcnkgY2FuXG4gKiBuZXZlciBkZWxldGUgdGhlIGFydGlmYWN0cyBvZiBhIHN1Ym1pc3Npb24gdGhhdCBpcyBiZWluZyBwdWJsaXNoZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBTVUJNSVNTSU9OX1NUQVRVU0VTID0gW1xuICAncGVuZGluZ192ZXJpZmljYXRpb24nLCAncGVuZGluZ19yZXZpZXcnLCAncHVibGlzaGluZycsICdnYXRlX2ZhaWxlZCcsICdhcHByb3ZlZCcsICdyZWplY3RlZCcsICdleHBpcmVkJywgJ2NsYWltZWQnLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFN1Ym1pc3Npb25TdGF0dXMgPSAodHlwZW9mIFNVQk1JU1NJT05fU1RBVFVTRVMpW251bWJlcl07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQbHVnaW4gc2VjdXJpdHkgbm90aWZpY2F0aW9ucyAocGVyIG9yZylcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBXaG8gcmVjZWl2ZXMgYW4gb3JnJ3MgcGx1Z2luIHNlY3VyaXR5IG5vdGljZXM6IGB3cml0ZXJzYCA9IHRoZSB1cGxvYWRlciBwbHVzXG4gKiAgbWVtYmVycyBob2xkaW5nIGBwbHVnaW5zOndyaXRlYDsgYHVzZXJzYCA9IHRoZSBvcmcncyBjaG9zZW4gbWVtYmVycy4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fU0VDVVJJVFlfUkVDSVBJRU5UX01PREVTID0gWyd3cml0ZXJzJywgJ3VzZXJzJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBQbHVnaW5TZWN1cml0eVJlY2lwaWVudE1vZGUgPSAodHlwZW9mIFBMVUdJTl9TRUNVUklUWV9SRUNJUElFTlRfTU9ERVMpW251bWJlcl07XG5cbi8qKiBIb3cgcmVzY2FuIGZpbmRpbmdzIChOMzEpIGFyZSBiYXRjaGVkOyBibG9ja2VkIGJ1aWxkcyAoTjMwKSBhcmUgYWx3YXlzIGltbWVkaWF0ZS4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fU0VDVVJJVFlfRElHRVNUX01PREVTID0gWydpbW1lZGlhdGUnLCAnZGFpbHknLCAnd2Vla2x5J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBQbHVnaW5TZWN1cml0eURpZ2VzdE1vZGUgPSAodHlwZW9mIFBMVUdJTl9TRUNVUklUWV9ESUdFU1RfTU9ERVMpW251bWJlcl07XG4iXX0=
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lyZS12b2NhYnVsYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL3dpcmUtdm9jYWJ1bGFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7R0FTRztBQUVILGdGQUFnRjtBQUNoRixtQkFBbUI7QUFDbkIsZ0ZBQWdGO0FBRWhGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFVLENBQUM7QUFHekUsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBVSxDQUFDO0FBRzVELHVGQUF1RjtBQUN2RixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDNUIsSUFBSSxFQUFFLEtBQUs7SUFDWCxVQUFVLEVBQUUsYUFBYTtJQUN6QixPQUFPO0lBQ1AsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSztJQUN4QixJQUFJLEVBQUUsT0FBTztJQUNiLFFBQVEsRUFBRSxXQUFXLEVBQUUsVUFBVTtJQUNqQyxTQUFTLEVBQUUsU0FBUztJQUNwQixVQUFVLEVBQUUsVUFBVTtDQUNkLENBQUM7QUFHWCxzRUFBc0U7QUFDdEUsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBNEMsQ0FBQztBQUV2SCwwREFBMEQ7QUFDMUQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFVLENBQUM7QUFHNUQsNEVBQTRFO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQVUsQ0FBQztBQUd6RCxnRkFBZ0Y7QUFDaEYsV0FBVztBQUNYLGdGQUFnRjtBQUVoRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxjQUFjLEVBQUUs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LFVBQVUsRUFBRSxXQUFXLENBQVUsQ0FBQztBQUdwRyxvRkFBb0Y7QUFDcEYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQVUsQ0FBQztBQUc1RixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBVSxDQUFDO0FBR2xGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFVLENBQUM7QUFHNUUsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxRQUFRLENBQVUsQ0FBQztBQUc1Rjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUc7SUFDakMsc0JBQXNCLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTO0NBQzNHLENBQUM7QUFHWCxnRkFBZ0Y7QUFDaEYsMENBQTBDO0FBQzFDLGdGQUFnRjtBQUVoRjsyRUFDMkU7QUFDM0UsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFVLENBQUM7QUFHN0Usd0ZBQXdGO0FBQ3hGLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIENsb3NlZCBzdHJpbmcgdm9jYWJ1bGFyaWVzIHRoYXQgY3Jvc3MgdGhlIHdpcmUgYmV0d2VlbiB0aGUgc2VydmljZXMgYW5kIHRoZVxuICogYnJvd3Nlci4gRWFjaCBpcyBhbiBgYXMgY29uc3RgIGFycmF5ICh0aGUgcnVudGltZSBsaXN0IGEgWm9kIGVudW0sIGEgTW9uZ29vc2VcbiAqIGVudW0gb3IgYSBkcml6emxlIGAkdHlwZWAgYnVpbGRzIGZyb20pIHBsdXMgdGhlIHVuaW9uIHR5cGUgZGVyaXZlZCBmcm9tIGl0LlxuICpcbiAqIERlcGVuZGVuY3ktZnJlZSBvbiBwdXJwb3NlOiB0aGUgZnJvbnRlbmQgaW1wb3J0cyB0aGVzZSB0eXBlcywgc28gYSB2YWx1ZSBhZGRlZFxuICogaGVyZSByZWFjaGVzIHRoZSBVSSdzIGV4aGF1c3RpdmUgbGFiZWwgbWFwcyBhcyBhIGNvbXBpbGUgZXJyb3IgaW5zdGVhZCBvZiBhXG4gKiBzaWxlbnRseSB1bmhhbmRsZWQgc3RyaW5nLiBUaGUgUG9zdGdyZXMgQ0hFQ0sgY29uc3RyYWludHMgaW4gZWFjaCBkZXBsb3lcbiAqIHRhcmdldCdzIGBwb3N0Z3Jlcy1pbml0LnNxbGAgbWlycm9yIHRoZSBvbmVzIHN0b3JlZCBpbiBTUUwuXG4gKi9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENvbXBsaWFuY2UgcnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBSVUxFX1NFVkVSSVRJRVMgPSBbJ3dhcm5pbmcnLCAnZXJyb3InLCAnY3JpdGljYWwnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFJ1bGVTZXZlcml0eSA9ICh0eXBlb2YgUlVMRV9TRVZFUklUSUVTKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgUlVMRV9UQVJHRVRTID0gWydwbHVnaW4nLCAncGlwZWxpbmUnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFJ1bGVUYXJnZXQgPSAodHlwZW9mIFJVTEVfVEFSR0VUUylbbnVtYmVyXTtcblxuLyoqIEZpZWxkLWV2YWx1YXRpb24gb3BlcmF0b3JzOyB0aGUgZW5naW5lJ3MgaW1wbGVtZW50YXRpb25zIGxpdmUgaW4gYXBpL2NvbXBsaWFuY2UuICovXG5leHBvcnQgY29uc3QgUlVMRV9PUEVSQVRPUlMgPSBbXG4gICdlcScsICduZXEnLFxuICAnY29udGFpbnMnLCAnbm90Q29udGFpbnMnLFxuICAncmVnZXgnLFxuICAnZ3QnLCAnZ3RlJywgJ2x0JywgJ2x0ZScsXG4gICdpbicsICdub3RJbicsXG4gICdleGlzdHMnLCAnbm90RXhpc3RzJywgJ25vdEVtcHR5JyxcbiAgJ2NvdW50R3QnLCAnY291bnRMdCcsXG4gICdsZW5ndGhHdCcsICdsZW5ndGhMdCcsXG5dIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUnVsZU9wZXJhdG9yID0gKHR5cGVvZiBSVUxFX09QRVJBVE9SUylbbnVtYmVyXTtcblxuLyoqIE9wZXJhdG9ycyB0aGF0IHRlc3QgcHJlc2VuY2Ugb25seSBhbmQgdGFrZSBubyBjb21wYXJpc29uIHZhbHVlLiAqL1xuZXhwb3J0IGNvbnN0IFZBTFVFTEVTU19SVUxFX09QRVJBVE9SUyA9IFsnZXhpc3RzJywgJ25vdEV4aXN0cycsICdub3RFbXB0eSddIGFzIGNvbnN0IHNhdGlzZmllcyByZWFkb25seSBSdWxlT3BlcmF0b3JbXTtcblxuLyoqIEhvdyBhIG11bHRpLWNvbmRpdGlvbiBydWxlIGNvbWJpbmVzIGl0cyBjb25kaXRpb25zLiAqL1xuZXhwb3J0IGNvbnN0IFJVTEVfQ09ORElUSU9OX01PREVTID0gWydhbGwnLCAnYW55J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBSdWxlQ29uZGl0aW9uTW9kZSA9ICh0eXBlb2YgUlVMRV9DT05ESVRJT05fTU9ERVMpW251bWJlcl07XG5cbi8qKiBgcHVibGlzaGVkYCBydWxlcyBiZWxvbmcgdG8gdGhlIHN5c3RlbSBvcmcgYW5kIGFwcGx5IGJ5IHN1YnNjcmlwdGlvbi4gKi9cbmV4cG9ydCBjb25zdCBSVUxFX1NDT1BFUyA9IFsnb3JnJywgJ3B1Ymxpc2hlZCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUnVsZVNjb3BlID0gKHR5cGVvZiBSVUxFX1NDT1BFUylbbnVtYmVyXTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1lc3NhZ2VzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgTUVTU0FHRV9UWVBFUyA9IFsnYW5ub3VuY2VtZW50JywgJ2NvbnZlcnNhdGlvbiddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgTWVzc2FnZVR5cGUgPSAodHlwZW9mIE1FU1NBR0VfVFlQRVMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBNRVNTQUdFX1BSSU9SSVRJRVMgPSBbJ25vcm1hbCcsICdoaWdoJywgJ3VyZ2VudCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgTWVzc2FnZVByaW9yaXR5ID0gKHR5cGVvZiBNRVNTQUdFX1BSSU9SSVRJRVMpW251bWJlcl07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBCaWxsaW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgU1VCU0NSSVBUSU9OX1NUQVRVU0VTID0gWydhY3RpdmUnLCAnY2FuY2VsZWQnLCAncGFzdF9kdWUnLCAndHJpYWxpbmcnLCAnaW5jb21wbGV0ZSddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgU3Vic2NyaXB0aW9uU3RhdHVzID0gKHR5cGVvZiBTVUJTQ1JJUFRJT05fU1RBVFVTRVMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBCSUxMSU5HX0lOVEVSVkFMUyA9IFsnbW9udGhseScsICdhbm51YWwnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEJpbGxpbmdJbnRlcnZhbCA9ICh0eXBlb2YgQklMTElOR19JTlRFUlZBTFMpW251bWJlcl07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBJZGVudGl0eVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIE9JREMgcHJvdmlkZXJzIGFuIG9yZyBJZFAgY29uZmlnIGNhbiBuYW1lIChHaXRIdWIgaXMgT0F1dGgtb25seSBhbmQgcmVmdXNlZCBieSB0aGUgT0lEQyBlbmdpbmUpLiAqL1xuZXhwb3J0IGNvbnN0IElEUF9QUk9WSURFUlMgPSBbJ2dlbmVyaWMtb2lkYycsICdjb2duaXRvJywgJ2dvb2dsZScsICdnaXRodWInXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIElkcFByb3ZpZGVyID0gKHR5cGVvZiBJRFBfUFJPVklERVJTKVtudW1iZXJdO1xuXG4vKiogVGhlIGZlZGVyYXRpb24gcHJvdG9jb2wgYW4gb3JnIHNpZ25zIGluIG92ZXIg4oCUIG9uZSBwZXIgb3JnLiAqL1xuZXhwb3J0IGNvbnN0IElEUF9QUk9UT0NPTFMgPSBbJ29pZGMnLCAnc2FtbCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgSWRwUHJvdG9jb2wgPSAodHlwZW9mIElEUF9QUk9UT0NPTFMpW251bWJlcl07XG5cbi8qKlxuICogV2hpY2ggU0FNTCBhc3NlcnRpb24gYXR0cmlidXRlIGNhcnJpZXMgd2hpY2ggaWRlbnRpdHkgZmllbGQuIEFuIGVtcHR5IG5hbWVcbiAqIG1lYW5zIFwidXNlIHRoZSBjb21tb24gc3BlbGxpbmdzXCIgKHNob3J0IG5hbWVzIHBsdXMgdGhlIEVudHJhL1NoaWJib2xldGggVVJJcykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2FtbEF0dHJpYnV0ZU1hcHBpbmcge1xuICAvKiogQXR0cmlidXRlIGhvbGRpbmcgdGhlIHVzZXIncyBlbWFpbCBhZGRyZXNzLiAqL1xuICBlbWFpbD86IHN0cmluZztcbiAgLyoqIEF0dHJpYnV0ZSBob2xkaW5nIHRoZSBkaXNwbGF5IG5hbWUuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBBdHRyaWJ1dGUgaG9sZGluZyBncm91cCBtZW1iZXJzaGlwcyAoZHJpdmVzIEpJVCByb2xlIG1hcHBpbmcpLiAqL1xuICBncm91cHM/OiBzdHJpbmc7XG59XG5cbi8qKiBUaGUgY29hcnNlIGdyYW50IGEgcGVybWlzc2lvbiByb2xlIGdpdmVzIGl0cyBtZW1iZXJzLiAqL1xuZXhwb3J0IGNvbnN0IFJPTEVfR1JBTlRTID0gWydzdXBlcmFkbWluJywgJ2FkbWluJywgJ21lbWJlciddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUm9sZUdyYW50ID0gKHR5cGVvZiBST0xFX0dSQU5UUylbbnVtYmVyXTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFBsdWdpbiBlY29zeXN0ZW0gKGVhY2ggbWlycm9yZWQgYnkgYSBDSEVDSyBpbiBwb3N0Z3Jlcy1pbml0LnNxbClcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBQdWJsaXNoZXIgdHJ1c3QgdGllci4gKi9cbmV4cG9ydCBjb25zdCBQVUJMSVNIRVJfVElFUlMgPSBbJ29mZmljaWFsJywgJ3ZlcmlmaWVkJywgJ2NvbW11bml0eScsICd1bnZlcmlmaWVkJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBQdWJsaXNoZXJUaWVyID0gKHR5cGVvZiBQVUJMSVNIRVJfVElFUlMpW251bWJlcl07XG5cbi8qKiBBIGRpcmVjdG9yeSBsaXN0aW5nJ3MgbGlmZWN5Y2xlIHN0YXRlLiAqL1xuZXhwb3J0IGNvbnN0IExJU1RJTkdfU1RBVEVTID0gWydsaXN0ZWQnLCAndW5tYWludGFpbmVkJywgJ3N1c3BlbmRlZCcsICd0cmFuc2ZlcnJlZCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgTGlzdGluZ1N0YXRlID0gKHR5cGVvZiBMSVNUSU5HX1NUQVRFUylbbnVtYmVyXTtcblxuLyoqIFdoYXQgYSBwdWJsaXNoIHJlcXVlc3QgYXNrcyB0aGUgc3lzdGVtIG9yZyB0byBkby4gKi9cbmV4cG9ydCBjb25zdCBQVUJMSVNIX1JFUVVFU1RfS0lORFMgPSBbXG4gICduZXdfbGlzdGluZycsICduZXdfdmVyc2lvbicsICdsaXN0aW5nX3VwZGF0ZScsICd5YW5rJywgJ3VucGF1c2UnLFxuICAndHJhbnNmZXInLCAnY2xhaW0nLCAncHJvZmlsZV9jaGFuZ2UnLCAnYWR2aXNvcnknLCAndmVyaWZ5JywgJ21vZGVyYXRpb24nLCAnc3VibWlzc2lvbicsXG5dIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUHVibGlzaFJlcXVlc3RLaW5kID0gKHR5cGVvZiBQVUJMSVNIX1JFUVVFU1RfS0lORFMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBQVUJMSVNIX1JFUVVFU1RfU1RBVFVTRVMgPSBbJ3BlbmRpbmcnLCAncGVuZGluZ19zZWNvbmRfYXBwcm92YWwnLCAnYXBwcm92ZWQnLCAncmVqZWN0ZWQnLCAnd2l0aGRyYXduJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBQdWJsaXNoUmVxdWVzdFN0YXR1cyA9ICh0eXBlb2YgUFVCTElTSF9SRVFVRVNUX1NUQVRVU0VTKVtudW1iZXJdO1xuXG4vKiogVGhlIHN0YXR1c2VzIGEgcmVxdWVzdCBpcyBzdGlsbCBcIm9wZW5cIiBpbiAoZHJpdmVzIHRoZSBvbmUtb3Blbi1yZXF1ZXN0IGluZGV4KS4gKi9cbmV4cG9ydCBjb25zdCBPUEVOX1BVQkxJU0hfUkVRVUVTVF9TVEFUVVNFUyA9IFsncGVuZGluZycsICdwZW5kaW5nX3NlY29uZF9hcHByb3ZhbCddIGFzIGNvbnN0IHNhdGlzZmllcyByZWFkb25seSBQdWJsaXNoUmVxdWVzdFN0YXR1c1tdO1xuXG4vKiogYHNlY3VyaXR5YCByZXF1ZXN0cyBqdW1wIHRoZSBtb2RlcmF0aW9uIHF1ZXVlLiAqL1xuZXhwb3J0IGNvbnN0IFBVQkxJU0hfUkVRVUVTVF9MQU5FUyA9IFsnc3RhbmRhcmQnLCAnc2VjdXJpdHknXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFB1Ymxpc2hSZXF1ZXN0TGFuZSA9ICh0eXBlb2YgUFVCTElTSF9SRVFVRVNUX0xBTkVTKVtudW1iZXJdO1xuXG4vKiogSW5zdGFsbCB2ZXJzaW9uIHBvbGljeTogZXhhY3QsIGB+YCwgYF5gLCBvciBhbnl0aGluZyBub24tYnJlYWtpbmcuICovXG5leHBvcnQgY29uc3QgSU5TVEFMTF9WRVJTSU9OX1BPTElDSUVTID0gWydwaW5uZWQnLCAncGF0Y2gnLCAnbWlub3InLCAnbGF0ZXN0J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBJbnN0YWxsVmVyc2lvblBvbGljeSA9ICh0eXBlb2YgSU5TVEFMTF9WRVJTSU9OX1BPTElDSUVTKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgSU5TVEFMTF9TVEFUVVNFUyA9IFsnYWN0aXZlJywgJ3BlbmRpbmdfYXBwcm92YWwnLCAnZGVuaWVkJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBJbnN0YWxsU3RhdHVzID0gKHR5cGVvZiBJTlNUQUxMX1NUQVRVU0VTKVtudW1iZXJdO1xuXG4vKiogVGhlIGFkdmlzb3J5IHNldmVyaXR5IGF0IHdoaWNoIGEgY29uc3VtcHRpb24gcG9saWN5IGJsb2NrcyBpbnN0YWxscy4gKi9cbmV4cG9ydCBjb25zdCBCTE9DS19PTl9BRFZJU09SWV9MRVZFTFMgPSBbJ2NyaXRpY2FsJywgJ2hpZ2gnLCAnbmV2ZXInXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEJsb2NrT25BZHZpc29yeSA9ICh0eXBlb2YgQkxPQ0tfT05fQURWSVNPUllfTEVWRUxTKVtudW1iZXJdO1xuXG4vKiogV2hldGhlciBvZmZpY2lhbCBwbHVnaW5zIG5lZWQgYW4gZXhwbGljaXQgaW5zdGFsbCBiZWZvcmUgYSBwaXBlbGluZSBjYW4gdXNlIHRoZW0uICovXG5leHBvcnQgY29uc3QgT0ZGSUNJQUxfSU5TVEFMTFNfTU9ERVMgPSBbJ2ltcGxpY2l0JywgJ2V4cGxpY2l0J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBPZmZpY2lhbEluc3RhbGxzID0gKHR5cGVvZiBPRkZJQ0lBTF9JTlNUQUxMU19NT0RFUylbbnVtYmVyXTtcblxuLyoqXG4gKiBXaGF0IGhhcHBlbnMgd2hlbiBhbiBvcmcgZGVmaW5lcyBhIHBsdWdpbiBOQU1FIHRoYXQgb3ZlcnJpZGVzIHNvbWV0aGluZyBpdFxuICogd291bGQgb3RoZXJ3aXNlIHJlc29sdmUg4oCUIGEgbGlzdGluZywgb3IgKGZvciBhIHRlYW0pIGl0cyBwYXJlbnQgb3JnJ3MgcGx1Z2luLlxuICpcbiAqIGBhbGxvd2Aga2VlcHMgdG9kYXkncyBiZWhhdmlvdXI6IHRoZSBvdmVycmlkZSBpcyBzaWxlbnQgYmV5b25kIHRoZSBkYXNoYm9hcmRcbiAqIGJhbm5lci4gYHdhcm5gIGlzIHRoZSBzYW1lIHJlc29sdXRpb24gd2l0aCB0aGUgZmFjdCByZWNvcmRlZCBwcm9taW5lbnRseS5cbiAqIGBkZW55YCByZWZ1c2VzIHRoZSB1cGxvYWQsIHdoaWNoIGlzIHRoZSBvbmx5IHNldHRpbmcgdGhhdCBhY3R1YWxseSBzdG9wcyBhXG4gKiB0ZWFtIHJlcGxhY2luZyB0aGUgT2ZmaWNpYWwgYHRyaXZ5YCBmb3IgZXZlcnkgcGlwZWxpbmUgdGhhdCBuYW1lcyBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNIQURPV0lOR19NT0RFUyA9IFsnYWxsb3cnLCAnd2FybicsICdkZW55J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBTaGFkb3dpbmdNb2RlID0gKHR5cGVvZiBTSEFET1dJTkdfTU9ERVMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBSRVZJRVdfU1RBVFVTRVMgPSBbJ3B1Ymxpc2hlZCcsICdoZWxkJywgJ3JlbW92ZWQnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFJldmlld1N0YXR1cyA9ICh0eXBlb2YgUkVWSUVXX1NUQVRVU0VTKVtudW1iZXJdO1xuXG4vKiogV2h5IGEgaGVsZCByZXZpZXcgaXMgaGVsZC4gKi9cbmV4cG9ydCBjb25zdCBSRVZJRVdfSE9MRF9SRUFTT05TID0gWydyZXBvcnRzJywgJ2J1cnN0JywgJ2ZpbHRlcicsICdzZWN1cml0eScsICdtb2RlcmF0b3InXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFJldmlld0hvbGRSZWFzb24gPSAodHlwZW9mIFJFVklFV19IT0xEX1JFQVNPTlMpW251bWJlcl07XG5cbi8qKiBBIHJldmlldyByZXBvcnQncyBjYXRlZ29yeTsgYHNlY3VyaXR5YCByb3V0ZXMgcHJpdmF0ZWx5IHRvIHRoZSBhZHZpc29yeSBwYXRoLiAqL1xuZXhwb3J0IGNvbnN0IFJFVklFV19SRVBPUlRfQ0FURUdPUklFUyA9IFsnc3BhbScsICdhYnVzZScsICdvZmZfdG9waWMnLCAnc2VjdXJpdHknXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFJldmlld1JlcG9ydENhdGVnb3J5ID0gKHR5cGVvZiBSRVZJRVdfUkVQT1JUX0NBVEVHT1JJRVMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBBRFZJU09SWV9TRVZFUklUSUVTID0gWydjcml0aWNhbCcsICdoaWdoJywgJ21lZGl1bScsICdsb3cnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEFkdmlzb3J5U2V2ZXJpdHkgPSAodHlwZW9mIEFEVklTT1JZX1NFVkVSSVRJRVMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBBRFZJU09SWV9TVEFURVMgPSBbJ2RyYWZ0JywgJ3B1Ymxpc2hlZCcsICd3aXRoZHJhd24nXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEFkdmlzb3J5U3RhdGUgPSAodHlwZW9mIEFEVklTT1JZX1NUQVRFUylbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IEFEVklTT1JZX1NPVVJDRVMgPSBbJ3B1Ymxpc2hlcicsICdtb2RlcmF0b3InLCAnY3ZlX3Jlc2NhbicsICdyZXZpZXcnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEFkdmlzb3J5U291cmNlID0gKHR5cGVvZiBBRFZJU09SWV9TT1VSQ0VTKVtudW1iZXJdO1xuXG4vKipcbiAqIEFuIGFub255bW91cyBzdWJtaXNzaW9uJ3MgbGlmZWN5Y2xlLiBgcHVibGlzaGluZ2AgaXMgdGhlIHNob3J0IGNsYWltIGFuXG4gKiBhcHByb3ZhbCB0YWtlcyBiZWZvcmUgaXQgY29waWVzIHRoZSBxdWFyYW50aW5lZCBpbWFnZSBvdXQsIHNvIGFuIGV4cGlyeSBjYW5cbiAqIG5ldmVyIGRlbGV0ZSB0aGUgYXJ0aWZhY3RzIG9mIGEgc3VibWlzc2lvbiB0aGF0IGlzIGJlaW5nIHB1Ymxpc2hlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNVQk1JU1NJT05fU1RBVFVTRVMgPSBbXG4gICdwZW5kaW5nX3ZlcmlmaWNhdGlvbicsICdwZW5kaW5nX3JldmlldycsICdwdWJsaXNoaW5nJywgJ2dhdGVfZmFpbGVkJywgJ2FwcHJvdmVkJywgJ3JlamVjdGVkJywgJ2V4cGlyZWQnLCAnY2xhaW1lZCcsXG5dIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgU3VibWlzc2lvblN0YXR1cyA9ICh0eXBlb2YgU1VCTUlTU0lPTl9TVEFUVVNFUylbbnVtYmVyXTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFBsdWdpbiBzZWN1cml0eSBub3RpZmljYXRpb25zIChwZXIgb3JnKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIFdobyByZWNlaXZlcyBhbiBvcmcncyBwbHVnaW4gc2VjdXJpdHkgbm90aWNlczogYHdyaXRlcnNgID0gdGhlIHVwbG9hZGVyIHBsdXNcbiAqICBtZW1iZXJzIGhvbGRpbmcgYHBsdWdpbnM6d3JpdGVgOyBgdXNlcnNgID0gdGhlIG9yZydzIGNob3NlbiBtZW1iZXJzLiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9TRUNVUklUWV9SRUNJUElFTlRfTU9ERVMgPSBbJ3dyaXRlcnMnLCAndXNlcnMnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFBsdWdpblNlY3VyaXR5UmVjaXBpZW50TW9kZSA9ICh0eXBlb2YgUExVR0lOX1NFQ1VSSVRZX1JFQ0lQSUVOVF9NT0RFUylbbnVtYmVyXTtcblxuLyoqIEhvdyByZXNjYW4gZmluZGluZ3MgKE4zMSkgYXJlIGJhdGNoZWQ7IGJsb2NrZWQgYnVpbGRzIChOMzApIGFyZSBhbHdheXMgaW1tZWRpYXRlLiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9TRUNVUklUWV9ESUdFU1RfTU9ERVMgPSBbJ2ltbWVkaWF0ZScsICdkYWlseScsICd3ZWVrbHknXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFBsdWdpblNlY3VyaXR5RGlnZXN0TW9kZSA9ICh0eXBlb2YgUExVR0lOX1NFQ1VSSVRZX0RJR0VTVF9NT0RFUylbbnVtYmVyXTtcbiJdfQ==
|
|
@@ -232,6 +232,12 @@ function getPreviousProvider() {
|
|
|
232
232
|
* Warmed here because `decryptSecret` takes the previous provider as a SYNC
|
|
233
233
|
* default parameter — a cold `KmsKeyProvider` would throw out of `deriveKey`
|
|
234
234
|
* on the retry path and mask the original decryption error.
|
|
235
|
+
*
|
|
236
|
+
* Called from `initSecretEncryption()` on EVERY path, including the one that
|
|
237
|
+
* configures no KMS primary: which master is outgoing is independent of which
|
|
238
|
+
* one is current, so an env primary with a KMS-wrapped previous is a valid
|
|
239
|
+
* rotation state and has to resolve here. Without a boot call this falls back
|
|
240
|
+
* to the lazy `getPreviousProvider()`, which reads the plaintext var only.
|
|
235
241
|
*/
|
|
236
242
|
async function initPreviousProvider() {
|
|
237
243
|
const wrappedPrevious = process.env.SECRET_ENCRYPTION_KMS_CIPHERTEXT_PREVIOUS;
|
|
@@ -284,12 +290,22 @@ export async function initSecretEncryption() {
|
|
|
284
290
|
// first `encryptSecret`/`decryptSecret` builds it, and a missing master throws
|
|
285
291
|
// there. Callers that need an instance (the per-org fallback) construct their
|
|
286
292
|
// own `EnvKeyProvider` when this returns null.
|
|
293
|
+
//
|
|
294
|
+
// The rotation fallback is resolved FIRST, and on both paths. It used to be
|
|
295
|
+
// resolved only after the KMS primary was installed, below — so with an env
|
|
296
|
+
// PRIMARY this function returned here and `SECRET_ENCRYPTION_KMS_CIPHERTEXT_
|
|
297
|
+
// PREVIOUS` was never read at all. The lazy `getPreviousProvider()` knows
|
|
298
|
+
// only the plaintext env var, so a KMS-wrapped outgoing master was silently
|
|
299
|
+
// ignored and every row still written under it failed to decrypt with an
|
|
300
|
+
// opaque auth-tag error. `reencrypt-secrets` counts that same var as
|
|
301
|
+
// `previousKeyConfigured`, so the tool reported itself ready to run a
|
|
302
|
+
// rotation whose reads could not succeed.
|
|
303
|
+
await initPreviousProvider();
|
|
287
304
|
if (!keyId || !ciphertext)
|
|
288
305
|
return { provider: null, mode: 'env' };
|
|
289
306
|
const provider = new KmsKeyProvider({ keyId, ciphertextBase64: ciphertext });
|
|
290
307
|
await provider.warmup();
|
|
291
308
|
setKeyProvider(provider);
|
|
292
|
-
await initPreviousProvider();
|
|
293
309
|
return { provider, mode: 'kms' };
|
|
294
310
|
}
|
|
295
311
|
/** Reset the cached default (and previous) provider for tests that mutate `process.env`. */
|
|
@@ -554,4 +570,4 @@ export function isEncryptedBlob(value) {
|
|
|
554
570
|
&& typeof value.iv === 'string'
|
|
555
571
|
&& typeof value.ciphertext === 'string');
|
|
556
572
|
}
|
|
557
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0LWVuY3J5cHRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvc2VjcmV0LWVuY3J5cHRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQ0c7QUFFSCxPQUFPLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSxRQUFRLENBQUM7QUE2QmpGOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLE9BQU8sY0FBYztJQUNSLFNBQVMsQ0FBUztJQUVuQyxZQUFZLGlCQUEwQjtRQUNwQyxNQUFNLEdBQUcsR0FBRyxpQkFBaUIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDO1FBQ25FLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNULE1BQU0sSUFBSSxLQUFLLENBQUMsNkRBQTZELENBQUMsQ0FBQztRQUNqRixDQUFDO1FBQ0QsMEVBQTBFO1FBQzFFLHNEQUFzRDtRQUN0RCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsTUFBTSxLQUFLLEVBQUUsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUMzRCxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvQixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO0lBQzNCLENBQUM7SUFFRCxTQUFTLENBQUMs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RztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsS0FBYztJQUM1QyxPQUFPLENBQUUsT0FBTyxLQUFLLEtBQUssUUFBUTtXQUM3QixLQUFLLEtBQUssSUFBSTtXQUNiLEtBQTJCLENBQUMsR0FBRyxLQUFLLGdCQUFnQjtXQUNyRCxPQUFRLEtBQTBCLENBQUMsRUFBRSxLQUFLLFFBQVE7V0FDbEQsT0FBUSxLQUFrQyxDQUFDLFVBQVUsS0FBSyxRQUFRLENBQ3RFLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogRW52ZWxvcGUgZW5jcnlwdGlvbiBmb3Igb3JnLXNjb3BlZCBzZWNyZXQgY29sdW1ucyAoQUkgcHJvdmlkZXIga2V5cywgSWRQXG4gKiBjbGllbnQgc2VjcmV0cywgd2ViaG9vayBVUkxzL3NlY3JldHMsIHJlZ2lzdHJ5IGNyZWRlbnRpYWxzKS5cbiAqXG4gKiBDcnlwdG9ncmFwaHkg4oCUIHRoZSBzYW1lIGZvciBldmVyeSBwcm92aWRlciBiZWxvdzpcbiAqIC0gQUVTLTI1Ni1HQ00gKGF1dGhlbnRpY2F0ZWQgZW5jcnlwdGlvbikuXG4gKiAtIFBlci1vcmcga2V5IHZpYSBIS0RGLVNIQTI1NihtYXN0ZXIsIHNhbHQ9b3JnSWQsIGluZm89J3NlY3JldHMtdjEnKSwgc28gdHdvXG4gKiAgIG9yZ3MgZW5jcnlwdGluZyB0aGUgc2FtZSBwbGFpbnRleHQgcHJvZHVjZSBkaWZmZXJlbnQgY2lwaGVydGV4dHMgYW5kIGFcbiAqICAgc3RvbGVuIGRhdGFiYXNlIGNhbm5vdCB0ZWxsIHdoaWNoIG9yZ3Mgc2hhcmUgYSBzZWNyZXQgYnkgY29tcGFyaXNvbi5cbiAqIC0gMTItYnl0ZSBJViBwZXIgZW5jcnlwdGlvbiBmcm9tIGBjcnlwdG8ucmFuZG9tQnl0ZXNgLlxuICogLSAxNi1ieXRlIEdDTSBhdXRoIHRhZyBjb25jYXRlbmF0ZWQgb250byB0aGUgY2lwaGVydGV4dC5cbiAqXG4gKiBXSEVSRSBUSEUgTUFTVEVSIENPTUVTIEZST00gaXMgdGhlIG9ubHkgYXhpcyB0aGF0IHZhcmllcywgYW5kIGFsbCB0aHJlZVxuICogcHJvdmlkZXJzIGFyZSBpbXBsZW1lbnRlZCDigJQgcGljayBvbmUgcGVyIGRlcGxveW1lbnQ6XG4gKlxuICogfCBwcm92aWRlciAgICAgICAgICAgICAgIHwgbWFzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBibGFzdCByYWRpdXMgICAgICAgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCBgRW52S2V5UHJvdmlkZXJgICAgICAgIHwgYFNFQ1JFVF9FTkNSWVBUSU9OX0tFWWAsIHBsYWludGV4dCAgfCBldmVyeSBvcmcgICAgICAgICAgfFxuICogfCBgS21zS2V5UHJvdmlkZXJgICAgICAgIHwgS01TLXdyYXBwZWQsIHVud3JhcHBlZCBvbmNlIGF0IGJvb3QgfCBldmVyeSBvcmcgICAgICAgICAgfFxuICogfCBgUGVyT3JnS21zS2V5UHJvdmlkZXJgIHwgb25lIEtNUy13cmFwcGVkIG1hc3RlciBQRVIgT1JHICAgICAgfCBvbmUgb3JnICAgICAgICAgICAgfFxuICpcbiAqIGBpbml0U2VjcmV0RW5jcnlwdGlvbigpYCBzZWxlY3RzIGJldHdlZW4gdGhlIGZpcnN0IHR3byBmcm9tIGVudiBhbmQgd2FybXMgdGhlXG4gKiByZXN1bHQ7IHBsYXRmb3JtIGxheWVycyBgUGVyT3JnS21zS2V5UHJvdmlkZXJgIG92ZXIgaXQgKG9yZ3Mgd2l0aCBubyBwZXItb3JnXG4gKiBDTUsgZmFsbCB0aHJvdWdoIHRvIHRoZSBiYXNlIHByb3ZpZGVyKSwgc28gYSBkZXBsb3ltZW50IGNhbiBydW4gbWl4ZWQtbW9kZS5cbiAqIENhbGwgaXQgb25jZSBhdCBzdGFydHVwIOKAlCBiZWZvcmUgdGhhdCwgdGhlIGxhenkgZGVmYXVsdCBpcyBgRW52S2V5UHJvdmlkZXJgLFxuICogd2hpY2ggaXMgY29ycmVjdCBmb3IgZGV2IGFuZCBzZWxmLWhvc3RlZCBpbnN0YWxscyB3aXRoIG5vIEtNUy5cbiAqXG4gKiBGYWlsLWNsb3NlZCB0aHJvdWdob3V0OiBhIG1pc3Npbmcgb3Igd3JvbmctbGVuZ3RoIG1hc3RlciB0aHJvd3MgcmF0aGVyIHRoYW5cbiAqIHJvdW5kLXRyaXBwaW5nIGEgc2VjcmV0IGFzIHBsYWludGV4dCwgYW5kIGFuIHVucmVzb2x2ZWQgcGVyLW9yZyBjb25maWcgdGhyb3dzXG4gKiByYXRoZXIgdGhhbiBndWVzc2luZyB0aGUgc2hhcmVkIG1hc3Rlci5cbiAqXG4gKiBUaGUgb24tZGlzayBzaGFwZSAoYHsgYWxnLCBpdiwgY2lwaGVydGV4dCwga2lkPyB9YCkgaXMgcHJvdmlkZXItaW5kZXBlbmRlbnQ7XG4gKiBga2lkYCBjYXJyaWVzIHRoZSBLTVMga2V5IGlkIGZvciB0aGUgcHJvdmlkZXJzIHRoYXQgaGF2ZSBvbmUsIHdoaWNoIGlzIHdoYXRcbiAqIGxldHMgYGRlY3J5cHRTZWNyZXRgIHJlZnVzZSBhIGJsb2Igd3JpdHRlbiB1bmRlciBhIHNpbmNlLXJvdGF0ZWQgQ01LIGluc3RlYWRcbiAqIG9mIHN1cmZhY2luZyBhbiBvcGFxdWUgYXV0aC10YWcgZmFpbHVyZS5cbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVDaXBoZXJpdiwgY3JlYXRlRGVjaXBoZXJpdiwgaGtkZlN5bmMsIHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcblxuLyoqIE9uLWRpc2sgc2hhcGUgb2YgYW4gZW5jcnlwdGVkIHNlY3JldC4gSlNPTi1zZXJpYWxpemFibGUuICovXG5leHBvcnQgaW50ZXJmYWNlIEVuY3J5cHRlZEJsb2Ige1xuICAvKiogQWxnb3JpdGhtIHRhZy4gQnVtcCBvbiBmb3JtYXQgY2hhbmdlIHNvIGEgZnV0dXJlIG1pZ3JhdGlvbiBjYW4gZGV0ZWN0IG9sZCBibG9icy4gKi9cbiAgYWxnOiAnYWVzLTI1Ni1nY20tdjEnO1xuICAvKiogQmFzZTY0LWVuY29kZWQgMTItYnl0ZSBJVi4gKi9cbiAgaXY6IHN0cmluZztcbiAgLyoqIEJhc2U2NC1lbmNvZGVkIGNpcGhlcnRleHQgKyAxNi1ieXRlIGF1dGhlbnRpY2F0aW9uIHRhZyBjb25jYXRlbmF0ZWQuICovXG4gIGNpcGhlcnRleHQ6IHN0cmluZztcbiAgLyoqIE9wdGlvbmFsIGtleSBpZCAgcG9wdWxhdGVkIGJ5IEtNUy1iYWNrZWQgcHJvdmlkZXJzLCBpZ25vcmVkIGJ5IHRoZSBlbnYgcHJvdmlkZXIuICovXG4gIGtpZD86IHN0cmluZztcbn1cblxuLyoqIFBsdWdnYWJsZSBrZXkgc291cmNlLiBFbnYtYmFja2VkIGJ5IGRlZmF1bHQ7IEtNUy1iYWNrZWQgYXZhaWxhYmxlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBLZXlQcm92aWRlciB7XG4gIC8qKiBEZXJpdmUgYSAzMi1ieXRlIHN5bW1ldHJpYyBrZXkgYm91bmQgdG8gYG9yZ0lkYC4gKi9cbiAgZGVyaXZlS2V5KG9yZ0lkOiBzdHJpbmcpOiBCdWZmZXI7XG4gIC8qKiBPcHRpb25hbCBhc3luYyB2YXJpYW50IGZvciBwcm92aWRlcnMgdGhhdCBuZWVkIHRvIGRvIEkvTyAoZS5nLlxuICAgKiAgcGVyLW9yZyBLTVMgbG9va3VwIHRoZSBmaXJzdCB0aW1lIGFuIG9yZyBpcyBzZWVuKS4gRGVmYXVsdFxuICAgKiAgaW1wbGVtZW50YXRpb24gZm9yd2FyZHMgdG8gdGhlIHN5bmMgYGRlcml2ZUtleWAuICovXG4gIGRlcml2ZUtleUFzeW5jPyhvcmdJZDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+O1xuICAvKiogT3B0aW9uYWwgS01TLWtleS1pZCB0aGlzIHByb3ZpZGVyIHVzZWQgZm9yIGBvcmdJZGAuIEVtYmVkZGVkIGluIHRoZVxuICAgKiAgYEVuY3J5cHRlZEJsb2Iua2lkYCBmaWVsZCBvbiB3cml0ZSBzbyBkZWNyeXB0IGNhbiB2ZXJpZnkgdGhlIHJpZ2h0XG4gICAqICBLTVMgQ01LIGlzIGJlaW5nIHVzZWQgKGRlZmVuc2UgYWdhaW5zdCBhbiBhdHRhY2tlciB3aG8gc3dhcHMgYSBibG9iXG4gICAqICBiZXR3ZWVuIG9yZ3MpLiBEZWZhdWx0IHJldHVybnMgdW5kZWZpbmVkIChlbnYgcHJvdmlkZXIpLiAqL1xuICBraWRGb3I/KG9yZ0lkOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRGVmYXVsdCBwcm92aWRlciAgZGVyaXZlcyBhIHBlci1vcmcga2V5IGZyb20gYFNFQ1JFVF9FTkNSWVBUSU9OX0tFWWAgdmlhXG4gKiBIS0RGLVNIQTI1Ni4gU3VpdGFibGUgZm9yIHNlbGYtaG9zdGVkIC8gZGV2IHdoZXJlIG9wZXJhdG9ycyBkb24ndCBoYXZlIEtNUy5cbiAqXG4gKiBGYWlscyBmYXN0IGlmIHRoZSBlbnYgaXMgbWlzc2luZyBvciB0aGUga2V5IGlzIHRoZSB3cm9uZyBsZW5ndGggc28gbWlzY29uZmlnXG4gKiBzdXJmYWNlcyBhdCBmaXJzdCB1c2UgcmF0aGVyIHRoYW4gc2lsZW50bHkgZmluZ2VycHJpbnRpbmcgYWxsIHdyaXRlcyB3aXRoXG4gKiBhIGRlZmF1bHQgemVybyBrZXkuXG4gKi9cbmV4cG9ydCBjbGFzcyBFbnZLZXlQcm92aWRlciBpbXBsZW1lbnRzIEtleVByb3ZpZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXN0ZXJLZXk6IEJ1ZmZlcjtcblxuICBjb25zdHJ1Y3RvcihtYXN0ZXJLZXlPdmVycmlkZT86IHN0cmluZykge1xuICAgIGNvbnN0IHJhdyA9IG1hc3RlcktleU92ZXJyaWRlID8/IHByb2Nlc3MuZW52LlNFQ1JFVF9FTkNSWVBUSU9OX0tFWTtcbiAgICBpZiAoIXJhdykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTRUNSRVRfRU5DUllQVElPTl9LRVkgZW52IGlzIHJlcXVpcmVkIGZvciBzZWNyZXQgZW5jcnlwdGlvbicpO1xuICAgIH1cbiAgICAvLyBBY2NlcHQgZWl0aGVyIGhleCAoNjQgY2hhcnMpIG9yIGJhc2U2NCAoNDQgY2hhcnMgaW5jbHVkaW5nIHBhZGRpbmcpIGZvclxuICAgIC8vIG9wZXJhdG9yIGNvbnZlbmllbmNlICBib3RoIGRlY29kZSB0byBhIDMyLWJ5dGUga2V5LlxuICAgIGNvbnN0IGRlY29kZWQgPSByYXcubGVuZ3RoID09PSA2NCAmJiAvXlswLTlhLWZdKyQvaS50ZXN0KHJhdylcbiAgICAgID8gQnVmZmVyLmZyb20ocmF3LCAnaGV4JylcbiAgICAgIDogQnVmZmVyLmZyb20ocmF3LCAnYmFzZTY0Jyk7XG4gICAgaWYgKGRlY29kZWQubGVuZ3RoICE9PSAzMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTRUNSRVRfRU5DUllQVElPTl9LRVkgbXVzdCBkZWNvZGUgdG8gMzIgYnl0ZXMgKGdvdCAke2RlY29kZWQubGVuZ3RofSlgKTtcbiAgICB9XG4gICAgdGhpcy5tYXN0ZXJLZXkgPSBkZWNvZGVkO1xuICB9XG5cbiAgZGVyaXZlS2V5KG9yZ0lkOiBzdHJpbmcpOiBCdWZmZXIge1xuICAgIC8vIEhLREYgYmluZHMgdGhlIG1hc3RlciBrZXkgdG8gdGhlIG9yZyBzbyB0d28gb3JncyBlbmNyeXB0aW5nIHRoZSBzYW1lXG4gICAgLy8gcGxhaW50ZXh0IHByb2R1Y2UgZGlmZmVyZW50IGNpcGhlcnRleHRzICBrZWVwcyBhIHN0b2xlbiBEQiB1bmFibGUgdG9cbiAgICAvLyB0ZWxsIHdoaWNoIG9yZ3Mgc2hhcmUgc2VjcmV0cyB2aWEgY2lwaGVydGV4dCBjb21wYXJpc29uLlxuICAgIGNvbnN0IGRlcml2ZWQgPSBoa2RmU3luYyggJ3NoYTI1NicsXG4gICAgICB0aGlzLm1hc3RlcktleSxcbiAgICAgIEJ1ZmZlci5mcm9tKG9yZ0lkLCAndXRmOCcpLFxuICAgICAgJ3NlY3JldHMtdjEnLFxuICAgICAgMzIsXG4gICAgKTtcbiAgICAvLyBoa2RmU3luYyByZXR1cm5zIEFycmF5QnVmZmVyIGluIG9sZGVyIE5vZGUgdHlwaW5nczsgbm9ybWFsaXplIHRvIEJ1ZmZlci5cbiAgICByZXR1cm4gQnVmZmVyLmZyb20oZGVyaXZlZCk7XG4gIH1cbn1cblxuLyoqXG4gKiAgQVdTLUtNUy1iYWNrZWQgS2V5UHJvdmlkZXIuXG4gKlxuICogVHJhZGUtb2ZmIHBpY2tlZDogc3RvcmUgT05FIG1hc3RlciBrZXkgZW5jcnlwdGVkIHVuZGVyIGEgS01TIENNSzsgb25cbiAqIGZpcnN0IHVzZSwgY2FsbCBga21zOkRlY3J5cHRgIHRvIHJlY292ZXIgdGhlIG1hc3RlciBrZXkgYnl0ZXM7IEhLREYtXG4gKiBkZXJpdmUgcGVyLW9yZyBmcm9tIGl0IChzYW1lIGFzIEVudktleVByb3ZpZGVyKS4gVGhlIHByb2Nlc3MgdGhlbiBob2xkc1xuICogdGhlIHBsYWludGV4dCBtYXN0ZXIga2V5IGluIG1lbW9yeSB1bnRpbCByZXN0YXJ0LlxuICpcbiAqIFBST1M6IG9uZSBLTVMgY2FsbCBwZXIgcHJvY2VzcyBsaWZldGltZSAoY2hlYXAsIGxvdyBwOTkgaW1wYWN0KSxcbiAqIHRoZSBlbmNyeXB0ZWQtbWFzdGVyLWtleSBibG9iIGlzIHNhZmUgdG8gY29tbWl0L2xvZy9jaGVja2luLFxuICogS01TIGF1ZGl0IGxvZyByZWNvcmRzIHdoZW4gdGhlIG1hc3RlciBpcyByZWNvdmVyZWQuXG4gKiBDT05TOiBwcm9jZXNzIG1lbW9yeSBzdGlsbCBob2xkcyB0aGUgbWFzdGVyIGtleSAgc2FtZSBwb3N0dXJlIGFzXG4gKiBFbnZLZXlQcm92aWRlciBvbmNlIHdhcm1lZCB1cC4gRm9yIHN0cm9uZ2VyIGlzb2xhdGlvbiBhblxuICogb3BlcmF0b3IgY2FuIG1vdmUgdG8gcGVyLXJlY29yZCBlbnZlbG9wZSBlbmNyeXB0aW9uIChjYWxsXG4gKiBHZW5lcmF0ZURhdGFLZXkgb24gZXZlcnkgd3JpdGUpOyB0aGF0J3MgYSBmb2xsb3ctb24uXG4gKlxuICogT3BlcmF0b3Igc2V0dXA6XG4gKiAgIDEuIENyZWF0ZSBhIEtNUyBDTUsgd2hvc2Uga2V5IHBvbGljeSBhbGxvd3MgdGhlIHNlcnZpY2Ugcm9sZSBga21zOkRlY3J5cHRgLlxuICogICAgICBPbiB0aGUgQVdTIHRhcmdldHMgYGJpbi9zZXR1cC5zaGAgLyBgdGVtcGxhdGUueWFtbGAgZ3JhbnQgdGhhdCB0byB0aGVcbiAqICAgICAgcGxhdGZvcm0gYW5kIHBsdWdpbiB0YXNrIHJvbGVzIHdoZW4gdGhlc2UgdmFycyBhcmUgc2V0LlxuICogICAyLiBHZW5lcmF0ZSBhIDMyLWJ5dGUgbWFzdGVyOiAgaGVhZCAtYyAzMiAvZGV2L3VyYW5kb20gfCBiYXNlNjRcbiAqICAgMy4gV3JhcCBpdDogIGF3cyBrbXMgZW5jcnlwdCAtLWtleS1pZCA8S0VZX0lEPiAtLXBsYWludGV4dCA8YmFzZTY0LWZyb20tMj4gXFxcbiAqICAgICAgICAgICAgICAgICAgLS1vdXRwdXQgdGV4dCAtLXF1ZXJ5IENpcGhlcnRleHRCbG9iXG4gKiAgIDQuIFNldCBvbiB0aGUgc2VydmljZTpcbiAqICAgICAgICBTRUNSRVRfRU5DUllQVElPTl9LTVNfS0VZX0lEPTxLRVlfSUQ+ICAgICAgICAoYWxpYXMvPG5hbWU+IG9yIGtleSBVVUlEKVxuICogICAgICAgIFNFQ1JFVF9FTkNSWVBUSU9OX0tNU19DSVBIRVJURVhUPTxiYXNlNjQtZnJvbS0zPlxuICpcbiAqIE5PIE1BTlVBTCBXSVJJTkc6IGBpbml0U2VjcmV0RW5jcnlwdGlvbigpYCBwaWNrcyB0aGlzIHByb3ZpZGVyIHdoZW5ldmVyIGJvdGhcbiAqIHZhcnMgYXJlIHNldCBhbmQgd2FybXMgaXQgYmVmb3JlIHRoZSBzZXJ2aWNlIGFjY2VwdHMgdHJhZmZpYy4gKEl0IHVzZWQgdG9cbiAqIHJlcXVpcmUgYSBoYW5kLXdyaXR0ZW4gYHNldEtleVByb3ZpZGVyKG5ldyBLbXNLZXlQcm92aWRlcigpKWAgdGhhdCBubyBzZXJ2aWNlXG4gKiBldmVyIGNhbGxlZCwgc28gdGhlIG1vZGUgd2FzIGRvY3VtZW50ZWQgYnV0IHVucmVhY2hhYmxlLilcbiAqXG4gKiBNaWdyYXRpbmcgZW52IC0+IEtNUzogc2V0IHRoZSB0d28gdmFycyBhYm92ZSB0byB0aGUgTkVXIHdyYXBwZWQgbWFzdGVyIGFuZFxuICogbGVhdmUgdGhlIG9sZCBwbGFpbnRleHQgbWFzdGVyIGluIGBTRUNSRVRfRU5DUllQVElPTl9LRVlfUFJFVklPVVNgLiBSZWFkc1xuICogZmFsbCBiYWNrIHRvIGl0IGZvciBraWQtbGVzcyBibG9icyB1bnRpbCBgcmVlbmNyeXB0LXNlY3JldHNgIGhhcyByZXdyaXR0ZW5cbiAqIHRoZW07IHNlZSBkb2NzL3J1bmJvb2tzL3NlY3JldC1yb3RhdGlvbi5tZC5cbiAqXG4gKiBUaGUgQVdTIFNESyBpcyBpbXBvcnRlZCBsYXppbHksIHNvIGluc3RhbGxzIHRoYXQgc3RheSBvbiBgRW52S2V5UHJvdmlkZXJgXG4gKiBuZXZlciBwYXkgaXRzIGNvbGQtc3RhcnQgY29zdC5cbiAqL1xuLyoqXG4gKiBLTVMtZGVjcnlwdCBhIGJhc2U2NCBjaXBoZXJ0ZXh0IGludG8gYSAzMi1ieXRlIGtleS4gU2hhcmVkIGJ5IGJvdGggS01TIGtleVxuICogcHJvdmlkZXJzIChzaW5nbGUtbWFzdGVyICsgcGVyLW9yZykuIGBAYXdzLXNkay9jbGllbnQta21zYCBpc1xuICogZHluYW1pY2FsbHkgaW1wb3J0ZWQgc28gRW52S2V5UHJvdmlkZXItb25seSBlbnZzIG5ldmVyIGxvYWQgdGhlIFNESy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24ga21zRGVjcnlwdDMyKGtleUlkOiBzdHJpbmcsIGNpcGhlcnRleHRCNjQ6IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBlbmRwb2ludD86IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiB7XG4gIGNvbnN0IHsgS01TQ2xpZW50LCBEZWNyeXB0Q29tbWFuZCB9ID0gYXdhaXQgaW1wb3J0KCdAYXdzLXNkay9jbGllbnQta21zJyk7XG4gIGNvbnN0IGNsaWVudCA9IG5ldyBLTVNDbGllbnQoeyByZWdpb24sIC4uLihlbmRwb2ludCA/IHsgZW5kcG9pbnQgfSA6IHt9KSB9KTtcbiAgY29uc3QgcmVzcCA9IGF3YWl0IGNsaWVudC5zZW5kKG5ldyBEZWNyeXB0Q29tbWFuZCh7XG4gICAgS2V5SWQ6IGtleUlkLFxuICAgIENpcGhlcnRleHRCbG9iOiBCdWZmZXIuZnJvbShjaXBoZXJ0ZXh0QjY0LCAnYmFzZTY0JyksXG4gIH0pKTtcbiAgaWYgKCFyZXNwLlBsYWludGV4dCkgdGhyb3cgbmV3IEVycm9yKGBLTVMgRGVjcnlwdCByZXR1cm5lZCBhbiBlbXB0eSBQbGFpbnRleHQgZm9yIGtleSAke2tleUlkfWApO1xuICBjb25zdCBidWYgPSBCdWZmZXIuZnJvbShyZXNwLlBsYWludGV4dCk7XG4gIGlmIChidWYubGVuZ3RoICE9PSAzMikgdGhyb3cgbmV3IEVycm9yKGBLTVMgRGVjcnlwdCByZXR1cm5lZCAke2J1Zi5sZW5ndGh9LWJ5dGUga2V5IGZvciAke2tleUlkfTsgZXhwZWN0ZWQgMzJgKTtcbiAgcmV0dXJuIGJ1Zjtcbn1cblxuZXhwb3J0IGNsYXNzIEttc0tleVByb3ZpZGVyIGltcGxlbWVudHMgS2V5UHJvdmlkZXIge1xuICBwcml2YXRlIG1hc3RlcktleUNhY2hlOiBCdWZmZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBrZXlJZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGNpcGhlcnRleHRCNjQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSByZWdpb24/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgZGVjcnlwdEluRmxpZ2h0OiBQcm9taXNlPEJ1ZmZlcj4gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihvcHRzPzogeyBrZXlJZD86IHN0cmluZzsgY2lwaGVydGV4dEJhc2U2ND86IHN0cmluZzsgcmVnaW9uPzogc3RyaW5nOyBlbmRwb2ludD86IHN0cmluZyB9KSB7XG4gICAgY29uc3Qga2V5SWQgPSBvcHRzPy5rZXlJZCA/PyBwcm9jZXNzLmVudi5TRUNSRVRfRU5DUllQVElPTl9LTVNfS0VZX0lEO1xuICAgIGNvbnN0IGNpcGhlcnRleHQgPSBvcHRzPy5jaXBoZXJ0ZXh0QmFzZTY0ID8/IHByb2Nlc3MuZW52LlNFQ1JFVF9FTkNSWVBUSU9OX0tNU19DSVBIRVJURVhUO1xuICAgIGlmICgha2V5SWQpIHRocm93IG5ldyBFcnJvcignU0VDUkVUX0VOQ1JZUFRJT05fS01TX0tFWV9JRCBlbnYgaXMgcmVxdWlyZWQgZm9yIEttc0tleVByb3ZpZGVyJyk7XG4gICAgaWYgKCFjaXBoZXJ0ZXh0KSB0aHJvdyBuZXcgRXJyb3IoJ1NFQ1JFVF9FTkNSWVBUSU9OX0tNU19DSVBIRVJURVhUIGVudiBpcyByZXF1aXJlZCBmb3IgS21zS2V5UHJvdmlkZXInKTtcbiAgICB0aGlzLmtleUlkID0ga2V5SWQ7XG4gICAgdGhpcy5jaXBoZXJ0ZXh0QjY0ID0gY2lwaGVydGV4dDtcbiAgICB0aGlzLnJlZ2lvbiA9IG9wdHM/LnJlZ2lvbiA/PyBwcm9jZXNzLmVudi5BV1NfUkVHSU9OID8/IHByb2Nlc3MuZW52LkFXU19ERUZBVUxUX1JFR0lPTjtcbiAgICB0aGlzLmVuZHBvaW50ID0gb3B0cz8uZW5kcG9pbnQgPz8gcHJvY2Vzcy5lbnYuQVdTX0tNU19FTkRQT0lOVDtcbiAgfVxuXG4gIGRlcml2ZUtleShvcmdJZDogc3RyaW5nKTogQnVmZmVyIHtcbiAgICBpZiAoIXRoaXMubWFzdGVyS2V5Q2FjaGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvciggJ0ttc0tleVByb3ZpZGVyIGlzIG5vdCB3YXJtZWQgdXAuIENhbGwgYGF3YWl0IHByb3ZpZGVyLndhcm11cCgpYCBvbmNlIGF0IHNlcnZpY2Ugc3RhcnR1cCBiZWZvcmUgYW55IGVuY3J5cHQvZGVjcnlwdC4nLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZGVyaXZlZCA9IGhrZGZTeW5jKCdzaGEyNTYnLCB0aGlzLm1hc3RlcktleUNhY2hlLCBCdWZmZXIuZnJvbShvcmdJZCwgJ3V0ZjgnKSwgJ3NlY3JldHMtdjEnLCAzMik7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGRlcml2ZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVhZ2VybHkgcmVjb3ZlciB0aGUgbWFzdGVyIGtleSBmcm9tIEtNUyBzbyBzdWJzZXF1ZW50IGBkZXJpdmVLZXlgXG4gICAqIGNhbGxzIGFyZSBzeW5jLiBJZGVtcG90ZW50ICBjb25jdXJyZW50IGNhbGxlcnMgc2hhcmUgdGhlIHNhbWUgaW4tXG4gICAqIGZsaWdodCBwcm9taXNlIHNvIHdlIGRvbid0IHNwYXduIG11bHRpcGxlIEtNUyBEZWNyeXB0IHJlcXVlc3RzIGF0XG4gICAqIGJvb3QuIFRocm93cyBvbiBhbnkgS01TIGZhaWx1cmU7IHRoZSBjYWxsZXIgKHR5cGljYWxseSB0aGUgc2VydmljZSdzXG4gICAqIG9uQmVmb3JlU3RhcnQgaG9vaykgZGVjaWRlcyB3aGV0aGVyIHRvIGZhbGwgYmFjayB0byBhIGRpZmZlcmVudFxuICAgKiBwcm92aWRlciBvciBmYWlsLXN0YXJ0dXAuXG4gICAqL1xuICBhc3luYyB3YXJtdXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMubWFzdGVyS2V5Q2FjaGUpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuZGVjcnlwdEluRmxpZ2h0KSB7XG4gICAgICB0aGlzLmRlY3J5cHRJbkZsaWdodCA9IHRoaXMuZmV0Y2hBbmREZWNyeXB0KCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICB0aGlzLm1hc3RlcktleUNhY2hlID0gYXdhaXQgdGhpcy5kZWNyeXB0SW5GbGlnaHQ7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBBIHRyYW5zaWVudCBLTVMgZmFpbHVyZSBtdXN0IG5vdCBwZXJtYW5lbnRseSBwb2lzb24gdGhlIHByb3ZpZGVyOiBjbGVhclxuICAgICAgLy8gdGhlIHJlamVjdGVkIGluLWZsaWdodCBwcm9taXNlIHNvIGEgbGF0ZXIgd2FybXVwKCkgcmV0cmllcyBpbnN0ZWFkIG9mXG4gICAgICAvLyByZS1hd2FpdGluZyB0aGUgc2FtZSByZWplY3Rpb24gZm9yZXZlciAobWF0Y2hlcyBQZXJPcmdLbXNLZXlQcm92aWRlcikuXG4gICAgICB0aGlzLmRlY3J5cHRJbkZsaWdodCA9IG51bGw7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmZXRjaEFuZERlY3J5cHQoKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICByZXR1cm4ga21zRGVjcnlwdDMyKHRoaXMua2V5SWQsIHRoaXMuY2lwaGVydGV4dEI2NCwgdGhpcy5yZWdpb24sIHRoaXMuZW5kcG9pbnQpO1xuICB9XG59XG5cbi8vIExhenkgc2luZ2xldG9uICBvcGVyYXRvciBjb2RlIGluIGxvbmctbGl2ZWQgc2VydmljZXMgcGF5cyB0aGUgZW52LXBhcnNlXG4vLyBjb3N0IG9uY2UsIGFuZCB0ZXN0cyBjYW4gbWludCB0aGVpciBvd24gcHJvdmlkZXIgd2l0aCBhIGxpdGVyYWwga2V5LlxubGV0IGRlZmF1bHRQcm92aWRlcjogS2V5UHJvdmlkZXIgfCBudWxsID0gbnVsbDtcbmZ1bmN0aW9uIGdldERlZmF1bHRQcm92aWRlcigpOiBLZXlQcm92aWRlciB7XG4gIGlmICghZGVmYXVsdFByb3ZpZGVyKSBkZWZhdWx0UHJvdmlkZXIgPSBuZXcgRW52S2V5UHJvdmlkZXIoKTtcbiAgcmV0dXJuIGRlZmF1bHRQcm92aWRlcjtcbn1cblxuLyoqIFJlYWQgdGhlIGFjdGl2ZSBkZWZhdWx0IHByb3ZpZGVyLiBFeHBvc2VkIHNvIHNlcnZpY2UgY29kZSAoZS5nLiBhblxuICogIGFkbWluIGVuZHBvaW50IHRoYXQganVzdCByb3RhdGVkIGFuIG9yZydzIEtNUyBjb25maWcpIGNhbiBjYWxsXG4gKiAgYHByb3ZpZGVyLmV2aWN0KG9yZ0lkKWAgb24gdGhlIGxpdmUgcHJvdmlkZXIgcmF0aGVyIHRoYW4gcmVjb25zdHJ1Y3RpbmdcbiAqICBvbmUuIFRyaWdnZXJzIGxhenkgaW5pdGlhbGl6YXRpb24gb24gZmlyc3QgYWNjZXNzLCBzYW1lIGFzIHRoZSBpbnRlcm5hbFxuICogIGNhbGxlcnMgYmVsb3cuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdEtleVByb3ZpZGVyKCk6IEtleVByb3ZpZGVyIHtcbiAgcmV0dXJuIGdldERlZmF1bHRQcm92aWRlcigpO1xufVxuXG4vKipcbiAqIFJvdGF0aW9uIGZhbGxiYWNrOiBhbiBgRW52S2V5UHJvdmlkZXJgIG92ZXIgYFNFQ1JFVF9FTkNSWVBUSU9OX0tFWV9QUkVWSU9VU2AsXG4gKiBvciBudWxsIHdoZW4gdGhhdCBlbnYgaXMgdW5zZXQuIGB1bmRlZmluZWRgID0gbm90IHlldCByZXNvbHZlZC4gV2hpbGUgYVxuICogbWFzdGVyLWtleSByb3RhdGlvbiBpcyBpbiBwcm9ncmVzcywgYGRlY3J5cHRTZWNyZXRgIHJldHJpZXMgYSBmYWlsZWQgZGVjcnlwdFxuICogdW5kZXIgdGhpcyBrZXksIHNvIHJvd3Mgd3JpdHRlbiB1bmRlciB0aGUgb2xkIG1hc3RlciBzdGF5IHJlYWRhYmxlIHVudGlsIHRoZVxuICogcmUtZW5jcnlwdGlvbiB0b29sIChwbGF0Zm9ybSBgc2NyaXB0cy9yZWVuY3J5cHQtc2VjcmV0cy5qc2ApIGhhcyByZXdyaXR0ZW5cbiAqIHRoZW0gdW5kZXIgdGhlIG5ldyBvbmUuIEVuY3J5cHRpb24gTkVWRVIgdXNlcyBpdC5cbiAqL1xubGV0IHByZXZpb3VzUHJvdmlkZXI6IEtleVByb3ZpZGVyIHwgbnVsbCB8IHVuZGVmaW5lZDtcbmZ1bmN0aW9uIGdldFByZXZpb3VzUHJvdmlkZXIoKTogS2V5UHJvdmlkZXIgfCBudWxsIHtcbiAgaWYgKHByZXZpb3VzUHJvdmlkZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHJhdyA9IHByb2Nlc3MuZW52LlNFQ1JFVF9FTkNSWVBUSU9OX0tFWV9QUkVWSU9VUztcbiAgICBwcmV2aW91c1Byb3ZpZGVyID0gcmF3ID8gbmV3IEVudktleVByb3ZpZGVyKHJhdykgOiBudWxsO1xuICB9XG4gIHJldHVybiBwcmV2aW91c1Byb3ZpZGVyO1xufVxuXG4vKipcbiAqIFJlc29sdmUgKGFuZCBXQVJNKSB0aGUgcm90YXRpb24gZmFsbGJhY2suXG4gKlxuICogVHdvIHJvdGF0aW9uIHNoYXBlcywgYW5kIHRoZSBvcmRlciBtYXR0ZXJzOlxuICogIC0gS01TIG1hc3RlciByb3RhdGlvbjogYFNFQ1JFVF9FTkNSWVBUSU9OX0tNU19DSVBIRVJURVhUX1BSRVZJT1VTYCBob2xkcyB0aGVcbiAqICAgIG91dGdvaW5nIG1hc3RlciB3cmFwcGVkIHVuZGVyIGBTRUNSRVRfRU5DUllQVElPTl9LTVNfS0VZX0lEX1BSRVZJT1VTYCAob3JcbiAqICAgIHRoZSBjdXJyZW50IENNSywgd2hlbiBvbmx5IHRoZSBtYXN0ZXIgY2hhbmdlZCBhbmQgbm90IHRoZSBrZXkpLlxuICogIC0gTWlncmF0aW9uIEZST00gdGhlIGVudiBtYXN0ZXIgVE8gS01TOiB0aGUgcHJpbWFyeSBpcyB0aGUgbmV3IEtNUy13cmFwcGVkXG4gKiAgICBtYXN0ZXIgYW5kIHRoZSBvdXRnb2luZyBQTEFJTlRFWFQgbWFzdGVyIHN0YXlzIGluXG4gKiAgICBgU0VDUkVUX0VOQ1JZUFRJT05fS0VZX1BSRVZJT1VTYC4gVGhhdCBpcyB3aHkgdGhlIGVudiBmb3JtIGlzIHN0aWxsIHJlYWRcbiAqICAgIHdoZW4gbm8gS01TIHByZXZpb3VzIGlzIGNvbmZpZ3VyZWQsIHJhdGhlciB0aGFuIGJlaW5nIG11dHVhbGx5IGV4Y2x1c2l2ZS5cbiAqXG4gKiBXYXJtZWQgaGVyZSBiZWNhdXNlIGBkZWNyeXB0U2VjcmV0YCB0YWtlcyB0aGUgcHJldmlvdXMgcHJvdmlkZXIgYXMgYSBTWU5DXG4gKiBkZWZhdWx0IHBhcmFtZXRlciDigJQgYSBjb2xkIGBLbXNLZXlQcm92aWRlcmAgd291bGQgdGhyb3cgb3V0IG9mIGBkZXJpdmVLZXlgXG4gKiBvbiB0aGUgcmV0cnkgcGF0aCBhbmQgbWFzayB0aGUgb3JpZ2luYWwgZGVjcnlwdGlvbiBlcnJvci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5pdFByZXZpb3VzUHJvdmlkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHdyYXBwZWRQcmV2aW91cyA9IHByb2Nlc3MuZW52LlNFQ1JFVF9FTkNSWVBUSU9OX0tNU19DSVBIRVJURVhUX1BSRVZJT1VTO1xuICBjb25zdCBwcmV2aW91c0tleUlkID0gcHJvY2Vzcy5lbnYuU0VDUkVUX0VOQ1JZUFRJT05fS01TX0tFWV9JRF9QUkVWSU9VUyA/PyBwcm9jZXNzLmVudi5TRUNSRVRfRU5DUllQVElPTl9LTVNfS0VZX0lEO1xuICBpZiAod3JhcHBlZFByZXZpb3VzICYmIHByZXZpb3VzS2V5SWQpIHtcbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBLbXNLZXlQcm92aWRlcih7IGtleUlkOiBwcmV2aW91c0tleUlkLCBjaXBoZXJ0ZXh0QmFzZTY0OiB3cmFwcGVkUHJldmlvdXMgfSk7XG4gICAgYXdhaXQgcHJvdmlkZXIud2FybXVwKCk7XG4gICAgcHJldmlvdXNQcm92aWRlciA9IHByb3ZpZGVyO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBwbGFpbnRleHRQcmV2aW91cyA9IHByb2Nlc3MuZW52LlNFQ1JFVF9FTkNSWVBUSU9OX0tFWV9QUkVWSU9VUztcbiAgcHJldmlvdXNQcm92aWRlciA9IHBsYWludGV4dFByZXZpb3VzID8gbmV3IEVudktleVByb3ZpZGVyKHBsYWludGV4dFByZXZpb3VzKSA6IG51bGw7XG59XG5cbi8qKlxuICogVGhlIGJhc2UgKG5vbi1wZXItb3JnKSBwcm92aWRlciB0aGlzIGVudmlyb25tZW50IGFza3MgZm9yOiB0aGUgS01TLXdyYXBwZWRcbiAqIG1hc3RlciB3aGVuIGJvdGggb2YgaXRzIHZhcnMgYXJlIHNldCwgb3RoZXJ3aXNlIHRoZSBwbGFpbnRleHQgZW52IG1hc3Rlci5cbiAqXG4gKiBDb25zdHJ1Y3RzIGVhZ2VybHksIHNvIGl0IHRocm93cyB3aGVuIHRoZSBlbnYgbWFzdGVyIGlzIHJlcXVpcmVkIGFuZCBtaXNzaW5nLlxuICogYGluaXRTZWNyZXRFbmNyeXB0aW9uKClgIGlzIHRoZSBib290IGVudHJ5IHBvaW50IGFuZCBkZWxpYmVyYXRlbHkgZG9lcyBOT1RcbiAqIGNhbGwgdGhpcyBmb3IgdGhlIGVudiBjYXNlOyB1c2UgaXQgb25seSB3aGVyZSBhbiBpbnN0YW5jZSBpcyBuZWVkZWQgcmlnaHRcbiAqIGF3YXkg4oCUIGUuZy4gdGhlIHBlci1vcmcgZmFsbGJhY2ssIHdoaWNoIGlzIGFscmVhZHkgcGFzdCB0aGF0IGNoZWNrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmFzZUtleVByb3ZpZGVyKCk6IEtleVByb3ZpZGVyIHtcbiAgY29uc3Qga2V5SWQgPSBwcm9jZXNzLmVudi5TRUNSRVRfRU5DUllQVElPTl9LTVNfS0VZX0lEO1xuICBjb25zdCBjaXBoZXJ0ZXh0ID0gcHJvY2Vzcy5lbnYuU0VDUkVUX0VOQ1JZUFRJT05fS01TX0NJUEhFUlRFWFQ7XG4gIHJldHVybiBrZXlJZCAmJiBjaXBoZXJ0ZXh0ID8gbmV3IEttc0tleVByb3ZpZGVyKHsga2V5SWQsIGNpcGhlcnRleHRCYXNlNjQ6IGNpcGhlcnRleHQgfSkgOiBuZXcgRW52S2V5UHJvdmlkZXIoKTtcbn1cblxuLyoqXG4gKiBTZWxlY3QsIFdBUk0gYW5kIGluc3RhbGwgdGhlIGJhc2Uga2V5IHByb3ZpZGVyLiBDYWxsIG9uY2UgYXQgc3RhcnR1cCwgYmVmb3JlXG4gKiB0aGUgc2VydmljZSBzZXJ2ZXMgdHJhZmZpYy5cbiAqXG4gKiBXYXJtaW5nIG1hdHRlcnM6IGBLbXNLZXlQcm92aWRlci5kZXJpdmVLZXlgIGlzIHN5bmNocm9ub3VzIGFuZCByZWZ1c2VzIHRvIHdvcmtcbiAqIGNvbGQsIHNvIHdpdGhvdXQgdGhpcyBldmVyeSBzZWNyZXQgcmVhZC93cml0ZSB3b3VsZCB0aHJvdyB1bnRpbCBzb21ldGhpbmdcbiAqIGhhcHBlbmVkIHRvIGNhbGwgYHdhcm11cCgpYC4gRG9pbmcgaXQgYXQgYm9vdCBhbHNvIHR1cm5zIGEgYmFkIENNSywgYSBiYWRcbiAqIHdyYXBwZWQgbWFzdGVyIG9yIGEgbWlzc2luZyBga21zOkRlY3J5cHRgIGdyYW50IGludG8gYSBzdGFydHVwIGZhaWx1cmUgcmF0aGVyXG4gKiB0aGFuIGEgNTAwIG9uIHRoZSBmaXJzdCByZXF1ZXN0IHRoYXQgdG91Y2hlcyBhIHNlY3JldC5cbiAqXG4gKiBSZXR1cm5zIHRoZSB3YXJtZWQgcHJvdmlkZXIgc28gYSBjYWxsZXIgY2FuIGxheWVyIGBQZXJPcmdLbXNLZXlQcm92aWRlcmAgb3ZlclxuICogaXQgd2l0aG91dCBjb25zdHJ1Y3RpbmcgKGFuZCByZS13YXJtaW5nKSBhIHNlY29uZCBvbmUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0U2VjcmV0RW5jcnlwdGlvbigpOiBQcm9taXNlPHsgcHJvdmlkZXI6IEtleVByb3ZpZGVyIHwgbnVsbDsgbW9kZTogJ2VudicgfCAna21zJyB9PiB7XG4gIGNvbnN0IGtleUlkID0gcHJvY2Vzcy5lbnYuU0VDUkVUX0VOQ1JZUFRJT05fS01TX0tFWV9JRDtcbiAgY29uc3QgY2lwaGVydGV4dCA9IHByb2Nlc3MuZW52LlNFQ1JFVF9FTkNSWVBUSU9OX0tNU19DSVBIRVJURVhUO1xuXG4gIC8vIE5PIEtNUyBDT05GSUdVUkVEOiBkZWxpYmVyYXRlbHkgdG91Y2ggbm90aGluZyBhbmQgcmVwb3J0IGBudWxsYC5cbiAgLy9cbiAgLy8gYEVudktleVByb3ZpZGVyYCBuZWVkcyBubyB3YXJtaW5nLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIGdhaW4gaGVyZSDigJQgYW5kXG4gIC8vIGNvbnN0cnVjdGluZyBvbmUgZWFnZXJseSB3b3VsZCBtYWtlIGBTRUNSRVRfRU5DUllQVElPTl9LRVlgIGEgaGFyZCBCT09UXG4gIC8vIHJlcXVpcmVtZW50IGZvciBldmVyeSBzZXJ2aWNlIHRoYXQgY2FsbHMgdGhpcywgaW5jbHVkaW5nIGRldiBhbmQgdGVzdCBydW5zXG4gIC8vIHRoYXQgbmV2ZXIgZW5jcnlwdCBhIHNlY3JldC4gVGhlIGxhenkgZGVmYXVsdCBzdGF5cyBleGFjdGx5IGFzIGl0IHdhczogdGhlXG4gIC8vIGZpcnN0IGBlbmNyeXB0U2VjcmV0YC9gZGVjcnlwdFNlY3JldGAgYnVpbGRzIGl0LCBhbmQgYSBtaXNzaW5nIG1hc3RlciB0aHJvd3NcbiAgLy8gdGhlcmUuIENhbGxlcnMgdGhhdCBuZWVkIGFuIGluc3RhbmNlICh0aGUgcGVyLW9yZyBmYWxsYmFjaykgY29uc3RydWN0IHRoZWlyXG4gIC8vIG93biBgRW52S2V5UHJvdmlkZXJgIHdoZW4gdGhpcyByZXR1cm5zIG51bGwuXG4gIGlmICgha2V5SWQgfHwgIWNpcGhlcnRleHQpIHJldHVybiB7IHByb3ZpZGVyOiBudWxsLCBtb2RlOiAnZW52JyB9O1xuXG4gIGNvbnN0IHByb3ZpZGVyID0gbmV3IEttc0tleVByb3ZpZGVyKHsga2V5SWQsIGNpcGhlcnRleHRCYXNlNjQ6IGNpcGhlcnRleHQgfSk7XG4gIGF3YWl0IHByb3ZpZGVyLndhcm11cCgpO1xuICBzZXRLZXlQcm92aWRlcihwcm92aWRlcik7XG4gIGF3YWl0IGluaXRQcmV2aW91c1Byb3ZpZGVyKCk7XG4gIHJldHVybiB7IHByb3ZpZGVyLCBtb2RlOiAna21zJyB9O1xufVxuXG4vKiogUmVzZXQgdGhlIGNhY2hlZCBkZWZhdWx0IChhbmQgcHJldmlvdXMpIHByb3ZpZGVyICBmb3IgdGVzdHMgdGhhdCBtdXRhdGUgYHByb2Nlc3MuZW52YC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldERlZmF1bHRLZXlQcm92aWRlcigpOiB2b2lkIHsgZGVmYXVsdFByb3ZpZGVyID0gbnVsbDsgcHJldmlvdXNQcm92aWRlciA9IHVuZGVmaW5lZDsgfVxuXG4vKiogUmVwbGFjZSB0aGUgZGVmYXVsdCBwcm92aWRlciAgc2VydmljZXMgdGhhdCBvcHQgaW50byBLTVMgY2FsbCB0aGlzXG4gKiBvbmNlIGF0IHN0YXJ0dXAgd2l0aCBhIHdhcm1lZC11cCBgS21zS2V5UHJvdmlkZXJgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEtleVByb3ZpZGVyKHByb3ZpZGVyOiBLZXlQcm92aWRlcik6IHZvaWQgeyBkZWZhdWx0UHJvdmlkZXIgPSBwcm92aWRlcjsgfVxuXG4vKiogUGVyLW9yZyBLTVMgY29uZmlnIHRoZSBvcGVyYXRvciBzdXBwbGllcy4gVGhlIGBrZXlJZGAgaWRlbnRpZmllcyB0aGVcbiAqICBLTVMgQ01LIHRvIGNhbGwgRGVjcnlwdCBvbjsgYGNpcGhlcnRleHRCYXNlNjRgIGlzIHRoZSB3cmFwcGVkIDMyLWJ5dGVcbiAqICBtYXN0ZXIgZ2VuZXJhdGVkIGJ5IGBhd3Mga21zIGVuY3J5cHRgIGFnYWluc3QgdGhhdCBrZXkuICovXG5leHBvcnQgaW50ZXJmYWNlIFBlck9yZ0ttc0NvbmZpZyB7XG4gIGtleUlkOiBzdHJpbmc7XG4gIGNpcGhlcnRleHRCYXNlNjQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBc3luYyByZXNvbHZlciB0aGF0IG1hcHMgYW4gb3JnIGlkIHRvIGl0cyBLTVMgY29uZmlnLiBSZXR1cm5zIGBudWxsYCB3aGVuXG4gKiB0aGUgb3JnIGhhcyBubyBwZXItb3JnIGNvbmZpZyDigJQgdGhlIHByb3ZpZGVyIHRoZW4gZmFsbHMgYmFjayB0byB0aGVcbiAqIGBmYWxsYmFja2AgcHJvdmlkZXIgc3VwcGxpZWQgYXQgY29uc3RydWN0aW9uICh1c3VhbGx5IGFuIEVudktleVByb3ZpZGVyXG4gKiBvciBhIGRlZmF1bHQgS21zS2V5UHJvdmlkZXIpLlxuICovXG5leHBvcnQgdHlwZSBQZXJPcmdLbXNSZXNvbHZlciA9IChvcmdJZDogc3RyaW5nKSA9PiBQcm9taXNlPFBlck9yZ0ttc0NvbmZpZyB8IG51bGw+O1xuXG4vKipcbiAqIFBlci1vcmcgS01TLWJhY2tlZCBLZXlQcm92aWRlci4gVGhlIGJsYXN0IHJhZGl1cyBvZiBhIEtNUyBrZXkgY29tcHJvbWlzZVxuICogaXMgb25lIG9yZyBpbnN0ZWFkIG9mIGV2ZXJ5IG9yZyB1bmRlciBhIHNoYXJlZCBtYXN0ZXIuXG4gKlxuICogRWFjaCBvcmcgaGFzIGl0cyBvd24gS01TIENNSyArIGl0cyBvd24gd3JhcHBlZCBtYXN0ZXIgKHN0b3JlZCBpbiBNb25nb1xuICogdmlhIHRoZSBvcGVyYXRvcidzIHNldHVwIHNjcmlwdCkuIE9uIGZpcnN0IGVuY3J5cHQvZGVjcnlwdCBmb3IgYW4gb3JnLFxuICogdGhlIHByb3ZpZGVyOlxuICogICAxLiBDYWxscyB0aGUgcmVzb2x2ZXIgdG8gZmV0Y2ggdGhlIG9yZydzIEtNUyBjb25maWcuXG4gKiAgIDIuIENhbGxzIGBrbXM6RGVjcnlwdGAgdG8gcmVjb3ZlciB0aGUgMzItYnl0ZSBtYXN0ZXIuXG4gKiAgIDMuIENhY2hlcyB0aGUgcmVjb3ZlcmVkIG1hc3RlciBpbi1tZW1vcnkgZm9yIHRoZSBwcm9jZXNzIGxpZmV0aW1lLlxuICogICA0LiBIS0RGLWRlcml2ZXMgcGVyLWNhbGwgZnJvbSB0aGF0IG1hc3RlciArIHRoZSBvcmcgaWQgc2FsdC5cbiAqXG4gKiBCbG9icyBlbmNyeXB0ZWQgYnkgdGhpcyBwcm92aWRlciBjYXJyeSBga2lkID0gPGttcy1rZXktaWQ+YCBzbyB0aGVcbiAqIGRlY3J5cHQgcGF0aCBkZXRlY3RzIGEgc3RhbGUgY29uZmlnIChvcGVyYXRvciByb3RhdGVkIHRoZSBrZXkgYnV0XG4gKiBleGlzdGluZyByb3dzIHdlcmVuJ3QgcmUtZW5jcnlwdGVkKSBCRUZPUkUgQUVTLUdDTSB0aHJvd3MgYW4gb3BhcXVlXG4gKiBhdXRoZW50aWNhdGlvbi10YWcgZXJyb3IuXG4gKlxuICogT3JncyB3aXRob3V0IHBlci1vcmcgY29uZmlnIGZhbGwgdGhyb3VnaCB0byB0aGUgYGZhbGxiYWNrYCBwcm92aWRlciDigJRcbiAqIG1peGVkLW1vZGUgZGVwbG95bWVudHMgd2hlcmUgc29tZSBvcmdzIGhhdmUgS01TIGlzb2xhdGlvbiBhbmQgb3RoZXJzXG4gKiBzdGF5IG9uIHRoZSBzaGFyZWQgbWFzdGVyIGFyZSBleHBsaWNpdGx5IHN1cHBvcnRlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFBlck9yZ0ttc0tleVByb3ZpZGVyIGltcGxlbWVudHMgS2V5UHJvdmlkZXIge1xuICAvKiogQ2FjaGVkIHBlci1vcmcgbWFzdGVyIGtleXMsIGtleWVkIGJ5IG9yZ0lkLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG1hc3RlcnMgPSBuZXcgTWFwPHN0cmluZywgeyBrZXk6IEJ1ZmZlcjsga2lkOiBzdHJpbmcgfT4oKTtcbiAgLyoqIFJlc29sdmVkIHBlci1vcmcgY29uZmlncyBjYWNoZWQgZm9yIHRoZSBwcm9jZXNzIGxpZmV0aW1lLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ3MgPSBuZXcgTWFwPHN0cmluZywgUGVyT3JnS21zQ29uZmlnPigpO1xuICAvKiogSW4tZmxpZ2h0IHJlc29sdmVyIHByb21pc2VzIHNvIGNvbmN1cnJlbnQgZmlyc3QtdG91Y2ggY2FsbGVycyBzaGFyZSBvbmUgS01TIERlY3J5cHQuXG4gICAqICBSZXNvbHZlcyB0byBgbnVsbGAgZm9yIG9yZ3Mgd2l0aCBubyBwZXItb3JnIGNvbmZpZyDigJQgY2FsbGVyIHRyZWF0cyBudWxsIGFzXG4gICAqICBcImZhbGwgdGhyb3VnaCB0byB0aGUgZmFsbGJhY2sgcHJvdmlkZXJcIiwgc2FtZSBhcyBhIGNvbGQgY2FjaGUgbWlzcy4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBpbkZsaWdodCA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPHsga2V5OiBCdWZmZXI7IGtpZDogc3RyaW5nIH0gfCBudWxsPj4oKTtcbiAgLyoqIE9yZ3MgdGhlIHJlc29sdmVyIGhhcyBQUk9WRU4gaGF2ZSBubyBwZXItb3JnIGNvbmZpZyDigJQgdGhlIGZhbGxiYWNrIHByb3ZpZGVyXG4gICAqICBpcyB0aGUgY29ycmVjdCBhbnN3ZXIgZm9yIHRoZXNlLCBhbmQgYGRlcml2ZUtleWAgbWF5IHNlcnZlIHRoZW1cbiAgICogIHN5bmNocm9ub3VzbHkuIERpc3RpbmN0IGZyb20gXCJub3QgeWV0IHJlc29sdmVkXCIsIHdoaWNoIG11c3Qgbm90IGd1ZXNzLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc29sdmVkTm9QZXJPcmdDb25maWcgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgLyoqIFByb3ZpZGVyIHVzZWQgZm9yIG9yZ3MgdGhhdCBoYXZlIG5vIHBlci1vcmcgY29uZmlnLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGZhbGxiYWNrOiBLZXlQcm92aWRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSByZXNvbHZlcjogUGVyT3JnS21zUmVzb2x2ZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnaW9uPzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGVuZHBvaW50Pzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG9wdHM6IHtcbiAgICByZXNvbHZlcjogUGVyT3JnS21zUmVzb2x2ZXI7XG4gICAgZmFsbGJhY2s6IEtleVByb3ZpZGVyO1xuICAgIHJlZ2lvbj86IHN0cmluZztcbiAgICBlbmRwb2ludD86IHN0cmluZztcbiAgfSkge1xuICAgIHRoaXMucmVzb2x2ZXIgPSBvcHRzLnJlc29sdmVyO1xuICAgIHRoaXMuZmFsbGJhY2sgPSBvcHRzLmZhbGxiYWNrO1xuICAgIHRoaXMucmVnaW9uID0gb3B0cy5yZWdpb24gPz8gcHJvY2Vzcy5lbnYuQVdTX1JFR0lPTiA/PyBwcm9jZXNzLmVudi5BV1NfREVGQVVMVF9SRUdJT047XG4gICAgdGhpcy5lbmRwb2ludCA9IG9wdHMuZW5kcG9pbnQgPz8gcHJvY2Vzcy5lbnYuQVdTX0tNU19FTkRQT0lOVDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jIGRlcml2ZS4gT25seSBjb3JyZWN0IGZvciBhbiBvcmcgd2hvc2UgY29uZmlnIGhhcyBhbHJlYWR5IGJlZW5cbiAgICogUkVTT0xWRUQg4oCUIGVpdGhlciBpdCBoYXMgYSBwZXItb3JnIG1hc3RlciAodXNlIGl0KSBvciBpdCBwcm92YWJseSBoYXMgbm9cbiAgICogcGVyLW9yZyBjb25maWcgKHRoZSBmYWxsYmFjayBpcyB0aGVuIHRoZSByaWdodCBhbnN3ZXIpLlxuICAgKlxuICAgKiBGb3IgYW4gVU5SRVNPTFZFRCBvcmcgdGhpcyBUSFJPV1MgcmF0aGVyIHRoYW4gZ3Vlc3NpbmcuIEZhbGxpbmcgdGhyb3VnaCB0b1xuICAgKiB0aGUgZmFsbGJhY2sgd291bGQgc2lsZW50bHkgZW5jcnlwdCB0aGF0IG9yZydzIHNlY3JldHMgdW5kZXIgdGhlIFNIQVJFRFxuICAgKiBtYXN0ZXIgYW5kIOKAlCBiZWNhdXNlIGBraWRGb3JgIGFsc28gcmV0dXJucyB1bmRlZmluZWQsIHNvIHRoZVxuICAgKiBib3RoLWtpZHMtcHJlc2VudCBtaXNtYXRjaCBndWFyZCBjb3VsZCBuZXZlciBmaXJlIOKAlCBsZWF2ZSB0aGVtIHBlcm1hbmVudGx5XG4gICAqIHVuZGVjcnlwdGFibGUgb25jZSB0aGUgb3JnIHdhcm1lZCAoYGRlY2lwaGVyLmZpbmFsKClgIHRocm93cyBhbiBvcGFxdWVcbiAgICogYXV0aC10YWcgZXJyb3Igd2l0aCBubyBkaWFnbm9zdGljKS4gRmFpbGluZyBsb3VkIGhlcmUgbWF0Y2hlc1xuICAgKiBgS21zS2V5UHJvdmlkZXIuZGVyaXZlS2V5YCwgd2hpY2ggcmVmdXNlcyB0byB3b3JrIGNvbGQuXG4gICAqXG4gICAqIGBlbmNyeXB0U2VjcmV0YC9gZGVjcnlwdFNlY3JldGAgYXJlIGFzeW5jIGFuZCBhd2FpdCBgZGVyaXZlS2V5QXN5bmNgLCBzb1xuICAgKiB0aGV5IHJlc29sdmUgdGhlIG9yZyBmaXJzdCBhbmQgbmV2ZXIgaGl0IHRoaXMgcGF0aDsgaXQgaXMgdGhlIGJhY2tzdG9wIGZvclxuICAgKiBhIGNhbGxlciB0aGF0IHJlYWNoZXMgZm9yIHRoZSBzeW5jIEFQSSBkaXJlY3RseS5cbiAgICovXG4gIGRlcml2ZUtleShvcmdJZDogc3RyaW5nKTogQnVmZmVyIHtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLm1hc3RlcnMuZ2V0KG9yZ0lkKTtcbiAgICBpZiAoIWNhY2hlZCkge1xuICAgICAgaWYgKHRoaXMucmVzb2x2ZWROb1Blck9yZ0NvbmZpZy5oYXMob3JnSWQpKSByZXR1cm4gdGhpcy5mYWxsYmFjay5kZXJpdmVLZXkob3JnSWQpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCBgUGVyT3JnS21zS2V5UHJvdmlkZXIgaGFzIG5vdCByZXNvbHZlZCBvcmcgJHtvcmdJZH0uIGBcbiAgICAgICAgKyAnQ2FsbCBgYXdhaXQgcHJvdmlkZXIuZW5zdXJlV2FybWVkKG9yZ0lkKWAgKG9yIHVzZSB0aGUgYXN5bmMgZW5jcnlwdFNlY3JldC9kZWNyeXB0U2VjcmV0KSAnXG4gICAgICAgICsgJ2JlZm9yZSBkZXJpdmluZyBhIGtleSDigJQgZ3Vlc3NpbmcgdGhlIHNoYXJlZCBtYXN0ZXIgd291bGQgd3JpdGUgc2VjcmV0cyB0aGF0IGNhbm5vdCBiZSBkZWNyeXB0ZWQgbGF0ZXIuJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGRlcml2ZWQgPSBoa2RmU3luYygnc2hhMjU2JywgY2FjaGVkLmtleSwgQnVmZmVyLmZyb20ob3JnSWQsICd1dGY4JyksICdzZWNyZXRzLXYxJywgMzIpO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShkZXJpdmVkKTtcbiAgfVxuXG4gIGFzeW5jIGRlcml2ZUtleUFzeW5jKG9yZ0lkOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlV2FybWVkKG9yZ0lkKTtcbiAgICByZXR1cm4gdGhpcy5kZXJpdmVLZXkob3JnSWQpO1xuICB9XG5cbiAga2lkRm9yKG9yZ0lkOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMubWFzdGVycy5nZXQob3JnSWQpO1xuICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQua2lkO1xuICAgIC8vIE9ubHkgc3BlYWsgZm9yIGFuIG9yZyB3aG9zZSBjb25maWcgaXMgcmVzb2x2ZWQ7IGFuIHVucmVzb2x2ZWQgb3JnIGhhcyBub1xuICAgIC8vIG1lYW5pbmdmdWwga2lkLCBhbmQgY2xhaW1pbmcgb25lIHdvdWxkIGRlZmVhdCB0aGUgbWlzbWF0Y2ggZ3VhcmQuXG4gICAgaWYgKHRoaXMucmVzb2x2ZWROb1Blck9yZ0NvbmZpZy5oYXMob3JnSWQpKSByZXR1cm4gdGhpcy5mYWxsYmFjay5raWRGb3I/LihvcmdJZCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBvcmcncyBLTVMgY29uZmlnLCBjYWxsIERlY3J5cHQsIGNhY2hlIHRoZSBtYXN0ZXIuIFN1YnNlcXVlbnRcbiAgICogY2FsbHMgZm9yIHRoZSBzYW1lIG9yZyBhcmUgbm8tb3BzLiBDb25jdXJyZW50IGNhbGxlcnMgc2hhcmUgdGhlIGluLWZsaWdodFxuICAgKiBEZWNyeXB0IHByb21pc2UuXG4gICAqXG4gICAqIFJldHVybnMgc2lsZW50bHkgd2hlbiB0aGUgb3JnIGhhcyBubyBwZXItb3JnIGNvbmZpZyDigJQgdGhlIGZhbGxiYWNrXG4gICAqIHByb3ZpZGVyIGhhbmRsZXMgdGhvc2Ugb3Jncy5cbiAgICovXG4gIGFzeW5jIGVuc3VyZVdhcm1lZChvcmdJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMubWFzdGVycy5oYXMob3JnSWQpKSByZXR1cm47XG4gICAgLy8gSW5zdGFsbCB0aGUgaW4tZmxpZ2h0IHByb21pc2UgU1lOQ0hST05PVVNMWSBiZWZvcmUgeWllbGRpbmcgc28gY29uY3VycmVudFxuICAgIC8vIGNhbGxlcnMgZmluZCBpdCBvbiB0aGUgc2Vjb25kLWFuZC1sYXRlciBwYXNzZXMuIEF3YWl0aW5nIHRoZSByZXNvbHZlclxuICAgIC8vIGJlZm9yZSBwb3B1bGF0aW5nIHRoZSBtYXAgaXMgdGhlIGJ1ZyB0aGF0IGxldHMgYSBQcm9taXNlLmFsbCBvZiAzXG4gICAgLy8gY2FsbGVycyBmaXJlIDMgS01TIERlY3J5cHRzLlxuICAgIGxldCBwcm9taXNlID0gdGhpcy5pbkZsaWdodC5nZXQob3JnSWQpO1xuICAgIGlmICghcHJvbWlzZSkge1xuICAgICAgcHJvbWlzZSA9IHRoaXMucmVzb2x2ZUFuZERlY3J5cHQob3JnSWQpO1xuICAgICAgdGhpcy5pbkZsaWdodC5zZXQob3JnSWQsIHByb21pc2UpO1xuICAgICAgdm9pZCBwcm9taXNlLmZpbmFsbHkoKCkgPT4geyBpZiAodGhpcy5pbkZsaWdodC5nZXQob3JnSWQpID09PSBwcm9taXNlKSB0aGlzLmluRmxpZ2h0LmRlbGV0ZShvcmdJZCk7IH0pO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9taXNlO1xuICAgIGlmIChyZXN1bHQpIHRoaXMubWFzdGVycy5zZXQob3JnSWQsIHJlc3VsdCk7XG4gICAgLy8gUmVtZW1iZXIgdGhlIE5FR0FUSVZFIG91dGNvbWUgdG9vLCBzbyB0aGUgc3luYyBgZGVyaXZlS2V5YCBjYW4gdGVsbFxuICAgIC8vIFwibm8gcGVyLW9yZyBjb25maWcsIGZhbGxiYWNrIGlzIGNvcnJlY3RcIiBmcm9tIFwibm90IHJlc29sdmVkIHlldFwiLlxuICAgIGVsc2UgdGhpcy5yZXNvbHZlZE5vUGVyT3JnQ29uZmlnLmFkZChvcmdJZCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc29sdmVBbmREZWNyeXB0KG9yZ0lkOiBzdHJpbmcpOiBQcm9taXNlPHsga2V5OiBCdWZmZXI7IGtpZDogc3RyaW5nIH0gfCBudWxsPiB7XG4gICAgbGV0IGNmZyA9IHRoaXMuY29uZmlncy5nZXQob3JnSWQpO1xuICAgIGlmICghY2ZnKSB7XG4gICAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHRoaXMucmVzb2x2ZXIob3JnSWQpO1xuICAgICAgaWYgKCFyZXNvbHZlZCkgcmV0dXJuIG51bGw7IC8vIG5vIHBlci1vcmcgY29uZmlnIOKGkiBjYWxsZXIgdXNlcyBmYWxsYmFja1xuICAgICAgY2ZnID0gcmVzb2x2ZWQ7XG4gICAgICB0aGlzLmNvbmZpZ3Muc2V0KG9yZ0lkLCBjZmcpO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBhd2FpdCB0aGlzLmZldGNoQW5kRGVjcnlwdChjZmcpO1xuICAgIHJldHVybiB7IGtleSwga2lkOiBjZmcua2V5SWQgfTtcbiAgfVxuXG4gIHByaXZhdGUgZmV0Y2hBbmREZWNyeXB0KGNmZzogUGVyT3JnS21zQ29uZmlnKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICByZXR1cm4ga21zRGVjcnlwdDMyKGNmZy5rZXlJZCwgY2ZnLmNpcGhlcnRleHRCYXNlNjQsIHRoaXMucmVnaW9uLCB0aGlzLmVuZHBvaW50KTtcbiAgfVxuXG4gIC8qKiBFdmljdCBhIGNhY2hlZCBwZXItb3JnIG1hc3Rlci4gVXNlIGFmdGVyIGEga2V5IHJvdGF0aW9uIHNvIHRoZSBuZXh0XG4gICAqICB0b3VjaCByZS1mZXRjaGVzIHRoZSBuZXcgd3JhcHBlZCBtYXN0ZXIgZnJvbSB0aGUgcmVzb2x2ZXIuICovXG4gIGV2aWN0KG9yZ0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm1hc3RlcnMuZGVsZXRlKG9yZ0lkKTtcbiAgICB0aGlzLmNvbmZpZ3MuZGVsZXRlKG9yZ0lkKTtcbiAgICAvLyBBbHNvIGZvcmdldCBhIE5FR0FUSVZFIHJlc29sdXRpb24sIG9yIGFuIG9yZyB0aGF0IGdhaW5zIGEgcGVyLW9yZyBjb25maWdcbiAgICAvLyBhZnRlciBiZWluZyByZXNvbHZlZCBhcyBcIm5vIGNvbmZpZ1wiIHdvdWxkIGtlZXAgdXNpbmcgdGhlIHNoYXJlZCBtYXN0ZXIuXG4gICAgdGhpcy5yZXNvbHZlZE5vUGVyT3JnQ29uZmlnLmRlbGV0ZShvcmdJZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZXJpdmUgdGhlIGtleSBmb3IgYG9yZ0lkYCwgZ2l2aW5nIHRoZSBwcm92aWRlciBhIGNoYW5jZSB0byBkbyBJL08gZmlyc3QuXG4gKlxuICogVGhpcyBpcyB3aHkgYGVuY3J5cHRTZWNyZXRgL2BkZWNyeXB0U2VjcmV0YCBhcmUgYXN5bmM6IGBQZXJPcmdLbXNLZXlQcm92aWRlcmBcbiAqIG5lZWRzIG9uZSBLTVMgRGVjcnlwdCB0aGUgZmlyc3QgdGltZSBpdCBzZWVzIGFuIG9yZywgYW5kIGRlcml2aW5nXG4gKiBzeW5jaHJvbm91c2x5IGJlZm9yZSB0aGF0IHJlc29sdmVzIHdvdWxkIHNpbGVudGx5IGZhbGwgYmFjayB0byB0aGUgc2hhcmVkXG4gKiBtYXN0ZXIgYW5kIHByb2R1Y2Ugc2VjcmV0cyB0aGF0IGNhbm5vdCBiZSBkZWNyeXB0ZWQgYWZ0ZXJ3YXJkcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVyaXZlS2V5Rm9yKHByb3ZpZGVyOiBLZXlQcm92aWRlciwgb3JnSWQ6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiB7XG4gIHJldHVybiBwcm92aWRlci5kZXJpdmVLZXlBc3luYyA/IHByb3ZpZGVyLmRlcml2ZUtleUFzeW5jKG9yZ0lkKSA6IHByb3ZpZGVyLmRlcml2ZUtleShvcmdJZCk7XG59XG5cbi8qKlxuICogRW5jcnlwdCBhIHBsYWludGV4dCBzdHJpbmcgZm9yIHN0b3JhZ2UuIFJldHVybnMgYW4gYEVuY3J5cHRlZEJsb2JgIHRoYXRcbiAqIGNhbiBiZSBKU09OLXNlcmlhbGl6ZWQgaW50byB0aGUgdW5kZXJseWluZyBjb2x1bW4gLyBNb25nbyBkb2N1bWVudC5cbiAqXG4gKiBFbXB0eSBzdHJpbmdzIHJvdW5kLXRyaXAgYXMgYG51bGxgIHNvIHRoZSBjYWxsaW5nIG1vZGVsIGxheWVyIGNhbiB0cmVhdFxuICogXCJubyBzZWNyZXQgc2V0XCIgaWRlbnRpY2FsbHkgdG8gXCJmaWVsZCBhYnNlbnRcIi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuY3J5cHRTZWNyZXQoIHBsYWludGV4dDogc3RyaW5nLFxuICBvcmdJZDogc3RyaW5nLFxuICBwcm92aWRlcjogS2V5UHJvdmlkZXIgPSBnZXREZWZhdWx0UHJvdmlkZXIoKSxcbik6IFByb21pc2U8RW5jcnlwdGVkQmxvYj4ge1xuICBpZiAoIXBsYWludGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUmVmdXNpbmcgdG8gZW5jcnlwdCBlbXB0eSBzdHJpbmc7IGNhbGxlciBzaG91bGQgc3RvcmUgbnVsbCBpbnN0ZWFkJyk7XG4gIH1cbiAgLy8gUmVzb2x2ZSAoYW5kIHdhcm0pIHRoZSBvcmcgQkVGT1JFIHJlYWRpbmcgYGtpZEZvcmAgYmVsb3csIHNvIGEgcGVyLW9yZyBLTVNcbiAgLy8gYmxvYiBpcyBhbHdheXMgc3RhbXBlZCB3aXRoIHRoZSBrZXkgaXQgd2FzIGFjdHVhbGx5IGVuY3J5cHRlZCB1bmRlci5cbiAgY29uc3Qga2V5ID0gYXdhaXQgZGVyaXZlS2V5Rm9yKHByb3ZpZGVyLCBvcmdJZCk7XG4gIGNvbnN0IGl2ID0gcmFuZG9tQnl0ZXMoMTIpO1xuICBjb25zdCBjaXBoZXIgPSBjcmVhdGVDaXBoZXJpdignYWVzLTI1Ni1nY20nLCBrZXksIGl2KTtcbiAgY29uc3QgZW5jID0gQnVmZmVyLmNvbmNhdChbY2lwaGVyLnVwZGF0ZShwbGFpbnRleHQsICd1dGY4JyksIGNpcGhlci5maW5hbCgpXSk7XG4gIGNvbnN0IHRhZyA9IGNpcGhlci5nZXRBdXRoVGFnKCk7XG4gIC8vIFBlck9yZ0ttc0tleVByb3ZpZGVyIHRhZ3MgYmxvYnMgd2l0aCB0aGUgS01TIGtleSBpZCB1c2VkIHNvIHRoZVxuICAvLyBkZWNyeXB0IHBhdGggY2FuIHJlZnVzZSB0byBvcGVyYXRlIGlmIHRoZSBvcGVyYXRvciBsYXRlciBzd2FwcyBpbiBhXG4gIC8vIGRpZmZlcmVudCBwZXItb3JnIGNvbmZpZyAoYSBtaXNjb25maWd1cmVkIHN3YXAgc2hvdWxkbid0IHNpbGVudGx5XG4gIC8vIGFjY2VwdCBhIHN0YWxlIGJsb2IgaXQgY2FuJ3QgdmVyaWZ5IGFnYWluc3QgdGhlIHJpZ2h0IENNSykuXG4gIGNvbnN0IGtpZCA9IHByb3ZpZGVyLmtpZEZvcj8uKG9yZ0lkKTtcbiAgcmV0dXJuIHtcbiAgICBhbGc6ICdhZXMtMjU2LWdjbS12MScsXG4gICAgaXY6IGl2LnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAvLyBHQ00gdGFnIE1VU1QgdHJhdmVsIHdpdGggdGhlIGNpcGhlcnRleHQgb3IgYGRlY3J5cHRTZWNyZXRgIGNhbid0XG4gICAgLy8gdmVyaWZ5IGludGVncml0eSAgY29uY2F0ZW5hdGUgc28gdGhlIG9uLWRpc2sgc2hhcGUgaXMgb25lIGZpZWxkLlxuICAgIGNpcGhlcnRleHQ6IEJ1ZmZlci5jb25jYXQoW2VuYywgdGFnXSkudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgIC4uLihraWQgIT09IHVuZGVmaW5lZCA/IHsga2lkIH0gOiB7fSksXG4gIH07XG59XG5cbi8qKlxuICogRGVjcnlwdCBhbiBgRW5jcnlwdGVkQmxvYmAgd3JpdHRlbiBieSBgZW5jcnlwdFNlY3JldGAuIFRocm93cyBvbiAqIC0gdW5rbm93biBgYWxnYCAoZm9yY2VzIGFuIGV4cGxpY2l0IG1pZ3JhdGlvbiB3aGVuIHRoZSBmb3JtYXQgY2hhbmdlcylcbiAqIC0gd3Jvbmcgb3JnSWQgKEhLREYgYmluZGluZyBtaXNtYXRjaCBmYWlscyB0aGUgYXV0aCB0YWcpXG4gKiAtIHRhbXBlcmVkIGNpcGhlcnRleHQgKEdDTSBhdXRoIHRhZyBjaGVjayBmYWlscylcbiAqXG4gKiBDYWxsZXJzIGhhbmRsZSB0aGUgdGhyb3cgIG1hc2tpbmcgdGhlIGZhaWx1cmUgYXMgYG51bGxgIHdvdWxkIGhpZGVcbiAqIHNpbGVudCBjb3JydXB0aW9uIC8gd3Jvbmctb3JnIHJlYWRzLlxuICpcbiAqIGBwcmV2aW91c2AgKGRlZmF1bHQ6IGBTRUNSRVRfRU5DUllQVElPTl9LRVlfUFJFVklPVVNgLCB3aGVuIHNldCkgaXMgdHJpZWRcbiAqIG9ubHkgYWZ0ZXIgdGhlIHByaW1hcnkga2V5IGZhaWxzLCBhbmQgb25seSBmb3Iga2lkLWxlc3MgYmxvYnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWNyeXB0U2VjcmV0KCBibG9iOiBFbmNyeXB0ZWRCbG9iLFxuICBvcmdJZDogc3RyaW5nLFxuICBwcm92aWRlcjogS2V5UHJvdmlkZXIgPSBnZXREZWZhdWx0UHJvdmlkZXIoKSxcbiAgcHJldmlvdXM6IEtleVByb3ZpZGVyIHwgbnVsbCA9IGdldFByZXZpb3VzUHJvdmlkZXIoKSxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChibG9iLmFsZyAhPT0gJ2Flcy0yNTYtZ2NtLXYxJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZW5jcnlwdGlvbiBhbGc6ICR7YmxvYi5hbGd9YCk7XG4gIH1cbiAgLy8gV2FybSBmaXJzdDogYGtpZEZvcmAgYW5kIGBkZXJpdmVLZXlgIGJlbG93IG11c3QgYm90aCBzcGVhayBmb3IgdGhlIG9yZydzXG4gIC8vIHJlYWwgY29uZmlnLCBvciB0aGUgbWlzbWF0Y2ggZ3VhcmQgc2lsZW50bHkgbm8tb3BzLlxuICBjb25zdCBrZXkgPSBhd2FpdCBkZXJpdmVLZXlGb3IocHJvdmlkZXIsIG9yZ0lkKTtcbiAgLy8gSWYgYm90aCB0aGUgcHJvdmlkZXIgQU5EIHRoZSBibG9iIHJlcG9ydCBhIGtpZCwgdGhleSBtdXN0IG1hdGNoLlxuICAvLyBNaXNtYXRjaCB1c3VhbGx5IG1lYW5zIGFuIG9wZXJhdG9yIHJvdGF0ZWQvcmVwbGFjZWQgYW4gb3JnJ3MgS01TXG4gIC8vIGNvbmZpZyBhbmQgaXMgbm93IHJlYWRpbmcgYSBibG9iIGVuY3J5cHRlZCB1bmRlciB0aGUgT0xEIGtleSDigJRcbiAgLy8gZmFpbGluZyBsb3VkIGhlcmUgYmVhdHMgbGV0dGluZyBBRVMtR0NNIHRocm93IGFuIG9wYXF1ZSBhdXRoLXRhZyBlcnJvci5cbiAgY29uc3QgcHJvdmlkZXJLaWQgPSBwcm92aWRlci5raWRGb3I/LihvcmdJZCk7XG4gIGlmIChwcm92aWRlcktpZCAhPT0gdW5kZWZpbmVkICYmIGJsb2Iua2lkICE9PSB1bmRlZmluZWQgJiYgcHJvdmlkZXJLaWQgIT09IGJsb2Iua2lkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBLTVMga2V5IGlkIG1pc21hdGNoOiBibG9iIHdhcyBlbmNyeXB0ZWQgdW5kZXIgJHtibG9iLmtpZH0sIGN1cnJlbnQgcHJvdmlkZXIgdXNlcyAke3Byb3ZpZGVyS2lkfSBmb3Igb3JnICR7b3JnSWR9YCk7XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjcnlwdFdpdGhLZXkoYmxvYiwga2V5KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gTWFzdGVyLWtleSByb3RhdGlvbiB3aW5kb3c6IHJldHJ5IHVuZGVyIFNFQ1JFVF9FTkNSWVBUSU9OX0tFWV9QUkVWSU9VUy5cbiAgICAvLyBPbmx5IGZvciBhIGtpZC1sZXNzIGJsb2IgKHRoZSBlbnYta2V5ZWQgc2hhcGUpIOKAlCBhIHBlci1vcmcgS01TIGJsb2IgaXNcbiAgICAvLyBib3VuZCB0byBpdHMgQ01LIGFuZCB0aGUgc2hhcmVkIHByZXZpb3VzIG1hc3RlciBjYW4gbmV2ZXIgb3BlbiBpdC4gVGhlXG4gICAgLy8gT1JJR0lOQUwgZXJyb3Igc3VyZmFjZXMgd2hlbiB0aGUgcHJldmlvdXMga2V5IGZhaWxzIHRvbywgc28gYSB0YW1wZXJlZCBvclxuICAgIC8vIHdyb25nLW9yZyBibG9iIHN0aWxsIGZhaWxzIGxvdWQgZXhhY3RseSBhcyBiZWZvcmUuXG4gICAgaWYgKHByZXZpb3VzICYmIGJsb2Iua2lkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBkZWNyeXB0V2l0aEtleShibG9iLCBhd2FpdCBkZXJpdmVLZXlGb3IocHJldmlvdXMsIG9yZ0lkKSk7XG4gICAgICB9IGNhdGNoIHsgLyogZmFsbCB0aHJvdWdoIHRvIHRoZSBwcmltYXJ5IGVycm9yICovIH1cbiAgICB9XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbi8qKiBBRVMtMjU2LUdDTSBvcGVuIG9mIGEgYmxvYiB1bmRlciBvbmUgZGVyaXZlZCBrZXkuIFRocm93cyBvbiBhbnkgYXV0aC10YWcgZmFpbHVyZS4gKi9cbmZ1bmN0aW9uIGRlY3J5cHRXaXRoS2V5KGJsb2I6IEVuY3J5cHRlZEJsb2IsIGtleTogQnVmZmVyKTogc3RyaW5nIHtcbiAgY29uc3QgaXYgPSBCdWZmZXIuZnJvbShibG9iLml2LCAnYmFzZTY0Jyk7XG4gIGNvbnN0IGFsbCA9IEJ1ZmZlci5mcm9tKGJsb2IuY2lwaGVydGV4dCwgJ2Jhc2U2NCcpO1xuICAvLyBTcGxpdCBvZmYgdGhlIDE2LWJ5dGUgYXV0aCB0YWcgYXBwZW5kZWQgaW4gZW5jcnlwdFNlY3JldC4gQW55IHRhbXBlcmluZ1xuICAvLyAgdG8gZWl0aGVyIHRoZSBjaXBoZXJ0ZXh0IE9SIHRoZSB0YWcgIGNhdXNlcyB0aGUgbmV4dCBgZmluYWwoKWAgdG9cbiAgLy8gdGhyb3cgd2l0aCBcIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YVwiLlxuICBjb25zdCB0YWcgPSBhbGwuc3ViYXJyYXkoYWxsLmxlbmd0aCAtIDE2KTtcbiAgY29uc3QgZW5jID0gYWxsLnN1YmFycmF5KDAsIGFsbC5sZW5ndGggLSAxNik7XG4gIGNvbnN0IGRlY2lwaGVyID0gY3JlYXRlRGVjaXBoZXJpdignYWVzLTI1Ni1nY20nLCBrZXksIGl2KTtcbiAgZGVjaXBoZXIuc2V0QXV0aFRhZyh0YWcpO1xuICBjb25zdCBkZWMgPSBCdWZmZXIuY29uY2F0KFtkZWNpcGhlci51cGRhdGUoZW5jKSwgZGVjaXBoZXIuZmluYWwoKV0pO1xuICByZXR1cm4gZGVjLnRvU3RyaW5nKCd1dGY4Jyk7XG59XG5cbi8qKlxuICogU2hhcGUgZ3VhcmQgZm9yIGEgcGFyc2VkIGBFbmNyeXB0ZWRCbG9iYC4gQ2FsbGVycyBob2xkIGEgdmFsdWUgdGhhdCB3YXMgSlNPTi1cbiAqIGRlY29kZWQgZnJvbSBhIHNlY3JldCBjb2x1bW4gYW5kIG11c3Qgbm90IGhhbmQgYW55dGhpbmcgZWxzZSB0b1xuICogYGRlY3J5cHRTZWNyZXRgOyB0aGlzIG5hcnJvd3MgaXQgKG9yIHRoZSBjYWxsZXIgcmVqZWN0cyB0aGUgdmFsdWUpLiBDbGVhciB0ZXh0XG4gKiBpcyBOT1QgYSBzdXBwb3J0ZWQgc3RvcmVkIGZvcm0g4oCUIHRoZSBvbmx5IGNvbnN1bWVyIHRocm93cyBvbiBhIG5vbi1ibG9iLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbmNyeXB0ZWRCbG9iKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgRW5jcnlwdGVkQmxvYiB7XG4gIHJldHVybiAoIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAmJiB2YWx1ZSAhPT0gbnVsbFxuICAgICYmICh2YWx1ZSBhcyB7IGFsZz86IHVua25vd24gfSkuYWxnID09PSAnYWVzLTI1Ni1nY20tdjEnXG4gICAgJiYgdHlwZW9mICh2YWx1ZSBhcyB7IGl2PzogdW5rbm93biB9KS5pdiA9PT0gJ3N0cmluZydcbiAgICAmJiB0eXBlb2YgKHZhbHVlIGFzIHsgY2lwaGVydGV4dD86IHVua25vd24gfSkuY2lwaGVydGV4dCA9PT0gJ3N0cmluZydcbiAgKTtcbn1cbiJdfQ==
|
|
573
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0LWVuY3J5cHRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvc2VjcmV0LWVuY3J5cHRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQ0c7QUFFSCxPQUFPLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSxRQUFRLENBQUM7QUE2QmpGOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLE9BQU8sY0FBYztJQUNSLFNBQVMsQ0FBUztJQUVuQyxZQUFZLGlCQUEwQjtRQUNwQyxNQUFNLEdBQUcsR0FBRyxpQkFBaUIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDO1FBQ25FLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNULE1BQU0sSUFBSSxLQUFLLENBQUMsNkRBQTZELENBQUMsQ0FBQztRQUNqRixDQUFDO1FBQ0QsMEVBQTBFO1FBQzFFLHNEQUFzRDtRQUN0RCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsTUFBTSxLQUFLLEVBQUUsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUMzRCxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvQixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO0lBQzNCLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBYTtRQUNyQix1RUFBdUU7UUFDdkUsdUVBQXVFO1FBQ3ZFLDJEQUEyRDtRQUMzRCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUUsUUFBUSxFQUNoQyxJQUFJLENBQUMsU0FBUyxFQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUMxQixZQUFZLEVBQ1osRUFBRSxDQUNILENBQUM7UUFDRiwyRUFBMkU7UUFDM0UsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7Q0FDRjtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Q0c7QUFDSDs7OztHQUlHO0FBQ0gsS0FBSyxVQUFVLFlBQVksQ0FBQyxLQUFhLEVBQUUsYUFBcUIsRUFBRSxNQUFlLEVBQUUsUUFBaUI7SUFDbEcsTUFBTSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzFFLE1BQU0sTUFBTSxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1RSxNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxjQUFjLENBQUM7UUFDaEQsS0FBSyxFQUFFLEtBQUs7UUFDWixjQUFjLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDO0tBQ3JELENBQUMsQ0FBQyxDQUFDO0lBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtREFBbUQsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNqRyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4QyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssRUFBRTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLEdBQUcsQ0FBQyxNQUFNLGlCQUFpQixLQUFLLGVBQWUsQ0FBQyxDQUFDO0lBQ2hILE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sT0FBTyxjQUFjO0lBQ2pCLGNBQWMsR0FBa0IsSUFBSSxDQUFDO0lBQzVCLEtBQUssQ0FBUztJQUNkLGFBQWEsQ0FBUztJQUN0QixNQUFNLENBQVU7SUFDaEIsUUFBUSxDQUFVO0lBQzNCLGVBQWUsR0FBMkIsSUFBSSxDQUFDO0lBRXZELFlBQVksSUFBd0Y7UUFDbEcsTUFBTSxLQUFLLEdBQUcsSUFBSSxFQUFFLEtBQUssSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDO1FBQ3RFLE1BQU0sVUFBVSxHQUFHLElBQUksRUFBRSxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxDQUFDO1FBQzFGLElBQUksQ0FBQyxLQUFLO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO1FBQy9GLElBQUksQ0FBQyxVQUFVO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO1FBQ3hHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLE1BQU0sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDO1FBQ3ZGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxFQUFFLFFBQVEsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDO0lBQ2pFLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBYTtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUUscUhBQXFILENBQ3JJLENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0RyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxLQUFLLENBQUMsTUFBTTtRQUNWLElBQUksSUFBSSxDQUFDLGNBQWM7WUFBRSxPQUFPO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDaEQsQ0FBQztRQUNELElBQUksQ0FBQztZQUNILElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ25ELENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsMEVBQTBFO1lBQzFFLHdFQUF3RTtZQUN4RSx5RUFBeUU7WUFDekUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDNUIsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQztJQUVPLGVBQWU7UUFDckIsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7Q0FDRjtBQUVELDBFQUEwRTtBQUMxRSx1RUFBdUU7QUFDdkUsSUFBSSxlQUFlLEdBQXVCLElBQUksQ0FBQztBQUMvQyxTQUFTLGtCQUFrQjtJQUN6QixJQUFJLENBQUMsZUFBZTtRQUFFLGVBQWUsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO0lBQzdELE9BQU8sZUFBZSxDQUFDO0FBQ3pCLENBQUM7QUFFRDs7OztxQkFJcUI7QUFDckIsTUFBTSxVQUFVLHFCQUFxQjtJQUNuQyxPQUFPLGtCQUFrQixFQUFFLENBQUM7QUFDOUIsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxJQUFJLGdCQUFnRCxDQUFDO0FBQ3JELFNBQVMsbUJBQW1CO0lBQzFCLElBQUksZ0JBQWdCLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDbkMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQztRQUN2RCxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDMUQsQ0FBQztJQUNELE9BQU8sZ0JBQWdCLENBQUM7QUFDMUIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxLQUFLLFVBQVUsb0JBQW9CO0lBQ2pDLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMseUNBQXlDLENBQUM7SUFDOUUsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQ0FBcUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDO0lBQ3BILElBQUksZUFBZSxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLElBQUksY0FBYyxDQUFDLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBQ2pHLE1BQU0sUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3hCLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztRQUM1QixPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQztJQUNyRSxnQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3RGLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxxQkFBcUI7SUFDbkMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQztJQUN2RCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxDQUFDO0lBQ2hFLE9BQU8sS0FBSyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxjQUFjLENBQUMsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxjQUFjLEVBQUUsQ0FBQztBQUNsSCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxvQkFBb0I7SUFDeEMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQztJQUN2RCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxDQUFDO0lBRWhFLG1FQUFtRTtJQUNuRSxFQUFFO0lBQ0YsNEVBQTRFO0lBQzVFLDBFQUEwRTtJQUMxRSw2RUFBNkU7SUFDN0UsNkVBQTZFO0lBQzdFLCtFQUErRTtJQUMvRSw4RUFBOEU7SUFDOUUsK0NBQStDO0lBQy9DLEVBQUU7SUFDRiw0RUFBNEU7SUFDNUUsNEVBQTRFO0lBQzVFLDZFQUE2RTtJQUM3RSwwRUFBMEU7SUFDMUUsNEVBQTRFO0lBQzVFLHlFQUF5RTtJQUN6RSxxRUFBcUU7SUFDckUsc0VBQXNFO0lBQ3RFLDBDQUEwQztJQUMxQyxNQUFNLG9CQUFvQixFQUFFLENBQUM7SUFFN0IsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLFVBQVU7UUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFFbEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxjQUFjLENBQUMsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUM3RSxNQUFNLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN4QixjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekIsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDbkMsQ0FBQztBQUVELDZGQUE2RjtBQUM3RixNQUFNLFVBQVUsdUJBQXVCLEtBQVcsZUFBZSxHQUFHLElBQUksQ0FBQyxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFFekc7d0RBQ3dEO0FBQ3hELE1BQU0sVUFBVSxjQUFjLENBQUMsUUFBcUIsSUFBVSxlQUFlLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztBQWtCM0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixrREFBa0Q7SUFDakMsT0FBTyxHQUFHLElBQUksR0FBRyxFQUF3QyxDQUFDO0lBQzNFLGdFQUFnRTtJQUMvQyxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQTJCLENBQUM7SUFDOUQ7OzhFQUUwRTtJQUN6RCxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXdELENBQUM7SUFDNUY7O2lGQUU2RTtJQUM1RCxzQkFBc0IsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQzVELDBEQUEwRDtJQUN6QyxRQUFRLENBQWM7SUFDdEIsUUFBUSxDQUFvQjtJQUM1QixNQUFNLENBQVU7SUFDaEIsUUFBUSxDQUFVO0lBRW5DLFlBQVksSUFLWDtRQUNDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUM7UUFDdEYsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7SUFDaEUsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7O09BZ0JHO0lBQ0gsU0FBUyxDQUFDLEtBQWE7UUFDckIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xGLE1BQU0sSUFBSSxLQUFLLENBQUUsNkNBQTZDLEtBQUssSUFBSTtrQkFDbkUsMkZBQTJGO2tCQUMzRix3R0FBd0csQ0FDM0csQ0FBQztRQUNKLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdGLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFhO1FBQ2hDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFhO1FBQ2xCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLElBQUksTUFBTTtZQUFFLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUM5QiwyRUFBMkU7UUFDM0Usb0VBQW9FO1FBQ3BFLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakYsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQWE7UUFDOUIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPO1FBQ3BDLDRFQUE0RTtRQUM1RSx3RUFBd0U7UUFDeEUsb0VBQW9FO1FBQ3BFLCtCQUErQjtRQUMvQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNsQyxLQUFLLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxPQUFPO2dCQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekcsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDO1FBQzdCLElBQUksTUFBTTtZQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM1QyxzRUFBc0U7UUFDdEUsb0VBQW9FOztZQUMvRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTyxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBYTtRQUMzQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDVCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQywyQ0FBMkM7WUFDdkUsR0FBRyxHQUFHLFFBQVEsQ0FBQztZQUNmLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvQixDQUFDO1FBQ0QsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRU8sZUFBZSxDQUFDLEdBQW9CO1FBQzFDLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRDtxRUFDaUU7SUFDakUsS0FBSyxDQUFDLEtBQWE7UUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsMkVBQTJFO1FBQzNFLDBFQUEwRTtRQUMxRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLENBQUM7Q0FDRjtBQUVEOzs7Ozs7O0dBT0c7QUFDSCxLQUFLLFVBQVUsWUFBWSxDQUFDLFFBQXFCLEVBQUUsS0FBYTtJQUM5RCxPQUFPLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUYsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsYUFBYSxDQUFFLFNBQWlCLEVBQ3BELEtBQWEsRUFDYixRQUFRLEdBQWdCLGtCQUFrQixFQUFFO0lBRTVDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsb0VBQW9FLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBQ0QsNkVBQTZFO0lBQzdFLHVFQUF1RTtJQUN2RSxNQUFNLEdBQUcsR0FBRyxNQUFNLFlBQVksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEQsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNCLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlFLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNoQyxrRUFBa0U7SUFDbEUsc0VBQXNFO0lBQ3RFLG9FQUFvRTtJQUNwRSw4REFBOEQ7SUFDOUQsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLE9BQU87UUFDTCxHQUFHLEVBQUUsZ0JBQWdCO1FBQ3JCLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUN6QixtRUFBbUU7UUFDbkUsbUVBQW1FO1FBQ25FLFVBQVUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUN4RCxHQUFHLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ3RDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsYUFBYSxDQUFFLElBQW1CLEVBQ3RELEtBQWEsRUFDYixRQUFRLEdBQWdCLGtCQUFrQixFQUFFLEVBQzVDLFFBQVEsR0FBdUIsbUJBQW1CLEVBQUU7SUFFcEQsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLGdCQUFnQixFQUFFLENBQUM7UUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUNELDJFQUEyRTtJQUMzRSxzREFBc0Q7SUFDdEQsTUFBTSxHQUFHLEdBQUcsTUFBTSxZQUFZLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hELG1FQUFtRTtJQUNuRSxtRUFBbUU7SUFDbkUsaUVBQWlFO0lBQ2pFLDBFQUEwRTtJQUMxRSxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0MsSUFBSSxXQUFXLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssU0FBUyxJQUFJLFdBQVcsS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDcEYsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsSUFBSSxDQUFDLEdBQUcsMkJBQTJCLFdBQVcsWUFBWSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3RJLENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxPQUFPLGNBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYiwwRUFBMEU7UUFDMUUseUVBQXlFO1FBQ3pFLHlFQUF5RTtRQUN6RSw0RUFBNEU7UUFDNUUscURBQXFEO1FBQ3JELElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDO2dCQUNILE9BQU8sY0FBYyxDQUFDLElBQUksRUFBRSxNQUFNLFlBQVksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNuRSxDQUFDO1lBQUMsTUFBTSxDQUFDLENBQUMsdUNBQXVDLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsTUFBTSxHQUFHLENBQUM7SUFDWixDQUFDO0FBQ0gsQ0FBQztBQUVELHdGQUF3RjtBQUN4RixTQUFTLGNBQWMsQ0FBQyxJQUFtQixFQUFFLEdBQVc7SUFDdEQsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNuRCwwRUFBMEU7SUFDMUUscUVBQXFFO0lBQ3JFLGlFQUFpRTtJQUNqRSxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDMUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM3QyxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFELFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRSxPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxLQUFjO0lBQzVDLE9BQU8sQ0FBRSxPQUFPLEtBQUssS0FBSyxRQUFRO1dBQzdCLEtBQUssS0FBSyxJQUFJO1dBQ2IsS0FBMkIsQ0FBQyxHQUFHLEtBQUssZ0JBQWdCO1dBQ3JELE9BQVEsS0FBMEIsQ0FBQyxFQUFFLEtBQUssUUFBUTtXQUNsRCxPQUFRLEtBQWtDLENBQUMsVUFBVSxLQUFLLFFBQVEsQ0FDdEUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBFbnZlbG9wZSBlbmNyeXB0aW9uIGZvciBvcmctc2NvcGVkIHNlY3JldCBjb2x1bW5zIChBSSBwcm92aWRlciBrZXlzLCBJZFBcbiAqIGNsaWVudCBzZWNyZXRzLCB3ZWJob29rIFVSTHMvc2VjcmV0cywgcmVnaXN0cnkgY3JlZGVudGlhbHMpLlxuICpcbiAqIENyeXB0b2dyYXBoeSDigJQgdGhlIHNhbWUgZm9yIGV2ZXJ5IHByb3ZpZGVyIGJlbG93OlxuICogLSBBRVMtMjU2LUdDTSAoYXV0aGVudGljYXRlZCBlbmNyeXB0aW9uKS5cbiAqIC0gUGVyLW9yZyBrZXkgdmlhIEhLREYtU0hBMjU2KG1hc3Rlciwgc2FsdD1vcmdJZCwgaW5mbz0nc2VjcmV0cy12MScpLCBzbyB0d29cbiAqICAgb3JncyBlbmNyeXB0aW5nIHRoZSBzYW1lIHBsYWludGV4dCBwcm9kdWNlIGRpZmZlcmVudCBjaXBoZXJ0ZXh0cyBhbmQgYVxuICogICBzdG9sZW4gZGF0YWJhc2UgY2Fubm90IHRlbGwgd2hpY2ggb3JncyBzaGFyZSBhIHNlY3JldCBieSBjb21wYXJpc29uLlxuICogLSAxMi1ieXRlIElWIHBlciBlbmNyeXB0aW9uIGZyb20gYGNyeXB0by5yYW5kb21CeXRlc2AuXG4gKiAtIDE2LWJ5dGUgR0NNIGF1dGggdGFnIGNvbmNhdGVuYXRlZCBvbnRvIHRoZSBjaXBoZXJ0ZXh0LlxuICpcbiAqIFdIRVJFIFRIRSBNQVNURVIgQ09NRVMgRlJPTSBpcyB0aGUgb25seSBheGlzIHRoYXQgdmFyaWVzLCBhbmQgYWxsIHRocmVlXG4gKiBwcm92aWRlcnMgYXJlIGltcGxlbWVudGVkIOKAlCBwaWNrIG9uZSBwZXIgZGVwbG95bWVudDpcbiAqXG4gKiB8IHByb3ZpZGVyICAgICAgICAgICAgICAgfCBtYXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJsYXN0IHJhZGl1cyAgICAgICB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8IGBFbnZLZXlQcm92aWRlcmAgICAgICAgfCBgU0VDUkVUX0VOQ1JZUFRJT05fS0VZYCwgcGxhaW50ZXh0ICB8IGV2ZXJ5IG9yZyAgICAgICAgICB8XG4gKiB8IGBLbXNLZXlQcm92aWRlcmAgICAgICAgfCBLTVMtd3JhcHBlZCwgdW53cmFwcGVkIG9uY2UgYXQgYm9vdCB8IGV2ZXJ5IG9yZyAgICAgICAgICB8XG4gKiB8IGBQZXJPcmdLbXNLZXlQcm92aWRlcmAgfCBvbmUgS01TLXdyYXBwZWQgbWFzdGVyIFBFUiBPUkcgICAgICB8IG9uZSBvcmcgICAgICAgICAgICB8XG4gKlxuICogYGluaXRTZWNyZXRFbmNyeXB0aW9uKClgIHNlbGVjdHMgYmV0d2VlbiB0aGUgZmlyc3QgdHdvIGZyb20gZW52IGFuZCB3YXJtcyB0aGVcbiAqIHJlc3VsdDsgcGxhdGZvcm0gbGF5ZXJzIGBQZXJPcmdLbXNLZXlQcm92aWRlcmAgb3ZlciBpdCAob3JncyB3aXRoIG5vIHBlci1vcmdcbiAqIENNSyBmYWxsIHRocm91Z2ggdG8gdGhlIGJhc2UgcHJvdmlkZXIpLCBzbyBhIGRlcGxveW1lbnQgY2FuIHJ1biBtaXhlZC1tb2RlLlxuICogQ2FsbCBpdCBvbmNlIGF0IHN0YXJ0dXAg4oCUIGJlZm9yZSB0aGF0LCB0aGUgbGF6eSBkZWZhdWx0IGlzIGBFbnZLZXlQcm92aWRlcmAsXG4gKiB3aGljaCBpcyBjb3JyZWN0IGZvciBkZXYgYW5kIHNlbGYtaG9zdGVkIGluc3RhbGxzIHdpdGggbm8gS01TLlxuICpcbiAqIEZhaWwtY2xvc2VkIHRocm91Z2hvdXQ6IGEgbWlzc2luZyBvciB3cm9uZy1sZW5ndGggbWFzdGVyIHRocm93cyByYXRoZXIgdGhhblxuICogcm91bmQtdHJpcHBpbmcgYSBzZWNyZXQgYXMgcGxhaW50ZXh0LCBhbmQgYW4gdW5yZXNvbHZlZCBwZXItb3JnIGNvbmZpZyB0aHJvd3NcbiAqIHJhdGhlciB0aGFuIGd1ZXNzaW5nIHRoZSBzaGFyZWQgbWFzdGVyLlxuICpcbiAqIFRoZSBvbi1kaXNrIHNoYXBlIChgeyBhbGcsIGl2LCBjaXBoZXJ0ZXh0LCBraWQ/IH1gKSBpcyBwcm92aWRlci1pbmRlcGVuZGVudDtcbiAqIGBraWRgIGNhcnJpZXMgdGhlIEtNUyBrZXkgaWQgZm9yIHRoZSBwcm92aWRlcnMgdGhhdCBoYXZlIG9uZSwgd2hpY2ggaXMgd2hhdFxuICogbGV0cyBgZGVjcnlwdFNlY3JldGAgcmVmdXNlIGEgYmxvYiB3cml0dGVuIHVuZGVyIGEgc2luY2Utcm90YXRlZCBDTUsgaW5zdGVhZFxuICogb2Ygc3VyZmFjaW5nIGFuIG9wYXF1ZSBhdXRoLXRhZyBmYWlsdXJlLlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUNpcGhlcml2LCBjcmVhdGVEZWNpcGhlcml2LCBoa2RmU3luYywgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuXG4vKiogT24tZGlzayBzaGFwZSBvZiBhbiBlbmNyeXB0ZWQgc2VjcmV0LiBKU09OLXNlcmlhbGl6YWJsZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW5jcnlwdGVkQmxvYiB7XG4gIC8qKiBBbGdvcml0aG0gdGFnLiBCdW1wIG9uIGZvcm1hdCBjaGFuZ2Ugc28gYSBmdXR1cmUgbWlncmF0aW9uIGNhbiBkZXRlY3Qgb2xkIGJsb2JzLiAqL1xuICBhbGc6ICdhZXMtMjU2LWdjbS12MSc7XG4gIC8qKiBCYXNlNjQtZW5jb2RlZCAxMi1ieXRlIElWLiAqL1xuICBpdjogc3RyaW5nO1xuICAvKiogQmFzZTY0LWVuY29kZWQgY2lwaGVydGV4dCArIDE2LWJ5dGUgYXV0aGVudGljYXRpb24gdGFnIGNvbmNhdGVuYXRlZC4gKi9cbiAgY2lwaGVydGV4dDogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwga2V5IGlkICBwb3B1bGF0ZWQgYnkgS01TLWJhY2tlZCBwcm92aWRlcnMsIGlnbm9yZWQgYnkgdGhlIGVudiBwcm92aWRlci4gKi9cbiAga2lkPzogc3RyaW5nO1xufVxuXG4vKiogUGx1Z2dhYmxlIGtleSBzb3VyY2UuIEVudi1iYWNrZWQgYnkgZGVmYXVsdDsgS01TLWJhY2tlZCBhdmFpbGFibGUuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleVByb3ZpZGVyIHtcbiAgLyoqIERlcml2ZSBhIDMyLWJ5dGUgc3ltbWV0cmljIGtleSBib3VuZCB0byBgb3JnSWRgLiAqL1xuICBkZXJpdmVLZXkob3JnSWQ6IHN0cmluZyk6IEJ1ZmZlcjtcbiAgLyoqIE9wdGlvbmFsIGFzeW5jIHZhcmlhbnQgZm9yIHByb3ZpZGVycyB0aGF0IG5lZWQgdG8gZG8gSS9PIChlLmcuXG4gICAqICBwZXItb3JnIEtNUyBsb29rdXAgdGhlIGZpcnN0IHRpbWUgYW4gb3JnIGlzIHNlZW4pLiBEZWZhdWx0XG4gICAqICBpbXBsZW1lbnRhdGlvbiBmb3J3YXJkcyB0byB0aGUgc3luYyBgZGVyaXZlS2V5YC4gKi9cbiAgZGVyaXZlS2V5QXN5bmM/KG9yZ0lkOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj47XG4gIC8qKiBPcHRpb25hbCBLTVMta2V5LWlkIHRoaXMgcHJvdmlkZXIgdXNlZCBmb3IgYG9yZ0lkYC4gRW1iZWRkZWQgaW4gdGhlXG4gICAqICBgRW5jcnlwdGVkQmxvYi5raWRgIGZpZWxkIG9uIHdyaXRlIHNvIGRlY3J5cHQgY2FuIHZlcmlmeSB0aGUgcmlnaHRcbiAgICogIEtNUyBDTUsgaXMgYmVpbmcgdXNlZCAoZGVmZW5zZSBhZ2FpbnN0IGFuIGF0dGFja2VyIHdobyBzd2FwcyBhIGJsb2JcbiAgICogIGJldHdlZW4gb3JncykuIERlZmF1bHQgcmV0dXJucyB1bmRlZmluZWQgKGVudiBwcm92aWRlcikuICovXG4gIGtpZEZvcj8ob3JnSWQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBEZWZhdWx0IHByb3ZpZGVyICBkZXJpdmVzIGEgcGVyLW9yZyBrZXkgZnJvbSBgU0VDUkVUX0VOQ1JZUFRJT05fS0VZYCB2aWFcbiAqIEhLREYtU0hBMjU2LiBTdWl0YWJsZSBmb3Igc2VsZi1ob3N0ZWQgLyBkZXYgd2hlcmUgb3BlcmF0b3JzIGRvbid0IGhhdmUgS01TLlxuICpcbiAqIEZhaWxzIGZhc3QgaWYgdGhlIGVudiBpcyBtaXNzaW5nIG9yIHRoZSBrZXkgaXMgdGhlIHdyb25nIGxlbmd0aCBzbyBtaXNjb25maWdcbiAqIHN1cmZhY2VzIGF0IGZpcnN0IHVzZSByYXRoZXIgdGhhbiBzaWxlbnRseSBmaW5nZXJwcmludGluZyBhbGwgd3JpdGVzIHdpdGhcbiAqIGEgZGVmYXVsdCB6ZXJvIGtleS5cbiAqL1xuZXhwb3J0IGNsYXNzIEVudktleVByb3ZpZGVyIGltcGxlbWVudHMgS2V5UHJvdmlkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IG1hc3RlcktleTogQnVmZmVyO1xuXG4gIGNvbnN0cnVjdG9yKG1hc3RlcktleU92ZXJyaWRlPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcmF3ID0gbWFzdGVyS2V5T3ZlcnJpZGUgPz8gcHJvY2Vzcy5lbnYuU0VDUkVUX0VOQ1JZUFRJT05fS0VZO1xuICAgIGlmICghcmF3KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NFQ1JFVF9FTkNSWVBUSU9OX0tFWSBlbnYgaXMgcmVxdWlyZWQgZm9yIHNlY3JldCBlbmNyeXB0aW9uJyk7XG4gICAgfVxuICAgIC8vIEFjY2VwdCBlaXRoZXIgaGV4ICg2NCBjaGFycykgb3IgYmFzZTY0ICg0NCBjaGFycyBpbmNsdWRpbmcgcGFkZGluZykgZm9yXG4gICAgLy8gb3BlcmF0b3IgY29udmVuaWVuY2UgIGJvdGggZGVjb2RlIHRvIGEgMzItYnl0ZSBrZXkuXG4gICAgY29uc3QgZGVjb2RlZCA9IHJhdy5sZW5ndGggPT09IDY0ICYmIC9eWzAtOWEtZl0rJC9pLnRlc3QocmF3KVxuICAgICAgPyBCdWZmZXIuZnJvbShyYXcsICdoZXgnKVxuICAgICAgOiBCdWZmZXIuZnJvbShyYXcsICdiYXNlNjQnKTtcbiAgICBpZiAoZGVjb2RlZC5sZW5ndGggIT09IDMyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNFQ1JFVF9FTkNSWVBUSU9OX0tFWSBtdXN0IGRlY29kZSB0byAzMiBieXRlcyAoZ290ICR7ZGVjb2RlZC5sZW5ndGh9KWApO1xuICAgIH1cbiAgICB0aGlzLm1hc3RlcktleSA9IGRlY29kZWQ7XG4gIH1cblxuICBkZXJpdmVLZXkob3JnSWQ6IHN0cmluZyk6IEJ1ZmZlciB7XG4gICAgLy8gSEtERiBiaW5kcyB0aGUgbWFzdGVyIGtleSB0byB0aGUgb3JnIHNvIHR3byBvcmdzIGVuY3J5cHRpbmcgdGhlIHNhbWVcbiAgICAvLyBwbGFpbnRleHQgcHJvZHVjZSBkaWZmZXJlbnQgY2lwaGVydGV4dHMgIGtlZXBzIGEgc3RvbGVuIERCIHVuYWJsZSB0b1xuICAgIC8vIHRlbGwgd2hpY2ggb3JncyBzaGFyZSBzZWNyZXRzIHZpYSBjaXBoZXJ0ZXh0IGNvbXBhcmlzb24uXG4gICAgY29uc3QgZGVyaXZlZCA9IGhrZGZTeW5jKCAnc2hhMjU2JyxcbiAgICAgIHRoaXMubWFzdGVyS2V5LFxuICAgICAgQnVmZmVyLmZyb20ob3JnSWQsICd1dGY4JyksXG4gICAgICAnc2VjcmV0cy12MScsXG4gICAgICAzMixcbiAgICApO1xuICAgIC8vIGhrZGZTeW5jIHJldHVybnMgQXJyYXlCdWZmZXIgaW4gb2xkZXIgTm9kZSB0eXBpbmdzOyBub3JtYWxpemUgdG8gQnVmZmVyLlxuICAgIHJldHVybiBCdWZmZXIuZnJvbShkZXJpdmVkKTtcbiAgfVxufVxuXG4vKipcbiAqICBBV1MtS01TLWJhY2tlZCBLZXlQcm92aWRlci5cbiAqXG4gKiBUcmFkZS1vZmYgcGlja2VkOiBzdG9yZSBPTkUgbWFzdGVyIGtleSBlbmNyeXB0ZWQgdW5kZXIgYSBLTVMgQ01LOyBvblxuICogZmlyc3QgdXNlLCBjYWxsIGBrbXM6RGVjcnlwdGAgdG8gcmVjb3ZlciB0aGUgbWFzdGVyIGtleSBieXRlczsgSEtERi1cbiAqIGRlcml2ZSBwZXItb3JnIGZyb20gaXQgKHNhbWUgYXMgRW52S2V5UHJvdmlkZXIpLiBUaGUgcHJvY2VzcyB0aGVuIGhvbGRzXG4gKiB0aGUgcGxhaW50ZXh0IG1hc3RlciBrZXkgaW4gbWVtb3J5IHVudGlsIHJlc3RhcnQuXG4gKlxuICogUFJPUzogb25lIEtNUyBjYWxsIHBlciBwcm9jZXNzIGxpZmV0aW1lIChjaGVhcCwgbG93IHA5OSBpbXBhY3QpLFxuICogdGhlIGVuY3J5cHRlZC1tYXN0ZXIta2V5IGJsb2IgaXMgc2FmZSB0byBjb21taXQvbG9nL2NoZWNraW4sXG4gKiBLTVMgYXVkaXQgbG9nIHJlY29yZHMgd2hlbiB0aGUgbWFzdGVyIGlzIHJlY292ZXJlZC5cbiAqIENPTlM6IHByb2Nlc3MgbWVtb3J5IHN0aWxsIGhvbGRzIHRoZSBtYXN0ZXIga2V5ICBzYW1lIHBvc3R1cmUgYXNcbiAqIEVudktleVByb3ZpZGVyIG9uY2Ugd2FybWVkIHVwLiBGb3Igc3Ryb25nZXIgaXNvbGF0aW9uIGFuXG4gKiBvcGVyYXRvciBjYW4gbW92ZSB0byBwZXItcmVjb3JkIGVudmVsb3BlIGVuY3J5cHRpb24gKGNhbGxcbiAqIEdlbmVyYXRlRGF0YUtleSBvbiBldmVyeSB3cml0ZSk7IHRoYXQncyBhIGZvbGxvdy1vbi5cbiAqXG4gKiBPcGVyYXRvciBzZXR1cDpcbiAqICAgMS4gQ3JlYXRlIGEgS01TIENNSyB3aG9zZSBrZXkgcG9saWN5IGFsbG93cyB0aGUgc2VydmljZSByb2xlIGBrbXM6RGVjcnlwdGAuXG4gKiAgICAgIE9uIHRoZSBBV1MgdGFyZ2V0cyBgYmluL3NldHVwLnNoYCAvIGB0ZW1wbGF0ZS55YW1sYCBncmFudCB0aGF0IHRvIHRoZVxuICogICAgICBwbGF0Zm9ybSBhbmQgcGx1Z2luIHRhc2sgcm9sZXMgd2hlbiB0aGVzZSB2YXJzIGFyZSBzZXQuXG4gKiAgIDIuIEdlbmVyYXRlIGEgMzItYnl0ZSBtYXN0ZXI6ICBoZWFkIC1jIDMyIC9kZXYvdXJhbmRvbSB8IGJhc2U2NFxuICogICAzLiBXcmFwIGl0OiAgYXdzIGttcyBlbmNyeXB0IC0ta2V5LWlkIDxLRVlfSUQ+IC0tcGxhaW50ZXh0IDxiYXNlNjQtZnJvbS0yPiBcXFxuICogICAgICAgICAgICAgICAgICAtLW91dHB1dCB0ZXh0IC0tcXVlcnkgQ2lwaGVydGV4dEJsb2JcbiAqICAgNC4gU2V0IG9uIHRoZSBzZXJ2aWNlOlxuICogICAgICAgIFNFQ1JFVF9FTkNSWVBUSU9OX0tNU19LRVlfSUQ9PEtFWV9JRD4gICAgICAgIChhbGlhcy88bmFtZT4gb3Iga2V5IFVVSUQpXG4gKiAgICAgICAgU0VDUkVUX0VOQ1JZUFRJT05fS01TX0NJUEhFUlRFWFQ9PGJhc2U2NC1mcm9tLTM+XG4gKlxuICogTk8gTUFOVUFMIFdJUklORzogYGluaXRTZWNyZXRFbmNyeXB0aW9uKClgIHBpY2tzIHRoaXMgcHJvdmlkZXIgd2hlbmV2ZXIgYm90aFxuICogdmFycyBhcmUgc2V0IGFuZCB3YXJtcyBpdCBiZWZvcmUgdGhlIHNlcnZpY2UgYWNjZXB0cyB0cmFmZmljLiAoSXQgdXNlZCB0b1xuICogcmVxdWlyZSBhIGhhbmQtd3JpdHRlbiBgc2V0S2V5UHJvdmlkZXIobmV3IEttc0tleVByb3ZpZGVyKCkpYCB0aGF0IG5vIHNlcnZpY2VcbiAqIGV2ZXIgY2FsbGVkLCBzbyB0aGUgbW9kZSB3YXMgZG9jdW1lbnRlZCBidXQgdW5yZWFjaGFibGUuKVxuICpcbiAqIE1pZ3JhdGluZyBlbnYgLT4gS01TOiBzZXQgdGhlIHR3byB2YXJzIGFib3ZlIHRvIHRoZSBORVcgd3JhcHBlZCBtYXN0ZXIgYW5kXG4gKiBsZWF2ZSB0aGUgb2xkIHBsYWludGV4dCBtYXN0ZXIgaW4gYFNFQ1JFVF9FTkNSWVBUSU9OX0tFWV9QUkVWSU9VU2AuIFJlYWRzXG4gKiBmYWxsIGJhY2sgdG8gaXQgZm9yIGtpZC1sZXNzIGJsb2JzIHVudGlsIGByZWVuY3J5cHQtc2VjcmV0c2AgaGFzIHJld3JpdHRlblxuICogdGhlbTsgc2VlIGRvY3MvcnVuYm9va3Mvc2VjcmV0LXJvdGF0aW9uLm1kLlxuICpcbiAqIFRoZSBBV1MgU0RLIGlzIGltcG9ydGVkIGxhemlseSwgc28gaW5zdGFsbHMgdGhhdCBzdGF5IG9uIGBFbnZLZXlQcm92aWRlcmBcbiAqIG5ldmVyIHBheSBpdHMgY29sZC1zdGFydCBjb3N0LlxuICovXG4vKipcbiAqIEtNUy1kZWNyeXB0IGEgYmFzZTY0IGNpcGhlcnRleHQgaW50byBhIDMyLWJ5dGUga2V5LiBTaGFyZWQgYnkgYm90aCBLTVMga2V5XG4gKiBwcm92aWRlcnMgKHNpbmdsZS1tYXN0ZXIgKyBwZXItb3JnKS4gYEBhd3Mtc2RrL2NsaWVudC1rbXNgIGlzXG4gKiBkeW5hbWljYWxseSBpbXBvcnRlZCBzbyBFbnZLZXlQcm92aWRlci1vbmx5IGVudnMgbmV2ZXIgbG9hZCB0aGUgU0RLLlxuICovXG5hc3luYyBmdW5jdGlvbiBrbXNEZWNyeXB0MzIoa2V5SWQ6IHN0cmluZywgY2lwaGVydGV4dEI2NDogc3RyaW5nLCByZWdpb24/OiBzdHJpbmcsIGVuZHBvaW50Pzogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgY29uc3QgeyBLTVNDbGllbnQsIERlY3J5cHRDb21tYW5kIH0gPSBhd2FpdCBpbXBvcnQoJ0Bhd3Mtc2RrL2NsaWVudC1rbXMnKTtcbiAgY29uc3QgY2xpZW50ID0gbmV3IEtNU0NsaWVudCh7IHJlZ2lvbiwgLi4uKGVuZHBvaW50ID8geyBlbmRwb2ludCB9IDoge30pIH0pO1xuICBjb25zdCByZXNwID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IERlY3J5cHRDb21tYW5kKHtcbiAgICBLZXlJZDoga2V5SWQsXG4gICAgQ2lwaGVydGV4dEJsb2I6IEJ1ZmZlci5mcm9tKGNpcGhlcnRleHRCNjQsICdiYXNlNjQnKSxcbiAgfSkpO1xuICBpZiAoIXJlc3AuUGxhaW50ZXh0KSB0aHJvdyBuZXcgRXJyb3IoYEtNUyBEZWNyeXB0IHJldHVybmVkIGFuIGVtcHR5IFBsYWludGV4dCBmb3Iga2V5ICR7a2V5SWR9YCk7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKHJlc3AuUGxhaW50ZXh0KTtcbiAgaWYgKGJ1Zi5sZW5ndGggIT09IDMyKSB0aHJvdyBuZXcgRXJyb3IoYEtNUyBEZWNyeXB0IHJldHVybmVkICR7YnVmLmxlbmd0aH0tYnl0ZSBrZXkgZm9yICR7a2V5SWR9OyBleHBlY3RlZCAzMmApO1xuICByZXR1cm4gYnVmO1xufVxuXG5leHBvcnQgY2xhc3MgS21zS2V5UHJvdmlkZXIgaW1wbGVtZW50cyBLZXlQcm92aWRlciB7XG4gIHByaXZhdGUgbWFzdGVyS2V5Q2FjaGU6IEJ1ZmZlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IGtleUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2lwaGVydGV4dEI2NDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludD86IHN0cmluZztcbiAgcHJpdmF0ZSBkZWNyeXB0SW5GbGlnaHQ6IFByb21pc2U8QnVmZmVyPiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKG9wdHM/OiB7IGtleUlkPzogc3RyaW5nOyBjaXBoZXJ0ZXh0QmFzZTY0Pzogc3RyaW5nOyByZWdpb24/OiBzdHJpbmc7IGVuZHBvaW50Pzogc3RyaW5nIH0pIHtcbiAgICBjb25zdCBrZXlJZCA9IG9wdHM/LmtleUlkID8/IHByb2Nlc3MuZW52LlNFQ1JFVF9FTkNSWVBUSU9OX0tNU19LRVlfSUQ7XG4gICAgY29uc3QgY2lwaGVydGV4dCA9IG9wdHM/LmNpcGhlcnRleHRCYXNlNjQgPz8gcHJvY2Vzcy5lbnYuU0VDUkVUX0VOQ1JZUFRJT05fS01TX0NJUEhFUlRFWFQ7XG4gICAgaWYgKCFrZXlJZCkgdGhyb3cgbmV3IEVycm9yKCdTRUNSRVRfRU5DUllQVElPTl9LTVNfS0VZX0lEIGVudiBpcyByZXF1aXJlZCBmb3IgS21zS2V5UHJvdmlkZXInKTtcbiAgICBpZiAoIWNpcGhlcnRleHQpIHRocm93IG5ldyBFcnJvcignU0VDUkVUX0VOQ1JZUFRJT05fS01TX0NJUEhFUlRFWFQgZW52IGlzIHJlcXVpcmVkIGZvciBLbXNLZXlQcm92aWRlcicpO1xuICAgIHRoaXMua2V5SWQgPSBrZXlJZDtcbiAgICB0aGlzLmNpcGhlcnRleHRCNjQgPSBjaXBoZXJ0ZXh0O1xuICAgIHRoaXMucmVnaW9uID0gb3B0cz8ucmVnaW9uID8/IHByb2Nlc3MuZW52LkFXU19SRUdJT04gPz8gcHJvY2Vzcy5lbnYuQVdTX0RFRkFVTFRfUkVHSU9OO1xuICAgIHRoaXMuZW5kcG9pbnQgPSBvcHRzPy5lbmRwb2ludCA/PyBwcm9jZXNzLmVudi5BV1NfS01TX0VORFBPSU5UO1xuICB9XG5cbiAgZGVyaXZlS2V5KG9yZ0lkOiBzdHJpbmcpOiBCdWZmZXIge1xuICAgIGlmICghdGhpcy5tYXN0ZXJLZXlDYWNoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCAnS21zS2V5UHJvdmlkZXIgaXMgbm90IHdhcm1lZCB1cC4gQ2FsbCBgYXdhaXQgcHJvdmlkZXIud2FybXVwKClgIG9uY2UgYXQgc2VydmljZSBzdGFydHVwIGJlZm9yZSBhbnkgZW5jcnlwdC9kZWNyeXB0LicsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBkZXJpdmVkID0gaGtkZlN5bmMoJ3NoYTI1NicsIHRoaXMubWFzdGVyS2V5Q2FjaGUsIEJ1ZmZlci5mcm9tKG9yZ0lkLCAndXRmOCcpLCAnc2VjcmV0cy12MScsIDMyKTtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oZGVyaXZlZCk7XG4gIH1cblxuICAvKipcbiAgICogRWFnZXJseSByZWNvdmVyIHRoZSBtYXN0ZXIga2V5IGZyb20gS01TIHNvIHN1YnNlcXVlbnQgYGRlcml2ZUtleWBcbiAgICogY2FsbHMgYXJlIHN5bmMuIElkZW1wb3RlbnQgIGNvbmN1cnJlbnQgY2FsbGVycyBzaGFyZSB0aGUgc2FtZSBpbi1cbiAgICogZmxpZ2h0IHByb21pc2Ugc28gd2UgZG9uJ3Qgc3Bhd24gbXVsdGlwbGUgS01TIERlY3J5cHQgcmVxdWVzdHMgYXRcbiAgICogYm9vdC4gVGhyb3dzIG9uIGFueSBLTVMgZmFpbHVyZTsgdGhlIGNhbGxlciAodHlwaWNhbGx5IHRoZSBzZXJ2aWNlJ3NcbiAgICogb25CZWZvcmVTdGFydCBob29rKSBkZWNpZGVzIHdoZXRoZXIgdG8gZmFsbCBiYWNrIHRvIGEgZGlmZmVyZW50XG4gICAqIHByb3ZpZGVyIG9yIGZhaWwtc3RhcnR1cC5cbiAgICovXG4gIGFzeW5jIHdhcm11cCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5tYXN0ZXJLZXlDYWNoZSkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5kZWNyeXB0SW5GbGlnaHQpIHtcbiAgICAgIHRoaXMuZGVjcnlwdEluRmxpZ2h0ID0gdGhpcy5mZXRjaEFuZERlY3J5cHQoKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubWFzdGVyS2V5Q2FjaGUgPSBhd2FpdCB0aGlzLmRlY3J5cHRJbkZsaWdodDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIEEgdHJhbnNpZW50IEtNUyBmYWlsdXJlIG11c3Qgbm90IHBlcm1hbmVudGx5IHBvaXNvbiB0aGUgcHJvdmlkZXI6IGNsZWFyXG4gICAgICAvLyB0aGUgcmVqZWN0ZWQgaW4tZmxpZ2h0IHByb21pc2Ugc28gYSBsYXRlciB3YXJtdXAoKSByZXRyaWVzIGluc3RlYWQgb2ZcbiAgICAgIC8vIHJlLWF3YWl0aW5nIHRoZSBzYW1lIHJlamVjdGlvbiBmb3JldmVyIChtYXRjaGVzIFBlck9yZ0ttc0tleVByb3ZpZGVyKS5cbiAgICAgIHRoaXMuZGVjcnlwdEluRmxpZ2h0ID0gbnVsbDtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZldGNoQW5kRGVjcnlwdCgpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIHJldHVybiBrbXNEZWNyeXB0MzIodGhpcy5rZXlJZCwgdGhpcy5jaXBoZXJ0ZXh0QjY0LCB0aGlzLnJlZ2lvbiwgdGhpcy5lbmRwb2ludCk7XG4gIH1cbn1cblxuLy8gTGF6eSBzaW5nbGV0b24gIG9wZXJhdG9yIGNvZGUgaW4gbG9uZy1saXZlZCBzZXJ2aWNlcyBwYXlzIHRoZSBlbnYtcGFyc2Vcbi8vIGNvc3Qgb25jZSwgYW5kIHRlc3RzIGNhbiBtaW50IHRoZWlyIG93biBwcm92aWRlciB3aXRoIGEgbGl0ZXJhbCBrZXkuXG5sZXQgZGVmYXVsdFByb3ZpZGVyOiBLZXlQcm92aWRlciB8IG51bGwgPSBudWxsO1xuZnVuY3Rpb24gZ2V0RGVmYXVsdFByb3ZpZGVyKCk6IEtleVByb3ZpZGVyIHtcbiAgaWYgKCFkZWZhdWx0UHJvdmlkZXIpIGRlZmF1bHRQcm92aWRlciA9IG5ldyBFbnZLZXlQcm92aWRlcigpO1xuICByZXR1cm4gZGVmYXVsdFByb3ZpZGVyO1xufVxuXG4vKiogUmVhZCB0aGUgYWN0aXZlIGRlZmF1bHQgcHJvdmlkZXIuIEV4cG9zZWQgc28gc2VydmljZSBjb2RlIChlLmcuIGFuXG4gKiAgYWRtaW4gZW5kcG9pbnQgdGhhdCBqdXN0IHJvdGF0ZWQgYW4gb3JnJ3MgS01TIGNvbmZpZykgY2FuIGNhbGxcbiAqICBgcHJvdmlkZXIuZXZpY3Qob3JnSWQpYCBvbiB0aGUgbGl2ZSBwcm92aWRlciByYXRoZXIgdGhhbiByZWNvbnN0cnVjdGluZ1xuICogIG9uZS4gVHJpZ2dlcnMgbGF6eSBpbml0aWFsaXphdGlvbiBvbiBmaXJzdCBhY2Nlc3MsIHNhbWUgYXMgdGhlIGludGVybmFsXG4gKiAgY2FsbGVycyBiZWxvdy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0S2V5UHJvdmlkZXIoKTogS2V5UHJvdmlkZXIge1xuICByZXR1cm4gZ2V0RGVmYXVsdFByb3ZpZGVyKCk7XG59XG5cbi8qKlxuICogUm90YXRpb24gZmFsbGJhY2s6IGFuIGBFbnZLZXlQcm92aWRlcmAgb3ZlciBgU0VDUkVUX0VOQ1JZUFRJT05fS0VZX1BSRVZJT1VTYCxcbiAqIG9yIG51bGwgd2hlbiB0aGF0IGVudiBpcyB1bnNldC4gYHVuZGVmaW5lZGAgPSBub3QgeWV0IHJlc29sdmVkLiBXaGlsZSBhXG4gKiBtYXN0ZXIta2V5IHJvdGF0aW9uIGlzIGluIHByb2dyZXNzLCBgZGVjcnlwdFNlY3JldGAgcmV0cmllcyBhIGZhaWxlZCBkZWNyeXB0XG4gKiB1bmRlciB0aGlzIGtleSwgc28gcm93cyB3cml0dGVuIHVuZGVyIHRoZSBvbGQgbWFzdGVyIHN0YXkgcmVhZGFibGUgdW50aWwgdGhlXG4gKiByZS1lbmNyeXB0aW9uIHRvb2wgKHBsYXRmb3JtIGBzY3JpcHRzL3JlZW5jcnlwdC1zZWNyZXRzLmpzYCkgaGFzIHJld3JpdHRlblxuICogdGhlbSB1bmRlciB0aGUgbmV3IG9uZS4gRW5jcnlwdGlvbiBORVZFUiB1c2VzIGl0LlxuICovXG5sZXQgcHJldmlvdXNQcm92aWRlcjogS2V5UHJvdmlkZXIgfCBudWxsIHwgdW5kZWZpbmVkO1xuZnVuY3Rpb24gZ2V0UHJldmlvdXNQcm92aWRlcigpOiBLZXlQcm92aWRlciB8IG51bGwge1xuICBpZiAocHJldmlvdXNQcm92aWRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgcmF3ID0gcHJvY2Vzcy5lbnYuU0VDUkVUX0VOQ1JZUFRJT05fS0VZX1BSRVZJT1VTO1xuICAgIHByZXZpb3VzUHJvdmlkZXIgPSByYXcgPyBuZXcgRW52S2V5UHJvdmlkZXIocmF3KSA6IG51bGw7XG4gIH1cbiAgcmV0dXJuIHByZXZpb3VzUHJvdmlkZXI7XG59XG5cbi8qKlxuICogUmVzb2x2ZSAoYW5kIFdBUk0pIHRoZSByb3RhdGlvbiBmYWxsYmFjay5cbiAqXG4gKiBUd28gcm90YXRpb24gc2hhcGVzLCBhbmQgdGhlIG9yZGVyIG1hdHRlcnM6XG4gKiAgLSBLTVMgbWFzdGVyIHJvdGF0aW9uOiBgU0VDUkVUX0VOQ1JZUFRJT05fS01TX0NJUEhFUlRFWFRfUFJFVklPVVNgIGhvbGRzIHRoZVxuICogICAgb3V0Z29pbmcgbWFzdGVyIHdyYXBwZWQgdW5kZXIgYFNFQ1JFVF9FTkNSWVBUSU9OX0tNU19LRVlfSURfUFJFVklPVVNgIChvclxuICogICAgdGhlIGN1cnJlbnQgQ01LLCB3aGVuIG9ubHkgdGhlIG1hc3RlciBjaGFuZ2VkIGFuZCBub3QgdGhlIGtleSkuXG4gKiAgLSBNaWdyYXRpb24gRlJPTSB0aGUgZW52IG1hc3RlciBUTyBLTVM6IHRoZSBwcmltYXJ5IGlzIHRoZSBuZXcgS01TLXdyYXBwZWRcbiAqICAgIG1hc3RlciBhbmQgdGhlIG91dGdvaW5nIFBMQUlOVEVYVCBtYXN0ZXIgc3RheXMgaW5cbiAqICAgIGBTRUNSRVRfRU5DUllQVElPTl9LRVlfUFJFVklPVVNgLiBUaGF0IGlzIHdoeSB0aGUgZW52IGZvcm0gaXMgc3RpbGwgcmVhZFxuICogICAgd2hlbiBubyBLTVMgcHJldmlvdXMgaXMgY29uZmlndXJlZCwgcmF0aGVyIHRoYW4gYmVpbmcgbXV0dWFsbHkgZXhjbHVzaXZlLlxuICpcbiAqIFdhcm1lZCBoZXJlIGJlY2F1c2UgYGRlY3J5cHRTZWNyZXRgIHRha2VzIHRoZSBwcmV2aW91cyBwcm92aWRlciBhcyBhIFNZTkNcbiAqIGRlZmF1bHQgcGFyYW1ldGVyIOKAlCBhIGNvbGQgYEttc0tleVByb3ZpZGVyYCB3b3VsZCB0aHJvdyBvdXQgb2YgYGRlcml2ZUtleWBcbiAqIG9uIHRoZSByZXRyeSBwYXRoIGFuZCBtYXNrIHRoZSBvcmlnaW5hbCBkZWNyeXB0aW9uIGVycm9yLlxuICpcbiAqIENhbGxlZCBmcm9tIGBpbml0U2VjcmV0RW5jcnlwdGlvbigpYCBvbiBFVkVSWSBwYXRoLCBpbmNsdWRpbmcgdGhlIG9uZSB0aGF0XG4gKiBjb25maWd1cmVzIG5vIEtNUyBwcmltYXJ5OiB3aGljaCBtYXN0ZXIgaXMgb3V0Z29pbmcgaXMgaW5kZXBlbmRlbnQgb2Ygd2hpY2hcbiAqIG9uZSBpcyBjdXJyZW50LCBzbyBhbiBlbnYgcHJpbWFyeSB3aXRoIGEgS01TLXdyYXBwZWQgcHJldmlvdXMgaXMgYSB2YWxpZFxuICogcm90YXRpb24gc3RhdGUgYW5kIGhhcyB0byByZXNvbHZlIGhlcmUuIFdpdGhvdXQgYSBib290IGNhbGwgdGhpcyBmYWxscyBiYWNrXG4gKiB0byB0aGUgbGF6eSBgZ2V0UHJldmlvdXNQcm92aWRlcigpYCwgd2hpY2ggcmVhZHMgdGhlIHBsYWludGV4dCB2YXIgb25seS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5pdFByZXZpb3VzUHJvdmlkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHdyYXBwZWRQcmV2aW91cyA9IHByb2Nlc3MuZW52LlNFQ1JFVF9FTkNSWVBUSU9OX0tNU19DSVBIRVJURVhUX1BSRVZJT1VTO1xuICBjb25zdCBwcmV2aW91c0tleUlkID0gcHJvY2Vzcy5lbnYuU0VDUkVUX0VOQ1JZUFRJT05fS01TX0tFWV9JRF9QUkVWSU9VUyA/PyBwcm9jZXNzLmVudi5TRUNSRVRfRU5DUllQVElPTl9LTVNfS0VZX0lEO1xuICBpZiAod3JhcHBlZFByZXZpb3VzICYmIHByZXZpb3VzS2V5SWQpIHtcbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBLbXNLZXlQcm92aWRlcih7IGtleUlkOiBwcmV2aW91c0tleUlkLCBjaXBoZXJ0ZXh0QmFzZTY0OiB3cmFwcGVkUHJldmlvdXMgfSk7XG4gICAgYXdhaXQgcHJvdmlkZXIud2FybXVwKCk7XG4gICAgcHJldmlvdXNQcm92aWRlciA9IHByb3ZpZGVyO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBwbGFpbnRleHRQcmV2aW91cyA9IHByb2Nlc3MuZW52LlNFQ1JFVF9FTkNSWVBUSU9OX0tFWV9QUkVWSU9VUztcbiAgcHJldmlvdXNQcm92aWRlciA9IHBsYWludGV4dFByZXZpb3VzID8gbmV3IEVudktleVByb3ZpZGVyKHBsYWludGV4dFByZXZpb3VzKSA6IG51bGw7XG59XG5cbi8qKlxuICogVGhlIGJhc2UgKG5vbi1wZXItb3JnKSBwcm92aWRlciB0aGlzIGVudmlyb25tZW50IGFza3MgZm9yOiB0aGUgS01TLXdyYXBwZWRcbiAqIG1hc3RlciB3aGVuIGJvdGggb2YgaXRzIHZhcnMgYXJlIHNldCwgb3RoZXJ3aXNlIHRoZSBwbGFpbnRleHQgZW52IG1hc3Rlci5cbiAqXG4gKiBDb25zdHJ1Y3RzIGVhZ2VybHksIHNvIGl0IHRocm93cyB3aGVuIHRoZSBlbnYgbWFzdGVyIGlzIHJlcXVpcmVkIGFuZCBtaXNzaW5nLlxuICogYGluaXRTZWNyZXRFbmNyeXB0aW9uKClgIGlzIHRoZSBib290IGVudHJ5IHBvaW50IGFuZCBkZWxpYmVyYXRlbHkgZG9lcyBOT1RcbiAqIGNhbGwgdGhpcyBmb3IgdGhlIGVudiBjYXNlOyB1c2UgaXQgb25seSB3aGVyZSBhbiBpbnN0YW5jZSBpcyBuZWVkZWQgcmlnaHRcbiAqIGF3YXkg4oCUIGUuZy4gdGhlIHBlci1vcmcgZmFsbGJhY2ssIHdoaWNoIGlzIGFscmVhZHkgcGFzdCB0aGF0IGNoZWNrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmFzZUtleVByb3ZpZGVyKCk6IEtleVByb3ZpZGVyIHtcbiAgY29uc3Qga2V5SWQgPSBwcm9jZXNzLmVudi5TRUNSRVRfRU5DUllQVElPTl9LTVNfS0VZX0lEO1xuICBjb25zdCBjaXBoZXJ0ZXh0ID0gcHJvY2Vzcy5lbnYuU0VDUkVUX0VOQ1JZUFRJT05fS01TX0NJUEhFUlRFWFQ7XG4gIHJldHVybiBrZXlJZCAmJiBjaXBoZXJ0ZXh0ID8gbmV3IEttc0tleVByb3ZpZGVyKHsga2V5SWQsIGNpcGhlcnRleHRCYXNlNjQ6IGNpcGhlcnRleHQgfSkgOiBuZXcgRW52S2V5UHJvdmlkZXIoKTtcbn1cblxuLyoqXG4gKiBTZWxlY3QsIFdBUk0gYW5kIGluc3RhbGwgdGhlIGJhc2Uga2V5IHByb3ZpZGVyLiBDYWxsIG9uY2UgYXQgc3RhcnR1cCwgYmVmb3JlXG4gKiB0aGUgc2VydmljZSBzZXJ2ZXMgdHJhZmZpYy5cbiAqXG4gKiBXYXJtaW5nIG1hdHRlcnM6IGBLbXNLZXlQcm92aWRlci5kZXJpdmVLZXlgIGlzIHN5bmNocm9ub3VzIGFuZCByZWZ1c2VzIHRvIHdvcmtcbiAqIGNvbGQsIHNvIHdpdGhvdXQgdGhpcyBldmVyeSBzZWNyZXQgcmVhZC93cml0ZSB3b3VsZCB0aHJvdyB1bnRpbCBzb21ldGhpbmdcbiAqIGhhcHBlbmVkIHRvIGNhbGwgYHdhcm11cCgpYC4gRG9pbmcgaXQgYXQgYm9vdCBhbHNvIHR1cm5zIGEgYmFkIENNSywgYSBiYWRcbiAqIHdyYXBwZWQgbWFzdGVyIG9yIGEgbWlzc2luZyBga21zOkRlY3J5cHRgIGdyYW50IGludG8gYSBzdGFydHVwIGZhaWx1cmUgcmF0aGVyXG4gKiB0aGFuIGEgNTAwIG9uIHRoZSBmaXJzdCByZXF1ZXN0IHRoYXQgdG91Y2hlcyBhIHNlY3JldC5cbiAqXG4gKiBSZXR1cm5zIHRoZSB3YXJtZWQgcHJvdmlkZXIgc28gYSBjYWxsZXIgY2FuIGxheWVyIGBQZXJPcmdLbXNLZXlQcm92aWRlcmAgb3ZlclxuICogaXQgd2l0aG91dCBjb25zdHJ1Y3RpbmcgKGFuZCByZS13YXJtaW5nKSBhIHNlY29uZCBvbmUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0U2VjcmV0RW5jcnlwdGlvbigpOiBQcm9taXNlPHsgcHJvdmlkZXI6IEtleVByb3ZpZGVyIHwgbnVsbDsgbW9kZTogJ2VudicgfCAna21zJyB9PiB7XG4gIGNvbnN0IGtleUlkID0gcHJvY2Vzcy5lbnYuU0VDUkVUX0VOQ1JZUFRJT05fS01TX0tFWV9JRDtcbiAgY29uc3QgY2lwaGVydGV4dCA9IHByb2Nlc3MuZW52LlNFQ1JFVF9FTkNSWVBUSU9OX0tNU19DSVBIRVJURVhUO1xuXG4gIC8vIE5PIEtNUyBDT05GSUdVUkVEOiBkZWxpYmVyYXRlbHkgdG91Y2ggbm90aGluZyBhbmQgcmVwb3J0IGBudWxsYC5cbiAgLy9cbiAgLy8gYEVudktleVByb3ZpZGVyYCBuZWVkcyBubyB3YXJtaW5nLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIGdhaW4gaGVyZSDigJQgYW5kXG4gIC8vIGNvbnN0cnVjdGluZyBvbmUgZWFnZXJseSB3b3VsZCBtYWtlIGBTRUNSRVRfRU5DUllQVElPTl9LRVlgIGEgaGFyZCBCT09UXG4gIC8vIHJlcXVpcmVtZW50IGZvciBldmVyeSBzZXJ2aWNlIHRoYXQgY2FsbHMgdGhpcywgaW5jbHVkaW5nIGRldiBhbmQgdGVzdCBydW5zXG4gIC8vIHRoYXQgbmV2ZXIgZW5jcnlwdCBhIHNlY3JldC4gVGhlIGxhenkgZGVmYXVsdCBzdGF5cyBleGFjdGx5IGFzIGl0IHdhczogdGhlXG4gIC8vIGZpcnN0IGBlbmNyeXB0U2VjcmV0YC9gZGVjcnlwdFNlY3JldGAgYnVpbGRzIGl0LCBhbmQgYSBtaXNzaW5nIG1hc3RlciB0aHJvd3NcbiAgLy8gdGhlcmUuIENhbGxlcnMgdGhhdCBuZWVkIGFuIGluc3RhbmNlICh0aGUgcGVyLW9yZyBmYWxsYmFjaykgY29uc3RydWN0IHRoZWlyXG4gIC8vIG93biBgRW52S2V5UHJvdmlkZXJgIHdoZW4gdGhpcyByZXR1cm5zIG51bGwuXG4gIC8vXG4gIC8vIFRoZSByb3RhdGlvbiBmYWxsYmFjayBpcyByZXNvbHZlZCBGSVJTVCwgYW5kIG9uIGJvdGggcGF0aHMuIEl0IHVzZWQgdG8gYmVcbiAgLy8gcmVzb2x2ZWQgb25seSBhZnRlciB0aGUgS01TIHByaW1hcnkgd2FzIGluc3RhbGxlZCwgYmVsb3cg4oCUIHNvIHdpdGggYW4gZW52XG4gIC8vIFBSSU1BUlkgdGhpcyBmdW5jdGlvbiByZXR1cm5lZCBoZXJlIGFuZCBgU0VDUkVUX0VOQ1JZUFRJT05fS01TX0NJUEhFUlRFWFRfXG4gIC8vIFBSRVZJT1VTYCB3YXMgbmV2ZXIgcmVhZCBhdCBhbGwuIFRoZSBsYXp5IGBnZXRQcmV2aW91c1Byb3ZpZGVyKClgIGtub3dzXG4gIC8vIG9ubHkgdGhlIHBsYWludGV4dCBlbnYgdmFyLCBzbyBhIEtNUy13cmFwcGVkIG91dGdvaW5nIG1hc3RlciB3YXMgc2lsZW50bHlcbiAgLy8gaWdub3JlZCBhbmQgZXZlcnkgcm93IHN0aWxsIHdyaXR0ZW4gdW5kZXIgaXQgZmFpbGVkIHRvIGRlY3J5cHQgd2l0aCBhblxuICAvLyBvcGFxdWUgYXV0aC10YWcgZXJyb3IuIGByZWVuY3J5cHQtc2VjcmV0c2AgY291bnRzIHRoYXQgc2FtZSB2YXIgYXNcbiAgLy8gYHByZXZpb3VzS2V5Q29uZmlndXJlZGAsIHNvIHRoZSB0b29sIHJlcG9ydGVkIGl0c2VsZiByZWFkeSB0byBydW4gYVxuICAvLyByb3RhdGlvbiB3aG9zZSByZWFkcyBjb3VsZCBub3Qgc3VjY2VlZC5cbiAgYXdhaXQgaW5pdFByZXZpb3VzUHJvdmlkZXIoKTtcblxuICBpZiAoIWtleUlkIHx8ICFjaXBoZXJ0ZXh0KSByZXR1cm4geyBwcm92aWRlcjogbnVsbCwgbW9kZTogJ2VudicgfTtcblxuICBjb25zdCBwcm92aWRlciA9IG5ldyBLbXNLZXlQcm92aWRlcih7IGtleUlkLCBjaXBoZXJ0ZXh0QmFzZTY0OiBjaXBoZXJ0ZXh0IH0pO1xuICBhd2FpdCBwcm92aWRlci53YXJtdXAoKTtcbiAgc2V0S2V5UHJvdmlkZXIocHJvdmlkZXIpO1xuICByZXR1cm4geyBwcm92aWRlciwgbW9kZTogJ2ttcycgfTtcbn1cblxuLyoqIFJlc2V0IHRoZSBjYWNoZWQgZGVmYXVsdCAoYW5kIHByZXZpb3VzKSBwcm92aWRlciAgZm9yIHRlc3RzIHRoYXQgbXV0YXRlIGBwcm9jZXNzLmVudmAuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXREZWZhdWx0S2V5UHJvdmlkZXIoKTogdm9pZCB7IGRlZmF1bHRQcm92aWRlciA9IG51bGw7IHByZXZpb3VzUHJvdmlkZXIgPSB1bmRlZmluZWQ7IH1cblxuLyoqIFJlcGxhY2UgdGhlIGRlZmF1bHQgcHJvdmlkZXIgIHNlcnZpY2VzIHRoYXQgb3B0IGludG8gS01TIGNhbGwgdGhpc1xuICogb25jZSBhdCBzdGFydHVwIHdpdGggYSB3YXJtZWQtdXAgYEttc0tleVByb3ZpZGVyYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRLZXlQcm92aWRlcihwcm92aWRlcjogS2V5UHJvdmlkZXIpOiB2b2lkIHsgZGVmYXVsdFByb3ZpZGVyID0gcHJvdmlkZXI7IH1cblxuLyoqIFBlci1vcmcgS01TIGNvbmZpZyB0aGUgb3BlcmF0b3Igc3VwcGxpZXMuIFRoZSBga2V5SWRgIGlkZW50aWZpZXMgdGhlXG4gKiAgS01TIENNSyB0byBjYWxsIERlY3J5cHQgb247IGBjaXBoZXJ0ZXh0QmFzZTY0YCBpcyB0aGUgd3JhcHBlZCAzMi1ieXRlXG4gKiAgbWFzdGVyIGdlbmVyYXRlZCBieSBgYXdzIGttcyBlbmNyeXB0YCBhZ2FpbnN0IHRoYXQga2V5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBQZXJPcmdLbXNDb25maWcge1xuICBrZXlJZDogc3RyaW5nO1xuICBjaXBoZXJ0ZXh0QmFzZTY0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQXN5bmMgcmVzb2x2ZXIgdGhhdCBtYXBzIGFuIG9yZyBpZCB0byBpdHMgS01TIGNvbmZpZy4gUmV0dXJucyBgbnVsbGAgd2hlblxuICogdGhlIG9yZyBoYXMgbm8gcGVyLW9yZyBjb25maWcg4oCUIHRoZSBwcm92aWRlciB0aGVuIGZhbGxzIGJhY2sgdG8gdGhlXG4gKiBgZmFsbGJhY2tgIHByb3ZpZGVyIHN1cHBsaWVkIGF0IGNvbnN0cnVjdGlvbiAodXN1YWxseSBhbiBFbnZLZXlQcm92aWRlclxuICogb3IgYSBkZWZhdWx0IEttc0tleVByb3ZpZGVyKS5cbiAqL1xuZXhwb3J0IHR5cGUgUGVyT3JnS21zUmVzb2x2ZXIgPSAob3JnSWQ6IHN0cmluZykgPT4gUHJvbWlzZTxQZXJPcmdLbXNDb25maWcgfCBudWxsPjtcblxuLyoqXG4gKiBQZXItb3JnIEtNUy1iYWNrZWQgS2V5UHJvdmlkZXIuIFRoZSBibGFzdCByYWRpdXMgb2YgYSBLTVMga2V5IGNvbXByb21pc2VcbiAqIGlzIG9uZSBvcmcgaW5zdGVhZCBvZiBldmVyeSBvcmcgdW5kZXIgYSBzaGFyZWQgbWFzdGVyLlxuICpcbiAqIEVhY2ggb3JnIGhhcyBpdHMgb3duIEtNUyBDTUsgKyBpdHMgb3duIHdyYXBwZWQgbWFzdGVyIChzdG9yZWQgaW4gTW9uZ29cbiAqIHZpYSB0aGUgb3BlcmF0b3IncyBzZXR1cCBzY3JpcHQpLiBPbiBmaXJzdCBlbmNyeXB0L2RlY3J5cHQgZm9yIGFuIG9yZyxcbiAqIHRoZSBwcm92aWRlcjpcbiAqICAgMS4gQ2FsbHMgdGhlIHJlc29sdmVyIHRvIGZldGNoIHRoZSBvcmcncyBLTVMgY29uZmlnLlxuICogICAyLiBDYWxscyBga21zOkRlY3J5cHRgIHRvIHJlY292ZXIgdGhlIDMyLWJ5dGUgbWFzdGVyLlxuICogICAzLiBDYWNoZXMgdGhlIHJlY292ZXJlZCBtYXN0ZXIgaW4tbWVtb3J5IGZvciB0aGUgcHJvY2VzcyBsaWZldGltZS5cbiAqICAgNC4gSEtERi1kZXJpdmVzIHBlci1jYWxsIGZyb20gdGhhdCBtYXN0ZXIgKyB0aGUgb3JnIGlkIHNhbHQuXG4gKlxuICogQmxvYnMgZW5jcnlwdGVkIGJ5IHRoaXMgcHJvdmlkZXIgY2FycnkgYGtpZCA9IDxrbXMta2V5LWlkPmAgc28gdGhlXG4gKiBkZWNyeXB0IHBhdGggZGV0ZWN0cyBhIHN0YWxlIGNvbmZpZyAob3BlcmF0b3Igcm90YXRlZCB0aGUga2V5IGJ1dFxuICogZXhpc3Rpbmcgcm93cyB3ZXJlbid0IHJlLWVuY3J5cHRlZCkgQkVGT1JFIEFFUy1HQ00gdGhyb3dzIGFuIG9wYXF1ZVxuICogYXV0aGVudGljYXRpb24tdGFnIGVycm9yLlxuICpcbiAqIE9yZ3Mgd2l0aG91dCBwZXItb3JnIGNvbmZpZyBmYWxsIHRocm91Z2ggdG8gdGhlIGBmYWxsYmFja2AgcHJvdmlkZXIg4oCUXG4gKiBtaXhlZC1tb2RlIGRlcGxveW1lbnRzIHdoZXJlIHNvbWUgb3JncyBoYXZlIEtNUyBpc29sYXRpb24gYW5kIG90aGVyc1xuICogc3RheSBvbiB0aGUgc2hhcmVkIG1hc3RlciBhcmUgZXhwbGljaXRseSBzdXBwb3J0ZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBQZXJPcmdLbXNLZXlQcm92aWRlciBpbXBsZW1lbnRzIEtleVByb3ZpZGVyIHtcbiAgLyoqIENhY2hlZCBwZXItb3JnIG1hc3RlciBrZXlzLCBrZXllZCBieSBvcmdJZC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBtYXN0ZXJzID0gbmV3IE1hcDxzdHJpbmcsIHsga2V5OiBCdWZmZXI7IGtpZDogc3RyaW5nIH0+KCk7XG4gIC8qKiBSZXNvbHZlZCBwZXItb3JnIGNvbmZpZ3MgY2FjaGVkIGZvciB0aGUgcHJvY2VzcyBsaWZldGltZS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWdzID0gbmV3IE1hcDxzdHJpbmcsIFBlck9yZ0ttc0NvbmZpZz4oKTtcbiAgLyoqIEluLWZsaWdodCByZXNvbHZlciBwcm9taXNlcyBzbyBjb25jdXJyZW50IGZpcnN0LXRvdWNoIGNhbGxlcnMgc2hhcmUgb25lIEtNUyBEZWNyeXB0LlxuICAgKiAgUmVzb2x2ZXMgdG8gYG51bGxgIGZvciBvcmdzIHdpdGggbm8gcGVyLW9yZyBjb25maWcg4oCUIGNhbGxlciB0cmVhdHMgbnVsbCBhc1xuICAgKiAgXCJmYWxsIHRocm91Z2ggdG8gdGhlIGZhbGxiYWNrIHByb3ZpZGVyXCIsIHNhbWUgYXMgYSBjb2xkIGNhY2hlIG1pc3MuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgaW5GbGlnaHQgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTx7IGtleTogQnVmZmVyOyBraWQ6IHN0cmluZyB9IHwgbnVsbD4+KCk7XG4gIC8qKiBPcmdzIHRoZSByZXNvbHZlciBoYXMgUFJPVkVOIGhhdmUgbm8gcGVyLW9yZyBjb25maWcg4oCUIHRoZSBmYWxsYmFjayBwcm92aWRlclxuICAgKiAgaXMgdGhlIGNvcnJlY3QgYW5zd2VyIGZvciB0aGVzZSwgYW5kIGBkZXJpdmVLZXlgIG1heSBzZXJ2ZSB0aGVtXG4gICAqICBzeW5jaHJvbm91c2x5LiBEaXN0aW5jdCBmcm9tIFwibm90IHlldCByZXNvbHZlZFwiLCB3aGljaCBtdXN0IG5vdCBndWVzcy4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSByZXNvbHZlZE5vUGVyT3JnQ29uZmlnID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIC8qKiBQcm92aWRlciB1c2VkIGZvciBvcmdzIHRoYXQgaGF2ZSBubyBwZXItb3JnIGNvbmZpZy4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBmYWxsYmFjazogS2V5UHJvdmlkZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb2x2ZXI6IFBlck9yZ0ttc1Jlc29sdmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihvcHRzOiB7XG4gICAgcmVzb2x2ZXI6IFBlck9yZ0ttc1Jlc29sdmVyO1xuICAgIGZhbGxiYWNrOiBLZXlQcm92aWRlcjtcbiAgICByZWdpb24/OiBzdHJpbmc7XG4gICAgZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIH0pIHtcbiAgICB0aGlzLnJlc29sdmVyID0gb3B0cy5yZXNvbHZlcjtcbiAgICB0aGlzLmZhbGxiYWNrID0gb3B0cy5mYWxsYmFjaztcbiAgICB0aGlzLnJlZ2lvbiA9IG9wdHMucmVnaW9uID8/IHByb2Nlc3MuZW52LkFXU19SRUdJT04gPz8gcHJvY2Vzcy5lbnYuQVdTX0RFRkFVTFRfUkVHSU9OO1xuICAgIHRoaXMuZW5kcG9pbnQgPSBvcHRzLmVuZHBvaW50ID8/IHByb2Nlc3MuZW52LkFXU19LTVNfRU5EUE9JTlQ7XG4gIH1cblxuICAvKipcbiAgICogU3luYyBkZXJpdmUuIE9ubHkgY29ycmVjdCBmb3IgYW4gb3JnIHdob3NlIGNvbmZpZyBoYXMgYWxyZWFkeSBiZWVuXG4gICAqIFJFU09MVkVEIOKAlCBlaXRoZXIgaXQgaGFzIGEgcGVyLW9yZyBtYXN0ZXIgKHVzZSBpdCkgb3IgaXQgcHJvdmFibHkgaGFzIG5vXG4gICAqIHBlci1vcmcgY29uZmlnICh0aGUgZmFsbGJhY2sgaXMgdGhlbiB0aGUgcmlnaHQgYW5zd2VyKS5cbiAgICpcbiAgICogRm9yIGFuIFVOUkVTT0xWRUQgb3JnIHRoaXMgVEhST1dTIHJhdGhlciB0aGFuIGd1ZXNzaW5nLiBGYWxsaW5nIHRocm91Z2ggdG9cbiAgICogdGhlIGZhbGxiYWNrIHdvdWxkIHNpbGVudGx5IGVuY3J5cHQgdGhhdCBvcmcncyBzZWNyZXRzIHVuZGVyIHRoZSBTSEFSRURcbiAgICogbWFzdGVyIGFuZCDigJQgYmVjYXVzZSBga2lkRm9yYCBhbHNvIHJldHVybnMgdW5kZWZpbmVkLCBzbyB0aGVcbiAgICogYm90aC1raWRzLXByZXNlbnQgbWlzbWF0Y2ggZ3VhcmQgY291bGQgbmV2ZXIgZmlyZSDigJQgbGVhdmUgdGhlbSBwZXJtYW5lbnRseVxuICAgKiB1bmRlY3J5cHRhYmxlIG9uY2UgdGhlIG9yZyB3YXJtZWQgKGBkZWNpcGhlci5maW5hbCgpYCB0aHJvd3MgYW4gb3BhcXVlXG4gICAqIGF1dGgtdGFnIGVycm9yIHdpdGggbm8gZGlhZ25vc3RpYykuIEZhaWxpbmcgbG91ZCBoZXJlIG1hdGNoZXNcbiAgICogYEttc0tleVByb3ZpZGVyLmRlcml2ZUtleWAsIHdoaWNoIHJlZnVzZXMgdG8gd29yayBjb2xkLlxuICAgKlxuICAgKiBgZW5jcnlwdFNlY3JldGAvYGRlY3J5cHRTZWNyZXRgIGFyZSBhc3luYyBhbmQgYXdhaXQgYGRlcml2ZUtleUFzeW5jYCwgc29cbiAgICogdGhleSByZXNvbHZlIHRoZSBvcmcgZmlyc3QgYW5kIG5ldmVyIGhpdCB0aGlzIHBhdGg7IGl0IGlzIHRoZSBiYWNrc3RvcCBmb3JcbiAgICogYSBjYWxsZXIgdGhhdCByZWFjaGVzIGZvciB0aGUgc3luYyBBUEkgZGlyZWN0bHkuXG4gICAqL1xuICBkZXJpdmVLZXkob3JnSWQ6IHN0cmluZyk6IEJ1ZmZlciB7XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy5tYXN0ZXJzLmdldChvcmdJZCk7XG4gICAgaWYgKCFjYWNoZWQpIHtcbiAgICAgIGlmICh0aGlzLnJlc29sdmVkTm9QZXJPcmdDb25maWcuaGFzKG9yZ0lkKSkgcmV0dXJuIHRoaXMuZmFsbGJhY2suZGVyaXZlS2V5KG9yZ0lkKTtcbiAgICAgIHRocm93IG5ldyBFcnJvciggYFBlck9yZ0ttc0tleVByb3ZpZGVyIGhhcyBub3QgcmVzb2x2ZWQgb3JnICR7b3JnSWR9LiBgXG4gICAgICAgICsgJ0NhbGwgYGF3YWl0IHByb3ZpZGVyLmVuc3VyZVdhcm1lZChvcmdJZClgIChvciB1c2UgdGhlIGFzeW5jIGVuY3J5cHRTZWNyZXQvZGVjcnlwdFNlY3JldCkgJ1xuICAgICAgICArICdiZWZvcmUgZGVyaXZpbmcgYSBrZXkg4oCUIGd1ZXNzaW5nIHRoZSBzaGFyZWQgbWFzdGVyIHdvdWxkIHdyaXRlIHNlY3JldHMgdGhhdCBjYW5ub3QgYmUgZGVjcnlwdGVkIGxhdGVyLicsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBkZXJpdmVkID0gaGtkZlN5bmMoJ3NoYTI1NicsIGNhY2hlZC5rZXksIEJ1ZmZlci5mcm9tKG9yZ0lkLCAndXRmOCcpLCAnc2VjcmV0cy12MScsIDMyKTtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oZGVyaXZlZCk7XG4gIH1cblxuICBhc3luYyBkZXJpdmVLZXlBc3luYyhvcmdJZDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVdhcm1lZChvcmdJZCk7XG4gICAgcmV0dXJuIHRoaXMuZGVyaXZlS2V5KG9yZ0lkKTtcbiAgfVxuXG4gIGtpZEZvcihvcmdJZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLm1hc3RlcnMuZ2V0KG9yZ0lkKTtcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkLmtpZDtcbiAgICAvLyBPbmx5IHNwZWFrIGZvciBhbiBvcmcgd2hvc2UgY29uZmlnIGlzIHJlc29sdmVkOyBhbiB1bnJlc29sdmVkIG9yZyBoYXMgbm9cbiAgICAvLyBtZWFuaW5nZnVsIGtpZCwgYW5kIGNsYWltaW5nIG9uZSB3b3VsZCBkZWZlYXQgdGhlIG1pc21hdGNoIGd1YXJkLlxuICAgIGlmICh0aGlzLnJlc29sdmVkTm9QZXJPcmdDb25maWcuaGFzKG9yZ0lkKSkgcmV0dXJuIHRoaXMuZmFsbGJhY2sua2lkRm9yPy4ob3JnSWQpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgb3JnJ3MgS01TIGNvbmZpZywgY2FsbCBEZWNyeXB0LCBjYWNoZSB0aGUgbWFzdGVyLiBTdWJzZXF1ZW50XG4gICAqIGNhbGxzIGZvciB0aGUgc2FtZSBvcmcgYXJlIG5vLW9wcy4gQ29uY3VycmVudCBjYWxsZXJzIHNoYXJlIHRoZSBpbi1mbGlnaHRcbiAgICogRGVjcnlwdCBwcm9taXNlLlxuICAgKlxuICAgKiBSZXR1cm5zIHNpbGVudGx5IHdoZW4gdGhlIG9yZyBoYXMgbm8gcGVyLW9yZyBjb25maWcg4oCUIHRoZSBmYWxsYmFja1xuICAgKiBwcm92aWRlciBoYW5kbGVzIHRob3NlIG9yZ3MuXG4gICAqL1xuICBhc3luYyBlbnN1cmVXYXJtZWQob3JnSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLm1hc3RlcnMuaGFzKG9yZ0lkKSkgcmV0dXJuO1xuICAgIC8vIEluc3RhbGwgdGhlIGluLWZsaWdodCBwcm9taXNlIFNZTkNIUk9OT1VTTFkgYmVmb3JlIHlpZWxkaW5nIHNvIGNvbmN1cnJlbnRcbiAgICAvLyBjYWxsZXJzIGZpbmQgaXQgb24gdGhlIHNlY29uZC1hbmQtbGF0ZXIgcGFzc2VzLiBBd2FpdGluZyB0aGUgcmVzb2x2ZXJcbiAgICAvLyBiZWZvcmUgcG9wdWxhdGluZyB0aGUgbWFwIGlzIHRoZSBidWcgdGhhdCBsZXRzIGEgUHJvbWlzZS5hbGwgb2YgM1xuICAgIC8vIGNhbGxlcnMgZmlyZSAzIEtNUyBEZWNyeXB0cy5cbiAgICBsZXQgcHJvbWlzZSA9IHRoaXMuaW5GbGlnaHQuZ2V0KG9yZ0lkKTtcbiAgICBpZiAoIXByb21pc2UpIHtcbiAgICAgIHByb21pc2UgPSB0aGlzLnJlc29sdmVBbmREZWNyeXB0KG9yZ0lkKTtcbiAgICAgIHRoaXMuaW5GbGlnaHQuc2V0KG9yZ0lkLCBwcm9taXNlKTtcbiAgICAgIHZvaWQgcHJvbWlzZS5maW5hbGx5KCgpID0+IHsgaWYgKHRoaXMuaW5GbGlnaHQuZ2V0KG9yZ0lkKSA9PT0gcHJvbWlzZSkgdGhpcy5pbkZsaWdodC5kZWxldGUob3JnSWQpOyB9KTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvbWlzZTtcbiAgICBpZiAocmVzdWx0KSB0aGlzLm1hc3RlcnMuc2V0KG9yZ0lkLCByZXN1bHQpO1xuICAgIC8vIFJlbWVtYmVyIHRoZSBORUdBVElWRSBvdXRjb21lIHRvbywgc28gdGhlIHN5bmMgYGRlcml2ZUtleWAgY2FuIHRlbGxcbiAgICAvLyBcIm5vIHBlci1vcmcgY29uZmlnLCBmYWxsYmFjayBpcyBjb3JyZWN0XCIgZnJvbSBcIm5vdCByZXNvbHZlZCB5ZXRcIi5cbiAgICBlbHNlIHRoaXMucmVzb2x2ZWROb1Blck9yZ0NvbmZpZy5hZGQob3JnSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXNvbHZlQW5kRGVjcnlwdChvcmdJZDogc3RyaW5nKTogUHJvbWlzZTx7IGtleTogQnVmZmVyOyBraWQ6IHN0cmluZyB9IHwgbnVsbD4ge1xuICAgIGxldCBjZmcgPSB0aGlzLmNvbmZpZ3MuZ2V0KG9yZ0lkKTtcbiAgICBpZiAoIWNmZykge1xuICAgICAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCB0aGlzLnJlc29sdmVyKG9yZ0lkKTtcbiAgICAgIGlmICghcmVzb2x2ZWQpIHJldHVybiBudWxsOyAvLyBubyBwZXItb3JnIGNvbmZpZyDihpIgY2FsbGVyIHVzZXMgZmFsbGJhY2tcbiAgICAgIGNmZyA9IHJlc29sdmVkO1xuICAgICAgdGhpcy5jb25maWdzLnNldChvcmdJZCwgY2ZnKTtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gYXdhaXQgdGhpcy5mZXRjaEFuZERlY3J5cHQoY2ZnKTtcbiAgICByZXR1cm4geyBrZXksIGtpZDogY2ZnLmtleUlkIH07XG4gIH1cblxuICBwcml2YXRlIGZldGNoQW5kRGVjcnlwdChjZmc6IFBlck9yZ0ttc0NvbmZpZyk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgcmV0dXJuIGttc0RlY3J5cHQzMihjZmcua2V5SWQsIGNmZy5jaXBoZXJ0ZXh0QmFzZTY0LCB0aGlzLnJlZ2lvbiwgdGhpcy5lbmRwb2ludCk7XG4gIH1cblxuICAvKiogRXZpY3QgYSBjYWNoZWQgcGVyLW9yZyBtYXN0ZXIuIFVzZSBhZnRlciBhIGtleSByb3RhdGlvbiBzbyB0aGUgbmV4dFxuICAgKiAgdG91Y2ggcmUtZmV0Y2hlcyB0aGUgbmV3IHdyYXBwZWQgbWFzdGVyIGZyb20gdGhlIHJlc29sdmVyLiAqL1xuICBldmljdChvcmdJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5tYXN0ZXJzLmRlbGV0ZShvcmdJZCk7XG4gICAgdGhpcy5jb25maWdzLmRlbGV0ZShvcmdJZCk7XG4gICAgLy8gQWxzbyBmb3JnZXQgYSBORUdBVElWRSByZXNvbHV0aW9uLCBvciBhbiBvcmcgdGhhdCBnYWlucyBhIHBlci1vcmcgY29uZmlnXG4gICAgLy8gYWZ0ZXIgYmVpbmcgcmVzb2x2ZWQgYXMgXCJubyBjb25maWdcIiB3b3VsZCBrZWVwIHVzaW5nIHRoZSBzaGFyZWQgbWFzdGVyLlxuICAgIHRoaXMucmVzb2x2ZWROb1Blck9yZ0NvbmZpZy5kZWxldGUob3JnSWQpO1xuICB9XG59XG5cbi8qKlxuICogRGVyaXZlIHRoZSBrZXkgZm9yIGBvcmdJZGAsIGdpdmluZyB0aGUgcHJvdmlkZXIgYSBjaGFuY2UgdG8gZG8gSS9PIGZpcnN0LlxuICpcbiAqIFRoaXMgaXMgd2h5IGBlbmNyeXB0U2VjcmV0YC9gZGVjcnlwdFNlY3JldGAgYXJlIGFzeW5jOiBgUGVyT3JnS21zS2V5UHJvdmlkZXJgXG4gKiBuZWVkcyBvbmUgS01TIERlY3J5cHQgdGhlIGZpcnN0IHRpbWUgaXQgc2VlcyBhbiBvcmcsIGFuZCBkZXJpdmluZ1xuICogc3luY2hyb25vdXNseSBiZWZvcmUgdGhhdCByZXNvbHZlcyB3b3VsZCBzaWxlbnRseSBmYWxsIGJhY2sgdG8gdGhlIHNoYXJlZFxuICogbWFzdGVyIGFuZCBwcm9kdWNlIHNlY3JldHMgdGhhdCBjYW5ub3QgYmUgZGVjcnlwdGVkIGFmdGVyd2FyZHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlcml2ZUtleUZvcihwcm92aWRlcjogS2V5UHJvdmlkZXIsIG9yZ0lkOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICByZXR1cm4gcHJvdmlkZXIuZGVyaXZlS2V5QXN5bmMgPyBwcm92aWRlci5kZXJpdmVLZXlBc3luYyhvcmdJZCkgOiBwcm92aWRlci5kZXJpdmVLZXkob3JnSWQpO1xufVxuXG4vKipcbiAqIEVuY3J5cHQgYSBwbGFpbnRleHQgc3RyaW5nIGZvciBzdG9yYWdlLiBSZXR1cm5zIGFuIGBFbmNyeXB0ZWRCbG9iYCB0aGF0XG4gKiBjYW4gYmUgSlNPTi1zZXJpYWxpemVkIGludG8gdGhlIHVuZGVybHlpbmcgY29sdW1uIC8gTW9uZ28gZG9jdW1lbnQuXG4gKlxuICogRW1wdHkgc3RyaW5ncyByb3VuZC10cmlwIGFzIGBudWxsYCBzbyB0aGUgY2FsbGluZyBtb2RlbCBsYXllciBjYW4gdHJlYXRcbiAqIFwibm8gc2VjcmV0IHNldFwiIGlkZW50aWNhbGx5IHRvIFwiZmllbGQgYWJzZW50XCIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbmNyeXB0U2VjcmV0KCBwbGFpbnRleHQ6IHN0cmluZyxcbiAgb3JnSWQ6IHN0cmluZyxcbiAgcHJvdmlkZXI6IEtleVByb3ZpZGVyID0gZ2V0RGVmYXVsdFByb3ZpZGVyKCksXG4pOiBQcm9taXNlPEVuY3J5cHRlZEJsb2I+IHtcbiAgaWYgKCFwbGFpbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZnVzaW5nIHRvIGVuY3J5cHQgZW1wdHkgc3RyaW5nOyBjYWxsZXIgc2hvdWxkIHN0b3JlIG51bGwgaW5zdGVhZCcpO1xuICB9XG4gIC8vIFJlc29sdmUgKGFuZCB3YXJtKSB0aGUgb3JnIEJFRk9SRSByZWFkaW5nIGBraWRGb3JgIGJlbG93LCBzbyBhIHBlci1vcmcgS01TXG4gIC8vIGJsb2IgaXMgYWx3YXlzIHN0YW1wZWQgd2l0aCB0aGUga2V5IGl0IHdhcyBhY3R1YWxseSBlbmNyeXB0ZWQgdW5kZXIuXG4gIGNvbnN0IGtleSA9IGF3YWl0IGRlcml2ZUtleUZvcihwcm92aWRlciwgb3JnSWQpO1xuICBjb25zdCBpdiA9IHJhbmRvbUJ5dGVzKDEyKTtcbiAgY29uc3QgY2lwaGVyID0gY3JlYXRlQ2lwaGVyaXYoJ2Flcy0yNTYtZ2NtJywga2V5LCBpdik7XG4gIGNvbnN0IGVuYyA9IEJ1ZmZlci5jb25jYXQoW2NpcGhlci51cGRhdGUocGxhaW50ZXh0LCAndXRmOCcpLCBjaXBoZXIuZmluYWwoKV0pO1xuICBjb25zdCB0YWcgPSBjaXBoZXIuZ2V0QXV0aFRhZygpO1xuICAvLyBQZXJPcmdLbXNLZXlQcm92aWRlciB0YWdzIGJsb2JzIHdpdGggdGhlIEtNUyBrZXkgaWQgdXNlZCBzbyB0aGVcbiAgLy8gZGVjcnlwdCBwYXRoIGNhbiByZWZ1c2UgdG8gb3BlcmF0ZSBpZiB0aGUgb3BlcmF0b3IgbGF0ZXIgc3dhcHMgaW4gYVxuICAvLyBkaWZmZXJlbnQgcGVyLW9yZyBjb25maWcgKGEgbWlzY29uZmlndXJlZCBzd2FwIHNob3VsZG4ndCBzaWxlbnRseVxuICAvLyBhY2NlcHQgYSBzdGFsZSBibG9iIGl0IGNhbid0IHZlcmlmeSBhZ2FpbnN0IHRoZSByaWdodCBDTUspLlxuICBjb25zdCBraWQgPSBwcm92aWRlci5raWRGb3I/LihvcmdJZCk7XG4gIHJldHVybiB7XG4gICAgYWxnOiAnYWVzLTI1Ni1nY20tdjEnLFxuICAgIGl2OiBpdi50b1N0cmluZygnYmFzZTY0JyksXG4gICAgLy8gR0NNIHRhZyBNVVNUIHRyYXZlbCB3aXRoIHRoZSBjaXBoZXJ0ZXh0IG9yIGBkZWNyeXB0U2VjcmV0YCBjYW4ndFxuICAgIC8vIHZlcmlmeSBpbnRlZ3JpdHkgIGNvbmNhdGVuYXRlIHNvIHRoZSBvbi1kaXNrIHNoYXBlIGlzIG9uZSBmaWVsZC5cbiAgICBjaXBoZXJ0ZXh0OiBCdWZmZXIuY29uY2F0KFtlbmMsIHRhZ10pLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAuLi4oa2lkICE9PSB1bmRlZmluZWQgPyB7IGtpZCB9IDoge30pLFxuICB9O1xufVxuXG4vKipcbiAqIERlY3J5cHQgYW4gYEVuY3J5cHRlZEJsb2JgIHdyaXR0ZW4gYnkgYGVuY3J5cHRTZWNyZXRgLiBUaHJvd3Mgb24gKiAtIHVua25vd24gYGFsZ2AgKGZvcmNlcyBhbiBleHBsaWNpdCBtaWdyYXRpb24gd2hlbiB0aGUgZm9ybWF0IGNoYW5nZXMpXG4gKiAtIHdyb25nIG9yZ0lkIChIS0RGIGJpbmRpbmcgbWlzbWF0Y2ggZmFpbHMgdGhlIGF1dGggdGFnKVxuICogLSB0YW1wZXJlZCBjaXBoZXJ0ZXh0IChHQ00gYXV0aCB0YWcgY2hlY2sgZmFpbHMpXG4gKlxuICogQ2FsbGVycyBoYW5kbGUgdGhlIHRocm93ICBtYXNraW5nIHRoZSBmYWlsdXJlIGFzIGBudWxsYCB3b3VsZCBoaWRlXG4gKiBzaWxlbnQgY29ycnVwdGlvbiAvIHdyb25nLW9yZyByZWFkcy5cbiAqXG4gKiBgcHJldmlvdXNgIChkZWZhdWx0OiBgU0VDUkVUX0VOQ1JZUFRJT05fS0VZX1BSRVZJT1VTYCwgd2hlbiBzZXQpIGlzIHRyaWVkXG4gKiBvbmx5IGFmdGVyIHRoZSBwcmltYXJ5IGtleSBmYWlscywgYW5kIG9ubHkgZm9yIGtpZC1sZXNzIGJsb2JzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVjcnlwdFNlY3JldCggYmxvYjogRW5jcnlwdGVkQmxvYixcbiAgb3JnSWQ6IHN0cmluZyxcbiAgcHJvdmlkZXI6IEtleVByb3ZpZGVyID0gZ2V0RGVmYXVsdFByb3ZpZGVyKCksXG4gIHByZXZpb3VzOiBLZXlQcm92aWRlciB8IG51bGwgPSBnZXRQcmV2aW91c1Byb3ZpZGVyKCksXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoYmxvYi5hbGcgIT09ICdhZXMtMjU2LWdjbS12MScpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGVuY3J5cHRpb24gYWxnOiAke2Jsb2IuYWxnfWApO1xuICB9XG4gIC8vIFdhcm0gZmlyc3Q6IGBraWRGb3JgIGFuZCBgZGVyaXZlS2V5YCBiZWxvdyBtdXN0IGJvdGggc3BlYWsgZm9yIHRoZSBvcmcnc1xuICAvLyByZWFsIGNvbmZpZywgb3IgdGhlIG1pc21hdGNoIGd1YXJkIHNpbGVudGx5IG5vLW9wcy5cbiAgY29uc3Qga2V5ID0gYXdhaXQgZGVyaXZlS2V5Rm9yKHByb3ZpZGVyLCBvcmdJZCk7XG4gIC8vIElmIGJvdGggdGhlIHByb3ZpZGVyIEFORCB0aGUgYmxvYiByZXBvcnQgYSBraWQsIHRoZXkgbXVzdCBtYXRjaC5cbiAgLy8gTWlzbWF0Y2ggdXN1YWxseSBtZWFucyBhbiBvcGVyYXRvciByb3RhdGVkL3JlcGxhY2VkIGFuIG9yZydzIEtNU1xuICAvLyBjb25maWcgYW5kIGlzIG5vdyByZWFkaW5nIGEgYmxvYiBlbmNyeXB0ZWQgdW5kZXIgdGhlIE9MRCBrZXkg4oCUXG4gIC8vIGZhaWxpbmcgbG91ZCBoZXJlIGJlYXRzIGxldHRpbmcgQUVTLUdDTSB0aHJvdyBhbiBvcGFxdWUgYXV0aC10YWcgZXJyb3IuXG4gIGNvbnN0IHByb3ZpZGVyS2lkID0gcHJvdmlkZXIua2lkRm9yPy4ob3JnSWQpO1xuICBpZiAocHJvdmlkZXJLaWQgIT09IHVuZGVmaW5lZCAmJiBibG9iLmtpZCAhPT0gdW5kZWZpbmVkICYmIHByb3ZpZGVyS2lkICE9PSBibG9iLmtpZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgS01TIGtleSBpZCBtaXNtYXRjaDogYmxvYiB3YXMgZW5jcnlwdGVkIHVuZGVyICR7YmxvYi5raWR9LCBjdXJyZW50IHByb3ZpZGVyIHVzZXMgJHtwcm92aWRlcktpZH0gZm9yIG9yZyAke29yZ0lkfWApO1xuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRlY3J5cHRXaXRoS2V5KGJsb2IsIGtleSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIE1hc3Rlci1rZXkgcm90YXRpb24gd2luZG93OiByZXRyeSB1bmRlciBTRUNSRVRfRU5DUllQVElPTl9LRVlfUFJFVklPVVMuXG4gICAgLy8gT25seSBmb3IgYSBraWQtbGVzcyBibG9iICh0aGUgZW52LWtleWVkIHNoYXBlKSDigJQgYSBwZXItb3JnIEtNUyBibG9iIGlzXG4gICAgLy8gYm91bmQgdG8gaXRzIENNSyBhbmQgdGhlIHNoYXJlZCBwcmV2aW91cyBtYXN0ZXIgY2FuIG5ldmVyIG9wZW4gaXQuIFRoZVxuICAgIC8vIE9SSUdJTkFMIGVycm9yIHN1cmZhY2VzIHdoZW4gdGhlIHByZXZpb3VzIGtleSBmYWlscyB0b28sIHNvIGEgdGFtcGVyZWQgb3JcbiAgICAvLyB3cm9uZy1vcmcgYmxvYiBzdGlsbCBmYWlscyBsb3VkIGV4YWN0bHkgYXMgYmVmb3JlLlxuICAgIGlmIChwcmV2aW91cyAmJiBibG9iLmtpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZGVjcnlwdFdpdGhLZXkoYmxvYiwgYXdhaXQgZGVyaXZlS2V5Rm9yKHByZXZpb3VzLCBvcmdJZCkpO1xuICAgICAgfSBjYXRjaCB7IC8qIGZhbGwgdGhyb3VnaCB0byB0aGUgcHJpbWFyeSBlcnJvciAqLyB9XG4gICAgfVxuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG4vKiogQUVTLTI1Ni1HQ00gb3BlbiBvZiBhIGJsb2IgdW5kZXIgb25lIGRlcml2ZWQga2V5LiBUaHJvd3Mgb24gYW55IGF1dGgtdGFnIGZhaWx1cmUuICovXG5mdW5jdGlvbiBkZWNyeXB0V2l0aEtleShibG9iOiBFbmNyeXB0ZWRCbG9iLCBrZXk6IEJ1ZmZlcik6IHN0cmluZyB7XG4gIGNvbnN0IGl2ID0gQnVmZmVyLmZyb20oYmxvYi5pdiwgJ2Jhc2U2NCcpO1xuICBjb25zdCBhbGwgPSBCdWZmZXIuZnJvbShibG9iLmNpcGhlcnRleHQsICdiYXNlNjQnKTtcbiAgLy8gU3BsaXQgb2ZmIHRoZSAxNi1ieXRlIGF1dGggdGFnIGFwcGVuZGVkIGluIGVuY3J5cHRTZWNyZXQuIEFueSB0YW1wZXJpbmdcbiAgLy8gIHRvIGVpdGhlciB0aGUgY2lwaGVydGV4dCBPUiB0aGUgdGFnICBjYXVzZXMgdGhlIG5leHQgYGZpbmFsKClgIHRvXG4gIC8vIHRocm93IHdpdGggXCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGFcIi5cbiAgY29uc3QgdGFnID0gYWxsLnN1YmFycmF5KGFsbC5sZW5ndGggLSAxNik7XG4gIGNvbnN0IGVuYyA9IGFsbC5zdWJhcnJheSgwLCBhbGwubGVuZ3RoIC0gMTYpO1xuICBjb25zdCBkZWNpcGhlciA9IGNyZWF0ZURlY2lwaGVyaXYoJ2Flcy0yNTYtZ2NtJywga2V5LCBpdik7XG4gIGRlY2lwaGVyLnNldEF1dGhUYWcodGFnKTtcbiAgY29uc3QgZGVjID0gQnVmZmVyLmNvbmNhdChbZGVjaXBoZXIudXBkYXRlKGVuYyksIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgcmV0dXJuIGRlYy50b1N0cmluZygndXRmOCcpO1xufVxuXG4vKipcbiAqIFNoYXBlIGd1YXJkIGZvciBhIHBhcnNlZCBgRW5jcnlwdGVkQmxvYmAuIENhbGxlcnMgaG9sZCBhIHZhbHVlIHRoYXQgd2FzIEpTT04tXG4gKiBkZWNvZGVkIGZyb20gYSBzZWNyZXQgY29sdW1uIGFuZCBtdXN0IG5vdCBoYW5kIGFueXRoaW5nIGVsc2UgdG9cbiAqIGBkZWNyeXB0U2VjcmV0YDsgdGhpcyBuYXJyb3dzIGl0IChvciB0aGUgY2FsbGVyIHJlamVjdHMgdGhlIHZhbHVlKS4gQ2xlYXIgdGV4dFxuICogaXMgTk9UIGEgc3VwcG9ydGVkIHN0b3JlZCBmb3JtIOKAlCB0aGUgb25seSBjb25zdW1lciB0aHJvd3Mgb24gYSBub24tYmxvYi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW5jcnlwdGVkQmxvYih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEVuY3J5cHRlZEJsb2Ige1xuICByZXR1cm4gKCB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnXG4gICAgJiYgdmFsdWUgIT09IG51bGxcbiAgICAmJiAodmFsdWUgYXMgeyBhbGc/OiB1bmtub3duIH0pLmFsZyA9PT0gJ2Flcy0yNTYtZ2NtLXYxJ1xuICAgICYmIHR5cGVvZiAodmFsdWUgYXMgeyBpdj86IHVua25vd24gfSkuaXYgPT09ICdzdHJpbmcnXG4gICAgJiYgdHlwZW9mICh2YWx1ZSBhcyB7IGNpcGhlcnRleHQ/OiB1bmtub3duIH0pLmNpcGhlcnRleHQgPT09ICdzdHJpbmcnXG4gICk7XG59XG4iXX0=
|