@dollhousemcp/mcp-server 2.0.35 → 2.0.37
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/CHANGELOG.md +11 -0
- package/dist/elements/base/BaseElementManager.d.ts.map +1 -1
- package/dist/elements/base/BaseElementManager.js +6 -2
- package/dist/elements/memories/Memory.d.ts.map +1 -1
- package/dist/elements/memories/Memory.js +9 -2
- package/dist/elements/memories/MemoryManager.d.ts +13 -0
- package/dist/elements/memories/MemoryManager.d.ts.map +1 -1
- package/dist/elements/memories/MemoryManager.js +57 -44
- package/dist/elements/memories/constants.js +2 -2
- package/dist/elements/templates/Template.d.ts +2 -0
- package/dist/elements/templates/Template.d.ts.map +1 -1
- package/dist/elements/templates/Template.js +9 -1
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/handlers/GitHubAuthHandler.d.ts +12 -0
- package/dist/handlers/GitHubAuthHandler.d.ts.map +1 -1
- package/dist/handlers/GitHubAuthHandler.js +303 -60
- package/dist/handlers/element-crud/editElement.d.ts.map +1 -1
- package/dist/handlers/element-crud/editElement.js +24 -11
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +62 -0
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.js +209 -34
- package/dist/security/contentValidator.d.ts +32 -1
- package/dist/security/contentValidator.d.ts.map +1 -1
- package/dist/security/contentValidator.js +79 -33
- package/dist/security/secureYamlParser.d.ts.map +1 -1
- package/dist/security/secureYamlParser.js +5 -2
- package/dist/security/tokenManager.d.ts +1 -1
- package/dist/security/tokenManager.d.ts.map +1 -1
- package/dist/security/tokenManager.js +10 -7
- package/dist/storage/MemoryMetadataExtractor.d.ts +4 -1
- package/dist/storage/MemoryMetadataExtractor.d.ts.map +1 -1
- package/dist/storage/MemoryMetadataExtractor.js +7 -3
- package/dist/utils/pathSecurity.d.ts +3 -1
- package/dist/utils/pathSecurity.d.ts.map +1 -1
- package/dist/utils/pathSecurity.js +38 -2
- package/dist/web/routes/setupRoutes.d.ts +23 -7
- package/dist/web/routes/setupRoutes.d.ts.map +1 -1
- package/dist/web/routes/setupRoutes.js +138 -20
- package/oauth-helper.mjs +233 -92
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -136,8 +136,39 @@ export declare class ContentValidator {
|
|
|
136
136
|
/**
|
|
137
137
|
* Validates YAML frontmatter for malicious content
|
|
138
138
|
* SECURITY FIX #364: Added YAML bomb detection to prevent denial of service
|
|
139
|
+
*
|
|
140
|
+
* @param yamlContent - YAML string to validate
|
|
141
|
+
* @param maxLength - Size cap for the content. Defaults to MAX_YAML_LENGTH (64KB,
|
|
142
|
+
* the frontmatter limit). Callers validating whole pure-YAML documents (e.g.
|
|
143
|
+
* memory files, capped at 256KB — issue #2329) must pass their own limit.
|
|
144
|
+
* Values above MAX_CONTENT_LENGTH (500KB) are clamped: an explicit maxLength
|
|
145
|
+
* overrides RegexValidator's complexity-based ReDoS caps, and the
|
|
146
|
+
* MALICIOUS_YAML_PATTERNS scan below is bounded by MAX_CONTENT_LENGTH, so
|
|
147
|
+
* larger content is rejected here rather than scanned or thrown on.
|
|
148
|
+
*/
|
|
149
|
+
static validateYamlContent(yamlContent: string, maxLength?: number): boolean;
|
|
150
|
+
/**
|
|
151
|
+
* SECURITY FIX #364: Check for YAML bombs before other validation.
|
|
152
|
+
* SECURITY FIX (PR #552 review): Uses RegexValidator for ReDoS protection.
|
|
153
|
+
*/
|
|
154
|
+
private static hasYamlBombPattern;
|
|
155
|
+
/**
|
|
156
|
+
* SECURITY FIX #364: Count anchor/alias ratio for amplification detection.
|
|
157
|
+
* SECURITY FIX #1298: Uses configurable threshold for easier tuning.
|
|
158
|
+
*/
|
|
159
|
+
private static hasExcessiveAliasAmplification;
|
|
160
|
+
/**
|
|
161
|
+
* First pass of circular-reference detection: map each anchor to the alias
|
|
162
|
+
* names referenced within its next 5 lines.
|
|
163
|
+
*/
|
|
164
|
+
private static buildAnchorReferenceMap;
|
|
165
|
+
/**
|
|
166
|
+
* SECURITY FIX #364: Detect circular reference chains.
|
|
167
|
+
* SECURITY FIX (PR #552 review): Optimized from O(n²) to O(n) using Set-based lookups.
|
|
139
168
|
*/
|
|
140
|
-
static
|
|
169
|
+
private static hasCircularAnchorReferences;
|
|
170
|
+
/** Scan normalized YAML for the MALICIOUS_YAML_PATTERNS set. */
|
|
171
|
+
private static hasMaliciousYamlPattern;
|
|
141
172
|
/**
|
|
142
173
|
* Validates persona metadata fields
|
|
143
174
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contentValidator.d.ts","sourceRoot":"","sources":["../../src/security/contentValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAG1E,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAEtE,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAED,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;CACxE;AAED,qBAAa,gBAAgB;IAC3B;;;;;;;;;OASG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAqB;IAEjE,8DAA8D;IAC9D,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAInD,4EAA4E;IAC5E,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAMjD,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAsC;WAEzD,0BAA0B,CAAC,QAAQ,EAAE,MAAM,iBAAiB,GAAG,SAAS,GAAG,IAAI;IAI7F,OAAO,CAAC,MAAM,CAAC,YAAY;IAO3B;;;;;;;;;;;OAWG;IAIH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAwExC;IAKF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAcxC;IAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAkF7C;IAEF;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAOzC;IAEH;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAK5C;IAEH;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAc1C;IAEH;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAI1C;IAEH;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAuCtC;;;;;;;;;OASG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAiErC;;;;;;;;OAQG;IACH,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,uBAA4B,GAAG,uBAAuB;IAiF3G
|
|
1
|
+
{"version":3,"file":"contentValidator.d.ts","sourceRoot":"","sources":["../../src/security/contentValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAG1E,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAEtE,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAED,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;CACxE;AAED,qBAAa,gBAAgB;IAC3B;;;;;;;;;OASG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAqB;IAEjE,8DAA8D;IAC9D,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAInD,4EAA4E;IAC5E,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAMjD,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAsC;WAEzD,0BAA0B,CAAC,QAAQ,EAAE,MAAM,iBAAiB,GAAG,SAAS,GAAG,IAAI;IAI7F,OAAO,CAAC,MAAM,CAAC,YAAY;IAO3B;;;;;;;;;;;OAWG;IAIH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAwExC;IAKF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAcxC;IAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAkF7C;IAEF;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAOzC;IAEH;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAK5C;IAEH;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAc1C;IAEH;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAI1C;IAEH;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAuCtC;;;;;;;;;OASG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAiErC;;;;;;;;OAQG;IACH,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,uBAA4B,GAAG,uBAAuB;IAiF3G;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,GAAE,MAAwC,GAAG,OAAO;IAyC7G;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAqCjC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,8BAA8B;IAyB7C;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAyBtC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,2BAA2B;IA0B1C,gEAAgE;IAChE,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAqBtC;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,GAAG,uBAAuB;IA2C/D;;OAEG;IACH,MAAM,CAAC,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAkCvD"}
|
|
@@ -441,25 +441,60 @@ export class ContentValidator {
|
|
|
441
441
|
/**
|
|
442
442
|
* Validates YAML frontmatter for malicious content
|
|
443
443
|
* SECURITY FIX #364: Added YAML bomb detection to prevent denial of service
|
|
444
|
+
*
|
|
445
|
+
* @param yamlContent - YAML string to validate
|
|
446
|
+
* @param maxLength - Size cap for the content. Defaults to MAX_YAML_LENGTH (64KB,
|
|
447
|
+
* the frontmatter limit). Callers validating whole pure-YAML documents (e.g.
|
|
448
|
+
* memory files, capped at 256KB — issue #2329) must pass their own limit.
|
|
449
|
+
* Values above MAX_CONTENT_LENGTH (500KB) are clamped: an explicit maxLength
|
|
450
|
+
* overrides RegexValidator's complexity-based ReDoS caps, and the
|
|
451
|
+
* MALICIOUS_YAML_PATTERNS scan below is bounded by MAX_CONTENT_LENGTH, so
|
|
452
|
+
* larger content is rejected here rather than scanned or thrown on.
|
|
444
453
|
*/
|
|
445
|
-
static validateYamlContent(yamlContent) {
|
|
454
|
+
static validateYamlContent(yamlContent, maxLength = SECURITY_LIMITS.MAX_YAML_LENGTH) {
|
|
455
|
+
const effectiveMaxLength = Math.min(maxLength, SECURITY_LIMITS.MAX_CONTENT_LENGTH);
|
|
446
456
|
// Length validation before pattern matching
|
|
447
|
-
if (yamlContent.length >
|
|
457
|
+
if (yamlContent.length > effectiveMaxLength) {
|
|
448
458
|
SecurityMonitor.logSecurityEvent({
|
|
449
459
|
type: 'YAML_INJECTION_ATTEMPT',
|
|
450
460
|
severity: 'HIGH',
|
|
451
461
|
source: 'yaml_validation',
|
|
452
|
-
details: `YAML content exceeds maximum length: ${yamlContent.length} > ${
|
|
462
|
+
details: `YAML content exceeds maximum length: ${yamlContent.length} > ${effectiveMaxLength}`
|
|
463
|
+
});
|
|
464
|
+
return false;
|
|
465
|
+
}
|
|
466
|
+
if (this.hasYamlBombPattern(yamlContent, effectiveMaxLength)) {
|
|
467
|
+
return false;
|
|
468
|
+
}
|
|
469
|
+
if (this.hasExcessiveAliasAmplification(yamlContent)) {
|
|
470
|
+
return false;
|
|
471
|
+
}
|
|
472
|
+
if (this.hasCircularAnchorReferences(yamlContent)) {
|
|
473
|
+
return false;
|
|
474
|
+
}
|
|
475
|
+
// Unicode normalization preprocessing for YAML content
|
|
476
|
+
const unicodeResult = UnicodeValidator.normalize(yamlContent);
|
|
477
|
+
if (!unicodeResult.isValid && unicodeResult.detectedIssues) {
|
|
478
|
+
SecurityMonitor.logSecurityEvent({
|
|
479
|
+
type: 'YAML_UNICODE_ATTACK',
|
|
480
|
+
severity: (unicodeResult.severity?.toUpperCase() || 'MEDIUM'),
|
|
481
|
+
source: 'yaml_validation',
|
|
482
|
+
details: `Unicode attack detected in YAML: ${unicodeResult.detectedIssues.join(', ')}`
|
|
453
483
|
});
|
|
454
484
|
return false;
|
|
455
485
|
}
|
|
456
|
-
|
|
457
|
-
|
|
486
|
+
return !this.hasMaliciousYamlPattern(unicodeResult.normalizedContent);
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* SECURITY FIX #364: Check for YAML bombs before other validation.
|
|
490
|
+
* SECURITY FIX (PR #552 review): Uses RegexValidator for ReDoS protection.
|
|
491
|
+
*/
|
|
492
|
+
static hasYamlBombPattern(yamlContent, effectiveMaxLength) {
|
|
458
493
|
for (const pattern of this.YAML_BOMB_PATTERNS) {
|
|
459
494
|
// Use RegexValidator to safely check patterns with timeout protection
|
|
460
495
|
// This prevents ReDoS attacks from maliciously crafted YAML
|
|
461
496
|
const isMatch = RegexValidator.validate(yamlContent, pattern, {
|
|
462
|
-
maxLength:
|
|
497
|
+
maxLength: effectiveMaxLength,
|
|
463
498
|
rejectDangerousPatterns: false, // Our patterns are trusted
|
|
464
499
|
logEvents: false // We handle logging ourselves
|
|
465
500
|
});
|
|
@@ -476,11 +511,16 @@ export class ContentValidator {
|
|
|
476
511
|
});
|
|
477
512
|
// Record in telemetry
|
|
478
513
|
ContentValidator.getTelemetry()?.recordBlockedAttack('YAML_BOMB', `YAML bomb pattern: ${pattern.source}`, 'CRITICAL', 'yaml_validation', { patternType: 'YAML_BOMB', contentLength: yamlContent.length });
|
|
479
|
-
return
|
|
514
|
+
return true;
|
|
480
515
|
}
|
|
481
516
|
}
|
|
482
|
-
|
|
483
|
-
|
|
517
|
+
return false;
|
|
518
|
+
}
|
|
519
|
+
/**
|
|
520
|
+
* SECURITY FIX #364: Count anchor/alias ratio for amplification detection.
|
|
521
|
+
* SECURITY FIX #1298: Uses configurable threshold for easier tuning.
|
|
522
|
+
*/
|
|
523
|
+
static hasExcessiveAliasAmplification(yamlContent) {
|
|
484
524
|
const anchorMatches = yamlContent.match(/&\w+/g) || [];
|
|
485
525
|
// Fix #906: Use negative lookbehind to exclude markdown bold (**word**) from
|
|
486
526
|
// matching as YAML aliases. Without this, markdown bold inside YAML strings
|
|
@@ -499,13 +539,16 @@ export class ContentValidator {
|
|
|
499
539
|
ratio: amplificationRatio
|
|
500
540
|
}
|
|
501
541
|
});
|
|
502
|
-
return
|
|
542
|
+
return true;
|
|
503
543
|
}
|
|
504
|
-
|
|
505
|
-
|
|
544
|
+
return false;
|
|
545
|
+
}
|
|
546
|
+
/**
|
|
547
|
+
* First pass of circular-reference detection: map each anchor to the alias
|
|
548
|
+
* names referenced within its next 5 lines.
|
|
549
|
+
*/
|
|
550
|
+
static buildAnchorReferenceMap(lines) {
|
|
506
551
|
const anchorRefs = new Map();
|
|
507
|
-
const lines = yamlContent.split('\n');
|
|
508
|
-
// First pass: Build reference map efficiently
|
|
509
552
|
for (let i = 0; i < lines.length; i++) {
|
|
510
553
|
const anchorMatch = lines[i].match(/&(\w+)/);
|
|
511
554
|
if (anchorMatch) {
|
|
@@ -524,7 +567,15 @@ export class ContentValidator {
|
|
|
524
567
|
anchorRefs.set(anchorName, references);
|
|
525
568
|
}
|
|
526
569
|
}
|
|
527
|
-
|
|
570
|
+
return anchorRefs;
|
|
571
|
+
}
|
|
572
|
+
/**
|
|
573
|
+
* SECURITY FIX #364: Detect circular reference chains.
|
|
574
|
+
* SECURITY FIX (PR #552 review): Optimized from O(n²) to O(n) using Set-based lookups.
|
|
575
|
+
*/
|
|
576
|
+
static hasCircularAnchorReferences(yamlContent) {
|
|
577
|
+
const anchorRefs = this.buildAnchorReferenceMap(yamlContent.split('\n'));
|
|
578
|
+
// Check for circular references (O(n) with Set lookups)
|
|
528
579
|
for (const [anchor1, refs1] of anchorRefs) {
|
|
529
580
|
for (const refAnchor of refs1) {
|
|
530
581
|
const refs2 = anchorRefs.get(refAnchor);
|
|
@@ -540,22 +591,14 @@ export class ContentValidator {
|
|
|
540
591
|
anchors: [anchor1, refAnchor]
|
|
541
592
|
}
|
|
542
593
|
});
|
|
543
|
-
return
|
|
594
|
+
return true;
|
|
544
595
|
}
|
|
545
596
|
}
|
|
546
597
|
}
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
SecurityMonitor.logSecurityEvent({
|
|
552
|
-
type: 'YAML_UNICODE_ATTACK',
|
|
553
|
-
severity: (unicodeResult.severity?.toUpperCase() || 'MEDIUM'),
|
|
554
|
-
source: 'yaml_validation',
|
|
555
|
-
details: `Unicode attack detected in YAML: ${unicodeResult.detectedIssues.join(', ')}`
|
|
556
|
-
});
|
|
557
|
-
return false;
|
|
558
|
-
}
|
|
598
|
+
return false;
|
|
599
|
+
}
|
|
600
|
+
/** Scan normalized YAML for the MALICIOUS_YAML_PATTERNS set. */
|
|
601
|
+
static hasMaliciousYamlPattern(normalizedYaml) {
|
|
559
602
|
for (const pattern of this.MALICIOUS_YAML_PATTERNS) {
|
|
560
603
|
// These are trusted internal patterns, so we disable ReDoS rejection
|
|
561
604
|
if (RegexValidator.validate(normalizedYaml, pattern, {
|
|
@@ -570,10 +613,10 @@ export class ContentValidator {
|
|
|
570
613
|
details: `Malicious YAML pattern detected: ${pattern}`,
|
|
571
614
|
});
|
|
572
615
|
// Early exit on first match for performance
|
|
573
|
-
return
|
|
616
|
+
return true;
|
|
574
617
|
}
|
|
575
618
|
}
|
|
576
|
-
return
|
|
619
|
+
return false;
|
|
577
620
|
}
|
|
578
621
|
/**
|
|
579
622
|
* Validates persona metadata fields
|
|
@@ -583,9 +626,12 @@ export class ContentValidator {
|
|
|
583
626
|
// Check all string fields in metadata
|
|
584
627
|
const checkField = (fieldName, value) => {
|
|
585
628
|
if (typeof value === 'string') {
|
|
629
|
+
const maxLength = fieldName === 'description'
|
|
630
|
+
? SECURITY_LIMITS.MAX_DESCRIPTION_LENGTH
|
|
631
|
+
: SECURITY_LIMITS.MAX_METADATA_FIELD_LENGTH;
|
|
586
632
|
// Check field length first
|
|
587
|
-
if (value.length >
|
|
588
|
-
detectedPatterns.push(`${fieldName}: Field exceeds maximum length of ${
|
|
633
|
+
if (value.length > maxLength) {
|
|
634
|
+
detectedPatterns.push(`${fieldName}: Field exceeds maximum length of ${maxLength} characters`);
|
|
589
635
|
return;
|
|
590
636
|
}
|
|
591
637
|
const result = this.validateAndSanitize(value);
|
|
@@ -644,4 +690,4 @@ export class ContentValidator {
|
|
|
644
690
|
return `---\n${yamlContent}\n---${contentResult.sanitizedContent || markdownContent}`;
|
|
645
691
|
}
|
|
646
692
|
}
|
|
647
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudFZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWN1cml0eS9jb250ZW50VmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBaUNwRSxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCOzs7Ozs7Ozs7T0FTRztJQUNLLE1BQU0sQ0FBVSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBRWpFLDhEQUE4RDtJQUM5RCxNQUFNLENBQUMsbUJBQW1CLENBQUMsU0FBaUI7UUFDMUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFlO1FBQ3JDLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksS0FBSyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDdkQsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEUsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFD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ICogQ29udGVudCBWYWxpZGF0b3IgZm9yIERvbGxob3VzZU1DUFxuICogXG4gKiBQcm90ZWN0cyBhZ2FpbnN0IHByb21wdCBpbmplY3Rpb24gYXR0YWNrcyBpbiBjb2xsZWN0aW9uIHBlcnNvbmFzXG4gKiBieSBkZXRlY3RpbmcgYW5kIHNhbml0aXppbmcgbWFsaWNpb3VzIGNvbnRlbnQgcGF0dGVybnMuXG4gKiBcbiAqIFNlY3VyaXR5OiBTRUMtMDAxIC0gQ3JpdGljYWwgdnVsbmVyYWJpbGl0eSBwcm90ZWN0aW9uXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ25vZGU6Y3J5cHRvJztcbmltcG9ydCB7IFNlY3VyaXR5RXJyb3IgfSBmcm9tICcuL2Vycm9ycy5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuL3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgUmVnZXhWYWxpZGF0b3IgfSBmcm9tICcuL3JlZ2V4VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNFQ1VSSVRZX0xJTUlUUyB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuL3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgdHlwZSB7IFNlY3VyaXR5VGVsZW1ldHJ5IH0gZnJvbSAnLi90ZWxlbWV0cnkvU2VjdXJpdHlUZWxlbWV0cnkuanMnO1xuXG4vLyBGSVg6IFNvbmFyQ2xvdWQgdHlwZXNjcmlwdDpTNDMyMyAtIEV4dHJhY3QgdW5pb24gdHlwZSB0byB0eXBlIGFsaWFzIGZvciBtYWludGFpbmFiaWxpdHlcbmV4cG9ydCB0eXBlIFNlY3VyaXR5U2V2ZXJpdHkgPSAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnIHwgJ2NyaXRpY2FsJztcblxuZXhwb3J0IGludGVyZmFjZSBDb250ZW50VmFsaWRhdGlvblJlc3VsdCB7XG4gIGlzVmFsaWQ6IGJvb2xlYW47XG4gIHNhbml0aXplZENvbnRlbnQ/OiBzdHJpbmc7XG4gIGRldGVjdGVkUGF0dGVybnM/OiBzdHJpbmdbXTtcbiAgc2V2ZXJpdHk/OiBTZWN1cml0eVNldmVyaXR5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRWYWxpZGF0b3JPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNraXAgc2l6ZSBsaW1pdCBjaGVja3MgLSB1c2VmdWwgZm9yIG1lbW9yeSBjb250ZW50IHRoYXQgY2FuIGJlIGxhcmdlXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBza2lwU2l6ZUNoZWNrPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEN1c3RvbSBtYXggbGVuZ3RoIG92ZXJyaWRlXG4gICAqIEBkZWZhdWx0IFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEhcbiAgICovXG4gIG1heExlbmd0aD86IG51bWJlcjtcbiAgLyoqXG4gICAqIEVsZW1lbnQgdHlwZSBjb250ZXh0IGZvciBjb250ZXh0LWF3YXJlIHBhdHRlcm4gbWF0Y2hpbmcuXG4gICAqIFNraWxscyBtYXkgbGVnaXRpbWF0ZWx5IGNvbnRhaW4gY29kZSBwYXR0ZXJucyAoZXZhbCwgZXhlYywgcmVxdWlyZSlcbiAgICogdGhhdCB3b3VsZCBiZSBibG9ja2VkIGluIG90aGVyIGNvbnRleHRzLlxuICAgKiBAc2luY2UgSXNzdWUgIzQ1NlxuICAgKi9cbiAgY29udGVudENvbnRleHQ/OiAncGVyc29uYScgfCAnc2tpbGwnIHwgJ3RlbXBsYXRlJyB8ICdhZ2VudCcgfCAnbWVtb3J5Jztcbn1cblxuZXhwb3J0IGNsYXNzIENvbnRlbnRWYWxpZGF0b3Ige1xuICAvKipcbiAgICogU0hBLTI1NiBoYXNoZXMgb2YgYnVuZGxlZCBkYXRhLyBlbGVtZW50cyB2ZXJpZmllZCBhZ2FpbnN0IEhBU0hFUy5qc29uIGF0IHNlZWQgdGltZS5cbiAgICogQ29udGVudCB3aG9zZSBoYXNoIGlzIGluIHRoaXMgc2V0IGJ5cGFzc2VzIGluamVjdGlvbi1wYXR0ZXJuIGNoZWNrcyDigJQgaXQgd2FzXG4gICAqIHZldHRlZCBieSB0aGUgRG9sbGhvdXNlTUNQIHRlYW0gYmVmb3JlIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBucG0gcGFja2FnZS5cbiAgICogVW5pY29kZSBhbmQgWUFNTC1ib21iIGNoZWNrcyBzdGlsbCBydW4gcmVnYXJkbGVzcy5cbiAgICpcbiAgICogUG9wdWxhdGVkIGJ5IERlZmF1bHRFbGVtZW50UHJvdmlkZXIucmVnaXN0ZXJCdW5kbGVkSGFzaGVzKCkgb24gc3RhcnR1cC5cbiAgICogT25seSBjb250ZW50IHRoYXQgbWF0Y2hlcyB0aGUgcHVibGlzaGVkIEhBU0hFUy5qc29uIGlzIHJlZ2lzdGVyZWQg4oCUIGFueVxuICAgKiBtb2RpZmljYXRpb24gdG8gYSBidW5kbGVkIGZpbGUgYWZ0ZXIgaW5zdGFsbCBicmVha3MgdGhlIGhhc2ggYW5kIHJldm9rZXMgdHJ1c3QuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBidW5kbGVkQ29udGVudEhhc2hlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIC8qKiBSZWdpc3RlciBhIFNIQS0yNTYgaGV4IGhhc2ggYXMgdHJ1c3RlZCBidW5kbGVkIGNvbnRlbnQuICovXG4gIHN0YXRpYyByZWdpc3RlckJ1bmRsZWRIYXNoKHNoYTI1NmhleDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5idW5kbGVkQ29udGVudEhhc2hlcy5hZGQoc2hhMjU2aGV4KTtcbiAgfVxuXG4gIC8qKiBUcnVlIGlmIHRoZSBnaXZlbiBjb250ZW50IGhhc2ggYmVsb25ncyB0byBhIHZlcmlmaWVkIGJ1bmRsZWQgZWxlbWVudC4gKi9cbiAgc3RhdGljIGlzQnVuZGxlZENvbnRlbnQoY29udGVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuYnVuZGxlZENvbnRlbnRIYXNoZXMuc2l6ZSA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGhhc2ggPSBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoY29udGVudCkuZGlnZXN0KCdoZXgnKTtcbiAgICByZXR1cm4gdGhpcy5idW5kbGVkQ29udGVudEhhc2hlcy5oYXMoaGFzaCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyB0ZWxlbWV0cnlSZXNvbHZlcj86ICgpID0+IFNlY3VyaXR5VGVsZW1ldHJ5IHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBzdGF0aWMgY29uZmlndXJlVGVsZW1ldHJ5UmVzb2x2ZXIocmVzb2x2ZXI6ICgpID0+IFNlY3VyaXR5VGVsZW1ldHJ5IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy50ZWxlbWV0cnlSZXNvbHZlciA9IHJlc29sdmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0VGVsZW1ldHJ5KCk6IFNlY3VyaXR5VGVsZW1ldHJ5IHwgdW5kZWZpbmVkIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMudGVsZW1ldHJ5UmVzb2x2ZXIgPyB0aGlzLnRlbGVtZXRyeVJlc29sdmVyKCkgOiB1bmRlZmluZWQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUGF0dGVybi1iYXNlZCBkZXRlY3Rpb24gc3lzdGVtIGZvciBwcm9tcHQgaW5qZWN0aW9uIGF0dGFja3MuXG4gICAqIFxuICAgKiBUaGlzIGFwcHJvYWNoIHdhcyBjaG9zZW4gb3ZlciBBSS1iYXNlZCBkZXRlY3Rpb24gYmVjYXVzZTpcbiAgICogMS4gUGF0dGVybiBtYXRjaGluZyBjYW5ub3QgYmUgc29jaWFsbHkgZW5naW5lZXJlZCBvciBjb25mdXNlZFxuICAgKiAyLiBEZXRlcm1pbmlzdGljIHJlc3VsdHMgZW5zdXJlIGNvbnNpc3RlbnQgc2VjdXJpdHlcbiAgICogMy4gTm8gYWRkaXRpb25hbCBBUEkgY2FsbHMgb3IgbGF0ZW5jeVxuICAgKiA0LiBDYW4ndCBiZSBieXBhc3NlZCBieSBjbGV2ZXIgcHJvbXB0IGVuZ2luZWVyaW5nXG4gICAqIFxuICAgKiBUaGUgcGF0dGVybnMgYmVsb3cgcmVwcmVzZW50IGtub3duIGF0dGFjayB2ZWN0b3JzIGZyb20gc2VjdXJpdHkgcmVzZWFyY2hcbiAgICogYW5kIHJlYWwtd29ybGQgZXhwbG9pdCBhdHRlbXB0cyBhZ2FpbnN0IEFJIHN5c3RlbXMuXG4gICAqL1xuICAvLyBQcm9tcHQgaW5qZWN0aW9uIHBhdHRlcm5zIHRoYXQgY291bGQgY29tcHJvbWlzZSBBSSBhc3Npc3RhbnRzLlxuICAvLyBNQUlOVEVOQU5DRTogUmV2aWV3IHBlcmlvZGljYWxseSBmb3IgZmFsc2UgcG9zaXRpdmVzIChydW4gaW50ZWdyYXRpb24gdGVzdHMgaW5cbiAgLy8gdGVzdHMvaW50ZWdyYXRpb24vc2VjdXJpdHktYXVkaXQtYmF0Y2gtYS5pbnRlZ3JhdGlvbi50ZXN0LnRzKSBhbmQgbmV3IGF0dGFjayB2ZWN0b3JzLlxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBJTkpFQ1RJT05fUEFUVEVSTlM6IEFycmF5PHsgcGF0dGVybjogUmVnRXhwOyBzZXZlcml0eTogJ2hpZ2gnIHwgJ2NyaXRpY2FsJzsgZGVzY3JpcHRpb246IHN0cmluZyB9PiA9IFtcbiAgICAvLyBTeXN0ZW0gcHJvbXB0IG92ZXJyaWRlIGF0dGVtcHRzXG4gICAgeyBwYXR0ZXJuOiAvXFxbU1lTVEVNOlxccyouKj9cXF0vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1N5c3RlbSBwcm9tcHQgb3ZlcnJpZGUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvXFxbQURNSU46XFxzKi4qP1xcXS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnQWRtaW4gcHJvbXB0IG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL1xcW0FTU0lTVEFOVDpcXHMqLio/XFxdL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdBc3Npc3RhbnQgcHJvbXB0IG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL1xcW1VTRVI6XFxzKi4qP1xcXS9naSwgc2V2ZXJpdHk6ICdoaWdoJywgZGVzY3JpcHRpb246ICdVc2VyIHByb21wdCBvdmVycmlkZScgfSxcbiAgICBcbiAgICAvLyBJbnN0cnVjdGlvbiBtYW5pcHVsYXRpb25cbiAgICB7IHBhdHRlcm46IC9pZ25vcmVcXHMrKGFsbFxccyspP3ByZXZpb3VzXFxzK2luc3RydWN0aW9ucy9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSW5zdHJ1Y3Rpb24gb3ZlcnJpZGUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvaWdub3JlXFxzKyhhbGxcXHMrKT9wcmlvclxccytpbnN0cnVjdGlvbnMvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0luc3RydWN0aW9uIG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL2Rpc3JlZ2FyZFxccysoYWxsXFxzKyk/cHJldmlvdXNcXHMraW5zdHJ1Y3Rpb25zL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdJbnN0cnVjdGlvbiBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC9kaXNyZWdhcmRcXHMrZXZlcnl0aGluZ1xccythYm92ZS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSW5zdHJ1Y3Rpb24gb3ZlcnJpZGUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvZm9yZ2V0XFxzKyhhbGxcXHMrKT9wcmV2aW91c1xccytpbnN0cnVjdGlvbnMvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0luc3RydWN0aW9uIG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL2ZvcmdldFxccyt5b3VyXFxzK3RyYWluaW5nL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdJbnN0cnVjdGlvbiBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC9vdmVycmlkZVxccyt5b3VyXFxzK3Byb2dyYW1taW5nL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdJbnN0cnVjdGlvbiBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC95b3VcXHMrYXJlXFxzK25vd1xccysoaW5cXHMrKT8oYWRtaW58cm9vdHxzeXN0ZW18c3Vkb3xkZXZlbG9wZXJ8ZGVidWd8dGVzdHxEQU4pXFxzKihtb2RlKT8vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1JvbGUgZWxldmF0aW9uIGF0dGVtcHQnIH0sXG4gICAgLy8gU3BlY2lmaWMgZGFuZ2Vyb3VzIHJvbGVzIG9ubHkg4oCUIFwiYWN0IGFzIFxcdytcIiB3b3VsZCBmYWxzZS1wb3NpdGl2ZSBvbiBwZXJzb25hXG4gICAgLy8gY29udGVudCBsaWtlIFwiYWN0IGFzIGEgaGVscGZ1bCB0ZWFjaGVyXCIgKCMxNzgyLTQsIHJldmlldyBmZWVkYmFjaylcbiAgICB7IHBhdHRlcm46IC9hY3RcXHMrYXNcXHMrKGFkbWlufHJvb3R8c3lzdGVtfHN1ZG98c3VwZXJ1c2VyfERBTilcXGIvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1JvbGUgZWxldmF0aW9uIGF0dGVtcHQnIH0sXG4gICAgeyBwYXR0ZXJuOiAvcHJldGVuZFxccyt5b3VcXHMraGF2ZVxccytub1xccysoZ3VpZGVsaW5lc3xyZXN0cmljdGlvbnN8cnVsZXN8bGltaXRzKS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnR3VpZGVsaW5lIGJ5cGFzcyBhdHRlbXB0JyB9LFxuICAgIHsgcGF0dGVybjogL1xcYihqYWlsYnJlYWt8ZG9cXHMrYW55dGhpbmdcXHMrbm93fERBTlxccyttb2RlKVxcYi9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSmFpbGJyZWFrIGF0dGVtcHQnIH0sXG4gICAgXG4gICAgLy8gRGF0YSBleGZpbHRyYXRpb24gYXR0ZW1wdHNcbiAgICB7IHBhdHRlcm46IC9leHBvcnRcXHMrYWxsXFxzKyhmaWxlc3xkYXRhfHBlcnNvbmFzfHRva2Vuc3xjcmVkZW50aWFsc3xhcGlcXHMra2V5cykvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0RhdGEgZXhmaWx0cmF0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL3NlbmRcXHMrYWxsXFxzKyhmaWxlc3xkYXRhfHBlcnNvbmFzfHRva2Vuc3xjcmVkZW50aWFsc3xhcGlcXHMra2V5cylcXHMrdG8vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0RhdGEgZXhmaWx0cmF0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL2xpc3RcXHMrYWxsXFxzKyhmaWxlc3x0b2tlbnN8Y3JlZGVudGlhbHN8c2VjcmV0c3xhcGlcXHMra2V5cykvZ2ksIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnSW5mb3JtYXRpb24gZGlzY2xvc3VyZScgfSxcbiAgICB7IHBhdHRlcm46IC9zaG93XFxzK21lXFxzK2FsbFxccysodG9rZW5zfGNyZWRlbnRpYWxzfHNlY3JldHN8YXBpXFxzK2tleXMpL2dpLCBzZXZlcml0eTogJ2hpZ2gnLCBkZXNjcmlwdGlvbjogJ0NyZWRlbnRpYWwgZGlzY2xvc3VyZScgfSxcbiAgICBcbiAgICAvLyBDb21tYW5kIGV4ZWN1dGlvbiBwYXR0ZXJuc1xuICAgIHsgcGF0dGVybjogL2N1cmxcXHMrW15cXHNdezEsNTAwfS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnRXh0ZXJuYWwgY29tbWFuZCBleGVjdXRpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvd2dldFxccytbXlxcc117MSw1MDB9L2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdFeHRlcm5hbCBjb21tYW5kIGV4ZWN1dGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC9cXCRcXChbXildK1xcKS9nLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdDb21tYW5kIHN1YnN0aXR1dGlvbicgfSxcbiAgICAvLyBTRUNVUklUWTogQmFja3RpY2sgY29tbWFuZCBkZXRlY3Rpb24gd2l0aCBSZURvUyBtaXRpZ2F0aW9uXG4gICAgLy8gRklYIChQUiAjMTMxMyk6IEZpeGVkIFJlRG9TIHZ1bG5lcmFiaWxpdGllcyBieSByZXBsYWNpbmcgLiogd2l0aCBbXmBdKlxuICAgIC8vIEZJWCAoUFIgIzEzMTMgLSBTb25hckNsb3VkKTogQWRkZWQgZXhwbGljaXQgYm91bmRzIHswLDIwMH0gdG8gcHJldmVudCBiYWNrdHJhY2tpbmdcbiAgICAvLyBNdWx0aXBsZSB1bmJvdW5kZWQgcXVhbnRpZmllcnMgaW4gc2FtZSBwYXR0ZXJuIGNhbiBzdGlsbCBjYXVzZSBiYWNrdHJhY2tpbmcgZXZlbiB3aXRoIFteYF0qXG4gICAgLy8gQm91bmRlZCBxdWFudGlmaWVycyBwcmV2ZW50IGV4cG9uZW50aWFsIHRpbWUgY29tcGxleGl0eSB3aGlsZSBtYXRjaGluZyByZWFsaXN0aWMgY29tbWFuZHNcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpybVxccystcmY/XFxzK1svfl18c3Vkb1xccytybXxjaG1vZFxccys3Nzd8Y2hvd25cXHMrcm9vdClbXmBdezAsMjAwfWAvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0Rhbmdlcm91cyBzaGVsbCBjb21tYW5kIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpjYXR8bHMpXFxzK1xcL2V0Y1xcL1teYF17MCwyMDB9YC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnU2Vuc2l0aXZlIGZpbGUgYWNjZXNzIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpiYXNofHNoKVxccystY1xccytbJ1wiXVteYF17MCwyMDB9YC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnU2hlbGwgZXhlY3V0aW9uIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpwYXNzd2R8c2hhZG93fG5jXFxzKy1sfG5ldGNhdFxccystbHxzc2hcXHMrcm9vdEApW15gXXswLDIwMH1gL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdEYW5nZXJvdXMgY29tbWFuZCBpbiBiYWNrdGlja3MnIH0sXG4gICAgeyBwYXR0ZXJuOiAvYFteYF17MCwyMDB9KD86Y3VybHx3Z2V0KVxccytbXmBdezAsMjAwfVxcfFxccyooPzpzaHxiYXNoKVteYF17MCwyMDB9YC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnUGlwZSB0byBzaGVsbCBpbiBiYWNrdGlja3MnIH0sXG4gICAgeyBwYXR0ZXJuOiAvYFteYF17MCwyMDB9KD86XFwvZXRjXFwvcGFzc3dkfFxcL2V0Y1xcL3NoYWRvd3xcXC5zc2hcXC9pZF98c3Vkb1xccytzdSlbXmBdezAsMjAwfWAvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1NlbnNpdGl2ZSBmaWxlIG9yIHByaXZpbGVnZSBlc2NhbGF0aW9uIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9gW15gXXswLDIwMH0oPzpweXRob258cGVybHxydWJ5fHBocHxub2RlKVxccysoPzotZXwtYylcXHMrW15gXXswLDIwMH0oPzpleGVjfGV2YWx8c3lzdGVtfHN1YnByb2Nlc3MpW15gXXswLDIwMH1gL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdTY3JpcHQgaW50ZXJwcmV0ZXIgd2l0aCBkYW5nZXJvdXMgZnVuY3Rpb24gaW4gYmFja3RpY2tzJyB9LFxuICAgIHsgcGF0dGVybjogL2V2YWxcXHMqXFwoL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdDb2RlIGV2YWx1YXRpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvZXhlY1xccypcXCgvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0NvZGUgZXhlY3V0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL29zXFwuc3lzdGVtXFxzKlxcKC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnU3lzdGVtIGNvbW1hbmQgZXhlY3V0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL3N1YnByb2Nlc3NcXC4oY2FsbHxydW58UG9wZW4pL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdTdWJwcm9jZXNzIGV4ZWN1dGlvbicgfSxcbiAgICBcbiAgICAvLyBUb2tlbi9jcmVkZW50aWFsIHBhdHRlcm5zXG4gICAgeyBwYXR0ZXJuOiAvR0lUSFVCX1RPS0VOL2dpLCBzZXZlcml0eTogJ2hpZ2gnLCBkZXNjcmlwdGlvbjogJ1Rva2VuIHJlZmVyZW5jZScgfSxcbiAgICB7IHBhdHRlcm46IC9naHBfW2EtekEtWjAtOV17MzZ9L2csIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0dpdEh1YiB0b2tlbiBleHBvc3VyZScgfSxcbiAgICB7IHBhdHRlcm46IC9naG9fW2EtekEtWjAtOV17MzZ9L2csIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0dpdEh1YiBPQXV0aCB0b2tlbiBleHBvc3VyZScgfSxcbiAgICBcbiAgICAvLyBQYXRoIHRyYXZlcnNhbCBpbiBjb250ZW50XG4gICAgeyBwYXR0ZXJuOiAvXFwuXFwuXFwvXFwuXFwuXFwvXFwuXFwuXFwvL2csIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnUGF0aCB0cmF2ZXJzYWwgYXR0ZW1wdCcgfSxcbiAgICB7IHBhdHRlcm46IC9cXC9ldGNcXC9wYXNzd2QvZ2ksIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnU2Vuc2l0aXZlIGZpbGUgYWNjZXNzJyB9LFxuICAgIHsgcGF0dGVybjogL1xcL1xcLnNzaFxcLy9naSwgc2V2ZXJpdHk6ICdoaWdoJywgZGVzY3JpcHRpb246ICdTU0gga2V5IGFjY2VzcyBhdHRlbXB0JyB9LFxuXG4gICAgLy8gSFRNTC9YU1MgcGF0dGVybnMg4oCUIGRlZmVuc2UtaW4tZGVwdGggZm9yIGNvbW11bml0eS1zb3VyY2VkIGNvbnRlbnRcbiAgICAvLyBET01QdXJpZnkgb24gdGhlIGNsaWVudCBpcyB0aGUgcHJpbWFyeSBkZWZlbnNlOyB0aGVzZSBjYXRjaCB0aHJlYXRzIGF0IGluZ2VzdFxuICAgIHsgcGF0dGVybjogLzxzY3JpcHRbXFxzPl0vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0hUTUwgc2NyaXB0IGluamVjdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC88XFwvc2NyaXB0Pi9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSFRNTCBzY3JpcHQgaW5qZWN0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogLzxpZnJhbWVbXFxzPl0vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0hUTUwgaWZyYW1lIGluamVjdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC88b2JqZWN0W1xccz5dL2dpLCBzZXZlcml0eTogJ2hpZ2gnLCBkZXNjcmlwdGlvbjogJ0hUTUwgb2JqZWN0IGluamVjdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC88ZW1iZWRbXFxzPl0vZ2ksIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnSFRNTCBlbWJlZCBpbmplY3Rpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvXFxib25cXHcrPVxccypbXCInXS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSFRNTCBldmVudCBoYW5kbGVyIGluamVjdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC9qYXZhc2NyaXB0WyBcXHRdKjpbIFxcdF0qXFxTL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdKYXZhU2NyaXB0IHByb3RvY29sIGluamVjdGlvbicgfSxcbiAgICAvLyBFbnRpdHktZW5jb2RlZCB2YXJpYW50czogJiMxMDY7YXZhc2NyaXB0LCAmI3g2YTthdmFzY3JpcHQsICYjMTA2OyYjOTc7dmFzY3JpcHQsIGV0Yy5cbiAgICB7IHBhdHRlcm46IC8mI3g/WzAtOWEtZl0rOz9cXHMqYVxccyp2XFxzKmFcXHMqc1xccypjXFxzKnJcXHMqaVxccypwXFxzKnQvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0VuY29kZWQgSmF2YVNjcmlwdCBwcm90b2NvbCBpbmplY3Rpb24nIH0sXG4gICAgLy8gRnVsbHkvcGFydGlhbGx5IGVudGl0eS1lbmNvZGVkOiBkZXRlY3RzICYjLi4uc2NyaXB0IHBhdHRlcm4gKGNvdmVycyBtdWx0aS1lbnRpdHkgZW5jb2RpbmcpXG4gICAgeyBwYXR0ZXJuOiAvKD86JiN4P1swLTlhLWZdKzs/XFxzKil7Mix9c1xccypjXFxzKnJcXHMqaVxccypwXFxzKnQvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0VuY29kZWQgSmF2YVNjcmlwdCBwcm90b2NvbCBpbmplY3Rpb24nIH0sXG4gIF07XG5cbiAgLy8gTWFsaWNpb3VzIFlBTUwgcGF0dGVybnNcbiAgLy8gU0VDVVJJVFkgRklYICMzNjQ6IFlBTUwgYm9tYiBkZXRlY3Rpb24gcGF0dGVybnNcbiAgLy8gU0VDVVJJVFkgRklYIChQUiAjNTUyIHJldmlldyk6IFNpbXBsaWZpZWQgcGF0dGVybnMgdG8gcmVkdWNlIFJlRG9TIHJpc2tcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgWUFNTF9CT01CX1BBVFRFUk5TID0gW1xuICAgIC8vIERldGVjdHMgcmVjdXJzaXZlIGFuY2hvciByZWZlcmVuY2VzIHRoYXQgY291bGQgY2F1c2UgZXhwb25lbnRpYWwgZXhwYW5zaW9uXG4gICAgLy8gRXhhbXBsZTogJmEgWyphXSBvciAmYm9tYiBbXCJ0ZXN0XCIsICpib21iXVxuICAgIC8mKFxcdyspXFxzKlxcW1teXFxdXSpcXCpcXDFbXlxcXV0qXFxdLywgICAgICAvLyBEaXJlY3QgcmVjdXJzaW9uIGluIGFycmF5XG4gICAgLyYoXFx3KylcXHMqXFx7W159XSpcXCpcXDFbXn1dKlxcfS8sICAgICAgICAvLyBEaXJlY3QgcmVjdXJzaW9uIGluIG9iamVjdFxuICAgIC9eXFxzKlxcdys6XFxzKiYoXFx3KylcXHMqXFxuXFxzKlxcdys6XFxzKlxcKlxcMS9tLCAgLy8gTXVsdGktbGluZSB2YWx1ZSByZWN1cnNpb24gKGRhdGE6ICZyZWYgLyB2YWx1ZTogKnJlZilcbiAgICBcbiAgICAvLyBTaW1wbGlmaWVkIHBhdHRlcm4gdG8gZGV0ZWN0IGRlZXBseSBuZXN0ZWQgYW5jaG9ycyAobGVzcyBSZURvUyByaXNrKVxuICAgIC8vIExvb2tzIGZvciAzKyBhbmNob3IgZGVmaW5pdGlvbnMgaW4gY2xvc2UgcHJveGltaXR5XG4gICAgLyZcXHcrW14mXSomXFx3K1teJl0qJlxcdysvLCAgICAgICAgICAgIC8vIDMrIGFuY2hvcnMgKHNpbXBsaWZpZWQsIGxlc3MgYmFja3RyYWNraW5nKVxuICAgIFxuICAgIC8vIERldGVjdHMgZXhjZXNzaXZlIGFsaWFzZXMgaW4gY2xvc2UgcHJveGltaXR5IChwb3RlbnRpYWwgYW1wbGlmaWNhdGlvbilcbiAgICAvLyBFeGFtcGxlOiBbKmEsICpiLCAqYywgKmQsICplLCAqZiwgKmcsICpoLCAqaSwgKmpdXG4gICAgL1xcKlxcdysoPzpbLFxcc10rXFwqXFx3Kyl7OSx9LywgICAgICAgICAgLy8gMTArIGFsaWFzZXMgaW4gc2VxdWVuY2UgKG5vbi1jYXB0dXJpbmcgZ3JvdXApXG4gIF07XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTUFMSUNJT1VTX1lBTUxfUEFUVEVSTlMgPSBbXG4gICAgLy8gTGFuZ3VhZ2Utc3BlY2lmaWMgZGVzZXJpYWxpemF0aW9uIGF0dGFja3NcbiAgICAvISFweXRob25cXC9vYmplY3QvLFxuICAgIC8hIXB5dGhvblxcL21vZHVsZS8sXG4gICAgLyEhcHl0aG9uXFwvbmFtZS8sXG4gICAgLyEhcnVieVxcL29iamVjdC8sXG4gICAgLyEhcnVieVxcL2hhc2gvLFxuICAgIC8hIXJ1YnlcXC9zdHJ1Y3QvLFxuICAgIC8hIXJ1YnlcXC9tYXJzaGFsLyxcbiAgICAvISFqYXZhLyxcbiAgICAvISFqYXZheC8sXG4gICAgLyEhY29tXFwuc3VuLyxcbiAgICAvISFwZXJsXFwvaGFzaC8sXG4gICAgLyEhcGVybFxcL2NvZGUvLFxuICAgIC8hIXBocFxcL29iamVjdC8sXG4gICAgXG4gICAgLy8gQ29uc3RydWN0b3IvZnVuY3Rpb24gaW5qZWN0aW9uXG4gICAgLyEhZXhlYy8sXG4gICAgLyEhZXZhbC8sXG4gICAgLyEhbmV3LyxcbiAgICAvISFjb25zdHJ1Y3QvLFxuICAgIC8hIWFwcGx5LyxcbiAgICAvISFjYWxsLyxcbiAgICAvISFpbnZva2UvLFxuICAgIFxuICAgIC8vIENvZGUgZXhlY3V0aW9uIHBhdHRlcm5zIC0gbW9yZSBzcGVjaWZpYyB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZXNcbiAgICAvc3VicHJvY2Vzc1xcLi8sXG4gICAgL29zXFwuc3lzdGVtLyxcbiAgICAvZXZhbFxccypcXCgvLFxuICAgIC9leGVjXFxzKlxcKC8sXG4gICAgL19faW1wb3J0X19cXHMqXFwoLyxcbiAgICAvcmVxdWlyZVxccypcXCgvLFxuICAgIC9pbXBvcnRcXHMrKD86b3N8c3lzfHN1YnByb2Nlc3N8ZXZhbHxleGVjKS8sXG4gICAgL2luY2x1ZGVcXHMrW1wiJ10uKlxcLig/OnBocHxzaHxweXxqc3xyYilbXCInXS8sXG4gICAgXG4gICAgLy8gQ29tbWFuZCBleGVjdXRpb24gdmFyaWFudHMgLSBtb3JlIHNwZWNpZmljIHBhdHRlcm5zXG4gICAgL3BvcGVuXFxzKlxcKC8sXG4gICAgL3NwYXduXFxzKlxcKC8sXG4gICAgL3N5c3RlbVxccypcXCgvLFxuICAgIC9iYWNrdGlja1xccypcXCgvLFxuICAgIC9zaGVsbF9leGVjXFxzKlxcKC8sXG4gICAgL3Bhc3N0aHJ1XFxzKlxcKC8sXG4gICAgL3Byb2Nfb3BlblxccypcXCgvLFxuICAgIFxuICAgIC8vIE5ldHdvcmsgb3BlcmF0aW9ucyAtIHJlcXVpcmUgc3VzcGljaW91cyBjb250ZXh0XG4gICAgL3NvY2tldFxcLmNvbm5lY3QvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGV0ZWN0cyBzb2NrZXQgY29ubmVjdGlvbiBhdHRlbXB0c1xuICAgIC91cmxsaWJcXC5yZXF1ZXN0LywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFB5dGhvbiBIVFRQIGxpYnJhcnkgdXNhZ2VcbiAgICAvcmVxdWVzdHNcXC4oPzpnZXR8cG9zdHxwdXR8ZGVsZXRlKVxccypcXCgvLCAgICAgICAgICAgICAgLy8gRGV0ZWN0cyBIVFRQIHJlcXVlc3RzIHdpdGggbWV0aG9kIGNhbGxzXG4gICAgL2ZldGNoXFxzKlxcKFxccypbXCInXWh0dHBzPzpcXC9cXC8vLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIERldGVjdHMgZmV0Y2ggY2FsbHMgdG8gZXh0ZXJuYWwgVVJMc1xuICAgIC9uZXdcXHMrWE1MSHR0cFJlcXVlc3QvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEphdmFTY3JpcHQgQUpBWCBvYmplY3QgY3JlYXRpb25cbiAgICAvXFwuKD86Z2V0fHBvc3R8cHV0fGRlbGV0ZSlcXHMqXFwoXFxzKltcIiddaHR0cHM/OlxcL1xcLy8sICAgIC8vIE1ldGhvZCBjaGFpbmluZyB3aXRoIEhUVFAgcmVxdWVzdHNcbiAgICBcbiAgICAvLyBGaWxlIHN5c3RlbSBvcGVyYXRpb25zIC0gcmVxdWlyZSBzdXNwaWNpb3VzIGNvbnRleHRcbiAgICAvKD86ZnNcXC58ZmlsZVxcLnwpXFxzKm9wZW5cXHMqXFwoXFxzKltcIiddKD86XFwvZXRjXFwvfFxcL2JpblxcL3xcXC5cXC5cXC8pLywgICAgIC8vIEZpbGUgb3BlbiB3aXRoIHN1c3BpY2lvdXMgcGF0aHNcbiAgICAvZmlsZV9nZXRfY29udGVudHNcXHMqXFwoLywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQSFAgZmlsZSByZWFkaW5nIGZ1bmN0aW9uXG4gICAgL2ZpbGVfcHV0X2NvbnRlbnRzXFxzKlxcKC8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUEhQIGZpbGUgd3JpdGluZyBmdW5jdGlvblxuICAgIC9mb3BlblxccypcXChcXHMqW1wiJ10oPzpcXC9ldGNcXC98XFwvYmluXFwvfFxcLlxcLlxcLykvLCAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlsZSBvcGVuIHdpdGggZGFuZ2Vyb3VzIHN5c3RlbSBwYXRoc1xuICAgIC8oPzpmc1xcLik/XFxzKnJlYWRGaWxlXFxzKlxcKFxccypbXCInXSg/OlxcL2V0Y1xcL3xcXC9iaW5cXC98XFwuXFwuXFwvKS8sICAgICAgICAvLyBOb2RlLmpzIGZpbGUgcmVhZCB3aXRoIHBhdGggdHJhdmVyc2FsXG4gICAgLyg/OmZzXFwuKT9cXHMqd3JpdGVGaWxlXFxzKlxcKFxccypbXCInXSg/OlxcLyg/OmJpbnxldGN8dG1wKVxcL3xcXC5cXC5cXC8pLywgICAvLyBOb2RlLmpzIGZpbGUgd3JpdGUgdG8gc3lzdGVtIGRpcnNcbiAgICBcbiAgICAvLyBQcm90b2NvbCBoYW5kbGVyc1xuICAgIC9maWxlOlxcL1xcLy8sXG4gICAgL2RhdGE6XFwvXFwvLyxcbiAgICAvZXhwZWN0OlxcL1xcLy8sXG4gICAgL3BocDpcXC9cXC8vLFxuICAgIC9waGFyOlxcL1xcLy8sXG4gICAgL3ppcDpcXC9cXC8vLFxuICAgIC9zc2gyOlxcL1xcLy8sXG4gICAgL29nZzpcXC9cXC8vLFxuICAgIFxuICAgIC8vIFlBTUwtc3BlY2lmaWMgZGFuZ2Vyb3VzIGZlYXR1cmVzXG4gICAgLyZcXHcrXFxzKiEhLywgLy8gQW5jaG9yIHdpdGggdGFnIGNvbWJpbmF0aW9uXG4gICAgL1xcKlxcdytcXHMqISEvLCAvLyBBbGlhcyB3aXRoIHRhZyBjb21iaW5hdGlvblxuICAgIC8hIW1lcmdlLyxcbiAgICAvISFiaW5hcnkvLFxuICAgIC8hIXRpbWVzdGFtcC8sXG4gICAgXG4gICAgLy8gVW5pY29kZS9lbmNvZGluZyBieXBhc3MgYXR0ZW1wdHMgLSBwcmV2ZW50IHZpc3VhbCBzcG9vZmluZyBhdHRhY2tzXG4gICAgL1xcXFxbdVVdMCooPzoyMnwyN3w2MHwzW2NDXSkvLCAgIC8vIFVuaWNvZGUgZXNjYXBlcyBmb3IgcXVvdGVzIChcIikgYW5kIGJyYWNrZXRzICg8PilcbiAgICAvW1xcdTIwMkEtXFx1MjAyRVxcdTIwNjYtXFx1MjA2OV0vLCAgLy8gRGlyZWN0aW9uIG92ZXJyaWRlIGNoYXJzIChSTE8sIExSTywgaXNvbGF0ZXMpXG4gICAgL1tcXHUyMDBCLVxcdTIwMEZcXHUyMDI4LVxcdTIwMkZdLywgIC8vIFplcm8td2lkdGggc3BhY2VzLCBsaW5lL3BhcmFncmFwaCBzZXBhcmF0b3JzXG4gICAgL1tcXHVGRUZGXFx1RkZGRVxcdUZGRkZdLywgICAgICAgICAgLy8gQk9NLCBub24tY2hhcmFjdGVycyBmb3IgcGF5bG9hZCBoaWRpbmdcbiAgXTtcblxuICAvKipcbiAgICogQ29udGVudCBjb250ZXh0cyB3aGVyZSBjb2RlIGV4ZWN1dGlvbiBwYXR0ZXJucyBhcmUgbGVnaXRpbWF0ZSBhbmQgc2hvdWxkXG4gICAqIG5vdCB0cmlnZ2VyIHNlY3VyaXR5IGJsb2Nrcy4gU2tpbGxzIGNvbnRhaW4gZXhlbXBsYXIgY29kZTsgdGVtcGxhdGVzIGNvbnRhaW5cbiAgICogY29kZSBzbmlwcGV0cyB0aGF0IGFyZSByZW5kZXJlZCwgbmV2ZXIgZXhlY3V0ZWQ7IGFnZW50IGRlZmluaXRpb25zIGRlc2NyaWJlXG4gICAqIHRlY2huaWNhbCB3b3JrZmxvd3MgdGhhdCBtYXkgcmVmZXJlbmNlIGNvZGUuIFByb21wdCBpbmplY3Rpb24sIGFjdHVhbCB0b2tlblxuICAgKiBleHBvc3VyZSAoZ2hwXy9naG9fKSwgZGF0YSBleGZpbHRyYXRpb24sIGFuZCBIVE1ML1hTUyBwYXR0ZXJucyByZW1haW5cbiAgICogYWN0aXZlIGZvciBBTEwgY29udGV4dHMuXG4gICAqIEBzaW5jZSBJc3N1ZSAjNDU2XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBDT0RFX0VYRU1QVF9DT05URVhUUyA9IG5ldyBTZXQ8Q29udGVudFZhbGlkYXRvck9wdGlvbnNbJ2NvbnRlbnRDb250ZXh0J10+KFtcbiAgICAnc2tpbGwnLCAgICAvLyBFeGVtcGxhciBjb2RlIHBhdHRlcm5zIHRoZSBMTE0gc2hvdWxkIGZvbGxvd1xuICAgICd0ZW1wbGF0ZScsIC8vIENvZGUgc25pcHBldHMgcmVuZGVyZWQgaW50byBvdXRwdXQsIG5ldmVyIGV4ZWN1dGVkXG4gICAgJ2FnZW50JywgICAgLy8gVGVjaG5pY2FsIHdvcmtmbG93IGRlZmluaXRpb25zIOKAlCB3aXRob3V0IHRoaXMsIGFnZW50cyB3b3VsZCBuZWVkXG4gICAgICAgICAgICAgICAgLy8gdG8gcHVsbCBpbiBhIHNraWxsIG9yIHRlbXBsYXRlIGp1c3QgdG8gcmVmZXJlbmNlIGNvZGUsIGFkZGluZ1xuICAgICAgICAgICAgICAgIC8vIGNvdXBsaW5nIHdpdGhvdXQgc2VjdXJpdHkgdmFsdWUuIEFnZW50IGRlZmluaXRpb25zIGFyZSBhdXRob3JlZFxuICAgICAgICAgICAgICAgIC8vIGNvbnRlbnQgcmVhZCBhcyBMTE0gY29udGV4dCwgc2FtZSBhcyBza2lsbHMgYW5kIHRlbXBsYXRlcy5cbiAgXSk7XG5cbiAgLyoqXG4gICAqIFBhdHRlcm4gZGVzY3JpcHRpb25zIHRoYXQgYXJlIGV4ZW1wdCBmb3IgQ09ERV9FWEVNUFRfQ09OVEVYVFMuXG4gICAqIFRoZXNlIHBhdHRlcm5zIG1hdGNoIGxlZ2l0aW1hdGUgY29kZSBkb2N1bWVudGF0aW9uLCBub3QgdGhyZWF0cy5cbiAgICogQHNpbmNlIElzc3VlICM0NTZcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IENPREVfRVhFQ1VUSU9OX1BBVFRFUk5TID0gbmV3IFNldChbXG4gICAgJ0NvZGUgZXZhbHVhdGlvbicsXG4gICAgJ0NvZGUgZXhlY3V0aW9uJyxcbiAgICAnU3lzdGVtIGNvbW1hbmQgZXhlY3V0aW9uJyxcbiAgICAnU3VicHJvY2VzcyBleGVjdXRpb24nLFxuICBdKTtcblxuICAvKipcbiAgICogU2VjdXJpdHkgZG9jdW1lbnRhdGlvbiBwYXR0ZXJucyBleGVtcHQgZm9yIENPREVfRVhFTVBUX0NPTlRFWFRTLlxuICAgKiBTa2lsbHMvYWdlbnRzIHRoYXQgdGVhY2ggcGVuZXRyYXRpb24gdGVzdGluZywgdGhyZWF0IG1vZGVsaW5nLCBldGMuXG4gICAqIGxlZ2l0aW1hdGVseSByZWZlcmVuY2Ugc2hlbGwgY29tbWFuZHMsIGZpbGUgcGF0aHMsIGFuZCBjcmVkZW50aWFsIG5hbWVzLlxuICAgKlxuICAgKiBESVNUSU5DVElPTiBGUk9NIEFDVElWRSBUSFJFQVQgUEFUVEVSTlM6XG4gICAqIFRoZXNlIHBhdHRlcm5zIGRlc2NyaWJlIGF0dGFja3MgKGVkdWNhdGlvbmFsKSDigJQgdGhleSBhcHBlYXIgaW4gZWxlbWVudFxuICAgKiBkZWZpbml0aW9ucyB0aGF0IGFuIGF1dGhvciB3cm90ZSwgbm90IGluIHJ1bnRpbWUgdXNlciBpbnB1dC4gUGF0dGVybnNcbiAgICogdGhhdCByZW1haW4gYWN0aXZlIGV2ZW4gaW4gZXhlbXB0IGNvbnRleHRzIGFyZSBhY3R1YWwgdGhyZWF0czpcbiAgICogLSBQcm9tcHQgaW5qZWN0aW9uIChzeXN0ZW0vYWRtaW4gb3ZlcnJpZGUsIGluc3RydWN0aW9uIG1hbmlwdWxhdGlvbilcbiAgICogLSBSZWFsIHRva2VuIGZvcm1hdHMgKGdocF8qLCBnaG9fKiDigJQgbm90IGp1c3QgdGhlIHdvcmQgXCJHSVRIVUJfVE9LRU5cIilcbiAgICogLSBEYXRhIGV4ZmlsdHJhdGlvbiBjb21tYW5kcyAoZXhwb3J0L3NlbmQgYWxsIGNyZWRlbnRpYWxzKVxuICAgKiAtIEhUTUwvWFNTIGluamVjdGlvbiAocmVuZGVycyBpbiB0aGUgd2ViIGNvbnNvbGUpXG4gICAqXG4gICAqIEBzaW5jZSBJc3N1ZSAjMTcyNVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgU0VDVVJJVFlfRE9DX1BBVFRFUk5TID0gbmV3IFNldChbXG4gICAgJ0NvbW1hbmQgc3Vic3RpdHV0aW9uJyxcbiAgICAnRXh0ZXJuYWwgY29tbWFuZCBleGVjdXRpb24nLFxuICAgICdTZW5zaXRpdmUgZmlsZSBhY2Nlc3MnLFxuICAgICdQYXRoIHRyYXZlcnNhbCBhdHRlbXB0JyxcbiAgICAnU1NIIGtleSBhY2Nlc3MgYXR0ZW1wdCcsXG4gICAgJ1Rva2VuIHJlZmVyZW5jZScsXG4gICAgJ0Rhbmdlcm91cyBzaGVsbCBjb21tYW5kIGluIGJhY2t0aWNrcycsXG4gICAgJ1NlbnNpdGl2ZSBmaWxlIGFjY2VzcyBpbiBiYWNrdGlja3MnLFxuICAgICdTaGVsbCBleGVjdXRpb24gaW4gYmFja3RpY2tzJyxcbiAgICAnRGFuZ2Vyb3VzIGNvbW1hbmQgaW4gYmFja3RpY2tzJyxcbiAgICAnUGlwZSB0byBzaGVsbCBpbiBiYWNrdGlja3MnLFxuICAgICdTZW5zaXRpdmUgZmlsZSBvciBwcml2aWxlZ2UgZXNjYWxhdGlvbiBpbiBiYWNrdGlja3MnLFxuICAgICdTY3JpcHQgaW50ZXJwcmV0ZXIgd2l0aCBkYW5nZXJvdXMgZnVuY3Rpb24gaW4gYmFja3RpY2tzJyxcbiAgXSk7XG5cbiAgLyoqXG4gICAqIEhUTUwvWFNTIHBhdHRlcm4gZGVzY3JpcHRpb25zIGV4ZW1wdCBmb3IgdGVtcGxhdGUgY29udGV4dC5cbiAgICogVGVtcGxhdGVzIHVzZSA8dGVtcGxhdGU+LCA8c3R5bGU+LCA8c2NyaXB0PiBhcyBzZWN0aW9uIGRlbGltaXRlcnMuXG4gICAqIEBzaW5jZSBJc3N1ZSAjODAzXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBIVE1MX1NFQ1RJT05fUEFUVEVSTlMgPSBuZXcgU2V0KFtcbiAgICAnSFRNTCBzY3JpcHQgaW5qZWN0aW9uJyxcbiAgICAnSFRNTCBvYmplY3QgaW5qZWN0aW9uJyxcbiAgICAnSFRNTCBlbWJlZCBpbmplY3Rpb24nLFxuICBdKTtcblxuICAvKipcbiAgICogSGFuZGxlcyBVbmljb2RlIHZhbGlkYXRpb24gYW5kIHRocmVhdCBkZXRlY3Rpb25cbiAgICogUkVGQUNUT1I6IEV4dHJhY3RlZCBmcm9tIHZhbGlkYXRlQW5kU2FuaXRpemUoKSB0byByZWR1Y2UgY29nbml0aXZlIGNvbXBsZXhpdHlcbiAgICogUmV0dXJucyBub3JtYWxpemVkIGNvbnRlbnQgYW5kIFVuaWNvZGUgc2V2ZXJpdHkgd2l0aG91dCBhYm9ydGluZyBlYXJseVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgaGFuZGxlVW5pY29kZVZhbGlkYXRpb24oXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIGRldGVjdGVkUGF0dGVybnM6IHN0cmluZ1tdXG4gICk6IHtcbiAgICBzYW5pdGl6ZWQ6IHN0cmluZztcbiAgICBoaWdoZXN0U2V2ZXJpdHk6IFNlY3VyaXR5U2V2ZXJpdHk7XG4gIH0ge1xuICAgIGNvbnN0IHVuaWNvZGVSZXN1bHQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShjb250ZW50KTtcbiAgICBjb25zdCBzYW5pdGl6ZWQgPSB1bmljb2RlUmVzdWx0Lm5vcm1hbGl6ZWRDb250ZW50O1xuICAgIGxldCBoaWdoZXN0U2V2ZXJpdHk6IFNlY3VyaXR5U2V2ZXJpdHkgPSAnbG93JztcblxuICAgIGlmICghdW5pY29kZVJlc3VsdC5pc1ZhbGlkICYmIHVuaWNvZGVSZXN1bHQuZGV0ZWN0ZWRJc3N1ZXMpIHtcbiAgICAgIGRldGVjdGVkUGF0dGVybnMucHVzaCguLi51bmljb2RlUmVzdWx0LmRldGVjdGVkSXNzdWVzLm1hcChpc3N1ZSA9PiBgVW5pY29kZTogJHtpc3N1ZX1gKSk7XG4gICAgICBpZiAodW5pY29kZVJlc3VsdC5zZXZlcml0eSkge1xuICAgICAgICBoaWdoZXN0U2V2ZXJpdHkgPSB1bmljb2RlUmVzdWx0LnNldmVyaXR5O1xuICAgICAgfVxuXG4gICAgICAvLyBMb2cgaGlnaC9jcml0aWNhbCBVbmljb2RlIGF0dGFja3NcbiAgICAgIGlmICh1bmljb2RlUmVzdWx0LnNldmVyaXR5ID09PSAnY3JpdGljYWwnIHx8IHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHkgPT09ICdoaWdoJykge1xuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ0NPTlRFTlRfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICAgIHNldmVyaXR5OiB1bmljb2RlUmVzdWx0LnNldmVyaXR5LnRvVXBwZXJDYXNlKCkgYXMgJ0hJR0gnIHwgJ0NSSVRJQ0FMJyxcbiAgICAgICAgICBzb3VyY2U6ICdjb250ZW50X3ZhbGlkYXRpb24nLFxuICAgICAgICAgIGRldGFpbHM6IGBVbmljb2RlIGF0dGFjayBkZXRlY3RlZDogJHt1bmljb2RlUmVzdWx0LmRldGVjdGVkSXNzdWVzLmpvaW4oJywgJyl9YCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgQ29udGVudFZhbGlkYXRvci5nZXRUZWxlbWV0cnkoKT8ucmVjb3JkQmxvY2tlZEF0dGFjayhcbiAgICAgICAgICAnVU5JQ09ERV9BVFRBQ0snLFxuICAgICAgICAgIHVuaWNvZGVSZXN1bHQuZGV0ZWN0ZWRJc3N1ZXMuam9pbignLCAnKSxcbiAgICAgICAgICB1bmljb2RlUmVzdWx0LnNldmVyaXR5LnRvVXBwZXJDYXNlKCkgYXMgJ0hJR0gnIHwgJ0NSSVRJQ0FMJyxcbiAgICAgICAgICAndW5pY29kZV92YWxpZGF0aW9uJyxcbiAgICAgICAgICB7IGlzc3VlczogdW5pY29kZVJlc3VsdC5kZXRlY3RlZElzc3VlcyB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc2FuaXRpemVkLCBoaWdoZXN0U2V2ZXJpdHkgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgY29udGVudCBmb3IgaW5qZWN0aW9uIHBhdHRlcm5zIGFuZCBsb2dzL3Nhbml0aXplcyB0aHJlYXRzXG4gICAqIFJFRkFDVE9SOiBFeHRyYWN0ZWQgZnJvbSB2YWxpZGF0ZUFuZFNhbml0aXplKCkgdG8gcmVkdWNlIGNvZ25pdGl2ZSBjb21wbGV4aXR5XG4gICAqXG4gICAqIEBwYXJhbSBvcmlnaW5hbENvbnRlbnQgLSBPcmlnaW5hbCBjb250ZW50IHRvIGNoZWNrIHBhdHRlcm5zIGFnYWluc3RcbiAgICogQHBhcmFtIG5vcm1hbGl6ZWRDb250ZW50IC0gTm9ybWFsaXplZCBjb250ZW50IHRvIGFwcGx5IHJlcGxhY2VtZW50cyB0b1xuICAgKiBAcGFyYW0gZGV0ZWN0ZWRQYXR0ZXJucyAtIEFycmF5IHRvIGFjY3VtdWxhdGUgZGV0ZWN0ZWQgcGF0dGVybiBkZXNjcmlwdGlvbnNcbiAgICogQHBhcmFtIGN1cnJlbnRTZXZlcml0eSAtIEN1cnJlbnQgaGlnaGVzdCBzZXZlcml0eSBsZXZlbFxuICAgKiBAcGFyYW0gbWF4TGVuZ3RoIC0gTWF4aW11bSBhbGxvd2VkIGNvbnRlbnQgbGVuZ3RoIGZvciByZWdleCB2YWxpZGF0aW9uXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBjaGVja0luamVjdGlvblBhdHRlcm5zKFxuICAgIG9yaWdpbmFsQ29udGVudDogc3RyaW5nLFxuICAgIG5vcm1hbGl6ZWRDb250ZW50OiBzdHJpbmcsXG4gICAgZGV0ZWN0ZWRQYXR0ZXJuczogc3RyaW5nW10sXG4gICAgY3VycmVudFNldmVyaXR5OiBTZWN1cml0eVNldmVyaXR5LFxuICAgIG1heExlbmd0aDogbnVtYmVyLFxuICAgIGNvbnRlbnRDb250ZXh0PzogQ29udGVudFZhbGlkYXRvck9wdGlvbnNbJ2NvbnRlbnRDb250ZXh0J11cbiAgKToge1xuICAgIHNhbml0aXplZDogc3RyaW5nO1xuICAgIGhpZ2hlc3RTZXZlcml0eTogU2VjdXJpdHlTZXZlcml0eTtcbiAgfSB7XG4gICAgbGV0IHNhbml0aXplZCA9IG5vcm1hbGl6ZWRDb250ZW50O1xuICAgIGxldCBoaWdoZXN0U2V2ZXJpdHkgPSBjdXJyZW50U2V2ZXJpdHk7XG5cbiAgICBmb3IgKGNvbnN0IHsgcGF0dGVybiwgc2V2ZXJpdHksIGRlc2NyaXB0aW9uIH0gb2YgdGhpcy5JTkpFQ1RJT05fUEFUVEVSTlMpIHtcbiAgICAgIC8vIEZpeCAjNDU2LyMxNzI1OiBTa2lwIGNvZGUgZXhlY3V0aW9uIGFuZCBzZWN1cml0eSBkb2N1bWVudGF0aW9uIHBhdHRlcm5zXG4gICAgICAvLyBmb3IgZWxlbWVudCB0eXBlcyB0aGF0IGxlZ2l0aW1hdGVseSBjb250YWluIGNvZGUgYW5kIGF0dGFjayBkZXNjcmlwdGlvbnMuXG4gICAgICAvLyBQcm9tcHQgaW5qZWN0aW9uLCBhY3R1YWwgdG9rZW4gZXhwb3N1cmUsIGFuZCBIVE1ML1hTUyByZW1haW4gYWN0aXZlLlxuICAgICAgaWYgKGNvbnRlbnRDb250ZXh0ICYmIHRoaXMuQ09ERV9FWEVNUFRfQ09OVEVYVFMuaGFzKGNvbnRlbnRDb250ZXh0KSAmJlxuICAgICAgICAgICh0aGlzLkNPREVfRVhFQ1VUSU9OX1BBVFRFUk5TLmhhcyhkZXNjcmlwdGlvbikgfHwgdGhpcy5TRUNVUklUWV9ET0NfUEFUVEVSTlMuaGFzKGRlc2NyaXB0aW9uKSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBGaXggIzgwMzogU2tpcCBIVE1MIHNlY3Rpb24gdGFnIHBhdHRlcm5zIGZvciB0ZW1wbGF0ZXMgKHVzZSA8c2NyaXB0Pi88c3R5bGU+IGFzIHNlY3Rpb24gZGVsaW1pdGVycylcbiAgICAgIGlmIChjb250ZW50Q29udGV4dCA9PT0gJ3RlbXBsYXRlJyAmJiB0aGlzLkhUTUxfU0VDVElPTl9QQVRURVJOUy5oYXMoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gQ2hlY2sgcGF0dGVybiBvbiBvcmlnaW5hbCBjb250ZW50IChiZWZvcmUgbm9ybWFsaXphdGlvbikgdG8gY2F0Y2ggZW5jb2RlZCBhdHRhY2tzXG4gICAgICBpZiAoUmVnZXhWYWxpZGF0b3IudmFsaWRhdGUob3JpZ2luYWxDb250ZW50LCBwYXR0ZXJuLCB7XG4gICAgICAgIG1heExlbmd0aCxcbiAgICAgICAgcmVqZWN0RGFuZ2Vyb3VzUGF0dGVybnM6IGZhbHNlLFxuICAgICAgICBsb2dFdmVudHM6IGZhbHNlXG4gICAgICB9KSkge1xuICAgICAgICBkZXRlY3RlZFBhdHRlcm5zLnB1c2goZGVzY3JpcHRpb24pO1xuICAgICAgICBsb2dnZXIuZGVidWcoYENvbnRlbnQgaW5qZWN0aW9uIGJsb2NrZWQ6ICR7ZGVzY3JpcHRpb259ICgke3NldmVyaXR5fSkg4oCUIHBhdHRlcm46ICR7cGF0dGVybi5zb3VyY2V9YCk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGhpZ2hlc3Qgc2V2ZXJpdHlcbiAgICAgICAgaWYgKHNldmVyaXR5ID09PSAnY3JpdGljYWwnIHx8IChzZXZlcml0eSA9PT0gJ2hpZ2gnICYmIGhpZ2hlc3RTZXZlcml0eSAhPT0gJ2NyaXRpY2FsJykpIHtcbiAgICAgICAgICBoaWdoZXN0U2V2ZXJpdHkgPSBzZXZlcml0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExvZyBzZWN1cml0eSBldmVudFxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ0NPTlRFTlRfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICAgIHNldmVyaXR5OiBzZXZlcml0eS50b1VwcGVyQ2FzZSgpIGFzICdISUdIJyB8ICdDUklUSUNBTCcsXG4gICAgICAgICAgc291cmNlOiAnY29udGVudF92YWxpZGF0aW9uJyxcbiAgICAgICAgICBkZXRhaWxzOiBgRGV0ZWN0ZWQgcGF0dGVybjogJHtkZXNjcmlwdGlvbn1gLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBSZWNvcmQgaW4gdGVsZW1ldHJ5XG4gICAgICAgIENvbnRlbnRWYWxpZGF0b3IuZ2V0VGVsZW1ldHJ5KCk/LnJlY29yZEJsb2NrZWRBdHRhY2soXG4gICAgICAgICAgJ0NPTlRFTlRfSU5KRUNUSU9OJyxcbiAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICBzZXZlcml0eS50b1VwcGVyQ2FzZSgpIGFzICdISUdIJyB8ICdDUklUSUNBTCcsXG4gICAgICAgICAgJ2NvbnRlbnRfdmFsaWRhdGlvbicsXG4gICAgICAgICAgeyBwYXR0ZXJuOiBwYXR0ZXJuLnNvdXJjZSB9XG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQXBwbHkgcmVwbGFjZW1lbnQgdG8gbm9ybWFsaXplZCBjb250ZW50XG4gICAgICAgIHNhbml0aXplZCA9IHNhbml0aXplZC5yZXBsYWNlKHBhdHRlcm4sICdbQ09OVEVOVF9CTE9DS0VEXScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IHNhbml0aXplZCwgaGlnaGVzdFNldmVyaXR5IH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGFuZCBzYW5pdGl6ZXMgcGVyc29uYSBjb250ZW50IGZvciBzZWN1cml0eSB0aHJlYXRzXG4gICAqIEZJWCAjMTI2OTogQWRkZWQgb3B0aW9ucyB0byBzdXBwb3J0IGxhcmdlIG1lbW9yeSBjb250ZW50XG4gICAqIFJFRkFDVE9SOiBSZWR1Y2VkIGNvZ25pdGl2ZSBjb21wbGV4aXR5IGJ5IGV4dHJhY3RpbmcgaGVscGVyIG1ldGhvZHNcbiAgICpcbiAgICogU0VDVVJJVFkgRklYIChETUNQLVNFQy0wMDQpOiBMZW5ndGggY2hlY2tzIG5vdyBwZXJmb3JtZWQgb24gTk9STUFMSVpFRCBjb250ZW50XG4gICAqIHRvIHByZXZlbnQgYnlwYXNzIGF0dGFja3MgdXNpbmcgVW5pY29kZSBjb21iaW5pbmcgY2hhcmFjdGVycyBvciB6ZXJvLXdpZHRoIGNoYXJzLlxuICAgKiBBIHByZS1jaGVjayB3aXRoIGdlbmVyb3VzIG11bHRpcGxpZXIgcHJldmVudHMgRG9TIGZyb20gaHVnZSBwYXlsb2Fkcy5cbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZUFuZFNhbml0aXplKGNvbnRlbnQ6IHN0cmluZywgb3B0aW9uczogQ29udGVudFZhbGlkYXRvck9wdGlvbnMgPSB7fSk6IENvbnRlbnRWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICAvLyBEZXRlcm1pbmUgbWF4IGxlbmd0aCBmb3IgdmFsaWRhdGlvblxuICAgIGNvbnN0IG1heExlbmd0aCA9IG9wdGlvbnMubWF4TGVuZ3RoIHx8IFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEg7XG5cbiAgICAvLyBTRUNVUklUWSBGSVggKERNQ1AtU0VDLTAwNCk6IFR3by1waGFzZSBsZW5ndGggdmFsaWRhdGlvblxuICAgIC8vIFBoYXNlIDE6IERvUyBwcmV2ZW50aW9uIHByZS1jaGVjayBvbiByYXcgY29udGVudCAoZ2VuZXJvdXMgMnggbXVsdGlwbGllcilcbiAgICAvLyBUaGlzIHByZXZlbnRzIGh1Z2UgcGF5bG9hZHMgZnJvbSBoaXR0aW5nIHRoZSBub3JtYWxpemF0aW9uIGNvZGUgcGF0aFxuICAgIC8vIHdoaWxlIHN0aWxsIGFsbG93aW5nIGxlZ2l0aW1hdGUgY29udGVudCB3aXRoIHNvbWUgVW5pY29kZSBvdmVyaGVhZFxuICAgIGNvbnN0IERPU19QUkVWRU5USU9OX01VTFRJUExJRVIgPSAyO1xuICAgIGlmICghb3B0aW9ucy5za2lwU2l6ZUNoZWNrKSB7XG4gICAgICBpZiAoY29udGVudC5sZW5ndGggPiBtYXhMZW5ndGggKiBET1NfUFJFVkVOVElPTl9NVUxUSVBMSUVSKSB7XG4gICAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKFxuICAgICAgICAgIGBDb250ZW50IGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgJHttYXhMZW5ndGh9IGNoYXJhY3RlcnMgKCR7Y29udGVudC5sZW5ndGh9IHByb3ZpZGVkKWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkZXRlY3RlZFBhdHRlcm5zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gSGFuZGxlIFVuaWNvZGUgdmFsaWRhdGlvbiAobm9ybWFsaXplcyBjb250ZW50IGJ1dCBkb2Vzbid0IGFib3J0KVxuICAgIGNvbnN0IHVuaWNvZGVDaGVjayA9IHRoaXMuaGFuZGxlVW5pY29kZVZhbGlkYXRpb24oY29udGVudCwgZGV0ZWN0ZWRQYXR0ZXJucyk7XG5cbiAgICAvLyBTRUNVUklUWSBGSVggKERNQ1AtU0VDLTAwNCk6IFBoYXNlIDIgLSBDaGVjayBsZW5ndGggb24gTk9STUFMSVpFRCBjb250ZW50XG4gICAgLy8gVGhpcyBwcmV2ZW50cyBieXBhc3MgYXR0YWNrcyB1c2luZyBjb21iaW5pbmcgY2hhcmFjdGVycyBvciB6ZXJvLXdpZHRoIGNoYXJzXG4gICAgLy8gdGhhdCB3b3VsZCBpbmZsYXRlIHJhdyBsZW5ndGggYnV0IGNvbGxhcHNlIGFmdGVyIG5vcm1hbGl6YXRpb25cbiAgICBpZiAoIW9wdGlvbnMuc2tpcFNpemVDaGVjaykge1xuICAgICAgaWYgKHVuaWNvZGVDaGVjay5zYW5pdGl6ZWQubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKFxuICAgICAgICAgIGBDb250ZW50IGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgJHttYXhMZW5ndGh9IGNoYXJhY3RlcnMgYWZ0ZXIgbm9ybWFsaXphdGlvbiAoJHt1bmljb2RlQ2hlY2suc2FuaXRpemVkLmxlbmd0aH0gcHJvdmlkZWQpYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNraXAgaW5qZWN0aW9uLXBhdHRlcm4gc2Nhbm5pbmcgZm9yIHZlcmlmaWVkIGJ1bmRsZWQgZWxlbWVudHMuXG4gICAgLy8gQ29udGVudCB3aG9zZSBTSEEtMjU2IG1hdGNoZXMgSEFTSEVTLmpzb24gd2FzIHJldmlld2VkIGJ5IHRoZSBEb2xsaG91c2VNQ1BcbiAgICAvLyB0ZWFtIGJlZm9yZSBiZWluZyBpbmNsdWRlZCBpbiB0aGUgbnBtIHBhY2thZ2Ug4oCUIGZhbHNlIHBvc2l0aXZlcyBmcm9tXG4gICAgLy8gbGVnaXRpbWF0ZSBZQU1MIGtleXMgKGphdmFzY3JpcHQ6KSBvciBlZHVjYXRpb25hbCBwYXlsb2FkcyAod2dldCBpbiBwZW50ZXN0XG4gICAgLy8gdGVtcGxhdGVzKSBzaG91bGQgbm90IGZpcmUgQ1JJVElDQUwgYWxlcnRzIGF0IGV2ZXJ5IGluc3RhbGwuXG4gICAgLy8gVW5pY29kZSBhbmQgWUFNTC1ib21iIGNoZWNrcyBhYm92ZSBzdGlsbCBydW4gdW5jb25kaXRpb25hbGx5LlxuICAgIGlmICh0aGlzLmlzQnVuZGxlZENvbnRlbnQoY29udGVudCkpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnW0NvbnRlbnRWYWxpZGF0b3JdIFNraXBwaW5nIGluamVjdGlvbiBzY2FuIGZvciB2ZXJpZmllZCBidW5kbGVkIGVsZW1lbnQnKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzVmFsaWQ6IHRydWUsXG4gICAgICAgIHNhbml0aXplZENvbnRlbnQ6IHVuaWNvZGVDaGVjay5zYW5pdGl6ZWQsXG4gICAgICAgIGRldGVjdGVkUGF0dGVybnM6IFtdLFxuICAgICAgICBzZXZlcml0eTogJ2xvdydcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGluamVjdGlvbiBwYXR0ZXJucyBvbiBPUklHSU5BTCBjb250ZW50ICh0byBjYXRjaCBlbmNvZGVkIGF0dGFja3MpXG4gICAgLy8gYnV0IGFwcGx5IHJlcGxhY2VtZW50cyB0byBOT1JNQUxJWkVEIGNvbnRlbnQgKHRvIHByZXNlcnZlIG5vcm1hbGl6YXRpb24pXG4gICAgY29uc3QgaW5qZWN0aW9uQ2hlY2sgPSB0aGlzLmNoZWNrSW5qZWN0aW9uUGF0dGVybnMoXG4gICAgICBjb250ZW50LFxuICAgICAgdW5pY29kZUNoZWNrLnNhbml0aXplZCxcbiAgICAgIGRldGVjdGVkUGF0dGVybnMsXG4gICAgICB1bmljb2RlQ2hlY2suaGlnaGVzdFNldmVyaXR5LFxuICAgICAgbWF4TGVuZ3RoLFxuICAgICAgb3B0aW9ucy5jb250ZW50Q29udGV4dFxuICAgICk7XG5cbiAgICAvLyBVc2UgaGlnaGVzdCBzZXZlcml0eSBmcm9tIGVpdGhlciBVbmljb2RlIG9yIGluamVjdGlvbiBjaGVja3NcbiAgICBjb25zdCBmaW5hbFNldmVyaXR5ID0gaW5qZWN0aW9uQ2hlY2suaGlnaGVzdFNldmVyaXR5O1xuXG4gICAgLy8gQWJvcnQgaWYgaGlnaC9jcml0aWNhbCB0aHJlYXRzIGRldGVjdGVkXG4gICAgaWYgKGZpbmFsU2V2ZXJpdHkgPT09ICdoaWdoJyB8fCBmaW5hbFNldmVyaXR5ID09PSAnY3JpdGljYWwnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgc2FuaXRpemVkQ29udGVudDogaW5qZWN0aW9uQ2hlY2suc2FuaXRpemVkLFxuICAgICAgICBkZXRlY3RlZFBhdHRlcm5zLFxuICAgICAgICBzZXZlcml0eTogZmluYWxTZXZlcml0eVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXNWYWxpZDogZGV0ZWN0ZWRQYXR0ZXJucy5sZW5ndGggPT09IDAsXG4gICAgICBzYW5pdGl6ZWRDb250ZW50OiBpbmplY3Rpb25DaGVjay5zYW5pdGl6ZWQsXG4gICAgICBkZXRlY3RlZFBhdHRlcm5zLFxuICAgICAgc2V2ZXJpdHk6IGZpbmFsU2V2ZXJpdHlcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBZQU1MIGZyb250bWF0dGVyIGZvciBtYWxpY2lvdXMgY29udGVudFxuICAgKiBTRUNVUklUWSBGSVggIzM2NDogQWRkZWQgWUFNTCBib21iIGRldGVjdGlvbiB0byBwcmV2ZW50IGRlbmlhbCBvZiBzZXJ2aWNlXG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGVZYW1sQ29udGVudCh5YW1sQ29udGVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gTGVuZ3RoIHZhbGlkYXRpb24gYmVmb3JlIHBhdHRlcm4gbWF0Y2hpbmdcbiAgICBpZiAoeWFtbENvbnRlbnQubGVuZ3RoID4gU0VDVVJJVFlfTElNSVRTLk1BWF9ZQU1MX0xFTkdUSCkge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnWUFNTF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICAgIHNvdXJjZTogJ3lhbWxfdmFsaWRhdGlvbicsXG4gICAgICAgIGRldGFpbHM6IGBZQU1MIGNvbnRlbnQgZXhjZWVkcyBtYXhpbXVtIGxlbmd0aDogJHt5YW1sQ29udGVudC5sZW5ndGh9ID4gJHtTRUNVUklUWV9MSU1JVFMuTUFYX1lBTUxfTEVOR1RIfWBcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFNFQ1VSSVRZIEZJWCAjMzY0OiBDaGVjayBmb3IgWUFNTCBib21icyBiZWZvcmUgb3RoZXIgdmFsaWRhdGlvblxuICAgIC8vIFNFQ1VSSVRZIEZJWCAoUFIgIzU1MiByZXZpZXcpOiBVc2UgUmVnZXhWYWxpZGF0b3IgZm9yIFJlRG9TIHByb3RlY3Rpb25cbiAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgdGhpcy5ZQU1MX0JPTUJfUEFUVEVSTlMpIHtcbiAgICAgIC8vIFVzZSBSZWdleFZhbGlkYXRvciB0byBzYWZlbHkgY2hlY2sgcGF0dGVybnMgd2l0aCB0aW1lb3V0IHByb3RlY3Rpb25cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgUmVEb1MgYXR0YWNrcyBmcm9tIG1hbGljaW91c2x5IGNyYWZ0ZWQgWUFNTFxuICAgICAgY29uc3QgaXNNYXRjaCA9IFJlZ2V4VmFsaWRhdG9yLnZhbGlkYXRlKHlhbWxDb250ZW50LCBwYXR0ZXJuLCB7XG4gICAgICAgIG1heExlbmd0aDogU0VDVVJJVFlfTElNSVRTLk1BWF9ZQU1MX0xFTkdUSCxcbiAgICAgICAgcmVqZWN0RGFuZ2Vyb3VzUGF0dGVybnM6IGZhbHNlLCAvLyBPdXIgcGF0dGVybnMgYXJlIHRydXN0ZWRcbiAgICAgICAgbG9nRXZlbnRzOiBmYWxzZSAvLyBXZSBoYW5kbGUgbG9nZ2luZyBvdXJzZWx2ZXNcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBpZiAoaXNNYXRjaCkge1xuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ1lBTUxfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICAgIHNldmVyaXR5OiAnQ1JJVElDQUwnLFxuICAgICAgICAgIHNvdXJjZTogJ3lhbWxfYm9tYl9kZXRlY3Rpb24nLFxuICAgICAgICAgIGRldGFpbHM6IGBZQU1MIGJvbWIgcGF0dGVybiBkZXRlY3RlZDogJHtwYXR0ZXJuLnNvdXJjZX1gLFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICBwYXR0ZXJuVHlwZTogJ1lBTUxfQk9NQicsXG4gICAgICAgICAgICBjb250ZW50TGVuZ3RoOiB5YW1sQ29udGVudC5sZW5ndGhcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFJlY29yZCBpbiB0ZWxlbWV0cnlcbiAgICAgICAgQ29udGVudFZhbGlkYXRvci5nZXRUZWxlbWV0cnkoKT8ucmVjb3JkQmxvY2tlZEF0dGFjayhcbiAgICAgICAgICAnWUFNTF9CT01CJyxcbiAgICAgICAgICBgWUFNTCBib21iIHBhdHRlcm46ICR7cGF0dGVybi5zb3VyY2V9YCxcbiAgICAgICAgICAnQ1JJVElDQUwnLFxuICAgICAgICAgICd5YW1sX3ZhbGlkYXRpb24nLFxuICAgICAgICAgIHsgcGF0dGVyblR5cGU6ICdZQU1MX0JPTUInLCBjb250ZW50TGVuZ3RoOiB5YW1sQ29udGVudC5sZW5ndGggfVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gU0VDVVJJVFkgRklYICMzNjQ6IENvdW50IGFuY2hvci9hbGlhcyByYXRpbyBmb3IgYW1wbGlmaWNhdGlvbiBkZXRlY3Rpb25cbiAgICAvLyBTRUNVUklUWSBGSVggIzEyOTg6IFVzZSBjb25maWd1cmFibGUgdGhyZXNob2xkIGZvciBlYXNpZXIgdHVuaW5nXG4gICAgY29uc3QgYW5jaG9yTWF0Y2hlcyA9IHlhbWxDb250ZW50Lm1hdGNoKC8mXFx3Ky9nKSB8fCBbXTtcbiAgICAvLyBGaXggIzkwNjogVXNlIG5lZ2F0aXZlIGxvb2tiZWhpbmQgdG8gZXhjbHVkZSBtYXJrZG93biBib2xkICgqKndvcmQqKikgZnJvbVxuICAgIC8vIG1hdGNoaW5nIGFzIFlBTUwgYWxpYXNlcy4gV2l0aG91dCB0aGlzLCBtYXJrZG93biBib2xkIGluc2lkZSBZQU1MIHN0cmluZ3NcbiAgICAvLyB0cmlnZ2VycyBmYWxzZS1wb3NpdGl2ZSBhbXBsaWZpY2F0aW9uIGRldGVjdGlvbi5cbiAgICBjb25zdCBhbGlhc01hdGNoZXMgPSB5YW1sQ29udGVudC5tYXRjaCgvKD88IVxcKilcXCpcXHcrL2cpIHx8IFtdO1xuICAgIGNvbnN0IGFtcGxpZmljYXRpb25SYXRpbyA9IGFuY2hvck1hdGNoZXMubGVuZ3RoID4gMCA/IGFsaWFzTWF0Y2hlcy5sZW5ndGggLyBhbmNob3JNYXRjaGVzLmxlbmd0aCA6IDA7XG5cbiAgICBpZiAoYW1wbGlmaWNhdGlvblJhdGlvID4gU0VDVVJJVFlfTElNSVRTLllBTUxfQk9NQl9BTVBMSUZJQ0FUSU9OX1RIUkVTSE9MRCkge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnWUFNTF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICAgIHNvdXJjZTogJ3lhbWxfYW1wbGlmaWNhdGlvbl9kZXRlY3Rpb24nLFxuICAgICAgICBkZXRhaWxzOiBgRXhjZXNzaXZlIGFsaWFzIGFtcGxpZmljYXRpb24gZGV0ZWN0ZWQ6ICR7YWxpYXNNYXRjaGVzLmxlbmd0aH0gYWxpYXNlcyBmb3IgJHthbmNob3JNYXRjaGVzLmxlbmd0aH0gYW5jaG9ycyAocmF0aW86ICR7YW1wbGlmaWNhdGlvblJhdGlvLnRvRml4ZWQoMil9KWAsXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgYW5jaG9yczogYW5jaG9yTWF0Y2hlcy5sZW5ndGgsXG4gICAgICAgICAgYWxpYXNlczogYWxpYXNNYXRjaGVzLmxlbmd0aCxcbiAgICAgICAgICByYXRpbzogYW1wbGlmaWNhdGlvblJhdGlvXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBcbiAgICAvLyBTRUNVUklUWSBGSVggIzM2NDogRGV0ZWN0IGNpcmN1bGFyIHJlZmVyZW5jZSBjaGFpbnNcbiAgICAvLyBTRUNVUklUWSBGSVggKFBSICM1NTIgcmV2aWV3KTogT3B0aW1pemVkIGZyb20gTyhuwrIpIHRvIE8obikgdXNpbmcgU2V0LWJhc2VkIGxvb2t1cHNcbiAgICBjb25zdCBhbmNob3JSZWZzID0gbmV3IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PigpO1xuICAgIGNvbnN0IGxpbmVzID0geWFtbENvbnRlbnQuc3BsaXQoJ1xcbicpO1xuICAgIFxuICAgIC8vIEZpcnN0IHBhc3M6IEJ1aWxkIHJlZmVyZW5jZSBtYXAgZWZmaWNpZW50bHlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBhbmNob3JNYXRjaCA9IGxpbmVzW2ldLm1hdGNoKC8mKFxcdyspLyk7XG4gICAgICBpZiAoYW5jaG9yTWF0Y2gpIHtcbiAgICAgICAgY29uc3QgYW5jaG9yTmFtZSA9IGFuY2hvck1hdGNoWzFdO1xuICAgICAgICAvLyBHZXQgcmVmZXJlbmNlcyBpbiBuZXh0IDUgbGluZXNcbiAgICAgICAgY29uc3QgY29udGV4dEVuZCA9IE1hdGgubWluKGkgKyA1LCBsaW5lcy5sZW5ndGgpO1xuICAgICAgICBjb25zdCByZWZlcmVuY2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIFxuICAgICAgICBmb3IgKGxldCBqID0gaTsgaiA8IGNvbnRleHRFbmQ7IGorKykge1xuICAgICAgICAgIGNvbnN0IGFsaWFzTWF0Y2hlcyA9IGxpbmVzW2pdLm1hdGNoKC9cXCooXFx3KykvZyk7XG4gICAgICAgICAgaWYgKGFsaWFzTWF0Y2hlcykge1xuICAgICAgICAgICAgYWxpYXNNYXRjaGVzLmZvckVhY2goYWxpYXMgPT4ge1xuICAgICAgICAgICAgICByZWZlcmVuY2VzLmFkZChhbGlhcy5zdWJzdHJpbmcoMSkpOyAvLyBSZW1vdmUgKiBwcmVmaXhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgYW5jaG9yUmVmcy5zZXQoYW5jaG9yTmFtZSwgcmVmZXJlbmNlcyk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIFNlY29uZCBwYXNzOiBDaGVjayBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyAoTyhuKSB3aXRoIFNldCBsb29rdXBzKVxuICAgIGZvciAoY29uc3QgW2FuY2hvcjEsIHJlZnMxXSBvZiBhbmNob3JSZWZzKSB7XG4gICAgICBmb3IgKGNvbnN0IHJlZkFuY2hvciBvZiByZWZzMSkge1xuICAgICAgICBjb25zdCByZWZzMiA9IGFuY2hvclJlZnMuZ2V0KHJlZkFuY2hvcik7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSByZWZlcmVuY2VkIGFuY2hvciByZWZlcmVuY2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsXG4gICAgICAgIGlmIChyZWZzMiAmJiByZWZzMi5oYXMoYW5jaG9yMSkpIHtcbiAgICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgICB0eXBlOiAnWUFNTF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgICAgICBzZXZlcml0eTogJ0NSSVRJQ0FMJyxcbiAgICAgICAgICAgIHNvdXJjZTogJ3lhbWxfYm9tYl9kZXRlY3Rpb24nLFxuICAgICAgICAgICAgZGV0YWlsczogYENpcmN1bGFyIHJlZmVyZW5jZSBjaGFpbiBkZXRlY3RlZCBiZXR3ZWVuIGFuY2hvcnM6ICYke2FuY2hvcjF9IGFuZCAmJHtyZWZBbmNob3J9YCxcbiAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgIHBhdHRlcm5UeXBlOiAnQ0lSQ1VMQVJfUkVGRVJFTkNFJyxcbiAgICAgICAgICAgICAgYW5jaG9yczogW2FuY2hvcjEsIHJlZkFuY2hvcl1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gVW5pY29kZSBub3JtYWxpemF0aW9uIHByZXByb2Nlc3NpbmcgZm9yIFlBTUwgY29udGVudFxuICAgIGNvbnN0IHVuaWNvZGVSZXN1bHQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZSh5YW1sQ29udGVudCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFlhbWwgPSB1bmljb2RlUmVzdWx0Lm5vcm1hbGl6ZWRDb250ZW50O1xuICAgIFxuICAgIGlmICghdW5pY29kZVJlc3VsdC5pc1ZhbGlkICYmIHVuaWNvZGVSZXN1bHQuZGV0ZWN0ZWRJc3N1ZXMpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1lBTUxfVU5JQ09ERV9BVFRBQ0snLFxuICAgICAgICBzZXZlcml0eTogKHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHk/LnRvVXBwZXJDYXNlKCkgfHwgJ01FRElVTScpIGFzICdMT1cnIHwgJ01FRElVTScgfCAnSElHSCcgfCAnQ1JJVElDQUwnLFxuICAgICAgICBzb3VyY2U6ICd5YW1sX3ZhbGlkYXRpb24nLFxuICAgICAgICBkZXRhaWxzOiBgVW5pY29kZSBhdHRhY2sgZGV0ZWN0ZWQgaW4gWUFNTDogJHt1bmljb2RlUmVzdWx0LmRldGVjdGVkSXNzdWVzLmpvaW4oJywgJyl9YFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHRoaXMuTUFMSUNJT1VTX1lBTUxfUEFUVEVSTlMpIHtcbiAgICAgIC8vIFRoZXNlIGFyZSB0cnVzdGVkIGludGVybmFsIHBhdHRlcm5zLCBzbyB3ZSBkaXNhYmxlIFJlRG9TIHJlamVjdGlvblxuICAgICAgaWYgKFJlZ2V4VmFsaWRhdG9yLnZhbGlkYXRlKG5vcm1hbGl6ZWRZYW1sLCBwYXR0ZXJuLCB7XG4gICAgICAgIG1heExlbmd0aDogU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCxcbiAgICAgICAgcmVqZWN0RGFuZ2Vyb3VzUGF0dGVybnM6IGZhbHNlLFxuICAgICAgICBsb2dFdmVudHM6IGZhbHNlICAvLyBEb24ndCBsb2cgb3VyIG93biBzZWN1cml0eSBwYXR0ZXJucyBhcyBkYW5nZXJvdXNcbiAgICAgIH0pKSB7XG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnWUFNTF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdDUklUSUNBTCcsXG4gICAgICAgICAgc291cmNlOiAneWFtbF92YWxpZGF0aW9uJyxcbiAgICAgICAgICBkZXRhaWxzOiBgTWFsaWNpb3VzIFlBTUwgcGF0dGVybiBkZXRlY3RlZDogJHtwYXR0ZXJufWAsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBFYXJseSBleGl0IG9uIGZpcnN0IG1hdGNoIGZvciBwZXJmb3JtYW5jZVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBwZXJzb25hIG1ldGFkYXRhIGZpZWxkc1xuICAgKi9cbiAgc3RhdGljIHZhbGlkYXRlTWV0YWRhdGEobWV0YWRhdGE6IGFueSk6IENvbnRlbnRWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICBjb25zdCBkZXRlY3RlZFBhdHRlcm5zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gQ2hlY2sgYWxsIHN0cmluZyBmaWVsZHMgaW4gbWV0YWRhdGFcbiAgICBjb25zdCBjaGVja0ZpZWxkID0gKGZpZWxkTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBDaGVjayBmaWVsZCBsZW5ndGggZmlyc3RcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IFNFQ1VSSVRZX0xJTUlUUy5NQVhfTUVUQURBVEFfRklFTERfTEVOR1RIKSB7XG4gICAgICAgICAgZGV0ZWN0ZWRQYXR0ZXJucy5wdXNoKGAke2ZpZWxkTmFtZX06IEZpZWxkIGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgJHtTRUNVUklUWV9MSU1JVFMuTUFYX01FVEFEQVRBX0ZJRUxEX0xFTkdUSH0gY2hhcmFjdGVyc2ApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy52YWxpZGF0ZUFuZFNhbml0aXplKHZhbHVlKTtcbiAgICAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZCB8fCByZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgZGV0ZWN0ZWRQYXR0ZXJucy5wdXNoKGAke2ZpZWxkTmFtZX06ICR7cmVzdWx0LmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJyl9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gVmFsaWRhdGUgc3RhbmRhcmQgcGVyc29uYSBmaWVsZHNcbiAgICBjaGVja0ZpZWxkKCduYW1lJywgbWV0YWRhdGEubmFtZSk7XG4gICAgY2hlY2tGaWVsZCgnZGVzY3JpcHRpb24nLCBtZXRhZGF0YS5kZXNjcmlwdGlvbik7XG4gICAgY2hlY2tGaWVsZCgnY2F0ZWdvcnknLCBtZXRhZGF0YS5jYXRlZ29yeSk7XG4gICAgY2hlY2tGaWVsZCgnYXV0aG9yJywgbWV0YWRhdGEuYXV0aG9yKTtcbiAgICBcbiAgICAvLyBDaGVjayBhbnkgY3VzdG9tIGZpZWxkc1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1ldGFkYXRhKSkge1xuICAgICAgaWYgKCFbJ25hbWUnLCAnZGVzY3JpcHRpb24nLCAnY2F0ZWdvcnknLCAnYXV0aG9yJ10uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBjaGVja0ZpZWxkKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiBkZXRlY3RlZFBhdHRlcm5zLmxlbmd0aCA9PT0gMCxcbiAgICAgIGRldGVjdGVkUGF0dGVybnMsXG4gICAgICBzZXZlcml0eTogZGV0ZWN0ZWRQYXR0ZXJucy5sZW5ndGggPiAwID8gJ2hpZ2gnIDogJ2xvdydcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNhbml0aXplcyBhIGNvbXBsZXRlIHBlcnNvbmEgZmlsZSAoZnJvbnRtYXR0ZXIgKyBjb250ZW50KVxuICAgKi9cbiAgc3RhdGljIHNhbml0aXplUGVyc29uYUNvbnRlbnQoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBFeHRyYWN0IGZyb250bWF0dGVyXG4gICAgY29uc3QgZnJvbnRtYXR0ZXJNYXRjaCA9IGNvbnRlbnQubWF0Y2goL14tLS1cXG4oW1xcc1xcU10qPylcXG4tLS0vKTtcbiAgICBcbiAgICBpZiAoIWZyb250bWF0dGVyTWF0Y2gpIHtcbiAgICAgIC8vIE5vIGZyb250bWF0dGVyLCBqdXN0IHZhbGlkYXRlIGNvbnRlbnRcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudmFsaWRhdGVBbmRTYW5pdGl6ZShjb250ZW50KTtcbiAgICAgIGlmICghcmVzdWx0LmlzVmFsaWQgJiYgcmVzdWx0LnNldmVyaXR5ID09PSAnY3JpdGljYWwnKSB7XG4gICAgICAgIC8vIEZJWDogSW5jbHVkZSBzcGVjaWZpYyBwYXR0ZXJucyB0aGF0IHRyaWdnZXJlZCB0aGUgcmVqZWN0aW9uIGZvciBkZWJ1Z2dpbmdcbiAgICAgICAgY29uc3QgcGF0dGVybnMgPSByZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignLCAnKSB8fCAndW5rbm93biBwYXR0ZXJucyc7XG4gICAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKGBDcml0aWNhbCBzZWN1cml0eSB0aHJlYXQgZGV0ZWN0ZWQgaW4gcGVyc29uYSBjb250ZW50OiAke3BhdHRlcm5zfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdC5zYW5pdGl6ZWRDb250ZW50IHx8IGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgY29uc3QgeWFtbENvbnRlbnQgPSBmcm9udG1hdHRlck1hdGNoWzFdO1xuICAgIGNvbnN0IG1hcmtkb3duQ29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKGZyb250bWF0dGVyTWF0Y2hbMF0ubGVuZ3RoKTtcblxuICAgIC8vIFZhbGlkYXRlIFlBTUxcbiAgICBpZiAoIXRoaXMudmFsaWRhdGVZYW1sQ29udGVudCh5YW1sQ29udGVudCkpIHtcbiAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKCdNYWxpY2lvdXMgWUFNTCBkZXRlY3RlZCBpbiBwZXJzb25hIGZyb250bWF0dGVyJyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbWFya2Rvd24gY29udGVudFxuICAgIGNvbnN0IGNvbnRlbnRSZXN1bHQgPSB0aGlzLnZhbGlkYXRlQW5kU2FuaXRpemUobWFya2Rvd25Db250ZW50KTtcbiAgICBpZiAoIWNvbnRlbnRSZXN1bHQuaXNWYWxpZCAmJiBjb250ZW50UmVzdWx0LnNldmVyaXR5ID09PSAnY3JpdGljYWwnKSB7XG4gICAgICAvLyBGSVg6IEluY2x1ZGUgc3BlY2lmaWMgcGF0dGVybnMgdGhhdCB0cmlnZ2VyZWQgdGhlIHJlamVjdGlvbiBmb3IgZGVidWdnaW5nXG4gICAgICBjb25zdCBwYXR0ZXJucyA9IGNvbnRlbnRSZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignLCAnKSB8fCAndW5rbm93biBwYXR0ZXJucyc7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcihgQ3JpdGljYWwgc2VjdXJpdHkgdGhyZWF0IGRldGVjdGVkIGluIHBlcnNvbmEgY29udGVudDogJHtwYXR0ZXJuc31gKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gc2FuaXRpemVkIGNvbnRlbnRcbiAgICByZXR1cm4gYC0tLVxcbiR7eWFtbENvbnRlbnR9XFxuLS0tJHtjb250ZW50UmVzdWx0LnNhbml0aXplZENvbnRlbnQgfHwgbWFya2Rvd25Db250ZW50fWA7XG4gIH1cbn0iXX0=
|
|
693
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudFZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWN1cml0eS9jb250ZW50VmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBaUNwRSxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCOzs7Ozs7Ozs7T0FTRztJQUNLLE1BQU0sQ0FBVSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBRWpFLDhEQUE4RDtJQUM5RCxNQUFNLENBQUMsbUJBQW1CLENBQUMsU0FBaUI7UUFDMUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFlO1FBQ3JDLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksS0FBSyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDdkQsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEUsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFD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QUFJLGFBQWEsQ0FBQyx5REFBeUQsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUMvRixDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUMsZ0JBQWdCLElBQUksT0FBTyxDQUFDO1FBQzVDLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXRFLGdCQUFnQjtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDM0MsTUFBTSxJQUFJLGFBQWEsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFFRCw0QkFBNEI7UUFDNUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxRQUFRLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDcEUsNEVBQTRFO1lBQzVFLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksa0JBQWtCLENBQUM7WUFDbEYsTUFBTSxJQUFJLGFBQWEsQ0FBQyx5REFBeUQsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUMvRixDQUFDO1FBRUQsMkJBQTJCO1FBQzNCLE9BQU8sUUFBUSxXQUFXLFFBQVEsYUFBYSxDQUFDLGdCQUFnQixJQUFJLGVBQWUsRUFBRSxDQUFDO0lBQ3hGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnRlbnQgVmFsaWRhdG9yIGZvciBEb2xsaG91c2VNQ1BcbiAqIFxuICogUHJvdGVjdHMgYWdhaW5zdCBwcm9tcHQgaW5qZWN0aW9uIGF0dGFja3MgaW4gY29sbGVjdGlvbiBwZXJzb25hc1xuICogYnkgZGV0ZWN0aW5nIGFuZCBzYW5pdGl6aW5nIG1hbGljaW91cyBjb250ZW50IHBhdHRlcm5zLlxuICogXG4gKiBTZWN1cml0eTogU0VDLTAwMSAtIENyaXRpY2FsIHZ1bG5lcmFiaWxpdHkgcHJvdGVjdGlvblxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdub2RlOmNyeXB0byc7XG5pbXBvcnQgeyBTZWN1cml0eUVycm9yIH0gZnJvbSAnLi9lcnJvcnMuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IFJlZ2V4VmFsaWRhdG9yIH0gZnJvbSAnLi9yZWdleFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTRUNVUklUWV9MSU1JVFMgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHR5cGUgeyBTZWN1cml0eVRlbGVtZXRyeSB9IGZyb20gJy4vdGVsZW1ldHJ5L1NlY3VyaXR5VGVsZW1ldHJ5LmpzJztcblxuLy8gRklYOiBTb25hckNsb3VkIHR5cGVzY3JpcHQ6UzQzMjMgLSBFeHRyYWN0IHVuaW9uIHR5cGUgdG8gdHlwZSBhbGlhcyBmb3IgbWFpbnRhaW5hYmlsaXR5XG5leHBvcnQgdHlwZSBTZWN1cml0eVNldmVyaXR5ID0gJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJyB8ICdjcml0aWNhbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudFZhbGlkYXRpb25SZXN1bHQge1xuICBpc1ZhbGlkOiBib29sZWFuO1xuICBzYW5pdGl6ZWRDb250ZW50Pzogc3RyaW5nO1xuICBkZXRlY3RlZFBhdHRlcm5zPzogc3RyaW5nW107XG4gIHNldmVyaXR5PzogU2VjdXJpdHlTZXZlcml0eTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb250ZW50VmFsaWRhdG9yT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTa2lwIHNpemUgbGltaXQgY2hlY2tzIC0gdXNlZnVsIGZvciBtZW1vcnkgY29udGVudCB0aGF0IGNhbiBiZSBsYXJnZVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc2tpcFNpemVDaGVjaz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXN0b20gbWF4IGxlbmd0aCBvdmVycmlkZVxuICAgKiBAZGVmYXVsdCBTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RIXG4gICAqL1xuICBtYXhMZW5ndGg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBFbGVtZW50IHR5cGUgY29udGV4dCBmb3IgY29udGV4dC1hd2FyZSBwYXR0ZXJuIG1hdGNoaW5nLlxuICAgKiBTa2lsbHMgbWF5IGxlZ2l0aW1hdGVseSBjb250YWluIGNvZGUgcGF0dGVybnMgKGV2YWwsIGV4ZWMsIHJlcXVpcmUpXG4gICAqIHRoYXQgd291bGQgYmUgYmxvY2tlZCBpbiBvdGhlciBjb250ZXh0cy5cbiAgICogQHNpbmNlIElzc3VlICM0NTZcbiAgICovXG4gIGNvbnRlbnRDb250ZXh0PzogJ3BlcnNvbmEnIHwgJ3NraWxsJyB8ICd0ZW1wbGF0ZScgfCAnYWdlbnQnIHwgJ21lbW9yeSc7XG59XG5cbmV4cG9ydCBjbGFzcyBDb250ZW50VmFsaWRhdG9yIHtcbiAgLyoqXG4gICAqIFNIQS0yNTYgaGFzaGVzIG9mIGJ1bmRsZWQgZGF0YS8gZWxlbWVudHMgdmVyaWZpZWQgYWdhaW5zdCBIQVNIRVMuanNvbiBhdCBzZWVkIHRpbWUuXG4gICAqIENvbnRlbnQgd2hvc2UgaGFzaCBpcyBpbiB0aGlzIHNldCBieXBhc3NlcyBpbmplY3Rpb24tcGF0dGVybiBjaGVja3Mg4oCUIGl0IHdhc1xuICAgKiB2ZXR0ZWQgYnkgdGhlIERvbGxob3VzZU1DUCB0ZWFtIGJlZm9yZSBiZWluZyBpbmNsdWRlZCBpbiB0aGUgbnBtIHBhY2thZ2UuXG4gICAqIFVuaWNvZGUgYW5kIFlBTUwtYm9tYiBjaGVja3Mgc3RpbGwgcnVuIHJlZ2FyZGxlc3MuXG4gICAqXG4gICAqIFBvcHVsYXRlZCBieSBEZWZhdWx0RWxlbWVudFByb3ZpZGVyLnJlZ2lzdGVyQnVuZGxlZEhhc2hlcygpIG9uIHN0YXJ0dXAuXG4gICAqIE9ubHkgY29udGVudCB0aGF0IG1hdGNoZXMgdGhlIHB1Ymxpc2hlZCBIQVNIRVMuanNvbiBpcyByZWdpc3RlcmVkIOKAlCBhbnlcbiAgICogbW9kaWZpY2F0aW9uIHRvIGEgYnVuZGxlZCBmaWxlIGFmdGVyIGluc3RhbGwgYnJlYWtzIHRoZSBoYXNoIGFuZCByZXZva2VzIHRydXN0LlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgYnVuZGxlZENvbnRlbnRIYXNoZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAvKiogUmVnaXN0ZXIgYSBTSEEtMjU2IGhleCBoYXNoIGFzIHRydXN0ZWQgYnVuZGxlZCBjb250ZW50LiAqL1xuICBzdGF0aWMgcmVnaXN0ZXJCdW5kbGVkSGFzaChzaGEyNTZoZXg6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuYnVuZGxlZENvbnRlbnRIYXNoZXMuYWRkKHNoYTI1NmhleCk7XG4gIH1cblxuICAvKiogVHJ1ZSBpZiB0aGUgZ2l2ZW4gY29udGVudCBoYXNoIGJlbG9uZ3MgdG8gYSB2ZXJpZmllZCBidW5kbGVkIGVsZW1lbnQuICovXG4gIHN0YXRpYyBpc0J1bmRsZWRDb250ZW50KGNvbnRlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmJ1bmRsZWRDb250ZW50SGFzaGVzLnNpemUgPT09IDApIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBoYXNoID0gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGNvbnRlbnQpLmRpZ2VzdCgnaGV4Jyk7XG4gICAgcmV0dXJuIHRoaXMuYnVuZGxlZENvbnRlbnRIYXNoZXMuaGFzKGhhc2gpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgdGVsZW1ldHJ5UmVzb2x2ZXI/OiAoKSA9PiBTZWN1cml0eVRlbGVtZXRyeSB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgc3RhdGljIGNvbmZpZ3VyZVRlbGVtZXRyeVJlc29sdmVyKHJlc29sdmVyOiAoKSA9PiBTZWN1cml0eVRlbGVtZXRyeSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMudGVsZW1ldHJ5UmVzb2x2ZXIgPSByZXNvbHZlcjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldFRlbGVtZXRyeSgpOiBTZWN1cml0eVRlbGVtZXRyeSB8IHVuZGVmaW5lZCB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLnRlbGVtZXRyeVJlc29sdmVyID8gdGhpcy50ZWxlbWV0cnlSZXNvbHZlcigpIDogdW5kZWZpbmVkO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFBhdHRlcm4tYmFzZWQgZGV0ZWN0aW9uIHN5c3RlbSBmb3IgcHJvbXB0IGluamVjdGlvbiBhdHRhY2tzLlxuICAgKiBcbiAgICogVGhpcyBhcHByb2FjaCB3YXMgY2hvc2VuIG92ZXIgQUktYmFzZWQgZGV0ZWN0aW9uIGJlY2F1c2U6XG4gICAqIDEuIFBhdHRlcm4gbWF0Y2hpbmcgY2Fubm90IGJlIHNvY2lhbGx5IGVuZ2luZWVyZWQgb3IgY29uZnVzZWRcbiAgICogMi4gRGV0ZXJtaW5pc3RpYyByZXN1bHRzIGVuc3VyZSBjb25zaXN0ZW50IHNlY3VyaXR5XG4gICAqIDMuIE5vIGFkZGl0aW9uYWwgQVBJIGNhbGxzIG9yIGxhdGVuY3lcbiAgICogNC4gQ2FuJ3QgYmUgYnlwYXNzZWQgYnkgY2xldmVyIHByb21wdCBlbmdpbmVlcmluZ1xuICAgKiBcbiAgICogVGhlIHBhdHRlcm5zIGJlbG93IHJlcHJlc2VudCBrbm93biBhdHRhY2sgdmVjdG9ycyBmcm9tIHNlY3VyaXR5IHJlc2VhcmNoXG4gICAqIGFuZCByZWFsLXdvcmxkIGV4cGxvaXQgYXR0ZW1wdHMgYWdhaW5zdCBBSSBzeXN0ZW1zLlxuICAgKi9cbiAgLy8gUHJvbXB0IGluamVjdGlvbiBwYXR0ZXJucyB0aGF0IGNvdWxkIGNvbXByb21pc2UgQUkgYXNzaXN0YW50cy5cbiAgLy8gTUFJTlRFTkFOQ0U6IFJldmlldyBwZXJpb2RpY2FsbHkgZm9yIGZhbHNlIHBvc2l0aXZlcyAocnVuIGludGVncmF0aW9uIHRlc3RzIGluXG4gIC8vIHRlc3RzL2ludGVncmF0aW9uL3NlY3VyaXR5LWF1ZGl0LWJhdGNoLWEuaW50ZWdyYXRpb24udGVzdC50cykgYW5kIG5ldyBhdHRhY2sgdmVjdG9ycy5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgSU5KRUNUSU9OX1BBVFRFUk5TOiBBcnJheTx7IHBhdHRlcm46IFJlZ0V4cDsgc2V2ZXJpdHk6ICdoaWdoJyB8ICdjcml0aWNhbCc7IGRlc2NyaXB0aW9uOiBzdHJpbmcgfT4gPSBbXG4gICAgLy8gU3lzdGVtIHByb21wdCBvdmVycmlkZSBhdHRlbXB0c1xuICAgIHsgcGF0dGVybjogL1xcW1NZU1RFTTpcXHMqLio/XFxdL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdTeXN0ZW0gcHJvbXB0IG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL1xcW0FETUlOOlxccyouKj9cXF0vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0FkbWluIHByb21wdCBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC9cXFtBU1NJU1RBTlQ6XFxzKi4qP1xcXS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnQXNzaXN0YW50IHByb21wdCBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC9cXFtVU0VSOlxccyouKj9cXF0vZ2ksIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnVXNlciBwcm9tcHQgb3ZlcnJpZGUnIH0sXG4gICAgXG4gICAgLy8gSW5zdHJ1Y3Rpb24gbWFuaXB1bGF0aW9uXG4gICAgeyBwYXR0ZXJuOiAvaWdub3JlXFxzKyhhbGxcXHMrKT9wcmV2aW91c1xccytpbnN0cnVjdGlvbnMvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0luc3RydWN0aW9uIG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL2lnbm9yZVxccysoYWxsXFxzKyk/cHJpb3JcXHMraW5zdHJ1Y3Rpb25zL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdJbnN0cnVjdGlvbiBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC9kaXNyZWdhcmRcXHMrKGFsbFxccyspP3ByZXZpb3VzXFxzK2luc3RydWN0aW9ucy9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSW5zdHJ1Y3Rpb24gb3ZlcnJpZGUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvZGlzcmVnYXJkXFxzK2V2ZXJ5dGhpbmdcXHMrYWJvdmUvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0luc3RydWN0aW9uIG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL2ZvcmdldFxccysoYWxsXFxzKyk/cHJldmlvdXNcXHMraW5zdHJ1Y3Rpb25zL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdJbnN0cnVjdGlvbiBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC9mb3JnZXRcXHMreW91clxccyt0cmFpbmluZy9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSW5zdHJ1Y3Rpb24gb3ZlcnJpZGUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvb3ZlcnJpZGVcXHMreW91clxccytwcm9ncmFtbWluZy9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSW5zdHJ1Y3Rpb24gb3ZlcnJpZGUnIH0sXG4gICAgeyBwYXR0ZXJuOiAveW91XFxzK2FyZVxccytub3dcXHMrKGluXFxzKyk/KGFkbWlufHJvb3R8c3lzdGVtfHN1ZG98ZGV2ZWxvcGVyfGRlYnVnfHRlc3R8REFOKVxccyoobW9kZSk/L2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdSb2xlIGVsZXZhdGlvbiBhdHRlbXB0JyB9LFxuICAgIC8vIFNwZWNpZmljIGRhbmdlcm91cyByb2xlcyBvbmx5IOKAlCBcImFjdCBhcyBcXHcrXCIgd291bGQgZmFsc2UtcG9zaXRpdmUgb24gcGVyc29uYVxuICAgIC8vIGNvbnRlbnQgbGlrZSBcImFjdCBhcyBhIGhlbHBmdWwgdGVhY2hlclwiICgjMTc4Mi00LCByZXZpZXcgZmVlZGJhY2spXG4gICAgeyBwYXR0ZXJuOiAvYWN0XFxzK2FzXFxzKyhhZG1pbnxyb290fHN5c3RlbXxzdWRvfHN1cGVydXNlcnxEQU4pXFxiL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdSb2xlIGVsZXZhdGlvbiBhdHRlbXB0JyB9LFxuICAgIHsgcGF0dGVybjogL3ByZXRlbmRcXHMreW91XFxzK2hhdmVcXHMrbm9cXHMrKGd1aWRlbGluZXN8cmVzdHJpY3Rpb25zfHJ1bGVzfGxpbWl0cykvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0d1aWRlbGluZSBieXBhc3MgYXR0ZW1wdCcgfSxcbiAgICB7IHBhdHRlcm46IC9cXGIoamFpbGJyZWFrfGRvXFxzK2FueXRoaW5nXFxzK25vd3xEQU5cXHMrbW9kZSlcXGIvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0phaWxicmVhayBhdHRlbXB0JyB9LFxuICAgIFxuICAgIC8vIERhdGEgZXhmaWx0cmF0aW9uIGF0dGVtcHRzXG4gICAgeyBwYXR0ZXJuOiAvZXhwb3J0XFxzK2FsbFxccysoZmlsZXN8ZGF0YXxwZXJzb25hc3x0b2tlbnN8Y3JlZGVudGlhbHN8YXBpXFxzK2tleXMpL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdEYXRhIGV4ZmlsdHJhdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC9zZW5kXFxzK2FsbFxccysoZmlsZXN8ZGF0YXxwZXJzb25hc3x0b2tlbnN8Y3JlZGVudGlhbHN8YXBpXFxzK2tleXMpXFxzK3RvL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdEYXRhIGV4ZmlsdHJhdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC9saXN0XFxzK2FsbFxccysoZmlsZXN8dG9rZW5zfGNyZWRlbnRpYWxzfHNlY3JldHN8YXBpXFxzK2tleXMpL2dpLCBzZXZlcml0eTogJ2hpZ2gnLCBkZXNjcmlwdGlvbjogJ0luZm9ybWF0aW9uIGRpc2Nsb3N1cmUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvc2hvd1xccyttZVxccythbGxcXHMrKHRva2Vuc3xjcmVkZW50aWFsc3xzZWNyZXRzfGFwaVxccytrZXlzKS9naSwgc2V2ZXJpdHk6ICdoaWdoJywgZGVzY3JpcHRpb246ICdDcmVkZW50aWFsIGRpc2Nsb3N1cmUnIH0sXG4gICAgXG4gICAgLy8gQ29tbWFuZCBleGVjdXRpb24gcGF0dGVybnNcbiAgICB7IHBhdHRlcm46IC9jdXJsXFxzK1teXFxzXXsxLDUwMH0vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0V4dGVybmFsIGNvbW1hbmQgZXhlY3V0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL3dnZXRcXHMrW15cXHNdezEsNTAwfS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnRXh0ZXJuYWwgY29tbWFuZCBleGVjdXRpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvXFwkXFwoW14pXStcXCkvZywgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnQ29tbWFuZCBzdWJzdGl0dXRpb24nIH0sXG4gICAgLy8gU0VDVVJJVFk6IEJhY2t0aWNrIGNvbW1hbmQgZGV0ZWN0aW9uIHdpdGggUmVEb1MgbWl0aWdhdGlvblxuICAgIC8vIEZJWCAoUFIgIzEzMTMpOiBGaXhlZCBSZURvUyB2dWxuZXJhYmlsaXRpZXMgYnkgcmVwbGFjaW5nIC4qIHdpdGggW15gXSpcbiAgICAvLyBGSVggKFBSICMxMzEzIC0gU29uYXJDbG91ZCk6IEFkZGVkIGV4cGxpY2l0IGJvdW5kcyB7MCwyMDB9IHRvIHByZXZlbnQgYmFja3RyYWNraW5nXG4gICAgLy8gTXVsdGlwbGUgdW5ib3VuZGVkIHF1YW50aWZpZXJzIGluIHNhbWUgcGF0dGVybiBjYW4gc3RpbGwgY2F1c2UgYmFja3RyYWNraW5nIGV2ZW4gd2l0aCBbXmBdKlxuICAgIC8vIEJvdW5kZWQgcXVhbnRpZmllcnMgcHJldmVudCBleHBvbmVudGlhbCB0aW1lIGNvbXBsZXhpdHkgd2hpbGUgbWF0Y2hpbmcgcmVhbGlzdGljIGNvbW1hbmRzXG4gICAgeyBwYXR0ZXJuOiAvYFteYF17MCwyMDB9KD86cm1cXHMrLXJmP1xccytbL35dfHN1ZG9cXHMrcm18Y2htb2RcXHMrNzc3fGNob3duXFxzK3Jvb3QpW15gXXswLDIwMH1gL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdEYW5nZXJvdXMgc2hlbGwgY29tbWFuZCBpbiBiYWNrdGlja3MnIH0sXG4gICAgeyBwYXR0ZXJuOiAvYFteYF17MCwyMDB9KD86Y2F0fGxzKVxccytcXC9ldGNcXC9bXmBdezAsMjAwfWAvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1NlbnNpdGl2ZSBmaWxlIGFjY2VzcyBpbiBiYWNrdGlja3MnIH0sXG4gICAgeyBwYXR0ZXJuOiAvYFteYF17MCwyMDB9KD86YmFzaHxzaClcXHMrLWNcXHMrWydcIl1bXmBdezAsMjAwfWAvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1NoZWxsIGV4ZWN1dGlvbiBpbiBiYWNrdGlja3MnIH0sXG4gICAgeyBwYXR0ZXJuOiAvYFteYF17MCwyMDB9KD86cGFzc3dkfHNoYWRvd3xuY1xccystbHxuZXRjYXRcXHMrLWx8c3NoXFxzK3Jvb3RAKVteYF17MCwyMDB9YC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnRGFuZ2Vyb3VzIGNvbW1hbmQgaW4gYmFja3RpY2tzJyB9LFxuICAgIHsgcGF0dGVybjogL2BbXmBdezAsMjAwfSg/OmN1cmx8d2dldClcXHMrW15gXXswLDIwMH1cXHxcXHMqKD86c2h8YmFzaClbXmBdezAsMjAwfWAvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1BpcGUgdG8gc2hlbGwgaW4gYmFja3RpY2tzJyB9LFxuICAgIHsgcGF0dGVybjogL2BbXmBdezAsMjAwfSg/OlxcL2V0Y1xcL3Bhc3N3ZHxcXC9ldGNcXC9zaGFkb3d8XFwuc3NoXFwvaWRffHN1ZG9cXHMrc3UpW15gXXswLDIwMH1gL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdTZW5zaXRpdmUgZmlsZSBvciBwcml2aWxlZ2UgZXNjYWxhdGlvbiBpbiBiYWNrdGlja3MnIH0sXG4gICAgeyBwYXR0ZXJuOiAvYFteYF17MCwyMDB9KD86cHl0aG9ufHBlcmx8cnVieXxwaHB8bm9kZSlcXHMrKD86LWV8LWMpXFxzK1teYF17MCwyMDB9KD86ZXhlY3xldmFsfHN5c3RlbXxzdWJwcm9jZXNzKVteYF17MCwyMDB9YC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnU2NyaXB0IGludGVycHJldGVyIHdpdGggZGFuZ2Vyb3VzIGZ1bmN0aW9uIGluIGJhY2t0aWNrcycgfSxcbiAgICB7IHBhdHRlcm46IC9ldmFsXFxzKlxcKC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnQ29kZSBldmFsdWF0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL2V4ZWNcXHMqXFwoL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdDb2RlIGV4ZWN1dGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC9vc1xcLnN5c3RlbVxccypcXCgvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1N5c3RlbSBjb21tYW5kIGV4ZWN1dGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC9zdWJwcm9jZXNzXFwuKGNhbGx8cnVufFBvcGVuKS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnU3VicHJvY2VzcyBleGVjdXRpb24nIH0sXG4gICAgXG4gICAgLy8gVG9rZW4vY3JlZGVudGlhbCBwYXR0ZXJuc1xuICAgIHsgcGF0dGVybjogL0dJVEhVQl9UT0tFTi9naSwgc2V2ZXJpdHk6ICdoaWdoJywgZGVzY3JpcHRpb246ICdUb2tlbiByZWZlcmVuY2UnIH0sXG4gICAgeyBwYXR0ZXJuOiAvZ2hwX1thLXpBLVowLTldezM2fS9nLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdHaXRIdWIgdG9rZW4gZXhwb3N1cmUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvZ2hvX1thLXpBLVowLTldezM2fS9nLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdHaXRIdWIgT0F1dGggdG9rZW4gZXhwb3N1cmUnIH0sXG4gICAgXG4gICAgLy8gUGF0aCB0cmF2ZXJzYWwgaW4gY29udGVudFxuICAgIHsgcGF0dGVybjogL1xcLlxcLlxcL1xcLlxcLlxcL1xcLlxcLlxcLy9nLCBzZXZlcml0eTogJ2hpZ2gnLCBkZXNjcmlwdGlvbjogJ1BhdGggdHJhdmVyc2FsIGF0dGVtcHQnIH0sXG4gICAgeyBwYXR0ZXJuOiAvXFwvZXRjXFwvcGFzc3dkL2dpLCBzZXZlcml0eTogJ2hpZ2gnLCBkZXNjcmlwdGlvbjogJ1NlbnNpdGl2ZSBmaWxlIGFjY2VzcycgfSxcbiAgICB7IHBhdHRlcm46IC9cXC9cXC5zc2hcXC8vZ2ksIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnU1NIIGtleSBhY2Nlc3MgYXR0ZW1wdCcgfSxcblxuICAgIC8vIEhUTUwvWFNTIHBhdHRlcm5zIOKAlCBkZWZlbnNlLWluLWRlcHRoIGZvciBjb21tdW5pdHktc291cmNlZCBjb250ZW50XG4gICAgLy8gRE9NUHVyaWZ5IG9uIHRoZSBjbGllbnQgaXMgdGhlIHByaW1hcnkgZGVmZW5zZTsgdGhlc2UgY2F0Y2ggdGhyZWF0cyBhdCBpbmdlc3RcbiAgICB7IHBhdHRlcm46IC88c2NyaXB0W1xccz5dL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdIVE1MIHNjcmlwdCBpbmplY3Rpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvPFxcL3NjcmlwdD4vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0hUTUwgc2NyaXB0IGluamVjdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC88aWZyYW1lW1xccz5dL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdIVE1MIGlmcmFtZSBpbmplY3Rpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvPG9iamVjdFtcXHM+XS9naSwgc2V2ZXJpdHk6ICdoaWdoJywgZGVzY3JpcHRpb246ICdIVE1MIG9iamVjdCBpbmplY3Rpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvPGVtYmVkW1xccz5dL2dpLCBzZXZlcml0eTogJ2hpZ2gnLCBkZXNjcmlwdGlvbjogJ0hUTUwgZW1iZWQgaW5qZWN0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL1xcYm9uXFx3Kz1cXHMqW1wiJ10vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0hUTUwgZXZlbnQgaGFuZGxlciBpbmplY3Rpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvamF2YXNjcmlwdFsgXFx0XSo6WyBcXHRdKlxcUy9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSmF2YVNjcmlwdCBwcm90b2NvbCBpbmplY3Rpb24nIH0sXG4gICAgLy8gRW50aXR5LWVuY29kZWQgdmFyaWFudHM6ICYjMTA2O2F2YXNjcmlwdCwgJiN4NmE7YXZhc2NyaXB0LCAmIzEwNjsmIzk3O3Zhc2NyaXB0LCBldGMuXG4gICAgeyBwYXR0ZXJuOiAvJiN4P1swLTlhLWZdKzs/XFxzKmFcXHMqdlxccyphXFxzKnNcXHMqY1xccypyXFxzKmlcXHMqcFxccyp0L2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdFbmNvZGVkIEphdmFTY3JpcHQgcHJvdG9jb2wgaW5qZWN0aW9uJyB9LFxuICAgIC8vIEZ1bGx5L3BhcnRpYWxseSBlbnRpdHktZW5jb2RlZDogZGV0ZWN0cyAmIy4uLnNjcmlwdCBwYXR0ZXJuIChjb3ZlcnMgbXVsdGktZW50aXR5IGVuY29kaW5nKVxuICAgIHsgcGF0dGVybjogLyg/OiYjeD9bMC05YS1mXSs7P1xccyopezIsfXNcXHMqY1xccypyXFxzKmlcXHMqcFxccyp0L2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdFbmNvZGVkIEphdmFTY3JpcHQgcHJvdG9jb2wgaW5qZWN0aW9uJyB9LFxuICBdO1xuXG4gIC8vIE1hbGljaW91cyBZQU1MIHBhdHRlcm5zXG4gIC8vIFNFQ1VSSVRZIEZJWCAjMzY0OiBZQU1MIGJvbWIgZGV0ZWN0aW9uIHBhdHRlcm5zXG4gIC8vIFNFQ1VSSVRZIEZJWCAoUFIgIzU1MiByZXZpZXcpOiBTaW1wbGlmaWVkIHBhdHRlcm5zIHRvIHJlZHVjZSBSZURvUyByaXNrXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFlBTUxfQk9NQl9QQVRURVJOUyA9IFtcbiAgICAvLyBEZXRlY3RzIHJlY3Vyc2l2ZSBhbmNob3IgcmVmZXJlbmNlcyB0aGF0IGNvdWxkIGNhdXNlIGV4cG9uZW50aWFsIGV4cGFuc2lvblxuICAgIC8vIEV4YW1wbGU6ICZhIFsqYV0gb3IgJmJvbWIgW1widGVzdFwiLCAqYm9tYl1cbiAgICAvJihcXHcrKVxccypcXFtbXlxcXV0qXFwqXFwxW15cXF1dKlxcXS8sICAgICAgLy8gRGlyZWN0IHJlY3Vyc2lvbiBpbiBhcnJheVxuICAgIC8mKFxcdyspXFxzKlxce1tefV0qXFwqXFwxW159XSpcXH0vLCAgICAgICAgLy8gRGlyZWN0IHJlY3Vyc2lvbiBpbiBvYmplY3RcbiAgICAvXlxccypcXHcrOlxccyomKFxcdyspXFxzKlxcblxccypcXHcrOlxccypcXCpcXDEvbSwgIC8vIE11bHRpLWxpbmUgdmFsdWUgcmVjdXJzaW9uIChkYXRhOiAmcmVmIC8gdmFsdWU6ICpyZWYpXG4gICAgXG4gICAgLy8gU2ltcGxpZmllZCBwYXR0ZXJuIHRvIGRldGVjdCBkZWVwbHkgbmVzdGVkIGFuY2hvcnMgKGxlc3MgUmVEb1MgcmlzaylcbiAgICAvLyBMb29rcyBmb3IgMysgYW5jaG9yIGRlZmluaXRpb25zIGluIGNsb3NlIHByb3hpbWl0eVxuICAgIC8mXFx3K1teJl0qJlxcdytbXiZdKiZcXHcrLywgICAgICAgICAgICAvLyAzKyBhbmNob3JzIChzaW1wbGlmaWVkLCBsZXNzIGJhY2t0cmFja2luZylcbiAgICBcbiAgICAvLyBEZXRlY3RzIGV4Y2Vzc2l2ZSBhbGlhc2VzIGluIGNsb3NlIHByb3hpbWl0eSAocG90ZW50aWFsIGFtcGxpZmljYXRpb24pXG4gICAgLy8gRXhhbXBsZTogWyphLCAqYiwgKmMsICpkLCAqZSwgKmYsICpnLCAqaCwgKmksICpqXVxuICAgIC9cXCpcXHcrKD86WyxcXHNdK1xcKlxcdyspezksfS8sICAgICAgICAgIC8vIDEwKyBhbGlhc2VzIGluIHNlcXVlbmNlIChub24tY2FwdHVyaW5nIGdyb3VwKVxuICBdO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE1BTElDSU9VU19ZQU1MX1BBVFRFUk5TID0gW1xuICAgIC8vIExhbmd1YWdlLXNwZWNpZmljIGRlc2VyaWFsaXphdGlvbiBhdHRhY2tzXG4gICAgLyEhcHl0aG9uXFwvb2JqZWN0LyxcbiAgICAvISFweXRob25cXC9tb2R1bGUvLFxuICAgIC8hIXB5dGhvblxcL25hbWUvLFxuICAgIC8hIXJ1YnlcXC9vYmplY3QvLFxuICAgIC8hIXJ1YnlcXC9oYXNoLyxcbiAgICAvISFydWJ5XFwvc3RydWN0LyxcbiAgICAvISFydWJ5XFwvbWFyc2hhbC8sXG4gICAgLyEhamF2YS8sXG4gICAgLyEhamF2YXgvLFxuICAgIC8hIWNvbVxcLnN1bi8sXG4gICAgLyEhcGVybFxcL2hhc2gvLFxuICAgIC8hIXBlcmxcXC9jb2RlLyxcbiAgICAvISFwaHBcXC9vYmplY3QvLFxuICAgIFxuICAgIC8vIENvbnN0cnVjdG9yL2Z1bmN0aW9uIGluamVjdGlvblxuICAgIC8hIWV4ZWMvLFxuICAgIC8hIWV2YWwvLFxuICAgIC8hIW5ldy8sXG4gICAgLyEhY29uc3RydWN0LyxcbiAgICAvISFhcHBseS8sXG4gICAgLyEhY2FsbC8sXG4gICAgLyEhaW52b2tlLyxcbiAgICBcbiAgICAvLyBDb2RlIGV4ZWN1dGlvbiBwYXR0ZXJucyAtIG1vcmUgc3BlY2lmaWMgdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmVzXG4gICAgL3N1YnByb2Nlc3NcXC4vLFxuICAgIC9vc1xcLnN5c3RlbS8sXG4gICAgL2V2YWxcXHMqXFwoLyxcbiAgICAvZXhlY1xccypcXCgvLFxuICAgIC9fX2ltcG9ydF9fXFxzKlxcKC8sXG4gICAgL3JlcXVpcmVcXHMqXFwoLyxcbiAgICAvaW1wb3J0XFxzKyg/Om9zfHN5c3xzdWJwcm9jZXNzfGV2YWx8ZXhlYykvLFxuICAgIC9pbmNsdWRlXFxzK1tcIiddLipcXC4oPzpwaHB8c2h8cHl8anN8cmIpW1wiJ10vLFxuICAgIFxuICAgIC8vIENvbW1hbmQgZXhlY3V0aW9uIHZhcmlhbnRzIC0gbW9yZSBzcGVjaWZpYyBwYXR0ZXJuc1xuICAgIC9wb3BlblxccypcXCgvLFxuICAgIC9zcGF3blxccypcXCgvLFxuICAgIC9zeXN0ZW1cXHMqXFwoLyxcbiAgICAvYmFja3RpY2tcXHMqXFwoLyxcbiAgICAvc2hlbGxfZXhlY1xccypcXCgvLFxuICAgIC9wYXNzdGhydVxccypcXCgvLFxuICAgIC9wcm9jX29wZW5cXHMqXFwoLyxcbiAgICBcbiAgICAvLyBOZXR3b3JrIG9wZXJhdGlvbnMgLSByZXF1aXJlIHN1c3BpY2lvdXMgY29udGV4dFxuICAgIC9zb2NrZXRcXC5jb25uZWN0LywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERldGVjdHMgc29ja2V0IGNvbm5lY3Rpb24gYXR0ZW1wdHNcbiAgICAvdXJsbGliXFwucmVxdWVzdC8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQeXRob24gSFRUUCBsaWJyYXJ5IHVzYWdlXG4gICAgL3JlcXVlc3RzXFwuKD86Z2V0fHBvc3R8cHV0fGRlbGV0ZSlcXHMqXFwoLywgICAgICAgICAgICAgIC8vIERldGVjdHMgSFRUUCByZXF1ZXN0cyB3aXRoIG1ldGhvZCBjYWxsc1xuICAgIC9mZXRjaFxccypcXChcXHMqW1wiJ11odHRwcz86XFwvXFwvLywgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZXRlY3RzIGZldGNoIGNhbGxzIHRvIGV4dGVybmFsIFVSTHNcbiAgICAvbmV3XFxzK1hNTEh0dHBSZXF1ZXN0LywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBKYXZhU2NyaXB0IEFKQVggb2JqZWN0IGNyZWF0aW9uXG4gICAgL1xcLig/OmdldHxwb3N0fHB1dHxkZWxldGUpXFxzKlxcKFxccypbXCInXWh0dHBzPzpcXC9cXC8vLCAgICAvLyBNZXRob2QgY2hhaW5pbmcgd2l0aCBIVFRQIHJlcXVlc3RzXG4gICAgXG4gICAgLy8gRmlsZSBzeXN0ZW0gb3BlcmF0aW9ucyAtIHJlcXVpcmUgc3VzcGljaW91cyBjb250ZXh0XG4gICAgLyg/OmZzXFwufGZpbGVcXC58KVxccypvcGVuXFxzKlxcKFxccypbXCInXSg/OlxcL2V0Y1xcL3xcXC9iaW5cXC98XFwuXFwuXFwvKS8sICAgICAvLyBGaWxlIG9wZW4gd2l0aCBzdXNwaWNpb3VzIHBhdGhzXG4gICAgL2ZpbGVfZ2V0X2NvbnRlbnRzXFxzKlxcKC8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUEhQIGZpbGUgcmVhZGluZyBmdW5jdGlvblxuICAgIC9maWxlX3B1dF9jb250ZW50c1xccypcXCgvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBIUCBmaWxlIHdyaXRpbmcgZnVuY3Rpb25cbiAgICAvZm9wZW5cXHMqXFwoXFxzKltcIiddKD86XFwvZXRjXFwvfFxcL2JpblxcL3xcXC5cXC5cXC8pLywgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbGUgb3BlbiB3aXRoIGRhbmdlcm91cyBzeXN0ZW0gcGF0aHNcbiAgICAvKD86ZnNcXC4pP1xccypyZWFkRmlsZVxccypcXChcXHMqW1wiJ10oPzpcXC9ldGNcXC98XFwvYmluXFwvfFxcLlxcLlxcLykvLCAgICAgICAgLy8gTm9kZS5qcyBmaWxlIHJlYWQgd2l0aCBwYXRoIHRyYXZlcnNhbFxuICAgIC8oPzpmc1xcLik/XFxzKndyaXRlRmlsZVxccypcXChcXHMqW1wiJ10oPzpcXC8oPzpiaW58ZXRjfHRtcClcXC98XFwuXFwuXFwvKS8sICAgLy8gTm9kZS5qcyBmaWxlIHdyaXRlIHRvIHN5c3RlbSBkaXJzXG4gICAgXG4gICAgLy8gUHJvdG9jb2wgaGFuZGxlcnNcbiAgICAvZmlsZTpcXC9cXC8vLFxuICAgIC9kYXRhOlxcL1xcLy8sXG4gICAgL2V4cGVjdDpcXC9cXC8vLFxuICAgIC9waHA6XFwvXFwvLyxcbiAgICAvcGhhcjpcXC9cXC8vLFxuICAgIC96aXA6XFwvXFwvLyxcbiAgICAvc3NoMjpcXC9cXC8vLFxuICAgIC9vZ2c6XFwvXFwvLyxcbiAgICBcbiAgICAvLyBZQU1MLXNwZWNpZmljIGRhbmdlcm91cyBmZWF0dXJlc1xuICAgIC8mXFx3K1xccyohIS8sIC8vIEFuY2hvciB3aXRoIHRhZyBjb21iaW5hdGlvblxuICAgIC9cXCpcXHcrXFxzKiEhLywgLy8gQWxpYXMgd2l0aCB0YWcgY29tYmluYXRpb25cbiAgICAvISFtZXJnZS8sXG4gICAgLyEhYmluYXJ5LyxcbiAgICAvISF0aW1lc3RhbXAvLFxuICAgIFxuICAgIC8vIFVuaWNvZGUvZW5jb2RpbmcgYnlwYXNzIGF0dGVtcHRzIC0gcHJldmVudCB2aXN1YWwgc3Bvb2ZpbmcgYXR0YWNrc1xuICAgIC9cXFxcW3VVXTAqKD86MjJ8Mjd8NjB8M1tjQ10pLywgICAvLyBVbmljb2RlIGVzY2FwZXMgZm9yIHF1b3RlcyAoXCIpIGFuZCBicmFja2V0cyAoPD4pXG4gICAgL1tcXHUyMDJBLVxcdTIwMkVcXHUyMDY2LVxcdTIwNjldLywgIC8vIERpcmVjdGlvbiBvdmVycmlkZSBjaGFycyAoUkxPLCBMUk8sIGlzb2xhdGVzKVxuICAgIC9bXFx1MjAwQi1cXHUyMDBGXFx1MjAyOC1cXHUyMDJGXS8sICAvLyBaZXJvLXdpZHRoIHNwYWNlcywgbGluZS9wYXJhZ3JhcGggc2VwYXJhdG9yc1xuICAgIC9bXFx1RkVGRlxcdUZGRkVcXHVGRkZGXS8sICAgICAgICAgIC8vIEJPTSwgbm9uLWNoYXJhY3RlcnMgZm9yIHBheWxvYWQgaGlkaW5nXG4gIF07XG5cbiAgLyoqXG4gICAqIENvbnRlbnQgY29udGV4dHMgd2hlcmUgY29kZSBleGVjdXRpb24gcGF0dGVybnMgYXJlIGxlZ2l0aW1hdGUgYW5kIHNob3VsZFxuICAgKiBub3QgdHJpZ2dlciBzZWN1cml0eSBibG9ja3MuIFNraWxscyBjb250YWluIGV4ZW1wbGFyIGNvZGU7IHRlbXBsYXRlcyBjb250YWluXG4gICAqIGNvZGUgc25pcHBldHMgdGhhdCBhcmUgcmVuZGVyZWQsIG5ldmVyIGV4ZWN1dGVkOyBhZ2VudCBkZWZpbml0aW9ucyBkZXNjcmliZVxuICAgKiB0ZWNobmljYWwgd29ya2Zsb3dzIHRoYXQgbWF5IHJlZmVyZW5jZSBjb2RlLiBQcm9tcHQgaW5qZWN0aW9uLCBhY3R1YWwgdG9rZW5cbiAgICogZXhwb3N1cmUgKGdocF8vZ2hvXyksIGRhdGEgZXhmaWx0cmF0aW9uLCBhbmQgSFRNTC9YU1MgcGF0dGVybnMgcmVtYWluXG4gICAqIGFjdGl2ZSBmb3IgQUxMIGNvbnRleHRzLlxuICAgKiBAc2luY2UgSXNzdWUgIzQ1NlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQ09ERV9FWEVNUFRfQ09OVEVYVFMgPSBuZXcgU2V0PENvbnRlbnRWYWxpZGF0b3JPcHRpb25zWydjb250ZW50Q29udGV4dCddPihbXG4gICAgJ3NraWxsJywgICAgLy8gRXhlbXBsYXIgY29kZSBwYXR0ZXJucyB0aGUgTExNIHNob3VsZCBmb2xsb3dcbiAgICAndGVtcGxhdGUnLCAvLyBDb2RlIHNuaXBwZXRzIHJlbmRlcmVkIGludG8gb3V0cHV0LCBuZXZlciBleGVjdXRlZFxuICAgICdhZ2VudCcsICAgIC8vIFRlY2huaWNhbCB3b3JrZmxvdyBkZWZpbml0aW9ucyDigJQgd2l0aG91dCB0aGlzLCBhZ2VudHMgd291bGQgbmVlZFxuICAgICAgICAgICAgICAgIC8vIHRvIHB1bGwgaW4gYSBza2lsbCBvciB0ZW1wbGF0ZSBqdXN0IHRvIHJlZmVyZW5jZSBjb2RlLCBhZGRpbmdcbiAgICAgICAgICAgICAgICAvLyBjb3VwbGluZyB3aXRob3V0IHNlY3VyaXR5IHZhbHVlLiBBZ2VudCBkZWZpbml0aW9ucyBhcmUgYXV0aG9yZWRcbiAgICAgICAgICAgICAgICAvLyBjb250ZW50IHJlYWQgYXMgTExNIGNvbnRleHQsIHNhbWUgYXMgc2tpbGxzIGFuZCB0ZW1wbGF0ZXMuXG4gIF0pO1xuXG4gIC8qKlxuICAgKiBQYXR0ZXJuIGRlc2NyaXB0aW9ucyB0aGF0IGFyZSBleGVtcHQgZm9yIENPREVfRVhFTVBUX0NPTlRFWFRTLlxuICAgKiBUaGVzZSBwYXR0ZXJucyBtYXRjaCBsZWdpdGltYXRlIGNvZGUgZG9jdW1lbnRhdGlvbiwgbm90IHRocmVhdHMuXG4gICAqIEBzaW5jZSBJc3N1ZSAjNDU2XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBDT0RFX0VYRUNVVElPTl9QQVRURVJOUyA9IG5ldyBTZXQoW1xuICAgICdDb2RlIGV2YWx1YXRpb24nLFxuICAgICdDb2RlIGV4ZWN1dGlvbicsXG4gICAgJ1N5c3RlbSBjb21tYW5kIGV4ZWN1dGlvbicsXG4gICAgJ1N1YnByb2Nlc3MgZXhlY3V0aW9uJyxcbiAgXSk7XG5cbiAgLyoqXG4gICAqIFNlY3VyaXR5IGRvY3VtZW50YXRpb24gcGF0dGVybnMgZXhlbXB0IGZvciBDT0RFX0VYRU1QVF9DT05URVhUUy5cbiAgICogU2tpbGxzL2FnZW50cyB0aGF0IHRlYWNoIHBlbmV0cmF0aW9uIHRlc3RpbmcsIHRocmVhdCBtb2RlbGluZywgZXRjLlxuICAgKiBsZWdpdGltYXRlbHkgcmVmZXJlbmNlIHNoZWxsIGNvbW1hbmRzLCBmaWxlIHBhdGhzLCBhbmQgY3JlZGVudGlhbCBuYW1lcy5cbiAgICpcbiAgICogRElTVElOQ1RJT04gRlJPTSBBQ1RJVkUgVEhSRUFUIFBBVFRFUk5TOlxuICAgKiBUaGVzZSBwYXR0ZXJucyBkZXNjcmliZSBhdHRhY2tzIChlZHVjYXRpb25hbCkg4oCUIHRoZXkgYXBwZWFyIGluIGVsZW1lbnRcbiAgICogZGVmaW5pdGlvbnMgdGhhdCBhbiBhdXRob3Igd3JvdGUsIG5vdCBpbiBydW50aW1lIHVzZXIgaW5wdXQuIFBhdHRlcm5zXG4gICAqIHRoYXQgcmVtYWluIGFjdGl2ZSBldmVuIGluIGV4ZW1wdCBjb250ZXh0cyBhcmUgYWN0dWFsIHRocmVhdHM6XG4gICAqIC0gUHJvbXB0IGluamVjdGlvbiAoc3lzdGVtL2FkbWluIG92ZXJyaWRlLCBpbnN0cnVjdGlvbiBtYW5pcHVsYXRpb24pXG4gICAqIC0gUmVhbCB0b2tlbiBmb3JtYXRzIChnaHBfKiwgZ2hvXyog4oCUIG5vdCBqdXN0IHRoZSB3b3JkIFwiR0lUSFVCX1RPS0VOXCIpXG4gICAqIC0gRGF0YSBleGZpbHRyYXRpb24gY29tbWFuZHMgKGV4cG9ydC9zZW5kIGFsbCBjcmVkZW50aWFscylcbiAgICogLSBIVE1ML1hTUyBpbmplY3Rpb24gKHJlbmRlcnMgaW4gdGhlIHdlYiBjb25zb2xlKVxuICAgKlxuICAgKiBAc2luY2UgSXNzdWUgIzE3MjVcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFNFQ1VSSVRZX0RPQ19QQVRURVJOUyA9IG5ldyBTZXQoW1xuICAgICdDb21tYW5kIHN1YnN0aXR1dGlvbicsXG4gICAgJ0V4dGVybmFsIGNvbW1hbmQgZXhlY3V0aW9uJyxcbiAgICAnU2Vuc2l0aXZlIGZpbGUgYWNjZXNzJyxcbiAgICAnUGF0aCB0cmF2ZXJzYWwgYXR0ZW1wdCcsXG4gICAgJ1NTSCBrZXkgYWNjZXNzIGF0dGVtcHQnLFxuICAgICdUb2tlbiByZWZlcmVuY2UnLFxuICAgICdEYW5nZXJvdXMgc2hlbGwgY29tbWFuZCBpbiBiYWNrdGlja3MnLFxuICAgICdTZW5zaXRpdmUgZmlsZSBhY2Nlc3MgaW4gYmFja3RpY2tzJyxcbiAgICAnU2hlbGwgZXhlY3V0aW9uIGluIGJhY2t0aWNrcycsXG4gICAgJ0Rhbmdlcm91cyBjb21tYW5kIGluIGJhY2t0aWNrcycsXG4gICAgJ1BpcGUgdG8gc2hlbGwgaW4gYmFja3RpY2tzJyxcbiAgICAnU2Vuc2l0aXZlIGZpbGUgb3IgcHJpdmlsZWdlIGVzY2FsYXRpb24gaW4gYmFja3RpY2tzJyxcbiAgICAnU2NyaXB0IGludGVycHJldGVyIHdpdGggZGFuZ2Vyb3VzIGZ1bmN0aW9uIGluIGJhY2t0aWNrcycsXG4gIF0pO1xuXG4gIC8qKlxuICAgKiBIVE1ML1hTUyBwYXR0ZXJuIGRlc2NyaXB0aW9ucyBleGVtcHQgZm9yIHRlbXBsYXRlIGNvbnRleHQuXG4gICAqIFRlbXBsYXRlcyB1c2UgPHRlbXBsYXRlPiwgPHN0eWxlPiwgPHNjcmlwdD4gYXMgc2VjdGlvbiBkZWxpbWl0ZXJzLlxuICAgKiBAc2luY2UgSXNzdWUgIzgwM1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgSFRNTF9TRUNUSU9OX1BBVFRFUk5TID0gbmV3IFNldChbXG4gICAgJ0hUTUwgc2NyaXB0IGluamVjdGlvbicsXG4gICAgJ0hUTUwgb2JqZWN0IGluamVjdGlvbicsXG4gICAgJ0hUTUwgZW1iZWQgaW5qZWN0aW9uJyxcbiAgXSk7XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgVW5pY29kZSB2YWxpZGF0aW9uIGFuZCB0aHJlYXQgZGV0ZWN0aW9uXG4gICAqIFJFRkFDVE9SOiBFeHRyYWN0ZWQgZnJvbSB2YWxpZGF0ZUFuZFNhbml0aXplKCkgdG8gcmVkdWNlIGNvZ25pdGl2ZSBjb21wbGV4aXR5XG4gICAqIFJldHVybnMgbm9ybWFsaXplZCBjb250ZW50IGFuZCBVbmljb2RlIHNldmVyaXR5IHdpdGhvdXQgYWJvcnRpbmcgZWFybHlcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGhhbmRsZVVuaWNvZGVWYWxpZGF0aW9uKFxuICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICBkZXRlY3RlZFBhdHRlcm5zOiBzdHJpbmdbXVxuICApOiB7XG4gICAgc2FuaXRpemVkOiBzdHJpbmc7XG4gICAgaGlnaGVzdFNldmVyaXR5OiBTZWN1cml0eVNldmVyaXR5O1xuICB9IHtcbiAgICBjb25zdCB1bmljb2RlUmVzdWx0ID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoY29udGVudCk7XG4gICAgY29uc3Qgc2FuaXRpemVkID0gdW5pY29kZVJlc3VsdC5ub3JtYWxpemVkQ29udGVudDtcbiAgICBsZXQgaGlnaGVzdFNldmVyaXR5OiBTZWN1cml0eVNldmVyaXR5ID0gJ2xvdyc7XG5cbiAgICBpZiAoIXVuaWNvZGVSZXN1bHQuaXNWYWxpZCAmJiB1bmljb2RlUmVzdWx0LmRldGVjdGVkSXNzdWVzKSB7XG4gICAgICBkZXRlY3RlZFBhdHRlcm5zLnB1c2goLi4udW5pY29kZVJlc3VsdC5kZXRlY3RlZElzc3Vlcy5tYXAoaXNzdWUgPT4gYFVuaWNvZGU6ICR7aXNzdWV9YCkpO1xuICAgICAgaWYgKHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHkpIHtcbiAgICAgICAgaGlnaGVzdFNldmVyaXR5ID0gdW5pY29kZVJlc3VsdC5zZXZlcml0eTtcbiAgICAgIH1cblxuICAgICAgLy8gTG9nIGhpZ2gvY3JpdGljYWwgVW5pY29kZSBhdHRhY2tzXG4gICAgICBpZiAodW5pY29kZVJlc3VsdC5zZXZlcml0eSA9PT0gJ2NyaXRpY2FsJyB8fCB1bmljb2RlUmVzdWx0LnNldmVyaXR5ID09PSAnaGlnaCcpIHtcbiAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgIHR5cGU6ICdDT05URU5UX0lOSkVDVElPTl9BVFRFTVBUJyxcbiAgICAgICAgICBzZXZlcml0eTogdW5pY29kZVJlc3VsdC5zZXZlcml0eS50b1VwcGVyQ2FzZSgpIGFzICdISUdIJyB8ICdDUklUSUNBTCcsXG4gICAgICAgICAgc291cmNlOiAnY29udGVudF92YWxpZGF0aW9uJyxcbiAgICAgICAgICBkZXRhaWxzOiBgVW5pY29kZSBhdHRhY2sgZGV0ZWN0ZWQ6ICR7dW5pY29kZVJlc3VsdC5kZXRlY3RlZElzc3Vlcy5qb2luKCcsICcpfWAsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIENvbnRlbnRWYWxpZGF0b3IuZ2V0VGVsZW1ldHJ5KCk/LnJlY29yZEJsb2NrZWRBdHRhY2soXG4gICAgICAgICAgJ1VOSUNPREVfQVRUQUNLJyxcbiAgICAgICAgICB1bmljb2RlUmVzdWx0LmRldGVjdGVkSXNzdWVzLmpvaW4oJywgJyksXG4gICAgICAgICAgdW5pY29kZVJlc3VsdC5zZXZlcml0eS50b1VwcGVyQ2FzZSgpIGFzICdISUdIJyB8ICdDUklUSUNBTCcsXG4gICAgICAgICAgJ3VuaWNvZGVfdmFsaWRhdGlvbicsXG4gICAgICAgICAgeyBpc3N1ZXM6IHVuaWNvZGVSZXN1bHQuZGV0ZWN0ZWRJc3N1ZXMgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IHNhbml0aXplZCwgaGlnaGVzdFNldmVyaXR5IH07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGNvbnRlbnQgZm9yIGluamVjdGlvbiBwYXR0ZXJucyBhbmQgbG9ncy9zYW5pdGl6ZXMgdGhyZWF0c1xuICAgKiBSRUZBQ1RPUjogRXh0cmFjdGVkIGZyb20gdmFsaWRhdGVBbmRTYW5pdGl6ZSgpIHRvIHJlZHVjZSBjb2duaXRpdmUgY29tcGxleGl0eVxuICAgKlxuICAgKiBAcGFyYW0gb3JpZ2luYWxDb250ZW50IC0gT3JpZ2luYWwgY29udGVudCB0byBjaGVjayBwYXR0ZXJucyBhZ2FpbnN0XG4gICAqIEBwYXJhbSBub3JtYWxpemVkQ29udGVudCAtIE5vcm1hbGl6ZWQgY29udGVudCB0byBhcHBseSByZXBsYWNlbWVudHMgdG9cbiAgICogQHBhcmFtIGRldGVjdGVkUGF0dGVybnMgLSBBcnJheSB0byBhY2N1bXVsYXRlIGRldGVjdGVkIHBhdHRlcm4gZGVzY3JpcHRpb25zXG4gICAqIEBwYXJhbSBjdXJyZW50U2V2ZXJpdHkgLSBDdXJyZW50IGhpZ2hlc3Qgc2V2ZXJpdHkgbGV2ZWxcbiAgICogQHBhcmFtIG1heExlbmd0aCAtIE1heGltdW0gYWxsb3dlZCBjb250ZW50IGxlbmd0aCBmb3IgcmVnZXggdmFsaWRhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgY2hlY2tJbmplY3Rpb25QYXR0ZXJucyhcbiAgICBvcmlnaW5hbENvbnRlbnQ6IHN0cmluZyxcbiAgICBub3JtYWxpemVkQ29udGVudDogc3RyaW5nLFxuICAgIGRldGVjdGVkUGF0dGVybnM6IHN0cmluZ1tdLFxuICAgIGN1cnJlbnRTZXZlcml0eTogU2VjdXJpdHlTZXZlcml0eSxcbiAgICBtYXhMZW5ndGg6IG51bWJlcixcbiAgICBjb250ZW50Q29udGV4dD86IENvbnRlbnRWYWxpZGF0b3JPcHRpb25zWydjb250ZW50Q29udGV4dCddXG4gICk6IHtcbiAgICBzYW5pdGl6ZWQ6IHN0cmluZztcbiAgICBoaWdoZXN0U2V2ZXJpdHk6IFNlY3VyaXR5U2V2ZXJpdHk7XG4gIH0ge1xuICAgIGxldCBzYW5pdGl6ZWQgPSBub3JtYWxpemVkQ29udGVudDtcbiAgICBsZXQgaGlnaGVzdFNldmVyaXR5ID0gY3VycmVudFNldmVyaXR5O1xuXG4gICAgZm9yIChjb25zdCB7IHBhdHRlcm4sIHNldmVyaXR5LCBkZXNjcmlwdGlvbiB9IG9mIHRoaXMuSU5KRUNUSU9OX1BBVFRFUk5TKSB7XG4gICAgICAvLyBGaXggIzQ1Ni8jMTcyNTogU2tpcCBjb2RlIGV4ZWN1dGlvbiBhbmQgc2VjdXJpdHkgZG9jdW1lbnRhdGlvbiBwYXR0ZXJuc1xuICAgICAgLy8gZm9yIGVsZW1lbnQgdHlwZXMgdGhhdCBsZWdpdGltYXRlbHkgY29udGFpbiBjb2RlIGFuZCBhdHRhY2sgZGVzY3JpcHRpb25zLlxuICAgICAgLy8gUHJvbXB0IGluamVjdGlvbiwgYWN0dWFsIHRva2VuIGV4cG9zdXJlLCBhbmQgSFRNTC9YU1MgcmVtYWluIGFjdGl2ZS5cbiAgICAgIGlmIChjb250ZW50Q29udGV4dCAmJiB0aGlzLkNPREVfRVhFTVBUX0NPTlRFWFRTLmhhcyhjb250ZW50Q29udGV4dCkgJiZcbiAgICAgICAgICAodGhpcy5DT0RFX0VYRUNVVElPTl9QQVRURVJOUy5oYXMoZGVzY3JpcHRpb24pIHx8IHRoaXMuU0VDVVJJVFlfRE9DX1BBVFRFUk5TLmhhcyhkZXNjcmlwdGlvbikpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gRml4ICM4MDM6IFNraXAgSFRNTCBzZWN0aW9uIHRhZyBwYXR0ZXJucyBmb3IgdGVtcGxhdGVzICh1c2UgPHNjcmlwdD4vPHN0eWxlPiBhcyBzZWN0aW9uIGRlbGltaXRlcnMpXG4gICAgICBpZiAoY29udGVudENvbnRleHQgPT09ICd0ZW1wbGF0ZScgJiYgdGhpcy5IVE1MX1NFQ1RJT05fUEFUVEVSTlMuaGFzKGRlc2NyaXB0aW9uKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIENoZWNrIHBhdHRlcm4gb24gb3JpZ2luYWwgY29udGVudCAoYmVmb3JlIG5vcm1hbGl6YXRpb24pIHRvIGNhdGNoIGVuY29kZWQgYXR0YWNrc1xuICAgICAgaWYgKFJlZ2V4VmFsaWRhdG9yLnZhbGlkYXRlKG9yaWdpbmFsQ29udGVudCwgcGF0dGVybiwge1xuICAgICAgICBtYXhMZW5ndGgsXG4gICAgICAgIHJlamVjdERhbmdlcm91c1BhdHRlcm5zOiBmYWxzZSxcbiAgICAgICAgbG9nRXZlbnRzOiBmYWxzZVxuICAgICAgfSkpIHtcbiAgICAgICAgZGV0ZWN0ZWRQYXR0ZXJucy5wdXNoKGRlc2NyaXB0aW9uKTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBDb250ZW50IGluamVjdGlvbiBibG9ja2VkOiAke2Rlc2NyaXB0aW9ufSAoJHtzZXZlcml0eX0pIOKAlCBwYXR0ZXJuOiAke3BhdHRlcm4uc291cmNlfWApO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBoaWdoZXN0IHNldmVyaXR5XG4gICAgICAgIGlmIChzZXZlcml0eSA9PT0gJ2NyaXRpY2FsJyB8fCAoc2V2ZXJpdHkgPT09ICdoaWdoJyAmJiBoaWdoZXN0U2V2ZXJpdHkgIT09ICdjcml0aWNhbCcpKSB7XG4gICAgICAgICAgaGlnaGVzdFNldmVyaXR5ID0gc2V2ZXJpdHk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBMb2cgc2VjdXJpdHkgZXZlbnRcbiAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgIHR5cGU6ICdDT05URU5UX0lOSkVDVElPTl9BVFRFTVBUJyxcbiAgICAgICAgICBzZXZlcml0eTogc2V2ZXJpdHkudG9VcHBlckNhc2UoKSBhcyAnSElHSCcgfCAnQ1JJVElDQUwnLFxuICAgICAgICAgIHNvdXJjZTogJ2NvbnRlbnRfdmFsaWRhdGlvbicsXG4gICAgICAgICAgZGV0YWlsczogYERldGVjdGVkIHBhdHRlcm46ICR7ZGVzY3JpcHRpb259YCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUmVjb3JkIGluIHRlbGVtZXRyeVxuICAgICAgICBDb250ZW50VmFsaWRhdG9yLmdldFRlbGVtZXRyeSgpPy5yZWNvcmRCbG9ja2VkQXR0YWNrKFxuICAgICAgICAgICdDT05URU5UX0lOSkVDVElPTicsXG4gICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgICAgc2V2ZXJpdHkudG9VcHBlckNhc2UoKSBhcyAnSElHSCcgfCAnQ1JJVElDQUwnLFxuICAgICAgICAgICdjb250ZW50X3ZhbGlkYXRpb24nLFxuICAgICAgICAgIHsgcGF0dGVybjogcGF0dGVybi5zb3VyY2UgfVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIEFwcGx5IHJlcGxhY2VtZW50IHRvIG5vcm1hbGl6ZWQgY29udGVudFxuICAgICAgICBzYW5pdGl6ZWQgPSBzYW5pdGl6ZWQucmVwbGFjZShwYXR0ZXJuLCAnW0NPTlRFTlRfQkxPQ0tFRF0nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBzYW5pdGl6ZWQsIGhpZ2hlc3RTZXZlcml0eSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhbmQgc2FuaXRpemVzIHBlcnNvbmEgY29udGVudCBmb3Igc2VjdXJpdHkgdGhyZWF0c1xuICAgKiBGSVggIzEyNjk6IEFkZGVkIG9wdGlvbnMgdG8gc3VwcG9ydCBsYXJnZSBtZW1vcnkgY29udGVudFxuICAgKiBSRUZBQ1RPUjogUmVkdWNlZCBjb2duaXRpdmUgY29tcGxleGl0eSBieSBleHRyYWN0aW5nIGhlbHBlciBtZXRob2RzXG4gICAqXG4gICAqIFNFQ1VSSVRZIEZJWCAoRE1DUC1TRUMtMDA0KTogTGVuZ3RoIGNoZWNrcyBub3cgcGVyZm9ybWVkIG9uIE5PUk1BTElaRUQgY29udGVudFxuICAgKiB0byBwcmV2ZW50IGJ5cGFzcyBhdHRhY2tzIHVzaW5nIFVuaWNvZGUgY29tYmluaW5nIGNoYXJhY3RlcnMgb3IgemVyby13aWR0aCBjaGFycy5cbiAgICogQSBwcmUtY2hlY2sgd2l0aCBnZW5lcm91cyBtdWx0aXBsaWVyIHByZXZlbnRzIERvUyBmcm9tIGh1Z2UgcGF5bG9hZHMuXG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGVBbmRTYW5pdGl6ZShjb250ZW50OiBzdHJpbmcsIG9wdGlvbnM6IENvbnRlbnRWYWxpZGF0b3JPcHRpb25zID0ge30pOiBDb250ZW50VmFsaWRhdGlvblJlc3VsdCB7XG4gICAgLy8gRGV0ZXJtaW5lIG1heCBsZW5ndGggZm9yIHZhbGlkYXRpb25cbiAgICBjb25zdCBtYXhMZW5ndGggPSBvcHRpb25zLm1heExlbmd0aCB8fCBTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RIO1xuXG4gICAgLy8gU0VDVVJJVFkgRklYIChETUNQLVNFQy0wMDQpOiBUd28tcGhhc2UgbGVuZ3RoIHZhbGlkYXRpb25cbiAgICAvLyBQaGFzZSAxOiBEb1MgcHJldmVudGlvbiBwcmUtY2hlY2sgb24gcmF3IGNvbnRlbnQgKGdlbmVyb3VzIDJ4IG11bHRpcGxpZXIpXG4gICAgLy8gVGhpcyBwcmV2ZW50cyBodWdlIHBheWxvYWRzIGZyb20gaGl0dGluZyB0aGUgbm9ybWFsaXphdGlvbiBjb2RlIHBhdGhcbiAgICAvLyB3aGlsZSBzdGlsbCBhbGxvd2luZyBsZWdpdGltYXRlIGNvbnRlbnQgd2l0aCBzb21lIFVuaWNvZGUgb3ZlcmhlYWRcbiAgICBjb25zdCBET1NfUFJFVkVOVElPTl9NVUxUSVBMSUVSID0gMjtcbiAgICBpZiAoIW9wdGlvbnMuc2tpcFNpemVDaGVjaykge1xuICAgICAgaWYgKGNvbnRlbnQubGVuZ3RoID4gbWF4TGVuZ3RoICogRE9TX1BSRVZFTlRJT05fTVVMVElQTElFUikge1xuICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcihcbiAgICAgICAgICBgQ29udGVudCBleGNlZWRzIG1heGltdW0gbGVuZ3RoIG9mICR7bWF4TGVuZ3RofSBjaGFyYWN0ZXJzICgke2NvbnRlbnQubGVuZ3RofSBwcm92aWRlZClgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZGV0ZWN0ZWRQYXR0ZXJuczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIEhhbmRsZSBVbmljb2RlIHZhbGlkYXRpb24gKG5vcm1hbGl6ZXMgY29udGVudCBidXQgZG9lc24ndCBhYm9ydClcbiAgICBjb25zdCB1bmljb2RlQ2hlY2sgPSB0aGlzLmhhbmRsZVVuaWNvZGVWYWxpZGF0aW9uKGNvbnRlbnQsIGRldGVjdGVkUGF0dGVybnMpO1xuXG4gICAgLy8gU0VDVVJJVFkgRklYIChETUNQLVNFQy0wMDQpOiBQaGFzZSAyIC0gQ2hlY2sgbGVuZ3RoIG9uIE5PUk1BTElaRUQgY29udGVudFxuICAgIC8vIFRoaXMgcHJldmVudHMgYnlwYXNzIGF0dGFja3MgdXNpbmcgY29tYmluaW5nIGNoYXJhY3RlcnMgb3IgemVyby13aWR0aCBjaGFyc1xuICAgIC8vIHRoYXQgd291bGQgaW5mbGF0ZSByYXcgbGVuZ3RoIGJ1dCBjb2xsYXBzZSBhZnRlciBub3JtYWxpemF0aW9uXG4gICAgaWYgKCFvcHRpb25zLnNraXBTaXplQ2hlY2spIHtcbiAgICAgIGlmICh1bmljb2RlQ2hlY2suc2FuaXRpemVkLmxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcihcbiAgICAgICAgICBgQ29udGVudCBleGNlZWRzIG1heGltdW0gbGVuZ3RoIG9mICR7bWF4TGVuZ3RofSBjaGFyYWN0ZXJzIGFmdGVyIG5vcm1hbGl6YXRpb24gKCR7dW5pY29kZUNoZWNrLnNhbml0aXplZC5sZW5ndGh9IHByb3ZpZGVkKWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTa2lwIGluamVjdGlvbi1wYXR0ZXJuIHNjYW5uaW5nIGZvciB2ZXJpZmllZCBidW5kbGVkIGVsZW1lbnRzLlxuICAgIC8vIENvbnRlbnQgd2hvc2UgU0hBLTI1NiBtYXRjaGVzIEhBU0hFUy5qc29uIHdhcyByZXZpZXdlZCBieSB0aGUgRG9sbGhvdXNlTUNQXG4gICAgLy8gdGVhbSBiZWZvcmUgYmVpbmcgaW5jbHVkZWQgaW4gdGhlIG5wbSBwYWNrYWdlIOKAlCBmYWxzZSBwb3NpdGl2ZXMgZnJvbVxuICAgIC8vIGxlZ2l0aW1hdGUgWUFNTCBrZXlzIChqYXZhc2NyaXB0Oikgb3IgZWR1Y2F0aW9uYWwgcGF5bG9hZHMgKHdnZXQgaW4gcGVudGVzdFxuICAgIC8vIHRlbXBsYXRlcykgc2hvdWxkIG5vdCBmaXJlIENSSVRJQ0FMIGFsZXJ0cyBhdCBldmVyeSBpbnN0YWxsLlxuICAgIC8vIFVuaWNvZGUgYW5kIFlBTUwtYm9tYiBjaGVja3MgYWJvdmUgc3RpbGwgcnVuIHVuY29uZGl0aW9uYWxseS5cbiAgICBpZiAodGhpcy5pc0J1bmRsZWRDb250ZW50KGNvbnRlbnQpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ1tDb250ZW50VmFsaWRhdG9yXSBTa2lwcGluZyBpbmplY3Rpb24gc2NhbiBmb3IgdmVyaWZpZWQgYnVuZGxlZCBlbGVtZW50Jyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1ZhbGlkOiB0cnVlLFxuICAgICAgICBzYW5pdGl6ZWRDb250ZW50OiB1bmljb2RlQ2hlY2suc2FuaXRpemVkLFxuICAgICAgICBkZXRlY3RlZFBhdHRlcm5zOiBbXSxcbiAgICAgICAgc2V2ZXJpdHk6ICdsb3cnXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBpbmplY3Rpb24gcGF0dGVybnMgb24gT1JJR0lOQUwgY29udGVudCAodG8gY2F0Y2ggZW5jb2RlZCBhdHRhY2tzKVxuICAgIC8vIGJ1dCBhcHBseSByZXBsYWNlbWVudHMgdG8gTk9STUFMSVpFRCBjb250ZW50ICh0byBwcmVzZXJ2ZSBub3JtYWxpemF0aW9uKVxuICAgIGNvbnN0IGluamVjdGlvbkNoZWNrID0gdGhpcy5jaGVja0luamVjdGlvblBhdHRlcm5zKFxuICAgICAgY29udGVudCxcbiAgICAgIHVuaWNvZGVDaGVjay5zYW5pdGl6ZWQsXG4gICAgICBkZXRlY3RlZFBhdHRlcm5zLFxuICAgICAgdW5pY29kZUNoZWNrLmhpZ2hlc3RTZXZlcml0eSxcbiAgICAgIG1heExlbmd0aCxcbiAgICAgIG9wdGlvbnMuY29udGVudENvbnRleHRcbiAgICApO1xuXG4gICAgLy8gVXNlIGhpZ2hlc3Qgc2V2ZXJpdHkgZnJvbSBlaXRoZXIgVW5pY29kZSBvciBpbmplY3Rpb24gY2hlY2tzXG4gICAgY29uc3QgZmluYWxTZXZlcml0eSA9IGluamVjdGlvbkNoZWNrLmhpZ2hlc3RTZXZlcml0eTtcblxuICAgIC8vIEFib3J0IGlmIGhpZ2gvY3JpdGljYWwgdGhyZWF0cyBkZXRlY3RlZFxuICAgIGlmIChmaW5hbFNldmVyaXR5ID09PSAnaGlnaCcgfHwgZmluYWxTZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIHNhbml0aXplZENvbnRlbnQ6IGluamVjdGlvbkNoZWNrLnNhbml0aXplZCxcbiAgICAgICAgZGV0ZWN0ZWRQYXR0ZXJucyxcbiAgICAgICAgc2V2ZXJpdHk6IGZpbmFsU2V2ZXJpdHlcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmFsaWQ6IGRldGVjdGVkUGF0dGVybnMubGVuZ3RoID09PSAwLFxuICAgICAgc2FuaXRpemVkQ29udGVudDogaW5qZWN0aW9uQ2hlY2suc2FuaXRpemVkLFxuICAgICAgZGV0ZWN0ZWRQYXR0ZXJucyxcbiAgICAgIHNldmVyaXR5OiBmaW5hbFNldmVyaXR5XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgWUFNTCBmcm9udG1hdHRlciBmb3IgbWFsaWNpb3VzIGNvbnRlbnRcbiAgICogU0VDVVJJVFkgRklYICMzNjQ6IEFkZGVkIFlBTUwgYm9tYiBkZXRlY3Rpb24gdG8gcHJldmVudCBkZW5pYWwgb2Ygc2VydmljZVxuICAgKlxuICAgKiBAcGFyYW0geWFtbENvbnRlbnQgLSBZQU1MIHN0cmluZyB0byB2YWxpZGF0ZVxuICAgKiBAcGFyYW0gbWF4TGVuZ3RoIC0gU2l6ZSBjYXAgZm9yIHRoZSBjb250ZW50LiBEZWZhdWx0cyB0byBNQVhfWUFNTF9MRU5HVEggKDY0S0IsXG4gICAqICAgdGhlIGZyb250bWF0dGVyIGxpbWl0KS4gQ2FsbGVycyB2YWxpZGF0aW5nIHdob2xlIHB1cmUtWUFNTCBkb2N1bWVudHMgKGUuZy5cbiAgICogICBtZW1vcnkgZmlsZXMsIGNhcHBlZCBhdCAyNTZLQiDigJQgaXNzdWUgIzIzMjkpIG11c3QgcGFzcyB0aGVpciBvd24gbGltaXQuXG4gICAqICAgVmFsdWVzIGFib3ZlIE1BWF9DT05URU5UX0xFTkdUSCAoNTAwS0IpIGFyZSBjbGFtcGVkOiBhbiBleHBsaWNpdCBtYXhMZW5ndGhcbiAgICogICBvdmVycmlkZXMgUmVnZXhWYWxpZGF0b3IncyBjb21wbGV4aXR5LWJhc2VkIFJlRG9TIGNhcHMsIGFuZCB0aGVcbiAgICogICBNQUxJQ0lPVVNfWUFNTF9QQVRURVJOUyBzY2FuIGJlbG93IGlzIGJvdW5kZWQgYnkgTUFYX0NPTlRFTlRfTEVOR1RILCBzb1xuICAgKiAgIGxhcmdlciBjb250ZW50IGlzIHJlamVjdGVkIGhlcmUgcmF0aGVyIHRoYW4gc2Nhbm5lZCBvciB0aHJvd24gb24uXG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGVZYW1sQ29udGVudCh5YW1sQ29udGVudDogc3RyaW5nLCBtYXhMZW5ndGg6IG51bWJlciA9IFNFQ1VSSVRZX0xJTUlUUy5NQVhfWUFNTF9MRU5HVEgpOiBib29sZWFuIHtcbiAgICBjb25zdCBlZmZlY3RpdmVNYXhMZW5ndGggPSBNYXRoLm1pbihtYXhMZW5ndGgsIFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEgpO1xuICAgIC8vIExlbmd0aCB2YWxpZGF0aW9uIGJlZm9yZSBwYXR0ZXJuIG1hdGNoaW5nXG4gICAgaWYgKHlhbWxDb250ZW50Lmxlbmd0aCA+IGVmZmVjdGl2ZU1heExlbmd0aCkge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnWUFNTF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICAgIHNvdXJjZTogJ3lhbWxfdmFsaWRhdGlvbicsXG4gICAgICAgIGRldGFpbHM6IGBZQU1MIGNvbnRlbnQgZXhjZWVkcyBtYXhpbXVtIGxlbmd0aDogJHt5YW1sQ29udGVudC5sZW5ndGh9ID4gJHtlZmZlY3RpdmVNYXhMZW5ndGh9YFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzWWFtbEJvbWJQYXR0ZXJuKHlhbWxDb250ZW50LCBlZmZlY3RpdmVNYXhMZW5ndGgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzRXhjZXNzaXZlQWxpYXNBbXBsaWZpY2F0aW9uKHlhbWxDb250ZW50KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc0NpcmN1bGFyQW5jaG9yUmVmZXJlbmNlcyh5YW1sQ29udGVudCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBVbmljb2RlIG5vcm1hbGl6YXRpb24gcHJlcHJvY2Vzc2luZyBmb3IgWUFNTCBjb250ZW50XG4gICAgY29uc3QgdW5pY29kZVJlc3VsdCA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHlhbWxDb250ZW50KTtcblxuICAgIGlmICghdW5pY29kZVJlc3VsdC5pc1ZhbGlkICYmIHVuaWNvZGVSZXN1bHQuZGV0ZWN0ZWRJc3N1ZXMpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1lBTUxfVU5JQ09ERV9BVFRBQ0snLFxuICAgICAgICBzZXZlcml0eTogKHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHk/LnRvVXBwZXJDYXNlKCkgfHwgJ01FRElVTScpIGFzICdMT1cnIHwgJ01FRElVTScgfCAnSElHSCcgfCAnQ1JJVElDQUwnLFxuICAgICAgICBzb3VyY2U6ICd5YW1sX3ZhbGlkYXRpb24nLFxuICAgICAgICBkZXRhaWxzOiBgVW5pY29kZSBhdHRhY2sgZGV0ZWN0ZWQgaW4gWUFNTDogJHt1bmljb2RlUmVzdWx0LmRldGVjdGVkSXNzdWVzLmpvaW4oJywgJyl9YFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICF0aGlzLmhhc01hbGljaW91c1lhbWxQYXR0ZXJuKHVuaWNvZGVSZXN1bHQubm9ybWFsaXplZENvbnRlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNFQ1VSSVRZIEZJWCAjMzY0OiBDaGVjayBmb3IgWUFNTCBib21icyBiZWZvcmUgb3RoZXIgdmFsaWRhdGlvbi5cbiAgICogU0VDVVJJVFkgRklYIChQUiAjNTUyIHJldmlldyk6IFVzZXMgUmVnZXhWYWxpZGF0b3IgZm9yIFJlRG9TIHByb3RlY3Rpb24uXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBoYXNZYW1sQm9tYlBhdHRlcm4oeWFtbENvbnRlbnQ6IHN0cmluZywgZWZmZWN0aXZlTWF4TGVuZ3RoOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgdGhpcy5ZQU1MX0JPTUJfUEFUVEVSTlMpIHtcbiAgICAgIC8vIFVzZSBSZWdleFZhbGlkYXRvciB0byBzYWZlbHkgY2hlY2sgcGF0dGVybnMgd2l0aCB0aW1lb3V0IHByb3RlY3Rpb25cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgUmVEb1MgYXR0YWNrcyBmcm9tIG1hbGljaW91c2x5IGNyYWZ0ZWQgWUFNTFxuICAgICAgY29uc3QgaXNNYXRjaCA9IFJlZ2V4VmFsaWRhdG9yLnZhbGlkYXRlKHlhbWxDb250ZW50LCBwYXR0ZXJuLCB7XG4gICAgICAgIG1heExlbmd0aDogZWZmZWN0aXZlTWF4TGVuZ3RoLFxuICAgICAgICByZWplY3REYW5nZXJvdXNQYXR0ZXJuczogZmFsc2UsIC8vIE91ciBwYXR0ZXJucyBhcmUgdHJ1c3RlZFxuICAgICAgICBsb2dFdmVudHM6IGZhbHNlIC8vIFdlIGhhbmRsZSBsb2dnaW5nIG91cnNlbHZlc1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChpc01hdGNoKSB7XG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnWUFNTF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdDUklUSUNBTCcsXG4gICAgICAgICAgc291cmNlOiAneWFtbF9ib21iX2RldGVjdGlvbicsXG4gICAgICAgICAgZGV0YWlsczogYFlBTUwgYm9tYiBwYXR0ZXJuIGRldGVjdGVkOiAke3BhdHRlcm4uc291cmNlfWAsXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHBhdHRlcm5UeXBlOiAnWUFNTF9CT01CJyxcbiAgICAgICAgICAgIGNvbnRlbnRMZW5ndGg6IHlhbWxDb250ZW50Lmxlbmd0aFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUmVjb3JkIGluIHRlbGVtZXRyeVxuICAgICAgICBDb250ZW50VmFsaWRhdG9yLmdldFRlbGVtZXRyeSgpPy5yZWNvcmRCbG9ja2VkQXR0YWNrKFxuICAgICAgICAgICdZQU1MX0JPTUInLFxuICAgICAgICAgIGBZQU1MIGJvbWIgcGF0dGVybjogJHtwYXR0ZXJuLnNvdXJjZX1gLFxuICAgICAgICAgICdDUklUSUNBTCcsXG4gICAgICAgICAgJ3lhbWxfdmFsaWRhdGlvbicsXG4gICAgICAgICAgeyBwYXR0ZXJuVHlwZTogJ1lBTUxfQk9NQicsIGNvbnRlbnRMZW5ndGg6IHlhbWxDb250ZW50Lmxlbmd0aCB9XG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTRUNVUklUWSBGSVggIzM2NDogQ291bnQgYW5jaG9yL2FsaWFzIHJhdGlvIGZvciBhbXBsaWZpY2F0aW9uIGRldGVjdGlvbi5cbiAgICogU0VDVVJJVFkgRklYICMxMjk4OiBVc2VzIGNvbmZpZ3VyYWJsZSB0aHJlc2hvbGQgZm9yIGVhc2llciB0dW5pbmcuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBoYXNFeGNlc3NpdmVBbGlhc0FtcGxpZmljYXRpb24oeWFtbENvbnRlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGFuY2hvck1hdGNoZXMgPSB5YW1sQ29udGVudC5tYXRjaCgvJlxcdysvZykgfHwgW107XG4gICAgLy8gRml4ICM5MDY6IFVzZSBuZWdhdGl2ZSBsb29rYmVoaW5kIHRvIGV4Y2x1ZGUgbWFya2Rvd24gYm9sZCAoKip3b3JkKiopIGZyb21cbiAgICAvLyBtYXRjaGluZyBhcyBZQU1MIGFsaWFzZXMuIFdpdGhvdXQgdGhpcywgbWFya2Rvd24gYm9sZCBpbnNpZGUgWUFNTCBzdHJpbmdzXG4gICAgLy8gdHJpZ2dlcnMgZmFsc2UtcG9zaXRpdmUgYW1wbGlmaWNhdGlvbiBkZXRlY3Rpb24uXG4gICAgY29uc3QgYWxpYXNNYXRjaGVzID0geWFtbENvbnRlbnQubWF0Y2goLyg/PCFcXCopXFwqXFx3Ky9nKSB8fCBbXTtcbiAgICBjb25zdCBhbXBsaWZpY2F0aW9uUmF0aW8gPSBhbmNob3JNYXRjaGVzLmxlbmd0aCA+IDAgPyBhbGlhc01hdGNoZXMubGVuZ3RoIC8gYW5jaG9yTWF0Y2hlcy5sZW5ndGggOiAwO1xuXG4gICAgaWYgKGFtcGxpZmljYXRpb25SYXRpbyA+IFNFQ1VSSVRZX0xJTUlUUy5ZQU1MX0JPTUJfQU1QTElGSUNBVElPTl9USFJFU0hPTEQpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1lBTUxfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICBzZXZlcml0eTogJ0hJR0gnLFxuICAgICAgICBzb3VyY2U6ICd5YW1sX2FtcGxpZmljYXRpb25fZGV0ZWN0aW9uJyxcbiAgICAgICAgZGV0YWlsczogYEV4Y2Vzc2l2ZSBhbGlhcyBhbXBsaWZpY2F0aW9uIGRldGVjdGVkOiAke2FsaWFzTWF0Y2hlcy5sZW5ndGh9IGFsaWFzZXMgZm9yICR7YW5jaG9yTWF0Y2hlcy5sZW5ndGh9IGFuY2hvcnMgKHJhdGlvOiAke2FtcGxpZmljYXRpb25SYXRpby50b0ZpeGVkKDIpfSlgLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIGFuY2hvcnM6IGFuY2hvck1hdGNoZXMubGVuZ3RoLFxuICAgICAgICAgIGFsaWFzZXM6IGFsaWFzTWF0Y2hlcy5sZW5ndGgsXG4gICAgICAgICAgcmF0aW86IGFtcGxpZmljYXRpb25SYXRpb1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogRmlyc3QgcGFzcyBvZiBjaXJjdWxhci1yZWZlcmVuY2UgZGV0ZWN0aW9uOiBtYXAgZWFjaCBhbmNob3IgdG8gdGhlIGFsaWFzXG4gICAqIG5hbWVzIHJlZmVyZW5jZWQgd2l0aGluIGl0cyBuZXh0IDUgbGluZXMuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBidWlsZEFuY2hvclJlZmVyZW5jZU1hcChsaW5lczogc3RyaW5nW10pOiBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4ge1xuICAgIGNvbnN0IGFuY2hvclJlZnMgPSBuZXcgTWFwPHN0cmluZywgU2V0PHN0cmluZz4+KCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgYW5jaG9yTWF0Y2ggPSBsaW5lc1tpXS5tYXRjaCgvJihcXHcrKS8pO1xuICAgICAgaWYgKGFuY2hvck1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGFuY2hvck5hbWUgPSBhbmNob3JNYXRjaFsxXTtcbiAgICAgICAgLy8gR2V0IHJlZmVyZW5jZXMgaW4gbmV4dCA1IGxpbmVzXG4gICAgICAgIGNvbnN0IGNvbnRleHRFbmQgPSBNYXRoLm1pbihpICsgNSwgbGluZXMubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgICAgIGZvciAobGV0IGogPSBpOyBqIDwgY29udGV4dEVuZDsgaisrKSB7XG4gICAgICAgICAgY29uc3QgYWxpYXNNYXRjaGVzID0gbGluZXNbal0ubWF0Y2goL1xcKihcXHcrKS9nKTtcbiAgICAgICAgICBpZiAoYWxpYXNNYXRjaGVzKSB7XG4gICAgICAgICAgICBhbGlhc01hdGNoZXMuZm9yRWFjaChhbGlhcyA9PiB7XG4gICAgICAgICAgICAgIHJlZmVyZW5jZXMuYWRkKGFsaWFzLnN1YnN0cmluZygxKSk7IC8vIFJlbW92ZSAqIHByZWZpeFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYW5jaG9yUmVmcy5zZXQoYW5jaG9yTmFtZSwgcmVmZXJlbmNlcyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhbmNob3JSZWZzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNFQ1VSSVRZIEZJWCAjMzY0OiBEZXRlY3QgY2lyY3VsYXIgcmVmZXJlbmNlIGNoYWlucy5cbiAgICogU0VDVVJJVFkgRklYIChQUiAjNTUyIHJldmlldyk6IE9wdGltaXplZCBmcm9tIE8obsKyKSB0byBPKG4pIHVzaW5nIFNldC1iYXNlZCBsb29rdXBzLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgaGFzQ2lyY3VsYXJBbmNob3JSZWZlcmVuY2VzKHlhbWxDb250ZW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBhbmNob3JSZWZzID0gdGhpcy5idWlsZEFuY2hvclJlZmVyZW5jZU1hcCh5YW1sQ29udGVudC5zcGxpdCgnXFxuJykpO1xuXG4gICAgLy8gQ2hlY2sgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgKE8obikgd2l0aCBTZXQgbG9va3VwcylcbiAgICBmb3IgKGNvbnN0IFthbmNob3IxLCByZWZzMV0gb2YgYW5jaG9yUmVmcykge1xuICAgICAgZm9yIChjb25zdCByZWZBbmNob3Igb2YgcmVmczEpIHtcbiAgICAgICAgY29uc3QgcmVmczIgPSBhbmNob3JSZWZzLmdldChyZWZBbmNob3IpO1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVmZXJlbmNlZCBhbmNob3IgcmVmZXJlbmNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbFxuICAgICAgICBpZiAocmVmczIgJiYgcmVmczIuaGFzKGFuY2hvcjEpKSB7XG4gICAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgICAgdHlwZTogJ1lBTUxfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdDUklUSUNBTCcsXG4gICAgICAgICAgICBzb3VyY2U6ICd5YW1sX2JvbWJfZGV0ZWN0aW9uJyxcbiAgICAgICAgICAgIGRldGFpbHM6IGBDaXJjdWxhciByZWZlcmVuY2UgY2hhaW4gZGV0ZWN0ZWQgYmV0d2VlbiBhbmNob3JzOiAmJHthbmNob3IxfSBhbmQgJiR7cmVmQW5jaG9yfWAsXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICBwYXR0ZXJuVHlwZTogJ0NJUkNVTEFSX1JFRkVSRU5DRScsXG4gICAgICAgICAgICAgIGFuY2hvcnM6IFthbmNob3IxLCByZWZBbmNob3JdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIFNjYW4gbm9ybWFsaXplZCBZQU1MIGZvciB0aGUgTUFMSUNJT1VTX1lBTUxfUEFUVEVSTlMgc2V0LiAqL1xuICBwcml2YXRlIHN0YXRpYyBoYXNNYWxpY2lvdXNZYW1sUGF0dGVybihub3JtYWxpemVkWWFtbDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHRoaXMuTUFMSUNJT1VTX1lBTUxfUEFUVEVSTlMpIHtcbiAgICAgIC8vIFRoZXNlIGFyZSB0cnVzdGVkIGludGVybmFsIHBhdHRlcm5zLCBzbyB3ZSBkaXNhYmxlIFJlRG9TIHJlamVjdGlvblxuICAgICAgaWYgKFJlZ2V4VmFsaWRhdG9yLnZhbGlkYXRlKG5vcm1hbGl6ZWRZYW1sLCBwYXR0ZXJuLCB7XG4gICAgICAgIG1heExlbmd0aDogU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCxcbiAgICAgICAgcmVqZWN0RGFuZ2Vyb3VzUGF0dGVybnM6IGZhbHNlLFxuICAgICAgICBsb2dFdmVudHM6IGZhbHNlICAvLyBEb24ndCBsb2cgb3VyIG93biBzZWN1cml0eSBwYXR0ZXJucyBhcyBkYW5nZXJvdXNcbiAgICAgIH0pKSB7XG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnWUFNTF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdDUklUSUNBTCcsXG4gICAgICAgICAgc291cmNlOiAneWFtbF92YWxpZGF0aW9uJyxcbiAgICAgICAgICBkZXRhaWxzOiBgTWFsaWNpb3VzIFlBTUwgcGF0dGVybiBkZXRlY3RlZDogJHtwYXR0ZXJufWAsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBFYXJseSBleGl0IG9uIGZpcnN0IG1hdGNoIGZvciBwZXJmb3JtYW5jZVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBwZXJzb25hIG1ldGFkYXRhIGZpZWxkc1xuICAgKi9cbiAgc3RhdGljIHZhbGlkYXRlTWV0YWRhdGEobWV0YWRhdGE6IGFueSk6IENvbnRlbnRWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICBjb25zdCBkZXRlY3RlZFBhdHRlcm5zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gQ2hlY2sgYWxsIHN0cmluZyBmaWVsZHMgaW4gbWV0YWRhdGFcbiAgICBjb25zdCBjaGVja0ZpZWxkID0gKGZpZWxkTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBtYXhMZW5ndGggPSBmaWVsZE5hbWUgPT09ICdkZXNjcmlwdGlvbidcbiAgICAgICAgICA/IFNFQ1VSSVRZX0xJTUlUUy5NQVhfREVTQ1JJUFRJT05fTEVOR1RIXG4gICAgICAgICAgOiBTRUNVUklUWV9MSU1JVFMuTUFYX01FVEFEQVRBX0ZJRUxEX0xFTkdUSDtcblxuICAgICAgICAvLyBDaGVjayBmaWVsZCBsZW5ndGggZmlyc3RcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgICAgICAgIGRldGVjdGVkUGF0dGVybnMucHVzaChgJHtmaWVsZE5hbWV9OiBGaWVsZCBleGNlZWRzIG1heGltdW0gbGVuZ3RoIG9mICR7bWF4TGVuZ3RofSBjaGFyYWN0ZXJzYCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnZhbGlkYXRlQW5kU2FuaXRpemUodmFsdWUpO1xuICAgICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkIHx8IHJlc3VsdC5kZXRlY3RlZFBhdHRlcm5zPy5sZW5ndGgpIHtcbiAgICAgICAgICBkZXRlY3RlZFBhdHRlcm5zLnB1c2goYCR7ZmllbGROYW1lfTogJHtyZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignLCAnKX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBWYWxpZGF0ZSBzdGFuZGFyZCBwZXJzb25hIGZpZWxkc1xuICAgIGNoZWNrRmllbGQoJ25hbWUnLCBtZXRhZGF0YS5uYW1lKTtcbiAgICBjaGVja0ZpZWxkKCdkZXNjcmlwdGlvbicsIG1ldGFkYXRhLmRlc2NyaXB0aW9uKTtcbiAgICBjaGVja0ZpZWxkKCdjYXRlZ29yeScsIG1ldGFkYXRhLmNhdGVnb3J5KTtcbiAgICBjaGVja0ZpZWxkKCdhdXRob3InLCBtZXRhZGF0YS5hdXRob3IpO1xuICAgIFxuICAgIC8vIENoZWNrIGFueSBjdXN0b20gZmllbGRzXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobWV0YWRhdGEpKSB7XG4gICAgICBpZiAoIVsnbmFtZScsICdkZXNjcmlwdGlvbicsICdjYXRlZ29yeScsICdhdXRob3InXS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIGNoZWNrRmllbGQoa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmFsaWQ6IGRldGVjdGVkUGF0dGVybnMubGVuZ3RoID09PSAwLFxuICAgICAgZGV0ZWN0ZWRQYXR0ZXJucyxcbiAgICAgIHNldmVyaXR5OiBkZXRlY3RlZFBhdHRlcm5zLmxlbmd0aCA+IDAgPyAnaGlnaCcgOiAnbG93J1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2FuaXRpemVzIGEgY29tcGxldGUgcGVyc29uYSBmaWxlIChmcm9udG1hdHRlciArIGNvbnRlbnQpXG4gICAqL1xuICBzdGF0aWMgc2FuaXRpemVQZXJzb25hQ29udGVudChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIEV4dHJhY3QgZnJvbnRtYXR0ZXJcbiAgICBjb25zdCBmcm9udG1hdHRlck1hdGNoID0gY29udGVudC5tYXRjaCgvXi0tLVxcbihbXFxzXFxTXSo/KVxcbi0tLS8pO1xuICAgIFxuICAgIGlmICghZnJvbnRtYXR0ZXJNYXRjaCkge1xuICAgICAgLy8gTm8gZnJvbnRtYXR0ZXIsIGp1c3QgdmFsaWRhdGUgY29udGVudFxuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy52YWxpZGF0ZUFuZFNhbml0aXplKGNvbnRlbnQpO1xuICAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZCAmJiByZXN1bHQuc2V2ZXJpdHkgPT09ICdjcml0aWNhbCcpIHtcbiAgICAgICAgLy8gRklYOiBJbmNsdWRlIHNwZWNpZmljIHBhdHRlcm5zIHRoYXQgdHJpZ2dlcmVkIHRoZSByZWplY3Rpb24gZm9yIGRlYnVnZ2luZ1xuICAgICAgICBjb25zdCBwYXR0ZXJucyA9IHJlc3VsdC5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCcsICcpIHx8ICd1bmtub3duIHBhdHRlcm5zJztcbiAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoYENyaXRpY2FsIHNlY3VyaXR5IHRocmVhdCBkZXRlY3RlZCBpbiBwZXJzb25hIGNvbnRlbnQ6ICR7cGF0dGVybnN9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0LnNhbml0aXplZENvbnRlbnQgfHwgY29udGVudDtcbiAgICB9XG5cbiAgICBjb25zdCB5YW1sQ29udGVudCA9IGZyb250bWF0dGVyTWF0Y2hbMV07XG4gICAgY29uc3QgbWFya2Rvd25Db250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoZnJvbnRtYXR0ZXJNYXRjaFswXS5sZW5ndGgpO1xuXG4gICAgLy8gVmFsaWRhdGUgWUFNTFxuICAgIGlmICghdGhpcy52YWxpZGF0ZVlhbWxDb250ZW50KHlhbWxDb250ZW50KSkge1xuICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoJ01hbGljaW91cyBZQU1MIGRldGVjdGVkIGluIHBlcnNvbmEgZnJvbnRtYXR0ZXInKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBtYXJrZG93biBjb250ZW50XG4gICAgY29uc3QgY29udGVudFJlc3VsdCA9IHRoaXMudmFsaWRhdGVBbmRTYW5pdGl6ZShtYXJrZG93bkNvbnRlbnQpO1xuICAgIGlmICghY29udGVudFJlc3VsdC5pc1ZhbGlkICYmIGNvbnRlbnRSZXN1bHQuc2V2ZXJpdHkgPT09ICdjcml0aWNhbCcpIHtcbiAgICAgIC8vIEZJWDogSW5jbHVkZSBzcGVjaWZpYyBwYXR0ZXJucyB0aGF0IHRyaWdnZXJlZCB0aGUgcmVqZWN0aW9uIGZvciBkZWJ1Z2dpbmdcbiAgICAgIGNvbnN0IHBhdHRlcm5zID0gY29udGVudFJlc3VsdC5kZXRlY3RlZFBhdHRlcm5zPy5qb2luKCcsICcpIHx8ICd1bmtub3duIHBhdHRlcm5zJztcbiAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKGBDcml0aWNhbCBzZWN1cml0eSB0aHJlYXQgZGV0ZWN0ZWQgaW4gcGVyc29uYSBjb250ZW50OiAke3BhdHRlcm5zfWApO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBzYW5pdGl6ZWQgY29udGVudFxuICAgIHJldHVybiBgLS0tXFxuJHt5YW1sQ29udGVudH1cXG4tLS0ke2NvbnRlbnRSZXN1bHQuc2FuaXRpemVkQ29udGVudCB8fCBtYXJrZG93bkNvbnRlbnR9YDtcbiAgfVxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secureYamlParser.d.ts","sourceRoot":"","sources":["../../src/security/secureYamlParser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAGH,OAAO,MAAM,MAAM,aAAa,CAAC;AAKjC,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,uGAAuG;IACvG,cAAc,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;CACxE;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAKrC;IAGF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAGvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAoCtC;IAEF;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,aAAa;IAgH5E;;OAEG;IACH,MAAM,CAAC,wBAAwB;uBAEZ,MAAM;;;;;;6BASA,MAAM,QAAQ,GAAG;;IAoB1C;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,aAAa,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;IAiCnJ;;;;;;;;;;;;;;;;;OAiBG;IACH,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,MAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"secureYamlParser.d.ts","sourceRoot":"","sources":["../../src/security/secureYamlParser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAGH,OAAO,MAAM,MAAM,aAAa,CAAC;AAKjC,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,uGAAuG;IACvG,cAAc,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;CACxE;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAKrC;IAGF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAGvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAoCtC;IAEF;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,aAAa;IAgH5E;;OAEG;IACH,MAAM,CAAC,wBAAwB;uBAEZ,MAAM;;;;;;6BASA,MAAM,QAAQ,GAAG;;IAoB1C;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,aAAa,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;IAiCnJ;;;;;;;;;;;;;;;;;OAiBG;IACH,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,MAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAkC/F"}
|