@aws-cdk/aws-imagebuilder-alpha 2.232.1-alpha.0 → 2.233.0-alpha.0

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/lib/component.js CHANGED
@@ -34,7 +34,7 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
34
34
  return useValue ? value : void 0;
35
35
  };
36
36
  Object.defineProperty(exports, "__esModule", { value: true });
37
- exports.Component = exports.AwsMarketplaceComponent = exports.AwsManagedComponent = exports.S3ComponentData = exports.ComponentData = exports.ComponentStepIfCondition = exports.ComponentStepInputs = exports.ComponentSchemaVersion = exports.ComponentPhaseName = exports.ComponentParameterType = exports.ComponentOnFailure = exports.ComponentAction = exports.ComponentConstantValue = void 0;
37
+ exports.Component = exports.AwsMarketplaceComponent = exports.S3ComponentData = exports.ComponentData = exports.ComponentStepIfCondition = exports.ComponentStepInputs = exports.ComponentSchemaVersion = exports.ComponentPhaseName = exports.ComponentParameterType = exports.ComponentOnFailure = exports.ComponentAction = exports.ComponentConstantValue = void 0;
38
38
  const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
39
39
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
40
40
  const cdk = require("aws-cdk-lib");
@@ -44,14 +44,13 @@ const s3assets = require("aws-cdk-lib/aws-s3-assets");
44
44
  const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
45
45
  const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable");
46
46
  const yaml = require("yaml");
47
- const os_version_1 = require("./os-version");
48
47
  const COMPONENT_SYMBOL = Symbol.for('@aws-cdk/aws-imagebuilder-alpha.Component');
49
48
  const LATEST_VERSION = 'x.x.x';
50
49
  /**
51
50
  * The value of a constant in a component document
52
51
  */
53
52
  class ComponentConstantValue {
54
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentConstantValue", version: "2.232.1-alpha.0" };
53
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentConstantValue", version: "2.233.0-alpha.0" };
55
54
  /**
56
55
  * Creates a string type constant in a component document
57
56
  *
@@ -268,7 +267,7 @@ var ComponentSchemaVersion;
268
267
  * Represents the inputs for a step in the component document
269
268
  */
270
269
  class ComponentStepInputs {
271
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentStepInputs", version: "2.232.1-alpha.0" };
270
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentStepInputs", version: "2.233.0-alpha.0" };
272
271
  /**
273
272
  * Creates the input value from an object, for the component step
274
273
  *
@@ -298,7 +297,7 @@ exports.ComponentStepInputs = ComponentStepInputs;
298
297
  * Represents an `if` condition in the component document
299
298
  */
300
299
  class ComponentStepIfCondition {
301
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentStepIfCondition", version: "2.232.1-alpha.0" };
300
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentStepIfCondition", version: "2.233.0-alpha.0" };
302
301
  /**
303
302
  * Creates the `if` value from an object, for the component step
304
303
  *
@@ -320,7 +319,7 @@ exports.ComponentStepIfCondition = ComponentStepIfCondition;
320
319
  * Helper class for referencing and uploading component data
321
320
  */
322
321
  class ComponentData {
323
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentData", version: "2.232.1-alpha.0" };
322
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentData", version: "2.233.0-alpha.0" };
324
323
  /**
325
324
  * Uploads component data from a local file to S3 to use as the component data
326
325
  *
@@ -401,28 +400,26 @@ class ComponentData {
401
400
  static fromInline(data) {
402
401
  return new InlineComponentData(data);
403
402
  }
404
- /**
405
- * The resulting inline string or S3 URL which references the component data
406
- */
407
- value;
408
- constructor(value) {
409
- this.value = value;
410
- }
411
403
  }
412
404
  exports.ComponentData = ComponentData;
413
405
  /**
414
406
  * Helper class for S3-based component data references, containing additional permission grant methods on the S3 object
415
407
  */
416
408
  class S3ComponentData extends ComponentData {
417
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.S3ComponentData", version: "2.232.1-alpha.0" };
418
- isS3Reference = true;
409
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.S3ComponentData", version: "2.233.0-alpha.0" };
419
410
  bucket;
420
411
  key;
421
412
  constructor(bucket, key) {
422
- super(bucket.s3UrlForObject(key));
413
+ super();
423
414
  this.bucket = bucket;
424
415
  this.key = key;
425
416
  }
417
+ /**
418
+ * The rendered component data text, for use in CloudFormation
419
+ */
420
+ render() {
421
+ return { uri: this.bucket.s3UrlForObject(this.key) };
422
+ }
426
423
  /**
427
424
  * Grant put permissions to the given grantee for the component data in S3
428
425
  *
@@ -442,9 +439,16 @@ class S3ComponentData extends ComponentData {
442
439
  }
443
440
  exports.S3ComponentData = S3ComponentData;
444
441
  class InlineComponentData extends ComponentData {
445
- isS3Reference = false;
442
+ data;
446
443
  constructor(data) {
447
- super(data);
444
+ super();
445
+ this.data = data;
446
+ }
447
+ /**
448
+ * The rendered component data text, for use in CloudFormation
449
+ */
450
+ render() {
451
+ return { data: this.data };
448
452
  }
449
453
  }
450
454
  class S3ComponentDataFromBucketKey extends S3ComponentData {
@@ -457,278 +461,11 @@ class S3ComponentDataFromAsset extends S3ComponentData {
457
461
  super(asset.bucket, asset.s3ObjectKey);
458
462
  }
459
463
  }
460
- /**
461
- * Helper class for working with AWS-managed components
462
- */
463
- class AwsManagedComponent {
464
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.AwsManagedComponent", version: "2.232.1-alpha.0" };
465
- /**
466
- * Imports the AWS CLI v2 AWS-managed component
467
- *
468
- * @param scope The construct scope
469
- * @param id Identifier of the construct
470
- * @param attrs The AWS-managed component attributes
471
- */
472
- static awsCliV2(scope, id, attrs) {
473
- try {
474
- jsiiDeprecationWarnings._aws_cdk_aws_imagebuilder_alpha_AwsManagedComponentAttributes(attrs);
475
- }
476
- catch (error) {
477
- if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
478
- Error.captureStackTrace(error, this.awsCliV2);
479
- }
480
- throw error;
481
- }
482
- this.validatePredefinedManagedComponentMethodAttributes({
483
- scope,
484
- attrs,
485
- component: 'awsCliV2',
486
- allowedPlatforms: [os_version_1.Platform.LINUX, os_version_1.Platform.WINDOWS],
487
- });
488
- if (attrs.platform === os_version_1.Platform.WINDOWS) {
489
- return this.fromAwsManagedComponentAttributes(scope, id, {
490
- componentName: 'aws-cli-version-2-windows',
491
- componentVersion: attrs.componentVersion,
492
- });
493
- }
494
- return this.fromAwsManagedComponentAttributes(scope, id, {
495
- componentName: 'aws-cli-version-2-linux',
496
- componentVersion: attrs.componentVersion,
497
- });
498
- }
499
- /**
500
- * Imports the hello world AWS-managed component
501
- *
502
- * @param scope The construct scope
503
- * @param id Identifier of the construct
504
- * @param attrs The AWS-managed component attributes
505
- */
506
- static helloWorld(scope, id, attrs) {
507
- try {
508
- jsiiDeprecationWarnings._aws_cdk_aws_imagebuilder_alpha_AwsManagedComponentAttributes(attrs);
509
- }
510
- catch (error) {
511
- if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
512
- Error.captureStackTrace(error, this.helloWorld);
513
- }
514
- throw error;
515
- }
516
- this.validatePredefinedManagedComponentMethodAttributes({
517
- scope,
518
- attrs,
519
- component: 'helloWorld',
520
- allowedPlatforms: [os_version_1.Platform.LINUX, os_version_1.Platform.WINDOWS],
521
- });
522
- if (attrs.platform === os_version_1.Platform.WINDOWS) {
523
- return this.fromAwsManagedComponentAttributes(scope, id, {
524
- componentName: 'hello-world-windows',
525
- componentVersion: attrs.componentVersion,
526
- });
527
- }
528
- return this.fromAwsManagedComponentAttributes(scope, id, {
529
- componentName: 'hello-world-linux',
530
- componentVersion: attrs.componentVersion,
531
- });
532
- }
533
- /**
534
- * Imports the Python 3 AWS-managed component
535
- *
536
- * @param scope The construct scope
537
- * @param id Identifier of the construct
538
- * @param attrs The AWS-managed component attributes
539
- */
540
- static python3(scope, id, attrs) {
541
- try {
542
- jsiiDeprecationWarnings._aws_cdk_aws_imagebuilder_alpha_AwsManagedComponentAttributes(attrs);
543
- }
544
- catch (error) {
545
- if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
546
- Error.captureStackTrace(error, this.python3);
547
- }
548
- throw error;
549
- }
550
- this.validatePredefinedManagedComponentMethodAttributes({
551
- scope,
552
- attrs,
553
- component: 'python3',
554
- allowedPlatforms: [os_version_1.Platform.LINUX, os_version_1.Platform.WINDOWS],
555
- });
556
- if (attrs.platform === os_version_1.Platform.WINDOWS) {
557
- return this.fromAwsManagedComponentAttributes(scope, id, {
558
- componentName: 'python-3-windows',
559
- componentVersion: attrs.componentVersion,
560
- });
561
- }
562
- return this.fromAwsManagedComponentAttributes(scope, id, {
563
- componentName: 'python-3-linux',
564
- componentVersion: attrs.componentVersion,
565
- });
566
- }
567
- /**
568
- * Imports the reboot AWS-managed component
569
- *
570
- * @param scope The construct scope
571
- * @param id Identifier of the construct
572
- * @param attrs The AWS-managed component attributes
573
- */
574
- static reboot(scope, id, attrs) {
575
- try {
576
- jsiiDeprecationWarnings._aws_cdk_aws_imagebuilder_alpha_AwsManagedComponentAttributes(attrs);
577
- }
578
- catch (error) {
579
- if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
580
- Error.captureStackTrace(error, this.reboot);
581
- }
582
- throw error;
583
- }
584
- this.validatePredefinedManagedComponentMethodAttributes({
585
- scope,
586
- attrs,
587
- component: 'reboot',
588
- allowedPlatforms: [os_version_1.Platform.LINUX, os_version_1.Platform.WINDOWS],
589
- });
590
- if (attrs.platform === os_version_1.Platform.WINDOWS) {
591
- return this.fromAwsManagedComponentAttributes(scope, id, {
592
- componentName: 'reboot-windows',
593
- componentVersion: attrs.componentVersion,
594
- });
595
- }
596
- return this.fromAwsManagedComponentAttributes(scope, id, {
597
- componentName: 'reboot-linux',
598
- componentVersion: attrs.componentVersion,
599
- });
600
- }
601
- /**
602
- * Imports the STIG hardening AWS-managed component
603
- *
604
- * @param scope The construct scope
605
- * @param id Identifier of the construct
606
- * @param attrs The AWS-managed component attributes
607
- *
608
- * @see https://docs.aws.amazon.com/imagebuilder/latest/userguide/ib-stig.html
609
- */
610
- static stigBuild(scope, id, attrs) {
611
- try {
612
- jsiiDeprecationWarnings._aws_cdk_aws_imagebuilder_alpha_AwsManagedComponentAttributes(attrs);
613
- }
614
- catch (error) {
615
- if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
616
- Error.captureStackTrace(error, this.stigBuild);
617
- }
618
- throw error;
619
- }
620
- this.validatePredefinedManagedComponentMethodAttributes({
621
- scope,
622
- attrs,
623
- component: 'stigBuild',
624
- allowedPlatforms: [os_version_1.Platform.LINUX, os_version_1.Platform.WINDOWS],
625
- });
626
- if (attrs.platform === os_version_1.Platform.WINDOWS) {
627
- return this.fromAwsManagedComponentAttributes(scope, id, {
628
- componentName: 'stig-build-windows',
629
- componentVersion: attrs.componentVersion,
630
- });
631
- }
632
- return this.fromAwsManagedComponentAttributes(scope, id, {
633
- componentName: 'stig-build-linux',
634
- componentVersion: attrs.componentVersion,
635
- });
636
- }
637
- /**
638
- * Imports the OS update AWS-managed component
639
- *
640
- * @param scope The construct scope
641
- * @param id Identifier of the construct
642
- * @param attrs The AWS-managed component attributes
643
- */
644
- static updateOS(scope, id, attrs) {
645
- try {
646
- jsiiDeprecationWarnings._aws_cdk_aws_imagebuilder_alpha_AwsManagedComponentAttributes(attrs);
647
- }
648
- catch (error) {
649
- if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
650
- Error.captureStackTrace(error, this.updateOS);
651
- }
652
- throw error;
653
- }
654
- this.validatePredefinedManagedComponentMethodAttributes({
655
- scope,
656
- attrs,
657
- component: 'updateOS',
658
- allowedPlatforms: [os_version_1.Platform.LINUX, os_version_1.Platform.WINDOWS],
659
- });
660
- if (attrs.platform === os_version_1.Platform.WINDOWS) {
661
- return this.fromAwsManagedComponentAttributes(scope, id, {
662
- componentName: 'update-windows',
663
- componentVersion: attrs.componentVersion,
664
- });
665
- }
666
- return this.fromAwsManagedComponentAttributes(scope, id, {
667
- componentName: 'update-linux',
668
- componentVersion: attrs.componentVersion,
669
- });
670
- }
671
- /**
672
- * Imports an AWS-managed component from its attributes
673
- *
674
- * @param scope The construct scope
675
- * @param id Identifier of the construct
676
- * @param attrs The AWS-managed component attributes
677
- */
678
- static fromAwsManagedComponentAttributes(scope, id, attrs) {
679
- try {
680
- jsiiDeprecationWarnings._aws_cdk_aws_imagebuilder_alpha_AwsManagedComponentAttributes(attrs);
681
- }
682
- catch (error) {
683
- if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
684
- Error.captureStackTrace(error, this.fromAwsManagedComponentAttributes);
685
- }
686
- throw error;
687
- }
688
- if (attrs.platform !== undefined) {
689
- throw new cdk.ValidationError('platform can only be used with pre-defined AWS-managed component methods, such as updateOS', scope);
690
- }
691
- if (attrs.componentName === undefined) {
692
- throw new cdk.ValidationError('an AWS-managed component name is required', scope);
693
- }
694
- return Component.fromComponentArn(scope, id, cdk.Stack.of(scope).formatArn({
695
- service: 'imagebuilder',
696
- account: 'aws',
697
- resource: 'component',
698
- resourceName: `${attrs.componentName}/${attrs.componentVersion ?? LATEST_VERSION}`,
699
- }));
700
- }
701
- /**
702
- * Imports an AWS-managed component from its name
703
- *
704
- * @param scope The construct scope
705
- * @param id Identifier of the construct
706
- * @param awsManagedComponentName - The name of the AWS-managed component
707
- */
708
- static fromAwsManagedComponentName(scope, id, awsManagedComponentName) {
709
- return this.fromAwsManagedComponentAttributes(scope, id, { componentName: awsManagedComponentName });
710
- }
711
- static validatePredefinedManagedComponentMethodAttributes({ scope, attrs, component, allowedPlatforms, }) {
712
- if (attrs.componentName !== undefined) {
713
- throw new cdk.ValidationError(`a name is not allowed for ${component}`, scope);
714
- }
715
- if (attrs.platform === undefined) {
716
- throw new cdk.ValidationError(`a platform is required for ${component}`, scope);
717
- }
718
- if (cdk.Token.isUnresolved(attrs.platform)) {
719
- throw new cdk.ValidationError(`platform cannot be a token for ${component}`, scope);
720
- }
721
- if (!allowedPlatforms.includes(attrs.platform)) {
722
- throw new cdk.ValidationError(`${attrs.platform} is not a supported platform for ${component}`, scope);
723
- }
724
- }
725
- }
726
- exports.AwsManagedComponent = AwsManagedComponent;
727
464
  /**
728
465
  * Helper class for working with AWS Marketplace components
729
466
  */
