@fjall/util 0.87.20 → 0.88.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/Config.d.ts +37 -1
- package/dist/src/Config.js +97 -16
- package/package.json +2 -2
package/dist/src/Config.d.ts
CHANGED
|
@@ -17,15 +17,21 @@ export type ProviderAccount = {
|
|
|
17
17
|
environment: string;
|
|
18
18
|
managed?: boolean;
|
|
19
19
|
};
|
|
20
|
+
export type OidcConnection = {
|
|
21
|
+
roleArn: string;
|
|
22
|
+
externalId: string;
|
|
23
|
+
};
|
|
20
24
|
export type Profile = {
|
|
21
25
|
type: "iam" | "sso" | "oidc";
|
|
22
26
|
region: string;
|
|
23
27
|
ssoAccountId?: string;
|
|
24
28
|
ssoRoleName?: string;
|
|
25
29
|
ssoSession?: string;
|
|
26
|
-
credentialSource?: "keychain";
|
|
27
30
|
oidcRoleArn?: string;
|
|
28
31
|
oidcProviderArn?: string;
|
|
32
|
+
credentialSource?: string;
|
|
33
|
+
roleArn?: string;
|
|
34
|
+
roleSessionName?: string;
|
|
29
35
|
};
|
|
30
36
|
export type SSOSession = {
|
|
31
37
|
ssoRegion: string;
|
|
@@ -48,6 +54,14 @@ type RootConfig = {
|
|
|
48
54
|
ssoSessions?: {
|
|
49
55
|
[key: string]: SSOSession;
|
|
50
56
|
};
|
|
57
|
+
organisationId?: string;
|
|
58
|
+
organisationName?: string;
|
|
59
|
+
organisationEmail?: string;
|
|
60
|
+
oidcIssuerUrl?: string;
|
|
61
|
+
oidcConnections?: {
|
|
62
|
+
[accountId: string]: OidcConnection;
|
|
63
|
+
};
|
|
64
|
+
rootOidcRoleArn?: string;
|
|
51
65
|
};
|
|
52
66
|
type CostAllocationTags = {
|
|
53
67
|
TagKey: string;
|
|
@@ -56,6 +70,16 @@ type CostAllocationTags = {
|
|
|
56
70
|
/**
|
|
57
71
|
* Config class for loading and saving fjall-config.json file
|
|
58
72
|
*/
|
|
73
|
+
export type OrgLevelConfig = {
|
|
74
|
+
primaryRegion?: string;
|
|
75
|
+
secondaryRegions?: string[];
|
|
76
|
+
disasterRecoveryRegion?: string;
|
|
77
|
+
providerAccounts?: ProviderAccount[];
|
|
78
|
+
ssoSessions?: {
|
|
79
|
+
[key: string]: SSOSession;
|
|
80
|
+
};
|
|
81
|
+
rootOidcRoleArn?: string;
|
|
82
|
+
};
|
|
59
83
|
export declare class Config {
|
|
60
84
|
rootConfig: RootConfig;
|
|
61
85
|
existingAccountsConfig: Account[];
|
|
@@ -154,4 +178,16 @@ export declare class Config {
|
|
|
154
178
|
removeProfile(name: string): void;
|
|
155
179
|
getSSOSession(name: string): SSOSession | undefined;
|
|
156
180
|
addSSOSession(name: string, session: SSOSession): void;
|
|
181
|
+
getOrgLevelConfig(): OrgLevelConfig;
|
|
182
|
+
getOrganisationId(): string | undefined;
|
|
183
|
+
setOrganisationId(id: string): void;
|
|
184
|
+
getOrganisationName(): string | undefined;
|
|
185
|
+
setOrganisationName(name: string): void;
|
|
186
|
+
getOrganisationEmail(): string | undefined;
|
|
187
|
+
setOrganisationEmail(email: string): void;
|
|
188
|
+
getOidcIssuerUrl(): string | undefined;
|
|
189
|
+
setOidcIssuerUrl(url: string): void;
|
|
190
|
+
getOidcConnection(accountId: string): OidcConnection | undefined;
|
|
191
|
+
setOidcConnection(accountId: string, connection: OidcConnection): void;
|
|
192
|
+
setOrgLevelConfig(config: OrgLevelConfig): void;
|
|
157
193
|
}
|
package/dist/src/Config.js
CHANGED
|
@@ -41,9 +41,11 @@ const ProfileSchema = zod_1.z
|
|
|
41
41
|
ssoAccountId: zod_1.z.string().optional(),
|
|
42
42
|
ssoRoleName: zod_1.z.string().optional(),
|
|
43
43
|
ssoSession: zod_1.z.string().optional(),
|
|
44
|
-
credentialSource: zod_1.z.literal("keychain").optional(),
|
|
45
44
|
oidcRoleArn: zod_1.z.string().optional(),
|
|
46
|
-
oidcProviderArn: zod_1.z.string().optional()
|
|
45
|
+
oidcProviderArn: zod_1.z.string().optional(),
|
|
46
|
+
credentialSource: zod_1.z.string().optional(),
|
|
47
|
+
roleArn: zod_1.z.string().optional(),
|
|
48
|
+
roleSessionName: zod_1.z.string().optional()
|
|
47
49
|
})
|
|
48
50
|
.strict();
|
|
49
51
|
const SSOSessionSchema = zod_1.z
|
|
@@ -52,6 +54,12 @@ const SSOSessionSchema = zod_1.z
|
|
|
52
54
|
ssoStartUrl: zod_1.z.string()
|
|
53
55
|
})
|
|
54
56
|
.strict();
|
|
57
|
+
const OidcConnectionSchema = zod_1.z
|
|
58
|
+
.object({
|
|
59
|
+
roleArn: zod_1.z.string(),
|
|
60
|
+
externalId: zod_1.z.string()
|
|
61
|
+
})
|
|
62
|
+
.strict();
|
|
55
63
|
const RootConfigSchema = zod_1.z
|
|
56
64
|
.object({
|
|
57
65
|
version: zod_1.z.number().optional(),
|
|
@@ -63,7 +71,13 @@ const RootConfigSchema = zod_1.z
|
|
|
63
71
|
disasterRecoveryRegion: zod_1.z.string().optional(),
|
|
64
72
|
currentProfile: zod_1.z.string().optional(),
|
|
65
73
|
profiles: zod_1.z.record(zod_1.z.string(), ProfileSchema).optional(),
|
|
66
|
-
ssoSessions: zod_1.z.record(zod_1.z.string(), SSOSessionSchema).optional()
|
|
74
|
+
ssoSessions: zod_1.z.record(zod_1.z.string(), SSOSessionSchema).optional(),
|
|
75
|
+
organisationId: zod_1.z.string().optional(),
|
|
76
|
+
organisationName: zod_1.z.string().optional(),
|
|
77
|
+
organisationEmail: zod_1.z.string().optional(),
|
|
78
|
+
oidcIssuerUrl: zod_1.z.string().optional(),
|
|
79
|
+
oidcConnections: zod_1.z.record(zod_1.z.string(), OidcConnectionSchema).optional(),
|
|
80
|
+
rootOidcRoleArn: zod_1.z.string().optional()
|
|
67
81
|
})
|
|
68
82
|
.strict();
|
|
69
83
|
const CostAllocationTagsSchema = zod_1.z
|
|
@@ -83,14 +97,11 @@ const AccountSchema = zod_1.z
|
|
|
83
97
|
// z.coerce.date() handles both Date objects (from AWS SDK) and ISO 8601 strings (from JSON parsing)
|
|
84
98
|
JoinedTimestamp: zod_1.z.coerce.date().optional()
|
|
85
99
|
})
|
|
86
|
-
.
|
|
100
|
+
.passthrough();
|
|
87
101
|
/**
|
|
88
102
|
* The current base-version of any newly created config file
|
|
89
103
|
*/
|
|
90
104
|
const BASE_CONFIG_VERSION = 0.1;
|
|
91
|
-
/**
|
|
92
|
-
* Config class for loading and saving fjall-config.json file
|
|
93
|
-
*/
|
|
94
105
|
class Config {
|
|
95
106
|
constructor(rootConfig, existingAccountsConfig, costAllocationTagsConfig) {
|
|
96
107
|
this.rootConfig = rootConfig ?? {
|
|
@@ -194,11 +205,8 @@ class Config {
|
|
|
194
205
|
* Format a Zod error into a readable error message
|
|
195
206
|
*/
|
|
196
207
|
static formatZodError(err, fileName) {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
Array.isArray(zodError.issues) &&
|
|
200
|
-
zodError.issues.length > 0) {
|
|
201
|
-
const issueDetails = zodError.issues
|
|
208
|
+
if (err instanceof zod_1.z.ZodError && err.issues.length > 0) {
|
|
209
|
+
const issueDetails = err.issues
|
|
202
210
|
.map((issue) => `${issue.path.join(".")}: ${issue.message}`)
|
|
203
211
|
.join("; ");
|
|
204
212
|
return new Error(`Failed to parse ${fileName}: ${issueDetails}`);
|
|
@@ -216,11 +224,13 @@ class Config {
|
|
|
216
224
|
// Ensure directory exists
|
|
217
225
|
fs.mkdirSync(configDir, { recursive: true });
|
|
218
226
|
const rootJsonString = JSON.stringify(this.rootConfig, null, 2);
|
|
219
|
-
fs.writeFileSync(path.join(configDir, "fjall-config.json"), rootJsonString
|
|
227
|
+
fs.writeFileSync(path.join(configDir, "fjall-config.json"), rootJsonString, {
|
|
228
|
+
mode: 0o600
|
|
229
|
+
});
|
|
220
230
|
const existingAccountsJsonString = JSON.stringify(this.existingAccountsConfig, null, 2);
|
|
221
|
-
fs.writeFileSync(path.join(configDir, "accounts-config.json"), existingAccountsJsonString);
|
|
231
|
+
fs.writeFileSync(path.join(configDir, "accounts-config.json"), existingAccountsJsonString, { mode: 0o600 });
|
|
222
232
|
const costAllocationTagsJsonString = JSON.stringify(this.costAllocationTagsConfig, null, 2);
|
|
223
|
-
fs.writeFileSync(path.join(configDir, "cost-allocation-tags-config.json"), costAllocationTagsJsonString);
|
|
233
|
+
fs.writeFileSync(path.join(configDir, "cost-allocation-tags-config.json"), costAllocationTagsJsonString, { mode: 0o600 });
|
|
224
234
|
}
|
|
225
235
|
/**
|
|
226
236
|
* Add a new service to the config file
|
|
@@ -383,6 +393,77 @@ class Config {
|
|
|
383
393
|
}
|
|
384
394
|
this.rootConfig.ssoSessions[name] = session;
|
|
385
395
|
}
|
|
396
|
+
getOrgLevelConfig() {
|
|
397
|
+
// Derive rootOidcRoleArn from the root account's OIDC profile if available,
|
|
398
|
+
// falling back to the explicitly stored field (set during config pull)
|
|
399
|
+
const rootAccount = this.rootConfig.providerAccounts?.find((a) => a.environment === "root");
|
|
400
|
+
const rootProfileName = rootAccount?.name.toLowerCase();
|
|
401
|
+
const rootProfile = rootProfileName
|
|
402
|
+
? this.rootConfig.profiles?.[rootProfileName]
|
|
403
|
+
: undefined;
|
|
404
|
+
const derivedRoleArn = rootProfile?.type === "oidc" ? rootProfile.oidcRoleArn : undefined;
|
|
405
|
+
return {
|
|
406
|
+
primaryRegion: this.rootConfig.primaryRegion,
|
|
407
|
+
secondaryRegions: this.rootConfig.secondaryRegions,
|
|
408
|
+
disasterRecoveryRegion: this.rootConfig.disasterRecoveryRegion,
|
|
409
|
+
providerAccounts: this.rootConfig.providerAccounts,
|
|
410
|
+
ssoSessions: this.rootConfig.ssoSessions,
|
|
411
|
+
rootOidcRoleArn: derivedRoleArn ?? this.rootConfig.rootOidcRoleArn
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
getOrganisationId() {
|
|
415
|
+
return this.rootConfig.organisationId;
|
|
416
|
+
}
|
|
417
|
+
setOrganisationId(id) {
|
|
418
|
+
this.rootConfig.organisationId = id;
|
|
419
|
+
}
|
|
420
|
+
getOrganisationName() {
|
|
421
|
+
return this.rootConfig.organisationName;
|
|
422
|
+
}
|
|
423
|
+
setOrganisationName(name) {
|
|
424
|
+
this.rootConfig.organisationName = name;
|
|
425
|
+
}
|
|
426
|
+
getOrganisationEmail() {
|
|
427
|
+
return this.rootConfig.organisationEmail;
|
|
428
|
+
}
|
|
429
|
+
setOrganisationEmail(email) {
|
|
430
|
+
this.rootConfig.organisationEmail = email;
|
|
431
|
+
}
|
|
432
|
+
getOidcIssuerUrl() {
|
|
433
|
+
return this.rootConfig.oidcIssuerUrl;
|
|
434
|
+
}
|
|
435
|
+
setOidcIssuerUrl(url) {
|
|
436
|
+
this.rootConfig.oidcIssuerUrl = url;
|
|
437
|
+
}
|
|
438
|
+
getOidcConnection(accountId) {
|
|
439
|
+
return this.rootConfig.oidcConnections?.[accountId];
|
|
440
|
+
}
|
|
441
|
+
setOidcConnection(accountId, connection) {
|
|
442
|
+
if (!this.rootConfig.oidcConnections) {
|
|
443
|
+
this.rootConfig.oidcConnections = {};
|
|
444
|
+
}
|
|
445
|
+
this.rootConfig.oidcConnections[accountId] = connection;
|
|
446
|
+
}
|
|
447
|
+
setOrgLevelConfig(config) {
|
|
448
|
+
if (config.primaryRegion !== undefined) {
|
|
449
|
+
this.rootConfig.primaryRegion = config.primaryRegion;
|
|
450
|
+
}
|
|
451
|
+
if (config.secondaryRegions !== undefined) {
|
|
452
|
+
this.rootConfig.secondaryRegions = config.secondaryRegions;
|
|
453
|
+
}
|
|
454
|
+
if (config.disasterRecoveryRegion !== undefined) {
|
|
455
|
+
this.rootConfig.disasterRecoveryRegion = config.disasterRecoveryRegion;
|
|
456
|
+
}
|
|
457
|
+
if (config.providerAccounts !== undefined) {
|
|
458
|
+
this.rootConfig.providerAccounts = config.providerAccounts;
|
|
459
|
+
}
|
|
460
|
+
if (config.ssoSessions !== undefined) {
|
|
461
|
+
this.rootConfig.ssoSessions = config.ssoSessions;
|
|
462
|
+
}
|
|
463
|
+
if (config.rootOidcRoleArn !== undefined) {
|
|
464
|
+
this.rootConfig.rootOidcRoleArn = config.rootOidcRoleArn;
|
|
465
|
+
}
|
|
466
|
+
}
|
|
386
467
|
}
|
|
387
468
|
exports.Config = Config;
|
|
388
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLDZCQUF3QjtBQUl4Qjs7O0dBR0c7QUFDSCxNQUFNLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztBQTJEbkMsNkJBQTZCO0FBQzdCLE1BQU0sa0JBQWtCLEdBQUcsT0FBQztLQUN6QixNQUFNLENBQUM7SUFDTixjQUFjLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUMxQixhQUFhLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtDQUMxQixDQUFDO0tBQ0QsTUFBTSxFQUFFLENBQUM7QUFFWixNQUFNLG1CQUFtQixHQUFHLE9BQUM7S0FDMUIsTUFBTSxDQUFDO0lBQ04sRUFBRSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7SUFDZCxJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUMzQixPQUFPLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM5QixPQUFPLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDOUMsWUFBWSxFQUFFLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtJQUMzQyxnQkFBZ0IsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQ3hDLENBQUM7S0FDRCxNQUFNLEVBQUUsQ0FBQztBQUVaLE1BQU0scUJBQXFCLEdBQUcsT0FBQztLQUM1QixNQUFNLENBQUM7SUFDTixFQUFFLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNkLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2hCLFdBQVcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0lBQ3ZCLE9BQU8sRUFBRSxPQUFDLENB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QUFDLElBQUksQ0FBQyxDQUFDO1FBRXRDLDhDQUE4QztRQUM5QyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFZO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVc7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUNuRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxhQUFhLENBQUMsSUFBWSxFQUFFLE9BQW1CO1FBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO0lBQzlDLENBQUM7Q0FDRjtBQTNYRCx3QkEyWEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgdHlwZSB7IEFjY291bnQgfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LW9yZ2FuaXphdGlvbnNcIjtcbmV4cG9ydCB0eXBlIHsgQWNjb3VudCB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtb3JnYW5pemF0aW9uc1wiO1xuXG4vKipcbiAqIE1heGltdW0gZGVwdGggZm9yIHNlYXJjaGluZyB1cCB0aGUgZGlyZWN0b3J5IHRyZWUgZm9yIGNvbmZpZyBmaWxlcy5cbiAqIFByZXZlbnRzIGluZmluaXRlIGxvb3BzIHdoZW4gdHJhdmVyc2luZyBkaXJlY3Rvcmllcy5cbiAqL1xuY29uc3QgQ09ORklHX1NFQVJDSF9NQVhfREVQVEggPSAxMDtcblxuZXhwb3J0IHR5cGUgU2VydmljZUNvbmZpZyA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdHlwZT86IHN0cmluZztcbiAgdmVyc2lvbj86IG51bWJlcjtcbiAgb3B0aW9ucz86IG9iamVjdDtcbiAgZG9ja2VyQ29uZmlnPzoge1xuICAgIGRvY2tlcmZpbGVQYXRoOiBzdHJpbmc7XG4gICAgY29udGFpbmVyUG9ydDogbnVtYmVyO1xuICB9O1xuICBhcGlBcHBsaWNhdGlvbklkPzogc3RyaW5nOyAvLyBGamFsbCBBUEkgYXBwbGljYXRpb24gSURcbn07XG5cbmV4cG9ydCB0eXBlIFByb3ZpZGVyQWNjb3VudCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICBtYW5hZ2VkPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFByb2ZpbGUgPSB7XG4gIHR5cGU6IFwiaWFtXCIgfCBcInNzb1wiIHwgXCJvaWRjXCI7XG4gIHJlZ2lvbjogc3RyaW5nO1xuICAvLyBTU08gcHJvZmlsZXNcbiAgc3NvQWNjb3VudElkPzogc3RyaW5nO1xuICBzc29Sb2xlTmFtZT86IHN0cmluZztcbiAgc3NvU2Vzc2lvbj86IHN0cmluZztcbiAgLy8gSUFNIHByb2ZpbGVzXG4gIGNyZWRlbnRpYWxTb3VyY2U/OiBcImtleWNoYWluXCI7XG4gIC8vIE9JREMgcHJvZmlsZXMgKENJL0NEKVxuICBvaWRjUm9sZUFybj86IHN0cmluZztcbiAgb2lkY1Byb3ZpZGVyQXJuPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU1NPU2Vzc2lvbiA9IHtcbiAgc3NvUmVnaW9uOiBzdHJpbmc7XG4gIHNzb1N0YXJ0VXJsOiBzdHJpbmc7XG59O1xuXG50eXBlIFJvb3RDb25maWcgPSB7XG4gIHZlcnNpb24/OiBudW1iZXI7XG4gIGRldmVsb3BtZW50PzogYm9vbGVhbjtcbiAgc2VydmljZXM/OiB7IFtrZXk6IHN0cmluZ106IFNlcnZpY2VDb25maWcgfTtcbiAgcHJvdmlkZXJBY2NvdW50cz86IFByb3ZpZGVyQWNjb3VudFtdO1xuICBwcmltYXJ5UmVnaW9uPzogc3RyaW5nO1xuICBzZWNvbmRhcnlSZWdpb25zPzogc3RyaW5nW107XG4gIGRpc2FzdGVyUmVjb3ZlcnlSZWdpb24/OiBzdHJpbmc7XG4gIC8vIFByb2ZpbGUgbWFuYWdlbWVudFxuICBjdXJyZW50UHJvZmlsZT86IHN0cmluZztcbiAgcHJvZmlsZXM/OiB7IFtrZXk6IHN0cmluZ106IFByb2ZpbGUgfTtcbiAgc3NvU2Vzc2lvbnM/OiB7IFtrZXk6IHN0cmluZ106IFNTT1Nlc3Npb24gfTtcbn07XG5cbnR5cGUgQ29zdEFsbG9jYXRpb25UYWdzID0ge1xuICBUYWdLZXk6IHN0cmluZztcbiAgU3RhdHVzOiBzdHJpbmc7XG59O1xuXG4vLyBab2Qgc2NoZW1hcyBmb3IgdmFsaWRhdGlvblxuY29uc3QgRG9ja2VyQ29uZmlnU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBkb2NrZXJmaWxlUGF0aDogei5zdHJpbmcoKSxcbiAgICBjb250YWluZXJQb3J0OiB6Lm51bWJlcigpXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgU2VydmljZUNvbmZpZ1NjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgaWQ6IHouc3RyaW5nKCksXG4gICAgdHlwZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHZlcnNpb246IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBvcHRpb25zOiB6Lm9iamVjdCh7fSkucGFzc3Rocm91Z2goKS5vcHRpb25hbCgpLFxuICAgIGRvY2tlckNvbmZpZzogRG9ja2VyQ29uZmlnU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgYXBpQXBwbGljYXRpb25JZDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgUHJvdmlkZXJBY2NvdW50U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBpZDogei5zdHJpbmcoKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpLFxuICAgIG1hbmFnZWQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKClcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBQcm9maWxlU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICB0eXBlOiB6LmVudW0oW1wiaWFtXCIsIFwic3NvXCIsIFwib2lkY1wiXSksXG4gICAgcmVnaW9uOiB6LnN0cmluZygpLFxuICAgIHNzb0FjY291bnRJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHNzb1JvbGVOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgc3NvU2Vzc2lvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGNyZWRlbnRpYWxTb3VyY2U6IHoubGl0ZXJhbChcImtleWNoYWluXCIpLm9wdGlvbmFsKCksXG4gICAgb2lkY1JvbGVBcm46IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBvaWRjUHJvdmlkZXJBcm46IHouc3RyaW5nKCkub3B0aW9uYWwoKVxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IFNTT1Nlc3Npb25TY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHNzb1JlZ2lvbjogei5zdHJpbmcoKSxcbiAgICBzc29TdGFydFVybDogei5zdHJpbmcoKVxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IFJvb3RDb25maWdTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHZlcnNpb246IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBkZXZlbG9wbWVudDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICBzZXJ2aWNlczogei5yZWNvcmQoei5zdHJpbmcoKSwgU2VydmljZUNvbmZpZ1NjaGVtYSkub3B0aW9uYWwoKSxcbiAgICBwcm92aWRlckFjY291bnRzOiB6LmFycmF5KFByb3ZpZGVyQWNjb3VudFNjaGVtYSkub3B0aW9uYWwoKSxcbiAgICBwcmltYXJ5UmVnaW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgc2Vjb25kYXJ5UmVnaW9uczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgIGRpc2FzdGVyUmVjb3ZlcnlSZWdpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBjdXJyZW50UHJvZmlsZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHByb2ZpbGVzOiB6LnJlY29yZCh6LnN0cmluZygpLCBQcm9maWxlU2NoZW1hKS5vcHRpb25hbCgpLFxuICAgIHNzb1Nlc3Npb25zOiB6LnJlY29yZCh6LnN0cmluZygpLCBTU09TZXNzaW9uU2NoZW1hKS5vcHRpb25hbCgpXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgQ29zdEFsbG9jYXRpb25UYWdzU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBUYWdLZXk6IHouc3RyaW5nKCksXG4gICAgU3RhdHVzOiB6LnN0cmluZygpXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgQWNjb3VudFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBBcm46IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBFbWFpbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBTdGF0dXM6IHouZW51bShbXCJBQ1RJVkVcIiwgXCJTVVNQRU5ERURcIiwgXCJQRU5ESU5HX0NMT1NVUkVcIl0pLm9wdGlvbmFsKCksXG4gICAgSm9pbmVkTWV0aG9kOiB6LmVudW0oW1wiSU5WSVRFRFwiLCBcIkNSRUFURURcIl0pLm9wdGlvbmFsKCksXG4gICAgLy8gei5jb2VyY2UuZGF0ZSgpIGhhbmRsZXMgYm90aCBEYXRlIG9iamVjdHMgKGZyb20gQVdTIFNESykgYW5kIElTTyA4NjAxIHN0cmluZ3MgKGZyb20gSlNPTiBwYXJzaW5nKVxuICAgIEpvaW5lZFRpbWVzdGFtcDogei5jb2VyY2UuZGF0ZSgpLm9wdGlvbmFsKClcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG4vKipcbiAqIFRoZSBjdXJyZW50IGJhc2UtdmVyc2lvbiBvZiBhbnkgbmV3bHkgY3JlYXRlZCBjb25maWcgZmlsZVxuICovXG5jb25zdCBCQVNFX0NPTkZJR19WRVJTSU9OID0gMC4xO1xuXG4vKipcbiAqIENvbmZpZyBjbGFzcyBmb3IgbG9hZGluZyBhbmQgc2F2aW5nIGZqYWxsLWNvbmZpZy5qc29uIGZpbGVcbiAqL1xuZXhwb3J0IGNsYXNzIENvbmZpZyB7XG4gIHJvb3RDb25maWc6IFJvb3RDb25maWc7XG4gIGV4aXN0aW5nQWNjb3VudHNDb25maWc6IEFjY291bnRbXTtcbiAgY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnOiBDb3N0QWxsb2NhdGlvblRhZ3NbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByb290Q29uZmlnPzogUm9vdENvbmZpZyxcbiAgICBleGlzdGluZ0FjY291bnRzQ29uZmlnPzogQWNjb3VudFtdLFxuICAgIGNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZz86IENvc3RBbGxvY2F0aW9uVGFnc1tdXG4gICkge1xuICAgIHRoaXMucm9vdENvbmZpZyA9IHJvb3RDb25maWcgPz8ge1xuICAgICAgdmVyc2lvbjogQkFTRV9DT05GSUdfVkVSU0lPTixcbiAgICAgIHNlcnZpY2VzOiB7fSxcbiAgICAgIHByb3ZpZGVyQWNjb3VudHM6IFtdXG4gICAgfTtcbiAgICB0aGlzLmV4aXN0aW5nQWNjb3VudHNDb25maWcgPSBleGlzdGluZ0FjY291bnRzQ29uZmlnID8/IFtdO1xuICAgIHRoaXMuY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnID0gY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnID8/IFtdO1xuICB9XG5cbiAgaXNEZXZlbG9wbWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnJvb3RDb25maWc/LmRldmVsb3BtZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGZqYWxsIGNvbmZpZyBkaXJlY3RvcnkgYnkgd2Fsa2luZyB1cCB0aGUgZGlyZWN0b3J5IHRyZWVcbiAgICogQHJldHVybnMgVGhlIHBhdGggdG8gdGhlIGZqYWxsIGNvbmZpZyBkaXJlY3Rvcnkgb3IgbnVsbCBpZiBub3QgZm91bmRcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGZpbmRDb25maWdEaXJlY3RvcnkoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgbGV0IGN1cnJlbnREaXIgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBDT05GSUdfU0VBUkNIX01BWF9ERVBUSDsgaSsrKSB7XG4gICAgICBjb25zdCBmamFsbERpciA9IHBhdGguam9pbihjdXJyZW50RGlyLCBcImZqYWxsXCIpO1xuICAgICAgY29uc3QgY29uZmlnRmlsZSA9IHBhdGguam9pbihmamFsbERpciwgXCJmamFsbC1jb25maWcuanNvblwiKTtcblxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoY29uZmlnRmlsZSkpIHtcbiAgICAgICAgcmV0dXJuIGZqYWxsRGlyO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkaXJlY3RDb25maWdGaWxlID0gcGF0aC5qb2luKGN1cnJlbnREaXIsIFwiZmphbGwtY29uZmlnLmpzb25cIik7XG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhkaXJlY3RDb25maWdGaWxlKSkge1xuICAgICAgICByZXR1cm4gY3VycmVudERpcjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFyZW50RGlyID0gcGF0aC5kaXJuYW1lKGN1cnJlbnREaXIpO1xuICAgICAgaWYgKHBhcmVudERpciA9PT0gY3VycmVudERpcikgYnJlYWs7XG4gICAgICBjdXJyZW50RGlyID0gcGFyZW50RGlyO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgY29uZmlnIGZpbGUgaW50byBtZW1vcnkgYXMgYSByYXcgSlNPTiBzdHJpbmdcbiAgICogQHBhcmFtIGNvbmZpZ0ZpbGUgLSBQYXRoIHRvIHRoZSBjb25maWcgZmlsZVxuICAgKiBAcmV0dXJucyBDb25maWcgYXMgSlNPTiBzdHJpbmcgb3IgTlVMTCBpZiBubyBjb25maWcgZmlsZSBhY2Nlc3NpYmxlXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBsb2FkQ29uZmlnRmlsZShjb25maWdGaWxlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgZnMuYWNjZXNzU3luYyhjb25maWdGaWxlLCBmcy5jb25zdGFudHMuUl9PSyB8IGZzLmNvbnN0YW50cy5XX09LKTtcbiAgICAgIHJldHVybiBmcy5yZWFkRmlsZVN5bmMoY29uZmlnRmlsZSwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBjb25maWd1cmF0aW9uIGZyb20gZmlsZVxuICAgKlxuICAgKiBAcmV0dXJucyBMb2FkZWQgY29uZmlndXJhdGlvblxuICAgKiBAdGhyb3dzIEVycm9yIGlmIGNvbmZpZyBmaWxlIGNhbm5vdCBiZSBwYXJzZWQgb3IgZmFpbHMgc2NoZW1hIHZhbGlkYXRpb25cbiAgICovXG4gIHN0YXRpYyBsb2FkQ29uZmlnKCk6IENvbmZpZyB7XG4gICAgY29uc3QgY29uZmlnRGlyID0gQ29uZmlnLmZpbmRDb25maWdEaXJlY3RvcnkoKTtcbiAgICBpZiAoIWNvbmZpZ0Rpcikge1xuICAgICAgcmV0dXJuIG5ldyBDb25maWcoKTtcbiAgICB9XG5cbiAgICBjb25zdCByb290Q29uZmlnSnNvbiA9IENvbmZpZy5sb2FkQ29uZmlnRmlsZShcbiAgICAgIHBhdGguam9pbihjb25maWdEaXIsIFwiZmphbGwtY29uZmlnLmpzb25cIilcbiAgICApO1xuICAgIGNvbnN0IGV4aXN0aW5nQWNjb3VudEpzb24gPSBDb25maWcubG9hZENvbmZpZ0ZpbGUoXG4gICAgICBwYXRoLmpvaW4oY29uZmlnRGlyLCBcImFjY291bnRzLWNvbmZpZy5qc29uXCIpXG4gICAgKTtcbiAgICBjb25zdCBjb3N0QWxsb2NhdGlvblRhZ3NKc29uID0gQ29uZmlnLmxvYWRDb25maWdGaWxlKFxuICAgICAgcGF0aC5qb2luKGNvbmZpZ0RpciwgXCJjb3N0LWFsbG9jYXRpb24tdGFncy1jb25maWcuanNvblwiKVxuICAgICk7XG5cbiAgICAvLyBQYXJzZSBlYWNoIGNvbmZpZyBmaWxlIHNlcGFyYXRlbHkgdG8gaWRlbnRpZnkgd2hpY2ggb25lIGZhaWxzXG4gICAgbGV0IHJvb3RDb25maWc6IFJvb3RDb25maWcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGV4aXN0aW5nQWNjb3VudHNDb25maWc6IEFjY291bnRbXSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnOiBDb3N0QWxsb2NhdGlvblRhZ3NbXSB8IHVuZGVmaW5lZDtcblxuICAgIC8vIDEuIFBhcnNlIHJvb3QgY29uZmlnIChmamFsbC1jb25maWcuanNvbilcbiAgICBpZiAocm9vdENvbmZpZ0pzb24pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJvb3RDb25maWcgPSBSb290Q29uZmlnU2NoZW1hLnBhcnNlKEpTT04ucGFyc2Uocm9vdENvbmZpZ0pzb24pKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBDb25maWcuZm9ybWF0Wm9kRXJyb3IoZXJyLCBcImZqYWxsLWNvbmZpZy5qc29uXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDIuIFBhcnNlIGFjY291bnRzIGNvbmZpZyAoYWNjb3VudHMtY29uZmlnLmpzb24pXG4gICAgaWYgKGV4aXN0aW5nQWNjb3VudEpzb24pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJhdyA9IEpTT04ucGFyc2UoZXhpc3RpbmdBY2NvdW50SnNvbik7XG4gICAgICAgIGV4aXN0aW5nQWNjb3VudHNDb25maWcgPSB6LmFycmF5KEFjY291bnRTY2hlbWEpLnBhcnNlKHJhdyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgQ29uZmlnLmZvcm1hdFpvZEVycm9yKGVyciwgXCJhY2NvdW50cy1jb25maWcuanNvblwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBQYXJzZSBjb3N0IGFsbG9jYXRpb24gdGFncyBjb25maWdcbiAgICBpZiAoY29zdEFsbG9jYXRpb25UYWdzSnNvbikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmF3ID0gSlNPTi5wYXJzZShjb3N0QWxsb2NhdGlvblRhZ3NKc29uKTtcbiAgICAgICAgY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnID0gei5hcnJheShDb3N0QWxsb2NhdGlvblRhZ3NTY2hlbWEpLnBhcnNlKHJhdyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgQ29uZmlnLmZvcm1hdFpvZEVycm9yKGVyciwgXCJjb3N0LWFsbG9jYXRpb24tdGFncy1jb25maWcuanNvblwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IENvbmZpZyhcbiAgICAgIHJvb3RDb25maWcsXG4gICAgICBleGlzdGluZ0FjY291bnRzQ29uZmlnLFxuICAgICAgY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgYSBab2QgZXJyb3IgaW50byBhIHJlYWRhYmxlIGVycm9yIG1lc3NhZ2VcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGZvcm1hdFpvZEVycm9yKGVycjogdW5rbm93biwgZmlsZU5hbWU6IHN0cmluZyk6IEVycm9yIHtcbiAgICBjb25zdCB6b2RFcnJvciA9IGVyciBhcyB7XG4gICAgICBpc3N1ZXM/OiBBcnJheTx7IHBhdGg6IEFycmF5PHN0cmluZyB8IG51bWJlcj47IG1lc3NhZ2U6IHN0cmluZyB9PjtcbiAgICB9O1xuICAgIGlmIChcbiAgICAgIHpvZEVycm9yLmlzc3VlcyAmJlxuICAgICAgQXJyYXkuaXNBcnJheSh6b2RFcnJvci5pc3N1ZXMpICYmXG4gICAgICB6b2RFcnJvci5pc3N1ZXMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgY29uc3QgaXNzdWVEZXRhaWxzID0gem9kRXJyb3IuaXNzdWVzXG4gICAgICAgIC5tYXAoKGlzc3VlKSA9PiBgJHtpc3N1ZS5wYXRoLmpvaW4oXCIuXCIpfTogJHtpc3N1ZS5tZXNzYWdlfWApXG4gICAgICAgIC5qb2luKFwiOyBcIik7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKGBGYWlsZWQgdG8gcGFyc2UgJHtmaWxlTmFtZX06ICR7aXNzdWVEZXRhaWxzfWApO1xuICAgIH1cbiAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIGVycm9yIG1lc3NhZ2UsIGJ1dCByZXBsYWNlIG5ld2xpbmVzIHRvIGtlZXAgaXQgb24gb25lIGxpbmVcbiAgICBjb25zdCByYXdNZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSByYXdNZXNzYWdlLnJlcGxhY2UoL1xcbi9nLCBcIiBcIikuc3Vic3RyaW5nKDAsIDUwMCk7XG4gICAgcmV0dXJuIG5ldyBFcnJvcihgRmFpbGVkIHRvIHBhcnNlICR7ZmlsZU5hbWV9OiAke21lc3NhZ2V9YCk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBjb25maWd1cmF0aW9uIHRvIGZpbGVcbiAgICovXG4gIHNhdmVDb25maWcoKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlnRGlyID1cbiAgICAgIENvbmZpZy5maW5kQ29uZmlnRGlyZWN0b3J5KCkgfHwgcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwiZmphbGxcIik7XG5cbiAgICAvLyBFbnN1cmUgZGlyZWN0b3J5IGV4aXN0c1xuICAgIGZzLm1rZGlyU3luYyhjb25maWdEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgY29uc3Qgcm9vdEpzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLnJvb3RDb25maWcsIG51bGwsIDIpO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGNvbmZpZ0RpciwgXCJmamFsbC1jb25maWcuanNvblwiKSwgcm9vdEpzb25TdHJpbmcpO1xuXG4gICAgY29uc3QgZXhpc3RpbmdBY2NvdW50c0pzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShcbiAgICAgIHRoaXMuZXhpc3RpbmdBY2NvdW50c0NvbmZpZyxcbiAgICAgIG51bGwsXG4gICAgICAyXG4gICAgKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgcGF0aC5qb2luKGNvbmZpZ0RpciwgXCJhY2NvdW50cy1jb25maWcuanNvblwiKSxcbiAgICAgIGV4aXN0aW5nQWNjb3VudHNKc29uU3RyaW5nXG4gICAgKTtcblxuICAgIGNvbnN0IGNvc3RBbGxvY2F0aW9uVGFnc0pzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShcbiAgICAgIHRoaXMuY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnLFxuICAgICAgbnVsbCxcbiAgICAgIDJcbiAgICApO1xuICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICBwYXRoLmpvaW4oY29uZmlnRGlyLCBcImNvc3QtYWxsb2NhdGlvbi10YWdzLWNvbmZpZy5qc29uXCIpLFxuICAgICAgY29zdEFsbG9jYXRpb25UYWdzSnNvblN0cmluZ1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IHNlcnZpY2UgdG8gdGhlIGNvbmZpZyBmaWxlXG4gICAqIEBwYXJhbSBzZXJ2aWNlS2V5IE5hbWUva2V5IG9mIHRoZSBzZXJ2aWNlXG4gICAqIEBwYXJhbSBjb25maWcgU2VydmljZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXNcbiAgICovXG4gIGFkZFNlcnZpY2Uoc2VydmljZUtleTogc3RyaW5nLCBjb25maWc6IFNlcnZpY2VDb25maWcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5zZXJ2aWNlcykgdGhpcy5yb290Q29uZmlnLnNlcnZpY2VzID0ge307XG4gICAgdGhpcy5yb290Q29uZmlnLnNlcnZpY2VzW3NlcnZpY2VLZXldID0gY29uZmlnO1xuICB9XG5cbiAgZ2V0U2VydmljZUNvbmZpZyhzZXJ2aWNlS2V5OiBzdHJpbmcpOiBTZXJ2aWNlQ29uZmlnIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcuc2VydmljZXMpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcuc2VydmljZXNbc2VydmljZUtleV0gfHwgbnVsbDtcbiAgfVxuXG4gIGFkZFByb3ZpZGVyQWNjb3VudChhY2NvdW50OiBQcm92aWRlckFjY291bnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzKVxuICAgICAgdGhpcy5yb290Q29uZmlnLnByb3ZpZGVyQWNjb3VudHMgPSBbXTtcblxuICAgIC8vIGVuc3VyZSBhY2NvdW50IG5hbWUgaXMgYWx3YXlzIGxvd2VyY2FzZVxuICAgIGFjY291bnQubmFtZSA9IGFjY291bnQubmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuXG4gICAgdGhpcy5yb290Q29uZmlnLnByb3ZpZGVyQWNjb3VudHMucHVzaChhY2NvdW50KTtcbiAgfVxuXG4gIGdldFByb3ZpZGVyQWNjb3VudChhY2NvdW50TmFtZTogc3RyaW5nKTogUHJvdmlkZXJBY2NvdW50IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcucHJvdmlkZXJBY2NvdW50cy5maW5kKFxuICAgICAgKGFjY291bnQpID0+XG4gICAgICAgIGFjY291bnQubmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBhY2NvdW50TmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpXG4gICAgKTtcbiAgfVxuXG4gIGdldFByb3ZpZGVyQWNjb3VudEJ5SWQoYWNjb3VudElkOiBzdHJpbmcpOiBQcm92aWRlckFjY291bnQgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnByb3ZpZGVyQWNjb3VudHMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzLmZpbmQoXG4gICAgICAoYWNjb3VudCkgPT4gYWNjb3VudC5pZCA9PT0gYWNjb3VudElkXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcHJvdmlkZXIgYWNjb3VudCBieSBlbnZpcm9ubWVudCB0eXBlXG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudCBUaGUgZW52aXJvbm1lbnQgdHlwZSAoZS5nLiwgJ3BsYXRmb3JtJywgJ3N0YWdpbmcnLCAncHJvZHVjdGlvbicpXG4gICAqIEByZXR1cm5zIFRoZSBwcm92aWRlciBhY2NvdW50IHdpdGggdGhlIHNwZWNpZmllZCBlbnZpcm9ubWVudCBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kXG4gICAqL1xuICBnZXRBY2NvdW50QnlFbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKTogUHJvdmlkZXJBY2NvdW50IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcucHJvdmlkZXJBY2NvdW50cy5maW5kKFxuICAgICAgKGFjY291bnQpID0+IGFjY291bnQuZW52aXJvbm1lbnQgPT09IGVudmlyb25tZW50XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBleGlzdGluZyBhY2NvdW50cyBsaXN0LiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYnkgQWNjb3VudFNlcnZpY2VcbiAgICogYWZ0ZXIgaXQgZmV0Y2hlcyB0aGUgYWNjb3VudHMgZnJvbSBBV1MuXG4gICAqIEBwYXJhbSBhY2NvdW50cyBMaXN0IG9mIEFXUyBhY2NvdW50cyBmcm9tIE9yZ2FuaXphdGlvbnMgQVBJXG4gICAqL1xuICBzZXRFeGlzdGluZ0FjY291bnRzTGlzdChhY2NvdW50czogQWNjb3VudFtdKTogdm9pZCB7XG4gICAgdGhpcy5leGlzdGluZ0FjY291bnRzQ29uZmlnID0gYWNjb3VudHM7XG4gIH1cblxuICBnZXRFeGlzdGluZ0FjY291bnRzKCk6IEFjY291bnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuZXhpc3RpbmdBY2NvdW50c0NvbmZpZztcbiAgfVxuXG4gIHNldFByaW1hcnlSZWdpb24ocmVnaW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJvb3RDb25maWcucHJpbWFyeVJlZ2lvbiA9IHJlZ2lvbjtcbiAgfVxuXG4gIHNldFNlY29uZGFyeVJlZ2lvbnMocmVnaW9uczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLnJvb3RDb25maWcuc2Vjb25kYXJ5UmVnaW9ucyA9IHJlZ2lvbnM7XG4gIH1cblxuICBzZXREaXNhc3RlclJlY292ZXJ5UmVnaW9uKHJlZ2lvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yb290Q29uZmlnLmRpc2FzdGVyUmVjb3ZlcnlSZWdpb24gPSByZWdpb247XG4gIH1cblxuICBnZXRQcmltYXJ5UmVnaW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5wcmltYXJ5UmVnaW9uO1xuICB9XG5cbiAgZ2V0U2Vjb25kYXJ5UmVnaW9ucygpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5zZWNvbmRhcnlSZWdpb25zO1xuICB9XG5cbiAgZ2V0RGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcuZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbjtcbiAgfVxuXG4gIGdldEFsbFJlZ2lvbnMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJlZ2lvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAodGhpcy5yb290Q29uZmlnLnByaW1hcnlSZWdpb24pIHtcbiAgICAgIHJlZ2lvbnMucHVzaCh0aGlzLnJvb3RDb25maWcucHJpbWFyeVJlZ2lvbik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucm9vdENvbmZpZy5zZWNvbmRhcnlSZWdpb25zKSB7XG4gICAgICByZWdpb25zLnB1c2goLi4udGhpcy5yb290Q29uZmlnLnNlY29uZGFyeVJlZ2lvbnMpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMucm9vdENvbmZpZy5kaXNhc3RlclJlY292ZXJ5UmVnaW9uICYmXG4gICAgICAhcmVnaW9ucy5pbmNsdWRlcyh0aGlzLnJvb3RDb25maWcuZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbilcbiAgICApIHtcbiAgICAgIHJlZ2lvbnMucHVzaCh0aGlzLnJvb3RDb25maWcuZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZ2lvbnM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgY29zdCBhbGxvY2F0aW9uIHRhZ3MgbGlzdC4gVGhpcyBzaG91bGQgYmUgY2FsbGVkIGJ5IEFjY291bnRTZXJ2aWNlXG4gICAqIGFmdGVyIGl0IGZldGNoZXMgdGhlIHRhZ3MgZnJvbSBBV1MgQ29zdCBFeHBsb3Jlci5cbiAgICogQHBhcmFtIHRhZ3MgTGlzdCBvZiBjb3N0IGFsbG9jYXRpb24gdGFnc1xuICAgKi9cbiAgc2V0Q29zdEFsbG9jYXRpb25UYWdzTGlzdCh0YWdzOiBDb3N0QWxsb2NhdGlvblRhZ3NbXSk6IHZvaWQge1xuICAgIHRoaXMuY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnID0gdGFncztcbiAgfVxuXG4gIGdldENvc3RBbGxvY2F0aW9uVGFncygpOiBDb3N0QWxsb2NhdGlvblRhZ3NbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29zdEFsbG9jYXRpb25UYWdzQ29uZmlnO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZmphbGwgY29uZmlnIGRpcmVjdG9yeSBwYXRoXG4gICAqIEByZXR1cm5zIFRoZSBwYXRoIHRvIHRoZSBmamFsbCBjb25maWcgZGlyZWN0b3J5IG9yIG51bGwgaWYgbm90IGZvdW5kXG4gICAqL1xuICBzdGF0aWMgZ2V0Q29uZmlnRGlyZWN0b3J5KCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiBDb25maWcuZmluZENvbmZpZ0RpcmVjdG9yeSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2ZpbGUgbWFuYWdlbWVudCBtZXRob2RzXG4gICAqL1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIHByb2ZpbGUuXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHByb2ZpbGUgbmFtZSwgb3IgdW5kZWZpbmVkIGlmIG5vIHByb2ZpbGUgaXMgc2V0XG4gICAqL1xuICBnZXRDdXJyZW50UHJvZmlsZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcuY3VycmVudFByb2ZpbGU7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgY3VycmVudGx5IGFjdGl2ZSBwcm9maWxlLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvZmlsZSB0byBzZXQgYXMgY3VycmVudFxuICAgKi9cbiAgc2V0Q3VycmVudFByb2ZpbGUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yb290Q29uZmlnLmN1cnJlbnRQcm9maWxlID0gbmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBwcm9maWxlIGJ5IG5hbWUuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9maWxlIHRvIHJldHJpZXZlXG4gICAqIEByZXR1cm5zIFRoZSBwcm9maWxlIGNvbmZpZ3VyYXRpb24sIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICovXG4gIGdldFByb2ZpbGUobmFtZTogc3RyaW5nKTogUHJvZmlsZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcucHJvZmlsZXMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5wcm9maWxlc1tuYW1lXTtcbiAgfVxuXG4gIGdldEFsbFByb2ZpbGVOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcucHJvZmlsZXMpIHJldHVybiBbXTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5yb290Q29uZmlnLnByb2ZpbGVzKTtcbiAgfVxuXG4gIGFkZFByb2ZpbGUobmFtZTogc3RyaW5nLCBwcm9maWxlOiBQcm9maWxlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcucHJvZmlsZXMpIHtcbiAgICAgIHRoaXMucm9vdENvbmZpZy5wcm9maWxlcyA9IHt9O1xuICAgIH1cbiAgICB0aGlzLnJvb3RDb25maWcucHJvZmlsZXNbbmFtZV0gPSBwcm9maWxlO1xuICB9XG5cbiAgcmVtb3ZlUHJvZmlsZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5wcm9maWxlcykgcmV0dXJuO1xuICAgIGRlbGV0ZSB0aGlzLnJvb3RDb25maWcucHJvZmlsZXNbbmFtZV07XG5cbiAgICAvLyBJZiB3ZSByZW1vdmVkIHRoZSBjdXJyZW50IHByb2ZpbGUsIGNsZWFyIGl0XG4gICAgaWYgKHRoaXMucm9vdENvbmZpZy5jdXJyZW50UHJvZmlsZSA9PT0gbmFtZSkge1xuICAgICAgdGhpcy5yb290Q29uZmlnLmN1cnJlbnRQcm9maWxlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGdldFNTT1Nlc3Npb24obmFtZTogc3RyaW5nKTogU1NPU2Vzc2lvbiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcuc3NvU2Vzc2lvbnMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5zc29TZXNzaW9uc1tuYW1lXTtcbiAgfVxuXG4gIGFkZFNTT1Nlc3Npb24obmFtZTogc3RyaW5nLCBzZXNzaW9uOiBTU09TZXNzaW9uKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcuc3NvU2Vzc2lvbnMpIHtcbiAgICAgIHRoaXMucm9vdENvbmZpZy5zc29TZXNzaW9ucyA9IHt9O1xuICAgIH1cbiAgICB0aGlzLnJvb3RDb25maWcuc3NvU2Vzc2lvbnNbbmFtZV0gPSBzZXNzaW9uO1xuICB9XG59XG4iXX0=
|
|
469
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLDZCQUF3QjtBQUl4Qjs7O0dBR0c7QUFDSCxNQUFNLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztBQTJFbkMsNkJBQTZCO0FBQzdCLE1BQU0sa0JBQWtCLEdBQUcsT0FBQztLQUN6QixNQUFNLENBQUM7SUFDTixjQUFjLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUMxQixhQUFhLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtDQUMxQixDQUFDO0tBQ0QsTUFBTSxFQUFFLENBQUM7QUFFWixNQUFNLG1CQUFtQixHQUFHLE9BQUM7S0FDMUIsTUFBTSxDQUFDO0lBQ04sRUFBRSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7SUFDZCxJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUMzQixPQUFPLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM5QixPQUFPLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDOUMsWUFBWSxFQUFFLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtJQUMzQyxnQkFBZ0IsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQ3hDLENBQUM7S0FDRCxNQUFNLEVBQUUsQ0FBQztBQUVaLE1BQU0scUJBQXFCLEdBQUcsT0FBQztLQUM1QixNQUFNLENBQUM7SUFDTixFQUFFLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNkLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2hCLFdBQVcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0lBQ3ZCLE9BQU8sRUFBRSxPQUFDLENB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QyxHQUFHLFVBQVUsQ0FBQztJQUMxRCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsTUFBc0I7UUFDdEMsSUFBSSxNQUFNLENBQUMsYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7UUFDdkQsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLGdCQUFnQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBQzdELENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxzQkFBc0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQztRQUN6RSxDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7UUFDN0QsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ25ELENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQztRQUMzRCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBbmRELHdCQW1kQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgQWNjb3VudCB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtb3JnYW5pemF0aW9uc1wiO1xuZXhwb3J0IHR5cGUgeyBBY2NvdW50IH0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1vcmdhbml6YXRpb25zXCI7XG5cbi8qKlxuICogTWF4aW11bSBkZXB0aCBmb3Igc2VhcmNoaW5nIHVwIHRoZSBkaXJlY3RvcnkgdHJlZSBmb3IgY29uZmlnIGZpbGVzLlxuICogUHJldmVudHMgaW5maW5pdGUgbG9vcHMgd2hlbiB0cmF2ZXJzaW5nIGRpcmVjdG9yaWVzLlxuICovXG5jb25zdCBDT05GSUdfU0VBUkNIX01BWF9ERVBUSCA9IDEwO1xuXG5leHBvcnQgdHlwZSBTZXJ2aWNlQ29uZmlnID0ge1xuICBpZDogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nO1xuICB2ZXJzaW9uPzogbnVtYmVyO1xuICBvcHRpb25zPzogb2JqZWN0O1xuICBkb2NrZXJDb25maWc/OiB7XG4gICAgZG9ja2VyZmlsZVBhdGg6IHN0cmluZztcbiAgICBjb250YWluZXJQb3J0OiBudW1iZXI7XG4gIH07XG4gIGFwaUFwcGxpY2F0aW9uSWQ/OiBzdHJpbmc7IC8vIEZqYWxsIEFQSSBhcHBsaWNhdGlvbiBJRFxufTtcblxuZXhwb3J0IHR5cGUgUHJvdmlkZXJBY2NvdW50ID0ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIG1hbmFnZWQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgT2lkY0Nvbm5lY3Rpb24gPSB7XG4gIHJvbGVBcm46IHN0cmluZztcbiAgZXh0ZXJuYWxJZDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgUHJvZmlsZSA9IHtcbiAgdHlwZTogXCJpYW1cIiB8IFwic3NvXCIgfCBcIm9pZGNcIjtcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIC8vIFNTTyBwcm9maWxlc1xuICBzc29BY2NvdW50SWQ/OiBzdHJpbmc7XG4gIHNzb1JvbGVOYW1lPzogc3RyaW5nO1xuICBzc29TZXNzaW9uPzogc3RyaW5nO1xuICAvLyBPSURDIHByb2ZpbGVzIChDSS9DRCBhbmQgRmphbGwtaXNzdWVkKVxuICBvaWRjUm9sZUFybj86IHN0cmluZztcbiAgb2lkY1Byb3ZpZGVyQXJuPzogc3RyaW5nO1xuICAvLyBSb2xlIGFzc3VtcHRpb24gKHVzZWQgaW4gQVdTIGNvbmZpZyBmaWxlIGdlbmVyYXRpb24pXG4gIGNyZWRlbnRpYWxTb3VyY2U/OiBzdHJpbmc7XG4gIHJvbGVBcm4/OiBzdHJpbmc7XG4gIHJvbGVTZXNzaW9uTmFtZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNTT1Nlc3Npb24gPSB7XG4gIHNzb1JlZ2lvbjogc3RyaW5nO1xuICBzc29TdGFydFVybDogc3RyaW5nO1xufTtcblxudHlwZSBSb290Q29uZmlnID0ge1xuICB2ZXJzaW9uPzogbnVtYmVyO1xuICBkZXZlbG9wbWVudD86IGJvb2xlYW47XG4gIHNlcnZpY2VzPzogeyBba2V5OiBzdHJpbmddOiBTZXJ2aWNlQ29uZmlnIH07XG4gIHByb3ZpZGVyQWNjb3VudHM/OiBQcm92aWRlckFjY291bnRbXTtcbiAgcHJpbWFyeVJlZ2lvbj86IHN0cmluZztcbiAgc2Vjb25kYXJ5UmVnaW9ucz86IHN0cmluZ1tdO1xuICBkaXNhc3RlclJlY292ZXJ5UmVnaW9uPzogc3RyaW5nO1xuICAvLyBQcm9maWxlIG1hbmFnZW1lbnRcbiAgY3VycmVudFByb2ZpbGU/OiBzdHJpbmc7XG4gIHByb2ZpbGVzPzogeyBba2V5OiBzdHJpbmddOiBQcm9maWxlIH07XG4gIHNzb1Nlc3Npb25zPzogeyBba2V5OiBzdHJpbmddOiBTU09TZXNzaW9uIH07XG4gIC8vIE9yZ2FuaXNhdGlvbiBpZGVudGl0eSAoZnJvbSBGamFsbCBBUEkpXG4gIG9yZ2FuaXNhdGlvbklkPzogc3RyaW5nO1xuICBvcmdhbmlzYXRpb25OYW1lPzogc3RyaW5nO1xuICBvcmdhbmlzYXRpb25FbWFpbD86IHN0cmluZztcbiAgLy8gT0lEQyBjb25maWd1cmF0aW9uXG5cbiAgb2lkY0lzc3VlclVybD86IHN0cmluZztcbiAgb2lkY0Nvbm5lY3Rpb25zPzogeyBbYWNjb3VudElkOiBzdHJpbmddOiBPaWRjQ29ubmVjdGlvbiB9O1xuICByb290T2lkY1JvbGVBcm4/OiBzdHJpbmc7XG59O1xuXG50eXBlIENvc3RBbGxvY2F0aW9uVGFncyA9IHtcbiAgVGFnS2V5OiBzdHJpbmc7XG4gIFN0YXR1czogc3RyaW5nO1xufTtcblxuLy8gWm9kIHNjaGVtYXMgZm9yIHZhbGlkYXRpb25cbmNvbnN0IERvY2tlckNvbmZpZ1NjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgZG9ja2VyZmlsZVBhdGg6IHouc3RyaW5nKCksXG4gICAgY29udGFpbmVyUG9ydDogei5udW1iZXIoKVxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IFNlcnZpY2VDb25maWdTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGlkOiB6LnN0cmluZygpLFxuICAgIHR5cGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB2ZXJzaW9uOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgb3B0aW9uczogei5vYmplY3Qoe30pLnBhc3N0aHJvdWdoKCkub3B0aW9uYWwoKSxcbiAgICBkb2NrZXJDb25maWc6IERvY2tlckNvbmZpZ1NjaGVtYS5vcHRpb25hbCgpLFxuICAgIGFwaUFwcGxpY2F0aW9uSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxuICB9KVxuICAuc3RyaWN0KCk7XG5cbmNvbnN0IFByb3ZpZGVyQWNjb3VudFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgaWQ6IHouc3RyaW5nKCksXG4gICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBtYW5hZ2VkOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgUHJvZmlsZVNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgdHlwZTogei5lbnVtKFtcImlhbVwiLCBcInNzb1wiLCBcIm9pZGNcIl0pLFxuICAgIHJlZ2lvbjogei5zdHJpbmcoKSxcbiAgICBzc29BY2NvdW50SWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBzc29Sb2xlTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHNzb1Nlc3Npb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBvaWRjUm9sZUFybjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIG9pZGNQcm92aWRlckFybjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGNyZWRlbnRpYWxTb3VyY2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICByb2xlQXJuOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgcm9sZVNlc3Npb25OYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBTU09TZXNzaW9uU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBzc29SZWdpb246IHouc3RyaW5nKCksXG4gICAgc3NvU3RhcnRVcmw6IHouc3RyaW5nKClcbiAgfSlcbiAgLnN0cmljdCgpO1xuXG5jb25zdCBPaWRjQ29ubmVjdGlvblNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgcm9sZUFybjogei5zdHJpbmcoKSxcbiAgICBleHRlcm5hbElkOiB6LnN0cmluZygpXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgUm9vdENvbmZpZ1NjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgdmVyc2lvbjogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIGRldmVsb3BtZW50OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIHNlcnZpY2VzOiB6LnJlY29yZCh6LnN0cmluZygpLCBTZXJ2aWNlQ29uZmlnU2NoZW1hKS5vcHRpb25hbCgpLFxuICAgIHByb3ZpZGVyQWNjb3VudHM6IHouYXJyYXkoUHJvdmlkZXJBY2NvdW50U2NoZW1hKS5vcHRpb25hbCgpLFxuICAgIHByaW1hcnlSZWdpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBzZWNvbmRhcnlSZWdpb25zOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gICAgZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGN1cnJlbnRQcm9maWxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgcHJvZmlsZXM6IHoucmVjb3JkKHouc3RyaW5nKCksIFByb2ZpbGVTY2hlbWEpLm9wdGlvbmFsKCksXG4gICAgc3NvU2Vzc2lvbnM6IHoucmVjb3JkKHouc3RyaW5nKCksIFNTT1Nlc3Npb25TY2hlbWEpLm9wdGlvbmFsKCksXG4gICAgb3JnYW5pc2F0aW9uSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBvcmdhbmlzYXRpb25OYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgb3JnYW5pc2F0aW9uRW1haWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcblxuICAgIG9pZGNJc3N1ZXJVcmw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBvaWRjQ29ubmVjdGlvbnM6IHoucmVjb3JkKHouc3RyaW5nKCksIE9pZGNDb25uZWN0aW9uU2NoZW1hKS5vcHRpb25hbCgpLFxuICAgIHJvb3RPaWRjUm9sZUFybjogei5zdHJpbmcoKS5vcHRpb25hbCgpXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgQ29zdEFsbG9jYXRpb25UYWdzU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBUYWdLZXk6IHouc3RyaW5nKCksXG4gICAgU3RhdHVzOiB6LnN0cmluZygpXG4gIH0pXG4gIC5zdHJpY3QoKTtcblxuY29uc3QgQWNjb3VudFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBBcm46IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBFbWFpbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBTdGF0dXM6IHouZW51bShbXCJBQ1RJVkVcIiwgXCJTVVNQRU5ERURcIiwgXCJQRU5ESU5HX0NMT1NVUkVcIl0pLm9wdGlvbmFsKCksXG4gICAgSm9pbmVkTWV0aG9kOiB6LmVudW0oW1wiSU5WSVRFRFwiLCBcIkNSRUFURURcIl0pLm9wdGlvbmFsKCksXG4gICAgLy8gei5jb2VyY2UuZGF0ZSgpIGhhbmRsZXMgYm90aCBEYXRlIG9iamVjdHMgKGZyb20gQVdTIFNESykgYW5kIElTTyA4NjAxIHN0cmluZ3MgKGZyb20gSlNPTiBwYXJzaW5nKVxuICAgIEpvaW5lZFRpbWVzdGFtcDogei5jb2VyY2UuZGF0ZSgpLm9wdGlvbmFsKClcbiAgfSlcbiAgLnBhc3N0aHJvdWdoKCk7XG5cbi8qKlxuICogVGhlIGN1cnJlbnQgYmFzZS12ZXJzaW9uIG9mIGFueSBuZXdseSBjcmVhdGVkIGNvbmZpZyBmaWxlXG4gKi9cbmNvbnN0IEJBU0VfQ09ORklHX1ZFUlNJT04gPSAwLjE7XG5cbi8qKlxuICogQ29uZmlnIGNsYXNzIGZvciBsb2FkaW5nIGFuZCBzYXZpbmcgZmphbGwtY29uZmlnLmpzb24gZmlsZVxuICovXG5leHBvcnQgdHlwZSBPcmdMZXZlbENvbmZpZyA9IHtcbiAgcHJpbWFyeVJlZ2lvbj86IHN0cmluZztcbiAgc2Vjb25kYXJ5UmVnaW9ucz86IHN0cmluZ1tdO1xuICBkaXNhc3RlclJlY292ZXJ5UmVnaW9uPzogc3RyaW5nO1xuICBwcm92aWRlckFjY291bnRzPzogUHJvdmlkZXJBY2NvdW50W107XG4gIHNzb1Nlc3Npb25zPzogeyBba2V5OiBzdHJpbmddOiBTU09TZXNzaW9uIH07XG4gIHJvb3RPaWRjUm9sZUFybj86IHN0cmluZztcbn07XG5cbmV4cG9ydCBjbGFzcyBDb25maWcge1xuICByb290Q29uZmlnOiBSb290Q29uZmlnO1xuICBleGlzdGluZ0FjY291bnRzQ29uZmlnOiBBY2NvdW50W107XG4gIGNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZzogQ29zdEFsbG9jYXRpb25UYWdzW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcm9vdENvbmZpZz86IFJvb3RDb25maWcsXG4gICAgZXhpc3RpbmdBY2NvdW50c0NvbmZpZz86IEFjY291bnRbXSxcbiAgICBjb3N0QWxsb2NhdGlvblRhZ3NDb25maWc/OiBDb3N0QWxsb2NhdGlvblRhZ3NbXVxuICApIHtcbiAgICB0aGlzLnJvb3RDb25maWcgPSByb290Q29uZmlnID8/IHtcbiAgICAgIHZlcnNpb246IEJBU0VfQ09ORklHX1ZFUlNJT04sXG4gICAgICBzZXJ2aWNlczoge30sXG4gICAgICBwcm92aWRlckFjY291bnRzOiBbXVxuICAgIH07XG4gICAgdGhpcy5leGlzdGluZ0FjY291bnRzQ29uZmlnID0gZXhpc3RpbmdBY2NvdW50c0NvbmZpZyA/PyBbXTtcbiAgICB0aGlzLmNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZyA9IGNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZyA/PyBbXTtcbiAgfVxuXG4gIGlzRGV2ZWxvcG1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5yb290Q29uZmlnPy5kZXZlbG9wbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBmamFsbCBjb25maWcgZGlyZWN0b3J5IGJ5IHdhbGtpbmcgdXAgdGhlIGRpcmVjdG9yeSB0cmVlXG4gICAqIEByZXR1cm5zIFRoZSBwYXRoIHRvIHRoZSBmamFsbCBjb25maWcgZGlyZWN0b3J5IG9yIG51bGwgaWYgbm90IGZvdW5kXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBmaW5kQ29uZmlnRGlyZWN0b3J5KCk6IHN0cmluZyB8IG51bGwge1xuICAgIGxldCBjdXJyZW50RGlyID0gcHJvY2Vzcy5jd2QoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgQ09ORklHX1NFQVJDSF9NQVhfREVQVEg7IGkrKykge1xuICAgICAgY29uc3QgZmphbGxEaXIgPSBwYXRoLmpvaW4oY3VycmVudERpciwgXCJmamFsbFwiKTtcbiAgICAgIGNvbnN0IGNvbmZpZ0ZpbGUgPSBwYXRoLmpvaW4oZmphbGxEaXIsIFwiZmphbGwtY29uZmlnLmpzb25cIik7XG5cbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGNvbmZpZ0ZpbGUpKSB7XG4gICAgICAgIHJldHVybiBmamFsbERpcjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGlyZWN0Q29uZmlnRmlsZSA9IHBhdGguam9pbihjdXJyZW50RGlyLCBcImZqYWxsLWNvbmZpZy5qc29uXCIpO1xuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZGlyZWN0Q29uZmlnRmlsZSkpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnREaXI7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhcmVudERpciA9IHBhdGguZGlybmFtZShjdXJyZW50RGlyKTtcbiAgICAgIGlmIChwYXJlbnREaXIgPT09IGN1cnJlbnREaXIpIGJyZWFrO1xuICAgICAgY3VycmVudERpciA9IHBhcmVudERpcjtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGNvbmZpZyBmaWxlIGludG8gbWVtb3J5IGFzIGEgcmF3IEpTT04gc3RyaW5nXG4gICAqIEBwYXJhbSBjb25maWdGaWxlIC0gUGF0aCB0byB0aGUgY29uZmlnIGZpbGVcbiAgICogQHJldHVybnMgQ29uZmlnIGFzIEpTT04gc3RyaW5nIG9yIE5VTEwgaWYgbm8gY29uZmlnIGZpbGUgYWNjZXNzaWJsZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgbG9hZENvbmZpZ0ZpbGUoY29uZmlnRmlsZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIGZzLmFjY2Vzc1N5bmMoY29uZmlnRmlsZSwgZnMuY29uc3RhbnRzLlJfT0sgfCBmcy5jb25zdGFudHMuV19PSyk7XG4gICAgICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKGNvbmZpZ0ZpbGUsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgY29uZmlndXJhdGlvbiBmcm9tIGZpbGVcbiAgICpcbiAgICogQHJldHVybnMgTG9hZGVkIGNvbmZpZ3VyYXRpb25cbiAgICogQHRocm93cyBFcnJvciBpZiBjb25maWcgZmlsZSBjYW5ub3QgYmUgcGFyc2VkIG9yIGZhaWxzIHNjaGVtYSB2YWxpZGF0aW9uXG4gICAqL1xuICBzdGF0aWMgbG9hZENvbmZpZygpOiBDb25maWcge1xuICAgIGNvbnN0IGNvbmZpZ0RpciA9IENvbmZpZy5maW5kQ29uZmlnRGlyZWN0b3J5KCk7XG4gICAgaWYgKCFjb25maWdEaXIpIHtcbiAgICAgIHJldHVybiBuZXcgQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdENvbmZpZ0pzb24gPSBDb25maWcubG9hZENvbmZpZ0ZpbGUoXG4gICAgICBwYXRoLmpvaW4oY29uZmlnRGlyLCBcImZqYWxsLWNvbmZpZy5qc29uXCIpXG4gICAgKTtcbiAgICBjb25zdCBleGlzdGluZ0FjY291bnRKc29uID0gQ29uZmlnLmxvYWRDb25maWdGaWxlKFxuICAgICAgcGF0aC5qb2luKGNvbmZpZ0RpciwgXCJhY2NvdW50cy1jb25maWcuanNvblwiKVxuICAgICk7XG4gICAgY29uc3QgY29zdEFsbG9jYXRpb25UYWdzSnNvbiA9IENvbmZpZy5sb2FkQ29uZmlnRmlsZShcbiAgICAgIHBhdGguam9pbihjb25maWdEaXIsIFwiY29zdC1hbGxvY2F0aW9uLXRhZ3MtY29uZmlnLmpzb25cIilcbiAgICApO1xuXG4gICAgLy8gUGFyc2UgZWFjaCBjb25maWcgZmlsZSBzZXBhcmF0ZWx5IHRvIGlkZW50aWZ5IHdoaWNoIG9uZSBmYWlsc1xuICAgIGxldCByb290Q29uZmlnOiBSb290Q29uZmlnIHwgdW5kZWZpbmVkO1xuICAgIGxldCBleGlzdGluZ0FjY291bnRzQ29uZmlnOiBBY2NvdW50W10gfCB1bmRlZmluZWQ7XG4gICAgbGV0IGNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZzogQ29zdEFsbG9jYXRpb25UYWdzW10gfCB1bmRlZmluZWQ7XG5cbiAgICAvLyAxLiBQYXJzZSByb290IGNvbmZpZyAoZmphbGwtY29uZmlnLmpzb24pXG4gICAgaWYgKHJvb3RDb25maWdKc29uKSB7XG4gICAgICB0cnkge1xuICAgICAgICByb290Q29uZmlnID0gUm9vdENvbmZpZ1NjaGVtYS5wYXJzZShKU09OLnBhcnNlKHJvb3RDb25maWdKc29uKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgQ29uZmlnLmZvcm1hdFpvZEVycm9yKGVyciwgXCJmamFsbC1jb25maWcuanNvblwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyLiBQYXJzZSBhY2NvdW50cyBjb25maWcgKGFjY291bnRzLWNvbmZpZy5qc29uKVxuICAgIGlmIChleGlzdGluZ0FjY291bnRKc29uKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByYXcgPSBKU09OLnBhcnNlKGV4aXN0aW5nQWNjb3VudEpzb24pO1xuICAgICAgICBleGlzdGluZ0FjY291bnRzQ29uZmlnID0gei5hcnJheShBY2NvdW50U2NoZW1hKS5wYXJzZShyYXcpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IENvbmZpZy5mb3JtYXRab2RFcnJvcihlcnIsIFwiYWNjb3VudHMtY29uZmlnLmpzb25cIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMy4gUGFyc2UgY29zdCBhbGxvY2F0aW9uIHRhZ3MgY29uZmlnXG4gICAgaWYgKGNvc3RBbGxvY2F0aW9uVGFnc0pzb24pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJhdyA9IEpTT04ucGFyc2UoY29zdEFsbG9jYXRpb25UYWdzSnNvbik7XG4gICAgICAgIGNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZyA9IHouYXJyYXkoQ29zdEFsbG9jYXRpb25UYWdzU2NoZW1hKS5wYXJzZShyYXcpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IENvbmZpZy5mb3JtYXRab2RFcnJvcihlcnIsIFwiY29zdC1hbGxvY2F0aW9uLXRhZ3MtY29uZmlnLmpzb25cIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBDb25maWcoXG4gICAgICByb290Q29uZmlnLFxuICAgICAgZXhpc3RpbmdBY2NvdW50c0NvbmZpZyxcbiAgICAgIGNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZ1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IGEgWm9kIGVycm9yIGludG8gYSByZWFkYWJsZSBlcnJvciBtZXNzYWdlXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBmb3JtYXRab2RFcnJvcihlcnI6IHVua25vd24sIGZpbGVOYW1lOiBzdHJpbmcpOiBFcnJvciB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIHouWm9kRXJyb3IgJiYgZXJyLmlzc3Vlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBpc3N1ZURldGFpbHMgPSBlcnIuaXNzdWVzXG4gICAgICAgIC5tYXAoKGlzc3VlKSA9PiBgJHtpc3N1ZS5wYXRoLmpvaW4oXCIuXCIpfTogJHtpc3N1ZS5tZXNzYWdlfWApXG4gICAgICAgIC5qb2luKFwiOyBcIik7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKGBGYWlsZWQgdG8gcGFyc2UgJHtmaWxlTmFtZX06ICR7aXNzdWVEZXRhaWxzfWApO1xuICAgIH1cbiAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIGVycm9yIG1lc3NhZ2UsIGJ1dCByZXBsYWNlIG5ld2xpbmVzIHRvIGtlZXAgaXQgb24gb25lIGxpbmVcbiAgICBjb25zdCByYXdNZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSByYXdNZXNzYWdlLnJlcGxhY2UoL1xcbi9nLCBcIiBcIikuc3Vic3RyaW5nKDAsIDUwMCk7XG4gICAgcmV0dXJuIG5ldyBFcnJvcihgRmFpbGVkIHRvIHBhcnNlICR7ZmlsZU5hbWV9OiAke21lc3NhZ2V9YCk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBjb25maWd1cmF0aW9uIHRvIGZpbGVcbiAgICovXG4gIHNhdmVDb25maWcoKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlnRGlyID1cbiAgICAgIENvbmZpZy5maW5kQ29uZmlnRGlyZWN0b3J5KCkgfHwgcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwiZmphbGxcIik7XG5cbiAgICAvLyBFbnN1cmUgZGlyZWN0b3J5IGV4aXN0c1xuICAgIGZzLm1rZGlyU3luYyhjb25maWdEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgY29uc3Qgcm9vdEpzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLnJvb3RDb25maWcsIG51bGwsIDIpO1xuICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICBwYXRoLmpvaW4oY29uZmlnRGlyLCBcImZqYWxsLWNvbmZpZy5qc29uXCIpLFxuICAgICAgcm9vdEpzb25TdHJpbmcsXG4gICAgICB7XG4gICAgICAgIG1vZGU6IDBvNjAwXG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IGV4aXN0aW5nQWNjb3VudHNKc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICB0aGlzLmV4aXN0aW5nQWNjb3VudHNDb25maWcsXG4gICAgICBudWxsLFxuICAgICAgMlxuICAgICk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgIHBhdGguam9pbihjb25maWdEaXIsIFwiYWNjb3VudHMtY29uZmlnLmpzb25cIiksXG4gICAgICBleGlzdGluZ0FjY291bnRzSnNvblN0cmluZyxcbiAgICAgIHsgbW9kZTogMG82MDAgfVxuICAgICk7XG5cbiAgICBjb25zdCBjb3N0QWxsb2NhdGlvblRhZ3NKc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICB0aGlzLmNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZyxcbiAgICAgIG51bGwsXG4gICAgICAyXG4gICAgKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgcGF0aC5qb2luKGNvbmZpZ0RpciwgXCJjb3N0LWFsbG9jYXRpb24tdGFncy1jb25maWcuanNvblwiKSxcbiAgICAgIGNvc3RBbGxvY2F0aW9uVGFnc0pzb25TdHJpbmcsXG4gICAgICB7IG1vZGU6IDBvNjAwIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBzZXJ2aWNlIHRvIHRoZSBjb25maWcgZmlsZVxuICAgKiBAcGFyYW0gc2VydmljZUtleSBOYW1lL2tleSBvZiB0aGUgc2VydmljZVxuICAgKiBAcGFyYW0gY29uZmlnIFNlcnZpY2UgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzXG4gICAqL1xuICBhZGRTZXJ2aWNlKHNlcnZpY2VLZXk6IHN0cmluZywgY29uZmlnOiBTZXJ2aWNlQ29uZmlnKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcuc2VydmljZXMpIHRoaXMucm9vdENvbmZpZy5zZXJ2aWNlcyA9IHt9O1xuICAgIHRoaXMucm9vdENvbmZpZy5zZXJ2aWNlc1tzZXJ2aWNlS2V5XSA9IGNvbmZpZztcbiAgfVxuXG4gIGdldFNlcnZpY2VDb25maWcoc2VydmljZUtleTogc3RyaW5nKTogU2VydmljZUNvbmZpZyB8IG51bGwge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnNlcnZpY2VzKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5yb290Q29uZmlnLnNlcnZpY2VzW3NlcnZpY2VLZXldIHx8IG51bGw7XG4gIH1cblxuICBhZGRQcm92aWRlckFjY291bnQoYWNjb3VudDogUHJvdmlkZXJBY2NvdW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcucHJvdmlkZXJBY2NvdW50cylcbiAgICAgIHRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzID0gW107XG5cbiAgICAvLyBlbnN1cmUgYWNjb3VudCBuYW1lIGlzIGFsd2F5cyBsb3dlcmNhc2VcbiAgICBhY2NvdW50Lm5hbWUgPSBhY2NvdW50Lm5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcblxuICAgIHRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzLnB1c2goYWNjb3VudCk7XG4gIH1cblxuICBnZXRQcm92aWRlckFjY291bnQoYWNjb3VudE5hbWU6IHN0cmluZyk6IFByb3ZpZGVyQWNjb3VudCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcucHJvdmlkZXJBY2NvdW50cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcy5yb290Q29uZmlnLnByb3ZpZGVyQWNjb3VudHMuZmluZChcbiAgICAgIChhY2NvdW50KSA9PlxuICAgICAgICBhY2NvdW50Lm5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gYWNjb3VudE5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICk7XG4gIH1cblxuICBnZXRQcm92aWRlckFjY291bnRCeUlkKGFjY291bnRJZDogc3RyaW5nKTogUHJvdmlkZXJBY2NvdW50IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcucHJvdmlkZXJBY2NvdW50cy5maW5kKFxuICAgICAgKGFjY291bnQpID0+IGFjY291bnQuaWQgPT09IGFjY291bnRJZFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHByb3ZpZGVyIGFjY291bnQgYnkgZW52aXJvbm1lbnQgdHlwZVxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnQgVGhlIGVudmlyb25tZW50IHR5cGUgKGUuZy4sICdwbGF0Zm9ybScsICdzdGFnaW5nJywgJ3Byb2R1Y3Rpb24nKVxuICAgKiBAcmV0dXJucyBUaGUgcHJvdmlkZXIgYWNjb3VudCB3aXRoIHRoZSBzcGVjaWZpZWQgZW52aXJvbm1lbnQgb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgZ2V0QWNjb3VudEJ5RW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZyk6IFByb3ZpZGVyQWNjb3VudCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcucHJvdmlkZXJBY2NvdW50cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcy5yb290Q29uZmlnLnByb3ZpZGVyQWNjb3VudHMuZmluZChcbiAgICAgIChhY2NvdW50KSA9PiBhY2NvdW50LmVudmlyb25tZW50ID09PSBlbnZpcm9ubWVudFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZXhpc3RpbmcgYWNjb3VudHMgbGlzdC4gVGhpcyBzaG91bGQgYmUgY2FsbGVkIGJ5IEFjY291bnRTZXJ2aWNlXG4gICAqIGFmdGVyIGl0IGZldGNoZXMgdGhlIGFjY291bnRzIGZyb20gQVdTLlxuICAgKiBAcGFyYW0gYWNjb3VudHMgTGlzdCBvZiBBV1MgYWNjb3VudHMgZnJvbSBPcmdhbml6YXRpb25zIEFQSVxuICAgKi9cbiAgc2V0RXhpc3RpbmdBY2NvdW50c0xpc3QoYWNjb3VudHM6IEFjY291bnRbXSk6IHZvaWQge1xuICAgIHRoaXMuZXhpc3RpbmdBY2NvdW50c0NvbmZpZyA9IGFjY291bnRzO1xuICB9XG5cbiAgZ2V0RXhpc3RpbmdBY2NvdW50cygpOiBBY2NvdW50W10ge1xuICAgIHJldHVybiB0aGlzLmV4aXN0aW5nQWNjb3VudHNDb25maWc7XG4gIH1cblxuICBzZXRQcmltYXJ5UmVnaW9uKHJlZ2lvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yb290Q29uZmlnLnByaW1hcnlSZWdpb24gPSByZWdpb247XG4gIH1cblxuICBzZXRTZWNvbmRhcnlSZWdpb25zKHJlZ2lvbnM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5yb290Q29uZmlnLnNlY29uZGFyeVJlZ2lvbnMgPSByZWdpb25zO1xuICB9XG5cbiAgc2V0RGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbihyZWdpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucm9vdENvbmZpZy5kaXNhc3RlclJlY292ZXJ5UmVnaW9uID0gcmVnaW9uO1xuICB9XG5cbiAgZ2V0UHJpbWFyeVJlZ2lvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcucHJpbWFyeVJlZ2lvbjtcbiAgfVxuXG4gIGdldFNlY29uZGFyeVJlZ2lvbnMoKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcuc2Vjb25kYXJ5UmVnaW9ucztcbiAgfVxuXG4gIGdldERpc2FzdGVyUmVjb3ZlcnlSZWdpb24oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yb290Q29uZmlnLmRpc2FzdGVyUmVjb3ZlcnlSZWdpb247XG4gIH1cblxuICBnZXRBbGxSZWdpb25zKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZWdpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMucm9vdENvbmZpZy5wcmltYXJ5UmVnaW9uKSB7XG4gICAgICByZWdpb25zLnB1c2godGhpcy5yb290Q29uZmlnLnByaW1hcnlSZWdpb24pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJvb3RDb25maWcuc2Vjb25kYXJ5UmVnaW9ucykge1xuICAgICAgcmVnaW9ucy5wdXNoKC4uLnRoaXMucm9vdENvbmZpZy5zZWNvbmRhcnlSZWdpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnJvb3RDb25maWcuZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbiAmJlxuICAgICAgIXJlZ2lvbnMuaW5jbHVkZXModGhpcy5yb290Q29uZmlnLmRpc2FzdGVyUmVjb3ZlcnlSZWdpb24pXG4gICAgKSB7XG4gICAgICByZWdpb25zLnB1c2godGhpcy5yb290Q29uZmlnLmRpc2FzdGVyUmVjb3ZlcnlSZWdpb24pO1xuICAgIH1cblxuICAgIHJldHVybiByZWdpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGNvc3QgYWxsb2NhdGlvbiB0YWdzIGxpc3QuIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBieSBBY2NvdW50U2VydmljZVxuICAgKiBhZnRlciBpdCBmZXRjaGVzIHRoZSB0YWdzIGZyb20gQVdTIENvc3QgRXhwbG9yZXIuXG4gICAqIEBwYXJhbSB0YWdzIExpc3Qgb2YgY29zdCBhbGxvY2F0aW9uIHRhZ3NcbiAgICovXG4gIHNldENvc3RBbGxvY2F0aW9uVGFnc0xpc3QodGFnczogQ29zdEFsbG9jYXRpb25UYWdzW10pOiB2b2lkIHtcbiAgICB0aGlzLmNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZyA9IHRhZ3M7XG4gIH1cblxuICBnZXRDb3N0QWxsb2NhdGlvblRhZ3MoKTogQ29zdEFsbG9jYXRpb25UYWdzW10ge1xuICAgIHJldHVybiB0aGlzLmNvc3RBbGxvY2F0aW9uVGFnc0NvbmZpZztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZqYWxsIGNvbmZpZyBkaXJlY3RvcnkgcGF0aFxuICAgKiBAcmV0dXJucyBUaGUgcGF0aCB0byB0aGUgZmphbGwgY29uZmlnIGRpcmVjdG9yeSBvciBudWxsIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgc3RhdGljIGdldENvbmZpZ0RpcmVjdG9yeSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gQ29uZmlnLmZpbmRDb25maWdEaXJlY3RvcnkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9maWxlIG1hbmFnZW1lbnQgbWV0aG9kc1xuICAgKi9cblxuICAvKipcbiAgICogR2V0cyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBwcm9maWxlLlxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBwcm9maWxlIG5hbWUsIG9yIHVuZGVmaW5lZCBpZiBubyBwcm9maWxlIGlzIHNldFxuICAgKi9cbiAgZ2V0Q3VycmVudFByb2ZpbGUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yb290Q29uZmlnLmN1cnJlbnRQcm9maWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGN1cnJlbnRseSBhY3RpdmUgcHJvZmlsZS5cbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb2ZpbGUgdG8gc2V0IGFzIGN1cnJlbnRcbiAgICovXG4gIHNldEN1cnJlbnRQcm9maWxlKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucm9vdENvbmZpZy5jdXJyZW50UHJvZmlsZSA9IG5hbWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgcHJvZmlsZSBieSBuYW1lLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvZmlsZSB0byByZXRyaWV2ZVxuICAgKiBAcmV0dXJucyBUaGUgcHJvZmlsZSBjb25maWd1cmF0aW9uLCBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kXG4gICAqL1xuICBnZXRQcm9maWxlKG5hbWU6IHN0cmluZyk6IFByb2ZpbGUgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnByb2ZpbGVzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcucHJvZmlsZXNbbmFtZV07XG4gIH1cblxuICBnZXRBbGxQcm9maWxlTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnByb2ZpbGVzKSByZXR1cm4gW107XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucm9vdENvbmZpZy5wcm9maWxlcyk7XG4gIH1cblxuICBhZGRQcm9maWxlKG5hbWU6IHN0cmluZywgcHJvZmlsZTogUHJvZmlsZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnByb2ZpbGVzKSB7XG4gICAgICB0aGlzLnJvb3RDb25maWcucHJvZmlsZXMgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5yb290Q29uZmlnLnByb2ZpbGVzW25hbWVdID0gcHJvZmlsZTtcbiAgfVxuXG4gIHJlbW92ZVByb2ZpbGUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcucHJvZmlsZXMpIHJldHVybjtcbiAgICBkZWxldGUgdGhpcy5yb290Q29uZmlnLnByb2ZpbGVzW25hbWVdO1xuXG4gICAgLy8gSWYgd2UgcmVtb3ZlZCB0aGUgY3VycmVudCBwcm9maWxlLCBjbGVhciBpdFxuICAgIGlmICh0aGlzLnJvb3RDb25maWcuY3VycmVudFByb2ZpbGUgPT09IG5hbWUpIHtcbiAgICAgIHRoaXMucm9vdENvbmZpZy5jdXJyZW50UHJvZmlsZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBnZXRTU09TZXNzaW9uKG5hbWU6IHN0cmluZyk6IFNTT1Nlc3Npb24gfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnNzb1Nlc3Npb25zKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcuc3NvU2Vzc2lvbnNbbmFtZV07XG4gIH1cblxuICBhZGRTU09TZXNzaW9uKG5hbWU6IHN0cmluZywgc2Vzc2lvbjogU1NPU2Vzc2lvbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5yb290Q29uZmlnLnNzb1Nlc3Npb25zKSB7XG4gICAgICB0aGlzLnJvb3RDb25maWcuc3NvU2Vzc2lvbnMgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5yb290Q29uZmlnLnNzb1Nlc3Npb25zW25hbWVdID0gc2Vzc2lvbjtcbiAgfVxuXG4gIGdldE9yZ0xldmVsQ29uZmlnKCk6IE9yZ0xldmVsQ29uZmlnIHtcbiAgICAvLyBEZXJpdmUgcm9vdE9pZGNSb2xlQXJuIGZyb20gdGhlIHJvb3QgYWNjb3VudCdzIE9JREMgcHJvZmlsZSBpZiBhdmFpbGFibGUsXG4gICAgLy8gZmFsbGluZyBiYWNrIHRvIHRoZSBleHBsaWNpdGx5IHN0b3JlZCBmaWVsZCAoc2V0IGR1cmluZyBjb25maWcgcHVsbClcbiAgICBjb25zdCByb290QWNjb3VudCA9IHRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzPy5maW5kKFxuICAgICAgKGEpID0+IGEuZW52aXJvbm1lbnQgPT09IFwicm9vdFwiXG4gICAgKTtcbiAgICBjb25zdCByb290UHJvZmlsZU5hbWUgPSByb290QWNjb3VudD8ubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHJvb3RQcm9maWxlID0gcm9vdFByb2ZpbGVOYW1lXG4gICAgICA/IHRoaXMucm9vdENvbmZpZy5wcm9maWxlcz8uW3Jvb3RQcm9maWxlTmFtZV1cbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGRlcml2ZWRSb2xlQXJuID1cbiAgICAgIHJvb3RQcm9maWxlPy50eXBlID09PSBcIm9pZGNcIiA/IHJvb3RQcm9maWxlLm9pZGNSb2xlQXJuIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByaW1hcnlSZWdpb246IHRoaXMucm9vdENvbmZpZy5wcmltYXJ5UmVnaW9uLFxuICAgICAgc2Vjb25kYXJ5UmVnaW9uczogdGhpcy5yb290Q29uZmlnLnNlY29uZGFyeVJlZ2lvbnMsXG4gICAgICBkaXNhc3RlclJlY292ZXJ5UmVnaW9uOiB0aGlzLnJvb3RDb25maWcuZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbixcbiAgICAgIHByb3ZpZGVyQWNjb3VudHM6IHRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzLFxuICAgICAgc3NvU2Vzc2lvbnM6IHRoaXMucm9vdENvbmZpZy5zc29TZXNzaW9ucyxcbiAgICAgIHJvb3RPaWRjUm9sZUFybjogZGVyaXZlZFJvbGVBcm4gPz8gdGhpcy5yb290Q29uZmlnLnJvb3RPaWRjUm9sZUFyblxuICAgIH07XG4gIH1cblxuICBnZXRPcmdhbmlzYXRpb25JZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcub3JnYW5pc2F0aW9uSWQ7XG4gIH1cblxuICBzZXRPcmdhbmlzYXRpb25JZChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yb290Q29uZmlnLm9yZ2FuaXNhdGlvbklkID0gaWQ7XG4gIH1cblxuICBnZXRPcmdhbmlzYXRpb25OYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5vcmdhbmlzYXRpb25OYW1lO1xuICB9XG5cbiAgc2V0T3JnYW5pc2F0aW9uTmFtZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJvb3RDb25maWcub3JnYW5pc2F0aW9uTmFtZSA9IG5hbWU7XG4gIH1cblxuICBnZXRPcmdhbmlzYXRpb25FbWFpbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvb3RDb25maWcub3JnYW5pc2F0aW9uRW1haWw7XG4gIH1cblxuICBzZXRPcmdhbmlzYXRpb25FbWFpbChlbWFpbDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yb290Q29uZmlnLm9yZ2FuaXNhdGlvbkVtYWlsID0gZW1haWw7XG4gIH1cblxuICBnZXRPaWRjSXNzdWVyVXJsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5vaWRjSXNzdWVyVXJsO1xuICB9XG5cbiAgc2V0T2lkY0lzc3VlclVybCh1cmw6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucm9vdENvbmZpZy5vaWRjSXNzdWVyVXJsID0gdXJsO1xuICB9XG5cbiAgZ2V0T2lkY0Nvbm5lY3Rpb24oYWNjb3VudElkOiBzdHJpbmcpOiBPaWRjQ29ubmVjdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucm9vdENvbmZpZy5vaWRjQ29ubmVjdGlvbnM/LlthY2NvdW50SWRdO1xuICB9XG5cbiAgc2V0T2lkY0Nvbm5lY3Rpb24oYWNjb3VudElkOiBzdHJpbmcsIGNvbm5lY3Rpb246IE9pZGNDb25uZWN0aW9uKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJvb3RDb25maWcub2lkY0Nvbm5lY3Rpb25zKSB7XG4gICAgICB0aGlzLnJvb3RDb25maWcub2lkY0Nvbm5lY3Rpb25zID0ge307XG4gICAgfVxuICAgIHRoaXMucm9vdENvbmZpZy5vaWRjQ29ubmVjdGlvbnNbYWNjb3VudElkXSA9IGNvbm5lY3Rpb247XG4gIH1cblxuICBzZXRPcmdMZXZlbENvbmZpZyhjb25maWc6IE9yZ0xldmVsQ29uZmlnKTogdm9pZCB7XG4gICAgaWYgKGNvbmZpZy5wcmltYXJ5UmVnaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucm9vdENvbmZpZy5wcmltYXJ5UmVnaW9uID0gY29uZmlnLnByaW1hcnlSZWdpb247XG4gICAgfVxuICAgIGlmIChjb25maWcuc2Vjb25kYXJ5UmVnaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnJvb3RDb25maWcuc2Vjb25kYXJ5UmVnaW9ucyA9IGNvbmZpZy5zZWNvbmRhcnlSZWdpb25zO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmRpc2FzdGVyUmVjb3ZlcnlSZWdpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yb290Q29uZmlnLmRpc2FzdGVyUmVjb3ZlcnlSZWdpb24gPSBjb25maWcuZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbjtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5wcm92aWRlckFjY291bnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucm9vdENvbmZpZy5wcm92aWRlckFjY291bnRzID0gY29uZmlnLnByb3ZpZGVyQWNjb3VudHM7XG4gICAgfVxuICAgIGlmIChjb25maWcuc3NvU2Vzc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yb290Q29uZmlnLnNzb1Nlc3Npb25zID0gY29uZmlnLnNzb1Nlc3Npb25zO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnJvb3RPaWRjUm9sZUFybiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnJvb3RDb25maWcucm9vdE9pZGNSb2xlQXJuID0gY29uZmlnLnJvb3RPaWRjUm9sZUFybjtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fjall/util",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.88.1",
|
|
4
4
|
"description": "Common utility methods",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -33,5 +33,5 @@
|
|
|
33
33
|
"engines": {
|
|
34
34
|
"node": ">=18.0.0"
|
|
35
35
|
},
|
|
36
|
-
"gitHead": "
|
|
36
|
+
"gitHead": "0c0785e2908bff823b0630a4fa896748384c265f"
|
|
37
37
|
}
|