@fjall/components-infrastructure 0.88.1 → 0.88.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/lib/app.d.ts +1 -1
  2. package/dist/lib/app.js +5 -4
  3. package/dist/lib/config/aws/identityCenter.d.ts +4 -4
  4. package/dist/lib/config/aws/identityCenter.js +17 -62
  5. package/dist/lib/config/aws/identityCenterGroupMembership.js +27 -37
  6. package/dist/lib/config/aws/index.d.ts +0 -7
  7. package/dist/lib/config/aws/index.js +1 -8
  8. package/dist/lib/layers/layers/secrets-resolver/bin/resolve-secrets +30 -0
  9. package/dist/lib/layers/layers/secrets-resolver/bin/resolve-secrets.mjs +212 -0
  10. package/dist/lib/layers/secrets-resolver/bin/resolve-secrets +30 -0
  11. package/dist/lib/layers/secrets-resolver/bin/resolve-secrets.mjs +212 -0
  12. package/dist/lib/patterns/aws/account.js +24 -10
  13. package/dist/lib/patterns/aws/database.d.ts +2 -2
  14. package/dist/lib/patterns/aws/database.js +3 -3
  15. package/dist/lib/patterns/aws/organisation.d.ts +4 -17
  16. package/dist/lib/patterns/aws/organisation.js +7 -65
  17. package/dist/lib/patterns/aws/payload.js +5 -5
  18. package/dist/lib/resources/aws/compute/lambda.d.ts +12 -1
  19. package/dist/lib/resources/aws/compute/lambda.js +37 -10
  20. package/dist/lib/resources/aws/database/rdsAurora.js +2 -2
  21. package/dist/lib/resources/aws/iam/identityCenter/assignment.d.ts +0 -2
  22. package/dist/lib/resources/aws/iam/identityCenter/assignment.js +9 -45
  23. package/dist/lib/resources/aws/iam/identityCenter/group.d.ts +1 -3
  24. package/dist/lib/resources/aws/iam/identityCenter/group.js +7 -82
  25. package/dist/lib/resources/aws/iam/identityCenter/permissionSet.d.ts +1 -3
  26. package/dist/lib/resources/aws/iam/identityCenter/permissionSet.js +9 -93
  27. package/dist/lib/resources/aws/networking/ipamPool.js +56 -3
  28. package/dist/lib/resources/aws/secrets/parameter.js +5 -3
  29. package/dist/lib/resources/aws/storage/ecr.js +2 -4
  30. package/dist/lib/utils/getConfig.d.ts +4 -1
  31. package/dist/lib/utils/getConfig.js +1 -1
  32. package/dist/lib/utils/resourceNaming.js +4 -7
  33. package/package.json +5 -5
