@rio-cloud/cdk-v2-constructs 8.6.1 → 8.6.2
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 +7 -7
- package/lib/sbom-catalog/catalog-project.d.ts +3 -5
- package/lib/sbom-catalog/catalog-project.js +5 -12
- package/lib/sbom-catalog/lambda/handler.cjs +301 -157
- package/lib/sbom-catalog/lambda/types.d.ts +1 -1
- package/lib/sbom-catalog/lambda/types.js +1 -1
- package/package.json +1 -1
- package/version.json +1 -1
package/.jsii
CHANGED
|
@@ -18201,7 +18201,7 @@
|
|
|
18201
18201
|
"assembly": "@rio-cloud/cdk-v2-constructs",
|
|
18202
18202
|
"base": "constructs.Construct",
|
|
18203
18203
|
"docs": {
|
|
18204
|
-
"remarks": "Use this construct when one stack produces between one and three related projects that should share a catalog\ncollection. Shared tags are inherited by every child, while child tags with the same key override them. The RIO\nLanding Zone `team_identifier` tag is always included.\n\nThe files are uploaded after the stack reaches `CREATE_COMPLETE` or `UPDATE_COMPLETE`.
|
|
18204
|
+
"remarks": "Use this construct when one stack produces between one and three related projects that should share a catalog\ncollection. Shared tags are inherited by every child, while child tags with the same key override them. The RIO\nLanding Zone `team_identifier` tag is always included.\n\nThe files are uploaded after the stack reaches `CREATE_COMPLETE` or `UPDATE_COMPLETE`. The EventBridge event time\nand ID identify the upload. All SBOM catalog constructs in the same stack reuse one upload Lambda.\n\nExample:\n```ts\nconst apiSbom = new s3Assets.Asset(this, 'ApiSbomAsset', {\n path: 'build/api-sbom.json',\n});\nconst infrastructureSbom = new s3Assets.Asset(this, 'InfrastructureSbomAsset', {\n path: 'build/infrastructure-sbom.json',\n});\n\nnew SbomCatalogProject(this, 'CatalogUpload', {\n collectionName: 'billing',\n collectionVersion: '1.4.0',\n sharedTags: ['domain:billing'],\n children: [\n {\n name: 'api',\n sbom: apiSbom,\n additionalTags: ['component:backend'],\n },\n {\n name: 'infrastructure',\n sbom: infrastructureSbom,\n additionalTags: ['component:infrastructure'],\n },\n ],\n});\n```",
|
|
18205
18205
|
"stability": "stable",
|
|
18206
18206
|
"summary": "Registers a collection of related project SBOMs and optional VEX files in the central SBOM catalog."
|
|
18207
18207
|
},
|
|
@@ -18212,7 +18212,7 @@
|
|
|
18212
18212
|
},
|
|
18213
18213
|
"locationInModule": {
|
|
18214
18214
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
18215
|
-
"line":
|
|
18215
|
+
"line": 186
|
|
18216
18216
|
},
|
|
18217
18217
|
"parameters": [
|
|
18218
18218
|
{
|
|
@@ -18238,7 +18238,7 @@
|
|
|
18238
18238
|
"kind": "class",
|
|
18239
18239
|
"locationInModule": {
|
|
18240
18240
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
18241
|
-
"line":
|
|
18241
|
+
"line": 185
|
|
18242
18242
|
},
|
|
18243
18243
|
"name": "SbomCatalogProject",
|
|
18244
18244
|
"symbolId": "src/sbom-catalog/catalog-project:SbomCatalogProject"
|
|
@@ -19166,7 +19166,7 @@
|
|
|
19166
19166
|
"assembly": "@rio-cloud/cdk-v2-constructs",
|
|
19167
19167
|
"base": "constructs.Construct",
|
|
19168
19168
|
"docs": {
|
|
19169
|
-
"remarks": "Use this construct when a stack owns one independently versioned project. The files are uploaded after the stack\nreaches `CREATE_COMPLETE` or `UPDATE_COMPLETE`.
|
|
19169
|
+
"remarks": "Use this construct when a stack owns one independently versioned project. The files are uploaded after the stack\nreaches `CREATE_COMPLETE` or `UPDATE_COMPLETE`. The EventBridge event time and ID identify the upload.\n\nThe construct automatically adds the RIO Landing Zone `team_identifier` tag and grants the generated upload Lambda\npermission to read the source assets and write them to the central catalog bucket. All SBOM catalog constructs in\nthe same stack reuse one upload Lambda.\n\nExample:\n```ts\nconst sbom = new s3Assets.Asset(this, 'SbomAsset', {\n path: 'build/sbom.json',\n});\nconst vex = new s3Assets.Asset(this, 'VexAsset', {\n path: 'build/vex.json',\n});\n\nnew StandaloneSbomCatalogProject(this, 'CatalogUpload', {\n name: 'billing-api',\n version: '1.4.0',\n additionalTags: ['component:backend'],\n sbom,\n vex,\n});\n```",
|
|
19170
19170
|
"stability": "stable",
|
|
19171
19171
|
"summary": "Registers one project's SBOM and optional VEX in the central SBOM catalog."
|
|
19172
19172
|
},
|
|
@@ -19177,7 +19177,7 @@
|
|
|
19177
19177
|
},
|
|
19178
19178
|
"locationInModule": {
|
|
19179
19179
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
19180
|
-
"line":
|
|
19180
|
+
"line": 122
|
|
19181
19181
|
},
|
|
19182
19182
|
"parameters": [
|
|
19183
19183
|
{
|
|
@@ -19203,7 +19203,7 @@
|
|
|
19203
19203
|
"kind": "class",
|
|
19204
19204
|
"locationInModule": {
|
|
19205
19205
|
"filename": "src/sbom-catalog/catalog-project.ts",
|
|
19206
|
-
"line":
|
|
19206
|
+
"line": 121
|
|
19207
19207
|
},
|
|
19208
19208
|
"name": "StandaloneSbomCatalogProject",
|
|
19209
19209
|
"symbolId": "src/sbom-catalog/catalog-project:StandaloneSbomCatalogProject"
|
|
@@ -29632,5 +29632,5 @@
|
|
|
29632
29632
|
}
|
|
29633
29633
|
},
|
|
29634
29634
|
"version": "0.0.0",
|
|
29635
|
-
"fingerprint": "
|
|
29635
|
+
"fingerprint": "D5jwTpL9Q4YLtHpHI82F0QxiNTpKvD+qyIaxmDjHPZU="
|
|
29636
29636
|
}
|
|
@@ -56,8 +56,7 @@ export interface SbomCatalogProjectProps {
|
|
|
56
56
|
* Registers one project's SBOM and optional VEX in the central SBOM catalog.
|
|
57
57
|
*
|
|
58
58
|
* Use this construct when a stack owns one independently versioned project. The files are uploaded after the stack
|
|
59
|
-
* reaches `CREATE_COMPLETE` or `UPDATE_COMPLETE`.
|
|
60
|
-
* project version is used.
|
|
59
|
+
* reaches `CREATE_COMPLETE` or `UPDATE_COMPLETE`. The EventBridge event time and ID identify the upload.
|
|
61
60
|
*
|
|
62
61
|
* The construct automatically adds the RIO Landing Zone `team_identifier` tag and grants the generated upload Lambda
|
|
63
62
|
* permission to read the source assets and write them to the central catalog bucket. All SBOM catalog constructs in
|
|
@@ -91,9 +90,8 @@ export declare class StandaloneSbomCatalogProject extends Construct {
|
|
|
91
90
|
* collection. Shared tags are inherited by every child, while child tags with the same key override them. The RIO
|
|
92
91
|
* Landing Zone `team_identifier` tag is always included.
|
|
93
92
|
*
|
|
94
|
-
* The files are uploaded after the stack reaches `CREATE_COMPLETE` or `UPDATE_COMPLETE`.
|
|
95
|
-
*
|
|
96
|
-
* one upload Lambda.
|
|
93
|
+
* The files are uploaded after the stack reaches `CREATE_COMPLETE` or `UPDATE_COMPLETE`. The EventBridge event time
|
|
94
|
+
* and ID identify the upload. All SBOM catalog constructs in the same stack reuse one upload Lambda.
|
|
97
95
|
*
|
|
98
96
|
* Example:
|
|
99
97
|
* ```ts
|
|
@@ -24,8 +24,7 @@ const UPLOAD_LOG_GROUP_ID = 'SbomCatalogUploadLogGroup';
|
|
|
24
24
|
* Registers one project's SBOM and optional VEX in the central SBOM catalog.
|
|
25
25
|
*
|
|
26
26
|
* Use this construct when a stack owns one independently versioned project. The files are uploaded after the stack
|
|
27
|
-
* reaches `CREATE_COMPLETE` or `UPDATE_COMPLETE`.
|
|
28
|
-
* project version is used.
|
|
27
|
+
* reaches `CREATE_COMPLETE` or `UPDATE_COMPLETE`. The EventBridge event time and ID identify the upload.
|
|
29
28
|
*
|
|
30
29
|
* The construct automatically adds the RIO Landing Zone `team_identifier` tag and grants the generated upload Lambda
|
|
31
30
|
* permission to read the source assets and write them to the central catalog bucket. All SBOM catalog constructs in
|
|
@@ -53,18 +52,15 @@ class StandaloneSbomCatalogProject extends constructs_1.Construct {
|
|
|
53
52
|
constructor(scope, id, props) {
|
|
54
53
|
super(scope, id);
|
|
55
54
|
const version = props.version ?? DEFAULT_VERSION;
|
|
56
|
-
const buildIdentifier = process.env.CODEBUILD_BUILD_NUMBER ?? version;
|
|
57
55
|
const teamIdentifier = rio_landing_zone_1.RioLandingZone.getTeamIdentifierParameter(this).stringValue;
|
|
58
56
|
const tags = mergeTags([`team_identifier:${teamIdentifier}`], props.additionalTags) ?? [];
|
|
59
57
|
assertNonEmptyValueWithoutSlashes('name', props.name);
|
|
60
58
|
assertNonEmptyVersion('version', version);
|
|
61
|
-
assertNonEmptyValueWithoutSlashes('buildIdentifier', buildIdentifier);
|
|
62
59
|
parseTagsWithValidUniqueKeys(props.additionalTags ?? [], 'additionalTags');
|
|
63
60
|
const stack = aws_cdk_lib_1.Stack.of(this);
|
|
64
61
|
const configuration = {
|
|
65
62
|
originAccountId: stack.account,
|
|
66
63
|
originAccountName: rio_landing_zone_1.RioLandingZone.getAccountNameParameter(this).stringValue,
|
|
67
|
-
buildIdentifier,
|
|
68
64
|
name: props.name,
|
|
69
65
|
version,
|
|
70
66
|
tags,
|
|
@@ -84,9 +80,8 @@ StandaloneSbomCatalogProject[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.Standalo
|
|
|
84
80
|
* collection. Shared tags are inherited by every child, while child tags with the same key override them. The RIO
|
|
85
81
|
* Landing Zone `team_identifier` tag is always included.
|
|
86
82
|
*
|
|
87
|
-
* The files are uploaded after the stack reaches `CREATE_COMPLETE` or `UPDATE_COMPLETE`.
|
|
88
|
-
*
|
|
89
|
-
* one upload Lambda.
|
|
83
|
+
* The files are uploaded after the stack reaches `CREATE_COMPLETE` or `UPDATE_COMPLETE`. The EventBridge event time
|
|
84
|
+
* and ID identify the upload. All SBOM catalog constructs in the same stack reuse one upload Lambda.
|
|
90
85
|
*
|
|
91
86
|
* Example:
|
|
92
87
|
* ```ts
|
|
@@ -120,11 +115,9 @@ class SbomCatalogProject extends constructs_1.Construct {
|
|
|
120
115
|
constructor(scope, id, props) {
|
|
121
116
|
super(scope, id);
|
|
122
117
|
const collectionVersion = props.collectionVersion ?? DEFAULT_VERSION;
|
|
123
|
-
const buildIdentifier = process.env.CODEBUILD_BUILD_NUMBER ?? collectionVersion;
|
|
124
118
|
const teamIdentifier = rio_landing_zone_1.RioLandingZone.getTeamIdentifierParameter(this).stringValue;
|
|
125
119
|
assertNonEmptyValueWithoutSlashes('collectionName', props.collectionName);
|
|
126
120
|
assertNonEmptyVersion('collectionVersion', collectionVersion);
|
|
127
|
-
assertNonEmptyValueWithoutSlashes('buildIdentifier', buildIdentifier);
|
|
128
121
|
validateChildren(props.children);
|
|
129
122
|
parseTagsWithValidUniqueKeys(props.sharedTags ?? [], 'sharedTags');
|
|
130
123
|
const sharedTags = mergeTags([`team_identifier:${teamIdentifier}`], props.sharedTags) ?? [];
|
|
@@ -132,7 +125,6 @@ class SbomCatalogProject extends constructs_1.Construct {
|
|
|
132
125
|
const configuration = {
|
|
133
126
|
originAccountId: stack.account,
|
|
134
127
|
originAccountName: rio_landing_zone_1.RioLandingZone.getAccountNameParameter(this).stringValue,
|
|
135
|
-
buildIdentifier,
|
|
136
128
|
collectionName: props.collectionName,
|
|
137
129
|
collectionVersion,
|
|
138
130
|
children: props.children.map(child => ({
|
|
@@ -189,6 +181,7 @@ function createUploadResources(scope, configuration, sourceAssets) {
|
|
|
189
181
|
new eventsTargets.LambdaFunction(uploadFunction, {
|
|
190
182
|
event: events.RuleTargetInput.fromObject({
|
|
191
183
|
eventId: events.EventField.eventId,
|
|
184
|
+
eventTime: events.EventField.fromPath('$.time'),
|
|
192
185
|
stackId: events.EventField.fromPath('$.detail.stack-id'),
|
|
193
186
|
stackStatus: events.EventField.fromPath('$.detail.status-details.status'),
|
|
194
187
|
configuration,
|
|
@@ -283,4 +276,4 @@ function parseTagsWithValidUniqueKeys(tags, propertyName, allowManagedTags = fal
|
|
|
283
276
|
function optionalTags(tags) {
|
|
284
277
|
return tags === undefined ? {} : { tags };
|
|
285
278
|
}
|
|
286
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Nib20tY2F0YWxvZy9jYXRhbG9nLXByb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBcUQ7QUFDckQsaURBQWlEO0FBQ2pELGdFQUFnRTtBQUNoRSwyQ0FBMkM7QUFDM0MsaURBQWlEO0FBQ2pELDZDQUE2QztBQUU3QywyQ0FBdUM7QUFDdkMsNkJBQTZCO0FBQzdCLDRDQUFvRDtBQUNwRCwwREFBcUQ7QUFDckQsMkNBQXNEO0FBUXRELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQztBQUMvQixNQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7QUFDcEUsTUFBTSxvQkFBb0IsR0FBRyxzQ0FBc0MsQ0FBQztBQUNwRSxNQUFNLHVCQUF1QixHQUFHLG1CQUFtQixDQUFDO0FBQ3BELE1BQU0sbUJBQW1CLEdBQUcsMkJBQTJCLENBQUM7QUFvRXhEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBQ0gsTUFBYSw0QkFBNkIsU0FBUSxzQkFBUztJQUN6RCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXdDO1FBQ2hGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlLENBQUM7UUFDakQsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsSUFBSSxPQUFPLENBQUM7UUFDdEUsTUFBTSxjQUFjLEdBQUcsaUNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDbkYsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLENBQUMsbUJBQW1CLGNB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QUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDekMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLElBQUksY0FBYyxJQUFJLENBQUMsSUFBSSxjQUFjLEtBQUssR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM3RCxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsWUFBWSxTQUFTLEdBQUcsZ0VBQWdFLENBQUMsQ0FBQztRQUMvRyxDQUFDO1FBRUQsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDekMsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ25ELE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxZQUFZLGtDQUFrQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsWUFBWSxnQ0FBZ0MsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBQ0QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxJQUFlO0lBQ25DLE9BQU8sSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiwgU3RhY2ssIFRva2VuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgZXZlbnRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0ICogYXMgZXZlbnRzVGFyZ2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHMnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgKiBhcyBzM0Fzc2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtYXNzZXRzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IERFRkFVTFRfTk9ERV9SVU5USU1FIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFJpb0xhbmRpbmdab25lIH0gZnJvbSAnLi4vcmlvLWxhbmRpbmctem9uZSc7XG5pbXBvcnQgeyBTQk9NX0NBVEFMT0dfQlVDS0VUX0FSTiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHtcbiAgQXNzZXRMb2NhdGlvbixcbiAgQ2F0YWxvZ1VwbG9hZENvbmZpZ3VyYXRpb24sXG4gIFN0YW5kYWxvbmVVcGxvYWRDb25maWd1cmF0aW9uLFxuICBVcGxvYWRDb25maWd1cmF0aW9uLFxufSBmcm9tICcuL2xhbWJkYS90eXBlcyc7XG5cbmNvbnN0IERFRkFVTFRfVkVSU0lPTiA9ICdtYWluJztcbmNvbnN0IE1BWF9DSElMRFJFTiA9IDM7XG5jb25zdCBNQU5BR0VEX1RBR19LRVlTID0gbmV3IFNldChbJ2FjY291bnRfaWQnLCAndGVhbV9pZGVudGlmaWVyJ10pO1xuY29uc3QgVVBMT0FEX0ZVTkNUSU9OX1VVSUQgPSAnZDIwYjlmNDYtMDcwMi00N2RkLTg5YzItOWVhNGJkZGFhY2ZjJztcbmNvbnN0IFVQTE9BRF9GVU5DVElPTl9QVVJQT1NFID0gJ1Nib21DYXRhbG9nVXBsb2FkJztcbmNvbnN0IFVQTE9BRF9MT0dfR1JPVVBfSUQgPSAnU2JvbUNhdGFsb2dVcGxvYWRMb2dHcm91cCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhbmRhbG9uZVNib21DYXRhbG9nUHJvamVjdFByb3BzIHtcbiAgLyoqIE11c3QgYmUgbm9uLWVtcHR5IGFuZCBtdXN0IG5vdCBjb250YWluIGAvYC4gKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKiBQcm9qZWN0IHZlcnNpb24uIERlZmF1bHRzIHRvIGBtYWluYC4gKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBwcm9qZWN0IHRhZ3MgdXNpbmcgdGhlIGBrZXk6dmFsdWVgIGZvcm1hdC5cbiAgICpcbiAgICogYHRlYW1faWRlbnRpZmllcmAgaXMgYWx3YXlzIGFkZGVkIGZyb20gdGhlIFJJTyBMYW5kaW5nIFpvbmUgY29uZmlndXJhdGlvbi4gRG8gbm90IHByb3ZpZGUgYHRlYW1faWRlbnRpZmllcmAgb3JcbiAgICogYGFjY291bnRfaWRgOyBib3RoIGFyZSBtYW5hZ2VkIHRhZyBrZXlzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFRhZ3M/OiBzdHJpbmdbXTtcblxuICAvKiogSlNPTiBTQk9NIGZpbGUgYXNzZXQgdG8gdXBsb2FkLiAqL1xuICByZWFkb25seSBzYm9tOiBzM0Fzc2V0cy5Bc3NldDtcblxuICAvKiogT3B0aW9uYWwgSlNPTiBWRVggZmlsZSBhc3NldCB0byB1cGxvYWQuICovXG4gIHJlYWRvbmx5IHZleD86IHMzQXNzZXRzLkFzc2V0O1xufVxuXG4vKiogQSBjaGlsZCBwcm9qZWN0IGluIGFuIFNCT00gY2F0YWxvZyBjb2xsZWN0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYm9tQ2F0YWxvZ1Byb2plY3RDaGlsZCB7XG4gIC8qKlxuICAgKiBNdXN0IGJlIG5vbi1lbXB0eSwgdW5pcXVlIHdpdGhpbiB0aGUgY29sbGVjdGlvbiwgYW5kIG11c3Qgbm90IGNvbnRhaW4gYC9gLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKiBDaGlsZCBwcm9qZWN0IHZlcnNpb24uIERlZmF1bHRzIHRvIGBtYWluYC4gKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGFncyBhZGRlZCB0byB0aGlzIGNoaWxkLCB1c2luZyB0aGUgYGtleTp2YWx1ZWAgZm9ybWF0LlxuICAgKlxuICAgKiBDaGlsZCB0YWdzIG92ZXJyaWRlIHNoYXJlZCB0YWdzIHdpdGggdGhlIHNhbWUga2V5LiBgdGVhbV9pZGVudGlmaWVyYCBpcyBhbHdheXMgaW5oZXJpdGVkIGZyb20gdGhlIFJJTyBMYW5kaW5nIFpvbmVcbiAgICogY29uZmlndXJhdGlvbi4gRG8gbm90IHByb3ZpZGUgYHRlYW1faWRlbnRpZmllcmAgb3IgYGFjY291bnRfaWRgOyBib3RoIGFyZSBtYW5hZ2VkIHRhZyBrZXlzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFRhZ3M/OiBzdHJpbmdbXTtcblxuICAvKiogSlNPTiBTQk9NIGZpbGUgYXNzZXQgdG8gdXBsb2FkLiAqL1xuICByZWFkb25seSBzYm9tOiBzM0Fzc2V0cy5Bc3NldDtcblxuICAvKiogT3B0aW9uYWwgSlNPTiBWRVggZmlsZSBhc3NldCB0byB1cGxvYWQuICovXG4gIHJlYWRvbmx5IHZleD86IHMzQXNzZXRzLkFzc2V0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNib21DYXRhbG9nUHJvamVjdFByb3BzIHtcbiAgLyoqIENvbGxlY3Rpb24gbmFtZSBzdG9yZWQgaW4gdGhlIG1hbmlmZXN0IGFuZCB1c2VkIGluIHRoZSBkZXN0aW5hdGlvbiBrZXkuICovXG4gIHJlYWRvbmx5IGNvbGxlY3Rpb25OYW1lOiBzdHJpbmc7XG5cbiAgLyoqIENvbGxlY3Rpb24gdmVyc2lvbi4gRGVmYXVsdHMgdG8gYG1haW5gLiAqL1xuICByZWFkb25seSBjb2xsZWN0aW9uVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGFncyBpbmhlcml0ZWQgYnkgZXZlcnkgY2hpbGQsIHVzaW5nIHRoZSBga2V5OnZhbHVlYCBmb3JtYXQuXG4gICAqXG4gICAqIEEgY2hpbGQncyBhZGRpdGlvbmFsIHRhZ3Mgb3ZlcnJpZGUgc2hhcmVkIHRhZ3Mgd2l0aCB0aGUgc2FtZSBrZXkuIGB0ZWFtX2lkZW50aWZpZXJgIGlzIGFsd2F5cyBhZGRlZCBmcm9tIHRoZSBSSU9cbiAgICogTGFuZGluZyBab25lIGNvbmZpZ3VyYXRpb24uIERvIG5vdCBwcm92aWRlIGB0ZWFtX2lkZW50aWZpZXJgIG9yIGBhY2NvdW50X2lkYDsgYm90aCBhcmUgbWFuYWdlZCB0YWcga2V5cy5cbiAgICovXG4gIHJlYWRvbmx5IHNoYXJlZFRhZ3M/OiBzdHJpbmdbXTtcblxuICAvKiogQ2hpbGQgY2F0YWxvZyBwcm9qZWN0cy4gTXVzdCBjb250YWluIGJldHdlZW4gb25lIGFuZCB0aHJlZSBwcm9qZWN0cy4gKi9cbiAgcmVhZG9ubHkgY2hpbGRyZW46IFNib21DYXRhbG9nUHJvamVjdENoaWxkW107XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIG9uZSBwcm9qZWN0J3MgU0JPTSBhbmQgb3B0aW9uYWwgVkVYIGluIHRoZSBjZW50cmFsIFNCT00gY2F0YWxvZy5cbiAqXG4gKiBVc2UgdGhpcyBjb25zdHJ1Y3Qgd2hlbiBhIHN0YWNrIG93bnMgb25lIGluZGVwZW5kZW50bHkgdmVyc2lvbmVkIHByb2plY3QuIFRoZSBmaWxlcyBhcmUgdXBsb2FkZWQgYWZ0ZXIgdGhlIHN0YWNrXG4gKiByZWFjaGVzIGBDUkVBVEVfQ09NUExFVEVgIG9yIGBVUERBVEVfQ09NUExFVEVgLiBJbiBDb2RlQnVpbGQsIHRoZSBidWlsZCBudW1iZXIgaWRlbnRpZmllcyB0aGUgdXBsb2FkOyBvdGhlcndpc2UgdGhlXG4gKiBwcm9qZWN0IHZlcnNpb24gaXMgdXNlZC5cbiAqXG4gKiBUaGUgY29uc3RydWN0IGF1dG9tYXRpY2FsbHkgYWRkcyB0aGUgUklPIExhbmRpbmcgWm9uZSBgdGVhbV9pZGVudGlmaWVyYCB0YWcgYW5kIGdyYW50cyB0aGUgZ2VuZXJhdGVkIHVwbG9hZCBMYW1iZGFcbiAqIHBlcm1pc3Npb24gdG8gcmVhZCB0aGUgc291cmNlIGFzc2V0cyBhbmQgd3JpdGUgdGhlbSB0byB0aGUgY2VudHJhbCBjYXRhbG9nIGJ1Y2tldC4gQWxsIFNCT00gY2F0YWxvZyBjb25zdHJ1Y3RzIGluXG4gKiB0aGUgc2FtZSBzdGFjayByZXVzZSBvbmUgdXBsb2FkIExhbWJkYS5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgdHNcbiAqIGNvbnN0IHNib20gPSBuZXcgczNBc3NldHMuQXNzZXQodGhpcywgJ1Nib21Bc3NldCcsIHtcbiAqICAgcGF0aDogJ2J1aWxkL3Nib20uanNvbicsXG4gKiB9KTtcbiAqIGNvbnN0IHZleCA9IG5ldyBzM0Fzc2V0cy5Bc3NldCh0aGlzLCAnVmV4QXNzZXQnLCB7XG4gKiAgIHBhdGg6ICdidWlsZC92ZXguanNvbicsXG4gKiB9KTtcbiAqXG4gKiBuZXcgU3RhbmRhbG9uZVNib21DYXRhbG9nUHJvamVjdCh0aGlzLCAnQ2F0YWxvZ1VwbG9hZCcsIHtcbiAqICAgbmFtZTogJ2JpbGxpbmctYXBpJyxcbiAqICAgdmVyc2lvbjogJzEuNC4wJyxcbiAqICAgYWRkaXRpb25hbFRhZ3M6IFsnY29tcG9uZW50OmJhY2tlbmQnXSxcbiAqICAgc2JvbSxcbiAqICAgdmV4LFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFN0YW5kYWxvbmVTYm9tQ2F0YWxvZ1Byb2plY3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3RhbmRhbG9uZVNib21DYXRhbG9nUHJvamVjdFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHZlcnNpb24gPSBwcm9wcy52ZXJzaW9uID8/IERFRkFVTFRfVkVSU0lPTjtcbiAgICBjb25zdCBidWlsZElkZW50aWZpZXIgPSBwcm9jZXNzLmVudi5DT0RFQlVJTERfQlVJTERfTlVNQkVSID8/IHZlcnNpb247XG4gICAgY29uc3QgdGVhbUlkZW50aWZpZXIgPSBSaW9MYW5kaW5nWm9uZS5nZXRUZWFtSWRlbnRpZmllclBhcmFtZXRlcih0aGlzKS5zdHJpbmdWYWx1ZTtcbiAgICBjb25zdCB0YWdzID0gbWVyZ2VUYWdzKFtgdGVhbV9pZGVudGlmaWVyOiR7dGVhbUlkZW50aWZpZXJ9YF0sIHByb3BzLmFkZGl0aW9uYWxUYWdzKSA/PyBbXTtcbiAgICBhc3NlcnROb25FbXB0eVZhbHVlV2l0aG91dFNsYXNoZXMoJ25hbWUnLCBwcm9wcy5uYW1lKTtcbiAgICBhc3NlcnROb25FbXB0eVZlcnNpb24oJ3ZlcnNpb24nLCB2ZXJzaW9uKTtcbiAgICBhc3NlcnROb25FbXB0eVZhbHVlV2l0aG91dFNsYXNoZXMoJ2J1aWxkSWRlbnRpZmllcicsIGJ1aWxkSWRlbnRpZmllcik7XG4gICAgcGFyc2VUYWdzV2l0aFZhbGlkVW5pcXVlS2V5cyhwcm9wcy5hZGRpdGlvbmFsVGFncyA/PyBbXSwgJ2FkZGl0aW9uYWxUYWdzJyk7XG5cbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHRoaXMpO1xuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb246IFN0YW5kYWxvbmVVcGxvYWRDb25maWd1cmF0aW9uID0ge1xuICAgICAgb3JpZ2luQWNjb3VudElkOiBzdGFjay5hY2NvdW50LFxuICAgICAgb3JpZ2luQWNjb3VudE5hbWU6IFJpb0xhbmRpbmdab25lLmdldEFjY291bnROYW1lUGFyYW1ldGVyKHRoaXMpLnN0cmluZ1ZhbHVlLFxuICAgICAgYnVpbGRJZGVudGlmaWVyLFxuICAgICAgbmFtZTogcHJvcHMubmFtZSxcbiAgICAgIHZlcnNpb24sXG4gICAgICB0YWdzLFxuICAgICAgc2JvbTogYXNzZXRMb2NhdGlvbihwcm9wcy5zYm9tKSxcbiAgICAgIC4uLihwcm9wcy52ZXggPT09IHVuZGVmaW5lZCA/IHt9IDogeyB2ZXg6IGFzc2V0TG9jYXRpb24ocHJvcHMudmV4KSB9KSxcbiAgICB9O1xuXG4gICAgY3JlYXRlVXBsb2FkUmVzb3VyY2VzKHRoaXMsIGNvbmZpZ3VyYXRpb24sIFtwcm9wcy5zYm9tLCAuLi4ocHJvcHMudmV4ID09PSB1bmRlZmluZWQgPyBbXSA6IFtwcm9wcy52ZXhdKV0pO1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgY29sbGVjdGlvbiBvZiByZWxhdGVkIHByb2plY3QgU0JPTXMgYW5kIG9wdGlvbmFsIFZFWCBmaWxlcyBpbiB0aGUgY2VudHJhbCBTQk9NIGNhdGFsb2cuXG4gKlxuICogVXNlIHRoaXMgY29uc3RydWN0IHdoZW4gb25lIHN0YWNrIHByb2R1Y2VzIGJldHdlZW4gb25lIGFuZCB0aHJlZSByZWxhdGVkIHByb2plY3RzIHRoYXQgc2hvdWxkIHNoYXJlIGEgY2F0YWxvZ1xuICogY29sbGVjdGlvbi4gU2hhcmVkIHRhZ3MgYXJlIGluaGVyaXRlZCBieSBldmVyeSBjaGlsZCwgd2hpbGUgY2hpbGQgdGFncyB3aXRoIHRoZSBzYW1lIGtleSBvdmVycmlkZSB0aGVtLiBUaGUgUklPXG4gKiBMYW5kaW5nIFpvbmUgYHRlYW1faWRlbnRpZmllcmAgdGFnIGlzIGFsd2F5cyBpbmNsdWRlZC5cbiAqXG4gKiBUaGUgZmlsZXMgYXJlIHVwbG9hZGVkIGFmdGVyIHRoZSBzdGFjayByZWFjaGVzIGBDUkVBVEVfQ09NUExFVEVgIG9yIGBVUERBVEVfQ09NUExFVEVgLiBJbiBDb2RlQnVpbGQsIHRoZSBidWlsZCBudW1iZXJcbiAqIGlkZW50aWZpZXMgdGhlIHVwbG9hZDsgb3RoZXJ3aXNlIHRoZSBjb2xsZWN0aW9uIHZlcnNpb24gaXMgdXNlZC4gQWxsIFNCT00gY2F0YWxvZyBjb25zdHJ1Y3RzIGluIHRoZSBzYW1lIHN0YWNrIHJldXNlXG4gKiBvbmUgdXBsb2FkIExhbWJkYS5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgdHNcbiAqIGNvbnN0IGFwaVNib20gPSBuZXcgczNBc3NldHMuQXNzZXQodGhpcywgJ0FwaVNib21Bc3NldCcsIHtcbiAqICAgcGF0aDogJ2J1aWxkL2FwaS1zYm9tLmpzb24nLFxuICogfSk7XG4gKiBjb25zdCBpbmZyYXN0cnVjdHVyZVNib20gPSBuZXcgczNBc3NldHMuQXNzZXQodGhpcywgJ0luZnJhc3RydWN0dXJlU2JvbUFzc2V0Jywge1xuICogICBwYXRoOiAnYnVpbGQvaW5mcmFzdHJ1Y3R1cmUtc2JvbS5qc29uJyxcbiAqIH0pO1xuICpcbiAqIG5ldyBTYm9tQ2F0YWxvZ1Byb2plY3QodGhpcywgJ0NhdGFsb2dVcGxvYWQnLCB7XG4gKiAgIGNvbGxlY3Rpb25OYW1lOiAnYmlsbGluZycsXG4gKiAgIGNvbGxlY3Rpb25WZXJzaW9uOiAnMS40LjAnLFxuICogICBzaGFyZWRUYWdzOiBbJ2RvbWFpbjpiaWxsaW5nJ10sXG4gKiAgIGNoaWxkcmVuOiBbXG4gKiAgICAge1xuICogICAgICAgbmFtZTogJ2FwaScsXG4gKiAgICAgICBzYm9tOiBhcGlTYm9tLFxuICogICAgICAgYWRkaXRpb25hbFRhZ3M6IFsnY29tcG9uZW50OmJhY2tlbmQnXSxcbiAqICAgICB9LFxuICogICAgIHtcbiAqICAgICAgIG5hbWU6ICdpbmZyYXN0cnVjdHVyZScsXG4gKiAgICAgICBzYm9tOiBpbmZyYXN0cnVjdHVyZVNib20sXG4gKiAgICAgICBhZGRpdGlvbmFsVGFnczogWydjb21wb25lbnQ6aW5mcmFzdHJ1Y3R1cmUnXSxcbiAqICAgICB9LFxuICogICBdLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFNib21DYXRhbG9nUHJvamVjdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTYm9tQ2F0YWxvZ1Byb2plY3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBjb2xsZWN0aW9uVmVyc2lvbiA9IHByb3BzLmNvbGxlY3Rpb25WZXJzaW9uID8/IERFRkFVTFRfVkVSU0lPTjtcbiAgICBjb25zdCBidWlsZElkZW50aWZpZXIgPSBwcm9jZXNzLmVudi5DT0RFQlVJTERfQlVJTERfTlVNQkVSID8/IGNvbGxlY3Rpb25WZXJzaW9uO1xuICAgIGNvbnN0IHRlYW1JZGVudGlmaWVyID0gUmlvTGFuZGluZ1pvbmUuZ2V0VGVhbUlkZW50aWZpZXJQYXJhbWV0ZXIodGhpcykuc3RyaW5nVmFsdWU7XG4gICAgYXNzZXJ0Tm9uRW1wdHlWYWx1ZVdpdGhvdXRTbGFzaGVzKCdjb2xsZWN0aW9uTmFtZScsIHByb3BzLmNvbGxlY3Rpb25OYW1lKTtcbiAgICBhc3NlcnROb25FbXB0eVZlcnNpb24oJ2NvbGxlY3Rpb25WZXJzaW9uJywgY29sbGVjdGlvblZlcnNpb24pO1xuICAgIGFzc2VydE5vbkVtcHR5VmFsdWVXaXRob3V0U2xhc2hlcygnYnVpbGRJZGVudGlmaWVyJywgYnVpbGRJZGVudGlmaWVyKTtcbiAgICB2YWxpZGF0ZUNoaWxkcmVuKHByb3BzLmNoaWxkcmVuKTtcbiAgICBwYXJzZVRhZ3NXaXRoVmFsaWRVbmlxdWVLZXlzKHByb3BzLnNoYXJlZFRhZ3MgPz8gW10sICdzaGFyZWRUYWdzJyk7XG4gICAgY29uc3Qgc2hhcmVkVGFncyA9IG1lcmdlVGFncyhbYHRlYW1faWRlbnRpZmllcjoke3RlYW1JZGVudGlmaWVyfWBdLCBwcm9wcy5zaGFyZWRUYWdzKSA/PyBbXTtcblxuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YodGhpcyk7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbjogQ2F0YWxvZ1VwbG9hZENvbmZpZ3VyYXRpb24gPSB7XG4gICAgICBvcmlnaW5BY2NvdW50SWQ6IHN0YWNrLmFjY291bnQsXG4gICAgICBvcmlnaW5BY2NvdW50TmFtZTogUmlvTGFuZGluZ1pvbmUuZ2V0QWNjb3VudE5hbWVQYXJhbWV0ZXIodGhpcykuc3RyaW5nVmFsdWUsXG4gICAgICBidWlsZElkZW50aWZpZXIsXG4gICAgICBjb2xsZWN0aW9uTmFtZTogcHJvcHMuY29sbGVjdGlvbk5hbWUsXG4gICAgICBjb2xsZWN0aW9uVmVyc2lvbixcbiAgICAgIGNoaWxkcmVuOiBwcm9wcy5jaGlsZHJlbi5tYXAoY2hpbGQgPT4gKHtcbiAgICAgICAgbmFtZTogY2hpbGQubmFtZSxcbiAgICAgICAgdmVyc2lvbjogY2hpbGQudmVyc2lvbiA/PyBERUZBVUxUX1ZFUlNJT04sXG4gICAgICAgIC4uLm9wdGlvbmFsVGFncyhtZXJnZVRhZ3Moc2hhcmVkVGFncywgY2hpbGQuYWRkaXRpb25hbFRhZ3MpKSxcbiAgICAgICAgc2JvbTogYXNzZXRMb2NhdGlvbihjaGlsZC5zYm9tKSxcbiAgICAgICAgLi4uKGNoaWxkLnZleCA9PT0gdW5kZWZpbmVkID8ge30gOiB7IHZleDogYXNzZXRMb2NhdGlvbihjaGlsZC52ZXgpIH0pLFxuICAgICAgfSkpLFxuICAgIH07XG5cbiAgICBjcmVhdGVVcGxvYWRSZXNvdXJjZXMoXG4gICAgICB0aGlzLFxuICAgICAgY29uZmlndXJhdGlvbixcbiAgICAgIHByb3BzLmNoaWxkcmVuLmZsYXRNYXAoY2hpbGQgPT4gW2NoaWxkLnNib20sIC4uLihjaGlsZC52ZXggPT09IHVuZGVmaW5lZCA/IFtdIDogW2NoaWxkLnZleF0pXSlcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVVwbG9hZFJlc291cmNlcyhcbiAgc2NvcGU6IENvbnN0cnVjdCxcbiAgY29uZmlndXJhdGlvbjogVXBsb2FkQ29uZmlndXJhdGlvbixcbiAgc291cmNlQXNzZXRzOiBzM0Fzc2V0cy5Bc3NldFtdXG4pOiB2b2lkIHtcbiAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG5cbiAgY29uc3QgdXBsb2FkRnVuY3Rpb24gPSBuZXcgbGFtYmRhLlNpbmdsZXRvbkZ1bmN0aW9uKHNjb3BlLCAnVXBsb2FkRnVuY3Rpb24nLCB7XG4gICAgdXVpZDogVVBMT0FEX0ZVTkNUSU9OX1VVSUQsXG4gICAgbGFtYmRhUHVycG9zZTogVVBMT0FEX0ZVTkNUSU9OX1BVUlBPU0UsXG4gICAgcnVudGltZTogREVGQVVMVF9OT0RFX1JVTlRJTUUsXG4gICAgYXJjaGl0ZWN0dXJlOiBsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICBoYW5kbGVyOiAnaGFuZGxlci5oYW5kbGVyJyxcbiAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJ2xhbWJkYScpLCB7XG4gICAgICBleGNsdWRlOiBbJyouanMnLCAnKi5kLnRzJ10sXG4gICAgfSksXG4gICAgbG9nZ2luZ0Zvcm1hdDogbGFtYmRhLkxvZ2dpbmdGb3JtYXQuSlNPTixcbiAgICBsb2dHcm91cDogZ2V0T3JDcmVhdGVVcGxvYWRMb2dHcm91cChzdGFjayksXG4gICAgaW5pdGlhbFBvbGljeTogW1xuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbJ3MzOlB1dE9iamVjdCddLFxuICAgICAgICByZXNvdXJjZXM6IFtgJHtTQk9NX0NBVEFMT0dfQlVDS0VUX0FSTn0vKmBdLFxuICAgICAgfSksXG4gICAgXSxcbiAgICBtZW1vcnlTaXplOiAyNTYsXG4gICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxKSxcbiAgfSk7XG5cbiAgZm9yIChjb25zdCBhc3NldCBvZiBzb3VyY2VBc3NldHMpIHtcbiAgICBhc3NldC5ncmFudFJlYWQodXBsb2FkRnVuY3Rpb24pO1xuICB9XG5cbiAgbmV3IGV2ZW50cy5SdWxlKHNjb3BlLCAnU3RhY2tDb21wbGV0aW9uUnVsZScsIHtcbiAgICBldmVudFBhdHRlcm46IHtcbiAgICAgIHNvdXJjZTogWydhd3MuY2xvdWRmb3JtYXRpb24nXSxcbiAgICAgIGRldGFpbFR5cGU6IFsnQ2xvdWRGb3JtYXRpb24gU3RhY2sgU3RhdHVzIENoYW5nZSddLFxuICAgICAgZGV0YWlsOiB7XG4gICAgICAgICdzdGFjay1pZCc6IFtzdGFjay5zdGFja0lkXSxcbiAgICAgICAgJ3N0YXR1cy1kZXRhaWxzJzoge1xuICAgICAgICAgIHN0YXR1czogWydDUkVBVEVfQ09NUExFVEUnLCAnVVBEQVRFX0NPTVBMRVRFJ10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgdGFyZ2V0czogW1xuICAgICAgbmV3IGV2ZW50c1RhcmdldHMuTGFtYmRhRnVuY3Rpb24odXBsb2FkRnVuY3Rpb24sIHtcbiAgICAgICAgZXZlbnQ6IGV2ZW50cy5SdWxlVGFyZ2V0SW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICAgICAgZXZlbnRJZDogZXZlbnRzLkV2ZW50RmllbGQuZXZlbnRJZCxcbiAgICAgICAgICBzdGFja0lkOiBldmVudHMuRXZlbnRGaWVsZC5mcm9tUGF0aCgnJC5kZXRhaWwuc3RhY2staWQnKSxcbiAgICAgICAgICBzdGFja1N0YXR1czogZXZlbnRzLkV2ZW50RmllbGQuZnJvbVBhdGgoJyQuZGV0YWlsLnN0YXR1cy1kZXRhaWxzLnN0YXR1cycpLFxuICAgICAgICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgICAgIH0pLFxuICAgICAgfSksXG4gICAgXSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldE9yQ3JlYXRlVXBsb2FkTG9nR3JvdXAoc3RhY2s6IFN0YWNrKTogbG9ncy5Mb2dHcm91cCB7XG4gIGNvbnN0IGV4aXN0aW5nTG9nR3JvdXAgPSBzdGFjay5ub2RlLnRyeUZpbmRDaGlsZChVUExPQURfTE9HX0dST1VQX0lEKTtcbiAgaWYgKGV4aXN0aW5nTG9nR3JvdXAgaW5zdGFuY2VvZiBsb2dzLkxvZ0dyb3VwKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nTG9nR3JvdXA7XG4gIH1cbiAgaWYgKGV4aXN0aW5nTG9nR3JvdXAgIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU3RhY2sgYWxyZWFkeSBjb250YWlucyBhIGNvbnN0cnVjdCBuYW1lZCAnJHtVUExPQURfTE9HX0dST1VQX0lEfSdgKTtcbiAgfVxuICByZXR1cm4gbmV3IGxvZ3MuTG9nR3JvdXAoc3RhY2ssIFVQTE9BRF9MT0dfR1JPVVBfSUQsIHtcbiAgICByZXRlbnRpb246IGxvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfV0VFSyxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFzc2V0TG9jYXRpb24oYXNzZXQ6IHMzQXNzZXRzLkFzc2V0KTogQXNzZXRMb2NhdGlvbiB7XG4gIHJldHVybiB7XG4gICAgYnVja2V0TmFtZTogYXNzZXQuczNCdWNrZXROYW1lLFxuICAgIG9iamVjdEtleTogYXNzZXQuczNPYmplY3RLZXksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGFzc2VydE5vbkVtcHR5VmFsdWVXaXRob3V0U2xhc2hlcyhuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCB8fCB2YWx1ZS5pbmNsdWRlcygnLycpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWV9IG11c3QgYmUgYSBub24tZW1wdHkgdmFsdWUgd2l0aG91dCAnLydgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnROb25FbXB0eVZlcnNpb24obmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bmFtZX0gbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmdgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNoaWxkcmVuKGNoaWxkcmVuOiBTYm9tQ2F0YWxvZ1Byb2plY3RDaGlsZFtdKTogdm9pZCB7XG4gIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NoaWxkcmVuIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgcHJvamVjdCcpO1xuICB9XG4gIGlmIChjaGlsZHJlbi5sZW5ndGggPiBNQVhfQ0hJTERSRU4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNoaWxkcmVuIG11c3QgY29udGFpbiBhdCBtb3N0ICR7TUFYX0NISUxEUkVOfSBwcm9qZWN0c2ApO1xuICB9XG5cbiAgY29uc3QgbmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgIGFzc2VydE5vbkVtcHR5VmFsdWVXaXRob3V0U2xhc2hlcygnY2hpbGQgbmFtZScsIGNoaWxkLm5hbWUpO1xuICAgIGlmIChjaGlsZC52ZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFzc2VydE5vbkVtcHR5VmVyc2lvbihgdmVyc2lvbiBmb3IgY2hpbGQgJyR7Y2hpbGQubmFtZX0nYCwgY2hpbGQudmVyc2lvbik7XG4gICAgfVxuICAgIHBhcnNlVGFnc1dpdGhWYWxpZFVuaXF1ZUtleXMoY2hpbGQuYWRkaXRpb25hbFRhZ3MgPz8gW10sIGBhZGRpdGlvbmFsVGFncyBmb3IgY2hpbGQgJyR7Y2hpbGQubmFtZX0nYCk7XG4gICAgaWYgKG5hbWVzLmhhcyhjaGlsZC5uYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjaGlsZCBuYW1lICcke2NoaWxkLm5hbWV9JyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIGNvbGxlY3Rpb25gKTtcbiAgICB9XG4gICAgbmFtZXMuYWRkKGNoaWxkLm5hbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlVGFncyhzaGFyZWRUYWdzPzogc3RyaW5nW10sIGFkZGl0aW9uYWxUYWdzPzogc3RyaW5nW10pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gIGlmIChzaGFyZWRUYWdzID09PSB1bmRlZmluZWQgJiYgYWRkaXRpb25hbFRhZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBzaGFyZWQgPSBwYXJzZVRhZ3NXaXRoVmFsaWRVbmlxdWVLZXlzKHNoYXJlZFRhZ3MgPz8gW10sICdzaGFyZWRUYWdzJywgdHJ1ZSk7XG4gIGNvbnN0IGFkZGl0aW9uYWwgPSBwYXJzZVRhZ3NXaXRoVmFsaWRVbmlxdWVLZXlzKGFkZGl0aW9uYWxUYWdzID8/IFtdLCAnYWRkaXRpb25hbFRhZ3MnKTtcbiAgY29uc3QgbWVyZ2VkID0gbmV3IE1hcChzaGFyZWQpO1xuICBmb3IgKGNvbnN0IFtrZXksIHRhZ10gb2YgYWRkaXRpb25hbCkgbWVyZ2VkLnNldChrZXksIHRhZyk7XG4gIHJldHVybiBbLi4ubWVyZ2VkLnZhbHVlcygpXTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUYWdzV2l0aFZhbGlkVW5pcXVlS2V5cyhcbiAgdGFnczogc3RyaW5nW10sXG4gIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICBhbGxvd01hbmFnZWRUYWdzID0gZmFsc2Vcbik6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCByZXN1bHQgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzKSB7XG4gICAgY29uc3Qgc2VwYXJhdG9ySW5kZXggPSB0YWcuaW5kZXhPZignOicpO1xuICAgIGlmIChzZXBhcmF0b3JJbmRleCA8PSAwIHx8IHNlcGFyYXRvckluZGV4ID09PSB0YWcubGVuZ3RoIC0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3Byb3BlcnR5TmFtZX0gdGFnICcke3RhZ30nIG11c3QgdXNlIHRoZSBmb3JtYXQga2V5OnZhbHVlIHdpdGggYSBub24tZW1wdHkga2V5IGFuZCB2YWx1ZWApO1xuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IHRhZy5zbGljZSgwLCBzZXBhcmF0b3JJbmRleCk7XG4gICAgaWYgKE1BTkFHRURfVEFHX0tFWVMuaGFzKGtleSkgJiYgIWFsbG93TWFuYWdlZFRhZ3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtwcm9wZXJ0eU5hbWV9IG11c3Qgbm90IHNldCBtYW5hZ2VkIHRhZyBrZXkgJyR7a2V5fSdgKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdC5oYXMoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3Byb3BlcnR5TmFtZX0gY29udGFpbnMgZHVwbGljYXRlIHRhZyBrZXkgJyR7a2V5fSdgKTtcbiAgICB9XG4gICAgcmVzdWx0LnNldChrZXksIHRhZyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gb3B0aW9uYWxUYWdzKHRhZ3M/OiBzdHJpbmdbXSk6IHsgcmVhZG9ubHkgdGFncz86IHN0cmluZ1tdIH0ge1xuICByZXR1cm4gdGFncyA9PT0gdW5kZWZpbmVkID8ge30gOiB7IHRhZ3MgfTtcbn1cbiJdfQ==
|
|
279
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Nib20tY2F0YWxvZy9jYXRhbG9nLXByb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBcUQ7QUFDckQsaURBQWlEO0FBQ2pELGdFQUFnRTtBQUNoRSwyQ0FBMkM7QUFDM0MsaURBQWlEO0FBQ2pELDZDQUE2QztBQUU3QywyQ0FBdUM7QUFDdkMsNkJBQTZCO0FBQzdCLDRDQUFvRDtBQUNwRCwwREFBcUQ7QUFDckQsMkNBQXNEO0FBUXRELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQztBQUMvQixNQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7QUFDcEUsTUFBTSxvQkFBb0IsR0FBRyxzQ0FBc0MsQ0FBQztBQUNwRSxNQUFNLHVCQUF1QixHQUFHLG1CQUFtQixDQUFDO0FBQ3BELE1BQU0sbUJBQW1CLEdBQUcsMkJBQTJCLENBQUM7QUFvRXhEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQkc7QUFDSCxNQUFhLDRCQUE2QixTQUFRLHNCQUFTO0lBQ3pELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBd0M7UUFDaEYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLGVBQWUsQ0FBQztRQUNqRCxNQUFNLGNBQWMsR0FBRyxpQ0FBYyxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUNuRixNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQyxtQkFBbUIsY0FBYyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFGLGlDQUFpQyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEQscUJBQXFCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxjQUFjLElBQUksRUFBRSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFM0UsTUFBTSxLQUFLLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsTUFBTSxhQUFhLEdBQWtDO1lBQ25ELGVBQWUsRUFBRSxLQUFLLENBQUMsT0FBTztZQUM5QixpQkFBaUIsRUFBRSxpQ0FBYyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVc7WUFDM0UsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLE9BQU87WUFDUCxJQUFJO1lBQ0osSUFBSSxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQy9CLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7U0FDdEUsQ0FBQztRQUVGLHFCQUFxQixDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RyxDQUFDOztBQXZCSCxvRUF3QkM7OztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUNHO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSxzQkFBUztJQUMvQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQThCO1FBQ3RFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsaUJBQWlCLElBQUksZUFBZSxDQUFDO1FBQ3JFLE1BQU0sY0FBYyxHQUFHLGlDQUFjLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDO1FBQ25GLGlDQUFpQyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMxRSxxQkFBcUIsQ0FBQyxtQkFBbUIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQzlELGdCQUFnQixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNuRSxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsQ0FBQyxtQkFBbUIsY0FBYyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTVGLE1BQU0sS0FBSyxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLE1BQU0sYUFBYSxHQUErQjtZQUNoRCxlQUFlLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDOUIsaUJBQWlCLEVBQUUsaUNBQWMsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXO1lBQzNFLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYztZQUNwQyxpQkFBaUI7WUFDakIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDckMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO2dCQUNoQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlO2dCQUN6QyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDNUQsSUFBSSxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUMvQixHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2FBQ3RFLENBQUMsQ0FBQztTQUNKLENBQUM7UUFFRixxQkFBcUIsQ0FDbkIsSUFBSSxFQUNKLGFBQWEsRUFDYixLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQy9GLENBQUM7SUFDSixDQUFDOztBQWhDSCxnREFpQ0M7OztBQUVELFNBQVMscUJBQXFCLENBQzVCLEtBQWdCLEVBQ2hCLGFBQWtDLEVBQ2xDLFlBQThCO0lBRTlCLE1BQU0sS0FBSyxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTlCLE1BQU0sY0FBYyxHQUFHLElBQUksTUFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRTtRQUMzRSxJQUFJLEVBQUUsb0JBQW9CO1FBQzFCLGFBQWEsRUFBRSx1QkFBdUI7UUFDdEMsT0FBTyxFQUFFLGdDQUFvQjtRQUM3QixZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNO1FBQ3hDLE9BQU8sRUFBRSxpQkFBaUI7UUFDMUIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQzFELE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7U0FDNUIsQ0FBQztRQUNGLGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUk7UUFDeEMsUUFBUSxFQUFFLHlCQUF5QixDQUFDLEtBQUssQ0FBQztRQUMxQyxhQUFhLEVBQUU7WUFDYixJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7Z0JBQ3RCLE9BQU8sRUFBRSxDQUFDLGNBQWMsQ0FBQztnQkFDekIsU0FBUyxFQUFFLENBQUMsR0FBRyxtQ0FBdUIsSUFBSSxDQUFDO2FBQzVDLENBQUM7U0FDSDtRQUNELFVBQVUsRUFBRSxHQUFHO1FBQ2YsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztLQUM3QixDQUFDLENBQUM7SUFFSCxLQUFLLE1BQU0sS0FBSyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pDLEtBQUssQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUscUJBQXFCLEVBQUU7UUFDNUMsWUFBWSxFQUFFO1lBQ1osTUFBTSxFQUFFLENBQUMsb0JBQW9CLENBQUM7WUFDOUIsVUFBVSxFQUFFLENBQUMsb0NBQW9DLENBQUM7WUFDbEQsTUFBTSxFQUFFO2dCQUNOLFVBQVUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7Z0JBQzNCLGdCQUFnQixFQUFFO29CQUNoQixNQUFNLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQztpQkFDL0M7YUFDRjtTQUNGO1FBQ0QsT0FBTyxFQUFFO1lBQ1AsSUFBSSxhQUFhLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRTtnQkFDL0MsS0FBSyxFQUFFLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDO29CQUN2QyxPQUFPLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPO29CQUNsQyxTQUFTLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO29CQUMvQyxPQUFPLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUM7b0JBQ3hELFdBQVcsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxnQ0FBZ0MsQ0FBQztvQkFDekUsYUFBYTtpQkFDZCxDQUFDO2FBQ0gsQ0FBQztTQUNIO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMseUJBQXlCLENBQUMsS0FBWTtJQUM3QyxNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDdEUsSUFBSSxnQkFBZ0IsWUFBWSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUMsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0lBQ0QsSUFBSSxnQkFBZ0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUNELE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxtQkFBbUIsRUFBRTtRQUNuRCxTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRO0tBQ3ZDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxLQUFxQjtJQUMxQyxPQUFPO1FBQ0wsVUFBVSxFQUFFLEtBQUssQ0FBQyxZQUFZO1FBQzlCLFNBQVMsRUFBRSxLQUFLLENBQUMsV0FBVztLQUM3QixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsaUNBQWlDLENBQUMsSUFBWSxFQUFFLEtBQWE7SUFDcEUsSUFBSSxtQkFBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzlCLE9BQU87SUFDVCxDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDOUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksd0NBQXdDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQUMsSUFBWSxFQUFFLEtBQWE7SUFDeEQsSUFBSSxtQkFBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzlCLE9BQU87SUFDVCxDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLDZCQUE2QixDQUFDLENBQUM7SUFDeEQsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLFFBQW1DO0lBQzNELElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxZQUFZLEVBQUUsQ0FBQztRQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxZQUFZLFdBQVcsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQ2hDLEtBQUssTUFBTSxLQUFLLElBQUksUUFBUSxFQUFFLENBQUM7UUFDN0IsaUNBQWlDLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDaEMscUJBQXFCLENBQUMsc0JBQXNCLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUUsQ0FBQztRQUNELDRCQUE0QixDQUFDLEtBQUssQ0FBQyxjQUFjLElBQUksRUFBRSxFQUFFLDZCQUE2QixLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNyRyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLEtBQUssQ0FBQyxJQUFJLHdDQUF3QyxDQUFDLENBQUM7UUFDckYsQ0FBQztRQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsVUFBcUIsRUFBRSxjQUF5QjtJQUNqRSxJQUFJLFVBQVUsS0FBSyxTQUFTLElBQUksY0FBYyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzdELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyw0QkFBNEIsQ0FBQyxVQUFVLElBQUksRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsRixNQUFNLFVBQVUsR0FBRyw0QkFBNEIsQ0FBQyxjQUFjLElBQUksRUFBRSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDeEYsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLFVBQVU7UUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxRCxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBRUQsU0FBUyw0QkFBNEIsQ0FDbkMsSUFBYyxFQUNkLFlBQW9CLEVBQ3BCLGdCQUFnQixHQUFHLEtBQUs7SUFFeEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDekMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLElBQUksY0FBYyxJQUFJLENBQUMsSUFBSSxjQUFjLEtBQUssR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM3RCxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsWUFBWSxTQUFTLEdBQUcsZ0VBQWdFLENBQUMsQ0FBQztRQUMvRyxDQUFDO1FBRUQsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDekMsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ25ELE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxZQUFZLGtDQUFrQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsWUFBWSxnQ0FBZ0MsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBQ0QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxJQUFlO0lBQ25DLE9BQU8sSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiwgU3RhY2ssIFRva2VuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgZXZlbnRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0ICogYXMgZXZlbnRzVGFyZ2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHMnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgKiBhcyBzM0Fzc2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtYXNzZXRzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IERFRkFVTFRfTk9ERV9SVU5USU1FIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFJpb0xhbmRpbmdab25lIH0gZnJvbSAnLi4vcmlvLWxhbmRpbmctem9uZSc7XG5pbXBvcnQgeyBTQk9NX0NBVEFMT0dfQlVDS0VUX0FSTiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHtcbiAgQXNzZXRMb2NhdGlvbixcbiAgQ2F0YWxvZ1VwbG9hZENvbmZpZ3VyYXRpb24sXG4gIFN0YW5kYWxvbmVVcGxvYWRDb25maWd1cmF0aW9uLFxuICBVcGxvYWRDb25maWd1cmF0aW9uLFxufSBmcm9tICcuL2xhbWJkYS90eXBlcyc7XG5cbmNvbnN0IERFRkFVTFRfVkVSU0lPTiA9ICdtYWluJztcbmNvbnN0IE1BWF9DSElMRFJFTiA9IDM7XG5jb25zdCBNQU5BR0VEX1RBR19LRVlTID0gbmV3IFNldChbJ2FjY291bnRfaWQnLCAndGVhbV9pZGVudGlmaWVyJ10pO1xuY29uc3QgVVBMT0FEX0ZVTkNUSU9OX1VVSUQgPSAnZDIwYjlmNDYtMDcwMi00N2RkLTg5YzItOWVhNGJkZGFhY2ZjJztcbmNvbnN0IFVQTE9BRF9GVU5DVElPTl9QVVJQT1NFID0gJ1Nib21DYXRhbG9nVXBsb2FkJztcbmNvbnN0IFVQTE9BRF9MT0dfR1JPVVBfSUQgPSAnU2JvbUNhdGFsb2dVcGxvYWRMb2dHcm91cCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhbmRhbG9uZVNib21DYXRhbG9nUHJvamVjdFByb3BzIHtcbiAgLyoqIE11c3QgYmUgbm9uLWVtcHR5IGFuZCBtdXN0IG5vdCBjb250YWluIGAvYC4gKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKiBQcm9qZWN0IHZlcnNpb24uIERlZmF1bHRzIHRvIGBtYWluYC4gKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBwcm9qZWN0IHRhZ3MgdXNpbmcgdGhlIGBrZXk6dmFsdWVgIGZvcm1hdC5cbiAgICpcbiAgICogYHRlYW1faWRlbnRpZmllcmAgaXMgYWx3YXlzIGFkZGVkIGZyb20gdGhlIFJJTyBMYW5kaW5nIFpvbmUgY29uZmlndXJhdGlvbi4gRG8gbm90IHByb3ZpZGUgYHRlYW1faWRlbnRpZmllcmAgb3JcbiAgICogYGFjY291bnRfaWRgOyBib3RoIGFyZSBtYW5hZ2VkIHRhZyBrZXlzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFRhZ3M/OiBzdHJpbmdbXTtcblxuICAvKiogSlNPTiBTQk9NIGZpbGUgYXNzZXQgdG8gdXBsb2FkLiAqL1xuICByZWFkb25seSBzYm9tOiBzM0Fzc2V0cy5Bc3NldDtcblxuICAvKiogT3B0aW9uYWwgSlNPTiBWRVggZmlsZSBhc3NldCB0byB1cGxvYWQuICovXG4gIHJlYWRvbmx5IHZleD86IHMzQXNzZXRzLkFzc2V0O1xufVxuXG4vKiogQSBjaGlsZCBwcm9qZWN0IGluIGFuIFNCT00gY2F0YWxvZyBjb2xsZWN0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYm9tQ2F0YWxvZ1Byb2plY3RDaGlsZCB7XG4gIC8qKlxuICAgKiBNdXN0IGJlIG5vbi1lbXB0eSwgdW5pcXVlIHdpdGhpbiB0aGUgY29sbGVjdGlvbiwgYW5kIG11c3Qgbm90IGNvbnRhaW4gYC9gLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKiBDaGlsZCBwcm9qZWN0IHZlcnNpb24uIERlZmF1bHRzIHRvIGBtYWluYC4gKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGFncyBhZGRlZCB0byB0aGlzIGNoaWxkLCB1c2luZyB0aGUgYGtleTp2YWx1ZWAgZm9ybWF0LlxuICAgKlxuICAgKiBDaGlsZCB0YWdzIG92ZXJyaWRlIHNoYXJlZCB0YWdzIHdpdGggdGhlIHNhbWUga2V5LiBgdGVhbV9pZGVudGlmaWVyYCBpcyBhbHdheXMgaW5oZXJpdGVkIGZyb20gdGhlIFJJTyBMYW5kaW5nIFpvbmVcbiAgICogY29uZmlndXJhdGlvbi4gRG8gbm90IHByb3ZpZGUgYHRlYW1faWRlbnRpZmllcmAgb3IgYGFjY291bnRfaWRgOyBib3RoIGFyZSBtYW5hZ2VkIHRhZyBrZXlzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFRhZ3M/OiBzdHJpbmdbXTtcblxuICAvKiogSlNPTiBTQk9NIGZpbGUgYXNzZXQgdG8gdXBsb2FkLiAqL1xuICByZWFkb25seSBzYm9tOiBzM0Fzc2V0cy5Bc3NldDtcblxuICAvKiogT3B0aW9uYWwgSlNPTiBWRVggZmlsZSBhc3NldCB0byB1cGxvYWQuICovXG4gIHJlYWRvbmx5IHZleD86IHMzQXNzZXRzLkFzc2V0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNib21DYXRhbG9nUHJvamVjdFByb3BzIHtcbiAgLyoqIENvbGxlY3Rpb24gbmFtZSBzdG9yZWQgaW4gdGhlIG1hbmlmZXN0IGFuZCB1c2VkIGluIHRoZSBkZXN0aW5hdGlvbiBrZXkuICovXG4gIHJlYWRvbmx5IGNvbGxlY3Rpb25OYW1lOiBzdHJpbmc7XG5cbiAgLyoqIENvbGxlY3Rpb24gdmVyc2lvbi4gRGVmYXVsdHMgdG8gYG1haW5gLiAqL1xuICByZWFkb25seSBjb2xsZWN0aW9uVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGFncyBpbmhlcml0ZWQgYnkgZXZlcnkgY2hpbGQsIHVzaW5nIHRoZSBga2V5OnZhbHVlYCBmb3JtYXQuXG4gICAqXG4gICAqIEEgY2hpbGQncyBhZGRpdGlvbmFsIHRhZ3Mgb3ZlcnJpZGUgc2hhcmVkIHRhZ3Mgd2l0aCB0aGUgc2FtZSBrZXkuIGB0ZWFtX2lkZW50aWZpZXJgIGlzIGFsd2F5cyBhZGRlZCBmcm9tIHRoZSBSSU9cbiAgICogTGFuZGluZyBab25lIGNvbmZpZ3VyYXRpb24uIERvIG5vdCBwcm92aWRlIGB0ZWFtX2lkZW50aWZpZXJgIG9yIGBhY2NvdW50X2lkYDsgYm90aCBhcmUgbWFuYWdlZCB0YWcga2V5cy5cbiAgICovXG4gIHJlYWRvbmx5IHNoYXJlZFRhZ3M/OiBzdHJpbmdbXTtcblxuICAvKiogQ2hpbGQgY2F0YWxvZyBwcm9qZWN0cy4gTXVzdCBjb250YWluIGJldHdlZW4gb25lIGFuZCB0aHJlZSBwcm9qZWN0cy4gKi9cbiAgcmVhZG9ubHkgY2hpbGRyZW46IFNib21DYXRhbG9nUHJvamVjdENoaWxkW107XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIG9uZSBwcm9qZWN0J3MgU0JPTSBhbmQgb3B0aW9uYWwgVkVYIGluIHRoZSBjZW50cmFsIFNCT00gY2F0YWxvZy5cbiAqXG4gKiBVc2UgdGhpcyBjb25zdHJ1Y3Qgd2hlbiBhIHN0YWNrIG93bnMgb25lIGluZGVwZW5kZW50bHkgdmVyc2lvbmVkIHByb2plY3QuIFRoZSBmaWxlcyBhcmUgdXBsb2FkZWQgYWZ0ZXIgdGhlIHN0YWNrXG4gKiByZWFjaGVzIGBDUkVBVEVfQ09NUExFVEVgIG9yIGBVUERBVEVfQ09NUExFVEVgLiBUaGUgRXZlbnRCcmlkZ2UgZXZlbnQgdGltZSBhbmQgSUQgaWRlbnRpZnkgdGhlIHVwbG9hZC5cbiAqXG4gKiBUaGUgY29uc3RydWN0IGF1dG9tYXRpY2FsbHkgYWRkcyB0aGUgUklPIExhbmRpbmcgWm9uZSBgdGVhbV9pZGVudGlmaWVyYCB0YWcgYW5kIGdyYW50cyB0aGUgZ2VuZXJhdGVkIHVwbG9hZCBMYW1iZGFcbiAqIHBlcm1pc3Npb24gdG8gcmVhZCB0aGUgc291cmNlIGFzc2V0cyBhbmQgd3JpdGUgdGhlbSB0byB0aGUgY2VudHJhbCBjYXRhbG9nIGJ1Y2tldC4gQWxsIFNCT00gY2F0YWxvZyBjb25zdHJ1Y3RzIGluXG4gKiB0aGUgc2FtZSBzdGFjayByZXVzZSBvbmUgdXBsb2FkIExhbWJkYS5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgdHNcbiAqIGNvbnN0IHNib20gPSBuZXcgczNBc3NldHMuQXNzZXQodGhpcywgJ1Nib21Bc3NldCcsIHtcbiAqICAgcGF0aDogJ2J1aWxkL3Nib20uanNvbicsXG4gKiB9KTtcbiAqIGNvbnN0IHZleCA9IG5ldyBzM0Fzc2V0cy5Bc3NldCh0aGlzLCAnVmV4QXNzZXQnLCB7XG4gKiAgIHBhdGg6ICdidWlsZC92ZXguanNvbicsXG4gKiB9KTtcbiAqXG4gKiBuZXcgU3RhbmRhbG9uZVNib21DYXRhbG9nUHJvamVjdCh0aGlzLCAnQ2F0YWxvZ1VwbG9hZCcsIHtcbiAqICAgbmFtZTogJ2JpbGxpbmctYXBpJyxcbiAqICAgdmVyc2lvbjogJzEuNC4wJyxcbiAqICAgYWRkaXRpb25hbFRhZ3M6IFsnY29tcG9uZW50OmJhY2tlbmQnXSxcbiAqICAgc2JvbSxcbiAqICAgdmV4LFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFN0YW5kYWxvbmVTYm9tQ2F0YWxvZ1Byb2plY3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3RhbmRhbG9uZVNib21DYXRhbG9nUHJvamVjdFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHZlcnNpb24gPSBwcm9wcy52ZXJzaW9uID8/IERFRkFVTFRfVkVSU0lPTjtcbiAgICBjb25zdCB0ZWFtSWRlbnRpZmllciA9IFJpb0xhbmRpbmdab25lLmdldFRlYW1JZGVudGlmaWVyUGFyYW1ldGVyKHRoaXMpLnN0cmluZ1ZhbHVlO1xuICAgIGNvbnN0IHRhZ3MgPSBtZXJnZVRhZ3MoW2B0ZWFtX2lkZW50aWZpZXI6JHt0ZWFtSWRlbnRpZmllcn1gXSwgcHJvcHMuYWRkaXRpb25hbFRhZ3MpID8/IFtdO1xuICAgIGFzc2VydE5vbkVtcHR5VmFsdWVXaXRob3V0U2xhc2hlcygnbmFtZScsIHByb3BzLm5hbWUpO1xuICAgIGFzc2VydE5vbkVtcHR5VmVyc2lvbigndmVyc2lvbicsIHZlcnNpb24pO1xuICAgIHBhcnNlVGFnc1dpdGhWYWxpZFVuaXF1ZUtleXMocHJvcHMuYWRkaXRpb25hbFRhZ3MgPz8gW10sICdhZGRpdGlvbmFsVGFncycpO1xuXG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZih0aGlzKTtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uOiBTdGFuZGFsb25lVXBsb2FkQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIG9yaWdpbkFjY291bnRJZDogc3RhY2suYWNjb3VudCxcbiAgICAgIG9yaWdpbkFjY291bnROYW1lOiBSaW9MYW5kaW5nWm9uZS5nZXRBY2NvdW50TmFtZVBhcmFtZXRlcih0aGlzKS5zdHJpbmdWYWx1ZSxcbiAgICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgICB2ZXJzaW9uLFxuICAgICAgdGFncyxcbiAgICAgIHNib206IGFzc2V0TG9jYXRpb24ocHJvcHMuc2JvbSksXG4gICAgICAuLi4ocHJvcHMudmV4ID09PSB1bmRlZmluZWQgPyB7fSA6IHsgdmV4OiBhc3NldExvY2F0aW9uKHByb3BzLnZleCkgfSksXG4gICAgfTtcblxuICAgIGNyZWF0ZVVwbG9hZFJlc291cmNlcyh0aGlzLCBjb25maWd1cmF0aW9uLCBbcHJvcHMuc2JvbSwgLi4uKHByb3BzLnZleCA9PT0gdW5kZWZpbmVkID8gW10gOiBbcHJvcHMudmV4XSldKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBhIGNvbGxlY3Rpb24gb2YgcmVsYXRlZCBwcm9qZWN0IFNCT01zIGFuZCBvcHRpb25hbCBWRVggZmlsZXMgaW4gdGhlIGNlbnRyYWwgU0JPTSBjYXRhbG9nLlxuICpcbiAqIFVzZSB0aGlzIGNvbnN0cnVjdCB3aGVuIG9uZSBzdGFjayBwcm9kdWNlcyBiZXR3ZWVuIG9uZSBhbmQgdGhyZWUgcmVsYXRlZCBwcm9qZWN0cyB0aGF0IHNob3VsZCBzaGFyZSBhIGNhdGFsb2dcbiAqIGNvbGxlY3Rpb24uIFNoYXJlZCB0YWdzIGFyZSBpbmhlcml0ZWQgYnkgZXZlcnkgY2hpbGQsIHdoaWxlIGNoaWxkIHRhZ3Mgd2l0aCB0aGUgc2FtZSBrZXkgb3ZlcnJpZGUgdGhlbS4gVGhlIFJJT1xuICogTGFuZGluZyBab25lIGB0ZWFtX2lkZW50aWZpZXJgIHRhZyBpcyBhbHdheXMgaW5jbHVkZWQuXG4gKlxuICogVGhlIGZpbGVzIGFyZSB1cGxvYWRlZCBhZnRlciB0aGUgc3RhY2sgcmVhY2hlcyBgQ1JFQVRFX0NPTVBMRVRFYCBvciBgVVBEQVRFX0NPTVBMRVRFYC4gVGhlIEV2ZW50QnJpZGdlIGV2ZW50IHRpbWVcbiAqIGFuZCBJRCBpZGVudGlmeSB0aGUgdXBsb2FkLiBBbGwgU0JPTSBjYXRhbG9nIGNvbnN0cnVjdHMgaW4gdGhlIHNhbWUgc3RhY2sgcmV1c2Ugb25lIHVwbG9hZCBMYW1iZGEuXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYHRzXG4gKiBjb25zdCBhcGlTYm9tID0gbmV3IHMzQXNzZXRzLkFzc2V0KHRoaXMsICdBcGlTYm9tQXNzZXQnLCB7XG4gKiAgIHBhdGg6ICdidWlsZC9hcGktc2JvbS5qc29uJyxcbiAqIH0pO1xuICogY29uc3QgaW5mcmFzdHJ1Y3R1cmVTYm9tID0gbmV3IHMzQXNzZXRzLkFzc2V0KHRoaXMsICdJbmZyYXN0cnVjdHVyZVNib21Bc3NldCcsIHtcbiAqICAgcGF0aDogJ2J1aWxkL2luZnJhc3RydWN0dXJlLXNib20uanNvbicsXG4gKiB9KTtcbiAqXG4gKiBuZXcgU2JvbUNhdGFsb2dQcm9qZWN0KHRoaXMsICdDYXRhbG9nVXBsb2FkJywge1xuICogICBjb2xsZWN0aW9uTmFtZTogJ2JpbGxpbmcnLFxuICogICBjb2xsZWN0aW9uVmVyc2lvbjogJzEuNC4wJyxcbiAqICAgc2hhcmVkVGFnczogWydkb21haW46YmlsbGluZyddLFxuICogICBjaGlsZHJlbjogW1xuICogICAgIHtcbiAqICAgICAgIG5hbWU6ICdhcGknLFxuICogICAgICAgc2JvbTogYXBpU2JvbSxcbiAqICAgICAgIGFkZGl0aW9uYWxUYWdzOiBbJ2NvbXBvbmVudDpiYWNrZW5kJ10sXG4gKiAgICAgfSxcbiAqICAgICB7XG4gKiAgICAgICBuYW1lOiAnaW5mcmFzdHJ1Y3R1cmUnLFxuICogICAgICAgc2JvbTogaW5mcmFzdHJ1Y3R1cmVTYm9tLFxuICogICAgICAgYWRkaXRpb25hbFRhZ3M6IFsnY29tcG9uZW50OmluZnJhc3RydWN0dXJlJ10sXG4gKiAgICAgfSxcbiAqICAgXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBTYm9tQ2F0YWxvZ1Byb2plY3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU2JvbUNhdGFsb2dQcm9qZWN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgY29sbGVjdGlvblZlcnNpb24gPSBwcm9wcy5jb2xsZWN0aW9uVmVyc2lvbiA/PyBERUZBVUxUX1ZFUlNJT047XG4gICAgY29uc3QgdGVhbUlkZW50aWZpZXIgPSBSaW9MYW5kaW5nWm9uZS5nZXRUZWFtSWRlbnRpZmllclBhcmFtZXRlcih0aGlzKS5zdHJpbmdWYWx1ZTtcbiAgICBhc3NlcnROb25FbXB0eVZhbHVlV2l0aG91dFNsYXNoZXMoJ2NvbGxlY3Rpb25OYW1lJywgcHJvcHMuY29sbGVjdGlvbk5hbWUpO1xuICAgIGFzc2VydE5vbkVtcHR5VmVyc2lvbignY29sbGVjdGlvblZlcnNpb24nLCBjb2xsZWN0aW9uVmVyc2lvbik7XG4gICAgdmFsaWRhdGVDaGlsZHJlbihwcm9wcy5jaGlsZHJlbik7XG4gICAgcGFyc2VUYWdzV2l0aFZhbGlkVW5pcXVlS2V5cyhwcm9wcy5zaGFyZWRUYWdzID8/IFtdLCAnc2hhcmVkVGFncycpO1xuICAgIGNvbnN0IHNoYXJlZFRhZ3MgPSBtZXJnZVRhZ3MoW2B0ZWFtX2lkZW50aWZpZXI6JHt0ZWFtSWRlbnRpZmllcn1gXSwgcHJvcHMuc2hhcmVkVGFncykgPz8gW107XG5cbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHRoaXMpO1xuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb246IENhdGFsb2dVcGxvYWRDb25maWd1cmF0aW9uID0ge1xuICAgICAgb3JpZ2luQWNjb3VudElkOiBzdGFjay5hY2NvdW50LFxuICAgICAgb3JpZ2luQWNjb3VudE5hbWU6IFJpb0xhbmRpbmdab25lLmdldEFjY291bnROYW1lUGFyYW1ldGVyKHRoaXMpLnN0cmluZ1ZhbHVlLFxuICAgICAgY29sbGVjdGlvbk5hbWU6IHByb3BzLmNvbGxlY3Rpb25OYW1lLFxuICAgICAgY29sbGVjdGlvblZlcnNpb24sXG4gICAgICBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4ubWFwKGNoaWxkID0+ICh7XG4gICAgICAgIG5hbWU6IGNoaWxkLm5hbWUsXG4gICAgICAgIHZlcnNpb246IGNoaWxkLnZlcnNpb24gPz8gREVGQVVMVF9WRVJTSU9OLFxuICAgICAgICAuLi5vcHRpb25hbFRhZ3MobWVyZ2VUYWdzKHNoYXJlZFRhZ3MsIGNoaWxkLmFkZGl0aW9uYWxUYWdzKSksXG4gICAgICAgIHNib206IGFzc2V0TG9jYXRpb24oY2hpbGQuc2JvbSksXG4gICAgICAgIC4uLihjaGlsZC52ZXggPT09IHVuZGVmaW5lZCA/IHt9IDogeyB2ZXg6IGFzc2V0TG9jYXRpb24oY2hpbGQudmV4KSB9KSxcbiAgICAgIH0pKSxcbiAgICB9O1xuXG4gICAgY3JlYXRlVXBsb2FkUmVzb3VyY2VzKFxuICAgICAgdGhpcyxcbiAgICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgICBwcm9wcy5jaGlsZHJlbi5mbGF0TWFwKGNoaWxkID0+IFtjaGlsZC5zYm9tLCAuLi4oY2hpbGQudmV4ID09PSB1bmRlZmluZWQgPyBbXSA6IFtjaGlsZC52ZXhdKV0pXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVVcGxvYWRSZXNvdXJjZXMoXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXG4gIGNvbmZpZ3VyYXRpb246IFVwbG9hZENvbmZpZ3VyYXRpb24sXG4gIHNvdXJjZUFzc2V0czogczNBc3NldHMuQXNzZXRbXVxuKTogdm9pZCB7XG4gIGNvbnN0IHN0YWNrID0gU3RhY2sub2Yoc2NvcGUpO1xuXG4gIGNvbnN0IHVwbG9hZEZ1bmN0aW9uID0gbmV3IGxhbWJkYS5TaW5nbGV0b25GdW5jdGlvbihzY29wZSwgJ1VwbG9hZEZ1bmN0aW9uJywge1xuICAgIHV1aWQ6IFVQTE9BRF9GVU5DVElPTl9VVUlELFxuICAgIGxhbWJkYVB1cnBvc2U6IFVQTE9BRF9GVU5DVElPTl9QVVJQT1NFLFxuICAgIHJ1bnRpbWU6IERFRkFVTFRfTk9ERV9SVU5USU1FLFxuICAgIGFyY2hpdGVjdHVyZTogbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgaGFuZGxlcjogJ2hhbmRsZXIuaGFuZGxlcicsXG4gICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICdsYW1iZGEnKSwge1xuICAgICAgZXhjbHVkZTogWycqLmpzJywgJyouZC50cyddLFxuICAgIH0pLFxuICAgIGxvZ2dpbmdGb3JtYXQ6IGxhbWJkYS5Mb2dnaW5nRm9ybWF0LkpTT04sXG4gICAgbG9nR3JvdXA6IGdldE9yQ3JlYXRlVXBsb2FkTG9nR3JvdXAoc3RhY2spLFxuICAgIGluaXRpYWxQb2xpY3k6IFtcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogWydzMzpQdXRPYmplY3QnXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbYCR7U0JPTV9DQVRBTE9HX0JVQ0tFVF9BUk59LypgXSxcbiAgICAgIH0pLFxuICAgIF0sXG4gICAgbWVtb3J5U2l6ZTogMjU2LFxuICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gIH0pO1xuXG4gIGZvciAoY29uc3QgYXNzZXQgb2Ygc291cmNlQXNzZXRzKSB7XG4gICAgYXNzZXQuZ3JhbnRSZWFkKHVwbG9hZEZ1bmN0aW9uKTtcbiAgfVxuXG4gIG5ldyBldmVudHMuUnVsZShzY29wZSwgJ1N0YWNrQ29tcGxldGlvblJ1bGUnLCB7XG4gICAgZXZlbnRQYXR0ZXJuOiB7XG4gICAgICBzb3VyY2U6IFsnYXdzLmNsb3VkZm9ybWF0aW9uJ10sXG4gICAgICBkZXRhaWxUeXBlOiBbJ0Nsb3VkRm9ybWF0aW9uIFN0YWNrIFN0YXR1cyBDaGFuZ2UnXSxcbiAgICAgIGRldGFpbDoge1xuICAgICAgICAnc3RhY2staWQnOiBbc3RhY2suc3RhY2tJZF0sXG4gICAgICAgICdzdGF0dXMtZGV0YWlscyc6IHtcbiAgICAgICAgICBzdGF0dXM6IFsnQ1JFQVRFX0NPTVBMRVRFJywgJ1VQREFURV9DT01QTEVURSddLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIHRhcmdldHM6IFtcbiAgICAgIG5ldyBldmVudHNUYXJnZXRzLkxhbWJkYUZ1bmN0aW9uKHVwbG9hZEZ1bmN0aW9uLCB7XG4gICAgICAgIGV2ZW50OiBldmVudHMuUnVsZVRhcmdldElucHV0LmZyb21PYmplY3Qoe1xuICAgICAgICAgIGV2ZW50SWQ6IGV2ZW50cy5FdmVudEZpZWxkLmV2ZW50SWQsXG4gICAgICAgICAgZXZlbnRUaW1lOiBldmVudHMuRXZlbnRGaWVsZC5mcm9tUGF0aCgnJC50aW1lJyksXG4gICAgICAgICAgc3RhY2tJZDogZXZlbnRzLkV2ZW50RmllbGQuZnJvbVBhdGgoJyQuZGV0YWlsLnN0YWNrLWlkJyksXG4gICAgICAgICAgc3RhY2tTdGF0dXM6IGV2ZW50cy5FdmVudEZpZWxkLmZyb21QYXRoKCckLmRldGFpbC5zdGF0dXMtZGV0YWlscy5zdGF0dXMnKSxcbiAgICAgICAgICBjb25maWd1cmF0aW9uLFxuICAgICAgICB9KSxcbiAgICAgIH0pLFxuICAgIF0sXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRPckNyZWF0ZVVwbG9hZExvZ0dyb3VwKHN0YWNrOiBTdGFjayk6IGxvZ3MuTG9nR3JvdXAge1xuICBjb25zdCBleGlzdGluZ0xvZ0dyb3VwID0gc3RhY2subm9kZS50cnlGaW5kQ2hpbGQoVVBMT0FEX0xPR19HUk9VUF9JRCk7XG4gIGlmIChleGlzdGluZ0xvZ0dyb3VwIGluc3RhbmNlb2YgbG9ncy5Mb2dHcm91cCkge1xuICAgIHJldHVybiBleGlzdGluZ0xvZ0dyb3VwO1xuICB9XG4gIGlmIChleGlzdGluZ0xvZ0dyb3VwICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0YWNrIGFscmVhZHkgY29udGFpbnMgYSBjb25zdHJ1Y3QgbmFtZWQgJyR7VVBMT0FEX0xPR19HUk9VUF9JRH0nYCk7XG4gIH1cbiAgcmV0dXJuIG5ldyBsb2dzLkxvZ0dyb3VwKHN0YWNrLCBVUExPQURfTE9HX0dST1VQX0lELCB7XG4gICAgcmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuT05FX1dFRUssXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhc3NldExvY2F0aW9uKGFzc2V0OiBzM0Fzc2V0cy5Bc3NldCk6IEFzc2V0TG9jYXRpb24ge1xuICByZXR1cm4ge1xuICAgIGJ1Y2tldE5hbWU6IGFzc2V0LnMzQnVja2V0TmFtZSxcbiAgICBvYmplY3RLZXk6IGFzc2V0LnMzT2JqZWN0S2V5LFxuICB9O1xufVxuXG5mdW5jdGlvbiBhc3NlcnROb25FbXB0eVZhbHVlV2l0aG91dFNsYXNoZXMobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICh2YWx1ZS5sZW5ndGggPT09IDAgfHwgdmFsdWUuaW5jbHVkZXMoJy8nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lfSBtdXN0IGJlIGEgbm9uLWVtcHR5IHZhbHVlIHdpdGhvdXQgJy8nYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0Tm9uRW1wdHlWZXJzaW9uKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHZhbHVlKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWV9IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVDaGlsZHJlbihjaGlsZHJlbjogU2JvbUNhdGFsb2dQcm9qZWN0Q2hpbGRbXSk6IHZvaWQge1xuICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjaGlsZHJlbiBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHByb2plY3QnKTtcbiAgfVxuICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gTUFYX0NISUxEUkVOKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjaGlsZHJlbiBtdXN0IGNvbnRhaW4gYXQgbW9zdCAke01BWF9DSElMRFJFTn0gcHJvamVjdHNgKTtcbiAgfVxuXG4gIGNvbnN0IG5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICBhc3NlcnROb25FbXB0eVZhbHVlV2l0aG91dFNsYXNoZXMoJ2NoaWxkIG5hbWUnLCBjaGlsZC5uYW1lKTtcbiAgICBpZiAoY2hpbGQudmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhc3NlcnROb25FbXB0eVZlcnNpb24oYHZlcnNpb24gZm9yIGNoaWxkICcke2NoaWxkLm5hbWV9J2AsIGNoaWxkLnZlcnNpb24pO1xuICAgIH1cbiAgICBwYXJzZVRhZ3NXaXRoVmFsaWRVbmlxdWVLZXlzKGNoaWxkLmFkZGl0aW9uYWxUYWdzID8/IFtdLCBgYWRkaXRpb25hbFRhZ3MgZm9yIGNoaWxkICcke2NoaWxkLm5hbWV9J2ApO1xuICAgIGlmIChuYW1lcy5oYXMoY2hpbGQubmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgY2hpbGQgbmFtZSAnJHtjaGlsZC5uYW1lfScgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBjb2xsZWN0aW9uYCk7XG4gICAgfVxuICAgIG5hbWVzLmFkZChjaGlsZC5uYW1lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZVRhZ3Moc2hhcmVkVGFncz86IHN0cmluZ1tdLCBhZGRpdGlvbmFsVGFncz86IHN0cmluZ1tdKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICBpZiAoc2hhcmVkVGFncyA9PT0gdW5kZWZpbmVkICYmIGFkZGl0aW9uYWxUYWdzID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3Qgc2hhcmVkID0gcGFyc2VUYWdzV2l0aFZhbGlkVW5pcXVlS2V5cyhzaGFyZWRUYWdzID8/IFtdLCAnc2hhcmVkVGFncycsIHRydWUpO1xuICBjb25zdCBhZGRpdGlvbmFsID0gcGFyc2VUYWdzV2l0aFZhbGlkVW5pcXVlS2V5cyhhZGRpdGlvbmFsVGFncyA/PyBbXSwgJ2FkZGl0aW9uYWxUYWdzJyk7XG4gIGNvbnN0IG1lcmdlZCA9IG5ldyBNYXAoc2hhcmVkKTtcbiAgZm9yIChjb25zdCBba2V5LCB0YWddIG9mIGFkZGl0aW9uYWwpIG1lcmdlZC5zZXQoa2V5LCB0YWcpO1xuICByZXR1cm4gWy4uLm1lcmdlZC52YWx1ZXMoKV07XG59XG5cbmZ1bmN0aW9uIHBhcnNlVGFnc1dpdGhWYWxpZFVuaXF1ZUtleXMoXG4gIHRhZ3M6IHN0cmluZ1tdLFxuICBwcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgYWxsb3dNYW5hZ2VkVGFncyA9IGZhbHNlXG4pOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCB0YWcgb2YgdGFncykge1xuICAgIGNvbnN0IHNlcGFyYXRvckluZGV4ID0gdGFnLmluZGV4T2YoJzonKTtcbiAgICBpZiAoc2VwYXJhdG9ySW5kZXggPD0gMCB8fCBzZXBhcmF0b3JJbmRleCA9PT0gdGFnLmxlbmd0aCAtIDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtwcm9wZXJ0eU5hbWV9IHRhZyAnJHt0YWd9JyBtdXN0IHVzZSB0aGUgZm9ybWF0IGtleTp2YWx1ZSB3aXRoIGEgbm9uLWVtcHR5IGtleSBhbmQgdmFsdWVgKTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSB0YWcuc2xpY2UoMCwgc2VwYXJhdG9ySW5kZXgpO1xuICAgIGlmIChNQU5BR0VEX1RBR19LRVlTLmhhcyhrZXkpICYmICFhbGxvd01hbmFnZWRUYWdzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cHJvcGVydHlOYW1lfSBtdXN0IG5vdCBzZXQgbWFuYWdlZCB0YWcga2V5ICcke2tleX0nYCk7XG4gICAgfVxuICAgIGlmIChyZXN1bHQuaGFzKGtleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtwcm9wZXJ0eU5hbWV9IGNvbnRhaW5zIGR1cGxpY2F0ZSB0YWcga2V5ICcke2tleX0nYCk7XG4gICAgfVxuICAgIHJlc3VsdC5zZXQoa2V5LCB0YWcpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIG9wdGlvbmFsVGFncyh0YWdzPzogc3RyaW5nW10pOiB7IHJlYWRvbmx5IHRhZ3M/OiBzdHJpbmdbXSB9IHtcbiAgcmV0dXJuIHRhZ3MgPT09IHVuZGVmaW5lZCA/IHt9IDogeyB0YWdzIH07XG59XG4iXX0=
|
|
@@ -1002,17 +1002,17 @@ var init_schemaDeserializationMiddleware = __esm({
|
|
|
1002
1002
|
response,
|
|
1003
1003
|
output: parsed
|
|
1004
1004
|
};
|
|
1005
|
-
} catch (
|
|
1006
|
-
Object.defineProperty(
|
|
1005
|
+
} catch (error3) {
|
|
1006
|
+
Object.defineProperty(error3, "$response", {
|
|
1007
1007
|
value: response,
|
|
1008
1008
|
enumerable: false,
|
|
1009
1009
|
writable: false,
|
|
1010
1010
|
configurable: false
|
|
1011
1011
|
});
|
|
1012
|
-
if (!("$metadata" in
|
|
1012
|
+
if (!("$metadata" in error3)) {
|
|
1013
1013
|
const hint = `Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object.`;
|
|
1014
1014
|
try {
|
|
1015
|
-
|
|
1015
|
+
error3.message += "\n " + hint;
|
|
1016
1016
|
} catch (ignored) {
|
|
1017
1017
|
if (!context.logger || context.logger?.constructor?.name === "NoOpLogger") {
|
|
1018
1018
|
console.warn(hint);
|
|
@@ -1020,16 +1020,16 @@ var init_schemaDeserializationMiddleware = __esm({
|
|
|
1020
1020
|
context.logger?.warn?.(hint);
|
|
1021
1021
|
}
|
|
1022
1022
|
}
|
|
1023
|
-
if (typeof
|
|
1024
|
-
if (
|
|
1025
|
-
|
|
1023
|
+
if (typeof error3.$responseBodyText !== "undefined") {
|
|
1024
|
+
if (error3.$response) {
|
|
1025
|
+
error3.$response.body = error3.$responseBodyText;
|
|
1026
1026
|
}
|
|
1027
1027
|
}
|
|
1028
1028
|
try {
|
|
1029
1029
|
if (HttpResponse.isInstance(response)) {
|
|
1030
1030
|
const { headers = {}, statusCode } = response;
|
|
1031
1031
|
const headerEntries = Object.entries(headers);
|
|
1032
|
-
|
|
1032
|
+
error3.$metadata = {
|
|
1033
1033
|
httpStatusCode: statusCode,
|
|
1034
1034
|
requestId: findHeader(/^x-[\w-]+-request-?id$/, headerEntries),
|
|
1035
1035
|
extendedRequestId: findHeader(/^x-[\w-]+-id-2$/, headerEntries),
|
|
@@ -1039,7 +1039,7 @@ var init_schemaDeserializationMiddleware = __esm({
|
|
|
1039
1039
|
} catch (ignored) {
|
|
1040
1040
|
}
|
|
1041
1041
|
}
|
|
1042
|
-
throw
|
|
1042
|
+
throw error3;
|
|
1043
1043
|
}
|
|
1044
1044
|
};
|
|
1045
1045
|
findHeader = (pattern, headers) => {
|
|
@@ -3530,17 +3530,17 @@ var init_deserializerMiddleware = __esm({
|
|
|
3530
3530
|
response,
|
|
3531
3531
|
output: parsed
|
|
3532
3532
|
};
|
|
3533
|
-
} catch (
|
|
3534
|
-
Object.defineProperty(
|
|
3533
|
+
} catch (error3) {
|
|
3534
|
+
Object.defineProperty(error3, "$response", {
|
|
3535
3535
|
value: response,
|
|
3536
3536
|
enumerable: false,
|
|
3537
3537
|
writable: false,
|
|
3538
3538
|
configurable: false
|
|
3539
3539
|
});
|
|
3540
|
-
if (!("$metadata" in
|
|
3540
|
+
if (!("$metadata" in error3)) {
|
|
3541
3541
|
const hint = `Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object.`;
|
|
3542
3542
|
try {
|
|
3543
|
-
|
|
3543
|
+
error3.message += "\n " + hint;
|
|
3544
3544
|
} catch (ignored) {
|
|
3545
3545
|
if (!context.logger || context.logger?.constructor?.name === "NoOpLogger") {
|
|
3546
3546
|
console.warn(hint);
|
|
@@ -3548,16 +3548,16 @@ var init_deserializerMiddleware = __esm({
|
|
|
3548
3548
|
context.logger?.warn?.(hint);
|
|
3549
3549
|
}
|
|
3550
3550
|
}
|
|
3551
|
-
if (typeof
|
|
3552
|
-
if (
|
|
3553
|
-
|
|
3551
|
+
if (typeof error3.$responseBodyText !== "undefined") {
|
|
3552
|
+
if (error3.$response) {
|
|
3553
|
+
error3.$response.body = error3.$responseBodyText;
|
|
3554
3554
|
}
|
|
3555
3555
|
}
|
|
3556
3556
|
try {
|
|
3557
3557
|
if (HttpResponse.isInstance(response)) {
|
|
3558
3558
|
const { headers = {} } = response;
|
|
3559
3559
|
const headerEntries = Object.entries(headers);
|
|
3560
|
-
|
|
3560
|
+
error3.$metadata = {
|
|
3561
3561
|
httpStatusCode: response.statusCode,
|
|
3562
3562
|
requestId: findHeader2(/^x-[\w-]+-request-?id$/, headerEntries),
|
|
3563
3563
|
extendedRequestId: findHeader2(/^x-[\w-]+-id-2$/, headerEntries),
|
|
@@ -3567,7 +3567,7 @@ var init_deserializerMiddleware = __esm({
|
|
|
3567
3567
|
} catch (ignored) {
|
|
3568
3568
|
}
|
|
3569
3569
|
}
|
|
3570
|
-
throw
|
|
3570
|
+
throw error3;
|
|
3571
3571
|
}
|
|
3572
3572
|
};
|
|
3573
3573
|
findHeader2 = (pattern, headers) => {
|
|
@@ -3601,8 +3601,8 @@ var init_ProviderError = __esm({
|
|
|
3601
3601
|
Object.setPrototypeOf(this, _ProviderError.prototype);
|
|
3602
3602
|
logger3?.debug?.(`@smithy/property-provider ${tryNextLink ? "->" : "(!)"} ${message}`);
|
|
3603
3603
|
}
|
|
3604
|
-
static from(
|
|
3605
|
-
return Object.assign(new this(
|
|
3604
|
+
static from(error3, options = true) {
|
|
3605
|
+
return Object.assign(new this(error3.message, options), error3);
|
|
3606
3606
|
}
|
|
3607
3607
|
};
|
|
3608
3608
|
}
|
|
@@ -5730,9 +5730,9 @@ var init_getEndpointUrl = __esm({
|
|
|
5730
5730
|
if (typeof expression === "string") {
|
|
5731
5731
|
try {
|
|
5732
5732
|
return new URL(expression);
|
|
5733
|
-
} catch (
|
|
5734
|
-
console.error(`Failed to construct URL with ${expression}`,
|
|
5735
|
-
throw
|
|
5733
|
+
} catch (error3) {
|
|
5734
|
+
console.error(`Failed to construct URL with ${expression}`, error3);
|
|
5735
|
+
throw error3;
|
|
5736
5736
|
}
|
|
5737
5737
|
}
|
|
5738
5738
|
throw new EndpointError(`Endpoint URL must be a string, got ${typeof expression}`);
|
|
@@ -5867,7 +5867,7 @@ var init_evaluateErrorRule = __esm({
|
|
|
5867
5867
|
init_evaluateConditions();
|
|
5868
5868
|
init_evaluateExpression();
|
|
5869
5869
|
evaluateErrorRule = (errorRule, options) => {
|
|
5870
|
-
const { conditions, error:
|
|
5870
|
+
const { conditions, error: error3 } = errorRule;
|
|
5871
5871
|
const { result, referenceRecord } = evaluateConditions(conditions, options);
|
|
5872
5872
|
if (!result) {
|
|
5873
5873
|
return;
|
|
@@ -5876,7 +5876,7 @@ var init_evaluateErrorRule = __esm({
|
|
|
5876
5876
|
...options,
|
|
5877
5877
|
referenceRecord: { ...options.referenceRecord, ...referenceRecord }
|
|
5878
5878
|
} : options;
|
|
5879
|
-
throw new EndpointError(evaluateExpression(
|
|
5879
|
+
throw new EndpointError(evaluateExpression(error3, "Error", errorRuleOptions));
|
|
5880
5880
|
};
|
|
5881
5881
|
}
|
|
5882
5882
|
});
|
|
@@ -6183,15 +6183,15 @@ var init_ChecksumStream = __esm({
|
|
|
6183
6183
|
}
|
|
6184
6184
|
this.push(null);
|
|
6185
6185
|
};
|
|
6186
|
-
onSourceError = (
|
|
6187
|
-
this.destroy(
|
|
6186
|
+
onSourceError = (error3) => {
|
|
6187
|
+
this.destroy(error3);
|
|
6188
6188
|
};
|
|
6189
6189
|
_read(size) {
|
|
6190
6190
|
this.source.resume();
|
|
6191
6191
|
}
|
|
6192
|
-
_destroy(
|
|
6192
|
+
_destroy(error3, callback) {
|
|
6193
6193
|
this.source?.destroy();
|
|
6194
|
-
callback(
|
|
6194
|
+
callback(error3);
|
|
6195
6195
|
}
|
|
6196
6196
|
};
|
|
6197
6197
|
}
|
|
@@ -6313,8 +6313,8 @@ var init_createChecksumStream_browser = __esm({
|
|
|
6313
6313
|
const digest2 = await checksum.digest();
|
|
6314
6314
|
const received = encoder(digest2);
|
|
6315
6315
|
if (expectedChecksum !== received) {
|
|
6316
|
-
const
|
|
6317
|
-
controller.error(
|
|
6316
|
+
const error3 = new Error(`Checksum mismatch: expected "${expectedChecksum}" but received "${received}" in response header "${checksumSourceLocation}".`);
|
|
6317
|
+
controller.error(error3);
|
|
6318
6318
|
} else {
|
|
6319
6319
|
controller.terminate();
|
|
6320
6320
|
}
|
|
@@ -7562,14 +7562,14 @@ var init_Sha256Js = __esm({
|
|
|
7562
7562
|
const h5 = new _Sha256Js();
|
|
7563
7563
|
h5.update(key);
|
|
7564
7564
|
const out = h5.digestSync();
|
|
7565
|
-
const
|
|
7566
|
-
|
|
7567
|
-
return
|
|
7565
|
+
const padded2 = new Uint8Array(BLOCK);
|
|
7566
|
+
padded2.set(out);
|
|
7567
|
+
return padded2;
|
|
7568
7568
|
}
|
|
7569
7569
|
if (key.byteLength < BLOCK) {
|
|
7570
|
-
const
|
|
7571
|
-
|
|
7572
|
-
return
|
|
7570
|
+
const padded2 = new Uint8Array(BLOCK);
|
|
7571
|
+
padded2.set(key);
|
|
7572
|
+
return padded2;
|
|
7573
7573
|
}
|
|
7574
7574
|
return key;
|
|
7575
7575
|
}
|
|
@@ -8418,9 +8418,9 @@ function getMessageUnmarshaller(deserializer, toUtf83) {
|
|
|
8418
8418
|
const exception = { [code]: message };
|
|
8419
8419
|
const deserializedException = await deserializer(exception);
|
|
8420
8420
|
if (deserializedException.$unknown) {
|
|
8421
|
-
const
|
|
8422
|
-
|
|
8423
|
-
throw
|
|
8421
|
+
const error3 = new Error(toUtf83(message.body));
|
|
8422
|
+
error3.name = code;
|
|
8423
|
+
throw error3;
|
|
8424
8424
|
}
|
|
8425
8425
|
throw deserializedException[code];
|
|
8426
8426
|
} else if (messageType === "event") {
|
|
@@ -10267,8 +10267,8 @@ var init_S3ExpressIdentityProviderImpl = __esm({
|
|
|
10267
10267
|
return cache5.set(key, new S3ExpressIdentityCacheEntry(this.getIdentity(key))).identity;
|
|
10268
10268
|
}
|
|
10269
10269
|
async getIdentity(key) {
|
|
10270
|
-
await this.cache.purgeExpired().catch((
|
|
10271
|
-
console.warn("Error while clearing expired entries in S3ExpressIdentityCache: \n" +
|
|
10270
|
+
await this.cache.purgeExpired().catch((error3) => {
|
|
10271
|
+
console.warn("Error while clearing expired entries in S3ExpressIdentityCache: \n" + error3);
|
|
10272
10272
|
});
|
|
10273
10273
|
const session = await this.createSessionFn(key);
|
|
10274
10274
|
if (!session.Credentials?.AccessKeyId || !session.Credentials?.SecretAccessKey) {
|
|
@@ -11168,18 +11168,18 @@ var init_constants5 = __esm({
|
|
|
11168
11168
|
});
|
|
11169
11169
|
|
|
11170
11170
|
// node_modules/@smithy/core/dist-es/submodules/retry/service-error-classification/service-error-classification.js
|
|
11171
|
-
function isNodeJsHttp2TransientError(
|
|
11172
|
-
return
|
|
11171
|
+
function isNodeJsHttp2TransientError(error3) {
|
|
11172
|
+
return error3.code === "ERR_HTTP2_STREAM_ERROR" && error3.message.includes("NGHTTP2_REFUSED_STREAM");
|
|
11173
11173
|
}
|
|
11174
11174
|
var isRetryableByTrait, isClockSkewError, isClockSkewCorrectedError, isBrowserNetworkError, isThrottlingError, isTransientError, isServerError;
|
|
11175
11175
|
var init_service_error_classification = __esm({
|
|
11176
11176
|
"node_modules/@smithy/core/dist-es/submodules/retry/service-error-classification/service-error-classification.js"() {
|
|
11177
11177
|
"use strict";
|
|
11178
11178
|
init_constants5();
|
|
11179
|
-
isRetryableByTrait = (
|
|
11180
|
-
isClockSkewError = (
|
|
11181
|
-
isClockSkewCorrectedError = (
|
|
11182
|
-
isBrowserNetworkError = (
|
|
11179
|
+
isRetryableByTrait = (error3) => error3?.$retryable !== void 0;
|
|
11180
|
+
isClockSkewError = (error3) => CLOCK_SKEW_ERROR_CODES.includes(error3.name);
|
|
11181
|
+
isClockSkewCorrectedError = (error3) => error3.$metadata?.clockSkewCorrected;
|
|
11182
|
+
isBrowserNetworkError = (error3) => {
|
|
11183
11183
|
const errorMessages = /* @__PURE__ */ new Set([
|
|
11184
11184
|
"Failed to fetch",
|
|
11185
11185
|
"NetworkError when attempting to fetch resource",
|
|
@@ -11187,18 +11187,18 @@ var init_service_error_classification = __esm({
|
|
|
11187
11187
|
"Load failed",
|
|
11188
11188
|
"Network request failed"
|
|
11189
11189
|
]);
|
|
11190
|
-
const isValid =
|
|
11190
|
+
const isValid = error3 && error3 instanceof TypeError;
|
|
11191
11191
|
if (!isValid) {
|
|
11192
11192
|
return false;
|
|
11193
11193
|
}
|
|
11194
|
-
return errorMessages.has(
|
|
11194
|
+
return errorMessages.has(error3.message);
|
|
11195
11195
|
};
|
|
11196
|
-
isThrottlingError = (
|
|
11197
|
-
isTransientError = (
|
|
11198
|
-
isServerError = (
|
|
11199
|
-
if (
|
|
11200
|
-
const statusCode =
|
|
11201
|
-
if (500 <= statusCode && statusCode <= 599 && !isTransientError(
|
|
11196
|
+
isThrottlingError = (error3) => error3.$metadata?.httpStatusCode === 429 || THROTTLING_ERROR_CODES.includes(error3.name) || error3.$retryable?.throttling == true;
|
|
11197
|
+
isTransientError = (error3, depth = 0) => isRetryableByTrait(error3) || isClockSkewCorrectedError(error3) || error3.name === "InvalidSignatureException" && error3.message?.includes("Signature expired") || TRANSIENT_ERROR_CODES.includes(error3.name) || NODEJS_TIMEOUT_ERROR_CODES.includes(error3?.code || "") || NODEJS_NETWORK_ERROR_CODES.includes(error3?.code || "") || TRANSIENT_ERROR_STATUS_CODES.includes(error3.$metadata?.httpStatusCode || 0) || isBrowserNetworkError(error3) || isNodeJsHttp2TransientError(error3) || error3.cause !== void 0 && depth <= 10 && isTransientError(error3.cause, depth + 1);
|
|
11198
|
+
isServerError = (error3) => {
|
|
11199
|
+
if (error3.$metadata?.httpStatusCode !== void 0) {
|
|
11200
|
+
const statusCode = error3.$metadata.httpStatusCode;
|
|
11201
|
+
if (500 <= statusCode && statusCode <= 599 && !isTransientError(error3)) {
|
|
11202
11202
|
return true;
|
|
11203
11203
|
}
|
|
11204
11204
|
return false;
|
|
@@ -11281,14 +11281,14 @@ var asSdkError;
|
|
|
11281
11281
|
var init_util = __esm({
|
|
11282
11282
|
"node_modules/@smithy/core/dist-es/submodules/retry/middleware-retry/util.js"() {
|
|
11283
11283
|
"use strict";
|
|
11284
|
-
asSdkError = (
|
|
11285
|
-
if (
|
|
11286
|
-
return
|
|
11287
|
-
if (
|
|
11288
|
-
return Object.assign(new Error(),
|
|
11289
|
-
if (typeof
|
|
11290
|
-
return new Error(
|
|
11291
|
-
return new Error(`AWS SDK error wrapper for ${
|
|
11284
|
+
asSdkError = (error3) => {
|
|
11285
|
+
if (error3 instanceof Error)
|
|
11286
|
+
return error3;
|
|
11287
|
+
if (error3 instanceof Object)
|
|
11288
|
+
return Object.assign(new Error(), error3);
|
|
11289
|
+
if (typeof error3 === "string")
|
|
11290
|
+
return new Error(error3);
|
|
11291
|
+
return new Error(`AWS SDK error wrapper for ${error3}`);
|
|
11292
11292
|
};
|
|
11293
11293
|
}
|
|
11294
11294
|
});
|
|
@@ -11374,23 +11374,23 @@ var init_retryMiddleware = __esm({
|
|
|
11374
11374
|
init_util();
|
|
11375
11375
|
cooldown = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
11376
11376
|
isRetryStrategyV2 = (retryStrategy) => typeof retryStrategy.acquireInitialRetryToken !== "undefined" && typeof retryStrategy.refreshRetryTokenForRetry !== "undefined" && typeof retryStrategy.recordSuccess !== "undefined";
|
|
11377
|
-
getRetryErrorInfo = (
|
|
11377
|
+
getRetryErrorInfo = (error3, logger3) => {
|
|
11378
11378
|
const errorInfo = {
|
|
11379
|
-
error:
|
|
11380
|
-
errorType: getRetryErrorType(
|
|
11379
|
+
error: error3,
|
|
11380
|
+
errorType: getRetryErrorType(error3)
|
|
11381
11381
|
};
|
|
11382
|
-
const retryAfterHint = parseRetryAfterHeader(
|
|
11382
|
+
const retryAfterHint = parseRetryAfterHeader(error3.$response, logger3);
|
|
11383
11383
|
if (retryAfterHint) {
|
|
11384
11384
|
errorInfo.retryAfterHint = retryAfterHint;
|
|
11385
11385
|
}
|
|
11386
11386
|
return errorInfo;
|
|
11387
11387
|
};
|
|
11388
|
-
getRetryErrorType = (
|
|
11389
|
-
if (isThrottlingError(
|
|
11388
|
+
getRetryErrorType = (error3) => {
|
|
11389
|
+
if (isThrottlingError(error3))
|
|
11390
11390
|
return "THROTTLING";
|
|
11391
|
-
if (isTransientError(
|
|
11391
|
+
if (isTransientError(error3))
|
|
11392
11392
|
return "TRANSIENT";
|
|
11393
|
-
if (isServerError(
|
|
11393
|
+
if (isServerError(error3))
|
|
11394
11394
|
return "SERVER_ERROR";
|
|
11395
11395
|
return "CLIENT_ERROR";
|
|
11396
11396
|
};
|
|
@@ -11800,13 +11800,13 @@ var init_defaultRetryQuota = __esm({
|
|
|
11800
11800
|
const retryCost = options?.retryCost ?? RETRY_COST;
|
|
11801
11801
|
const timeoutRetryCost = options?.timeoutRetryCost ?? TIMEOUT_RETRY_COST;
|
|
11802
11802
|
let availableCapacity = initialRetryTokens;
|
|
11803
|
-
const getCapacityAmount = (
|
|
11804
|
-
const hasRetryTokens = (
|
|
11805
|
-
const retrieveRetryTokens = (
|
|
11806
|
-
if (!hasRetryTokens(
|
|
11803
|
+
const getCapacityAmount = (error3) => error3.name === "TimeoutError" ? timeoutRetryCost : retryCost;
|
|
11804
|
+
const hasRetryTokens = (error3) => getCapacityAmount(error3) <= availableCapacity;
|
|
11805
|
+
const retrieveRetryTokens = (error3) => {
|
|
11806
|
+
if (!hasRetryTokens(error3)) {
|
|
11807
11807
|
throw new Error("No retry token available");
|
|
11808
11808
|
}
|
|
11809
|
-
const capacityAmount = getCapacityAmount(
|
|
11809
|
+
const capacityAmount = getCapacityAmount(error3);
|
|
11810
11810
|
availableCapacity -= capacityAmount;
|
|
11811
11811
|
return capacityAmount;
|
|
11812
11812
|
};
|
|
@@ -11839,11 +11839,11 @@ var init_retryDecider = __esm({
|
|
|
11839
11839
|
"node_modules/@smithy/core/dist-es/submodules/retry/middleware-retry/retry-pre-sra-deprecated/retryDecider.js"() {
|
|
11840
11840
|
"use strict";
|
|
11841
11841
|
init_service_error_classification();
|
|
11842
|
-
defaultRetryDecider = (
|
|
11843
|
-
if (!
|
|
11842
|
+
defaultRetryDecider = (error3) => {
|
|
11843
|
+
if (!error3) {
|
|
11844
11844
|
return false;
|
|
11845
11845
|
}
|
|
11846
|
-
return isRetryableByTrait(
|
|
11846
|
+
return isRetryableByTrait(error3) || isClockSkewError(error3) || isThrottlingError(error3) || isTransientError(error3);
|
|
11847
11847
|
};
|
|
11848
11848
|
}
|
|
11849
11849
|
});
|
|
@@ -11874,8 +11874,8 @@ var init_StandardRetryStrategy2 = __esm({
|
|
|
11874
11874
|
this.delayDecider = options?.delayDecider ?? defaultDelayDecider;
|
|
11875
11875
|
this.retryQuota = options?.retryQuota ?? getDefaultRetryQuota(INITIAL_RETRY_TOKENS);
|
|
11876
11876
|
}
|
|
11877
|
-
shouldRetry(
|
|
11878
|
-
return attempts < maxAttempts && this.retryDecider(
|
|
11877
|
+
shouldRetry(error3, attempts, maxAttempts) {
|
|
11878
|
+
return attempts < maxAttempts && this.retryDecider(error3) && this.retryQuota.hasRetryTokens(error3);
|
|
11879
11879
|
}
|
|
11880
11880
|
async getMaxAttempts() {
|
|
11881
11881
|
let maxAttempts;
|
|
@@ -12246,7 +12246,7 @@ var init_loggerMiddleware = __esm({
|
|
|
12246
12246
|
metadata: $metadata
|
|
12247
12247
|
});
|
|
12248
12248
|
return response;
|
|
12249
|
-
} catch (
|
|
12249
|
+
} catch (error3) {
|
|
12250
12250
|
const { clientName, commandName, logger: logger3, dynamoDbDocumentClientOptions = {} } = context;
|
|
12251
12251
|
const { overrideInputFilterSensitiveLog } = dynamoDbDocumentClientOptions;
|
|
12252
12252
|
const inputFilterSensitiveLog = overrideInputFilterSensitiveLog ?? context.inputFilterSensitiveLog;
|
|
@@ -12254,10 +12254,10 @@ var init_loggerMiddleware = __esm({
|
|
|
12254
12254
|
clientName,
|
|
12255
12255
|
commandName,
|
|
12256
12256
|
input: inputFilterSensitiveLog(args.input),
|
|
12257
|
-
error:
|
|
12258
|
-
metadata:
|
|
12257
|
+
error: error3,
|
|
12258
|
+
metadata: error3.$metadata
|
|
12259
12259
|
});
|
|
12260
|
-
throw
|
|
12260
|
+
throw error3;
|
|
12261
12261
|
}
|
|
12262
12262
|
};
|
|
12263
12263
|
loggerMiddlewareOptions = {
|
|
@@ -12642,8 +12642,8 @@ var init_httpSigningMiddleware = __esm({
|
|
|
12642
12642
|
"use strict";
|
|
12643
12643
|
init_protocols();
|
|
12644
12644
|
init_transport();
|
|
12645
|
-
defaultErrorHandler = (signingProperties) => (
|
|
12646
|
-
throw
|
|
12645
|
+
defaultErrorHandler = (signingProperties) => (error3) => {
|
|
12646
|
+
throw error3;
|
|
12647
12647
|
};
|
|
12648
12648
|
defaultSuccessHandler = (httpResponse, signingProperties) => {
|
|
12649
12649
|
};
|
|
@@ -14854,8 +14854,8 @@ var init_s3ExpressHttpSigningMiddleware = __esm({
|
|
|
14854
14854
|
init_client2();
|
|
14855
14855
|
init_protocols();
|
|
14856
14856
|
init_signS3Express();
|
|
14857
|
-
defaultErrorHandler2 = (signingProperties) => (
|
|
14858
|
-
throw
|
|
14857
|
+
defaultErrorHandler2 = (signingProperties) => (error3) => {
|
|
14858
|
+
throw error3;
|
|
14859
14859
|
};
|
|
14860
14860
|
defaultSuccessHandler2 = (httpResponse, signingProperties) => {
|
|
14861
14861
|
};
|
|
@@ -15151,20 +15151,20 @@ var init_ProtocolLib = __esm({
|
|
|
15151
15151
|
decorateServiceException(exception, additions = {}) {
|
|
15152
15152
|
if (this.queryCompat) {
|
|
15153
15153
|
const msg = exception.Message ?? additions.Message;
|
|
15154
|
-
const
|
|
15154
|
+
const error3 = decorateServiceException(exception, additions);
|
|
15155
15155
|
if (msg) {
|
|
15156
|
-
|
|
15157
|
-
}
|
|
15158
|
-
const errorObj =
|
|
15159
|
-
errorObj.Type =
|
|
15160
|
-
errorObj.Code =
|
|
15161
|
-
errorObj.Message =
|
|
15162
|
-
|
|
15163
|
-
const reqId =
|
|
15156
|
+
error3.message = msg;
|
|
15157
|
+
}
|
|
15158
|
+
const errorObj = error3.Error ?? {};
|
|
15159
|
+
errorObj.Type = error3.Error?.Type;
|
|
15160
|
+
errorObj.Code = error3.Error?.Code;
|
|
15161
|
+
errorObj.Message = error3.Error?.message ?? error3.Error?.Message ?? msg;
|
|
15162
|
+
error3.Error = errorObj;
|
|
15163
|
+
const reqId = error3.$metadata.requestId;
|
|
15164
15164
|
if (reqId) {
|
|
15165
|
-
|
|
15165
|
+
error3.RequestId = reqId;
|
|
15166
15166
|
}
|
|
15167
|
-
return
|
|
15167
|
+
return error3;
|
|
15168
15168
|
}
|
|
15169
15169
|
return decorateServiceException(exception, additions);
|
|
15170
15170
|
}
|
|
@@ -18446,12 +18446,12 @@ var init_validateChecksumFromResponse = __esm({
|
|
|
18446
18446
|
let checksumAlgorithmFn;
|
|
18447
18447
|
try {
|
|
18448
18448
|
checksumAlgorithmFn = selectChecksumAlgorithmFunction(algorithm, config2);
|
|
18449
|
-
} catch (
|
|
18449
|
+
} catch (error3) {
|
|
18450
18450
|
if (algorithm === ChecksumAlgorithm.CRC64NVME) {
|
|
18451
|
-
logger3?.warn(`Skipping ${ChecksumAlgorithm.CRC64NVME} checksum validation: ${
|
|
18451
|
+
logger3?.warn(`Skipping ${ChecksumAlgorithm.CRC64NVME} checksum validation: ${error3.message}`);
|
|
18452
18452
|
continue;
|
|
18453
18453
|
}
|
|
18454
|
-
throw
|
|
18454
|
+
throw error3;
|
|
18455
18455
|
}
|
|
18456
18456
|
const { base64Encoder } = config2;
|
|
18457
18457
|
if (isStreaming(responseBody)) {
|
|
@@ -19233,8 +19233,8 @@ var init_AwsSdkSigV4Signer = __esm({
|
|
|
19233
19233
|
return signedRequest;
|
|
19234
19234
|
}
|
|
19235
19235
|
errorHandler(signingProperties) {
|
|
19236
|
-
return (
|
|
19237
|
-
const errorException =
|
|
19236
|
+
return (error3) => {
|
|
19237
|
+
const errorException = error3;
|
|
19238
19238
|
const serverTime = errorException.ServerTime ?? getDateHeader(errorException.$response);
|
|
19239
19239
|
if (serverTime) {
|
|
19240
19240
|
const config2 = throwSigningPropertyError("config", signingProperties.config);
|
|
@@ -19248,7 +19248,7 @@ var init_AwsSdkSigV4Signer = __esm({
|
|
|
19248
19248
|
errorException.$metadata.clockSkewCorrected = true;
|
|
19249
19249
|
}
|
|
19250
19250
|
}
|
|
19251
|
-
throw
|
|
19251
|
+
throw error3;
|
|
19252
19252
|
};
|
|
19253
19253
|
}
|
|
19254
19254
|
successHandler(httpResponse, signingProperties) {
|
|
@@ -27400,8 +27400,8 @@ function __read(o3, n3) {
|
|
|
27400
27400
|
var i5 = m3.call(o3), r5, ar = [], e5;
|
|
27401
27401
|
try {
|
|
27402
27402
|
while ((n3 === void 0 || n3-- > 0) && !(r5 = i5.next()).done) ar.push(r5.value);
|
|
27403
|
-
} catch (
|
|
27404
|
-
e5 = { error:
|
|
27403
|
+
} catch (error3) {
|
|
27404
|
+
e5 = { error: error3 };
|
|
27405
27405
|
} finally {
|
|
27406
27406
|
try {
|
|
27407
27407
|
if (r5 && !r5.done && (m3 = i5["return"])) m3.call(i5);
|
|
@@ -27652,9 +27652,9 @@ var init_tslib_es6 = __esm({
|
|
|
27652
27652
|
};
|
|
27653
27653
|
return ownKeys(o3);
|
|
27654
27654
|
};
|
|
27655
|
-
_SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(
|
|
27655
|
+
_SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error3, suppressed, message) {
|
|
27656
27656
|
var e5 = new Error(message);
|
|
27657
|
-
return e5.name = "SuppressedError", e5.error =
|
|
27657
|
+
return e5.name = "SuppressedError", e5.error = error3, e5.suppressed = suppressed, e5;
|
|
27658
27658
|
};
|
|
27659
27659
|
tslib_es6_default = {
|
|
27660
27660
|
__extends,
|
|
@@ -28159,12 +28159,12 @@ For more information, please visit: ` + STATIC_STABILITY_DOC_URL);
|
|
|
28159
28159
|
let token;
|
|
28160
28160
|
try {
|
|
28161
28161
|
token = (await getMetadataToken({ ...endpoint, timeout })).toString();
|
|
28162
|
-
} catch (
|
|
28163
|
-
if (
|
|
28164
|
-
throw Object.assign(
|
|
28162
|
+
} catch (error3) {
|
|
28163
|
+
if (error3?.statusCode === 400) {
|
|
28164
|
+
throw Object.assign(error3, {
|
|
28165
28165
|
message: "EC2 Metadata token request returned error"
|
|
28166
28166
|
});
|
|
28167
|
-
} else if (
|
|
28167
|
+
} else if (error3.message === "TimeoutError" || [403, 404, 405].includes(error3.statusCode)) {
|
|
28168
28168
|
disableFetchToken = true;
|
|
28169
28169
|
}
|
|
28170
28170
|
logger3?.debug("AWS SDK Instance Metadata", "using v1 fallback (initial)");
|
|
@@ -28291,12 +28291,12 @@ var require_dist_cjs22 = __commonJS({
|
|
|
28291
28291
|
return timing.setTimeout(() => {
|
|
28292
28292
|
let msg = `@smithy/node-http-handler - [${throwOnRequestTimeout ? "ERROR" : "WARN"}] a request has exceeded the configured ${timeoutInMs} ms requestTimeout.`;
|
|
28293
28293
|
if (throwOnRequestTimeout) {
|
|
28294
|
-
const
|
|
28294
|
+
const error3 = Object.assign(new Error(msg), {
|
|
28295
28295
|
name: "TimeoutError",
|
|
28296
28296
|
code: "ETIMEDOUT"
|
|
28297
28297
|
});
|
|
28298
|
-
req.destroy(
|
|
28299
|
-
reject(
|
|
28298
|
+
req.destroy(error3);
|
|
28299
|
+
reject(error3);
|
|
28300
28300
|
} else {
|
|
28301
28301
|
msg += ` Init client requestHandler with throwOnRequestTimeout=true to turn this into an error.`;
|
|
28302
28302
|
logger3?.warn?.(msg);
|
|
@@ -30423,13 +30423,13 @@ var require_dist_cjs24 = __commonJS({
|
|
|
30423
30423
|
expiresAt: newTokenExpiration.toISOString(),
|
|
30424
30424
|
refreshToken: newSsoOidcToken.refreshToken
|
|
30425
30425
|
});
|
|
30426
|
-
} catch (
|
|
30426
|
+
} catch (error3) {
|
|
30427
30427
|
}
|
|
30428
30428
|
return {
|
|
30429
30429
|
token: newSsoOidcToken.accessToken,
|
|
30430
30430
|
expiration: newTokenExpiration
|
|
30431
30431
|
};
|
|
30432
|
-
} catch (
|
|
30432
|
+
} catch (error3) {
|
|
30433
30433
|
validateTokenExpiry(existingToken);
|
|
30434
30434
|
return existingToken;
|
|
30435
30435
|
}
|
|
@@ -32271,9 +32271,9 @@ var require_dist_cjs26 = __commonJS({
|
|
|
32271
32271
|
accountId: newAccessToken.accountId,
|
|
32272
32272
|
expiration
|
|
32273
32273
|
};
|
|
32274
|
-
} catch (
|
|
32275
|
-
if (
|
|
32276
|
-
const errorType =
|
|
32274
|
+
} catch (error3) {
|
|
32275
|
+
if (error3.name === "AccessDeniedException") {
|
|
32276
|
+
const errorType = error3.error;
|
|
32277
32277
|
let message;
|
|
32278
32278
|
switch (errorType) {
|
|
32279
32279
|
case "TOKEN_EXPIRED":
|
|
@@ -32286,11 +32286,11 @@ var require_dist_cjs26 = __commonJS({
|
|
|
32286
32286
|
message = "Unable to refresh credentials due to insufficient permissions. You may be missing permission for the 'CreateOAuth2Token' action.";
|
|
32287
32287
|
break;
|
|
32288
32288
|
default:
|
|
32289
|
-
message = `Failed to refresh token: ${String(
|
|
32289
|
+
message = `Failed to refresh token: ${String(error3)}. Please re-authenticate using \`aws login\``;
|
|
32290
32290
|
}
|
|
32291
32291
|
throw new CredentialsProviderError2(message, { logger: this.logger, tryNextLink: false });
|
|
32292
32292
|
}
|
|
32293
|
-
throw new CredentialsProviderError2(`Failed to refresh token: ${String(
|
|
32293
|
+
throw new CredentialsProviderError2(`Failed to refresh token: ${String(error3)}. Please re-authenticate using aws login`, { logger: this.logger });
|
|
32294
32294
|
}
|
|
32295
32295
|
}
|
|
32296
32296
|
async loadToken() {
|
|
@@ -32314,8 +32314,8 @@ var require_dist_cjs26 = __commonJS({
|
|
|
32314
32314
|
});
|
|
32315
32315
|
}
|
|
32316
32316
|
return token;
|
|
32317
|
-
} catch (
|
|
32318
|
-
throw new CredentialsProviderError2(`Failed to load token from ${tokenFilePath}: ${String(
|
|
32317
|
+
} catch (error3) {
|
|
32318
|
+
throw new CredentialsProviderError2(`Failed to load token from ${tokenFilePath}: ${String(error3)}`, {
|
|
32319
32319
|
logger: this.logger,
|
|
32320
32320
|
tryNextLink: false
|
|
32321
32321
|
});
|
|
@@ -32326,7 +32326,7 @@ var require_dist_cjs26 = __commonJS({
|
|
|
32326
32326
|
const directory = dirname(tokenFilePath);
|
|
32327
32327
|
try {
|
|
32328
32328
|
await promises.mkdir(directory, { recursive: true });
|
|
32329
|
-
} catch (
|
|
32329
|
+
} catch (error3) {
|
|
32330
32330
|
}
|
|
32331
32331
|
await promises.writeFile(tokenFilePath, JSON.stringify(token, null, 2), "utf8");
|
|
32332
32332
|
}
|
|
@@ -32417,8 +32417,8 @@ var require_dist_cjs26 = __commonJS({
|
|
|
32417
32417
|
const rawSignature = this.derToRawSignature(asn1Signature);
|
|
32418
32418
|
const signatureB64 = rawSignature.toString("base64url");
|
|
32419
32419
|
return `${message}.${signatureB64}`;
|
|
32420
|
-
} catch (
|
|
32421
|
-
throw new CredentialsProviderError2(`Failed to generate Dpop proof: ${
|
|
32420
|
+
} catch (error3) {
|
|
32421
|
+
throw new CredentialsProviderError2(`Failed to generate Dpop proof: ${error3 instanceof Error ? error3.message : String(error3)}`, { logger: this.logger, tryNextLink: false });
|
|
32422
32422
|
}
|
|
32423
32423
|
}
|
|
32424
32424
|
};
|
|
@@ -33721,8 +33721,8 @@ var require_dist_cjs27 = __commonJS({
|
|
|
33721
33721
|
throw Error(`Profile ${profileName} credential_process returned invalid JSON.`);
|
|
33722
33722
|
}
|
|
33723
33723
|
return getValidatedProcessCredentials(profileName, data, profiles);
|
|
33724
|
-
} catch (
|
|
33725
|
-
throw new CredentialsProviderError2(
|
|
33724
|
+
} catch (error3) {
|
|
33725
|
+
throw new CredentialsProviderError2(error3.message, { logger: logger3 });
|
|
33726
33726
|
}
|
|
33727
33727
|
} else {
|
|
33728
33728
|
throw new CredentialsProviderError2(`Profile ${profileName} did not contain credential_process.`, { logger: logger3 });
|
|
@@ -37139,16 +37139,16 @@ var LogFormatter = class {
|
|
|
37139
37139
|
*
|
|
37140
37140
|
* @param error - Error to format
|
|
37141
37141
|
*/
|
|
37142
|
-
formatError(
|
|
37143
|
-
const { name, message, stack, cause, ...errorAttributes } =
|
|
37142
|
+
formatError(error3) {
|
|
37143
|
+
const { name, message, stack, cause, ...errorAttributes } = error3;
|
|
37144
37144
|
const formattedError = {
|
|
37145
37145
|
name,
|
|
37146
|
-
location: this.getCodeLocation(
|
|
37146
|
+
location: this.getCodeLocation(error3.stack),
|
|
37147
37147
|
message,
|
|
37148
37148
|
stack: isDevMode() && typeof stack === "string" ? stack?.split("\n") : stack,
|
|
37149
37149
|
cause: cause instanceof Error ? this.formatError(cause) : cause
|
|
37150
37150
|
};
|
|
37151
|
-
for (const key in
|
|
37151
|
+
for (const key in error3) {
|
|
37152
37152
|
if (typeof key === "string" && !["name", "message", "stack", "cause"].includes(key)) {
|
|
37153
37153
|
formattedError[key] = errorAttributes[key];
|
|
37154
37154
|
}
|
|
@@ -38127,15 +38127,15 @@ var Logger = class _Logger extends Utility {
|
|
|
38127
38127
|
}
|
|
38128
38128
|
try {
|
|
38129
38129
|
return await originalMethod.apply(this, args);
|
|
38130
|
-
} catch (
|
|
38130
|
+
} catch (error3) {
|
|
38131
38131
|
if (options?.flushBufferOnUncaughtError) {
|
|
38132
38132
|
loggerRef.flushBuffer();
|
|
38133
38133
|
loggerRef.error({
|
|
38134
38134
|
message: UncaughtErrorLogMessage,
|
|
38135
|
-
error:
|
|
38135
|
+
error: error3
|
|
38136
38136
|
});
|
|
38137
38137
|
}
|
|
38138
|
-
throw
|
|
38138
|
+
throw error3;
|
|
38139
38139
|
} finally {
|
|
38140
38140
|
if (options?.clearState || options?.resetKeys)
|
|
38141
38141
|
loggerRef.resetKeys();
|
|
@@ -38578,8 +38578,8 @@ var Logger = class _Logger extends Utility {
|
|
|
38578
38578
|
if (traceId !== void 0 && this.shouldBufferLog(traceId, logLevel)) {
|
|
38579
38579
|
try {
|
|
38580
38580
|
this.bufferLogItem(traceId, this.createAndPopulateLogItem(logLevel, input, extraInput), logLevel);
|
|
38581
|
-
} catch (
|
|
38582
|
-
this.printLog(LogLevelThreshold.WARN, this.createAndPopulateLogItem(LogLevelThreshold.WARN, `Unable to buffer log: ${
|
|
38581
|
+
} catch (error3) {
|
|
38582
|
+
this.printLog(LogLevelThreshold.WARN, this.createAndPopulateLogItem(LogLevelThreshold.WARN, `Unable to buffer log: ${error3.message}`, [error3]));
|
|
38583
38583
|
this.printLog(logLevel, this.createAndPopulateLogItem(logLevel, input, extraInput));
|
|
38584
38584
|
}
|
|
38585
38585
|
return;
|
|
@@ -38926,10 +38926,10 @@ var SBOM_CATALOG_BUCKET_ARN = `arn:aws:s3:::${SBOM_CATALOG_BUCKET_NAME}`;
|
|
|
38926
38926
|
|
|
38927
38927
|
// src/sbom-catalog/lambda/upload-artifacts.ts
|
|
38928
38928
|
var s3Client = new import_client_s3.S3Client({});
|
|
38929
|
-
async function uploadArtifacts(configuration) {
|
|
38929
|
+
async function uploadArtifacts(configuration, eventId, eventTime) {
|
|
38930
38930
|
const isStandaloneUpload = "name" in configuration;
|
|
38931
38931
|
const projectName = isStandaloneUpload ? configuration.name : configuration.collectionName;
|
|
38932
|
-
const destinationPrefix = buildDestinationObjectKeyPrefix(configuration, projectName);
|
|
38932
|
+
const destinationPrefix = buildDestinationObjectKeyPrefix(configuration, projectName, eventId, eventTime);
|
|
38933
38933
|
let projects;
|
|
38934
38934
|
let manifest;
|
|
38935
38935
|
if (isStandaloneUpload) {
|
|
@@ -38945,13 +38945,29 @@ async function uploadArtifacts(configuration) {
|
|
|
38945
38945
|
await writeToDestinationBucket(manifestKey, manifestBody);
|
|
38946
38946
|
return { manifestKey, projects };
|
|
38947
38947
|
}
|
|
38948
|
-
function buildDestinationObjectKeyPrefix(configuration, projectName) {
|
|
38948
|
+
function buildDestinationObjectKeyPrefix(configuration, projectName, eventId, eventTime) {
|
|
38949
38949
|
return [
|
|
38950
38950
|
`${configuration.originAccountId}-${configuration.originAccountName}`,
|
|
38951
38951
|
projectName,
|
|
38952
|
-
|
|
38952
|
+
eventDestinationPath(eventId, eventTime)
|
|
38953
38953
|
].join("/");
|
|
38954
38954
|
}
|
|
38955
|
+
function eventDestinationPath(eventId, eventTime) {
|
|
38956
|
+
const timestamp = new Date(eventTime);
|
|
38957
|
+
if (Number.isNaN(timestamp.getTime())) {
|
|
38958
|
+
throw new Error(`Invalid EventBridge event time '${eventTime}'`);
|
|
38959
|
+
}
|
|
38960
|
+
const year2 = timestamp.getUTCFullYear();
|
|
38961
|
+
const month = padded(timestamp.getUTCMonth() + 1);
|
|
38962
|
+
const day = padded(timestamp.getUTCDate());
|
|
38963
|
+
const hours = padded(timestamp.getUTCHours());
|
|
38964
|
+
const minutes = padded(timestamp.getUTCMinutes());
|
|
38965
|
+
const seconds = padded(timestamp.getUTCSeconds());
|
|
38966
|
+
return `${year2}/${month}/${day}/${hours}${minutes}${seconds}-${eventId}`;
|
|
38967
|
+
}
|
|
38968
|
+
function padded(value) {
|
|
38969
|
+
return value.toString().padStart(2, "0");
|
|
38970
|
+
}
|
|
38955
38971
|
function buildStandaloneManifest(project) {
|
|
38956
38972
|
return {
|
|
38957
38973
|
schemaVersion: 1,
|
|
@@ -39810,10 +39826,10 @@ var initializer = (inst, def) => {
|
|
|
39810
39826
|
};
|
|
39811
39827
|
var $ZodError = $constructor("$ZodError", initializer);
|
|
39812
39828
|
var $ZodRealError = $constructor("$ZodError", initializer, { Parent: Error });
|
|
39813
|
-
function flattenError(
|
|
39829
|
+
function flattenError(error3, mapper = (issue2) => issue2.message) {
|
|
39814
39830
|
const fieldErrors = {};
|
|
39815
39831
|
const formErrors = [];
|
|
39816
|
-
for (const sub of
|
|
39832
|
+
for (const sub of error3.issues) {
|
|
39817
39833
|
if (sub.path.length > 0) {
|
|
39818
39834
|
fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];
|
|
39819
39835
|
fieldErrors[sub.path[0]].push(mapper(sub));
|
|
@@ -39823,10 +39839,10 @@ function flattenError(error2, mapper = (issue2) => issue2.message) {
|
|
|
39823
39839
|
}
|
|
39824
39840
|
return { formErrors, fieldErrors };
|
|
39825
39841
|
}
|
|
39826
|
-
function formatError(
|
|
39842
|
+
function formatError(error3, mapper = (issue2) => issue2.message) {
|
|
39827
39843
|
const fieldErrors = { _errors: [] };
|
|
39828
|
-
const processError = (
|
|
39829
|
-
for (const issue2 of
|
|
39844
|
+
const processError = (error4, path = []) => {
|
|
39845
|
+
for (const issue2 of error4.issues) {
|
|
39830
39846
|
if (issue2.code === "invalid_union" && issue2.errors.length) {
|
|
39831
39847
|
issue2.errors.map((issues) => processError({ issues }, [...path, ...issue2.path]));
|
|
39832
39848
|
} else if (issue2.code === "invalid_key") {
|
|
@@ -39856,7 +39872,7 @@ function formatError(error2, mapper = (issue2) => issue2.message) {
|
|
|
39856
39872
|
}
|
|
39857
39873
|
}
|
|
39858
39874
|
};
|
|
39859
|
-
processError(
|
|
39875
|
+
processError(error3);
|
|
39860
39876
|
return fieldErrors;
|
|
39861
39877
|
}
|
|
39862
39878
|
|
|
@@ -40624,8 +40640,8 @@ function isValidBase64URL(data) {
|
|
|
40624
40640
|
if (!base64url.test(data))
|
|
40625
40641
|
return false;
|
|
40626
40642
|
const base642 = data.replace(/[-_]/g, (c5) => c5 === "-" ? "+" : "/");
|
|
40627
|
-
const
|
|
40628
|
-
return isValidBase64(
|
|
40643
|
+
const padded2 = base642.padEnd(Math.ceil(base642.length / 4) * 4, "=");
|
|
40644
|
+
return isValidBase64(padded2);
|
|
40629
40645
|
}
|
|
40630
40646
|
var $ZodBase64URL = /* @__PURE__ */ $constructor("$ZodBase64URL", (inst, def) => {
|
|
40631
40647
|
def.pattern ?? (def.pattern = base64url);
|
|
@@ -41459,6 +41475,119 @@ function handleRefineResult(result, payload, input, inst) {
|
|
|
41459
41475
|
}
|
|
41460
41476
|
}
|
|
41461
41477
|
|
|
41478
|
+
// node_modules/zod/v4/locales/en.js
|
|
41479
|
+
var error2 = () => {
|
|
41480
|
+
const Sizable = {
|
|
41481
|
+
string: { unit: "characters", verb: "to have" },
|
|
41482
|
+
file: { unit: "bytes", verb: "to have" },
|
|
41483
|
+
array: { unit: "items", verb: "to have" },
|
|
41484
|
+
set: { unit: "items", verb: "to have" },
|
|
41485
|
+
map: { unit: "entries", verb: "to have" }
|
|
41486
|
+
};
|
|
41487
|
+
function getSizing(origin) {
|
|
41488
|
+
return Sizable[origin] ?? null;
|
|
41489
|
+
}
|
|
41490
|
+
const FormatDictionary = {
|
|
41491
|
+
regex: "input",
|
|
41492
|
+
email: "email address",
|
|
41493
|
+
url: "URL",
|
|
41494
|
+
emoji: "emoji",
|
|
41495
|
+
uuid: "UUID",
|
|
41496
|
+
uuidv4: "UUIDv4",
|
|
41497
|
+
uuidv6: "UUIDv6",
|
|
41498
|
+
nanoid: "nanoid",
|
|
41499
|
+
guid: "GUID",
|
|
41500
|
+
cuid: "cuid",
|
|
41501
|
+
cuid2: "cuid2",
|
|
41502
|
+
ulid: "ULID",
|
|
41503
|
+
xid: "XID",
|
|
41504
|
+
ksuid: "KSUID",
|
|
41505
|
+
datetime: "ISO datetime",
|
|
41506
|
+
date: "ISO date",
|
|
41507
|
+
time: "ISO time",
|
|
41508
|
+
duration: "ISO duration",
|
|
41509
|
+
ipv4: "IPv4 address",
|
|
41510
|
+
ipv6: "IPv6 address",
|
|
41511
|
+
mac: "MAC address",
|
|
41512
|
+
cidrv4: "IPv4 range",
|
|
41513
|
+
cidrv6: "IPv6 range",
|
|
41514
|
+
base64: "base64-encoded string",
|
|
41515
|
+
base64url: "base64url-encoded string",
|
|
41516
|
+
json_string: "JSON string",
|
|
41517
|
+
e164: "E.164 number",
|
|
41518
|
+
jwt: "JWT",
|
|
41519
|
+
template_literal: "input"
|
|
41520
|
+
};
|
|
41521
|
+
const TypeDictionary = {
|
|
41522
|
+
// Compatibility: "nan" -> "NaN" for display
|
|
41523
|
+
nan: "NaN"
|
|
41524
|
+
// All other type names omitted - they fall back to raw values via ?? operator
|
|
41525
|
+
};
|
|
41526
|
+
return (issue2) => {
|
|
41527
|
+
switch (issue2.code) {
|
|
41528
|
+
case "invalid_type": {
|
|
41529
|
+
const expected = TypeDictionary[issue2.expected] ?? issue2.expected;
|
|
41530
|
+
const receivedType = parsedType(issue2.input);
|
|
41531
|
+
const received = TypeDictionary[receivedType] ?? receivedType;
|
|
41532
|
+
return `Invalid input: expected ${expected}, received ${received}`;
|
|
41533
|
+
}
|
|
41534
|
+
case "invalid_value":
|
|
41535
|
+
if (issue2.values.length === 1)
|
|
41536
|
+
return `Invalid input: expected ${stringifyPrimitive(issue2.values[0])}`;
|
|
41537
|
+
return `Invalid option: expected one of ${joinValues(issue2.values, "|")}`;
|
|
41538
|
+
case "too_big": {
|
|
41539
|
+
const adj = issue2.inclusive ? "<=" : "<";
|
|
41540
|
+
const sizing = getSizing(issue2.origin);
|
|
41541
|
+
if (sizing)
|
|
41542
|
+
return `Too big: expected ${issue2.origin ?? "value"} to have ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elements"}`;
|
|
41543
|
+
return `Too big: expected ${issue2.origin ?? "value"} to be ${adj}${issue2.maximum.toString()}`;
|
|
41544
|
+
}
|
|
41545
|
+
case "too_small": {
|
|
41546
|
+
const adj = issue2.inclusive ? ">=" : ">";
|
|
41547
|
+
const sizing = getSizing(issue2.origin);
|
|
41548
|
+
if (sizing) {
|
|
41549
|
+
return `Too small: expected ${issue2.origin} to have ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
|
|
41550
|
+
}
|
|
41551
|
+
return `Too small: expected ${issue2.origin} to be ${adj}${issue2.minimum.toString()}`;
|
|
41552
|
+
}
|
|
41553
|
+
case "invalid_format": {
|
|
41554
|
+
const _issue = issue2;
|
|
41555
|
+
if (_issue.format === "starts_with") {
|
|
41556
|
+
return `Invalid string: must start with "${_issue.prefix}"`;
|
|
41557
|
+
}
|
|
41558
|
+
if (_issue.format === "ends_with")
|
|
41559
|
+
return `Invalid string: must end with "${_issue.suffix}"`;
|
|
41560
|
+
if (_issue.format === "includes")
|
|
41561
|
+
return `Invalid string: must include "${_issue.includes}"`;
|
|
41562
|
+
if (_issue.format === "regex")
|
|
41563
|
+
return `Invalid string: must match pattern ${_issue.pattern}`;
|
|
41564
|
+
return `Invalid ${FormatDictionary[_issue.format] ?? issue2.format}`;
|
|
41565
|
+
}
|
|
41566
|
+
case "not_multiple_of":
|
|
41567
|
+
return `Invalid number: must be a multiple of ${issue2.divisor}`;
|
|
41568
|
+
case "unrecognized_keys":
|
|
41569
|
+
return `Unrecognized key${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`;
|
|
41570
|
+
case "invalid_key":
|
|
41571
|
+
return `Invalid key in ${issue2.origin}`;
|
|
41572
|
+
case "invalid_union":
|
|
41573
|
+
if (issue2.options && Array.isArray(issue2.options) && issue2.options.length > 0) {
|
|
41574
|
+
const opts = issue2.options.map((o3) => `'${o3}'`).join(" | ");
|
|
41575
|
+
return `Invalid discriminator value. Expected ${opts}`;
|
|
41576
|
+
}
|
|
41577
|
+
return "Invalid input";
|
|
41578
|
+
case "invalid_element":
|
|
41579
|
+
return `Invalid value in ${issue2.origin}`;
|
|
41580
|
+
default:
|
|
41581
|
+
return `Invalid input`;
|
|
41582
|
+
}
|
|
41583
|
+
};
|
|
41584
|
+
};
|
|
41585
|
+
function en_default() {
|
|
41586
|
+
return {
|
|
41587
|
+
localeError: error2()
|
|
41588
|
+
};
|
|
41589
|
+
}
|
|
41590
|
+
|
|
41462
41591
|
// node_modules/zod/v4/core/registries.js
|
|
41463
41592
|
var _a3;
|
|
41464
41593
|
var $output = Symbol("ZodOutput");
|
|
@@ -42521,6 +42650,17 @@ var optionalProcessor = (schema, ctx, _json2, params) => {
|
|
|
42521
42650
|
};
|
|
42522
42651
|
|
|
42523
42652
|
// node_modules/zod/v4/classic/iso.js
|
|
42653
|
+
var iso_exports = {};
|
|
42654
|
+
__export(iso_exports, {
|
|
42655
|
+
ZodISODate: () => ZodISODate,
|
|
42656
|
+
ZodISODateTime: () => ZodISODateTime,
|
|
42657
|
+
ZodISODuration: () => ZodISODuration,
|
|
42658
|
+
ZodISOTime: () => ZodISOTime,
|
|
42659
|
+
date: () => date3,
|
|
42660
|
+
datetime: () => datetime2,
|
|
42661
|
+
duration: () => duration2,
|
|
42662
|
+
time: () => time3
|
|
42663
|
+
});
|
|
42524
42664
|
var ZodISODateTime = /* @__PURE__ */ $constructor("ZodISODateTime", (inst, def) => {
|
|
42525
42665
|
$ZodISODateTime.init(inst, def);
|
|
42526
42666
|
ZodStringFormat.init(inst, def);
|
|
@@ -43283,6 +43423,9 @@ function superRefine(fn, params) {
|
|
|
43283
43423
|
return _superRefine(fn, params);
|
|
43284
43424
|
}
|
|
43285
43425
|
|
|
43426
|
+
// node_modules/zod/v4/classic/external.js
|
|
43427
|
+
config(en_default());
|
|
43428
|
+
|
|
43286
43429
|
// src/sbom-catalog/lambda/upload-event.ts
|
|
43287
43430
|
var requiredTextSchema = string2().min(1);
|
|
43288
43431
|
var destinationKeySegmentSchema = requiredTextSchema.refine((value) => !value.includes("/"), {
|
|
@@ -43301,8 +43444,7 @@ var collectionChildSchema = object({
|
|
|
43301
43444
|
});
|
|
43302
43445
|
var sharedConfigurationFields = {
|
|
43303
43446
|
originAccountId: destinationKeySegmentSchema,
|
|
43304
|
-
originAccountName: destinationKeySegmentSchema
|
|
43305
|
-
buildIdentifier: destinationKeySegmentSchema
|
|
43447
|
+
originAccountName: destinationKeySegmentSchema
|
|
43306
43448
|
};
|
|
43307
43449
|
var standaloneConfigurationSchema = object({
|
|
43308
43450
|
...sharedConfigurationFields,
|
|
@@ -43319,7 +43461,8 @@ var catalogConfigurationSchema = object({
|
|
|
43319
43461
|
children: array(collectionChildSchema).min(1)
|
|
43320
43462
|
});
|
|
43321
43463
|
var uploadEventSchema = object({
|
|
43322
|
-
eventId:
|
|
43464
|
+
eventId: destinationKeySegmentSchema,
|
|
43465
|
+
eventTime: iso_exports.datetime(),
|
|
43323
43466
|
stackId: requiredTextSchema,
|
|
43324
43467
|
stackStatus: requiredTextSchema,
|
|
43325
43468
|
configuration: union([standaloneConfigurationSchema, catalogConfigurationSchema])
|
|
@@ -43334,10 +43477,11 @@ var handler = async (event) => {
|
|
|
43334
43477
|
const uploadEvent = parseUploadEvent(event);
|
|
43335
43478
|
logger2.info("SBOM upload requested", {
|
|
43336
43479
|
eventId: uploadEvent.eventId,
|
|
43480
|
+
eventTime: uploadEvent.eventTime,
|
|
43337
43481
|
stackId: uploadEvent.stackId,
|
|
43338
43482
|
stackStatus: uploadEvent.stackStatus
|
|
43339
43483
|
});
|
|
43340
|
-
const result = await uploadArtifacts(uploadEvent.configuration);
|
|
43484
|
+
const result = await uploadArtifacts(uploadEvent.configuration, uploadEvent.eventId, uploadEvent.eventTime);
|
|
43341
43485
|
logger2.info("SBOM upload completed", {
|
|
43342
43486
|
manifestKey: result.manifestKey,
|
|
43343
43487
|
projects: result.projects
|
|
@@ -5,7 +5,6 @@ export interface AssetLocation {
|
|
|
5
5
|
interface BaseUploadConfiguration {
|
|
6
6
|
readonly originAccountId: string;
|
|
7
7
|
readonly originAccountName: string;
|
|
8
|
-
readonly buildIdentifier: string;
|
|
9
8
|
}
|
|
10
9
|
export interface StandaloneUploadConfiguration extends BaseUploadConfiguration {
|
|
11
10
|
readonly name: string;
|
|
@@ -50,6 +49,7 @@ export interface UploadResult {
|
|
|
50
49
|
}
|
|
51
50
|
export interface UploadEvent {
|
|
52
51
|
readonly eventId: string;
|
|
52
|
+
readonly eventTime: string;
|
|
53
53
|
readonly stackId: string;
|
|
54
54
|
readonly stackStatus: string;
|
|
55
55
|
readonly configuration: UploadConfiguration;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2JvbS1jYXRhbG9nL2xhbWJkYS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBBc3NldExvY2F0aW9uIHtcbiAgcmVhZG9ubHkgYnVja2V0TmFtZTogc3RyaW5nO1xuICByZWFkb25seSBvYmplY3RLZXk6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEJhc2VVcGxvYWRDb25maWd1cmF0aW9uIHtcbiAgcmVhZG9ubHkgb3JpZ2luQWNjb3VudElkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9yaWdpbkFjY291bnROYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhbmRhbG9uZVVwbG9hZENvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlVXBsb2FkQ29uZmlndXJhdGlvbiB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuICByZWFkb25seSB0YWdzPzogc3RyaW5nW107XG4gIHJlYWRvbmx5IHNib206IEFzc2V0TG9jYXRpb247XG4gIHJlYWRvbmx5IHZleD86IEFzc2V0TG9jYXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGlvbkNoaWxkIHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRhZ3M/OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgc2JvbTogQXNzZXRMb2NhdGlvbjtcbiAgcmVhZG9ubHkgdmV4PzogQXNzZXRMb2NhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYXRhbG9nVXBsb2FkQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VVcGxvYWRDb25maWd1cmF0aW9uIHtcbiAgcmVhZG9ubHkgY29sbGVjdGlvbk5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgY29sbGVjdGlvblZlcnNpb246IHN0cmluZztcbiAgcmVhZG9ubHkgY2hpbGRyZW46IENvbGxlY3Rpb25DaGlsZFtdO1xufVxuXG5leHBvcnQgdHlwZSBVcGxvYWRDb25maWd1cmF0aW9uID0gU3RhbmRhbG9uZVVwbG9hZENvbmZpZ3VyYXRpb24gfCBDYXRhbG9nVXBsb2FkQ29uZmlndXJhdGlvbjtcblxuZXhwb3J0IGludGVyZmFjZSBVcGxvYWRlZENhdGFsb2dQcm9qZWN0IHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRhZ3M/OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgaXNMYXRlc3Q6IHRydWU7XG4gIHJlYWRvbmx5IHNib21LZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgdmV4S2V5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YW5kYWxvbmVVcGxvYWRNYW5pZmVzdCBleHRlbmRzIFVwbG9hZGVkQ2F0YWxvZ1Byb2plY3Qge1xuICByZWFkb25seSBzY2hlbWFWZXJzaW9uOiAxO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhdGFsb2dVcGxvYWRNYW5pZmVzdCB7XG4gIHJlYWRvbmx5IHNjaGVtYVZlcnNpb246IDE7XG4gIHJlYWRvbmx5IGNvbGxlY3Rpb25OYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbGxlY3Rpb25WZXJzaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNoaWxkcmVuOiBVcGxvYWRlZENhdGFsb2dQcm9qZWN0W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBsb2FkUmVzdWx0IHtcbiAgcmVhZG9ubHkgbWFuaWZlc3RLZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgcHJvamVjdHM6IFVwbG9hZGVkQ2F0YWxvZ1Byb2plY3RbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGxvYWRFdmVudCB7XG4gIHJlYWRvbmx5IGV2ZW50SWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgZXZlbnRUaW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YWNrSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhY2tTdGF0dXM6IHN0cmluZztcbiAgcmVhZG9ubHkgY29uZmlndXJhdGlvbjogVXBsb2FkQ29uZmlndXJhdGlvbjtcbn1cbiJdfQ==
|
package/package.json
CHANGED
package/version.json
CHANGED