iam-floyd 0.834.0 → 0.836.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/README.md CHANGED
@@ -16,7 +16,7 @@
16
16
  Support for:
17
17
 
18
18
  - 455 Services
19
- - 21886 Actions
19
+ - 21902 Actions
20
20
  - 2309 Resource Types
21
21
  - 2473 Condition keys
22
22
  <!-- /stats -->
@@ -111,6 +111,14 @@ export declare class Healthlake extends PolicyStatement {
111
111
  * https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-bulk-member-match.html
112
112
  */
113
113
  toDescribeFHIRBulkMemberMatchJob(): this;
114
+ /**
115
+ * Grants permission to describe a FHIR Bulk Patch Job
116
+ *
117
+ * Access Level: Read
118
+ *
119
+ * https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-bulk-patch.html
120
+ */
121
+ toDescribeFHIRBulkPatchJob(): this;
114
122
  /**
115
123
  * Grants permission to get the properties associated with the FHIR datastore, including the datastore ID, datastore ARN, datastore name, datastore status, created at, datastore type version, and datastore endpoint
116
124
  *
@@ -415,6 +423,14 @@ export declare class Healthlake extends PolicyStatement {
415
423
  * https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-bulk-member-match.html
416
424
  */
417
425
  toStartFHIRBulkMemberMatchJob(): this;
426
+ /**
427
+ * Grants permission to begin a FHIR Bulk Patch Job
428
+ *
429
+ * Access Level: Write
430
+ *
431
+ * https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-bulk-patch.html
432
+ */
433
+ toStartFHIRBulkPatchJob(): this;
418
434
  /**
419
435
  * Grants permission to begin a FHIR Export job
420
436
  *
@@ -612,6 +628,7 @@ export declare class Healthlake extends PolicyStatement {
612
628
  * - .toDeleteResource()
613
629
  * - .toDescribeFHIRBulkDeleteJob()
614
630
  * - .toDescribeFHIRBulkMemberMatchJob()
631
+ * - .toDescribeFHIRBulkPatchJob()
615
632
  * - .toDescribeFHIRDatastore()
616
633
  * - .toDescribeFHIRExportJob()
617
634
  * - .toDescribeFHIRExportJobWithGet()
@@ -647,6 +664,7 @@ export declare class Healthlake extends PolicyStatement {
647
664
  * - .toStartDataTransformationJob()
648
665
  * - .toStartFHIRBulkDeleteJob()
649
666
  * - .toStartFHIRBulkMemberMatchJob()
667
+ * - .toStartFHIRBulkPatchJob()
650
668
  * - .toStartFHIRExportJob()
651
669
  * - .toStartFHIRExportJobWithGet()
652
670
  * - .toStartFHIRExportJobWithPost()
@@ -39,6 +39,7 @@ class Healthlake extends shared_1.PolicyStatement {
39
39
  'StartDataTransformationJob',
40
40
  'StartFHIRBulkDeleteJob',
41
41
  'StartFHIRBulkMemberMatchJob',
42
+ 'StartFHIRBulkPatchJob',
42
43
  'StartFHIRExportJob',
43
44
  'StartFHIRExportJobWithGet',
44
45
  'StartFHIRExportJobWithPost',
@@ -56,6 +57,7 @@ class Healthlake extends shared_1.PolicyStatement {
56
57
  'DescribeDataTransformationJob',
57
58
  'DescribeFHIRBulkDeleteJob',
58
59
  'DescribeFHIRBulkMemberMatchJob',
60
+ 'DescribeFHIRBulkPatchJob',
59
61
  'DescribeFHIRDatastore',
60
62
  'DescribeFHIRExportJob',
61
63
  'DescribeFHIRExportJobWithGet',
@@ -215,6 +217,16 @@ class Healthlake extends shared_1.PolicyStatement {
215
217
  toDescribeFHIRBulkMemberMatchJob() {
216
218
  return this.to('DescribeFHIRBulkMemberMatchJob');
217
219
  }
220
+ /**
221
+ * Grants permission to describe a FHIR Bulk Patch Job
222
+ *
223
+ * Access Level: Read
224
+ *
225
+ * https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-bulk-patch.html
226
+ */
227
+ toDescribeFHIRBulkPatchJob() {
228
+ return this.to('DescribeFHIRBulkPatchJob');
229
+ }
218
230
  /**
219
231
  * Grants permission to get the properties associated with the FHIR datastore, including the datastore ID, datastore ARN, datastore name, datastore status, created at, datastore type version, and datastore endpoint
220
232
  *
@@ -595,6 +607,16 @@ class Healthlake extends shared_1.PolicyStatement {
595
607
  toStartFHIRBulkMemberMatchJob() {
596
608
  return this.to('StartFHIRBulkMemberMatchJob');
597
609
  }
610
+ /**
611
+ * Grants permission to begin a FHIR Bulk Patch Job
612
+ *
613
+ * Access Level: Write
614
+ *
615
+ * https://docs.aws.amazon.com/healthlake/latest/devguide/reference-fhir-operations-bulk-patch.html
616
+ */
617
+ toStartFHIRBulkPatchJob() {
618
+ return this.to('StartFHIRBulkPatchJob');
619
+ }
598
620
  /**
599
621
  * Grants permission to begin a FHIR Export job
600
622
  *
@@ -831,6 +853,7 @@ class Healthlake extends shared_1.PolicyStatement {
831
853
  * - .toDeleteResource()
832
854
  * - .toDescribeFHIRBulkDeleteJob()
833
855
  * - .toDescribeFHIRBulkMemberMatchJob()
856
+ * - .toDescribeFHIRBulkPatchJob()
834
857
  * - .toDescribeFHIRDatastore()
835
858
  * - .toDescribeFHIRExportJob()
836
859
  * - .toDescribeFHIRExportJobWithGet()
@@ -866,6 +889,7 @@ class Healthlake extends shared_1.PolicyStatement {
866
889
  * - .toStartDataTransformationJob()
867
890
  * - .toStartFHIRBulkDeleteJob()
868
891
  * - .toStartFHIRBulkMemberMatchJob()
892
+ * - .toStartFHIRBulkPatchJob()
869
893
  * - .toStartFHIRExportJob()
870
894
  * - .toStartFHIRExportJobWithGet()
871
895
  * - .toStartFHIRExportJobWithPost()
@@ -914,4 +938,4 @@ class Healthlake extends shared_1.PolicyStatement {
914
938
  }
915
939
  }
916
940
  exports.Healthlake = Healthlake;
917
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRobGFrZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhlYWx0aGxha2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EseUNBQXlEO0FBRXpEOzs7O0dBSUc7QUFDSCxNQUFhLFVBQVcsU0FBUSx3QkFBZTtJQUc3Qzs7OztPQUlHO0lBQ0gsWUFBWSxHQUFZO1FBQ3RCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQVJOLGtCQUFhLEdBQUcsWUFBWSxDQUFDO1FBMnVCMUIsb0JBQWUsR0FBb0I7WUFDM0MsS0FBSyxFQUFFO2dCQUNMLCtCQUErQjtnQkFDL0Isd0JBQXdCO2dCQUN4QixpQ0FBaUM7Z0JBQ2pDLHFCQUFxQjtnQkFDckIsZ0JBQWdCO2dCQUNoQixpQ0FBaUM7Z0JBQ2pDLHFCQUFxQjtnQkFDckIsZ0JBQWdCO2dCQUNoQix5QkFBeUI7Z0JBQ3pCLDBCQUEwQjtnQkFDMUIsV0FBVztnQkFDWCxhQUFhO2dCQUNiLGNBQWM7Z0JBQ2QsZUFBZTtnQkFDZixlQUFlO2dCQUNmLGtDQUFrQztnQkFDbEMsc0JBQXNCO2dCQUN0QiwyQkFBMkI7Z0JBQzNCLDRCQUE0QjtnQkFDNUIsd0JBQXdCO2dCQUN4Qiw2QkFBNkI7Z0JBQzdCLG9CQUFvQjtnQkFDcEIsMkJBQTJCO2dCQUMzQiw0QkFBNEI7Z0JBQzVCLG9CQUFvQjtnQkFDcEIsb0JBQW9CO2dCQUNwQixhQUFhO2dCQUNiLGVBQWU7Z0JBQ2YsZUFBZTtnQkFDZixpQ0FBaUM7Z0JBQ2pDLHFCQUFxQjtnQkFDckIsd0JBQXdCO2dCQUN4QixnQkFBZ0I7YUFDakI7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osK0JBQStCO2dCQUMvQiwyQkFBMkI7Z0JBQzNCLGdDQUFnQztnQkFDaEMsdUJBQXVCO2dCQUN2Qix1QkFBdUI7Z0JBQ3ZCLDhCQUE4QjtnQkFDOUIsdUJBQXVCO2dCQUN2Qix1QkFBdUI7Z0JBQ3ZCLHdCQUF3QjtnQkFDeEIsaUJBQWlCO2dCQUNqQiw4QkFBOEI7Z0JBQzlCLGlC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Q0FBQyxXQUFtQixFQUFFLE9BQWdCLEVBQUUsTUFBZSxFQUFFLFNBQWtCO1FBQzNGLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFRLFNBQVMsSUFBSSxJQUFJLENBQUMsZ0JBQWlCLGVBQWdCLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYyxJQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsY0FBZSxtQkFBb0IsV0FBWSxFQUFFLENBQUMsQ0FBQztJQUNqTCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSSxlQUFlLENBQUMsTUFBYyxFQUFFLEtBQXdCLEVBQUUsUUFBNEI7UUFDM0YsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFtQixNQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxJQUFJLFlBQVksQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BMkVHO0lBQ0ksZ0JBQWdCLENBQUMsTUFBYyxFQUFFLEtBQXdCLEVBQUUsUUFBNEI7UUFDNUYsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLG1CQUFvQixNQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxJQUFJLFlBQVksQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNJLFlBQVksQ0FBQyxLQUF3QixFQUFFLFFBQTRCO1FBQ3hFLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLFFBQVEsSUFBSSxZQUFZLENBQUMsQ0FBQztJQUNqRSxDQUFDO0NBQ0Y7QUFsOUJELGdDQWs5QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY2Nlc3NMZXZlbExpc3QgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWNjZXNzLWxldmVsJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCwgT3BlcmF0b3IgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuXG4vKipcbiAqIFN0YXRlbWVudCBwcm92aWRlciBmb3Igc2VydmljZSBbaGVhbHRobGFrZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2UtYXV0aG9yaXphdGlvbi9sYXRlc3QvcmVmZXJlbmNlL2xpc3RfaGVhbHRobGFrZS5odG1sKS5cbiAqXG4gKiBAcGFyYW0gc2lkIFtTSURdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfc2lkLmh0bWwpIG9mIHRoZSBzdGF0ZW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIEhlYWx0aGxha2UgZXh0ZW5kcyBQb2xpY3lTdGF0ZW1lbnQge1xuICBwdWJsaWMgc2VydmljZVByZWZpeCA9ICdoZWFsdGhsYWtlJztcblxuICAvKipcbiAgICogU3RhdGVtZW50IHByb3ZpZGVyIGZvciBzZXJ2aWNlIFtoZWFsdGhsYWtlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2VydmljZS1hdXRob3JpemF0aW9uL2xhdGVzdC9yZWZlcmVuY2UvbGlzdF9oZWFsdGhsYWtlLmh0bWwpLlxuICAgKlxuICAgKiBAcGFyYW0gc2lkIFtTSURdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfc2lkLmh0bWwpIG9mIHRoZSBzdGF0ZW1lbnRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNpZD86IHN0cmluZykge1xuICAgIHN1cGVyKHNpZCk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY2FuY2VsIGFuIG9uIGdvaW5nIEZISVIgRXhwb3J0IGpvYiB3aXRoIERlbGV0ZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9leHBvcnQtZGF0YXN0b3JlLXJlc3QuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ2FuY2VsRkhJUkV4cG9ydEpvYldpdGhEZWxldGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NhbmNlbEZISVJFeHBvcnRKb2JXaXRoRGVsZXRlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYWxsb3cgY3VzdG9tZXJzIHRvIGluZGljYXRlIHRvIGEgUHJvZHVjZXIgdGhhdCB0aGUgQ29uc3VtZXIgZG9lcyBub3QgaGF2ZSBhbnkgbW9yZSBjaGFuZ2VzIHRvIGJlIG1hZGUgdG8gdGhlIEF0dHJpYnV0aW9uIExpc3RcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvcmVmZXJlbmNlLWZoaXItb3BlcmF0aW9ucy1jb25maXJtLWF0dHJpYnV0aW9uLWxpc3QuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ29uZmlybUF0dHJpYnV0aW9uTGlzdCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ29uZmlybUF0dHJpYnV0aW9uTGlzdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIGRhdGEgdHJhbnNmb3JtYXRpb24gcHJvZmlsZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVxdWVzdFRhZygpXG4gICAqIC0gLmlmQXdzUmVzb3VyY2VUYWcoKVxuICAgKiAtIC5pZkF3c1RhZ0tleXMoKVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVEYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZURhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZURhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBkYXRhc3RvcmUgdGhhdCBjYW4gaW5nZXN0IGFuZCBleHBvcnQgRkhJUiBkYXRhXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXF1ZXN0VGFnKClcbiAgICogLSAuaWZBd3NSZXNvdXJjZVRhZygpXG4gICAqIC0gLmlmQXdzVGFnS2V5cygpXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUZISVJEYXRhc3RvcmUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlRkhJUkRhdGFzdG9yZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlRkhJUkRhdGFzdG9yZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9jcnVkLWhlYWx0aGxha2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlUmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZVJlc291cmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVsZXRlIGEgZGF0YSB0cmFuc2Zvcm1hdGlvbiBwcm9maWxlIGFuZCBhbGwgaXRzIHZlcnNpb25zXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGVsZXRlRGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVEYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVEYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVsZXRlIGEgZGF0YXN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGVsZXRlRkhJUkRhdGFzdG9yZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVGSElSRGF0YXN0b3JlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVGSElSRGF0YXN0b3JlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVsZXRlIHJlc291cmNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL2NydWQtaGVhbHRobGFrZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVSZXNvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlUmVzb3VyY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZXNjcmliZSBhIGRhdGEgdHJhbnNmb3JtYXRpb24gam9iXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9EZXNjcmliZURhdGFUcmFuc2Zvcm1hdGlvbkpvYi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZXNjcmliZURhdGFUcmFuc2Zvcm1hdGlvbkpvYigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVzY3JpYmVEYXRhVHJhbnNmb3JtYXRpb25Kb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZXNjcmliZSBhIEZISVIgQnVsayBEZWxldGUgSm9iXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvcmVmZXJlbmNlLWZoaXItb3BlcmF0aW9ucy1idWxrLWRlbGV0ZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZXNjcmliZUZISVJCdWxrRGVsZXRlSm9iKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZXNjcmliZUZISVJCdWxrRGVsZXRlSm9iJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVzY3JpYmUgYSBGSElSIEJ1bGsgTWVtYmVyIE1hdGNoIEpvYlxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL3JlZmVyZW5jZS1maGlyLW9wZXJhdGlvbnMtYnVsay1tZW1iZXItbWF0Y2guaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVzY3JpYmVGSElSQnVsa01lbWJlck1hdGNoSm9iKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZXNjcmliZUZISVJCdWxrTWVtYmVyTWF0Y2hKb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgdGhlIHByb3BlcnRpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBGSElSIGRhdGFzdG9yZSwgaW5jbHVkaW5nIHRoZSBkYXRhc3RvcmUgSUQsIGRhdGFzdG9yZSBBUk4sIGRhdGFzdG9yZSBuYW1lLCBkYXRhc3RvcmUgc3RhdHVzLCBjcmVhdGVkIGF0LCBkYXRhc3RvcmUgdHlwZSB2ZXJzaW9uLCBhbmQgZGF0YXN0b3JlIGVuZHBvaW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9EZXNjcmliZUZISVJEYXRhc3RvcmUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVzY3JpYmVGSElSRGF0YXN0b3JlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZXNjcmliZUZISVJEYXRhc3RvcmUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkaXNwbGF5IHRoZSBwcm9wZXJ0aWVzIG9mIGEgRkhJUiBleHBvcnQgam9iLCBpbmNsdWRpbmcgdGhlIElELCBBUk4sIG5hbWUsIGFuZCB0aGUgc3RhdHVzIG9mIHRoZSBkYXRhc3RvcmVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0Rlc2NyaWJlRkhJUkV4cG9ydEpvYi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZXNjcmliZUZISVJFeHBvcnRKb2IoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0Rlc2NyaWJlRkhJUkV4cG9ydEpvYicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRpc3BsYXkgdGhlIHByb3BlcnRpZXMgb2YgYSBGSElSIGV4cG9ydCBqb2IsIGluY2x1ZGluZyB0aGUgSUQsIEFSTiwgbmFtZSwgYW5kIHRoZSBzdGF0dXMgb2YgdGhlIGRhdGFzdG9yZSB3aXRoIEdldFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL2V4cG9ydC1kYXRhc3RvcmUtcmVzdC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZXNjcmliZUZISVJFeHBvcnRKb2JXaXRoR2V0KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZXNjcmliZUZISVJFeHBvcnRKb2JXaXRoR2V0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGlzcGxheSB0aGUgcHJvcGVydGllcyBvZiBhIEZISVIgaW1wb3J0IGpvYiwgaW5jbHVkaW5nIHRoZSBJRCwgQVJOLCBuYW1lLCBhbmQgdGhlIHN0YXR1cyBvZiB0aGUgZGF0YXN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9EZXNjcmliZUZISVJJbXBvcnRKb2IuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVzY3JpYmVGSElSSW1wb3J0Sm9iKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZXNjcmliZUZISVJJbXBvcnRKb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzZWFyY2ggYW5kIGV4cGFuZCBWYWx1ZVNldCByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL3JlZmVyZW5jZS1maGlyLW9wZXJhdGlvbnMtZXhwYW5kLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0V4cGFuZFZhbHVlU2V0V2l0aEdldCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRXhwYW5kVmFsdWVTZXRXaXRoR2V0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gc2VhcmNoIGFuZCBleHBhbmQgVmFsdWVTZXQgcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9yZWZlcmVuY2UtZmhpci1vcGVyYXRpb25zLWV4cGFuZC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9FeHBhbmRWYWx1ZVNldFdpdGhQb3N0KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdFeHBhbmRWYWx1ZVNldFdpdGhQb3N0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZ2VuZXJhdGUgYSBjbGluaWNhbCBkb2N1bWVudCByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9yZWZlcmVuY2UtZmhpci1vcGVyYXRpb25zLWRvY3VtZW50Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dlbmVyYXRlRG9jdW1lbnRXaXRoR2V0KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZW5lcmF0ZURvY3VtZW50V2l0aEdldCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGdlbmVyYXRlIGEgY2xpbmljYWwgZG9jdW1lbnQgcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvcmVmZXJlbmNlLWZoaXItb3BlcmF0aW9ucy1kb2N1bWVudC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZW5lcmF0ZURvY3VtZW50V2l0aFBvc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dlbmVyYXRlRG9jdW1lbnRXaXRoUG9zdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGdldCB0aGUgY2FwYWJpbGl0aWVzIG9mIGEgRkhJUiBkYXRhc3RvcmVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9jcnVkLWhlYWx0aGxha2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0Q2FwYWJpbGl0aWVzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRDYXBhYmlsaXRpZXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSBhIGRhdGEgdHJhbnNmb3JtYXRpb24gcHJvZmlsZSBhbmQgaXRzIGNvbnRlbnRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0dldERhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0RGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0RGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGFjY2VzcyBleHBvcnRlZCBmaWxlcyBmcm9tIGEgRkhJUiBFeHBvcnQgam9iIGluaXRpYXRlZCB3aXRoIEdldFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL2V4cG9ydC1kYXRhc3RvcmUtcmVzdC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRFeHBvcnRlZEZpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldEV4cG9ydGVkRmlsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJlYWQgcmVzb3VyY2UgaGlzdG9yeVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL2NydWQtaGVhbHRobGFrZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRIaXN0b3J5QnlSZXNvdXJjZUlkKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRIaXN0b3J5QnlSZXNvdXJjZUlkJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gaW5xdWlyZSBhYm91dCB0aGUgc3RhdHVzIG9mIGEgcHJpb3IgYXV0aG9yaXphdGlvbiBDbGFpbVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL3JlZmVyZW5jZS1maGlyLW9wZXJhdGlvbnMtaW5xdWlyZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9JbnF1aXJlUHJlQXV0aENsYWltKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdJbnF1aXJlUHJlQXV0aENsYWltJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCBkYXRhIHRyYW5zZm9ybWF0aW9uIGpvYnMgaW4gdGhlIGFjY291bnRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0xpc3REYXRhVHJhbnNmb3JtYXRpb25Kb2JzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3REYXRhVHJhbnNmb3JtYXRpb25Kb2JzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0RGF0YVRyYW5zZm9ybWF0aW9uSm9icycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYWxsIHZlcnNpb25zIG9mIGEgZGF0YSB0cmFuc2Zvcm1hdGlvbiBwcm9maWxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9MaXN0RGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZVZlcnNpb25zLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3REYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlVmVyc2lvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3REYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlVmVyc2lvbnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IGRhdGEgdHJhbnNmb3JtYXRpb24gcHJvZmlsZXMgaW4gdGhlIGFjY291bnRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0xpc3REYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlcy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0RGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3REYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYWxsIEZISVIgZGF0YXN0b3JlcyB0aGF0IGFyZSBpbiB0aGUgdXNlcidzIGFjY291bnQsIHJlZ2FyZGxlc3Mgb2YgZGF0YXN0b3JlIHN0YXR1c1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfTGlzdEZISVJEYXRhc3RvcmVzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RGSElSRGF0YXN0b3JlcygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdEZISVJEYXRhc3RvcmVzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZ2V0IGEgbGlzdCBvZiBleHBvcnQgam9icyBmb3IgdGhlIHNwZWNpZmllZCBkYXRhc3RvcmVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0xpc3RGSElSRXhwb3J0Sm9icy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0RkhJUkV4cG9ydEpvYnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RGSElSRXhwb3J0Sm9icycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGdldCBhIGxpc3Qgb2YgaW1wb3J0IGpvYnMgZm9yIHRoZSBzcGVjaWZpZWQgZGF0YXN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9MaXN0RkhJUkltcG9ydEpvYnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdEZISVJJbXBvcnRKb2JzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0RkhJUkltcG9ydEpvYnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgYSBsaXN0IG9mIHRhZ3MgZm9yIHRoZSBzcGVjaWZpZWQgZGF0YXN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9MaXN0VGFnc0ZvclJlc291cmNlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RUYWdzRm9yUmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RUYWdzRm9yUmVzb3VyY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSBDb2RlcyBmb3IgYSBDb2RlU3lzdGVtIHJlc291cmNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvcmVmZXJlbmNlLWZoaXItb3BlcmF0aW9ucy1sb29rdXAuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTG9va3VwQ29kZVN5c3RlbVdpdGhHZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xvb2t1cENvZGVTeXN0ZW1XaXRoR2V0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgQ29kZXMgZm9yIGEgQ29kZVN5c3RlbSByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL3JlZmVyZW5jZS1maGlyLW9wZXJhdGlvbnMtbG9va3VwLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xvb2t1cENvZGVTeXN0ZW1XaXRoUG9zdCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTG9va3VwQ29kZVN5c3RlbVdpdGhQb3N0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYXR0cmlidXRlIGEgbWVtYmVyIHdpdGggYSBzcGVjaWZpYyBwcm92aWRlciBncm91cFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9yZWZlcmVuY2UtZmhpci1vcGVyYXRpb25zLW1lbWJlci1hZGQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTWVtYmVyQWRkKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdNZW1iZXJBZGQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBlbmFibGUgY3Jvc3Mtc3lzdGVtIHBhdGllbnQgbWF0Y2hpbmdcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvcmVmZXJlbmNlLWZoaXItb3BlcmF0aW9ucy1tZW1iZXItbWF0Y2guaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTWVtYmVyTWF0Y2goKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ01lbWJlck1hdGNoJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmVtb3ZlIGEgbWVtYmVyIGZyb20gYSBncm91cFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9yZWZlcmVuY2UtZmhpci1vcGVyYXRpb25zLW1lbWJlci1yZW1vdmUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTWVtYmVyUmVtb3ZlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdNZW1iZXJSZW1vdmUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBwYXRjaCBhIHJlc291cmNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL21hbmFnaW5nLWZoaXItcmVzb3VyY2VzLXBhdGNoLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1BhdGNoUmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1BhdGNoUmVzb3VyY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBidW5kbGUgbXVsdGlwbGUgcmVzb3VyY2Ugb3BlcmF0aW9uc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9jcnVkLWhlYWx0aGxha2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvUHJvY2Vzc0J1bmRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnUHJvY2Vzc0J1bmRsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHB1Ymxpc2ggYSBuZXcgaW1tdXRhYmxlIHZlcnNpb24gb2YgYSBkYXRhIHRyYW5zZm9ybWF0aW9uIHByb2ZpbGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9QdWJsaXNoRGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9QdWJsaXNoRGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnUHVibGlzaERhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSBRdWVzdGlvbm5haXJlIHBhY2thZ2VzIHdpdGggZGVwZW5kZW5jeSBMaWJyYXJ5IGFuZCBWYWx1ZVNldCByZXNvdXJjZXNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9yZWZlcmVuY2UtZmhpci1vcGVyYXRpb25zLXF1ZXN0aW9ubmFpcmUtcGFja2FnZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9RdWVzdGlvbm5haXJlUGFja2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnUXVlc3Rpb25uYWlyZVBhY2thZ2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZWFkIHJlc291cmNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvY3J1ZC1oZWFsdGhsYWtlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1JlYWRSZXNvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnUmVhZFJlc291cmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmVzdG9yZSBhIGJhY2t1cC1lbmFibGVkIGRhdGFzdG9yZSB0byBhIHBvaW50IGluIHRpbWUsIGNyZWF0aW5nIGEgbmV3IGRhdGFzdG9yZSBmcm9tIHRoZSBiYWNrdXBcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9SZXN0b3JlRkhJUkRhdGFzdG9yZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9SZXN0b3JlRkhJUkRhdGFzdG9yZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnUmVzdG9yZUZISVJEYXRhc3RvcmUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSBtZW1iZXIgYXR0cmlidXRpb24gc3RhdHVzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL3JlZmVyZW5jZS1maGlyLW9wZXJhdGlvbnMtYXR0cmlidXRpb24tc3RhdHVzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1JldHJpZXZlQXR0cmlidXRpb25TdGF0dXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1JldHJpZXZlQXR0cmlidXRpb25TdGF0dXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzZWFyY2ggYWxsIHJlc291cmNlcyByZWxhdGVkIHRvIGEgcGF0aWVudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL3NlYXJjaC1oZWFsdGhsYWtlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1NlYXJjaEV2ZXJ5dGhpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1NlYXJjaEV2ZXJ5dGhpbmcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzZWFyY2ggcmVzb3VyY2VzIHdpdGggR0VUIG1ldGhvZFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL3NlYXJjaC1oZWFsdGhsYWtlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1NlYXJjaFdpdGhHZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1NlYXJjaFdpdGhHZXQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzZWFyY2ggcmVzb3VyY2VzIHdpdGggUE9TVCBtZXRob2RcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9zZWFyY2gtaGVhbHRobGFrZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9TZWFyY2hXaXRoUG9zdCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnU2VhcmNoV2l0aFBvc3QnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzdGFydCBhbiBhc3luY2hyb25vdXMgZGF0YSB0cmFuc2Zvcm1hdGlvbiBqb2JcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9TdGFydERhdGFUcmFuc2Zvcm1hdGlvbkpvYi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9TdGFydERhdGFUcmFuc2Zvcm1hdGlvbkpvYigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnU3RhcnREYXRhVHJhbnNmb3JtYXRpb25Kb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBiZWdpbiBhIEZISVIgQnVsayBEZWxldGUgSm9iXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL3JlZmVyZW5jZS1maGlyLW9wZXJhdGlvbnMtYnVsay1kZWxldGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RhcnRGSElSQnVsa0RlbGV0ZUpvYigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnU3RhcnRGSElSQnVsa0RlbGV0ZUpvYicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGJlZ2luIGEgRkhJUiBCdWxrIE1lbWJlciBNYXRjaCBKb2JcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvcmVmZXJlbmNlLWZoaXItb3BlcmF0aW9ucy1idWxrLW1lbWJlci1tYXRjaC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9TdGFydEZISVJCdWxrTWVtYmVyTWF0Y2hKb2IoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0YXJ0RkhJUkJ1bGtNZW1iZXJNYXRjaEpvYicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGJlZ2luIGEgRkhJUiBFeHBvcnQgam9iXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfU3RhcnRGSElSRXhwb3J0Sm9iLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1N0YXJ0RkhJUkV4cG9ydEpvYigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnU3RhcnRGSElSRXhwb3J0Sm9iJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYmVnaW4gYSBGSElSIEV4cG9ydCBqb2Igd2l0aCBHZXRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvZXhwb3J0LWRhdGFzdG9yZS1yZXN0Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1N0YXJ0RkhJUkV4cG9ydEpvYldpdGhHZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0YXJ0RkhJUkV4cG9ydEpvYldpdGhHZXQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBiZWdpbiBhIEZISVIgRXhwb3J0IGpvYiB3aXRoIFBvc3RcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvZXhwb3J0LWRhdGFzdG9yZS1yZXN0Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1N0YXJ0RkhJUkV4cG9ydEpvYldpdGhQb3N0KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdTdGFydEZISVJFeHBvcnRKb2JXaXRoUG9zdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGJlZ2luIGEgRkhJUiBJbXBvcnQgam9iXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfU3RhcnRGSElSSW1wb3J0Sm9iLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1N0YXJ0RkhJUkltcG9ydEpvYigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnU3RhcnRGSElSSW1wb3J0Sm9iJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gc3VibWl0IGEgcHJpb3IgYXV0aG9yaXphdGlvbiBDbGFpbSByZXF1ZXN0XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL3JlZmVyZW5jZS1maGlyLW9wZXJhdGlvbnMtc3VibWl0Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1N1Ym1pdFByZUF1dGhDbGFpbSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnU3VibWl0UHJlQXV0aENsYWltJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYWRkIHRhZ3MgdG8gYSBkYXRhc3RvcmVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBUYWdnaW5nLCBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9UYWdSZXNvdXJjZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9UYWdSZXNvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVGFnUmVzb3VyY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBwZXJmb3JtIGEgc3luY2hyb25vdXMgZGF0YSB0cmFuc2Zvcm1hdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9kYXRhLXRyYW5zZm9ybWF0aW9uLWdldHRpbmctc3RhcnRlZC1zZGsuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVHJhbnNmb3JtRGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVHJhbnNmb3JtRGF0YScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHRyYW5zbGF0ZSBhIGNvZGUgZnJvbSBvbmUgdmFsdWUgc2V0IHRvIGFub3RoZXIgdXNpbmcgYSBDb25jZXB0TWFwIHJlc291cmNlIHdpdGggR0VUIG1ldGhvZFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL3JlZmVyZW5jZS1maGlyLW9wZXJhdGlvbnMtdHJhbnNsYXRlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1RyYW5zbGF0ZUNvbmNlcHRNYXBXaXRoR2V0KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdUcmFuc2xhdGVDb25jZXB0TWFwV2l0aEdldCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHRyYW5zbGF0ZSBhIGNvZGUgZnJvbSBvbmUgdmFsdWUgc2V0IHRvIGFub3RoZXIgdXNpbmcgYSBDb25jZXB0TWFwIHJlc291cmNlIHdpdGggUE9TVCBtZXRob2RcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9yZWZlcmVuY2UtZmhpci1vcGVyYXRpb25zLXRyYW5zbGF0ZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9UcmFuc2xhdGVDb25jZXB0TWFwV2l0aFBvc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1RyYW5zbGF0ZUNvbmNlcHRNYXBXaXRoUG9zdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJlbW92ZSB0YWdzIGFzc29jaWF0ZWQgd2l0aCBhIGRhdGFzdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFRhZ2dpbmcsIFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1VudGFnUmVzb3VyY2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVW50YWdSZXNvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVW50YWdSZXNvdXJjZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSB0aGUgZHJhZnQgdmVyc2lvbiBvZiBhIGRhdGEgdHJhbnNmb3JtYXRpb24gcHJvZmlsZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1VwZGF0ZURhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlRGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlRGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBvZiBhIGRhdGFzdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1VwZGF0ZUZISVJEYXRhc3RvcmUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlRkhJUkRhdGFzdG9yZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlRkhJUkRhdGFzdG9yZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSBhIGRhdGEgdHJhbnNmb3JtYXRpb24gcHJvZmlsZSB1c2luZyB0aGUgQUkgYWdlbnRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9VcGRhdGVQcm9maWxlV2l0aEFnZW50Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZVByb2ZpbGVXaXRoQWdlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZVByb2ZpbGVXaXRoQWdlbnQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvY3J1ZC1oZWFsdGhsYWtlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZVJlc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVSZXNvdXJjZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHZhbGlkYXRlIGEgcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9yZWZlcmVuY2UtZmhpci1vcGVyYXRpb25zLXZhbGlkYXRlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1ZhbGlkYXRlUmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1ZhbGlkYXRlUmVzb3VyY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB2YWxpZGF0ZSBzb3VyY2UgZGF0YSBhZ2FpbnN0IGZvcm1hdCBzcGVjaWZpY2F0aW9uc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL2RhdGEtdHJhbnNmb3JtYXRpb24tZmVhdHVyZXMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVmFsaWRhdGVTb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1ZhbGlkYXRlU291cmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmVhZCB2ZXJzaW9uIG9mIGEgcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9jcnVkLWhlYWx0aGxha2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVmVyc2lvblJlYWRSZXNvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVmVyc2lvblJlYWRSZXNvdXJjZScpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFjY2Vzc0xldmVsTGlzdDogQWNjZXNzTGV2ZWxMaXN0ID0ge1xuICAgIFdyaXRlOiBbXG4gICAgICAnQ2FuY2VsRkhJUkV4cG9ydEpvYldpdGhEZWxldGUnLFxuICAgICAgJ0NvbmZpcm1BdHRyaWJ1dGlvbkxpc3QnLFxuICAgICAgJ0NyZWF0ZURhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUnLFxuICAgICAgJ0NyZWF0ZUZISVJEYXRhc3RvcmUnLFxuICAgICAgJ0NyZWF0ZVJlc291cmNlJyxcbiAgICAgICdEZWxldGVEYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlJyxcbiAgICAgICdEZWxldGVGSElSRGF0YXN0b3JlJyxcbiAgICAgICdEZWxldGVSZXNvdXJjZScsXG4gICAgICAnR2VuZXJhdGVEb2N1bWVudFdpdGhHZXQnLFxuICAgICAgJ0dlbmVyYXRlRG9jdW1lbnRXaXRoUG9zdCcsXG4gICAgICAnTWVtYmVyQWRkJyxcbiAgICAgICdNZW1iZXJNYXRjaCcsXG4gICAgICAnTWVtYmVyUmVtb3ZlJyxcbiAgICAgICdQYXRjaFJlc291cmNlJyxcbiAgICAgICdQcm9jZXNzQnVuZGxlJyxcbiAgICAgICdQdWJsaXNoRGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZScsXG4gICAgICAnUmVzdG9yZUZISVJEYXRhc3RvcmUnLFxuICAgICAgJ1JldHJpZXZlQXR0cmlidXRpb25TdGF0dXMnLFxuICAgICAgJ1N0YXJ0RGF0YVRyYW5zZm9ybWF0aW9uSm9iJyxcbiAgICAgICdTdGFydEZISVJCdWxrRGVsZXRlSm9iJyxcbiAgICAgICdTdGFydEZISVJCdWxrTWVtYmVyTWF0Y2hKb2InLFxuICAgICAgJ1N0YXJ0RkhJUkV4cG9ydEpvYicsXG4gICAgICAnU3RhcnRGSElSRXhwb3J0Sm9iV2l0aEdldCcsXG4gICAgICAnU3RhcnRGSElSRXhwb3J0Sm9iV2l0aFBvc3QnLFxuICAgICAgJ1N0YXJ0RkhJUkltcG9ydEpvYicsXG4gICAgICAnU3VibWl0UHJlQXV0aENsYWltJyxcbiAgICAgICdUYWdSZXNvdXJjZScsXG4gICAgICAnVHJhbnNmb3JtRGF0YScsXG4gICAgICAnVW50YWdSZXNvdXJjZScsXG4gICAgICAnVXBkYXRlRGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZScsXG4gICAgICAnVXBkYXRlRkhJUkRhdGFzdG9yZScsXG4gICAgICAnVXBkYXRlUHJvZmlsZVdpdGhBZ2VudCcsXG4gICAgICAnVXBkYXRlUmVzb3VyY2UnXG4gICAgXSxcbiAgICBSZWFkOiBbXG4gICAgICAnRGVzY3JpYmVEYXRhVHJhbnNmb3JtYXRpb25Kb2InLFxuICAgICAgJ0Rlc2NyaWJlRkhJUkJ1bGtEZWxldGVKb2InLFxuICAgICAgJ0Rlc2NyaWJlRkhJUkJ1bGtNZW1iZXJNYXRjaEpvYicsXG4gICAgICAnRGVzY3JpYmVGSElSRGF0YXN0b3JlJyxcbiAgICAgICdEZXNjcmliZUZISVJFeHBvcnRKb2InLFxuICAgICAgJ0Rlc2NyaWJlRkhJUkV4cG9ydEpvYldpdGhHZXQnLFxuICAgICAgJ0Rlc2NyaWJlRkhJUkltcG9ydEpvYicsXG4gICAgICAnRXhwYW5kVmFsdWVTZXRXaXRoR2V0JyxcbiAgICAgICdFeHBhbmRWYWx1ZVNldFdpdGhQb3N0JyxcbiAgICAgICdHZXRDYXBhYmlsaXRpZXMnLFxuICAgICAgJ0dldERhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUnLFxuICAgICAgJ0dldEV4cG9ydGVkRmlsZScsXG4gICAgICAnR2V0SGlzdG9yeUJ5UmVzb3VyY2VJZCcsXG4gICAgICAnSW5xdWlyZVByZUF1dGhDbGFpbScsXG4gICAgICAnTG9va3VwQ29kZVN5c3RlbVdpdGhHZXQnLFxuICAgICAgJ0xvb2t1cENvZGVTeXN0ZW1XaXRoUG9zdCcsXG4gICAgICAnUXVlc3Rpb25uYWlyZVBhY2thZ2UnLFxuICAgICAgJ1JlYWRSZXNvdXJjZScsXG4gICAgICAnU2VhcmNoRXZlcnl0aGluZycsXG4gICAgICAnU2VhcmNoV2l0aEdldCcsXG4gICAgICAnU2VhcmNoV2l0aFBvc3QnLFxuICAgICAgJ1RyYW5zbGF0ZUNvbmNlcHRNYXBXaXRoR2V0JyxcbiAgICAgICdUcmFuc2xhdGVDb25jZXB0TWFwV2l0aFBvc3QnLFxuICAgICAgJ1ZhbGlkYXRlUmVzb3VyY2UnLFxuICAgICAgJ1ZhbGlkYXRlU291cmNlJyxcbiAgICAgICdWZXJzaW9uUmVhZFJlc291cmNlJ1xuICAgIF0sXG4gICAgTGlzdDogW1xuICAgICAgJ0xpc3REYXRhVHJhbnNmb3JtYXRpb25Kb2JzJyxcbiAgICAgICdMaXN0RGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZVZlcnNpb25zJyxcbiAgICAgICdMaXN0RGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZXMnLFxuICAgICAgJ0xpc3RGSElSRGF0YXN0b3JlcycsXG4gICAgICAnTGlzdEZISVJFeHBvcnRKb2JzJyxcbiAgICAgICdMaXN0RkhJUkltcG9ydEpvYnMnLFxuICAgICAgJ0xpc3RUYWdzRm9yUmVzb3VyY2UnXG4gICAgXSxcbiAgICBUYWdnaW5nOiBbXG4gICAgICAnVGFnUmVzb3VyY2UnLFxuICAgICAgJ1VudGFnUmVzb3VyY2UnXG4gICAgXVxuICB9O1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSBkYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlIHRvIHRoZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZVN1bW1hcnkuaHRtbFxuICAgKlxuICAgKiBAcGFyYW0gcHJvZmlsZUlkIC0gSWRlbnRpZmllciBmb3IgdGhlIHByb2ZpbGVJZC5cbiAgICogQHBhcmFtIGFjY291bnQgLSBBY2NvdW50IG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBhY2NvdW50LlxuICAgKiBAcGFyYW0gcmVnaW9uIC0gUmVnaW9uIG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyByZWdpb24uXG4gICAqIEBwYXJhbSBwYXJ0aXRpb24gLSBQYXJ0aXRpb24gb2YgdGhlIEFXUyBhY2NvdW50IFthd3MsIGF3cy1jbiwgYXdzLXVzLWdvdl07IGRlZmF1bHRzIHRvIGBhd3NgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBwYXJ0aXRpb24uXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVzb3VyY2VUYWcoKVxuICAgKi9cbiAgcHVibGljIG9uRGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZShwcm9maWxlSWQ6IHN0cmluZywgYWNjb3VudD86IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBwYXJ0aXRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vbihgYXJuOiR7IHBhcnRpdGlvbiA/PyB0aGlzLmRlZmF1bHRQYXJ0aXRpb24gfTpoZWFsdGhsYWtlOiR7IHJlZ2lvbiA/PyB0aGlzLmRlZmF1bHRSZWdpb24gfTokeyBhY2NvdW50ID8/IHRoaXMuZGVmYXVsdEFjY291bnQgfTpkYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlLyR7IHByb2ZpbGVJZCB9YCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHJlc291cmNlIG9mIHR5cGUgZGF0YXN0b3JlIHRvIHRoZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGF0YXN0b3JlUHJvcGVydGllcy5odG1sXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhc3RvcmVJZCAtIElkZW50aWZpZXIgZm9yIHRoZSBkYXRhc3RvcmVJZC5cbiAgICogQHBhcmFtIGFjY291bnQgLSBBY2NvdW50IG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBhY2NvdW50LlxuICAgKiBAcGFyYW0gcmVnaW9uIC0gUmVnaW9uIG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyByZWdpb24uXG4gICAqIEBwYXJhbSBwYXJ0aXRpb24gLSBQYXJ0aXRpb24gb2YgdGhlIEFXUyBhY2NvdW50IFthd3MsIGF3cy1jbiwgYXdzLXVzLWdvdl07IGRlZmF1bHRzIHRvIGBhd3NgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBwYXJ0aXRpb24uXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVzb3VyY2VUYWcoKVxuICAgKi9cbiAgcHVibGljIG9uRGF0YXN0b3JlKGRhdGFzdG9yZUlkOiBzdHJpbmcsIGFjY291bnQ/OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgcGFydGl0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub24oYGFybjokeyBwYXJ0aXRpb24gPz8gdGhpcy5kZWZhdWx0UGFydGl0aW9uIH06aGVhbHRobGFrZTokeyByZWdpb24gPz8gdGhpcy5kZWZhdWx0UmVnaW9uIH06JHsgYWNjb3VudCA/PyB0aGlzLmRlZmF1bHRBY2NvdW50IH06ZGF0YXN0b3JlL2ZoaXIvJHsgZGF0YXN0b3JlSWQgfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgYWNjZXNzIGJ5IHRoZSBwcmVzZW5jZSBvZiB0YWcga2V5LXZhbHVlIHBhaXJzIGluIHRoZSByZXF1ZXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfY29uZGl0aW9uLWtleXMuaHRtbCNjb25kaXRpb24ta2V5cy1yZXF1ZXN0dGFnXG4gICAqXG4gICAqIEFwcGxpZXMgdG8gYWN0aW9uczpcbiAgICogLSAudG9DcmVhdGVEYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlKClcbiAgICogLSAudG9DcmVhdGVGSElSRGF0YXN0b3JlKClcbiAgICogLSAudG9SZXN0b3JlRkhJUkRhdGFzdG9yZSgpXG4gICAqIC0gLnRvVGFnUmVzb3VyY2UoKVxuICAgKlxuICAgKiBAcGFyYW0gdGFnS2V5IFRoZSB0YWcga2V5IHRvIGNoZWNrXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUocykgdG8gY2hlY2tcbiAgICogQHBhcmFtIG9wZXJhdG9yIFdvcmtzIHdpdGggW3N0cmluZyBvcGVyYXRvcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sI0NvbmRpdGlvbnNfU3RyaW5nKS4gKipEZWZhdWx0OioqIGBTdHJpbmdMaWtlYFxuICAgKi9cbiAgcHVibGljIGlmQXdzUmVxdWVzdFRhZyh0YWdLZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdLCBvcGVyYXRvcj86IE9wZXJhdG9yIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaWYoYGF3czpSZXF1ZXN0VGFnLyR7IHRhZ0tleSB9YCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgdGhlIHByZXNlbmNlIG9mIHRhZyBrZXktdmFsdWUgcGFpcnMgYXR0YWNoZWQgdG8gdGhlIHJlc291cmNlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfY29uZGl0aW9uLWtleXMuaHRtbCNjb25kaXRpb24ta2V5cy1yZXNvdXJjZXRhZ1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIGFjdGlvbnM6XG4gICAqIC0gLnRvQ2FuY2VsRkhJUkV4cG9ydEpvYldpdGhEZWxldGUoKVxuICAgKiAtIC50b0NvbmZpcm1BdHRyaWJ1dGlvbkxpc3QoKVxuICAgKiAtIC50b0NyZWF0ZURhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUoKVxuICAgKiAtIC50b0NyZWF0ZUZISVJEYXRhc3RvcmUoKVxuICAgKiAtIC50b0NyZWF0ZVJlc291cmNlKClcbiAgICogLSAudG9EZWxldGVEYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlKClcbiAgICogLSAudG9EZWxldGVGSElSRGF0YXN0b3JlKClcbiAgICogLSAudG9EZWxldGVSZXNvdXJjZSgpXG4gICAqIC0gLnRvRGVzY3JpYmVGSElSQnVsa0RlbGV0ZUpvYigpXG4gICAqIC0gLnRvRGVzY3JpYmVGSElSQnVsa01lbWJlck1hdGNoSm9iKClcbiAgICogLSAudG9EZXNjcmliZUZISVJEYXRhc3RvcmUoKVxuICAgKiAtIC50b0Rlc2NyaWJlRkhJUkV4cG9ydEpvYigpXG4gICAqIC0gLnRvRGVzY3JpYmVGSElSRXhwb3J0Sm9iV2l0aEdldCgpXG4gICAqIC0gLnRvRGVzY3JpYmVGSElSSW1wb3J0Sm9iKClcbiAgICogLSAudG9FeHBhbmRWYWx1ZVNldFdpdGhHZXQoKVxuICAgKiAtIC50b0V4cGFuZFZhbHVlU2V0V2l0aFBvc3QoKVxuICAgKiAtIC50b0dlbmVyYXRlRG9jdW1lbnRXaXRoR2V0KClcbiAgICogLSAudG9HZW5lcmF0ZURvY3VtZW50V2l0aFBvc3QoKVxuICAgKiAtIC50b0dldENhcGFiaWxpdGllcygpXG4gICAqIC0gLnRvR2V0RGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZSgpXG4gICAqIC0gLnRvR2V0RXhwb3J0ZWRGaWxlKClcbiAgICogLSAudG9HZXRIaXN0b3J5QnlSZXNvdXJjZUlkKClcbiAgICogLSAudG9JbnF1aXJlUHJlQXV0aENsYWltKClcbiAgICogLSAudG9MaXN0RGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZVZlcnNpb25zKClcbiAgICogLSAudG9MaXN0RkhJUkV4cG9ydEpvYnMoKVxuICAgKiAtIC50b0xpc3RGSElSSW1wb3J0Sm9icygpXG4gICAqIC0gLnRvTGlzdFRhZ3NGb3JSZXNvdXJjZSgpXG4gICAqIC0gLnRvTG9va3VwQ29kZVN5c3RlbVdpdGhHZXQoKVxuICAgKiAtIC50b0xvb2t1cENvZGVTeXN0ZW1XaXRoUG9zdCgpXG4gICAqIC0gLnRvTWVtYmVyQWRkKClcbiAgICogLSAudG9NZW1iZXJNYXRjaCgpXG4gICAqIC0gLnRvTWVtYmVyUmVtb3ZlKClcbiAgICogLSAudG9QYXRjaFJlc291cmNlKClcbiAgICogLSAudG9Qcm9jZXNzQnVuZGxlKClcbiAgICogLSAudG9QdWJsaXNoRGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZSgpXG4gICAqIC0gLnRvUXVlc3Rpb25uYWlyZVBhY2thZ2UoKVxuICAgKiAtIC50b1JlYWRSZXNvdXJjZSgpXG4gICAqIC0gLnRvUmVzdG9yZUZISVJEYXRhc3RvcmUoKVxuICAgKiAtIC50b1JldHJpZXZlQXR0cmlidXRpb25TdGF0dXMoKVxuICAgKiAtIC50b1NlYXJjaEV2ZXJ5dGhpbmcoKVxuICAgKiAtIC50b1NlYXJjaFdpdGhHZXQoKVxuICAgKiAtIC50b1NlYXJjaFdpdGhQb3N0KClcbiAgICogLSAudG9TdGFydERhdGFUcmFuc2Zvcm1hdGlvbkpvYigpXG4gICAqIC0gLnRvU3RhcnRGSElSQnVsa0RlbGV0ZUpvYigpXG4gICAqIC0gLnRvU3RhcnRGSElSQnVsa01lbWJlck1hdGNoSm9iKClcbiAgICogLSAudG9TdGFydEZISVJFeHBvcnRKb2IoKVxuICAgKiAtIC50b1N0YXJ0RkhJUkV4cG9ydEpvYldpdGhHZXQoKVxuICAgKiAtIC50b1N0YXJ0RkhJUkV4cG9ydEpvYldpdGhQb3N0KClcbiAgICogLSAudG9TdGFydEZISVJJbXBvcnRKb2IoKVxuICAgKiAtIC50b1N1Ym1pdFByZUF1dGhDbGFpbSgpXG4gICAqIC0gLnRvVGFnUmVzb3VyY2UoKVxuICAgKiAtIC50b1RyYW5zZm9ybURhdGEoKVxuICAgKiAtIC50b1RyYW5zbGF0ZUNvbmNlcHRNYXBXaXRoR2V0KClcbiAgICogLSAudG9UcmFuc2xhdGVDb25jZXB0TWFwV2l0aFBvc3QoKVxuICAgKiAtIC50b1VudGFnUmVzb3VyY2UoKVxuICAgKiAtIC50b1VwZGF0ZURhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUoKVxuICAgKiAtIC50b1VwZGF0ZUZISVJEYXRhc3RvcmUoKVxuICAgKiAtIC50b1VwZGF0ZVByb2ZpbGVXaXRoQWdlbnQoKVxuICAgKiAtIC50b1VwZGF0ZVJlc291cmNlKClcbiAgICogLSAudG9WYWxpZGF0ZVJlc291cmNlKClcbiAgICogLSAudG9WZXJzaW9uUmVhZFJlc291cmNlKClcbiAgICpcbiAgICogQXBwbGllcyB0byByZXNvdXJjZSB0eXBlczpcbiAgICogLSBkYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlXG4gICAqIC0gZGF0YXN0b3JlXG4gICAqXG4gICAqIEBwYXJhbSB0YWdLZXkgVGhlIHRhZyBrZXkgdG8gY2hlY2tcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZShzKSB0byBjaGVja1xuICAgKiBAcGFyYW0gb3BlcmF0b3IgV29ya3Mgd2l0aCBbc3RyaW5nIG9wZXJhdG9yc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50c19jb25kaXRpb25fb3BlcmF0b3JzLmh0bWwjQ29uZGl0aW9uc19TdHJpbmcpLiAqKkRlZmF1bHQ6KiogYFN0cmluZ0xpa2VgXG4gICAqL1xuICBwdWJsaWMgaWZBd3NSZXNvdXJjZVRhZyh0YWdLZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdLCBvcGVyYXRvcj86IE9wZXJhdG9yIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaWYoYGF3czpSZXNvdXJjZVRhZy8keyB0YWdLZXkgfWAsIHZhbHVlLCBvcGVyYXRvciA/PyAnU3RyaW5nTGlrZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgYWNjZXNzIGJ5IHRoZSBwcmVzZW5jZSBvZiB0YWcga2V5cyBpbiB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2NvbmRpdGlvbi1rZXlzLmh0bWwjY29uZGl0aW9uLWtleXMtdGFna2V5c1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIGFjdGlvbnM6XG4gICAqIC0gLnRvQ3JlYXRlRGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZSgpXG4gICAqIC0gLnRvQ3JlYXRlRkhJUkRhdGFzdG9yZSgpXG4gICAqIC0gLnRvUmVzdG9yZUZISVJEYXRhc3RvcmUoKVxuICAgKiAtIC50b1RhZ1Jlc291cmNlKClcbiAgICogLSAudG9VbnRhZ1Jlc291cmNlKClcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZShzKSB0byBjaGVja1xuICAgKiBAcGFyYW0gb3BlcmF0b3IgV29ya3Mgd2l0aCBbc3RyaW5nIG9wZXJhdG9yc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50c19jb25kaXRpb25fb3BlcmF0b3JzLmh0bWwjQ29uZGl0aW9uc19TdHJpbmcpLiAqKkRlZmF1bHQ6KiogYFN0cmluZ0xpa2VgXG4gICAqL1xuICBwdWJsaWMgaWZBd3NUYWdLZXlzKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSwgb3BlcmF0b3I/OiBPcGVyYXRvciB8IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmlmKGBhd3M6VGFnS2V5c2AsIHZhbHVlLCBvcGVyYXRvciA/PyAnU3RyaW5nTGlrZScpO1xuICB9XG59XG4iXX0=
941
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRobGFrZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhlYWx0aGxha2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EseUNBQXlEO0FBRXpEOzs7O0dBSUc7QUFDSCxNQUFhLFVBQVcsU0FBUSx3QkFBZTtJQUc3Qzs7OztPQUlHO0lBQ0gsWUFBWSxHQUFZO1FBQ3RCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQVJOLGtCQUFhLEdBQUcsWUFBWSxDQUFDO1FBaXdCMUIsb0JBQWUsR0FBb0I7WUFDM0MsS0FBSyxFQUFFO2dCQUNMLCtCQUErQjtnQkFDL0Isd0JBQXdCO2dCQUN4QixpQ0FBaUM7Z0JBQ2pDLHFCQUFxQjtnQkFDckIsZ0JBQWdCO2dCQUNoQixpQ0FBaUM7Z0JBQ2pDLHFCQUFxQjtnQkFDckIsZ0JBQWdCO2dCQUNoQix5QkFBeUI7Z0JBQ3pCLDBCQUEwQjtnQkFDMUIsV0FBVztnQkFDWCxhQUFhO2dCQUNiLGNBQWM7Z0JBQ2QsZUFBZTtnQkFDZixlQUFlO2dCQUNmLGtDQUFrQztnQkFDbEMsc0JBQXNCO2dCQUN0QiwyQkFBMkI7Z0JBQzNCLDRCQUE0QjtnQkFDNUIsd0JBQXdCO2dCQUN4Qiw2QkFBNkI7Z0JBQzdCLHVCQUF1QjtnQkFDdkIsb0JBQW9CO2dCQUNwQiwyQkFBMkI7Z0JBQzNCLDRCQUE0QjtnQkFDNUIsb0JBQW9CO2dCQUNwQixvQkFBb0I7Z0JBQ3BCLGFBQWE7Z0JBQ2IsZUFBZTtnQkFDZixlQUFlO2dCQUNmLGlDQUFpQztnQkFDakMscUJBQXFCO2dCQUNyQix3QkFBd0I7Z0JBQ3hCLGdCQUFnQjthQUNqQjtZQUNELElBQUksRUFBRTtnQkFDSiwrQkFBK0I7Z0JBQy9CLDJCQUEyQjtnQkFDM0IsZ0NBQWdDO2dCQUNoQywwQkFBMEI7Z0JBQzFCLHVCQUF1QjtnQkFDdkIsdUJBQXVCO2dCQUN2Qiw4QkFBOEI7Z0JBQzlCLHVCQUF1QjtnQkFDdkIsdUJBQXVCO2dCQUN2Qix3QkFBd0I7Z0JBQ3hCLGlC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RUFBRSxRQUFRLElBQUksWUFBWSxDQUFDLENBQUM7SUFDakUsQ0FBQztDQUNGO0FBNStCRCxnQ0E0K0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWNjZXNzTGV2ZWxMaXN0IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2FjY2Vzcy1sZXZlbCc7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQsIE9wZXJhdG9yIH0gZnJvbSAnLi4vLi4vc2hhcmVkJztcblxuLyoqXG4gKiBTdGF0ZW1lbnQgcHJvdmlkZXIgZm9yIHNlcnZpY2UgW2hlYWx0aGxha2VdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zZXJ2aWNlLWF1dGhvcml6YXRpb24vbGF0ZXN0L3JlZmVyZW5jZS9saXN0X2hlYWx0aGxha2UuaHRtbCkuXG4gKlxuICogQHBhcmFtIHNpZCBbU0lEXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3NpZC5odG1sKSBvZiB0aGUgc3RhdGVtZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBIZWFsdGhsYWtlIGV4dGVuZHMgUG9saWN5U3RhdGVtZW50IHtcbiAgcHVibGljIHNlcnZpY2VQcmVmaXggPSAnaGVhbHRobGFrZSc7XG5cbiAgLyoqXG4gICAqIFN0YXRlbWVudCBwcm92aWRlciBmb3Igc2VydmljZSBbaGVhbHRobGFrZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2UtYXV0aG9yaXphdGlvbi9sYXRlc3QvcmVmZXJlbmNlL2xpc3RfaGVhbHRobGFrZS5odG1sKS5cbiAgICpcbiAgICogQHBhcmFtIHNpZCBbU0lEXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3NpZC5odG1sKSBvZiB0aGUgc3RhdGVtZW50XG4gICAqL1xuICBjb25zdHJ1Y3RvcihzaWQ/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihzaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNhbmNlbCBhbiBvbiBnb2luZyBGSElSIEV4cG9ydCBqb2Igd2l0aCBEZWxldGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvZXhwb3J0LWRhdGFzdG9yZS1yZXN0Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NhbmNlbEZISVJFeHBvcnRKb2JXaXRoRGVsZXRlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDYW5jZWxGSElSRXhwb3J0Sm9iV2l0aERlbGV0ZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGFsbG93IGN1c3RvbWVycyB0byBpbmRpY2F0ZSB0byBhIFByb2R1Y2VyIHRoYXQgdGhlIENvbnN1bWVyIGRvZXMgbm90IGhhdmUgYW55IG1vcmUgY2hhbmdlcyB0byBiZSBtYWRlIHRvIHRoZSBBdHRyaWJ1dGlvbiBMaXN0XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL3JlZmVyZW5jZS1maGlyLW9wZXJhdGlvbnMtY29uZmlybS1hdHRyaWJ1dGlvbi1saXN0Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NvbmZpcm1BdHRyaWJ1dGlvbkxpc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NvbmZpcm1BdHRyaWJ1dGlvbkxpc3QnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBkYXRhIHRyYW5zZm9ybWF0aW9uIHByb2ZpbGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1JlcXVlc3RUYWcoKVxuICAgKiAtIC5pZkF3c1Jlc291cmNlVGFnKClcbiAgICogLSAuaWZBd3NUYWdLZXlzKClcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlRGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVEYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVEYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgZGF0YXN0b3JlIHRoYXQgY2FuIGluZ2VzdCBhbmQgZXhwb3J0IEZISVIgZGF0YVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVxdWVzdFRhZygpXG4gICAqIC0gLmlmQXdzUmVzb3VyY2VUYWcoKVxuICAgKiAtIC5pZkF3c1RhZ0tleXMoKVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVGSElSRGF0YXN0b3JlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUZISVJEYXRhc3RvcmUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZUZISVJEYXRhc3RvcmUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvY3J1ZC1oZWFsdGhsYWtlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZVJlc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVSZXNvdXJjZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIGRhdGEgdHJhbnNmb3JtYXRpb24gcHJvZmlsZSBhbmQgYWxsIGl0cyB2ZXJzaW9uc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0RlbGV0ZURhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlRGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlRGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIGRhdGFzdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0RlbGV0ZUZISVJEYXRhc3RvcmUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlRkhJUkRhdGFzdG9yZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlRkhJUkRhdGFzdG9yZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9jcnVkLWhlYWx0aGxha2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlUmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZVJlc291cmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVzY3JpYmUgYSBkYXRhIHRyYW5zZm9ybWF0aW9uIGpvYlxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGVzY3JpYmVEYXRhVHJhbnNmb3JtYXRpb25Kb2IuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVzY3JpYmVEYXRhVHJhbnNmb3JtYXRpb25Kb2IoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0Rlc2NyaWJlRGF0YVRyYW5zZm9ybWF0aW9uSm9iJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVzY3JpYmUgYSBGSElSIEJ1bGsgRGVsZXRlIEpvYlxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL3JlZmVyZW5jZS1maGlyLW9wZXJhdGlvbnMtYnVsay1kZWxldGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVzY3JpYmVGSElSQnVsa0RlbGV0ZUpvYigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVzY3JpYmVGSElSQnVsa0RlbGV0ZUpvYicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlc2NyaWJlIGEgRkhJUiBCdWxrIE1lbWJlciBNYXRjaCBKb2JcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9yZWZlcmVuY2UtZmhpci1vcGVyYXRpb25zLWJ1bGstbWVtYmVyLW1hdGNoLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0Rlc2NyaWJlRkhJUkJ1bGtNZW1iZXJNYXRjaEpvYigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVzY3JpYmVGSElSQnVsa01lbWJlck1hdGNoSm9iJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVzY3JpYmUgYSBGSElSIEJ1bGsgUGF0Y2ggSm9iXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvcmVmZXJlbmNlLWZoaXItb3BlcmF0aW9ucy1idWxrLXBhdGNoLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0Rlc2NyaWJlRkhJUkJ1bGtQYXRjaEpvYigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVzY3JpYmVGSElSQnVsa1BhdGNoSm9iJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZ2V0IHRoZSBwcm9wZXJ0aWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgRkhJUiBkYXRhc3RvcmUsIGluY2x1ZGluZyB0aGUgZGF0YXN0b3JlIElELCBkYXRhc3RvcmUgQVJOLCBkYXRhc3RvcmUgbmFtZSwgZGF0YXN0b3JlIHN0YXR1cywgY3JlYXRlZCBhdCwgZGF0YXN0b3JlIHR5cGUgdmVyc2lvbiwgYW5kIGRhdGFzdG9yZSBlbmRwb2ludFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGVzY3JpYmVGSElSRGF0YXN0b3JlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0Rlc2NyaWJlRkhJUkRhdGFzdG9yZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVzY3JpYmVGSElSRGF0YXN0b3JlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGlzcGxheSB0aGUgcHJvcGVydGllcyBvZiBhIEZISVIgZXhwb3J0IGpvYiwgaW5jbHVkaW5nIHRoZSBJRCwgQVJOLCBuYW1lLCBhbmQgdGhlIHN0YXR1cyBvZiB0aGUgZGF0YXN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9EZXNjcmliZUZISVJFeHBvcnRKb2IuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVzY3JpYmVGSElSRXhwb3J0Sm9iKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZXNjcmliZUZISVJFeHBvcnRKb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkaXNwbGF5IHRoZSBwcm9wZXJ0aWVzIG9mIGEgRkhJUiBleHBvcnQgam9iLCBpbmNsdWRpbmcgdGhlIElELCBBUk4sIG5hbWUsIGFuZCB0aGUgc3RhdHVzIG9mIHRoZSBkYXRhc3RvcmUgd2l0aCBHZXRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9leHBvcnQtZGF0YXN0b3JlLXJlc3QuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVzY3JpYmVGSElSRXhwb3J0Sm9iV2l0aEdldCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVzY3JpYmVGSElSRXhwb3J0Sm9iV2l0aEdldCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRpc3BsYXkgdGhlIHByb3BlcnRpZXMgb2YgYSBGSElSIGltcG9ydCBqb2IsIGluY2x1ZGluZyB0aGUgSUQsIEFSTiwgbmFtZSwgYW5kIHRoZSBzdGF0dXMgb2YgdGhlIGRhdGFzdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGVzY3JpYmVGSElSSW1wb3J0Sm9iLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0Rlc2NyaWJlRkhJUkltcG9ydEpvYigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVzY3JpYmVGSElSSW1wb3J0Sm9iJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gc2VhcmNoIGFuZCBleHBhbmQgVmFsdWVTZXQgcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9yZWZlcmVuY2UtZmhpci1vcGVyYXRpb25zLWV4cGFuZC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9FeHBhbmRWYWx1ZVNldFdpdGhHZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0V4cGFuZFZhbHVlU2V0V2l0aEdldCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHNlYXJjaCBhbmQgZXhwYW5kIFZhbHVlU2V0IHJlc291cmNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvcmVmZXJlbmNlLWZoaXItb3BlcmF0aW9ucy1leHBhbmQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRXhwYW5kVmFsdWVTZXRXaXRoUG9zdCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRXhwYW5kVmFsdWVTZXRXaXRoUG9zdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGdlbmVyYXRlIGEgY2xpbmljYWwgZG9jdW1lbnQgcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvcmVmZXJlbmNlLWZoaXItb3BlcmF0aW9ucy1kb2N1bWVudC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZW5lcmF0ZURvY3VtZW50V2l0aEdldCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2VuZXJhdGVEb2N1bWVudFdpdGhHZXQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZW5lcmF0ZSBhIGNsaW5pY2FsIGRvY3VtZW50IHJlc291cmNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL3JlZmVyZW5jZS1maGlyLW9wZXJhdGlvbnMtZG9jdW1lbnQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2VuZXJhdGVEb2N1bWVudFdpdGhQb3N0KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZW5lcmF0ZURvY3VtZW50V2l0aFBvc3QnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgdGhlIGNhcGFiaWxpdGllcyBvZiBhIEZISVIgZGF0YXN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvY3J1ZC1oZWFsdGhsYWtlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldENhcGFiaWxpdGllcygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0Q2FwYWJpbGl0aWVzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgYSBkYXRhIHRyYW5zZm9ybWF0aW9uIHByb2ZpbGUgYW5kIGl0cyBjb250ZW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9HZXREYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldERhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldERhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBhY2Nlc3MgZXhwb3J0ZWQgZmlsZXMgZnJvbSBhIEZISVIgRXhwb3J0IGpvYiBpbml0aWF0ZWQgd2l0aCBHZXRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9leHBvcnQtZGF0YXN0b3JlLXJlc3QuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0RXhwb3J0ZWRGaWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRFeHBvcnRlZEZpbGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZWFkIHJlc291cmNlIGhpc3RvcnlcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9jcnVkLWhlYWx0aGxha2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0SGlzdG9yeUJ5UmVzb3VyY2VJZCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0SGlzdG9yeUJ5UmVzb3VyY2VJZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGlucXVpcmUgYWJvdXQgdGhlIHN0YXR1cyBvZiBhIHByaW9yIGF1dGhvcml6YXRpb24gQ2xhaW1cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9yZWZlcmVuY2UtZmhpci1vcGVyYXRpb25zLWlucXVpcmUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvSW5xdWlyZVByZUF1dGhDbGFpbSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnSW5xdWlyZVByZUF1dGhDbGFpbScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgZGF0YSB0cmFuc2Zvcm1hdGlvbiBqb2JzIGluIHRoZSBhY2NvdW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9MaXN0RGF0YVRyYW5zZm9ybWF0aW9uSm9icy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0RGF0YVRyYW5zZm9ybWF0aW9uSm9icygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdERhdGFUcmFuc2Zvcm1hdGlvbkpvYnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IGFsbCB2ZXJzaW9ucyBvZiBhIGRhdGEgdHJhbnNmb3JtYXRpb24gcHJvZmlsZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfTGlzdERhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGVWZXJzaW9ucy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0RGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZVZlcnNpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0RGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZVZlcnNpb25zJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCBkYXRhIHRyYW5zZm9ybWF0aW9uIHByb2ZpbGVzIGluIHRoZSBhY2NvdW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9MaXN0RGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZXMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdERhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGVzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0RGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IGFsbCBGSElSIGRhdGFzdG9yZXMgdGhhdCBhcmUgaW4gdGhlIHVzZXIncyBhY2NvdW50LCByZWdhcmRsZXNzIG9mIGRhdGFzdG9yZSBzdGF0dXNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0xpc3RGSElSRGF0YXN0b3Jlcy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0RkhJUkRhdGFzdG9yZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RGSElSRGF0YXN0b3JlcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGdldCBhIGxpc3Qgb2YgZXhwb3J0IGpvYnMgZm9yIHRoZSBzcGVjaWZpZWQgZGF0YXN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9MaXN0RkhJUkV4cG9ydEpvYnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdEZISVJFeHBvcnRKb2JzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0RkhJUkV4cG9ydEpvYnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgYSBsaXN0IG9mIGltcG9ydCBqb2JzIGZvciB0aGUgc3BlY2lmaWVkIGRhdGFzdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfTGlzdEZISVJJbXBvcnRKb2JzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RGSElSSW1wb3J0Sm9icygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdEZISVJJbXBvcnRKb2JzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZ2V0IGEgbGlzdCBvZiB0YWdzIGZvciB0aGUgc3BlY2lmaWVkIGRhdGFzdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfTGlzdFRhZ3NGb3JSZXNvdXJjZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0VGFnc0ZvclJlc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0VGFnc0ZvclJlc291cmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgQ29kZXMgZm9yIGEgQ29kZVN5c3RlbSByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL3JlZmVyZW5jZS1maGlyLW9wZXJhdGlvbnMtbG9va3VwLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xvb2t1cENvZGVTeXN0ZW1XaXRoR2V0KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMb29rdXBDb2RlU3lzdGVtV2l0aEdldCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIENvZGVzIGZvciBhIENvZGVTeXN0ZW0gcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9yZWZlcmVuY2UtZmhpci1vcGVyYXRpb25zLWxvb2t1cC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9Mb29rdXBDb2RlU3lzdGVtV2l0aFBvc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xvb2t1cENvZGVTeXN0ZW1XaXRoUG9zdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGF0dHJpYnV0ZSBhIG1lbWJlciB3aXRoIGEgc3BlY2lmaWMgcHJvdmlkZXIgZ3JvdXBcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvcmVmZXJlbmNlLWZoaXItb3BlcmF0aW9ucy1tZW1iZXItYWRkLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b01lbWJlckFkZCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTWVtYmVyQWRkJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZW5hYmxlIGNyb3NzLXN5c3RlbSBwYXRpZW50IG1hdGNoaW5nXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL3JlZmVyZW5jZS1maGlyLW9wZXJhdGlvbnMtbWVtYmVyLW1hdGNoLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b01lbWJlck1hdGNoKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdNZW1iZXJNYXRjaCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJlbW92ZSBhIG1lbWJlciBmcm9tIGEgZ3JvdXBcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvcmVmZXJlbmNlLWZoaXItb3BlcmF0aW9ucy1tZW1iZXItcmVtb3ZlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b01lbWJlclJlbW92ZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTWVtYmVyUmVtb3ZlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcGF0Y2ggYSByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9tYW5hZ2luZy1maGlyLXJlc291cmNlcy1wYXRjaC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9QYXRjaFJlc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdQYXRjaFJlc291cmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYnVuZGxlIG11bHRpcGxlIHJlc291cmNlIG9wZXJhdGlvbnNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvY3J1ZC1oZWFsdGhsYWtlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1Byb2Nlc3NCdW5kbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1Byb2Nlc3NCdW5kbGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBwdWJsaXNoIGEgbmV3IGltbXV0YWJsZSB2ZXJzaW9uIG9mIGEgZGF0YSB0cmFuc2Zvcm1hdGlvbiBwcm9maWxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUHVibGlzaERhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvUHVibGlzaERhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1B1Ymxpc2hEYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgUXVlc3Rpb25uYWlyZSBwYWNrYWdlcyB3aXRoIGRlcGVuZGVuY3kgTGlicmFyeSBhbmQgVmFsdWVTZXQgcmVzb3VyY2VzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvcmVmZXJlbmNlLWZoaXItb3BlcmF0aW9ucy1xdWVzdGlvbm5haXJlLXBhY2thZ2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvUXVlc3Rpb25uYWlyZVBhY2thZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1F1ZXN0aW9ubmFpcmVQYWNrYWdlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmVhZCByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL2NydWQtaGVhbHRobGFrZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9SZWFkUmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1JlYWRSZXNvdXJjZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJlc3RvcmUgYSBiYWNrdXAtZW5hYmxlZCBkYXRhc3RvcmUgdG8gYSBwb2ludCBpbiB0aW1lLCBjcmVhdGluZyBhIG5ldyBkYXRhc3RvcmUgZnJvbSB0aGUgYmFja3VwXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUmVzdG9yZUZISVJEYXRhc3RvcmUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvUmVzdG9yZUZISVJEYXRhc3RvcmUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1Jlc3RvcmVGSElSRGF0YXN0b3JlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgbWVtYmVyIGF0dHJpYnV0aW9uIHN0YXR1c1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9yZWZlcmVuY2UtZmhpci1vcGVyYXRpb25zLWF0dHJpYnV0aW9uLXN0YXR1cy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9SZXRyaWV2ZUF0dHJpYnV0aW9uU3RhdHVzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdSZXRyaWV2ZUF0dHJpYnV0aW9uU3RhdHVzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gc2VhcmNoIGFsbCByZXNvdXJjZXMgcmVsYXRlZCB0byBhIHBhdGllbnRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9zZWFyY2gtaGVhbHRobGFrZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9TZWFyY2hFdmVyeXRoaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdTZWFyY2hFdmVyeXRoaW5nJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gc2VhcmNoIHJlc291cmNlcyB3aXRoIEdFVCBtZXRob2RcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9zZWFyY2gtaGVhbHRobGFrZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9TZWFyY2hXaXRoR2V0KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdTZWFyY2hXaXRoR2V0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gc2VhcmNoIHJlc291cmNlcyB3aXRoIFBPU1QgbWV0aG9kXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvc2VhcmNoLWhlYWx0aGxha2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU2VhcmNoV2l0aFBvc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1NlYXJjaFdpdGhQb3N0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gc3RhcnQgYW4gYXN5bmNocm9ub3VzIGRhdGEgdHJhbnNmb3JtYXRpb24gam9iXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfU3RhcnREYXRhVHJhbnNmb3JtYXRpb25Kb2IuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RhcnREYXRhVHJhbnNmb3JtYXRpb25Kb2IoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0YXJ0RGF0YVRyYW5zZm9ybWF0aW9uSm9iJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYmVnaW4gYSBGSElSIEJ1bGsgRGVsZXRlIEpvYlxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9yZWZlcmVuY2UtZmhpci1vcGVyYXRpb25zLWJ1bGstZGVsZXRlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1N0YXJ0RkhJUkJ1bGtEZWxldGVKb2IoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0YXJ0RkhJUkJ1bGtEZWxldGVKb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBiZWdpbiBhIEZISVIgQnVsayBNZW1iZXIgTWF0Y2ggSm9iXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL3JlZmVyZW5jZS1maGlyLW9wZXJhdGlvbnMtYnVsay1tZW1iZXItbWF0Y2guaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RhcnRGSElSQnVsa01lbWJlck1hdGNoSm9iKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdTdGFydEZISVJCdWxrTWVtYmVyTWF0Y2hKb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBiZWdpbiBhIEZISVIgQnVsayBQYXRjaCBKb2JcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvcmVmZXJlbmNlLWZoaXItb3BlcmF0aW9ucy1idWxrLXBhdGNoLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1N0YXJ0RkhJUkJ1bGtQYXRjaEpvYigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnU3RhcnRGSElSQnVsa1BhdGNoSm9iJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYmVnaW4gYSBGSElSIEV4cG9ydCBqb2JcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9TdGFydEZISVJFeHBvcnRKb2IuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RhcnRGSElSRXhwb3J0Sm9iKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdTdGFydEZISVJFeHBvcnRKb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBiZWdpbiBhIEZISVIgRXhwb3J0IGpvYiB3aXRoIEdldFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9leHBvcnQtZGF0YXN0b3JlLXJlc3QuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RhcnRGSElSRXhwb3J0Sm9iV2l0aEdldCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnU3RhcnRGSElSRXhwb3J0Sm9iV2l0aEdldCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGJlZ2luIGEgRkhJUiBFeHBvcnQgam9iIHdpdGggUG9zdFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9leHBvcnQtZGF0YXN0b3JlLXJlc3QuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RhcnRGSElSRXhwb3J0Sm9iV2l0aFBvc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0YXJ0RkhJUkV4cG9ydEpvYldpdGhQb3N0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYmVnaW4gYSBGSElSIEltcG9ydCBqb2JcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9TdGFydEZISVJJbXBvcnRKb2IuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RhcnRGSElSSW1wb3J0Sm9iKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdTdGFydEZISVJJbXBvcnRKb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzdWJtaXQgYSBwcmlvciBhdXRob3JpemF0aW9uIENsYWltIHJlcXVlc3RcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvcmVmZXJlbmNlLWZoaXItb3BlcmF0aW9ucy1zdWJtaXQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3VibWl0UHJlQXV0aENsYWltKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdTdWJtaXRQcmVBdXRoQ2xhaW0nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBhZGQgdGFncyB0byBhIGRhdGFzdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFRhZ2dpbmcsIFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1RhZ1Jlc291cmNlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1RhZ1Jlc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdUYWdSZXNvdXJjZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHBlcmZvcm0gYSBzeW5jaHJvbm91cyBkYXRhIHRyYW5zZm9ybWF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL2RhdGEtdHJhbnNmb3JtYXRpb24tZ2V0dGluZy1zdGFydGVkLXNkay5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9UcmFuc2Zvcm1EYXRhKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdUcmFuc2Zvcm1EYXRhJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdHJhbnNsYXRlIGEgY29kZSBmcm9tIG9uZSB2YWx1ZSBzZXQgdG8gYW5vdGhlciB1c2luZyBhIENvbmNlcHRNYXAgcmVzb3VyY2Ugd2l0aCBHRVQgbWV0aG9kXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvcmVmZXJlbmNlLWZoaXItb3BlcmF0aW9ucy10cmFuc2xhdGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVHJhbnNsYXRlQ29uY2VwdE1hcFdpdGhHZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1RyYW5zbGF0ZUNvbmNlcHRNYXBXaXRoR2V0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdHJhbnNsYXRlIGEgY29kZSBmcm9tIG9uZSB2YWx1ZSBzZXQgdG8gYW5vdGhlciB1c2luZyBhIENvbmNlcHRNYXAgcmVzb3VyY2Ugd2l0aCBQT1NUIG1ldGhvZFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL3JlZmVyZW5jZS1maGlyLW9wZXJhdGlvbnMtdHJhbnNsYXRlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1RyYW5zbGF0ZUNvbmNlcHRNYXBXaXRoUG9zdCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVHJhbnNsYXRlQ29uY2VwdE1hcFdpdGhQb3N0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmVtb3ZlIHRhZ3MgYXNzb2NpYXRlZCB3aXRoIGEgZGF0YXN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogVGFnZ2luZywgV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfVW50YWdSZXNvdXJjZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VbnRhZ1Jlc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVbnRhZ1Jlc291cmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIHRoZSBkcmFmdCB2ZXJzaW9uIG9mIGEgZGF0YSB0cmFuc2Zvcm1hdGlvbiBwcm9maWxlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfVXBkYXRlRGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVEYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVEYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgZGF0YXN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfVXBkYXRlRkhJUkRhdGFzdG9yZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVGSElSRGF0YXN0b3JlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVGSElSRGF0YXN0b3JlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIGEgZGF0YSB0cmFuc2Zvcm1hdGlvbiBwcm9maWxlIHVzaW5nIHRoZSBBSSBhZ2VudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1VwZGF0ZVByb2ZpbGVXaXRoQWdlbnQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlUHJvZmlsZVdpdGhBZ2VudCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlUHJvZmlsZVdpdGhBZ2VudCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9oZWFsdGhsYWtlL2xhdGVzdC9kZXZndWlkZS9jcnVkLWhlYWx0aGxha2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlUmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZVJlc291cmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdmFsaWRhdGUgYSByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL3JlZmVyZW5jZS1maGlyLW9wZXJhdGlvbnMtdmFsaWRhdGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVmFsaWRhdGVSZXNvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVmFsaWRhdGVSZXNvdXJjZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHZhbGlkYXRlIHNvdXJjZSBkYXRhIGFnYWluc3QgZm9ybWF0IHNwZWNpZmljYXRpb25zXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaGVhbHRobGFrZS9sYXRlc3QvZGV2Z3VpZGUvZGF0YS10cmFuc2Zvcm1hdGlvbi1mZWF0dXJlcy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9WYWxpZGF0ZVNvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVmFsaWRhdGVTb3VyY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZWFkIHZlcnNpb24gb2YgYSByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L2Rldmd1aWRlL2NydWQtaGVhbHRobGFrZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9WZXJzaW9uUmVhZFJlc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdWZXJzaW9uUmVhZFJlc291cmNlJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWNjZXNzTGV2ZWxMaXN0OiBBY2Nlc3NMZXZlbExpc3QgPSB7XG4gICAgV3JpdGU6IFtcbiAgICAgICdDYW5jZWxGSElSRXhwb3J0Sm9iV2l0aERlbGV0ZScsXG4gICAgICAnQ29uZmlybUF0dHJpYnV0aW9uTGlzdCcsXG4gICAgICAnQ3JlYXRlRGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZScsXG4gICAgICAnQ3JlYXRlRkhJUkRhdGFzdG9yZScsXG4gICAgICAnQ3JlYXRlUmVzb3VyY2UnLFxuICAgICAgJ0RlbGV0ZURhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUnLFxuICAgICAgJ0RlbGV0ZUZISVJEYXRhc3RvcmUnLFxuICAgICAgJ0RlbGV0ZVJlc291cmNlJyxcbiAgICAgICdHZW5lcmF0ZURvY3VtZW50V2l0aEdldCcsXG4gICAgICAnR2VuZXJhdGVEb2N1bWVudFdpdGhQb3N0JyxcbiAgICAgICdNZW1iZXJBZGQnLFxuICAgICAgJ01lbWJlck1hdGNoJyxcbiAgICAgICdNZW1iZXJSZW1vdmUnLFxuICAgICAgJ1BhdGNoUmVzb3VyY2UnLFxuICAgICAgJ1Byb2Nlc3NCdW5kbGUnLFxuICAgICAgJ1B1Ymxpc2hEYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlJyxcbiAgICAgICdSZXN0b3JlRkhJUkRhdGFzdG9yZScsXG4gICAgICAnUmV0cmlldmVBdHRyaWJ1dGlvblN0YXR1cycsXG4gICAgICAnU3RhcnREYXRhVHJhbnNmb3JtYXRpb25Kb2InLFxuICAgICAgJ1N0YXJ0RkhJUkJ1bGtEZWxldGVKb2InLFxuICAgICAgJ1N0YXJ0RkhJUkJ1bGtNZW1iZXJNYXRjaEpvYicsXG4gICAgICAnU3RhcnRGSElSQnVsa1BhdGNoSm9iJyxcbiAgICAgICdTdGFydEZISVJFeHBvcnRKb2InLFxuICAgICAgJ1N0YXJ0RkhJUkV4cG9ydEpvYldpdGhHZXQnLFxuICAgICAgJ1N0YXJ0RkhJUkV4cG9ydEpvYldpdGhQb3N0JyxcbiAgICAgICdTdGFydEZISVJJbXBvcnRKb2InLFxuICAgICAgJ1N1Ym1pdFByZUF1dGhDbGFpbScsXG4gICAgICAnVGFnUmVzb3VyY2UnLFxuICAgICAgJ1RyYW5zZm9ybURhdGEnLFxuICAgICAgJ1VudGFnUmVzb3VyY2UnLFxuICAgICAgJ1VwZGF0ZURhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUnLFxuICAgICAgJ1VwZGF0ZUZISVJEYXRhc3RvcmUnLFxuICAgICAgJ1VwZGF0ZVByb2ZpbGVXaXRoQWdlbnQnLFxuICAgICAgJ1VwZGF0ZVJlc291cmNlJ1xuICAgIF0sXG4gICAgUmVhZDogW1xuICAgICAgJ0Rlc2NyaWJlRGF0YVRyYW5zZm9ybWF0aW9uSm9iJyxcbiAgICAgICdEZXNjcmliZUZISVJCdWxrRGVsZXRlSm9iJyxcbiAgICAgICdEZXNjcmliZUZISVJCdWxrTWVtYmVyTWF0Y2hKb2InLFxuICAgICAgJ0Rlc2NyaWJlRkhJUkJ1bGtQYXRjaEpvYicsXG4gICAgICAnRGVzY3JpYmVGSElSRGF0YXN0b3JlJyxcbiAgICAgICdEZXNjcmliZUZISVJFeHBvcnRKb2InLFxuICAgICAgJ0Rlc2NyaWJlRkhJUkV4cG9ydEpvYldpdGhHZXQnLFxuICAgICAgJ0Rlc2NyaWJlRkhJUkltcG9ydEpvYicsXG4gICAgICAnRXhwYW5kVmFsdWVTZXRXaXRoR2V0JyxcbiAgICAgICdFeHBhbmRWYWx1ZVNldFdpdGhQb3N0JyxcbiAgICAgICdHZXRDYXBhYmlsaXRpZXMnLFxuICAgICAgJ0dldERhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUnLFxuICAgICAgJ0dldEV4cG9ydGVkRmlsZScsXG4gICAgICAnR2V0SGlzdG9yeUJ5UmVzb3VyY2VJZCcsXG4gICAgICAnSW5xdWlyZVByZUF1dGhDbGFpbScsXG4gICAgICAnTG9va3VwQ29kZVN5c3RlbVdpdGhHZXQnLFxuICAgICAgJ0xvb2t1cENvZGVTeXN0ZW1XaXRoUG9zdCcsXG4gICAgICAnUXVlc3Rpb25uYWlyZVBhY2thZ2UnLFxuICAgICAgJ1JlYWRSZXNvdXJjZScsXG4gICAgICAnU2VhcmNoRXZlcnl0aGluZycsXG4gICAgICAnU2VhcmNoV2l0aEdldCcsXG4gICAgICAnU2VhcmNoV2l0aFBvc3QnLFxuICAgICAgJ1RyYW5zbGF0ZUNvbmNlcHRNYXBXaXRoR2V0JyxcbiAgICAgICdUcmFuc2xhdGVDb25jZXB0TWFwV2l0aFBvc3QnLFxuICAgICAgJ1ZhbGlkYXRlUmVzb3VyY2UnLFxuICAgICAgJ1ZhbGlkYXRlU291cmNlJyxcbiAgICAgICdWZXJzaW9uUmVhZFJlc291cmNlJ1xuICAgIF0sXG4gICAgTGlzdDogW1xuICAgICAgJ0xpc3REYXRhVHJhbnNmb3JtYXRpb25Kb2JzJyxcbiAgICAgICdMaXN0RGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZVZlcnNpb25zJyxcbiAgICAgICdMaXN0RGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZXMnLFxuICAgICAgJ0xpc3RGSElSRGF0YXN0b3JlcycsXG4gICAgICAnTGlzdEZISVJFeHBvcnRKb2JzJyxcbiAgICAgICdMaXN0RkhJUkltcG9ydEpvYnMnLFxuICAgICAgJ0xpc3RUYWdzRm9yUmVzb3VyY2UnXG4gICAgXSxcbiAgICBUYWdnaW5nOiBbXG4gICAgICAnVGFnUmVzb3VyY2UnLFxuICAgICAgJ1VudGFnUmVzb3VyY2UnXG4gICAgXVxuICB9O1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSBkYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlIHRvIHRoZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZVN1bW1hcnkuaHRtbFxuICAgKlxuICAgKiBAcGFyYW0gcHJvZmlsZUlkIC0gSWRlbnRpZmllciBmb3IgdGhlIHByb2ZpbGVJZC5cbiAgICogQHBhcmFtIGFjY291bnQgLSBBY2NvdW50IG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBhY2NvdW50LlxuICAgKiBAcGFyYW0gcmVnaW9uIC0gUmVnaW9uIG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyByZWdpb24uXG4gICAqIEBwYXJhbSBwYXJ0aXRpb24gLSBQYXJ0aXRpb24gb2YgdGhlIEFXUyBhY2NvdW50IFthd3MsIGF3cy1jbiwgYXdzLXVzLWdvdl07IGRlZmF1bHRzIHRvIGBhd3NgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBwYXJ0aXRpb24uXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVzb3VyY2VUYWcoKVxuICAgKi9cbiAgcHVibGljIG9uRGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZShwcm9maWxlSWQ6IHN0cmluZywgYWNjb3VudD86IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBwYXJ0aXRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vbihgYXJuOiR7IHBhcnRpdGlvbiA/PyB0aGlzLmRlZmF1bHRQYXJ0aXRpb24gfTpoZWFsdGhsYWtlOiR7IHJlZ2lvbiA/PyB0aGlzLmRlZmF1bHRSZWdpb24gfTokeyBhY2NvdW50ID8/IHRoaXMuZGVmYXVsdEFjY291bnQgfTpkYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlLyR7IHByb2ZpbGVJZCB9YCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHJlc291cmNlIG9mIHR5cGUgZGF0YXN0b3JlIHRvIHRoZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2hlYWx0aGxha2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGF0YXN0b3JlUHJvcGVydGllcy5odG1sXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhc3RvcmVJZCAtIElkZW50aWZpZXIgZm9yIHRoZSBkYXRhc3RvcmVJZC5cbiAgICogQHBhcmFtIGFjY291bnQgLSBBY2NvdW50IG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBhY2NvdW50LlxuICAgKiBAcGFyYW0gcmVnaW9uIC0gUmVnaW9uIG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyByZWdpb24uXG4gICAqIEBwYXJhbSBwYXJ0aXRpb24gLSBQYXJ0aXRpb24gb2YgdGhlIEFXUyBhY2NvdW50IFthd3MsIGF3cy1jbiwgYXdzLXVzLWdvdl07IGRlZmF1bHRzIHRvIGBhd3NgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBwYXJ0aXRpb24uXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVzb3VyY2VUYWcoKVxuICAgKi9cbiAgcHVibGljIG9uRGF0YXN0b3JlKGRhdGFzdG9yZUlkOiBzdHJpbmcsIGFjY291bnQ/OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgcGFydGl0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub24oYGFybjokeyBwYXJ0aXRpb24gPz8gdGhpcy5kZWZhdWx0UGFydGl0aW9uIH06aGVhbHRobGFrZTokeyByZWdpb24gPz8gdGhpcy5kZWZhdWx0UmVnaW9uIH06JHsgYWNjb3VudCA/PyB0aGlzLmRlZmF1bHRBY2NvdW50IH06ZGF0YXN0b3JlL2ZoaXIvJHsgZGF0YXN0b3JlSWQgfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgYWNjZXNzIGJ5IHRoZSBwcmVzZW5jZSBvZiB0YWcga2V5LXZhbHVlIHBhaXJzIGluIHRoZSByZXF1ZXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfY29uZGl0aW9uLWtleXMuaHRtbCNjb25kaXRpb24ta2V5cy1yZXF1ZXN0dGFnXG4gICAqXG4gICAqIEFwcGxpZXMgdG8gYWN0aW9uczpcbiAgICogLSAudG9DcmVhdGVEYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlKClcbiAgICogLSAudG9DcmVhdGVGSElSRGF0YXN0b3JlKClcbiAgICogLSAudG9SZXN0b3JlRkhJUkRhdGFzdG9yZSgpXG4gICAqIC0gLnRvVGFnUmVzb3VyY2UoKVxuICAgKlxuICAgKiBAcGFyYW0gdGFnS2V5IFRoZSB0YWcga2V5IHRvIGNoZWNrXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUocykgdG8gY2hlY2tcbiAgICogQHBhcmFtIG9wZXJhdG9yIFdvcmtzIHdpdGggW3N0cmluZyBvcGVyYXRvcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sI0NvbmRpdGlvbnNfU3RyaW5nKS4gKipEZWZhdWx0OioqIGBTdHJpbmdMaWtlYFxuICAgKi9cbiAgcHVibGljIGlmQXdzUmVxdWVzdFRhZyh0YWdLZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdLCBvcGVyYXRvcj86IE9wZXJhdG9yIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaWYoYGF3czpSZXF1ZXN0VGFnLyR7IHRhZ0tleSB9YCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgdGhlIHByZXNlbmNlIG9mIHRhZyBrZXktdmFsdWUgcGFpcnMgYXR0YWNoZWQgdG8gdGhlIHJlc291cmNlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfY29uZGl0aW9uLWtleXMuaHRtbCNjb25kaXRpb24ta2V5cy1yZXNvdXJjZXRhZ1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIGFjdGlvbnM6XG4gICAqIC0gLnRvQ2FuY2VsRkhJUkV4cG9ydEpvYldpdGhEZWxldGUoKVxuICAgKiAtIC50b0NvbmZpcm1BdHRyaWJ1dGlvbkxpc3QoKVxuICAgKiAtIC50b0NyZWF0ZURhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUoKVxuICAgKiAtIC50b0NyZWF0ZUZISVJEYXRhc3RvcmUoKVxuICAgKiAtIC50b0NyZWF0ZVJlc291cmNlKClcbiAgICogLSAudG9EZWxldGVEYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlKClcbiAgICogLSAudG9EZWxldGVGSElSRGF0YXN0b3JlKClcbiAgICogLSAudG9EZWxldGVSZXNvdXJjZSgpXG4gICAqIC0gLnRvRGVzY3JpYmVGSElSQnVsa0RlbGV0ZUpvYigpXG4gICAqIC0gLnRvRGVzY3JpYmVGSElSQnVsa01lbWJlck1hdGNoSm9iKClcbiAgICogLSAudG9EZXNjcmliZUZISVJCdWxrUGF0Y2hKb2IoKVxuICAgKiAtIC50b0Rlc2NyaWJlRkhJUkRhdGFzdG9yZSgpXG4gICAqIC0gLnRvRGVzY3JpYmVGSElSRXhwb3J0Sm9iKClcbiAgICogLSAudG9EZXNjcmliZUZISVJFeHBvcnRKb2JXaXRoR2V0KClcbiAgICogLSAudG9EZXNjcmliZUZISVJJbXBvcnRKb2IoKVxuICAgKiAtIC50b0V4cGFuZFZhbHVlU2V0V2l0aEdldCgpXG4gICAqIC0gLnRvRXhwYW5kVmFsdWVTZXRXaXRoUG9zdCgpXG4gICAqIC0gLnRvR2VuZXJhdGVEb2N1bWVudFdpdGhHZXQoKVxuICAgKiAtIC50b0dlbmVyYXRlRG9jdW1lbnRXaXRoUG9zdCgpXG4gICAqIC0gLnRvR2V0Q2FwYWJpbGl0aWVzKClcbiAgICogLSAudG9HZXREYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlKClcbiAgICogLSAudG9HZXRFeHBvcnRlZEZpbGUoKVxuICAgKiAtIC50b0dldEhpc3RvcnlCeVJlc291cmNlSWQoKVxuICAgKiAtIC50b0lucXVpcmVQcmVBdXRoQ2xhaW0oKVxuICAgKiAtIC50b0xpc3REYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlVmVyc2lvbnMoKVxuICAgKiAtIC50b0xpc3RGSElSRXhwb3J0Sm9icygpXG4gICAqIC0gLnRvTGlzdEZISVJJbXBvcnRKb2JzKClcbiAgICogLSAudG9MaXN0VGFnc0ZvclJlc291cmNlKClcbiAgICogLSAudG9Mb29rdXBDb2RlU3lzdGVtV2l0aEdldCgpXG4gICAqIC0gLnRvTG9va3VwQ29kZVN5c3RlbVdpdGhQb3N0KClcbiAgICogLSAudG9NZW1iZXJBZGQoKVxuICAgKiAtIC50b01lbWJlck1hdGNoKClcbiAgICogLSAudG9NZW1iZXJSZW1vdmUoKVxuICAgKiAtIC50b1BhdGNoUmVzb3VyY2UoKVxuICAgKiAtIC50b1Byb2Nlc3NCdW5kbGUoKVxuICAgKiAtIC50b1B1Ymxpc2hEYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlKClcbiAgICogLSAudG9RdWVzdGlvbm5haXJlUGFja2FnZSgpXG4gICAqIC0gLnRvUmVhZFJlc291cmNlKClcbiAgICogLSAudG9SZXN0b3JlRkhJUkRhdGFzdG9yZSgpXG4gICAqIC0gLnRvUmV0cmlldmVBdHRyaWJ1dGlvblN0YXR1cygpXG4gICAqIC0gLnRvU2VhcmNoRXZlcnl0aGluZygpXG4gICAqIC0gLnRvU2VhcmNoV2l0aEdldCgpXG4gICAqIC0gLnRvU2VhcmNoV2l0aFBvc3QoKVxuICAgKiAtIC50b1N0YXJ0RGF0YVRyYW5zZm9ybWF0aW9uSm9iKClcbiAgICogLSAudG9TdGFydEZISVJCdWxrRGVsZXRlSm9iKClcbiAgICogLSAudG9TdGFydEZISVJCdWxrTWVtYmVyTWF0Y2hKb2IoKVxuICAgKiAtIC50b1N0YXJ0RkhJUkJ1bGtQYXRjaEpvYigpXG4gICAqIC0gLnRvU3RhcnRGSElSRXhwb3J0Sm9iKClcbiAgICogLSAudG9TdGFydEZISVJFeHBvcnRKb2JXaXRoR2V0KClcbiAgICogLSAudG9TdGFydEZISVJFeHBvcnRKb2JXaXRoUG9zdCgpXG4gICAqIC0gLnRvU3RhcnRGSElSSW1wb3J0Sm9iKClcbiAgICogLSAudG9TdWJtaXRQcmVBdXRoQ2xhaW0oKVxuICAgKiAtIC50b1RhZ1Jlc291cmNlKClcbiAgICogLSAudG9UcmFuc2Zvcm1EYXRhKClcbiAgICogLSAudG9UcmFuc2xhdGVDb25jZXB0TWFwV2l0aEdldCgpXG4gICAqIC0gLnRvVHJhbnNsYXRlQ29uY2VwdE1hcFdpdGhQb3N0KClcbiAgICogLSAudG9VbnRhZ1Jlc291cmNlKClcbiAgICogLSAudG9VcGRhdGVEYXRhVHJhbnNmb3JtYXRpb25Qcm9maWxlKClcbiAgICogLSAudG9VcGRhdGVGSElSRGF0YXN0b3JlKClcbiAgICogLSAudG9VcGRhdGVQcm9maWxlV2l0aEFnZW50KClcbiAgICogLSAudG9VcGRhdGVSZXNvdXJjZSgpXG4gICAqIC0gLnRvVmFsaWRhdGVSZXNvdXJjZSgpXG4gICAqIC0gLnRvVmVyc2lvblJlYWRSZXNvdXJjZSgpXG4gICAqXG4gICAqIEFwcGxpZXMgdG8gcmVzb3VyY2UgdHlwZXM6XG4gICAqIC0gZGF0YVRyYW5zZm9ybWF0aW9uUHJvZmlsZVxuICAgKiAtIGRhdGFzdG9yZVxuICAgKlxuICAgKiBAcGFyYW0gdGFnS2V5IFRoZSB0YWcga2V5IHRvIGNoZWNrXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUocykgdG8gY2hlY2tcbiAgICogQHBhcmFtIG9wZXJhdG9yIFdvcmtzIHdpdGggW3N0cmluZyBvcGVyYXRvcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sI0NvbmRpdGlvbnNfU3RyaW5nKS4gKipEZWZhdWx0OioqIGBTdHJpbmdMaWtlYFxuICAgKi9cbiAgcHVibGljIGlmQXdzUmVzb3VyY2VUYWcodGFnS2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSwgb3BlcmF0b3I/OiBPcGVyYXRvciB8IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmlmKGBhd3M6UmVzb3VyY2VUYWcvJHsgdGFnS2V5IH1gLCB2YWx1ZSwgb3BlcmF0b3IgPz8gJ1N0cmluZ0xpa2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIGFjY2VzcyBieSB0aGUgcHJlc2VuY2Ugb2YgdGFnIGtleXMgaW4gdGhlIHJlcXVlc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19jb25kaXRpb24ta2V5cy5odG1sI2NvbmRpdGlvbi1rZXlzLXRhZ2tleXNcbiAgICpcbiAgICogQXBwbGllcyB0byBhY3Rpb25zOlxuICAgKiAtIC50b0NyZWF0ZURhdGFUcmFuc2Zvcm1hdGlvblByb2ZpbGUoKVxuICAgKiAtIC50b0NyZWF0ZUZISVJEYXRhc3RvcmUoKVxuICAgKiAtIC50b1Jlc3RvcmVGSElSRGF0YXN0b3JlKClcbiAgICogLSAudG9UYWdSZXNvdXJjZSgpXG4gICAqIC0gLnRvVW50YWdSZXNvdXJjZSgpXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUocykgdG8gY2hlY2tcbiAgICogQHBhcmFtIG9wZXJhdG9yIFdvcmtzIHdpdGggW3N0cmluZyBvcGVyYXRvcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sI0NvbmRpdGlvbnNfU3RyaW5nKS4gKipEZWZhdWx0OioqIGBTdHJpbmdMaWtlYFxuICAgKi9cbiAgcHVibGljIGlmQXdzVGFnS2V5cyh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgYXdzOlRhZ0tleXNgLCB2YWx1ZSwgb3BlcmF0b3IgPz8gJ1N0cmluZ0xpa2UnKTtcbiAgfVxufVxuIl19
@@ -122,7 +122,7 @@ export declare class Notifications extends PolicyStatement {
122
122
  */
123
123
  toDisassociateManagedNotificationAdditionalChannel(): this;
124
124
  /**
125
- * Grants permission to disassociate an Organizational Unit to a particular Notification Configuration
125
+ * Grants permission to remove an Organizational Unit from a NotificationConfiguration
126
126
  *
127
127
  * Access Level: Write
128
128
  *
@@ -242,7 +242,7 @@ export declare class Notifications extends PolicyStatement {
242
242
  */
243
243
  toListManagedNotificationEvents(): this;
244
244
  /**
245
- * Grants permission to list Member Accounts for a Notification Configuration
245
+ * Grants permission to list MemberAccounts by AdminNotificationConfiguration
246
246
  *
247
247
  * Access Level: List
248
248
  *
@@ -274,7 +274,7 @@ export declare class Notifications extends PolicyStatement {
274
274
  */
275
275
  toListNotificationHubs(): this;
276
276
  /**
277
- * Grants permission to list Organizational Units for a Notification Configuration
277
+ * Grants permission to list Organizational Units by NotificationConfiguration
278
278
  *
279
279
  * Access Level: List
280
280
  *
@@ -321,6 +321,14 @@ export declare class Notifications extends PolicyStatement {
321
321
  * https://docs.aws.amazon.com/notifications/latest/APIReference/API_UpdateEventRule.html
322
322
  */
323
323
  toUpdateEventRule(): this;
324
+ /**
325
+ * Grants permission to toggle the sensitive-events subscription on an existing Managed Notification channel association
326
+ *
327
+ * Access Level: Write
328
+ *
329
+ * https://docs.aws.amazon.com/notifications/latest/APIReference/API_UpdateManagedNotificationChannelAssociation.html
330
+ */
331
+ toUpdateManagedNotificationChannelAssociation(): this;
324
332
  /**
325
333
  * Grants permission to update a NotificationConfiguration
326
334
  *
@@ -329,6 +337,14 @@ export declare class Notifications extends PolicyStatement {
329
337
  * https://docs.aws.amazon.com/notifications/latest/APIReference/API_UpdateNotificationConfiguration.html
330
338
  */
331
339
  toUpdateNotificationConfiguration(): this;
340
+ /**
341
+ * Grants permission to access sensitive Notification events
342
+ *
343
+ * Access Level: Read
344
+ *
345
+ * https://docs.aws.amazon.com/notifications/latest/userguide/AccessSensitiveEvents-security-iam.html
346
+ */
347
+ toAccessSensitiveEvents(): this;
332
348
  /**
333
349
  * Grants permission to read the opt-in status of an AWS User Notification Service feature
334
350
  *
@@ -345,6 +361,14 @@ export declare class Notifications extends PolicyStatement {
345
361
  * https://docs.aws.amazon.com/notifications/latest/userguide/managing-notification-features.html
346
362
  */
347
363
  toPutFeatureOptInStatus(): this;
364
+ /**
365
+ * Grants permission to subscribe to sensitive events on an existing Managed Notification channel association
366
+ *
367
+ * Access Level: Write
368
+ *
369
+ * https://docs.aws.amazon.com/notifications/latest/userguide/SubscribeSensitiveEvents-security-iam.html
370
+ */
371
+ toSubscribeSensitiveEvents(): this;
348
372
  protected accessLevelList: AccessLevelList;
349
373
  /**
350
374
  * Adds a resource of type EventRule to the statement