jsii-release 0.2.996 → 0.2.998

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.
@@ -530,6 +530,7 @@ class Maven {
530
530
  async exec(mojo, options) {
531
531
  const args = [
532
532
  `--settings=${this.settingsFile}`,
533
+ '--batch-mode',
533
534
  ...(options.verbose ?? this.verbose ? ['-X'] : []),
534
535
  mojo,
535
536
  ...Object.entries(options.properties).map(([k, v]) => `-D${k}=${v}`),
@@ -608,4 +609,4 @@ main().catch(e => {
608
609
  }
609
610
  process.exitCode = 1;
610
611
  });
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
612
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGliLW1hdmVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9wdWJsaWItbWF2ZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNm5CQSxvQ0FRQztBQXJvQkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFDSCwyQkFBb0M7QUFDcEMsMkJBQStFO0FBRS9FLE1BQU0sc0JBQXNCLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLE1BQU0sd0JBQXdCLEdBQUcsZUFBZSxDQUFDO0FBRWpELE1BQU0sMEJBQTBCLEdBQUcsdURBQXVELENBQUM7QUFFM0YsS0FBSyxVQUFVLElBQUk7SUFDakIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQztJQUV4QyxJQUFBLE9BQUUsRUFBQyxRQUFRLENBQUMsQ0FBQztJQUViLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSxTQUFJLEVBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sSUFBSSxXQUFXLENBQUMsaURBQWlELE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELElBQUEsU0FBSSxFQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUU1QixNQUFNLGFBQWEsR0FBeUI7UUFDMUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztRQUNsQyxRQUFRLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBQ2xDLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksS0FBSyxNQUFNO1FBQzNDLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsS0FBSyxNQUFNO1FBQzdDLElBQUk7S0FDTCxDQUFDO0lBRUYsSUFBSSxPQUE0QixDQUFDO0lBQ2pDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxJQUFJLHNCQUFzQixDQUFDO0lBRXZFLFFBQVEsUUFBUSxFQUFFLENBQUM7UUFDakIsS0FBSyxzQkFBc0I7WUFDekIsT0FBTyxHQUFHO2dCQUNSLElBQUksRUFBRSxjQUFjO2dCQUNwQixHQUFHLGFBQWE7Z0JBQ2hCLGdCQUFnQixFQUFFLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQztnQkFDcEQsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYztnQkFDcEMsVUFBVSxFQUFFLHNCQUFzQixFQUFFO2FBQ3JDLENBQUM7WUFDRixNQUFNO1FBQ1IsS0FBSyx3QkFBd0I7WUFDM0IsT0FBTyxHQUFHO2dCQUNSLElBQUksRUFBRSxjQUFjO2dCQUNwQixHQUFHLGFBQWE7Z0JBQ2hCLCtGQUErRjtnQkFDL0YsZ0JBQWdCLEVBQUUsUUFBUTtnQkFDMUIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYztnQkFDcEMsVUFBVSxFQUFFLHNCQUFzQixFQUFFO2FBQ3JDLENBQUM7WUFDRixNQUFNO1FBQ1I7WUFDRSx5RkFBeUY7WUFDekYsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztnQkFDaEYsTUFBTSxJQUFJLFdBQVcsQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO1lBQy9GLENBQUM7WUFFRCxPQUFPLEdBQUc7Z0JBQ1IsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLEdBQUcsYUFBYTtnQkFDaEIsUUFBUTtnQkFDUixhQUFhLEVBQUUsTUFBTSxDQUFDLHNCQUFzQixDQUFDO2FBQzlDLENBQUM7WUFDRixNQUFNO0lBQ1YsQ0FBQztJQUVELE1BQU0sWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTVCLElBQUEsU0FBSSxFQUFDLGdHQUFnRyxDQUFDLENBQUM7SUFDdkcsSUFBQSxTQUFJLEVBQUMsYUFBYSxDQUFDLENBQUM7QUFDdEIsQ0FBQztBQUVELFNBQVMsc0JBQXNCO0lBQzdCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQzNDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsa0NBQWtDLENBQUMsRUFBRSxDQUFDO0lBQ3BJLENBQUM7SUFDRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUN0QyxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLGtDQUFrQyxDQUFDLEVBQUUsQ0FBQztJQUN0SSxDQUFDO0lBQ0QsTUFBTSxJQUFJLFdBQVcsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUF5Q0Qsd0VBQXdFO0FBQ3hFLHdCQUF3QjtBQUN4QixFQUFFO0FBRUYsS0FBSyxVQUFVLFlBQVksQ0FBQyxPQUE0Qjs7O1FBQ3RELE1BQVksT0FBTyxrQ0FBRyxZQUFZLEVBQUUsT0FBQSxDQUFDO1FBQ3JDLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdEUsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUN2QixRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ1YsS0FBSyxjQUFjO2dCQUNqQixNQUFNLGlCQUFpQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDeEMsTUFBTTtZQUNSLEtBQUssY0FBYztnQkFDakIsTUFBTSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ3hDLE1BQU07WUFDUixLQUFLLGNBQWM7Z0JBQ2pCLE1BQU0saUJBQWlCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUN4QyxNQUFNO1lBQ1I7Z0JBQ0UsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25CLENBQUM7Ozs7Ozs7Ozs7O0NBQ0Y7QUFFRDs7R0FFRztBQUNILEtBQUssVUFBVSxpQkFBaUIsQ0FBQyxLQUFZLEVBQUUsT0FBa0M7SUFDL0UsSUFBQSxTQUFJLEVBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUN2QyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztJQUVuRCxNQUFNLE1BQU0sR0FBRyxNQUFNLHNCQUFzQixDQUFDLEtBQUssRUFBRTtRQUNqRCxHQUFHLE9BQU87UUFDVixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsSUFBSSxlQUFlO1FBQzdDLGdCQUFnQixFQUFFLEtBQUs7S0FDeEIsQ0FBQyxDQUFDO0lBRUgsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzlCLE9BQU87SUFDVCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O01BV0U7SUFFRixrREFBa0Q7SUFDbEQsTUFBTSxhQUFhLEdBQUcsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsMEJBQTBCLGFBQWEsRUFBRTtRQUNqRixVQUFVLEVBQUU7WUFDVixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsSUFBSSxlQUFlO1lBQzdDLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtZQUN6QixtQkFBbUIsRUFBRSxNQUFNLENBQUMsWUFBWTtTQUN6QztRQUNELE9BQU8sRUFBRSxJQUFJO0tBQ2QsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ25CLElBQUEsU0FBSSxFQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDNUMsT0FBTztJQUNULENBQUM7SUFFRCxJQUFJLGFBQWEsQ0FBQyxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDakMsK0VBQStFO1FBQy9FLDRFQUE0RTtRQUM1RSw2RUFBNkU7UUFDN0UsaURBQWlEO1FBRWpELE1BQU0seUJBQXlCLEdBQUcsYUFBYSxDQUFDLEtBQUssRUFBRTthQUNwRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7YUFDM0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUMvQixNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWQsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFDL0IsTUFBTSxJQUFJLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFFRCxJQUFBLFNBQUksRUFBQyx5Q0FBeUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxLQUFLLFVBQVUsaUJBQWlCLENBQUMsS0FBWSxFQUFFLE9BQWtDO0lBQy9FLElBQUEsU0FBSSxFQUFDLGtEQUFrRCxDQUFDLENBQUM7SUFFekQsTUFBTSxlQUFlLEdBQUcsaURBQWlELENBQUM7SUFDMUUsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSxlQUFlLENBQUM7SUFFckQsTUFBTSxNQUFNLEdBQUcsTUFBTSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUU7UUFDakQsR0FBRyxPQUFPO1FBQ1YsUUFBUTtRQUNSLGdCQUFnQixFQUFFLElBQUk7S0FDdkIsQ0FBQyxDQUFDO0lBRUgsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzlCLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxXQUFXLENBQUM7UUFDakMsU0FBUyxFQUFFLFFBQVE7UUFDbkIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1FBQzFCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtRQUMxQixZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7S0FDbEMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxRQUFRLEtBQUssbUJBQW1CLEVBQUUsQ0FBQztRQUNyQyxJQUFBLFNBQUksRUFBQywyQ0FBMkMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxLQUFLLFVBQVUsaUJBQWlCLENBQUMsS0FBWSxFQUFFLE9BQWtDO0lBQy9FLElBQUEsU0FBSSxFQUFDLG9CQUFvQixPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUM3QyxNQUFNLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRXZELEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9CLE1BQU0sWUFBWSxHQUFHLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUMxRCxVQUFVLEVBQUU7Z0JBQ1YsR0FBRyxFQUFFLE9BQU8sQ0FBQyxhQUFhO2dCQUMxQixZQUFZLEVBQUUsT0FBTyxDQUFDLFFBQVE7Z0JBQzlCLE9BQU8sRUFBRSxHQUFHO2dCQUNaLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQzthQUNwQjtZQUNELE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQyxDQUFDO1FBRUgsSUFBSSxZQUFZLEVBQUUsUUFBUSxJQUFJLFlBQVksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEQsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO2dCQUNqRCxJQUFBLFNBQUksRUFBQyx5Q0FBeUMsQ0FBQyxDQUFDO1lBQ2xELENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLElBQUksV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDMUMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQU9EOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsS0FBSyxVQUFVLHNCQUFzQixDQUFDLEtBQVksRUFBRSxPQUFrSTtJQUNwTCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFFekIsTUFBTSxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRTlDLDBCQUEwQjtJQUMxQixNQUFNLFNBQVMsR0FBRyxTQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckQsTUFBTSxhQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRS9DLE1BQU0sUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRTdFLElBQUEsU0FBSSxFQUFDLGdHQUFnRyxDQUFDLENBQUM7SUFDdkcsSUFBQSxTQUFJLEVBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUM3QyxJQUFBLFNBQUksRUFBQyxnR0FBZ0csQ0FBQyxDQUFDO0lBRXZHLE1BQU0saUJBQWlCLEdBQUcsdURBQXVELENBQUM7SUFDbEYsTUFBTSxXQUFXLEdBQUcsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsaUJBQWlCLDJCQUEyQixFQUFFO1FBQ3BGLFVBQVUsRUFBRTtZQUNWLG1CQUFtQixFQUFFLFNBQVM7WUFDOUIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1lBQzFCLFFBQVE7WUFDUiw2QkFBNkIsRUFBRSxJQUFJO1lBQ25DLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxnQkFBZ0I7U0FDM0M7UUFDRCxPQUFPLEVBQUUsSUFBSTtRQUNiLE9BQU8sRUFBRSxPQUFPLENBQUMsZ0JBQWdCO0tBQ2xDLENBQUMsQ0FBQztJQUNILG9FQUFvRTtJQUNwRSxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM5QixJQUFBLFNBQUksRUFBQyxxQ0FBcUMsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLGdCQUFnQixJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsNENBQTRDLENBQUMsRUFBRSxDQUFDO1FBQ3ZHLDRHQUE0RztRQUM1RyxnQ0FBZ0M7UUFDaEMsRUFBRTtRQUNGLGdIQUFnSDtRQUNoSCxrSEFBa0g7UUFDbEgsSUFBQSxTQUFJLEVBQUMsMkNBQTJDLENBQUMsQ0FBQztRQUNsRCxPQUFPLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLENBQUM7SUFDdkMsQ0FBQztTQUFNLElBQUksV0FBVyxDQUFDLFFBQVEsSUFBSSxXQUFXLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzVELE1BQU0sV0FBVyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxtREFBbUQ7SUFDbkQsNkRBQTZEO0lBQzdELE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7SUFDbkYsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1AsTUFBTSxJQUFJLFdBQVcsQ0FBQyxtTEFBbUwsQ0FBQyxDQUFDO0lBQzdNLENBQUM7SUFDRCxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFMUIsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxDQUFDO0FBQ3JELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUNILEtBQUssVUFBVSxXQUFXLENBQUMsT0FBOEc7SUFDdkksSUFBQSxTQUFJLEVBQUMsMkJBQTJCLE9BQU8sQ0FBQyxZQUFZLE9BQU8sT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDaEYsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsb0NBQW9DLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTdFLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsRUFBRTtRQUNoQyxNQUFNLEVBQUUsTUFBTTtRQUNkLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ25CLElBQUksRUFBRTtnQkFDSixtQkFBbUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7Z0JBQzNDLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLFlBQVk7Z0JBQ2hELG9CQUFvQixFQUFFLElBQUk7YUFDM0I7U0FDRixDQUFDO1FBQ0YsT0FBTyxFQUFFO1lBQ1AsY0FBYyxFQUFFLGtCQUFrQjtZQUNsQyxRQUFRLEVBQUUsa0JBQWtCO1lBQzVCLGVBQWUsRUFBRSxTQUFTLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUU7U0FDNUU7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUVuQyxzRkFBc0Y7SUFDdEYsb0ZBQW9GO0lBQ3BGLEVBQUU7SUFDRix5RkFBeUY7SUFDekYsK0JBQStCO0lBQy9CLDBGQUEwRjtJQUMxRixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksS0FBSywwQ0FBMEMsRUFBRSxDQUFDO1FBQ25GLE9BQU8sbUJBQW1CLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWxCLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOztHQUVHO0FBQ0gsS0FBSyxVQUFVLFFBQVEsQ0FBQyxLQUFZLEVBQUUsSUFBYyxFQUFFLFNBQWlCLEVBQUUsUUFBZ0IsRUFBRSxHQUFlOzs7UUFDeEcsTUFBWSxHQUFHLGtDQUFHLE1BQU0sWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFBLENBQUM7UUFFMUMsNkVBQTZFO1FBQzdFLDRFQUE0RTtRQUM1RSxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxPQUFFLENBQUMsUUFBUSxFQUFFLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDL0IsTUFBTSxHQUFHLFNBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQztZQUNuRCxNQUFNLGFBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO2dCQUN6QixhQUFhO2dCQUNiLHlDQUF5QzthQUMxQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN2QixNQUFNLElBQUEsTUFBQyxFQUFBLFlBQVksTUFBTSxFQUFFLENBQUM7UUFDOUIsQ0FBQztRQUVELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDdkIsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFO2dCQUMzQyxVQUFVLEVBQUU7b0JBQ1YsS0FBSyxFQUFFLFVBQVUsU0FBUyxFQUFFO29CQUM1QixjQUFjLEVBQUUsUUFBUSxFQUFFLDRCQUE0QjtvQkFDdEQsYUFBYSxFQUFFLEdBQUcsQ0FBQyxJQUFJO29CQUN2QixhQUFhLEVBQUUsR0FBRyxDQUFDLEtBQUs7b0JBQ3hCLGdCQUFnQixFQUFFLE1BQU07b0JBQ3hCLFNBQVMsRUFBRSxHQUFHO29CQUNkLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQztpQkFDcEI7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDOzs7Ozs7Ozs7OztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLFdBQVcsQ0FBQyxHQUFXO0lBQzlCLE9BQU87UUFDTCxJQUFJLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO1FBQ25DLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUM7UUFDOUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQztLQUMvQyxDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsS0FBSyxVQUFVLFlBQVksQ0FBQyxHQUFlO0lBQ3pDLGdJQUFnSTtJQUNoSSxNQUFNLE9BQU8sR0FBRyxZQUFZLEVBQUUsQ0FBQztJQUMvQixJQUFJLENBQUM7UUFDSCxzRkFBc0Y7UUFDdEYsMEdBQTBHO1FBQzFHLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxJQUFBLE1BQUMsRUFBQyxFQUFFLEtBQUssRUFBRSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUEsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBRXpGLElBQUksY0FBYyxDQUFDO1FBQ25CLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDdEIsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssTUFBTTtnQkFDVCxjQUFjLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQztnQkFDOUIsTUFBTTtZQUNSLEtBQUssVUFBVTtnQkFDYixjQUFjLEdBQUcsU0FBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDO2dCQUN2RCxNQUFNLElBQUEsTUFBQyxFQUFBLFdBQVcsR0FBRyxDQUFDLFdBQVcsTUFBTSxjQUFjLEVBQUUsQ0FBQztnQkFDeEQsTUFBTTtZQUNSO2dCQUNFLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixDQUFDO1FBRUQsTUFBTSxHQUFHLEdBQUc7WUFDVixTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDdEIsT0FBTyxFQUFFLEdBQUc7U0FDYixDQUFDO1FBRUYsTUFBTSxFQUFFLEdBQUcsSUFBQSxNQUFDLEVBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFbEQsTUFBTSxFQUFFLENBQUEsaUVBQWlFLGNBQWMsRUFBRSxDQUFDO1FBQzFGLE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUEsd0RBQXdELENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFbEcsSUFBQSxTQUFJLEVBQUMsY0FBYyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRS9CLE9BQU87WUFDTCxLQUFLLEVBQUUsUUFBUTtZQUNmLEdBQUc7WUFDSCxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDakIsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFO1NBQ2xFLENBQUM7SUFDSixDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxDQUFDO0lBQ1YsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLEtBQUs7SUFHVCxZQUE0QixPQUFlLEVBQW1CLE9BQWdCLEVBQWtCLE1BQWU7UUFBbkYsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUFtQixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQWtCLFdBQU0sR0FBTixNQUFNLENBQVM7UUFDN0csSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxRQUFnQixFQUFFLGVBQXdCO1FBQ3ZFLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUVqQixLQUFLLENBQUMsSUFBSSxDQUNSLHlDQUF5QyxFQUN6QywwREFBMEQsRUFDMUQsK0RBQStELEVBQy9ELG9FQUFvRSxFQUNwRSw4RUFBOEUsRUFDOUUsYUFBYSxFQUNiLGNBQWMsRUFDZCxhQUFhLFFBQVEsT0FBTztRQUM1Qiw2RUFBNkU7UUFDN0Usa0RBQWtELEVBQ2xELGtEQUFrRCxFQUNsRCxlQUFlLENBQ2hCLENBQUM7UUFFRixJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLEtBQUssQ0FBQyxJQUFJLENBQ1IsY0FBYyxFQUNkLCtCQUErQjtZQUMvQiw2RUFBNkU7WUFDN0Usd0VBQXdFLEVBQ3hFLGVBQWUsQ0FDaEIsQ0FBQztRQUNKLENBQUM7UUFFRCxLQUFLLENBQUMsSUFBSSxDQUNSLGNBQWMsRUFDZCxhQUFhLENBQ2QsQ0FBQztRQUVGLE1BQU0sYUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBWSxFQUFFLE9BQXlCO1FBQ3ZELE1BQU0sSUFBSSxHQUFHO1lBQ1gsY0FBYyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pDLGNBQWM7WUFDZCxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEQsSUFBSTtZQUNKLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1NBQ3JFLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFBLFNBQUksRUFBQyxpQkFBaUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCxNQUFNLEdBQUcsR0FBRztZQUNWLEdBQUcsT0FBTyxDQUFDLEdBQUc7WUFDZCxnQkFBZ0IsRUFBRTtnQkFDaEIscUhBQXFIO2dCQUNySCx3REFBd0Q7Z0JBQ3hELEVBQUU7Z0JBQ0YsdURBQXVEO2dCQUN2RCwyREFBMkQ7Z0JBQzNELG1HQUFtRztnQkFDbkcsaU1BQWlNO2dCQUNqTSw2Q0FBNkM7Z0JBQzdDLDZDQUE2QztnQkFDN0Msb0RBQW9EO2FBQ3JELENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztTQUNaLENBQUM7UUFFRixPQUFPLElBQUEsTUFBQyxFQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFBLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDMUUsQ0FBQztDQUNGO0FBUUQ7O0dBRUc7QUFDSCxNQUFNLFdBQVksU0FBUSxLQUFLO0NBQUk7QUFFbkM7O0dBRUc7QUFDSCxTQUFTLE1BQU0sQ0FBQyxJQUFZO0lBQzFCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1QsTUFBTSxJQUFJLFdBQVcsQ0FBQyxHQUFHLElBQUksY0FBYyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsWUFBWTtJQUMxQixNQUFNLEdBQUcsR0FBRyxJQUFBLFdBQU0sR0FBRSxDQUFDO0lBQ3JCLE9BQU87UUFDTCxHQUFHO1FBQ0gsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDaEMsTUFBTSxhQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDckQsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsS0FBWTtJQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRCxnQkFBZ0I7QUFDaEIsRUFBRTtBQUNGLHFFQUFxRTtBQUNyRSw0RUFBNEU7QUFDNUUscURBQXFEO0FBQ3JELEVBQUU7QUFDRixnR0FBZ0c7QUFFaEcsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ2YsSUFBSSxDQUFDLFlBQVksa0JBQWEsRUFBRSxDQUFDO1FBQy9CLElBQUEsU0FBSSxFQUFDLHNDQUFzQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO1NBQU0sSUFBSSxDQUFDLFlBQVksV0FBVyxFQUFFLENBQUM7UUFDcEMsSUFBQSxTQUFJLEVBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QixDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUNELE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMZWdhY3kgdnMgY29tcGF0aWJpbGl0eSBlbmRwb2ludFxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICpcbiAqIFRoaXMgc2NyaXB0IHRhbGtzIGFib3V0IGxlZ2FjeSB2cyBjb21wYXRpYmlsaXR5IGVuZHBvaW50IGEgYnVuY2guXG4gKlxuICogQm90aCBpbXBsZW1lbnQgdGhlIE5leHVzIDIgcHJvdG9jb2wsIGhvd2V2ZXI6XG4gKlxuICogLSBUaGUgXCJsZWdhY3lcIiBlbmRwb2ludCBpcyB0aGUgU29uYXR5cGUgT1NTUkggZW5kcG9pbnQgdGhhdCB3YXMgZGVwcmVjYXRlZCBKdW5lIDIwMjUuXG4gKiAtIFRoZSBcImNvbXBhdGliaWxpdHlcIiBlbmRwb2ludCBpcyBhIE5leHVzIDItY29tcGF0aWJsZSBlbmRwb2ludCBzdG9vZCB1cCBmb3IgdGhlIG5ld1xuICogICBwdWJsaXNoaW5nIHNlcnZpY2UsIENlbnRyYWwgUHVibGlzaGluZy5cbiAqXG4gKiBJdCBzaG91bGQgYmUgdGhlIHNhbWUgcHJvdG9jb2wgYnV0IG9mIGNvdXJzZSB0aGVyZSBhcmUgc3VidGxlIGRpZmZlcmVuY2VzXG4gKiBiZXR3ZWVuIHRoZW0gKGluIGhvdyB0aGV5IHNpZ25hbCBlcnJvciB3aGVuIHlvdSB0cnkgdG8gcmVwdWJsaXNoIGFuIGFscmVhZHlcbiAqIHB1Ymxpc2hlZCB2ZXJzaW9uLCBhbmQgZXZlbiBpbiB0aGUgd2lyZSBwcm90b2NvbCBhY2NlcHRlZCkgc28gd2UgaGF2ZSB0b1xuICogdHJlYXQgdGhlbSBkaWZmZXJlbnRseSBoZXJlLlxuICpcbiAqIFRoZXJlIGlzIGFsc28gYW4gXCJvZmZpY2lhbCBuZXdcIiBwcm90b2NvbCBmb3IgdGhlIG5ldyBwdWJsaXNoaW5nIG1lY2hhbmlzbSxcbiAqIGJ1dCB0aGUgTWF2ZW4gcGx1Z2luIHRoZXkgc3VwcGx5IGZvciB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCB0aGF0LiBJbiB0aGVpciB3b3JkczpcbiAqXG4gKiA+IGl0IGFwcGVhcnMgdGhhdCB5b3UgYXJlIHVzaW5nIHRoZSBcInR3byBzdGFnZVwiWzFdIGRlcGxveW1lbnQgcHJvY2Vzcywgd2hpY2ggaXNcbiAqID4gbm90IHlldCBzdXBwb3J0ZWQgYnkgdGhlIG5ldyBwbHVnaW4uIFlvdSBhcmUgdGhlIGZpcnN0IHB1Ymxpc2hlciB0byBoYXZlXG4gKiA+IHJlcXVlc3RlZCB0aGlzLCBzbyB3ZSB3ZXJlIG5vdCBmYW1pbGlhciB3aXRoIHRoaXMgc3BlY2lmaWMgdXNlY2FzZSB3aGVuXG4gKiA+IGJ1aWxkaW5nIHRoZSBuZXcgcGx1Z2luXG4gKiA+IFsxXSA8aHR0cHM6Ly9naXRodWIuY29tL3NvbmF0eXBlL25leHVzLW1hdmVuLXBsdWdpbnMvYmxvYi80M2E5OTQwYjEzNGMzZjg3ZWJlNGRhYTgyNTUyZTg0NGQ5YzU3OGI4L3N0YWdpbmcvbWF2ZW4tcGx1Z2luL1dPUktGTE9XUy5tZCN0d28tc2hvdHM+XG4gKi9cbmltcG9ydCB7IHByb21pc2VzIGFzIGZzIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgJCwgY2QsIGVjaG8sIGdsb2IsIG9zLCBwYXRoLCBQcm9jZXNzT3V0cHV0LCBxdW90ZSwgdG1wZGlyIH0gZnJvbSAnengnO1xuXG5jb25zdCBMRUdBQ1lfT1NTUkhfU0VSVkVSX0lEID0gJ29zc3JoJztcbmNvbnN0IENPTVBBVF9DRU5UUkFMX1NFUlZFUl9JRCA9ICdjZW50cmFsLW9zc3JoJztcblxuY29uc3QgTkVYVVNfTUFWRU5fU1RBR0lOR19QTFVHSU4gPSAnb3JnLnNvbmF0eXBlLnBsdWdpbnM6bmV4dXMtc3RhZ2luZy1tYXZlbi1wbHVnaW46MS43LjAnO1xuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuICBjb25zdCBhcmdzID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpO1xuICBjb25zdCBqYXZhUm9vdCA9IGFyZ3NbMF0gPz8gJ2Rpc3QvamF2YSc7XG5cbiAgY2QoamF2YVJvb3QpO1xuXG4gIGNvbnN0IHBvbXMgPSBhd2FpdCBnbG9iKCcqKi8qLnBvbScpO1xuICBpZiAocG9tcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgU2ltcGxlRXJyb3IoYE5vIEpBUlMgdG8gcHVibGlzaDogbm8gLnBvbSBmaWxlcyBmb3VuZCB1bmRlciAke3Byb2Nlc3MuY3dkKCl9YCk7XG4gIH1cblxuICBlY2hvKGBQT01zIGZvdW5kOiAke3BvbXN9YCk7XG5cbiAgY29uc3Qgc2hhcmVkT3B0aW9uczogU2hhcmVkUHVibGlzaE9wdGlvbnMgPSB7XG4gICAgdXNlcm5hbWU6IGVudlZhcignTUFWRU5fVVNFUk5BTUUnKSxcbiAgICBwYXNzd29yZDogZW52VmFyKCdNQVZFTl9QQVNTV09SRCcpLFxuICAgIGRyeVJ1bjogcHJvY2Vzcy5lbnYuTUFWRU5fRFJZUlVOID09PSAndHJ1ZScsXG4gICAgdmVyYm9zZTogcHJvY2Vzcy5lbnYuTUFWRU5fVkVSQk9TRSA9PT0gJ3RydWUnLFxuICAgIHBvbXMsXG4gIH07XG5cbiAgbGV0IG9wdGlvbnM6IE1hdmVuUHVibGlzaE9wdGlvbnM7XG4gIGNvbnN0IHNlcnZlcklkID0gcHJvY2Vzcy5lbnYuTUFWRU5fU0VSVkVSX0lEID8/IExFR0FDWV9PU1NSSF9TRVJWRVJfSUQ7XG5cbiAgc3dpdGNoIChzZXJ2ZXJJZCkge1xuICAgIGNhc2UgTEVHQUNZX09TU1JIX1NFUlZFUl9JRDpcbiAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIHR5cGU6ICdsZWdhY3ktb3NzcmgnLFxuICAgICAgICAuLi5zaGFyZWRPcHRpb25zLFxuICAgICAgICBzdGFnaW5nUHJvZmlsZUlkOiBlbnZWYXIoJ01BVkVOX1NUQUdJTkdfUFJPRklMRV9JRCcpLFxuICAgICAgICBlbmRwb2ludDogcHJvY2Vzcy5lbnYuTUFWRU5fRU5EUE9JTlQsXG4gICAgICAgIHByaXZhdGVLZXk6IHBhcnNlUHJpdmF0ZUtleUZyb21FbnYoKSxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIENPTVBBVF9DRU5UUkFMX1NFUlZFUl9JRDpcbiAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIHR5cGU6ICdjb21wYXQtb3NzcmgnLFxuICAgICAgICAuLi5zaGFyZWRPcHRpb25zLFxuICAgICAgICAvLyBOb3QgcmVxdWlyZWQgYnkgdGhlIG5ldyBlbmRwb2ludDogY2FuIGJlIGFueSB2YWx1ZSAobWF5YmUgbmV2ZXIgd2FzIHJlcXVpcmVkIHRvIGJlZ2luIHdpdGg/KVxuICAgICAgICBzdGFnaW5nUHJvZmlsZUlkOiAncHVibGliJyxcbiAgICAgICAgZW5kcG9pbnQ6IHByb2Nlc3MuZW52Lk1BVkVOX0VORFBPSU5ULFxuICAgICAgICBwcml2YXRlS2V5OiBwYXJzZVByaXZhdGVLZXlGcm9tRW52KCksXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIFdlIGhhdmVuJ3QgaW1wbGVtZW50ZWQgc2lnbmluZyBmb3IgdGhpcywgc28gZmFpbCBsb3VkbHkgaWYgcGVvcGxlIHRyeSB0byB1c2UgaXQgYW55d2F5XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTUFWRU5fR1BHX1BSSVZBVEVfS0VZIHx8IHByb2Nlc3MuZW52Lk1BVkVOX0dQR19QUklWQVRFX0tFWV9GSUxFKSB7XG4gICAgICAgIHRocm93IG5ldyBTaW1wbGVFcnJvcignTUFWRU5fR1BHX1BSSVZBVEVfS0VZW19GSUxFXSBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgT1NTUkggcHVibGlzaGluZycpO1xuICAgICAgfVxuXG4gICAgICBvcHRpb25zID0ge1xuICAgICAgICB0eXBlOiAnY3VzdG9tLW5leHVzJyxcbiAgICAgICAgLi4uc2hhcmVkT3B0aW9ucyxcbiAgICAgICAgc2VydmVySWQsXG4gICAgICAgIHJlcG9zaXRvcnlVcmw6IGVudlZhcignTUFWRU5fUkVQT1NJVE9SWV9VUkwnKSxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGF3YWl0IG1hdmVuUHVibGlzaChvcHRpb25zKTtcblxuICBlY2hvKCd+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+fn5+Jyk7XG4gIGVjaG8oJ+KchSBBbGwgRG9uZSEnKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VQcml2YXRlS2V5RnJvbUVudigpOiBQcml2YXRlS2V5IHtcbiAgaWYgKHByb2Nlc3MuZW52Lk1BVkVOX0dQR19QUklWQVRFX0tFWV9GSUxFKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogJ2ZpbGUnLCBmaWxlTmFtZTogcHJvY2Vzcy5lbnYuTUFWRU5fR1BHX1BSSVZBVEVfS0VZX0ZJTEUsIHBhc3NQaHJhc2U6IGVudlZhcignTUFWRU5fR1BHX1BSSVZBVEVfS0VZX1BBU1NQSFJBU0UnKSB9O1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5NQVZFTl9HUEdfUFJJVkFURV9LRVkpIHtcbiAgICByZXR1cm4geyB0eXBlOiAnbWF0ZXJpYWwnLCBrZXlNYXRlcmlhbDogcHJvY2Vzcy5lbnYuTUFWRU5fR1BHX1BSSVZBVEVfS0VZLCBwYXNzUGhyYXNlOiBlbnZWYXIoJ01BVkVOX0dQR19QUklWQVRFX0tFWV9QQVNTUEhSQVNFJykgfTtcbiAgfVxuICB0aHJvdyBuZXcgU2ltcGxlRXJyb3IoJ01BVkVOX0dQR19QUklWQVRFX0tFWVtfRklMRV0gaXMgcmVxdWlyZWQnKTtcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAgTW9kZWxpbmcgYWxsIHRoZSBwYXJhbWV0ZXJzIHNvIHRoYXQgd2UgY2FuIHB1bGwgdGhlIGVudmlyb25tZW50IHBhcnNpbmcgZm9yd2FyZFxuLy9cblxuaW50ZXJmYWNlIFNoYXJlZFB1Ymxpc2hPcHRpb25zIHtcbiAgcmVhZG9ubHkgdXNlcm5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgcGFzc3dvcmQ6IHN0cmluZztcbiAgcmVhZG9ubHkgZHJ5UnVuOiBib29sZWFuO1xuICByZWFkb25seSB2ZXJib3NlOiBib29sZWFuO1xuICByZWFkb25seSBwb21zOiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIExlZ2FjeU9zc3JoUHVibGlzaE9wdGlvbnMgZXh0ZW5kcyBTaGFyZWRQdWJsaXNoT3B0aW9ucyB7XG4gIHR5cGU6ICdsZWdhY3ktb3NzcmgnO1xuICByZWFkb25seSBwcml2YXRlS2V5OiBQcml2YXRlS2V5O1xuICByZWFkb25seSBlbmRwb2ludD86IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhZ2luZ1Byb2ZpbGVJZDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQ29tcGF0T3NzcmhQdWJsaXNoT3B0aW9ucyBleHRlbmRzIFNoYXJlZFB1Ymxpc2hPcHRpb25zIHtcbiAgdHlwZTogJ2NvbXBhdC1vc3NyaCc7XG4gIHJlYWRvbmx5IHByaXZhdGVLZXk6IFByaXZhdGVLZXk7XG4gIHJlYWRvbmx5IGVuZHBvaW50Pzogc3RyaW5nO1xuICByZWFkb25seSBzdGFnaW5nUHJvZmlsZUlkOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBDdXN0b21OZXh1c1B1Ymxpc2hPcHRpb25zIGV4dGVuZHMgU2hhcmVkUHVibGlzaE9wdGlvbnMge1xuICB0eXBlOiAnY3VzdG9tLW5leHVzJztcbiAgcmVhZG9ubHkgcmVwb3NpdG9yeVVybDogc3RyaW5nO1xuICByZWFkb25seSBzZXJ2ZXJJZDogc3RyaW5nO1xufVxuXG50eXBlIFByaXZhdGVLZXkgPVxuICB8IHsgdHlwZTogJ2ZpbGUnOyBmaWxlTmFtZTogc3RyaW5nOyBwYXNzUGhyYXNlOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ21hdGVyaWFsJzsga2V5TWF0ZXJpYWw6IHN0cmluZzsgcGFzc1BocmFzZTogc3RyaW5nIH1cbiAgO1xuXG50eXBlIE1hdmVuUHVibGlzaE9wdGlvbnMgPSBMZWdhY3lPc3NyaFB1Ymxpc2hPcHRpb25zIHwgQ29tcGF0T3NzcmhQdWJsaXNoT3B0aW9uc3wgQ3VzdG9tTmV4dXNQdWJsaXNoT3B0aW9ucztcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAgUHVibGlzaGluZyBmdW5jdGlvbnNcbi8vXG5cbmFzeW5jIGZ1bmN0aW9uIG1hdmVuUHVibGlzaChvcHRpb25zOiBNYXZlblB1Ymxpc2hPcHRpb25zKSB7XG4gIGF3YWl0IHVzaW5nIHdvcmtEaXIgPSBhdXRvQ2xlYW5EaXIoKTtcbiAgY29uc3QgbWF2ZW4gPSBuZXcgTWF2ZW4od29ya0Rpci5kaXIsIG9wdGlvbnMudmVyYm9zZSwgb3B0aW9ucy5kcnlSdW4pO1xuXG4gIGNvbnN0IHggPSBvcHRpb25zLnR5cGU7XG4gIHN3aXRjaCAoeCkge1xuICAgIGNhc2UgJ2xlZ2FjeS1vc3NyaCc6XG4gICAgICBhd2FpdCBkZXBsb3lMZWdhY3lPc3NyaChtYXZlbiwgb3B0aW9ucyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb21wYXQtb3NzcmgnOlxuICAgICAgYXdhaXQgZGVwbG95Q29tcGF0T3NzcmgobWF2ZW4sIG9wdGlvbnMpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY3VzdG9tLW5leHVzJzpcbiAgICAgIGF3YWl0IGRlcGxveUN1c3RvbU5leHVzKG1hdmVuLCBvcHRpb25zKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBhc3NlcnROZXZlcih4KTtcbiAgfVxufVxuXG4vKipcbiAqIERlcGxveSB0byB0aGUgbGVnYWN5IE9TU1JIIE5leHVzIHNlcnZlclxuICovXG5hc3luYyBmdW5jdGlvbiBkZXBsb3lMZWdhY3lPc3NyaChtYXZlbjogTWF2ZW4sIG9wdGlvbnM6IExlZ2FjeU9zc3JoUHVibGlzaE9wdGlvbnMpIHtcbiAgZWNobygn8J+TpiBQdWJsaXNoaW5nIHRvIE1hdmVuIENlbnRyYWwnKTtcbiAgY29uc3QgZGVmYXVsdEVuZHBvaW50ID0gJ2h0dHBzOi8vb3NzLnNvbmF0eXBlLm9yZyc7XG5cbiAgY29uc3Qgc3RhZ2VkID0gYXdhaXQgZGVwbG95U3RhZ2VkUmVwb3NpdG9yeShtYXZlbiwge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgZW5kcG9pbnQ6IG9wdGlvbnMuZW5kcG9pbnQgPz8gZGVmYXVsdEVuZHBvaW50LFxuICAgIHJlcHVibGlzaFdpbGw0MDA6IGZhbHNlLFxuICB9KTtcblxuICBpZiAoc3RhZ2VkLnR5cGUgIT09ICdzdWNjZXNzJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qXG4gIGNvbnN0IHJlbGVhc2VkID0gYXdhaXQgcmVsZWFzZVJlcG8oe1xuICAgIHNlcnZlclVybDogb3B0aW9ucy5lbmRwb2ludCA/PyBkZWZhdWx0RW5kcG9pbnQsXG4gICAgdXNlcm5hbWU6IG9wdGlvbnMudXNlcm5hbWUsXG4gICAgcGFzc3dvcmQ6IG9wdGlvbnMucGFzc3dvcmQsXG4gICAgcmVwb3NpdG9yeUlkOiBzdGFnZWQucmVwb3NpdG9yeUlkLFxuICB9KTtcblxuICBpZiAocmVsZWFzZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgKi9cblxuICAvLyBTZW5kIGEgcmVtb3RlIHJlbGVhc2UgY29tbWFuZCB0byB0aGUgcmVwb3NpdG9yeVxuICBjb25zdCByZWxlYXNlT3V0cHV0ID0gYXdhaXQgbWF2ZW4uZXhlYyhgJHtORVhVU19NQVZFTl9TVEFHSU5HX1BMVUdJTn06cmMtcmVsZWFzZWAsIHtcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBuZXh1c1VybDogb3B0aW9ucy5lbmRwb2ludCA/PyBkZWZhdWx0RW5kcG9pbnQsXG4gICAgICBzZXJ2ZXJJZDogc3RhZ2VkLnNlcnZlcklkLFxuICAgICAgc3RhZ2luZ1JlcG9zaXRvcnlJZDogc3RhZ2VkLnJlcG9zaXRvcnlJZCxcbiAgICB9LFxuICAgIG5vdGhyb3c6IHRydWUsXG4gIH0pO1xuICBpZiAoIXJlbGVhc2VPdXRwdXQpIHtcbiAgICBlY2hvKCfwn4+c77iPIFN0b3BwZWQgaGVyZSBiZWNhdXNlIG9mIGRyeS1ydW4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocmVsZWFzZU91dHB1dC5leGl0Q29kZSAhPT0gMCkge1xuICAgIC8vIElmIHJlbGVhc2UgZmFpbGVkLCBjaGVjayBpZiB0aGlzIHdhcyBjYXVzZWQgYmVjYXVzZSB3ZSBhcmUgdHJ5aW5nIHRvIHB1Ymxpc2hcbiAgICAvLyB0aGUgc2FtZSB2ZXJzaW9uIGFnYWluLCB3aGljaCBpcyBub3QgYW4gZXJyb3IuIFRoZSBtYWdpYyBzdHJpbmcgXCJkb2VzIG5vdFxuICAgIC8vIGFsbG93IHVwZGF0aW5nIGFydGlmYWN0XCIgZm9yIGEgXCIucG9tXCIgZmlsZSBpbmRpY2F0ZXMgdGhhdCB3ZSBhcmUgdHJ5aW5nIHRvXG4gICAgLy8gb3ZlcnJpZGUgYW4gZXhpc3RpbmcgdmVyc2lvbi4gT3RoZXJ3aXNlLCBmYWlsIVxuXG4gICAgY29uc3QgbG9va3NMaWtlRHVwbGljYXRlUHVibGlzaCA9IHJlbGVhc2VPdXRwdXQubGluZXMoKVxuICAgICAgLmZpbHRlcihsID0+IGwuaW5jbHVkZXMoJ2RvZXMgbm90IGFsbG93IHVwZGF0aW5nIGFydGlmYWN0JykpXG4gICAgICAuZmlsdGVyKGwgPT4gbC5pbmNsdWRlcygnLnBvbScpKVxuICAgICAgLmxlbmd0aCA+IDA7XG5cbiAgICBpZiAoIWxvb2tzTGlrZUR1cGxpY2F0ZVB1Ymxpc2gpIHtcbiAgICAgIHRocm93IG5ldyBTaW1wbGVFcnJvcignUmVsZWFzZSBmYWlsZWQnKTtcbiAgICB9XG5cbiAgICBlY2hvKCfimqDvuI8gQXJ0aWZhY3QgYWxyZWFkeSBwdWJsaXNoZWQuIFNraXBwaW5nJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZXBsb3kgdG8gdGhlIGNvbXBhdCBPU1NSSCBOZXh1cyBzZXJ2ZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVwbG95Q29tcGF0T3NzcmgobWF2ZW46IE1hdmVuLCBvcHRpb25zOiBDb21wYXRPc3NyaFB1Ymxpc2hPcHRpb25zKSB7XG4gIGVjaG8oJ/Cfk6YgUHVibGlzaGluZyB0byBNYXZlbiBDZW50cmFsIChDb21wYXQgZW5kcG9pbnQpJyk7XG5cbiAgY29uc3QgZGVmYXVsdEVuZHBvaW50ID0gJ2h0dHBzOi8vb3Nzcmgtc3RhZ2luZy1hcGkuY2VudHJhbC5zb25hdHlwZS5jb20vJztcbiAgY29uc3QgZW5kcG9pbnQgPSBvcHRpb25zLmVuZHBvaW50ID8/IGRlZmF1bHRFbmRwb2ludDtcblxuICBjb25zdCBzdGFnZWQgPSBhd2FpdCBkZXBsb3lTdGFnZWRSZXBvc2l0b3J5KG1hdmVuLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBlbmRwb2ludCxcbiAgICByZXB1Ymxpc2hXaWxsNDAwOiB0cnVlLFxuICB9KTtcblxuICBpZiAoc3RhZ2VkLnR5cGUgIT09ICdzdWNjZXNzJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlbGVhc2VkID0gYXdhaXQgcmVsZWFzZVJlcG8oe1xuICAgIHNlcnZlclVybDogZW5kcG9pbnQsXG4gICAgdXNlcm5hbWU6IG9wdGlvbnMudXNlcm5hbWUsXG4gICAgcGFzc3dvcmQ6IG9wdGlvbnMucGFzc3dvcmQsXG4gICAgcmVwb3NpdG9yeUlkOiBzdGFnZWQucmVwb3NpdG9yeUlkLFxuICB9KTtcblxuICBpZiAocmVsZWFzZWQgPT09ICdkdXBsaWNhdGUtdmVyc2lvbicpIHtcbiAgICBlY2hvKCfimqDvuI8gVmVyc2lvbihzKSBhbHJlYWR5IHB1Ymxpc2hlZC4gU2tpcHBpbmcnKTtcbiAgfVxufVxuXG4vKipcbiAqIERlcGxveSB0byBhIGN1c3RvbSBOZXh1cyBzZXJ2ZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVwbG95Q3VzdG9tTmV4dXMobWF2ZW46IE1hdmVuLCBvcHRpb25zOiBDdXN0b21OZXh1c1B1Ymxpc2hPcHRpb25zKSB7XG4gIGVjaG8oYPCfk6YgUHVibGlzaGluZyB0byAke29wdGlvbnMuc2VydmVySWR9YCk7XG4gIGF3YWl0IG1hdmVuLndyaXRlU2V0dGluZ3NGaWxlKG9wdGlvbnMuc2VydmVySWQsIGZhbHNlKTtcblxuICBmb3IgKGNvbnN0IHBvbSBvZiBvcHRpb25zLnBvbXMpIHtcbiAgICBjb25zdCBkZXBsb3lPdXRwdXQgPSBhd2FpdCBtYXZlbi5leGVjKCdkZXBsb3k6ZGVwbG95LWZpbGUnLCB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHVybDogb3B0aW9ucy5yZXBvc2l0b3J5VXJsLFxuICAgICAgICByZXBvc2l0b3J5SWQ6IG9wdGlvbnMuc2VydmVySWQsXG4gICAgICAgIHBvbUZpbGU6IHBvbSxcbiAgICAgICAgLi4uamFyc0Zyb21Qb20ocG9tKSxcbiAgICAgIH0sXG4gICAgICBub3Rocm93OiB0cnVlLFxuICAgIH0pO1xuXG4gICAgaWYgKGRlcGxveU91dHB1dD8uZXhpdENvZGUgJiYgZGVwbG95T3V0cHV0LmV4aXRDb2RlID4gMCkge1xuICAgICAgaWYgKGRlcGxveU91dHB1dC5zdGRvdXQuaW5jbHVkZXMoJzQwOSBDb25mbGljdCcpKSB7XG4gICAgICAgIGVjaG8oJ+KaoO+4jyBBcnRpZmFjdCBhbHJlYWR5IHB1Ymxpc2hlZC4gU2tpcHBpbmcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBTaW1wbGVFcnJvcignUmVsZWFzZSBmYWlsZWQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudHlwZSBEZXBsb3lTdGFnZWRSZXBvUmVzdWx0ID1cbiAgfCB7IHR5cGU6ICdzdWNjZXNzJzsgcmVwb3NpdG9yeUlkOiBzdHJpbmc7IHNlcnZlcklkOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ2FscmVhZHktcHVibGlzaGVkJyB9XG4gIHwgeyB0eXBlOiAnZHJ5LXJ1bicgfTtcblxuLyoqXG4gKiBDcmVhdGUgdGhlIHN0YWdpbmcgcmVwb3NpdG9yeS4gVGhpcyBpcyB0aGUgc2FtZSBiZXR3ZWVuIHRoZSBsZWdhY3kgYW5kIGNvbXBhdCBlbmRwb2ludHMuXG4gKlxuICogYHJlcHVibGlzaFdpbGw0MDBgOiBpbiB0aGUgY29tcGF0aWJpbGl0eSBlbmRwb2ludCwgc3RhZ2luZyBhIHZlcnNpb24gdGhhdCBoYXMgYWxyZWFkeVxuICogYmVlbiBwdWJsaXNoZWQgd2lsbCBsZWFkIHRvIGEgYDQwMCBCYWQgUmVxdWVzdGAsIHdpdGggbm8gZnVydGhlciBpbmZvLiBXZSBuZWVkZWQgdG8gaGF2ZVxuICogcnVuIHRoZSBNYXZlbiBjb21tYW5kIHdpdGggYC0tZGVidWdgIGxvZ2dpbmcgdG8gc2VlIHRoZSBhY3R1YWwgZXJyb3IgbWVzc2FnZSBpbiB0aGUgb3V0cHV0LlxuICpcbiAqIEluIHRoZSBsZWdhY3kgZW5kcG9pbnQsIHN0YWdpbmcgdGFrZXMgbXVsdGlwbGUgbWludXRlcywgYW5kIE1hdmVuIHdpbGwgcG9sbFxuICogZXZlcnkgM3MgYW5kIHByaW50IHRoZSBvdXRwdXQuIFdlIHRoZXJlZm9yZSBkb24ndCB1c2UgdmVyYm9zZSBtb2RlIHRvIGF2b2lkXG4gKiBzdGRvdXQgc3BhbS4gSW4gdGhlIGxlZ2FjeSBlbmRwb2ludCwgZHVwbGljYXRlIHZlcnNpb24gcHVibGlzaGluZyBnZXRzXG4gKiByZXBvcnRlZCBkdXJpbmcgdGhlICdyZWxlYXNlJyBzdGVwIGFueXdheSwgbm90IGR1cmluZyBzdGFnaW5nLlxuICovXG5hc3luYyBmdW5jdGlvbiBkZXBsb3lTdGFnZWRSZXBvc2l0b3J5KG1hdmVuOiBNYXZlbiwgb3B0aW9uczogT21pdDxMZWdhY3lPc3NyaFB1Ymxpc2hPcHRpb25zIHwgQ29tcGF0T3NzcmhQdWJsaXNoT3B0aW9ucywgJ2VuZHBvaW50Jz4gJiB7IGVuZHBvaW50OiBzdHJpbmc7IHJlcHVibGlzaFdpbGw0MDA6IGJvb2xlYW4gfSk6IFByb21pc2U8RGVwbG95U3RhZ2VkUmVwb1Jlc3VsdD4ge1xuICBjb25zdCBzZXJ2ZXJJZCA9ICdvc3NyaCc7XG5cbiAgYXdhaXQgbWF2ZW4ud3JpdGVTZXR0aW5nc0ZpbGUoc2VydmVySWQsIHRydWUpO1xuXG4gIC8vIEZpcnN0IC0tIHNpZ24gYXJ0aWZhY3RzXG4gIGNvbnN0IHNpZ25lZERpciA9IHBhdGguam9pbihtYXZlbi53b3JrRGlyLCAnc2lnbmVkJyk7XG4gIGF3YWl0IGZzLm1rZGlyKHNpZ25lZERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgYXdhaXQgc2lnbkphcnMobWF2ZW4sIG9wdGlvbnMucG9tcywgc2lnbmVkRGlyLCBzZXJ2ZXJJZCwgb3B0aW9ucy5wcml2YXRlS2V5KTtcblxuICBlY2hvKCd+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+fn5+Jyk7XG4gIGVjaG8oJyBEZXBsb3lpbmcgYW5kIGNsb3NpbmcgcmVwb3NpdG9yeS4uLicpO1xuICBlY2hvKCd+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+fn5+Jyk7XG5cbiAgY29uc3QgbmV4dXNNYXZlblN0YWdpbmcgPSAnb3JnLnNvbmF0eXBlLnBsdWdpbnM6bmV4dXMtc3RhZ2luZy1tYXZlbi1wbHVnaW46MS43LjAnO1xuICBjb25zdCBzdGFnZU91dHB1dCA9IGF3YWl0IG1hdmVuLmV4ZWMoYCR7bmV4dXNNYXZlblN0YWdpbmd9OmRlcGxveS1zdGFnZWQtcmVwb3NpdG9yeWAsIHtcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICByZXBvc2l0b3J5RGlyZWN0b3J5OiBzaWduZWREaXIsXG4gICAgICBuZXh1c1VybDogb3B0aW9ucy5lbmRwb2ludCxcbiAgICAgIHNlcnZlcklkLFxuICAgICAgc3RhZ2luZ1Byb2dyZXNzVGltZW91dE1pbnV0ZXM6ICczMCcsXG4gICAgICBzdGFnaW5nUHJvZmlsZUlkOiBvcHRpb25zLnN0YWdpbmdQcm9maWxlSWQsXG4gICAgfSxcbiAgICBub3Rocm93OiB0cnVlLFxuICAgIHZlcmJvc2U6IG9wdGlvbnMucmVwdWJsaXNoV2lsbDQwMCxcbiAgfSk7XG4gIC8vIEZJWE1FOiBOZXcgc3RhZ2luZyBBUEkgdGhyb3dzIGFuIGVycm9yIGhlcmUgb24gZHVwbGljYXRlIHZlcnNpb25zXG4gIGlmIChzdGFnZU91dHB1dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZWNobygn8J+PnO+4jyBTdG9wcGVkIGhlcmUgYmVjYXVzZSBvZiBkcnktcnVuJyk7XG4gICAgcmV0dXJuIHsgdHlwZTogJ2RyeS1ydW4nIH07XG4gIH1cblxuICBpZiAob3B0aW9ucy5yZXB1Ymxpc2hXaWxsNDAwICYmIHN0YWdlT3V0cHV0LnRleHQoKS5tYXRjaCgvQ29tcG9uZW50IHdpdGggcGFja2FnZSB1cmwuKmFscmVhZHkgZXhpc3RzLykpIHtcbiAgICAvLyBXZSd2ZSBzZWVuIHRoaXMgZmFpbCB3aXRoIHRoZSBhYm92ZSBlcnJvciBtZXNzYWdlIG9uIHRoZSBPU1NSSCBjb21wYXRpYmlsaXR5IEFQSSB3aGVuIHRyeWluZyB0byByZXB1Ymxpc2hcbiAgICAvLyBhbiBhbHJlYWR5LXB1Ymxpc2hlZCB2ZXJzaW9uLlxuICAgIC8vXG4gICAgLy8gVGhpcyBpcyBwb3RlbnRpYWxseSBhIHByb2JsZW0gaWYgdGhlcmUgYXJlIG11bHRpcGxlIHZlcnNpb25zIGluIHRoZSBzb3VyY2UgZGlyZWN0b3J5IGF0IG9uY2UsIGJlY2F1c2Ugbm90aGluZ1xuICAgIC8vIHdpbGwgYmUgcHVibGlzaGVkIGlmIHRoZXJlJ3Mgb25lIHBhY2thZ2UgaW4gdGhlcmUgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHB1Ymxpc2hlZCBwcmV2aW91c2x5LiBCdXQgYydlc3QgbGEgdmllLlxuICAgIGVjaG8oJ+KaoO+4jyBWZXJzaW9uKHMpIGFscmVhZHkgcHVibGlzaGVkLiBTa2lwcGluZycpO1xuICAgIHJldHVybiB7IHR5cGU6ICdhbHJlYWR5LXB1Ymxpc2hlZCcgfTtcbiAgfSBlbHNlIGlmIChzdGFnZU91dHB1dC5leGl0Q29kZSAmJiBzdGFnZU91dHB1dC5leGl0Q29kZSA+IDApIHtcbiAgICB0aHJvdyBzdGFnZU91dHB1dDtcbiAgfVxuXG4gIC8vIEdyZXAgdGhlIHJlcG9zaXRvcnkgSUQgb3V0IG9mIHRoZSBwcmludGVkIG91dHB1dFxuICAvLyBbSU5GT10gICogQ2xvc2luZyBzdGFnaW5nIHJlcG9zaXRvcnkgd2l0aCBJRCBcIlhYWFhYWFhYWFhcIi5cbiAgY29uc3QgbSA9IHN0YWdlT3V0cHV0LnN0ZG91dC5tYXRjaCgvQ2xvc2luZyBzdGFnaW5nIHJlcG9zaXRvcnkgd2l0aCBJRCBcIihbXlwiXSspXCIvKTtcbiAgaWYgKCFtKSB7XG4gICAgdGhyb3cgbmV3IFNpbXBsZUVycm9yKCdVbmFibGUgdG8gZXh0cmFjdCByZXBvc2l0b3J5IElEIGZyb20gZGVwbG95LXN0YWdlZC1yZXBvc2l0b3J5IG91dHB1dC4gVGhpcyBtZWFucyBpdCBmYWlsZWQgdG8gY2xvc2Ugb3IgdGhlcmUgd2FzIGFuIHVuZXhwZWN0ZWQgcHJvYmxlbS4gQXQgYW55IHJhdGUsIHdlIGNhblxcJ3QgcmVsZWFzZSBpdC4gU29ycnkuJyk7XG4gIH1cbiAgY29uc3QgcmVwb3NpdG9yeUlkID0gbVsxXTtcblxuICByZXR1cm4geyB0eXBlOiAnc3VjY2VzcycsIHJlcG9zaXRvcnlJZCwgc2VydmVySWQgfTtcbn1cblxuLyoqXG4gKiBTZW5kIGEgY3VzdG9tIFwicmVsZWFzZVwiIGNvbW1hbmQgdG8gdGhlIG5ldyBTb25hdHlwZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBlbmRwb2ludFxuICpcbiAqIFdoZW4gdXNpbmcgdGhlIGBuZXh1cy1zdGFnaW5nLW1hdmVuLXBsdWdpbmAncyBgcmVsZWFzZWAgb3IgYHJjLXJlbGVhc2VgIGNvbW1hbmRzLCB3ZSBnZXQgdGhlIGZvbGxvd2luZ1xuICogZXJyb3I6XG4gKlxuICogU2VuZGluZzpcbiAqXG4gKiBgYGBcbiAqIDxzdGFnaW5nQWN0aW9uUmVxdWVzdD48ZGF0YT48c3RhZ2VkUmVwb3NpdG9yeUlkcyBjbGFzcz1cImphdmEudXRpbC5BcnJheXMkQXJyYXlMaXN0XCI+PGEgY2xhc3M9XCJzdHJpbmctYXJyYXlcIj48c3RyaW5nPmlvLmdpdGh1Yi5yaXgwcnJyLS02M2VkYmNiZS1mMDU4LTQ0ZWItODVmNC1mZDlkY2UxYWVmNDA8L3N0cmluZz48L2E+PC9zdGFnZWRSZXBvc2l0b3J5SWRzPjxkZXNjcmlwdGlvbj51bmtub3duPC9kZXNjcmlwdGlvbj48YXV0b0Ryb3BBZnRlclJlbGVhc2U+dHJ1ZTwvYXV0b0Ryb3BBZnRlclJlbGVhc2U+PC9kYXRhPjwvc3RhZ2luZ0FjdGlvblJlcXVlc3Q+XG4gKiBgYGBcbiAqXG4gKiBFcnJvcjpcbiAqXG4gKiBgYGBcbiAqIEZhaWxlZCB0byBwcm9jZXNzIHJlcXVlc3Q6IEdvdCB1bmV4cGVjdGVkIFhNTCBlbGVtZW50IHdoZW4gcmVhZGluZyBzdGFnZWRSZXBvc2l0b3J5SWRzOiBHb3QgdW5leHBlY3RlZCBlbGVtZW50IFN0YXJ0RWxlbWVudChhLCB7XCJcIjogXCJcIiwgXCJ4bWxcIjogXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIiwgXCJ4bWxuc1wiOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvXCJ9LCBbY2xhc3MgLT4gc3RyaW5nLWFycmF5XSksIGV4cGVjdGVkIG9uZSBvZjogc3RyaW5nXG4gKiBgYGBcbiAqXG4gKiBEb2luZyBhIG1hbnVhbCBzbGlnaHRseSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBhYm92ZSByZXF1ZXN0IHN1Y2NlZWRzLCBzbyB3ZSdsbCBqdXN0IHByb2NlZWQgd2l0aCBkb2luZ1xuICogdGhhdC5cbiAqXG4gKiBUaGUgZW5kcG9pbnQgYWxzbyBzdXBwb3J0cyBKU09OLCB3aGljaCB3ZSBwcmVmZXIgb3ZlciBYTUwuXG4gKlxuICogVGhpcyBlbmRwb2ludCB3aWxsIG5ldmVyIHJldHVybiBhbiBlcnJvciwgZXZlbiBpZiB0aGUgcHVibGlzaCBkaWRuJ3QgaGFwcGVuIGJlY2F1c2VcbiAqIG9mIGR1cGxpY2F0ZSB2ZXJzaW9uIHB1Ymxpc2hpbmcgKG5vdCBmb3IgdGhlIGxlZ2FjeSwgbm9yIGZvciB0aGUgY29tcGF0aWJpbGl0eSBlbmRwb2ludCkuXG4gKlxuICogQHNlZSBodHRwczovL2NlbnRyYWwuc29uYXR5cGUub3JnL3B1Ymxpc2gvcHVibGlzaC1wb3J0YWwtb3Nzcmgtc3RhZ2luZy1hcGkvXG4gKiBAc2VlIGh0dHBzOi8vc3VwcG9ydC5zb25hdHlwZS5jb20vaGMvZW4tdXMvYXJ0aWNsZXMvMjEzNDY1NDQ4LUF1dG9tYXRpY2FsbHktZHJvcHBpbmctb2xkLXN0YWdpbmctcmVwb3NpdG9yaWVzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlbGVhc2VSZXBvKG9wdGlvbnM6IHsgc2VydmVyVXJsOiBzdHJpbmc7IHVzZXJuYW1lOiBzdHJpbmc7IHBhc3N3b3JkOiBzdHJpbmc7IHJlcG9zaXRvcnlJZDogc3RyaW5nOyBkZXNjcmlwdGlvbj86IHN0cmluZyB9KTogUHJvbWlzZTwnb2snIHwgJ2R1cGxpY2F0ZS12ZXJzaW9uJz4ge1xuICBlY2hvKGDwn5qAIFJlbGVhc2luZyByZXBvc2l0b3J5ICR7b3B0aW9ucy5yZXBvc2l0b3J5SWR9IGF0ICR7b3B0aW9ucy5zZXJ2ZXJVcmx9YCk7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoJ3NlcnZpY2UvbG9jYWwvc3RhZ2luZy9idWxrL3Byb21vdGUnLCBvcHRpb25zLnNlcnZlclVybCk7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIHN0YWdlZFJlcG9zaXRvcnlJZHM6IFtvcHRpb25zLnJlcG9zaXRvcnlJZF0sXG4gICAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uID8/ICdEZXBsb3ltZW50JyxcbiAgICAgICAgYXV0b0Ryb3BBZnRlclJlbGVhc2U6IHRydWUsXG4gICAgICB9LFxuICAgIH0pLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtidG9hKGAke29wdGlvbnMudXNlcm5hbWV9OiR7b3B0aW9ucy5wYXNzd29yZH1gKX1gLFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGJvZHkgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG5cbiAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IChkdWUgdG8gc29tZSByZXBsaWNhdGlvbiBsYXRlbmN5PykgdGhlIGluaXRpYWwgXCJzdGFnZVwiIHN1Y2NlZWRzLFxuICAvLyBidXQgdGhlIFwicmVsZWFzZVwiIGZhaWxzLCBpZiB3ZSB0cnkgdG8gcHVibGlzaCBhbiBhbHJlYWR5LXB1Ymxpc2hlZCB2ZXJzaW9uIGFnYWluLlxuICAvL1xuICAvLyBVbmZvcnR1bmF0ZWx5IHRoZXJlIGlzIG5vIGdyZWF0IGVycm9yIGNvZGUgdG8gZGV0ZWN0IHRoaXMgcmlnaHQgbm93LCBidXQgSSd2ZSBvYnNlcnZlZFxuICAvLyB0aGlzIGVycm9yIHdoZW4gaXQgaGFwcGVuZWQuXG4gIC8vIEkgaGF2ZSBhIHN1cHBvcnQgcmVxdWVzdCBvdXQgdG8gU29uYXR5cGUgZm9yIHRoaXMsIHdlJ2xsIHNlZSBpZiB0aGlzIGNoYW5nZXMgb3ZlciB0aW1lLlxuICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDAgJiYgYm9keSA9PT0gJ0ZhaWxlZCB0byBwcm9jZXNzIHJlcXVlc3Q6IHNlcnZpY2UgZXJyb3InKSB7XG4gICAgcmV0dXJuICdkdXBsaWNhdGUtdmVyc2lvbic7XG4gIH1cblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfSAke3Jlc3BvbnNlLnN0YXR1c1RleHR9OiAke2JvZHl9YCk7XG4gIH1cblxuICBjb25zb2xlLmxvZyhib2R5KTtcblxuICByZXR1cm4gJ29rJztcbn1cblxuLyoqXG4gKiBTaWduIGFuZCBzdGFnZSBvdXIgYXJ0aWZhY3RzIGludG8gYSBsb2NhbCBkaXJlY3RvcnlcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2lnbkphcnMobWF2ZW46IE1hdmVuLCBwb21zOiBzdHJpbmdbXSwgdGFyZ2V0RGlyOiBzdHJpbmcsIHNlcnZlcklkOiBzdHJpbmcsIGtleTogUHJpdmF0ZUtleSkge1xuICBhd2FpdCB1c2luZyBncGcgPSBhd2FpdCBpbXBvcnRHcGdLZXkoa2V5KTtcblxuICAvLyBvbiBhIG1hYywgLS1waW5lbnRyeS1tb2RlIHRvIFwibG9vcGJhY2tcIiBhcmUgcmVxdWlyZWQgYW5kIEkgY291bGRuJ3QgZmluZCBhXG4gIC8vIHdheSB0byBkbyBzbyB2aWEgLURncGcuZ3BnQXJndW1lbnRzIG9yIHRoZSBzZXR0aW5ncyBmaWxlLCBzbyBoZXJlIHdlIGFyZS5cbiAgbGV0IGdwZ0JpbiA9ICdncGcnO1xuICBpZiAob3MucGxhdGZvcm0oKSA9PT0gJ2RhcndpbicpIHtcbiAgICBncGdCaW4gPSBwYXRoLmpvaW4obWF2ZW4ud29ya0RpciwgJ3B1YmxpYi1ncGcuc2gnKTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZ3BnQmluLCBbXG4gICAgICAnIyEvYmluL2Jhc2gnLFxuICAgICAgJ2V4ZWMgZ3BnIC0tcGluZW50cnktbW9kZSBsb29wYmFjayBcIlxcJEBcIicsXG4gICAgXS5qb2luKCdcXG4nKSwgJ3V0Zi04Jyk7XG4gICAgYXdhaXQgJGBjaG1vZCAreCAke2dwZ0Jpbn1gO1xuICB9XG5cbiAgZm9yIChjb25zdCBwb20gb2YgcG9tcykge1xuICAgIGF3YWl0IG1hdmVuLmV4ZWMoJ2dwZzpzaWduLWFuZC1kZXBsb3ktZmlsZScsIHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgJ3VybCc6IGBmaWxlOi8vJHt0YXJnZXREaXJ9YCxcbiAgICAgICAgJ3JlcG9zaXRvcnlJZCc6IHNlcnZlcklkLCAvLyBNb3N0IGxpa2VseSBub3QgbmVjZXNzYXJ5XG4gICAgICAgICdncGcuaG9tZWRpcic6IGdwZy5ob21lLFxuICAgICAgICAnZ3BnLmtleW5hbWUnOiBncGcua2V5SWQsXG4gICAgICAgICdncGcuZXhlY3V0YWJsZSc6IGdwZ0JpbixcbiAgICAgICAgJ3BvbUZpbGUnOiBwb20sXG4gICAgICAgIC4uLmphcnNGcm9tUG9tKHBvbSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQmFzZWQgb24gdGhlIHBhdGggb2YgYSAucG9tIGZpbGUsIHJldHVybiB0aGUgcGF0aHMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgamFyc1xuICovXG5mdW5jdGlvbiBqYXJzRnJvbVBvbShwb206IHN0cmluZykge1xuICByZXR1cm4ge1xuICAgIGZpbGU6IHBvbS5yZXBsYWNlKC9cXC5wb20kLywgJy5qYXInKSxcbiAgICBzb3VyY2VzOiBwb20ucmVwbGFjZSgvXFwucG9tJC8sICctc291cmNlcy5qYXInKSxcbiAgICBqYXZhZG9jOiBwb20ucmVwbGFjZSgvXFwucG9tJC8sICctamF2YWRvYy5qYXInKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGFuZCBpbXBvcnQgdGhlIEdQRyBrZXkgbWF0ZXJpYWwgaW50byBhIG5ldyBrZXljaGFpbiB0aGVyZVxuICovXG5hc3luYyBmdW5jdGlvbiBpbXBvcnRHcGdLZXkoa2V5OiBQcml2YXRlS2V5KSB7XG4gIC8vIEdudVBHIHdpbGwgb2NjYXNpb25hbGx5IGJhaWwgb3V0IHdpdGggXCJncGc6IDx3aGF0ZXZlcj4gZmFpbGVkOiBJbmFwcHJvcHJpYXRlIGlvY3RsIGZvciBkZXZpY2VcIiwgdGhlIGZvbGxvd2luZyBhdHRlbXB0cyB0byBmaXhcbiAgY29uc3QgZ3BnSG9tZSA9IGF1dG9DbGVhbkRpcigpO1xuICB0cnkge1xuICAgIC8vIEluIENJIGVudmlyb25tZW50cyB0aGVyZSB3aWxsIGJlIG5vIHR0eSwgYW5kIHdlIGRvbid0IHdhbnQgdGhpcyB0byBzdG9wIHRoZSBzY3JpcHQuXG4gICAgLy8gVGhlIHZhcmlhYmxlIHdpbGwgYmUgcG9wdWxhdGVkIHdpdGggYSBub25zZW5zaWNhbCBzdHJpbmcgKFwibm90IGEgdHR5XCIpIGJ1dCB0aGF0IGRvZXNuJ3Qgc2VlbSB0byBtYXR0ZXIuXG4gICAgY29uc3QgdHR5ID0gKGF3YWl0ICQoeyBzdGRpbzogWydpbmhlcml0JywgJ3BpcGUnLCAncGlwZSddLCBub3Rocm93OiB0cnVlIH0pYHR0eWApLnN0ZG91dDtcblxuICAgIGxldCBwcml2YXRlS2V5RmlsZTtcbiAgICBjb25zdCB0eXBlID0ga2V5LnR5cGU7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdmaWxlJzpcbiAgICAgICAgcHJpdmF0ZUtleUZpbGUgPSBrZXkuZmlsZU5hbWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbWF0ZXJpYWwnOlxuICAgICAgICBwcml2YXRlS2V5RmlsZSA9IHBhdGguam9pbihncGdIb21lLmRpciwgJ3ByaXZhdGUucGVtJyk7XG4gICAgICAgIGF3YWl0ICRgZWNobyAtZSAke2tleS5rZXlNYXRlcmlhbH0gPiAke3ByaXZhdGVLZXlGaWxlfWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0TmV2ZXIodHlwZSk7XG4gICAgfVxuXG4gICAgY29uc3QgZW52ID0ge1xuICAgICAgR05VUEdIT01FOiBncGdIb21lLmRpcixcbiAgICAgIEdQR19UVFk6IHR0eSxcbiAgICB9O1xuXG4gICAgY29uc3QgJCQgPSAkKHsgZW52OiB7IC4uLnByb2Nlc3MuZW52LCAuLi5lbnYgfSB9KTtcblxuICAgIGF3YWl0ICQkYGdwZyAtLWFsbG93LXNlY3JldC1rZXktaW1wb3J0IC0tYmF0Y2ggLS15ZXMgLS1uby10dHkgLS1pbXBvcnQgJHtwcml2YXRlS2V5RmlsZX1gO1xuICAgIGNvbnN0IGdwZ0tleUlkID0gKGF3YWl0ICQkYGdwZyAtLWxpc3Qta2V5cyAtLXdpdGgtY29sb25zIHwgZ3JlcCBwdWIgfCBjdXQgLWQ6IC1mNWApLnN0ZG91dC50cmltKCk7XG5cbiAgICBlY2hvKGBncGdfa2V5X2lkPSR7Z3BnS2V5SWR9YCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAga2V5SWQ6IGdwZ0tleUlkLFxuICAgICAgZW52LFxuICAgICAgaG9tZTogZ3BnSG9tZS5kaXIsXG4gICAgICBbU3ltYm9sLmFzeW5jRGlzcG9zZV06IGFzeW5jICgpID0+IGdwZ0hvbWVbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKSxcbiAgICB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgYXdhaXQgZ3BnSG9tZVtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgIHRocm93IGU7XG4gIH1cbn1cblxuY2xhc3MgTWF2ZW4ge1xuICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdzRmlsZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSB3b3JrRGlyOiBzdHJpbmcsIHByaXZhdGUgcmVhZG9ubHkgdmVyYm9zZTogYm9vbGVhbiwgcHVibGljIHJlYWRvbmx5IGRyeVJ1bjogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0dGluZ3NGaWxlID0gcGF0aC5qb2luKHdvcmtEaXIsICdtdm4tc2V0dGluZ3MueG1sJyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgc2V0dGluZ3MueG1sIGZpbGUgd2l0aCB0aGUgdXNlcitwYXNzd29yZCBmb3IgbWF2ZW5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB3cml0ZVNldHRpbmdzRmlsZShzZXJ2ZXJJZDogc3RyaW5nLCBzaWduZWRBcnRpZmFjdHM6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBsaW5lcyA9IFtdO1xuXG4gICAgbGluZXMucHVzaChcbiAgICAgICc8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiID8+JyxcbiAgICAgICc8c2V0dGluZ3MgeG1sbnM9XCJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9TRVRUSU5HUy8xLjAuMFwiJyxcbiAgICAgICcgICAgICAgIHhtbG5zOnhzaT1cImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlXCInLFxuICAgICAgJyAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPVwiaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvU0VUVElOR1MvMS4wLjAnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2Qvc2V0dGluZ3MtMS4wLjAueHNkXCI+JyxcbiAgICAgICcgIDxzZXJ2ZXJzPicsXG4gICAgICAnICAgIDxzZXJ2ZXI+JyxcbiAgICAgIGAgICAgICA8aWQ+JHtzZXJ2ZXJJZH08L2lkPmAsXG4gICAgICAvLyBNYXZlbiB3aWxsIHJlYWQgdGhlc2UsIHN1cnJvdW5kaW5nIGNvZGUgaGFzIGFscmVhZHkgbWFkZSBzdXJlIHRoZXkgYXJlIHNldFxuICAgICAgJyAgICAgIDx1c2VybmFtZT4ke2Vudi5NQVZFTl9VU0VSTkFNRX08L3VzZXJuYW1lPicsXG4gICAgICAnICAgICAgPHBhc3N3b3JkPiR7ZW52Lk1BVkVOX1BBU1NXT1JEfTwvcGFzc3dvcmQ+JyxcbiAgICAgICcgICAgPC9zZXJ2ZXI+JyxcbiAgICApO1xuXG4gICAgaWYgKHNpZ25lZEFydGlmYWN0cykge1xuICAgICAgbGluZXMucHVzaChcbiAgICAgICAgJyAgICA8c2VydmVyPicsXG4gICAgICAgICcgICAgICA8aWQ+Z3BnLnBhc3NwaHJhc2U8L2lkPicsXG4gICAgICAgIC8vIE1hdmVuIHdpbGwgcmVhZCB0aGVzZSwgc3Vycm91bmRpbmcgY29kZSBoYXMgYWxyZWFkeSBtYWRlIHN1cmUgdGhleSBhcmUgc2V0XG4gICAgICAgICcgICAgICA8cGFzc3BocmFzZT4ke2Vudi5NQVZFTl9HUEdfUFJJVkFURV9LRVlfUEFTU1BIUkFTRX08L3Bhc3NwaHJhc2U+JyxcbiAgICAgICAgJyAgICA8L3NlcnZlcj4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsaW5lcy5wdXNoKFxuICAgICAgJyAgPC9zZXJ2ZXJzPicsXG4gICAgICAnPC9zZXR0aW5ncz4nLFxuICAgICk7XG5cbiAgICBhd2FpdCBmcy53cml0ZUZpbGUodGhpcy5zZXR0aW5nc0ZpbGUsIGxpbmVzLmpvaW4oJ1xcbicpLCAndXRmLTgnKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBleGVjKG1vam86IHN0cmluZywgb3B0aW9uczogTWF2ZW5FeGVjT3B0aW9ucyk6IFByb21pc2U8UHJvY2Vzc091dHB1dCB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGFyZ3MgPSBbXG4gICAgICBgLS1zZXR0aW5ncz0ke3RoaXMuc2V0dGluZ3NGaWxlfWAsXG4gICAgICAnLS1iYXRjaC1tb2RlJyxcbiAgICAgIC4uLihvcHRpb25zLnZlcmJvc2UgPz8gdGhpcy52ZXJib3NlID8gWyctWCddIDogW10pLFxuICAgICAgbW9qbyxcbiAgICAgIC4uLk9iamVjdC5lbnRyaWVzKG9wdGlvbnMucHJvcGVydGllcykubWFwKChbaywgdl0pID0+IGAtRCR7a309JHt2fWApLFxuICAgIF07XG5cbiAgICBpZiAodGhpcy5kcnlSdW4pIHtcbiAgICAgIGVjaG8oYFtEUlktUlVOXSBtdm4gJHthcmdzLm1hcChxdW90ZSkuam9pbignICcpfWApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZW52ID0ge1xuICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICBKREtfSkFWQV9PUFRJT05TOiBbXG4gICAgICAgIC8vIElmIHdlIGRvbid0IGFkZCB0aGlzLCB3ZSdsbCBnZXQgYW4gZXJyb3IgbGlrZSB0aGUgZm9sbG93aW5nIGR1cmluZyB0aGUgbmV4dXMtc3RhZ2luZy1tYXZlbi1wbHVnaW46cmMtcmVsZWFzZSBtb2pvLlxuICAgICAgICAvLyBEb24ndCBrbm93IHdoZXJlIHRoaXMgaXMgY29taW5nIGZyb20gYWxsIG9mIGEgc3VkZGVuLlxuICAgICAgICAvL1xuICAgICAgICAvLyBbRVJST1JdIG1lc3NhZ2UgICAgICAgICAgICAgOiBObyBjb252ZXJ0ZXIgYXZhaWxhYmxlXG4gICAgICAgIC8vIFtFUlJPUl0gdHlwZSAgICAgICAgICAgICAgICA6IGphdmEudXRpbC5BcnJheXMkQXJyYXlMaXN0XG4gICAgICAgIC8vIFtFUlJPUl0gY29udmVydGVyICAgICAgICAgICA6IGNvbS50aG91Z2h0d29ya3MueHN0cmVhbS5jb252ZXJ0ZXJzLnJlZmxlY3Rpb24uUmVmbGVjdGlvbkNvbnZlcnRlclxuICAgICAgICAvLyBbRVJST1JdIG1lc3NhZ2VbMV0gICAgICAgICAgOiBVbmFibGUgdG8gbWFrZSBmaWVsZCBwcm90ZWN0ZWQgdHJhbnNpZW50IGludCBqYXZhLnV0aWwuQWJzdHJhY3RMaXN0Lm1vZENvdW50IGFjY2Vzc2libGU6IG1vZHVsZSBqYXZhLmJhc2UgZG9lcyBub3QgXCJvcGVucyBqYXZhLnV0aWxcIiB0byB1bm5hbWVkIG1vZHVsZSBAN2M4ZDUzMTJcbiAgICAgICAgJy0tYWRkLW9wZW5zPWphdmEuYmFzZS9qYXZhLnV0aWw9QUxMLVVOTkFNRUQnLFxuICAgICAgICAnLS1hZGQtb3BlbnM9amF2YS5iYXNlL2phdmEubGFuZz1BTEwtVU5OQU1FRCcsXG4gICAgICAgICctLWFkZC1vcGVucz1qYXZhLmJhc2UvamF2YS5sYW5nLmludm9rZT1BTEwtVU5OQU1FRCcsXG4gICAgICBdLmpvaW4oJyAnKSxcbiAgICB9O1xuXG4gICAgcmV0dXJuICQoeyB2ZXJib3NlOiB0cnVlLCBub3Rocm93OiBvcHRpb25zLm5vdGhyb3csIGVudiB9KWBtdm4gJHthcmdzfWA7XG4gIH1cbn1cblxuaW50ZXJmYWNlIE1hdmVuRXhlY09wdGlvbnMge1xuICBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBub3Rocm93PzogYm9vbGVhbjtcbiAgdmVyYm9zZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBleHBlY3RlZCBlcnJvciB0aGF0IGRvZXNuJ3QgbmVlZCBhIHN0YWNrIHRyYWNlXG4gKi9cbmNsYXNzIFNpbXBsZUVycm9yIGV4dGVuZHMgRXJyb3IgeyB9XG5cbi8qKlxuICogUmVxdWlyZSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZVxuICovXG5mdW5jdGlvbiBlbnZWYXIobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmV0ID0gcHJvY2Vzcy5lbnZbbmFtZV07XG4gIGlmICghcmV0KSB7XG4gICAgdGhyb3cgbmV3IFNpbXBsZUVycm9yKGAke25hbWV9IGlzIHJlcXVpcmVkYCk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBBIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhhdCBjbGVhbnMgd2hlbiBpdCBnb2VzIG91dCBvZiBzY29wZVxuICpcbiAqIFVzZSB3aXRoIGB1c2luZ2AuIENvdWxkIGhhdmUgYmVlbiBhc3luYyBidXQgaXQncyBkZXBlbmRpbmdcbiAqIG9uIGFuIGFscmVhZHktc3luYyBBUEksIHNvIHdoeSBub3Qgc3luYz9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF1dG9DbGVhbkRpcigpIHtcbiAgY29uc3QgZGlyID0gdG1wZGlyKCk7XG4gIHJldHVybiB7XG4gICAgZGlyLFxuICAgIFtTeW1ib2wuYXN5bmNEaXNwb3NlXTogYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgZnMucm0oZGlyLCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0TmV2ZXIodmFsdWU6IG5ldmVyKSB7XG4gIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCB2YWx1ZTogJyArIHZhbHVlKTtcbn1cblxuLy8gQSAnengnIHByaW1lclxuLy9cbi8vIC0gQnkgZGVmYXVsdDogc3RkZXJyIGlzIHByaW50ZWQgdG8gdGhlIHRlcm1pbmFsIGlmIGl0IGlzIGNhcHR1cmVkLlxuLy8gLSB7IHZlcmJvc2U6IHRydWUgfTogcHJpbnQgdGhlIGNvbW1hbmQsIHN0ZG91dCBhbmQgc3RkZXJyIHRvIHRoZSB0ZXJtaW5hbFxuLy8gLSB7IHF1aWV0OiB0cnVlIH06IHByaW50IG5laXRoZXIgc3Rkb3V0IG5vciBzdGRlcnJcbi8vXG4vLyAudGV4dCgpOiByZXR1cm4gZXZlcnl0aGluZyB0aGF0J3MgY2FwdHVyZWQgKHN0ZGVyciBhbmQgc3Rkb3V0IHRvZ2V0aGVyIGlmIHN0ZGVyciBpcyBjYXB0dXJlZClcblxubWFpbigpLmNhdGNoKGUgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIFByb2Nlc3NPdXRwdXQpIHtcbiAgICBlY2hvKGDinYwgU3VicHJvY2VzcyBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJHtlLmV4aXRDb2RlfWApO1xuICB9IGVsc2UgaWYgKGUgaW5zdGFuY2VvZiBTaW1wbGVFcnJvcikge1xuICAgIGVjaG8oJ+KdjCcsIGUubWVzc2FnZSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5lcnJvcihlKTtcbiAgfVxuICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbn0pO1xuIl19
package/package.json CHANGED
@@ -53,7 +53,7 @@
53
53
  "organization": true
54
54
  },
55
55
  "devDependencies": {
56
- "@aws-sdk/client-sts": "^3.821.0",
56
+ "@aws-sdk/client-sts": "^3.823.0",
57
57
  "@stylistic/eslint-plugin": "^2",
58
58
  "@types/glob": "^8.1.0",
59
59
  "@types/jest": "^27.5.2",
@@ -61,7 +61,7 @@
61
61
  "@types/yargs": "^17",
62
62
  "@typescript-eslint/eslint-plugin": "^8",
63
63
  "@typescript-eslint/parser": "^8",
64
- "cdklabs-projen-project-types": "^0.1.204",
64
+ "cdklabs-projen-project-types": "^0.3.1",
65
65
  "commit-and-tag-version": "^12",
66
66
  "constructs": "^10.0.0",
67
67
  "eslint": "^9",
@@ -69,14 +69,14 @@
69
69
  "eslint-plugin-import": "^2.31.0",
70
70
  "jest": "^27.5.1",
71
71
  "jest-junit": "^16",
72
- "projen": "^0.92.6",
72
+ "projen": "^0.92.9",
73
73
  "ts-jest": "^27.1.5",
74
74
  "ts-node": "^10.9.2",
75
75
  "typescript": "~5.7"
76
76
  },
77
77
  "dependencies": {
78
- "@aws-sdk/client-codeartifact": "^3.821.0",
79
- "@aws-sdk/credential-providers": "^3.821.0",
78
+ "@aws-sdk/client-codeartifact": "^3.826.0",
79
+ "@aws-sdk/credential-providers": "^3.826.0",
80
80
  "@aws-sdk/types": "^3.821.0",
81
81
  "@types/fs-extra": "^8.0.0",
82
82
  "fs-extra": "^8.0.0",
@@ -84,7 +84,7 @@
84
84
  "p-queue": "6",
85
85
  "shlex": "^2.1.2",
86
86
  "yargs": "^17",
87
- "zx": "^8.5.4"
87
+ "zx": "^8.5.5"
88
88
  },
89
89
  "main": "lib/index.js",
90
90
  "license": "Apache-2.0",
@@ -92,7 +92,7 @@
92
92
  "publishConfig": {
93
93
  "access": "public"
94
94
  },
95
- "version": "0.2.996",
95
+ "version": "0.2.998",
96
96
  "jest": {
97
97
  "coverageProvider": "v8",
98
98
  "testMatch": [
package/package.json.bak CHANGED
@@ -53,7 +53,7 @@
53
53
  "organization": true
54
54
  },
55
55
  "devDependencies": {
56
- "@aws-sdk/client-sts": "^3.821.0",
56
+ "@aws-sdk/client-sts": "^3.823.0",
57
57
  "@stylistic/eslint-plugin": "^2",
58
58
  "@types/glob": "^8.1.0",
59
59
  "@types/jest": "^27.5.2",
@@ -61,7 +61,7 @@
61
61
  "@types/yargs": "^17",
62
62
  "@typescript-eslint/eslint-plugin": "^8",
63
63
  "@typescript-eslint/parser": "^8",
64
- "cdklabs-projen-project-types": "^0.1.204",
64
+ "cdklabs-projen-project-types": "^0.3.1",
65
65
  "commit-and-tag-version": "^12",
66
66
  "constructs": "^10.0.0",
67
67
  "eslint": "^9",
@@ -69,14 +69,14 @@
69
69
  "eslint-plugin-import": "^2.31.0",
70
70
  "jest": "^27.5.1",
71
71
  "jest-junit": "^16",
72
- "projen": "^0.92.6",
72
+ "projen": "^0.92.9",
73
73
  "ts-jest": "^27.1.5",
74
74
  "ts-node": "^10.9.2",
75
75
  "typescript": "~5.7"
76
76
  },
77
77
  "dependencies": {
78
- "@aws-sdk/client-codeartifact": "^3.821.0",
79
- "@aws-sdk/credential-providers": "^3.821.0",
78
+ "@aws-sdk/client-codeartifact": "^3.826.0",
79
+ "@aws-sdk/credential-providers": "^3.826.0",
80
80
  "@aws-sdk/types": "^3.821.0",
81
81
  "@types/fs-extra": "^8.0.0",
82
82
  "fs-extra": "^8.0.0",
@@ -84,7 +84,7 @@
84
84
  "p-queue": "6",
85
85
  "shlex": "^2.1.2",
86
86
  "yargs": "^17",
87
- "zx": "^8.5.4"
87
+ "zx": "^8.5.5"
88
88
  },
89
89
  "main": "lib/index.js",
90
90
  "license": "Apache-2.0",
@@ -92,7 +92,7 @@
92
92
  "publishConfig": {
93
93
  "access": "public"
94
94
  },
95
- "version": "0.2.996",
95
+ "version": "0.2.998",
96
96
  "jest": {
97
97
  "coverageProvider": "v8",
98
98
  "testMatch": [