@rio-cloud/cdk-v2-constructs 6.2.1 → 6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,8 @@
1
1
  import { Environment, Stack } from 'aws-cdk-lib';
2
2
  import { InstanceType } from 'aws-cdk-lib/aws-ec2';
3
3
  import { IRole } from 'aws-cdk-lib/aws-iam';
4
- import { StringParameter } from 'aws-cdk-lib/aws-ssm';
4
+ import { IBucket } from 'aws-cdk-lib/aws-s3';
5
+ import { IStringParameter } from 'aws-cdk-lib/aws-ssm';
5
6
  import { Construct } from 'constructs';
6
7
  /**
7
8
  * The GitLabRunnerProps require the VPC ID, a defined environment of account and region, optional
@@ -10,8 +11,9 @@ import { Construct } from 'constructs';
10
11
  */
11
12
  export interface GitLabRunnerProps {
12
13
  readonly env: Environment;
13
- readonly runnersWorkerProps?: GitlabRunnerWorkerProps[];
14
+ readonly runnersWorkerProps?: GitlabRunnerWorkerProps;
14
15
  readonly managerInstanceType?: InstanceType;
16
+ readonly cache: IBucket;
15
17
  }
16
18
  /**
17
19
  * The GitlabRunnerWorkerProps interface provides a simplified GitLab Runner worker configuration
@@ -21,23 +23,23 @@ export interface GitLabRunnerProps {
21
23
  */
22
24
  export interface GitlabRunnerWorkerProps {
23
25
  /** The SSM StringParameter with the registered runner token */
24
- token: StringParameter;
26
+ readonly token: IStringParameter;
25
27
  /** The GitLab instance URL, either https://gitlab.cicd.man or https://gitlab.collaborationlayer-traton.com */
26
- gitInstanceUrl: GitlabInstanceUrl;
28
+ readonly gitInstanceUrl: GitlabInstanceUrl;
27
29
  /** The instance type for the runner worker */
28
- instanceType: InstanceType;
30
+ readonly instanceType: InstanceType;
29
31
  /** The desired max spot price */
30
- spotPrice: number;
32
+ readonly spotPrice: number;
31
33
  /** Whether to use spot instance or not, Requires ServiceLinked Role for EC2 Spot to be deployed in the account */
32
- requestSpotPrice: boolean;
34
+ readonly requestSpotPrice: boolean;
33
35
  /** The default role for the runner worker when spawned */
34
- defaultWorkerRole: IRole;
36
+ readonly defaultWorkerRole: IRole;
35
37
  /** The maximum number of builds for an instance before it has to be decommissioned. Default 10 */
36
- maxBuilds?: number;
38
+ readonly maxBuilds?: number;
37
39
  /** The maximum number of instances to keep idle for new incoming jobs. Default 5 */
38
- maxIdleInstance?: number;
40
+ readonly maxIdleInstance?: number;
39
41
  /** The maximum idle time seconds for an instance. Default 900 seconds */
40
- maxIdleTime?: number;
42
+ readonly maxIdleTime?: number;
41
43
  }
42
44
  export type GitlabInstanceUrl = 'https://gitlab.cicd.man' | 'https://gitlab.collaborationlayer-traton.com';
43
45
  /**
@@ -48,34 +50,48 @@ export type GitlabInstanceUrl = 'https://gitlab.cicd.man' | 'https://gitlab.coll
48
50
  * minimal configuration with runner spot instance:
49
51
  * ```ts
50
52
  * new SpotServiceLinkedRole(stack, 'SpotLinkedRole');
53
+ * const myBucket = new Bucket(stack, 'MyShareRunnerCache', {
54
+ * enforceSSL: true,
55
+ * publicReadAccess: false,
56
+ * encryption: BucketEncryption.S3_MANAGED,
57
+ * lifecycleRules: [
58
+ * {
59
+ * enabled: true,
60
+ * expiration: Duration.days(30),
61
+ * },
62
+ * ],
63
+ * });
51
64
  * new GitlabRunner(stack, 'GitLabRunner', {
52
- * env: {account: '123456789012', region: 'eu-west-1'}
65
+ * env: {account: '123456789012', region: 'eu-west-1'},
66
+ * cache: myBucket // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners
53
67
  * });
54
68
  *```
55
69
  * recommended:
56
70
  * ```ts
57
71
  * new SpotServiceLinkedRole(stack, 'SpotLinkedRole');
58
72
  * const runnerRoles = new RunnerRoles(stack, 'RunnerRoles', {env: {account: '123456789012', region: 'eu-west-1'}});
73
+ * const myBucket = new Bucket(stack, 'MyShareRunnerCache', {
74
+ * enforceSSL: true,
75
+ * publicReadAccess: false,
76
+ * encryption: BucketEncryption.S3_MANAGED,
77
+ * lifecycleRules: [
78
+ * {
79
+ * enabled: true,
80
+ * expiration: Duration.days(30),
81
+ * },
82
+ * ],
83
+ * });
59
84
  * new GitlabRunner(stack, 'GitLabRunner', {
60
85
  * env: {account: '123456789012', region: 'eu-west-1'},
61
- * runnersWorkerProps: [
62
- * {
63
- * token: myTokenForTaggedRunner1, // with this runner we only want to run jobs that require more power
64
- * gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
65
- * instanceType: InstanceType.of(InstanceClass.M7I_FLEX, InstanceSize.XLARGE), // exemplary larger runner
66
- * spotPrice: 0.2, // exemplary spot price
67
- * requestSpotPrice: true,
68
- * defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
69
- * },
70
- * {
71
- * token: myTokenForTaggedRunner2, // with this runner we want to run all generic jobs that do not require much processing power
72
- * gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
73
- * instanceType: InstanceType.of(InstanceClass.T3, InstanceSize.MEDIUM), // exemplary smaller runner
74
- * spotPrice: 0.044, // exemplary spot price
75
- * requestSpotPrice: true,
76
- * defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
77
- * },
78
- * ],
86
+ * cache: myBucket // // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners
87
+ * runnersWorkerProps: {
88
+ * token: myTokenForTaggedRunner1, // with this runner we only want to run jobs that require more power
89
+ * gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
90
+ * instanceType: InstanceType.of(InstanceClass.M7I_FLEX, InstanceSize.XLARGE), // exemplary larger runner
91
+ * spotPrice: 0.2, // exemplary spot price
92
+ * requestSpotPrice: true,
93
+ * defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
94
+ * },
79
95
  * });
80
96
  * ```
81
97
  */
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
+ var _a;
2
3
  Object.defineProperty(exports, "__esModule", { value: true });
3
4
  exports.GitlabRunner = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
4
6
  // eslint-disable-next-line import/no-extraneous-dependencies
5
7
  const cdk_autoscaling_gitlab_runner_1 = require("@pepperize/cdk-autoscaling-gitlab-runner");
6
8
  const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
@@ -15,34 +17,48 @@ const rio_landing_zone_1 = require("../../../rio-landing-zone");
15
17
  * minimal configuration with runner spot instance:
16
18
  * ```ts
17
19
  * new SpotServiceLinkedRole(stack, 'SpotLinkedRole');
20
+ * const myBucket = new Bucket(stack, 'MyShareRunnerCache', {
21
+ * enforceSSL: true,
22
+ * publicReadAccess: false,
23
+ * encryption: BucketEncryption.S3_MANAGED,
24
+ * lifecycleRules: [
25
+ * {
26
+ * enabled: true,
27
+ * expiration: Duration.days(30),
28
+ * },
29
+ * ],
30
+ * });
18
31
  * new GitlabRunner(stack, 'GitLabRunner', {
19
- * env: {account: '123456789012', region: 'eu-west-1'}
32
+ * env: {account: '123456789012', region: 'eu-west-1'},
33
+ * cache: myBucket // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners
20
34
  * });
21
35
  *```
22
36
  * recommended:
23
37
  * ```ts
24
38
  * new SpotServiceLinkedRole(stack, 'SpotLinkedRole');
25
39
  * const runnerRoles = new RunnerRoles(stack, 'RunnerRoles', {env: {account: '123456789012', region: 'eu-west-1'}});
40
+ * const myBucket = new Bucket(stack, 'MyShareRunnerCache', {
41
+ * enforceSSL: true,
42
+ * publicReadAccess: false,
43
+ * encryption: BucketEncryption.S3_MANAGED,
44
+ * lifecycleRules: [
45
+ * {
46
+ * enabled: true,
47
+ * expiration: Duration.days(30),
48
+ * },
49
+ * ],
50
+ * });
26
51
  * new GitlabRunner(stack, 'GitLabRunner', {
27
52
  * env: {account: '123456789012', region: 'eu-west-1'},
28
- * runnersWorkerProps: [
29
- * {
30
- * token: myTokenForTaggedRunner1, // with this runner we only want to run jobs that require more power
31
- * gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
32
- * instanceType: InstanceType.of(InstanceClass.M7I_FLEX, InstanceSize.XLARGE), // exemplary larger runner
33
- * spotPrice: 0.2, // exemplary spot price
34
- * requestSpotPrice: true,
35
- * defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
36
- * },
37
- * {
38
- * token: myTokenForTaggedRunner2, // with this runner we want to run all generic jobs that do not require much processing power
39
- * gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
40
- * instanceType: InstanceType.of(InstanceClass.T3, InstanceSize.MEDIUM), // exemplary smaller runner
41
- * spotPrice: 0.044, // exemplary spot price
42
- * requestSpotPrice: true,
43
- * defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
44
- * },
45
- * ],
53
+ * cache: myBucket // // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners
54
+ * runnersWorkerProps: {
55
+ * token: myTokenForTaggedRunner1, // with this runner we only want to run jobs that require more power
56
+ * gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
57
+ * instanceType: InstanceType.of(InstanceClass.M7I_FLEX, InstanceSize.XLARGE), // exemplary larger runner
58
+ * spotPrice: 0.2, // exemplary spot price
59
+ * requestSpotPrice: true,
60
+ * defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
61
+ * },
46
62
  * });
47
63
  * ```
