@pipeline-builder/pipeline-manager 4.4.5 → 4.4.7
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/dist/agent/ai.d.ts +11 -0
- package/dist/agent/ai.d.ts.map +1 -1
- package/dist/agent/ai.js +47 -4
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +9 -2
- package/dist/commands/create-pat.d.ts.map +1 -1
- package/dist/commands/create-pat.js +3 -1
- package/dist/commands/create-pipeline.d.ts.map +1 -1
- package/dist/commands/create-pipeline.js +11 -2
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +20 -2
- package/dist/commands/report.js +4 -4
- package/dist/commands/security-report.d.ts +42 -0
- package/dist/commands/security-report.d.ts.map +1 -0
- package/dist/commands/security-report.js +89 -0
- package/dist/commands/setup-events.d.ts.map +1 -1
- package/dist/commands/setup-events.js +14 -1
- package/dist/commands/store-token.d.ts +1 -0
- package/dist/commands/store-token.d.ts.map +1 -1
- package/dist/commands/store-token.js +45 -19
- package/dist/commands/synth.d.ts +7 -1
- package/dist/commands/synth.d.ts.map +1 -1
- package/dist/commands/synth.js +66 -4
- package/dist/commands/verify-plugins.d.ts +45 -0
- package/dist/commands/verify-plugins.d.ts.map +1 -0
- package/dist/commands/verify-plugins.js +134 -0
- package/dist/lambda/token-renew-handler.d.ts +3 -1
- package/dist/lambda/token-renew-handler.d.ts.map +1 -1
- package/dist/lambda/token-renew-handler.js +31 -5
- package/dist/templates/events-stack.json +10 -0
- package/dist/utils/api-client.d.ts.map +1 -1
- package/dist/utils/api-client.js +20 -3
- package/dist/utils/auth-utils.d.ts.map +1 -1
- package/dist/utils/auth-utils.js +3 -1
- package/dist/utils/cdk-utils.js +2 -2
- package/dist/utils/command-utils.d.ts.map +1 -1
- package/dist/utils/command-utils.js +5 -2
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +9 -4
- package/dist/utils/deploy-runner.d.ts +25 -0
- package/dist/utils/deploy-runner.d.ts.map +1 -1
- package/dist/utils/deploy-runner.js +34 -5
- package/dist/utils/device-auth.d.ts.map +1 -1
- package/dist/utils/device-auth.js +4 -3
- package/dist/utils/error-handler.d.ts.map +1 -1
- package/dist/utils/error-handler.js +8 -1
- package/dist/utils/pipeline-config.d.ts +3 -0
- package/dist/utils/pipeline-config.d.ts.map +1 -1
- package/dist/utils/pipeline-config.js +4 -3
- package/dist/utils/platform-secret.d.ts.map +1 -1
- package/dist/utils/platform-secret.js +3 -1
- package/dist/utils/plugin-resolver.d.ts +41 -3
- package/dist/utils/plugin-resolver.d.ts.map +1 -1
- package/dist/utils/plugin-resolver.js +125 -21
- package/dist/utils/registration-client.d.ts +28 -0
- package/dist/utils/registration-client.d.ts.map +1 -0
- package/dist/utils/registration-client.js +57 -0
- package/dist/utils/request-context.d.ts +11 -0
- package/dist/utils/request-context.d.ts.map +1 -0
- package/dist/utils/request-context.js +62 -0
- package/dist/utils/service-account.d.ts +6 -4
- package/dist/utils/service-account.d.ts.map +1 -1
- package/dist/utils/service-account.js +14 -9
- package/package.json +6 -5
package/dist/commands/report.js
CHANGED
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
* its report produced by its own scheduler rather than ours, or wants publishing gated on a
|
|
13
13
|
* release finishing, needs a command with an exit code.
|
|
14
14
|
*
|
|
15
|
-
* EVERY GATE IS THE SERVER'S. The CLI checks nothing: `reports:
|
|
16
|
-
* `reports:
|
|
15
|
+
* EVERY GATE IS THE SERVER'S. The CLI checks nothing: `reports:write` for create and run,
|
|
16
|
+
* `reports:publish` for publish and link, `reports:read` for pdf, the `stakeholder_reports`
|
|
17
17
|
* feature for all of them,
|
|
18
18
|
* and the org's admin-owned policy for whether a link may be minted at all. The caller's
|
|
19
19
|
* token decides, and a 403 is printed as the server worded it — a CLI that pre-judged
|
|
@@ -171,7 +171,7 @@ export function report(program) {
|
|
|
171
171
|
// ── publish ───────────────────────────────────────────────────────────────
|
|
172
172
|
withSslOptions(group
|
|
173
173
|
.command('publish')
|
|
174
|
-
.description('Publish a composed run. Needs reports:
|
|
174
|
+
.description('Publish a composed run. Needs reports:publish — publishing is when numbers leave the platform.')
|
|
175
175
|
.requiredOption('-r, --run <id>', 'Run ID to publish'))
|
|
176
176
|
.action(async (options) => {
|
|
177
177
|
const executionId = printCommandHeader('Report Publish');
|
|
@@ -312,4 +312,4 @@ function splitList(value) {
|
|
|
312
312
|
return [];
|
|
313
313
|
return value.split(',').map((s) => s.trim()).filter((s) => s.length > 0);
|
|
314
314
|
}
|
|
315
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3JlcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxJQUFJLE1BQU0sWUFBWSxDQUFDO0FBQzlCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEosT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTlHLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUM7QUEwQjFDLE1BQU0sSUFBSSxHQUFHLDBCQUEwQixDQUFDO0FBS3hDLCtEQUErRDtBQUMvRCxTQUFTLE1BQU0sQ0FBSSxRQUFpQixFQUFFLElBQVk7SUFDaEQsTUFBTSxHQUFHLEdBQUcsUUFBbUMsQ0FBQztJQUNoRCxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9DLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLE9BQU8sSUFBSSwwQkFBMEIsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDO0FBQ2xCLENB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cUJBQXFCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLFdBQVcsRUFBRTtnQkFDMUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFO2FBQ3JELENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCw2REFBNkQ7QUFDN0QsU0FBUyxTQUFTLENBQUMsS0FBYztJQUMvQixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUN6QyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0UsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIGBwaXBlbGluZS1tYW5hZ2VyIHJlcG9ydCDigKZgIOKAlCB0aGUgc3Rha2Vob2xkZXItcmVwb3J0IGFkZC1vbiBmcm9tIGEgdGVybWluYWwuXG4gKlxuICogU2V2ZW4gdmVyYnMsIG1hdGNoaW5nIHRoZSBBUEkgc3VyZmFjZSBhIGxlYWQgYWN0dWFsbHkgZHJpdmVzOiBgY3JlYXRlYCwgYGxpc3RgLFxuICogYHJ1biAtLXBlcmlvZGAsIGBwdWJsaXNoYCwgYGxpbmtgLCBgcGRmYCBhbmQgYHRyYW5zZmVyYC5cbiAqXG4gKiBXSFkgQSBDTEkgRk9SIFRISVMgQVQgQUxMLiBUd28gam9icyB0aGUgZGFzaGJvYXJkIGlzIHRoZSB3cm9uZyBzaGFwZSBmb3IuIFRoZSBmaXJzdCBpc1xuICogQkFDS0ZJTEw6IGByZXBvcnQgcnVuIC0tcGVyaW9kIDIwMjYtVzM0YCBmb3IgZWFjaCBvZiBmaXZlIHdlZWtzIGlzIGEgbG9vcCBpbiBhIHNoZWxsIGFuZFxuICogZml2ZSBjYXJlZnVsIGNsaWNrcyBpbiBhIGJyb3dzZXIuIFRoZSBzZWNvbmQgaXMgVU5BVFRFTkRFRCBPUEVSQVRJT04g4oCUIGEgdGVhbSB0aGF0IHdhbnRzXG4gKiBpdHMgcmVwb3J0IHByb2R1Y2VkIGJ5IGl0cyBvd24gc2NoZWR1bGVyIHJhdGhlciB0aGFuIG91cnMsIG9yIHdhbnRzIHB1Ymxpc2hpbmcgZ2F0ZWQgb24gYVxuICogcmVsZWFzZSBmaW5pc2hpbmcsIG5lZWRzIGEgY29tbWFuZCB3aXRoIGFuIGV4aXQgY29kZS5cbiAqXG4gKiBFVkVSWSBHQVRFIElTIFRIRSBTRVJWRVInUy4gVGhlIENMSSBjaGVja3Mgbm90aGluZzogYHJlcG9ydHM6YXV0aG9yYCBmb3IgY3JlYXRlIGFuZCBydW4sXG4gKiBgcmVwb3J0czpzaGFyZWAgZm9yIHB1Ymxpc2ggYW5kIGxpbmssIGByZXBvcnRzOnJlYWRgIGZvciBwZGYsIHRoZSBgc3Rha2Vob2xkZXJfcmVwb3J0c2BcbiAqIGZlYXR1cmUgZm9yIGFsbCBvZiB0aGVtLFxuICogYW5kIHRoZSBvcmcncyBhZG1pbi1vd25lZCBwb2xpY3kgZm9yIHdoZXRoZXIgYSBsaW5rIG1heSBiZSBtaW50ZWQgYXQgYWxsLiBUaGUgY2FsbGVyJ3NcbiAqIHRva2VuIGRlY2lkZXMsIGFuZCBhIDQwMyBpcyBwcmludGVkIGFzIHRoZSBzZXJ2ZXIgd29yZGVkIGl0IOKAlCBhIENMSSB0aGF0IHByZS1qdWRnZWRcbiAqIHdvdWxkIGJlIGEgc2Vjb25kIGNvcHkgb2YgdGhlIHJ1bGVzLCB3cm9uZyB0aGUgZmlyc3QgdGltZSBlaXRoZXIgY2hhbmdlZC5cbiAqL1xuXG5pbXBvcnQgeyB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCBwaWNvIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHsgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudCwgcHJpbnRDb21tYW5kSGVhZGVyLCBwcmludEV4ZWN1dGlvblN1bW1hcnksIHByaW50U3NsV2FybmluZywgd2l0aFNzbE9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9jb21tYW5kLXV0aWxzLmpzJztcbmltcG9ydCB7IEVSUk9SX0NPREVTLCBoYW5kbGVFcnJvciB9IGZyb20gJy4uL3V0aWxzL2Vycm9yLWhhbmRsZXIuanMnO1xuaW1wb3J0IHsgcHJpbnRJbmZvLCBwcmludEtleVZhbHVlLCBwcmludFNlY3Rpb24sIHByaW50U3VjY2VzcywgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcblxuY29uc3QgeyBib2xkLCBkaW0sIGdyZWVuLCB5ZWxsb3cgfSA9IHBpY287XG5cbi8qKiBUaGUgQVBJIHNoYXBlIHRoZSBDTEkgcmVhZHMuIE5hcnJvd2VkIHRvIHdoYXQgaXQgcHJpbnRzLiAqL1xuaW50ZXJmYWNlIFJlcG9ydERlZmluaXRpb24ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIHRlbXBsYXRlOiBzdHJpbmc7XG4gIGNhZGVuY2U6IHN0cmluZztcbiAgdGltZXpvbmU6IHN0cmluZztcbiAgd2Vla1N0YXJ0OiBzdHJpbmc7XG4gIGlzQWN0aXZlOiBib29sZWFuO1xuICBwYXVzZWRSZWFzb24/OiBzdHJpbmcgfCBudWxsO1xuICBuZXh0UnVuQXQ/OiBzdHJpbmcgfCBudWxsO1xuICBsYXN0UnVuQXQ/OiBzdHJpbmcgfCBudWxsO1xuICByZWNpcGllbnRzOiBzdHJpbmdbXTtcbiAgYXV0b1NlbmQ6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBSZXBvcnRSdW4ge1xuICBpZDogc3RyaW5nO1xuICBwZXJpb2RMYWJlbDogc3RyaW5nO1xuICB2ZXJzaW9uOiBudW1iZXI7XG4gIHN0YXR1czogc3RyaW5nO1xuICBwdWJsaXNoZWRBdD86IHN0cmluZyB8IG51bGw7XG59XG5cbmNvbnN0IEJBU0UgPSAnL2FwaS9yZXBvcnRzL3N0YWtlaG9sZGVyJztcblxuLyoqIFRoZSByZXNwb25zZSBlbnZlbG9wZSBldmVyeSByb3V0ZSBoZXJlIHJldHVybnMuICovXG5pbnRlcmZhY2UgRW52ZWxvcGU8VD4geyBzdWNjZXNzPzogYm9vbGVhbjsgZGF0YT86IFQ7IG1lc3NhZ2U/OiBzdHJpbmcgfVxuXG4vKiogVW53cmFwIGFuIGVudmVsb3BlLCBvciBmYWlsIHdpdGggdGhlIHNlcnZlcidzIG93biB3b3Jkcy4gKi9cbmZ1bmN0aW9uIHVud3JhcDxUPihyZXNwb25zZTogdW5rbm93biwgd2hhdDogc3RyaW5nKTogVCB7XG4gIGNvbnN0IGVudiA9IHJlc3BvbnNlIGFzIEVudmVsb3BlPFQ+IHwgdW5kZWZpbmVkO1xuICBpZiAoIWVudiB8fCBlbnYuc3VjY2VzcyA9PT0gZmFsc2UgfHwgIWVudi5kYXRhKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVudj8ubWVzc2FnZSA/PyBgVGhlIHNlcnZlciByZXR1cm5lZCBubyAke3doYXR9YCk7XG4gIH1cbiAgcmV0dXJuIGVudi5kYXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwb3J0KHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgY29uc3QgZ3JvdXAgPSBwcm9ncmFtLmNvbW1hbmQoJ3JlcG9ydCcpLmRlc2NyaXB0aW9uKCdDcmVhdGUsIHJ1biwgcHVibGlzaCBhbmQgc2hhcmUgc3Rha2Vob2xkZXIgcmVwb3J0cycpO1xuXG4gIC8vIOKUgOKUgCBsaXN0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICB3aXRoU3NsT3B0aW9ucyhncm91cFxuICAgIC5jb21tYW5kKCdsaXN0JylcbiAgICAuZGVzY3JpcHRpb24oJ0xpc3QgdGhpcyBvcmdhbml6YXRpb25cXCdzIHNhdmVkIHJlcG9ydHMsIHRoZWlyIHNjaGVkdWxlIGFuZCBwYXVzZSBzdGF0ZS4nKSlcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignUmVwb3J0IExpc3QnKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHByaW50U3NsV2FybmluZyhvcHRpb25zLnZlcmlmeVNzbCk7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnQob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHVud3JhcDx7IGRlZmluaXRpb25zOiBSZXBvcnREZWZpbml0aW9uW10gfT4oXG4gICAgICAgICAgYXdhaXQgY2xpZW50LmdldChgJHtjbGllbnQuZ2V0Q29uZmlnKCkuYXBpLmJhc2VVcmx9JHtCQVNFfS9kZWZpbml0aW9uc2ApLCAncmVwb3J0cycsXG4gICAgICAgICk7XG4gICAgICAgIHByaW50U2VjdGlvbignU2F2ZWQgUmVwb3J0cycpO1xuICAgICAgICBpZiAoZGF0YS5kZWZpbml0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBwcmludEluZm8oJ05vIHNhdmVkIHJlcG9ydHMgeWV0LiBDcmVhdGUgb25lIHdpdGggYHBpcGVsaW5lLW1hbmFnZXIgcmVwb3J0IGNyZWF0ZWAuJyk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBkIG9mIGRhdGEuZGVmaW5pdGlvbnMpIHtcbiAgICAgICAgICAvLyBUaGUgcGF1c2UgUkVBU09OLCBub3QganVzdCB0aGUgc3RhdGU6IFwicGF1c2VkXCIgb24gaXRzIG93biBpcyBhIHN1cHBvcnQgdGlja2V0LlxuICAgICAgICAgIGNvbnN0IHN0YXRlID0gZC5pc0FjdGl2ZVxuICAgICAgICAgICAgPyBncmVlbignYWN0aXZlJylcbiAgICAgICAgICAgIDogeWVsbG93KGBwYXVzZWQke2QucGF1c2VkUmVhc29uID8gYCAoJHtkLnBhdXNlZFJlYXNvbn0pYCA6ICcnfWApO1xuICAgICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICAgW2JvbGQoZC5uYW1lKV06IGAke3N0YXRlfSAke2RpbShgwrcgJHtkLmNhZGVuY2V9IMK3ICR7ZC50aW1lem9uZX0gwrcgJHtkLnJlY2lwaWVudHMubGVuZ3RofSByZWNpcGllbnQocykke2QuYXV0b1NlbmQgPyAnIMK3IGF1dG8tc2VuZCcgOiAnJ31gKX1gLFxuICAgICAgICAgICAgJyAgaWQnOiBkLmlkLFxuICAgICAgICAgICAgJyAgbmV4dCBydW4nOiBkLm5leHRSdW5BdCA/PyAnKG5vdCBzY2hlZHVsZWQpJyxcbiAgICAgICAgICAgICcgIGxhc3QgcnVuJzogZC5sYXN0UnVuQXQgPz8gJyhuZXZlciknLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHByaW50RXhlY3V0aW9uU3VtbWFyeShleGVjdXRpb25JZCwgRGF0ZS5ub3coKSAtIHN0YXJ0KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHsgY29tbWFuZDogJ3JlcG9ydC1saXN0JywgZXhlY3V0aW9uSWQgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgLy8g4pSA4pSAIGNyZWF0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgd2l0aFNzbE9wdGlvbnMoZ3JvdXBcbiAgICAuY29tbWFuZCgnY3JlYXRlJylcbiAgICAuZGVzY3JpcHRpb24oJ1NhdmUgYSBuZXcgc2NoZWR1bGVkIHJlcG9ydC4gVGhlIGNyZWF0b3Igb3ducyBpdDsgYSBzY2hlZHVsZWQgcnVuIGlzIGF1dGhvcml6ZWQgYXMgdGhlIG93bmVyLicpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctbiwgLS1uYW1lIDxuYW1lPicsICdSZXBvcnQgbmFtZSwgYXMgaXRzIHJlY2lwaWVudHMgd2lsbCBzZWUgaXQnKVxuICAgIC5vcHRpb24oJy10LCAtLXRlbXBsYXRlIDx0ZW1wbGF0ZT4nLCAnd2Vla2x5X2RlbGl2ZXJ5IHwgbW9udGhseV9oZWFsdGggfCBxdWFydGVybHlfcmV2aWV3JywgJ3dlZWtseV9kZWxpdmVyeScpXG4gICAgLm9wdGlvbignLXosIC0tdGltZXpvbmUgPHR6PicsICdJQU5BIHRpbWV6b25lIHRoZSBwZXJpb2QgaXMgY3V0IGluIChkZWZhdWx0cyB0byB0aGUgc2VydmVyXFwncyByZXBvcnQgZGVmYXVsdCknKVxuICAgIC5vcHRpb24oJy0td2Vlay1zdGFydCA8ZGF5PicsICdtb25kYXkgfCBzdW5kYXknKVxuICAgIC5vcHRpb24oJy0tc2NvcGUgPGtpbmQ+JywgJ29yZyB8IHByb2plY3RzIHwgcm9sbHVwJywgJ29yZycpXG4gICAgLm9wdGlvbignLS1wcm9qZWN0cyA8bmFtZXM+JywgJ0NvbW1hLXNlcGFyYXRlZCBwcm9qZWN0IG5hbWVzICh3aXRoIC0tc2NvcGUgcHJvamVjdHMpJylcbiAgICAub3B0aW9uKCctLXJlY2lwaWVudHMgPGlkcz4nLCAnQ29tbWEtc2VwYXJhdGVkIHJlY2lwaWVudCBJRHMgZnJvbSB0aGUgb3JnXFwncyBkaXN0cmlidXRpb24gbGlzdCcpXG4gICAgLm9wdGlvbignLS1hdXRvLXNlbmQnLCAnUHVibGlzaCB3aXRob3V0IHJldmlldy4gT2ZmIGJ5IGRlZmF1bHQg4oCUIHRoZSByZXZpZXcgc3RlcCBpcyB3aGVyZSB0aGUgY29udGV4dCBnb2VzLicpKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdSZXBvcnQgQ3JlYXRlJyk7XG4gICAgICB0cnkge1xuICAgICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuICAgICAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBwcm9qZWN0cyA9IHNwbGl0TGlzdChvcHRpb25zLnByb2plY3RzKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuc2NvcGUgPT09ICdwcm9qZWN0cycgJiYgcHJvamVjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCctLXNjb3BlIHByb2plY3RzIG5lZWRzIC0tcHJvamVjdHMgd2l0aCBhdCBsZWFzdCBvbmUgcHJvamVjdCBuYW1lJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYm9keTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICAgIHRlbXBsYXRlOiBvcHRpb25zLnRlbXBsYXRlLFxuICAgICAgICAgIHNjb3BlOiBvcHRpb25zLnNjb3BlID09PSAncHJvamVjdHMnID8geyBraW5kOiAncHJvamVjdHMnLCBwcm9qZWN0cyB9IDogeyBraW5kOiBvcHRpb25zLnNjb3BlIH0sXG4gICAgICAgICAgcmVjaXBpZW50czogc3BsaXRMaXN0KG9wdGlvbnMucmVjaXBpZW50cyksXG4gICAgICAgICAgYXV0b1NlbmQ6IG9wdGlvbnMuYXV0b1NlbmQgPT09IHRydWUsXG4gICAgICAgICAgLi4uKG9wdGlvbnMudGltZXpvbmUgPyB7IHRpbWV6b25lOiBvcHRpb25zLnRpbWV6b25lIH0gOiB7fSksXG4gICAgICAgICAgLi4uKG9wdGlvbnMud2Vla1N0YXJ0ID8geyB3ZWVrU3RhcnQ6IG9wdGlvbnMud2Vla1N0YXJ0IH0gOiB7fSksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHVud3JhcDx7IGRlZmluaXRpb246IFJlcG9ydERlZmluaXRpb24gfT4oXG4gICAgICAgICAgYXdhaXQgY2xpZW50LnBvc3QoYCR7Y2xpZW50LmdldENvbmZpZygpLmFwaS5iYXNlVXJsfSR7QkFTRX0vZGVmaW5pdGlvbnNgLCBib2R5KSwgJ3JlcG9ydCcsXG4gICAgICAgICk7XG4gICAgICAgIHByaW50U2VjdGlvbignUmVwb3J0IFNhdmVkJyk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdOYW1lJzogZ3JlZW4oYm9sZChkYXRhLmRlZmluaXRpb24ubmFtZSkpLFxuICAgICAgICAgICdJRCc6IGRhdGEuZGVmaW5pdGlvbi5pZCxcbiAgICAgICAgICAnQ2FkZW5jZSc6IGAke2RhdGEuZGVmaW5pdGlvbi5jYWRlbmNlfSDCtyAke2RhdGEuZGVmaW5pdGlvbi50aW1lem9uZX1gLFxuICAgICAgICAgICdOZXh0IHJ1bic6IGRhdGEuZGVmaW5pdGlvbi5uZXh0UnVuQXQgPz8gJyhub3Qgc2NoZWR1bGVkKScsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZGF0YS5kZWZpbml0aW9uLnJlY2lwaWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgLy8gU2FpZCBoZXJlIGJlY2F1c2UgaXQgaXMgdGhlIG1vc3QgY29tbW9uIHdheSBhIG5ldyByZXBvcnQgcmVhY2hlcyBub2JvZHk6IHRoZVxuICAgICAgICAgIC8vIGRpc3RyaWJ1dGlvbiBsaXN0IGlzIHBlciBPUkcgYW5kIGFuIGFkZHJlc3MgY29uZmlybXMgYnkgZW1haWwgYmVmb3JlIGRlbGl2ZXJ5LlxuICAgICAgICAgIHByaW50V2FybmluZygnTm8gcmVjaXBpZW50cyB5ZXQg4oCUIGFkZCB0aGVtIGluIHRoZSBkYXNoYm9hcmQ7IGFuIGV4dGVybmFsIGFkZHJlc3MgY29uZmlybXMgYnkgZW1haWwgYmVmb3JlIGFueXRoaW5nIGlzIGRlbGl2ZXJlZC4nKTtcbiAgICAgICAgfVxuICAgICAgICBwcmludFN1Y2Nlc3MoJ1JlcG9ydCBjcmVhdGVkJyk7XG4gICAgICAgIHByaW50RXhlY3V0aW9uU3VtbWFyeShleGVjdXRpb25JZCwgRGF0ZS5ub3coKSAtIHN0YXJ0KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHsgY29tbWFuZDogJ3JlcG9ydC1jcmVhdGUnLCBleGVjdXRpb25JZCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAvLyDilIDilIAgcnVuIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICB3aXRoU3NsT3B0aW9ucyhncm91cFxuICAgIC5jb21tYW5kKCdydW4nKVxuICAgIC5kZXNjcmlwdGlvbignQ29tcG9zZSBvbmUgcGVyaW9kIGludG8gYSBmcm96ZW4gc25hcHNob3QuIFdpdGhvdXQgLS1wZXJpb2QsIHRoZSBsYXN0IGNvbXBsZXRlIHBlcmlvZC4nKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLWksIC0taWQgPGlkPicsICdSZXBvcnQgZGVmaW5pdGlvbiBJRCcpXG4gICAgLm9wdGlvbignLXAsIC0tcGVyaW9kIDxsYWJlbD4nLCAnUGVyaW9kIGxhYmVsOiAyMDI2LVczOCAod2Vla2x5KSwgMjAyNi0wOCAobW9udGhseSksIDIwMjYtUTMgKHF1YXJ0ZXJseSknKVxuICAgIC5vcHRpb24oJy0tcmVnZW5lcmF0ZScsICdQcm9kdWNlIHZlcnNpb24gTisxIGluc3RlYWQgb2YgcmV1c2luZyBhbiBleGlzdGluZyBzbmFwc2hvdCcpKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdSZXBvcnQgUnVuJyk7XG4gICAgICB0cnkge1xuICAgICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuICAgICAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB1bndyYXA8eyBydW46IFJlcG9ydFJ1bjsgcmV1c2VkPzogYm9vbGVhbiB9PihcbiAgICAgICAgICBhd2FpdCBjbGllbnQucG9zdChcbiAgICAgICAgICAgIGAke2NsaWVudC5nZXRDb25maWcoKS5hcGkuYmFzZVVybH0ke0JBU0V9L2RlZmluaXRpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9wdGlvbnMuaWQpfS9ydW5zYCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLi4uKG9wdGlvbnMucGVyaW9kID8geyBwZXJpb2Q6IG9wdGlvbnMucGVyaW9kIH0gOiB7fSksXG4gICAgICAgICAgICAgIC4uLihvcHRpb25zLnJlZ2VuZXJhdGUgPyB7IHJlZ2VuZXJhdGU6IHRydWUgfSA6IHt9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKSwgJ3J1bicsXG4gICAgICAgICk7XG4gICAgICAgIHByaW50U2VjdGlvbihkYXRhLnJldXNlZCA/ICdFeGlzdGluZyBTbmFwc2hvdCcgOiAnU25hcHNob3QgQ29tcG9zZWQnKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgJ1BlcmlvZCc6IGdyZWVuKGJvbGQoZGF0YS5ydW4ucGVyaW9kTGFiZWwpKSxcbiAgICAgICAgICAnUnVuIElEJzogZGF0YS5ydW4uaWQsXG4gICAgICAgICAgJ1ZlcnNpb24nOiBTdHJpbmcoZGF0YS5ydW4udmVyc2lvbiksXG4gICAgICAgICAgJ1N0YXR1cyc6IGRhdGEucnVuLnN0YXR1cyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChkYXRhLnJldXNlZCkge1xuICAgICAgICAgIC8vIE5vdCBhIG5vLW9wIHRvIGhpZGU6IGEgZnJvemVuIHNuYXBzaG90J3MgbnVtYmVycyBkbyBub3QgY2hhbmdlLCBzbyByZS1ydW5uaW5nXG4gICAgICAgICAgLy8gcmV0dXJucyB3aGF0IGV4aXN0cy4gYC0tcmVnZW5lcmF0ZWAgaXMgaG93IHlvdSBhc2sgZm9yIGEgbmV3IHZlcnNpb24uXG4gICAgICAgICAgcHJpbnRJbmZvKCdUaGlzIHBlcmlvZCBhbHJlYWR5IGhhZCBhIHNuYXBzaG90LCBzbyBpdCB3YXMgcmV0dXJuZWQgdW5jaGFuZ2VkLiBVc2UgLS1yZWdlbmVyYXRlIGZvciBhIG5ldyB2ZXJzaW9uLicpO1xuICAgICAgICB9XG4gICAgICAgIHByaW50RXhlY3V0aW9uU3VtbWFyeShleGVjdXRpb25JZCwgRGF0ZS5ub3coKSAtIHN0YXJ0KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHsgY29tbWFuZDogJ3JlcG9ydC1ydW4nLCBleGVjdXRpb25JZCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAvLyDilIDilIAgcHVibGlzaCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgd2l0aFNzbE9wdGlvbnMoZ3JvdXBcbiAgICAuY29tbWFuZCgncHVibGlzaCcpXG4gICAgLmRlc2NyaXB0aW9uKCdQdWJsaXNoIGEgY29tcG9zZWQgcnVuLiBOZWVkcyByZXBvcnRzOnNoYXJlIOKAlCBwdWJsaXNoaW5nIGlzIHdoZW4gbnVtYmVycyBsZWF2ZSB0aGUgcGxhdGZvcm0uJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1yLCAtLXJ1biA8aWQ+JywgJ1J1biBJRCB0byBwdWJsaXNoJykpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoJ1JlcG9ydCBQdWJsaXNoJyk7XG4gICAgICB0cnkge1xuICAgICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuICAgICAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB1bndyYXA8eyBydW46IFJlcG9ydFJ1bjsgYWxyZWFkeVB1Ymxpc2hlZD86IGJvb2xlYW4gfT4oXG4gICAgICAgICAgYXdhaXQgY2xpZW50LnBvc3QoXG4gICAgICAgICAgICBgJHtjbGllbnQuZ2V0Q29uZmlnKCkuYXBpLmJhc2VVcmx9JHtCQVNFfS9ydW5zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9wdGlvbnMucnVuKX0vcHVibGlzaGAsIHt9LFxuICAgICAgICAgICksICdydW4nLFxuICAgICAgICApO1xuICAgICAgICBwcmludFNlY3Rpb24oJ1B1Ymxpc2hlZCcpO1xuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnUGVyaW9kJzogZ3JlZW4oYm9sZChkYXRhLnJ1bi5wZXJpb2RMYWJlbCkpLFxuICAgICAgICAgICdQdWJsaXNoZWQgYXQnOiBkYXRhLnJ1bi5wdWJsaXNoZWRBdCA/PyAnKHVua25vd24pJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChkYXRhLmFscmVhZHlQdWJsaXNoZWQpIHtcbiAgICAgICAgICAvLyBJZGVtcG90ZW50IGJ5IGRlc2lnbjogdHdvIHB1Ymxpc2hlcyBzZW5kIG9uZSByZXBvcnQsIHNvIGEgcmV0cmllZCBzY3JpcHQgaXNcbiAgICAgICAgICAvLyBzYWZlLiBSZXBvcnRlZCByYXRoZXIgdGhhbiBzaWxlbnQsIHNvIGEgd3JhcHBlciBjYW4gdGVsbCB0aGUgZGlmZmVyZW5jZS5cbiAgICAgICAgICBwcmludEluZm8oJ1RoaXMgcnVuIHdhcyBhbHJlYWR5IHB1Ymxpc2hlZDsgbm90aGluZyB3YXMgc2VudCBhZ2Fpbi4nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmludFN1Y2Nlc3MoJ1B1Ymxpc2hlZCDigJQgZGVsaXZlcnkgaXMgdW5kZXIgd2F5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcHJpbnRFeGVjdXRpb25TdW1tYXJ5KGV4ZWN1dGlvbklkLCBEYXRlLm5vdygpIC0gc3RhcnQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkFQSV9SRVFVRVNULCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDogeyBjb21tYW5kOiAncmVwb3J0LXB1Ymxpc2gnLCBleGVjdXRpb25JZCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAvLyDilIDilIAgbGluayDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgd2l0aFNzbE9wdGlvbnMoZ3JvdXBcbiAgICAuY29tbWFuZCgnbGluaycpXG4gICAgLmRlc2NyaXB0aW9uKCdNaW50IGFuIGV4cGlyaW5nIHJlYWQtb25seSBsaW5rIHRvIGEgcHVibGlzaGVkIHJ1bi4gVGhlIHRva2VuIGlzIHNob3duIE9OQ0UuJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1yLCAtLXJ1biA8aWQ+JywgJ1B1Ymxpc2hlZCBydW4gSUQnKVxuICAgIC5vcHRpb24oJy0tZGF5cyA8bj4nLCAnRGF5cyB1bnRpbCBpdCBleHBpcmVzIChzZXJ2ZXIgZGVmYXVsdCAzMCwgbWF4aW11bSAxODApJylcbiAgICAub3B0aW9uKCctLXJlZGFjdC1uYW1lcycsICdSZXBsYWNlIHByb2plY3QgYW5kIHBpcGVsaW5lIG5hbWVzIGluIHRoZSBzaGFyZWQgdmlldycpKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdSZXBvcnQgTGluaycpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcHJpbnRTc2xXYXJuaW5nKG9wdGlvbnMudmVyaWZ5U3NsKTtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gY3JlYXRlQXV0aGVudGljYXRlZENsaWVudChvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZGF5cyA9IG9wdGlvbnMuZGF5cyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogTnVtYmVyKG9wdGlvbnMuZGF5cyk7XG4gICAgICAgIGlmIChkYXlzICE9PSB1bmRlZmluZWQgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKGRheXMpIHx8IGRheXMgPCAxKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignLS1kYXlzIG11c3QgYmUgYSBwb3NpdGl2ZSB3aG9sZSBudW1iZXIgb2YgZGF5cycpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHVud3JhcDx7IHVybD86IHN0cmluZzsgdG9rZW4/OiBzdHJpbmc7IGV4cGlyZXNBdDogc3RyaW5nIH0+KFxuICAgICAgICAgIGF3YWl0IGNsaWVudC5wb3N0KFxuICAgICAgICAgICAgYCR7Y2xpZW50LmdldENvbmZpZygpLmFwaS5iYXNlVXJsfSR7QkFTRX0vcnVucy8ke2VuY29kZVVSSUNvbXBvbmVudChvcHRpb25zLnJ1bil9L2xpbmtzYCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLi4uKGRheXMgIT09IHVuZGVmaW5lZCA/IHsgZXhwaXJlc0luRGF5czogZGF5cyB9IDoge30pLFxuICAgICAgICAgICAgICAuLi4ob3B0aW9ucy5yZWRhY3ROYW1lcyA/IHsgcmVkYWN0TmFtZXM6IHRydWUgfSA6IHt9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKSwgJ2xpbmsnLFxuICAgICAgICApO1xuICAgICAgICBwcmludFNlY3Rpb24oJ1NoYXJlIExpbmsnKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgTGluazogZ3JlZW4oYm9sZChkYXRhLnVybCA/PyBkYXRhLnRva2VuID8/ICcobm90IHJldHVybmVkKScpKSxcbiAgICAgICAgICBFeHBpcmVzOiBkYXRhLmV4cGlyZXNBdCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFNhaWQgZXZlcnkgdGltZSwgYmVjYXVzZSBpdCBpcyB0cnVlIGV2ZXJ5IHRpbWUgYW5kIHRoZSBjb25zZXF1ZW5jZSBpcyBwZXJtYW5lbnQ6XG4gICAgICAgIC8vIHRoZSBzZXJ2ZXIgc3RvcmVzIG9ubHkgYSBoYXNoLCBzbyBhIGxvc3QgdG9rZW4gY2Fubm90IGJlIHJlY292ZXJlZCwgb25seSByZXBsYWNlZC5cbiAgICAgICAgcHJpbnRXYXJuaW5nKCdDb3B5IHRoaXMgbm93IOKAlCBvbmx5IGEgaGFzaCBpcyBzdG9yZWQsIHNvIGl0IGNhbm5vdCBiZSBzaG93biBhZ2Fpbi4gUmV2b2tlIGl0IGluIHRoZSBkYXNoYm9hcmQgaWYgaXQgbGVha3MuJyk7XG4gICAgICAgIHByaW50RXhlY3V0aW9uU3VtbWFyeShleGVjdXRpb25JZCwgRGF0ZS5ub3coKSAtIHN0YXJ0KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHsgY29tbWFuZDogJ3JlcG9ydC1saW5rJywgZXhlY3V0aW9uSWQgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgLy8g4pSA4pSAIHBkZiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgd2l0aFNzbE9wdGlvbnMoZ3JvdXBcbiAgICAuY29tbWFuZCgncGRmJylcbiAgICAuZGVzY3JpcHRpb24oJ0Rvd25sb2FkIGEgcnVuIGFzIGEgUERGLiBOZWVkcyByZXBvcnRzOnJlYWQg4oCUIHRoZSBzYW1lIHBlcm1pc3Npb24gYXMgcmVhZGluZyB0aGUgcnVuLicpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctciwgLS1ydW4gPGlkPicsICdSdW4gSUQgdG8gZG93bmxvYWQnKVxuICAgIC5vcHRpb24oJy1vLCAtLW91dCA8ZmlsZT4nLCAnV2hlcmUgdG8gd3JpdGUgaXQgKGRlZmF1bHQ6IHRoZSBmaWxlIG5hbWUgdGhlIHNlcnZlciBjaG9zZSwgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5KScpKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdSZXBvcnQgUERGJyk7XG4gICAgICB0cnkge1xuICAgICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuICAgICAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgZmlsZW5hbWUgfSA9IGF3YWl0IGNsaWVudC5nZXRCaW5hcnkoXG4gICAgICAgICAgYCR7Y2xpZW50LmdldENvbmZpZygpLmFwaS5iYXNlVXJsfSR7QkFTRX0vcnVucy8ke2VuY29kZVVSSUNvbXBvbmVudChvcHRpb25zLnJ1bil9L3BkZmAsXG4gICAgICAgICk7XG4gICAgICAgIC8vIFRoZSBzZXJ2ZXIncyBuYW1lIHVubGVzcyB0aGUgY2FsbGVyIGFza2VkIGZvciBvbmU6IGl0IGtub3dzIHRoZSByZXBvcnQncyB0aXRsZSBhbmRcbiAgICAgICAgLy8gd2hldGhlciB0aGlzIHJ1biBpcyBhIHJldmlzaW9uLCBhbmQgYSBzY3JpcHRlZCBib2FyZCBwYWNrIHdhbnRzIHRoYXQgbmFtZS5cbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdHlwZW9mIG9wdGlvbnMub3V0ID09PSAnc3RyaW5nJyAmJiBvcHRpb25zLm91dC5sZW5ndGggPiAwXG4gICAgICAgICAgPyBvcHRpb25zLm91dFxuICAgICAgICAgIDogKGZpbGVuYW1lID8/IGByZXBvcnQtJHtvcHRpb25zLnJ1bn0ucGRmYCk7XG4gICAgICAgIHdyaXRlRmlsZVN5bmModGFyZ2V0LCBkYXRhKTtcbiAgICAgICAgcHJpbnRTZWN0aW9uKCdEb3dubG9hZGVkJyk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoeyBGaWxlOiBncmVlbihib2xkKHRhcmdldCkpLCBTaXplOiBgJHsoZGF0YS5sZW5ndGggLyAxMDI0KS50b0ZpeGVkKDEpfSBLaUJgIH0pO1xuICAgICAgICBwcmludFN1Y2Nlc3MoJ1NhdmVkJyk7XG4gICAgICAgIHByaW50RXhlY3V0aW9uU3VtbWFyeShleGVjdXRpb25JZCwgRGF0ZS5ub3coKSAtIHN0YXJ0KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIEEgNTAzIGhlcmUgaXMgbm90IGEgZmFpbHVyZSBvZiB0aGUgcmVwb3J0OiB0aGlzIGluc3RhbmNlIGhhcyBubyBDaHJvbWl1bSwgYW5kIHRoZVxuICAgICAgICAvLyBzZXJ2ZXIgc2F5cyBzbyBpbiB3b3Jkcy4gSXQgc3RpbGwgZXhpdHMgbm9uLXplcm8sIGJlY2F1c2UgYSBzY3JpcHQgdGhhdCBhc2tlZCBmb3IgYVxuICAgICAgICAvLyBmaWxlIGFuZCBnb3Qgbm9uZSBtdXN0IG5vdCBjYXJyeSBvbiBhcyB0aG91Z2ggaXQgaGFzIG9uZS5cbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkFQSV9SRVFVRVNULCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDogeyBjb21tYW5kOiAncmVwb3J0LXBkZicsIGV4ZWN1dGlvbklkIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIC8vIOKUgOKUgCB0cmFuc2ZlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgd2l0aFNzbE9wdGlvbnMoZ3JvdXBcbiAgICAuY29tbWFuZCgndHJhbnNmZXInKVxuICAgIC5kZXNjcmlwdGlvbignSGFuZCBhIHJlcG9ydCB0byBhIG5ldyBvd25lci4gQSBzY2hlZHVsZWQgcnVuIGlzIGF1dGhvcml6ZWQgQVMgdGhlIG93bmVyLCBzbyB0aGlzIGlzIGEgcHJpdmlsZWdlIG1vdmUuJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1pLCAtLWlkIDxpZD4nLCAnUmVwb3J0IGRlZmluaXRpb24gSUQnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLW8sIC0tb3duZXIgPHVzZXJJZD4nLCAnTmV3IG93bmVyXFwncyB1c2VyIElEIOKAlCBtdXN0IGJlIGEgbGl2ZSBtZW1iZXIgb2YgdGhpcyBvcmcnKSlcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignUmVwb3J0IFRyYW5zZmVyJyk7XG4gICAgICB0cnkge1xuICAgICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuICAgICAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB1bndyYXA8eyBkZWZpbml0aW9uOiBSZXBvcnREZWZpbml0aW9uIH0+KFxuICAgICAgICAgIGF3YWl0IGNsaWVudC5wb3N0KFxuICAgICAgICAgICAgYCR7Y2xpZW50LmdldENvbmZpZygpLmFwaS5iYXNlVXJsfSR7QkFTRX0vZGVmaW5pdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQob3B0aW9ucy5pZCl9L3RyYW5zZmVyYCxcbiAgICAgICAgICAgIHsgb3duZXJJZDogb3B0aW9ucy5vd25lciB9LFxuICAgICAgICAgICksICdyZXBvcnQnLFxuICAgICAgICApO1xuICAgICAgICBwcmludFNlY3Rpb24oJ093bmVyc2hpcCBUcmFuc2ZlcnJlZCcpO1xuICAgICAgICBwcmludEtleVZhbHVlKHsgJ1JlcG9ydCc6IGdyZWVuKGJvbGQoZGF0YS5kZWZpbml0aW9uLm5hbWUpKSwgJ05ldyBvd25lcic6IG9wdGlvbnMub3duZXIgfSk7XG4gICAgICAgIC8vIFRoZSBjb25zZXF1ZW5jZSwgaW4gb25lIGxpbmU6IGZyb20gbm93IG9uIHRoZSByZXBvcnQgY29tcHV0ZXMgd2l0aCBhIGRpZmZlcmVudFxuICAgICAgICAvLyBwZXJzb24ncyBhY2Nlc3MsIHdoaWNoIGNhbiBjaGFuZ2Ugd2hhdCBpdCBjb250YWlucy5cbiAgICAgICAgcHJpbnRJbmZvKCdGdXR1cmUgcnVucyBhcmUgYXV0aG9yaXplZCBhcyB0aGUgbmV3IG93bmVyLCBzbyB0aGUgcmVwb3J0IG5vdyBjb21wdXRlcyB3aXRoIHRoZWlyIGFjY2Vzcy4nKTtcbiAgICAgICAgcHJpbnRFeGVjdXRpb25TdW1tYXJ5KGV4ZWN1dGlvbklkLCBEYXRlLm5vdygpIC0gc3RhcnQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkFQSV9SRVFVRVNULCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDogeyBjb21tYW5kOiAncmVwb3J0LXRyYW5zZmVyJywgZXhlY3V0aW9uSWQgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG59XG5cbi8qKiBgXCJhLCBiICxjXCJgIOKGkiBgWydhJywnYicsJ2MnXWA7IGVtcHR5IG9yIGFic2VudCDihpIgYFtdYC4gKi9cbmZ1bmN0aW9uIHNwbGl0TGlzdCh2YWx1ZTogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiBbXTtcbiAgcmV0dXJuIHZhbHVlLnNwbGl0KCcsJykubWFwKChzKSA9PiBzLnRyaW0oKSkuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCA+IDApO1xufVxuIl19
|
|
315
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3JlcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxJQUFJLE1BQU0sWUFBWSxDQUFDO0FBQzlCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEosT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTlHLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUM7QUEwQjFDLE1BQU0sSUFBSSxHQUFHLDBCQUEwQixDQUFDO0FBS3hDLCtEQUErRDtBQUMvRCxTQUFTLE1BQU0sQ0FBSSxRQUFpQixFQUFFLElBQVk7SUFDaEQsTUFBTSxHQUFHLEdBQUcsUUFBbUMsQ0FBQztJQUNoRCxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9DLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLE9BQU8sSUFBSSwwQkFBMEIsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDO0FBQ2xCLENB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cUJBQXFCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLFdBQVcsRUFBRTtnQkFDMUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFO2FBQ3JELENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCw2REFBNkQ7QUFDN0QsU0FBUyxTQUFTLENBQUMsS0FBYztJQUMvQixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUN6QyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0UsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIGBwaXBlbGluZS1tYW5hZ2VyIHJlcG9ydCDigKZgIOKAlCB0aGUgc3Rha2Vob2xkZXItcmVwb3J0IGFkZC1vbiBmcm9tIGEgdGVybWluYWwuXG4gKlxuICogU2V2ZW4gdmVyYnMsIG1hdGNoaW5nIHRoZSBBUEkgc3VyZmFjZSBhIGxlYWQgYWN0dWFsbHkgZHJpdmVzOiBgY3JlYXRlYCwgYGxpc3RgLFxuICogYHJ1biAtLXBlcmlvZGAsIGBwdWJsaXNoYCwgYGxpbmtgLCBgcGRmYCBhbmQgYHRyYW5zZmVyYC5cbiAqXG4gKiBXSFkgQSBDTEkgRk9SIFRISVMgQVQgQUxMLiBUd28gam9icyB0aGUgZGFzaGJvYXJkIGlzIHRoZSB3cm9uZyBzaGFwZSBmb3IuIFRoZSBmaXJzdCBpc1xuICogQkFDS0ZJTEw6IGByZXBvcnQgcnVuIC0tcGVyaW9kIDIwMjYtVzM0YCBmb3IgZWFjaCBvZiBmaXZlIHdlZWtzIGlzIGEgbG9vcCBpbiBhIHNoZWxsIGFuZFxuICogZml2ZSBjYXJlZnVsIGNsaWNrcyBpbiBhIGJyb3dzZXIuIFRoZSBzZWNvbmQgaXMgVU5BVFRFTkRFRCBPUEVSQVRJT04g4oCUIGEgdGVhbSB0aGF0IHdhbnRzXG4gKiBpdHMgcmVwb3J0IHByb2R1Y2VkIGJ5IGl0cyBvd24gc2NoZWR1bGVyIHJhdGhlciB0aGFuIG91cnMsIG9yIHdhbnRzIHB1Ymxpc2hpbmcgZ2F0ZWQgb24gYVxuICogcmVsZWFzZSBmaW5pc2hpbmcsIG5lZWRzIGEgY29tbWFuZCB3aXRoIGFuIGV4aXQgY29kZS5cbiAqXG4gKiBFVkVSWSBHQVRFIElTIFRIRSBTRVJWRVInUy4gVGhlIENMSSBjaGVja3Mgbm90aGluZzogYHJlcG9ydHM6d3JpdGVgIGZvciBjcmVhdGUgYW5kIHJ1bixcbiAqIGByZXBvcnRzOnB1Ymxpc2hgIGZvciBwdWJsaXNoIGFuZCBsaW5rLCBgcmVwb3J0czpyZWFkYCBmb3IgcGRmLCB0aGUgYHN0YWtlaG9sZGVyX3JlcG9ydHNgXG4gKiBmZWF0dXJlIGZvciBhbGwgb2YgdGhlbSxcbiAqIGFuZCB0aGUgb3JnJ3MgYWRtaW4tb3duZWQgcG9saWN5IGZvciB3aGV0aGVyIGEgbGluayBtYXkgYmUgbWludGVkIGF0IGFsbC4gVGhlIGNhbGxlcidzXG4gKiB0b2tlbiBkZWNpZGVzLCBhbmQgYSA0MDMgaXMgcHJpbnRlZCBhcyB0aGUgc2VydmVyIHdvcmRlZCBpdCDigJQgYSBDTEkgdGhhdCBwcmUtanVkZ2VkXG4gKiB3b3VsZCBiZSBhIHNlY29uZCBjb3B5IG9mIHRoZSBydWxlcywgd3JvbmcgdGhlIGZpcnN0IHRpbWUgZWl0aGVyIGNoYW5nZWQuXG4gKi9cblxuaW1wb3J0IHsgd3JpdGVGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgcGljbyBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnQsIHByaW50Q29tbWFuZEhlYWRlciwgcHJpbnRFeGVjdXRpb25TdW1tYXJ5LCBwcmludFNzbFdhcm5pbmcsIHdpdGhTc2xPcHRpb25zIH0gZnJvbSAnLi4vdXRpbHMvY29tbWFuZC11dGlscy5qcyc7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IHByaW50SW5mbywgcHJpbnRLZXlWYWx1ZSwgcHJpbnRTZWN0aW9uLCBwcmludFN1Y2Nlc3MsIHByaW50V2FybmluZyB9IGZyb20gJy4uL3V0aWxzL291dHB1dC11dGlscy5qcyc7XG5cbmNvbnN0IHsgYm9sZCwgZGltLCBncmVlbiwgeWVsbG93IH0gPSBwaWNvO1xuXG4vKiogVGhlIEFQSSBzaGFwZSB0aGUgQ0xJIHJlYWRzLiBOYXJyb3dlZCB0byB3aGF0IGl0IHByaW50cy4gKi9cbmludGVyZmFjZSBSZXBvcnREZWZpbml0aW9uIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICB0ZW1wbGF0ZTogc3RyaW5nO1xuICBjYWRlbmNlOiBzdHJpbmc7XG4gIHRpbWV6b25lOiBzdHJpbmc7XG4gIHdlZWtTdGFydDogc3RyaW5nO1xuICBpc0FjdGl2ZTogYm9vbGVhbjtcbiAgcGF1c2VkUmVhc29uPzogc3RyaW5nIHwgbnVsbDtcbiAgbmV4dFJ1bkF0Pzogc3RyaW5nIHwgbnVsbDtcbiAgbGFzdFJ1bkF0Pzogc3RyaW5nIHwgbnVsbDtcbiAgcmVjaXBpZW50czogc3RyaW5nW107XG4gIGF1dG9TZW5kOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUmVwb3J0UnVuIHtcbiAgaWQ6IHN0cmluZztcbiAgcGVyaW9kTGFiZWw6IHN0cmluZztcbiAgdmVyc2lvbjogbnVtYmVyO1xuICBzdGF0dXM6IHN0cmluZztcbiAgcHVibGlzaGVkQXQ/OiBzdHJpbmcgfCBudWxsO1xufVxuXG5jb25zdCBCQVNFID0gJy9hcGkvcmVwb3J0cy9zdGFrZWhvbGRlcic7XG5cbi8qKiBUaGUgcmVzcG9uc2UgZW52ZWxvcGUgZXZlcnkgcm91dGUgaGVyZSByZXR1cm5zLiAqL1xuaW50ZXJmYWNlIEVudmVsb3BlPFQ+IHsgc3VjY2Vzcz86IGJvb2xlYW47IGRhdGE/OiBUOyBtZXNzYWdlPzogc3RyaW5nIH1cblxuLyoqIFVud3JhcCBhbiBlbnZlbG9wZSwgb3IgZmFpbCB3aXRoIHRoZSBzZXJ2ZXIncyBvd24gd29yZHMuICovXG5mdW5jdGlvbiB1bndyYXA8VD4ocmVzcG9uc2U6IHVua25vd24sIHdoYXQ6IHN0cmluZyk6IFQge1xuICBjb25zdCBlbnYgPSByZXNwb25zZSBhcyBFbnZlbG9wZTxUPiB8IHVuZGVmaW5lZDtcbiAgaWYgKCFlbnYgfHwgZW52LnN1Y2Nlc3MgPT09IGZhbHNlIHx8ICFlbnYuZGF0YSkge1xuICAgIHRocm93IG5ldyBFcnJvcihlbnY/Lm1lc3NhZ2UgPz8gYFRoZSBzZXJ2ZXIgcmV0dXJuZWQgbm8gJHt3aGF0fWApO1xuICB9XG4gIHJldHVybiBlbnYuZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcG9ydChwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIGNvbnN0IGdyb3VwID0gcHJvZ3JhbS5jb21tYW5kKCdyZXBvcnQnKS5kZXNjcmlwdGlvbignQ3JlYXRlLCBydW4sIHB1Ymxpc2ggYW5kIHNoYXJlIHN0YWtlaG9sZGVyIHJlcG9ydHMnKTtcblxuICAvLyDilIDilIAgbGlzdCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgd2l0aFNzbE9wdGlvbnMoZ3JvdXBcbiAgICAuY29tbWFuZCgnbGlzdCcpXG4gICAgLmRlc2NyaXB0aW9uKCdMaXN0IHRoaXMgb3JnYW5pemF0aW9uXFwncyBzYXZlZCByZXBvcnRzLCB0aGVpciBzY2hlZHVsZSBhbmQgcGF1c2Ugc3RhdGUuJykpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoJ1JlcG9ydCBMaXN0Jyk7XG4gICAgICB0cnkge1xuICAgICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuICAgICAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB1bndyYXA8eyBkZWZpbml0aW9uczogUmVwb3J0RGVmaW5pdGlvbltdIH0+KFxuICAgICAgICAgIGF3YWl0IGNsaWVudC5nZXQoYCR7Y2xpZW50LmdldENvbmZpZygpLmFwaS5iYXNlVXJsfSR7QkFTRX0vZGVmaW5pdGlvbnNgKSwgJ3JlcG9ydHMnLFxuICAgICAgICApO1xuICAgICAgICBwcmludFNlY3Rpb24oJ1NhdmVkIFJlcG9ydHMnKTtcbiAgICAgICAgaWYgKGRhdGEuZGVmaW5pdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcHJpbnRJbmZvKCdObyBzYXZlZCByZXBvcnRzIHlldC4gQ3JlYXRlIG9uZSB3aXRoIGBwaXBlbGluZS1tYW5hZ2VyIHJlcG9ydCBjcmVhdGVgLicpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgZCBvZiBkYXRhLmRlZmluaXRpb25zKSB7XG4gICAgICAgICAgLy8gVGhlIHBhdXNlIFJFQVNPTiwgbm90IGp1c3QgdGhlIHN0YXRlOiBcInBhdXNlZFwiIG9uIGl0cyBvd24gaXMgYSBzdXBwb3J0IHRpY2tldC5cbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IGQuaXNBY3RpdmVcbiAgICAgICAgICAgID8gZ3JlZW4oJ2FjdGl2ZScpXG4gICAgICAgICAgICA6IHllbGxvdyhgcGF1c2VkJHtkLnBhdXNlZFJlYXNvbiA/IGAgKCR7ZC5wYXVzZWRSZWFzb259KWAgOiAnJ31gKTtcbiAgICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAgIFtib2xkKGQubmFtZSldOiBgJHtzdGF0ZX0gJHtkaW0oYMK3ICR7ZC5jYWRlbmNlfSDCtyAke2QudGltZXpvbmV9IMK3ICR7ZC5yZWNpcGllbnRzLmxlbmd0aH0gcmVjaXBpZW50KHMpJHtkLmF1dG9TZW5kID8gJyDCtyBhdXRvLXNlbmQnIDogJyd9YCl9YCxcbiAgICAgICAgICAgICcgIGlkJzogZC5pZCxcbiAgICAgICAgICAgICcgIG5leHQgcnVuJzogZC5uZXh0UnVuQXQgPz8gJyhub3Qgc2NoZWR1bGVkKScsXG4gICAgICAgICAgICAnICBsYXN0IHJ1bic6IGQubGFzdFJ1bkF0ID8/ICcobmV2ZXIpJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBwcmludEV4ZWN1dGlvblN1bW1hcnkoZXhlY3V0aW9uSWQsIERhdGUubm93KCkgLSBzdGFydCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuQVBJX1JFUVVFU1QsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7IGNvbW1hbmQ6ICdyZXBvcnQtbGlzdCcsIGV4ZWN1dGlvbklkIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIC8vIOKUgOKUgCBjcmVhdGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIHdpdGhTc2xPcHRpb25zKGdyb3VwXG4gICAgLmNvbW1hbmQoJ2NyZWF0ZScpXG4gICAgLmRlc2NyaXB0aW9uKCdTYXZlIGEgbmV3IHNjaGVkdWxlZCByZXBvcnQuIFRoZSBjcmVhdG9yIG93bnMgaXQ7IGEgc2NoZWR1bGVkIHJ1biBpcyBhdXRob3JpemVkIGFzIHRoZSBvd25lci4nKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLW4sIC0tbmFtZSA8bmFtZT4nLCAnUmVwb3J0IG5hbWUsIGFzIGl0cyByZWNpcGllbnRzIHdpbGwgc2VlIGl0JylcbiAgICAub3B0aW9uKCctdCwgLS10ZW1wbGF0ZSA8dGVtcGxhdGU+JywgJ3dlZWtseV9kZWxpdmVyeSB8IG1vbnRobHlfaGVhbHRoIHwgcXVhcnRlcmx5X3JldmlldycsICd3ZWVrbHlfZGVsaXZlcnknKVxuICAgIC5vcHRpb24oJy16LCAtLXRpbWV6b25lIDx0ej4nLCAnSUFOQSB0aW1lem9uZSB0aGUgcGVyaW9kIGlzIGN1dCBpbiAoZGVmYXVsdHMgdG8gdGhlIHNlcnZlclxcJ3MgcmVwb3J0IGRlZmF1bHQpJylcbiAgICAub3B0aW9uKCctLXdlZWstc3RhcnQgPGRheT4nLCAnbW9uZGF5IHwgc3VuZGF5JylcbiAgICAub3B0aW9uKCctLXNjb3BlIDxraW5kPicsICdvcmcgfCBwcm9qZWN0cyB8IHJvbGx1cCcsICdvcmcnKVxuICAgIC5vcHRpb24oJy0tcHJvamVjdHMgPG5hbWVzPicsICdDb21tYS1zZXBhcmF0ZWQgcHJvamVjdCBuYW1lcyAod2l0aCAtLXNjb3BlIHByb2plY3RzKScpXG4gICAgLm9wdGlvbignLS1yZWNpcGllbnRzIDxpZHM+JywgJ0NvbW1hLXNlcGFyYXRlZCByZWNpcGllbnQgSURzIGZyb20gdGhlIG9yZ1xcJ3MgZGlzdHJpYnV0aW9uIGxpc3QnKVxuICAgIC5vcHRpb24oJy0tYXV0by1zZW5kJywgJ1B1Ymxpc2ggd2l0aG91dCByZXZpZXcuIE9mZiBieSBkZWZhdWx0IOKAlCB0aGUgcmV2aWV3IHN0ZXAgaXMgd2hlcmUgdGhlIGNvbnRleHQgZ29lcy4nKSlcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignUmVwb3J0IENyZWF0ZScpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcHJpbnRTc2xXYXJuaW5nKG9wdGlvbnMudmVyaWZ5U3NsKTtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gY3JlYXRlQXV0aGVudGljYXRlZENsaWVudChvcHRpb25zKTtcbiAgICAgICAgY29uc3QgcHJvamVjdHMgPSBzcGxpdExpc3Qob3B0aW9ucy5wcm9qZWN0cyk7XG4gICAgICAgIGlmIChvcHRpb25zLnNjb3BlID09PSAncHJvamVjdHMnICYmIHByb2plY3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignLS1zY29wZSBwcm9qZWN0cyBuZWVkcyAtLXByb2plY3RzIHdpdGggYXQgbGVhc3Qgb25lIHByb2plY3QgbmFtZScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJvZHk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgICB0ZW1wbGF0ZTogb3B0aW9ucy50ZW1wbGF0ZSxcbiAgICAgICAgICBzY29wZTogb3B0aW9ucy5zY29wZSA9PT0gJ3Byb2plY3RzJyA/IHsga2luZDogJ3Byb2plY3RzJywgcHJvamVjdHMgfSA6IHsga2luZDogb3B0aW9ucy5zY29wZSB9LFxuICAgICAgICAgIHJlY2lwaWVudHM6IHNwbGl0TGlzdChvcHRpb25zLnJlY2lwaWVudHMpLFxuICAgICAgICAgIGF1dG9TZW5kOiBvcHRpb25zLmF1dG9TZW5kID09PSB0cnVlLFxuICAgICAgICAgIC4uLihvcHRpb25zLnRpbWV6b25lID8geyB0aW1lem9uZTogb3B0aW9ucy50aW1lem9uZSB9IDoge30pLFxuICAgICAgICAgIC4uLihvcHRpb25zLndlZWtTdGFydCA/IHsgd2Vla1N0YXJ0OiBvcHRpb25zLndlZWtTdGFydCB9IDoge30pLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB1bndyYXA8eyBkZWZpbml0aW9uOiBSZXBvcnREZWZpbml0aW9uIH0+KFxuICAgICAgICAgIGF3YWl0IGNsaWVudC5wb3N0KGAke2NsaWVudC5nZXRDb25maWcoKS5hcGkuYmFzZVVybH0ke0JBU0V9L2RlZmluaXRpb25zYCwgYm9keSksICdyZXBvcnQnLFxuICAgICAgICApO1xuICAgICAgICBwcmludFNlY3Rpb24oJ1JlcG9ydCBTYXZlZCcpO1xuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnTmFtZSc6IGdyZWVuKGJvbGQoZGF0YS5kZWZpbml0aW9uLm5hbWUpKSxcbiAgICAgICAgICAnSUQnOiBkYXRhLmRlZmluaXRpb24uaWQsXG4gICAgICAgICAgJ0NhZGVuY2UnOiBgJHtkYXRhLmRlZmluaXRpb24uY2FkZW5jZX0gwrcgJHtkYXRhLmRlZmluaXRpb24udGltZXpvbmV9YCxcbiAgICAgICAgICAnTmV4dCBydW4nOiBkYXRhLmRlZmluaXRpb24ubmV4dFJ1bkF0ID8/ICcobm90IHNjaGVkdWxlZCknLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGRhdGEuZGVmaW5pdGlvbi5yZWNpcGllbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIC8vIFNhaWQgaGVyZSBiZWNhdXNlIGl0IGlzIHRoZSBtb3N0IGNvbW1vbiB3YXkgYSBuZXcgcmVwb3J0IHJlYWNoZXMgbm9ib2R5OiB0aGVcbiAgICAgICAgICAvLyBkaXN0cmlidXRpb24gbGlzdCBpcyBwZXIgT1JHIGFuZCBhbiBhZGRyZXNzIGNvbmZpcm1zIGJ5IGVtYWlsIGJlZm9yZSBkZWxpdmVyeS5cbiAgICAgICAgICBwcmludFdhcm5pbmcoJ05vIHJlY2lwaWVudHMgeWV0IOKAlCBhZGQgdGhlbSBpbiB0aGUgZGFzaGJvYXJkOyBhbiBleHRlcm5hbCBhZGRyZXNzIGNvbmZpcm1zIGJ5IGVtYWlsIGJlZm9yZSBhbnl0aGluZyBpcyBkZWxpdmVyZWQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgcHJpbnRTdWNjZXNzKCdSZXBvcnQgY3JlYXRlZCcpO1xuICAgICAgICBwcmludEV4ZWN1dGlvblN1bW1hcnkoZXhlY3V0aW9uSWQsIERhdGUubm93KCkgLSBzdGFydCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuQVBJX1JFUVVFU1QsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7IGNvbW1hbmQ6ICdyZXBvcnQtY3JlYXRlJywgZXhlY3V0aW9uSWQgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgLy8g4pSA4pSAIHJ1biDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgd2l0aFNzbE9wdGlvbnMoZ3JvdXBcbiAgICAuY29tbWFuZCgncnVuJylcbiAgICAuZGVzY3JpcHRpb24oJ0NvbXBvc2Ugb25lIHBlcmlvZCBpbnRvIGEgZnJvemVuIHNuYXBzaG90LiBXaXRob3V0IC0tcGVyaW9kLCB0aGUgbGFzdCBjb21wbGV0ZSBwZXJpb2QuJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1pLCAtLWlkIDxpZD4nLCAnUmVwb3J0IGRlZmluaXRpb24gSUQnKVxuICAgIC5vcHRpb24oJy1wLCAtLXBlcmlvZCA8bGFiZWw+JywgJ1BlcmlvZCBsYWJlbDogMjAyNi1XMzggKHdlZWtseSksIDIwMjYtMDggKG1vbnRobHkpLCAyMDI2LVEzIChxdWFydGVybHkpJylcbiAgICAub3B0aW9uKCctLXJlZ2VuZXJhdGUnLCAnUHJvZHVjZSB2ZXJzaW9uIE4rMSBpbnN0ZWFkIG9mIHJldXNpbmcgYW4gZXhpc3Rpbmcgc25hcHNob3QnKSlcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignUmVwb3J0IFJ1bicpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcHJpbnRTc2xXYXJuaW5nKG9wdGlvbnMudmVyaWZ5U3NsKTtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gY3JlYXRlQXV0aGVudGljYXRlZENsaWVudChvcHRpb25zKTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBkYXRhID0gdW53cmFwPHsgcnVuOiBSZXBvcnRSdW47IHJldXNlZD86IGJvb2xlYW4gfT4oXG4gICAgICAgICAgYXdhaXQgY2xpZW50LnBvc3QoXG4gICAgICAgICAgICBgJHtjbGllbnQuZ2V0Q29uZmlnKCkuYXBpLmJhc2VVcmx9JHtCQVNFfS9kZWZpbml0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChvcHRpb25zLmlkKX0vcnVuc2AsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLihvcHRpb25zLnBlcmlvZCA/IHsgcGVyaW9kOiBvcHRpb25zLnBlcmlvZCB9IDoge30pLFxuICAgICAgICAgICAgICAuLi4ob3B0aW9ucy5yZWdlbmVyYXRlID8geyByZWdlbmVyYXRlOiB0cnVlIH0gOiB7fSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICksICdydW4nLFxuICAgICAgICApO1xuICAgICAgICBwcmludFNlY3Rpb24oZGF0YS5yZXVzZWQgPyAnRXhpc3RpbmcgU25hcHNob3QnIDogJ1NuYXBzaG90IENvbXBvc2VkJyk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdQZXJpb2QnOiBncmVlbihib2xkKGRhdGEucnVuLnBlcmlvZExhYmVsKSksXG4gICAgICAgICAgJ1J1biBJRCc6IGRhdGEucnVuLmlkLFxuICAgICAgICAgICdWZXJzaW9uJzogU3RyaW5nKGRhdGEucnVuLnZlcnNpb24pLFxuICAgICAgICAgICdTdGF0dXMnOiBkYXRhLnJ1bi5zdGF0dXMsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZGF0YS5yZXVzZWQpIHtcbiAgICAgICAgICAvLyBOb3QgYSBuby1vcCB0byBoaWRlOiBhIGZyb3plbiBzbmFwc2hvdCdzIG51bWJlcnMgZG8gbm90IGNoYW5nZSwgc28gcmUtcnVubmluZ1xuICAgICAgICAgIC8vIHJldHVybnMgd2hhdCBleGlzdHMuIGAtLXJlZ2VuZXJhdGVgIGlzIGhvdyB5b3UgYXNrIGZvciBhIG5ldyB2ZXJzaW9uLlxuICAgICAgICAgIHByaW50SW5mbygnVGhpcyBwZXJpb2QgYWxyZWFkeSBoYWQgYSBzbmFwc2hvdCwgc28gaXQgd2FzIHJldHVybmVkIHVuY2hhbmdlZC4gVXNlIC0tcmVnZW5lcmF0ZSBmb3IgYSBuZXcgdmVyc2lvbi4nKTtcbiAgICAgICAgfVxuICAgICAgICBwcmludEV4ZWN1dGlvblN1bW1hcnkoZXhlY3V0aW9uSWQsIERhdGUubm93KCkgLSBzdGFydCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuQVBJX1JFUVVFU1QsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7IGNvbW1hbmQ6ICdyZXBvcnQtcnVuJywgZXhlY3V0aW9uSWQgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgLy8g4pSA4pSAIHB1Ymxpc2gg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIHdpdGhTc2xPcHRpb25zKGdyb3VwXG4gICAgLmNvbW1hbmQoJ3B1Ymxpc2gnKVxuICAgIC5kZXNjcmlwdGlvbignUHVibGlzaCBhIGNvbXBvc2VkIHJ1bi4gTmVlZHMgcmVwb3J0czpwdWJsaXNoIOKAlCBwdWJsaXNoaW5nIGlzIHdoZW4gbnVtYmVycyBsZWF2ZSB0aGUgcGxhdGZvcm0uJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1yLCAtLXJ1biA8aWQ+JywgJ1J1biBJRCB0byBwdWJsaXNoJykpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoJ1JlcG9ydCBQdWJsaXNoJyk7XG4gICAgICB0cnkge1xuICAgICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuICAgICAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB1bndyYXA8eyBydW46IFJlcG9ydFJ1bjsgYWxyZWFkeVB1Ymxpc2hlZD86IGJvb2xlYW4gfT4oXG4gICAgICAgICAgYXdhaXQgY2xpZW50LnBvc3QoXG4gICAgICAgICAgICBgJHtjbGllbnQuZ2V0Q29uZmlnKCkuYXBpLmJhc2VVcmx9JHtCQVNFfS9ydW5zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9wdGlvbnMucnVuKX0vcHVibGlzaGAsIHt9LFxuICAgICAgICAgICksICdydW4nLFxuICAgICAgICApO1xuICAgICAgICBwcmludFNlY3Rpb24oJ1B1Ymxpc2hlZCcpO1xuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnUGVyaW9kJzogZ3JlZW4oYm9sZChkYXRhLnJ1bi5wZXJpb2RMYWJlbCkpLFxuICAgICAgICAgICdQdWJsaXNoZWQgYXQnOiBkYXRhLnJ1bi5wdWJsaXNoZWRBdCA/PyAnKHVua25vd24pJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChkYXRhLmFscmVhZHlQdWJsaXNoZWQpIHtcbiAgICAgICAgICAvLyBJZGVtcG90ZW50IGJ5IGRlc2lnbjogdHdvIHB1Ymxpc2hlcyBzZW5kIG9uZSByZXBvcnQsIHNvIGEgcmV0cmllZCBzY3JpcHQgaXNcbiAgICAgICAgICAvLyBzYWZlLiBSZXBvcnRlZCByYXRoZXIgdGhhbiBzaWxlbnQsIHNvIGEgd3JhcHBlciBjYW4gdGVsbCB0aGUgZGlmZmVyZW5jZS5cbiAgICAgICAgICBwcmludEluZm8oJ1RoaXMgcnVuIHdhcyBhbHJlYWR5IHB1Ymxpc2hlZDsgbm90aGluZyB3YXMgc2VudCBhZ2Fpbi4nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmludFN1Y2Nlc3MoJ1B1Ymxpc2hlZCDigJQgZGVsaXZlcnkgaXMgdW5kZXIgd2F5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcHJpbnRFeGVjdXRpb25TdW1tYXJ5KGV4ZWN1dGlvbklkLCBEYXRlLm5vdygpIC0gc3RhcnQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkFQSV9SRVFVRVNULCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDogeyBjb21tYW5kOiAncmVwb3J0LXB1Ymxpc2gnLCBleGVjdXRpb25JZCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAvLyDilIDilIAgbGluayDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgd2l0aFNzbE9wdGlvbnMoZ3JvdXBcbiAgICAuY29tbWFuZCgnbGluaycpXG4gICAgLmRlc2NyaXB0aW9uKCdNaW50IGFuIGV4cGlyaW5nIHJlYWQtb25seSBsaW5rIHRvIGEgcHVibGlzaGVkIHJ1bi4gVGhlIHRva2VuIGlzIHNob3duIE9OQ0UuJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1yLCAtLXJ1biA8aWQ+JywgJ1B1Ymxpc2hlZCBydW4gSUQnKVxuICAgIC5vcHRpb24oJy0tZGF5cyA8bj4nLCAnRGF5cyB1bnRpbCBpdCBleHBpcmVzIChzZXJ2ZXIgZGVmYXVsdCAzMCwgbWF4aW11bSAxODApJylcbiAgICAub3B0aW9uKCctLXJlZGFjdC1uYW1lcycsICdSZXBsYWNlIHByb2plY3QgYW5kIHBpcGVsaW5lIG5hbWVzIGluIHRoZSBzaGFyZWQgdmlldycpKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdSZXBvcnQgTGluaycpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcHJpbnRTc2xXYXJuaW5nKG9wdGlvbnMudmVyaWZ5U3NsKTtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gY3JlYXRlQXV0aGVudGljYXRlZENsaWVudChvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZGF5cyA9IG9wdGlvbnMuZGF5cyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogTnVtYmVyKG9wdGlvbnMuZGF5cyk7XG4gICAgICAgIGlmIChkYXlzICE9PSB1bmRlZmluZWQgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKGRheXMpIHx8IGRheXMgPCAxKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignLS1kYXlzIG11c3QgYmUgYSBwb3NpdGl2ZSB3aG9sZSBudW1iZXIgb2YgZGF5cycpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHVud3JhcDx7IHVybD86IHN0cmluZzsgdG9rZW4/OiBzdHJpbmc7IGV4cGlyZXNBdDogc3RyaW5nIH0+KFxuICAgICAgICAgIGF3YWl0IGNsaWVudC5wb3N0KFxuICAgICAgICAgICAgYCR7Y2xpZW50LmdldENvbmZpZygpLmFwaS5iYXNlVXJsfSR7QkFTRX0vcnVucy8ke2VuY29kZVVSSUNvbXBvbmVudChvcHRpb25zLnJ1bil9L2xpbmtzYCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLi4uKGRheXMgIT09IHVuZGVmaW5lZCA/IHsgZXhwaXJlc0luRGF5czogZGF5cyB9IDoge30pLFxuICAgICAgICAgICAgICAuLi4ob3B0aW9ucy5yZWRhY3ROYW1lcyA/IHsgcmVkYWN0TmFtZXM6IHRydWUgfSA6IHt9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKSwgJ2xpbmsnLFxuICAgICAgICApO1xuICAgICAgICBwcmludFNlY3Rpb24oJ1NoYXJlIExpbmsnKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgTGluazogZ3JlZW4oYm9sZChkYXRhLnVybCA/PyBkYXRhLnRva2VuID8/ICcobm90IHJldHVybmVkKScpKSxcbiAgICAgICAgICBFeHBpcmVzOiBkYXRhLmV4cGlyZXNBdCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFNhaWQgZXZlcnkgdGltZSwgYmVjYXVzZSBpdCBpcyB0cnVlIGV2ZXJ5IHRpbWUgYW5kIHRoZSBjb25zZXF1ZW5jZSBpcyBwZXJtYW5lbnQ6XG4gICAgICAgIC8vIHRoZSBzZXJ2ZXIgc3RvcmVzIG9ubHkgYSBoYXNoLCBzbyBhIGxvc3QgdG9rZW4gY2Fubm90IGJlIHJlY292ZXJlZCwgb25seSByZXBsYWNlZC5cbiAgICAgICAgcHJpbnRXYXJuaW5nKCdDb3B5IHRoaXMgbm93IOKAlCBvbmx5IGEgaGFzaCBpcyBzdG9yZWQsIHNvIGl0IGNhbm5vdCBiZSBzaG93biBhZ2Fpbi4gUmV2b2tlIGl0IGluIHRoZSBkYXNoYm9hcmQgaWYgaXQgbGVha3MuJyk7XG4gICAgICAgIHByaW50RXhlY3V0aW9uU3VtbWFyeShleGVjdXRpb25JZCwgRGF0ZS5ub3coKSAtIHN0YXJ0KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHsgY29tbWFuZDogJ3JlcG9ydC1saW5rJywgZXhlY3V0aW9uSWQgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgLy8g4pSA4pSAIHBkZiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgd2l0aFNzbE9wdGlvbnMoZ3JvdXBcbiAgICAuY29tbWFuZCgncGRmJylcbiAgICAuZGVzY3JpcHRpb24oJ0Rvd25sb2FkIGEgcnVuIGFzIGEgUERGLiBOZWVkcyByZXBvcnRzOnJlYWQg4oCUIHRoZSBzYW1lIHBlcm1pc3Npb24gYXMgcmVhZGluZyB0aGUgcnVuLicpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctciwgLS1ydW4gPGlkPicsICdSdW4gSUQgdG8gZG93bmxvYWQnKVxuICAgIC5vcHRpb24oJy1vLCAtLW91dCA8ZmlsZT4nLCAnV2hlcmUgdG8gd3JpdGUgaXQgKGRlZmF1bHQ6IHRoZSBmaWxlIG5hbWUgdGhlIHNlcnZlciBjaG9zZSwgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5KScpKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdSZXBvcnQgUERGJyk7XG4gICAgICB0cnkge1xuICAgICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuICAgICAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgZmlsZW5hbWUgfSA9IGF3YWl0IGNsaWVudC5nZXRCaW5hcnkoXG4gICAgICAgICAgYCR7Y2xpZW50LmdldENvbmZpZygpLmFwaS5iYXNlVXJsfSR7QkFTRX0vcnVucy8ke2VuY29kZVVSSUNvbXBvbmVudChvcHRpb25zLnJ1bil9L3BkZmAsXG4gICAgICAgICk7XG4gICAgICAgIC8vIFRoZSBzZXJ2ZXIncyBuYW1lIHVubGVzcyB0aGUgY2FsbGVyIGFza2VkIGZvciBvbmU6IGl0IGtub3dzIHRoZSByZXBvcnQncyB0aXRsZSBhbmRcbiAgICAgICAgLy8gd2hldGhlciB0aGlzIHJ1biBpcyBhIHJldmlzaW9uLCBhbmQgYSBzY3JpcHRlZCBib2FyZCBwYWNrIHdhbnRzIHRoYXQgbmFtZS5cbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdHlwZW9mIG9wdGlvbnMub3V0ID09PSAnc3RyaW5nJyAmJiBvcHRpb25zLm91dC5sZW5ndGggPiAwXG4gICAgICAgICAgPyBvcHRpb25zLm91dFxuICAgICAgICAgIDogKGZpbGVuYW1lID8/IGByZXBvcnQtJHtvcHRpb25zLnJ1bn0ucGRmYCk7XG4gICAgICAgIHdyaXRlRmlsZVN5bmModGFyZ2V0LCBkYXRhKTtcbiAgICAgICAgcHJpbnRTZWN0aW9uKCdEb3dubG9hZGVkJyk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoeyBGaWxlOiBncmVlbihib2xkKHRhcmdldCkpLCBTaXplOiBgJHsoZGF0YS5sZW5ndGggLyAxMDI0KS50b0ZpeGVkKDEpfSBLaUJgIH0pO1xuICAgICAgICBwcmludFN1Y2Nlc3MoJ1NhdmVkJyk7XG4gICAgICAgIHByaW50RXhlY3V0aW9uU3VtbWFyeShleGVjdXRpb25JZCwgRGF0ZS5ub3coKSAtIHN0YXJ0KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIEEgNTAzIGhlcmUgaXMgbm90IGEgZmFpbHVyZSBvZiB0aGUgcmVwb3J0OiB0aGlzIGluc3RhbmNlIGhhcyBubyBDaHJvbWl1bSwgYW5kIHRoZVxuICAgICAgICAvLyBzZXJ2ZXIgc2F5cyBzbyBpbiB3b3Jkcy4gSXQgc3RpbGwgZXhpdHMgbm9uLXplcm8sIGJlY2F1c2UgYSBzY3JpcHQgdGhhdCBhc2tlZCBmb3IgYVxuICAgICAgICAvLyBmaWxlIGFuZCBnb3Qgbm9uZSBtdXN0IG5vdCBjYXJyeSBvbiBhcyB0aG91Z2ggaXQgaGFzIG9uZS5cbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkFQSV9SRVFVRVNULCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDogeyBjb21tYW5kOiAncmVwb3J0LXBkZicsIGV4ZWN1dGlvbklkIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIC8vIOKUgOKUgCB0cmFuc2ZlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgd2l0aFNzbE9wdGlvbnMoZ3JvdXBcbiAgICAuY29tbWFuZCgndHJhbnNmZXInKVxuICAgIC5kZXNjcmlwdGlvbignSGFuZCBhIHJlcG9ydCB0byBhIG5ldyBvd25lci4gQSBzY2hlZHVsZWQgcnVuIGlzIGF1dGhvcml6ZWQgQVMgdGhlIG93bmVyLCBzbyB0aGlzIGlzIGEgcHJpdmlsZWdlIG1vdmUuJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1pLCAtLWlkIDxpZD4nLCAnUmVwb3J0IGRlZmluaXRpb24gSUQnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLW8sIC0tb3duZXIgPHVzZXJJZD4nLCAnTmV3IG93bmVyXFwncyB1c2VyIElEIOKAlCBtdXN0IGJlIGEgbGl2ZSBtZW1iZXIgb2YgdGhpcyBvcmcnKSlcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignUmVwb3J0IFRyYW5zZmVyJyk7XG4gICAgICB0cnkge1xuICAgICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuICAgICAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB1bndyYXA8eyBkZWZpbml0aW9uOiBSZXBvcnREZWZpbml0aW9uIH0+KFxuICAgICAgICAgIGF3YWl0IGNsaWVudC5wb3N0KFxuICAgICAgICAgICAgYCR7Y2xpZW50LmdldENvbmZpZygpLmFwaS5iYXNlVXJsfSR7QkFTRX0vZGVmaW5pdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQob3B0aW9ucy5pZCl9L3RyYW5zZmVyYCxcbiAgICAgICAgICAgIHsgb3duZXJJZDogb3B0aW9ucy5vd25lciB9LFxuICAgICAgICAgICksICdyZXBvcnQnLFxuICAgICAgICApO1xuICAgICAgICBwcmludFNlY3Rpb24oJ093bmVyc2hpcCBUcmFuc2ZlcnJlZCcpO1xuICAgICAgICBwcmludEtleVZhbHVlKHsgJ1JlcG9ydCc6IGdyZWVuKGJvbGQoZGF0YS5kZWZpbml0aW9uLm5hbWUpKSwgJ05ldyBvd25lcic6IG9wdGlvbnMub3duZXIgfSk7XG4gICAgICAgIC8vIFRoZSBjb25zZXF1ZW5jZSwgaW4gb25lIGxpbmU6IGZyb20gbm93IG9uIHRoZSByZXBvcnQgY29tcHV0ZXMgd2l0aCBhIGRpZmZlcmVudFxuICAgICAgICAvLyBwZXJzb24ncyBhY2Nlc3MsIHdoaWNoIGNhbiBjaGFuZ2Ugd2hhdCBpdCBjb250YWlucy5cbiAgICAgICAgcHJpbnRJbmZvKCdGdXR1cmUgcnVucyBhcmUgYXV0aG9yaXplZCBhcyB0aGUgbmV3IG93bmVyLCBzbyB0aGUgcmVwb3J0IG5vdyBjb21wdXRlcyB3aXRoIHRoZWlyIGFjY2Vzcy4nKTtcbiAgICAgICAgcHJpbnRFeGVjdXRpb25TdW1tYXJ5KGV4ZWN1dGlvbklkLCBEYXRlLm5vdygpIC0gc3RhcnQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkFQSV9SRVFVRVNULCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDogeyBjb21tYW5kOiAncmVwb3J0LXRyYW5zZmVyJywgZXhlY3V0aW9uSWQgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG59XG5cbi8qKiBgXCJhLCBiICxjXCJgIOKGkiBgWydhJywnYicsJ2MnXWA7IGVtcHR5IG9yIGFic2VudCDihpIgYFtdYC4gKi9cbmZ1bmN0aW9uIHNwbGl0TGlzdCh2YWx1ZTogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiBbXTtcbiAgcmV0dXJuIHZhbHVlLnNwbGl0KCcsJykubWFwKChzKSA9PiBzLnRyaW0oKSkuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCA+IDApO1xufVxuIl19
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type SecurityReportFormat } from '@pipeline-builder/pipeline-core';
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
interface UploadOptions {
|
|
4
|
+
pipelineId: string;
|
|
5
|
+
file: string;
|
|
6
|
+
tool: string;
|
|
7
|
+
format: string;
|
|
8
|
+
executionId?: string;
|
|
9
|
+
stage?: string;
|
|
10
|
+
storeTokens?: boolean;
|
|
11
|
+
verifySsl?: boolean;
|
|
12
|
+
region?: string;
|
|
13
|
+
profile?: string;
|
|
14
|
+
}
|
|
15
|
+
/** The JSON body `POST /api/pipelines/:id/security-reports` takes. */
|
|
16
|
+
export interface SecurityReportBody {
|
|
17
|
+
tool: string;
|
|
18
|
+
format: SecurityReportFormat;
|
|
19
|
+
executionId?: string;
|
|
20
|
+
stage?: string;
|
|
21
|
+
report: unknown;
|
|
22
|
+
}
|
|
23
|
+
/** Read + validate the report and build the upload body. */
|
|
24
|
+
export declare function buildSecurityReportBody(options: Pick<UploadOptions, 'file' | 'tool' | 'format' | 'executionId' | 'stage'>, env?: NodeJS.ProcessEnv): SecurityReportBody;
|
|
25
|
+
/**
|
|
26
|
+
* Registers `security-report upload`: send one SARIF / trivy-JSON / grype-JSON
|
|
27
|
+
* report to the pipeline's security-report ingest, so findings from scans that
|
|
28
|
+
* run INSIDE a pipeline (application images, dependency trees) land on the
|
|
29
|
+
* platform beside the plugin-image findings instead of only in a build log.
|
|
30
|
+
*
|
|
31
|
+
* Plugin steps upload with curl and their injected scoped key (see
|
|
32
|
+
* pipeline-core `core/security-reports.ts`); this command is for anywhere
|
|
33
|
+
* `pipeline-manager` runs — the synth/bootstrap image, a laptop, other CI.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```bash
|
|
37
|
+
* pipeline-manager security-report upload --pipeline-id <id> --file trivy-reports/image.sarif --tool trivy --format sarif
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export declare function securityReport(program: Command): void;
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=security-report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-report.d.ts","sourceRoot":"","sources":["../../src/commands/security-report.ts"],"names":[],"mappings":"AAIA,OAAO,EAA2B,KAAK,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACrG,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,UAAU,aAAa;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,sEAAsE;AACtE,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,oBAAoB,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,4DAA4D;AAC5D,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,aAAa,GAAG,OAAO,CAAC,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,kBAAkB,CAyBpL;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmCrD"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import { readFileSync, statSync } from 'node:fs';
|
|
4
|
+
import { SECURITY_REPORT_FORMATS } from '@pipeline-builder/pipeline-core';
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import { createAuthenticatedClientAsync, printCommandHeader, printSslWarning, validateEntityId, withProfileOption, withRegionOption, withSslOptions, } from '../utils/command-utils.js';
|
|
7
|
+
import { ERROR_CODES, handleError, ValidationError } from '../utils/error-handler.js';
|
|
8
|
+
import { printInfo, printSuccess } from '../utils/output-utils.js';
|
|
9
|
+
import { setPipelineId } from '../utils/request-context.js';
|
|
10
|
+
/** Refuse a report this large client-side rather than ship it and be refused. */
|
|
11
|
+
const MAX_REPORT_BYTES = 10 * 1024 * 1024;
|
|
12
|
+
/** Read + validate the report and build the upload body. */
|
|
13
|
+
export function buildSecurityReportBody(options, env = process.env) {
|
|
14
|
+
if (!SECURITY_REPORT_FORMATS.includes(options.format)) {
|
|
15
|
+
throw new ValidationError(`--format must be one of ${SECURITY_REPORT_FORMATS.join(', ')}`, 'format', options.format);
|
|
16
|
+
}
|
|
17
|
+
const tool = options.tool.trim();
|
|
18
|
+
if (!/^[a-z0-9][a-z0-9._-]{0,63}$/i.test(tool))
|
|
19
|
+
throw new ValidationError('--tool must be a short tool name (e.g. trivy, grype)', 'tool', options.tool);
|
|
20
|
+
const size = statSync(options.file).size;
|
|
21
|
+
if (size > MAX_REPORT_BYTES) {
|
|
22
|
+
throw new ValidationError(`${options.file} is ${size} bytes — over the ${MAX_REPORT_BYTES}-byte upload limit`, 'file');
|
|
23
|
+
}
|
|
24
|
+
let report;
|
|
25
|
+
try {
|
|
26
|
+
report = JSON.parse(readFileSync(options.file, 'utf8'));
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
throw new ValidationError(`${options.file} is not valid JSON (SARIF, trivy JSON and grype JSON are all JSON)`, 'file');
|
|
30
|
+
}
|
|
31
|
+
// In a CodeBuild step the action env carries the execution id.
|
|
32
|
+
const executionId = options.executionId ?? env.PIPELINE_EXECUTION_ID;
|
|
33
|
+
return {
|
|
34
|
+
tool,
|
|
35
|
+
format: options.format,
|
|
36
|
+
...(executionId ? { executionId } : {}),
|
|
37
|
+
...(options.stage ? { stage: options.stage } : {}),
|
|
38
|
+
report,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Registers `security-report upload`: send one SARIF / trivy-JSON / grype-JSON
|
|
43
|
+
* report to the pipeline's security-report ingest, so findings from scans that
|
|
44
|
+
* run INSIDE a pipeline (application images, dependency trees) land on the
|
|
45
|
+
* platform beside the plugin-image findings instead of only in a build log.
|
|
46
|
+
*
|
|
47
|
+
* Plugin steps upload with curl and their injected scoped key (see
|
|
48
|
+
* pipeline-core `core/security-reports.ts`); this command is for anywhere
|
|
49
|
+
* `pipeline-manager` runs — the synth/bootstrap image, a laptop, other CI.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```bash
|
|
53
|
+
* pipeline-manager security-report upload --pipeline-id <id> --file trivy-reports/image.sarif --tool trivy --format sarif
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export function securityReport(program) {
|
|
57
|
+
const group = program.command('security-report').description('Upload pipeline security reports (SARIF, trivy/grype JSON)');
|
|
58
|
+
withSslOptions(withRegionOption(withProfileOption(group
|
|
59
|
+
.command('upload')
|
|
60
|
+
.description('Upload one security report to a pipeline')
|
|
61
|
+
.requiredOption('-p, --pipeline-id <id>', 'Pipeline ID')
|
|
62
|
+
.requiredOption('-f, --file <file>', 'Report file (JSON)')
|
|
63
|
+
.requiredOption('-t, --tool <tool>', 'Tool that produced it (trivy, grype, …)')
|
|
64
|
+
.requiredOption('--format <format>', `Report format (${SECURITY_REPORT_FORMATS.join(', ')})`)
|
|
65
|
+
.option('--execution-id <id>', 'Pipeline execution id (default: PIPELINE_EXECUTION_ID)')
|
|
66
|
+
.option('--stage <name>', 'Stage the report came from')
|
|
67
|
+
.option('--store-tokens', 'Authenticate using the key in AWS Secrets Manager (PLATFORM_SECRET_NAME)', false))))
|
|
68
|
+
.action(async (options) => {
|
|
69
|
+
const executionId = printCommandHeader('Upload Security Report');
|
|
70
|
+
try {
|
|
71
|
+
printSslWarning(options.verifySsl);
|
|
72
|
+
const pipelineId = validateEntityId(options.pipelineId, 'Pipeline');
|
|
73
|
+
setPipelineId(pipelineId);
|
|
74
|
+
const body = buildSecurityReportBody(options);
|
|
75
|
+
printInfo('Uploading', { pipelineId, tool: body.tool, format: body.format, file: options.file });
|
|
76
|
+
const client = await createAuthenticatedClientAsync(options);
|
|
77
|
+
await client.post(`${client.getConfig().api.pipelineUrl}/${encodeURIComponent(pipelineId)}/security-reports`, body);
|
|
78
|
+
printSuccess('Security report uploaded', { pipelineId, tool: body.tool });
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
handleError(error, ERROR_CODES.API_REQUEST, {
|
|
82
|
+
debug: program.opts().debug,
|
|
83
|
+
exit: true,
|
|
84
|
+
context: { command: 'security-report-upload', executionId, pipelineId: options.pipelineId },
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktcmVwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3NlY3VyaXR5LXJlcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pELE9BQU8sRUFBRSx1QkFBdUIsRUFBNkIsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFDTCw4QkFBOEIsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxHQUMzSSxNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTVELGlGQUFpRjtBQUNqRixNQUFNLGdCQUFnQixHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBd0IxQyw0REFBNEQ7QUFDNUQsTUFBTSxVQUFVLHVCQUF1QixDQUFDLE9BQWtGLEVBQUUsR0FBRyxHQUFzQixPQUFPLENBQUMsR0FBRztJQUM5SixJQUFJLENBQUUsdUJBQTZDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzdFLE1BQU0sSUFBSSxlQUFlLENBQUMsMkJBQTJCLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkgsQ0FB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R0FBRyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5QyxTQUFTLENBQUMsV0FBVyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNqRyxNQUFNLE1BQU0sR0FBRyxNQUFNLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdELE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNwSCxZQUFZLENBQUMsMEJBQTBCLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsV0FBVyxFQUFFO2dCQUMxQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUs7Z0JBQzNCLElBQUksRUFBRSxJQUFJO2dCQUNWLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUU7YUFDNUYsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyByZWFkRmlsZVN5bmMsIHN0YXRTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBTRUNVUklUWV9SRVBPUlRfRk9STUFUUywgdHlwZSBTZWN1cml0eVJlcG9ydEZvcm1hdCB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQge1xuICBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMsIHByaW50Q29tbWFuZEhlYWRlciwgcHJpbnRTc2xXYXJuaW5nLCB2YWxpZGF0ZUVudGl0eUlkLCB3aXRoUHJvZmlsZU9wdGlvbiwgd2l0aFJlZ2lvbk9wdGlvbiwgd2l0aFNzbE9wdGlvbnMsXG59IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IHByaW50SW5mbywgcHJpbnRTdWNjZXNzIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcbmltcG9ydCB7IHNldFBpcGVsaW5lSWQgfSBmcm9tICcuLi91dGlscy9yZXF1ZXN0LWNvbnRleHQuanMnO1xuXG4vKiogUmVmdXNlIGEgcmVwb3J0IHRoaXMgbGFyZ2UgY2xpZW50LXNpZGUgcmF0aGVyIHRoYW4gc2hpcCBpdCBhbmQgYmUgcmVmdXNlZC4gKi9cbmNvbnN0IE1BWF9SRVBPUlRfQllURVMgPSAxMCAqIDEwMjQgKiAxMDI0O1xuXG5pbnRlcmZhY2UgVXBsb2FkT3B0aW9ucyB7XG4gIHBpcGVsaW5lSWQ6IHN0cmluZztcbiAgZmlsZTogc3RyaW5nO1xuICB0b29sOiBzdHJpbmc7XG4gIGZvcm1hdDogc3RyaW5nO1xuICBleGVjdXRpb25JZD86IHN0cmluZztcbiAgc3RhZ2U/OiBzdHJpbmc7XG4gIHN0b3JlVG9rZW5zPzogYm9vbGVhbjtcbiAgdmVyaWZ5U3NsPzogYm9vbGVhbjtcbiAgcmVnaW9uPzogc3RyaW5nO1xuICBwcm9maWxlPzogc3RyaW5nO1xufVxuXG4vKiogVGhlIEpTT04gYm9keSBgUE9TVCAvYXBpL3BpcGVsaW5lcy86aWQvc2VjdXJpdHktcmVwb3J0c2AgdGFrZXMuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyaXR5UmVwb3J0Qm9keSB7XG4gIHRvb2w6IHN0cmluZztcbiAgZm9ybWF0OiBTZWN1cml0eVJlcG9ydEZvcm1hdDtcbiAgZXhlY3V0aW9uSWQ/OiBzdHJpbmc7XG4gIHN0YWdlPzogc3RyaW5nO1xuICByZXBvcnQ6IHVua25vd247XG59XG5cbi8qKiBSZWFkICsgdmFsaWRhdGUgdGhlIHJlcG9ydCBhbmQgYnVpbGQgdGhlIHVwbG9hZCBib2R5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU2VjdXJpdHlSZXBvcnRCb2R5KG9wdGlvbnM6IFBpY2s8VXBsb2FkT3B0aW9ucywgJ2ZpbGUnIHwgJ3Rvb2wnIHwgJ2Zvcm1hdCcgfCAnZXhlY3V0aW9uSWQnIHwgJ3N0YWdlJz4sIGVudjogTm9kZUpTLlByb2Nlc3NFbnYgPSBwcm9jZXNzLmVudik6IFNlY3VyaXR5UmVwb3J0Qm9keSB7XG4gIGlmICghKFNFQ1VSSVRZX1JFUE9SVF9GT1JNQVRTIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyhvcHRpb25zLmZvcm1hdCkpIHtcbiAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGAtLWZvcm1hdCBtdXN0IGJlIG9uZSBvZiAke1NFQ1VSSVRZX1JFUE9SVF9GT1JNQVRTLmpvaW4oJywgJyl9YCwgJ2Zvcm1hdCcsIG9wdGlvbnMuZm9ybWF0KTtcbiAgfVxuICBjb25zdCB0b29sID0gb3B0aW9ucy50b29sLnRyaW0oKTtcbiAgaWYgKCEvXlthLXowLTldW2EtejAtOS5fLV17MCw2M30kL2kudGVzdCh0b29sKSkgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignLS10b29sIG11c3QgYmUgYSBzaG9ydCB0b29sIG5hbWUgKGUuZy4gdHJpdnksIGdyeXBlKScsICd0b29sJywgb3B0aW9ucy50b29sKTtcbiAgY29uc3Qgc2l6ZSA9IHN0YXRTeW5jKG9wdGlvbnMuZmlsZSkuc2l6ZTtcbiAgaWYgKHNpemUgPiBNQVhfUkVQT1JUX0JZVEVTKSB7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgJHtvcHRpb25zLmZpbGV9IGlzICR7c2l6ZX0gYnl0ZXMg4oCUIG92ZXIgdGhlICR7TUFYX1JFUE9SVF9CWVRFU30tYnl0ZSB1cGxvYWQgbGltaXRgLCAnZmlsZScpO1xuICB9XG4gIGxldCByZXBvcnQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgcmVwb3J0ID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMob3B0aW9ucy5maWxlLCAndXRmOCcpKTtcbiAgfSBjYXRjaCB7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgJHtvcHRpb25zLmZpbGV9IGlzIG5vdCB2YWxpZCBKU09OIChTQVJJRiwgdHJpdnkgSlNPTiBhbmQgZ3J5cGUgSlNPTiBhcmUgYWxsIEpTT04pYCwgJ2ZpbGUnKTtcbiAgfVxuICAvLyBJbiBhIENvZGVCdWlsZCBzdGVwIHRoZSBhY3Rpb24gZW52IGNhcnJpZXMgdGhlIGV4ZWN1dGlvbiBpZC5cbiAgY29uc3QgZXhlY3V0aW9uSWQgPSBvcHRpb25zLmV4ZWN1dGlvbklkID8/IGVudi5QSVBFTElORV9FWEVDVVRJT05fSUQ7XG4gIHJldHVybiB7XG4gICAgdG9vbCxcbiAgICBmb3JtYXQ6IG9wdGlvbnMuZm9ybWF0IGFzIFNlY3VyaXR5UmVwb3J0Rm9ybWF0LFxuICAgIC4uLihleGVjdXRpb25JZCA/IHsgZXhlY3V0aW9uSWQgfSA6IHt9KSxcbiAgICAuLi4ob3B0aW9ucy5zdGFnZSA/IHsgc3RhZ2U6IG9wdGlvbnMuc3RhZ2UgfSA6IHt9KSxcbiAgICByZXBvcnQsXG4gIH07XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIGBzZWN1cml0eS1yZXBvcnQgdXBsb2FkYDogc2VuZCBvbmUgU0FSSUYgLyB0cml2eS1KU09OIC8gZ3J5cGUtSlNPTlxuICogcmVwb3J0IHRvIHRoZSBwaXBlbGluZSdzIHNlY3VyaXR5LXJlcG9ydCBpbmdlc3QsIHNvIGZpbmRpbmdzIGZyb20gc2NhbnMgdGhhdFxuICogcnVuIElOU0lERSBhIHBpcGVsaW5lIChhcHBsaWNhdGlvbiBpbWFnZXMsIGRlcGVuZGVuY3kgdHJlZXMpIGxhbmQgb24gdGhlXG4gKiBwbGF0Zm9ybSBiZXNpZGUgdGhlIHBsdWdpbi1pbWFnZSBmaW5kaW5ncyBpbnN0ZWFkIG9mIG9ubHkgaW4gYSBidWlsZCBsb2cuXG4gKlxuICogUGx1Z2luIHN0ZXBzIHVwbG9hZCB3aXRoIGN1cmwgYW5kIHRoZWlyIGluamVjdGVkIHNjb3BlZCBrZXkgKHNlZVxuICogcGlwZWxpbmUtY29yZSBgY29yZS9zZWN1cml0eS1yZXBvcnRzLnRzYCk7IHRoaXMgY29tbWFuZCBpcyBmb3IgYW55d2hlcmVcbiAqIGBwaXBlbGluZS1tYW5hZ2VyYCBydW5zIOKAlCB0aGUgc3ludGgvYm9vdHN0cmFwIGltYWdlLCBhIGxhcHRvcCwgb3RoZXIgQ0kuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGJhc2hcbiAqIHBpcGVsaW5lLW1hbmFnZXIgc2VjdXJpdHktcmVwb3J0IHVwbG9hZCAtLXBpcGVsaW5lLWlkIDxpZD4gLS1maWxlIHRyaXZ5LXJlcG9ydHMvaW1hZ2Uuc2FyaWYgLS10b29sIHRyaXZ5IC0tZm9ybWF0IHNhcmlmXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlY3VyaXR5UmVwb3J0KHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgY29uc3QgZ3JvdXAgPSBwcm9ncmFtLmNvbW1hbmQoJ3NlY3VyaXR5LXJlcG9ydCcpLmRlc2NyaXB0aW9uKCdVcGxvYWQgcGlwZWxpbmUgc2VjdXJpdHkgcmVwb3J0cyAoU0FSSUYsIHRyaXZ5L2dyeXBlIEpTT04pJyk7XG4gIHdpdGhTc2xPcHRpb25zKFxuICAgIHdpdGhSZWdpb25PcHRpb24oXG4gICAgICB3aXRoUHJvZmlsZU9wdGlvbihncm91cFxuICAgICAgICAuY29tbWFuZCgndXBsb2FkJylcbiAgICAgICAgLmRlc2NyaXB0aW9uKCdVcGxvYWQgb25lIHNlY3VyaXR5IHJlcG9ydCB0byBhIHBpcGVsaW5lJylcbiAgICAgICAgLnJlcXVpcmVkT3B0aW9uKCctcCwgLS1waXBlbGluZS1pZCA8aWQ+JywgJ1BpcGVsaW5lIElEJylcbiAgICAgICAgLnJlcXVpcmVkT3B0aW9uKCctZiwgLS1maWxlIDxmaWxlPicsICdSZXBvcnQgZmlsZSAoSlNPTiknKVxuICAgICAgICAucmVxdWlyZWRPcHRpb24oJy10LCAtLXRvb2wgPHRvb2w+JywgJ1Rvb2wgdGhhdCBwcm9kdWNlZCBpdCAodHJpdnksIGdyeXBlLCDigKYpJylcbiAgICAgICAgLnJlcXVpcmVkT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsIGBSZXBvcnQgZm9ybWF0ICgke1NFQ1VSSVRZX1JFUE9SVF9GT1JNQVRTLmpvaW4oJywgJyl9KWApXG4gICAgICAgIC5vcHRpb24oJy0tZXhlY3V0aW9uLWlkIDxpZD4nLCAnUGlwZWxpbmUgZXhlY3V0aW9uIGlkIChkZWZhdWx0OiBQSVBFTElORV9FWEVDVVRJT05fSUQpJylcbiAgICAgICAgLm9wdGlvbignLS1zdGFnZSA8bmFtZT4nLCAnU3RhZ2UgdGhlIHJlcG9ydCBjYW1lIGZyb20nKVxuICAgICAgICAub3B0aW9uKCctLXN0b3JlLXRva2VucycsICdBdXRoZW50aWNhdGUgdXNpbmcgdGhlIGtleSBpbiBBV1MgU2VjcmV0cyBNYW5hZ2VyIChQTEFURk9STV9TRUNSRVRfTkFNRSknLCBmYWxzZSkpLFxuICAgICksXG4gIClcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zOiBVcGxvYWRPcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignVXBsb2FkIFNlY3VyaXR5IFJlcG9ydCcpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcHJpbnRTc2xXYXJuaW5nKG9wdGlvbnMudmVyaWZ5U3NsKTtcbiAgICAgICAgY29uc3QgcGlwZWxpbmVJZCA9IHZhbGlkYXRlRW50aXR5SWQob3B0aW9ucy5waXBlbGluZUlkLCAnUGlwZWxpbmUnKTtcbiAgICAgICAgc2V0UGlwZWxpbmVJZChwaXBlbGluZUlkKTtcbiAgICAgICAgY29uc3QgYm9keSA9IGJ1aWxkU2VjdXJpdHlSZXBvcnRCb2R5KG9wdGlvbnMpO1xuICAgICAgICBwcmludEluZm8oJ1VwbG9hZGluZycsIHsgcGlwZWxpbmVJZCwgdG9vbDogYm9keS50b29sLCBmb3JtYXQ6IGJvZHkuZm9ybWF0LCBmaWxlOiBvcHRpb25zLmZpbGUgfSk7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnRBc3luYyhvcHRpb25zKTtcbiAgICAgICAgYXdhaXQgY2xpZW50LnBvc3QoYCR7Y2xpZW50LmdldENvbmZpZygpLmFwaS5waXBlbGluZVVybH0vJHtlbmNvZGVVUklDb21wb25lbnQocGlwZWxpbmVJZCl9L3NlY3VyaXR5LXJlcG9ydHNgLCBib2R5KTtcbiAgICAgICAgcHJpbnRTdWNjZXNzKCdTZWN1cml0eSByZXBvcnQgdXBsb2FkZWQnLCB7IHBpcGVsaW5lSWQsIHRvb2w6IGJvZHkudG9vbCB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHsgY29tbWFuZDogJ3NlY3VyaXR5LXJlcG9ydC11cGxvYWQnLCBleGVjdXRpb25JZCwgcGlwZWxpbmVJZDogb3B0aW9ucy5waXBlbGluZUlkIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-events.d.ts","sourceRoot":"","sources":["../../src/commands/setup-events.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"setup-events.d.ts","sourceRoot":"","sources":["../../src/commands/setup-events.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0KlD"}
|
|
@@ -9,6 +9,7 @@ import { CloudFormationClient, DescribeStacksCommand } from '@aws-sdk/client-clo
|
|
|
9
9
|
import { LambdaClient, UpdateFunctionCodeCommand } from '@aws-sdk/client-lambda';
|
|
10
10
|
import { Command } from 'commander';
|
|
11
11
|
import { EVENTS_STACK_NAME } from '../config/cli.constants.js';
|
|
12
|
+
import { auditLog } from '../utils/audit-log.js';
|
|
12
13
|
import { applyAwsProfile, resolveAwsRegion } from '../utils/aws-env.js';
|
|
13
14
|
import { printCommandHeader, withProfileOption, withRegionOption } from '../utils/command-utils.js';
|
|
14
15
|
import { ERROR_CODES, handleError } from '../utils/error-handler.js';
|
|
@@ -67,6 +68,18 @@ export function setupEvents(program) {
|
|
|
67
68
|
if (options.scopedIngest) {
|
|
68
69
|
secretName = secretName.replace(/\/platform$/, '/reporting-ingest');
|
|
69
70
|
}
|
|
71
|
+
// Recorded before the deploy (as store-token does before its write): the
|
|
72
|
+
// operator's intent to repoint ingestion at a secret is the sensitive part.
|
|
73
|
+
auditLog('setup-events', {
|
|
74
|
+
executionId,
|
|
75
|
+
stack: STACK_NAME,
|
|
76
|
+
region,
|
|
77
|
+
secretName,
|
|
78
|
+
scopedIngest: Boolean(options.scopedIngest),
|
|
79
|
+
dora: Boolean(options.withDora),
|
|
80
|
+
packageVersion: options.packageVersion ?? 'latest',
|
|
81
|
+
profile: options.profile,
|
|
82
|
+
});
|
|
70
83
|
printInfo('Parameters', {
|
|
71
84
|
stack: STACK_NAME,
|
|
72
85
|
region,
|
|
@@ -166,4 +179,4 @@ export function setupEvents(program) {
|
|
|
166
179
|
}
|
|
167
180
|
});
|
|
168
181
|
}
|
|
169
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAtZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3NldHVwLWV2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0YsT0FBTyxFQUFFLFlBQVksRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV4RSwwREFBMEQ7QUFDMUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENB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LEVBQUUsTUFBTTtnQkFDaEIsY0FBYyxFQUFFLFdBQVc7Z0JBQzNCLFFBQVEsRUFBRSxTQUFTLENBQUMsaUJBQWlCLElBQUksV0FBVztnQkFDcEQsYUFBYSxFQUFFLFNBQVMsQ0FBQyxhQUFhLElBQUksbUJBQW1CO2dCQUM3RCxtQkFBbUIsRUFBRSxTQUFTLENBQUMsa0JBQWtCLElBQUksbUJBQW1CO2dCQUN4RSxrQkFBa0IsRUFBRSxTQUFTLENBQUMsYUFBYSxJQUFJLG1CQUFtQjtnQkFDbEUsUUFBUSxFQUFFLFlBQVk7YUFDdkIsQ0FBQyxDQUFDO1lBRUgsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoQixZQUFZLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUV6RCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLFdBQVcsRUFBRTtnQkFDMUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFO2FBQ3JFLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgZXhlY0ZpbGVTeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBDbG91ZEZvcm1hdGlvbkNsaWVudCwgRGVzY3JpYmVTdGFja3NDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IExhbWJkYUNsaWVudCwgVXBkYXRlRnVuY3Rpb25Db2RlQ29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1sYW1iZGEnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBFVkVOVFNfU1RBQ0tfTkFNRSB9IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IGFwcGx5QXdzUHJvZmlsZSwgcmVzb2x2ZUF3c1JlZ2lvbiB9IGZyb20gJy4uL3V0aWxzL2F3cy1lbnYuanMnO1xuaW1wb3J0IHsgcHJpbnRDb21tYW5kSGVhZGVyLCB3aXRoUHJvZmlsZU9wdGlvbiwgd2l0aFJlZ2lvbk9wdGlvbiB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludEVycm9yLCBwcmludEluZm8sIHByaW50S2V5VmFsdWUsIHByaW50U2VjdGlvbiwgcHJpbnRTdWNjZXNzIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcbmltcG9ydCB7IHJlc29sdmVQbGF0Zm9ybVNlY3JldE5hbWUgfSBmcm9tICcuLi91dGlscy9wbGF0Zm9ybS1zZWNyZXQuanMnO1xuXG4vLyBFU00gaGFzIG5vIF9fZGlybmFtZTsgZGVyaXZlIGl0IGZyb20gdGhpcyBtb2R1bGUncyBVUkwuXG5jb25zdCBfX2Rpcm5hbWUgPSBwYXRoLmRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcblxuY29uc3QgU1RBQ0tfTkFNRSA9IEVWRU5UU19TVEFDS19OQU1FO1xuLy8gRXhpc3RpbmcgQ0ZOLW1hbmFnZWQgTGFtYmRhIGZ1bmN0aW9uIG5hbWUg4oCUIGRvIE5PVCByZW5hbWUgd2l0aG91dCBhIG1pZ3JhdGlvbiBwbGFuXG5jb25zdCBMQU1CREFfTkFNRSA9ICdwaXBlbGluZS1idWlsZGVyLWV2ZW50LWluZ2VzdGlvbic7XG5jb25zdCBQQUNLQUdFX05BTUUgPSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZXZlbnRzJztcblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBzZXR1cC1ldmVudHNgIGNvbW1hbmQgd2l0aCB0aGUgQ0xJIHByb2dyYW0uXG4gKlxuICogRGVwbG95cyBFdmVudEJyaWRnZSDihpIgU1FTIOKGkiBMYW1iZGEgaW5mcmFzdHJ1Y3R1cmUgZm9yIHBpcGVsaW5lIHJlcG9ydGluZy5cbiAqXG4gKiAxLiBEZXBsb3lzIENsb3VkRm9ybWF0aW9uIHN0YWNrIChydWxlICsgcXVldWUgKyBMYW1iZGEgc2hlbGwgKyBJQU0pXG4gKiAyLiBEb3dubG9hZHMgQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZXZlbnRzIGZyb20gbnBtIHJlZ2lzdHJ5XG4gKiAzLiBVcGxvYWRzIGhhbmRsZXIgY29kZSBkaXJlY3RseSB0byBMYW1iZGEgKG5vIFMzIG5lZWRlZClcbiAqXG4gKiBVc2VzIFBMQVRGT1JNX0JBU0VfVVJMIGZyb20gZW52aXJvbm1lbnQgKHNhbWUgYXMgYWxsIG90aGVyIGNvbW1hbmRzKS5cbiAqIElkZW1wb3RlbnQg4oCUIHJ1bm5pbmcgYWdhaW4gdXBkYXRlcyB0aGUgc3RhY2sgYW5kIGNvZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cEV2ZW50cyhwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHdpdGhQcm9maWxlT3B0aW9uKFxuICAgIHdpdGhSZWdpb25PcHRpb24ocHJvZ3JhbVxuICAgICAgLmNvbW1hbmQoJ3NldHVwLWV2ZW50cycpXG4gICAgICAuZGVzY3JpcHRpb24oJ0RlcGxveSBFdmVudEJyaWRnZSBldmVudCBpbmdlc3Rpb24gaW5mcmFzdHJ1Y3R1cmUgZm9yIHBpcGVsaW5lIHJlcG9ydGluZycpXG4gICAgICAub3B0aW9uKCctLXBhY2thZ2UtdmVyc2lvbiA8dmVyc2lvbj4nLCAncGlwZWxpbmUtZXZlbnRzIHBhY2thZ2UgdmVyc2lvbiAoZGVmYXVsdDogbGF0ZXN0KScpXG4gICAgICAub3B0aW9uKCctdSwgLS1pZGVudGlmaWVyIDxpZGVudGlmaWVyPicsICdVc2VybmFtZSBvciBlbWFpbCB0byBtaW50IGEgdG9rZW4gd2hlbiBQTEFURk9STV9UT0tFTiBpcyB1bnNldCAoZm9yIGRlcml2aW5nIHRoZSBzZWNyZXQgbmFtZSknKVxuICAgICAgLm9wdGlvbignLXAsIC0tcGFzc3dvcmQgPHBhc3N3b3JkPicsICdMb2dpbiBwYXNzd29yZCAodXNlZCB3aXRoIC0taWRlbnRpZmllciknKSksXG4gIClcbiAgICAub3B0aW9uKCctLXNjb3BlZC1pbmdlc3QnLCAnUG9pbnQgdGhlIGluZ2VzdGlvbiBMYW1iZGEgYXQgdGhlIGRlZGljYXRlZCBsZWFzdC1wcml2aWxlZ2UgcmVwb3J0aW5nLWluZ2VzdCBzZWNyZXQg4oCUIHRoZSBzZXJ2aWNlLWFjY291bnQga2V5IHByb3Zpc2lvbmVkIGJ5IGBzdG9yZS10b2tlbiAtLXNjb3BlIHJlcG9ydGluZzppbmdlc3QgLS1zY2hlZHVsZWAuIFRoZSByZXBvcnRpbmcgc2VydmljZSBhbHdheXMgcmVxdWlyZXMgdGhlIGByZXBvcnRpbmc6aW5nZXN0YCBzY29wZSBvbiBQT1NUIC9yZXBvcnRzL2V2ZW50cywgc28gd2l0aG91dCB0aGF0IHNlY3JldCB0aGUgTGFtYmRhIDQwM3MuJylcbiAgICAub3B0aW9uKCctLXdpdGgtZG9yYScsICdFbmFibGUgRE9SQSBsZWFkLXRpbWUgZW5yaWNobWVudCBpbiB0aGUgaW5nZXN0aW9uIExhbWJkYTogaXQgcmVzb2x2ZXMgY29tbWl0IHRpbWVzdGFtcHMgaW4tYWNjb3VudCAoQ29kZUNvbW1pdCAvIHRoZSBvcmcgZ2l0aHViLXRva2VuIHNlY3JldCAvIENvZGVDb25uZWN0aW9ucykuIE9mZiBieSBkZWZhdWx0IOKAlCBleHRyYSBTQ00vc2VjcmV0IGNvc3QuIEVuYWJsZSBvbmx5IGZvciBvcmdzIHdpdGggdGhlIGFkdmFuY2VkX3JlcG9ydGluZyBhZGQtb247IHJlLXJ1biBzZXR1cC1ldmVudHMgdG8gdG9nZ2xlIGFmdGVyIHB1cmNoYXNlLicpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoJ1NldHVwIEV2ZW50IEluZ2VzdGlvbicpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZWdpb24gPSByZXNvbHZlQXdzUmVnaW9uKG9wdGlvbnMucmVnaW9uKTtcbiAgICAgICAgLy8gSG9ub3IgLS1wcm9maWxlIGZvciB0aGUgU0RLIExhbWJkYS9DbG91ZEZvcm1hdGlvbiBjbGllbnRzIGJlbG93LiBUaGVcbiAgICAgICAgLy8gYGNsb3VkZm9ybWF0aW9uIGRlcGxveWAgQ0xJIGNhbGwgYWxyZWFkeSBnZXRzIC0tcHJvZmlsZTsgd2l0aG91dCB0aGlzIHRoZVxuICAgICAgICAvLyBTREsgY2xpZW50cyBoaXQgdGhlIERFRkFVTFQgYWNjb3VudCDihpIgZGVwbG95IGFuZCBjb2RlLXVwZGF0ZS9vdXRwdXRzXG4gICAgICAgIC8vIHRhcmdldCBkaWZmZXJlbnQgYWNjb3VudHMgKHNpbGVudCBzcGxpdC1icmFpbikuXG4gICAgICAgIGFwcGx5QXdzUHJvZmlsZShvcHRpb25zLnByb2ZpbGUpO1xuXG4gICAgICAgIGNvbnN0IHBsYXRmb3JtVXJsID0gcHJvY2Vzcy5lbnYuUExBVEZPUk1fQkFTRV9VUkw7XG4gICAgICAgIGlmICghcGxhdGZvcm1VcmwpIHtcbiAgICAgICAgICBwcmludEVycm9yKCdQTEFURk9STV9CQVNFX1VSTCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyByZXF1aXJlZCcpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUExBVEZPUk1fQkFTRV9VUkwgbm90IHNldCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVyaXZlIHRoZSBzZWNyZXQgcGF0aCBmcm9tIHRoZSBwbGF0Zm9ybSB0b2tlbiAodGhlIG9uZSBpbml0LXBsYXRmb3JtLnNoXG4gICAgICAgIC8vIG1pbnRlZCkgd2hlbiBQTEFURk9STV9TRUNSRVRfTkFNRSBpc24ndCBzZXQg4oCUIG1hdGNoaW5nIHN0b3JlLXRva2VuLCB3aGljaFxuICAgICAgICAvLyBXUk9URSB0aGUgc2VjcmV0IGF0IHRoZSBzYW1lIGRlcml2ZWQgcGF0aC4gTG9ncyBpbiB3aXRoXG4gICAgICAgIC8vIC0tZW1haWwvLS1wYXNzd29yZCBvciBQTEFURk9STV9JREVOVElGSUVSL1BMQVRGT1JNX1BBU1NXT1JEIGlmIG5vIHRva2VuIHlldC5cbiAgICAgICAgLy8gV2l0aCAtLXNjb3BlZC1pbmdlc3QsIHBvaW50IGF0IHRoZSBkZWRpY2F0ZWQgcmVwb3J0aW5nLWluZ2VzdCBzZWNyZXQg4oCUXG4gICAgICAgIC8vIGEgc2VydmljZS1hY2NvdW50IGtleSBzY29wZWQgdG8gZXhhY3RseSBgcmVwb3J0aW5nOmluZ2VzdGAgYW5kIG5vdGhpbmdcbiAgICAgICAgLy8gZWxzZSDigJQgaW5zdGVhZCBvZiB0aGUgb3JnJ3MgZnVsbC1wcml2aWxlZ2UgcGxhdGZvcm0gY3JlZGVudGlhbC4gUHJvdmlzaW9uXG4gICAgICAgIC8vIGl0IHdpdGggYHN0b3JlLXRva2VuIC0tc2NvcGUgcmVwb3J0aW5nOmluZ2VzdGAuXG4gICAgICAgIGxldCBzZWNyZXROYW1lID0gYXdhaXQgcmVzb2x2ZVBsYXRmb3JtU2VjcmV0TmFtZShvcHRpb25zKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuc2NvcGVkSW5nZXN0KSB7XG4gICAgICAgICAgc2VjcmV0TmFtZSA9IHNlY3JldE5hbWUucmVwbGFjZSgvXFwvcGxhdGZvcm0kLywgJy9yZXBvcnRpbmctaW5nZXN0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBwcmludEluZm8oJ1BhcmFtZXRlcnMnLCB7XG4gICAgICAgICAgc3RhY2s6IFNUQUNLX05BTUUsXG4gICAgICAgICAgcmVnaW9uLFxuICAgICAgICAgIHBsYXRmb3JtVXJsLFxuICAgICAgICAgIHNlY3JldE5hbWUsXG4gICAgICAgICAgcGFja2FnZVZlcnNpb246IG9wdGlvbnMucGFja2FnZVZlcnNpb24gfHwgJ2xhdGVzdCcsXG4gICAgICAgICAgZG9yYTogb3B0aW9ucy53aXRoRG9yYSA/ICdlbmFibGVkIChjb21taXQgZW5yaWNobWVudCknIDogJ2Rpc2FibGVkJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU3RlcCAxOiBEZXBsb3kgQ2xvdWRGb3JtYXRpb24gKGluZnJhIG9ubHkg4oCUIExhbWJkYSBnZXRzIHBsYWNlaG9sZGVyIGNvZGUpXG4gICAgICAgIHByaW50U2VjdGlvbignRGVwbG95IEluZnJhc3RydWN0dXJlJyk7XG5cbiAgICAgICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL3RlbXBsYXRlcy9ldmVudHMtc3RhY2suanNvbicpO1xuXG4gICAgICAgIGNvbnN0IGNmbkFyZ3MgPSBbXG4gICAgICAgICAgJ2Nsb3VkZm9ybWF0aW9uJywgJ2RlcGxveScsXG4gICAgICAgICAgJy0tc3RhY2stbmFtZScsIFNUQUNLX05BTUUsXG4gICAgICAgICAgJy0tdGVtcGxhdGUtZmlsZScsIHRlbXBsYXRlUGF0aCxcbiAgICAgICAgICAnLS1wYXJhbWV0ZXItb3ZlcnJpZGVzJyxcbiAgICAgICAgICBgUGxhdGZvcm1CYXNlVXJsPSR7cGxhdGZvcm1Vcmx9YCxcbiAgICAgICAgICBgUGxhdGZvcm1TZWNyZXROYW1lPSR7c2VjcmV0TmFtZX1gLFxuICAgICAgICAgIGBEb3JhRW5hYmxlZD0ke29wdGlvbnMud2l0aERvcmEgPyAndHJ1ZScgOiAnZmFsc2UnfWAsXG4gICAgICAgICAgJy0tY2FwYWJpbGl0aWVzJywgJ0NBUEFCSUxJVFlfTkFNRURfSUFNJyxcbiAgICAgICAgICAnLS1uby1mYWlsLW9uLWVtcHR5LWNoYW5nZXNldCcsXG4gICAgICAgICAgJy0tcmVnaW9uJywgcmVnaW9uLFxuICAgICAgICBdO1xuICAgICAgICBpZiAob3B0aW9ucy5wcm9maWxlKSBjZm5BcmdzLnB1c2goJy0tcHJvZmlsZScsIG9wdGlvbnMucHJvZmlsZSk7XG5cbiAgICAgICAgZXhlY0ZpbGVTeW5jKCdhd3MnLCBjZm5BcmdzLCB7IHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG5cbiAgICAgICAgcHJpbnRTdWNjZXNzKCdJbmZyYXN0cnVjdHVyZSBkZXBsb3llZCcpO1xuXG4gICAgICAgIC8vIFN0ZXAgMjogRG93bmxvYWQgaGFuZGxlciBmcm9tIHJlZ2lzdHJ5IGFuZCB1cGxvYWQgdG8gTGFtYmRhXG4gICAgICAgIHByaW50U2VjdGlvbignRGVwbG95IExhbWJkYSBDb2RlJyk7XG5cbiAgICAgICAgY29uc3QgdG1wRGlyID0gZnMubWtkdGVtcFN5bmMocGF0aC5qb2luKG9zLnRtcGRpcigpLCAnZXZlbnQtaW5nZXN0aW9uLScpKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHZlcnNpb25TcGVjID0gb3B0aW9ucy5wYWNrYWdlVmVyc2lvbiA/IGAke1BBQ0tBR0VfTkFNRX1AJHtvcHRpb25zLnBhY2thZ2VWZXJzaW9ufWAgOiBQQUNLQUdFX05BTUU7XG4gICAgICAgICAgcHJpbnRJbmZvKCdJbnN0YWxsaW5nIGZyb20gcmVnaXN0cnknLCB7IHBhY2thZ2U6IHZlcnNpb25TcGVjIH0pO1xuXG4gICAgICAgICAgLy8gSXNvbGF0ZSB0aGUgbnBtIGNhY2hlIGluc2lkZSB0aGUgdGVtcCBkaXIgc28gdGhlIGRlcGxveSBuZXZlciBkZXBlbmRzIG9uXG4gICAgICAgICAgLy8gKG9yIHRyaXBzIG92ZXIpIGEgbWlzY29uZmlndXJlZCBzaGFyZWQgfi8ubnBtIGNhY2hlIOKAlCBlLmcuIEVBQ0NFUy9FRVhJU1RcbiAgICAgICAgICAvLyBsZWZ0IGJlaGluZCBieSBhIHByaW9yIGBzdWRvIG5wbWAgcnVuLiBNaXJyb3JzIHRoZSB0b2tlbi1yZW5ldyBoYW5kbGVyLlxuICAgICAgICAgIGV4ZWNGaWxlU3luYygnbnBtJywgWydpbnN0YWxsJywgJy0tcHJlZml4JywgdG1wRGlyLCAnLS1uby1hdWRpdCcsICctLW5vLWZ1bmQnLCB2ZXJzaW9uU3BlY10sIHtcbiAgICAgICAgICAgIHN0ZGlvOiAncGlwZScsXG4gICAgICAgICAgICBlbnY6IHsgLi4ucHJvY2Vzcy5lbnYsIG5wbV9jb25maWdfY2FjaGU6IHBhdGguam9pbih0bXBEaXIsICcubnBtLWNhY2hlJykgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IGhhbmRsZXJTcmMgPSBwYXRoLmpvaW4odG1wRGlyLCAnbm9kZV9tb2R1bGVzJywgUEFDS0FHRV9OQU1FLCAnbGliJywgJ2luZGV4LmpzJyk7XG4gICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGhhbmRsZXJTcmMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhhbmRsZXIgbm90IGZvdW5kIGF0ICR7aGFuZGxlclNyY30uIEVuc3VyZSB0aGUgcGFja2FnZSBpcyBwdWJsaXNoZWQuYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gR2V0IHZlcnNpb24gZnJvbSBpbnN0YWxsZWQgcGFja2FnZVxuICAgICAgICAgIGNvbnN0IHBrZ0pzb25QYXRoID0gcGF0aC5qb2luKHRtcERpciwgJ25vZGVfbW9kdWxlcycsIFBBQ0tBR0VfTkFNRSwgJ3BhY2thZ2UuanNvbicpO1xuICAgICAgICAgIGNvbnN0IHBrZ0pzb24gPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwa2dKc29uUGF0aCwgJ3V0Zi04JykpO1xuICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSBwa2dKc29uLnZlcnNpb24gfHwgJ3Vua25vd24nO1xuXG4gICAgICAgICAgLy8gcGlwZWxpbmUtZXZlbnRzIGlzIEVTTSAoXCJ0eXBlXCI6XCJtb2R1bGVcIiksIHNvIHRoZSBMYW1iZGEgZW50cnkgbXVzdCBiZVxuICAgICAgICAgIC8vIGluZGV4Lm1qcy4gQSBwbGFpbiBpbmRleC5qcyB3aXRoIG5vIHBhY2thZ2UuanNvbiBpbiB0aGUgemlwIGlzIGxvYWRlZCBhc1xuICAgICAgICAgIC8vIENvbW1vbkpTIGJ5IG5vZGVqczI2LnggYW5kIGZhaWxzIGF0IGluaXQgd2l0aCBcIkNhbm5vdCB1c2UgaW1wb3J0IHN0YXRlbWVudFxuICAgICAgICAgIC8vIG91dHNpZGUgYSBtb2R1bGVcIi4gVGhlIC5tanMgZXh0ZW5zaW9uIGZvcmNlcyBFU007IEhhbmRsZXIgc3RheXNcbiAgICAgICAgICAvLyBpbmRleC5oYW5kbGVyICh0aGUgcnVudGltZSByZXNvbHZlcyB0aGUgLm1qcyBmaWxlKS4gbGliL2luZGV4LmpzIGlzIGFcbiAgICAgICAgICAvLyBzZWxmLWNvbnRhaW5lZCBidW5kbGUgKG5vIHJlbGF0aXZlIGltcG9ydHMpLCBzbyB0aGUgc2luZ2xlIGZpbGUgc3VmZmljZXMuXG4gICAgICAgICAgY29uc3QgbWpzUGF0aCA9IHBhdGguam9pbih0bXBEaXIsICdpbmRleC5tanMnKTtcbiAgICAgICAgICBmcy5jb3B5RmlsZVN5bmMoaGFuZGxlclNyYywgbWpzUGF0aCk7XG4gICAgICAgICAgY29uc3QgemlwUGF0aCA9IHBhdGguam9pbih0bXBEaXIsICdpbmRleC56aXAnKTtcbiAgICAgICAgICBleGVjRmlsZVN5bmMoJ3ppcCcsIFsnLWonLCB6aXBQYXRoLCAnaW5kZXgubWpzJ10sIHsgY3dkOiB0bXBEaXIsIHN0ZGlvOiAncGlwZScgfSk7XG5cbiAgICAgICAgICAvLyBVcGxvYWQgZGlyZWN0bHkgdG8gTGFtYmRhIHZpYSBTREsgKG5vIFMzIG5lZWRlZClcbiAgICAgICAgICBwcmludEluZm8oJ1VwbG9hZGluZyBjb2RlIHRvIExhbWJkYScsIHsgZnVuY3Rpb246IExBTUJEQV9OQU1FLCB2ZXJzaW9uIH0pO1xuXG4gICAgICAgICAgY29uc3QgbGFtYmRhQ2xpZW50ID0gbmV3IExhbWJkYUNsaWVudCh7IHJlZ2lvbiB9KTtcbiAgICAgICAgICBhd2FpdCBsYW1iZGFDbGllbnQuc2VuZChuZXcgVXBkYXRlRnVuY3Rpb25Db2RlQ29tbWFuZCh7XG4gICAgICAgICAgICBGdW5jdGlvbk5hbWU6IExBTUJEQV9OQU1FLFxuICAgICAgICAgICAgWmlwRmlsZTogZnMucmVhZEZpbGVTeW5jKHppcFBhdGgpLFxuICAgICAgICAgIH0pKTtcblxuICAgICAgICAgIHByaW50U3VjY2VzcyhgTGFtYmRhIGNvZGUgZGVwbG95ZWQgKCR7UEFDS0FHRV9OQU1FfUAke3ZlcnNpb259KWApO1xuXG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgZnMucm1TeW5jKHRtcERpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RlcCAzOiBTaG93IG91dHB1dHMgdmlhIFNES1xuICAgICAgICBjb25zdCBjZm5DbGllbnQgPSBuZXcgQ2xvdWRGb3JtYXRpb25DbGllbnQoeyByZWdpb24gfSk7XG4gICAgICAgIGNvbnN0IGRlc2NyaWJlUmVzdWx0ID0gYXdhaXQgY2ZuQ2xpZW50LnNlbmQobmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7IFN0YWNrTmFtZTogU1RBQ0tfTkFNRSB9KSk7XG4gICAgICAgIGNvbnN0IG91dHB1dHMgPSBkZXNjcmliZVJlc3VsdC5TdGFja3M/LlswXT8uT3V0cHV0cyA/PyBbXTtcbiAgICAgICAgY29uc3Qgb3V0cHV0TWFwID0gT2JqZWN0LmZyb21FbnRyaWVzKG91dHB1dHMubWFwKG8gPT4gW28uT3V0cHV0S2V5ID8/ICcnLCBvLk91dHB1dFZhbHVlID8/ICcnXSkpO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRTZWN0aW9uKCdFdmVudCBJbmdlc3Rpb24gUmVhZHknKTtcblxuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnU3RhY2snOiBTVEFDS19OQU1FLFxuICAgICAgICAgICdSZWdpb24nOiByZWdpb24sXG4gICAgICAgICAgJ1BsYXRmb3JtIFVSTCc6IHBsYXRmb3JtVXJsLFxuICAgICAgICAgICdMYW1iZGEnOiBvdXRwdXRNYXAuTGFtYmRhRnVuY3Rpb25Bcm4gfHwgTEFNQkRBX05BTUUsXG4gICAgICAgICAgJ0V2ZW50IFF1ZXVlJzogb3V0cHV0TWFwLkV2ZW50UXVldWVVcmwgfHwgJyhzZWUgQVdTIGNvbnNvbGUpJyxcbiAgICAgICAgICAnRGVhZCBMZXR0ZXIgUXVldWUnOiBvdXRwdXRNYXAuRGVhZExldHRlclF1ZXVlVXJsIHx8ICcoc2VlIEFXUyBjb25zb2xlKScsXG4gICAgICAgICAgJ0V2ZW50QnJpZGdlIFJ1bGUnOiBvdXRwdXRNYXAuRXZlbnRSdWxlTmFtZSB8fCAnKHNlZSBBV1MgY29uc29sZSknLFxuICAgICAgICAgICdTdGF0dXMnOiAn4pyTIERlcGxveWVkJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludFN1Y2Nlc3MoJ0V2ZW50QnJpZGdlIGV2ZW50IGluZ2VzdGlvbiBpcyBhY3RpdmUuJyk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHsgY29tbWFuZDogJ3NldHVwLWV2ZW50cycsIGV4ZWN1dGlvbklkLCBzdGFjazogU1RBQ0tfTkFNRSB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAtZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3NldHVwLWV2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0YsT0FBTyxFQUFFLFlBQVksRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRyxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFeEUsMERBQTBEO0FBQzFE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LENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgZXhlY0ZpbGVTeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBDbG91ZEZvcm1hdGlvbkNsaWVudCwgRGVzY3JpYmVTdGFja3NDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IExhbWJkYUNsaWVudCwgVXBkYXRlRnVuY3Rpb25Db2RlQ29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1sYW1iZGEnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBFVkVOVFNfU1RBQ0tfTkFNRSB9IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IGF1ZGl0TG9nIH0gZnJvbSAnLi4vdXRpbHMvYXVkaXQtbG9nLmpzJztcbmltcG9ydCB7IGFwcGx5QXdzUHJvZmlsZSwgcmVzb2x2ZUF3c1JlZ2lvbiB9IGZyb20gJy4uL3V0aWxzL2F3cy1lbnYuanMnO1xuaW1wb3J0IHsgcHJpbnRDb21tYW5kSGVhZGVyLCB3aXRoUHJvZmlsZU9wdGlvbiwgd2l0aFJlZ2lvbk9wdGlvbiB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludEVycm9yLCBwcmludEluZm8sIHByaW50S2V5VmFsdWUsIHByaW50U2VjdGlvbiwgcHJpbnRTdWNjZXNzIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcbmltcG9ydCB7IHJlc29sdmVQbGF0Zm9ybVNlY3JldE5hbWUgfSBmcm9tICcuLi91dGlscy9wbGF0Zm9ybS1zZWNyZXQuanMnO1xuXG4vLyBFU00gaGFzIG5vIF9fZGlybmFtZTsgZGVyaXZlIGl0IGZyb20gdGhpcyBtb2R1bGUncyBVUkwuXG5jb25zdCBfX2Rpcm5hbWUgPSBwYXRoLmRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcblxuY29uc3QgU1RBQ0tfTkFNRSA9IEVWRU5UU19TVEFDS19OQU1FO1xuLy8gRXhpc3RpbmcgQ0ZOLW1hbmFnZWQgTGFtYmRhIGZ1bmN0aW9uIG5hbWUg4oCUIGRvIE5PVCByZW5hbWUgd2l0aG91dCBhIG1pZ3JhdGlvbiBwbGFuXG5jb25zdCBMQU1CREFfTkFNRSA9ICdwaXBlbGluZS1idWlsZGVyLWV2ZW50LWluZ2VzdGlvbic7XG5jb25zdCBQQUNLQUdFX05BTUUgPSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZXZlbnRzJztcblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBzZXR1cC1ldmVudHNgIGNvbW1hbmQgd2l0aCB0aGUgQ0xJIHByb2dyYW0uXG4gKlxuICogRGVwbG95cyBFdmVudEJyaWRnZSDihpIgU1FTIOKGkiBMYW1iZGEgaW5mcmFzdHJ1Y3R1cmUgZm9yIHBpcGVsaW5lIHJlcG9ydGluZy5cbiAqXG4gKiAxLiBEZXBsb3lzIENsb3VkRm9ybWF0aW9uIHN0YWNrIChydWxlICsgcXVldWUgKyBMYW1iZGEgc2hlbGwgKyBJQU0pXG4gKiAyLiBEb3dubG9hZHMgQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZXZlbnRzIGZyb20gbnBtIHJlZ2lzdHJ5XG4gKiAzLiBVcGxvYWRzIGhhbmRsZXIgY29kZSBkaXJlY3RseSB0byBMYW1iZGEgKG5vIFMzIG5lZWRlZClcbiAqXG4gKiBVc2VzIFBMQVRGT1JNX0JBU0VfVVJMIGZyb20gZW52aXJvbm1lbnQgKHNhbWUgYXMgYWxsIG90aGVyIGNvbW1hbmRzKS5cbiAqIElkZW1wb3RlbnQg4oCUIHJ1bm5pbmcgYWdhaW4gdXBkYXRlcyB0aGUgc3RhY2sgYW5kIGNvZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cEV2ZW50cyhwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHdpdGhQcm9maWxlT3B0aW9uKFxuICAgIHdpdGhSZWdpb25PcHRpb24ocHJvZ3JhbVxuICAgICAgLmNvbW1hbmQoJ3NldHVwLWV2ZW50cycpXG4gICAgICAuZGVzY3JpcHRpb24oJ0RlcGxveSBFdmVudEJyaWRnZSBldmVudCBpbmdlc3Rpb24gaW5mcmFzdHJ1Y3R1cmUgZm9yIHBpcGVsaW5lIHJlcG9ydGluZycpXG4gICAgICAub3B0aW9uKCctLXBhY2thZ2UtdmVyc2lvbiA8dmVyc2lvbj4nLCAncGlwZWxpbmUtZXZlbnRzIHBhY2thZ2UgdmVyc2lvbiAoZGVmYXVsdDogbGF0ZXN0KScpXG4gICAgICAub3B0aW9uKCctdSwgLS1pZGVudGlmaWVyIDxpZGVudGlmaWVyPicsICdVc2VybmFtZSBvciBlbWFpbCB0byBtaW50IGEgdG9rZW4gd2hlbiBQTEFURk9STV9UT0tFTiBpcyB1bnNldCAoZm9yIGRlcml2aW5nIHRoZSBzZWNyZXQgbmFtZSknKVxuICAgICAgLm9wdGlvbignLXAsIC0tcGFzc3dvcmQgPHBhc3N3b3JkPicsICdMb2dpbiBwYXNzd29yZCAodXNlZCB3aXRoIC0taWRlbnRpZmllciknKSksXG4gIClcbiAgICAub3B0aW9uKCctLXNjb3BlZC1pbmdlc3QnLCAnUG9pbnQgdGhlIGluZ2VzdGlvbiBMYW1iZGEgYXQgdGhlIGRlZGljYXRlZCBsZWFzdC1wcml2aWxlZ2UgcmVwb3J0aW5nLWluZ2VzdCBzZWNyZXQg4oCUIHRoZSBzZXJ2aWNlLWFjY291bnQga2V5IHByb3Zpc2lvbmVkIGJ5IGBzdG9yZS10b2tlbiAtLXNjb3BlIHJlcG9ydGluZzppbmdlc3QgLS1zY2hlZHVsZWAuIFRoZSByZXBvcnRpbmcgc2VydmljZSBhbHdheXMgcmVxdWlyZXMgdGhlIGByZXBvcnRpbmc6aW5nZXN0YCBzY29wZSBvbiBQT1NUIC9yZXBvcnRzL2V2ZW50cywgc28gd2l0aG91dCB0aGF0IHNlY3JldCB0aGUgTGFtYmRhIDQwM3MuJylcbiAgICAub3B0aW9uKCctLXdpdGgtZG9yYScsICdFbmFibGUgRE9SQSBsZWFkLXRpbWUgZW5yaWNobWVudCBpbiB0aGUgaW5nZXN0aW9uIExhbWJkYTogaXQgcmVzb2x2ZXMgY29tbWl0IHRpbWVzdGFtcHMgaW4tYWNjb3VudCAoQ29kZUNvbW1pdCAvIHRoZSBvcmcgZ2l0aHViLXRva2VuIHNlY3JldCAvIENvZGVDb25uZWN0aW9ucykuIE9mZiBieSBkZWZhdWx0IOKAlCBleHRyYSBTQ00vc2VjcmV0IGNvc3QuIEVuYWJsZSBvbmx5IGZvciBvcmdzIHdpdGggdGhlIGFkdmFuY2VkX3JlcG9ydGluZyBhZGQtb247IHJlLXJ1biBzZXR1cC1ldmVudHMgdG8gdG9nZ2xlIGFmdGVyIHB1cmNoYXNlLicpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoJ1NldHVwIEV2ZW50IEluZ2VzdGlvbicpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZWdpb24gPSByZXNvbHZlQXdzUmVnaW9uKG9wdGlvbnMucmVnaW9uKTtcbiAgICAgICAgLy8gSG9ub3IgLS1wcm9maWxlIGZvciB0aGUgU0RLIExhbWJkYS9DbG91ZEZvcm1hdGlvbiBjbGllbnRzIGJlbG93LiBUaGVcbiAgICAgICAgLy8gYGNsb3VkZm9ybWF0aW9uIGRlcGxveWAgQ0xJIGNhbGwgYWxyZWFkeSBnZXRzIC0tcHJvZmlsZTsgd2l0aG91dCB0aGlzIHRoZVxuICAgICAgICAvLyBTREsgY2xpZW50cyBoaXQgdGhlIERFRkFVTFQgYWNjb3VudCDihpIgZGVwbG95IGFuZCBjb2RlLXVwZGF0ZS9vdXRwdXRzXG4gICAgICAgIC8vIHRhcmdldCBkaWZmZXJlbnQgYWNjb3VudHMgKHNpbGVudCBzcGxpdC1icmFpbikuXG4gICAgICAgIGFwcGx5QXdzUHJvZmlsZShvcHRpb25zLnByb2ZpbGUpO1xuXG4gICAgICAgIGNvbnN0IHBsYXRmb3JtVXJsID0gcHJvY2Vzcy5lbnYuUExBVEZPUk1fQkFTRV9VUkw7XG4gICAgICAgIGlmICghcGxhdGZvcm1VcmwpIHtcbiAgICAgICAgICBwcmludEVycm9yKCdQTEFURk9STV9CQVNFX1VSTCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyByZXF1aXJlZCcpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUExBVEZPUk1fQkFTRV9VUkwgbm90IHNldCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVyaXZlIHRoZSBzZWNyZXQgcGF0aCBmcm9tIHRoZSBwbGF0Zm9ybSB0b2tlbiAodGhlIG9uZSBpbml0LXBsYXRmb3JtLnNoXG4gICAgICAgIC8vIG1pbnRlZCkgd2hlbiBQTEFURk9STV9TRUNSRVRfTkFNRSBpc24ndCBzZXQg4oCUIG1hdGNoaW5nIHN0b3JlLXRva2VuLCB3aGljaFxuICAgICAgICAvLyBXUk9URSB0aGUgc2VjcmV0IGF0IHRoZSBzYW1lIGRlcml2ZWQgcGF0aC4gTG9ncyBpbiB3aXRoXG4gICAgICAgIC8vIC0tZW1haWwvLS1wYXNzd29yZCBvciBQTEFURk9STV9JREVOVElGSUVSL1BMQVRGT1JNX1BBU1NXT1JEIGlmIG5vIHRva2VuIHlldC5cbiAgICAgICAgLy8gV2l0aCAtLXNjb3BlZC1pbmdlc3QsIHBvaW50IGF0IHRoZSBkZWRpY2F0ZWQgcmVwb3J0aW5nLWluZ2VzdCBzZWNyZXQg4oCUXG4gICAgICAgIC8vIGEgc2VydmljZS1hY2NvdW50IGtleSBzY29wZWQgdG8gZXhhY3RseSBgcmVwb3J0aW5nOmluZ2VzdGAgYW5kIG5vdGhpbmdcbiAgICAgICAgLy8gZWxzZSDigJQgaW5zdGVhZCBvZiB0aGUgb3JnJ3MgZnVsbC1wcml2aWxlZ2UgcGxhdGZvcm0gY3JlZGVudGlhbC4gUHJvdmlzaW9uXG4gICAgICAgIC8vIGl0IHdpdGggYHN0b3JlLXRva2VuIC0tc2NvcGUgcmVwb3J0aW5nOmluZ2VzdGAuXG4gICAgICAgIGxldCBzZWNyZXROYW1lID0gYXdhaXQgcmVzb2x2ZVBsYXRmb3JtU2VjcmV0TmFtZShvcHRpb25zKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuc2NvcGVkSW5nZXN0KSB7XG4gICAgICAgICAgc2VjcmV0TmFtZSA9IHNlY3JldE5hbWUucmVwbGFjZSgvXFwvcGxhdGZvcm0kLywgJy9yZXBvcnRpbmctaW5nZXN0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZWNvcmRlZCBiZWZvcmUgdGhlIGRlcGxveSAoYXMgc3RvcmUtdG9rZW4gZG9lcyBiZWZvcmUgaXRzIHdyaXRlKTogdGhlXG4gICAgICAgIC8vIG9wZXJhdG9yJ3MgaW50ZW50IHRvIHJlcG9pbnQgaW5nZXN0aW9uIGF0IGEgc2VjcmV0IGlzIHRoZSBzZW5zaXRpdmUgcGFydC5cbiAgICAgICAgYXVkaXRMb2coJ3NldHVwLWV2ZW50cycsIHtcbiAgICAgICAgICBleGVjdXRpb25JZCxcbiAgICAgICAgICBzdGFjazogU1RBQ0tfTkFNRSxcbiAgICAgICAgICByZWdpb24sXG4gICAgICAgICAgc2VjcmV0TmFtZSxcbiAgICAgICAgICBzY29wZWRJbmdlc3Q6IEJvb2xlYW4ob3B0aW9ucy5zY29wZWRJbmdlc3QpLFxuICAgICAgICAgIGRvcmE6IEJvb2xlYW4ob3B0aW9ucy53aXRoRG9yYSksXG4gICAgICAgICAgcGFja2FnZVZlcnNpb246IG9wdGlvbnMucGFja2FnZVZlcnNpb24gPz8gJ2xhdGVzdCcsXG4gICAgICAgICAgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlLFxuICAgICAgICB9KTtcblxuICAgICAgICBwcmludEluZm8oJ1BhcmFtZXRlcnMnLCB7XG4gICAgICAgICAgc3RhY2s6IFNUQUNLX05BTUUsXG4gICAgICAgICAgcmVnaW9uLFxuICAgICAgICAgIHBsYXRmb3JtVXJsLFxuICAgICAgICAgIHNlY3JldE5hbWUsXG4gICAgICAgICAgcGFja2FnZVZlcnNpb246IG9wdGlvbnMucGFja2FnZVZlcnNpb24gfHwgJ2xhdGVzdCcsXG4gICAgICAgICAgZG9yYTogb3B0aW9ucy53aXRoRG9yYSA/ICdlbmFibGVkIChjb21taXQgZW5yaWNobWVudCknIDogJ2Rpc2FibGVkJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU3RlcCAxOiBEZXBsb3kgQ2xvdWRGb3JtYXRpb24gKGluZnJhIG9ubHkg4oCUIExhbWJkYSBnZXRzIHBsYWNlaG9sZGVyIGNvZGUpXG4gICAgICAgIHByaW50U2VjdGlvbignRGVwbG95IEluZnJhc3RydWN0dXJlJyk7XG5cbiAgICAgICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL3RlbXBsYXRlcy9ldmVudHMtc3RhY2suanNvbicpO1xuXG4gICAgICAgIGNvbnN0IGNmbkFyZ3MgPSBbXG4gICAgICAgICAgJ2Nsb3VkZm9ybWF0aW9uJywgJ2RlcGxveScsXG4gICAgICAgICAgJy0tc3RhY2stbmFtZScsIFNUQUNLX05BTUUsXG4gICAgICAgICAgJy0tdGVtcGxhdGUtZmlsZScsIHRlbXBsYXRlUGF0aCxcbiAgICAgICAgICAnLS1wYXJhbWV0ZXItb3ZlcnJpZGVzJyxcbiAgICAgICAgICBgUGxhdGZvcm1CYXNlVXJsPSR7cGxhdGZvcm1Vcmx9YCxcbiAgICAgICAgICBgUGxhdGZvcm1TZWNyZXROYW1lPSR7c2VjcmV0TmFtZX1gLFxuICAgICAgICAgIGBEb3JhRW5hYmxlZD0ke29wdGlvbnMud2l0aERvcmEgPyAndHJ1ZScgOiAnZmFsc2UnfWAsXG4gICAgICAgICAgJy0tY2FwYWJpbGl0aWVzJywgJ0NBUEFCSUxJVFlfTkFNRURfSUFNJyxcbiAgICAgICAgICAnLS1uby1mYWlsLW9uLWVtcHR5LWNoYW5nZXNldCcsXG4gICAgICAgICAgJy0tcmVnaW9uJywgcmVnaW9uLFxuICAgICAgICBdO1xuICAgICAgICBpZiAob3B0aW9ucy5wcm9maWxlKSBjZm5BcmdzLnB1c2goJy0tcHJvZmlsZScsIG9wdGlvbnMucHJvZmlsZSk7XG5cbiAgICAgICAgZXhlY0ZpbGVTeW5jKCdhd3MnLCBjZm5BcmdzLCB7IHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG5cbiAgICAgICAgcHJpbnRTdWNjZXNzKCdJbmZyYXN0cnVjdHVyZSBkZXBsb3llZCcpO1xuXG4gICAgICAgIC8vIFN0ZXAgMjogRG93bmxvYWQgaGFuZGxlciBmcm9tIHJlZ2lzdHJ5IGFuZCB1cGxvYWQgdG8gTGFtYmRhXG4gICAgICAgIHByaW50U2VjdGlvbignRGVwbG95IExhbWJkYSBDb2RlJyk7XG5cbiAgICAgICAgY29uc3QgdG1wRGlyID0gZnMubWtkdGVtcFN5bmMocGF0aC5qb2luKG9zLnRtcGRpcigpLCAnZXZlbnQtaW5nZXN0aW9uLScpKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHZlcnNpb25TcGVjID0gb3B0aW9ucy5wYWNrYWdlVmVyc2lvbiA/IGAke1BBQ0tBR0VfTkFNRX1AJHtvcHRpb25zLnBhY2thZ2VWZXJzaW9ufWAgOiBQQUNLQUdFX05BTUU7XG4gICAgICAgICAgcHJpbnRJbmZvKCdJbnN0YWxsaW5nIGZyb20gcmVnaXN0cnknLCB7IHBhY2thZ2U6IHZlcnNpb25TcGVjIH0pO1xuXG4gICAgICAgICAgLy8gSXNvbGF0ZSB0aGUgbnBtIGNhY2hlIGluc2lkZSB0aGUgdGVtcCBkaXIgc28gdGhlIGRlcGxveSBuZXZlciBkZXBlbmRzIG9uXG4gICAgICAgICAgLy8gKG9yIHRyaXBzIG92ZXIpIGEgbWlzY29uZmlndXJlZCBzaGFyZWQgfi8ubnBtIGNhY2hlIOKAlCBlLmcuIEVBQ0NFUy9FRVhJU1RcbiAgICAgICAgICAvLyBsZWZ0IGJlaGluZCBieSBhIHByaW9yIGBzdWRvIG5wbWAgcnVuLiBNaXJyb3JzIHRoZSB0b2tlbi1yZW5ldyBoYW5kbGVyLlxuICAgICAgICAgIGV4ZWNGaWxlU3luYygnbnBtJywgWydpbnN0YWxsJywgJy0tcHJlZml4JywgdG1wRGlyLCAnLS1uby1hdWRpdCcsICctLW5vLWZ1bmQnLCB2ZXJzaW9uU3BlY10sIHtcbiAgICAgICAgICAgIHN0ZGlvOiAncGlwZScsXG4gICAgICAgICAgICBlbnY6IHsgLi4ucHJvY2Vzcy5lbnYsIG5wbV9jb25maWdfY2FjaGU6IHBhdGguam9pbih0bXBEaXIsICcubnBtLWNhY2hlJykgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IGhhbmRsZXJTcmMgPSBwYXRoLmpvaW4odG1wRGlyLCAnbm9kZV9tb2R1bGVzJywgUEFDS0FHRV9OQU1FLCAnbGliJywgJ2luZGV4LmpzJyk7XG4gICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGhhbmRsZXJTcmMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhhbmRsZXIgbm90IGZvdW5kIGF0ICR7aGFuZGxlclNyY30uIEVuc3VyZSB0aGUgcGFja2FnZSBpcyBwdWJsaXNoZWQuYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gR2V0IHZlcnNpb24gZnJvbSBpbnN0YWxsZWQgcGFja2FnZVxuICAgICAgICAgIGNvbnN0IHBrZ0pzb25QYXRoID0gcGF0aC5qb2luKHRtcERpciwgJ25vZGVfbW9kdWxlcycsIFBBQ0tBR0VfTkFNRSwgJ3BhY2thZ2UuanNvbicpO1xuICAgICAgICAgIGNvbnN0IHBrZ0pzb24gPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwa2dKc29uUGF0aCwgJ3V0Zi04JykpO1xuICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSBwa2dKc29uLnZlcnNpb24gfHwgJ3Vua25vd24nO1xuXG4gICAgICAgICAgLy8gcGlwZWxpbmUtZXZlbnRzIGlzIEVTTSAoXCJ0eXBlXCI6XCJtb2R1bGVcIiksIHNvIHRoZSBMYW1iZGEgZW50cnkgbXVzdCBiZVxuICAgICAgICAgIC8vIGluZGV4Lm1qcy4gQSBwbGFpbiBpbmRleC5qcyB3aXRoIG5vIHBhY2thZ2UuanNvbiBpbiB0aGUgemlwIGlzIGxvYWRlZCBhc1xuICAgICAgICAgIC8vIENvbW1vbkpTIGJ5IG5vZGVqczI2LnggYW5kIGZhaWxzIGF0IGluaXQgd2l0aCBcIkNhbm5vdCB1c2UgaW1wb3J0IHN0YXRlbWVudFxuICAgICAgICAgIC8vIG91dHNpZGUgYSBtb2R1bGVcIi4gVGhlIC5tanMgZXh0ZW5zaW9uIGZvcmNlcyBFU007IEhhbmRsZXIgc3RheXNcbiAgICAgICAgICAvLyBpbmRleC5oYW5kbGVyICh0aGUgcnVudGltZSByZXNvbHZlcyB0aGUgLm1qcyBmaWxlKS4gbGliL2luZGV4LmpzIGlzIGFcbiAgICAgICAgICAvLyBzZWxmLWNvbnRhaW5lZCBidW5kbGUgKG5vIHJlbGF0aXZlIGltcG9ydHMpLCBzbyB0aGUgc2luZ2xlIGZpbGUgc3VmZmljZXMuXG4gICAgICAgICAgY29uc3QgbWpzUGF0aCA9IHBhdGguam9pbih0bXBEaXIsICdpbmRleC5tanMnKTtcbiAgICAgICAgICBmcy5jb3B5RmlsZVN5bmMoaGFuZGxlclNyYywgbWpzUGF0aCk7XG4gICAgICAgICAgY29uc3QgemlwUGF0aCA9IHBhdGguam9pbih0bXBEaXIsICdpbmRleC56aXAnKTtcbiAgICAgICAgICBleGVjRmlsZVN5bmMoJ3ppcCcsIFsnLWonLCB6aXBQYXRoLCAnaW5kZXgubWpzJ10sIHsgY3dkOiB0bXBEaXIsIHN0ZGlvOiAncGlwZScgfSk7XG5cbiAgICAgICAgICAvLyBVcGxvYWQgZGlyZWN0bHkgdG8gTGFtYmRhIHZpYSBTREsgKG5vIFMzIG5lZWRlZClcbiAgICAgICAgICBwcmludEluZm8oJ1VwbG9hZGluZyBjb2RlIHRvIExhbWJkYScsIHsgZnVuY3Rpb246IExBTUJEQV9OQU1FLCB2ZXJzaW9uIH0pO1xuXG4gICAgICAgICAgY29uc3QgbGFtYmRhQ2xpZW50ID0gbmV3IExhbWJkYUNsaWVudCh7IHJlZ2lvbiB9KTtcbiAgICAgICAgICBhd2FpdCBsYW1iZGFDbGllbnQuc2VuZChuZXcgVXBkYXRlRnVuY3Rpb25Db2RlQ29tbWFuZCh7XG4gICAgICAgICAgICBGdW5jdGlvbk5hbWU6IExBTUJEQV9OQU1FLFxuICAgICAgICAgICAgWmlwRmlsZTogZnMucmVhZEZpbGVTeW5jKHppcFBhdGgpLFxuICAgICAgICAgIH0pKTtcblxuICAgICAgICAgIHByaW50U3VjY2VzcyhgTGFtYmRhIGNvZGUgZGVwbG95ZWQgKCR7UEFDS0FHRV9OQU1FfUAke3ZlcnNpb259KWApO1xuXG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgZnMucm1TeW5jKHRtcERpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RlcCAzOiBTaG93IG91dHB1dHMgdmlhIFNES1xuICAgICAgICBjb25zdCBjZm5DbGllbnQgPSBuZXcgQ2xvdWRGb3JtYXRpb25DbGllbnQoeyByZWdpb24gfSk7XG4gICAgICAgIGNvbnN0IGRlc2NyaWJlUmVzdWx0ID0gYXdhaXQgY2ZuQ2xpZW50LnNlbmQobmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7IFN0YWNrTmFtZTogU1RBQ0tfTkFNRSB9KSk7XG4gICAgICAgIGNvbnN0IG91dHB1dHMgPSBkZXNjcmliZVJlc3VsdC5TdGFja3M/LlswXT8uT3V0cHV0cyA/PyBbXTtcbiAgICAgICAgY29uc3Qgb3V0cHV0TWFwID0gT2JqZWN0LmZyb21FbnRyaWVzKG91dHB1dHMubWFwKG8gPT4gW28uT3V0cHV0S2V5ID8/ICcnLCBvLk91dHB1dFZhbHVlID8/ICcnXSkpO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRTZWN0aW9uKCdFdmVudCBJbmdlc3Rpb24gUmVhZHknKTtcblxuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnU3RhY2snOiBTVEFDS19OQU1FLFxuICAgICAgICAgICdSZWdpb24nOiByZWdpb24sXG4gICAgICAgICAgJ1BsYXRmb3JtIFVSTCc6IHBsYXRmb3JtVXJsLFxuICAgICAgICAgICdMYW1iZGEnOiBvdXRwdXRNYXAuTGFtYmRhRnVuY3Rpb25Bcm4gfHwgTEFNQkRBX05BTUUsXG4gICAgICAgICAgJ0V2ZW50IFF1ZXVlJzogb3V0cHV0TWFwLkV2ZW50UXVldWVVcmwgfHwgJyhzZWUgQVdTIGNvbnNvbGUpJyxcbiAgICAgICAgICAnRGVhZCBMZXR0ZXIgUXVldWUnOiBvdXRwdXRNYXAuRGVhZExldHRlclF1ZXVlVXJsIHx8ICcoc2VlIEFXUyBjb25zb2xlKScsXG4gICAgICAgICAgJ0V2ZW50QnJpZGdlIFJ1bGUnOiBvdXRwdXRNYXAuRXZlbnRSdWxlTmFtZSB8fCAnKHNlZSBBV1MgY29uc29sZSknLFxuICAgICAgICAgICdTdGF0dXMnOiAn4pyTIERlcGxveWVkJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludFN1Y2Nlc3MoJ0V2ZW50QnJpZGdlIGV2ZW50IGluZ2VzdGlvbiBpcyBhY3RpdmUuJyk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHsgY29tbWFuZDogJ3NldHVwLWV2ZW50cycsIGV4ZWN1dGlvbklkLCBzdGFjazogU1RBQ0tfTkFNRSB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
|
|
@@ -68,6 +68,7 @@ export declare function printStoredKey(r: {
|
|
|
68
68
|
* PLATFORM_PASSWORD=*** pipeline-manager infra store-token --schedule --region us-east-1 # + daily rotation
|
|
69
69
|
* PLATFORM_PASSWORD=*** pipeline-manager infra store-token --scope reporting:ingest --schedule
|
|
70
70
|
* PLATFORM_PASSWORD=*** pipeline-manager infra store-token --scope registry:push --schedule
|
|
71
|
+
* PLATFORM_PASSWORD=*** pipeline-manager infra store-token --scope pipeline_registry:write --schedule
|
|
71
72
|
* pipeline-manager infra store-token --dry-run
|
|
72
73
|
* pipeline-manager infra store-token -u admin -p '***' --region us-east-1
|
|
73
74
|
* ```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store-token.d.ts","sourceRoot":"","sources":["../../src/commands/store-token.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"store-token.d.ts","sourceRoot":"","sources":["../../src/commands/store-token.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AASxD,OAAO,EAAuD,KAAK,cAAc,EAAE,MAAM,6BAA6B,CAAC;AA0KvH,iDAAiD;AACjD,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAgBzE;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAcnH;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,cAAc,EAC3B,QAAQ,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,GACtD,OAAO,CAAC,IAAI,CAAC,CAcf;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,CAAC,EAAE;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,cAAc,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC,GAAG,IAAI,CA6CP;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuKjD"}
|