730
467
  class AwsMarketplaceComponent {
731
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.AwsMarketplaceComponent", version: "2.232.1-alpha.0" };
468
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.AwsMarketplaceComponent", version: "2.233.0-alpha.0" };
732
469
  /**
733
470
  * Imports an AWS Marketplace component from its attributes
734
471
  *
@@ -801,7 +538,7 @@ let Component = (() => {
801
538
  Component = _classThis = _classDescriptor.value;
802
539
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
803
540
  }
804
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.Component", version: "2.232.1-alpha.0" };
541
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.Component", version: "2.233.0-alpha.0" };
805
542
  /** Uniquely identifies this class. */
806
543
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-imagebuilder-alpha.Component';
807
544
  /**
@@ -927,10 +664,10 @@ let Component = (() => {
927
664
  platform: props.platform,
928
665
  kmsKeyId: props.kmsKey?.keyArn,
929
666
  tags: props.tags,
930
- ...(props.data.isS3Reference ? { uri: props.data.value } : { data: props.data.value }),
931
667
  ...(supportedOsVersions?.length && {
932
668
  supportedOsVersions: supportedOsVersions.map((osVersion) => osVersion.osVersion),
933
669
  }),
670
+ ...props.data.render(),
934
671
  });
935
672
  this.componentName = this.getResourceNameAttribute(component.attrName);
936
673
  this.componentArn = this.getResourceArnAttribute(component.attrArn, {
@@ -967,4 +704,4 @@ let Component = (() => {
967
704
  return Component = _classThis;
968
705
  })();
969
706
  exports.Component = Component;
970
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUFtQztBQUNuQywyQ0FBMkM7QUFDM0MsbUVBQTREO0FBRzVELHNEQUFzRDtBQUN0RCw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBRTFFLDZCQUE2QjtBQUM3Qiw2Q0FBbUQ7QUFFbkQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7QUFFakYsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDO0FBa1cvQjs7R0FFRztBQUNILE1BQWEsc0JBQXNCOztJQUNqQzs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFhO1FBQ3BDLE9BQU8sSUFBSSxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDcEQ7SUFFRDs7T0FFRztJQUNhLElBQUksQ0FBUztJQUU3Qjs7T0FFRztJQUNhLEtBQUssQ0FBTTtJQUUzQixZQUFzQixJQUFZLEVBQUUsS0FBVTtRQUM1QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztLQUNwQjs7QUF2Qkgsd0RBd0JDO0FBMEJEOztHQUVHO0FBQ0gsSUFBWSxlQXdKWDtBQXhKRCxXQUFZLGVBQWU7SUFDekI7O09BRUc7SUFDSCw2Q0FBMEIsQ0FBQTtJQUUxQjs7O09BR0c7SUFDSCxvQ0FBaUIsQ0FBQTtJQUVqQjs7T0FFRztJQUNILHlDQUFzQixDQUFBO0lBRXRCOztPQUVHO0lBQ0gsNkNBQTBCLENBQUE7SUFFMUI7O09BRUc7SUFDSCw2Q0FBMEIsQ0FBQTtJQUUxQjs7T0FFRztJQUNILGlEQUE4QixDQUFBO0lBRTlCOztPQUVHO0lBQ0gsbURBQWdDLENBQUE7SUFFaEM7O09BRUc7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O0FBQVQsOEJBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQ2ZuQ29tcG9uZW50IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWltYWdlYnVpbGRlcic7XG5pbXBvcnQgKiBhcyBrbXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgKiBhcyBzMyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0ICogYXMgczNhc3NldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0cyc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAneWFtbCc7XG5pbXBvcnQgeyBPU1ZlcnNpb24sIFBsYXRmb3JtIH0gZnJvbSAnLi9vcy12ZXJzaW9uJztcblxuY29uc3QgQ09NUE9ORU5UX1NZTUJPTCA9IFN5bWJvbC5mb3IoJ0Bhd3MtY2RrL2F3cy1pbWFnZWJ1aWxkZXItYWxwaGEuQ29tcG9uZW50Jyk7XG5cbmNvbnN0IExBVEVTVF9WRVJTSU9OID0gJ3gueC54JztcblxuLyoqXG4gKiBBbiBFQzIgSW1hZ2UgQnVpbGRlciBDb21wb25lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbXBvbmVudCBleHRlbmRzIGNkay5JUmVzb3VyY2Uge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudEFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnRWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdyYW50IGN1c3RvbSBhY3Rpb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICogQHBhcmFtIGFjdGlvbnMgVGhlIGxpc3Qgb2YgYWN0aW9uc1xuICAgKi9cbiAgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkIHBlcm1pc3Npb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICovXG4gIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhIENvbXBvbmVudCByZXNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgZG9jdW1lbnQgY29udGVudCB0aGF0IGRlZmluZXMgdGhlIGJ1aWxkLCB2YWxpZGF0aW9uLCBvciB0ZXN0IHN0ZXBzIHRvIGJlIGV4ZWN1dGVkIGR1cmluZyB0aGUgaW1hZ2VcbiAgICogYnVpbGRpbmcgcHJvY2Vzcy5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGE6IENvbXBvbmVudERhdGE7XG5cbiAgLyoqXG4gICAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtIHBsYXRmb3JtIG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICByZWFkb25seSBwbGF0Zm9ybTogUGxhdGZvcm07XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYSBuYW1lIGlzIGdlbmVyYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgMS4wLjBcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudFZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNoYW5nZSBkZXNjcmlwdGlvbiBvZiB0aGUgY29tcG9uZW50LiBEZXNjcmliZXMgd2hhdCBjaGFuZ2UgaGFzIGJlZW4gbWFkZSBpbiB0aGlzIHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudCwgb3JcbiAgICogd2hhdCBtYWtlcyB0aGlzIHZlcnNpb24gZGlmZmVyZW50IGZyb20gb3RoZXIgdmVyc2lvbnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGNoYW5nZURlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgS01TIGtleSB1c2VkIHRvIGVuY3J5cHQgdGhpcyBjb21wb25lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYW4gSW1hZ2UgQnVpbGRlciBvd25lZCBrZXkgd2lsbCBiZSB1c2VkIHRvIGVuY3J5cHQgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHJlYWRvbmx5IGttc0tleT86IGttcy5JS2V5O1xuXG4gIC8qKlxuICAgKiBUaGUgb3BlcmF0aW5nIHN5c3RlbSB2ZXJzaW9ucyBzdXBwb3J0ZWQgYnkgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgc3VwcG9ydGVkT3NWZXJzaW9ucz86IE9TVmVyc2lvbltdO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFncyB0byBhcHBseSB0byB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGFuIEVDMiBJbWFnZSBCdWlsZGVyIGNvbXBvbmVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudEF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIEFSTiBpcyBhdXRvbWF0aWNhbGx5IGNvbnN0cnVjdGVkIGlmIGEgY29tcG9uZW50TmFtZSBpcyBwcm92aWRlZCwgb3RoZXJ3aXNlIGEgY29tcG9uZW50QXJuIGlzXG4gICAqICAgICAgICAgICAgcmVxdWlyZWRcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudEFybj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBuYW1lIGlzIGF1dG9tYXRpY2FsbHkgY29uc3RydWN0ZWQgaWYgYSBjb21wb25lbnRBcm4gaXMgcHJvdmlkZWQsIG90aGVyd2lzZSBhIGNvbXBvbmVudE5hbWUgaXNcbiAgICogICAgICAgICAgICByZXF1aXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50LCB4LngueFxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhbiBFQzIgSW1hZ2UgQnVpbGRlciBBV1MtbWFuYWdlZCBjb21wb25lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBd3NNYW5hZ2VkQ29tcG9uZW50QXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgQVdTLW1hbmFnZWQgY29tcG9uZW50XG4gICAqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBBV1MtbWFuYWdlZCBjb21wb25lbnQuIFRoaXMgaXMgYSByZXF1aXJlZCBhdHRyaWJ1dGUgd2hlbiB1c2luZyB0aGVcbiAgICogYHRoaXMuZnJvbUF3c01hbmFnZWRDb21wb25lbnRBdHRyaWJ1dGVzKClgIG1ldGhvZC4gVGhpcyBwYXJhbWV0ZXIgc2hvdWxkIG5vdCBiZSBwcm92aWRlZCB3aGVuXG4gICAqIHVzaW5nIHRoZSBwcmUtZGVmaW5lZCBtYW5hZ2VkIGNvbXBvbmVudCBtZXRob2RzLCBzdWNoIGFzIGBBd3NNYW5hZ2VkQ29tcG9uZW50LnVwZGF0ZU9TKClgIGFuZFxuICAgKiBgQXdzTWFuYWdlZENvbXBvbmVudC5yZWJvb3QoKWAuXG4gICAqXG4gICAqICBAZGVmYXVsdCAtIG5vbmUgaWYgdXNpbmcgIHRoZSBwcmUtZGVmaW5lZCBtYW5hZ2VkIGNvbXBvbmVudCBtZXRob2RzLCBvdGhlcndpc2UgYSBwbGF0Zm9ybSBpcyByZXF1aXJlZCB3aGVuIHVzaW5nXG4gICAqICAgICAgICAgICAgIGB0aGlzLmZyb21Bd3NNYW5hZ2VkQ29tcG9uZW50QXR0cmlidXRlcygpYFxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIEFXUy1tYW5hZ2VkIGNvbXBvbmVudFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50LCB4LngueFxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsYXRmb3JtIG9mIHRoZSBBV1MtbWFuYWdlZCBjb21wb25lbnQuIFRoaXMgaXMgYSByZXF1aXJlZCBhdHRyaWJ1dGUgd2hlbiB1c2luZyB0aGUgcHJlLWRlZmluZWQgbWFuYWdlZFxuICAgKiBjb21wb25lbnQgbWV0aG9kcywgc3VjaCBhcyBgQXdzTWFuYWdlZENvbXBvbmVudC51cGRhdGVPUygpYCBhbmQgYEF3c01hbmFnZWRDb21wb25lbnQucmVib290KClgLiBUaGlzIHBhcmFtZXRlclxuICAgKiBzaG91bGQgbm90IGJlIHByb3ZpZGVkIHdoZW4gdXNpbmcgdGhlIGB0aGlzLmZyb21Bd3NNYW5hZ2VkQ29tcG9uZW50QXR0cmlidXRlcygpYCBtZXRob2QuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZSBpZiB1c2luZyBgdGhpcy5mcm9tQXdzTWFuYWdlZENvbXBvbmVudEF0dHJpYnV0ZXMoKWAsIG90aGVyd2lzZSBhIHBsYXRmb3JtIGlzXG4gICAqICAgICAgICAgICAgcmVxdWlyZWQgd2hlbiB1c2luZyB0aGUgcHJlLWRlZmluZWQgbWFuYWdlZCBjb21wb25lbnQgbWV0aG9kc1xuICAgKi9cbiAgcmVhZG9ubHkgcGxhdGZvcm0/OiBQbGF0Zm9ybTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhbiBFQzIgSW1hZ2UgQnVpbGRlciBBV1MgTWFya2V0cGxhY2UgY29tcG9uZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXdzTWFya2V0cGxhY2VDb21wb25lbnRBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBBV1MgTWFya2V0cGxhY2UgY29tcG9uZW50LiBUaGlzIG5hbWUgc2hvdWxkIGV4Y2x1ZGUgdGhlIG1hcmtldHBsYWNlIHByb2R1Y3QgSUQgZnJvbSBpdFxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbWFya2V0cGxhY2UgcHJvZHVjdCBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgcmVhZG9ubHkgbWFya2V0cGxhY2VQcm9kdWN0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIEFXUyBNYXJrZXRwbGFjZSBjb21wb25lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudCwgeC54LnhcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudFZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBvZiBhbiBFQzIgSW1hZ2UgQnVpbGRlciBDb21wb25lbnQgRG9jdW1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREb2N1bWVudCB7XG4gIC8qKlxuICAgKiBUaGUgc2NoZW1hIHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgcmVhZG9ubHkgc2NoZW1hVmVyc2lvbjogQ29tcG9uZW50U2NoZW1hVmVyc2lvbjtcblxuICAvKipcbiAgICogVGhlIHBoYXNlcyB3aGljaCBkZWZpbmUgdGhlIGdyb3VwaW5nIG9mIHN0ZXBzIHRvIHJ1biBpbiB0aGUgYnVpbGQgYW5kIHRlc3Qgd29ya2Zsb3dzIG9mIHRoZSBpbWFnZSBidWlsZC5cbiAgICovXG4gIHJlYWRvbmx5IHBoYXNlczogQ29tcG9uZW50RG9jdW1lbnRQaGFzZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZG9jdW1lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBkb2N1bWVudFxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvbnN0YW50cyB0byBkZWZpbmUgaW4gdGhlIGRvY3VtZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGNvbnN0YW50cz86IHsgW2NvbnN0YW50TmFtZTogc3RyaW5nXTogQ29tcG9uZW50Q29uc3RhbnRWYWx1ZSB9O1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVycyB0byBkZWZpbmUgaW4gdGhlIGRvY3VtZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM/OiB7IFtwYXJhbWV0ZXJOYW1lOiBzdHJpbmddOiBDb21wb25lbnREb2N1bWVudFBhcmFtZXRlckRlZmluaXRpb24gfTtcbn1cblxuLyoqXG4gKiBUaGUgcGhhc2UgdG8gcnVuIGluIGEgc3BlY2lmaWMgd29ya2Zsb3cgaW4gYW4gaW1hZ2UgYnVpbGQsIHdoaWNoIGRlZmluZSB0aGUgc3RlcHMgdG8gZXhlY3V0ZSB0byBjdXN0b21pemUgb3IgdGVzdFxuICogdGhlIGluc3RhbmNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERvY3VtZW50UGhhc2Uge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHBoYXNlXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBDb21wb25lbnRQaGFzZU5hbWU7XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHN0ZXBzIHRvIGV4ZWN1dGUgdG8gbW9kaWZ5IG9yIHRlc3QgdGhlIGJ1aWxkL3Rlc3QgaW5zdGFuY2VcbiAgICovXG4gIHJlYWRvbmx5IHN0ZXBzOiBDb21wb25lbnREb2N1bWVudFN0ZXBbXTtcbn1cblxuLyoqXG4gKiBUaGUgc3RlcCB0byBydW4gaW4gYSBzcGVjaWZpYyBwaGFzZSBvZiB0aGUgaW1hZ2UgYnVpbGQsIHdoaWNoIGRlZmluZXMgdGhlIHN0ZXAgdG8gZXhlY3V0ZSB0byBjdXN0b21pemUgb3IgdGVzdCB0aGVcbiAqIGluc3RhbmNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERvY3VtZW50U3RlcCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc3RlcFxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYWN0aW9uIHRvIHBlcmZvcm0gaW4gdGhlIHN0ZXBcbiAgICovXG4gIHJlYWRvbmx5IGFjdGlvbjogQ29tcG9uZW50QWN0aW9uO1xuXG4gIC8qKlxuICAgKiBDb250YWlucyBwYXJhbWV0ZXJzIHJlcXVpcmVkIGJ5IHRoZSBhY3Rpb24gdG8gcnVuIHRoZSBzdGVwXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL3RvZS1hY3Rpb24tbW9kdWxlcy5odG1sXG4gICAqL1xuICByZWFkb25seSBpbnB1dHM6IENvbXBvbmVudFN0ZXBJbnB1dHM7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25kaXRpb24gdG8gYXBwbHkgdG8gdGhlIHN0ZXAuIElmIHRoZSBjb25kaXRpb24gaXMgZmFsc2UsIHRoZW4gdGhlIHN0ZXAgaXMgc2tpcHBlZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGNvbmRpdGlvbiBpcyBhcHBsaWVkIHRvIHRoZSBzdGVwIGFuZCBpdCBnZXRzIGV4ZWN1dGVkXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL3RvZS1jb25kaXRpb25hbC1jb25zdHJ1Y3RzLmh0bWxcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvdG9lLWNvbXBhcmlzb24tb3BlcmF0b3JzLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IGlmPzogQ29tcG9uZW50U3RlcElmQ29uZGl0aW9uO1xuXG4gIC8qKlxuICAgKiBBIGxvb3BpbmcgY29uc3RydWN0IGRlZmluaW5nIGEgcmVwZWF0ZWQgc2VxdWVuY2Ugb2YgaW5zdHJ1Y3Rpb25zXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGxvb3A/OiBDb21wb25lbnREb2N1bWVudExvb3A7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lb3V0IG9mIHRoZSBzdGVwXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gMTIwIG1pbnV0ZXNcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXQ/OiBjZGsuRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGF0IHRoZSBzdGVwIHNob3VsZCBkbyBpbiBjYXNlIG9mIGZhaWx1cmVcbiAgICpcbiAgICogQGRlZmF1bHQgQ29tcG9uZW50T25GYWlsdXJlLkFCT1JUXG4gICAqL1xuICByZWFkb25seSBvbkZhaWx1cmU/OiBDb21wb25lbnRPbkZhaWx1cmU7XG59XG5cbi8qKlxuICogVGhlIGxvb3BpbmcgY29uc3RydWN0IG9mIGEgY29tcG9uZW50IGRlZmluZXMgYSByZXBlYXRlZCBzZXF1ZW5jZSBvZiBpbnN0cnVjdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREb2N1bWVudExvb3Age1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGxvb3AsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHJlZmVyZW5jZVxuICAgKlxuICAgKiBAZGVmYXVsdCBsb29wXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9yIGxvb3AgaXRlcmF0ZXMgb24gYSByYW5nZSBvZiBpbnRlZ2VycyBzcGVjaWZpZWQgd2l0aGluIGEgYm91bmRhcnkgb3V0bGluZWQgYnkgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlXG4gICAqIHZhcmlhYmxlc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmUgaWYgYGZvckVhY2hgIGlzIHByb3ZpZGVkLiBvdGhlcndpc2UsIGBmb3JgIGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZm9yPzogQ29tcG9uZW50RG9jdW1lbnRGb3JMb29wO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9yRWFjaCBsb29wIGl0ZXJhdGVzIG9uIGFuIGV4cGxpY2l0IGxpc3Qgb2YgdmFsdWVzLCB3aGljaCBjYW4gYmUgc3RyaW5ncyBhbmQgY2hhaW5lZCBleHByZXNzaW9uc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmUgaWYgYGZvcmAgaXMgcHJvdmlkZWQuIG90aGVyd2lzZSwgYGZvckVhY2hgIGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZm9yRWFjaD86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBmb3IgbG9vcCBpdGVyYXRlcyBvbiBhIHJhbmdlIG9mIGludGVnZXJzIHNwZWNpZmllZCB3aXRoaW4gYSBib3VuZGFyeSBvdXRsaW5lZCBieSB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGVcbiAqIHZhcmlhYmxlcy4gVGhlIGl0ZXJhdGluZyB2YWx1ZXMgYXJlIGluIHRoZSBzZXQgW3N0YXJ0LCBlbmRdIGFuZCBpbmNsdWRlcyBib3VuZGFyeSB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RG9jdW1lbnRGb3JMb29wIHtcbiAgLyoqXG4gICAqIFN0YXJ0aW5nIHZhbHVlIG9mIGl0ZXJhdGlvbi4gRG9lcyBub3QgYWNjZXB0IGNoYWluaW5nIGV4cHJlc3Npb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhcnQ6IG51bWJlcjtcbiAgLyoqXG4gICAqIEVuZGluZyB2YWx1ZSBvZiBpdGVyYXRpb24uIERvZXMgbm90IGFjY2VwdCBjaGFpbmluZyBleHByZXNzaW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IGVuZDogbnVtYmVyO1xuICAvKipcbiAgICogRGlmZmVyZW5jZSBieSB3aGljaCBhbiBpdGVyYXRpbmcgdmFsdWUgaXMgdXBkYXRlZCB0aHJvdWdoIGFkZGl0aW9uLiBJdCBtdXN0IGJlIGEgbmVnYXRpdmUgb3IgcG9zaXRpdmUgbm9uLXplcm9cbiAgICogdmFsdWUuIERvZXMgbm90IGFjY2VwdCBjaGFpbmluZyBleHByZXNzaW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IHVwZGF0ZUJ5OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIHZhbHVlIG9mIGEgY29uc3RhbnQgaW4gYSBjb21wb25lbnQgZG9jdW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIENvbXBvbmVudENvbnN0YW50VmFsdWUge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIHN0cmluZyB0eXBlIGNvbnN0YW50IGluIGEgY29tcG9uZW50IGRvY3VtZW50XG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGNvbnN0YW50XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21TdHJpbmcodmFsdWU6IHN0cmluZyk6IENvbXBvbmVudENvbnN0YW50VmFsdWUge1xuICAgIHJldHVybiBuZXcgQ29tcG9uZW50Q29uc3RhbnRWYWx1ZSgnc3RyaW5nJywgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIHR5cGUgb2YgdGhlIGNvbnN0YW50XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGNvbnN0YW50XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IGFueTtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IodHlwZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgcGFyYW1ldGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RG9jdW1lbnRQYXJhbWV0ZXJEZWZpbml0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXJcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IENvbXBvbmVudFBhcmFtZXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXJcbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lLCBpbmRpY2F0aW5nIHRoZSBwYXJhbWV0ZXIgaXMgcmVxdWlyZWRcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHQ/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgcGFyYW1ldGVyXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBhY3Rpb24gZm9yIGEgc3RlcCB3aXRoaW4gdGhlIGNvbXBvbmVudCBkb2N1bWVudFxuICovXG5leHBvcnQgZW51bSBDb21wb25lbnRBY3Rpb24ge1xuICAvKipcbiAgICogVGhlIEFwcGVuZEZpbGUgYWN0aW9uIGFkZHMgdGhlIHByb3ZpZGVkIGNvbnRlbnQgdG8gdGhlIHByZS1leGlzdGluZyBjb250ZW50IG9mIGEgZmlsZVxuICAgKi9cbiAgQVBQRU5EX0ZJTEUgPSAnQXBwZW5kRmlsZScsXG5cbiAgLyoqXG4gICAqIFRoZSBBc3NlcnQgYWN0aW9uIHBlcmZvcm1zIHZhbHVlIHdpdGggY29tcGFyaXNvbi9sb2dpYyBvcGVyYXRvcnMsIGFuZCBzdWNjZWVkcy9mYWlscyB0aGUgc3RlcCBiYXNlZCBvbiB0aGUgb3V0Y29tZVxuICAgKiBvZiB0aGUgYXNzZXJ0aW9uXG4gICAqL1xuICBBU1NFUlQgPSAnQXNzZXJ0JyxcblxuICAvKipcbiAgICogVGhlIENvcHlGaWxlIGFjdGlvbiBjb3BpZXMgZmlsZXMgZnJvbSBhIHNvdXJjZSBmaWxlIHRvIGEgZGVzdGluYXRpb25cbiAgICovXG4gIENPUFlfRklMRSA9ICdDb3B5RmlsZScsXG5cbiAgLyoqXG4gICAqIFRoZSBDb3B5Rm9sZGVyIGFjdGlvbiBjb3BpZXMgZm9sZGVycyBmcm9tIGEgc291cmNlIHRvIGEgZGVzdGluYXRpb25cbiAgICovXG4gIENPUFlfRk9MREVSID0gJ0NvcHlGb2xkZXInLFxuXG4gIC8qKlxuICAgKiBUaGUgQ3JlYXRlRmlsZSBhY3Rpb24gY3JlYXRlcyBhIGZpbGUgaW4gdGhlIHByb3ZpZGVkIGxvY2F0aW9uXG4gICAqL1xuICBDUkVBVEVfRklMRSA9ICdDcmVhdGVGaWxlJyxcblxuICAvKipcbiAgICogVGhlIENyZWF0ZUZvbGRlciBhY3Rpb24gY3JlYXRlcyBhIGZvbGRlciBpbiB0aGUgcHJvdmlkZWQgbG9jYXRpb25cbiAgICovXG4gIENSRUFURV9GT0xERVIgPSAnQ3JlYXRlRm9sZGVyJyxcblxuICAvKipcbiAgICogVGhlIENyZWF0ZVN5bWxpbmsgYWN0aW9uIGNyZWF0ZXMgc3ltYm9saWMgbGlua3MgZnJvbSBhIGdpdmVuIHBhdGggdG8gYSB0YXJnZXRcbiAgICovXG4gIENSRUFURV9TWU1MSU5LID0gJ0NyZWF0ZVN5bWxpbmsnLFxuXG4gIC8qKlxuICAgKiBUaGUgRGVsZXRlRmlsZSBhY3Rpb24gZGVsZXRlcyBmaWxlKHMpIGluIHRoZSBwcm92aWRlZCBsb2NhdGlvblxuICAgKi9cbiAgREVMRVRFX0ZJTEUgPSAnRGVsZXRlRmlsZScsXG5cbiAgLyoqXG4gICAqIFRoZSBEZWxldGVGb2xkZXIgYWN0aW9uIGRlbGV0ZXMgZm9sZGVycyBpbiB0aGUgcHJvdmlkZWQgbG9jYXRpb25cbiAgICovXG4gIERFTEVURV9GT0xERVIgPSAnRGVsZXRlRm9sZGVyJyxcblxuICAvKipcbiAgICogVGhlIEV4ZWN1dGVCYXNoIGFjdGlvbiBydW5zIGJhc2ggc2NyaXB0cyB3aXRoIGlubGluZSBiYXNoIGNvbW1hbmRzXG4gICAqL1xuICBFWEVDVVRFX0JBU0ggPSAnRXhlY3V0ZUJhc2gnLFxuXG4gIC8qKlxuICAgKiBUaGUgRXhlY3V0ZUJpbmFyeSBhY3Rpb24gcnVucyBhIHByb3ZpZGVkIGJpbmFyeSBleGVjdXRhYmxlXG4gICAqL1xuICBFWEVDVVRFX0JJTkFSWSA9ICdFeGVjdXRlQmluYXJ5JyxcblxuICAvKipcbiAgICogVGhlIEV4ZWN1dGVEb2N1bWVudCBhY3Rpb24gYWxsb3dzIHJ1bm5pbmcgb3RoZXIgY29tcG9uZW50IGRvY3VtZW50cyBmcm9tIHdpdGhpbiBhIGdpdmVuIGNvbXBvbmVudFxuICAgKi9cbiAgRVhFQ1VURV9ET0NVTUVOVCA9ICdFeGVjdXRlRG9jdW1lbnQnLFxuXG4gIC8qKlxuICAgKiBUaGUgRXhlY3V0ZVBvd2Vyc2hlbGwgYWN0aW9uIHJ1bnMgUG93ZXJTaGVsbCBzY3JpcHRzIHdpdGggaW5saW5lIFBvd2VyU2hlbGwgY29tbWFuZHNcbiAgICovXG4gIEVYRUNVVEVfUE9XRVJTSEVMTCA9ICdFeGVjdXRlUG93ZXJTaGVsbCcsXG5cbiAgLyoqXG4gICAqIFRoZSBJbnN0YWxsTVNJIGFjdGlvbiBydW5zIGEgV2luZG93cyBhcHBsaWNhdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBNU0kgZmlsZVxuICAgKi9cbiAgSU5TVEFMTF9NU0kgPSAnSW5zdGFsbE1TSScsXG5cbiAgLyoqXG4gICAqIFRoZSBMaXN0RmlsZXMgYWN0aW9uIGxpc3RzIGZpbGVzIGluIHRoZSBwcm92aWRlZCBmb2xkZXJcbiAgICovXG4gIExJU1RfRklMRVMgPSAnTGlzdEZpbGVzJyxcblxuICAvKipcbiAgICogVGhlIE1vdmVGaWxlIGFjdGlvbiBtb3ZlcyBmaWxlcyBmcm9tIGEgc291cmNlIHRvIGEgZGVzdGluYXRpb25cbiAgICovXG4gIE1PVkVfRklMRSA9ICdNb3ZlRmlsZScsXG5cbiAgLyoqXG4gICAqIFRoZSBNb3ZlRm9sZGVyIGFjdGlvbiBtb3ZlcyBmb2xkZXJzIGZyb20gYSBzb3VyY2UgdG8gYSBkZXN0aW5hdGlvblxuICAgKi9cbiAgTU9WRV9GT0xERVIgPSAnTW92ZUZvbGRlcicsXG5cbiAgLyoqXG4gICAqIFRoZSBSZWFkRmlsZSBhY3Rpb24gcmVhZHMgdGhlIGNvbnRlbnQgb2YgYSB0ZXh0IGZpbGVcbiAgICovXG4gIFJFQURfRklMRSA9ICdSZWFkRmlsZScsXG5cbiAgLyoqXG4gICAqIFRoZSBSZWJvb3QgYWN0aW9uIHJlYm9vdHMgdGhlIGluc3RhbmNlXG4gICAqL1xuICBSRUJPT1QgPSAnUmVib290JyxcblxuICAvKipcbiAgICogVGhlIFNldEZpbGVFbmNvZGluZyBhY3Rpb24gbW9kaWZpZXMgdGhlIGVuY29kaW5nIHByb3BlcnR5IG9mIGFuIGV4aXN0aW5nIGZpbGVcbiAgICovXG4gIFNFVF9GSUxFX0VOQ09ESU5HID0gJ1NldEZpbGVFbmNvZGluZycsXG5cbiAgLyoqXG4gICAqIFRoZSBTZXRGaWxlT3duZXIgYWN0aW9uIG1vZGlmaWVzIHRoZSBvd25lciBhbmQgZ3JvdXAgb3duZXJzaGlwIHByb3BlcnRpZXMgb2YgYW4gZXhpc3RpbmcgZmlsZVxuICAgKi9cbiAgU0VUX0ZJTEVfT1dORVIgPSAnU2V0RmlsZU93bmVyJyxcblxuICAvKipcbiAgICogVGhlIFNldEZvbGRlck93bmVyIGFjdGlvbiByZWN1cnNpdmVseSBtb2RpZmllcyB0aGUgb3duZXIgYW5kIGdyb3VwIG93bmVyc2hpcCBwcm9wZXJ0aWVzIG9mIGFuIGV4aXN0aW5nIGZvbGRlclxuICAgKi9cbiAgU0VUX0ZPTERFUl9PV05FUiA9ICdTZXRGb2xkZXJPd25lcicsXG5cbiAgLyoqXG4gICAqIFRoZSBTZXRGaWxlUGVybWlzc2lvbnMgYWN0aW9uIG1vZGlmaWVzIHRoZSBwZXJtaXNzaW9uIG9mIGFuIGV4aXN0aW5nIGZpbGVcbiAgICovXG4gIFNFVF9GSUxFX1BFUk1JU1NJT05TID0gJ1NldEZpbGVQZXJtaXNzaW9ucycsXG5cbiAgLyoqXG4gICAqIFRoZSBTZXRGb2xkZXJQZXJtaXNzaW9ucyBhY3Rpb24gcmVjdXJzaXZlbHkgbW9kaWZpZXMgdGhlIHBlcm1pc3Npb25zIG9mIGFuIGV4aXN0aW5nIGZvbGRlciBhbmQgYWxsIG9mIGl0cyBzdWJmaWxlc1xuICAgKiBhbmQgc3ViZm9sZGVyc1xuICAgKi9cbiAgU0VUX0ZPTERFUl9QRVJNSVNTSU9OUyA9ICdTZXRGb2xkZXJQZXJtaXNzaW9ucycsXG5cbiAgLyoqXG4gICAqIFRoZSBTZXRSZWdpc3RyeSBhY3Rpb24gc2V0cyB0aGUgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgV2luZG93cyByZWdpc3RyeSBrZXlcbiAgICovXG4gIFNFVF9SRUdJU1RSWSA9ICdTZXRSZWdpc3RyeScsXG5cbiAgLyoqXG4gICAqIFRoZSBTM0Rvd25sb2FkIGFjdGlvbiBkb3dubG9hZHMgYW4gQW1hem9uIFMzIG9iamVjdC9mb2xkZXIgdG8gYSBsb2NhbCBkZXN0aW5hdGlvblxuICAgKi9cbiAgUzNfRE9XTkxPQUQgPSAnUzNEb3dubG9hZCcsXG5cbiAgLyoqXG4gICAqIFRoZSBTM1VwbG9hZCBhY3Rpb24gdXBsb2FkcyBhIGZpbGUgb3IgZm9sZGVyIHRvIGFuIEFtYXpvbiBTMyBsb2NhdGlvblxuICAgKi9cbiAgUzNfVVBMT0FEID0gJ1MzVXBsb2FkJyxcblxuICAvKipcbiAgICogVGhlIFVuaW5zdGFsbE1TSSBhY3Rpb24gcmVtb3ZlcyBhIFdpbmRvd3MgYXBwbGljYXRpb24gdXNpbmcgYW4gTVNJIGZpbGVcbiAgICovXG4gIFVOSU5TVEFMTF9NU0kgPSAnVW5pbnN0YWxsTVNJJyxcblxuICAvKipcbiAgICogVGhlIFVwZGF0ZU9TIGFjdGlvbiBpbnN0YWxscyBPUyB1cGRhdGVzXG4gICAqL1xuICBVUERBVEVfT1MgPSAnVXBkYXRlT1MnLFxuXG4gIC8qKlxuICAgKiBUaGUgV2ViRG93bmxvYWQgYWN0aW9uIGRvd25sb2FkcyBmaWxlcyBmcm9tIGEgVVJMIHRvIGEgbG9jYWwgZGVzdGluYXRpb25cbiAgICovXG4gIFdFQl9ET1dOTE9BRCA9ICdXZWJEb3dubG9hZCcsXG59XG5cbi8qKlxuICogU3BlY2lmaWVzIHdoYXQgdGhlIHN0ZXAgc2hvdWxkIGRvIGluIGNhc2Ugb2YgZmFpbHVyZVxuICovXG5leHBvcnQgZW51bSBDb21wb25lbnRPbkZhaWx1cmUge1xuICAvKipcbiAgICogRmFpbHMgdGhlIHN0ZXAgYW5kIGRvY3VtZW50IGV4ZWN1dGlvblxuICAgKi9cbiAgQUJPUlQgPSAnQWJvcnQnLFxuXG4gIC8qKlxuICAgKiBGYWlscyB0aGUgc3RlcCBhbmQgcHJvY2VlZHMgdG8gZXhlY3V0ZSB0aGUgbmV4dCBzdGVwIGluIHRoZSBkb2N1bWVudFxuICAgKi9cbiAgQ09OVElOVUUgPSAnQ29udGludWUnLFxuXG4gIC8qKlxuICAgKiBJZ25vcmVzIHRoZSBzdGVwIGFuZCBwcm9jZWVkcyB0byBleGVjdXRlIHRoZSBuZXh0IHN0ZXAgaW4gdGhlIGRvY3VtZW50XG4gICAqL1xuICBJR05PUkUgPSAnSWdub3JlJyxcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVyIHR5cGUgaW4gYSBjb21wb25lbnQgZG9jdW1lbnRcbiAqL1xuZXhwb3J0IGVudW0gQ29tcG9uZW50UGFyYW1ldGVyVHlwZSB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIHBhcmFtZXRlciB2YWx1ZSBpcyBhIHN0cmluZ1xuICAgKi9cbiAgU1RSSU5HID0gJ3N0cmluZycsXG59XG5cbi8qKlxuICogVGhlIHBoYXNlcyBvZiBhIGNvbXBvbmVudCBkb2N1bWVudFxuICovXG5leHBvcnQgZW51bSBDb21wb25lbnRQaGFzZU5hbWUge1xuICAvKipcbiAgICogQnVpbGQgcGhhc2Ugb2YgdGhlIGNvbXBvbmVudC4gVGhpcyBwaGFzZSBpcyBydW4gZHVyaW5nIHRoZSBCVUlMRElORyBwaGFzZSBvZiB0aGUgaW1hZ2UgYnVpbGQuXG4gICAqL1xuICBCVUlMRCA9ICdidWlsZCcsXG5cbiAgLyoqXG4gICAqIFRlc3QgcGhhc2Ugb2YgdGhlIGNvbXBvbmVudCwgZXhlY3V0ZWQgZGlyZWN0bHkgb24gdGhlIGluc3RhbmNlIHdoaWNoIGlzIHVzZWQgdG8gYnVpbGQgdGhlIGNvbnRhaW5lciBpbWFnZS4gVGhpc1xuICAgKiBwaGFzZSBpcyBydW4gZHVyaW5nIHRoZSBURVNUSU5HIHBoYXNlIG9mIHRoZSBpbWFnZSBidWlsZC5cbiAgICovXG4gIENPTlRBSU5FUl9IT1NUX1RFU1QgPSAnY29udGFpbmVyLWhvc3QtdGVzdCcsXG5cbiAgLyoqXG4gICAqIFRlc3QgcGhhc2Ugb2YgdGhlIGNvbXBvbmVudC4gVGhpcyBwaGFzZSBpcyBydW4gZHVyaW5nIHRoZSBURVNUSU5HIHBoYXNlIG9mIHRoZSBpbWFnZSBidWlsZC5cbiAgICovXG4gIFRFU1QgPSAndGVzdCcsXG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHBoYXNlIG9mIHRoZSBjb21wb25lbnQuIFRoaXMgcGhhc2UgaXMgcnVuIGR1cmluZyB0aGUgQlVJTERJTkcgcGhhc2Ugb2YgdGhlIGltYWdlIGJ1aWxkLCBhZnRlciB0aGUgYnVpbGRcbiAgICogc3RlcCBvZiB0aGUgY29tcG9uZW50IGlzIGV4ZWN1dGVkLlxuICAgKi9cbiAgVkFMSURBVEUgPSAndmFsaWRhdGUnLFxufVxuXG4vKipcbiAqIFRoZSBzY2hlbWEgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50XG4gKi9cbmV4cG9ydCBlbnVtIENvbXBvbmVudFNjaGVtYVZlcnNpb24ge1xuICAvKipcbiAgICogU2NoZW1hIHZlcnNpb24gMS4wIGZvciB0aGUgY29tcG9uZW50IGRvY3VtZW50XG4gICAqL1xuICBWMV8wID0gJzEuMCcsXG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgaW5wdXRzIGZvciBhIHN0ZXAgaW4gdGhlIGNvbXBvbmVudCBkb2N1bWVudFxuICovXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50U3RlcElucHV0cyB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBpbnB1dCB2YWx1ZSBmcm9tIGFuIG9iamVjdCwgZm9yIHRoZSBjb21wb25lbnQgc3RlcFxuICAgKlxuICAgKiBAcGFyYW0gaW5wdXRzT2JqZWN0IFRoZSBvYmplY3QgY29udGFpbmluZyB0aGUgaW5wdXQgdmFsdWVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21PYmplY3QoaW5wdXRzT2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogQ29tcG9uZW50U3RlcElucHV0cyB7XG4gICAgcmV0dXJuIG5ldyBDb21wb25lbnRTdGVwSW5wdXRzKGlucHV0c09iamVjdCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgaW5wdXQgdmFsdWUgZnJvbSBhIGxpc3Qgb2YgaW5wdXQgb2JqZWN0cywgZm9yIHRoZSBjb21wb25lbnQgc3RlcFxuICAgKlxuICAgKiBAcGFyYW0gaW5wdXRzT2JqZWN0TGlzdCBUaGUgbGlzdCBvZiBvYmplY3RzIGNvbnRhaW5pbmcgdGhlIGlucHV0IHZhbHVlc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tTGlzdChpbnB1dHNPYmplY3RMaXN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9W10pOiBDb21wb25lbnRTdGVwSW5wdXRzIHtcbiAgICByZXR1cm4gbmV3IENvbXBvbmVudFN0ZXBJbnB1dHMoaW5wdXRzT2JqZWN0TGlzdCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlbmRlcmVkIGlucHV0IHZhbHVlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaW5wdXRzOiBhbnk7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGlucHV0OiBhbnkpIHtcbiAgICB0aGlzLmlucHV0cyA9IGlucHV0O1xuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBgaWZgIGNvbmRpdGlvbiBpbiB0aGUgY29tcG9uZW50IGRvY3VtZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRTdGVwSWZDb25kaXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgYGlmYCB2YWx1ZSBmcm9tIGFuIG9iamVjdCwgZm9yIHRoZSBjb21wb25lbnQgc3RlcFxuICAgKlxuICAgKiBAcGFyYW0gaWZPYmplY3QgVGhlIG9iamVjdCBjb250YWluaW5nIHRoZSBgaWZgIGNvbmRpdGlvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tT2JqZWN0KGlmT2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogQ29tcG9uZW50U3RlcElmQ29uZGl0aW9uIHtcbiAgICByZXR1cm4gbmV3IENvbXBvbmVudFN0ZXBJZkNvbmRpdGlvbihpZk9iamVjdCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlbmRlcmVkIGlucHV0IHZhbHVlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaWZDb25kaXRpb246IGFueTtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoaWZDb25kaXRpb246IGFueSkge1xuICAgIHRoaXMuaWZDb25kaXRpb24gPSBpZkNvbmRpdGlvbjtcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3IgcmVmZXJlbmNpbmcgYW5kIHVwbG9hZGluZyBjb21wb25lbnQgZGF0YVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29tcG9uZW50RGF0YSB7XG4gIC8qKlxuICAgKiBVcGxvYWRzIGNvbXBvbmVudCBkYXRhIGZyb20gYSBsb2NhbCBmaWxlIHRvIFMzIHRvIHVzZSBhcyB0aGUgY29tcG9uZW50IGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIElkZW50aWZpZXIgb2YgdGhlIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gcGF0aCBUaGUgbG9jYWwgcGF0aCB0byB0aGUgY29tcG9uZW50IGRhdGEgZmlsZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBTMyBhc3NldCB1cGxvYWQgb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQXNzZXQoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBvcHRpb25zOiBzM2Fzc2V0cy5Bc3NldE9wdGlvbnMgPSB7fSxcbiAgKTogUzNDb21wb25lbnREYXRhIHtcbiAgICBjb25zdCBhc3NldCA9IG5ldyBzM2Fzc2V0cy5Bc3NldChzY29wZSwgaWQsIHsgLi4ub3B0aW9ucywgcGF0aCB9KTtcbiAgICByZXR1cm4gbmV3IFMzQ29tcG9uZW50RGF0YUZyb21Bc3NldChhc3NldCk7XG4gIH1cblxuICAvKipcbiAgICogUmVmZXJlbmNlcyBjb21wb25lbnQgZGF0YSBmcm9tIGEgcHJlLWV4aXN0aW5nIFMzIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0gYnVja2V0IFRoZSBTMyBidWNrZXQgd2hlcmUgdGhlIGNvbXBvbmVudCBkYXRhIGlzIHN0b3JlZFxuICAgKiBAcGFyYW0ga2V5IFRoZSBTMyBrZXkgb2YgdGhlIGNvbXBvbmVudCBkYXRhIGZpbGVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVMzKGJ1Y2tldDogczMuSUJ1Y2tldCwga2V5OiBzdHJpbmcpOiBTM0NvbXBvbmVudERhdGEge1xuICAgIHJldHVybiBuZXcgUzNDb21wb25lbnREYXRhRnJvbUJ1Y2tldEtleShidWNrZXQsIGtleSk7XG4gIH1cblxuICAvKipcbiAgICogVXNlcyBhbiBpbmxpbmUgSlNPTiBvYmplY3QgYXMgdGhlIGNvbXBvbmVudCBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIEFuIGlubGluZSBKU09OIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGNvbXBvbmVudCBkYXRhXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Kc29uT2JqZWN0KGRhdGE6IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBDb21wb25lbnREYXRhIHtcbiAgICBjb25zdCBpbmxpbmVEYXRhID0geWFtbC5zdHJpbmdpZnkoZGF0YSwgeyBpbmRlbnQ6IDIgfSk7XG4gICAgcmV0dXJuIG5ldyBJbmxpbmVDb21wb25lbnREYXRhKGlubGluZURhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZXMgYW4gaW5saW5lIEpTT04gb2JqZWN0IGFzIHRoZSBjb21wb25lbnQgZGF0YSwgdXNpbmcgdGhlIENvbXBvbmVudERvY3VtZW50IGludGVyZmFjZVxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBBbiBpbmxpbmUgSlNPTiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjb21wb25lbnQgZGF0YVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ29tcG9uZW50RG9jdW1lbnRKc29uT2JqZWN0KGRhdGE6IENvbXBvbmVudERvY3VtZW50KTogQ29tcG9uZW50RGF0YSB7XG4gICAgY29uc3QgeyBuYW1lLCBkZXNjcmlwdGlvbiwgc2NoZW1hVmVyc2lvbiwgY29uc3RhbnRzLCBwYXJhbWV0ZXJzLCBwaGFzZXMgfSA9IGRhdGE7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUpzb25PYmplY3Qoe1xuICAgICAgLi4uKG5hbWUgIT09IHVuZGVmaW5lZCAmJiB7IG5hbWUgfSksXG4gICAgICAuLi4oZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgc2NoZW1hVmVyc2lvbjogc2NoZW1hVmVyc2lvbixcbiAgICAgIC4uLihjb25zdGFudHMgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgIGNvbnN0YW50czogT2JqZWN0LmVudHJpZXMoY29uc3RhbnRzKS5tYXAoKFtjb25zdGFudE5hbWUsIHZhbHVlXSkgPT4gKHtcbiAgICAgICAgICBbY29uc3RhbnROYW1lXTogeyB0eXBlOiB2YWx1ZS50eXBlLCB2YWx1ZTogdmFsdWUudmFsdWUgfSxcbiAgICAgICAgfSkpLFxuICAgICAgfSksXG4gICAgICAuLi4ocGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgcGFyYW1ldGVyczogT2JqZWN0LmVudHJpZXMocGFyYW1ldGVycykubWFwKChbcGFyYW1ldGVyTmFtZSwgdmFsdWVdKSA9PiAoeyBbcGFyYW1ldGVyTmFtZV06IHZhbHVlIH0pKSxcbiAgICAgIH0pLFxuICAgICAgcGhhc2VzOiBwaGFzZXMubWFwKChwaGFzZSkgPT4gKHtcbiAgICAgICAgbmFtZTogcGhhc2UubmFtZSxcbiAgICAgICAgc3RlcHM6IHBoYXNlLnN0ZXBzLm1hcCgoc3RlcCkgPT4gKHtcbiAgICAgICAgICBuYW1lOiBzdGVwLm5hbWUsXG4gICAgICAgICAgYWN0aW9uOiBzdGVwLmFjdGlvbixcbiAgICAgICAgICAuLi4oc3RlcC5vbkZhaWx1cmUgIT09IHVuZGVmaW5lZCAmJiB7IG9uRmFpbHVyZTogc3RlcC5vbkZhaWx1cmUgfSksXG4gICAgICAgICAgLi4uKHN0ZXAudGltZW91dCAhPT0gdW5kZWZpbmVkICYmIHsgdGltZW91dFNlY29uZHM6IHN0ZXAudGltZW91dC50b1NlY29uZHMoKSB9KSxcbiAgICAgICAgICAuLi4oc3RlcC5pZiAhPT0gdW5kZWZpbmVkICYmIHsgaWY6IHN0ZXAuaWYuaWZDb25kaXRpb24gfSksXG4gICAgICAgICAgLi4uKHN0ZXAubG9vcCAhPT0gdW5kZWZpbmVkICYmIHsgbG9vcDogc3RlcC5sb29wIH0pLFxuICAgICAgICAgIGlucHV0czogc3RlcC5pbnB1dHMuaW5wdXRzLFxuICAgICAgICB9KSksXG4gICAgICB9KSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXNlcyBhbiBpbmxpbmUgSlNPTi9ZQU1MIHN0cmluZyBhcyB0aGUgY29tcG9uZW50IGRhdGFcbiAgICpcbiAgICogQHBhcmFtIGRhdGEgQW4gaW5saW5lIEpTT04vWUFNTCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjb21wb25lbnQgZGF0YVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tSW5saW5lKGRhdGE6IHN0cmluZyk6IENvbXBvbmVudERhdGEge1xuICAgIHJldHVybiBuZXcgSW5saW5lQ29tcG9uZW50RGF0YShkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgcHJvdmlkZWQgY29tcG9uZW50IGRhdGEgaXMgYW4gUzMgcmVmZXJlbmNlXG4gICAqL1xuICBhYnN0cmFjdCByZWFkb25seSBpc1MzUmVmZXJlbmNlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzdWx0aW5nIGlubGluZSBzdHJpbmcgb3IgUzMgVVJMIHdoaWNoIHJlZmVyZW5jZXMgdGhlIGNvbXBvbmVudCBkYXRhXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3IgUzMtYmFzZWQgY29tcG9uZW50IGRhdGEgcmVmZXJlbmNlcywgY29udGFpbmluZyBhZGRpdGlvbmFsIHBlcm1pc3Npb24gZ3JhbnQgbWV0aG9kcyBvbiB0aGUgUzMgb2JqZWN0XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTM0NvbXBvbmVudERhdGEgZXh0ZW5kcyBDb21wb25lbnREYXRhIHtcbiAgcHVibGljIHJlYWRvbmx5IGlzUzNSZWZlcmVuY2UgPSB0cnVlO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBidWNrZXQ6IHMzLklCdWNrZXQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBrZXk6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYnVja2V0OiBzMy5JQnVja2V0LCBrZXk6IHN0cmluZykge1xuICAgIHN1cGVyKGJ1Y2tldC5zM1VybEZvck9iamVjdChrZXkpKTtcblxuICAgIHRoaXMuYnVja2V0ID0gYnVja2V0O1xuICAgIHRoaXMua2V5ID0ga2V5O1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHB1dCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGNvbXBvbmVudCBkYXRhIGluIFMzXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICovXG4gIHB1YmxpYyBncmFudFB1dChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0LmdyYW50UHV0KGdyYW50ZWUsIHRoaXMua2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkIHBlcm1pc3Npb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgY29tcG9uZW50IGRhdGEgaW4gUzNcbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKi9cbiAgcHVibGljIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0LmdyYW50UmVhZChncmFudGVlLCB0aGlzLmtleSk7XG4gIH1cbn1cblxuY2xhc3MgSW5saW5lQ29tcG9uZW50RGF0YSBleHRlbmRzIENvbXBvbmVudERhdGEge1xuICBwdWJsaWMgcmVhZG9ubHkgaXNTM1JlZmVyZW5jZSA9IGZhbHNlO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihkYXRhOiBzdHJpbmcpIHtcbiAgICBzdXBlcihkYXRhKTtcbiAgfVxufVxuXG5jbGFzcyBTM0NvbXBvbmVudERhdGFGcm9tQnVja2V0S2V5IGV4dGVuZHMgUzNDb21wb25lbnREYXRhIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKGJ1Y2tldDogczMuSUJ1Y2tldCwga2V5OiBzdHJpbmcpIHtcbiAgICBzdXBlcihidWNrZXQsIGtleSk7XG4gIH1cbn1cblxuY2xhc3MgUzNDb21wb25lbnREYXRhRnJvbUFzc2V0IGV4dGVuZHMgUzNDb21wb25lbnREYXRhIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKGFzc2V0OiBzM2Fzc2V0cy5Bc3NldCkge1xuICAgIHN1cGVyKGFzc2V0LmJ1Y2tldCwgYXNzZXQuczNPYmplY3RLZXkpO1xuICB9XG59XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIGZvciB3b3JraW5nIHdpdGggQVdTLW1hbmFnZWQgY29tcG9uZW50c1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXdzTWFuYWdlZENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBJbXBvcnRzIHRoZSBBV1MgQ0xJIHYyIEFXUy1tYW5hZ2VkIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgSWRlbnRpZmllciBvZiB0aGUgY29uc3RydWN0XG4gICAqIEBwYXJhbSBhdHRycyBUaGUgQVdTLW1hbmFnZWQgY29tcG9uZW50IGF0dHJpYnV0ZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXdzQ2xpVjIoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXR0cnM6IEF3c01hbmFnZWRDb21wb25lbnRBdHRyaWJ1dGVzKTogSUNvbXBvbmVudCB7XG4gICAgdGhpcy52YWxpZGF0ZVByZWRlZmluZWRNYW5hZ2VkQ29tcG9uZW50TWV0aG9kQXR0cmlidXRlcyh7XG4gICAgICBzY29wZSxcbiAgICAgIGF0dHJzLFxuICAgICAgY29tcG9uZW50OiAnYXdzQ2xpVjInLFxuICAgICAgYWxsb3dlZFBsYXRmb3JtczogW1BsYXRmb3JtLkxJTlVYLCBQbGF0Zm9ybS5XSU5ET1dTXSxcbiAgICB9KTtcblxuICAgIGlmIChhdHRycy5wbGF0Zm9ybSA9PT0gUGxhdGZvcm0uV0lORE9XUykge1xuICAgICAgcmV0dXJuIHRoaXMuZnJvbUF3c01hbmFnZWRDb21wb25lbnRBdHRyaWJ1dGVzKHNjb3BlLCBpZCwge1xuICAgICAgICBjb21wb25lbnROYW1lOiAnYXdzLWNsaS12ZXJzaW9uLTItd2luZG93cycsXG4gICAgICAgIGNvbXBvbmVudFZlcnNpb246IGF0dHJzLmNvbXBvbmVudFZlcnNpb24sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mcm9tQXdzTWFuYWdlZENvbXBvbmVudEF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7XG4gICAgICBjb21wb25lbnROYW1lOiAnYXdzLWNsaS12ZXJzaW9uLTItbGludXgnLFxuICAgICAgY29tcG9uZW50VmVyc2lvbjogYXR0cnMuY29tcG9uZW50VmVyc2lvbixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnRzIHRoZSBoZWxsbyB3b3JsZCBBV1MtbWFuYWdlZCBjb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIElkZW50aWZpZXIgb2YgdGhlIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gYXR0cnMgVGhlIEFXUy1tYW5hZ2VkIGNvbXBvbmVudCBhdHRyaWJ1dGVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGhlbGxvV29ybGQoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXR0cnM6IEF3c01hbmFnZWRDb21wb25lbnRBdHRyaWJ1dGVzKTogSUNvbXBvbmVudCB7XG4gICAgdGhpcy52YWxpZGF0ZVByZWRlZmluZWRNYW5hZ2VkQ29tcG9uZW50TWV0aG9kQXR0cmlidXRlcyh7XG4gICAgICBzY29wZSxcbiAgICAgIGF0dHJzLFxuICAgICAgY29tcG9uZW50OiAnaGVsbG9Xb3JsZCcsXG4gICAgICBhbGxvd2VkUGxhdGZvcm1zOiBbUGxhdGZvcm0uTElOVVgsIFBsYXRmb3JtLldJTkRPV1NdLFxuICAgIH0pO1xuXG4gICAgaWYgKGF0dHJzLnBsYXRmb3JtID09PSBQbGF0Zm9ybS5XSU5ET1dTKSB7XG4gICAgICByZXR1cm4gdGhpcy5mcm9tQXdzTWFuYWdlZENvbXBvbmVudEF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7XG4gICAgICAgIGNvbXBvbmVudE5hbWU6ICdoZWxsby13b3JsZC13aW5kb3dzJyxcbiAgICAgICAgY29tcG9uZW50VmVyc2lvbjogYXR0cnMuY29tcG9uZW50VmVyc2lvbixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZyb21Bd3NNYW5hZ2VkQ29tcG9uZW50QXR0cmlidXRlcyhzY29wZSwgaWQsIHtcbiAgICAgIGNvbXBvbmVudE5hbWU6ICdoZWxsby13b3JsZC1saW51eCcsXG4gICAgICBjb21wb25lbnRWZXJzaW9uOiBhdHRycy5jb21wb25lbnRWZXJzaW9uLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydHMgdGhlIFB5dGhvbiAzIEFXUy1tYW5hZ2VkIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgSWRlbnRpZmllciBvZiB0aGUgY29uc3RydWN0XG4gICAqIEBwYXJhbSBhdHRycyBUaGUgQVdTLW1hbmFnZWQgY29tcG9uZW50IGF0dHJpYnV0ZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcHl0aG9uMyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhdHRyczogQXdzTWFuYWdlZENvbXBvbmVudEF0dHJpYnV0ZXMpOiBJQ29tcG9uZW50IHtcbiAgICB0aGlzLnZhbGlkYXRlUHJlZGVmaW5lZE1hbmFnZWRDb21wb25lbnRNZXRob2RBdHRyaWJ1dGVzKHtcbiAgICAgIHNjb3BlLFxuICAgICAgYXR0cnMsXG4gICAgICBjb21wb25lbnQ6ICdweXRob24zJyxcbiAgICAgIGFsbG93ZWRQbGF0Zm9ybXM6IFtQbGF0Zm9ybS5MSU5VWCwgUGxhdGZvcm0uV0lORE9XU10sXG4gICAgfSk7XG5cbiAgICBpZiAoYXR0cnMucGxhdGZvcm0gPT09IFBsYXRmb3JtLldJTkRPV1MpIHtcbiAgICAgIHJldHVybiB0aGlzLmZyb21Bd3NNYW5hZ2VkQ29tcG9uZW50QXR0cmlidXRlcyhzY29wZSwgaWQsIHtcbiAgICAgICAgY29tcG9uZW50TmFtZTogJ3B5dGhvbi0zLXdpbmRvd3MnLFxuICAgICAgICBjb21wb25lbnRWZXJzaW9uOiBhdHRycy5jb21wb25lbnRWZXJzaW9uLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZnJvbUF3c01hbmFnZWRDb21wb25lbnRBdHRyaWJ1dGVzKHNjb3BlLCBpZCwge1xuICAgICAgY29tcG9uZW50TmFtZTogJ3B5dGhvbi0zLWxpbnV4JyxcbiAgICAgIGNvbXBvbmVudFZlcnNpb246IGF0dHJzLmNvbXBvbmVudFZlcnNpb24sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0cyB0aGUgcmVib290IEFXUy1tYW5hZ2VkIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgSWRlbnRpZmllciBvZiB0aGUgY29uc3RydWN0XG4gICAqIEBwYXJhbSBhdHRycyBUaGUgQVdTLW1hbmFnZWQgY29tcG9uZW50IGF0dHJpYnV0ZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVib290KHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGF0dHJzOiBBd3NNYW5hZ2VkQ29tcG9uZW50QXR0cmlidXRlcyk6IElDb21wb25lbnQge1xuICAgIHRoaXMudmFsaWRhdGVQcmVkZWZpbmVkTWFuYWdlZENvbXBvbmVudE1ldGhvZEF0dHJpYnV0ZXMoe1xuICAgICAgc2NvcGUsXG4gICAgICBhdHRycyxcbiAgICAgIGNvbXBvbmVudDogJ3JlYm9vdCcsXG4gICAgICBhbGxvd2VkUGxhdGZvcm1zOiBbUGxhdGZvcm0uTElOVVgsIFBsYXRmb3JtLldJTkRPV1NdLFxuICAgIH0pO1xuXG4gICAgaWYgKGF0dHJzLnBsYXRmb3JtID09PSBQbGF0Zm9ybS5XSU5ET1dTKSB7XG4gICAgICByZXR1cm4gdGhpcy5mcm9tQXdzTWFuYWdlZENvbXBvbmVudEF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7XG4gICAgICAgIGNvbXBvbmVudE5hbWU6ICdyZWJvb3Qtd2luZG93cycsXG4gICAgICAgIGNvbXBvbmVudFZlcnNpb246IGF0dHJzLmNvbXBvbmVudFZlcnNpb24sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mcm9tQXdzTWFuYWdlZENvbXBvbmVudEF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7XG4gICAgICBjb21wb25lbnROYW1lOiAncmVib290LWxpbnV4JyxcbiAgICAgIGNvbXBvbmVudFZlcnNpb246IGF0dHJzLmNvbXBvbmVudFZlcnNpb24sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0cyB0aGUgU1RJRyBoYXJkZW5pbmcgQVdTLW1hbmFnZWQgY29tcG9uZW50XG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCBJZGVudGlmaWVyIG9mIHRoZSBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGF0dHJzIFRoZSBBV1MtbWFuYWdlZCBjb21wb25lbnQgYXR0cmlidXRlc1xuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS9pYi1zdGlnLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc3RpZ0J1aWxkKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGF0dHJzOiBBd3NNYW5hZ2VkQ29tcG9uZW50QXR0cmlidXRlcyk6IElDb21wb25lbnQge1xuICAgIHRoaXMudmFsaWRhdGVQcmVkZWZpbmVkTWFuYWdlZENvbXBvbmVudE1ldGhvZEF0dHJpYnV0ZXMoe1xuICAgICAgc2NvcGUsXG4gICAgICBhdHRycyxcbiAgICAgIGNvbXBvbmVudDogJ3N0aWdCdWlsZCcsXG4gICAgICBhbGxvd2VkUGxhdGZvcm1zOiBbUGxhdGZvcm0uTElOVVgsIFBsYXRmb3JtLldJTkRPV1NdLFxuICAgIH0pO1xuXG4gICAgaWYgKGF0dHJzLnBsYXRmb3JtID09PSBQbGF0Zm9ybS5XSU5ET1dTKSB7XG4gICAgICByZXR1cm4gdGhpcy5mcm9tQXdzTWFuYWdlZENvbXBvbmVudEF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7XG4gICAgICAgIGNvbXBvbmVudE5hbWU6ICdzdGlnLWJ1aWxkLXdpbmRvd3MnLFxuICAgICAgICBjb21wb25lbnRWZXJzaW9uOiBhdHRycy5jb21wb25lbnRWZXJzaW9uLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZnJvbUF3c01hbmFnZWRDb21wb25lbnRBdHRyaWJ1dGVzKHNjb3BlLCBpZCwge1xuICAgICAgY29tcG9uZW50TmFtZTogJ3N0aWctYnVpbGQtbGludXgnLFxuICAgICAgY29tcG9uZW50VmVyc2lvbjogYXR0cnMuY29tcG9uZW50VmVyc2lvbixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnRzIHRoZSBPUyB1cGRhdGUgQVdTLW1hbmFnZWQgY29tcG9uZW50XG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCBJZGVudGlmaWVyIG9mIHRoZSBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGF0dHJzIFRoZSBBV1MtbWFuYWdlZCBjb21wb25lbnQgYXR0cmlidXRlc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1cGRhdGVPUyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhdHRyczogQXdzTWFuYWdlZENvbXBvbmVudEF0dHJpYnV0ZXMpOiBJQ29tcG9uZW50IHtcbiAgICB0aGlzLnZhbGlkYXRlUHJlZGVmaW5lZE1hbmFnZWRDb21wb25lbnRNZXRob2RBdHRyaWJ1dGVzKHtcbiAgICAgIHNjb3BlLFxuICAgICAgYXR0cnMsXG4gICAgICBjb21wb25lbnQ6ICd1cGRhdGVPUycsXG4gICAgICBhbGxvd2VkUGxhdGZvcm1zOiBbUGxhdGZvcm0uTElOVVgsIFBsYXRmb3JtLldJTkRPV1NdLFxuICAgIH0pO1xuXG4gICAgaWYgKGF0dHJzLnBsYXRmb3JtID09PSBQbGF0Zm9ybS5XSU5ET1dTKSB7XG4gICAgICByZXR1cm4gdGhpcy5mcm9tQXdzTWFuYWdlZENvbXBvbmVudEF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7XG4gICAgICAgIGNvbXBvbmVudE5hbWU6ICd1cGRhdGUtd2luZG93cycsXG4gICAgICAgIGNvbXBvbmVudFZlcnNpb246IGF0dHJzLmNvbXBvbmVudFZlcnNpb24sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mcm9tQXdzTWFuYWdlZENvbXBvbmVudEF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7XG4gICAgICBjb21wb25lbnROYW1lOiAndXBkYXRlLWxpbnV4JyxcbiAgICAgIGNvbXBvbmVudFZlcnNpb246IGF0dHJzLmNvbXBvbmVudFZlcnNpb24sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0cyBhbiBBV1MtbWFuYWdlZCBjb21wb25lbnQgZnJvbSBpdHMgYXR0cmlidXRlc1xuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgSWRlbnRpZmllciBvZiB0aGUgY29uc3RydWN0XG4gICAqIEBwYXJhbSBhdHRycyBUaGUgQVdTLW1hbmFnZWQgY29tcG9uZW50IGF0dHJpYnV0ZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUF3c01hbmFnZWRDb21wb25lbnRBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogQXdzTWFuYWdlZENvbXBvbmVudEF0dHJpYnV0ZXMsXG4gICk6IElDb21wb25lbnQge1xuICAgIGlmIChhdHRycy5wbGF0Zm9ybSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgJ3BsYXRmb3JtIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBwcmUtZGVmaW5lZCBBV1MtbWFuYWdlZCBjb21wb25lbnQgbWV0aG9kcywgc3VjaCBhcyB1cGRhdGVPUycsXG4gICAgICAgIHNjb3BlLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoYXR0cnMuY29tcG9uZW50TmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcignYW4gQVdTLW1hbmFnZWQgY29tcG9uZW50IG5hbWUgaXMgcmVxdWlyZWQnLCBzY29wZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIENvbXBvbmVudC5mcm9tQ29tcG9uZW50QXJuKFxuICAgICAgc2NvcGUsXG4gICAgICBpZCxcbiAgICAgIGNkay5TdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICAgIGFjY291bnQ6ICdhd3MnLFxuICAgICAgICByZXNvdXJjZTogJ2NvbXBvbmVudCcsXG4gICAgICAgIHJlc291cmNlTmFtZTogYCR7YXR0cnMuY29tcG9uZW50TmFtZX0vJHthdHRycy5jb21wb25lbnRWZXJzaW9uID8/IExBVEVTVF9WRVJTSU9OfWAsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBJbXBvcnRzIGFuIEFXUy1tYW5hZ2VkIGNvbXBvbmVudCBmcm9tIGl0cyBuYW1lXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCBJZGVudGlmaWVyIG9mIHRoZSBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGF3c01hbmFnZWRDb21wb25lbnROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIEFXUy1tYW5hZ2VkIGNvbXBvbmVudFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQXdzTWFuYWdlZENvbXBvbmVudE5hbWUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXdzTWFuYWdlZENvbXBvbmVudE5hbWU6IHN0cmluZyk6IElDb21wb25lbnQge1xuICAgIHJldHVybiB0aGlzLmZyb21Bd3NNYW5hZ2VkQ29tcG9uZW50QXR0cmlidXRlcyhzY29wZSwgaWQsIHsgY29tcG9uZW50TmFtZTogYXdzTWFuYWdlZENvbXBvbmVudE5hbWUgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZVByZWRlZmluZWRNYW5hZ2VkQ29tcG9uZW50TWV0aG9kQXR0cmlidXRlcyh7XG4gICAgc2NvcGUsXG4gICAgYXR0cnMsXG4gICAgY29tcG9uZW50LFxuICAgIGFsbG93ZWRQbGF0Zm9ybXMsXG4gIH06IHtcbiAgICBzY29wZTogQ29uc3RydWN0O1xuICAgIGNvbXBvbmVudDogc3RyaW5nO1xuICAgIGF0dHJzOiBBd3NNYW5hZ2VkQ29tcG9uZW50QXR0cmlidXRlcztcbiAgICBhbGxvd2VkUGxhdGZvcm1zOiBQbGF0Zm9ybVtdO1xuICB9KSB7XG4gICAgaWYgKGF0dHJzLmNvbXBvbmVudE5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoYGEgbmFtZSBpcyBub3QgYWxsb3dlZCBmb3IgJHtjb21wb25lbnR9YCwgc2NvcGUpO1xuICAgIH1cblxuICAgIGlmIChhdHRycy5wbGF0Zm9ybSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihgYSBwbGF0Zm9ybSBpcyByZXF1aXJlZCBmb3IgJHtjb21wb25lbnR9YCwgc2NvcGUpO1xuICAgIH1cblxuICAgIGlmIChjZGsuVG9rZW4uaXNVbnJlc29sdmVkKGF0dHJzLnBsYXRmb3JtKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoYHBsYXRmb3JtIGNhbm5vdCBiZSBhIHRva2VuIGZvciAke2NvbXBvbmVudH1gLCBzY29wZSk7XG4gICAgfVxuXG4gICAgaWYgKCFhbGxvd2VkUGxhdGZvcm1zLmluY2x1ZGVzKGF0dHJzLnBsYXRmb3JtKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoYCR7YXR0cnMucGxhdGZvcm19IGlzIG5vdCBhIHN1cHBvcnRlZCBwbGF0Zm9ybSBmb3IgJHtjb21wb25lbnR9YCwgc2NvcGUpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3Igd29ya2luZyB3aXRoIEFXUyBNYXJrZXRwbGFjZSBjb21wb25lbnRzXG4gKi9cbmV4cG9ydCBjbGFzcyBBd3NNYXJrZXRwbGFjZUNvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBJbXBvcnRzIGFuIEFXUyBNYXJrZXRwbGFjZSBjb21wb25lbnQgZnJvbSBpdHMgYXR0cmlidXRlc1xuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgSWRlbnRpZmllciBvZiB0aGUgY29uc3RydWN0XG4gICAqIEBwYXJhbSBhdHRycyBUaGUgQVdTLW1hbmFnZWQgY29tcG9uZW50IGF0dHJpYnV0ZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUF3c01hcmtldHBsYWNlQ29tcG9uZW50QXR0cmlidXRlcyhcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXR0cnM6IEF3c01hcmtldHBsYWNlQ29tcG9uZW50QXR0cmlidXRlcyxcbiAgKTogSUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIENvbXBvbmVudC5mcm9tQ29tcG9uZW50QXJuKFxuICAgICAgc2NvcGUsXG4gICAgICBpZCxcbiAgICAgIGNkay5TdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICAgIGFjY291bnQ6ICdhd3MtbWFya2V0cGxhY2UnLFxuICAgICAgICByZXNvdXJjZTogJ2NvbXBvbmVudCcsXG4gICAgICAgIHJlc291cmNlTmFtZTogYCR7YXR0cnMuY29tcG9uZW50TmFtZX0tJHthdHRycy5tYXJrZXRwbGFjZVByb2R1Y3RJZH0vJHthdHRycy5jb21wb25lbnRWZXJzaW9uID8/IExBVEVTVF9WRVJTSU9OfWAsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogQSBuZXcgb3IgaW1wb3J0ZWQgQ29tcG9uZW50XG4gKi9cbmFic3RyYWN0IGNsYXNzIENvbXBvbmVudEJhc2UgZXh0ZW5kcyBjZGsuUmVzb3VyY2UgaW1wbGVtZW50cyBJQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgY29tcG9uZW50QXJuOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY29tcG9uZW50XG4gICAqL1xuICBhYnN0cmFjdCByZWFkb25seSBjb21wb25lbnROYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50XG4gICAqL1xuICBhYnN0cmFjdCByZWFkb25seSBjb21wb25lbnRWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdyYW50IGN1c3RvbSBhY3Rpb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICogQHBhcmFtIGFjdGlvbnMgVGhlIGxpc3Qgb2YgYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlLFxuICAgICAgYWN0aW9ucyxcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMuY29tcG9uZW50QXJuXSxcbiAgICAgIHNjb3BlOiB0aGlzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKi9cbiAgcHVibGljIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoZ3JhbnRlZSwgJ2ltYWdlYnVpbGRlcjpHZXRDb21wb25lbnQnKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gRUMyIEltYWdlIEJ1aWxkZXIgQ29tcG9uZW50LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL21hbmFnZS1jb21wb25lbnRzLmh0bWxcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2Uge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1pbWFnZWJ1aWxkZXItYWxwaGEuQ29tcG9uZW50JztcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGNvbXBvbmVudCBnaXZlbiBpdHMgQVJOLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ29tcG9uZW50QXJuKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbXBvbmVudEFybjogc3RyaW5nKTogSUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUNvbXBvbmVudEF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IGNvbXBvbmVudEFybiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgY29tcG9uZW50IGdpdmVuIGl0cyBuYW1lLiBUaGUgcHJvdmlkZWQgbmFtZSBtdXN0IGJlIG5vcm1hbGl6ZWQgYnkgY29udmVydGluZyBhbGwgYWxwaGFiZXRpY2FsXG4gICAqIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlLCBhbmQgcmVwbGFjaW5nIGFsbCBzcGFjZXMgYW5kIHVuZGVyc2NvcmVzIHdpdGggaHlwaGVucy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNvbXBvbmVudE5hbWUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY29tcG9uZW50TmFtZTogc3RyaW5nKTogSUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUNvbXBvbmVudEF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IGNvbXBvbmVudE5hbWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGNvbXBvbmVudCBieSBwcm92aWRpbmcgaXRzIGF0dHJpYnV0ZXMuIElmIHRoZSBjb21wb25lbnQgbmFtZSBpcyBwcm92aWRlZCBhcyBhbiBhdHRyaWJ1dGUsIGl0XG4gICAqIG11c3QgYmUgbm9ybWFsaXplZCBieSBjb252ZXJ0aW5nIGFsbCBhbHBoYWJldGljYWwgY2hhcmFjdGVycyB0byBsb3dlcmNhc2UsIGFuZCByZXBsYWNpbmcgYWxsIHNwYWNlcyBhbmQgdW5kZXJzY29yZXNcbiAgICogd2l0aCBoeXBoZW5zLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ29tcG9uZW50QXR0cmlidXRlcyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhdHRyczogQ29tcG9uZW50QXR0cmlidXRlcyk6IElDb21wb25lbnQge1xuICAgIGlmIChhdHRycy5jb21wb25lbnRBcm4gJiYgKGF0dHJzLmNvbXBvbmVudE5hbWUgfHwgYXR0cnMuY29tcG9uZW50VmVyc2lvbikpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAnYSBjb21wb25lbnROYW1lIG9yIGNvbXBvbmVudFZlcnNpb24gY2Fubm90IGJlIHByb3ZpZGVkIHdoZW4gYSBjb21wb25lbnRBcm4gaXMgcHJvdmlkZWQnLFxuICAgICAgICBzY29wZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFhdHRycy5jb21wb25lbnRBcm4gJiYgIWF0dHJzLmNvbXBvbmVudE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKCdlaXRoZXIgY29tcG9uZW50QXJuIG9yIGNvbXBvbmVudE5hbWUgaXMgcmVxdWlyZWQnLCBzY29wZSk7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcG9uZW50QXJuID1cbiAgICAgIGF0dHJzLmNvbXBvbmVudEFybiA/P1xuICAgICAgY2RrLlN0YWNrLm9mKHNjb3BlKS5mb3JtYXRBcm4oe1xuICAgICAgICBzZXJ2aWNlOiAnaW1hZ2VidWlsZGVyJyxcbiAgICAgICAgcmVzb3VyY2U6ICdjb21wb25lbnQnLFxuICAgICAgICByZXNvdXJjZU5hbWU6IGAke2F0dHJzLmNvbXBvbmVudE5hbWV9LyR7YXR0cnMuY29tcG9uZW50VmVyc2lvbiA/PyBMQVRFU1RfVkVSU0lPTn1gLFxuICAgICAgfSk7XG5cbiAgICBjb25zdCBbY29tcG9uZW50TmFtZSwgY29tcG9uZW50VmVyc2lvbl0gPSAoKCkgPT4ge1xuICAgICAgaWYgKGF0dHJzLmNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIFthdHRycy5jb21wb25lbnROYW1lLCBhdHRycy5jb21wb25lbnRWZXJzaW9uID8/IExBVEVTVF9WRVJTSU9OXTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29tcG9uZW50TmFtZVZlcnNpb24gPSBjZGsuU3RhY2sub2Yoc2NvcGUpLnNwbGl0QXJuKFxuICAgICAgICBjb21wb25lbnRBcm4sXG4gICAgICAgIGNkay5Bcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSxcbiAgICAgICkucmVzb3VyY2VOYW1lITtcblxuICAgICAgY29uc3QgY29tcG9uZW50TmFtZVZlcnNpb25TcGxpdCA9IGNkay5Gbi5zcGxpdCgnLycsIGNvbXBvbmVudE5hbWVWZXJzaW9uKTtcbiAgICAgIHJldHVybiBbY2RrLkZuLnNlbGVjdCgwLCBjb21wb25lbnROYW1lVmVyc2lvblNwbGl0KSwgY2RrLkZuLnNlbGVjdCgxLCBjb21wb25lbnROYW1lVmVyc2lvblNwbGl0KV07XG4gICAgfSkoKTtcblxuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIENvbXBvbmVudEJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNvbXBvbmVudEFybiA9IGNvbXBvbmVudEFybjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjb21wb25lbnRWZXJzaW9uID0gY29tcG9uZW50VmVyc2lvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBvYmplY3QgaXMgYSBDb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlzQ29tcG9uZW50KHg6IGFueSk6IHggaXMgQ29tcG9uZW50IHtcbiAgICByZXR1cm4geCAhPT0gbnVsbCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgQ09NUE9ORU5UX1NZTUJPTCBpbiB4O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbXBvbmVudEFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY29tcG9uZW50XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgZW5jcnlwdGVkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZW5jcnlwdGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb21wb25lbnRUeXBlOiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGttc0tleT86IGttcy5JS2V5O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTpcbiAgICAgICAgcHJvcHMuY29tcG9uZW50TmFtZSA/P1xuICAgICAgICBjZGsuTGF6eS5zdHJpbmcoe1xuICAgICAgICAgIHByb2R1Y2U6ICgpID0+XG4gICAgICAgICAgICBjZGsuTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHtcbiAgICAgICAgICAgICAgbWF4TGVuZ3RoOiAxMjgsXG4gICAgICAgICAgICAgIHNlcGFyYXRvcjogJy0nLFxuICAgICAgICAgICAgICBhbGxvd2VkU3BlY2lhbENoYXJhY3RlcnM6ICctJyxcbiAgICAgICAgICAgIH0pLnRvTG93ZXJDYXNlKCksIC8vIEVuZm9yY2UgbG93ZXJjYXNlIGZvciB0aGUgYXV0by1nZW5lcmF0ZWQgZmFsbGJhY2tcbiAgICAgICAgfSksXG4gICAgfSk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgQ09NUE9ORU5UX1NZTUJPTCwgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMudmFsaWRhdGVDb21wb25lbnROYW1lKCk7XG5cbiAgICBwcm9wcy5zdXBwb3J0ZWRPc1ZlcnNpb25zPy5mb3JFYWNoKChvc1ZlcnNpb24pID0+IHtcbiAgICAgIGlmIChvc1ZlcnNpb24ucGxhdGZvcm0gIT09IHByb3BzLnBsYXRmb3JtKSB7XG4gICAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGBvcyB2ZXJzaW9uICR7b3NWZXJzaW9uLm9zVmVyc2lvbn0gaXMgbm90IGNvbXBhdGlibGUgd2l0aCBwbGF0Zm9ybSAke3Byb3BzLnBsYXRmb3JtfWAsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbXBvbmVudFZlcnNpb24gPSBwcm9wcy5jb21wb25lbnRWZXJzaW9uID8/ICcxLjAuMCc7XG4gICAgY29uc3Qgc3VwcG9ydGVkT3NWZXJzaW9ucyA9IHByb3BzLnN1cHBvcnRlZE9zVmVyc2lvbnM/LmZpbHRlcigob3NWZXJzaW9uKSA9PiBvc1ZlcnNpb24ub3NWZXJzaW9uICE9PSB1bmRlZmluZWQpO1xuXG4gICAgY29uc3QgY29tcG9uZW50ID0gbmV3IENmbkNvbXBvbmVudCh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBuYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICAgIHZlcnNpb246IGNvbXBvbmVudFZlcnNpb24sXG4gICAgICBjaGFuZ2VEZXNjcmlwdGlvbjogcHJvcHMuY2hhbmdlRGVzY3JpcHRpb24sXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBwbGF0Zm9ybTogcHJvcHMucGxhdGZvcm0sXG4gICAgICBrbXNLZXlJZDogcHJvcHMua21zS2V5Py5rZXlBcm4sXG4gICAgICB0YWdzOiBwcm9wcy50YWdzLFxuICAgICAgLi4uKHByb3BzLmRhdGEuaXNTM1JlZmVyZW5jZSA/IHsgdXJpOiBwcm9wcy5kYXRhLnZhbHVlIH0gOiB7IGRhdGE6IHByb3BzLmRhdGEudmFsdWUgfSksXG4gICAgICAuLi4oc3VwcG9ydGVkT3NWZXJzaW9ucz8ubGVuZ3RoICYmIHtcbiAgICAgICAgc3VwcG9ydGVkT3NWZXJzaW9uczogc3VwcG9ydGVkT3NWZXJzaW9ucy5tYXAoKG9zVmVyc2lvbikgPT4gb3NWZXJzaW9uLm9zVmVyc2lvbiEpLFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbXBvbmVudE5hbWUgPSB0aGlzLmdldFJlc291cmNlTmFtZUF0dHJpYnV0ZShjb21wb25lbnQuYXR0ck5hbWUpO1xuICAgIHRoaXMuY29tcG9uZW50QXJuID0gdGhpcy5nZXRSZXNvdXJjZUFybkF0dHJpYnV0ZShjb21wb25lbnQuYXR0ckFybiwge1xuICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICByZXNvdXJjZTogJ2NvbXBvbmVudCcsXG4gICAgICByZXNvdXJjZU5hbWU6IGAke3RoaXMucGh5c2ljYWxOYW1lfS8ke2NvbXBvbmVudFZlcnNpb259YCxcbiAgICB9KTtcbiAgICB0aGlzLmNvbXBvbmVudFZlcnNpb24gPSBjb21wb25lbnRWZXJzaW9uO1xuICAgIHRoaXMuZW5jcnlwdGVkID0gdHJ1ZTsgLy8gQ29tcG9uZW50cyBhcmUgYWx3YXlzIGVuY3J5cHRlZFxuICAgIHRoaXMuY29tcG9uZW50VHlwZSA9IGNvbXBvbmVudC5hdHRyVHlwZTtcbiAgICB0aGlzLmttc0tleSA9IHByb3BzLmttc0tleTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVDb21wb25lbnROYW1lKCkge1xuICAgIGlmIChjZGsuVG9rZW4uaXNVbnJlc29sdmVkKHRoaXMucGh5c2ljYWxOYW1lKSkge1xuICAgICAgcmV0dXJuOyAvLyBDYW5ub3QgdmFsaWRhdGUgdW5yZXNvbHZlZCB0b2tlbnMsIGdpdmVuIHRoZWlyIGFjdHVhbCB2YWx1ZSBpcyByZW5kZXJlZCBhdCBkZXBsb3ltZW50IHRpbWVcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUubGVuZ3RoID4gMTI4KSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgYHRoZSBjb21wb25lbnROYW1lIGNhbm5vdCBiZSBsb25nZXIgdGhhbiAxMjggY2hhcmFjdGVycywgZ290OiAnJHt0aGlzLnBoeXNpY2FsTmFtZX0nYCxcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGh5c2ljYWxOYW1lLmluY2x1ZGVzKCcgJykpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKGB0aGUgY29tcG9uZW50TmFtZSBjYW5ub3QgY29udGFpbiBzcGFjZXMsIGdvdDogJyR7dGhpcy5waHlzaWNhbE5hbWV9J2AsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZS5pbmNsdWRlcygnXycpKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihgdGhlIGNvbXBvbmVudE5hbWUgY2Fubm90IGNvbnRhaW4gdW5kZXJzY29yZXMsIGdvdDogJyR7dGhpcy5waHlzaWNhbE5hbWV9J2AsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZSAhPT0gdGhpcy5waHlzaWNhbE5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoYHRoZSBjb21wb25lbnROYW1lIG11c3QgYmUgbG93ZXJjYXNlLCBnb3Q6ICcke3RoaXMucGh5c2ljYWxOYW1lfSdgLCB0aGlzKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
707
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUFtQztBQUNuQywyQ0FBMkM7QUFDM0MsbUVBQTREO0FBRzVELHNEQUFzRDtBQUN0RCw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBRTFFLDZCQUE2QjtBQUc3QixNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsMkNBQTJDLENBQUMsQ0FBQztBQUVqRixNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUM7QUErVC9COztHQUVHO0FBQ0gsTUFBYSxzQkFBc0I7O0lBQ2pDOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQWE7UUFDcEMsT0FBTyxJQUFJLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNwRDtJQUVEOztPQUVHO0lBQ2EsSUFBSSxDQUFTO0lBRTdCOztPQUVHO0lBQ2EsS0FBSyxDQUFNO0lBRTNCLFlBQXNCLElBQVksRUFBRSxLQUFVO1FBQzVDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0tBQ3BCOztBQXZCSCx3REF3QkM7QUEwQkQ7O0dBRUc7QUFDSCxJQUFZLGVBd0pYO0FBeEpELFdBQVksZUFBZTtJQUN6Qjs7T0FFRztJQUNILDZDQUEwQixDQUFBO0lBRTFCOzs7T0FHRztJQUNILG9DQUFpQixDQUFBO0lBRWpCOztPQUVHO0lBQ0gseUNBQXNCLENBQUE7SUFFdEI7O09BRUc7SUFDSCw2Q0FBMEIsQ0FBQTtJQUUxQjs7T0FFRztJQUNILDZDQUEwQixDQUFBO0lBRTFCOztPQUVHO0lBQ0gsaURBQThCLENBQUE7SUFFOUI7O09BRUc7SUFDSCxtREFBZ0MsQ0FBQTtJQUVoQzs7T0FFRztJQUNILDZDQUEwQixD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SUFBSSxDQUFDLFlBQVksR0FBRyxFQUNyRixJQUFJLENBQ0wsQ0FBQztZQUNKLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLGtEQUFrRCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDOUcsQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUMsdURBQXVELElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNuSCxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztnQkFDMUQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUMsOENBQThDLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMxRyxDQUFDO1NBQ0Y7O1lBeExVLHVEQUFTOzs7OztBQUFULDhCQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENmbkNvbXBvbmVudCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pbWFnZWJ1aWxkZXInO1xuaW1wb3J0ICogYXMga21zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCAqIGFzIHMzYXNzZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1hc3NldHMnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ3lhbWwnO1xuaW1wb3J0IHsgT1NWZXJzaW9uLCBQbGF0Zm9ybSB9IGZyb20gJy4vb3MtdmVyc2lvbic7XG5cbmNvbnN0IENPTVBPTkVOVF9TWU1CT0wgPSBTeW1ib2wuZm9yKCdAYXdzLWNkay9hd3MtaW1hZ2VidWlsZGVyLWFscGhhLkNvbXBvbmVudCcpO1xuXG5jb25zdCBMQVRFU1RfVkVSU0lPTiA9ICd4LngueCc7XG5cbi8qKlxuICogQW4gRUMyIEltYWdlIEJ1aWxkZXIgQ29tcG9uZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDb21wb25lbnQgZXh0ZW5kcyBjZGsuSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnRBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFudCBjdXN0b20gYWN0aW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqIEBwYXJhbSBhY3Rpb25zIFRoZSBsaXN0IG9mIGFjdGlvbnNcbiAgICovXG4gIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqL1xuICBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYSBDb21wb25lbnQgcmVzb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IGRvY3VtZW50IGNvbnRlbnQgdGhhdCBkZWZpbmVzIHRoZSBidWlsZCwgdmFsaWRhdGlvbiwgb3IgdGVzdCBzdGVwcyB0byBiZSBleGVjdXRlZCBkdXJpbmcgdGhlIGltYWdlXG4gICAqIGJ1aWxkaW5nIHByb2Nlc3MuXG4gICAqL1xuICByZWFkb25seSBkYXRhOiBDb21wb25lbnREYXRhO1xuXG4gIC8qKlxuICAgKiBUaGUgb3BlcmF0aW5nIHN5c3RlbSBwbGF0Zm9ybSBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgcGxhdGZvcm06IFBsYXRmb3JtO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgbmFtZSBpcyBnZW5lcmF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IDEuMC4wXG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnRWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjaGFuZ2UgZGVzY3JpcHRpb24gb2YgdGhlIGNvbXBvbmVudC4gRGVzY3JpYmVzIHdoYXQgY2hhbmdlIGhhcyBiZWVuIG1hZGUgaW4gdGhpcyB2ZXJzaW9uIG9mIHRoZSBjb21wb25lbnQsIG9yXG4gICAqIHdoYXQgbWFrZXMgdGhpcyB2ZXJzaW9uIGRpZmZlcmVudCBmcm9tIG90aGVyIHZlcnNpb25zLlxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBjaGFuZ2VEZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEtNUyBrZXkgdXNlZCB0byBlbmNyeXB0IHRoaXMgY29tcG9uZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGFuIEltYWdlIEJ1aWxkZXIgb3duZWQga2V5IHdpbGwgYmUgdXNlZCB0byBlbmNyeXB0IHRoZSBjb21wb25lbnQuXG4gICAqL1xuICByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcblxuICAvKipcbiAgICogVGhlIG9wZXJhdGluZyBzeXN0ZW0gdmVyc2lvbnMgc3VwcG9ydGVkIGJ5IHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHN1cHBvcnRlZE9zVmVyc2lvbnM/OiBPU1ZlcnNpb25bXTtcblxuICAvKipcbiAgICogVGhlIHRhZ3MgdG8gYXBwbHkgdG8gdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhbiBFQzIgSW1hZ2UgQnVpbGRlciBjb21wb25lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBBUk4gaXMgYXV0b21hdGljYWxseSBjb25zdHJ1Y3RlZCBpZiBhIGNvbXBvbmVudE5hbWUgaXMgcHJvdmlkZWQsIG90aGVyd2lzZSBhIGNvbXBvbmVudEFybiBpc1xuICAgKiAgICAgICAgICAgIHJlcXVpcmVkXG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnRBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgbmFtZSBpcyBhdXRvbWF0aWNhbGx5IGNvbnN0cnVjdGVkIGlmIGEgY29tcG9uZW50QXJuIGlzIHByb3ZpZGVkLCBvdGhlcndpc2UgYSBjb21wb25lbnROYW1lIGlzXG4gICAqICAgICAgICAgICAgcmVxdWlyZWRcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudCwgeC54LnhcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudFZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYW4gRUMyIEltYWdlIEJ1aWxkZXIgQVdTIE1hcmtldHBsYWNlIGNvbXBvbmVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF3c01hcmtldHBsYWNlQ29tcG9uZW50QXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgQVdTIE1hcmtldHBsYWNlIGNvbXBvbmVudC4gVGhpcyBuYW1lIHNob3VsZCBleGNsdWRlIHRoZSBtYXJrZXRwbGFjZSBwcm9kdWN0IElEIGZyb20gaXRcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1hcmtldHBsYWNlIHByb2R1Y3QgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb21wb25lbnRcbiAgICovXG4gIHJlYWRvbmx5IG1hcmtldHBsYWNlUHJvZHVjdElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBBV1MgTWFya2V0cGxhY2UgY29tcG9uZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBjb21wb25lbnQsIHgueC54XG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnRWZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgb2YgYW4gRUMyIEltYWdlIEJ1aWxkZXIgQ29tcG9uZW50IERvY3VtZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RG9jdW1lbnQge1xuICAvKipcbiAgICogVGhlIHNjaGVtYSB2ZXJzaW9uIG9mIHRoZSBjb21wb25lbnRcbiAgICovXG4gIHJlYWRvbmx5IHNjaGVtYVZlcnNpb246IENvbXBvbmVudFNjaGVtYVZlcnNpb247XG5cbiAgLyoqXG4gICAqIFRoZSBwaGFzZXMgd2hpY2ggZGVmaW5lIHRoZSBncm91cGluZyBvZiBzdGVwcyB0byBydW4gaW4gdGhlIGJ1aWxkIGFuZCB0ZXN0IHdvcmtmbG93cyBvZiB0aGUgaW1hZ2UgYnVpbGQuXG4gICAqL1xuICByZWFkb25seSBwaGFzZXM6IENvbXBvbmVudERvY3VtZW50UGhhc2VbXTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGRvY3VtZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZG9jdW1lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25zdGFudHMgdG8gZGVmaW5lIGluIHRoZSBkb2N1bWVudFxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBjb25zdGFudHM/OiB7IFtjb25zdGFudE5hbWU6IHN0cmluZ106IENvbXBvbmVudENvbnN0YW50VmFsdWUgfTtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlcnMgdG8gZGVmaW5lIGluIHRoZSBkb2N1bWVudFxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJzPzogeyBbcGFyYW1ldGVyTmFtZTogc3RyaW5nXTogQ29tcG9uZW50RG9jdW1lbnRQYXJhbWV0ZXJEZWZpbml0aW9uIH07XG59XG5cbi8qKlxuICogVGhlIHBoYXNlIHRvIHJ1biBpbiBhIHNwZWNpZmljIHdvcmtmbG93IGluIGFuIGltYWdlIGJ1aWxkLCB3aGljaCBkZWZpbmUgdGhlIHN0ZXBzIHRvIGV4ZWN1dGUgdG8gY3VzdG9taXplIG9yIHRlc3RcbiAqIHRoZSBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREb2N1bWVudFBoYXNlIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBwaGFzZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogQ29tcG9uZW50UGhhc2VOYW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBzdGVwcyB0byBleGVjdXRlIHRvIG1vZGlmeSBvciB0ZXN0IHRoZSBidWlsZC90ZXN0IGluc3RhbmNlXG4gICAqL1xuICByZWFkb25seSBzdGVwczogQ29tcG9uZW50RG9jdW1lbnRTdGVwW107XG59XG5cbi8qKlxuICogVGhlIHN0ZXAgdG8gcnVuIGluIGEgc3BlY2lmaWMgcGhhc2Ugb2YgdGhlIGltYWdlIGJ1aWxkLCB3aGljaCBkZWZpbmVzIHRoZSBzdGVwIHRvIGV4ZWN1dGUgdG8gY3VzdG9taXplIG9yIHRlc3QgdGhlXG4gKiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREb2N1bWVudFN0ZXAge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHN0ZXBcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFjdGlvbiB0byBwZXJmb3JtIGluIHRoZSBzdGVwXG4gICAqL1xuICByZWFkb25seSBhY3Rpb246IENvbXBvbmVudEFjdGlvbjtcblxuICAvKipcbiAgICogQ29udGFpbnMgcGFyYW1ldGVycyByZXF1aXJlZCBieSB0aGUgYWN0aW9uIHRvIHJ1biB0aGUgc3RlcFxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS90b2UtYWN0aW9uLW1vZHVsZXMuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgaW5wdXRzOiBDb21wb25lbnRTdGVwSW5wdXRzO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZGl0aW9uIHRvIGFwcGx5IHRvIHRoZSBzdGVwLiBJZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlLCB0aGVuIHRoZSBzdGVwIGlzIHNraXBwZWRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBjb25kaXRpb24gaXMgYXBwbGllZCB0byB0aGUgc3RlcCBhbmQgaXQgZ2V0cyBleGVjdXRlZFxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS90b2UtY29uZGl0aW9uYWwtY29uc3RydWN0cy5odG1sXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL3RvZS1jb21wYXJpc29uLW9wZXJhdG9ycy5odG1sXG4gICAqL1xuICByZWFkb25seSBpZj86IENvbXBvbmVudFN0ZXBJZkNvbmRpdGlvbjtcblxuICAvKipcbiAgICogQSBsb29waW5nIGNvbnN0cnVjdCBkZWZpbmluZyBhIHJlcGVhdGVkIHNlcXVlbmNlIG9mIGluc3RydWN0aW9uc1xuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBsb29wPzogQ29tcG9uZW50RG9jdW1lbnRMb29wO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZW91dCBvZiB0aGUgc3RlcFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIDEyMCBtaW51dGVzXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0PzogY2RrLkR1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hhdCB0aGUgc3RlcCBzaG91bGQgZG8gaW4gY2FzZSBvZiBmYWlsdXJlXG4gICAqXG4gICAqIEBkZWZhdWx0IENvbXBvbmVudE9uRmFpbHVyZS5BQk9SVFxuICAgKi9cbiAgcmVhZG9ubHkgb25GYWlsdXJlPzogQ29tcG9uZW50T25GYWlsdXJlO1xufVxuXG4vKipcbiAqIFRoZSBsb29waW5nIGNvbnN0cnVjdCBvZiBhIGNvbXBvbmVudCBkZWZpbmVzIGEgcmVwZWF0ZWQgc2VxdWVuY2Ugb2YgaW5zdHJ1Y3Rpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RG9jdW1lbnRMb29wIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBsb29wLCB3aGljaCBjYW4gYmUgdXNlZCB0byByZWZlcmVuY2VcbiAgICpcbiAgICogQGRlZmF1bHQgbG9vcFxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZvciBsb29wIGl0ZXJhdGVzIG9uIGEgcmFuZ2Ugb2YgaW50ZWdlcnMgc3BlY2lmaWVkIHdpdGhpbiBhIGJvdW5kYXJ5IG91dGxpbmVkIGJ5IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZVxuICAgKiB2YXJpYWJsZXNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lIGlmIGBmb3JFYWNoYCBpcyBwcm92aWRlZC4gb3RoZXJ3aXNlLCBgZm9yYCBpcyByZXF1aXJlZC5cbiAgICovXG4gIHJlYWRvbmx5IGZvcj86IENvbXBvbmVudERvY3VtZW50Rm9yTG9vcDtcblxuICAvKipcbiAgICogVGhlIGZvckVhY2ggbG9vcCBpdGVyYXRlcyBvbiBhbiBleHBsaWNpdCBsaXN0IG9mIHZhbHVlcywgd2hpY2ggY2FuIGJlIHN0cmluZ3MgYW5kIGNoYWluZWQgZXhwcmVzc2lvbnNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lIGlmIGBmb3JgIGlzIHByb3ZpZGVkLiBvdGhlcndpc2UsIGBmb3JFYWNoYCBpcyByZXF1aXJlZC5cbiAgICovXG4gIHJlYWRvbmx5IGZvckVhY2g/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUaGUgZm9yIGxvb3AgaXRlcmF0ZXMgb24gYSByYW5nZSBvZiBpbnRlZ2VycyBzcGVjaWZpZWQgd2l0aGluIGEgYm91bmRhcnkgb3V0bGluZWQgYnkgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlXG4gKiB2YXJpYWJsZXMuIFRoZSBpdGVyYXRpbmcgdmFsdWVzIGFyZSBpbiB0aGUgc2V0IFtzdGFydCwgZW5kXSBhbmQgaW5jbHVkZXMgYm91bmRhcnkgdmFsdWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERvY3VtZW50Rm9yTG9vcCB7XG4gIC8qKlxuICAgKiBTdGFydGluZyB2YWx1ZSBvZiBpdGVyYXRpb24uIERvZXMgbm90IGFjY2VwdCBjaGFpbmluZyBleHByZXNzaW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0OiBudW1iZXI7XG4gIC8qKlxuICAgKiBFbmRpbmcgdmFsdWUgb2YgaXRlcmF0aW9uLiBEb2VzIG5vdCBhY2NlcHQgY2hhaW5pbmcgZXhwcmVzc2lvbnMuXG4gICAqL1xuICByZWFkb25seSBlbmQ6IG51bWJlcjtcbiAgLyoqXG4gICAqIERpZmZlcmVuY2UgYnkgd2hpY2ggYW4gaXRlcmF0aW5nIHZhbHVlIGlzIHVwZGF0ZWQgdGhyb3VnaCBhZGRpdGlvbi4gSXQgbXVzdCBiZSBhIG5lZ2F0aXZlIG9yIHBvc2l0aXZlIG5vbi16ZXJvXG4gICAqIHZhbHVlLiBEb2VzIG5vdCBhY2NlcHQgY2hhaW5pbmcgZXhwcmVzc2lvbnMuXG4gICAqL1xuICByZWFkb25seSB1cGRhdGVCeTogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSB2YWx1ZSBvZiBhIGNvbnN0YW50IGluIGEgY29tcG9uZW50IGRvY3VtZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRDb25zdGFudFZhbHVlIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzdHJpbmcgdHlwZSBjb25zdGFudCBpbiBhIGNvbXBvbmVudCBkb2N1bWVudFxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBjb25zdGFudFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tU3RyaW5nKHZhbHVlOiBzdHJpbmcpOiBDb21wb25lbnRDb25zdGFudFZhbHVlIHtcbiAgICByZXR1cm4gbmV3IENvbXBvbmVudENvbnN0YW50VmFsdWUoJ3N0cmluZycsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGF0YSB0eXBlIG9mIHRoZSBjb25zdGFudFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBjb25zdGFudFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBhbnk7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHR5cGU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogVGhlIGRlZmluaXRpb24gb2YgdGhlIHBhcmFtZXRlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERvY3VtZW50UGFyYW1ldGVyRGVmaW5pdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgcGFyYW1ldGVyXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBDb21wb25lbnRQYXJhbWV0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZSwgaW5kaWNhdGluZyB0aGUgcGFyYW1ldGVyIGlzIHJlcXVpcmVkXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0PzogYW55O1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIHBhcmFtZXRlclxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgYWN0aW9uIGZvciBhIHN0ZXAgd2l0aGluIHRoZSBjb21wb25lbnQgZG9jdW1lbnRcbiAqL1xuZXhwb3J0IGVudW0gQ29tcG9uZW50QWN0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBBcHBlbmRGaWxlIGFjdGlvbiBhZGRzIHRoZSBwcm92aWRlZCBjb250ZW50IHRvIHRoZSBwcmUtZXhpc3RpbmcgY29udGVudCBvZiBhIGZpbGVcbiAgICovXG4gIEFQUEVORF9GSUxFID0gJ0FwcGVuZEZpbGUnLFxuXG4gIC8qKlxuICAgKiBUaGUgQXNzZXJ0IGFjdGlvbiBwZXJmb3JtcyB2YWx1ZSB3aXRoIGNvbXBhcmlzb24vbG9naWMgb3BlcmF0b3JzLCBhbmQgc3VjY2VlZHMvZmFpbHMgdGhlIHN0ZXAgYmFzZWQgb24gdGhlIG91dGNvbWVcbiAgICogb2YgdGhlIGFzc2VydGlvblxuICAgKi9cbiAgQVNTRVJUID0gJ0Fzc2VydCcsXG5cbiAgLyoqXG4gICAqIFRoZSBDb3B5RmlsZSBhY3Rpb24gY29waWVzIGZpbGVzIGZyb20gYSBzb3VyY2UgZmlsZSB0byBhIGRlc3RpbmF0aW9uXG4gICAqL1xuICBDT1BZX0ZJTEUgPSAnQ29weUZpbGUnLFxuXG4gIC8qKlxuICAgKiBUaGUgQ29weUZvbGRlciBhY3Rpb24gY29waWVzIGZvbGRlcnMgZnJvbSBhIHNvdXJjZSB0byBhIGRlc3RpbmF0aW9uXG4gICAqL1xuICBDT1BZX0ZPTERFUiA9ICdDb3B5Rm9sZGVyJyxcblxuICAvKipcbiAgICogVGhlIENyZWF0ZUZpbGUgYWN0aW9uIGNyZWF0ZXMgYSBmaWxlIGluIHRoZSBwcm92aWRlZCBsb2NhdGlvblxuICAgKi9cbiAgQ1JFQVRFX0ZJTEUgPSAnQ3JlYXRlRmlsZScsXG5cbiAgLyoqXG4gICAqIFRoZSBDcmVhdGVGb2xkZXIgYWN0aW9uIGNyZWF0ZXMgYSBmb2xkZXIgaW4gdGhlIHByb3ZpZGVkIGxvY2F0aW9uXG4gICAqL1xuICBDUkVBVEVfRk9MREVSID0gJ0NyZWF0ZUZvbGRlcicsXG5cbiAgLyoqXG4gICAqIFRoZSBDcmVhdGVTeW1saW5rIGFjdGlvbiBjcmVhdGVzIHN5bWJvbGljIGxpbmtzIGZyb20gYSBnaXZlbiBwYXRoIHRvIGEgdGFyZ2V0XG4gICAqL1xuICBDUkVBVEVfU1lNTElOSyA9ICdDcmVhdGVTeW1saW5rJyxcblxuICAvKipcbiAgICogVGhlIERlbGV0ZUZpbGUgYWN0aW9uIGRlbGV0ZXMgZmlsZShzKSBpbiB0aGUgcHJvdmlkZWQgbG9jYXRpb25cbiAgICovXG4gIERFTEVURV9GSUxFID0gJ0RlbGV0ZUZpbGUnLFxuXG4gIC8qKlxuICAgKiBUaGUgRGVsZXRlRm9sZGVyIGFjdGlvbiBkZWxldGVzIGZvbGRlcnMgaW4gdGhlIHByb3ZpZGVkIGxvY2F0aW9uXG4gICAqL1xuICBERUxFVEVfRk9MREVSID0gJ0RlbGV0ZUZvbGRlcicsXG5cbiAgLyoqXG4gICAqIFRoZSBFeGVjdXRlQmFzaCBhY3Rpb24gcnVucyBiYXNoIHNjcmlwdHMgd2l0aCBpbmxpbmUgYmFzaCBjb21tYW5kc1xuICAgKi9cbiAgRVhFQ1VURV9CQVNIID0gJ0V4ZWN1dGVCYXNoJyxcblxuICAvKipcbiAgICogVGhlIEV4ZWN1dGVCaW5hcnkgYWN0aW9uIHJ1bnMgYSBwcm92aWRlZCBiaW5hcnkgZXhlY3V0YWJsZVxuICAgKi9cbiAgRVhFQ1VURV9CSU5BUlkgPSAnRXhlY3V0ZUJpbmFyeScsXG5cbiAgLyoqXG4gICAqIFRoZSBFeGVjdXRlRG9jdW1lbnQgYWN0aW9uIGFsbG93cyBydW5uaW5nIG90aGVyIGNvbXBvbmVudCBkb2N1bWVudHMgZnJvbSB3aXRoaW4gYSBnaXZlbiBjb21wb25lbnRcbiAgICovXG4gIEVYRUNVVEVfRE9DVU1FTlQgPSAnRXhlY3V0ZURvY3VtZW50JyxcblxuICAvKipcbiAgICogVGhlIEV4ZWN1dGVQb3dlcnNoZWxsIGFjdGlvbiBydW5zIFBvd2VyU2hlbGwgc2NyaXB0cyB3aXRoIGlubGluZSBQb3dlclNoZWxsIGNvbW1hbmRzXG4gICAqL1xuICBFWEVDVVRFX1BPV0VSU0hFTEwgPSAnRXhlY3V0ZVBvd2VyU2hlbGwnLFxuXG4gIC8qKlxuICAgKiBUaGUgSW5zdGFsbE1TSSBhY3Rpb24gcnVucyBhIFdpbmRvd3MgYXBwbGljYXRpb24gd2l0aCB0aGUgcHJvdmlkZWQgTVNJIGZpbGVcbiAgICovXG4gIElOU1RBTExfTVNJID0gJ0luc3RhbGxNU0knLFxuXG4gIC8qKlxuICAgKiBUaGUgTGlzdEZpbGVzIGFjdGlvbiBsaXN0cyBmaWxlcyBpbiB0aGUgcHJvdmlkZWQgZm9sZGVyXG4gICAqL1xuICBMSVNUX0ZJTEVTID0gJ0xpc3RGaWxlcycsXG5cbiAgLyoqXG4gICAqIFRoZSBNb3ZlRmlsZSBhY3Rpb24gbW92ZXMgZmlsZXMgZnJvbSBhIHNvdXJjZSB0byBhIGRlc3RpbmF0aW9uXG4gICAqL1xuICBNT1ZFX0ZJTEUgPSAnTW92ZUZpbGUnLFxuXG4gIC8qKlxuICAgKiBUaGUgTW92ZUZvbGRlciBhY3Rpb24gbW92ZXMgZm9sZGVycyBmcm9tIGEgc291cmNlIHRvIGEgZGVzdGluYXRpb25cbiAgICovXG4gIE1PVkVfRk9MREVSID0gJ01vdmVGb2xkZXInLFxuXG4gIC8qKlxuICAgKiBUaGUgUmVhZEZpbGUgYWN0aW9uIHJlYWRzIHRoZSBjb250ZW50IG9mIGEgdGV4dCBmaWxlXG4gICAqL1xuICBSRUFEX0ZJTEUgPSAnUmVhZEZpbGUnLFxuXG4gIC8qKlxuICAgKiBUaGUgUmVib290IGFjdGlvbiByZWJvb3RzIHRoZSBpbnN0YW5jZVxuICAgKi9cbiAgUkVCT09UID0gJ1JlYm9vdCcsXG5cbiAgLyoqXG4gICAqIFRoZSBTZXRGaWxlRW5jb2RpbmcgYWN0aW9uIG1vZGlmaWVzIHRoZSBlbmNvZGluZyBwcm9wZXJ0eSBvZiBhbiBleGlzdGluZyBmaWxlXG4gICAqL1xuICBTRVRfRklMRV9FTkNPRElORyA9ICdTZXRGaWxlRW5jb2RpbmcnLFxuXG4gIC8qKlxuICAgKiBUaGUgU2V0RmlsZU93bmVyIGFjdGlvbiBtb2RpZmllcyB0aGUgb3duZXIgYW5kIGdyb3VwIG93bmVyc2hpcCBwcm9wZXJ0aWVzIG9mIGFuIGV4aXN0aW5nIGZpbGVcbiAgICovXG4gIFNFVF9GSUxFX09XTkVSID0gJ1NldEZpbGVPd25lcicsXG5cbiAgLyoqXG4gICAqIFRoZSBTZXRGb2xkZXJPd25lciBhY3Rpb24gcmVjdXJzaXZlbHkgbW9kaWZpZXMgdGhlIG93bmVyIGFuZCBncm91cCBvd25lcnNoaXAgcHJvcGVydGllcyBvZiBhbiBleGlzdGluZyBmb2xkZXJcbiAgICovXG4gIFNFVF9GT0xERVJfT1dORVIgPSAnU2V0Rm9sZGVyT3duZXInLFxuXG4gIC8qKlxuICAgKiBUaGUgU2V0RmlsZVBlcm1pc3Npb25zIGFjdGlvbiBtb2RpZmllcyB0aGUgcGVybWlzc2lvbiBvZiBhbiBleGlzdGluZyBmaWxlXG4gICAqL1xuICBTRVRfRklMRV9QRVJNSVNTSU9OUyA9ICdTZXRGaWxlUGVybWlzc2lvbnMnLFxuXG4gIC8qKlxuICAgKiBUaGUgU2V0Rm9sZGVyUGVybWlzc2lvbnMgYWN0aW9uIHJlY3Vyc2l2ZWx5IG1vZGlmaWVzIHRoZSBwZXJtaXNzaW9ucyBvZiBhbiBleGlzdGluZyBmb2xkZXIgYW5kIGFsbCBvZiBpdHMgc3ViZmlsZXNcbiAgICogYW5kIHN1YmZvbGRlcnNcbiAgICovXG4gIFNFVF9GT0xERVJfUEVSTUlTU0lPTlMgPSAnU2V0Rm9sZGVyUGVybWlzc2lvbnMnLFxuXG4gIC8qKlxuICAgKiBUaGUgU2V0UmVnaXN0cnkgYWN0aW9uIHNldHMgdGhlIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIFdpbmRvd3MgcmVnaXN0cnkga2V5XG4gICAqL1xuICBTRVRfUkVHSVNUUlkgPSAnU2V0UmVnaXN0cnknLFxuXG4gIC8qKlxuICAgKiBUaGUgUzNEb3dubG9hZCBhY3Rpb24gZG93bmxvYWRzIGFuIEFtYXpvbiBTMyBvYmplY3QvZm9sZGVyIHRvIGEgbG9jYWwgZGVzdGluYXRpb25cbiAgICovXG4gIFMzX0RPV05MT0FEID0gJ1MzRG93bmxvYWQnLFxuXG4gIC8qKlxuICAgKiBUaGUgUzNVcGxvYWQgYWN0aW9uIHVwbG9hZHMgYSBmaWxlIG9yIGZvbGRlciB0byBhbiBBbWF6b24gUzMgbG9jYXRpb25cbiAgICovXG4gIFMzX1VQTE9BRCA9ICdTM1VwbG9hZCcsXG5cbiAgLyoqXG4gICAqIFRoZSBVbmluc3RhbGxNU0kgYWN0aW9uIHJlbW92ZXMgYSBXaW5kb3dzIGFwcGxpY2F0aW9uIHVzaW5nIGFuIE1TSSBmaWxlXG4gICAqL1xuICBVTklOU1RBTExfTVNJID0gJ1VuaW5zdGFsbE1TSScsXG5cbiAgLyoqXG4gICAqIFRoZSBVcGRhdGVPUyBhY3Rpb24gaW5zdGFsbHMgT1MgdXBkYXRlc1xuICAgKi9cbiAgVVBEQVRFX09TID0gJ1VwZGF0ZU9TJyxcblxuICAvKipcbiAgICogVGhlIFdlYkRvd25sb2FkIGFjdGlvbiBkb3dubG9hZHMgZmlsZXMgZnJvbSBhIFVSTCB0byBhIGxvY2FsIGRlc3RpbmF0aW9uXG4gICAqL1xuICBXRUJfRE9XTkxPQUQgPSAnV2ViRG93bmxvYWQnLFxufVxuXG4vKipcbiAqIFNwZWNpZmllcyB3aGF0IHRoZSBzdGVwIHNob3VsZCBkbyBpbiBjYXNlIG9mIGZhaWx1cmVcbiAqL1xuZXhwb3J0IGVudW0gQ29tcG9uZW50T25GYWlsdXJlIHtcbiAgLyoqXG4gICAqIEZhaWxzIHRoZSBzdGVwIGFuZCBkb2N1bWVudCBleGVjdXRpb25cbiAgICovXG4gIEFCT1JUID0gJ0Fib3J0JyxcblxuICAvKipcbiAgICogRmFpbHMgdGhlIHN0ZXAgYW5kIHByb2NlZWRzIHRvIGV4ZWN1dGUgdGhlIG5leHQgc3RlcCBpbiB0aGUgZG9jdW1lbnRcbiAgICovXG4gIENPTlRJTlVFID0gJ0NvbnRpbnVlJyxcblxuICAvKipcbiAgICogSWdub3JlcyB0aGUgc3RlcCBhbmQgcHJvY2VlZHMgdG8gZXhlY3V0ZSB0aGUgbmV4dCBzdGVwIGluIHRoZSBkb2N1bWVudFxuICAgKi9cbiAgSUdOT1JFID0gJ0lnbm9yZScsXG59XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlciB0eXBlIGluIGEgY29tcG9uZW50IGRvY3VtZW50XG4gKi9cbmV4cG9ydCBlbnVtIENvbXBvbmVudFBhcmFtZXRlclR5cGUge1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBwYXJhbWV0ZXIgdmFsdWUgaXMgYSBzdHJpbmdcbiAgICovXG4gIFNUUklORyA9ICdzdHJpbmcnLFxufVxuXG4vKipcbiAqIFRoZSBwaGFzZXMgb2YgYSBjb21wb25lbnQgZG9jdW1lbnRcbiAqL1xuZXhwb3J0IGVudW0gQ29tcG9uZW50UGhhc2VOYW1lIHtcbiAgLyoqXG4gICAqIEJ1aWxkIHBoYXNlIG9mIHRoZSBjb21wb25lbnQuIFRoaXMgcGhhc2UgaXMgcnVuIGR1cmluZyB0aGUgQlVJTERJTkcgcGhhc2Ugb2YgdGhlIGltYWdlIGJ1aWxkLlxuICAgKi9cbiAgQlVJTEQgPSAnYnVpbGQnLFxuXG4gIC8qKlxuICAgKiBUZXN0IHBoYXNlIG9mIHRoZSBjb21wb25lbnQsIGV4ZWN1dGVkIGRpcmVjdGx5IG9uIHRoZSBpbnN0YW5jZSB3aGljaCBpcyB1c2VkIHRvIGJ1aWxkIHRoZSBjb250YWluZXIgaW1hZ2UuIFRoaXNcbiAgICogcGhhc2UgaXMgcnVuIGR1cmluZyB0aGUgVEVTVElORyBwaGFzZSBvZiB0aGUgaW1hZ2UgYnVpbGQuXG4gICAqL1xuICBDT05UQUlORVJfSE9TVF9URVNUID0gJ2NvbnRhaW5lci1ob3N0LXRlc3QnLFxuXG4gIC8qKlxuICAgKiBUZXN0IHBoYXNlIG9mIHRoZSBjb21wb25lbnQuIFRoaXMgcGhhc2UgaXMgcnVuIGR1cmluZyB0aGUgVEVTVElORyBwaGFzZSBvZiB0aGUgaW1hZ2UgYnVpbGQuXG4gICAqL1xuICBURVNUID0gJ3Rlc3QnLFxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBwaGFzZSBvZiB0aGUgY29tcG9uZW50LiBUaGlzIHBoYXNlIGlzIHJ1biBkdXJpbmcgdGhlIEJVSUxESU5HIHBoYXNlIG9mIHRoZSBpbWFnZSBidWlsZCwgYWZ0ZXIgdGhlIGJ1aWxkXG4gICAqIHN0ZXAgb2YgdGhlIGNvbXBvbmVudCBpcyBleGVjdXRlZC5cbiAgICovXG4gIFZBTElEQVRFID0gJ3ZhbGlkYXRlJyxcbn1cblxuLyoqXG4gKiBUaGUgc2NoZW1hIHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudFxuICovXG5leHBvcnQgZW51bSBDb21wb25lbnRTY2hlbWFWZXJzaW9uIHtcbiAgLyoqXG4gICAqIFNjaGVtYSB2ZXJzaW9uIDEuMCBmb3IgdGhlIGNvbXBvbmVudCBkb2N1bWVudFxuICAgKi9cbiAgVjFfMCA9ICcxLjAnLFxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGlucHV0cyBmb3IgYSBzdGVwIGluIHRoZSBjb21wb25lbnQgZG9jdW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIENvbXBvbmVudFN0ZXBJbnB1dHMge1xuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgaW5wdXQgdmFsdWUgZnJvbSBhbiBvYmplY3QsIGZvciB0aGUgY29tcG9uZW50IHN0ZXBcbiAgICpcbiAgICogQHBhcmFtIGlucHV0c09iamVjdCBUaGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGlucHV0IHZhbHVlc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tT2JqZWN0KGlucHV0c09iamVjdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IENvbXBvbmVudFN0ZXBJbnB1dHMge1xuICAgIHJldHVybiBuZXcgQ29tcG9uZW50U3RlcElucHV0cyhpbnB1dHNPYmplY3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIGlucHV0IHZhbHVlIGZyb20gYSBsaXN0IG9mIGlucHV0IG9iamVjdHMsIGZvciB0aGUgY29tcG9uZW50IHN0ZXBcbiAgICpcbiAgICogQHBhcmFtIGlucHV0c09iamVjdExpc3QgVGhlIGxpc3Qgb2Ygb2JqZWN0cyBjb250YWluaW5nIHRoZSBpbnB1dCB2YWx1ZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUxpc3QoaW5wdXRzT2JqZWN0TGlzdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfVtdKTogQ29tcG9uZW50U3RlcElucHV0cyB7XG4gICAgcmV0dXJuIG5ldyBDb21wb25lbnRTdGVwSW5wdXRzKGlucHV0c09iamVjdExpc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCBpbnB1dCB2YWx1ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlucHV0czogYW55O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihpbnB1dDogYW55KSB7XG4gICAgdGhpcy5pbnB1dHMgPSBpbnB1dDtcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gYGlmYCBjb25kaXRpb24gaW4gdGhlIGNvbXBvbmVudCBkb2N1bWVudFxuICovXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50U3RlcElmQ29uZGl0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIGBpZmAgdmFsdWUgZnJvbSBhbiBvYmplY3QsIGZvciB0aGUgY29tcG9uZW50IHN0ZXBcbiAgICpcbiAgICogQHBhcmFtIGlmT2JqZWN0IFRoZSBvYmplY3QgY29udGFpbmluZyB0aGUgYGlmYCBjb25kaXRpb25cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbU9iamVjdChpZk9iamVjdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IENvbXBvbmVudFN0ZXBJZkNvbmRpdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDb21wb25lbnRTdGVwSWZDb25kaXRpb24oaWZPYmplY3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCBpbnB1dCB2YWx1ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlmQ29uZGl0aW9uOiBhbnk7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGlmQ29uZGl0aW9uOiBhbnkpIHtcbiAgICB0aGlzLmlmQ29uZGl0aW9uID0gaWZDb25kaXRpb247XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgcmVuZGVyZWQgY29tcG9uZW50IGRhdGEgdmFsdWUsIGZvciB1c2UgaW4gQ2xvdWRGb3JtYXRpb24uXG4gKiAtIEZvciBpbmxpbmUgY29tcG9uZW50cywgZGF0YSBpcyB0aGUgY29tcG9uZW50IHRleHRcbiAqIC0gRm9yIFMzLWJhY2tlZCBjb21wb25lbnRzLCB1cmkgaXMgdGhlIFMzIFVSTFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERhdGFDb25maWcge1xuICAvKipcbiAgICogVGhlIHJlbmRlcmVkIGNvbXBvbmVudCBkYXRhLCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZSBpZiB1cmkgaXMgc2V0XG4gICAqL1xuICByZWFkb25seSBkYXRhPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVuZGVyZWQgY29tcG9uZW50IGRhdGEgVVJJLCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZSBpZiBkYXRhIGlzIHNldFxuICAgKi9cbiAgcmVhZG9ubHkgdXJpPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3IgcmVmZXJlbmNpbmcgYW5kIHVwbG9hZGluZyBjb21wb25lbnQgZGF0YVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29tcG9uZW50RGF0YSB7XG4gIC8qKlxuICAgKiBVcGxvYWRzIGNvbXBvbmVudCBkYXRhIGZyb20gYSBsb2NhbCBmaWxlIHRvIFMzIHRvIHVzZSBhcyB0aGUgY29tcG9uZW50IGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIElkZW50aWZpZXIgb2YgdGhlIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gcGF0aCBUaGUgbG9jYWwgcGF0aCB0byB0aGUgY29tcG9uZW50IGRhdGEgZmlsZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBTMyBhc3NldCB1cGxvYWQgb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQXNzZXQoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBvcHRpb25zOiBzM2Fzc2V0cy5Bc3NldE9wdGlvbnMgPSB7fSxcbiAgKTogUzNDb21wb25lbnREYXRhIHtcbiAgICBjb25zdCBhc3NldCA9IG5ldyBzM2Fzc2V0cy5Bc3NldChzY29wZSwgaWQsIHsgLi4ub3B0aW9ucywgcGF0aCB9KTtcbiAgICByZXR1cm4gbmV3IFMzQ29tcG9uZW50RGF0YUZyb21Bc3NldChhc3NldCk7XG4gIH1cblxuICAvKipcbiAgICogUmVmZXJlbmNlcyBjb21wb25lbnQgZGF0YSBmcm9tIGEgcHJlLWV4aXN0aW5nIFMzIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0gYnVja2V0IFRoZSBTMyBidWNrZXQgd2hlcmUgdGhlIGNvbXBvbmVudCBkYXRhIGlzIHN0b3JlZFxuICAgKiBAcGFyYW0ga2V5IFRoZSBTMyBrZXkgb2YgdGhlIGNvbXBvbmVudCBkYXRhIGZpbGVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVMzKGJ1Y2tldDogczMuSUJ1Y2tldCwga2V5OiBzdHJpbmcpOiBTM0NvbXBvbmVudERhdGEge1xuICAgIHJldHVybiBuZXcgUzNDb21wb25lbnREYXRhRnJvbUJ1Y2tldEtleShidWNrZXQsIGtleSk7XG4gIH1cblxuICAvKipcbiAgICogVXNlcyBhbiBpbmxpbmUgSlNPTiBvYmplY3QgYXMgdGhlIGNvbXBvbmVudCBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIEFuIGlubGluZSBKU09OIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGNvbXBvbmVudCBkYXRhXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Kc29uT2JqZWN0KGRhdGE6IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBDb21wb25lbnREYXRhIHtcbiAgICBjb25zdCBpbmxpbmVEYXRhID0geWFtbC5zdHJpbmdpZnkoZGF0YSwgeyBpbmRlbnQ6IDIgfSk7XG4gICAgcmV0dXJuIG5ldyBJbmxpbmVDb21wb25lbnREYXRhKGlubGluZURhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZXMgYW4gaW5saW5lIEpTT04gb2JqZWN0IGFzIHRoZSBjb21wb25lbnQgZGF0YSwgdXNpbmcgdGhlIENvbXBvbmVudERvY3VtZW50IGludGVyZmFjZVxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBBbiBpbmxpbmUgSlNPTiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjb21wb25lbnQgZGF0YVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ29tcG9uZW50RG9jdW1lbnRKc29uT2JqZWN0KGRhdGE6IENvbXBvbmVudERvY3VtZW50KTogQ29tcG9uZW50RGF0YSB7XG4gICAgY29uc3QgeyBuYW1lLCBkZXNjcmlwdGlvbiwgc2NoZW1hVmVyc2lvbiwgY29uc3RhbnRzLCBwYXJhbWV0ZXJzLCBwaGFzZXMgfSA9IGRhdGE7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUpzb25PYmplY3Qoe1xuICAgICAgLi4uKG5hbWUgIT09IHVuZGVmaW5lZCAmJiB7IG5hbWUgfSksXG4gICAgICAuLi4oZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgc2NoZW1hVmVyc2lvbjogc2NoZW1hVmVyc2lvbixcbiAgICAgIC4uLihjb25zdGFudHMgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgIGNvbnN0YW50czogT2JqZWN0LmVudHJpZXMoY29uc3RhbnRzKS5tYXAoKFtjb25zdGFudE5hbWUsIHZhbHVlXSkgPT4gKHtcbiAgICAgICAgICBbY29uc3RhbnROYW1lXTogeyB0eXBlOiB2YWx1ZS50eXBlLCB2YWx1ZTogdmFsdWUudmFsdWUgfSxcbiAgICAgICAgfSkpLFxuICAgICAgfSksXG4gICAgICAuLi4ocGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgcGFyYW1ldGVyczogT2JqZWN0LmVudHJpZXMocGFyYW1ldGVycykubWFwKChbcGFyYW1ldGVyTmFtZSwgdmFsdWVdKSA9PiAoeyBbcGFyYW1ldGVyTmFtZV06IHZhbHVlIH0pKSxcbiAgICAgIH0pLFxuICAgICAgcGhhc2VzOiBwaGFzZXMubWFwKChwaGFzZSkgPT4gKHtcbiAgICAgICAgbmFtZTogcGhhc2UubmFtZSxcbiAgICAgICAgc3RlcHM6IHBoYXNlLnN0ZXBzLm1hcCgoc3RlcCkgPT4gKHtcbiAgICAgICAgICBuYW1lOiBzdGVwLm5hbWUsXG4gICAgICAgICAgYWN0aW9uOiBzdGVwLmFjdGlvbixcbiAgICAgICAgICAuLi4oc3RlcC5vbkZhaWx1cmUgIT09IHVuZGVmaW5lZCAmJiB7IG9uRmFpbHVyZTogc3RlcC5vbkZhaWx1cmUgfSksXG4gICAgICAgICAgLi4uKHN0ZXAudGltZW91dCAhPT0gdW5kZWZpbmVkICYmIHsgdGltZW91dFNlY29uZHM6IHN0ZXAudGltZW91dC50b1NlY29uZHMoKSB9KSxcbiAgICAgICAgICAuLi4oc3RlcC5pZiAhPT0gdW5kZWZpbmVkICYmIHsgaWY6IHN0ZXAuaWYuaWZDb25kaXRpb24gfSksXG4gICAgICAgICAgLi4uKHN0ZXAubG9vcCAhPT0gdW5kZWZpbmVkICYmIHsgbG9vcDogc3RlcC5sb29wIH0pLFxuICAgICAgICAgIGlucHV0czogc3RlcC5pbnB1dHMuaW5wdXRzLFxuICAgICAgICB9KSksXG4gICAgICB9KSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXNlcyBhbiBpbmxpbmUgSlNPTi9ZQU1MIHN0cmluZyBhcyB0aGUgY29tcG9uZW50IGRhdGFcbiAgICpcbiAgICogQHBhcmFtIGRhdGEgQW4gaW5saW5lIEpTT04vWUFNTCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjb21wb25lbnQgZGF0YVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tSW5saW5lKGRhdGE6IHN0cmluZyk6IENvbXBvbmVudERhdGEge1xuICAgIHJldHVybiBuZXcgSW5saW5lQ29tcG9uZW50RGF0YShkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVuZGVyZWQgY29tcG9uZW50IGRhdGEgdmFsdWUsIGZvciB1c2UgaW4gQ2xvdWRGb3JtYXRpb24uXG4gICAqIC0gRm9yIGlubGluZSBjb21wb25lbnRzLCBkYXRhIGlzIHRoZSBjb21wb25lbnQgdGV4dFxuICAgKiAtIEZvciBTMy1iYWNrZWQgY29tcG9uZW50cywgdXJpIGlzIHRoZSBTMyBVUkxcbiAgICovXG4gIGFic3RyYWN0IHJlbmRlcigpOiBDb21wb25lbnREYXRhQ29uZmlnO1xufVxuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3IgUzMtYmFzZWQgY29tcG9uZW50IGRhdGEgcmVmZXJlbmNlcywgY29udGFpbmluZyBhZGRpdGlvbmFsIHBlcm1pc3Npb24gZ3JhbnQgbWV0aG9kcyBvbiB0aGUgUzMgb2JqZWN0XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTM0NvbXBvbmVudERhdGEgZXh0ZW5kcyBDb21wb25lbnREYXRhIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGJ1Y2tldDogczMuSUJ1Y2tldDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihidWNrZXQ6IHMzLklCdWNrZXQsIGtleTogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuYnVja2V0ID0gYnVja2V0O1xuICAgIHRoaXMua2V5ID0ga2V5O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCBjb21wb25lbnQgZGF0YSB0ZXh0LCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyKCk6IENvbXBvbmVudERhdGFDb25maWcge1xuICAgIHJldHVybiB7IHVyaTogdGhpcy5idWNrZXQuczNVcmxGb3JPYmplY3QodGhpcy5rZXkpIH07XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcHV0IHBlcm1pc3Npb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgY29tcG9uZW50IGRhdGEgaW4gUzNcbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKi9cbiAgcHVibGljIGdyYW50UHV0KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQuZ3JhbnRQdXQoZ3JhbnRlZSwgdGhpcy5rZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBjb21wb25lbnQgZGF0YSBpbiBTM1xuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQuZ3JhbnRSZWFkKGdyYW50ZWUsIHRoaXMua2V5KTtcbiAgfVxufVxuXG5jbGFzcyBJbmxpbmVDb21wb25lbnREYXRhIGV4dGVuZHMgQ29tcG9uZW50RGF0YSB7XG4gIHByb3RlY3RlZCByZWFkb25seSBkYXRhOiBzdHJpbmc7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGRhdGE6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCBjb21wb25lbnQgZGF0YSB0ZXh0LCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyKCk6IENvbXBvbmVudERhdGFDb25maWcge1xuICAgIHJldHVybiB7IGRhdGE6IHRoaXMuZGF0YSB9O1xuICB9XG59XG5cbmNsYXNzIFMzQ29tcG9uZW50RGF0YUZyb21CdWNrZXRLZXkgZXh0ZW5kcyBTM0NvbXBvbmVudERhdGEge1xuICBwdWJsaWMgY29uc3RydWN0b3IoYnVja2V0OiBzMy5JQnVja2V0LCBrZXk6IHN0cmluZykge1xuICAgIHN1cGVyKGJ1Y2tldCwga2V5KTtcbiAgfVxufVxuXG5jbGFzcyBTM0NvbXBvbmVudERhdGFGcm9tQXNzZXQgZXh0ZW5kcyBTM0NvbXBvbmVudERhdGEge1xuICBwdWJsaWMgY29uc3RydWN0b3IoYXNzZXQ6IHMzYXNzZXRzLkFzc2V0KSB7XG4gICAgc3VwZXIoYXNzZXQuYnVja2V0LCBhc3NldC5zM09iamVjdEtleSk7XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIHdvcmtpbmcgd2l0aCBBV1MgTWFya2V0cGxhY2UgY29tcG9uZW50c1xuICovXG5leHBvcnQgY2xhc3MgQXdzTWFya2V0cGxhY2VDb21wb25lbnQge1xuICAvKipcbiAgICogSW1wb3J0cyBhbiBBV1MgTWFya2V0cGxhY2UgY29tcG9uZW50IGZyb20gaXRzIGF0dHJpYnV0ZXNcbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIElkZW50aWZpZXIgb2YgdGhlIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gYXR0cnMgVGhlIEFXUy1tYW5hZ2VkIGNvbXBvbmVudCBhdHRyaWJ1dGVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Bd3NNYXJrZXRwbGFjZUNvbXBvbmVudEF0dHJpYnV0ZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGF0dHJzOiBBd3NNYXJrZXRwbGFjZUNvbXBvbmVudEF0dHJpYnV0ZXMsXG4gICk6IElDb21wb25lbnQge1xuICAgIHJldHVybiBDb21wb25lbnQuZnJvbUNvbXBvbmVudEFybihcbiAgICAgIHNjb3BlLFxuICAgICAgaWQsXG4gICAgICBjZGsuU3RhY2sub2Yoc2NvcGUpLmZvcm1hdEFybih7XG4gICAgICAgIHNlcnZpY2U6ICdpbWFnZWJ1aWxkZXInLFxuICAgICAgICBhY2NvdW50OiAnYXdzLW1hcmtldHBsYWNlJyxcbiAgICAgICAgcmVzb3VyY2U6ICdjb21wb25lbnQnLFxuICAgICAgICByZXNvdXJjZU5hbWU6IGAke2F0dHJzLmNvbXBvbmVudE5hbWV9LSR7YXR0cnMubWFya2V0cGxhY2VQcm9kdWN0SWR9LyR7YXR0cnMuY29tcG9uZW50VmVyc2lvbiA/PyBMQVRFU1RfVkVSU0lPTn1gLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgbmV3IG9yIGltcG9ydGVkIENvbXBvbmVudFxuICovXG5hYnN0cmFjdCBjbGFzcyBDb21wb25lbnRCYXNlIGV4dGVuZHMgY2RrLlJlc291cmNlIGltcGxlbWVudHMgSUNvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb21wb25lbnRcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGNvbXBvbmVudEFybjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgY29tcG9uZW50TmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFudCBjdXN0b20gYWN0aW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqIEBwYXJhbSBhY3Rpb25zIFRoZSBsaXN0IG9mIGFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZSxcbiAgICAgIGFjdGlvbnMsXG4gICAgICByZXNvdXJjZUFybnM6IFt0aGlzLmNvbXBvbmVudEFybl0sXG4gICAgICBzY29wZTogdGhpcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkIHBlcm1pc3Npb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICovXG4gIHB1YmxpYyBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdyYW50KGdyYW50ZWUsICdpbWFnZWJ1aWxkZXI6R2V0Q29tcG9uZW50Jyk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIEVDMiBJbWFnZSBCdWlsZGVyIENvbXBvbmVudC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS9tYW5hZ2UtY29tcG9uZW50cy5odG1sXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtaW1hZ2VidWlsZGVyLWFscGhhLkNvbXBvbmVudCc7XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBjb21wb25lbnQgZ2l2ZW4gaXRzIEFSTi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNvbXBvbmVudEFybihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBjb21wb25lbnRBcm46IHN0cmluZyk6IElDb21wb25lbnQge1xuICAgIHJldHVybiB0aGlzLmZyb21Db21wb25lbnRBdHRyaWJ1dGVzKHNjb3BlLCBpZCwgeyBjb21wb25lbnRBcm4gfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGNvbXBvbmVudCBnaXZlbiBpdHMgbmFtZS4gVGhlIHByb3ZpZGVkIG5hbWUgbXVzdCBiZSBub3JtYWxpemVkIGJ5IGNvbnZlcnRpbmcgYWxsIGFscGhhYmV0aWNhbFxuICAgKiBjaGFyYWN0ZXJzIHRvIGxvd2VyY2FzZSwgYW5kIHJlcGxhY2luZyBhbGwgc3BhY2VzIGFuZCB1bmRlcnNjb3JlcyB3aXRoIGh5cGhlbnMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Db21wb25lbnROYW1lKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbXBvbmVudE5hbWU6IHN0cmluZyk6IElDb21wb25lbnQge1xuICAgIHJldHVybiB0aGlzLmZyb21Db21wb25lbnRBdHRyaWJ1dGVzKHNjb3BlLCBpZCwgeyBjb21wb25lbnROYW1lIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBjb21wb25lbnQgYnkgcHJvdmlkaW5nIGl0cyBhdHRyaWJ1dGVzLiBJZiB0aGUgY29tcG9uZW50IG5hbWUgaXMgcHJvdmlkZWQgYXMgYW4gYXR0cmlidXRlLCBpdFxuICAgKiBtdXN0IGJlIG5vcm1hbGl6ZWQgYnkgY29udmVydGluZyBhbGwgYWxwaGFiZXRpY2FsIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlLCBhbmQgcmVwbGFjaW5nIGFsbCBzcGFjZXMgYW5kIHVuZGVyc2NvcmVzXG4gICAqIHdpdGggaHlwaGVucy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNvbXBvbmVudEF0dHJpYnV0ZXMoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXR0cnM6IENvbXBvbmVudEF0dHJpYnV0ZXMpOiBJQ29tcG9uZW50IHtcbiAgICBpZiAoYXR0cnMuY29tcG9uZW50QXJuICYmIChhdHRycy5jb21wb25lbnROYW1lIHx8IGF0dHJzLmNvbXBvbmVudFZlcnNpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgJ2EgY29tcG9uZW50TmFtZSBvciBjb21wb25lbnRWZXJzaW9uIGNhbm5vdCBiZSBwcm92aWRlZCB3aGVuIGEgY29tcG9uZW50QXJuIGlzIHByb3ZpZGVkJyxcbiAgICAgICAgc2NvcGUsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghYXR0cnMuY29tcG9uZW50QXJuICYmICFhdHRycy5jb21wb25lbnROYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcignZWl0aGVyIGNvbXBvbmVudEFybiBvciBjb21wb25lbnROYW1lIGlzIHJlcXVpcmVkJywgc2NvcGUpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBvbmVudEFybiA9XG4gICAgICBhdHRycy5jb21wb25lbnRBcm4gPz9cbiAgICAgIGNkay5TdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICAgIHJlc291cmNlOiAnY29tcG9uZW50JyxcbiAgICAgICAgcmVzb3VyY2VOYW1lOiBgJHthdHRycy5jb21wb25lbnROYW1lfS8ke2F0dHJzLmNvbXBvbmVudFZlcnNpb24gPz8gTEFURVNUX1ZFUlNJT059YCxcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgW2NvbXBvbmVudE5hbWUsIGNvbXBvbmVudFZlcnNpb25dID0gKCgpID0+IHtcbiAgICAgIGlmIChhdHRycy5jb21wb25lbnROYW1lKSB7XG4gICAgICAgIHJldHVybiBbYXR0cnMuY29tcG9uZW50TmFtZSwgYXR0cnMuY29tcG9uZW50VmVyc2lvbiA/PyBMQVRFU1RfVkVSU0lPTl07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWVWZXJzaW9uID0gY2RrLlN0YWNrLm9mKHNjb3BlKS5zcGxpdEFybihcbiAgICAgICAgY29tcG9uZW50QXJuLFxuICAgICAgICBjZGsuQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgICApLnJlc291cmNlTmFtZSE7XG5cbiAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWVWZXJzaW9uU3BsaXQgPSBjZGsuRm4uc3BsaXQoJy8nLCBjb21wb25lbnROYW1lVmVyc2lvbik7XG4gICAgICByZXR1cm4gW2Nkay5Gbi5zZWxlY3QoMCwgY29tcG9uZW50TmFtZVZlcnNpb25TcGxpdCksIGNkay5Gbi5zZWxlY3QoMSwgY29tcG9uZW50TmFtZVZlcnNpb25TcGxpdCldO1xuICAgIH0pKCk7XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjb21wb25lbnRBcm4gPSBjb21wb25lbnRBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbiA9IGNvbXBvbmVudFZlcnNpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGEgQ29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpc0NvbXBvbmVudCh4OiBhbnkpOiB4IGlzIENvbXBvbmVudCB7XG4gICAgcmV0dXJuIHggIT09IG51bGwgJiYgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIENPTVBPTkVOVF9TWU1CT0wgaW4geDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb21wb25lbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb21wb25lbnRBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbXBvbmVudE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbXBvbmVudFZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY29tcG9uZW50IGlzIGVuY3J5cHRlZFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVuY3J5cHRlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50VHlwZTogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcblxuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBwaHlzaWNhbE5hbWU6XG4gICAgICAgIHByb3BzLmNvbXBvbmVudE5hbWUgPz9cbiAgICAgICAgY2RrLkxhenkuc3RyaW5nKHtcbiAgICAgICAgICBwcm9kdWNlOiAoKSA9PlxuICAgICAgICAgICAgY2RrLk5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7XG4gICAgICAgICAgICAgIG1heExlbmd0aDogMTI4LFxuICAgICAgICAgICAgICBzZXBhcmF0b3I6ICctJyxcbiAgICAgICAgICAgICAgYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzOiAnLScsXG4gICAgICAgICAgICB9KS50b0xvd2VyQ2FzZSgpLCAvLyBFbmZvcmNlIGxvd2VyY2FzZSBmb3IgdGhlIGF1dG8tZ2VuZXJhdGVkIGZhbGxiYWNrXG4gICAgICAgIH0pLFxuICAgIH0pO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIENPTVBPTkVOVF9TWU1CT0wsIHsgdmFsdWU6IHRydWUgfSk7XG5cbiAgICB0aGlzLnZhbGlkYXRlQ29tcG9uZW50TmFtZSgpO1xuXG4gICAgcHJvcHMuc3VwcG9ydGVkT3NWZXJzaW9ucz8uZm9yRWFjaCgob3NWZXJzaW9uKSA9PiB7XG4gICAgICBpZiAob3NWZXJzaW9uLnBsYXRmb3JtICE9PSBwcm9wcy5wbGF0Zm9ybSkge1xuICAgICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBgb3MgdmVyc2lvbiAke29zVmVyc2lvbi5vc1ZlcnNpb259IGlzIG5vdCBjb21wYXRpYmxlIHdpdGggcGxhdGZvcm0gJHtwcm9wcy5wbGF0Zm9ybX1gLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBjb21wb25lbnRWZXJzaW9uID0gcHJvcHMuY29tcG9uZW50VmVyc2lvbiA/PyAnMS4wLjAnO1xuICAgIGNvbnN0IHN1cHBvcnRlZE9zVmVyc2lvbnMgPSBwcm9wcy5zdXBwb3J0ZWRPc1ZlcnNpb25zPy5maWx0ZXIoKG9zVmVyc2lvbikgPT4gb3NWZXJzaW9uLm9zVmVyc2lvbiAhPT0gdW5kZWZpbmVkKTtcblxuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBDZm5Db21wb25lbnQodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgICB2ZXJzaW9uOiBjb21wb25lbnRWZXJzaW9uLFxuICAgICAgY2hhbmdlRGVzY3JpcHRpb246IHByb3BzLmNoYW5nZURlc2NyaXB0aW9uLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgcGxhdGZvcm06IHByb3BzLnBsYXRmb3JtLFxuICAgICAga21zS2V5SWQ6IHByb3BzLmttc0tleT8ua2V5QXJuLFxuICAgICAgdGFnczogcHJvcHMudGFncyxcbiAgICAgIC4uLihzdXBwb3J0ZWRPc1ZlcnNpb25zPy5sZW5ndGggJiYge1xuICAgICAgICBzdXBwb3J0ZWRPc1ZlcnNpb25zOiBzdXBwb3J0ZWRPc1ZlcnNpb25zLm1hcCgob3NWZXJzaW9uKSA9PiBvc1ZlcnNpb24ub3NWZXJzaW9uISksXG4gICAgICB9KSxcbiAgICAgIC4uLnByb3BzLmRhdGEucmVuZGVyKCksXG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbXBvbmVudE5hbWUgPSB0aGlzLmdldFJlc291cmNlTmFtZUF0dHJpYnV0ZShjb21wb25lbnQuYXR0ck5hbWUpO1xuICAgIHRoaXMuY29tcG9uZW50QXJuID0gdGhpcy5nZXRSZXNvdXJjZUFybkF0dHJpYnV0ZShjb21wb25lbnQuYXR0ckFybiwge1xuICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICByZXNvdXJjZTogJ2NvbXBvbmVudCcsXG4gICAgICByZXNvdXJjZU5hbWU6IGAke3RoaXMucGh5c2ljYWxOYW1lfS8ke2NvbXBvbmVudFZlcnNpb259YCxcbiAgICB9KTtcbiAgICB0aGlzLmNvbXBvbmVudFZlcnNpb24gPSBjb21wb25lbnRWZXJzaW9uO1xuICAgIHRoaXMuZW5jcnlwdGVkID0gdHJ1ZTsgLy8gQ29tcG9uZW50cyBhcmUgYWx3YXlzIGVuY3J5cHRlZFxuICAgIHRoaXMuY29tcG9uZW50VHlwZSA9IGNvbXBvbmVudC5hdHRyVHlwZTtcbiAgICB0aGlzLmttc0tleSA9IHByb3BzLmttc0tleTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVDb21wb25lbnROYW1lKCkge1xuICAgIGlmIChjZGsuVG9rZW4uaXNVbnJlc29sdmVkKHRoaXMucGh5c2ljYWxOYW1lKSkge1xuICAgICAgcmV0dXJuOyAvLyBDYW5ub3QgdmFsaWRhdGUgdW5yZXNvbHZlZCB0b2tlbnMsIGdpdmVuIHRoZWlyIGFjdHVhbCB2YWx1ZSBpcyByZW5kZXJlZCBhdCBkZXBsb3ltZW50IHRpbWVcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUubGVuZ3RoID4gMTI4KSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgYHRoZSBjb21wb25lbnROYW1lIGNhbm5vdCBiZSBsb25nZXIgdGhhbiAxMjggY2hhcmFjdGVycywgZ290OiAnJHt0aGlzLnBoeXNpY2FsTmFtZX0nYCxcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGh5c2ljYWxOYW1lLmluY2x1ZGVzKCcgJykpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKGB0aGUgY29tcG9uZW50TmFtZSBjYW5ub3QgY29udGFpbiBzcGFjZXMsIGdvdDogJyR7dGhpcy5waHlzaWNhbE5hbWV9J2AsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZS5pbmNsdWRlcygnXycpKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihgdGhlIGNvbXBvbmVudE5hbWUgY2Fubm90IGNvbnRhaW4gdW5kZXJzY29yZXMsIGdvdDogJyR7dGhpcy5waHlzaWNhbE5hbWV9J2AsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZSAhPT0gdGhpcy5waHlzaWNhbE5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoYHRoZSBjb21wb25lbnROYW1lIG11c3QgYmUgbG93ZXJjYXNlLCBnb3Q6ICcke3RoaXMucGh5c2ljYWxOYW1lfSdgLCB0aGlzKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==