@dollhousemcp/mcp-server 1.8.0 → 1.9.0

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.
Files changed (56) hide show
  1. package/CHANGELOG.md +118 -0
  2. package/README.github.md +126 -8
  3. package/README.md +1 -1
  4. package/README.md.backup +50 -795
  5. package/README.npm.md +1 -1
  6. package/dist/collection/CollectionBrowser.d.ts.map +1 -1
  7. package/dist/collection/CollectionBrowser.js +6 -5
  8. package/dist/config/ConfigWizardDisplay.d.ts +64 -0
  9. package/dist/config/ConfigWizardDisplay.d.ts.map +1 -0
  10. package/dist/config/ConfigWizardDisplay.js +150 -0
  11. package/dist/config/WizardFirstResponse.d.ts +25 -0
  12. package/dist/config/WizardFirstResponse.d.ts.map +1 -0
  13. package/dist/config/WizardFirstResponse.js +118 -0
  14. package/dist/elements/memories/Memory.d.ts +190 -0
  15. package/dist/elements/memories/Memory.d.ts.map +1 -0
  16. package/dist/elements/memories/Memory.js +627 -0
  17. package/dist/elements/memories/MemoryManager.d.ts +136 -0
  18. package/dist/elements/memories/MemoryManager.d.ts.map +1 -0
  19. package/dist/elements/memories/MemoryManager.js +607 -0
  20. package/dist/elements/memories/MemorySearchIndex.d.ts +156 -0
  21. package/dist/elements/memories/MemorySearchIndex.d.ts.map +1 -0
  22. package/dist/elements/memories/MemorySearchIndex.js +690 -0
  23. package/dist/elements/memories/constants.d.ts +95 -0
  24. package/dist/elements/memories/constants.d.ts.map +1 -0
  25. package/dist/elements/memories/constants.js +102 -0
  26. package/dist/elements/memories/index.d.ts +7 -0
  27. package/dist/elements/memories/index.d.ts.map +1 -0
  28. package/dist/elements/memories/index.js +7 -0
  29. package/dist/elements/memories/utils.d.ts +68 -0
  30. package/dist/elements/memories/utils.d.ts.map +1 -0
  31. package/dist/elements/memories/utils.js +137 -0
  32. package/dist/generated/version.d.ts +2 -2
  33. package/dist/generated/version.js +3 -3
  34. package/dist/scripts/scripts/run-config-wizard.js +57 -0
  35. package/dist/scripts/src/config/ConfigManager.js +799 -0
  36. package/dist/scripts/src/config/ConfigWizard.js +368 -0
  37. package/dist/scripts/src/errors/SecurityError.js +47 -0
  38. package/dist/scripts/src/security/constants.js +28 -0
  39. package/dist/scripts/src/security/contentValidator.js +415 -0
  40. package/dist/scripts/src/security/errors.js +32 -0
  41. package/dist/scripts/src/security/regexValidator.js +217 -0
  42. package/dist/scripts/src/security/secureYamlParser.js +272 -0
  43. package/dist/scripts/src/security/securityMonitor.js +111 -0
  44. package/dist/scripts/src/security/validators/unicodeValidator.js +315 -0
  45. package/dist/scripts/src/utils/logger.js +288 -0
  46. package/dist/security/audit/SecurityAuditor.d.ts.map +1 -1
  47. package/dist/security/audit/SecurityAuditor.js +24 -2
  48. package/dist/security/audit/config/suppressions.d.ts.map +1 -1
  49. package/dist/security/audit/config/suppressions.js +91 -1
  50. package/dist/security/securityMonitor.d.ts +1 -1
  51. package/dist/security/securityMonitor.d.ts.map +1 -1
  52. package/dist/security/securityMonitor.js +1 -1
  53. package/dist/tools/getWelcomeMessage.d.ts +41 -0
  54. package/dist/tools/getWelcomeMessage.d.ts.map +1 -0
  55. package/dist/tools/getWelcomeMessage.js +109 -0
  56. package/package.json +1 -1
@@ -244,6 +244,27 @@ export class SecurityAuditor {
244
244
  * Get default configuration
245
245
  */
246
246
  static getDefaultConfig() {
247
+ // Load suppressions from file if it exists
248
+ let customSuppressions = [];
249
+ try {
250
+ const fs = require('fs');
251
+ const path = require('path');
252
+ const projectRoot = process.cwd();
253
+ const suppressionsPath = path.join(projectRoot, '.security-suppressions.json');
254
+ if (fs.existsSync(suppressionsPath)) {
255
+ const suppressionsContent = fs.readFileSync(suppressionsPath, 'utf-8');
256
+ const suppressionsData = JSON.parse(suppressionsContent);
257
+ // Convert relative paths to patterns for matching
258
+ customSuppressions = (suppressionsData.suppressions || []).map((s) => ({
259
+ ...s,
260
+ // Convert file path to a pattern that works with minimatch
261
+ file: s.file?.includes('/') ? `**/${s.file}` : s.file
262
+ }));
263
+ }
264
+ }
265
+ catch (error) {
266
+ // Suppressions file doesn't exist or is invalid - that's OK
267
+ }
247
268
  return {
248
269
  enabled: true,
249
270
  scanners: {
@@ -274,9 +295,10 @@ export class SecurityAuditor {
274
295
  rule: 'SEC-TEST-001',
275
296
  file: '__tests__/**/*',
276
297
  reason: 'Test files may contain security test patterns'
277
- }
298
+ },
299
+ ...customSuppressions
278
300
  ]
279
301
  };
280
302
  }
281
303
  }
