@piserve-tech/form-submission 1.3.260 → 1.3.262

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.
@@ -11,6 +11,28 @@ export class IframeFieldsComponent {
11
11
  this.cssContent = '';
12
12
  this.scriptContent = '';
13
13
  this.urlContent = '';
14
+ this.embeddableDomains = [
15
+ // Generic sites that usually allow embedding
16
+ 'youtube.com',
17
+ 'youtu.be',
18
+ 'vimeo.com',
19
+ 'player.vimeo.com',
20
+ 'maps.google.com',
21
+ 'www.google.com/maps',
22
+ 'openstreetmap.org',
23
+ 'codesandbox.io',
24
+ 'stackblitz.com',
25
+ 'jsfiddle.net',
26
+ 'codepen.io',
27
+ 'spotify.com',
28
+ 'soundcloud.com',
29
+ 'figma.com',
30
+ 'canva.com',
31
+ 'notion.so',
32
+ 'facebook.com/plugins',
33
+ 'instagram.com/p',
34
+ 'twitter.com',
35
+ ];
14
36
  }
15
37
  ngOnInit() {
16
38
  this.valueAssigned();
@@ -75,14 +97,79 @@ export class IframeFieldsComponent {
75
97
  iframeDoc.close();
76
98
  }
77
99
  }
78
- /** Render external links safely */
79
100
  renderLink() {
80
- this.safeUrl = this.sanitizeUrl(this.urlContent);
101
+ if (!this.urlContent) {
102
+ this.safeUrl = '';
103
+ return;
104
+ }
105
+ const url = this.urlContent.trim();
106
+ // Check if URL is valid
107
+ if (!this.isValidUrl(url)) {
108
+ console.warn('Invalid URL format');
109
+ this.safeUrl = '';
110
+ return;
111
+ }
112
+ // Check if embeddable host
113
+ if (!this.isEmbeddableUrl(url)) {
114
+ console.warn('This website may not allow embedding');
115
+ // You can still LET it try
116
+ // Or block it completely
117
+ // For now: allow but warn
118
+ }
119
+ const embedUrl = this.convertToEmbedUrl(url);
120
+ this.safeUrl = this.sanitizeUrl(embedUrl);
121
+ }
122
+ isValidUrl(url) {
123
+ try {
124
+ new URL(url);
125
+ return true;
126
+ }
127
+ catch {
128
+ return false;
129
+ }
81
130
  }
82
131
  /** Sanitize URLs for iframes */
83
132
  sanitizeUrl(url) {
84
133
  return this.sanitizer.bypassSecurityTrustResourceUrl(url);
85
134
  }
135
+ isEmbeddableUrl(url) {
136
+ try {
137
+ const parsed = new URL(url);
138
+ return this.embeddableDomains.some((domain) => parsed.hostname.includes(domain));
139
+ }
140
+ catch {
141
+ return false;
142
+ }
143
+ }
144
+ convertToEmbedUrl(url) {
145
+ try {
146
+ const parsed = new URL(url);
147
+ // YouTube
148
+ if (parsed.hostname.includes('youtube.com') &&
149
+ parsed.searchParams.get('v')) {
150
+ return `https://www.youtube.com/embed/${parsed.searchParams.get('v')}`;
151
+ }
152
+ if (parsed.hostname.includes('youtu.be')) {
153
+ return `https://www.youtube.com/embed/${parsed.pathname.substring(1)}`;
154
+ }
155
+ // Vimeo
156
+ if (parsed.hostname.includes('vimeo.com')) {
157
+ const videoId = parsed.pathname.split('/')[1];
158
+ return `https://player.vimeo.com/video/${videoId}`;
159
+ }
160
+ // Google Maps (no API key needed)
161
+ if (parsed.hostname.includes('google.com') &&
162
+ parsed.pathname.startsWith('/maps')) {
163
+ if (parsed.pathname.includes('/maps/embed'))
164
+ return url;
165
+ return `https://www.google.com/maps/embed?${parsed.searchParams.toString()}`;
166
+ }
167
+ return url;
168
+ }
169
+ catch (e) {
170
+ return url;
171
+ }
172
+ }
86
173
  /** Basic script validation to prevent unsafe operations */
