jsii-pacmak 1.41.0 → 1.42.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.
@@ -1,6 +1,6 @@
1
1
  import * as spec from '@jsii/spec';
2
2
  import { CodeMaker } from 'codemaker';
3
- import { Rosetta } from 'jsii-rosetta';
3
+ import { Rosetta, ApiLocation } from 'jsii-rosetta';
4
4
  /**
5
5
  * Generates the Jsii attributes and calls for the .NET runtime
6
6
  *
@@ -22,8 +22,8 @@ export declare class DotNetDocGenerator {
22
22
  * Returns
23
23
  * Remarks (includes examples, links, deprecated)
24
24
  */
25
- emitDocs(obj: spec.Documentable): void;
26
- emitMarkdownAsRemarks(markdown: string | undefined): void;
25
+ emitDocs(obj: spec.Documentable, apiLocation: ApiLocation): void;
26
+ emitMarkdownAsRemarks(markdown: string | undefined, apiLocation: ApiLocation): void;
27
27
  /**
28
28
  * Returns the lines that should go into the <remarks> section
29
29
  */
@@ -29,7 +29,7 @@ class DotNetDocGenerator {
29
29
  * Returns
30
30
  * Remarks (includes examples, links, deprecated)
31
31
  */
32
- emitDocs(obj) {
32
+ emitDocs(obj, apiLocation) {
33
33
  const docs = obj.docs;
34
34
  // The docs may be undefined at the method level but not the parameters level
35
35
  this.emitXmlDoc('summary', _utils_1.renderSummary(obj.docs));
@@ -57,7 +57,7 @@ class DotNetDocGenerator {
57
57
  // Remarks does not use emitXmlDoc() because the remarks can contain code blocks
58
58
  // which are fenced with <code> tags, which would be escaped to
59
59
  // &lt;code&gt; if we used the xml builder.
60
- const remarks = this.renderRemarks(docs);
60
+ const remarks = this.renderRemarks(docs, apiLocation);
61
61
  if (remarks.length > 0) {
62
62
  this.code.line('/// <remarks>');
63
63
  remarks.forEach((r) => this.code.line(`/// ${r}`.trimRight()));
@@ -65,15 +65,15 @@ class DotNetDocGenerator {
65
65
  }
66
66
  if (docs.example) {
67
67
  this.code.line('/// <example>');
68
- this.emitXmlDoc('code', this.convertExample(docs.example));
68
+ this.emitXmlDoc('code', this.convertExample(docs.example, apiLocation));
69
69
  this.code.line('/// </example>');
70
70
  }
71
71
  }
72
- emitMarkdownAsRemarks(markdown) {
72
+ emitMarkdownAsRemarks(markdown, apiLocation) {
73
73
  if (!markdown) {
74
74
  return;
75
75
  }
76
- const translated = jsii_rosetta_1.markDownToXmlDoc(this.convertSamplesInMarkdown(markdown));
76
+ const translated = jsii_rosetta_1.markDownToXmlDoc(this.convertSamplesInMarkdown(markdown, apiLocation));
77
77
  const lines = translated.split('\n');
78
78
  this.code.line('/// <remarks>');
79
79
  for (const line of lines) {
@@ -84,11 +84,11 @@ class DotNetDocGenerator {
84
84
  /**
85
85
  * Returns the lines that should go into the <remarks> section
86
86
  */
87
- renderRemarks(docs) {
87
+ renderRemarks(docs, apiLocation) {
88
88
  var _a;
89
89
  const ret = [];
90
90
  if (docs.remarks) {
91
- const translated = jsii_rosetta_1.markDownToXmlDoc(this.convertSamplesInMarkdown(docs.remarks));
91
+ const translated = jsii_rosetta_1.markDownToXmlDoc(this.convertSamplesInMarkdown(docs.remarks, apiLocation));
92
92
  ret.push(...translated.split('\n'));
93
93
  ret.push('');
94
94
  }
@@ -124,16 +124,12 @@ class DotNetDocGenerator {
124
124
  ret.push('');
125
125
  }
126
126
  }
127
- convertExample(example) {
128
- const snippet = jsii_rosetta_1.typeScriptSnippetFromSource(example, 'example', jsii_rosetta_1.enforcesStrictMode(this.assembly));
129
- const translated = this.rosetta.translateSnippet(snippet, jsii_rosetta_1.TargetLanguage.CSHARP);
130
- if (!translated) {
131
- return example;
132
- }
127
+ convertExample(example, apiLocation) {
128
+ const translated = this.rosetta.translateExample(apiLocation, example, jsii_rosetta_1.TargetLanguage.CSHARP, jsii_rosetta_1.enforcesStrictMode(this.assembly));
133
129
  return this.prefixDisclaimer(translated);
134
130
  }
135
- convertSamplesInMarkdown(markdown) {
136
- return this.rosetta.translateSnippetsInMarkdown(markdown, jsii_rosetta_1.TargetLanguage.CSHARP, jsii_rosetta_1.enforcesStrictMode(this.assembly), (trans) => ({
131
+ convertSamplesInMarkdown(markdown, api) {
132
+ return this.rosetta.translateSnippetsInMarkdown(api, markdown, jsii_rosetta_1.TargetLanguage.CSHARP, jsii_rosetta_1.enforcesStrictMode(this.assembly), (trans) => ({
137
133
  language: trans.language,
138
134
  source: this.prefixDisclaimer(trans),
139
135
  }));
@@ -172,4 +168,4 @@ function shouldMentionStability(s) {
172
168
  // Don't render "stable" or "external", those are both stable by implication
173
169
  return s === spec.Stability.Deprecated || s === spec.Stability.Experimental;
174
170
  }
175
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG90bmV0ZG9jZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZG90bmV0ZG9jZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFtQztBQUVuQywrQ0FPc0I7QUFDdEIseUNBQXlDO0FBRXpDLDBCQUdZO0FBQ1osc0NBQTBDO0FBQzFDLDJDQUE4QztBQUU5Qzs7OztHQUlHO0FBQ0gsTUFBYSxrQkFBa0I7SUFJN0IsWUFDRSxJQUFlLEVBQ0UsT0FBZ0IsRUFDaEIsUUFBdUI7UUFEdkIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixhQUFRLEdBQVIsUUFBUSxDQUFlO1FBTHpCLGNBQVMsR0FBb0IsSUFBSSwyQkFBZSxFQUFFLENBQUM7UUFPbEUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLFFBQVEsQ0FBQyxHQUFzQjtRQUNwQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBRXRCLDZFQUE2RTtRQUM3RSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxzQkFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRXBELGtEQUFrRDtRQUNsRCxNQUFNLFNBQVMsR0FBRyxHQUFrQixDQUFDO1FBQ3JDLElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRTtZQUN4QixTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFOztnQkFDckMsbUZBQW1GO2dCQUNuRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUztxQkFDN0Isb0JBQW9CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztxQkFDaEMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLGNBQUUsS0FBSyxDQUFDLElBQUksMENBQUUsT0FB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LENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsQ0FBaUI7SUFDL0MsNEVBQTRFO0lBQzVFLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztBQUM5RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc3BlYyBmcm9tICdAanNpaS9zcGVjJztcbmltcG9ydCB7IENvZGVNYWtlciB9IGZyb20gJ2NvZGVtYWtlcic7XG5pbXBvcnQge1xuICBSb3NldHRhLFxuICBUYXJnZXRMYW5ndWFnZSxcbiAgVHJhbnNsYXRpb24sXG4gIGVuZm9yY2VzU3RyaWN0TW9kZSxcbiAgdHlwZVNjcmlwdFNuaXBwZXRGcm9tU291cmNlLFxuICBtYXJrRG93blRvWG1sRG9jLFxufSBmcm9tICdqc2lpLXJvc2V0dGEnO1xuaW1wb3J0ICogYXMgeG1sYnVpbGRlciBmcm9tICd4bWxidWlsZGVyJztcblxuaW1wb3J0IHtcbiAgSU5DT01QTEVURV9ESVNDTEFJTUVSX0NPTVBJTElORyxcbiAgSU5DT01QTEVURV9ESVNDTEFJTUVSX05PTkNPTVBJTElORyxcbn0gZnJvbSAnLi4nO1xuaW1wb3J0IHsgcmVuZGVyU3VtbWFyeSB9IGZyb20gJy4uL191dGlscyc7XG5pbXBvcnQgeyBEb3ROZXROYW1lVXRpbHMgfSBmcm9tICcuL25hbWV1dGlscyc7XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBKc2lpIGF0dHJpYnV0ZXMgYW5kIGNhbGxzIGZvciB0aGUgLk5FVCBydW50aW1lXG4gKlxuICogVXNlcyB0aGUgc2FtZSBpbnN0YW5jZSBvZiBDb2RlTWFrZXIgYXMgdGhlIHJlc3Qgb2YgdGhlIGNvZGVcbiAqL1xuZXhwb3J0IGNsYXNzIERvdE5ldERvY0dlbmVyYXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29kZTogQ29kZU1ha2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IG5hbWV1dGlsczogRG90TmV0TmFtZVV0aWxzID0gbmV3IERvdE5ldE5hbWVVdGlscygpO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBjb2RlOiBDb2RlTWFrZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3NldHRhOiBSb3NldHRhLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXNzZW1ibHk6IHNwZWMuQXNzZW1ibHksXG4gICkge1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgYWxsIGRvY3VtZW50YXRpb24gZGVwZW5kaW5nIG9uIHdoYXQgaXMgYXZhaWxhYmxlIGluIHRoZSBqc2lpIG1vZGVsXG4gICAqXG4gICAqIFVzZWQgYnkgYWxsIGtpbmQgb2YgbWVtYmVycyArIGNsYXNzZXMsIGludGVyZmFjZXMsIGVudW1zXG4gICAqIE9yZGVyIHNob3VsZCBiZVxuICAgKiBTdW1tYXJ5XG4gICAqIFBhcmFtXG4gICAqIFJldHVybnNcbiAgICogUmVtYXJrcyAoaW5jbHVkZXMgZXhhbXBsZXMsIGxpbmtzLCBkZXByZWNhdGVkKVxuICAgKi9cbiAgcHVibGljIGVtaXREb2NzKG9iajogc3BlYy5Eb2N1bWVudGFibGUpOiB2b2lkIHtcbiAgICBjb25zdCBkb2NzID0gb2JqLmRvY3M7XG5cbiAgICAvLyBUaGUgZG9jcyBtYXkgYmUgdW5kZWZpbmVkIGF0IHRoZSBtZXRob2QgbGV2ZWwgYnV0IG5vdCB0aGUgcGFyYW1ldGVycyBsZXZlbFxuICAgIHRoaXMuZW1pdFhtbERvYygnc3VtbWFyeScsIHJlbmRlclN1bW1hcnkob2JqLmRvY3MpKTtcblxuICAgIC8vIEhhbmRsaW5nIHBhcmFtZXRlcnMgb25seSBpZiB0aGUgb2JqIGlzIGEgbWV0aG9kXG4gICAgY29uc3Qgb2JqTWV0aG9kID0gb2JqIGFzIHNwZWMuTWV0aG9kO1xuICAgIGlmIChvYmpNZXRob2QucGFyYW1ldGVycykge1xuICAgICAgb2JqTWV0aG9kLnBhcmFtZXRlcnMuZm9yRWFjaCgocGFyYW0pID0+IHtcbiAgICAgICAgLy8gUmVtb3ZlIGFueSBzbHVnIGBAYCBmcm9tIHRoZSBwYXJhbWV0ZXIgbmFtZSAtIGl0J3Mgbm90IHN1cHBvc2VkIHRvIHNob3cgdXAgaGVyZS5cbiAgICAgICAgY29uc3QgcGFyYW1OYW1lID0gdGhpcy5uYW1ldXRpbHNcbiAgICAgICAgICAuY29udmVydFBhcmFtZXRlck5hbWUocGFyYW0ubmFtZSlcbiAgICAgICAgICAucmVwbGFjZSgvXkAvLCAnJyk7XG4gICAgICAgIHRoaXMuZW1pdFhtbERvYygncGFyYW0nLCBwYXJhbS5kb2NzPy5zdW1tYXJ5ID8/ICcnLCB7XG4gICAgICAgICAgYXR0cmlidXRlczogeyBuYW1lOiBwYXJhbU5hbWUgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBdCB0aGlzIHBkb2NmeCBuYW1lc3BhY2Vkb2NkIGEgdmFsaWQgaW5zdGFuY2Ugb2YgZG9jc1xuICAgIGlmICghZG9jcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkb2NzLnJldHVybnMpIHtcbiAgICAgIHRoaXMuZW1pdFhtbERvYygncmV0dXJucycsIGRvY3MucmV0dXJucyk7XG4gICAgfVxuXG4gICAgLy8gUmVtYXJrcyBkb2VzIG5vdCB1c2UgZW1pdFhtbERvYygpIGJlY2F1c2UgdGhlIHJlbWFya3MgY2FuIGNvbnRhaW4gY29kZSBibG9ja3NcbiAgICAvLyB3aGljaCBhcmUgZmVuY2VkIHdpdGggPGNvZGU+IHRhZ3MsIHdoaWNoIHdvdWxkIGJlIGVzY2FwZWQgdG9cbiAgICAvLyAmbHQ7Y29kZSZndDsgaWYgd2UgdXNlZCB0aGUgeG1sIGJ1aWxkZXIuXG4gICAgY29uc3QgcmVtYXJrcyA9IHRoaXMucmVuZGVyUmVtYXJrcyhkb2NzKTtcbiAgICBpZiAocmVtYXJrcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNvZGUubGluZSgnLy8vIDxyZW1hcmtzPicpO1xuICAgICAgcmVtYXJrcy5mb3JFYWNoKChyKSA9PiB0aGlzLmNvZGUubGluZShgLy8vICR7cn1gLnRyaW1SaWdodCgpKSk7XG4gICAgICB0aGlzLmNvZGUubGluZSgnLy8vIDwvcmVtYXJrcz4nKTtcbiAgICB9XG5cbiAgICBpZiAoZG9jcy5leGFtcGxlKSB7XG4gICAgICB0aGlzLmNvZGUubGluZSgnLy8vIDxleGFtcGxlPicpO1xuICAgICAgdGhpcy5lbWl0WG1sRG9jKCdjb2RlJywgdGhpcy5jb252ZXJ0RXhhbXBsZShkb2NzLmV4YW1wbGUpKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKCcvLy8gPC9leGFtcGxlPicpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBlbWl0TWFya2Rvd25Bc1JlbWFya3MobWFya2Rvd246IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghbWFya2Rvd24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2xhdGVkID0gbWFya0Rvd25Ub1htbERvYyhcbiAgICAgIHRoaXMuY29udmVydFNhbXBsZXNJbk1hcmtkb3duKG1hcmtkb3duKSxcbiAgICApO1xuICAgIGNvbnN0IGxpbmVzID0gdHJhbnNsYXRlZC5zcGxpdCgnXFxuJyk7XG5cbiAgICB0aGlzLmNvZGUubGluZSgnLy8vIDxyZW1hcmtzPicpO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoYC8vLyAke2xpbmV9YC50cmltUmlnaHQoKSk7XG4gICAgfVxuICAgIHRoaXMuY29kZS5saW5lKCcvLy8gPC9yZW1hcmtzPicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxpbmVzIHRoYXQgc2hvdWxkIGdvIGludG8gdGhlIDxyZW1hcmtzPiBzZWN0aW9uXG4gICAqL1xuICBwcml2YXRlIHJlbmRlclJlbWFya3MoZG9jczogc3BlYy5Eb2NzKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJldDogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmIChkb2NzLnJlbWFya3MpIHtcbiAgICAgIGNvbnN0IHRyYW5zbGF0ZWQgPSBtYXJrRG93blRvWG1sRG9jKFxuICAgICAgICB0aGlzLmNvbnZlcnRTYW1wbGVzSW5NYXJrZG93bihkb2NzLnJlbWFya3MpLFxuICAgICAgKTtcbiAgICAgIHJldC5wdXNoKC4uLnRyYW5zbGF0ZWQuc3BsaXQoJ1xcbicpKTtcbiAgICAgIHJldC5wdXNoKCcnKTtcbiAgICB9XG5cbiAgICAvLyBBbGwgdGhlIFwidGFnc1wiIG5lZWQgdG8gYmUgcmVuZGVyZWQgd2l0aCBlbXB5dCBsaW5lcyBiZXR3ZWVuIHRoZW0gb3IgdGhleSdsbCBiZSB3b3JkIHdyYXBwZWQuXG5cbiAgICBpZiAoZG9jcy5kZWZhdWx0KSB7XG4gICAgICBlbWl0RG9jQXR0cmlidXRlKCdkZWZhdWx0JywgZG9jcy5kZWZhdWx0KTtcbiAgICB9XG4gICAgaWYgKGRvY3Muc3RhYmlsaXR5ICYmIHNob3VsZE1lbnRpb25TdGFiaWxpdHkoZG9jcy5zdGFiaWxpdHkpKSB7XG4gICAgICBlbWl0RG9jQXR0cmlidXRlKFxuICAgICAgICAnc3RhYmlsaXR5JyxcbiAgICAgICAgdGhpcy5uYW1ldXRpbHMuY2FwaXRhbGl6ZVdvcmQoZG9jcy5zdGFiaWxpdHkpLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGRvY3Muc2VlKSB7XG4gICAgICBlbWl0RG9jQXR0cmlidXRlKCdzZWUnLCBkb2NzLnNlZSk7XG4gICAgfVxuICAgIGlmIChkb2NzLnN1YmNsYXNzYWJsZSkge1xuICAgICAgZW1pdERvY0F0dHJpYnV0ZSgnc3ViY2xhc3NhYmxlJywgJycpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhkb2NzLmN1c3RvbSA/PyB7fSkpIHtcbiAgICAgIGNvbnN0IGV4dHJhU3BhY2UgPSBrID09PSAnbGluaycgPyAnICcgOiAnJzsgLy8gRXh0cmEgc3BhY2UgZm9yICdAbGluaycgdG8ga2VlcCB1bml0IHRlc3RzIGhhcHB5XG4gICAgICBlbWl0RG9jQXR0cmlidXRlKGssIHYgKyBleHRyYVNwYWNlKTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgZW1wdHkgbGluZXNcbiAgICB3aGlsZSAocmV0Lmxlbmd0aCA+IDAgJiYgcmV0WzBdID09PSAnJykge1xuICAgICAgcmV0LnNoaWZ0KCk7XG4gICAgfVxuICAgIHdoaWxlIChyZXQubGVuZ3RoID4gMCAmJiByZXRbcmV0Lmxlbmd0aCAtIDFdID09PSAnJykge1xuICAgICAgcmV0LnBvcCgpO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG5cbiAgICBmdW5jdGlvbiBlbWl0RG9jQXR0cmlidXRlKG5hbWU6IHN0cmluZywgY29udGVudHM6IHN0cmluZykge1xuICAgICAgY29uc3QgbHMgPSBjb250ZW50cy5zcGxpdCgnXFxuJyk7XG4gICAgICByZXQucHVzaChgPHN0cm9uZz4ke3VjRmlyc3QobmFtZSl9PC9zdHJvbmc+OiAke2xzWzBdfWApO1xuICAgICAgcmV0LnB1c2goLi4ubHMuc2xpY2UoMSkpO1xuICAgICAgcmV0LnB1c2goJycpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29udmVydEV4YW1wbGUoZXhhbXBsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBzbmlwcGV0ID0gdHlwZVNjcmlwdFNuaXBwZXRGcm9tU291cmNlKFxuICAgICAgZXhhbXBsZSxcbiAgICAgICdleGFtcGxlJyxcbiAgICAgIGVuZm9yY2VzU3RyaWN0TW9kZSh0aGlzLmFzc2VtYmx5KSxcbiAgICApO1xuICAgIGNvbnN0IHRyYW5zbGF0ZWQgPSB0aGlzLnJvc2V0dGEudHJhbnNsYXRlU25pcHBldChcbiAgICAgIHNuaXBwZXQsXG4gICAgICBUYXJnZXRMYW5ndWFnZS5DU0hBUlAsXG4gICAgKTtcbiAgICBpZiAoIXRyYW5zbGF0ZWQpIHtcbiAgICAgIHJldHVybiBleGFtcGxlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wcmVmaXhEaXNjbGFpbWVyKHRyYW5zbGF0ZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0U2FtcGxlc0luTWFya2Rvd24obWFya2Rvd246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucm9zZXR0YS50cmFuc2xhdGVTbmlwcGV0c0luTWFya2Rvd24oXG4gICAgICBtYXJrZG93bixcbiAgICAgIFRhcmdldExhbmd1YWdlLkNTSEFSUCxcbiAgICAgIGVuZm9yY2VzU3RyaWN0TW9kZSh0aGlzLmFzc2VtYmx5KSxcbiAgICAgICh0cmFucykgPT4gKHtcbiAgICAgICAgbGFuZ3VhZ2U6IHRyYW5zLmxhbmd1YWdlLFxuICAgICAgICBzb3VyY2U6IHRoaXMucHJlZml4RGlzY2xhaW1lcih0cmFucyksXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVmaXhEaXNjbGFpbWVyKHRyYW5zbGF0ZWQ6IFRyYW5zbGF0aW9uKSB7XG4gICAgaWYgKHRyYW5zbGF0ZWQuZGlkQ29tcGlsZSAmJiBJTkNPTVBMRVRFX0RJU0NMQUlNRVJfQ09NUElMSU5HKSB7XG4gICAgICByZXR1cm4gYC8vICR7SU5DT01QTEVURV9ESVNDTEFJTUVSX0NPTVBJTElOR31cXG4ke3RyYW5zbGF0ZWQuc291cmNlfWA7XG4gICAgfVxuICAgIGlmICghdHJhbnNsYXRlZC5kaWRDb21waWxlICYmIElOQ09NUExFVEVfRElTQ0xBSU1FUl9OT05DT01QSUxJTkcpIHtcbiAgICAgIHJldHVybiBgLy8gJHtJTkNPTVBMRVRFX0RJU0NMQUlNRVJfTk9OQ09NUElMSU5HfVxcbiR7dHJhbnNsYXRlZC5zb3VyY2V9YDtcbiAgICB9XG4gICAgcmV0dXJuIHRyYW5zbGF0ZWQuc291cmNlO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0WG1sRG9jKFxuICAgIHRhZzogc3RyaW5nLFxuICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICB7IGF0dHJpYnV0ZXMgPSB7fSB9OiB7IGF0dHJpYnV0ZXM/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSB9ID0ge30sXG4gICk6IHZvaWQge1xuICAgIGlmICghY29udGVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHhtbCA9IHhtbGJ1aWxkZXIuY3JlYXRlKHRhZywgeyBoZWFkbGVzczogdHJ1ZSB9KS50ZXh0KGNvbnRlbnQpO1xuICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzKSkge1xuICAgICAgeG1sLmF0dChuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IHhtbHN0cmluZyA9IHhtbC5lbmQoeyBhbGxvd0VtcHR5OiB0cnVlLCBwcmV0dHk6IGZhbHNlIH0pO1xuXG4gICAgZm9yIChjb25zdCBsaW5lIG9mIHhtbHN0cmluZy5zcGxpdCgnXFxuJykubWFwKCh4KSA9PiB4LnRyaW0oKSkpIHtcbiAgICAgIHRoaXMuY29kZS5saW5lKGAvLy8gJHtsaW5lfWApO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFVwcGVyY2FzZSB0aGUgZmlyc3QgbGV0dGVyXG4gKi9cbmZ1bmN0aW9uIHVjRmlyc3QoeDogc3RyaW5nKSB7XG4gIHJldHVybiB4LnN1YnN0cigwLCAxKS50b1VwcGVyQ2FzZSgpICsgeC5zdWJzdHIoMSk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZE1lbnRpb25TdGFiaWxpdHkoczogc3BlYy5TdGFiaWxpdHkpIHtcbiAgLy8gRG9uJ3QgcmVuZGVyIFwic3RhYmxlXCIgb3IgXCJleHRlcm5hbFwiLCB0aG9zZSBhcmUgYm90aCBzdGFibGUgYnkgaW1wbGljYXRpb25cbiAgcmV0dXJuIHMgPT09IHNwZWMuU3RhYmlsaXR5LkRlcHJlY2F0ZWQgfHwgcyA9PT0gc3BlYy5TdGFiaWxpdHkuRXhwZXJpbWVudGFsO1xufVxuIl19
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG90bmV0ZG9jZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZG90bmV0ZG9jZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFtQztBQUVuQywrQ0FPc0I7QUFDdEIseUNBQXlDO0FBRXpDLDBCQUdZO0FBQ1osc0NBQTBDO0FBQzFDLDJDQUE4QztBQUU5Qzs7OztHQUlHO0FBQ0gsTUFBYSxrQkFBa0I7SUFJN0IsWUFDRSxJQUFlLEVBQ0UsT0FBZ0IsRUFDaEIsUUFBdUI7UUFEdkIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixhQUFRLEdBQVIsUUFBUSxDQUFlO1FBTHpCLGNBQVMsR0FBb0IsSUFBSSwyQkFBZSxFQUFFLENBQUM7UUFPbEUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLFFBQVEsQ0FBQyxHQUFzQixFQUFFLFdBQXdCO1FBQzlELE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFFdEIsNkVBQTZFO1FBQzdFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLHNCQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFcEQsa0RBQWtEO1FBQ2xELE1BQU0sU0FBUyxHQUFHLEdBQWtCLENBQUM7UUFDckMsSUFBSSxTQUFTLENBQUMsVUFBVSxFQUFFO1lBQ3hCLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7O2dCQUNyQyxtRkFBbUY7Z0JBQ25GLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTO3FCQUM3QixvQkFBb0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO3FCQUNoQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNyQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sY0FBRSxLQUFLLENBQUMsSUFB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QUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxDQUFpQjtJQUMvQyw0RUFBNEU7SUFDNUUsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO0FBQzlFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzcGVjIGZyb20gJ0Bqc2lpL3NwZWMnO1xuaW1wb3J0IHsgQ29kZU1ha2VyIH0gZnJvbSAnY29kZW1ha2VyJztcbmltcG9ydCB7XG4gIFJvc2V0dGEsXG4gIFRhcmdldExhbmd1YWdlLFxuICBUcmFuc2xhdGlvbixcbiAgZW5mb3JjZXNTdHJpY3RNb2RlLFxuICBtYXJrRG93blRvWG1sRG9jLFxuICBBcGlMb2NhdGlvbixcbn0gZnJvbSAnanNpaS1yb3NldHRhJztcbmltcG9ydCAqIGFzIHhtbGJ1aWxkZXIgZnJvbSAneG1sYnVpbGRlcic7XG5cbmltcG9ydCB7XG4gIElOQ09NUExFVEVfRElTQ0xBSU1FUl9DT01QSUxJTkcsXG4gIElOQ09NUExFVEVfRElTQ0xBSU1FUl9OT05DT01QSUxJTkcsXG59IGZyb20gJy4uJztcbmltcG9ydCB7IHJlbmRlclN1bW1hcnkgfSBmcm9tICcuLi9fdXRpbHMnO1xuaW1wb3J0IHsgRG90TmV0TmFtZVV0aWxzIH0gZnJvbSAnLi9uYW1ldXRpbHMnO1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgSnNpaSBhdHRyaWJ1dGVzIGFuZCBjYWxscyBmb3IgdGhlIC5ORVQgcnVudGltZVxuICpcbiAqIFVzZXMgdGhlIHNhbWUgaW5zdGFuY2Ugb2YgQ29kZU1ha2VyIGFzIHRoZSByZXN0IG9mIHRoZSBjb2RlXG4gKi9cbmV4cG9ydCBjbGFzcyBEb3ROZXREb2NHZW5lcmF0b3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IGNvZGU6IENvZGVNYWtlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBuYW1ldXRpbHM6IERvdE5ldE5hbWVVdGlscyA9IG5ldyBEb3ROZXROYW1lVXRpbHMoKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgY29kZTogQ29kZU1ha2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm9zZXR0YTogUm9zZXR0YSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFzc2VtYmx5OiBzcGVjLkFzc2VtYmx5LFxuICApIHtcbiAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGFsbCBkb2N1bWVudGF0aW9uIGRlcGVuZGluZyBvbiB3aGF0IGlzIGF2YWlsYWJsZSBpbiB0aGUganNpaSBtb2RlbFxuICAgKlxuICAgKiBVc2VkIGJ5IGFsbCBraW5kIG9mIG1lbWJlcnMgKyBjbGFzc2VzLCBpbnRlcmZhY2VzLCBlbnVtc1xuICAgKiBPcmRlciBzaG91bGQgYmVcbiAgICogU3VtbWFyeVxuICAgKiBQYXJhbVxuICAgKiBSZXR1cm5zXG4gICAqIFJlbWFya3MgKGluY2x1ZGVzIGV4YW1wbGVzLCBsaW5rcywgZGVwcmVjYXRlZClcbiAgICovXG4gIHB1YmxpYyBlbWl0RG9jcyhvYmo6IHNwZWMuRG9jdW1lbnRhYmxlLCBhcGlMb2NhdGlvbjogQXBpTG9jYXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBkb2NzID0gb2JqLmRvY3M7XG5cbiAgICAvLyBUaGUgZG9jcyBtYXkgYmUgdW5kZWZpbmVkIGF0IHRoZSBtZXRob2QgbGV2ZWwgYnV0IG5vdCB0aGUgcGFyYW1ldGVycyBsZXZlbFxuICAgIHRoaXMuZW1pdFhtbERvYygnc3VtbWFyeScsIHJlbmRlclN1bW1hcnkob2JqLmRvY3MpKTtcblxuICAgIC8vIEhhbmRsaW5nIHBhcmFtZXRlcnMgb25seSBpZiB0aGUgb2JqIGlzIGEgbWV0aG9kXG4gICAgY29uc3Qgb2JqTWV0aG9kID0gb2JqIGFzIHNwZWMuTWV0aG9kO1xuICAgIGlmIChvYmpNZXRob2QucGFyYW1ldGVycykge1xuICAgICAgb2JqTWV0aG9kLnBhcmFtZXRlcnMuZm9yRWFjaCgocGFyYW0pID0+IHtcbiAgICAgICAgLy8gUmVtb3ZlIGFueSBzbHVnIGBAYCBmcm9tIHRoZSBwYXJhbWV0ZXIgbmFtZSAtIGl0J3Mgbm90IHN1cHBvc2VkIHRvIHNob3cgdXAgaGVyZS5cbiAgICAgICAgY29uc3QgcGFyYW1OYW1lID0gdGhpcy5uYW1ldXRpbHNcbiAgICAgICAgICAuY29udmVydFBhcmFtZXRlck5hbWUocGFyYW0ubmFtZSlcbiAgICAgICAgICAucmVwbGFjZSgvXkAvLCAnJyk7XG4gICAgICAgIHRoaXMuZW1pdFhtbERvYygncGFyYW0nLCBwYXJhbS5kb2NzPy5zdW1tYXJ5ID8/ICcnLCB7XG4gICAgICAgICAgYXR0cmlidXRlczogeyBuYW1lOiBwYXJhbU5hbWUgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBdCB0aGlzIHBkb2NmeCBuYW1lc3BhY2Vkb2NkIGEgdmFsaWQgaW5zdGFuY2Ugb2YgZG9jc1xuICAgIGlmICghZG9jcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkb2NzLnJldHVybnMpIHtcbiAgICAgIHRoaXMuZW1pdFhtbERvYygncmV0dXJucycsIGRvY3MucmV0dXJucyk7XG4gICAgfVxuXG4gICAgLy8gUmVtYXJrcyBkb2VzIG5vdCB1c2UgZW1pdFhtbERvYygpIGJlY2F1c2UgdGhlIHJlbWFya3MgY2FuIGNvbnRhaW4gY29kZSBibG9ja3NcbiAgICAvLyB3aGljaCBhcmUgZmVuY2VkIHdpdGggPGNvZGU+IHRhZ3MsIHdoaWNoIHdvdWxkIGJlIGVzY2FwZWQgdG9cbiAgICAvLyAmbHQ7Y29kZSZndDsgaWYgd2UgdXNlZCB0aGUgeG1sIGJ1aWxkZXIuXG4gICAgY29uc3QgcmVtYXJrcyA9IHRoaXMucmVuZGVyUmVtYXJrcyhkb2NzLCBhcGlMb2NhdGlvbik7XG4gICAgaWYgKHJlbWFya3MubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoJy8vLyA8cmVtYXJrcz4nKTtcbiAgICAgIHJlbWFya3MuZm9yRWFjaCgocikgPT4gdGhpcy5jb2RlLmxpbmUoYC8vLyAke3J9YC50cmltUmlnaHQoKSkpO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoJy8vLyA8L3JlbWFya3M+Jyk7XG4gICAgfVxuXG4gICAgaWYgKGRvY3MuZXhhbXBsZSkge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoJy8vLyA8ZXhhbXBsZT4nKTtcbiAgICAgIHRoaXMuZW1pdFhtbERvYygnY29kZScsIHRoaXMuY29udmVydEV4YW1wbGUoZG9jcy5leGFtcGxlLCBhcGlMb2NhdGlvbikpO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoJy8vLyA8L2V4YW1wbGU+Jyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGVtaXRNYXJrZG93bkFzUmVtYXJrcyhcbiAgICBtYXJrZG93bjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGFwaUxvY2F0aW9uOiBBcGlMb2NhdGlvbixcbiAgKSB7XG4gICAgaWYgKCFtYXJrZG93bikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zbGF0ZWQgPSBtYXJrRG93blRvWG1sRG9jKFxuICAgICAgdGhpcy5jb252ZXJ0U2FtcGxlc0luTWFya2Rvd24obWFya2Rvd24sIGFwaUxvY2F0aW9uKSxcbiAgICApO1xuICAgIGNvbnN0IGxpbmVzID0gdHJhbnNsYXRlZC5zcGxpdCgnXFxuJyk7XG5cbiAgICB0aGlzLmNvZGUubGluZSgnLy8vIDxyZW1hcmtzPicpO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoYC8vLyAke2xpbmV9YC50cmltUmlnaHQoKSk7XG4gICAgfVxuICAgIHRoaXMuY29kZS5saW5lKCcvLy8gPC9yZW1hcmtzPicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxpbmVzIHRoYXQgc2hvdWxkIGdvIGludG8gdGhlIDxyZW1hcmtzPiBzZWN0aW9uXG4gICAqL1xuICBwcml2YXRlIHJlbmRlclJlbWFya3MoZG9jczogc3BlYy5Eb2NzLCBhcGlMb2NhdGlvbjogQXBpTG9jYXRpb24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmV0OiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKGRvY3MucmVtYXJrcykge1xuICAgICAgY29uc3QgdHJhbnNsYXRlZCA9IG1hcmtEb3duVG9YbWxEb2MoXG4gICAgICAgIHRoaXMuY29udmVydFNhbXBsZXNJbk1hcmtkb3duKGRvY3MucmVtYXJrcywgYXBpTG9jYXRpb24pLFxuICAgICAgKTtcbiAgICAgIHJldC5wdXNoKC4uLnRyYW5zbGF0ZWQuc3BsaXQoJ1xcbicpKTtcbiAgICAgIHJldC5wdXNoKCcnKTtcbiAgICB9XG5cbiAgICAvLyBBbGwgdGhlIFwidGFnc1wiIG5lZWQgdG8gYmUgcmVuZGVyZWQgd2l0aCBlbXB5dCBsaW5lcyBiZXR3ZWVuIHRoZW0gb3IgdGhleSdsbCBiZSB3b3JkIHdyYXBwZWQuXG5cbiAgICBpZiAoZG9jcy5kZWZhdWx0KSB7XG4gICAgICBlbWl0RG9jQXR0cmlidXRlKCdkZWZhdWx0JywgZG9jcy5kZWZhdWx0KTtcbiAgICB9XG4gICAgaWYgKGRvY3Muc3RhYmlsaXR5ICYmIHNob3VsZE1lbnRpb25TdGFiaWxpdHkoZG9jcy5zdGFiaWxpdHkpKSB7XG4gICAgICBlbWl0RG9jQXR0cmlidXRlKFxuICAgICAgICAnc3RhYmlsaXR5JyxcbiAgICAgICAgdGhpcy5uYW1ldXRpbHMuY2FwaXRhbGl6ZVdvcmQoZG9jcy5zdGFiaWxpdHkpLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGRvY3Muc2VlKSB7XG4gICAgICBlbWl0RG9jQXR0cmlidXRlKCdzZWUnLCBkb2NzLnNlZSk7XG4gICAgfVxuICAgIGlmIChkb2NzLnN1YmNsYXNzYWJsZSkge1xuICAgICAgZW1pdERvY0F0dHJpYnV0ZSgnc3ViY2xhc3NhYmxlJywgJycpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhkb2NzLmN1c3RvbSA/PyB7fSkpIHtcbiAgICAgIGNvbnN0IGV4dHJhU3BhY2UgPSBrID09PSAnbGluaycgPyAnICcgOiAnJzsgLy8gRXh0cmEgc3BhY2UgZm9yICdAbGluaycgdG8ga2VlcCB1bml0IHRlc3RzIGhhcHB5XG4gICAgICBlbWl0RG9jQXR0cmlidXRlKGssIHYgKyBleHRyYVNwYWNlKTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgZW1wdHkgbGluZXNcbiAgICB3aGlsZSAocmV0Lmxlbmd0aCA+IDAgJiYgcmV0WzBdID09PSAnJykge1xuICAgICAgcmV0LnNoaWZ0KCk7XG4gICAgfVxuICAgIHdoaWxlIChyZXQubGVuZ3RoID4gMCAmJiByZXRbcmV0Lmxlbmd0aCAtIDFdID09PSAnJykge1xuICAgICAgcmV0LnBvcCgpO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG5cbiAgICBmdW5jdGlvbiBlbWl0RG9jQXR0cmlidXRlKG5hbWU6IHN0cmluZywgY29udGVudHM6IHN0cmluZykge1xuICAgICAgY29uc3QgbHMgPSBjb250ZW50cy5zcGxpdCgnXFxuJyk7XG4gICAgICByZXQucHVzaChgPHN0cm9uZz4ke3VjRmlyc3QobmFtZSl9PC9zdHJvbmc+OiAke2xzWzBdfWApO1xuICAgICAgcmV0LnB1c2goLi4ubHMuc2xpY2UoMSkpO1xuICAgICAgcmV0LnB1c2goJycpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29udmVydEV4YW1wbGUoZXhhbXBsZTogc3RyaW5nLCBhcGlMb2NhdGlvbjogQXBpTG9jYXRpb24pOiBzdHJpbmcge1xuICAgIGNvbnN0IHRyYW5zbGF0ZWQgPSB0aGlzLnJvc2V0dGEudHJhbnNsYXRlRXhhbXBsZShcbiAgICAgIGFwaUxvY2F0aW9uLFxuICAgICAgZXhhbXBsZSxcbiAgICAgIFRhcmdldExhbmd1YWdlLkNTSEFSUCxcbiAgICAgIGVuZm9yY2VzU3RyaWN0TW9kZSh0aGlzLmFzc2VtYmx5KSxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLnByZWZpeERpc2NsYWltZXIodHJhbnNsYXRlZCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRTYW1wbGVzSW5NYXJrZG93bihtYXJrZG93bjogc3RyaW5nLCBhcGk6IEFwaUxvY2F0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yb3NldHRhLnRyYW5zbGF0ZVNuaXBwZXRzSW5NYXJrZG93bihcbiAgICAgIGFwaSxcbiAgICAgIG1hcmtkb3duLFxuICAgICAgVGFyZ2V0TGFuZ3VhZ2UuQ1NIQVJQLFxuICAgICAgZW5mb3JjZXNTdHJpY3RNb2RlKHRoaXMuYXNzZW1ibHkpLFxuICAgICAgKHRyYW5zKSA9PiAoe1xuICAgICAgICBsYW5ndWFnZTogdHJhbnMubGFuZ3VhZ2UsXG4gICAgICAgIHNvdXJjZTogdGhpcy5wcmVmaXhEaXNjbGFpbWVyKHRyYW5zKSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHByZWZpeERpc2NsYWltZXIodHJhbnNsYXRlZDogVHJhbnNsYXRpb24pIHtcbiAgICBpZiAodHJhbnNsYXRlZC5kaWRDb21waWxlICYmIElOQ09NUExFVEVfRElTQ0xBSU1FUl9DT01QSUxJTkcpIHtcbiAgICAgIHJldHVybiBgLy8gJHtJTkNPTVBMRVRFX0RJU0NMQUlNRVJfQ09NUElMSU5HfVxcbiR7dHJhbnNsYXRlZC5zb3VyY2V9YDtcbiAgICB9XG4gICAgaWYgKCF0cmFuc2xhdGVkLmRpZENvbXBpbGUgJiYgSU5DT01QTEVURV9ESVNDTEFJTUVSX05PTkNPTVBJTElORykge1xuICAgICAgcmV0dXJuIGAvLyAke0lOQ09NUExFVEVfRElTQ0xBSU1FUl9OT05DT01QSUxJTkd9XFxuJHt0cmFuc2xhdGVkLnNvdXJjZX1gO1xuICAgIH1cbiAgICByZXR1cm4gdHJhbnNsYXRlZC5zb3VyY2U7XG4gIH1cblxuICBwcml2YXRlIGVtaXRYbWxEb2MoXG4gICAgdGFnOiBzdHJpbmcsXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIHsgYXR0cmlidXRlcyA9IHt9IH06IHsgYXR0cmlidXRlcz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9IH0gPSB7fSxcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFjb250ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeG1sID0geG1sYnVpbGRlci5jcmVhdGUodGFnLCB7IGhlYWRsZXNzOiB0cnVlIH0pLnRleHQoY29udGVudCk7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpKSB7XG4gICAgICB4bWwuYXR0KG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgeG1sc3RyaW5nID0geG1sLmVuZCh7IGFsbG93RW1wdHk6IHRydWUsIHByZXR0eTogZmFsc2UgfSk7XG5cbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgeG1sc3RyaW5nLnNwbGl0KCdcXG4nKS5tYXAoKHgpID0+IHgudHJpbSgpKSkge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoYC8vLyAke2xpbmV9YCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVXBwZXJjYXNlIHRoZSBmaXJzdCBsZXR0ZXJcbiAqL1xuZnVuY3Rpb24gdWNGaXJzdCh4OiBzdHJpbmcpIHtcbiAgcmV0dXJuIHguc3Vic3RyKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyB4LnN1YnN0cigxKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkTWVudGlvblN0YWJpbGl0eShzOiBzcGVjLlN0YWJpbGl0eSkge1xuICAvLyBEb24ndCByZW5kZXIgXCJzdGFibGVcIiBvciBcImV4dGVybmFsXCIsIHRob3NlIGFyZSBib3RoIHN0YWJsZSBieSBpbXBsaWNhdGlvblxuICByZXR1cm4gcyA9PT0gc3BlYy5TdGFiaWxpdHkuRGVwcmVjYXRlZCB8fCBzID09PSBzcGVjLlN0YWJpbGl0eS5FeHBlcmltZW50YWw7XG59XG4iXX0=