stream-chat-angular 4.66.0 → 4.66.2

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,2 +1,2 @@
1
- export const version = '4.66.0';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2Fzc2V0cy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdmVyc2lvbiA9ICc0LjY2LjAnO1xuIl19
1
+ export const version = '4.66.2';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2Fzc2V0cy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdmVyc2lvbiA9ICc0LjY2LjInO1xuIl19
@@ -20,16 +20,30 @@ export class AttachmentConfigurationService {
20
20
  if (this.customImageAttachmentConfigurationHandler) {
21
21
  return this.customImageAttachmentConfigurationHandler(attachment, location, element);
22
22
  }
23
- const url = new URL((attachment.img_url ||
23
+ const defaultOriginalDimension = 1000000;
24
+ const urlString = (attachment.img_url ||
24
25
  attachment.thumb_url ||
25
26
  attachment.image_url ||
26
- ''));
27
+ '');
28
+ let url;
29
+ try {
30
+ url = new URL(urlString);
31
+ }
32
+ catch (error) {
33
+ return {
34
+ url: urlString,
35
+ width: '',
36
+ height: '',
37
+ originalHeight: defaultOriginalDimension,
38
+ originalWidth: defaultOriginalDimension,
39
+ };
40
+ }
27
41
  const originalHeight = Number(url.searchParams.get('oh')) > 1
28
42
  ? Number(url.searchParams.get('oh'))
29
- : 1000000;
43
+ : defaultOriginalDimension;
30
44
  const originalWidth = Number(url.searchParams.get('ow')) > 1
31
45
  ? Number(url.searchParams.get('ow'))
32
- : 1000000;
46
+ : defaultOriginalDimension;
33
47
  const displayWarning = location === 'gallery' || location === 'single';
34
48
  const sizeRestriction = this.getSizingRestrictions(url, element, displayWarning);
35
49
  if (sizeRestriction) {
@@ -59,23 +73,29 @@ export class AttachmentConfigurationService {
59
73
  let originalHeight = 1000000;
60
74
  let originalWidth = 1000000;
61
75
  if (attachment.thumb_url && this.shouldGenerateVideoThumbnail) {
62
- const url = new URL(attachment.thumb_url);
63
- originalHeight =
64
- Number(url.searchParams.get('oh')) > 1
65
- ? Number(url.searchParams.get('oh'))
66
- : originalHeight;
67
- originalWidth =
68
- Number(url.searchParams.get('ow')) > 1
69
- ? Number(url.searchParams.get('ow'))
70
- : originalWidth;
71
- const displayWarning = true;
72
- const sizeRestriction = this.getSizingRestrictions(url, element, displayWarning);
73
- if (sizeRestriction) {
74
- sizeRestriction.height *= 2;
75
- sizeRestriction.width *= 2;
76
- this.addResizingParamsToUrl(sizeRestriction, url);
76
+ let url;
77
+ try {
78
+ url = new URL(attachment.thumb_url);
79
+ originalHeight =
80
+ Number(url.searchParams.get('oh')) > 1
81
+ ? Number(url.searchParams.get('oh'))
82
+ : originalHeight;
83
+ originalWidth =
84
+ Number(url.searchParams.get('ow')) > 1
85
+ ? Number(url.searchParams.get('ow'))
86
+ : originalWidth;
87
+ const displayWarning = true;
88
+ const sizeRestriction = this.getSizingRestrictions(url, element, displayWarning);
89
+ if (sizeRestriction) {
90
+ sizeRestriction.height *= 2;
91
+ sizeRestriction.width *= 2;
92
+ this.addResizingParamsToUrl(sizeRestriction, url);
93
+ }
94
+ thumbUrl = url.href;
95
+ }
96
+ catch (_a) {
97
+ thumbUrl = attachment.thumb_url;
77
98
  }
78
- thumbUrl = url.href;
79
99
  }
80
100
  return {
81
101
  url: attachment.asset_url || '',
@@ -163,4 +183,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
163
183
  providedIn: 'root',
164
184
  }]
165
185
  }] });