@@ -0,0 +1,212 @@
1
+ /**
2
+ * Fjall Secrets Resolver — runs before Lambda handler via AWS_LAMBDA_EXEC_WRAPPER.
3
+ *
4
+ * Resolves secrets from two sources using the AWS Parameters and Secrets Extension
5
+ * HTTP cache at localhost:2773:
6
+ *
7
+ * 1. SSM Parameter Store (user-managed secrets via `fjall secrets set`)
8
+ * Reads SSM_SECRETS_PATH + SSM_SECRET_NAMES, fetches each parameter,
9
+ * exports as environment variables.
10
+ *
11
+ * 2. Secrets Manager (CDK-managed secrets, e.g. database credentials)
12
+ * Scans for *_SECRET_ARN env vars, fetches each secret,
13
+ * optionally extracts a JSON field via the matching *_SECRET_FIELD var,
14
+ * exports as the prefix (e.g. DATABASE_PASSWORD_SECRET_ARN → DATABASE_PASSWORD).
15
+ *
16
+ * Outputs `export KEY='value'` lines to stdout. The bash wrapper evals this output
17
+ * and then execs into the Lambda runtime.
18
+ *
19
+ * The Extension may not be ready immediately during INIT phase, so all HTTP
20
+ * calls use a retry loop with exponential backoff.
21
+ */
22
+
23
+ const EXTENSION_PORT = process.env.PARAMETERS_SECRETS_EXTENSION_HTTP_PORT || "2773";
24
+ const EXTENSION_URL = `http://localhost:${EXTENSION_PORT}`;
25
+ const MAX_RETRIES = 5;
26
+ const INITIAL_DELAY_MS = 100;
27
+ /** Per-request timeout — generous for localhost; total budget bounded by Lambda INIT timeout */
28
+ const REQUEST_TIMEOUT_MS = 2000;
29
+
30
+ /**
31
+ * Fetch from the Extension HTTP API with retry and exponential backoff.
32
+ * The Extension starts during INIT phase 1 (Extension init) and the wrapper
33
+ * runs during INIT phase 2 (Runtime init), so it is usually ready — but
34
+ * a retry loop handles the timing edge case.
35
+ */
36
+ async function fetchWithRetry(path) {
37
+ let delay = INITIAL_DELAY_MS;
38
+ let lastError;
39
+
40
+ for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
41
+ try {
42
+ const response = await fetch(`${EXTENSION_URL}${path}`, {
43
+ headers: {
44
+ "X-Aws-Parameters-Secrets-Token": process.env.AWS_SESSION_TOKEN,
45
+ },
46
+ signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),
47
+ });
48
+ if (response.ok) {
49
+ return await response.json();
50
+ }
51
+ // 4xx errors (e.g. secret not found) — don't retry
52
+ if (response.status >= 400 && response.status < 500) {
53
+ const body = await response.text().catch(() => "");
54
+ const err = new Error(`Extension returned ${response.status}: ${body}`);
55
+ err.nonRetriable = true;
56
+ throw err;
57
+ }
58
+ // 5xx — retriable
59
+ const body = await response.text().catch(() => "");
60
+ lastError = new Error(`Extension returned ${response.status}: ${body}`);
61
+ } catch (err) {
62
+ if (err.nonRetriable) {
63
+ throw err;
64
+ }
65
+ lastError = err;
66
+ }
67
+
68
+ // Retry with backoff (both 5xx and network errors)
69
+ if (attempt < MAX_RETRIES - 1) {
70
+ await new Promise((r) => setTimeout(r, delay));
71
+ delay *= 2;
72
+ }
73
+ }
74
+
75
+ throw new Error(
76
+ `Failed to reach Extension after ${MAX_RETRIES} attempts: ${lastError?.message}`,
77
+ );
78
+ }
79
+
80
+ /**
81
+ * Escape a value for safe inclusion in a shell `export KEY='value'` statement.
82
+ * Single-quotes are the safest quoting mechanism — only embedded single-quotes
83
+ * need escaping via the close-reopen pattern: ' → '\''
84
+ */
85
+ function shellEscape(value) {
86
+ return "'" + value.replace(/'/g, "'\\''") + "'";
87
+ }
88
+
89
+ // POSIX env var names: letters, digits, underscores; must not start with a digit
90
+ const VALID_ENV_NAME = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
91
+
92
+ function assertValidEnvName(name, source) {
93
+ if (!VALID_ENV_NAME.test(name)) {
94
+ process.stderr.write(
95
+ `[fjall-resolver] Invalid env var name '${name}' from ${source}. ` +
96
+ `Names must match [a-zA-Z_][a-zA-Z0-9_]* (no dots or hyphens).\n`,
97
+ );
98
+ process.exit(1);
99
+ }
100
+ }
101
+
102
+ /**
103
+ * Resolve SSM Parameter Store secrets.
104
+ * Reads SSM_SECRETS_PATH and SSM_SECRET_NAMES, fetches each SecureString parameter.
105
+ */
106
+ async function resolveSsmSecrets() {
107
+ const basePath = process.env.SSM_SECRETS_PATH;
108
+ const secretNames = process.env.SSM_SECRET_NAMES;
109
+
110
+ if (!basePath || !secretNames) return [];
111
+
112
+ const names = secretNames.split(",").filter(Boolean);
113
+ const exports = [];
114
+
115
+ for (const name of names) {
116
+ assertValidEnvName(name, "SSM_SECRET_NAMES");
117
+ const paramPath = `${basePath}/${name}`;
118
+ const encodedPath = encodeURIComponent(paramPath);
119
+
120
+ try {
121
+ const data = await fetchWithRetry(
122
+ `/systemsmanager/parameters/get?name=${encodedPath}&withDecryption=true`,
123
+ );
124
+ const value = data?.Parameter?.Value;
125
+ if (value !== undefined && value !== null) {
126
+ exports.push(`export ${name}=${shellEscape(value)}`);
127
+ }
128
+ } catch (err) {
129
+ const msg = err instanceof Error ? err.message : String(err);
130
+ process.stderr.write(
131
+ `[fjall-resolver] Failed to resolve SSM parameter ${paramPath}: ${msg}\n`,
132
+ );
133
+ process.exit(1);
134
+ }
135
+ }
136
+
137
+ return exports;
138
+ }
139
+
140
+ /**
141
+ * Resolve Secrets Manager secrets.
142
+ * Scans for *_SECRET_ARN env vars, fetches each secret from SM,
143
+ * optionally extracts a JSON field, and exports as the prefix.
144
+ */
145
+ async function resolveSecretsManagerSecrets() {
146
+ const exports = [];
147
+
148
+ for (const [key, arn] of Object.entries(process.env)) {
149
+ if (!key.endsWith("_SECRET_ARN") || !arn) continue;
150
+
151
+ const prefix = key.slice(0, -"_SECRET_ARN".length);
152
+ assertValidEnvName(prefix, "Secrets Manager");
153
+ const fieldKey = `${prefix}_SECRET_FIELD`;
154
+ const field = process.env[fieldKey];
155
+
156
+ const encodedArn = encodeURIComponent(arn);
157
+
158
+ try {
159
+ const data = await fetchWithRetry(
160
+ `/secretsmanager/get?secretId=${encodedArn}`,
161
+ );
162
+
163
+ let value;
164
+ if (field && data?.SecretString) {
165
+ let parsed;
166
+ try {
167
+ parsed = JSON.parse(data.SecretString);
168
+ } catch {
169
+ throw new Error(
170
+ `Secret is not valid JSON but field '${field}' was requested. Store the secret as a JSON object.`,
171
+ );
172
+ }
173
+ value = parsed[field];
174
+ if (value === undefined) {
175
+ throw new Error(
176
+ `Field '${field}' not found in secret (${Object.keys(parsed).length} fields present).`,
177
+ );
178
+ }
179
+ } else {
180
+ value = data?.SecretString;
181
+ }
182
+
183
+ if (value !== undefined && value !== null) {
184
+ exports.push(`export ${prefix}=${shellEscape(String(value))}`);
185
+ }
186
+ } catch (err) {
187
+ const msg = err instanceof Error ? err.message : String(err);
188
+ process.stderr.write(
189
+ `[fjall-resolver] Failed to resolve SM secret ${prefix} (${arn}): ${msg}\n`,
190
+ );
191
+ process.exit(1);
192
+ }
193
+ }
194
+
195
+ return exports;
196
+ }
197
+
198
+ async function main() {
199
+ const ssmExports = await resolveSsmSecrets();
200
+ const smExports = await resolveSecretsManagerSecrets();
201
+ const allExports = [...ssmExports, ...smExports];
202
+
203
+ if (allExports.length > 0) {
204
+ process.stdout.write(allExports.join("\n") + "\n");
205
+ }
206
+ }
207
+
208
+ main().catch((err) => {
209
+ const msg = err instanceof Error ? err.message : String(err);
210
+ process.stderr.write(`[fjall-resolver] Fatal error: ${msg}\n`);
211
+ process.exit(1);
212
+ });
@@ -17,23 +17,37 @@ class Account extends aws_cdk_lib_1.Stack {
17
17
  super(scope, id, props);
18
18
  this.organisationType = "account";
19
19
  this.resolvedRegion = region;
20
- const organisation = new aws_1.OrganisationId(this, "OrganisationId");
21
- const account = new aws_1.AccountId(this, "AccountId");
20
+ const orgId = this.node.tryGetContext("orgId");
21
+ if (orgId) {
22
+ new aws_cdk_lib_1.CfnOutput(this, "OrganisationIdOutput", {
23
+ key: "OrganisationId",
24
+ value: orgId,
25
+ exportName: "OrganisationId"
26
+ });
27
+ }
28
+ new aws_cdk_lib_1.CfnOutput(this, "AccountIdOutput", {
29
+ key: "AccountId",
30
+ value: this.account,
31
+ exportName: "AccountId",
32
+ description: "AWS Account ID for this account"
33
+ });
22
34
  const eventBus = new aws_1.DefaultEventBus(this, "EventBus");
23
- if (id === "Account") {
24
- new aws_1.IpamPoolId(this, "IpamPoolId", {
25
- accountId,
26
- region,
27
- ownerId: aws_cdk_lib_1.Fn.select(4, aws_cdk_lib_1.Fn.split(":", organisation.organisationAccountArn.value))
35
+ const ipamPoolId = this.node.tryGetContext("ipamPoolId");
36
+ if (id === "Account" && ipamPoolId) {
37
+ const regionSuffix = region.replace(/-/g, "");
38
+ new aws_cdk_lib_1.CfnOutput(this, "IpamPoolIdOutput", {
39
+ key: `IpamPoolId${accountId}${regionSuffix}`,
40
+ value: ipamPoolId,
41
+ exportName: `IpamPoolId${accountId}${regionSuffix}`
28
42
  });
29
43
  }
30
44
  new cloudTrail_1.ManagementEventsTrail(this, "CloudTrail", {
31
- accountId: account.accountId.value,
45
+ accountId: this.account,
32
46
  region
33
47
  });
34
48
  new aws_1.EcrDefaultImage(this, "EcrDefaultImage", {
35
49
  region,
36
- accountId: account.accountId.value,
50
+ accountId: this.account,
37
51
  eventBusArn: eventBus.defaultEventBusArn.value
38
52
  });
39
53
  const environment = config.environment || "unknown";
@@ -56,4 +70,4 @@ class Account extends aws_cdk_lib_1.Stack {
56
70
  }
57
71
  }
58
72
  exports.Account = Account;
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvYWNjb3VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBb0U7QUFDcEUsMENBTTBCO0FBRTFCLDREQUFvRTtBQUNwRSxxREFBa0Q7QUFDbEQsd0VBQXFFO0FBUXJFLE1BQWEsT0FBUSxTQUFRLG1CQUFLO0lBSWhDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBbUI7UUFDM0QsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBUyxHQUFFLENBQUM7UUFDM0IsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ3RELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUU3QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksS0FBSyxDQUNiLG9HQUFvRyxDQUNyRyxDQUFDO1FBQ0osQ0FBQztRQUVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBZFYscUJBQWdCLEdBQXFCLFNBQVMsQ0FBQztRQWdCN0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7UUFFN0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxvQkFBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRWhFLE1BQU0sT0FBTyxHQUFHLElBQUksZUFBUyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVqRCxNQUFNLFFBQVEsR0FBRyxJQUFJLHFCQUFlLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXZELElBQUksRUFBRSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3JCLElBQUksZ0JBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO2dCQUNqQyxTQUFTO2dCQUNULE1BQU07Z0JBQ04sT0FBTyxFQUFFLGdCQUFFLENBQUMsTUFBTSxDQUNoQixDQUFDLEVBQ0QsZ0JBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FDekQ7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxrQ0FBcUIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO1lBQzVDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUs7WUFDbEMsTUFBTTtTQUNQLENBQUMsQ0FBQztRQUVILElBQUkscUJBQWUsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLEVBQUU7WUFDM0MsTUFBTTtZQUNOLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUs7WUFDbEMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLO1NBQy9DLENBQUMsQ0FBQztRQUVILE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksU0FBUyxDQUFDO1FBRXBELE1BQU0sbUJBQW1CLEdBQUcsV0FBVyxLQUFLLFlBQVksQ0FBQztRQUN6RCxNQUFNLG1CQUFtQixHQUN2QixNQUFNLENBQUMsc0JBQXNCLElBQUksTUFBTSxLQUFLLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQztRQUU1RSxJQUNFLFdBQVcsS0FBSyxZQUFZO1lBQzVCLG1CQUFtQjtZQUNuQixtQkFBbUIsRUFDbkIsQ0FBQztZQUNELElBQUksbUNBQWdCLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFO2dCQUM3QyxNQUFNO2dCQUNOLFNBQVM7YUFDVixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSx1QkFBUyxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUU7WUFDakMsR0FBRyxFQUFFLGFBQWE7WUFDbEIsS0FBSyxFQUFFLFdBQVc7WUFDbEIsVUFBVSxFQUFFLGFBQWE7WUFDekIsV0FBVyxFQUNULDRFQUE0RTtTQUMvRSxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUF4RUQsMEJBd0VDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2ZuT3V0cHV0LCBGbiwgU3RhY2ssIHR5cGUgU3RhY2tQcm9wcyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgT3JnYW5pc2F0aW9uSWQsXG4gIEFjY291bnRJZCxcbiAgSXBhbVBvb2xJZCxcbiAgRWNyRGVmYXVsdEltYWdlLFxuICBEZWZhdWx0RXZlbnRCdXNcbn0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3NcIjtcbmltcG9ydCB7IHR5cGUgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IE1hbmFnZW1lbnRFdmVudHNUcmFpbCB9IGZyb20gXCIuLi8uLi9jb25maWcvYXdzL2Nsb3VkVHJhaWxcIjtcbmltcG9ydCB7IGdldENvbmZpZyB9IGZyb20gXCIuLi8uLi91dGlscy9nZXRDb25maWdcIjtcbmltcG9ydCB7IERpc2FzdGVyUmVjb3ZlcnkgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2F3cy9kaXNhc3RlclJlY292ZXJ5XCI7XG5pbXBvcnQgdHlwZSB7IE9yZ2FuaXNhdGlvblR5cGUgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL29yZ2FuaXNhdGlvblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFjY291bnRQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICBhY2NvdW50SWQ/OiBzdHJpbmc7XG4gIHJlZ2lvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEFjY291bnQgZXh0ZW5kcyBTdGFjayB7XG4gIHB1YmxpYyByZWFkb25seSBvcmdhbmlzYXRpb25UeXBlOiBPcmdhbmlzYXRpb25UeXBlID0gXCJhY2NvdW50XCI7XG4gIHByb3RlY3RlZCByZWFkb25seSByZXNvbHZlZFJlZ2lvbjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBBY2NvdW50UHJvcHMpIHtcbiAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgICBjb25zdCBhY2NvdW50SWQgPSBwcm9wcy5hY2NvdW50SWQgPz8gY29uZmlnLmFjY291bnRJZDtcbiAgICBjb25zdCByZWdpb24gPSBwcm9wcy5yZWdpb24gPz8gY29uZmlnLnJlZ2lvbjtcblxuICAgIGlmICghYWNjb3VudElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQWNjb3VudCByZXF1aXJlcyBhbiBhY2NvdW50IElELiBQcm92aWRlIGl0IHZpYSBhY2NvdW50SWQgb3IgZW5zdXJlIENESyBjb250ZXh0IGluY2x1ZGVzIGFjY291bnRJZC5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMucmVzb2x2ZWRSZWdpb24gPSByZWdpb247XG5cbiAgICBjb25zdCBvcmdhbmlzYXRpb24gPSBuZXcgT3JnYW5pc2F0aW9uSWQodGhpcywgXCJPcmdhbmlzYXRpb25JZFwiKTtcblxuICAgIGNvbnN0IGFjY291bnQgPSBuZXcgQWNjb3VudElkKHRoaXMsIFwiQWNjb3VudElkXCIpO1xuXG4gICAgY29uc3QgZXZlbnRCdXMgPSBuZXcgRGVmYXVsdEV2ZW50QnVzKHRoaXMsIFwiRXZlbnRCdXNcIik7XG5cbiAgICBpZiAoaWQgPT09IFwiQWNjb3VudFwiKSB7XG4gICAgICBuZXcgSXBhbVBvb2xJZCh0aGlzLCBcIklwYW1Qb29sSWRcIiwge1xuICAgICAgICBhY2NvdW50SWQsXG4gICAgICAgIHJlZ2lvbixcbiAgICAgICAgb3duZXJJZDogRm4uc2VsZWN0KFxuICAgICAgICAgIDQsXG4gICAgICAgICAgRm4uc3BsaXQoXCI6XCIsIG9yZ2FuaXNhdGlvbi5vcmdhbmlzYXRpb25BY2NvdW50QXJuLnZhbHVlKVxuICAgICAgICApXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBuZXcgTWFuYWdlbWVudEV2ZW50c1RyYWlsKHRoaXMsIFwiQ2xvdWRUcmFpbFwiLCB7XG4gICAgICBhY2NvdW50SWQ6IGFjY291bnQuYWNjb3VudElkLnZhbHVlLFxuICAgICAgcmVnaW9uXG4gICAgfSk7XG5cbiAgICBuZXcgRWNyRGVmYXVsdEltYWdlKHRoaXMsIFwiRWNyRGVmYXVsdEltYWdlXCIsIHtcbiAgICAgIHJlZ2lvbixcbiAgICAgIGFjY291bnRJZDogYWNjb3VudC5hY2NvdW50SWQudmFsdWUsXG4gICAgICBldmVudEJ1c0FybjogZXZlbnRCdXMuZGVmYXVsdEV2ZW50QnVzQXJuLnZhbHVlXG4gICAgfSk7XG5cbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IGNvbmZpZy5lbnZpcm9ubWVudCB8fCBcInVua25vd25cIjtcblxuICAgIGNvbnN0IGlzQ29tcGxpYW5jZUFjY291bnQgPSBlbnZpcm9ubWVudCA9PT0gXCJjb21wbGlhbmNlXCI7XG4gICAgY29uc3QgaXNSZXBsaWNhdGlvblJlZ2lvbiA9XG4gICAgICBjb25maWcuZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbiAmJiByZWdpb24gPT09IGNvbmZpZy5kaXNhc3RlclJlY292ZXJ5UmVnaW9uO1xuXG4gICAgaWYgKFxuICAgICAgZW52aXJvbm1lbnQgPT09IFwicHJvZHVjdGlvblwiIHx8XG4gICAgICBpc0NvbXBsaWFuY2VBY2NvdW50IHx8XG4gICAgICBpc1JlcGxpY2F0aW9uUmVnaW9uXG4gICAgKSB7XG4gICAgICBuZXcgRGlzYXN0ZXJSZWNvdmVyeSh0aGlzLCBcIkRpc2FzdGVyUmVjb3ZlcnlcIiwge1xuICAgICAgICByZWdpb24sXG4gICAgICAgIGFjY291bnRJZFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBcIkVudmlyb25tZW50XCIsIHtcbiAgICAgIGtleTogXCJFbnZpcm9ubWVudFwiLFxuICAgICAgdmFsdWU6IGVudmlyb25tZW50LFxuICAgICAgZXhwb3J0TmFtZTogXCJFbnZpcm9ubWVudFwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRW52aXJvbm1lbnQgdHlwZSBmb3IgdGhpcyBhY2NvdW50IChlLmcuLCBwcm9kdWN0aW9uLCBzdGFnaW5nLCBkZXZlbG9wbWVudClcIlxuICAgIH0pO1xuICB9XG59XG4iXX0=
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvYWNjb3VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBZ0U7QUFDaEUsMENBQW9FO0FBRXBFLDREQUFvRTtBQUNwRSxxREFBa0Q7QUFDbEQsd0VBQXFFO0FBUXJFLE1BQWEsT0FBUSxTQUFRLG1CQUFLO0lBSWhDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBbUI7UUFDM0QsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBUyxHQUFFLENBQUM7UUFDM0IsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ3RELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUU3QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksS0FBSyxDQUNiLG9HQUFvRyxDQUNyRyxDQUFDO1FBQ0osQ0FBQztRQUVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBZFYscUJBQWdCLEdBQXFCLFNBQVMsQ0FBQztRQWdCN0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7UUFFN0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUU7Z0JBQzFDLEdBQUcsRUFBRSxnQkFBZ0I7Z0JBQ3JCLEtBQUssRUFBRSxLQUFLO2dCQUNaLFVBQVUsRUFBRSxnQkFBZ0I7YUFDN0IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLEVBQUU7WUFDckMsR0FBRyxFQUFFLFdBQVc7WUFDaEIsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ25CLFVBQVUsRUFBRSxXQUFXO1lBQ3ZCLFdBQVcsRUFBRSxpQ0FBaUM7U0FDL0MsQ0FBQyxDQUFDO1FBRUgsTUFBTSxRQUFRLEdBQUcsSUFBSSxxQkFBZSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUV2RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6RCxJQUFJLEVBQUUsS0FBSyxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7WUFDbkMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDOUMsSUFBSSx1QkFBUyxDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRTtnQkFDdEMsR0FBRyxFQUFFLGFBQWEsU0FBUyxHQUFHLFlBQVksRUFBRTtnQkFDNUMsS0FBSyxFQUFFLFVBQVU7Z0JBQ2pCLFVBQVUsRUFBRSxhQUFhLFNBQVMsR0FBRyxZQUFZLEVBQUU7YUFDcEQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksa0NBQXFCLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtZQUM1QyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDdkIsTUFBTTtTQUNQLENBQUMsQ0FBQztRQUVILElBQUkscUJBQWUsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLEVBQUU7WUFDM0MsTUFBTTtZQUNOLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTztZQUN2QixXQUFXLEVBQUUsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEtBQUs7U0FDL0MsQ0FBQyxDQUFDO1FBRUgsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUM7UUFFcEQsTUFBTSxtQkFBbUIsR0FBRyxXQUFXLEtBQUssWUFBWSxDQUFDO1FBQ3pELE1BQU0sbUJBQW1CLEdBQ3ZCLE1BQU0sQ0FBQyxzQkFBc0IsSUFBSSxNQUFNLEtBQUssTUFBTSxDQUFDLHNCQUFzQixDQUFDO1FBRTVFLElBQ0UsV0FBVyxLQUFLLFlBQVk7WUFDNUIsbUJBQW1CO1lBQ25CLG1CQUFtQixFQUNuQixDQUFDO1lBQ0QsSUFBSSxtQ0FBZ0IsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7Z0JBQzdDLE1BQU07Z0JBQ04sU0FBUzthQUNWLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUNqQyxHQUFHLEVBQUUsYUFBYTtZQUNsQixLQUFLLEVBQUUsV0FBVztZQUNsQixVQUFVLEVBQUUsYUFBYTtZQUN6QixXQUFXLEVBQ1QsNEVBQTRFO1NBQy9FLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQW5GRCwwQkFtRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQsIFN0YWNrLCB0eXBlIFN0YWNrUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IEVjckRlZmF1bHRJbWFnZSwgRGVmYXVsdEV2ZW50QnVzIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3NcIjtcbmltcG9ydCB7IHR5cGUgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IE1hbmFnZW1lbnRFdmVudHNUcmFpbCB9IGZyb20gXCIuLi8uLi9jb25maWcvYXdzL2Nsb3VkVHJhaWxcIjtcbmltcG9ydCB7IGdldENvbmZpZyB9IGZyb20gXCIuLi8uLi91dGlscy9nZXRDb25maWdcIjtcbmltcG9ydCB7IERpc2FzdGVyUmVjb3ZlcnkgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2F3cy9kaXNhc3RlclJlY292ZXJ5XCI7XG5pbXBvcnQgdHlwZSB7IE9yZ2FuaXNhdGlvblR5cGUgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL29yZ2FuaXNhdGlvblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFjY291bnRQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICBhY2NvdW50SWQ/OiBzdHJpbmc7XG4gIHJlZ2lvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEFjY291bnQgZXh0ZW5kcyBTdGFjayB7XG4gIHB1YmxpYyByZWFkb25seSBvcmdhbmlzYXRpb25UeXBlOiBPcmdhbmlzYXRpb25UeXBlID0gXCJhY2NvdW50XCI7XG4gIHByb3RlY3RlZCByZWFkb25seSByZXNvbHZlZFJlZ2lvbjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBBY2NvdW50UHJvcHMpIHtcbiAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgICBjb25zdCBhY2NvdW50SWQgPSBwcm9wcy5hY2NvdW50SWQgPz8gY29uZmlnLmFjY291bnRJZDtcbiAgICBjb25zdCByZWdpb24gPSBwcm9wcy5yZWdpb24gPz8gY29uZmlnLnJlZ2lvbjtcblxuICAgIGlmICghYWNjb3VudElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQWNjb3VudCByZXF1aXJlcyBhbiBhY2NvdW50IElELiBQcm92aWRlIGl0IHZpYSBhY2NvdW50SWQgb3IgZW5zdXJlIENESyBjb250ZXh0IGluY2x1ZGVzIGFjY291bnRJZC5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMucmVzb2x2ZWRSZWdpb24gPSByZWdpb247XG5cbiAgICBjb25zdCBvcmdJZCA9IHRoaXMubm9kZS50cnlHZXRDb250ZXh0KFwib3JnSWRcIik7XG4gICAgaWYgKG9yZ0lkKSB7XG4gICAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiT3JnYW5pc2F0aW9uSWRPdXRwdXRcIiwge1xuICAgICAgICBrZXk6IFwiT3JnYW5pc2F0aW9uSWRcIixcbiAgICAgICAgdmFsdWU6IG9yZ0lkLFxuICAgICAgICBleHBvcnROYW1lOiBcIk9yZ2FuaXNhdGlvbklkXCJcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgXCJBY2NvdW50SWRPdXRwdXRcIiwge1xuICAgICAga2V5OiBcIkFjY291bnRJZFwiLFxuICAgICAgdmFsdWU6IHRoaXMuYWNjb3VudCxcbiAgICAgIGV4cG9ydE5hbWU6IFwiQWNjb3VudElkXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJBV1MgQWNjb3VudCBJRCBmb3IgdGhpcyBhY2NvdW50XCJcbiAgICB9KTtcblxuICAgIGNvbnN0IGV2ZW50QnVzID0gbmV3IERlZmF1bHRFdmVudEJ1cyh0aGlzLCBcIkV2ZW50QnVzXCIpO1xuXG4gICAgY29uc3QgaXBhbVBvb2xJZCA9IHRoaXMubm9kZS50cnlHZXRDb250ZXh0KFwiaXBhbVBvb2xJZFwiKTtcbiAgICBpZiAoaWQgPT09IFwiQWNjb3VudFwiICYmIGlwYW1Qb29sSWQpIHtcbiAgICAgIGNvbnN0IHJlZ2lvblN1ZmZpeCA9IHJlZ2lvbi5yZXBsYWNlKC8tL2csIFwiXCIpO1xuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBcIklwYW1Qb29sSWRPdXRwdXRcIiwge1xuICAgICAgICBrZXk6IGBJcGFtUG9vbElkJHthY2NvdW50SWR9JHtyZWdpb25TdWZmaXh9YCxcbiAgICAgICAgdmFsdWU6IGlwYW1Qb29sSWQsXG4gICAgICAgIGV4cG9ydE5hbWU6IGBJcGFtUG9vbElkJHthY2NvdW50SWR9JHtyZWdpb25TdWZmaXh9YFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmV3IE1hbmFnZW1lbnRFdmVudHNUcmFpbCh0aGlzLCBcIkNsb3VkVHJhaWxcIiwge1xuICAgICAgYWNjb3VudElkOiB0aGlzLmFjY291bnQsXG4gICAgICByZWdpb25cbiAgICB9KTtcblxuICAgIG5ldyBFY3JEZWZhdWx0SW1hZ2UodGhpcywgXCJFY3JEZWZhdWx0SW1hZ2VcIiwge1xuICAgICAgcmVnaW9uLFxuICAgICAgYWNjb3VudElkOiB0aGlzLmFjY291bnQsXG4gICAgICBldmVudEJ1c0FybjogZXZlbnRCdXMuZGVmYXVsdEV2ZW50QnVzQXJuLnZhbHVlXG4gICAgfSk7XG5cbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IGNvbmZpZy5lbnZpcm9ubWVudCB8fCBcInVua25vd25cIjtcblxuICAgIGNvbnN0IGlzQ29tcGxpYW5jZUFjY291bnQgPSBlbnZpcm9ubWVudCA9PT0gXCJjb21wbGlhbmNlXCI7XG4gICAgY29uc3QgaXNSZXBsaWNhdGlvblJlZ2lvbiA9XG4gICAgICBjb25maWcuZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbiAmJiByZWdpb24gPT09IGNvbmZpZy5kaXNhc3RlclJlY292ZXJ5UmVnaW9uO1xuXG4gICAgaWYgKFxuICAgICAgZW52aXJvbm1lbnQgPT09IFwicHJvZHVjdGlvblwiIHx8XG4gICAgICBpc0NvbXBsaWFuY2VBY2NvdW50IHx8XG4gICAgICBpc1JlcGxpY2F0aW9uUmVnaW9uXG4gICAgKSB7XG4gICAgICBuZXcgRGlzYXN0ZXJSZWNvdmVyeSh0aGlzLCBcIkRpc2FzdGVyUmVjb3ZlcnlcIiwge1xuICAgICAgICByZWdpb24sXG4gICAgICAgIGFjY291bnRJZFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBcIkVudmlyb25tZW50XCIsIHtcbiAgICAgIGtleTogXCJFbnZpcm9ubWVudFwiLFxuICAgICAgdmFsdWU6IGVudmlyb25tZW50LFxuICAgICAgZXhwb3J0TmFtZTogXCJFbnZpcm9ubWVudFwiLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRW52aXJvbm1lbnQgdHlwZSBmb3IgdGhpcyBhY2NvdW50IChlLmcuLCBwcm9kdWN0aW9uLCBzdGFnaW5nLCBkZXZlbG9wbWVudClcIlxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -230,7 +230,7 @@ export type IDatabaseProps = AuroraDatabaseProps | InstanceDatabaseProps | Globa
230
230
  * // Aurora database - returns RelationalDatabase
231
231
  * const aurora = app.addDatabase(DatabaseFactory.build("Main", {
232
232
  * type: "Aurora",
233
- * databaseName: "myapp"
233
+ * databaseName: "my_app"
234
234
  * }));
235
235
  * aurora.getHostEndpoint(); // Available
236
236
  *
@@ -283,7 +283,7 @@ export declare class DynamoDBDatabase extends Construct implements IDynamoDBData
283
283
  * @example
284
284
  * const db = app.addDatabase(DatabaseFactory.build("Main", {
285
285
  * type: "Aurora",
286
- * databaseName: "myapp"
286
+ * databaseName: "my_app"
287
287
  * }));
288
288
  * db.grantConnect(lambda);
289
289
  */
@@ -169,7 +169,7 @@ function validateDatabaseProps(props) {
169
169
  * // Aurora database - returns RelationalDatabase
170
170
  * const aurora = app.addDatabase(DatabaseFactory.build("Main", {
171
171
  * type: "Aurora",
172
- * databaseName: "myapp"
172
+ * databaseName: "my_app"
173
173
  * }));
174
174
  * aurora.getHostEndpoint(); // Available
175
175
  *
@@ -266,7 +266,7 @@ exports.DynamoDBDatabase = DynamoDBDatabase;
266
266
  * @example
267
267
  * const db = app.addDatabase(DatabaseFactory.build("Main", {
268
268
  * type: "Aurora",
269
- * databaseName: "myapp"
269
+ * databaseName: "my_app"
270
270
  * }));
271
271
  * db.grantConnect(lambda);
272
272
  */
@@ -458,4 +458,4 @@ Object.defineProperty(exports, "isDynamoDBDatabase", { enumerable: true, get: fu
458
458
  Object.defineProperty(exports, "isAuroraDatabase", { enumerable: true, get: function () { return database_js_1.isAuroraDatabase; } });
459
459
  Object.defineProperty(exports, "isInstanceDatabase", { enumerable: true, get: function () { return database_js_1.isInstanceDatabase; } });
460
460
  Object.defineProperty(exports, "isGlobalAuroraDatabase", { enumerable: true, get: function () { return database_js_1.isGlobalAuroraDatabase; } });
461
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL2RhdGFiYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXFIQSx3REFFQztBQUVELDhDQUVDO0FBRUQsMENBT0M7QUFrREQsMENBU0M7QUFLRCx3Q0FTQztBQTdNRCwyQ0FBdUM7QUFDdkMsNkNBQStDO0FBRy9DLDJEQUFzRTtBQUN0RSxrRkFBK0U7QUFDL0Usb0VBSytDO0FBQy9DLHlFQUd5QztBQUN6Qyx5RUFBK0Q7QUFxQi9ELGlEQVM2QjtBQUM3Qiw2Q0FBdUM7QUFXMUIsUUFBQSxzQkFBc0IsR0FTL0I7SUFDRixVQUFVLEVBQUU7UUFDVixNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUU7UUFDL0MsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFO1FBQ2pELGVBQWUsRUFBRSxVQUFVO1FBQzNCLGFBQWEsRUFBRSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUU7UUFDdkMsZUFBZSxFQUFFLDhDQUE4QztLQUNoRTtJQUNELEtBQUssRUFBRTtRQUNMLHdFQUF3RTtRQUN4RSxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRTtRQUN0RSxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUU7UUFDbkQsZUFBZSxFQUFFLE9BQU87UUFDeEIsYUFBYSxFQUFFLEVBQUUsd0JBQXdCLEVBQUUsSUFBSSxFQUFFO1FBQ2pELGVBQWUsRUFBRSx5Q0FBeUM7S0FDM0Q7Q0FDRixDQUFDO0FBRUYsTUFBTSx1QkFBdUIsR0FBaUQ7SUFDNUUsVUFBVSxFQUFFLEdBQUcsRUFBRTtRQUNmLE1BQU0sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcs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Y0FBYyxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQVksQ0FBQyxPQUFxQjtRQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELENBQUM7Q0FDRjtBQWhPRCxnREFnT0M7QUFTRCw0QkFBNEI7QUFDNUIsd0RBV2tDO0FBTGhDLG1IQUFBLG9CQUFvQixPQUFBO0FBQ3BCLGlIQUFBLGtCQUFrQixPQUFBO0FBQ2xCLCtHQUFBLGdCQUFnQixPQUFBO0FBQ2hCLGlIQUFBLGtCQUFrQixPQUFBO0FBQ2xCLHFIQUFBLHNCQUFzQixPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IENmbk91dHB1dCwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuaW1wb3J0IHR5cGUgQXBwIGZyb20gXCIuLi8uLi9hcHBcIjtcbmltcG9ydCB7IFJkc0F1cm9yYSwgUmRzSW5zdGFuY2UgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9kYXRhYmFzZVwiO1xuaW1wb3J0IHsgUmRzQXVyb3JhR2xvYmFsIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvZGF0YWJhc2UvcmRzQXVyb3JhR2xvYmFsXCI7XG5pbXBvcnQge1xuICBEeW5hbW9EQlRhYmxlLFxuICB0eXBlIER5bmFtb0RCS2V5U2NoZW1hLFxuICB0eXBlIER5bmFtb0RCR2xvYmFsU2Vjb25kYXJ5SW5kZXgsXG4gIHR5cGUgRHluYW1vREJUYWJsZVByb3BzXG59IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2RhdGFiYXNlL2R5bmFtb2RiXCI7XG5pbXBvcnQge1xuICBGamFsbExvZ2dlcixcbiAgd2FybklmUHJvcGVydGllc0lnbm9yZWRcbn0gZnJvbSBcIi4uLy4uL3V0aWxzL3ZhbGlkYXRpb25Mb2dnZXIuanNcIjtcbmltcG9ydCB7IHRvUGFzY2FsQ2FzZSB9IGZyb20gXCIuLi8uLi91dGlscy9jYXBpdGFsaXNlU3RyaW5nLmpzXCI7XG5cbmltcG9ydCB7XG4gIHR5cGUgQ29ubmVjdGlvbnMsXG4gIHR5cGUgSUNvbm5lY3RhYmxlLFxuICB0eXBlIElWcGMsXG4gIHR5cGUgU3VibmV0U2VsZWN0aW9uXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgeyB0eXBlIElUYWJsZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGJcIjtcbmltcG9ydCB7IHR5cGUgU2VjcmV0IH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3Mvc2VjcmV0c1wiO1xuaW1wb3J0IHsgdHlwZSBJR3JhbnRhYmxlLCB0eXBlIEdyYW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7XG4gIHR5cGUgSVJlbGF0aW9uYWxEYXRhYmFzZSxcbiAgdHlwZSBJRHluYW1vREJEYXRhYmFzZSxcbiAgdHlwZSBBbnlEYXRhYmFzZSxcbiAgdHlwZSBSZWxhdGlvbmFsRGF0YWJhc2VUeXBlXG59IGZyb20gXCIuL2ludGVyZmFjZXMvZGF0YWJhc2UuanNcIjtcbmltcG9ydCB7XG4gIHR5cGUgSUR5bmFtb0RCQ29ubmVjdG9yLFxuICB0eXBlIElTZWN1cml0eUdyb3VwQ29ubmVjdG9yXG59IGZyb20gXCIuL2ludGVyZmFjZXMvY29ubmVjdG9yLmpzXCI7XG5pbXBvcnQge1xuICB0eXBlIElJbnN0YW5jZUVuZ2luZSxcbiAgdHlwZSBJQ2x1c3RlckVuZ2luZSxcbiAgRGF0YWJhc2VDbHVzdGVyRW5naW5lLFxuICBEYXRhYmFzZUluc3RhbmNlRW5naW5lLFxuICBBdXJvcmFQb3N0Z3Jlc0VuZ2luZVZlcnNpb24sXG4gIEF1cm9yYU15c3FsRW5naW5lVmVyc2lvbixcbiAgUG9zdGdyZXNFbmdpbmVWZXJzaW9uLFxuICBNeXNxbEVuZ2luZVZlcnNpb25cbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yZHNcIjtcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyB0eXBlIElLZXkgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWttc1wiO1xuXG5leHBvcnQgdHlwZSBEYXRhYmFzZUVuZ2luZSA9IFwicG9zdGdyZXNxbFwiIHwgXCJteXNxbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVuZ2luZUNvbmZpZyB7XG4gIGRlZmF1bHRVc2VybmFtZTogc3RyaW5nO1xuICBzc2xQYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICByb3RhdGlvbkFwcE5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IERBVEFCQVNFX0VOR0lORV9DT05GSUc6IFJlY29yZDxcbiAgRGF0YWJhc2VFbmdpbmUsXG4gIHtcbiAgICBhdXJvcmE6IHsgdmVyc2lvbjogc3RyaW5nOyBtYWpvclZlcnNpb246IHN0cmluZyB9O1xuICAgIGluc3RhbmNlOiB7IHZlcnNpb246IHN0cmluZzsgbWFqb3JWZXJzaW9uOiBzdHJpbmcgfTtcbiAgICBkZWZhdWx0VXNlcm5hbWU6IHN0cmluZztcbiAgICBzc2xQYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHJvdGF0aW9uQXBwTmFtZTogc3RyaW5nO1xuICB9XG4+ID0ge1xuICBwb3N0Z3Jlc3FsOiB7XG4gICAgYXVyb3JhOiB7IHZlcnNpb246IFwiMTYuNlwiLCBtYWpvclZlcnNpb246IFwiMTZcIiB9LFxuICAgIGluc3RhbmNlOiB7IHZlcnNpb246IFwiMTcuNVwiLCBtYWpvclZlcnNpb246IFwiMTdcIiB9LFxuICAgIGRlZmF1bHRVc2VybmFtZTogXCJwb3N0Z3Jlc1wiLFxuICAgIHNzbFBhcmFtZXRlcnM6IHsgXCJyZHMuZm9yY2Vfc3NsXCI6IFwiMVwiIH0sXG4gICAgcm90YXRpb25BcHBOYW1lOiBcIlNlY3JldHNNYW5hZ2VyUkRTUG9zdGdyZVNRTFJvdGF0aW9uTXVsdGlVc2VyXCJcbiAgfSxcbiAgbXlzcWw6IHtcbiAgICAvLyBtYWpvclZlcnNpb24gbXVzdCBiZSBBdXJvcmEgdmVyc2lvbiAoMy4wOC4wKSwgTk9UIE15U1FMIHZlcnNpb24gKDguMClcbiAgICBhdXJvcmE6IHsgdmVyc2lvbjogXCI4LjAubXlzcWxfYXVyb3JhLjMuMDguMFwiLCBtYWpvclZlcnNpb246IFwiMy4wOC4wXCIgfSxcbiAgICBpbnN0YW5jZTogeyB2ZXJzaW9uOiBcIjguNC40XCIsIG1ham9yVmVyc2lvbjogXCI4LjRcIiB9LFxuICAgIGRlZmF1bHRVc2VybmFtZTogXCJhZG1pblwiLFxuICAgIHNzbFBhcmFtZXRlcnM6IHsgcmVxdWlyZV9zZWN1cmVfdHJhbnNwb3J0OiBcIk9OXCIgfSxcbiAgICByb3RhdGlvbkFwcE5hbWU6IFwiU2VjcmV0c01hbmFnZXJSRFNNeVNRTFJvdGF0aW9uTXVsdGlVc2VyXCJcbiAgfVxufTtcblxuY29uc3QgQVVST1JBX0VOR0lORV9GQUNUT1JJRVM6IFJlY29yZDxEYXRhYmFzZUVuZ2luZSwgKCkgPT4gSUNsdXN0ZXJFbmdpbmU+ID0ge1xuICBwb3N0Z3Jlc3FsOiAoKSA9PiB7XG4gICAgY29uc3QgeyB2ZXJzaW9uLCBtYWpvclZlcnNpb24gfSA9IERBVEFCQVNFX0VOR0lORV9DT05GSUcucG9zdGdyZXNxbC5hdXJvcmE7XG4gICAgcmV0dXJuIERhdGFiYXNlQ2x1c3RlckVuZ2luZS5hdXJvcmFQb3N0Z3Jlcyh7XG4gICAgICB2ZXJzaW9uOiBBdXJvcmFQb3N0Z3Jlc0VuZ2luZVZlcnNpb24ub2YodmVyc2lvbiwgbWFqb3JWZXJzaW9uKVxuICAgIH0pO1xuICB9LFxuICBteXNxbDogKCkgPT4ge1xuICAgIGNvbnN0IHsgdmVyc2lvbiwgbWFqb3JWZXJzaW9uIH0gPSBEQVRBQkFTRV9FTkdJTkVfQ09ORklHLm15c3FsLmF1cm9yYTtcbiAgICByZXR1cm4gRGF0YWJhc2VDbHVzdGVyRW5naW5lLmF1cm9yYU15c3FsKHtcbiAgICAgIHZlcnNpb246IEF1cm9yYU15c3FsRW5naW5lVmVyc2lvbi5vZih2ZXJzaW9uLCBtYWpvclZlcnNpb24pXG4gICAgfSk7XG4gIH1cbn07XG5cbmNvbnN0IElOU1RBTkNFX0VOR0lORV9GQUNUT1JJRVM6IFJlY29yZDxEYXRhYmFzZUVuZ2luZSwgKCkgPT4gSUluc3RhbmNlRW5naW5lPiA9XG4gIHtcbiAgICBwb3N0Z3Jlc3FsOiAoKSA9PiB7XG4gICAgICBjb25zdCB7IHZlcnNpb24sIG1ham9yVmVyc2lvbiB9ID1cbiAgICAgICAgREFUQUJBU0VfRU5HSU5FX0NPTkZJRy5wb3N0Z3Jlc3FsLmluc3RhbmNlO1xuICAgICAgcmV0dXJuIERhdGFiYXNlSW5zdGFuY2VFbmdpbmUucG9zdGdyZXMoe1xuICAgICAgICB2ZXJzaW9uOiBQb3N0Z3Jlc0VuZ2luZVZlcnNpb24ub2YodmVyc2lvbiwgbWFqb3JWZXJzaW9uKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBteXNxbDogKCkgPT4ge1xuICAgICAgY29uc3QgeyB2ZXJzaW9uLCBtYWpvclZlcnNpb24gfSA9IERBVEFCQVNFX0VOR0lORV9DT05GSUcubXlzcWwuaW5zdGFuY2U7XG4gICAgICByZXR1cm4gRGF0YWJhc2VJbnN0YW5jZUVuZ2luZS5teXNxbCh7XG4gICAgICAgIHZlcnNpb246IE15c3FsRW5naW5lVmVyc2lvbi5vZih2ZXJzaW9uLCBtYWpvclZlcnNpb24pXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdXJvcmFDbHVzdGVyRW5naW5lKGVuZ2luZTogRGF0YWJhc2VFbmdpbmUpOiBJQ2x1c3RlckVuZ2luZSB7XG4gIHJldHVybiBBVVJPUkFfRU5HSU5FX0ZBQ1RPUklFU1tlbmdpbmVdKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnN0YW5jZUVuZ2luZShlbmdpbmU6IERhdGFiYXNlRW5naW5lKTogSUluc3RhbmNlRW5naW5lIHtcbiAgcmV0dXJuIElOU1RBTkNFX0VOR0lORV9GQUNUT1JJRVNbZW5naW5lXSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5naW5lQ29uZmlnKGVuZ2luZTogRGF0YWJhc2VFbmdpbmUpOiBFbmdpbmVDb25maWcge1xuICBjb25zdCBjb25maWcgPSBEQVRBQkFTRV9FTkdJTkVfQ09ORklHW2VuZ2luZV07XG4gIHJldHVybiB7XG4gICAgZGVmYXVsdFVzZXJuYW1lOiBjb25maWcuZGVmYXVsdFVzZXJuYW1lLFxuICAgIHNzbFBhcmFtZXRlcnM6IGNvbmZpZy5zc2xQYXJhbWV0ZXJzLFxuICAgIHJvdGF0aW9uQXBwTmFtZTogY29uZmlnLnJvdGF0aW9uQXBwTmFtZVxuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3h5Q29uZmlnIHtcbiAgbWF4Q29ubmVjdGlvbnM/OiBudW1iZXI7XG4gIG1heElkbGVDb25uZWN0aW9ucz86IG51bWJlcjtcbiAgY29ubmVjdGlvbkJvcnJvd1RpbWVvdXQ/OiBudW1iZXI7XG4gIHJlcXVpcmVUTFM/OiBib29sZWFuO1xuICB2cGNTdWJuZXRzPzogU3VibmV0U2VsZWN0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWRSZXBsaWNhQ29uZmlnIHtcbiAgaW5zdGFuY2VUeXBlPzogc3RyaW5nO1xuICBhdmFpbGFiaWxpdHlab25lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWRlbnRpYWxzQ29uZmlnIHtcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gIHNlY3JldFJvdGF0aW9uPzogU2VjcmV0Um90YXRpb25Db25maWcgfCBmYWxzZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWNyZXRSb3RhdGlvbkNvbmZpZyB7XG4gIGF1dG9tYXRpY2FsbHlBZnRlcj86IER1cmF0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVuY3J5cHRpb25Db25maWcge1xuICBzdG9yYWdlS2V5PzogRW5jcnlwdGlvbktleVNwZWM7XG59XG5cbmV4cG9ydCB0eXBlIFBlcmZvcm1hbmNlSW5zaWdodHNSZXRlbnRpb25QZXJpb2QgPSA3IHwgMzEgfCA5MyB8IDE4NiB8IDM3MjtcblxuZXhwb3J0IGludGVyZmFjZSBQZXJmb3JtYW5jZUluc2lnaHRzQ29uZmlnIHtcbiAgZW5jcnlwdGlvbktleT86IEVuY3J5cHRpb25LZXlTcGVjO1xuICAvKiogUmV0ZW50aW9uIHBlcmlvZCBpbiBkYXlzLiBEZWZhdWx0OiAzMSAoMSBtb250aCkuICovXG4gIHJldGVudGlvblBlcmlvZD86IFBlcmZvcm1hbmNlSW5zaWdodHNSZXRlbnRpb25QZXJpb2Q7XG59XG5cbi8vIE1hcmtlciBmb3IgQVdTIG1hbmFnZWQgZW5jcnlwdGlvbiBrZXkgKGF3cy9yZHMsIGF3cy9zMywgZXRjLilcbmV4cG9ydCBpbnRlcmZhY2UgQXdzTWFuYWdlZEtleSB7XG4gIHJlYWRvbmx5IGF3c01hbmFnZWQ6IHRydWU7XG59XG5cbi8vIE1hcmtlciBmb3IgZXhwbGljaXRseSByZXF1ZXN0aW5nIGEgQ3VzdG9tZXIgTWFuYWdlZCBLZXkgKENNSykuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbWVyTWFuYWdlZEtleU1hcmtlciB7XG4gIHJlYWRvbmx5IHVzZUNNSzogdHJ1ZTtcbn1cblxuLy8gRW5jcnlwdGlvbiBrZXkgc3BlY2lmaWNhdGlvbiBmb3IgUkRTIHJlc291cmNlcy5cbmV4cG9ydCB0eXBlIEVuY3J5cHRpb25LZXlTcGVjID0gSUtleSB8IEF3c01hbmFnZWRLZXkgfCBDdXN0b21lck1hbmFnZWRLZXlNYXJrZXI7XG5cbi8vIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgdGhlIGVuY3J5cHRpb24ga2V5IHNwZWMgaXMgQVdTIG1hbmFnZWQuXG5leHBvcnQgZnVuY3Rpb24gaXNBd3NNYW5hZ2VkS2V5KFxuICBzcGVjOiBFbmNyeXB0aW9uS2V5U3BlYyB8IHVuZGVmaW5lZFxuKTogc3BlYyBpcyBBd3NNYW5hZ2VkS2V5IHtcbiAgcmV0dXJuIChcbiAgICBzcGVjICE9PSB1bmRlZmluZWQgJiZcbiAgICB0eXBlb2Ygc3BlYyA9PT0gXCJvYmplY3RcIiAmJlxuICAgIFwiYXdzTWFuYWdlZFwiIGluIHNwZWMgJiZcbiAgICAoc3BlYyBhcyBBd3NNYW5hZ2VkS2V5KS5hd3NNYW5hZ2VkID09PSB0cnVlXG4gICk7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBDTUsgaXMgZXhwbGljaXRseSByZXF1ZXN0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NNS1JlcXVlc3RlZChcbiAgc3BlYzogRW5jcnlwdGlvbktleVNwZWMgfCB1bmRlZmluZWRcbik6IHNwZWMgaXMgQ3VzdG9tZXJNYW5hZ2VkS2V5TWFya2VyIHtcbiAgcmV0dXJuIChcbiAgICBzcGVjICE9PSB1bmRlZmluZWQgJiZcbiAgICB0eXBlb2Ygc3BlYyA9PT0gXCJvYmplY3RcIiAmJlxuICAgIFwidXNlQ01LXCIgaW4gc3BlYyAmJlxuICAgIChzcGVjIGFzIEN1c3RvbWVyTWFuYWdlZEtleU1hcmtlcikudXNlQ01LID09PSB0cnVlXG4gICk7XG59XG5cbi8qKlxuICogQ29udmVuaWVuY2UgY29uc3RhbnQgZm9yIHNwZWNpZnlpbmcgQVdTIG1hbmFnZWQgZW5jcnlwdGlvbiAodGhlIGRlZmF1bHQpLlxuICogQGV4YW1wbGVcbiAqIGVuY3J5cHRpb246IHsgc3RvcmFnZUtleTogQVdTX01BTkFHRUQgfVxuICovXG5leHBvcnQgY29uc3QgQVdTX01BTkFHRUQ6IEF3c01hbmFnZWRLZXkgPSB7IGF3c01hbmFnZWQ6IHRydWUgfSBhcyBjb25zdDtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBjb25zdGFudCBmb3IgZXhwbGljaXRseSByZXF1ZXN0aW5nIENNSy5cbiAqIEBleGFtcGxlXG4gKiBlbmNyeXB0aW9uOiB7IHN0b3JhZ2VLZXk6IFVTRV9DTUsgfVxuICovXG5leHBvcnQgY29uc3QgVVNFX0NNSzogQ3VzdG9tZXJNYW5hZ2VkS2V5TWFya2VyID0geyB1c2VDTUs6IHRydWUgfSBhcyBjb25zdDtcblxuLyoqXG4gKiAqKkRFU1RSVUNUSVZFKio6IENoYW5naW5nIGBzdG9yYWdlS2V5YCBhZnRlciBjbHVzdGVyIGNyZWF0aW9uIGNhdXNlcyBjbHVzdGVyIFJFUExBQ0VNRU5ULlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1cm9yYUVuY3J5cHRpb25Db25maWcge1xuICAvKiogREVTVFJVQ1RJVkU6IENoYW5naW5nIGFmdGVyIGNyZWF0aW9uIGNhdXNlcyBjbHVzdGVyIHJlcGxhY2VtZW50ICovXG4gIHN0b3JhZ2VLZXk/OiBFbmNyeXB0aW9uS2V5U3BlYztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXJvcmFSZWFkZXJDb25maWcge1xuICBzY2FsZVdpdGhXcml0ZXI/OiBib29sZWFuO1xuICBlbmFibGVQZXJmb3JtYW5jZUluc2lnaHRzPzogYm9vbGVhbjtcbiAgaWRlbnRpZmllclN1ZmZpeD86IHN0cmluZztcbiAgYXZhaWxhYmlsaXR5Wm9uZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXJvcmFXcml0ZXJDb25maWcge1xuICBlbmFibGVQZXJmb3JtYW5jZUluc2lnaHRzPzogYm9vbGVhbjtcbiAgaWRlbnRpZmllclN1ZmZpeD86IHN0cmluZztcbiAgYXZhaWxhYmlsaXR5Wm9uZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXJvcmFSZWFkZXJzQ29uZmlnIHtcbiAgLyoqIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGluc3RhbmNlcyAqL1xuICBjb3VudD86IG51bWJlcjtcbiAgLyoqIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGNvdW50ICovXG4gIGluc3RhbmNlcz86IEF1cm9yYVJlYWRlckNvbmZpZ1tdO1xuICBkZWZhdWx0RW5hYmxlUGVyZm9ybWFuY2VJbnNpZ2h0cz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQmFzZSBwcm9wcyBmb3IgZGF0YWJhc2UgY29uZmlndXJhdGlvbi5cbiAqL1xudHlwZSBCYXNlRGF0YWJhc2VQcm9wcyA9IHtcbiAgdnBjPzogSVZwYztcbiAgZGF0YWJhc2VOYW1lOiBzdHJpbmc7XG4gIGluc3RhbmNlVHlwZT86IHN0cmluZztcbiAgZGVsZXRpb25Qcm90ZWN0aW9uPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVyb3JhRGF0YWJhc2VQcm9wcyBleHRlbmRzIEJhc2VEYXRhYmFzZVByb3BzIHtcbiAgdHlwZTogXCJBdXJvcmFcIjtcbiAgZGF0YWJhc2VFbmdpbmU/OiBEYXRhYmFzZUVuZ2luZTtcbiAgLyoqIE92ZXJyaWRlcyBkYXRhYmFzZUVuZ2luZSBpZiBwcm92aWRlZCAqL1xuICBlbmdpbmU/OiBJQ2x1c3RlckVuZ2luZTtcbiAgd3JpdGVyPzogQXVyb3JhV3JpdGVyQ29uZmlnO1xuICByZWFkZXJzPzogQXVyb3JhUmVhZGVyc0NvbmZpZyB8IGZhbHNlO1xuICBwcm94eT86IFByb3h5Q29uZmlnIHwgZmFsc2U7XG4gIGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHNDb25maWc7XG4gIC8qKiBERVNUUlVDVElWRTogQ2hhbmdpbmcgc3RvcmFnZUtleSBjYXVzZXMgY2x1c3RlciByZXBsYWNlbWVudCAqL1xuICBlbmNyeXB0aW9uPzogQXVyb3JhRW5jcnlwdGlvbkNvbmZpZztcbiAgYmFja3VwUmV0ZW50aW9uPzogbnVtYmVyO1xuICBtb25pdG9yaW5nSW50ZXJ2YWw/OiBEdXJhdGlvbjtcbiAgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c/OiBzdHJpbmc7XG4gIHBvcnQ/OiBudW1iZXI7XG4gIHBlcmZvcm1hbmNlSW5zaWdodHM/OiBQZXJmb3JtYW5jZUluc2lnaHRzQ29uZmlnIHwgZmFsc2U7XG4gIC8qKiBBUk4gb3IgaWRlbnRpZmllciBvZiBEQiBjbHVzdGVyIHNuYXBzaG90IHRvIHJlc3RvcmUgZnJvbSAqL1xuICBzbmFwc2hvdElkZW50aWZpZXI/OiBzdHJpbmc7XG4gIC8qKiBVc2VybmFtZSBmcm9tIHRoZSBzbmFwc2hvdCAocmVxdWlyZWQgd2hlbiByZXN0b3JpbmcgZnJvbSBzbmFwc2hvdCB0byByZXNldCBwYXNzd29yZCkgKi9cbiAgc25hcHNob3RVc2VybmFtZT86IHN0cmluZztcbiAgLyoqIEFsbG93IGFjY2VzcyBmcm9tIFZQQyBDSURSIChhdm9pZHMgY3Jvc3Mtc3RhY2sgY3ljbGljIGRlcGVuZGVuY2llcyB3aXRoIExhbWJkYSkgKi9cbiAgYWxsb3dWcGNBY2Nlc3M/OiBib29sZWFuO1xuICAvKipcbiAgICogTWFrZSBkYXRhYmFzZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGZyb20gdGhlIGludGVybmV0LlxuICAgKiBXQVJOSU5HOiBUaGlzIGlzIGEgc2VjdXJpdHkgcmlzayBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGV2ZWxvcG1lbnRcbiAgICogb3Igd2hlbiBidWlsZGluZyBQYXlsb2FkIGFwcHMgbG9jYWxseSB0aGF0IG5lZWQgZGF0YWJhc2UgYWNjZXNzLlxuICAgKiBXaGVuIGVuYWJsZWQsIHRoZSBkYXRhYmFzZSBpcyBwbGFjZWQgaW4gcHVibGljIHN1Ym5ldHMuXG4gICAqL1xuICBwdWJsaWNseUFjY2Vzc2libGU/OiBib29sZWFuO1xuICAvKipcbiAgICogSVAgYWRkcmVzcyB0byBhbGxvdyBhY2Nlc3MgZnJvbSB3aGVuIHB1YmxpY2x5QWNjZXNzaWJsZSBpcyB0cnVlLlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBhY2Nlc3MgaXMgcmVzdHJpY3RlZCB0byBWUEMgb25seSBldmVuIHdoZW4gcHVibGljLlxuICAgKiBGb3JtYXQ6IENJRFIgbm90YXRpb24gKGUuZy4sIFwiMjAzLjAuMTEzLjAvMzJcIiBmb3Igc2luZ2xlIElQKVxuICAgKi9cbiAgYWxsb3dlZElwQ2lkcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHbG9iYWxBdXJvcmFEYXRhYmFzZVByb3BzIGV4dGVuZHMgQmFzZURhdGFiYXNlUHJvcHMge1xuICB0eXBlOiBcIkdsb2JhbEF1cm9yYVwiO1xuICBwcmltYXJ5UmVnaW9uOiBzdHJpbmc7XG4gIHNlY29uZGFyeVJlZ2lvbnM/OiBzdHJpbmdbXTtcbiAgZ2xvYmFsQ2x1c3RlcklkZW50aWZpZXI/OiBzdHJpbmc7XG4gIGVuYWJsZUdsb2JhbFdyaXRlRm9yd2FyZGluZz86IGJvb2xlYW47XG4gIGRhdGFiYXNlRW5naW5lPzogRGF0YWJhc2VFbmdpbmU7XG4gIC8qKiBPdmVycmlkZXMgZGF0YWJhc2VFbmdpbmUgaWYgcHJvdmlkZWQgKi9cbiAgZW5naW5lPzogSUNsdXN0ZXJFbmdpbmU7XG4gIHdyaXRlcj86IEF1cm9yYVdyaXRlckNvbmZpZztcbiAgcmVhZGVycz86IEF1cm9yYVJlYWRlcnNDb25maWcgfCBmYWxzZTtcbiAgcHJveHk/OiBQcm94eUNvbmZpZyB8IGZhbHNlO1xuICBjcmVkZW50aWFscz86IENyZWRlbnRpYWxzQ29uZmlnO1xuICAvKiogREVTVFJVQ1RJVkU6IENoYW5naW5nIHN0b3JhZ2VLZXkgY2F1c2VzIGNsdXN0ZXIgcmVwbGFjZW1lbnQgKi9cbiAgZW5jcnlwdGlvbj86IEF1cm9yYUVuY3J5cHRpb25Db25maWc7XG4gIGJhY2t1cFJldGVudGlvbj86IG51bWJlcjtcbiAgbW9uaXRvcmluZ0ludGVydmFsPzogRHVyYXRpb247XG4gIHByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93Pzogc3RyaW5nO1xuICBwb3J0PzogbnVtYmVyO1xuICBwZXJmb3JtYW5jZUluc2lnaHRzPzogUGVyZm9ybWFuY2VJbnNpZ2h0c0NvbmZpZyB8IGZhbHNlO1xuICAvKiogQVJOIG9yIGlkZW50aWZpZXIgb2YgREIgY2x1c3RlciBzbmFwc2hvdCB0byByZXN0b3JlIGZyb20gKi9cbiAgc25hcHNob3RJZGVudGlmaWVyPzogc3RyaW5nO1xuICAvKiogVXNlcm5hbWUgZnJvbSB0aGUgc25hcHNob3QgKHJlcXVpcmVkIHdoZW4gcmVzdG9yaW5nIGZyb20gc25hcHNob3QgdG8gcmVzZXQgcGFzc3dvcmQpICovXG4gIHNuYXBzaG90VXNlcm5hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFuY2VEYXRhYmFzZVByb3BzIGV4dGVuZHMgQmFzZURhdGFiYXNlUHJvcHMge1xuICB0eXBlOiBcIkluc3RhbmNlXCI7XG4gIGRhdGFiYXNlRW5naW5lPzogRGF0YWJhc2VFbmdpbmU7XG4gIC8qKiBPdmVycmlkZXMgZGF0YWJhc2VFbmdpbmUgaWYgcHJvdmlkZWQgKi9cbiAgZW5naW5lPzogSUluc3RhbmNlRW5naW5lO1xuICBhbGxvY2F0ZWRTdG9yYWdlPzogbnVtYmVyO1xuICBwb3J0PzogbnVtYmVyO1xuICBtdWx0aUF6PzogYm9vbGVhbjtcbiAgYmFja3VwUmV0ZW50aW9uPzogbnVtYmVyO1xuICBwZXJmb3JtYW5jZUluc2lnaHRzPzogUGVyZm9ybWFuY2VJbnNpZ2h0c0NvbmZpZyB8IGZhbHNlO1xuICBwcm94eT86IFByb3h5Q29uZmlnIHwgZmFsc2U7XG4gIHJlYWRSZXBsaWNhPzogUmVhZFJlcGxpY2FDb25maWcgfCBmYWxzZTtcbiAgY3JlZGVudGlhbHM/OiBDcmVkZW50aWFsc0NvbmZpZztcbiAgZW5jcnlwdGlvbj86IEVuY3J5cHRpb25Db25maWc7XG4gIHB1YmxpY2x5QWNjZXNzaWJsZT86IGJvb2xlYW47XG4gIC8qKiBBUk4gb3IgaWRlbnRpZmllciBvZiBEQiBpbnN0YW5jZSBzbmFwc2hvdCB0byByZXN0b3JlIGZyb20gKi9cbiAgc25hcHNob3RJZGVudGlmaWVyPzogc3RyaW5nO1xuICAvKiogVXNlcm5hbWUgZnJvbSB0aGUgc25hcHNob3QgKHJlcXVpcmVkIHdoZW4gcmVzdG9yaW5nIGZyb20gc25hcHNob3QgdG8gcmVzZXQgcGFzc3dvcmQpICovXG4gIHNuYXBzaG90VXNlcm5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRHluYW1vREIgdGFibGUgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIER5bmFtb0RCRGF0YWJhc2VQcm9wcyB7XG4gIHR5cGU6IFwiRHluYW1vREJcIjtcbiAgcGFydGl0aW9uS2V5OiBEeW5hbW9EQktleVNjaGVtYTtcbiAgc29ydEtleT86IER5bmFtb0RCS2V5U2NoZW1hO1xuICBiaWxsaW5nTW9kZT86IFwiUEFZX1BFUl9SRVFVRVNUXCIgfCBcIlBST1ZJU0lPTkVEXCI7XG4gIHJlYWRDYXBhY2l0eT86IG51bWJlcjtcbiAgd3JpdGVDYXBhY2l0eT86IG51bWJlcjtcbiAgZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlcz86IER5bmFtb0RCR2xvYmFsU2Vjb25kYXJ5SW5kZXhbXTtcbiAgdGltZVRvTGl2ZUF0dHJpYnV0ZT86IHN0cmluZztcbiAgc3RyZWFtPzogXCJORVdfSU1BR0VcIiB8IFwiT0xEX0lNQUdFXCIgfCBcIk5FV19BTkRfT0xEX0lNQUdFU1wiIHwgXCJLRVlTX09OTFlcIjtcbiAgcG9pbnRJblRpbWVSZWNvdmVyeT86IGJvb2xlYW47XG4gIGVuY3J5cHRpb24/OiBcIkFXU19PV05FRFwiIHwgXCJBV1NfTUFOQUdFRFwiIHwgXCJDVVNUT01FUl9NQU5BR0VEXCI7XG4gIHJlbW92YWxQb2xpY3k/OiBcIkRFU1RST1lcIiB8IFwiUkVUQUlOXCIgfCBcIlNOQVBTSE9UXCI7XG59XG5cbi8qKlxuICogUmVsYXRpb25hbCBkYXRhYmFzZSBwcm9wcyB1bmlvbiAoQXVyb3JhLCBJbnN0YW5jZSwgR2xvYmFsQXVyb3JhKS5cbiAqL1xuZXhwb3J0IHR5cGUgSVJlbGF0aW9uYWxEYXRhYmFzZVByb3BzID1cbiAgfCBBdXJvcmFEYXRhYmFzZVByb3BzXG4gIHwgSW5zdGFuY2VEYXRhYmFzZVByb3BzXG4gIHwgR2xvYmFsQXVyb3JhRGF0YWJhc2VQcm9wcztcblxuLyoqXG4gKiBBbGwgZGF0YWJhc2UgcHJvcHMgdW5pb24uXG4gKi9cbmV4cG9ydCB0eXBlIElEYXRhYmFzZVByb3BzID1cbiAgfCBBdXJvcmFEYXRhYmFzZVByb3BzXG4gIHwgSW5zdGFuY2VEYXRhYmFzZVByb3BzXG4gIHwgR2xvYmFsQXVyb3JhRGF0YWJhc2VQcm9wc1xuICB8IER5bmFtb0RCRGF0YWJhc2VQcm9wcztcblxuLyoqXG4gKiBWYWxpZGF0ZXMgRHluYW1vREIgcHJvcHMgYW5kIGxvZ3Mgd2FybmluZ3MgZm9yIG1pc2NvbmZpZ3VyZWQgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVEeW5hbW9EQlByb3BzKHByb3BzOiBEeW5hbW9EQkRhdGFiYXNlUHJvcHMpOiB2b2lkIHtcbiAgLy8gVmFsaWRhdGUgcHJvdmlzaW9uZWQgY2FwYWNpdHlcbiAgaWYgKHByb3BzLmJpbGxpbmdNb2RlID09PSBcIlBST1ZJU0lPTkVEXCIpIHtcbiAgICBpZiAoIXByb3BzLnJlYWRDYXBhY2l0eSB8fCAhcHJvcHMud3JpdGVDYXBhY2l0eSkge1xuICAgICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgICAgXCInYmlsbGluZ01vZGUnIGlzIFBST1ZJU0lPTkVEIGJ1dCBjYXBhY2l0eSBub3Qgc3BlY2lmaWVkLiBcIiArXG4gICAgICAgICAgXCJVc2luZyBkZWZhdWx0IHZhbHVlcy4gQ29uc2lkZXIgc3BlY2lmeWluZyAncmVhZENhcGFjaXR5JyBhbmQgJ3dyaXRlQ2FwYWNpdHknLlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdhcm4gYWJvdXQgY2FwYWNpdHkgd2l0aCBvbi1kZW1hbmQgYmlsbGluZ1xuICBpZiAocHJvcHMuYmlsbGluZ01vZGUgIT09IFwiUFJPVklTSU9ORURcIikge1xuICAgIGlmIChwcm9wcy5yZWFkQ2FwYWNpdHkgfHwgcHJvcHMud3JpdGVDYXBhY2l0eSkge1xuICAgICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgICAgXCIncmVhZENhcGFjaXR5JyBvciAnd3JpdGVDYXBhY2l0eScgc3BlY2lmaWVkIGJ1dCAnYmlsbGluZ01vZGUnIFwiICtcbiAgICAgICAgICBcImlzIG5vdCBQUk9WSVNJT05FRC4gQ2FwYWNpdHkgc2V0dGluZ3Mgd2lsbCBiZSBpZ25vcmVkLlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIEdTSSBwYXJ0aXRpb24ga2V5cyBhcmUgZGlmZmVyZW50IGZyb20gdGFibGUgcGFydGl0aW9uIGtleVxuICBpZiAocHJvcHMuZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlcykge1xuICAgIGNvbnN0IHRhYmxlUGFydGl0aW9uS2V5ID0gcHJvcHMucGFydGl0aW9uS2V5Lm5hbWU7XG4gICAgZm9yIChjb25zdCBnc2kgb2YgcHJvcHMuZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlcykge1xuICAgICAgaWYgKFxuICAgICAgICBnc2kucGFydGl0aW9uS2V5Lm5hbWUgPT09IHRhYmxlUGFydGl0aW9uS2V5ICYmXG4gICAgICAgIGdzaS5zb3J0S2V5Py5uYW1lID09PSBwcm9wcy5zb3J0S2V5Py5uYW1lXG4gICAgICApIHtcbiAgICAgICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgICAgICBgR1NJICcke2dzaS5pbmRleE5hbWV9JyBoYXMgdGhlIHNhbWUga2V5IHNjaGVtYSBhcyB0aGUgdGFibGUuIGAgK1xuICAgICAgICAgICAgXCJUaGlzIG1heSBub3QgcHJvdmlkZSB0aGUgcXVlcnkgZmxleGliaWxpdHkgeW91IG5lZWQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgcmVsYXRpb25hbCBkYXRhYmFzZSBwcm9wcyBhbmQgbG9ncyB3YXJuaW5ncyBmb3IgaWdub3JlZCBvciBtaXNjb25maWd1cmVkIG9wdGlvbnMuXG4gKiBUaGVzZSBjaGVja3MgaGVscCBjYXRjaCBpc3N1ZXMgd2hlbiBwcm9wcyBjb21lIGZyb20gZHluYW1pYyBzb3VyY2VzIHdoZXJlXG4gKiBUeXBlU2NyaXB0J3MgY29tcGlsZS10aW1lIGNoZWNrcyBtYXkgbm90IGFwcGx5LlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlbGF0aW9uYWxEYXRhYmFzZVByb3BzKFxuICBwcm9wczogSVJlbGF0aW9uYWxEYXRhYmFzZVByb3BzXG4pOiB2b2lkIHtcbiAgLy8gR2xvYmFsQXVyb3JhIHJlcXVpcmVzIHByaW1hcnlSZWdpb25cbiAgaWYgKHByb3BzLnR5cGUgPT09IFwiR2xvYmFsQXVyb3JhXCIgJiYgIXByb3BzLnByaW1hcnlSZWdpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIkdsb2JhbEF1cm9yYSBkYXRhYmFzZSByZXF1aXJlcyAncHJpbWFyeVJlZ2lvbicuIFwiICtcbiAgICAgICAgXCJTcGVjaWZ5IHRoZSBBV1MgcmVnaW9uIHdoZXJlIHRoZSBwcmltYXJ5IGNsdXN0ZXIgd2lsbCBiZSBjcmVhdGVkLlwiXG4gICAgKTtcbiAgfVxuXG4gIC8vIEluc3RhbmNlLW9ubHkgb3B0aW9ucyBvbiBBdXJvcmEvR2xvYmFsQXVyb3JhXG4gIHdhcm5JZlByb3BlcnRpZXNJZ25vcmVkKFxuICAgIHByb3BzLFxuICAgIFtcInJlYWRSZXBsaWNhXCIsIFwibXVsdGlBelwiLCBcImFsbG9jYXRlZFN0b3JhZ2VcIl0sXG4gICAgXCJJbnN0YW5jZVwiLFxuICAgIFwiSW5zdGFuY2UgZGF0YWJhc2VcIlxuICApO1xuXG4gIC8vIEF1cm9yYS1vbmx5IG9wdGlvbnMgb24gSW5zdGFuY2VcbiAgd2FybklmUHJvcGVydGllc0lnbm9yZWQoXG4gICAgcHJvcHMsXG4gICAgW1wicmVhZGVyc1wiLCBcIndyaXRlclwiLCBcImJhY2t1cFJldGVudGlvblwiXSxcbiAgICBbXCJBdXJvcmFcIiwgXCJHbG9iYWxBdXJvcmFcIl0sXG4gICAgXCJBdXJvcmEgZGF0YWJhc2VcIlxuICApO1xuXG4gIC8vIEdsb2JhbEF1cm9yYS1vbmx5IG9wdGlvbnMgb24gbm9uLWdsb2JhbCBkYXRhYmFzZXNcbiAgd2FybklmUHJvcGVydGllc0lnbm9yZWQoXG4gICAgcHJvcHMsXG4gICAgW1wicHJpbWFyeVJlZ2lvblwiLCBcInNlY29uZGFyeVJlZ2lvbnNcIiwgXCJlbmFibGVHbG9iYWxXcml0ZUZvcndhcmRpbmdcIl0sXG4gICAgXCJHbG9iYWxBdXJvcmFcIixcbiAgICBcIkdsb2JhbEF1cm9yYSBkYXRhYmFzZVwiXG4gICk7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGRhdGFiYXNlIHByb3BzIGFuZCBsb2dzIHdhcm5pbmdzIGZvciBpZ25vcmVkIG9yIG1pc2NvbmZpZ3VyZWQgb3B0aW9ucy5cbiAqIERpc3BhdGNoZXMgdG8gdHlwZS1zcGVjaWZpYyB2YWxpZGF0b3JzIGJhc2VkIG9uIHRoZSBkYXRhYmFzZSB0eXBlLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZURhdGFiYXNlUHJvcHMocHJvcHM6IElEYXRhYmFzZVByb3BzKTogdm9pZCB7XG4gIGlmIChwcm9wcy50eXBlID09PSBcIkR5bmFtb0RCXCIpIHtcbiAgICB2YWxpZGF0ZUR5bmFtb0RCUHJvcHMocHJvcHMpO1xuICB9IGVsc2Uge1xuICAgIHZhbGlkYXRlUmVsYXRpb25hbERhdGFiYXNlUHJvcHMocHJvcHMpO1xuICB9XG59XG5cbi8qKlxuICogRmFjdG9yeSBmb3IgY3JlYXRpbmcgdHlwZS1zYWZlIGRhdGFiYXNlIHJlc291cmNlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQXVyb3JhIGRhdGFiYXNlIC0gcmV0dXJucyBSZWxhdGlvbmFsRGF0YWJhc2VcbiAqIGNvbnN0IGF1cm9yYSA9IGFwcC5hZGREYXRhYmFzZShEYXRhYmFzZUZhY3RvcnkuYnVpbGQoXCJNYWluXCIsIHtcbiAqICAgdHlwZTogXCJBdXJvcmFcIixcbiAqICAgZGF0YWJhc2VOYW1lOiBcIm15YXBwXCJcbiAqIH0pKTtcbiAqIGF1cm9yYS5nZXRIb3N0RW5kcG9pbnQoKTsgLy8gQXZhaWxhYmxlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIER5bmFtb0RCIHRhYmxlIC0gcmV0dXJucyBEeW5hbW9EQkRhdGFiYXNlXG4gKiBjb25zdCBjYWNoZSA9IGFwcC5hZGREYXRhYmFzZShEYXRhYmFzZUZhY3RvcnkuYnVpbGQoXCJDYWNoZVwiLCB7XG4gKiAgIHR5cGU6IFwiRHluYW1vREJcIixcbiAqICAgcGFydGl0aW9uS2V5OiB7IG5hbWU6IFwiaWRcIiwgdHlwZTogXCJTXCIgfVxuICogfSkpO1xuICogY2FjaGUuZ2V0VGFibGVOYW1lKCk7IC8vIEF2YWlsYWJsZVxuICogY2FjaGUuZ3JhbnRSZWFkV3JpdGVEYXRhKGxhbWJkYSk7IC8vIEF2YWlsYWJsZVxuICovXG5leHBvcnQgY2xhc3MgRGF0YWJhc2VGYWN0b3J5IHtcbiAgc3RhdGljIGJ1aWxkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IEF1cm9yYURhdGFiYXNlUHJvcHNcbiAgKTogKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBSZWxhdGlvbmFsRGF0YWJhc2U7XG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBJbnN0YW5jZURhdGFiYXNlUHJvcHNcbiAgKTogKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBSZWxhdGlvbmFsRGF0YWJhc2U7XG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBHbG9iYWxBdXJvcmFEYXRhYmFzZVByb3BzXG4gICk6IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gUmVsYXRpb25hbERhdGFiYXNlO1xuICBzdGF0aWMgYnVpbGQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogRHluYW1vREJEYXRhYmFzZVByb3BzXG4gICk6IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gRHluYW1vREJEYXRhYmFzZTtcbiAgc3RhdGljIGJ1aWxkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IElEYXRhYmFzZVByb3BzXG4gICk6IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gQW55RGF0YWJhc2Uge1xuICAgIHJldHVybiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpOiBBbnlEYXRhYmFzZSA9PiB7XG4gICAgICB2YWxpZGF0ZURhdGFiYXNlUHJvcHMocHJvcHMpO1xuXG4gICAgICBpZiAocHJvcHMudHlwZSA9PT0gXCJEeW5hbW9EQlwiKSB7XG4gICAgICAgIHJldHVybiBuZXcgRHluYW1vREJEYXRhYmFzZShzY29wZSwgaWQsIHByb3BzKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YWJhc2VQcm9wczogSVJlbGF0aW9uYWxEYXRhYmFzZVByb3BzID0ge1xuICAgICAgICAuLi57IHZwYzogYXBwLmdldFZwYygpIH0sXG4gICAgICAgIC4uLnByb3BzXG4gICAgICB9O1xuICAgICAgcmV0dXJuIG5ldyBSZWxhdGlvbmFsRGF0YWJhc2Uoc2NvcGUsIGlkLCBkYXRhYmFzZVByb3BzKTtcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogRHluYW1vREIgZGF0YWJhc2Ugd3JhcHBlciBpbXBsZW1lbnRpbmcgSUR5bmFtb0RCRGF0YWJhc2UgaW50ZXJmYWNlLlxuICogUHJvdmlkZXMgdHlwZS1zYWZlIGFjY2VzcyB0byBEeW5hbW9EQiB0YWJsZSBvcGVyYXRpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBjYWNoZSA9IGFwcC5hZGREYXRhYmFzZShEYXRhYmFzZUZhY3RvcnkuYnVpbGQoXCJDYWNoZVwiLCB7XG4gKiAgIHR5cGU6IFwiRHluYW1vREJcIixcbiAqICAgcGFydGl0aW9uS2V5OiB7IG5hbWU6IFwiaWRcIiwgdHlwZTogXCJTXCIgfVxuICogfSkpO1xuICogY2FjaGUuZ3JhbnRSZWFkV3JpdGVEYXRhKGxhbWJkYSk7XG4gKi9cbmV4cG9ydCBjbGFzcyBEeW5hbW9EQkRhdGFiYXNlXG4gIGV4dGVuZHMgQ29uc3RydWN0XG4gIGltcGxlbWVudHMgSUR5bmFtb0RCRGF0YWJhc2UsIElEeW5hbW9EQkNvbm5lY3Rvclxue1xuICBwdWJsaWMgcmVhZG9ubHkgZGF0YWJhc2VUeXBlID0gXCJEeW5hbW9EQlwiIGFzIGNvbnN0O1xuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdG9yVHlwZSA9IFwiZHluYW1vZGJcIiBhcyBjb25zdDtcbiAgcHVibGljIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB0YWJsZTogRHluYW1vREJUYWJsZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRHluYW1vREJEYXRhYmFzZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmlkID0gaWQ7XG5cbiAgICBjb25zdCB0YWJsZVByb3BzOiBEeW5hbW9EQlRhYmxlUHJvcHMgPSB7XG4gICAgICBwYXJ0aXRpb25LZXk6IHByb3BzLnBhcnRpdGlvbktleSxcbiAgICAgIHNvcnRLZXk6IHByb3BzLnNvcnRLZXksXG4gICAgICBiaWxsaW5nTW9kZTogcHJvcHMuYmlsbGluZ01vZGUsXG4gICAgICByZWFkQ2FwYWNpdHk6IHByb3BzLnJlYWRDYXBhY2l0eSxcbiAgICAgIHdyaXRlQ2FwYWNpdHk6IHByb3BzLndyaXRlQ2FwYWNpdHksXG4gICAgICBnbG9iYWxTZWNvbmRhcnlJbmRleGVzOiBwcm9wcy5nbG9iYWxTZWNvbmRhcnlJbmRleGVzLFxuICAgICAgdGltZVRvTGl2ZUF0dHJpYnV0ZTogcHJvcHMudGltZVRvTGl2ZUF0dHJpYnV0ZSxcbiAgICAgIHN0cmVhbTogcHJvcHMuc3RyZWFtLFxuICAgICAgcG9pbnRJblRpbWVSZWNvdmVyeTogcHJvcHMucG9pbnRJblRpbWVSZWNvdmVyeSxcbiAgICAgIGVuY3J5cHRpb246IHByb3BzLmVuY3J5cHRpb24sXG4gICAgICByZW1vdmFsUG9saWN5OiBwcm9wcy5yZW1vdmFsUG9saWN5XG4gICAgfTtcbiAgICB0aGlzLnRhYmxlID0gbmV3IER5bmFtb0RCVGFibGUodGhpcywgaWQsIHRhYmxlUHJvcHMpO1xuICB9XG5cbiAgZ2V0VGFibGVOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUuZ2V0VGFibGVOYW1lKCk7XG4gIH1cblxuICBnZXRUYWJsZUFybigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLmdldFRhYmxlQXJuKCk7XG4gIH1cblxuICBnZXRUYWJsZSgpOiBJVGFibGUge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLmdldFRhYmxlKCk7XG4gIH1cblxuICBnZXRTdHJlYW1Bcm4oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5nZXRUYWJsZVN0cmVhbUFybigpO1xuICB9XG5cbiAgZ3JhbnRSZWFkRGF0YShncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLmdyYW50UmVhZChncmFudGVlKTtcbiAgfVxuXG4gIGdyYW50V3JpdGVEYXRhKGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudCB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUuZ3JhbnRXcml0ZShncmFudGVlKTtcbiAgfVxuXG4gIGdyYW50UmVhZFdyaXRlRGF0YShncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLmdyYW50UmVhZFdyaXRlKGdyYW50ZWUpO1xuICB9XG5cbiAgZ3JhbnRGdWxsQWNjZXNzKGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudCB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUuZ3JhbnRGdWxsQWNjZXNzKGdyYW50ZWUpO1xuICB9XG5cbiAgZ3JhbnRTdHJlYW1SZWFkKGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudCB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUuZ3JhbnRTdHJlYW1SZWFkKGdyYW50ZWUpO1xuICB9XG59XG5cbi8qKlxuICogUmVsYXRpb25hbCBkYXRhYmFzZSB3cmFwcGVyIGltcGxlbWVudGluZyBJUmVsYXRpb25hbERhdGFiYXNlIGludGVyZmFjZS5cbiAqIFN1cHBvcnRzIEF1cm9yYSwgUkRTIEluc3RhbmNlLCBhbmQgR2xvYmFsQXVyb3JhIGRhdGFiYXNlIHR5cGVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBkYiA9IGFwcC5hZGREYXRhYmFzZShEYXRhYmFzZUZhY3RvcnkuYnVpbGQoXCJNYWluXCIsIHtcbiAqICAgdHlwZTogXCJBdXJvcmFcIixcbiAqICAgZGF0YWJhc2VOYW1lOiBcIm15YXBwXCJcbiAqIH0pKTtcbiAqIGRiLmdyYW50Q29ubmVjdChsYW1iZGEpO1xuICovXG5leHBvcnQgY2xhc3MgUmVsYXRpb25hbERhdGFiYXNlXG4gIGV4dGVuZHMgQ29uc3RydWN0XG4gIGltcGxlbWVudHMgSVJlbGF0aW9uYWxEYXRhYmFzZSwgSVNlY3VyaXR5R3JvdXBDb25uZWN0b3JcbntcbiAgcHVibGljIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBzY29wZTogQ29uc3RydWN0O1xuICBwdWJsaWMgcmVhZG9ubHkgdnBjOiBJVnBjO1xuICBwdWJsaWMgcmVhZG9ubHkgZGF0YWJhc2VUeXBlOiBSZWxhdGlvbmFsRGF0YWJhc2VUeXBlO1xuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdG9yVHlwZSA9IFwicmVsYXRpb25hbFwiIGFzIGNvbnN0O1xuXG4gIHB1YmxpYyBjb25uZWN0aW9ucyE6IENvbm5lY3Rpb25zO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGFiYXNlTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIGRhdGFiYXNlITogUmRzQXVyb3JhIHwgUmRzSW5zdGFuY2UgfCBSZHNBdXJvcmFHbG9iYWw7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElSZWxhdGlvbmFsRGF0YWJhc2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcbiAgICB0aGlzLmRhdGFiYXNlVHlwZSA9IHByb3BzLnR5cGU7XG4gICAgLy8gVlBDIGlzIHZhbGlkYXRlZCBpbiBhZGRYeHggbWV0aG9kcywgc28gYXNzZXJ0aW9uIGlzIHNhZmUgaGVyZVxuICAgIHRoaXMudnBjID0gcHJvcHMudnBjITtcblxuICAgIHRoaXMuX2RhdGFiYXNlTmFtZSA9IHByb3BzLmRhdGFiYXNlTmFtZTtcbiAgICB0aGlzLmFkZERhdGFiYXNlKHByb3BzKTtcbiAgfVxuXG4gIGFkZERhdGFiYXNlKHByb3BzOiBJUmVsYXRpb25hbERhdGFiYXNlUHJvcHMpIHtcbiAgICBzd2l0Y2ggKHByb3BzLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJBdXJvcmFcIjpcbiAgICAgICAgdGhpcy5hZGRBdXJvcmEocHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJHbG9iYWxBdXJvcmFcIjpcbiAgICAgICAgdGhpcy5hZGRBdXJvcmFHbG9iYWwocHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJJbnN0YW5jZVwiOlxuICAgICAgICB0aGlzLmFkZFJkc0luc3RhbmNlKHByb3BzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGNvbnN0IF9leGhhdXN0aXZlOiBuZXZlciA9IHByb3BzO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFVuc3VwcG9ydGVkIGRhdGFiYXNlIHR5cGU6ICR7U3RyaW5nKChfZXhoYXVzdGl2ZSBhcyBJUmVsYXRpb25hbERhdGFiYXNlUHJvcHMpLnR5cGUpfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZEF1cm9yYShwcm9wczogQXVyb3JhRGF0YWJhc2VQcm9wcykge1xuICAgIGlmICghcHJvcHMudnBjKSB0aHJvdyBuZXcgRXJyb3IoXCJWUEMgaXMgcmVxdWlyZWQgZm9yIEF1cm9yYSBkYXRhYmFzZVwiKTtcblxuICAgIGNvbnN0IHJlc29sdmVkRGF0YWJhc2VFbmdpbmUgPSBwcm9wcy5kYXRhYmFzZUVuZ2luZSA/PyBcInBvc3RncmVzcWxcIjtcbiAgICBjb25zdCByZXNvbHZlZEVuZ2luZSA9XG4gICAgICBwcm9wcy5lbmdpbmUgPz8gZ2V0QXVyb3JhQ2x1c3RlckVuZ2luZShyZXNvbHZlZERhdGFiYXNlRW5naW5lKTtcbiAgICBjb25zdCBlbmdpbmVDb25maWcgPSBnZXRFbmdpbmVDb25maWcocmVzb2x2ZWREYXRhYmFzZUVuZ2luZSk7XG5cbiAgICBpZiAocHJvcHMucHVibGljbHlBY2Nlc3NpYmxlKSB7XG4gICAgICBGamFsbExvZ2dlci53YXJuKFxuICAgICAgICBgQXVyb3JhIGRhdGFiYXNlICcke3Byb3BzLmRhdGFiYXNlTmFtZX0nIGlzIGNvbmZpZ3VyZWQgd2l0aCBwdWJsaWMgYWNjZXNzaWJpbGl0eS4gYCArXG4gICAgICAgICAgXCJUaGlzIGlzIGEgc2VjdXJpdHkgcmlzayBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGV2ZWxvcG1lbnQuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhYmFzZSA9IG5ldyBSZHNBdXJvcmEodGhpcywgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfVJkc2AsIHtcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgZGF0YWJhc2VOYW1lOiBwcm9wcy5kYXRhYmFzZU5hbWUsXG4gICAgICBlbmdpbmU6IHJlc29sdmVkRW5naW5lLFxuICAgICAgZW5naW5lQ29uZmlnLFxuICAgICAgd3JpdGVyOiBwcm9wcy53cml0ZXIsXG4gICAgICByZWFkZXJzOiBwcm9wcy5yZWFkZXJzLFxuICAgICAgcHJveHk6IHByb3BzLnByb3h5LFxuICAgICAgY3JlZGVudGlhbHM6IHByb3BzLmNyZWRlbnRpYWxzLFxuICAgICAgZW5jcnlwdGlvbjogcHJvcHMuZW5jcnlwdGlvbixcbiAgICAgIGJhY2t1cFJldGVudGlvbjogcHJvcHMuYmFja3VwUmV0ZW50aW9uLFxuICAgICAgbW9uaXRvcmluZ0ludGVydmFsOiBwcm9wcy5tb25pdG9yaW5nSW50ZXJ2YWwsXG4gICAgICBwcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdzogcHJvcHMucHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3csXG4gICAgICBwb3J0OiBwcm9wcy5wb3J0LFxuICAgICAgcGVyZm9ybWFuY2VJbnNpZ2h0czogcHJvcHMucGVyZm9ybWFuY2VJbnNpZ2h0cyxcbiAgICAgIGRlbGV0aW9uUHJvdGVjdGlvbjogcHJvcHMuZGVsZXRpb25Qcm90ZWN0aW9uLFxuICAgICAgc25hcHNob3RJZGVudGlmaWVyOiBwcm9wcy5zbmFwc2hvdElkZW50aWZpZXIsXG4gICAgICBzbmFwc2hvdFVzZXJuYW1lOiBwcm9wcy5zbmFwc2hvdFVzZXJuYW1lLFxuICAgICAgYWxsb3dWcGNBY2Nlc3M6IHByb3BzLmFsbG93VnBjQWNjZXNzLFxuICAgICAgcHVibGljbHlBY2Nlc3NpYmxlOiBwcm9wcy5wdWJsaWNseUFjY2Vzc2libGUsXG4gICAgICBhbGxvd2VkSXBDaWRyOiBwcm9wcy5hbGxvd2VkSXBDaWRyXG4gICAgfSk7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuZGF0YWJhc2UuY29ubmVjdGlvbnM7XG4gICAgdGhpcy5hZGREYXRhYmFzZU91dHB1dHMocHJvcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRBdXJvcmFHbG9iYWwocHJvcHM6IEdsb2JhbEF1cm9yYURhdGFiYXNlUHJvcHMpIHtcbiAgICBpZiAoIXByb3BzLnZwYylcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlZQQyBpcyByZXF1aXJlZCBmb3IgR2xvYmFsIEF1cm9yYSBkYXRhYmFzZVwiKTtcbiAgICBpZiAoIXByb3BzLnByaW1hcnlSZWdpb24pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwcmltYXJ5UmVnaW9uIGlzIHJlcXVpcmVkIGZvciBHbG9iYWwgQXVyb3JhIGRhdGFiYXNlXCIpO1xuXG4gICAgY29uc3QgcmVzb2x2ZWREYXRhYmFzZUVuZ2luZSA9IHByb3BzLmRhdGFiYXNlRW5naW5lID8/IFwicG9zdGdyZXNxbFwiO1xuICAgIGNvbnN0IHJlc29sdmVkRW5naW5lID1cbiAgICAgIHByb3BzLmVuZ2luZSA/PyBnZXRBdXJvcmFDbHVzdGVyRW5naW5lKHJlc29sdmVkRGF0YWJhc2VFbmdpbmUpO1xuICAgIGNvbnN0IGVuZ2luZUNvbmZpZyA9IGdldEVuZ2luZUNvbmZpZyhyZXNvbHZlZERhdGFiYXNlRW5naW5lKTtcblxuICAgIHRoaXMuZGF0YWJhc2UgPSBuZXcgUmRzQXVyb3JhR2xvYmFsKFxuICAgICAgdGhpcyxcbiAgICAgIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1SZHNHbG9iYWxgLFxuICAgICAge1xuICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgZGF0YWJhc2VOYW1lOiBwcm9wcy5kYXRhYmFzZU5hbWUsXG4gICAgICAgIHByaW1hcnlSZWdpb246IHByb3BzLnByaW1hcnlSZWdpb24sXG4gICAgICAgIHNlY29uZGFyeVJlZ2lvbnM6IHByb3BzLnNlY29uZGFyeVJlZ2lvbnMsXG4gICAgICAgIGdsb2JhbENsdXN0ZXJJZGVudGlmaWVyOiBwcm9wcy5nbG9iYWxDbHVzdGVySWRlbnRpZmllcixcbiAgICAgICAgZW5naW5lOiByZXNvbHZlZEVuZ2luZSxcbiAgICAgICAgZW5naW5lQ29uZmlnLFxuICAgICAgICBlbmFibGVHbG9iYWxXcml0ZUZvcndhcmRpbmc6IHByb3BzLmVuYWJsZUdsb2JhbFdyaXRlRm9yd2FyZGluZyxcbiAgICAgICAgd3JpdGVyOiBwcm9wcy53cml0ZXIsXG4gICAgICAgIHJlYWRlcnM6IHByb3BzLnJlYWRlcnMsXG4gICAgICAgIHByb3h5OiBwcm9wcy5wcm94eSxcbiAgICAgICAgY3JlZGVudGlhbHM6IHByb3BzLmNyZWRlbnRpYWxzLFxuICAgICAgICBlbmNyeXB0aW9uOiBwcm9wcy5lbmNyeXB0aW9uLFxuICAgICAgICBiYWNrdXBSZXRlbnRpb246IHByb3BzLmJhY2t1cFJldGVudGlvbixcbiAgICAgICAgbW9uaXRvcmluZ0ludGVydmFsOiBwcm9wcy5tb25pdG9yaW5nSW50ZXJ2YWwsXG4gICAgICAgIHByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93OiBwcm9wcy5wcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdyxcbiAgICAgICAgcG9ydDogcHJvcHMucG9ydCxcbiAgICAgICAgcGVyZm9ybWFuY2VJbnNpZ2h0czogcHJvcHMucGVyZm9ybWFuY2VJbnNpZ2h0cyxcbiAgICAgICAgZGVsZXRpb25Qcm90ZWN0aW9uOiBwcm9wcy5kZWxldGlvblByb3RlY3Rpb24sXG4gICAgICAgIHNuYXBzaG90SWRlbnRpZmllcjogcHJvcHMuc25hcHNob3RJZGVudGlmaWVyLFxuICAgICAgICBzbmFwc2hvdFVzZXJuYW1lOiBwcm9wcy5zbmFwc2hvdFVzZXJuYW1lXG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5kYXRhYmFzZS5jb25uZWN0aW9ucztcbiAgICB0aGlzLmFkZERhdGFiYXNlT3V0cHV0cyhwcm9wcyk7XG4gIH1cblxuICBwcml2YXRlIGFkZFJkc0luc3RhbmNlKHByb3BzOiBJbnN0YW5jZURhdGFiYXNlUHJvcHMpIHtcbiAgICBpZiAoIXByb3BzLnZwYykgdGhyb3cgbmV3IEVycm9yKFwiVlBDIGlzIHJlcXVpcmVkIGZvciBJbnN0YW5jZSBkYXRhYmFzZVwiKTtcblxuICAgIGNvbnN0IHJlc29sdmVkRGF0YWJhc2VFbmdpbmUgPSBwcm9wcy5kYXRhYmFzZUVuZ2luZSA/PyBcInBvc3RncmVzcWxcIjtcbiAgICBjb25zdCByZXNvbHZlZEVuZ2luZSA9XG4gICAgICBwcm9wcy5lbmdpbmUgPz8gZ2V0SW5zdGFuY2VFbmdpbmUocmVzb2x2ZWREYXRhYmFzZUVuZ2luZSk7XG4gICAgY29uc3QgZW5naW5lQ29uZmlnID0gZ2V0RW5naW5lQ29uZmlnKHJlc29sdmVkRGF0YWJhc2VFbmdpbmUpO1xuXG4gICAgdGhpcy5kYXRhYmFzZSA9IG5ldyBSZHNJbnN0YW5jZSh0aGlzLCBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9UmRzYCwge1xuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICBkYXRhYmFzZU5hbWU6IHByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgIGluc3RhbmNlVHlwZTogcHJvcHMuaW5zdGFuY2VUeXBlLFxuICAgICAgYWxsb2NhdGVkU3RvcmFnZTogcHJvcHMuYWxsb2NhdGVkU3RvcmFnZSxcbiAgICAgIHBvcnQ6IHByb3BzLnBvcnQsXG4gICAgICBlbmdpbmU6IHJlc29sdmVkRW5naW5lLFxuICAgICAgZW5naW5lQ29uZmlnLFxuICAgICAgbXVsdGlBejogcHJvcHMubXVsdGlBeixcbiAgICAgIGJhY2t1cFJldGVudGlvbjpcbiAgICAgICAgcHJvcHMuYmFja3VwUmV0ZW50aW9uICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IER1cmF0aW9uLmRheXMocHJvcHMuYmFja3VwUmV0ZW50aW9uKVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgcGVyZm9ybWFuY2VJbnNpZ2h0czogcHJvcHMucGVyZm9ybWFuY2VJbnNpZ2h0cyxcbiAgICAgIHByb3h5OiBwcm9wcy5wcm94eSxcbiAgICAgIHJlYWRSZXBsaWNhOiBwcm9wcy5yZWFkUmVwbGljYSxcbiAgICAgIGNyZWRlbnRpYWxzOiBwcm9wcy5jcmVkZW50aWFscyxcbiAgICAgIGVuY3J5cHRpb246IHByb3BzLmVuY3J5cHRpb24sXG4gICAgICBwdWJsaWNseUFjY2Vzc2libGU6IHByb3BzLnB1YmxpY2x5QWNjZXNzaWJsZSxcbiAgICAgIGRlbGV0aW9uUHJvdGVjdGlvbjogcHJvcHMuZGVsZXRpb25Qcm90ZWN0aW9uLFxuICAgICAgc25hcHNob3RJZGVudGlmaWVyOiBwcm9wcy5zbmFwc2hvdElkZW50aWZpZXIsXG4gICAgICBzbmFwc2hvdFVzZXJuYW1lOiBwcm9wcy5zbmFwc2hvdFVzZXJuYW1lXG4gICAgfSk7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuZGF0YWJhc2UuY29ubmVjdGlvbnM7XG4gICAgdGhpcy5hZGREYXRhYmFzZU91dHB1dHMocHJvcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGREYXRhYmFzZU91dHB1dHMocHJvcHM6IElSZWxhdGlvbmFsRGF0YWJhc2VQcm9wcykge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5kYXRhYmFzZS5nZXRIb3N0RW5kcG9pbnQoKTtcbiAgICBjb25zdCBzdGFja05hbWUgPSBTdGFjay5vZih0aGlzKS5zdGFja05hbWU7XG4gICAgLy8gU2FuaXRpc2UgZm9yIENmbk91dHB1dCBuYW1lcyDigJQgQ2xvdWRGb3JtYXRpb24gZXhwb3J0IG5hbWVzIG9ubHkgYWxsb3cgW2EtekEtWjAtOTotXVxuICAgIGNvbnN0IG91dHB1dE5hbWUgPSB0b1Bhc2NhbENhc2UocHJvcHMuZGF0YWJhc2VOYW1lKTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7b3V0cHV0TmFtZX1FbmRwb2ludGAsIHtcbiAgICAgIGtleTogYCR7c3RhY2tOYW1lfSR7b3V0cHV0TmFtZX1FbmRwb2ludGAsXG4gICAgICBleHBvcnROYW1lOiBgJHtzdGFja05hbWV9JHtvdXRwdXROYW1lfUVuZHBvaW50YCxcbiAgICAgIHZhbHVlOiBlbmRwb2ludCxcbiAgICAgIGRlc2NyaXB0aW9uOiBgRGF0YWJhc2UgRW5kcG9pbnQgZm9yICR7cHJvcHMuZGF0YWJhc2VOYW1lfWBcbiAgICB9KTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7b3V0cHV0TmFtZX1Qb3J0YCwge1xuICAgICAga2V5OiBgJHtzdGFja05hbWV9JHtvdXRwdXROYW1lfVBvcnRgLFxuICAgICAgZXhwb3J0TmFtZTogYCR7c3RhY2tOYW1lfSR7b3V0cHV0TmFtZX1Qb3J0YCxcbiAgICAgIHZhbHVlOiB0aGlzLmRhdGFiYXNlLmdldEhvc3RQb3J0KCksXG4gICAgICBkZXNjcmlwdGlvbjogYERhdGFiYXNlIFBvcnQgZm9yICR7cHJvcHMuZGF0YWJhc2VOYW1lfWBcbiAgICB9KTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7b3V0cHV0TmFtZX1EYXRhYmFzZU5hbWVgLCB7XG4gICAgICBrZXk6IGAke3N0YWNrTmFtZX0ke291dHB1dE5hbWV9RGF0YWJhc2VOYW1lYCxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3N0YWNrTmFtZX0ke291dHB1dE5hbWV9RGF0YWJhc2VOYW1lYCxcbiAgICAgIHZhbHVlOiBwcm9wcy5kYXRhYmFzZU5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogYERhdGFiYXNlIE5hbWUgZm9yICR7cHJvcHMuZGF0YWJhc2VOYW1lfWBcbiAgICB9KTtcblxuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gdGhpcy5kYXRhYmFzZS5nZXRDcmVkZW50aWFscygpO1xuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7b3V0cHV0TmFtZX1TZWNyZXRBcm5gLCB7XG4gICAgICBrZXk6IGAke3N0YWNrTmFtZX0ke291dHB1dE5hbWV9U2VjcmV0QXJuYCxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3N0YWNrTmFtZX0ke291dHB1dE5hbWV9U2VjcmV0QXJuYCxcbiAgICAgIHZhbHVlOiBjcmVkZW50aWFscy5zZWNyZXQuc2VjcmV0QXJuLFxuICAgICAgZGVzY3JpcHRpb246IGBEYXRhYmFzZSBDcmVkZW50aWFscyBTZWNyZXQgQVJOIGZvciAke3Byb3BzLmRhdGFiYXNlTmFtZX1gXG4gICAgfSk7XG4gIH1cblxuICBnZXRDcmVkZW50aWFscygpOiBTZWNyZXQge1xuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlLmdldENyZWRlbnRpYWxzKCk7XG4gIH1cblxuICBnZXRIb3N0RW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZS5nZXRIb3N0RW5kcG9pbnQoKTtcbiAgfVxuXG4gIGdldEhvc3RQb3J0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2UuZ2V0SG9zdFBvcnQoKTtcbiAgfVxuXG4gIGdldERhdGFiYXNlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kYXRhYmFzZU5hbWU7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgY29ubmVjdCBwZXJtaXNzaW9ucyB0byBhIGdyYW50ZWUgYnkgYWRkaW5nIGl0IHRvIHRoZSBkYXRhYmFzZSBzZWN1cml0eSBncm91cC5cbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIGNvbm5lY3RhYmxlIHByaW5jaXBhbCB0byBncmFudCBjb25uZWN0IHBlcm1pc3Npb25zIHRvXG4gICAqL1xuICBncmFudENvbm5lY3QoZ3JhbnRlZTogSUNvbm5lY3RhYmxlKTogdm9pZCB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5hbGxvd0RlZmF1bHRQb3J0RnJvbShncmFudGVlKTtcbiAgfVxufVxuXG4vLyBSZS1leHBvcnQgRHluYW1vREIgdHlwZXMgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgdHlwZSB7XG4gIER5bmFtb0RCS2V5U2NoZW1hLFxuICBEeW5hbW9EQkdsb2JhbFNlY29uZGFyeUluZGV4LFxuICBEeW5hbW9EQlRhYmxlUHJvcHNcbn0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvZGF0YWJhc2UvZHluYW1vZGJcIjtcblxuLy8gUmUtZXhwb3J0IGludGVyZmFjZSB0eXBlc1xuZXhwb3J0IHtcbiAgdHlwZSBJUmVsYXRpb25hbERhdGFiYXNlLFxuICB0eXBlIElEeW5hbW9EQkRhdGFiYXNlLFxuICB0eXBlIEFueURhdGFiYXNlLFxuICB0eXBlIERhdGFiYXNlVHlwZSxcbiAgdHlwZSBSZWxhdGlvbmFsRGF0YWJhc2VUeXBlLFxuICBpc1JlbGF0aW9uYWxEYXRhYmFzZSxcbiAgaXNEeW5hbW9EQkRhdGFiYXNlLFxuICBpc0F1cm9yYURhdGFiYXNlLFxuICBpc0luc3RhbmNlRGF0YWJhc2UsXG4gIGlzR2xvYmFsQXVyb3JhRGF0YWJhc2Vcbn0gZnJvbSBcIi4vaW50ZXJmYWNlcy9kYXRhYmFzZS5qc1wiO1xuIl19
461
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL2RhdGFiYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXFIQSx3REFFQztBQUVELDhDQUVDO0FBRUQsMENBT0M7QUFrREQsMENBU0M7QUFLRCx3Q0FTQztBQTdNRCwyQ0FBdUM7QUFDdkMsNkNBQStDO0FBRy9DLDJEQUFzRTtBQUN0RSxrRkFBK0U7QUFDL0Usb0VBSytDO0FBQy9DLHlFQUd5QztBQUN6Qyx5RUFBK0Q7QUFxQi9ELGlEQVM2QjtBQUM3Qiw2Q0FBdUM7QUFXMUIsUUFBQSxzQkFBc0IsR0FTL0I7SUFDRixVQUFVLEVBQUU7UUFDVixNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUU7UUFDL0MsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFO1FBQ2pELGVBQWUsRUFBRSxVQUFVO1FBQzNCLGFBQWEsRUFBRSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUU7UUFDdkMsZUFBZSxFQUFFLDhDQUE4QztLQUNoRTtJQUNELEtBQUssRUFBRTtRQUNMLHdFQUF3RTtRQUN4RSxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRTtRQUN0RSxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUU7UUFDbkQsZUFBZSxFQUFFLE9BQU87UUFDeEIsYUFBYSxFQUFFLEVBQUUsd0JBQXdCLEVBQUUsSUFBSSxFQUFFO1FBQ2pELGVBQWUsRUFBRSx5Q0FBeUM7S0FDM0Q7Q0FDRixDQUFDO0FBRUYsTUFBTSx1QkFBdUIsR0FBaUQ7SUFDNUUsVUFBVSxFQUFFLEdBQUcsRUFBRTtRQUNmLE1BQU0sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcs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Y0FBYyxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQVksQ0FBQyxPQUFxQjtRQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELENBQUM7Q0FDRjtBQWhPRCxnREFnT0M7QUFTRCw0QkFBNEI7QUFDNUIsd0RBV2tDO0FBTGhDLG1IQUFBLG9CQUFvQixPQUFBO0FBQ3BCLGlIQUFBLGtCQUFrQixPQUFBO0FBQ2xCLCtHQUFBLGdCQUFnQixPQUFBO0FBQ2hCLGlIQUFBLGtCQUFrQixPQUFBO0FBQ2xCLHFIQUFBLHNCQUFzQixPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IENmbk91dHB1dCwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuaW1wb3J0IHR5cGUgQXBwIGZyb20gXCIuLi8uLi9hcHBcIjtcbmltcG9ydCB7IFJkc0F1cm9yYSwgUmRzSW5zdGFuY2UgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9kYXRhYmFzZVwiO1xuaW1wb3J0IHsgUmRzQXVyb3JhR2xvYmFsIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvZGF0YWJhc2UvcmRzQXVyb3JhR2xvYmFsXCI7XG5pbXBvcnQge1xuICBEeW5hbW9EQlRhYmxlLFxuICB0eXBlIER5bmFtb0RCS2V5U2NoZW1hLFxuICB0eXBlIER5bmFtb0RCR2xvYmFsU2Vjb25kYXJ5SW5kZXgsXG4gIHR5cGUgRHluYW1vREJUYWJsZVByb3BzXG59IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2RhdGFiYXNlL2R5bmFtb2RiXCI7XG5pbXBvcnQge1xuICBGamFsbExvZ2dlcixcbiAgd2FybklmUHJvcGVydGllc0lnbm9yZWRcbn0gZnJvbSBcIi4uLy4uL3V0aWxzL3ZhbGlkYXRpb25Mb2dnZXIuanNcIjtcbmltcG9ydCB7IHRvUGFzY2FsQ2FzZSB9IGZyb20gXCIuLi8uLi91dGlscy9jYXBpdGFsaXNlU3RyaW5nLmpzXCI7XG5cbmltcG9ydCB7XG4gIHR5cGUgQ29ubmVjdGlvbnMsXG4gIHR5cGUgSUNvbm5lY3RhYmxlLFxuICB0eXBlIElWcGMsXG4gIHR5cGUgU3VibmV0U2VsZWN0aW9uXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgeyB0eXBlIElUYWJsZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGJcIjtcbmltcG9ydCB7IHR5cGUgU2VjcmV0IH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3Mvc2VjcmV0c1wiO1xuaW1wb3J0IHsgdHlwZSBJR3JhbnRhYmxlLCB0eXBlIEdyYW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7XG4gIHR5cGUgSVJlbGF0aW9uYWxEYXRhYmFzZSxcbiAgdHlwZSBJRHluYW1vREJEYXRhYmFzZSxcbiAgdHlwZSBBbnlEYXRhYmFzZSxcbiAgdHlwZSBSZWxhdGlvbmFsRGF0YWJhc2VUeXBlXG59IGZyb20gXCIuL2ludGVyZmFjZXMvZGF0YWJhc2UuanNcIjtcbmltcG9ydCB7XG4gIHR5cGUgSUR5bmFtb0RCQ29ubmVjdG9yLFxuICB0eXBlIElTZWN1cml0eUdyb3VwQ29ubmVjdG9yXG59IGZyb20gXCIuL2ludGVyZmFjZXMvY29ubmVjdG9yLmpzXCI7XG5pbXBvcnQge1xuICB0eXBlIElJbnN0YW5jZUVuZ2luZSxcbiAgdHlwZSBJQ2x1c3RlckVuZ2luZSxcbiAgRGF0YWJhc2VDbHVzdGVyRW5naW5lLFxuICBEYXRhYmFzZUluc3RhbmNlRW5naW5lLFxuICBBdXJvcmFQb3N0Z3Jlc0VuZ2luZVZlcnNpb24sXG4gIEF1cm9yYU15c3FsRW5naW5lVmVyc2lvbixcbiAgUG9zdGdyZXNFbmdpbmVWZXJzaW9uLFxuICBNeXNxbEVuZ2luZVZlcnNpb25cbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yZHNcIjtcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyB0eXBlIElLZXkgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWttc1wiO1xuXG5leHBvcnQgdHlwZSBEYXRhYmFzZUVuZ2luZSA9IFwicG9zdGdyZXNxbFwiIHwgXCJteXNxbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVuZ2luZUNvbmZpZyB7XG4gIGRlZmF1bHRVc2VybmFtZTogc3RyaW5nO1xuICBzc2xQYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICByb3RhdGlvbkFwcE5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IERBVEFCQVNFX0VOR0lORV9DT05GSUc6IFJlY29yZDxcbiAgRGF0YWJhc2VFbmdpbmUsXG4gIHtcbiAgICBhdXJvcmE6IHsgdmVyc2lvbjogc3RyaW5nOyBtYWpvclZlcnNpb246IHN0cmluZyB9O1xuICAgIGluc3RhbmNlOiB7IHZlcnNpb246IHN0cmluZzsgbWFqb3JWZXJzaW9uOiBzdHJpbmcgfTtcbiAgICBkZWZhdWx0VXNlcm5hbWU6IHN0cmluZztcbiAgICBzc2xQYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHJvdGF0aW9uQXBwTmFtZTogc3RyaW5nO1xuICB9XG4+ID0ge1xuICBwb3N0Z3Jlc3FsOiB7XG4gICAgYXVyb3JhOiB7IHZlcnNpb246IFwiMTYuNlwiLCBtYWpvclZlcnNpb246IFwiMTZcIiB9LFxuICAgIGluc3RhbmNlOiB7IHZlcnNpb246IFwiMTcuNVwiLCBtYWpvclZlcnNpb246IFwiMTdcIiB9LFxuICAgIGRlZmF1bHRVc2VybmFtZTogXCJwb3N0Z3Jlc1wiLFxuICAgIHNzbFBhcmFtZXRlcnM6IHsgXCJyZHMuZm9yY2Vfc3NsXCI6IFwiMVwiIH0sXG4gICAgcm90YXRpb25BcHBOYW1lOiBcIlNlY3JldHNNYW5hZ2VyUkRTUG9zdGdyZVNRTFJvdGF0aW9uTXVsdGlVc2VyXCJcbiAgfSxcbiAgbXlzcWw6IHtcbiAgICAvLyBtYWpvclZlcnNpb24gbXVzdCBiZSBBdXJvcmEgdmVyc2lvbiAoMy4wOC4wKSwgTk9UIE15U1FMIHZlcnNpb24gKDguMClcbiAgICBhdXJvcmE6IHsgdmVyc2lvbjogXCI4LjAubXlzcWxfYXVyb3JhLjMuMDguMFwiLCBtYWpvclZlcnNpb246IFwiMy4wOC4wXCIgfSxcbiAgICBpbnN0YW5jZTogeyB2ZXJzaW9uOiBcIjguNC40XCIsIG1ham9yVmVyc2lvbjogXCI4LjRcIiB9LFxuICAgIGRlZmF1bHRVc2VybmFtZTogXCJhZG1pblwiLFxuICAgIHNzbFBhcmFtZXRlcnM6IHsgcmVxdWlyZV9zZWN1cmVfdHJhbnNwb3J0OiBcIk9OXCIgfSxcbiAgICByb3RhdGlvbkFwcE5hbWU6IFwiU2VjcmV0c01hbmFnZXJSRFNNeVNRTFJvdGF0aW9uTXVsdGlVc2VyXCJcbiAgfVxufTtcblxuY29uc3QgQVVST1JBX0VOR0lORV9GQUNUT1JJRVM6IFJlY29yZDxEYXRhYmFzZUVuZ2luZSwgKCkgPT4gSUNsdXN0ZXJFbmdpbmU+ID0ge1xuICBwb3N0Z3Jlc3FsOiAoKSA9PiB7XG4gICAgY29uc3QgeyB2ZXJzaW9uLCBtYWpvclZlcnNpb24gfSA9IERBVEFCQVNFX0VOR0lORV9DT05GSUcucG9zdGdyZXNxbC5hdXJvcmE7XG4gICAgcmV0dXJuIERhdGFiYXNlQ2x1c3RlckVuZ2luZS5hdXJvcmFQb3N0Z3Jlcyh7XG4gICAgICB2ZXJzaW9uOiBBdXJvcmFQb3N0Z3Jlc0VuZ2luZVZlcnNpb24ub2YodmVyc2lvbiwgbWFqb3JWZXJzaW9uKVxuICAgIH0pO1xuICB9LFxuICBteXNxbDogKCkgPT4ge1xuICAgIGNvbnN0IHsgdmVyc2lvbiwgbWFqb3JWZXJzaW9uIH0gPSBEQVRBQkFTRV9FTkdJTkVfQ09ORklHLm15c3FsLmF1cm9yYTtcbiAgICByZXR1cm4gRGF0YWJhc2VDbHVzdGVyRW5naW5lLmF1cm9yYU15c3FsKHtcbiAgICAgIHZlcnNpb246IEF1cm9yYU15c3FsRW5naW5lVmVyc2lvbi5vZih2ZXJzaW9uLCBtYWpvclZlcnNpb24pXG4gICAgfSk7XG4gIH1cbn07XG5cbmNvbnN0IElOU1RBTkNFX0VOR0lORV9GQUNUT1JJRVM6IFJlY29yZDxEYXRhYmFzZUVuZ2luZSwgKCkgPT4gSUluc3RhbmNlRW5naW5lPiA9XG4gIHtcbiAgICBwb3N0Z3Jlc3FsOiAoKSA9PiB7XG4gICAgICBjb25zdCB7IHZlcnNpb24sIG1ham9yVmVyc2lvbiB9ID1cbiAgICAgICAgREFUQUJBU0VfRU5HSU5FX0NPTkZJRy5wb3N0Z3Jlc3FsLmluc3RhbmNlO1xuICAgICAgcmV0dXJuIERhdGFiYXNlSW5zdGFuY2VFbmdpbmUucG9zdGdyZXMoe1xuICAgICAgICB2ZXJzaW9uOiBQb3N0Z3Jlc0VuZ2luZVZlcnNpb24ub2YodmVyc2lvbiwgbWFqb3JWZXJzaW9uKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBteXNxbDogKCkgPT4ge1xuICAgICAgY29uc3QgeyB2ZXJzaW9uLCBtYWpvclZlcnNpb24gfSA9IERBVEFCQVNFX0VOR0lORV9DT05GSUcubXlzcWwuaW5zdGFuY2U7XG4gICAgICByZXR1cm4gRGF0YWJhc2VJbnN0YW5jZUVuZ2luZS5teXNxbCh7XG4gICAgICAgIHZlcnNpb246IE15c3FsRW5naW5lVmVyc2lvbi5vZih2ZXJzaW9uLCBtYWpvclZlcnNpb24pXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdXJvcmFDbHVzdGVyRW5naW5lKGVuZ2luZTogRGF0YWJhc2VFbmdpbmUpOiBJQ2x1c3RlckVuZ2luZSB7XG4gIHJldHVybiBBVVJPUkFfRU5HSU5FX0ZBQ1RPUklFU1tlbmdpbmVdKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnN0YW5jZUVuZ2luZShlbmdpbmU6IERhdGFiYXNlRW5naW5lKTogSUluc3RhbmNlRW5naW5lIHtcbiAgcmV0dXJuIElOU1RBTkNFX0VOR0lORV9GQUNUT1JJRVNbZW5naW5lXSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5naW5lQ29uZmlnKGVuZ2luZTogRGF0YWJhc2VFbmdpbmUpOiBFbmdpbmVDb25maWcge1xuICBjb25zdCBjb25maWcgPSBEQVRBQkFTRV9FTkdJTkVfQ09ORklHW2VuZ2luZV07XG4gIHJldHVybiB7XG4gICAgZGVmYXVsdFVzZXJuYW1lOiBjb25maWcuZGVmYXVsdFVzZXJuYW1lLFxuICAgIHNzbFBhcmFtZXRlcnM6IGNvbmZpZy5zc2xQYXJhbWV0ZXJzLFxuICAgIHJvdGF0aW9uQXBwTmFtZTogY29uZmlnLnJvdGF0aW9uQXBwTmFtZVxuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3h5Q29uZmlnIHtcbiAgbWF4Q29ubmVjdGlvbnM/OiBudW1iZXI7XG4gIG1heElkbGVDb25uZWN0aW9ucz86IG51bWJlcjtcbiAgY29ubmVjdGlvbkJvcnJvd1RpbWVvdXQ/OiBudW1iZXI7XG4gIHJlcXVpcmVUTFM/OiBib29sZWFuO1xuICB2cGNTdWJuZXRzPzogU3VibmV0U2VsZWN0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWRSZXBsaWNhQ29uZmlnIHtcbiAgaW5zdGFuY2VUeXBlPzogc3RyaW5nO1xuICBhdmFpbGFiaWxpdHlab25lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWRlbnRpYWxzQ29uZmlnIHtcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gIHNlY3JldFJvdGF0aW9uPzogU2VjcmV0Um90YXRpb25Db25maWcgfCBmYWxzZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWNyZXRSb3RhdGlvbkNvbmZpZyB7XG4gIGF1dG9tYXRpY2FsbHlBZnRlcj86IER1cmF0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVuY3J5cHRpb25Db25maWcge1xuICBzdG9yYWdlS2V5PzogRW5jcnlwdGlvbktleVNwZWM7XG59XG5cbmV4cG9ydCB0eXBlIFBlcmZvcm1hbmNlSW5zaWdodHNSZXRlbnRpb25QZXJpb2QgPSA3IHwgMzEgfCA5MyB8IDE4NiB8IDM3MjtcblxuZXhwb3J0IGludGVyZmFjZSBQZXJmb3JtYW5jZUluc2lnaHRzQ29uZmlnIHtcbiAgZW5jcnlwdGlvbktleT86IEVuY3J5cHRpb25LZXlTcGVjO1xuICAvKiogUmV0ZW50aW9uIHBlcmlvZCBpbiBkYXlzLiBEZWZhdWx0OiAzMSAoMSBtb250aCkuICovXG4gIHJldGVudGlvblBlcmlvZD86IFBlcmZvcm1hbmNlSW5zaWdodHNSZXRlbnRpb25QZXJpb2Q7XG59XG5cbi8vIE1hcmtlciBmb3IgQVdTIG1hbmFnZWQgZW5jcnlwdGlvbiBrZXkgKGF3cy9yZHMsIGF3cy9zMywgZXRjLilcbmV4cG9ydCBpbnRlcmZhY2UgQXdzTWFuYWdlZEtleSB7XG4gIHJlYWRvbmx5IGF3c01hbmFnZWQ6IHRydWU7XG59XG5cbi8vIE1hcmtlciBmb3IgZXhwbGljaXRseSByZXF1ZXN0aW5nIGEgQ3VzdG9tZXIgTWFuYWdlZCBLZXkgKENNSykuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbWVyTWFuYWdlZEtleU1hcmtlciB7XG4gIHJlYWRvbmx5IHVzZUNNSzogdHJ1ZTtcbn1cblxuLy8gRW5jcnlwdGlvbiBrZXkgc3BlY2lmaWNhdGlvbiBmb3IgUkRTIHJlc291cmNlcy5cbmV4cG9ydCB0eXBlIEVuY3J5cHRpb25LZXlTcGVjID0gSUtleSB8IEF3c01hbmFnZWRLZXkgfCBDdXN0b21lck1hbmFnZWRLZXlNYXJrZXI7XG5cbi8vIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgdGhlIGVuY3J5cHRpb24ga2V5IHNwZWMgaXMgQVdTIG1hbmFnZWQuXG5leHBvcnQgZnVuY3Rpb24gaXNBd3NNYW5hZ2VkS2V5KFxuICBzcGVjOiBFbmNyeXB0aW9uS2V5U3BlYyB8IHVuZGVmaW5lZFxuKTogc3BlYyBpcyBBd3NNYW5hZ2VkS2V5IHtcbiAgcmV0dXJuIChcbiAgICBzcGVjICE9PSB1bmRlZmluZWQgJiZcbiAgICB0eXBlb2Ygc3BlYyA9PT0gXCJvYmplY3RcIiAmJlxuICAgIFwiYXdzTWFuYWdlZFwiIGluIHNwZWMgJiZcbiAgICAoc3BlYyBhcyBBd3NNYW5hZ2VkS2V5KS5hd3NNYW5hZ2VkID09PSB0cnVlXG4gICk7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBDTUsgaXMgZXhwbGljaXRseSByZXF1ZXN0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NNS1JlcXVlc3RlZChcbiAgc3BlYzogRW5jcnlwdGlvbktleVNwZWMgfCB1bmRlZmluZWRcbik6IHNwZWMgaXMgQ3VzdG9tZXJNYW5hZ2VkS2V5TWFya2VyIHtcbiAgcmV0dXJuIChcbiAgICBzcGVjICE9PSB1bmRlZmluZWQgJiZcbiAgICB0eXBlb2Ygc3BlYyA9PT0gXCJvYmplY3RcIiAmJlxuICAgIFwidXNlQ01LXCIgaW4gc3BlYyAmJlxuICAgIChzcGVjIGFzIEN1c3RvbWVyTWFuYWdlZEtleU1hcmtlcikudXNlQ01LID09PSB0cnVlXG4gICk7XG59XG5cbi8qKlxuICogQ29udmVuaWVuY2UgY29uc3RhbnQgZm9yIHNwZWNpZnlpbmcgQVdTIG1hbmFnZWQgZW5jcnlwdGlvbiAodGhlIGRlZmF1bHQpLlxuICogQGV4YW1wbGVcbiAqIGVuY3J5cHRpb246IHsgc3RvcmFnZUtleTogQVdTX01BTkFHRUQgfVxuICovXG5leHBvcnQgY29uc3QgQVdTX01BTkFHRUQ6IEF3c01hbmFnZWRLZXkgPSB7IGF3c01hbmFnZWQ6IHRydWUgfSBhcyBjb25zdDtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBjb25zdGFudCBmb3IgZXhwbGljaXRseSByZXF1ZXN0aW5nIENNSy5cbiAqIEBleGFtcGxlXG4gKiBlbmNyeXB0aW9uOiB7IHN0b3JhZ2VLZXk6IFVTRV9DTUsgfVxuICovXG5leHBvcnQgY29uc3QgVVNFX0NNSzogQ3VzdG9tZXJNYW5hZ2VkS2V5TWFya2VyID0geyB1c2VDTUs6IHRydWUgfSBhcyBjb25zdDtcblxuLyoqXG4gKiAqKkRFU1RSVUNUSVZFKio6IENoYW5naW5nIGBzdG9yYWdlS2V5YCBhZnRlciBjbHVzdGVyIGNyZWF0aW9uIGNhdXNlcyBjbHVzdGVyIFJFUExBQ0VNRU5ULlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1cm9yYUVuY3J5cHRpb25Db25maWcge1xuICAvKiogREVTVFJVQ1RJVkU6IENoYW5naW5nIGFmdGVyIGNyZWF0aW9uIGNhdXNlcyBjbHVzdGVyIHJlcGxhY2VtZW50ICovXG4gIHN0b3JhZ2VLZXk/OiBFbmNyeXB0aW9uS2V5U3BlYztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXJvcmFSZWFkZXJDb25maWcge1xuICBzY2FsZVdpdGhXcml0ZXI/OiBib29sZWFuO1xuICBlbmFibGVQZXJmb3JtYW5jZUluc2lnaHRzPzogYm9vbGVhbjtcbiAgaWRlbnRpZmllclN1ZmZpeD86IHN0cmluZztcbiAgYXZhaWxhYmlsaXR5Wm9uZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXJvcmFXcml0ZXJDb25maWcge1xuICBlbmFibGVQZXJmb3JtYW5jZUluc2lnaHRzPzogYm9vbGVhbjtcbiAgaWRlbnRpZmllclN1ZmZpeD86IHN0cmluZztcbiAgYXZhaWxhYmlsaXR5Wm9uZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXJvcmFSZWFkZXJzQ29uZmlnIHtcbiAgLyoqIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGluc3RhbmNlcyAqL1xuICBjb3VudD86IG51bWJlcjtcbiAgLyoqIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGNvdW50ICovXG4gIGluc3RhbmNlcz86IEF1cm9yYVJlYWRlckNvbmZpZ1tdO1xuICBkZWZhdWx0RW5hYmxlUGVyZm9ybWFuY2VJbnNpZ2h0cz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQmFzZSBwcm9wcyBmb3IgZGF0YWJhc2UgY29uZmlndXJhdGlvbi5cbiAqL1xudHlwZSBCYXNlRGF0YWJhc2VQcm9wcyA9IHtcbiAgdnBjPzogSVZwYztcbiAgZGF0YWJhc2VOYW1lOiBzdHJpbmc7XG4gIGluc3RhbmNlVHlwZT86IHN0cmluZztcbiAgZGVsZXRpb25Qcm90ZWN0aW9uPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVyb3JhRGF0YWJhc2VQcm9wcyBleHRlbmRzIEJhc2VEYXRhYmFzZVByb3BzIHtcbiAgdHlwZTogXCJBdXJvcmFcIjtcbiAgZGF0YWJhc2VFbmdpbmU/OiBEYXRhYmFzZUVuZ2luZTtcbiAgLyoqIE92ZXJyaWRlcyBkYXRhYmFzZUVuZ2luZSBpZiBwcm92aWRlZCAqL1xuICBlbmdpbmU/OiBJQ2x1c3RlckVuZ2luZTtcbiAgd3JpdGVyPzogQXVyb3JhV3JpdGVyQ29uZmlnO1xuICByZWFkZXJzPzogQXVyb3JhUmVhZGVyc0NvbmZpZyB8IGZhbHNlO1xuICBwcm94eT86IFByb3h5Q29uZmlnIHwgZmFsc2U7XG4gIGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHNDb25maWc7XG4gIC8qKiBERVNUUlVDVElWRTogQ2hhbmdpbmcgc3RvcmFnZUtleSBjYXVzZXMgY2x1c3RlciByZXBsYWNlbWVudCAqL1xuICBlbmNyeXB0aW9uPzogQXVyb3JhRW5jcnlwdGlvbkNvbmZpZztcbiAgYmFja3VwUmV0ZW50aW9uPzogbnVtYmVyO1xuICBtb25pdG9yaW5nSW50ZXJ2YWw/OiBEdXJhdGlvbjtcbiAgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c/OiBzdHJpbmc7XG4gIHBvcnQ/OiBudW1iZXI7XG4gIHBlcmZvcm1hbmNlSW5zaWdodHM/OiBQZXJmb3JtYW5jZUluc2lnaHRzQ29uZmlnIHwgZmFsc2U7XG4gIC8qKiBBUk4gb3IgaWRlbnRpZmllciBvZiBEQiBjbHVzdGVyIHNuYXBzaG90IHRvIHJlc3RvcmUgZnJvbSAqL1xuICBzbmFwc2hvdElkZW50aWZpZXI/OiBzdHJpbmc7XG4gIC8qKiBVc2VybmFtZSBmcm9tIHRoZSBzbmFwc2hvdCAocmVxdWlyZWQgd2hlbiByZXN0b3JpbmcgZnJvbSBzbmFwc2hvdCB0byByZXNldCBwYXNzd29yZCkgKi9cbiAgc25hcHNob3RVc2VybmFtZT86IHN0cmluZztcbiAgLyoqIEFsbG93IGFjY2VzcyBmcm9tIFZQQyBDSURSIChhdm9pZHMgY3Jvc3Mtc3RhY2sgY3ljbGljIGRlcGVuZGVuY2llcyB3aXRoIExhbWJkYSkgKi9cbiAgYWxsb3dWcGNBY2Nlc3M/OiBib29sZWFuO1xuICAvKipcbiAgICogTWFrZSBkYXRhYmFzZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGZyb20gdGhlIGludGVybmV0LlxuICAgKiBXQVJOSU5HOiBUaGlzIGlzIGEgc2VjdXJpdHkgcmlzayBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGV2ZWxvcG1lbnRcbiAgICogb3Igd2hlbiBidWlsZGluZyBQYXlsb2FkIGFwcHMgbG9jYWxseSB0aGF0IG5lZWQgZGF0YWJhc2UgYWNjZXNzLlxuICAgKiBXaGVuIGVuYWJsZWQsIHRoZSBkYXRhYmFzZSBpcyBwbGFjZWQgaW4gcHVibGljIHN1Ym5ldHMuXG4gICAqL1xuICBwdWJsaWNseUFjY2Vzc2libGU/OiBib29sZWFuO1xuICAvKipcbiAgICogSVAgYWRkcmVzcyB0byBhbGxvdyBhY2Nlc3MgZnJvbSB3aGVuIHB1YmxpY2x5QWNjZXNzaWJsZSBpcyB0cnVlLlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBhY2Nlc3MgaXMgcmVzdHJpY3RlZCB0byBWUEMgb25seSBldmVuIHdoZW4gcHVibGljLlxuICAgKiBGb3JtYXQ6IENJRFIgbm90YXRpb24gKGUuZy4sIFwiMjAzLjAuMTEzLjAvMzJcIiBmb3Igc2luZ2xlIElQKVxuICAgKi9cbiAgYWxsb3dlZElwQ2lkcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHbG9iYWxBdXJvcmFEYXRhYmFzZVByb3BzIGV4dGVuZHMgQmFzZURhdGFiYXNlUHJvcHMge1xuICB0eXBlOiBcIkdsb2JhbEF1cm9yYVwiO1xuICBwcmltYXJ5UmVnaW9uOiBzdHJpbmc7XG4gIHNlY29uZGFyeVJlZ2lvbnM/OiBzdHJpbmdbXTtcbiAgZ2xvYmFsQ2x1c3RlcklkZW50aWZpZXI/OiBzdHJpbmc7XG4gIGVuYWJsZUdsb2JhbFdyaXRlRm9yd2FyZGluZz86IGJvb2xlYW47XG4gIGRhdGFiYXNlRW5naW5lPzogRGF0YWJhc2VFbmdpbmU7XG4gIC8qKiBPdmVycmlkZXMgZGF0YWJhc2VFbmdpbmUgaWYgcHJvdmlkZWQgKi9cbiAgZW5naW5lPzogSUNsdXN0ZXJFbmdpbmU7XG4gIHdyaXRlcj86IEF1cm9yYVdyaXRlckNvbmZpZztcbiAgcmVhZGVycz86IEF1cm9yYVJlYWRlcnNDb25maWcgfCBmYWxzZTtcbiAgcHJveHk/OiBQcm94eUNvbmZpZyB8IGZhbHNlO1xuICBjcmVkZW50aWFscz86IENyZWRlbnRpYWxzQ29uZmlnO1xuICAvKiogREVTVFJVQ1RJVkU6IENoYW5naW5nIHN0b3JhZ2VLZXkgY2F1c2VzIGNsdXN0ZXIgcmVwbGFjZW1lbnQgKi9cbiAgZW5jcnlwdGlvbj86IEF1cm9yYUVuY3J5cHRpb25Db25maWc7XG4gIGJhY2t1cFJldGVudGlvbj86IG51bWJlcjtcbiAgbW9uaXRvcmluZ0ludGVydmFsPzogRHVyYXRpb247XG4gIHByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93Pzogc3RyaW5nO1xuICBwb3J0PzogbnVtYmVyO1xuICBwZXJmb3JtYW5jZUluc2lnaHRzPzogUGVyZm9ybWFuY2VJbnNpZ2h0c0NvbmZpZyB8IGZhbHNlO1xuICAvKiogQVJOIG9yIGlkZW50aWZpZXIgb2YgREIgY2x1c3RlciBzbmFwc2hvdCB0byByZXN0b3JlIGZyb20gKi9cbiAgc25hcHNob3RJZGVudGlmaWVyPzogc3RyaW5nO1xuICAvKiogVXNlcm5hbWUgZnJvbSB0aGUgc25hcHNob3QgKHJlcXVpcmVkIHdoZW4gcmVzdG9yaW5nIGZyb20gc25hcHNob3QgdG8gcmVzZXQgcGFzc3dvcmQpICovXG4gIHNuYXBzaG90VXNlcm5hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFuY2VEYXRhYmFzZVByb3BzIGV4dGVuZHMgQmFzZURhdGFiYXNlUHJvcHMge1xuICB0eXBlOiBcIkluc3RhbmNlXCI7XG4gIGRhdGFiYXNlRW5naW5lPzogRGF0YWJhc2VFbmdpbmU7XG4gIC8qKiBPdmVycmlkZXMgZGF0YWJhc2VFbmdpbmUgaWYgcHJvdmlkZWQgKi9cbiAgZW5naW5lPzogSUluc3RhbmNlRW5naW5lO1xuICBhbGxvY2F0ZWRTdG9yYWdlPzogbnVtYmVyO1xuICBwb3J0PzogbnVtYmVyO1xuICBtdWx0aUF6PzogYm9vbGVhbjtcbiAgYmFja3VwUmV0ZW50aW9uPzogbnVtYmVyO1xuICBwZXJmb3JtYW5jZUluc2lnaHRzPzogUGVyZm9ybWFuY2VJbnNpZ2h0c0NvbmZpZyB8IGZhbHNlO1xuICBwcm94eT86IFByb3h5Q29uZmlnIHwgZmFsc2U7XG4gIHJlYWRSZXBsaWNhPzogUmVhZFJlcGxpY2FDb25maWcgfCBmYWxzZTtcbiAgY3JlZGVudGlhbHM/OiBDcmVkZW50aWFsc0NvbmZpZztcbiAgZW5jcnlwdGlvbj86IEVuY3J5cHRpb25Db25maWc7XG4gIHB1YmxpY2x5QWNjZXNzaWJsZT86IGJvb2xlYW47XG4gIC8qKiBBUk4gb3IgaWRlbnRpZmllciBvZiBEQiBpbnN0YW5jZSBzbmFwc2hvdCB0byByZXN0b3JlIGZyb20gKi9cbiAgc25hcHNob3RJZGVudGlmaWVyPzogc3RyaW5nO1xuICAvKiogVXNlcm5hbWUgZnJvbSB0aGUgc25hcHNob3QgKHJlcXVpcmVkIHdoZW4gcmVzdG9yaW5nIGZyb20gc25hcHNob3QgdG8gcmVzZXQgcGFzc3dvcmQpICovXG4gIHNuYXBzaG90VXNlcm5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRHluYW1vREIgdGFibGUgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIER5bmFtb0RCRGF0YWJhc2VQcm9wcyB7XG4gIHR5cGU6IFwiRHluYW1vREJcIjtcbiAgcGFydGl0aW9uS2V5OiBEeW5hbW9EQktleVNjaGVtYTtcbiAgc29ydEtleT86IER5bmFtb0RCS2V5U2NoZW1hO1xuICBiaWxsaW5nTW9kZT86IFwiUEFZX1BFUl9SRVFVRVNUXCIgfCBcIlBST1ZJU0lPTkVEXCI7XG4gIHJlYWRDYXBhY2l0eT86IG51bWJlcjtcbiAgd3JpdGVDYXBhY2l0eT86IG51bWJlcjtcbiAgZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlcz86IER5bmFtb0RCR2xvYmFsU2Vjb25kYXJ5SW5kZXhbXTtcbiAgdGltZVRvTGl2ZUF0dHJpYnV0ZT86IHN0cmluZztcbiAgc3RyZWFtPzogXCJORVdfSU1BR0VcIiB8IFwiT0xEX0lNQUdFXCIgfCBcIk5FV19BTkRfT0xEX0lNQUdFU1wiIHwgXCJLRVlTX09OTFlcIjtcbiAgcG9pbnRJblRpbWVSZWNvdmVyeT86IGJvb2xlYW47XG4gIGVuY3J5cHRpb24/OiBcIkFXU19PV05FRFwiIHwgXCJBV1NfTUFOQUdFRFwiIHwgXCJDVVNUT01FUl9NQU5BR0VEXCI7XG4gIHJlbW92YWxQb2xpY3k/OiBcIkRFU1RST1lcIiB8IFwiUkVUQUlOXCIgfCBcIlNOQVBTSE9UXCI7XG59XG5cbi8qKlxuICogUmVsYXRpb25hbCBkYXRhYmFzZSBwcm9wcyB1bmlvbiAoQXVyb3JhLCBJbnN0YW5jZSwgR2xvYmFsQXVyb3JhKS5cbiAqL1xuZXhwb3J0IHR5cGUgSVJlbGF0aW9uYWxEYXRhYmFzZVByb3BzID1cbiAgfCBBdXJvcmFEYXRhYmFzZVByb3BzXG4gIHwgSW5zdGFuY2VEYXRhYmFzZVByb3BzXG4gIHwgR2xvYmFsQXVyb3JhRGF0YWJhc2VQcm9wcztcblxuLyoqXG4gKiBBbGwgZGF0YWJhc2UgcHJvcHMgdW5pb24uXG4gKi9cbmV4cG9ydCB0eXBlIElEYXRhYmFzZVByb3BzID1cbiAgfCBBdXJvcmFEYXRhYmFzZVByb3BzXG4gIHwgSW5zdGFuY2VEYXRhYmFzZVByb3BzXG4gIHwgR2xvYmFsQXVyb3JhRGF0YWJhc2VQcm9wc1xuICB8IER5bmFtb0RCRGF0YWJhc2VQcm9wcztcblxuLyoqXG4gKiBWYWxpZGF0ZXMgRHluYW1vREIgcHJvcHMgYW5kIGxvZ3Mgd2FybmluZ3MgZm9yIG1pc2NvbmZpZ3VyZWQgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVEeW5hbW9EQlByb3BzKHByb3BzOiBEeW5hbW9EQkRhdGFiYXNlUHJvcHMpOiB2b2lkIHtcbiAgLy8gVmFsaWRhdGUgcHJvdmlzaW9uZWQgY2FwYWNpdHlcbiAgaWYgKHByb3BzLmJpbGxpbmdNb2RlID09PSBcIlBST1ZJU0lPTkVEXCIpIHtcbiAgICBpZiAoIXByb3BzLnJlYWRDYXBhY2l0eSB8fCAhcHJvcHMud3JpdGVDYXBhY2l0eSkge1xuICAgICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgICAgXCInYmlsbGluZ01vZGUnIGlzIFBST1ZJU0lPTkVEIGJ1dCBjYXBhY2l0eSBub3Qgc3BlY2lmaWVkLiBcIiArXG4gICAgICAgICAgXCJVc2luZyBkZWZhdWx0IHZhbHVlcy4gQ29uc2lkZXIgc3BlY2lmeWluZyAncmVhZENhcGFjaXR5JyBhbmQgJ3dyaXRlQ2FwYWNpdHknLlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdhcm4gYWJvdXQgY2FwYWNpdHkgd2l0aCBvbi1kZW1hbmQgYmlsbGluZ1xuICBpZiAocHJvcHMuYmlsbGluZ01vZGUgIT09IFwiUFJPVklTSU9ORURcIikge1xuICAgIGlmIChwcm9wcy5yZWFkQ2FwYWNpdHkgfHwgcHJvcHMud3JpdGVDYXBhY2l0eSkge1xuICAgICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgICAgXCIncmVhZENhcGFjaXR5JyBvciAnd3JpdGVDYXBhY2l0eScgc3BlY2lmaWVkIGJ1dCAnYmlsbGluZ01vZGUnIFwiICtcbiAgICAgICAgICBcImlzIG5vdCBQUk9WSVNJT05FRC4gQ2FwYWNpdHkgc2V0dGluZ3Mgd2lsbCBiZSBpZ25vcmVkLlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIEdTSSBwYXJ0aXRpb24ga2V5cyBhcmUgZGlmZmVyZW50IGZyb20gdGFibGUgcGFydGl0aW9uIGtleVxuICBpZiAocHJvcHMuZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlcykge1xuICAgIGNvbnN0IHRhYmxlUGFydGl0aW9uS2V5ID0gcHJvcHMucGFydGl0aW9uS2V5Lm5hbWU7XG4gICAgZm9yIChjb25zdCBnc2kgb2YgcHJvcHMuZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlcykge1xuICAgICAgaWYgKFxuICAgICAgICBnc2kucGFydGl0aW9uS2V5Lm5hbWUgPT09IHRhYmxlUGFydGl0aW9uS2V5ICYmXG4gICAgICAgIGdzaS5zb3J0S2V5Py5uYW1lID09PSBwcm9wcy5zb3J0S2V5Py5uYW1lXG4gICAgICApIHtcbiAgICAgICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgICAgICBgR1NJICcke2dzaS5pbmRleE5hbWV9JyBoYXMgdGhlIHNhbWUga2V5IHNjaGVtYSBhcyB0aGUgdGFibGUuIGAgK1xuICAgICAgICAgICAgXCJUaGlzIG1heSBub3QgcHJvdmlkZSB0aGUgcXVlcnkgZmxleGliaWxpdHkgeW91IG5lZWQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgcmVsYXRpb25hbCBkYXRhYmFzZSBwcm9wcyBhbmQgbG9ncyB3YXJuaW5ncyBmb3IgaWdub3JlZCBvciBtaXNjb25maWd1cmVkIG9wdGlvbnMuXG4gKiBUaGVzZSBjaGVja3MgaGVscCBjYXRjaCBpc3N1ZXMgd2hlbiBwcm9wcyBjb21lIGZyb20gZHluYW1pYyBzb3VyY2VzIHdoZXJlXG4gKiBUeXBlU2NyaXB0J3MgY29tcGlsZS10aW1lIGNoZWNrcyBtYXkgbm90IGFwcGx5LlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlbGF0aW9uYWxEYXRhYmFzZVByb3BzKFxuICBwcm9wczogSVJlbGF0aW9uYWxEYXRhYmFzZVByb3BzXG4pOiB2b2lkIHtcbiAgLy8gR2xvYmFsQXVyb3JhIHJlcXVpcmVzIHByaW1hcnlSZWdpb25cbiAgaWYgKHByb3BzLnR5cGUgPT09IFwiR2xvYmFsQXVyb3JhXCIgJiYgIXByb3BzLnByaW1hcnlSZWdpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIkdsb2JhbEF1cm9yYSBkYXRhYmFzZSByZXF1aXJlcyAncHJpbWFyeVJlZ2lvbicuIFwiICtcbiAgICAgICAgXCJTcGVjaWZ5IHRoZSBBV1MgcmVnaW9uIHdoZXJlIHRoZSBwcmltYXJ5IGNsdXN0ZXIgd2lsbCBiZSBjcmVhdGVkLlwiXG4gICAgKTtcbiAgfVxuXG4gIC8vIEluc3RhbmNlLW9ubHkgb3B0aW9ucyBvbiBBdXJvcmEvR2xvYmFsQXVyb3JhXG4gIHdhcm5JZlByb3BlcnRpZXNJZ25vcmVkKFxuICAgIHByb3BzLFxuICAgIFtcInJlYWRSZXBsaWNhXCIsIFwibXVsdGlBelwiLCBcImFsbG9jYXRlZFN0b3JhZ2VcIl0sXG4gICAgXCJJbnN0YW5jZVwiLFxuICAgIFwiSW5zdGFuY2UgZGF0YWJhc2VcIlxuICApO1xuXG4gIC8vIEF1cm9yYS1vbmx5IG9wdGlvbnMgb24gSW5zdGFuY2VcbiAgd2FybklmUHJvcGVydGllc0lnbm9yZWQoXG4gICAgcHJvcHMsXG4gICAgW1wicmVhZGVyc1wiLCBcIndyaXRlclwiLCBcImJhY2t1cFJldGVudGlvblwiXSxcbiAgICBbXCJBdXJvcmFcIiwgXCJHbG9iYWxBdXJvcmFcIl0sXG4gICAgXCJBdXJvcmEgZGF0YWJhc2VcIlxuICApO1xuXG4gIC8vIEdsb2JhbEF1cm9yYS1vbmx5IG9wdGlvbnMgb24gbm9uLWdsb2JhbCBkYXRhYmFzZXNcbiAgd2FybklmUHJvcGVydGllc0lnbm9yZWQoXG4gICAgcHJvcHMsXG4gICAgW1wicHJpbWFyeVJlZ2lvblwiLCBcInNlY29uZGFyeVJlZ2lvbnNcIiwgXCJlbmFibGVHbG9iYWxXcml0ZUZvcndhcmRpbmdcIl0sXG4gICAgXCJHbG9iYWxBdXJvcmFcIixcbiAgICBcIkdsb2JhbEF1cm9yYSBkYXRhYmFzZVwiXG4gICk7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGRhdGFiYXNlIHByb3BzIGFuZCBsb2dzIHdhcm5pbmdzIGZvciBpZ25vcmVkIG9yIG1pc2NvbmZpZ3VyZWQgb3B0aW9ucy5cbiAqIERpc3BhdGNoZXMgdG8gdHlwZS1zcGVjaWZpYyB2YWxpZGF0b3JzIGJhc2VkIG9uIHRoZSBkYXRhYmFzZSB0eXBlLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZURhdGFiYXNlUHJvcHMocHJvcHM6IElEYXRhYmFzZVByb3BzKTogdm9pZCB7XG4gIGlmIChwcm9wcy50eXBlID09PSBcIkR5bmFtb0RCXCIpIHtcbiAgICB2YWxpZGF0ZUR5bmFtb0RCUHJvcHMocHJvcHMpO1xuICB9IGVsc2Uge1xuICAgIHZhbGlkYXRlUmVsYXRpb25hbERhdGFiYXNlUHJvcHMocHJvcHMpO1xuICB9XG59XG5cbi8qKlxuICogRmFjdG9yeSBmb3IgY3JlYXRpbmcgdHlwZS1zYWZlIGRhdGFiYXNlIHJlc291cmNlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQXVyb3JhIGRhdGFiYXNlIC0gcmV0dXJucyBSZWxhdGlvbmFsRGF0YWJhc2VcbiAqIGNvbnN0IGF1cm9yYSA9IGFwcC5hZGREYXRhYmFzZShEYXRhYmFzZUZhY3RvcnkuYnVpbGQoXCJNYWluXCIsIHtcbiAqICAgdHlwZTogXCJBdXJvcmFcIixcbiAqICAgZGF0YWJhc2VOYW1lOiBcIm15X2FwcFwiXG4gKiB9KSk7XG4gKiBhdXJvcmEuZ2V0SG9zdEVuZHBvaW50KCk7IC8vIEF2YWlsYWJsZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBEeW5hbW9EQiB0YWJsZSAtIHJldHVybnMgRHluYW1vREJEYXRhYmFzZVxuICogY29uc3QgY2FjaGUgPSBhcHAuYWRkRGF0YWJhc2UoRGF0YWJhc2VGYWN0b3J5LmJ1aWxkKFwiQ2FjaGVcIiwge1xuICogICB0eXBlOiBcIkR5bmFtb0RCXCIsXG4gKiAgIHBhcnRpdGlvbktleTogeyBuYW1lOiBcImlkXCIsIHR5cGU6IFwiU1wiIH1cbiAqIH0pKTtcbiAqIGNhY2hlLmdldFRhYmxlTmFtZSgpOyAvLyBBdmFpbGFibGVcbiAqIGNhY2hlLmdyYW50UmVhZFdyaXRlRGF0YShsYW1iZGEpOyAvLyBBdmFpbGFibGVcbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFiYXNlRmFjdG9yeSB7XG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBBdXJvcmFEYXRhYmFzZVByb3BzXG4gICk6IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gUmVsYXRpb25hbERhdGFiYXNlO1xuICBzdGF0aWMgYnVpbGQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogSW5zdGFuY2VEYXRhYmFzZVByb3BzXG4gICk6IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gUmVsYXRpb25hbERhdGFiYXNlO1xuICBzdGF0aWMgYnVpbGQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogR2xvYmFsQXVyb3JhRGF0YWJhc2VQcm9wc1xuICApOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IFJlbGF0aW9uYWxEYXRhYmFzZTtcbiAgc3RhdGljIGJ1aWxkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IER5bmFtb0RCRGF0YWJhc2VQcm9wc1xuICApOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IER5bmFtb0RCRGF0YWJhc2U7XG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBJRGF0YWJhc2VQcm9wc1xuICApOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IEFueURhdGFiYXNlIHtcbiAgICByZXR1cm4gKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KTogQW55RGF0YWJhc2UgPT4ge1xuICAgICAgdmFsaWRhdGVEYXRhYmFzZVByb3BzKHByb3BzKTtcblxuICAgICAgaWYgKHByb3BzLnR5cGUgPT09IFwiRHluYW1vREJcIikge1xuICAgICAgICByZXR1cm4gbmV3IER5bmFtb0RCRGF0YWJhc2Uoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFiYXNlUHJvcHM6IElSZWxhdGlvbmFsRGF0YWJhc2VQcm9wcyA9IHtcbiAgICAgICAgLi4ueyB2cGM6IGFwcC5nZXRWcGMoKSB9LFxuICAgICAgICAuLi5wcm9wc1xuICAgICAgfTtcbiAgICAgIHJldHVybiBuZXcgUmVsYXRpb25hbERhdGFiYXNlKHNjb3BlLCBpZCwgZGF0YWJhc2VQcm9wcyk7XG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIER5bmFtb0RCIGRhdGFiYXNlIHdyYXBwZXIgaW1wbGVtZW50aW5nIElEeW5hbW9EQkRhdGFiYXNlIGludGVyZmFjZS5cbiAqIFByb3ZpZGVzIHR5cGUtc2FmZSBhY2Nlc3MgdG8gRHluYW1vREIgdGFibGUgb3BlcmF0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgY2FjaGUgPSBhcHAuYWRkRGF0YWJhc2UoRGF0YWJhc2VGYWN0b3J5LmJ1aWxkKFwiQ2FjaGVcIiwge1xuICogICB0eXBlOiBcIkR5bmFtb0RCXCIsXG4gKiAgIHBhcnRpdGlvbktleTogeyBuYW1lOiBcImlkXCIsIHR5cGU6IFwiU1wiIH1cbiAqIH0pKTtcbiAqIGNhY2hlLmdyYW50UmVhZFdyaXRlRGF0YShsYW1iZGEpO1xuICovXG5leHBvcnQgY2xhc3MgRHluYW1vREJEYXRhYmFzZVxuICBleHRlbmRzIENvbnN0cnVjdFxuICBpbXBsZW1lbnRzIElEeW5hbW9EQkRhdGFiYXNlLCBJRHluYW1vREJDb25uZWN0b3JcbntcbiAgcHVibGljIHJlYWRvbmx5IGRhdGFiYXNlVHlwZSA9IFwiRHluYW1vREJcIiBhcyBjb25zdDtcbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3RvclR5cGUgPSBcImR5bmFtb2RiXCIgYXMgY29uc3Q7XG4gIHB1YmxpYyByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdGFibGU6IER5bmFtb0RCVGFibGU7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IER5bmFtb0RCRGF0YWJhc2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5pZCA9IGlkO1xuXG4gICAgY29uc3QgdGFibGVQcm9wczogRHluYW1vREJUYWJsZVByb3BzID0ge1xuICAgICAgcGFydGl0aW9uS2V5OiBwcm9wcy5wYXJ0aXRpb25LZXksXG4gICAgICBzb3J0S2V5OiBwcm9wcy5zb3J0S2V5LFxuICAgICAgYmlsbGluZ01vZGU6IHByb3BzLmJpbGxpbmdNb2RlLFxuICAgICAgcmVhZENhcGFjaXR5OiBwcm9wcy5yZWFkQ2FwYWNpdHksXG4gICAgICB3cml0ZUNhcGFjaXR5OiBwcm9wcy53cml0ZUNhcGFjaXR5LFxuICAgICAgZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlczogcHJvcHMuZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlcyxcbiAgICAgIHRpbWVUb0xpdmVBdHRyaWJ1dGU6IHByb3BzLnRpbWVUb0xpdmVBdHRyaWJ1dGUsXG4gICAgICBzdHJlYW06IHByb3BzLnN0cmVhbSxcbiAgICAgIHBvaW50SW5UaW1lUmVjb3Zlcnk6IHByb3BzLnBvaW50SW5UaW1lUmVjb3ZlcnksXG4gICAgICBlbmNyeXB0aW9uOiBwcm9wcy5lbmNyeXB0aW9uLFxuICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeVxuICAgIH07XG4gICAgdGhpcy50YWJsZSA9IG5ldyBEeW5hbW9EQlRhYmxlKHRoaXMsIGlkLCB0YWJsZVByb3BzKTtcbiAgfVxuXG4gIGdldFRhYmxlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLmdldFRhYmxlTmFtZSgpO1xuICB9XG5cbiAgZ2V0VGFibGVBcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5nZXRUYWJsZUFybigpO1xuICB9XG5cbiAgZ2V0VGFibGUoKTogSVRhYmxlIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5nZXRUYWJsZSgpO1xuICB9XG5cbiAgZ2V0U3RyZWFtQXJuKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUuZ2V0VGFibGVTdHJlYW1Bcm4oKTtcbiAgfVxuXG4gIGdyYW50UmVhZERhdGEoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50IHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5ncmFudFJlYWQoZ3JhbnRlZSk7XG4gIH1cblxuICBncmFudFdyaXRlRGF0YShncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLmdyYW50V3JpdGUoZ3JhbnRlZSk7XG4gIH1cblxuICBncmFudFJlYWRXcml0ZURhdGEoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50IHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5ncmFudFJlYWRXcml0ZShncmFudGVlKTtcbiAgfVxuXG4gIGdyYW50RnVsbEFjY2VzcyhncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLmdyYW50RnVsbEFjY2VzcyhncmFudGVlKTtcbiAgfVxuXG4gIGdyYW50U3RyZWFtUmVhZChncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLmdyYW50U3RyZWFtUmVhZChncmFudGVlKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbGF0aW9uYWwgZGF0YWJhc2Ugd3JhcHBlciBpbXBsZW1lbnRpbmcgSVJlbGF0aW9uYWxEYXRhYmFzZSBpbnRlcmZhY2UuXG4gKiBTdXBwb3J0cyBBdXJvcmEsIFJEUyBJbnN0YW5jZSwgYW5kIEdsb2JhbEF1cm9yYSBkYXRhYmFzZSB0eXBlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgZGIgPSBhcHAuYWRkRGF0YWJhc2UoRGF0YWJhc2VGYWN0b3J5LmJ1aWxkKFwiTWFpblwiLCB7XG4gKiAgIHR5cGU6IFwiQXVyb3JhXCIsXG4gKiAgIGRhdGFiYXNlTmFtZTogXCJteV9hcHBcIlxuICogfSkpO1xuICogZGIuZ3JhbnRDb25uZWN0KGxhbWJkYSk7XG4gKi9cbmV4cG9ydCBjbGFzcyBSZWxhdGlvbmFsRGF0YWJhc2VcbiAgZXh0ZW5kcyBDb25zdHJ1Y3RcbiAgaW1wbGVtZW50cyBJUmVsYXRpb25hbERhdGFiYXNlLCBJU2VjdXJpdHlHcm91cENvbm5lY3Rvclxue1xuICBwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHNjb3BlOiBDb25zdHJ1Y3Q7XG4gIHB1YmxpYyByZWFkb25seSB2cGM6IElWcGM7XG4gIHB1YmxpYyByZWFkb25seSBkYXRhYmFzZVR5cGU6IFJlbGF0aW9uYWxEYXRhYmFzZVR5cGU7XG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0b3JUeXBlID0gXCJyZWxhdGlvbmFsXCIgYXMgY29uc3Q7XG5cbiAgcHVibGljIGNvbm5lY3Rpb25zITogQ29ubmVjdGlvbnM7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZGF0YWJhc2VOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgZGF0YWJhc2UhOiBSZHNBdXJvcmEgfCBSZHNJbnN0YW5jZSB8IFJkc0F1cm9yYUdsb2JhbDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSVJlbGF0aW9uYWxEYXRhYmFzZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy5zY29wZSA9IHNjb3BlO1xuICAgIHRoaXMuZGF0YWJhc2VUeXBlID0gcHJvcHMudHlwZTtcbiAgICAvLyBWUEMgaXMgdmFsaWRhdGVkIGluIGFkZFh4eCBtZXRob2RzLCBzbyBhc3NlcnRpb24gaXMgc2FmZSBoZXJlXG4gICAgdGhpcy52cGMgPSBwcm9wcy52cGMhO1xuXG4gICAgdGhpcy5fZGF0YWJhc2VOYW1lID0gcHJvcHMuZGF0YWJhc2VOYW1lO1xuICAgIHRoaXMuYWRkRGF0YWJhc2UocHJvcHMpO1xuICB9XG5cbiAgYWRkRGF0YWJhc2UocHJvcHM6IElSZWxhdGlvbmFsRGF0YWJhc2VQcm9wcykge1xuICAgIHN3aXRjaCAocHJvcHMudHlwZSkge1xuICAgICAgY2FzZSBcIkF1cm9yYVwiOlxuICAgICAgICB0aGlzLmFkZEF1cm9yYShwcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkdsb2JhbEF1cm9yYVwiOlxuICAgICAgICB0aGlzLmFkZEF1cm9yYUdsb2JhbChwcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkluc3RhbmNlXCI6XG4gICAgICAgIHRoaXMuYWRkUmRzSW5zdGFuY2UocHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgY29uc3QgX2V4aGF1c3RpdmU6IG5ldmVyID0gcHJvcHM7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVW5zdXBwb3J0ZWQgZGF0YWJhc2UgdHlwZTogJHtTdHJpbmcoKF9leGhhdXN0aXZlIGFzIElSZWxhdGlvbmFsRGF0YWJhc2VQcm9wcykudHlwZSl9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkQXVyb3JhKHByb3BzOiBBdXJvcmFEYXRhYmFzZVByb3BzKSB7XG4gICAgaWYgKCFwcm9wcy52cGMpIHRocm93IG5ldyBFcnJvcihcIlZQQyBpcyByZXF1aXJlZCBmb3IgQXVyb3JhIGRhdGFiYXNlXCIpO1xuXG4gICAgY29uc3QgcmVzb2x2ZWREYXRhYmFzZUVuZ2luZSA9IHByb3BzLmRhdGFiYXNlRW5naW5lID8/IFwicG9zdGdyZXNxbFwiO1xuICAgIGNvbnN0IHJlc29sdmVkRW5naW5lID1cbiAgICAgIHByb3BzLmVuZ2luZSA/PyBnZXRBdXJvcmFDbHVzdGVyRW5naW5lKHJlc29sdmVkRGF0YWJhc2VFbmdpbmUpO1xuICAgIGNvbnN0IGVuZ2luZUNvbmZpZyA9IGdldEVuZ2luZUNvbmZpZyhyZXNvbHZlZERhdGFiYXNlRW5naW5lKTtcblxuICAgIGlmIChwcm9wcy5wdWJsaWNseUFjY2Vzc2libGUpIHtcbiAgICAgIEZqYWxsTG9nZ2VyLndhcm4oXG4gICAgICAgIGBBdXJvcmEgZGF0YWJhc2UgJyR7cHJvcHMuZGF0YWJhc2VOYW1lfScgaXMgY29uZmlndXJlZCB3aXRoIHB1YmxpYyBhY2Nlc3NpYmlsaXR5LiBgICtcbiAgICAgICAgICBcIlRoaXMgaXMgYSBzZWN1cml0eSByaXNrIGFuZCBzaG91bGQgb25seSBiZSB1c2VkIGZvciBkZXZlbG9wbWVudC5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGFiYXNlID0gbmV3IFJkc0F1cm9yYSh0aGlzLCBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9UmRzYCwge1xuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICBkYXRhYmFzZU5hbWU6IHByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgIGVuZ2luZTogcmVzb2x2ZWRFbmdpbmUsXG4gICAgICBlbmdpbmVDb25maWcsXG4gICAgICB3cml0ZXI6IHByb3BzLndyaXRlcixcbiAgICAgIHJlYWRlcnM6IHByb3BzLnJlYWRlcnMsXG4gICAgICBwcm94eTogcHJvcHMucHJveHksXG4gICAgICBjcmVkZW50aWFsczogcHJvcHMuY3JlZGVudGlhbHMsXG4gICAgICBlbmNyeXB0aW9uOiBwcm9wcy5lbmNyeXB0aW9uLFxuICAgICAgYmFja3VwUmV0ZW50aW9uOiBwcm9wcy5iYWNrdXBSZXRlbnRpb24sXG4gICAgICBtb25pdG9yaW5nSW50ZXJ2YWw6IHByb3BzLm1vbml0b3JpbmdJbnRlcnZhbCxcbiAgICAgIHByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93OiBwcm9wcy5wcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdyxcbiAgICAgIHBvcnQ6IHByb3BzLnBvcnQsXG4gICAgICBwZXJmb3JtYW5jZUluc2lnaHRzOiBwcm9wcy5wZXJmb3JtYW5jZUluc2lnaHRzLFxuICAgICAgZGVsZXRpb25Qcm90ZWN0aW9uOiBwcm9wcy5kZWxldGlvblByb3RlY3Rpb24sXG4gICAgICBzbmFwc2hvdElkZW50aWZpZXI6IHByb3BzLnNuYXBzaG90SWRlbnRpZmllcixcbiAgICAgIHNuYXBzaG90VXNlcm5hbWU6IHByb3BzLnNuYXBzaG90VXNlcm5hbWUsXG4gICAgICBhbGxvd1ZwY0FjY2VzczogcHJvcHMuYWxsb3dWcGNBY2Nlc3MsXG4gICAgICBwdWJsaWNseUFjY2Vzc2libGU6IHByb3BzLnB1YmxpY2x5QWNjZXNzaWJsZSxcbiAgICAgIGFsbG93ZWRJcENpZHI6IHByb3BzLmFsbG93ZWRJcENpZHJcbiAgICB9KTtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5kYXRhYmFzZS5jb25uZWN0aW9ucztcbiAgICB0aGlzLmFkZERhdGFiYXNlT3V0cHV0cyhwcm9wcyk7XG4gIH1cblxuICBwcml2YXRlIGFkZEF1cm9yYUdsb2JhbChwcm9wczogR2xvYmFsQXVyb3JhRGF0YWJhc2VQcm9wcykge1xuICAgIGlmICghcHJvcHMudnBjKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVlBDIGlzIHJlcXVpcmVkIGZvciBHbG9iYWwgQXVyb3JhIGRhdGFiYXNlXCIpO1xuICAgIGlmICghcHJvcHMucHJpbWFyeVJlZ2lvbilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInByaW1hcnlSZWdpb24gaXMgcmVxdWlyZWQgZm9yIEdsb2JhbCBBdXJvcmEgZGF0YWJhc2VcIik7XG5cbiAgICBjb25zdCByZXNvbHZlZERhdGFiYXNlRW5naW5lID0gcHJvcHMuZGF0YWJhc2VFbmdpbmUgPz8gXCJwb3N0Z3Jlc3FsXCI7XG4gICAgY29uc3QgcmVzb2x2ZWRFbmdpbmUgPVxuICAgICAgcHJvcHMuZW5naW5lID8/IGdldEF1cm9yYUNsdXN0ZXJFbmdpbmUocmVzb2x2ZWREYXRhYmFzZUVuZ2luZSk7XG4gICAgY29uc3QgZW5naW5lQ29uZmlnID0gZ2V0RW5naW5lQ29uZmlnKHJlc29sdmVkRGF0YWJhc2VFbmdpbmUpO1xuXG4gICAgdGhpcy5kYXRhYmFzZSA9IG5ldyBSZHNBdXJvcmFHbG9iYWwoXG4gICAgICB0aGlzLFxuICAgICAgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfVJkc0dsb2JhbGAsXG4gICAgICB7XG4gICAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgICBkYXRhYmFzZU5hbWU6IHByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgICAgcHJpbWFyeVJlZ2lvbjogcHJvcHMucHJpbWFyeVJlZ2lvbixcbiAgICAgICAgc2Vjb25kYXJ5UmVnaW9uczogcHJvcHMuc2Vjb25kYXJ5UmVnaW9ucyxcbiAgICAgICAgZ2xvYmFsQ2x1c3RlcklkZW50aWZpZXI6IHByb3BzLmdsb2JhbENsdXN0ZXJJZGVudGlmaWVyLFxuICAgICAgICBlbmdpbmU6IHJlc29sdmVkRW5naW5lLFxuICAgICAgICBlbmdpbmVDb25maWcsXG4gICAgICAgIGVuYWJsZUdsb2JhbFdyaXRlRm9yd2FyZGluZzogcHJvcHMuZW5hYmxlR2xvYmFsV3JpdGVGb3J3YXJkaW5nLFxuICAgICAgICB3cml0ZXI6IHByb3BzLndyaXRlcixcbiAgICAgICAgcmVhZGVyczogcHJvcHMucmVhZGVycyxcbiAgICAgICAgcHJveHk6IHByb3BzLnByb3h5LFxuICAgICAgICBjcmVkZW50aWFsczogcHJvcHMuY3JlZGVudGlhbHMsXG4gICAgICAgIGVuY3J5cHRpb246IHByb3BzLmVuY3J5cHRpb24sXG4gICAgICAgIGJhY2t1cFJldGVudGlvbjogcHJvcHMuYmFja3VwUmV0ZW50aW9uLFxuICAgICAgICBtb25pdG9yaW5nSW50ZXJ2YWw6IHByb3BzLm1vbml0b3JpbmdJbnRlcnZhbCxcbiAgICAgICAgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c6IHByb3BzLnByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93LFxuICAgICAgICBwb3J0OiBwcm9wcy5wb3J0LFxuICAgICAgICBwZXJmb3JtYW5jZUluc2lnaHRzOiBwcm9wcy5wZXJmb3JtYW5jZUluc2lnaHRzLFxuICAgICAgICBkZWxldGlvblByb3RlY3Rpb246IHByb3BzLmRlbGV0aW9uUHJvdGVjdGlvbixcbiAgICAgICAgc25hcHNob3RJZGVudGlmaWVyOiBwcm9wcy5zbmFwc2hvdElkZW50aWZpZXIsXG4gICAgICAgIHNuYXBzaG90VXNlcm5hbWU6IHByb3BzLnNuYXBzaG90VXNlcm5hbWVcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLmRhdGFiYXNlLmNvbm5lY3Rpb25zO1xuICAgIHRoaXMuYWRkRGF0YWJhc2VPdXRwdXRzKHByb3BzKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUmRzSW5zdGFuY2UocHJvcHM6IEluc3RhbmNlRGF0YWJhc2VQcm9wcykge1xuICAgIGlmICghcHJvcHMudnBjKSB0aHJvdyBuZXcgRXJyb3IoXCJWUEMgaXMgcmVxdWlyZWQgZm9yIEluc3RhbmNlIGRhdGFiYXNlXCIpO1xuXG4gICAgY29uc3QgcmVzb2x2ZWREYXRhYmFzZUVuZ2luZSA9IHByb3BzLmRhdGFiYXNlRW5naW5lID8/IFwicG9zdGdyZXNxbFwiO1xuICAgIGNvbnN0IHJlc29sdmVkRW5naW5lID1cbiAgICAgIHByb3BzLmVuZ2luZSA/PyBnZXRJbnN0YW5jZUVuZ2luZShyZXNvbHZlZERhdGFiYXNlRW5naW5lKTtcbiAgICBjb25zdCBlbmdpbmVDb25maWcgPSBnZXRFbmdpbmVDb25maWcocmVzb2x2ZWREYXRhYmFzZUVuZ2luZSk7XG5cbiAgICB0aGlzLmRhdGFiYXNlID0gbmV3IFJkc0luc3RhbmNlKHRoaXMsIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1SZHNgLCB7XG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIGRhdGFiYXNlTmFtZTogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgaW5zdGFuY2VUeXBlOiBwcm9wcy5pbnN0YW5jZVR5cGUsXG4gICAgICBhbGxvY2F0ZWRTdG9yYWdlOiBwcm9wcy5hbGxvY2F0ZWRTdG9yYWdlLFxuICAgICAgcG9ydDogcHJvcHMucG9ydCxcbiAgICAgIGVuZ2luZTogcmVzb2x2ZWRFbmdpbmUsXG4gICAgICBlbmdpbmVDb25maWcsXG4gICAgICBtdWx0aUF6OiBwcm9wcy5tdWx0aUF6LFxuICAgICAgYmFja3VwUmV0ZW50aW9uOlxuICAgICAgICBwcm9wcy5iYWNrdXBSZXRlbnRpb24gIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gRHVyYXRpb24uZGF5cyhwcm9wcy5iYWNrdXBSZXRlbnRpb24pXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBwZXJmb3JtYW5jZUluc2lnaHRzOiBwcm9wcy5wZXJmb3JtYW5jZUluc2lnaHRzLFxuICAgICAgcHJveHk6IHByb3BzLnByb3h5LFxuICAgICAgcmVhZFJlcGxpY2E6IHByb3BzLnJlYWRSZXBsaWNhLFxuICAgICAgY3JlZGVudGlhbHM6IHByb3BzLmNyZWRlbnRpYWxzLFxuICAgICAgZW5jcnlwdGlvbjogcHJvcHMuZW5jcnlwdGlvbixcbiAgICAgIHB1YmxpY2x5QWNjZXNzaWJsZTogcHJvcHMucHVibGljbHlBY2Nlc3NpYmxlLFxuICAgICAgZGVsZXRpb25Qcm90ZWN0aW9uOiBwcm9wcy5kZWxldGlvblByb3RlY3Rpb24sXG4gICAgICBzbmFwc2hvdElkZW50aWZpZXI6IHByb3BzLnNuYXBzaG90SWRlbnRpZmllcixcbiAgICAgIHNuYXBzaG90VXNlcm5hbWU6IHByb3BzLnNuYXBzaG90VXNlcm5hbWVcbiAgICB9KTtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5kYXRhYmFzZS5jb25uZWN0aW9ucztcbiAgICB0aGlzLmFkZERhdGFiYXNlT3V0cHV0cyhwcm9wcyk7XG4gIH1cblxuICBwcml2YXRlIGFkZERhdGFiYXNlT3V0cHV0cyhwcm9wczogSVJlbGF0aW9uYWxEYXRhYmFzZVByb3BzKSB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmRhdGFiYXNlLmdldEhvc3RFbmRwb2ludCgpO1xuICAgIGNvbnN0IHN0YWNrTmFtZSA9IFN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZTtcbiAgICAvLyBTYW5pdGlzZSBmb3IgQ2ZuT3V0cHV0IG5hbWVzIOKAlCBDbG91ZEZvcm1hdGlvbiBleHBvcnQgbmFtZXMgb25seSBhbGxvdyBbYS16QS1aMC05Oi1dXG4gICAgY29uc3Qgb3V0cHV0TmFtZSA9IHRvUGFzY2FsQ2FzZShwcm9wcy5kYXRhYmFzZU5hbWUpO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtvdXRwdXROYW1lfUVuZHBvaW50YCwge1xuICAgICAga2V5OiBgJHtzdGFja05hbWV9JHtvdXRwdXROYW1lfUVuZHBvaW50YCxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3N0YWNrTmFtZX0ke291dHB1dE5hbWV9RW5kcG9pbnRgLFxuICAgICAgdmFsdWU6IGVuZHBvaW50LFxuICAgICAgZGVzY3JpcHRpb246IGBEYXRhYmFzZSBFbmRwb2ludCBmb3IgJHtwcm9wcy5kYXRhYmFzZU5hbWV9YFxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtvdXRwdXROYW1lfVBvcnRgLCB7XG4gICAgICBrZXk6IGAke3N0YWNrTmFtZX0ke291dHB1dE5hbWV9UG9ydGAsXG4gICAgICBleHBvcnROYW1lOiBgJHtzdGFja05hbWV9JHtvdXRwdXROYW1lfVBvcnRgLFxuICAgICAgdmFsdWU6IHRoaXMuZGF0YWJhc2UuZ2V0SG9zdFBvcnQoKSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgRGF0YWJhc2UgUG9ydCBmb3IgJHtwcm9wcy5kYXRhYmFzZU5hbWV9YFxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtvdXRwdXROYW1lfURhdGFiYXNlTmFtZWAsIHtcbiAgICAgIGtleTogYCR7c3RhY2tOYW1lfSR7b3V0cHV0TmFtZX1EYXRhYmFzZU5hbWVgLFxuICAgICAgZXhwb3J0TmFtZTogYCR7c3RhY2tOYW1lfSR7b3V0cHV0TmFtZX1EYXRhYmFzZU5hbWVgLFxuICAgICAgdmFsdWU6IHByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgRGF0YWJhc2UgTmFtZSBmb3IgJHtwcm9wcy5kYXRhYmFzZU5hbWV9YFxuICAgIH0pO1xuXG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSB0aGlzLmRhdGFiYXNlLmdldENyZWRlbnRpYWxzKCk7XG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtvdXRwdXROYW1lfVNlY3JldEFybmAsIHtcbiAgICAgIGtleTogYCR7c3RhY2tOYW1lfSR7b3V0cHV0TmFtZX1TZWNyZXRBcm5gLFxuICAgICAgZXhwb3J0TmFtZTogYCR7c3RhY2tOYW1lfSR7b3V0cHV0TmFtZX1TZWNyZXRBcm5gLFxuICAgICAgdmFsdWU6IGNyZWRlbnRpYWxzLnNlY3JldC5zZWNyZXRBcm4sXG4gICAgICBkZXNjcmlwdGlvbjogYERhdGFiYXNlIENyZWRlbnRpYWxzIFNlY3JldCBBUk4gZm9yICR7cHJvcHMuZGF0YWJhc2VOYW1lfWBcbiAgICB9KTtcbiAgfVxuXG4gIGdldENyZWRlbnRpYWxzKCk6IFNlY3JldCB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2UuZ2V0Q3JlZGVudGlhbHMoKTtcbiAgfVxuXG4gIGdldEhvc3RFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlLmdldEhvc3RFbmRwb2ludCgpO1xuICB9XG5cbiAgZ2V0SG9zdFBvcnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZS5nZXRIb3N0UG9ydCgpO1xuICB9XG5cbiAgZ2V0RGF0YWJhc2VOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFiYXNlTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBjb25uZWN0IHBlcm1pc3Npb25zIHRvIGEgZ3JhbnRlZSBieSBhZGRpbmcgaXQgdG8gdGhlIGRhdGFiYXNlIHNlY3VyaXR5IGdyb3VwLlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgY29ubmVjdGFibGUgcHJpbmNpcGFsIHRvIGdyYW50IGNvbm5lY3QgcGVybWlzc2lvbnMgdG9cbiAgICovXG4gIGdyYW50Q29ubmVjdChncmFudGVlOiBJQ29ubmVjdGFibGUpOiB2b2lkIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLmFsbG93RGVmYXVsdFBvcnRGcm9tKGdyYW50ZWUpO1xuICB9XG59XG5cbi8vIFJlLWV4cG9ydCBEeW5hbW9EQiB0eXBlcyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB0eXBlIHtcbiAgRHluYW1vREJLZXlTY2hlbWEsXG4gIER5bmFtb0RCR2xvYmFsU2Vjb25kYXJ5SW5kZXgsXG4gIER5bmFtb0RCVGFibGVQcm9wc1xufSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9kYXRhYmFzZS9keW5hbW9kYlwiO1xuXG4vLyBSZS1leHBvcnQgaW50ZXJmYWNlIHR5cGVzXG5leHBvcnQge1xuICB0eXBlIElSZWxhdGlvbmFsRGF0YWJhc2UsXG4gIHR5cGUgSUR5bmFtb0RCRGF0YWJhc2UsXG4gIHR5cGUgQW55RGF0YWJhc2UsXG4gIHR5cGUgRGF0YWJhc2VUeXBlLFxuICB0eXBlIFJlbGF0aW9uYWxEYXRhYmFzZVR5cGUsXG4gIGlzUmVsYXRpb25hbERhdGFiYXNlLFxuICBpc0R5bmFtb0RCRGF0YWJhc2UsXG4gIGlzQXVyb3JhRGF0YWJhc2UsXG4gIGlzSW5zdGFuY2VEYXRhYmFzZSxcbiAgaXNHbG9iYWxBdXJvcmFEYXRhYmFzZVxufSBmcm9tIFwiLi9pbnRlcmZhY2VzL2RhdGFiYXNlLmpzXCI7XG4iXX0=
@@ -1,5 +1,4 @@
1
1
  import { type Environment, Stack, type StackProps } from "aws-cdk-lib";
2
- import { type ICostAllocationTags } from "../../config/aws/costAllocationTags";
3
2
  import { OrganisationResource } from "../../resources/aws/organisation";
4
3
  type ExtendedStackProps = Omit<StackProps, "env"> & {
5
4
  env?: Required<Pick<Environment, "region" | "account">> & Partial<Omit<Environment, "region" | "account">>;
@@ -12,22 +11,16 @@ export interface OrganisationProps extends ExtendedStackProps {
12
11
  accounts: AccountsConfig;
13
12
  orgEmail: string;
14
13
  accountIds?: Record<string, string>;
15
- costAllocationTags?: ICostAllocationTags[];
16
14
  identityCenter?: boolean;
17
- backupSettings?: {
18
- enableCrossAccountBackup?: boolean;
19
- enableDelegatedAdministrator?: boolean;
20
- enableMpa?: boolean;
21
- };
22
15
  }
23
16
  /**
24
17
  * Organisation CDK stack.
25
18
  *
26
- * OU creation and account-to-OU placement are handled by CLI pre-deploy steps
27
- * (AwsAccountService). This stack focuses on:
19
+ * OU creation, account-to-OU placement, IPAM delegation, RAM sharing, trusted
20
+ * access, cost allocation tags, and backup settings are handled by CLI pre-deploy
21
+ * steps (AwsAccountService). This stack focuses on:
28
22
  * - Account CfnOutput references (for cross-stack consumption)
29
- * - IPAM delegation, RAM sharing, trusted access
30
- * - Cost allocation tags, Identity Center, backup settings
23
+ * - Identity Centre configuration
31
24
  */
32
25
  export declare class Organisation extends Stack {
33
26
  readonly organisationType: "organisation";
@@ -38,13 +31,7 @@ export declare class Organisation extends Stack {
38
31
  constructor(id: string, props: OrganisationProps);
39
32
  private createAccountReferences;
40
33
  private setupOrganisationFeatures;
41
- private getPlatformAccountId;
42
- private setupIpamDelegation;
43
- private enableRamSharing;
44
- private enableTrustedAccess;
45
- private enableCostAllocationTags;
46
34
  private setupIdentityCenter;
47
- private setupBackupGlobalSettings;
48
35
  getOrganisation(): OrganisationResource;
49
36
  getAccounts(): Record<string, string>;
50
37
  }