projen-pipelines 0.0.2 → 0.0.3

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.
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.GitHubEngine = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const workflows_model_1 = require("projen/lib/github/workflows-model");
7
+ const base_1 = require("./base");
8
+ class GitHubEngine extends base_1.BaseEngine {
9
+ constructor(app, props, pipeline) {
10
+ super(app, props, pipeline);
11
+ this.deploymentStages = [];
12
+ this.deploymentWorkflow = this.app.github.addWorkflow('deploy');
13
+ this.deploymentWorkflow.on({
14
+ push: {
15
+ branches: ['main'], // TODO use defaultReleaseBranch
16
+ },
17
+ workflowDispatch: {},
18
+ });
19
+ }
20
+ createSynth(options) {
21
+ const steps = [{
22
+ name: 'Checkout',
23
+ uses: 'actions/checkout@v2',
24
+ env: {
25
+ CI: 'true',
26
+ },
27
+ }];
28
+ if (this.props.githubConfig?.awsRoleArnForSynth) {
29
+ steps.push({
30
+ name: 'AWS Credentials',
31
+ uses: 'aws-actions/configure-aws-credentials@master',
32
+ with: {
33
+ 'role-to-assume': this.props.githubConfig.awsRoleArnForSynth,
34
+ 'role-session-name': 'GitHubAction',
35
+ 'aws-region': 'us-east-1',
36
+ },
37
+ });
38
+ }
39
+ steps.push(...options.commands.map(cmd => ({
40
+ run: cmd,
41
+ })));
42
+ this.deploymentWorkflow.addJob('synth', {
43
+ name: 'Synth CDK application',
44
+ runsOn: ['ubuntu-latest'],
45
+ permissions: { idToken: workflows_model_1.JobPermission.WRITE, contents: workflows_model_1.JobPermission.READ },
46
+ steps,
47
+ });
48
+ }
49
+ createAssetUpload(options) {
50
+ this.deploymentWorkflow.addJob('assetUpload', {
51
+ name: 'Publish assets to AWS',
52
+ needs: ['synth'],
53
+ runsOn: ['ubuntu-latest'],
54
+ permissions: { idToken: workflows_model_1.JobPermission.WRITE, contents: workflows_model_1.JobPermission.READ },
55
+ steps: [{
56
+ name: 'Checkout',
57
+ uses: 'actions/checkout@v2',
58
+ }, {
59
+ name: 'AWS Credentials',
60
+ uses: 'aws-actions/configure-aws-credentials@master',
61
+ with: {
62
+ 'role-to-assume': this.props.githubConfig?.awsRoleArnForAssetPublishing ?? this.props.githubConfig?.defaultAwsRoleArn,
63
+ 'role-session-name': 'GitHubAction',
64
+ 'aws-region': 'us-east-1',
65
+ },
66
+ },
67
+ ...options.commands.map(cmd => ({
68
+ run: cmd,
69
+ }))],
70
+ });
71
+ }
72
+ createDeployment(options) {
73
+ this.deploymentWorkflow.addJob(`deploy-${options.stageName}`, {
74
+ name: `Deploy stage ${options.stageName} to AWS`,
75
+ needs: this.deploymentStages.length > 0 ? ['assetUpload', `deploy-${this.deploymentStages.at(-1)}`] : ['assetUpload'],
76
+ runsOn: ['ubuntu-latest'],
77
+ permissions: { idToken: workflows_model_1.JobPermission.WRITE, contents: workflows_model_1.JobPermission.READ },
78
+ steps: [{
79
+ name: 'Checkout',
80
+ uses: 'actions/checkout@v2',
81
+ }, {
82
+ name: 'AWS Credentials',
83
+ uses: 'aws-actions/configure-aws-credentials@master',
84
+ with: {
85
+ 'role-to-assume': this.props.githubConfig?.awsRoleArnForDeployment?.[options.stageName] ?? this.props.githubConfig?.defaultAwsRoleArn,
86
+ 'role-session-name': 'GitHubAction',
87
+ 'aws-region': options.env.region,
88
+ },
89
+ },
90
+ ...options.commands.map(cmd => ({
91
+ run: cmd,
92
+ }))],
93
+ });
94
+ this.deploymentStages.push(options.stageName);
95
+ }
96
+ }
97
+ _a = JSII_RTTI_SYMBOL_1;
98
+ GitHubEngine[_a] = { fqn: "projen-pipelines.GitHubEngine", version: "0.0.3" };
99
+ exports.GitHubEngine = GitHubEngine;
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2VuZ2luZS9naXRodWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQSx1RUFBMkU7QUFDM0UsaUNBQW9HO0FBZ0JwRyxNQUFhLFlBQWEsU0FBUSxpQkFBVTtJQUsxQyxZQUFZLEdBQStCLEVBQUUsS0FBeUIsRUFBRSxRQUFxQjtRQUMzRixLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUh0QixxQkFBZ0IsR0FBYSxFQUFFLENBQUM7UUFLdEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDO1lBQ3pCLElBQUksRUFBRTtnQkFDSixRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxnQ0FBZ0M7YUFDckQ7WUFDRCxnQkFBZ0IsRUFBRSxFQUFFO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxXQUFXLENBQUMsT0FBMEI7UUFDM0MsTUFBTSxLQUFLLEdBQWMsQ0FBQztnQkFDeEIsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLElBQUksRUFBRSxxQkFBcUI7Z0JBQzNCLEdBQUcsRUFBRTtvQkFDSCxFQUFFLEVBQUUsTUFBTTtpQkFDWDthQUNGLENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLEVBQUU7WUFDL0MsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDVCxJQUFJLEVBQUUsaUJBQWlCO2dCQUN2QixJQUFJLEVBQUUsOENBQThDO2dCQUNwRCxJQUFJLEVBQUU7b0JBQ0osZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsa0JBQWtCO29CQUM1RCxtQkFBbUIsRUFBRSxjQUFjO29CQUNu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T0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNO3FCQUNqQztpQkFDRjtnQkFDRCxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDOUIsR0FBRyxFQUFFLEdBQUc7aUJBQ1QsQ0FBQyxDQUFDLENBQUM7U0FDTCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoRCxDQUFDOzs7O0FBakdVLG9DQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXdzY2RrIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IEdpdGh1YldvcmtmbG93IH0gZnJvbSAncHJvamVuL2xpYi9naXRodWInO1xuaW1wb3J0IHsgSm9iUGVybWlzc2lvbiwgSm9iU3RlcCB9IGZyb20gJ3Byb2plbi9saWIvZ2l0aHViL3dvcmtmbG93cy1tb2RlbCc7XG5pbXBvcnQgeyBBc3NldFVwbG9hZFN0YWdlT3B0aW9ucywgQmFzZUVuZ2luZSwgRGVwbG95U3RhZ2VPcHRpb25zLCBTeW50aFN0YWdlT3B0aW9ucyB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgeyBDREtQaXBlbGluZSwgQ0RLUGlwZWxpbmVPcHRpb25zIH0gZnJvbSAnLi4vcGlwZWxpbmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJvbGVNYXAge1xuICByZWFkb25seSBmZWF0dXJlPzogc3RyaW5nO1xuICByZWFkb25seSBkZXY/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByb2Q/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2l0aHViRW5naW5lQ29uZmlnIHtcbiAgcmVhZG9ubHkgZGVmYXVsdEF3c1JvbGVBcm4/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGF3c1JvbGVBcm5Gb3JTeW50aD86IHN0cmluZztcbiAgcmVhZG9ubHkgYXdzUm9sZUFybkZvckFzc2V0UHVibGlzaGluZz86IHN0cmluZztcbiAgcmVhZG9ubHkgYXdzUm9sZUFybkZvckRlcGxveW1lbnQ/OiBSb2xlTWFwO1xufVxuXG5leHBvcnQgY2xhc3MgR2l0SHViRW5naW5lIGV4dGVuZHMgQmFzZUVuZ2luZSB7XG5cbiAgcHJpdmF0ZSBkZXBsb3ltZW50V29ya2Zsb3c6IEdpdGh1YldvcmtmbG93O1xuICBwcml2YXRlIGRlcGxveW1lbnRTdGFnZXM6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3RydWN0b3IoYXBwOiBhd3NjZGsuQXdzQ2RrVHlwZVNjcmlwdEFwcCwgcHJvcHM6IENES1BpcGVsaW5lT3B0aW9ucywgcGlwZWxpbmU6IENES1BpcGVsaW5lKSB7XG4gICAgc3VwZXIoYXBwLCBwcm9wcywgcGlwZWxpbmUpO1xuXG4gICAgdGhpcy5kZXBsb3ltZW50V29ya2Zsb3cgPSB0aGlzLmFwcC5naXRodWIhLmFkZFdvcmtmbG93KCdkZXBsb3knKTtcbiAgICB0aGlzLmRlcGxveW1lbnRXb3JrZmxvdy5vbih7XG4gICAgICBwdXNoOiB7XG4gICAgICAgIGJyYW5jaGVzOiBbJ21haW4nXSwgLy8gVE9ETyB1c2UgZGVmYXVsdFJlbGVhc2VCcmFuY2hcbiAgICAgIH0sXG4gICAgICB3b3JrZmxvd0Rpc3BhdGNoOiB7fSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVTeW50aChvcHRpb25zOiBTeW50aFN0YWdlT3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IHN0ZXBzOiBKb2JTdGVwW10gPSBbe1xuICAgICAgbmFtZTogJ0NoZWNrb3V0JyxcbiAgICAgIHVzZXM6ICdhY3Rpb25zL2NoZWNrb3V0QHYyJyxcbiAgICAgIGVudjoge1xuICAgICAgICBDSTogJ3RydWUnLFxuICAgICAgfSxcbiAgICB9XTtcblxuICAgIGlmICh0aGlzLnByb3BzLmdpdGh1YkNvbmZpZz8uYXdzUm9sZUFybkZvclN5bnRoKSB7XG4gICAgICBzdGVwcy5wdXNoKHtcbiAgICAgICAgbmFtZTogJ0FXUyBDcmVkZW50aWFscycsXG4gICAgICAgIHVzZXM6ICdhd3MtYWN0aW9ucy9jb25maWd1cmUtYXdzLWNyZWRlbnRpYWxzQG1hc3RlcicsXG4gICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAncm9sZS10by1hc3N1bWUnOiB0aGlzLnByb3BzLmdpdGh1YkNvbmZpZy5hd3NSb2xlQXJuRm9yU3ludGgsXG4gICAgICAgICAgJ3JvbGUtc2Vzc2lvbi1uYW1lJzogJ0dpdEh1YkFjdGlvbicsXG4gICAgICAgICAgJ2F3cy1yZWdpb24nOiAndXMtZWFzdC0xJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0ZXBzLnB1c2goLi4ub3B0aW9ucy5jb21tYW5kcy5tYXAoY21kID0+ICh7XG4gICAgICBydW46IGNtZCxcbiAgICB9KSkpO1xuXG4gICAgdGhpcy5kZXBsb3ltZW50V29ya2Zsb3cuYWRkSm9iKCdzeW50aCcsIHtcbiAgICAgIG5hbWU6ICdTeW50aCBDREsgYXBwbGljYXRpb24nLFxuICAgICAgcnVuc09uOiBbJ3VidW50dS1sYXRlc3QnXSxcbiAgICAgIHBlcm1pc3Npb25zOiB7IGlkVG9rZW46IEpvYlBlcm1pc3Npb24uV1JJVEUsIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQgfSxcbiAgICAgIHN0ZXBzLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZUFzc2V0VXBsb2FkKG9wdGlvbnM6IEFzc2V0VXBsb2FkU3RhZ2VPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5kZXBsb3ltZW50V29ya2Zsb3cuYWRkSm9iKCdhc3NldFVwbG9hZCcsIHtcbiAgICAgIG5hbWU6ICdQdWJsaXNoIGFzc2V0cyB0byBBV1MnLFxuICAgICAgbmVlZHM6IFsnc3ludGgnXSxcbiAgICAgIHJ1bnNPbjogWyd1YnVudHUtbGF0ZXN0J10sXG4gICAgICBwZXJtaXNzaW9uczogeyBpZFRva2VuOiBKb2JQZXJtaXNzaW9uLldSSVRFLCBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFEIH0sXG4gICAgICBzdGVwczogW3tcbiAgICAgICAgbmFtZTogJ0NoZWNrb3V0JyxcbiAgICAgICAgdXNlczogJ2FjdGlvbnMvY2hlY2tvdXRAdjInLFxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAnQVdTIENyZWRlbnRpYWxzJyxcbiAgICAgICAgdXNlczogJ2F3cy1hY3Rpb25zL2NvbmZpZ3VyZS1hd3MtY3JlZGVudGlhbHNAbWFzdGVyJyxcbiAgICAgICAgd2l0aDoge1xuICAgICAgICAgICdyb2xlLXRvLWFzc3VtZSc6IHRoaXMucHJvcHMuZ2l0aHViQ29uZmlnPy5hd3NSb2xlQXJuRm9yQXNzZXRQdWJsaXNoaW5nID8/IHRoaXMucHJvcHMuZ2l0aHViQ29uZmlnPy5kZWZhdWx0QXdzUm9sZUFybixcbiAgICAgICAgICAncm9sZS1zZXNzaW9uLW5hbWUnOiAnR2l0SHViQWN0aW9uJyxcbiAgICAgICAgICAnYXdzLXJlZ2lvbic6ICd1cy1lYXN0LTEnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIC4uLm9wdGlvbnMuY29tbWFuZHMubWFwKGNtZCA9PiAoe1xuICAgICAgICBydW46IGNtZCxcbiAgICAgIH0pKV0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlRGVwbG95bWVudChvcHRpb25zOiBEZXBsb3lTdGFnZU9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLmRlcGxveW1lbnRXb3JrZmxvdy5hZGRKb2IoYGRlcGxveS0ke29wdGlvbnMuc3RhZ2VOYW1lfWAsIHtcbiAgICAgIG5hbWU6IGBEZXBsb3kgc3RhZ2UgJHtvcHRpb25zLnN0YWdlTmFtZX0gdG8gQVdTYCxcbiAgICAgIG5lZWRzOiB0aGlzLmRlcGxveW1lbnRTdGFnZXMubGVuZ3RoID4gMCA/IFsnYXNzZXRVcGxvYWQnLCBgZGVwbG95LSR7dGhpcy5kZXBsb3ltZW50U3RhZ2VzLmF0KC0xKSF9YF0gOiBbJ2Fzc2V0VXBsb2FkJ10sXG4gICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgcGVybWlzc2lvbnM6IHsgaWRUb2tlbjogSm9iUGVybWlzc2lvbi5XUklURSwgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCB9LFxuICAgICAgc3RlcHM6IFt7XG4gICAgICAgIG5hbWU6ICdDaGVja291dCcsXG4gICAgICAgIHVzZXM6ICdhY3Rpb25zL2NoZWNrb3V0QHYyJyxcbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ0FXUyBDcmVkZW50aWFscycsXG4gICAgICAgIHVzZXM6ICdhd3MtYWN0aW9ucy9jb25maWd1cmUtYXdzLWNyZWRlbnRpYWxzQG1hc3RlcicsXG4gICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAncm9sZS10by1hc3N1bWUnOiB0aGlzLnByb3BzLmdpdGh1YkNvbmZpZz8uYXdzUm9sZUFybkZvckRlcGxveW1lbnQ/LltvcHRpb25zLnN0YWdlTmFtZSBhcyBrZXlvZiBSb2xlTWFwXSA/PyB0aGlzLnByb3BzLmdpdGh1YkNvbmZpZz8uZGVmYXVsdEF3c1JvbGVBcm4sXG4gICAgICAgICAgJ3JvbGUtc2Vzc2lvbi1uYW1lJzogJ0dpdEh1YkFjdGlvbicsXG4gICAgICAgICAgJ2F3cy1yZWdpb24nOiBvcHRpb25zLmVudi5yZWdpb24sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgLi4ub3B0aW9ucy5jb21tYW5kcy5tYXAoY21kID0+ICh7XG4gICAgICAgIHJ1bjogY21kLFxuICAgICAgfSkpXSxcbiAgICB9KTtcbiAgICB0aGlzLmRlcGxveW1lbnRTdGFnZXMucHVzaChvcHRpb25zLnN0YWdlTmFtZSk7XG4gIH1cbn0iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './base';
2
+ export * from './github';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./base"), exports);
18
+ __exportStar(require("./github"), exports);
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZW5naW5lL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5Q0FBdUI7QUFDdkIsMkNBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9iYXNlJztcbmV4cG9ydCAqIGZyb20gJy4vZ2l0aHViJzsiXX0=
package/lib/index.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export * from './pipeline';
2
+ export * from './engine';
package/lib/index.js CHANGED
@@ -15,4 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./pipeline"), exports);
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcGlwZWxpbmUnOyJdfQ==
18
+ __exportStar(require("./engine"), exports);
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQUEyQjtBQUMzQiwyQ0FBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3BpcGVsaW5lJztcbmV4cG9ydCAqIGZyb20gJy4vZW5naW5lJzsiXX0=
package/lib/pipeline.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { Component, awscdk } from 'projen';
2
+ import { BaseEngine, GithubEngineConfig } from './engine';
2
3
  /**
3
4
  * The Environment interface is designed to hold AWS related information
4
5
  * for a specific deployment environment within your infrastructure.
@@ -49,6 +50,25 @@ export interface EnvironmentMap {
49
50
  */