87
174
  isSafeScript(code) {
88
175
  const unsafePatterns = [
@@ -108,4 +195,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
108
195
  type: ViewChild,
109
196
  args: ['iframeRef']
110
197
  }] } });
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWZyYW1lLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL2lmcmFtZS1maWVsZHMvaWZyYW1lLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL2lmcmFtZS1maWVsZHMvaWZyYW1lLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFReEUsTUFBTSxPQUFPLHFCQUFxQjtJQWdCaEMsWUFBb0IsU0FBdUI7UUFBdkIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQWRsQyxhQUFRLEdBQVEsRUFBRSxDQUFDO1FBSTVCLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDeEIsa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFDM0IsZUFBVSxHQUFXLEVBQUUsQ0FBQztJQU1zQixDQUFDO0lBRS9DLFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssTUFBTSxFQUFFO1lBQy9CLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDeEM7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssTUFBTSxFQUFFO1lBQ3RDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDeEM7SUFD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Q0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7K0dBaEhVLHFCQUFxQjttR0FBckIscUJBQXFCLG1NQ1JsQyw4c0JBK0JBOzs0RkR2QmEscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLG1CQUFtQjttR0FNcEIsUUFBUTtzQkFBaEIsS0FBSztnQkE4Q2tCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCwgU2FmZVJlc291cmNlVXJsIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1pZnJhbWUtZmllbGRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2lmcmFtZS1maWVsZHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pZnJhbWUtZmllbGRzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSWZyYW1lRmllbGRzQ29tcG9uZW50IHtcblxuICBASW5wdXQoKSBxdWVzdGlvbjogYW55ID0ge307XG4gIFxuICBoZWlnaHQhOiBzdHJpbmc7XG4gIHdpZHRoITogc3RyaW5nO1xuICBjb250ZW50VHlwZTogc3RyaW5nID0gJyc7XG4gIGh0bWxDb250ZW50OiBzdHJpbmcgPSAnJztcbiAgY3NzQ29udGVudDogc3RyaW5nID0gJyc7XG4gIHNjcmlwdENvbnRlbnQ6IHN0cmluZyA9ICcnO1xuICB1cmxDb250ZW50OiBzdHJpbmcgPSAnJztcbiAgY291bnQhOiBudW1iZXI7XG5cbiAgc2FmZUh0bWxDb250ZW50ITogU2FmZUh0bWw7XG4gIHNhZmVVcmwhOiBTYWZlUmVzb3VyY2VVcmw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcikge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnZhbHVlQXNzaWduZWQoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5jb250ZW50VHlwZSA9PT0gJ0hUTUwnKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVuZGVySHRtbCgpLCAwKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29udGVudFR5cGUgPT09ICdMSU5LJykge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlbmRlckxpbmsoKSwgMCk7XG4gICAgfVxuICB9XG5cbiAgdmFsdWVBc3NpZ25lZCgpIHtcbiAgICB0aGlzLmNvdW50ID0gdGhpcy5xdWVzdGlvbj8uY291bnQ7XG4gICAgdGhpcy53aWR0aCA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQuYXBwZWFyYW5jZS53aWR0aFxuICAgICAgPyB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LmFwcGVhcmFuY2Uud2lkdGggKyAncHgnXG4gICAgICA6ICcxMDAlJztcbiAgICB0aGlzLmhlaWdodCA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQuYXBwZWFyYW5jZS5oZWlnaHRcbiAgICAgID8gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5hcHBlYXJhbmNlLmhlaWdodCArICdweCdcbiAgICAgIDogJzEwMCUnO1xuICAgIHRoaXMuY29udGVudFR5cGUgPVxuICAgICAgdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5pRnJhbWVQcm9wZXJ0aWVzLmNvbnRlbnRUeXBlO1xuICAgIHRoaXMuaHRtbENvbnRlbnQgPVxuICAgICAgdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5pRnJhbWVQcm9wZXJ0aWVzLmh0bWwuY29udGVudDtcbiAgICB0aGlzLmNzc0NvbnRlbnQgPVxuICAgICAgdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5pRnJhbWVQcm9wZXJ0aWVzLnN0eWxlLmNzcztcbiAgICB0aGlzLnNjcmlwdENvbnRlbnQgPVxuICAgICAgdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5pRnJhbWVQcm9wZXJ0aWVzLnNjcmlwdC5jb2RlO1xuICAgIHRoaXMudXJsQ29udGVudCA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQuaUZyYW1lUHJvcGVydGllcy51cmw7XG4gIH1cbiAgQFZpZXdDaGlsZCgnaWZyYW1lUmVmJykgaWZyYW1lUmVmITogRWxlbWVudFJlZjxIVE1MSUZyYW1lRWxlbWVudD47XG4gIC8qKiBSZW5kZXIgSFRNTCB3aXRoIGR5bmFtaWMgQ1NTICovXG4gIHJlbmRlckh0bWwoKSB7XG4gICAgY29uc3QgaWZyYW1lID0gdGhpcy5pZnJhbWVSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBpZiAoIWlmcmFtZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgaWZyYW1lRG9jID0gaWZyYW1lLmNvbnRlbnREb2N1bWVudCB8fCBpZnJhbWUuY29udGVudFdpbmRvdz8uZG9jdW1lbnQ7XG5cbiAgICBpZiAoaWZyYW1lRG9jKSB7XG4gICAgICAvLyBCdWlsZCB0aGUgY29tcGxldGUgSFRNTCBjb250ZW50IHRvIGluamVjdCBpbnRvIHRoZSBpZnJhbWVcbiAgICAgIGNvbnN0IHNhZmVIdG1sID0gYFxuICAgICAgICA8aHRtbD5cbiAgICAgICAgICA8aGVhZD5cbiAgICAgICAgICAgIDxzdHlsZT4ke3RoaXMuY3NzQ29udGVudCB8fCAnJ308L3N0eWxlPlxuICAgICAgICAgIDwvaGVhZD5cbiAgICAgICAgICA8Ym9keT5cbiAgICAgICAgICAgICR7dGhpcy5odG1sQ29udGVudCB8fCAnJ31cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgIChmdW5jdGlvbihsb2NhbFN0b3JhZ2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgJHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1NhZmVTY3JpcHQodGhpcy5zY3JpcHRDb250ZW50KVxuICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5zY3JpcHRDb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9ICc8cCBzdHlsZT1cImNvbG9yOnJlZFwiPlNjcmlwdCBFcnJvcjogJyArIGUubWVzc2FnZSArICc8L3A+JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pKHdpbmRvdy5sb2NhbFN0b3JhZ2UpO1xuICAgICAgICAgICAgPC9zY3JpcHQ+XG4gICAgICAgICAgPC9ib2R5PlxuICAgICAgICA8L2h0bWw+XG4gICAgICBgO1xuXG4gICAgICBpZnJhbWVEb2Mub3BlbigpO1xuICAgICAgaWZyYW1lRG9jLndyaXRlKHNhZmVIdG1sKTtcbiAgICAgIGlmcmFtZURvYy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZW5kZXIgZXh0ZXJuYWwgbGlua3Mgc2FmZWx5ICovXG4gIHJlbmRlckxpbmsoKSB7XG4gICAgdGhpcy5zYWZlVXJsID0gdGhpcy5zYW5pdGl6ZVVybCh0aGlzLnVybENvbnRlbnQpO1xuICB9XG5cbiAgLyoqIFNhbml0aXplIFVSTHMgZm9yIGlmcmFtZXMgKi9cbiAgc2FuaXRpemVVcmwodXJsOiBzdHJpbmcpOiBTYWZlUmVzb3VyY2VVcmwge1xuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwodXJsKTtcbiAgfVxuXG4gIC8qKiBCYXNpYyBzY3JpcHQgdmFsaWRhdGlvbiB0byBwcmV2ZW50IHVuc2FmZSBvcGVyYXRpb25zICovXG4gIGlzU2FmZVNjcmlwdChjb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB1bnNhZmVQYXR0ZXJucyA9IFtcbiAgICAgIC93aW5kb3dcXC5wYXJlbnQvLFxuICAgICAgL2RvY3VtZW50XFwuY29va2llLyxcbiAgICAgIC9mZXRjaFxcKC8sXG4gICAgICAvWE1MSHR0cFJlcXVlc3QvLFxuICAgICAgL2V2YWxcXCgvLFxuICAgICAgL25ldyBGdW5jdGlvbi8sXG4gICAgICAvc2V0VGltZW91dHxzZXRJbnRlcnZhbC8sXG4gICAgXTtcblxuICAgIHJldHVybiAhdW5zYWZlUGF0dGVybnMuc29tZSgocGF0dGVybikgPT4gcGF0dGVybi50ZXN0KGNvZGUpKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImN1c3RvbS1lbWJlZCBtYi00XCJcbiAgICAgW3N0eWxlLndpZHRoXT1cIndpZHRoXCJcbiAgICAgW3N0eWxlLmhlaWdodF09XCJoZWlnaHRcIj5cblxuICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb250ZW50VHlwZVwiPlxuXG4gICAgPCEtLSBIVE1MLCBDU1MsIGFuZCBTY3JpcHQgcmVuZGVyZWQgdG9nZXRoZXIgLS0+XG4gICAgPGlmcmFtZVxuICAgICAgKm5nU3dpdGNoQ2FzZT1cIidIVE1MJ1wiXG4gICAgICAjaWZyYW1lUmVmXG4gICAgICBzYW5kYm94PVwiYWxsb3ctc2NyaXB0cyBhbGxvdy1zYW1lLW9yaWdpblwiXG4gICAgICBbc3R5bGUud2lkdGhdPVwid2lkdGhcIlxuICAgICAgW3N0eWxlLmhlaWdodF09XCJoZWlnaHRcIlxuICAgICAgZnJhbWVib3JkZXI9XCIwXCJcbiAgICA+PC9pZnJhbWU+XG5cbiAgICA8IS0tIExpbmsgRW1iZWQgLS0+XG4gICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidMSU5LJ1wiPlxuICAgICA8aWZyYW1lXG4gICAgICpuZ0lmPVwic2FmZVVybFwiXG4gICAgIFtzcmNdPVwic2FmZVVybFwiXG4gICAgIFtzdHlsZS53aWR0aF09XCJ3aWR0aFwiXG4gICAgIFtzdHlsZS5oZWlnaHRdPVwiaGVpZ2h0XCJcbiAgICAgZnJhbWVib3JkZXI9XCIwXCJcbiAgICAgYWxsb3dmdWxsc2NyZWVuPlxuICAgPC9pZnJhbWU+XG4gICAgIDwvZGl2PlxuICAgIFxuXG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=
198
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWZyYW1lLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL2lmcmFtZS1maWVsZHMvaWZyYW1lLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL2lmcmFtZS1maWVsZHMvaWZyYW1lLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFReEUsTUFBTSxPQUFPLHFCQUFxQjtJQXVDaEMsWUFBb0IsU0FBdUI7UUFBdkIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQXJDbEMsYUFBUSxHQUFRLEVBQUUsQ0FBQztRQUk1QixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUN6QixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUN6QixlQUFVLEdBQVcsRUFBRSxDQUFDO1FBQ3hCLGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBQzNCLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFNeEIsc0JBQWlCLEdBQUc7WUFDbEIsNkNBQTZDO1lBQzdDLGFBQWE7WUFDYixVQUFVO1lBQ1YsV0FBVztZQUNYLGtCQUFrQjtZQUNsQixpQkFBaUI7WUFDakIscUJBQXFCO1lBQ3JCLG1CQUFtQjtZQUNuQixnQkFBZ0I7WUFDaEIsZ0JBQWdCO1lBQ2hCLGNBQWM7WUFDZCxZQUFZO1lBQ1osYUFBYTtZQUNiLGdCQUFnQjtZQUNoQixXQUFXO1lBQ1gsV0FBVztZQUNYLFdBQVc7WUFDWCxzQkFBc0I7WUFDdEIsaUJBQWlCO1lBQ2pCLGFBQWE7U0FDZCxDQUFDO0lBRTRDLENBQUM7SUFFL0MsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxNQUFNLEVBQUU7WUFDL0IsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN4QzthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxNQUFNLEVBQUU7WUFDdEMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN4QztJQUNILENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQztRQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLO1lBQ3JELENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLElBQUk7WUFDbkQsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNYLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU07WUFDdkQsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsSUFBSTtZQUNwRCxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ1gsSUFBSSxDQUFDLFdBQVc7WUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUM7UUFDekQsSUFBSSxDQUFDLFdBQVc7WUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzFELElBQUksQ0FBQyxVQUFVO1lBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUN2RCxJQUFJLENBQUMsYUFBYTtZQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3pELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDO0lBQ25FLENBQUM7SUFFRCxtQ0FBbUM7SUFDbkMsVUFBVTtRQUNSLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDO1FBRTdDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUVwQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsZUFBZSxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDO1FBRTNFLElBQUksU0FBUyxFQUFFO1lBQ2IsNERBQTREO1lBQzVELE1BQU0sUUFBUSxHQUFHOzs7cUJBR0YsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFOzs7Y0FHNUIsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFOzs7O29CQUtoQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7Z0JBQ25DLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYTtnQkFDcEIsQ0FBQyxDQUFDLEVBQ047Ozs7Ozs7O09BUVgsQ0FBQztZQUVGLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFCLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNuQjtJQUNILENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDbEIsT0FBTztTQUNSO1FBRUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVuQyx3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDekIsT0FBTyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLE9BQU87U0FDUjtRQUVELDJCQUEyQjtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7WUFDckQsMkJBQTJCO1lBQzNCLHlCQUF5QjtZQUN6QiwwQkFBMEI7U0FDM0I7UUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxVQUFVLENBQUMsR0FBVztRQUNwQixJQUFJO1lBQ0YsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDYixPQUFPLElBQUksQ0FBQztTQUNiO1FBQUMsTUFBTTtZQUNOLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBRUQsZ0NBQWdDO0lBQ2hDLFdBQVcsQ0FBQyxHQUFXO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsZUFBZSxDQUFDLEdBQVc7UUFDekIsSUFBSTtZQUNGLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRTVCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQzVDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUNqQyxDQUFDO1NBQ0g7UUFBQyxNQUFNO1lBQ04sT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxHQUFXO1FBQzNCLElBQUk7WUFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUU1QixVQUFVO1lBQ1YsSUFDRSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7Z0JBQ3ZDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUM1QjtnQkFDQSxPQUFPLGlDQUFpQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2FBQ3hFO1lBQ0QsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDeEMsT0FBTyxpQ0FBaUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUN4RTtZQUVELFFBQVE7WUFDUixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUN6QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDOUMsT0FBTyxrQ0FBa0MsT0FBTyxFQUFFLENBQUM7YUFDcEQ7WUFFRCxrQ0FBa0M7WUFDbEMsSUFDRSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7Z0JBQ3RDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUNuQztnQkFDQSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztvQkFBRSxPQUFPLEdBQUcsQ0FBQztnQkFFeEQsT0FBTyxxQ0FBcUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO2FBQzlFO1lBRUQsT0FBTyxHQUFHLENBQUM7U0FDWjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsT0FBTyxHQUFHLENBQUM7U0FDWjtJQUNILENBQUM7SUFFRCwyREFBMkQ7SUFDM0QsWUFBWSxDQUFDLElBQVk7UUFDdkIsTUFBTSxjQUFjLEdBQUc7WUFDckIsZ0JBQWdCO1lBQ2hCLGtCQUFrQjtZQUNsQixTQUFTO1lBQ1QsZ0JBQWdCO1lBQ2hCLFFBQVE7WUFDUixjQUFjO1lBQ2Qsd0JBQXdCO1NBQ3pCLENBQUM7UUFFRixPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7K0dBdk5VLHFCQUFxQjttR0FBckIscUJBQXFCLG1NQ1JsQyw4c0JBK0JBOzs0RkR2QmEscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLG1CQUFtQjttR0FNcEIsUUFBUTtzQkFBaEIsS0FBSztnQkFxRWtCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCwgU2FmZVJlc291cmNlVXJsIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1pZnJhbWUtZmllbGRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2lmcmFtZS1maWVsZHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pZnJhbWUtZmllbGRzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSWZyYW1lRmllbGRzQ29tcG9uZW50IHtcblxuICBASW5wdXQoKSBxdWVzdGlvbjogYW55ID0ge307XG4gIFxuICBoZWlnaHQhOiBzdHJpbmc7XG4gIHdpZHRoITogc3RyaW5nO1xuICBjb250ZW50VHlwZTogc3RyaW5nID0gJyc7XG4gIGh0bWxDb250ZW50OiBzdHJpbmcgPSAnJztcbiAgY3NzQ29udGVudDogc3RyaW5nID0gJyc7XG4gIHNjcmlwdENvbnRlbnQ6IHN0cmluZyA9ICcnO1xuICB1cmxDb250ZW50OiBzdHJpbmcgPSAnJztcbiAgY291bnQhOiBudW1iZXI7XG5cbiAgc2FmZUh0bWxDb250ZW50ITogU2FmZUh0bWw7XG4gIHNhZmVVcmwhOiBTYWZlUmVzb3VyY2VVcmw7XG5cbiAgZW1iZWRkYWJsZURvbWFpbnMgPSBbXG4gICAgLy8gR2VuZXJpYyBzaXRlcyB0aGF0IHVzdWFsbHkgYWxsb3cgZW1iZWRkaW5nXG4gICAgJ3lvdXR1YmUuY29tJyxcbiAgICAneW91dHUuYmUnLFxuICAgICd2aW1lby5jb20nLFxuICAgICdwbGF5ZXIudmltZW8uY29tJyxcbiAgICAnbWFwcy5nb29nbGUuY29tJyxcbiAgICAnd3d3Lmdvb2dsZS5jb20vbWFwcycsXG4gICAgJ29wZW5zdHJlZXRtYXAub3JnJyxcbiAgICAnY29kZXNhbmRib3guaW8nLFxuICAgICdzdGFja2JsaXR6LmNvbScsXG4gICAgJ2pzZmlkZGxlLm5ldCcsXG4gICAgJ2NvZGVwZW4uaW8nLFxuICAgICdzcG90aWZ5LmNvbScsXG4gICAgJ3NvdW5kY2xvdWQuY29tJyxcbiAgICAnZmlnbWEuY29tJyxcbiAgICAnY2FudmEuY29tJyxcbiAgICAnbm90aW9uLnNvJyxcbiAgICAnZmFjZWJvb2suY29tL3BsdWdpbnMnLFxuICAgICdpbnN0YWdyYW0uY29tL3AnLFxuICAgICd0d2l0dGVyLmNvbScsXG4gIF07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcikge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnZhbHVlQXNzaWduZWQoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5jb250ZW50VHlwZSA9PT0gJ0hUTUwnKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVuZGVySHRtbCgpLCAwKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29udGVudFR5cGUgPT09ICdMSU5LJykge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlbmRlckxpbmsoKSwgMCk7XG4gICAgfVxuICB9XG5cbiAgdmFsdWVBc3NpZ25lZCgpIHtcbiAgICB0aGlzLmNvdW50ID0gdGhpcy5xdWVzdGlvbj8uY291bnQ7XG4gICAgdGhpcy53aWR0aCA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQuYXBwZWFyYW5jZS53aWR0aFxuICAgICAgPyB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LmFwcGVhcmFuY2Uud2lkdGggKyAncHgnXG4gICAgICA6ICcxMDAlJztcbiAgICB0aGlzLmhlaWdodCA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQuYXBwZWFyYW5jZS5oZWlnaHRcbiAgICAgID8gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5hcHBlYXJhbmNlLmhlaWdodCArICdweCdcbiAgICAgIDogJzEwMCUnO1xuICAgIHRoaXMuY29udGVudFR5cGUgPVxuICAgICAgdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5pRnJhbWVQcm9wZXJ0aWVzLmNvbnRlbnRUeXBlO1xuICAgIHRoaXMuaHRtbENvbnRlbnQgPVxuICAgICAgdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5pRnJhbWVQcm9wZXJ0aWVzLmh0bWwuY29udGVudDtcbiAgICB0aGlzLmNzc0NvbnRlbnQgPVxuICAgICAgdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5pRnJhbWVQcm9wZXJ0aWVzLnN0eWxlLmNzcztcbiAgICB0aGlzLnNjcmlwdENvbnRlbnQgPVxuICAgICAgdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5pRnJhbWVQcm9wZXJ0aWVzLnNjcmlwdC5jb2RlO1xuICAgIHRoaXMudXJsQ29udGVudCA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQuaUZyYW1lUHJvcGVydGllcy51cmw7XG4gIH1cbiAgQFZpZXdDaGlsZCgnaWZyYW1lUmVmJykgaWZyYW1lUmVmITogRWxlbWVudFJlZjxIVE1MSUZyYW1lRWxlbWVudD47XG4gIC8qKiBSZW5kZXIgSFRNTCB3aXRoIGR5bmFtaWMgQ1NTICovXG4gIHJlbmRlckh0bWwoKSB7XG4gICAgY29uc3QgaWZyYW1lID0gdGhpcy5pZnJhbWVSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBpZiAoIWlmcmFtZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgaWZyYW1lRG9jID0gaWZyYW1lLmNvbnRlbnREb2N1bWVudCB8fCBpZnJhbWUuY29udGVudFdpbmRvdz8uZG9jdW1lbnQ7XG5cbiAgICBpZiAoaWZyYW1lRG9jKSB7XG4gICAgICAvLyBCdWlsZCB0aGUgY29tcGxldGUgSFRNTCBjb250ZW50IHRvIGluamVjdCBpbnRvIHRoZSBpZnJhbWVcbiAgICAgIGNvbnN0IHNhZmVIdG1sID0gYFxuICAgICAgICA8aHRtbD5cbiAgICAgICAgICA8aGVhZD5cbiAgICAgICAgICAgIDxzdHlsZT4ke3RoaXMuY3NzQ29udGVudCB8fCAnJ308L3N0eWxlPlxuICAgICAgICAgIDwvaGVhZD5cbiAgICAgICAgICA8Ym9keT5cbiAgICAgICAgICAgICR7dGhpcy5odG1sQ29udGVudCB8fCAnJ31cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgIChmdW5jdGlvbihsb2NhbFN0b3JhZ2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgJHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1NhZmVTY3JpcHQodGhpcy5zY3JpcHRDb250ZW50KVxuICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5zY3JpcHRDb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9ICc8cCBzdHlsZT1cImNvbG9yOnJlZFwiPlNjcmlwdCBFcnJvcjogJyArIGUubWVzc2FnZSArICc8L3A+JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pKHdpbmRvdy5sb2NhbFN0b3JhZ2UpO1xuICAgICAgICAgICAgPC9zY3JpcHQ+XG4gICAgICAgICAgPC9ib2R5PlxuICAgICAgICA8L2h0bWw+XG4gICAgICBgO1xuXG4gICAgICBpZnJhbWVEb2Mub3BlbigpO1xuICAgICAgaWZyYW1lRG9jLndyaXRlKHNhZmVIdG1sKTtcbiAgICAgIGlmcmFtZURvYy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlckxpbmsoKSB7XG4gICAgaWYgKCF0aGlzLnVybENvbnRlbnQpIHtcbiAgICAgIHRoaXMuc2FmZVVybCA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMudXJsQ29udGVudC50cmltKCk7XG5cbiAgICAvLyBDaGVjayBpZiBVUkwgaXMgdmFsaWRcbiAgICBpZiAoIXRoaXMuaXNWYWxpZFVybCh1cmwpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgVVJMIGZvcm1hdCcpO1xuICAgICAgdGhpcy5zYWZlVXJsID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgZW1iZWRkYWJsZSBob3N0XG4gICAgaWYgKCF0aGlzLmlzRW1iZWRkYWJsZVVybCh1cmwpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1RoaXMgd2Vic2l0ZSBtYXkgbm90IGFsbG93IGVtYmVkZGluZycpO1xuICAgICAgLy8gWW91IGNhbiBzdGlsbCBMRVQgaXQgdHJ5XG4gICAgICAvLyBPciBibG9jayBpdCBjb21wbGV0ZWx5XG4gICAgICAvLyBGb3Igbm93OiBhbGxvdyBidXQgd2FyblxuICAgIH1cblxuICAgIGNvbnN0IGVtYmVkVXJsID0gdGhpcy5jb252ZXJ0VG9FbWJlZFVybCh1cmwpO1xuICAgIHRoaXMuc2FmZVVybCA9IHRoaXMuc2FuaXRpemVVcmwoZW1iZWRVcmwpO1xuICB9XG5cbiAgaXNWYWxpZFVybCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBuZXcgVVJMKHVybCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKiogU2FuaXRpemUgVVJMcyBmb3IgaWZyYW1lcyAqL1xuICBzYW5pdGl6ZVVybCh1cmw6IHN0cmluZyk6IFNhZmVSZXNvdXJjZVVybCB7XG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh1cmwpO1xuICB9XG5cbiAgaXNFbWJlZGRhYmxlVXJsKHVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwodXJsKTtcblxuICAgICAgcmV0dXJuIHRoaXMuZW1iZWRkYWJsZURvbWFpbnMuc29tZSgoZG9tYWluKSA9PlxuICAgICAgICBwYXJzZWQuaG9zdG5hbWUuaW5jbHVkZXMoZG9tYWluKVxuICAgICAgKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjb252ZXJ0VG9FbWJlZFVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwodXJsKTtcblxuICAgICAgLy8gWW91VHViZVxuICAgICAgaWYgKFxuICAgICAgICBwYXJzZWQuaG9zdG5hbWUuaW5jbHVkZXMoJ3lvdXR1YmUuY29tJykgJiZcbiAgICAgICAgcGFyc2VkLnNlYXJjaFBhcmFtcy5nZXQoJ3YnKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBgaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvJHtwYXJzZWQuc2VhcmNoUGFyYW1zLmdldCgndicpfWA7XG4gICAgICB9XG4gICAgICBpZiAocGFyc2VkLmhvc3RuYW1lLmluY2x1ZGVzKCd5b3V0dS5iZScpKSB7XG4gICAgICAgIHJldHVybiBgaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvJHtwYXJzZWQucGF0aG5hbWUuc3Vic3RyaW5nKDEpfWA7XG4gICAgICB9XG5cbiAgICAgIC8vIFZpbWVvXG4gICAgICBpZiAocGFyc2VkLmhvc3RuYW1lLmluY2x1ZGVzKCd2aW1lby5jb20nKSkge1xuICAgICAgICBjb25zdCB2aWRlb0lkID0gcGFyc2VkLnBhdGhuYW1lLnNwbGl0KCcvJylbMV07XG4gICAgICAgIHJldHVybiBgaHR0cHM6Ly9wbGF5ZXIudmltZW8uY29tL3ZpZGVvLyR7dmlkZW9JZH1gO1xuICAgICAgfVxuXG4gICAgICAvLyBHb29nbGUgTWFwcyAobm8gQVBJIGtleSBuZWVkZWQpXG4gICAgICBpZiAoXG4gICAgICAgIHBhcnNlZC5ob3N0bmFtZS5pbmNsdWRlcygnZ29vZ2xlLmNvbScpICYmXG4gICAgICAgIHBhcnNlZC5wYXRobmFtZS5zdGFydHNXaXRoKCcvbWFwcycpXG4gICAgICApIHtcbiAgICAgICAgaWYgKHBhcnNlZC5wYXRobmFtZS5pbmNsdWRlcygnL21hcHMvZW1iZWQnKSkgcmV0dXJuIHVybDtcblxuICAgICAgICByZXR1cm4gYGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vbWFwcy9lbWJlZD8ke3BhcnNlZC5zZWFyY2hQYXJhbXMudG9TdHJpbmcoKX1gO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXJsO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuICB9XG5cbiAgLyoqIEJhc2ljIHNjcmlwdCB2YWxpZGF0aW9uIHRvIHByZXZlbnQgdW5zYWZlIG9wZXJhdGlvbnMgKi9cbiAgaXNTYWZlU2NyaXB0KGNvZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHVuc2FmZVBhdHRlcm5zID0gW1xuICAgICAgL3dpbmRvd1xcLnBhcmVudC8sXG4gICAgICAvZG9jdW1lbnRcXC5jb29raWUvLFxuICAgICAgL2ZldGNoXFwoLyxcbiAgICAgIC9YTUxIdHRwUmVxdWVzdC8sXG4gICAgICAvZXZhbFxcKC8sXG4gICAgICAvbmV3IEZ1bmN0aW9uLyxcbiAgICAgIC9zZXRUaW1lb3V0fHNldEludGVydmFsLyxcbiAgICBdO1xuXG4gICAgcmV0dXJuICF1bnNhZmVQYXR0ZXJucy5zb21lKChwYXR0ZXJuKSA9PiBwYXR0ZXJuLnRlc3QoY29kZSkpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY3VzdG9tLWVtYmVkIG1iLTRcIlxuICAgICBbc3R5bGUud2lkdGhdPVwid2lkdGhcIlxuICAgICBbc3R5bGUuaGVpZ2h0XT1cImhlaWdodFwiPlxuXG4gIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbnRlbnRUeXBlXCI+XG5cbiAgICA8IS0tIEhUTUwsIENTUywgYW5kIFNjcmlwdCByZW5kZXJlZCB0b2dldGhlciAtLT5cbiAgICA8aWZyYW1lXG4gICAgICAqbmdTd2l0Y2hDYXNlPVwiJ0hUTUwnXCJcbiAgICAgICNpZnJhbWVSZWZcbiAgICAgIHNhbmRib3g9XCJhbGxvdy1zY3JpcHRzIGFsbG93LXNhbWUtb3JpZ2luXCJcbiAgICAgIFtzdHlsZS53aWR0aF09XCJ3aWR0aFwiXG4gICAgICBbc3R5bGUuaGVpZ2h0XT1cImhlaWdodFwiXG4gICAgICBmcmFtZWJvcmRlcj1cIjBcIlxuICAgID48L2lmcmFtZT5cblxuICAgIDwhLS0gTGluayBFbWJlZCAtLT5cbiAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ0xJTksnXCI+XG4gICAgIDxpZnJhbWVcbiAgICAgKm5nSWY9XCJzYWZlVXJsXCJcbiAgICAgW3NyY109XCJzYWZlVXJsXCJcbiAgICAgW3N0eWxlLndpZHRoXT1cIndpZHRoXCJcbiAgICAgW3N0eWxlLmhlaWdodF09XCJoZWlnaHRcIlxuICAgICBmcmFtZWJvcmRlcj1cIjBcIlxuICAgICBhbGxvd2Z1bGxzY3JlZW4+XG4gICA8L2lmcmFtZT5cbiAgICAgPC9kaXY+XG4gICAgXG5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==