@pipeline-builder/api-core 5.0.7 → 5.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/types/index.d.ts +1 -1
- package/lib/types/index.js +2 -2
- package/lib/types/plugin-scan.d.ts +91 -0
- package/lib/types/plugin-scan.js +98 -1
- package/lib/types/remote-audit-actions.d.ts +1 -1
- package/lib/types/remote-audit-actions.js +8 -1
- package/lib/validation/plugin-base-images.d.ts +1 -1
- package/lib/validation/plugin-base-images.js +13 -13
- package/package.json +1 -1
package/lib/types/index.d.ts
CHANGED
|
@@ -19,4 +19,4 @@ export { ASK_AGENT_PROPOSER, ASK_PROPOSED_BY_HEADER, PROPOSED_BY_DETAIL_KEY, ask
|
|
|
19
19
|
export { isEcosystemNotificationEvent, parseEcosystemNotifyRequest, nextEcosystemDigestTime, renderEcosystemManagerChange, renderEcosystemDigest, type EcosystemNotificationEventId, type EcosystemNotificationChannel, ECOSYSTEM_EMAIL_PREFERENCE_FIELDS, type EcosystemEmailPreferenceField, ECOSYSTEM_EMAIL_PREFERENCE_FIELD_NAMES, ECOSYSTEM_NOTIFICATION_EVENTS, type EcosystemRecipientSpec, type EcosystemNotifyRequest, } from './ecosystem-notifications.js';
|
|
20
20
|
export { publisherTermsVersion, publisherHandleProblem, isOfficialAutoApprovalEnabled, isPluginPublishingEnabled, isAnonymousSubmissionsEnabled, isPluginReviewsEnabled, OFFICIAL_CATALOG_LOADER_ACCOUNT, DEFAULT_PUBLISHER_TERMS_VERSION, BUILTIN_RESERVED_HANDLES, TENANT_REQUEST_KINDS, PUBLISH_PERMISSION_REQUEST_KINDS, VERIFY_REQUEST_KINDS, STEP_UP_REQUEST_KINDS, REQUEST_SLA_HOURS, } from './ecosystem.js';
|
|
21
21
|
export { ageScore, vulnScore, computeHealthScore, publisherHealthScore, publisherSuccessRate, healthBand, HEALTH_COMPONENTS, HEALTH_WEIGHTS, type HealthBreakdown, type HealthComponentScore, type HealthResult, type HealthInputs, type HealthBand, } from './plugin-health.js';
|
|
22
|
-
export { asScanFlag, blockOnNewCritical, describeFindings, describeFix, exceedsVulnFloor, pluginVulnMaxCritical, SCAN_FLAG_TOP_FINDINGS, vulnBlockedMessage, vulnFlaggedMessage, vulnFlaggedWarning, type PluginScanFinding, type PluginScanFlag, type PluginScanSummary, type VulnFlaggedWarning, } from './plugin-scan.js';
|
|
22
|
+
export { applyVulnWaivers, asScanFlag, blockOnNewCritical, describeFindings, describeFix, exceedsVulnFloor, parseVulnWaivers, parseVulnWaiversVerbose, pluginVulnMaxCritical, SCAN_FLAG_TOP_FINDINGS, vulnBlockedMessage, vulnFlaggedMessage, vulnFlaggedWarning, type PluginScanFinding, type PluginScanFlag, type PluginScanSummary, type VulnFlaggedWarning, type VulnWaiver, type VulnWaiverParse, type VulnWaiverProblem, type WaiverOutcome, } from './plugin-scan.js';
|
package/lib/types/index.js
CHANGED
|
@@ -21,5 +21,5 @@ export { ASK_AGENT_PROPOSER, ASK_PROPOSED_BY_HEADER, PROPOSED_BY_DETAIL_KEY, ask
|
|
|
21
21
|
export { isEcosystemNotificationEvent, parseEcosystemNotifyRequest, nextEcosystemDigestTime, renderEcosystemManagerChange, renderEcosystemDigest, ECOSYSTEM_EMAIL_PREFERENCE_FIELDS, ECOSYSTEM_EMAIL_PREFERENCE_FIELD_NAMES, ECOSYSTEM_NOTIFICATION_EVENTS, } from './ecosystem-notifications.js';
|
|
22
22
|
export { publisherTermsVersion, publisherHandleProblem, isOfficialAutoApprovalEnabled, isPluginPublishingEnabled, isAnonymousSubmissionsEnabled, isPluginReviewsEnabled, OFFICIAL_CATALOG_LOADER_ACCOUNT, DEFAULT_PUBLISHER_TERMS_VERSION, BUILTIN_RESERVED_HANDLES, TENANT_REQUEST_KINDS, PUBLISH_PERMISSION_REQUEST_KINDS, VERIFY_REQUEST_KINDS, STEP_UP_REQUEST_KINDS, REQUEST_SLA_HOURS, } from './ecosystem.js';
|
|
23
23
|
export { ageScore, vulnScore, computeHealthScore, publisherHealthScore, publisherSuccessRate, healthBand, HEALTH_COMPONENTS, HEALTH_WEIGHTS, } from './plugin-health.js';
|
|
24
|
-
export { asScanFlag, blockOnNewCritical, describeFindings, describeFix, exceedsVulnFloor, pluginVulnMaxCritical, SCAN_FLAG_TOP_FINDINGS, vulnBlockedMessage, vulnFlaggedMessage, vulnFlaggedWarning, } from './plugin-scan.js';
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
export { applyVulnWaivers, asScanFlag, blockOnNewCritical, describeFindings, describeFix, exceedsVulnFloor, parseVulnWaivers, parseVulnWaiversVerbose, pluginVulnMaxCritical, SCAN_FLAG_TOP_FINDINGS, vulnBlockedMessage, vulnFlaggedMessage, vulnFlaggedWarning, } from './plugin-scan.js';
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEUsT0FBTyxFQUNMLGdCQUFnQixFQUVoQixZQUFZLEVBTVosaUJBQWlCLEdBTWxCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLE9BQU8sRUFNTixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFFTixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLE9BQU8sRUFBbUMsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RSxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLHVCQUF1QixFQUN2QiwwQkFBMEIsRUFDMUIsaUJBQWlCLEVBRWpCLHFCQUFxQixFQUVyQiwwQkFBMEIsRUFDMUIsZ0JBQWdCLEdBR2pCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUVOLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFDTCxlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxhQUFhLEVBR2IsV0FBVyxFQUNYLFdBQVcsRUFDWCxjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsa0JBQWtCLEdBQ25CLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGlCQUFpQixFQUNqQix5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6QixvQkFBb0IsRUFDcEIsc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUN2QixhQUFhLEVBRWIsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsMkJBQTJCLEVBQzNCLDJCQUEyQixFQUMzQiwwQkFBMEIsRUFDMUIseUJBQXlCLEVBQ3pCLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIsNkJBQTZCLEVBQzdCLHFCQUFxQixHQUN0QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsWUFBWSxFQUdaLG1CQUFtQixHQUNwQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFFTixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsbUJBQW1CLEdBRXBCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsc0JBQXNCLEVBQ3RCLDhCQUE4QixFQUM5QiwrQkFBK0IsRUFDL0IseUJBQXlCLEVBQ3pCLHNCQUFzQixFQUN0QixzQkFBc0IsRUFDdEIsY0FBYyxFQUNkLFdBQVcsRUFDWCxlQUFlLEVBQ2Ysa0JBQWtCLEdBWW5CLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUNMLDRCQUE0QixFQUM1QiwyQkFBMkIsRUFDM0IsdUJBQXVCLEVBQ3ZCLDRCQUE0QixFQUM1QixxQkFBcUIsRUFHckIsaUNBQWlDLEVBRWpDLHNDQUFzQyxFQUN0Qyw2QkFBNkIsR0FHOUIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0Qiw2QkFBNkIsRUFDN0IseUJBQXlCLEVBQ3pCLDZCQUE2QixFQUM3QixzQkFBc0IsRUFDdEIsK0JBQStCLEVBQy9CLCtCQUErQixFQUMvQix3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLGdDQUFnQyxFQUNoQyxvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLGlCQUFpQixHQUNsQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxRQUFRLEVBQ1IsU0FBUyxFQUNULGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsY0FBYyxHQU1mLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixVQUFVLEVBQ1Ysa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGtCQUFrQixHQVNuQixNQUFNLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmV4cG9ydCB7IEVycm9yQ29kZSwgZ2V0U3RhdHVzRm9yRXJyb3JDb2RlIH0gZnJvbSAnLi9lcnJvci1jb2Rlcy5qcyc7XG5leHBvcnQge1xuICBpc1ZhbGlkUXVvdGFUeXBlLFxuICB0eXBlIFRva2VuU2NvcGUsXG4gIFRPS0VOX1NDT1BFUyxcbiAgdHlwZSBQcmluY2lwYWxUeXBlLFxuICB0eXBlIFRva2VuVXNlLFxuICB0eXBlIEF1dGhNZXRob2QsXG4gIHR5cGUgQXNzdXJhbmNlTGV2ZWwsXG4gIHR5cGUgUXVvdGFUeXBlLFxuICBWQUxJRF9RVU9UQV9UWVBFUyxcbiAgdHlwZSBRdW90YUNoZWNrUmVzdWx0LFxuICB0eXBlIFF1b3RhSW5mbyxcbiAgdHlwZSBBcGlSZXNwb25zZSxcbiAgdHlwZSBKd3RQYXlsb2FkLFxuICB0eXBlIEhlYWx0aENoZWNrUmVzcG9uc2UsXG59IGZyb20gJy4vY29tbW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZWxpbmUuanMnO1xuZXhwb3J0IHtcbiAgdHlwZSBMaWZlY3ljbGUsXG4gIHR5cGUgQ3JpdGljYWxpdHksXG4gIHR5cGUgT3duZXJUeXBlLFxuICB0eXBlIEVudGl0eUxpbmssXG4gIHR5cGUgRW50aXR5TGFiZWxzLFxufSBmcm9tICcuL2NhdGFsb2ctbWV0YWRhdGEuanMnO1xuZXhwb3J0IHtcbiAgdHlwZSBUZW1wbGF0ZUlucHV0LFxufSBmcm9tICcuL3BpcGVsaW5lLXRlbXBsYXRlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdmlzaWJpbGl0eS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Jlc2VydmVkLXRhZ3MuanMnO1xuZXhwb3J0ICogZnJvbSAnLi93aXJlLXZvY2FidWxhcnkuanMnO1xuZXhwb3J0IHsgdHlwZSBDb21wbGlhbmNlRXhlbXB0aW9uUmVxdWVzdCB9IGZyb20gJy4vY29tcGxpYW5jZS1leGVtcHRpb24uanMnO1xuZXhwb3J0IHtcbiAgUExVR0lOX1NVTU1BUllfTUFYLFxuICBQTFVHSU5fUkVBRE1FX01BWF9CWVRFUyxcbiAgUExVR0lOX0NIQU5HRUxPR19NQVhfQllURVMsXG4gIFBMVUdJTl9DQVRFR09SSUVTLFxuICB0eXBlIFBsdWdpbkNhdGFsb2dDYXRlZ29yeSxcbiAgUExVR0lOX0NBVEFMT0dfRklFTERTLFxuICB0eXBlIFBsdWdpbkNhdGFsb2dGaWVsZCxcbiAgUExVR0lOX0NBVEFMT0dfTElOS19GSUVMRFMsXG4gIE1FVEFEQVRBX1NPVVJDRVMsXG4gIHR5cGUgTWV0YWRhdGFTb3VyY2UsXG4gIHR5cGUgTWV0YWRhdGFTb3VyY2VzLFxufSBmcm9tICcuL3BsdWdpbi1jYXRhbG9nLmpzJztcbmV4cG9ydCB7XG4gIHR5cGUgSHR0cFJlcXVlc3QsXG59IGZyb20gJy4vaHR0cC5qcyc7XG5leHBvcnQge1xuICB0aWVyQWxsb3dzVGVhbXMsXG4gIGlzQmlsbGluZ0VuYWJsZWQsXG4gIGlzVmFsaWRUaWVyLFxuICBnZXRUaWVyTGltaXRzLFxuICB0eXBlIFF1b3RhVGllcixcbiAgdHlwZSBRdW90YVRpZXJMaW1pdHMsXG4gIFFVT1RBX1RJRVJTLFxuICBWQUxJRF9USUVSUyxcbiAgU1RBTkRBUkRfVElFUlMsXG4gIFRFQU1fQ0FQQUJMRV9USUVSUyxcbiAgREVGQVVMVF9USUVSLFxuICBRVU9UQV9SRVNFVF9EQVlTLFxuICBuZXh0UXVvdGFSZXNldERhdGUsXG59IGZyb20gJy4vcXVvdGEtdGllcnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9mZWF0dXJlLWZsYWdzLmpzJztcbmV4cG9ydCB7XG4gIHBlcm1pc3Npb25MYWJlbCxcbiAgaXNWYWxpZFBlcm1pc3Npb24sXG4gIGlzU3lzdGVtT3JnT25seVBlcm1pc3Npb24sXG4gIGlzT3JnQXNzaWduYWJsZVBlcm1pc3Npb24sXG4gIG5vcm1hbGl6ZVBlcm1pc3Npb25TdWJzZXQsXG4gIGludGVyc2VjdFBlcm1pc3Npb25zLFxuICByZXNvbHZlVXNlclBlcm1pc3Npb25zLFxuICBjb25maW5lUGVybWlzc2lvbnNUb09yZyxcbiAgaGFzUGVybWlzc2lvbixcbiAgdHlwZSBQZXJtaXNzaW9uLFxuICBBTExfUEVSTUlTU0lPTlMsXG4gIFBFUk1JU1NJT05fR0FURVMsXG4gIFBFUk1JU1NJT05fQ0FUQUxPRyxcbiAgU1VQRVJBRE1JTl9PTkxZX1BFUk1JU1NJT05TLFxuICBTWVNURU1fT1JHX09OTFlfUEVSTUlTU0lPTlMsXG4gIE9SR19BU1NJR05BQkxFX1BFUk1JU1NJT05TLFxuICBPUkdfQVNTSUdOQUJMRV9DQVRFR09SSUVTLFxuICBSRUFEX09OTFlfUEVSTUlTU0lPTlMsXG4gIFJPTEVfUEVSTUlTU0lPTlMsXG4gIEVDT1NZU1RFTV9NQU5BR0VSX1BFUk1JU1NJT05TLFxuICBURUFNX0xFQURfUEVSTUlTU0lPTlMsXG59IGZyb20gJy4vcGVybWlzc2lvbnMuanMnO1xuZXhwb3J0IHtcbiAgTUVUQURBVEFfS0VZX0NBVEFMT0csXG4gIE1ldGFkYXRhS2V5cyxcbiAgdHlwZSBNZXRhZGF0YUtleSxcbiAgdHlwZSBNZXRhZGF0YUtleU9wdGlvbixcbiAgTUVUQURBVEFfS0VZX0dST1VQUyxcbn0gZnJvbSAnLi9tZXRhZGF0YS1rZXlzLmpzJztcbmV4cG9ydCB7XG4gIHR5cGUgQXVkaXRFdmVudCxcbn0gZnJvbSAnLi9hdWRpdC1ldmVudHMuanMnO1xuZXhwb3J0IHtcbiAgUkVNT1RFX0FVRElUX0FDVElPTlMsXG4gIGlzUmVtb3RlQXVkaXRBY3Rpb24sXG4gIHR5cGUgUmVtb3RlQXVkaXRBY3Rpb24sXG59IGZyb20gJy4vcmVtb3RlLWF1ZGl0LWFjdGlvbnMuanMnO1xuZXhwb3J0IHtcbiAgQVNLX0FHRU5UX1BST1BPU0VSLFxuICBBU0tfUFJPUE9TRURfQllfSEVBREVSLFxuICBQUk9QT1NFRF9CWV9ERVRBSUxfS0VZLFxuICBhc2tQcm9wb3NhbEF1ZGl0RGV0YWlscyxcbiAgcmVhZFByb3Bvc2VyQ2xhaW0sXG4gIHdpdGhQcm9wb3NhbFByb3ZlbmFuY2UsXG4gIE9SR19TRVRUSU5HX1BST1BPU0FMX0FMTE9XTElTVCxcbiAgT1JHX1NFVFRJTkdfUFJPUE9TQUxfRVhDTFVTSU9OUyxcbiAgT1JHX1NFVFRJTkdfUFJPUE9TQUxfS0VZUyxcbiAgaXNQcm9wb3NhYmxlT3JnU2V0dGluZyxcbiAgaXNWYWxpZE9yZ1NldHRpbmdWYWx1ZSxcbiAgb3JnU2V0dGluZ1NwZWMsXG4gIHBpY2tBbGxvd2VkLFxuICBkaWZmT3JnU2V0dGluZ3MsXG4gIG9yZ1NldHRpbmdSZXF1ZXN0cyxcbiAgdHlwZSBBc2tQcm9wb3NhbFByb3ZlbmFuY2UsXG4gIHR5cGUgUHJvcG9zZXJDbGFpbSxcbiAgdHlwZSBPcmdTZXR0aW5nQ2hhbmdlLFxuICB0eXBlIE9yZ1NldHRpbmdLZXksXG4gIHR5cGUgT3JnU2V0dGluZ1BhdGNoLFxuICB0eXBlIE9yZ1NldHRpbmdSZXF1ZXN0LFxuICB0eXBlIE9yZ1NldHRpbmdTaGFwZSxcbiAgdHlwZSBPcmdTZXR0aW5nU3BlYyxcbiAgdHlwZSBPcmdTZXR0aW5nU3VyZmFjZSxcbiAgdHlwZSBPcmdTZXR0aW5nVmFsdWUsXG4gIHR5cGUgUGlja0FsbG93ZWRSZXN1bHQsXG59IGZyb20gJy4vYXNrLXByb3Bvc2Fscy5qcyc7XG5leHBvcnQge1xuICBpc0Vjb3N5c3RlbU5vdGlmaWNhdGlvbkV2ZW50LFxuICBwYXJzZUVjb3N5c3RlbU5vdGlmeVJlcXVlc3QsXG4gIG5leHRFY29zeXN0ZW1EaWdlc3RUaW1lLFxuICByZW5kZXJFY29zeXN0ZW1NYW5hZ2VyQ2hhbmdlLFxuICByZW5kZXJFY29zeXN0ZW1EaWdlc3QsXG4gIHR5cGUgRWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnRJZCxcbiAgdHlwZSBFY29zeXN0ZW1Ob3RpZmljYXRpb25DaGFubmVsLFxuICBFQ09TWVNURU1fRU1BSUxfUFJFRkVSRU5DRV9GSUVMRFMsXG4gIHR5cGUgRWNvc3lzdGVtRW1haWxQcmVmZXJlbmNlRmllbGQsXG4gIEVDT1NZU1RFTV9FTUFJTF9QUkVGRVJFTkNFX0ZJRUxEX05BTUVTLFxuICBFQ09TWVNURU1fTk9USUZJQ0FUSU9OX0VWRU5UUyxcbiAgdHlwZSBFY29zeXN0ZW1SZWNpcGllbnRTcGVjLFxuICB0eXBlIEVjb3N5c3RlbU5vdGlmeVJlcXVlc3QsXG59IGZyb20gJy4vZWNvc3lzdGVtLW5vdGlmaWNhdGlvbnMuanMnO1xuZXhwb3J0IHtcbiAgcHVibGlzaGVyVGVybXNWZXJzaW9uLFxuICBwdWJsaXNoZXJIYW5kbGVQcm9ibGVtLFxuICBpc09mZmljaWFsQXV0b0FwcHJvdmFsRW5hYmxlZCxcbiAgaXNQbHVnaW5QdWJsaXNoaW5nRW5hYmxlZCxcbiAgaXNBbm9ueW1vdXNTdWJtaXNzaW9uc0VuYWJsZWQsXG4gIGlzUGx1Z2luUmV2aWV3c0VuYWJsZWQsXG4gIE9GRklDSUFMX0NBVEFMT0dfTE9BREVSX0FDQ09VTlQsXG4gIERFRkFVTFRfUFVCTElTSEVSX1RFUk1TX1ZFUlNJT04sXG4gIEJVSUxUSU5fUkVTRVJWRURfSEFORExFUyxcbiAgVEVOQU5UX1JFUVVFU1RfS0lORFMsXG4gIFBVQkxJU0hfUEVSTUlTU0lPTl9SRVFVRVNUX0tJTkRTLFxuICBWRVJJRllfUkVRVUVTVF9LSU5EUyxcbiAgU1RFUF9VUF9SRVFVRVNUX0tJTkRTLFxuICBSRVFVRVNUX1NMQV9IT1VSUyxcbn0gZnJvbSAnLi9lY29zeXN0ZW0uanMnO1xuZXhwb3J0IHtcbiAgYWdlU2NvcmUsXG4gIHZ1bG5TY29yZSxcbiAgY29tcHV0ZUhlYWx0aFNjb3JlLFxuICBwdWJsaXNoZXJIZWFsdGhTY29yZSxcbiAgcHVibGlzaGVyU3VjY2Vzc1JhdGUsXG4gIGhlYWx0aEJhbmQsXG4gIEhFQUxUSF9DT01QT05FTlRTLFxuICBIRUFMVEhfV0VJR0hUUyxcbiAgdHlwZSBIZWFsdGhCcmVha2Rvd24sXG4gIHR5cGUgSGVhbHRoQ29tcG9uZW50U2NvcmUsXG4gIHR5cGUgSGVhbHRoUmVzdWx0LFxuICB0eXBlIEhlYWx0aElucHV0cyxcbiAgdHlwZSBIZWFsdGhCYW5kLFxufSBmcm9tICcuL3BsdWdpbi1oZWFsdGguanMnO1xuZXhwb3J0IHtcbiAgYXBwbHlWdWxuV2FpdmVycyxcbiAgYXNTY2FuRmxhZyxcbiAgYmxvY2tPbk5ld0NyaXRpY2FsLFxuICBkZXNjcmliZUZpbmRpbmdzLFxuICBkZXNjcmliZUZpeCxcbiAgZXhjZWVkc1Z1bG5GbG9vcixcbiAgcGFyc2VWdWxuV2FpdmVycyxcbiAgcGFyc2VWdWxuV2FpdmVyc1ZlcmJvc2UsXG4gIHBsdWdpblZ1bG5NYXhDcml0aWNhbCxcbiAgU0NBTl9GTEFHX1RPUF9GSU5ESU5HUyxcbiAgdnVsbkJsb2NrZWRNZXNzYWdlLFxuICB2dWxuRmxhZ2dlZE1lc3NhZ2UsXG4gIHZ1bG5GbGFnZ2VkV2FybmluZyxcbiAgdHlwZSBQbHVnaW5TY2FuRmluZGluZyxcbiAgdHlwZSBQbHVnaW5TY2FuRmxhZyxcbiAgdHlwZSBQbHVnaW5TY2FuU3VtbWFyeSxcbiAgdHlwZSBWdWxuRmxhZ2dlZFdhcm5pbmcsXG4gIHR5cGUgVnVsbldhaXZlcixcbiAgdHlwZSBWdWxuV2FpdmVyUGFyc2UsXG4gIHR5cGUgVnVsbldhaXZlclByb2JsZW0sXG4gIHR5cGUgV2FpdmVyT3V0Y29tZSxcbn0gZnJvbSAnLi9wbHVnaW4tc2Nhbi5qcyc7XG4iXX0=
|
|
@@ -60,6 +60,97 @@ export declare const VULN_FLAGGED_WARNING = "VULN_FLAGGED";
|
|
|
60
60
|
* flagged by the rescan. Default `0`; `-1` disables the floor (and the flag).
|
|
61
61
|
*/
|
|
62
62
|
export declare function pluginVulnMaxCritical(): number;
|
|
63
|
+
/**
|
|
64
|
+
* A scoped, EXPIRING exemption from the vulnerability floor for one plugin.
|
|
65
|
+
*
|
|
66
|
+
* `PLUGIN_VULN_MAX_CRITICAL` is the only other lever and it is far too blunt:
|
|
67
|
+
* raising it above 0 exempts every plugin from every Critical. Some images
|
|
68
|
+
* genuinely cannot reach zero — a browser-bundling test runner (artillery ships
|
|
69
|
+
* Chromium through its own @playwright/browser-chromium dependency, playwright
|
|
70
|
+
* downloads Firefox) is at upstream's latest and still carries fixable findings,
|
|
71
|
+
* because browsers ship CVE fixes weekly while pinned builds lag by design.
|
|
72
|
+
* Without a narrow exemption the only options are "block the plugin forever" or
|
|
73
|
+
* "disable the floor for everything".
|
|
74
|
+
*
|
|
75
|
+
* Three properties make this an exemption rather than a hole, and all three are
|
|
76
|
+
* enforced below rather than documented and hoped for:
|
|
77
|
+
*
|
|
78
|
+
* SCOPED to one plugin, to named packages, AND to the system org. A new
|
|
79
|
+
* Critical in any other package still fails the gate, so a waiver
|
|
80
|
+
* cannot grow silently into "this plugin is exempt". The org bound
|
|
81
|
+
* matters because plugin names are unique per (name, version,
|
|
82
|
+
* orgId) and NOT globally: without it, any tenant could inherit an
|
|
83
|
+
* exemption by naming their plugin `artillery`.
|
|
84
|
+
* EXPIRING every entry carries a date and stops applying after it. A waiver
|
|
85
|
+
* nobody revisits becomes permanent; this one lapses on its own and
|
|
86
|
+
* the plugin starts failing again, which is the intended prompt.
|
|
87
|
+
* VISIBLE what was waived is returned to the caller, so it reaches the
|
|
88
|
+
* metric, the audit record and the build message instead of
|
|
89
|
+
* vanishing from the count.
|
|
90
|
+
*
|
|
91
|
+
* Format — entries `;`-separated, fields `:`-separated, packages `,`-separated:
|
|
92
|
+
*
|
|
93
|
+
* PLUGIN_VULN_WAIVERS=artillery:2026-12-31:chromium,chrome;playwright:2026-12-31:firefox
|
|
94
|
+
*
|
|
95
|
+
* A malformed entry is DROPPED, never treated as a wildcard: the failure mode
|
|
96
|
+
* of a typo must be "the gate still blocks", not "everything is waived".
|
|
97
|
+
*/
|
|
98
|
+
export interface VulnWaiver {
|
|
99
|
+
/** Plugin name the waiver applies to (exact match). */
|
|
100
|
+
plugin: string;
|
|
101
|
+
/**
|
|
102
|
+
* Plugin version the waiver is limited to, or null for every version.
|
|
103
|
+
*
|
|
104
|
+
* A waiver is a judgement about a SPECIFIC image — "this release of artillery
|
|
105
|
+
* bundles a Chromium we cannot patch". Left unpinned it silently carries to
|
|
106
|
+
* every future version, including ones whose findings nobody has looked at,
|
|
107
|
+
* which is how a narrow exemption becomes a standing one.
|
|
108
|
+
*/
|
|
109
|
+
version: string | null;
|
|
110
|
+
/** Inclusive expiry (UTC date). After it the entry has no effect. */
|
|
111
|
+
expires: Date;
|
|
112
|
+
/** Package names whose findings are exempt. Never empty — see parseVulnWaivers. */
|
|
113
|
+
packages: string[];
|
|
114
|
+
}
|
|
115
|
+
/** A dropped entry and why, so the operator can be told instead of guessing. */
|
|
116
|
+
export interface VulnWaiverProblem {
|
|
117
|
+
entry: string;
|
|
118
|
+
reason: string;
|
|
119
|
+
}
|
|
120
|
+
/** Parsed waivers plus the entries that were rejected. */
|
|
121
|
+
export interface VulnWaiverParse {
|
|
122
|
+
waivers: VulnWaiver[];
|
|
123
|
+
problems: VulnWaiverProblem[];
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Parse `PLUGIN_VULN_WAIVERS`, REPORTING what was dropped.
|
|
127
|
+
*
|
|
128
|
+
* Dropping a malformed entry is the safe direction — a typo must not become a
|
|
129
|
+
* wildcard — but silently dropping it is a usability trap: the operator sets a
|
|
130
|
+
* waiver, the gate keeps blocking, and nothing anywhere says why. Callers that
|
|
131
|
+
* can surface it (service boot) use this; `parseVulnWaivers` is the shorthand
|
|
132
|
+
* for the ones that cannot.
|
|
133
|
+
*
|
|
134
|
+
* Entry grammar: `<plugin>[@<version>]:<YYYY-MM-DD>:<pkg>[,<pkg>…]`
|
|
135
|
+
*/
|
|
136
|
+
export declare function parseVulnWaiversVerbose(raw?: string | undefined): VulnWaiverParse;
|
|
137
|
+
/** Parse `PLUGIN_VULN_WAIVERS`. Malformed or incomplete entries are dropped. */
|
|
138
|
+
export declare function parseVulnWaivers(raw?: string | undefined): VulnWaiver[];
|
|
139
|
+
/** What a waiver removed from the count, and what still counts. */
|
|
140
|
+
export interface WaiverOutcome {
|
|
141
|
+
/** Findings the floor still counts. */
|
|
142
|
+
counted: PluginScanFinding[];
|
|
143
|
+
/** Findings an unexpired waiver exempted (empty when none applied). */
|
|
144
|
+
waived: PluginScanFinding[];
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Split findings into what still counts and what an unexpired waiver exempts.
|
|
148
|
+
*
|
|
149
|
+
* Matching is on the package name a waiver names, case-insensitively, and only
|
|
150
|
+
* for findings that are FIXABLE — an unfixable finding never counted toward the
|
|
151
|
+
* floor, so "waiving" it would overstate what the waiver does.
|
|
152
|
+
*/
|
|
153
|
+
export declare function applyVulnWaivers(pluginName: string, findings: readonly PluginScanFinding[], waivers?: readonly VulnWaiver[], now?: Date, orgId?: string, pluginVersion?: string): WaiverOutcome;
|
|
63
154
|
/** Whether `fixableCritical` breaks the platform floor (never, when disabled). */
|
|
64
155
|
export declare function exceedsVulnFloor(fixableCritical: number | null | undefined, max?: number): boolean;
|
|
65
156
|
/**
|
package/lib/types/plugin-scan.js
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* count fixable Critical findings only, because an unfixable one can't be
|
|
13
13
|
* acted on by rebuilding or upgrading.
|
|
14
14
|
*/
|
|
15
|
+
import { SYSTEM_ORG_ID } from '../middleware/system-org.js';
|
|
15
16
|
import { envBool, envInt } from '../utils/env.js';
|
|
16
17
|
/** Findings a flag / gate message carries. */
|
|
17
18
|
export const SCAN_FLAG_TOP_FINDINGS = 10;
|
|
@@ -25,6 +26,102 @@ export const VULN_FLAGGED_WARNING = 'VULN_FLAGGED';
|
|
|
25
26
|
export function pluginVulnMaxCritical() {
|
|
26
27
|
return envInt('PLUGIN_VULN_MAX_CRITICAL', 0, { min: -1 });
|
|
27
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Parse `PLUGIN_VULN_WAIVERS`, REPORTING what was dropped.
|
|
31
|
+
*
|
|
32
|
+
* Dropping a malformed entry is the safe direction — a typo must not become a
|
|
33
|
+
* wildcard — but silently dropping it is a usability trap: the operator sets a
|
|
34
|
+
* waiver, the gate keeps blocking, and nothing anywhere says why. Callers that
|
|
35
|
+
* can surface it (service boot) use this; `parseVulnWaivers` is the shorthand
|
|
36
|
+
* for the ones that cannot.
|
|
37
|
+
*
|
|
38
|
+
* Entry grammar: `<plugin>[@<version>]:<YYYY-MM-DD>:<pkg>[,<pkg>…]`
|
|
39
|
+
*/
|
|
40
|
+
export function parseVulnWaiversVerbose(raw = process.env.PLUGIN_VULN_WAIVERS) {
|
|
41
|
+
const waivers = [];
|
|
42
|
+
const problems = [];
|
|
43
|
+
if (!raw?.trim())
|
|
44
|
+
return { waivers, problems };
|
|
45
|
+
const reject = (entry, reason) => { problems.push({ entry: entry.trim(), reason }); };
|
|
46
|
+
for (const entry of raw.split(';')) {
|
|
47
|
+
if (!entry.trim())
|
|
48
|
+
continue;
|
|
49
|
+
const [target, expires, packages] = entry.split(':').map((f) => f?.trim() ?? '');
|
|
50
|
+
// Every field is REQUIRED. An entry missing its package list would
|
|
51
|
+
// otherwise read as "waive this plugin entirely", which is the one thing
|
|
52
|
+
// this must not be able to express.
|
|
53
|
+
if (!target || !expires || !packages) {
|
|
54
|
+
reject(entry, 'expected <plugin>[@<version>]:<YYYY-MM-DD>:<package>[,<package>…]');
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
const at = target.indexOf('@');
|
|
58
|
+
const plugin = at === -1 ? target : target.slice(0, at).trim();
|
|
59
|
+
const version = at === -1 ? null : target.slice(at + 1).trim();
|
|
60
|
+
if (!plugin) {
|
|
61
|
+
reject(entry, 'no plugin name');
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (at !== -1 && !version) {
|
|
65
|
+
reject(entry, "'@' with no version — omit it to cover every version");
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (!/^\d{4}-\d{2}-\d{2}$/.test(expires)) {
|
|
69
|
+
reject(entry, `expiry '${expires}' is not YYYY-MM-DD`);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
const when = new Date(`${expires}T23:59:59.999Z`);
|
|
73
|
+
if (Number.isNaN(when.getTime())) {
|
|
74
|
+
reject(entry, `expiry '${expires}' is not a real date`);
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const names = packages.split(',').map((n) => n.trim()).filter(Boolean);
|
|
78
|
+
if (names.length === 0) {
|
|
79
|
+
reject(entry, 'no package names');
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
waivers.push({ plugin, version, expires: when, packages: names });
|
|
83
|
+
}
|
|
84
|
+
return { waivers, problems };
|
|
85
|
+
}
|
|
86
|
+
/** Parse `PLUGIN_VULN_WAIVERS`. Malformed or incomplete entries are dropped. */
|
|
87
|
+
export function parseVulnWaivers(raw = process.env.PLUGIN_VULN_WAIVERS) {
|
|
88
|
+
return parseVulnWaiversVerbose(raw).waivers;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Split findings into what still counts and what an unexpired waiver exempts.
|
|
92
|
+
*
|
|
93
|
+
* Matching is on the package name a waiver names, case-insensitively, and only
|
|
94
|
+
* for findings that are FIXABLE — an unfixable finding never counted toward the
|
|
95
|
+
* floor, so "waiving" it would overstate what the waiver does.
|
|
96
|
+
*/
|
|
97
|
+
export function applyVulnWaivers(pluginName, findings, waivers = parseVulnWaivers(), now = new Date(), orgId, pluginVersion) {
|
|
98
|
+
// SYSTEM ORG ONLY. Plugin names are unique per (name, version, orgId), NOT
|
|
99
|
+
// globally — any tenant can create a plugin called `artillery`. Matching on
|
|
100
|
+
// the name alone would hand every one of them the operator's exemption, so a
|
|
101
|
+
// tenant could inherit a waiver simply by choosing the name, and ship an
|
|
102
|
+
// image whose Criticals the gate then waved through. The waivers exist for the
|
|
103
|
+
// Official catalog the operator curates, which lives in the system org; a
|
|
104
|
+
// caller that cannot say which org this build belongs to gets no waiver.
|
|
105
|
+
if (orgId === undefined || orgId.toLowerCase() !== SYSTEM_ORG_ID)
|
|
106
|
+
return { counted: [...findings], waived: [] };
|
|
107
|
+
const active = waivers.filter((w) => w.plugin === pluginName
|
|
108
|
+
&& w.expires.getTime() >= now.getTime()
|
|
109
|
+
// A version-pinned waiver covers that version only. An unpinned one covers
|
|
110
|
+
// every version, which is why the pin is worth writing.
|
|
111
|
+
&& (w.version === null || w.version === pluginVersion));
|
|
112
|
+
if (active.length === 0)
|
|
113
|
+
return { counted: [...findings], waived: [] };
|
|
114
|
+
const exempt = new Set(active.flatMap((w) => w.packages.map((n) => n.toLowerCase())));
|
|
115
|
+
const counted = [];
|
|
116
|
+
const waived = [];
|
|
117
|
+
for (const f of findings) {
|
|
118
|
+
if (f.fixedIn.length > 0 && exempt.has(f.packageName.toLowerCase()))
|
|
119
|
+
waived.push(f);
|
|
120
|
+
else
|
|
121
|
+
counted.push(f);
|
|
122
|
+
}
|
|
123
|
+
return { counted, waived };
|
|
124
|
+
}
|
|
28
125
|
/** Whether `fixableCritical` breaks the platform floor (never, when disabled). */
|
|
29
126
|
export function exceedsVulnFloor(fixableCritical, max = pluginVulnMaxCritical()) {
|
|
30
127
|
return max >= 0 && (fixableCritical ?? 0) > max;
|
|
@@ -87,4 +184,4 @@ export function asScanFlag(value) {
|
|
|
87
184
|
findings: findings.map((f) => ({ ...f, fixedIn: Array.isArray(f.fixedIn) ? f.fixedIn : [] })),
|
|
88
185
|
};
|
|
89
186
|
}
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXNjYW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcGx1Z2luLXNjYW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7R0FXRztBQUVILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUF5RGxELDhDQUE4QztBQUM5QyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7QUFFekMsOERBQThEO0FBQzlELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGNBQWMsQ0FBQztBQUVuRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQjtJQUNuQyxPQUFPLE1BQU0sQ0FBQywwQkFBMEIsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVELENBQUM7QUFFRCxrRkFBa0Y7QUFDbEYsTUFBTSxVQUFVLGdCQUFnQixDQUFDLGVBQTBDLEVBQUUsR0FBRyxHQUFXLHFCQUFxQixFQUFFO0lBQ2hILE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEQsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsT0FBTyxPQUFPLENBQUMsOEJBQThCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUVELGtEQUFrRDtBQUNsRCxNQUFNLFVBQVUsV0FBVyxDQUFDLENBQXdFO0lBQ2xHLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDL0UsT0FBTyxD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Q0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBQyxDQUFDLFFBQWdDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbkksT0FBTztRQUNMLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUTtRQUNwQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7UUFDWixXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsV0FBVyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRSxRQUFRLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUM5RixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFBsdWdpbiBpbWFnZSBzY2FuIGdhdGVzIChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kIFwiU2NhbiBnYXRlc1wiKTogdGhlIHNoYXJlZFxuICogdm9jYWJ1bGFyeSBvZiB0aGUgYnVpbGQtdGltZSBnYXRlLCB0aGUgbmlnaHRseSByZXNjYW4ncyBmbGFnLCBhbmQgdGhlXG4gKiByZXNvbHV0aW9uIHdhcm5pbmcgLyBibG9jayDigJQgdXNlZCBieSB0aGUgcGx1Z2luIHNlcnZpY2UgKHdoaWNoIHN0b3JlcyBhbmRcbiAqIGVuZm9yY2VzIHRoZW0pLCB0aGUgcmVzb2x2ZXIgaW4gcGlwZWxpbmUtZGF0YSAod2hpY2ggc2tpcHMgb3Igd2FybnMpLCBhbmQgdGhlXG4gKiBkYXNoYm9hcmQgKHdoaWNoIHNob3dzIHRoZW0pLlxuICpcbiAqIEEgZmluZGluZyBpcyBGSVhBQkxFIHdoZW4gZ3J5cGUgcmVwb3J0cyBhIGZpeGVkIHZlcnNpb24gZm9yIGl0XG4gKiAoYHZ1bG5lcmFiaWxpdHkuZml4LnN0YXRlID09IFwiZml4ZWRcImAgd2l0aCBhdCBsZWFzdCBvbmUgdmVyc2lvbik6IHRoZSBnYXRlc1xuICogY291bnQgZml4YWJsZSBDcml0aWNhbCBmaW5kaW5ncyBvbmx5LCBiZWNhdXNlIGFuIHVuZml4YWJsZSBvbmUgY2FuJ3QgYmVcbiAqIGFjdGVkIG9uIGJ5IHJlYnVpbGRpbmcgb3IgdXBncmFkaW5nLlxuICovXG5cbmltcG9ydCB7IGVudkJvb2wsIGVudkludCB9IGZyb20gJy4uL3V0aWxzL2Vudi5qcyc7XG5cbi8qKiBPbmUgQ3JpdGljYWwvSGlnaCBmaW5kaW5nIGFzIHRoZSBmbGFnIGFuZCB0aGUgZ2F0ZSBtZXNzYWdlcyBjYXJyeSBpdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luU2NhbkZpbmRpbmcge1xuICAvKiogVGhlIHZ1bG5lcmFiaWxpdHkgaWQgKENWRS3igKYsIEdIU0Et4oCmKS4gKi9cbiAgaWQ6IHN0cmluZztcbiAgc2V2ZXJpdHk6ICdjcml0aWNhbCcgfCAnaGlnaCc7XG4gIHBhY2thZ2VOYW1lOiBzdHJpbmc7XG4gIHBhY2thZ2VWZXJzaW9uOiBzdHJpbmc7XG4gIC8qKiBWZXJzaW9ucyB0aGF0IGZpeCBpdDsgZW1wdHkgPSBubyBmaXggYXZhaWxhYmxlIChub3QgZml4YWJsZSkuICovXG4gIGZpeGVkSW46IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIGBzY2FuX2ZsYWdgIG9uIGEgdmVyc2lvbiB0aGUgbmlnaHRseSByZXNjYW4gZmxhZ2dlZDogaXRzIGZpeGFibGVcbiAqIENyaXRpY2FsL0hpZ2ggY291bnRzIGF0IHRoYXQgcmVzY2FuIGFuZCB0aGUgdG9wIGZpeGFibGUgZmluZGluZ3MuIFNldCB3aGlsZVxuICogZml4YWJsZSBDcml0aWNhbHMgZXhjZWVkIGBQTFVHSU5fVlVMTl9NQVhfQ1JJVElDQUxgLCBjbGVhcmVkIHdoZW4gYSByZXNjYW5cbiAqIGZpbmRzIHRoZW0gcmVzb2x2ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luU2NhbkZsYWcge1xuICAvKiogRml4YWJsZSBDcml0aWNhbCBmaW5kaW5ncy4gKi9cbiAgY3JpdGljYWw6IG51bWJlcjtcbiAgLyoqIEZpeGFibGUgSGlnaCBmaW5kaW5ncy4gKi9cbiAgaGlnaDogbnVtYmVyO1xuICAvKiogVGhlIGZsb29yIGl0IHdhcyBjb21wYXJlZCBhZ2FpbnN0IChgUExVR0lOX1ZVTE5fTUFYX0NSSVRJQ0FMYCkuICovXG4gIG1heENyaXRpY2FsOiBudW1iZXI7XG4gIC8qKiBBdCBtb3N0IHtAbGluayBTQ0FOX0ZMQUdfVE9QX0ZJTkRJTkdTfSBmaXhhYmxlIGZpbmRpbmdzLCBDcml0aWNhbHMgZmlyc3QuICovXG4gIGZpbmRpbmdzOiBQbHVnaW5TY2FuRmluZGluZ1tdO1xufVxuXG4vKipcbiAqIGBzY2FuX3N1bW1hcnlgIG9uIGV2ZXJ5IGluLXVzZSB2ZXJzaW9uOiB0aGUgTEFTVCByZXNjYW4ncyBmaW5kaW5ncywgd3JpdHRlblxuICogd2hldGhlciBvciBub3QgdGhlIGdhdGUgdHJpcHBlZC5cbiAqXG4gKiBEaXN0aW5jdCBmcm9tIHtAbGluayBQbHVnaW5TY2FuRmxhZ30sIHdoaWNoIGV4aXN0cyBvbmx5IHdoaWxlIGEgdmVyc2lvbiBpcyBvdmVyXG4gKiB0aGUgZmxvb3IuIEEgdmVyc2lvbiBjYXJyeWluZyBub3RoaW5nIGJ1dCBIaWdoIGZpbmRpbmdzIGlzIG5ldmVyIGZsYWdnZWQg4oCUIHNvIGFcbiAqIHJlcG9ydCB3aG9zZSBqb2IgaXMgdG8gc2hvdyBDcml0aWNhbCBBTkQgSGlnaCBleHBvc3VyZSBoYWQgbm8gc291cmNlIHRvIHJlYWQuXG4gKiBXaGF0IGEgcmVwb3J0IFNIT1dTIGFuZCB3aGF0IGEgYnVpbGQgUkVGVVNFUyBhcmUgZGlmZmVyZW50IHF1ZXN0aW9ucywgYW5kXG4gKiBjb25mbGF0aW5nIHRoZW0gbWVhbnQgdGhlIGFuc3dlciB0byB0aGUgZmlyc3Qgd2FzIFwibm90aGluZ1wiLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblNjYW5TdW1tYXJ5IHtcbiAgLyoqIEZpeGFibGUgQ3JpdGljYWwgZmluZGluZ3MgYXQgdGhlIGxhc3QgcmVzY2FuLiAqL1xuICBjcml0aWNhbEZpeGFibGU6IG51bWJlcjtcbiAgLyoqIEZpeGFibGUgSGlnaCBmaW5kaW5ncyBhdCB0aGUgbGFzdCByZXNjYW4uICovXG4gIGhpZ2hGaXhhYmxlOiBudW1iZXI7XG4gIC8qKiBUb3RhbHMgaW5jbHVkaW5nIHVuZml4YWJsZSBmaW5kaW5ncywgZm9yIGNvbnRleHQuICovXG4gIGNyaXRpY2FsOiBudW1iZXI7XG4gIGhpZ2g6IG51bWJlcjtcbiAgLyoqIEF0IG1vc3Qge0BsaW5rIFNDQU5fRkxBR19UT1BfRklORElOR1N9IGZpbmRpbmdzLCBDcml0aWNhbHMgZmlyc3QuICovXG4gIGZpbmRpbmdzOiBQbHVnaW5TY2FuRmluZGluZ1tdO1xuICAvKiogV2hlbiB0aGUgcmVzY2FuIHRoYXQgcHJvZHVjZWQgdGhpcyByYW4gKElTTykuICovXG4gIHNjYW5uZWRBdDogc3RyaW5nO1xuICAvKiogVGhlIGltYWdlIHRoaXMgZGVzY3JpYmVzLiBBIHZlcnNpb24gcmVidWlsdCBvbiBhIHBhdGNoZWQgYmFzZSBpcyBhXG4gICAqICBkaWZmZXJlbnQgYXJ0aWZhY3QsIHNvIGEgc3VtbWFyeSB3aXRob3V0IGl0cyBkaWdlc3QgY2Fubm90IGJlIHRydXN0ZWQuICovXG4gIGltYWdlRGlnZXN0Pzogc3RyaW5nO1xufVxuXG4vKiogRmluZGluZ3MgYSBmbGFnIC8gZ2F0ZSBtZXNzYWdlIGNhcnJpZXMuICovXG5leHBvcnQgY29uc3QgU0NBTl9GTEFHX1RPUF9GSU5ESU5HUyA9IDEwO1xuXG4vKiogTG9va3VwIC8gcmVzb2x1dGlvbiB3YXJuaW5nIGNvZGUgZm9yIGEgZmxhZ2dlZCB2ZXJzaW9uLiAqL1xuZXhwb3J0IGNvbnN0IFZVTE5fRkxBR0dFRF9XQVJOSU5HID0gJ1ZVTE5fRkxBR0dFRCc7XG5cbi8qKlxuICogYFBMVUdJTl9WVUxOX01BWF9DUklUSUNBTGA6IHRoZSBwbGF0Zm9ybSBmbG9vciDigJQgYSB2ZXJzaW9uIHdpdGggTU9SRSBmaXhhYmxlXG4gKiBDcml0aWNhbCBmaW5kaW5ncyB0aGFuIHRoaXMgZmFpbHMgaXRzIGJ1aWxkIChgUExVR0lOX1ZVTE5fR0FURWApIGFuZCBpc1xuICogZmxhZ2dlZCBieSB0aGUgcmVzY2FuLiBEZWZhdWx0IGAwYDsgYC0xYCBkaXNhYmxlcyB0aGUgZmxvb3IgKGFuZCB0aGUgZmxhZykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwbHVnaW5WdWxuTWF4Q3JpdGljYWwoKTogbnVtYmVyIHtcbiAgcmV0dXJuIGVudkludCgnUExVR0lOX1ZVTE5fTUFYX0NSSVRJQ0FMJywgMCwgeyBtaW46IC0xIH0pO1xufVxuXG4vKiogV2hldGhlciBgZml4YWJsZUNyaXRpY2FsYCBicmVha3MgdGhlIHBsYXRmb3JtIGZsb29yIChuZXZlciwgd2hlbiBkaXNhYmxlZCkuICovXG5leHBvcnQgZnVuY3Rpb24gZXhjZWVkc1Z1bG5GbG9vcihmaXhhYmxlQ3JpdGljYWw6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIG1heDogbnVtYmVyID0gcGx1Z2luVnVsbk1heENyaXRpY2FsKCkpOiBib29sZWFuIHtcbiAgcmV0dXJuIG1heCA+PSAwICYmIChmaXhhYmxlQ3JpdGljYWwgPz8gMCkgPiBtYXg7XG59XG5cbi8qKlxuICogYFBMVUdJTl9CTE9DS19PTl9ORVdfQ1JJVElDQUxgIChkZWZhdWx0IGZhbHNlKTogcmVzb2x1dGlvbiBTS0lQUyBmbGFnZ2VkXG4gKiB2ZXJzaW9ucyBmb3IgcmFuZ2VzIGFuZCB0aGUgZGVmYXVsdCAoZmFsbGluZyBiYWNrIHRvIHRoZSBuZXdlc3QgdW5mbGFnZ2VkXG4gKiBvbmUpLCBhbmQgYW4gZXhhY3QgcGluIHRvIGEgZmxhZ2dlZCB2ZXJzaW9uIGlzIHJlZnVzZWQgNDA5XG4gKiBgUExVR0lOX1ZFUlNJT05fVlVMTl9CTE9DS0VEYC4gT2ZmOiBmbGFnZ2VkIHZlcnNpb25zIHJlc29sdmUgd2l0aCBhXG4gKiBgVlVMTl9GTEFHR0VEYCB3YXJuaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYmxvY2tPbk5ld0NyaXRpY2FsKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZW52Qm9vbCgnUExVR0lOX0JMT0NLX09OX05FV19DUklUSUNBTCcsIGZhbHNlKTtcbn1cblxuLyoqIGBwa2dAMS4yLjMg4oaSIDEuMi40YCAvIGBwa2dAMS4yLjMgKG5vIGZpeClgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlc2NyaWJlRml4KGY6IFBpY2s8UGx1Z2luU2NhbkZpbmRpbmcsICdwYWNrYWdlTmFtZScgfCAncGFja2FnZVZlcnNpb24nIHwgJ2ZpeGVkSW4nPik6IHN0cmluZyB7XG4gIGNvbnN0IGF0ID0gYCR7Zi5wYWNrYWdlTmFtZX0ke2YucGFja2FnZVZlcnNpb24gPyBgQCR7Zi5wYWNrYWdlVmVyc2lvbn1gIDogJyd9YDtcbiAgcmV0dXJuIGYuZml4ZWRJbi5sZW5ndGggPiAwID8gYCR7YXR9IOKGkiAke2YuZml4ZWRJbi5qb2luKCcsICcpfWAgOiBgJHthdH0gKG5vIGZpeClgO1xufVxuXG4vKiogYENWRS0xIChvcGVuc3NsQDMuMC4xIOKGkiAzLjAuMik7IENWRS0yICjigKYpYCBmb3IgdGhlIGZpcnN0IGBsaW1pdGAgZmluZGluZ3MuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVGaW5kaW5ncyhmaW5kaW5nczogcmVhZG9ubHkgUGx1Z2luU2NhbkZpbmRpbmdbXSwgbGltaXQgPSA1KTogc3RyaW5nIHtcbiAgY29uc3Qgc2hvd24gPSBmaW5kaW5ncy5zbGljZSgwLCBsaW1pdCkubWFwKChmKSA9PiBgJHtmLmlkfSAoJHtkZXNjcmliZUZpeChmKX0pYCkuam9pbignOyAnKTtcbiAgY29uc3QgbW9yZSA9IGZpbmRpbmdzLmxlbmd0aCA+IGxpbWl0ID8gYDsgKyR7ZmluZGluZ3MubGVuZ3RoIC0gbGltaXR9IG1vcmVgIDogJyc7XG4gIHJldHVybiBgJHtzaG93bn0ke21vcmV9YDtcbn1cblxuLyoqIFRoZSB3YXJuaW5nIHRleHQgZm9yIGEgZmxhZ2dlZCB2ZXJzaW9uOiBgeEB2IGhhcyBOIGZpeGFibGUgQ3JpdGljYWwgZmluZGluZ3Mg4oCUIHJlYnVpbGQgb3IgdXBncmFkZWAuICovXG5leHBvcnQgZnVuY3Rpb24gdnVsbkZsYWdnZWRNZXNzYWdlKHJlZjogc3RyaW5nLCBmbGFnOiBQaWNrPFBsdWdpblNjYW5GbGFnLCAnY3JpdGljYWwnPik6IHN0cmluZyB7XG4gIHJldHVybiBgJHtyZWZ9IGhhcyAke2ZsYWcuY3JpdGljYWx9IGZpeGFibGUgQ3JpdGljYWwgZmluZGluZyR7ZmxhZy5jcml0aWNhbCA9PT0gMSA/ICcnIDogJ3MnfSDigJQgcmVidWlsZCBvciB1cGdyYWRlYDtcbn1cblxuLyoqIEEgYFZVTE5fRkxBR0dFRGAgbG9va3VwIHdhcm5pbmcgKHRoZSBsb29rdXAgZW52ZWxvcGUncyBgd2FybmluZ3NbXWAgZW50cnkpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBWdWxuRmxhZ2dlZFdhcm5pbmcge1xuICBjb2RlOiB0eXBlb2YgVlVMTl9GTEFHR0VEX1dBUk5JTkc7XG4gIHBsdWdpbjogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGNyaXRpY2FsOiBudW1iZXI7XG4gIGhpZ2g6IG51bWJlcjtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICAvKiogVG9wIGZpeGFibGUgZmluZGluZ3Mgd2l0aCB0aGVpciBmaXhlZCB2ZXJzaW9ucy4gKi9cbiAgZmluZGluZ3M6IFBsdWdpblNjYW5GaW5kaW5nW107XG59XG5cbi8qKiBCdWlsZCB0aGUgYFZVTE5fRkxBR0dFRGAgd2FybmluZyBmb3IgYHBsdWdpbkB2ZXJzaW9uYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2dWxuRmxhZ2dlZFdhcm5pbmcocGx1Z2luOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgZmxhZzogUGx1Z2luU2NhbkZsYWcpOiBWdWxuRmxhZ2dlZFdhcm5pbmcge1xuICByZXR1cm4ge1xuICAgIGNvZGU6IFZVTE5fRkxBR0dFRF9XQVJOSU5HLFxuICAgIHBsdWdpbixcbiAgICB2ZXJzaW9uLFxuICAgIGNyaXRpY2FsOiBmbGFnLmNyaXRpY2FsLFxuICAgIGhpZ2g6IGZsYWcuaGlnaCxcbiAgICBtZXNzYWdlOiB2dWxuRmxhZ2dlZE1lc3NhZ2UoYCR7cGx1Z2lufUAke3ZlcnNpb259YCwgZmxhZyksXG4gICAgZmluZGluZ3M6IGZsYWcuZmluZGluZ3Muc2xpY2UoMCwgU0NBTl9GTEFHX1RPUF9GSU5ESU5HUyksXG4gIH07XG59XG5cbi8qKiBUaGUgNDA5IG1lc3NhZ2UgZm9yIGFuIGV4YWN0IHBpbiB0byBhIGZsYWdnZWQgdmVyc2lvbiB3aGlsZSBibG9ja2luZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2dWxuQmxvY2tlZE1lc3NhZ2UocGx1Z2luOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgZmxhZzogUGx1Z2luU2NhbkZsYWcpOiBzdHJpbmcge1xuICBjb25zdCBmaXhlcyA9IGZsYWcuZmluZGluZ3MubGVuZ3RoID4gMCA/IGAgRml4OiAke2Rlc2NyaWJlRmluZGluZ3MoZmxhZy5maW5kaW5ncyl9LmAgOiAnJztcbiAgcmV0dXJuIGAke3BsdWdpbn1AJHt2ZXJzaW9ufSBpcyBibG9ja2VkOiBhIHJlc2NhbiBmb3VuZCAke2ZsYWcuY3JpdGljYWx9IGZpeGFibGUgQ3JpdGljYWwgZmluZGluZyR7ZmxhZy5jcml0aWNhbCA9PT0gMSA/ICcnIDogJ3MnfSBgXG4gICAgKyBgKFBMVUdJTl9CTE9DS19PTl9ORVdfQ1JJVElDQUwpLiBSZWJ1aWxkIGl0IG9uIHBhdGNoZWQgcGFja2FnZXMgb3IgbW92ZSB0byBhIG5ld2VyIHZlcnNpb24uJHtmaXhlc31gO1xufVxuXG4vKiogTmFycm93IGFuIHVua25vd24gYHNjYW5fZmxhZ2AganNvbmIgdmFsdWUuICovXG5leHBvcnQgZnVuY3Rpb24gYXNTY2FuRmxhZyh2YWx1ZTogdW5rbm93bik6IFBsdWdpblNjYW5GbGFnIHwgbnVsbCB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHYgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKHR5cGVvZiB2LmNyaXRpY2FsICE9PSAnbnVtYmVyJyB8fCB0eXBlb2Ygdi5oaWdoICE9PSAnbnVtYmVyJykgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGZpbmRpbmdzID0gQXJyYXkuaXNBcnJheSh2LmZpbmRpbmdzKSA/ICh2LmZpbmRpbmdzIGFzIFBsdWdpblNjYW5GaW5kaW5nW10pLmZpbHRlcigoZikgPT4gZiAmJiB0eXBlb2YgZi5pZCA9PT0gJ3N0cmluZycpIDogW107XG4gIHJldHVybiB7XG4gICAgY3JpdGljYWw6IHYuY3JpdGljYWwsXG4gICAgaGlnaDogdi5oaWdoLFxuICAgIG1heENyaXRpY2FsOiB0eXBlb2Ygdi5tYXhDcml0aWNhbCA9PT0gJ251bWJlcicgPyB2Lm1heENyaXRpY2FsIDogMCxcbiAgICBmaW5kaW5nczogZmluZGluZ3MubWFwKChmKSA9PiAoeyAuLi5mLCBmaXhlZEluOiBBcnJheS5pc0FycmF5KGYuZml4ZWRJbikgPyBmLmZpeGVkSW4gOiBbXSB9KSksXG4gIH07XG59XG4iXX0=
|
|
187
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXNjYW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcGx1Z2luLXNjYW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7R0FXRztBQUVILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBeURsRCw4Q0FBOEM7QUFDOUMsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0FBRXpDLDhEQUE4RDtBQUM5RCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxjQUFjLENBQUM7QUFFbkQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxxQkFBcUI7SUFDbkMsT0FBTyxNQUFNLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1RCxDQUFDO0FBbUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsR0FBRyxHQUF1QixPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQjtJQUMvRixNQUFNLE9BQU8sR0FBaUIsRUFBRSxDQUFDO0lBQ2pDLE1BQU0sUUFBUSxHQUF3QixFQUFFLENBQUM7SUFDekMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUU7UUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQy9DLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBYSxFQUFFLE1BQWMsRUFBRSxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV0RyxLQUFLLE1BQU0sS0FB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LE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ25JLE9BQU87UUFDTCxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVE7UUFDcEIsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO1FBQ1osV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFdBQVcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDOUYsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBQbHVnaW4gaW1hZ2Ugc2NhbiBnYXRlcyAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCBcIlNjYW4gZ2F0ZXNcIik6IHRoZSBzaGFyZWRcbiAqIHZvY2FidWxhcnkgb2YgdGhlIGJ1aWxkLXRpbWUgZ2F0ZSwgdGhlIG5pZ2h0bHkgcmVzY2FuJ3MgZmxhZywgYW5kIHRoZVxuICogcmVzb2x1dGlvbiB3YXJuaW5nIC8gYmxvY2sg4oCUIHVzZWQgYnkgdGhlIHBsdWdpbiBzZXJ2aWNlICh3aGljaCBzdG9yZXMgYW5kXG4gKiBlbmZvcmNlcyB0aGVtKSwgdGhlIHJlc29sdmVyIGluIHBpcGVsaW5lLWRhdGEgKHdoaWNoIHNraXBzIG9yIHdhcm5zKSwgYW5kIHRoZVxuICogZGFzaGJvYXJkICh3aGljaCBzaG93cyB0aGVtKS5cbiAqXG4gKiBBIGZpbmRpbmcgaXMgRklYQUJMRSB3aGVuIGdyeXBlIHJlcG9ydHMgYSBmaXhlZCB2ZXJzaW9uIGZvciBpdFxuICogKGB2dWxuZXJhYmlsaXR5LmZpeC5zdGF0ZSA9PSBcImZpeGVkXCJgIHdpdGggYXQgbGVhc3Qgb25lIHZlcnNpb24pOiB0aGUgZ2F0ZXNcbiAqIGNvdW50IGZpeGFibGUgQ3JpdGljYWwgZmluZGluZ3Mgb25seSwgYmVjYXVzZSBhbiB1bmZpeGFibGUgb25lIGNhbid0IGJlXG4gKiBhY3RlZCBvbiBieSByZWJ1aWxkaW5nIG9yIHVwZ3JhZGluZy5cbiAqL1xuXG5pbXBvcnQgeyBTWVNURU1fT1JHX0lEIH0gZnJvbSAnLi4vbWlkZGxld2FyZS9zeXN0ZW0tb3JnLmpzJztcbmltcG9ydCB7IGVudkJvb2wsIGVudkludCB9IGZyb20gJy4uL3V0aWxzL2Vudi5qcyc7XG5cbi8qKiBPbmUgQ3JpdGljYWwvSGlnaCBmaW5kaW5nIGFzIHRoZSBmbGFnIGFuZCB0aGUgZ2F0ZSBtZXNzYWdlcyBjYXJyeSBpdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luU2NhbkZpbmRpbmcge1xuICAvKiogVGhlIHZ1bG5lcmFiaWxpdHkgaWQgKENWRS3igKYsIEdIU0Et4oCmKS4gKi9cbiAgaWQ6IHN0cmluZztcbiAgc2V2ZXJpdHk6ICdjcml0aWNhbCcgfCAnaGlnaCc7XG4gIHBhY2thZ2VOYW1lOiBzdHJpbmc7XG4gIHBhY2thZ2VWZXJzaW9uOiBzdHJpbmc7XG4gIC8qKiBWZXJzaW9ucyB0aGF0IGZpeCBpdDsgZW1wdHkgPSBubyBmaXggYXZhaWxhYmxlIChub3QgZml4YWJsZSkuICovXG4gIGZpeGVkSW46IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIGBzY2FuX2ZsYWdgIG9uIGEgdmVyc2lvbiB0aGUgbmlnaHRseSByZXNjYW4gZmxhZ2dlZDogaXRzIGZpeGFibGVcbiAqIENyaXRpY2FsL0hpZ2ggY291bnRzIGF0IHRoYXQgcmVzY2FuIGFuZCB0aGUgdG9wIGZpeGFibGUgZmluZGluZ3MuIFNldCB3aGlsZVxuICogZml4YWJsZSBDcml0aWNhbHMgZXhjZWVkIGBQTFVHSU5fVlVMTl9NQVhfQ1JJVElDQUxgLCBjbGVhcmVkIHdoZW4gYSByZXNjYW5cbiAqIGZpbmRzIHRoZW0gcmVzb2x2ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luU2NhbkZsYWcge1xuICAvKiogRml4YWJsZSBDcml0aWNhbCBmaW5kaW5ncy4gKi9cbiAgY3JpdGljYWw6IG51bWJlcjtcbiAgLyoqIEZpeGFibGUgSGlnaCBmaW5kaW5ncy4gKi9cbiAgaGlnaDogbnVtYmVyO1xuICAvKiogVGhlIGZsb29yIGl0IHdhcyBjb21wYXJlZCBhZ2FpbnN0IChgUExVR0lOX1ZVTE5fTUFYX0NSSVRJQ0FMYCkuICovXG4gIG1heENyaXRpY2FsOiBudW1iZXI7XG4gIC8qKiBBdCBtb3N0IHtAbGluayBTQ0FOX0ZMQUdfVE9QX0ZJTkRJTkdTfSBmaXhhYmxlIGZpbmRpbmdzLCBDcml0aWNhbHMgZmlyc3QuICovXG4gIGZpbmRpbmdzOiBQbHVnaW5TY2FuRmluZGluZ1tdO1xufVxuXG4vKipcbiAqIGBzY2FuX3N1bW1hcnlgIG9uIGV2ZXJ5IGluLXVzZSB2ZXJzaW9uOiB0aGUgTEFTVCByZXNjYW4ncyBmaW5kaW5ncywgd3JpdHRlblxuICogd2hldGhlciBvciBub3QgdGhlIGdhdGUgdHJpcHBlZC5cbiAqXG4gKiBEaXN0aW5jdCBmcm9tIHtAbGluayBQbHVnaW5TY2FuRmxhZ30sIHdoaWNoIGV4aXN0cyBvbmx5IHdoaWxlIGEgdmVyc2lvbiBpcyBvdmVyXG4gKiB0aGUgZmxvb3IuIEEgdmVyc2lvbiBjYXJyeWluZyBub3RoaW5nIGJ1dCBIaWdoIGZpbmRpbmdzIGlzIG5ldmVyIGZsYWdnZWQg4oCUIHNvIGFcbiAqIHJlcG9ydCB3aG9zZSBqb2IgaXMgdG8gc2hvdyBDcml0aWNhbCBBTkQgSGlnaCBleHBvc3VyZSBoYWQgbm8gc291cmNlIHRvIHJlYWQuXG4gKiBXaGF0IGEgcmVwb3J0IFNIT1dTIGFuZCB3aGF0IGEgYnVpbGQgUkVGVVNFUyBhcmUgZGlmZmVyZW50IHF1ZXN0aW9ucywgYW5kXG4gKiBjb25mbGF0aW5nIHRoZW0gbWVhbnQgdGhlIGFuc3dlciB0byB0aGUgZmlyc3Qgd2FzIFwibm90aGluZ1wiLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblNjYW5TdW1tYXJ5IHtcbiAgLyoqIEZpeGFibGUgQ3JpdGljYWwgZmluZGluZ3MgYXQgdGhlIGxhc3QgcmVzY2FuLiAqL1xuICBjcml0aWNhbEZpeGFibGU6IG51bWJlcjtcbiAgLyoqIEZpeGFibGUgSGlnaCBmaW5kaW5ncyBhdCB0aGUgbGFzdCByZXNjYW4uICovXG4gIGhpZ2hGaXhhYmxlOiBudW1iZXI7XG4gIC8qKiBUb3RhbHMgaW5jbHVkaW5nIHVuZml4YWJsZSBmaW5kaW5ncywgZm9yIGNvbnRleHQuICovXG4gIGNyaXRpY2FsOiBudW1iZXI7XG4gIGhpZ2g6IG51bWJlcjtcbiAgLyoqIEF0IG1vc3Qge0BsaW5rIFNDQU5fRkxBR19UT1BfRklORElOR1N9IGZpbmRpbmdzLCBDcml0aWNhbHMgZmlyc3QuICovXG4gIGZpbmRpbmdzOiBQbHVnaW5TY2FuRmluZGluZ1tdO1xuICAvKiogV2hlbiB0aGUgcmVzY2FuIHRoYXQgcHJvZHVjZWQgdGhpcyByYW4gKElTTykuICovXG4gIHNjYW5uZWRBdDogc3RyaW5nO1xuICAvKiogVGhlIGltYWdlIHRoaXMgZGVzY3JpYmVzLiBBIHZlcnNpb24gcmVidWlsdCBvbiBhIHBhdGNoZWQgYmFzZSBpcyBhXG4gICAqICBkaWZmZXJlbnQgYXJ0aWZhY3QsIHNvIGEgc3VtbWFyeSB3aXRob3V0IGl0cyBkaWdlc3QgY2Fubm90IGJlIHRydXN0ZWQuICovXG4gIGltYWdlRGlnZXN0Pzogc3RyaW5nO1xufVxuXG4vKiogRmluZGluZ3MgYSBmbGFnIC8gZ2F0ZSBtZXNzYWdlIGNhcnJpZXMuICovXG5leHBvcnQgY29uc3QgU0NBTl9GTEFHX1RPUF9GSU5ESU5HUyA9IDEwO1xuXG4vKiogTG9va3VwIC8gcmVzb2x1dGlvbiB3YXJuaW5nIGNvZGUgZm9yIGEgZmxhZ2dlZCB2ZXJzaW9uLiAqL1xuZXhwb3J0IGNvbnN0IFZVTE5fRkxBR0dFRF9XQVJOSU5HID0gJ1ZVTE5fRkxBR0dFRCc7XG5cbi8qKlxuICogYFBMVUdJTl9WVUxOX01BWF9DUklUSUNBTGA6IHRoZSBwbGF0Zm9ybSBmbG9vciDigJQgYSB2ZXJzaW9uIHdpdGggTU9SRSBmaXhhYmxlXG4gKiBDcml0aWNhbCBmaW5kaW5ncyB0aGFuIHRoaXMgZmFpbHMgaXRzIGJ1aWxkIChgUExVR0lOX1ZVTE5fR0FURWApIGFuZCBpc1xuICogZmxhZ2dlZCBieSB0aGUgcmVzY2FuLiBEZWZhdWx0IGAwYDsgYC0xYCBkaXNhYmxlcyB0aGUgZmxvb3IgKGFuZCB0aGUgZmxhZykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwbHVnaW5WdWxuTWF4Q3JpdGljYWwoKTogbnVtYmVyIHtcbiAgcmV0dXJuIGVudkludCgnUExVR0lOX1ZVTE5fTUFYX0NSSVRJQ0FMJywgMCwgeyBtaW46IC0xIH0pO1xufVxuXG4vKipcbiAqIEEgc2NvcGVkLCBFWFBJUklORyBleGVtcHRpb24gZnJvbSB0aGUgdnVsbmVyYWJpbGl0eSBmbG9vciBmb3Igb25lIHBsdWdpbi5cbiAqXG4gKiBgUExVR0lOX1ZVTE5fTUFYX0NSSVRJQ0FMYCBpcyB0aGUgb25seSBvdGhlciBsZXZlciBhbmQgaXQgaXMgZmFyIHRvbyBibHVudDpcbiAqIHJhaXNpbmcgaXQgYWJvdmUgMCBleGVtcHRzIGV2ZXJ5IHBsdWdpbiBmcm9tIGV2ZXJ5IENyaXRpY2FsLiBTb21lIGltYWdlc1xuICogZ2VudWluZWx5IGNhbm5vdCByZWFjaCB6ZXJvIOKAlCBhIGJyb3dzZXItYnVuZGxpbmcgdGVzdCBydW5uZXIgKGFydGlsbGVyeSBzaGlwc1xuICogQ2hyb21pdW0gdGhyb3VnaCBpdHMgb3duIEBwbGF5d3JpZ2h0L2Jyb3dzZXItY2hyb21pdW0gZGVwZW5kZW5jeSwgcGxheXdyaWdodFxuICogZG93bmxvYWRzIEZpcmVmb3gpIGlzIGF0IHVwc3RyZWFtJ3MgbGF0ZXN0IGFuZCBzdGlsbCBjYXJyaWVzIGZpeGFibGUgZmluZGluZ3MsXG4gKiBiZWNhdXNlIGJyb3dzZXJzIHNoaXAgQ1ZFIGZpeGVzIHdlZWtseSB3aGlsZSBwaW5uZWQgYnVpbGRzIGxhZyBieSBkZXNpZ24uXG4gKiBXaXRob3V0IGEgbmFycm93IGV4ZW1wdGlvbiB0aGUgb25seSBvcHRpb25zIGFyZSBcImJsb2NrIHRoZSBwbHVnaW4gZm9yZXZlclwiIG9yXG4gKiBcImRpc2FibGUgdGhlIGZsb29yIGZvciBldmVyeXRoaW5nXCIuXG4gKlxuICogVGhyZWUgcHJvcGVydGllcyBtYWtlIHRoaXMgYW4gZXhlbXB0aW9uIHJhdGhlciB0aGFuIGEgaG9sZSwgYW5kIGFsbCB0aHJlZSBhcmVcbiAqIGVuZm9yY2VkIGJlbG93IHJhdGhlciB0aGFuIGRvY3VtZW50ZWQgYW5kIGhvcGVkIGZvcjpcbiAqXG4gKiAgIFNDT1BFRCAgICB0byBvbmUgcGx1Z2luLCB0byBuYW1lZCBwYWNrYWdlcywgQU5EIHRvIHRoZSBzeXN0ZW0gb3JnLiBBIG5ld1xuICogICAgICAgICAgICAgQ3JpdGljYWwgaW4gYW55IG90aGVyIHBhY2thZ2Ugc3RpbGwgZmFpbHMgdGhlIGdhdGUsIHNvIGEgd2FpdmVyXG4gKiAgICAgICAgICAgICBjYW5ub3QgZ3JvdyBzaWxlbnRseSBpbnRvIFwidGhpcyBwbHVnaW4gaXMgZXhlbXB0XCIuIFRoZSBvcmcgYm91bmRcbiAqICAgICAgICAgICAgIG1hdHRlcnMgYmVjYXVzZSBwbHVnaW4gbmFtZXMgYXJlIHVuaXF1ZSBwZXIgKG5hbWUsIHZlcnNpb24sXG4gKiAgICAgICAgICAgICBvcmdJZCkgYW5kIE5PVCBnbG9iYWxseTogd2l0aG91dCBpdCwgYW55IHRlbmFudCBjb3VsZCBpbmhlcml0IGFuXG4gKiAgICAgICAgICAgICBleGVtcHRpb24gYnkgbmFtaW5nIHRoZWlyIHBsdWdpbiBgYXJ0aWxsZXJ5YC5cbiAqICAgRVhQSVJJTkcgIGV2ZXJ5IGVudHJ5IGNhcnJpZXMgYSBkYXRlIGFuZCBzdG9wcyBhcHBseWluZyBhZnRlciBpdC4gQSB3YWl2ZXJcbiAqICAgICAgICAgICAgIG5vYm9keSByZXZpc2l0cyBiZWNvbWVzIHBlcm1hbmVudDsgdGhpcyBvbmUgbGFwc2VzIG9uIGl0cyBvd24gYW5kXG4gKiAgICAgICAgICAgICB0aGUgcGx1Z2luIHN0YXJ0cyBmYWlsaW5nIGFnYWluLCB3aGljaCBpcyB0aGUgaW50ZW5kZWQgcHJvbXB0LlxuICogICBWSVNJQkxFICAgd2hhdCB3YXMgd2FpdmVkIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIsIHNvIGl0IHJlYWNoZXMgdGhlXG4gKiAgICAgICAgICAgICBtZXRyaWMsIHRoZSBhdWRpdCByZWNvcmQgYW5kIHRoZSBidWlsZCBtZXNzYWdlIGluc3RlYWQgb2ZcbiAqICAgICAgICAgICAgIHZhbmlzaGluZyBmcm9tIHRoZSBjb3VudC5cbiAqXG4gKiBGb3JtYXQg4oCUIGVudHJpZXMgYDtgLXNlcGFyYXRlZCwgZmllbGRzIGA6YC1zZXBhcmF0ZWQsIHBhY2thZ2VzIGAsYC1zZXBhcmF0ZWQ6XG4gKlxuICogICBQTFVHSU5fVlVMTl9XQUlWRVJTPWFydGlsbGVyeToyMDI2LTEyLTMxOmNocm9taXVtLGNocm9tZTtwbGF5d3JpZ2h0OjIwMjYtMTItMzE6ZmlyZWZveFxuICpcbiAqIEEgbWFsZm9ybWVkIGVudHJ5IGlzIERST1BQRUQsIG5ldmVyIHRyZWF0ZWQgYXMgYSB3aWxkY2FyZDogdGhlIGZhaWx1cmUgbW9kZVxuICogb2YgYSB0eXBvIG11c3QgYmUgXCJ0aGUgZ2F0ZSBzdGlsbCBibG9ja3NcIiwgbm90IFwiZXZlcnl0aGluZyBpcyB3YWl2ZWRcIi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWdWxuV2FpdmVyIHtcbiAgLyoqIFBsdWdpbiBuYW1lIHRoZSB3YWl2ZXIgYXBwbGllcyB0byAoZXhhY3QgbWF0Y2gpLiAqL1xuICBwbHVnaW46IHN0cmluZztcbiAgLyoqXG4gICAqIFBsdWdpbiB2ZXJzaW9uIHRoZSB3YWl2ZXIgaXMgbGltaXRlZCB0bywgb3IgbnVsbCBmb3IgZXZlcnkgdmVyc2lvbi5cbiAgICpcbiAgICogQSB3YWl2ZXIgaXMgYSBqdWRnZW1lbnQgYWJvdXQgYSBTUEVDSUZJQyBpbWFnZSDigJQgXCJ0aGlzIHJlbGVhc2Ugb2YgYXJ0aWxsZXJ5XG4gICAqIGJ1bmRsZXMgYSBDaHJvbWl1bSB3ZSBjYW5ub3QgcGF0Y2hcIi4gTGVmdCB1bnBpbm5lZCBpdCBzaWxlbnRseSBjYXJyaWVzIHRvXG4gICAqIGV2ZXJ5IGZ1dHVyZSB2ZXJzaW9uLCBpbmNsdWRpbmcgb25lcyB3aG9zZSBmaW5kaW5ncyBub2JvZHkgaGFzIGxvb2tlZCBhdCxcbiAgICogd2hpY2ggaXMgaG93IGEgbmFycm93IGV4ZW1wdGlvbiBiZWNvbWVzIGEgc3RhbmRpbmcgb25lLlxuICAgKi9cbiAgdmVyc2lvbjogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIEluY2x1c2l2ZSBleHBpcnkgKFVUQyBkYXRlKS4gQWZ0ZXIgaXQgdGhlIGVudHJ5IGhhcyBubyBlZmZlY3QuICovXG4gIGV4cGlyZXM6IERhdGU7XG4gIC8qKiBQYWNrYWdlIG5hbWVzIHdob3NlIGZpbmRpbmdzIGFyZSBleGVtcHQuIE5ldmVyIGVtcHR5IOKAlCBzZWUgcGFyc2VWdWxuV2FpdmVycy4gKi9cbiAgcGFja2FnZXM6IHN0cmluZ1tdO1xufVxuXG4vKiogQSBkcm9wcGVkIGVudHJ5IGFuZCB3aHksIHNvIHRoZSBvcGVyYXRvciBjYW4gYmUgdG9sZCBpbnN0ZWFkIG9mIGd1ZXNzaW5nLiAqL1xuZXhwb3J0IGludGVyZmFjZSBWdWxuV2FpdmVyUHJvYmxlbSB7XG4gIGVudHJ5OiBzdHJpbmc7XG4gIHJlYXNvbjogc3RyaW5nO1xufVxuXG4vKiogUGFyc2VkIHdhaXZlcnMgcGx1cyB0aGUgZW50cmllcyB0aGF0IHdlcmUgcmVqZWN0ZWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFZ1bG5XYWl2ZXJQYXJzZSB7XG4gIHdhaXZlcnM6IFZ1bG5XYWl2ZXJbXTtcbiAgcHJvYmxlbXM6IFZ1bG5XYWl2ZXJQcm9ibGVtW107XG59XG5cbi8qKlxuICogUGFyc2UgYFBMVUdJTl9WVUxOX1dBSVZFUlNgLCBSRVBPUlRJTkcgd2hhdCB3YXMgZHJvcHBlZC5cbiAqXG4gKiBEcm9wcGluZyBhIG1hbGZvcm1lZCBlbnRyeSBpcyB0aGUgc2FmZSBkaXJlY3Rpb24g4oCUIGEgdHlwbyBtdXN0IG5vdCBiZWNvbWUgYVxuICogd2lsZGNhcmQg4oCUIGJ1dCBzaWxlbnRseSBkcm9wcGluZyBpdCBpcyBhIHVzYWJpbGl0eSB0cmFwOiB0aGUgb3BlcmF0b3Igc2V0cyBhXG4gKiB3YWl2ZXIsIHRoZSBnYXRlIGtlZXBzIGJsb2NraW5nLCBhbmQgbm90aGluZyBhbnl3aGVyZSBzYXlzIHdoeS4gQ2FsbGVycyB0aGF0XG4gKiBjYW4gc3VyZmFjZSBpdCAoc2VydmljZSBib290KSB1c2UgdGhpczsgYHBhcnNlVnVsbldhaXZlcnNgIGlzIHRoZSBzaG9ydGhhbmRcbiAqIGZvciB0aGUgb25lcyB0aGF0IGNhbm5vdC5cbiAqXG4gKiBFbnRyeSBncmFtbWFyOiBgPHBsdWdpbj5bQDx2ZXJzaW9uPl06PFlZWVktTU0tREQ+Ojxwa2c+Wyw8cGtnPuKApl1gXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVZ1bG5XYWl2ZXJzVmVyYm9zZShyYXc6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHByb2Nlc3MuZW52LlBMVUdJTl9WVUxOX1dBSVZFUlMpOiBWdWxuV2FpdmVyUGFyc2Uge1xuICBjb25zdCB3YWl2ZXJzOiBWdWxuV2FpdmVyW10gPSBbXTtcbiAgY29uc3QgcHJvYmxlbXM6IFZ1bG5XYWl2ZXJQcm9ibGVtW10gPSBbXTtcbiAgaWYgKCFyYXc/LnRyaW0oKSkgcmV0dXJuIHsgd2FpdmVycywgcHJvYmxlbXMgfTtcbiAgY29uc3QgcmVqZWN0ID0gKGVudHJ5OiBzdHJpbmcsIHJlYXNvbjogc3RyaW5nKSA9PiB7IHByb2JsZW1zLnB1c2goeyBlbnRyeTogZW50cnkudHJpbSgpLCByZWFzb24gfSk7IH07XG5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiByYXcuc3BsaXQoJzsnKSkge1xuICAgIGlmICghZW50cnkudHJpbSgpKSBjb250aW51ZTtcbiAgICBjb25zdCBbdGFyZ2V0LCBleHBpcmVzLCBwYWNrYWdlc10gPSBlbnRyeS5zcGxpdCgnOicpLm1hcCgoZikgPT4gZj8udHJpbSgpID8/ICcnKTtcbiAgICAvLyBFdmVyeSBmaWVsZCBpcyBSRVFVSVJFRC4gQW4gZW50cnkgbWlzc2luZyBpdHMgcGFja2FnZSBsaXN0IHdvdWxkXG4gICAgLy8gb3RoZXJ3aXNlIHJlYWQgYXMgXCJ3YWl2ZSB0aGlzIHBsdWdpbiBlbnRpcmVseVwiLCB3aGljaCBpcyB0aGUgb25lIHRoaW5nXG4gICAgLy8gdGhpcyBtdXN0IG5vdCBiZSBhYmxlIHRvIGV4cHJlc3MuXG4gICAgaWYgKCF0YXJnZXQgfHwgIWV4cGlyZXMgfHwgIXBhY2thZ2VzKSB7XG4gICAgICByZWplY3QoZW50cnksICdleHBlY3RlZCA8cGx1Z2luPltAPHZlcnNpb24+XTo8WVlZWS1NTS1ERD46PHBhY2thZ2U+Wyw8cGFja2FnZT7igKZdJyk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgYXQgPSB0YXJnZXQuaW5kZXhPZignQCcpO1xuICAgIGNvbnN0IHBsdWdpbiA9IGF0ID09PSAtMSA/IHRhcmdldCA6IHRhcmdldC5zbGljZSgwLCBhdCkudHJpbSgpO1xuICAgIGNvbnN0IHZlcnNpb24gPSBhdCA9PT0gLTEgPyBudWxsIDogdGFyZ2V0LnNsaWNlKGF0ICsgMSkudHJpbSgpO1xuICAgIGlmICghcGx1Z2luKSB7IHJlamVjdChlbnRyeSwgJ25vIHBsdWdpbiBuYW1lJyk7IGNvbnRpbnVlOyB9XG4gICAgaWYgKGF0ICE9PSAtMSAmJiAhdmVyc2lvbikgeyByZWplY3QoZW50cnksIFwiJ0AnIHdpdGggbm8gdmVyc2lvbiDigJQgb21pdCBpdCB0byBjb3ZlciBldmVyeSB2ZXJzaW9uXCIpOyBjb250aW51ZTsgfVxuICAgIGlmICghL15cXGR7NH0tXFxkezJ9LVxcZHsyfSQvLnRlc3QoZXhwaXJlcykpIHsgcmVqZWN0KGVudHJ5LCBgZXhwaXJ5ICcke2V4cGlyZXN9JyBpcyBub3QgWVlZWS1NTS1ERGApOyBjb250aW51ZTsgfVxuICAgIGNvbnN0IHdoZW4gPSBuZXcgRGF0ZShgJHtleHBpcmVzfVQyMzo1OTo1OS45OTlaYCk7XG4gICAgaWYgKE51bWJlci5pc05hTih3aGVuLmdldFRpbWUoKSkpIHsgcmVqZWN0KGVudHJ5LCBgZXhwaXJ5ICcke2V4cGlyZXN9JyBpcyBub3QgYSByZWFsIGRhdGVgKTsgY29udGludWU7IH1cbiAgICBjb25zdCBuYW1lcyA9IHBhY2thZ2VzLnNwbGl0KCcsJykubWFwKChuKSA9PiBuLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGlmIChuYW1lcy5sZW5ndGggPT09IDApIHsgcmVqZWN0KGVudHJ5LCAnbm8gcGFja2FnZSBuYW1lcycpOyBjb250aW51ZTsgfVxuICAgIHdhaXZlcnMucHVzaCh7IHBsdWdpbiwgdmVyc2lvbiwgZXhwaXJlczogd2hlbiwgcGFja2FnZXM6IG5hbWVzIH0pO1xuICB9XG4gIHJldHVybiB7IHdhaXZlcnMsIHByb2JsZW1zIH07XG59XG5cbi8qKiBQYXJzZSBgUExVR0lOX1ZVTE5fV0FJVkVSU2AuIE1hbGZvcm1lZCBvciBpbmNvbXBsZXRlIGVudHJpZXMgYXJlIGRyb3BwZWQuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VWdWxuV2FpdmVycyhyYXc6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHByb2Nlc3MuZW52LlBMVUdJTl9WVUxOX1dBSVZFUlMpOiBWdWxuV2FpdmVyW10ge1xuICByZXR1cm4gcGFyc2VWdWxuV2FpdmVyc1ZlcmJvc2UocmF3KS53YWl2ZXJzO1xufVxuXG4vKiogV2hhdCBhIHdhaXZlciByZW1vdmVkIGZyb20gdGhlIGNvdW50LCBhbmQgd2hhdCBzdGlsbCBjb3VudHMuICovXG5leHBvcnQgaW50ZXJmYWNlIFdhaXZlck91dGNvbWUge1xuICAvKiogRmluZGluZ3MgdGhlIGZsb29yIHN0aWxsIGNvdW50cy4gKi9cbiAgY291bnRlZDogUGx1Z2luU2NhbkZpbmRpbmdbXTtcbiAgLyoqIEZpbmRpbmdzIGFuIHVuZXhwaXJlZCB3YWl2ZXIgZXhlbXB0ZWQgKGVtcHR5IHdoZW4gbm9uZSBhcHBsaWVkKS4gKi9cbiAgd2FpdmVkOiBQbHVnaW5TY2FuRmluZGluZ1tdO1xufVxuXG4vKipcbiAqIFNwbGl0IGZpbmRpbmdzIGludG8gd2hhdCBzdGlsbCBjb3VudHMgYW5kIHdoYXQgYW4gdW5leHBpcmVkIHdhaXZlciBleGVtcHRzLlxuICpcbiAqIE1hdGNoaW5nIGlzIG9uIHRoZSBwYWNrYWdlIG5hbWUgYSB3YWl2ZXIgbmFtZXMsIGNhc2UtaW5zZW5zaXRpdmVseSwgYW5kIG9ubHlcbiAqIGZvciBmaW5kaW5ncyB0aGF0IGFyZSBGSVhBQkxFIOKAlCBhbiB1bmZpeGFibGUgZmluZGluZyBuZXZlciBjb3VudGVkIHRvd2FyZCB0aGVcbiAqIGZsb29yLCBzbyBcIndhaXZpbmdcIiBpdCB3b3VsZCBvdmVyc3RhdGUgd2hhdCB0aGUgd2FpdmVyIGRvZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVZ1bG5XYWl2ZXJzKFxuICBwbHVnaW5OYW1lOiBzdHJpbmcsXG4gIGZpbmRpbmdzOiByZWFkb25seSBQbHVnaW5TY2FuRmluZGluZ1tdLFxuICB3YWl2ZXJzOiByZWFkb25seSBWdWxuV2FpdmVyW10gPSBwYXJzZVZ1bG5XYWl2ZXJzKCksXG4gIG5vdzogRGF0ZSA9IG5ldyBEYXRlKCksXG4gIG9yZ0lkPzogc3RyaW5nLFxuICBwbHVnaW5WZXJzaW9uPzogc3RyaW5nLFxuKTogV2FpdmVyT3V0Y29tZSB7XG4gIC8vIFNZU1RFTSBPUkcgT05MWS4gUGx1Z2luIG5hbWVzIGFyZSB1bmlxdWUgcGVyIChuYW1lLCB2ZXJzaW9uLCBvcmdJZCksIE5PVFxuICAvLyBnbG9iYWxseSDigJQgYW55IHRlbmFudCBjYW4gY3JlYXRlIGEgcGx1Z2luIGNhbGxlZCBgYXJ0aWxsZXJ5YC4gTWF0Y2hpbmcgb25cbiAgLy8gdGhlIG5hbWUgYWxvbmUgd291bGQgaGFuZCBldmVyeSBvbmUgb2YgdGhlbSB0aGUgb3BlcmF0b3IncyBleGVtcHRpb24sIHNvIGFcbiAgLy8gdGVuYW50IGNvdWxkIGluaGVyaXQgYSB3YWl2ZXIgc2ltcGx5IGJ5IGNob29zaW5nIHRoZSBuYW1lLCBhbmQgc2hpcCBhblxuICAvLyBpbWFnZSB3aG9zZSBDcml0aWNhbHMgdGhlIGdhdGUgdGhlbiB3YXZlZCB0aHJvdWdoLiBUaGUgd2FpdmVycyBleGlzdCBmb3IgdGhlXG4gIC8vIE9mZmljaWFsIGNhdGFsb2cgdGhlIG9wZXJhdG9yIGN1cmF0ZXMsIHdoaWNoIGxpdmVzIGluIHRoZSBzeXN0ZW0gb3JnOyBhXG4gIC8vIGNhbGxlciB0aGF0IGNhbm5vdCBzYXkgd2hpY2ggb3JnIHRoaXMgYnVpbGQgYmVsb25ncyB0byBnZXRzIG5vIHdhaXZlci5cbiAgaWYgKG9yZ0lkID09PSB1bmRlZmluZWQgfHwgb3JnSWQudG9Mb3dlckNhc2UoKSAhPT0gU1lTVEVNX09SR19JRCkgcmV0dXJuIHsgY291bnRlZDogWy4uLmZpbmRpbmdzXSwgd2FpdmVkOiBbXSB9O1xuICBjb25zdCBhY3RpdmUgPSB3YWl2ZXJzLmZpbHRlcigodykgPT4gdy5wbHVnaW4gPT09IHBsdWdpbk5hbWVcbiAgICAmJiB3LmV4cGlyZXMuZ2V0VGltZSgpID49IG5vdy5nZXRUaW1lKClcbiAgICAvLyBBIHZlcnNpb24tcGlubmVkIHdhaXZlciBjb3ZlcnMgdGhhdCB2ZXJzaW9uIG9ubHkuIEFuIHVucGlubmVkIG9uZSBjb3ZlcnNcbiAgICAvLyBldmVyeSB2ZXJzaW9uLCB3aGljaCBpcyB3aHkgdGhlIHBpbiBpcyB3b3J0aCB3cml0aW5nLlxuICAgICYmICh3LnZlcnNpb24gPT09IG51bGwgfHwgdy52ZXJzaW9uID09PSBwbHVnaW5WZXJzaW9uKSk7XG4gIGlmIChhY3RpdmUubGVuZ3RoID09PSAwKSByZXR1cm4geyBjb3VudGVkOiBbLi4uZmluZGluZ3NdLCB3YWl2ZWQ6IFtdIH07XG4gIGNvbnN0IGV4ZW1wdCA9IG5ldyBTZXQoYWN0aXZlLmZsYXRNYXAoKHcpID0+IHcucGFja2FnZXMubWFwKChuKSA9PiBuLnRvTG93ZXJDYXNlKCkpKSk7XG4gIGNvbnN0IGNvdW50ZWQ6IFBsdWdpblNjYW5GaW5kaW5nW10gPSBbXTtcbiAgY29uc3Qgd2FpdmVkOiBQbHVnaW5TY2FuRmluZGluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZiBvZiBmaW5kaW5ncykge1xuICAgIGlmIChmLmZpeGVkSW4ubGVuZ3RoID4gMCAmJiBleGVtcHQuaGFzKGYucGFja2FnZU5hbWUudG9Mb3dlckNhc2UoKSkpIHdhaXZlZC5wdXNoKGYpO1xuICAgIGVsc2UgY291bnRlZC5wdXNoKGYpO1xuICB9XG4gIHJldHVybiB7IGNvdW50ZWQsIHdhaXZlZCB9O1xufVxuXG4vKiogV2hldGhlciBgZml4YWJsZUNyaXRpY2FsYCBicmVha3MgdGhlIHBsYXRmb3JtIGZsb29yIChuZXZlciwgd2hlbiBkaXNhYmxlZCkuICovXG5leHBvcnQgZnVuY3Rpb24gZXhjZWVkc1Z1bG5GbG9vcihmaXhhYmxlQ3JpdGljYWw6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIG1heDogbnVtYmVyID0gcGx1Z2luVnVsbk1heENyaXRpY2FsKCkpOiBib29sZWFuIHtcbiAgcmV0dXJuIG1heCA+PSAwICYmIChmaXhhYmxlQ3JpdGljYWwgPz8gMCkgPiBtYXg7XG59XG5cbi8qKlxuICogYFBMVUdJTl9CTE9DS19PTl9ORVdfQ1JJVElDQUxgIChkZWZhdWx0IGZhbHNlKTogcmVzb2x1dGlvbiBTS0lQUyBmbGFnZ2VkXG4gKiB2ZXJzaW9ucyBmb3IgcmFuZ2VzIGFuZCB0aGUgZGVmYXVsdCAoZmFsbGluZyBiYWNrIHRvIHRoZSBuZXdlc3QgdW5mbGFnZ2VkXG4gKiBvbmUpLCBhbmQgYW4gZXhhY3QgcGluIHRvIGEgZmxhZ2dlZCB2ZXJzaW9uIGlzIHJlZnVzZWQgNDA5XG4gKiBgUExVR0lOX1ZFUlNJT05fVlVMTl9CTE9DS0VEYC4gT2ZmOiBmbGFnZ2VkIHZlcnNpb25zIHJlc29sdmUgd2l0aCBhXG4gKiBgVlVMTl9GTEFHR0VEYCB3YXJuaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYmxvY2tPbk5ld0NyaXRpY2FsKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZW52Qm9vbCgnUExVR0lOX0JMT0NLX09OX05FV19DUklUSUNBTCcsIGZhbHNlKTtcbn1cblxuLyoqIGBwa2dAMS4yLjMg4oaSIDEuMi40YCAvIGBwa2dAMS4yLjMgKG5vIGZpeClgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlc2NyaWJlRml4KGY6IFBpY2s8UGx1Z2luU2NhbkZpbmRpbmcsICdwYWNrYWdlTmFtZScgfCAncGFja2FnZVZlcnNpb24nIHwgJ2ZpeGVkSW4nPik6IHN0cmluZyB7XG4gIGNvbnN0IGF0ID0gYCR7Zi5wYWNrYWdlTmFtZX0ke2YucGFja2FnZVZlcnNpb24gPyBgQCR7Zi5wYWNrYWdlVmVyc2lvbn1gIDogJyd9YDtcbiAgcmV0dXJuIGYuZml4ZWRJbi5sZW5ndGggPiAwID8gYCR7YXR9IOKGkiAke2YuZml4ZWRJbi5qb2luKCcsICcpfWAgOiBgJHthdH0gKG5vIGZpeClgO1xufVxuXG4vKiogYENWRS0xIChvcGVuc3NsQDMuMC4xIOKGkiAzLjAuMik7IENWRS0yICjigKYpYCBmb3IgdGhlIGZpcnN0IGBsaW1pdGAgZmluZGluZ3MuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVGaW5kaW5ncyhmaW5kaW5nczogcmVhZG9ubHkgUGx1Z2luU2NhbkZpbmRpbmdbXSwgbGltaXQgPSA1KTogc3RyaW5nIHtcbiAgY29uc3Qgc2hvd24gPSBmaW5kaW5ncy5zbGljZSgwLCBsaW1pdCkubWFwKChmKSA9PiBgJHtmLmlkfSAoJHtkZXNjcmliZUZpeChmKX0pYCkuam9pbignOyAnKTtcbiAgY29uc3QgbW9yZSA9IGZpbmRpbmdzLmxlbmd0aCA+IGxpbWl0ID8gYDsgKyR7ZmluZGluZ3MubGVuZ3RoIC0gbGltaXR9IG1vcmVgIDogJyc7XG4gIHJldHVybiBgJHtzaG93bn0ke21vcmV9YDtcbn1cblxuLyoqIFRoZSB3YXJuaW5nIHRleHQgZm9yIGEgZmxhZ2dlZCB2ZXJzaW9uOiBgeEB2IGhhcyBOIGZpeGFibGUgQ3JpdGljYWwgZmluZGluZ3Mg4oCUIHJlYnVpbGQgb3IgdXBncmFkZWAuICovXG5leHBvcnQgZnVuY3Rpb24gdnVsbkZsYWdnZWRNZXNzYWdlKHJlZjogc3RyaW5nLCBmbGFnOiBQaWNrPFBsdWdpblNjYW5GbGFnLCAnY3JpdGljYWwnPik6IHN0cmluZyB7XG4gIHJldHVybiBgJHtyZWZ9IGhhcyAke2ZsYWcuY3JpdGljYWx9IGZpeGFibGUgQ3JpdGljYWwgZmluZGluZyR7ZmxhZy5jcml0aWNhbCA9PT0gMSA/ICcnIDogJ3MnfSDigJQgcmVidWlsZCBvciB1cGdyYWRlYDtcbn1cblxuLyoqIEEgYFZVTE5fRkxBR0dFRGAgbG9va3VwIHdhcm5pbmcgKHRoZSBsb29rdXAgZW52ZWxvcGUncyBgd2FybmluZ3NbXWAgZW50cnkpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBWdWxuRmxhZ2dlZFdhcm5pbmcge1xuICBjb2RlOiB0eXBlb2YgVlVMTl9GTEFHR0VEX1dBUk5JTkc7XG4gIHBsdWdpbjogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGNyaXRpY2FsOiBudW1iZXI7XG4gIGhpZ2g6IG51bWJlcjtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICAvKiogVG9wIGZpeGFibGUgZmluZGluZ3Mgd2l0aCB0aGVpciBmaXhlZCB2ZXJzaW9ucy4gKi9cbiAgZmluZGluZ3M6IFBsdWdpblNjYW5GaW5kaW5nW107XG59XG5cbi8qKiBCdWlsZCB0aGUgYFZVTE5fRkxBR0dFRGAgd2FybmluZyBmb3IgYHBsdWdpbkB2ZXJzaW9uYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2dWxuRmxhZ2dlZFdhcm5pbmcocGx1Z2luOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgZmxhZzogUGx1Z2luU2NhbkZsYWcpOiBWdWxuRmxhZ2dlZFdhcm5pbmcge1xuICByZXR1cm4ge1xuICAgIGNvZGU6IFZVTE5fRkxBR0dFRF9XQVJOSU5HLFxuICAgIHBsdWdpbixcbiAgICB2ZXJzaW9uLFxuICAgIGNyaXRpY2FsOiBmbGFnLmNyaXRpY2FsLFxuICAgIGhpZ2g6IGZsYWcuaGlnaCxcbiAgICBtZXNzYWdlOiB2dWxuRmxhZ2dlZE1lc3NhZ2UoYCR7cGx1Z2lufUAke3ZlcnNpb259YCwgZmxhZyksXG4gICAgZmluZGluZ3M6IGZsYWcuZmluZGluZ3Muc2xpY2UoMCwgU0NBTl9GTEFHX1RPUF9GSU5ESU5HUyksXG4gIH07XG59XG5cbi8qKiBUaGUgNDA5IG1lc3NhZ2UgZm9yIGFuIGV4YWN0IHBpbiB0byBhIGZsYWdnZWQgdmVyc2lvbiB3aGlsZSBibG9ja2luZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2dWxuQmxvY2tlZE1lc3NhZ2UocGx1Z2luOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgZmxhZzogUGx1Z2luU2NhbkZsYWcpOiBzdHJpbmcge1xuICBjb25zdCBmaXhlcyA9IGZsYWcuZmluZGluZ3MubGVuZ3RoID4gMCA/IGAgRml4OiAke2Rlc2NyaWJlRmluZGluZ3MoZmxhZy5maW5kaW5ncyl9LmAgOiAnJztcbiAgcmV0dXJuIGAke3BsdWdpbn1AJHt2ZXJzaW9ufSBpcyBibG9ja2VkOiBhIHJlc2NhbiBmb3VuZCAke2ZsYWcuY3JpdGljYWx9IGZpeGFibGUgQ3JpdGljYWwgZmluZGluZyR7ZmxhZy5jcml0aWNhbCA9PT0gMSA/ICcnIDogJ3MnfSBgXG4gICAgKyBgKFBMVUdJTl9CTE9DS19PTl9ORVdfQ1JJVElDQUwpLiBSZWJ1aWxkIGl0IG9uIHBhdGNoZWQgcGFja2FnZXMgb3IgbW92ZSB0byBhIG5ld2VyIHZlcnNpb24uJHtmaXhlc31gO1xufVxuXG4vKiogTmFycm93IGFuIHVua25vd24gYHNjYW5fZmxhZ2AganNvbmIgdmFsdWUuICovXG5leHBvcnQgZnVuY3Rpb24gYXNTY2FuRmxhZyh2YWx1ZTogdW5rbm93bik6IFBsdWdpblNjYW5GbGFnIHwgbnVsbCB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHYgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKHR5cGVvZiB2LmNyaXRpY2FsICE9PSAnbnVtYmVyJyB8fCB0eXBlb2Ygdi5oaWdoICE9PSAnbnVtYmVyJykgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGZpbmRpbmdzID0gQXJyYXkuaXNBcnJheSh2LmZpbmRpbmdzKSA/ICh2LmZpbmRpbmdzIGFzIFBsdWdpblNjYW5GaW5kaW5nW10pLmZpbHRlcigoZikgPT4gZiAmJiB0eXBlb2YgZi5pZCA9PT0gJ3N0cmluZycpIDogW107XG4gIHJldHVybiB7XG4gICAgY3JpdGljYWw6IHYuY3JpdGljYWwsXG4gICAgaGlnaDogdi5oaWdoLFxuICAgIG1heENyaXRpY2FsOiB0eXBlb2Ygdi5tYXhDcml0aWNhbCA9PT0gJ251bWJlcicgPyB2Lm1heENyaXRpY2FsIDogMCxcbiAgICBmaW5kaW5nczogZmluZGluZ3MubWFwKChmKSA9PiAoeyAuLi5mLCBmaXhlZEluOiBBcnJheS5pc0FycmF5KGYuZml4ZWRJbikgPyBmLmZpeGVkSW4gOiBbXSB9KSksXG4gIH07XG59XG4iXX0=
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* (`admin.superadmin.grant`, `org.ownership.transfer`, `user.login`, …). Keep
|
|
18
18
|
* this list free of any platform-only action.
|
|
19
19
|
*/
|
|
20
|
-
export declare const REMOTE_AUDIT_ACTIONS: readonly ['plugin.build.completed', 'plugin.build.failed', 'plugin.build.timeout', 'plugin.scan.skipped', 'plugin.delete', 'plugin.restore', 'plugin.purge', 'plugin.update', 'plugin.upload', 'plugin.deploy', 'plugin.bulk.update', 'plugin.bulk.delete', 'plugin.dlq.purge', 'plugin.build.retry', 'plugin.dlq.replay', 'pipeline.create', 'pipeline.update', 'pipeline.delete', 'pipeline.restore', 'pipeline.purge', 'pipeline_template.create', 'pipeline_template.update', 'pipeline_template.delete', 'pipeline_template.restore', 'pipeline_template.purge', 'pipeline.execution.start', 'pipeline.execution.cancel', 'pipeline.registry.register', 'pipeline.registry.deregister', 'quota.reset', 'quota.limit.update', 'quota.delete', 'compliance.exemption.approve', 'compliance.exemption.revoke', 'compliance.rule.toggle', 'compliance.rule.create', 'compliance.rule.update', 'compliance.rule.delete', 'compliance.rule.restore', 'compliance.rule.purge', 'compliance.policy.create', 'compliance.policy.update', 'compliance.policy.delete', 'compliance.policy.restore', 'compliance.policy.purge', 'compliance.scan-schedule.create', 'compliance.scan-schedule.update', 'compliance.scan-schedule.delete', 'compliance.template.apply', 'compliance.scan.create', 'compliance.scan.cancel', 'compliance.notification-preference.update', 'registry.gc', 'registry.image.delete', 'registry.image.copy', 'registry.image.sign', 'message.announcement.create', 'message.delete', 'message.restore', 'message.purge', 'billing.subscription.create', 'billing.subscription.update', 'billing.subscription.reactivate', 'billing.subscription.cancel', 'billing.subscription.delete', 'billing.tier.override', 'billing.addon.add', 'billing.addon.remove', 'billing.addon.prune', 'billing.discount.generate', 'billing.discount.issue', 'billing.discount.apply', 'billing.discount.remove', 'billing.discount.revoke', 'billing.promotion.create', 'billing.promotion.update', 'billing.promotion.revoke', 'billing.promotion.grant', 'billing.promotion.activate', 'billing.credit.consumed', 'billing.credit.exhausted', 'billing.combo.expired', 'reporting.settings.update', 'reporting.deployment.outcome', 'reporting.retention.sync', 'reporting.report.definition.create', 'reporting.report.definition.update', 'reporting.report.definition.delete', 'reporting.report.ownership.transfer', 'reporting.report.published', 'reporting.report.republished', 'reporting.report.link.created', 'reporting.report.link.revoked', 'reporting.report.recipient.added', 'reporting.report.recipient.removed', 'reporting.report.policy.update', 'reporting.report.paused', 'reporting.report.resumed', 'authz.denied', 'ask.query', 'ask.agent.turn', 'publisher.create', 'publisher.update', 'publisher.terms.accept', 'publisher.verify.request', 'publisher.verify.approve', 'publisher.verify.reject', 'publisher.tier.change', 'publisher.suspend', 'publisher.unsuspend', 'publisher.transfer.request', 'publisher.transfer.accept', 'publisher.transfer.decline', 'publisher.transfer.approve', 'publisher.transfer.reject', 'publisher.profile-change.approve', 'publisher.profile-change.reject', 'plugin.request.submit', 'plugin.request.withdraw', 'plugin.request.approve', 'plugin.request.second-approve', 'plugin.request.reject', 'plugin.request.auto-approve', 'plugin.listing.publish', 'plugin.listing.unlist', 'plugin.listing.update', 'plugin.listing.state.change', 'plugin.listing.pause', 'plugin.listing.unpause', 'plugin.version.pause', 'plugin.version.yank', 'plugin.version.unyank', 'plugin.version.deprecate', 'plugin.collection.update', 'ecosystem.auto-approval-rule.create', 'ecosystem.auto-approval-rule.update', 'ecosystem.auto-approval-rule.delete', 'ecosystem.reserved-name.update', 'ecosystem.sla.update', 'registry.image.publish', 'registry.image.resign', 'registry.image.yank', 'registry.image.gc', 'plugin.install.request', 'plugin.install.approve', 'plugin.install.deny', 'plugin.install.create', 'plugin.install.upgrade', 'plugin.install.change-request', 'plugin.install.change-approve', 'plugin.install.change-reject', 'plugin.install.remove', 'org.plugin-install-policy.update', 'plugin.review.create', 'plugin.review.update', 'plugin.review.delete', 'plugin.review.report', 'plugin.review.hold', 'plugin.review.release', 'plugin.review.remove', 'plugin.review.anonymize', 'plugin.review.reply.create', 'plugin.review.reply.update', 'plugin.review.reply.delete', 'plugin.submission.create', 'plugin.submission.verify', 'plugin.submission.gate-fail', 'plugin.submission.approve', 'plugin.submission.reject', 'plugin.submission.claim', 'plugin.submission.expire', 'plugin.advisory.create', 'plugin.advisory.update', 'plugin.advisory.publish', 'plugin.advisory.withdraw', 'plugin.security_notifications.update', 'plugin.security_notifications.external_email.verify', 'plugin.security_notifications.test'];
|
|
20
|
+
export declare const REMOTE_AUDIT_ACTIONS: readonly ['plugin.build.completed', 'plugin.build.failed', 'plugin.build.timeout', 'plugin.scan.skipped', 'plugin.vuln.waived', 'plugin.delete', 'plugin.restore', 'plugin.purge', 'plugin.update', 'plugin.upload', 'plugin.deploy', 'plugin.bulk.update', 'plugin.bulk.delete', 'plugin.dlq.purge', 'plugin.build.retry', 'plugin.dlq.replay', 'pipeline.create', 'pipeline.update', 'pipeline.delete', 'pipeline.restore', 'pipeline.purge', 'pipeline_template.create', 'pipeline_template.update', 'pipeline_template.delete', 'pipeline_template.restore', 'pipeline_template.purge', 'pipeline.execution.start', 'pipeline.execution.cancel', 'pipeline.registry.register', 'pipeline.registry.deregister', 'quota.reset', 'quota.limit.update', 'quota.delete', 'compliance.exemption.approve', 'compliance.exemption.revoke', 'compliance.rule.toggle', 'compliance.rule.create', 'compliance.rule.update', 'compliance.rule.delete', 'compliance.rule.restore', 'compliance.rule.purge', 'compliance.policy.create', 'compliance.policy.update', 'compliance.policy.delete', 'compliance.policy.restore', 'compliance.policy.purge', 'compliance.scan-schedule.create', 'compliance.scan-schedule.update', 'compliance.scan-schedule.delete', 'compliance.template.apply', 'compliance.scan.create', 'compliance.scan.cancel', 'compliance.notification-preference.update', 'registry.gc', 'registry.image.delete', 'registry.image.copy', 'registry.image.sign', 'message.announcement.create', 'message.delete', 'message.restore', 'message.purge', 'billing.subscription.create', 'billing.subscription.update', 'billing.subscription.reactivate', 'billing.subscription.cancel', 'billing.subscription.delete', 'billing.tier.override', 'billing.addon.add', 'billing.addon.remove', 'billing.addon.prune', 'billing.discount.generate', 'billing.discount.issue', 'billing.discount.apply', 'billing.discount.remove', 'billing.discount.revoke', 'billing.promotion.create', 'billing.promotion.update', 'billing.promotion.revoke', 'billing.promotion.grant', 'billing.promotion.activate', 'billing.credit.consumed', 'billing.credit.exhausted', 'billing.combo.expired', 'reporting.settings.update', 'reporting.deployment.outcome', 'reporting.retention.sync', 'reporting.report.definition.create', 'reporting.report.definition.update', 'reporting.report.definition.delete', 'reporting.report.ownership.transfer', 'reporting.report.published', 'reporting.report.republished', 'reporting.report.link.created', 'reporting.report.link.revoked', 'reporting.report.recipient.added', 'reporting.report.recipient.removed', 'reporting.report.policy.update', 'reporting.report.paused', 'reporting.report.resumed', 'authz.denied', 'ask.query', 'ask.agent.turn', 'publisher.create', 'publisher.update', 'publisher.terms.accept', 'publisher.verify.request', 'publisher.verify.approve', 'publisher.verify.reject', 'publisher.tier.change', 'publisher.suspend', 'publisher.unsuspend', 'publisher.transfer.request', 'publisher.transfer.accept', 'publisher.transfer.decline', 'publisher.transfer.approve', 'publisher.transfer.reject', 'publisher.profile-change.approve', 'publisher.profile-change.reject', 'plugin.request.submit', 'plugin.request.withdraw', 'plugin.request.approve', 'plugin.request.second-approve', 'plugin.request.reject', 'plugin.request.auto-approve', 'plugin.listing.publish', 'plugin.listing.unlist', 'plugin.listing.update', 'plugin.listing.state.change', 'plugin.listing.pause', 'plugin.listing.unpause', 'plugin.version.pause', 'plugin.version.yank', 'plugin.version.unyank', 'plugin.version.deprecate', 'plugin.collection.update', 'ecosystem.auto-approval-rule.create', 'ecosystem.auto-approval-rule.update', 'ecosystem.auto-approval-rule.delete', 'ecosystem.reserved-name.update', 'ecosystem.sla.update', 'registry.image.publish', 'registry.image.resign', 'registry.image.yank', 'registry.image.gc', 'plugin.install.request', 'plugin.install.approve', 'plugin.install.deny', 'plugin.install.create', 'plugin.install.upgrade', 'plugin.install.change-request', 'plugin.install.change-approve', 'plugin.install.change-reject', 'plugin.install.remove', 'org.plugin-install-policy.update', 'plugin.review.create', 'plugin.review.update', 'plugin.review.delete', 'plugin.review.report', 'plugin.review.hold', 'plugin.review.release', 'plugin.review.remove', 'plugin.review.anonymize', 'plugin.review.reply.create', 'plugin.review.reply.update', 'plugin.review.reply.delete', 'plugin.submission.create', 'plugin.submission.verify', 'plugin.submission.gate-fail', 'plugin.submission.approve', 'plugin.submission.reject', 'plugin.submission.claim', 'plugin.submission.expire', 'plugin.advisory.create', 'plugin.advisory.update', 'plugin.advisory.publish', 'plugin.advisory.withdraw', 'plugin.security_notifications.update', 'plugin.security_notifications.external_email.verify', 'plugin.security_notifications.test'];
|
|
21
21
|
export type RemoteAuditAction = typeof REMOTE_AUDIT_ACTIONS[number];
|
|
22
22
|
/** Whether `value` is an action a remote service may emit (the ingest allow-list). */
|
|
23
23
|
export declare function isRemoteAuditAction(value: string): value is RemoteAuditAction;
|
|
@@ -27,6 +27,13 @@ export const REMOTE_AUDIT_ACTIONS = [
|
|
|
27
27
|
// the operator escape hatch `PLUGIN_ALLOW_UNSCANNED` is on (without it the
|
|
28
28
|
// build fails `IMAGE_SCAN_UNAVAILABLE`). `details` carry name/version/digest.
|
|
29
29
|
'plugin.scan.skipped',
|
|
30
|
+
// Fixable Critical findings were EXEMPTED from the platform floor by a
|
|
31
|
+
// `PLUGIN_VULN_WAIVERS` entry, so a build that would otherwise have failed
|
|
32
|
+
// PLUGIN_VULN_GATE was allowed through. The other half of plugin.scan.skipped:
|
|
33
|
+
// both are operator escape hatches that change a gate's verdict, and a metric
|
|
34
|
+
// and a log line are not a durable record of one. `details` carry
|
|
35
|
+
// name/version/digest, how many findings were waived and which packages.
|
|
36
|
+
'plugin.vuln.waived',
|
|
30
37
|
// Plugin lifecycle mutations (api/plugin route handlers) — the destructive /
|
|
31
38
|
// publishing surface that builds already audit's counterpart: registry delete,
|
|
32
39
|
// source upload, and deploy-to-cluster. `targetId` is the plugin id.
|
|
@@ -336,4 +343,4 @@ export const REMOTE_AUDIT_ACTIONS = [
|
|
|
336
343
|
export function isRemoteAuditAction(value) {
|
|
337
344
|
return REMOTE_AUDIT_ACTIONS.includes(value);
|
|
338
345
|
}
|
|
339
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWF1ZGl0LWFjdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcmVtb3RlLWF1ZGl0LWFjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7OztHQU9HO0FBR0g7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHO0lBQ2xDLHdCQUF3QjtJQUN4QixxQkFBcUI7SUFDckIsc0JBQXNCO0lBQ3RCLDhFQUE4RTtJQUM5RSwyRUFBMkU7SUFDM0UsOEVBQThFO0lBQzlFLHFCQUFxQjtJQUNyQiw2RUFBNkU7SUFDN0UsK0VBQStFO0lBQy9FLHFFQUFxRTtJQUNyRSxlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLDRFQUE0RTtJQUM1RSx3RUFBd0U7SUFDeEUsY0FBYztJQUNkLGVBQWU7SUFDZixlQUFlO0lBQ2YsZUFBZTtJQUNmLDhFQUE4RTtJQUM5RSw0RUFBNEU7SUFDNUUsb0JBQW9CO0lBQ3BCLG9CQUFvQjtJQUNwQixrQkFBa0I7SUFDbEIseUVBQXlFO0lBQ3pFLDRFQUE0RTtJQUM1RSw0RUFBNEU7SUFDNUUsdUVBQXVFO0lBQ3ZFLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsZ0VBQWdFO0lBQ2hFLHFFQUFxRTtJQUNyRSxvREFBb0Q7SUFDcEQsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsa0JBQWtCO0lBQ2xCLG1FQUFtRTtJQUNuRSw0RUFBNEU7SUFDNUUsMERBQTBEO0lBQzFELGdCQUFnQjtJQUNoQiwwQkFBMEI7SUFDMUIsMEJBQTBCO0lBQzFCLDBCQUEwQjtJQUMxQiwyQkFBMkI7SUFDM0IseUJBQXlCO0lBQ3pCLDBCQUEwQjtJQUMxQiwyQkFBMkI7SUFDM0IsaUZBQWlGO0lBQ2pGLG9GQUFvRjtJQUNwRiw0QkFBNEI7SUFDNUIsOEJBQThCO0lBQzlCLDJFQUEyRTtJQUMzRSww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QUN2Qix3QkFBd0I7SUFDeEIsdUJBQXVCO0lBQ3ZCLHFCQUFxQjtJQUNyQixtQkFBbUI7SUFDbkIsb0VBQW9FO0lBQ3BFLHdCQUF3QjtJQUN4Qix3QkFBd0I7SUFDeEIscUJBQXFCO0lBQ3JCLHVCQUF1QjtJQUN2Qix3QkFBd0I7SUFDeEIseUZBQXlGO0lBQ3pGLCtCQUErQjtJQUMvQiwrQkFBK0I7SUFDL0IsOEJBQThCO0lBQzlCLHVCQUF1QjtJQUN2QixrQ0FBa0M7SUFDbEMsdUJBQXVCO0lBQ3ZCLHNCQUFzQjtJQUN0QixzQkFBc0I7SUFDdEIsc0JBQXNCO0lBQ3RCLHNCQUFzQjtJQUN0QixvQkFBb0I7SUFDcEIsdUJBQXVCO0lBQ3ZCLHNCQUFzQjtJQUN0Qix5QkFBeUI7SUFDekIsNEJBQTRCO0lBQzVCLDRCQUE0QjtJQUM1Qiw0QkFBNEI7SUFDNUIseUJBQXlCO0lBQ3pCLDBCQUEwQjtJQUMxQiwwQkFBMEI7SUFDMUIsNkJBQTZCO0lBQzdCLDJCQUEyQjtJQUMzQiwwQkFBMEI7SUFDMUIseUJBQXlCO0lBQ3pCLDBCQUEwQjtJQUMxQix3RUFBd0U7SUFDeEUscURBQXFEO0lBQ3JELHdCQUF3QjtJQUN4Qix3QkFBd0I7SUFDeEIseUJBQXlCO0lBQ3pCLDBCQUEwQjtJQUMxQiwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLHVFQUF1RTtJQUN2RSwwRUFBMEU7SUFDMUUsc0NBQXNDO0lBQ3RDLHFEQUFxRDtJQUNyRCxvQ0FBb0M7Q0FDNUIsQ0FBQztBQUlYLHNGQUFzRjtBQUN0RixNQUFNLFVBQVUsbUJBQW1CLENBQUMsS0FBYTtJQUMvQyxPQUFRLG9CQUEwQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGhlIHJlbW90ZSAobm9uLXBsYXRmb3JtKSBhdWRpdCBBQ1RJT04gVk9DQUJVTEFSWS5cbiAqXG4gKiBLZXB0IGFwYXJ0IGZyb20gdGhlIGNsaWVudCB0aGF0IHNoaXBzIHRoZSBldmVudHMgKGBzZXJ2aWNlcy9yZW1vdGUtYXVkaXQtY2xpZW50LnRzYClcbiAqIGJlY2F1c2UgaXQgaXMgYW4gYWxsb3ctbGlzdCwgbm90IG1hY2hpbmVyeTogaXQgaXMgdGhlIHRoaW5nIGEgcmV2aWV3ZXIgcmVhZHNcbiAqIGVuZCB0byBlbmQgd2hlbiBkZWNpZGluZyB3aGV0aGVyIGEgc2VydmljZSBtYXkgZW1pdCBhIGdpdmVuIGFjdGlvbiwgYW5kIGl0IGlzXG4gKiB3aGF0IHBsYXRmb3JtJ3MgaW5nZXN0IHZhbGlkYXRlcyBhZ2FpbnN0LlxuICovXG5cblxuLyoqXG4gKiBUaGUgZXhhY3Qgc2V0IG9mIGF1ZGl0IGFjdGlvbnMgYSBOT04tUExBVEZPUk0gKHJlbW90ZSkgc2VydmljZSBpcyBwZXJtaXR0ZWQgdG9cbiAqIGVtaXQgdGhyb3VnaCBgUE9TVCAvYXVkaXQvZXZlbnRzYC4gVGhpcyBpcyB0aGUgU0lOR0xFIFNPVVJDRSDigJQgYFJlbW90ZUF1ZGl0QWN0aW9uYFxuICogaXMgZGVyaXZlZCBmcm9tIGl0LCBzbyB0aGUgdHlwZSBhbmQgdGhlIHJ1bnRpbWUgYWxsb3ctbGlzdCBjYW4gbmV2ZXIgZHJpZnQuXG4gKlxuICogU0VDVVJJVFk6IHBsYXRmb3JtJ3MgaW5nZXN0IHZhbGlkYXRlcyBgYWN0aW9uYCBhZ2FpbnN0IHRoaXMgc3Vic2V0ICh2aWFcbiAqIHtAbGluayBpc1JlbW90ZUF1ZGl0QWN0aW9ufSksIE5PVCB0aGUgZnVsbCBwbGF0Zm9ybSBgQXVkaXRBY3Rpb25gIHVuaW9uIOKAlCBhXG4gKiBgc2VydmljZToqYCB0b2tlbiBtdXN0IG5vdCBiZSBhYmxlIHRvIGZvcmdlIHBsYXRmb3JtLWF1dGhvcml0eSBldmVudHNcbiAqIChgYWRtaW4uc3VwZXJhZG1pbi5ncmFudGAsIGBvcmcub3duZXJzaGlwLnRyYW5zZmVyYCwgYHVzZXIubG9naW5gLCDigKYpLiBLZWVwXG4gKiB0aGlzIGxpc3QgZnJlZSBvZiBhbnkgcGxhdGZvcm0tb25seSBhY3Rpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBSRU1PVEVfQVVESVRfQUNUSU9OUyA9IFtcbiAgJ3BsdWdpbi5idWlsZC5jb21wbGV0ZWQnLFxuICAncGx1Z2luLmJ1aWxkLmZhaWxlZCcsXG4gICdwbHVnaW4uYnVpbGQudGltZW91dCcsXG4gIC8vIEEgdmVyc2lvbiBwZXJzaXN0ZWQgVU5TQ0FOTkVEIGJlY2F1c2UgdGhlIGJ1aWxkLXRpbWUgc2NhbiBjb3VsZCBub3QgcnVuIGFuZFxuICAvLyB0aGUgb3BlcmF0b3IgZXNjYXBlIGhhdGNoIGBQTFVHSU5fQUxMT1dfVU5TQ0FOTkVEYCBpcyBvbiAod2l0aG91dCBpdCB0aGVcbiAgLy8gYnVpbGQgZmFpbHMgYElNQUdFX1NDQU5fVU5BVkFJTEFCTEVgKS4gYGRldGFpbHNgIGNhcnJ5IG5hbWUvdmVyc2lvbi9kaWdlc3QuXG4gICdwbHVnaW4uc2Nhbi5za2lwcGVkJyxcbiAgLy8gUGx1Z2luIGxpZmVjeWNsZSBtdXRhdGlvbnMgKGFwaS9wbHVnaW4gcm91dGUgaGFuZGxlcnMpIOKAlCB0aGUgZGVzdHJ1Y3RpdmUgL1xuICAvLyBwdWJsaXNoaW5nIHN1cmZhY2UgdGhhdCBidWlsZHMgYWxyZWFkeSBhdWRpdCdzIGNvdW50ZXJwYXJ0OiByZWdpc3RyeSBkZWxldGUsXG4gIC8vIHNvdXJjZSB1cGxvYWQsIGFuZCBkZXBsb3ktdG8tY2x1c3Rlci4gYHRhcmdldElkYCBpcyB0aGUgcGx1Z2luIGlkLlxuICAncGx1Z2luLmRlbGV0ZScsXG4gICdwbHVnaW4ucmVzdG9yZScsXG4gIC8vIE1hbnVhbCBwdXJnZTogcGVybWFuZW50IGhhcmQtZGVsZXRlIG9mIGEgc29mdC1kZWxldGVkIHBsdWdpbiB0b21ic3RvbmUgb25cbiAgLy8gZGVtYW5kIChmaW5hbGl6ZXMgd2hhdCB0aGUgcmV0ZW50aW9uIHN3ZWVwIHdvdWxkIG90aGVyd2lzZSBkbyBsYXRlcikuXG4gICdwbHVnaW4ucHVyZ2UnLFxuICAncGx1Z2luLnVwZGF0ZScsXG4gICdwbHVnaW4udXBsb2FkJyxcbiAgJ3BsdWdpbi5kZXBsb3knLFxuICAvLyBQbHVnaW4gYnVsayBtdXRhdGlvbnMgKGFwaS9wbHVnaW4gYnVsay1wbHVnaW4gcm91dGUpICsgRExRIHB1cmdlIChkcm9wcyBhbGxcbiAgLy8gZGVhZC1sZXR0ZXJlZCBidWlsZCBqb2JzLCBjcm9zcy1vcmcsIHN5c2FkbWluKS4gYGRldGFpbHNgIGNhcnJpZXMgY291bnRzLlxuICAncGx1Z2luLmJ1bGsudXBkYXRlJyxcbiAgJ3BsdWdpbi5idWxrLmRlbGV0ZScsXG4gICdwbHVnaW4uZGxxLnB1cmdlJyxcbiAgLy8gQnVpbGQgcmUtcnVucyBmcm9tIHRoZSBxdWV1ZS10cmlhZ2Ugc3VyZmFjZTogcmUtZW5xdWV1ZSBhIEZBSUxFRCBidWlsZFxuICAvLyAoYHBsdWdpbi5idWlsZC5yZXRyeWApIG9yIGEgZGVhZC1sZXR0ZXJlZCBvbmUgKGBwbHVnaW4uZGxxLnJlcGxheWApLiBCb3RoXG4gIC8vIHJlLXJ1biBhbiBpbWFnZSBidWlsZCArIHBsdWdpbiBwZXJzaXN0IG9uIHRoZSBjYWxsZXIncyBhdXRob3JpdHksIHNvIHRoZXlcbiAgLy8gYXJlIGF1ZGl0ZWQgbXV0YXRpb25zOyBgYWZmZWN0ZWRPcmdJZGAgY2FycmllcyB0aGUgam9iJ3Mgb3duaW5nIG9yZy5cbiAgJ3BsdWdpbi5idWlsZC5yZXRyeScsXG4gICdwbHVnaW4uZGxxLnJlcGxheScsXG4gIC8vIFBpcGVsaW5lIG11dGF0aW9ucyDigJQgZW1pdHRlZCBieSBhcGkvcGlwZWxpbmUncyByb3V0ZSBoYW5kbGVyc1xuICAvLyAoY3JlYXRlL3VwZGF0ZS9kZWxldGUgKyBDb2RlUGlwZWxpbmUgZXhlY3V0aW9uIHRyaWdnZXIvY2FuY2VsKSBhbmRcbiAgLy8gcG9zdGVkIHRvIHBsYXRmb3JtJ3MgYFBPU1QgL2F1ZGl0L2V2ZW50c2AgaW5nZXN0LlxuICAncGlwZWxpbmUuY3JlYXRlJyxcbiAgJ3BpcGVsaW5lLnVwZGF0ZScsXG4gICdwaXBlbGluZS5kZWxldGUnLFxuICAncGlwZWxpbmUucmVzdG9yZScsXG4gIC8vIE1hbnVhbCBwdXJnZTogcGVybWFuZW50IGhhcmQtZGVsZXRlIG9mIGEgc29mdC1kZWxldGVkIHBpcGVsaW5lIC9cbiAgLy8gcGlwZWxpbmVfdGVtcGxhdGUgdG9tYnN0b25lIG9uIGRlbWFuZCAoZmluYWxpemVzIHdoYXQgdGhlIHJldGVudGlvbiBzd2VlcFxuICAvLyB3b3VsZCBvdGhlcndpc2UgZG8gbGF0ZXIpLiBgdGFyZ2V0SWRgIGlzIHRoZSBwdXJnZWQgaWQuXG4gICdwaXBlbGluZS5wdXJnZScsXG4gICdwaXBlbGluZV90ZW1wbGF0ZS5jcmVhdGUnLFxuICAncGlwZWxpbmVfdGVtcGxhdGUudXBkYXRlJyxcbiAgJ3BpcGVsaW5lX3RlbXBsYXRlLmRlbGV0ZScsXG4gICdwaXBlbGluZV90ZW1wbGF0ZS5yZXN0b3JlJyxcbiAgJ3BpcGVsaW5lX3RlbXBsYXRlLnB1cmdlJyxcbiAgJ3BpcGVsaW5lLmV4ZWN1dGlvbi5zdGFydCcsXG4gICdwaXBlbGluZS5leGVjdXRpb24uY2FuY2VsJyxcbiAgLy8gQ29kZVBpcGVsaW5lIEFSTi1yZWdpc3RyeSBjb25maWcgKGFwaS9waXBlbGluZSByZWdpc3RyeSByb3V0ZSkg4oCUIHJlZ2lzdGVyaW5nIC9cbiAgLy8gZGVyZWdpc3RlcmluZyB0aGUgZXh0ZXJuYWwgQ29kZVBpcGVsaW5lIHRoYXQgYmFja3MgYSBwaXBlbGluZSAoZGVwbG95LWFmZmVjdGluZykuXG4gICdwaXBlbGluZS5yZWdpc3RyeS5yZWdpc3RlcicsXG4gICdwaXBlbGluZS5yZWdpc3RyeS5kZXJlZ2lzdGVyJyxcbiAgLy8gUXVvdGEgYWRtaW5pc3RyYXRpb24gKGFwaS9xdW90YSkg4oCUIGEgc3VwZXJhZG1pbiByZXNldHRpbmcgYW4gb3JnJ3MgdXNhZ2VcbiAgLy8gY291bnRlciBvciBlZGl0aW5nIGl0cyB0aWVyIGxpbWl0cy4gYGFmZmVjdGVkT3JnSWRgIGlzIHRoZSBvcmcgY2hhbmdlZDtcbiAgLy8gYGRldGFpbHNgIGNhcnJpZXMgdGhlIHF1b3RhVHlwZSArIG9sZC9uZXcgdmFsdWUuXG4gICdxdW90YS5yZXNldCcsXG4gICdxdW90YS5saW1pdC51cGRhdGUnLFxuICAvLyBBIHN1cGVyYWRtaW4gZGVsZXRpbmcgYW4gb3JnJ3MgZW50aXJlIHF1b3RhIGRvY3VtZW50LlxuICAncXVvdGEuZGVsZXRlJyxcbiAgLy8gQ29tcGxpYW5jZSBhZG1pbmlzdHJhdGlvbiAoYXBpL2NvbXBsaWFuY2UpIOKAlCB0aGUgZW5mb3JjZW1lbnQtcG9zdHVyZSBzdXJmYWNlLlxuICAvLyBBcHByb3ZpbmcvcmV2b2tpbmcgYW4gZXhlbXB0aW9uLCB0b2dnbGluZy9hdXRob3JpbmcvZGVsZXRpbmcgYSBydWxlLFxuICAvLyBhdXRob3JpbmcvZGVsZXRpbmcgYSBwb2xpY3ksIG1hbmFnaW5nIHNjYW4gc2NoZWR1bGVzLCBhcHBseWluZyBhIHRlbXBsYXRlLFxuICAvLyBvciBjYW5jZWxsaW5nIGEgcnVubmluZyBzY2FuLiBgdGFyZ2V0SWRgIGlzIHRoZSBydWxlL3BvbGljeS9leGVtcHRpb24vc2NhbiBpZC5cbiAgJ2NvbXBsaWFuY2UuZXhlbXB0aW9uLmFwcHJvdmUnLFxuICAnY29tcGxpYW5jZS5leGVtcHRpb24ucmV2b2tlJyxcbiAgJ2NvbXBsaWFuY2UucnVsZS50b2dnbGUnLFxuICAnY29tcGxpYW5jZS5ydWxlLmNyZWF0ZScsXG4gICdjb21wbGlhbmNlLnJ1bGUudXBkYXRlJyxcbiAgJ2NvbXBsaWFuY2UucnVsZS5kZWxldGUnLFxuICAnY29tcGxpYW5jZS5ydWxlLnJlc3RvcmUnLFxuICAvLyBNYW51YWwgb24tZGVtYW5kIGhhcmQtZGVsZXRlIChQVVJHRSkgb2YgYSBzb2Z0LWRlbGV0ZWQgcnVsZS9wb2xpY3kgdG9tYnN0b25lIOKAlFxuICAvLyB0aGUgY2FsbGVyLWluaXRpYXRlZCBjb3VudGVycGFydCB0byB0aGUgcmV0ZW50aW9uIHN3ZWVwJ3MgYXV0by1wdXJnZS4gRGVzdHJveXNcbiAgLy8gdGhlIHRvbWJzdG9uZSBwZXJtYW5lbnRseSwgc28gaXQgY2FycmllcyB0aGUgZHVyYWJsZSwgdGFtcGVyLWV2aWRlbnQgdHJhaWwuXG4gICdjb21wbGlhbmNlLnJ1bGUucHVyZ2UnLFxuICAnY29tcGxpYW5jZS5wb2xpY3kuY3JlYXRlJyxcbiAgJ2NvbXBsaWFuY2UucG9saWN5LnVwZGF0ZScsXG4gICdjb21wbGlhbmNlLnBvbGljeS5kZWxldGUnLFxuICAnY29tcGxpYW5jZS5wb2xpY3kucmVzdG9yZScsXG4gICdjb21wbGlhbmNlLnBvbGljeS5wdXJnZScsXG4gICdjb21wbGlhbmNlLnNjYW4tc2NoZWR1bGUuY3JlYXRlJyxcbiAgJ2NvbXBsaWFuY2Uuc2Nhbi1zY2hlZHVsZS51cGRhdGUnLFxuICAnY29tcGxpYW5jZS5zY2FuLXNjaGVkdWxlLmRlbGV0ZScsXG4gICdjb21wbGlhbmNlLnRlbXBsYXRlLmFwcGx5JyxcbiAgLy8gTGF1bmNoaW5nIGFuIG9yZy13aWRlIHJlLWV2YWx1YXRpb24gKHRoZSBjb3VudGVycGFydCB0byBgLmNhbmNlbGApIOKAlCBpdFxuICAvLyBwZXJzaXN0cyBhIHNjYW4gYW5kIGNhbiBibG9jayBlbnRpdGllcyB0aGF0IHBhc3NlZCBiZWZvcmUuXG4gICdjb21wbGlhbmNlLnNjYW4uY3JlYXRlJyxcbiAgJ2NvbXBsaWFuY2Uuc2Nhbi5jYW5jZWwnLFxuICAvLyBQZXItb3JnIGNvbXBsaWFuY2Ugbm90aWZpY2F0aW9uIHNldHRpbmdzOiByZWNpcGllbnRzICsgdGhlIG91dGJvdW5kIHdlYmhvb2tcbiAgLy8gVVJML3NlY3JldC4gQmVhcmVyLWVxdWl2YWxlbnQgY29uZmlnIHRoYXQgcmVkaXJlY3RzIHZpb2xhdGlvbiBub3RpY2VzLCBzbyBhXG4gIC8vIGNoYW5nZSBjYXJyaWVzIHRoZSBkdXJhYmxlIHRyYWlsIChuZXZlciB0aGUgc2VjcmV0IGl0c2VsZikuXG4gICdjb21wbGlhbmNlLm5vdGlmaWNhdGlvbi1wcmVmZXJlbmNlLnVwZGF0ZScsXG4gIC8vIEltYWdlLXJlZ2lzdHJ5IGRlc3RydWN0aXZlIG9wcyAoYXBpL2ltYWdlLXJlZ2lzdHJ5KSDigJQgZ2FyYmFnZS1jb2xsZWN0aW9uXG4gIC8vIHN3ZWVwcyBhbmQgZXhwbGljaXQgaW1hZ2UvdGFnIGRlbGV0ZXMuXG4gICdyZWdpc3RyeS5nYycsXG4gICdyZWdpc3RyeS5pbWFnZS5kZWxldGUnLFxuICAvLyBDcm9zcy1yZXBvIHRhZy9pbWFnZSBjb3B5IChhcGkvaW1hZ2UtcmVnaXN0cnkgUE9TVCAvYXBpL2ltYWdlcy9jb3B5KS4gQVxuICAvLyBjcm9zcy10ZW5hbnQgY29weSBtb3ZlcyBkYXRhIGFjcm9zcyBjdXN0b21lciBib3VuZGFyaWVzLCBzbyBpdCBuZWVkcyB0aGVcbiAgLy8gZHVyYWJsZSwgdGFtcGVyLWV2aWRlbnQgdHJhaWwg4oCUIG5vdCBqdXN0IHRoZSBMb2tpIG9wZXJhdG9yIGxpbmUuXG4gICdyZWdpc3RyeS5pbWFnZS5jb3B5JyxcbiAgLy8gQSBwbHVnaW4gaW1hZ2Ugc2lnbmVkICsgU0JPTS1hdHRlc3RlZCBieSB0aGUgcGxhdGZvcm0ncyBwbHVnaW4tc2lnbmluZyBrZXlcbiAgLy8gKGFwaS9pbWFnZS1yZWdpc3RyeSBQT1NUIC9pbnRlcm5hbC9wbHVnaW4tc2lnbmF0dXJlcywgY2FsbGVkIGJ5IHRoZSBwbHVnaW5cbiAgLy8gYnVpbGQgd29ya2VyKS4gVGhlIGtleSBpcyB3aGF0IHN5bnRoIHRydXN0cywgc28gZXZlcnkgdXNlIGlzIG9uIHRoZSB0cmFpbC5cbiAgJ3JlZ2lzdHJ5LmltYWdlLnNpZ24nLFxuICAvLyBNZXNzYWdpbmcgKGFwaS9tZXNzYWdlKSDigJQgYWRtaW4gQlJPQURDQVNUIGFubm91bmNlbWVudHMgKyBkZXN0cnVjdGl2ZVxuICAvLyBkZWxldGVzLiAxOjEgdXNlciBtZXNzYWdlcyBhcmUgaW50ZW50aW9uYWxseSBOT1QgYXVkaXRlZCAobm9pc2UgKyB0aGV5IHdvdWxkXG4gIC8vIHB1bGwgcHJpdmF0ZSBjb250ZW50IGludG8gdGhlIHRyYWlsKS4gYGRldGFpbHNgIGNhcnJ5IG1ldGFkYXRhIG9ubHlcbiAgLy8gKHN1YmplY3QvdHlwZS9zY29wZSksIE5FVkVSIG1lc3NhZ2UgYm9keSBjb250ZW50LlxuICAnbWVzc2FnZS5hbm5vdW5jZW1lbnQuY3JlYXRlJyxcbiAgJ21lc3NhZ2UuZGVsZXRlJyxcbiAgJ21lc3NhZ2UucmVzdG9yZScsXG4gIC8vIE1hbnVhbCBvbi1kZW1hbmQgUFVSR0UgKHBlcm1hbmVudCBoYXJkLWRlbGV0ZSkgb2YgYW4gYWxyZWFkeS1zb2Z0LWRlbGV0ZWRcbiAgLy8gbWVzc2FnZSB0b21ic3RvbmUg4oCUIHRoZSBkZXN0cnVjdGl2ZSBmaW5hbGl6ZXIgdGhlIHJldGVudGlvbiBzd2VlcCB3b3VsZFxuICAvLyBvdGhlcndpc2UgcGVyZm9ybSBhdCB0aGUgcHVyZ2UgZGVhZGxpbmUuIGBkZXRhaWxzYCBjYXJyeSBtZXRhZGF0YSBvbmx5LlxuICAnbWVzc2FnZS5wdXJnZScsXG4gIC8vIEJpbGxpbmcgKGFwaS9iaWxsaW5nKSDigJQgc3Vic2NyaXB0aW9uICsgZW50aXRsZW1lbnQgbXV0YXRpb25zLCBtaXJyb3JlZCB0byB0aGVcbiAgLy8gY2VudHJhbCBhdWRpdCB0cmFpbCAodGhlc2UgYWxzbyB3cml0ZSB0byB0aGUgc2VydmljZS1sb2NhbCBiaWxsaW5nX2V2ZW50c1xuICAvLyBjb2xsZWN0aW9uKS4gYGRldGFpbHNgIGNhcnJ5IHBsYW4vdGllci9hZGRvbiBpZHMgb25seSDigJQgbmV2ZXIgY2FyZC9wYXltZW50XG4gIC8vIHNlY3JldHMgb3IgYW4gQVdTIGFjY291bnQgaWQuXG4gIC8vIFN1YnNjcmlwdGlvbiBsaWZlY3ljbGUgYSBDVVNUT01FUiBkcml2ZXMgKHRoZSBhZG1pbiBjb3VudGVycGFydCBpc1xuICAvLyBgYmlsbGluZy50aWVyLm92ZXJyaWRlYCk6IHNlbGYtc2VydmUgY3JlYXRlIChkaXJlY3Qgb3IgTWFya2V0cGxhY2UgY2xhaW0pLFxuICAvLyBwbGFuL2ludGVydmFsIGNoYW5nZSwgY2FuY2VsLWF0LXBlcmlvZC1lbmQsIHVuZG8tY2FuY2VsLCBjYXNjYWRlIGRlbGV0ZS5cbiAgJ2JpbGxpbmcuc3Vic2NyaXB0aW9uLmNyZWF0ZScsXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi51cGRhdGUnLFxuICAnYmlsbGluZy5zdWJzY3JpcHRpb24ucmVhY3RpdmF0ZScsXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi5jYW5jZWwnLFxuICAnYmlsbGluZy5zdWJzY3JpcHRpb24uZGVsZXRlJyxcbiAgJ2JpbGxpbmcudGllci5vdmVycmlkZScsXG4gIC8vIE9wZXJhdG9yLW9ubHkgcmVzZWVkIG9mIHRoZSBpbnZvaWNlIGxlZGdlciBmcm9tIHRoZSBwYXltZW50IHByb3ZpZGVyJ3NcbiAgLy8gaGlzdG9yeSAoUE9TVCAvYmlsbGluZy9hZG1pbi9iYWNrZmlsbCkg4oCUIG11dGF0ZXMgZmluYW5jZSBkYXRhIGZsZWV0LXdpZGUuXG4gICdiaWxsaW5nLmFkZG9uLmFkZCcsXG4gICdiaWxsaW5nLmFkZG9uLnJlbW92ZScsXG4gIC8vIFN5c3RlbS1pbml0aWF0ZWQgcmVtb3ZhbCBvZiBhIHRpZXItaW5jbHVkZWQgYWRkLW9uIG9uIGEgcGxhbiB1cGdyYWRlICh0aGVcbiAgLy8gYWNjb3VudCdzIG5ldyB0aWVyIG5vdyBidW5kbGVzIHRoZSBmZWF0dXJlKSDigJQgZGlzdGluY3QgZnJvbSBhIHVzZXItaW5pdGlhdGVkXG4gIC8vIGByZW1vdmVgIHNvIGZpbmFuY2UgY2FuIHRlbGwgYW4gYXV0by1wcnVuZSBmcm9tIGEgY3VzdG9tZXIgYWN0aW9uLlxuICAnYmlsbGluZy5hZGRvbi5wcnVuZScsXG4gIC8vIERpc2NvdW50cyAoZG9jcy9iaWxsaW5nLWRpc2NvdW50cy5tZCkg4oCUIG1pbnQvaXNzdWUvYXBwbHkvcmVtb3ZlL3Jldm9rZSBvZiBhXG4gIC8vIHByaWNlIGNvdXBvbiBvciB1c2FnZSBjcmVkaXQuIGBkZXRhaWxzYCBjYXJyeSB0aGUgZGlzY291bnQgaWQgKyBraW5kL3ZhbHVlXG4gIC8vIG9ubHksIG5ldmVyIHRoZSBvcGFxdWUgdG9rZW4gb3Igc2lnbmluZyBrZXkuXG4gICdiaWxsaW5nLmRpc2NvdW50LmdlbmVyYXRlJyxcbiAgJ2JpbGxpbmcuZGlzY291bnQuaXNzdWUnLFxuICAnYmlsbGluZy5kaXNjb3VudC5hcHBseScsXG4gICdiaWxsaW5nLmRpc2NvdW50LnJlbW92ZScsXG4gICdiaWxsaW5nLmRpc2NvdW50LnJldm9rZScsXG4gIC8vIFByb21vdGlvbnMgKGRvY3MvYmlsbGluZy1kaXNjb3VudHMubWQjcHJvbW90aW9ucykg4oCUIHJ1bGUtZHJpdmVuIGF1dG8tZ3JhbnRcbiAgLy8gY2FtcGFpZ25zLiBgZGV0YWlsc2AgY2FycnkgdGhlIHByb21vdGlvbiBpZCArIGNlbnRzL2V2ZW50IG9ubHkuXG4gICdiaWxsaW5nLnByb21vdGlvbi5jcmVhdGUnLFxuICAnYmlsbGluZy5wcm9tb3Rpb24udXBkYXRlJyxcbiAgJ2JpbGxpbmcucHJvbW90aW9uLnJldm9rZScsXG4gICdiaWxsaW5nLnByb21vdGlvbi5ncmFudCcsXG4gICdiaWxsaW5nLnByb21vdGlvbi5hY3RpdmF0ZScsXG4gIC8vIFVzYWdlLWNyZWRpdCByZWFsaXphdGlvbiDigJQgYSBjdXN0b21lci9jb21wbGlhbmNlLXZpc2libGUgcmVjb3JkIG9mIGNyZWRpdFxuICAvLyBtb3ZlbWVudDogYGNvbnN1bWVkYCAoTWFya2V0cGxhY2UgbWV0ZXJlZCBkcmF3ZG93biksIGBleGhhdXN0ZWRgIChiYWxhbmNlIGhpdFxuICAvLyB6ZXJvKSwgYW5kIGEgY29tYm8gZW5kaW5nLiBgZGV0YWlsc2AgY2FycnkgY2VudHMvaWRzIG9ubHksIG5vIHBheW1lbnQgc2VjcmV0cy5cbiAgJ2JpbGxpbmcuY3JlZGl0LmNvbnN1bWVkJyxcbiAgJ2JpbGxpbmcuY3JlZGl0LmV4aGF1c3RlZCcsXG4gICdiaWxsaW5nLmNvbWJvLmV4cGlyZWQnLFxuICAvLyBSZXBvcnRpbmcgKGFwaS9yZXBvcnRpbmcpIOKAlCB0aGUgdGhyZWUgcmVwb3J0aW5nIG11dGF0aW9ucyB3aG9zZSBlZmZlY3RcbiAgLy8gb3V0bGl2ZXMgYSByZXF1ZXN0IGxvZzogdGhlIHBlci1vcmcgY29ycmVsYXRpb24td2luZG93IGNvbmZpZyB3cml0ZSwgYVxuICAvLyBwb3N0LWRlcGxveSBvdXRjb21lIG1hcmtlciAoaXQgbW92ZXMgdGhlIG9yZydzIERPUkEgQ0ZSL01UVFIpLCBhbmQgdGhlXG4gIC8vIGluYm91bmQgYmlsbGluZ+KGknJlcG9ydGluZyByZXRlbnRpb24tZW50aXRsZW1lbnQgc3luYyAoYSByZXRlbnRpb24gY3V0IGlzIGFcbiAgLy8gZGF0YS1kZXN0cm95aW5nIGNoYW5nZSBhcHBsaWVkIGJ5IHRoZSBuZXh0IHN3ZWVwKS4gYGRldGFpbHNgIGNhcnJ5IHRoZVxuICAvLyBzZXR0aW5ncy9vdXRjb21lIHZhbHVlcyBvbmx5LlxuICAncmVwb3J0aW5nLnNldHRpbmdzLnVwZGF0ZScsXG4gICdyZXBvcnRpbmcuZGVwbG95bWVudC5vdXRjb21lJyxcbiAgJ3JlcG9ydGluZy5yZXRlbnRpb24uc3luYycsXG4gIC8vIFN0YWtlaG9sZGVyIHJlcG9ydHMg4oCUIHRoZSBhZGQtb24ncyBhdXRob3JpbmcgYW5kIFBVQkxJU0hJTkcgc3VyZmFjZS4gUHVibGlzaGluZ1xuICAvLyBpcyB0aGUgbW9tZW50IGludGVybmFsIGRlbGl2ZXJ5IG51bWJlcnMgbGVhdmUgdGhlIHBsYXRmb3JtLCBzbyB0aGUgd2hvbGVcbiAgLy8gb3V0d2FyZCBwYXRoIGlzIGF1ZGl0YWJsZTogd2hpY2ggcmVwb3J0LCB3aGljaCBwZXJpb2QncyBmcm96ZW4gc25hcHNob3QsXG4gIC8vIHdoaWNoIHZlcnNpb24sIGFuZCB3aG8gbGV0IGl0IG91dC4gYGxpbmsuY3JlYXRlZGAgLyBgbGluay5yZXZva2VkYCBjb3ZlciB0aGVcbiAgLy8gVVJMcyB0aGF0IGxldCBzb21lb25lIHdpdGhvdXQgYW4gYWNjb3VudCByZWFkIGl0OyBgcmVjaXBpZW50LmFkZGVkYCAvXG4gIC8vIGByZWNpcGllbnQucmVtb3ZlZGAgY292ZXIgd2hvIGlzIG9uIHRoZSBkaXN0cmlidXRpb24gbGlzdCwgd2hpY2ggaXMgdGhlIG90aGVyXG4gIC8vIHdheSBkYXRhIHJlYWNoZXMgYSBwZXJzb24uIGBvd25lcnNoaXAudHJhbnNmZXJgIGlzIGEgcHJpdmlsZWdlIG1vdmU6IGFcbiAgLy8gc2NoZWR1bGVkIHJ1biBpcyBhdXRob3JpemVkIGFzIGl0cyBPV05FUiwgc28gaGFuZGluZyBhIGRlZmluaXRpb24gb3ZlciBoYW5kc1xuICAvLyBvdmVyIHdob3NlIGFjY2VzcyB0aGUgbnVtYmVycyBhcmUgY29tcHV0ZWQgd2l0aC5cbiAgLy9cbiAgLy8gRGVsaWJlcmF0ZWx5IE5PVCBhdWRpdGVkOiByZWFkaW5nIGEgc2hhcmVkIHJlcG9ydC4gVGhlIGFjY2VzcyBpcyBsb2dnZWQgYW5kXG4gIC8vIGNvdW50ZWQgcGVyIGxpbmssIGJ1dCBpdCBpcyBhbiBVTkFVVEhFTlRJQ0FURUQsIGV4dGVybmFsbHktdHJpZ2dlcmVkIGV2ZW50IOKAlFxuICAvLyBhbnlvbmUgaG9sZGluZyBhIFVSTCBjb3VsZCBvdGhlcndpc2Ugd3JpdGUgdW5ib3VuZGVkIHJvd3MgaW50byB0aGUgb3JnJ3MgYXVkaXRcbiAgLy8gdHJhaWwsIHdoaWNoIHR1cm5zIGEgcmVhZCBpbnRvIGEgd2F5IHRvIGJ1cnkgdGhlIGVudHJpZXMgdGhhdCBtYXR0ZXIuXG4gICdyZXBvcnRpbmcucmVwb3J0LmRlZmluaXRpb24uY3JlYXRlJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQuZGVmaW5pdGlvbi51cGRhdGUnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5kZWZpbml0aW9uLmRlbGV0ZScsXG4gICdyZXBvcnRpbmcucmVwb3J0Lm93bmVyc2hpcC50cmFuc2ZlcicsXG4gICdyZXBvcnRpbmcucmVwb3J0LnB1Ymxpc2hlZCcsXG4gICdyZXBvcnRpbmcucmVwb3J0LnJlcHVibGlzaGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQubGluay5jcmVhdGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQubGluay5yZXZva2VkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVjaXBpZW50LmFkZGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVjaXBpZW50LnJlbW92ZWQnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5wb2xpY3kudXBkYXRlJyxcbiAgLy8gQSBkZWZpbml0aW9uIFNUT1BQRUQgcHJvZHVjaW5nIHJlcG9ydHMgd2l0aG91dCBhbnlvbmUgYXNraW5nIGl0IHRvOiB0aGUgb3duZXJcbiAgLy8gd2FzIGRlYWN0aXZhdGVkIG9yIHJlbW92ZWQsIG9yIGxvc3QgdGhlIHBlcm1pc3Npb24gYSBydW4gaXMgYXV0aG9yaXplZCB3aXRoLlxuICAvLyBSZWNvcmRlZCBiZWNhdXNlIHRoZSBlZmZlY3QgaXMgc2lsZW50IOKAlCBhIG1hbmFnZXIgZmluZHMgb3V0IGJ5IG5vdCByZWNlaXZpbmdcbiAgLy8gdGhlIHJlcG9ydCDigJQgc28gdGhlIHRyYWlsIGhhcyB0byBzYXkgd2hpY2ggcmVwb3J0cyBzdG9wcGVkIGFuZCB3aHkuXG4gICdyZXBvcnRpbmcucmVwb3J0LnBhdXNlZCcsXG4gIC8vIOKApmFuZCBzdGFydGVkIGFnYWluLiBJdHMgb3duIGFjdGlvbiByYXRoZXIgdGhhbiBhIGRldGFpbCBvbiB0aGUgcGF1c2UsIGJlY2F1c2UgdGhlXG4gIC8vIHF1ZXN0aW9uIGEgcmV2aWV3ZXIgYXNrcyBpcyBcIndhcyB0aGlzIGFjY291bnQncyByZXBvcnRpbmcgb2ZmIGJldHdlZW4gdGhlc2UgdHdvXG4gIC8vIGRhdGVzXCIsIGFuZCBhbnN3ZXJpbmcgaXQgZnJvbSBhIHNpbmdsZSBhY3Rpb24ncyBkZXRhaWxzIG1lYW5zIHJlYWRpbmcgZXZlcnkgcm93LlxuICAncmVwb3J0aW5nLnJlcG9ydC5yZXN1bWVkJyxcbiAgLy8gRGVuaWVkIGF1dGhvcml6YXRpb24gYXR0ZW1wdCDigJQgZW1pdHRlZCBiZXN0LWVmZm9ydCBieSB0aGUgc2hhcmVkXG4gIC8vIGByZXF1aXJlUGVybWlzc2lvbmAgLyBgcmVxdWlyZVN5c3RlbUFkbWluYCBnYXRlIHdoZW4gYSBzdGF0ZS1jaGFuZ2luZ1xuICAvLyAobm9uLUdFVCkgcmVxdWVzdCBpcyByZWplY3RlZCwgc28gcHJvYmluZy9lc2NhbGF0aW9uIGF0dGVtcHRzIGFyZSB2aXNpYmxlXG4gIC8vIHJhdGhlciB0aGFuIGludmlzaWJsZS4gYGRldGFpbHNgIGNhcnJpZXMgdGhlIHJlcXVpcmVkIHBlcm1pc3Npb24gKyBwYXRoO1xuICAvLyBgb3V0Y29tZWAgaXMgJ2ZhaWx1cmUnLlxuICAnYXV0aHouZGVuaWVkJyxcbiAgLy8gXCJBc2tcIiBhc3Npc3RhbnQgYWN0aXZpdHkg4oCUIHZpc2liaWxpdHkgaW50byB3aGF0IHRoZSBhc3Npc3RhbnQgZGlkIG9uIGEgdXNlcidzXG4gIC8vIGJlaGFsZi4gYGFzay5xdWVyeWAgaXMgYSByZWFkLW9ubHkgaG93LXRvIHR1cm47IGBhc2suYWdlbnQudHVybmAgaXMgYSB0b29sLWNhbGxpbmdcbiAgLy8gdHVybi4gYGRldGFpbHNgIGNhcnJ5IFNBRkUgTUVUQURBVEEgT05MWSAodG9vbHMgdXNlZCwgcHJvcG9zYWwga2luZHMsIHF1ZXJ5XG4gIC8vIGxlbmd0aCwgb3V0Y29tZSksIG5ldmVyIHRoZSByYXcgcXVlcnkgdGV4dC5cbiAgJ2Fzay5xdWVyeScsXG4gICdhc2suYWdlbnQudHVybicsXG4gIC8vIFBsdWdpbiBlY29zeXN0ZW0gKGRvY3MvcnVuYm9va3MvZWNvc3lzdGVtLW1vZGVyYXRpb24ubWQpLiBHb3Zlcm5hbmNlIGFjdGlvbnNcbiAgLy8gYXJlIHJlY29yZGVkIHdpdGggYG9yZ0lkYCA9IHRoZSBzeXN0ZW0gb3JnOyBgYWZmZWN0ZWRPcmdJZGAgaXMgdGhlXG4gIC8vIHB1Ymxpc2hlcidzIG9yZyAobGlzdGluZy92ZXJzaW9uL3Jldmlldy9hZHZpc29yeS9wdWJsaXNoZXIgbW9kZXJhdGlvbikgb3JcbiAgLy8gdGhlIGluc3RhbGxpbmcgb3JnIChpbnN0YWxscyArIHBvbGljeSkuIEFub255bW91cyBzdWJtaXNzaW9ucyB1c2UgdGhlXG4gIC8vIGBBTk9OWU1PVVNfQUNUT1JfSURgIGFjdG9yIHdpdGggYGRldGFpbHMuc3VibWlzc2lvbklkYC4gYGRldGFpbHNgIGNhcnJ5IGlkcyxcbiAgLy8gdmVyc2lvbnMsIGRpZ2VzdHMsIHRpZXIsIHN0YXRlIGFuZCByZWFzb24gY29kZXMgb25seSDigJQgbmV2ZXIgcmV2aWV3IGJvZGllcyxcbiAgLy8gUkVBRE1FIGNvbnRlbnQsIHNlY3JldHMgb3IgZW1haWxzLlxuICAvLyBQdWJsaXNoZXJzLlxuICAncHVibGlzaGVyLmNyZWF0ZScsXG4gICdwdWJsaXNoZXIudXBkYXRlJyxcbiAgJ3B1Ymxpc2hlci50ZXJtcy5hY2NlcHQnLFxuICAncHVibGlzaGVyLnZlcmlmeS5yZXF1ZXN0JyxcbiAgJ3B1Ymxpc2hlci52ZXJpZnkuYXBwcm92ZScsXG4gICdwdWJsaXNoZXIudmVyaWZ5LnJlamVjdCcsXG4gICdwdWJsaXNoZXIudGllci5jaGFuZ2UnLFxuICAncHVibGlzaGVyLnN1c3BlbmQnLFxuICAncHVibGlzaGVyLnVuc3VzcGVuZCcsXG4gICdwdWJsaXNoZXIudHJhbnNmZXIucmVxdWVzdCcsXG4gICdwdWJsaXNoZXIudHJhbnNmZXIuYWNjZXB0JyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5kZWNsaW5lJyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5hcHByb3ZlJyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5yZWplY3QnLFxuICAncHVibGlzaGVyLnByb2ZpbGUtY2hhbmdlLmFwcHJvdmUnLFxuICAncHVibGlzaGVyLnByb2ZpbGUtY2hhbmdlLnJlamVjdCcsXG4gIC8vIFB1Ymxpc2ggcmVxdWVzdHMgKHRlbmFudCDihpIgc3lzdGVtIG9yZykuIGBkZXRhaWxzLmtpbmRgIG5hbWVzIHRoZSByZXF1ZXN0LlxuICAncGx1Z2luLnJlcXVlc3Quc3VibWl0JyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LndpdGhkcmF3JyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LmFwcHJvdmUnLFxuICAncGx1Z2luLnJlcXVlc3Quc2Vjb25kLWFwcHJvdmUnLFxuICAncGx1Z2luLnJlcXVlc3QucmVqZWN0JyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LmF1dG8tYXBwcm92ZScsXG4gIC8vIExpc3RpbmdzIGFuZCB2ZXJzaW9ucyAoc3lzdGVtIG9yZywgZXhjZXB0IHRoZSB0ZW5hbnQgcGF1c2UpLlxuICAncGx1Z2luLmxpc3RpbmcucHVibGlzaCcsXG4gICdwbHVnaW4ubGlzdGluZy51bmxpc3QnLFxuICAncGx1Z2luLmxpc3RpbmcudXBkYXRlJyxcbiAgJ3BsdWdpbi5saXN0aW5nLnN0YXRlLmNoYW5nZScsXG4gICdwbHVnaW4ubGlzdGluZy5wYXVzZScsXG4gICdwbHVnaW4ubGlzdGluZy51bnBhdXNlJyxcbiAgJ3BsdWdpbi52ZXJzaW9uLnBhdXNlJyxcbiAgJ3BsdWdpbi52ZXJzaW9uLnlhbmsnLFxuICAncGx1Z2luLnZlcnNpb24udW55YW5rJyxcbiAgJ3BsdWdpbi52ZXJzaW9uLmRlcHJlY2F0ZScsXG4gICdwbHVnaW4uY29sbGVjdGlvbi51cGRhdGUnLFxuICAvLyBFY29zeXN0ZW0gY29uZmlndXJhdGlvbiAoc3lzdGVtIG9yZykuXG4gICdlY29zeXN0ZW0uYXV0by1hcHByb3ZhbC1ydWxlLmNyZWF0ZScsXG4gICdlY29zeXN0ZW0uYXV0by1hcHByb3ZhbC1ydWxlLnVwZGF0ZScsXG4gICdlY29zeXN0ZW0uYXV0by1hcHByb3ZhbC1ydWxlLmRlbGV0ZScsXG4gICdlY29zeXN0ZW0ucmVzZXJ2ZWQtbmFtZS51cGRhdGUnLFxuICAnZWNvc3lzdGVtLnNsYS51cGRhdGUnLFxuICAvLyBQdWJsaWMgcmVnaXN0cnkgbmFtZXNwYWNlIChgcHVibGljLypgKTogY29weSArIHNpZ24gKyBhdHRlc3Qgb24gcHVibGlzaCxcbiAgLy8gdGhlIHRpZXItY2hhbmdlL3N1c3BlbnNpb24gcmUtc2lnbiBqb2IsIHRhZyByZW1vdmFsIG9uIHlhbmsvdGFrZWRvd24sIGFuZFxuICAvLyB0aGUgcmV0ZW50aW9uIHN3ZWVwLlxuICAncmVnaXN0cnkuaW1hZ2UucHVibGlzaCcsXG4gICdyZWdpc3RyeS5pbWFnZS5yZXNpZ24nLFxuICAncmVnaXN0cnkuaW1hZ2UueWFuaycsXG4gICdyZWdpc3RyeS5pbWFnZS5nYycsXG4gIC8vIEluc3RhbGxzIGFuZCB0aGUgaW5zdGFsbGluZyBvcmcncyBjb25zdW1wdGlvbiBwb2xpY3kgKG9yZy1sb2NhbCkuXG4gICdwbHVnaW4uaW5zdGFsbC5yZXF1ZXN0JyxcbiAgJ3BsdWdpbi5pbnN0YWxsLmFwcHJvdmUnLFxuICAncGx1Z2luLmluc3RhbGwuZGVueScsXG4gICdwbHVnaW4uaW5zdGFsbC5jcmVhdGUnLFxuICAncGx1Z2luLmluc3RhbGwudXBncmFkZScsXG4gIC8vIEEgbWVtYmVyJ3MgcmVxdWVzdCB0byBjaGFuZ2UgYW4gaW5zdGFsbCBwYXN0IHdoYXQgdGhleSBtYXkgZG8gYWxvbmUsIGFuZCBpdHMgZGVjaXNpb24uXG4gICdwbHVnaW4uaW5zdGFsbC5jaGFuZ2UtcmVxdWVzdCcsXG4gICdwbHVnaW4uaW5zdGFsbC5jaGFuZ2UtYXBwcm92ZScsXG4gICdwbHVnaW4uaW5zdGFsbC5jaGFuZ2UtcmVqZWN0JyxcbiAgJ3BsdWdpbi5pbnN0YWxsLnJlbW92ZScsXG4gICdvcmcucGx1Z2luLWluc3RhbGwtcG9saWN5LnVwZGF0ZScsXG4gIC8vIFJldmlld3MgYW5kIHJlcGxpZXMuXG4gICdwbHVnaW4ucmV2aWV3LmNyZWF0ZScsXG4gICdwbHVnaW4ucmV2aWV3LnVwZGF0ZScsXG4gICdwbHVnaW4ucmV2aWV3LmRlbGV0ZScsXG4gICdwbHVnaW4ucmV2aWV3LnJlcG9ydCcsXG4gICdwbHVnaW4ucmV2aWV3LmhvbGQnLFxuICAncGx1Z2luLnJldmlldy5yZWxlYXNlJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVtb3ZlJyxcbiAgJ3BsdWdpbi5yZXZpZXcuYW5vbnltaXplJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVwbHkuY3JlYXRlJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVwbHkudXBkYXRlJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVwbHkuZGVsZXRlJyxcbiAgLy8gQW5vbnltb3VzIHN1Ym1pc3Npb25zLlxuICAncGx1Z2luLnN1Ym1pc3Npb24uY3JlYXRlJyxcbiAgJ3BsdWdpbi5zdWJtaXNzaW9uLnZlcmlmeScsXG4gICdwbHVnaW4uc3VibWlzc2lvbi5nYXRlLWZhaWwnLFxuICAncGx1Z2luLnN1Ym1pc3Npb24uYXBwcm92ZScsXG4gICdwbHVnaW4uc3VibWlzc2lvbi5yZWplY3QnLFxuICAncGx1Z2luLnN1Ym1pc3Npb24uY2xhaW0nLFxuICAncGx1Z2luLnN1Ym1pc3Npb24uZXhwaXJlJyxcbiAgLy8gU2VjdXJpdHkgYWR2aXNvcmllcyAocHVibGlzaC93aXRoZHJhdyBhcmUgc3lzdGVtLW9yZyBvbmx5OyB1cGRhdGUgPSBhXG4gIC8vIG1vZGVyYXRvciBlZGl0aW5nIGEgZHJhZnQgYmVmb3JlIGl0IGlzIHB1Ymxpc2hlZCkuXG4gICdwbHVnaW4uYWR2aXNvcnkuY3JlYXRlJyxcbiAgJ3BsdWdpbi5hZHZpc29yeS51cGRhdGUnLFxuICAncGx1Z2luLmFkdmlzb3J5LnB1Ymxpc2gnLFxuICAncGx1Z2luLmFkdmlzb3J5LndpdGhkcmF3JyxcbiAgLy8gUGVyLW9yZyBwbHVnaW4gc2VjdXJpdHkgbm90aWZpY2F0aW9ucyAocGx1Z2luIHNjYW4gZ2F0ZXMpOiB0aGUgc2V0dGluZ3NcbiAgLy8gKHJlY2lwaWVudHMsIGRpZ2VzdCwgd2ViaG9vaywgZXh0ZXJuYWwgYWRkcmVzcyDigJQgY2hhbmdlZCBmaWVsZCBuYW1lcyBhbmRcbiAgLy8gdGhlIHdlYmhvb2sgaG9zdCBvbmx5LCBuZXZlciB0aGUgc2VjcmV0IG9yIHRoZSBhZGRyZXNzKSwgYW4gZXh0ZXJuYWxcbiAgLy8gYWRkcmVzcyBjb25maXJtZWQgdGhyb3VnaCBpdHMgZW1haWxlZCBzaW5nbGUtdXNlIGxpbmssIGFuZCBhIHRlc3Qgc2VuZC5cbiAgJ3BsdWdpbi5zZWN1cml0eV9ub3RpZmljYXRpb25zLnVwZGF0ZScsXG4gICdwbHVnaW4uc2VjdXJpdHlfbm90aWZpY2F0aW9ucy5leHRlcm5hbF9lbWFpbC52ZXJpZnknLFxuICAncGx1Z2luLnNlY3VyaXR5X25vdGlmaWNhdGlvbnMudGVzdCcsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBSZW1vdGVBdWRpdEFjdGlvbiA9IHR5cGVvZiBSRU1PVEVfQVVESVRfQUNUSU9OU1tudW1iZXJdO1xuXG4vKiogV2hldGhlciBgdmFsdWVgIGlzIGFuIGFjdGlvbiBhIHJlbW90ZSBzZXJ2aWNlIG1heSBlbWl0ICh0aGUgaW5nZXN0IGFsbG93LWxpc3QpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVtb3RlQXVkaXRBY3Rpb24odmFsdWU6IHN0cmluZyk6IHZhbHVlIGlzIFJlbW90ZUF1ZGl0QWN0aW9uIHtcbiAgcmV0dXJuIChSRU1PVEVfQVVESVRfQUNUSU9OUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModmFsdWUpO1xufVxuIl19
|
|
346
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWF1ZGl0LWFjdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcmVtb3RlLWF1ZGl0LWFjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7OztHQU9HO0FBR0g7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHO0lBQ2xDLHdCQUF3QjtJQUN4QixxQkFBcUI7SUFDckIsc0JBQXNCO0lBQ3RCLDhFQUE4RTtJQUM5RSwyRUFBMkU7SUFDM0UsOEVBQThFO0lBQzlFLHFCQUFxQjtJQUNyQix1RUFBdUU7SUFDdkUsMkVBQTJFO0lBQzNFLCtFQUErRTtJQUMvRSw4RUFBOEU7SUFDOUUsa0VBQWtFO0lBQ2xFLHlFQUF5RTtJQUN6RSxvQkFBb0I7SUFDcEIsNkVBQTZFO0lBQzdFLCtFQUErRTtJQUMvRSxxRUFBcUU7SUFDckUsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQiw0RUFBNEU7SUFDNUUsd0VBQXdFO0lBQ3hFLGNBQWM7SUFDZCxlQUFlO0lBQ2YsZUFBZTtJQUNmLGVBQWU7SUFDZiw4RUFBOEU7SUFDOUUsNEVBQTRFO0lBQzVFLG9CQUFvQjtJQUNwQixvQkFBb0I7SUFDcEIsa0JBQWtCO0lBQ2xCLHlFQUF5RTtJQUN6RSw0RUFBNEU7SUFDNUUsNEVBQTRFO0lBQzVFLHVFQUF1RTtJQUN2RSxvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLGdFQUFnRTtJQUNoRSxxRUFBcUU7SUFDckUsb0RBQW9EO0lBQ3BELGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixtRUFBbUU7SUFDbkUsNEVBQTRFO0lBQzVFLDBEQUEwRDtJQUMxRCxnQkFBZ0I7SUFDaEIsMEJBQTBCO0lBQzFCLDBCQUEwQjtJQUMxQiwwQkFBMEI7SUFDMUIsMkJBQTJCO0lBQzNCLHlCQUF5QjtJQUN6Qiww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dHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSByZW1vdGUgKG5vbi1wbGF0Zm9ybSkgYXVkaXQgQUNUSU9OIFZPQ0FCVUxBUlkuXG4gKlxuICogS2VwdCBhcGFydCBmcm9tIHRoZSBjbGllbnQgdGhhdCBzaGlwcyB0aGUgZXZlbnRzIChgc2VydmljZXMvcmVtb3RlLWF1ZGl0LWNsaWVudC50c2ApXG4gKiBiZWNhdXNlIGl0IGlzIGFuIGFsbG93LWxpc3QsIG5vdCBtYWNoaW5lcnk6IGl0IGlzIHRoZSB0aGluZyBhIHJldmlld2VyIHJlYWRzXG4gKiBlbmQgdG8gZW5kIHdoZW4gZGVjaWRpbmcgd2hldGhlciBhIHNlcnZpY2UgbWF5IGVtaXQgYSBnaXZlbiBhY3Rpb24sIGFuZCBpdCBpc1xuICogd2hhdCBwbGF0Zm9ybSdzIGluZ2VzdCB2YWxpZGF0ZXMgYWdhaW5zdC5cbiAqL1xuXG5cbi8qKlxuICogVGhlIGV4YWN0IHNldCBvZiBhdWRpdCBhY3Rpb25zIGEgTk9OLVBMQVRGT1JNIChyZW1vdGUpIHNlcnZpY2UgaXMgcGVybWl0dGVkIHRvXG4gKiBlbWl0IHRocm91Z2ggYFBPU1QgL2F1ZGl0L2V2ZW50c2AuIFRoaXMgaXMgdGhlIFNJTkdMRSBTT1VSQ0Ug4oCUIGBSZW1vdGVBdWRpdEFjdGlvbmBcbiAqIGlzIGRlcml2ZWQgZnJvbSBpdCwgc28gdGhlIHR5cGUgYW5kIHRoZSBydW50aW1lIGFsbG93LWxpc3QgY2FuIG5ldmVyIGRyaWZ0LlxuICpcbiAqIFNFQ1VSSVRZOiBwbGF0Zm9ybSdzIGluZ2VzdCB2YWxpZGF0ZXMgYGFjdGlvbmAgYWdhaW5zdCB0aGlzIHN1YnNldCAodmlhXG4gKiB7QGxpbmsgaXNSZW1vdGVBdWRpdEFjdGlvbn0pLCBOT1QgdGhlIGZ1bGwgcGxhdGZvcm0gYEF1ZGl0QWN0aW9uYCB1bmlvbiDigJQgYVxuICogYHNlcnZpY2U6KmAgdG9rZW4gbXVzdCBub3QgYmUgYWJsZSB0byBmb3JnZSBwbGF0Zm9ybS1hdXRob3JpdHkgZXZlbnRzXG4gKiAoYGFkbWluLnN1cGVyYWRtaW4uZ3JhbnRgLCBgb3JnLm93bmVyc2hpcC50cmFuc2ZlcmAsIGB1c2VyLmxvZ2luYCwg4oCmKS4gS2VlcFxuICogdGhpcyBsaXN0IGZyZWUgb2YgYW55IHBsYXRmb3JtLW9ubHkgYWN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgUkVNT1RFX0FVRElUX0FDVElPTlMgPSBbXG4gICdwbHVnaW4uYnVpbGQuY29tcGxldGVkJyxcbiAgJ3BsdWdpbi5idWlsZC5mYWlsZWQnLFxuICAncGx1Z2luLmJ1aWxkLnRpbWVvdXQnLFxuICAvLyBBIHZlcnNpb24gcGVyc2lzdGVkIFVOU0NBTk5FRCBiZWNhdXNlIHRoZSBidWlsZC10aW1lIHNjYW4gY291bGQgbm90IHJ1biBhbmRcbiAgLy8gdGhlIG9wZXJhdG9yIGVzY2FwZSBoYXRjaCBgUExVR0lOX0FMTE9XX1VOU0NBTk5FRGAgaXMgb24gKHdpdGhvdXQgaXQgdGhlXG4gIC8vIGJ1aWxkIGZhaWxzIGBJTUFHRV9TQ0FOX1VOQVZBSUxBQkxFYCkuIGBkZXRhaWxzYCBjYXJyeSBuYW1lL3ZlcnNpb24vZGlnZXN0LlxuICAncGx1Z2luLnNjYW4uc2tpcHBlZCcsXG4gIC8vIEZpeGFibGUgQ3JpdGljYWwgZmluZGluZ3Mgd2VyZSBFWEVNUFRFRCBmcm9tIHRoZSBwbGF0Zm9ybSBmbG9vciBieSBhXG4gIC8vIGBQTFVHSU5fVlVMTl9XQUlWRVJTYCBlbnRyeSwgc28gYSBidWlsZCB0aGF0IHdvdWxkIG90aGVyd2lzZSBoYXZlIGZhaWxlZFxuICAvLyBQTFVHSU5fVlVMTl9HQVRFIHdhcyBhbGxvd2VkIHRocm91Z2guIFRoZSBvdGhlciBoYWxmIG9mIHBsdWdpbi5zY2FuLnNraXBwZWQ6XG4gIC8vIGJvdGggYXJlIG9wZXJhdG9yIGVzY2FwZSBoYXRjaGVzIHRoYXQgY2hhbmdlIGEgZ2F0ZSdzIHZlcmRpY3QsIGFuZCBhIG1ldHJpY1xuICAvLyBhbmQgYSBsb2cgbGluZSBhcmUgbm90IGEgZHVyYWJsZSByZWNvcmQgb2Ygb25lLiBgZGV0YWlsc2AgY2FycnlcbiAgLy8gbmFtZS92ZXJzaW9uL2RpZ2VzdCwgaG93IG1hbnkgZmluZGluZ3Mgd2VyZSB3YWl2ZWQgYW5kIHdoaWNoIHBhY2thZ2VzLlxuICAncGx1Z2luLnZ1bG4ud2FpdmVkJyxcbiAgLy8gUGx1Z2luIGxpZmVjeWNsZSBtdXRhdGlvbnMgKGFwaS9wbHVnaW4gcm91dGUgaGFuZGxlcnMpIOKAlCB0aGUgZGVzdHJ1Y3RpdmUgL1xuICAvLyBwdWJsaXNoaW5nIHN1cmZhY2UgdGhhdCBidWlsZHMgYWxyZWFkeSBhdWRpdCdzIGNvdW50ZXJwYXJ0OiByZWdpc3RyeSBkZWxldGUsXG4gIC8vIHNvdXJjZSB1cGxvYWQsIGFuZCBkZXBsb3ktdG8tY2x1c3Rlci4gYHRhcmdldElkYCBpcyB0aGUgcGx1Z2luIGlkLlxuICAncGx1Z2luLmRlbGV0ZScsXG4gICdwbHVnaW4ucmVzdG9yZScsXG4gIC8vIE1hbnVhbCBwdXJnZTogcGVybWFuZW50IGhhcmQtZGVsZXRlIG9mIGEgc29mdC1kZWxldGVkIHBsdWdpbiB0b21ic3RvbmUgb25cbiAgLy8gZGVtYW5kIChmaW5hbGl6ZXMgd2hhdCB0aGUgcmV0ZW50aW9uIHN3ZWVwIHdvdWxkIG90aGVyd2lzZSBkbyBsYXRlcikuXG4gICdwbHVnaW4ucHVyZ2UnLFxuICAncGx1Z2luLnVwZGF0ZScsXG4gICdwbHVnaW4udXBsb2FkJyxcbiAgJ3BsdWdpbi5kZXBsb3knLFxuICAvLyBQbHVnaW4gYnVsayBtdXRhdGlvbnMgKGFwaS9wbHVnaW4gYnVsay1wbHVnaW4gcm91dGUpICsgRExRIHB1cmdlIChkcm9wcyBhbGxcbiAgLy8gZGVhZC1sZXR0ZXJlZCBidWlsZCBqb2JzLCBjcm9zcy1vcmcsIHN5c2FkbWluKS4gYGRldGFpbHNgIGNhcnJpZXMgY291bnRzLlxuICAncGx1Z2luLmJ1bGsudXBkYXRlJyxcbiAgJ3BsdWdpbi5idWxrLmRlbGV0ZScsXG4gICdwbHVnaW4uZGxxLnB1cmdlJyxcbiAgLy8gQnVpbGQgcmUtcnVucyBmcm9tIHRoZSBxdWV1ZS10cmlhZ2Ugc3VyZmFjZTogcmUtZW5xdWV1ZSBhIEZBSUxFRCBidWlsZFxuICAvLyAoYHBsdWdpbi5idWlsZC5yZXRyeWApIG9yIGEgZGVhZC1sZXR0ZXJlZCBvbmUgKGBwbHVnaW4uZGxxLnJlcGxheWApLiBCb3RoXG4gIC8vIHJlLXJ1biBhbiBpbWFnZSBidWlsZCArIHBsdWdpbiBwZXJzaXN0IG9uIHRoZSBjYWxsZXIncyBhdXRob3JpdHksIHNvIHRoZXlcbiAgLy8gYXJlIGF1ZGl0ZWQgbXV0YXRpb25zOyBgYWZmZWN0ZWRPcmdJZGAgY2FycmllcyB0aGUgam9iJ3Mgb3duaW5nIG9yZy5cbiAgJ3BsdWdpbi5idWlsZC5yZXRyeScsXG4gICdwbHVnaW4uZGxxLnJlcGxheScsXG4gIC8vIFBpcGVsaW5lIG11dGF0aW9ucyDigJQgZW1pdHRlZCBieSBhcGkvcGlwZWxpbmUncyByb3V0ZSBoYW5kbGVyc1xuICAvLyAoY3JlYXRlL3VwZGF0ZS9kZWxldGUgKyBDb2RlUGlwZWxpbmUgZXhlY3V0aW9uIHRyaWdnZXIvY2FuY2VsKSBhbmRcbiAgLy8gcG9zdGVkIHRvIHBsYXRmb3JtJ3MgYFBPU1QgL2F1ZGl0L2V2ZW50c2AgaW5nZXN0LlxuICAncGlwZWxpbmUuY3JlYXRlJyxcbiAgJ3BpcGVsaW5lLnVwZGF0ZScsXG4gICdwaXBlbGluZS5kZWxldGUnLFxuICAncGlwZWxpbmUucmVzdG9yZScsXG4gIC8vIE1hbnVhbCBwdXJnZTogcGVybWFuZW50IGhhcmQtZGVsZXRlIG9mIGEgc29mdC1kZWxldGVkIHBpcGVsaW5lIC9cbiAgLy8gcGlwZWxpbmVfdGVtcGxhdGUgdG9tYnN0b25lIG9uIGRlbWFuZCAoZmluYWxpemVzIHdoYXQgdGhlIHJldGVudGlvbiBzd2VlcFxuICAvLyB3b3VsZCBvdGhlcndpc2UgZG8gbGF0ZXIpLiBgdGFyZ2V0SWRgIGlzIHRoZSBwdXJnZWQgaWQuXG4gICdwaXBlbGluZS5wdXJnZScsXG4gICdwaXBlbGluZV90ZW1wbGF0ZS5jcmVhdGUnLFxuICAncGlwZWxpbmVfdGVtcGxhdGUudXBkYXRlJyxcbiAgJ3BpcGVsaW5lX3RlbXBsYXRlLmRlbGV0ZScsXG4gICdwaXBlbGluZV90ZW1wbGF0ZS5yZXN0b3JlJyxcbiAgJ3BpcGVsaW5lX3RlbXBsYXRlLnB1cmdlJyxcbiAgJ3BpcGVsaW5lLmV4ZWN1dGlvbi5zdGFydCcsXG4gICdwaXBlbGluZS5leGVjdXRpb24uY2FuY2VsJyxcbiAgLy8gQ29kZVBpcGVsaW5lIEFSTi1yZWdpc3RyeSBjb25maWcgKGFwaS9waXBlbGluZSByZWdpc3RyeSByb3V0ZSkg4oCUIHJlZ2lzdGVyaW5nIC9cbiAgLy8gZGVyZWdpc3RlcmluZyB0aGUgZXh0ZXJuYWwgQ29kZVBpcGVsaW5lIHRoYXQgYmFja3MgYSBwaXBlbGluZSAoZGVwbG95LWFmZmVjdGluZykuXG4gICdwaXBlbGluZS5yZWdpc3RyeS5yZWdpc3RlcicsXG4gICdwaXBlbGluZS5yZWdpc3RyeS5kZXJlZ2lzdGVyJyxcbiAgLy8gUXVvdGEgYWRtaW5pc3RyYXRpb24gKGFwaS9xdW90YSkg4oCUIGEgc3VwZXJhZG1pbiByZXNldHRpbmcgYW4gb3JnJ3MgdXNhZ2VcbiAgLy8gY291bnRlciBvciBlZGl0aW5nIGl0cyB0aWVyIGxpbWl0cy4gYGFmZmVjdGVkT3JnSWRgIGlzIHRoZSBvcmcgY2hhbmdlZDtcbiAgLy8gYGRldGFpbHNgIGNhcnJpZXMgdGhlIHF1b3RhVHlwZSArIG9sZC9uZXcgdmFsdWUuXG4gICdxdW90YS5yZXNldCcsXG4gICdxdW90YS5saW1pdC51cGRhdGUnLFxuICAvLyBBIHN1cGVyYWRtaW4gZGVsZXRpbmcgYW4gb3JnJ3MgZW50aXJlIHF1b3RhIGRvY3VtZW50LlxuICAncXVvdGEuZGVsZXRlJyxcbiAgLy8gQ29tcGxpYW5jZSBhZG1pbmlzdHJhdGlvbiAoYXBpL2NvbXBsaWFuY2UpIOKAlCB0aGUgZW5mb3JjZW1lbnQtcG9zdHVyZSBzdXJmYWNlLlxuICAvLyBBcHByb3ZpbmcvcmV2b2tpbmcgYW4gZXhlbXB0aW9uLCB0b2dnbGluZy9hdXRob3JpbmcvZGVsZXRpbmcgYSBydWxlLFxuICAvLyBhdXRob3JpbmcvZGVsZXRpbmcgYSBwb2xpY3ksIG1hbmFnaW5nIHNjYW4gc2NoZWR1bGVzLCBhcHBseWluZyBhIHRlbXBsYXRlLFxuICAvLyBvciBjYW5jZWxsaW5nIGEgcnVubmluZyBzY2FuLiBgdGFyZ2V0SWRgIGlzIHRoZSBydWxlL3BvbGljeS9leGVtcHRpb24vc2NhbiBpZC5cbiAgJ2NvbXBsaWFuY2UuZXhlbXB0aW9uLmFwcHJvdmUnLFxuICAnY29tcGxpYW5jZS5leGVtcHRpb24ucmV2b2tlJyxcbiAgJ2NvbXBsaWFuY2UucnVsZS50b2dnbGUnLFxuICAnY29tcGxpYW5jZS5ydWxlLmNyZWF0ZScsXG4gICdjb21wbGlhbmNlLnJ1bGUudXBkYXRlJyxcbiAgJ2NvbXBsaWFuY2UucnVsZS5kZWxldGUnLFxuICAnY29tcGxpYW5jZS5ydWxlLnJlc3RvcmUnLFxuICAvLyBNYW51YWwgb24tZGVtYW5kIGhhcmQtZGVsZXRlIChQVVJHRSkgb2YgYSBzb2Z0LWRlbGV0ZWQgcnVsZS9wb2xpY3kgdG9tYnN0b25lIOKAlFxuICAvLyB0aGUgY2FsbGVyLWluaXRpYXRlZCBjb3VudGVycGFydCB0byB0aGUgcmV0ZW50aW9uIHN3ZWVwJ3MgYXV0by1wdXJnZS4gRGVzdHJveXNcbiAgLy8gdGhlIHRvbWJzdG9uZSBwZXJtYW5lbnRseSwgc28gaXQgY2FycmllcyB0aGUgZHVyYWJsZSwgdGFtcGVyLWV2aWRlbnQgdHJhaWwuXG4gICdjb21wbGlhbmNlLnJ1bGUucHVyZ2UnLFxuICAnY29tcGxpYW5jZS5wb2xpY3kuY3JlYXRlJyxcbiAgJ2NvbXBsaWFuY2UucG9saWN5LnVwZGF0ZScsXG4gICdjb21wbGlhbmNlLnBvbGljeS5kZWxldGUnLFxuICAnY29tcGxpYW5jZS5wb2xpY3kucmVzdG9yZScsXG4gICdjb21wbGlhbmNlLnBvbGljeS5wdXJnZScsXG4gICdjb21wbGlhbmNlLnNjYW4tc2NoZWR1bGUuY3JlYXRlJyxcbiAgJ2NvbXBsaWFuY2Uuc2Nhbi1zY2hlZHVsZS51cGRhdGUnLFxuICAnY29tcGxpYW5jZS5zY2FuLXNjaGVkdWxlLmRlbGV0ZScsXG4gICdjb21wbGlhbmNlLnRlbXBsYXRlLmFwcGx5JyxcbiAgLy8gTGF1bmNoaW5nIGFuIG9yZy13aWRlIHJlLWV2YWx1YXRpb24gKHRoZSBjb3VudGVycGFydCB0byBgLmNhbmNlbGApIOKAlCBpdFxuICAvLyBwZXJzaXN0cyBhIHNjYW4gYW5kIGNhbiBibG9jayBlbnRpdGllcyB0aGF0IHBhc3NlZCBiZWZvcmUuXG4gICdjb21wbGlhbmNlLnNjYW4uY3JlYXRlJyxcbiAgJ2NvbXBsaWFuY2Uuc2Nhbi5jYW5jZWwnLFxuICAvLyBQZXItb3JnIGNvbXBsaWFuY2Ugbm90aWZpY2F0aW9uIHNldHRpbmdzOiByZWNpcGllbnRzICsgdGhlIG91dGJvdW5kIHdlYmhvb2tcbiAgLy8gVVJML3NlY3JldC4gQmVhcmVyLWVxdWl2YWxlbnQgY29uZmlnIHRoYXQgcmVkaXJlY3RzIHZpb2xhdGlvbiBub3RpY2VzLCBzbyBhXG4gIC8vIGNoYW5nZSBjYXJyaWVzIHRoZSBkdXJhYmxlIHRyYWlsIChuZXZlciB0aGUgc2VjcmV0IGl0c2VsZikuXG4gICdjb21wbGlhbmNlLm5vdGlmaWNhdGlvbi1wcmVmZXJlbmNlLnVwZGF0ZScsXG4gIC8vIEltYWdlLXJlZ2lzdHJ5IGRlc3RydWN0aXZlIG9wcyAoYXBpL2ltYWdlLXJlZ2lzdHJ5KSDigJQgZ2FyYmFnZS1jb2xsZWN0aW9uXG4gIC8vIHN3ZWVwcyBhbmQgZXhwbGljaXQgaW1hZ2UvdGFnIGRlbGV0ZXMuXG4gICdyZWdpc3RyeS5nYycsXG4gICdyZWdpc3RyeS5pbWFnZS5kZWxldGUnLFxuICAvLyBDcm9zcy1yZXBvIHRhZy9pbWFnZSBjb3B5IChhcGkvaW1hZ2UtcmVnaXN0cnkgUE9TVCAvYXBpL2ltYWdlcy9jb3B5KS4gQVxuICAvLyBjcm9zcy10ZW5hbnQgY29weSBtb3ZlcyBkYXRhIGFjcm9zcyBjdXN0b21lciBib3VuZGFyaWVzLCBzbyBpdCBuZWVkcyB0aGVcbiAgLy8gZHVyYWJsZSwgdGFtcGVyLWV2aWRlbnQgdHJhaWwg4oCUIG5vdCBqdXN0IHRoZSBMb2tpIG9wZXJhdG9yIGxpbmUuXG4gICdyZWdpc3RyeS5pbWFnZS5jb3B5JyxcbiAgLy8gQSBwbHVnaW4gaW1hZ2Ugc2lnbmVkICsgU0JPTS1hdHRlc3RlZCBieSB0aGUgcGxhdGZvcm0ncyBwbHVnaW4tc2lnbmluZyBrZXlcbiAgLy8gKGFwaS9pbWFnZS1yZWdpc3RyeSBQT1NUIC9pbnRlcm5hbC9wbHVnaW4tc2lnbmF0dXJlcywgY2FsbGVkIGJ5IHRoZSBwbHVnaW5cbiAgLy8gYnVpbGQgd29ya2VyKS4gVGhlIGtleSBpcyB3aGF0IHN5bnRoIHRydXN0cywgc28gZXZlcnkgdXNlIGlzIG9uIHRoZSB0cmFpbC5cbiAgJ3JlZ2lzdHJ5LmltYWdlLnNpZ24nLFxuICAvLyBNZXNzYWdpbmcgKGFwaS9tZXNzYWdlKSDigJQgYWRtaW4gQlJPQURDQVNUIGFubm91bmNlbWVudHMgKyBkZXN0cnVjdGl2ZVxuICAvLyBkZWxldGVzLiAxOjEgdXNlciBtZXNzYWdlcyBhcmUgaW50ZW50aW9uYWxseSBOT1QgYXVkaXRlZCAobm9pc2UgKyB0aGV5IHdvdWxkXG4gIC8vIHB1bGwgcHJpdmF0ZSBjb250ZW50IGludG8gdGhlIHRyYWlsKS4gYGRldGFpbHNgIGNhcnJ5IG1ldGFkYXRhIG9ubHlcbiAgLy8gKHN1YmplY3QvdHlwZS9zY29wZSksIE5FVkVSIG1lc3NhZ2UgYm9keSBjb250ZW50LlxuICAnbWVzc2FnZS5hbm5vdW5jZW1lbnQuY3JlYXRlJyxcbiAgJ21lc3NhZ2UuZGVsZXRlJyxcbiAgJ21lc3NhZ2UucmVzdG9yZScsXG4gIC8vIE1hbnVhbCBvbi1kZW1hbmQgUFVSR0UgKHBlcm1hbmVudCBoYXJkLWRlbGV0ZSkgb2YgYW4gYWxyZWFkeS1zb2Z0LWRlbGV0ZWRcbiAgLy8gbWVzc2FnZSB0b21ic3RvbmUg4oCUIHRoZSBkZXN0cnVjdGl2ZSBmaW5hbGl6ZXIgdGhlIHJldGVudGlvbiBzd2VlcCB3b3VsZFxuICAvLyBvdGhlcndpc2UgcGVyZm9ybSBhdCB0aGUgcHVyZ2UgZGVhZGxpbmUuIGBkZXRhaWxzYCBjYXJyeSBtZXRhZGF0YSBvbmx5LlxuICAnbWVzc2FnZS5wdXJnZScsXG4gIC8vIEJpbGxpbmcgKGFwaS9iaWxsaW5nKSDigJQgc3Vic2NyaXB0aW9uICsgZW50aXRsZW1lbnQgbXV0YXRpb25zLCBtaXJyb3JlZCB0byB0aGVcbiAgLy8gY2VudHJhbCBhdWRpdCB0cmFpbCAodGhlc2UgYWxzbyB3cml0ZSB0byB0aGUgc2VydmljZS1sb2NhbCBiaWxsaW5nX2V2ZW50c1xuICAvLyBjb2xsZWN0aW9uKS4gYGRldGFpbHNgIGNhcnJ5IHBsYW4vdGllci9hZGRvbiBpZHMgb25seSDigJQgbmV2ZXIgY2FyZC9wYXltZW50XG4gIC8vIHNlY3JldHMgb3IgYW4gQVdTIGFjY291bnQgaWQuXG4gIC8vIFN1YnNjcmlwdGlvbiBsaWZlY3ljbGUgYSBDVVNUT01FUiBkcml2ZXMgKHRoZSBhZG1pbiBjb3VudGVycGFydCBpc1xuICAvLyBgYmlsbGluZy50aWVyLm92ZXJyaWRlYCk6IHNlbGYtc2VydmUgY3JlYXRlIChkaXJlY3Qgb3IgTWFya2V0cGxhY2UgY2xhaW0pLFxuICAvLyBwbGFuL2ludGVydmFsIGNoYW5nZSwgY2FuY2VsLWF0LXBlcmlvZC1lbmQsIHVuZG8tY2FuY2VsLCBjYXNjYWRlIGRlbGV0ZS5cbiAgJ2JpbGxpbmcuc3Vic2NyaXB0aW9uLmNyZWF0ZScsXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi51cGRhdGUnLFxuICAnYmlsbGluZy5zdWJzY3JpcHRpb24ucmVhY3RpdmF0ZScsXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi5jYW5jZWwnLFxuICAnYmlsbGluZy5zdWJzY3JpcHRpb24uZGVsZXRlJyxcbiAgJ2JpbGxpbmcudGllci5vdmVycmlkZScsXG4gIC8vIE9wZXJhdG9yLW9ubHkgcmVzZWVkIG9mIHRoZSBpbnZvaWNlIGxlZGdlciBmcm9tIHRoZSBwYXltZW50IHByb3ZpZGVyJ3NcbiAgLy8gaGlzdG9yeSAoUE9TVCAvYmlsbGluZy9hZG1pbi9iYWNrZmlsbCkg4oCUIG11dGF0ZXMgZmluYW5jZSBkYXRhIGZsZWV0LXdpZGUuXG4gICdiaWxsaW5nLmFkZG9uLmFkZCcsXG4gICdiaWxsaW5nLmFkZG9uLnJlbW92ZScsXG4gIC8vIFN5c3RlbS1pbml0aWF0ZWQgcmVtb3ZhbCBvZiBhIHRpZXItaW5jbHVkZWQgYWRkLW9uIG9uIGEgcGxhbiB1cGdyYWRlICh0aGVcbiAgLy8gYWNjb3VudCdzIG5ldyB0aWVyIG5vdyBidW5kbGVzIHRoZSBmZWF0dXJlKSDigJQgZGlzdGluY3QgZnJvbSBhIHVzZXItaW5pdGlhdGVkXG4gIC8vIGByZW1vdmVgIHNvIGZpbmFuY2UgY2FuIHRlbGwgYW4gYXV0by1wcnVuZSBmcm9tIGEgY3VzdG9tZXIgYWN0aW9uLlxuICAnYmlsbGluZy5hZGRvbi5wcnVuZScsXG4gIC8vIERpc2NvdW50cyAoZG9jcy9iaWxsaW5nLWRpc2NvdW50cy5tZCkg4oCUIG1pbnQvaXNzdWUvYXBwbHkvcmVtb3ZlL3Jldm9rZSBvZiBhXG4gIC8vIHByaWNlIGNvdXBvbiBvciB1c2FnZSBjcmVkaXQuIGBkZXRhaWxzYCBjYXJyeSB0aGUgZGlzY291bnQgaWQgKyBraW5kL3ZhbHVlXG4gIC8vIG9ubHksIG5ldmVyIHRoZSBvcGFxdWUgdG9rZW4gb3Igc2lnbmluZyBrZXkuXG4gICdiaWxsaW5nLmRpc2NvdW50LmdlbmVyYXRlJyxcbiAgJ2JpbGxpbmcuZGlzY291bnQuaXNzdWUnLFxuICAnYmlsbGluZy5kaXNjb3VudC5hcHBseScsXG4gICdiaWxsaW5nLmRpc2NvdW50LnJlbW92ZScsXG4gICdiaWxsaW5nLmRpc2NvdW50LnJldm9rZScsXG4gIC8vIFByb21vdGlvbnMgKGRvY3MvYmlsbGluZy1kaXNjb3VudHMubWQjcHJvbW90aW9ucykg4oCUIHJ1bGUtZHJpdmVuIGF1dG8tZ3JhbnRcbiAgLy8gY2FtcGFpZ25zLiBgZGV0YWlsc2AgY2FycnkgdGhlIHByb21vdGlvbiBpZCArIGNlbnRzL2V2ZW50IG9ubHkuXG4gICdiaWxsaW5nLnByb21vdGlvbi5jcmVhdGUnLFxuICAnYmlsbGluZy5wcm9tb3Rpb24udXBkYXRlJyxcbiAgJ2JpbGxpbmcucHJvbW90aW9uLnJldm9rZScsXG4gICdiaWxsaW5nLnByb21vdGlvbi5ncmFudCcsXG4gICdiaWxsaW5nLnByb21vdGlvbi5hY3RpdmF0ZScsXG4gIC8vIFVzYWdlLWNyZWRpdCByZWFsaXphdGlvbiDigJQgYSBjdXN0b21lci9jb21wbGlhbmNlLXZpc2libGUgcmVjb3JkIG9mIGNyZWRpdFxuICAvLyBtb3ZlbWVudDogYGNvbnN1bWVkYCAoTWFya2V0cGxhY2UgbWV0ZXJlZCBkcmF3ZG93biksIGBleGhhdXN0ZWRgIChiYWxhbmNlIGhpdFxuICAvLyB6ZXJvKSwgYW5kIGEgY29tYm8gZW5kaW5nLiBgZGV0YWlsc2AgY2FycnkgY2VudHMvaWRzIG9ubHksIG5vIHBheW1lbnQgc2VjcmV0cy5cbiAgJ2JpbGxpbmcuY3JlZGl0LmNvbnN1bWVkJyxcbiAgJ2JpbGxpbmcuY3JlZGl0LmV4aGF1c3RlZCcsXG4gICdiaWxsaW5nLmNvbWJvLmV4cGlyZWQnLFxuICAvLyBSZXBvcnRpbmcgKGFwaS9yZXBvcnRpbmcpIOKAlCB0aGUgdGhyZWUgcmVwb3J0aW5nIG11dGF0aW9ucyB3aG9zZSBlZmZlY3RcbiAgLy8gb3V0bGl2ZXMgYSByZXF1ZXN0IGxvZzogdGhlIHBlci1vcmcgY29ycmVsYXRpb24td2luZG93IGNvbmZpZyB3cml0ZSwgYVxuICAvLyBwb3N0LWRlcGxveSBvdXRjb21lIG1hcmtlciAoaXQgbW92ZXMgdGhlIG9yZydzIERPUkEgQ0ZSL01UVFIpLCBhbmQgdGhlXG4gIC8vIGluYm91bmQgYmlsbGluZ+KGknJlcG9ydGluZyByZXRlbnRpb24tZW50aXRsZW1lbnQgc3luYyAoYSByZXRlbnRpb24gY3V0IGlzIGFcbiAgLy8gZGF0YS1kZXN0cm95aW5nIGNoYW5nZSBhcHBsaWVkIGJ5IHRoZSBuZXh0IHN3ZWVwKS4gYGRldGFpbHNgIGNhcnJ5IHRoZVxuICAvLyBzZXR0aW5ncy9vdXRjb21lIHZhbHVlcyBvbmx5LlxuICAncmVwb3J0aW5nLnNldHRpbmdzLnVwZGF0ZScsXG4gICdyZXBvcnRpbmcuZGVwbG95bWVudC5vdXRjb21lJyxcbiAgJ3JlcG9ydGluZy5yZXRlbnRpb24uc3luYycsXG4gIC8vIFN0YWtlaG9sZGVyIHJlcG9ydHMg4oCUIHRoZSBhZGQtb24ncyBhdXRob3JpbmcgYW5kIFBVQkxJU0hJTkcgc3VyZmFjZS4gUHVibGlzaGluZ1xuICAvLyBpcyB0aGUgbW9tZW50IGludGVybmFsIGRlbGl2ZXJ5IG51bWJlcnMgbGVhdmUgdGhlIHBsYXRmb3JtLCBzbyB0aGUgd2hvbGVcbiAgLy8gb3V0d2FyZCBwYXRoIGlzIGF1ZGl0YWJsZTogd2hpY2ggcmVwb3J0LCB3aGljaCBwZXJpb2QncyBmcm96ZW4gc25hcHNob3QsXG4gIC8vIHdoaWNoIHZlcnNpb24sIGFuZCB3aG8gbGV0IGl0IG91dC4gYGxpbmsuY3JlYXRlZGAgLyBgbGluay5yZXZva2VkYCBjb3ZlciB0aGVcbiAgLy8gVVJMcyB0aGF0IGxldCBzb21lb25lIHdpdGhvdXQgYW4gYWNjb3VudCByZWFkIGl0OyBgcmVjaXBpZW50LmFkZGVkYCAvXG4gIC8vIGByZWNpcGllbnQucmVtb3ZlZGAgY292ZXIgd2hvIGlzIG9uIHRoZSBkaXN0cmlidXRpb24gbGlzdCwgd2hpY2ggaXMgdGhlIG90aGVyXG4gIC8vIHdheSBkYXRhIHJlYWNoZXMgYSBwZXJzb24uIGBvd25lcnNoaXAudHJhbnNmZXJgIGlzIGEgcHJpdmlsZWdlIG1vdmU6IGFcbiAgLy8gc2NoZWR1bGVkIHJ1biBpcyBhdXRob3JpemVkIGFzIGl0cyBPV05FUiwgc28gaGFuZGluZyBhIGRlZmluaXRpb24gb3ZlciBoYW5kc1xuICAvLyBvdmVyIHdob3NlIGFjY2VzcyB0aGUgbnVtYmVycyBhcmUgY29tcHV0ZWQgd2l0aC5cbiAgLy9cbiAgLy8gRGVsaWJlcmF0ZWx5IE5PVCBhdWRpdGVkOiByZWFkaW5nIGEgc2hhcmVkIHJlcG9ydC4gVGhlIGFjY2VzcyBpcyBsb2dnZWQgYW5kXG4gIC8vIGNvdW50ZWQgcGVyIGxpbmssIGJ1dCBpdCBpcyBhbiBVTkFVVEhFTlRJQ0FURUQsIGV4dGVybmFsbHktdHJpZ2dlcmVkIGV2ZW50IOKAlFxuICAvLyBhbnlvbmUgaG9sZGluZyBhIFVSTCBjb3VsZCBvdGhlcndpc2Ugd3JpdGUgdW5ib3VuZGVkIHJvd3MgaW50byB0aGUgb3JnJ3MgYXVkaXRcbiAgLy8gdHJhaWwsIHdoaWNoIHR1cm5zIGEgcmVhZCBpbnRvIGEgd2F5IHRvIGJ1cnkgdGhlIGVudHJpZXMgdGhhdCBtYXR0ZXIuXG4gICdyZXBvcnRpbmcucmVwb3J0LmRlZmluaXRpb24uY3JlYXRlJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQuZGVmaW5pdGlvbi51cGRhdGUnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5kZWZpbml0aW9uLmRlbGV0ZScsXG4gICdyZXBvcnRpbmcucmVwb3J0Lm93bmVyc2hpcC50cmFuc2ZlcicsXG4gICdyZXBvcnRpbmcucmVwb3J0LnB1Ymxpc2hlZCcsXG4gICdyZXBvcnRpbmcucmVwb3J0LnJlcHVibGlzaGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQubGluay5jcmVhdGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQubGluay5yZXZva2VkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVjaXBpZW50LmFkZGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVjaXBpZW50LnJlbW92ZWQnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5wb2xpY3kudXBkYXRlJyxcbiAgLy8gQSBkZWZpbml0aW9uIFNUT1BQRUQgcHJvZHVjaW5nIHJlcG9ydHMgd2l0aG91dCBhbnlvbmUgYXNraW5nIGl0IHRvOiB0aGUgb3duZXJcbiAgLy8gd2FzIGRlYWN0aXZhdGVkIG9yIHJlbW92ZWQsIG9yIGxvc3QgdGhlIHBlcm1pc3Npb24gYSBydW4gaXMgYXV0aG9yaXplZCB3aXRoLlxuICAvLyBSZWNvcmRlZCBiZWNhdXNlIHRoZSBlZmZlY3QgaXMgc2lsZW50IOKAlCBhIG1hbmFnZXIgZmluZHMgb3V0IGJ5IG5vdCByZWNlaXZpbmdcbiAgLy8gdGhlIHJlcG9ydCDigJQgc28gdGhlIHRyYWlsIGhhcyB0byBzYXkgd2hpY2ggcmVwb3J0cyBzdG9wcGVkIGFuZCB3aHkuXG4gICdyZXBvcnRpbmcucmVwb3J0LnBhdXNlZCcsXG4gIC8vIOKApmFuZCBzdGFydGVkIGFnYWluLiBJdHMgb3duIGFjdGlvbiByYXRoZXIgdGhhbiBhIGRldGFpbCBvbiB0aGUgcGF1c2UsIGJlY2F1c2UgdGhlXG4gIC8vIHF1ZXN0aW9uIGEgcmV2aWV3ZXIgYXNrcyBpcyBcIndhcyB0aGlzIGFjY291bnQncyByZXBvcnRpbmcgb2ZmIGJldHdlZW4gdGhlc2UgdHdvXG4gIC8vIGRhdGVzXCIsIGFuZCBhbnN3ZXJpbmcgaXQgZnJvbSBhIHNpbmdsZSBhY3Rpb24ncyBkZXRhaWxzIG1lYW5zIHJlYWRpbmcgZXZlcnkgcm93LlxuICAncmVwb3J0aW5nLnJlcG9ydC5yZXN1bWVkJyxcbiAgLy8gRGVuaWVkIGF1dGhvcml6YXRpb24gYXR0ZW1wdCDigJQgZW1pdHRlZCBiZXN0LWVmZm9ydCBieSB0aGUgc2hhcmVkXG4gIC8vIGByZXF1aXJlUGVybWlzc2lvbmAgLyBgcmVxdWlyZVN5c3RlbUFkbWluYCBnYXRlIHdoZW4gYSBzdGF0ZS1jaGFuZ2luZ1xuICAvLyAobm9uLUdFVCkgcmVxdWVzdCBpcyByZWplY3RlZCwgc28gcHJvYmluZy9lc2NhbGF0aW9uIGF0dGVtcHRzIGFyZSB2aXNpYmxlXG4gIC8vIHJhdGhlciB0aGFuIGludmlzaWJsZS4gYGRldGFpbHNgIGNhcnJpZXMgdGhlIHJlcXVpcmVkIHBlcm1pc3Npb24gKyBwYXRoO1xuICAvLyBgb3V0Y29tZWAgaXMgJ2ZhaWx1cmUnLlxuICAnYXV0aHouZGVuaWVkJyxcbiAgLy8gXCJBc2tcIiBhc3Npc3RhbnQgYWN0aXZpdHkg4oCUIHZpc2liaWxpdHkgaW50byB3aGF0IHRoZSBhc3Npc3RhbnQgZGlkIG9uIGEgdXNlcidzXG4gIC8vIGJlaGFsZi4gYGFzay5xdWVyeWAgaXMgYSByZWFkLW9ubHkgaG93LXRvIHR1cm47IGBhc2suYWdlbnQudHVybmAgaXMgYSB0b29sLWNhbGxpbmdcbiAgLy8gdHVybi4gYGRldGFpbHNgIGNhcnJ5IFNBRkUgTUVUQURBVEEgT05MWSAodG9vbHMgdXNlZCwgcHJvcG9zYWwga2luZHMsIHF1ZXJ5XG4gIC8vIGxlbmd0aCwgb3V0Y29tZSksIG5ldmVyIHRoZSByYXcgcXVlcnkgdGV4dC5cbiAgJ2Fzay5xdWVyeScsXG4gICdhc2suYWdlbnQudHVybicsXG4gIC8vIFBsdWdpbiBlY29zeXN0ZW0gKGRvY3MvcnVuYm9va3MvZWNvc3lzdGVtLW1vZGVyYXRpb24ubWQpLiBHb3Zlcm5hbmNlIGFjdGlvbnNcbiAgLy8gYXJlIHJlY29yZGVkIHdpdGggYG9yZ0lkYCA9IHRoZSBzeXN0ZW0gb3JnOyBgYWZmZWN0ZWRPcmdJZGAgaXMgdGhlXG4gIC8vIHB1Ymxpc2hlcidzIG9yZyAobGlzdGluZy92ZXJzaW9uL3Jldmlldy9hZHZpc29yeS9wdWJsaXNoZXIgbW9kZXJhdGlvbikgb3JcbiAgLy8gdGhlIGluc3RhbGxpbmcgb3JnIChpbnN0YWxscyArIHBvbGljeSkuIEFub255bW91cyBzdWJtaXNzaW9ucyB1c2UgdGhlXG4gIC8vIGBBTk9OWU1PVVNfQUNUT1JfSURgIGFjdG9yIHdpdGggYGRldGFpbHMuc3VibWlzc2lvbklkYC4gYGRldGFpbHNgIGNhcnJ5IGlkcyxcbiAgLy8gdmVyc2lvbnMsIGRpZ2VzdHMsIHRpZXIsIHN0YXRlIGFuZCByZWFzb24gY29kZXMgb25seSDigJQgbmV2ZXIgcmV2aWV3IGJvZGllcyxcbiAgLy8gUkVBRE1FIGNvbnRlbnQsIHNlY3JldHMgb3IgZW1haWxzLlxuICAvLyBQdWJsaXNoZXJzLlxuICAncHVibGlzaGVyLmNyZWF0ZScsXG4gICdwdWJsaXNoZXIudXBkYXRlJyxcbiAgJ3B1Ymxpc2hlci50ZXJtcy5hY2NlcHQnLFxuICAncHVibGlzaGVyLnZlcmlmeS5yZXF1ZXN0JyxcbiAgJ3B1Ymxpc2hlci52ZXJpZnkuYXBwcm92ZScsXG4gICdwdWJsaXNoZXIudmVyaWZ5LnJlamVjdCcsXG4gICdwdWJsaXNoZXIudGllci5jaGFuZ2UnLFxuICAncHVibGlzaGVyLnN1c3BlbmQnLFxuICAncHVibGlzaGVyLnVuc3VzcGVuZCcsXG4gICdwdWJsaXNoZXIudHJhbnNmZXIucmVxdWVzdCcsXG4gICdwdWJsaXNoZXIudHJhbnNmZXIuYWNjZXB0JyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5kZWNsaW5lJyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5hcHByb3ZlJyxcbiAgJ3B1Ymxpc2hlci50cmFuc2Zlci5yZWplY3QnLFxuICAncHVibGlzaGVyLnByb2ZpbGUtY2hhbmdlLmFwcHJvdmUnLFxuICAncHVibGlzaGVyLnByb2ZpbGUtY2hhbmdlLnJlamVjdCcsXG4gIC8vIFB1Ymxpc2ggcmVxdWVzdHMgKHRlbmFudCDihpIgc3lzdGVtIG9yZykuIGBkZXRhaWxzLmtpbmRgIG5hbWVzIHRoZSByZXF1ZXN0LlxuICAncGx1Z2luLnJlcXVlc3Quc3VibWl0JyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LndpdGhkcmF3JyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LmFwcHJvdmUnLFxuICAncGx1Z2luLnJlcXVlc3Quc2Vjb25kLWFwcHJvdmUnLFxuICAncGx1Z2luLnJlcXVlc3QucmVqZWN0JyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LmF1dG8tYXBwcm92ZScsXG4gIC8vIExpc3RpbmdzIGFuZCB2ZXJzaW9ucyAoc3lzdGVtIG9yZywgZXhjZXB0IHRoZSB0ZW5hbnQgcGF1c2UpLlxuICAncGx1Z2luLmxpc3RpbmcucHVibGlzaCcsXG4gICdwbHVnaW4ubGlzdGluZy51bmxpc3QnLFxuICAncGx1Z2luLmxpc3RpbmcudXBkYXRlJyxcbiAgJ3BsdWdpbi5saXN0aW5nLnN0YXRlLmNoYW5nZScsXG4gICdwbHVnaW4ubGlzdGluZy5wYXVzZScsXG4gICdwbHVnaW4ubGlzdGluZy51bnBhdXNlJyxcbiAgJ3BsdWdpbi52ZXJzaW9uLnBhdXNlJyxcbiAgJ3BsdWdpbi52ZXJzaW9uLnlhbmsnLFxuICAncGx1Z2luLnZlcnNpb24udW55YW5rJyxcbiAgJ3BsdWdpbi52ZXJzaW9uLmRlcHJlY2F0ZScsXG4gICdwbHVnaW4uY29sbGVjdGlvbi51cGRhdGUnLFxuICAvLyBFY29zeXN0ZW0gY29uZmlndXJhdGlvbiAoc3lzdGVtIG9yZykuXG4gICdlY29zeXN0ZW0uYXV0by1hcHByb3ZhbC1ydWxlLmNyZWF0ZScsXG4gICdlY29zeXN0ZW0uYXV0by1hcHByb3ZhbC1ydWxlLnVwZGF0ZScsXG4gICdlY29zeXN0ZW0uYXV0by1hcHByb3ZhbC1ydWxlLmRlbGV0ZScsXG4gICdlY29zeXN0ZW0ucmVzZXJ2ZWQtbmFtZS51cGRhdGUnLFxuICAnZWNvc3lzdGVtLnNsYS51cGRhdGUnLFxuICAvLyBQdWJsaWMgcmVnaXN0cnkgbmFtZXNwYWNlIChgcHVibGljLypgKTogY29weSArIHNpZ24gKyBhdHRlc3Qgb24gcHVibGlzaCxcbiAgLy8gdGhlIHRpZXItY2hhbmdlL3N1c3BlbnNpb24gcmUtc2lnbiBqb2IsIHRhZyByZW1vdmFsIG9uIHlhbmsvdGFrZWRvd24sIGFuZFxuICAvLyB0aGUgcmV0ZW50aW9uIHN3ZWVwLlxuICAncmVnaXN0cnkuaW1hZ2UucHVibGlzaCcsXG4gICdyZWdpc3RyeS5pbWFnZS5yZXNpZ24nLFxuICAncmVnaXN0cnkuaW1hZ2UueWFuaycsXG4gICdyZWdpc3RyeS5pbWFnZS5nYycsXG4gIC8vIEluc3RhbGxzIGFuZCB0aGUgaW5zdGFsbGluZyBvcmcncyBjb25zdW1wdGlvbiBwb2xpY3kgKG9yZy1sb2NhbCkuXG4gICdwbHVnaW4uaW5zdGFsbC5yZXF1ZXN0JyxcbiAgJ3BsdWdpbi5pbnN0YWxsLmFwcHJvdmUnLFxuICAncGx1Z2luLmluc3RhbGwuZGVueScsXG4gICdwbHVnaW4uaW5zdGFsbC5jcmVhdGUnLFxuICAncGx1Z2luLmluc3RhbGwudXBncmFkZScsXG4gIC8vIEEgbWVtYmVyJ3MgcmVxdWVzdCB0byBjaGFuZ2UgYW4gaW5zdGFsbCBwYXN0IHdoYXQgdGhleSBtYXkgZG8gYWxvbmUsIGFuZCBpdHMgZGVjaXNpb24uXG4gICdwbHVnaW4uaW5zdGFsbC5jaGFuZ2UtcmVxdWVzdCcsXG4gICdwbHVnaW4uaW5zdGFsbC5jaGFuZ2UtYXBwcm92ZScsXG4gICdwbHVnaW4uaW5zdGFsbC5jaGFuZ2UtcmVqZWN0JyxcbiAgJ3BsdWdpbi5pbnN0YWxsLnJlbW92ZScsXG4gICdvcmcucGx1Z2luLWluc3RhbGwtcG9saWN5LnVwZGF0ZScsXG4gIC8vIFJldmlld3MgYW5kIHJlcGxpZXMuXG4gICdwbHVnaW4ucmV2aWV3LmNyZWF0ZScsXG4gICdwbHVnaW4ucmV2aWV3LnVwZGF0ZScsXG4gICdwbHVnaW4ucmV2aWV3LmRlbGV0ZScsXG4gICdwbHVnaW4ucmV2aWV3LnJlcG9ydCcsXG4gICdwbHVnaW4ucmV2aWV3LmhvbGQnLFxuICAncGx1Z2luLnJldmlldy5yZWxlYXNlJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVtb3ZlJyxcbiAgJ3BsdWdpbi5yZXZpZXcuYW5vbnltaXplJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVwbHkuY3JlYXRlJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVwbHkudXBkYXRlJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVwbHkuZGVsZXRlJyxcbiAgLy8gQW5vbnltb3VzIHN1Ym1pc3Npb25zLlxuICAncGx1Z2luLnN1Ym1pc3Npb24uY3JlYXRlJyxcbiAgJ3BsdWdpbi5zdWJtaXNzaW9uLnZlcmlmeScsXG4gICdwbHVnaW4uc3VibWlzc2lvbi5nYXRlLWZhaWwnLFxuICAncGx1Z2luLnN1Ym1pc3Npb24uYXBwcm92ZScsXG4gICdwbHVnaW4uc3VibWlzc2lvbi5yZWplY3QnLFxuICAncGx1Z2luLnN1Ym1pc3Npb24uY2xhaW0nLFxuICAncGx1Z2luLnN1Ym1pc3Npb24uZXhwaXJlJyxcbiAgLy8gU2VjdXJpdHkgYWR2aXNvcmllcyAocHVibGlzaC93aXRoZHJhdyBhcmUgc3lzdGVtLW9yZyBvbmx5OyB1cGRhdGUgPSBhXG4gIC8vIG1vZGVyYXRvciBlZGl0aW5nIGEgZHJhZnQgYmVmb3JlIGl0IGlzIHB1Ymxpc2hlZCkuXG4gICdwbHVnaW4uYWR2aXNvcnkuY3JlYXRlJyxcbiAgJ3BsdWdpbi5hZHZpc29yeS51cGRhdGUnLFxuICAncGx1Z2luLmFkdmlzb3J5LnB1Ymxpc2gnLFxuICAncGx1Z2luLmFkdmlzb3J5LndpdGhkcmF3JyxcbiAgLy8gUGVyLW9yZyBwbHVnaW4gc2VjdXJpdHkgbm90aWZpY2F0aW9ucyAocGx1Z2luIHNjYW4gZ2F0ZXMpOiB0aGUgc2V0dGluZ3NcbiAgLy8gKHJlY2lwaWVudHMsIGRpZ2VzdCwgd2ViaG9vaywgZXh0ZXJuYWwgYWRkcmVzcyDigJQgY2hhbmdlZCBmaWVsZCBuYW1lcyBhbmRcbiAgLy8gdGhlIHdlYmhvb2sgaG9zdCBvbmx5LCBuZXZlciB0aGUgc2VjcmV0IG9yIHRoZSBhZGRyZXNzKSwgYW4gZXh0ZXJuYWxcbiAgLy8gYWRkcmVzcyBjb25maXJtZWQgdGhyb3VnaCBpdHMgZW1haWxlZCBzaW5nbGUtdXNlIGxpbmssIGFuZCBhIHRlc3Qgc2VuZC5cbiAgJ3BsdWdpbi5zZWN1cml0eV9ub3RpZmljYXRpb25zLnVwZGF0ZScsXG4gICdwbHVnaW4uc2VjdXJpdHlfbm90aWZpY2F0aW9ucy5leHRlcm5hbF9lbWFpbC52ZXJpZnknLFxuICAncGx1Z2luLnNlY3VyaXR5X25vdGlmaWNhdGlvbnMudGVzdCcsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBSZW1vdGVBdWRpdEFjdGlvbiA9IHR5cGVvZiBSRU1PVEVfQVVESVRfQUNUSU9OU1tudW1iZXJdO1xuXG4vKiogV2hldGhlciBgdmFsdWVgIGlzIGFuIGFjdGlvbiBhIHJlbW90ZSBzZXJ2aWNlIG1heSBlbWl0ICh0aGUgaW5nZXN0IGFsbG93LWxpc3QpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVtb3RlQXVkaXRBY3Rpb24odmFsdWU6IHN0cmluZyk6IHZhbHVlIGlzIFJlbW90ZUF1ZGl0QWN0aW9uIHtcbiAgcmV0dXJuIChSRU1PVEVfQVVESVRfQUNUSU9OUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModmFsdWUpO1xufVxuIl19
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* from. Listed here because neither the CLI nor the plugin service ships the
|
|
5
5
|
* repo; a pipeline-manager test fails when the list drifts from the tree.
|
|
6
6
|
*/
|
|
7
|
-
/** One `
|
|
7
|
+
/** One `plugin-<eco>-base` image a plugin can start `FROM`. */
|
|
8
8
|
export interface PluginBaseImage {
|
|
9
9
|
/** `--base` value. */
|
|
10
10
|
key: string;
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
export const PLUGIN_BASE_IMAGES = [
|
|
4
|
-
{ key: 'plugin', image: '
|
|
5
|
-
{ key: 'aws-cli', image: '
|
|
6
|
-
{ key: 'cpp', image: '
|
|
7
|
-
{ key: 'dotnet', image: '
|
|
8
|
-
{ key: 'go', image: '
|
|
9
|
-
{ key: 'jvm', image: '
|
|
10
|
-
{ key: 'node', image: '
|
|
11
|
-
{ key: 'php', image: '
|
|
12
|
-
{ key: 'python', image: '
|
|
13
|
-
{ key: 'ruby', image: '
|
|
14
|
-
{ key: 'rust', image: '
|
|
15
|
-
{ key: 'trivy', image: '
|
|
4
|
+
{ key: 'plugin', image: 'plugin-base:24.04', dir: '_plugin-base', provides: 'git, curl, jq, unzip, fetch-verified, run-logged (the root base)', smokeTest: 'bash --version && jq --version' },
|
|
5
|
+
{ key: 'aws-cli', image: 'plugin-aws-cli-base:1.0', dir: '_aws-cli-base', provides: 'AWS CLI v2', smokeTest: 'aws --version' },
|
|
6
|
+
{ key: 'cpp', image: 'plugin-cpp-base:1.0', dir: '_cpp-base', provides: 'C/C++ toolchain, CMake, Conan, Meson', smokeTest: 'cc --version && cmake --version' },
|
|
7
|
+
{ key: 'dotnet', image: 'plugin-dotnet-base:1.0', dir: '_dotnet-base', provides: 'one pinned .NET SDK', smokeTest: 'dotnet --version' },
|
|
8
|
+
{ key: 'go', image: 'plugin-go-base:1.0', dir: '_go-base', provides: 'one pinned Go', smokeTest: 'go version' },
|
|
9
|
+
{ key: 'jvm', image: 'plugin-jvm-base:1.0', dir: '_jvm-base', provides: 'Corretto JDK, Maven, Gradle, Kotlin', smokeTest: 'java -version && mvn --version' },
|
|
10
|
+
{ key: 'node', image: 'plugin-node-base:1.0', dir: '_node-base', provides: 'one pinned Node.js + npm', smokeTest: 'node --version && npm --version' },
|
|
11
|
+
{ key: 'php', image: 'plugin-php-base:1.0', dir: '_php-base', provides: 'one pinned PHP + Composer', smokeTest: 'php --version && composer --version' },
|
|
12
|
+
{ key: 'python', image: 'plugin-python-base:1.0', dir: '_python-base', provides: 'one pinned CPython + pip', smokeTest: 'python3 --version && pip3 --version' },
|
|
13
|
+
{ key: 'ruby', image: 'plugin-ruby-base:1.0', dir: '_ruby-base', provides: 'one pinned Ruby + Bundler', smokeTest: 'ruby --version && bundle --version' },
|
|
14
|
+
{ key: 'rust', image: 'plugin-rust-base:1.0', dir: '_rust-base', provides: 'one pinned Rust toolchain + clippy/rustfmt', smokeTest: 'cargo --version && rustc --version' },
|
|
15
|
+
{ key: 'trivy', image: 'plugin-trivy-base:1.0', dir: '_trivy-base', provides: 'trivy (two pinned versions)', smokeTest: 'trivy --version' },
|
|
16
16
|
];
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWJhc2UtaW1hZ2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZhbGlkYXRpb24vcGx1Z2luLWJhc2UtaW1hZ2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUF1QnRDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUErQjtJQUM1RCxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLGtFQUFrRSxFQUFFLFNBQVMsRUFBRSxnQ0FBZ0MsRUFBRTtJQUM3TCxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLHlCQUF5QixFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO0lBQzlILEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUscUJBQXFCLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsc0NBQXNDLEVBQUUsU0FBUyxFQUFFLGlDQUFpQyxFQUFFO0lBQzlKLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFO0lBQ3ZJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUU7SUFDL0csRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxxQ0FBcUMsRUFBRSxTQUFTLEVBQUUsZ0NBQWdDLEVBQUU7SUFDNUosRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSwwQkFBMEIsRUFBRSxTQUFTLEVBQUUsaUNBQWlDLEVBQUU7SUFDckosRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSwyQkFBMkIsRUFBRSxTQUFTLEVBQUUscUNBQXFDLEVBQUU7SUFDdkosRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSwwQkFBMEIsRUFBRSxTQUFTLEVBQUUscUNBQXFDLEVBQUU7SUFDL0osRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSwyQkFBMkIsRUFBRSxTQUFTLEVBQUUsb0NBQW9DLEVBQUU7SUFDekosRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSw0Q0FBNEMsRUFBRSxTQUFTLEVBQUUsb0NBQW9DLEVBQUU7SUFDMUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSw2QkFBNkIsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUU7Q0FDNUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBzaGFyZWQgcGx1Z2luIGJhc2UgaW1hZ2VzIChkZXBsb3kvcGx1Z2lucy9fYmFzZSk6IHdoYXQgYHBsdWdpbiBuZXdgXG4gKiBzY2FmZm9sZHMgYEZST01gIGFuZCB3aGF0IEFJIHBsdWdpbiBnZW5lcmF0aW9uIHRlbGxzIHRoZSBtb2RlbCB0byBzdGFydFxuICogZnJvbS4gTGlzdGVkIGhlcmUgYmVjYXVzZSBuZWl0aGVyIHRoZSBDTEkgbm9yIHRoZSBwbHVnaW4gc2VydmljZSBzaGlwcyB0aGVcbiAqIHJlcG87IGEgcGlwZWxpbmUtbWFuYWdlciB0ZXN0IGZhaWxzIHdoZW4gdGhlIGxpc3QgZHJpZnRzIGZyb20gdGhlIHRyZWUuXG4gKi9cblxuLyoqIE9uZSBgcGx1Z2luLTxlY28+LWJhc2VgIGltYWdlIGEgcGx1Z2luIGNhbiBzdGFydCBgRlJPTWAuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbkJhc2VJbWFnZSB7XG4gIC8qKiBgLS1iYXNlYCB2YWx1ZS4gKi9cbiAga2V5OiBzdHJpbmc7XG4gIC8qKiBJbWFnZSB0YWcgdGhlIERvY2tlcmZpbGUncyBgRlJPTWAgbmFtZXMuICovXG4gIGltYWdlOiBzdHJpbmc7XG4gIC8qKiBEaXJlY3RvcnkgdW5kZXIgZGVwbG95L3BsdWdpbnMvX2Jhc2UuICovXG4gIGRpcjogc3RyaW5nO1xuICAvKiogV2hhdCB0aGUgYmFzZSBwcm92aWRlcyBvbiB0b3Agb2YgdGhlIHJvb3QgYmFzZS4gKi9cbiAgcHJvdmlkZXM6IHN0cmluZztcbiAgLyoqIEEgY29tbWFuZCB0aGF0IHByb3ZlcyB0aGUgcnVudGltZSBpcyBvbiBQQVRIICh0aGUgc2NhZmZvbGQncyBzbW9rZVRlc3QpLiAqL1xuICBzbW9rZVRlc3Q6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IFBMVUdJTl9CQVNFX0lNQUdFUzogcmVhZG9ubHkgUGx1Z2luQmFzZUltYWdlW10gPSBbXG4gIHsga2V5OiAncGx1Z2luJywgaW1hZ2U6ICdwbHVnaW4tYmFzZToyNC4wNCcsIGRpcjogJ19wbHVnaW4tYmFzZScsIHByb3ZpZGVzOiAnZ2l0LCBjdXJsLCBqcSwgdW56aXAsIGZldGNoLXZlcmlmaWVkLCBydW4tbG9nZ2VkICh0aGUgcm9vdCBiYXNlKScsIHNtb2tlVGVzdDogJ2Jhc2ggLS12ZXJzaW9uICYmIGpxIC0tdmVyc2lvbicgfSxcbiAgeyBrZXk6ICdhd3MtY2xpJywgaW1hZ2U6ICdwbHVnaW4tYXdzLWNsaS1iYXNlOjEuMCcsIGRpcjogJ19hd3MtY2xpLWJhc2UnLCBwcm92aWRlczogJ0FXUyBDTEkgdjInLCBzbW9rZVRlc3Q6ICdhd3MgLS12ZXJzaW9uJyB9LFxuICB7IGtleTogJ2NwcCcsIGltYWdlOiAncGx1Z2luLWNwcC1iYXNlOjEuMCcsIGRpcjogJ19jcHAtYmFzZScsIHByb3ZpZGVzOiAnQy9DKysgdG9vbGNoYWluLCBDTWFrZSwgQ29uYW4sIE1lc29uJywgc21va2VUZXN0OiAnY2MgLS12ZXJzaW9uICYmIGNtYWtlIC0tdmVyc2lvbicgfSxcbiAgeyBrZXk6ICdkb3RuZXQnLCBpbWFnZTogJ3BsdWdpbi1kb3RuZXQtYmFzZToxLjAnLCBkaXI6ICdfZG90bmV0LWJhc2UnLCBwcm92aWRlczogJ29uZSBwaW5uZWQgLk5FVCBTREsnLCBzbW9rZVRlc3Q6ICdkb3RuZXQgLS12ZXJzaW9uJyB9LFxuICB7IGtleTogJ2dvJywgaW1hZ2U6ICdwbHVnaW4tZ28tYmFzZToxLjAnLCBkaXI6ICdfZ28tYmFzZScsIHByb3ZpZGVzOiAnb25lIHBpbm5lZCBHbycsIHNtb2tlVGVzdDogJ2dvIHZlcnNpb24nIH0sXG4gIHsga2V5OiAnanZtJywgaW1hZ2U6ICdwbHVnaW4tanZtLWJhc2U6MS4wJywgZGlyOiAnX2p2bS1iYXNlJywgcHJvdmlkZXM6ICdDb3JyZXR0byBKREssIE1hdmVuLCBHcmFkbGUsIEtvdGxpbicsIHNtb2tlVGVzdDogJ2phdmEgLXZlcnNpb24gJiYgbXZuIC0tdmVyc2lvbicgfSxcbiAgeyBrZXk6ICdub2RlJywgaW1hZ2U6ICdwbHVnaW4tbm9kZS1iYXNlOjEuMCcsIGRpcjogJ19ub2RlLWJhc2UnLCBwcm92aWRlczogJ29uZSBwaW5uZWQgTm9kZS5qcyArIG5wbScsIHNtb2tlVGVzdDogJ25vZGUgLS12ZXJzaW9uICYmIG5wbSAtLXZlcnNpb24nIH0sXG4gIHsga2V5OiAncGhwJywgaW1hZ2U6ICdwbHVnaW4tcGhwLWJhc2U6MS4wJywgZGlyOiAnX3BocC1iYXNlJywgcHJvdmlkZXM6ICdvbmUgcGlubmVkIFBIUCArIENvbXBvc2VyJywgc21va2VUZXN0OiAncGhwIC0tdmVyc2lvbiAmJiBjb21wb3NlciAtLXZlcnNpb24nIH0sXG4gIHsga2V5OiAncHl0aG9uJywgaW1hZ2U6ICdwbHVnaW4tcHl0aG9uLWJhc2U6MS4wJywgZGlyOiAnX3B5dGhvbi1iYXNlJywgcHJvdmlkZXM6ICdvbmUgcGlubmVkIENQeXRob24gKyBwaXAnLCBzbW9rZVRlc3Q6ICdweXRob24zIC0tdmVyc2lvbiAmJiBwaXAzIC0tdmVyc2lvbicgfSxcbiAgeyBrZXk6ICdydWJ5JywgaW1hZ2U6ICdwbHVnaW4tcnVieS1iYXNlOjEuMCcsIGRpcjogJ19ydWJ5LWJhc2UnLCBwcm92aWRlczogJ29uZSBwaW5uZWQgUnVieSArIEJ1bmRsZXInLCBzbW9rZVRlc3Q6ICdydWJ5IC0tdmVyc2lvbiAmJiBidW5kbGUgLS12ZXJzaW9uJyB9LFxuICB7IGtleTogJ3J1c3QnLCBpbWFnZTogJ3BsdWdpbi1ydXN0LWJhc2U6MS4wJywgZGlyOiAnX3J1c3QtYmFzZScsIHByb3ZpZGVzOiAnb25lIHBpbm5lZCBSdXN0IHRvb2xjaGFpbiArIGNsaXBweS9ydXN0Zm10Jywgc21va2VUZXN0OiAnY2FyZ28gLS12ZXJzaW9uICYmIHJ1c3RjIC0tdmVyc2lvbicgfSxcbiAgeyBrZXk6ICd0cml2eScsIGltYWdlOiAncGx1Z2luLXRyaXZ5LWJhc2U6MS4wJywgZGlyOiAnX3RyaXZ5LWJhc2UnLCBwcm92aWRlczogJ3RyaXZ5ICh0d28gcGlubmVkIHZlcnNpb25zKScsIHNtb2tlVGVzdDogJ3RyaXZ5IC0tdmVyc2lvbicgfSxcbl07XG4iXX0=
|