@pwrdrvr/microapps-cdk 0.0.27 → 0.0.28
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/.jsii +60 -26
- package/API.md +66 -13
- package/lib/MicroApps.d.ts +58 -6
- package/lib/MicroApps.js +6 -5
- package/lib/MicroAppsSvcs.d.ts +3 -2
- package/lib/MicroAppsSvcs.js +39 -17
- package/package.json +1 -1
package/.jsii
CHANGED
|
@@ -1281,7 +1281,7 @@
|
|
|
1281
1281
|
},
|
|
1282
1282
|
"locationInModule": {
|
|
1283
1283
|
"filename": "src/MicroApps.ts",
|
|
1284
|
-
"line":
|
|
1284
|
+
"line": 188
|
|
1285
1285
|
},
|
|
1286
1286
|
"parameters": [
|
|
1287
1287
|
{
|
|
@@ -1308,7 +1308,7 @@
|
|
|
1308
1308
|
"kind": "class",
|
|
1309
1309
|
"locationInModule": {
|
|
1310
1310
|
"filename": "src/MicroApps.ts",
|
|
1311
|
-
"line":
|
|
1311
|
+
"line": 178
|
|
1312
1312
|
},
|
|
1313
1313
|
"name": "MicroApps"
|
|
1314
1314
|
},
|
|
@@ -1337,7 +1337,7 @@
|
|
|
1337
1337
|
"immutable": true,
|
|
1338
1338
|
"locationInModule": {
|
|
1339
1339
|
"filename": "src/MicroApps.ts",
|
|
1340
|
-
"line":
|
|
1340
|
+
"line": 150
|
|
1341
1341
|
},
|
|
1342
1342
|
"name": "account",
|
|
1343
1343
|
"type": {
|
|
@@ -1437,7 +1437,7 @@
|
|
|
1437
1437
|
"immutable": true,
|
|
1438
1438
|
"locationInModule": {
|
|
1439
1439
|
"filename": "src/MicroApps.ts",
|
|
1440
|
-
"line":
|
|
1440
|
+
"line": 165
|
|
1441
1441
|
},
|
|
1442
1442
|
"name": "domainNameEdge",
|
|
1443
1443
|
"type": {
|
|
@@ -1454,7 +1454,7 @@
|
|
|
1454
1454
|
"immutable": true,
|
|
1455
1455
|
"locationInModule": {
|
|
1456
1456
|
"filename": "src/MicroApps.ts",
|
|
1457
|
-
"line":
|
|
1457
|
+
"line": 172
|
|
1458
1458
|
},
|
|
1459
1459
|
"name": "domainNameOrigin",
|
|
1460
1460
|
"type": {
|
|
@@ -1504,7 +1504,7 @@
|
|
|
1504
1504
|
"immutable": true,
|
|
1505
1505
|
"locationInModule": {
|
|
1506
1506
|
"filename": "src/MicroApps.ts",
|
|
1507
|
-
"line":
|
|
1507
|
+
"line": 158
|
|
1508
1508
|
},
|
|
1509
1509
|
"name": "region",
|
|
1510
1510
|
"type": {
|
|
@@ -1514,17 +1514,17 @@
|
|
|
1514
1514
|
{
|
|
1515
1515
|
"abstract": true,
|
|
1516
1516
|
"docs": {
|
|
1517
|
-
"
|
|
1518
|
-
"remarks": "This allows sessions that assume the IAM Role to be excluded from the\nDENY rules on the S3 Bucket Policy.",
|
|
1517
|
+
"default": "- none",
|
|
1519
1518
|
"stability": "stable",
|
|
1520
|
-
"summary": "
|
|
1519
|
+
"summary": "Suffix to add to asset names, such as -[env]-pr-[prNum]."
|
|
1521
1520
|
},
|
|
1522
1521
|
"immutable": true,
|
|
1523
1522
|
"locationInModule": {
|
|
1524
1523
|
"filename": "src/MicroApps.ts",
|
|
1525
|
-
"line":
|
|
1524
|
+
"line": 38
|
|
1526
1525
|
},
|
|
1527
|
-
"name": "
|
|
1526
|
+
"name": "assetNameSuffix",
|
|
1527
|
+
"optional": true,
|
|
1528
1528
|
"type": {
|
|
1529
1529
|
"primitive": "string"
|
|
1530
1530
|
}
|
|
@@ -1532,51 +1532,85 @@
|
|
|
1532
1532
|
{
|
|
1533
1533
|
"abstract": true,
|
|
1534
1534
|
"docs": {
|
|
1535
|
-
"default": "
|
|
1535
|
+
"default": "false",
|
|
1536
1536
|
"stability": "stable",
|
|
1537
|
-
"summary": "
|
|
1537
|
+
"summary": "Automatically destroy all assets when stack is deleted."
|
|
1538
1538
|
},
|
|
1539
1539
|
"immutable": true,
|
|
1540
1540
|
"locationInModule": {
|
|
1541
1541
|
"filename": "src/MicroApps.ts",
|
|
1542
|
-
"line":
|
|
1542
|
+
"line": 17
|
|
1543
1543
|
},
|
|
1544
|
-
"name": "
|
|
1544
|
+
"name": "autoDeleteEverything",
|
|
1545
|
+
"optional": true,
|
|
1545
1546
|
"type": {
|
|
1546
|
-
"primitive": "
|
|
1547
|
+
"primitive": "boolean"
|
|
1547
1548
|
}
|
|
1548
1549
|
},
|
|
1549
1550
|
{
|
|
1550
1551
|
"abstract": true,
|
|
1551
1552
|
"docs": {
|
|
1552
|
-
"
|
|
1553
|
+
"example": "[ 'AROA1234567890123' ]",
|
|
1554
|
+
"remarks": "AROAs of the IAM Role to exclude from the DENY rules on the S3 Bucket Policy.\nThis allows sessions that assume the IAM Role to be excluded from the\nDENY rules on the S3 Bucket Policy.\n\nTypically any admin roles / users that need to view or manage the S3 Bucket\nwould be added to this list.\n\nRoles / users that are used directly, not assumed, can be added to `s3PolicyBypassRoleNames` instead.\n\nNote: This AROA must be specified to prevent this policy from locking\nout non-root sessions that have assumed the admin role.\n\nThe notPrincipals will only match the role name exactly and will not match\nany session that has assumed the role since notPrincipals does not allow\nwildcard matches and does not do wildcard matches implicitly either.\n\nThe AROA must be used because there are only 3 Principal variables available:\n https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#principaltable\n aws:username, aws:userid, aws:PrincipalTag\n\nFor an assumed role, aws:username is blank, aws:userid is:\n [unique id AKA AROA for Role]:[session name]\n\nTable of unique ID prefixes such as AROA:\n https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-prefixes\n\nThe name of the role is simply not available for an assumed role and, if it was,\na complicated comparison would be requierd to prevent exclusion\nof applying the Deny Rule to roles from other accounts.\n\nTo get the AROA with the AWS CLI:\n aws iam get-role --role-name ROLE-NAME\n aws iam get-user -–user-name USER-NAME",
|
|
1555
|
+
"see": "s3StrictBucketPolicy",
|
|
1553
1556
|
"stability": "stable",
|
|
1554
|
-
"summary": "
|
|
1557
|
+
"summary": "Applies when using s3StrictBucketPolicy = true."
|
|
1555
1558
|
},
|
|
1556
1559
|
"immutable": true,
|
|
1557
1560
|
"locationInModule": {
|
|
1558
1561
|
"filename": "src/MicroApps.ts",
|
|
1559
|
-
"line":
|
|
1562
|
+
"line": 142
|
|
1560
1563
|
},
|
|
1561
|
-
"name": "
|
|
1564
|
+
"name": "s3PolicyBypassAROAs",
|
|
1562
1565
|
"optional": true,
|
|
1563
1566
|
"type": {
|
|
1564
|
-
"
|
|
1567
|
+
"collection": {
|
|
1568
|
+
"elementtype": {
|
|
1569
|
+
"primitive": "string"
|
|
1570
|
+
},
|
|
1571
|
+
"kind": "array"
|
|
1572
|
+
}
|
|
1573
|
+
}
|
|
1574
|
+
},
|
|
1575
|
+
{
|
|
1576
|
+
"abstract": true,
|
|
1577
|
+
"docs": {
|
|
1578
|
+
"example": "['arn:aws:iam::1234567890123:role/AdminAccess', 'arn:aws:iam::1234567890123:user/MyAdminUser']",
|
|
1579
|
+
"remarks": "IAM Role or IAM User names to exclude from the DENY rules on the S3 Bucket Policy.\n\nRoles that are Assumed must instead have their AROA added to `s3PolicyBypassAROAs`.\n\nTypically any admin roles / users that need to view or manage the S3 Bucket\nwould be added to this list.",
|
|
1580
|
+
"see": "s3PolicyBypassAROAs",
|
|
1581
|
+
"stability": "stable",
|
|
1582
|
+
"summary": "Applies when using s3StrictBucketPolicy = true."
|
|
1583
|
+
},
|
|
1584
|
+
"immutable": true,
|
|
1585
|
+
"locationInModule": {
|
|
1586
|
+
"filename": "src/MicroApps.ts",
|
|
1587
|
+
"line": 99
|
|
1588
|
+
},
|
|
1589
|
+
"name": "s3PolicyBypassPrincipalARNs",
|
|
1590
|
+
"optional": true,
|
|
1591
|
+
"type": {
|
|
1592
|
+
"collection": {
|
|
1593
|
+
"elementtype": {
|
|
1594
|
+
"primitive": "string"
|
|
1595
|
+
},
|
|
1596
|
+
"kind": "array"
|
|
1597
|
+
}
|
|
1565
1598
|
}
|
|
1566
1599
|
},
|
|
1567
1600
|
{
|
|
1568
1601
|
"abstract": true,
|
|
1569
1602
|
"docs": {
|
|
1570
1603
|
"default": "false",
|
|
1604
|
+
"remarks": "This setting should be used when applications are less than\nfully trusted.",
|
|
1571
1605
|
"stability": "stable",
|
|
1572
|
-
"summary": "
|
|
1606
|
+
"summary": "Use a strict S3 Bucket Policy that prevents applications from reading/writing/modifying/deleting files in the S3 Bucket outside of the path that is specific to their app/version."
|
|
1573
1607
|
},
|
|
1574
1608
|
"immutable": true,
|
|
1575
1609
|
"locationInModule": {
|
|
1576
1610
|
"filename": "src/MicroApps.ts",
|
|
1577
|
-
"line":
|
|
1611
|
+
"line": 83
|
|
1578
1612
|
},
|
|
1579
|
-
"name": "
|
|
1613
|
+
"name": "s3StrictBucketPolicy",
|
|
1580
1614
|
"optional": true,
|
|
1581
1615
|
"type": {
|
|
1582
1616
|
"primitive": "boolean"
|
|
@@ -1585,6 +1619,6 @@
|
|
|
1585
1619
|
]
|
|
1586
1620
|
}
|
|
1587
1621
|
},
|
|
1588
|
-
"version": "0.0.
|
|
1589
|
-
"fingerprint": "
|
|
1622
|
+
"version": "0.0.28",
|
|
1623
|
+
"fingerprint": "pN31x9a1Ge6xzfe9ibawLdds8o7PqA7OvCumMeTj+74="
|
|
1590
1624
|
}
|
package/API.md
CHANGED
|
@@ -142,41 +142,94 @@ AWS Region that the stack is being deployed to, this is required for importing t
|
|
|
142
142
|
|
|
143
143
|
---
|
|
144
144
|
|
|
145
|
-
##### `
|
|
145
|
+
##### `assetNameSuffix`<sup>Optional</sup> <a name="@pwrdrvr/microapps-cdk.MicroAppsProps.assetNameSuffix"></a>
|
|
146
146
|
|
|
147
147
|
- *Type:* `string`
|
|
148
|
+
- *Default:* none
|
|
149
|
+
|
|
150
|
+
Suffix to add to asset names, such as -[env]-pr-[prNum].
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
##### `autoDeleteEverything`<sup>Optional</sup> <a name="@pwrdrvr/microapps-cdk.MicroAppsProps.autoDeleteEverything"></a>
|
|
155
|
+
|
|
156
|
+
- *Type:* `boolean`
|
|
157
|
+
- *Default:* false
|
|
148
158
|
|
|
149
|
-
|
|
159
|
+
Automatically destroy all assets when stack is deleted.
|
|
160
|
+
|
|
161
|
+
---
|
|
150
162
|
|
|
163
|
+
##### `s3PolicyBypassAROAs`<sup>Optional</sup> <a name="@pwrdrvr/microapps-cdk.MicroAppsProps.s3PolicyBypassAROAs"></a>
|
|
164
|
+
|
|
165
|
+
- *Type:* `string`[]
|
|
166
|
+
|
|
167
|
+
Applies when using s3StrictBucketPolicy = true.
|
|
168
|
+
|
|
169
|
+
AROAs of the IAM Role to exclude from the DENY rules on the S3 Bucket Policy.
|
|
151
170
|
This allows sessions that assume the IAM Role to be excluded from the
|
|
152
171
|
DENY rules on the S3 Bucket Policy.
|
|
153
172
|
|
|
154
|
-
|
|
173
|
+
Typically any admin roles / users that need to view or manage the S3 Bucket
|
|
174
|
+
would be added to this list.
|
|
155
175
|
|
|
156
|
-
|
|
176
|
+
Roles / users that are used directly, not assumed, can be added to `s3PolicyBypassRoleNames` instead.
|
|
157
177
|
|
|
158
|
-
|
|
159
|
-
-
|
|
178
|
+
Note: This AROA must be specified to prevent this policy from locking
|
|
179
|
+
out non-root sessions that have assumed the admin role.
|
|
180
|
+
|
|
181
|
+
The notPrincipals will only match the role name exactly and will not match
|
|
182
|
+
any session that has assumed the role since notPrincipals does not allow
|
|
183
|
+
wildcard matches and does not do wildcard matches implicitly either.
|
|
184
|
+
|
|
185
|
+
The AROA must be used because there are only 3 Principal variables available:
|
|
186
|
+
https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#principaltable
|
|
187
|
+
aws:username, aws:userid, aws:PrincipalTag
|
|
188
|
+
|
|
189
|
+
For an assumed role, aws:username is blank, aws:userid is:
|
|
190
|
+
[unique id AKA AROA for Role]:[session name]
|
|
191
|
+
|
|
192
|
+
Table of unique ID prefixes such as AROA:
|
|
193
|
+
https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-prefixes
|
|
160
194
|
|
|
161
|
-
|
|
195
|
+
The name of the role is simply not available for an assumed role and, if it was,
|
|
196
|
+
a complicated comparison would be requierd to prevent exclusion
|
|
197
|
+
of applying the Deny Rule to roles from other accounts.
|
|
198
|
+
|
|
199
|
+
To get the AROA with the AWS CLI:
|
|
200
|
+
aws iam get-role --role-name ROLE-NAME
|
|
201
|
+
aws iam get-user -–user-name USER-NAME
|
|
202
|
+
|
|
203
|
+
> s3StrictBucketPolicy
|
|
162
204
|
|
|
163
205
|
---
|
|
164
206
|
|
|
165
|
-
##### `
|
|
207
|
+
##### `s3PolicyBypassPrincipalARNs`<sup>Optional</sup> <a name="@pwrdrvr/microapps-cdk.MicroAppsProps.s3PolicyBypassPrincipalARNs"></a>
|
|
166
208
|
|
|
167
|
-
- *Type:* `string`
|
|
168
|
-
- *Default:* none
|
|
209
|
+
- *Type:* `string`[]
|
|
169
210
|
|
|
170
|
-
|
|
211
|
+
Applies when using s3StrictBucketPolicy = true.
|
|
212
|
+
|
|
213
|
+
IAM Role or IAM User names to exclude from the DENY rules on the S3 Bucket Policy.
|
|
214
|
+
|
|
215
|
+
Roles that are Assumed must instead have their AROA added to `s3PolicyBypassAROAs`.
|
|
216
|
+
|
|
217
|
+
Typically any admin roles / users that need to view or manage the S3 Bucket
|
|
218
|
+
would be added to this list.
|
|
219
|
+
|
|
220
|
+
> s3PolicyBypassAROAs
|
|
171
221
|
|
|
172
222
|
---
|
|
173
223
|
|
|
174
|
-
##### `
|
|
224
|
+
##### `s3StrictBucketPolicy`<sup>Optional</sup> <a name="@pwrdrvr/microapps-cdk.MicroAppsProps.s3StrictBucketPolicy"></a>
|
|
175
225
|
|
|
176
226
|
- *Type:* `boolean`
|
|
177
227
|
- *Default:* false
|
|
178
228
|
|
|
179
|
-
|
|
229
|
+
Use a strict S3 Bucket Policy that prevents applications from reading/writing/modifying/deleting files in the S3 Bucket outside of the path that is specific to their app/version.
|
|
230
|
+
|
|
231
|
+
This setting should be used when applications are less than
|
|
232
|
+
fully trusted.
|
|
180
233
|
|
|
181
234
|
---
|
|
182
235
|
|
package/lib/MicroApps.d.ts
CHANGED
|
@@ -70,24 +70,76 @@ export interface MicroAppsProps {
|
|
|
70
70
|
*/
|
|
71
71
|
readonly certOrigin: acm.ICertificate;
|
|
72
72
|
/**
|
|
73
|
-
*
|
|
73
|
+
* Use a strict S3 Bucket Policy that prevents applications from reading/writing/modifying/deleting files in the S3 Bucket outside of the path that is specific to their app/version.
|
|
74
74
|
*
|
|
75
|
-
*
|
|
75
|
+
* This setting should be used when applications are less than
|
|
76
|
+
* fully trusted.
|
|
77
|
+
*
|
|
78
|
+
* @default false
|
|
79
|
+
* @stability stable
|
|
80
|
+
*/
|
|
81
|
+
readonly s3StrictBucketPolicy?: boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Applies when using s3StrictBucketPolicy = true.
|
|
84
|
+
*
|
|
85
|
+
* IAM Role or IAM User names to exclude from the DENY rules on the S3 Bucket Policy.
|
|
86
|
+
*
|
|
87
|
+
* Roles that are Assumed must instead have their AROA added to `s3PolicyBypassAROAs`.
|
|
88
|
+
*
|
|
89
|
+
* Typically any admin roles / users that need to view or manage the S3 Bucket
|
|
90
|
+
* would be added to this list.
|
|
91
|
+
*
|
|
92
|
+
* @see s3PolicyBypassAROAs
|
|
76
93
|
* @stability stable
|
|
94
|
+
* @example
|
|
95
|
+
*
|
|
96
|
+
* ['arn:aws:iam::1234567890123:role/AdminAccess', 'arn:aws:iam::1234567890123:user/MyAdminUser']
|
|
77
97
|
*/
|
|
78
|
-
readonly
|
|
98
|
+
readonly s3PolicyBypassPrincipalARNs?: string[];
|
|
79
99
|
/**
|
|
80
|
-
*
|
|
100
|
+
* Applies when using s3StrictBucketPolicy = true.
|
|
81
101
|
*
|
|
102
|
+
* AROAs of the IAM Role to exclude from the DENY rules on the S3 Bucket Policy.
|
|
82
103
|
* This allows sessions that assume the IAM Role to be excluded from the
|
|
83
104
|
* DENY rules on the S3 Bucket Policy.
|
|
84
105
|
*
|
|
106
|
+
* Typically any admin roles / users that need to view or manage the S3 Bucket
|
|
107
|
+
* would be added to this list.
|
|
108
|
+
*
|
|
109
|
+
* Roles / users that are used directly, not assumed, can be added to `s3PolicyBypassRoleNames` instead.
|
|
110
|
+
*
|
|
111
|
+
* Note: This AROA must be specified to prevent this policy from locking
|
|
112
|
+
* out non-root sessions that have assumed the admin role.
|
|
113
|
+
*
|
|
114
|
+
* The notPrincipals will only match the role name exactly and will not match
|
|
115
|
+
* any session that has assumed the role since notPrincipals does not allow
|
|
116
|
+
* wildcard matches and does not do wildcard matches implicitly either.
|
|
117
|
+
*
|
|
118
|
+
* The AROA must be used because there are only 3 Principal variables available:
|
|
119
|
+
* https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#principaltable
|
|
120
|
+
* aws:username, aws:userid, aws:PrincipalTag
|
|
121
|
+
*
|
|
122
|
+
* For an assumed role, aws:username is blank, aws:userid is:
|
|
123
|
+
* [unique id AKA AROA for Role]:[session name]
|
|
124
|
+
*
|
|
125
|
+
* Table of unique ID prefixes such as AROA:
|
|
126
|
+
* https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-prefixes
|
|
127
|
+
*
|
|
128
|
+
* The name of the role is simply not available for an assumed role and, if it was,
|
|
129
|
+
* a complicated comparison would be requierd to prevent exclusion
|
|
130
|
+
* of applying the Deny Rule to roles from other accounts.
|
|
131
|
+
*
|
|
132
|
+
* To get the AROA with the AWS CLI:
|
|
133
|
+
* aws iam get-role --role-name ROLE-NAME
|
|
134
|
+
* aws iam get-user -–user-name USER-NAME
|
|
135
|
+
*
|
|
136
|
+
* @see s3StrictBucketPolicy
|
|
85
137
|
* @stability stable
|
|
86
138
|
* @example
|
|
87
139
|
*
|
|
88
|
-
* AROA1234567890123
|
|
140
|
+
* [ 'AROA1234567890123' ]
|
|
89
141
|
*/
|
|
90
|
-
readonly
|
|
142
|
+
readonly s3PolicyBypassAROAs?: string[];
|
|
91
143
|
/**
|
|
92
144
|
* AWS Account ID that the stack is being deployed to, this is required for importing the R53 Zone.
|
|
93
145
|
*
|
package/lib/MicroApps.js
CHANGED
|
@@ -21,7 +21,7 @@ class MicroApps extends cdk.Construct {
|
|
|
21
21
|
if (props === undefined) {
|
|
22
22
|
throw new Error('props must be set');
|
|
23
23
|
}
|
|
24
|
-
const { domainName, domainNameEdge, domainNameOrigin, assetNameRoot = 'microapps', assetNameSuffix = '', autoDeleteEverything = false, r53ZoneID, r53ZoneName, certEdge, account, region, appEnv = 'dev', certOrigin,
|
|
24
|
+
const { domainName, domainNameEdge, domainNameOrigin, assetNameRoot = 'microapps', assetNameSuffix = '', autoDeleteEverything = false, r53ZoneID, r53ZoneName, certEdge, account, region, appEnv = 'dev', certOrigin, s3PolicyBypassAROAs, s3PolicyBypassPrincipalARNs, s3StrictBucketPolicy, } = props;
|
|
25
25
|
const reverseDomainName = MicroApps.reverseDomain(domainName);
|
|
26
26
|
const s3 = new MicroAppsS3_1.MicroAppsS3(this, 'microapps-s3', {
|
|
27
27
|
autoDeleteEverything,
|
|
@@ -58,8 +58,9 @@ class MicroApps extends cdk.Construct {
|
|
|
58
58
|
region,
|
|
59
59
|
appEnv,
|
|
60
60
|
certOrigin,
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
s3PolicyBypassAROAs,
|
|
62
|
+
s3PolicyBypassPrincipalARNs,
|
|
63
|
+
s3StrictBucketPolicy,
|
|
63
64
|
});
|
|
64
65
|
}
|
|
65
66
|
// input like 'example.com.' will return as 'com.example'
|
|
@@ -73,5 +74,5 @@ class MicroApps extends cdk.Construct {
|
|
|
73
74
|
}
|
|
74
75
|
exports.MicroApps = MicroApps;
|
|
75
76
|
_a = JSII_RTTI_SYMBOL_1;
|
|
76
|
-
MicroApps[_a] = { fqn: "@pwrdrvr/microapps-cdk.MicroApps", version: "0.0.
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWljcm9BcHBzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL01pY3JvQXBwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLHFDQUFxQztBQUNyQywrQ0FBNEM7QUFDNUMsK0NBQTRDO0FBQzVDLG1EQUFnRDs7Ozs7O0FBbURoRCxNQUFhLFNBQVUsU0FBUSxHQUFHLENBQUMsU0FBUzs7OztJQVUxQyxZQUFZLEtBQW9CLEVBQUUsRUFBVSxFQUFFLEtBQXNCO1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUN0QztRQUVELE1BQU0sRUFDSixVQUFVLEVBQ1YsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixhQUFhLEdBQUcsV0FBVyxFQUMzQixlQUFlLEdBQUcsRUFBRSxFQUNwQixvQkFBb0IsR0FBRyxLQUFLLEVBQzVCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsUUFBUSxFQUNSLE9BQU8sRUFDUCxNQUFNLEVBQ04sTUFBTSxHQUFHLEtBQUssRUFDZCxVQUFVLEVBQ1Ysa0JBQWtCLEVBQ2xCLHNCQUFzQixHQUFHLGFBQWEsR0FDdkMsR0FBRyxLQUFLLENBQUM7UUFDVixNQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFOUQsTUFBTSxFQUFFLEdBQUcsSUFBSSx5QkFBVyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDL0Msb0JBQW9CO1lBQ3BCLGlCQUFpQjtZQUNqQixhQUFhO1lBQ2IsZUFBZTtTQUNoQixDQUFDLENBQUM7UUFDSCxNQUFNLEVBQUUsR0FBRyxJQUFJLHlCQUFXLENBQUMsSUFBSSxFQUFFLHNCQUFzQixFQUFFO1lBQ3ZELFNBQVMsRUFBRSxFQUFFO1lBQ2IsYUFBYTtZQUNiLGVBQWU7WUFDZixVQUFVO1lBQ1YsaUJBQWlCO1lBQ2pCLGNBQWM7WUFDZCxnQkFBZ0I7WUFDaEIsb0JBQW9CO1lBQ3BCLFNBQVM7WUFDVCxXQUFXO1lBQ1gsUUFBUTtTQUNULENBQUMsQ0FBQztRQUNILElBQUksNkJBQWEsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDeEMsY0FBYyxFQUFFLEVBQUU7WUFDbEIsU0FBUyxFQUFFLEVBQUU7WUFDYixhQUFhO1lBQ2IsZUFBZTtZQUNmLFVBQVU7WUFDVixpQkFBaUI7WUFDakIsY0FBYztZQUNkLGdCQUFnQjtZQUNoQixvQkFBb0I7WUFDcEIsU0FBUztZQUNULFdBQVc7WUFDWCxPQUFPO1lBQ1AsTUFBTTtZQUNOLE1BQU07WUFDTixVQUFVO1lBQ1Ysa0JBQWtCO1lBQ2xCLHNCQUFzQjtTQUN2QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBekVELHlEQUF5RDtJQUNqRCxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQWM7UUFDekMsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4QyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEI7UUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQzs7QUFSSCw4QkEyRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhY20gZnJvbSAnQGF3cy1jZGsvYXdzLWNlcnRpZmljYXRlbWFuYWdlcic7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnQGF3cy1jZGsvY29yZSc7XG5pbXBvcnQgeyBNaWNyb0FwcHNDRiB9IGZyb20gJy4vTWljcm9BcHBzQ0YnO1xuaW1wb3J0IHsgTWljcm9BcHBzUzMgfSBmcm9tICcuL01pY3JvQXBwc1MzJztcbmltcG9ydCB7IE1pY3JvQXBwc1N2Y3MgfSBmcm9tICcuL01pY3JvQXBwc1N2Y3MnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgTWljcm9BcHBzUHJvcHMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGF1dG9EZWxldGVFdmVyeXRoaW5nPzogYm9vbGVhbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGFwcEVudjogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGFzc2V0TmFtZVJvb3Q6IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgYXNzZXROYW1lU3VmZml4Pzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBkb21haW5OYW1lOiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSByNTNab25lTmFtZTogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSByNTNab25lSUQ6IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBjZXJ0RWRnZTogYWNtLklDZXJ0aWZpY2F0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBjZXJ0T3JpZ2luOiBhY20uSUNlcnRpZmljYXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgczNQb2xpY3lCeXBhc3NSb2xlTmFtZTogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgczNQb2xpY3lCeXBhc3NBUk9BOiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBhY2NvdW50OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGRvbWFpbk5hbWVFZGdlOiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZG9tYWluTmFtZU9yaWdpbjogc3RyaW5nO1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgY2xhc3MgTWljcm9BcHBzIGV4dGVuZHMgY2RrLkNvbnN0cnVjdCB7XG4gIC8vIGlucHV0IGxpa2UgJ2V4YW1wbGUuY29tLicgd2lsbCByZXR1cm4gYXMgJ2NvbS5leGFtcGxlJ1xuICBwcml2YXRlIHN0YXRpYyByZXZlcnNlRG9tYWluKGRvbWFpbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcGFydHMgPSBkb21haW4uc3BsaXQoJy4nKS5yZXZlcnNlKCk7XG4gICAgaWYgKHBhcnRzWzBdID09PSAnJykge1xuICAgICAgcGFydHMgPSBwYXJ0cy5zbGljZSgxKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJy4nKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBjZGsuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IE1pY3JvQXBwc1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGlmIChwcm9wcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb3BzIG11c3QgYmUgc2V0Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgZG9tYWluTmFtZSxcbiAgICAgIGRvbWFpbk5hbWVFZGdlLFxuICAgICAgZG9tYWluTmFtZU9yaWdpbixcbiAgICAgIGFzc2V0TmFtZVJvb3QgPSAnbWljcm9hcHBzJyxcbiAgICAgIGFzc2V0TmFtZVN1ZmZpeCA9ICcnLFxuICAgICAgYXV0b0RlbGV0ZUV2ZXJ5dGhpbmcgPSBmYWxzZSxcbiAgICAgIHI1M1pvbmVJRCxcbiAgICAgIHI1M1pvbmVOYW1lLFxuICAgICAgY2VydEVkZ2UsXG4gICAgICBhY2NvdW50LFxuICAgICAgcmVnaW9uLFxuICAgICAgYXBwRW52ID0gJ2RldicsXG4gICAgICBjZXJ0T3JpZ2luLFxuICAgICAgczNQb2xpY3lCeXBhc3NBUk9BLFxuICAgICAgczNQb2xpY3lCeXBhc3NSb2xlTmFtZSA9ICdBZG1pbkFjY2VzcycsXG4gICAgfSA9IHByb3BzO1xuICAgIGNvbnN0IHJldmVyc2VEb21haW5OYW1lID0gTWljcm9BcHBzLnJldmVyc2VEb21haW4oZG9tYWluTmFtZSk7XG5cbiAgICBjb25zdCBzMyA9IG5ldyBNaWNyb0FwcHNTMyh0aGlzLCAnbWljcm9hcHBzLXMzJywge1xuICAgICAgYXV0b0RlbGV0ZUV2ZXJ5dGhpbmcsXG4gICAgICByZXZlcnNlRG9tYWluTmFtZSxcbiAgICAgIGFzc2V0TmFtZVJvb3QsXG4gICAgICBhc3NldE5hbWVTdWZmaXgsXG4gICAgfSk7XG4gICAgY29uc3QgY2YgPSBuZXcgTWljcm9BcHBzQ0YodGhpcywgJ21pY3JvYXBwcy1jbG91ZGZyb250Jywge1xuICAgICAgczNFeHBvcnRzOiBzMyxcbiAgICAgIGFzc2V0TmFtZVJvb3QsXG4gICAgICBhc3NldE5hbWVTdWZmaXgsXG4gICAgICBkb21haW5OYW1lLFxuICAgICAgcmV2ZXJzZURvbWFpbk5hbWUsXG4gICAgICBkb21haW5OYW1lRWRnZSxcbiAgICAgIGRvbWFpbk5hbWVPcmlnaW4sXG4gICAgICBhdXRvRGVsZXRlRXZlcnl0aGluZyxcbiAgICAgIHI1M1pvbmVJRCxcbiAgICAgIHI1M1pvbmVOYW1lLFxuICAgICAgY2VydEVkZ2UsXG4gICAgfSk7XG4gICAgbmV3IE1pY3JvQXBwc1N2Y3ModGhpcywgJ21pY3JvYXBwcy1zdmNzJywge1xuICAgICAgY2ZTdGFja0V4cG9ydHM6IGNmLFxuICAgICAgczNFeHBvcnRzOiBzMyxcbiAgICAgIGFzc2V0TmFtZVJvb3QsXG4gICAgICBhc3NldE5hbWVTdWZmaXgsXG4gICAgICBkb21haW5OYW1lLFxuICAgICAgcmV2ZXJzZURvbWFpbk5hbWUsXG4gICAgICBkb21haW5OYW1lRWRnZSxcbiAgICAgIGRvbWFpbk5hbWVPcmlnaW4sXG4gICAgICBhdXRvRGVsZXRlRXZlcnl0aGluZyxcbiAgICAgIHI1M1pvbmVJRCxcbiAgICAgIHI1M1pvbmVOYW1lLFxuICAgICAgYWNjb3VudCxcbiAgICAgIHJlZ2lvbixcbiAgICAgIGFwcEVudixcbiAgICAgIGNlcnRPcmlnaW4sXG4gICAgICBzM1BvbGljeUJ5cGFzc0FST0EsXG4gICAgICBzM1BvbGljeUJ5cGFzc1JvbGVOYW1lLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
77
|
+
MicroApps[_a] = { fqn: "@pwrdrvr/microapps-cdk.MicroApps", version: "0.0.28" };
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWljcm9BcHBzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL01pY3JvQXBwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLHFDQUFxQztBQUNyQywrQ0FBNEM7QUFDNUMsK0NBQTRDO0FBQzVDLG1EQUFnRDs7Ozs7O0FBc0RoRCxNQUFhLFNBQVUsU0FBUSxHQUFHLENBQUMsU0FBUzs7OztJQVUxQyxZQUFZLEtBQW9CLEVBQUUsRUFBVSxFQUFFLEtBQXNCO1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUN0QztRQUVELE1BQU0sRUFDSixVQUFVLEVBQ1YsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixhQUFhLEdBQUcsV0FBVyxFQUMzQixlQUFlLEdBQUcsRUFBRSxFQUNwQixvQkFBb0IsR0FBRyxLQUFLLEVBQzVCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsUUFBUSxFQUNSLE9BQU8sRUFDUCxNQUFNLEVBQ04sTUFBTSxHQUFHLEtBQUssRUFDZCxVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLDJCQUEyQixFQUMzQixvQkFBb0IsR0FDckIsR0FBRyxLQUFLLENBQUM7UUFDVixNQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFOUQsTUFBTSxFQUFFLEdBQUcsSUFBSSx5QkFBVyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDL0Msb0JBQW9CO1lBQ3BCLGlCQUFpQjtZQUNqQixhQUFhO1lBQ2IsZUFBZTtTQUNoQixDQUFDLENBQUM7UUFDSCxNQUFNLEVBQUUsR0FBRyxJQUFJLHlCQUFXLENBQUMsSUFBSSxFQUFFLHNCQUFzQixFQUFFO1lBQ3ZELFNBQVMsRUFBRSxFQUFFO1lBQ2IsYUFBYTtZQUNiLGVBQWU7WUFDZixVQUFVO1lBQ1YsaUJBQWlCO1lBQ2pCLGNBQWM7WUFDZCxnQkFBZ0I7WUFDaEIsb0JBQW9CO1lBQ3BCLFNBQVM7WUFDVCxXQUFXO1lBQ1gsUUFBUTtTQUNULENBQUMsQ0FBQztRQUNILElBQUksNkJBQWEsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDeEMsY0FBYyxFQUFFLEVBQUU7WUFDbEIsU0FBUyxFQUFFLEVBQUU7WUFDYixhQUFhO1lBQ2IsZUFBZTtZQUNmLFVBQVU7WUFDVixpQkFBaUI7WUFDakIsY0FBYztZQUNkLGdCQUFnQjtZQUNoQixvQkFBb0I7WUFDcEIsU0FBUztZQUNULFdBQVc7WUFDWCxPQUFPO1lBQ1AsTUFBTTtZQUNOLE1BQU07WUFDTixVQUFVO1lBQ1YsbUJBQW1CO1lBQ25CLDJCQUEyQjtZQUMzQixvQkFBb0I7U0FDckIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQTNFRCx5REFBeUQ7SUFDakQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFjO1FBQ3pDLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hCO1FBQ0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7O0FBUkgsOEJBNkVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYWNtIGZyb20gJ0Bhd3MtY2RrL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXInO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ0Bhd3MtY2RrL2NvcmUnO1xuaW1wb3J0IHsgTWljcm9BcHBzQ0YgfSBmcm9tICcuL01pY3JvQXBwc0NGJztcbmltcG9ydCB7IE1pY3JvQXBwc1MzIH0gZnJvbSAnLi9NaWNyb0FwcHNTMyc7XG5pbXBvcnQgeyBNaWNyb0FwcHNTdmNzIH0gZnJvbSAnLi9NaWNyb0FwcHNTdmNzJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgaW50ZXJmYWNlIE1pY3JvQXBwc1Byb3BzIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBhdXRvRGVsZXRlRXZlcnl0aGluZz86IGJvb2xlYW47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBhcHBFbnY6IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBhc3NldE5hbWVSb290OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGFzc2V0TmFtZVN1ZmZpeD86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZG9tYWluTmFtZTogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcjUzWm9uZU5hbWU6IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcjUzWm9uZUlEOiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgY2VydEVkZ2U6IGFjbS5JQ2VydGlmaWNhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgY2VydE9yaWdpbjogYWNtLklDZXJ0aWZpY2F0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgczNTdHJpY3RCdWNrZXRQb2xpY3k/OiBib29sZWFuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgczNQb2xpY3lCeXBhc3NQcmluY2lwYWxBUk5zPzogc3RyaW5nW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHMzUG9saWN5QnlwYXNzQVJPQXM/OiBzdHJpbmdbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGFjY291bnQ6IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZG9tYWluTmFtZUVkZ2U6IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBkb21haW5OYW1lT3JpZ2luOiBzdHJpbmc7XG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBjbGFzcyBNaWNyb0FwcHMgZXh0ZW5kcyBjZGsuQ29uc3RydWN0IHtcbiAgLy8gaW5wdXQgbGlrZSAnZXhhbXBsZS5jb20uJyB3aWxsIHJldHVybiBhcyAnY29tLmV4YW1wbGUnXG4gIHByaXZhdGUgc3RhdGljIHJldmVyc2VEb21haW4oZG9tYWluOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBwYXJ0cyA9IGRvbWFpbi5zcGxpdCgnLicpLnJldmVyc2UoKTtcbiAgICBpZiAocGFydHNbMF0gPT09ICcnKSB7XG4gICAgICBwYXJ0cyA9IHBhcnRzLnNsaWNlKDEpO1xuICAgIH1cbiAgICByZXR1cm4gcGFydHMuam9pbignLicpO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IGNkay5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogTWljcm9BcHBzUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgaWYgKHByb3BzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncHJvcHMgbXVzdCBiZSBzZXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBkb21haW5OYW1lLFxuICAgICAgZG9tYWluTmFtZUVkZ2UsXG4gICAgICBkb21haW5OYW1lT3JpZ2luLFxuICAgICAgYXNzZXROYW1lUm9vdCA9ICdtaWNyb2FwcHMnLFxuICAgICAgYXNzZXROYW1lU3VmZml4ID0gJycsXG4gICAgICBhdXRvRGVsZXRlRXZlcnl0aGluZyA9IGZhbHNlLFxuICAgICAgcjUzWm9uZUlELFxuICAgICAgcjUzWm9uZU5hbWUsXG4gICAgICBjZXJ0RWRnZSxcbiAgICAgIGFjY291bnQsXG4gICAgICByZWdpb24sXG4gICAgICBhcHBFbnYgPSAnZGV2JyxcbiAgICAgIGNlcnRPcmlnaW4sXG4gICAgICBzM1BvbGljeUJ5cGFzc0FST0FzLFxuICAgICAgczNQb2xpY3lCeXBhc3NQcmluY2lwYWxBUk5zLFxuICAgICAgczNTdHJpY3RCdWNrZXRQb2xpY3ksXG4gICAgfSA9IHByb3BzO1xuICAgIGNvbnN0IHJldmVyc2VEb21haW5OYW1lID0gTWljcm9BcHBzLnJldmVyc2VEb21haW4oZG9tYWluTmFtZSk7XG5cbiAgICBjb25zdCBzMyA9IG5ldyBNaWNyb0FwcHNTMyh0aGlzLCAnbWljcm9hcHBzLXMzJywge1xuICAgICAgYXV0b0RlbGV0ZUV2ZXJ5dGhpbmcsXG4gICAgICByZXZlcnNlRG9tYWluTmFtZSxcbiAgICAgIGFzc2V0TmFtZVJvb3QsXG4gICAgICBhc3NldE5hbWVTdWZmaXgsXG4gICAgfSk7XG4gICAgY29uc3QgY2YgPSBuZXcgTWljcm9BcHBzQ0YodGhpcywgJ21pY3JvYXBwcy1jbG91ZGZyb250Jywge1xuICAgICAgczNFeHBvcnRzOiBzMyxcbiAgICAgIGFzc2V0TmFtZVJvb3QsXG4gICAgICBhc3NldE5hbWVTdWZmaXgsXG4gICAgICBkb21haW5OYW1lLFxuICAgICAgcmV2ZXJzZURvbWFpbk5hbWUsXG4gICAgICBkb21haW5OYW1lRWRnZSxcbiAgICAgIGRvbWFpbk5hbWVPcmlnaW4sXG4gICAgICBhdXRvRGVsZXRlRXZlcnl0aGluZyxcbiAgICAgIHI1M1pvbmVJRCxcbiAgICAgIHI1M1pvbmVOYW1lLFxuICAgICAgY2VydEVkZ2UsXG4gICAgfSk7XG4gICAgbmV3IE1pY3JvQXBwc1N2Y3ModGhpcywgJ21pY3JvYXBwcy1zdmNzJywge1xuICAgICAgY2ZTdGFja0V4cG9ydHM6IGNmLFxuICAgICAgczNFeHBvcnRzOiBzMyxcbiAgICAgIGFzc2V0TmFtZVJvb3QsXG4gICAgICBhc3NldE5hbWVTdWZmaXgsXG4gICAgICBkb21haW5OYW1lLFxuICAgICAgcmV2ZXJzZURvbWFpbk5hbWUsXG4gICAgICBkb21haW5OYW1lRWRnZSxcbiAgICAgIGRvbWFpbk5hbWVPcmlnaW4sXG4gICAgICBhdXRvRGVsZXRlRXZlcnl0aGluZyxcbiAgICAgIHI1M1pvbmVJRCxcbiAgICAgIHI1M1pvbmVOYW1lLFxuICAgICAgYWNjb3VudCxcbiAgICAgIHJlZ2lvbixcbiAgICAgIGFwcEVudixcbiAgICAgIGNlcnRPcmlnaW4sXG4gICAgICBzM1BvbGljeUJ5cGFzc0FST0FzLFxuICAgICAgczNQb2xpY3lCeXBhc3NQcmluY2lwYWxBUk5zLFxuICAgICAgczNTdHJpY3RCdWNrZXRQb2xpY3ksXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
package/lib/MicroAppsSvcs.d.ts
CHANGED
|
@@ -17,8 +17,9 @@ interface MicroAppsSvcsStackProps extends cdk.ResourceProps {
|
|
|
17
17
|
readonly certOrigin: acm.ICertificate;
|
|
18
18
|
readonly r53ZoneName: string;
|
|
19
19
|
readonly r53ZoneID: string;
|
|
20
|
-
readonly
|
|
21
|
-
readonly
|
|
20
|
+
readonly s3StrictBucketPolicy?: boolean;
|
|
21
|
+
readonly s3PolicyBypassAROAs?: string[];
|
|
22
|
+
readonly s3PolicyBypassPrincipalARNs?: string[];
|
|
22
23
|
readonly account: string;
|
|
23
24
|
readonly region: string;
|
|
24
25
|
}
|
package/lib/MicroAppsSvcs.js
CHANGED
|
@@ -22,8 +22,13 @@ class MicroAppsSvcs extends cdk.Construct {
|
|
|
22
22
|
throw new Error('props cannot be undefined');
|
|
23
23
|
}
|
|
24
24
|
const { bucketApps, bucketAppsName, bucketAppsOAI, bucketAppsStaging, bucketAppsStagingName } = props.s3Exports;
|
|
25
|
-
const { r53ZoneID, r53ZoneName,
|
|
25
|
+
const { r53ZoneID, r53ZoneName, s3PolicyBypassAROAs = [], s3PolicyBypassPrincipalARNs = [], s3StrictBucketPolicy = false, autoDeleteEverything, appEnv, domainNameEdge, domainNameOrigin, certOrigin, account, region, assetNameRoot, assetNameSuffix, } = props;
|
|
26
26
|
const apigatewayName = `${assetNameRoot}${assetNameSuffix}`;
|
|
27
|
+
if (s3StrictBucketPolicy === true) {
|
|
28
|
+
if (s3PolicyBypassAROAs.length === 0 && s3PolicyBypassPrincipalARNs.length === 0) {
|
|
29
|
+
throw new Error('s3StrictBucketPolicy cannot be true without specifying at least one s3PolicyBypassAROAs or s3PolicyBypassPrincipalARNs');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
27
32
|
//
|
|
28
33
|
// DynamoDB Table
|
|
29
34
|
//
|
|
@@ -49,7 +54,7 @@ class MicroAppsSvcs extends cdk.Construct {
|
|
|
49
54
|
let routerFunc;
|
|
50
55
|
const routerFuncProps = {
|
|
51
56
|
functionName: `${assetNameRoot}-router${assetNameSuffix}`,
|
|
52
|
-
memorySize:
|
|
57
|
+
memorySize: 1769,
|
|
53
58
|
logRetention: logs.RetentionDays.ONE_MONTH,
|
|
54
59
|
runtime: lambda.Runtime.NODEJS_14_X,
|
|
55
60
|
timeout: cdk.Duration.seconds(15),
|
|
@@ -175,7 +180,7 @@ class MicroAppsSvcs extends cdk.Construct {
|
|
|
175
180
|
let deployerFunc;
|
|
176
181
|
const deployerFuncProps = {
|
|
177
182
|
functionName: deployerFuncName,
|
|
178
|
-
memorySize:
|
|
183
|
+
memorySize: 1769,
|
|
179
184
|
logRetention: logs.RetentionDays.ONE_MONTH,
|
|
180
185
|
runtime: lambda.Runtime.NODEJS_14_X,
|
|
181
186
|
timeout: cdk.Duration.seconds(15),
|
|
@@ -248,6 +253,16 @@ class MicroAppsSvcs extends cdk.Construct {
|
|
|
248
253
|
//
|
|
249
254
|
// Update S3 permissions
|
|
250
255
|
//
|
|
256
|
+
// Create PrincipalARN List
|
|
257
|
+
const s3PolicyBypassArnPrincipals = [];
|
|
258
|
+
for (const arnPrincipal of s3PolicyBypassPrincipalARNs) {
|
|
259
|
+
s3PolicyBypassArnPrincipals.push(new iam.ArnPrincipal(arnPrincipal));
|
|
260
|
+
}
|
|
261
|
+
// Create AROA List that matches assumed sessions
|
|
262
|
+
const s3PolicyBypassAROAMatches = [];
|
|
263
|
+
for (const aroa of s3PolicyBypassAROAs) {
|
|
264
|
+
s3PolicyBypassAROAMatches.push(`${aroa}:*`);
|
|
265
|
+
}
|
|
251
266
|
// Deny apps from reading:
|
|
252
267
|
// - If they are missing the microapp-name tag
|
|
253
268
|
// - Anything outside of the folder that matches their microapp-name tag
|
|
@@ -258,10 +273,8 @@ class MicroAppsSvcs extends cdk.Construct {
|
|
|
258
273
|
notPrincipals: [
|
|
259
274
|
new iam.CanonicalUserPrincipal(bucketAppsOAI.cloudFrontOriginAccessIdentityS3CanonicalUserId),
|
|
260
275
|
new iam.AccountRootPrincipal(),
|
|
261
|
-
|
|
276
|
+
...s3PolicyBypassArnPrincipals,
|
|
262
277
|
deployerFunc.grantPrincipal,
|
|
263
|
-
// Allow the builder user to update the buckets
|
|
264
|
-
new iam.ArnPrincipal(`arn:aws:iam::${account}:user/${assetNameRoot}-builder-${props.appEnv}`),
|
|
265
278
|
],
|
|
266
279
|
notResources: [
|
|
267
280
|
`${bucketApps.bucketArn}/\${aws:PrincipalTag/microapp-name}/*`,
|
|
@@ -283,11 +296,12 @@ class MicroAppsSvcs extends cdk.Construct {
|
|
|
283
296
|
notPrincipals: [
|
|
284
297
|
new iam.CanonicalUserPrincipal(bucketAppsOAI.cloudFrontOriginAccessIdentityS3CanonicalUserId),
|
|
285
298
|
new iam.AccountRootPrincipal(),
|
|
286
|
-
|
|
299
|
+
// Exclude the Deployer Function directly
|
|
287
300
|
deployerFunc.grantPrincipal,
|
|
288
|
-
|
|
289
|
-
//
|
|
290
|
-
new iam.ArnPrincipal(`arn:aws:
|
|
301
|
+
// 2021-12-04 - Not 100% sure that this is actually needed...
|
|
302
|
+
// Let's test this and remove if actually not necessary
|
|
303
|
+
new iam.ArnPrincipal(`arn:aws:sts::${account}:assumed-role/${(_a = deployerFunc.role) === null || _a === void 0 ? void 0 : _a.roleName}/${deployerFunc.functionName}`),
|
|
304
|
+
...s3PolicyBypassArnPrincipals,
|
|
291
305
|
],
|
|
292
306
|
resources: [`${bucketApps.bucketArn}/*`, bucketApps.bucketArn],
|
|
293
307
|
conditions: {
|
|
@@ -297,7 +311,7 @@ class MicroAppsSvcs extends cdk.Construct {
|
|
|
297
311
|
// The notPrincipals will only match the role name exactly and will not match
|
|
298
312
|
// any session that has assumed the role since notPrincipals does not allow
|
|
299
313
|
// wildcard matches and does not do them implicitly either.
|
|
300
|
-
// The AROA must be
|
|
314
|
+
// The AROA must be used because there are only 3 Principal variables:
|
|
301
315
|
// https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#principaltable
|
|
302
316
|
// aws:username, aws:userid, aws:PrincipalTag
|
|
303
317
|
// For an assumed role, aws:username is blank, aws:userid is:
|
|
@@ -307,7 +321,11 @@ class MicroAppsSvcs extends cdk.Construct {
|
|
|
307
321
|
// The name of the role is simply not available and if it was
|
|
308
322
|
// we'd need to write a complicated comparison to make sure
|
|
309
323
|
// that we didn't exclude the Deny tag from roles in other accounts.
|
|
310
|
-
|
|
324
|
+
//
|
|
325
|
+
// To get the AROA with the AWS CLI:
|
|
326
|
+
// aws iam get-role --role-name ROLE-NAME
|
|
327
|
+
// aws iam get-user -–user-name USER-NAME
|
|
328
|
+
StringNotLike: { 'aws:userid': [account, ...s3PolicyBypassAROAMatches] },
|
|
311
329
|
},
|
|
312
330
|
});
|
|
313
331
|
if (autoDeleteEverything) {
|
|
@@ -329,13 +347,17 @@ class MicroAppsSvcs extends cdk.Construct {
|
|
|
329
347
|
bucket: bucketApps,
|
|
330
348
|
}).document;
|
|
331
349
|
document.addStatements(policyCloudFrontAccess);
|
|
332
|
-
|
|
333
|
-
|
|
350
|
+
if (s3StrictBucketPolicy) {
|
|
351
|
+
document.addStatements(policyDenyPrefixOutsideTag);
|
|
352
|
+
document.addStatements(policyDenyMissingTag);
|
|
353
|
+
}
|
|
334
354
|
}
|
|
335
355
|
else {
|
|
336
356
|
bucketApps.policy.document.addStatements(policyCloudFrontAccess);
|
|
337
|
-
|
|
338
|
-
|
|
357
|
+
if (s3StrictBucketPolicy) {
|
|
358
|
+
bucketApps.policy.document.addStatements(policyDenyPrefixOutsideTag);
|
|
359
|
+
bucketApps.policy.document.addStatements(policyDenyMissingTag);
|
|
360
|
+
}
|
|
339
361
|
}
|
|
340
362
|
// Allow the Lambda to read from the staging bucket
|
|
341
363
|
const policyReadListStaging = new iam.PolicyStatement({
|
|
@@ -422,4 +444,4 @@ class MicroAppsSvcs extends cdk.Construct {
|
|
|
422
444
|
}
|
|
423
445
|
}
|
|
424
446
|
exports.MicroAppsSvcs = MicroAppsSvcs;
|
|
425
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWljcm9BcHBzU3Zjcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9NaWNyb0FwcHNTdmNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJCQUFnQztBQUNoQyw2QkFBNkI7QUFDN0Isb0RBQW9EO0FBQ3BELG9FQUFvRTtBQUVwRSxrREFBa0Q7QUFDbEQsd0NBQXdDO0FBQ3hDLDhDQUE4QztBQUM5QywyREFBMkQ7QUFDM0QsMENBQTBDO0FBQzFDLDRDQUE0QztBQUM1QywyREFBMkQ7QUFDM0Qsc0NBQXNDO0FBQ3RDLHFDQUFxQztBQWtDckMsTUFBYSxhQUFjLFNBQVEsR0FBRyxDQUFDLFNBQVM7SUFNOUMsWUFBWSxLQUFvQixFQUFFLEVBQVUsRUFBRSxLQUErQjs7UUFDM0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1NBQzlDO1FBRUQsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLEdBQzNGLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDbEIsTUFBTSxFQUNKLFNBQVMsRUFDVCxXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLE9BQU8sRUFDUCxNQUFNLEVBQ04sYUFBYSxFQUNiLGVBQWUsR0FDaEIsR0FBRyxLQUFLLENBQUM7UUFFVixNQUFNLGNBQWMsR0FBRyxHQUFHLGFBQWEsR0FBRyxlQUFlLEVBQUUsQ0FBQztRQUU1RCxFQUFFO1FBQ0YsaUJBQWlCO1FBQ2pCLEVBQUU7UUFDRixNQUFNLEtBQUssR0FBRyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLHdCQUF3QixF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LFlBQVksR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLDBCQUEwQixFQUFFO1lBQ3JFLElBQUksRUFBRSxJQUFJO1lBQ1YsVUFBVSxFQUFFLGdCQUFnQjtZQUM1QixNQUFNLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQ2hDLElBQUksVUFBVSxDQUFDLDRCQUE0QixDQUN6QyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixFQUNyQyxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUN4QyxDQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxvQkFBb0IsRUFBRTtZQUN4QixZQUFZLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM1RDtJQUNILENBQUM7SUEvY0QsSUFBVyxZQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0NBOGNGO0FBbGRELHNDQWtkQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgYXBpZ3d5IGZyb20gJ0Bhd3MtY2RrL2F3cy1hcGlnYXRld2F5djInO1xuaW1wb3J0ICogYXMgYXBpZ3d5aW50IGZyb20gJ0Bhd3MtY2RrL2F3cy1hcGlnYXRld2F5djItaW50ZWdyYXRpb25zJztcbmltcG9ydCAqIGFzIGFjbSBmcm9tICdAYXdzLWNkay9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyJztcbmltcG9ydCAqIGFzIGR5bmFtb2RiIGZyb20gJ0Bhd3MtY2RrL2F3cy1keW5hbW9kYic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnQGF3cy1jZGsvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSAnQGF3cy1jZGsvYXdzLWxhbWJkYSc7XG5pbXBvcnQgKiBhcyBsYW1iZGFOb2RlanMgZnJvbSAnQGF3cy1jZGsvYXdzLWxhbWJkYS1ub2RlanMnO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tICdAYXdzLWNkay9hd3MtbG9ncyc7XG5pbXBvcnQgKiBhcyByNTMgZnJvbSAnQGF3cy1jZGsvYXdzLXJvdXRlNTMnO1xuaW1wb3J0ICogYXMgcjUzdGFyZ2V0cyBmcm9tICdAYXdzLWNkay9hd3Mtcm91dGU1My10YXJnZXRzJztcbmltcG9ydCAqIGFzIHMzIGZyb20gJ0Bhd3MtY2RrL2F3cy1zMyc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnQGF3cy1jZGsvY29yZSc7XG5pbXBvcnQgeyBJTWljcm9BcHBzQ0ZFeHBvcnRzIH0gZnJvbSAnLi9NaWNyb0FwcHNDRic7XG5pbXBvcnQgeyBJTWljcm9BcHBzUzNFeHBvcnRzIH0gZnJvbSAnLi9NaWNyb0FwcHNTMyc7XG5cbmludGVyZmFjZSBNaWNyb0FwcHNTdmNzU3RhY2tQcm9wcyBleHRlbmRzIGNkay5SZXNvdXJjZVByb3BzIHtcbiAgcmVhZG9ubHkgY2ZTdGFja0V4cG9ydHM6IElNaWNyb0FwcHNDRkV4cG9ydHM7XG4gIHJlYWRvbmx5IHMzRXhwb3J0czogSU1pY3JvQXBwc1MzRXhwb3J0cztcblxuICByZWFkb25seSBhcHBFbnY6IHN0cmluZztcbiAgcmVhZG9ubHkgYXV0b0RlbGV0ZUV2ZXJ5dGhpbmc6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJldmVyc2VEb21haW5OYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRvbWFpbk5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgZG9tYWluTmFtZUVkZ2U6IHN0cmluZztcbiAgcmVhZG9ubHkgZG9tYWluTmFtZU9yaWdpbjogc3RyaW5nO1xuXG4gIHJlYWRvbmx5IGFzc2V0TmFtZVJvb3Q6IHN0cmluZztcbiAgcmVhZG9ubHkgYXNzZXROYW1lU3VmZml4OiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkgY2VydE9yaWdpbjogYWNtLklDZXJ0aWZpY2F0ZTtcblxuICByZWFkb25seSByNTNab25lTmFtZTogc3RyaW5nO1xuICByZWFkb25seSByNTNab25lSUQ6IHN0cmluZztcblxuICByZWFkb25seSBzM1BvbGljeUJ5cGFzc0FST0E6IHN0cmluZztcbiAgcmVhZG9ubHkgczNQb2xpY3lCeXBhc3NSb2xlTmFtZTogc3RyaW5nO1xuXG4gIHJlYWRvbmx5IGFjY291bnQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1pY3JvQXBwc1N2Y3NFeHBvcnRzIHtcbiAgcmVhZG9ubHkgZG5BcHBzT3JpZ2luOiBhcGlnd3kuRG9tYWluTmFtZTtcbn1cblxuZXhwb3J0IGNsYXNzIE1pY3JvQXBwc1N2Y3MgZXh0ZW5kcyBjZGsuQ29uc3RydWN0IGltcGxlbWVudHMgSU1pY3JvQXBwc1N2Y3NFeHBvcnRzIHtcbiAgcHJpdmF0ZSBfZG5BcHBzT3JpZ2luOiBhcGlnd3kuRG9tYWluTmFtZTtcbiAgcHVibGljIGdldCBkbkFwcHNPcmlnaW4oKTogYXBpZ3d5LkRvbWFpbk5hbWUge1xuICAgIHJldHVybiB0aGlzLl9kbkFwcHNPcmlnaW47XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzY29wZTogY2RrLkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBNaWNyb0FwcHNTdmNzU3RhY2tQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAocHJvcHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwcm9wcyBjYW5ub3QgYmUgdW5kZWZpbmVkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBidWNrZXRBcHBzLCBidWNrZXRBcHBzTmFtZSwgYnVja2V0QXBwc09BSSwgYnVja2V0QXBwc1N0YWdpbmcsIGJ1Y2tldEFwcHNTdGFnaW5nTmFtZSB9ID1cbiAgICAgIHByb3BzLnMzRXhwb3J0cztcbiAgICBjb25zdCB7XG4gICAgICByNTNab25lSUQsXG4gICAgICByNTNab25lTmFtZSxcbiAgICAgIHMzUG9saWN5QnlwYXNzQVJPQSxcbiAgICAgIHMzUG9saWN5QnlwYXNzUm9sZU5hbWUsXG4gICAgICBhdXRvRGVsZXRlRXZlcnl0aGluZyxcbiAgICAgIGFwcEVudixcbiAgICAgIGRvbWFpbk5hbWVFZGdlLFxuICAgICAgZG9tYWluTmFtZU9yaWdpbixcbiAgICAgIGNlcnRPcmlnaW4sXG4gICAgICBhY2NvdW50LFxuICAgICAgcmVnaW9uLFxuICAgICAgYXNzZXROYW1lUm9vdCxcbiAgICAgIGFzc2V0TmFtZVN1ZmZpeCxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBhcGlnYXRld2F5TmFtZSA9IGAke2Fzc2V0TmFtZVJvb3R9JHthc3NldE5hbWVTdWZmaXh9YDtcblxuICAgIC8vXG4gICAgLy8gRHluYW1vREIgVGFibGVcbiAgICAvL1xuICAgIGNvbnN0IHRhYmxlID0gbmV3IGR5bmFtb2RiLlRhYmxlKHRoaXMsICdtaWNyb2FwcHMtcm91dGVyLXRhYmxlJywge1xuICAgICAgdGFibGVOYW1lOiBgJHthc3NldE5hbWVSb290fSR7YXNzZXROYW1lU3VmZml4fWAsXG4gICAgICBiaWxsaW5nTW9kZTogZHluYW1vZGIuQmlsbGluZ01vZGUuUEFZX1BFUl9SRVFVRVNULFxuICAgICAgcGFydGl0aW9uS2V5OiB7XG4gICAgICAgIG5hbWU6ICdQSycsXG4gICAgICAgIHR5cGU6IGR5bmFtb2RiLkF0dHJpYnV0ZVR5cGUuU1RSSU5HLFxuICAgICAgfSxcbiAgICAgIHNvcnRLZXk6IHtcbiAgICAgICAgbmFtZTogJ1NLJyxcbiAgICAgICAgdHlwZTogZHluYW1vZGIuQXR0cmlidXRlVHlwZS5TVFJJTkcsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGlmIChhdXRvRGVsZXRlRXZlcnl0aGluZykge1xuICAgICAgdGFibGUuYXBwbHlSZW1vdmFsUG9saWN5KGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1kpO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gUm91dGVyIExhbWJkYSBGdW5jdGlvblxuICAgIC8vXG5cbiAgICAvLyBDcmVhdGUgUm91dGVyIExhbWJkYSBGdW5jdGlvblxuICAgIGxldCByb3V0ZXJGdW5jOiBsYW1iZGEuRnVuY3Rpb247XG4gICAgY29uc3Qgcm91dGVyRnVuY1Byb3BzOiBPbWl0PGxhbWJkYS5GdW5jdGlvblByb3BzLCAnaGFuZGxlcicgfCAnY29kZSc+ID0ge1xuICAgICAgZnVuY3Rpb25OYW1lOiBgJHthc3NldE5hbWVSb290fS1yb3V0ZXIke2Fzc2V0TmFtZVN1ZmZpeH1gLFxuICAgICAgbWVtb3J5U2l6ZTogMTAyNCxcbiAgICAgIGxvZ1JldGVudGlvbjogbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9NT05USCxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNF9YLFxuICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLnNlY29uZHMoMTUpLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgTk9ERV9FTlY6IGFwcEVudixcbiAgICAgICAgREFUQUJBU0VfVEFCTEVfTkFNRTogdGFibGUudGFibGVOYW1lLFxuICAgICAgICBBV1NfTk9ERUpTX0NPTk5FQ1RJT05fUkVVU0VfRU5BQkxFRDogJzEnLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGlmIChleGlzdHNTeW5jKGAke3BhdGgucmVzb2x2ZShfX2Rpcm5hbWUpfS8uLi9kaXN0L21pY3JvYXBwcy1yb3V0ZXIvaW5kZXguanNgKSkge1xuICAgICAgLy8gVGhpcyBpcyBmb3IgbG9jYWwgZGV2XG4gICAgICByb3V0ZXJGdW5jID0gbmV3IGxhbWJkYS5GdW5jdGlvbih0aGlzLCAnbWljcm9hcHBzLXJvdXRlci1mdW5jJywge1xuICAgICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoYCR7cGF0aC5yZXNvbHZlKF9fZGlybmFtZSl9Ly4uL2Rpc3QvbWljcm9hcHBzLXJvdXRlci9gKSxcbiAgICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgICAuLi5yb3V0ZXJGdW5jUHJvcHMsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGV4aXN0c1N5bmMoYCR7cGF0aC5yZXNvbHZlKF9fZGlybmFtZSl9L21pY3JvYXBwcy1yb3V0ZXIvaW5kZXguanNgKSkge1xuICAgICAgLy8gVGhpcyBpcyBmb3IgYnVpbHQgYXBwcyBwYWNrYWdlZCB3aXRoIHRoZSBDREsgY29uc3RydWN0XG4gICAgICByb3V0ZXJGdW5jID0gbmV3IGxhbWJkYS5GdW5jdGlvbih0aGlzLCAnbWljcm9hcHBzLXJvdXRlci1mdW5jJywge1xuICAgICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoYCR7cGF0aC5yZXNvbHZlKF9fZGlybmFtZSl9L21pY3JvYXBwcy1yb3V0ZXIvYCksXG4gICAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgICAgLi4ucm91dGVyRnVuY1Byb3BzLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENyZWF0ZSBSb3V0ZXIgTGFtYmRhIExheWVyXG4gICAgICBjb25zdCByb3V0ZXJEYXRhRmlsZXMgPSBuZXcgbGFtYmRhLkxheWVyVmVyc2lvbih0aGlzLCAnbWljcm9hcHBzLXJvdXRlci1sYXllcicsIHtcbiAgICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KCcuL3BhY2thZ2VzL21pY3JvYXBwcy1yb3V0ZXIvdGVtcGxhdGVzLycpLFxuICAgICAgfSk7XG4gICAgICBpZiAoYXV0b0RlbGV0ZUV2ZXJ5dGhpbmcpIHtcbiAgICAgICAgcm91dGVyRGF0YUZpbGVzLmFwcGx5UmVtb3ZhbFBvbGljeShjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZKTtcbiAgICAgIH1cblxuICAgICAgcm91dGVyRnVuYyA9IG5ldyBsYW1iZGFOb2RlanMuTm9kZWpzRnVuY3Rpb24odGhpcywgJ21pY3JvYXBwcy1yb3V0ZXItZnVuYycsIHtcbiAgICAgICAgZW50cnk6ICcuL3BhY2thZ2VzL21pY3JvYXBwcy1yb3V0ZXIvc3JjL2luZGV4LnRzJyxcbiAgICAgICAgaGFuZGxlcjogJ2hhbmRsZXInLFxuICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgIG1pbmlmeTogdHJ1ZSxcbiAgICAgICAgICBzb3VyY2VNYXA6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGxheWVyczogW3JvdXRlckRhdGFGaWxlc10sXG4gICAgICAgIC4uLnJvdXRlckZ1bmNQcm9wcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoYXV0b0RlbGV0ZUV2ZXJ5dGhpbmcpIHtcbiAgICAgIHJvdXRlckZ1bmMuYXBwbHlSZW1vdmFsUG9saWN5KGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1kpO1xuICAgIH1cbiAgICBjb25zdCBwb2xpY3lSZWFkVGFyZ2V0ID0gbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydzMzpHZXRPYmplY3QnXSxcbiAgICAgIHJlc291cmNlczogW2Ake2J1Y2tldEFwcHMuYnVja2V0QXJufS8qYF0sXG4gICAgfSk7XG4gICAgZm9yIChjb25zdCByb3V0ZXIgb2YgW3JvdXRlckZ1bmNdKSB7XG4gICAgICByb3V0ZXIuYWRkVG9Sb2xlUG9saWN5KHBvbGljeVJlYWRUYXJnZXQpO1xuICAgICAgLy8gR2l2ZSB0aGUgUm91dGVyIGFjY2VzcyB0byBEeW5hbW9EQiB0YWJsZVxuICAgICAgdGFibGUuZ3JhbnRSZWFkRGF0YShyb3V0ZXIpO1xuICAgICAgdGFibGUuZ3JhbnQocm91dGVyLCAnZHluYW1vZGI6RGVzY3JpYmVUYWJsZScpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IEFkZCBMYXN0IFJvdXRlIGZvciAvKi97cHJveHkrfVxuICAgIC8vIE5vdGU6IFRoYXQgbWlnaHQgbm90IHdvcmssIG1heSBuZWVkIGEgQmVoYXZpb3IgaW4gQ2xvdWRGcm9udFxuICAgIC8vICAgICAgIG9yIGEgTGFtYmRhIEAgRWRnZSBmdW5jdGlvbiB0aGF0IGRldGVjdHMgdGhlc2UgYW5kIHJvdXRlc1xuICAgIC8vICAgICAgIHRvIG9yaWdpbiBMYW1iZGEgUm91dGVyIGZ1bmN0aW9uLlxuXG4gICAgLy9cbiAgICAvLyBBUElHYXRld2F5IGRvbWFpbiBuYW1lcyBmb3IgQ2xvdWRGcm9udCBhbmQgb3JpZ2luXG4gICAgLy9cblxuICAgIC8vIENyZWF0ZSBDdXN0b20gRG9tYWlucyBmb3IgQVBJIEdhdGV3YXlcbiAgICBjb25zdCBkbkFwcHNFZGdlID0gbmV3IGFwaWd3eS5Eb21haW5OYW1lKHRoaXMsICdtaWNyb2FwcHMtYXBwcy1lZGdlLWRuJywge1xuICAgICAgZG9tYWluTmFtZTogZG9tYWluTmFtZUVkZ2UsXG4gICAgICBjZXJ0aWZpY2F0ZTogY2VydE9yaWdpbixcbiAgICB9KTtcbiAgICBpZiAoYXV0b0RlbGV0ZUV2ZXJ5dGhpbmcpIHtcbiAgICAgIGRuQXBwc0VkZ2UuYXBwbHlSZW1vdmFsUG9saWN5KGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1kpO1xuICAgIH1cbiAgICB0aGlzLl9kbkFwcHNPcmlnaW4gPSBuZXcgYXBpZ3d5LkRvbWFpbk5hbWUodGhpcywgJ21pY3JvYXBwcy1hcHBzLW9yaWdpbi1kbicsIHtcbiAgICAgIGRvbWFpbk5hbWU6IGRvbWFpbk5hbWVPcmlnaW4sXG4gICAgICBjZXJ0aWZpY2F0ZTogY2VydE9yaWdpbixcbiAgICB9KTtcbiAgICBpZiAoYXV0b0RlbGV0ZUV2ZXJ5dGhpbmcpIHtcbiAgICAgIHRoaXMuX2RuQXBwc09yaWdpbi5hcHBseVJlbW92YWxQb2xpY3koY2RrLlJlbW92YWxQb2xpY3kuREVTVFJPWSk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGFuIGludGVncmF0aW9uIGZvciB0aGUgUm91dGVyXG4gICAgLy8gRG8gdGhpcyBoZXJlIHNpbmNlIGl0J3MgdGhlIGRlZmF1bHQgcm91dGVcbiAgICBjb25zdCBpbnRSb3V0ZXIgPSBuZXcgYXBpZ3d5aW50LkxhbWJkYVByb3h5SW50ZWdyYXRpb24oe1xuICAgICAgaGFuZGxlcjogcm91dGVyRnVuYyxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBBUElHYXRld2F5IGZvciB0aGUgRWRnZSBuYW1lXG4gICAgY29uc3QgaHR0cEFwaURvbWFpbk1hcHBpbmc6IGFwaWd3eS5Eb21haW5NYXBwaW5nT3B0aW9ucyA9IHtcbiAgICAgIGRvbWFpbk5hbWU6IGRuQXBwc0VkZ2UsXG4gICAgfTtcbiAgICBjb25zdCBodHRwQXBpID0gbmV3IGFwaWd3eS5IdHRwQXBpKHRoaXMsICdtaWNyb2FwcHMtYXBpJywge1xuICAgICAgZGVmYXVsdERvbWFpbk1hcHBpbmc6IGh0dHBBcGlEb21haW5NYXBwaW5nLFxuICAgICAgZGVmYXVsdEludGVncmF0aW9uOiBpbnRSb3V0ZXIsXG4gICAgICBhcGlOYW1lOiBhcGlnYXRld2F5TmFtZSxcbiAgICB9KTtcbiAgICBpZiAoYXV0b0RlbGV0ZUV2ZXJ5dGhpbmcpIHtcbiAgICAgIGh0dHBBcGkuYXBwbHlSZW1vdmFsUG9saWN5KGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1kpO1xuICAgIH1cblxuICAgIC8vIEFkZCBkZWZhdWx0IHJvdXRlIG9uIEFQSSBHYXRld2F5IHRvIHBvaW50IHRvIHRoZSByb3V0ZXJcbiAgICAvLyBodHRwQXBpLmFkZFJvdXRlcyh7XG4gICAgLy8gICBwYXRoOiAnJGRlZmF1bHQnLFxuICAgIC8vICAgaW50ZWdyYXRpb246IGludFJvdXRlcixcbiAgICAvLyB9KTtcblxuICAgIC8vXG4gICAgLy8gTGV0IEFQSSBHYXRld2F5IGFjY2VwdCByZXF1ZXN0cyB1c2luZyBkb21haW5OYW1lT3JpZ2luXG4gICAgLy8gVGhhdCBpcyB0aGUgb3JpZ2luIFVSSSB0aGF0IENsb3VkRnJvbnQgdXNlcyBmb3IgdGhpcyBnYXRld2F5LlxuICAgIC8vIFRoZSBnYXRld2F5IHdpbGwgcmVmdXNlIHRoZSB0cmFmZmljIGlmIGl0IGRvZXNuJ3QgaGF2ZSB0aGVcbiAgICAvLyBkb21haW4gbmFtZSByZWdpc3RlcmVkLlxuICAgIC8vXG4gICAgY29uc3QgbWFwcGluZ0FwcHNBcGlzID0gbmV3IGFwaWd3eS5BcGlNYXBwaW5nKHRoaXMsICdtaWNyb2FwcHMtYXBpLW1hcHBpbmctb3JpZ2luJywge1xuICAgICAgYXBpOiBodHRwQXBpLFxuICAgICAgZG9tYWluTmFtZTogdGhpcy5kbkFwcHNPcmlnaW4sXG4gICAgfSk7XG4gICAgbWFwcGluZ0FwcHNBcGlzLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLmRuQXBwc09yaWdpbik7XG4gICAgaWYgKGF1dG9EZWxldGVFdmVyeXRoaW5nKSB7XG4gICAgICBtYXBwaW5nQXBwc0FwaXMuYXBwbHlSZW1vdmFsUG9saWN5KGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1kpO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gRGVwbG95ZXIgTGFtYmRhIEZ1bmN0aW9uXG4gICAgLy9cblxuICAgIC8vIENyZWF0ZSBEZXBsb3llciBMYW1iZGEgRnVuY3Rpb25cbiAgICBjb25zdCBpYW1Sb2xlVXBsb2FkTmFtZSA9IGAke2Fzc2V0TmFtZVJvb3R9LWRlcGxveWVyLXVwbG9hZCR7YXNzZXROYW1lU3VmZml4fWA7XG4gICAgY29uc3QgZGVwbG95ZXJGdW5jTmFtZSA9IGAke2Fzc2V0TmFtZVJvb3R9LWRlcGxveWVyJHthc3NldE5hbWVTdWZmaXh9YDtcbiAgICBsZXQgZGVwbG95ZXJGdW5jOiBsYW1iZGEuRnVuY3Rpb247XG4gICAgY29uc3QgZGVwbG95ZXJGdW5jUHJvcHM6IE9taXQ8bGFtYmRhLkZ1bmN0aW9uUHJvcHMsICdoYW5kbGVyJyB8ICdjb2RlJz4gPSB7XG4gICAgICBmdW5jdGlvbk5hbWU6IGRlcGxveWVyRnVuY05hbWUsXG4gICAgICBtZW1vcnlTaXplOiAxMDI0LFxuICAgICAgbG9nUmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuT05FX01PTlRILFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzE0X1gsXG4gICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24uc2Vjb25kcygxNSksXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBOT0RFX0VOVjogYXBwRW52LFxuICAgICAgICBBUElHV1lfSUQ6IGh0dHBBcGkuaHR0cEFwaUlkLFxuICAgICAgICBEQVRBQkFTRV9UQUJMRV9OQU1FOiB0YWJsZS50YWJsZU5hbWUsXG4gICAgICAgIEZJTEVTVE9SRV9TVEFHSU5HX0JVQ0tFVDogYnVja2V0QXBwc1N0YWdpbmdOYW1lLFxuICAgICAgICBGSUxFU1RPUkVfREVTVF9CVUNLRVQ6IGJ1Y2tldEFwcHNOYW1lLFxuICAgICAgICBVUExPQURfUk9MRV9OQU1FOiBpYW1Sb2xlVXBsb2FkTmFtZSxcbiAgICAgICAgQVdTX05PREVKU19DT05ORUNUSU9OX1JFVVNFX0VOQUJMRUQ6ICcxJyxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBpZiAoZXhpc3RzU3luYyhgJHtwYXRoLnJlc29sdmUoX19kaXJuYW1lKX0vLi4vZGlzdC9taWNyb2FwcHMtZGVwbG95ZXIvaW5kZXguanNgKSkge1xuICAgICAgLy8gVGhpcyBpcyBmb3IgbG9jYWwgZGV2XG4gICAgICBkZXBsb3llckZ1bmMgPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHRoaXMsICdtaWNyb2FwcHMtZGVwbG95ZXItZnVuYycsIHtcbiAgICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke3BhdGgucmVzb2x2ZShfX2Rpcm5hbWUpfS8uLi9kaXN0L21pY3JvYXBwcy1kZXBsb3llci9gKSxcbiAgICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgICAuLi5kZXBsb3llckZ1bmNQcm9wcyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZXhpc3RzU3luYyhgJHtwYXRoLnJlc29sdmUoX19kaXJuYW1lKX0vbWljcm9hcHBzLWRlcGxveWVyL2luZGV4LmpzYCkpIHtcbiAgICAgIC8vIFRoaXMgaXMgZm9yIGJ1aWx0IGFwcHMgcGFja2FnZWQgd2l0aCB0aGUgQ0RLIGNvbnN0cnVjdFxuICAgICAgZGVwbG95ZXJGdW5jID0gbmV3IGxhbWJkYS5GdW5jdGlvbih0aGlzLCAnbWljcm9hcHBzLWRlcGxveWVyLWZ1bmMnLCB7XG4gICAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChgJHtwYXRoLnJlc29sdmUoX19kaXJuYW1lKX0vbWljcm9hcHBzLWRlcGxveWVyL2ApLFxuICAgICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICAgIC4uLmRlcGxveWVyRnVuY1Byb3BzLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlcGxveWVyRnVuYyA9IG5ldyBsYW1iZGFOb2RlanMuTm9kZWpzRnVuY3Rpb24odGhpcywgJ21pY3JvYXBwcy1kZXBsb3llci1mdW5jJywge1xuICAgICAgICBlbnRyeTogJy4vcGFja2FnZXMvbWljcm9hcHBzLWRlcGxveWVyL3NyYy9pbmRleC50cycsXG4gICAgICAgIGhhbmRsZXI6ICdoYW5kbGVyJyxcbiAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICBtaW5pZnk6IHRydWUsXG4gICAgICAgICAgc291cmNlTWFwOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICAuLi5kZXBsb3llckZ1bmNQcm9wcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoYXV0b0RlbGV0ZUV2ZXJ5dGhpbmcpIHtcbiAgICAgIGRlcGxveWVyRnVuYy5hcHBseVJlbW92YWxQb2xpY3koY2RrLlJlbW92YWxQb2xpY3kuREVTVFJPWSk7XG4gICAgfVxuICAgIC8vIEdpdmUgdGhlIERlcGxveWVyIGFjY2VzcyB0byBEeW5hbW9EQiB0YWJsZVxuICAgIHRhYmxlLmdyYW50UmVhZFdyaXRlRGF0YShkZXBsb3llckZ1bmMpO1xuICAgIHRhYmxlLmdyYW50KGRlcGxveWVyRnVuYywgJ2R5bmFtb2RiOkRlc2NyaWJlVGFibGUnKTtcblxuICAgIC8vXG4gICAgLy8gRGVsb3llciB1cGxvYWQgdGVtcCByb2xlXG4gICAgLy8gRGVwbG95ZXIgYXNzdW1lcyB0aGlzIHJvbGUgd2l0aCBhIGxpbWl0ZWQgcG9saWN5IHRvIGdlbmVyYXRlXG4gICAgLy8gYW4gU1RTIHRlbXAgdG9rZW4gdG8gcmV0dXJuIHRvIG1pY3JvYXBwcy1wdWJsaXNoIGZvciB0aGUgdXBsb2FkLlxuICAgIC8vXG4gICAgY29uc3QgaWFtUm9sZVVwbG9hZCA9IG5ldyBpYW0uUm9sZSh0aGlzLCAnbWljcm9hcHBzLWRlcGxveWVyLXVwbG9hZC1yb2xlJywge1xuICAgICAgcm9sZU5hbWU6IGlhbVJvbGVVcGxvYWROYW1lLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgdXBsb2FkUG9saWN5OiBuZXcgaWFtLlBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFsnczM6TGlzdEJ1Y2tldCddLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtidWNrZXRBcHBzU3RhZ2luZy5idWNrZXRBcm5dLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFsnczM6UHV0T2JqZWN0JywgJ3MzOkdldE9iamVjdCcsICdzMzpBYm9ydE11bHRpcGFydFVwbG9hZCddLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtgJHtidWNrZXRBcHBzU3RhZ2luZy5idWNrZXRBcm59LypgXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICAgIGFzc3VtZWRCeTogZGVwbG95ZXJGdW5jLmdyYW50UHJpbmNpcGFsLFxuICAgIH0pO1xuXG4gICAgLy9cbiAgICAvLyBVcGRhdGUgUzMgcGVybWlzc2lvbnNcbiAgICAvL1xuICAgIC8vIERlbnkgYXBwcyBmcm9tIHJlYWRpbmc6XG4gICAgLy8gLSBJZiB0aGV5IGFyZSBtaXNzaW5nIHRoZSBtaWNyb2FwcC1uYW1lIHRhZ1xuICAgIC8vIC0gQW55dGhpbmcgb3V0c2lkZSBvZiB0aGUgZm9sZGVyIHRoYXQgbWF0Y2hlcyB0aGVpciBtaWNyb2FwcC1uYW1lIHRhZ1xuICAgIGNvbnN0IHBvbGljeURlbnlQcmVmaXhPdXRzaWRlVGFnID0gbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnZGVueS1wcmVmaXgtb3V0c2lkZS1taWNyb2FwcC1uYW1lLXRhZycsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuREVOWSxcbiAgICAgIGFjdGlvbnM6IFsnczM6KiddLFxuICAgICAgbm90UHJpbmNpcGFsczogW1xuICAgICAgICBuZXcgaWFtLkNhbm9uaWNhbFVzZXJQcmluY2lwYWwoXG4gICAgICAgICAgYnVja2V0QXBwc09BSS5jbG91ZEZyb250T3JpZ2luQWNjZXNzSWRlbnRpdHlTM0Nhbm9uaWNhbFVzZXJJZCxcbiAgICAgICAgKSxcbiAgICAgICAgbmV3IGlhbS5BY2NvdW50Um9vdFByaW5jaXBhbCgpLFxuICAgICAgICBuZXcgaWFtLkFyblByaW5jaXBhbChgYXJuOmF3czppYW06OiR7YWNjb3VudH06cm9sZS8ke3MzUG9saWN5QnlwYXNzUm9sZU5hbWV9YCksXG4gICAgICAgIGRlcGxveWVyRnVuYy5ncmFudFByaW5jaXBhbCxcbiAgICAgICAgLy8gQWxsb3cgdGhlIGJ1aWxkZXIgdXNlciB0byB1cGRhdGUgdGhlIGJ1Y2tldHNcbiAgICAgICAgbmV3IGlhbS5Bcm5QcmluY2lwYWwoXG4gICAgICAgICAgYGFybjphd3M6aWFtOjoke2FjY291bnR9OnVzZXIvJHthc3NldE5hbWVSb290fS1idWlsZGVyLSR7cHJvcHMuYXBwRW52fWAsXG4gICAgICAgICksXG4gICAgICBdLFxuICAgICAgbm90UmVzb3VyY2VzOiBbXG4gICAgICAgIGAke2J1Y2tldEFwcHMuYnVja2V0QXJufS9cXCR7YXdzOlByaW5jaXBhbFRhZy9taWNyb2FwcC1uYW1lfS8qYCxcbiAgICAgICAgYnVja2V0QXBwcy5idWNrZXRBcm4sXG4gICAgICBdLFxuICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICBOdWxsOiB7ICdhd3M6UHJpbmNpcGFsVGFnL21pY3JvYXBwLW5hbWUnOiAnZmFsc2UnIH0sXG4gICAgICAgIC8vIFN0cmluZ05vdExpa2U6IHsnYXdzOid9XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGlmIChhdXRvRGVsZXRlRXZlcnl0aGluZykge1xuICAgICAgcG9saWN5RGVueVByZWZpeE91dHNpZGVUYWcuYWRkQ29uZGl0aW9uKFxuICAgICAgICAvLyBBbGxvd3MgdGhlIERlbGV0YWJsZUJ1Y2tldCBMYW1iZGEgdG8gZGVsZXRlIGl0ZW1zIGluIHRoZSBidWNrZXRzXG4gICAgICAgICdTdHJpbmdOb3RMaWtlJyxcbiAgICAgICAgeyAnYXdzOlByaW5jaXBhbFRhZy9hcHBsaWNhdGlvbic6IGAke2Fzc2V0TmFtZVJvb3R9LWNvcmUqYCB9LFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgcG9saWN5RGVueU1pc3NpbmdUYWcgPSBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdkZW55LW1pc3NpbmctbWljcm9hcHAtbmFtZS10YWcnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkRFTlksXG4gICAgICBhY3Rpb25zOiBbJ3MzOionXSxcbiAgICAgIG5vdFByaW5jaXBhbHM6IFtcbiAgICAgICAgbmV3IGlhbS5DYW5vbmljYWxVc2VyUHJpbmNpcGFsKFxuICAgICAgICAgIGJ1Y2tldEFwcHNPQUkuY2xvdWRGcm9udE9yaWdpbkFjY2Vzc0lkZW50aXR5UzNDYW5vbmljYWxVc2VySWQsXG4gICAgICAgICksXG4gICAgICAgIG5ldyBpYW0uQWNjb3VudFJvb3RQcmluY2lwYWwoKSxcbiAgICAgICAgbmV3IGlhbS5Bcm5QcmluY2lwYWwoYGFybjphd3M6aWFtOjoke2FjY291bnR9OnJvbGUvJHtzM1BvbGljeUJ5cGFzc1JvbGVOYW1lfWApLFxuICAgICAgICBkZXBsb3llckZ1bmMuZ3JhbnRQcmluY2lwYWwsXG4gICAgICAgIG5ldyBpYW0uQXJuUHJpbmNpcGFsKFxuICAgICAgICAgIGBhcm46YXdzOnN0czo6JHthY2NvdW50fTphc3N1bWVkLXJvbGUvJHtkZXBsb3llckZ1bmM/LnJvbGU/LnJvbGVOYW1lfS8ke2RlcGxveWVyRnVuYy5mdW5jdGlvbk5hbWV9YCxcbiAgICAgICAgKSxcbiAgICAgICAgLy8gQWxsb3cgdGhlIGJ1aWxkZXIgdXNlciB0byB1cGRhdGUgdGhlIGJ1Y2tldHNcbiAgICAgICAgbmV3IGlhbS5Bcm5QcmluY2lwYWwoXG4gICAgICAgICAgYGFybjphd3M6aWFtOjoke2FjY291bnR9OnVzZXIvJHthc3NldE5hbWVSb290fS1idWlsZGVyLSR7cHJvcHMuYXBwRW52fWAsXG4gICAgICAgICksXG4gICAgICBdLFxuICAgICAgcmVzb3VyY2VzOiBbYCR7YnVja2V0QXBwcy5idWNrZXRBcm59LypgLCBidWNrZXRBcHBzLmJ1Y2tldEFybl0sXG4gICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgIE51bGw6IHsgJ2F3czpQcmluY2lwYWxUYWcvbWljcm9hcHAtbmFtZSc6ICd0cnVlJyB9LFxuICAgICAgICAvLyBOb3RlOiBUaGlzIEFST0EgbXVzdCBiZSBzcGVjaWZpZWQgdG8gcHJldmVudCB0aGlzIHBvbGljeSBmcm9tIGxvY2tpbmdcbiAgICAgICAgLy8gb3V0IG5vbi1yb290IHNlc3Npb25zIHRoYXQgaGF2ZSBhc3N1bWVkIHRoZSBhZG1pbiByb2xlLlxuICAgICAgICAvLyBUaGUgbm90UHJpbmNpcGFscyB3aWxsIG9ubHkgbWF0Y2ggdGhlIHJvbGUgbmFtZSBleGFjdGx5IGFuZCB3aWxsIG5vdCBtYXRjaFxuICAgICAgICAvLyBhbnkgc2Vzc2lvbiB0aGF0IGhhcyBhc3N1bWVkIHRoZSByb2xlIHNpbmNlIG5vdFByaW5jaXBhbHMgZG9lcyBub3QgYWxsb3dcbiAgICAgICAgLy8gd2lsZGNhcmQgbWF0Y2hlcyBhbmQgZG9lcyBub3QgZG8gdGhlbSBpbXBsaWNpdGx5IGVpdGhlci5cbiAgICAgICAgLy8gVGhlIEFST0EgbXVzdCBiZSB1YXNlZCBiZWNhdXNlIHRoZXJlIGFyZSBvbmx5IDMgUHJpbmNpcGFsIHZhcmlhYmxlczpcbiAgICAgICAgLy8gIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfdmFyaWFibGVzLmh0bWwjcHJpbmNpcGFsdGFibGVcbiAgICAgICAgLy8gIGF3czp1c2VybmFtZSwgYXdzOnVzZXJpZCwgYXdzOlByaW5jaXBhbFRhZ1xuICAgICAgICAvLyBGb3IgYW4gYXNzdW1lZCByb2xlLCBhd3M6dXNlcm5hbWUgaXMgYmxhbmssIGF3czp1c2VyaWQgaXM6XG4gICAgICAgIC8vICBbdW5pcXVlIGlkIEFLQSBBUk9BIGZvciBSb2xlXTpbc2Vzc2lvbiBuYW1lXVxuICAgICAgICAvLyBUYWJsZSBvZiB1bmlxdWUgSUQgcHJlZml4ZXMgc3VjaCBhcyBBUk9BOlxuICAgICAgICAvLyAgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9pZGVudGlmaWVycy5odG1sI2lkZW50aWZpZXJzLXByZWZpeGVzXG4gICAgICAgIC8vIFRoZSBuYW1lIG9mIHRoZSByb2xlIGlzIHNpbXBseSBub3QgYXZhaWxhYmxlIGFuZCBpZiBpdCB3YXNcbiAgICAgICAgLy8gd2UnZCBuZWVkIHRvIHdyaXRlIGEgY29tcGxpY2F0ZWQgY29tcGFyaXNvbiB0byBtYWtlIHN1cmVcbiAgICAgICAgLy8gdGhhdCB3ZSBkaWRuJ3QgZXhjbHVkZSB0aGUgRGVueSB0YWcgZnJvbSByb2xlcyBpbiBvdGhlciBhY2NvdW50cy5cbiAgICAgICAgU3RyaW5nTm90TGlrZTogeyAnYXdzOnVzZXJpZCc6IFtgJHtzM1BvbGljeUJ5cGFzc0FST0F9OipgLCBhY2NvdW50XSB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBpZiAoYXV0b0RlbGV0ZUV2ZXJ5dGhpbmcpIHtcbiAgICAgIHBvbGljeURlbnlNaXNzaW5nVGFnLmFkZENvbmRpdGlvbihcbiAgICAgICAgLy8gQWxsb3dzIHRoZSBEZWxldGFibGVCdWNrZXQgTGFtYmRhIHRvIGRlbGV0ZSBpdGVtcyBpbiB0aGUgYnVja2V0c1xuICAgICAgICAnU3RyaW5nTm90TGlrZScsXG4gICAgICAgIHsgJ2F3czpQcmluY2lwYWxUYWcvYXBwbGljYXRpb24nOiBgJHthc3NldE5hbWVSb290fS1jb3JlKmAgfSxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHBvbGljeUNsb3VkRnJvbnRBY2Nlc3MgPSBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdjbG91ZGZyb250LW9haS1hY2Nlc3MnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydzMzpHZXRPYmplY3QnXSxcbiAgICAgIHByaW5jaXBhbHM6IFtcbiAgICAgICAgbmV3IGlhbS5DYW5vbmljYWxVc2VyUHJpbmNpcGFsKFxuICAgICAgICAgIGJ1Y2tldEFwcHNPQUkuY2xvdWRGcm9udE9yaWdpbkFjY2Vzc0lkZW50aXR5UzNDYW5vbmljYWxVc2VySWQsXG4gICAgICAgICksXG4gICAgICBdLFxuICAgICAgcmVzb3VyY2VzOiBbYCR7YnVja2V0QXBwcy5idWNrZXRBcm59LypgXSxcbiAgICB9KTtcbiAgICBpZiAoYnVja2V0QXBwcy5wb2xpY3kgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZG9jdW1lbnQgPSBuZXcgczMuQnVja2V0UG9saWN5KHRoaXMsICdDRlBvbGljeScsIHtcbiAgICAgICAgYnVja2V0OiBidWNrZXRBcHBzLFxuICAgICAgfSkuZG9jdW1lbnQ7XG4gICAgICBkb2N1bWVudC5hZGRTdGF0ZW1lbnRzKHBvbGljeUNsb3VkRnJvbnRBY2Nlc3MpO1xuICAgICAgZG9jdW1lbnQuYWRkU3RhdGVtZW50cyhwb2xpY3lEZW55UHJlZml4T3V0c2lkZVRhZyk7XG4gICAgICBkb2N1bWVudC5hZGRTdGF0ZW1lbnRzKHBvbGljeURlbnlNaXNzaW5nVGFnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnVja2V0QXBwcy5wb2xpY3kuZG9jdW1lbnQuYWRkU3RhdGVtZW50cyhwb2xpY3lDbG91ZEZyb250QWNjZXNzKTtcbiAgICAgIGJ1Y2tldEFwcHMucG9saWN5LmRvY3VtZW50LmFkZFN0YXRlbWVudHMocG9saWN5RGVueVByZWZpeE91dHNpZGVUYWcpO1xuICAgICAgYnVja2V0QXBwcy5wb2xpY3kuZG9jdW1lbnQuYWRkU3RhdGVtZW50cyhwb2xpY3lEZW55TWlzc2luZ1RhZyk7XG4gICAgfVxuXG4gICAgLy8gQWxsb3cgdGhlIExhbWJkYSB0byByZWFkIGZyb20gdGhlIHN0YWdpbmcgYnVja2V0XG4gICAgY29uc3QgcG9saWN5UmVhZExpc3RTdGFnaW5nID0gbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgLy8gRklYTUU6IEFsbG93IERlcGxveWVyIHRvIGRlbGV0ZSBmcm9tIFN0YWdpbmcgYnVja2V0XG4gICAgICBhY3Rpb25zOiBbJ3MzOkRlbGV0ZU9iamVjdCcsICdzMzpHZXRPYmplY3QnLCAnczM6TGlzdEJ1Y2tldCddLFxuICAgICAgcmVzb3VyY2VzOiBbYCR7YnVja2V0QXBwc1N0YWdpbmcuYnVja2V0QXJufS8qYCwgYnVja2V0QXBwc1N0YWdpbmcuYnVja2V0QXJuXSxcbiAgICB9KTtcbiAgICBkZXBsb3llckZ1bmMuYWRkVG9Sb2xlUG9saWN5KHBvbGljeVJlYWRMaXN0U3RhZ2luZyk7XG5cbiAgICAvLyBBbGxvdyB0aGUgTGFtYmRhIHRvIHdyaXRlIHRvIHRoZSB0YXJnZXQgYnVja2V0XG4gICAgY29uc3QgcG9saWN5UmVhZFdyaXRlTGlzdFRhcmdldCA9IG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnczM6R2V0T2JqZWN0JywgJ3MzOlB1dE9iamVjdCcsICdzMzpMaXN0QnVja2V0J10sXG4gICAgICByZXNvdXJjZXM6IFtgJHtidWNrZXRBcHBzLmJ1Y2tldEFybn0vKmAsIGJ1Y2tldEFwcHMuYnVja2V0QXJuXSxcbiAgICB9KTtcbiAgICBkZXBsb3llckZ1bmMuYWRkVG9Sb2xlUG9saWN5KHBvbGljeVJlYWRXcml0ZUxpc3RUYXJnZXQpO1xuXG4gICAgLy8gQWxsb3cgdGhlIGRlcGxveWVyIHRvIGdldCBhIHRlbXBvcmFyeSBTVFMgdG9rZW5cbiAgICBjb25zdCBwb2xpY3lHZXRTVFNUb2tlbiA9IG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnc3RzOkdldEZlZGVyYXRpb25Ub2tlbiddLFxuICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICB9KTtcbiAgICBkZXBsb3llckZ1bmMuYWRkVG9Sb2xlUG9saWN5KHBvbGljeUdldFNUU1Rva2VuKTtcblxuICAgIC8vIEFsbG93IHRoZSBkZXBsb3llciB0byBhc3N1bWUgdGhlIHVwbG9hZCByb2xlXG4gICAgY29uc3QgcG9saWN5QXNzdW1lVXBsb2FkID0gbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydzdHM6QXNzdW1lUm9sZSddLFxuICAgICAgcmVzb3VyY2VzOiBbaWFtUm9sZVVwbG9hZC5yb2xlQXJuXSxcbiAgICB9KTtcbiAgICBkZXBsb3llckZ1bmMuYWRkVG9Sb2xlUG9saWN5KHBvbGljeUFzc3VtZVVwbG9hZCk7XG5cbiAgICAvL1xuICAgIC8vIEdpdmUgRGVwbG95ZXIgcGVybWlzc2lvbnMgdG8gY3JlYXRlIHJvdXRlcyBhbmQgaW50ZWdyYXRpb25zXG4gICAgLy8gb24gdGhlIEFQSSBHYXRld2F5IEFQSS5cbiAgICAvL1xuXG4gICAgLy8gR3JhbnQgdGhlIGFiaWxpdHkgdG8gTGlzdCBhbGwgQVBJcyAod2UgaGF2ZSB0byBmaW5kIGl0KVxuICAgIGNvbnN0IHBvbGljeUFQSUxpc3QgPSBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbJ2FwaWdhdGV3YXk6R0VUJ10sXG4gICAgICByZXNvdXJjZXM6IFtgYXJuOmF3czphcGlnYXRld2F5OiR7cmVnaW9ufTo6L2FwaXNgXSxcbiAgICB9KTtcbiAgICBkZXBsb3llckZ1bmMuYWRkVG9Sb2xlUG9saWN5KHBvbGljeUFQSUxpc3QpO1xuICAgIC8vIEdyYW50IGZ1bGwgY29udHJvbCBvdmVyIHRoZSBBUEkgd2UgY3JlYXRlZFxuICAgIGNvbnN0IHBvbGljeUFQSU1hbmFnZSA9IG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnYXBpZ2F0ZXdheToqJ10sXG4gICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgYGFybjphd3M6YXBpZ2F0ZXdheToke3JlZ2lvbn06JHthY2NvdW50fToke2h0dHBBcGkuaHR0cEFwaUlkfS8qYCxcbiAgICAgICAgYGFybjphd3M6YXBpZ2F0ZXdheToke3JlZ2lvbn06Oi9hcGlzLyR7aHR0cEFwaS5odHRwQXBpSWR9L2ludGVncmF0aW9uc2AsXG4gICAgICAgIGBhcm46YXdzOmFwaWdhdGV3YXk6JHtyZWdpb259OjovYXBpcy8ke2h0dHBBcGkuaHR0cEFwaUlkfS9yb3V0ZXNgLFxuICAgICAgXSxcbiAgICB9KTtcbiAgICBkZXBsb3llckZ1bmMuYWRkVG9Sb2xlUG9saWN5KHBvbGljeUFQSU1hbmFnZSk7XG4gICAgLy8gR3JhbnQgZnVsbCBjb250cm9sIG92ZXIgbGFtYmRhcyB0aGF0IGluZGljYXRlIHRoZXkgYXJlIG1pY3JvYXBwc1xuICAgIGNvbnN0IHBvbGljeUFQSU1hbmFnZUxhbWJkYXMgPSBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbJ2xhbWJkYToqJ10sXG4gICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgYGFybjphd3M6bGFtYmRhOiR7cmVnaW9ufToke2FjY291bnR9OmZ1bmN0aW9uOipgLFxuICAgICAgICBgYXJuOmF3czpsYW1iZGE6JHtyZWdpb259OiR7YWNjb3VudH06ZnVuY3Rpb246KjoqYCxcbiAgICAgIF0sXG4gICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgIFN0cmluZ0VxdWFsc0lmRXhpc3RzOiB7ICdhd3M6UmVzb3VyY2VUYWcvbWljcm9hcHAtbWFuYWdlZCc6ICd0cnVlJyB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBkZXBsb3llckZ1bmMuYWRkVG9Sb2xlUG9saWN5KHBvbGljeUFQSU1hbmFnZUxhbWJkYXMpO1xuXG4gICAgLy9cbiAgICAvLyBDcmVhdGUgdGhlIG9yaWdpbiBuYW1lIGZvciBBUEkgR2F0ZXdheVxuICAgIC8vXG5cbiAgICBjb25zdCB6b25lID0gcjUzLkhvc3RlZFpvbmUuZnJvbUhvc3RlZFpvbmVBdHRyaWJ1dGVzKHRoaXMsICdtaWNyb2FwcHMtem9uZScsIHtcbiAgICAgIHpvbmVOYW1lOiByNTNab25lTmFtZSxcbiAgICAgIGhvc3RlZFpvbmVJZDogcjUzWm9uZUlELFxuICAgIH0pO1xuXG4gICAgY29uc3QgcnJBcHBzT3JpZ2luID0gbmV3IHI1My5BUmVjb3JkKHRoaXMsICdtaWNyb2FwcHMtb3JpZ2luLWFyZWNvcmQnLCB7XG4gICAgICB6b25lOiB6b25lLFxuICAgICAgcmVjb3JkTmFtZTogZG9tYWluTmFtZU9yaWdpbixcbiAgICAgIHRhcmdldDogcjUzLlJlY29yZFRhcmdldC5mcm9tQWxpYXMoXG4gICAgICAgIG5ldyByNTN0YXJnZXRzLkFwaUdhdGV3YXl2MkRvbWFpblByb3BlcnRpZXMoXG4gICAgICAgICAgdGhpcy5fZG5BcHBzT3JpZ2luLnJlZ2lvbmFsRG9tYWluTmFtZSxcbiAgICAgICAgICB0aGlzLl9kbkFwcHNPcmlnaW4ucmVnaW9uYWxIb3N0ZWRab25lSWQsXG4gICAgICAgICksXG4gICAgICApLFxuICAgIH0pO1xuICAgIGlmIChhdXRvRGVsZXRlRXZlcnl0aGluZykge1xuICAgICAgcnJBcHBzT3JpZ2luLmFwcGx5UmVtb3ZhbFBvbGljeShjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
447
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWljcm9BcHBzU3Zjcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9NaWNyb0FwcHNTdmNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJCQUFnQztBQUNoQyw2QkFBNkI7QUFDN0Isb0RBQW9EO0FBQ3BELG9FQUFvRTtBQUVwRSxrREFBa0Q7QUFDbEQsd0NBQXdDO0FBQ3hDLDhDQUE4QztBQUM5QywyREFBMkQ7QUFDM0QsMENBQTBDO0FBQzFDLDRDQUE0QztBQUM1QywyREFBMkQ7QUFDM0Qsc0NBQXNDO0FBQ3RDLHFDQUFxQztBQW1DckMsTUFBYSxhQUFjLFNBQVEsR0FBRyxDQUFDLFNBQVM7SUFNOUMsWUFBWSxLQUFvQixFQUFFLEVBQVUsRUFBRSxLQUErQjs7UUFDM0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1NBQzlDO1FBRUQsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLEdBQzNGLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDbEIsTUFBTSxFQUNKLFNBQVMsRUFDVCxXQUFXLEVBQ1gsbUJBQW1CLEdBQUcsRUFBRSxFQUN4QiwyQkFBMkIsR0FBRyxFQUFFLEVBQ2hDLG9CQUFvQixHQUFHLEtBQUssRUFDNUIsb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixjQUFjLEVBQ2QsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVixPQUFPLEVBQ1AsTUFBTSxFQUNOLGFBQWEsRUFDYixlQUFlLEdBQ2hCLEdBQUcsS0FBSyxDQUFDO1FBRVYsTUFBTSxjQUFjLEdBQUcsR0FBRyxhQUFhLEdBQUcsZUFBZSxFQUFFLENBQUM7UUFFNUQsSUFBSSxvQkFBb0IsS0FBSyxJQUFJLEVBQUU7WUFDakMsSUFBSSxtQkFBbUIsQ0FB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QUFPLGFBQWE7Z0JBQ2hELGtCQUFrQixNQUFNLElBQUksT0FBTyxlQUFlO2FBQ25EO1lBQ0QsVUFBVSxFQUFFO2dCQUNWLG9CQUFvQixFQUFFLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxFQUFFO2FBQ3JFO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsWUFBWSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBRXJELEVBQUU7UUFDRix5Q0FBeUM7UUFDekMsRUFBRTtRQUVGLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQzNFLFFBQVEsRUFBRSxXQUFXO1lBQ3JCLFlBQVksRUFBRSxTQUFTO1NBQ3hCLENBQUMsQ0FBQztRQUVILE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsMEJBQTBCLEVBQUU7WUFDckUsSUFBSSxFQUFFLElBQUk7WUFDVixVQUFVLEVBQUUsZ0JBQWdCO1lBQzVCLE1BQU0sRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FDaEMsSUFBSSxVQUFVLENBQUMsNEJBQTRCLENBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLEVBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQ3hDLENBQ0Y7U0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLG9CQUFvQixFQUFFO1lBQ3hCLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzVEO0lBQ0gsQ0FBQztJQXhlRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7Q0F1ZUY7QUEzZUQsc0NBMmVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBhcGlnd3kgZnJvbSAnQGF3cy1jZGsvYXdzLWFwaWdhdGV3YXl2Mic7XG5pbXBvcnQgKiBhcyBhcGlnd3lpbnQgZnJvbSAnQGF3cy1jZGsvYXdzLWFwaWdhdGV3YXl2Mi1pbnRlZ3JhdGlvbnMnO1xuaW1wb3J0ICogYXMgYWNtIGZyb20gJ0Bhd3MtY2RrL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXInO1xuaW1wb3J0ICogYXMgZHluYW1vZGIgZnJvbSAnQGF3cy1jZGsvYXdzLWR5bmFtb2RiJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdAYXdzLWNkay9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdAYXdzLWNkay9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIGxhbWJkYU5vZGVqcyBmcm9tICdAYXdzLWNkay9hd3MtbGFtYmRhLW5vZGVqcyc7XG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gJ0Bhd3MtY2RrL2F3cy1sb2dzJztcbmltcG9ydCAqIGFzIHI1MyBmcm9tICdAYXdzLWNkay9hd3Mtcm91dGU1Myc7XG5pbXBvcnQgKiBhcyByNTN0YXJnZXRzIGZyb20gJ0Bhd3MtY2RrL2F3cy1yb3V0ZTUzLXRhcmdldHMnO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnQGF3cy1jZGsvYXdzLXMzJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdAYXdzLWNkay9jb3JlJztcbmltcG9ydCB7IElNaWNyb0FwcHNDRkV4cG9ydHMgfSBmcm9tICcuL01pY3JvQXBwc0NGJztcbmltcG9ydCB7IElNaWNyb0FwcHNTM0V4cG9ydHMgfSBmcm9tICcuL01pY3JvQXBwc1MzJztcblxuaW50ZXJmYWNlIE1pY3JvQXBwc1N2Y3NTdGFja1Byb3BzIGV4dGVuZHMgY2RrLlJlc291cmNlUHJvcHMge1xuICByZWFkb25seSBjZlN0YWNrRXhwb3J0czogSU1pY3JvQXBwc0NGRXhwb3J0cztcbiAgcmVhZG9ubHkgczNFeHBvcnRzOiBJTWljcm9BcHBzUzNFeHBvcnRzO1xuXG4gIHJlYWRvbmx5IGFwcEVudjogc3RyaW5nO1xuICByZWFkb25seSBhdXRvRGVsZXRlRXZlcnl0aGluZzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcmV2ZXJzZURvbWFpbk5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgZG9tYWluTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBkb21haW5OYW1lRWRnZTogc3RyaW5nO1xuICByZWFkb25seSBkb21haW5OYW1lT3JpZ2luOiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkgYXNzZXROYW1lUm9vdDogc3RyaW5nO1xuICByZWFkb25seSBhc3NldE5hbWVTdWZmaXg6IHN0cmluZztcblxuICByZWFkb25seSBjZXJ0T3JpZ2luOiBhY20uSUNlcnRpZmljYXRlO1xuXG4gIHJlYWRvbmx5IHI1M1pvbmVOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHI1M1pvbmVJRDogc3RyaW5nO1xuXG4gIHJlYWRvbmx5IHMzU3RyaWN0QnVja2V0UG9saWN5PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgczNQb2xpY3lCeXBhc3NBUk9Bcz86IHN0cmluZ1tdO1xuICByZWFkb25seSBzM1BvbGljeUJ5cGFzc1ByaW5jaXBhbEFSTnM/OiBzdHJpbmdbXTtcblxuICByZWFkb25seSBhY2NvdW50OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNaWNyb0FwcHNTdmNzRXhwb3J0cyB7XG4gIHJlYWRvbmx5IGRuQXBwc09yaWdpbjogYXBpZ3d5LkRvbWFpbk5hbWU7XG59XG5cbmV4cG9ydCBjbGFzcyBNaWNyb0FwcHNTdmNzIGV4dGVuZHMgY2RrLkNvbnN0cnVjdCBpbXBsZW1lbnRzIElNaWNyb0FwcHNTdmNzRXhwb3J0cyB7XG4gIHByaXZhdGUgX2RuQXBwc09yaWdpbjogYXBpZ3d5LkRvbWFpbk5hbWU7XG4gIHB1YmxpYyBnZXQgZG5BcHBzT3JpZ2luKCk6IGFwaWd3eS5Eb21haW5OYW1lIHtcbiAgICByZXR1cm4gdGhpcy5fZG5BcHBzT3JpZ2luO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IGNkay5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogTWljcm9BcHBzU3Zjc1N0YWNrUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgaWYgKHByb3BzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncHJvcHMgY2Fubm90IGJlIHVuZGVmaW5lZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgYnVja2V0QXBwcywgYnVja2V0QXBwc05hbWUsIGJ1Y2tldEFwcHNPQUksIGJ1Y2tldEFwcHNTdGFnaW5nLCBidWNrZXRBcHBzU3RhZ2luZ05hbWUgfSA9XG4gICAgICBwcm9wcy5zM0V4cG9ydHM7XG4gICAgY29uc3Qge1xuICAgICAgcjUzWm9uZUlELFxuICAgICAgcjUzWm9uZU5hbWUsXG4gICAgICBzM1BvbGljeUJ5cGFzc0FST0FzID0gW10sXG4gICAgICBzM1BvbGljeUJ5cGFzc1ByaW5jaXBhbEFSTnMgPSBbXSxcbiAgICAgIHMzU3RyaWN0QnVja2V0UG9saWN5ID0gZmFsc2UsXG4gICAgICBhdXRvRGVsZXRlRXZlcnl0aGluZyxcbiAgICAgIGFwcEVudixcbiAgICAgIGRvbWFpbk5hbWVFZGdlLFxuICAgICAgZG9tYWluTmFtZU9yaWdpbixcbiAgICAgIGNlcnRPcmlnaW4sXG4gICAgICBhY2NvdW50LFxuICAgICAgcmVnaW9uLFxuICAgICAgYXNzZXROYW1lUm9vdCxcbiAgICAgIGFzc2V0TmFtZVN1ZmZpeCxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBhcGlnYXRld2F5TmFtZSA9IGAke2Fzc2V0TmFtZVJvb3R9JHthc3NldE5hbWVTdWZmaXh9YDtcblxuICAgIGlmIChzM1N0cmljdEJ1Y2tldFBvbGljeSA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKHMzUG9saWN5QnlwYXNzQVJPQXMubGVuZ3RoID09PSAwICYmIHMzUG9saWN5QnlwYXNzUHJpbmNpcGFsQVJOcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdzM1N0cmljdEJ1Y2tldFBvbGljeSBjYW5ub3QgYmUgdHJ1ZSB3aXRob3V0IHNwZWNpZnlpbmcgYXQgbGVhc3Qgb25lIHMzUG9saWN5QnlwYXNzQVJPQXMgb3IgczNQb2xpY3lCeXBhc3NQcmluY2lwYWxBUk5zJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIER5bmFtb0RCIFRhYmxlXG4gICAgLy9cbiAgICBjb25zdCB0YWJsZSA9IG5ldyBkeW5hbW9kYi5UYWJsZSh0aGlzLCAnbWljcm9hcHBzLXJvdXRlci10YWJsZScsIHtcbiAgICAgIHRhYmxlTmFtZTogYCR7YXNzZXROYW1lUm9vdH0ke2Fzc2V0TmFtZVN1ZmZpeH1gLFxuICAgICAgYmlsbGluZ01vZGU6IGR5bmFtb2RiLkJpbGxpbmdNb2RlLlBBWV9QRVJfUkVRVUVTVCxcbiAgICAgIHBhcnRpdGlvbktleToge1xuICAgICAgICBuYW1lOiAnUEsnLFxuICAgICAgICB0eXBlOiBkeW5hbW9kYi5BdHRyaWJ1dGVUeXBlLlNUUklORyxcbiAgICAgIH0sXG4gICAgICBzb3J0S2V5OiB7XG4gICAgICAgIG5hbWU6ICdTSycsXG4gICAgICAgIHR5cGU6IGR5bmFtb2RiLkF0dHJpYnV0ZVR5cGUuU1RSSU5HLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBpZiAoYXV0b0RlbGV0ZUV2ZXJ5dGhpbmcpIHtcbiAgICAgIHRhYmxlLmFwcGx5UmVtb3ZhbFBvbGljeShjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZKTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIFJvdXRlciBMYW1iZGEgRnVuY3Rpb25cbiAgICAvL1xuXG4gICAgLy8gQ3JlYXRlIFJvdXRlciBMYW1iZGEgRnVuY3Rpb25cbiAgICBsZXQgcm91dGVyRnVuYzogbGFtYmRhLkZ1bmN0aW9uO1xuICAgIGNvbnN0IHJvdXRlckZ1bmNQcm9wczogT21pdDxsYW1iZGEuRnVuY3Rpb25Qcm9wcywgJ2hhbmRsZXInIHwgJ2NvZGUnPiA9IHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogYCR7YXNzZXROYW1lUm9vdH0tcm91dGVyJHthc3NldE5hbWVTdWZmaXh9YCxcbiAgICAgIG1lbW9yeVNpemU6IDE3NjksXG4gICAgICBsb2dSZXRlbnRpb246IGxvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfTU9OVEgsXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMTRfWCxcbiAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDE1KSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIE5PREVfRU5WOiBhcHBFbnYsXG4gICAgICAgIERBVEFCQVNFX1RBQkxFX05BTUU6IHRhYmxlLnRhYmxlTmFtZSxcbiAgICAgICAgQVdTX05PREVKU19DT05ORUNUSU9OX1JFVVNFX0VOQUJMRUQ6ICcxJyxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBpZiAoZXhpc3RzU3luYyhgJHtwYXRoLnJlc29sdmUoX19kaXJuYW1lKX0vLi4vZGlzdC9taWNyb2FwcHMtcm91dGVyL2luZGV4LmpzYCkpIHtcbiAgICAgIC8vIFRoaXMgaXMgZm9yIGxvY2FsIGRldlxuICAgICAgcm91dGVyRnVuYyA9IG5ldyBsYW1iZGEuRnVuY3Rpb24odGhpcywgJ21pY3JvYXBwcy1yb3V0ZXItZnVuYycsIHtcbiAgICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke3BhdGgucmVzb2x2ZShfX2Rpcm5hbWUpfS8uLi9kaXN0L21pY3JvYXBwcy1yb3V0ZXIvYCksXG4gICAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgICAgLi4ucm91dGVyRnVuY1Byb3BzLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChleGlzdHNTeW5jKGAke3BhdGgucmVzb2x2ZShfX2Rpcm5hbWUpfS9taWNyb2FwcHMtcm91dGVyL2luZGV4LmpzYCkpIHtcbiAgICAgIC8vIFRoaXMgaXMgZm9yIGJ1aWx0IGFwcHMgcGFja2FnZWQgd2l0aCB0aGUgQ0RLIGNvbnN0cnVjdFxuICAgICAgcm91dGVyRnVuYyA9IG5ldyBsYW1iZGEuRnVuY3Rpb24odGhpcywgJ21pY3JvYXBwcy1yb3V0ZXItZnVuYycsIHtcbiAgICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke3BhdGgucmVzb2x2ZShfX2Rpcm5hbWUpfS9taWNyb2FwcHMtcm91dGVyL2ApLFxuICAgICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICAgIC4uLnJvdXRlckZ1bmNQcm9wcyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDcmVhdGUgUm91dGVyIExhbWJkYSBMYXllclxuICAgICAgY29uc3Qgcm91dGVyRGF0YUZpbGVzID0gbmV3IGxhbWJkYS5MYXllclZlcnNpb24odGhpcywgJ21pY3JvYXBwcy1yb3V0ZXItbGF5ZXInLCB7XG4gICAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldCgnLi9wYWNrYWdlcy9taWNyb2FwcHMtcm91dGVyL3RlbXBsYXRlcy8nKSxcbiAgICAgIH0pO1xuICAgICAgaWYgKGF1dG9EZWxldGVFdmVyeXRoaW5nKSB7XG4gICAgICAgIHJvdXRlckRhdGFGaWxlcy5hcHBseVJlbW92YWxQb2xpY3koY2RrLlJlbW92YWxQb2xpY3kuREVTVFJPWSk7XG4gICAgICB9XG5cbiAgICAgIHJvdXRlckZ1bmMgPSBuZXcgbGFtYmRhTm9kZWpzLk5vZGVqc0Z1bmN0aW9uKHRoaXMsICdtaWNyb2FwcHMtcm91dGVyLWZ1bmMnLCB7XG4gICAgICAgIGVudHJ5OiAnLi9wYWNrYWdlcy9taWNyb2FwcHMtcm91dGVyL3NyYy9pbmRleC50cycsXG4gICAgICAgIGhhbmRsZXI6ICdoYW5kbGVyJyxcbiAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICBtaW5pZnk6IHRydWUsXG4gICAgICAgICAgc291cmNlTWFwOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBsYXllcnM6IFtyb3V0ZXJEYXRhRmlsZXNdLFxuICAgICAgICAuLi5yb3V0ZXJGdW5jUHJvcHMsXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGF1dG9EZWxldGVFdmVyeXRoaW5nKSB7XG4gICAgICByb3V0ZXJGdW5jLmFwcGx5UmVtb3ZhbFBvbGljeShjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZKTtcbiAgICB9XG4gICAgY29uc3QgcG9saWN5UmVhZFRhcmdldCA9IG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnczM6R2V0T2JqZWN0J10sXG4gICAgICByZXNvdXJjZXM6IFtgJHtidWNrZXRBcHBzLmJ1Y2tldEFybn0vKmBdLFxuICAgIH0pO1xuICAgIGZvciAoY29uc3Qgcm91dGVyIG9mIFtyb3V0ZXJGdW5jXSkge1xuICAgICAgcm91dGVyLmFkZFRvUm9sZVBvbGljeShwb2xpY3lSZWFkVGFyZ2V0KTtcbiAgICAgIC8vIEdpdmUgdGhlIFJvdXRlciBhY2Nlc3MgdG8gRHluYW1vREIgdGFibGVcbiAgICAgIHRhYmxlLmdyYW50UmVhZERhdGEocm91dGVyKTtcbiAgICAgIHRhYmxlLmdyYW50KHJvdXRlciwgJ2R5bmFtb2RiOkRlc2NyaWJlVGFibGUnKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBBZGQgTGFzdCBSb3V0ZSBmb3IgLyove3Byb3h5K31cbiAgICAvLyBOb3RlOiBUaGF0IG1pZ2h0IG5vdCB3b3JrLCBtYXkgbmVlZCBhIEJlaGF2aW9yIGluIENsb3VkRnJvbnRcbiAgICAvLyAgICAgICBvciBhIExhbWJkYSBAIEVkZ2UgZnVuY3Rpb24gdGhhdCBkZXRlY3RzIHRoZXNlIGFuZCByb3V0ZXNcbiAgICAvLyAgICAgICB0byBvcmlnaW4gTGFtYmRhIFJvdXRlciBmdW5jdGlvbi5cblxuICAgIC8vXG4gICAgLy8gQVBJR2F0ZXdheSBkb21haW4gbmFtZXMgZm9yIENsb3VkRnJvbnQgYW5kIG9yaWdpblxuICAgIC8vXG5cbiAgICAvLyBDcmVhdGUgQ3VzdG9tIERvbWFpbnMgZm9yIEFQSSBHYXRld2F5XG4gICAgY29uc3QgZG5BcHBzRWRnZSA9IG5ldyBhcGlnd3kuRG9tYWluTmFtZSh0aGlzLCAnbWljcm9hcHBzLWFwcHMtZWRnZS1kbicsIHtcbiAgICAgIGRvbWFpbk5hbWU6IGRvbWFpbk5hbWVFZGdlLFxuICAgICAgY2VydGlmaWNhdGU6IGNlcnRPcmlnaW4sXG4gICAgfSk7XG4gICAgaWYgKGF1dG9EZWxldGVFdmVyeXRoaW5nKSB7XG4gICAgICBkbkFwcHNFZGdlLmFwcGx5UmVtb3ZhbFBvbGljeShjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZKTtcbiAgICB9XG4gICAgdGhpcy5fZG5BcHBzT3JpZ2luID0gbmV3IGFwaWd3eS5Eb21haW5OYW1lKHRoaXMsICdtaWNyb2FwcHMtYXBwcy1vcmlnaW4tZG4nLCB7XG4gICAgICBkb21haW5OYW1lOiBkb21haW5OYW1lT3JpZ2luLFxuICAgICAgY2VydGlmaWNhdGU6IGNlcnRPcmlnaW4sXG4gICAgfSk7XG4gICAgaWYgKGF1dG9EZWxldGVFdmVyeXRoaW5nKSB7XG4gICAgICB0aGlzLl9kbkFwcHNPcmlnaW4uYXBwbHlSZW1vdmFsUG9saWN5KGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1kpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhbiBpbnRlZ3JhdGlvbiBmb3IgdGhlIFJvdXRlclxuICAgIC8vIERvIHRoaXMgaGVyZSBzaW5jZSBpdCdzIHRoZSBkZWZhdWx0IHJvdXRlXG4gICAgY29uc3QgaW50Um91dGVyID0gbmV3IGFwaWd3eWludC5MYW1iZGFQcm94eUludGVncmF0aW9uKHtcbiAgICAgIGhhbmRsZXI6IHJvdXRlckZ1bmMsXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgQVBJR2F0ZXdheSBmb3IgdGhlIEVkZ2UgbmFtZVxuICAgIGNvbnN0IGh0dHBBcGlEb21haW5NYXBwaW5nOiBhcGlnd3kuRG9tYWluTWFwcGluZ09wdGlvbnMgPSB7XG4gICAgICBkb21haW5OYW1lOiBkbkFwcHNFZGdlLFxuICAgIH07XG4gICAgY29uc3QgaHR0cEFwaSA9IG5ldyBhcGlnd3kuSHR0cEFwaSh0aGlzLCAnbWljcm9hcHBzLWFwaScsIHtcbiAgICAgIGRlZmF1bHREb21haW5NYXBwaW5nOiBodHRwQXBpRG9tYWluTWFwcGluZyxcbiAgICAgIGRlZmF1bHRJbnRlZ3JhdGlvbjogaW50Um91dGVyLFxuICAgICAgYXBpTmFtZTogYXBpZ2F0ZXdheU5hbWUsXG4gICAgfSk7XG4gICAgaWYgKGF1dG9EZWxldGVFdmVyeXRoaW5nKSB7XG4gICAgICBodHRwQXBpLmFwcGx5UmVtb3ZhbFBvbGljeShjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgZGVmYXVsdCByb3V0ZSBvbiBBUEkgR2F0ZXdheSB0byBwb2ludCB0byB0aGUgcm91dGVyXG4gICAgLy8gaHR0cEFwaS5hZGRSb3V0ZXMoe1xuICAgIC8vICAgcGF0aDogJyRkZWZhdWx0JyxcbiAgICAvLyAgIGludGVncmF0aW9uOiBpbnRSb3V0ZXIsXG4gICAgLy8gfSk7XG5cbiAgICAvL1xuICAgIC8vIExldCBBUEkgR2F0ZXdheSBhY2NlcHQgcmVxdWVzdHMgdXNpbmcgZG9tYWluTmFtZU9yaWdpblxuICAgIC8vIFRoYXQgaXMgdGhlIG9yaWdpbiBVUkkgdGhhdCBDbG91ZEZyb250IHVzZXMgZm9yIHRoaXMgZ2F0ZXdheS5cbiAgICAvLyBUaGUgZ2F0ZXdheSB3aWxsIHJlZnVzZSB0aGUgdHJhZmZpYyBpZiBpdCBkb2Vzbid0IGhhdmUgdGhlXG4gICAgLy8gZG9tYWluIG5hbWUgcmVnaXN0ZXJlZC5cbiAgICAvL1xuICAgIGNvbnN0IG1hcHBpbmdBcHBzQXBpcyA9IG5ldyBhcGlnd3kuQXBpTWFwcGluZyh0aGlzLCAnbWljcm9hcHBzLWFwaS1tYXBwaW5nLW9yaWdpbicsIHtcbiAgICAgIGFwaTogaHR0cEFwaSxcbiAgICAgIGRvbWFpbk5hbWU6IHRoaXMuZG5BcHBzT3JpZ2luLFxuICAgIH0pO1xuICAgIG1hcHBpbmdBcHBzQXBpcy5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5kbkFwcHNPcmlnaW4pO1xuICAgIGlmIChhdXRvRGVsZXRlRXZlcnl0aGluZykge1xuICAgICAgbWFwcGluZ0FwcHNBcGlzLmFwcGx5UmVtb3ZhbFBvbGljeShjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZKTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIERlcGxveWVyIExhbWJkYSBGdW5jdGlvblxuICAgIC8vXG5cbiAgICAvLyBDcmVhdGUgRGVwbG95ZXIgTGFtYmRhIEZ1bmN0aW9uXG4gICAgY29uc3QgaWFtUm9sZVVwbG9hZE5hbWUgPSBgJHthc3NldE5hbWVSb290fS1kZXBsb3llci11cGxvYWQke2Fzc2V0TmFtZVN1ZmZpeH1gO1xuICAgIGNvbnN0IGRlcGxveWVyRnVuY05hbWUgPSBgJHthc3NldE5hbWVSb290fS1kZXBsb3llciR7YXNzZXROYW1lU3VmZml4fWA7XG4gICAgbGV0IGRlcGxveWVyRnVuYzogbGFtYmRhLkZ1bmN0aW9uO1xuICAgIGNvbnN0IGRlcGxveWVyRnVuY1Byb3BzOiBPbWl0PGxhbWJkYS5GdW5jdGlvblByb3BzLCAnaGFuZGxlcicgfCAnY29kZSc+ID0ge1xuICAgICAgZnVuY3Rpb25OYW1lOiBkZXBsb3llckZ1bmNOYW1lLFxuICAgICAgbWVtb3J5U2l6ZTogMTc2OSxcbiAgICAgIGxvZ1JldGVudGlvbjogbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9NT05USCxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNF9YLFxuICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLnNlY29uZHMoMTUpLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgTk9ERV9FTlY6IGFwcEVudixcbiAgICAgICAgQVBJR1dZX0lEOiBodHRwQXBpLmh0dHBBcGlJZCxcbiAgICAgICAgREFUQUJBU0VfVEFCTEVfTkFNRTogdGFibGUudGFibGVOYW1lLFxuICAgICAgICBGSUxFU1RPUkVfU1RBR0lOR19CVUNLRVQ6IGJ1Y2tldEFwcHNTdGFnaW5nTmFtZSxcbiAgICAgICAgRklMRVNUT1JFX0RFU1RfQlVDS0VUOiBidWNrZXRBcHBzTmFtZSxcbiAgICAgICAgVVBMT0FEX1JPTEVfTkFNRTogaWFtUm9sZVVwbG9hZE5hbWUsXG4gICAgICAgIEFXU19OT0RFSlNfQ09OTkVDVElPTl9SRVVTRV9FTkFCTEVEOiAnMScsXG4gICAgICB9LFxuICAgIH07XG4gICAgaWYgKGV4aXN0c1N5bmMoYCR7cGF0aC5yZXNvbHZlKF9fZGlybmFtZSl9Ly4uL2Rpc3QvbWljcm9hcHBzLWRlcGxveWVyL2luZGV4LmpzYCkpIHtcbiAgICAgIC8vIFRoaXMgaXMgZm9yIGxvY2FsIGRldlxuICAgICAgZGVwbG95ZXJGdW5jID0gbmV3IGxhbWJkYS5GdW5jdGlvbih0aGlzLCAnbWljcm9hcHBzLWRlcGxveWVyLWZ1bmMnLCB7XG4gICAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChgJHtwYXRoLnJlc29sdmUoX19kaXJuYW1lKX0vLi4vZGlzdC9taWNyb2FwcHMtZGVwbG95ZXIvYCksXG4gICAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgICAgLi4uZGVwbG95ZXJGdW5jUHJvcHMsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGV4aXN0c1N5bmMoYCR7cGF0aC5yZXNvbHZlKF9fZGlybmFtZSl9L21pY3JvYXBwcy1kZXBsb3llci9pbmRleC5qc2ApKSB7XG4gICAgICAvLyBUaGlzIGlzIGZvciBidWlsdCBhcHBzIHBhY2thZ2VkIHdpdGggdGhlIENESyBjb25zdHJ1Y3RcbiAgICAgIGRlcGxveWVyRnVuYyA9IG5ldyBsYW1iZGEuRnVuY3Rpb24odGhpcywgJ21pY3JvYXBwcy1kZXBsb3llci1mdW5jJywge1xuICAgICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoYCR7cGF0aC5yZXNvbHZlKF9fZGlybmFtZSl9L21pY3JvYXBwcy1kZXBsb3llci9gKSxcbiAgICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgICAuLi5kZXBsb3llckZ1bmNQcm9wcyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZXBsb3llckZ1bmMgPSBuZXcgbGFtYmRhTm9kZWpzLk5vZGVqc0Z1bmN0aW9uKHRoaXMsICdtaWNyb2FwcHMtZGVwbG95ZXItZnVuYycsIHtcbiAgICAgICAgZW50cnk6ICcuL3BhY2thZ2VzL21pY3JvYXBwcy1kZXBsb3llci9zcmMvaW5kZXgudHMnLFxuICAgICAgICBoYW5kbGVyOiAnaGFuZGxlcicsXG4gICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgbWluaWZ5OiB0cnVlLFxuICAgICAgICAgIHNvdXJjZU1hcDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgLi4uZGVwbG95ZXJGdW5jUHJvcHMsXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGF1dG9EZWxldGVFdmVyeXRoaW5nKSB7XG4gICAgICBkZXBsb3llckZ1bmMuYXBwbHlSZW1vdmFsUG9saWN5KGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1kpO1xuICAgIH1cbiAgICAvLyBHaXZlIHRoZSBEZXBsb3llciBhY2Nlc3MgdG8gRHluYW1vREIgdGFibGVcbiAgICB0YWJsZS5ncmFudFJlYWRXcml0ZURhdGEoZGVwbG95ZXJGdW5jKTtcbiAgICB0YWJsZS5ncmFudChkZXBsb3llckZ1bmMsICdkeW5hbW9kYjpEZXNjcmliZVRhYmxlJyk7XG5cbiAgICAvL1xuICAgIC8vIERlbG95ZXIgdXBsb2FkIHRlbXAgcm9sZVxuICAgIC8vIERlcGxveWVyIGFzc3VtZXMgdGhpcyByb2xlIHdpdGggYSBsaW1pdGVkIHBvbGljeSB0byBnZW5lcmF0ZVxuICAgIC8vIGFuIFNUUyB0ZW1wIHRva2VuIHRvIHJldHVybiB0byBtaWNyb2FwcHMtcHVibGlzaCBmb3IgdGhlIHVwbG9hZC5cbiAgICAvL1xuICAgIGNvbnN0IGlhbVJvbGVVcGxvYWQgPSBuZXcgaWFtLlJvbGUodGhpcywgJ21pY3JvYXBwcy1kZXBsb3llci11cGxvYWQtcm9sZScsIHtcbiAgICAgIHJvbGVOYW1lOiBpYW1Sb2xlVXBsb2FkTmFtZSxcbiAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgIHVwbG9hZFBvbGljeTogbmV3IGlhbS5Qb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbJ3MzOkxpc3RCdWNrZXQnXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbYnVja2V0QXBwc1N0YWdpbmcuYnVja2V0QXJuXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbJ3MzOlB1dE9iamVjdCcsICdzMzpHZXRPYmplY3QnLCAnczM6QWJvcnRNdWx0aXBhcnRVcGxvYWQnXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbYCR7YnVja2V0QXBwc1N0YWdpbmcuYnVja2V0QXJufS8qYF0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgICBhc3N1bWVkQnk6IGRlcGxveWVyRnVuYy5ncmFudFByaW5jaXBhbCxcbiAgICB9KTtcblxuICAgIC8vXG4gICAgLy8gVXBkYXRlIFMzIHBlcm1pc3Npb25zXG4gICAgLy9cbiAgICAvLyBDcmVhdGUgUHJpbmNpcGFsQVJOIExpc3RcbiAgICBjb25zdCBzM1BvbGljeUJ5cGFzc0FyblByaW5jaXBhbHM6IGlhbS5Bcm5QcmluY2lwYWxbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgYXJuUHJpbmNpcGFsIG9mIHMzUG9saWN5QnlwYXNzUHJpbmNpcGFsQVJOcykge1xuICAgICAgczNQb2xpY3lCeXBhc3NBcm5QcmluY2lwYWxzLnB1c2gobmV3IGlhbS5Bcm5QcmluY2lwYWwoYXJuUHJpbmNpcGFsKSk7XG4gICAgfVxuICAgIC8vIENyZWF0ZSBBUk9BIExpc3QgdGhhdCBtYXRjaGVzIGFzc3VtZWQgc2Vzc2lvbnNcbiAgICBjb25zdCBzM1BvbGljeUJ5cGFzc0FST0FNYXRjaGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgYXJvYSBvZiBzM1BvbGljeUJ5cGFzc0FST0FzKSB7XG4gICAgICBzM1BvbGljeUJ5cGFzc0FST0FNYXRjaGVzLnB1c2goYCR7YXJvYX06KmApO1xuICAgIH1cbiAgICAvLyBEZW55IGFwcHMgZnJvbSByZWFkaW5nOlxuICAgIC8vIC0gSWYgdGhleSBhcmUgbWlzc2luZyB0aGUgbWljcm9hcHAtbmFtZSB0YWdcbiAgICAvLyAtIEFueXRoaW5nIG91dHNpZGUgb2YgdGhlIGZvbGRlciB0aGF0IG1hdGNoZXMgdGhlaXIgbWljcm9hcHAtbmFtZSB0YWdcbiAgICBjb25zdCBwb2xpY3lEZW55UHJlZml4T3V0c2lkZVRhZyA9IG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ2RlbnktcHJlZml4LW91dHNpZGUtbWljcm9hcHAtbmFtZS10YWcnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkRFTlksXG4gICAgICBhY3Rpb25zOiBbJ3MzOionXSxcbiAgICAgIG5vdFByaW5jaXBhbHM6IFtcbiAgICAgICAgbmV3IGlhbS5DYW5vbmljYWxVc2VyUHJpbmNpcGFsKFxuICAgICAgICAgIGJ1Y2tldEFwcHNPQUkuY2xvdWRGcm9udE9yaWdpbkFjY2Vzc0lkZW50aXR5UzNDYW5vbmljYWxVc2VySWQsXG4gICAgICAgICksXG4gICAgICAgIG5ldyBpYW0uQWNjb3VudFJvb3RQcmluY2lwYWwoKSxcbiAgICAgICAgLi4uczNQb2xpY3lCeXBhc3NBcm5QcmluY2lwYWxzLFxuICAgICAgICBkZXBsb3llckZ1bmMuZ3JhbnRQcmluY2lwYWwsXG4gICAgICBdLFxuICAgICAgbm90UmVzb3VyY2VzOiBbXG4gICAgICAgIGAke2J1Y2tldEFwcHMuYnVja2V0QXJufS9cXCR7YXdzOlByaW5jaXBhbFRhZy9taWNyb2FwcC1uYW1lfS8qYCxcbiAgICAgICAgYnVja2V0QXBwcy5idWNrZXRBcm4sXG4gICAgICBdLFxuICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICBOdWxsOiB7ICdhd3M6UHJpbmNpcGFsVGFnL21pY3JvYXBwLW5hbWUnOiAnZmFsc2UnIH0sXG4gICAgICAgIC8vIFN0cmluZ05vdExpa2U6IHsnYXdzOid9XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGlmIChhdXRvRGVsZXRlRXZlcnl0aGluZykge1xuICAgICAgcG9saWN5RGVueVByZWZpeE91dHNpZGVUYWcuYWRkQ29uZGl0aW9uKFxuICAgICAgICAvLyBBbGxvd3MgdGhlIERlbGV0YWJsZUJ1Y2tldCBMYW1iZGEgdG8gZGVsZXRlIGl0ZW1zIGluIHRoZSBidWNrZXRzXG4gICAgICAgICdTdHJpbmdOb3RMaWtlJyxcbiAgICAgICAgeyAnYXdzOlByaW5jaXBhbFRhZy9hcHBsaWNhdGlvbic6IGAke2Fzc2V0TmFtZVJvb3R9LWNvcmUqYCB9LFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgcG9saWN5RGVueU1pc3NpbmdUYWcgPSBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdkZW55LW1pc3NpbmctbWljcm9hcHAtbmFtZS10YWcnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkRFTlksXG4gICAgICBhY3Rpb25zOiBbJ3MzOionXSxcbiAgICAgIG5vdFByaW5jaXBhbHM6IFtcbiAgICAgICAgbmV3IGlhbS5DYW5vbmljYWxVc2VyUHJpbmNpcGFsKFxuICAgICAgICAgIGJ1Y2tldEFwcHNPQUkuY2xvdWRGcm9udE9yaWdpbkFjY2Vzc0lkZW50aXR5UzNDYW5vbmljYWxVc2VySWQsXG4gICAgICAgICksXG4gICAgICAgIG5ldyBpYW0uQWNjb3VudFJvb3RQcmluY2lwYWwoKSxcbiAgICAgICAgLy8gRXhjbHVkZSB0aGUgRGVwbG95ZXIgRnVuY3Rpb24gZGlyZWN0bHlcbiAgICAgICAgZGVwbG95ZXJGdW5jLmdyYW50UHJpbmNpcGFsLFxuICAgICAgICAvLyAyMDIxLTEyLTA0IC0gTm90IDEwMCUgc3VyZSB0aGF0IHRoaXMgaXMgYWN0dWFsbHkgbmVlZGVkLi4uXG4gICAgICAgIC8vIExldCdzIHRlc3QgdGhpcyBhbmQgcmVtb3ZlIGlmIGFjdHVhbGx5IG5vdCBuZWNlc3NhcnlcbiAgICAgICAgbmV3IGlhbS5Bcm5QcmluY2lwYWwoXG4gICAgICAgICAgYGFybjphd3M6c3RzOjoke2FjY291bnR9OmFzc3VtZWQtcm9sZS8ke2RlcGxveWVyRnVuYy5yb2xlPy5yb2xlTmFtZX0vJHtkZXBsb3llckZ1bmMuZnVuY3Rpb25OYW1lfWAsXG4gICAgICAgICksXG4gICAgICAgIC4uLnMzUG9saWN5QnlwYXNzQXJuUHJpbmNpcGFscyxcbiAgICAgIF0sXG4gICAgICByZXNvdXJjZXM6IFtgJHtidWNrZXRBcHBzLmJ1Y2tldEFybn0vKmAsIGJ1Y2tldEFwcHMuYnVja2V0QXJuXSxcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgTnVsbDogeyAnYXdzOlByaW5jaXBhbFRhZy9taWNyb2FwcC1uYW1lJzogJ3RydWUnIH0sXG4gICAgICAgIC8vIE5vdGU6IFRoaXMgQVJPQSBtdXN0IGJlIHNwZWNpZmllZCB0byBwcmV2ZW50IHRoaXMgcG9saWN5IGZyb20gbG9ja2luZ1xuICAgICAgICAvLyBvdXQgbm9uLXJvb3Qgc2Vzc2lvbnMgdGhhdCBoYXZlIGFzc3VtZWQgdGhlIGFkbWluIHJvbGUuXG4gICAgICAgIC8vIFRoZSBub3RQcmluY2lwYWxzIHdpbGwgb25seSBtYXRjaCB0aGUgcm9sZSBuYW1lIGV4YWN0bHkgYW5kIHdpbGwgbm90IG1hdGNoXG4gICAgICAgIC8vIGFueSBzZXNzaW9uIHRoYXQgaGFzIGFzc3VtZWQgdGhlIHJvbGUgc2luY2Ugbm90UHJpbmNpcGFscyBkb2VzIG5vdCBhbGxvd1xuICAgICAgICAvLyB3aWxkY2FyZCBtYXRjaGVzIGFuZCBkb2VzIG5vdCBkbyB0aGVtIGltcGxpY2l0bHkgZWl0aGVyLlxuICAgICAgICAvLyBUaGUgQVJPQSBtdXN0IGJlIHVzZWQgYmVjYXVzZSB0aGVyZSBhcmUgb25seSAzIFByaW5jaXBhbCB2YXJpYWJsZXM6XG4gICAgICAgIC8vICBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX3ZhcmlhYmxlcy5odG1sI3ByaW5jaXBhbHRhYmxlXG4gICAgICAgIC8vICBhd3M6dXNlcm5hbWUsIGF3czp1c2VyaWQsIGF3czpQcmluY2lwYWxUYWdcbiAgICAgICAgLy8gRm9yIGFuIGFzc3VtZWQgcm9sZSwgYXdzOnVzZXJuYW1lIGlzIGJsYW5rLCBhd3M6dXNlcmlkIGlzOlxuICAgICAgICAvLyAgW3VuaXF1ZSBpZCBBS0EgQVJPQSBmb3IgUm9sZV06W3Nlc3Npb24gbmFtZV1cbiAgICAgICAgLy8gVGFibGUgb2YgdW5pcXVlIElEIHByZWZpeGVzIHN1Y2ggYXMgQVJPQTpcbiAgICAgICAgLy8gIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfaWRlbnRpZmllcnMuaHRtbCNpZGVudGlmaWVycy1wcmVmaXhlc1xuICAgICAgICAvLyBUaGUgbmFtZSBvZiB0aGUgcm9sZSBpcyBzaW1wbHkgbm90IGF2YWlsYWJsZSBhbmQgaWYgaXQgd2FzXG4gICAgICAgIC8vIHdlJ2QgbmVlZCB0byB3cml0ZSBhIGNvbXBsaWNhdGVkIGNvbXBhcmlzb24gdG8gbWFrZSBzdXJlXG4gICAgICAgIC8vIHRoYXQgd2UgZGlkbid0IGV4Y2x1ZGUgdGhlIERlbnkgdGFnIGZyb20gcm9sZXMgaW4gb3RoZXIgYWNjb3VudHMuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRvIGdldCB0aGUgQVJPQSB3aXRoIHRoZSBBV1MgQ0xJOlxuICAgICAgICAvLyAgIGF3cyBpYW0gZ2V0LXJvbGUgLS1yb2xlLW5hbWUgUk9MRS1OQU1FXG4gICAgICAgIC8vICAgYXdzIGlhbSBnZXQtdXNlciAt4oCTdXNlci1uYW1lIFVTRVItTkFNRVxuICAgICAgICBTdHJpbmdOb3RMaWtlOiB7ICdhd3M6dXNlcmlkJzogW2FjY291bnQsIC4uLnMzUG9saWN5QnlwYXNzQVJPQU1hdGNoZXNdIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGlmIChhdXRvRGVsZXRlRXZlcnl0aGluZykge1xuICAgICAgcG9saWN5RGVueU1pc3NpbmdUYWcuYWRkQ29uZGl0aW9uKFxuICAgICAgICAvLyBBbGxvd3MgdGhlIERlbGV0YWJsZUJ1Y2tldCBMYW1iZGEgdG8gZGVsZXRlIGl0ZW1zIGluIHRoZSBidWNrZXRzXG4gICAgICAgICdTdHJpbmdOb3RMaWtlJyxcbiAgICAgICAgeyAnYXdzOlByaW5jaXBhbFRhZy9hcHBsaWNhdGlvbic6IGAke2Fzc2V0TmFtZVJvb3R9LWNvcmUqYCB9LFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgcG9saWN5Q2xvdWRGcm9udEFjY2VzcyA9IG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ2Nsb3VkZnJvbnQtb2FpLWFjY2VzcycsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbJ3MzOkdldE9iamVjdCddLFxuICAgICAgcHJpbmNpcGFsczogW1xuICAgICAgICBuZXcgaWFtLkNhbm9uaWNhbFVzZXJQcmluY2lwYWwoXG4gICAgICAgICAgYnVja2V0QXBwc09BSS5jbG91ZEZyb250T3JpZ2luQWNjZXNzSWRlbnRpdHlTM0Nhbm9uaWNhbFVzZXJJZCxcbiAgICAgICAgKSxcbiAgICAgIF0sXG4gICAgICByZXNvdXJjZXM6IFtgJHtidWNrZXRBcHBzLmJ1Y2tldEFybn0vKmBdLFxuICAgIH0pO1xuXG4gICAgaWYgKGJ1Y2tldEFwcHMucG9saWN5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGRvY3VtZW50ID0gbmV3IHMzLkJ1Y2tldFBvbGljeSh0aGlzLCAnQ0ZQb2xpY3knLCB7XG4gICAgICAgIGJ1Y2tldDogYnVja2V0QXBwcyxcbiAgICAgIH0pLmRvY3VtZW50O1xuICAgICAgZG9jdW1lbnQuYWRkU3RhdGVtZW50cyhwb2xpY3lDbG91ZEZyb250QWNjZXNzKTtcblxuICAgICAgaWYgKHMzU3RyaWN0QnVja2V0UG9saWN5KSB7XG4gICAgICAgIGRvY3VtZW50LmFkZFN0YXRlbWVudHMocG9saWN5RGVueVByZWZpeE91dHNpZGVUYWcpO1xuICAgICAgICBkb2N1bWVudC5hZGRTdGF0ZW1lbnRzKHBvbGljeURlbnlNaXNzaW5nVGFnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYnVja2V0QXBwcy5wb2xpY3kuZG9jdW1lbnQuYWRkU3RhdGVtZW50cyhwb2xpY3lDbG91ZEZyb250QWNjZXNzKTtcblxuICAgICAgaWYgKHMzU3RyaWN0QnVja2V0UG9saWN5KSB7XG4gICAgICAgIGJ1Y2tldEFwcHMucG9saWN5LmRvY3VtZW50LmFkZFN0YXRlbWVudHMocG9saWN5RGVueVByZWZpeE91dHNpZGVUYWcpO1xuICAgICAgICBidWNrZXRBcHBzLnBvbGljeS5kb2N1bWVudC5hZGRTdGF0ZW1lbnRzKHBvbGljeURlbnlNaXNzaW5nVGFnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBbGxvdyB0aGUgTGFtYmRhIHRvIHJlYWQgZnJvbSB0aGUgc3RhZ2luZyBidWNrZXRcbiAgICBjb25zdCBwb2xpY3lSZWFkTGlzdFN0YWdpbmcgPSBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAvLyBGSVhNRTogQWxsb3cgRGVwbG95ZXIgdG8gZGVsZXRlIGZyb20gU3RhZ2luZyBidWNrZXRcbiAgICAgIGFjdGlvbnM6IFsnczM6RGVsZXRlT2JqZWN0JywgJ3MzOkdldE9iamVjdCcsICdzMzpMaXN0QnVja2V0J10sXG4gICAgICByZXNvdXJjZXM6IFtgJHtidWNrZXRBcHBzU3RhZ2luZy5idWNrZXRBcm59LypgLCBidWNrZXRBcHBzU3RhZ2luZy5idWNrZXRBcm5dLFxuICAgIH0pO1xuICAgIGRlcGxveWVyRnVuYy5hZGRUb1JvbGVQb2xpY3kocG9saWN5UmVhZExpc3RTdGFnaW5nKTtcblxuICAgIC8vIEFsbG93IHRoZSBMYW1iZGEgdG8gd3JpdGUgdG8gdGhlIHRhcmdldCBidWNrZXRcbiAgICBjb25zdCBwb2xpY3lSZWFkV3JpdGVMaXN0VGFyZ2V0ID0gbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydzMzpHZXRPYmplY3QnLCAnczM6UHV0T2JqZWN0JywgJ3MzOkxpc3RCdWNrZXQnXSxcbiAgICAgIHJlc291cmNlczogW2Ake2J1Y2tldEFwcHMuYnVja2V0QXJufS8qYCwgYnVja2V0QXBwcy5idWNrZXRBcm5dLFxuICAgIH0pO1xuICAgIGRlcGxveWVyRnVuYy5hZGRUb1JvbGVQb2xpY3kocG9saWN5UmVhZFdyaXRlTGlzdFRhcmdldCk7XG5cbiAgICAvLyBBbGxvdyB0aGUgZGVwbG95ZXIgdG8gZ2V0IGEgdGVtcG9yYXJ5IFNUUyB0b2tlblxuICAgIGNvbnN0IHBvbGljeUdldFNUU1Rva2VuID0gbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydzdHM6R2V0RmVkZXJhdGlvblRva2VuJ10sXG4gICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgIH0pO1xuICAgIGRlcGxveWVyRnVuYy5hZGRUb1JvbGVQb2xpY3kocG9saWN5R2V0U1RTVG9rZW4pO1xuXG4gICAgLy8gQWxsb3cgdGhlIGRlcGxveWVyIHRvIGFzc3VtZSB0aGUgdXBsb2FkIHJvbGVcbiAgICBjb25zdCBwb2xpY3lBc3N1bWVVcGxvYWQgPSBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBbJ3N0czpBc3N1bWVSb2xlJ10sXG4gICAgICByZXNvdXJjZXM6IFtpYW1Sb2xlVXBsb2FkLnJvbGVBcm5dLFxuICAgIH0pO1xuICAgIGRlcGxveWVyRnVuYy5hZGRUb1JvbGVQb2xpY3kocG9saWN5QXNzdW1lVXBsb2FkKTtcblxuICAgIC8vXG4gICAgLy8gR2l2ZSBEZXBsb3llciBwZXJtaXNzaW9ucyB0byBjcmVhdGUgcm91dGVzIGFuZCBpbnRlZ3JhdGlvbnNcbiAgICAvLyBvbiB0aGUgQVBJIEdhdGV3YXkgQVBJLlxuICAgIC8vXG5cbiAgICAvLyBHcmFudCB0aGUgYWJpbGl0eSB0byBMaXN0IGFsbCBBUElzICh3ZSBoYXZlIHRvIGZpbmQgaXQpXG4gICAgY29uc3QgcG9saWN5QVBJTGlzdCA9IG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnYXBpZ2F0ZXdheTpHRVQnXSxcbiAgICAgIHJlc291cmNlczogW2Bhcm46YXdzOmFwaWdhdGV3YXk6JHtyZWdpb259OjovYXBpc2BdLFxuICAgIH0pO1xuICAgIGRlcGxveWVyRnVuYy5hZGRUb1JvbGVQb2xpY3kocG9saWN5QVBJTGlzdCk7XG4gICAgLy8gR3JhbnQgZnVsbCBjb250cm9sIG92ZXIgdGhlIEFQSSB3ZSBjcmVhdGVkXG4gICAgY29uc3QgcG9saWN5QVBJTWFuYWdlID0gbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogWydhcGlnYXRld2F5OionXSxcbiAgICAgIHJlc291cmNlczogW1xuICAgICAgICBgYXJuOmF3czphcGlnYXRld2F5OiR7cmVnaW9ufToke2FjY291bnR9OiR7aHR0cEFwaS5odHRwQXBpSWR9LypgLFxuICAgICAgICBgYXJuOmF3czphcGlnYXRld2F5OiR7cmVnaW9ufTo6L2FwaXMvJHtodHRwQXBpLmh0dHBBcGlJZH0vaW50ZWdyYXRpb25zYCxcbiAgICAgICAgYGFybjphd3M6YXBpZ2F0ZXdheToke3JlZ2lvbn06Oi9hcGlzLyR7aHR0cEFwaS5odHRwQXBpSWR9L3JvdXRlc2AsXG4gICAgICBdLFxuICAgIH0pO1xuICAgIGRlcGxveWVyRnVuYy5hZGRUb1JvbGVQb2xpY3kocG9saWN5QVBJTWFuYWdlKTtcbiAgICAvLyBHcmFudCBmdWxsIGNvbnRyb2wgb3ZlciBsYW1iZGFzIHRoYXQgaW5kaWNhdGUgdGhleSBhcmUgbWljcm9hcHBzXG4gICAgY29uc3QgcG9saWN5QVBJTWFuYWdlTGFtYmRhcyA9IG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFsnbGFtYmRhOionXSxcbiAgICAgIHJlc291cmNlczogW1xuICAgICAgICBgYXJuOmF3czpsYW1iZGE6JHtyZWdpb259OiR7YWNjb3VudH06ZnVuY3Rpb246KmAsXG4gICAgICAgIGBhcm46YXdzOmxhbWJkYToke3JlZ2lvbn06JHthY2NvdW50fTpmdW5jdGlvbjoqOipgLFxuICAgICAgXSxcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgU3RyaW5nRXF1YWxzSWZFeGlzdHM6IHsgJ2F3czpSZXNvdXJjZVRhZy9taWNyb2FwcC1tYW5hZ2VkJzogJ3RydWUnIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGRlcGxveWVyRnVuYy5hZGRUb1JvbGVQb2xpY3kocG9saWN5QVBJTWFuYWdlTGFtYmRhcyk7XG5cbiAgICAvL1xuICAgIC8vIENyZWF0ZSB0aGUgb3JpZ2luIG5hbWUgZm9yIEFQSSBHYXRld2F5XG4gICAgLy9cblxuICAgIGNvbnN0IHpvbmUgPSByNTMuSG9zdGVkWm9uZS5mcm9tSG9zdGVkWm9uZUF0dHJpYnV0ZXModGhpcywgJ21pY3JvYXBwcy16b25lJywge1xuICAgICAgem9uZU5hbWU6IHI1M1pvbmVOYW1lLFxuICAgICAgaG9zdGVkWm9uZUlkOiByNTNab25lSUQsXG4gICAgfSk7XG5cbiAgICBjb25zdCByckFwcHNPcmlnaW4gPSBuZXcgcjUzLkFSZWNvcmQodGhpcywgJ21pY3JvYXBwcy1vcmlnaW4tYXJlY29yZCcsIHtcbiAgICAgIHpvbmU6IHpvbmUsXG4gICAgICByZWNvcmROYW1lOiBkb21haW5OYW1lT3JpZ2luLFxuICAgICAgdGFyZ2V0OiByNTMuUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhcbiAgICAgICAgbmV3IHI1M3RhcmdldHMuQXBpR2F0ZXdheXYyRG9tYWluUHJvcGVydGllcyhcbiAgICAgICAgICB0aGlzLl9kbkFwcHNPcmlnaW4ucmVnaW9uYWxEb21haW5OYW1lLFxuICAgICAgICAgIHRoaXMuX2RuQXBwc09yaWdpbi5yZWdpb25hbEhvc3RlZFpvbmVJZCxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgfSk7XG4gICAgaWYgKGF1dG9EZWxldGVFdmVyeXRoaW5nKSB7XG4gICAgICByckFwcHNPcmlnaW4uYXBwbHlSZW1vdmFsUG9saWN5KGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1kpO1xuICAgIH1cbiAgfVxufVxuIl19
|