166
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC1jb25maWd1cmF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvYXR0YWNobWVudC1jb25maWd1cmF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFTM0M7O0dBRUc7QUFJSCxNQUFNLE9BQU8sOEJBQThCO0lBSDNDO1FBaUNFOztXQUVHO1FBQ0gsaUNBQTRCLEdBQUcsSUFBSSxDQUFDO0tBZ09yQztJQTlOQzs7Ozs7T0FLRztJQUNILCtCQUErQixDQUM3QixVQUF5QixFQUN6QixRQUEyQyxFQUMzQyxPQUFvQjtRQUVwQixJQUFJLElBQUksQ0FBQyx5Q0FBeUMsRUFBRTtZQUNsRCxPQUFPLElBQUksQ0FBQyx5Q0FBeUMsQ0FDbkQsVUFBVSxFQUNWLFFBQVEsRUFDUixPQUFPLENBQ1IsQ0FBQztTQUNIO1FBRUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQ2pCLENBQUMsVUFBVSxDQUFDLE9BQU87WUFDakIsVUFBVSxDQUFDLFNBQVM7WUFDcEIsVUFBVSxDQUFDLFNBQVM7WUFDcEIsRUFBRSxDQUFXLENBQ2hCLENBQUM7UUFDRixNQUFNLGNBQWMsR0FDbEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNwQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDZCxNQUFNLGFBQWEsR0FDakIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNwQyxDQUFDLENB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SUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQ2pFO1lBQ0QsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQ2pFO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxXQUF3QjtRQUNwRCxNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxtQ0FBbUMsQ0FDckQsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQzlDLENBQUM7UUFDRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsbUNBQW1DLENBQ3hELGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUNsRCxDQUFDO1FBQ0YsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLG1DQUFtQyxDQUN2RCxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FDakQsQ0FBQztRQUVGLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFTyxtQ0FBbUMsQ0FBQyxRQUFnQjtRQUMxRCxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztJQUN6RCxDQUFDOzsySEFoUVUsOEJBQThCOytIQUE5Qiw4QkFBOEIsY0FGN0IsTUFBTTsyRkFFUCw4QkFBOEI7a0JBSDFDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXR0YWNobWVudCB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7XG4gIEF0dGFjaG1lbnRDb25maWdyYXRpb24sXG4gIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MsXG4gIEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24sXG4gIFZpZGVvQXR0YWNobWVudENvbmZpZ3VyYXRpb24sXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFRoZSBgQXR0YWNobWVudENvbmZpZ3VyYXRpb25TZXJ2aWNlYCBwcm92aWRlcyBjdXN0b21pemF0aW9uIGZvciBjZXJ0YWluIGF0dHJpYnV0ZXMgb2YgYXR0YWNobWVudHMgZGlzcGxheWVkIGluc2lkZSB0aGUgbWVzc2FnZSBjb21wb25lbnQuIElmIHlvdSdyZSB1c2luZyB5b3VyIG93biBDRE4sIHlvdSBjYW4gaW50ZWdyYXRlIHJlc2l6aW5nIGZlYXR1cmVzIG9mIGl0IGJ5IHByb3ZpZGluZyB5b3VyIG93biBoYW5kbGVycy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEF0dGFjaG1lbnRDb25maWd1cmF0aW9uU2VydmljZTxcbiAgVCBleHRlbmRzIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MgPSBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzXG4+IHtcbiAgLyoqXG4gICAqIEEgY3VzdG9tIGhhbmRsZXIgY2FuIGJlIHByb3ZpZGVkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGltYWdlIGF0dGFjaG1lbnQgKGltYWdlcyB1cGxvYWRlZCBmcm9tIGZpbGVzKSBjb25maWd1cmF0aW9uLiBCeSBkZWZhdWx0IHRoZSBTREsgdXNlcyBmaXhlZCBpbWFnZSBoZWlnaHQgKGEgc2l6ZSB0aGF0J3Mga25vd24gYmVmb3JlIGltYWdlIGlzIGxvYWRlZCksIGlmIHlvdSBvdmVycmlkZSB0aGF0IHdpdGggZHluYW1pYyBpbWFnZSBoZWlnaHQgKGZvciBleGFtcGxlOiBoZWlnaHQ6IDEwMCUpIHRoZSBzY3JvbGxpbmcgbG9naWMgaW5zaWRlIHRoZSBtZXNzYWdlIGxpc3QgY2FuIGJyZWFrLlxuICAgKi9cbiAgY3VzdG9tSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXI/OiAoXG4gICAgYTogQXR0YWNobWVudDxUPixcbiAgICB0eXBlOiAnZ2FsbGVyeScgfCAnc2luZ2xlJyB8ICdjYXJvdXNlbCcsXG4gICAgY29udGFpbmVyRWxlbWVudDogSFRNTEVsZW1lbnRcbiAgKSA9PiBJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uO1xuICAvKipcbiAgICogQSBjdXN0b20gaGFuZGxlciBjYW4gYmUgcHJvdmlkZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmlkZW8gYXR0YWNobWVudCAodmlkZW9zIHVwbG9hZGVkIGZyb20gZmlsZXMpIGNvbmZpZ3VyYXRpb24uIEJ5IGRlZmF1bHQgdGhlIFNESyB1c2VzIGZpeGVkIGhlaWdodCAoYSBzaXplIHRoYXQncyBrbm93biBiZWZvcmUgdmlkZW8gaXMgbG9hZGVkKSwgaWYgeW91IG92ZXJyaWRlIHRoYXQgd2l0aCBkeW5hbWljIGhlaWdodCAoZm9yIGV4YW1wbGU6IGhlaWdodDogMTAwJSkgdGhlIHNjcm9sbGluZyBsb2dpYyBpbnNpZGUgdGhlIG1lc3NhZ2UgbGlzdCBjYW4gYnJlYWsuXG4gICAqL1xuICBjdXN0b21WaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uSGFuZGxlcj86IChcbiAgICBhOiBBdHRhY2htZW50PFQ+LFxuICAgIGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50XG4gICkgPT4gVmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbjtcbiAgLyoqXG4gICAqIEEgY3VzdG9tIGhhbmRsZXIgY2FuIGJlIHByb3ZpZGVkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGdpcGh5IGF0dGFjaG1lbnQgKEdJRnMgc2VudCB3aXRoIHRoZSAvZ2lwaHkgY29tbWFuZCkgY29uZmlndXJhdGlvbi4gQnkgZGVmYXVsdCB0aGUgU0RLIHVzZXMgZml4ZWQgaGVpZ2h0IChhIHNpemUgdGhhdCdzIGtub3duIGJlZm9yZSB0aGUgR0lGIGlzIGxvYWRlZCksIGlmIHlvdSBvdmVycmlkZSB0aGF0IHdpdGggZHluYW1pYyBoZWlnaHQgKGZvciBleGFtcGxlOiBoZWlnaHQ6IDEwMCUpIHRoZSBzY3JvbGxpbmcgbG9naWMgaW5zaWRlIHRoZSBtZXNzYWdlIGxpc3QgY2FuIGJyZWFrLlxuICAgKi9cbiAgY3VzdG9tR2lwaHlBdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXI/OiAoXG4gICAgYTogQXR0YWNobWVudDxUPlxuICApID0+IEF0dGFjaG1lbnRDb25maWdyYXRpb247XG4gIC8qKlxuICAgKiBBIGN1c3RvbSBoYW5kbGVyIGNhbiBiZSBwcm92aWRlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBzY3JhcGVkIGltYWdlIGF0dGFjaG1lbnQgKGltYWdlcyBmb3VuZCBpbiBsaW5rcyBpbnNpZGUgbWVzc2FnZXMpIGNvbmZpZ3VyYXRpb24uIEJ5IGRlZmF1bHQgdGhlIFNESyB1c2VzIGZpeGVkIGhlaWdodCAoYSBzaXplIHRoYXQncyBrbm93biBiZWZvcmUgaW1hZ2UgaXMgbG9hZGVkKSwgaWYgeW91IG92ZXJyaWRlIHRoYXQgd2l0aCBkeW5hbWljIGhlaWdodCAoZm9yIGV4YW1wbGU6IGhlaWdodDogMTAwJSkgdGhlIHNjcm9sbGluZyBsb2dpYyBpbnNpZGUgdGhlIG1lc3NhZ2UgbGlzdCBjYW4gYnJlYWsuXG4gICAqL1xuICBjdXN0b21TY3JhcGVkSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXI/OiAoXG4gICAgYTogQXR0YWNobWVudDxUPlxuICApID0+IEF0dGFjaG1lbnRDb25maWdyYXRpb247XG4gIC8qKlxuICAgKiBZb3UgY2FuIHR1cm4gb24vb2ZmIHRodW1ibmFpbCBnZW5lcmF0aW9uIGZvciB2aWRlbyBhdHRhY2htZW50c1xuICAgKi9cbiAgc2hvdWxkR2VuZXJhdGVWaWRlb1RodW1ibmFpbCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGltYWdlIGF0dGFjaG1lbnRzLCBpdCdzIHBvc3NpYmxlIHRvIHByb3ZpZGUgeW91ciBvd24gZnVuY3Rpb24gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbG9naWNcbiAgICogQHBhcmFtIGF0dGFjaG1lbnQgVGhlIGF0dGFjaG1lbnQgdG8gY29uZmlndXJlXG4gICAqIEBwYXJhbSBsb2NhdGlvbiBTcGVjaWZpZXMgd2hlcmUgdGhlIGltYWdlIGlzIGJlaW5nIGRpc3BsYXllZFxuICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgZGVmYXVsdCByZXNpemluZyBsb2dpY3MgcmVhZHMgdGhlIGhlaWdodC9tYXgtaGVpZ2h0IGFuZCBtYXgtd2lkdGggcHJvcHBlcnRpZXMgb2YgdGhpcyBlbGVtZW50IGFuZCByZWR1Y2VzIGZpbGUgc2l6ZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmFsdWVzLiBGaWxlIHNpemUgcmVkdWN0aW9uIGlzIGRvbmUgYnkgU3RyZWFtJ3MgQ0ROLlxuICAgKi9cbiAgZ2V0SW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICBhdHRhY2htZW50OiBBdHRhY2htZW50PFQ+LFxuICAgIGxvY2F0aW9uOiAnZ2FsbGVyeScgfCAnc2luZ2xlJyB8ICdjYXJvdXNlbCcsXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnRcbiAgKTogSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbiB7XG4gICAgaWYgKHRoaXMuY3VzdG9tSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmN1c3RvbUltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb25IYW5kbGVyKFxuICAgICAgICBhdHRhY2htZW50LFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgZWxlbWVudFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKFxuICAgICAgKGF0dGFjaG1lbnQuaW1nX3VybCB8fFxuICAgICAgICBhdHRhY2htZW50LnRodW1iX3VybCB8fFxuICAgICAgICBhdHRhY2htZW50LmltYWdlX3VybCB8fFxuICAgICAgICAnJykgYXMgc3RyaW5nXG4gICAgKTtcbiAgICBjb25zdCBvcmlnaW5hbEhlaWdodCA9XG4gICAgICBOdW1iZXIodXJsLnNlYXJjaFBhcmFtcy5nZXQoJ29oJykpID4gMVxuICAgICAgICA/IE51bWJlcih1cmwuc2VhcmNoUGFyYW1zLmdldCgnb2gnKSlcbiAgICAgICAgOiAxMDAwMDAwO1xuICAgIGNvbnN0IG9yaWdpbmFsV2lkdGggPVxuICAgICAgTnVtYmVyKHVybC5zZWFyY2hQYXJhbXMuZ2V0KCdvdycpKSA+IDFcbiAgICAgICAgPyBOdW1iZXIodXJsLnNlYXJjaFBhcmFtcy5nZXQoJ293JykpXG4gICAgICAgIDogMTAwMDAwMDtcbiAgICBjb25zdCBkaXNwbGF5V2FybmluZyA9IGxvY2F0aW9uID09PSAnZ2FsbGVyeScgfHwgbG9jYXRpb24gPT09ICdzaW5nbGUnO1xuICAgIGNvbnN0IHNpemVSZXN0cmljdGlvbiA9IHRoaXMuZ2V0U2l6aW5nUmVzdHJpY3Rpb25zKFxuICAgICAgdXJsLFxuICAgICAgZWxlbWVudCxcbiAgICAgIGRpc3BsYXlXYXJuaW5nXG4gICAgKTtcblxuICAgIGlmIChzaXplUmVzdHJpY3Rpb24pIHtcbiAgICAgIC8vIEFwcGx5IDJ4IGZvciByZXRpbmEgZGlzcGxheXNcbiAgICAgIHNpemVSZXN0cmljdGlvbi5oZWlnaHQgKj0gMjtcbiAgICAgIHNpemVSZXN0cmljdGlvbi53aWR0aCAqPSAyO1xuICAgICAgdGhpcy5hZGRSZXNpemluZ1BhcmFtc1RvVXJsKHNpemVSZXN0cmljdGlvbiwgdXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdXJsOiB1cmwuaHJlZixcbiAgICAgIHdpZHRoOiAnJywgLy8gTm90IHNldCB0byByZXNwZWN0IHJlc3BvbnNpdmUgd2lkdGhcbiAgICAgIGhlaWdodDogJycsIC8vIFNldCBmcm9tIENTU1xuICAgICAgb3JpZ2luYWxIZWlnaHQsXG4gICAgICBvcmlnaW5hbFdpZHRoLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgY29uZmlndXJhdGlvbiBmb3IgdmlkZW8gYXR0YWNobWVudHMsIGl0J3MgcG9zc2libGUgdG8gcHJvdmlkZSB5b3VyIG93biBmdW5jdGlvbiB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBsb2dpY1xuICAgKiBAcGFyYW0gYXR0YWNobWVudCBUaGUgYXR0YWNobWVudCB0byBjb25maWd1cmVcbiAgICogQHBhcmFtIGVsZW1lbnQgVGhlIGRlZmF1bHQgcmVzaXppbmcgbG9naWNzIHJlYWRzIHRoZSBoZWlnaHQvbWF4LWhlaWdodCBhbmQgbWF4LXdpZHRoIHByb3BwZXJ0aWVzIG9mIHRoaXMgZWxlbWVudCBhbmQgcmVkdWNlcyBmaWxlIHNpemUgYmFzZWQgb24gdGhlIGdpdmVuIHZhbHVlcy4gRmlsZSBzaXplIHJlZHVjdGlvbiBpcyBkb25lIGJ5IFN0cmVhbSdzIENETi5cbiAgICovXG4gIGdldFZpZGVvQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgYXR0YWNobWVudDogQXR0YWNobWVudDxUPixcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudFxuICApOiBWaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uIHtcbiAgICBpZiAodGhpcy5jdXN0b21WaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uSGFuZGxlcikge1xuICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tVmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXIoXG4gICAgICAgIGF0dGFjaG1lbnQsXG4gICAgICAgIGVsZW1lbnRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHRodW1iVXJsID0gdW5kZWZpbmVkO1xuICAgIGxldCBvcmlnaW5hbEhlaWdodCA9IDEwMDAwMDA7XG4gICAgbGV0IG9yaWdpbmFsV2lkdGggPSAxMDAwMDAwO1xuICAgIGlmIChhdHRhY2htZW50LnRodW1iX3VybCAmJiB0aGlzLnNob3VsZEdlbmVyYXRlVmlkZW9UaHVtYm5haWwpIHtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYXR0YWNobWVudC50aHVtYl91cmwpO1xuICAgICAgb3JpZ2luYWxIZWlnaHQgPVxuICAgICAgICBOdW1iZXIodXJsLnNlYXJjaFBhcmFtcy5nZXQoJ29oJykpID4gMVxuICAgICAgICAgID8gTnVtYmVyKHVybC5zZWFyY2hQYXJhbXMuZ2V0KCdvaCcpKVxuICAgICAgICAgIDogb3JpZ2luYWxIZWlnaHQ7XG4gICAgICBvcmlnaW5hbFdpZHRoID1cbiAgICAgICAgTnVtYmVyKHVybC5zZWFyY2hQYXJhbXMuZ2V0KCdvdycpKSA+IDFcbiAgICAgICAgICA/IE51bWJlcih1cmwuc2VhcmNoUGFyYW1zLmdldCgnb3cnKSlcbiAgICAgICAgICA6IG9yaWdpbmFsV2lkdGg7XG4gICAgICBjb25zdCBkaXNwbGF5V2FybmluZyA9IHRydWU7XG4gICAgICBjb25zdCBzaXplUmVzdHJpY3Rpb24gPSB0aGlzLmdldFNpemluZ1Jlc3RyaWN0aW9ucyhcbiAgICAgICAgdXJsLFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBkaXNwbGF5V2FybmluZ1xuICAgICAgKTtcblxuICAgICAgaWYgKHNpemVSZXN0cmljdGlvbikge1xuICAgICAgICBzaXplUmVzdHJpY3Rpb24uaGVpZ2h0ICo9IDI7XG4gICAgICAgIHNpemVSZXN0cmljdGlvbi53aWR0aCAqPSAyO1xuICAgICAgICB0aGlzLmFkZFJlc2l6aW5nUGFyYW1zVG9Vcmwoc2l6ZVJlc3RyaWN0aW9uLCB1cmwpO1xuICAgICAgfVxuICAgICAgdGh1bWJVcmwgPSB1cmwuaHJlZjtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHVybDogYXR0YWNobWVudC5hc3NldF91cmwgfHwgJycsXG4gICAgICB3aWR0aDogJycsIC8vIE5vdCBzZXQgdG8gcmVzcGVjdCByZXNwb25zaXZlIHdpZHRoXG4gICAgICBoZWlnaHQ6ICcnLCAvLyBTZXQgZnJvbSBDU1NcbiAgICAgIHRodW1iVXJsOiB0aHVtYlVybCxcbiAgICAgIG9yaWdpbmFsSGVpZ2h0LFxuICAgICAgb3JpZ2luYWxXaWR0aCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGdpcGh5IGF0dGFjaG1lbnRzLCBpdCdzIHBvc3NpYmxlIHRvIHByb3ZpZGUgeW91ciBvd24gZnVuY3Rpb24gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbG9naWNcbiAgICogQHBhcmFtIGF0dGFjaG1lbnQgVGhlIGF0dGFjaG1lbnQgdG8gY29uZmlndXJlXG4gICAqL1xuICBnZXRHaXBoeUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgIGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQ8VD5cbiAgKTogQXR0YWNobWVudENvbmZpZ3JhdGlvbiB7XG4gICAgaWYgKHRoaXMuY3VzdG9tR2lwaHlBdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmN1c3RvbUdpcGh5QXR0YWNobWVudENvbmZpZ3VyYXRpb25IYW5kbGVyKGF0dGFjaG1lbnQpO1xuICAgIH1cblxuICAgIGNvbnN0IGdpcGh5ID0gYXR0YWNobWVudC5naXBoeT8uZml4ZWRfaGVpZ2h0X2Rvd25zYW1wbGVkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHVybDogZ2lwaHk/LnVybCB8fCBhdHRhY2htZW50LmltYWdlX3VybCB8fCBhdHRhY2htZW50LnRodW1iX3VybCB8fCAnJyxcbiAgICAgIGhlaWdodDogZ2lwaHk/LmhlaWdodCA/IGAke2dpcGh5Py5oZWlnaHR9cHhgIDogJzMwMHB4JyxcbiAgICAgIHdpZHRoOiBnaXBoeT8ud2lkdGggPyBgJHtnaXBoeT8ud2lkdGh9cHhgIDogJycsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBjb25maWd1cmF0aW9uIGZvciBzY3JhcGVkIGltYWdlIGF0dGFjaG1lbnRzLCBpdCdzIHBvc3NpYmxlIHRvIHByb3ZpZGUgeW91ciBvd24gZnVuY3Rpb24gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbG9naWNcbiAgICogQHBhcmFtIGF0dGFjaG1lbnQgVGhlIGF0dGFjaG1lbnQgdG8gY29uZmlndXJlXG4gICAqL1xuICBnZXRTY3JhcGVkSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICBhdHRhY2htZW50OiBBdHRhY2htZW50PFQ+XG4gICk6IEF0dGFjaG1lbnRDb25maWdyYXRpb24ge1xuICAgIGlmICh0aGlzLmN1c3RvbVNjcmFwZWRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uSGFuZGxlcikge1xuICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tU2NyYXBlZEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb25IYW5kbGVyKGF0dGFjaG1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB1cmw6IGF0dGFjaG1lbnQuaW1hZ2VfdXJsIHx8IGF0dGFjaG1lbnQudGh1bWJfdXJsIHx8ICcnLFxuICAgICAgd2lkdGg6ICcnLFxuICAgICAgaGVpZ2h0OiAnJywgLy8gU2V0IGZyb20gQ1NTXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUmVzaXppbmdQYXJhbXNUb1VybChcbiAgICBzaXplUmVzdHJpY3Rpb246IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSxcbiAgICB1cmw6IFVSTFxuICApIHtcbiAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgnaCcsIHNpemVSZXN0cmljdGlvbi5oZWlnaHQudG9TdHJpbmcoKSk7XG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ3cnLCBzaXplUmVzdHJpY3Rpb24ud2lkdGgudG9TdHJpbmcoKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNpemluZ1Jlc3RyaWN0aW9ucyhcbiAgICB1cmw6IFVSTCxcbiAgICBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgZGlzcGxheVdhcm5pbmcgPSBmYWxzZVxuICApIHtcbiAgICBjb25zdCB1cmxQYXJhbXMgPSB1cmwuc2VhcmNoUGFyYW1zO1xuICAgIGNvbnN0IG9yaWdpbmFsSGVpZ2h0ID0gTnVtYmVyKHVybFBhcmFtcy5nZXQoJ29oJykpIHx8IDE7XG4gICAgY29uc3Qgb3JpZ2luYWxXaWR0aCA9IE51bWJlcih1cmxQYXJhbXMuZ2V0KCdvdycpKSB8fCAxO1xuICAgIGNvbnN0IGNzc1NpemVSZXN0cmljdGlvbiA9IHRoaXMuZ2V0Q1NTU2l6ZVJlc3RyaWN0aW9uKGh0bWxFbGVtZW50KTtcbiAgICBsZXQgc2l6ZVJlc3RyaWN0aW9uOiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAoXG4gICAgICAoY3NzU2l6ZVJlc3RyaWN0aW9uLm1heEhlaWdodCB8fCBjc3NTaXplUmVzdHJpY3Rpb24uaGVpZ2h0KSAmJlxuICAgICAgY3NzU2l6ZVJlc3RyaWN0aW9uLm1heFdpZHRoXG4gICAgKSB7XG4gICAgICBzaXplUmVzdHJpY3Rpb24gPSB0aGlzLmdldFNpemVSZXN0cmljdGlvbnMoXG4gICAgICAgIG9yaWdpbmFsSGVpZ2h0LFxuICAgICAgICBvcmlnaW5hbFdpZHRoLFxuICAgICAgICAoY3NzU2l6ZVJlc3RyaWN0aW9uLm1heEhlaWdodCB8fCBjc3NTaXplUmVzdHJpY3Rpb24uaGVpZ2h0KSEsXG4gICAgICAgIGNzc1NpemVSZXN0cmljdGlvbi5tYXhXaWR0aFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2l6ZVJlc3RyaWN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKGRpc3BsYXlXYXJuaW5nKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgSW52YWxpZCB2YWx1ZSBzZXQgZm9yIGhlaWdodC9tYXgtaGVpZ2h0IGFuZC9vciBtYXgtd2lkdGggZm9yIEhUTUwgZWxlbWVudCwgdGhpcyBjYW4gY2F1c2Ugc2Nyb2xsaW5nIGlzc3VlcyBpbnNpZGUgdGhlIG1lc3NhZ2UgbGlzdCwgbW9yZSBpbmZvIGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9zZGsvYW5ndWxhci9jb21wb25lbnRzL0F0dGFjaG1lbnRMaXN0Q29tcG9uZW50LyNpbWFnZS1hbmQtdmlkZW8tc2l6aW5nLCBhdHRhY2htZW50IFVSTDogJHt1cmwudG9TdHJpbmcoKX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpemVSZXN0cmljdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2l6ZVJlc3RyaWN0aW9ucyhcbiAgICBvcmlnaW5hbEhlaWdodDogbnVtYmVyLFxuICAgIG9yaWdpbmFsV2lkdGg6IG51bWJlcixcbiAgICBtYXhIZWlnaHQ6IG51bWJlcixcbiAgICBtYXhXaWR0aDogbnVtYmVyXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBoZWlnaHQ6IE1hdGgucm91bmQoXG4gICAgICAgIE1hdGgubWF4KG1heEhlaWdodCwgKG1heFdpZHRoIC8gb3JpZ2luYWxXaWR0aCkgKiBvcmlnaW5hbEhlaWdodClcbiAgICAgICksXG4gICAgICB3aWR0aDogTWF0aC5yb3VuZChcbiAgICAgICAgTWF0aC5tYXgobWF4SGVpZ2h0LCAobWF4V2lkdGggLyBvcmlnaW5hbEhlaWdodCkgKiBvcmlnaW5hbFdpZHRoKVxuICAgICAgKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDU1NTaXplUmVzdHJpY3Rpb24oaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZXNoZWV0ID0gZ2V0Q29tcHV0ZWRTdHlsZShodG1sRWxlbWVudCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5nZXRWYWx1ZVJlcHJlc2VudGF0aW9uT2ZDU1NQcm9wZXJ0eShcbiAgICAgIGNvbXB1dGVkU3R5bGVzaGVldC5nZXRQcm9wZXJ0eVZhbHVlKCdoZWlnaHQnKVxuICAgICk7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5nZXRWYWx1ZVJlcHJlc2VudGF0aW9uT2ZDU1NQcm9wZXJ0eShcbiAgICAgIGNvbXB1dGVkU3R5bGVzaGVldC5nZXRQcm9wZXJ0eVZhbHVlKCdtYXgtaGVpZ2h0JylcbiAgICApO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5nZXRWYWx1ZVJlcHJlc2VudGF0aW9uT2ZDU1NQcm9wZXJ0eShcbiAgICAgIGNvbXB1dGVkU3R5bGVzaGVldC5nZXRQcm9wZXJ0eVZhbHVlKCdtYXgtd2lkdGgnKVxuICAgICk7XG5cbiAgICByZXR1cm4geyBoZWlnaHQsIG1heEhlaWdodCwgbWF4V2lkdGggfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsdWVSZXByZXNlbnRhdGlvbk9mQ1NTUHJvcGVydHkocHJvcGVydHk6IHN0cmluZykge1xuICAgIHJldHVybiBOdW1iZXIocHJvcGVydHkucmVwbGFjZSgncHgnLCAnJykpIHx8IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC1jb25maWd1cmF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvYXR0YWNobWVudC1jb25maWd1cmF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFTM0M7O0dBRUc7QUFJSCxNQUFNLE9BQU8sOEJBQThCO0lBSDNDO1FBaUNFOztXQUVHO1FBQ0gsaUNBQTRCLEdBQUcsSUFBSSxDQUFDO0tBZ1ByQztJQTlPQzs7Ozs7T0FLRztJQUNILCtCQUErQixDQUM3QixVQUF5QixFQUN6QixRQUEyQyxFQUMzQyxPQUFvQjtRQUVwQixJQUFJLElBQUksQ0FBQyx5Q0FBeUMsRUFBRTtZQUNsRCxPQUFPLElBQUksQ0FBQyx5Q0FBeUMsQ0FDbkQsVUFBVSxFQUNWLFFBQVEsRUFDUixPQUFPLENBQ1IsQ0FBQztTQUNIO1FBRUQsTUFBTSx3QkFBd0IsR0FBRyxPQUFPLENBQUM7UUFDekMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTztZQUNuQyxVQUFVLENBQUMsU0FBUztZQUNwQixVQUFVLENBQUMsU0FBUztZQUNwQixFQUFFLENBQVcsQ0FBQztRQUNoQixJQUFJLEdBQVEsQ0FBQztRQUNiLElBQUk7WUFDRixHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDMUI7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE9BQU87Z0JBQ0wsR0FBRyxFQUFFLFNBQVM7Z0JBQ2QsS0FBSyxFQUFFLEVBQUU7Z0JBQ1QsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsY0FBYyxFQUFFLHdCQUF3QjtnQkFDeEMsYUFBYSxFQUFFLHdCQUF3QjthQUN4QyxDQUFDO1NBQ0g7UUFDRCxNQUFNLGNBQWMsR0FDbEIsTUFBTSxDQUFDLEdB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LEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRU8sbUNBQW1DLENBQUMsUUFBZ0I7UUFDMUQsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUM7SUFDekQsQ0FBQzs7MkhBaFJVLDhCQUE4QjsrSEFBOUIsOEJBQThCLGNBRjdCLE1BQU07MkZBRVAsOEJBQThCO2tCQUgxQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEF0dGFjaG1lbnQgfSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQge1xuICBBdHRhY2htZW50Q29uZmlncmF0aW9uLFxuICBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzLFxuICBJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uLFxuICBWaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uLFxufSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBUaGUgYEF0dGFjaG1lbnRDb25maWd1cmF0aW9uU2VydmljZWAgcHJvdmlkZXMgY3VzdG9taXphdGlvbiBmb3IgY2VydGFpbiBhdHRyaWJ1dGVzIG9mIGF0dGFjaG1lbnRzIGRpc3BsYXllZCBpbnNpZGUgdGhlIG1lc3NhZ2UgY29tcG9uZW50LiBJZiB5b3UncmUgdXNpbmcgeW91ciBvd24gQ0ROLCB5b3UgY2FuIGludGVncmF0ZSByZXNpemluZyBmZWF0dXJlcyBvZiBpdCBieSBwcm92aWRpbmcgeW91ciBvd24gaGFuZGxlcnMuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBdHRhY2htZW50Q29uZmlndXJhdGlvblNlcnZpY2U8XG4gIFQgZXh0ZW5kcyBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzID0gRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljc1xuPiB7XG4gIC8qKlxuICAgKiBBIGN1c3RvbSBoYW5kbGVyIGNhbiBiZSBwcm92aWRlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBpbWFnZSBhdHRhY2htZW50IChpbWFnZXMgdXBsb2FkZWQgZnJvbSBmaWxlcykgY29uZmlndXJhdGlvbi4gQnkgZGVmYXVsdCB0aGUgU0RLIHVzZXMgZml4ZWQgaW1hZ2UgaGVpZ2h0IChhIHNpemUgdGhhdCdzIGtub3duIGJlZm9yZSBpbWFnZSBpcyBsb2FkZWQpLCBpZiB5b3Ugb3ZlcnJpZGUgdGhhdCB3aXRoIGR5bmFtaWMgaW1hZ2UgaGVpZ2h0IChmb3IgZXhhbXBsZTogaGVpZ2h0OiAxMDAlKSB0aGUgc2Nyb2xsaW5nIGxvZ2ljIGluc2lkZSB0aGUgbWVzc2FnZSBsaXN0IGNhbiBicmVhay5cbiAgICovXG4gIGN1c3RvbUltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb25IYW5kbGVyPzogKFxuICAgIGE6IEF0dGFjaG1lbnQ8VD4sXG4gICAgdHlwZTogJ2dhbGxlcnknIHwgJ3NpbmdsZScgfCAnY2Fyb3VzZWwnLFxuICAgIGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50XG4gICkgPT4gSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbjtcbiAgLyoqXG4gICAqIEEgY3VzdG9tIGhhbmRsZXIgY2FuIGJlIHByb3ZpZGVkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHZpZGVvIGF0dGFjaG1lbnQgKHZpZGVvcyB1cGxvYWRlZCBmcm9tIGZpbGVzKSBjb25maWd1cmF0aW9uLiBCeSBkZWZhdWx0IHRoZSBTREsgdXNlcyBmaXhlZCBoZWlnaHQgKGEgc2l6ZSB0aGF0J3Mga25vd24gYmVmb3JlIHZpZGVvIGlzIGxvYWRlZCksIGlmIHlvdSBvdmVycmlkZSB0aGF0IHdpdGggZHluYW1pYyBoZWlnaHQgKGZvciBleGFtcGxlOiBoZWlnaHQ6IDEwMCUpIHRoZSBzY3JvbGxpbmcgbG9naWMgaW5zaWRlIHRoZSBtZXNzYWdlIGxpc3QgY2FuIGJyZWFrLlxuICAgKi9cbiAgY3VzdG9tVmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXI/OiAoXG4gICAgYTogQXR0YWNobWVudDxUPixcbiAgICBjb250YWluZXJFbGVtZW50OiBIVE1MRWxlbWVudFxuICApID0+IFZpZGVvQXR0YWNobWVudENvbmZpZ3VyYXRpb247XG4gIC8qKlxuICAgKiBBIGN1c3RvbSBoYW5kbGVyIGNhbiBiZSBwcm92aWRlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBnaXBoeSBhdHRhY2htZW50IChHSUZzIHNlbnQgd2l0aCB0aGUgL2dpcGh5IGNvbW1hbmQpIGNvbmZpZ3VyYXRpb24uIEJ5IGRlZmF1bHQgdGhlIFNESyB1c2VzIGZpeGVkIGhlaWdodCAoYSBzaXplIHRoYXQncyBrbm93biBiZWZvcmUgdGhlIEdJRiBpcyBsb2FkZWQpLCBpZiB5b3Ugb3ZlcnJpZGUgdGhhdCB3aXRoIGR5bmFtaWMgaGVpZ2h0IChmb3IgZXhhbXBsZTogaGVpZ2h0OiAxMDAlKSB0aGUgc2Nyb2xsaW5nIGxvZ2ljIGluc2lkZSB0aGUgbWVzc2FnZSBsaXN0IGNhbiBicmVhay5cbiAgICovXG4gIGN1c3RvbUdpcGh5QXR0YWNobWVudENvbmZpZ3VyYXRpb25IYW5kbGVyPzogKFxuICAgIGE6IEF0dGFjaG1lbnQ8VD5cbiAgKSA9PiBBdHRhY2htZW50Q29uZmlncmF0aW9uO1xuICAvKipcbiAgICogQSBjdXN0b20gaGFuZGxlciBjYW4gYmUgcHJvdmlkZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgc2NyYXBlZCBpbWFnZSBhdHRhY2htZW50IChpbWFnZXMgZm91bmQgaW4gbGlua3MgaW5zaWRlIG1lc3NhZ2VzKSBjb25maWd1cmF0aW9uLiBCeSBkZWZhdWx0IHRoZSBTREsgdXNlcyBmaXhlZCBoZWlnaHQgKGEgc2l6ZSB0aGF0J3Mga25vd24gYmVmb3JlIGltYWdlIGlzIGxvYWRlZCksIGlmIHlvdSBvdmVycmlkZSB0aGF0IHdpdGggZHluYW1pYyBoZWlnaHQgKGZvciBleGFtcGxlOiBoZWlnaHQ6IDEwMCUpIHRoZSBzY3JvbGxpbmcgbG9naWMgaW5zaWRlIHRoZSBtZXNzYWdlIGxpc3QgY2FuIGJyZWFrLlxuICAgKi9cbiAgY3VzdG9tU2NyYXBlZEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb25IYW5kbGVyPzogKFxuICAgIGE6IEF0dGFjaG1lbnQ8VD5cbiAgKSA9PiBBdHRhY2htZW50Q29uZmlncmF0aW9uO1xuICAvKipcbiAgICogWW91IGNhbiB0dXJuIG9uL29mZiB0aHVtYm5haWwgZ2VuZXJhdGlvbiBmb3IgdmlkZW8gYXR0YWNobWVudHNcbiAgICovXG4gIHNob3VsZEdlbmVyYXRlVmlkZW9UaHVtYm5haWwgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBjb25maWd1cmF0aW9uIGZvciBpbWFnZSBhdHRhY2htZW50cywgaXQncyBwb3NzaWJsZSB0byBwcm92aWRlIHlvdXIgb3duIGZ1bmN0aW9uIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGxvZ2ljXG4gICAqIEBwYXJhbSBhdHRhY2htZW50IFRoZSBhdHRhY2htZW50IHRvIGNvbmZpZ3VyZVxuICAgKiBAcGFyYW0gbG9jYXRpb24gU3BlY2lmaWVzIHdoZXJlIHRoZSBpbWFnZSBpcyBiZWluZyBkaXNwbGF5ZWRcbiAgICogQHBhcmFtIGVsZW1lbnQgVGhlIGRlZmF1bHQgcmVzaXppbmcgbG9naWNzIHJlYWRzIHRoZSBoZWlnaHQvbWF4LWhlaWdodCBhbmQgbWF4LXdpZHRoIHByb3BwZXJ0aWVzIG9mIHRoaXMgZWxlbWVudCBhbmQgcmVkdWNlcyBmaWxlIHNpemUgYmFzZWQgb24gdGhlIGdpdmVuIHZhbHVlcy4gRmlsZSBzaXplIHJlZHVjdGlvbiBpcyBkb25lIGJ5IFN0cmVhbSdzIENETi5cbiAgICovXG4gIGdldEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgYXR0YWNobWVudDogQXR0YWNobWVudDxUPixcbiAgICBsb2NhdGlvbjogJ2dhbGxlcnknIHwgJ3NpbmdsZScgfCAnY2Fyb3VzZWwnLFxuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50XG4gICk6IEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24ge1xuICAgIGlmICh0aGlzLmN1c3RvbUltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb25IYW5kbGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXN0b21JbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uSGFuZGxlcihcbiAgICAgICAgYXR0YWNobWVudCxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIGVsZW1lbnRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVmYXVsdE9yaWdpbmFsRGltZW5zaW9uID0gMTAwMDAwMDtcbiAgICBjb25zdCB1cmxTdHJpbmcgPSAoYXR0YWNobWVudC5pbWdfdXJsIHx8XG4gICAgICBhdHRhY2htZW50LnRodW1iX3VybCB8fFxuICAgICAgYXR0YWNobWVudC5pbWFnZV91cmwgfHxcbiAgICAgICcnKSBhcyBzdHJpbmc7XG4gICAgbGV0IHVybDogVVJMO1xuICAgIHRyeSB7XG4gICAgICB1cmwgPSBuZXcgVVJMKHVybFN0cmluZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVybDogdXJsU3RyaW5nLFxuICAgICAgICB3aWR0aDogJycsIC8vIE5vdCBzZXQgdG8gcmVzcGVjdCByZXNwb25zaXZlIHdpZHRoXG4gICAgICAgIGhlaWdodDogJycsIC8vIFNldCBmcm9tIENTU1xuICAgICAgICBvcmlnaW5hbEhlaWdodDogZGVmYXVsdE9yaWdpbmFsRGltZW5zaW9uLFxuICAgICAgICBvcmlnaW5hbFdpZHRoOiBkZWZhdWx0T3JpZ2luYWxEaW1lbnNpb24sXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBvcmlnaW5hbEhlaWdodCA9XG4gICAgICBOdW1iZXIodXJsLnNlYXJjaFBhcmFtcy5nZXQoJ29oJykpID4gMVxuICAgICAgICA/IE51bWJlcih1cmwuc2VhcmNoUGFyYW1zLmdldCgnb2gnKSlcbiAgICAgICAgOiBkZWZhdWx0T3JpZ2luYWxEaW1lbnNpb247XG4gICAgY29uc3Qgb3JpZ2luYWxXaWR0aCA9XG4gICAgICBOdW1iZXIodXJsLnNlYXJjaFBhcmFtcy5nZXQoJ293JykpID4gMVxuICAgICAgICA/IE51bWJlcih1cmwuc2VhcmNoUGFyYW1zLmdldCgnb3cnKSlcbiAgICAgICAgOiBkZWZhdWx0T3JpZ2luYWxEaW1lbnNpb247XG4gICAgY29uc3QgZGlzcGxheVdhcm5pbmcgPSBsb2NhdGlvbiA9PT0gJ2dhbGxlcnknIHx8IGxvY2F0aW9uID09PSAnc2luZ2xlJztcbiAgICBjb25zdCBzaXplUmVzdHJpY3Rpb24gPSB0aGlzLmdldFNpemluZ1Jlc3RyaWN0aW9ucyhcbiAgICAgIHVybCxcbiAgICAgIGVsZW1lbnQsXG4gICAgICBkaXNwbGF5V2FybmluZ1xuICAgICk7XG5cbiAgICBpZiAoc2l6ZVJlc3RyaWN0aW9uKSB7XG4gICAgICAvLyBBcHBseSAyeCBmb3IgcmV0aW5hIGRpc3BsYXlzXG4gICAgICBzaXplUmVzdHJpY3Rpb24uaGVpZ2h0ICo9IDI7XG4gICAgICBzaXplUmVzdHJpY3Rpb24ud2lkdGggKj0gMjtcbiAgICAgIHRoaXMuYWRkUmVzaXppbmdQYXJhbXNUb1VybChzaXplUmVzdHJpY3Rpb24sIHVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHVybDogdXJsLmhyZWYsXG4gICAgICB3aWR0aDogJycsIC8vIE5vdCBzZXQgdG8gcmVzcGVjdCByZXNwb25zaXZlIHdpZHRoXG4gICAgICBoZWlnaHQ6ICcnLCAvLyBTZXQgZnJvbSBDU1NcbiAgICAgIG9yaWdpbmFsSGVpZ2h0LFxuICAgICAgb3JpZ2luYWxXaWR0aCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHZpZGVvIGF0dGFjaG1lbnRzLCBpdCdzIHBvc3NpYmxlIHRvIHByb3ZpZGUgeW91ciBvd24gZnVuY3Rpb24gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbG9naWNcbiAgICogQHBhcmFtIGF0dGFjaG1lbnQgVGhlIGF0dGFjaG1lbnQgdG8gY29uZmlndXJlXG4gICAqIEBwYXJhbSBlbGVtZW50IFRoZSBkZWZhdWx0IHJlc2l6aW5nIGxvZ2ljcyByZWFkcyB0aGUgaGVpZ2h0L21heC1oZWlnaHQgYW5kIG1heC13aWR0aCBwcm9wcGVydGllcyBvZiB0aGlzIGVsZW1lbnQgYW5kIHJlZHVjZXMgZmlsZSBzaXplIGJhc2VkIG9uIHRoZSBnaXZlbiB2YWx1ZXMuIEZpbGUgc2l6ZSByZWR1Y3Rpb24gaXMgZG9uZSBieSBTdHJlYW0ncyBDRE4uXG4gICAqL1xuICBnZXRWaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgIGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQ8VD4sXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnRcbiAgKTogVmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbiB7XG4gICAgaWYgKHRoaXMuY3VzdG9tVmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmN1c3RvbVZpZGVvQXR0YWNobWVudENvbmZpZ3VyYXRpb25IYW5kbGVyKFxuICAgICAgICBhdHRhY2htZW50LFxuICAgICAgICBlbGVtZW50XG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCB0aHVtYlVybDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGxldCBvcmlnaW5hbEhlaWdodCA9IDEwMDAwMDA7XG4gICAgbGV0IG9yaWdpbmFsV2lkdGggPSAxMDAwMDAwO1xuICAgIGlmIChhdHRhY2htZW50LnRodW1iX3VybCAmJiB0aGlzLnNob3VsZEdlbmVyYXRlVmlkZW9UaHVtYm5haWwpIHtcbiAgICAgIGxldCB1cmw6IFVSTDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHVybCA9IG5ldyBVUkwoYXR0YWNobWVudC50aHVtYl91cmwpO1xuXG4gICAgICAgIG9yaWdpbmFsSGVpZ2h0ID1cbiAgICAgICAgICBOdW1iZXIodXJsLnNlYXJjaFBhcmFtcy5nZXQoJ29oJykpID4gMVxuICAgICAgICAgICAgPyBOdW1iZXIodXJsLnNlYXJjaFBhcmFtcy5nZXQoJ29oJykpXG4gICAgICAgICAgICA6IG9yaWdpbmFsSGVpZ2h0O1xuICAgICAgICBvcmlnaW5hbFdpZHRoID1cbiAgICAgICAgICBOdW1iZXIodXJsLnNlYXJjaFBhcmFtcy5nZXQoJ293JykpID4gMVxuICAgICAgICAgICAgPyBOdW1iZXIodXJsLnNlYXJjaFBhcmFtcy5nZXQoJ293JykpXG4gICAgICAgICAgICA6IG9yaWdpbmFsV2lkdGg7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlXYXJuaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgc2l6ZVJlc3RyaWN0aW9uID0gdGhpcy5nZXRTaXppbmdSZXN0cmljdGlvbnMoXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgZGlzcGxheVdhcm5pbmdcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHNpemVSZXN0cmljdGlvbikge1xuICAgICAgICAgIHNpemVSZXN0cmljdGlvbi5oZWlnaHQgKj0gMjtcbiAgICAgICAgICBzaXplUmVzdHJpY3Rpb24ud2lkdGggKj0gMjtcbiAgICAgICAgICB0aGlzLmFkZFJlc2l6aW5nUGFyYW1zVG9Vcmwoc2l6ZVJlc3RyaWN0aW9uLCB1cmwpO1xuICAgICAgICB9XG4gICAgICAgIHRodW1iVXJsID0gdXJsLmhyZWY7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGh1bWJVcmwgPSBhdHRhY2htZW50LnRodW1iX3VybDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHVybDogYXR0YWNobWVudC5hc3NldF91cmwgfHwgJycsXG4gICAgICB3aWR0aDogJycsIC8vIE5vdCBzZXQgdG8gcmVzcGVjdCByZXNwb25zaXZlIHdpZHRoXG4gICAgICBoZWlnaHQ6ICcnLCAvLyBTZXQgZnJvbSBDU1NcbiAgICAgIHRodW1iVXJsOiB0aHVtYlVybCxcbiAgICAgIG9yaWdpbmFsSGVpZ2h0LFxuICAgICAgb3JpZ2luYWxXaWR0aCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGdpcGh5IGF0dGFjaG1lbnRzLCBpdCdzIHBvc3NpYmxlIHRvIHByb3ZpZGUgeW91ciBvd24gZnVuY3Rpb24gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbG9naWNcbiAgICogQHBhcmFtIGF0dGFjaG1lbnQgVGhlIGF0dGFjaG1lbnQgdG8gY29uZmlndXJlXG4gICAqL1xuICBnZXRHaXBoeUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgIGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQ8VD5cbiAgKTogQXR0YWNobWVudENvbmZpZ3JhdGlvbiB7XG4gICAgaWYgKHRoaXMuY3VzdG9tR2lwaHlBdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmN1c3RvbUdpcGh5QXR0YWNobWVudENvbmZpZ3VyYXRpb25IYW5kbGVyKGF0dGFjaG1lbnQpO1xuICAgIH1cblxuICAgIGNvbnN0IGdpcGh5ID0gYXR0YWNobWVudC5naXBoeT8uZml4ZWRfaGVpZ2h0X2Rvd25zYW1wbGVkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHVybDogZ2lwaHk/LnVybCB8fCBhdHRhY2htZW50LmltYWdlX3VybCB8fCBhdHRhY2htZW50LnRodW1iX3VybCB8fCAnJyxcbiAgICAgIGhlaWdodDogZ2lwaHk/LmhlaWdodCA/IGAke2dpcGh5Py5oZWlnaHR9cHhgIDogJzMwMHB4JyxcbiAgICAgIHdpZHRoOiBnaXBoeT8ud2lkdGggPyBgJHtnaXBoeT8ud2lkdGh9cHhgIDogJycsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBjb25maWd1cmF0aW9uIGZvciBzY3JhcGVkIGltYWdlIGF0dGFjaG1lbnRzLCBpdCdzIHBvc3NpYmxlIHRvIHByb3ZpZGUgeW91ciBvd24gZnVuY3Rpb24gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbG9naWNcbiAgICogQHBhcmFtIGF0dGFjaG1lbnQgVGhlIGF0dGFjaG1lbnQgdG8gY29uZmlndXJlXG4gICAqL1xuICBnZXRTY3JhcGVkSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICBhdHRhY2htZW50OiBBdHRhY2htZW50PFQ+XG4gICk6IEF0dGFjaG1lbnRDb25maWdyYXRpb24ge1xuICAgIGlmICh0aGlzLmN1c3RvbVNjcmFwZWRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uSGFuZGxlcikge1xuICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tU2NyYXBlZEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb25IYW5kbGVyKGF0dGFjaG1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB1cmw6IGF0dGFjaG1lbnQuaW1hZ2VfdXJsIHx8IGF0dGFjaG1lbnQudGh1bWJfdXJsIHx8ICcnLFxuICAgICAgd2lkdGg6ICcnLFxuICAgICAgaGVpZ2h0OiAnJywgLy8gU2V0IGZyb20gQ1NTXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUmVzaXppbmdQYXJhbXNUb1VybChcbiAgICBzaXplUmVzdHJpY3Rpb246IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSxcbiAgICB1cmw6IFVSTFxuICApIHtcbiAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgnaCcsIHNpemVSZXN0cmljdGlvbi5oZWlnaHQudG9TdHJpbmcoKSk7XG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ3cnLCBzaXplUmVzdHJpY3Rpb24ud2lkdGgudG9TdHJpbmcoKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNpemluZ1Jlc3RyaWN0aW9ucyhcbiAgICB1cmw6IFVSTCxcbiAgICBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgZGlzcGxheVdhcm5pbmcgPSBmYWxzZVxuICApIHtcbiAgICBjb25zdCB1cmxQYXJhbXMgPSB1cmwuc2VhcmNoUGFyYW1zO1xuICAgIGNvbnN0IG9yaWdpbmFsSGVpZ2h0ID0gTnVtYmVyKHVybFBhcmFtcy5nZXQoJ29oJykpIHx8IDE7XG4gICAgY29uc3Qgb3JpZ2luYWxXaWR0aCA9IE51bWJlcih1cmxQYXJhbXMuZ2V0KCdvdycpKSB8fCAxO1xuICAgIGNvbnN0IGNzc1NpemVSZXN0cmljdGlvbiA9IHRoaXMuZ2V0Q1NTU2l6ZVJlc3RyaWN0aW9uKGh0bWxFbGVtZW50KTtcbiAgICBsZXQgc2l6ZVJlc3RyaWN0aW9uOiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAoXG4gICAgICAoY3NzU2l6ZVJlc3RyaWN0aW9uLm1heEhlaWdodCB8fCBjc3NTaXplUmVzdHJpY3Rpb24uaGVpZ2h0KSAmJlxuICAgICAgY3NzU2l6ZVJlc3RyaWN0aW9uLm1heFdpZHRoXG4gICAgKSB7XG4gICAgICBzaXplUmVzdHJpY3Rpb24gPSB0aGlzLmdldFNpemVSZXN0cmljdGlvbnMoXG4gICAgICAgIG9yaWdpbmFsSGVpZ2h0LFxuICAgICAgICBvcmlnaW5hbFdpZHRoLFxuICAgICAgICAoY3NzU2l6ZVJlc3RyaWN0aW9uLm1heEhlaWdodCB8fCBjc3NTaXplUmVzdHJpY3Rpb24uaGVpZ2h0KSEsXG4gICAgICAgIGNzc1NpemVSZXN0cmljdGlvbi5tYXhXaWR0aFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2l6ZVJlc3RyaWN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKGRpc3BsYXlXYXJuaW5nKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgSW52YWxpZCB2YWx1ZSBzZXQgZm9yIGhlaWdodC9tYXgtaGVpZ2h0IGFuZC9vciBtYXgtd2lkdGggZm9yIEhUTUwgZWxlbWVudCwgdGhpcyBjYW4gY2F1c2Ugc2Nyb2xsaW5nIGlzc3VlcyBpbnNpZGUgdGhlIG1lc3NhZ2UgbGlzdCwgbW9yZSBpbmZvIGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9zZGsvYW5ndWxhci9jb21wb25lbnRzL0F0dGFjaG1lbnRMaXN0Q29tcG9uZW50LyNpbWFnZS1hbmQtdmlkZW8tc2l6aW5nLCBhdHRhY2htZW50IFVSTDogJHt1cmwudG9TdHJpbmcoKX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpemVSZXN0cmljdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2l6ZVJlc3RyaWN0aW9ucyhcbiAgICBvcmlnaW5hbEhlaWdodDogbnVtYmVyLFxuICAgIG9yaWdpbmFsV2lkdGg6IG51bWJlcixcbiAgICBtYXhIZWlnaHQ6IG51bWJlcixcbiAgICBtYXhXaWR0aDogbnVtYmVyXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBoZWlnaHQ6IE1hdGgucm91bmQoXG4gICAgICAgIE1hdGgubWF4KG1heEhlaWdodCwgKG1heFdpZHRoIC8gb3JpZ2luYWxXaWR0aCkgKiBvcmlnaW5hbEhlaWdodClcbiAgICAgICksXG4gICAgICB3aWR0aDogTWF0aC5yb3VuZChcbiAgICAgICAgTWF0aC5tYXgobWF4SGVpZ2h0LCAobWF4V2lkdGggLyBvcmlnaW5hbEhlaWdodCkgKiBvcmlnaW5hbFdpZHRoKVxuICAgICAgKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDU1NTaXplUmVzdHJpY3Rpb24oaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZXNoZWV0ID0gZ2V0Q29tcHV0ZWRTdHlsZShodG1sRWxlbWVudCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5nZXRWYWx1ZVJlcHJlc2VudGF0aW9uT2ZDU1NQcm9wZXJ0eShcbiAgICAgIGNvbXB1dGVkU3R5bGVzaGVldC5nZXRQcm9wZXJ0eVZhbHVlKCdoZWlnaHQnKVxuICAgICk7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5nZXRWYWx1ZVJlcHJlc2VudGF0aW9uT2ZDU1NQcm9wZXJ0eShcbiAgICAgIGNvbXB1dGVkU3R5bGVzaGVldC5nZXRQcm9wZXJ0eVZhbHVlKCdtYXgtaGVpZ2h0JylcbiAgICApO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5nZXRWYWx1ZVJlcHJlc2VudGF0aW9uT2ZDU1NQcm9wZXJ0eShcbiAgICAgIGNvbXB1dGVkU3R5bGVzaGVldC5nZXRQcm9wZXJ0eVZhbHVlKCdtYXgtd2lkdGgnKVxuICAgICk7XG5cbiAgICByZXR1cm4geyBoZWlnaHQsIG1heEhlaWdodCwgbWF4V2lkdGggfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsdWVSZXByZXNlbnRhdGlvbk9mQ1NTUHJvcGVydHkocHJvcGVydHk6IHN0cmluZykge1xuICAgIHJldHVybiBOdW1iZXIocHJvcGVydHkucmVwbGFjZSgncHgnLCAnJykpIHx8IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
@@ -20,7 +20,7 @@ import transliterate from '@stream-io/transliterate';
20
20
  import * as i8$1 from 'angular-mentions';
