jsii-release 0.2.991 → 0.2.993
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/README.md +4 -4
- package/lib/bin/publib-maven.js +3 -2
- package/package.json +1 -1
- package/package.json.bak +1 -1
package/README.md
CHANGED
|
@@ -84,11 +84,12 @@ Publishes all Maven modules in the `DIR` to [Maven Central](https://search.maven
|
|
|
84
84
|
> [!IMPORTANT]
|
|
85
85
|
> Starting July 2025 you must switch over to the new Maven Central Publisher. Follow these steps:
|
|
86
86
|
>
|
|
87
|
+
> * Log in to <https://central.sonatype.com/> with your existing username and password.
|
|
88
|
+
> * Under your account, click **View Namespaces**, then click **Migrate Namespace** for your target namespaces.
|
|
89
|
+
> * Generate a new username and password on the new publisher using the **Generate User Token** feature.
|
|
87
90
|
> * Configure `MAVEN_SERVER_ID=central-ossrh`.
|
|
88
91
|
> * Unset any `MAVEN_ENDPOINT`.
|
|
89
|
-
> *
|
|
90
|
-
> * Generate a new username and password on the new publisher using the **Generate User Token** feature.
|
|
91
|
-
> * Configure `MAVEN_STAGING_PROFILE_ID` with your package namespace (register it first if necessary)
|
|
92
|
+
> * Configure the new `MAVEN_USERNAME` and `MAVEN_PASSWORD`.
|
|
92
93
|
|
|
93
94
|
If you are still on Nexus and you signed up at SonaType after February 2021, you
|
|
94
95
|
need to use this URL: `https://s01.oss.sonatype.org`
|
|
@@ -118,7 +119,6 @@ The server type is selected using the `MAVEN_SERVER_ID` variable.
|
|
|
118
119
|
| (all) | `MAVEN_DRYRUN` | No | Set to "true" for a dry run |
|
|
119
120
|
| (all) | `MAVEN_VERBOSE` | No | Make Maven print debug output if set to `true` |
|
|
120
121
|
| `central-ossrh` | `MAVEN_GPG_PRIVATE_KEY[_FILE]` and `MAVEN_GPG_PRIVATE_KEY_PASSPHRASE` | Yes | GPG private key or file that includes it. This is used to sign your Maven packages. See instructions below |
|
|
121
|
-
| `central-ossrh` | `MAVEN_STAGING_PROFILE_ID` | Yes | Maven Central (sonatype) staging profile ID (e.g. 68a05363083174). Staging profile ID can be found **in the URL** of the "Releases" staging profile under "Staging Profiles" in <https://oss.sonatype.org> or <https://s01.oss.sonatype.org> if you are logged in (e.g. `https://oss.sonatype.org/#stagingProfiles;68a05363083174`). |
|
|
122
122
|
| `central-ossrh` | `MAVEN_ENDPOINT` | No | URL of Nexus repository. Defaults to `https://ossrh-staging-api.central.sonatype.com/`. |
|
|
123
123
|
| `<custom>` | `MAVEN_REPOSITORY_URL` | No | Deployment repository when not deploying to Maven Central |
|
|
124
124
|
| `ossrh` (deprecated) | `MAVEN_GPG_PRIVATE_KEY[_FILE]` and `MAVEN_GPG_PRIVATE_KEY_PASSPHRASE` | Yes | GPG private key or file that includes it. This is used to sign your Maven packages. See instructions below |
|
package/lib/bin/publib-maven.js
CHANGED
|
@@ -116,7 +116,8 @@ async function main() {
|
|
|
116
116
|
options = {
|
|
117
117
|
type: 'compat-ossrh',
|
|
118
118
|
...sharedOptions,
|
|
119
|
-
|
|
119
|
+
// Not required by the new endpoint: can be any value (maybe never was required to begin with?)
|
|
120
|
+
stagingProfileId: 'publib',
|
|
120
121
|
endpoint: process.env.MAVEN_ENDPOINT,
|
|
121
122
|
privateKey: parsePrivateKeyFromEnv(),
|
|
122
123
|
};
|
|
@@ -607,4 +608,4 @@ main().catch(e => {
|
|
|
607
608
|
}
|
|
608
609
|
process.exitCode = 1;
|
|
609
610
|
});
|
|
610
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGliLW1hdmVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9wdWJsaWItbWF2ZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMm5CQSxvQ0FRQztBQW5vQkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFDSCwyQkFBb0M7QUFDcEMsMkJBQStFO0FBRS9FLE1BQU0sc0JBQXNCLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLE1BQU0sd0JBQXdCLEdBQUcsZUFBZSxDQUFDO0FBRWpELE1BQU0sMEJBQTBCLEdBQUcsdURBQXVELENBQUM7QUFFM0YsS0FBSyxVQUFVLElBQUk7SUFDakIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQztJQUV4QyxJQUFBLE9BQUUsRUFBQyxRQUFRLENBQUMsQ0FBQztJQUViLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSxTQUFJLEVBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sSUFBSSxXQUFXLENBQUMsaURBQWlELE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELElBQUEsU0FBSSxFQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUU1QixNQUFNLGFBQWEsR0FBeUI7UUFDMUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztRQUNsQyxRQUFRLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBQ2xDLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksS0FBSyxN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RUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNyRCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFZO0lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUVELGdCQUFnQjtBQUNoQixFQUFFO0FBQ0YscUVBQXFFO0FBQ3JFLDRFQUE0RTtBQUM1RSxxREFBcUQ7QUFDckQsRUFBRTtBQUNGLGdHQUFnRztBQUVoRyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDZixJQUFJLENBQUMsWUFBWSxrQkFBYSxFQUFFLENBQUM7UUFDL0IsSUFBQSxTQUFJLEVBQUMsc0NBQXNDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7U0FBTSxJQUFJLENBQUMsWUFBWSxXQUFXLEVBQUUsQ0FBQztRQUNwQyxJQUFBLFNBQUksRUFBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDdkIsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExlZ2FjeSB2cyBjb21wYXRpYmlsaXR5IGVuZHBvaW50XG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKlxuICogVGhpcyBzY3JpcHQgdGFsa3MgYWJvdXQgbGVnYWN5IHZzIGNvbXBhdGliaWxpdHkgZW5kcG9pbnQgYSBidW5jaC5cbiAqXG4gKiBCb3RoIGltcGxlbWVudCB0aGUgTmV4dXMgMiBwcm90b2NvbCwgaG93ZXZlcjpcbiAqXG4gKiAtIFRoZSBcImxlZ2FjeVwiIGVuZHBvaW50IGlzIHRoZSBTb25hdHlwZSBPU1NSSCBlbmRwb2ludCB0aGF0IHdhcyBkZXByZWNhdGVkIEp1bmUgMjAyNS5cbiAqIC0gVGhlIFwiY29tcGF0aWJpbGl0eVwiIGVuZHBvaW50IGlzIGEgTmV4dXMgMi1jb21wYXRpYmxlIGVuZHBvaW50IHN0b29kIHVwIGZvciB0aGUgbmV3XG4gKiAgIHB1Ymxpc2hpbmcgc2VydmljZSwgQ2VudHJhbCBQdWJsaXNoaW5nLlxuICpcbiAqIEl0IHNob3VsZCBiZSB0aGUgc2FtZSBwcm90b2NvbCBidXQgb2YgY291cnNlIHRoZXJlIGFyZSBzdWJ0bGUgZGlmZmVyZW5jZXNcbiAqIGJldHdlZW4gdGhlbSAoaW4gaG93IHRoZXkgc2lnbmFsIGVycm9yIHdoZW4geW91IHRyeSB0byByZXB1Ymxpc2ggYW4gYWxyZWFkeVxuICogcHVibGlzaGVkIHZlcnNpb24sIGFuZCBldmVuIGluIHRoZSB3aXJlIHByb3RvY29sIGFjY2VwdGVkKSBzbyB3ZSBoYXZlIHRvXG4gKiB0cmVhdCB0aGVtIGRpZmZlcmVudGx5IGhlcmUuXG4gKlxuICogVGhlcmUgaXMgYWxzbyBhbiBcIm9mZmljaWFsIG5ld1wiIHByb3RvY29sIGZvciB0aGUgbmV3IHB1Ymxpc2hpbmcgbWVjaGFuaXNtLFxuICogYnV0IHRoZSBNYXZlbiBwbHVnaW4gdGhleSBzdXBwbHkgZm9yIHRoYXQgZG9lc24ndCBzdXBwb3J0IHRoYXQuIEluIHRoZWlyIHdvcmRzOlxuICpcbiAqID4gaXQgYXBwZWFycyB0aGF0IHlvdSBhcmUgdXNpbmcgdGhlIFwidHdvIHN0YWdlXCJbMV0gZGVwbG95bWVudCBwcm9jZXNzLCB3aGljaCBpc1xuICogPiBub3QgeWV0IHN1cHBvcnRlZCBieSB0aGUgbmV3IHBsdWdpbi4gWW91IGFyZSB0aGUgZmlyc3QgcHVibGlzaGVyIHRvIGhhdmVcbiAqID4gcmVxdWVzdGVkIHRoaXMsIHNvIHdlIHdlcmUgbm90IGZhbWlsaWFyIHdpdGggdGhpcyBzcGVjaWZpYyB1c2VjYXNlIHdoZW5cbiAqID4gYnVpbGRpbmcgdGhlIG5ldyBwbHVnaW5cbiAqID4gWzFdIDxodHRwczovL2dpdGh1Yi5jb20vc29uYXR5cGUvbmV4dXMtbWF2ZW4tcGx1Z2lucy9ibG9iLzQzYTk5NDBiMTM0YzNmODdlYmU0ZGFhODI1NTJlODQ0ZDljNTc4Yjgvc3RhZ2luZy9tYXZlbi1wbHVnaW4vV09SS0ZMT1dTLm1kI3R3by1zaG90cz5cbiAqL1xuaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyAkLCBjZCwgZWNobywgZ2xvYiwgb3MsIHBhdGgsIFByb2Nlc3NPdXRwdXQsIHF1b3RlLCB0bXBkaXIgfSBmcm9tICd6eCc7XG5cbmNvbnN0IExFR0FDWV9PU1NSSF9TRVJWRVJfSUQgPSAnb3NzcmgnO1xuY29uc3QgQ09NUEFUX0NFTlRSQUxfU0VSVkVSX0lEID0gJ2NlbnRyYWwtb3NzcmgnO1xuXG5jb25zdCBORVhVU19NQVZFTl9TVEFHSU5HX1BMVUdJTiA9ICdvcmcuc29uYXR5cGUucGx1Z2luczpuZXh1cy1zdGFnaW5nLW1hdmVuLXBsdWdpbjoxLjcuMCc7XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gIGNvbnN0IGFyZ3MgPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMik7XG4gIGNvbnN0IGphdmFSb290ID0gYXJnc1swXSA/PyAnZGlzdC9qYXZhJztcblxuICBjZChqYXZhUm9vdCk7XG5cbiAgY29uc3QgcG9tcyA9IGF3YWl0IGdsb2IoJyoqLyoucG9tJyk7XG4gIGlmIChwb21zLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBTaW1wbGVFcnJvcihgTm8gSkFSUyB0byBwdWJsaXNoOiBubyAucG9tIGZpbGVzIGZvdW5kIHVuZGVyICR7cHJvY2Vzcy5jd2QoKX1gKTtcbiAgfVxuXG4gIGVjaG8oYFBPTXMgZm91bmQ6ICR7cG9tc31gKTtcblxuICBjb25zdCBzaGFyZWRPcHRpb25zOiBTaGFyZWRQdWJsaXNoT3B0aW9ucyA9IHtcbiAgICB1c2VybmFtZTogZW52VmFyKCdNQVZFTl9VU0VSTkFNRScpLFxuICAgIHBhc3N3b3JkOiBlbnZWYXIoJ01BVkVOX1BBU1NXT1JEJyksXG4gICAgZHJ5UnVuOiBwcm9jZXNzLmVudi5NQVZFTl9EUllSVU4gPT09ICd0cnVlJyxcbiAgICB2ZXJib3NlOiBwcm9jZXNzLmVudi5NQVZFTl9WRVJCT1NFID09PSAndHJ1ZScsXG4gICAgcG9tcyxcbiAgfTtcblxuICBsZXQgb3B0aW9uczogTWF2ZW5QdWJsaXNoT3B0aW9ucztcbiAgY29uc3Qgc2VydmVySWQgPSBwcm9jZXNzLmVudi5NQVZFTl9TRVJWRVJfSUQgPz8gTEVHQUNZX09TU1JIX1NFUlZFUl9JRDtcblxuICBzd2l0Y2ggKHNlcnZlcklkKSB7XG4gICAgY2FzZSBMRUdBQ1lfT1NTUkhfU0VSVkVSX0lEOlxuICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgdHlwZTogJ2xlZ2FjeS1vc3NyaCcsXG4gICAgICAgIC4uLnNoYXJlZE9wdGlvbnMsXG4gICAgICAgIHN0YWdpbmdQcm9maWxlSWQ6IGVudlZhcignTUFWRU5fU1RBR0lOR19QUk9GSUxFX0lEJyksXG4gICAgICAgIGVuZHBvaW50OiBwcm9jZXNzLmVudi5NQVZFTl9FTkRQT0lOVCxcbiAgICAgICAgcHJpdmF0ZUtleTogcGFyc2VQcml2YXRlS2V5RnJvbUVudigpLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQ09NUEFUX0NFTlRSQUxfU0VSVkVSX0lEOlxuICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgdHlwZTogJ2NvbXBhdC1vc3NyaCcsXG4gICAgICAgIC4uLnNoYXJlZE9wdGlvbnMsXG4gICAgICAgIHN0YWdpbmdQcm9maWxlSWQ6IGVudlZhcignTUFWRU5fU1RBR0lOR19QUk9GSUxFX0lEJyksXG4gICAgICAgIGVuZHBvaW50OiBwcm9jZXNzLmVudi5NQVZFTl9FTkRQT0lOVCxcbiAgICAgICAgcHJpdmF0ZUtleTogcGFyc2VQcml2YXRlS2V5RnJvbUVudigpLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBXZSBoYXZlbid0IGltcGxlbWVudGVkIHNpZ25pbmcgZm9yIHRoaXMsIHNvIGZhaWwgbG91ZGx5IGlmIHBlb3BsZSB0cnkgdG8gdXNlIGl0IGFueXdheVxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk1BVkVOX0dQR19QUklWQVRFX0tFWSB8fCBwcm9jZXNzLmVudi5NQVZFTl9HUEdfUFJJVkFURV9LRVlfRklMRSkge1xuICAgICAgICB0aHJvdyBuZXcgU2ltcGxlRXJyb3IoJ01BVkVOX0dQR19QUklWQVRFX0tFWVtfRklMRV0gaXMgb25seSBzdXBwb3J0ZWQgZm9yIE9TU1JIIHB1Ymxpc2hpbmcnKTtcbiAgICAgIH1cblxuICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgdHlwZTogJ2N1c3RvbS1uZXh1cycsXG4gICAgICAgIC4uLnNoYXJlZE9wdGlvbnMsXG4gICAgICAgIHNlcnZlcklkLFxuICAgICAgICByZXBvc2l0b3J5VXJsOiBlbnZWYXIoJ01BVkVOX1JFUE9TSVRPUllfVVJMJyksXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gIH1cblxuICBhd2FpdCBtYXZlblB1Ymxpc2gob3B0aW9ucyk7XG5cbiAgZWNobygnfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ficpO1xuICBlY2hvKCfinIUgQWxsIERvbmUhJyk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUHJpdmF0ZUtleUZyb21FbnYoKTogUHJpdmF0ZUtleSB7XG4gIGlmIChwcm9jZXNzLmVudi5NQVZFTl9HUEdfUFJJVkFURV9LRVlfRklMRSkge1xuICAgIHJldHVybiB7IHR5cGU6ICdmaWxlJywgZmlsZU5hbWU6IHByb2Nlc3MuZW52Lk1BVkVOX0dQR19QUklWQVRFX0tFWV9GSUxFLCBwYXNzUGhyYXNlOiBlbnZWYXIoJ01BVkVOX0dQR19QUklWQVRFX0tFWV9QQVNTUEhSQVNFJykgfTtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTUFWRU5fR1BHX1BSSVZBVEVfS0VZKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogJ21hdGVyaWFsJywga2V5TWF0ZXJpYWw6IHByb2Nlc3MuZW52Lk1BVkVOX0dQR19QUklWQVRFX0tFWSwgcGFzc1BocmFzZTogZW52VmFyKCdNQVZFTl9HUEdfUFJJVkFURV9LRVlfUEFTU1BIUkFTRScpIH07XG4gIH1cbiAgdGhyb3cgbmV3IFNpbXBsZUVycm9yKCdNQVZFTl9HUEdfUFJJVkFURV9LRVlbX0ZJTEVdIGlzIHJlcXVpcmVkJyk7XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gIE1vZGVsaW5nIGFsbCB0aGUgcGFyYW1ldGVycyBzbyB0aGF0IHdlIGNhbiBwdWxsIHRoZSBlbnZpcm9ubWVudCBwYXJzaW5nIGZvcndhcmRcbi8vXG5cbmludGVyZmFjZSBTaGFyZWRQdWJsaXNoT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHVzZXJuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhc3N3b3JkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRyeVJ1bjogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdmVyYm9zZTogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcG9tczogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBMZWdhY3lPc3NyaFB1Ymxpc2hPcHRpb25zIGV4dGVuZHMgU2hhcmVkUHVibGlzaE9wdGlvbnMge1xuICB0eXBlOiAnbGVnYWN5LW9zc3JoJztcbiAgcmVhZG9ubHkgcHJpdmF0ZUtleTogUHJpdmF0ZUtleTtcbiAgcmVhZG9ubHkgZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YWdpbmdQcm9maWxlSWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIENvbXBhdE9zc3JoUHVibGlzaE9wdGlvbnMgZXh0ZW5kcyBTaGFyZWRQdWJsaXNoT3B0aW9ucyB7XG4gIHR5cGU6ICdjb21wYXQtb3NzcmgnO1xuICByZWFkb25seSBwcml2YXRlS2V5OiBQcml2YXRlS2V5O1xuICByZWFkb25seSBlbmRwb2ludD86IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhZ2luZ1Byb2ZpbGVJZDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQ3VzdG9tTmV4dXNQdWJsaXNoT3B0aW9ucyBleHRlbmRzIFNoYXJlZFB1Ymxpc2hPcHRpb25zIHtcbiAgdHlwZTogJ2N1c3RvbS1uZXh1cyc7XG4gIHJlYWRvbmx5IHJlcG9zaXRvcnlVcmw6IHN0cmluZztcbiAgcmVhZG9ubHkgc2VydmVySWQ6IHN0cmluZztcbn1cblxudHlwZSBQcml2YXRlS2V5ID1cbiAgfCB7IHR5cGU6ICdmaWxlJzsgZmlsZU5hbWU6IHN0cmluZzsgcGFzc1BocmFzZTogc3RyaW5nIH1cbiAgfCB7IHR5cGU6ICdtYXRlcmlhbCc7IGtleU1hdGVyaWFsOiBzdHJpbmc7IHBhc3NQaHJhc2U6IHN0cmluZyB9XG4gIDtcblxudHlwZSBNYXZlblB1Ymxpc2hPcHRpb25zID0gTGVnYWN5T3NzcmhQdWJsaXNoT3B0aW9ucyB8IENvbXBhdE9zc3JoUHVibGlzaE9wdGlvbnN8IEN1c3RvbU5leHVzUHVibGlzaE9wdGlvbnM7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gIFB1Ymxpc2hpbmcgZnVuY3Rpb25zXG4vL1xuXG5hc3luYyBmdW5jdGlvbiBtYXZlblB1Ymxpc2gob3B0aW9uczogTWF2ZW5QdWJsaXNoT3B0aW9ucykge1xuICBhd2FpdCB1c2luZyB3b3JrRGlyID0gYXV0b0NsZWFuRGlyKCk7XG4gIGNvbnN0IG1hdmVuID0gbmV3IE1hdmVuKHdvcmtEaXIuZGlyLCBvcHRpb25zLnZlcmJvc2UsIG9wdGlvbnMuZHJ5UnVuKTtcblxuICBjb25zdCB4ID0gb3B0aW9ucy50eXBlO1xuICBzd2l0Y2ggKHgpIHtcbiAgICBjYXNlICdsZWdhY3ktb3NzcmgnOlxuICAgICAgYXdhaXQgZGVwbG95TGVnYWN5T3NzcmgobWF2ZW4sIG9wdGlvbnMpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29tcGF0LW9zc3JoJzpcbiAgICAgIGF3YWl0IGRlcGxveUNvbXBhdE9zc3JoKG1hdmVuLCBvcHRpb25zKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2N1c3RvbS1uZXh1cyc6XG4gICAgICBhd2FpdCBkZXBsb3lDdXN0b21OZXh1cyhtYXZlbiwgb3B0aW9ucyk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgYXNzZXJ0TmV2ZXIoeCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZXBsb3kgdG8gdGhlIGxlZ2FjeSBPU1NSSCBOZXh1cyBzZXJ2ZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVwbG95TGVnYWN5T3NzcmgobWF2ZW46IE1hdmVuLCBvcHRpb25zOiBMZWdhY3lPc3NyaFB1Ymxpc2hPcHRpb25zKSB7XG4gIGVjaG8oJ/Cfk6YgUHVibGlzaGluZyB0byBNYXZlbiBDZW50cmFsJyk7XG4gIGNvbnN0IGRlZmF1bHRFbmRwb2ludCA9ICdodHRwczovL29zcy5zb25hdHlwZS5vcmcnO1xuXG4gIGNvbnN0IHN0YWdlZCA9IGF3YWl0IGRlcGxveVN0YWdlZFJlcG9zaXRvcnkobWF2ZW4sIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGVuZHBvaW50OiBvcHRpb25zLmVuZHBvaW50ID8/IGRlZmF1bHRFbmRwb2ludCxcbiAgICByZXB1Ymxpc2hXaWxsNDAwOiBmYWxzZSxcbiAgfSk7XG5cbiAgaWYgKHN0YWdlZC50eXBlICE9PSAnc3VjY2VzcycpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKlxuICBjb25zdCByZWxlYXNlZCA9IGF3YWl0IHJlbGVhc2VSZXBvKHtcbiAgICBzZXJ2ZXJVcmw6IG9wdGlvbnMuZW5kcG9pbnQgPz8gZGVmYXVsdEVuZHBvaW50LFxuICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lLFxuICAgIHBhc3N3b3JkOiBvcHRpb25zLnBhc3N3b3JkLFxuICAgIHJlcG9zaXRvcnlJZDogc3RhZ2VkLnJlcG9zaXRvcnlJZCxcbiAgfSk7XG5cbiAgaWYgKHJlbGVhc2VkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gICovXG5cbiAgLy8gU2VuZCBhIHJlbW90ZSByZWxlYXNlIGNvbW1hbmQgdG8gdGhlIHJlcG9zaXRvcnlcbiAgY29uc3QgcmVsZWFzZU91dHB1dCA9IGF3YWl0IG1hdmVuLmV4ZWMoYCR7TkVYVVNfTUFWRU5fU1RBR0lOR19QTFVHSU59OnJjLXJlbGVhc2VgLCB7XG4gICAgcHJvcGVydGllczoge1xuICAgICAgbmV4dXNVcmw6IG9wdGlvbnMuZW5kcG9pbnQgPz8gZGVmYXVsdEVuZHBvaW50LFxuICAgICAgc2VydmVySWQ6IHN0YWdlZC5zZXJ2ZXJJZCxcbiAgICAgIHN0YWdpbmdSZXBvc2l0b3J5SWQ6IHN0YWdlZC5yZXBvc2l0b3J5SWQsXG4gICAgfSxcbiAgICBub3Rocm93OiB0cnVlLFxuICB9KTtcbiAgaWYgKCFyZWxlYXNlT3V0cHV0KSB7XG4gICAgZWNobygn8J+PnO+4jyBTdG9wcGVkIGhlcmUgYmVjYXVzZSBvZiBkcnktcnVuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHJlbGVhc2VPdXRwdXQuZXhpdENvZGUgIT09IDApIHtcbiAgICAvLyBJZiByZWxlYXNlIGZhaWxlZCwgY2hlY2sgaWYgdGhpcyB3YXMgY2F1c2VkIGJlY2F1c2Ugd2UgYXJlIHRyeWluZyB0byBwdWJsaXNoXG4gICAgLy8gdGhlIHNhbWUgdmVyc2lvbiBhZ2Fpbiwgd2hpY2ggaXMgbm90IGFuIGVycm9yLiBUaGUgbWFnaWMgc3RyaW5nIFwiZG9lcyBub3RcbiAgICAvLyBhbGxvdyB1cGRhdGluZyBhcnRpZmFjdFwiIGZvciBhIFwiLnBvbVwiIGZpbGUgaW5kaWNhdGVzIHRoYXQgd2UgYXJlIHRyeWluZyB0b1xuICAgIC8vIG92ZXJyaWRlIGFuIGV4aXN0aW5nIHZlcnNpb24uIE90aGVyd2lzZSwgZmFpbCFcblxuICAgIGNvbnN0IGxvb2tzTGlrZUR1cGxpY2F0ZVB1Ymxpc2ggPSByZWxlYXNlT3V0cHV0LmxpbmVzKClcbiAgICAgIC5maWx0ZXIobCA9PiBsLmluY2x1ZGVzKCdkb2VzIG5vdCBhbGxvdyB1cGRhdGluZyBhcnRpZmFjdCcpKVxuICAgICAgLmZpbHRlcihsID0+IGwuaW5jbHVkZXMoJy5wb20nKSlcbiAgICAgIC5sZW5ndGggPiAwO1xuXG4gICAgaWYgKCFsb29rc0xpa2VEdXBsaWNhdGVQdWJsaXNoKSB7XG4gICAgICB0aHJvdyBuZXcgU2ltcGxlRXJyb3IoJ1JlbGVhc2UgZmFpbGVkJyk7XG4gICAgfVxuXG4gICAgZWNobygn4pqg77iPIEFydGlmYWN0IGFscmVhZHkgcHVibGlzaGVkLiBTa2lwcGluZycpO1xuICB9XG59XG5cbi8qKlxuICogRGVwbG95IHRvIHRoZSBjb21wYXQgT1NTUkggTmV4dXMgc2VydmVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlcGxveUNvbXBhdE9zc3JoKG1hdmVuOiBNYXZlbiwgb3B0aW9uczogQ29tcGF0T3NzcmhQdWJsaXNoT3B0aW9ucykge1xuICBlY2hvKCfwn5OmIFB1Ymxpc2hpbmcgdG8gTWF2ZW4gQ2VudHJhbCAoQ29tcGF0IGVuZHBvaW50KScpO1xuXG4gIGNvbnN0IGRlZmF1bHRFbmRwb2ludCA9ICdodHRwczovL29zc3JoLXN0YWdpbmctYXBpLmNlbnRyYWwuc29uYXR5cGUuY29tLyc7XG4gIGNvbnN0IGVuZHBvaW50ID0gb3B0aW9ucy5lbmRwb2ludCA/PyBkZWZhdWx0RW5kcG9pbnQ7XG5cbiAgY29uc3Qgc3RhZ2VkID0gYXdhaXQgZGVwbG95U3RhZ2VkUmVwb3NpdG9yeShtYXZlbiwge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgZW5kcG9pbnQsXG4gICAgcmVwdWJsaXNoV2lsbDQwMDogdHJ1ZSxcbiAgfSk7XG5cbiAgaWYgKHN0YWdlZC50eXBlICE9PSAnc3VjY2VzcycpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZWxlYXNlZCA9IGF3YWl0IHJlbGVhc2VSZXBvKHtcbiAgICBzZXJ2ZXJVcmw6IGVuZHBvaW50LFxuICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lLFxuICAgIHBhc3N3b3JkOiBvcHRpb25zLnBhc3N3b3JkLFxuICAgIHJlcG9zaXRvcnlJZDogc3RhZ2VkLnJlcG9zaXRvcnlJZCxcbiAgfSk7XG5cbiAgaWYgKHJlbGVhc2VkID09PSAnZHVwbGljYXRlLXZlcnNpb24nKSB7XG4gICAgZWNobygn4pqg77iPIFZlcnNpb24ocykgYWxyZWFkeSBwdWJsaXNoZWQuIFNraXBwaW5nJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZXBsb3kgdG8gYSBjdXN0b20gTmV4dXMgc2VydmVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlcGxveUN1c3RvbU5leHVzKG1hdmVuOiBNYXZlbiwgb3B0aW9uczogQ3VzdG9tTmV4dXNQdWJsaXNoT3B0aW9ucykge1xuICBlY2hvKGDwn5OmIFB1Ymxpc2hpbmcgdG8gJHtvcHRpb25zLnNlcnZlcklkfWApO1xuICBhd2FpdCBtYXZlbi53cml0ZVNldHRpbmdzRmlsZShvcHRpb25zLnNlcnZlcklkLCBmYWxzZSk7XG5cbiAgZm9yIChjb25zdCBwb20gb2Ygb3B0aW9ucy5wb21zKSB7XG4gICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgbWF2ZW4uZXhlYygnZGVwbG95OmRlcGxveS1maWxlJywge1xuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICB1cmw6IG9wdGlvbnMucmVwb3NpdG9yeVVybCxcbiAgICAgICAgcmVwb3NpdG9yeUlkOiBvcHRpb25zLnNlcnZlcklkLFxuICAgICAgICBwb21GaWxlOiBwb20sXG4gICAgICAgIC4uLmphcnNGcm9tUG9tKHBvbSksXG4gICAgICB9LFxuICAgICAgbm90aHJvdzogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGlmIChkZXBsb3lPdXRwdXQ/LmV4aXRDb2RlICYmIGRlcGxveU91dHB1dC5leGl0Q29kZSA+IDApIHtcbiAgICAgIGlmIChkZXBsb3lPdXRwdXQuc3Rkb3V0LmluY2x1ZGVzKCc0MDkgQ29uZmxpY3QnKSkge1xuICAgICAgICBlY2hvKCfimqDvuI8gQXJ0aWZhY3QgYWxyZWFkeSBwdWJsaXNoZWQuIFNraXBwaW5nJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgU2ltcGxlRXJyb3IoJ1JlbGVhc2UgZmFpbGVkJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnR5cGUgRGVwbG95U3RhZ2VkUmVwb1Jlc3VsdCA9XG4gIHwgeyB0eXBlOiAnc3VjY2Vzcyc7IHJlcG9zaXRvcnlJZDogc3RyaW5nOyBzZXJ2ZXJJZDogc3RyaW5nIH1cbiAgfCB7IHR5cGU6ICdhbHJlYWR5LXB1Ymxpc2hlZCcgfVxuICB8IHsgdHlwZTogJ2RyeS1ydW4nIH07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBzdGFnaW5nIHJlcG9zaXRvcnkuIFRoaXMgaXMgdGhlIHNhbWUgYmV0d2VlbiB0aGUgbGVnYWN5IGFuZCBjb21wYXQgZW5kcG9pbnRzLlxuICpcbiAqIGByZXB1Ymxpc2hXaWxsNDAwYDogaW4gdGhlIGNvbXBhdGliaWxpdHkgZW5kcG9pbnQsIHN0YWdpbmcgYSB2ZXJzaW9uIHRoYXQgaGFzIGFscmVhZHlcbiAqIGJlZW4gcHVibGlzaGVkIHdpbGwgbGVhZCB0byBhIGA0MDAgQmFkIFJlcXVlc3RgLCB3aXRoIG5vIGZ1cnRoZXIgaW5mby4gV2UgbmVlZGVkIHRvIGhhdmVcbiAqIHJ1biB0aGUgTWF2ZW4gY29tbWFuZCB3aXRoIGAtLWRlYnVnYCBsb2dnaW5nIHRvIHNlZSB0aGUgYWN0dWFsIGVycm9yIG1lc3NhZ2UgaW4gdGhlIG91dHB1dC5cbiAqXG4gKiBJbiB0aGUgbGVnYWN5IGVuZHBvaW50LCBzdGFnaW5nIHRha2VzIG11bHRpcGxlIG1pbnV0ZXMsIGFuZCBNYXZlbiB3aWxsIHBvbGxcbiAqIGV2ZXJ5IDNzIGFuZCBwcmludCB0aGUgb3V0cHV0LiBXZSB0aGVyZWZvcmUgZG9uJ3QgdXNlIHZlcmJvc2UgbW9kZSB0byBhdm9pZFxuICogc3Rkb3V0IHNwYW0uIEluIHRoZSBsZWdhY3kgZW5kcG9pbnQsIGR1cGxpY2F0ZSB2ZXJzaW9uIHB1Ymxpc2hpbmcgZ2V0c1xuICogcmVwb3J0ZWQgZHVyaW5nIHRoZSAncmVsZWFzZScgc3RlcCBhbnl3YXksIG5vdCBkdXJpbmcgc3RhZ2luZy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVwbG95U3RhZ2VkUmVwb3NpdG9yeShtYXZlbjogTWF2ZW4sIG9wdGlvbnM6IE9taXQ8TGVnYWN5T3NzcmhQdWJsaXNoT3B0aW9ucyB8IENvbXBhdE9zc3JoUHVibGlzaE9wdGlvbnMsICdlbmRwb2ludCc+ICYgeyBlbmRwb2ludDogc3RyaW5nOyByZXB1Ymxpc2hXaWxsNDAwOiBib29sZWFuIH0pOiBQcm9taXNlPERlcGxveVN0YWdlZFJlcG9SZXN1bHQ+IHtcbiAgY29uc3Qgc2VydmVySWQgPSAnb3NzcmgnO1xuXG4gIGF3YWl0IG1hdmVuLndyaXRlU2V0dGluZ3NGaWxlKHNlcnZlcklkLCB0cnVlKTtcblxuICAvLyBGaXJzdCAtLSBzaWduIGFydGlmYWN0c1xuICBjb25zdCBzaWduZWREaXIgPSBwYXRoLmpvaW4obWF2ZW4ud29ya0RpciwgJ3NpZ25lZCcpO1xuICBhd2FpdCBmcy5ta2RpcihzaWduZWREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIGF3YWl0IHNpZ25KYXJzKG1hdmVuLCBvcHRpb25zLnBvbXMsIHNpZ25lZERpciwgc2VydmVySWQsIG9wdGlvbnMucHJpdmF0ZUtleSk7XG5cbiAgZWNobygnfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ficpO1xuICBlY2hvKCcgRGVwbG95aW5nIGFuZCBjbG9zaW5nIHJlcG9zaXRvcnkuLi4nKTtcbiAgZWNobygnfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ficpO1xuXG4gIGNvbnN0IG5leHVzTWF2ZW5TdGFnaW5nID0gJ29yZy5zb25hdHlwZS5wbHVnaW5zOm5leHVzLXN0YWdpbmctbWF2ZW4tcGx1Z2luOjEuNy4wJztcbiAgY29uc3Qgc3RhZ2VPdXRwdXQgPSBhd2FpdCBtYXZlbi5leGVjKGAke25leHVzTWF2ZW5TdGFnaW5nfTpkZXBsb3ktc3RhZ2VkLXJlcG9zaXRvcnlgLCB7XG4gICAgcHJvcGVydGllczoge1xuICAgICAgcmVwb3NpdG9yeURpcmVjdG9yeTogc2lnbmVkRGlyLFxuICAgICAgbmV4dXNVcmw6IG9wdGlvbnMuZW5kcG9pbnQsXG4gICAgICBzZXJ2ZXJJZCxcbiAgICAgIHN0YWdpbmdQcm9ncmVzc1RpbWVvdXRNaW51dGVzOiAnMzAnLFxuICAgICAgc3RhZ2luZ1Byb2ZpbGVJZDogb3B0aW9ucy5zdGFnaW5nUHJvZmlsZUlkLFxuICAgIH0sXG4gICAgbm90aHJvdzogdHJ1ZSxcbiAgICB2ZXJib3NlOiBvcHRpb25zLnJlcHVibGlzaFdpbGw0MDAsXG4gIH0pO1xuICAvLyBGSVhNRTogTmV3IHN0YWdpbmcgQVBJIHRocm93cyBhbiBlcnJvciBoZXJlIG9uIGR1cGxpY2F0ZSB2ZXJzaW9uc1xuICBpZiAoc3RhZ2VPdXRwdXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVjaG8oJ/Cfj5zvuI8gU3RvcHBlZCBoZXJlIGJlY2F1c2Ugb2YgZHJ5LXJ1bicpO1xuICAgIHJldHVybiB7IHR5cGU6ICdkcnktcnVuJyB9O1xuICB9XG5cbiAgaWYgKG9wdGlvbnMucmVwdWJsaXNoV2lsbDQwMCAmJiBzdGFnZU91dHB1dC50ZXh0KCkubWF0Y2goL0NvbXBvbmVudCB3aXRoIHBhY2thZ2UgdXJsLiphbHJlYWR5IGV4aXN0cy8pKSB7XG4gICAgLy8gV2UndmUgc2VlbiB0aGlzIGZhaWwgd2l0aCB0aGUgYWJvdmUgZXJyb3IgbWVzc2FnZSBvbiB0aGUgT1NTUkggY29tcGF0aWJpbGl0eSBBUEkgd2hlbiB0cnlpbmcgdG8gcmVwdWJsaXNoXG4gICAgLy8gYW4gYWxyZWFkeS1wdWJsaXNoZWQgdmVyc2lvbi5cbiAgICAvL1xuICAgIC8vIFRoaXMgaXMgcG90ZW50aWFsbHkgYSBwcm9ibGVtIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSB2ZXJzaW9ucyBpbiB0aGUgc291cmNlIGRpcmVjdG9yeSBhdCBvbmNlLCBiZWNhdXNlIG5vdGhpbmdcbiAgICAvLyB3aWxsIGJlIHB1Ymxpc2hlZCBpZiB0aGVyZSdzIG9uZSBwYWNrYWdlIGluIHRoZXJlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBwdWJsaXNoZWQgcHJldmlvdXNseS4gQnV0IGMnZXN0IGxhIHZpZS5cbiAgICBlY2hvKCfimqDvuI8gVmVyc2lvbihzKSBhbHJlYWR5IHB1Ymxpc2hlZC4gU2tpcHBpbmcnKTtcbiAgICByZXR1cm4geyB0eXBlOiAnYWxyZWFkeS1wdWJsaXNoZWQnIH07XG4gIH0gZWxzZSBpZiAoc3RhZ2VPdXRwdXQuZXhpdENvZGUgJiYgc3RhZ2VPdXRwdXQuZXhpdENvZGUgPiAwKSB7XG4gICAgdGhyb3cgc3RhZ2VPdXRwdXQ7XG4gIH1cblxuICAvLyBHcmVwIHRoZSByZXBvc2l0b3J5IElEIG91dCBvZiB0aGUgcHJpbnRlZCBvdXRwdXRcbiAgLy8gW0lORk9dICAqIENsb3Npbmcgc3RhZ2luZyByZXBvc2l0b3J5IHdpdGggSUQgXCJYWFhYWFhYWFhYXCIuXG4gIGNvbnN0IG0gPSBzdGFnZU91dHB1dC5zdGRvdXQubWF0Y2goL0Nsb3Npbmcgc3RhZ2luZyByZXBvc2l0b3J5IHdpdGggSUQgXCIoW15cIl0rKVwiLyk7XG4gIGlmICghbSkge1xuICAgIHRocm93IG5ldyBTaW1wbGVFcnJvcignVW5hYmxlIHRvIGV4dHJhY3QgcmVwb3NpdG9yeSBJRCBmcm9tIGRlcGxveS1zdGFnZWQtcmVwb3NpdG9yeSBvdXRwdXQuIFRoaXMgbWVhbnMgaXQgZmFpbGVkIHRvIGNsb3NlIG9yIHRoZXJlIHdhcyBhbiB1bmV4cGVjdGVkIHByb2JsZW0uIEF0IGFueSByYXRlLCB3ZSBjYW5cXCd0IHJlbGVhc2UgaXQuIFNvcnJ5LicpO1xuICB9XG4gIGNvbnN0IHJlcG9zaXRvcnlJZCA9IG1bMV07XG5cbiAgcmV0dXJuIHsgdHlwZTogJ3N1Y2Nlc3MnLCByZXBvc2l0b3J5SWQsIHNlcnZlcklkIH07XG59XG5cbi8qKlxuICogU2VuZCBhIGN1c3RvbSBcInJlbGVhc2VcIiBjb21tYW5kIHRvIHRoZSBuZXcgU29uYXR5cGUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZW5kcG9pbnRcbiAqXG4gKiBXaGVuIHVzaW5nIHRoZSBgbmV4dXMtc3RhZ2luZy1tYXZlbi1wbHVnaW5gJ3MgYHJlbGVhc2VgIG9yIGByYy1yZWxlYXNlYCBjb21tYW5kcywgd2UgZ2V0IHRoZSBmb2xsb3dpbmdcbiAqIGVycm9yOlxuICpcbiAqIFNlbmRpbmc6XG4gKlxuICogYGBgXG4gKiA8c3RhZ2luZ0FjdGlvblJlcXVlc3Q+PGRhdGE+PHN0YWdlZFJlcG9zaXRvcnlJZHMgY2xhc3M9XCJqYXZhLnV0aWwuQXJyYXlzJEFycmF5TGlzdFwiPjxhIGNsYXNzPVwic3RyaW5nLWFycmF5XCI+PHN0cmluZz5pby5naXRodWIucml4MHJyci0tNjNlZGJjYmUtZjA1OC00NGViLTg1ZjQtZmQ5ZGNlMWFlZjQwPC9zdHJpbmc+PC9hPjwvc3RhZ2VkUmVwb3NpdG9yeUlkcz48ZGVzY3JpcHRpb24+dW5rbm93bjwvZGVzY3JpcHRpb24+PGF1dG9Ecm9wQWZ0ZXJSZWxlYXNlPnRydWU8L2F1dG9Ecm9wQWZ0ZXJSZWxlYXNlPjwvZGF0YT48L3N0YWdpbmdBY3Rpb25SZXF1ZXN0PlxuICogYGBgXG4gKlxuICogRXJyb3I6XG4gKlxuICogYGBgXG4gKiBGYWlsZWQgdG8gcHJvY2VzcyByZXF1ZXN0OiBHb3QgdW5leHBlY3RlZCBYTUwgZWxlbWVudCB3aGVuIHJlYWRpbmcgc3RhZ2VkUmVwb3NpdG9yeUlkczogR290IHVuZXhwZWN0ZWQgZWxlbWVudCBTdGFydEVsZW1lbnQoYSwge1wiXCI6IFwiXCIsIFwieG1sXCI6IFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsIFwieG1sbnNcIjogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zL1wifSwgW2NsYXNzIC0+IHN0cmluZy1hcnJheV0pLCBleHBlY3RlZCBvbmUgb2Y6IHN0cmluZ1xuICogYGBgXG4gKlxuICogRG9pbmcgYSBtYW51YWwgc2xpZ2h0bHkgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgYWJvdmUgcmVxdWVzdCBzdWNjZWVkcywgc28gd2UnbGwganVzdCBwcm9jZWVkIHdpdGggZG9pbmdcbiAqIHRoYXQuXG4gKlxuICogVGhlIGVuZHBvaW50IGFsc28gc3VwcG9ydHMgSlNPTiwgd2hpY2ggd2UgcHJlZmVyIG92ZXIgWE1MLlxuICpcbiAqIFRoaXMgZW5kcG9pbnQgd2lsbCBuZXZlciByZXR1cm4gYW4gZXJyb3IsIGV2ZW4gaWYgdGhlIHB1Ymxpc2ggZGlkbid0IGhhcHBlbiBiZWNhdXNlXG4gKiBvZiBkdXBsaWNhdGUgdmVyc2lvbiBwdWJsaXNoaW5nIChub3QgZm9yIHRoZSBsZWdhY3ksIG5vciBmb3IgdGhlIGNvbXBhdGliaWxpdHkgZW5kcG9pbnQpLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9jZW50cmFsLnNvbmF0eXBlLm9yZy9wdWJsaXNoL3B1Ymxpc2gtcG9ydGFsLW9zc3JoLXN0YWdpbmctYXBpL1xuICogQHNlZSBodHRwczovL3N1cHBvcnQuc29uYXR5cGUuY29tL2hjL2VuLXVzL2FydGljbGVzLzIxMzQ2NTQ0OC1BdXRvbWF0aWNhbGx5LWRyb3BwaW5nLW9sZC1zdGFnaW5nLXJlcG9zaXRvcmllc1xuICovXG5hc3luYyBmdW5jdGlvbiByZWxlYXNlUmVwbyhvcHRpb25zOiB7IHNlcnZlclVybDogc3RyaW5nOyB1c2VybmFtZTogc3RyaW5nOyBwYXNzd29yZDogc3RyaW5nOyByZXBvc2l0b3J5SWQ6IHN0cmluZzsgZGVzY3JpcHRpb24/OiBzdHJpbmcgfSk6IFByb21pc2U8J29rJyB8ICdkdXBsaWNhdGUtdmVyc2lvbic+IHtcbiAgZWNobyhg8J+agCBSZWxlYXNpbmcgcmVwb3NpdG9yeSAke29wdGlvbnMucmVwb3NpdG9yeUlkfSBhdCAke29wdGlvbnMuc2VydmVyVXJsfWApO1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKCdzZXJ2aWNlL2xvY2FsL3N0YWdpbmcvYnVsay9wcm9tb3RlJywgb3B0aW9ucy5zZXJ2ZXJVcmwpO1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgZGF0YToge1xuICAgICAgICBzdGFnZWRSZXBvc2l0b3J5SWRzOiBbb3B0aW9ucy5yZXBvc2l0b3J5SWRdLFxuICAgICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucy5kZXNjcmlwdGlvbiA/PyAnRGVwbG95bWVudCcsXG4gICAgICAgIGF1dG9Ecm9wQWZ0ZXJSZWxlYXNlOiB0cnVlLFxuICAgICAgfSxcbiAgICB9KSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICdBdXRob3JpemF0aW9uJzogYEJhc2ljICR7YnRvYShgJHtvcHRpb25zLnVzZXJuYW1lfToke29wdGlvbnMucGFzc3dvcmR9YCl9YCxcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCBib2R5ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuXG4gIC8vIEl0J3MgcG9zc2libGUgdGhhdCAoZHVlIHRvIHNvbWUgcmVwbGljYXRpb24gbGF0ZW5jeT8pIHRoZSBpbml0aWFsIFwic3RhZ2VcIiBzdWNjZWVkcyxcbiAgLy8gYnV0IHRoZSBcInJlbGVhc2VcIiBmYWlscywgaWYgd2UgdHJ5IHRvIHB1Ymxpc2ggYW4gYWxyZWFkeS1wdWJsaXNoZWQgdmVyc2lvbiBhZ2Fpbi5cbiAgLy9cbiAgLy8gVW5mb3J0dW5hdGVseSB0aGVyZSBpcyBubyBncmVhdCBlcnJvciBjb2RlIHRvIGRldGVjdCB0aGlzIHJpZ2h0IG5vdywgYnV0IEkndmUgb2JzZXJ2ZWRcbiAgLy8gdGhpcyBlcnJvciB3aGVuIGl0IGhhcHBlbmVkLlxuICAvLyBJIGhhdmUgYSBzdXBwb3J0IHJlcXVlc3Qgb3V0IHRvIFNvbmF0eXBlIGZvciB0aGlzLCB3ZSdsbCBzZWUgaWYgdGhpcyBjaGFuZ2VzIG92ZXIgdGltZS5cbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwICYmIGJvZHkgPT09ICdGYWlsZWQgdG8gcHJvY2VzcyByZXF1ZXN0OiBzZXJ2aWNlIGVycm9yJykge1xuICAgIHJldHVybiAnZHVwbGljYXRlLXZlcnNpb24nO1xuICB9XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c30gJHtyZXNwb25zZS5zdGF0dXNUZXh0fTogJHtib2R5fWApO1xuICB9XG5cbiAgY29uc29sZS5sb2coYm9keSk7XG5cbiAgcmV0dXJuICdvayc7XG59XG5cbi8qKlxuICogU2lnbiBhbmQgc3RhZ2Ugb3VyIGFydGlmYWN0cyBpbnRvIGEgbG9jYWwgZGlyZWN0b3J5XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNpZ25KYXJzKG1hdmVuOiBNYXZlbiwgcG9tczogc3RyaW5nW10sIHRhcmdldERpcjogc3RyaW5nLCBzZXJ2ZXJJZDogc3RyaW5nLCBrZXk6IFByaXZhdGVLZXkpIHtcbiAgYXdhaXQgdXNpbmcgZ3BnID0gYXdhaXQgaW1wb3J0R3BnS2V5KGtleSk7XG5cbiAgLy8gb24gYSBtYWMsIC0tcGluZW50cnktbW9kZSB0byBcImxvb3BiYWNrXCIgYXJlIHJlcXVpcmVkIGFuZCBJIGNvdWxkbid0IGZpbmQgYVxuICAvLyB3YXkgdG8gZG8gc28gdmlhIC1EZ3BnLmdwZ0FyZ3VtZW50cyBvciB0aGUgc2V0dGluZ3MgZmlsZSwgc28gaGVyZSB3ZSBhcmUuXG4gIGxldCBncGdCaW4gPSAnZ3BnJztcbiAgaWYgKG9zLnBsYXRmb3JtKCkgPT09ICdkYXJ3aW4nKSB7XG4gICAgZ3BnQmluID0gcGF0aC5qb2luKG1hdmVuLndvcmtEaXIsICdwdWJsaWItZ3BnLnNoJyk7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGdwZ0JpbiwgW1xuICAgICAgJyMhL2Jpbi9iYXNoJyxcbiAgICAgICdleGVjIGdwZyAtLXBpbmVudHJ5LW1vZGUgbG9vcGJhY2sgXCJcXCRAXCInLFxuICAgIF0uam9pbignXFxuJyksICd1dGYtOCcpO1xuICAgIGF3YWl0ICRgY2htb2QgK3ggJHtncGdCaW59YDtcbiAgfVxuXG4gIGZvciAoY29uc3QgcG9tIG9mIHBvbXMpIHtcbiAgICBhd2FpdCBtYXZlbi5leGVjKCdncGc6c2lnbi1hbmQtZGVwbG95LWZpbGUnLCB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICd1cmwnOiBgZmlsZTovLyR7dGFyZ2V0RGlyfWAsXG4gICAgICAgICdyZXBvc2l0b3J5SWQnOiBzZXJ2ZXJJZCwgLy8gTW9zdCBsaWtlbHkgbm90IG5lY2Vzc2FyeVxuICAgICAgICAnZ3BnLmhvbWVkaXInOiBncGcuaG9tZSxcbiAgICAgICAgJ2dwZy5rZXluYW1lJzogZ3BnLmtleUlkLFxuICAgICAgICAnZ3BnLmV4ZWN1dGFibGUnOiBncGdCaW4sXG4gICAgICAgICdwb21GaWxlJzogcG9tLFxuICAgICAgICAuLi5qYXJzRnJvbVBvbShwb20pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEJhc2VkIG9uIHRoZSBwYXRoIG9mIGEgLnBvbSBmaWxlLCByZXR1cm4gdGhlIHBhdGhzIG9mIHRoZSBjb3JyZXNwb25kaW5nIGphcnNcbiAqL1xuZnVuY3Rpb24gamFyc0Zyb21Qb20ocG9tOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHtcbiAgICBmaWxlOiBwb20ucmVwbGFjZSgvXFwucG9tJC8sICcuamFyJyksXG4gICAgc291cmNlczogcG9tLnJlcGxhY2UoL1xcLnBvbSQvLCAnLXNvdXJjZXMuamFyJyksXG4gICAgamF2YWRvYzogcG9tLnJlcGxhY2UoL1xcLnBvbSQvLCAnLWphdmFkb2MuamFyJyksXG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBhbmQgaW1wb3J0IHRoZSBHUEcga2V5IG1hdGVyaWFsIGludG8gYSBuZXcga2V5Y2hhaW4gdGhlcmVcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R3BnS2V5KGtleTogUHJpdmF0ZUtleSkge1xuICAvLyBHbnVQRyB3aWxsIG9jY2FzaW9uYWxseSBiYWlsIG91dCB3aXRoIFwiZ3BnOiA8d2hhdGV2ZXI+IGZhaWxlZDogSW5hcHByb3ByaWF0ZSBpb2N0bCBmb3IgZGV2aWNlXCIsIHRoZSBmb2xsb3dpbmcgYXR0ZW1wdHMgdG8gZml4XG4gIGNvbnN0IGdwZ0hvbWUgPSBhdXRvQ2xlYW5EaXIoKTtcbiAgdHJ5IHtcbiAgICAvLyBJbiBDSSBlbnZpcm9ubWVudHMgdGhlcmUgd2lsbCBiZSBubyB0dHksIGFuZCB3ZSBkb24ndCB3YW50IHRoaXMgdG8gc3RvcCB0aGUgc2NyaXB0LlxuICAgIC8vIFRoZSB2YXJpYWJsZSB3aWxsIGJlIHBvcHVsYXRlZCB3aXRoIGEgbm9uc2Vuc2ljYWwgc3RyaW5nIChcIm5vdCBhIHR0eVwiKSBidXQgdGhhdCBkb2Vzbid0IHNlZW0gdG8gbWF0dGVyLlxuICAgIGNvbnN0IHR0eSA9IChhd2FpdCAkKHsgc3RkaW86IFsnaW5oZXJpdCcsICdwaXBlJywgJ3BpcGUnXSwgbm90aHJvdzogdHJ1ZSB9KWB0dHlgKS5zdGRvdXQ7XG5cbiAgICBsZXQgcHJpdmF0ZUtleUZpbGU7XG4gICAgY29uc3QgdHlwZSA9IGtleS50eXBlO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnZmlsZSc6XG4gICAgICAgIHByaXZhdGVLZXlGaWxlID0ga2V5LmZpbGVOYW1lO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21hdGVyaWFsJzpcbiAgICAgICAgcHJpdmF0ZUtleUZpbGUgPSBwYXRoLmpvaW4oZ3BnSG9tZS5kaXIsICdwcml2YXRlLnBlbScpO1xuICAgICAgICBhd2FpdCAkYGVjaG8gLWUgJHtrZXkua2V5TWF0ZXJpYWx9ID4gJHtwcml2YXRlS2V5RmlsZX1gO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydE5ldmVyKHR5cGUpO1xuICAgIH1cblxuICAgIGNvbnN0IGVudiA9IHtcbiAgICAgIEdOVVBHSE9NRTogZ3BnSG9tZS5kaXIsXG4gICAgICBHUEdfVFRZOiB0dHksXG4gICAgfTtcblxuICAgIGNvbnN0ICQkID0gJCh7IGVudjogeyAuLi5wcm9jZXNzLmVudiwgLi4uZW52IH0gfSk7XG5cbiAgICBhd2FpdCAkJGBncGcgLS1hbGxvdy1zZWNyZXQta2V5LWltcG9ydCAtLWJhdGNoIC0teWVzIC0tbm8tdHR5IC0taW1wb3J0ICR7cHJpdmF0ZUtleUZpbGV9YDtcbiAgICBjb25zdCBncGdLZXlJZCA9IChhd2FpdCAkJGBncGcgLS1saXN0LWtleXMgLS13aXRoLWNvbG9ucyB8IGdyZXAgcHViIHwgY3V0IC1kOiAtZjVgKS5zdGRvdXQudHJpbSgpO1xuXG4gICAgZWNobyhgZ3BnX2tleV9pZD0ke2dwZ0tleUlkfWApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGtleUlkOiBncGdLZXlJZCxcbiAgICAgIGVudixcbiAgICAgIGhvbWU6IGdwZ0hvbWUuZGlyLFxuICAgICAgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdOiBhc3luYyAoKSA9PiBncGdIb21lW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCksXG4gICAgfTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGF3YWl0IGdwZ0hvbWVbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbmNsYXNzIE1hdmVuIHtcbiAgcHJpdmF0ZSByZWFkb25seSBzZXR0aW5nc0ZpbGU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgd29ya0Rpcjogc3RyaW5nLCBwcml2YXRlIHJlYWRvbmx5IHZlcmJvc2U6IGJvb2xlYW4sIHB1YmxpYyByZWFkb25seSBkcnlSdW46IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldHRpbmdzRmlsZSA9IHBhdGguam9pbih3b3JrRGlyLCAnbXZuLXNldHRpbmdzLnhtbCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHNldHRpbmdzLnhtbCBmaWxlIHdpdGggdGhlIHVzZXIrcGFzc3dvcmQgZm9yIG1hdmVuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgd3JpdGVTZXR0aW5nc0ZpbGUoc2VydmVySWQ6IHN0cmluZywgc2lnbmVkQXJ0aWZhY3RzOiBib29sZWFuKSB7XG4gICAgY29uc3QgbGluZXMgPSBbXTtcblxuICAgIGxpbmVzLnB1c2goXG4gICAgICAnPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIiA/PicsXG4gICAgICAnPHNldHRpbmdzIHhtbG5zPVwiaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvU0VUVElOR1MvMS4wLjBcIicsXG4gICAgICAnICAgICAgICB4bWxuczp4c2k9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZVwiJyxcbiAgICAgICcgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj1cImh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1NFVFRJTkdTLzEuMC4wJyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL3NldHRpbmdzLTEuMC4wLnhzZFwiPicsXG4gICAgICAnICA8c2VydmVycz4nLFxuICAgICAgJyAgICA8c2VydmVyPicsXG4gICAgICBgICAgICAgPGlkPiR7c2VydmVySWR9PC9pZD5gLFxuICAgICAgLy8gTWF2ZW4gd2lsbCByZWFkIHRoZXNlLCBzdXJyb3VuZGluZyBjb2RlIGhhcyBhbHJlYWR5IG1hZGUgc3VyZSB0aGV5IGFyZSBzZXRcbiAgICAgICcgICAgICA8dXNlcm5hbWU+JHtlbnYuTUFWRU5fVVNFUk5BTUV9PC91c2VybmFtZT4nLFxuICAgICAgJyAgICAgIDxwYXNzd29yZD4ke2Vudi5NQVZFTl9QQVNTV09SRH08L3Bhc3N3b3JkPicsXG4gICAgICAnICAgIDwvc2VydmVyPicsXG4gICAgKTtcblxuICAgIGlmIChzaWduZWRBcnRpZmFjdHMpIHtcbiAgICAgIGxpbmVzLnB1c2goXG4gICAgICAgICcgICAgPHNlcnZlcj4nLFxuICAgICAgICAnICAgICAgPGlkPmdwZy5wYXNzcGhyYXNlPC9pZD4nLFxuICAgICAgICAvLyBNYXZlbiB3aWxsIHJlYWQgdGhlc2UsIHN1cnJvdW5kaW5nIGNvZGUgaGFzIGFscmVhZHkgbWFkZSBzdXJlIHRoZXkgYXJlIHNldFxuICAgICAgICAnICAgICAgPHBhc3NwaHJhc2U+JHtlbnYuTUFWRU5fR1BHX1BSSVZBVEVfS0VZX1BBU1NQSFJBU0V9PC9wYXNzcGhyYXNlPicsXG4gICAgICAgICcgICAgPC9zZXJ2ZXI+JyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGluZXMucHVzaChcbiAgICAgICcgIDwvc2VydmVycz4nLFxuICAgICAgJzwvc2V0dGluZ3M+JyxcbiAgICApO1xuXG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHRoaXMuc2V0dGluZ3NGaWxlLCBsaW5lcy5qb2luKCdcXG4nKSwgJ3V0Zi04Jyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZXhlYyhtb2pvOiBzdHJpbmcsIG9wdGlvbnM6IE1hdmVuRXhlY09wdGlvbnMpOiBQcm9taXNlPFByb2Nlc3NPdXRwdXQgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgYC0tc2V0dGluZ3M9JHt0aGlzLnNldHRpbmdzRmlsZX1gLFxuICAgICAgLi4uKG9wdGlvbnMudmVyYm9zZSA/PyB0aGlzLnZlcmJvc2UgPyBbJy1YJ10gOiBbXSksXG4gICAgICBtb2pvLFxuICAgICAgLi4uT2JqZWN0LmVudHJpZXMob3B0aW9ucy5wcm9wZXJ0aWVzKS5tYXAoKFtrLCB2XSkgPT4gYC1EJHtrfT0ke3Z9YCksXG4gICAgXTtcblxuICAgIGlmICh0aGlzLmRyeVJ1bikge1xuICAgICAgZWNobyhgW0RSWS1SVU5dIG12biAke2FyZ3MubWFwKHF1b3RlKS5qb2luKCcgJyl9YCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBlbnYgPSB7XG4gICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgIEpES19KQVZBX09QVElPTlM6IFtcbiAgICAgICAgLy8gSWYgd2UgZG9uJ3QgYWRkIHRoaXMsIHdlJ2xsIGdldCBhbiBlcnJvciBsaWtlIHRoZSBmb2xsb3dpbmcgZHVyaW5nIHRoZSBuZXh1cy1zdGFnaW5nLW1hdmVuLXBsdWdpbjpyYy1yZWxlYXNlIG1vam8uXG4gICAgICAgIC8vIERvbid0IGtub3cgd2hlcmUgdGhpcyBpcyBjb21pbmcgZnJvbSBhbGwgb2YgYSBzdWRkZW4uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFtFUlJPUl0gbWVzc2FnZSAgICAgICAgICAgICA6IE5vIGNvbnZlcnRlciBhdmFpbGFibGVcbiAgICAgICAgLy8gW0VSUk9SXSB0eXBlICAgICAgICAgICAgICAgIDogamF2YS51dGlsLkFycmF5cyRBcnJheUxpc3RcbiAgICAgICAgLy8gW0VSUk9SXSBjb252ZXJ0ZXIgICAgICAgICAgIDogY29tLnRob3VnaHR3b3Jrcy54c3RyZWFtLmNvbnZlcnRlcnMucmVmbGVjdGlvbi5SZWZsZWN0aW9uQ29udmVydGVyXG4gICAgICAgIC8vIFtFUlJPUl0gbWVzc2FnZVsxXSAgICAgICAgICA6IFVuYWJsZSB0byBtYWtlIGZpZWxkIHByb3RlY3RlZCB0cmFuc2llbnQgaW50IGphdmEudXRpbC5BYnN0cmFjdExpc3QubW9kQ291bnQgYWNjZXNzaWJsZTogbW9kdWxlIGphdmEuYmFzZSBkb2VzIG5vdCBcIm9wZW5zIGphdmEudXRpbFwiIHRvIHVubmFtZWQgbW9kdWxlIEA3YzhkNTMxMlxuICAgICAgICAnLS1hZGQtb3BlbnM9amF2YS5iYXNlL2phdmEudXRpbD1BTEwtVU5OQU1FRCcsXG4gICAgICAgICctLWFkZC1vcGVucz1qYXZhLmJhc2UvamF2YS5sYW5nPUFMTC1VTk5BTUVEJyxcbiAgICAgICAgJy0tYWRkLW9wZW5zPWphdmEuYmFzZS9qYXZhLmxhbmcuaW52b2tlPUFMTC1VTk5BTUVEJyxcbiAgICAgIF0uam9pbignICcpLFxuICAgIH07XG5cbiAgICByZXR1cm4gJCh7IHZlcmJvc2U6IHRydWUsIG5vdGhyb3c6IG9wdGlvbnMubm90aHJvdywgZW52IH0pYG12biAke2FyZ3N9YDtcbiAgfVxufVxuXG5pbnRlcmZhY2UgTWF2ZW5FeGVjT3B0aW9ucyB7XG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIG5vdGhyb3c/OiBib29sZWFuO1xuICB2ZXJib3NlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIGV4cGVjdGVkIGVycm9yIHRoYXQgZG9lc24ndCBuZWVkIGEgc3RhY2sgdHJhY2VcbiAqL1xuY2xhc3MgU2ltcGxlRXJyb3IgZXh0ZW5kcyBFcnJvciB7IH1cblxuLyoqXG4gKiBSZXF1aXJlIGFuIGVudmlyb25tZW50IHZhcmlhYmxlXG4gKi9cbmZ1bmN0aW9uIGVudlZhcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZXQgPSBwcm9jZXNzLmVudltuYW1lXTtcbiAgaWYgKCFyZXQpIHtcbiAgICB0aHJvdyBuZXcgU2ltcGxlRXJyb3IoYCR7bmFtZX0gaXMgcmVxdWlyZWRgKTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIEEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGF0IGNsZWFucyB3aGVuIGl0IGdvZXMgb3V0IG9mIHNjb3BlXG4gKlxuICogVXNlIHdpdGggYHVzaW5nYC4gQ291bGQgaGF2ZSBiZWVuIGFzeW5jIGJ1dCBpdCdzIGRlcGVuZGluZ1xuICogb24gYW4gYWxyZWFkeS1zeW5jIEFQSSwgc28gd2h5IG5vdCBzeW5jP1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXV0b0NsZWFuRGlyKCkge1xuICBjb25zdCBkaXIgPSB0bXBkaXIoKTtcbiAgcmV0dXJuIHtcbiAgICBkaXIsXG4gICAgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdOiBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBmcy5ybShkaXIsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBhc3NlcnROZXZlcih2YWx1ZTogbmV2ZXIpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHZhbHVlOiAnICsgdmFsdWUpO1xufVxuXG4vLyBBICd6eCcgcHJpbWVyXG4vL1xuLy8gLSBCeSBkZWZhdWx0OiBzdGRlcnIgaXMgcHJpbnRlZCB0byB0aGUgdGVybWluYWwgaWYgaXQgaXMgY2FwdHVyZWQuXG4vLyAtIHsgdmVyYm9zZTogdHJ1ZSB9OiBwcmludCB0aGUgY29tbWFuZCwgc3Rkb3V0IGFuZCBzdGRlcnIgdG8gdGhlIHRlcm1pbmFsXG4vLyAtIHsgcXVpZXQ6IHRydWUgfTogcHJpbnQgbmVpdGhlciBzdGRvdXQgbm9yIHN0ZGVyclxuLy9cbi8vIC50ZXh0KCk6IHJldHVybiBldmVyeXRoaW5nIHRoYXQncyBjYXB0dXJlZCAoc3RkZXJyIGFuZCBzdGRvdXQgdG9nZXRoZXIgaWYgc3RkZXJyIGlzIGNhcHR1cmVkKVxuXG5tYWluKCkuY2F0Y2goZSA9PiB7XG4gIGlmIChlIGluc3RhbmNlb2YgUHJvY2Vzc091dHB1dCkge1xuICAgIGVjaG8oYOKdjCBTdWJwcm9jZXNzIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAke2UuZXhpdENvZGV9YCk7XG4gIH0gZWxzZSBpZiAoZSBpbnN0YW5jZW9mIFNpbXBsZUVycm9yKSB7XG4gICAgZWNobygn4p2MJywgZS5tZXNzYWdlKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmVycm9yKGUpO1xuICB9XG4gIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xufSk7XG4iXX0=
|
|
611
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGliLW1hdmVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9wdWJsaWItbWF2ZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNG5CQSxvQ0FRQztBQXBvQkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFDSCwyQkFBb0M7QUFDcEMsMkJBQStFO0FBRS9FLE1BQU0sc0JBQXNCLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLE1BQU0sd0JBQXdCLEdBQUcsZUFBZSxDQUFDO0FBRWpELE1BQU0sMEJBQTBCLEdBQUcsdURBQXVELENBQUM7QUFFM0YsS0FBSyxVQUFVLElBQUk7SUFDakIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQztJQUV4QyxJQUFBLE9BQUUsRUFBQyxRQUFRLENBQUMsQ0FBQztJQUViLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSxTQUFJLEVBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sSUFBSSxXQUFXLENBQUMsaURBQWlELE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELElBQUEsU0FBSSxFQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUU1QixNQUFNLGFBQWEsR0FBeUI7UUFDMUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztRQUNsQyxRQUFRLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBQ2xDLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksS0FBSyxN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RSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNyRCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFZO0lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUVELGdCQUFnQjtBQUNoQixFQUFFO0FBQ0YscUVBQXFFO0FBQ3JFLDRFQUE0RTtBQUM1RSxxREFBcUQ7QUFDckQsRUFBRTtBQUNGLGdHQUFnRztBQUVoRyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDZixJQUFJLENBQUMsWUFBWSxrQkFBYSxFQUFFLENBQUM7UUFDL0IsSUFBQSxTQUFJLEVBQUMsc0NBQXNDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7U0FBTSxJQUFJLENBQUMsWUFBWSxXQUFXLEVBQUUsQ0FBQztRQUNwQyxJQUFBLFNBQUksRUFBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDdkIsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExlZ2FjeSB2cyBjb21wYXRpYmlsaXR5IGVuZHBvaW50XG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKlxuICogVGhpcyBzY3JpcHQgdGFsa3MgYWJvdXQgbGVnYWN5IHZzIGNvbXBhdGliaWxpdHkgZW5kcG9pbnQgYSBidW5jaC5cbiAqXG4gKiBCb3RoIGltcGxlbWVudCB0aGUgTmV4dXMgMiBwcm90b2NvbCwgaG93ZXZlcjpcbiAqXG4gKiAtIFRoZSBcImxlZ2FjeVwiIGVuZHBvaW50IGlzIHRoZSBTb25hdHlwZSBPU1NSSCBlbmRwb2ludCB0aGF0IHdhcyBkZXByZWNhdGVkIEp1bmUgMjAyNS5cbiAqIC0gVGhlIFwiY29tcGF0aWJpbGl0eVwiIGVuZHBvaW50IGlzIGEgTmV4dXMgMi1jb21wYXRpYmxlIGVuZHBvaW50IHN0b29kIHVwIGZvciB0aGUgbmV3XG4gKiAgIHB1Ymxpc2hpbmcgc2VydmljZSwgQ2VudHJhbCBQdWJsaXNoaW5nLlxuICpcbiAqIEl0IHNob3VsZCBiZSB0aGUgc2FtZSBwcm90b2NvbCBidXQgb2YgY291cnNlIHRoZXJlIGFyZSBzdWJ0bGUgZGlmZmVyZW5jZXNcbiAqIGJldHdlZW4gdGhlbSAoaW4gaG93IHRoZXkgc2lnbmFsIGVycm9yIHdoZW4geW91IHRyeSB0byByZXB1Ymxpc2ggYW4gYWxyZWFkeVxuICogcHVibGlzaGVkIHZlcnNpb24sIGFuZCBldmVuIGluIHRoZSB3aXJlIHByb3RvY29sIGFjY2VwdGVkKSBzbyB3ZSBoYXZlIHRvXG4gKiB0cmVhdCB0aGVtIGRpZmZlcmVudGx5IGhlcmUuXG4gKlxuICogVGhlcmUgaXMgYWxzbyBhbiBcIm9mZmljaWFsIG5ld1wiIHByb3RvY29sIGZvciB0aGUgbmV3IHB1Ymxpc2hpbmcgbWVjaGFuaXNtLFxuICogYnV0IHRoZSBNYXZlbiBwbHVnaW4gdGhleSBzdXBwbHkgZm9yIHRoYXQgZG9lc24ndCBzdXBwb3J0IHRoYXQuIEluIHRoZWlyIHdvcmRzOlxuICpcbiAqID4gaXQgYXBwZWFycyB0aGF0IHlvdSBhcmUgdXNpbmcgdGhlIFwidHdvIHN0YWdlXCJbMV0gZGVwbG95bWVudCBwcm9jZXNzLCB3aGljaCBpc1xuICogPiBub3QgeWV0IHN1cHBvcnRlZCBieSB0aGUgbmV3IHBsdWdpbi4gWW91IGFyZSB0aGUgZmlyc3QgcHVibGlzaGVyIHRvIGhhdmVcbiAqID4gcmVxdWVzdGVkIHRoaXMsIHNvIHdlIHdlcmUgbm90IGZhbWlsaWFyIHdpdGggdGhpcyBzcGVjaWZpYyB1c2VjYXNlIHdoZW5cbiAqID4gYnVpbGRpbmcgdGhlIG5ldyBwbHVnaW5cbiAqID4gWzFdIDxodHRwczovL2dpdGh1Yi5jb20vc29uYXR5cGUvbmV4dXMtbWF2ZW4tcGx1Z2lucy9ibG9iLzQzYTk5NDBiMTM0YzNmODdlYmU0ZGFhODI1NTJlODQ0ZDljNTc4Yjgvc3RhZ2luZy9tYXZlbi1wbHVnaW4vV09SS0ZMT1dTLm1kI3R3by1zaG90cz5cbiAqL1xuaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyAkLCBjZCwgZWNobywgZ2xvYiwgb3MsIHBhdGgsIFByb2Nlc3NPdXRwdXQsIHF1b3RlLCB0bXBkaXIgfSBmcm9tICd6eCc7XG5cbmNvbnN0IExFR0FDWV9PU1NSSF9TRVJWRVJfSUQgPSAnb3NzcmgnO1xuY29uc3QgQ09NUEFUX0NFTlRSQUxfU0VSVkVSX0lEID0gJ2NlbnRyYWwtb3NzcmgnO1xuXG5jb25zdCBORVhVU19NQVZFTl9TVEFHSU5HX1BMVUdJTiA9ICdvcmcuc29uYXR5cGUucGx1Z2luczpuZXh1cy1zdGFnaW5nLW1hdmVuLXBsdWdpbjoxLjcuMCc7XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gIGNvbnN0IGFyZ3MgPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMik7XG4gIGNvbnN0IGphdmFSb290ID0gYXJnc1swXSA/PyAnZGlzdC9qYXZhJztcblxuICBjZChqYXZhUm9vdCk7XG5cbiAgY29uc3QgcG9tcyA9IGF3YWl0IGdsb2IoJyoqLyoucG9tJyk7XG4gIGlmIChwb21zLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBTaW1wbGVFcnJvcihgTm8gSkFSUyB0byBwdWJsaXNoOiBubyAucG9tIGZpbGVzIGZvdW5kIHVuZGVyICR7cHJvY2Vzcy5jd2QoKX1gKTtcbiAgfVxuXG4gIGVjaG8oYFBPTXMgZm91bmQ6ICR7cG9tc31gKTtcblxuICBjb25zdCBzaGFyZWRPcHRpb25zOiBTaGFyZWRQdWJsaXNoT3B0aW9ucyA9IHtcbiAgICB1c2VybmFtZTogZW52VmFyKCdNQVZFTl9VU0VSTkFNRScpLFxuICAgIHBhc3N3b3JkOiBlbnZWYXIoJ01BVkVOX1BBU1NXT1JEJyksXG4gICAgZHJ5UnVuOiBwcm9jZXNzLmVudi5NQVZFTl9EUllSVU4gPT09ICd0cnVlJyxcbiAgICB2ZXJib3NlOiBwcm9jZXNzLmVudi5NQVZFTl9WRVJCT1NFID09PSAndHJ1ZScsXG4gICAgcG9tcyxcbiAgfTtcblxuICBsZXQgb3B0aW9uczogTWF2ZW5QdWJsaXNoT3B0aW9ucztcbiAgY29uc3Qgc2VydmVySWQgPSBwcm9jZXNzLmVudi5NQVZFTl9TRVJWRVJfSUQgPz8gTEVHQUNZX09TU1JIX1NFUlZFUl9JRDtcblxuICBzd2l0Y2ggKHNlcnZlcklkKSB7XG4gICAgY2FzZSBMRUdBQ1lfT1NTUkhfU0VSVkVSX0lEOlxuICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgdHlwZTogJ2xlZ2FjeS1vc3NyaCcsXG4gICAgICAgIC4uLnNoYXJlZE9wdGlvbnMsXG4gICAgICAgIHN0YWdpbmdQcm9maWxlSWQ6IGVudlZhcignTUFWRU5fU1RBR0lOR19QUk9GSUxFX0lEJyksXG4gICAgICAgIGVuZHBvaW50OiBwcm9jZXNzLmVudi5NQVZFTl9FTkRQT0lOVCxcbiAgICAgICAgcHJpdmF0ZUtleTogcGFyc2VQcml2YXRlS2V5RnJvbUVudigpLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQ09NUEFUX0NFTlRSQUxfU0VSVkVSX0lEOlxuICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgdHlwZTogJ2NvbXBhdC1vc3NyaCcsXG4gICAgICAgIC4uLnNoYXJlZE9wdGlvbnMsXG4gICAgICAgIC8vIE5vdCByZXF1aXJlZCBieSB0aGUgbmV3IGVuZHBvaW50OiBjYW4gYmUgYW55IHZhbHVlIChtYXliZSBuZXZlciB3YXMgcmVxdWlyZWQgdG8gYmVnaW4gd2l0aD8pXG4gICAgICAgIHN0YWdpbmdQcm9maWxlSWQ6ICdwdWJsaWInLFxuICAgICAgICBlbmRwb2ludDogcHJvY2Vzcy5lbnYuTUFWRU5fRU5EUE9JTlQsXG4gICAgICAgIHByaXZhdGVLZXk6IHBhcnNlUHJpdmF0ZUtleUZyb21FbnYoKSxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gV2UgaGF2ZW4ndCBpbXBsZW1lbnRlZCBzaWduaW5nIGZvciB0aGlzLCBzbyBmYWlsIGxvdWRseSBpZiBwZW9wbGUgdHJ5IHRvIHVzZSBpdCBhbnl3YXlcbiAgICAgIGlmIChwcm9jZXNzLmVudi5NQVZFTl9HUEdfUFJJVkFURV9LRVkgfHwgcHJvY2Vzcy5lbnYuTUFWRU5fR1BHX1BSSVZBVEVfS0VZX0ZJTEUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNpbXBsZUVycm9yKCdNQVZFTl9HUEdfUFJJVkFURV9LRVlbX0ZJTEVdIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBPU1NSSCBwdWJsaXNoaW5nJyk7XG4gICAgICB9XG5cbiAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIHR5cGU6ICdjdXN0b20tbmV4dXMnLFxuICAgICAgICAuLi5zaGFyZWRPcHRpb25zLFxuICAgICAgICBzZXJ2ZXJJZCxcbiAgICAgICAgcmVwb3NpdG9yeVVybDogZW52VmFyKCdNQVZFTl9SRVBPU0lUT1JZX1VSTCcpLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgYXdhaXQgbWF2ZW5QdWJsaXNoKG9wdGlvbnMpO1xuXG4gIGVjaG8oJ35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4nKTtcbiAgZWNobygn4pyFIEFsbCBEb25lIScpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVByaXZhdGVLZXlGcm9tRW52KCk6IFByaXZhdGVLZXkge1xuICBpZiAocHJvY2Vzcy5lbnYuTUFWRU5fR1BHX1BSSVZBVEVfS0VZX0ZJTEUpIHtcbiAgICByZXR1cm4geyB0eXBlOiAnZmlsZScsIGZpbGVOYW1lOiBwcm9jZXNzLmVudi5NQVZFTl9HUEdfUFJJVkFURV9LRVlfRklMRSwgcGFzc1BocmFzZTogZW52VmFyKCdNQVZFTl9HUEdfUFJJVkFURV9LRVlfUEFTU1BIUkFTRScpIH07XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk1BVkVOX0dQR19QUklWQVRFX0tFWSkge1xuICAgIHJldHVybiB7IHR5cGU6ICdtYXRlcmlhbCcsIGtleU1hdGVyaWFsOiBwcm9jZXNzLmVudi5NQVZFTl9HUEdfUFJJVkFURV9LRVksIHBhc3NQaHJhc2U6IGVudlZhcignTUFWRU5fR1BHX1BSSVZBVEVfS0VZX1BBU1NQSFJBU0UnKSB9O1xuICB9XG4gIHRocm93IG5ldyBTaW1wbGVFcnJvcignTUFWRU5fR1BHX1BSSVZBVEVfS0VZW19GSUxFXSBpcyByZXF1aXJlZCcpO1xufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vICBNb2RlbGluZyBhbGwgdGhlIHBhcmFtZXRlcnMgc28gdGhhdCB3ZSBjYW4gcHVsbCB0aGUgZW52aXJvbm1lbnQgcGFyc2luZyBmb3J3YXJkXG4vL1xuXG5pbnRlcmZhY2UgU2hhcmVkUHVibGlzaE9wdGlvbnMge1xuICByZWFkb25seSB1c2VybmFtZTogc3RyaW5nO1xuICByZWFkb25seSBwYXNzd29yZDogc3RyaW5nO1xuICByZWFkb25seSBkcnlSdW46IGJvb2xlYW47XG4gIHJlYWRvbmx5IHZlcmJvc2U6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHBvbXM6IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgTGVnYWN5T3NzcmhQdWJsaXNoT3B0aW9ucyBleHRlbmRzIFNoYXJlZFB1Ymxpc2hPcHRpb25zIHtcbiAgdHlwZTogJ2xlZ2FjeS1vc3NyaCc7XG4gIHJlYWRvbmx5IHByaXZhdGVLZXk6IFByaXZhdGVLZXk7XG4gIHJlYWRvbmx5IGVuZHBvaW50Pzogc3RyaW5nO1xuICByZWFkb25seSBzdGFnaW5nUHJvZmlsZUlkOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBDb21wYXRPc3NyaFB1Ymxpc2hPcHRpb25zIGV4dGVuZHMgU2hhcmVkUHVibGlzaE9wdGlvbnMge1xuICB0eXBlOiAnY29tcGF0LW9zc3JoJztcbiAgcmVhZG9ubHkgcHJpdmF0ZUtleTogUHJpdmF0ZUtleTtcbiAgcmVhZG9ubHkgZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YWdpbmdQcm9maWxlSWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEN1c3RvbU5leHVzUHVibGlzaE9wdGlvbnMgZXh0ZW5kcyBTaGFyZWRQdWJsaXNoT3B0aW9ucyB7XG4gIHR5cGU6ICdjdXN0b20tbmV4dXMnO1xuICByZWFkb25seSByZXBvc2l0b3J5VXJsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNlcnZlcklkOiBzdHJpbmc7XG59XG5cbnR5cGUgUHJpdmF0ZUtleSA9XG4gIHwgeyB0eXBlOiAnZmlsZSc7IGZpbGVOYW1lOiBzdHJpbmc7IHBhc3NQaHJhc2U6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnbWF0ZXJpYWwnOyBrZXlNYXRlcmlhbDogc3RyaW5nOyBwYXNzUGhyYXNlOiBzdHJpbmcgfVxuICA7XG5cbnR5cGUgTWF2ZW5QdWJsaXNoT3B0aW9ucyA9IExlZ2FjeU9zc3JoUHVibGlzaE9wdGlvbnMgfCBDb21wYXRPc3NyaFB1Ymxpc2hPcHRpb25zfCBDdXN0b21OZXh1c1B1Ymxpc2hPcHRpb25zO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vICBQdWJsaXNoaW5nIGZ1bmN0aW9uc1xuLy9cblxuYXN5bmMgZnVuY3Rpb24gbWF2ZW5QdWJsaXNoKG9wdGlvbnM6IE1hdmVuUHVibGlzaE9wdGlvbnMpIHtcbiAgYXdhaXQgdXNpbmcgd29ya0RpciA9IGF1dG9DbGVhbkRpcigpO1xuICBjb25zdCBtYXZlbiA9IG5ldyBNYXZlbih3b3JrRGlyLmRpciwgb3B0aW9ucy52ZXJib3NlLCBvcHRpb25zLmRyeVJ1bik7XG5cbiAgY29uc3QgeCA9IG9wdGlvbnMudHlwZTtcbiAgc3dpdGNoICh4KSB7XG4gICAgY2FzZSAnbGVnYWN5LW9zc3JoJzpcbiAgICAgIGF3YWl0IGRlcGxveUxlZ2FjeU9zc3JoKG1hdmVuLCBvcHRpb25zKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbXBhdC1vc3NyaCc6XG4gICAgICBhd2FpdCBkZXBsb3lDb21wYXRPc3NyaChtYXZlbiwgb3B0aW9ucyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjdXN0b20tbmV4dXMnOlxuICAgICAgYXdhaXQgZGVwbG95Q3VzdG9tTmV4dXMobWF2ZW4sIG9wdGlvbnMpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGFzc2VydE5ldmVyKHgpO1xuICB9XG59XG5cbi8qKlxuICogRGVwbG95IHRvIHRoZSBsZWdhY3kgT1NTUkggTmV4dXMgc2VydmVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlcGxveUxlZ2FjeU9zc3JoKG1hdmVuOiBNYXZlbiwgb3B0aW9uczogTGVnYWN5T3NzcmhQdWJsaXNoT3B0aW9ucykge1xuICBlY2hvKCfwn5OmIFB1Ymxpc2hpbmcgdG8gTWF2ZW4gQ2VudHJhbCcpO1xuICBjb25zdCBkZWZhdWx0RW5kcG9pbnQgPSAnaHR0cHM6Ly9vc3Muc29uYXR5cGUub3JnJztcblxuICBjb25zdCBzdGFnZWQgPSBhd2FpdCBkZXBsb3lTdGFnZWRSZXBvc2l0b3J5KG1hdmVuLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBlbmRwb2ludDogb3B0aW9ucy5lbmRwb2ludCA/PyBkZWZhdWx0RW5kcG9pbnQsXG4gICAgcmVwdWJsaXNoV2lsbDQwMDogZmFsc2UsXG4gIH0pO1xuXG4gIGlmIChzdGFnZWQudHlwZSAhPT0gJ3N1Y2Nlc3MnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLypcbiAgY29uc3QgcmVsZWFzZWQgPSBhd2FpdCByZWxlYXNlUmVwbyh7XG4gICAgc2VydmVyVXJsOiBvcHRpb25zLmVuZHBvaW50ID8/IGRlZmF1bHRFbmRwb2ludCxcbiAgICB1c2VybmFtZTogb3B0aW9ucy51c2VybmFtZSxcbiAgICBwYXNzd29yZDogb3B0aW9ucy5wYXNzd29yZCxcbiAgICByZXBvc2l0b3J5SWQ6IHN0YWdlZC5yZXBvc2l0b3J5SWQsXG4gIH0pO1xuXG4gIGlmIChyZWxlYXNlZCkge1xuICAgIHJldHVybjtcbiAgfVxuICAqL1xuXG4gIC8vIFNlbmQgYSByZW1vdGUgcmVsZWFzZSBjb21tYW5kIHRvIHRoZSByZXBvc2l0b3J5XG4gIGNvbnN0IHJlbGVhc2VPdXRwdXQgPSBhd2FpdCBtYXZlbi5leGVjKGAke05FWFVTX01BVkVOX1NUQUdJTkdfUExVR0lOfTpyYy1yZWxlYXNlYCwge1xuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIG5leHVzVXJsOiBvcHRpb25zLmVuZHBvaW50ID8/IGRlZmF1bHRFbmRwb2ludCxcbiAgICAgIHNlcnZlcklkOiBzdGFnZWQuc2VydmVySWQsXG4gICAgICBzdGFnaW5nUmVwb3NpdG9yeUlkOiBzdGFnZWQucmVwb3NpdG9yeUlkLFxuICAgIH0sXG4gICAgbm90aHJvdzogdHJ1ZSxcbiAgfSk7XG4gIGlmICghcmVsZWFzZU91dHB1dCkge1xuICAgIGVjaG8oJ/Cfj5zvuI8gU3RvcHBlZCBoZXJlIGJlY2F1c2Ugb2YgZHJ5LXJ1bicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChyZWxlYXNlT3V0cHV0LmV4aXRDb2RlICE9PSAwKSB7XG4gICAgLy8gSWYgcmVsZWFzZSBmYWlsZWQsIGNoZWNrIGlmIHRoaXMgd2FzIGNhdXNlZCBiZWNhdXNlIHdlIGFyZSB0cnlpbmcgdG8gcHVibGlzaFxuICAgIC8vIHRoZSBzYW1lIHZlcnNpb24gYWdhaW4sIHdoaWNoIGlzIG5vdCBhbiBlcnJvci4gVGhlIG1hZ2ljIHN0cmluZyBcImRvZXMgbm90XG4gICAgLy8gYWxsb3cgdXBkYXRpbmcgYXJ0aWZhY3RcIiBmb3IgYSBcIi5wb21cIiBmaWxlIGluZGljYXRlcyB0aGF0IHdlIGFyZSB0cnlpbmcgdG9cbiAgICAvLyBvdmVycmlkZSBhbiBleGlzdGluZyB2ZXJzaW9uLiBPdGhlcndpc2UsIGZhaWwhXG5cbiAgICBjb25zdCBsb29rc0xpa2VEdXBsaWNhdGVQdWJsaXNoID0gcmVsZWFzZU91dHB1dC5saW5lcygpXG4gICAgICAuZmlsdGVyKGwgPT4gbC5pbmNsdWRlcygnZG9lcyBub3QgYWxsb3cgdXBkYXRpbmcgYXJ0aWZhY3QnKSlcbiAgICAgIC5maWx0ZXIobCA9PiBsLmluY2x1ZGVzKCcucG9tJykpXG4gICAgICAubGVuZ3RoID4gMDtcblxuICAgIGlmICghbG9va3NMaWtlRHVwbGljYXRlUHVibGlzaCkge1xuICAgICAgdGhyb3cgbmV3IFNpbXBsZUVycm9yKCdSZWxlYXNlIGZhaWxlZCcpO1xuICAgIH1cblxuICAgIGVjaG8oJ+KaoO+4jyBBcnRpZmFjdCBhbHJlYWR5IHB1Ymxpc2hlZC4gU2tpcHBpbmcnKTtcbiAgfVxufVxuXG4vKipcbiAqIERlcGxveSB0byB0aGUgY29tcGF0IE9TU1JIIE5leHVzIHNlcnZlclxuICovXG5hc3luYyBmdW5jdGlvbiBkZXBsb3lDb21wYXRPc3NyaChtYXZlbjogTWF2ZW4sIG9wdGlvbnM6IENvbXBhdE9zc3JoUHVibGlzaE9wdGlvbnMpIHtcbiAgZWNobygn8J+TpiBQdWJsaXNoaW5nIHRvIE1hdmVuIENlbnRyYWwgKENvbXBhdCBlbmRwb2ludCknKTtcblxuICBjb25zdCBkZWZhdWx0RW5kcG9pbnQgPSAnaHR0cHM6Ly9vc3NyaC1zdGFnaW5nLWFwaS5jZW50cmFsLnNvbmF0eXBlLmNvbS8nO1xuICBjb25zdCBlbmRwb2ludCA9IG9wdGlvbnMuZW5kcG9pbnQgPz8gZGVmYXVsdEVuZHBvaW50O1xuXG4gIGNvbnN0IHN0YWdlZCA9IGF3YWl0IGRlcGxveVN0YWdlZFJlcG9zaXRvcnkobWF2ZW4sIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGVuZHBvaW50LFxuICAgIHJlcHVibGlzaFdpbGw0MDA6IHRydWUsXG4gIH0pO1xuXG4gIGlmIChzdGFnZWQudHlwZSAhPT0gJ3N1Y2Nlc3MnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVsZWFzZWQgPSBhd2FpdCByZWxlYXNlUmVwbyh7XG4gICAgc2VydmVyVXJsOiBlbmRwb2ludCxcbiAgICB1c2VybmFtZTogb3B0aW9ucy51c2VybmFtZSxcbiAgICBwYXNzd29yZDogb3B0aW9ucy5wYXNzd29yZCxcbiAgICByZXBvc2l0b3J5SWQ6IHN0YWdlZC5yZXBvc2l0b3J5SWQsXG4gIH0pO1xuXG4gIGlmIChyZWxlYXNlZCA9PT0gJ2R1cGxpY2F0ZS12ZXJzaW9uJykge1xuICAgIGVjaG8oJ+KaoO+4jyBWZXJzaW9uKHMpIGFscmVhZHkgcHVibGlzaGVkLiBTa2lwcGluZycpO1xuICB9XG59XG5cbi8qKlxuICogRGVwbG95IHRvIGEgY3VzdG9tIE5leHVzIHNlcnZlclxuICovXG5hc3luYyBmdW5jdGlvbiBkZXBsb3lDdXN0b21OZXh1cyhtYXZlbjogTWF2ZW4sIG9wdGlvbnM6IEN1c3RvbU5leHVzUHVibGlzaE9wdGlvbnMpIHtcbiAgZWNobyhg8J+TpiBQdWJsaXNoaW5nIHRvICR7b3B0aW9ucy5zZXJ2ZXJJZH1gKTtcbiAgYXdhaXQgbWF2ZW4ud3JpdGVTZXR0aW5nc0ZpbGUob3B0aW9ucy5zZXJ2ZXJJZCwgZmFsc2UpO1xuXG4gIGZvciAoY29uc3QgcG9tIG9mIG9wdGlvbnMucG9tcykge1xuICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IG1hdmVuLmV4ZWMoJ2RlcGxveTpkZXBsb3ktZmlsZScsIHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgdXJsOiBvcHRpb25zLnJlcG9zaXRvcnlVcmwsXG4gICAgICAgIHJlcG9zaXRvcnlJZDogb3B0aW9ucy5zZXJ2ZXJJZCxcbiAgICAgICAgcG9tRmlsZTogcG9tLFxuICAgICAgICAuLi5qYXJzRnJvbVBvbShwb20pLFxuICAgICAgfSxcbiAgICAgIG5vdGhyb3c6IHRydWUsXG4gICAgfSk7XG5cbiAgICBpZiAoZGVwbG95T3V0cHV0Py5leGl0Q29kZSAmJiBkZXBsb3lPdXRwdXQuZXhpdENvZGUgPiAwKSB7XG4gICAgICBpZiAoZGVwbG95T3V0cHV0LnN0ZG91dC5pbmNsdWRlcygnNDA5IENvbmZsaWN0JykpIHtcbiAgICAgICAgZWNobygn4pqg77iPIEFydGlmYWN0IGFscmVhZHkgcHVibGlzaGVkLiBTa2lwcGluZycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFNpbXBsZUVycm9yKCdSZWxlYXNlIGZhaWxlZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG50eXBlIERlcGxveVN0YWdlZFJlcG9SZXN1bHQgPVxuICB8IHsgdHlwZTogJ3N1Y2Nlc3MnOyByZXBvc2l0b3J5SWQ6IHN0cmluZzsgc2VydmVySWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnYWxyZWFkeS1wdWJsaXNoZWQnIH1cbiAgfCB7IHR5cGU6ICdkcnktcnVuJyB9O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgc3RhZ2luZyByZXBvc2l0b3J5LiBUaGlzIGlzIHRoZSBzYW1lIGJldHdlZW4gdGhlIGxlZ2FjeSBhbmQgY29tcGF0IGVuZHBvaW50cy5cbiAqXG4gKiBgcmVwdWJsaXNoV2lsbDQwMGA6IGluIHRoZSBjb21wYXRpYmlsaXR5IGVuZHBvaW50LCBzdGFnaW5nIGEgdmVyc2lvbiB0aGF0IGhhcyBhbHJlYWR5XG4gKiBiZWVuIHB1Ymxpc2hlZCB3aWxsIGxlYWQgdG8gYSBgNDAwIEJhZCBSZXF1ZXN0YCwgd2l0aCBubyBmdXJ0aGVyIGluZm8uIFdlIG5lZWRlZCB0byBoYXZlXG4gKiBydW4gdGhlIE1hdmVuIGNvbW1hbmQgd2l0aCBgLS1kZWJ1Z2AgbG9nZ2luZyB0byBzZWUgdGhlIGFjdHVhbCBlcnJvciBtZXNzYWdlIGluIHRoZSBvdXRwdXQuXG4gKlxuICogSW4gdGhlIGxlZ2FjeSBlbmRwb2ludCwgc3RhZ2luZyB0YWtlcyBtdWx0aXBsZSBtaW51dGVzLCBhbmQgTWF2ZW4gd2lsbCBwb2xsXG4gKiBldmVyeSAzcyBhbmQgcHJpbnQgdGhlIG91dHB1dC4gV2UgdGhlcmVmb3JlIGRvbid0IHVzZSB2ZXJib3NlIG1vZGUgdG8gYXZvaWRcbiAqIHN0ZG91dCBzcGFtLiBJbiB0aGUgbGVnYWN5IGVuZHBvaW50LCBkdXBsaWNhdGUgdmVyc2lvbiBwdWJsaXNoaW5nIGdldHNcbiAqIHJlcG9ydGVkIGR1cmluZyB0aGUgJ3JlbGVhc2UnIHN0ZXAgYW55d2F5LCBub3QgZHVyaW5nIHN0YWdpbmcuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlcGxveVN0YWdlZFJlcG9zaXRvcnkobWF2ZW46IE1hdmVuLCBvcHRpb25zOiBPbWl0PExlZ2FjeU9zc3JoUHVibGlzaE9wdGlvbnMgfCBDb21wYXRPc3NyaFB1Ymxpc2hPcHRpb25zLCAnZW5kcG9pbnQnPiAmIHsgZW5kcG9pbnQ6IHN0cmluZzsgcmVwdWJsaXNoV2lsbDQwMDogYm9vbGVhbiB9KTogUHJvbWlzZTxEZXBsb3lTdGFnZWRSZXBvUmVzdWx0PiB7XG4gIGNvbnN0IHNlcnZlcklkID0gJ29zc3JoJztcblxuICBhd2FpdCBtYXZlbi53cml0ZVNldHRpbmdzRmlsZShzZXJ2ZXJJZCwgdHJ1ZSk7XG5cbiAgLy8gRmlyc3QgLS0gc2lnbiBhcnRpZmFjdHNcbiAgY29uc3Qgc2lnbmVkRGlyID0gcGF0aC5qb2luKG1hdmVuLndvcmtEaXIsICdzaWduZWQnKTtcbiAgYXdhaXQgZnMubWtkaXIoc2lnbmVkRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBhd2FpdCBzaWduSmFycyhtYXZlbiwgb3B0aW9ucy5wb21zLCBzaWduZWREaXIsIHNlcnZlcklkLCBvcHRpb25zLnByaXZhdGVLZXkpO1xuXG4gIGVjaG8oJ35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4nKTtcbiAgZWNobygnIERlcGxveWluZyBhbmQgY2xvc2luZyByZXBvc2l0b3J5Li4uJyk7XG4gIGVjaG8oJ35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4nKTtcblxuICBjb25zdCBuZXh1c01hdmVuU3RhZ2luZyA9ICdvcmcuc29uYXR5cGUucGx1Z2luczpuZXh1cy1zdGFnaW5nLW1hdmVuLXBsdWdpbjoxLjcuMCc7XG4gIGNvbnN0IHN0YWdlT3V0cHV0ID0gYXdhaXQgbWF2ZW4uZXhlYyhgJHtuZXh1c01hdmVuU3RhZ2luZ306ZGVwbG95LXN0YWdlZC1yZXBvc2l0b3J5YCwge1xuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIHJlcG9zaXRvcnlEaXJlY3Rvcnk6IHNpZ25lZERpcixcbiAgICAgIG5leHVzVXJsOiBvcHRpb25zLmVuZHBvaW50LFxuICAgICAgc2VydmVySWQsXG4gICAgICBzdGFnaW5nUHJvZ3Jlc3NUaW1lb3V0TWludXRlczogJzMwJyxcbiAgICAgIHN0YWdpbmdQcm9maWxlSWQ6IG9wdGlvbnMuc3RhZ2luZ1Byb2ZpbGVJZCxcbiAgICB9LFxuICAgIG5vdGhyb3c6IHRydWUsXG4gICAgdmVyYm9zZTogb3B0aW9ucy5yZXB1Ymxpc2hXaWxsNDAwLFxuICB9KTtcbiAgLy8gRklYTUU6IE5ldyBzdGFnaW5nIEFQSSB0aHJvd3MgYW4gZXJyb3IgaGVyZSBvbiBkdXBsaWNhdGUgdmVyc2lvbnNcbiAgaWYgKHN0YWdlT3V0cHV0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlY2hvKCfwn4+c77iPIFN0b3BwZWQgaGVyZSBiZWNhdXNlIG9mIGRyeS1ydW4nKTtcbiAgICByZXR1cm4geyB0eXBlOiAnZHJ5LXJ1bicgfTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnJlcHVibGlzaFdpbGw0MDAgJiYgc3RhZ2VPdXRwdXQudGV4dCgpLm1hdGNoKC9Db21wb25lbnQgd2l0aCBwYWNrYWdlIHVybC4qYWxyZWFkeSBleGlzdHMvKSkge1xuICAgIC8vIFdlJ3ZlIHNlZW4gdGhpcyBmYWlsIHdpdGggdGhlIGFib3ZlIGVycm9yIG1lc3NhZ2Ugb24gdGhlIE9TU1JIIGNvbXBhdGliaWxpdHkgQVBJIHdoZW4gdHJ5aW5nIHRvIHJlcHVibGlzaFxuICAgIC8vIGFuIGFscmVhZHktcHVibGlzaGVkIHZlcnNpb24uXG4gICAgLy9cbiAgICAvLyBUaGlzIGlzIHBvdGVudGlhbGx5IGEgcHJvYmxlbSBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmVyc2lvbnMgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkgYXQgb25jZSwgYmVjYXVzZSBub3RoaW5nXG4gICAgLy8gd2lsbCBiZSBwdWJsaXNoZWQgaWYgdGhlcmUncyBvbmUgcGFja2FnZSBpbiB0aGVyZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gcHVibGlzaGVkIHByZXZpb3VzbHkuIEJ1dCBjJ2VzdCBsYSB2aWUuXG4gICAgZWNobygn4pqg77iPIFZlcnNpb24ocykgYWxyZWFkeSBwdWJsaXNoZWQuIFNraXBwaW5nJyk7XG4gICAgcmV0dXJuIHsgdHlwZTogJ2FscmVhZHktcHVibGlzaGVkJyB9O1xuICB9IGVsc2UgaWYgKHN0YWdlT3V0cHV0LmV4aXRDb2RlICYmIHN0YWdlT3V0cHV0LmV4aXRDb2RlID4gMCkge1xuICAgIHRocm93IHN0YWdlT3V0cHV0O1xuICB9XG5cbiAgLy8gR3JlcCB0aGUgcmVwb3NpdG9yeSBJRCBvdXQgb2YgdGhlIHByaW50ZWQgb3V0cHV0XG4gIC8vIFtJTkZPXSAgKiBDbG9zaW5nIHN0YWdpbmcgcmVwb3NpdG9yeSB3aXRoIElEIFwiWFhYWFhYWFhYWFwiLlxuICBjb25zdCBtID0gc3RhZ2VPdXRwdXQuc3Rkb3V0Lm1hdGNoKC9DbG9zaW5nIHN0YWdpbmcgcmVwb3NpdG9yeSB3aXRoIElEIFwiKFteXCJdKylcIi8pO1xuICBpZiAoIW0pIHtcbiAgICB0aHJvdyBuZXcgU2ltcGxlRXJyb3IoJ1VuYWJsZSB0byBleHRyYWN0IHJlcG9zaXRvcnkgSUQgZnJvbSBkZXBsb3ktc3RhZ2VkLXJlcG9zaXRvcnkgb3V0cHV0LiBUaGlzIG1lYW5zIGl0IGZhaWxlZCB0byBjbG9zZSBvciB0aGVyZSB3YXMgYW4gdW5leHBlY3RlZCBwcm9ibGVtLiBBdCBhbnkgcmF0ZSwgd2UgY2FuXFwndCByZWxlYXNlIGl0LiBTb3JyeS4nKTtcbiAgfVxuICBjb25zdCByZXBvc2l0b3J5SWQgPSBtWzFdO1xuXG4gIHJldHVybiB7IHR5cGU6ICdzdWNjZXNzJywgcmVwb3NpdG9yeUlkLCBzZXJ2ZXJJZCB9O1xufVxuXG4vKipcbiAqIFNlbmQgYSBjdXN0b20gXCJyZWxlYXNlXCIgY29tbWFuZCB0byB0aGUgbmV3IFNvbmF0eXBlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGVuZHBvaW50XG4gKlxuICogV2hlbiB1c2luZyB0aGUgYG5leHVzLXN0YWdpbmctbWF2ZW4tcGx1Z2luYCdzIGByZWxlYXNlYCBvciBgcmMtcmVsZWFzZWAgY29tbWFuZHMsIHdlIGdldCB0aGUgZm9sbG93aW5nXG4gKiBlcnJvcjpcbiAqXG4gKiBTZW5kaW5nOlxuICpcbiAqIGBgYFxuICogPHN0YWdpbmdBY3Rpb25SZXF1ZXN0PjxkYXRhPjxzdGFnZWRSZXBvc2l0b3J5SWRzIGNsYXNzPVwiamF2YS51dGlsLkFycmF5cyRBcnJheUxpc3RcIj48YSBjbGFzcz1cInN0cmluZy1hcnJheVwiPjxzdHJpbmc+aW8uZ2l0aHViLnJpeDBycnItLTYzZWRiY2JlLWYwNTgtNDRlYi04NWY0LWZkOWRjZTFhZWY0MDwvc3RyaW5nPjwvYT48L3N0YWdlZFJlcG9zaXRvcnlJZHM+PGRlc2NyaXB0aW9uPnVua25vd248L2Rlc2NyaXB0aW9uPjxhdXRvRHJvcEFmdGVyUmVsZWFzZT50cnVlPC9hdXRvRHJvcEFmdGVyUmVsZWFzZT48L2RhdGE+PC9zdGFnaW5nQWN0aW9uUmVxdWVzdD5cbiAqIGBgYFxuICpcbiAqIEVycm9yOlxuICpcbiAqIGBgYFxuICogRmFpbGVkIHRvIHByb2Nlc3MgcmVxdWVzdDogR290IHVuZXhwZWN0ZWQgWE1MIGVsZW1lbnQgd2hlbiByZWFkaW5nIHN0YWdlZFJlcG9zaXRvcnlJZHM6IEdvdCB1bmV4cGVjdGVkIGVsZW1lbnQgU3RhcnRFbGVtZW50KGEsIHtcIlwiOiBcIlwiLCBcInhtbFwiOiBcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiLCBcInhtbG5zXCI6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy9cIn0sIFtjbGFzcyAtPiBzdHJpbmctYXJyYXldKSwgZXhwZWN0ZWQgb25lIG9mOiBzdHJpbmdcbiAqIGBgYFxuICpcbiAqIERvaW5nIGEgbWFudWFsIHNsaWdodGx5IG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGFib3ZlIHJlcXVlc3Qgc3VjY2VlZHMsIHNvIHdlJ2xsIGp1c3QgcHJvY2VlZCB3aXRoIGRvaW5nXG4gKiB0aGF0LlxuICpcbiAqIFRoZSBlbmRwb2ludCBhbHNvIHN1cHBvcnRzIEpTT04sIHdoaWNoIHdlIHByZWZlciBvdmVyIFhNTC5cbiAqXG4gKiBUaGlzIGVuZHBvaW50IHdpbGwgbmV2ZXIgcmV0dXJuIGFuIGVycm9yLCBldmVuIGlmIHRoZSBwdWJsaXNoIGRpZG4ndCBoYXBwZW4gYmVjYXVzZVxuICogb2YgZHVwbGljYXRlIHZlcnNpb24gcHVibGlzaGluZyAobm90IGZvciB0aGUgbGVnYWN5LCBub3IgZm9yIHRoZSBjb21wYXRpYmlsaXR5IGVuZHBvaW50KS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vY2VudHJhbC5zb25hdHlwZS5vcmcvcHVibGlzaC9wdWJsaXNoLXBvcnRhbC1vc3NyaC1zdGFnaW5nLWFwaS9cbiAqIEBzZWUgaHR0cHM6Ly9zdXBwb3J0LnNvbmF0eXBlLmNvbS9oYy9lbi11cy9hcnRpY2xlcy8yMTM0NjU0NDgtQXV0b21hdGljYWxseS1kcm9wcGluZy1vbGQtc3RhZ2luZy1yZXBvc2l0b3JpZXNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVsZWFzZVJlcG8ob3B0aW9uczogeyBzZXJ2ZXJVcmw6IHN0cmluZzsgdXNlcm5hbWU6IHN0cmluZzsgcGFzc3dvcmQ6IHN0cmluZzsgcmVwb3NpdG9yeUlkOiBzdHJpbmc7IGRlc2NyaXB0aW9uPzogc3RyaW5nIH0pOiBQcm9taXNlPCdvaycgfCAnZHVwbGljYXRlLXZlcnNpb24nPiB7XG4gIGVjaG8oYPCfmoAgUmVsZWFzaW5nIHJlcG9zaXRvcnkgJHtvcHRpb25zLnJlcG9zaXRvcnlJZH0gYXQgJHtvcHRpb25zLnNlcnZlclVybH1gKTtcbiAgY29uc3QgdXJsID0gbmV3IFVSTCgnc2VydmljZS9sb2NhbC9zdGFnaW5nL2J1bGsvcHJvbW90ZScsIG9wdGlvbnMuc2VydmVyVXJsKTtcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgc3RhZ2VkUmVwb3NpdG9yeUlkczogW29wdGlvbnMucmVwb3NpdG9yeUlkXSxcbiAgICAgICAgZGVzY3JpcHRpb246IG9wdGlvbnMuZGVzY3JpcHRpb24gPz8gJ0RlcGxveW1lbnQnLFxuICAgICAgICBhdXRvRHJvcEFmdGVyUmVsZWFzZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgaGVhZGVyczoge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke2J0b2EoYCR7b3B0aW9ucy51c2VybmFtZX06JHtvcHRpb25zLnBhc3N3b3JkfWApfWAsXG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgYm9keSA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcblxuICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgKGR1ZSB0byBzb21lIHJlcGxpY2F0aW9uIGxhdGVuY3k/KSB0aGUgaW5pdGlhbCBcInN0YWdlXCIgc3VjY2VlZHMsXG4gIC8vIGJ1dCB0aGUgXCJyZWxlYXNlXCIgZmFpbHMsIGlmIHdlIHRyeSB0byBwdWJsaXNoIGFuIGFscmVhZHktcHVibGlzaGVkIHZlcnNpb24gYWdhaW4uXG4gIC8vXG4gIC8vIFVuZm9ydHVuYXRlbHkgdGhlcmUgaXMgbm8gZ3JlYXQgZXJyb3IgY29kZSB0byBkZXRlY3QgdGhpcyByaWdodCBub3csIGJ1dCBJJ3ZlIG9ic2VydmVkXG4gIC8vIHRoaXMgZXJyb3Igd2hlbiBpdCBoYXBwZW5lZC5cbiAgLy8gSSBoYXZlIGEgc3VwcG9ydCByZXF1ZXN0IG91dCB0byBTb25hdHlwZSBmb3IgdGhpcywgd2UnbGwgc2VlIGlmIHRoaXMgY2hhbmdlcyBvdmVyIHRpbWUuXG4gIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMCAmJiBib2R5ID09PSAnRmFpbGVkIHRvIHByb2Nlc3MgcmVxdWVzdDogc2VydmljZSBlcnJvcicpIHtcbiAgICByZXR1cm4gJ2R1cGxpY2F0ZS12ZXJzaW9uJztcbiAgfVxuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH06ICR7Ym9keX1gKTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKGJvZHkpO1xuXG4gIHJldHVybiAnb2snO1xufVxuXG4vKipcbiAqIFNpZ24gYW5kIHN0YWdlIG91ciBhcnRpZmFjdHMgaW50byBhIGxvY2FsIGRpcmVjdG9yeVxuICovXG5hc3luYyBmdW5jdGlvbiBzaWduSmFycyhtYXZlbjogTWF2ZW4sIHBvbXM6IHN0cmluZ1tdLCB0YXJnZXREaXI6IHN0cmluZywgc2VydmVySWQ6IHN0cmluZywga2V5OiBQcml2YXRlS2V5KSB7XG4gIGF3YWl0IHVzaW5nIGdwZyA9IGF3YWl0IGltcG9ydEdwZ0tleShrZXkpO1xuXG4gIC8vIG9uIGEgbWFjLCAtLXBpbmVudHJ5LW1vZGUgdG8gXCJsb29wYmFja1wiIGFyZSByZXF1aXJlZCBhbmQgSSBjb3VsZG4ndCBmaW5kIGFcbiAgLy8gd2F5IHRvIGRvIHNvIHZpYSAtRGdwZy5ncGdBcmd1bWVudHMgb3IgdGhlIHNldHRpbmdzIGZpbGUsIHNvIGhlcmUgd2UgYXJlLlxuICBsZXQgZ3BnQmluID0gJ2dwZyc7XG4gIGlmIChvcy5wbGF0Zm9ybSgpID09PSAnZGFyd2luJykge1xuICAgIGdwZ0JpbiA9IHBhdGguam9pbihtYXZlbi53b3JrRGlyLCAncHVibGliLWdwZy5zaCcpO1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShncGdCaW4sIFtcbiAgICAgICcjIS9iaW4vYmFzaCcsXG4gICAgICAnZXhlYyBncGcgLS1waW5lbnRyeS1tb2RlIGxvb3BiYWNrIFwiXFwkQFwiJyxcbiAgICBdLmpvaW4oJ1xcbicpLCAndXRmLTgnKTtcbiAgICBhd2FpdCAkYGNobW9kICt4ICR7Z3BnQmlufWA7XG4gIH1cblxuICBmb3IgKGNvbnN0IHBvbSBvZiBwb21zKSB7XG4gICAgYXdhaXQgbWF2ZW4uZXhlYygnZ3BnOnNpZ24tYW5kLWRlcGxveS1maWxlJywge1xuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAndXJsJzogYGZpbGU6Ly8ke3RhcmdldERpcn1gLFxuICAgICAgICAncmVwb3NpdG9yeUlkJzogc2VydmVySWQsIC8vIE1vc3QgbGlrZWx5IG5vdCBuZWNlc3NhcnlcbiAgICAgICAgJ2dwZy5ob21lZGlyJzogZ3BnLmhvbWUsXG4gICAgICAgICdncGcua2V5bmFtZSc6IGdwZy5rZXlJZCxcbiAgICAgICAgJ2dwZy5leGVjdXRhYmxlJzogZ3BnQmluLFxuICAgICAgICAncG9tRmlsZSc6IHBvbSxcbiAgICAgICAgLi4uamFyc0Zyb21Qb20ocG9tKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBCYXNlZCBvbiB0aGUgcGF0aCBvZiBhIC5wb20gZmlsZSwgcmV0dXJuIHRoZSBwYXRocyBvZiB0aGUgY29ycmVzcG9uZGluZyBqYXJzXG4gKi9cbmZ1bmN0aW9uIGphcnNGcm9tUG9tKHBvbTogc3RyaW5nKSB7XG4gIHJldHVybiB7XG4gICAgZmlsZTogcG9tLnJlcGxhY2UoL1xcLnBvbSQvLCAnLmphcicpLFxuICAgIHNvdXJjZXM6IHBvbS5yZXBsYWNlKC9cXC5wb20kLywgJy1zb3VyY2VzLmphcicpLFxuICAgIGphdmFkb2M6IHBvbS5yZXBsYWNlKC9cXC5wb20kLywgJy1qYXZhZG9jLmphcicpLFxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5kIGltcG9ydCB0aGUgR1BHIGtleSBtYXRlcmlhbCBpbnRvIGEgbmV3IGtleWNoYWluIHRoZXJlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEdwZ0tleShrZXk6IFByaXZhdGVLZXkpIHtcbiAgLy8gR251UEcgd2lsbCBvY2Nhc2lvbmFsbHkgYmFpbCBvdXQgd2l0aCBcImdwZzogPHdoYXRldmVyPiBmYWlsZWQ6IEluYXBwcm9wcmlhdGUgaW9jdGwgZm9yIGRldmljZVwiLCB0aGUgZm9sbG93aW5nIGF0dGVtcHRzIHRvIGZpeFxuICBjb25zdCBncGdIb21lID0gYXV0b0NsZWFuRGlyKCk7XG4gIHRyeSB7XG4gICAgLy8gSW4gQ0kgZW52aXJvbm1lbnRzIHRoZXJlIHdpbGwgYmUgbm8gdHR5LCBhbmQgd2UgZG9uJ3Qgd2FudCB0aGlzIHRvIHN0b3AgdGhlIHNjcmlwdC5cbiAgICAvLyBUaGUgdmFyaWFibGUgd2lsbCBiZSBwb3B1bGF0ZWQgd2l0aCBhIG5vbnNlbnNpY2FsIHN0cmluZyAoXCJub3QgYSB0dHlcIikgYnV0IHRoYXQgZG9lc24ndCBzZWVtIHRvIG1hdHRlci5cbiAgICBjb25zdCB0dHkgPSAoYXdhaXQgJCh7IHN0ZGlvOiBbJ2luaGVyaXQnLCAncGlwZScsICdwaXBlJ10sIG5vdGhyb3c6IHRydWUgfSlgdHR5YCkuc3Rkb3V0O1xuXG4gICAgbGV0IHByaXZhdGVLZXlGaWxlO1xuICAgIGNvbnN0IHR5cGUgPSBrZXkudHlwZTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2ZpbGUnOlxuICAgICAgICBwcml2YXRlS2V5RmlsZSA9IGtleS5maWxlTmFtZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtYXRlcmlhbCc6XG4gICAgICAgIHByaXZhdGVLZXlGaWxlID0gcGF0aC5qb2luKGdwZ0hvbWUuZGlyLCAncHJpdmF0ZS5wZW0nKTtcbiAgICAgICAgYXdhaXQgJGBlY2hvIC1lICR7a2V5LmtleU1hdGVyaWFsfSA+ICR7cHJpdmF0ZUtleUZpbGV9YDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnROZXZlcih0eXBlKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnYgPSB7XG4gICAgICBHTlVQR0hPTUU6IGdwZ0hvbWUuZGlyLFxuICAgICAgR1BHX1RUWTogdHR5LFxuICAgIH07XG5cbiAgICBjb25zdCAkJCA9ICQoeyBlbnY6IHsgLi4ucHJvY2Vzcy5lbnYsIC4uLmVudiB9IH0pO1xuXG4gICAgYXdhaXQgJCRgZ3BnIC0tYWxsb3ctc2VjcmV0LWtleS1pbXBvcnQgLS1iYXRjaCAtLXllcyAtLW5vLXR0eSAtLWltcG9ydCAke3ByaXZhdGVLZXlGaWxlfWA7XG4gICAgY29uc3QgZ3BnS2V5SWQgPSAoYXdhaXQgJCRgZ3BnIC0tbGlzdC1rZXlzIC0td2l0aC1jb2xvbnMgfCBncmVwIHB1YiB8IGN1dCAtZDogLWY1YCkuc3Rkb3V0LnRyaW0oKTtcblxuICAgIGVjaG8oYGdwZ19rZXlfaWQ9JHtncGdLZXlJZH1gKTtcblxuICAgIHJldHVybiB7XG4gICAgICBrZXlJZDogZ3BnS2V5SWQsXG4gICAgICBlbnYsXG4gICAgICBob21lOiBncGdIb21lLmRpcixcbiAgICAgIFtTeW1ib2wuYXN5bmNEaXNwb3NlXTogYXN5bmMgKCkgPT4gZ3BnSG9tZVtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpLFxuICAgIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBhd2FpdCBncGdIb21lW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuXG5jbGFzcyBNYXZlbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2V0dGluZ3NGaWxlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHdvcmtEaXI6IHN0cmluZywgcHJpdmF0ZSByZWFkb25seSB2ZXJib3NlOiBib29sZWFuLCBwdWJsaWMgcmVhZG9ubHkgZHJ5UnVuOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXR0aW5nc0ZpbGUgPSBwYXRoLmpvaW4od29ya0RpciwgJ212bi1zZXR0aW5ncy54bWwnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBzZXR0aW5ncy54bWwgZmlsZSB3aXRoIHRoZSB1c2VyK3Bhc3N3b3JkIGZvciBtYXZlblxuICAgKi9cbiAgcHVibGljIGFzeW5jIHdyaXRlU2V0dGluZ3NGaWxlKHNlcnZlcklkOiBzdHJpbmcsIHNpZ25lZEFydGlmYWN0czogYm9vbGVhbikge1xuICAgIGNvbnN0IGxpbmVzID0gW107XG5cbiAgICBsaW5lcy5wdXNoKFxuICAgICAgJzw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCIgPz4nLFxuICAgICAgJzxzZXR0aW5ncyB4bWxucz1cImh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1NFVFRJTkdTLzEuMC4wXCInLFxuICAgICAgJyAgICAgICAgeG1sbnM6eHNpPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2VcIicsXG4gICAgICAnICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249XCJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9TRVRUSU5HUy8xLjAuMCcsXG4gICAgICAnICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9zZXR0aW5ncy0xLjAuMC54c2RcIj4nLFxuICAgICAgJyAgPHNlcnZlcnM+JyxcbiAgICAgICcgICAgPHNlcnZlcj4nLFxuICAgICAgYCAgICAgIDxpZD4ke3NlcnZlcklkfTwvaWQ+YCxcbiAgICAgIC8vIE1hdmVuIHdpbGwgcmVhZCB0aGVzZSwgc3Vycm91bmRpbmcgY29kZSBoYXMgYWxyZWFkeSBtYWRlIHN1cmUgdGhleSBhcmUgc2V0XG4gICAgICAnICAgICAgPHVzZXJuYW1lPiR7ZW52Lk1BVkVOX1VTRVJOQU1FfTwvdXNlcm5hbWU+JyxcbiAgICAgICcgICAgICA8cGFzc3dvcmQ+JHtlbnYuTUFWRU5fUEFTU1dPUkR9PC9wYXNzd29yZD4nLFxuICAgICAgJyAgICA8L3NlcnZlcj4nLFxuICAgICk7XG5cbiAgICBpZiAoc2lnbmVkQXJ0aWZhY3RzKSB7XG4gICAgICBsaW5lcy5wdXNoKFxuICAgICAgICAnICAgIDxzZXJ2ZXI+JyxcbiAgICAgICAgJyAgICAgIDxpZD5ncGcucGFzc3BocmFzZTwvaWQ+JyxcbiAgICAgICAgLy8gTWF2ZW4gd2lsbCByZWFkIHRoZXNlLCBzdXJyb3VuZGluZyBjb2RlIGhhcyBhbHJlYWR5IG1hZGUgc3VyZSB0aGV5IGFyZSBzZXRcbiAgICAgICAgJyAgICAgIDxwYXNzcGhyYXNlPiR7ZW52Lk1BVkVOX0dQR19QUklWQVRFX0tFWV9QQVNTUEhSQVNFfTwvcGFzc3BocmFzZT4nLFxuICAgICAgICAnICAgIDwvc2VydmVyPicsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxpbmVzLnB1c2goXG4gICAgICAnICA8L3NlcnZlcnM+JyxcbiAgICAgICc8L3NldHRpbmdzPicsXG4gICAgKTtcblxuICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0aGlzLnNldHRpbmdzRmlsZSwgbGluZXMuam9pbignXFxuJyksICd1dGYtOCcpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGV4ZWMobW9qbzogc3RyaW5nLCBvcHRpb25zOiBNYXZlbkV4ZWNPcHRpb25zKTogUHJvbWlzZTxQcm9jZXNzT3V0cHV0IHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgIGAtLXNldHRpbmdzPSR7dGhpcy5zZXR0aW5nc0ZpbGV9YCxcbiAgICAgIC4uLihvcHRpb25zLnZlcmJvc2UgPz8gdGhpcy52ZXJib3NlID8gWyctWCddIDogW10pLFxuICAgICAgbW9qbyxcbiAgICAgIC4uLk9iamVjdC5lbnRyaWVzKG9wdGlvbnMucHJvcGVydGllcykubWFwKChbaywgdl0pID0+IGAtRCR7a309JHt2fWApLFxuICAgIF07XG5cbiAgICBpZiAodGhpcy5kcnlSdW4pIHtcbiAgICAgIGVjaG8oYFtEUlktUlVOXSBtdm4gJHthcmdzLm1hcChxdW90ZSkuam9pbignICcpfWApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZW52ID0ge1xuICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICBKREtfSkFWQV9PUFRJT05TOiBbXG4gICAgICAgIC8vIElmIHdlIGRvbid0IGFkZCB0aGlzLCB3ZSdsbCBnZXQgYW4gZXJyb3IgbGlrZSB0aGUgZm9sbG93aW5nIGR1cmluZyB0aGUgbmV4dXMtc3RhZ2luZy1tYXZlbi1wbHVnaW46cmMtcmVsZWFzZSBtb2pvLlxuICAgICAgICAvLyBEb24ndCBrbm93IHdoZXJlIHRoaXMgaXMgY29taW5nIGZyb20gYWxsIG9mIGEgc3VkZGVuLlxuICAgICAgICAvL1xuICAgICAgICAvLyBbRVJST1JdIG1lc3NhZ2UgICAgICAgICAgICAgOiBObyBjb252ZXJ0ZXIgYXZhaWxhYmxlXG4gICAgICAgIC8vIFtFUlJPUl0gdHlwZSAgICAgICAgICAgICAgICA6IGphdmEudXRpbC5BcnJheXMkQXJyYXlMaXN0XG4gICAgICAgIC8vIFtFUlJPUl0gY29udmVydGVyICAgICAgICAgICA6IGNvbS50aG91Z2h0d29ya3MueHN0cmVhbS5jb252ZXJ0ZXJzLnJlZmxlY3Rpb24uUmVmbGVjdGlvbkNvbnZlcnRlclxuICAgICAgICAvLyBbRVJST1JdIG1lc3NhZ2VbMV0gICAgICAgICAgOiBVbmFibGUgdG8gbWFrZSBmaWVsZCBwcm90ZWN0ZWQgdHJhbnNpZW50IGludCBqYXZhLnV0aWwuQWJzdHJhY3RMaXN0Lm1vZENvdW50IGFjY2Vzc2libGU6IG1vZHVsZSBqYXZhLmJhc2UgZG9lcyBub3QgXCJvcGVucyBqYXZhLnV0aWxcIiB0byB1bm5hbWVkIG1vZHVsZSBAN2M4ZDUzMTJcbiAgICAgICAgJy0tYWRkLW9wZW5zPWphdmEuYmFzZS9qYXZhLnV0aWw9QUxMLVVOTkFNRUQnLFxuICAgICAgICAnLS1hZGQtb3BlbnM9amF2YS5iYXNlL2phdmEubGFuZz1BTEwtVU5OQU1FRCcsXG4gICAgICAgICctLWFkZC1vcGVucz1qYXZhLmJhc2UvamF2YS5sYW5nLmludm9rZT1BTEwtVU5OQU1FRCcsXG4gICAgICBdLmpvaW4oJyAnKSxcbiAgICB9O1xuXG4gICAgcmV0dXJuICQoeyB2ZXJib3NlOiB0cnVlLCBub3Rocm93OiBvcHRpb25zLm5vdGhyb3csIGVudiB9KWBtdm4gJHthcmdzfWA7XG4gIH1cbn1cblxuaW50ZXJmYWNlIE1hdmVuRXhlY09wdGlvbnMge1xuICBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBub3Rocm93PzogYm9vbGVhbjtcbiAgdmVyYm9zZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBleHBlY3RlZCBlcnJvciB0aGF0IGRvZXNuJ3QgbmVlZCBhIHN0YWNrIHRyYWNlXG4gKi9cbmNsYXNzIFNpbXBsZUVycm9yIGV4dGVuZHMgRXJyb3IgeyB9XG5cbi8qKlxuICogUmVxdWlyZSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZVxuICovXG5mdW5jdGlvbiBlbnZWYXIobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmV0ID0gcHJvY2Vzcy5lbnZbbmFtZV07XG4gIGlmICghcmV0KSB7XG4gICAgdGhyb3cgbmV3IFNpbXBsZUVycm9yKGAke25hbWV9IGlzIHJlcXVpcmVkYCk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBBIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhhdCBjbGVhbnMgd2hlbiBpdCBnb2VzIG91dCBvZiBzY29wZVxuICpcbiAqIFVzZSB3aXRoIGB1c2luZ2AuIENvdWxkIGhhdmUgYmVlbiBhc3luYyBidXQgaXQncyBkZXBlbmRpbmdcbiAqIG9uIGFuIGFscmVhZHktc3luYyBBUEksIHNvIHdoeSBub3Qgc3luYz9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF1dG9DbGVhbkRpcigpIHtcbiAgY29uc3QgZGlyID0gdG1wZGlyKCk7XG4gIHJldHVybiB7XG4gICAgZGlyLFxuICAgIFtTeW1ib2wuYXN5bmNEaXNwb3NlXTogYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgZnMucm0oZGlyLCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0TmV2ZXIodmFsdWU6IG5ldmVyKSB7XG4gIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCB2YWx1ZTogJyArIHZhbHVlKTtcbn1cblxuLy8gQSAnengnIHByaW1lclxuLy9cbi8vIC0gQnkgZGVmYXVsdDogc3RkZXJyIGlzIHByaW50ZWQgdG8gdGhlIHRlcm1pbmFsIGlmIGl0IGlzIGNhcHR1cmVkLlxuLy8gLSB7IHZlcmJvc2U6IHRydWUgfTogcHJpbnQgdGhlIGNvbW1hbmQsIHN0ZG91dCBhbmQgc3RkZXJyIHRvIHRoZSB0ZXJtaW5hbFxuLy8gLSB7IHF1aWV0OiB0cnVlIH06IHByaW50IG5laXRoZXIgc3Rkb3V0IG5vciBzdGRlcnJcbi8vXG4vLyAudGV4dCgpOiByZXR1cm4gZXZlcnl0aGluZyB0aGF0J3MgY2FwdHVyZWQgKHN0ZGVyciBhbmQgc3Rkb3V0IHRvZ2V0aGVyIGlmIHN0ZGVyciBpcyBjYXB0dXJlZClcblxubWFpbigpLmNhdGNoKGUgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIFByb2Nlc3NPdXRwdXQpIHtcbiAgICBlY2hvKGDinYwgU3VicHJvY2VzcyBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJHtlLmV4aXRDb2RlfWApO1xuICB9IGVsc2UgaWYgKGUgaW5zdGFuY2VvZiBTaW1wbGVFcnJvcikge1xuICAgIGVjaG8oJ+KdjCcsIGUubWVzc2FnZSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5lcnJvcihlKTtcbiAgfVxuICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbn0pO1xuIl19
|
package/package.json
CHANGED