@pwrdrvr/microapps-cdk 0.2.8 → 0.2.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitattributes +18 -18
- package/.jsii +1264 -165
- package/API.md +511 -8
- package/README.md +29 -0
- package/changelog.md +2 -0
- package/lib/MicroApps.d.ts +126 -105
- package/lib/MicroApps.d.ts.map +1 -0
- package/lib/MicroApps.js +32 -30
- package/lib/MicroAppsAPIGwy.d.ts +28 -61
- package/lib/MicroAppsAPIGwy.d.ts.map +1 -0
- package/lib/MicroAppsAPIGwy.js +17 -25
- package/lib/MicroAppsCF.d.ts +85 -104
- package/lib/MicroAppsCF.d.ts.map +1 -0
- package/lib/MicroAppsCF.js +58 -41
- package/lib/MicroAppsEdgeToOrigin.d.ts +108 -0
- package/lib/MicroAppsEdgeToOrigin.d.ts.map +1 -0
- package/lib/MicroAppsEdgeToOrigin.js +139 -0
- package/lib/MicroAppsS3.d.ts +19 -69
- package/lib/MicroAppsS3.d.ts.map +1 -0
- package/lib/MicroAppsS3.js +5 -32
- package/lib/MicroAppsSvcs.d.ts +58 -86
- package/lib/MicroAppsSvcs.d.ts.map +1 -0
- package/lib/MicroAppsSvcs.js +36 -95
- package/lib/MicroAppsTable.d.ts +60 -0
- package/lib/MicroAppsTable.d.ts.map +1 -0
- package/lib/MicroAppsTable.js +42 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +3 -1
- package/lib/microapps-deployer/index.js +174 -113
- package/lib/microapps-deployer/index.js.map +3 -3
- package/lib/microapps-router/index.js +54 -69
- package/lib/microapps-router/index.js.map +3 -3
- package/lib/microapps-router/templates/appFrame.html +0 -0
- package/lib/utils/ReverseDomain.d.ts +1 -0
- package/lib/utils/ReverseDomain.d.ts.map +1 -0
- package/package.json +29 -24
- package/releasetag.txt +1 -0
- package/version.txt +1 -0
- package/patches/@aws-cdk+aws-apigatewayv2-alpha+2.8.0-alpha.0.patch +0 -39
package/README.md
CHANGED
|
@@ -30,6 +30,9 @@ For development / testing purposes only, each version of an applicaton can be ac
|
|
|
30
30
|
- [next.config.js](#nextconfigjs)
|
|
31
31
|
- [deploy.json](#deployjson)
|
|
32
32
|
- [serverless.yaml](#serverlessyaml)
|
|
33
|
+
- [Troubleshooting](#troubleshooting)
|
|
34
|
+
- [CloudFront Requests to API Gateway are Rejected with 403 Forbidden](#cloudfront-requests-to-api-gateway-are-rejected-with-403-forbidden)
|
|
35
|
+
- [SignatureV4 Headers](#signaturev4-headers)
|
|
33
36
|
|
|
34
37
|
# Video Preview of the Deploying CDK Construct
|
|
35
38
|
|
|
@@ -297,3 +300,29 @@ nextApp:
|
|
|
297
300
|
deploy: false
|
|
298
301
|
uploadStaticAssetsFromBuild: false
|
|
299
302
|
```
|
|
303
|
+
|
|
304
|
+
# Troubleshooting
|
|
305
|
+
|
|
306
|
+
## CloudFront Requests to API Gateway are Rejected with 403 Forbidden
|
|
307
|
+
|
|
308
|
+
Requests to the API Gateway origin can be rejected with a 403 Forbidden error if the signed request headers are not sent to the origin by CloudFront.
|
|
309
|
+
|
|
310
|
+
The error in the API Gateway CloudWatch logs will show up as:
|
|
311
|
+
|
|
312
|
+
```log
|
|
313
|
+
"authorizerError": "The request for the IAM Authorizer doesn't match the format that API Gateway expects."
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
This can be simulated by simply running `curl [api-gateway-url]`, with no headers.
|
|
317
|
+
|
|
318
|
+
To confirm that API Gateway is allowing signed requests when the IAM Authorizer is configured, establish credentials as a user that is allowed to execute the API Gateay, install `awscurl` with `pip3 install awscurl`, then then use `awscurl --service execute-api --region [api-gateway-region] [api-gateway-url]`.
|
|
319
|
+
|
|
320
|
+
Signature headers will not be sent from CloudFront to API Gateway unless the `OriginRequestPolicy` is set to specifically include those headers on requests to the origin, or the `headersBehavior` is set to `cfront.OriginRequestHeaderBehavior.all()`.
|
|
321
|
+
|
|
322
|
+
Similarly, if `presign` is used, the `OriginRequestPolicy` must be set to `cfront.OriginRequestQueryStringBehavior.all()` or to specifically forward the query string parameters used by the presigned URL.
|
|
323
|
+
|
|
324
|
+
### SignatureV4 Headers
|
|
325
|
+
- `authorization`
|
|
326
|
+
- `x-amz-date`
|
|
327
|
+
- `x-amz-security-token`
|
|
328
|
+
- `x-amz-content-sha256`
|
package/changelog.md
ADDED
package/lib/MicroApps.d.ts
CHANGED
|
@@ -1,83 +1,91 @@
|
|
|
1
1
|
import { RemovalPolicy } from 'aws-cdk-lib';
|
|
2
2
|
import * as acm from 'aws-cdk-lib/aws-certificatemanager';
|
|
3
|
+
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
|
|
3
4
|
import * as r53 from 'aws-cdk-lib/aws-route53';
|
|
4
5
|
import { Construct } from 'constructs';
|
|
5
6
|
import { IMicroAppsAPIGwy } from './MicroAppsAPIGwy';
|
|
6
7
|
import { IMicroAppsCF } from './MicroAppsCF';
|
|
8
|
+
import { IMicroAppsEdgeToOrigin } from './MicroAppsEdgeToOrigin';
|
|
7
9
|
import { IMicroAppsS3 } from './MicroAppsS3';
|
|
8
10
|
import { IMicroAppsSvcs } from './MicroAppsSvcs';
|
|
9
11
|
/**
|
|
10
|
-
*
|
|
12
|
+
* A CDK Construct for creating a MicroApps runtime environment used
|
|
13
|
+
* to host Next.js, React, or any other sort of web application with
|
|
14
|
+
* multiple versions available for comparison, quick rollbacks, quick
|
|
15
|
+
* releases, and a complete lack of user disturbance on deploys.
|
|
11
16
|
*
|
|
12
|
-
* @
|
|
17
|
+
* @remarks
|
|
18
|
+
*
|
|
19
|
+
* {@link MicroApps} provides a turn-key construct that creates all
|
|
20
|
+
* dependencies with limited exposure of underlying AWS Resource options.
|
|
21
|
+
* This construct is the easiest to use when exploring MicroApps for the
|
|
22
|
+
* first time.
|
|
23
|
+
*
|
|
24
|
+
* {@link MicroAppsAPIGwy}, {@link MicroAppsCF}, {@link MicroAppsS3},
|
|
25
|
+
* and {@link MicroAppsSvcs}, and their helper static methods, can be used
|
|
26
|
+
* to create AWS Resources more directly, to provide your own AWS Resources
|
|
27
|
+
* (e.g. an existing CloudFront Distribution), and to have more flexibility
|
|
28
|
+
* than the {@link MicroApps} construct offers.
|
|
29
|
+
*
|
|
30
|
+
* @packageDocumentation
|
|
31
|
+
*/
|
|
32
|
+
/**
|
|
33
|
+
* Properties to initialize an instance of `MicroApps`.
|
|
13
34
|
*/
|
|
14
35
|
export interface MicroAppsProps {
|
|
15
36
|
/**
|
|
16
|
-
*
|
|
37
|
+
* RemovalPolicy override for child resources
|
|
17
38
|
*
|
|
18
39
|
* Note: if set to DESTROY the S3 buckes will have `autoDeleteObjects` set to `true`
|
|
19
40
|
*
|
|
20
41
|
* @default - per resource default
|
|
21
|
-
* @experimental
|
|
22
42
|
*/
|
|
23
43
|
readonly removalPolicy?: RemovalPolicy;
|
|
24
44
|
/**
|
|
25
|
-
*
|
|
45
|
+
* Passed to NODE_ENV of Router and Deployer Lambda functions.
|
|
26
46
|
*
|
|
27
47
|
* @default dev
|
|
28
|
-
* @experimental
|
|
29
48
|
*/
|
|
30
49
|
readonly appEnv: string;
|
|
31
50
|
/**
|
|
32
|
-
*
|
|
51
|
+
* Optional asset name root
|
|
33
52
|
*
|
|
53
|
+
* @example microapps
|
|
34
54
|
* @default - resource names auto assigned
|
|
35
|
-
* @experimental
|
|
36
|
-
* @example
|
|
37
|
-
*
|
|
38
|
-
* microapps
|
|
39
55
|
*/
|
|
40
56
|
readonly assetNameRoot?: string;
|
|
41
57
|
/**
|
|
42
|
-
*
|
|
58
|
+
* Optional asset name suffix
|
|
43
59
|
*
|
|
60
|
+
* @example -dev-pr-12
|
|
44
61
|
* @default none
|
|
45
|
-
* @experimental
|
|
46
|
-
* @example
|
|
47
|
-
*
|
|
48
|
-
* -dev-pr-12
|
|
49
62
|
*/
|
|
50
63
|
readonly assetNameSuffix?: string;
|
|
51
64
|
/**
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
* @experimental
|
|
65
|
+
* Route53 zone in which to create optional `domainNameEdge` record
|
|
55
66
|
*/
|
|
56
67
|
readonly r53Zone?: r53.IHostedZone;
|
|
57
68
|
/**
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
* @experimental
|
|
69
|
+
* Certificate in US-East-1 for the CloudFront distribution.
|
|
61
70
|
*/
|
|
62
71
|
readonly certEdge?: acm.ICertificate;
|
|
63
72
|
/**
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
* @experimental
|
|
73
|
+
* Certificate in deployed region for the API Gateway.
|
|
67
74
|
*/
|
|
68
75
|
readonly certOrigin?: acm.ICertificate;
|
|
69
76
|
/**
|
|
70
|
-
*
|
|
77
|
+
* Use a strict S3 Bucket Policy that prevents applications
|
|
78
|
+
* from reading/writing/modifying/deleting files in the S3 Bucket
|
|
79
|
+
* outside of the path that is specific to their app/version.
|
|
71
80
|
*
|
|
72
81
|
* This setting should be used when applications are less than
|
|
73
82
|
* fully trusted.
|
|
74
83
|
*
|
|
75
84
|
* @default false
|
|
76
|
-
* @experimental
|
|
77
85
|
*/
|
|
78
86
|
readonly s3StrictBucketPolicy?: boolean;
|
|
79
87
|
/**
|
|
80
|
-
*
|
|
88
|
+
* Applies when using s3StrictBucketPolicy = true
|
|
81
89
|
*
|
|
82
90
|
* IAM Role or IAM User names to exclude from the DENY rules on the S3 Bucket Policy.
|
|
83
91
|
*
|
|
@@ -86,15 +94,13 @@ export interface MicroAppsProps {
|
|
|
86
94
|
* Typically any admin roles / users that need to view or manage the S3 Bucket
|
|
87
95
|
* would be added to this list.
|
|
88
96
|
*
|
|
89
|
-
* @
|
|
90
|
-
* @experimental
|
|
91
|
-
* @example
|
|
97
|
+
* @example ['arn:aws:iam::1234567890123:role/AdminAccess', 'arn:aws:iam::1234567890123:user/MyAdminUser']
|
|
92
98
|
*
|
|
93
|
-
*
|
|
99
|
+
* @see s3PolicyBypassAROAs
|
|
94
100
|
*/
|
|
95
101
|
readonly s3PolicyBypassPrincipalARNs?: string[];
|
|
96
102
|
/**
|
|
97
|
-
*
|
|
103
|
+
* Applies when using s3StrictBucketPolicy = true
|
|
98
104
|
*
|
|
99
105
|
* AROAs of the IAM Role to exclude from the DENY rules on the S3 Bucket Policy.
|
|
100
106
|
* This allows sessions that assume the IAM Role to be excluded from the
|
|
@@ -113,61 +119,51 @@ export interface MicroAppsProps {
|
|
|
113
119
|
* wildcard matches and does not do wildcard matches implicitly either.
|
|
114
120
|
*
|
|
115
121
|
* The AROA must be used because there are only 3 Principal variables available:
|
|
116
|
-
*
|
|
117
|
-
*
|
|
122
|
+
* https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#principaltable
|
|
123
|
+
* aws:username, aws:userid, aws:PrincipalTag
|
|
118
124
|
*
|
|
119
125
|
* For an assumed role, aws:username is blank, aws:userid is:
|
|
120
|
-
*
|
|
126
|
+
* [unique id AKA AROA for Role]:[session name]
|
|
121
127
|
*
|
|
122
128
|
* Table of unique ID prefixes such as AROA:
|
|
123
|
-
*
|
|
129
|
+
* https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-prefixes
|
|
124
130
|
*
|
|
125
131
|
* The name of the role is simply not available for an assumed role and, if it was,
|
|
126
132
|
* a complicated comparison would be requierd to prevent exclusion
|
|
127
133
|
* of applying the Deny Rule to roles from other accounts.
|
|
128
134
|
*
|
|
129
135
|
* To get the AROA with the AWS CLI:
|
|
130
|
-
*
|
|
131
|
-
*
|
|
136
|
+
* aws iam get-role --role-name ROLE-NAME
|
|
137
|
+
* aws iam get-user -–user-name USER-NAME
|
|
132
138
|
*
|
|
133
|
-
* @
|
|
134
|
-
* @experimental
|
|
135
|
-
* @example
|
|
139
|
+
* @example [ 'AROA1234567890123' ]
|
|
136
140
|
*
|
|
137
|
-
*
|
|
141
|
+
* @see s3StrictBucketPolicy
|
|
138
142
|
*/
|
|
139
143
|
readonly s3PolicyBypassAROAs?: string[];
|
|
140
144
|
/**
|
|
141
|
-
*
|
|
145
|
+
* Optional custom domain name for the CloudFront distribution.
|
|
142
146
|
*
|
|
147
|
+
* @example apps.pwrdrvr.com
|
|
143
148
|
* @default auto-assigned
|
|
144
|
-
* @experimental
|
|
145
|
-
* @example
|
|
146
|
-
*
|
|
147
|
-
* apps.pwrdrvr.com
|
|
148
149
|
*/
|
|
149
150
|
readonly domainNameEdge?: string;
|
|
150
151
|
/**
|
|
151
|
-
*
|
|
152
|
+
* Optional custom domain name for the API Gateway HTTPv2 API.
|
|
152
153
|
*
|
|
154
|
+
* @example apps-origin.pwrdrvr.com
|
|
153
155
|
* @default auto-assigned
|
|
154
|
-
* @experimental
|
|
155
|
-
* @example
|
|
156
|
-
*
|
|
157
|
-
* apps-origin.pwrdrvr.com
|
|
158
156
|
*/
|
|
159
157
|
readonly domainNameOrigin?: string;
|
|
160
158
|
/**
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
* @experimental
|
|
164
|
-
* @example
|
|
159
|
+
* Path prefix on the root of the CloudFront distribution
|
|
165
160
|
*
|
|
166
|
-
* dev/
|
|
161
|
+
* @example dev/
|
|
167
162
|
*/
|
|
168
163
|
readonly rootPathPrefix?: string;
|
|
169
164
|
/**
|
|
170
|
-
*
|
|
165
|
+
* Create an extra Behavior (Route) for /api/ that allows
|
|
166
|
+
* API routes to have a period in them.
|
|
171
167
|
*
|
|
172
168
|
* When false API routes with a period in the path will get routed to S3.
|
|
173
169
|
*
|
|
@@ -175,45 +171,85 @@ export interface MicroAppsProps {
|
|
|
175
171
|
* even if they have a period in the path.
|
|
176
172
|
*
|
|
177
173
|
* @default true
|
|
178
|
-
* @experimental
|
|
179
174
|
*/
|
|
180
175
|
readonly createAPIPathRoute?: boolean;
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* (experimental) Represents a MicroApps.
|
|
184
|
-
*
|
|
185
|
-
* @experimental
|
|
186
|
-
*/
|
|
187
|
-
export interface IMicroApps {
|
|
188
176
|
/**
|
|
189
|
-
*
|
|
177
|
+
* Adds an X-Forwarded-Host-Header when calling API Gateway
|
|
190
178
|
*
|
|
191
|
-
*
|
|
179
|
+
* Can only be trusted if `signingMode` is enabled, which restricts
|
|
180
|
+
* access to API Gateway to only IAM signed requests.
|
|
181
|
+
*
|
|
182
|
+
* Note: if true, creates OriginRequest Lambda @ Edge function for API Gateway Origin
|
|
183
|
+
* @default true
|
|
192
184
|
*/
|
|
193
|
-
readonly
|
|
185
|
+
readonly addXForwardedHostHeader?: boolean;
|
|
194
186
|
/**
|
|
195
|
-
* (
|
|
187
|
+
* Replaces Host header (which will be the Edge domain name) with the Origin domain name
|
|
188
|
+
* when enabled. This is necessary when API Gateway has not been configured
|
|
189
|
+
* with a custom domain name that matches the exact domain name used by the CloudFront
|
|
190
|
+
* Distribution AND when the OriginRequestPolicy.HeadersBehavior is set
|
|
191
|
+
* to pass all headers to the origin.
|
|
196
192
|
*
|
|
197
|
-
* @
|
|
193
|
+
* Note: if true, creates OriginRequest Lambda @ Edge function for API Gateway Origin
|
|
194
|
+
* @default true
|
|
198
195
|
*/
|
|
199
|
-
readonly
|
|
196
|
+
readonly replaceHostHeader?: boolean;
|
|
200
197
|
/**
|
|
201
|
-
*
|
|
198
|
+
* Requires IAM auth on the API Gateway origin if not set to 'none'.
|
|
199
|
+
*
|
|
200
|
+
* 'sign' - Uses request headers for auth.
|
|
201
|
+
* 'presign' - Uses query string for auth.
|
|
202
|
+
*
|
|
203
|
+
* If enabled,
|
|
202
204
|
*
|
|
203
|
-
* @
|
|
205
|
+
* Note: if 'sign' or 'presign', creates OriginRequest Lambda @ Edge function for API Gateway Origin
|
|
206
|
+
* @default 'sign'
|
|
204
207
|
*/
|
|
205
|
-
readonly
|
|
208
|
+
readonly signingMode?: 'sign' | 'presign' | 'none';
|
|
206
209
|
/**
|
|
207
|
-
*
|
|
210
|
+
* Origin region that API Gateway will be deployed to, used
|
|
211
|
+
* for the config.yml on the Edge function to sign requests for
|
|
212
|
+
* the correct region
|
|
208
213
|
*
|
|
209
|
-
* @
|
|
214
|
+
* @default undefined
|
|
210
215
|
*/
|
|
216
|
+
readonly originRegion?: string;
|
|
217
|
+
/**
|
|
218
|
+
* Existing table for apps/versions/rules
|
|
219
|
+
*
|
|
220
|
+
* @warning - It is *strongly* suggested that production stacks create
|
|
221
|
+
* their own DynamoDB Table and pass it into this construct, for protection
|
|
222
|
+
* against data loss due to logical ID changes, the ability to configure
|
|
223
|
+
* Provisioned capacity with Auto Scaling, the ability to add additional indices, etc.
|
|
224
|
+
*
|
|
225
|
+
* Requirements:
|
|
226
|
+
* - Hash Key: `PK`
|
|
227
|
+
* - Sort Key: `SK`
|
|
228
|
+
*
|
|
229
|
+
* @default created by construct
|
|
230
|
+
*/
|
|
231
|
+
readonly table?: dynamodb.ITable;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Represents a MicroApps
|
|
235
|
+
*/
|
|
236
|
+
export interface IMicroApps {
|
|
237
|
+
/** {@inheritdoc IMicroAppsCF} */
|
|
238
|
+
readonly cf: IMicroAppsCF;
|
|
239
|
+
/** {@inheritdoc IMicroAppsEdgeToOrigin} */
|
|
240
|
+
readonly edgeToOrigin?: IMicroAppsEdgeToOrigin;
|
|
241
|
+
/** {@inheritdoc IMicroAppsS3} */
|
|
242
|
+
readonly s3: IMicroAppsS3;
|
|
243
|
+
/** {@inheritdoc IMicroAppsSvcs} */
|
|
244
|
+
readonly svcs: IMicroAppsSvcs;
|
|
245
|
+
/** {@inheritdoc IMicroAppsAPIGwy} */
|
|
211
246
|
readonly apigwy: IMicroAppsAPIGwy;
|
|
212
247
|
}
|
|
213
248
|
/**
|
|
214
|
-
*
|
|
249
|
+
* Create a new MicroApps "turnkey" construct for simple
|
|
250
|
+
* deployments and for initial evaulation of the MicroApps framework.
|
|
215
251
|
*
|
|
216
|
-
* Use this construct to create a working entire stack.
|
|
252
|
+
* Use this construct to create a PoC working entire stack.
|
|
217
253
|
*
|
|
218
254
|
* Do not use this construct when adding MicroApps to an existing
|
|
219
255
|
* CloudFront, API Gateway, S3 Bucket, etc. or where access
|
|
@@ -221,40 +257,25 @@ export interface IMicroApps {
|
|
|
221
257
|
* add additional Behaviors to the CloudFront distribution, set authorizors
|
|
222
258
|
* on API Gateway, etc.).
|
|
223
259
|
*
|
|
224
|
-
* @
|
|
225
|
-
*
|
|
260
|
+
* @warning This construct is not intended for production use.
|
|
261
|
+
* In a production stack the DynamoDB Table, API Gateway, S3 Buckets,
|
|
262
|
+
* etc. should be created in a "durable" stack where the IDs will not
|
|
263
|
+
* change and where changes to the MicroApps construct will not
|
|
264
|
+
* cause failures to deploy or data to be deleted.
|
|
265
|
+
*
|
|
266
|
+
* @see {@link https://github.com/pwrdrvr/microapps-core/blob/main/packages/cdk/lib/MicroApps.ts | example usage in a CDK Stack }
|
|
226
267
|
*/
|
|
227
268
|
export declare class MicroApps extends Construct implements IMicroApps {
|
|
228
269
|
private _cf;
|
|
229
|
-
/**
|
|
230
|
-
* (experimental) {@inheritdoc IMicroAppsCF}.
|
|
231
|
-
*
|
|
232
|
-
* @experimental
|
|
233
|
-
*/
|
|
234
270
|
get cf(): IMicroAppsCF;
|
|
271
|
+
private _edgeToOrigin?;
|
|
272
|
+
get edgeToOrigin(): IMicroAppsEdgeToOrigin | undefined;
|
|
235
273
|
private _s3;
|
|
236
|
-
/**
|
|
237
|
-
* (experimental) {@inheritdoc IMicroAppsS3}.
|
|
238
|
-
*
|
|
239
|
-
* @experimental
|
|
240
|
-
*/
|
|
241
274
|
get s3(): IMicroAppsS3;
|
|
242
275
|
private _apigwy;
|
|
243
|
-
/**
|
|
244
|
-
* (experimental) {@inheritdoc IMicroAppsAPIGwy}.
|
|
245
|
-
*
|
|
246
|
-
* @experimental
|
|
247
|
-
*/
|
|
248
276
|
get apigwy(): IMicroAppsAPIGwy;
|
|
249
277
|
private _svcs;
|
|
250
|
-
/**
|
|
251
|
-
* (experimental) {@inheritdoc IMicroAppsSvcs}.
|
|
252
|
-
*
|
|
253
|
-
* @experimental
|
|
254
|
-
*/
|
|
255
278
|
get svcs(): IMicroAppsSvcs;
|
|
256
|
-
/**
|
|
257
|
-
* @experimental
|
|
258
|
-
*/
|
|
259
279
|
constructor(scope: Construct, id: string, props?: MicroAppsProps);
|
|
260
280
|
}
|
|
281
|
+
//# sourceMappingURL=MicroApps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MicroApps.d.ts","sourceRoot":"","sources":["../src/MicroApps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,GAAG,MAAM,oCAAoC,CAAC;AAC1D,OAAO,KAAK,QAAQ,MAAM,0BAA0B,CAAC;AACrD,OAAO,KAAK,GAAG,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAmB,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAe,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAyB,MAAM,yBAAyB,CAAC;AACxF,OAAO,EAAE,YAAY,EAAe,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAiB,MAAM,iBAAiB,CAAC;AAGhE;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IAEvC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAElC;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC;IAEnC;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC;IAErC;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC;IAEvC;;;;;;;;;OASG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAExC;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,2BAA2B,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwCG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAExC;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAEnC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAEtC;;;;;;;;OAQG;IACH,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAE3C;;;;;;;;;OASG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAErC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;IAEnD;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAE/B;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC;IAE1B,2CAA2C;IAC3C,QAAQ,CAAC,YAAY,CAAC,EAAE,sBAAsB,CAAC;IAE/C,iCAAiC;IACjC,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC;IAE1B,mCAAmC;IACnC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAE9B,qCAAqC;IACrC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,SAAU,SAAQ,SAAU,YAAW,UAAU;IAC5D,OAAO,CAAC,GAAG,CAAc;IACzB,IAAW,EAAE,IAAI,YAAY,CAE5B;IAED,OAAO,CAAC,aAAa,CAAC,CAAwB;IAC9C,IAAW,YAAY,IAAI,sBAAsB,GAAG,SAAS,CAE5D;IAED,OAAO,CAAC,GAAG,CAAc;IACzB,IAAW,EAAE,IAAI,YAAY,CAE5B;IAED,OAAO,CAAC,OAAO,CAAkB;IACjC,IAAW,MAAM,IAAI,gBAAgB,CAEpC;IAED,OAAO,CAAC,KAAK,CAAgB;IAC7B,IAAW,IAAI,IAAI,cAAc,CAEhC;gBAEW,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,cAAc;CA6FjE"}
|
package/lib/MicroApps.js
CHANGED
|
@@ -6,13 +6,15 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
6
6
|
const constructs_1 = require("constructs");
|
|
7
7
|
const MicroAppsAPIGwy_1 = require("./MicroAppsAPIGwy");
|
|
8
8
|
const MicroAppsCF_1 = require("./MicroAppsCF");
|
|
9
|
+
const MicroAppsEdgeToOrigin_1 = require("./MicroAppsEdgeToOrigin");
|
|
9
10
|
const MicroAppsS3_1 = require("./MicroAppsS3");
|
|
10
11
|
const MicroAppsSvcs_1 = require("./MicroAppsSvcs");
|
|
11
12
|
const ReverseDomain_1 = require("./utils/ReverseDomain");
|
|
12
13
|
/**
|
|
13
|
-
*
|
|
14
|
+
* Create a new MicroApps "turnkey" construct for simple
|
|
15
|
+
* deployments and for initial evaulation of the MicroApps framework.
|
|
14
16
|
*
|
|
15
|
-
* Use this construct to create a working entire stack.
|
|
17
|
+
* Use this construct to create a PoC working entire stack.
|
|
16
18
|
*
|
|
17
19
|
* Do not use this construct when adding MicroApps to an existing
|
|
18
20
|
* CloudFront, API Gateway, S3 Bucket, etc. or where access
|
|
@@ -20,19 +22,21 @@ const ReverseDomain_1 = require("./utils/ReverseDomain");
|
|
|
20
22
|
* add additional Behaviors to the CloudFront distribution, set authorizors
|
|
21
23
|
* on API Gateway, etc.).
|
|
22
24
|
*
|
|
23
|
-
* @
|
|
24
|
-
*
|
|
25
|
+
* @warning This construct is not intended for production use.
|
|
26
|
+
* In a production stack the DynamoDB Table, API Gateway, S3 Buckets,
|
|
27
|
+
* etc. should be created in a "durable" stack where the IDs will not
|
|
28
|
+
* change and where changes to the MicroApps construct will not
|
|
29
|
+
* cause failures to deploy or data to be deleted.
|
|
30
|
+
*
|
|
31
|
+
* @see {@link https://github.com/pwrdrvr/microapps-core/blob/main/packages/cdk/lib/MicroApps.ts | example usage in a CDK Stack }
|
|
25
32
|
*/
|
|
26
33
|
class MicroApps extends constructs_1.Construct {
|
|
27
|
-
/**
|
|
28
|
-
* @experimental
|
|
29
|
-
*/
|
|
30
34
|
constructor(scope, id, props) {
|
|
31
35
|
super(scope, id);
|
|
32
36
|
if (props === undefined) {
|
|
33
37
|
throw new Error('props must be set');
|
|
34
38
|
}
|
|
35
|
-
const { domainNameEdge, domainNameOrigin, assetNameRoot, assetNameSuffix, r53Zone, certEdge, appEnv = 'dev', certOrigin, removalPolicy, s3PolicyBypassAROAs, s3PolicyBypassPrincipalARNs, s3StrictBucketPolicy, rootPathPrefix, createAPIPathRoute = true, } = props;
|
|
39
|
+
const { domainNameEdge, domainNameOrigin, assetNameRoot, assetNameSuffix, r53Zone, certEdge, appEnv = 'dev', certOrigin, removalPolicy, s3PolicyBypassAROAs, s3PolicyBypassPrincipalARNs, s3StrictBucketPolicy, rootPathPrefix, createAPIPathRoute = true, addXForwardedHostHeader = true, replaceHostHeader = true, signingMode = 'sign', originRegion, table, } = props;
|
|
36
40
|
this._s3 = new MicroAppsS3_1.MicroAppsS3(this, 's3', {
|
|
37
41
|
removalPolicy,
|
|
38
42
|
bucketLogsName: domainNameEdge ? `${ReverseDomain_1.reverseDomain(domainNameEdge)}-logs` : undefined,
|
|
@@ -52,7 +56,19 @@ class MicroApps extends constructs_1.Construct {
|
|
|
52
56
|
r53Zone,
|
|
53
57
|
certOrigin,
|
|
54
58
|
rootPathPrefix,
|
|
59
|
+
requireIAMAuthorization: signingMode !== 'none',
|
|
55
60
|
});
|
|
61
|
+
if (signingMode !== 'none' || replaceHostHeader || addXForwardedHostHeader) {
|
|
62
|
+
this._edgeToOrigin = new MicroAppsEdgeToOrigin_1.MicroAppsEdgeToOrigin(this, 'edgeToOrigin', {
|
|
63
|
+
assetNameRoot,
|
|
64
|
+
assetNameSuffix,
|
|
65
|
+
removalPolicy,
|
|
66
|
+
addXForwardedHostHeader,
|
|
67
|
+
replaceHostHeader,
|
|
68
|
+
originRegion,
|
|
69
|
+
signingMode,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
56
72
|
this._cf = new MicroAppsCF_1.MicroAppsCF(this, 'cft', {
|
|
57
73
|
removalPolicy,
|
|
58
74
|
assetNameRoot,
|
|
@@ -66,6 +82,7 @@ class MicroApps extends constructs_1.Construct {
|
|
|
66
82
|
bucketLogs: this._s3.bucketLogs,
|
|
67
83
|
rootPathPrefix,
|
|
68
84
|
createAPIPathRoute,
|
|
85
|
+
edgeToOriginLambdas: this._edgeToOrigin ? this._edgeToOrigin.edgeToOriginLambdas : undefined,
|
|
69
86
|
});
|
|
70
87
|
this._svcs = new MicroAppsSvcs_1.MicroAppsSvcs(this, 'svcs', {
|
|
71
88
|
httpApi: this.apigwy.httpApi,
|
|
@@ -80,42 +97,27 @@ class MicroApps extends constructs_1.Construct {
|
|
|
80
97
|
s3PolicyBypassPrincipalARNs,
|
|
81
98
|
s3StrictBucketPolicy,
|
|
82
99
|
rootPathPrefix,
|
|
100
|
+
requireIAMAuthorization: signingMode !== 'none',
|
|
101
|
+
table,
|
|
83
102
|
});
|
|
84
103
|
}
|
|
85
|
-
/**
|
|
86
|
-
* (experimental) {@inheritdoc IMicroAppsCF}.
|
|
87
|
-
*
|
|
88
|
-
* @experimental
|
|
89
|
-
*/
|
|
90
104
|
get cf() {
|
|
91
105
|
return this._cf;
|
|
92
106
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
* @experimental
|
|
97
|
-
*/
|
|
107
|
+
get edgeToOrigin() {
|
|
108
|
+
return this._edgeToOrigin;
|
|
109
|
+
}
|
|
98
110
|
get s3() {
|
|
99
111
|
return this._s3;
|
|
100
112
|
}
|
|
101
|
-
/**
|
|
102
|
-
* (experimental) {@inheritdoc IMicroAppsAPIGwy}.
|
|
103
|
-
*
|
|
104
|
-
* @experimental
|
|
105
|
-
*/
|
|
106
113
|
get apigwy() {
|
|
107
114
|
return this._apigwy;
|
|
108
115
|
}
|
|
109
|
-
/**
|
|
110
|
-
* (experimental) {@inheritdoc IMicroAppsSvcs}.
|
|
111
|
-
*
|
|
112
|
-
* @experimental
|
|
113
|
-
*/
|
|
114
116
|
get svcs() {
|
|
115
117
|
return this._svcs;
|
|
116
118
|
}
|
|
117
119
|
}
|
|
118
120
|
exports.MicroApps = MicroApps;
|
|
119
121
|
_a = JSII_RTTI_SYMBOL_1;
|
|
120
|
-
MicroApps[_a] = { fqn: "@pwrdrvr/microapps-cdk.MicroApps", version: "0.2.
|
|
121
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWljcm9BcHBzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL01pY3JvQXBwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUdBLDJDQUF1QztBQUN2Qyx1REFBc0U7QUFDdEUsK0NBQTBEO0FBQzFELCtDQUEwRDtBQUMxRCxtREFBZ0U7QUFDaEUseURBQXNEOzs7Ozs7Ozs7Ozs7Ozs7QUFpRXRELE1BQWEsU0FBVSxTQUFRLHNCQUFTOzs7O0lBcUJ0QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXNCO1FBQzlELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUN0QztRQUVELE1BQU0sRUFDSixjQUFjLEVBQ2QsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixlQUFlLEVBQ2YsT0FBTyxFQUNQLFFBQVEsRUFDUixNQUFNLEdBQUcsS0FBSyxFQUNkLFVBQVUsRUFDVixhQUFhLEVBQ2IsbUJBQW1CLEVBQ25CLDJCQUEyQixFQUMzQixvQkFBb0IsRUFDcEIsY0FBYyxFQUNkLGtCQUFrQixHQUFHLElBQUksR0FDMUIsR0FBRyxLQUFLLENBQUM7UUFFVixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUkseUJBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO1lBQ3JDLGFBQWE7WUFDYixjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLDZCQUFhLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNwRixjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLDZCQUFhLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUMvRSxxQkFBcUIsRUFBRSxjQUFjO2dCQUNuQyxDQUFDLENBQUMsR0FBRyw2QkFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVO2dCQUM1QyxDQUFDLENBQUMsU0FBUztZQUNiLGFBQWE7WUFDYixlQUFlO1NBQ2hCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxpQ0FBZSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7WUFDOUMsYUFBYTtZQUNiLGFBQWE7WUFDYixlQUFlO1lBQ2YsY0FBYztZQUNkLGdCQUFnQjtZQUNoQixPQUFPO1lBQ1AsVUFBVTtZQUNWLGNBQWM7U0FDZixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUkseUJBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO1lBQ3RDLGFBQWE7WUFDYixhQUFhO1lBQ2IsZUFBZTtZQUNmLGNBQWM7WUFDZCxnQkFBZ0I7WUFDaEIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTztZQUM3QixPQUFPO1lBQ1AsUUFBUTtZQUNSLGdCQUFnQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCO1lBQzNDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVU7WUFDL0IsY0FBYztZQUNkLGtCQUFrQjtTQUNuQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksNkJBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQzNDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87WUFDNUIsYUFBYTtZQUNiLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVU7WUFDL0IsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYTtZQUNyQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQjtZQUM3QyxhQUFhO1lBQ2IsZUFBZTtZQUNmLE1BQU07WUFDTixtQkFBbUI7WUFDbkIsMkJBQTJCO1lBQzNCLG9CQUFvQjtZQUNwQixjQUFjO1NBQ2YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7Ozs7O0lBM0ZELElBQVcsRUFBRTtRQUNYLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDOzs7Ozs7SUFHRCxJQUFXLEVBQUU7UUFDWCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEIsQ0FBQzs7Ozs7O0lBR0QsSUFBVyxNQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7Ozs7OztJQUdELElBQVcsSUFBSTtRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDOztBQW5CSCw4QkE4RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZW1vdmFsUG9saWN5IH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgYWNtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXInO1xuaW1wb3J0ICogYXMgcjUzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1yb3V0ZTUzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgSU1pY3JvQXBwc0FQSUd3eSwgTWljcm9BcHBzQVBJR3d5IH0gZnJvbSAnLi9NaWNyb0FwcHNBUElHd3knO1xuaW1wb3J0IHsgSU1pY3JvQXBwc0NGLCBNaWNyb0FwcHNDRiB9IGZyb20gJy4vTWljcm9BcHBzQ0YnO1xuaW1wb3J0IHsgSU1pY3JvQXBwc1MzLCBNaWNyb0FwcHNTMyB9IGZyb20gJy4vTWljcm9BcHBzUzMnO1xuaW1wb3J0IHsgSU1pY3JvQXBwc1N2Y3MsIE1pY3JvQXBwc1N2Y3MgfSBmcm9tICcuL01pY3JvQXBwc1N2Y3MnO1xuaW1wb3J0IHsgcmV2ZXJzZURvbWFpbiB9IGZyb20gJy4vdXRpbHMvUmV2ZXJzZURvbWFpbic7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgaW50ZXJmYWNlIE1pY3JvQXBwc1Byb3BzIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcmVtb3ZhbFBvbGljeT86IFJlbW92YWxQb2xpY3k7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBhcHBFbnY6IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBhc3NldE5hbWVSb290Pzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBhc3NldE5hbWVTdWZmaXg/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSByNTNab25lPzogcjUzLklIb3N0ZWRab25lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBjZXJ0RWRnZT86IGFjbS5JQ2VydGlmaWNhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGNlcnRPcmlnaW4/OiBhY20uSUNlcnRpZmljYXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBzM1N0cmljdEJ1Y2tldFBvbGljeT86IGJvb2xlYW47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBzM1BvbGljeUJ5cGFzc1ByaW5jaXBhbEFSTnM/OiBzdHJpbmdbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgczNQb2xpY3lCeXBhc3NBUk9Bcz86IHN0cmluZ1tdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZG9tYWluTmFtZUVkZ2U/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBkb21haW5OYW1lT3JpZ2luPzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSByb290UGF0aFByZWZpeD86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgY3JlYXRlQVBJUGF0aFJvdXRlPzogYm9vbGVhbjtcbn1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgaW50ZXJmYWNlIElNaWNyb0FwcHMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgY2Y6IElNaWNyb0FwcHNDRjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgczM6IElNaWNyb0FwcHNTMztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBzdmNzOiBJTWljcm9BcHBzU3ZjcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGFwaWd3eTogSU1pY3JvQXBwc0FQSUd3eTtcbn1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgY2xhc3MgTWljcm9BcHBzIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSU1pY3JvQXBwcyB7XG4gIHByaXZhdGUgX2NmOiBNaWNyb0FwcHNDRjtcbiAgcHVibGljIGdldCBjZigpOiBJTWljcm9BcHBzQ0Yge1xuICAgIHJldHVybiB0aGlzLl9jZjtcbiAgfVxuXG4gIHByaXZhdGUgX3MzOiBNaWNyb0FwcHNTMztcbiAgcHVibGljIGdldCBzMygpOiBJTWljcm9BcHBzUzMge1xuICAgIHJldHVybiB0aGlzLl9zMztcbiAgfVxuXG4gIHByaXZhdGUgX2FwaWd3eTogTWljcm9BcHBzQVBJR3d5O1xuICBwdWJsaWMgZ2V0IGFwaWd3eSgpOiBJTWljcm9BcHBzQVBJR3d5IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpZ3d5O1xuICB9XG5cbiAgcHJpdmF0ZSBfc3ZjczogTWljcm9BcHBzU3ZjcztcbiAgcHVibGljIGdldCBzdmNzKCk6IElNaWNyb0FwcHNTdmNzIHtcbiAgICByZXR1cm4gdGhpcy5fc3ZjcztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogTWljcm9BcHBzUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgaWYgKHByb3BzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncHJvcHMgbXVzdCBiZSBzZXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBkb21haW5OYW1lRWRnZSxcbiAgICAgIGRvbWFpbk5hbWVPcmlnaW4sXG4gICAgICBhc3NldE5hbWVSb290LFxuICAgICAgYXNzZXROYW1lU3VmZml4LFxuICAgICAgcjUzWm9uZSxcbiAgICAgIGNlcnRFZGdlLFxuICAgICAgYXBwRW52ID0gJ2RldicsXG4gICAgICBjZXJ0T3JpZ2luLFxuICAgICAgcmVtb3ZhbFBvbGljeSxcbiAgICAgIHMzUG9saWN5QnlwYXNzQVJPQXMsXG4gICAgICBzM1BvbGljeUJ5cGFzc1ByaW5jaXBhbEFSTnMsXG4gICAgICBzM1N0cmljdEJ1Y2tldFBvbGljeSxcbiAgICAgIHJvb3RQYXRoUHJlZml4LFxuICAgICAgY3JlYXRlQVBJUGF0aFJvdXRlID0gdHJ1ZSxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICB0aGlzLl9zMyA9IG5ldyBNaWNyb0FwcHNTMyh0aGlzLCAnczMnLCB7XG4gICAgICByZW1vdmFsUG9saWN5LFxuICAgICAgYnVja2V0TG9nc05hbWU6IGRvbWFpbk5hbWVFZGdlID8gYCR7cmV2ZXJzZURvbWFpbihkb21haW5OYW1lRWRnZSl9LWxvZ3NgIDogdW5kZWZpbmVkLFxuICAgICAgYnVja2V0QXBwc05hbWU6IGRvbWFpbk5hbWVFZGdlID8gYCR7cmV2ZXJzZURvbWFpbihkb21haW5OYW1lRWRnZSl9YCA6IHVuZGVmaW5lZCxcbiAgICAgIGJ1Y2tldEFwcHNTdGFnaW5nTmFtZTogZG9tYWluTmFtZUVkZ2VcbiAgICAgICAgPyBgJHtyZXZlcnNlRG9tYWluKGRvbWFpbk5hbWVFZGdlKX0tc3RhZ2luZ2BcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBhc3NldE5hbWVSb290LFxuICAgICAgYXNzZXROYW1lU3VmZml4LFxuICAgIH0pO1xuICAgIHRoaXMuX2FwaWd3eSA9IG5ldyBNaWNyb0FwcHNBUElHd3kodGhpcywgJ2FwaScsIHtcbiAgICAgIHJlbW92YWxQb2xpY3ksXG4gICAgICBhc3NldE5hbWVSb290LFxuICAgICAgYXNzZXROYW1lU3VmZml4LFxuICAgICAgZG9tYWluTmFtZUVkZ2UsXG4gICAgICBkb21haW5OYW1lT3JpZ2luLFxuICAgICAgcjUzWm9uZSxcbiAgICAgIGNlcnRPcmlnaW4sXG4gICAgICByb290UGF0aFByZWZpeCxcbiAgICB9KTtcbiAgICB0aGlzLl9jZiA9IG5ldyBNaWNyb0FwcHNDRih0aGlzLCAnY2Z0Jywge1xuICAgICAgcmVtb3ZhbFBvbGljeSxcbiAgICAgIGFzc2V0TmFtZVJvb3QsXG4gICAgICBhc3NldE5hbWVTdWZmaXgsXG4gICAgICBkb21haW5OYW1lRWRnZSxcbiAgICAgIGRvbWFpbk5hbWVPcmlnaW4sXG4gICAgICBodHRwQXBpOiB0aGlzLl9hcGlnd3kuaHR0cEFwaSxcbiAgICAgIHI1M1pvbmUsXG4gICAgICBjZXJ0RWRnZSxcbiAgICAgIGJ1Y2tldEFwcHNPcmlnaW46IHRoaXMuX3MzLmJ1Y2tldEFwcHNPcmlnaW4sXG4gICAgICBidWNrZXRMb2dzOiB0aGlzLl9zMy5idWNrZXRMb2dzLFxuICAgICAgcm9vdFBhdGhQcmVmaXgsXG4gICAgICBjcmVhdGVBUElQYXRoUm91dGUsXG4gICAgfSk7XG4gICAgdGhpcy5fc3ZjcyA9IG5ldyBNaWNyb0FwcHNTdmNzKHRoaXMsICdzdmNzJywge1xuICAgICAgaHR0cEFwaTogdGhpcy5hcGlnd3kuaHR0cEFwaSxcbiAgICAgIHJlbW92YWxQb2xpY3ksXG4gICAgICBidWNrZXRBcHBzOiB0aGlzLl9zMy5idWNrZXRBcHBzLFxuICAgICAgYnVja2V0QXBwc09BSTogdGhpcy5fczMuYnVja2V0QXBwc09BSSxcbiAgICAgIGJ1Y2tldEFwcHNTdGFnaW5nOiB0aGlzLl9zMy5idWNrZXRBcHBzU3RhZ2luZyxcbiAgICAgIGFzc2V0TmFtZVJvb3QsXG4gICAgICBhc3NldE5hbWVTdWZmaXgsXG4gICAgICBhcHBFbnYsXG4gICAgICBzM1BvbGljeUJ5cGFzc0FST0FzLFxuICAgICAgczNQb2xpY3lCeXBhc3NQcmluY2lwYWxBUk5zLFxuICAgICAgczNTdHJpY3RCdWNrZXRQb2xpY3ksXG4gICAgICByb290UGF0aFByZWZpeCxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
122
|
+
MicroApps[_a] = { fqn: "@pwrdrvr/microapps-cdk.MicroApps", version: "0.2.11" };
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWljcm9BcHBzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL01pY3JvQXBwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUlBLDJDQUF1QztBQUN2Qyx1REFBc0U7QUFDdEUsK0NBQTBEO0FBQzFELG1FQUF3RjtBQUN4RiwrQ0FBMEQ7QUFDMUQsbURBQWdFO0FBQ2hFLHlEQUFzRDtBQXdRdEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFhLFNBQVUsU0FBUSxzQkFBUztJQTBCdEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFzQjtRQUM5RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7U0FDdEM7UUFFRCxNQUFNLEVBQ0osY0FBYyxFQUNkLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsZUFBZSxFQUNmLE9BQU8sRUFDUCxRQUFRLEVBQ1IsTUFBTSxHQUFHLEtBQUssRUFDZCxVQUFVLEVBQ1YsYUFBYSxFQUNiLG1CQUFtQixFQUNuQiwyQkFBMkIsRUFDM0Isb0JBQW9CLEVBQ3BCLGNBQWMsRUFDZCxrQkFBa0IsR0FBRyxJQUFJLEVBQ3pCLHVCQUF1QixHQUFHLElBQUksRUFDOUIsaUJBQWlCLEdBQUcsSUFBSSxFQUN4QixXQUFXLEdBQUcsTUFBTSxFQUNwQixZQUFZLEVBQ1osS0FBSyxHQUNOLEdBQUcsS0FBSyxDQUFDO1FBRVYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLHlCQUFXLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtZQUNyQyxhQUFhO1lBQ2IsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyw2QkFBYSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDcEYsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyw2QkFBYSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDL0UscUJBQXFCLEVBQUUsY0FBYztnQkFDbkMsQ0FBQyxDQUFDLEdBQUcsNkJBQWEsQ0FBQyxjQUFjLENBQUMsVUFBVTtnQkFDNUMsQ0FBQyxDQUFDLFNBQVM7WUFDYixhQUFhO1lBQ2IsZUFBZTtTQUNoQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksaUNBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO1lBQzlDLGFBQWE7WUFDYixhQUFhO1lBQ2IsZUFBZTtZQUNmLGNBQWM7WUFDZCxnQkFBZ0I7WUFDaEIsT0FBTztZQUNQLFVBQVU7WUFDVixjQUFjO1lBQ2QsdUJBQXVCLEVBQUUsV0FBVyxLQUFLLE1BQU07U0FDaEQsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxXQUFXLEtBQUssTUFBTSxJQUFJLGlCQUFpQixJQUFJLHVCQUF1QixFQUFFO1lBQzFFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSw2Q0FBcUIsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFO2dCQUNuRSxhQUFhO2dCQUNiLGVBQWU7Z0JBQ2YsYUFBYTtnQkFDYix1QkFBdUI7Z0JBQ3ZCLGlCQUFpQjtnQkFDakIsWUFBWTtnQkFDWixXQUFXO2FBQ1osQ0FBQyxDQUFDO1NBQ0o7UUFDRCxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUkseUJBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO1lBQ3RDLGFBQWE7WUFDYixhQUFhO1lBQ2IsZUFBZTtZQUNmLGNBQWM7WUFDZCxnQkFBZ0I7WUFDaEIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTztZQUM3QixPQUFPO1lBQ1AsUUFBUTtZQUNSLGdCQUFnQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCO1lBQzNDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVU7WUFDL0IsY0FBYztZQUNkLGtCQUFrQjtZQUNsQixtQkFBbUIsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQzdGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSw2QkFBYSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDM0MsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTztZQUM1QixhQUFhO1lBQ2IsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVTtZQUMvQixhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhO1lBQ3JDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCO1lBQzdDLGFBQWE7WUFDYixlQUFlO1lBQ2YsTUFBTTtZQUNOLG1CQUFtQjtZQUNuQiwyQkFBMkI7WUFDM0Isb0JBQW9CO1lBQ3BCLGNBQWM7WUFDZCx1QkFBdUIsRUFBRSxXQUFXLEtBQUssTUFBTTtZQUMvQyxLQUFLO1NBQ04sQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQXBIRCxJQUFXLEVBQUU7UUFDWCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEIsQ0FBQztJQUdELElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUdELElBQVcsRUFBRTtRQUNYLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0lBR0QsSUFBVyxNQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFHRCxJQUFXLElBQUk7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQzs7QUF4QkgsOEJBdUhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVtb3ZhbFBvbGljeSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGFjbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyJztcbmltcG9ydCAqIGFzIGR5bmFtb2RiIGZyb20gJ2F3cy1jZGstbGliL2F3cy1keW5hbW9kYic7XG5pbXBvcnQgKiBhcyByNTMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXJvdXRlNTMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBJTWljcm9BcHBzQVBJR3d5LCBNaWNyb0FwcHNBUElHd3kgfSBmcm9tICcuL01pY3JvQXBwc0FQSUd3eSc7XG5pbXBvcnQgeyBJTWljcm9BcHBzQ0YsIE1pY3JvQXBwc0NGIH0gZnJvbSAnLi9NaWNyb0FwcHNDRic7XG5pbXBvcnQgeyBJTWljcm9BcHBzRWRnZVRvT3JpZ2luLCBNaWNyb0FwcHNFZGdlVG9PcmlnaW4gfSBmcm9tICcuL01pY3JvQXBwc0VkZ2VUb09yaWdpbic7XG5pbXBvcnQgeyBJTWljcm9BcHBzUzMsIE1pY3JvQXBwc1MzIH0gZnJvbSAnLi9NaWNyb0FwcHNTMyc7XG5pbXBvcnQgeyBJTWljcm9BcHBzU3ZjcywgTWljcm9BcHBzU3ZjcyB9IGZyb20gJy4vTWljcm9BcHBzU3Zjcyc7XG5pbXBvcnQgeyByZXZlcnNlRG9tYWluIH0gZnJvbSAnLi91dGlscy9SZXZlcnNlRG9tYWluJztcblxuLyoqXG4gKiBBIENESyBDb25zdHJ1Y3QgZm9yIGNyZWF0aW5nIGEgTWljcm9BcHBzIHJ1bnRpbWUgZW52aXJvbm1lbnQgdXNlZFxuICogdG8gaG9zdCBOZXh0LmpzLCBSZWFjdCwgb3IgYW55IG90aGVyIHNvcnQgb2Ygd2ViIGFwcGxpY2F0aW9uIHdpdGhcbiAqIG11bHRpcGxlIHZlcnNpb25zIGF2YWlsYWJsZSBmb3IgY29tcGFyaXNvbiwgcXVpY2sgcm9sbGJhY2tzLCBxdWlja1xuICogcmVsZWFzZXMsIGFuZCBhIGNvbXBsZXRlIGxhY2sgb2YgdXNlciBkaXN0dXJiYW5jZSBvbiBkZXBsb3lzLlxuICpcbiAqIEByZW1hcmtzXG4gKlxuICoge0BsaW5rIE1pY3JvQXBwc30gcHJvdmlkZXMgYSB0dXJuLWtleSBjb25zdHJ1Y3QgdGhhdCBjcmVhdGVzIGFsbFxuICogZGVwZW5kZW5jaWVzIHdpdGggbGltaXRlZCBleHBvc3VyZSBvZiB1bmRlcmx5aW5nIEFXUyBSZXNvdXJjZSBvcHRpb25zLlxuICogVGhpcyBjb25zdHJ1Y3QgaXMgdGhlIGVhc2llc3QgdG8gdXNlIHdoZW4gZXhwbG9yaW5nIE1pY3JvQXBwcyBmb3IgdGhlXG4gKiBmaXJzdCB0aW1lLlxuICpcbiAqIHtAbGluayBNaWNyb0FwcHNBUElHd3l9LCB7QGxpbmsgTWljcm9BcHBzQ0Z9LCB7QGxpbmsgTWljcm9BcHBzUzN9LFxuICogYW5kIHtAbGluayBNaWNyb0FwcHNTdmNzfSwgYW5kIHRoZWlyIGhlbHBlciBzdGF0aWMgbWV0aG9kcywgY2FuIGJlIHVzZWRcbiAqIHRvIGNyZWF0ZSBBV1MgUmVzb3VyY2VzIG1vcmUgZGlyZWN0bHksIHRvIHByb3ZpZGUgeW91ciBvd24gQVdTIFJlc291cmNlc1xuICogKGUuZy4gYW4gZXhpc3RpbmcgQ2xvdWRGcm9udCBEaXN0cmlidXRpb24pLCBhbmQgdG8gaGF2ZSBtb3JlIGZsZXhpYmlsaXR5XG4gKiB0aGFuIHRoZSB7QGxpbmsgTWljcm9BcHBzfSBjb25zdHJ1Y3Qgb2ZmZXJzLlxuICpcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICovXG5cbi8qKlxuICogUHJvcGVydGllcyB0byBpbml0aWFsaXplIGFuIGluc3RhbmNlIG9mIGBNaWNyb0FwcHNgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1pY3JvQXBwc1Byb3BzIHtcbiAgLyoqXG4gICAqIFJlbW92YWxQb2xpY3kgb3ZlcnJpZGUgZm9yIGNoaWxkIHJlc291cmNlc1xuICAgKlxuICAgKiBOb3RlOiBpZiBzZXQgdG8gREVTVFJPWSB0aGUgUzMgYnVja2VzIHdpbGwgaGF2ZSBgYXV0b0RlbGV0ZU9iamVjdHNgIHNldCB0byBgdHJ1ZWBcbiAgICpcbiAgICogQGRlZmF1bHQgLSBwZXIgcmVzb3VyY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgcmVtb3ZhbFBvbGljeT86IFJlbW92YWxQb2xpY3k7XG5cbiAgLyoqXG4gICAqIFBhc3NlZCB0byBOT0RFX0VOViBvZiBSb3V0ZXIgYW5kIERlcGxveWVyIExhbWJkYSBmdW5jdGlvbnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGRldlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwRW52OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGFzc2V0IG5hbWUgcm9vdFxuICAgKlxuICAgKiBAZXhhbXBsZSBtaWNyb2FwcHNcbiAgICogQGRlZmF1bHQgLSByZXNvdXJjZSBuYW1lcyBhdXRvIGFzc2lnbmVkXG4gICAqL1xuICByZWFkb25seSBhc3NldE5hbWVSb290Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBhc3NldCBuYW1lIHN1ZmZpeFxuICAgKlxuICAgKiBAZXhhbXBsZSAtZGV2LXByLTEyXG4gICAqIEBkZWZhdWx0IG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0TmFtZVN1ZmZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogUm91dGU1MyB6b25lIGluIHdoaWNoIHRvIGNyZWF0ZSBvcHRpb25hbCBgZG9tYWluTmFtZUVkZ2VgIHJlY29yZFxuICAgKi9cbiAgcmVhZG9ubHkgcjUzWm9uZT86IHI1My5JSG9zdGVkWm9uZTtcblxuICAvKipcbiAgICogQ2VydGlmaWNhdGUgaW4gVVMtRWFzdC0xIGZvciB0aGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24uXG4gICAqL1xuICByZWFkb25seSBjZXJ0RWRnZT86IGFjbS5JQ2VydGlmaWNhdGU7XG5cbiAgLyoqXG4gICAqIENlcnRpZmljYXRlIGluIGRlcGxveWVkIHJlZ2lvbiBmb3IgdGhlIEFQSSBHYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgY2VydE9yaWdpbj86IGFjbS5JQ2VydGlmaWNhdGU7XG5cbiAgLyoqXG4gICAqIFVzZSBhIHN0cmljdCBTMyBCdWNrZXQgUG9saWN5IHRoYXQgcHJldmVudHMgYXBwbGljYXRpb25zXG4gICAqIGZyb20gcmVhZGluZy93cml0aW5nL21vZGlmeWluZy9kZWxldGluZyBmaWxlcyBpbiB0aGUgUzMgQnVja2V0XG4gICAqIG91dHNpZGUgb2YgdGhlIHBhdGggdGhhdCBpcyBzcGVjaWZpYyB0byB0aGVpciBhcHAvdmVyc2lvbi5cbiAgICpcbiAgICogVGhpcyBzZXR0aW5nIHNob3VsZCBiZSB1c2VkIHdoZW4gYXBwbGljYXRpb25zIGFyZSBsZXNzIHRoYW5cbiAgICogZnVsbHkgdHJ1c3RlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHMzU3RyaWN0QnVja2V0UG9saWN5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQXBwbGllcyB3aGVuIHVzaW5nIHMzU3RyaWN0QnVja2V0UG9saWN5ID0gdHJ1ZVxuICAgKlxuICAgKiBJQU0gUm9sZSBvciBJQU0gVXNlciBuYW1lcyB0byBleGNsdWRlIGZyb20gdGhlIERFTlkgcnVsZXMgb24gdGhlIFMzIEJ1Y2tldCBQb2xpY3kuXG4gICAqXG4gICAqIFJvbGVzIHRoYXQgYXJlIEFzc3VtZWQgbXVzdCBpbnN0ZWFkIGhhdmUgdGhlaXIgQVJPQSBhZGRlZCB0byBgczNQb2xpY3lCeXBhc3NBUk9Bc2AuXG4gICAqXG4gICAqIFR5cGljYWxseSBhbnkgYWRtaW4gcm9sZXMgLyB1c2VycyB0aGF0IG5lZWQgdG8gdmlldyBvciBtYW5hZ2UgdGhlIFMzIEJ1Y2tldFxuICAgKiB3b3VsZCBiZSBhZGRlZCB0byB0aGlzIGxpc3QuXG4gICAqXG4gICAqIEBleGFtcGxlIFsnYXJuOmF3czppYW06OjEyMzQ1Njc4OTAxMjM6cm9sZS9BZG1pbkFjY2VzcycsICdhcm46YXdzOmlhbTo6MTIzNDU2Nzg5MDEyMzp1c2VyL015QWRtaW5Vc2VyJ11cbiAgICpcbiAgICogQHNlZSBzM1BvbGljeUJ5cGFzc0FST0FzXG4gICAqL1xuICByZWFkb25seSBzM1BvbGljeUJ5cGFzc1ByaW5jaXBhbEFSTnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQXBwbGllcyB3aGVuIHVzaW5nIHMzU3RyaWN0QnVja2V0UG9saWN5ID0gdHJ1ZVxuICAgKlxuICAgKiBBUk9BcyBvZiB0aGUgSUFNIFJvbGUgdG8gZXhjbHVkZSBmcm9tIHRoZSBERU5ZIHJ1bGVzIG9uIHRoZSBTMyBCdWNrZXQgUG9saWN5LlxuICAgKiBUaGlzIGFsbG93cyBzZXNzaW9ucyB0aGF0IGFzc3VtZSB0aGUgSUFNIFJvbGUgdG8gYmUgZXhjbHVkZWQgZnJvbSB0aGVcbiAgICogREVOWSBydWxlcyBvbiB0aGUgUzMgQnVja2V0IFBvbGljeS5cbiAgICpcbiAgICogVHlwaWNhbGx5IGFueSBhZG1pbiByb2xlcyAvIHVzZXJzIHRoYXQgbmVlZCB0byB2aWV3IG9yIG1hbmFnZSB0aGUgUzMgQnVja2V0XG4gICAqIHdvdWxkIGJlIGFkZGVkIHRvIHRoaXMgbGlzdC5cbiAgICpcbiAgICogUm9sZXMgLyB1c2VycyB0aGF0IGFyZSB1c2VkIGRpcmVjdGx5LCBub3QgYXNzdW1lZCwgY2FuIGJlIGFkZGVkIHRvIGBzM1BvbGljeUJ5cGFzc1JvbGVOYW1lc2AgaW5zdGVhZC5cbiAgICpcbiAgICogTm90ZTogVGhpcyBBUk9BIG11c3QgYmUgc3BlY2lmaWVkIHRvIHByZXZlbnQgdGhpcyBwb2xpY3kgZnJvbSBsb2NraW5nXG4gICAqIG91dCBub24tcm9vdCBzZXNzaW9ucyB0aGF0IGhhdmUgYXNzdW1lZCB0aGUgYWRtaW4gcm9sZS5cbiAgICpcbiAgICogVGhlIG5vdFByaW5jaXBhbHMgd2lsbCBvbmx5IG1hdGNoIHRoZSByb2xlIG5hbWUgZXhhY3RseSBhbmQgd2lsbCBub3QgbWF0Y2hcbiAgICogYW55IHNlc3Npb24gdGhhdCBoYXMgYXNzdW1lZCB0aGUgcm9sZSBzaW5jZSBub3RQcmluY2lwYWxzIGRvZXMgbm90IGFsbG93XG4gICAqIHdpbGRjYXJkIG1hdGNoZXMgYW5kIGRvZXMgbm90IGRvIHdpbGRjYXJkIG1hdGNoZXMgaW1wbGljaXRseSBlaXRoZXIuXG4gICAqXG4gICAqIFRoZSBBUk9BIG11c3QgYmUgdXNlZCBiZWNhdXNlIHRoZXJlIGFyZSBvbmx5IDMgUHJpbmNpcGFsIHZhcmlhYmxlcyBhdmFpbGFibGU6XG4gICAqICBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX3ZhcmlhYmxlcy5odG1sI3ByaW5jaXBhbHRhYmxlXG4gICAqICBhd3M6dXNlcm5hbWUsIGF3czp1c2VyaWQsIGF3czpQcmluY2lwYWxUYWdcbiAgICpcbiAgICogRm9yIGFuIGFzc3VtZWQgcm9sZSwgYXdzOnVzZXJuYW1lIGlzIGJsYW5rLCBhd3M6dXNlcmlkIGlzOlxuICAgKiAgW3VuaXF1ZSBpZCBBS0EgQVJPQSBmb3IgUm9sZV06W3Nlc3Npb24gbmFtZV1cbiAgICpcbiAgICogVGFibGUgb2YgdW5pcXVlIElEIHByZWZpeGVzIHN1Y2ggYXMgQVJPQTpcbiAgICogIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfaWRlbnRpZmllcnMuaHRtbCNpZGVudGlmaWVycy1wcmVmaXhlc1xuICAgKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcm9sZSBpcyBzaW1wbHkgbm90IGF2YWlsYWJsZSBmb3IgYW4gYXNzdW1lZCByb2xlIGFuZCwgaWYgaXQgd2FzLFxuICAgKiBhIGNvbXBsaWNhdGVkIGNvbXBhcmlzb24gd291bGQgYmUgcmVxdWllcmQgdG8gcHJldmVudCBleGNsdXNpb25cbiAgICogb2YgYXBwbHlpbmcgdGhlIERlbnkgUnVsZSB0byByb2xlcyBmcm9tIG90aGVyIGFjY291bnRzLlxuICAgKlxuICAgKiBUbyBnZXQgdGhlIEFST0Egd2l0aCB0aGUgQVdTIENMSTpcbiAgICogICBhd3MgaWFtIGdldC1yb2xlIC0tcm9sZS1uYW1lIFJPTEUtTkFNRVxuICAgKiAgIGF3cyBpYW0gZ2V0LXVzZXIgLeKAk3VzZXItbmFtZSBVU0VSLU5BTUVcbiAgICpcbiAgICogQGV4YW1wbGUgWyAnQVJPQTEyMzQ1Njc4OTAxMjMnIF1cbiAgICpcbiAgICogQHNlZSBzM1N0cmljdEJ1Y2tldFBvbGljeVxuICAgKi9cbiAgcmVhZG9ubHkgczNQb2xpY3lCeXBhc3NBUk9Bcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBjdXN0b20gZG9tYWluIG5hbWUgZm9yIHRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbi5cbiAgICpcbiAgICogQGV4YW1wbGUgYXBwcy5wd3JkcnZyLmNvbVxuICAgKiBAZGVmYXVsdCBhdXRvLWFzc2lnbmVkXG4gICAqL1xuICByZWFkb25seSBkb21haW5OYW1lRWRnZT86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgY3VzdG9tIGRvbWFpbiBuYW1lIGZvciB0aGUgQVBJIEdhdGV3YXkgSFRUUHYyIEFQSS5cbiAgICpcbiAgICogQGV4YW1wbGUgYXBwcy1vcmlnaW4ucHdyZHJ2ci5jb21cbiAgICogQGRlZmF1bHQgYXV0by1hc3NpZ25lZFxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluTmFtZU9yaWdpbj86IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCBwcmVmaXggb24gdGhlIHJvb3Qgb2YgdGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uXG4gICAqXG4gICAqIEBleGFtcGxlIGRldi9cbiAgICovXG4gIHJlYWRvbmx5IHJvb3RQYXRoUHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gZXh0cmEgQmVoYXZpb3IgKFJvdXRlKSBmb3IgL2FwaS8gdGhhdCBhbGxvd3NcbiAgICogQVBJIHJvdXRlcyB0byBoYXZlIGEgcGVyaW9kIGluIHRoZW0uXG4gICAqXG4gICAqIFdoZW4gZmFsc2UgQVBJIHJvdXRlcyB3aXRoIGEgcGVyaW9kIGluIHRoZSBwYXRoIHdpbGwgZ2V0IHJvdXRlZCB0byBTMy5cbiAgICpcbiAgICogV2hlbiB0cnVlIEFQSSByb3V0ZXMgdGhhdCBjb250YWluIC9hcGkvIGluIHRoZSBwYXRoIHdpbGwgZ2V0IHJvdXRlZCB0byBBUEkgR2F0ZXdheVxuICAgKiBldmVuIGlmIHRoZXkgaGF2ZSBhIHBlcmlvZCBpbiB0aGUgcGF0aC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlQVBJUGF0aFJvdXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWRkcyBhbiBYLUZvcndhcmRlZC1Ib3N0LUhlYWRlciB3aGVuIGNhbGxpbmcgQVBJIEdhdGV3YXlcbiAgICpcbiAgICogQ2FuIG9ubHkgYmUgdHJ1c3RlZCBpZiBgc2lnbmluZ01vZGVgIGlzIGVuYWJsZWQsIHdoaWNoIHJlc3RyaWN0c1xuICAgKiBhY2Nlc3MgdG8gQVBJIEdhdGV3YXkgdG8gb25seSBJQU0gc2lnbmVkIHJlcXVlc3RzLlxuICAgKlxuICAgKiBOb3RlOiBpZiB0cnVlLCBjcmVhdGVzIE9yaWdpblJlcXVlc3QgTGFtYmRhIEAgRWRnZSBmdW5jdGlvbiBmb3IgQVBJIEdhdGV3YXkgT3JpZ2luXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGFkZFhGb3J3YXJkZWRIb3N0SGVhZGVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUmVwbGFjZXMgSG9zdCBoZWFkZXIgKHdoaWNoIHdpbGwgYmUgdGhlIEVkZ2UgZG9tYWluIG5hbWUpIHdpdGggdGhlIE9yaWdpbiBkb21haW4gbmFtZVxuICAgKiB3aGVuIGVuYWJsZWQuICBUaGlzIGlzIG5lY2Vzc2FyeSB3aGVuIEFQSSBHYXRld2F5IGhhcyBub3QgYmVlbiBjb25maWd1cmVkXG4gICAqIHdpdGggYSBjdXN0b20gZG9tYWluIG5hbWUgdGhhdCBtYXRjaGVzIHRoZSBleGFjdCBkb21haW4gbmFtZSB1c2VkIGJ5IHRoZSBDbG91ZEZyb250XG4gICAqIERpc3RyaWJ1dGlvbiBBTkQgd2hlbiB0aGUgT3JpZ2luUmVxdWVzdFBvbGljeS5IZWFkZXJzQmVoYXZpb3IgaXMgc2V0XG4gICAqIHRvIHBhc3MgYWxsIGhlYWRlcnMgdG8gdGhlIG9yaWdpbi5cbiAgICpcbiAgICogTm90ZTogaWYgdHJ1ZSwgY3JlYXRlcyBPcmlnaW5SZXF1ZXN0IExhbWJkYSBAIEVkZ2UgZnVuY3Rpb24gZm9yIEFQSSBHYXRld2F5IE9yaWdpblxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSByZXBsYWNlSG9zdEhlYWRlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlcXVpcmVzIElBTSBhdXRoIG9uIHRoZSBBUEkgR2F0ZXdheSBvcmlnaW4gaWYgbm90IHNldCB0byAnbm9uZScuXG4gICAqXG4gICAqICdzaWduJyAtIFVzZXMgcmVxdWVzdCBoZWFkZXJzIGZvciBhdXRoLlxuICAgKiAncHJlc2lnbicgLSBVc2VzIHF1ZXJ5IHN0cmluZyBmb3IgYXV0aC5cbiAgICpcbiAgICogSWYgZW5hYmxlZCxcbiAgICpcbiAgICogTm90ZTogaWYgJ3NpZ24nIG9yICdwcmVzaWduJywgY3JlYXRlcyBPcmlnaW5SZXF1ZXN0IExhbWJkYSBAIEVkZ2UgZnVuY3Rpb24gZm9yIEFQSSBHYXRld2F5IE9yaWdpblxuICAgKiBAZGVmYXVsdCAnc2lnbidcbiAgICovXG4gIHJlYWRvbmx5IHNpZ25pbmdNb2RlPzogJ3NpZ24nIHwgJ3ByZXNpZ24nIHwgJ25vbmUnO1xuXG4gIC8qKlxuICAgKiBPcmlnaW4gcmVnaW9uIHRoYXQgQVBJIEdhdGV3YXkgd2lsbCBiZSBkZXBsb3llZCB0bywgdXNlZFxuICAgKiBmb3IgdGhlIGNvbmZpZy55bWwgb24gdGhlIEVkZ2UgZnVuY3Rpb24gdG8gc2lnbiByZXF1ZXN0cyBmb3JcbiAgICogdGhlIGNvcnJlY3QgcmVnaW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgb3JpZ2luUmVnaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFeGlzdGluZyB0YWJsZSBmb3IgYXBwcy92ZXJzaW9ucy9ydWxlc1xuICAgKlxuICAgKiBAd2FybmluZyAtIEl0IGlzICpzdHJvbmdseSogc3VnZ2VzdGVkIHRoYXQgcHJvZHVjdGlvbiBzdGFja3MgY3JlYXRlXG4gICAqIHRoZWlyIG93biBEeW5hbW9EQiBUYWJsZSBhbmQgcGFzcyBpdCBpbnRvIHRoaXMgY29uc3RydWN0LCBmb3IgcHJvdGVjdGlvblxuICAgKiBhZ2FpbnN0IGRhdGEgbG9zcyBkdWUgdG8gbG9naWNhbCBJRCBjaGFuZ2VzLCB0aGUgYWJpbGl0eSB0byBjb25maWd1cmVcbiAgICogUHJvdmlzaW9uZWQgY2FwYWNpdHkgd2l0aCBBdXRvIFNjYWxpbmcsIHRoZSBhYmlsaXR5IHRvIGFkZCBhZGRpdGlvbmFsIGluZGljZXMsIGV0Yy5cbiAgICpcbiAgICogUmVxdWlyZW1lbnRzOlxuICAgKiAtIEhhc2ggS2V5OiBgUEtgXG4gICAqIC0gU29ydCBLZXk6IGBTS2BcbiAgICpcbiAgICogQGRlZmF1bHQgY3JlYXRlZCBieSBjb25zdHJ1Y3RcbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlPzogZHluYW1vZGIuSVRhYmxlO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBNaWNyb0FwcHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTWljcm9BcHBzIHtcbiAgLyoqIHtAaW5oZXJpdGRvYyBJTWljcm9BcHBzQ0Z9ICovXG4gIHJlYWRvbmx5IGNmOiBJTWljcm9BcHBzQ0Y7XG5cbiAgLyoqIHtAaW5oZXJpdGRvYyBJTWljcm9BcHBzRWRnZVRvT3JpZ2lufSAqL1xuICByZWFkb25seSBlZGdlVG9PcmlnaW4/OiBJTWljcm9BcHBzRWRnZVRvT3JpZ2luO1xuXG4gIC8qKiB7QGluaGVyaXRkb2MgSU1pY3JvQXBwc1MzfSAqL1xuICByZWFkb25seSBzMzogSU1pY3JvQXBwc1MzO1xuXG4gIC8qKiB7QGluaGVyaXRkb2MgSU1pY3JvQXBwc1N2Y3N9ICovXG4gIHJlYWRvbmx5IHN2Y3M6IElNaWNyb0FwcHNTdmNzO1xuXG4gIC8qKiB7QGluaGVyaXRkb2MgSU1pY3JvQXBwc0FQSUd3eX0gKi9cbiAgcmVhZG9ubHkgYXBpZ3d5OiBJTWljcm9BcHBzQVBJR3d5O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBNaWNyb0FwcHMgXCJ0dXJua2V5XCIgY29uc3RydWN0IGZvciBzaW1wbGVcbiAqIGRlcGxveW1lbnRzIGFuZCBmb3IgaW5pdGlhbCBldmF1bGF0aW9uIG9mIHRoZSBNaWNyb0FwcHMgZnJhbWV3b3JrLlxuICpcbiAqIFVzZSB0aGlzIGNvbnN0cnVjdCB0byBjcmVhdGUgYSBQb0Mgd29ya2luZyBlbnRpcmUgc3RhY2suXG4gKlxuICogRG8gbm90IHVzZSB0aGlzIGNvbnN0cnVjdCB3aGVuIGFkZGluZyBNaWNyb0FwcHMgdG8gYW4gZXhpc3RpbmdcbiAqIENsb3VkRnJvbnQsIEFQSSBHYXRld2F5LCBTMyBCdWNrZXQsIGV0Yy4gb3Igd2hlcmUgYWNjZXNzXG4gKiB0byBhbGwgZmVhdHVyZXMgb2YgdGhlIEFXUyBSZXNvdXJjZXMgYXJlIG5lZWRlZCAoZS5nLiB0b1xuICogYWRkIGFkZGl0aW9uYWwgQmVoYXZpb3JzIHRvIHRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiwgc2V0IGF1dGhvcml6b3JzXG4gKiBvbiBBUEkgR2F0ZXdheSwgZXRjLikuXG4gKlxuICogQHdhcm5pbmcgVGhpcyBjb25zdHJ1Y3QgaXMgbm90IGludGVuZGVkIGZvciBwcm9kdWN0aW9uIHVzZS5cbiAqIEluIGEgcHJvZHVjdGlvbiBzdGFjayB0aGUgRHluYW1vREIgVGFibGUsIEFQSSBHYXRld2F5LCBTMyBCdWNrZXRzLFxuICogZXRjLiBzaG91bGQgYmUgY3JlYXRlZCBpbiBhIFwiZHVyYWJsZVwiIHN0YWNrIHdoZXJlIHRoZSBJRHMgd2lsbCBub3RcbiAqIGNoYW5nZSBhbmQgd2hlcmUgY2hhbmdlcyB0byB0aGUgTWljcm9BcHBzIGNvbnN0cnVjdCB3aWxsIG5vdFxuICogY2F1c2UgZmFpbHVyZXMgdG8gZGVwbG95IG9yIGRhdGEgdG8gYmUgZGVsZXRlZC5cbiAqXG4gKiAgQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3B3cmRydnIvbWljcm9hcHBzLWNvcmUvYmxvYi9tYWluL3BhY2thZ2VzL2Nkay9saWIvTWljcm9BcHBzLnRzIHwgZXhhbXBsZSB1c2FnZSBpbiBhIENESyBTdGFjayB9XG4gKi9cbmV4cG9ydCBjbGFzcyBNaWNyb0FwcHMgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJTWljcm9BcHBzIHtcbiAgcHJpdmF0ZSBfY2Y6IE1pY3JvQXBwc0NGO1xuICBwdWJsaWMgZ2V0IGNmKCk6IElNaWNyb0FwcHNDRiB7XG4gICAgcmV0dXJuIHRoaXMuX2NmO1xuICB9XG5cbiAgcHJpdmF0ZSBfZWRnZVRvT3JpZ2luPzogTWljcm9BcHBzRWRnZVRvT3JpZ2luO1xuICBwdWJsaWMgZ2V0IGVkZ2VUb09yaWdpbigpOiBJTWljcm9BcHBzRWRnZVRvT3JpZ2luIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZWRnZVRvT3JpZ2luO1xuICB9XG5cbiAgcHJpdmF0ZSBfczM6IE1pY3JvQXBwc1MzO1xuICBwdWJsaWMgZ2V0IHMzKCk6IElNaWNyb0FwcHNTMyB7XG4gICAgcmV0dXJuIHRoaXMuX3MzO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBpZ3d5OiBNaWNyb0FwcHNBUElHd3k7XG4gIHB1YmxpYyBnZXQgYXBpZ3d5KCk6IElNaWNyb0FwcHNBUElHd3kge1xuICAgIHJldHVybiB0aGlzLl9hcGlnd3k7XG4gIH1cblxuICBwcml2YXRlIF9zdmNzOiBNaWNyb0FwcHNTdmNzO1xuICBwdWJsaWMgZ2V0IHN2Y3MoKTogSU1pY3JvQXBwc1N2Y3Mge1xuICAgIHJldHVybiB0aGlzLl9zdmNzO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBNaWNyb0FwcHNQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAocHJvcHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwcm9wcyBtdXN0IGJlIHNldCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIGRvbWFpbk5hbWVFZGdlLFxuICAgICAgZG9tYWluTmFtZU9yaWdpbixcbiAgICAgIGFzc2V0TmFtZVJvb3QsXG4gICAgICBhc3NldE5hbWVTdWZmaXgsXG4gICAgICByNTNab25lLFxuICAgICAgY2VydEVkZ2UsXG4gICAgICBhcHBFbnYgPSAnZGV2JyxcbiAgICAgIGNlcnRPcmlnaW4sXG4gICAgICByZW1vdmFsUG9saWN5LFxuICAgICAgczNQb2xpY3lCeXBhc3NBUk9BcyxcbiAgICAgIHMzUG9saWN5QnlwYXNzUHJpbmNpcGFsQVJOcyxcbiAgICAgIHMzU3RyaWN0QnVja2V0UG9saWN5LFxuICAgICAgcm9vdFBhdGhQcmVmaXgsXG4gICAgICBjcmVhdGVBUElQYXRoUm91dGUgPSB0cnVlLFxuICAgICAgYWRkWEZvcndhcmRlZEhvc3RIZWFkZXIgPSB0cnVlLFxuICAgICAgcmVwbGFjZUhvc3RIZWFkZXIgPSB0cnVlLFxuICAgICAgc2lnbmluZ01vZGUgPSAnc2lnbicsXG4gICAgICBvcmlnaW5SZWdpb24sXG4gICAgICB0YWJsZSxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICB0aGlzLl9zMyA9IG5ldyBNaWNyb0FwcHNTMyh0aGlzLCAnczMnLCB7XG4gICAgICByZW1vdmFsUG9saWN5LFxuICAgICAgYnVja2V0TG9nc05hbWU6IGRvbWFpbk5hbWVFZGdlID8gYCR7cmV2ZXJzZURvbWFpbihkb21haW5OYW1lRWRnZSl9LWxvZ3NgIDogdW5kZWZpbmVkLFxuICAgICAgYnVja2V0QXBwc05hbWU6IGRvbWFpbk5hbWVFZGdlID8gYCR7cmV2ZXJzZURvbWFpbihkb21haW5OYW1lRWRnZSl9YCA6IHVuZGVmaW5lZCxcbiAgICAgIGJ1Y2tldEFwcHNTdGFnaW5nTmFtZTogZG9tYWluTmFtZUVkZ2VcbiAgICAgICAgPyBgJHtyZXZlcnNlRG9tYWluKGRvbWFpbk5hbWVFZGdlKX0tc3RhZ2luZ2BcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBhc3NldE5hbWVSb290LFxuICAgICAgYXNzZXROYW1lU3VmZml4LFxuICAgIH0pO1xuICAgIHRoaXMuX2FwaWd3eSA9IG5ldyBNaWNyb0FwcHNBUElHd3kodGhpcywgJ2FwaScsIHtcbiAgICAgIHJlbW92YWxQb2xpY3ksXG4gICAgICBhc3NldE5hbWVSb290LFxuICAgICAgYXNzZXROYW1lU3VmZml4LFxuICAgICAgZG9tYWluTmFtZUVkZ2UsXG4gICAgICBkb21haW5OYW1lT3JpZ2luLFxuICAgICAgcjUzWm9uZSxcbiAgICAgIGNlcnRPcmlnaW4sXG4gICAgICByb290UGF0aFByZWZpeCxcbiAgICAgIHJlcXVpcmVJQU1BdXRob3JpemF0aW9uOiBzaWduaW5nTW9kZSAhPT0gJ25vbmUnLFxuICAgIH0pO1xuICAgIGlmIChzaWduaW5nTW9kZSAhPT0gJ25vbmUnIHx8IHJlcGxhY2VIb3N0SGVhZGVyIHx8IGFkZFhGb3J3YXJkZWRIb3N0SGVhZGVyKSB7XG4gICAgICB0aGlzLl9lZGdlVG9PcmlnaW4gPSBuZXcgTWljcm9BcHBzRWRnZVRvT3JpZ2luKHRoaXMsICdlZGdlVG9PcmlnaW4nLCB7XG4gICAgICAgIGFzc2V0TmFtZVJvb3QsXG4gICAgICAgIGFzc2V0TmFtZVN1ZmZpeCxcbiAgICAgICAgcmVtb3ZhbFBvbGljeSxcbiAgICAgICAgYWRkWEZvcndhcmRlZEhvc3RIZWFkZXIsXG4gICAgICAgIHJlcGxhY2VIb3N0SGVhZGVyLFxuICAgICAgICBvcmlnaW5SZWdpb24sXG4gICAgICAgIHNpZ25pbmdNb2RlLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuX2NmID0gbmV3IE1pY3JvQXBwc0NGKHRoaXMsICdjZnQnLCB7XG4gICAgICByZW1vdmFsUG9saWN5LFxuICAgICAgYXNzZXROYW1lUm9vdCxcbiAgICAgIGFzc2V0TmFtZVN1ZmZpeCxcbiAgICAgIGRvbWFpbk5hbWVFZGdlLFxuICAgICAgZG9tYWluTmFtZU9yaWdpbixcbiAgICAgIGh0dHBBcGk6IHRoaXMuX2FwaWd3eS5odHRwQXBpLFxuICAgICAgcjUzWm9uZSxcbiAgICAgIGNlcnRFZGdlLFxuICAgICAgYnVja2V0QXBwc09yaWdpbjogdGhpcy5fczMuYnVja2V0QXBwc09yaWdpbixcbiAgICAgIGJ1Y2tldExvZ3M6IHRoaXMuX3MzLmJ1Y2tldExvZ3MsXG4gICAgICByb290UGF0aFByZWZpeCxcbiAgICAgIGNyZWF0ZUFQSVBhdGhSb3V0ZSxcbiAgICAgIGVkZ2VUb09yaWdpbkxhbWJkYXM6IHRoaXMuX2VkZ2VUb09yaWdpbiA/IHRoaXMuX2VkZ2VUb09yaWdpbi5lZGdlVG9PcmlnaW5MYW1iZGFzIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICAgIHRoaXMuX3N2Y3MgPSBuZXcgTWljcm9BcHBzU3Zjcyh0aGlzLCAnc3ZjcycsIHtcbiAgICAgIGh0dHBBcGk6IHRoaXMuYXBpZ3d5Lmh0dHBBcGksXG4gICAgICByZW1vdmFsUG9saWN5LFxuICAgICAgYnVja2V0QXBwczogdGhpcy5fczMuYnVja2V0QXBwcyxcbiAgICAgIGJ1Y2tldEFwcHNPQUk6IHRoaXMuX3MzLmJ1Y2tldEFwcHNPQUksXG4gICAgICBidWNrZXRBcHBzU3RhZ2luZzogdGhpcy5fczMuYnVja2V0QXBwc1N0YWdpbmcsXG4gICAgICBhc3NldE5hbWVSb290LFxuICAgICAgYXNzZXROYW1lU3VmZml4LFxuICAgICAgYXBwRW52LFxuICAgICAgczNQb2xpY3lCeXBhc3NBUk9BcyxcbiAgICAgIHMzUG9saWN5QnlwYXNzUHJpbmNpcGFsQVJOcyxcbiAgICAgIHMzU3RyaWN0QnVja2V0UG9saWN5LFxuICAgICAgcm9vdFBhdGhQcmVmaXgsXG4gICAgICByZXF1aXJlSUFNQXV0aG9yaXphdGlvbjogc2lnbmluZ01vZGUgIT09ICdub25lJyxcbiAgICAgIHRhYmxlLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|