50
51
  readonly prod: Environment;
51
52
  }
53
+ /**
54
+ * The CI/CD tooling used to run your pipeline.
55
+ * The component will render workflows for the given system
56
+ */
57
+ export declare enum PipelineEngine {
58
+ /** Create GitHub actions */
59
+ GITHUB = 0,
60
+ /** Create a .gitlab-ci.yaml file */
61
+ GITLAB = 1
62
+ }
63
+ /**
64
+ * Describes the type of pipeline that will be created
65
+ */
66
+ export declare enum DeploymentType {
67
+ /** Deploy every commit as far as possible; hopefully into production */
68
+ CONTINUOUS_DEPLOYMENT = 0,
69
+ /** Build every commit and prepare all assets for a later deployment */
70
+ CONTINUOUS_DELIVERY = 1
71
+ }
52
72
  /**
53
73
  * The CDKPipelineOptions interface is designed to provide configuration
54
74
  * options for a CDK (Cloud Development Kit) pipeline. It allows the definition
@@ -59,8 +79,10 @@ export interface CDKPipelineOptions {
59
79
  /**
60
80
  * This field is used to define a prefix for the AWS Stack resources created
61
81
  * during the pipeline's operation.
82
+ *
83
+ * @default project name
62
84
  */
63
- readonly stackPrefix: string;
85
+ readonly stackPrefix?: string;
64
86
  /**
65
87
  * This field determines the NPM namespace to be used when packaging CDK cloud
66
88
  * assemblies. A namespace helps group related resources together, providing
@@ -73,6 +95,25 @@ export interface CDKPipelineOptions {
73
95
  * deployment process, whether that's a personal, feature, dev, or prod stage.
74
96
  */
75
97
  readonly environments: EnvironmentMap;
98
+ /**
99
+ * This field specifies the type of pipeline to create. If set to CONTINUOUS_DEPLOYMENT,
100
+ * every commit is deployed as far as possible, hopefully into production. If set to
101
+ * CONTINUOUS_DELIVERY, every commit is built and all assets are prepared for a later deployment.
102
+ *
103
+ * @default CONTINUOUS_DELIVERY
104
+ */
105
+ readonly deploymentType?: DeploymentType;
106
+ /**
107
+ * This field determines the CI/CD tooling that will be used to run the pipeline. The component
108
+ * will render workflows for the given system. Options include GitHub and GitLab.
109
+ *
110
+ * @default - tries to derive it from the projects configuration
111
+ */
112
+ readonly engine?: PipelineEngine;
113
+ readonly githubConfig?: GithubEngineConfig;
114
+ readonly preInstallCommands?: string[];
115
+ readonly preSynthCommands?: string[];
116
+ readonly postSynthCommands?: string[];
76
117
  }
77
118
  /**
78
119
  * The CDKPipeline class extends the Component class and sets up the necessary configuration for deploying AWS CDK (Cloud Development Kit) applications across multiple stages.
@@ -81,7 +122,10 @@ export interface CDKPipelineOptions {
81
122
  export declare class CDKPipeline extends Component {
82
123
  private app;
83
124
  private props;
125
+ readonly stackPrefix: string;
126
+ readonly engine: BaseEngine;
84
127
  constructor(app: awscdk.AwsCdkTypeScriptApp, props: CDKPipelineOptions);
128
+ private createSynthStage;
85
129
  /**
86
130
  * This method generates the entry point for the application, including interfaces and classes
87
131
  * necessary to set up the pipeline and define the AWS CDK stacks for different environments.
package/lib/pipeline.js CHANGED
@@ -1,10 +1,34 @@
1
1
  "use strict";
2
2
  var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.CDKPipeline = void 0;
4
+ exports.CDKPipeline = exports.DeploymentType = exports.PipelineEngine = void 0;
5
5
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
6
  const projen_1 = require("projen");
7
7
  const common_1 = require("projen/lib/common");
8
+ const engine_1 = require("./engine");
9
+ /**
10
+ * The CI/CD tooling used to run your pipeline.
11
+ * The component will render workflows for the given system
12
+ */
13
+ var PipelineEngine;
14
+ (function (PipelineEngine) {
15
+ /** Create GitHub actions */
16
+ PipelineEngine[PipelineEngine["GITHUB"] = 0] = "GITHUB";
17
+ /** Create a .gitlab-ci.yaml file */
18
+ PipelineEngine[PipelineEngine["GITLAB"] = 1] = "GITLAB";
19
+ // /** Create AWS CodeCatalyst workflows */
20
+ // CODE_CATALYST,
21
+ })(PipelineEngine = exports.PipelineEngine || (exports.PipelineEngine = {}));
22
+ /**
23
+ * Describes the type of pipeline that will be created
24
+ */
25
+ var DeploymentType;
26
+ (function (DeploymentType) {
27
+ /** Deploy every commit as far as possible; hopefully into production */
28
+ DeploymentType[DeploymentType["CONTINUOUS_DEPLOYMENT"] = 0] = "CONTINUOUS_DEPLOYMENT";
29
+ /** Build every commit and prepare all assets for a later deployment */
30
+ DeploymentType[DeploymentType["CONTINUOUS_DELIVERY"] = 1] = "CONTINUOUS_DELIVERY";
31
+ })(DeploymentType = exports.DeploymentType || (exports.DeploymentType = {}));
8
32
  /**
9
33
  * The CDKPipeline class extends the Component class and sets up the necessary configuration for deploying AWS CDK (Cloud Development Kit) applications across multiple stages.
10
34
  * It also manages tasks such as publishing CDK assets, bumping version based on git tags, and cleaning up conflicting tasks.
@@ -18,6 +42,15 @@ class CDKPipeline extends projen_1.Component {
18
42
  this.app.addDevDeps('@types/standard-version', 'standard-version', 'cdk-assets');
19
43
  // this.app.addDeps(
20
44
  // );
45
+ this.stackPrefix = props.stackPrefix ?? app.name;
46
+ // Create engine instance to use
47
+ switch (props.engine) {
48
+ case PipelineEngine.GITHUB:
49
+ this.engine = new engine_1.GitHubEngine(app, props, this);
50
+ break;
51
+ default:
52
+ throw new Error('Invalid engine');
53
+ }
21
54
  // Removes the compiled cloud assembly before each synth
22
55
  this.project.tasks.tryFind('synth')?.prependExec(`rm -rf ${this.app.cdkConfig.cdkout}`);
23
56
  this.project.tasks.tryFind('synth:silent')?.prependExec(`rm -rf ${this.app.cdkConfig.cdkout}`);
@@ -26,6 +59,7 @@ class CDKPipeline extends projen_1.Component {
26
59
  this.project.removeTask('diff');
27
60
  this.project.removeTask('destroy');
28
61
  this.project.removeTask('watch');
62
+ this.createSynthStage();
29
63
  // Creates different deployment stages
30
64
  this.createPersonalStage();
31
65
  this.createFeatureStage();
@@ -36,6 +70,24 @@ class CDKPipeline extends projen_1.Component {
36
70
  // Creates a specialized CDK App class
37
71
  this.createApplicationEntrypoint();
38
72
  }
73
+ createSynthStage() {
74
+ this.engine.createSynth({
75
+ commands: [
76
+ ...(this.props.preInstallCommands ?? []),
77
+ `npx projen ${this.app.package.installCiTask.name}`,
78
+ ...(this.props.preSynthCommands ?? []),
79
+ 'npx projen build',
80
+ ...(this.props.postSynthCommands ?? []),
81
+ ],
82
+ });
83
+ this.engine.createAssetUpload({
84
+ commands: [
85
+ ...(this.props.preInstallCommands ?? []),
86
+ `npx projen ${this.app.package.installCiTask.name}`,
87
+ 'npx projen publish:assets',
88
+ ],
89
+ });
90
+ }
39
91
  /**
40
92
  * This method generates the entry point for the application, including interfaces and classes
41
93
  * necessary to set up the pipeline and define the AWS CDK stacks for different environments.
@@ -43,17 +95,13 @@ class CDKPipeline extends projen_1.Component {
43
95
  createApplicationEntrypoint() {
44
96
  const appFile = new projen_1.TextFile(this.project, `${this.app.srcdir}/app.ts`);
45
97
  appFile.addLine(`// ${common_1.PROJEN_MARKER}
46
- /* eslint-disable object-curly-spacing */
47
- /* eslint-disable comma-spacing */
48
- /* eslint-disable quotes */
49
- /* eslint-disable key-spacing */
50
- /* eslint-disable quote-props */
98
+ /* eslint-disable */
51
99
  import { App, AppProps, Stack, StackProps } from 'aws-cdk-lib';
52
100
 
53
101
  /**
54
102
  * PipelineAppProps is an extension of AppProps, which is part of the AWS CDK core.
55
103
  * It includes optional functions to provide AWS Stacks for different stages.
56
- *
104
+ *
57
105
  * Use these functions to instantiate your application stacks with the parameters for
58
106
  * each stage
59
107
  */
