@discordeno/utils 22.0.1-next.8b9930f → 22.0.1-next.8d90f28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/images.d.ts CHANGED
@@ -1,4 +1,8 @@
1
1
  import { type BigString, type GetGuildWidgetImageQuery, type ImageFormat, type ImageSize, StickerFormatTypes } from '@discordeno/types';
2
+ export interface ImageOptions {
3
+ size?: ImageSize;
4
+ format?: ImageFormat;
5
+ }
2
6
  /** Help format an image url. */
3
7
  export declare function formatImageUrl(url: string, size?: ImageSize, format?: ImageFormat): string;
4
8
  /**
@@ -17,15 +21,29 @@ export declare function emojiUrl(emojiId: BigString, animated?: boolean, format?
17
21
  * Builds a URL to a user's avatar stored in the Discord CDN.
18
22
  *
19
23
  * @param userId - The ID of the user to get the avatar of.
24
+ * @param avatar - The user's avatar hash.
25
+ * @param options - The parameters for the building of the URL.
26
+ * @returns The user avatar as a URL.
27
+ */
28
+ export declare function avatarUrl(userId: BigString, avatar: BigString, options?: ImageOptions): string;
29
+ /**
30
+ * Builds a URL to a user's default avatar stored in the Discord CDN.
31
+ *
32
+ * @param userId - The ID of the user to get the avatar of.
20
33
  * @param discriminator - The user's discriminator. (4-digit tag after the hashtag.)
34
+ * @returns The user default avatar as an URL.
35
+ */
36
+ export declare function defaultAvatarUrl(userId: BigString, discriminator: string): string;
37
+ /**
38
+ * Builds a URL to a user's display avatar stored in the Discord CDN.
39
+ *
40
+ * @param userId - The ID of the user to get the avatar of.
41
+ * @param discriminator - The user's discriminator. (4-digit tag after the hashtag.)
42
+ * @param avatar - The user's avatar hash.
21
43
  * @param options - The parameters for the building of the URL.
22
- * @returns The link to the resource.
44
+ * @returns The user display avatar as an URL.
23
45
  */
24
- export declare function avatarUrl(userId: BigString, discriminator: string, options?: {
25
- avatar: BigString | undefined;
26
- size?: ImageSize;
27
- format?: ImageFormat;
28
- }): string;
46
+ export declare function displayAvatarUrl(userId: BigString, discriminator: string, avatar: BigString | undefined, options?: ImageOptions): string;
29
47
  export declare function avatarDecorationUrl(avatarDecoration: BigString): string;
30
48
  /**
31
49
  * Builds a URL to a user's banner stored in the Discord CDN.
@@ -34,10 +52,8 @@ export declare function avatarDecorationUrl(avatarDecoration: BigString): string
34
52
  * @param options - The parameters for the building of the URL.
35
53
  * @returns The link to the resource or `undefined` if no banner has not been set.
36
54
  */
