@pipeline-builder/api-core 5.0.8 → 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/index.d.ts +1 -1
- package/lib/types/index.js +2 -2
- package/lib/types/plugin-scan.d.ts +91 -0
- package/lib/types/plugin-scan.js +98 -1
- package/lib/types/remote-audit-actions.d.ts +1 -1
- package/lib/types/remote-audit-actions.js +16 -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/lib/validation/plugin-base-images.d.ts +1 -1
- package/lib/validation/plugin-base-images.js +13 -13
- package/package.json +1 -1
|
@@ -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=
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* from. Listed here because neither the CLI nor the plugin service ships the
|
|
5
5
|
* repo; a pipeline-manager test fails when the list drifts from the tree.
|
|
6
6
|
*/
|
|
7
|
-
/** One `
|
|
7
|
+
/** One `plugin-<eco>-base` image a plugin can start `FROM`. */
|
|
8
8
|
export interface PluginBaseImage {
|
|
9
9
|
/** `--base` value. */
|
|
10
10
|
key: string;
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
export const PLUGIN_BASE_IMAGES = [
|
|
4
|
-
{ key: 'plugin', image: '
|
|
5
|
-
{ key: 'aws-cli', image: '
|
|
6
|
-
{ key: 'cpp', image: '
|
|
7
|
-
{ key: 'dotnet', image: '
|
|
8
|
-
{ key: 'go', image: '
|
|
9
|
-
{ key: 'jvm', image: '
|
|
10
|
-
{ key: 'node', image: '
|
|
11
|
-
{ key: 'php', image: '
|
|
12
|
-
{ key: 'python', image: '
|
|
13
|
-
{ key: 'ruby', image: '
|
|
14
|
-
{ key: 'rust', image: '
|
|
15
|
-
{ key: 'trivy', image: '
|
|
4
|
+
{ key: 'plugin', image: 'plugin-base:24.04', dir: '_plugin-base', provides: 'git, curl, jq, unzip, fetch-verified, run-logged (the root base)', smokeTest: 'bash --version && jq --version' },
|
|
5
|
+
{ key: 'aws-cli', image: 'plugin-aws-cli-base:1.0', dir: '_aws-cli-base', provides: 'AWS CLI v2', smokeTest: 'aws --version' },
|
|
6
|
+
{ key: 'cpp', image: 'plugin-cpp-base:1.0', dir: '_cpp-base', provides: 'C/C++ toolchain, CMake, Conan, Meson', smokeTest: 'cc --version && cmake --version' },
|
|
7
|
+
{ key: 'dotnet', image: 'plugin-dotnet-base:1.0', dir: '_dotnet-base', provides: 'one pinned .NET SDK', smokeTest: 'dotnet --version' },
|
|
8
|
+
{ key: 'go', image: 'plugin-go-base:1.0', dir: '_go-base', provides: 'one pinned Go', smokeTest: 'go version' },
|
|
9
|
+
{ key: 'jvm', image: 'plugin-jvm-base:1.0', dir: '_jvm-base', provides: 'Corretto JDK, Maven, Gradle, Kotlin', smokeTest: 'java -version && mvn --version' },
|
|
10
|
+
{ key: 'node', image: 'plugin-node-base:1.0', dir: '_node-base', provides: 'one pinned Node.js + npm', smokeTest: 'node --version && npm --version' },
|
|
11
|
+
{ key: 'php', image: 'plugin-php-base:1.0', dir: '_php-base', provides: 'one pinned PHP + Composer', smokeTest: 'php --version && composer --version' },
|
|
12
|
+
{ key: 'python', image: 'plugin-python-base:1.0', dir: '_python-base', provides: 'one pinned CPython + pip', smokeTest: 'python3 --version && pip3 --version' },
|
|
13
|
+
{ key: 'ruby', image: 'plugin-ruby-base:1.0', dir: '_ruby-base', provides: 'one pinned Ruby + Bundler', smokeTest: 'ruby --version && bundle --version' },
|
|
14
|
+
{ key: 'rust', image: 'plugin-rust-base:1.0', dir: '_rust-base', provides: 'one pinned Rust toolchain + clippy/rustfmt', smokeTest: 'cargo --version && rustc --version' },
|
|
15
|
+
{ key: 'trivy', image: 'plugin-trivy-base:1.0', dir: '_trivy-base', provides: 'trivy (two pinned versions)', smokeTest: 'trivy --version' },
|
|
16
16
|
];
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWJhc2UtaW1hZ2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZhbGlkYXRpb24vcGx1Z2luLWJhc2UtaW1hZ2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUF1QnRDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUErQjtJQUM1RCxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLGtFQUFrRSxFQUFFLFNBQVMsRUFBRSxnQ0FBZ0MsRUFBRTtJQUM3TCxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLHlCQUF5QixFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO0lBQzlILEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUscUJBQXFCLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsc0NBQXNDLEVBQUUsU0FBUyxFQUFFLGlDQUFpQyxFQUFFO0lBQzlKLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFO0lBQ3ZJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUU7SUFDL0csRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxxQ0FBcUMsRUFBRSxTQUFTLEVBQUUsZ0NBQWdDLEVBQUU7SUFDNUosRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSwwQkFBMEIsRUFBRSxTQUFTLEVBQUUsaUNBQWlDLEVBQUU7SUFDckosRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSwyQkFBMkIsRUFBRSxTQUFTLEVBQUUscUNBQXFDLEVBQUU7SUFDdkosRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSwwQkFBMEIsRUFBRSxTQUFTLEVBQUUscUNBQXFDLEVBQUU7SUFDL0osRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSwyQkFBMkIsRUFBRSxTQUFTLEVBQUUsb0NBQW9DLEVBQUU7SUFDekosRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSw0Q0FBNEMsRUFBRSxTQUFTLEVBQUUsb0NBQW9DLEVBQUU7SUFDMUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSw2QkFBNkIsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUU7Q0FDNUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBzaGFyZWQgcGx1Z2luIGJhc2UgaW1hZ2VzIChkZXBsb3kvcGx1Z2lucy9fYmFzZSk6IHdoYXQgYHBsdWdpbiBuZXdgXG4gKiBzY2FmZm9sZHMgYEZST01gIGFuZCB3aGF0IEFJIHBsdWdpbiBnZW5lcmF0aW9uIHRlbGxzIHRoZSBtb2RlbCB0byBzdGFydFxuICogZnJvbS4gTGlzdGVkIGhlcmUgYmVjYXVzZSBuZWl0aGVyIHRoZSBDTEkgbm9yIHRoZSBwbHVnaW4gc2VydmljZSBzaGlwcyB0aGVcbiAqIHJlcG87IGEgcGlwZWxpbmUtbWFuYWdlciB0ZXN0IGZhaWxzIHdoZW4gdGhlIGxpc3QgZHJpZnRzIGZyb20gdGhlIHRyZWUuXG4gKi9cblxuLyoqIE9uZSBgcGx1Z2luLTxlY28+LWJhc2VgIGltYWdlIGEgcGx1Z2luIGNhbiBzdGFydCBgRlJPTWAuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbkJhc2VJbWFnZSB7XG4gIC8qKiBgLS1iYXNlYCB2YWx1ZS4gKi9cbiAga2V5OiBzdHJpbmc7XG4gIC8qKiBJbWFnZSB0YWcgdGhlIERvY2tlcmZpbGUncyBgRlJPTWAgbmFtZXMuICovXG4gIGltYWdlOiBzdHJpbmc7XG4gIC8qKiBEaXJlY3RvcnkgdW5kZXIgZGVwbG95L3BsdWdpbnMvX2Jhc2UuICovXG4gIGRpcjogc3RyaW5nO1xuICAvKiogV2hhdCB0aGUgYmFzZSBwcm92aWRlcyBvbiB0b3Agb2YgdGhlIHJvb3QgYmFzZS4gKi9cbiAgcHJvdmlkZXM6IHN0cmluZztcbiAgLyoqIEEgY29tbWFuZCB0aGF0IHByb3ZlcyB0aGUgcnVudGltZSBpcyBvbiBQQVRIICh0aGUgc2NhZmZvbGQncyBzbW9rZVRlc3QpLiAqL1xuICBzbW9rZVRlc3Q6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IFBMVUdJTl9CQVNFX0lNQUdFUzogcmVhZG9ubHkgUGx1Z2luQmFzZUltYWdlW10gPSBbXG4gIHsga2V5OiAncGx1Z2luJywgaW1hZ2U6ICdwbHVnaW4tYmFzZToyNC4wNCcsIGRpcjogJ19wbHVnaW4tYmFzZScsIHByb3ZpZGVzOiAnZ2l0LCBjdXJsLCBqcSwgdW56aXAsIGZldGNoLXZlcmlmaWVkLCBydW4tbG9nZ2VkICh0aGUgcm9vdCBiYXNlKScsIHNtb2tlVGVzdDogJ2Jhc2ggLS12ZXJzaW9uICYmIGpxIC0tdmVyc2lvbicgfSxcbiAgeyBrZXk6ICdhd3MtY2xpJywgaW1hZ2U6ICdwbHVnaW4tYXdzLWNsaS1iYXNlOjEuMCcsIGRpcjogJ19hd3MtY2xpLWJhc2UnLCBwcm92aWRlczogJ0FXUyBDTEkgdjInLCBzbW9rZVRlc3Q6ICdhd3MgLS12ZXJzaW9uJyB9LFxuICB7IGtleTogJ2NwcCcsIGltYWdlOiAncGx1Z2luLWNwcC1iYXNlOjEuMCcsIGRpcjogJ19jcHAtYmFzZScsIHByb3ZpZGVzOiAnQy9DKysgdG9vbGNoYWluLCBDTWFrZSwgQ29uYW4sIE1lc29uJywgc21va2VUZXN0OiAnY2MgLS12ZXJzaW9uICYmIGNtYWtlIC0tdmVyc2lvbicgfSxcbiAgeyBrZXk6ICdkb3RuZXQnLCBpbWFnZTogJ3BsdWdpbi1kb3RuZXQtYmFzZToxLjAnLCBkaXI6ICdfZG90bmV0LWJhc2UnLCBwcm92aWRlczogJ29uZSBwaW5uZWQgLk5FVCBTREsnLCBzbW9rZVRlc3Q6ICdkb3RuZXQgLS12ZXJzaW9uJyB9LFxuICB7IGtleTogJ2dvJywgaW1hZ2U6ICdwbHVnaW4tZ28tYmFzZToxLjAnLCBkaXI6ICdfZ28tYmFzZScsIHByb3ZpZGVzOiAnb25lIHBpbm5lZCBHbycsIHNtb2tlVGVzdDogJ2dvIHZlcnNpb24nIH0sXG4gIHsga2V5OiAnanZtJywgaW1hZ2U6ICdwbHVnaW4tanZtLWJhc2U6MS4wJywgZGlyOiAnX2p2bS1iYXNlJywgcHJvdmlkZXM6ICdDb3JyZXR0byBKREssIE1hdmVuLCBHcmFkbGUsIEtvdGxpbicsIHNtb2tlVGVzdDogJ2phdmEgLXZlcnNpb24gJiYgbXZuIC0tdmVyc2lvbicgfSxcbiAgeyBrZXk6ICdub2RlJywgaW1hZ2U6ICdwbHVnaW4tbm9kZS1iYXNlOjEuMCcsIGRpcjogJ19ub2RlLWJhc2UnLCBwcm92aWRlczogJ29uZSBwaW5uZWQgTm9kZS5qcyArIG5wbScsIHNtb2tlVGVzdDogJ25vZGUgLS12ZXJzaW9uICYmIG5wbSAtLXZlcnNpb24nIH0sXG4gIHsga2V5OiAncGhwJywgaW1hZ2U6ICdwbHVnaW4tcGhwLWJhc2U6MS4wJywgZGlyOiAnX3BocC1iYXNlJywgcHJvdmlkZXM6ICdvbmUgcGlubmVkIFBIUCArIENvbXBvc2VyJywgc21va2VUZXN0OiAncGhwIC0tdmVyc2lvbiAmJiBjb21wb3NlciAtLXZlcnNpb24nIH0sXG4gIHsga2V5OiAncHl0aG9uJywgaW1hZ2U6ICdwbHVnaW4tcHl0aG9uLWJhc2U6MS4wJywgZGlyOiAnX3B5dGhvbi1iYXNlJywgcHJvdmlkZXM6ICdvbmUgcGlubmVkIENQeXRob24gKyBwaXAnLCBzbW9rZVRlc3Q6ICdweXRob24zIC0tdmVyc2lvbiAmJiBwaXAzIC0tdmVyc2lvbicgfSxcbiAgeyBrZXk6ICdydWJ5JywgaW1hZ2U6ICdwbHVnaW4tcnVieS1iYXNlOjEuMCcsIGRpcjogJ19ydWJ5LWJhc2UnLCBwcm92aWRlczogJ29uZSBwaW5uZWQgUnVieSArIEJ1bmRsZXInLCBzbW9rZVRlc3Q6ICdydWJ5IC0tdmVyc2lvbiAmJiBidW5kbGUgLS12ZXJzaW9uJyB9LFxuICB7IGtleTogJ3J1c3QnLCBpbWFnZTogJ3BsdWdpbi1ydXN0LWJhc2U6MS4wJywgZGlyOiAnX3J1c3QtYmFzZScsIHByb3ZpZGVzOiAnb25lIHBpbm5lZCBSdXN0IHRvb2xjaGFpbiArIGNsaXBweS9ydXN0Zm10Jywgc21va2VUZXN0OiAnY2FyZ28gLS12ZXJzaW9uICYmIHJ1c3RjIC0tdmVyc2lvbicgfSxcbiAgeyBrZXk6ICd0cml2eScsIGltYWdlOiAncGx1Z2luLXRyaXZ5LWJhc2U6MS4wJywgZGlyOiAnX3RyaXZ5LWJhc2UnLCBwcm92aWRlczogJ3RyaXZ5ICh0d28gcGlubmVkIHZlcnNpb25zKScsIHNtb2tlVGVzdDogJ3RyaXZ5IC0tdmVyc2lvbicgfSxcbl07XG4iXX0=
|