282
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VjdXJpdHlBdWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlY3VyaXR5L2F1ZGl0L1NlY3VyaXR5QXVkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCwyREFBMkQ7QUFDM0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBUy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFpQixNQUFNLDZCQUE2QixDQUFDO0FBRTFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU3QixNQUFNLE9BQU8sZUFBZTtJQUNsQixNQUFNLENBQXNCO0lBQzVCLFFBQVEsR0FBc0IsRUFBRSxDQUFDO0lBQ2pDLFlBQVksR0FBNkIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUUzRCxZQUFZLE1BQTJCO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNLLGtCQUFrQjtRQUN4QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFP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QUFVLENBQUM7aUJBQzFFO2dCQUNELGFBQWEsRUFBRTtvQkFDYixPQUFPLEVBQUUsSUFBSTtvQkFDYixVQUFVLEVBQUUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUM7aUJBQzFEO2FBQ0Y7WUFDRCxTQUFTLEVBQUU7Z0JBQ1QsT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQztnQkFDaEMsWUFBWSxFQUFFLElBQUk7Z0JBQ2xCLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixjQUFjLEVBQUUsTUFBTTthQUN2QjtZQUNELFlBQVksRUFBRTtnQkFDWjtvQkFDRSxJQUFJLEVBQUUsY0FBYztvQkFDcEIsSUFBSSxFQUFFLGdCQUFnQjtvQkFDdEIsTUFBTSxFQUFFLCtDQUErQztpQkFDeEQ7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlY3VyaXR5IEF1ZGl0b3IgLSBDb3JlIG9yY2hlc3RyYXRvciBmb3Igc2VjdXJpdHkgc2Nhbm5pbmdcbiAqIEltcGxlbWVudHMgYXV0b21hdGVkIHNlY3VyaXR5IGF1ZGl0aW5nIGZvciBEb2xsaG91c2VNQ1AgKElzc3VlICM1MylcbiAqL1xuXG4vLyBpbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB0eXBlIHsgXG4gIFNlY3VyaXR5QXVkaXRDb25maWcsIFxuICBTY2FuQ29udGV4dCwgXG4gIFNjYW5SZXN1bHQsIFxuICBTZWN1cml0eUZpbmRpbmcsIFxuICBTZWN1cml0eVNjYW5uZXIsXG4gIFNldmVyaXR5TGV2ZWwgXG59IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgQ29kZVNjYW5uZXIgfSBmcm9tICcuL3NjYW5uZXJzL0NvZGVTY2FubmVyLmpzJztcbmltcG9ydCB7IERlcGVuZGVuY3lTY2FubmVyIH0gZnJvbSAnLi9zY2FubmVycy9EZXBlbmRlbmN5U2Nhbm5lci5qcyc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uU2Nhbm5lciB9IGZyb20gJy4vc2Nhbm5lcnMvQ29uZmlndXJhdGlvblNjYW5uZXIuanMnO1xuaW1wb3J0IHsgQ29uc29sZVJlcG9ydGVyIH0gZnJvbSAnLi9yZXBvcnRlcnMvQ29uc29sZVJlcG9ydGVyLmpzJztcbmltcG9ydCB7IE1hcmtkb3duUmVwb3J0ZXIgfSBmcm9tICcuL3JlcG9ydGVycy9NYXJrZG93blJlcG9ydGVyLmpzJztcbmltcG9ydCB7IEpzb25SZXBvcnRlciB9IGZyb20gJy4vcmVwb3J0ZXJzL0pzb25SZXBvcnRlci5qcyc7XG5pbXBvcnQgeyBzaG91bGRTdXBwcmVzcyB9IGZyb20gJy4vY29uZmlnL3N1cHByZXNzaW9ucy5qcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXIsIEVycm9yQ2F0ZWdvcnkgfSBmcm9tICcuLi8uLi91dGlscy9FcnJvckhhbmRsZXIuanMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuXG5leHBvcnQgY2xhc3MgU2VjdXJpdHlBdWRpdG9yIHtcbiAgcHJpdmF0ZSBjb25maWc6IFNlY3VyaXR5QXVkaXRDb25maWc7XG4gIHByaXZhdGUgc2Nhbm5lcnM6IFNlY3VyaXR5U2Nhbm5lcltdID0gW107XG4gIHByaXZhdGUgc3VwcHJlc3Npb25zOiBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4gPSBuZXcgTWFwKCk7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBTZWN1cml0eUF1ZGl0Q29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5pbml0aWFsaXplU2Nhbm5lcnMoKTtcbiAgICB0aGlzLmxvYWRTdXBwcmVzc2lvbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGVuYWJsZWQgc2Nhbm5lcnMgYmFzZWQgb24gY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplU2Nhbm5lcnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlnLnNjYW5uZXJzLmNvZGUuZW5hYmxlZCkge1xuICAgICAgdGhpcy5zY2FubmVycy5wdXNoKG5ldyBDb2RlU2Nhbm5lcih0aGlzLmNvbmZpZy5zY2FubmVycy5jb2RlKSk7XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLmNvbmZpZy5zY2FubmVycy5kZXBlbmRlbmNpZXMuZW5hYmxlZCkge1xuICAgICAgdGhpcy5zY2FubmVycy5wdXNoKG5ldyBEZXBlbmRlbmN5U2Nhbm5lcih0aGlzLmNvbmZpZy5zY2FubmVycy5kZXBlbmRlbmNpZXMpKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHRoaXMuY29uZmlnLnNjYW5uZXJzLmNvbmZpZ3VyYXRpb24uZW5hYmxlZCkge1xuICAgICAgdGhpcy5zY2FubmVycy5wdXNoKG5ldyBDb25maWd1cmF0aW9uU2Nhbm5lcih0aGlzLmNvbmZpZy5zY2FubmVycy5jb25maWd1cmF0aW9uKSk7XG4gICAgfVxuXG4gICAgLy8gQXVkaXQgbG9nZ2luZyB3b3VsZCBnbyBoZXJlIGlmIFNlY3VyaXR5TW9uaXRvciBzdXBwb3J0ZWQgYXVkaXQgZXZlbnRzXG4gICAgbG9nZ2VyLmluZm8oYFNlY3VyaXR5QXVkaXRvcjogSW5pdGlhbGl6ZWQgJHt0aGlzLnNjYW5uZXJzLmxlbmd0aH0gc2VjdXJpdHkgc2Nhbm5lcnNgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHN1cHByZXNzaW9uIHJ1bGVzIGZyb20gY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBsb2FkU3VwcHJlc3Npb25zKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb25maWcuc3VwcHJlc3Npb25zKSByZXR1cm47XG5cbiAgICBmb3IgKGNvbnN0IHN1cHByZXNzaW9uIG9mIHRoaXMuY29uZmlnLnN1cHByZXNzaW9ucykge1xuICAgICAgY29uc3Qga2V5ID0gc3VwcHJlc3Npb24uZmlsZSB8fCAnKic7XG4gICAgICBpZiAoIXRoaXMuc3VwcHJlc3Npb25zLmhhcyhrZXkpKSB7XG4gICAgICAgIHRoaXMuc3VwcHJlc3Npb25zLnNldChrZXksIG5ldyBTZXQoKSk7XG4gICAgICB9XG4gICAgICB0aGlzLnN1cHByZXNzaW9ucy5nZXQoa2V5KSEuYWRkKHN1cHByZXNzaW9uLnJ1bGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gc2VjdXJpdHkgYXVkaXQgb24gdGhlIHByb2plY3RcbiAgICovXG4gIGFzeW5jIGF1ZGl0KHByb2plY3RSb290OiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpKTogUHJvbWlzZTxTY2FuUmVzdWx0PiB7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBjb250ZXh0OiBTY2FuQ29udGV4dCA9IHsgcHJvamVjdFJvb3QgfTtcbiAgICBjb25zdCBhbGxGaW5kaW5nczogU2VjdXJpdHlGaW5kaW5nW10gPSBbXTtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3Qgc2Nhbm5lZEZpbGVzU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBsb2dnZXIuaW5mbyhgU2VjdXJpdHlBdWRpdG9yOiBTdGFydGluZyBzZWN1cml0eSBhdWRpdCBvZiAke3Byb2plY3RSb290fWApO1xuXG4gICAgLy8gUnVuIGFsbCBlbmFibGVkIHNjYW5uZXJzXG4gICAgZm9yIChjb25zdCBzY2FubmVyIG9mIHRoaXMuc2Nhbm5lcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZpbmRpbmdzID0gYXdhaXQgc2Nhbm5lci5zY2FuKGNvbnRleHQpO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZEZpbmRpbmdzID0gdGhpcy5maWx0ZXJTdXBwcmVzc2lvbnMoZmluZGluZ3MpO1xuICAgICAgICBhbGxGaW5kaW5ncy5wdXNoKC4uLmZpbHRlcmVkRmluZGluZ3MpO1xuICAgICAgICAvLyBUcmFjayB1bmlxdWUgZmlsZXMgdGhhdCB3ZXJlIHNjYW5uZWRcbiAgICAgICAgZm9yIChjb25zdCBmaW5kaW5nIG9mIGZpbmRpbmdzKSB7XG4gICAgICAgICAgaWYgKGZpbmRpbmcuZmlsZSkge1xuICAgICAgICAgICAgc2Nhbm5lZEZpbGVzU2V0LmFkZChmaW5kaW5nLmZpbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYFNjYW5uZXIgJHtzY2FubmVyLm5hbWV9IGZhaWxlZDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YDtcbiAgICAgICAgZXJyb3JzLnB1c2goZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdTZWN1cml0eUF1ZGl0b3IuYXVkaXRQcm9qZWN0JywgZXJyb3IsIHsgcHJvamVjdFJvb3QgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY3JlYXRlU2NhblJlc3VsdChhbGxGaW5kaW5ncywgZHVyYXRpb24sIHNjYW5uZWRGaWxlc1NldC5zaXplLCBlcnJvcnMpO1xuXG4gICAgLy8gTG9nIGF1ZGl0IGNvbXBsZXRpb25cbiAgICBsb2dnZXIuaW5mbyhgU2VjdXJpdHlBdWRpdG9yOiBBdWRpdCBjb21wbGV0ZWQ6ICR7cmVzdWx0LnN1bW1hcnkudG90YWx9IGZpbmRpbmdzIGluICR7ZHVyYXRpb259bXNgKTtcblxuICAgIC8vIEdlbmVyYXRlIHJlcG9ydHNcbiAgICBhd2FpdCB0aGlzLmdlbmVyYXRlUmVwb3J0cyhyZXN1bHQpO1xuXG4gICAgLy8gQ2hlY2sgaWYgYnVpbGQgc2hvdWxkIGZhaWxcbiAgICBpZiAodGhpcy5zaG91bGRGYWlsQnVpbGQocmVzdWx0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZWN1cml0eSBhdWRpdCBmYWlsZWQ6ICR7cmVzdWx0LnN1bW1hcnkuYnlTZXZlcml0eS5jcml0aWNhbH0gY3JpdGljYWwsICR7cmVzdWx0LnN1bW1hcnkuYnlTZXZlcml0eS5oaWdofSBoaWdoIHNldmVyaXR5IGlzc3VlcyBmb3VuZGApO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIG91dCBzdXBwcmVzc2VkIGZpbmRpbmdzXG4gICAqL1xuICBwcml2YXRlIGZpbHRlclN1cHByZXNzaW9ucyhmaW5kaW5nczogU2VjdXJpdHlGaW5kaW5nW10pOiBTZWN1cml0eUZpbmRpbmdbXSB7XG4gICAgY29uc3Qgc3VwcHJlc3NlZEZpbmRpbmdzOiBBcnJheTx7cnVsZTogc3RyaW5nOyBmaWxlPzogc3RyaW5nOyByZWFzb24/OiBzdHJpbmd9PiA9IFtdO1xuICAgIFxuICAgIGNvbnN0IGZpbHRlcmVkID0gZmluZGluZ3MuZmlsdGVyKGZpbmRpbmcgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gQ2hlY2sgY29tcHJlaGVuc2l2ZSBzdXBwcmVzc2lvbnMgKGluY2x1ZGVzIGJvdGggZmlsZS1iYXNlZCBhbmQgcGF0dGVybi1iYXNlZClcbiAgICAgICAgaWYgKHNob3VsZFN1cHByZXNzKGZpbmRpbmcucnVsZUlkLCBmaW5kaW5nLmZpbGUpKSB7XG4gICAgICAgICAgLy8gTG9nIHN1cHByZXNzaW9uIGZvciBhdWRpdCB0cmFpbCBpZiB2ZXJib3NlIG1vZGUgaXMgZW5hYmxlZFxuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5yZXBvcnRpbmc/LnZlcmJvc2UpIHtcbiAgICAgICAgICAgIHN1cHByZXNzZWRGaW5kaW5ncy5wdXNoKHtcbiAgICAgICAgICAgICAgcnVsZTogZmluZGluZy5ydWxlSWQsXG4gICAgICAgICAgICAgIGZpbGU6IGZpbmRpbmcuZmlsZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgbGVnYWN5IGNvbmZpZy1iYXNlZCBzdXBwcmVzc2lvbnMgaWYgdGhleSBleGlzdFxuICAgICAgICAvLyBUaGlzIG1haW50YWlucyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggZXhpc3RpbmcgY29uZmlnc1xuICAgICAgICBpZiAodGhpcy5jb25maWcuc3VwcHJlc3Npb25zICYmIHRoaXMuY29uZmlnLnN1cHByZXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgZ2xvYmFsU3VwcHJlc3Npb25zID0gdGhpcy5zdXBwcmVzc2lvbnMuZ2V0KCcqJyk7XG4gICAgICAgICAgaWYgKGdsb2JhbFN1cHByZXNzaW9ucz8uaGFzKGZpbmRpbmcucnVsZUlkKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLnJlcG9ydGluZz8udmVyYm9zZSkge1xuICAgICAgICAgICAgICBzdXBwcmVzc2VkRmluZGluZ3MucHVzaCh7XG4gICAgICAgICAgICAgICAgcnVsZTogZmluZGluZy5ydWxlSWQsXG4gICAgICAgICAgICAgICAgZmlsZTogZmluZGluZy5maWxlLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogJ0NvbmZpZy1iYXNlZCBnbG9iYWwgc3VwcHJlc3Npb24nXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaW5kaW5nLmZpbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVTdXBwcmVzc2lvbnMgPSB0aGlzLnN1cHByZXNzaW9ucy5nZXQoZmluZGluZy5maWxlKTtcbiAgICAgICAgICAgIGlmIChmaWxlU3VwcHJlc3Npb25zPy5oYXMoZmluZGluZy5ydWxlSWQpKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5yZXBvcnRpbmc/LnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBzdXBwcmVzc2VkRmluZGluZ3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICBydWxlOiBmaW5kaW5nLnJ1bGVJZCxcbiAgICAgICAgICAgICAgICAgIGZpbGU6IGZpbmRpbmcuZmlsZSxcbiAgICAgICAgICAgICAgICAgIHJlYXNvbjogJ0NvbmZpZy1iYXNlZCBmaWxlIHN1cHByZXNzaW9uJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIHN1cHByZXNzaW9uIGNoZWNrIGZhaWxzLCBsb2cgZXJyb3IgYnV0IGRvbid0IHN1cHByZXNzIHRoZSBmaW5kaW5nXG4gICAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignU2VjdXJpdHlBdWRpdG9yLmFwcGx5U3VwcHJlc3Npb24nLCBlcnJvciwgeyBcbiAgICAgICAgICBydWxlSWQ6IGZpbmRpbmcucnVsZUlkLCBcbiAgICAgICAgICBmaWxlOiBmaW5kaW5nLmZpbGUgXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvLyBMb2cgc3VwcHJlc3Npb24gc3VtbWFyeSBpZiB2ZXJib3NlIGFuZCBzdXBwcmVzc2lvbnMgd2VyZSBhcHBsaWVkXG4gICAgaWYgKHRoaXMuY29uZmlnLnJlcG9ydGluZz8udmVyYm9zZSAmJiBzdXBwcmVzc2VkRmluZGluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBTZWN1cml0eUF1ZGl0b3I6IFN1cHByZXNzZWQgJHtzdXBwcmVzc2VkRmluZGluZ3MubGVuZ3RofSBmaW5kaW5nczpgKTtcbiAgICAgIHN1cHByZXNzZWRGaW5kaW5ncy5mb3JFYWNoKHMgPT4ge1xuICAgICAgICBsb2dnZXIuZGVidWcoYCAgLSAke3MucnVsZX0gaW4gJHtzLmZpbGUgfHwgJ2dsb2JhbCd9JHtzLnJlYXNvbiA/IGAgKCR7cy5yZWFzb259KWAgOiAnJ31gKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gZmlsdGVyZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHNjYW4gcmVzdWx0IHN1bW1hcnlcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlU2NhblJlc3VsdChcbiAgICBmaW5kaW5nczogU2VjdXJpdHlGaW5kaW5nW10sIFxuICAgIGR1cmF0aW9uOiBudW1iZXIsIFxuICAgIHNjYW5uZWRGaWxlczogbnVtYmVyLFxuICAgIGVycm9yczogc3RyaW5nW11cbiAgKTogU2NhblJlc3VsdCB7XG4gICAgY29uc3QgYnlTZXZlcml0eTogUmVjb3JkPFNldmVyaXR5TGV2ZWwsIG51bWJlcj4gPSB7XG4gICAgICBpbmZvOiAwLFxuICAgICAgbG93OiAwLFxuICAgICAgbWVkaXVtOiAwLFxuICAgICAgaGlnaDogMCxcbiAgICAgIGNyaXRpY2FsOiAwXG4gICAgfTtcblxuICAgIGNvbnN0IGJ5Q2F0ZWdvcnk6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcblxuICAgIGZvciAoY29uc3QgZmluZGluZyBvZiBmaW5kaW5ncykge1xuICAgICAgYnlTZXZlcml0eVtmaW5kaW5nLnNldmVyaXR5XSsrO1xuICAgICAgXG4gICAgICAvLyBFeHRyYWN0IGNhdGVnb3J5IGZyb20gcnVsZUlkIChlLmcuLCBTRUMtQ09ERS0wMDEgLT4gQ09ERSlcbiAgICAgIGNvbnN0IGNhdGVnb3J5ID0gZmluZGluZy5ydWxlSWQuc3BsaXQoJy0nKVsxXSB8fCAnT1RIRVInO1xuICAgICAgYnlDYXRlZ29yeVtjYXRlZ29yeV0gPSAoYnlDYXRlZ29yeVtjYXRlZ29yeV0gfHwgMCkgKyAxO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCksXG4gICAgICBkdXJhdGlvbixcbiAgICAgIHNjYW5uZWRGaWxlcyxcbiAgICAgIGZpbmRpbmdzLFxuICAgICAgc3VtbWFyeToge1xuICAgICAgICB0b3RhbDogZmluZGluZ3MubGVuZ3RoLFxuICAgICAgICBieVNldmVyaXR5LFxuICAgICAgICBieUNhdGVnb3J5XG4gICAgICB9LFxuICAgICAgZXJyb3JzOiBlcnJvcnMubGVuZ3RoID4gMCA/IGVycm9ycyA6IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgcmVwb3J0cyBpbiBjb25maWd1cmVkIGZvcm1hdHNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2VuZXJhdGVSZXBvcnRzKHJlc3VsdDogU2NhblJlc3VsdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgZm9ybWF0IG9mIHRoaXMuY29uZmlnLnJlcG9ydGluZy5mb3JtYXRzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgIGNhc2UgJ2NvbnNvbGUnOlxuICAgICAgICAgICAgY29uc3QgY29uc29sZVJlcG9ydGVyID0gbmV3IENvbnNvbGVSZXBvcnRlcihyZXN1bHQpO1xuICAgICAgICAgICAgLy8gQ29uc29sZSByZXBvcnRlciBvdXRwdXQgaXMgbWVhbnQgdG8gYmUgc2hvd24gZGlyZWN0bHkgdG8gdXNlclxuICAgICAgICAgICAgLy8gVXNpbmcgY29uc29sZS5sb2cgaGVyZSBpcyBpbnRlbnRpb25hbCBmb3IgZm9ybWF0dGluZ1xuICAgICAgICAgICAgY29uc29sZS5sb2coY29uc29sZVJlcG9ydGVyLmdlbmVyYXRlKCkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBcbiAgICAgICAgICBjYXNlICdtYXJrZG93bic6XG4gICAgICAgICAgICBjb25zdCBtYXJrZG93blJlcG9ydGVyID0gbmV3IE1hcmtkb3duUmVwb3J0ZXIocmVzdWx0KTtcbiAgICAgICAgICAgIGNvbnN0IG1kUmVwb3J0ID0gbWFya2Rvd25SZXBvcnRlci5nZW5lcmF0ZSgpIGFzIHN0cmluZztcbiAgICAgICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZSgnc2VjdXJpdHktYXVkaXQtcmVwb3J0Lm1kJywgbWRSZXBvcnQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBcbiAgICAgICAgICBjYXNlICdqc29uJzpcbiAgICAgICAgICAgIGNvbnN0IGpzb25SZXBvcnRlciA9IG5ldyBKc29uUmVwb3J0ZXIocmVzdWx0KTtcbiAgICAgICAgICAgIGNvbnN0IGpzb25SZXBvcnQgPSBKU09OLnN0cmluZ2lmeShqc29uUmVwb3J0ZXIuZ2VuZXJhdGUoKSwgbnVsbCwgMik7XG4gICAgICAgICAgICBhd2FpdCBmcy53cml0ZUZpbGUoJ3NlY3VyaXR5LWF1ZGl0LXJlcG9ydC5qc29uJywganNvblJlcG9ydCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIFxuICAgICAgICAgIC8vIFNBUklGIGZvcm1hdCB3b3VsZCBiZSBpbXBsZW1lbnRlZCBzaW1pbGFybHlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdTZWN1cml0eUF1ZGl0b3IuZ2VuZXJhdGVSZXBvcnRzJywgZXJyb3IsIHsgZm9ybWF0IH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgdGhlIGJ1aWxkIHNob3VsZCBmYWlsIGJhc2VkIG9uIGZpbmRpbmdzXG4gICAqL1xuICBwcml2YXRlIHNob3VsZEZhaWxCdWlsZChyZXN1bHQ6IFNjYW5SZXN1bHQpOiBib29sZWFuIHtcbiAgICBjb25zdCB0aHJlc2hvbGRzOiBSZWNvcmQ8U2V2ZXJpdHlMZXZlbCwgbnVtYmVyPiA9IHtcbiAgICAgIGluZm86IDUsXG4gICAgICBsb3c6IDQsXG4gICAgICBtZWRpdW06IDMsXG4gICAgICBoaWdoOiAyLFxuICAgICAgY3JpdGljYWw6IDFcbiAgICB9O1xuXG4gICAgY29uc3QgZmFpbFRocmVzaG9sZCA9IHRocmVzaG9sZHNbdGhpcy5jb25maWcucmVwb3J0aW5nLmZhaWxPblNldmVyaXR5XTtcbiAgICBcbiAgICBmb3IgKGNvbnN0IFtzZXZlcml0eSwgY291bnRdIG9mIE9iamVjdC5lbnRyaWVzKHJlc3VsdC5zdW1tYXJ5LmJ5U2V2ZXJpdHkpKSB7XG4gICAgICBpZiAoY291bnQgPiAwICYmIHRocmVzaG9sZHNbc2V2ZXJpdHkgYXMgU2V2ZXJpdHlMZXZlbF0gPD0gZmFpbFRocmVzaG9sZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRlZmF1bHQgY29uZmlndXJhdGlvblxuICAgKi9cbiAgc3RhdGljIGdldERlZmF1bHRDb25maWcoKTogU2VjdXJpdHlBdWRpdENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBzY2FubmVyczoge1xuICAgICAgICBjb2RlOiB7XG4gICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICBydWxlczogWydPV0FTUC1Ub3AtMTAnLCAnQ1dFLVRvcC0yNScsICdEb2xsaG91c2VNQ1AtU2VjdXJpdHknXSxcbiAgICAgICAgICBleGNsdWRlOiBbJ25vZGVfbW9kdWxlcy8qKicsICdkaXN0LyoqJywgJ2NvdmVyYWdlLyoqJ11cbiAgICAgICAgfSxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiB7XG4gICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICBzZXZlcml0eVRocmVzaG9sZDogJ2hpZ2gnLFxuICAgICAgICAgIGNoZWNrTGljZW5zZXM6IHRydWUsXG4gICAgICAgICAgYWxsb3dlZExpY2Vuc2VzOiBbJ01JVCcsICdBcGFjaGUtMi4wJywgJ0JTRC0zLUNsYXVzZScsICdJU0MnLCAnQUdQTC0zLjAnXVxuICAgICAgICB9LFxuICAgICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICBjaGVja0ZpbGVzOiBbJyoueW1sJywgJyoueWFtbCcsICcqLmpzb24nLCAnLmVudi5leGFtcGxlJ11cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJlcG9ydGluZzoge1xuICAgICAgICBmb3JtYXRzOiBbJ2NvbnNvbGUnLCAnbWFya2Rvd24nXSxcbiAgICAgICAgY3JlYXRlSXNzdWVzOiB0cnVlLFxuICAgICAgICBjb21tZW50T25QcjogdHJ1ZSxcbiAgICAgICAgZmFpbE9uU2V2ZXJpdHk6ICdoaWdoJ1xuICAgICAgfSxcbiAgICAgIHN1cHByZXNzaW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgcnVsZTogJ1NFQy1URVNULTAwMScsXG4gICAgICAgICAgZmlsZTogJ19fdGVzdHNfXy8qKi8qJyxcbiAgICAgICAgICByZWFzb246ICdUZXN0IGZpbGVzIG1heSBjb250YWluIHNlY3VyaXR5IHRlc3QgcGF0dGVybnMnXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICB9XG59Il19
304
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VjdXJpdHlBdWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlY3VyaXR5L2F1ZGl0L1NlY3VyaXR5QXVkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCwyREFBMkQ7QUFDM0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBUy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFpQixNQUFNLDZCQUE2QixDQUFDO0FBRTFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU3QixNQUFNLE9BQU8sZUFBZTtJQUNsQixNQUFNLENBQXNCO0lBQzVCLFFBQVEsR0FBc0IsRUFBRSxDQUFDO0lBQ2pDLFlBQVksR0FBNkIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUUzRCxZQUFZLE1BQTJCO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNLLGtCQUFrQjtRQUN4QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFP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QUFRLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQztpQkFDMUQ7YUFDRjtZQUNELFNBQVMsRUFBRTtnQkFDVCxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDO2dCQUNoQyxZQUFZLEVBQUUsSUFBSTtnQkFDbEIsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLGNBQWMsRUFBRSxNQUFNO2FBQ3ZCO1lBQ0QsWUFBWSxFQUFFO2dCQUNaO29CQUNFLElBQUksRUFBRSxjQUFjO29CQUNwQixJQUFJLEVBQUUsZ0JBQWdCO29CQUN0QixNQUFNLEVBQUUsK0NBQStDO2lCQUN4RDtnQkFDRCxHQUFHLGtCQUFrQjthQUN0QjtTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlY3VyaXR5IEF1ZGl0b3IgLSBDb3JlIG9yY2hlc3RyYXRvciBmb3Igc2VjdXJpdHkgc2Nhbm5pbmdcbiAqIEltcGxlbWVudHMgYXV0b21hdGVkIHNlY3VyaXR5IGF1ZGl0aW5nIGZvciBEb2xsaG91c2VNQ1AgKElzc3VlICM1MylcbiAqL1xuXG4vLyBpbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB0eXBlIHsgXG4gIFNlY3VyaXR5QXVkaXRDb25maWcsIFxuICBTY2FuQ29udGV4dCwgXG4gIFNjYW5SZXN1bHQsIFxuICBTZWN1cml0eUZpbmRpbmcsIFxuICBTZWN1cml0eVNjYW5uZXIsXG4gIFNldmVyaXR5TGV2ZWwgXG59IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgQ29kZVNjYW5uZXIgfSBmcm9tICcuL3NjYW5uZXJzL0NvZGVTY2FubmVyLmpzJztcbmltcG9ydCB7IERlcGVuZGVuY3lTY2FubmVyIH0gZnJvbSAnLi9zY2FubmVycy9EZXBlbmRlbmN5U2Nhbm5lci5qcyc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uU2Nhbm5lciB9IGZyb20gJy4vc2Nhbm5lcnMvQ29uZmlndXJhdGlvblNjYW5uZXIuanMnO1xuaW1wb3J0IHsgQ29uc29sZVJlcG9ydGVyIH0gZnJvbSAnLi9yZXBvcnRlcnMvQ29uc29sZVJlcG9ydGVyLmpzJztcbmltcG9ydCB7IE1hcmtkb3duUmVwb3J0ZXIgfSBmcm9tICcuL3JlcG9ydGVycy9NYXJrZG93blJlcG9ydGVyLmpzJztcbmltcG9ydCB7IEpzb25SZXBvcnRlciB9IGZyb20gJy4vcmVwb3J0ZXJzL0pzb25SZXBvcnRlci5qcyc7XG5pbXBvcnQgeyBzaG91bGRTdXBwcmVzcyB9IGZyb20gJy4vY29uZmlnL3N1cHByZXNzaW9ucy5qcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXIsIEVycm9yQ2F0ZWdvcnkgfSBmcm9tICcuLi8uLi91dGlscy9FcnJvckhhbmRsZXIuanMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuXG5leHBvcnQgY2xhc3MgU2VjdXJpdHlBdWRpdG9yIHtcbiAgcHJpdmF0ZSBjb25maWc6IFNlY3VyaXR5QXVkaXRDb25maWc7XG4gIHByaXZhdGUgc2Nhbm5lcnM6IFNlY3VyaXR5U2Nhbm5lcltdID0gW107XG4gIHByaXZhdGUgc3VwcHJlc3Npb25zOiBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4gPSBuZXcgTWFwKCk7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBTZWN1cml0eUF1ZGl0Q29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5pbml0aWFsaXplU2Nhbm5lcnMoKTtcbiAgICB0aGlzLmxvYWRTdXBwcmVzc2lvbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGVuYWJsZWQgc2Nhbm5lcnMgYmFzZWQgb24gY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplU2Nhbm5lcnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlnLnNjYW5uZXJzLmNvZGUuZW5hYmxlZCkge1xuICAgICAgdGhpcy5zY2FubmVycy5wdXNoKG5ldyBDb2RlU2Nhbm5lcih0aGlzLmNvbmZpZy5zY2FubmVycy5jb2RlKSk7XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLmNvbmZpZy5zY2FubmVycy5kZXBlbmRlbmNpZXMuZW5hYmxlZCkge1xuICAgICAgdGhpcy5zY2FubmVycy5wdXNoKG5ldyBEZXBlbmRlbmN5U2Nhbm5lcih0aGlzLmNvbmZpZy5zY2FubmVycy5kZXBlbmRlbmNpZXMpKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHRoaXMuY29uZmlnLnNjYW5uZXJzLmNvbmZpZ3VyYXRpb24uZW5hYmxlZCkge1xuICAgICAgdGhpcy5zY2FubmVycy5wdXNoKG5ldyBDb25maWd1cmF0aW9uU2Nhbm5lcih0aGlzLmNvbmZpZy5zY2FubmVycy5jb25maWd1cmF0aW9uKSk7XG4gICAgfVxuXG4gICAgLy8gQXVkaXQgbG9nZ2luZyB3b3VsZCBnbyBoZXJlIGlmIFNlY3VyaXR5TW9uaXRvciBzdXBwb3J0ZWQgYXVkaXQgZXZlbnRzXG4gICAgbG9nZ2VyLmluZm8oYFNlY3VyaXR5QXVkaXRvcjogSW5pdGlhbGl6ZWQgJHt0aGlzLnNjYW5uZXJzLmxlbmd0aH0gc2VjdXJpdHkgc2Nhbm5lcnNgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHN1cHByZXNzaW9uIHJ1bGVzIGZyb20gY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBsb2FkU3VwcHJlc3Npb25zKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb25maWcuc3VwcHJlc3Npb25zKSByZXR1cm47XG5cbiAgICBmb3IgKGNvbnN0IHN1cHByZXNzaW9uIG9mIHRoaXMuY29uZmlnLnN1cHByZXNzaW9ucykge1xuICAgICAgY29uc3Qga2V5ID0gc3VwcHJlc3Npb24uZmlsZSB8fCAnKic7XG4gICAgICBpZiAoIXRoaXMuc3VwcHJlc3Npb25zLmhhcyhrZXkpKSB7XG4gICAgICAgIHRoaXMuc3VwcHJlc3Npb25zLnNldChrZXksIG5ldyBTZXQoKSk7XG4gICAgICB9XG4gICAgICB0aGlzLnN1cHByZXNzaW9ucy5nZXQoa2V5KSEuYWRkKHN1cHByZXNzaW9uLnJ1bGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gc2VjdXJpdHkgYXVkaXQgb24gdGhlIHByb2plY3RcbiAgICovXG4gIGFzeW5jIGF1ZGl0KHByb2plY3RSb290OiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpKTogUHJvbWlzZTxTY2FuUmVzdWx0PiB7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBjb250ZXh0OiBTY2FuQ29udGV4dCA9IHsgcHJvamVjdFJvb3QgfTtcbiAgICBjb25zdCBhbGxGaW5kaW5nczogU2VjdXJpdHlGaW5kaW5nW10gPSBbXTtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3Qgc2Nhbm5lZEZpbGVzU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBsb2dnZXIuaW5mbyhgU2VjdXJpdHlBdWRpdG9yOiBTdGFydGluZyBzZWN1cml0eSBhdWRpdCBvZiAke3Byb2plY3RSb290fWApO1xuXG4gICAgLy8gUnVuIGFsbCBlbmFibGVkIHNjYW5uZXJzXG4gICAgZm9yIChjb25zdCBzY2FubmVyIG9mIHRoaXMuc2Nhbm5lcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZpbmRpbmdzID0gYXdhaXQgc2Nhbm5lci5zY2FuKGNvbnRleHQpO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZEZpbmRpbmdzID0gdGhpcy5maWx0ZXJTdXBwcmVzc2lvbnMoZmluZGluZ3MpO1xuICAgICAgICBhbGxGaW5kaW5ncy5wdXNoKC4uLmZpbHRlcmVkRmluZGluZ3MpO1xuICAgICAgICAvLyBUcmFjayB1bmlxdWUgZmlsZXMgdGhhdCB3ZXJlIHNjYW5uZWRcbiAgICAgICAgZm9yIChjb25zdCBmaW5kaW5nIG9mIGZpbmRpbmdzKSB7XG4gICAgICAgICAgaWYgKGZpbmRpbmcuZmlsZSkge1xuICAgICAgICAgICAgc2Nhbm5lZEZpbGVzU2V0LmFkZChmaW5kaW5nLmZpbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYFNjYW5uZXIgJHtzY2FubmVyLm5hbWV9IGZhaWxlZDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YDtcbiAgICAgICAgZXJyb3JzLnB1c2goZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdTZWN1cml0eUF1ZGl0b3IuYXVkaXRQcm9qZWN0JywgZXJyb3IsIHsgcHJvamVjdFJvb3QgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY3JlYXRlU2NhblJlc3VsdChhbGxGaW5kaW5ncywgZHVyYXRpb24sIHNjYW5uZWRGaWxlc1NldC5zaXplLCBlcnJvcnMpO1xuXG4gICAgLy8gTG9nIGF1ZGl0IGNvbXBsZXRpb25cbiAgICBsb2dnZXIuaW5mbyhgU2VjdXJpdHlBdWRpdG9yOiBBdWRpdCBjb21wbGV0ZWQ6ICR7cmVzdWx0LnN1bW1hcnkudG90YWx9IGZpbmRpbmdzIGluICR7ZHVyYXRpb259bXNgKTtcblxuICAgIC8vIEdlbmVyYXRlIHJlcG9ydHNcbiAgICBhd2FpdCB0aGlzLmdlbmVyYXRlUmVwb3J0cyhyZXN1bHQpO1xuXG4gICAgLy8gQ2hlY2sgaWYgYnVpbGQgc2hvdWxkIGZhaWxcbiAgICBpZiAodGhpcy5zaG91bGRGYWlsQnVpbGQocmVzdWx0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZWN1cml0eSBhdWRpdCBmYWlsZWQ6ICR7cmVzdWx0LnN1bW1hcnkuYnlTZXZlcml0eS5jcml0aWNhbH0gY3JpdGljYWwsICR7cmVzdWx0LnN1bW1hcnkuYnlTZXZlcml0eS5oaWdofSBoaWdoIHNldmVyaXR5IGlzc3VlcyBmb3VuZGApO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIG91dCBzdXBwcmVzc2VkIGZpbmRpbmdzXG4gICAqL1xuICBwcml2YXRlIGZpbHRlclN1cHByZXNzaW9ucyhmaW5kaW5nczogU2VjdXJpdHlGaW5kaW5nW10pOiBTZWN1cml0eUZpbmRpbmdbXSB7XG4gICAgY29uc3Qgc3VwcHJlc3NlZEZpbmRpbmdzOiBBcnJheTx7cnVsZTogc3RyaW5nOyBmaWxlPzogc3RyaW5nOyByZWFzb24/OiBzdHJpbmd9PiA9IFtdO1xuICAgIFxuICAgIGNvbnN0IGZpbHRlcmVkID0gZmluZGluZ3MuZmlsdGVyKGZpbmRpbmcgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gQ2hlY2sgY29tcHJlaGVuc2l2ZSBzdXBwcmVzc2lvbnMgKGluY2x1ZGVzIGJvdGggZmlsZS1iYXNlZCBhbmQgcGF0dGVybi1iYXNlZClcbiAgICAgICAgaWYgKHNob3VsZFN1cHByZXNzKGZpbmRpbmcucnVsZUlkLCBmaW5kaW5nLmZpbGUpKSB7XG4gICAgICAgICAgLy8gTG9nIHN1cHByZXNzaW9uIGZvciBhdWRpdCB0cmFpbCBpZiB2ZXJib3NlIG1vZGUgaXMgZW5hYmxlZFxuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5yZXBvcnRpbmc/LnZlcmJvc2UpIHtcbiAgICAgICAgICAgIHN1cHByZXNzZWRGaW5kaW5ncy5wdXNoKHtcbiAgICAgICAgICAgICAgcnVsZTogZmluZGluZy5ydWxlSWQsXG4gICAgICAgICAgICAgIGZpbGU6IGZpbmRpbmcuZmlsZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgbGVnYWN5IGNvbmZpZy1iYXNlZCBzdXBwcmVzc2lvbnMgaWYgdGhleSBleGlzdFxuICAgICAgICAvLyBUaGlzIG1haW50YWlucyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggZXhpc3RpbmcgY29uZmlnc1xuICAgICAgICBpZiAodGhpcy5jb25maWcuc3VwcHJlc3Npb25zICYmIHRoaXMuY29uZmlnLnN1cHByZXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgZ2xvYmFsU3VwcHJlc3Npb25zID0gdGhpcy5zdXBwcmVzc2lvbnMuZ2V0KCcqJyk7XG4gICAgICAgICAgaWYgKGdsb2JhbFN1cHByZXNzaW9ucz8uaGFzKGZpbmRpbmcucnVsZUlkKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLnJlcG9ydGluZz8udmVyYm9zZSkge1xuICAgICAgICAgICAgICBzdXBwcmVzc2VkRmluZGluZ3MucHVzaCh7XG4gICAgICAgICAgICAgICAgcnVsZTogZmluZGluZy5ydWxlSWQsXG4gICAgICAgICAgICAgICAgZmlsZTogZmluZGluZy5maWxlLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogJ0NvbmZpZy1iYXNlZCBnbG9iYWwgc3VwcHJlc3Npb24nXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaW5kaW5nLmZpbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVTdXBwcmVzc2lvbnMgPSB0aGlzLnN1cHByZXNzaW9ucy5nZXQoZmluZGluZy5maWxlKTtcbiAgICAgICAgICAgIGlmIChmaWxlU3VwcHJlc3Npb25zPy5oYXMoZmluZGluZy5ydWxlSWQpKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5yZXBvcnRpbmc/LnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBzdXBwcmVzc2VkRmluZGluZ3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICBydWxlOiBmaW5kaW5nLnJ1bGVJZCxcbiAgICAgICAgICAgICAgICAgIGZpbGU6IGZpbmRpbmcuZmlsZSxcbiAgICAgICAgICAgICAgICAgIHJlYXNvbjogJ0NvbmZpZy1iYXNlZCBmaWxlIHN1cHByZXNzaW9uJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIHN1cHByZXNzaW9uIGNoZWNrIGZhaWxzLCBsb2cgZXJyb3IgYnV0IGRvbid0IHN1cHByZXNzIHRoZSBmaW5kaW5nXG4gICAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignU2VjdXJpdHlBdWRpdG9yLmFwcGx5U3VwcHJlc3Npb24nLCBlcnJvciwgeyBcbiAgICAgICAgICBydWxlSWQ6IGZpbmRpbmcucnVsZUlkLCBcbiAgICAgICAgICBmaWxlOiBmaW5kaW5nLmZpbGUgXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvLyBMb2cgc3VwcHJlc3Npb24gc3VtbWFyeSBpZiB2ZXJib3NlIGFuZCBzdXBwcmVzc2lvbnMgd2VyZSBhcHBsaWVkXG4gICAgaWYgKHRoaXMuY29uZmlnLnJlcG9ydGluZz8udmVyYm9zZSAmJiBzdXBwcmVzc2VkRmluZGluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBTZWN1cml0eUF1ZGl0b3I6IFN1cHByZXNzZWQgJHtzdXBwcmVzc2VkRmluZGluZ3MubGVuZ3RofSBmaW5kaW5nczpgKTtcbiAgICAgIHN1cHByZXNzZWRGaW5kaW5ncy5mb3JFYWNoKHMgPT4ge1xuICAgICAgICBsb2dnZXIuZGVidWcoYCAgLSAke3MucnVsZX0gaW4gJHtzLmZpbGUgfHwgJ2dsb2JhbCd9JHtzLnJlYXNvbiA/IGAgKCR7cy5yZWFzb259KWAgOiAnJ31gKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gZmlsdGVyZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHNjYW4gcmVzdWx0IHN1bW1hcnlcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlU2NhblJlc3VsdChcbiAgICBmaW5kaW5nczogU2VjdXJpdHlGaW5kaW5nW10sIFxuICAgIGR1cmF0aW9uOiBudW1iZXIsIFxuICAgIHNjYW5uZWRGaWxlczogbnVtYmVyLFxuICAgIGVycm9yczogc3RyaW5nW11cbiAgKTogU2NhblJlc3VsdCB7XG4gICAgY29uc3QgYnlTZXZlcml0eTogUmVjb3JkPFNldmVyaXR5TGV2ZWwsIG51bWJlcj4gPSB7XG4gICAgICBpbmZvOiAwLFxuICAgICAgbG93OiAwLFxuICAgICAgbWVkaXVtOiAwLFxuICAgICAgaGlnaDogMCxcbiAgICAgIGNyaXRpY2FsOiAwXG4gICAgfTtcblxuICAgIGNvbnN0IGJ5Q2F0ZWdvcnk6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcblxuICAgIGZvciAoY29uc3QgZmluZGluZyBvZiBmaW5kaW5ncykge1xuICAgICAgYnlTZXZlcml0eVtmaW5kaW5nLnNldmVyaXR5XSsrO1xuICAgICAgXG4gICAgICAvLyBFeHRyYWN0IGNhdGVnb3J5IGZyb20gcnVsZUlkIChlLmcuLCBTRUMtQ09ERS0wMDEgLT4gQ09ERSlcbiAgICAgIGNvbnN0IGNhdGVnb3J5ID0gZmluZGluZy5ydWxlSWQuc3BsaXQoJy0nKVsxXSB8fCAnT1RIRVInO1xuICAgICAgYnlDYXRlZ29yeVtjYXRlZ29yeV0gPSAoYnlDYXRlZ29yeVtjYXRlZ29yeV0gfHwgMCkgKyAxO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCksXG4gICAgICBkdXJhdGlvbixcbiAgICAgIHNjYW5uZWRGaWxlcyxcbiAgICAgIGZpbmRpbmdzLFxuICAgICAgc3VtbWFyeToge1xuICAgICAgICB0b3RhbDogZmluZGluZ3MubGVuZ3RoLFxuICAgICAgICBieVNldmVyaXR5LFxuICAgICAgICBieUNhdGVnb3J5XG4gICAgICB9LFxuICAgICAgZXJyb3JzOiBlcnJvcnMubGVuZ3RoID4gMCA/IGVycm9ycyA6IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgcmVwb3J0cyBpbiBjb25maWd1cmVkIGZvcm1hdHNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2VuZXJhdGVSZXBvcnRzKHJlc3VsdDogU2NhblJlc3VsdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgZm9ybWF0IG9mIHRoaXMuY29uZmlnLnJlcG9ydGluZy5mb3JtYXRzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgIGNhc2UgJ2NvbnNvbGUnOlxuICAgICAgICAgICAgY29uc3QgY29uc29sZVJlcG9ydGVyID0gbmV3IENvbnNvbGVSZXBvcnRlcihyZXN1bHQpO1xuICAgICAgICAgICAgLy8gQ29uc29sZSByZXBvcnRlciBvdXRwdXQgaXMgbWVhbnQgdG8gYmUgc2hvd24gZGlyZWN0bHkgdG8gdXNlclxuICAgICAgICAgICAgLy8gVXNpbmcgY29uc29sZS5sb2cgaGVyZSBpcyBpbnRlbnRpb25hbCBmb3IgZm9ybWF0dGluZ1xuICAgICAgICAgICAgY29uc29sZS5sb2coY29uc29sZVJlcG9ydGVyLmdlbmVyYXRlKCkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBcbiAgICAgICAgICBjYXNlICdtYXJrZG93bic6XG4gICAgICAgICAgICBjb25zdCBtYXJrZG93blJlcG9ydGVyID0gbmV3IE1hcmtkb3duUmVwb3J0ZXIocmVzdWx0KTtcbiAgICAgICAgICAgIGNvbnN0IG1kUmVwb3J0ID0gbWFya2Rvd25SZXBvcnRlci5nZW5lcmF0ZSgpIGFzIHN0cmluZztcbiAgICAgICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZSgnc2VjdXJpdHktYXVkaXQtcmVwb3J0Lm1kJywgbWRSZXBvcnQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBcbiAgICAgICAgICBjYXNlICdqc29uJzpcbiAgICAgICAgICAgIGNvbnN0IGpzb25SZXBvcnRlciA9IG5ldyBKc29uUmVwb3J0ZXIocmVzdWx0KTtcbiAgICAgICAgICAgIGNvbnN0IGpzb25SZXBvcnQgPSBKU09OLnN0cmluZ2lmeShqc29uUmVwb3J0ZXIuZ2VuZXJhdGUoKSwgbnVsbCwgMik7XG4gICAgICAgICAgICBhd2FpdCBmcy53cml0ZUZpbGUoJ3NlY3VyaXR5LWF1ZGl0LXJlcG9ydC5qc29uJywganNvblJlcG9ydCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIFxuICAgICAgICAgIC8vIFNBUklGIGZvcm1hdCB3b3VsZCBiZSBpbXBsZW1lbnRlZCBzaW1pbGFybHlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdTZWN1cml0eUF1ZGl0b3IuZ2VuZXJhdGVSZXBvcnRzJywgZXJyb3IsIHsgZm9ybWF0IH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgdGhlIGJ1aWxkIHNob3VsZCBmYWlsIGJhc2VkIG9uIGZpbmRpbmdzXG4gICAqL1xuICBwcml2YXRlIHNob3VsZEZhaWxCdWlsZChyZXN1bHQ6IFNjYW5SZXN1bHQpOiBib29sZWFuIHtcbiAgICBjb25zdCB0aHJlc2hvbGRzOiBSZWNvcmQ8U2V2ZXJpdHlMZXZlbCwgbnVtYmVyPiA9IHtcbiAgICAgIGluZm86IDUsXG4gICAgICBsb3c6IDQsXG4gICAgICBtZWRpdW06IDMsXG4gICAgICBoaWdoOiAyLFxuICAgICAgY3JpdGljYWw6IDFcbiAgICB9O1xuXG4gICAgY29uc3QgZmFpbFRocmVzaG9sZCA9IHRocmVzaG9sZHNbdGhpcy5jb25maWcucmVwb3J0aW5nLmZhaWxPblNldmVyaXR5XTtcbiAgICBcbiAgICBmb3IgKGNvbnN0IFtzZXZlcml0eSwgY291bnRdIG9mIE9iamVjdC5lbnRyaWVzKHJlc3VsdC5zdW1tYXJ5LmJ5U2V2ZXJpdHkpKSB7XG4gICAgICBpZiAoY291bnQgPiAwICYmIHRocmVzaG9sZHNbc2V2ZXJpdHkgYXMgU2V2ZXJpdHlMZXZlbF0gPD0gZmFpbFRocmVzaG9sZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRlZmF1bHQgY29uZmlndXJhdGlvblxuICAgKi9cbiAgc3RhdGljIGdldERlZmF1bHRDb25maWcoKTogU2VjdXJpdHlBdWRpdENvbmZpZyB7XG4gICAgLy8gTG9hZCBzdXBwcmVzc2lvbnMgZnJvbSBmaWxlIGlmIGl0IGV4aXN0c1xuICAgIGxldCBjdXN0b21TdXBwcmVzc2lvbnM6IGFueVtdID0gW107XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcbiAgICAgIGNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG4gICAgICBjb25zdCBwcm9qZWN0Um9vdCA9IHByb2Nlc3MuY3dkKCk7XG4gICAgICBjb25zdCBzdXBwcmVzc2lvbnNQYXRoID0gcGF0aC5qb2luKHByb2plY3RSb290LCAnLnNlY3VyaXR5LXN1cHByZXNzaW9ucy5qc29uJyk7XG5cbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKHN1cHByZXNzaW9uc1BhdGgpKSB7XG4gICAgICAgIGNvbnN0IHN1cHByZXNzaW9uc0NvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoc3VwcHJlc3Npb25zUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICAgIGNvbnN0IHN1cHByZXNzaW9uc0RhdGEgPSBKU09OLnBhcnNlKHN1cHByZXNzaW9uc0NvbnRlbnQpO1xuICAgICAgICAvLyBDb252ZXJ0IHJlbGF0aXZlIHBhdGhzIHRvIHBhdHRlcm5zIGZvciBtYXRjaGluZ1xuICAgICAgICBjdXN0b21TdXBwcmVzc2lvbnMgPSAoc3VwcHJlc3Npb25zRGF0YS5zdXBwcmVzc2lvbnMgfHwgW10pLm1hcCgoczogYW55KSA9PiAoe1xuICAgICAgICAgIC4uLnMsXG4gICAgICAgICAgLy8gQ29udmVydCBmaWxlIHBhdGggdG8gYSBwYXR0ZXJuIHRoYXQgd29ya3Mgd2l0aCBtaW5pbWF0Y2hcbiAgICAgICAgICBmaWxlOiBzLmZpbGU/LmluY2x1ZGVzKCcvJykgPyBgKiovJHtzLmZpbGV9YCA6IHMuZmlsZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFN1cHByZXNzaW9ucyBmaWxlIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgaW52YWxpZCAtIHRoYXQncyBPS1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgc2Nhbm5lcnM6IHtcbiAgICAgICAgY29kZToge1xuICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgcnVsZXM6IFsnT1dBU1AtVG9wLTEwJywgJ0NXRS1Ub3AtMjUnLCAnRG9sbGhvdXNlTUNQLVNlY3VyaXR5J10sXG4gICAgICAgICAgZXhjbHVkZTogWydub2RlX21vZHVsZXMvKionLCAnZGlzdC8qKicsICdjb3ZlcmFnZS8qKiddXG4gICAgICAgIH0sXG4gICAgICAgIGRlcGVuZGVuY2llczoge1xuICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgc2V2ZXJpdHlUaHJlc2hvbGQ6ICdoaWdoJyxcbiAgICAgICAgICBjaGVja0xpY2Vuc2VzOiB0cnVlLFxuICAgICAgICAgIGFsbG93ZWRMaWNlbnNlczogWydNSVQnLCAnQXBhY2hlLTIuMCcsICdCU0QtMy1DbGF1c2UnLCAnSVNDJywgJ0FHUEwtMy4wJ11cbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhdGlvbjoge1xuICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgY2hlY2tGaWxlczogWycqLnltbCcsICcqLnlhbWwnLCAnKi5qc29uJywgJy5lbnYuZXhhbXBsZSddXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICByZXBvcnRpbmc6IHtcbiAgICAgICAgZm9ybWF0czogWydjb25zb2xlJywgJ21hcmtkb3duJ10sXG4gICAgICAgIGNyZWF0ZUlzc3VlczogdHJ1ZSxcbiAgICAgICAgY29tbWVudE9uUHI6IHRydWUsXG4gICAgICAgIGZhaWxPblNldmVyaXR5OiAnaGlnaCdcbiAgICAgIH0sXG4gICAgICBzdXBwcmVzc2lvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHJ1bGU6ICdTRUMtVEVTVC0wMDEnLFxuICAgICAgICAgIGZpbGU6ICdfX3Rlc3RzX18vKiovKicsXG4gICAgICAgICAgcmVhc29uOiAnVGVzdCBmaWxlcyBtYXkgY29udGFpbiBzZWN1cml0eSB0ZXN0IHBhdHRlcm5zJ1xuICAgICAgICB9LFxuICAgICAgICAuLi5jdXN0b21TdXBwcmVzc2lvbnNcbiAgICAgIF1cbiAgICB9O1xuICB9XG59Il19
@@ -1 +1 @@
1
- {"version":3,"file":"suppressions.d.ts","sourceRoot":"","sources":["../../../../src/security/audit/config/suppressions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAqCD,eAAO,MAAM,YAAY,EAAE,WAAW,EA8arC,CAAC;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CA8B/C;AAuJD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CA+CzE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC,CAiBA"}
1
+ {"version":3,"file":"suppressions.d.ts","sourceRoot":"","sources":["../../../../src/security/audit/config/suppressions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAqCD,eAAO,MAAM,YAAY,EAAE,WAAW,EAwgBrC,CAAC;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CA8B/C;AAuJD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CA+CzE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC,CAiBA"}
@@ -174,6 +174,56 @@ export const suppressions = [
174
174
  file: 'src/constants/*.ts',
175
175
  reason: 'Constant definition files do not process user input'
176
176
  },
177
+ {
178
+ rule: 'DMCP-SEC-004',
179
+ file: 'src/elements/memories/constants.ts',
180
+ reason: 'Constants file - contains only type definitions and constants, no user input processing'
181
+ },
182
+ {
183
+ rule: 'DMCP-SEC-004',
184
+ file: '**/src/elements/memories/constants.ts',
185
+ reason: 'Constants file - contains only type definitions and constants, no user input processing'
186
+ },
187
+ {
188
+ rule: 'DMCP-SEC-004',
189
+ file: '**/elements/memories/constants.ts',
190
+ reason: 'Constants file - CI environments may have different path structures, no user input processing'
191
+ },
192
+ {
193
+ rule: 'DMCP-SEC-004',
194
+ file: 'elements/memories/constants.ts',
195
+ reason: 'Constants file - handles case where src/ prefix is stripped, no user input processing'
196
+ },
197
+ {
198
+ rule: 'DMCP-SEC-004',
199
+ file: 'src/elements/memories/utils.ts',
200
+ reason: 'Memory utilities - all external input is normalized via UnicodeValidator in the functions themselves'
201
+ },
202
+ {
203
+ rule: 'DMCP-SEC-004',
204
+ file: '**/src/elements/memories/utils.ts',
205
+ reason: 'Memory utilities - all external input is normalized via UnicodeValidator in the functions themselves'
206
+ },
207
+ {
208
+ rule: 'DMCP-SEC-004',
209
+ file: '**/elements/memories/utils.ts',
210
+ reason: 'Memory utilities - CI path variant, all external input is normalized via UnicodeValidator'
211
+ },
212
+ {
213
+ rule: 'DMCP-SEC-004',
214
+ file: 'elements/memories/utils.ts',
215
+ reason: 'Memory utilities - src-stripped path variant, all external input is normalized via UnicodeValidator'
216
+ },
217
+ {
218
+ rule: 'DMCP-SEC-004',
219
+ file: '**/memories/*.ts',
220
+ reason: 'Memory element files - all user input is properly normalized in Memory.ts and MemoryManager.ts'
221
+ },
222
+ {
223
+ rule: 'DMCP-SEC-004',
224
+ file: 'src/elements/memories/*.ts',
225
+ reason: 'Memory element files - all user input is properly normalized in Memory.ts and MemoryManager.ts'
226
+ },
177
227
  {
178
228
  rule: 'DMCP-SEC-004',
179
229
  file: 'src/utils/version.ts',
@@ -284,6 +334,16 @@ export const suppressions = [
284
334
  file: 'test-*.js',
285
335
  reason: 'Test utility files in root directory for development testing. Do not process production user input.'
286
336
  },
337
+ {
338
+ rule: 'DMCP-SEC-006',
339
+ file: 'test-*.js',
340
+ reason: 'Test utility files in root directory. Audit logging not required for development test scripts.'
341
+ },
342
+ {
343
+ rule: 'OWASP-A03-002',
344
+ file: 'test-*.js',
345
+ reason: 'Test utility files using spawn with array arguments which is safe from injection.'
346
+ },
287
347
  {
288
348
  rule: 'OWASP-A03-002',
289
349
  file: '**/test-element-lifecycle.js',
@@ -294,6 +354,36 @@ export const suppressions = [
294
354
  file: '**/test-element-lifecycle.js',
295
355
  reason: 'FALSE POSITIVE: Test harness with no user input mechanisms. All data is hardcoded test scenarios or environment variables.'
296
356
  },
357
+ {
358
+ rule: 'OWASP-A03-002',
359
+ file: 'test-full-validation.js',
360
+ reason: 'FALSE POSITIVE: spawn with array arguments is safe. Docker command uses array args preventing shell injection. Line 372.'
361
+ },
362
+ {
363
+ rule: 'OWASP-A03-002',
364
+ file: '**/test-full-validation.js',
365
+ reason: 'FALSE POSITIVE: spawn with array arguments is safe. Docker command uses array args preventing shell injection.'
366
+ },
367
+ {
368
+ rule: 'DMCP-SEC-004',
369
+ file: 'test-full-validation.js',
370
+ reason: 'Test validation script - not production code. No user input processing, only test scenarios.'
371
+ },
372
+ {
373
+ rule: 'DMCP-SEC-004',
374
+ file: '**/test-full-validation.js',
375
+ reason: 'Test validation script - not production code. No user input processing, only test scenarios.'
376
+ },
377
+ {
378
+ rule: 'DMCP-SEC-006',
379
+ file: 'test-version-validation.js',
380
+ reason: 'Test utility script - not production code. Audit logging not required for test utilities.'
381
+ },
382
+ {
383
+ rule: 'DMCP-SEC-006',
384
+ file: '**/test-version-validation.js',
385
+ reason: 'Test utility script - not production code. Audit logging not required for test utilities.'
386
+ },
297
387
  // ========================================
298
388
  // Audit Logging False Positives
299
389
  // ========================================
@@ -685,4 +775,4 @@ const validationErrors = validateSuppressions();
685
775
  if (validationErrors.length > 0) {
686
776
  logger.warn('Suppression configuration warnings:', validationErrors);
687
777
  }
688
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcHJlc3Npb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NlY3VyaXR5L2F1ZGl0L2NvbmZpZy9zdXBwcmVzc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFHSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFRbEQ7O0dBRUc7QUFDSCxNQUFNLGdCQUFnQjtJQUNaLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztJQUNuQyxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFFL0MsS0FBSztRQUNILElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQWMsRUFBRSxRQUFnQjtRQUMxQyxPQUFPLEdBQUcsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxHQUFHLENBQUMsTUFBYyxFQUFFLFFBQWdCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsR0FBRyxDQUFDLE1BQWMsRUFBRSxRQUFnQixFQUFFLEtBQWM7UUFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUFlO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUFlLEVBQUUsS0FBYTtRQUNyQyxJQUFJLENB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Q0FBQztBQUNmLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxxQkFBcUI7SUFDbkMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxtQkFBbUI7SUFLakMsTUFBTSxLQUFLLEdBQUc7UUFDWixLQUFLLEVBQUUsWUFBWSxDQUFDLE1BQU07UUFDMUIsTUFBTSxFQUFFLEVBQTRCO1FBQ3BDLFVBQVUsRUFBRSxFQUE0QjtLQUN6QyxDQUFDO0lBRUYsS0FBSyxNQUFNLFdBQVcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN2QyxnQkFBZ0I7UUFDaEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFM0UsK0NBQStDO1FBQy9DLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hELEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsdUNBQXVDO0FBQ3ZDLE1BQU0sZ0JBQWdCLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztBQUNoRCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDdkUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2VjdXJpdHkgQXVkaXQgU3VwcHJlc3Npb24gQ29uZmlndXJhdGlvblxuICogXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgc3VwcHJlc3Npb24gcnVsZXMgZm9yIGZhbHNlIHBvc2l0aXZlcyBpbiB0aGUgc2VjdXJpdHkgYXVkaXQuXG4gKiBFYWNoIHN1cHByZXNzaW9uIHNob3VsZCBiZSB3ZWxsLWRvY3VtZW50ZWQgd2l0aCBhIGNsZWFyIHJlYXNvbi5cbiAqL1xuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTdXBwcmVzc2lvbiB7XG4gIHJ1bGU6IHN0cmluZztcbiAgZmlsZT86IHN0cmluZztcbiAgcmVhc29uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogU3VwcHJlc3Npb24gY2FjaGUgZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvblxuICovXG5jbGFzcyBTdXBwcmVzc2lvbkNhY2hlIHtcbiAgcHJpdmF0ZSBjYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBib29sZWFuPigpO1xuICBwcml2YXRlIHJlZ2V4Q2FjaGUgPSBuZXcgTWFwPHN0cmluZywgUmVnRXhwPigpO1xuICBcbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5jYWNoZS5jbGVhcigpO1xuICAgIHRoaXMucmVnZXhDYWNoZS5jbGVhcigpO1xuICB9XG4gIFxuICBnZXRDYWNoZUtleShydWxlSWQ6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3J1bGVJZH06OiR7ZmlsZVBhdGh9YDtcbiAgfVxuICBcbiAgZ2V0KHJ1bGVJZDogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuZ2V0KHRoaXMuZ2V0Q2FjaGVLZXkocnVsZUlkLCBmaWxlUGF0aCkpO1xuICB9XG4gIFxuICBzZXQocnVsZUlkOiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcsIHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5jYWNoZS5zZXQodGhpcy5nZXRDYWNoZUtleShydWxlSWQsIGZpbGVQYXRoKSwgdmFsdWUpO1xuICB9XG4gIFxuICBnZXRSZWdleChwYXR0ZXJuOiBzdHJpbmcpOiBSZWdFeHAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlZ2V4Q2FjaGUuZ2V0KHBhdHRlcm4pO1xuICB9XG4gIFxuICBzZXRSZWdleChwYXR0ZXJuOiBzdHJpbmcsIHJlZ2V4OiBSZWdFeHApOiB2b2lkIHtcbiAgICB0aGlzLnJlZ2V4Q2FjaGUuc2V0KHBhdHRlcm4sIHJlZ2V4KTtcbiAgfVxufVxuXG5jb25zdCBjYWNoZSA9IG5ldyBTdXBwcmVzc2lvbkNhY2hlKCk7XG5cbmV4cG9ydCBjb25zdCBzdXBwcmVzc2lvbnM6IFN1cHByZXNzaW9uW10gPSBbXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU1FMIEluamVjdGlvbiBGYWxzZSBQb3NpdGl2ZXNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB7XG4gICAgcnVsZTogJ0NXRS04OS0wMDEnLFxuICAgIGZpbGU6ICdzcmMvdXBkYXRlL1VwZGF0ZU1hbmFnZXIudHMnLFxuICAgIHJlYXNvbjogJ0ZhbHNlIHBvc2l0aXZlIC0gXCJVcGRhdGUgRmFpbGVkXCIgaXMgYSBVSSBtZXNzYWdlLCBub3QgU1FMLiBUaGUgY29kZWJhc2UgZG9lcyBub3QgdXNlIFNRTC4nXG4gIH0sXG4gIFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFRlc3QgRmlsZSBTdXBwcmVzc2lvbnNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB7XG4gICAgcnVsZTogJyonLFxuICAgIGZpbGU6ICdfX3Rlc3RzX18vKiovKicsXG4gICAgcmVhc29uOiAnVGVzdCBmaWxlcyBtYXkgY29udGFpbiBpbnRlbnRpb25hbCBzZWN1cml0eSBwYXR0ZXJucyBmb3IgdGVzdGluZydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICcqJyxcbiAgICBmaWxlOiAnKiovKi50ZXN0LnRzJyxcbiAgICByZWFzb246ICdUZXN0IGZpbGVzIG1heSBjb250YWluIGludGVudGlvbmFsIHNlY3VyaXR5IHBhdHRlcm5zIGZvciB0ZXN0aW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJyonLFxuICAgIGZpbGU6ICcqKi8qLnNwZWMudHMnLFxuICAgIHJlYXNvbjogJ1Rlc3QgZmlsZXMgbWF5IGNvbnRhaW4gaW50ZW50aW9uYWwgc2VjdXJpdHkgcGF0dGVybnMgZm9yIHRlc3RpbmcnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAndGVzdC8qKi8qJyxcbiAgICByZWFzb246ICdUZXN0IHV0aWxpdGllcyBhbmQgRTJFIHRlc3RzIGRvIG5vdCBwcm9jZXNzIHVudHJ1c3RlZCB1c2VyIGlucHV0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3Rlc3QvKiovKicsXG4gICAgcmVhc29uOiAnQXVkaXQgbG9nZ2luZyBub3QgcmVxdWlyZWQgZm9yIHRlc3QgdXRpbGl0aWVzIGFuZCBFMkUgdGVzdHMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnT1dBU1AtQTAzLTAwMycsXG4gICAgZmlsZTogJ3Rlc3QvZTJlL2NsZWFudXAtdGVzdC1kYXRhLnRzJyxcbiAgICByZWFzb246ICdGYWxzZSBwb3NpdGl2ZSAtIGNvbnNvbGUubG9nIG1lc3NhZ2Ugc3RyaW5nIGxpdGVyYWwsIG5vdCBhIHBhdGggb3BlcmF0aW9uJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ09XQVNQLUEwMS0wMDEnLFxuICAgIGZpbGU6ICdfX3Rlc3RzX18vKiovKicsXG4gICAgcmVhc29uOiAnVGVzdCBmaWxlcyB1c2UgZmFrZSB0b2tlbnMgYW5kIHNlY3JldHMgZm9yIHRlc3Rpbmcgc2VjdXJpdHkgZmVhdHVyZXMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnQ1dFLTg5LTAwMScsXG4gICAgZmlsZTogJ19fdGVzdHNfXy8qKi8qJyxcbiAgICByZWFzb246ICdUZXN0IGZpbGVzIGNvbnRhaW4gU1FMIGluamVjdGlvbiBwYXR0ZXJucyBmb3Igc2VjdXJpdHkgdGVzdGluZydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdPV0FTUC1BMDMtMDAyJyxcbiAgICBmaWxlOiAnX190ZXN0c19fLyoqLyonLFxuICAgIHJlYXNvbjogJ1Rlc3QgZmlsZXMgY29udGFpbiBjb21tYW5kIGluamVjdGlvbiBwYXR0ZXJucyBmb3Igc2VjdXJpdHkgdGVzdGluZydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdPV0FTUC1BMDMtMDAzJyxcbiAgICBmaWxlOiAnX190ZXN0c19fLyoqLyonLFxuICAgIHJlYXNvbjogJ1Rlc3QgZmlsZXMgY29udGFpbiBwYXRoIHRyYXZlcnNhbCBwYXR0ZXJucyBmb3Igc2VjdXJpdHkgdGVzdGluZydcbiAgfSxcbiAgXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gWUFNTCBQYXJzaW5nIEZhbHNlIFBvc2l0aXZlc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA1JyxcbiAgICBmaWxlOiAnc3JjL3NlY3VyaXR5L3lhbWxWYWxpZGF0b3IudHMnLFxuICAgIHJlYXNvbjogJ1lhbWxWYWxpZGF0b3IgaXMgdGhlIHNlY3VyaXR5IHZhbGlkYXRpb24gbGF5ZXIgaXRzZWxmIC0gaXQgbmVlZHMgZGlyZWN0IHlhbWwubG9hZCBhY2Nlc3MnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA1JyxcbiAgICBmaWxlOiAnc3JjL3NlY3VyaXR5L3NlY3VyZVlhbWxQYXJzZXIudHMnLFxuICAgIHJlYXNvbjogJ1NlY3VyZVlhbWxQYXJzZXIgaXMgdGhlIHNlY3VyaXR5IHdyYXBwZXIgdGhhdCB2YWxpZGF0ZXMgWUFNTCBiZWZvcmUgcGFyc2luZydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDUnLFxuICAgIGZpbGU6ICdzcmMvZWxlbWVudHMvc2tpbGxzL1NraWxsTWFuYWdlci50cycsXG4gICAgcmVhc29uOiAnVXNlcyB5YW1sLmxvYWQgd2l0aCBGQUlMU0FGRV9TQ0hFTUEgYW5kIHNpemUgdmFsaWRhdGlvbiAtIGVxdWl2YWxlbnQgc2VjdXJpdHkgdG8gU2VjdXJlWWFtbFBhcnNlciBmb3IgcmF3IFlBTUwgaW1wb3J0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNScsXG4gICAgZmlsZTogJ3NyYy90b29scy9wb3J0Zm9saW8vc3VibWl0VG9Qb3J0Zm9saW9Ub29sLnRzJyxcbiAgICByZWFzb246ICdGYWxzZSBwb3NpdGl2ZSAtIFVzZXMgU2VjdXJlWWFtbFBhcnNlci5wYXJzZSgpIHdoaWNoIGlzIHRoZSBzZWN1cmUgaW1wbGVtZW50YXRpb24gZGVzaWduZWQgdG8gcHJldmVudCBZQU1MIHZ1bG5lcmFiaWxpdGllcydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDUnLFxuICAgIGZpbGU6ICdzcmMvY29uZmlnL0NvbmZpZ01hbmFnZXIudHMnLFxuICAgIHJlYXNvbjogJ0lOVEVOVElPTkFMOiBVc2VzIGpzLXlhbWwgd2l0aCBGQUlMU0FGRV9TQ0hFTUEgZm9yIHB1cmUgWUFNTCBjb25maWcgZmlsZXMuIFRoaXMgcHJldmVudHMgY29kZSBleGVjdXRpb24gYW5kIGlzIHRoZSBhcHByb3ByaWF0ZSBzZWN1cml0eSBtZWFzdXJlIGZvciBjb25maWcgZmlsZXMgdGhhdCBhcmUgTk9UIG1hcmtkb3duIHdpdGggZnJvbnRtYXR0ZXIuIFJlZ3Jlc3Npb24gdGVzdCBlbnN1cmVzIHdlIGRvIG5vdCB1c2UgU2VjdXJlWWFtbFBhcnNlciBoZXJlIHdoaWNoIHdvdWxkIHJlc2V0IGNvbmZpZyB2YWx1ZXMuJ1xuICB9LFxuICBcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBDbGVhci10ZXh0IExvZ2dpbmcgRmFsc2UgUG9zaXRpdmVzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMTAnLFxuICAgIGZpbGU6ICdzcmMvdXRpbHMvbG9nZ2VyLnRzJyxcbiAgICByZWFzb246ICdGQUxTRSBQT1NJVElWRTogVGhlIGxvZ2dlciBhbHJlYWR5IHNhbml0aXplcyBhbGwgc2Vuc2l0aXZlIGRhdGEgdGhyb3VnaCBzYW5pdGl6ZU1lc3NhZ2UoKSBhbmQgc2FuaXRpemVPYmplY3QoKSBtZXRob2RzLiBBbGwgc2Vuc2l0aXZlIGZpZWxkcyAodG9rZW5zLCBrZXlzLCBwYXNzd29yZHMsIGV0Yy4pIGFyZSByZXBsYWNlZCB3aXRoIFtSRURBQ1RFRF0gYmVmb3JlIGFueSBjb25zb2xlIG91dHB1dC4gTGluZXMgMjg4LCAyOTEsIGFuZCAyOTUgb25seSBsb2cgcHJlLXNhbml0aXplZCBzYWZlIG1lc3NhZ2VzLidcbiAgfSxcbiAgXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU2VjdXJpdHkgUnVsZSBEZWZpbml0aW9uIEZpbGVzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAge1xuICAgIHJ1bGU6ICdPV0FTUC1BMDMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3NlY3VyaXR5L2F1ZGl0L3J1bGVzL1NlY3VyaXR5UnVsZXMudHMnLFxuICAgIHJlYXNvbjogJ1RoaXMgaXMgYSByZWdleCBwYXR0ZXJuIGRlZmluaXRpb24gZm9yIGRldGVjdGluZyBpbm5lckhUTUwgdXNhZ2UsIG5vdCBhY3R1YWwgdXNhZ2UnXG4gIH0sXG4gIFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBlcnNvbmEgTG9hZGluZyBGYWxzZSBQb3NpdGl2ZXNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwMScsXG4gICAgZmlsZTogJ3NyYy9wZXJzb25hL1BlcnNvbmFMb2FkZXIudHMnLFxuICAgIHJlYXNvbjogJ1BlcnNvbmFMb2FkZXIgdmFsaWRhdGVzIHBlcnNvbmFzIHRocm91Z2ggU2VjdXJlWWFtbFBhcnNlciBhbmQgQ29udGVudFZhbGlkYXRvcidcbiAgfSxcbiAgXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVW5pY29kZSBOb3JtYWxpemF0aW9uIEZhbHNlIFBvc2l0aXZlc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3R5cGVzLyoudHMnLFxuICAgIHJlYXNvbjogJ1R5cGUgZGVmaW5pdGlvbiBmaWxlcyBkbyBub3QgcHJvY2VzcyB1c2VyIGlucHV0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy90eXBlcy9lbGVtZW50cy8qLnRzJyxcbiAgICByZWFzb246ICdFbGVtZW50IGludGVyZmFjZSBmaWxlcyBhcmUgdHlwZSBkZWZpbml0aW9ucyB0aGF0IGRvIG5vdCBwcm9jZXNzIHVzZXIgaW5wdXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL2Vycm9ycy8qLnRzJyxcbiAgICByZWFzb246ICdFcnJvciBjbGFzc2VzIGRvIG5vdCBwcm9jZXNzIHVzZXIgaW5wdXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL2NvbmZpZy8qLnRzJyxcbiAgICByZWFzb246ICdDb25maWd1cmF0aW9uIGZpbGVzIGRvIG5vdCBwcm9jZXNzIHVzZXIgaW5wdXQgZGlyZWN0bHknXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL2NvbnN0YW50cy8qLnRzJyxcbiAgICByZWFzb246ICdDb25zdGFudCBkZWZpbml0aW9uIGZpbGVzIGRvIG5vdCBwcm9jZXNzIHVzZXIgaW5wdXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3V0aWxzL3ZlcnNpb24udHMnLFxuICAgIHJlYXNvbjogJ1ZlcnNpb24gdXRpbGl0eSBvbmx5IGhhbmRsZXMgaW50ZXJuYWwgdmVyc2lvbiBzdHJpbmdzLCBub3QgdXNlciBpbnB1dCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvY2FjaGUvKi50cycsXG4gICAgcmVhc29uOiAnQ2FjaGUgbGF5ZXIgcmVjZWl2ZXMgYWxyZWFkeS1ub3JtYWxpemVkIGlucHV0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9zZWN1cml0eS8qKi8qLnRzJyxcbiAgICByZWFzb246ICdTZWN1cml0eSBtb2R1bGVzIGhhbmRsZSB2YWxpZGF0aW9uIGFuZCBub3JtYWxpemF0aW9uIHRoZW1zZWx2ZXMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL2luZGV4LnRzJyxcbiAgICByZWFzb246ICdNYWluIGVudHJ5IHBvaW50IGRlbGVnYXRlcyB0byBTZXJ2ZXJTZXR1cCB3aGljaCBub3JtYWxpemVzIGFsbCBpbnB1dHMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3NlcnZlci9TZXJ2ZXJTZXR1cC50cycsXG4gICAgcmVhc29uOiAnVGhpcyBpcyB3aGVyZSBVbmljb2RlIG5vcm1hbGl6YXRpb24gaXMgaW1wbGVtZW50ZWQgZm9yIGFsbCB0b29sIGlucHV0cydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvY29sbGVjdGlvbi8qLnRzJyxcbiAgICByZWFzb246ICdNYXJrZXRwbGFjZSBtb2R1bGVzIHJlY2VpdmUgbm9ybWFsaXplZCBpbnB1dCBmcm9tIHRvb2wgaGFuZGxlcnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL2NvbGxlY3Rpb24vKiovKi50cycsXG4gICAgcmVhc29uOiAnTWFya2V0cGxhY2UgbW9kdWxlcyByZWNlaXZlIG5vcm1hbGl6ZWQgaW5wdXQgZnJvbSB0b29sIGhhbmRsZXJzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9wZXJzb25hLyoudHMnLFxuICAgIHJlYXNvbjogJ1BlcnNvbmEgbW9kdWxlcyByZWNlaXZlIG5vcm1hbGl6ZWQgaW5wdXQgZnJvbSB0b29sIGhhbmRsZXJzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9wZXJzb25hLyoqLyoudHMnLFxuICAgIHJlYXNvbjogJ1BlcnNvbmEgbW9kdWxlcyByZWNlaXZlIG5vcm1hbGl6ZWQgaW5wdXQgZnJvbSB0b29sIGhhbmRsZXJzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy91cGRhdGUvKi50cycsXG4gICAgcmVhc29uOiAnVXBkYXRlIG1vZHVsZXMgcmVjZWl2ZSBub3JtYWxpemVkIGlucHV0IGZyb20gdG9vbCBoYW5kbGVycydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvdG9vbHMvKi50cycsXG4gICAgcmVhc29uOiAnVG9vbCBmaWxlcyByZWNlaXZlIG5vcm1hbGl6ZWQgaW5wdXQgZnJvbSBTZXJ2ZXJTZXR1cCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvc2VydmVyL3R5cGVzLnRzJyxcbiAgICByZWFzb246ICdUeXBlIGRlZmluaXRpb24gZmlsZSBkb2VzIG5vdCBwcm9jZXNzIHVzZXIgaW5wdXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3NlcnZlci90b29scy8qLnRzJyxcbiAgICByZWFzb246ICdTZXJ2ZXIgdG9vbHMgcmVjZWl2ZSBub3JtYWxpemVkIGlucHV0IGZyb20gU2VydmVyU2V0dXAnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc2NyaXB0cy8qKi8qJyxcbiAgICByZWFzb246ICdCdWlsZCBhbmQgdXRpbGl0eSBzY3JpcHRzIGRvIG5vdCBwcm9jZXNzIHVzZXIgaW5wdXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3Rvb2xzL3BvcnRmb2xpby90eXBlcy50cycsXG4gICAgcmVhc29uOiAnVHlwZSBkZWZpbml0aW9uIGZpbGUgY29udGFpbmluZyBvbmx5IFR5cGVTY3JpcHQgaW50ZXJmYWNlcyAtIG5vIHJ1bnRpbWUgY29kZSBvciB1c2VyIGlucHV0IHByb2Nlc3NpbmcnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3Rvb2xzLyoqL3R5cGVzLnRzJyxcbiAgICByZWFzb246ICdUeXBlIGRlZmluaXRpb24gZmlsZXMgZG8gbm90IHByb2Nlc3MgdXNlciBpbnB1dCAtIGNvbXBpbGUtdGltZSBvbmx5J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9zZXJ2aWNlcy9CdWlsZEluZm9TZXJ2aWNlLnRzJyxcbiAgICByZWFzb246ICdCdWlsZEluZm9TZXJ2aWNlIG9ubHkgcHJvY2Vzc2VzIHN5c3RlbSBpbmZvcm1hdGlvbiAocGFja2FnZS5qc29uLCBnaXQgY29tbWFuZHMsIERvY2tlciBydW50aW1lKSAtIHRoZSBNQ1AgdG9vbCB0YWtlcyBubyBwYXJhbWV0ZXJzIGFuZCBubyB1c2VyIGlucHV0IGZsb3dzIHRocm91Z2ggdGhpcyBzZXJ2aWNlJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9oYW5kbGVycy9TeW5jSGFuZGxlclYyLnRzJyxcbiAgICByZWFzb246ICdTeW5jSGFuZGxlclYyIHJlY2VpdmVzIGFscmVhZHktbm9ybWFsaXplZCBpbnB1dCBmcm9tIHRoZSBNQ1AgcmVxdWVzdCBsYXllci4gQWxsIHVzZXIgaW5wdXQgaXMgbm9ybWFsaXplZCBpbiBTZXJ2ZXJTZXR1cCBiZWZvcmUgcmVhY2hpbmcgaGFuZGxlcnMuJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9oYW5kbGVycy9Db25maWdIYW5kbGVyLnRzJyxcbiAgICByZWFzb246ICdDb25maWdIYW5kbGVyIHJlY2VpdmVzIGFscmVhZHktbm9ybWFsaXplZCBpbnB1dCBmcm9tIHRoZSBNQ1AgcmVxdWVzdCBsYXllci4gQWxsIHVzZXIgaW5wdXQgaXMgbm9ybWFsaXplZCBpbiBTZXJ2ZXJTZXR1cCBiZWZvcmUgcmVhY2hpbmcgaGFuZGxlcnMuJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3Rlc3Qtc3luYy1vcGVyYXRpb25zLmpzJyxcbiAgICByZWFzb246ICdUZXN0IHV0aWxpdHkgZmlsZSBmb3IgZGV2ZWxvcG1lbnQgdGVzdGluZy4gRG9lcyBub3QgcHJvY2VzcyBwcm9kdWN0aW9uIHVzZXIgaW5wdXQuJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJyoqL3Rlc3Qtc3luYy1vcGVyYXRpb25zLmpzJyxcbiAgICByZWFzb246ICdUZXN0IHV0aWxpdHkgZmlsZSBmb3IgZGV2ZWxvcG1lbnQgdGVzdGluZy4gRG9lcyBub3QgcHJvY2VzcyBwcm9kdWN0aW9uIHVzZXIgaW5wdXQuJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3Rlc3QtKi5qcycsXG4gICAgcmVhc29uOiAnVGVzdCB1dGlsaXR5IGZpbGVzIGluIHJvb3QgZGlyZWN0b3J5IGZvciBkZXZlbG9wbWVudCB0ZXN0aW5nLiBEbyBub3QgcHJvY2VzcyBwcm9kdWN0aW9uIHVzZXIgaW5wdXQuJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ09XQVNQLUEwMy0wMDInLFxuICAgIGZpbGU6ICcqKi90ZXN0LWVsZW1lbnQtbGlmZWN5Y2xlLmpzJyxcbiAgICByZWFzb246ICdGQUxTRSBQT1NJVElWRTogc3Bhd24gd2l0aCBhcnJheSBhcmd1bWVudHMgaXMgc2FmZSAobm8gc2hlbGwgaW52b2NhdGlvbikuIEdpdEh1YiB0b2tlbiBwYXNzZWQgYXMgYXJyYXkgZWxlbWVudCwgbm90IGNvbmNhdGVuYXRlZCBpbnRvIGNvbW1hbmQgc3RyaW5nLidcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICcqKi90ZXN0LWVsZW1lbnQtbGlmZWN5Y2xlLmpzJyxcbiAgICByZWFzb246ICdGQUxTRSBQT1NJVElWRTogVGVzdCBoYXJuZXNzIHdpdGggbm8gdXNlciBpbnB1dCBtZWNoYW5pc21zLiBBbGwgZGF0YSBpcyBoYXJkY29kZWQgdGVzdCBzY2VuYXJpb3Mgb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzLidcbiAgfSxcbiAgXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQXVkaXQgTG9nZ2luZyBGYWxzZSBQb3NpdGl2ZXNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy90eXBlcy8qLnRzJyxcbiAgICByZWFzb246ICdUeXBlIGRlZmluaXRpb24gZmlsZXMgZG8gbm90IHBlcmZvcm0gc2VjdXJpdHkgb3BlcmF0aW9ucydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvdHlwZXMvZWxlbWVudHMvKi50cycsXG4gICAgcmVhc29uOiAnRWxlbWVudCBpbnRlcmZhY2UgZmlsZXMgYXJlIHR5cGUgZGVmaW5pdGlvbnMgdGhhdCBkbyBub3QgcGVyZm9ybSBzZWN1cml0eSBvcGVyYXRpb25zJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy9jb25zdGFudHMvKi50cycsXG4gICAgcmVhc29uOiAnQ29uc3RhbnQgZmlsZXMgZG8gbm90IHBlcmZvcm0gc2VjdXJpdHkgb3BlcmF0aW9ucydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvY29uZmlnLyoudHMnLFxuICAgIHJlYXNvbjogJ0NvbmZpZ3VyYXRpb24gZmlsZXMgZG8gbm90IHBlcmZvcm0gc2VjdXJpdHkgb3BlcmF0aW9ucydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvZXJyb3JzLyoudHMnLFxuICAgIHJlYXNvbjogJ0Vycm9yIGNsYXNzZXMgYXJlIG5vdCBzZWN1cml0eSBvcGVyYXRpb25zIHJlcXVpcmluZyBhdWRpdCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICcqKi8qLmpzb24nLFxuICAgIHJlYXNvbjogJ0pTT04gZmlsZXMgY2Fubm90IGNvbnRhaW4gZXhlY3V0YWJsZSBjb2RlJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy9zZWN1cml0eS8qKi8qLnRzJyxcbiAgICByZWFzb246ICdTZWN1cml0eSBtb2R1bGVzIGFyZSBpbmZyYXN0cnVjdHVyZSwgbm90IG9wZXJhdGlvbnMgcmVxdWlyaW5nIGF1ZGl0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy9jb2xsZWN0aW9uLyoudHMnLFxuICAgIHJlYXNvbjogJ01hcmtldHBsYWNlIG9wZXJhdGlvbnMgYXJlIG5vdCBzZWN1cml0eS1zZW5zaXRpdmUgcmVxdWlyaW5nIGF1ZGl0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy9jb2xsZWN0aW9uLyoqLyoudHMnLFxuICAgIHJlYXNvbjogJ01hcmtldHBsYWNlIG9wZXJhdGlvbnMgYXJlIG5vdCBzZWN1cml0eS1zZW5zaXRpdmUgcmVxdWlyaW5nIGF1ZGl0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy9wZXJzb25hLyoudHMnLFxuICAgIHJlYXNvbjogJ1BlcnNvbmEgb3BlcmF0aW9ucyBhcmUgdmFsaWRhdGVkIGF0IGVudHJ5IHBvaW50LCBub3Qgc2VjdXJpdHkgb3BlcmF0aW9ucydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvcGVyc29uYS8qKi8qLnRzJyxcbiAgICByZWFzb246ICdQZXJzb25hIG9wZXJhdGlvbnMgYXJlIHZhbGlkYXRlZCBhdCBlbnRyeSBwb2ludCwgbm90IHNlY3VyaXR5IG9wZXJhdGlvbnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL3NlcnZlci90b29scy8qKi8qLnRzJyxcbiAgICByZWFzb246ICdUb29sIGltcGxlbWVudGF0aW9ucyBkZWxlZ2F0ZSB0byBzZXJ2aWNlcyB0aGF0IGhhbmRsZSBzZWN1cml0eSdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvaW5kZXgudHMnLFxuICAgIHJlYXNvbjogJ01haW4gZW50cnkgcG9pbnQgZGVsZWdhdGVzIHNlY3VyaXR5IG9wZXJhdGlvbnMgdG8gc3BlY2lhbGl6ZWQgbW9kdWxlcydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvdXRpbHMvKi50cycsXG4gICAgcmVhc29uOiAnVXRpbGl0eSBmdW5jdGlvbnMgYXJlIG5vdCBzZWN1cml0eSBvcGVyYXRpb25zIHJlcXVpcmluZyBhdWRpdCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvdXBkYXRlLyoqLyoudHMnLFxuICAgIHJlYXNvbjogJ1VwZGF0ZSBzeXN0ZW0gaGFzIGl0cyBvd24gbG9nZ2luZyBhbmQgaXMgbm90IGEgZGlyZWN0IHNlY3VyaXR5IG9wZXJhdGlvbidcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvc2VydmVyL3R5cGVzLnRzJyxcbiAgICByZWFzb246ICdUeXBlIGRlZmluaXRpb24gZmlsZSBkb2VzIG5vdCBwZXJmb3JtIG9wZXJhdGlvbnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc2NyaXB0cy8qKi8qJyxcbiAgICByZWFzb246ICdCdWlsZCBzY3JpcHRzIGRvIG5vdCBwZXJmb3JtIHJ1bnRpbWUgc2VjdXJpdHkgb3BlcmF0aW9ucydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvcG9ydGZvbGlvL1BvcnRmb2xpb1N5bmNNYW5hZ2VyLnRzJyxcbiAgICByZWFzb246ICdQb3J0Zm9saW8gc3luYyBvcGVyYXRpb25zIGFyZSBmaWxlIG1hbmFnZW1lbnQgdGFza3MsIG5vdCBzZWN1cml0eSBvcGVyYXRpb25zLiBTZWN1cml0eSB2YWxpZGF0aW9uIGhhcHBlbnMgYXQgdGhlIE1DUCByZXF1ZXN0IGxheWVyLidcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvaGFuZGxlcnMvU3luY0hhbmRsZXJWMi50cycsXG4gICAgcmVhc29uOiAnU3luYyBoYW5kbGVyIGRlbGVnYXRlcyB0byBQb3J0Zm9saW9TeW5jTWFuYWdlciB3aGljaCBoYW5kbGVzIGl0cyBvd24gbG9nZ2luZy4gU2VjdXJpdHkgdmFsaWRhdGlvbiBoYXBwZW5zIGF0IHRoZSBNQ1AgcmVxdWVzdCBsYXllci4nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL2hhbmRsZXJzL0NvbmZpZ0hhbmRsZXIudHMnLFxuICAgIHJlYXNvbjogJ0NvbmZpZyBoYW5kbGVyIG9wZXJhdGlvbnMgYXJlIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCwgbm90IHNlY3VyaXR5IG9wZXJhdGlvbnMuIENvbmZpZ01hbmFnZXIgaGFuZGxlcyBpdHMgb3duIGxvZ2dpbmcuJ1xuICB9LFxuICBcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBDb3ZlcmFnZSBSZXBvcnQgRmlsZXNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB7XG4gICAgcnVsZTogJyonLFxuICAgIGZpbGU6ICd0ZXN0L2NvdmVyYWdlLyoqLyonLFxuICAgIHJlYXNvbjogJ0NvdmVyYWdlIHJlcG9ydCBmaWxlcyBhcmUgYXV0by1nZW5lcmF0ZWQgYW5kIG5vdCBwYXJ0IG9mIHRoZSBhcHBsaWNhdGlvbiBjb2RlJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJyonLFxuICAgIGZpbGU6ICcqKi9sY292LXJlcG9ydC8qKi8qJyxcbiAgICByZWFzb246ICdMQ09WIGNvdmVyYWdlIHJlcG9ydCBmaWxlcyBhcmUgYXV0by1nZW5lcmF0ZWQgYW5kIG5vdCBwYXJ0IG9mIHRoZSBhcHBsaWNhdGlvbiBjb2RlJ1xuICB9LFxuICBcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBEb2N1bWVudGF0aW9uIGFuZCBOb24tQ29kZSBGaWxlc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJ2RvY3MvKiovKicsXG4gICAgcmVhc29uOiAnRG9jdW1lbnRhdGlvbiBmaWxlcyBpbmNsdWRpbmcgUUEgbWV0cmljcyBhbmQgcmVwb3J0cydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICcqJyxcbiAgICBmaWxlOiAnKiovKi5tZCcsXG4gICAgcmVhc29uOiAnTWFya2Rvd24gZG9jdW1lbnRhdGlvbiBmaWxlcydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICcqJyxcbiAgICBmaWxlOiAnKiovKi5qc29uJyxcbiAgICByZWFzb246ICdKU09OIGNvbmZpZ3VyYXRpb24gYW5kIGRhdGEgZmlsZXMgZG8gbm90IGV4ZWN1dGUgY29kZSdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICcqJyxcbiAgICBmaWxlOiAnTElDRU5TRScsXG4gICAgcmVhc29uOiAnTGljZW5zZSBmaWxlJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJyonLFxuICAgIGZpbGU6ICcuZ2l0aWdub3JlJyxcbiAgICByZWFzb246ICdHaXQgY29uZmlndXJhdGlvbiBmaWxlJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJyonLFxuICAgIGZpbGU6ICdwYWNrYWdlLWxvY2suanNvbicsXG4gICAgcmVhc29uOiAnTlBNIGxvY2sgZmlsZSAtIGF1dG8tZ2VuZXJhdGVkLCBubyB1c2VyIGlucHV0IHByb2Nlc3NpbmcnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJyoqLyoueW1sJyxcbiAgICByZWFzb246ICdZQU1MIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIGRhdGEsIG5vdCBjb2RlJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJyonLFxuICAgIGZpbGU6ICcqKi8qLnlhbWwnLFxuICAgIHJlYXNvbjogJ1lBTUwgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgZGF0YSwgbm90IGNvZGUnXG4gIH1cbl07XG5cbi8qKlxuICogVmFsaWRhdGUgc3VwcHJlc3Npb24gY29uZmlndXJhdGlvbiBhdCBzdGFydHVwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVN1cHByZXNzaW9ucygpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc2VlblBhdHRlcm5zID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIFxuICBmb3IgKGNvbnN0IHN1cHByZXNzaW9uIG9mIHN1cHByZXNzaW9ucykge1xuICAgIC8vIENoZWNrIGZvciBlbXB0eSByZWFzb25zXG4gICAgaWYgKCFzdXBwcmVzc2lvbi5yZWFzb24gfHwgc3VwcHJlc3Npb24ucmVhc29uLnRyaW0oKS5sZW5ndGggPCAxMCkge1xuICAgICAgZXJyb3JzLnB1c2goYFN1cHByZXNzaW9uIGZvciAke3N1cHByZXNzaW9uLnJ1bGV9IGhhcyBpbnN1ZmZpY2llbnQgcmVhc29uYCk7XG4gICAgfVxuICAgIFxuICAgIC8vIENoZWNrIGZvciB2YWxpZCBydWxlIHBhdHRlcm5zXG4gICAgY29uc3QgcnVsZVBhdHRlcm4gPSAvXihETUNQLVNFQy1cXGR7M318T1dBU1AtW0EtWl1cXGR7Mn0tXFxkezN9fENXRS1cXGQrLVxcZHszfXxcXCopJC87XG4gICAgaWYgKCFzdXBwcmVzc2lvbi5ydWxlLm1hdGNoKHJ1bGVQYXR0ZXJuKSkge1xuICAgICAgZXJyb3JzLnB1c2goYEludmFsaWQgcnVsZSBwYXR0ZXJuOiAke3N1cHByZXNzaW9uLnJ1bGV9YCk7XG4gICAgfVxuICAgIFxuICAgIC8vIENoZWNrIGZvciBkdXBsaWNhdGUgc3VwcHJlc3Npb25zXG4gICAgY29uc3Qga2V5ID0gYCR7c3VwcHJlc3Npb24ucnVsZX06JHtzdXBwcmVzc2lvbi5maWxlIHx8ICcqJ31gO1xuICAgIGlmIChzZWVuUGF0dGVybnMuaGFzKGtleSkpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBEdXBsaWNhdGUgc3VwcHJlc3Npb246ICR7a2V5fWApO1xuICAgIH1cbiAgICBzZWVuUGF0dGVybnMuYWRkKGtleSk7XG4gICAgXG4gICAgLy8gVmFsaWRhdGUgZ2xvYiBwYXR0ZXJuc1xuICAgIGlmIChzdXBwcmVzc2lvbi5maWxlPy5pbmNsdWRlcygnKionKSAmJiAhc3VwcHJlc3Npb24uZmlsZS5pbmNsdWRlcygnKiovJykpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBJbnZhbGlkIGdsb2IgcGF0dGVybiBpbiAke3N1cHByZXNzaW9uLmZpbGV9IC0gKiogbXVzdCBiZSBmb2xsb3dlZCBieSAvYCk7XG4gICAgfVxuICB9XG4gIFxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIENvbnZlcnQgZ2xvYiBwYXR0ZXJuIHRvIHJlZ2V4IHBhdHRlcm4gc2FmZWx5XG4gKiBVc2luZyBhIHByb3BlciBnbG9iLXRvLXJlZ2V4IGNvbnZlcnNpb24gdGhhdCBoYW5kbGVzIGFsbCBlZGdlIGNhc2VzXG4gKi9cbmZ1bmN0aW9uIGdsb2JUb1JlZ2V4KGdsb2I6IHN0cmluZyk6IFJlZ0V4cCB7XG4gIC8vIENoZWNrIGNhY2hlIGZpcnN0XG4gIGNvbnN0IGNhY2hlZCA9IGNhY2hlLmdldFJlZ2V4KGdsb2IpO1xuICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkO1xuICBcbiAgLy8gU3BlY2lhbCBjYXNlOiBpZiBnbG9iIHN0YXJ0cyB3aXRoICosIGl0IHNob3VsZCBtYXRjaCBhbnl0aGluZyBhdCB0aGUgYmVnaW5uaW5nXG4gIGxldCBwcm9jZXNzZWRHbG9iID0gZ2xvYjtcbiAgbGV0IHByZWZpeCA9ICcnO1xuICBpZiAoZ2xvYi5zdGFydHNXaXRoKCcqJykgJiYgIWdsb2Iuc3RhcnRzV2l0aCgnKionKSkge1xuICAgIHByZWZpeCA9ICcoPzouKi8pPyc7ICAvLyBPcHRpb25hbCBwYXRoIHByZWZpeFxuICAgIHByb2Nlc3NlZEdsb2IgPSBnbG9iLnN1YnN0cmluZygxKTtcbiAgfVxuICBcbiAgLy8gRXNjYXBlIGFsbCByZWdleCBzcGVjaWFsIGNoYXJhY3RlcnMgZXhjZXB0ICogYW5kIC9cbiAgLy8gRml4ZWQ6IFByb3Blcmx5IGVzY2FwZSBiYWNrc2xhc2hlcyBhbmQgb3RoZXIgc3BlY2lhbCByZWdleCBjaGFyYWN0ZXJzXG4gIGxldCBwYXR0ZXJuID0gcHJvY2Vzc2VkR2xvYi5yZXBsYWNlKC9bXFxcXF4kLigpKz97fVtcXF18XS9nLCAnXFxcXCQmJyk7XG4gIFxuICAvLyBIYW5kbGUgZ2xvYiBwYXR0ZXJucyBpbiBjb3JyZWN0IG9yZGVyXG4gIC8vIFJlcGxhY2UgKiogYmVmb3JlICogdG8gYXZvaWQgY29uZmxpY3RzXG4gIHBhdHRlcm4gPSBwYXR0ZXJuXG4gICAgLnJlcGxhY2UoL1xcKlxcKi9nLCAnPDxHTE9CU1RBUj4+JykgICAgIC8vIFRlbXBvcmFyeSBwbGFjZWhvbGRlciBmb3IgKipcbiAgICAucmVwbGFjZSgvXFwqL2csICc8PFNUQVI+PicpICAgICAgICAgICAgLy8gVGVtcG9yYXJ5IHBsYWNlaG9sZGVyIGZvciAqXG4gICAgLnJlcGxhY2UoLzw8R0xPQlNUQVI+PlxcLy9nLCAnKD86LiovKT8nKSAvLyAqKi8gbWF0Y2hlcyBhbnkgbnVtYmVyIG9mIGRpcmVjdG9yaWVzIGluY2x1ZGluZyBub25lXG4gICAgLnJlcGxhY2UoLzw8R0xPQlNUQVI+Pi9nLCAnLionKSAgICAgICAvLyAqKiBtYXRjaGVzIGFueXRoaW5nXG4gICAgLnJlcGxhY2UoLzw8U1RBUj4+L2csICdbXi9dKicpICAgICAgICAvLyAqIG1hdGNoZXMgYW55dGhpbmcgZXhjZXB0IGRpcmVjdG9yeSBzZXBhcmF0b3JcbiAgICAucmVwbGFjZSgvXFwvL2csICdcXFxcLycpOyAgICAgICAgICAgICAgICAvLyBFc2NhcGUgZm9yd2FyZCBzbGFzaGVzXG4gIFxuICAvLyBDb21iaW5lIHByZWZpeCBhbmQgcGF0dGVyblxuICBjb25zdCBmdWxsUGF0dGVybiA9IHByZWZpeCArIHBhdHRlcm47XG4gIFxuICAvLyBBZGQgYW5jaG9ycyB0byBlbnN1cmUgZnVsbCBwYXRoIG1hdGNoXG4gIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgXiR7ZnVsbFBhdHRlcm59JGApO1xuICBcbiAgLy8gQ2FjaGUgdGhlIGNvbXBpbGVkIHJlZ2V4XG4gIGNhY2hlLnNldFJlZ2V4KGdsb2IsIHJlZ2V4KTtcbiAgXG4gIHJldHVybiByZWdleDtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgZmlsZSBwYXRoIGZvciBjb25zaXN0ZW50IG1hdGNoaW5nXG4gKiBIYW5kbGVzIGJvdGggYWJzb2x1dGUgYW5kIHJlbGF0aXZlIHBhdGhzIGFjcm9zcyBkaWZmZXJlbnQgcGxhdGZvcm1zXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgoZmlsZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIENvbnZlcnQgYmFja3NsYXNoZXMgdG8gZm9yd2FyZCBzbGFzaGVzIGZvciBXaW5kb3dzIHBhdGhzXG4gIGxldCBub3JtYWxpemVkID0gZmlsZVBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICBcbiAgLy8gUmVtb3ZlIGR1cGxpY2F0ZSBzbGFzaGVzXG4gIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVkLnJlcGxhY2UoL1xcLysvZywgJy8nKTtcbiAgXG4gIC8vIFJlbW92ZSB0cmFpbGluZyBzbGFzaCBpZiBwcmVzZW50XG4gIGlmIChub3JtYWxpemVkLmVuZHNXaXRoKCcvJykgJiYgbm9ybWFsaXplZC5sZW5ndGggPiAxKSB7XG4gICAgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQuc2xpY2UoMCwgLTEpO1xuICB9XG4gIFxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHJlbGF0aXZlIHBhdGggZnJvbSBhYnNvbHV0ZSBwYXRoXG4gKiBIYW5kbGVzIHZhcmlvdXMgQ0kvQ0QgYW5kIGxvY2FsIGRldmVsb3BtZW50IHBhdGggZm9ybWF0c1xuICovXG5mdW5jdGlvbiBnZXRSZWxhdGl2ZVBhdGgoYWJzb2x1dGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplUGF0aChhYnNvbHV0ZVBhdGgpO1xuICBcbiAgLy8gSWYgYWxyZWFkeSBhIHJlbGF0aXZlIHBhdGgsIHJldHVybiBhcy1pc1xuICBpZiAoIW5vcm1hbGl6ZWQuc3RhcnRzV2l0aCgnLycpICYmICFub3JtYWxpemVkLm1hdGNoKC9eW0EtWl06L2kpKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gIH1cbiAgXG4gIC8vIERlZmluZSBjb21tb24gcHJvamVjdCBzb3VyY2UgZGlyZWN0b3JpZXNcbiAgY29uc3QgcHJvamVjdERpcnMgPSBbJ3NyYy8nLCAnX190ZXN0c19fLycsICdzY3JpcHRzLycsICdkb2NzLycsICd0ZXN0LycsICd0ZXN0cy8nLCAnbGliLyddO1xuICBcbiAgLy8gRmluZCB0aGUgcG9zaXRpb24gb2YgY29tbW9uIHByb2plY3QgZGlyZWN0b3JpZXMgaW4gdGhlIHBhdGhcbiAgbGV0IGJlc3RNYXRjaCA9IHsgaW5kZXg6IC0xLCBkaXI6ICcnLCByZWxhdGl2ZVBhdGg6ICcnIH07XG4gIFxuICBmb3IgKGNvbnN0IGRpciBvZiBwcm9qZWN0RGlycykge1xuICAgIC8vIExvb2sgZm9yIC9kaXIgcGF0dGVybiAod2l0aCBsZWFkaW5nIHNsYXNoIHRvIGF2b2lkIGZhbHNlIG1hdGNoZXMpXG4gICAgY29uc3Qgc2VhcmNoUGF0dGVybiA9IGAvJHtkaXJ9YDtcbiAgICBjb25zdCBpbmRleCA9IG5vcm1hbGl6ZWQubGFzdEluZGV4T2Yoc2VhcmNoUGF0dGVybik7XG4gICAgXG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIC8vIEV4dHJhY3QgZXZlcnl0aGluZyBhZnRlciB0aGUgcGFyZW50IG9mIHRoaXMgZGlyZWN0b3J5XG4gICAgICAvLyBGb3IgZXhhbXBsZTogL2hvbWUvdXNlci9wcm9qZWN0L3NyYy9maWxlLnRzIC0+IHNyYy9maWxlLnRzXG4gICAgICBjb25zdCBkaXJTdGFydEluZGV4ID0gaW5kZXggKyAxOyAvLyBTa2lwIHRoZSBsZWFkaW5nIHNsYXNoXG4gICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBub3JtYWxpemVkLnN1YnN0cmluZyhkaXJTdGFydEluZGV4KTtcbiAgICAgIFxuICAgICAgLy8gVmVyaWZ5IHRoaXMgbG9va3MgbGlrZSBhIHZhbGlkIHByb2plY3QgZmlsZVxuICAgICAgaWYgKHJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKGRpcikgJiYgcmVsYXRpdmVQYXRoLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgICAgLy8gS2VlcCB0aGUgbWF0Y2ggdGhhdCBhcHBlYXJzIGxhdGVzdCBpbiB0aGUgcGF0aCAobW9zdCBzcGVjaWZpYylcbiAgICAgICAgaWYgKGluZGV4ID4gYmVzdE1hdGNoLmluZGV4KSB7XG4gICAgICAgICAgYmVzdE1hdGNoID0geyBpbmRleCwgZGlyLCByZWxhdGl2ZVBhdGggfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgLy8gSWYgd2UgZm91bmQgYSBtYXRjaCwgcmV0dXJuIGl0XG4gIGlmIChiZXN0TWF0Y2guaW5kZXggPj0gMCkge1xuICAgIHJldHVybiBiZXN0TWF0Y2gucmVsYXRpdmVQYXRoO1xuICB9XG4gIFxuICAvLyBGYWxsYmFjazogVHJ5IHRvIGZpbmQgY29tbW9uIGZpbGUgcGF0dGVybnMgdGhhdCBpbmRpY2F0ZSBwcm9qZWN0IGZpbGVzXG4gIGNvbnN0IGZpbGVQYXR0ZXJucyA9IFtcbiAgICAvXFwvKHNyY3xfX3Rlc3RzX198c2NyaXB0c3x0ZXN0fHRlc3RzfGxpYilcXC8uKlxcLltqdF1zeD8kLyxcbiAgICAvXFwvKHNyY3xfX3Rlc3RzX198c2NyaXB0c3x0ZXN0fHRlc3RzfGxpYilcXC8uKlxcLmpzb24kLyxcbiAgICAvXFwvKHNyY3xfX3Rlc3RzX198c2NyaXB0c3x0ZXN0fHRlc3RzfGxpYilcXC8uKlxcLnlhP21sJC8sXG4gICAgL1xcL3BhY2thZ2VcXC5qc29uJC8sXG4gICAgL1xcL3BhY2thZ2UtbG9ja1xcLmpzb24kLyxcbiAgICAvXFwvdHNjb25maWcuKlxcLmpzb24kLyxcbiAgICAvXFwvXFwuLipyY1xcLmpzb24kLyAgLy8gLmVzbGludHJjLmpzb24sIGV0Yy5cbiAgXTtcbiAgXG4gIGZvciAoY29uc3QgcGF0dGVybiBvZiBmaWxlUGF0dGVybnMpIHtcbiAgICBjb25zdCBtYXRjaCA9IG5vcm1hbGl6ZWQubWF0Y2gocGF0dGVybik7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICAvLyBGaW5kIHdoZXJlIHRoZSBtYXRjaCBzdGFydHMgYW5kIGV4dHJhY3QgZnJvbSB0aGVyZVxuICAgICAgY29uc3QgbWF0Y2hJbmRleCA9IG5vcm1hbGl6ZWQuaW5kZXhPZihtYXRjaFswXSk7XG4gICAgICBpZiAobWF0Y2hJbmRleCA+PSAwKSB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVkLnN1YnN0cmluZyhtYXRjaEluZGV4ICsgMSk7IC8vIFNraXAgbGVhZGluZyAvXG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICAvLyBMYXN0IHJlc29ydDogaWYgcGF0aCBjb250YWlucyBjb21tb24gZXh0ZW5zaW9ucywgdHJ5IHRvIGV4dHJhY3QgYSByZWFzb25hYmxlIHJlbGF0aXZlIHBhdGhcbiAgaWYgKG5vcm1hbGl6ZWQubWF0Y2goL1xcLih0c3xqc3x0c3h8anN4fGpzb258eWFtbHx5bWwpJC8pKSB7XG4gICAgLy8gRmluZCB0aGUgbGFzdCBzZWdtZW50IHRoYXQgbG9va3MgbGlrZSBhIHByb2plY3QgZGlyZWN0b3J5XG4gICAgY29uc3Qgc2VnbWVudHMgPSBub3JtYWxpemVkLnNwbGl0KCcvJyk7XG4gICAgZm9yIChsZXQgaSA9IHNlZ21lbnRzLmxlbmd0aCAtIDI7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAocHJvamVjdERpcnMuc29tZShkaXIgPT4gZGlyLnN0YXJ0c1dpdGgoc2VnbWVudHNbaV0pKSkge1xuICAgICAgICByZXR1cm4gc2VnbWVudHMuc2xpY2UoaSkuam9pbignLycpO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBGb3Igcm9vdC1sZXZlbCBmaWxlcyBsaWtlIHBhY2thZ2UtbG9jay5qc29uLCBqdXN0IHJldHVybiB0aGUgZmlsZW5hbWVcbiAgICBjb25zdCBmaWxlbmFtZSA9IHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdO1xuICAgIGlmIChmaWxlbmFtZSAmJiBmaWxlbmFtZS5pbmNsdWRlcygnLicpKSB7XG4gICAgICByZXR1cm4gZmlsZW5hbWU7XG4gICAgfVxuICB9XG4gIFxuICAvLyBSZXR1cm4gdGhlIG5vcm1hbGl6ZWQgcGF0aCBpZiB3ZSBjYW4ndCBleHRyYWN0IHJlbGF0aXZlXG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgZmluZGluZyBzaG91bGQgYmUgc3VwcHJlc3NlZFxuICogT3B0aW1pemVkIHdpdGggY2FjaGluZyBhbmQgZWFybHkgcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkU3VwcHJlc3MocnVsZUlkOiBzdHJpbmcsIGZpbGVQYXRoPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICghZmlsZVBhdGgpIHJldHVybiBmYWxzZTtcbiAgXG4gIC8vIE5vcm1hbGl6ZSBwYXRocyBmb3IgY29uc2lzdGVudCBtYXRjaGluZ1xuICBjb25zdCBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZVBhdGgoZmlsZVBhdGgpO1xuICBjb25zdCByZWxhdGl2ZVBhdGggPSBnZXRSZWxhdGl2ZVBhdGgobm9ybWFsaXplZFBhdGgpO1xuICBcbiAgLy8gQ2hlY2sgY2FjaGUgZmlyc3RcbiAgY29uc3QgY2FjaGVkID0gY2FjaGUuZ2V0KHJ1bGVJZCwgcmVsYXRpdmVQYXRoKTtcbiAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gY2FjaGVkO1xuICBcbiAgLy8gUHJvY2VzcyBzdXBwcmVzc2lvbnMgd2l0aCBlYXJseSByZXR1cm5zXG4gIGZvciAoY29uc3Qgc3VwcHJlc3Npb24gb2Ygc3VwcHJlc3Npb25zKSB7XG4gICAgLy8gU2tpcCBpZiBydWxlIGRvZXNuJ3QgbWF0Y2hcbiAgICBpZiAoc3VwcHJlc3Npb24ucnVsZSAhPT0gJyonICYmIHN1cHByZXNzaW9uLnJ1bGUgIT09IHJ1bGVJZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIFxuICAgIC8vIEhhbmRsZSBnbG9iYWwgc3VwcHJlc3Npb25zIChubyBmaWxlIHNwZWNpZmllZClcbiAgICBpZiAoIXN1cHByZXNzaW9uLmZpbGUpIHtcbiAgICAgIGNhY2hlLnNldChydWxlSWQsIHJlbGF0aXZlUGF0aCwgdHJ1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgZXhhY3QgZmlsZSBtYXRjaCAobW9zdCBjb21tb24gY2FzZSlcbiAgICBpZiAoc3VwcHJlc3Npb24uZmlsZSA9PT0gcmVsYXRpdmVQYXRoIHx8IHN1cHByZXNzaW9uLmZpbGUgPT09IG5vcm1hbGl6ZWRQYXRoKSB7XG4gICAgICBjYWNoZS5zZXQocnVsZUlkLCByZWxhdGl2ZVBhdGgsIHRydWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIFxuICAgIC8vIENoZWNrIHBhdHRlcm4gbWF0Y2ggb25seSBpZiBmaWxlIGNvbnRhaW5zIHdpbGRjYXJkc1xuICAgIGlmIChzdXBwcmVzc2lvbi5maWxlLmluY2x1ZGVzKCcqJykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gZ2xvYlRvUmVnZXgoc3VwcHJlc3Npb24uZmlsZSk7XG4gICAgICAgIGlmIChyZWdleC50ZXN0KHJlbGF0aXZlUGF0aCkgfHwgcmVnZXgudGVzdChub3JtYWxpemVkUGF0aCkpIHtcbiAgICAgICAgICBjYWNoZS5zZXQocnVsZUlkLCByZWxhdGl2ZVBhdGgsIHRydWUpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYEludmFsaWQgc3VwcHJlc3Npb24gcGF0dGVybiBcIiR7c3VwcHJlc3Npb24uZmlsZX1cIjpgLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICAvLyBOb3Qgc3VwcHJlc3NlZFxuICBjYWNoZS5zZXQocnVsZUlkLCByZWxhdGl2ZVBhdGgsIGZhbHNlKTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENsZWFyIHN1cHByZXNzaW9uIGNhY2hlICh1c2VmdWwgZm9yIHRlc3RpbmcpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhclN1cHByZXNzaW9uQ2FjaGUoKTogdm9pZCB7XG4gIGNhY2hlLmNsZWFyKCk7XG59XG5cbi8qKlxuICogR2V0IHN1cHByZXNzaW9uIHN0YXRpc3RpY3MgZm9yIHJlcG9ydGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3VwcHJlc3Npb25TdGF0cygpOiB7IFxuICB0b3RhbDogbnVtYmVyOyBcbiAgYnlSdWxlOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuICBieUNhdGVnb3J5OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xufSB7XG4gIGNvbnN0IHN0YXRzID0ge1xuICAgIHRvdGFsOiBzdXBwcmVzc2lvbnMubGVuZ3RoLFxuICAgIGJ5UnVsZToge30gYXMgUmVjb3JkPHN0cmluZywgbnVtYmVyPixcbiAgICBieUNhdGVnb3J5OiB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+XG4gIH07XG4gIFxuICBmb3IgKGNvbnN0IHN1cHByZXNzaW9uIG9mIHN1cHByZXNzaW9ucykge1xuICAgIC8vIENvdW50IGJ5IHJ1bGVcbiAgICBzdGF0cy5ieVJ1bGVbc3VwcHJlc3Npb24ucnVsZV0gPSAoc3RhdHMuYnlSdWxlW3N1cHByZXNzaW9uLnJ1bGVdIHx8IDApICsgMTtcbiAgICBcbiAgICAvLyBDb3VudCBieSBjYXRlZ29yeSAoZXh0cmFjdCBmcm9tIHJ1bGUgcHJlZml4KVxuICAgIGNvbnN0IGNhdGVnb3J5ID0gc3VwcHJlc3Npb24ucnVsZS5zcGxpdCgnLScpWzBdO1xuICAgIHN0YXRzLmJ5Q2F0ZWdvcnlbY2F0ZWdvcnldID0gKHN0YXRzLmJ5Q2F0ZWdvcnlbY2F0ZWdvcnldIHx8IDApICsgMTtcbiAgfVxuICBcbiAgcmV0dXJuIHN0YXRzO1xufVxuXG4vLyBWYWxpZGF0ZSBzdXBwcmVzc2lvbnMgb24gbW9kdWxlIGxvYWRcbmNvbnN0IHZhbGlkYXRpb25FcnJvcnMgPSB2YWxpZGF0ZVN1cHByZXNzaW9ucygpO1xuaWYgKHZhbGlkYXRpb25FcnJvcnMubGVuZ3RoID4gMCkge1xuICBsb2dnZXIud2FybignU3VwcHJlc3Npb24gY29uZmlndXJhdGlvbiB3YXJuaW5nczonLCB2YWxpZGF0aW9uRXJyb3JzKTtcbn0iXX0=
778
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcHJlc3Npb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NlY3VyaXR5L2F1ZGl0L2NvbmZpZy9zdXBwcmVzc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFHSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFRbEQ7O0dBRUc7QUFDSCxNQUFNLGdCQUFnQjtJQUNaLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztJQUNuQyxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFFL0MsS0FBSztRQUNILElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQWMsRUFBRSxRQUFnQjtRQUMxQyxPQUFPLEdBQUcsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxHQUFHLENBQUMsTUFBYyxFQUFFLFFBQWdCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsR0FBRyxDQUFDLE1BQWMsRUFBRSxRQUFnQixFQUFFLEtBQWM7UUFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUFlO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUFlLEVBQUUsS0FBYTtRQUNyQyxJQUFJLENB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K0M7UUFDL0MsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCx1Q0FBdUM7QUFDdkMsTUFBTSxnQkFBZ0IsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO0FBQ2hELElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2hDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUNBQXFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUN2RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTZWN1cml0eSBBdWRpdCBTdXBwcmVzc2lvbiBDb25maWd1cmF0aW9uXG4gKiBcbiAqIFRoaXMgZmlsZSBjb250YWlucyBzdXBwcmVzc2lvbiBydWxlcyBmb3IgZmFsc2UgcG9zaXRpdmVzIGluIHRoZSBzZWN1cml0eSBhdWRpdC5cbiAqIEVhY2ggc3VwcHJlc3Npb24gc2hvdWxkIGJlIHdlbGwtZG9jdW1lbnRlZCB3aXRoIGEgY2xlYXIgcmVhc29uLlxuICovXG5cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi8uLi91dGlscy9sb2dnZXIuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN1cHByZXNzaW9uIHtcbiAgcnVsZTogc3RyaW5nO1xuICBmaWxlPzogc3RyaW5nO1xuICByZWFzb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBTdXBwcmVzc2lvbiBjYWNoZSBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uXG4gKi9cbmNsYXNzIFN1cHByZXNzaW9uQ2FjaGUge1xuICBwcml2YXRlIGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG4gIHByaXZhdGUgcmVnZXhDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBSZWdFeHA+KCk7XG4gIFxuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5yZWdleENhY2hlLmNsZWFyKCk7XG4gIH1cbiAgXG4gIGdldENhY2hlS2V5KHJ1bGVJZDogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7cnVsZUlkfTo6JHtmaWxlUGF0aH1gO1xuICB9XG4gIFxuICBnZXQocnVsZUlkOiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZS5nZXQodGhpcy5nZXRDYWNoZUtleShydWxlSWQsIGZpbGVQYXRoKSk7XG4gIH1cbiAgXG4gIHNldChydWxlSWQ6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLnNldCh0aGlzLmdldENhY2hlS2V5KHJ1bGVJZCwgZmlsZVBhdGgpLCB2YWx1ZSk7XG4gIH1cbiAgXG4gIGdldFJlZ2V4KHBhdHRlcm46IHN0cmluZyk6IFJlZ0V4cCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVnZXhDYWNoZS5nZXQocGF0dGVybik7XG4gIH1cbiAgXG4gIHNldFJlZ2V4KHBhdHRlcm46IHN0cmluZywgcmVnZXg6IFJlZ0V4cCk6IHZvaWQge1xuICAgIHRoaXMucmVnZXhDYWNoZS5zZXQocGF0dGVybiwgcmVnZXgpO1xuICB9XG59XG5cbmNvbnN0IGNhY2hlID0gbmV3IFN1cHByZXNzaW9uQ2FjaGUoKTtcblxuZXhwb3J0IGNvbnN0IHN1cHByZXNzaW9uczogU3VwcHJlc3Npb25bXSA9IFtcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBTUUwgSW5qZWN0aW9uIEZhbHNlIFBvc2l0aXZlc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHtcbiAgICBydWxlOiAnQ1dFLTg5LTAwMScsXG4gICAgZmlsZTogJ3NyYy91cGRhdGUvVXBkYXRlTWFuYWdlci50cycsXG4gICAgcmVhc29uOiAnRmFsc2UgcG9zaXRpdmUgLSBcIlVwZGF0ZSBGYWlsZWRcIiBpcyBhIFVJIG1lc3NhZ2UsIG5vdCBTUUwuIFRoZSBjb2RlYmFzZSBkb2VzIG5vdCB1c2UgU1FMLidcbiAgfSxcbiAgXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVGVzdCBGaWxlIFN1cHByZXNzaW9uc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJ19fdGVzdHNfXy8qKi8qJyxcbiAgICByZWFzb246ICdUZXN0IGZpbGVzIG1heSBjb250YWluIGludGVudGlvbmFsIHNlY3VyaXR5IHBhdHRlcm5zIGZvciB0ZXN0aW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJyonLFxuICAgIGZpbGU6ICcqKi8qLnRlc3QudHMnLFxuICAgIHJlYXNvbjogJ1Rlc3QgZmlsZXMgbWF5IGNvbnRhaW4gaW50ZW50aW9uYWwgc2VjdXJpdHkgcGF0dGVybnMgZm9yIHRlc3RpbmcnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJyoqLyouc3BlYy50cycsXG4gICAgcmVhc29uOiAnVGVzdCBmaWxlcyBtYXkgY29udGFpbiBpbnRlbnRpb25hbCBzZWN1cml0eSBwYXR0ZXJucyBmb3IgdGVzdGluZydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICd0ZXN0LyoqLyonLFxuICAgIHJlYXNvbjogJ1Rlc3QgdXRpbGl0aWVzIGFuZCBFMkUgdGVzdHMgZG8gbm90IHByb2Nlc3MgdW50cnVzdGVkIHVzZXIgaW5wdXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAndGVzdC8qKi8qJyxcbiAgICByZWFzb246ICdBdWRpdCBsb2dnaW5nIG5vdCByZXF1aXJlZCBmb3IgdGVzdCB1dGlsaXRpZXMgYW5kIEUyRSB0ZXN0cydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdPV0FTUC1BMDMtMDAzJyxcbiAgICBmaWxlOiAndGVzdC9lMmUvY2xlYW51cC10ZXN0LWRhdGEudHMnLFxuICAgIHJlYXNvbjogJ0ZhbHNlIHBvc2l0aXZlIC0gY29uc29sZS5sb2cgbWVzc2FnZSBzdHJpbmcgbGl0ZXJhbCwgbm90IGEgcGF0aCBvcGVyYXRpb24nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnT1dBU1AtQTAxLTAwMScsXG4gICAgZmlsZTogJ19fdGVzdHNfXy8qKi8qJyxcbiAgICByZWFzb246ICdUZXN0IGZpbGVzIHVzZSBmYWtlIHRva2VucyBhbmQgc2VjcmV0cyBmb3IgdGVzdGluZyBzZWN1cml0eSBmZWF0dXJlcydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdDV0UtODktMDAxJyxcbiAgICBmaWxlOiAnX190ZXN0c19fLyoqLyonLFxuICAgIHJlYXNvbjogJ1Rlc3QgZmlsZXMgY29udGFpbiBTUUwgaW5qZWN0aW9uIHBhdHRlcm5zIGZvciBzZWN1cml0eSB0ZXN0aW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ09XQVNQLUEwMy0wMDInLFxuICAgIGZpbGU6ICdfX3Rlc3RzX18vKiovKicsXG4gICAgcmVhc29uOiAnVGVzdCBmaWxlcyBjb250YWluIGNvbW1hbmQgaW5qZWN0aW9uIHBhdHRlcm5zIGZvciBzZWN1cml0eSB0ZXN0aW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ09XQVNQLUEwMy0wMDMnLFxuICAgIGZpbGU6ICdfX3Rlc3RzX18vKiovKicsXG4gICAgcmVhc29uOiAnVGVzdCBmaWxlcyBjb250YWluIHBhdGggdHJhdmVyc2FsIHBhdHRlcm5zIGZvciBzZWN1cml0eSB0ZXN0aW5nJ1xuICB9LFxuICBcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBZQU1MIFBhcnNpbmcgRmFsc2UgUG9zaXRpdmVzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDUnLFxuICAgIGZpbGU6ICdzcmMvc2VjdXJpdHkveWFtbFZhbGlkYXRvci50cycsXG4gICAgcmVhc29uOiAnWWFtbFZhbGlkYXRvciBpcyB0aGUgc2VjdXJpdHkgdmFsaWRhdGlvbiBsYXllciBpdHNlbGYgLSBpdCBuZWVkcyBkaXJlY3QgeWFtbC5sb2FkIGFjY2VzcydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDUnLFxuICAgIGZpbGU6ICdzcmMvc2VjdXJpdHkvc2VjdXJlWWFtbFBhcnNlci50cycsXG4gICAgcmVhc29uOiAnU2VjdXJlWWFtbFBhcnNlciBpcyB0aGUgc2VjdXJpdHkgd3JhcHBlciB0aGF0IHZhbGlkYXRlcyBZQU1MIGJlZm9yZSBwYXJzaW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNScsXG4gICAgZmlsZTogJ3NyYy9lbGVtZW50cy9za2lsbHMvU2tpbGxNYW5hZ2VyLnRzJyxcbiAgICByZWFzb246ICdVc2VzIHlhbWwubG9hZCB3aXRoIEZBSUxTQUZFX1NDSEVNQSBhbmQgc2l6ZSB2YWxpZGF0aW9uIC0gZXF1aXZhbGVudCBzZWN1cml0eSB0byBTZWN1cmVZYW1sUGFyc2VyIGZvciByYXcgWUFNTCBpbXBvcnQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA1JyxcbiAgICBmaWxlOiAnc3JjL3Rvb2xzL3BvcnRmb2xpby9zdWJtaXRUb1BvcnRmb2xpb1Rvb2wudHMnLFxuICAgIHJlYXNvbjogJ0ZhbHNlIHBvc2l0aXZlIC0gVXNlcyBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlKCkgd2hpY2ggaXMgdGhlIHNlY3VyZSBpbXBsZW1lbnRhdGlvbiBkZXNpZ25lZCB0byBwcmV2ZW50IFlBTUwgdnVsbmVyYWJpbGl0aWVzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNScsXG4gICAgZmlsZTogJ3NyYy9jb25maWcvQ29uZmlnTWFuYWdlci50cycsXG4gICAgcmVhc29uOiAnSU5URU5USU9OQUw6IFVzZXMganMteWFtbCB3aXRoIEZBSUxTQUZFX1NDSEVNQSBmb3IgcHVyZSBZQU1MIGNvbmZpZyBmaWxlcy4gVGhpcyBwcmV2ZW50cyBjb2RlIGV4ZWN1dGlvbiBhbmQgaXMgdGhlIGFwcHJvcHJpYXRlIHNlY3VyaXR5IG1lYXN1cmUgZm9yIGNvbmZpZyBmaWxlcyB0aGF0IGFyZSBOT1QgbWFya2Rvd24gd2l0aCBmcm9udG1hdHRlci4gUmVncmVzc2lvbiB0ZXN0IGVuc3VyZXMgd2UgZG8gbm90IHVzZSBTZWN1cmVZYW1sUGFyc2VyIGhlcmUgd2hpY2ggd291bGQgcmVzZXQgY29uZmlnIHZhbHVlcy4nXG4gIH0sXG4gIFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIENsZWFyLXRleHQgTG9nZ2luZyBGYWxzZSBQb3NpdGl2ZXNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAxMCcsXG4gICAgZmlsZTogJ3NyYy91dGlscy9sb2dnZXIudHMnLFxuICAgIHJlYXNvbjogJ0ZBTFNFIFBPU0lUSVZFOiBUaGUgbG9nZ2VyIGFscmVhZHkgc2FuaXRpemVzIGFsbCBzZW5zaXRpdmUgZGF0YSB0aHJvdWdoIHNhbml0aXplTWVzc2FnZSgpIGFuZCBzYW5pdGl6ZU9iamVjdCgpIG1ldGhvZHMuIEFsbCBzZW5zaXRpdmUgZmllbGRzICh0b2tlbnMsIGtleXMsIHBhc3N3b3JkcywgZXRjLikgYXJlIHJlcGxhY2VkIHdpdGggW1JFREFDVEVEXSBiZWZvcmUgYW55IGNvbnNvbGUgb3V0cHV0LiBMaW5lcyAyODgsIDI5MSwgYW5kIDI5NSBvbmx5IGxvZyBwcmUtc2FuaXRpemVkIHNhZmUgbWVzc2FnZXMuJ1xuICB9LFxuICBcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBTZWN1cml0eSBSdWxlIERlZmluaXRpb24gRmlsZXNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB7XG4gICAgcnVsZTogJ09XQVNQLUEwMy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvc2VjdXJpdHkvYXVkaXQvcnVsZXMvU2VjdXJpdHlSdWxlcy50cycsXG4gICAgcmVhc29uOiAnVGhpcyBpcyBhIHJlZ2V4IHBhdHRlcm4gZGVmaW5pdGlvbiBmb3IgZGV0ZWN0aW5nIGlubmVySFRNTCB1c2FnZSwgbm90IGFjdHVhbCB1c2FnZSdcbiAgfSxcbiAgXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUGVyc29uYSBMb2FkaW5nIEZhbHNlIFBvc2l0aXZlc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDAxJyxcbiAgICBmaWxlOiAnc3JjL3BlcnNvbmEvUGVyc29uYUxvYWRlci50cycsXG4gICAgcmVhc29uOiAnUGVyc29uYUxvYWRlciB2YWxpZGF0ZXMgcGVyc29uYXMgdGhyb3VnaCBTZWN1cmVZYW1sUGFyc2VyIGFuZCBDb250ZW50VmFsaWRhdG9yJ1xuICB9LFxuICBcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBVbmljb2RlIE5vcm1hbGl6YXRpb24gRmFsc2UgUG9zaXRpdmVzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvdHlwZXMvKi50cycsXG4gICAgcmVhc29uOiAnVHlwZSBkZWZpbml0aW9uIGZpbGVzIGRvIG5vdCBwcm9jZXNzIHVzZXIgaW5wdXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3R5cGVzL2VsZW1lbnRzLyoudHMnLFxuICAgIHJlYXNvbjogJ0VsZW1lbnQgaW50ZXJmYWNlIGZpbGVzIGFyZSB0eXBlIGRlZmluaXRpb25zIHRoYXQgZG8gbm90IHByb2Nlc3MgdXNlciBpbnB1dCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvZXJyb3JzLyoudHMnLFxuICAgIHJlYXNvbjogJ0Vycm9yIGNsYXNzZXMgZG8gbm90IHByb2Nlc3MgdXNlciBpbnB1dCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvY29uZmlnLyoudHMnLFxuICAgIHJlYXNvbjogJ0NvbmZpZ3VyYXRpb24gZmlsZXMgZG8gbm90IHByb2Nlc3MgdXNlciBpbnB1dCBkaXJlY3RseSdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvY29uc3RhbnRzLyoudHMnLFxuICAgIHJlYXNvbjogJ0NvbnN0YW50IGRlZmluaXRpb24gZmlsZXMgZG8gbm90IHByb2Nlc3MgdXNlciBpbnB1dCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvZWxlbWVudHMvbWVtb3JpZXMvY29uc3RhbnRzLnRzJyxcbiAgICByZWFzb246ICdDb25zdGFudHMgZmlsZSAtIGNvbnRhaW5zIG9ubHkgdHlwZSBkZWZpbml0aW9ucyBhbmQgY29uc3RhbnRzLCBubyB1c2VyIGlucHV0IHByb2Nlc3NpbmcnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnKiovc3JjL2VsZW1lbnRzL21lbW9yaWVzL2NvbnN0YW50cy50cycsXG4gICAgcmVhc29uOiAnQ29uc3RhbnRzIGZpbGUgLSBjb250YWlucyBvbmx5IHR5cGUgZGVmaW5pdGlvbnMgYW5kIGNvbnN0YW50cywgbm8gdXNlciBpbnB1dCBwcm9jZXNzaW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJyoqL2VsZW1lbnRzL21lbW9yaWVzL2NvbnN0YW50cy50cycsXG4gICAgcmVhc29uOiAnQ29uc3RhbnRzIGZpbGUgLSBDSSBlbnZpcm9ubWVudHMgbWF5IGhhdmUgZGlmZmVyZW50IHBhdGggc3RydWN0dXJlcywgbm8gdXNlciBpbnB1dCBwcm9jZXNzaW5nJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ2VsZW1lbnRzL21lbW9yaWVzL2NvbnN0YW50cy50cycsXG4gICAgcmVhc29uOiAnQ29uc3RhbnRzIGZpbGUgLSBoYW5kbGVzIGNhc2Ugd2hlcmUgc3JjLyBwcmVmaXggaXMgc3RyaXBwZWQsIG5vIHVzZXIgaW5wdXQgcHJvY2Vzc2luZydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvZWxlbWVudHMvbWVtb3JpZXMvdXRpbHMudHMnLFxuICAgIHJlYXNvbjogJ01lbW9yeSB1dGlsaXRpZXMgLSBhbGwgZXh0ZXJuYWwgaW5wdXQgaXMgbm9ybWFsaXplZCB2aWEgVW5pY29kZVZhbGlkYXRvciBpbiB0aGUgZnVuY3Rpb25zIHRoZW1zZWx2ZXMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnKiovc3JjL2VsZW1lbnRzL21lbW9yaWVzL3V0aWxzLnRzJyxcbiAgICByZWFzb246ICdNZW1vcnkgdXRpbGl0aWVzIC0gYWxsIGV4dGVybmFsIGlucHV0IGlzIG5vcm1hbGl6ZWQgdmlhIFVuaWNvZGVWYWxpZGF0b3IgaW4gdGhlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJyoqL2VsZW1lbnRzL21lbW9yaWVzL3V0aWxzLnRzJyxcbiAgICByZWFzb246ICdNZW1vcnkgdXRpbGl0aWVzIC0gQ0kgcGF0aCB2YXJpYW50LCBhbGwgZXh0ZXJuYWwgaW5wdXQgaXMgbm9ybWFsaXplZCB2aWEgVW5pY29kZVZhbGlkYXRvcidcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdlbGVtZW50cy9tZW1vcmllcy91dGlscy50cycsXG4gICAgcmVhc29uOiAnTWVtb3J5IHV0aWxpdGllcyAtIHNyYy1zdHJpcHBlZCBwYXRoIHZhcmlhbnQsIGFsbCBleHRlcm5hbCBpbnB1dCBpcyBub3JtYWxpemVkIHZpYSBVbmljb2RlVmFsaWRhdG9yJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJyoqL21lbW9yaWVzLyoudHMnLFxuICAgIHJlYXNvbjogJ01lbW9yeSBlbGVtZW50IGZpbGVzIC0gYWxsIHVzZXIgaW5wdXQgaXMgcHJvcGVybHkgbm9ybWFsaXplZCBpbiBNZW1vcnkudHMgYW5kIE1lbW9yeU1hbmFnZXIudHMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL2VsZW1lbnRzL21lbW9yaWVzLyoudHMnLFxuICAgIHJlYXNvbjogJ01lbW9yeSBlbGVtZW50IGZpbGVzIC0gYWxsIHVzZXIgaW5wdXQgaXMgcHJvcGVybHkgbm9ybWFsaXplZCBpbiBNZW1vcnkudHMgYW5kIE1lbW9yeU1hbmFnZXIudHMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3V0aWxzL3ZlcnNpb24udHMnLFxuICAgIHJlYXNvbjogJ1ZlcnNpb24gdXRpbGl0eSBvbmx5IGhhbmRsZXMgaW50ZXJuYWwgdmVyc2lvbiBzdHJpbmdzLCBub3QgdXNlciBpbnB1dCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvY2FjaGUvKi50cycsXG4gICAgcmVhc29uOiAnQ2FjaGUgbGF5ZXIgcmVjZWl2ZXMgYWxyZWFkeS1ub3JtYWxpemVkIGlucHV0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9zZWN1cml0eS8qKi8qLnRzJyxcbiAgICByZWFzb246ICdTZWN1cml0eSBtb2R1bGVzIGhhbmRsZSB2YWxpZGF0aW9uIGFuZCBub3JtYWxpemF0aW9uIHRoZW1zZWx2ZXMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL2luZGV4LnRzJyxcbiAgICByZWFzb246ICdNYWluIGVudHJ5IHBvaW50IGRlbGVnYXRlcyB0byBTZXJ2ZXJTZXR1cCB3aGljaCBub3JtYWxpemVzIGFsbCBpbnB1dHMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3NlcnZlci9TZXJ2ZXJTZXR1cC50cycsXG4gICAgcmVhc29uOiAnVGhpcyBpcyB3aGVyZSBVbmljb2RlIG5vcm1hbGl6YXRpb24gaXMgaW1wbGVtZW50ZWQgZm9yIGFsbCB0b29sIGlucHV0cydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvY29sbGVjdGlvbi8qLnRzJyxcbiAgICByZWFzb246ICdNYXJrZXRwbGFjZSBtb2R1bGVzIHJlY2VpdmUgbm9ybWFsaXplZCBpbnB1dCBmcm9tIHRvb2wgaGFuZGxlcnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL2NvbGxlY3Rpb24vKiovKi50cycsXG4gICAgcmVhc29uOiAnTWFya2V0cGxhY2UgbW9kdWxlcyByZWNlaXZlIG5vcm1hbGl6ZWQgaW5wdXQgZnJvbSB0b29sIGhhbmRsZXJzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9wZXJzb25hLyoudHMnLFxuICAgIHJlYXNvbjogJ1BlcnNvbmEgbW9kdWxlcyByZWNlaXZlIG5vcm1hbGl6ZWQgaW5wdXQgZnJvbSB0b29sIGhhbmRsZXJzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9wZXJzb25hLyoqLyoudHMnLFxuICAgIHJlYXNvbjogJ1BlcnNvbmEgbW9kdWxlcyByZWNlaXZlIG5vcm1hbGl6ZWQgaW5wdXQgZnJvbSB0b29sIGhhbmRsZXJzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy91cGRhdGUvKi50cycsXG4gICAgcmVhc29uOiAnVXBkYXRlIG1vZHVsZXMgcmVjZWl2ZSBub3JtYWxpemVkIGlucHV0IGZyb20gdG9vbCBoYW5kbGVycydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvdG9vbHMvKi50cycsXG4gICAgcmVhc29uOiAnVG9vbCBmaWxlcyByZWNlaXZlIG5vcm1hbGl6ZWQgaW5wdXQgZnJvbSBTZXJ2ZXJTZXR1cCdcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDQnLFxuICAgIGZpbGU6ICdzcmMvc2VydmVyL3R5cGVzLnRzJyxcbiAgICByZWFzb246ICdUeXBlIGRlZmluaXRpb24gZmlsZSBkb2VzIG5vdCBwcm9jZXNzIHVzZXIgaW5wdXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3NlcnZlci90b29scy8qLnRzJyxcbiAgICByZWFzb246ICdTZXJ2ZXIgdG9vbHMgcmVjZWl2ZSBub3JtYWxpemVkIGlucHV0IGZyb20gU2VydmVyU2V0dXAnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc2NyaXB0cy8qKi8qJyxcbiAgICByZWFzb246ICdCdWlsZCBhbmQgdXRpbGl0eSBzY3JpcHRzIGRvIG5vdCBwcm9jZXNzIHVzZXIgaW5wdXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3Rvb2xzL3BvcnRmb2xpby90eXBlcy50cycsXG4gICAgcmVhc29uOiAnVHlwZSBkZWZpbml0aW9uIGZpbGUgY29udGFpbmluZyBvbmx5IFR5cGVTY3JpcHQgaW50ZXJmYWNlcyAtIG5vIHJ1bnRpbWUgY29kZSBvciB1c2VyIGlucHV0IHByb2Nlc3NpbmcnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAnc3JjL3Rvb2xzLyoqL3R5cGVzLnRzJyxcbiAgICByZWFzb246ICdUeXBlIGRlZmluaXRpb24gZmlsZXMgZG8gbm90IHByb2Nlc3MgdXNlciBpbnB1dCAtIGNvbXBpbGUtdGltZSBvbmx5J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9zZXJ2aWNlcy9CdWlsZEluZm9TZXJ2aWNlLnRzJyxcbiAgICByZWFzb246ICdCdWlsZEluZm9TZXJ2aWNlIG9ubHkgcHJvY2Vzc2VzIHN5c3RlbSBpbmZvcm1hdGlvbiAocGFja2FnZS5qc29uLCBnaXQgY29tbWFuZHMsIERvY2tlciBydW50aW1lKSAtIHRoZSBNQ1AgdG9vbCB0YWtlcyBubyBwYXJhbWV0ZXJzIGFuZCBubyB1c2VyIGlucHV0IGZsb3dzIHRocm91Z2ggdGhpcyBzZXJ2aWNlJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9oYW5kbGVycy9TeW5jSGFuZGxlclYyLnRzJyxcbiAgICByZWFzb246ICdTeW5jSGFuZGxlclYyIHJlY2VpdmVzIGFscmVhZHktbm9ybWFsaXplZCBpbnB1dCBmcm9tIHRoZSBNQ1AgcmVxdWVzdCBsYXllci4gQWxsIHVzZXIgaW5wdXQgaXMgbm9ybWFsaXplZCBpbiBTZXJ2ZXJTZXR1cCBiZWZvcmUgcmVhY2hpbmcgaGFuZGxlcnMuJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3NyYy9oYW5kbGVycy9Db25maWdIYW5kbGVyLnRzJyxcbiAgICByZWFzb246ICdDb25maWdIYW5kbGVyIHJlY2VpdmVzIGFscmVhZHktbm9ybWFsaXplZCBpbnB1dCBmcm9tIHRoZSBNQ1AgcmVxdWVzdCBsYXllci4gQWxsIHVzZXIgaW5wdXQgaXMgbm9ybWFsaXplZCBpbiBTZXJ2ZXJTZXR1cCBiZWZvcmUgcmVhY2hpbmcgaGFuZGxlcnMuJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3Rlc3Qtc3luYy1vcGVyYXRpb25zLmpzJyxcbiAgICByZWFzb246ICdUZXN0IHV0aWxpdHkgZmlsZSBmb3IgZGV2ZWxvcG1lbnQgdGVzdGluZy4gRG9lcyBub3QgcHJvY2VzcyBwcm9kdWN0aW9uIHVzZXIgaW5wdXQuJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJyoqL3Rlc3Qtc3luYy1vcGVyYXRpb25zLmpzJyxcbiAgICByZWFzb246ICdUZXN0IHV0aWxpdHkgZmlsZSBmb3IgZGV2ZWxvcG1lbnQgdGVzdGluZy4gRG9lcyBub3QgcHJvY2VzcyBwcm9kdWN0aW9uIHVzZXIgaW5wdXQuJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJ3Rlc3QtKi5qcycsXG4gICAgcmVhc29uOiAnVGVzdCB1dGlsaXR5IGZpbGVzIGluIHJvb3QgZGlyZWN0b3J5IGZvciBkZXZlbG9wbWVudCB0ZXN0aW5nLiBEbyBub3QgcHJvY2VzcyBwcm9kdWN0aW9uIHVzZXIgaW5wdXQuJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3Rlc3QtKi5qcycsXG4gICAgcmVhc29uOiAnVGVzdCB1dGlsaXR5IGZpbGVzIGluIHJvb3QgZGlyZWN0b3J5LiBBdWRpdCBsb2dnaW5nIG5vdCByZXF1aXJlZCBmb3IgZGV2ZWxvcG1lbnQgdGVzdCBzY3JpcHRzLidcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdPV0FTUC1BMDMtMDAyJyxcbiAgICBmaWxlOiAndGVzdC0qLmpzJyxcbiAgICByZWFzb246ICdUZXN0IHV0aWxpdHkgZmlsZXMgdXNpbmcgc3Bhd24gd2l0aCBhcnJheSBhcmd1bWVudHMgd2hpY2ggaXMgc2FmZSBmcm9tIGluamVjdGlvbi4nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnT1dBU1AtQTAzLTAwMicsXG4gICAgZmlsZTogJyoqL3Rlc3QtZWxlbWVudC1saWZlY3ljbGUuanMnLFxuICAgIHJlYXNvbjogJ0ZBTFNFIFBPU0lUSVZFOiBzcGF3biB3aXRoIGFycmF5IGFyZ3VtZW50cyBpcyBzYWZlIChubyBzaGVsbCBpbnZvY2F0aW9uKS4gR2l0SHViIHRva2VuIHBhc3NlZCBhcyBhcnJheSBlbGVtZW50LCBub3QgY29uY2F0ZW5hdGVkIGludG8gY29tbWFuZCBzdHJpbmcuJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJyoqL3Rlc3QtZWxlbWVudC1saWZlY3ljbGUuanMnLFxuICAgIHJlYXNvbjogJ0ZBTFNFIFBPU0lUSVZFOiBUZXN0IGhhcm5lc3Mgd2l0aCBubyB1c2VyIGlucHV0IG1lY2hhbmlzbXMuIEFsbCBkYXRhIGlzIGhhcmRjb2RlZCB0ZXN0IHNjZW5hcmlvcyBvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMuJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ09XQVNQLUEwMy0wMDInLFxuICAgIGZpbGU6ICd0ZXN0LWZ1bGwtdmFsaWRhdGlvbi5qcycsXG4gICAgcmVhc29uOiAnRkFMU0UgUE9TSVRJVkU6IHNwYXduIHdpdGggYXJyYXkgYXJndW1lbnRzIGlzIHNhZmUuIERvY2tlciBjb21tYW5kIHVzZXMgYXJyYXkgYXJncyBwcmV2ZW50aW5nIHNoZWxsIGluamVjdGlvbi4gTGluZSAzNzIuJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ09XQVNQLUEwMy0wMDInLFxuICAgIGZpbGU6ICcqKi90ZXN0LWZ1bGwtdmFsaWRhdGlvbi5qcycsXG4gICAgcmVhc29uOiAnRkFMU0UgUE9TSVRJVkU6IHNwYXduIHdpdGggYXJyYXkgYXJndW1lbnRzIGlzIHNhZmUuIERvY2tlciBjb21tYW5kIHVzZXMgYXJyYXkgYXJncyBwcmV2ZW50aW5nIHNoZWxsIGluamVjdGlvbi4nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA0JyxcbiAgICBmaWxlOiAndGVzdC1mdWxsLXZhbGlkYXRpb24uanMnLFxuICAgIHJlYXNvbjogJ1Rlc3QgdmFsaWRhdGlvbiBzY3JpcHQgLSBub3QgcHJvZHVjdGlvbiBjb2RlLiBObyB1c2VyIGlucHV0IHByb2Nlc3NpbmcsIG9ubHkgdGVzdCBzY2VuYXJpb3MuJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNCcsXG4gICAgZmlsZTogJyoqL3Rlc3QtZnVsbC12YWxpZGF0aW9uLmpzJyxcbiAgICByZWFzb246ICdUZXN0IHZhbGlkYXRpb24gc2NyaXB0IC0gbm90IHByb2R1Y3Rpb24gY29kZS4gTm8gdXNlciBpbnB1dCBwcm9jZXNzaW5nLCBvbmx5IHRlc3Qgc2NlbmFyaW9zLidcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICd0ZXN0LXZlcnNpb24tdmFsaWRhdGlvbi5qcycsXG4gICAgcmVhc29uOiAnVGVzdCB1dGlsaXR5IHNjcmlwdCAtIG5vdCBwcm9kdWN0aW9uIGNvZGUuIEF1ZGl0IGxvZ2dpbmcgbm90IHJlcXVpcmVkIGZvciB0ZXN0IHV0aWxpdGllcy4nXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnKiovdGVzdC12ZXJzaW9uLXZhbGlkYXRpb24uanMnLFxuICAgIHJlYXNvbjogJ1Rlc3QgdXRpbGl0eSBzY3JpcHQgLSBub3QgcHJvZHVjdGlvbiBjb2RlLiBBdWRpdCBsb2dnaW5nIG5vdCByZXF1aXJlZCBmb3IgdGVzdCB1dGlsaXRpZXMuJ1xuICB9LFxuICBcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBBdWRpdCBMb2dnaW5nIEZhbHNlIFBvc2l0aXZlc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL3R5cGVzLyoudHMnLFxuICAgIHJlYXNvbjogJ1R5cGUgZGVmaW5pdGlvbiBmaWxlcyBkbyBub3QgcGVyZm9ybSBzZWN1cml0eSBvcGVyYXRpb25zJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy90eXBlcy9lbGVtZW50cy8qLnRzJyxcbiAgICByZWFzb246ICdFbGVtZW50IGludGVyZmFjZSBmaWxlcyBhcmUgdHlwZSBkZWZpbml0aW9ucyB0aGF0IGRvIG5vdCBwZXJmb3JtIHNlY3VyaXR5IG9wZXJhdGlvbnMnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL2NvbnN0YW50cy8qLnRzJyxcbiAgICByZWFzb246ICdDb25zdGFudCBmaWxlcyBkbyBub3QgcGVyZm9ybSBzZWN1cml0eSBvcGVyYXRpb25zJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy9jb25maWcvKi50cycsXG4gICAgcmVhc29uOiAnQ29uZmlndXJhdGlvbiBmaWxlcyBkbyBub3QgcGVyZm9ybSBzZWN1cml0eSBvcGVyYXRpb25zJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy9lcnJvcnMvKi50cycsXG4gICAgcmVhc29uOiAnRXJyb3IgY2xhc3NlcyBhcmUgbm90IHNlY3VyaXR5IG9wZXJhdGlvbnMgcmVxdWlyaW5nIGF1ZGl0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJyoqLyouanNvbicsXG4gICAgcmVhc29uOiAnSlNPTiBmaWxlcyBjYW5ub3QgY29udGFpbiBleGVjdXRhYmxlIGNvZGUnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL3NlY3VyaXR5LyoqLyoudHMnLFxuICAgIHJlYXNvbjogJ1NlY3VyaXR5IG1vZHVsZXMgYXJlIGluZnJhc3RydWN0dXJlLCBub3Qgb3BlcmF0aW9ucyByZXF1aXJpbmcgYXVkaXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL2NvbGxlY3Rpb24vKi50cycsXG4gICAgcmVhc29uOiAnTWFya2V0cGxhY2Ugb3BlcmF0aW9ucyBhcmUgbm90IHNlY3VyaXR5LXNlbnNpdGl2ZSByZXF1aXJpbmcgYXVkaXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL2NvbGxlY3Rpb24vKiovKi50cycsXG4gICAgcmVhc29uOiAnTWFya2V0cGxhY2Ugb3BlcmF0aW9ucyBhcmUgbm90IHNlY3VyaXR5LXNlbnNpdGl2ZSByZXF1aXJpbmcgYXVkaXQnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnRE1DUC1TRUMtMDA2JyxcbiAgICBmaWxlOiAnc3JjL3BlcnNvbmEvKi50cycsXG4gICAgcmVhc29uOiAnUGVyc29uYSBvcGVyYXRpb25zIGFyZSB2YWxpZGF0ZWQgYXQgZW50cnkgcG9pbnQsIG5vdCBzZWN1cml0eSBvcGVyYXRpb25zJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy9wZXJzb25hLyoqLyoudHMnLFxuICAgIHJlYXNvbjogJ1BlcnNvbmEgb3BlcmF0aW9ucyBhcmUgdmFsaWRhdGVkIGF0IGVudHJ5IHBvaW50LCBub3Qgc2VjdXJpdHkgb3BlcmF0aW9ucydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvc2VydmVyL3Rvb2xzLyoqLyoudHMnLFxuICAgIHJlYXNvbjogJ1Rvb2wgaW1wbGVtZW50YXRpb25zIGRlbGVnYXRlIHRvIHNlcnZpY2VzIHRoYXQgaGFuZGxlIHNlY3VyaXR5J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy9pbmRleC50cycsXG4gICAgcmVhc29uOiAnTWFpbiBlbnRyeSBwb2ludCBkZWxlZ2F0ZXMgc2VjdXJpdHkgb3BlcmF0aW9ucyB0byBzcGVjaWFsaXplZCBtb2R1bGVzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy91dGlscy8qLnRzJyxcbiAgICByZWFzb246ICdVdGlsaXR5IGZ1bmN0aW9ucyBhcmUgbm90IHNlY3VyaXR5IG9wZXJhdGlvbnMgcmVxdWlyaW5nIGF1ZGl0J1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy91cGRhdGUvKiovKi50cycsXG4gICAgcmVhc29uOiAnVXBkYXRlIHN5c3RlbSBoYXMgaXRzIG93biBsb2dnaW5nIGFuZCBpcyBub3QgYSBkaXJlY3Qgc2VjdXJpdHkgb3BlcmF0aW9uJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy9zZXJ2ZXIvdHlwZXMudHMnLFxuICAgIHJlYXNvbjogJ1R5cGUgZGVmaW5pdGlvbiBmaWxlIGRvZXMgbm90IHBlcmZvcm0gb3BlcmF0aW9ucydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzY3JpcHRzLyoqLyonLFxuICAgIHJlYXNvbjogJ0J1aWxkIHNjcmlwdHMgZG8gbm90IHBlcmZvcm0gcnVudGltZSBzZWN1cml0eSBvcGVyYXRpb25zJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy9wb3J0Zm9saW8vUG9ydGZvbGlvU3luY01hbmFnZXIudHMnLFxuICAgIHJlYXNvbjogJ1BvcnRmb2xpbyBzeW5jIG9wZXJhdGlvbnMgYXJlIGZpbGUgbWFuYWdlbWVudCB0YXNrcywgbm90IHNlY3VyaXR5IG9wZXJhdGlvbnMuIFNlY3VyaXR5IHZhbGlkYXRpb24gaGFwcGVucyBhdCB0aGUgTUNQIHJlcXVlc3QgbGF5ZXIuJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJ0RNQ1AtU0VDLTAwNicsXG4gICAgZmlsZTogJ3NyYy9oYW5kbGVycy9TeW5jSGFuZGxlclYyLnRzJyxcbiAgICByZWFzb246ICdTeW5jIGhhbmRsZXIgZGVsZWdhdGVzIHRvIFBvcnRmb2xpb1N5bmNNYW5hZ2VyIHdoaWNoIGhhbmRsZXMgaXRzIG93biBsb2dnaW5nLiBTZWN1cml0eSB2YWxpZGF0aW9uIGhhcHBlbnMgYXQgdGhlIE1DUCByZXF1ZXN0IGxheWVyLidcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICdETUNQLVNFQy0wMDYnLFxuICAgIGZpbGU6ICdzcmMvaGFuZGxlcnMvQ29uZmlnSGFuZGxlci50cycsXG4gICAgcmVhc29uOiAnQ29uZmlnIGhhbmRsZXIgb3BlcmF0aW9ucyBhcmUgY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50LCBub3Qgc2VjdXJpdHkgb3BlcmF0aW9ucy4gQ29uZmlnTWFuYWdlciBoYW5kbGVzIGl0cyBvd24gbG9nZ2luZy4nXG4gIH0sXG4gIFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIENvdmVyYWdlIFJlcG9ydCBGaWxlc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJ3Rlc3QvY292ZXJhZ2UvKiovKicsXG4gICAgcmVhc29uOiAnQ292ZXJhZ2UgcmVwb3J0IGZpbGVzIGFyZSBhdXRvLWdlbmVyYXRlZCBhbmQgbm90IHBhcnQgb2YgdGhlIGFwcGxpY2F0aW9uIGNvZGUnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJyoqL2xjb3YtcmVwb3J0LyoqLyonLFxuICAgIHJlYXNvbjogJ0xDT1YgY292ZXJhZ2UgcmVwb3J0IGZpbGVzIGFyZSBhdXRvLWdlbmVyYXRlZCBhbmQgbm90IHBhcnQgb2YgdGhlIGFwcGxpY2F0aW9uIGNvZGUnXG4gIH0sXG4gIFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIERvY3VtZW50YXRpb24gYW5kIE5vbi1Db2RlIEZpbGVzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAge1xuICAgIHJ1bGU6ICcqJyxcbiAgICBmaWxlOiAnZG9jcy8qKi8qJyxcbiAgICByZWFzb246ICdEb2N1bWVudGF0aW9uIGZpbGVzIGluY2x1ZGluZyBRQSBtZXRyaWNzIGFuZCByZXBvcnRzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJyonLFxuICAgIGZpbGU6ICcqKi8qLm1kJyxcbiAgICByZWFzb246ICdNYXJrZG93biBkb2N1bWVudGF0aW9uIGZpbGVzJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJyonLFxuICAgIGZpbGU6ICcqKi8qLmpzb24nLFxuICAgIHJlYXNvbjogJ0pTT04gY29uZmlndXJhdGlvbiBhbmQgZGF0YSBmaWxlcyBkbyBub3QgZXhlY3V0ZSBjb2RlJ1xuICB9LFxuICB7XG4gICAgcnVsZTogJyonLFxuICAgIGZpbGU6ICdMSUNFTlNFJyxcbiAgICByZWFzb246ICdMaWNlbnNlIGZpbGUnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJy5naXRpZ25vcmUnLFxuICAgIHJlYXNvbjogJ0dpdCBjb25maWd1cmF0aW9uIGZpbGUnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJ3BhY2thZ2UtbG9jay5qc29uJyxcbiAgICByZWFzb246ICdOUE0gbG9jayBmaWxlIC0gYXV0by1nZW5lcmF0ZWQsIG5vIHVzZXIgaW5wdXQgcHJvY2Vzc2luZydcbiAgfSxcbiAge1xuICAgIHJ1bGU6ICcqJyxcbiAgICBmaWxlOiAnKiovKi55bWwnLFxuICAgIHJlYXNvbjogJ1lBTUwgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgZGF0YSwgbm90IGNvZGUnXG4gIH0sXG4gIHtcbiAgICBydWxlOiAnKicsXG4gICAgZmlsZTogJyoqLyoueWFtbCcsXG4gICAgcmVhc29uOiAnWUFNTCBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSBkYXRhLCBub3QgY29kZSdcbiAgfVxuXTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBzdXBwcmVzc2lvbiBjb25maWd1cmF0aW9uIGF0IHN0YXJ0dXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU3VwcHJlc3Npb25zKCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBzZWVuUGF0dGVybnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgXG4gIGZvciAoY29uc3Qgc3VwcHJlc3Npb24gb2Ygc3VwcHJlc3Npb25zKSB7XG4gICAgLy8gQ2hlY2sgZm9yIGVtcHR5IHJlYXNvbnNcbiAgICBpZiAoIXN1cHByZXNzaW9uLnJlYXNvbiB8fCBzdXBwcmVzc2lvbi5yZWFzb24udHJpbSgpLmxlbmd0aCA8IDEwKSB7XG4gICAgICBlcnJvcnMucHVzaChgU3VwcHJlc3Npb24gZm9yICR7c3VwcHJlc3Npb24ucnVsZX0gaGFzIGluc3VmZmljaWVudCByZWFzb25gKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgZm9yIHZhbGlkIHJ1bGUgcGF0dGVybnNcbiAgICBjb25zdCBydWxlUGF0dGVybiA9IC9eKERNQ1AtU0VDLVxcZHszfXxPV0FTUC1bQS1aXVxcZHsyfS1cXGR7M318Q1dFLVxcZCstXFxkezN9fFxcKikkLztcbiAgICBpZiAoIXN1cHByZXNzaW9uLnJ1bGUubWF0Y2gocnVsZVBhdHRlcm4pKSB7XG4gICAgICBlcnJvcnMucHVzaChgSW52YWxpZCBydWxlIHBhdHRlcm46ICR7c3VwcHJlc3Npb24ucnVsZX1gKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZSBzdXBwcmVzc2lvbnNcbiAgICBjb25zdCBrZXkgPSBgJHtzdXBwcmVzc2lvbi5ydWxlfToke3N1cHByZXNzaW9uLmZpbGUgfHwgJyonfWA7XG4gICAgaWYgKHNlZW5QYXR0ZXJucy5oYXMoa2V5KSkge1xuICAgICAgZXJyb3JzLnB1c2goYER1cGxpY2F0ZSBzdXBwcmVzc2lvbjogJHtrZXl9YCk7XG4gICAgfVxuICAgIHNlZW5QYXR0ZXJucy5hZGQoa2V5KTtcbiAgICBcbiAgICAvLyBWYWxpZGF0ZSBnbG9iIHBhdHRlcm5zXG4gICAgaWYgKHN1cHByZXNzaW9uLmZpbGU/LmluY2x1ZGVzKCcqKicpICYmICFzdXBwcmVzc2lvbi5maWxlLmluY2x1ZGVzKCcqKi8nKSkge1xuICAgICAgZXJyb3JzLnB1c2goYEludmFsaWQgZ2xvYiBwYXR0ZXJuIGluICR7c3VwcHJlc3Npb24uZmlsZX0gLSAqKiBtdXN0IGJlIGZvbGxvd2VkIGJ5IC9gKTtcbiAgICB9XG4gIH1cbiAgXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogQ29udmVydCBnbG9iIHBhdHRlcm4gdG8gcmVnZXggcGF0dGVybiBzYWZlbHlcbiAqIFVzaW5nIGEgcHJvcGVyIGdsb2ItdG8tcmVnZXggY29udmVyc2lvbiB0aGF0IGhhbmRsZXMgYWxsIGVkZ2UgY2FzZXNcbiAqL1xuZnVuY3Rpb24gZ2xvYlRvUmVnZXgoZ2xvYjogc3RyaW5nKTogUmVnRXhwIHtcbiAgLy8gQ2hlY2sgY2FjaGUgZmlyc3RcbiAgY29uc3QgY2FjaGVkID0gY2FjaGUuZ2V0UmVnZXgoZ2xvYik7XG4gIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG4gIFxuICAvLyBTcGVjaWFsIGNhc2U6IGlmIGdsb2Igc3RhcnRzIHdpdGggKiwgaXQgc2hvdWxkIG1hdGNoIGFueXRoaW5nIGF0IHRoZSBiZWdpbm5pbmdcbiAgbGV0IHByb2Nlc3NlZEdsb2IgPSBnbG9iO1xuICBsZXQgcHJlZml4ID0gJyc7XG4gIGlmIChnbG9iLnN0YXJ0c1dpdGgoJyonKSAmJiAhZ2xvYi5zdGFydHNXaXRoKCcqKicpKSB7XG4gICAgcHJlZml4ID0gJyg/Oi4qLyk/JzsgIC8vIE9wdGlvbmFsIHBhdGggcHJlZml4XG4gICAgcHJvY2Vzc2VkR2xvYiA9IGdsb2Iuc3Vic3RyaW5nKDEpO1xuICB9XG4gIFxuICAvLyBFc2NhcGUgYWxsIHJlZ2V4IHNwZWNpYWwgY2hhcmFjdGVycyBleGNlcHQgKiBhbmQgL1xuICAvLyBGaXhlZDogUHJvcGVybHkgZXNjYXBlIGJhY2tzbGFzaGVzIGFuZCBvdGhlciBzcGVjaWFsIHJlZ2V4IGNoYXJhY3RlcnNcbiAgbGV0IHBhdHRlcm4gPSBwcm9jZXNzZWRHbG9iLnJlcGxhY2UoL1tcXFxcXiQuKCkrP3t9W1xcXXxdL2csICdcXFxcJCYnKTtcbiAgXG4gIC8vIEhhbmRsZSBnbG9iIHBhdHRlcm5zIGluIGNvcnJlY3Qgb3JkZXJcbiAgLy8gUmVwbGFjZSAqKiBiZWZvcmUgKiB0byBhdm9pZCBjb25mbGljdHNcbiAgcGF0dGVybiA9IHBhdHRlcm5cbiAgICAucmVwbGFjZSgvXFwqXFwqL2csICc8PEdMT0JTVEFSPj4nKSAgICAgLy8gVGVtcG9yYXJ5IHBsYWNlaG9sZGVyIGZvciAqKlxuICAgIC5yZXBsYWNlKC9cXCovZywgJzw8U1RBUj4+JykgICAgICAgICAgICAvLyBUZW1wb3JhcnkgcGxhY2Vob2xkZXIgZm9yICpcbiAgICAucmVwbGFjZSgvPDxHTE9CU1RBUj4+XFwvL2csICcoPzouKi8pPycpIC8vICoqLyBtYXRjaGVzIGFueSBudW1iZXIgb2YgZGlyZWN0b3JpZXMgaW5jbHVkaW5nIG5vbmVcbiAgICAucmVwbGFjZSgvPDxHTE9CU1RBUj4+L2csICcuKicpICAgICAgIC8vICoqIG1hdGNoZXMgYW55dGhpbmdcbiAgICAucmVwbGFjZSgvPDxTVEFSPj4vZywgJ1teL10qJykgICAgICAgIC8vICogbWF0Y2hlcyBhbnl0aGluZyBleGNlcHQgZGlyZWN0b3J5IHNlcGFyYXRvclxuICAgIC5yZXBsYWNlKC9cXC8vZywgJ1xcXFwvJyk7ICAgICAgICAgICAgICAgIC8vIEVzY2FwZSBmb3J3YXJkIHNsYXNoZXNcbiAgXG4gIC8vIENvbWJpbmUgcHJlZml4IGFuZCBwYXR0ZXJuXG4gIGNvbnN0IGZ1bGxQYXR0ZXJuID0gcHJlZml4ICsgcGF0dGVybjtcbiAgXG4gIC8vIEFkZCBhbmNob3JzIHRvIGVuc3VyZSBmdWxsIHBhdGggbWF0Y2hcbiAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBeJHtmdWxsUGF0dGVybn0kYCk7XG4gIFxuICAvLyBDYWNoZSB0aGUgY29tcGlsZWQgcmVnZXhcbiAgY2FjaGUuc2V0UmVnZXgoZ2xvYiwgcmVnZXgpO1xuICBcbiAgcmV0dXJuIHJlZ2V4O1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBmaWxlIHBhdGggZm9yIGNvbnNpc3RlbnQgbWF0Y2hpbmdcbiAqIEhhbmRsZXMgYm90aCBhYnNvbHV0ZSBhbmQgcmVsYXRpdmUgcGF0aHMgYWNyb3NzIGRpZmZlcmVudCBwbGF0Zm9ybXNcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUGF0aChmaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gQ29udmVydCBiYWNrc2xhc2hlcyB0byBmb3J3YXJkIHNsYXNoZXMgZm9yIFdpbmRvd3MgcGF0aHNcbiAgbGV0IG5vcm1hbGl6ZWQgPSBmaWxlUGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gIFxuICAvLyBSZW1vdmUgZHVwbGljYXRlIHNsYXNoZXNcbiAgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQucmVwbGFjZSgvXFwvKy9nLCAnLycpO1xuICBcbiAgLy8gUmVtb3ZlIHRyYWlsaW5nIHNsYXNoIGlmIHByZXNlbnRcbiAgaWYgKG5vcm1hbGl6ZWQuZW5kc1dpdGgoJy8nKSAmJiBub3JtYWxpemVkLmxlbmd0aCA+IDEpIHtcbiAgICBub3JtYWxpemVkID0gbm9ybWFsaXplZC5zbGljZSgwLCAtMSk7XG4gIH1cbiAgXG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgcmVsYXRpdmUgcGF0aCBmcm9tIGFic29sdXRlIHBhdGhcbiAqIEhhbmRsZXMgdmFyaW91cyBDSS9DRCBhbmQgbG9jYWwgZGV2ZWxvcG1lbnQgcGF0aCBmb3JtYXRzXG4gKi9cbmZ1bmN0aW9uIGdldFJlbGF0aXZlUGF0aChhYnNvbHV0ZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVQYXRoKGFic29sdXRlUGF0aCk7XG4gIFxuICAvLyBJZiBhbHJlYWR5IGEgcmVsYXRpdmUgcGF0aCwgcmV0dXJuIGFzLWlzXG4gIGlmICghbm9ybWFsaXplZC5zdGFydHNXaXRoKCcvJykgJiYgIW5vcm1hbGl6ZWQubWF0Y2goL15bQS1aXTovaSkpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplZDtcbiAgfVxuICBcbiAgLy8gRGVmaW5lIGNvbW1vbiBwcm9qZWN0IHNvdXJjZSBkaXJlY3Rvcmllc1xuICBjb25zdCBwcm9qZWN0RGlycyA9IFsnc3JjLycsICdfX3Rlc3RzX18vJywgJ3NjcmlwdHMvJywgJ2RvY3MvJywgJ3Rlc3QvJywgJ3Rlc3RzLycsICdsaWIvJ107XG4gIFxuICAvLyBGaW5kIHRoZSBwb3NpdGlvbiBvZiBjb21tb24gcHJvamVjdCBkaXJlY3RvcmllcyBpbiB0aGUgcGF0aFxuICBsZXQgYmVzdE1hdGNoID0geyBpbmRleDogLTEsIGRpcjogJycsIHJlbGF0aXZlUGF0aDogJycgfTtcbiAgXG4gIGZvciAoY29uc3QgZGlyIG9mIHByb2plY3REaXJzKSB7XG4gICAgLy8gTG9vayBmb3IgL2RpciBwYXR0ZXJuICh3aXRoIGxlYWRpbmcgc2xhc2ggdG8gYXZvaWQgZmFsc2UgbWF0Y2hlcylcbiAgICBjb25zdCBzZWFyY2hQYXR0ZXJuID0gYC8ke2Rpcn1gO1xuICAgIGNvbnN0IGluZGV4ID0gbm9ybWFsaXplZC5sYXN0SW5kZXhPZihzZWFyY2hQYXR0ZXJuKTtcbiAgICBcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgLy8gRXh0cmFjdCBldmVyeXRoaW5nIGFmdGVyIHRoZSBwYXJlbnQgb2YgdGhpcyBkaXJlY3RvcnlcbiAgICAgIC8vIEZvciBleGFtcGxlOiAvaG9tZS91c2VyL3Byb2plY3Qvc3JjL2ZpbGUudHMgLT4gc3JjL2ZpbGUudHNcbiAgICAgIGNvbnN0IGRpclN0YXJ0SW5kZXggPSBpbmRleCArIDE7IC8vIFNraXAgdGhlIGxlYWRpbmcgc2xhc2hcbiAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IG5vcm1hbGl6ZWQuc3Vic3RyaW5nKGRpclN0YXJ0SW5kZXgpO1xuICAgICAgXG4gICAgICAvLyBWZXJpZnkgdGhpcyBsb29rcyBsaWtlIGEgdmFsaWQgcHJvamVjdCBmaWxlXG4gICAgICBpZiAocmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoZGlyKSAmJiByZWxhdGl2ZVBhdGguaW5jbHVkZXMoJy4nKSkge1xuICAgICAgICAvLyBLZWVwIHRoZSBtYXRjaCB0aGF0IGFwcGVhcnMgbGF0ZXN0IGluIHRoZSBwYXRoIChtb3N0IHNwZWNpZmljKVxuICAgICAgICBpZiAoaW5kZXggPiBiZXN0TWF0Y2guaW5kZXgpIHtcbiAgICAgICAgICBiZXN0TWF0Y2ggPSB7IGluZGV4LCBkaXIsIHJlbGF0aXZlUGF0aCB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICAvLyBJZiB3ZSBmb3VuZCBhIG1hdGNoLCByZXR1cm4gaXRcbiAgaWYgKGJlc3RNYXRjaC5pbmRleCA+PSAwKSB7XG4gICAgcmV0dXJuIGJlc3RNYXRjaC5yZWxhdGl2ZVBhdGg7XG4gIH1cbiAgXG4gIC8vIEZhbGxiYWNrOiBUcnkgdG8gZmluZCBjb21tb24gZmlsZSBwYXR0ZXJucyB0aGF0IGluZGljYXRlIHByb2plY3QgZmlsZXNcbiAgY29uc3QgZmlsZVBhdHRlcm5zID0gW1xuICAgIC9cXC8oc3JjfF9fdGVzdHNfX3xzY3JpcHRzfHRlc3R8dGVzdHN8bGliKVxcLy4qXFwuW2p0XXN4PyQvLFxuICAgIC9cXC8oc3JjfF9fdGVzdHNfX3xzY3JpcHRzfHRlc3R8dGVzdHN8bGliKVxcLy4qXFwuanNvbiQvLFxuICAgIC9cXC8oc3JjfF9fdGVzdHNfX3xzY3JpcHRzfHRlc3R8dGVzdHN8bGliKVxcLy4qXFwueWE/bWwkLyxcbiAgICAvXFwvcGFja2FnZVxcLmpzb24kLyxcbiAgICAvXFwvcGFja2FnZS1sb2NrXFwuanNvbiQvLFxuICAgIC9cXC90c2NvbmZpZy4qXFwuanNvbiQvLFxuICAgIC9cXC9cXC4uKnJjXFwuanNvbiQvICAvLyAuZXNsaW50cmMuanNvbiwgZXRjLlxuICBdO1xuICBcbiAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIGZpbGVQYXR0ZXJucykge1xuICAgIGNvbnN0IG1hdGNoID0gbm9ybWFsaXplZC5tYXRjaChwYXR0ZXJuKTtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIC8vIEZpbmQgd2hlcmUgdGhlIG1hdGNoIHN0YXJ0cyBhbmQgZXh0cmFjdCBmcm9tIHRoZXJlXG4gICAgICBjb25zdCBtYXRjaEluZGV4ID0gbm9ybWFsaXplZC5pbmRleE9mKG1hdGNoWzBdKTtcbiAgICAgIGlmIChtYXRjaEluZGV4ID49IDApIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWQuc3Vic3RyaW5nKG1hdGNoSW5kZXggKyAxKTsgLy8gU2tpcCBsZWFkaW5nIC9cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gIC8vIExhc3QgcmVzb3J0OiBpZiBwYXRoIGNvbnRhaW5zIGNvbW1vbiBleHRlbnNpb25zLCB0cnkgdG8gZXh0cmFjdCBhIHJlYXNvbmFibGUgcmVsYXRpdmUgcGF0aFxuICBpZiAobm9ybWFsaXplZC5tYXRjaCgvXFwuKHRzfGpzfHRzeHxqc3h8anNvbnx5YW1sfHltbCkkLykpIHtcbiAgICAvLyBGaW5kIHRoZSBsYXN0IHNlZ21lbnQgdGhhdCBsb29rcyBsaWtlIGEgcHJvamVjdCBkaXJlY3RvcnlcbiAgICBjb25zdCBzZWdtZW50cyA9IG5vcm1hbGl6ZWQuc3BsaXQoJy8nKTtcbiAgICBmb3IgKGxldCBpID0gc2VnbWVudHMubGVuZ3RoIC0gMjsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmIChwcm9qZWN0RGlycy5zb21lKGRpciA9PiBkaXIuc3RhcnRzV2l0aChzZWdtZW50c1tpXSkpKSB7XG4gICAgICAgIHJldHVybiBzZWdtZW50cy5zbGljZShpKS5qb2luKCcvJyk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIEZvciByb290LWxldmVsIGZpbGVzIGxpa2UgcGFja2FnZS1sb2NrLmpzb24sIGp1c3QgcmV0dXJuIHRoZSBmaWxlbmFtZVxuICAgIGNvbnN0IGZpbGVuYW1lID0gc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV07XG4gICAgaWYgKGZpbGVuYW1lICYmIGZpbGVuYW1lLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgIHJldHVybiBmaWxlbmFtZTtcbiAgICB9XG4gIH1cbiAgXG4gIC8vIFJldHVybiB0aGUgbm9ybWFsaXplZCBwYXRoIGlmIHdlIGNhbid0IGV4dHJhY3QgcmVsYXRpdmVcbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBmaW5kaW5nIHNob3VsZCBiZSBzdXBwcmVzc2VkXG4gKiBPcHRpbWl6ZWQgd2l0aCBjYWNoaW5nIGFuZCBlYXJseSByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRTdXBwcmVzcyhydWxlSWQ6IHN0cmluZywgZmlsZVBhdGg/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCFmaWxlUGF0aCkgcmV0dXJuIGZhbHNlO1xuICBcbiAgLy8gTm9ybWFsaXplIHBhdGhzIGZvciBjb25zaXN0ZW50IG1hdGNoaW5nXG4gIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplUGF0aChmaWxlUGF0aCk7XG4gIGNvbnN0IHJlbGF0aXZlUGF0aCA9IGdldFJlbGF0aXZlUGF0aChub3JtYWxpemVkUGF0aCk7XG4gIFxuICAvLyBDaGVjayBjYWNoZSBmaXJzdFxuICBjb25zdCBjYWNoZWQgPSBjYWNoZS5nZXQocnVsZUlkLCByZWxhdGl2ZVBhdGgpO1xuICBpZiAoY2FjaGVkICE9PSB1bmRlZmluZWQpIHJldHVybiBjYWNoZWQ7XG4gIFxuICAvLyBQcm9jZXNzIHN1cHByZXNzaW9ucyB3aXRoIGVhcmx5IHJldHVybnNcbiAgZm9yIChjb25zdCBzdXBwcmVzc2lvbiBvZiBzdXBwcmVzc2lvbnMpIHtcbiAgICAvLyBTa2lwIGlmIHJ1bGUgZG9lc24ndCBtYXRjaFxuICAgIGlmIChzdXBwcmVzc2lvbi5ydWxlICE9PSAnKicgJiYgc3VwcHJlc3Npb24ucnVsZSAhPT0gcnVsZUlkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gSGFuZGxlIGdsb2JhbCBzdXBwcmVzc2lvbnMgKG5vIGZpbGUgc3BlY2lmaWVkKVxuICAgIGlmICghc3VwcHJlc3Npb24uZmlsZSkge1xuICAgICAgY2FjaGUuc2V0KHJ1bGVJZCwgcmVsYXRpdmVQYXRoLCB0cnVlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBleGFjdCBmaWxlIG1hdGNoIChtb3N0IGNvbW1vbiBjYXNlKVxuICAgIGlmIChzdXBwcmVzc2lvbi5maWxlID09PSByZWxhdGl2ZVBhdGggfHwgc3VwcHJlc3Npb24uZmlsZSA9PT0gbm9ybWFsaXplZFBhdGgpIHtcbiAgICAgIGNhY2hlLnNldChydWxlSWQsIHJlbGF0aXZlUGF0aCwgdHJ1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgcGF0dGVybiBtYXRjaCBvbmx5IGlmIGZpbGUgY29udGFpbnMgd2lsZGNhcmRzXG4gICAgaWYgKHN1cHByZXNzaW9uLmZpbGUuaW5jbHVkZXMoJyonKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVnZXggPSBnbG9iVG9SZWdleChzdXBwcmVzc2lvbi5maWxlKTtcbiAgICAgICAgaWYgKHJlZ2V4LnRlc3QocmVsYXRpdmVQYXRoKSB8fCByZWdleC50ZXN0KG5vcm1hbGl6ZWRQYXRoKSkge1xuICAgICAgICAgIGNhY2hlLnNldChydWxlSWQsIHJlbGF0aXZlUGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihgSW52YWxpZCBzdXBwcmVzc2lvbiBwYXR0ZXJuIFwiJHtzdXBwcmVzc2lvbi5maWxlfVwiOmAsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gIC8vIE5vdCBzdXBwcmVzc2VkXG4gIGNhY2hlLnNldChydWxlSWQsIHJlbGF0aXZlUGF0aCwgZmFsc2UpO1xuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2xlYXIgc3VwcHJlc3Npb24gY2FjaGUgKHVzZWZ1bCBmb3IgdGVzdGluZylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyU3VwcHJlc3Npb25DYWNoZSgpOiB2b2lkIHtcbiAgY2FjaGUuY2xlYXIoKTtcbn1cblxuLyoqXG4gKiBHZXQgc3VwcHJlc3Npb24gc3RhdGlzdGljcyBmb3IgcmVwb3J0aW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdXBwcmVzc2lvblN0YXRzKCk6IHsgXG4gIHRvdGFsOiBudW1iZXI7IFxuICBieVJ1bGU6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG4gIGJ5Q2F0ZWdvcnk6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG59IHtcbiAgY29uc3Qgc3RhdHMgPSB7XG4gICAgdG90YWw6IHN1cHByZXNzaW9ucy5sZW5ndGgsXG4gICAgYnlSdWxlOiB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+LFxuICAgIGJ5Q2F0ZWdvcnk6IHt9IGFzIFJlY29yZDxzdHJpbmcsIG51bWJlcj5cbiAgfTtcbiAgXG4gIGZvciAoY29uc3Qgc3VwcHJlc3Npb24gb2Ygc3VwcHJlc3Npb25zKSB7XG4gICAgLy8gQ291bnQgYnkgcnVsZVxuICAgIHN0YXRzLmJ5UnVsZVtzdXBwcmVzc2lvbi5ydWxlXSA9IChzdGF0cy5ieVJ1bGVbc3VwcHJlc3Npb24ucnVsZV0gfHwgMCkgKyAxO1xuICAgIFxuICAgIC8vIENvdW50IGJ5IGNhdGVnb3J5IChleHRyYWN0IGZyb20gcnVsZSBwcmVmaXgpXG4gICAgY29uc3QgY2F0ZWdvcnkgPSBzdXBwcmVzc2lvbi5ydWxlLnNwbGl0KCctJylbMF07XG4gICAgc3RhdHMuYnlDYXRlZ29yeVtjYXRlZ29yeV0gPSAoc3RhdHMuYnlDYXRlZ29yeVtjYXRlZ29yeV0gfHwgMCkgKyAxO1xuICB9XG4gIFxuICByZXR1cm4gc3RhdHM7XG59XG5cbi8vIFZhbGlkYXRlIHN1cHByZXNzaW9ucyBvbiBtb2R1bGUgbG9hZFxuY29uc3QgdmFsaWRhdGlvbkVycm9ycyA9IHZhbGlkYXRlU3VwcHJlc3Npb25zKCk7XG5pZiAodmFsaWRhdGlvbkVycm9ycy5sZW5ndGggPiAwKSB7XG4gIGxvZ2dlci53YXJuKCdTdXBwcmVzc2lvbiBjb25maWd1cmF0aW9uIHdhcm5pbmdzOicsIHZhbGlkYXRpb25FcnJvcnMpO1xufSJdfQ==
@@ -5,7 +5,7 @@
5
5
  * for tracking and alerting on security-related events.
6
6
  */
7
7
  export interface SecurityEvent {
8
- type: 'CONTENT_INJECTION_ATTEMPT' | 'YAML_INJECTION_ATTEMPT' | 'PATH_TRAVERSAL_ATTEMPT' | 'TOKEN_VALIDATION_FAILURE' | 'UPDATE_SECURITY_VIOLATION' | 'RATE_LIMIT_EXCEEDED' | 'YAML_PARSING_WARNING' | 'YAML_PARSE_SUCCESS' | 'TOKEN_VALIDATION_SUCCESS' | 'PATH_VALIDATION_SUCCESS' | 'RATE_LIMIT_WARNING' | 'TOKEN_CACHE_CLEARED' | 'YAML_UNICODE_ATTACK' | 'UNICODE_DIRECTION_OVERRIDE' | 'UNICODE_MIXED_SCRIPT' | 'UNICODE_VALIDATION_ERROR' | 'CONTENT_SIZE_EXCEEDED' | 'INCLUDE_DEPTH_EXCEEDED' | 'TEMPLATE_RENDERED' | 'TEMPLATE_INCLUDE' | 'TEMPLATE_LOADED' | 'TEMPLATE_SAVED' | 'TEMPLATE_DELETED' | 'MEMORY_CREATED' | 'MEMORY_ADDED' | 'MEMORY_SEARCHED' | 'SENSITIVE_MEMORY_DELETED' | 'RETENTION_POLICY_ENFORCED' | 'MEMORY_CLEARED' | 'MEMORY_LOADED' | 'MEMORY_SAVED' | 'MEMORY_DELETED' | 'MEMORY_LOAD_FAILED' | 'MEMORY_SAVE_FAILED' | 'MEMORY_LIST_ITEM_FAILED' | 'MEMORY_IMPORT_FAILED' | 'MEMORY_DESERIALIZE_FAILED' | 'ELEMENT_CREATED' | 'ELEMENT_DELETED' | 'AGENT_DECISION' | 'RULE_ENGINE_CONFIG_UPDATE' | 'RULE_ENGINE_CONFIG_VALIDATION_ERROR' | 'GOAL_TEMPLATE_APPLIED' | 'GOAL_TEMPLATE_VALIDATION' | 'ENSEMBLE_CIRCULAR_DEPENDENCY' | 'ENSEMBLE_RESOURCE_LIMIT_EXCEEDED' | 'ENSEMBLE_ACTIVATION_TIMEOUT' | 'ENSEMBLE_SUSPICIOUS_CONDITION' | 'ENSEMBLE_NESTED_DEPTH_EXCEEDED' | 'ENSEMBLE_CONTEXT_SIZE_EXCEEDED' | 'ENSEMBLE_SAVED' | 'ENSEMBLE_IMPORTED' | 'ENSEMBLE_DELETED' | 'PORTFOLIO_INITIALIZATION' | 'PORTFOLIO_POPULATED' | 'FILE_COPIED' | 'DIRECTORY_MIGRATION' | 'PORTFOLIO_CACHE_INVALIDATION' | 'PORTFOLIO_FETCH_SUCCESS' | 'TEST_DATA_BLOCKED' | 'TEST_PATH_SECURITY_RISK' | 'TEST_PRODUCTION_ACCESS_BLOCKED' | 'TEST_PATH_INVALID' | 'TEST_ENVIRONMENT_PRODUCTION_PATH' | 'TEST_ENVIRONMENT_DEPRECATED_VAR' | 'TOOL_CACHE_INVALIDATED';
8
+ type: 'CONTENT_INJECTION_ATTEMPT' | 'YAML_INJECTION_ATTEMPT' | 'PATH_TRAVERSAL_ATTEMPT' | 'TOKEN_VALIDATION_FAILURE' | 'UPDATE_SECURITY_VIOLATION' | 'RATE_LIMIT_EXCEEDED' | 'YAML_PARSING_WARNING' | 'YAML_PARSE_SUCCESS' | 'TOKEN_VALIDATION_SUCCESS' | 'PATH_VALIDATION_SUCCESS' | 'RATE_LIMIT_WARNING' | 'TOKEN_CACHE_CLEARED' | 'YAML_UNICODE_ATTACK' | 'UNICODE_DIRECTION_OVERRIDE' | 'UNICODE_MIXED_SCRIPT' | 'UNICODE_VALIDATION_ERROR' | 'CONTENT_SIZE_EXCEEDED' | 'INCLUDE_DEPTH_EXCEEDED' | 'TEMPLATE_RENDERED' | 'TEMPLATE_INCLUDE' | 'TEMPLATE_LOADED' | 'TEMPLATE_SAVED' | 'TEMPLATE_DELETED' | 'MEMORY_CREATED' | 'MEMORY_ADDED' | 'MEMORY_SEARCHED' | 'SENSITIVE_MEMORY_DELETED' | 'RETENTION_POLICY_ENFORCED' | 'MEMORY_CLEARED' | 'MEMORY_LOADED' | 'MEMORY_SAVED' | 'MEMORY_DELETED' | 'MEMORY_LOAD_FAILED' | 'MEMORY_SAVE_FAILED' | 'MEMORY_LIST_ITEM_FAILED' | 'MEMORY_IMPORT_FAILED' | 'MEMORY_DESERIALIZE_FAILED' | 'MEMORY_INTEGRITY_VIOLATION' | 'MEMORY_UNICODE_VALIDATION_FAILED' | 'MEMORY_DUPLICATE_DETECTED' | 'ELEMENT_CREATED' | 'ELEMENT_DELETED' | 'AGENT_DECISION' | 'RULE_ENGINE_CONFIG_UPDATE' | 'RULE_ENGINE_CONFIG_VALIDATION_ERROR' | 'GOAL_TEMPLATE_APPLIED' | 'GOAL_TEMPLATE_VALIDATION' | 'ENSEMBLE_CIRCULAR_DEPENDENCY' | 'ENSEMBLE_RESOURCE_LIMIT_EXCEEDED' | 'ENSEMBLE_ACTIVATION_TIMEOUT' | 'ENSEMBLE_SUSPICIOUS_CONDITION' | 'ENSEMBLE_NESTED_DEPTH_EXCEEDED' | 'ENSEMBLE_CONTEXT_SIZE_EXCEEDED' | 'ENSEMBLE_SAVED' | 'ENSEMBLE_IMPORTED' | 'ENSEMBLE_DELETED' | 'PORTFOLIO_INITIALIZATION' | 'PORTFOLIO_POPULATED' | 'FILE_COPIED' | 'DIRECTORY_MIGRATION' | 'PORTFOLIO_CACHE_INVALIDATION' | 'PORTFOLIO_FETCH_SUCCESS' | 'TEST_DATA_BLOCKED' | 'TEST_PATH_SECURITY_RISK' | 'TEST_PRODUCTION_ACCESS_BLOCKED' | 'TEST_PATH_INVALID' | 'TEST_ENVIRONMENT_PRODUCTION_PATH' | 'TEST_ENVIRONMENT_DEPRECATED_VAR' | 'TOOL_CACHE_INVALIDATED';
9
9
  severity: 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL';
10
10
  source: string;
11
11
  details: string;
@@ -1 +1 @@
1
- {"version":3,"file":"securityMonitor.d.ts","sourceRoot":"","sources":["../../src/security/securityMonitor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"securityMonitor.d.ts","sourceRoot":"","sources":["../../src/security/securityMonitor.ts"],"names":[],"mappings":"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"}