37
- export declare function bannerUrl(userId: BigString, options?: {
55
+ export declare function bannerUrl(userId: BigString, options?: ImageOptions & {
38
56
  banner?: BigString;
39
- size?: ImageSize;
40
- format?: ImageFormat;
41
57
  }): string | undefined;
42
58
  /**
43
59
  * Builds a URL to the guild banner stored in the Discord CDN.
@@ -46,10 +62,8 @@ export declare function bannerUrl(userId: BigString, options?: {
46
62
  * @param options - The parameters for the building of the URL.
47
63
  * @returns The link to the resource or `undefined` if no banner has been set.
48
64
  */
49
- export declare function guildBannerUrl(guildId: BigString, options: {
65
+ export declare function guildBannerUrl(guildId: BigString, options: ImageOptions & {
50
66
  banner?: BigString;
51
- size?: ImageSize;
52
- format?: ImageFormat;
53
67
  }): string | undefined;
54
68
  /**
55
69
  * Builds a URL to the guild icon stored in the Discord CDN.
@@ -59,10 +73,7 @@ export declare function guildBannerUrl(guildId: BigString, options: {
59
73
  * @param options - The parameters for the building of the URL.
60
74
  * @returns The link to the resource or `undefined` if no banner has been set.
61
75
  */
62
- export declare function guildIconUrl(guildId: BigString, imageHash: BigString | undefined, options?: {
63
- size?: ImageSize;
64
- format?: ImageFormat;
65
- }): string | undefined;
76
+ export declare function guildIconUrl(guildId: BigString, imageHash: BigString | undefined, options?: ImageOptions): string | undefined;
66
77
  /**
67
78
  * Builds the URL to a guild splash stored in the Discord CDN.
68
79
  *
@@ -71,10 +82,7 @@ export declare function guildIconUrl(guildId: BigString, imageHash: BigString |
71
82
  * @param options - The parameters for the building of the URL.
72
83
  * @returns The link to the resource or `undefined` if the guild does not have a splash image set.
73
84
  */
74
- export declare function guildSplashUrl(guildId: BigString, imageHash: BigString | undefined, options?: {
75
- size?: ImageSize;
76
- format?: ImageFormat;
77
- }): string | undefined;
85
+ export declare function guildSplashUrl(guildId: BigString, imageHash: BigString | undefined, options?: ImageOptions): string | undefined;
78
86
  /**
79
87
  * Builds the URL to a guild discovery splash stored in the Discord CDN.
80
88
  *
@@ -83,10 +91,7 @@ export declare function guildSplashUrl(guildId: BigString, imageHash: BigString
83
91
  * @param options - The parameters for the building of the URL.
84
92
  * @returns The link to the resource or `undefined` if the guild does not have a splash image set.
85
93
  */
86
- export declare function guildDiscoverySplashUrl(guildId: BigString, imageHash: BigString | undefined, options?: {
87
- size?: ImageSize;
88
- format?: ImageFormat;
89
- }): string | undefined;
94
+ export declare function guildDiscoverySplashUrl(guildId: BigString, imageHash: BigString | undefined, options?: ImageOptions): string | undefined;
90
95
  /**
91
96
  * Builds the URL to a guild scheduled event cover stored in the Discord CDN.
92
97
  *
@@ -94,10 +99,8 @@ export declare function guildDiscoverySplashUrl(guildId: BigString, imageHash: B
94
99
  * @param options - The parameters for the building of the URL.
95
100
  * @returns The link to the resource or `undefined`.
96
101
  */
97
- export declare function guildScheduledEventCoverUrl(eventId: BigString, options: {
102
+ export declare function guildScheduledEventCoverUrl(eventId: BigString, options: ImageOptions & {
98
103
  cover?: BigString;
99
- size?: ImageSize;
100
- format?: ImageFormat;
101
104
  }): string | undefined;
102
105
  /**
103
106
  * Builds a URL to the guild widget image stored in the Discord CDN.
@@ -115,10 +118,8 @@ export declare function getWidgetImageUrl(guildId: BigString, options?: GetGuild
115
118
  * @param options - The parameters for the building of the URL.
116
119
  * @returns The link to the resource or `undefined` if no banner has been set.
117
120
  */
118
- export declare function memberAvatarUrl(guildId: BigString, userId: BigString, options?: {
121
+ export declare function memberAvatarUrl(guildId: BigString, userId: BigString, options?: ImageOptions & {
119
122
  avatar?: BigString;
120
- size?: ImageSize;
121
- format?: ImageFormat;
122
123
  }): string | undefined;
123
124
  /**
124
125
  * Builds a URL to a member's banner stored in the Discord CDN.
@@ -128,10 +129,8 @@ export declare function memberAvatarUrl(guildId: BigString, userId: BigString, o
128
129
  * @param options - The parameters for the building of the URL.
129
130
  * @returns The link to the resource or `undefined` if no banner has been set.
130
131
  */
131
- export declare function memberBannerUrl(guildId: BigString, userId: BigString, options?: {
132
+ export declare function memberBannerUrl(guildId: BigString, userId: BigString, options?: ImageOptions & {
132
133
  banner?: BigString;
133
- size?: ImageSize;
134
- format?: ImageFormat;
135
134
  }): string | undefined;
136
135
  /**
137
136
  * Builds the URL to an application icon stored in the Discord CDN.
@@ -141,10 +140,7 @@ export declare function memberBannerUrl(guildId: BigString, userId: BigString, o
141
140
  * @param options - The parameters for the building of the URL.
142
141
  * @returns The link to the resource or `undefined`
143
142
  */
144
- export declare function applicationIconUrl(applicationId: BigString, iconHash: BigString | undefined, options?: {
145
- size?: ImageSize;
146
- format?: ImageFormat;
147
- }): string | undefined;
143
+ export declare function applicationIconUrl(applicationId: BigString, iconHash: BigString | undefined, options?: ImageOptions): string | undefined;
148
144
  /**
149
145
  * Builds the URL to an application cover stored in the Discord CDN.
150
146
  *
@@ -153,10 +149,7 @@ export declare function applicationIconUrl(applicationId: BigString, iconHash: B
153
149
  * @param options - The parameters for the building of the URL.
154
150
  * @returns The link to the resource or `undefined`.
155
151
  */
156
- export declare function applicationCoverUrl(applicationId: BigString, coverHash: BigString | undefined, options?: {
157
- size?: ImageSize;
158
- format?: ImageFormat;
159
- }): string | undefined;
152
+ export declare function applicationCoverUrl(applicationId: BigString, coverHash: BigString | undefined, options?: ImageOptions): string | undefined;
160
153
  /**
161
154
  * Builds the URL to an application asset stored in the Discord CDN.
162
155
  *
@@ -165,10 +158,7 @@ export declare function applicationCoverUrl(applicationId: BigString, coverHash:
165
158
  * @param options - The parameters for the building of the URL.
166
159
  * @returns The link to the resource or `undefined`.
167
160
  */
168
- export declare function applicationAssetUrl(applicationId: BigString, assetId: BigString | undefined, options?: {
169
- size?: ImageSize;
170
- format?: ImageFormat;
171
- }): string | undefined;
161
+ export declare function applicationAssetUrl(applicationId: BigString, assetId: BigString | undefined, options?: ImageOptions): string | undefined;
172
162
  /**
173
163
  * Builds the URL to a sticker pack banner stored in the Discord CDN.
174
164
  *
@@ -176,10 +166,7 @@ export declare function applicationAssetUrl(applicationId: BigString, assetId: B
176
166
  * @param options - The parameters for the building of the URL.
177
167
  * @returns The link to the resource or `undefined`.
178
168
  */
179
- export declare function stickerPackBannerUrl(bannerAssetId: BigString | undefined, options?: {
180
- size?: ImageSize;
181
- format?: ImageFormat;
182
- }): string | undefined;
169
+ export declare function stickerPackBannerUrl(bannerAssetId: BigString | undefined, options?: ImageOptions): string | undefined;
183
170
  /**
184
171
  * Builds the URL to a sticker stored in the Discord CDN.
185
172
  *
@@ -187,9 +174,7 @@ export declare function stickerPackBannerUrl(bannerAssetId: BigString | undefine
187
174
  * @param options - The parameters for the building of the URL.
188
175
  * @returns The link to the resource or `undefined`.
189
176
  */
190
- export declare function stickerUrl(stickerId: BigString | number, options?: {
191
- size?: ImageSize;
192
- format?: ImageFormat;
177
+ export declare function stickerUrl(stickerId: BigString | number, options?: ImageOptions & {
193
178
  type?: StickerFormatTypes;
194
179
  }): string | undefined;
195
180
  /**
@@ -200,10 +185,7 @@ export declare function stickerUrl(stickerId: BigString | number, options?: {
200
185
  * @param options - The parameters for the building of the URL.
201
186
  * @returns The link to the resource or `undefined`.
202
187
  */
203
- export declare function teamIconUrl(teamId: BigString, iconHash: BigString | undefined, options?: {
204
- size?: ImageSize;
205
- format?: ImageFormat;
206
- }): string | undefined;
188
+ export declare function teamIconUrl(teamId: BigString, iconHash: BigString | undefined, options?: ImageOptions): string | undefined;
207
189
  /**
208
190
  * Builds the URL to a role icon stored in the Discord CDN.
209
191
  *
@@ -212,10 +194,7 @@ export declare function teamIconUrl(teamId: BigString, iconHash: BigString | und
212
194
  * @param options - The parameters for the building of the URL.
213
195
  * @returns The link to the resource or `undefined`.
214
196
  */
215
- export declare function roleIconUrl(roleId: BigString, iconHash: BigString | undefined, options?: {
216
- size?: ImageSize;
217
- format?: ImageFormat;
218
- }): string | undefined;
197
+ export declare function roleIconUrl(roleId: BigString, iconHash: BigString | undefined, options?: ImageOptions): string | undefined;
219
198
  /**
220
199
  * Builds the URL to a guild tag badge stored in the Discord CDN.
221
200
  *
@@ -224,8 +203,5 @@ export declare function roleIconUrl(roleId: BigString, iconHash: BigString | und
224
203
  * @param options - The parameters for the building of the URL.
225
204
  * @returns The link to the resource or `undefined` if no badge has been set.
226
205
  */
227
- export declare function guildTagBadgeUrl(guildId: BigString, badgeHash: BigString | undefined, options?: {
228
- size?: ImageSize;
229
- format?: ImageFormat;
230
- }): string | undefined;
206
+ export declare function guildTagBadgeUrl(guildId: BigString, badgeHash: BigString | undefined, options?: ImageOptions): string | undefined;
231
207
  //# sourceMappingURL=images.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../src/images.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../src/images.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,wBAAwB,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAGvI,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,gCAAgC;AAChC,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,SAAe,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CAE/F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,UAAQ,EAAE,MAAM,GAAE,WAAmB,GAAG,MAAM,CAElG;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,CAM9F;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,UAKxE;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,CAExI;AAED,wBAAgB,mBAAmB,CAAC,gBAAgB,EAAE,SAAS,GAAG,MAAM,CAIvE;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG;IAAE,MAAM,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,MAAM,GAAG,SAAS,CAQhH;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,GAAG;IAAE,MAAM,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,MAAM,GAAG,SAAS,CAQrH;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAQ7H;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAQ/H;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAQxI;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,GAAG;IAAE,KAAK,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,MAAM,GAAG,SAAS,CAQjI;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,wBAAwB,GAAG,MAAM,CAQhG;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG;IAAE,MAAM,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,MAAM,GAAG,SAAS,CAU1I;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG;IAAE,MAAM,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,MAAM,GAAG,SAAS,CAU1I;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAQxI;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAQ1I;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAQxI;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,SAAS,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAUrH;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG;IAAE,IAAI,CAAC,EAAE,kBAAkB,CAAA;CAAE,GAAG,MAAM,GAAG,SAAS,CASpI;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAQ1H;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAQ1H;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAIjI"}
package/dist/images.js CHANGED
@@ -20,11 +20,33 @@ import { iconBigintToHash } from './hash.js';
20
20
  * Builds a URL to a user's avatar stored in the Discord CDN.
21
21
  *
22
22
  * @param userId - The ID of the user to get the avatar of.
23
+ * @param avatar - The user's avatar hash.
24
+ * @param options - The parameters for the building of the URL.
25
+ * @returns The user avatar as a URL.
26
+ */ export function avatarUrl(userId, avatar, options) {
27
+ return formatImageUrl(`https://cdn.discordapp.com/avatars/${userId}/${typeof avatar === 'string' ? avatar : iconBigintToHash(avatar)}`, options?.size ?? 128, options?.format);
28
+ }
29
+ /**
30
+ * Builds a URL to a user's default avatar stored in the Discord CDN.
31
+ *
32
+ * @param userId - The ID of the user to get the avatar of.
23
33
  * @param discriminator - The user's discriminator. (4-digit tag after the hashtag.)
34
+ * @returns The user default avatar as an URL.
35
+ */ export function defaultAvatarUrl(userId, discriminator) {
36
+ const isLegacy = discriminator === '0' || discriminator === '0000';
37
+ const index = isLegacy ? (BigInt(userId) >> 22n) % 6n : Number(discriminator) % 5;
38
+ return `https://cdn.discordapp.com/embed/avatars/${index}.png`;
39
+ }
40
+ /**
41
+ * Builds a URL to a user's display avatar stored in the Discord CDN.
42
+ *
43
+ * @param userId - The ID of the user to get the avatar of.
44
+ * @param discriminator - The user's discriminator. (4-digit tag after the hashtag.)
45
+ * @param avatar - The user's avatar hash.
24
46
  * @param options - The parameters for the building of the URL.
25
- * @returns The link to the resource.
26
- */ export function avatarUrl(userId, discriminator, options) {
27
- return options?.avatar ? formatImageUrl(`https://cdn.discordapp.com/avatars/${userId}/${typeof options.avatar === 'string' ? options.avatar : iconBigintToHash(options.avatar)}`, options?.size ?? 128, options?.format) : `https://cdn.discordapp.com/embed/avatars/${discriminator === '0' ? (BigInt(userId) >> BigInt(22)) % BigInt(6) : Number(discriminator) % 5}.png`;
47
+ * @returns The user display avatar as an URL.
48
+ */ export function displayAvatarUrl(userId, discriminator, avatar, options) {
49
+ return avatar ? avatarUrl(userId, avatar, options) : defaultAvatarUrl(userId, discriminator);
28
50
  }
29
51
  export function avatarDecorationUrl(avatarDecoration) {
30
52
  return `https://cdn.discordapp.com/avatar-decoration-presets/${typeof avatarDecoration === 'string' ? avatarDecoration : iconBigintToHash(avatarDecoration)}.png`;
@@ -201,4 +223,4 @@ export function avatarDecorationUrl(avatarDecoration) {
201
223
  return formatImageUrl(`https://cdn.discordapp.com/guild-tag-badges/${guildId}/${badgeHash}`, options?.size ?? 128, options?.format);
202
224
  }
203
225
 
204
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbWFnZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBCaWdTdHJpbmcsIHR5cGUgR2V0R3VpbGRXaWRnZXRJbWFnZVF1ZXJ5LCB0eXBlIEltYWdlRm9ybWF0LCB0eXBlIEltYWdlU2l6ZSwgU3RpY2tlckZvcm1hdFR5cGVzIH0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgeyBpY29uQmlnaW50VG9IYXNoIH0gZnJvbSAnLi9oYXNoLmpzJ1xuXG4vKiogSGVscCBmb3JtYXQgYW4gaW1hZ2UgdXJsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEltYWdlVXJsKHVybDogc3RyaW5nLCBzaXplOiBJbWFnZVNpemUgPSAxMjgsIGZvcm1hdD86IEltYWdlRm9ybWF0KTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3VybH0uJHtmb3JtYXQgPz8gKHVybC5pbmNsdWRlcygnL2FfJykgPyAnZ2lmJyA6ICd3ZWJwJyl9P3NpemU9JHtzaXplfWBcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHVybCBmb3IgYW4gZW1vamkuXG4gKlxuICogQHBhcmFtIGVtb2ppSWQgVGhlIGlkIG9mIHRoZSBlbW9qaVxuICogQHBhcmFtIGFuaW1hdGVkIFdoZXRoZXIgb3Igbm90IHRoZSBlbW9qaSBpcyBhbmltYXRlZFxuICogQHBhcmFtIGZvcm1hdCBUaGUgZm9ybWF0IG9mIHRoZSBpbWFnZSwgZGVmYXVsdHMgdG8gcG5nXG4gKiBAcmV0dXJucyBzdHJpbmdcbiAqXG4gKiBAcmVtYXJrc1xuICogVGhlIGFuaW1hdGVkIHBhcmFtZXRlciBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIGFuaW1hdGVkIHF1ZXJ5IHBhcmFtZXRlciB2YWxpZCBmb3Igd2VicCBpbWFnZXMgb3IgdG8gZm9yY2UgdGhlIGdpZiBpZiB0aGUgZm9ybWF0IGlzIG5vdCBzZXQgdG8gd2VicC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtb2ppVXJsKGVtb2ppSWQ6IEJpZ1N0cmluZywgYW5pbWF0ZWQgPSBmYWxzZSwgZm9ybWF0OiBJbWFnZUZvcm1hdCA9ICdwbmcnKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9lbW9qaXMvJHtlbW9qaUlkfS4ke2FuaW1hdGVkID8gKGZvcm1hdCA9PT0gJ3dlYnAnID8gJ3dlYnAnIDogJ2dpZicpIDogZm9ybWF0fSR7YW5pbWF0ZWQgJiYgZm9ybWF0ID09PSAnd2VicCcgPyAnP2FuaW1hdGVkPXRydWUnIDogJyd9YFxufVxuXG4vKipcbiAqIEJ1aWxkcyBhIFVSTCB0byBhIHVzZXIncyBhdmF0YXIgc3RvcmVkIGluIHRoZSBEaXNjb3JkIENETi5cbiAqXG4gKiBAcGFyYW0gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIHRvIGdldCB0aGUgYXZhdGFyIG9mLlxuICogQHBhcmFtIGRpc2NyaW1pbmF0b3IgLSBUaGUgdXNlcidzIGRpc2NyaW1pbmF0b3IuICg0LWRpZ2l0IHRhZyBhZnRlciB0aGUgaGFzaHRhZy4pXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYnVpbGRpbmcgb2YgdGhlIFVSTC5cbiAqIEByZXR1cm5zIFRoZSBsaW5rIHRvIHRoZSByZXNvdXJjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF2YXRhclVybChcbiAgdXNlcklkOiBCaWdTdHJpbmcsXG4gIGRpc2NyaW1pbmF0b3I6IHN0cmluZyxcbiAgb3B0aW9ucz86IHtcbiAgICBhdmF0YXI6IEJpZ1N0cmluZyB8IHVuZGVmaW5lZFxuICAgIHNpemU/OiBJbWFnZVNpemVcbiAgICBmb3JtYXQ/OiBJbWFnZUZvcm1hdFxuICB9LFxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIG9wdGlvbnM/LmF2YXRhclxuICAgID8gZm9ybWF0SW1hZ2VVcmwoXG4gICAgICAgIGBodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9hdmF0YXJzLyR7dXNlcklkfS8ke3R5cGVvZiBvcHRpb25zLmF2YXRhciA9PT0gJ3N0cmluZycgPyBvcHRpb25zLmF2YXRhciA6IGljb25CaWdpbnRUb0hhc2gob3B0aW9ucy5hdmF0YXIpfWAsXG4gICAgICAgIG9wdGlvbnM/LnNpemUgPz8gMTI4LFxuICAgICAgICBvcHRpb25zPy5mb3JtYXQsXG4gICAgICApXG4gICAgOiBgaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vZW1iZWQvYXZhdGFycy8ke2Rpc2NyaW1pbmF0b3IgPT09ICcwJyA/IChCaWdJbnQodXNlcklkKSA+PiBCaWdJbnQoMjIpKSAlIEJpZ0ludCg2KSA6IE51bWJlcihkaXNjcmltaW5hdG9yKSAlIDV9LnBuZ2Bcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF2YXRhckRlY29yYXRpb25VcmwoYXZhdGFyRGVjb3JhdGlvbjogQmlnU3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9hdmF0YXItZGVjb3JhdGlvbi1wcmVzZXRzLyR7XG4gICAgdHlwZW9mIGF2YXRhckRlY29yYXRpb24gPT09ICdzdHJpbmcnID8gYXZhdGFyRGVjb3JhdGlvbiA6IGljb25CaWdpbnRUb0hhc2goYXZhdGFyRGVjb3JhdGlvbilcbiAgfS5wbmdgXG59XG5cbi8qKlxuICogQnVpbGRzIGEgVVJMIHRvIGEgdXNlcidzIGJhbm5lciBzdG9yZWQgaW4gdGhlIERpc2NvcmQgQ0ROLlxuICpcbiAqIEBwYXJhbSB1c2VySWQgLSBUaGUgSUQgb2YgdGhlIHVzZXIgdG8gZ2V0IHRoZSBiYW5uZXIgb2YuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYnVpbGRpbmcgb2YgdGhlIFVSTC5cbiAqIEByZXR1cm5zIFRoZSBsaW5rIHRvIHRoZSByZXNvdXJjZSBvciBgdW5kZWZpbmVkYCBpZiBubyBiYW5uZXIgaGFzIG5vdCBiZWVuIHNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJhbm5lclVybChcbiAgdXNlcklkOiBCaWdTdHJpbmcsXG4gIG9wdGlvbnM/OiB7XG4gICAgYmFubmVyPzogQmlnU3RyaW5nXG4gICAgc2l6ZT86IEltYWdlU2l6ZVxuICAgIGZvcm1hdD86IEltYWdlRm9ybWF0XG4gIH0sXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gb3B0aW9ucz8uYmFubmVyXG4gICAgPyBmb3JtYXRJbWFnZVVybChcbiAgICAgICAgYGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2Jhbm5lcnMvJHt1c2VySWR9LyR7dHlwZW9mIG9wdGlvbnMuYmFubmVyID09PSAnc3RyaW5nJyA/IG9wdGlvbnMuYmFubmVyIDogaWNvbkJpZ2ludFRvSGFzaChvcHRpb25zLmJhbm5lcil9YCxcbiAgICAgICAgb3B0aW9ucz8uc2l6ZSA/PyAxMjgsXG4gICAgICAgIG9wdGlvbnM/LmZvcm1hdCxcbiAgICAgIClcbiAgICA6IHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIEJ1aWxkcyBhIFVSTCB0byB0aGUgZ3VpbGQgYmFubmVyIHN0b3JlZCBpbiB0aGUgRGlzY29yZCBDRE4uXG4gKlxuICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbGluayB0byB0aGUgYmFubmVyIGZvci5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBidWlsZGluZyBvZiB0aGUgVVJMLlxuICogQHJldHVybnMgVGhlIGxpbmsgdG8gdGhlIHJlc291cmNlIG9yIGB1bmRlZmluZWRgIGlmIG5vIGJhbm5lciBoYXMgYmVlbiBzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBndWlsZEJhbm5lclVybChcbiAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICBvcHRpb25zOiB7XG4gICAgYmFubmVyPzogQmlnU3RyaW5nXG4gICAgc2l6ZT86IEltYWdlU2l6ZVxuICAgIGZvcm1hdD86IEltYWdlRm9ybWF0XG4gIH0sXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gb3B0aW9ucy5iYW5uZXJcbiAgICA/IGZvcm1hdEltYWdlVXJsKFxuICAgICAgICBgaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vYmFubmVycy8ke2d1aWxkSWR9LyR7dHlwZW9mIG9wdGlvbnMuYmFubmVyID09PSAnc3RyaW5nJyA/IG9wdGlvbnMuYmFubmVyIDogaWNvbkJpZ2ludFRvSGFzaChvcHRpb25zLmJhbm5lcil9YCxcbiAgICAgICAgb3B0aW9ucy5zaXplID8/IDEyOCxcbiAgICAgICAgb3B0aW9ucy5mb3JtYXQsXG4gICAgICApXG4gICAgOiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBVUkwgdG8gdGhlIGd1aWxkIGljb24gc3RvcmVkIGluIHRoZSBEaXNjb3JkIENETi5cbiAqXG4gKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBsaW5rIHRvIHRoZSBiYW5uZXIgZm9yLlxuICogQHBhcmFtIGltYWdlSGFzaCAtIFRoZSBoYXNoIGlkZW50aWZ5aW5nIHRoZSBldmVudCBjb3ZlciBpbWFnZS5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBidWlsZGluZyBvZiB0aGUgVVJMLlxuICogQHJldHVybnMgVGhlIGxpbmsgdG8gdGhlIHJlc291cmNlIG9yIGB1bmRlZmluZWRgIGlmIG5vIGJhbm5lciBoYXMgYmVlbiBzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBndWlsZEljb25VcmwoXG4gIGd1aWxkSWQ6IEJpZ1N0cmluZyxcbiAgaW1hZ2VIYXNoOiBCaWdTdHJpbmcgfCB1bmRlZmluZWQsXG4gIG9wdGlvbnM/OiB7XG4gICAgc2l6ZT86IEltYWdlU2l6ZVxuICAgIGZvcm1hdD86IEltYWdlRm9ybWF0XG4gIH0sXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gaW1hZ2VIYXNoXG4gICAgPyBmb3JtYXRJbWFnZVVybChcbiAgICAgICAgYGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2ljb25zLyR7Z3VpbGRJZH0vJHt0eXBlb2YgaW1hZ2VIYXNoID09PSAnc3RyaW5nJyA/IGltYWdlSGFzaCA6IGljb25CaWdpbnRUb0hhc2goaW1hZ2VIYXNoKX1gLFxuICAgICAgICBvcHRpb25zPy5zaXplID8/IDEyOCxcbiAgICAgICAgb3B0aW9ucz8uZm9ybWF0LFxuICAgICAgKVxuICAgIDogdW5kZWZpbmVkXG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBVUkwgdG8gYSBndWlsZCBzcGxhc2ggc3RvcmVkIGluIHRoZSBEaXNjb3JkIENETi5cbiAqXG4gKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBzcGxhc2ggb2YuXG4gKiBAcGFyYW0gaW1hZ2VIYXNoIC0gVGhlIGhhc2ggaWRlbnRpZnlpbmcgdGhlIHNwbGFzaCBpbWFnZS5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBidWlsZGluZyBvZiB0aGUgVVJMLlxuICogQHJldHVybnMgVGhlIGxpbmsgdG8gdGhlIHJlc291cmNlIG9yIGB1bmRlZmluZWRgIGlmIHRoZSBndWlsZCBkb2VzIG5vdCBoYXZlIGEgc3BsYXNoIGltYWdlIHNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd1aWxkU3BsYXNoVXJsKFxuICBndWlsZElkOiBCaWdTdHJpbmcsXG4gIGltYWdlSGFzaDogQmlnU3RyaW5nIHwgdW5kZWZpbmVkLFxuICBvcHRpb25zPzoge1xuICAgIHNpemU/OiBJbWFnZVNpemVcbiAgICBmb3JtYXQ/OiBJbWFnZUZvcm1hdFxuICB9LFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGltYWdlSGFzaFxuICAgID8gZm9ybWF0SW1hZ2VVcmwoXG4gICAgICAgIGBodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9zcGxhc2hlcy8ke2d1aWxkSWR9LyR7dHlwZW9mIGltYWdlSGFzaCA9PT0gJ3N0cmluZycgPyBpbWFnZUhhc2ggOiBpY29uQmlnaW50VG9IYXNoKGltYWdlSGFzaCl9YCxcbiAgICAgICAgb3B0aW9ucz8uc2l6ZSA/PyAxMjgsXG4gICAgICAgIG9wdGlvbnM/LmZvcm1hdCxcbiAgICAgIClcbiAgICA6IHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgVVJMIHRvIGEgZ3VpbGQgZGlzY292ZXJ5IHNwbGFzaCBzdG9yZWQgaW4gdGhlIERpc2NvcmQgQ0ROLlxuICpcbiAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHNwbGFzaCBvZi5cbiAqIEBwYXJhbSBpbWFnZUhhc2ggLSBUaGUgaGFzaCBpZGVudGlmeWluZyB0aGUgZGlzY292ZXJ5IHNwbGFzaCBpbWFnZS5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBidWlsZGluZyBvZiB0aGUgVVJMLlxuICogQHJldHVybnMgVGhlIGxpbmsgdG8gdGhlIHJlc291cmNlIG9yIGB1bmRlZmluZWRgIGlmIHRoZSBndWlsZCBkb2VzIG5vdCBoYXZlIGEgc3BsYXNoIGltYWdlIHNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd1aWxkRGlzY292ZXJ5U3BsYXNoVXJsKFxuICBndWlsZElkOiBCaWdTdHJpbmcsXG4gIGltYWdlSGFzaDogQmlnU3RyaW5nIHwgdW5kZWZpbmVkLFxuICBvcHRpb25zPzoge1xuICAgIHNpemU/OiBJbWFnZVNpemVcbiAgICBmb3JtYXQ/OiBJbWFnZUZvcm1hdFxuICB9LFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGltYWdlSGFzaFxuICAgID8gZm9ybWF0SW1hZ2VVcmwoXG4gICAgICAgIGBodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9kaXNjb3Zlcnktc3BsYXNoZXMvJHtndWlsZElkfS8ke3R5cGVvZiBpbWFnZUhhc2ggPT09ICdzdHJpbmcnID8gaW1hZ2VIYXNoIDogaWNvbkJpZ2ludFRvSGFzaChpbWFnZUhhc2gpfWAsXG4gICAgICAgIG9wdGlvbnM/LnNpemUgPz8gMTI4LFxuICAgICAgICBvcHRpb25zPy5mb3JtYXQsXG4gICAgICApXG4gICAgOiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIFVSTCB0byBhIGd1aWxkIHNjaGVkdWxlZCBldmVudCBjb3ZlciBzdG9yZWQgaW4gdGhlIERpc2NvcmQgQ0ROLlxuICpcbiAqIEBwYXJhbSBldmVudElkIC0gVGhlIElEIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQgdG8gZ2V0IHRoZSBjb3ZlciBvZi5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBidWlsZGluZyBvZiB0aGUgVVJMLlxuICogQHJldHVybnMgVGhlIGxpbmsgdG8gdGhlIHJlc291cmNlIG9yIGB1bmRlZmluZWRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3VpbGRTY2hlZHVsZWRFdmVudENvdmVyVXJsKFxuICBldmVudElkOiBCaWdTdHJpbmcsXG4gIG9wdGlvbnM6IHtcbiAgICBjb3Zlcj86IEJpZ1N0cmluZ1xuICAgIHNpemU/OiBJbWFnZVNpemVcbiAgICBmb3JtYXQ/OiBJbWFnZUZvcm1hdFxuICB9LFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIG9wdGlvbnMuY292ZXJcbiAgICA/IGZvcm1hdEltYWdlVXJsKFxuICAgICAgICBgaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vZ3VpbGQtZXZlbnRzLyR7ZXZlbnRJZH0vJHt0eXBlb2Ygb3B0aW9ucy5jb3ZlciA9PT0gJ3N0cmluZycgPyBvcHRpb25zLmNvdmVyIDogaWNvbkJpZ2ludFRvSGFzaChvcHRpb25zLmNvdmVyKX1gLFxuICAgICAgICBvcHRpb25zLnNpemUgPz8gMTI4LFxuICAgICAgICBvcHRpb25zLmZvcm1hdCxcbiAgICAgIClcbiAgICA6IHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIEJ1aWxkcyBhIFVSTCB0byB0aGUgZ3VpbGQgd2lkZ2V0IGltYWdlIHN0b3JlZCBpbiB0aGUgRGlzY29yZCBDRE4uXG4gKlxuICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbGluayB0byB0aGUgd2lkZ2V0IGltYWdlIGZvci5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBidWlsZGluZyBvZiB0aGUgVVJMLlxuICogQHJldHVybnMgVGhlIGxpbmsgdG8gdGhlIHJlc291cmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2lkZ2V0SW1hZ2VVcmwoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogR2V0R3VpbGRXaWRnZXRJbWFnZVF1ZXJ5KTogc3RyaW5nIHtcbiAgbGV0IHVybCA9IGBodHRwczovL2Rpc2NvcmRhcHAuY29tL2FwaS9ndWlsZHMvJHtndWlsZElkfS93aWRnZXQucG5nYFxuXG4gIGlmIChvcHRpb25zPy5zdHlsZSkge1xuICAgIHVybCArPSBgP3N0eWxlPSR7b3B0aW9ucy5zdHlsZX1gXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbi8qKlxuICogQnVpbGRzIGEgVVJMIHRvIGEgbWVtYmVyJ3MgYXZhdGFyIHN0b3JlZCBpbiB0aGUgRGlzY29yZCBDRE4uXG4gKlxuICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHdoZXJlIHRoZSBtZW1iZXIgaXNcbiAqIEBwYXJhbSB1c2VySWQgLSBUaGUgSUQgb2YgdGhlIHVzZXIgdG8gZ2V0IHRoZSBhdmF0YXIgb2YuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYnVpbGRpbmcgb2YgdGhlIFVSTC5cbiAqIEByZXR1cm5zIFRoZSBsaW5rIHRvIHRoZSByZXNvdXJjZSBvciBgdW5kZWZpbmVkYCBpZiBubyBiYW5uZXIgaGFzIGJlZW4gc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVtYmVyQXZhdGFyVXJsKFxuICBndWlsZElkOiBCaWdTdHJpbmcsXG4gIHVzZXJJZDogQmlnU3RyaW5nLFxuICBvcHRpb25zPzoge1xuICAgIGF2YXRhcj86IEJpZ1N0cmluZ1xuICAgIHNpemU/OiBJbWFnZVNpemVcbiAgICBmb3JtYXQ/OiBJbWFnZUZvcm1hdFxuICB9LFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIG9wdGlvbnM/LmF2YXRhclxuICAgID8gZm9ybWF0SW1hZ2VVcmwoXG4gICAgICAgIGBodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9ndWlsZHMvJHtndWlsZElkfS91c2Vycy8ke3VzZXJJZH0vYXZhdGFycy8ke1xuICAgICAgICAgIHR5cGVvZiBvcHRpb25zLmF2YXRhciA9PT0gJ3N0cmluZycgPyBvcHRpb25zLmF2YXRhciA6IGljb25CaWdpbnRUb0hhc2gob3B0aW9ucy5hdmF0YXIpXG4gICAgICAgIH1gLFxuICAgICAgICBvcHRpb25zPy5zaXplID8/IDEyOCxcbiAgICAgICAgb3B0aW9ucz8uZm9ybWF0LFxuICAgICAgKVxuICAgIDogdW5kZWZpbmVkXG59XG5cbi8qKlxuICogQnVpbGRzIGEgVVJMIHRvIGEgbWVtYmVyJ3MgYmFubmVyIHN0b3JlZCBpbiB0aGUgRGlzY29yZCBDRE4uXG4gKlxuICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHdoZXJlIHRoZSBtZW1iZXIgaXNcbiAqIEBwYXJhbSB1c2VySWQgLSBUaGUgSUQgb2YgdGhlIHVzZXIgdG8gZ2V0IHRoZSBiYW5uZXIgb2YuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYnVpbGRpbmcgb2YgdGhlIFVSTC5cbiAqIEByZXR1cm5zIFRoZSBsaW5rIHRvIHRoZSByZXNvdXJjZSBvciBgdW5kZWZpbmVkYCBpZiBubyBiYW5uZXIgaGFzIGJlZW4gc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVtYmVyQmFubmVyVXJsKFxuICBndWlsZElkOiBCaWdTdHJpbmcsXG4gIHVzZXJJZDogQmlnU3RyaW5nLFxuICBvcHRpb25zPzoge1xuICAgIGJhbm5lcj86IEJpZ1N0cmluZ1xuICAgIHNpemU/OiBJbWFnZVNpemVcbiAgICBmb3JtYXQ/OiBJbWFnZUZvcm1hdFxuICB9LFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIG9wdGlvbnM/LmJhbm5lclxuICAgID8gZm9ybWF0SW1hZ2VVcmwoXG4gICAgICAgIGBodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9ndWlsZHMvJHtndWlsZElkfS91c2Vycy8ke3VzZXJJZH0vYmFubmVycy8ke1xuICAgICAgICAgIHR5cGVvZiBvcHRpb25zLmJhbm5lciA9PT0gJ3N0cmluZycgPyBvcHRpb25zLmJhbm5lciA6IGljb25CaWdpbnRUb0hhc2gob3B0aW9ucy5iYW5uZXIpXG4gICAgICAgIH1gLFxuICAgICAgICBvcHRpb25zPy5zaXplID8/IDEyOCxcbiAgICAgICAgb3B0aW9ucz8uZm9ybWF0LFxuICAgICAgKVxuICAgIDogdW5kZWZpbmVkXG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBVUkwgdG8gYW4gYXBwbGljYXRpb24gaWNvbiBzdG9yZWQgaW4gdGhlIERpc2NvcmQgQ0ROLlxuICpcbiAqIEBwYXJhbSBhcHBsaWNhdGlvbklkIC0gVGhlIElEIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBnZXQgdGhlIGljb24gb2YuXG4gKiBAcGFyYW0gaWNvbkhhc2ggLSBUaGUgaGFzaCBpZGVudGlmeWluZyB0aGUgYXBwbGljYXRpb24gaWNvbi5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBidWlsZGluZyBvZiB0aGUgVVJMLlxuICogQHJldHVybnMgVGhlIGxpbmsgdG8gdGhlIHJlc291cmNlIG9yIGB1bmRlZmluZWRgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBsaWNhdGlvbkljb25VcmwoXG4gIGFwcGxpY2F0aW9uSWQ6IEJpZ1N0cmluZyxcbiAgaWNvbkhhc2g6IEJpZ1N0cmluZyB8IHVuZGVmaW5lZCxcbiAgb3B0aW9ucz86IHtcbiAgICBzaXplPzogSW1hZ2VTaXplXG4gICAgZm9ybWF0PzogSW1hZ2VGb3JtYXRcbiAgfSxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBpY29uSGFzaFxuICAgID8gZm9ybWF0SW1hZ2VVcmwoXG4gICAgICAgIGBodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9hcHAtaWNvbnMvJHthcHBsaWNhdGlvbklkfS8ke3R5cGVvZiBpY29uSGFzaCA9PT0gJ3N0cmluZycgPyBpY29uSGFzaCA6IGljb25CaWdpbnRUb0hhc2goaWNvbkhhc2gpfWAsXG4gICAgICAgIG9wdGlvbnM/LnNpemUgPz8gMTI4LFxuICAgICAgICBvcHRpb25zPy5mb3JtYXQsXG4gICAgICApXG4gICAgOiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIFVSTCB0byBhbiBhcHBsaWNhdGlvbiBjb3ZlciBzdG9yZWQgaW4gdGhlIERpc2NvcmQgQ0ROLlxuICpcbiAqIEBwYXJhbSBhcHBsaWNhdGlvbklkIC0gVGhlIElEIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBnZXQgdGhlIGNvdmVyIG9mLlxuICogQHBhcmFtIGNvdmVySGFzaCAtIFRoZSBoYXNoIGlkZW50aWZ5aW5nIHRoZSBhcHBsaWNhdGlvbiBjb3Zlci5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBidWlsZGluZyBvZiB0aGUgVVJMLlxuICogQHJldHVybnMgVGhlIGxpbmsgdG8gdGhlIHJlc291cmNlIG9yIGB1bmRlZmluZWRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbGljYXRpb25Db3ZlclVybChcbiAgYXBwbGljYXRpb25JZDogQmlnU3RyaW5nLFxuICBjb3Zlckhhc2g6IEJpZ1N0cmluZyB8IHVuZGVmaW5lZCxcbiAgb3B0aW9ucz86IHtcbiAgICBzaXplPzogSW1hZ2VTaXplXG4gICAgZm9ybWF0PzogSW1hZ2VGb3JtYXRcbiAgfSxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBjb3Zlckhhc2hcbiAgICA/IGZvcm1hdEltYWdlVXJsKFxuICAgICAgICBgaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vYXBwLWljb25zLyR7YXBwbGljYXRpb25JZH0vJHt0eXBlb2YgY292ZXJIYXNoID09PSAnc3RyaW5nJyA/IGNvdmVySGFzaCA6IGljb25CaWdpbnRUb0hhc2goY292ZXJIYXNoKX1gLFxuICAgICAgICBvcHRpb25zPy5zaXplID8/IDEyOCxcbiAgICAgICAgb3B0aW9ucz8uZm9ybWF0LFxuICAgICAgKVxuICAgIDogdW5kZWZpbmVkXG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBVUkwgdG8gYW4gYXBwbGljYXRpb24gYXNzZXQgc3RvcmVkIGluIHRoZSBEaXNjb3JkIENETi5cbiAqXG4gKiBAcGFyYW0gYXBwbGljYXRpb25JZCAtIFRoZSBJRCBvZiB0aGUgYXBwbGljYXRpb24gdG8gZ2V0IHRoZSBhc3NldCBvZi5cbiAqIEBwYXJhbSBhc3NldElkIC0gVGhlIGlkIGlkZW50aWZ5aW5nIHRoZSBhcHBsaWNhdGlvbiBhc3NldC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBidWlsZGluZyBvZiB0aGUgVVJMLlxuICogQHJldHVybnMgVGhlIGxpbmsgdG8gdGhlIHJlc291cmNlIG9yIGB1bmRlZmluZWRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbGljYXRpb25Bc3NldFVybChcbiAgYXBwbGljYXRpb25JZDogQmlnU3RyaW5nLFxuICBhc3NldElkOiBCaWdTdHJpbmcgfCB1bmRlZmluZWQsXG4gIG9wdGlvbnM/OiB7XG4gICAgc2l6ZT86IEltYWdlU2l6ZVxuICAgIGZvcm1hdD86IEltYWdlRm9ybWF0XG4gIH0sXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gYXNzZXRJZFxuICAgID8gZm9ybWF0SW1hZ2VVcmwoXG4gICAgICAgIGBodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9hcHAtaWNvbnMvJHthcHBsaWNhdGlvbklkfS8ke3R5cGVvZiBhc3NldElkID09PSAnc3RyaW5nJyA/IGFzc2V0SWQgOiBpY29uQmlnaW50VG9IYXNoKGFzc2V0SWQpfWAsXG4gICAgICAgIG9wdGlvbnM/LnNpemUgPz8gMTI4LFxuICAgICAgICBvcHRpb25zPy5mb3JtYXQsXG4gICAgICApXG4gICAgOiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIFVSTCB0byBhIHN0aWNrZXIgcGFjayBiYW5uZXIgc3RvcmVkIGluIHRoZSBEaXNjb3JkIENETi5cbiAqXG4gKiBAcGFyYW0gYmFubmVyQXNzZXRJZCAtIFRoZSBJRCBvZiB0aGUgYmFubmVyIGFzc2V0IGZvciB0aGUgc3RpY2tlciBwYWNrLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGJ1aWxkaW5nIG9mIHRoZSBVUkwuXG4gKiBAcmV0dXJucyBUaGUgbGluayB0byB0aGUgcmVzb3VyY2Ugb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGlja2VyUGFja0Jhbm5lclVybChcbiAgYmFubmVyQXNzZXRJZDogQmlnU3RyaW5nIHwgdW5kZWZpbmVkLFxuICBvcHRpb25zPzoge1xuICAgIHNpemU/OiBJbWFnZVNpemVcbiAgICBmb3JtYXQ/OiBJbWFnZUZvcm1hdFxuICB9LFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGJhbm5lckFzc2V0SWRcbiAgICA/IGZvcm1hdEltYWdlVXJsKFxuICAgICAgICBgaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vYXBwLWFzc2V0cy83MTA5ODI0MTQzMDE3OTAyMTYvc3RvcmUvJHtcbiAgICAgICAgICB0eXBlb2YgYmFubmVyQXNzZXRJZCA9PT0gJ3N0cmluZycgPyBiYW5uZXJBc3NldElkIDogaWNvbkJpZ2ludFRvSGFzaChiYW5uZXJBc3NldElkKVxuICAgICAgICB9YCxcbiAgICAgICAgb3B0aW9ucz8uc2l6ZSA/PyAxMjgsXG4gICAgICAgIG9wdGlvbnM/LmZvcm1hdCxcbiAgICAgIClcbiAgICA6IHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgVVJMIHRvIGEgc3RpY2tlciBzdG9yZWQgaW4gdGhlIERpc2NvcmQgQ0ROLlxuICpcbiAqIEBwYXJhbSBzdGlja2VySWQgLSBUaGUgSUQgb2YgdGhlIHN0aWNrZXIgdG8gZ2V0IHRoZSBpY29uIG9mXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYnVpbGRpbmcgb2YgdGhlIFVSTC5cbiAqIEByZXR1cm5zIFRoZSBsaW5rIHRvIHRoZSByZXNvdXJjZSBvciBgdW5kZWZpbmVkYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0aWNrZXJVcmwoXG4gIHN0aWNrZXJJZDogQmlnU3RyaW5nIHwgbnVtYmVyLFxuICBvcHRpb25zPzoge1xuICAgIHNpemU/OiBJbWFnZVNpemVcbiAgICBmb3JtYXQ/OiBJbWFnZUZvcm1hdFxuICAgIHR5cGU/OiBTdGlja2VyRm9ybWF0VHlwZXNcbiAgfSxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghc3RpY2tlcklkKSByZXR1cm5cblxuICBjb25zdCB1cmwgPVxuICAgIG9wdGlvbnM/LnR5cGUgPT09IFN0aWNrZXJGb3JtYXRUeXBlcy5HaWZcbiAgICAgID8gYGh0dHBzOi8vbWVkaWEuZGlzY29yZGFwcC5uZXQvc3RpY2tlcnMvJHtzdGlja2VySWR9YFxuICAgICAgOiBgaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vc3RpY2tlcnMvJHtzdGlja2VySWR9YFxuXG4gIHJldHVybiBmb3JtYXRJbWFnZVVybCh1cmwsIG9wdGlvbnM/LnNpemUgPz8gMTI4LCBvcHRpb25zPy5mb3JtYXQpXG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBVUkwgdG8gYSB0ZWFtIGljb24gc3RvcmVkIGluIHRoZSBEaXNjb3JkIENETi5cbiAqXG4gKiBAcGFyYW0gdGVhbUlkIC0gVGhlIElEIG9mIHRoZSB0ZWFtIHRvIGdldCB0aGUgaWNvbiBvZlxuICogQHBhcmFtIGljb25IYXNoIC0gVGhlIGhhc2ggb2YgdGhlIHRlYW0gaWNvbi5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBidWlsZGluZyBvZiB0aGUgVVJMLlxuICogQHJldHVybnMgVGhlIGxpbmsgdG8gdGhlIHJlc291cmNlIG9yIGB1bmRlZmluZWRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGVhbUljb25VcmwoXG4gIHRlYW1JZDogQmlnU3RyaW5nLFxuICBpY29uSGFzaDogQmlnU3RyaW5nIHwgdW5kZWZpbmVkLFxuICBvcHRpb25zPzoge1xuICAgIHNpemU/OiBJbWFnZVNpemVcbiAgICBmb3JtYXQ/OiBJbWFnZUZvcm1hdFxuICB9LFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGljb25IYXNoXG4gICAgPyBmb3JtYXRJbWFnZVVybChcbiAgICAgICAgYGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL3RlYW0taWNvbnMvJHt0ZWFtSWR9L3N0b3JlLyR7dHlwZW9mIGljb25IYXNoID09PSAnc3RyaW5nJyA/IGljb25IYXNoIDogaWNvbkJpZ2ludFRvSGFzaChpY29uSGFzaCl9YCxcbiAgICAgICAgb3B0aW9ucz8uc2l6ZSA/PyAxMjgsXG4gICAgICAgIG9wdGlvbnM/LmZvcm1hdCxcbiAgICAgIClcbiAgICA6IHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgVVJMIHRvIGEgcm9sZSBpY29uIHN0b3JlZCBpbiB0aGUgRGlzY29yZCBDRE4uXG4gKlxuICogQHBhcmFtIHJvbGVJZCAtIFRoZSBJRCBvZiB0aGUgcm9sZSB0byBnZXQgdGhlIGljb24gb2ZcbiAqIEBwYXJhbSBpY29uSGFzaCAtIFRoZSBoYXNoIG9mIHRoZSByb2xlIGljb24uXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYnVpbGRpbmcgb2YgdGhlIFVSTC5cbiAqIEByZXR1cm5zIFRoZSBsaW5rIHRvIHRoZSByZXNvdXJjZSBvciBgdW5kZWZpbmVkYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvbGVJY29uVXJsKFxuICByb2xlSWQ6IEJpZ1N0cmluZyxcbiAgaWNvbkhhc2g6IEJpZ1N0cmluZyB8IHVuZGVmaW5lZCxcbiAgb3B0aW9ucz86IHtcbiAgICBzaXplPzogSW1hZ2VTaXplXG4gICAgZm9ybWF0PzogSW1hZ2VGb3JtYXRcbiAgfSxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBpY29uSGFzaFxuICAgID8gZm9ybWF0SW1hZ2VVcmwoXG4gICAgICAgIGBodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9yb2xlLWljb25zLyR7cm9sZUlkfS8ke3R5cGVvZiBpY29uSGFzaCA9PT0gJ3N0cmluZycgPyBpY29uSGFzaCA6IGljb25CaWdpbnRUb0hhc2goaWNvbkhhc2gpfWAsXG4gICAgICAgIG9wdGlvbnM/LnNpemUgPz8gMTI4LFxuICAgICAgICBvcHRpb25zPy5mb3JtYXQsXG4gICAgICApXG4gICAgOiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIFVSTCB0byBhIGd1aWxkIHRhZyBiYWRnZSBzdG9yZWQgaW4gdGhlIERpc2NvcmQgQ0ROLlxuICpcbiAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHRhZyBiYWRnZSBvZlxuICogQHBhcmFtIGJhZGdlSGFzaCAtIFRoZSBoYXNoIGlkZW50aWZ5aW5nIHRoZSBndWlsZCB0YWcgYmFkZ2UuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYnVpbGRpbmcgb2YgdGhlIFVSTC5cbiAqIEByZXR1cm5zIFRoZSBsaW5rIHRvIHRoZSByZXNvdXJjZSBvciBgdW5kZWZpbmVkYCBpZiBubyBiYWRnZSBoYXMgYmVlbiBzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBndWlsZFRhZ0JhZGdlVXJsKFxuICBndWlsZElkOiBCaWdTdHJpbmcsXG4gIGJhZGdlSGFzaDogQmlnU3RyaW5nIHwgdW5kZWZpbmVkLFxuICBvcHRpb25zPzoge1xuICAgIHNpemU/OiBJbWFnZVNpemVcbiAgICBmb3JtYXQ/OiBJbWFnZUZvcm1hdFxuICB9LFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGJhZGdlSGFzaCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgcmV0dXJuIGZvcm1hdEltYWdlVXJsKGBodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9ndWlsZC10YWctYmFkZ2VzLyR7Z3VpbGRJZH0vJHtiYWRnZUhhc2h9YCwgb3B0aW9ucz8uc2l6ZSA/PyAxMjgsIG9wdGlvbnM/LmZvcm1hdClcbn1cbiJdLCJuYW1lcyI6WyJTdGlja2VyRm9ybWF0VHlwZXMiLCJpY29uQmlnaW50VG9IYXNoIiwiZm9ybWF0SW1hZ2VVcmwiLCJ1cmwiLCJzaXplIiwiZm9ybWF0IiwiaW5jbHVkZXMiLCJlbW9qaVVybCIsImVtb2ppSWQiLCJhbmltYXRlZCIsImF2YXRhclVybCIsInVzZXJJZCIsImRpc2NyaW1pbmF0b3IiLCJvcHRpb25zIiwiYXZhdGFyIiwiQmlnSW50IiwiTnVtYmVyIiwiYXZhdGFyRGVjb3JhdGlvblVybCIsImF2YXRhckRlY29yYXRpb24iLCJiYW5uZXJVcmwiLCJiYW5uZXIiLCJ1bmRlZmluZWQiLCJndWlsZEJhbm5lclVybCIsImd1aWxkSWQiLCJndWlsZEljb25VcmwiLCJpbWFnZUhhc2giLCJndWlsZFNwbGFzaFVybCIsImd1aWxkRGlzY292ZXJ5U3BsYXNoVXJsIiwiZ3VpbGRTY2hlZHVsZWRFdmVudENvdmVyVXJsIiwiZXZlbnRJZCIsImNvdmVyIiwiZ2V0V2lkZ2V0SW1hZ2VVcmwiLCJzdHlsZSIsIm1lbWJlckF2YXRhclVybCIsIm1lbWJlckJhbm5lclVybCIsImFwcGxpY2F0aW9uSWNvblVybCIsImFwcGxpY2F0aW9uSWQiLCJpY29uSGFzaCIsImFwcGxpY2F0aW9uQ292ZXJVcmwiLCJjb3Zlckhhc2giLCJhcHBsaWNhdGlvbkFzc2V0VXJsIiwiYXNzZXRJZCIsInN0aWNrZXJQYWNrQmFubmVyVXJsIiwiYmFubmVyQXNzZXRJZCIsInN0aWNrZXJVcmwiLCJzdGlja2VySWQiLCJ0eXBlIiwiR2lmIiwidGVhbUljb25VcmwiLCJ0ZWFt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
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbWFnZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBCaWdTdHJpbmcsIHR5cGUgR2V0R3VpbGRXaWRnZXRJbWFnZVF1ZXJ5LCB0eXBlIEltYWdlRm9ybWF0LCB0eXBlIEltYWdlU2l6ZSwgU3RpY2tlckZvcm1hdFR5cGVzIH0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgeyBpY29uQmlnaW50VG9IYXNoIH0gZnJvbSAnLi9oYXNoLmpzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlT3B0aW9ucyB7XG4gIHNpemU/OiBJbWFnZVNpemVcbiAgZm9ybWF0PzogSW1hZ2VGb3JtYXRcbn1cblxuLyoqIEhlbHAgZm9ybWF0IGFuIGltYWdlIHVybC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRJbWFnZVVybCh1cmw6IHN0cmluZywgc2l6ZTogSW1hZ2VTaXplID0gMTI4LCBmb3JtYXQ/OiBJbWFnZUZvcm1hdCk6IHN0cmluZyB7XG4gIHJldHVybiBgJHt1cmx9LiR7Zm9ybWF0ID8/ICh1cmwuaW5jbHVkZXMoJy9hXycpID8gJ2dpZicgOiAnd2VicCcpfT9zaXplPSR7c2l6ZX1gXG59XG5cbi8qKlxuICogR2V0IHRoZSB1cmwgZm9yIGFuIGVtb2ppLlxuICpcbiAqIEBwYXJhbSBlbW9qaUlkIFRoZSBpZCBvZiB0aGUgZW1vamlcbiAqIEBwYXJhbSBhbmltYXRlZCBXaGV0aGVyIG9yIG5vdCB0aGUgZW1vamkgaXMgYW5pbWF0ZWRcbiAqIEBwYXJhbSBmb3JtYXQgVGhlIGZvcm1hdCBvZiB0aGUgaW1hZ2UsIGRlZmF1bHRzIHRvIHBuZ1xuICogQHJldHVybnMgc3RyaW5nXG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSBhbmltYXRlZCBwYXJhbWV0ZXIgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBhbmltYXRlZCBxdWVyeSBwYXJhbWV0ZXIgdmFsaWQgZm9yIHdlYnAgaW1hZ2VzIG9yIHRvIGZvcmNlIHRoZSBnaWYgaWYgdGhlIGZvcm1hdCBpcyBub3Qgc2V0IHRvIHdlYnAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbW9qaVVybChlbW9qaUlkOiBCaWdTdHJpbmcsIGFuaW1hdGVkID0gZmFsc2UsIGZvcm1hdDogSW1hZ2VGb3JtYXQgPSAncG5nJyk6IHN0cmluZyB7XG4gIHJldHVybiBgaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vZW1vamlzLyR7ZW1vamlJZH0uJHthbmltYXRlZCA/IChmb3JtYXQgPT09ICd3ZWJwJyA/ICd3ZWJwJyA6ICdnaWYnKSA6IGZvcm1hdH0ke2FuaW1hdGVkICYmIGZvcm1hdCA9PT0gJ3dlYnAnID8gJz9hbmltYXRlZD10cnVlJyA6ICcnfWBcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBVUkwgdG8gYSB1c2VyJ3MgYXZhdGFyIHN0b3JlZCBpbiB0aGUgRGlzY29yZCBDRE4uXG4gKlxuICogQHBhcmFtIHVzZXJJZCAtIFRoZSBJRCBvZiB0aGUgdXNlciB0byBnZXQgdGhlIGF2YXRhciBvZi5cbiAqIEBwYXJhbSBhdmF0YXIgLSBUaGUgdXNlcidzIGF2YXRhciBoYXNoLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGJ1aWxkaW5nIG9mIHRoZSBVUkwuXG4gKiBAcmV0dXJucyBUaGUgdXNlciBhdmF0YXIgYXMgYSBVUkwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdmF0YXJVcmwodXNlcklkOiBCaWdTdHJpbmcsIGF2YXRhcjogQmlnU3RyaW5nLCBvcHRpb25zPzogSW1hZ2VPcHRpb25zKTogc3RyaW5nIHtcbiAgcmV0dXJuIGZvcm1hdEltYWdlVXJsKFxuICAgIGBodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9hdmF0YXJzLyR7dXNlcklkfS8ke3R5cGVvZiBhdmF0YXIgPT09ICdzdHJpbmcnID8gYXZhdGFyIDogaWNvbkJpZ2ludFRvSGFzaChhdmF0YXIpfWAsXG4gICAgb3B0aW9ucz8uc2l6ZSA/PyAxMjgsXG4gICAgb3B0aW9ucz8uZm9ybWF0LFxuICApXG59XG5cbi8qKlxuICogQnVpbGRzIGEgVVJMIHRvIGEgdXNlcidzIGRlZmF1bHQgYXZhdGFyIHN0b3JlZCBpbiB0aGUgRGlzY29yZCBDRE4uXG4gKlxuICogQHBhcmFtIHVzZXJJZCAtIFRoZSBJRCBvZiB0aGUgdXNlciB0byBnZXQgdGhlIGF2YXRhciBvZi5cbiAqIEBwYXJhbSBkaXNjcmltaW5hdG9yIC0gVGhlIHVzZXIncyBkaXNjcmltaW5hdG9yLiAoNC1kaWdpdCB0YWcgYWZ0ZXIgdGhlIGhhc2h0YWcuKVxuICogQHJldHVybnMgVGhlIHVzZXIgZGVmYXVsdCBhdmF0YXIgYXMgYW4gVVJMLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdEF2YXRhclVybCh1c2VySWQ6IEJpZ1N0cmluZywgZGlzY3JpbWluYXRvcjogc3RyaW5nKSB7XG4gIGNvbnN0IGlzTGVnYWN5ID0gZGlzY3JpbWluYXRvciA9PT0gJzAnIHx8IGRpc2NyaW1pbmF0b3IgPT09ICcwMDAwJ1xuICBjb25zdCBpbmRleCA9IGlzTGVnYWN5ID8gKEJpZ0ludCh1c2VySWQpID4+IDIybikgJSA2biA6IE51bWJlcihkaXNjcmltaW5hdG9yKSAlIDVcblxuICByZXR1cm4gYGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2VtYmVkL2F2YXRhcnMvJHtpbmRleH0ucG5nYFxufVxuXG4vKipcbiAqIEJ1aWxkcyBhIFVSTCB0byBhIHVzZXIncyBkaXNwbGF5IGF2YXRhciBzdG9yZWQgaW4gdGhlIERpc2NvcmQgQ0ROLlxuICpcbiAqIEBwYXJhbSB1c2VySWQgLSBUaGUgSUQgb2YgdGhlIHVzZXIgdG8gZ2V0IHRoZSBhdmF0YXIgb2YuXG4gKiBAcGFyYW0gZGlzY3JpbWluYXRvciAtIFRoZSB1c2VyJ3MgZGlzY3JpbWluYXRvci4gKDQtZGlnaXQgdGFnIGFmdGVyIHRoZSBoYXNodGFnLilcbiAqIEBwYXJhbSBhdmF0YXIgLSBUaGUgdXNlcidzIGF2YXRhciBoYXNoLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGJ1aWxkaW5nIG9mIHRoZSBVUkwuXG4gKiBAcmV0dXJucyBUaGUgdXNlciBkaXNwbGF5IGF2YXRhciBhcyBhbiBVUkwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNwbGF5QXZhdGFyVXJsKHVzZXJJZDogQmlnU3RyaW5nLCBkaXNjcmltaW5hdG9yOiBzdHJpbmcsIGF2YXRhcjogQmlnU3RyaW5nIHwgdW5kZWZpbmVkLCBvcHRpb25zPzogSW1hZ2VPcHRpb25zKTogc3RyaW5nIHtcbiAgcmV0dXJuIGF2YXRhciA/IGF2YXRhclVybCh1c2VySWQsIGF2YXRhciwgb3B0aW9ucykgOiBkZWZhdWx0QXZhdGFyVXJsKHVzZXJJZCwgZGlzY3JpbWluYXRvcilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF2YXRhckRlY29yYXRpb25VcmwoYXZhdGFyRGVjb3JhdGlvbjogQmlnU3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9hdmF0YXItZGVjb3JhdGlvbi1wcmVzZXRzLyR7XG4gICAgdHlwZW9mIGF2YXRhckRlY29yYXRpb24gPT09ICdzdHJpbmcnID8gYXZhdGFyRGVjb3JhdGlvbiA6IGljb25CaWdpbnRUb0hhc2goYXZhdGFyRGVjb3JhdGlvbilcbiAgfS5wbmdgXG59XG5cbi8qKlxuICogQnVpbGRzIGEgVVJMIHRvIGEgdXNlcidzIGJhbm5lciBzdG9yZWQgaW4gdGhlIERpc2NvcmQgQ0ROLlxuICpcbiAqIEBwYXJhbSB1c2VySWQgLSBUaGUgSUQgb2YgdGhlIHVzZXIgdG8gZ2V0IHRoZSBiYW5uZXIgb2YuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYnVpbGRpbmcgb2YgdGhlIFVSTC5cbiAqIEByZXR1cm5zIFRoZSBsaW5rIHRvIHRoZSByZXNvdXJjZSBvciBgdW5kZWZpbmVkYCBpZiBubyBiYW5uZXIgaGFzIG5vdCBiZWVuIHNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJhbm5lclVybCh1c2VySWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IEltYWdlT3B0aW9ucyAmIHsgYmFubmVyPzogQmlnU3RyaW5nIH0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gb3B0aW9ucz8uYmFubmVyXG4gICAgPyBmb3JtYXRJbWFnZVVybChcbiAgICAgICAgYGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2Jhbm5lcnMvJHt1c2VySWR9LyR7dHlwZW9mIG9wdGlvbnMuYmFubmVyID09PSAnc3RyaW5nJyA/IG9wdGlvbnMuYmFubmVyIDogaWNvbkJpZ2ludFRvSGFzaChvcHRpb25zLmJhbm5lcil9YCxcbiAgICAgICAgb3B0aW9ucz8uc2l6ZSA/PyAxMjgsXG4gICAgICAgIG9wdGlvbnM/LmZvcm1hdCxcbiAgICAgIClcbiAgICA6IHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIEJ1aWxkcyBhIFVSTCB0byB0aGUgZ3VpbGQgYmFubmVyIHN0b3JlZCBpbiB0aGUgRGlzY29yZCBDRE4uXG4gKlxuICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbGluayB0byB0aGUgYmFubmVyIGZvci5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBidWlsZGluZyBvZiB0aGUgVVJMLlxuICogQHJldHVybnMgVGhlIGxpbmsgdG8gdGhlIHJlc291cmNlIG9yIGB1bmRlZmluZWRgIGlmIG5vIGJhbm5lciBoYXMgYmVlbiBzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBndWlsZEJhbm5lclVybChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEltYWdlT3B0aW9ucyAmIHsgYmFubmVyPzogQmlnU3RyaW5nIH0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gb3B0aW9ucy5iYW5uZXJcbiAgICA/IGZvcm1hdEltYWdlVXJsKFxuICAgICAgICBgaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vYmFubmVycy8ke2d1aWxkSWR9LyR7dHlwZW9mIG9wdGlvbnMuYmFubmVyID09PSAnc3RyaW5nJyA/IG9wdGlvbnMuYmFubmVyIDogaWNvbkJpZ2ludFRvSGFzaChvcHRpb25zLmJhbm5lcil9YCxcbiAgICAgICAgb3B0aW9ucy5zaXplID8/IDEyOCxcbiAgICAgICAgb3B0aW9ucy5mb3JtYXQsXG4gICAgICApXG4gICAgOiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBVUkwgdG8gdGhlIGd1aWxkIGljb24gc3RvcmVkIGluIHRoZSBEaXNjb3JkIENETi5cbiAqXG4gKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBsaW5rIHRvIHRoZSBiYW5uZXIgZm9yLlxuICogQHBhcmFtIGltYWdlSGFzaCAtIFRoZSBoYXNoIGlkZW50aWZ5aW5nIHRoZSBldmVudCBjb3ZlciBpbWFnZS5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBidWlsZGluZyBvZiB0aGUgVVJMLlxuICogQHJldHVybnMgVGhlIGxpbmsgdG8gdGhlIHJlc291cmNlIG9yIGB1bmRlZmluZWRgIGlmIG5vIGJhbm5lciBoYXMgYmVlbiBzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBndWlsZEljb25VcmwoZ3VpbGRJZDogQmlnU3RyaW5nLCBpbWFnZUhhc2g6IEJpZ1N0cmluZyB8IHVuZGVmaW5lZCwgb3B0aW9ucz86IEltYWdlT3B0aW9ucyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBpbWFnZUhhc2hcbiAgICA/IGZvcm1hdEltYWdlVXJsKFxuICAgICAgICBgaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vaWNvbnMvJHtndWlsZElkfS8ke3R5cGVvZiBpbWFnZUhhc2ggPT09ICdzdHJpbmcnID8gaW1hZ2VIYXNoIDogaWNvbkJpZ2ludFRvSGFzaChpbWFnZUhhc2gpfWAsXG4gICAgICAgIG9wdGlvbnM/LnNpemUgPz8gMTI4LFxuICAgICAgICBvcHRpb25zPy5mb3JtYXQsXG4gICAgICApXG4gICAgOiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIFVSTCB0byBhIGd1aWxkIHNwbGFzaCBzdG9yZWQgaW4gdGhlIERpc2NvcmQgQ0ROLlxuICpcbiAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHNwbGFzaCBvZi5cbiAqIEBwYXJhbSBpbWFnZUhhc2ggLSBUaGUgaGFzaCBpZGVudGlmeWluZyB0aGUgc3BsYXNoIGltYWdlLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGJ1aWxkaW5nIG9mIHRoZSBVUkwuXG4gKiBAcmV0dXJucyBUaGUgbGluayB0byB0aGUgcmVzb3VyY2Ugb3IgYHVuZGVmaW5lZGAgaWYgdGhlIGd1aWxkIGRvZXMgbm90IGhhdmUgYSBzcGxhc2ggaW1hZ2Ugc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3VpbGRTcGxhc2hVcmwoZ3VpbGRJZDogQmlnU3RyaW5nLCBpbWFnZUhhc2g6IEJpZ1N0cmluZyB8IHVuZGVmaW5lZCwgb3B0aW9ucz86IEltYWdlT3B0aW9ucyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBpbWFnZUhhc2hcbiAgICA/IGZvcm1hdEltYWdlVXJsKFxuICAgICAgICBgaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vc3BsYXNoZXMvJHtndWlsZElkfS8ke3R5cGVvZiBpbWFnZUhhc2ggPT09ICdzdHJpbmcnID8gaW1hZ2VIYXNoIDogaWNvbkJpZ2ludFRvSGFzaChpbWFnZUhhc2gpfWAsXG4gICAgICAgIG9wdGlvbnM/LnNpemUgPz8gMTI4LFxuICAgICAgICBvcHRpb25zPy5mb3JtYXQsXG4gICAgICApXG4gICAgOiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIFVSTCB0byBhIGd1aWxkIGRpc2NvdmVyeSBzcGxhc2ggc3RvcmVkIGluIHRoZSBEaXNjb3JkIENETi5cbiAqXG4gKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBzcGxhc2ggb2YuXG4gKiBAcGFyYW0gaW1hZ2VIYXNoIC0gVGhlIGhhc2ggaWRlbnRpZnlpbmcgdGhlIGRpc2NvdmVyeSBzcGxhc2ggaW1hZ2UuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYnVpbGRpbmcgb2YgdGhlIFVSTC5cbiAqIEByZXR1cm5zIFRoZSBsaW5rIHRvIHRoZSByZXNvdXJjZSBvciBgdW5kZWZpbmVkYCBpZiB0aGUgZ3VpbGQgZG9lcyBub3QgaGF2ZSBhIHNwbGFzaCBpbWFnZSBzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBndWlsZERpc2NvdmVyeVNwbGFzaFVybChndWlsZElkOiBCaWdTdHJpbmcsIGltYWdlSGFzaDogQmlnU3RyaW5nIHwgdW5kZWZpbmVkLCBvcHRpb25zPzogSW1hZ2VPcHRpb25zKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGltYWdlSGFzaFxuICAgID8gZm9ybWF0SW1hZ2VVcmwoXG4gICAgICAgIGBodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9kaXNjb3Zlcnktc3BsYXNoZXMvJHtndWlsZElkfS8ke3R5cGVvZiBpbWFnZUhhc2ggPT09ICdzdHJpbmcnID8gaW1hZ2VIYXNoIDogaWNvbkJpZ2ludFRvSGFzaChpbWFnZUhhc2gpfWAsXG4gICAgICAgIG9wdGlvbnM/LnNpemUgPz8gMTI4LFxuICAgICAgICBvcHRpb25zPy5mb3JtYXQsXG4gICAgICApXG4gICAgOiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIFVSTCB0byBhIGd1aWxkIHNjaGVkdWxlZCBldmVudCBjb3ZlciBzdG9yZWQgaW4gdGhlIERpc2NvcmQgQ0ROLlxuICpcbiAqIEBwYXJhbSBldmVudElkIC0gVGhlIElEIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQgdG8gZ2V0IHRoZSBjb3ZlciBvZi5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBidWlsZGluZyBvZiB0aGUgVVJMLlxuICogQHJldHVybnMgVGhlIGxpbmsgdG8gdGhlIHJlc291cmNlIG9yIGB1bmRlZmluZWRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3VpbGRTY2hlZHVsZWRFdmVudENvdmVyVXJsKGV2ZW50SWQ6IEJpZ1N0cmluZywgb3B0aW9uczogSW1hZ2VPcHRpb25zICYgeyBjb3Zlcj86IEJpZ1N0cmluZyB9KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIG9wdGlvbnMuY292ZXJcbiAgICA/IGZvcm1hdEltYWdlVXJsKFxuICAgICAgICBgaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vZ3VpbGQtZXZlbnRzLyR7ZXZlbnRJZH0vJHt0eXBlb2Ygb3B0aW9ucy5jb3ZlciA9PT0gJ3N0cmluZycgPyBvcHRpb25zLmNvdmVyIDogaWNvbkJpZ2ludFRvSGFzaChvcHRpb25zLmNvdmVyKX1gLFxuICAgICAgICBvcHRpb25zLnNpemUgPz8gMTI4LFxuICAgICAgICBvcHRpb25zLmZvcm1hdCxcbiAgICAgIClcbiAgICA6IHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIEJ1aWxkcyBhIFVSTCB0byB0aGUgZ3VpbGQgd2lkZ2V0IGltYWdlIHN0b3JlZCBpbiB0aGUgRGlzY29yZCBDRE4uXG4gKlxuICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbGluayB0byB0aGUgd2lkZ2V0IGltYWdlIGZvci5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBidWlsZGluZyBvZiB0aGUgVVJMLlxuICogQHJldHVybnMgVGhlIGxpbmsgdG8gdGhlIHJlc291cmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2lkZ2V0SW1hZ2VVcmwoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogR2V0R3VpbGRXaWRnZXRJbWFnZVF1ZXJ5KTogc3RyaW5nIHtcbiAgbGV0IHVybCA9IGBodHRwczovL2Rpc2NvcmRhcHAuY29tL2FwaS9ndWlsZHMvJHtndWlsZElkfS93aWRnZXQucG5nYFxuXG4gIGlmIChvcHRpb25zPy5zdHlsZSkge1xuICAgIHVybCArPSBgP3N0eWxlPSR7b3B0aW9ucy5zdHlsZX1gXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbi8qKlxuICogQnVpbGRzIGEgVVJMIHRvIGEgbWVtYmVyJ3MgYXZhdGFyIHN0b3JlZCBpbiB0aGUgRGlzY29yZCBDRE4uXG4gKlxuICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHdoZXJlIHRoZSBtZW1iZXIgaXNcbiAqIEBwYXJhbSB1c2VySWQgLSBUaGUgSUQgb2YgdGhlIHVzZXIgdG8gZ2V0IHRoZSBhdmF0YXIgb2YuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYnVpbGRpbmcgb2YgdGhlIFVSTC5cbiAqIEByZXR1cm5zIFRoZSBsaW5rIHRvIHRoZSByZXNvdXJjZSBvciBgdW5kZWZpbmVkYCBpZiBubyBiYW5uZXIgaGFzIGJlZW4gc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVtYmVyQXZhdGFyVXJsKGd1aWxkSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBJbWFnZU9wdGlvbnMgJiB7IGF2YXRhcj86IEJpZ1N0cmluZyB9KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIG9wdGlvbnM/LmF2YXRhclxuICAgID8gZm9ybWF0SW1hZ2VVcmwoXG4gICAgICAgIGBodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9ndWlsZHMvJHtndWlsZElkfS91c2Vycy8ke3VzZXJJZH0vYXZhdGFycy8ke1xuICAgICAgICAgIHR5cGVvZiBvcHRpb25zLmF2YXRhciA9PT0gJ3N0cmluZycgPyBvcHRpb25zLmF2YXRhciA6IGljb25CaWdpbnRUb0hhc2gob3B0aW9ucy5hdmF0YXIpXG4gICAgICAgIH1gLFxuICAgICAgICBvcHRpb25zPy5zaXplID8/IDEyOCxcbiAgICAgICAgb3B0aW9ucz8uZm9ybWF0LFxuICAgICAgKVxuICAgIDogdW5kZWZpbmVkXG59XG5cbi8qKlxuICogQnVpbGRzIGEgVVJMIHRvIGEgbWVtYmVyJ3MgYmFubmVyIHN0b3JlZCBpbiB0aGUgRGlzY29yZCBDRE4uXG4gKlxuICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHdoZXJlIHRoZSBtZW1iZXIgaXNcbiAqIEBwYXJhbSB1c2VySWQgLSBUaGUgSUQgb2YgdGhlIHVzZXIgdG8gZ2V0IHRoZSBiYW5uZXIgb2YuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYnVpbGRpbmcgb2YgdGhlIFVSTC5cbiAqIEByZXR1cm5zIFRoZSBsaW5rIHRvIHRoZSByZXNvdXJjZSBvciBgdW5kZWZpbmVkYCBpZiBubyBiYW5uZXIgaGFzIGJlZW4gc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVtYmVyQmFubmVyVXJsKGd1aWxkSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBJbWFnZU9wdGlvbnMgJiB7IGJhbm5lcj86IEJpZ1N0cmluZyB9KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIG9wdGlvbnM/LmJhbm5lclxuICAgID8gZm9ybWF0SW1hZ2VVcmwoXG4gICAgICAgIGBodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9ndWlsZHMvJHtndWlsZElkfS91c2Vycy8ke3VzZXJJZH0vYmFubmVycy8ke1xuICAgICAgICAgIHR5cGVvZiBvcHRpb25zLmJhbm5lciA9PT0gJ3N0cmluZycgPyBvcHRpb25zLmJhbm5lciA6IGljb25CaWdpbnRUb0hhc2gob3B0aW9ucy5iYW5uZXIpXG4gICAgICAgIH1gLFxuICAgICAgICBvcHRpb25zPy5zaXplID8/IDEyOCxcbiAgICAgICAgb3B0aW9ucz8uZm9ybWF0LFxuICAgICAgKVxuICAgIDogdW5kZWZpbmVkXG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBVUkwgdG8gYW4gYXBwbGljYXRpb24gaWNvbiBzdG9yZWQgaW4gdGhlIERpc2NvcmQgQ0ROLlxuICpcbiAqIEBwYXJhbSBhcHBsaWNhdGlvbklkIC0gVGhlIElEIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBnZXQgdGhlIGljb24gb2YuXG4gKiBAcGFyYW0gaWNvbkhhc2ggLSBUaGUgaGFzaCBpZGVudGlmeWluZyB0aGUgYXBwbGljYXRpb24gaWNvbi5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBidWlsZGluZyBvZiB0aGUgVVJMLlxuICogQHJldHVybnMgVGhlIGxpbmsgdG8gdGhlIHJlc291cmNlIG9yIGB1bmRlZmluZWRgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBsaWNhdGlvbkljb25VcmwoYXBwbGljYXRpb25JZDogQmlnU3RyaW5nLCBpY29uSGFzaDogQmlnU3RyaW5nIHwgdW5kZWZpbmVkLCBvcHRpb25zPzogSW1hZ2VPcHRpb25zKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGljb25IYXNoXG4gICAgPyBmb3JtYXRJbWFnZVVybChcbiAgICAgICAgYGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2FwcC1pY29ucy8ke2FwcGxpY2F0aW9uSWR9LyR7dHlwZW9mIGljb25IYXNoID09PSAnc3RyaW5nJyA/IGljb25IYXNoIDogaWNvbkJpZ2ludFRvSGFzaChpY29uSGFzaCl9YCxcbiAgICAgICAgb3B0aW9ucz8uc2l6ZSA/PyAxMjgsXG4gICAgICAgIG9wdGlvbnM/LmZvcm1hdCxcbiAgICAgIClcbiAgICA6IHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgVVJMIHRvIGFuIGFwcGxpY2F0aW9uIGNvdmVyIHN0b3JlZCBpbiB0aGUgRGlzY29yZCBDRE4uXG4gKlxuICogQHBhcmFtIGFwcGxpY2F0aW9uSWQgLSBUaGUgSUQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGdldCB0aGUgY292ZXIgb2YuXG4gKiBAcGFyYW0gY292ZXJIYXNoIC0gVGhlIGhhc2ggaWRlbnRpZnlpbmcgdGhlIGFwcGxpY2F0aW9uIGNvdmVyLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGJ1aWxkaW5nIG9mIHRoZSBVUkwuXG4gKiBAcmV0dXJucyBUaGUgbGluayB0byB0aGUgcmVzb3VyY2Ugb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBsaWNhdGlvbkNvdmVyVXJsKGFwcGxpY2F0aW9uSWQ6IEJpZ1N0cmluZywgY292ZXJIYXNoOiBCaWdTdHJpbmcgfCB1bmRlZmluZWQsIG9wdGlvbnM/OiBJbWFnZU9wdGlvbnMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gY292ZXJIYXNoXG4gICAgPyBmb3JtYXRJbWFnZVVybChcbiAgICAgICAgYGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2FwcC1pY29ucy8ke2FwcGxpY2F0aW9uSWR9LyR7dHlwZW9mIGNvdmVySGFzaCA9PT0gJ3N0cmluZycgPyBjb3Zlckhhc2ggOiBpY29uQmlnaW50VG9IYXNoKGNvdmVySGFzaCl9YCxcbiAgICAgICAgb3B0aW9ucz8uc2l6ZSA/PyAxMjgsXG4gICAgICAgIG9wdGlvbnM/LmZvcm1hdCxcbiAgICAgIClcbiAgICA6IHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgVVJMIHRvIGFuIGFwcGxpY2F0aW9uIGFzc2V0IHN0b3JlZCBpbiB0aGUgRGlzY29yZCBDRE4uXG4gKlxuICogQHBhcmFtIGFwcGxpY2F0aW9uSWQgLSBUaGUgSUQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGdldCB0aGUgYXNzZXQgb2YuXG4gKiBAcGFyYW0gYXNzZXRJZCAtIFRoZSBpZCBpZGVudGlmeWluZyB0aGUgYXBwbGljYXRpb24gYXNzZXQuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYnVpbGRpbmcgb2YgdGhlIFVSTC5cbiAqIEByZXR1cm5zIFRoZSBsaW5rIHRvIHRoZSByZXNvdXJjZSBvciBgdW5kZWZpbmVkYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGxpY2F0aW9uQXNzZXRVcmwoYXBwbGljYXRpb25JZDogQmlnU3RyaW5nLCBhc3NldElkOiBCaWdTdHJpbmcgfCB1bmRlZmluZWQsIG9wdGlvbnM/OiBJbWFnZU9wdGlvbnMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gYXNzZXRJZFxuICAgID8gZm9ybWF0SW1hZ2VVcmwoXG4gICAgICAgIGBodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9hcHAtaWNvbnMvJHthcHBsaWNhdGlvbklkfS8ke3R5cGVvZiBhc3NldElkID09PSAnc3RyaW5nJyA/IGFzc2V0SWQgOiBpY29uQmlnaW50VG9IYXNoKGFzc2V0SWQpfWAsXG4gICAgICAgIG9wdGlvbnM/LnNpemUgPz8gMTI4LFxuICAgICAgICBvcHRpb25zPy5mb3JtYXQsXG4gICAgICApXG4gICAgOiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIFVSTCB0byBhIHN0aWNrZXIgcGFjayBiYW5uZXIgc3RvcmVkIGluIHRoZSBEaXNjb3JkIENETi5cbiAqXG4gKiBAcGFyYW0gYmFubmVyQXNzZXRJZCAtIFRoZSBJRCBvZiB0aGUgYmFubmVyIGFzc2V0IGZvciB0aGUgc3RpY2tlciBwYWNrLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGJ1aWxkaW5nIG9mIHRoZSBVUkwuXG4gKiBAcmV0dXJucyBUaGUgbGluayB0byB0aGUgcmVzb3VyY2Ugb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGlja2VyUGFja0Jhbm5lclVybChiYW5uZXJBc3NldElkOiBCaWdTdHJpbmcgfCB1bmRlZmluZWQsIG9wdGlvbnM/OiBJbWFnZU9wdGlvbnMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gYmFubmVyQXNzZXRJZFxuICAgID8gZm9ybWF0SW1hZ2VVcmwoXG4gICAgICAgIGBodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9hcHAtYXNzZXRzLzcxMDk4MjQxNDMwMTc5MDIxNi9zdG9yZS8ke1xuICAgICAgICAgIHR5cGVvZiBiYW5uZXJBc3NldElkID09PSAnc3RyaW5nJyA/IGJhbm5lckFzc2V0SWQgOiBpY29uQmlnaW50VG9IYXNoKGJhbm5lckFzc2V0SWQpXG4gICAgICAgIH1gLFxuICAgICAgICBvcHRpb25zPy5zaXplID8/IDEyOCxcbiAgICAgICAgb3B0aW9ucz8uZm9ybWF0LFxuICAgICAgKVxuICAgIDogdW5kZWZpbmVkXG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBVUkwgdG8gYSBzdGlja2VyIHN0b3JlZCBpbiB0aGUgRGlzY29yZCBDRE4uXG4gKlxuICogQHBhcmFtIHN0aWNrZXJJZCAtIFRoZSBJRCBvZiB0aGUgc3RpY2tlciB0byBnZXQgdGhlIGljb24gb2ZcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBidWlsZGluZyBvZiB0aGUgVVJMLlxuICogQHJldHVybnMgVGhlIGxpbmsgdG8gdGhlIHJlc291cmNlIG9yIGB1bmRlZmluZWRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RpY2tlclVybChzdGlja2VySWQ6IEJpZ1N0cmluZyB8IG51bWJlciwgb3B0aW9ucz86IEltYWdlT3B0aW9ucyAmIHsgdHlwZT86IFN0aWNrZXJGb3JtYXRUeXBlcyB9KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFzdGlja2VySWQpIHJldHVyblxuXG4gIGNvbnN0IHVybCA9XG4gICAgb3B0aW9ucz8udHlwZSA9PT0gU3RpY2tlckZvcm1hdFR5cGVzLkdpZlxuICAgICAgPyBgaHR0cHM6Ly9tZWRpYS5kaXNjb3JkYXBwLm5ldC9zdGlja2Vycy8ke3N0aWNrZXJJZH1gXG4gICAgICA6IGBodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9zdGlja2Vycy8ke3N0aWNrZXJJZH1gXG5cbiAgcmV0dXJuIGZvcm1hdEltYWdlVXJsKHVybCwgb3B0aW9ucz8uc2l6ZSA/PyAxMjgsIG9wdGlvbnM/LmZvcm1hdClcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIFVSTCB0byBhIHRlYW0gaWNvbiBzdG9yZWQgaW4gdGhlIERpc2NvcmQgQ0ROLlxuICpcbiAqIEBwYXJhbSB0ZWFtSWQgLSBUaGUgSUQgb2YgdGhlIHRlYW0gdG8gZ2V0IHRoZSBpY29uIG9mXG4gKiBAcGFyYW0gaWNvbkhhc2ggLSBUaGUgaGFzaCBvZiB0aGUgdGVhbSBpY29uLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGJ1aWxkaW5nIG9mIHRoZSBVUkwuXG4gKiBAcmV0dXJucyBUaGUgbGluayB0byB0aGUgcmVzb3VyY2Ugb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZWFtSWNvblVybCh0ZWFtSWQ6IEJpZ1N0cmluZywgaWNvbkhhc2g6IEJpZ1N0cmluZyB8IHVuZGVmaW5lZCwgb3B0aW9ucz86IEltYWdlT3B0aW9ucyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBpY29uSGFzaFxuICAgID8gZm9ybWF0SW1hZ2VVcmwoXG4gICAgICAgIGBodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS90ZWFtLWljb25zLyR7dGVhbUlkfS9zdG9yZS8ke3R5cGVvZiBpY29uSGFzaCA9PT0gJ3N0cmluZycgPyBpY29uSGFzaCA6IGljb25CaWdpbnRUb0hhc2goaWNvbkhhc2gpfWAsXG4gICAgICAgIG9wdGlvbnM/LnNpemUgPz8gMTI4LFxuICAgICAgICBvcHRpb25zPy5mb3JtYXQsXG4gICAgICApXG4gICAgOiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIFVSTCB0byBhIHJvbGUgaWNvbiBzdG9yZWQgaW4gdGhlIERpc2NvcmQgQ0ROLlxuICpcbiAqIEBwYXJhbSByb2xlSWQgLSBUaGUgSUQgb2YgdGhlIHJvbGUgdG8gZ2V0IHRoZSBpY29uIG9mXG4gKiBAcGFyYW0gaWNvbkhhc2ggLSBUaGUgaGFzaCBvZiB0aGUgcm9sZSBpY29uLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGJ1aWxkaW5nIG9mIHRoZSBVUkwuXG4gKiBAcmV0dXJucyBUaGUgbGluayB0byB0aGUgcmVzb3VyY2Ugb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb2xlSWNvblVybChyb2xlSWQ6IEJpZ1N0cmluZywgaWNvbkhhc2g6IEJpZ1N0cmluZyB8IHVuZGVmaW5lZCwgb3B0aW9ucz86IEltYWdlT3B0aW9ucyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBpY29uSGFzaFxuICAgID8gZm9ybWF0SW1hZ2VVcmwoXG4gICAgICAgIGBodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9yb2xlLWljb25zLyR7cm9sZUlkfS8ke3R5cGVvZiBpY29uSGFzaCA9PT0gJ3N0cmluZycgPyBpY29uSGFzaCA6IGljb25CaWdpbnRUb0hhc2goaWNvbkhhc2gpfWAsXG4gICAgICAgIG9wdGlvbnM/LnNpemUgPz8gMTI4LFxuICAgICAgICBvcHRpb25zPy5mb3JtYXQsXG4gICAgICApXG4gICAgOiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIFVSTCB0byBhIGd1aWxkIHRhZyBiYWRnZSBzdG9yZWQgaW4gdGhlIERpc2NvcmQgQ0ROLlxuICpcbiAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHRhZyBiYWRnZSBvZlxuICogQHBhcmFtIGJhZGdlSGFzaCAtIFRoZSBoYXNoIGlkZW50aWZ5aW5nIHRoZSBndWlsZCB0YWcgYmFkZ2UuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYnVpbGRpbmcgb2YgdGhlIFVSTC5cbiAqIEByZXR1cm5zIFRoZSBsaW5rIHRvIHRoZSByZXNvdXJjZSBvciBgdW5kZWZpbmVkYCBpZiBubyBiYWRnZSBoYXMgYmVlbiBzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBndWlsZFRhZ0JhZGdlVXJsKGd1aWxkSWQ6IEJpZ1N0cmluZywgYmFkZ2VIYXNoOiBCaWdTdHJpbmcgfCB1bmRlZmluZWQsIG9wdGlvbnM/OiBJbWFnZU9wdGlvbnMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoYmFkZ2VIYXNoID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWRcblxuICByZXR1cm4gZm9ybWF0SW1hZ2VVcmwoYGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2d1aWxkLXRhZy1iYWRnZXMvJHtndWlsZElkfS8ke2JhZGdlSGFzaH1gLCBvcHRpb25zPy5zaXplID8/IDEyOCwgb3B0aW9ucz8uZm9ybWF0KVxufVxuIl0sIm5hbWVzIjpbIlN0aWNrZXJGb3JtYXRUeXBlcyIsImljb25CaWdpbnRUb0hhc2giLCJmb3JtYXRJbWFnZVVybCIsInVybCIsInNpemUiLCJmb3JtYXQiLCJpbmNsdWRlcyIsImVtb2ppVXJsIiwiZW1vamlJZCIsImFuaW1hdGVkIiwiYXZhdGFyVXJsIiwidXNlcklkIiwiYXZhdGFyIiwib3B0aW9ucyIsImRlZmF1bHRBdmF0YXJVcmwiLCJkaXNjcmltaW5hdG9yIiwiaXNMZWdhY3kiLCJpbmRleCIsIkJpZ0ludCIsIk51bWJlciIsImRpc3BsYXlBdmF0YXJVcmwiLCJhdmF0YXJEZWNvcmF0aW9uVXJsIiwiYXZhdGFyRGVjb3JhdGlvbiIsImJhbm5lclVybCIsImJhbm5lciIsInVuZGVmaW5lZCIsImd1aWxkQmFubmVyVXJsIiwiZ3VpbGRJZCIsImd1aWxkSWNvblVybCIsImltYWdlSGFzaCIsImd1aWxkU3BsYXNoVXJsIiwiZ3VpbGREaXNjb3ZlcnlTcGxhc2hVcmwiLCJndWlsZFNjaGVkdWxlZEV2ZW50Q292ZXJVcmwiLCJldmVudElkIiwiY292ZXIiLCJnZXRXaWRnZXRJbWFnZVVybCIsInN0eWxlIiwibWVtYmVyQXZhdGFyVXJsIiwibWVtYmVyQmFubmVyVXJsIiwiYXBwbGljYXRpb25JY29uVXJsIiwiYXBwbGljYXRpb25JZCIsImljb25IYXNoIiwiYXBwbGljYXRpb25Db3ZlclVybCIsImNvdmVySGFzaCIsImFwcGxpY2F0aW9uQXNzZXRVcmwiLCJhc3NldElkIiwic3RpY2tlclBhY2tCYW5uZXJVcmwiLCJiYW5uZXJBc3NldElkIiwic3RpY2tlclVybCIsInN0aWNrZXJJZCIsInR5cGUiLCJHaWYiLCJ0ZWFtSWNvblVybCIsInRlYW1JZCIsInJvbGVJY29uVXJsIiwicm9sZUlkIiwiZ3VpbGRUYWdCYWRnZVVybCIsImJhZGdlSGFzaCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBMEZBLGtCQUFrQixRQUFRLG9CQUFtQjtBQUN2SSxTQUFTQyxnQkFBZ0IsUUFBUSxZQUFXO0FBTzVDLDhCQUE4QixHQUM5QixPQUFPLFNBQVNDLGVBQWVDLEdBQVcsRUFBRUMsT0FBa0IsR0FBRyxFQUFFQyxNQUFvQjtJQUNyRixPQUFPLEdBQUdGLElBQUksQ0FBQyxFQUFFRSxVQUFXRixDQUFBQSxJQUFJRyxRQUFRLENBQUMsU0FBUyxRQUFRLE1BQUssRUFBRyxNQUFNLEVBQUVGLE1BQU07QUFDbEY7QUFFQTs7Ozs7Ozs7OztDQVVDLEdBQ0QsT0FBTyxTQUFTRyxTQUFTQyxPQUFrQixFQUFFQyxXQUFXLEtBQUssRUFBRUosU0FBc0IsS0FBSztJQUN4RixPQUFPLENBQUMsa0NBQWtDLEVBQUVHLFFBQVEsQ0FBQyxFQUFFQyxXQUFZSixXQUFXLFNBQVMsU0FBUyxRQUFTQSxTQUFTSSxZQUFZSixXQUFXLFNBQVMsbUJBQW1CLElBQUk7QUFDM0s7QUFFQTs7Ozs7OztDQU9DLEdBQ0QsT0FBTyxTQUFTSyxVQUFVQyxNQUFpQixFQUFFQyxNQUFpQixFQUFFQyxPQUFzQjtJQUNwRixPQUFPWCxlQUNMLENBQUMsbUNBQW1DLEVBQUVTLE9BQU8sQ0FBQyxFQUFFLE9BQU9DLFdBQVcsV0FBV0EsU0FBU1gsaUJBQWlCVyxTQUFTLEVBQ2hIQyxTQUFTVCxRQUFRLEtBQ2pCUyxTQUFTUjtBQUViO0FBRUE7Ozs7OztDQU1DLEdBQ0QsT0FBTyxTQUFTUyxpQkFBaUJILE1BQWlCLEVBQUVJLGFBQXFCO0lBQ3ZFLE1BQU1D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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@discordeno/utils",
3
- "version": "22.0.1-next.8b9930f",
3
+ "version": "22.0.1-next.8d90f28",
4
4
  "exports": "./dist/index.js",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -17,29 +17,27 @@
17
17
  "build:type": "tsc --declaration --emitDeclarationOnly --declarationDir dist",
18
18
  "release-build": "yarn build && yarn build:type",
19
19
  "check": "biome check --write",
20
- "test:unit-coverage": "c8 mocha --no-warnings 'tests/**/*.spec.ts'",
21
- "test:unit": "c8 --r lcov mocha --no-warnings 'tests/**/*.spec.ts' && node ../../scripts/coveragePathFixing.js utils",
22
- "test:unit:watch": "mocha --no-warnings --watch --parallel 'tests/**/*.spec.ts'",
23
- "test:deno-unit": "deno -A ../../node_modules/mocha/bin/mocha.js --config ../../.mocharc.base.cjs 'tests/**/*.spec.ts'",
24
- "test:bun-unit": "bun ../../node_modules/mocha/bin/mocha.js --config ../../.mocharc.base.cjs 'tests/**/*.spec.ts'",
25
- "test:type": "tsc --noEmit",
26
- "test:test-type": "tsc --project tests/tsconfig.json"
20
+ "test:unit": "c8 -r lcov mocha 'tests/**/*.spec.ts' && node ../../scripts/coveragePathFixing.js utils",
21
+ "test:deno-unit": "deno -A npm:mocha 'tests/**/*.spec.ts'",
22
+ "test:bun-unit": "bun --bun mocha 'tests/**/*.spec.ts'",
23
+ "test:test-type": "tsc --project tests/tsconfig.json",
24
+ "test:type": "tsc --noEmit"
27
25
  },
28
26
  "dependencies": {
29
- "@discordeno/types": "22.0.1-next.8b9930f"
27
+ "@discordeno/types": "22.0.1-next.8d90f28"
30
28
  },
31
29
  "devDependencies": {
32
- "@biomejs/biome": "2.3.8",
30
+ "@biomejs/biome": "2.3.11",
33
31
  "@swc/cli": "^0.7.9",
34
- "@swc/core": "^1.15.5",
32
+ "@swc/core": "^1.15.8",
35
33
  "@types/chai": "^5.2.3",
36
34
  "@types/mocha": "^10.0.10",
37
- "@types/node": "^25.0.2",
35
+ "@types/node": "^25.0.3",
38
36
  "@types/sinon": "^21.0.0",
39
37
  "c8": "^10.1.3",
40
- "chai": "^6.2.1",
38
+ "chai": "^6.2.2",
41
39
  "mocha": "^11.7.5",
42
- "sinon": "^21.0.0",
40
+ "sinon": "^21.0.1",
43
41
  "ts-node": "^10.9.2",
44
42
  "tsconfig": "*",
45
43
  "typescript": "^5.9.3"