48
64
  */
@@ -50,79 +66,86 @@ class GitlabRunner extends constructs_1.Construct {
50
66
  constructor(scope, id, props) {
51
67
  super(scope, id);
52
68
  this.autoscalingConfig = [{
53
- periods: ['* * 7-24 * * mon-fri *'],
69
+ periods: ['* * 7-22 * * mon-fri *'],
54
70
  timezone: 'Europe/Berlin',
55
71
  }];
56
72
  const vpc = rio_landing_zone_1.RioLandingZone.getDefaultVpc(scope);
57
- const runnerConfig = props.runnersWorkerProps ?
58
- this.createWorkerConfigurations(props.runnersWorkerProps, props.env) :
59
- this.getDefaultRunnerWorkerConfig(props.env);
60
- const managerInstance = props.managerInstanceType ?? aws_ec2_1.InstanceType.of(aws_ec2_1.InstanceClass.T3, aws_ec2_1.InstanceSize.MICRO);
61
- new cdk_autoscaling_gitlab_runner_1.GitlabRunnerAutoscaling(scope, `GLR${scope.stackName}`, {
62
- runners: runnerConfig,
73
+ const runnerConfig = props.runnersWorkerProps
74
+ ? this.createWorkerConfigurations(props.runnersWorkerProps, props.env)
75
+ : this.getDefaultRunnerWorkerConfig(props.env);
76
+ const managerInstance = props.managerInstanceType ??
77
+ aws_ec2_1.InstanceType.of(aws_ec2_1.InstanceClass.T3, aws_ec2_1.InstanceSize.MICRO);
78
+ const runner = new cdk_autoscaling_gitlab_runner_1.GitlabRunnerAutoscaling(scope, `GLR${scope.stackName}`, {
79
+ runners: [runnerConfig],
63
80
  network: {
64
81
  vpc: vpc,
65
82
  },
66
83
  manager: {
67
84
  instanceType: managerInstance,
68
85
  },
86
+ cache: { bucket: props.cache },
69
87
  checkInterval: 30, // check every 30s for pending jobs
70
88
  concurrent: 300, // Global limit of concurrent jobs,
71
89
  });
90
+ // due to the new registration process we have to register the runner by running explicit commands on start of the manager
91
+ runner.manager.userData.addCommands('cp /etc/gitlab-runner/config.toml /etc/gitlab-runner/config_back.toml', // avoid toml merge conflicts
92
+ `gitlab-runner register --non-interactive --template-config /etc/gitlab-runner/config_back.toml --token ${props.runnersWorkerProps?.token.stringValue}`, 'gitlab-runner restart');
72
93
  }
73
94
  createWorkerConfigurations(workerProps, env) {
74
- return workerProps.map(val => ({
75
- token: val.token,
76
- role: val.defaultWorkerRole,
95
+ return {
96
+ token: workerProps.token,
97
+ role: workerProps.defaultWorkerRole,
77
98
  configuration: {
78
- url: val.gitInstanceUrl,
99
+ url: workerProps.gitInstanceUrl,
79
100
  machine: {
80
101
  autoscaling: this.autoscalingConfig,
81
- maxBuilds: val.maxBuilds ?? 10,
82
- idleCount: val.maxIdleInstance ?? 5,
83
- idleTime: val.maxIdleTime ?? 900,
102
+ maxBuilds: workerProps.maxBuilds ?? 10,
103
+ idleCount: workerProps.maxIdleInstance ?? 5,
104
+ idleTime: workerProps.maxIdleTime ?? 900,
84
105
  machineOptions: {
85
- requestSpotInstance: val.requestSpotPrice,
86
- spotPrice: val.spotPrice,
106
+ requestSpotInstance: workerProps.requestSpotPrice,
107
+ spotPrice: workerProps.spotPrice,
87
108
  },
88
109
  },
89
110
  environment: [
90
111
  'DOCKER_DRIVER=overlay2',
91
112
  'DOCKER_TLS_DIRCE=/certs',
92
- `DOCKER_AUTH_CONFIG={"credHelpers": { "public.ecr.aws": "ecr-login", "${env.account}.dkr.ecr.<region>.amazonaws.com": "ecr-login" } }`,
113
+ `DOCKER_AUTH_CONFIG={"credHelpers": { "public.ecr.aws": "ecr-login", "${env.account}.dkr.ecr.${env.region}.amazonaws.com": "ecr-login" } }`,
93
114
  ],
94
115
  },
95
- instanceType: val.instanceType,
96
- }));
116
+ instanceType: workerProps.instanceType,
117
+ };
97
118
  }
98
119
  getDefaultRunnerWorkerConfig(env) {
99
120
  const gitLabRunnerTokenParameter = aws_ssm_1.StringParameter.fromStringParameterAttributes(this, 'RunnerToken', {
100
121
  parameterName: '/config/gitlab-runner-cdk/token',
101
122
  });
102
- return [{
103
- token: gitLabRunnerTokenParameter,
104
- configuration: {
105
- url: 'https://gitlab.cicd.man',
106
- limit: 0,
107
- machine: {
108
- maxBuilds: 10,
109
- autoscaling: this.autoscalingConfig,
110
- idleCount: 5,
111
- idleTime: 900,
112
- machineOptions: {
113
- requestSpotInstance: true,
114
- spotPrice: 0.09,
115
- },
123
+ return {
124
+ token: gitLabRunnerTokenParameter,
125
+ configuration: {
126
+ url: 'https://gitlab.cicd.man',
127
+ limit: 0,
128
+ machine: {
129
+ maxBuilds: 10,
130
+ autoscaling: this.autoscalingConfig,
131
+ idleCount: 5,
132
+ idleTime: 900,
133
+ machineOptions: {
134
+ requestSpotInstance: true,
135
+ spotPrice: 0.09,
116
136
  },
117
- environment: [
118
- 'DOCKER_DRIVER=overlay2',
119
- 'DOCKER_TLS_DIRCE=/certs',
120
- `DOCKER_AUTH_CONFIG={"credHelpers": { "public.ecr.aws": "ecr-login", "${env.account}.dkr.ecr.<region>.amazonaws.com": "ecr-login" } }`,
121
- ],
122
137
  },
123
- instanceType: aws_ec2_1.InstanceType.of(aws_ec2_1.InstanceClass.T3, aws_ec2_1.InstanceSize.LARGE),
124
- }];
138
+ environment: [
139
+ 'DOCKER_DRIVER=overlay2',
140
+ 'DOCKER_TLS_DIRCE=/certs',
141
+ `DOCKER_AUTH_CONFIG={"credHelpers": { "public.ecr.aws": "ecr-login", "${env.account}.dkr.ecr.${env.region}.amazonaws.com": "ecr-login" } }`,
142
+ ],
143
+ },
144
+ instanceType: aws_ec2_1.InstanceType.of(aws_ec2_1.InstanceClass.T3, aws_ec2_1.InstanceSize.LARGE),
145
+ };
125
146
  }
126
147
  }
127
148
  exports.GitlabRunner = GitlabRunner;
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b3NjYWxpbmctcnVubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbnRyaWJ1dGlvbnMvc21hcnQtcm91dGUvZ2l0bGFiLXJ1bm5lci9hdXRvc2NhbGluZy1ydW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkRBQTZEO0FBQzdELDRGQUlrRDtBQUVsRCxpREFBZ0Y7QUFFaEYsaURBQXNEO0FBQ3RELDJDQUF1QztBQUN2QyxnRUFBMkQ7QUE0QzNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNDRztBQUNILE1BQWEsWUFBYSxTQUFRLHNCQUFTO0lBS3pDLFlBQVksS0FBWSxFQUFFLEVBQVcsRUFBRSxLQUF3QjtRQUM3RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBTFgsc0JBQWlCLEdBQStCLENBQUM7Z0JBQ3ZELE9BQU8sRUFBRSxDQUFDLHdCQUF3QixDQUFDO2dCQUNuQyxRQUFRLEVBQUUsZUFBZTthQUMxQixDQUFDLENBQUM7UUFJRCxNQUFNLEdBQUcsR0FBRyxpQ0FBYyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVoRCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3RFLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFL0MsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixJQUFJLHNCQUFZLENBQUMsRUFBRSxDQUFDLHVCQUFhLENBQUMsRUFBRSxFQUFFLHNCQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0csSUFBSSx1REFBdUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDMUQsT0FBTyxFQUFFLFlBQVk7WUFDckIsT0FBTyxFQUFFO2dCQUNQLEdBQUcsRUFBRSxHQUFHO2FBQ1Q7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsWUFBWSxFQUFFLGVBQWU7YUFDOUI7WUFDRCxhQUFhLEVBQUUsRUFBRSxFQUFFLG1DQUFtQztZQUN0RCxVQUFVLEVBQUUsR0FBRyxFQUFFLG1DQUFtQztTQUNyRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sMEJBQTBCLENBQUMsV0FBc0MsRUFBRSxHQUFnQjtRQUN6RixPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUM1QjtZQUNFLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztZQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLGlCQUFpQjtZQUMzQixhQUFhLEVBQUU7Z0JBQ2IsR0FBRyxFQUFFLEdBQUcsQ0FBQyxjQUFjO2dCQUN2QixPQUFPLEVBQUU7b0JBQ1AsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUI7b0JBQ25DLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUyxJQUFJLEVBQUU7b0JBQzlCLFNBQVMsRUFBRSxHQUFHLENBQUMsZUFBZSxJQUFJLENBQUM7b0JBQ25DLFFBQVEsRUFBRSxHQUFHLENBQUMsV0FBVyxJQUFJLEdBQUc7b0JBQ2hDLGNBQWMsRUFBRTt3QkFDZCxtQkFBbUIsRUFBRSxHQUFHLENBQUMsZ0JBQWdCO3dCQUN6QyxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVM7cUJBQ3pCO2lCQUNGO2dCQUNELFdBQVcsRUFBRTtvQkFDWCx3QkFBd0I7b0JBQ3hCLHlCQUF5QjtvQkFDekIsd0VBQ0UsR0FBRyxDQUFDLE9BQ04sbURBQW1EO2lCQUNwRDthQUNGO1lBQ0QsWUFBWSxFQUFFLEdBQUcsQ0FBQyxZQUFZO1NBQy9CLENBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLDRCQUE0QixDQUFDLEdBQWdCO1FBQ25ELE1BQU0sMEJBQTBCLEdBQUcseUJBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQ3BHLGFBQWEsRUFBRSxpQ0FBaUM7U0FDakQsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDO2dCQUNOLEtBQUssRUFBRSwwQkFBMEI7Z0JBQ2pDLGFBQWEsRUFBRTtvQkFDYixHQUFHLEVBQUUseUJBQXlCO29CQUM5QixLQUFLLEVBQUUsQ0FBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsU0FBUyxFQUFFLEVBQUU7d0JBQ2IsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUI7d0JBQ25DLFNBQVMsRUFBRSxDQUFDO3dCQUNaLFFBQVEsRUFBRSxHQUFHO3dCQUNiLGNBQWMsRUFBRTs0QkFDZCxtQkFBbUIsRUFBRSxJQUFJOzRCQUN6QixTQUFTLEVBQUUsSUFBSTt5QkFDaEI7cUJBQ0Y7b0JBQ0QsV0FBVyxFQUFFO3dCQUNYLHdCQUF3Qjt3QkFDeEIseUJBQXlCO3dCQUN6Qix3RUFDRSxHQUFHLENBQUMsT0FDTixtREFBbUQ7cUJBQ3BEO2lCQUNGO2dCQUNELFlBQVksRUFBRSxzQkFBWSxDQUFDLEVBQUUsQ0FBQyx1QkFBYSxDQUFDLEVBQUUsRUFBRSxzQkFBWSxDQUFDLEtBQUssQ0FBQzthQUNwRSxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUF6RkQsb0NBeUZDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0IHtcbiAgQXV0b3NjYWxpbmdDb25maWd1cmF0aW9uLFxuICBHaXRsYWJSdW5uZXJBdXRvc2NhbGluZyxcbiAgR2l0bGFiUnVubmVyQXV0b3NjYWxpbmdKb2JSdW5uZXJQcm9wcyxcbn0gZnJvbSAnQHBlcHBlcml6ZS9jZGstYXV0b3NjYWxpbmctZ2l0bGFiLXJ1bm5lcic7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBJbnN0YW5jZUNsYXNzLCBJbnN0YW5jZVNpemUsIEluc3RhbmNlVHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgSVJvbGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IFN0cmluZ1BhcmFtZXRlciB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zc20nO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBSaW9MYW5kaW5nWm9uZSB9IGZyb20gJy4uLy4uLy4uL3Jpby1sYW5kaW5nLXpvbmUnO1xuXG5cbi8qKlxuICogVGhlIEdpdExhYlJ1bm5lclByb3BzIHJlcXVpcmUgdGhlIFZQQyBJRCwgYSBkZWZpbmVkIGVudmlyb25tZW50IG9mIGFjY291bnQgYW5kIHJlZ2lvbiwgb3B0aW9uYWxcbiAqIHJ1bm5lciBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25hbGx5IHRoZSBHaXRMYWIgUnVubmVyIE1hbmFnZXIgaW5zdGFuY2UgdHlwZS4gQnkgZGVmYXVsdCwgYSBUMyBNaWNybyBpbnN0YW5jZSB3aWxsIGJlIHVzZWQuXG4gKiBGb3IgbGFyZ2VyIHdvcmtsb2FkcyBhbmQgdmVyeSBhY3RpdmUgdGVhbXMgaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIFQzIFNtYWxsIGZvciB0aGUgbWFuYWdlciBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdpdExhYlJ1bm5lclByb3BzIHtcbiAgcmVhZG9ubHkgZW52OiBFbnZpcm9ubWVudDtcbiAgcmVhZG9ubHkgcnVubmVyc1dvcmtlclByb3BzPzogR2l0bGFiUnVubmVyV29ya2VyUHJvcHNbXTtcbiAgcmVhZG9ubHkgbWFuYWdlckluc3RhbmNlVHlwZT86IEluc3RhbmNlVHlwZTtcbn1cblxuLyoqXG4gKiBUaGUgR2l0bGFiUnVubmVyV29ya2VyUHJvcHMgaW50ZXJmYWNlIHByb3ZpZGVzIGEgc2ltcGxpZmllZCBHaXRMYWIgUnVubmVyIHdvcmtlciBjb25maWd1cmF0aW9uXG4gKiByZXF1aXJpbmcgYSB0b2tlbiBhcyBhbiBTU00gcGFyYW1ldGVyLCBvbmUgb2YgdGhlIHZhbGlkIGdpdGxhYiBVUkxzLCBpbnN0YW5jZSBvZiB5b3UgY2hvaWNlLCB0aGUgZGVzaXJlZCBtYXggc3BvdCBwcmljZSxcbiAqIHdoZXRoZXIgdG8gdXNlIHNwb3QgaW5zdGFuY2Ugb3Igbm90IGFuZCBhIGRlZmF1bHQgcm9sZS5cbiAqIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgUnVubmVyUm9sZXMgY29uc3RydWN0LCBhbmQgaXQncyBleHBvc2VkIGRlZmF1bHQgcnVubmVyIHJvbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2l0bGFiUnVubmVyV29ya2VyUHJvcHMge1xuICAvKiogVGhlIFNTTSBTdHJpbmdQYXJhbWV0ZXIgd2l0aCB0aGUgcmVnaXN0ZXJlZCBydW5uZXIgdG9rZW4gICovXG4gIHRva2VuOiBTdHJpbmdQYXJhbWV0ZXI7XG4gIC8qKiBUaGUgR2l0TGFiIGluc3RhbmNlIFVSTCwgZWl0aGVyIGh0dHBzOi8vZ2l0bGFiLmNpY2QubWFuIG9yIGh0dHBzOi8vZ2l0bGFiLmNvbGxhYm9yYXRpb25sYXllci10cmF0b24uY29tICovXG4gIGdpdEluc3RhbmNlVXJsOiBHaXRsYWJJbnN0YW5jZVVybDtcbiAgLyoqIFRoZSBpbnN0YW5jZSB0eXBlIGZvciB0aGUgcnVubmVyIHdvcmtlciAqL1xuICBpbnN0YW5jZVR5cGU6IEluc3RhbmNlVHlwZTtcbiAgLyoqIFRoZSBkZXNpcmVkIG1heCBzcG90IHByaWNlICovXG4gIHNwb3RQcmljZTogbnVtYmVyO1xuICAvKiogV2hldGhlciB0byB1c2Ugc3BvdCBpbnN0YW5jZSBvciBub3QsIFJlcXVpcmVzIFNlcnZpY2VMaW5rZWQgUm9sZSBmb3IgRUMyIFNwb3QgdG8gYmUgZGVwbG95ZWQgaW4gdGhlIGFjY291bnQgKi9cbiAgcmVxdWVzdFNwb3RQcmljZTogYm9vbGVhbjtcbiAgLyoqIFRoZSBkZWZhdWx0IHJvbGUgZm9yIHRoZSBydW5uZXIgd29ya2VyIHdoZW4gc3Bhd25lZCAqL1xuICBkZWZhdWx0V29ya2VyUm9sZTogSVJvbGU7XG4gIC8qKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnVpbGRzIGZvciBhbiBpbnN0YW5jZSBiZWZvcmUgaXQgaGFzIHRvIGJlIGRlY29tbWlzc2lvbmVkLiBEZWZhdWx0IDEwICovXG4gIG1heEJ1aWxkcz86IG51bWJlcjtcbiAgLyoqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgdG8ga2VlcCBpZGxlIGZvciBuZXcgaW5jb21pbmcgam9icy4gRGVmYXVsdCA1ICovXG4gIG1heElkbGVJbnN0YW5jZT86IG51bWJlcjtcbiAgLyoqIFRoZSBtYXhpbXVtIGlkbGUgdGltZSBzZWNvbmRzIGZvciBhbiBpbnN0YW5jZS4gRGVmYXVsdCA5MDAgc2Vjb25kcyAqL1xuICBtYXhJZGxlVGltZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgR2l0bGFiSW5zdGFuY2VVcmwgPSAnaHR0cHM6Ly9naXRsYWIuY2ljZC5tYW4nIHwgJ2h0dHBzOi8vZ2l0bGFiLmNvbGxhYm9yYXRpb25sYXllci10cmF0b24uY29tJ1xuXG5cbi8qKlxuICogVGhlIGNvbnN0cnVjdCBjcmVhdGUgdGhlIEdpdExhYlJ1bm5lciBNYW5hZ2VyIGluc3RhbmNlIHdoaWNoIHdpbGwgYXV0b3NjYWxlIFJ1bm5lciBpbnN0YW5jZXMgYmFzZWQgb24gdGhlIGNvbmZpZ3VyYXRpb24uXG4gKiBCeSBkZWZhdWx0LCB0aGUgY29uc3RydWN0IHdpbGwgY3JlYXRlIGEgUnVubmVyIHdpdGggYSBtYW5hZ2VyIFQzIE1pY3JvIGluc3RhbmNlIHdoaWNoIHdpbGwgYmUgZW5hYmxlZCB0byBzcGF3biBUMyBMYXJnZSBSdW5uZXJcbiAqIHdvcmtlciBzcG90IGluc3RhbmNlLiBUaGUgZGVmYXVsdCBydW5uZXIgUm9sZSBoYXMgb25seSB0aGUgcGVybWlzc2lvbnMgdG8gdXBsb2FkIGFuZCBkb3dubG9hZCBmcm9tIHRoZSBTMyBydW5uZXIgY2FjaGUuXG4gKlxuICogbWluaW1hbCBjb25maWd1cmF0aW9uIHdpdGggcnVubmVyIHNwb3QgaW5zdGFuY2U6XG4gKiBgYGB0c1xuICogbmV3IFNwb3RTZXJ2aWNlTGlua2VkUm9sZShzdGFjaywgJ1Nwb3RMaW5rZWRSb2xlJyk7XG4gKiBuZXcgR2l0bGFiUnVubmVyKHN0YWNrLCAnR2l0TGFiUnVubmVyJywge1xuICogIGVudjoge2FjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICdldS13ZXN0LTEnfVxuICogfSk7XG4gKmBgYFxuICogcmVjb21tZW5kZWQ6XG4gKiBgYGB0c1xuICogbmV3IFNwb3RTZXJ2aWNlTGlua2VkUm9sZShzdGFjaywgJ1Nwb3RMaW5rZWRSb2xlJyk7XG4gKiBjb25zdCBydW5uZXJSb2xlcyA9IG5ldyBSdW5uZXJSb2xlcyhzdGFjaywgJ1J1bm5lclJvbGVzJywge2Vudjoge2FjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICdldS13ZXN0LTEnfX0pO1xuICogbmV3IEdpdGxhYlJ1bm5lcihzdGFjaywgJ0dpdExhYlJ1bm5lcicsIHtcbiAqICBlbnY6IHthY2NvdW50OiAnMTIzNDU2Nzg5MDEyJywgcmVnaW9uOiAnZXUtd2VzdC0xJ30sXG4gKiAgcnVubmVyc1dvcmtlclByb3BzOiBbXG4gKiAgICB7XG4gKiAgICAgIHRva2VuOiBteVRva2VuRm9yVGFnZ2VkUnVubmVyMSwgLy8gd2l0aCB0aGlzIHJ1bm5lciB3ZSBvbmx5IHdhbnQgdG8gcnVuIGpvYnMgdGhhdCByZXF1aXJlIG1vcmUgcG93ZXJcbiAqICAgICAgZ2l0SW5zdGFuY2VVcmw6ICdodHRwczovL2dpdGxhYi5jaWNkLm1hbicsIC8vIG9yIHRoZSBUcmF0b24gR2l0TGFiXG4gKiAgICAgIGluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlLm9mKEluc3RhbmNlQ2xhc3MuTTdJX0ZMRVgsIEluc3RhbmNlU2l6ZS5YTEFSR0UpLCAvLyBleGVtcGxhcnkgbGFyZ2VyIHJ1bm5lclxuICogICAgICBzcG90UHJpY2U6IDAuMiwgLy8gZXhlbXBsYXJ5IHNwb3QgcHJpY2VcbiAqICAgICAgcmVxdWVzdFNwb3RQcmljZTogdHJ1ZSxcbiAqICAgICAgZGVmYXVsdFdvcmtlclJvbGU6IHJ1bm5lclJvbGVzLnJ1bm5lckJhc2VSb2xlLCAvLyB1c2UgdGhlIGJhc2Ugcm9sZVxuICogICAgfSxcbiAqICAgIHtcbiAqICAgICAgdG9rZW46IG15VG9rZW5Gb3JUYWdnZWRSdW5uZXIyLCAvLyB3aXRoIHRoaXMgcnVubmVyIHdlIHdhbnQgdG8gcnVuIGFsbCBnZW5lcmljIGpvYnMgdGhhdCBkbyBub3QgcmVxdWlyZSBtdWNoIHByb2Nlc3NpbmcgcG93ZXJcbiAqICAgICAgZ2l0SW5zdGFuY2VVcmw6ICdodHRwczovL2dpdGxhYi5jaWNkLm1hbicsIC8vIG9yIHRoZSBUcmF0b24gR2l0TGFiXG4gKiAgICAgIGluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlLm9mKEluc3RhbmNlQ2xhc3MuVDMsIEluc3RhbmNlU2l6ZS5NRURJVU0pLCAvLyBleGVtcGxhcnkgc21hbGxlciBydW5uZXJcbiAqICAgICAgc3BvdFByaWNlOiAwLjA0NCwgLy8gZXhlbXBsYXJ5IHNwb3QgcHJpY2VcbiAqICAgICAgcmVxdWVzdFNwb3RQcmljZTogdHJ1ZSxcbiAqICAgICAgZGVmYXVsdFdvcmtlclJvbGU6IHJ1bm5lclJvbGVzLnJ1bm5lckJhc2VSb2xlLCAvLyB1c2UgdGhlIGJhc2Ugcm9sZVxuICogICAgfSxcbiAqICBdLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEdpdGxhYlJ1bm5lciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHByaXZhdGUgYXV0b3NjYWxpbmdDb25maWc6IEF1dG9zY2FsaW5nQ29uZmlndXJhdGlvbltdID0gW3tcbiAgICBwZXJpb2RzOiBbJyogKiA3LTI0ICogKiBtb24tZnJpIConXSxcbiAgICB0aW1lem9uZTogJ0V1cm9wZS9CZXJsaW4nLFxuICB9XTtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IFN0YWNrLCBpZCA6IHN0cmluZywgcHJvcHM6IEdpdExhYlJ1bm5lclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHZwYyA9IFJpb0xhbmRpbmdab25lLmdldERlZmF1bHRWcGMoc2NvcGUpO1xuXG4gICAgY29uc3QgcnVubmVyQ29uZmlnID0gcHJvcHMucnVubmVyc1dvcmtlclByb3BzID9cbiAgICAgIHRoaXMuY3JlYXRlV29ya2VyQ29uZmlndXJhdGlvbnMocHJvcHMucnVubmVyc1dvcmtlclByb3BzLCBwcm9wcy5lbnYpIDpcbiAgICAgIHRoaXMuZ2V0RGVmYXVsdFJ1bm5lcldvcmtlckNvbmZpZyhwcm9wcy5lbnYpO1xuXG4gICAgY29uc3QgbWFuYWdlckluc3RhbmNlID0gcHJvcHMubWFuYWdlckluc3RhbmNlVHlwZSA/PyBJbnN0YW5jZVR5cGUub2YoSW5zdGFuY2VDbGFzcy5UMywgSW5zdGFuY2VTaXplLk1JQ1JPKTtcblxuICAgIG5ldyBHaXRsYWJSdW5uZXJBdXRvc2NhbGluZyhzY29wZSwgYEdMUiR7c2NvcGUuc3RhY2tOYW1lfWAsIHtcbiAgICAgIHJ1bm5lcnM6IHJ1bm5lckNvbmZpZyxcbiAgICAgIG5ldHdvcms6IHtcbiAgICAgICAgdnBjOiB2cGMsXG4gICAgICB9LFxuICAgICAgbWFuYWdlcjoge1xuICAgICAgICBpbnN0YW5jZVR5cGU6IG1hbmFnZXJJbnN0YW5jZSxcbiAgICAgIH0sXG4gICAgICBjaGVja0ludGVydmFsOiAzMCwgLy8gY2hlY2sgZXZlcnkgMzBzIGZvciBwZW5kaW5nIGpvYnNcbiAgICAgIGNvbmN1cnJlbnQ6IDMwMCwgLy8gR2xvYmFsIGxpbWl0IG9mIGNvbmN1cnJlbnQgam9icyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlV29ya2VyQ29uZmlndXJhdGlvbnMod29ya2VyUHJvcHM6IEdpdGxhYlJ1bm5lcldvcmtlclByb3BzW10sIGVudjogRW52aXJvbm1lbnQpOiBHaXRsYWJSdW5uZXJBdXRvc2NhbGluZ0pvYlJ1bm5lclByb3BzW10ge1xuICAgIHJldHVybiB3b3JrZXJQcm9wcy5tYXAodmFsID0+IChcbiAgICAgIHtcbiAgICAgICAgdG9rZW46IHZhbC50b2tlbixcbiAgICAgICAgcm9sZTogdmFsLmRlZmF1bHRXb3JrZXJSb2xlLFxuICAgICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgdXJsOiB2YWwuZ2l0SW5zdGFuY2VVcmwsXG4gICAgICAgICAgbWFjaGluZToge1xuICAgICAgICAgICAgYXV0b3NjYWxpbmc6IHRoaXMuYXV0b3NjYWxpbmdDb25maWcsXG4gICAgICAgICAgICBtYXhCdWlsZHM6IHZhbC5tYXhCdWlsZHMgPz8gMTAsXG4gICAgICAgICAgICBpZGxlQ291bnQ6IHZhbC5tYXhJZGxlSW5zdGFuY2UgPz8gNSxcbiAgICAgICAgICAgIGlkbGVUaW1lOiB2YWwubWF4SWRsZVRpbWUgPz8gOTAwLFxuICAgICAgICAgICAgbWFjaGluZU9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgcmVxdWVzdFNwb3RJbnN0YW5jZTogdmFsLnJlcXVlc3RTcG90UHJpY2UsXG4gICAgICAgICAgICAgIHNwb3RQcmljZTogdmFsLnNwb3RQcmljZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbnZpcm9ubWVudDogW1xuICAgICAgICAgICAgJ0RPQ0tFUl9EUklWRVI9b3ZlcmxheTInLFxuICAgICAgICAgICAgJ0RPQ0tFUl9UTFNfRElSQ0U9L2NlcnRzJyxcbiAgICAgICAgICAgIGBET0NLRVJfQVVUSF9DT05GSUc9e1wiY3JlZEhlbHBlcnNcIjogeyBcInB1YmxpYy5lY3IuYXdzXCI6IFwiZWNyLWxvZ2luXCIsIFwiJHtcbiAgICAgICAgICAgICAgZW52LmFjY291bnRcbiAgICAgICAgICAgIH0uZGtyLmVjci48cmVnaW9uPi5hbWF6b25hd3MuY29tXCI6IFwiZWNyLWxvZ2luXCIgfSB9YCxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICBpbnN0YW5jZVR5cGU6IHZhbC5pbnN0YW5jZVR5cGUsXG4gICAgICB9XG4gICAgKSk7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRSdW5uZXJXb3JrZXJDb25maWcoZW52OiBFbnZpcm9ubWVudCk6IEdpdGxhYlJ1bm5lckF1dG9zY2FsaW5nSm9iUnVubmVyUHJvcHNbXSB7XG4gICAgY29uc3QgZ2l0TGFiUnVubmVyVG9rZW5QYXJhbWV0ZXIgPSBTdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXModGhpcywgJ1J1bm5lclRva2VuJywge1xuICAgICAgcGFyYW1ldGVyTmFtZTogJy9jb25maWcvZ2l0bGFiLXJ1bm5lci1jZGsvdG9rZW4nLFxuICAgIH0pO1xuICAgIHJldHVybiBbe1xuICAgICAgdG9rZW46IGdpdExhYlJ1bm5lclRva2VuUGFyYW1ldGVyLFxuICAgICAgY29uZmlndXJhdGlvbjoge1xuICAgICAgICB1cmw6ICdodHRwczovL2dpdGxhYi5jaWNkLm1hbicsXG4gICAgICAgIGxpbWl0OiAwLFxuICAgICAgICBtYWNoaW5lOiB7XG4gICAgICAgICAgbWF4QnVpbGRzOiAxMCxcbiAgICAgICAgICBhdXRvc2NhbGluZzogdGhpcy5hdXRvc2NhbGluZ0NvbmZpZyxcbiAgICAgICAgICBpZGxlQ291bnQ6IDUsXG4gICAgICAgICAgaWRsZVRpbWU6IDkwMCxcbiAgICAgICAgICBtYWNoaW5lT3B0aW9uczoge1xuICAgICAgICAgICAgcmVxdWVzdFNwb3RJbnN0YW5jZTogdHJ1ZSxcbiAgICAgICAgICAgIHNwb3RQcmljZTogMC4wOSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBlbnZpcm9ubWVudDogW1xuICAgICAgICAgICdET0NLRVJfRFJJVkVSPW92ZXJsYXkyJyxcbiAgICAgICAgICAnRE9DS0VSX1RMU19ESVJDRT0vY2VydHMnLFxuICAgICAgICAgIGBET0NLRVJfQVVUSF9DT05GSUc9e1wiY3JlZEhlbHBlcnNcIjogeyBcInB1YmxpYy5lY3IuYXdzXCI6IFwiZWNyLWxvZ2luXCIsIFwiJHtcbiAgICAgICAgICAgIGVudi5hY2NvdW50XG4gICAgICAgICAgfS5ka3IuZWNyLjxyZWdpb24+LmFtYXpvbmF3cy5jb21cIjogXCJlY3ItbG9naW5cIiB9IH1gLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIGluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlLm9mKEluc3RhbmNlQ2xhc3MuVDMsIEluc3RhbmNlU2l6ZS5MQVJHRSksXG4gICAgfV07XG4gIH1cbn0iXX0=
149
+ _a = JSII_RTTI_SYMBOL_1;
150
+ GitlabRunner[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.GitlabRunner", version: "0.0.0" };
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b3NjYWxpbmctcnVubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbnRyaWJ1dGlvbnMvc21hcnQtcm91dGUvZ2l0bGFiLXJ1bm5lci9hdXRvc2NhbGluZy1ydW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2REFBNkQ7QUFDN0QsNEZBSWtEO0FBRWxELGlEQUFnRjtBQUdoRixpREFBd0U7QUFDeEUsMkNBQXVDO0FBQ3ZDLGdFQUEyRDtBQTZDM0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvREc7QUFDSCxNQUFhLFlBQWEsU0FBUSxzQkFBUztJQUt6QyxZQUFZLEtBQVksRUFBRSxFQUFXLEVBQUUsS0FBd0I7UUFDN0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUxYLHNCQUFpQixHQUErQixDQUFDO2dCQUN2RCxPQUFPLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDbkMsUUFBUSxFQUFFLGVBQWU7YUFDMUIsQ0FBQyxDQUFDO1FBSUQsTUFBTSxHQUFHLEdBQUcsaUNBQWMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLGtCQUFrQjtZQUMzQyxDQUFDLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQ3RFLENBQUMsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWpELE1BQU0sZUFBZSxHQUNuQixLQUFLLENBQUMsbUJBQW1CO1lBQ3pCLHNCQUFZLENBQUMsRUFBRSxDQUFDLHVCQUFhLENBQUMsRUFBRSxFQUFFLHNCQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEQsTUFBTSxNQUFNLEdBQUcsSUFBSSx1REFBdUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDekUsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO1lBQ3ZCLE9BQU8sRUFBRTtnQkFDUCxHQUFHLEVBQUUsR0FBRzthQUNUO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLFlBQVksRUFBRSxlQUFlO2FBQzlCO1lBQ0QsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDOUIsYUFBYSxFQUFFLEVBQUUsRUFBRSxtQ0FBbUM7WUFDdEQsVUFBVSxFQUFFLEdBQUcsRUFBRSxtQ0FBbUM7U0FDckQsQ0FBQyxDQUFDO1FBQ0gsMEhBQTBIO1FBQzFILE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FDakMseUVBQXlFLEVBQUUsNkJBQTZCO1FBQ3hHLDBHQUEwRyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUN2Six1QkFBdUIsQ0FDeEIsQ0FBQztJQUNKLENBQUM7SUFFTywwQkFBMEIsQ0FBQyxXQUFvQyxFQUFFLEdBQWdCO1FBQ3ZGLE9BQU87WUFDTCxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUs7WUFDeEIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxpQkFBaUI7WUFDbkMsYUFBYSxFQUFFO2dCQUNiLEdBQUcsRUFBRSxXQUFXLENBQUMsY0FBYztnQkFDL0IsT0FBTyxFQUFFO29CQUNQLFdBQVcsRUFBRSxJQUFJLENBQUMsaUJBQWlCO29CQUNuQyxTQUFTLEVBQUUsV0FBVyxDQUFDLFNBQVMsSUFBSSxFQUFFO29CQUN0QyxTQUFTLEVBQUUsV0FBVyxDQUFDLGVBQWUsSUFBSSxDQUFDO29CQUMzQyxRQUFRLEVBQUUsV0FBVyxDQUFDLFdBQVcsSUFBSSxHQUFHO29CQUN4QyxjQUFjLEVBQUU7d0JBQ2QsbUJBQW1CLEVBQUUsV0FBVyxDQUFDLGdCQUFnQjt3QkFDakQsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTO3FCQUNqQztpQkFDRjtnQkFDRCxXQUFXLEVBQUU7b0JBQ1gsd0JBQXdCO29CQUN4Qix5QkFBeUI7b0JBQ3pCLHdFQUNFLEdBQUcsQ0FBQyxPQUNOLFlBQVksR0FBRyxDQUFDLE1BQU0sa0NBQWtDO2lCQUN6RDthQUNGO1lBQ0QsWUFBWSxFQUFFLFdBQVcsQ0FBQyxZQUFZO1NBQ3ZDLENBQUM7SUFDSixDQUFDO0lBRU8sNEJBQTRCLENBQ2xDLEdBQWdCO1FBRWhCLE1BQU0sMEJBQTBCLEdBQzlCLHlCQUFlLENBQUMsNkJBQTZCLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUNqRSxhQUFhLEVBQUUsaUNBQWlDO1NBQ2pELENBQUMsQ0FBQztRQUNMLE9BQU87WUFDTCxLQUFLLEVBQUUsMEJBQTBCO1lBQ2pDLGFBQWEsRUFBRTtnQkFDYixHQUFHLEVBQUUseUJBQXlCO2dCQUM5QixLQUFLLEVBQUUsQ0FBQztnQkFDUixPQUFPLEVBQUU7b0JBQ1AsU0FBUyxFQUFFLEVBQUU7b0JBQ2IsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUI7b0JBQ25DLFNBQVMsRUFBRSxDQUFDO29CQUNaLFFBQVEsRUFBRSxHQUFHO29CQUNiLGNBQWMsRUFBRTt3QkFDZCxtQkFBbUIsRUFBRSxJQUFJO3dCQUN6QixTQUFTLEVBQUUsSUFBSTtxQkFDaEI7aUJBQ0Y7Z0JBQ0QsV0FBVyxFQUFFO29CQUNYLHdCQUF3QjtvQkFDeEIseUJBQXlCO29CQUN6Qix3RUFDRSxHQUFHLENBQUMsT0FDTixZQUFZLEdBQUcsQ0FBQyxNQUFNLGtDQUFrQztpQkFDekQ7YUFDRjtZQUNELFlBQVksRUFBRSxzQkFBWSxDQUFDLEVBQUUsQ0FBQyx1QkFBYSxDQUFDLEVBQUUsRUFBRSxzQkFBWSxDQUFDLEtBQUssQ0FBQztTQUNwRSxDQUFDO0lBQ0osQ0FBQzs7QUFsR0gsb0NBbUdDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0IHtcbiAgQXV0b3NjYWxpbmdDb25maWd1cmF0aW9uLFxuICBHaXRsYWJSdW5uZXJBdXRvc2NhbGluZyxcbiAgR2l0bGFiUnVubmVyQXV0b3NjYWxpbmdKb2JSdW5uZXJQcm9wcyxcbn0gZnJvbSAnQHBlcHBlcml6ZS9jZGstYXV0b3NjYWxpbmctZ2l0bGFiLXJ1bm5lcic7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBJbnN0YW5jZUNsYXNzLCBJbnN0YW5jZVNpemUsIEluc3RhbmNlVHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgSVJvbGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IElCdWNrZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgSVN0cmluZ1BhcmFtZXRlciwgU3RyaW5nUGFyYW1ldGVyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFJpb0xhbmRpbmdab25lIH0gZnJvbSAnLi4vLi4vLi4vcmlvLWxhbmRpbmctem9uZSc7XG5cbi8qKlxuICogVGhlIEdpdExhYlJ1bm5lclByb3BzIHJlcXVpcmUgdGhlIFZQQyBJRCwgYSBkZWZpbmVkIGVudmlyb25tZW50IG9mIGFjY291bnQgYW5kIHJlZ2lvbiwgb3B0aW9uYWxcbiAqIHJ1bm5lciBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25hbGx5IHRoZSBHaXRMYWIgUnVubmVyIE1hbmFnZXIgaW5zdGFuY2UgdHlwZS4gQnkgZGVmYXVsdCwgYSBUMyBNaWNybyBpbnN0YW5jZSB3aWxsIGJlIHVzZWQuXG4gKiBGb3IgbGFyZ2VyIHdvcmtsb2FkcyBhbmQgdmVyeSBhY3RpdmUgdGVhbXMgaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIFQzIFNtYWxsIGZvciB0aGUgbWFuYWdlciBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdpdExhYlJ1bm5lclByb3BzIHtcbiAgcmVhZG9ubHkgZW52OiBFbnZpcm9ubWVudDtcbiAgcmVhZG9ubHkgcnVubmVyc1dvcmtlclByb3BzPzogR2l0bGFiUnVubmVyV29ya2VyUHJvcHM7XG4gIHJlYWRvbmx5IG1hbmFnZXJJbnN0YW5jZVR5cGU/OiBJbnN0YW5jZVR5cGU7XG4gIHJlYWRvbmx5IGNhY2hlOiBJQnVja2V0O1xufVxuXG4vKipcbiAqIFRoZSBHaXRsYWJSdW5uZXJXb3JrZXJQcm9wcyBpbnRlcmZhY2UgcHJvdmlkZXMgYSBzaW1wbGlmaWVkIEdpdExhYiBSdW5uZXIgd29ya2VyIGNvbmZpZ3VyYXRpb25cbiAqIHJlcXVpcmluZyBhIHRva2VuIGFzIGFuIFNTTSBwYXJhbWV0ZXIsIG9uZSBvZiB0aGUgdmFsaWQgZ2l0bGFiIFVSTHMsIGluc3RhbmNlIG9mIHlvdSBjaG9pY2UsIHRoZSBkZXNpcmVkIG1heCBzcG90IHByaWNlLFxuICogd2hldGhlciB0byB1c2Ugc3BvdCBpbnN0YW5jZSBvciBub3QgYW5kIGEgZGVmYXVsdCByb2xlLlxuICogSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBSdW5uZXJSb2xlcyBjb25zdHJ1Y3QsIGFuZCBpdCdzIGV4cG9zZWQgZGVmYXVsdCBydW5uZXIgcm9sZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRsYWJSdW5uZXJXb3JrZXJQcm9wcyB7XG4gIC8qKiBUaGUgU1NNIFN0cmluZ1BhcmFtZXRlciB3aXRoIHRoZSByZWdpc3RlcmVkIHJ1bm5lciB0b2tlbiAgKi9cbiAgcmVhZG9ubHkgdG9rZW46IElTdHJpbmdQYXJhbWV0ZXI7XG4gIC8qKiBUaGUgR2l0TGFiIGluc3RhbmNlIFVSTCwgZWl0aGVyIGh0dHBzOi8vZ2l0bGFiLmNpY2QubWFuIG9yIGh0dHBzOi8vZ2l0bGFiLmNvbGxhYm9yYXRpb25sYXllci10cmF0b24uY29tICovXG4gIHJlYWRvbmx5IGdpdEluc3RhbmNlVXJsOiBHaXRsYWJJbnN0YW5jZVVybDtcbiAgLyoqIFRoZSBpbnN0YW5jZSB0eXBlIGZvciB0aGUgcnVubmVyIHdvcmtlciAqL1xuICByZWFkb25seSBpbnN0YW5jZVR5cGU6IEluc3RhbmNlVHlwZTtcbiAgLyoqIFRoZSBkZXNpcmVkIG1heCBzcG90IHByaWNlICovXG4gIHJlYWRvbmx5IHNwb3RQcmljZTogbnVtYmVyO1xuICAvKiogV2hldGhlciB0byB1c2Ugc3BvdCBpbnN0YW5jZSBvciBub3QsIFJlcXVpcmVzIFNlcnZpY2VMaW5rZWQgUm9sZSBmb3IgRUMyIFNwb3QgdG8gYmUgZGVwbG95ZWQgaW4gdGhlIGFjY291bnQgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdFNwb3RQcmljZTogYm9vbGVhbjtcbiAgLyoqIFRoZSBkZWZhdWx0IHJvbGUgZm9yIHRoZSBydW5uZXIgd29ya2VyIHdoZW4gc3Bhd25lZCAqL1xuICByZWFkb25seSBkZWZhdWx0V29ya2VyUm9sZTogSVJvbGU7XG4gIC8qKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnVpbGRzIGZvciBhbiBpbnN0YW5jZSBiZWZvcmUgaXQgaGFzIHRvIGJlIGRlY29tbWlzc2lvbmVkLiBEZWZhdWx0IDEwICovXG4gIHJlYWRvbmx5IG1heEJ1aWxkcz86IG51bWJlcjtcbiAgLyoqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgdG8ga2VlcCBpZGxlIGZvciBuZXcgaW5jb21pbmcgam9icy4gRGVmYXVsdCA1ICovXG4gIHJlYWRvbmx5IG1heElkbGVJbnN0YW5jZT86IG51bWJlcjtcbiAgLyoqIFRoZSBtYXhpbXVtIGlkbGUgdGltZSBzZWNvbmRzIGZvciBhbiBpbnN0YW5jZS4gRGVmYXVsdCA5MDAgc2Vjb25kcyAqL1xuICByZWFkb25seSBtYXhJZGxlVGltZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgR2l0bGFiSW5zdGFuY2VVcmwgPVxuICB8ICdodHRwczovL2dpdGxhYi5jaWNkLm1hbidcbiAgfCAnaHR0cHM6Ly9naXRsYWIuY29sbGFib3JhdGlvbmxheWVyLXRyYXRvbi5jb20nO1xuXG4vKipcbiAqIFRoZSBjb25zdHJ1Y3QgY3JlYXRlIHRoZSBHaXRMYWJSdW5uZXIgTWFuYWdlciBpbnN0YW5jZSB3aGljaCB3aWxsIGF1dG9zY2FsZSBSdW5uZXIgaW5zdGFuY2VzIGJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uLlxuICogQnkgZGVmYXVsdCwgdGhlIGNvbnN0cnVjdCB3aWxsIGNyZWF0ZSBhIFJ1bm5lciB3aXRoIGEgbWFuYWdlciBUMyBNaWNybyBpbnN0YW5jZSB3aGljaCB3aWxsIGJlIGVuYWJsZWQgdG8gc3Bhd24gVDMgTGFyZ2UgUnVubmVyXG4gKiB3b3JrZXIgc3BvdCBpbnN0YW5jZS4gVGhlIGRlZmF1bHQgcnVubmVyIFJvbGUgaGFzIG9ubHkgdGhlIHBlcm1pc3Npb25zIHRvIHVwbG9hZCBhbmQgZG93bmxvYWQgZnJvbSB0aGUgUzMgcnVubmVyIGNhY2hlLlxuICpcbiAqIG1pbmltYWwgY29uZmlndXJhdGlvbiB3aXRoIHJ1bm5lciBzcG90IGluc3RhbmNlOlxuICogYGBgdHNcbiAqIG5ldyBTcG90U2VydmljZUxpbmtlZFJvbGUoc3RhY2ssICdTcG90TGlua2VkUm9sZScpO1xuICogY29uc3QgbXlCdWNrZXQgPSBuZXcgQnVja2V0KHN0YWNrLCAnTXlTaGFyZVJ1bm5lckNhY2hlJywge1xuICogICAgIGVuZm9yY2VTU0w6IHRydWUsXG4gKiAgICAgcHVibGljUmVhZEFjY2VzczogZmFsc2UsXG4gKiAgICAgZW5jcnlwdGlvbjogQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICogICAgIGxpZmVjeWNsZVJ1bGVzOiBbXG4gKiAgICAgICB7XG4gKiAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gKiAgICAgICAgIGV4cGlyYXRpb246IER1cmF0aW9uLmRheXMoMzApLFxuICogICAgICAgfSxcbiAqICAgICBdLFxuICogICB9KTtcbiAqIG5ldyBHaXRsYWJSdW5uZXIoc3RhY2ssICdHaXRMYWJSdW5uZXInLCB7XG4gKiAgZW52OiB7YWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ2V1LXdlc3QtMSd9LFxuICogIGNhY2hlOiBteUJ1Y2tldCAvLyB1c2UgYSBTMyBidWNrZXQgd2l0aG91dCBwdWJsaWMgYWNjZXNzIGFuZCBhIHJldGVudGlvbiBkZWZpbmVkLCB1c2Ugb25lIGNhY2hlIGJ1Y2tldCBmb3IgYWxsIHlvdSBydW5uZXJzXG4gKiB9KTtcbiAqYGBgXG4gKiByZWNvbW1lbmRlZDpcbiAqIGBgYHRzXG4gKiBuZXcgU3BvdFNlcnZpY2VMaW5rZWRSb2xlKHN0YWNrLCAnU3BvdExpbmtlZFJvbGUnKTtcbiAqIGNvbnN0IHJ1bm5lclJvbGVzID0gbmV3IFJ1bm5lclJvbGVzKHN0YWNrLCAnUnVubmVyUm9sZXMnLCB7ZW52OiB7YWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ2V1LXdlc3QtMSd9fSk7XG4gKiBjb25zdCBteUJ1Y2tldCA9IG5ldyBCdWNrZXQoc3RhY2ssICdNeVNoYXJlUnVubmVyQ2FjaGUnLCB7XG4gKiAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAqICAgICBwdWJsaWNSZWFkQWNjZXNzOiBmYWxzZSxcbiAqICAgICBlbmNyeXB0aW9uOiBCdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRUQsXG4gKiAgICAgbGlmZWN5Y2xlUnVsZXM6IFtcbiAqICAgICAgIHtcbiAqICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAqICAgICAgICAgZXhwaXJhdGlvbjogRHVyYXRpb24uZGF5cygzMCksXG4gKiAgICAgICB9LFxuICogICAgIF0sXG4gKiAgIH0pO1xuICogbmV3IEdpdGxhYlJ1bm5lcihzdGFjaywgJ0dpdExhYlJ1bm5lcicsIHtcbiAqICBlbnY6IHthY2NvdW50OiAnMTIzNDU2Nzg5MDEyJywgcmVnaW9uOiAnZXUtd2VzdC0xJ30sXG4gKiAgY2FjaGU6IG15QnVja2V0IC8vIC8vIHVzZSBhIFMzIGJ1Y2tldCB3aXRob3V0IHB1YmxpYyBhY2Nlc3MgYW5kIGEgcmV0ZW50aW9uIGRlZmluZWQsIHVzZSBvbmUgY2FjaGUgYnVja2V0IGZvciBhbGwgeW91IHJ1bm5lcnNcbiAqICBydW5uZXJzV29ya2VyUHJvcHM6IHtcbiAqICAgIHRva2VuOiBteVRva2VuRm9yVGFnZ2VkUnVubmVyMSwgLy8gd2l0aCB0aGlzIHJ1bm5lciB3ZSBvbmx5IHdhbnQgdG8gcnVuIGpvYnMgdGhhdCByZXF1aXJlIG1vcmUgcG93ZXJcbiAqICAgIGdpdEluc3RhbmNlVXJsOiAnaHR0cHM6Ly9naXRsYWIuY2ljZC5tYW4nLCAvLyBvciB0aGUgVHJhdG9uIEdpdExhYlxuICogICAgaW5zdGFuY2VUeXBlOiBJbnN0YW5jZVR5cGUub2YoSW5zdGFuY2VDbGFzcy5NN0lfRkxFWCwgSW5zdGFuY2VTaXplLlhMQVJHRSksIC8vIGV4ZW1wbGFyeSBsYXJnZXIgcnVubmVyXG4gKiAgICBzcG90UHJpY2U6IDAuMiwgLy8gZXhlbXBsYXJ5IHNwb3QgcHJpY2VcbiAqICAgIHJlcXVlc3RTcG90UHJpY2U6IHRydWUsXG4gKiAgICBkZWZhdWx0V29ya2VyUm9sZTogcnVubmVyUm9sZXMucnVubmVyQmFzZVJvbGUsIC8vIHVzZSB0aGUgYmFzZSByb2xlXG4gKiAgfSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBHaXRsYWJSdW5uZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIGF1dG9zY2FsaW5nQ29uZmlnOiBBdXRvc2NhbGluZ0NvbmZpZ3VyYXRpb25bXSA9IFt7XG4gICAgcGVyaW9kczogWycqICogNy0yMiAqICogbW9uLWZyaSAqJ10sXG4gICAgdGltZXpvbmU6ICdFdXJvcGUvQmVybGluJyxcbiAgfV07XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBTdGFjaywgaWQgOiBzdHJpbmcsIHByb3BzOiBHaXRMYWJSdW5uZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCB2cGMgPSBSaW9MYW5kaW5nWm9uZS5nZXREZWZhdWx0VnBjKHNjb3BlKTtcblxuICAgIGNvbnN0IHJ1bm5lckNvbmZpZyA9IHByb3BzLnJ1bm5lcnNXb3JrZXJQcm9wc1xuICAgICAgPyB0aGlzLmNyZWF0ZVdvcmtlckNvbmZpZ3VyYXRpb25zKHByb3BzLnJ1bm5lcnNXb3JrZXJQcm9wcywgcHJvcHMuZW52KVxuICAgICAgOiB0aGlzLmdldERlZmF1bHRSdW5uZXJXb3JrZXJDb25maWcocHJvcHMuZW52KTtcblxuICAgIGNvbnN0IG1hbmFnZXJJbnN0YW5jZSA9XG4gICAgICBwcm9wcy5tYW5hZ2VySW5zdGFuY2VUeXBlID8/XG4gICAgICBJbnN0YW5jZVR5cGUub2YoSW5zdGFuY2VDbGFzcy5UMywgSW5zdGFuY2VTaXplLk1JQ1JPKTtcblxuICAgIGNvbnN0IHJ1bm5lciA9IG5ldyBHaXRsYWJSdW5uZXJBdXRvc2NhbGluZyhzY29wZSwgYEdMUiR7c2NvcGUuc3RhY2tOYW1lfWAsIHtcbiAgICAgIHJ1bm5lcnM6IFtydW5uZXJDb25maWddLFxuICAgICAgbmV0d29yazoge1xuICAgICAgICB2cGM6IHZwYyxcbiAgICAgIH0sXG4gICAgICBtYW5hZ2VyOiB7XG4gICAgICAgIGluc3RhbmNlVHlwZTogbWFuYWdlckluc3RhbmNlLFxuICAgICAgfSxcbiAgICAgIGNhY2hlOiB7IGJ1Y2tldDogcHJvcHMuY2FjaGUgfSxcbiAgICAgIGNoZWNrSW50ZXJ2YWw6IDMwLCAvLyBjaGVjayBldmVyeSAzMHMgZm9yIHBlbmRpbmcgam9ic1xuICAgICAgY29uY3VycmVudDogMzAwLCAvLyBHbG9iYWwgbGltaXQgb2YgY29uY3VycmVudCBqb2JzLFxuICAgIH0pO1xuICAgIC8vIGR1ZSB0byB0aGUgbmV3IHJlZ2lzdHJhdGlvbiBwcm9jZXNzIHdlIGhhdmUgdG8gcmVnaXN0ZXIgdGhlIHJ1bm5lciBieSBydW5uaW5nIGV4cGxpY2l0IGNvbW1hbmRzIG9uIHN0YXJ0IG9mIHRoZSBtYW5hZ2VyXG4gICAgcnVubmVyLm1hbmFnZXIudXNlckRhdGEuYWRkQ29tbWFuZHMoXG4gICAgICAnY3AgIC9ldGMvZ2l0bGFiLXJ1bm5lci9jb25maWcudG9tbCAgL2V0Yy9naXRsYWItcnVubmVyL2NvbmZpZ19iYWNrLnRvbWwnLCAvLyBhdm9pZCB0b21sIG1lcmdlIGNvbmZsaWN0c1xuICAgICAgYGdpdGxhYi1ydW5uZXIgcmVnaXN0ZXIgLS1ub24taW50ZXJhY3RpdmUgLS10ZW1wbGF0ZS1jb25maWcgL2V0Yy9naXRsYWItcnVubmVyL2NvbmZpZ19iYWNrLnRvbWwgLS10b2tlbiAke3Byb3BzLnJ1bm5lcnNXb3JrZXJQcm9wcz8udG9rZW4uc3RyaW5nVmFsdWV9YCxcbiAgICAgICdnaXRsYWItcnVubmVyIHJlc3RhcnQnLCAvLyByZXN0YXJ0IHRoZSBydW5uZXIgdG8gZW5zdXJlIHRoZSBjb25maWcgaXMgcGlja2VkIHVwIGNvcnJlY3RseVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVdvcmtlckNvbmZpZ3VyYXRpb25zKHdvcmtlclByb3BzOiBHaXRsYWJSdW5uZXJXb3JrZXJQcm9wcywgZW52OiBFbnZpcm9ubWVudCk6IEdpdGxhYlJ1bm5lckF1dG9zY2FsaW5nSm9iUnVubmVyUHJvcHMge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogd29ya2VyUHJvcHMudG9rZW4sXG4gICAgICByb2xlOiB3b3JrZXJQcm9wcy5kZWZhdWx0V29ya2VyUm9sZSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgdXJsOiB3b3JrZXJQcm9wcy5naXRJbnN0YW5jZVVybCxcbiAgICAgICAgbWFjaGluZToge1xuICAgICAgICAgIGF1dG9zY2FsaW5nOiB0aGlzLmF1dG9zY2FsaW5nQ29uZmlnLFxuICAgICAgICAgIG1heEJ1aWxkczogd29ya2VyUHJvcHMubWF4QnVpbGRzID8/IDEwLFxuICAgICAgICAgIGlkbGVDb3VudDogd29ya2VyUHJvcHMubWF4SWRsZUluc3RhbmNlID8/IDUsXG4gICAgICAgICAgaWRsZVRpbWU6IHdvcmtlclByb3BzLm1heElkbGVUaW1lID8/IDkwMCxcbiAgICAgICAgICBtYWNoaW5lT3B0aW9uczoge1xuICAgICAgICAgICAgcmVxdWVzdFNwb3RJbnN0YW5jZTogd29ya2VyUHJvcHMucmVxdWVzdFNwb3RQcmljZSxcbiAgICAgICAgICAgIHNwb3RQcmljZTogd29ya2VyUHJvcHMuc3BvdFByaWNlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGVudmlyb25tZW50OiBbXG4gICAgICAgICAgJ0RPQ0tFUl9EUklWRVI9b3ZlcmxheTInLFxuICAgICAgICAgICdET0NLRVJfVExTX0RJUkNFPS9jZXJ0cycsXG4gICAgICAgICAgYERPQ0tFUl9BVVRIX0NPTkZJRz17XCJjcmVkSGVscGVyc1wiOiB7IFwicHVibGljLmVjci5hd3NcIjogXCJlY3ItbG9naW5cIiwgXCIke1xuICAgICAgICAgICAgZW52LmFjY291bnRcbiAgICAgICAgICB9LmRrci5lY3IuJHtlbnYucmVnaW9ufS5hbWF6b25hd3MuY29tXCI6IFwiZWNyLWxvZ2luXCIgfSB9YCxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBpbnN0YW5jZVR5cGU6IHdvcmtlclByb3BzLmluc3RhbmNlVHlwZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0UnVubmVyV29ya2VyQ29uZmlnKFxuICAgIGVudjogRW52aXJvbm1lbnQsXG4gICk6IEdpdGxhYlJ1bm5lckF1dG9zY2FsaW5nSm9iUnVubmVyUHJvcHMge1xuICAgIGNvbnN0IGdpdExhYlJ1bm5lclRva2VuUGFyYW1ldGVyID1cbiAgICAgIFN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyh0aGlzLCAnUnVubmVyVG9rZW4nLCB7XG4gICAgICAgIHBhcmFtZXRlck5hbWU6ICcvY29uZmlnL2dpdGxhYi1ydW5uZXItY2RrL3Rva2VuJyxcbiAgICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogZ2l0TGFiUnVubmVyVG9rZW5QYXJhbWV0ZXIsXG4gICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgIHVybDogJ2h0dHBzOi8vZ2l0bGFiLmNpY2QubWFuJyxcbiAgICAgICAgbGltaXQ6IDAsXG4gICAgICAgIG1hY2hpbmU6IHtcbiAgICAgICAgICBtYXhCdWlsZHM6IDEwLFxuICAgICAgICAgIGF1dG9zY2FsaW5nOiB0aGlzLmF1dG9zY2FsaW5nQ29uZmlnLFxuICAgICAgICAgIGlkbGVDb3VudDogNSxcbiAgICAgICAgICBpZGxlVGltZTogOTAwLFxuICAgICAgICAgIG1hY2hpbmVPcHRpb25zOiB7XG4gICAgICAgICAgICByZXF1ZXN0U3BvdEluc3RhbmNlOiB0cnVlLFxuICAgICAgICAgICAgc3BvdFByaWNlOiAwLjA5LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGVudmlyb25tZW50OiBbXG4gICAgICAgICAgJ0RPQ0tFUl9EUklWRVI9b3ZlcmxheTInLFxuICAgICAgICAgICdET0NLRVJfVExTX0RJUkNFPS9jZXJ0cycsXG4gICAgICAgICAgYERPQ0tFUl9BVVRIX0NPTkZJRz17XCJjcmVkSGVscGVyc1wiOiB7IFwicHVibGljLmVjci5hd3NcIjogXCJlY3ItbG9naW5cIiwgXCIke1xuICAgICAgICAgICAgZW52LmFjY291bnRcbiAgICAgICAgICB9LmRrci5lY3IuJHtlbnYucmVnaW9ufS5hbWF6b25hd3MuY29tXCI6IFwiZWNyLWxvZ2luXCIgfSB9YCxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBpbnN0YW5jZVR5cGU6IEluc3RhbmNlVHlwZS5vZihJbnN0YW5jZUNsYXNzLlQzLCBJbnN0YW5jZVNpemUuTEFSR0UpLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -2,7 +2,7 @@ import { Environment, Stack } from 'aws-cdk-lib';
2
2
  import { Role } from 'aws-cdk-lib/aws-iam';
3
3
  import { Construct } from 'constructs';
4
4
  export interface RunnerRoleProps {
5
- env: Environment;
5
+ readonly env: Environment;
6
6
  }
7
7
  /**
8
8
  * This construct provides a set of base roles for gitlab runners in order to build, test, validate and deploy applications