@@ -81,7 +129,7 @@ export interface PipelineAppStackProps extends StackProps {
81
129
 
82
130
  /**
83
131
  * The PipelineApp class extends the App class from AWS CDK and overrides the constructor to support
84
- * different stages of the application (development, production, personal, feature) by invoking the provided
132
+ * different stages of the application (development, production, personal, feature) by invoking the provided
85
133
  * stack-providing functions from the props.
86
134
  */
87
135
  export class PipelineApp extends App {
@@ -90,24 +138,24 @@ export class PipelineApp extends App {
90
138
 
91
139
  // If a function is provided for creating a development stack, it is called with necessary arguments.
92
140
  if (props.provideDevStack) {
93
- props.provideDevStack(this, '${this.props.stackPrefix}-dev', { env: ${JSON.stringify(this.props.environments.dev)}, stackName: '${this.props.stackPrefix}-dev', stageName: 'dev' });
141
+ props.provideDevStack(this, '${this.stackPrefix}-dev', { env: ${JSON.stringify(this.props.environments.dev)}, stackName: '${this.stackPrefix}-dev', stageName: 'dev' });
94
142
  }
95
143
 
96
144
  // If a function is provided for creating a production stack, it is called with necessary arguments.
97
145
  if (props.provideProdStack) {
98
- props.provideProdStack(this, '${this.props.stackPrefix}-prod', { env: ${JSON.stringify(this.props.environments.prod)}, stackName: '${this.props.stackPrefix}-prod', stageName: 'prod' });
146
+ props.provideProdStack(this, '${this.stackPrefix}-prod', { env: ${JSON.stringify(this.props.environments.prod)}, stackName: '${this.stackPrefix}-prod', stageName: 'prod' });
99
147
  }
100
148
 
101
149
  // If the environment variable USER is set and a function is provided for creating a personal stack, it is called with necessary arguments.
102
150
  if (props.providePersonalStack && process.env.USER) {
103
151
  const stageName = 'personal-' + process.env.USER.toLowerCase().replace(/\\\//g, '-');
104
- props.providePersonalStack(this, '${this.props.stackPrefix}-personal', { env: ${JSON.stringify(this.props.environments.personal)}, stackName: \`${this.props.stackPrefix}-\${stageName}\`, stageName });
152
+ props.providePersonalStack(this, '${this.stackPrefix}-personal', { env: ${JSON.stringify(this.props.environments.personal)}, stackName: \`${this.stackPrefix}-\${stageName}\`, stageName });
105
153
  }
106
154
 
107
155
  // If the environment variable BRANCH is set and a function is provided for creating a feature stack, it is called with necessary arguments.
108
156
  if (props.provideFeatureStack && process.env.BRANCH) {
109
157
  const stageName = 'feature-' + process.env.BRANCH.toLowerCase().replace(/\\\//g, '-');
110
- props.provideFeatureStack(this, '${this.props.stackPrefix}-feature', { env: ${JSON.stringify(this.props.environments.feature)}, stackName: \`${this.props.stackPrefix}-\${stageName}\`, stageName });
158
+ props.provideFeatureStack(this, '${this.stackPrefix}-feature', { env: ${JSON.stringify(this.props.environments.feature)}, stackName: \`${this.stackPrefix}-\${stageName}\`, stageName });
111
159
  }
112
160
  }
113
161
  }
@@ -122,10 +170,10 @@ export class PipelineApp extends App {
122
170
  this.project.addTask('publish:assets', {
123
171
  steps: [
124
172
  {
125
- exec: `npx cdk-assets -p ${this.app.cdkConfig.cdkout}/${this.props.stackPrefix}-dev.assets.json publish`,
173
+ exec: `npx cdk-assets -p ${this.app.cdkConfig.cdkout}/${this.stackPrefix}-dev.assets.json publish`,
126
174
  },
127
175
  {
128
- exec: `npx cdk-assets -p ${this.app.cdkConfig.cdkout}/${this.props.stackPrefix}-prod.assets.json publish`,
176
+ exec: `npx cdk-assets -p ${this.app.cdkConfig.cdkout}/${this.stackPrefix}-prod.assets.json publish`,
129
177
  },
130
178
  ],
131
179
  });
@@ -162,16 +210,16 @@ export class PipelineApp extends App {
162
210
  */
163
211
  createPersonalStage() {
164
212
  this.project.addTask('deploy:personal', {
165
- exec: `cdk deploy ${this.props.stackPrefix}-personal`,
213
+ exec: `cdk deploy ${this.stackPrefix}-personal`,
166
214
  });
167
215
  this.project.addTask('watch:personal', {
168
- exec: `cdk deploy --watch --hotswap ${this.props.stackPrefix}-personal`,
216
+ exec: `cdk deploy --watch --hotswap ${this.stackPrefix}-personal`,
169
217
  });
170
218
  this.project.addTask('diff:personal', {
171
- exec: `cdk diff ${this.props.stackPrefix}-personal`,
219
+ exec: `cdk diff ${this.stackPrefix}-personal`,
172
220
  });
173
221
  this.project.addTask('destroy:personal', {
174
- exec: `cdk destroy ${this.props.stackPrefix}-personal`,
222
+ exec: `cdk destroy ${this.stackPrefix}-personal`,
175
223
  });
176
224
  }
177
225
  /**
@@ -180,13 +228,13 @@ export class PipelineApp extends App {
180
228
  */
181
229
  createFeatureStage() {
182
230
  this.project.addTask('deploy:feature', {
183
- exec: `cdk --progress events --require-approval never deploy ${this.props.stackPrefix}-feature`,
231
+ exec: `cdk --progress events --require-approval never deploy ${this.stackPrefix}-feature`,
184
232
  });
185
233
  this.project.addTask('diff:feature', {
186
- exec: `cdk diff ${this.props.stackPrefix}-feature`,
234
+ exec: `cdk diff ${this.stackPrefix}-feature`,
187
235
  });
188
236
  this.project.addTask('destroy:feature', {
189
- exec: `cdk destroy ${this.props.stackPrefix}-feature`,
237
+ exec: `cdk destroy ${this.stackPrefix}-feature`,
190
238
  });
191
239
  }
192
240
  /**
@@ -195,14 +243,21 @@ export class PipelineApp extends App {
195
243
  */
196
244
  createPipelineStage(stageName) {
197
245
  this.project.addTask(`deploy:${stageName}`, {
198
- exec: `cdk --app ${this.app.cdkConfig.cdkout} --progress events --require-approval never deploy ${this.props.stackPrefix}-${stageName}`,
246
+ exec: `cdk --app ${this.app.cdkConfig.cdkout} --progress events --require-approval never deploy ${this.stackPrefix}-${stageName}`,
199
247
  });
200
248
  this.project.addTask(`diff:${stageName}`, {
201
- exec: `cdk --app ${this.app.cdkConfig.cdkout} diff ${this.props.stackPrefix}-${stageName}`,
249
+ exec: `cdk --app ${this.app.cdkConfig.cdkout} diff ${this.stackPrefix}-${stageName}`,
250
+ });
251
+ this.engine.createDeployment({
252
+ stageName,
253
+ env: this.props.environments[stageName],
254
+ commands: [
255
+ `npx projen deploy:${stageName}`,
256
+ ],
202
257
  });
203
258
  }
204
259
  }
205
260
  _a = JSII_RTTI_SYMBOL_1;
206
- CDKPipeline[_a] = { fqn: "projen-pipelines.CDKPipeline", version: "0.0.2" };
261
+ CDKPipeline[_a] = { fqn: "projen-pipelines.CDKPipeline", version: "0.0.3" };
207
262
  exports.CDKPipeline = CDKPipeline;
208
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGlwZWxpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBcUQ7QUFDckQsOENBQWtEO0FBc0ZsRDs7O0dBR0c7QUFDSCxNQUFhLFdBQVksU0FBUSxrQkFBUztJQUV4QyxZQUFvQixHQUErQixFQUFVLEtBQXlCO1FBQ3BGLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQURPLFFBQUcsR0FBSCxHQUFHLENBQTRCO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBb0I7UUFHcEYsK0JBQStCO1FBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUNqQix5QkFBeUIsRUFDekIsa0JBQWtCLEVBQ2xCLFlBQVksQ0FDYixDQUFDO1FBQ0Ysb0JBQW9CO1FBQ3BCLEtBQUs7UUFFTCx3REFBd0Q7UUFDeEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFdBQVcsQ0FBQyxVQUFVLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDeEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxVQUFVLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFL0YsNkRBQTZEO1FBQzdELElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWpDLHNDQUFzQztRQUN0QyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWpDLDhDQUE4QztRQUM5QyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUUxQixzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7T0FHRztJQUNLLDJCQUEyQjtRQUNqQyxNQUFNLE9BQU8sR0FBRyxJQUFJLGlCQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxTQUFTLENBQUMsQ0FBQztRQUN4RSxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sc0JBQWE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztxQ0FnREYsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLGlCQUFpQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXOzs7OztzQ0FLeEgsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLGtCQUFrQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXOzs7Ozs7MENBTXZILElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxzQkFBc0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVzs7Ozs7O3lDQU1ySSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcscUJBQXFCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGtCQUFrQixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVc7Ozs7Q0FJMUssQ0FBQyxDQUFDO0lBQ0QsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGtCQUFrQjtRQUN4QixpREFBaUQ7UUFDakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUU7WUFDckMsS0FBSyxFQUFFO2dCQUNMO29CQUNFLElBQUksRUFBRSxxQkFBcUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVywwQkFBMEI7aUJBQ3pHO2dCQUNEO29CQUNFLElBQUksRUFBRSxxQkFBcUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVywyQkFBMkI7aUJBQzFHO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDM0IsV0FBVyxFQUFFLHVDQUF1QztZQUNwRCxLQUFLLEVBQUU7Z0JBQ0w7b0JBQ0UsSUFBSSxFQUFFLHdCQUF3QjtpQkFDL0I7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLGlCQUFpQjtpQkFDeEI7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFO1lBQzVDLEtBQUssRUFBRTtnQkFDTDtvQkFDRSxJQUFJLEVBQUUsc0NBQXNDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRztpQkFDdkc7Z0JBQ0Q7b0JBQ0UsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU07b0JBQzlCLElBQUksRUFBRSwyQ0FBMkM7aUJBQ2xEO2dCQUNEO29CQUNFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNO29CQUM5QixJQUFJLEVBQUUsYUFBYTtpQkFDcEI7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUU7WUFDdEMsSUFBSSxFQUFFLGNBQWMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLFdBQVc7U0FDdEQsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUU7WUFDckMsSUFBSSxFQUFFLGdDQUFnQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsV0FBVztTQUN4RSxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUU7WUFDcEMsSUFBSSxFQUFFLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLFdBQVc7U0FDcEQsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUU7WUFDdkMsSUFBSSxFQUFFLGVBQWUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLFdBQVc7U0FDdkQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGtCQUFrQjtRQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyQyxJQUFJLEVBQUUseURBQXlELElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxVQUFVO1NBQ2hHLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRTtZQUNuQyxJQUFJLEVBQUUsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsVUFBVTtTQUNuRCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRTtZQUN0QyxJQUFJLEVBQUUsZUFBZSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsVUFBVTtTQUN0RCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssbUJBQW1CLENBQUMsU0FBaUI7UUFDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxTQUFTLEVBQUUsRUFBRTtZQUMxQyxJQUFJLEVBQUUsYUFBYSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLHNEQUFzRCxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBSSxTQUFTLEVBQUU7U0FDeEksQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxTQUFTLEVBQUUsRUFBRTtZQUN4QyxJQUFJLEVBQUUsYUFBYSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksU0FBUyxFQUFFO1NBQzNGLENBQUMsQ0FBQztJQUNMLENBQUM7Ozs7QUE5TVUsa0NBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFRleHRGaWxlLCBhd3NjZGsgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgUFJPSkVOX01BUktFUiB9IGZyb20gJ3Byb2plbi9saWIvY29tbW9uJztcblxuLyoqXG4gKiBUaGUgRW52aXJvbm1lbnQgaW50ZXJmYWNlIGlzIGRlc2lnbmVkIHRvIGhvbGQgQVdTIHJlbGF0ZWQgaW5mb3JtYXRpb25cbiAqIGZvciBhIHNwZWNpZmljIGRlcGxveW1lbnQgZW52aXJvbm1lbnQgd2l0aGluIHlvdXIgaW5mcmFzdHJ1Y3R1cmUuXG4gKiBFYWNoIGVudmlyb25tZW50IHJlcXVpcmVzIGEgc3BlY2lmaWMgYWNjb3VudCBhbmQgcmVnaW9uIGZvciBpdHMgcmVzb3VyY2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudmlyb25tZW50IHtcbiAgLyoqXG4gICAqIFRoZSBBV1MgQWNjb3VudCBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIGVudmlyb25tZW50LiBJdCdzIGltcG9ydGFudCBiZWNhdXNlXG4gICAqIGRpZmZlcmVudCBzZXJ2aWNlcyBvciBmZWF0dXJlcyBjb3VsZCBoYXZlIGRpc3RpbmN0IHBlcm1pc3Npb25zIGFuZCBzZXR0aW5nc1xuICAgKiBpbiBkaWZmZXJlbnQgYWNjb3VudHMuXG4gICAqL1xuICByZWFkb25seSBhY2NvdW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgUmVnaW9uIGZvciB0aGUgZW52aXJvbm1lbnQuIFRoaXMgZGV0ZXJtaW5lcyB3aGVyZSB5b3VyIHJlc291cmNlc1xuICAgKiBhcmUgY3JlYXRlZCBhbmQgd2hlcmUgeW91ciBhcHBsaWNhdGlvbiB3aWxsIHJ1bi4gSXQgY2FuIGFmZmVjdCBsYXRlbmN5LFxuICAgKiBhdmFpbGFiaWxpdHksIGFuZCBwcmljaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIEVudmlyb25tZW50TWFwIGludGVyZmFjZSBpcyB1c2VkIHRvIG1haW50YWluIGEgbWFwcGluZyBvZiBkaWZmZXJlbnQgdHlwZXNcbiAqIG9mIGVudmlyb25tZW50cyB1c2VkIGluIHRoZSBhcHBsaWNhdGlvbi4gRWFjaCB0eXBlIG9mIGVudmlyb25tZW50IC0gcGVyc29uYWwsXG4gKiBmZWF0dXJlLCBkZXYsIGFuZCBwcm9kLCByZXByZXNlbnRzIGEgZGlmZmVyZW50IHN0YWdlIG9mIGRldmVsb3BtZW50IG9yIHVzYWdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudmlyb25tZW50TWFwIHtcbiAgLyoqXG4gICAqIFRoZSBwZXJzb25hbCBlbnZpcm9ubWVudCBpcyB1c3VhbGx5IHVzZWQgZm9yIGluZGl2aWR1YWwgZGV2ZWxvcG1lbnQgYW5kXG4gICAqIHRlc3RpbmcsIGFsbG93aW5nIGRldmVsb3BlcnMgdG8gZnJlZWx5IHRlc3QgYW5kIGV4cGVyaW1lbnQgd2l0aG91dFxuICAgKiBhZmZlY3RpbmcgdGhlIHNoYXJlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC5cbiAgICovXG4gIHJlYWRvbmx5IHBlcnNvbmFsOiBFbnZpcm9ubWVudDtcblxuICAvKipcbiAgICogVGhlIGZlYXR1cmUgZW52aXJvbm1lbnQgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGRldmVsb3Bpbmcgc3BlY2lmaWMgZmVhdHVyZXNcbiAgICogaW4gaXNvbGF0aW9uIGZyb20gdGhlIG1haW4gY29kZWJhc2UuIFRoaXMgYWxsb3dzIGRldmVsb3BlcnMgdG8gd29yayBvblxuICAgKiBpbmRpdmlkdWFsIGZlYXR1cmVzIHdpdGhvdXQgaW1wYWN0aW5nIHRoZSBzdGFiaWxpdHkgb2YgdGhlIGRldiBvciBwcm9kXG4gICAqIGVudmlyb25tZW50cy5cbiAgICovXG4gIHJlYWRvbmx5IGZlYXR1cmU6IEVudmlyb25tZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgZGV2IGVudmlyb25tZW50IGlzIGEgc2hhcmVkIGVudmlyb25tZW50IHdoZXJlIGRldmVsb3BlcnMgaW50ZWdyYXRlXG4gICAqIHRoZWlyIGZlYXR1cmUgY2hhbmdlcy4gSXQgcmVwcmVzZW50cyB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGFwcGxpY2F0aW9uXG4gICAqIGJ1dCBtYXkgbm90IGJlIGFzIHN0YWJsZSBhcyB0aGUgcHJvZHVjdGlvbiBlbnZpcm9ubWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGRldjogRW52aXJvbm1lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBwcm9kIGVudmlyb25tZW50IGlzIHdoZXJlIHRoZSBsaXZlLCB1c2VyLWZhY2luZyBhcHBsaWNhdGlvbiBydW5zLlxuICAgKiBJdCBzaG91bGQgYmUgc3RhYmxlIGFuZCBvbmx5IHJlY2VpdmUgdGhvcm91Z2hseSB0ZXN0ZWQgY2hhbmdlcy5cbiAgICovXG4gIHJlYWRvbmx5IHByb2Q6IEVudmlyb25tZW50O1xufVxuXG4vKipcbiAqIFRoZSBDREtQaXBlbGluZU9wdGlvbnMgaW50ZXJmYWNlIGlzIGRlc2lnbmVkIHRvIHByb3ZpZGUgY29uZmlndXJhdGlvblxuICogb3B0aW9ucyBmb3IgYSBDREsgKENsb3VkIERldmVsb3BtZW50IEtpdCkgcGlwZWxpbmUuIEl0IGFsbG93cyB0aGUgZGVmaW5pdGlvblxuICogb2Ygc2V0dGluZ3Mgc3VjaCBhcyB0aGUgc3RhY2sgcHJlZml4IGFuZCBwYWNrYWdlIG5hbWVzcGFjZSB0byBiZSB1c2VkIGluIHRoZVxuICogQVdTIHN0YWNrLCBhbG9uZyB3aXRoIHRoZSBlbnZpcm9ubWVudHMgY29uZmlndXJhdGlvbiB0byBiZSB1c2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENES1BpcGVsaW5lT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGlzIGZpZWxkIGlzIHVzZWQgdG8gZGVmaW5lIGEgcHJlZml4IGZvciB0aGUgQVdTIFN0YWNrIHJlc291cmNlcyBjcmVhdGVkXG4gICAqIGR1cmluZyB0aGUgcGlwZWxpbmUncyBvcGVyYXRpb24uXG4gICAqL1xuICByZWFkb25seSBzdGFja1ByZWZpeDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGlzIGZpZWxkIGRldGVybWluZXMgdGhlIE5QTSBuYW1lc3BhY2UgdG8gYmUgdXNlZCB3aGVuIHBhY2thZ2luZyBDREsgY2xvdWRcbiAgICogYXNzZW1ibGllcy4gQSBuYW1lc3BhY2UgaGVscHMgZ3JvdXAgcmVsYXRlZCByZXNvdXJjZXMgdG9nZXRoZXIsIHByb3ZpZGluZ1xuICAgKiBiZXR0ZXIgb3JnYW5pemF0aW9uIGFuZCBlYXNlIG9mIG1hbmFnZW1lbnQuXG4gICAqL1xuICByZWFkb25seSBwa2dOYW1lc3BhY2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhpcyBpcyBhIG1hcCBvZiBlbnZpcm9ubWVudHMgdG8gYmUgdXNlZCBpbiB0aGUgcGlwZWxpbmUuIEl0IGFsbG93cyB0aGVcbiAgICogcGlwZWxpbmUgdG8gZGVwbG95IHRvIGRpZmZlcmVudCBlbnZpcm9ubWVudHMgYmFzZWQgb24gdGhlIHN0YWdlIG9mIHRoZVxuICAgKiBkZXBsb3ltZW50IHByb2Nlc3MsIHdoZXRoZXIgdGhhdCdzIGEgcGVyc29uYWwsIGZlYXR1cmUsIGRldiwgb3IgcHJvZCBzdGFnZS5cbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50czogRW52aXJvbm1lbnRNYXA7XG59XG5cbi8qKlxuICogVGhlIENES1BpcGVsaW5lIGNsYXNzIGV4dGVuZHMgdGhlIENvbXBvbmVudCBjbGFzcyBhbmQgc2V0cyB1cCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gZm9yIGRlcGxveWluZyBBV1MgQ0RLIChDbG91ZCBEZXZlbG9wbWVudCBLaXQpIGFwcGxpY2F0aW9ucyBhY3Jvc3MgbXVsdGlwbGUgc3RhZ2VzLlxuICogSXQgYWxzbyBtYW5hZ2VzIHRhc2tzIHN1Y2ggYXMgcHVibGlzaGluZyBDREsgYXNzZXRzLCBidW1waW5nIHZlcnNpb24gYmFzZWQgb24gZ2l0IHRhZ3MsIGFuZCBjbGVhbmluZyB1cCBjb25mbGljdGluZyB0YXNrcy5cbiAqL1xuZXhwb3J0IGNsYXNzIENES1BpcGVsaW5lIGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwcDogYXdzY2RrLkF3c0Nka1R5cGVTY3JpcHRBcHAsIHByaXZhdGUgcHJvcHM6IENES1BpcGVsaW5lT3B0aW9ucykge1xuICAgIHN1cGVyKGFwcCk7XG5cbiAgICAvLyBBZGQgZGV2ZWxvcG1lbnQgZGVwZW5kZW5jaWVzXG4gICAgdGhpcy5hcHAuYWRkRGV2RGVwcyhcbiAgICAgICdAdHlwZXMvc3RhbmRhcmQtdmVyc2lvbicsXG4gICAgICAnc3RhbmRhcmQtdmVyc2lvbicsXG4gICAgICAnY2RrLWFzc2V0cycsXG4gICAgKTtcbiAgICAvLyB0aGlzLmFwcC5hZGREZXBzKFxuICAgIC8vICk7XG5cbiAgICAvLyBSZW1vdmVzIHRoZSBjb21waWxlZCBjbG91ZCBhc3NlbWJseSBiZWZvcmUgZWFjaCBzeW50aFxuICAgIHRoaXMucHJvamVjdC50YXNrcy50cnlGaW5kKCdzeW50aCcpPy5wcmVwZW5kRXhlYyhgcm0gLXJmICR7dGhpcy5hcHAuY2RrQ29uZmlnLmNka291dH1gKTtcbiAgICB0aGlzLnByb2plY3QudGFza3MudHJ5RmluZCgnc3ludGg6c2lsZW50Jyk/LnByZXBlbmRFeGVjKGBybSAtcmYgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fWApO1xuXG4gICAgLy8gUmVtb3ZlIHRhc2tzIHRoYXQgbWlnaHQgY29uZmxpY3Qgd2l0aCB0aGUgcGlwZWxpbmUgcHJvY2Vzc1xuICAgIHRoaXMucHJvamVjdC5yZW1vdmVUYXNrKCdkZXBsb3knKTtcbiAgICB0aGlzLnByb2plY3QucmVtb3ZlVGFzaygnZGlmZicpO1xuICAgIHRoaXMucHJvamVjdC5yZW1vdmVUYXNrKCdkZXN0cm95Jyk7XG4gICAgdGhpcy5wcm9qZWN0LnJlbW92ZVRhc2soJ3dhdGNoJyk7XG5cbiAgICAvLyBDcmVhdGVzIGRpZmZlcmVudCBkZXBsb3ltZW50IHN0YWdlc1xuICAgIHRoaXMuY3JlYXRlUGVyc29uYWxTdGFnZSgpO1xuICAgIHRoaXMuY3JlYXRlRmVhdHVyZVN0YWdlKCk7XG4gICAgdGhpcy5jcmVhdGVQaXBlbGluZVN0YWdlKCdkZXYnKTtcbiAgICB0aGlzLmNyZWF0ZVBpcGVsaW5lU3RhZ2UoJ3Byb2QnKTtcblxuICAgIC8vIENyZWF0ZXMgdGFza3MgdG8gaGFuZGxlIHRoZSByZWxlYXNlIHByb2Nlc3NcbiAgICB0aGlzLmNyZWF0ZVJlbGVhc2VUYXNrcygpO1xuXG4gICAgLy8gQ3JlYXRlcyBhIHNwZWNpYWxpemVkIENESyBBcHAgY2xhc3NcbiAgICB0aGlzLmNyZWF0ZUFwcGxpY2F0aW9uRW50cnlwb2ludCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBhcHBsaWNhdGlvbiwgaW5jbHVkaW5nIGludGVyZmFjZXMgYW5kIGNsYXNzZXNcbiAgICogbmVjZXNzYXJ5IHRvIHNldCB1cCB0aGUgcGlwZWxpbmUgYW5kIGRlZmluZSB0aGUgQVdTIENESyBzdGFja3MgZm9yIGRpZmZlcmVudCBlbnZpcm9ubWVudHMuXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUFwcGxpY2F0aW9uRW50cnlwb2ludCgpIHtcbiAgICBjb25zdCBhcHBGaWxlID0gbmV3IFRleHRGaWxlKHRoaXMucHJvamVjdCwgYCR7dGhpcy5hcHAuc3JjZGlyfS9hcHAudHNgKTtcbiAgICBhcHBGaWxlLmFkZExpbmUoYC8vICR7UFJPSkVOX01BUktFUn1cbi8qIGVzbGludC1kaXNhYmxlIG9iamVjdC1jdXJseS1zcGFjaW5nICovXG4vKiBlc2xpbnQtZGlzYWJsZSBjb21tYS1zcGFjaW5nICovXG4vKiBlc2xpbnQtZGlzYWJsZSBxdW90ZXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGtleS1zcGFjaW5nICovXG4vKiBlc2xpbnQtZGlzYWJsZSBxdW90ZS1wcm9wcyAqL1xuaW1wb3J0IHsgQXBwLCBBcHBQcm9wcywgU3RhY2ssIFN0YWNrUHJvcHMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5cbi8qKlxuICogUGlwZWxpbmVBcHBQcm9wcyBpcyBhbiBleHRlbnNpb24gb2YgQXBwUHJvcHMsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIEFXUyBDREsgY29yZS5cbiAqIEl0IGluY2x1ZGVzIG9wdGlvbmFsIGZ1bmN0aW9ucyB0byBwcm92aWRlIEFXUyBTdGFja3MgZm9yIGRpZmZlcmVudCBzdGFnZXMuXG4gKiBcbiAqIFVzZSB0aGVzZSBmdW5jdGlvbnMgdG8gaW5zdGFudGlhdGUgeW91ciBhcHBsaWNhdGlvbiBzdGFja3Mgd2l0aCB0aGUgcGFyYW1ldGVycyBmb3JcbiAqIGVhY2ggc3RhZ2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZUFwcFByb3BzIGV4dGVuZHMgQXBwUHJvcHMge1xuICAvKiogVGhpcyBvcHRpb25hbCBmdW5jdGlvbiwgaWYgcHJvdmlkZWQsIHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSBhIGRldmVsb3BtZW50IHN0YWNrLiAqL1xuICBwcm92aWRlRGV2U3RhY2s/OiAoYXBwOiBBcHAsIHN0YWNrSWQ6IHN0cmluZywgcHJvcHM6IFBpcGVsaW5lQXBwU3RhY2tQcm9wcykgPT4gU3RhY2s7XG5cbiAgLyoqIFRoaXMgb3B0aW9uYWwgZnVuY3Rpb24sIGlmIHByb3ZpZGVkLCB3aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgYSBwcm9kdWN0aW9uIHN0YWNrLiAqL1xuICBwcm92aWRlUHJvZFN0YWNrPzogKGFwcDogQXBwLCBzdGFja0lkOiBzdHJpbmcsIHByb3BzOiBQaXBlbGluZUFwcFN0YWNrUHJvcHMpID0+IFN0YWNrO1xuXG4gIC8qKiBUaGlzIG9wdGlvbmFsIGZ1bmN0aW9uLCBpZiBwcm92aWRlZCwgd2lsbCBiZSB1c2VkIHRvIGdlbmVyYXRlIGEgcGVyc29uYWwgc3RhY2suICovXG4gIHByb3ZpZGVQZXJzb25hbFN0YWNrPzogKGFwcDogQXBwLCBzdGFja0lkOiBzdHJpbmcsIHByb3BzOiBQaXBlbGluZUFwcFN0YWNrUHJvcHMpID0+IFN0YWNrO1xuXG4gIC8qKiBUaGlzIG9wdGlvbmFsIGZ1bmN0aW9uLCBpZiBwcm92aWRlZCwgd2lsbCBiZSB1c2VkIHRvIGdlbmVyYXRlIGEgZmVhdHVyZSBzdGFjay4gKi9cbiAgcHJvdmlkZUZlYXR1cmVTdGFjaz86IChhcHA6IEFwcCwgc3RhY2tJZDogc3RyaW5nLCBwcm9wczogUGlwZWxpbmVBcHBTdGFja1Byb3BzKSA9PiBTdGFjaztcbn1cblxuLyoqXG4gKiBQaXBlbGluZUFwcFN0YWNrUHJvcHMgaXMgYW4gZXh0ZW5zaW9uIG9mIFN0YWNrUHJvcHMsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIEFXUyBDREsgY29yZS5cbiAqIEl0IGluY2x1ZGVzIGFuIGFkZGl0aW9uYWwgcHJvcGVydHkgdG8gc3BlY2lmeSB0aGUgc3RhZ2UgbmFtZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZUFwcFN0YWNrUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIFBpcGVsaW5lQXBwIGNsYXNzIGV4dGVuZHMgdGhlIEFwcCBjbGFzcyBmcm9tIEFXUyBDREsgYW5kIG92ZXJyaWRlcyB0aGUgY29uc3RydWN0b3IgdG8gc3VwcG9ydFxuICogZGlmZmVyZW50IHN0YWdlcyBvZiB0aGUgYXBwbGljYXRpb24gKGRldmVsb3BtZW50LCBwcm9kdWN0aW9uLCBwZXJzb25hbCwgZmVhdHVyZSkgYnkgaW52b2tpbmcgdGhlIHByb3ZpZGVkIFxuICogc3RhY2stcHJvdmlkaW5nIGZ1bmN0aW9ucyBmcm9tIHRoZSBwcm9wcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBpcGVsaW5lQXBwIGV4dGVuZHMgQXBwIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IFBpcGVsaW5lQXBwUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAvLyBJZiBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGZvciBjcmVhdGluZyBhIGRldmVsb3BtZW50IHN0YWNrLCBpdCBpcyBjYWxsZWQgd2l0aCBuZWNlc3NhcnkgYXJndW1lbnRzLlxuICAgIGlmIChwcm9wcy5wcm92aWRlRGV2U3RhY2spIHtcbiAgICAgIHByb3BzLnByb3ZpZGVEZXZTdGFjayh0aGlzLCAnJHt0aGlzLnByb3BzLnN0YWNrUHJlZml4fS1kZXYnLCB7IGVudjogJHtKU09OLnN0cmluZ2lmeSh0aGlzLnByb3BzLmVudmlyb25tZW50cy5kZXYpfSwgc3RhY2tOYW1lOiAnJHt0aGlzLnByb3BzLnN0YWNrUHJlZml4fS1kZXYnLCBzdGFnZU5hbWU6ICdkZXYnIH0pO1xuICAgIH1cblxuICAgIC8vIElmIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQgZm9yIGNyZWF0aW5nIGEgcHJvZHVjdGlvbiBzdGFjaywgaXQgaXMgY2FsbGVkIHdpdGggbmVjZXNzYXJ5IGFyZ3VtZW50cy5cbiAgICBpZiAocHJvcHMucHJvdmlkZVByb2RTdGFjaykge1xuICAgICAgcHJvcHMucHJvdmlkZVByb2RTdGFjayh0aGlzLCAnJHt0aGlzLnByb3BzLnN0YWNrUHJlZml4fS1wcm9kJywgeyBlbnY6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5wcm9wcy5lbnZpcm9ubWVudHMucHJvZCl9LCBzdGFja05hbWU6ICcke3RoaXMucHJvcHMuc3RhY2tQcmVmaXh9LXByb2QnLCBzdGFnZU5hbWU6ICdwcm9kJyB9KTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgVVNFUiBpcyBzZXQgYW5kIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQgZm9yIGNyZWF0aW5nIGEgcGVyc29uYWwgc3RhY2ssIGl0IGlzIGNhbGxlZCB3aXRoIG5lY2Vzc2FyeSBhcmd1bWVudHMuXG4gICAgaWYgKHByb3BzLnByb3ZpZGVQZXJzb25hbFN0YWNrICYmIHByb2Nlc3MuZW52LlVTRVIpIHtcbiAgICAgIGNvbnN0IHN0YWdlTmFtZSA9ICdwZXJzb25hbC0nICsgcHJvY2Vzcy5lbnYuVVNFUi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xcXFxcXC8vZywgJy0nKTtcbiAgICAgIHByb3BzLnByb3ZpZGVQZXJzb25hbFN0YWNrKHRoaXMsICcke3RoaXMucHJvcHMuc3RhY2tQcmVmaXh9LXBlcnNvbmFsJywgeyBlbnY6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5wcm9wcy5lbnZpcm9ubWVudHMucGVyc29uYWwpfSwgc3RhY2tOYW1lOiBcXGAke3RoaXMucHJvcHMuc3RhY2tQcmVmaXh9LVxcJHtzdGFnZU5hbWV9XFxgLCBzdGFnZU5hbWUgfSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEJSQU5DSCBpcyBzZXQgYW5kIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQgZm9yIGNyZWF0aW5nIGEgZmVhdHVyZSBzdGFjaywgaXQgaXMgY2FsbGVkIHdpdGggbmVjZXNzYXJ5IGFyZ3VtZW50cy5cbiAgICBpZiAocHJvcHMucHJvdmlkZUZlYXR1cmVTdGFjayAmJiBwcm9jZXNzLmVudi5CUkFOQ0gpIHtcbiAgICAgIGNvbnN0IHN0YWdlTmFtZSA9ICdmZWF0dXJlLScgKyBwcm9jZXNzLmVudi5CUkFOQ0gudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXFxcXFwvL2csICctJyk7XG4gICAgICBwcm9wcy5wcm92aWRlRmVhdHVyZVN0YWNrKHRoaXMsICcke3RoaXMucHJvcHMuc3RhY2tQcmVmaXh9LWZlYXR1cmUnLCB7IGVudjogJHtKU09OLnN0cmluZ2lmeSh0aGlzLnByb3BzLmVudmlyb25tZW50cy5mZWF0dXJlKX0sIHN0YWNrTmFtZTogXFxgJHt0aGlzLnByb3BzLnN0YWNrUHJlZml4fS1cXCR7c3RhZ2VOYW1lfVxcYCwgc3RhZ2VOYW1lIH0pO1xuICAgIH1cbiAgfVxufVxuYCk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2Qgc2V0cyB1cCB0YXNrcyB0byBwdWJsaXNoIENESyBhc3NldHMgdG8gYWxsIGFjY291bnRzIGFuZCBoYW5kbGUgdmVyc2lvbmluZywgaW5jbHVkaW5nIGJ1bXBpbmcgdGhlIHZlcnNpb25cbiAgICogYmFzZWQgb24gdGhlIGxhdGVzdCBnaXQgdGFnIGFuZCBwdXNoaW5nIHRoZSBDREsgYXNzZW1ibHkgdG8gdGhlIHBhY2thZ2UgcmVwb3NpdG9yeS5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlUmVsZWFzZVRhc2tzKCkge1xuICAgIC8vIFRhc2sgdG8gcHVibGlzaCB0aGUgQ0RLIGFzc2V0cyB0byBhbGwgYWNjb3VudHNcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygncHVibGlzaDphc3NldHMnLCB7XG4gICAgICBzdGVwczogW1xuICAgICAgICB7XG4gICAgICAgICAgZXhlYzogYG5weCBjZGstYXNzZXRzIC1wICR7dGhpcy5hcHAuY2RrQ29uZmlnLmNka291dH0vJHt0aGlzLnByb3BzLnN0YWNrUHJlZml4fS1kZXYuYXNzZXRzLmpzb24gcHVibGlzaGAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBleGVjOiBgbnB4IGNkay1hc3NldHMgLXAgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fS8ke3RoaXMucHJvcHMuc3RhY2tQcmVmaXh9LXByb2QuYXNzZXRzLmpzb24gcHVibGlzaGAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ2J1bXAnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ0J1bXBzIHZlcnNpb24gYmFzZWQgb24gbGF0ZXN0IGdpdCB0YWcnLFxuICAgICAgc3RlcHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGV4ZWM6ICdwaXBlbGluZXMtcmVsZWFzZSBidW1wJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGV4ZWM6ICdnaXQgcHVzaCAtLXRhZ3MnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygncmVsZWFzZTpwdXNoLWFzc2VtYmx5Jywge1xuICAgICAgc3RlcHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGV4ZWM6IGBwaXBlbGluZXMtcmVsZWFzZSBjcmVhdGUtbWFuaWZlc3QgXCIke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9XCIgIFwiJHt0aGlzLnByb3BzLnBrZ05hbWVzcGFjZX1cImAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjd2Q6IHRoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXQsXG4gICAgICAgICAgZXhlYzogJ25wbSB2ZXJzaW9uIC0tbm8tZ2l0LXRhZy12ZXJzaW9uIGZyb20tZ2l0JyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGN3ZDogdGhpcy5hcHAuY2RrQ29uZmlnLmNka291dCxcbiAgICAgICAgICBleGVjOiAnbnBtIHB1Ymxpc2gnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIHRhc2tzIGZvciB0aGUgcGVyc29uYWwgZGVwbG95bWVudCBzdGFnZSwgaW5jbHVkaW5nIGRlcGxveW1lbnQsIHdhdGNoaW5nIGZvciBjaGFuZ2VzLFxuICAgKiBjb21wYXJpbmcgY2hhbmdlcyAoZGlmZiksIGFuZCBkZXN0cm95aW5nIHRoZSBzdGFjayB3aGVuIG5vIGxvbmdlciBuZWVkZWQuXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZVBlcnNvbmFsU3RhZ2UoKSB7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ2RlcGxveTpwZXJzb25hbCcsIHtcbiAgICAgIGV4ZWM6IGBjZGsgZGVwbG95ICR7dGhpcy5wcm9wcy5zdGFja1ByZWZpeH0tcGVyc29uYWxgLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCd3YXRjaDpwZXJzb25hbCcsIHtcbiAgICAgIGV4ZWM6IGBjZGsgZGVwbG95IC0td2F0Y2ggLS1ob3Rzd2FwICR7dGhpcy5wcm9wcy5zdGFja1ByZWZpeH0tcGVyc29uYWxgLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCdkaWZmOnBlcnNvbmFsJywge1xuICAgICAgZXhlYzogYGNkayBkaWZmICR7dGhpcy5wcm9wcy5zdGFja1ByZWZpeH0tcGVyc29uYWxgLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCdkZXN0cm95OnBlcnNvbmFsJywge1xuICAgICAgZXhlYzogYGNkayBkZXN0cm95ICR7dGhpcy5wcm9wcy5zdGFja1ByZWZpeH0tcGVyc29uYWxgLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGFza3MgZm9yIHRoZSBmZWF0dXJlIGRlcGxveW1lbnQgc3RhZ2UsIGluY2x1ZGluZyBkZXBsb3ltZW50LCBjb21wYXJpbmcgY2hhbmdlcyAoZGlmZiksXG4gICAqIGFuZCBkZXN0cm95aW5nIHRoZSBzdGFjayB3aGVuIG5vIGxvbmdlciBuZWVkZWQuXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUZlYXR1cmVTdGFnZSgpIHtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygnZGVwbG95OmZlYXR1cmUnLCB7XG4gICAgICBleGVjOiBgY2RrIC0tcHJvZ3Jlc3MgZXZlbnRzIC0tcmVxdWlyZS1hcHByb3ZhbCBuZXZlciBkZXBsb3kgJHt0aGlzLnByb3BzLnN0YWNrUHJlZml4fS1mZWF0dXJlYCxcbiAgICB9KTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygnZGlmZjpmZWF0dXJlJywge1xuICAgICAgZXhlYzogYGNkayBkaWZmICR7dGhpcy5wcm9wcy5zdGFja1ByZWZpeH0tZmVhdHVyZWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ2Rlc3Ryb3k6ZmVhdHVyZScsIHtcbiAgICAgIGV4ZWM6IGBjZGsgZGVzdHJveSAke3RoaXMucHJvcHMuc3RhY2tQcmVmaXh9LWZlYXR1cmVgLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGFza3MgZm9yIHRoZSBnZW5lcmFsIHBpcGVsaW5lIHN0YWdlcyAoZGV2LCBwcm9kKSwgaW5jbHVkaW5nIGRlcGxveW1lbnQgYW5kIGNvbXBhcmluZyBjaGFuZ2VzIChkaWZmKS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0YWdlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBzdGFnZSAoZS5nLiwgJ2RldicsICdwcm9kJylcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlUGlwZWxpbmVTdGFnZShzdGFnZU5hbWU6IHN0cmluZykge1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKGBkZXBsb3k6JHtzdGFnZU5hbWV9YCwge1xuICAgICAgZXhlYzogYGNkayAtLWFwcCAke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9IC0tcHJvZ3Jlc3MgZXZlbnRzIC0tcmVxdWlyZS1hcHByb3ZhbCBuZXZlciBkZXBsb3kgJHt0aGlzLnByb3BzLnN0YWNrUHJlZml4fS0ke3N0YWdlTmFtZX1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKGBkaWZmOiR7c3RhZ2VOYW1lfWAsIHtcbiAgICAgIGV4ZWM6IGBjZGsgLS1hcHAgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fSBkaWZmICR7dGhpcy5wcm9wcy5zdGFja1ByZWZpeH0tJHtzdGFnZU5hbWV9YCxcbiAgICB9KTtcbiAgfVxufSJdfQ==
263
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGlwZWxpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBcUQ7QUFDckQsOENBQWtEO0FBQ2xELHFDQUF3RTtBQTBEeEU7OztHQUdHO0FBQ0gsSUFBWSxjQU9YO0FBUEQsV0FBWSxjQUFjO0lBQ3hCLDRCQUE0QjtJQUM1Qix1REFBTSxDQUFBO0lBQ04sb0NBQW9DO0lBQ3BDLHVEQUFNLENBQUE7SUFDTiwyQ0FBMkM7SUFDM0MsaUJBQWlCO0FBQ25CLENBQUMsRUFQVyxjQUFjLEdBQWQsc0JBQWMsS0FBZCxzQkFBYyxRQU96QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxjQUtYO0FBTEQsV0FBWSxjQUFjO0lBQ3hCLHdFQUF3RTtJQUN4RSxxRkFBcUIsQ0FBQTtJQUNyQix1RUFBdUU7SUFDdkUsaUZBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUxXLGNBQWMsR0FBZCxzQkFBYyxLQUFkLHNCQUFjLFFBS3pCO0FBeUREOzs7R0FHRztBQUNILE1BQWEsV0FBWSxTQUFRLGtCQUFTO0lBS3hDLFlBQW9CLEdBQStCLEVBQVUsS0FBeUI7UUFDcEYsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRE8sUUFBRyxHQUFILEdBQUcsQ0FBNEI7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFvQjtRQUdwRiwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQ2pCLHlCQUF5QixFQUN6QixrQkFBa0IsRUFDbEIsWUFBWSxDQUNiLENBQUM7UUFDRixvQkFBb0I7UUFDcEIsS0FBSztRQUVMLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDO1FBRWpELGdDQUFnQztRQUNoQyxRQUFRLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDcEIsS0FBSyxjQUFjLENBQUMsTUFBTTtnQkFDeEIsSUFBSSxDQUFDLE1BQU0s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UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUU7WUFDbkMsSUFBSSxFQUFFLFlBQVksSUFBSSxDQUFDLFdBQVcsVUFBVTtTQUM3QyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRTtZQUN0QyxJQUFJLEVBQUUsZUFBZSxJQUFJLENBQUMsV0FBVyxVQUFVO1NBQ2hELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSyxtQkFBbUIsQ0FBQyxTQUFpQjtRQUMzQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLFNBQVMsRUFBRSxFQUFFO1lBQzFDLElBQUksRUFBRSxhQUFhLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sc0RBQXNELElBQUksQ0FBQyxXQUFXLElBQUksU0FBUyxFQUFFO1NBQ2xJLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsU0FBUyxFQUFFLEVBQUU7WUFDeEMsSUFBSSxFQUFFLGFBQWEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxTQUFTLElBQUksQ0FBQyxXQUFXLElBQUksU0FBUyxFQUFFO1NBQ3JGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7WUFDM0IsU0FBUztZQUNULEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFpQyxDQUFDO1lBQy9ELFFBQVEsRUFBRTtnQkFDUixxQkFBcUIsU0FBUyxFQUFFO2FBQ2pDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7OztBQXRQVSxrQ0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVGV4dEZpbGUsIGF3c2NkayB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBQUk9KRU5fTUFSS0VSIH0gZnJvbSAncHJvamVuL2xpYi9jb21tb24nO1xuaW1wb3J0IHsgQmFzZUVuZ2luZSwgR2l0SHViRW5naW5lLCBHaXRodWJFbmdpbmVDb25maWcgfSBmcm9tICcuL2VuZ2luZSc7XG5cbi8qKlxuICogVGhlIEVudmlyb25tZW50IGludGVyZmFjZSBpcyBkZXNpZ25lZCB0byBob2xkIEFXUyByZWxhdGVkIGluZm9ybWF0aW9uXG4gKiBmb3IgYSBzcGVjaWZpYyBkZXBsb3ltZW50IGVudmlyb25tZW50IHdpdGhpbiB5b3VyIGluZnJhc3RydWN0dXJlLlxuICogRWFjaCBlbnZpcm9ubWVudCByZXF1aXJlcyBhIHNwZWNpZmljIGFjY291bnQgYW5kIHJlZ2lvbiBmb3IgaXRzIHJlc291cmNlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnZpcm9ubWVudCB7XG4gIC8qKlxuICAgKiBUaGUgQVdTIEFjY291bnQgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBlbnZpcm9ubWVudC4gSXQncyBpbXBvcnRhbnQgYmVjYXVzZVxuICAgKiBkaWZmZXJlbnQgc2VydmljZXMgb3IgZmVhdHVyZXMgY291bGQgaGF2ZSBkaXN0aW5jdCBwZXJtaXNzaW9ucyBhbmQgc2V0dGluZ3NcbiAgICogaW4gZGlmZmVyZW50IGFjY291bnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIFJlZ2lvbiBmb3IgdGhlIGVudmlyb25tZW50LiBUaGlzIGRldGVybWluZXMgd2hlcmUgeW91ciByZXNvdXJjZXNcbiAgICogYXJlIGNyZWF0ZWQgYW5kIHdoZXJlIHlvdXIgYXBwbGljYXRpb24gd2lsbCBydW4uIEl0IGNhbiBhZmZlY3QgbGF0ZW5jeSxcbiAgICogYXZhaWxhYmlsaXR5LCBhbmQgcHJpY2luZy5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBFbnZpcm9ubWVudE1hcCBpbnRlcmZhY2UgaXMgdXNlZCB0byBtYWludGFpbiBhIG1hcHBpbmcgb2YgZGlmZmVyZW50IHR5cGVzXG4gKiBvZiBlbnZpcm9ubWVudHMgdXNlZCBpbiB0aGUgYXBwbGljYXRpb24uIEVhY2ggdHlwZSBvZiBlbnZpcm9ubWVudCAtIHBlcnNvbmFsLFxuICogZmVhdHVyZSwgZGV2LCBhbmQgcHJvZCwgcmVwcmVzZW50cyBhIGRpZmZlcmVudCBzdGFnZSBvZiBkZXZlbG9wbWVudCBvciB1c2FnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnZpcm9ubWVudE1hcCB7XG4gIC8qKlxuICAgKiBUaGUgcGVyc29uYWwgZW52aXJvbm1lbnQgaXMgdXN1YWxseSB1c2VkIGZvciBpbmRpdmlkdWFsIGRldmVsb3BtZW50IGFuZFxuICAgKiB0ZXN0aW5nLCBhbGxvd2luZyBkZXZlbG9wZXJzIHRvIGZyZWVseSB0ZXN0IGFuZCBleHBlcmltZW50IHdpdGhvdXRcbiAgICogYWZmZWN0aW5nIHRoZSBzaGFyZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuXG4gICAqL1xuICByZWFkb25seSBwZXJzb25hbDogRW52aXJvbm1lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBmZWF0dXJlIGVudmlyb25tZW50IGlzIHR5cGljYWxseSB1c2VkIGZvciBkZXZlbG9waW5nIHNwZWNpZmljIGZlYXR1cmVzXG4gICAqIGluIGlzb2xhdGlvbiBmcm9tIHRoZSBtYWluIGNvZGViYXNlLiBUaGlzIGFsbG93cyBkZXZlbG9wZXJzIHRvIHdvcmsgb25cbiAgICogaW5kaXZpZHVhbCBmZWF0dXJlcyB3aXRob3V0IGltcGFjdGluZyB0aGUgc3RhYmlsaXR5IG9mIHRoZSBkZXYgb3IgcHJvZFxuICAgKiBlbnZpcm9ubWVudHMuXG4gICAqL1xuICByZWFkb25seSBmZWF0dXJlOiBFbnZpcm9ubWVudDtcblxuICAvKipcbiAgICogVGhlIGRldiBlbnZpcm9ubWVudCBpcyBhIHNoYXJlZCBlbnZpcm9ubWVudCB3aGVyZSBkZXZlbG9wZXJzIGludGVncmF0ZVxuICAgKiB0aGVpciBmZWF0dXJlIGNoYW5nZXMuIEl0IHJlcHJlc2VudHMgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBhcHBsaWNhdGlvblxuICAgKiBidXQgbWF5IG5vdCBiZSBhcyBzdGFibGUgYXMgdGhlIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQuXG4gICAqL1xuICByZWFkb25seSBkZXY6IEVudmlyb25tZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvZCBlbnZpcm9ubWVudCBpcyB3aGVyZSB0aGUgbGl2ZSwgdXNlci1mYWNpbmcgYXBwbGljYXRpb24gcnVucy5cbiAgICogSXQgc2hvdWxkIGJlIHN0YWJsZSBhbmQgb25seSByZWNlaXZlIHRob3JvdWdobHkgdGVzdGVkIGNoYW5nZXMuXG4gICAqL1xuICByZWFkb25seSBwcm9kOiBFbnZpcm9ubWVudDtcbn1cblxuLyoqXG4gKiBUaGUgQ0kvQ0QgdG9vbGluZyB1c2VkIHRvIHJ1biB5b3VyIHBpcGVsaW5lLlxuICogVGhlIGNvbXBvbmVudCB3aWxsIHJlbmRlciB3b3JrZmxvd3MgZm9yIHRoZSBnaXZlbiBzeXN0ZW1cbiAqL1xuZXhwb3J0IGVudW0gUGlwZWxpbmVFbmdpbmUge1xuICAvKiogQ3JlYXRlIEdpdEh1YiBhY3Rpb25zICovXG4gIEdJVEhVQixcbiAgLyoqIENyZWF0ZSBhIC5naXRsYWItY2kueWFtbCBmaWxlICovXG4gIEdJVExBQixcbiAgLy8gLyoqIENyZWF0ZSBBV1MgQ29kZUNhdGFseXN0IHdvcmtmbG93cyAqL1xuICAvLyBDT0RFX0NBVEFMWVNULFxufVxuXG4vKipcbiAqIERlc2NyaWJlcyB0aGUgdHlwZSBvZiBwaXBlbGluZSB0aGF0IHdpbGwgYmUgY3JlYXRlZFxuICovXG5leHBvcnQgZW51bSBEZXBsb3ltZW50VHlwZSB7XG4gIC8qKiBEZXBsb3kgZXZlcnkgY29tbWl0IGFzIGZhciBhcyBwb3NzaWJsZTsgaG9wZWZ1bGx5IGludG8gcHJvZHVjdGlvbiAqL1xuICBDT05USU5VT1VTX0RFUExPWU1FTlQsXG4gIC8qKiBCdWlsZCBldmVyeSBjb21taXQgYW5kIHByZXBhcmUgYWxsIGFzc2V0cyBmb3IgYSBsYXRlciBkZXBsb3ltZW50ICovXG4gIENPTlRJTlVPVVNfREVMSVZFUlksXG59XG5cbi8qKlxuICogVGhlIENES1BpcGVsaW5lT3B0aW9ucyBpbnRlcmZhY2UgaXMgZGVzaWduZWQgdG8gcHJvdmlkZSBjb25maWd1cmF0aW9uXG4gKiBvcHRpb25zIGZvciBhIENESyAoQ2xvdWQgRGV2ZWxvcG1lbnQgS2l0KSBwaXBlbGluZS4gSXQgYWxsb3dzIHRoZSBkZWZpbml0aW9uXG4gKiBvZiBzZXR0aW5ncyBzdWNoIGFzIHRoZSBzdGFjayBwcmVmaXggYW5kIHBhY2thZ2UgbmFtZXNwYWNlIHRvIGJlIHVzZWQgaW4gdGhlXG4gKiBBV1Mgc3RhY2ssIGFsb25nIHdpdGggdGhlIGVudmlyb25tZW50cyBjb25maWd1cmF0aW9uIHRvIGJlIHVzZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ0RLUGlwZWxpbmVPcHRpb25zIHtcblxuICAvKipcbiAgICogVGhpcyBmaWVsZCBpcyB1c2VkIHRvIGRlZmluZSBhIHByZWZpeCBmb3IgdGhlIEFXUyBTdGFjayByZXNvdXJjZXMgY3JlYXRlZFxuICAgKiBkdXJpbmcgdGhlIHBpcGVsaW5lJ3Mgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBwcm9qZWN0IG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrUHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGlzIGZpZWxkIGRldGVybWluZXMgdGhlIE5QTSBuYW1lc3BhY2UgdG8gYmUgdXNlZCB3aGVuIHBhY2thZ2luZyBDREsgY2xvdWRcbiAgICogYXNzZW1ibGllcy4gQSBuYW1lc3BhY2UgaGVscHMgZ3JvdXAgcmVsYXRlZCByZXNvdXJjZXMgdG9nZXRoZXIsIHByb3ZpZGluZ1xuICAgKiBiZXR0ZXIgb3JnYW5pemF0aW9uIGFuZCBlYXNlIG9mIG1hbmFnZW1lbnQuXG4gICAqL1xuICByZWFkb25seSBwa2dOYW1lc3BhY2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhpcyBpcyBhIG1hcCBvZiBlbnZpcm9ubWVudHMgdG8gYmUgdXNlZCBpbiB0aGUgcGlwZWxpbmUuIEl0IGFsbG93cyB0aGVcbiAgICogcGlwZWxpbmUgdG8gZGVwbG95IHRvIGRpZmZlcmVudCBlbnZpcm9ubWVudHMgYmFzZWQgb24gdGhlIHN0YWdlIG9mIHRoZVxuICAgKiBkZXBsb3ltZW50IHByb2Nlc3MsIHdoZXRoZXIgdGhhdCdzIGEgcGVyc29uYWwsIGZlYXR1cmUsIGRldiwgb3IgcHJvZCBzdGFnZS5cbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50czogRW52aXJvbm1lbnRNYXA7XG5cbiAgLyoqXG4gICAqIFRoaXMgZmllbGQgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIHBpcGVsaW5lIHRvIGNyZWF0ZS4gSWYgc2V0IHRvIENPTlRJTlVPVVNfREVQTE9ZTUVOVCxcbiAgICogZXZlcnkgY29tbWl0IGlzIGRlcGxveWVkIGFzIGZhciBhcyBwb3NzaWJsZSwgaG9wZWZ1bGx5IGludG8gcHJvZHVjdGlvbi4gSWYgc2V0IHRvXG4gICAqIENPTlRJTlVPVVNfREVMSVZFUlksIGV2ZXJ5IGNvbW1pdCBpcyBidWlsdCBhbmQgYWxsIGFzc2V0cyBhcmUgcHJlcGFyZWQgZm9yIGEgbGF0ZXIgZGVwbG95bWVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgQ09OVElOVU9VU19ERUxJVkVSWVxuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95bWVudFR5cGU/OiBEZXBsb3ltZW50VHlwZTtcblxuICAvKipcbiAgICogVGhpcyBmaWVsZCBkZXRlcm1pbmVzIHRoZSBDSS9DRCB0b29saW5nIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJ1biB0aGUgcGlwZWxpbmUuIFRoZSBjb21wb25lbnRcbiAgICogd2lsbCByZW5kZXIgd29ya2Zsb3dzIGZvciB0aGUgZ2l2ZW4gc3lzdGVtLiBPcHRpb25zIGluY2x1ZGUgR2l0SHViIGFuZCBHaXRMYWIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJpZXMgdG8gZGVyaXZlIGl0IGZyb20gdGhlIHByb2plY3RzIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGVuZ2luZT86IFBpcGVsaW5lRW5naW5lO1xuXG4gIHJlYWRvbmx5IGdpdGh1YkNvbmZpZz86IEdpdGh1YkVuZ2luZUNvbmZpZztcblxuICByZWFkb25seSBwcmVJbnN0YWxsQ29tbWFuZHM/OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgcHJlU3ludGhDb21tYW5kcz86IHN0cmluZ1tdO1xuICByZWFkb25seSBwb3N0U3ludGhDb21tYW5kcz86IHN0cmluZ1tdO1xuXG59XG5cbi8qKlxuICogVGhlIENES1BpcGVsaW5lIGNsYXNzIGV4dGVuZHMgdGhlIENvbXBvbmVudCBjbGFzcyBhbmQgc2V0cyB1cCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gZm9yIGRlcGxveWluZyBBV1MgQ0RLIChDbG91ZCBEZXZlbG9wbWVudCBLaXQpIGFwcGxpY2F0aW9ucyBhY3Jvc3MgbXVsdGlwbGUgc3RhZ2VzLlxuICogSXQgYWxzbyBtYW5hZ2VzIHRhc2tzIHN1Y2ggYXMgcHVibGlzaGluZyBDREsgYXNzZXRzLCBidW1waW5nIHZlcnNpb24gYmFzZWQgb24gZ2l0IHRhZ3MsIGFuZCBjbGVhbmluZyB1cCBjb25mbGljdGluZyB0YXNrcy5cbiAqL1xuZXhwb3J0IGNsYXNzIENES1BpcGVsaW5lIGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICBwdWJsaWMgcmVhZG9ubHkgc3RhY2tQcmVmaXg6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGVuZ2luZTogQmFzZUVuZ2luZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwcDogYXdzY2RrLkF3c0Nka1R5cGVTY3JpcHRBcHAsIHByaXZhdGUgcHJvcHM6IENES1BpcGVsaW5lT3B0aW9ucykge1xuICAgIHN1cGVyKGFwcCk7XG5cbiAgICAvLyBBZGQgZGV2ZWxvcG1lbnQgZGVwZW5kZW5jaWVzXG4gICAgdGhpcy5hcHAuYWRkRGV2RGVwcyhcbiAgICAgICdAdHlwZXMvc3RhbmRhcmQtdmVyc2lvbicsXG4gICAgICAnc3RhbmRhcmQtdmVyc2lvbicsXG4gICAgICAnY2RrLWFzc2V0cycsXG4gICAgKTtcbiAgICAvLyB0aGlzLmFwcC5hZGREZXBzKFxuICAgIC8vICk7XG5cbiAgICB0aGlzLnN0YWNrUHJlZml4ID0gcHJvcHMuc3RhY2tQcmVmaXggPz8gYXBwLm5hbWU7XG5cbiAgICAvLyBDcmVhdGUgZW5naW5lIGluc3RhbmNlIHRvIHVzZVxuICAgIHN3aXRjaCAocHJvcHMuZW5naW5lKSB7XG4gICAgICBjYXNlIFBpcGVsaW5lRW5naW5lLkdJVEhVQjpcbiAgICAgICAgdGhpcy5lbmdpbmUgPSBuZXcgR2l0SHViRW5naW5lKGFwcCwgcHJvcHMsIHRoaXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlbmdpbmUnKTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmVzIHRoZSBjb21waWxlZCBjbG91ZCBhc3NlbWJseSBiZWZvcmUgZWFjaCBzeW50aFxuICAgIHRoaXMucHJvamVjdC50YXNrcy50cnlGaW5kKCdzeW50aCcpPy5wcmVwZW5kRXhlYyhgcm0gLXJmICR7dGhpcy5hcHAuY2RrQ29uZmlnLmNka291dH1gKTtcbiAgICB0aGlzLnByb2plY3QudGFza3MudHJ5RmluZCgnc3ludGg6c2lsZW50Jyk/LnByZXBlbmRFeGVjKGBybSAtcmYgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fWApO1xuXG4gICAgLy8gUmVtb3ZlIHRhc2tzIHRoYXQgbWlnaHQgY29uZmxpY3Qgd2l0aCB0aGUgcGlwZWxpbmUgcHJvY2Vzc1xuICAgIHRoaXMucHJvamVjdC5yZW1vdmVUYXNrKCdkZXBsb3knKTtcbiAgICB0aGlzLnByb2plY3QucmVtb3ZlVGFzaygnZGlmZicpO1xuICAgIHRoaXMucHJvamVjdC5yZW1vdmVUYXNrKCdkZXN0cm95Jyk7XG4gICAgdGhpcy5wcm9qZWN0LnJlbW92ZVRhc2soJ3dhdGNoJyk7XG5cbiAgICB0aGlzLmNyZWF0ZVN5bnRoU3RhZ2UoKTtcblxuICAgIC8vIENyZWF0ZXMgZGlmZmVyZW50IGRlcGxveW1lbnQgc3RhZ2VzXG4gICAgdGhpcy5jcmVhdGVQZXJzb25hbFN0YWdlKCk7XG4gICAgdGhpcy5jcmVhdGVGZWF0dXJlU3RhZ2UoKTtcbiAgICB0aGlzLmNyZWF0ZVBpcGVsaW5lU3RhZ2UoJ2RldicpO1xuICAgIHRoaXMuY3JlYXRlUGlwZWxpbmVTdGFnZSgncHJvZCcpO1xuXG4gICAgLy8gQ3JlYXRlcyB0YXNrcyB0byBoYW5kbGUgdGhlIHJlbGVhc2UgcHJvY2Vzc1xuICAgIHRoaXMuY3JlYXRlUmVsZWFzZVRhc2tzKCk7XG5cbiAgICAvLyBDcmVhdGVzIGEgc3BlY2lhbGl6ZWQgQ0RLIEFwcCBjbGFzc1xuICAgIHRoaXMuY3JlYXRlQXBwbGljYXRpb25FbnRyeXBvaW50KCk7XG5cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU3ludGhTdGFnZSgpIHtcbiAgICB0aGlzLmVuZ2luZS5jcmVhdGVTeW50aCh7XG4gICAgICBjb21tYW5kczogW1xuICAgICAgICAuLi4odGhpcy5wcm9wcy5wcmVJbnN0YWxsQ29tbWFuZHMgPz8gW10pLFxuICAgICAgICBgbnB4IHByb2plbiAke3RoaXMuYXBwLnBhY2thZ2UuaW5zdGFsbENpVGFzay5uYW1lfWAsXG4gICAgICAgIC4uLih0aGlzLnByb3BzLnByZVN5bnRoQ29tbWFuZHMgPz8gW10pLFxuICAgICAgICAnbnB4IHByb2plbiBidWlsZCcsXG4gICAgICAgIC4uLih0aGlzLnByb3BzLnBvc3RTeW50aENvbW1hbmRzID8/IFtdKSxcbiAgICAgIF0sXG4gICAgfSk7XG4gICAgdGhpcy5lbmdpbmUuY3JlYXRlQXNzZXRVcGxvYWQoe1xuICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgLi4uKHRoaXMucHJvcHMucHJlSW5zdGFsbENvbW1hbmRzID8/IFtdKSxcbiAgICAgICAgYG5weCBwcm9qZW4gJHt0aGlzLmFwcC5wYWNrYWdlLmluc3RhbGxDaVRhc2submFtZX1gLFxuICAgICAgICAnbnB4IHByb2plbiBwdWJsaXNoOmFzc2V0cycsXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBhcHBsaWNhdGlvbiwgaW5jbHVkaW5nIGludGVyZmFjZXMgYW5kIGNsYXNzZXNcbiAgICogbmVjZXNzYXJ5IHRvIHNldCB1cCB0aGUgcGlwZWxpbmUgYW5kIGRlZmluZSB0aGUgQVdTIENESyBzdGFja3MgZm9yIGRpZmZlcmVudCBlbnZpcm9ubWVudHMuXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUFwcGxpY2F0aW9uRW50cnlwb2ludCgpIHtcbiAgICBjb25zdCBhcHBGaWxlID0gbmV3IFRleHRGaWxlKHRoaXMucHJvamVjdCwgYCR7dGhpcy5hcHAuc3JjZGlyfS9hcHAudHNgKTtcbiAgICBhcHBGaWxlLmFkZExpbmUoYC8vICR7UFJPSkVOX01BUktFUn1cbi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBBcHAsIEFwcFByb3BzLCBTdGFjaywgU3RhY2tQcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliJztcblxuLyoqXG4gKiBQaXBlbGluZUFwcFByb3BzIGlzIGFuIGV4dGVuc2lvbiBvZiBBcHBQcm9wcywgd2hpY2ggaXMgcGFydCBvZiB0aGUgQVdTIENESyBjb3JlLlxuICogSXQgaW5jbHVkZXMgb3B0aW9uYWwgZnVuY3Rpb25zIHRvIHByb3ZpZGUgQVdTIFN0YWNrcyBmb3IgZGlmZmVyZW50IHN0YWdlcy5cbiAqXG4gKiBVc2UgdGhlc2UgZnVuY3Rpb25zIHRvIGluc3RhbnRpYXRlIHlvdXIgYXBwbGljYXRpb24gc3RhY2tzIHdpdGggdGhlIHBhcmFtZXRlcnMgZm9yXG4gKiBlYWNoIHN0YWdlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVBcHBQcm9wcyBleHRlbmRzIEFwcFByb3BzIHtcbiAgLyoqIFRoaXMgb3B0aW9uYWwgZnVuY3Rpb24sIGlmIHByb3ZpZGVkLCB3aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgYSBkZXZlbG9wbWVudCBzdGFjay4gKi9cbiAgcHJvdmlkZURldlN0YWNrPzogKGFwcDogQXBwLCBzdGFja0lkOiBzdHJpbmcsIHByb3BzOiBQaXBlbGluZUFwcFN0YWNrUHJvcHMpID0+IFN0YWNrO1xuXG4gIC8qKiBUaGlzIG9wdGlvbmFsIGZ1bmN0aW9uLCBpZiBwcm92aWRlZCwgd2lsbCBiZSB1c2VkIHRvIGdlbmVyYXRlIGEgcHJvZHVjdGlvbiBzdGFjay4gKi9cbiAgcHJvdmlkZVByb2RTdGFjaz86IChhcHA6IEFwcCwgc3RhY2tJZDogc3RyaW5nLCBwcm9wczogUGlwZWxpbmVBcHBTdGFja1Byb3BzKSA9PiBTdGFjaztcblxuICAvKiogVGhpcyBvcHRpb25hbCBmdW5jdGlvbiwgaWYgcHJvdmlkZWQsIHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSBhIHBlcnNvbmFsIHN0YWNrLiAqL1xuICBwcm92aWRlUGVyc29uYWxTdGFjaz86IChhcHA6IEFwcCwgc3RhY2tJZDogc3RyaW5nLCBwcm9wczogUGlwZWxpbmVBcHBTdGFja1Byb3BzKSA9PiBTdGFjaztcblxuICAvKiogVGhpcyBvcHRpb25hbCBmdW5jdGlvbiwgaWYgcHJvdmlkZWQsIHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSBhIGZlYXR1cmUgc3RhY2suICovXG4gIHByb3ZpZGVGZWF0dXJlU3RhY2s/OiAoYXBwOiBBcHAsIHN0YWNrSWQ6IHN0cmluZywgcHJvcHM6IFBpcGVsaW5lQXBwU3RhY2tQcm9wcykgPT4gU3RhY2s7XG59XG5cbi8qKlxuICogUGlwZWxpbmVBcHBTdGFja1Byb3BzIGlzIGFuIGV4dGVuc2lvbiBvZiBTdGFja1Byb3BzLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBBV1MgQ0RLIGNvcmUuXG4gKiBJdCBpbmNsdWRlcyBhbiBhZGRpdGlvbmFsIHByb3BlcnR5IHRvIHNwZWNpZnkgdGhlIHN0YWdlIG5hbWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVBcHBTdGFja1Byb3BzIGV4dGVuZHMgU3RhY2tQcm9wcyB7XG4gIHN0YWdlTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBQaXBlbGluZUFwcCBjbGFzcyBleHRlbmRzIHRoZSBBcHAgY2xhc3MgZnJvbSBBV1MgQ0RLIGFuZCBvdmVycmlkZXMgdGhlIGNvbnN0cnVjdG9yIHRvIHN1cHBvcnRcbiAqIGRpZmZlcmVudCBzdGFnZXMgb2YgdGhlIGFwcGxpY2F0aW9uIChkZXZlbG9wbWVudCwgcHJvZHVjdGlvbiwgcGVyc29uYWwsIGZlYXR1cmUpIGJ5IGludm9raW5nIHRoZSBwcm92aWRlZFxuICogc3RhY2stcHJvdmlkaW5nIGZ1bmN0aW9ucyBmcm9tIHRoZSBwcm9wcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBpcGVsaW5lQXBwIGV4dGVuZHMgQXBwIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IFBpcGVsaW5lQXBwUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAvLyBJZiBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGZvciBjcmVhdGluZyBhIGRldmVsb3BtZW50IHN0YWNrLCBpdCBpcyBjYWxsZWQgd2l0aCBuZWNlc3NhcnkgYXJndW1lbnRzLlxuICAgIGlmIChwcm9wcy5wcm92aWRlRGV2U3RhY2spIHtcbiAgICAgIHByb3BzLnByb3ZpZGVEZXZTdGFjayh0aGlzLCAnJHt0aGlzLnN0YWNrUHJlZml4fS1kZXYnLCB7IGVudjogJHtKU09OLnN0cmluZ2lmeSh0aGlzLnByb3BzLmVudmlyb25tZW50cy5kZXYpfSwgc3RhY2tOYW1lOiAnJHt0aGlzLnN0YWNrUHJlZml4fS1kZXYnLCBzdGFnZU5hbWU6ICdkZXYnIH0pO1xuICAgIH1cblxuICAgIC8vIElmIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQgZm9yIGNyZWF0aW5nIGEgcHJvZHVjdGlvbiBzdGFjaywgaXQgaXMgY2FsbGVkIHdpdGggbmVjZXNzYXJ5IGFyZ3VtZW50cy5cbiAgICBpZiAocHJvcHMucHJvdmlkZVByb2RTdGFjaykge1xuICAgICAgcHJvcHMucHJvdmlkZVByb2RTdGFjayh0aGlzLCAnJHt0aGlzLnN0YWNrUHJlZml4fS1wcm9kJywgeyBlbnY6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5wcm9wcy5lbnZpcm9ubWVudHMucHJvZCl9LCBzdGFja05hbWU6ICcke3RoaXMuc3RhY2tQcmVmaXh9LXByb2QnLCBzdGFnZU5hbWU6ICdwcm9kJyB9KTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgVVNFUiBpcyBzZXQgYW5kIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQgZm9yIGNyZWF0aW5nIGEgcGVyc29uYWwgc3RhY2ssIGl0IGlzIGNhbGxlZCB3aXRoIG5lY2Vzc2FyeSBhcmd1bWVudHMuXG4gICAgaWYgKHByb3BzLnByb3ZpZGVQZXJzb25hbFN0YWNrICYmIHByb2Nlc3MuZW52LlVTRVIpIHtcbiAgICAgIGNvbnN0IHN0YWdlTmFtZSA9ICdwZXJzb25hbC0nICsgcHJvY2Vzcy5lbnYuVVNFUi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xcXFxcXC8vZywgJy0nKTtcbiAgICAgIHByb3BzLnByb3ZpZGVQZXJzb25hbFN0YWNrKHRoaXMsICcke3RoaXMuc3RhY2tQcmVmaXh9LXBlcnNvbmFsJywgeyBlbnY6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5wcm9wcy5lbnZpcm9ubWVudHMucGVyc29uYWwpfSwgc3RhY2tOYW1lOiBcXGAke3RoaXMuc3RhY2tQcmVmaXh9LVxcJHtzdGFnZU5hbWV9XFxgLCBzdGFnZU5hbWUgfSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEJSQU5DSCBpcyBzZXQgYW5kIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQgZm9yIGNyZWF0aW5nIGEgZmVhdHVyZSBzdGFjaywgaXQgaXMgY2FsbGVkIHdpdGggbmVjZXNzYXJ5IGFyZ3VtZW50cy5cbiAgICBpZiAocHJvcHMucHJvdmlkZUZlYXR1cmVTdGFjayAmJiBwcm9jZXNzLmVudi5CUkFOQ0gpIHtcbiAgICAgIGNvbnN0IHN0YWdlTmFtZSA9ICdmZWF0dXJlLScgKyBwcm9jZXNzLmVudi5CUkFOQ0gudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXFxcXFwvL2csICctJyk7XG4gICAgICBwcm9wcy5wcm92aWRlRmVhdHVyZVN0YWNrKHRoaXMsICcke3RoaXMuc3RhY2tQcmVmaXh9LWZlYXR1cmUnLCB7IGVudjogJHtKU09OLnN0cmluZ2lmeSh0aGlzLnByb3BzLmVudmlyb25tZW50cy5mZWF0dXJlKX0sIHN0YWNrTmFtZTogXFxgJHt0aGlzLnN0YWNrUHJlZml4fS1cXCR7c3RhZ2VOYW1lfVxcYCwgc3RhZ2VOYW1lIH0pO1xuICAgIH1cbiAgfVxufVxuYCk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2Qgc2V0cyB1cCB0YXNrcyB0byBwdWJsaXNoIENESyBhc3NldHMgdG8gYWxsIGFjY291bnRzIGFuZCBoYW5kbGUgdmVyc2lvbmluZywgaW5jbHVkaW5nIGJ1bXBpbmcgdGhlIHZlcnNpb25cbiAgICogYmFzZWQgb24gdGhlIGxhdGVzdCBnaXQgdGFnIGFuZCBwdXNoaW5nIHRoZSBDREsgYXNzZW1ibHkgdG8gdGhlIHBhY2thZ2UgcmVwb3NpdG9yeS5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlUmVsZWFzZVRhc2tzKCkge1xuICAgIC8vIFRhc2sgdG8gcHVibGlzaCB0aGUgQ0RLIGFzc2V0cyB0byBhbGwgYWNjb3VudHNcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygncHVibGlzaDphc3NldHMnLCB7XG4gICAgICBzdGVwczogW1xuICAgICAgICB7XG4gICAgICAgICAgZXhlYzogYG5weCBjZGstYXNzZXRzIC1wICR7dGhpcy5hcHAuY2RrQ29uZmlnLmNka291dH0vJHt0aGlzLnN0YWNrUHJlZml4fS1kZXYuYXNzZXRzLmpzb24gcHVibGlzaGAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBleGVjOiBgbnB4IGNkay1hc3NldHMgLXAgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fS8ke3RoaXMuc3RhY2tQcmVmaXh9LXByb2QuYXNzZXRzLmpzb24gcHVibGlzaGAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ2J1bXAnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ0J1bXBzIHZlcnNpb24gYmFzZWQgb24gbGF0ZXN0IGdpdCB0YWcnLFxuICAgICAgc3RlcHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGV4ZWM6ICdwaXBlbGluZXMtcmVsZWFzZSBidW1wJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGV4ZWM6ICdnaXQgcHVzaCAtLXRhZ3MnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygncmVsZWFzZTpwdXNoLWFzc2VtYmx5Jywge1xuICAgICAgc3RlcHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGV4ZWM6IGBwaXBlbGluZXMtcmVsZWFzZSBjcmVhdGUtbWFuaWZlc3QgXCIke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9XCIgIFwiJHt0aGlzLnByb3BzLnBrZ05hbWVzcGFjZX1cImAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjd2Q6IHRoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXQsXG4gICAgICAgICAgZXhlYzogJ25wbSB2ZXJzaW9uIC0tbm8tZ2l0LXRhZy12ZXJzaW9uIGZyb20tZ2l0JyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGN3ZDogdGhpcy5hcHAuY2RrQ29uZmlnLmNka291dCxcbiAgICAgICAgICBleGVjOiAnbnBtIHB1Ymxpc2gnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIHRhc2tzIGZvciB0aGUgcGVyc29uYWwgZGVwbG95bWVudCBzdGFnZSwgaW5jbHVkaW5nIGRlcGxveW1lbnQsIHdhdGNoaW5nIGZvciBjaGFuZ2VzLFxuICAgKiBjb21wYXJpbmcgY2hhbmdlcyAoZGlmZiksIGFuZCBkZXN0cm95aW5nIHRoZSBzdGFjayB3aGVuIG5vIGxvbmdlciBuZWVkZWQuXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZVBlcnNvbmFsU3RhZ2UoKSB7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ2RlcGxveTpwZXJzb25hbCcsIHtcbiAgICAgIGV4ZWM6IGBjZGsgZGVwbG95ICR7dGhpcy5zdGFja1ByZWZpeH0tcGVyc29uYWxgLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCd3YXRjaDpwZXJzb25hbCcsIHtcbiAgICAgIGV4ZWM6IGBjZGsgZGVwbG95IC0td2F0Y2ggLS1ob3Rzd2FwICR7dGhpcy5zdGFja1ByZWZpeH0tcGVyc29uYWxgLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCdkaWZmOnBlcnNvbmFsJywge1xuICAgICAgZXhlYzogYGNkayBkaWZmICR7dGhpcy5zdGFja1ByZWZpeH0tcGVyc29uYWxgLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCdkZXN0cm95OnBlcnNvbmFsJywge1xuICAgICAgZXhlYzogYGNkayBkZXN0cm95ICR7dGhpcy5zdGFja1ByZWZpeH0tcGVyc29uYWxgLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGFza3MgZm9yIHRoZSBmZWF0dXJlIGRlcGxveW1lbnQgc3RhZ2UsIGluY2x1ZGluZyBkZXBsb3ltZW50LCBjb21wYXJpbmcgY2hhbmdlcyAoZGlmZiksXG4gICAqIGFuZCBkZXN0cm95aW5nIHRoZSBzdGFjayB3aGVuIG5vIGxvbmdlciBuZWVkZWQuXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUZlYXR1cmVTdGFnZSgpIHtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygnZGVwbG95OmZlYXR1cmUnLCB7XG4gICAgICBleGVjOiBgY2RrIC0tcHJvZ3Jlc3MgZXZlbnRzIC0tcmVxdWlyZS1hcHByb3ZhbCBuZXZlciBkZXBsb3kgJHt0aGlzLnN0YWNrUHJlZml4fS1mZWF0dXJlYCxcbiAgICB9KTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygnZGlmZjpmZWF0dXJlJywge1xuICAgICAgZXhlYzogYGNkayBkaWZmICR7dGhpcy5zdGFja1ByZWZpeH0tZmVhdHVyZWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ2Rlc3Ryb3k6ZmVhdHVyZScsIHtcbiAgICAgIGV4ZWM6IGBjZGsgZGVzdHJveSAke3RoaXMuc3RhY2tQcmVmaXh9LWZlYXR1cmVgLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGFza3MgZm9yIHRoZSBnZW5lcmFsIHBpcGVsaW5lIHN0YWdlcyAoZGV2LCBwcm9kKSwgaW5jbHVkaW5nIGRlcGxveW1lbnQgYW5kIGNvbXBhcmluZyBjaGFuZ2VzIChkaWZmKS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0YWdlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBzdGFnZSAoZS5nLiwgJ2RldicsICdwcm9kJylcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlUGlwZWxpbmVTdGFnZShzdGFnZU5hbWU6IHN0cmluZykge1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKGBkZXBsb3k6JHtzdGFnZU5hbWV9YCwge1xuICAgICAgZXhlYzogYGNkayAtLWFwcCAke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9IC0tcHJvZ3Jlc3MgZXZlbnRzIC0tcmVxdWlyZS1hcHByb3ZhbCBuZXZlciBkZXBsb3kgJHt0aGlzLnN0YWNrUHJlZml4fS0ke3N0YWdlTmFtZX1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKGBkaWZmOiR7c3RhZ2VOYW1lfWAsIHtcbiAgICAgIGV4ZWM6IGBjZGsgLS1hcHAgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fSBkaWZmICR7dGhpcy5zdGFja1ByZWZpeH0tJHtzdGFnZU5hbWV9YCxcbiAgICB9KTtcblxuICAgIHRoaXMuZW5naW5lLmNyZWF0ZURlcGxveW1lbnQoe1xuICAgICAgc3RhZ2VOYW1lLFxuICAgICAgZW52OiB0aGlzLnByb3BzLmVudmlyb25tZW50c1tzdGFnZU5hbWUgYXMga2V5b2YgRW52aXJvbm1lbnRNYXBdLFxuICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgYG5weCBwcm9qZW4gZGVwbG95OiR7c3RhZ2VOYW1lfWAsXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG59Il19
package/package.json CHANGED
@@ -73,7 +73,7 @@
73
73
  ],
74
74
  "main": "lib/index.js",
75
75
  "license": "Apache-2.0",
76
- "version": "0.0.2",
76
+ "version": "0.0.3",
77
77
  "jest": {
78
78
  "testMatch": [
79
79
  "<rootDir>/src/**/__tests__/**/*.ts?(x)",