21
21
  import { MentionModule } from 'angular-mentions';
22
22
 
23
- const version = '4.66.0';
23
+ const version = '4.66.2';
24
24
 
25
25
  /**
26
26
  * The `NotificationService` can be used to add or remove notifications. By default the [`NotificationList`](../components/NotificationListComponent.mdx) component displays the currently active notifications.
@@ -2228,16 +2228,30 @@ class AttachmentConfigurationService {
2228
2228
  if (this.customImageAttachmentConfigurationHandler) {
2229
2229
  return this.customImageAttachmentConfigurationHandler(attachment, location, element);
2230
2230
  }
2231
- const url = new URL((attachment.img_url ||
2231
+ const defaultOriginalDimension = 1000000;
2232
+ const urlString = (attachment.img_url ||
2232
2233
  attachment.thumb_url ||
2233
2234
  attachment.image_url ||
2234
- ''));
2235
+ '');
2236
+ let url;
2237
+ try {
2238
+ url = new URL(urlString);
2239
+ }
2240
+ catch (error) {
2241
+ return {
2242
+ url: urlString,
2243
+ width: '',
2244
+ height: '',
2245
+ originalHeight: defaultOriginalDimension,
2246
+ originalWidth: defaultOriginalDimension,
2247
+ };
2248
+ }
2235
2249
  const originalHeight = Number(url.searchParams.get('oh')) > 1
2236
2250
  ? Number(url.searchParams.get('oh'))
2237
- : 1000000;
2251
+ : defaultOriginalDimension;
2238
2252
  const originalWidth = Number(url.searchParams.get('ow')) > 1
2239
2253
  ? Number(url.searchParams.get('ow'))
2240
- : 1000000;
2254
+ : defaultOriginalDimension;
2241
2255
  const displayWarning = location === 'gallery' || location === 'single';
2242
2256
  const sizeRestriction = this.getSizingRestrictions(url, element, displayWarning);
2243
2257
  if (sizeRestriction) {
@@ -2267,23 +2281,29 @@ class AttachmentConfigurationService {
2267
2281
  let originalHeight = 1000000;
2268
2282
  let originalWidth = 1000000;
2269
2283
  if (attachment.thumb_url && this.shouldGenerateVideoThumbnail) {
2270
- const url = new URL(attachment.thumb_url);
2271
- originalHeight =
2272
- Number(url.searchParams.get('oh')) > 1
2273
- ? Number(url.searchParams.get('oh'))
2274
- : originalHeight;
2275
- originalWidth =
2276
- Number(url.searchParams.get('ow')) > 1
2277
- ? Number(url.searchParams.get('ow'))
2278
- : originalWidth;
2279
- const displayWarning = true;
2280
- const sizeRestriction = this.getSizingRestrictions(url, element, displayWarning);
2281
- if (sizeRestriction) {
2282
- sizeRestriction.height *= 2;
2283
- sizeRestriction.width *= 2;
2284
- this.addResizingParamsToUrl(sizeRestriction, url);
2285
- }
2286
- thumbUrl = url.href;
2284
+ let url;
2285
+ try {
2286
+ url = new URL(attachment.thumb_url);
2287
+ originalHeight =
2288
+ Number(url.searchParams.get('oh')) > 1
2289
+ ? Number(url.searchParams.get('oh'))
2290
+ : originalHeight;
2291
+ originalWidth =
2292
+ Number(url.searchParams.get('ow')) > 1
2293
+ ? Number(url.searchParams.get('ow'))
2294
+ : originalWidth;
2295
+ const displayWarning = true;
2296
+ const sizeRestriction = this.getSizingRestrictions(url, element, displayWarning);
2297
+ if (sizeRestriction) {
2298
+ sizeRestriction.height *= 2;
2299
+ sizeRestriction.width *= 2;
2300
+ this.addResizingParamsToUrl(sizeRestriction, url);
2301
+ }
2302
+ thumbUrl = url.href;
2303
+ }
2304
+ catch (_a) {
2305
+ thumbUrl = attachment.thumb_url;
2306
+ }
2287
2307
  }
2288
2308
  return {
2289
2309
  url: attachment.asset_url || '',