@dollhousemcp/mcp-server 1.9.13 → 1.9.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +48 -0
- package/README.github.md +54 -0
- package/README.md.backup +1241 -49
- package/dist/cache/CollectionCache.js +2 -2
- package/dist/collection/CollectionIndexManager.js +3 -3
- package/dist/config/ConfigWizard.js +3 -3
- package/dist/config/indicator-config.js +2 -2
- package/dist/config/portfolio-constants.js +12 -12
- package/dist/elements/BaseElement.js +7 -7
- package/dist/elements/FeedbackProcessor.d.ts +7 -0
- package/dist/elements/FeedbackProcessor.d.ts.map +1 -1
- package/dist/elements/FeedbackProcessor.js +67 -14
- package/dist/elements/agents/AgentManager.js +6 -6
- package/dist/elements/memories/Memory.js +4 -4
- package/dist/elements/memories/MemoryManager.js +3 -3
- package/dist/elements/memories/utils.js +3 -3
- package/dist/elements/skills/Skill.js +2 -2
- package/dist/elements/skills/SkillManager.js +2 -2
- package/dist/elements/templates/Template.d.ts.map +1 -1
- package/dist/elements/templates/Template.js +38 -14
- package/dist/elements/templates/TemplateManager.js +2 -2
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/handlers/ConfigHandler.js +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -16
- package/dist/persona/PersonaElementManager.js +3 -3
- package/dist/persona/PersonaManager.js +2 -2
- package/dist/persona/export-import/PersonaImporter.js +3 -3
- package/dist/portfolio/DefaultElementProvider.d.ts +12 -0
- package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
- package/dist/portfolio/DefaultElementProvider.js +23 -6
- package/dist/portfolio/GitHubPortfolioIndexer.js +2 -2
- package/dist/portfolio/MigrationManager.js +2 -2
- package/dist/portfolio/NLPScoringManager.js +2 -2
- package/dist/portfolio/PortfolioManager.d.ts +5 -0
- package/dist/portfolio/PortfolioManager.d.ts.map +1 -1
- package/dist/portfolio/PortfolioManager.js +8 -1
- package/dist/portfolio/PortfolioRepoManager.js +2 -2
- package/dist/portfolio/PortfolioSyncManager.js +5 -5
- package/dist/portfolio/RelationshipManager.js +4 -4
- package/dist/portfolio/UnifiedIndexManager.js +4 -4
- package/dist/portfolio/types/RelationshipTypes.js +2 -2
- package/dist/security/InputValidator.d.ts +12 -0
- package/dist/security/InputValidator.d.ts.map +1 -1
- package/dist/security/InputValidator.js +38 -18
- package/dist/security/audit/config/suppressions.js +10 -10
- package/dist/security/commandValidator.js +2 -2
- package/dist/security/dosProtection.d.ts +123 -0
- package/dist/security/dosProtection.d.ts.map +1 -0
- package/dist/security/dosProtection.js +392 -0
- package/dist/security/pathValidator.js +2 -2
- package/dist/security/secureYamlParser.d.ts.map +1 -1
- package/dist/security/secureYamlParser.js +4 -3
- package/dist/security/tokenManager.js +10 -10
- package/dist/security/validators/unicodeValidator.js +2 -2
- package/dist/security/yamlValidator.js +3 -3
- package/dist/sync/PortfolioDownloader.js +2 -2
- package/dist/sync/PortfolioSyncComparer.js +2 -2
- package/dist/tools/portfolio/PortfolioElementAdapter.js +3 -3
- package/dist/tools/portfolio/submitToPortfolioTool.js +14 -14
- package/dist/utils/EarlyTerminationSearch.d.ts +1 -1
- package/dist/utils/EarlyTerminationSearch.d.ts.map +1 -1
- package/dist/utils/EarlyTerminationSearch.js +3 -3
- package/dist/utils/ElementFormatter.d.ts +1 -0
- package/dist/utils/ElementFormatter.d.ts.map +1 -1
- package/dist/utils/ElementFormatter.js +21 -13
- package/dist/utils/GitHubRateLimiter.d.ts +6 -0
- package/dist/utils/GitHubRateLimiter.d.ts.map +1 -1
- package/dist/utils/GitHubRateLimiter.js +20 -5
- package/dist/utils/RateLimiter.js +2 -2
- package/dist/utils/SecureDownloader.js +2 -2
- package/dist/utils/fileOperations.d.ts +6 -1
- package/dist/utils/fileOperations.d.ts.map +1 -1
- package/dist/utils/fileOperations.js +29 -5
- package/dist/utils/filesystem.js +6 -6
- package/dist/utils/searchUtils.js +2 -2
- package/dist/utils/version.js +3 -3
- package/package.json +1 -1
|
@@ -342,9 +342,9 @@ export class PersonaElementManager {
|
|
|
342
342
|
// Convert name to safe filename
|
|
343
343
|
const safeName = persona.metadata.name
|
|
344
344
|
.toLowerCase()
|
|
345
|
-
.
|
|
346
|
-
.
|
|
345
|
+
.replaceAll(/[^a-z0-9]+/g, '-') // Replace non-alphanumeric with hyphens
|
|
346
|
+
.replaceAll(/(^-+)|(-+$)/g, ''); // Remove leading/trailing hyphens
|
|
347
347
|
return `${safeName}.md`;
|
|
348
348
|
}
|
|
349
349
|
}
|
|
350
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVyc29uYUVsZW1lbnRNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BlcnNvbmEvUGVyc29uYUVsZW1lbnRNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBMEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRixPQUFPLEVBQUUsWUFBWSxFQUFvQixNQUFNLCtCQUErQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWpFLE1BQU0sT0FBTyxxQkFBcUI7SUFDeEIsZ0JBQWdCLENBQW1CO0lBQ25DLFdBQVcsQ0FBUztJQUU1QixZQUFZLGdCQUFtQztRQUM3QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMs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QU8sRUFBRSxPQUFPO1lBQ2hCLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFlBQVksRUFBRSxLQUFLO1lBQ25CLGlCQUFpQixFQUFFLE9BQU87WUFDMUIsS0FBSyxFQUFFLE1BQU07WUFDYixPQUFPLEVBQUUsY0FBYztZQUN2QixZQUFZLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BELFFBQVEsRUFBRSxFQUFFO1lBQ1osYUFBYSxFQUFFLEVBQUU7U0FDbEIsQ0FBQztRQUVGLE9BQU8sSUFBSSxjQUFjLENBQUMsRUFBRSxHQUFHLGVBQWUsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsa0JBQWtCLENBQUMsT0FBdUI7UUFDeEMsZ0NBQWdDO1FBQ2hDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSTthQUNuQyxXQUFXLEVBQUU7YUFDYixPQUFPLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFJLHdDQUF3QzthQUN2RSxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUUsa0NBQWtDO1FBRW5FLE9BQU8sR0FBRyxRQUFRLEtBQUssQ0FBQztJQUMxQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBlcnNvbmFFbGVtZW50TWFuYWdlciAtIEltcGxlbWVudGF0aW9uIG9mIElFbGVtZW50TWFuYWdlciBmb3IgUGVyc29uYUVsZW1lbnRcbiAqIEhhbmRsZXMgQ1JVRCBvcGVyYXRpb25zIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCBmb3IgcGVyc29uYXMgaW1wbGVtZW50aW5nIElFbGVtZW50XG4gKiBcbiAqIFNFQ1VSSVRZIEZJWEVTIElNUExFTUVOVEVEIChQUiAjMzE5KTpcbiAqIDEuIENSSVRJQ0FMOiBGaXhlZCByYWNlIGNvbmRpdGlvbnMgaW4gZmlsZSBvcGVyYXRpb25zIGJ5IHVzaW5nIEZpbGVMb2NrTWFuYWdlciBmb3IgYXRvbWljIHJlYWRzL3dyaXRlc1xuICogMi4gQ1JJVElDQUw6IEZpeGVkIGR5bmFtaWMgcmVxdWlyZSgpIHN0YXRlbWVudHMgYnkgdXNpbmcgc3RhdGljIGltcG9ydHNcbiAqIDMuIEhJR0g6IEZpeGVkIHVudmFsaWRhdGVkIFlBTUwgcGFyc2luZyB2dWxuZXJhYmlsaXR5IGJ5IHVzaW5nIFNlY3VyZVlhbWxQYXJzZXJcbiAqIDQuIE1FRElVTTogQWxsIHVzZXIgaW5wdXRzIGFyZSBub3cgdmFsaWRhdGVkIGFuZCBzYW5pdGl6ZWRcbiAqIDUuIE1FRElVTTogQXVkaXQgbG9nZ2luZyBhZGRlZCBmb3Igc2VjdXJpdHkgb3BlcmF0aW9uc1xuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IHsgSUVsZW1lbnRNYW5hZ2VyLCBFbGVtZW50VmFsaWRhdGlvblJlc3VsdCB9IGZyb20gJy4uL3R5cGVzL2VsZW1lbnRzL2luZGV4LmpzJztcbmltcG9ydCB7IEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vcG9ydGZvbGlvL3R5cGVzLmpzJztcbmltcG9ydCB7IFBlcnNvbmFFbGVtZW50LCBQZXJzb25hRWxlbWVudE1ldGFkYXRhIH0gZnJvbSAnLi9QZXJzb25hRWxlbWVudC5qcyc7XG5pbXBvcnQgeyBQb3J0Zm9saW9NYW5hZ2VyIH0gZnJvbSAnLi4vcG9ydGZvbGlvL1BvcnRmb2xpb01hbmFnZXIuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlciwgRXJyb3JDYXRlZ29yeSB9IGZyb20gJy4uL3V0aWxzL0Vycm9ySGFuZGxlci5qcyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3JDb2RlcywgU3lzdGVtRXJyb3JDb2RlcyB9IGZyb20gJy4uL3V0aWxzL2Vycm9yQ29kZXMuanMnO1xuaW1wb3J0IHsgdmFsaWRhdGVQYXRoLCB2YWxpZGF0ZUZpbGVuYW1lIH0gZnJvbSAnLi4vc2VjdXJpdHkvSW5wdXRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgZW5zdXJlRGlyZWN0b3J5IH0gZnJvbSAnLi4vdXRpbHMvZmlsZXN5c3RlbS5qcyc7XG5pbXBvcnQgeyBGaWxlTG9ja01hbmFnZXIgfSBmcm9tICcuLi9zZWN1cml0eS9maWxlTG9ja01hbmFnZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJlWWFtbFBhcnNlciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyZVlhbWxQYXJzZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcblxuZXhwb3J0IGNsYXNzIFBlcnNvbmFFbGVtZW50TWFuYWdlciBpbXBsZW1lbnRzIElFbGVtZW50TWFuYWdlcjxQZXJzb25hRWxlbWVudD4ge1xuICBwcml2YXRlIHBvcnRmb2xpb01hbmFnZXI6IFBvcnRmb2xpb01hbmFnZXI7XG4gIHByaXZhdGUgcGVyc29uYXNEaXI6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwb3J0Zm9saW9NYW5hZ2VyPzogUG9ydGZvbGlvTWFuYWdlcikge1xuICAgIHRoaXMucG9ydGZvbGlvTWFuYWdlciA9IHBvcnRmb2xpb01hbmFnZXIgfHwgUG9ydGZvbGlvTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgIHRoaXMucGVyc29uYXNEaXIgPSB0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5QRVJTT05BKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGEgcGVyc29uYSBmcm9tIGZpbGVcbiAgICogU0VDVVJJVFkgRklYICMxOiBVc2VzIEZpbGVMb2NrTWFuYWdlci5hdG9taWNSZWFkRmlsZSgpIGluc3RlYWQgb2YgZnMucmVhZEZpbGUoKVxuICAgKiB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBhbmQgZW5zdXJlIGF0b21pYyBmaWxlIG9wZXJhdGlvbnNcbiAgICovXG4gIGFzeW5jIGxvYWQoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8UGVyc29uYUVsZW1lbnQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gUmVzb2x2ZSBmdWxsIHBhdGggaWYgcmVsYXRpdmVcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5pc0Fic29sdXRlKGZpbGVQYXRoKSA/IGZpbGVQYXRoIDogcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIsIGZpbGVQYXRoKTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgcGF0aCBzZWN1cml0eVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlUGF0aChmdWxsUGF0aCkpIHtcbiAgICAgICAgLy8gU0VDVVJJVFkgRklYICMyMDY6IERvbid0IGV4cG9zZSB1c2VyIHBhdGhzIGluIGVycm9yIG1lc3NhZ2VzXG4gICAgICAgIGxvZ2dlci5lcnJvcignSW52YWxpZCBvciB1bnNhZmUgcGF0aCcsIHsgcGF0aDogZmlsZVBhdGggfSk7XG4gICAgICAgIHRocm93IEVycm9ySGFuZGxlci5jcmVhdGVFcnJvcignSW52YWxpZCBvciB1bnNhZmUgcGF0aCcsIEVycm9yQ2F0ZWdvcnkuVkFMSURBVElPTl9FUlJPUiwgVmFsaWRhdGlvbkVycm9yQ29kZXMuSU5WQUxJRF9QQVRIKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ1JJVElDQUwgRklYOiBVc2UgYXRvbWljIGZpbGUgcmVhZCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9uc1xuICAgICAgLy8gUHJldmlvdXNseTogY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKGZ1bGxQYXRoLCAndXRmLTgnKTtcbiAgICAgIC8vIE5vdzogVXNlcyBGaWxlTG9ja01hbmFnZXIgd2l0aCBwcm9wZXIgZW5jb2Rpbmcgb2JqZWN0IGZvcm1hdFxuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IEZpbGVMb2NrTWFuYWdlci5hdG9taWNSZWFkRmlsZShmdWxsUGF0aCwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIGEgbmV3IFBlcnNvbmFFbGVtZW50IGFuZCBkZXNlcmlhbGl6ZVxuICAgICAgY29uc3QgcGVyc29uYSA9IG5ldyBQZXJzb25hRWxlbWVudCh7fSwgJycsIHBhdGguYmFzZW5hbWUoZnVsbFBhdGgpKTtcbiAgICAgIHBlcnNvbmEuZGVzZXJpYWxpemUoY29udGVudCk7XG4gICAgICBcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgTG9hZGVkIHBlcnNvbmE6ICR7cGVyc29uYS5tZXRhZGF0YS5uYW1lfSBmcm9tICR7ZmlsZVBhdGh9YCk7XG4gICAgICByZXR1cm4gcGVyc29uYTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBsb2FkIHBlcnNvbmEgZnJvbSAke2ZpbGVQYXRofTogJHtlcnJvcn1gKTtcbiAgICAgIHRocm93IEVycm9ySGFuZGxlci53cmFwRXJyb3IoZXJyb3IsICdGYWlsZWQgdG8gbG9hZCBwZXJzb25hJywgRXJyb3JDYXRlZ29yeS5TWVNURU1fRVJST1IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGEgcGVyc29uYSB0byBmaWxlXG4gICAqIFNFQ1VSSVRZIEZJWCAjMTogVXNlcyBGaWxlTG9ja01hbmFnZXIuYXRvbWljV3JpdGVGaWxlKCkgaW5zdGVhZCBvZiBmcy53cml0ZUZpbGUoKVxuICAgKiB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBhbmQgZW5zdXJlIGF0b21pYyBmaWxlIG9wZXJhdGlvbnNcbiAgICovXG4gIGFzeW5jIHNhdmUoZWxlbWVudDogUGVyc29uYUVsZW1lbnQsIGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gRW5zdXJlIHBlcnNvbmFzIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGF3YWl0IGVuc3VyZURpcmVjdG9yeSh0aGlzLnBlcnNvbmFzRGlyKTtcblxuICAgICAgLy8gUmVzb2x2ZSBmdWxsIHBhdGggaWYgcmVsYXRpdmVcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5pc0Fic29sdXRlKGZpbGVQYXRoKSA/IGZpbGVQYXRoIDogcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIsIGZpbGVQYXRoKTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgcGF0aCBzZWN1cml0eVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlUGF0aChmdWxsUGF0aCkpIHtcbiAgICAgICAgLy8gU0VDVVJJVFkgRklYICMyMDY6IERvbid0IGV4cG9zZSB1c2VyIHBhdGhzIGluIGVycm9yIG1lc3NhZ2VzXG4gICAgICAgIGxvZ2dlci5lcnJvcignSW52YWxpZCBvciB1bnNhZmUgcGF0aCcsIHsgcGF0aDogZmlsZVBhdGggfSk7XG4gICAgICAgIHRocm93IEVycm9ySGFuZGxlci5jcmVhdGVFcnJvcignSW52YWxpZCBvciB1bnNhZmUgcGF0aCcsIEVycm9yQ2F0ZWdvcnkuVkFMSURBVElPTl9FUlJPUiwgVmFsaWRhdGlvbkVycm9yQ29kZXMuSU5WQUxJRF9QQVRIKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2VyaWFsaXplIHRoZSBwZXJzb25hXG4gICAgICBjb25zdCBjb250ZW50ID0gZWxlbWVudC5zZXJpYWxpemUoKTtcbiAgICAgIFxuICAgICAgLy8gQ1JJVElDQUwgRklYOiBVc2UgYXRvbWljIGZpbGUgd3JpdGUgdG8gcHJldmVudCBjb3JydXB0aW9uIGR1cmluZyBpbnRlcnJ1cHRpb25zXG4gICAgICAvLyBQcmV2aW91c2x5OiBhd2FpdCBmcy53cml0ZUZpbGUoZnVsbFBhdGgsIGNvbnRlbnQsICd1dGYtOCcpO1xuICAgICAgLy8gTm93OiBVc2VzIEZpbGVMb2NrTWFuYWdlciB3aXRoIHByb3BlciBlbmNvZGluZyBvYmplY3QgZm9ybWF0XG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHBhcnRpYWwgd3JpdGVzIGFuZCBkYXRhIGNvcnJ1cHRpb24gaWYgdGhlIHByb2Nlc3MgaXMgaW50ZXJydXB0ZWRcbiAgICAgIGF3YWl0IEZpbGVMb2NrTWFuYWdlci5hdG9taWNXcml0ZUZpbGUoZnVsbFBhdGgsIGNvbnRlbnQsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSBmaWxlbmFtZSBpbiBlbGVtZW50XG4gICAgICBlbGVtZW50LmZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmdWxsUGF0aCk7XG4gICAgICBcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgU2F2ZWQgcGVyc29uYTogJHtlbGVtZW50Lm1ldGFkYXRhLm5hbWV9IHRvICR7ZmlsZVBhdGh9YCk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gc2F2ZSBwZXJzb25hIHRvICR7ZmlsZVBhdGh9OiAke2Vycm9yfWApO1xuICAgICAgdGhyb3cgRXJyb3JIYW5kbGVyLndyYXBFcnJvcihlcnJvciwgJ0ZhaWxlZCB0byBzYXZlIHBlcnNvbmEnLCBFcnJvckNhdGVnb3J5LlNZU1RFTV9FUlJPUik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhIHBlcnNvbmEgZmlsZVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gUmVzb2x2ZSBmdWxsIHBhdGggaWYgcmVsYXRpdmVcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5pc0Fic29sdXRlKGZpbGVQYXRoKSA/IGZpbGVQYXRoIDogcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIsIGZpbGVQYXRoKTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgcGF0aCBzZWN1cml0eVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlUGF0aChmdWxsUGF0aCkpIHtcbiAgICAgICAgLy8gU0VDVVJJVFkgRklYICMyMDY6IERvbid0IGV4cG9zZSB1c2VyIHBhdGhzIGluIGVycm9yIG1lc3NhZ2VzXG4gICAgICAgIGxvZ2dlci5lcnJvcignSW52YWxpZCBvciB1bnNhZmUgcGF0aCcsIHsgcGF0aDogZmlsZVBhdGggfSk7XG4gICAgICAgIHRocm93IEVycm9ySGFuZGxlci5jcmVhdGVFcnJvcignSW52YWxpZCBvciB1bnNhZmUgcGF0aCcsIEVycm9yQ2F0ZWdvcnkuVkFMSURBVElPTl9FUlJPUiwgVmFsaWRhdGlvbkVycm9yQ29kZXMuSU5WQUxJRF9QQVRIKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgZnMudW5saW5rKGZ1bGxQYXRoKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgRGVsZXRlZCBwZXJzb25hIGZpbGU6ICR7ZmlsZVBhdGh9YCk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZGVsZXRlIHBlcnNvbmEgJHtmaWxlUGF0aH06ICR7ZXJyb3J9YCk7XG4gICAgICB0aHJvdyBFcnJvckhhbmRsZXIud3JhcEVycm9yKGVycm9yLCAnRmFpbGVkIHRvIGRlbGV0ZSBwZXJzb25hJywgRXJyb3JDYXRlZ29yeS5TWVNURU1fRVJST1IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHBlcnNvbmEgZmlsZSBleGlzdHNcbiAgICovXG4gIGFzeW5jIGV4aXN0cyhmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFJlc29sdmUgZnVsbCBwYXRoIGlmIHJlbGF0aXZlXG4gICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguaXNBYnNvbHV0ZShmaWxlUGF0aCkgPyBmaWxlUGF0aCA6IHBhdGguam9pbih0aGlzLnBlcnNvbmFzRGlyLCBmaWxlUGF0aCk7XG4gICAgICBcbiAgICAgIGF3YWl0IGZzLmFjY2VzcyhmdWxsUGF0aCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdCBhbGwgcGVyc29uYXNcbiAgICovXG4gIGFzeW5jIGxpc3QoKTogUHJvbWlzZTxQZXJzb25hRWxlbWVudFtdPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEVuc3VyZSBkaXJlY3RvcnkgZXhpc3RzXG4gICAgICBhd2FpdCBlbnN1cmVEaXJlY3RvcnkodGhpcy5wZXJzb25hc0Rpcik7XG5cbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZnMucmVhZGRpcih0aGlzLnBlcnNvbmFzRGlyKTtcbiAgICAgIGNvbnN0IG1hcmtkb3duRmlsZXMgPSBmaWxlcy5maWx0ZXIoZmlsZSA9PiBmaWxlLmVuZHNXaXRoKCcubWQnKSk7XG4gICAgICBcbiAgICAgIGNvbnN0IHBlcnNvbmFzOiBQZXJzb25hRWxlbWVudFtdID0gW107XG4gICAgICBcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBtYXJrZG93bkZpbGVzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGVyc29uYSA9IGF3YWl0IHRoaXMubG9hZChmaWxlKTtcbiAgICAgICAgICBwZXJzb25hcy5wdXNoKHBlcnNvbmEpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcihgRXJyb3IgbG9hZGluZyBwZXJzb25hICR7ZmlsZX06ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgLy8gQ29udGludWUgd2l0aCBvdGhlciBwZXJzb25hc1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5kZWJ1ZyhgTG9hZGVkICR7cGVyc29uYXMubGVuZ3RofSBwZXJzb25hcyBmcm9tICR7dGhpcy5wZXJzb25hc0Rpcn1gKTtcbiAgICAgIHJldHVybiBwZXJzb25hcztcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBsaXN0IHBlcnNvbmFzOiAke2Vycm9yfWApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGEgcGVyc29uYSBieSBwcmVkaWNhdGVcbiAgICovXG4gIGFzeW5jIGZpbmQocHJlZGljYXRlOiAoZWxlbWVudDogUGVyc29uYUVsZW1lbnQpID0+IGJvb2xlYW4pOiBQcm9taXNlPFBlcnNvbmFFbGVtZW50IHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgcGVyc29uYXMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcbiAgICByZXR1cm4gcGVyc29uYXMuZmluZChwcmVkaWNhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgbXVsdGlwbGUgcGVyc29uYXMgYnkgcHJlZGljYXRlXG4gICAqL1xuICBhc3luYyBmaW5kTWFueShwcmVkaWNhdGU6IChlbGVtZW50OiBQZXJzb25hRWxlbWVudCkgPT4gYm9vbGVhbik6IFByb21pc2U8UGVyc29uYUVsZW1lbnRbXT4ge1xuICAgIGNvbnN0IHBlcnNvbmFzID0gYXdhaXQgdGhpcy5saXN0KCk7XG4gICAgcmV0dXJuIHBlcnNvbmFzLmZpbHRlcihwcmVkaWNhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGEgcGVyc29uYSBlbGVtZW50XG4gICAqL1xuICB2YWxpZGF0ZShlbGVtZW50OiBQZXJzb25hRWxlbWVudCk6IEVsZW1lbnRWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICByZXR1cm4gZWxlbWVudC52YWxpZGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGEgZmlsZSBwYXRoXG4gICAqL1xuICB2YWxpZGF0ZVBhdGgoZmlsZVBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICB2YWxpZGF0ZVBhdGgoZmlsZVBhdGgpO1xuICAgICAgXG4gICAgICAvLyBBZGRpdGlvbmFsIGNoZWNrOiBtdXN0IGJlIC5tZCBmaWxlXG4gICAgICBpZiAoIWZpbGVQYXRoLmVuZHNXaXRoKCcubWQnKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIE11c3QgYmUgd2l0aGluIHBlcnNvbmFzIGRpcmVjdG9yeVxuICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLnJlc29sdmUoZmlsZVBhdGgpO1xuICAgICAgY29uc3QgcGVyc29uYXNEaXJQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMucGVyc29uYXNEaXIpO1xuICAgICAgXG4gICAgICByZXR1cm4gZnVsbFBhdGguc3RhcnRzV2l0aChwZXJzb25hc0RpclBhdGgpO1xuICAgICAgXG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBlbGVtZW50IHR5cGVcbiAgICovXG4gIGdldEVsZW1lbnRUeXBlKCk6IEVsZW1lbnRUeXBlIHtcbiAgICByZXR1cm4gRWxlbWVudFR5cGUuUEVSU09OQTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZmlsZSBleHRlbnNpb25cbiAgICovXG4gIGdldEZpbGVFeHRlbnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJy5tZCc7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IHBlcnNvbmEgZnJvbSBkYXRhXG4gICAqIFNFQ1VSSVRZIEZJWCAjMzogVXNlcyBTZWN1cmVZYW1sUGFyc2VyIGluc3RlYWQgb2YgdW5zYWZlIFlBTUwgcGFyc2luZyB0byBwcmV2ZW50XG4gICAqIFlBTUwgZGVzZXJpYWxpemF0aW9uIGF0dGFja3MgYW5kIGluamVjdGlvbiB2dWxuZXJhYmlsaXRpZXNcbiAgICovXG4gIGFzeW5jIGltcG9ydEVsZW1lbnQoZGF0YTogc3RyaW5nLCBmb3JtYXQ6ICdqc29uJyB8ICd5YW1sJyB8ICdtYXJrZG93bicgPSAnbWFya2Rvd24nKTogUHJvbWlzZTxQZXJzb25hRWxlbWVudD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwZXJzb25hID0gbmV3IFBlcnNvbmFFbGVtZW50KHt9KTtcbiAgICAgIFxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ21hcmtkb3duJykge1xuICAgICAgICBwZXJzb25hLmRlc2VyaWFsaXplKGRhdGEpO1xuICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICBjb25zdCBqc29uRGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgIHBlcnNvbmEuZGVzZXJpYWxpemUodGhpcy5qc29uVG9NYXJrZG93bihqc29uRGF0YSkpO1xuICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICd5YW1sJykge1xuICAgICAgICAvLyBISUdIIFNFVkVSSVRZIEZJWDogVXNlIFNlY3VyZVlhbWxQYXJzZXIgdG8gcHJldmVudCBZQU1MIGluamVjdGlvbiBhdHRhY2tzXG4gICAgICAgIC8vIFByZXZpb3VzbHk6IFVzZWQgdW5zYWZlIFlBTUwgcGFyc2luZyB3aXRob3V0IHZhbGlkYXRpb25cbiAgICAgICAgLy8gTm93OiBVc2VzIFNlY3VyZVlhbWxQYXJzZXIgd2hpY2ggdmFsaWRhdGVzIGNvbnRlbnQgYW5kIHByZXZlbnRzIG1hbGljaW91cyBwYXR0ZXJuc1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IFNlY3VyZVlhbWxQYXJzZXIucGFyc2UoZGF0YSwge1xuICAgICAgICAgICAgbWF4WWFtbFNpemU6IDY0ICogMTAyNCwgLy8gNjRLQiBsaW1pdFxuICAgICAgICAgICAgdmFsaWRhdGVDb250ZW50OiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gTG9nIHNlY3VyaXR5IGV2ZW50IGZvciBhdWRpdCB0cmFpbFxuICAgICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICAgIHR5cGU6ICdZQU1MX1BBUlNFX1NVQ0NFU1MnLFxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICAgICAgc291cmNlOiAnUGVyc29uYUVsZW1lbnRNYW5hZ2VyLmltcG9ydEVsZW1lbnQnLFxuICAgICAgICAgICAgZGV0YWlsczogJ1lBTUwgY29udGVudCBzYWZlbHkgcGFyc2VkIGR1cmluZyBpbXBvcnQnXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQ29udmVydCBwYXJzZWQgWUFNTCB0byBtYXJrZG93biBmb3JtYXRcbiAgICAgICAgICBwZXJzb25hLmRlc2VyaWFsaXplKHRoaXMuanNvblRvTWFya2Rvd24ocGFyc2VkLmRhdGEpKTtcbiAgICAgICAgfSBjYXRjaCAoc2VjdXJpdHlFcnJvcikge1xuICAgICAgICAgIC8vIExvZyB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uXG4gICAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgICAgdHlwZTogJ1lBTUxfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdISUdIJyxcbiAgICAgICAgICAgIHNvdXJjZTogJ1BlcnNvbmFFbGVtZW50TWFuYWdlci5pbXBvcnRFbGVtZW50JyxcbiAgICAgICAgICAgIGRldGFpbHM6IGBZQU1MIHBhcnNpbmcgZmFpbGVkIHNlY3VyaXR5IHZhbGlkYXRpb246ICR7c2VjdXJpdHlFcnJvcn1gXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgc2VjdXJpdHlFcnJvcjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgRXJyb3JIYW5kbGVyLmNyZWF0ZUVycm9yKGBVbnN1cHBvcnRlZCBmb3JtYXQ6ICR7Zm9ybWF0fWAsIEVycm9yQ2F0ZWdvcnkuVkFMSURBVElPTl9FUlJPUiwgU3lzdGVtRXJyb3JDb2Rlcy5VTlNVUFBPUlRFRF9GT1JNQVQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGVyc29uYTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBpbXBvcnQgcGVyc29uYTogJHtlcnJvcn1gKTtcbiAgICAgIHRocm93IEVycm9ySGFuZGxlci53cmFwRXJyb3IoZXJyb3IsICdQZXJzb25hIGVsZW1lbnQgaW1wb3J0IGZhaWxlZCcsIEVycm9yQ2F0ZWdvcnkuU1lTVEVNX0VSUk9SKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IHBlcnNvbmEgdG8gZGF0YVxuICAgKiBTRUNVUklUWSBGSVggIzI6IFVzZXMgc3RhdGljIGltcG9ydCBvZiBqcy15YW1sIGF0IHRvcCBvZiBmaWxlIGluc3RlYWQgb2ZcbiAgICogZHluYW1pYyByZXF1aXJlKCkgZm9yIGJldHRlciBzZWN1cml0eSBhbmQgYnVuZGxpbmdcbiAgICogU0VDVVJJVFkgRklYICMzOiBVc2VzIHNlY3VyZSBZQU1MIGR1bXBpbmcgd2l0aCBzYWZldHkgb3B0aW9uc1xuICAgKi9cbiAgYXN5bmMgZXhwb3J0RWxlbWVudChlbGVtZW50OiBQZXJzb25hRWxlbWVudCwgZm9ybWF0OiAnanNvbicgfCAneWFtbCcgfCAnbWFya2Rvd24nID0gJ21hcmtkb3duJyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChmb3JtYXQgPT09ICdtYXJrZG93bicpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuc2VyaWFsaXplKCk7XG4gICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnN0IGxlZ2FjeSA9IGVsZW1lbnQudG9MZWdhY3koKTtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHsgLi4ubGVnYWN5LCBjb250ZW50OiBlbGVtZW50LmNvbnRlbnQgfSwgbnVsbCwgMik7XG4gICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ3lhbWwnKSB7XG4gICAgICAgIGNvbnN0IGxlZ2FjeSA9IGVsZW1lbnQudG9MZWdhY3koKTtcbiAgICAgICAgLy8gQ1JJVElDQUwgRklYOiBVc2luZyBzYWZlIFlBTUwgZHVtcCB3aXRoIHNlY3VyaXR5IG9wdGlvbnNcbiAgICAgICAgLy8gUHJldmlvdXNseTogVXNlZCBkeW5hbWljIHJlcXVpcmUgd2l0aG91dCBzYWZldHkgb3B0aW9uc1xuICAgICAgICAvLyBOb3c6IFVzZXMgc3RhdGljIGltcG9ydCB3aXRoIHNhZmUgc2NoZW1hIGFuZCBzZWN1cml0eSBmbGFnc1xuICAgICAgICByZXR1cm4geWFtbC5kdW1wKHsgLi4ubGVnYWN5LCBjb250ZW50OiBlbGVtZW50LmNvbnRlbnQgfSwge1xuICAgICAgICAgIHNjaGVtYTogeWFtbC5GQUlMU0FGRV9TQ0hFTUEsICAvLyBVc2UgcmVzdHJpY3RlZCBzY2hlbWFcbiAgICAgICAgICBza2lwSW52YWxpZDogdHJ1ZSwgICAgICAgICAgICAgIC8vIFNraXAgaW52YWxpZCBkYXRhIGluc3RlYWQgb2YgdGhyb3dpbmdcbiAgICAgICAgICBub1JlZnM6IHRydWUsICAgICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgcmVmZXJlbmNlIGF0dGFja3NcbiAgICAgICAgICBub0NvbXBhdE1vZGU6IHRydWUgICAgICAgICAgICAgIC8vIFVzZSBzdHJpY3QgWUFNTCBtb2RlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgRXJyb3JIYW5kbGVyLmNyZWF0ZUVycm9yKGBVbnN1cHBvcnRlZCBmb3JtYXQ6ICR7Zm9ybWF0fWAsIEVycm9yQ2F0ZWdvcnkuVkFMSURBVElPTl9FUlJPUiwgU3lzdGVtRXJyb3JDb2Rlcy5VTlNVUFBPUlRFRF9GT1JNQVQpO1xuICAgICAgfVxuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGV4cG9ydCBwZXJzb25hOiAke2Vycm9yfWApO1xuICAgICAgdGhyb3cgRXJyb3JIYW5kbGVyLndyYXBFcnJvcihlcnJvciwgJ1BlcnNvbmEgZWxlbWVudCBleHBvcnQgZmFpbGVkJywgRXJyb3JDYXRlZ29yeS5TWVNURU1fRVJST1IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXI6IENvbnZlcnQgSlNPTiBkYXRhIHRvIG1hcmtkb3duIGZvcm1hdFxuICAgKiBTRUNVUklUWSBGSVggIzI6IFVzZXMgc3RhdGljYWxseSBpbXBvcnRlZCB5YW1sIG1vZHVsZVxuICAgKiBTRUNVUklUWSBGSVggIzM6IFVzZXMgc2VjdXJlIFlBTUwgZHVtcGluZyB3aXRoIHNhZmV0eSBvcHRpb25zXG4gICAqIE5vdGU6IFRoaXMgaXMgZm9yIGludGVybmFsIGNvbnZlcnNpb24gb25seSwgdXNlci1wcm92aWRlZCBZQU1MIG11c3QgdXNlIFNlY3VyZVlhbWxQYXJzZXJcbiAgICovXG4gIHByaXZhdGUganNvblRvTWFya2Rvd24oZGF0YTogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB7IGNvbnRlbnQsIC4uLm1ldGFkYXRhIH0gPSBkYXRhO1xuICAgIC8vIFVzaW5nIHNhZmUgWUFNTCBkdW1wIHdpdGggc2VjdXJpdHkgb3B0aW9uc1xuICAgIGNvbnN0IHlhbWxGcm9udG1hdHRlciA9IHlhbWwuZHVtcChtZXRhZGF0YSwge1xuICAgICAgc2NoZW1hOiB5YW1sLkZBSUxTQUZFX1NDSEVNQSwgIC8vIFVzZSByZXN0cmljdGVkIHNjaGVtYVxuICAgICAgc2tpcEludmFsaWQ6IHRydWUsICAgICAgICAgICAgICAvLyBTa2lwIGludmFsaWQgZGF0YVxuICAgICAgbm9SZWZzOiB0cnVlLCAgICAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IHJlZmVyZW5jZSBhdHRhY2tzXG4gICAgICBub0NvbXBhdE1vZGU6IHRydWUgICAgICAgICAgICAgIC8vIFVzZSBzdHJpY3QgWUFNTCBtb2RlXG4gICAgfSk7XG4gICAgcmV0dXJuIGAtLS1cXG4ke3lhbWxGcm9udG1hdHRlcn0tLS1cXG5cXG4ke2NvbnRlbnQgfHwgJyd9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgcGVyc29uYSB3aXRoIGRlZmF1bHQgbWV0YWRhdGFcbiAgICovXG4gIGNyZWF0ZShtZXRhZGF0YTogUGFydGlhbDxQZXJzb25hRWxlbWVudE1ldGFkYXRhPik6IFBlcnNvbmFFbGVtZW50IHtcbiAgICBjb25zdCBkZWZhdWx0TWV0YWRhdGE6IFBhcnRpYWw8UGVyc29uYUVsZW1lbnRNZXRhZGF0YT4gPSB7XG4gICAgICBuYW1lOiAnTmV3IFBlcnNvbmEnLFxuICAgICAgZGVzY3JpcHRpb246ICdBIG5ldyBwZXJzb25hJyxcbiAgICAgIHZlcnNpb246ICcxLjAuMCcsXG4gICAgICBjYXRlZ29yeTogJ3BlcnNvbmFsJyxcbiAgICAgIGFnZV9yYXRpbmc6ICdhbGwnLFxuICAgICAgYWlfZ2VuZXJhdGVkOiBmYWxzZSxcbiAgICAgIGdlbmVyYXRpb25fbWV0aG9kOiAnaHVtYW4nLFxuICAgICAgcHJpY2U6ICdmcmVlJyxcbiAgICAgIGxpY2Vuc2U6ICdDQy1CWS1TQS00LjAnLFxuICAgICAgY3JlYXRlZF9kYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSxcbiAgICAgIHRyaWdnZXJzOiBbXSxcbiAgICAgIGNvbnRlbnRfZmxhZ3M6IFtdXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUGVyc29uYUVsZW1lbnQoeyAuLi5kZWZhdWx0TWV0YWRhdGEsIC4uLm1ldGFkYXRhIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkZWZhdWx0IGZpbGVuYW1lIGZvciBhIHBlcnNvbmFcbiAgICovXG4gIGdldERlZmF1bHRGaWxlbmFtZShwZXJzb25hOiBQZXJzb25hRWxlbWVudCk6IHN0cmluZyB7XG4gICAgLy8gQ29udmVydCBuYW1lIHRvIHNhZmUgZmlsZW5hbWVcbiAgICBjb25zdCBzYWZlTmFtZSA9IHBlcnNvbmEubWV0YWRhdGEubmFtZVxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC5yZXBsYWNlKC9bXmEtejAtOV0rL2csICctJykgICAgLy8gUmVwbGFjZSBub24tYWxwaGFudW1lcmljIHdpdGggaHlwaGVuc1xuICAgICAgLnJlcGxhY2UoLyheLSspfCgtKyQpL2csICcnKTsgIC8vIFJlbW92ZSBsZWFkaW5nL3RyYWlsaW5nIGh5cGhlbnNcbiAgICBcbiAgICByZXR1cm4gYCR7c2FmZU5hbWV9Lm1kYDtcbiAgfVxufSJdfQ==
|
|
350
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVyc29uYUVsZW1lbnRNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BlcnNvbmEvUGVyc29uYUVsZW1lbnRNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBMEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRixPQUFPLEVBQUUsWUFBWSxFQUFvQixNQUFNLCtCQUErQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWpFLE1BQU0sT0FBTyxxQkFBcUI7SUFDeEIsZ0JBQWdCLENBQW1CO0lBQ25DLFdBQVcsQ0FBUztJQUU1QixZQUFZLGdCQUFtQztRQUM3QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMs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QU8sRUFBRSxPQUFPO1lBQ2hCLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFlBQVksRUFBRSxLQUFLO1lBQ25CLGlCQUFpQixFQUFFLE9BQU87WUFDMUIsS0FBSyxFQUFFLE1BQU07WUFDYixPQUFPLEVBQUUsY0FBYztZQUN2QixZQUFZLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BELFFBQVEsRUFBRSxFQUFFO1lBQ1osYUFBYSxFQUFFLEVBQUU7U0FDbEIsQ0FBQztRQUVGLE9BQU8sSUFBSSxjQUFjLENBQUMsRUFBRSxHQUFHLGVBQWUsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsa0JBQWtCLENBQUMsT0FBdUI7UUFDeEMsZ0NBQWdDO1FBQ2hDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSTthQUNuQyxXQUFXLEVBQUU7YUFDYixVQUFVLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFJLHdDQUF3QzthQUMxRSxVQUFVLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUUsa0NBQWtDO1FBRXRFLE9BQU8sR0FBRyxRQUFRLEtBQUssQ0FBQztJQUMxQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBlcnNvbmFFbGVtZW50TWFuYWdlciAtIEltcGxlbWVudGF0aW9uIG9mIElFbGVtZW50TWFuYWdlciBmb3IgUGVyc29uYUVsZW1lbnRcbiAqIEhhbmRsZXMgQ1JVRCBvcGVyYXRpb25zIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCBmb3IgcGVyc29uYXMgaW1wbGVtZW50aW5nIElFbGVtZW50XG4gKiBcbiAqIFNFQ1VSSVRZIEZJWEVTIElNUExFTUVOVEVEIChQUiAjMzE5KTpcbiAqIDEuIENSSVRJQ0FMOiBGaXhlZCByYWNlIGNvbmRpdGlvbnMgaW4gZmlsZSBvcGVyYXRpb25zIGJ5IHVzaW5nIEZpbGVMb2NrTWFuYWdlciBmb3IgYXRvbWljIHJlYWRzL3dyaXRlc1xuICogMi4gQ1JJVElDQUw6IEZpeGVkIGR5bmFtaWMgcmVxdWlyZSgpIHN0YXRlbWVudHMgYnkgdXNpbmcgc3RhdGljIGltcG9ydHNcbiAqIDMuIEhJR0g6IEZpeGVkIHVudmFsaWRhdGVkIFlBTUwgcGFyc2luZyB2dWxuZXJhYmlsaXR5IGJ5IHVzaW5nIFNlY3VyZVlhbWxQYXJzZXJcbiAqIDQuIE1FRElVTTogQWxsIHVzZXIgaW5wdXRzIGFyZSBub3cgdmFsaWRhdGVkIGFuZCBzYW5pdGl6ZWRcbiAqIDUuIE1FRElVTTogQXVkaXQgbG9nZ2luZyBhZGRlZCBmb3Igc2VjdXJpdHkgb3BlcmF0aW9uc1xuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IHsgSUVsZW1lbnRNYW5hZ2VyLCBFbGVtZW50VmFsaWRhdGlvblJlc3VsdCB9IGZyb20gJy4uL3R5cGVzL2VsZW1lbnRzL2luZGV4LmpzJztcbmltcG9ydCB7IEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vcG9ydGZvbGlvL3R5cGVzLmpzJztcbmltcG9ydCB7IFBlcnNvbmFFbGVtZW50LCBQZXJzb25hRWxlbWVudE1ldGFkYXRhIH0gZnJvbSAnLi9QZXJzb25hRWxlbWVudC5qcyc7XG5pbXBvcnQgeyBQb3J0Zm9saW9NYW5hZ2VyIH0gZnJvbSAnLi4vcG9ydGZvbGlvL1BvcnRmb2xpb01hbmFnZXIuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlciwgRXJyb3JDYXRlZ29yeSB9IGZyb20gJy4uL3V0aWxzL0Vycm9ySGFuZGxlci5qcyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3JDb2RlcywgU3lzdGVtRXJyb3JDb2RlcyB9IGZyb20gJy4uL3V0aWxzL2Vycm9yQ29kZXMuanMnO1xuaW1wb3J0IHsgdmFsaWRhdGVQYXRoLCB2YWxpZGF0ZUZpbGVuYW1lIH0gZnJvbSAnLi4vc2VjdXJpdHkvSW5wdXRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgZW5zdXJlRGlyZWN0b3J5IH0gZnJvbSAnLi4vdXRpbHMvZmlsZXN5c3RlbS5qcyc7XG5pbXBvcnQgeyBGaWxlTG9ja01hbmFnZXIgfSBmcm9tICcuLi9zZWN1cml0eS9maWxlTG9ja01hbmFnZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJlWWFtbFBhcnNlciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyZVlhbWxQYXJzZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcblxuZXhwb3J0IGNsYXNzIFBlcnNvbmFFbGVtZW50TWFuYWdlciBpbXBsZW1lbnRzIElFbGVtZW50TWFuYWdlcjxQZXJzb25hRWxlbWVudD4ge1xuICBwcml2YXRlIHBvcnRmb2xpb01hbmFnZXI6IFBvcnRmb2xpb01hbmFnZXI7XG4gIHByaXZhdGUgcGVyc29uYXNEaXI6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwb3J0Zm9saW9NYW5hZ2VyPzogUG9ydGZvbGlvTWFuYWdlcikge1xuICAgIHRoaXMucG9ydGZvbGlvTWFuYWdlciA9IHBvcnRmb2xpb01hbmFnZXIgfHwgUG9ydGZvbGlvTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgIHRoaXMucGVyc29uYXNEaXIgPSB0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihFbGVtZW50VHlwZS5QRVJTT05BKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGEgcGVyc29uYSBmcm9tIGZpbGVcbiAgICogU0VDVVJJVFkgRklYICMxOiBVc2VzIEZpbGVMb2NrTWFuYWdlci5hdG9taWNSZWFkRmlsZSgpIGluc3RlYWQgb2YgZnMucmVhZEZpbGUoKVxuICAgKiB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBhbmQgZW5zdXJlIGF0b21pYyBmaWxlIG9wZXJhdGlvbnNcbiAgICovXG4gIGFzeW5jIGxvYWQoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8UGVyc29uYUVsZW1lbnQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gUmVzb2x2ZSBmdWxsIHBhdGggaWYgcmVsYXRpdmVcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5pc0Fic29sdXRlKGZpbGVQYXRoKSA/IGZpbGVQYXRoIDogcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIsIGZpbGVQYXRoKTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgcGF0aCBzZWN1cml0eVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlUGF0aChmdWxsUGF0aCkpIHtcbiAgICAgICAgLy8gU0VDVVJJVFkgRklYICMyMDY6IERvbid0IGV4cG9zZSB1c2VyIHBhdGhzIGluIGVycm9yIG1lc3NhZ2VzXG4gICAgICAgIGxvZ2dlci5lcnJvcignSW52YWxpZCBvciB1bnNhZmUgcGF0aCcsIHsgcGF0aDogZmlsZVBhdGggfSk7XG4gICAgICAgIHRocm93IEVycm9ySGFuZGxlci5jcmVhdGVFcnJvcignSW52YWxpZCBvciB1bnNhZmUgcGF0aCcsIEVycm9yQ2F0ZWdvcnkuVkFMSURBVElPTl9FUlJPUiwgVmFsaWRhdGlvbkVycm9yQ29kZXMuSU5WQUxJRF9QQVRIKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ1JJVElDQUwgRklYOiBVc2UgYXRvbWljIGZpbGUgcmVhZCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9uc1xuICAgICAgLy8gUHJldmlvdXNseTogY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKGZ1bGxQYXRoLCAndXRmLTgnKTtcbiAgICAgIC8vIE5vdzogVXNlcyBGaWxlTG9ja01hbmFnZXIgd2l0aCBwcm9wZXIgZW5jb2Rpbmcgb2JqZWN0IGZvcm1hdFxuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IEZpbGVMb2NrTWFuYWdlci5hdG9taWNSZWFkRmlsZShmdWxsUGF0aCwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIGEgbmV3IFBlcnNvbmFFbGVtZW50IGFuZCBkZXNlcmlhbGl6ZVxuICAgICAgY29uc3QgcGVyc29uYSA9IG5ldyBQZXJzb25hRWxlbWVudCh7fSwgJycsIHBhdGguYmFzZW5hbWUoZnVsbFBhdGgpKTtcbiAgICAgIHBlcnNvbmEuZGVzZXJpYWxpemUoY29udGVudCk7XG4gICAgICBcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgTG9hZGVkIHBlcnNvbmE6ICR7cGVyc29uYS5tZXRhZGF0YS5uYW1lfSBmcm9tICR7ZmlsZVBhdGh9YCk7XG4gICAgICByZXR1cm4gcGVyc29uYTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBsb2FkIHBlcnNvbmEgZnJvbSAke2ZpbGVQYXRofTogJHtlcnJvcn1gKTtcbiAgICAgIHRocm93IEVycm9ySGFuZGxlci53cmFwRXJyb3IoZXJyb3IsICdGYWlsZWQgdG8gbG9hZCBwZXJzb25hJywgRXJyb3JDYXRlZ29yeS5TWVNURU1fRVJST1IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGEgcGVyc29uYSB0byBmaWxlXG4gICAqIFNFQ1VSSVRZIEZJWCAjMTogVXNlcyBGaWxlTG9ja01hbmFnZXIuYXRvbWljV3JpdGVGaWxlKCkgaW5zdGVhZCBvZiBmcy53cml0ZUZpbGUoKVxuICAgKiB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBhbmQgZW5zdXJlIGF0b21pYyBmaWxlIG9wZXJhdGlvbnNcbiAgICovXG4gIGFzeW5jIHNhdmUoZWxlbWVudDogUGVyc29uYUVsZW1lbnQsIGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gRW5zdXJlIHBlcnNvbmFzIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGF3YWl0IGVuc3VyZURpcmVjdG9yeSh0aGlzLnBlcnNvbmFzRGlyKTtcblxuICAgICAgLy8gUmVzb2x2ZSBmdWxsIHBhdGggaWYgcmVsYXRpdmVcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5pc0Fic29sdXRlKGZpbGVQYXRoKSA/IGZpbGVQYXRoIDogcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIsIGZpbGVQYXRoKTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgcGF0aCBzZWN1cml0eVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlUGF0aChmdWxsUGF0aCkpIHtcbiAgICAgICAgLy8gU0VDVVJJVFkgRklYICMyMDY6IERvbid0IGV4cG9zZSB1c2VyIHBhdGhzIGluIGVycm9yIG1lc3NhZ2VzXG4gICAgICAgIGxvZ2dlci5lcnJvcignSW52YWxpZCBvciB1bnNhZmUgcGF0aCcsIHsgcGF0aDogZmlsZVBhdGggfSk7XG4gICAgICAgIHRocm93IEVycm9ySGFuZGxlci5jcmVhdGVFcnJvcignSW52YWxpZCBvciB1bnNhZmUgcGF0aCcsIEVycm9yQ2F0ZWdvcnkuVkFMSURBVElPTl9FUlJPUiwgVmFsaWRhdGlvbkVycm9yQ29kZXMuSU5WQUxJRF9QQVRIKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2VyaWFsaXplIHRoZSBwZXJzb25hXG4gICAgICBjb25zdCBjb250ZW50ID0gZWxlbWVudC5zZXJpYWxpemUoKTtcbiAgICAgIFxuICAgICAgLy8gQ1JJVElDQUwgRklYOiBVc2UgYXRvbWljIGZpbGUgd3JpdGUgdG8gcHJldmVudCBjb3JydXB0aW9uIGR1cmluZyBpbnRlcnJ1cHRpb25zXG4gICAgICAvLyBQcmV2aW91c2x5OiBhd2FpdCBmcy53cml0ZUZpbGUoZnVsbFBhdGgsIGNvbnRlbnQsICd1dGYtOCcpO1xuICAgICAgLy8gTm93OiBVc2VzIEZpbGVMb2NrTWFuYWdlciB3aXRoIHByb3BlciBlbmNvZGluZyBvYmplY3QgZm9ybWF0XG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHBhcnRpYWwgd3JpdGVzIGFuZCBkYXRhIGNvcnJ1cHRpb24gaWYgdGhlIHByb2Nlc3MgaXMgaW50ZXJydXB0ZWRcbiAgICAgIGF3YWl0IEZpbGVMb2NrTWFuYWdlci5hdG9taWNXcml0ZUZpbGUoZnVsbFBhdGgsIGNvbnRlbnQsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSBmaWxlbmFtZSBpbiBlbGVtZW50XG4gICAgICBlbGVtZW50LmZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmdWxsUGF0aCk7XG4gICAgICBcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgU2F2ZWQgcGVyc29uYTogJHtlbGVtZW50Lm1ldGFkYXRhLm5hbWV9IHRvICR7ZmlsZVBhdGh9YCk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gc2F2ZSBwZXJzb25hIHRvICR7ZmlsZVBhdGh9OiAke2Vycm9yfWApO1xuICAgICAgdGhyb3cgRXJyb3JIYW5kbGVyLndyYXBFcnJvcihlcnJvciwgJ0ZhaWxlZCB0byBzYXZlIHBlcnNvbmEnLCBFcnJvckNhdGVnb3J5LlNZU1RFTV9FUlJPUik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhIHBlcnNvbmEgZmlsZVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gUmVzb2x2ZSBmdWxsIHBhdGggaWYgcmVsYXRpdmVcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5pc0Fic29sdXRlKGZpbGVQYXRoKSA/IGZpbGVQYXRoIDogcGF0aC5qb2luKHRoaXMucGVyc29uYXNEaXIsIGZpbGVQYXRoKTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgcGF0aCBzZWN1cml0eVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlUGF0aChmdWxsUGF0aCkpIHtcbiAgICAgICAgLy8gU0VDVVJJVFkgRklYICMyMDY6IERvbid0IGV4cG9zZSB1c2VyIHBhdGhzIGluIGVycm9yIG1lc3NhZ2VzXG4gICAgICAgIGxvZ2dlci5lcnJvcignSW52YWxpZCBvciB1bnNhZmUgcGF0aCcsIHsgcGF0aDogZmlsZVBhdGggfSk7XG4gICAgICAgIHRocm93IEVycm9ySGFuZGxlci5jcmVhdGVFcnJvcignSW52YWxpZCBvciB1bnNhZmUgcGF0aCcsIEVycm9yQ2F0ZWdvcnkuVkFMSURBVElPTl9FUlJPUiwgVmFsaWRhdGlvbkVycm9yQ29kZXMuSU5WQUxJRF9QQVRIKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgZnMudW5saW5rKGZ1bGxQYXRoKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgRGVsZXRlZCBwZXJzb25hIGZpbGU6ICR7ZmlsZVBhdGh9YCk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZGVsZXRlIHBlcnNvbmEgJHtmaWxlUGF0aH06ICR7ZXJyb3J9YCk7XG4gICAgICB0aHJvdyBFcnJvckhhbmRsZXIud3JhcEVycm9yKGVycm9yLCAnRmFpbGVkIHRvIGRlbGV0ZSBwZXJzb25hJywgRXJyb3JDYXRlZ29yeS5TWVNURU1fRVJST1IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHBlcnNvbmEgZmlsZSBleGlzdHNcbiAgICovXG4gIGFzeW5jIGV4aXN0cyhmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFJlc29sdmUgZnVsbCBwYXRoIGlmIHJlbGF0aXZlXG4gICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguaXNBYnNvbHV0ZShmaWxlUGF0aCkgPyBmaWxlUGF0aCA6IHBhdGguam9pbih0aGlzLnBlcnNvbmFzRGlyLCBmaWxlUGF0aCk7XG4gICAgICBcbiAgICAgIGF3YWl0IGZzLmFjY2VzcyhmdWxsUGF0aCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdCBhbGwgcGVyc29uYXNcbiAgICovXG4gIGFzeW5jIGxpc3QoKTogUHJvbWlzZTxQZXJzb25hRWxlbWVudFtdPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEVuc3VyZSBkaXJlY3RvcnkgZXhpc3RzXG4gICAgICBhd2FpdCBlbnN1cmVEaXJlY3RvcnkodGhpcy5wZXJzb25hc0Rpcik7XG5cbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZnMucmVhZGRpcih0aGlzLnBlcnNvbmFzRGlyKTtcbiAgICAgIGNvbnN0IG1hcmtkb3duRmlsZXMgPSBmaWxlcy5maWx0ZXIoZmlsZSA9PiBmaWxlLmVuZHNXaXRoKCcubWQnKSk7XG4gICAgICBcbiAgICAgIGNvbnN0IHBlcnNvbmFzOiBQZXJzb25hRWxlbWVudFtdID0gW107XG4gICAgICBcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBtYXJrZG93bkZpbGVzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGVyc29uYSA9IGF3YWl0IHRoaXMubG9hZChmaWxlKTtcbiAgICAgICAgICBwZXJzb25hcy5wdXNoKHBlcnNvbmEpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcihgRXJyb3IgbG9hZGluZyBwZXJzb25hICR7ZmlsZX06ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgLy8gQ29udGludWUgd2l0aCBvdGhlciBwZXJzb25hc1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5kZWJ1ZyhgTG9hZGVkICR7cGVyc29uYXMubGVuZ3RofSBwZXJzb25hcyBmcm9tICR7dGhpcy5wZXJzb25hc0Rpcn1gKTtcbiAgICAgIHJldHVybiBwZXJzb25hcztcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBsaXN0IHBlcnNvbmFzOiAke2Vycm9yfWApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGEgcGVyc29uYSBieSBwcmVkaWNhdGVcbiAgICovXG4gIGFzeW5jIGZpbmQocHJlZGljYXRlOiAoZWxlbWVudDogUGVyc29uYUVsZW1lbnQpID0+IGJvb2xlYW4pOiBQcm9taXNlPFBlcnNvbmFFbGVtZW50IHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgcGVyc29uYXMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcbiAgICByZXR1cm4gcGVyc29uYXMuZmluZChwcmVkaWNhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgbXVsdGlwbGUgcGVyc29uYXMgYnkgcHJlZGljYXRlXG4gICAqL1xuICBhc3luYyBmaW5kTWFueShwcmVkaWNhdGU6IChlbGVtZW50OiBQZXJzb25hRWxlbWVudCkgPT4gYm9vbGVhbik6IFByb21pc2U8UGVyc29uYUVsZW1lbnRbXT4ge1xuICAgIGNvbnN0IHBlcnNvbmFzID0gYXdhaXQgdGhpcy5saXN0KCk7XG4gICAgcmV0dXJuIHBlcnNvbmFzLmZpbHRlcihwcmVkaWNhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGEgcGVyc29uYSBlbGVtZW50XG4gICAqL1xuICB2YWxpZGF0ZShlbGVtZW50OiBQZXJzb25hRWxlbWVudCk6IEVsZW1lbnRWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICByZXR1cm4gZWxlbWVudC52YWxpZGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGEgZmlsZSBwYXRoXG4gICAqL1xuICB2YWxpZGF0ZVBhdGgoZmlsZVBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICB2YWxpZGF0ZVBhdGgoZmlsZVBhdGgpO1xuICAgICAgXG4gICAgICAvLyBBZGRpdGlvbmFsIGNoZWNrOiBtdXN0IGJlIC5tZCBmaWxlXG4gICAgICBpZiAoIWZpbGVQYXRoLmVuZHNXaXRoKCcubWQnKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIE11c3QgYmUgd2l0aGluIHBlcnNvbmFzIGRpcmVjdG9yeVxuICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLnJlc29sdmUoZmlsZVBhdGgpO1xuICAgICAgY29uc3QgcGVyc29uYXNEaXJQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMucGVyc29uYXNEaXIpO1xuICAgICAgXG4gICAgICByZXR1cm4gZnVsbFBhdGguc3RhcnRzV2l0aChwZXJzb25hc0RpclBhdGgpO1xuICAgICAgXG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBlbGVtZW50IHR5cGVcbiAgICovXG4gIGdldEVsZW1lbnRUeXBlKCk6IEVsZW1lbnRUeXBlIHtcbiAgICByZXR1cm4gRWxlbWVudFR5cGUuUEVSU09OQTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZmlsZSBleHRlbnNpb25cbiAgICovXG4gIGdldEZpbGVFeHRlbnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJy5tZCc7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IHBlcnNvbmEgZnJvbSBkYXRhXG4gICAqIFNFQ1VSSVRZIEZJWCAjMzogVXNlcyBTZWN1cmVZYW1sUGFyc2VyIGluc3RlYWQgb2YgdW5zYWZlIFlBTUwgcGFyc2luZyB0byBwcmV2ZW50XG4gICAqIFlBTUwgZGVzZXJpYWxpemF0aW9uIGF0dGFja3MgYW5kIGluamVjdGlvbiB2dWxuZXJhYmlsaXRpZXNcbiAgICovXG4gIGFzeW5jIGltcG9ydEVsZW1lbnQoZGF0YTogc3RyaW5nLCBmb3JtYXQ6ICdqc29uJyB8ICd5YW1sJyB8ICdtYXJrZG93bicgPSAnbWFya2Rvd24nKTogUHJvbWlzZTxQZXJzb25hRWxlbWVudD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwZXJzb25hID0gbmV3IFBlcnNvbmFFbGVtZW50KHt9KTtcbiAgICAgIFxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ21hcmtkb3duJykge1xuICAgICAgICBwZXJzb25hLmRlc2VyaWFsaXplKGRhdGEpO1xuICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICBjb25zdCBqc29uRGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgIHBlcnNvbmEuZGVzZXJpYWxpemUodGhpcy5qc29uVG9NYXJrZG93bihqc29uRGF0YSkpO1xuICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICd5YW1sJykge1xuICAgICAgICAvLyBISUdIIFNFVkVSSVRZIEZJWDogVXNlIFNlY3VyZVlhbWxQYXJzZXIgdG8gcHJldmVudCBZQU1MIGluamVjdGlvbiBhdHRhY2tzXG4gICAgICAgIC8vIFByZXZpb3VzbHk6IFVzZWQgdW5zYWZlIFlBTUwgcGFyc2luZyB3aXRob3V0IHZhbGlkYXRpb25cbiAgICAgICAgLy8gTm93OiBVc2VzIFNlY3VyZVlhbWxQYXJzZXIgd2hpY2ggdmFsaWRhdGVzIGNvbnRlbnQgYW5kIHByZXZlbnRzIG1hbGljaW91cyBwYXR0ZXJuc1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IFNlY3VyZVlhbWxQYXJzZXIucGFyc2UoZGF0YSwge1xuICAgICAgICAgICAgbWF4WWFtbFNpemU6IDY0ICogMTAyNCwgLy8gNjRLQiBsaW1pdFxuICAgICAgICAgICAgdmFsaWRhdGVDb250ZW50OiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gTG9nIHNlY3VyaXR5IGV2ZW50IGZvciBhdWRpdCB0cmFpbFxuICAgICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICAgIHR5cGU6ICdZQU1MX1BBUlNFX1NVQ0NFU1MnLFxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICAgICAgc291cmNlOiAnUGVyc29uYUVsZW1lbnRNYW5hZ2VyLmltcG9ydEVsZW1lbnQnLFxuICAgICAgICAgICAgZGV0YWlsczogJ1lBTUwgY29udGVudCBzYWZlbHkgcGFyc2VkIGR1cmluZyBpbXBvcnQnXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQ29udmVydCBwYXJzZWQgWUFNTCB0byBtYXJrZG93biBmb3JtYXRcbiAgICAgICAgICBwZXJzb25hLmRlc2VyaWFsaXplKHRoaXMuanNvblRvTWFya2Rvd24ocGFyc2VkLmRhdGEpKTtcbiAgICAgICAgfSBjYXRjaCAoc2VjdXJpdHlFcnJvcikge1xuICAgICAgICAgIC8vIExvZyB0aGUgc2VjdXJpdHkgdmlvbGF0aW9uXG4gICAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgICAgdHlwZTogJ1lBTUxfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdISUdIJyxcbiAgICAgICAgICAgIHNvdXJjZTogJ1BlcnNvbmFFbGVtZW50TWFuYWdlci5pbXBvcnRFbGVtZW50JyxcbiAgICAgICAgICAgIGRldGFpbHM6IGBZQU1MIHBhcnNpbmcgZmFpbGVkIHNlY3VyaXR5IHZhbGlkYXRpb246ICR7c2VjdXJpdHlFcnJvcn1gXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgc2VjdXJpdHlFcnJvcjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgRXJyb3JIYW5kbGVyLmNyZWF0ZUVycm9yKGBVbnN1cHBvcnRlZCBmb3JtYXQ6ICR7Zm9ybWF0fWAsIEVycm9yQ2F0ZWdvcnkuVkFMSURBVElPTl9FUlJPUiwgU3lzdGVtRXJyb3JDb2Rlcy5VTlNVUFBPUlRFRF9GT1JNQVQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGVyc29uYTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBpbXBvcnQgcGVyc29uYTogJHtlcnJvcn1gKTtcbiAgICAgIHRocm93IEVycm9ySGFuZGxlci53cmFwRXJyb3IoZXJyb3IsICdQZXJzb25hIGVsZW1lbnQgaW1wb3J0IGZhaWxlZCcsIEVycm9yQ2F0ZWdvcnkuU1lTVEVNX0VSUk9SKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IHBlcnNvbmEgdG8gZGF0YVxuICAgKiBTRUNVUklUWSBGSVggIzI6IFVzZXMgc3RhdGljIGltcG9ydCBvZiBqcy15YW1sIGF0IHRvcCBvZiBmaWxlIGluc3RlYWQgb2ZcbiAgICogZHluYW1pYyByZXF1aXJlKCkgZm9yIGJldHRlciBzZWN1cml0eSBhbmQgYnVuZGxpbmdcbiAgICogU0VDVVJJVFkgRklYICMzOiBVc2VzIHNlY3VyZSBZQU1MIGR1bXBpbmcgd2l0aCBzYWZldHkgb3B0aW9uc1xuICAgKi9cbiAgYXN5bmMgZXhwb3J0RWxlbWVudChlbGVtZW50OiBQZXJzb25hRWxlbWVudCwgZm9ybWF0OiAnanNvbicgfCAneWFtbCcgfCAnbWFya2Rvd24nID0gJ21hcmtkb3duJyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChmb3JtYXQgPT09ICdtYXJrZG93bicpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuc2VyaWFsaXplKCk7XG4gICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnN0IGxlZ2FjeSA9IGVsZW1lbnQudG9MZWdhY3koKTtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHsgLi4ubGVnYWN5LCBjb250ZW50OiBlbGVtZW50LmNvbnRlbnQgfSwgbnVsbCwgMik7XG4gICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ3lhbWwnKSB7XG4gICAgICAgIGNvbnN0IGxlZ2FjeSA9IGVsZW1lbnQudG9MZWdhY3koKTtcbiAgICAgICAgLy8gQ1JJVElDQUwgRklYOiBVc2luZyBzYWZlIFlBTUwgZHVtcCB3aXRoIHNlY3VyaXR5IG9wdGlvbnNcbiAgICAgICAgLy8gUHJldmlvdXNseTogVXNlZCBkeW5hbWljIHJlcXVpcmUgd2l0aG91dCBzYWZldHkgb3B0aW9uc1xuICAgICAgICAvLyBOb3c6IFVzZXMgc3RhdGljIGltcG9ydCB3aXRoIHNhZmUgc2NoZW1hIGFuZCBzZWN1cml0eSBmbGFnc1xuICAgICAgICByZXR1cm4geWFtbC5kdW1wKHsgLi4ubGVnYWN5LCBjb250ZW50OiBlbGVtZW50LmNvbnRlbnQgfSwge1xuICAgICAgICAgIHNjaGVtYTogeWFtbC5GQUlMU0FGRV9TQ0hFTUEsICAvLyBVc2UgcmVzdHJpY3RlZCBzY2hlbWFcbiAgICAgICAgICBza2lwSW52YWxpZDogdHJ1ZSwgICAgICAgICAgICAgIC8vIFNraXAgaW52YWxpZCBkYXRhIGluc3RlYWQgb2YgdGhyb3dpbmdcbiAgICAgICAgICBub1JlZnM6IHRydWUsICAgICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgcmVmZXJlbmNlIGF0dGFja3NcbiAgICAgICAgICBub0NvbXBhdE1vZGU6IHRydWUgICAgICAgICAgICAgIC8vIFVzZSBzdHJpY3QgWUFNTCBtb2RlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgRXJyb3JIYW5kbGVyLmNyZWF0ZUVycm9yKGBVbnN1cHBvcnRlZCBmb3JtYXQ6ICR7Zm9ybWF0fWAsIEVycm9yQ2F0ZWdvcnkuVkFMSURBVElPTl9FUlJPUiwgU3lzdGVtRXJyb3JDb2Rlcy5VTlNVUFBPUlRFRF9GT1JNQVQpO1xuICAgICAgfVxuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGV4cG9ydCBwZXJzb25hOiAke2Vycm9yfWApO1xuICAgICAgdGhyb3cgRXJyb3JIYW5kbGVyLndyYXBFcnJvcihlcnJvciwgJ1BlcnNvbmEgZWxlbWVudCBleHBvcnQgZmFpbGVkJywgRXJyb3JDYXRlZ29yeS5TWVNURU1fRVJST1IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXI6IENvbnZlcnQgSlNPTiBkYXRhIHRvIG1hcmtkb3duIGZvcm1hdFxuICAgKiBTRUNVUklUWSBGSVggIzI6IFVzZXMgc3RhdGljYWxseSBpbXBvcnRlZCB5YW1sIG1vZHVsZVxuICAgKiBTRUNVUklUWSBGSVggIzM6IFVzZXMgc2VjdXJlIFlBTUwgZHVtcGluZyB3aXRoIHNhZmV0eSBvcHRpb25zXG4gICAqIE5vdGU6IFRoaXMgaXMgZm9yIGludGVybmFsIGNvbnZlcnNpb24gb25seSwgdXNlci1wcm92aWRlZCBZQU1MIG11c3QgdXNlIFNlY3VyZVlhbWxQYXJzZXJcbiAgICovXG4gIHByaXZhdGUganNvblRvTWFya2Rvd24oZGF0YTogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB7IGNvbnRlbnQsIC4uLm1ldGFkYXRhIH0gPSBkYXRhO1xuICAgIC8vIFVzaW5nIHNhZmUgWUFNTCBkdW1wIHdpdGggc2VjdXJpdHkgb3B0aW9uc1xuICAgIGNvbnN0IHlhbWxGcm9udG1hdHRlciA9IHlhbWwuZHVtcChtZXRhZGF0YSwge1xuICAgICAgc2NoZW1hOiB5YW1sLkZBSUxTQUZFX1NDSEVNQSwgIC8vIFVzZSByZXN0cmljdGVkIHNjaGVtYVxuICAgICAgc2tpcEludmFsaWQ6IHRydWUsICAgICAgICAgICAgICAvLyBTa2lwIGludmFsaWQgZGF0YVxuICAgICAgbm9SZWZzOiB0cnVlLCAgICAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IHJlZmVyZW5jZSBhdHRhY2tzXG4gICAgICBub0NvbXBhdE1vZGU6IHRydWUgICAgICAgICAgICAgIC8vIFVzZSBzdHJpY3QgWUFNTCBtb2RlXG4gICAgfSk7XG4gICAgcmV0dXJuIGAtLS1cXG4ke3lhbWxGcm9udG1hdHRlcn0tLS1cXG5cXG4ke2NvbnRlbnQgfHwgJyd9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgcGVyc29uYSB3aXRoIGRlZmF1bHQgbWV0YWRhdGFcbiAgICovXG4gIGNyZWF0ZShtZXRhZGF0YTogUGFydGlhbDxQZXJzb25hRWxlbWVudE1ldGFkYXRhPik6IFBlcnNvbmFFbGVtZW50IHtcbiAgICBjb25zdCBkZWZhdWx0TWV0YWRhdGE6IFBhcnRpYWw8UGVyc29uYUVsZW1lbnRNZXRhZGF0YT4gPSB7XG4gICAgICBuYW1lOiAnTmV3IFBlcnNvbmEnLFxuICAgICAgZGVzY3JpcHRpb246ICdBIG5ldyBwZXJzb25hJyxcbiAgICAgIHZlcnNpb246ICcxLjAuMCcsXG4gICAgICBjYXRlZ29yeTogJ3BlcnNvbmFsJyxcbiAgICAgIGFnZV9yYXRpbmc6ICdhbGwnLFxuICAgICAgYWlfZ2VuZXJhdGVkOiBmYWxzZSxcbiAgICAgIGdlbmVyYXRpb25fbWV0aG9kOiAnaHVtYW4nLFxuICAgICAgcHJpY2U6ICdmcmVlJyxcbiAgICAgIGxpY2Vuc2U6ICdDQy1CWS1TQS00LjAnLFxuICAgICAgY3JlYXRlZF9kYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSxcbiAgICAgIHRyaWdnZXJzOiBbXSxcbiAgICAgIGNvbnRlbnRfZmxhZ3M6IFtdXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUGVyc29uYUVsZW1lbnQoeyAuLi5kZWZhdWx0TWV0YWRhdGEsIC4uLm1ldGFkYXRhIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkZWZhdWx0IGZpbGVuYW1lIGZvciBhIHBlcnNvbmFcbiAgICovXG4gIGdldERlZmF1bHRGaWxlbmFtZShwZXJzb25hOiBQZXJzb25hRWxlbWVudCk6IHN0cmluZyB7XG4gICAgLy8gQ29udmVydCBuYW1lIHRvIHNhZmUgZmlsZW5hbWVcbiAgICBjb25zdCBzYWZlTmFtZSA9IHBlcnNvbmEubWV0YWRhdGEubmFtZVxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC5yZXBsYWNlQWxsKC9bXmEtejAtOV0rL2csICctJykgICAgLy8gUmVwbGFjZSBub24tYWxwaGFudW1lcmljIHdpdGggaHlwaGVuc1xuICAgICAgLnJlcGxhY2VBbGwoLyheLSspfCgtKyQpL2csICcnKTsgIC8vIFJlbW92ZSBsZWFkaW5nL3RyYWlsaW5nIGh5cGhlbnNcbiAgICBcbiAgICByZXR1cm4gYCR7c2FmZU5hbWV9Lm1kYDtcbiAgfVxufSJdfQ==
|
|
@@ -333,9 +333,9 @@ export class PersonaManager {
|
|
|
333
333
|
if (parts.length === 1) {
|
|
334
334
|
parts.push('0');
|
|
335
335
|
}
|
|
336
|
-
const patch = parseInt(parts[parts.length - 1]) || 0;
|
|
336
|
+
const patch = Number.parseInt(parts[parts.length - 1]) || 0;
|
|
337
337
|
parts[parts.length - 1] = (patch + 1).toString();
|
|
338
338
|
return parts.join('.');
|
|
339
339
|
}
|
|
340
340
|
}
|
|
341
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVyc29uYU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGVyc29uYS9QZXJzb25hTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUtILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hGLE9BQU8sRUFBbUIsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFakYsTUFBTSxPQUFPLGNBQWM7SUFDakIsUUFBUSxHQUF5QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzNDLGFBQWEsR0FBa0IsSUFBSSxDQUFDO0lBQ3BDLFdBQVcsR0FBa0IsSUFBSSxDQUFDO0lBQ2xDLE1BQU0sQ0FBZ0I7SUFDdEIsU0FBUyxDQUFtQjtJQUM1QixlQUFlLENBQWtCO0lBRXpDLFlBQVksV0FBbUIsRUFBRSxlQUFnQztRQUMvRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxVQUFVO1FBQ2QsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVEOztPQUVHO0lBQ0gs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Q0FBQztZQUNyQixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFFRCxvQkFBb0I7UUFDcEIsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7T0FFRztJQUNLLGdCQUFnQixDQUFDLE9BQXdCO1FBQy9DLHlDQUF5QztRQUN6QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVwQyxpREFBaUQ7UUFDakQsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEIsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRCxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3JlIHBlcnNvbmEgbWFuYWdlbWVudCBvcGVyYXRpb25zXG4gKi9cblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBtYXR0ZXIgZnJvbSAnZ3JheS1tYXR0ZXInO1xuaW1wb3J0IHsgUGVyc29uYSwgUGVyc29uYU1ldGFkYXRhIH0gZnJvbSAnLi4vdHlwZXMvcGVyc29uYS5qcyc7XG5pbXBvcnQgeyBQZXJzb25hTG9hZGVyIH0gZnJvbSAnLi9QZXJzb25hTG9hZGVyLmpzJztcbmltcG9ydCB7IFBlcnNvbmFWYWxpZGF0b3IgfSBmcm9tICcuL1BlcnNvbmFWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgdmFsaWRhdGVGaWxlbmFtZSwgc2FuaXRpemVJbnB1dCB9IGZyb20gJy4uL3NlY3VyaXR5L0lucHV0VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IGdlbmVyYXRlQW5vbnltb3VzSWQsIGdlbmVyYXRlVW5pcXVlSWQsIHNsdWdpZnkgfSBmcm9tICcuLi91dGlscy9maWxlc3lzdGVtLmpzJztcbmltcG9ydCB7IEluZGljYXRvckNvbmZpZywgZm9ybWF0SW5kaWNhdG9yIH0gZnJvbSAnLi4vY29uZmlnL2luZGljYXRvci1jb25maWcuanMnO1xuXG5leHBvcnQgY2xhc3MgUGVyc29uYU1hbmFnZXIge1xuICBwcml2YXRlIHBlcnNvbmFzOiBNYXA8c3RyaW5nLCBQZXJzb25hPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBhY3RpdmVQZXJzb25hOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjdXJyZW50VXNlcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbG9hZGVyOiBQZXJzb25hTG9hZGVyO1xuICBwcml2YXRlIHZhbGlkYXRvcjogUGVyc29uYVZhbGlkYXRvcjtcbiAgcHJpdmF0ZSBpbmRpY2F0b3JDb25maWc6IEluZGljYXRvckNvbmZpZztcbiAgXG4gIGNvbnN0cnVjdG9yKHBlcnNvbmFzRGlyOiBzdHJpbmcsIGluZGljYXRvckNvbmZpZzogSW5kaWNhdG9yQ29uZmlnKSB7XG4gICAgdGhpcy5sb2FkZXIgPSBuZXcgUGVyc29uYUxvYWRlcihwZXJzb25hc0Rpcik7XG4gICAgdGhpcy52YWxpZGF0b3IgPSBuZXcgUGVyc29uYVZhbGlkYXRvcigpO1xuICAgIHRoaXMuaW5kaWNhdG9yQ29uZmlnID0gaW5kaWNhdG9yQ29uZmlnO1xuICB9XG4gIFxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhbmQgbG9hZCBhbGwgcGVyc29uYXNcbiAgICovXG4gIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5wZXJzb25hcyA9IGF3YWl0IHRoaXMubG9hZGVyLmxvYWRBbGwoKCkgPT4gdGhpcy5nZXRDdXJyZW50VXNlckZvckF0dHJpYnV0aW9uKCkpO1xuICB9XG4gIFxuICAvKipcbiAgICogUmVsb2FkIGFsbCBwZXJzb25hcyBmcm9tIGRpc2tcbiAgICovXG4gIGFzeW5jIHJlbG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnBlcnNvbmFzLmNsZWFyKCk7XG4gICAgdGhpcy5hY3RpdmVQZXJzb25hID0gbnVsbDtcbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemUoKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBhbGwgbG9hZGVkIHBlcnNvbmFzXG4gICAqL1xuICBnZXRBbGxQZXJzb25hcygpOiBNYXA8c3RyaW5nLCBQZXJzb25hPiB7XG4gICAgcmV0dXJuIHRoaXMucGVyc29uYXM7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGaW5kIGEgcGVyc29uYSBieSBpZGVudGlmaWVyIChmaWxlbmFtZSwgbmFtZSwgb3IgdW5pcXVlX2lkKVxuICAgKi9cbiAgZmluZFBlcnNvbmEoaWRlbnRpZmllcjogc3RyaW5nKTogUGVyc29uYSB8IHVuZGVmaW5lZCB7XG4gICAgLy8gVHJ5IGRpcmVjdCBmaWxlbmFtZSBtYXRjaFxuICAgIGxldCBwZXJzb25hID0gdGhpcy5wZXJzb25hcy5nZXQoaWRlbnRpZmllcik7XG4gICAgXG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICAvLyBUcnkgd2l0aCAubWQgZXh0ZW5zaW9uXG4gICAgICBwZXJzb25hID0gdGhpcy5wZXJzb25hcy5nZXQoYCR7aWRlbnRpZmllcn0ubWRgKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICAvLyBTZWFyY2ggYnkgbmFtZSAoY2FzZS1pbnNlbnNpdGl2ZSlcbiAgICAgIHBlcnNvbmEgPSBBcnJheS5mcm9tKHRoaXMucGVyc29uYXMudmFsdWVzKCkpLmZpbmQocCA9PiBcbiAgICAgICAgcC5tZXRhZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IGlkZW50aWZpZXIudG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICAvLyBTZWFyY2ggYnkgdW5pcXVlX2lkXG4gICAgICBwZXJzb25hID0gQXJyYXkuZnJvbSh0aGlzLnBlcnNvbmFzLnZhbHVlcygpKS5maW5kKHAgPT4gXG4gICAgICAgIHAudW5pcXVlX2lkID09PSBpZGVudGlmaWVyXG4gICAgICApO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gcGVyc29uYTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEFjdGl2YXRlIGEgcGVyc29uYVxuICAgKi9cbiAgYWN0aXZhdGVQZXJzb25hKGlkZW50aWZpZXI6IHN0cmluZyk6IHsgc3VjY2VzczogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nOyBwZXJzb25hPzogUGVyc29uYSB9IHtcbiAgICBjb25zdCBwZXJzb25hID0gdGhpcy5maW5kUGVyc29uYShpZGVudGlmaWVyKTtcbiAgICBcbiAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBgUGVyc29uYSBub3QgZm91bmQ6IFwiJHtpZGVudGlmaWVyfVwiYFxuICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5hY3RpdmVQZXJzb25hID0gcGVyc29uYS5maWxlbmFtZTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgIG1lc3NhZ2U6IGBBY3RpdmF0ZWQgcGVyc29uYTogJHtwZXJzb25hLm1ldGFkYXRhLm5hbWV9YCxcbiAgICAgIHBlcnNvbmFcbiAgICB9O1xuICB9XG4gIFxuICAvKipcbiAgICogRGVhY3RpdmF0ZSB0aGUgY3VycmVudCBwZXJzb25hXG4gICAqL1xuICBkZWFjdGl2YXRlUGVyc29uYSgpOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZyB9IHtcbiAgICBpZiAoIXRoaXMuYWN0aXZlUGVyc29uYSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IFwiTm8gcGVyc29uYSBpcyBjdXJyZW50bHkgYWN0aXZlXCJcbiAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHBlcnNvbmEgPSB0aGlzLnBlcnNvbmFzLmdldCh0aGlzLmFjdGl2ZVBlcnNvbmEpO1xuICAgIGNvbnN0IHBlcnNvbmFOYW1lID0gcGVyc29uYT8ubWV0YWRhdGEubmFtZSB8fCB0aGlzLmFjdGl2ZVBlcnNvbmE7XG4gICAgXG4gICAgdGhpcy5hY3RpdmVQZXJzb25hID0gbnVsbDtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgIG1lc3NhZ2U6IGBEZWFjdGl2YXRlZCBwZXJzb25hOiAke3BlcnNvbmFOYW1lfWBcbiAgICB9O1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHRoZSBhY3RpdmUgcGVyc29uYVxuICAgKi9cbiAgZ2V0QWN0aXZlUGVyc29uYSgpOiBQZXJzb25hIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZVBlcnNvbmEpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnBlcnNvbmFzLmdldCh0aGlzLmFjdGl2ZVBlcnNvbmEpIHx8IG51bGw7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgcGVyc29uYSBpbmRpY2F0b3IgZm9yIHJlc3BvbnNlc1xuICAgKi9cbiAgZ2V0UGVyc29uYUluZGljYXRvcigpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5hY3RpdmVQZXJzb25hKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCBwZXJzb25hID0gdGhpcy5wZXJzb25hcy5nZXQodGhpcy5hY3RpdmVQZXJzb25hKTtcbiAgICBpZiAoIXBlcnNvbmEpIHJldHVybiBcIlwiO1xuICAgIFxuICAgIHJldHVybiBmb3JtYXRJbmRpY2F0b3IodGhpcy5pbmRpY2F0b3JDb25maWcsIHtcbiAgICAgIG5hbWU6IHBlcnNvbmEubWV0YWRhdGEubmFtZSxcbiAgICAgIHZlcnNpb246IHBlcnNvbmEubWV0YWRhdGEudmVyc2lvbixcbiAgICAgIGF1dGhvcjogcGVyc29uYS5tZXRhZGF0YS5hdXRob3IsXG4gICAgICBjYXRlZ29yeTogcGVyc29uYS5tZXRhZGF0YS5jYXRlZ29yeVxuICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IHBlcnNvbmFcbiAgICovXG4gIGFzeW5jIGNyZWF0ZVBlcnNvbmEoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gICAgY2F0ZWdvcnk6IHN0cmluZyxcbiAgICBpbnN0cnVjdGlvbnM6IHN0cmluZ1xuICApOiBQcm9taXNlPHsgc3VjY2VzczogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nOyBmaWxlbmFtZT86IHN0cmluZyB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFZhbGlkYXRlIGlucHV0c1xuICAgICAgY29uc3QgY2xlYW5OYW1lID0gc2FuaXRpemVJbnB1dChuYW1lLCA1MCk7XG4gICAgICBjb25zdCBjbGVhbkRlc2NyaXB0aW9uID0gc2FuaXRpemVJbnB1dChkZXNjcmlwdGlvbiwgMjAwKTtcbiAgICAgIFxuICAgICAgaWYgKCFjbGVhbk5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIG1lc3NhZ2U6IFwiUGVyc29uYSBuYW1lIGNhbm5vdCBiZSBlbXB0eVwiIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEdlbmVyYXRlIGZpbGVuYW1lXG4gICAgICBjb25zdCBiYXNlRmlsZW5hbWUgPSBzbHVnaWZ5KGNsZWFuTmFtZSkgKyAnLm1kJztcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gdmFsaWRhdGVGaWxlbmFtZShiYXNlRmlsZW5hbWUpO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBhbHJlYWR5IGV4aXN0c1xuICAgICAgaWYgKHRoaXMucGVyc29uYXMuaGFzKGZpbGVuYW1lKSkge1xuICAgICAgICByZXR1cm4geyBcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSwgXG4gICAgICAgICAgbWVzc2FnZTogYEEgcGVyc29uYSBuYW1lZCBcIiR7Y2xlYW5OYW1lfVwiIGFscmVhZHkgZXhpc3RzYCBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIG1ldGFkYXRhXG4gICAgICBjb25zdCBtZXRhZGF0YTogUGVyc29uYU1ldGFkYXRhID0ge1xuICAgICAgICBuYW1lOiBjbGVhbk5hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBjbGVhbkRlc2NyaXB0aW9uLFxuICAgICAgICBjYXRlZ29yeTogY2F0ZWdvcnkgfHwgJ2dlbmVyYWwnLFxuICAgICAgICB2ZXJzaW9uOiAnMS4wJyxcbiAgICAgICAgYXV0aG9yOiB0aGlzLmdldEN1cnJlbnRVc2VyRm9yQXR0cmlidXRpb24oKSB8fCB1bmRlZmluZWQsXG4gICAgICAgIHVuaXF1ZV9pZDogZ2VuZXJhdGVVbmlxdWVJZChjbGVhbk5hbWUsIHRoaXMuZ2V0Q3VycmVudFVzZXJGb3JBdHRyaWJ1dGlvbigpIHx8IHVuZGVmaW5lZCksXG4gICAgICAgIHRyaWdnZXJzOiB0aGlzLmdlbmVyYXRlVHJpZ2dlcnMoY2xlYW5OYW1lKSxcbiAgICAgICAgY3JlYXRlZF9kYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH07XG4gICAgICBcbiAgICAgIC8vIENyZWF0ZSBwZXJzb25hXG4gICAgICBjb25zdCBwZXJzb25hOiBQZXJzb25hID0ge1xuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgY29udGVudDogaW5zdHJ1Y3Rpb25zLFxuICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgdW5pcXVlX2lkOiBtZXRhZGF0YS51bmlxdWVfaWQhXG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZVxuICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IHRoaXMudmFsaWRhdG9yLnZhbGlkYXRlUGVyc29uYShwZXJzb25hKTtcbiAgICAgIGlmICghdmFsaWRhdGlvbi52YWxpZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgIG1lc3NhZ2U6IGBWYWxpZGF0aW9uIGZhaWxlZDogJHt2YWxpZGF0aW9uLmlzc3Vlcy5qb2luKCcsICcpfWBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gU2F2ZSB0byBkaXNrXG4gICAgICBhd2FpdCB0aGlzLmxvYWRlci5zYXZlUGVyc29uYShwZXJzb25hKTtcbiAgICAgIFxuICAgICAgLy8gQWRkIHRvIG1lbW9yeVxuICAgICAgdGhpcy5wZXJzb25hcy5zZXQoZmlsZW5hbWUsIHBlcnNvbmEpO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBtZXNzYWdlOiBgQ3JlYXRlZCBwZXJzb25hIFwiJHtjbGVhbk5hbWV9XCIgc3VjY2Vzc2Z1bGx5YCxcbiAgICAgICAgZmlsZW5hbWVcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNyZWF0ZSBwZXJzb25hOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEVkaXQgYW4gZXhpc3RpbmcgcGVyc29uYVxuICAgKi9cbiAgYXN5bmMgZWRpdFBlcnNvbmEoXG4gICAgcGVyc29uYU5hbWU6IHN0cmluZyxcbiAgICBmaWVsZDogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx7IHN1Y2Nlc3M6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZyB9PiB7XG4gICAgY29uc3QgcGVyc29uYSA9IHRoaXMuZmluZFBlcnNvbmEocGVyc29uYU5hbWUpO1xuICAgIFxuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IGBQZXJzb25hIG5vdCBmb3VuZDogXCIke3BlcnNvbmFOYW1lfVwiYFxuICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG9sZFZlcnNpb24gPSBTdHJpbmcocGVyc29uYS5tZXRhZGF0YS52ZXJzaW9uIHx8ICcxLjAnKTtcbiAgICAgIFxuICAgICAgc3dpdGNoIChmaWVsZC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGNhc2UgJ25hbWUnOlxuICAgICAgICAgIHBlcnNvbmEubWV0YWRhdGEubmFtZSA9IHNhbml0aXplSW5wdXQodmFsdWUsIDUwKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZGVzY3JpcHRpb24nOlxuICAgICAgICAgIHBlcnNvbmEubWV0YWRhdGEuZGVzY3JpcHRpb24gPSBzYW5pdGl6ZUlucHV0KHZhbHVlLCAyMDApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdpbnN0cnVjdGlvbnMnOlxuICAgICAgICBjYXNlICdjb250ZW50JzpcbiAgICAgICAgICBwZXJzb25hLmNvbnRlbnQgPSB2YWx1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnY2F0ZWdvcnknOlxuICAgICAgICAgIHBlcnNvbmEubWV0YWRhdGEuY2F0ZWdvcnkgPSB2YWx1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndHJpZ2dlcnMnOlxuICAgICAgICAgIHBlcnNvbmEubWV0YWRhdGEudHJpZ2dlcnMgPSB2YWx1ZS5zcGxpdCgnLCcpLm1hcCh0ID0+IHQudHJpbSgpKS5maWx0ZXIodCA9PiB0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndmVyc2lvbic6XG4gICAgICAgICAgcGVyc29uYS5tZXRhZGF0YS52ZXJzaW9uID0gdmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogYFVua25vd24gZmllbGQ6IFwiJHtmaWVsZH1cIi4gVmFsaWQgZmllbGRzOiBuYW1lLCBkZXNjcmlwdGlvbiwgaW5zdHJ1Y3Rpb25zLCBjYXRlZ29yeSwgdHJpZ2dlcnMsIHZlcnNpb25gXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQXV0by1pbmNyZW1lbnQgdmVyc2lvbiBpZiBub3QgZXhwbGljaXRseSBzZXR0aW5nIHZlcnNpb25cbiAgICAgIGlmIChmaWVsZCAhPT0gJ3ZlcnNpb24nKSB7XG4gICAgICAgIHBlcnNvbmEubWV0YWRhdGEudmVyc2lvbiA9IHRoaXMuaW5jcmVtZW50VmVyc2lvbihvbGRWZXJzaW9uKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGVcbiAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSB0aGlzLnZhbGlkYXRvci52YWxpZGF0ZVBlcnNvbmEocGVyc29uYSk7XG4gICAgICBpZiAoIXZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICBtZXNzYWdlOiBgVmFsaWRhdGlvbiBmYWlsZWQ6ICR7dmFsaWRhdGlvbi5pc3N1ZXMuam9pbignLCAnKX1gXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFNhdmUgY2hhbmdlc1xuICAgICAgYXdhaXQgdGhpcy5sb2FkZXIuc2F2ZVBlcnNvbmEocGVyc29uYSk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIG1lc3NhZ2U6IGBVcGRhdGVkICR7ZmllbGR9IGZvciBcIiR7cGVyc29uYS5tZXRhZGF0YS5uYW1lfVwiICh2JHtwZXJzb25hLm1ldGFkYXRhLnZlcnNpb259KWBcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGVkaXQgcGVyc29uYTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YFxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhIHBlcnNvbmFcbiAgICovXG4gIHZhbGlkYXRlUGVyc29uYShpZGVudGlmaWVyOiBzdHJpbmcpOiB7IGZvdW5kOiBib29sZWFuOyB2YWxpZGF0aW9uPzogUmV0dXJuVHlwZTxQZXJzb25hVmFsaWRhdG9yWyd2YWxpZGF0ZVBlcnNvbmEnXT4gfSB7XG4gICAgY29uc3QgcGVyc29uYSA9IHRoaXMuZmluZFBlcnNvbmEoaWRlbnRpZmllcik7XG4gICAgXG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICByZXR1cm4geyBmb3VuZDogZmFsc2UgfTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIGZvdW5kOiB0cnVlLFxuICAgICAgdmFsaWRhdGlvbjogdGhpcy52YWxpZGF0b3IudmFsaWRhdGVQZXJzb25hKHBlcnNvbmEpXG4gICAgfTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFNldCBjdXJyZW50IHVzZXIgaWRlbnRpdHlcbiAgICovXG4gIHNldFVzZXJJZGVudGl0eSh1c2VybmFtZTogc3RyaW5nIHwgbnVsbCwgZW1haWw/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRVc2VyID0gdXNlcm5hbWU7XG4gICAgXG4gICAgaWYgKHVzZXJuYW1lKSB7XG4gICAgICBwcm9jZXNzLmVudi5ET0xMSE9VU0VfVVNFUiA9IHVzZXJuYW1lO1xuICAgICAgaWYgKGVtYWlsKSB7XG4gICAgICAgIHByb2Nlc3MuZW52LkRPTExIT1VTRV9FTUFJTCA9IGVtYWlsO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX1VTRVI7XG4gICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0VNQUlMO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBjdXJyZW50IHVzZXIgaWRlbnRpdHlcbiAgICovXG4gIGdldFVzZXJJZGVudGl0eSgpOiB7IHVzZXJuYW1lOiBzdHJpbmcgfCBudWxsOyBlbWFpbDogc3RyaW5nIHwgbnVsbCB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgdXNlcm5hbWU6IHByb2Nlc3MuZW52LkRPTExIT1VTRV9VU0VSIHx8IG51bGwsXG4gICAgICBlbWFpbDogcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0VNQUlMIHx8IG51bGxcbiAgICB9O1xuICB9XG4gIFxuICAvKipcbiAgICogQ2xlYXIgdXNlciBpZGVudGl0eVxuICAgKi9cbiAgY2xlYXJVc2VySWRlbnRpdHkoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRVc2VySWRlbnRpdHkobnVsbCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBVcGRhdGUgaW5kaWNhdG9yIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHVwZGF0ZUluZGljYXRvckNvbmZpZyhjb25maWc6IEluZGljYXRvckNvbmZpZyk6IHZvaWQge1xuICAgIHRoaXMuaW5kaWNhdG9yQ29uZmlnID0gY29uZmlnO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgaW5kaWNhdG9yIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGdldEluZGljYXRvckNvbmZpZygpOiBJbmRpY2F0b3JDb25maWcge1xuICAgIHJldHVybiB0aGlzLmluZGljYXRvckNvbmZpZztcbiAgfVxuICBcbiAgLyoqXG4gICAqIEhlbHBlciB0byBnZXQgY3VycmVudCB1c2VyIGZvciBhdHRyaWJ1dGlvblxuICAgKi9cbiAgcHJpdmF0ZSBnZXRDdXJyZW50VXNlckZvckF0dHJpYnV0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFVzZXIgfHwgcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX1VTRVIgfHwgZ2VuZXJhdGVBbm9ueW1vdXNJZCgpO1xuICB9XG4gIFxuICAvKipcbiAgICogR2VuZXJhdGUgdHJpZ2dlciBrZXl3b3JkcyBmcm9tIHBlcnNvbmEgbmFtZVxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZVRyaWdnZXJzKG5hbWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB3b3JkcyA9IG5hbWUudG9Mb3dlckNhc2UoKS5zcGxpdCgvXFxzKy8pO1xuICAgIGNvbnN0IHRyaWdnZXJzID0gWy4uLndvcmRzXTtcbiAgICBcbiAgICAvLyBBZGQgdGhlIGZ1bGwgbmFtZSBhcyBhIHRyaWdnZXJcbiAgICBpZiAod29yZHMubGVuZ3RoID4gMSkge1xuICAgICAgdHJpZ2dlcnMucHVzaChuYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgICBcbiAgICAvLyBSZW1vdmUgZHVwbGljYXRlc1xuICAgIHJldHVybiBbLi4ubmV3IFNldCh0cmlnZ2VycyldLmZpbHRlcih0ID0+IHQubGVuZ3RoID4gMik7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBJbmNyZW1lbnQgdmVyc2lvbiBudW1iZXJcbiAgICovXG4gIHByaXZhdGUgaW5jcmVtZW50VmVyc2lvbih2ZXJzaW9uOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuICAgIC8vIEhhbmRsZSBib3RoIHN0cmluZyBhbmQgbnVtYmVyIHZlcnNpb25zXG4gICAgY29uc3QgdmVyc2lvblN0ciA9IFN0cmluZyh2ZXJzaW9uKTtcbiAgICBjb25zdCBwYXJ0cyA9IHZlcnNpb25TdHIuc3BsaXQoJy4nKTtcbiAgICBcbiAgICAvLyBJZiBpdCdzIGp1c3QgYSBudW1iZXIgbGlrZSBcIjFcIiwgbWFrZSBpdCBcIjEuMFwiIFxuICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHBhcnRzLnB1c2goJzAnKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgcGF0Y2ggPSBwYXJzZUludChwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSkgfHwgMDtcbiAgICBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSA9IChwYXRjaCArIDEpLnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJy4nKTtcbiAgfVxufSJdfQ==
|
|
341
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVyc29uYU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGVyc29uYS9QZXJzb25hTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUtILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hGLE9BQU8sRUFBbUIsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFakYsTUFBTSxPQUFPLGNBQWM7SUFDakIsUUFBUSxHQUF5QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzNDLGFBQWEsR0FBa0IsSUFBSSxDQUFDO0lBQ3BDLFdBQVcsR0FBa0IsSUFBSSxDQUFDO0lBQ2xDLE1BQU0sQ0FBZ0I7SUFDdEIsU0FBUyxDQUFtQjtJQUM1QixlQUFlLENBQWtCO0lBRXpDLFlBQVksV0FBbUIsRUFBRSxlQUFnQztRQUMvRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxVQUFVO1FBQ2QsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVEOztPQUVHO0lBQ0gs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Q0FBQztZQUNyQixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFFRCxvQkFBb0I7UUFDcEIsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7T0FFRztJQUNLLGdCQUFnQixDQUFDLE9BQXdCO1FBQy9DLHlDQUF5QztRQUN6QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVwQyxpREFBaUQ7UUFDakQsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEIsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUQsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29yZSBwZXJzb25hIG1hbmFnZW1lbnQgb3BlcmF0aW9uc1xuICovXG5cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgbWF0dGVyIGZyb20gJ2dyYXktbWF0dGVyJztcbmltcG9ydCB7IFBlcnNvbmEsIFBlcnNvbmFNZXRhZGF0YSB9IGZyb20gJy4uL3R5cGVzL3BlcnNvbmEuanMnO1xuaW1wb3J0IHsgUGVyc29uYUxvYWRlciB9IGZyb20gJy4vUGVyc29uYUxvYWRlci5qcyc7XG5pbXBvcnQgeyBQZXJzb25hVmFsaWRhdG9yIH0gZnJvbSAnLi9QZXJzb25hVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IHZhbGlkYXRlRmlsZW5hbWUsIHNhbml0aXplSW5wdXQgfSBmcm9tICcuLi9zZWN1cml0eS9JbnB1dFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZUFub255bW91c0lkLCBnZW5lcmF0ZVVuaXF1ZUlkLCBzbHVnaWZ5IH0gZnJvbSAnLi4vdXRpbHMvZmlsZXN5c3RlbS5qcyc7XG5pbXBvcnQgeyBJbmRpY2F0b3JDb25maWcsIGZvcm1hdEluZGljYXRvciB9IGZyb20gJy4uL2NvbmZpZy9pbmRpY2F0b3ItY29uZmlnLmpzJztcblxuZXhwb3J0IGNsYXNzIFBlcnNvbmFNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBwZXJzb25hczogTWFwPHN0cmluZywgUGVyc29uYT4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgYWN0aXZlUGVyc29uYTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY3VycmVudFVzZXI6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGxvYWRlcjogUGVyc29uYUxvYWRlcjtcbiAgcHJpdmF0ZSB2YWxpZGF0b3I6IFBlcnNvbmFWYWxpZGF0b3I7XG4gIHByaXZhdGUgaW5kaWNhdG9yQ29uZmlnOiBJbmRpY2F0b3JDb25maWc7XG4gIFxuICBjb25zdHJ1Y3RvcihwZXJzb25hc0Rpcjogc3RyaW5nLCBpbmRpY2F0b3JDb25maWc6IEluZGljYXRvckNvbmZpZykge1xuICAgIHRoaXMubG9hZGVyID0gbmV3IFBlcnNvbmFMb2FkZXIocGVyc29uYXNEaXIpO1xuICAgIHRoaXMudmFsaWRhdG9yID0gbmV3IFBlcnNvbmFWYWxpZGF0b3IoKTtcbiAgICB0aGlzLmluZGljYXRvckNvbmZpZyA9IGluZGljYXRvckNvbmZpZztcbiAgfVxuICBcbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYW5kIGxvYWQgYWxsIHBlcnNvbmFzXG4gICAqL1xuICBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucGVyc29uYXMgPSBhd2FpdCB0aGlzLmxvYWRlci5sb2FkQWxsKCgpID0+IHRoaXMuZ2V0Q3VycmVudFVzZXJGb3JBdHRyaWJ1dGlvbigpKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFJlbG9hZCBhbGwgcGVyc29uYXMgZnJvbSBkaXNrXG4gICAqL1xuICBhc3luYyByZWxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5wZXJzb25hcy5jbGVhcigpO1xuICAgIHRoaXMuYWN0aXZlUGVyc29uYSA9IG51bGw7XG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXplKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgYWxsIGxvYWRlZCBwZXJzb25hc1xuICAgKi9cbiAgZ2V0QWxsUGVyc29uYXMoKTogTWFwPHN0cmluZywgUGVyc29uYT4ge1xuICAgIHJldHVybiB0aGlzLnBlcnNvbmFzO1xuICB9XG4gIFxuICAvKipcbiAgICogRmluZCBhIHBlcnNvbmEgYnkgaWRlbnRpZmllciAoZmlsZW5hbWUsIG5hbWUsIG9yIHVuaXF1ZV9pZClcbiAgICovXG4gIGZpbmRQZXJzb25hKGlkZW50aWZpZXI6IHN0cmluZyk6IFBlcnNvbmEgfCB1bmRlZmluZWQge1xuICAgIC8vIFRyeSBkaXJlY3QgZmlsZW5hbWUgbWF0Y2hcbiAgICBsZXQgcGVyc29uYSA9IHRoaXMucGVyc29uYXMuZ2V0KGlkZW50aWZpZXIpO1xuICAgIFxuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgLy8gVHJ5IHdpdGggLm1kIGV4dGVuc2lvblxuICAgICAgcGVyc29uYSA9IHRoaXMucGVyc29uYXMuZ2V0KGAke2lkZW50aWZpZXJ9Lm1kYCk7XG4gICAgfVxuICAgIFxuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgLy8gU2VhcmNoIGJ5IG5hbWUgKGNhc2UtaW5zZW5zaXRpdmUpXG4gICAgICBwZXJzb25hID0gQXJyYXkuZnJvbSh0aGlzLnBlcnNvbmFzLnZhbHVlcygpKS5maW5kKHAgPT4gXG4gICAgICAgIHAubWV0YWRhdGEubmFtZS50b0xvd2VyQ2FzZSgpID09PSBpZGVudGlmaWVyLnRvTG93ZXJDYXNlKClcbiAgICAgICk7XG4gICAgfVxuICAgIFxuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgLy8gU2VhcmNoIGJ5IHVuaXF1ZV9pZFxuICAgICAgcGVyc29uYSA9IEFycmF5LmZyb20odGhpcy5wZXJzb25hcy52YWx1ZXMoKSkuZmluZChwID0+IFxuICAgICAgICBwLnVuaXF1ZV9pZCA9PT0gaWRlbnRpZmllclxuICAgICAgKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHBlcnNvbmE7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBBY3RpdmF0ZSBhIHBlcnNvbmFcbiAgICovXG4gIGFjdGl2YXRlUGVyc29uYShpZGVudGlmaWVyOiBzdHJpbmcpOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZzsgcGVyc29uYT86IFBlcnNvbmEgfSB7XG4gICAgY29uc3QgcGVyc29uYSA9IHRoaXMuZmluZFBlcnNvbmEoaWRlbnRpZmllcik7XG4gICAgXG4gICAgaWYgKCFwZXJzb25hKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogYFBlcnNvbmEgbm90IGZvdW5kOiBcIiR7aWRlbnRpZmllcn1cImBcbiAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIHRoaXMuYWN0aXZlUGVyc29uYSA9IHBlcnNvbmEuZmlsZW5hbWU7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICBtZXNzYWdlOiBgQWN0aXZhdGVkIHBlcnNvbmE6ICR7cGVyc29uYS5tZXRhZGF0YS5uYW1lfWAsXG4gICAgICBwZXJzb25hXG4gICAgfTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIERlYWN0aXZhdGUgdGhlIGN1cnJlbnQgcGVyc29uYVxuICAgKi9cbiAgZGVhY3RpdmF0ZVBlcnNvbmEoKTogeyBzdWNjZXNzOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmcgfSB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZVBlcnNvbmEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBcIk5vIHBlcnNvbmEgaXMgY3VycmVudGx5IGFjdGl2ZVwiXG4gICAgICB9O1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBwZXJzb25hID0gdGhpcy5wZXJzb25hcy5nZXQodGhpcy5hY3RpdmVQZXJzb25hKTtcbiAgICBjb25zdCBwZXJzb25hTmFtZSA9IHBlcnNvbmE/Lm1ldGFkYXRhLm5hbWUgfHwgdGhpcy5hY3RpdmVQZXJzb25hO1xuICAgIFxuICAgIHRoaXMuYWN0aXZlUGVyc29uYSA9IG51bGw7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICBtZXNzYWdlOiBgRGVhY3RpdmF0ZWQgcGVyc29uYTogJHtwZXJzb25hTmFtZX1gXG4gICAgfTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCB0aGUgYWN0aXZlIHBlcnNvbmFcbiAgICovXG4gIGdldEFjdGl2ZVBlcnNvbmEoKTogUGVyc29uYSB8IG51bGwge1xuICAgIGlmICghdGhpcy5hY3RpdmVQZXJzb25hKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5wZXJzb25hcy5nZXQodGhpcy5hY3RpdmVQZXJzb25hKSB8fCBudWxsO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHBlcnNvbmEgaW5kaWNhdG9yIGZvciByZXNwb25zZXNcbiAgICovXG4gIGdldFBlcnNvbmFJbmRpY2F0b3IoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuYWN0aXZlUGVyc29uYSkgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgcGVyc29uYSA9IHRoaXMucGVyc29uYXMuZ2V0KHRoaXMuYWN0aXZlUGVyc29uYSk7XG4gICAgaWYgKCFwZXJzb25hKSByZXR1cm4gXCJcIjtcbiAgICBcbiAgICByZXR1cm4gZm9ybWF0SW5kaWNhdG9yKHRoaXMuaW5kaWNhdG9yQ29uZmlnLCB7XG4gICAgICBuYW1lOiBwZXJzb25hLm1ldGFkYXRhLm5hbWUsXG4gICAgICB2ZXJzaW9uOiBwZXJzb25hLm1ldGFkYXRhLnZlcnNpb24sXG4gICAgICBhdXRob3I6IHBlcnNvbmEubWV0YWRhdGEuYXV0aG9yLFxuICAgICAgY2F0ZWdvcnk6IHBlcnNvbmEubWV0YWRhdGEuY2F0ZWdvcnlcbiAgICB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBwZXJzb25hXG4gICAqL1xuICBhc3luYyBjcmVhdGVQZXJzb25hKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICAgIGNhdGVnb3J5OiBzdHJpbmcsXG4gICAgaW5zdHJ1Y3Rpb25zOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx7IHN1Y2Nlc3M6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZzsgZmlsZW5hbWU/OiBzdHJpbmcgfT4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSBpbnB1dHNcbiAgICAgIGNvbnN0IGNsZWFuTmFtZSA9IHNhbml0aXplSW5wdXQobmFtZSwgNTApO1xuICAgICAgY29uc3QgY2xlYW5EZXNjcmlwdGlvbiA9IHNhbml0aXplSW5wdXQoZGVzY3JpcHRpb24sIDIwMCk7XG4gICAgICBcbiAgICAgIGlmICghY2xlYW5OYW1lKSB7XG4gICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBtZXNzYWdlOiBcIlBlcnNvbmEgbmFtZSBjYW5ub3QgYmUgZW1wdHlcIiB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBHZW5lcmF0ZSBmaWxlbmFtZVxuICAgICAgY29uc3QgYmFzZUZpbGVuYW1lID0gc2x1Z2lmeShjbGVhbk5hbWUpICsgJy5tZCc7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IHZhbGlkYXRlRmlsZW5hbWUoYmFzZUZpbGVuYW1lKTtcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgaWYgYWxyZWFkeSBleGlzdHNcbiAgICAgIGlmICh0aGlzLnBlcnNvbmFzLmhhcyhmaWxlbmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgXG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsIFxuICAgICAgICAgIG1lc3NhZ2U6IGBBIHBlcnNvbmEgbmFtZWQgXCIke2NsZWFuTmFtZX1cIiBhbHJlYWR5IGV4aXN0c2AgXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENyZWF0ZSBtZXRhZGF0YVxuICAgICAgY29uc3QgbWV0YWRhdGE6IFBlcnNvbmFNZXRhZGF0YSA9IHtcbiAgICAgICAgbmFtZTogY2xlYW5OYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogY2xlYW5EZXNjcmlwdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGNhdGVnb3J5IHx8ICdnZW5lcmFsJyxcbiAgICAgICAgdmVyc2lvbjogJzEuMCcsXG4gICAgICAgIGF1dGhvcjogdGhpcy5nZXRDdXJyZW50VXNlckZvckF0dHJpYnV0aW9uKCkgfHwgdW5kZWZpbmVkLFxuICAgICAgICB1bmlxdWVfaWQ6IGdlbmVyYXRlVW5pcXVlSWQoY2xlYW5OYW1lLCB0aGlzLmdldEN1cnJlbnRVc2VyRm9yQXR0cmlidXRpb24oKSB8fCB1bmRlZmluZWQpLFxuICAgICAgICB0cmlnZ2VyczogdGhpcy5nZW5lcmF0ZVRyaWdnZXJzKGNsZWFuTmFtZSksXG4gICAgICAgIGNyZWF0ZWRfZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBDcmVhdGUgcGVyc29uYVxuICAgICAgY29uc3QgcGVyc29uYTogUGVyc29uYSA9IHtcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIGNvbnRlbnQ6IGluc3RydWN0aW9ucyxcbiAgICAgICAgZmlsZW5hbWUsXG4gICAgICAgIHVuaXF1ZV9pZDogbWV0YWRhdGEudW5pcXVlX2lkIVxuICAgICAgfTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGVcbiAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSB0aGlzLnZhbGlkYXRvci52YWxpZGF0ZVBlcnNvbmEocGVyc29uYSk7XG4gICAgICBpZiAoIXZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICBtZXNzYWdlOiBgVmFsaWRhdGlvbiBmYWlsZWQ6ICR7dmFsaWRhdGlvbi5pc3N1ZXMuam9pbignLCAnKX1gXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFNhdmUgdG8gZGlza1xuICAgICAgYXdhaXQgdGhpcy5sb2FkZXIuc2F2ZVBlcnNvbmEocGVyc29uYSk7XG4gICAgICBcbiAgICAgIC8vIEFkZCB0byBtZW1vcnlcbiAgICAgIHRoaXMucGVyc29uYXMuc2V0KGZpbGVuYW1lLCBwZXJzb25hKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgbWVzc2FnZTogYENyZWF0ZWQgcGVyc29uYSBcIiR7Y2xlYW5OYW1lfVwiIHN1Y2Nlc3NmdWxseWAsXG4gICAgICAgIGZpbGVuYW1lXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBjcmVhdGUgcGVyc29uYTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YFxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBFZGl0IGFuIGV4aXN0aW5nIHBlcnNvbmFcbiAgICovXG4gIGFzeW5jIGVkaXRQZXJzb25hKFxuICAgIHBlcnNvbmFOYW1lOiBzdHJpbmcsXG4gICAgZmllbGQ6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nXG4gICk6IFByb21pc2U8eyBzdWNjZXNzOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHBlcnNvbmEgPSB0aGlzLmZpbmRQZXJzb25hKHBlcnNvbmFOYW1lKTtcbiAgICBcbiAgICBpZiAoIXBlcnNvbmEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBgUGVyc29uYSBub3QgZm91bmQ6IFwiJHtwZXJzb25hTmFtZX1cImBcbiAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBvbGRWZXJzaW9uID0gU3RyaW5nKHBlcnNvbmEubWV0YWRhdGEudmVyc2lvbiB8fCAnMS4wJyk7XG4gICAgICBcbiAgICAgIHN3aXRjaCAoZmllbGQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICduYW1lJzpcbiAgICAgICAgICBwZXJzb25hLm1ldGFkYXRhLm5hbWUgPSBzYW5pdGl6ZUlucHV0KHZhbHVlLCA1MCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Rlc2NyaXB0aW9uJzpcbiAgICAgICAgICBwZXJzb25hLm1ldGFkYXRhLmRlc2NyaXB0aW9uID0gc2FuaXRpemVJbnB1dCh2YWx1ZSwgMjAwKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaW5zdHJ1Y3Rpb25zJzpcbiAgICAgICAgY2FzZSAnY29udGVudCc6XG4gICAgICAgICAgcGVyc29uYS5jb250ZW50ID0gdmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2NhdGVnb3J5JzpcbiAgICAgICAgICBwZXJzb25hLm1ldGFkYXRhLmNhdGVnb3J5ID0gdmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RyaWdnZXJzJzpcbiAgICAgICAgICBwZXJzb25hLm1ldGFkYXRhLnRyaWdnZXJzID0gdmFsdWUuc3BsaXQoJywnKS5tYXAodCA9PiB0LnRyaW0oKSkuZmlsdGVyKHQgPT4gdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3ZlcnNpb24nOlxuICAgICAgICAgIHBlcnNvbmEubWV0YWRhdGEudmVyc2lvbiA9IHZhbHVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBVbmtub3duIGZpZWxkOiBcIiR7ZmllbGR9XCIuIFZhbGlkIGZpZWxkczogbmFtZSwgZGVzY3JpcHRpb24sIGluc3RydWN0aW9ucywgY2F0ZWdvcnksIHRyaWdnZXJzLCB2ZXJzaW9uYFxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEF1dG8taW5jcmVtZW50IHZlcnNpb24gaWYgbm90IGV4cGxpY2l0bHkgc2V0dGluZyB2ZXJzaW9uXG4gICAgICBpZiAoZmllbGQgIT09ICd2ZXJzaW9uJykge1xuICAgICAgICBwZXJzb25hLm1ldGFkYXRhLnZlcnNpb24gPSB0aGlzLmluY3JlbWVudFZlcnNpb24ob2xkVmVyc2lvbik7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlXG4gICAgICBjb25zdCB2YWxpZGF0aW9uID0gdGhpcy52YWxpZGF0b3IudmFsaWRhdGVQZXJzb25hKHBlcnNvbmEpO1xuICAgICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgbWVzc2FnZTogYFZhbGlkYXRpb24gZmFpbGVkOiAke3ZhbGlkYXRpb24uaXNzdWVzLmpvaW4oJywgJyl9YFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBTYXZlIGNoYW5nZXNcbiAgICAgIGF3YWl0IHRoaXMubG9hZGVyLnNhdmVQZXJzb25hKHBlcnNvbmEpO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBtZXNzYWdlOiBgVXBkYXRlZCAke2ZpZWxkfSBmb3IgXCIke3BlcnNvbmEubWV0YWRhdGEubmFtZX1cIiAodiR7cGVyc29uYS5tZXRhZGF0YS52ZXJzaW9ufSlgXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBlZGl0IHBlcnNvbmE6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWBcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogVmFsaWRhdGUgYSBwZXJzb25hXG4gICAqL1xuICB2YWxpZGF0ZVBlcnNvbmEoaWRlbnRpZmllcjogc3RyaW5nKTogeyBmb3VuZDogYm9vbGVhbjsgdmFsaWRhdGlvbj86IFJldHVyblR5cGU8UGVyc29uYVZhbGlkYXRvclsndmFsaWRhdGVQZXJzb25hJ10+IH0ge1xuICAgIGNvbnN0IHBlcnNvbmEgPSB0aGlzLmZpbmRQZXJzb25hKGlkZW50aWZpZXIpO1xuICAgIFxuICAgIGlmICghcGVyc29uYSkge1xuICAgICAgcmV0dXJuIHsgZm91bmQ6IGZhbHNlIH07XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBmb3VuZDogdHJ1ZSxcbiAgICAgIHZhbGlkYXRpb246IHRoaXMudmFsaWRhdG9yLnZhbGlkYXRlUGVyc29uYShwZXJzb25hKVxuICAgIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTZXQgY3VycmVudCB1c2VyIGlkZW50aXR5XG4gICAqL1xuICBzZXRVc2VySWRlbnRpdHkodXNlcm5hbWU6IHN0cmluZyB8IG51bGwsIGVtYWlsPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50VXNlciA9IHVzZXJuYW1lO1xuICAgIFxuICAgIGlmICh1c2VybmFtZSkge1xuICAgICAgcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX1VTRVIgPSB1c2VybmFtZTtcbiAgICAgIGlmIChlbWFpbCkge1xuICAgICAgICBwcm9jZXNzLmVudi5ET0xMSE9VU0VfRU1BSUwgPSBlbWFpbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHByb2Nlc3MuZW52LkRPTExIT1VTRV9VU0VSO1xuICAgICAgZGVsZXRlIHByb2Nlc3MuZW52LkRPTExIT1VTRV9FTUFJTDtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCB1c2VyIGlkZW50aXR5XG4gICAqL1xuICBnZXRVc2VySWRlbnRpdHkoKTogeyB1c2VybmFtZTogc3RyaW5nIHwgbnVsbDsgZW1haWw6IHN0cmluZyB8IG51bGwgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVzZXJuYW1lOiBwcm9jZXNzLmVudi5ET0xMSE9VU0VfVVNFUiB8fCBudWxsLFxuICAgICAgZW1haWw6IHByb2Nlc3MuZW52LkRPTExIT1VTRV9FTUFJTCB8fCBudWxsXG4gICAgfTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENsZWFyIHVzZXIgaWRlbnRpdHlcbiAgICovXG4gIGNsZWFyVXNlcklkZW50aXR5KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0VXNlcklkZW50aXR5KG51bGwpO1xuICB9XG4gIFxuICAvKipcbiAgICogVXBkYXRlIGluZGljYXRvciBjb25maWd1cmF0aW9uXG4gICAqL1xuICB1cGRhdGVJbmRpY2F0b3JDb25maWcoY29uZmlnOiBJbmRpY2F0b3JDb25maWcpOiB2b2lkIHtcbiAgICB0aGlzLmluZGljYXRvckNvbmZpZyA9IGNvbmZpZztcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBjdXJyZW50IGluZGljYXRvciBjb25maWd1cmF0aW9uXG4gICAqL1xuICBnZXRJbmRpY2F0b3JDb25maWcoKTogSW5kaWNhdG9yQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5pbmRpY2F0b3JDb25maWc7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBIZWxwZXIgdG8gZ2V0IGN1cnJlbnQgdXNlciBmb3IgYXR0cmlidXRpb25cbiAgICovXG4gIHByaXZhdGUgZ2V0Q3VycmVudFVzZXJGb3JBdHRyaWJ1dGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRVc2VyIHx8IHByb2Nlc3MuZW52LkRPTExIT1VTRV9VU0VSIHx8IGdlbmVyYXRlQW5vbnltb3VzSWQoKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdlbmVyYXRlIHRyaWdnZXIga2V5d29yZHMgZnJvbSBwZXJzb25hIG5hbWVcbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVUcmlnZ2VycyhuYW1lOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgd29yZHMgPSBuYW1lLnRvTG93ZXJDYXNlKCkuc3BsaXQoL1xccysvKTtcbiAgICBjb25zdCB0cmlnZ2VycyA9IFsuLi53b3Jkc107XG4gICAgXG4gICAgLy8gQWRkIHRoZSBmdWxsIG5hbWUgYXMgYSB0cmlnZ2VyXG4gICAgaWYgKHdvcmRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRyaWdnZXJzLnB1c2gobmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG4gICAgXG4gICAgLy8gUmVtb3ZlIGR1cGxpY2F0ZXNcbiAgICByZXR1cm4gWy4uLm5ldyBTZXQodHJpZ2dlcnMpXS5maWx0ZXIodCA9PiB0Lmxlbmd0aCA+IDIpO1xuICB9XG4gIFxuICAvKipcbiAgICogSW5jcmVtZW50IHZlcnNpb24gbnVtYmVyXG4gICAqL1xuICBwcml2YXRlIGluY3JlbWVudFZlcnNpb24odmVyc2lvbjogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcbiAgICAvLyBIYW5kbGUgYm90aCBzdHJpbmcgYW5kIG51bWJlciB2ZXJzaW9uc1xuICAgIGNvbnN0IHZlcnNpb25TdHIgPSBTdHJpbmcodmVyc2lvbik7XG4gICAgY29uc3QgcGFydHMgPSB2ZXJzaW9uU3RyLnNwbGl0KCcuJyk7XG4gICAgXG4gICAgLy8gSWYgaXQncyBqdXN0IGEgbnVtYmVyIGxpa2UgXCIxXCIsIG1ha2UgaXQgXCIxLjBcIiBcbiAgICBpZiAocGFydHMubGVuZ3RoID09PSAxKSB7XG4gICAgICBwYXJ0cy5wdXNoKCcwJyk7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHBhdGNoID0gTnVtYmVyLnBhcnNlSW50KHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdKSB8fCAwO1xuICAgIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID0gKHBhdGNoICsgMSkudG9TdHJpbmcoKTtcbiAgICByZXR1cm4gcGFydHMuam9pbignLicpO1xuICB9XG59Il19
|
|
@@ -136,7 +136,7 @@ export class PersonaImporter {
|
|
|
136
136
|
};
|
|
137
137
|
}
|
|
138
138
|
const metadata = data;
|
|
139
|
-
const filename = `${metadata.name.toLowerCase().
|
|
139
|
+
const filename = `${metadata.name.toLowerCase().replaceAll(/\s+/g, '-')}.md`;
|
|
140
140
|
const exportedPersona = {
|
|
141
141
|
metadata,
|
|
142
142
|
content: mdContent,
|
|
@@ -201,7 +201,7 @@ export class PersonaImporter {
|
|
|
201
201
|
}
|
|
202
202
|
const sanitizedContent = validationResult.sanitizedContent || unicodeNormalizedContent;
|
|
203
203
|
// Generate safe filename
|
|
204
|
-
let filename = validateFilename(exportData.filename || `${metadata.name.toLowerCase().
|
|
204
|
+
let filename = validateFilename(exportData.filename || `${metadata.name.toLowerCase().replaceAll(/\s+/g, '-')}.md`);
|
|
205
205
|
// Check for conflicts
|
|
206
206
|
const conflicts = this.findConflicts(metadata.name, filename, existingPersonas);
|
|
207
207
|
if (conflicts.length > 0 && !overwrite) {
|
|
@@ -331,4 +331,4 @@ export class PersonaImporter {
|
|
|
331
331
|
return message;
|
|
332
332
|
}
|
|
333
333
|
}
|
|
334
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVyc29uYUltcG9ydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BlcnNvbmEvZXhwb3J0LWltcG9ydC9QZXJzb25hSW1wb3J0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFHakMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBaUIsbUJBQW1CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0SCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBVS9DLE1BQU0sT0FBTyxlQUFlO0lBRWhCO0lBQ0E7SUFGVixZQUNVLFdBQW1CLEVBQ25CLFdBQTBCO1FBRDFCLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBQ25CLGdCQUFXLEdBQVgsV0FBVyxDQUFlO0lBQ2pDLENBQUM7SUFFSjs7T0FFRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBYyxFQUFFLGdCQUFzQyxFQUFFLFNBQVMsR0FBRyxLQUFLO1FBQzNGLElBQUksQ0FBQztZQUNILHdCQUF3QjtZQUN4QixJQUFJLFdBQVcsR0FBMkIsSUFBSSxDQUFDO1lBRS9DLDRCQUE0QjtZQUM1QixJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FB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QyxFQUFFLENBQUM7WUFDaEMsT0FBTyxJQUFJLGNBQWMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUMxRixDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5QixPQUFPLElBQUksZUFBZSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sYUFBYSxDQUFDO1lBQzdELE9BQU8sSUFBSSxZQUFZLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDcEYsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGVyc29uYSBpbXBvcnQgZnVuY3Rpb25hbGl0eSB3aXRoIHZhbGlkYXRpb25cbiAqL1xuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy9wcm9taXNlcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IG1hdHRlciBmcm9tICdncmF5LW1hdHRlcic7XG5pbXBvcnQgeyBQZXJzb25hLCBQZXJzb25hTWV0YWRhdGEgfSBmcm9tICcuLi8uLi90eXBlcy9wZXJzb25hLmpzJztcbmltcG9ydCB7IEV4cG9ydGVkUGVyc29uYSwgRXhwb3J0QnVuZGxlIH0gZnJvbSAnLi9QZXJzb25hRXhwb3J0ZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJlWWFtbFBhcnNlciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3NlY3VyZVlhbWxQYXJzZXIuanMnO1xuaW1wb3J0IHsgQ29udGVudFZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L2NvbnRlbnRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgdmFsaWRhdGVGaWxlbmFtZSwgdmFsaWRhdGVQYXRoLCBzYW5pdGl6ZUlucHV0LCB2YWxpZGF0ZUNvbnRlbnRTaXplIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvSW5wdXRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBGaWxlTG9ja01hbmFnZXIgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9maWxlTG9ja01hbmFnZXIuanMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVVbmlxdWVJZCB9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGVzeXN0ZW0uanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBJbXBvcnRSZXN1bHQge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHBlcnNvbmE/OiBQZXJzb25hO1xuICBmaWxlbmFtZT86IHN0cmluZztcbiAgY29uZmxpY3RzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjbGFzcyBQZXJzb25hSW1wb3J0ZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHBlcnNvbmFzRGlyOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBjdXJyZW50VXNlcjogc3RyaW5nIHwgbnVsbFxuICApIHt9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhIHBlcnNvbmEgZnJvbSB2YXJpb3VzIHNvdXJjZXNcbiAgICovXG4gIGFzeW5jIGltcG9ydFBlcnNvbmEoc291cmNlOiBzdHJpbmcsIGV4aXN0aW5nUGVyc29uYXM6IE1hcDxzdHJpbmcsIFBlcnNvbmE+LCBvdmVyd3JpdGUgPSBmYWxzZSk6IFByb21pc2U8SW1wb3J0UmVzdWx0PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIERldGVybWluZSBzb3VyY2UgdHlwZVxuICAgICAgbGV0IHBlcnNvbmFEYXRhOiBFeHBvcnRlZFBlcnNvbmEgfCBudWxsID0gbnVsbDtcblxuICAgICAgLy8gQ2hlY2sgaWYgaXQncyBhIGZpbGUgcGF0aFxuICAgICAgaWYgKHNvdXJjZS5zdGFydHNXaXRoKCcvJykgfHwgc291cmNlLnN0YXJ0c1dpdGgoJy4vJykgfHwgc291cmNlLmVuZHNXaXRoKCcubWQnKSB8fCBzb3VyY2UuZW5kc1dpdGgoJy5qc29uJykpIHtcbiAgICAgICAgcGVyc29uYURhdGEgPSBhd2FpdCB0aGlzLmltcG9ydEZyb21GaWxlKHNvdXJjZSk7XG4gICAgICB9IFxuICAgICAgLy8gQ2hlY2sgaWYgaXQncyBiYXNlNjQgZW5jb2RlZFxuICAgICAgZWxzZSBpZiAodGhpcy5pc0Jhc2U2NChzb3VyY2UpKSB7XG4gICAgICAgIHBlcnNvbmFEYXRhID0gYXdhaXQgdGhpcy5pbXBvcnRGcm9tQmFzZTY0KHNvdXJjZSk7XG4gICAgICB9XG4gICAgICAvLyBUcnkgcGFyc2luZyBhcyBKU09OIGRpcmVjdGx5XG4gICAgICBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHNvdXJjZSk7XG4gICAgICAgICAgaWYgKHRoaXMuaXNFeHBvcnRCdW5kbGUocGFyc2VkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0QnVuZGxlKHBhcnNlZCwgZXhpc3RpbmdQZXJzb25hcywgb3ZlcndyaXRlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNFeHBvcnRlZFBlcnNvbmEocGFyc2VkKSkge1xuICAgICAgICAgICAgcGVyc29uYURhdGEgPSBwYXJzZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBOb3QgSlNPTiwgbWlnaHQgYmUgcmF3IG1hcmtkb3duXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0RnJvbU1hcmtkb3duKHNvdXJjZSwgZXhpc3RpbmdQZXJzb25hcywgb3ZlcndyaXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXBlcnNvbmFEYXRhKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgbWVzc2FnZTogXCJDb3VsZCBub3QgcGFyc2UgaW1wb3J0IHNvdXJjZS4gUGxlYXNlIHByb3ZpZGUgYSBmaWxlIHBhdGgsIEpTT04gc3RyaW5nLCBvciBiYXNlNjQgZW5jb2RlZCBkYXRhLlwiXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIGFuZCBjcmVhdGUgcGVyc29uYVxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY3JlYXRlUGVyc29uYUZyb21FeHBvcnQocGVyc29uYURhdGEsIGV4aXN0aW5nUGVyc29uYXMsIG92ZXJ3cml0ZSk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdJbXBvcnQgZXJyb3InLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogYEltcG9ydCBmYWlsZWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWBcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBmcm9tIGZpbGUgcGF0aFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBpbXBvcnRGcm9tRmlsZShmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxFeHBvcnRlZFBlcnNvbmEgfCBudWxsPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFZhbGlkYXRlIHBhdGhcbiAgICAgIGNvbnN0IHZhbGlkYXRlZFBhdGggPSB2YWxpZGF0ZVBhdGgoZmlsZVBhdGgpO1xuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKHZhbGlkYXRlZFBhdGgsICd1dGYtOCcpO1xuXG4gICAgICBpZiAoZmlsZVBhdGguZW5kc1dpdGgoJy5qc29uJykpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50KTtcbiAgICAgICAgaWYgKHRoaXMuaXNFeHBvcnRlZFBlcnNvbmEocGFyc2VkKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0V4cG9ydEJ1bmRsZShwYXJzZWQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBpcyBhIGJ1bmRsZSBmaWxlLiBJdCB3aWxsIGJlIGltcG9ydGVkIGFzIG11bHRpcGxlIHBlcnNvbmFzLlwiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChmaWxlUGF0aC5lbmRzV2l0aCgnLm1kJykpIHtcbiAgICAgICAgLy8gUGFyc2UgbWFya2Rvd24gZmlsZVxuICAgICAgICBjb25zdCB7IGRhdGEsIGNvbnRlbnQ6IG1kQ29udGVudCB9ID0gbWF0dGVyKGNvbnRlbnQpO1xuICAgICAgICBjb25zdCBmaWxlbmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZVBhdGgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1ldGFkYXRhOiBkYXRhIGFzIFBlcnNvbmFNZXRhZGF0YSxcbiAgICAgICAgICBjb250ZW50OiBtZENvbnRlbnQsXG4gICAgICAgICAgZmlsZW5hbWU6IGZpbGVuYW1lLFxuICAgICAgICAgIGV4cG9ydGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZpbGUgaW1wb3J0IGVycm9yJywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBmcm9tIGJhc2U2NCBzdHJpbmdcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaW1wb3J0RnJvbUJhc2U2NChiYXNlNjQ6IHN0cmluZyk6IFByb21pc2U8RXhwb3J0ZWRQZXJzb25hIHwgbnVsbD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBqc29uID0gQnVmZmVyLmZyb20oYmFzZTY0LCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGpzb24pO1xuICAgICAgXG4gICAgICBpZiAodGhpcy5pc0V4cG9ydGVkUGVyc29uYShwYXJzZWQpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNFeHBvcnRCdW5kbGUocGFyc2VkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGlzIGEgYnVuZGxlLiBJdCB3aWxsIGJlIGltcG9ydGVkIGFzIG11bHRpcGxlIHBlcnNvbmFzLlwiKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdCYXNlNjQgaW1wb3J0IGVycm9yJywgZXJyb3IpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgZnJvbSByYXcgbWFya2Rvd24gY29udGVudFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBpbXBvcnRGcm9tTWFya2Rvd24oY29udGVudDogc3RyaW5nLCBleGlzdGluZ1BlcnNvbmFzOiBNYXA8c3RyaW5nLCBQZXJzb25hPiwgb3ZlcndyaXRlOiBib29sZWFuKTogUHJvbWlzZTxJbXBvcnRSZXN1bHQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gVmFsaWRhdGUgY29udGVudCBzaXplXG4gICAgICB2YWxpZGF0ZUNvbnRlbnRTaXplKGNvbnRlbnQsIDEwMCAqIDEwMjQpOyAvLyAxMDBLQiBsaW1pdFxuXG4gICAgICAvLyBUcnkgdG8gcGFyc2UgYXMgbWFya2Rvd24gd2l0aCBmcm9udG1hdHRlclxuICAgICAgY29uc3QgeyBkYXRhLCBjb250ZW50OiBtZENvbnRlbnQgfSA9IG1hdHRlcihjb250ZW50KTtcbiAgICAgIFxuICAgICAgaWYgKCFkYXRhLm5hbWUgfHwgIWRhdGEuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICBtZXNzYWdlOiBcIkludmFsaWQgcGVyc29uYSBmb3JtYXQuIE11c3QgaW5jbHVkZSBuYW1lIGFuZCBkZXNjcmlwdGlvbiBpbiBZQU1MIGZyb250bWF0dGVyLlwiXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gZGF0YSBhcyBQZXJzb25hTWV0YWRhdGE7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IGAke21ldGFkYXRhLm5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICctJyl9Lm1kYDtcblxuICAgICAgY29uc3QgZXhwb3J0ZWRQZXJzb25hOiBFeHBvcnRlZFBlcnNvbmEgPSB7XG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBjb250ZW50OiBtZENvbnRlbnQsXG4gICAgICAgIGZpbGVuYW1lLFxuICAgICAgICBleHBvcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGV4cG9ydGVkQnk6IHRoaXMuY3VycmVudFVzZXIgfHwgdW5kZWZpbmVkXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5jcmVhdGVQZXJzb25hRnJvbUV4cG9ydChleHBvcnRlZFBlcnNvbmEsIGV4aXN0aW5nUGVyc29uYXMsIG92ZXJ3cml0ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIHBhcnNlIG1hcmtkb3duOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYSBidW5kbGUgb2YgcGVyc29uYXNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaW1wb3J0QnVuZGxlKGJ1bmRsZTogRXhwb3J0QnVuZGxlLCBleGlzdGluZ1BlcnNvbmFzOiBNYXA8c3RyaW5nLCBQZXJzb25hPiwgb3ZlcndyaXRlOiBib29sZWFuKTogUHJvbWlzZTxJbXBvcnRSZXN1bHQ+IHtcbiAgICBjb25zdCByZXN1bHRzID0ge1xuICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgIGltcG9ydGVkOiBbXSBhcyBzdHJpbmdbXSxcbiAgICAgIGZhaWxlZDogW10gYXMgc3RyaW5nW10sXG4gICAgICBjb25mbGljdHM6IFtdIGFzIHN0cmluZ1tdXG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgcGVyc29uYURhdGEgb2YgYnVuZGxlLnBlcnNvbmFzKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNyZWF0ZVBlcnNvbmFGcm9tRXhwb3J0KHBlcnNvbmFEYXRhLCBleGlzdGluZ1BlcnNvbmFzLCBvdmVyd3JpdGUpO1xuICAgICAgXG4gICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgcmVzdWx0cy5pbXBvcnRlZC5wdXNoKHBlcnNvbmFEYXRhLm1ldGFkYXRhLm5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0cy5mYWlsZWQucHVzaChgJHtwZXJzb25hRGF0YS5tZXRhZGF0YS5uYW1lfTogJHtyZXN1bHQubWVzc2FnZX1gKTtcbiAgICAgICAgaWYgKHJlc3VsdC5jb25mbGljdHMpIHtcbiAgICAgICAgICByZXN1bHRzLmNvbmZsaWN0cy5wdXNoKC4uLnJlc3VsdC5jb25mbGljdHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IHJlc3VsdHMuZmFpbGVkLmxlbmd0aCA9PT0gMCxcbiAgICAgIG1lc3NhZ2U6IHRoaXMuZm9ybWF0QnVuZGxlSW1wb3J0UmVzdWx0KHJlc3VsdHMpLFxuICAgICAgY29uZmxpY3RzOiByZXN1bHRzLmNvbmZsaWN0cy5sZW5ndGggPiAwID8gcmVzdWx0cy5jb25mbGljdHMgOiB1bmRlZmluZWRcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBwZXJzb25hIGZyb20gZXhwb3J0ZWQgZGF0YVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVQZXJzb25hRnJvbUV4cG9ydChcbiAgICBleHBvcnREYXRhOiBFeHBvcnRlZFBlcnNvbmEsIFxuICAgIGV4aXN0aW5nUGVyc29uYXM6IE1hcDxzdHJpbmcsIFBlcnNvbmE+LCBcbiAgICBvdmVyd3JpdGU6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxJbXBvcnRSZXN1bHQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gVmFsaWRhdGUgbWV0YWRhdGFcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gYXdhaXQgdGhpcy52YWxpZGF0ZUFuZEVucmljaE1ldGFkYXRhKGV4cG9ydERhdGEubWV0YWRhdGEpO1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBhbmQgbm9ybWFsaXplIFVuaWNvZGUgY29udGVudCBmaXJzdFxuICAgICAgY29uc3QgdW5pY29kZVJlc3VsdCA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGV4cG9ydERhdGEuY29udGVudCk7XG4gICAgICBpZiAodW5pY29kZVJlc3VsdC5zZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENyaXRpY2FsIFVuaWNvZGUgc2VjdXJpdHkgdGhyZWF0IGRldGVjdGVkOiAke3VuaWNvZGVSZXN1bHQuZGV0ZWN0ZWRJc3N1ZXM/LmpvaW4oJywgJyl9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCB1bmljb2RlTm9ybWFsaXplZENvbnRlbnQgPSB1bmljb2RlUmVzdWx0Lm5vcm1hbGl6ZWRDb250ZW50O1xuXG4gICAgICAvLyBUaGVuIHZhbGlkYXRlIGNvbnRlbnQgZm9yIG90aGVyIHNlY3VyaXR5IHRocmVhdHNcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlQW5kU2FuaXRpemUodW5pY29kZU5vcm1hbGl6ZWRDb250ZW50KTtcbiAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdC5pc1ZhbGlkICYmIHZhbGlkYXRpb25SZXN1bHQuc2V2ZXJpdHkgPT09ICdjcml0aWNhbCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDcml0aWNhbCBzZWN1cml0eSB0aHJlYXQgZGV0ZWN0ZWQ6ICR7dmFsaWRhdGlvblJlc3VsdC5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2FuaXRpemVkQ29udGVudCA9IHZhbGlkYXRpb25SZXN1bHQuc2FuaXRpemVkQ29udGVudCB8fCB1bmljb2RlTm9ybWFsaXplZENvbnRlbnQ7XG5cbiAgICAgIC8vIEdlbmVyYXRlIHNhZmUgZmlsZW5hbWVcbiAgICAgIGxldCBmaWxlbmFtZSA9IHZhbGlkYXRlRmlsZW5hbWUoZXhwb3J0RGF0YS5maWxlbmFtZSB8fCBgJHttZXRhZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnLScpfS5tZGApO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBmb3IgY29uZmxpY3RzXG4gICAgICBjb25zdCBjb25mbGljdHMgPSB0aGlzLmZpbmRDb25mbGljdHMobWV0YWRhdGEubmFtZSwgZmlsZW5hbWUsIGV4aXN0aW5nUGVyc29uYXMpO1xuICAgICAgaWYgKGNvbmZsaWN0cy5sZW5ndGggPiAwICYmICFvdmVyd3JpdGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICBtZXNzYWdlOiBgUGVyc29uYSBhbHJlYWR5IGV4aXN0czogJHtjb25mbGljdHMuam9pbignLCAnKX0uIFVzZSBvdmVyd3JpdGU9dHJ1ZSB0byByZXBsYWNlLmAsXG4gICAgICAgICAgY29uZmxpY3RzXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgcGVyc29uYSBmaWxlXG4gICAgICBjb25zdCBwZXJzb25hUGF0aCA9IHBhdGguam9pbih0aGlzLnBlcnNvbmFzRGlyLCBmaWxlbmFtZSk7XG4gICAgICBjb25zdCBmaWxlQ29udGVudCA9IG1hdHRlci5zdHJpbmdpZnkoc2FuaXRpemVkQ29udGVudCwgbWV0YWRhdGEpO1xuICAgICAgXG4gICAgICAvLyBVc2UgZmlsZSBsb2NraW5nIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG4gICAgICBhd2FpdCBGaWxlTG9ja01hbmFnZXIud2l0aExvY2soYHBlcnNvbmE6JHttZXRhZGF0YS5uYW1lfWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1dyaXRlRmlsZShwZXJzb25hUGF0aCwgZmlsZUNvbnRlbnQpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIENyZWF0ZSBwZXJzb25hIG9iamVjdFxuICAgICAgY29uc3QgcGVyc29uYTogUGVyc29uYSA9IHtcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIGNvbnRlbnQ6IHNhbml0aXplZENvbnRlbnQsXG4gICAgICAgIGZpbGVuYW1lLFxuICAgICAgICB1bmlxdWVfaWQ6IG1ldGFkYXRhLnVuaXF1ZV9pZCFcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIG1lc3NhZ2U6IGBTdWNjZXNzZnVsbHkgaW1wb3J0ZWQgXCIke21ldGFkYXRhLm5hbWV9XCJgLFxuICAgICAgICBwZXJzb25hLFxuICAgICAgICBmaWxlbmFtZVxuICAgICAgfTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0NyZWF0ZSBwZXJzb25hIGVycm9yJywgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gY3JlYXRlIHBlcnNvbmE6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWBcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGFuZCBlbnJpY2ggbWV0YWRhdGFcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVBbmRFbnJpY2hNZXRhZGF0YShtZXRhZGF0YTogYW55KTogUHJvbWlzZTxQZXJzb25hTWV0YWRhdGE+IHtcbiAgICAvLyBFbnN1cmUgcmVxdWlyZWQgZmllbGRzXG4gICAgaWYgKCFtZXRhZGF0YS5uYW1lIHx8ICFtZXRhZGF0YS5kZXNjcmlwdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyByZXF1aXJlZCBmaWVsZHM6IG5hbWUgYW5kIGRlc2NyaXB0aW9uXCIpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGFuZCBub3JtYWxpemUgVW5pY29kZSBpbiBtZXRhZGF0YSBmaWVsZHNcbiAgICBjb25zdCBuYW1lUmVzdWx0ID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUobWV0YWRhdGEubmFtZSk7XG4gICAgY29uc3QgZGVzY1Jlc3VsdCA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKG1ldGFkYXRhLmRlc2NyaXB0aW9uKTtcbiAgICBcbiAgICBpZiAobmFtZVJlc3VsdC5zZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDcml0aWNhbCBVbmljb2RlIHNlY3VyaXR5IHRocmVhdCBpbiBwZXJzb25hIG5hbWU6ICR7bmFtZVJlc3VsdC5kZXRlY3RlZElzc3Vlcz8uam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgaWYgKGRlc2NSZXN1bHQuc2V2ZXJpdHkgPT09ICdjcml0aWNhbCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ3JpdGljYWwgVW5pY29kZSBzZWN1cml0eSB0aHJlYXQgaW4gcGVyc29uYSBkZXNjcmlwdGlvbjogJHtkZXNjUmVzdWx0LmRldGVjdGVkSXNzdWVzPy5qb2luKCcsICcpfWApO1xuICAgIH1cblxuICAgIC8vIFVzZSBub3JtYWxpemVkIHZhbHVlc1xuICAgIG1ldGFkYXRhLm5hbWUgPSBuYW1lUmVzdWx0Lm5vcm1hbGl6ZWRDb250ZW50O1xuICAgIG1ldGFkYXRhLmRlc2NyaXB0aW9uID0gZGVzY1Jlc3VsdC5ub3JtYWxpemVkQ29udGVudDtcblxuICAgIC8vIEdlbmVyYXRlIHVuaXF1ZV9pZCBpZiBtaXNzaW5nXG4gICAgaWYgKCFtZXRhZGF0YS51bmlxdWVfaWQpIHtcbiAgICAgIG1ldGFkYXRhLnVuaXF1ZV9pZCA9IGdlbmVyYXRlVW5pcXVlSWQobWV0YWRhdGEubmFtZSwgdGhpcy5jdXJyZW50VXNlciB8fCAnaW1wb3J0ZWQnKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgZGVmYXVsdHNcbiAgICBtZXRhZGF0YS52ZXJzaW9uID0gbWV0YWRhdGEudmVyc2lvbiB8fCAnMS4wJztcbiAgICBtZXRhZGF0YS5hdXRob3IgPSBtZXRhZGF0YS5hdXRob3IgfHwgdGhpcy5jdXJyZW50VXNlciB8fCAnaW1wb3J0ZWQnO1xuICAgIG1ldGFkYXRhLmNhdGVnb3J5ID0gbWV0YWRhdGEuY2F0ZWdvcnkgfHwgJ2N1c3RvbSc7XG4gICAgbWV0YWRhdGEuY3JlYXRlZF9kYXRlID0gbWV0YWRhdGEuY3JlYXRlZF9kYXRlIHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblxuICAgIC8vIFZhbGlkYXRlIHdpdGggWUFNTCBwYXJzZXIgZm9yIHNlY3VyaXR5IHVzaW5nIG5vcm1hbGl6ZWQgbWV0YWRhdGFcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSBhd2FpdCBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlKG1hdHRlci5zdHJpbmdpZnkoJycsIG1ldGFkYXRhKSk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGVkLmRhdGEgYXMgUGVyc29uYU1ldGFkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgY29uZmxpY3RzIHdpdGggZXhpc3RpbmcgcGVyc29uYXNcbiAgICovXG4gIHByaXZhdGUgZmluZENvbmZsaWN0cyhuYW1lOiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcsIGV4aXN0aW5nUGVyc29uYXM6IE1hcDxzdHJpbmcsIFBlcnNvbmE+KTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNvbmZsaWN0czogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgcGVyc29uYV0gb2YgZXhpc3RpbmdQZXJzb25hcykge1xuICAgICAgaWYgKHBlcnNvbmEubWV0YWRhdGEubmFtZSA9PT0gbmFtZSB8fCBwZXJzb25hLmZpbGVuYW1lID09PSBmaWxlbmFtZSkge1xuICAgICAgICBjb25mbGljdHMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb25mbGljdHM7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgc3RyaW5nIGlzIGJhc2U2NFxuICAgKi9cbiAgcHJpdmF0ZSBpc0Jhc2U2NChzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIENoZWNrIGxlbmd0aCBpcyBtdWx0aXBsZSBvZiA0XG4gICAgaWYgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgXG4gICAgLy8gU0VDVVJJVFkgRklYOiBFbnN1cmUgYmFzZTY0IHN0cmluZyBpcyBub3QgZW1wdHlcbiAgICAvLyBQcmV2aW91c2x5OiAvXltBLVphLXowLTkrL10qPXswLDJ9JC8gYWxsb3dlZCBlbXB0eSBzdHJpbmdzXG4gICAgLy8gTm93OiBSZXF1aXJlIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgYmVmb3JlIG9wdGlvbmFsIHBhZGRpbmdcbiAgICByZXR1cm4gL15bQS1aYS16MC05Ky9dKz17MCwyfSQvLnRlc3Qoc3RyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUeXBlIGd1YXJkIGZvciBFeHBvcnRlZFBlcnNvbmFcbiAgICovXG4gIHByaXZhdGUgaXNFeHBvcnRlZFBlcnNvbmEob2JqOiBhbnkpOiBvYmogaXMgRXhwb3J0ZWRQZXJzb25hIHtcbiAgICByZXR1cm4gb2JqICYmIFxuICAgICAgdHlwZW9mIG9iai5tZXRhZGF0YSA9PT0gJ29iamVjdCcgJiZcbiAgICAgIHR5cGVvZiBvYmouY29udGVudCA9PT0gJ3N0cmluZycgJiZcbiAgICAgIHR5cGVvZiBvYmouZmlsZW5hbWUgPT09ICdzdHJpbmcnO1xuICB9XG5cbiAgLyoqXG4gICAqIFR5cGUgZ3VhcmQgZm9yIEV4cG9ydEJ1bmRsZVxuICAgKi9cbiAgcHJpdmF0ZSBpc0V4cG9ydEJ1bmRsZShvYmo6IGFueSk6IG9iaiBpcyBFeHBvcnRCdW5kbGUge1xuICAgIHJldHVybiBvYmogJiZcbiAgICAgIHR5cGVvZiBvYmoudmVyc2lvbiA9PT0gJ3N0cmluZycgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkob2JqLnBlcnNvbmFzKSAmJlxuICAgICAgdHlwZW9mIG9iai5wZXJzb25hQ291bnQgPT09ICdudW1iZXInO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBidW5kbGUgaW1wb3J0IHJlc3VsdHNcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0QnVuZGxlSW1wb3J0UmVzdWx0KHJlc3VsdHM6IGFueSk6IHN0cmluZyB7XG4gICAgbGV0IG1lc3NhZ2UgPSBgQnVuZGxlIEltcG9ydCBTdW1tYXJ5OlxcbmA7XG4gICAgbWVzc2FnZSArPSBg4pyFIFN1Y2Nlc3NmdWxseSBpbXBvcnRlZDogJHtyZXN1bHRzLmltcG9ydGVkLmxlbmd0aH0gcGVyc29uYXNcXG5gO1xuICAgIFxuICAgIGlmIChyZXN1bHRzLmltcG9ydGVkLmxlbmd0aCA+IDApIHtcbiAgICAgIG1lc3NhZ2UgKz0gYEltcG9ydGVkOlxcbiR7cmVzdWx0cy5pbXBvcnRlZC5tYXAoKG46IHN0cmluZykgPT4gYCAgLSAke259YCkuam9pbignXFxuJyl9XFxuYDtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0cy5mYWlsZWQubGVuZ3RoID4gMCkge1xuICAgICAgbWVzc2FnZSArPSBgXFxu4p2MIEZhaWxlZDogJHtyZXN1bHRzLmZhaWxlZC5sZW5ndGh9IHBlcnNvbmFzXFxuYDtcbiAgICAgIG1lc3NhZ2UgKz0gYEVycm9yczpcXG4ke3Jlc3VsdHMuZmFpbGVkLm1hcCgoZTogc3RyaW5nKSA9PiBgICAtICR7ZX1gKS5qb2luKCdcXG4nKX1gO1xuICAgIH1cblxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9XG59Il19
|
|
334
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVyc29uYUltcG9ydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BlcnNvbmEvZXhwb3J0LWltcG9ydC9QZXJzb25hSW1wb3J0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFHakMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBaUIsbUJBQW1CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0SCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBVS9DLE1BQU0sT0FBTyxlQUFlO0lBRWhCO0lBQ0E7SUFGVixZQUNVLFdBQW1CLEVBQ25CLFdBQTBCO1FBRDFCLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBQ25CLGdCQUFXLEdBQVgsV0FBVyxDQUFlO0lBQ2pDLENBQUM7SUFFSjs7T0FFRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBYyxFQUFFLGdCQUFzQyxFQUFFLFNBQVMsR0FBRyxLQUFLO1FBQzNGLElBQUksQ0FBQztZQUNILHdCQUF3QjtZQUN4QixJQUFJLFdBQVcsR0FBMkIsSUFBSSxDQUFDO1lBRS9DLDRCQUE0QjtZQUM1QixJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FB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QyxFQUFFLENBQUM7WUFDaEMsT0FBTyxJQUFJLGNBQWMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUMxRixDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5QixPQUFPLElBQUksZUFBZSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sYUFBYSxDQUFDO1lBQzdELE9BQU8sSUFBSSxZQUFZLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDcEYsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGVyc29uYSBpbXBvcnQgZnVuY3Rpb25hbGl0eSB3aXRoIHZhbGlkYXRpb25cbiAqL1xuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy9wcm9taXNlcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IG1hdHRlciBmcm9tICdncmF5LW1hdHRlcic7XG5pbXBvcnQgeyBQZXJzb25hLCBQZXJzb25hTWV0YWRhdGEgfSBmcm9tICcuLi8uLi90eXBlcy9wZXJzb25hLmpzJztcbmltcG9ydCB7IEV4cG9ydGVkUGVyc29uYSwgRXhwb3J0QnVuZGxlIH0gZnJvbSAnLi9QZXJzb25hRXhwb3J0ZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJlWWFtbFBhcnNlciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3NlY3VyZVlhbWxQYXJzZXIuanMnO1xuaW1wb3J0IHsgQ29udGVudFZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L2NvbnRlbnRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgdmFsaWRhdGVGaWxlbmFtZSwgdmFsaWRhdGVQYXRoLCBzYW5pdGl6ZUlucHV0LCB2YWxpZGF0ZUNvbnRlbnRTaXplIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvSW5wdXRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBGaWxlTG9ja01hbmFnZXIgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9maWxlTG9ja01hbmFnZXIuanMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVVbmlxdWVJZCB9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGVzeXN0ZW0uanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBJbXBvcnRSZXN1bHQge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHBlcnNvbmE/OiBQZXJzb25hO1xuICBmaWxlbmFtZT86IHN0cmluZztcbiAgY29uZmxpY3RzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjbGFzcyBQZXJzb25hSW1wb3J0ZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHBlcnNvbmFzRGlyOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBjdXJyZW50VXNlcjogc3RyaW5nIHwgbnVsbFxuICApIHt9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhIHBlcnNvbmEgZnJvbSB2YXJpb3VzIHNvdXJjZXNcbiAgICovXG4gIGFzeW5jIGltcG9ydFBlcnNvbmEoc291cmNlOiBzdHJpbmcsIGV4aXN0aW5nUGVyc29uYXM6IE1hcDxzdHJpbmcsIFBlcnNvbmE+LCBvdmVyd3JpdGUgPSBmYWxzZSk6IFByb21pc2U8SW1wb3J0UmVzdWx0PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIERldGVybWluZSBzb3VyY2UgdHlwZVxuICAgICAgbGV0IHBlcnNvbmFEYXRhOiBFeHBvcnRlZFBlcnNvbmEgfCBudWxsID0gbnVsbDtcblxuICAgICAgLy8gQ2hlY2sgaWYgaXQncyBhIGZpbGUgcGF0aFxuICAgICAgaWYgKHNvdXJjZS5zdGFydHNXaXRoKCcvJykgfHwgc291cmNlLnN0YXJ0c1dpdGgoJy4vJykgfHwgc291cmNlLmVuZHNXaXRoKCcubWQnKSB8fCBzb3VyY2UuZW5kc1dpdGgoJy5qc29uJykpIHtcbiAgICAgICAgcGVyc29uYURhdGEgPSBhd2FpdCB0aGlzLmltcG9ydEZyb21GaWxlKHNvdXJjZSk7XG4gICAgICB9IFxuICAgICAgLy8gQ2hlY2sgaWYgaXQncyBiYXNlNjQgZW5jb2RlZFxuICAgICAgZWxzZSBpZiAodGhpcy5pc0Jhc2U2NChzb3VyY2UpKSB7XG4gICAgICAgIHBlcnNvbmFEYXRhID0gYXdhaXQgdGhpcy5pbXBvcnRGcm9tQmFzZTY0KHNvdXJjZSk7XG4gICAgICB9XG4gICAgICAvLyBUcnkgcGFyc2luZyBhcyBKU09OIGRpcmVjdGx5XG4gICAgICBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHNvdXJjZSk7XG4gICAgICAgICAgaWYgKHRoaXMuaXNFeHBvcnRCdW5kbGUocGFyc2VkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0QnVuZGxlKHBhcnNlZCwgZXhpc3RpbmdQZXJzb25hcywgb3ZlcndyaXRlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNFeHBvcnRlZFBlcnNvbmEocGFyc2VkKSkge1xuICAgICAgICAgICAgcGVyc29uYURhdGEgPSBwYXJzZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBOb3QgSlNPTiwgbWlnaHQgYmUgcmF3IG1hcmtkb3duXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0RnJvbU1hcmtkb3duKHNvdXJjZSwgZXhpc3RpbmdQZXJzb25hcywgb3ZlcndyaXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXBlcnNvbmFEYXRhKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgbWVzc2FnZTogXCJDb3VsZCBub3QgcGFyc2UgaW1wb3J0IHNvdXJjZS4gUGxlYXNlIHByb3ZpZGUgYSBmaWxlIHBhdGgsIEpTT04gc3RyaW5nLCBvciBiYXNlNjQgZW5jb2RlZCBkYXRhLlwiXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIGFuZCBjcmVhdGUgcGVyc29uYVxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY3JlYXRlUGVyc29uYUZyb21FeHBvcnQocGVyc29uYURhdGEsIGV4aXN0aW5nUGVyc29uYXMsIG92ZXJ3cml0ZSk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdJbXBvcnQgZXJyb3InLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogYEltcG9ydCBmYWlsZWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWBcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBmcm9tIGZpbGUgcGF0aFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBpbXBvcnRGcm9tRmlsZShmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxFeHBvcnRlZFBlcnNvbmEgfCBudWxsPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFZhbGlkYXRlIHBhdGhcbiAgICAgIGNvbnN0IHZhbGlkYXRlZFBhdGggPSB2YWxpZGF0ZVBhdGgoZmlsZVBhdGgpO1xuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKHZhbGlkYXRlZFBhdGgsICd1dGYtOCcpO1xuXG4gICAgICBpZiAoZmlsZVBhdGguZW5kc1dpdGgoJy5qc29uJykpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50KTtcbiAgICAgICAgaWYgKHRoaXMuaXNFeHBvcnRlZFBlcnNvbmEocGFyc2VkKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0V4cG9ydEJ1bmRsZShwYXJzZWQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBpcyBhIGJ1bmRsZSBmaWxlLiBJdCB3aWxsIGJlIGltcG9ydGVkIGFzIG11bHRpcGxlIHBlcnNvbmFzLlwiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChmaWxlUGF0aC5lbmRzV2l0aCgnLm1kJykpIHtcbiAgICAgICAgLy8gUGFyc2UgbWFya2Rvd24gZmlsZVxuICAgICAgICBjb25zdCB7IGRhdGEsIGNvbnRlbnQ6IG1kQ29udGVudCB9ID0gbWF0dGVyKGNvbnRlbnQpO1xuICAgICAgICBjb25zdCBmaWxlbmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZVBhdGgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1ldGFkYXRhOiBkYXRhIGFzIFBlcnNvbmFNZXRhZGF0YSxcbiAgICAgICAgICBjb250ZW50OiBtZENvbnRlbnQsXG4gICAgICAgICAgZmlsZW5hbWU6IGZpbGVuYW1lLFxuICAgICAgICAgIGV4cG9ydGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZpbGUgaW1wb3J0IGVycm9yJywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBmcm9tIGJhc2U2NCBzdHJpbmdcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaW1wb3J0RnJvbUJhc2U2NChiYXNlNjQ6IHN0cmluZyk6IFByb21pc2U8RXhwb3J0ZWRQZXJzb25hIHwgbnVsbD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBqc29uID0gQnVmZmVyLmZyb20oYmFzZTY0LCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGpzb24pO1xuICAgICAgXG4gICAgICBpZiAodGhpcy5pc0V4cG9ydGVkUGVyc29uYShwYXJzZWQpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNFeHBvcnRCdW5kbGUocGFyc2VkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGlzIGEgYnVuZGxlLiBJdCB3aWxsIGJlIGltcG9ydGVkIGFzIG11bHRpcGxlIHBlcnNvbmFzLlwiKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdCYXNlNjQgaW1wb3J0IGVycm9yJywgZXJyb3IpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgZnJvbSByYXcgbWFya2Rvd24gY29udGVudFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBpbXBvcnRGcm9tTWFya2Rvd24oY29udGVudDogc3RyaW5nLCBleGlzdGluZ1BlcnNvbmFzOiBNYXA8c3RyaW5nLCBQZXJzb25hPiwgb3ZlcndyaXRlOiBib29sZWFuKTogUHJvbWlzZTxJbXBvcnRSZXN1bHQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gVmFsaWRhdGUgY29udGVudCBzaXplXG4gICAgICB2YWxpZGF0ZUNvbnRlbnRTaXplKGNvbnRlbnQsIDEwMCAqIDEwMjQpOyAvLyAxMDBLQiBsaW1pdFxuXG4gICAgICAvLyBUcnkgdG8gcGFyc2UgYXMgbWFya2Rvd24gd2l0aCBmcm9udG1hdHRlclxuICAgICAgY29uc3QgeyBkYXRhLCBjb250ZW50OiBtZENvbnRlbnQgfSA9IG1hdHRlcihjb250ZW50KTtcbiAgICAgIFxuICAgICAgaWYgKCFkYXRhLm5hbWUgfHwgIWRhdGEuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICBtZXNzYWdlOiBcIkludmFsaWQgcGVyc29uYSBmb3JtYXQuIE11c3QgaW5jbHVkZSBuYW1lIGFuZCBkZXNjcmlwdGlvbiBpbiBZQU1MIGZyb250bWF0dGVyLlwiXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gZGF0YSBhcyBQZXJzb25hTWV0YWRhdGE7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IGAke21ldGFkYXRhLm5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlQWxsKC9cXHMrL2csICctJyl9Lm1kYDtcblxuICAgICAgY29uc3QgZXhwb3J0ZWRQZXJzb25hOiBFeHBvcnRlZFBlcnNvbmEgPSB7XG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBjb250ZW50OiBtZENvbnRlbnQsXG4gICAgICAgIGZpbGVuYW1lLFxuICAgICAgICBleHBvcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGV4cG9ydGVkQnk6IHRoaXMuY3VycmVudFVzZXIgfHwgdW5kZWZpbmVkXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5jcmVhdGVQZXJzb25hRnJvbUV4cG9ydChleHBvcnRlZFBlcnNvbmEsIGV4aXN0aW5nUGVyc29uYXMsIG92ZXJ3cml0ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIHBhcnNlIG1hcmtkb3duOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYSBidW5kbGUgb2YgcGVyc29uYXNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaW1wb3J0QnVuZGxlKGJ1bmRsZTogRXhwb3J0QnVuZGxlLCBleGlzdGluZ1BlcnNvbmFzOiBNYXA8c3RyaW5nLCBQZXJzb25hPiwgb3ZlcndyaXRlOiBib29sZWFuKTogUHJvbWlzZTxJbXBvcnRSZXN1bHQ+IHtcbiAgICBjb25zdCByZXN1bHRzID0ge1xuICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgIGltcG9ydGVkOiBbXSBhcyBzdHJpbmdbXSxcbiAgICAgIGZhaWxlZDogW10gYXMgc3RyaW5nW10sXG4gICAgICBjb25mbGljdHM6IFtdIGFzIHN0cmluZ1tdXG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgcGVyc29uYURhdGEgb2YgYnVuZGxlLnBlcnNvbmFzKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNyZWF0ZVBlcnNvbmFGcm9tRXhwb3J0KHBlcnNvbmFEYXRhLCBleGlzdGluZ1BlcnNvbmFzLCBvdmVyd3JpdGUpO1xuICAgICAgXG4gICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgcmVzdWx0cy5pbXBvcnRlZC5wdXNoKHBlcnNvbmFEYXRhLm1ldGFkYXRhLm5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0cy5mYWlsZWQucHVzaChgJHtwZXJzb25hRGF0YS5tZXRhZGF0YS5uYW1lfTogJHtyZXN1bHQubWVzc2FnZX1gKTtcbiAgICAgICAgaWYgKHJlc3VsdC5jb25mbGljdHMpIHtcbiAgICAgICAgICByZXN1bHRzLmNvbmZsaWN0cy5wdXNoKC4uLnJlc3VsdC5jb25mbGljdHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IHJlc3VsdHMuZmFpbGVkLmxlbmd0aCA9PT0gMCxcbiAgICAgIG1lc3NhZ2U6IHRoaXMuZm9ybWF0QnVuZGxlSW1wb3J0UmVzdWx0KHJlc3VsdHMpLFxuICAgICAgY29uZmxpY3RzOiByZXN1bHRzLmNvbmZsaWN0cy5sZW5ndGggPiAwID8gcmVzdWx0cy5jb25mbGljdHMgOiB1bmRlZmluZWRcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBwZXJzb25hIGZyb20gZXhwb3J0ZWQgZGF0YVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVQZXJzb25hRnJvbUV4cG9ydChcbiAgICBleHBvcnREYXRhOiBFeHBvcnRlZFBlcnNvbmEsIFxuICAgIGV4aXN0aW5nUGVyc29uYXM6IE1hcDxzdHJpbmcsIFBlcnNvbmE+LCBcbiAgICBvdmVyd3JpdGU6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxJbXBvcnRSZXN1bHQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gVmFsaWRhdGUgbWV0YWRhdGFcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gYXdhaXQgdGhpcy52YWxpZGF0ZUFuZEVucmljaE1ldGFkYXRhKGV4cG9ydERhdGEubWV0YWRhdGEpO1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBhbmQgbm9ybWFsaXplIFVuaWNvZGUgY29udGVudCBmaXJzdFxuICAgICAgY29uc3QgdW5pY29kZVJlc3VsdCA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGV4cG9ydERhdGEuY29udGVudCk7XG4gICAgICBpZiAodW5pY29kZVJlc3VsdC5zZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENyaXRpY2FsIFVuaWNvZGUgc2VjdXJpdHkgdGhyZWF0IGRldGVjdGVkOiAke3VuaWNvZGVSZXN1bHQuZGV0ZWN0ZWRJc3N1ZXM/LmpvaW4oJywgJyl9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCB1bmljb2RlTm9ybWFsaXplZENvbnRlbnQgPSB1bmljb2RlUmVzdWx0Lm5vcm1hbGl6ZWRDb250ZW50O1xuXG4gICAgICAvLyBUaGVuIHZhbGlkYXRlIGNvbnRlbnQgZm9yIG90aGVyIHNlY3VyaXR5IHRocmVhdHNcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlQW5kU2FuaXRpemUodW5pY29kZU5vcm1hbGl6ZWRDb250ZW50KTtcbiAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdC5pc1ZhbGlkICYmIHZhbGlkYXRpb25SZXN1bHQuc2V2ZXJpdHkgPT09ICdjcml0aWNhbCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDcml0aWNhbCBzZWN1cml0eSB0aHJlYXQgZGV0ZWN0ZWQ6ICR7dmFsaWRhdGlvblJlc3VsdC5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2FuaXRpemVkQ29udGVudCA9IHZhbGlkYXRpb25SZXN1bHQuc2FuaXRpemVkQ29udGVudCB8fCB1bmljb2RlTm9ybWFsaXplZENvbnRlbnQ7XG5cbiAgICAgIC8vIEdlbmVyYXRlIHNhZmUgZmlsZW5hbWVcbiAgICAgIGxldCBmaWxlbmFtZSA9IHZhbGlkYXRlRmlsZW5hbWUoZXhwb3J0RGF0YS5maWxlbmFtZSB8fCBgJHttZXRhZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZUFsbCgvXFxzKy9nLCAnLScpfS5tZGApO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBmb3IgY29uZmxpY3RzXG4gICAgICBjb25zdCBjb25mbGljdHMgPSB0aGlzLmZpbmRDb25mbGljdHMobWV0YWRhdGEubmFtZSwgZmlsZW5hbWUsIGV4aXN0aW5nUGVyc29uYXMpO1xuICAgICAgaWYgKGNvbmZsaWN0cy5sZW5ndGggPiAwICYmICFvdmVyd3JpdGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICBtZXNzYWdlOiBgUGVyc29uYSBhbHJlYWR5IGV4aXN0czogJHtjb25mbGljdHMuam9pbignLCAnKX0uIFVzZSBvdmVyd3JpdGU9dHJ1ZSB0byByZXBsYWNlLmAsXG4gICAgICAgICAgY29uZmxpY3RzXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgcGVyc29uYSBmaWxlXG4gICAgICBjb25zdCBwZXJzb25hUGF0aCA9IHBhdGguam9pbih0aGlzLnBlcnNvbmFzRGlyLCBmaWxlbmFtZSk7XG4gICAgICBjb25zdCBmaWxlQ29udGVudCA9IG1hdHRlci5zdHJpbmdpZnkoc2FuaXRpemVkQ29udGVudCwgbWV0YWRhdGEpO1xuICAgICAgXG4gICAgICAvLyBVc2UgZmlsZSBsb2NraW5nIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG4gICAgICBhd2FpdCBGaWxlTG9ja01hbmFnZXIud2l0aExvY2soYHBlcnNvbmE6JHttZXRhZGF0YS5uYW1lfWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1dyaXRlRmlsZShwZXJzb25hUGF0aCwgZmlsZUNvbnRlbnQpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIENyZWF0ZSBwZXJzb25hIG9iamVjdFxuICAgICAgY29uc3QgcGVyc29uYTogUGVyc29uYSA9IHtcbiAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIGNvbnRlbnQ6IHNhbml0aXplZENvbnRlbnQsXG4gICAgICAgIGZpbGVuYW1lLFxuICAgICAgICB1bmlxdWVfaWQ6IG1ldGFkYXRhLnVuaXF1ZV9pZCFcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIG1lc3NhZ2U6IGBTdWNjZXNzZnVsbHkgaW1wb3J0ZWQgXCIke21ldGFkYXRhLm5hbWV9XCJgLFxuICAgICAgICBwZXJzb25hLFxuICAgICAgICBmaWxlbmFtZVxuICAgICAgfTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0NyZWF0ZSBwZXJzb25hIGVycm9yJywgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gY3JlYXRlIHBlcnNvbmE6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWBcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGFuZCBlbnJpY2ggbWV0YWRhdGFcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVBbmRFbnJpY2hNZXRhZGF0YShtZXRhZGF0YTogYW55KTogUHJvbWlzZTxQZXJzb25hTWV0YWRhdGE+IHtcbiAgICAvLyBFbnN1cmUgcmVxdWlyZWQgZmllbGRzXG4gICAgaWYgKCFtZXRhZGF0YS5uYW1lIHx8ICFtZXRhZGF0YS5kZXNjcmlwdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyByZXF1aXJlZCBmaWVsZHM6IG5hbWUgYW5kIGRlc2NyaXB0aW9uXCIpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGFuZCBub3JtYWxpemUgVW5pY29kZSBpbiBtZXRhZGF0YSBmaWVsZHNcbiAgICBjb25zdCBuYW1lUmVzdWx0ID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUobWV0YWRhdGEubmFtZSk7XG4gICAgY29uc3QgZGVzY1Jlc3VsdCA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKG1ldGFkYXRhLmRlc2NyaXB0aW9uKTtcbiAgICBcbiAgICBpZiAobmFtZVJlc3VsdC5zZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDcml0aWNhbCBVbmljb2RlIHNlY3VyaXR5IHRocmVhdCBpbiBwZXJzb25hIG5hbWU6ICR7bmFtZVJlc3VsdC5kZXRlY3RlZElzc3Vlcz8uam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgaWYgKGRlc2NSZXN1bHQuc2V2ZXJpdHkgPT09ICdjcml0aWNhbCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ3JpdGljYWwgVW5pY29kZSBzZWN1cml0eSB0aHJlYXQgaW4gcGVyc29uYSBkZXNjcmlwdGlvbjogJHtkZXNjUmVzdWx0LmRldGVjdGVkSXNzdWVzPy5qb2luKCcsICcpfWApO1xuICAgIH1cblxuICAgIC8vIFVzZSBub3JtYWxpemVkIHZhbHVlc1xuICAgIG1ldGFkYXRhLm5hbWUgPSBuYW1lUmVzdWx0Lm5vcm1hbGl6ZWRDb250ZW50O1xuICAgIG1ldGFkYXRhLmRlc2NyaXB0aW9uID0gZGVzY1Jlc3VsdC5ub3JtYWxpemVkQ29udGVudDtcblxuICAgIC8vIEdlbmVyYXRlIHVuaXF1ZV9pZCBpZiBtaXNzaW5nXG4gICAgaWYgKCFtZXRhZGF0YS51bmlxdWVfaWQpIHtcbiAgICAgIG1ldGFkYXRhLnVuaXF1ZV9pZCA9IGdlbmVyYXRlVW5pcXVlSWQobWV0YWRhdGEubmFtZSwgdGhpcy5jdXJyZW50VXNlciB8fCAnaW1wb3J0ZWQnKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgZGVmYXVsdHNcbiAgICBtZXRhZGF0YS52ZXJzaW9uID0gbWV0YWRhdGEudmVyc2lvbiB8fCAnMS4wJztcbiAgICBtZXRhZGF0YS5hdXRob3IgPSBtZXRhZGF0YS5hdXRob3IgfHwgdGhpcy5jdXJyZW50VXNlciB8fCAnaW1wb3J0ZWQnO1xuICAgIG1ldGFkYXRhLmNhdGVnb3J5ID0gbWV0YWRhdGEuY2F0ZWdvcnkgfHwgJ2N1c3RvbSc7XG4gICAgbWV0YWRhdGEuY3JlYXRlZF9kYXRlID0gbWV0YWRhdGEuY3JlYXRlZF9kYXRlIHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblxuICAgIC8vIFZhbGlkYXRlIHdpdGggWUFNTCBwYXJzZXIgZm9yIHNlY3VyaXR5IHVzaW5nIG5vcm1hbGl6ZWQgbWV0YWRhdGFcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSBhd2FpdCBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlKG1hdHRlci5zdHJpbmdpZnkoJycsIG1ldGFkYXRhKSk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGVkLmRhdGEgYXMgUGVyc29uYU1ldGFkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgY29uZmxpY3RzIHdpdGggZXhpc3RpbmcgcGVyc29uYXNcbiAgICovXG4gIHByaXZhdGUgZmluZENvbmZsaWN0cyhuYW1lOiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcsIGV4aXN0aW5nUGVyc29uYXM6IE1hcDxzdHJpbmcsIFBlcnNvbmE+KTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNvbmZsaWN0czogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgcGVyc29uYV0gb2YgZXhpc3RpbmdQZXJzb25hcykge1xuICAgICAgaWYgKHBlcnNvbmEubWV0YWRhdGEubmFtZSA9PT0gbmFtZSB8fCBwZXJzb25hLmZpbGVuYW1lID09PSBmaWxlbmFtZSkge1xuICAgICAgICBjb25mbGljdHMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb25mbGljdHM7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgc3RyaW5nIGlzIGJhc2U2NFxuICAgKi9cbiAgcHJpdmF0ZSBpc0Jhc2U2NChzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIENoZWNrIGxlbmd0aCBpcyBtdWx0aXBsZSBvZiA0XG4gICAgaWYgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgXG4gICAgLy8gU0VDVVJJVFkgRklYOiBFbnN1cmUgYmFzZTY0IHN0cmluZyBpcyBub3QgZW1wdHlcbiAgICAvLyBQcmV2aW91c2x5OiAvXltBLVphLXowLTkrL10qPXswLDJ9JC8gYWxsb3dlZCBlbXB0eSBzdHJpbmdzXG4gICAgLy8gTm93OiBSZXF1aXJlIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgYmVmb3JlIG9wdGlvbmFsIHBhZGRpbmdcbiAgICByZXR1cm4gL15bQS1aYS16MC05Ky9dKz17MCwyfSQvLnRlc3Qoc3RyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUeXBlIGd1YXJkIGZvciBFeHBvcnRlZFBlcnNvbmFcbiAgICovXG4gIHByaXZhdGUgaXNFeHBvcnRlZFBlcnNvbmEob2JqOiBhbnkpOiBvYmogaXMgRXhwb3J0ZWRQZXJzb25hIHtcbiAgICByZXR1cm4gb2JqICYmIFxuICAgICAgdHlwZW9mIG9iai5tZXRhZGF0YSA9PT0gJ29iamVjdCcgJiZcbiAgICAgIHR5cGVvZiBvYmouY29udGVudCA9PT0gJ3N0cmluZycgJiZcbiAgICAgIHR5cGVvZiBvYmouZmlsZW5hbWUgPT09ICdzdHJpbmcnO1xuICB9XG5cbiAgLyoqXG4gICAqIFR5cGUgZ3VhcmQgZm9yIEV4cG9ydEJ1bmRsZVxuICAgKi9cbiAgcHJpdmF0ZSBpc0V4cG9ydEJ1bmRsZShvYmo6IGFueSk6IG9iaiBpcyBFeHBvcnRCdW5kbGUge1xuICAgIHJldHVybiBvYmogJiZcbiAgICAgIHR5cGVvZiBvYmoudmVyc2lvbiA9PT0gJ3N0cmluZycgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkob2JqLnBlcnNvbmFzKSAmJlxuICAgICAgdHlwZW9mIG9iai5wZXJzb25hQ291bnQgPT09ICdudW1iZXInO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBidW5kbGUgaW1wb3J0IHJlc3VsdHNcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0QnVuZGxlSW1wb3J0UmVzdWx0KHJlc3VsdHM6IGFueSk6IHN0cmluZyB7XG4gICAgbGV0IG1lc3NhZ2UgPSBgQnVuZGxlIEltcG9ydCBTdW1tYXJ5OlxcbmA7XG4gICAgbWVzc2FnZSArPSBg4pyFIFN1Y2Nlc3NmdWxseSBpbXBvcnRlZDogJHtyZXN1bHRzLmltcG9ydGVkLmxlbmd0aH0gcGVyc29uYXNcXG5gO1xuICAgIFxuICAgIGlmIChyZXN1bHRzLmltcG9ydGVkLmxlbmd0aCA+IDApIHtcbiAgICAgIG1lc3NhZ2UgKz0gYEltcG9ydGVkOlxcbiR7cmVzdWx0cy5pbXBvcnRlZC5tYXAoKG46IHN0cmluZykgPT4gYCAgLSAke259YCkuam9pbignXFxuJyl9XFxuYDtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0cy5mYWlsZWQubGVuZ3RoID4gMCkge1xuICAgICAgbWVzc2FnZSArPSBgXFxu4p2MIEZhaWxlZDogJHtyZXN1bHRzLmZhaWxlZC5sZW5ndGh9IHBlcnNvbmFzXFxuYDtcbiAgICAgIG1lc3NhZ2UgKz0gYEVycm9yczpcXG4ke3Jlc3VsdHMuZmFpbGVkLm1hcCgoZTogc3RyaW5nKSA9PiBgICAtICR7ZX1gKS5qb2luKCdcXG4nKX1gO1xuICAgIH1cblxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9XG59Il19
|
|
@@ -117,6 +117,18 @@ export declare class DefaultElementProvider {
|
|
|
117
117
|
maxSize: number;
|
|
118
118
|
};
|
|
119
119
|
};
|
|
120
|
+
/**
|
|
121
|
+
* Read only the YAML frontmatter metadata from a file (first 4KB)
|
|
122
|
+
*
|
|
123
|
+
* SECURITY NOTE (Issue #1228): This method MUST use validateContent: true when calling
|
|
124
|
+
* SecureYamlParser.parse() to ensure Unicode security validation runs. Setting validateContent
|
|
125
|
+
* to false would disable ALL content validation including zero-width character detection,
|
|
126
|
+
* creating a security bypass vulnerability.
|
|
127
|
+
*
|
|
128
|
+
* @param filePath - Absolute path to the file to read
|
|
129
|
+
* @param retries - Number of retries for transient failures (default: 2)
|
|
130
|
+
* @returns Parsed metadata object or null if no valid frontmatter found
|
|
131
|
+
*/
|
|
120
132
|
private readMetadataOnly;
|
|
121
133
|
/**
|
|
122
134
|
* Check if a file is a DollhouseMCP test element based on metadata
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultElementProvider.d.ts","sourceRoot":"","sources":["../../src/portfolio/DefaultElementProvider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,eAAO,MAAM,cAAc;;;;;;;;;CASjB,CAAC;AAmBX,MAAM,WAAW,4BAA4B;IAC3C,2EAA2E;IAC3E,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,6DAA6D;IAC7D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,qFAAqF;IACrF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AASD,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAuB;IACnD,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAyC;IAC1E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+B;IAGtD,OAAO,CAAC,MAAM,CAAC,aAAa,CAA8C;IAC1E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAM;gBAEhC,MAAM,CAAC,EAAE,4BAA4B;IAgDjD;;;OAGG;IACH,IAAW,wBAAwB,IAAI,OAAO,CAE7C;IAED;;;OAGG;IACH,IAAW,iBAAiB,IAAI,OAAO,CAEtC;IAED;;;OAGG;IACH,OAAO,KAAK,eAAe,GAwC1B;IAED;;;OAGG;YACW,iBAAiB;IAyC/B;;OAEG;YACW,eAAe;IAS7B;;;;;;;;OAQG;IACH,OAAO,CAAC,gBAAgB;IA8CxB;;;OAGG;IAGH;;;;OAIG;IA+BH;;;;;OAKG;IAMH;;;;;OAKG;IAEH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAM;IAC3C,OAAO,CAAC,MAAM,CAAC,eAAe,CAAsC;IAEpE,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,aAAa;IAYrB;;;;OAIG;WACW,OAAO,IAAI,IAAI;IAsB7B;;;;;OAKG;WACW,mBAAmB,IAAI;QACnC,UAAU,EAAE;YACV,IAAI,EAAE,MAAM,CAAC;YACb,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;YAChB,OAAO,EAAE,MAAM,CAAC;YAChB,QAAQ,EAAE,MAAM,CAAC;YACjB,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC;QACF,aAAa,EAAE;YACb,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC;KACH;
|
|
1
|
+
{"version":3,"file":"DefaultElementProvider.d.ts","sourceRoot":"","sources":["../../src/portfolio/DefaultElementProvider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,eAAO,MAAM,cAAc;;;;;;;;;CASjB,CAAC;AAmBX,MAAM,WAAW,4BAA4B;IAC3C,2EAA2E;IAC3E,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,6DAA6D;IAC7D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,qFAAqF;IACrF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AASD,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAuB;IACnD,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAyC;IAC1E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+B;IAGtD,OAAO,CAAC,MAAM,CAAC,aAAa,CAA8C;IAC1E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAM;gBAEhC,MAAM,CAAC,EAAE,4BAA4B;IAgDjD;;;OAGG;IACH,IAAW,wBAAwB,IAAI,OAAO,CAE7C;IAED;;;OAGG;IACH,IAAW,iBAAiB,IAAI,OAAO,CAEtC;IAED;;;OAGG;IACH,OAAO,KAAK,eAAe,GAwC1B;IAED;;;OAGG;YACW,iBAAiB;IAyC/B;;OAEG;YACW,eAAe;IAS7B;;;;;;;;OAQG;IACH,OAAO,CAAC,gBAAgB;IA8CxB;;;OAGG;IAGH;;;;OAIG;IA+BH;;;;;OAKG;IAMH;;;;;OAKG;IAEH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAM;IAC3C,OAAO,CAAC,MAAM,CAAC,eAAe,CAAsC;IAEpE,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,aAAa;IAYrB;;;;OAIG;WACW,OAAO,IAAI,IAAI;IAsB7B;;;;;OAKG;WACW,mBAAmB,IAAI;QACnC,UAAU,EAAE;YACV,IAAI,EAAE,MAAM,CAAC;YACb,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;YAChB,OAAO,EAAE,MAAM,CAAC;YAChB,QAAQ,EAAE,MAAM,CAAC;YACjB,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC;QACF,aAAa,EAAE;YACb,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC;KACH;IAqBD;;;;;;;;;;;OAWG;YACW,gBAAgB;IA4H9B;;;;;OAKG;YACW,yBAAyB;IAcvC;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IA2D/B;;;OAGG;YACW,gBAAgB;IAuJ9B;;;OAGG;IACH;;;;OAIG;YACW,iBAAiB;IAuB/B;;;;;OAKG;YACW,wBAAwB;IA8EtC;;;;OAIG;IACU,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBtE;;;OAGG;YACW,iBAAiB;CA8FhC"}
|