@discordeno/bot 22.0.1-next.cf5ba2a → 22.0.1-next.d2ab042

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.
Files changed (210) hide show
  1. package/dist/bot.d.ts +3 -3
  2. package/dist/bot.d.ts.map +1 -1
  3. package/dist/bot.js +3 -2
  4. package/dist/constants.d.ts.map +1 -1
  5. package/dist/constants.js +2 -2
  6. package/dist/desiredProperties.d.ts +114 -92
  7. package/dist/desiredProperties.d.ts.map +1 -1
  8. package/dist/desiredProperties.js +288 -1
  9. package/dist/events.d.ts +32 -17
  10. package/dist/events.d.ts.map +1 -1
  11. package/dist/events.js +1 -1
  12. package/dist/handlers/channels/THREAD_MEMBERS_UPDATE.js +2 -2
  13. package/dist/handlers/guilds/automod/AUTO_MODERATION_ACTION_EXECUTION.js +2 -2
  14. package/dist/handlers/guilds/automod/AUTO_MODERATION_RULE_CREATE.js +2 -2
  15. package/dist/handlers/guilds/automod/AUTO_MODERATION_RULE_DELETE.js +2 -2
  16. package/dist/handlers/guilds/automod/AUTO_MODERATION_RULE_UPDATE.js +2 -2
  17. package/dist/handlers/interactions/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +2 -2
  18. package/dist/handlers/invites/INVITE_CREATE.d.ts.map +1 -1
  19. package/dist/handlers/invites/INVITE_CREATE.js +20 -4
  20. package/dist/handlers/invites/INVITE_DELETE.d.ts.map +1 -1
  21. package/dist/handlers/invites/INVITE_DELETE.js +4 -4
  22. package/dist/handlers/members/GUILD_MEMBER_UPDATE.d.ts.map +1 -1
  23. package/dist/handlers/members/GUILD_MEMBER_UPDATE.js +4 -4
  24. package/dist/handlers/messages/MESSAGE_REACTION_ADD.d.ts.map +1 -1
  25. package/dist/handlers/messages/MESSAGE_REACTION_ADD.js +4 -3
  26. package/dist/handlers/messages/MESSAGE_REACTION_REMOVE.d.ts.map +1 -1
  27. package/dist/handlers/messages/MESSAGE_REACTION_REMOVE.js +4 -3
  28. package/dist/handlers/messages/MESSAGE_REACTION_REMOVE_EMOJI.d.ts.map +1 -1
  29. package/dist/handlers/messages/MESSAGE_REACTION_REMOVE_EMOJI.js +4 -3
  30. package/dist/helpers.d.ts +60 -44
  31. package/dist/helpers.d.ts.map +1 -1
  32. package/dist/helpers.js +73 -25
  33. package/dist/transformers/activity.d.ts +17 -5
  34. package/dist/transformers/activity.d.ts.map +1 -1
  35. package/dist/transformers/activity.js +55 -37
  36. package/dist/transformers/application.d.ts +3 -3
  37. package/dist/transformers/application.d.ts.map +1 -1
  38. package/dist/transformers/application.js +55 -41
  39. package/dist/transformers/applicationCommand.d.ts +3 -2
  40. package/dist/transformers/applicationCommand.d.ts.map +1 -1
  41. package/dist/transformers/applicationCommand.js +19 -17
  42. package/dist/transformers/applicationCommandOption.d.ts +3 -2
  43. package/dist/transformers/applicationCommandOption.d.ts.map +1 -1
  44. package/dist/transformers/applicationCommandOption.js +22 -19
  45. package/dist/transformers/applicationCommandOptionChoice.d.ts +3 -2
  46. package/dist/transformers/applicationCommandOptionChoice.d.ts.map +1 -1
  47. package/dist/transformers/applicationCommandOptionChoice.js +10 -8
  48. package/dist/transformers/applicationCommandPermission.d.ts +7 -3
  49. package/dist/transformers/applicationCommandPermission.d.ts.map +1 -1
  50. package/dist/transformers/applicationCommandPermission.js +20 -13
  51. package/dist/transformers/attachment.d.ts +3 -1
  52. package/dist/transformers/attachment.d.ts.map +1 -1
  53. package/dist/transformers/attachment.js +12 -4
  54. package/dist/transformers/auditLogEntry.d.ts +7 -3
  55. package/dist/transformers/auditLogEntry.d.ts.map +1 -1
  56. package/dist/transformers/auditLogEntry.js +32 -25
  57. package/dist/transformers/automodActionExecution.d.ts +10 -3
  58. package/dist/transformers/automodActionExecution.d.ts.map +1 -1
  59. package/dist/transformers/automodActionExecution.js +35 -23
  60. package/dist/transformers/automodRule.d.ts +7 -3
  61. package/dist/transformers/automodRule.d.ts.map +1 -1
  62. package/dist/transformers/automodRule.js +30 -30
  63. package/dist/transformers/avatarDecorationData.d.ts +3 -2
  64. package/dist/transformers/avatarDecorationData.d.ts.map +1 -1
  65. package/dist/transformers/avatarDecorationData.js +6 -3
  66. package/dist/transformers/channel.d.ts +6 -3
  67. package/dist/transformers/channel.d.ts.map +1 -1
  68. package/dist/transformers/channel.js +14 -9
  69. package/dist/transformers/component.d.ts +9 -4
  70. package/dist/transformers/component.d.ts.map +1 -1
  71. package/dist/transformers/component.js +200 -33
  72. package/dist/transformers/embed.d.ts +16 -3
  73. package/dist/transformers/embed.d.ts.map +1 -1
  74. package/dist/transformers/embed.js +71 -42
  75. package/dist/transformers/emoji.d.ts +7 -3
  76. package/dist/transformers/emoji.d.ts.map +1 -1
  77. package/dist/transformers/emoji.js +10 -5
  78. package/dist/transformers/entitlement.d.ts +3 -2
  79. package/dist/transformers/entitlement.d.ts.map +1 -1
  80. package/dist/transformers/entitlement.js +6 -3
  81. package/dist/transformers/gatewayBot.d.ts +7 -3
  82. package/dist/transformers/gatewayBot.d.ts.map +1 -1
  83. package/dist/transformers/gatewayBot.js +20 -13
  84. package/dist/transformers/guild.d.ts +3 -2
  85. package/dist/transformers/guild.d.ts.map +1 -1
  86. package/dist/transformers/guild.js +26 -34
  87. package/dist/transformers/incidentsData.d.ts +3 -2
  88. package/dist/transformers/incidentsData.d.ts.map +1 -1
  89. package/dist/transformers/incidentsData.js +6 -3
  90. package/dist/transformers/integration.d.ts +10 -3
  91. package/dist/transformers/integration.d.ts.map +1 -1
  92. package/dist/transformers/integration.js +43 -31
  93. package/dist/transformers/interaction.d.ts +20 -12
  94. package/dist/transformers/interaction.d.ts.map +1 -1
  95. package/dist/transformers/interaction.js +55 -33
  96. package/dist/transformers/invite.d.ts +4 -4
  97. package/dist/transformers/invite.d.ts.map +1 -1
  98. package/dist/transformers/invite.js +26 -23
  99. package/dist/transformers/lobby.d.ts +13 -4
  100. package/dist/transformers/lobby.d.ts.map +1 -1
  101. package/dist/transformers/lobby.js +35 -5
  102. package/dist/transformers/member.d.ts +3 -2
  103. package/dist/transformers/member.d.ts.map +1 -1
  104. package/dist/transformers/member.js +6 -3
  105. package/dist/transformers/message.d.ts +20 -10
  106. package/dist/transformers/message.d.ts.map +1 -1
  107. package/dist/transformers/message.js +52 -25
  108. package/dist/transformers/onboarding.d.ts +9 -4
  109. package/dist/transformers/onboarding.d.ts.map +1 -1
  110. package/dist/transformers/onboarding.js +17 -10
  111. package/dist/transformers/poll.d.ts +6 -3
  112. package/dist/transformers/poll.d.ts.map +1 -1
  113. package/dist/transformers/poll.js +14 -7
  114. package/dist/transformers/presence.d.ts +3 -2
  115. package/dist/transformers/presence.d.ts.map +1 -1
  116. package/dist/transformers/presence.js +10 -6
  117. package/dist/transformers/reverse/activity.d.ts +4 -3
  118. package/dist/transformers/reverse/activity.d.ts.map +1 -1
  119. package/dist/transformers/reverse/activity.js +20 -24
  120. package/dist/transformers/reverse/applicationCommand.js +2 -2
  121. package/dist/transformers/reverse/component.d.ts.map +1 -1
  122. package/dist/transformers/reverse/component.js +152 -11
  123. package/dist/transformers/reverse/embed.d.ts.map +1 -1
  124. package/dist/transformers/reverse/embed.js +19 -4
  125. package/dist/transformers/reverse/member.d.ts.map +1 -1
  126. package/dist/transformers/reverse/member.js +4 -2
  127. package/dist/transformers/reverse/presence.d.ts.map +1 -1
  128. package/dist/transformers/reverse/presence.js +3 -2
  129. package/dist/transformers/reverse/user.d.ts +5 -0
  130. package/dist/transformers/reverse/user.d.ts.map +1 -0
  131. package/dist/transformers/reverse/user.js +17 -0
  132. package/dist/transformers/role.d.ts +7 -4
  133. package/dist/transformers/role.d.ts.map +1 -1
  134. package/dist/transformers/role.js +11 -7
  135. package/dist/transformers/scheduledEvent.d.ts +6 -3
  136. package/dist/transformers/scheduledEvent.d.ts.map +1 -1
  137. package/dist/transformers/scheduledEvent.js +10 -5
  138. package/dist/transformers/sku.d.ts +3 -2
  139. package/dist/transformers/sku.d.ts.map +1 -1
  140. package/dist/transformers/sku.js +6 -3
  141. package/dist/transformers/soundboardSound.d.ts +3 -2
  142. package/dist/transformers/soundboardSound.d.ts.map +1 -1
  143. package/dist/transformers/soundboardSound.js +6 -3
  144. package/dist/transformers/stageInstance.d.ts +3 -2
  145. package/dist/transformers/stageInstance.d.ts.map +1 -1
  146. package/dist/transformers/stageInstance.js +6 -3
  147. package/dist/transformers/stageInviteInstance.d.ts +3 -3
  148. package/dist/transformers/stageInviteInstance.d.ts.map +1 -1
  149. package/dist/transformers/stageInviteInstance.js +10 -8
  150. package/dist/transformers/sticker.d.ts +6 -3
  151. package/dist/transformers/sticker.d.ts.map +1 -1
  152. package/dist/transformers/sticker.js +18 -14
  153. package/dist/transformers/subscription.d.ts +3 -2
  154. package/dist/transformers/subscription.d.ts.map +1 -1
  155. package/dist/transformers/subscription.js +6 -3
  156. package/dist/transformers/team.d.ts +7 -3
  157. package/dist/transformers/team.d.ts.map +1 -1
  158. package/dist/transformers/team.js +22 -16
  159. package/dist/transformers/template.d.ts +3 -2
  160. package/dist/transformers/template.d.ts.map +1 -1
  161. package/dist/transformers/template.js +18 -16
  162. package/dist/transformers/threadMember.d.ts +6 -3
  163. package/dist/transformers/threadMember.d.ts.map +1 -1
  164. package/dist/transformers/threadMember.js +20 -16
  165. package/dist/transformers/toggles/channel.d.ts +2 -2
  166. package/dist/transformers/toggles/channel.d.ts.map +1 -1
  167. package/dist/transformers/toggles/channel.js +2 -2
  168. package/dist/transformers/toggles/emoji.d.ts +1 -1
  169. package/dist/transformers/toggles/emoji.d.ts.map +1 -1
  170. package/dist/transformers/toggles/emoji.js +1 -1
  171. package/dist/transformers/toggles/guild.d.ts +3 -3
  172. package/dist/transformers/toggles/guild.d.ts.map +1 -1
  173. package/dist/transformers/toggles/guild.js +3 -3
  174. package/dist/transformers/toggles/role.d.ts +1 -1
  175. package/dist/transformers/toggles/role.d.ts.map +1 -1
  176. package/dist/transformers/toggles/role.js +1 -1
  177. package/dist/transformers/toggles/user.d.ts +1 -1
  178. package/dist/transformers/toggles/user.d.ts.map +1 -1
  179. package/dist/transformers/toggles/user.js +1 -1
  180. package/dist/transformers/toggles/voice.d.ts +1 -1
  181. package/dist/transformers/toggles/voice.d.ts.map +1 -1
  182. package/dist/transformers/toggles/voice.js +1 -1
  183. package/dist/transformers/types.d.ts +230 -53
  184. package/dist/transformers/types.d.ts.map +1 -1
  185. package/dist/transformers/types.js +2 -2
  186. package/dist/transformers/user.d.ts +13 -5
  187. package/dist/transformers/user.d.ts.map +1 -1
  188. package/dist/transformers/user.js +18 -9
  189. package/dist/transformers/voiceRegion.d.ts +3 -2
  190. package/dist/transformers/voiceRegion.d.ts.map +1 -1
  191. package/dist/transformers/voiceRegion.js +12 -10
  192. package/dist/transformers/voiceState.d.ts +3 -3
  193. package/dist/transformers/voiceState.d.ts.map +1 -1
  194. package/dist/transformers/voiceState.js +6 -4
  195. package/dist/transformers/webhook.d.ts +3 -1
  196. package/dist/transformers/webhook.d.ts.map +1 -1
  197. package/dist/transformers/webhook.js +10 -7
  198. package/dist/transformers/welcomeScreen.d.ts +7 -3
  199. package/dist/transformers/welcomeScreen.d.ts.map +1 -1
  200. package/dist/transformers/welcomeScreen.js +19 -12
  201. package/dist/transformers/widget.d.ts +3 -2
  202. package/dist/transformers/widget.d.ts.map +1 -1
  203. package/dist/transformers/widget.js +17 -13
  204. package/dist/transformers/widgetSettings.d.ts +3 -2
  205. package/dist/transformers/widgetSettings.d.ts.map +1 -1
  206. package/dist/transformers/widgetSettings.js +9 -7
  207. package/dist/transformers.d.ts +186 -81
  208. package/dist/transformers.d.ts.map +1 -1
  209. package/dist/transformers.js +90 -28
  210. package/package.json +18 -18
@@ -1,6 +1,12 @@
1
1
  import { MessageComponentTypes } from '@discordeno/types';
2
- export function transformComponent(bot, payload) {
2
+ import { callCustomizer } from '../transformers.js';
3
+ import { ToggleBitfield } from './toggles/ToggleBitfield.js';
4
+ export function transformComponent(bot, payload, extra) {
3
5
  let component;
6
+ // There's nothing to do with a component without a type, as it means an issue on Discord, so we just throw an error
7
+ if (!payload.type) {
8
+ throw new Error(`[Discordeno] Received a component payload without a type in the component transformer.`);
9
+ }
4
10
  // This switch is exhaustive, so we dont need the default case and TS does not error out for the un-initialized component variable
5
11
  switch(payload.type){
6
12
  case MessageComponentTypes.ActionRow:
@@ -16,11 +22,19 @@ export function transformComponent(bot, payload) {
16
22
  component = transformInputTextComponent(bot, payload);
17
23
  break;
18
24
  case MessageComponentTypes.StringSelect:
25
+ component = transformStringSelectMenuComponent(bot, payload);
26
+ break;
19
27
  case MessageComponentTypes.UserSelect:
28
+ component = transformUserSelectMenuComponent(bot, payload);
29
+ break;
20
30
  case MessageComponentTypes.RoleSelect:
31
+ component = transformRoleSelectMenuComponent(bot, payload);
32
+ break;
21
33
  case MessageComponentTypes.MentionableSelect:
34
+ component = transformMentionableSelectMenuComponent(bot, payload);
35
+ break;
22
36
  case MessageComponentTypes.ChannelSelect:
23
- component = transformSelectMenuComponent(bot, payload);
37
+ component = transformChannelSelectMenuComponent(bot, payload);
24
38
  break;
25
39
  case MessageComponentTypes.Section:
26
40
  component = transformSectionComponent(bot, payload);
@@ -46,27 +60,45 @@ export function transformComponent(bot, payload) {
46
60
  case MessageComponentTypes.FileUpload:
47
61
  component = transformFileUploadComponent(bot, payload);
48
62
  break;
63
+ case MessageComponentTypes.RadioGroup:
64
+ component = transformRadioGroupComponent(bot, payload);
65
+ break;
66
+ case MessageComponentTypes.CheckboxGroup:
67
+ component = transformCheckboxGroupComponent(bot, payload);
68
+ break;
69
+ case MessageComponentTypes.Checkbox:
70
+ component = transformCheckboxComponent(bot, payload);
71
+ break;
49
72
  }
50
- return bot.transformers.customizers.component(bot, payload, component);
73
+ return callCustomizer('component', bot, payload, component, {
74
+ partial: extra?.partial ?? false
75
+ });
51
76
  }
52
- export function transformUnfurledMediaItem(bot, payload) {
77
+ export function transformUnfurledMediaItem(bot, payload, extra) {
53
78
  const props = bot.transformers.desiredProperties.unfurledMediaItem;
54
79
  const mediaItem = {};
55
80
  if (props.url && payload.url) mediaItem.url = payload.url;
56
81
  if (props.proxyUrl && payload.proxy_url) mediaItem.proxyUrl = payload.proxy_url;
57
82
  if (props.height && payload.height) mediaItem.height = payload.height;
58
83
  if (props.width && payload.width) mediaItem.width = payload.width;
84
+ if (props.placeholder && payload.placeholder) mediaItem.placeholder = payload.placeholder;
85
+ if (props.placeholderVersion && payload.placeholder_version) mediaItem.placeholderVersion = payload.placeholder_version;
59
86
  if (props.contentType && payload.content_type) mediaItem.contentType = payload.content_type;
87
+ if (props.flags && payload.flags) mediaItem.flags = new ToggleBitfield(payload.flags);
60
88
  if (props.attachmentId && payload.attachment_id) mediaItem.attachmentId = bot.transformers.snowflake(payload.attachment_id);
61
- return bot.transformers.customizers.unfurledMediaItem(bot, payload, mediaItem);
89
+ return callCustomizer('unfurledMediaItem', bot, payload, mediaItem, {
90
+ partial: extra?.partial ?? false
91
+ });
62
92
  }
63
- export function transformMediaGalleryItem(bot, payload) {
93
+ export function transformMediaGalleryItem(bot, payload, extra) {
64
94
  const props = bot.transformers.desiredProperties.mediaGalleryItem;
65
95
  const galleryItem = {};
66
96
  if (props.media && payload.media) galleryItem.media = bot.transformers.unfurledMediaItem(bot, payload.media);
67
97
  if (props.description && payload.description) galleryItem.description = payload.description;
68
98
  if (props.spoiler && payload.spoiler) galleryItem.spoiler = payload.spoiler;
69
- return bot.transformers.customizers.mediaGalleryItem(bot, payload, galleryItem);
99
+ return callCustomizer('mediaGalleryItem', bot, payload, galleryItem, {
100
+ partial: extra?.partial ?? false
101
+ });
70
102
  }
71
103
  function transformActionRow(bot, payload) {
72
104
  const props = bot.transformers.desiredProperties.component;
@@ -94,7 +126,9 @@ function transformButtonComponent(bot, payload) {
94
126
  if (props.label && payload.label) button.label = payload.label;
95
127
  if (props.customId && payload.custom_id) button.customId = payload.custom_id;
96
128
  if (props.style && payload.style) button.style = payload.style;
97
- if (props.emoji && payload.emoji) button.emoji = bot.transformers.emoji(bot, payload.emoji);
129
+ if (props.emoji && payload.emoji) button.emoji = bot.transformers.emoji(bot, payload.emoji, {
130
+ partial: true
131
+ });
98
132
  if (props.url && payload.url) button.url = payload.url;
99
133
  if (props.disabled && payload.disabled) button.disabled = payload.disabled;
100
134
  if (props.skuId && payload.sku_id) button.skuId = bot.transformers.snowflake(payload.sku_id);
@@ -107,7 +141,7 @@ function transformInputTextComponent(bot, payload) {
107
141
  if (props.id && payload.id) input.id = payload.id;
108
142
  if (props.value && payload.value) input.value = payload.value;
109
143
  if (props.customId && payload.custom_id) input.customId = payload.custom_id;
110
- // Check if it is the component or the response
144
+ // We assume that if we find 'values' it is the interaction response
111
145
  if ('style' in payload) {
112
146
  if (props.style && payload.style) input.style = payload.style;
113
147
  if (props.required && payload.required) input.required = payload.required;
@@ -118,36 +152,123 @@ function transformInputTextComponent(bot, payload) {
118
152
  }
119
153
  return input;
120
154
  }
121
- function transformSelectMenuComponent(bot, payload) {
155
+ function transformStringSelectMenuComponent(bot, payload) {
122
156
  const props = bot.transformers.desiredProperties.component;
123
157
  const select = {};
124
158
  if (props.type && payload.type) select.type = payload.type;
125
159
  if (props.id && payload.id) select.id = payload.id;
126
160
  if (props.customId && payload.custom_id) select.customId = payload.custom_id;
127
- // Check if this is the string select response
161
+ // We assume that if we find 'values' it is the interaction response
128
162
  if ('values' in payload) {
129
163
  if (props.values && payload.values) select.values = payload.values;
130
164
  } else {
131
- if (props.placeholder && payload.placeholder) select.placeholder = payload.placeholder;
132
- if (props.minValues && payload.min_values) select.minValues = payload.min_values;
133
- if (props.maxValues && payload.max_values) select.maxValues = payload.max_values;
134
- if (props.defaultValues && payload.default_values) select.defaultValues = payload.default_values.map((defaultValue)=>({
135
- id: bot.transformers.snowflake(defaultValue.id),
136
- type: defaultValue.type
137
- }));
138
- if (props.channelTypes && payload.channel_types) select.channelTypes = payload.channel_types;
139
- if (props.options && payload.options) select.options = payload.options.map((option)=>({
165
+ const _payload = payload;
166
+ if (props.placeholder && _payload.placeholder) select.placeholder = _payload.placeholder;
167
+ if (props.minValues && _payload.min_values) select.minValues = _payload.min_values;
168
+ if (props.maxValues && _payload.max_values) select.maxValues = _payload.max_values;
169
+ if (props.options && _payload.options) select.options = _payload.options.map((option)=>({
140
170
  label: option.label,
141
171
  value: option.value,
142
172
  description: option.description,
143
- emoji: option.emoji ? {
144
- id: option.emoji.id ? bot.transformers.snowflake(option.emoji.id) : undefined,
145
- name: option.emoji.name ?? undefined,
146
- animated: option.emoji.animated
147
- } : undefined,
173
+ emoji: option.emoji ? bot.transformers.emoji(bot, option.emoji, {
174
+ partial: true
175
+ }) : undefined,
148
176
  default: option.default
149
177
  }));
150
- if (props.disabled && payload.disabled) select.disabled = payload.disabled;
178
+ if (props.disabled && _payload.disabled) select.disabled = _payload.disabled;
179
+ }
180
+ return select;
181
+ }
182
+ function transformUserSelectMenuComponent(bot, payload) {
183
+ const props = bot.transformers.desiredProperties.component;
184
+ const select = {};
185
+ if (props.type && payload.type) select.type = payload.type;
186
+ if (props.id && payload.id) select.id = payload.id;
187
+ if (props.customId && payload.custom_id) select.customId = payload.custom_id;
188
+ // We assume that if we find 'values' it is the interaction response
189
+ if ('values' in payload) {
190
+ if (props.values && payload.values) select.values = payload.values;
191
+ if (props.resolved && payload.resolved) select.resolved = bot.transformers.interactionDataResolved(bot, payload.resolved);
192
+ } else {
193
+ const _payload = payload;
194
+ if (props.placeholder && _payload.placeholder) select.placeholder = _payload.placeholder;
195
+ if (props.minValues && _payload.min_values) select.minValues = _payload.min_values;
196
+ if (props.maxValues && _payload.max_values) select.maxValues = _payload.max_values;
197
+ if (props.defaultValues && _payload.default_values) select.defaultValues = _payload.default_values.map((defaultValue)=>({
198
+ id: bot.transformers.snowflake(defaultValue.id),
199
+ type: defaultValue.type
200
+ }));
201
+ if (props.disabled && _payload.disabled) select.disabled = _payload.disabled;
202
+ }
203
+ return select;
204
+ }
205
+ function transformRoleSelectMenuComponent(bot, payload) {
206
+ const props = bot.transformers.desiredProperties.component;
207
+ const select = {};
208
+ if (props.type && payload.type) select.type = payload.type;
209
+ if (props.id && payload.id) select.id = payload.id;
210
+ if (props.customId && payload.custom_id) select.customId = payload.custom_id;
211
+ // We assume that if we find 'values' it is the interaction response
212
+ if ('values' in payload) {
213
+ if (props.values && payload.values) select.values = payload.values;
214
+ if (props.resolved && payload.resolved) select.resolved = bot.transformers.interactionDataResolved(bot, payload.resolved);
215
+ } else {
216
+ const _payload = payload;
217
+ if (props.placeholder && _payload.placeholder) select.placeholder = _payload.placeholder;
218
+ if (props.minValues && _payload.min_values) select.minValues = _payload.min_values;
219
+ if (props.maxValues && _payload.max_values) select.maxValues = _payload.max_values;
220
+ if (props.defaultValues && _payload.default_values) select.defaultValues = _payload.default_values.map((defaultValue)=>({
221
+ id: bot.transformers.snowflake(defaultValue.id),
222
+ type: defaultValue.type
223
+ }));
224
+ if (props.disabled && _payload.disabled) select.disabled = _payload.disabled;
225
+ }
226
+ return select;
227
+ }
228
+ function transformMentionableSelectMenuComponent(bot, payload) {
229
+ const props = bot.transformers.desiredProperties.component;
230
+ const select = {};
231
+ if (props.type && payload.type) select.type = payload.type;
232
+ if (props.id && payload.id) select.id = payload.id;
233
+ if (props.customId && payload.custom_id) select.customId = payload.custom_id;
234
+ // We assume that if we find 'values' it is the interaction response
235
+ if ('values' in payload) {
236
+ if (props.values && payload.values) select.values = payload.values;
237
+ if (props.resolved && payload.resolved) select.resolved = bot.transformers.interactionDataResolved(bot, payload.resolved);
238
+ } else {
239
+ const _payload = payload;
240
+ if (props.placeholder && _payload.placeholder) select.placeholder = _payload.placeholder;
241
+ if (props.minValues && _payload.min_values) select.minValues = _payload.min_values;
242
+ if (props.maxValues && _payload.max_values) select.maxValues = _payload.max_values;
243
+ if (props.defaultValues && _payload.default_values) select.defaultValues = _payload.default_values.map((defaultValue)=>({
244
+ id: bot.transformers.snowflake(defaultValue.id),
245
+ type: defaultValue.type
246
+ }));
247
+ if (props.disabled && _payload.disabled) select.disabled = _payload.disabled;
248
+ }
249
+ return select;
250
+ }
251
+ function transformChannelSelectMenuComponent(bot, payload) {
252
+ const props = bot.transformers.desiredProperties.component;
253
+ const select = {};
254
+ if (props.type && payload.type) select.type = payload.type;
255
+ if (props.id && payload.id) select.id = payload.id;
256
+ if (props.customId && payload.custom_id) select.customId = payload.custom_id;
257
+ // We assume that if we find 'values' it is the interaction response
258
+ if ('values' in payload) {
259
+ if (props.values && payload.values) select.values = payload.values;
260
+ if (props.resolved && payload.resolved) select.resolved = bot.transformers.interactionDataResolved(bot, payload.resolved);
261
+ } else {
262
+ const _payload = payload;
263
+ if (props.placeholder && _payload.placeholder) select.placeholder = _payload.placeholder;
264
+ if (props.minValues && _payload.min_values) select.minValues = _payload.min_values;
265
+ if (props.maxValues && _payload.max_values) select.maxValues = _payload.max_values;
266
+ if (props.defaultValues && _payload.default_values) select.defaultValues = _payload.default_values.map((defaultValue)=>({
267
+ id: bot.transformers.snowflake(defaultValue.id),
268
+ type: defaultValue.type
269
+ }));
270
+ if (props.channelTypes && _payload.channel_types) select.channelTypes = _payload.channel_types;
271
+ if (props.disabled && _payload.disabled) select.disabled = _payload.disabled;
151
272
  }
152
273
  return select;
153
274
  }
@@ -194,7 +315,7 @@ function transformTextDisplayComponent(bot, payload) {
194
315
  const textDisplay = {};
195
316
  if (props.type && payload.type) textDisplay.type = payload.type;
196
317
  if (props.id && payload.id) textDisplay.id = payload.id;
197
- // That that this isn't a response
318
+ // We assume that if we find 'content' it is the component
198
319
  if ('content' in payload) {
199
320
  if (props.content && payload.content) textDisplay.content = payload.content;
200
321
  }
@@ -214,7 +335,7 @@ function transformLabelComponent(bot, payload) {
214
335
  const label = {};
215
336
  if (props.type && payload.type) label.type = payload.type;
216
337
  if (props.id && payload.id) label.id = payload.id;
217
- // Check that this isn't a response
338
+ // We assume that if we find 'label' it is the component
218
339
  if ('label' in payload) {
219
340
  if (props.label && payload.label) label.label = payload.label;
220
341
  if (props.description && payload.description) label.description = payload.description;
@@ -228,15 +349,61 @@ function transformFileUploadComponent(bot, payload) {
228
349
  if (props.type && payload.type) fileUpload.type = payload.type;
229
350
  if (props.id && payload.id) fileUpload.id = payload.id;
230
351
  if (props.customId && payload.custom_id) fileUpload.customId = payload.custom_id;
231
- // Check that this is a response
352
+ // We assume that if we find 'values' it is the interaction response
232
353
  if ('values' in payload) {
233
354
  if (props.values && payload.values) fileUpload.values = payload.values;
234
355
  } else {
235
- if (props.minValues && payload.min_values) fileUpload.minValues = payload.min_values;
236
- if (props.maxValues && payload.max_values) fileUpload.maxValues = payload.max_values;
237
- if (props.required && payload.required) fileUpload.required = payload.required;
356
+ const _payload = payload;
357
+ if (props.minValues && _payload.min_values) fileUpload.minValues = _payload.min_values;
358
+ if (props.maxValues && _payload.max_values) fileUpload.maxValues = _payload.max_values;
359
+ if (props.required && _payload.required) fileUpload.required = _payload.required;
360
+ if (props.fileTypes && _payload.file_types) fileUpload.fileTypes = _payload.file_types;
238
361
  }
239
362
  return fileUpload;
240
363
  }
364
+ function transformRadioGroupComponent(bot, payload) {
365
+ const props = bot.transformers.desiredProperties.component;
366
+ const radioGroup = {};
367
+ if (props.type && payload.type) radioGroup.type = payload.type;
368
+ if (props.id && payload.id) radioGroup.id = payload.id;
369
+ if (props.customId && payload.custom_id) radioGroup.customId = payload.custom_id;
370
+ // We assume that if we find 'options' it is the component
371
+ if ('options' in payload) {
372
+ if (props.options && payload.options) radioGroup.options = payload.options;
373
+ if (props.required && payload.required !== undefined) radioGroup.required = payload.required;
374
+ } else {
375
+ const _payload = payload;
376
+ if (props.value) radioGroup.value = _payload.value ?? undefined;
377
+ }
378
+ return radioGroup;
379
+ }
380
+ function transformCheckboxGroupComponent(bot, payload) {
381
+ const props = bot.transformers.desiredProperties.component;
382
+ const checkboxGroup = {};
383
+ if (props.type && payload.type) checkboxGroup.type = payload.type;
384
+ if (props.id && payload.id) checkboxGroup.id = payload.id;
385
+ if (props.customId && payload.custom_id) checkboxGroup.customId = payload.custom_id;
386
+ // We assume that if we find 'options' it is the component
387
+ if ('options' in payload) {
388
+ if (props.options && payload.options) checkboxGroup.options = payload.options;
389
+ if (props.minValues && payload.min_values !== undefined) checkboxGroup.minValues = payload.min_values;
390
+ if (props.maxValues && payload.max_values !== undefined) checkboxGroup.maxValues = payload.max_values;
391
+ if (props.required && payload.required !== undefined) checkboxGroup.required = payload.required;
392
+ } else {
393
+ const _payload = payload;
394
+ if (props.values && _payload.values) checkboxGroup.values = _payload.values;
395
+ }
396
+ return checkboxGroup;
397
+ }
398
+ function transformCheckboxComponent(bot, payload) {
399
+ const props = bot.transformers.desiredProperties.component;
400
+ const checkbox = {};
401
+ if (props.type && payload.type) checkbox.type = payload.type;
402
+ if (props.id && payload.id) checkbox.id = payload.id;
403
+ if (props.customId && payload.custom_id) checkbox.customId = payload.custom_id;
404
+ if (props.value && 'value' in payload) checkbox.value = payload.value;
405
+ if (props.default && 'default' in payload) checkbox.default = payload.default;
406
+ return checkbox;
407
+ }
241
408
 
242
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFuc2Zvcm1lcnMvY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHR5cGUgRGlzY29yZEFjdGlvblJvdyxcbiAgdHlwZSBEaXNjb3JkQnV0dG9uQ29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRDb250YWluZXJDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZEZpbGVDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZEZpbGVVcGxvYWRDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZEZpbGVVcGxvYWRJbnRlcmFjdGlvblJlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRMYWJlbENvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkTGFiZWxJbnRlcmFjdGlvblJlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRNZWRpYUdhbGxlcnlDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZE1lZGlhR2FsbGVyeUl0ZW0sXG4gIHR5cGUgRGlzY29yZE1lc3NhZ2VDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZE1lc3NhZ2VDb21wb25lbnRGcm9tTW9kYWxJbnRlcmFjdGlvblJlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRTZWN0aW9uQ29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRTZWxlY3RNZW51Q29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRTZXBhcmF0b3JDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZFN0cmluZ1NlbGVjdEludGVyYWN0aW9uUmVzcG9uc2VGcm9tTW9kYWwsXG4gIHR5cGUgRGlzY29yZFRleHREaXNwbGF5Q29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRUZXh0RGlzcGxheUludGVyYWN0aW9uUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZFRleHRJbnB1dENvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkVGV4dElucHV0SW50ZXJhY3Rpb25SZXNwb25zZSxcbiAgdHlwZSBEaXNjb3JkVGh1bWJuYWlsQ29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRVbmZ1cmxlZE1lZGlhSXRlbSxcbiAgTWVzc2FnZUNvbXBvbmVudFR5cGVzLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEJvdCB9IGZyb20gJy4uL2JvdC5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudCwgTWVkaWFHYWxsZXJ5SXRlbSwgVW5mdXJsZWRNZWRpYUl0ZW0gfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybUNvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZE1lc3NhZ2VDb21wb25lbnQgfCBEaXNjb3JkTWVzc2FnZUNvbXBvbmVudEZyb21Nb2RhbEludGVyYWN0aW9uUmVzcG9uc2UpOiBDb21wb25lbnQge1xuICBsZXQgY29tcG9uZW50OiBDb21wb25lbnQ7XG5cbiAgLy8gVGhpcyBzd2l0Y2ggaXMgZXhoYXVzdGl2ZSwgc28gd2UgZG9udCBuZWVkIHRoZSBkZWZhdWx0IGNhc2UgYW5kIFRTIGRvZXMgbm90IGVycm9yIG91dCBmb3IgdGhlIHVuLWluaXRpYWxpemVkIGNvbXBvbmVudCB2YXJpYWJsZVxuICBzd2l0Y2ggKHBheWxvYWQudHlwZSkge1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLkFjdGlvblJvdzpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybUFjdGlvblJvdyhib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuQnV0dG9uOlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtQnV0dG9uQ29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5Db250YWluZXI6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1Db250YWluZXJDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLlRleHRJbnB1dDpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybUlucHV0VGV4dENvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuU3RyaW5nU2VsZWN0OlxuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLlVzZXJTZWxlY3Q6XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuUm9sZVNlbGVjdDpcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5NZW50aW9uYWJsZVNlbGVjdDpcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5DaGFubmVsU2VsZWN0OlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtU2VsZWN0TWVudUNvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuU2VjdGlvbjpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybVNlY3Rpb25Db21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLlRodW1ibmFpbDpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybVRodW1ibmFpbENvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuTWVkaWFHYWxsZXJ5OlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtTWVkaWFHYWxsZXJ5Q29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5GaWxlOlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtRmlsZUNvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuU2VwYXJhdG9yOlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtU2VwYXJhdG9yQ29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5UZXh0RGlzcGxheTpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybVRleHREaXNwbGF5Q29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5MYWJlbDpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybUxhYmVsQ29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5GaWxlVXBsb2FkOlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtRmlsZVVwbG9hZENvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gYm90LnRyYW5zZm9ybWVycy5jdXN0b21pemVycy5jb21wb25lbnQoYm90LCBwYXlsb2FkLCBjb21wb25lbnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtVW5mdXJsZWRNZWRpYUl0ZW0oYm90OiBCb3QsIHBheWxvYWQ6IERpc2NvcmRVbmZ1cmxlZE1lZGlhSXRlbSk6IFVuZnVybGVkTWVkaWFJdGVtIHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLnVuZnVybGVkTWVkaWFJdGVtO1xuICBjb25zdCBtZWRpYUl0ZW0gPSB7fSBhcyBVbmZ1cmxlZE1lZGlhSXRlbTtcblxuICBpZiAocHJvcHMudXJsICYmIHBheWxvYWQudXJsKSBtZWRpYUl0ZW0udXJsID0gcGF5bG9hZC51cmw7XG4gIGlmIChwcm9wcy5wcm94eVVybCAmJiBwYXlsb2FkLnByb3h5X3VybCkgbWVkaWFJdGVtLnByb3h5VXJsID0gcGF5bG9hZC5wcm94eV91cmw7XG4gIGlmIChwcm9wcy5oZWlnaHQgJiYgcGF5bG9hZC5oZWlnaHQpIG1lZGlhSXRlbS5oZWlnaHQgPSBwYXlsb2FkLmhlaWdodDtcbiAgaWYgKHByb3BzLndpZHRoICYmIHBheWxvYWQud2lkdGgpIG1lZGlhSXRlbS53aWR0aCA9IHBheWxvYWQud2lkdGg7XG4gIGlmIChwcm9wcy5jb250ZW50VHlwZSAmJiBwYXlsb2FkLmNvbnRlbnRfdHlwZSkgbWVkaWFJdGVtLmNvbnRlbnRUeXBlID0gcGF5bG9hZC5jb250ZW50X3R5cGU7XG4gIGlmIChwcm9wcy5hdHRhY2htZW50SWQgJiYgcGF5bG9hZC5hdHRhY2htZW50X2lkKSBtZWRpYUl0ZW0uYXR0YWNobWVudElkID0gYm90LnRyYW5zZm9ybWVycy5zbm93Zmxha2UocGF5bG9hZC5hdHRhY2htZW50X2lkKTtcblxuICByZXR1cm4gYm90LnRyYW5zZm9ybWVycy5jdXN0b21pemVycy51bmZ1cmxlZE1lZGlhSXRlbShib3QsIHBheWxvYWQsIG1lZGlhSXRlbSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1NZWRpYUdhbGxlcnlJdGVtKGJvdDogQm90LCBwYXlsb2FkOiBEaXNjb3JkTWVkaWFHYWxsZXJ5SXRlbSk6IE1lZGlhR2FsbGVyeUl0ZW0ge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMubWVkaWFHYWxsZXJ5SXRlbTtcbiAgY29uc3QgZ2FsbGVyeUl0ZW0gPSB7fSBhcyBNZWRpYUdhbGxlcnlJdGVtO1xuXG4gIGlmIChwcm9wcy5tZWRpYSAmJiBwYXlsb2FkLm1lZGlhKSBnYWxsZXJ5SXRlbS5tZWRpYSA9IGJvdC50cmFuc2Zvcm1lcnMudW5mdXJsZWRNZWRpYUl0ZW0oYm90LCBwYXlsb2FkLm1lZGlhKTtcbiAgaWYgKHByb3BzLmRlc2NyaXB0aW9uICYmIHBheWxvYWQuZGVzY3JpcHRpb24pIGdhbGxlcnlJdGVtLmRlc2NyaXB0aW9uID0gcGF5bG9hZC5kZXNjcmlwdGlvbjtcbiAgaWYgKHByb3BzLnNwb2lsZXIgJiYgcGF5bG9hZC5zcG9pbGVyKSBnYWxsZXJ5SXRlbS5zcG9pbGVyID0gcGF5bG9hZC5zcG9pbGVyO1xuXG4gIHJldHVybiBib3QudHJhbnNmb3JtZXJzLmN1c3RvbWl6ZXJzLm1lZGlhR2FsbGVyeUl0ZW0oYm90LCBwYXlsb2FkLCBnYWxsZXJ5SXRlbSk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUFjdGlvblJvdyhib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZEFjdGlvblJvdyk6IENvbXBvbmVudCB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IGFjdGlvblJvdyA9IHt9IGFzIENvbXBvbmVudDtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIGFjdGlvblJvdy50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgYWN0aW9uUm93LmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmNvbXBvbmVudHMgJiYgcGF5bG9hZC5jb21wb25lbnRzKVxuICAgIGFjdGlvblJvdy5jb21wb25lbnRzID0gcGF5bG9hZC5jb21wb25lbnRzLm1hcCgoY29tcG9uZW50KSA9PiBib3QudHJhbnNmb3JtZXJzLmNvbXBvbmVudChib3QsIGNvbXBvbmVudCkpO1xuXG4gIHJldHVybiBhY3Rpb25Sb3c7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUNvbnRhaW5lckNvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZENvbnRhaW5lckNvbXBvbmVudCk6IENvbXBvbmVudCB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IGNvbnRhaW5lciA9IHt9IGFzIENvbXBvbmVudDtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIGNvbnRhaW5lci50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgY29udGFpbmVyLmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmFjY2VudENvbG9yICYmIHBheWxvYWQuYWNjZW50X2NvbG9yKSBjb250YWluZXIuYWNjZW50Q29sb3IgPSBwYXlsb2FkLmFjY2VudF9jb2xvcjtcbiAgaWYgKHByb3BzLnNwb2lsZXIgJiYgcGF5bG9hZC5zcG9pbGVyKSBjb250YWluZXIuc3BvaWxlciA9IHBheWxvYWQuc3BvaWxlcjtcbiAgaWYgKHByb3BzLmNvbXBvbmVudHMgJiYgcGF5bG9hZC5jb21wb25lbnRzKVxuICAgIGNvbnRhaW5lci5jb21wb25lbnRzID0gcGF5bG9hZC5jb21wb25lbnRzLm1hcCgoY29tcG9uZW50KSA9PiBib3QudHJhbnNmb3JtZXJzLmNvbXBvbmVudChib3QsIGNvbXBvbmVudCkpO1xuXG4gIHJldHVybiBjb250YWluZXI7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUJ1dHRvbkNvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZEJ1dHRvbkNvbXBvbmVudCk6IENvbXBvbmVudCB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IGJ1dHRvbiA9IHt9IGFzIENvbXBvbmVudDtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIGJ1dHRvbi50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgYnV0dG9uLmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmxhYmVsICYmIHBheWxvYWQubGFiZWwpIGJ1dHRvbi5sYWJlbCA9IHBheWxvYWQubGFiZWw7XG4gIGlmIChwcm9wcy5jdXN0b21JZCAmJiBwYXlsb2FkLmN1c3RvbV9pZCkgYnV0dG9uLmN1c3RvbUlkID0gcGF5bG9hZC5jdXN0b21faWQ7XG4gIGlmIChwcm9wcy5zdHlsZSAmJiBwYXlsb2FkLnN0eWxlKSBidXR0b24uc3R5bGUgPSBwYXlsb2FkLnN0eWxlO1xuICBpZiAocHJvcHMuZW1vamkgJiYgcGF5bG9hZC5lbW9qaSkgYnV0dG9uLmVtb2ppID0gYm90LnRyYW5zZm9ybWVycy5lbW9qaShib3QsIHBheWxvYWQuZW1vamkpO1xuICBpZiAocHJvcHMudXJsICYmIHBheWxvYWQudXJsKSBidXR0b24udXJsID0gcGF5bG9hZC51cmw7XG4gIGlmIChwcm9wcy5kaXNhYmxlZCAmJiBwYXlsb2FkLmRpc2FibGVkKSBidXR0b24uZGlzYWJsZWQgPSBwYXlsb2FkLmRpc2FibGVkO1xuICBpZiAocHJvcHMuc2t1SWQgJiYgcGF5bG9hZC5za3VfaWQpIGJ1dHRvbi5za3VJZCA9IGJvdC50cmFuc2Zvcm1lcnMuc25vd2ZsYWtlKHBheWxvYWQuc2t1X2lkKTtcblxuICByZXR1cm4gYnV0dG9uO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1JbnB1dFRleHRDb21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IERpc2NvcmRUZXh0SW5wdXRDb21wb25lbnQgfCBEaXNjb3JkVGV4dElucHV0SW50ZXJhY3Rpb25SZXNwb25zZSk6IENvbXBvbmVudCB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IGlucHV0ID0ge30gYXMgQ29tcG9uZW50O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgaW5wdXQudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIGlucHV0LmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLnZhbHVlICYmIHBheWxvYWQudmFsdWUpIGlucHV0LnZhbHVlID0gcGF5bG9hZC52YWx1ZTtcbiAgaWYgKHByb3BzLmN1c3RvbUlkICYmIHBheWxvYWQuY3VzdG9tX2lkKSBpbnB1dC5jdXN0b21JZCA9IHBheWxvYWQuY3VzdG9tX2lkO1xuXG4gIC8vIENoZWNrIGlmIGl0IGlzIHRoZSBjb21wb25lbnQgb3IgdGhlIHJlc3BvbnNlXG4gIGlmICgnc3R5bGUnIGluIHBheWxvYWQpIHtcbiAgICBpZiAocHJvcHMuc3R5bGUgJiYgcGF5bG9hZC5zdHlsZSkgaW5wdXQuc3R5bGUgPSBwYXlsb2FkLnN0eWxlO1xuICAgIGlmIChwcm9wcy5yZXF1aXJlZCAmJiBwYXlsb2FkLnJlcXVpcmVkKSBpbnB1dC5yZXF1aXJlZCA9IHBheWxvYWQucmVxdWlyZWQ7XG4gICAgaWYgKHByb3BzLmxhYmVsICYmIHBheWxvYWQubGFiZWwpIGlucHV0LmxhYmVsID0gcGF5bG9hZC5sYWJlbDtcbiAgICBpZiAocHJvcHMucGxhY2Vob2xkZXIgJiYgcGF5bG9hZC5wbGFjZWhvbGRlcikgaW5wdXQucGxhY2Vob2xkZXIgPSBwYXlsb2FkLnBsYWNlaG9sZGVyO1xuICAgIGlmIChwcm9wcy5taW5MZW5ndGggJiYgcGF5bG9hZC5taW5fbGVuZ3RoKSBpbnB1dC5taW5MZW5ndGggPSBwYXlsb2FkLm1pbl9sZW5ndGg7XG4gICAgaWYgKHByb3BzLm1heExlbmd0aCAmJiBwYXlsb2FkLm1heF9sZW5ndGgpIGlucHV0Lm1heExlbmd0aCA9IHBheWxvYWQubWF4X2xlbmd0aDtcbiAgfVxuXG4gIHJldHVybiBpbnB1dDtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtU2VsZWN0TWVudUNvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZFNlbGVjdE1lbnVDb21wb25lbnQgfCBEaXNjb3JkU3RyaW5nU2VsZWN0SW50ZXJhY3Rpb25SZXNwb25zZUZyb21Nb2RhbCk6IENvbXBvbmVudCB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IHNlbGVjdCA9IHt9IGFzIENvbXBvbmVudDtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIHNlbGVjdC50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgc2VsZWN0LmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmN1c3RvbUlkICYmIHBheWxvYWQuY3VzdG9tX2lkKSBzZWxlY3QuY3VzdG9tSWQgPSBwYXlsb2FkLmN1c3RvbV9pZDtcblxuICAvLyBDaGVjayBpZiB0aGlzIGlzIHRoZSBzdHJpbmcgc2VsZWN0IHJlc3BvbnNlXG4gIGlmICgndmFsdWVzJyBpbiBwYXlsb2FkKSB7XG4gICAgaWYgKHByb3BzLnZhbHVlcyAmJiBwYXlsb2FkLnZhbHVlcykgc2VsZWN0LnZhbHVlcyA9IHBheWxvYWQudmFsdWVzO1xuICB9IGVsc2Uge1xuICAgIGlmIChwcm9wcy5wbGFjZWhvbGRlciAmJiBwYXlsb2FkLnBsYWNlaG9sZGVyKSBzZWxlY3QucGxhY2Vob2xkZXIgPSBwYXlsb2FkLnBsYWNlaG9sZGVyO1xuICAgIGlmIChwcm9wcy5taW5WYWx1ZXMgJiYgcGF5bG9hZC5taW5fdmFsdWVzKSBzZWxlY3QubWluVmFsdWVzID0gcGF5bG9hZC5taW5fdmFsdWVzO1xuICAgIGlmIChwcm9wcy5tYXhWYWx1ZXMgJiYgcGF5bG9hZC5tYXhfdmFsdWVzKSBzZWxlY3QubWF4VmFsdWVzID0gcGF5bG9hZC5tYXhfdmFsdWVzO1xuICAgIGlmIChwcm9wcy5kZWZhdWx0VmFsdWVzICYmIHBheWxvYWQuZGVmYXVsdF92YWx1ZXMpXG4gICAgICBzZWxlY3QuZGVmYXVsdFZhbHVlcyA9IHBheWxvYWQuZGVmYXVsdF92YWx1ZXMubWFwKChkZWZhdWx0VmFsdWUpID0+ICh7XG4gICAgICAgIGlkOiBib3QudHJhbnNmb3JtZXJzLnNub3dmbGFrZShkZWZhdWx0VmFsdWUuaWQpLFxuICAgICAgICB0eXBlOiBkZWZhdWx0VmFsdWUudHlwZSxcbiAgICAgIH0pKTtcbiAgICBpZiAocHJvcHMuY2hhbm5lbFR5cGVzICYmIHBheWxvYWQuY2hhbm5lbF90eXBlcykgc2VsZWN0LmNoYW5uZWxUeXBlcyA9IHBheWxvYWQuY2hhbm5lbF90eXBlcztcbiAgICBpZiAocHJvcHMub3B0aW9ucyAmJiBwYXlsb2FkLm9wdGlvbnMpXG4gICAgICBzZWxlY3Qub3B0aW9ucyA9IHBheWxvYWQub3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gKHtcbiAgICAgICAgbGFiZWw6IG9wdGlvbi5sYWJlbCxcbiAgICAgICAgdmFsdWU6IG9wdGlvbi52YWx1ZSxcbiAgICAgICAgZGVzY3JpcHRpb246IG9wdGlvbi5kZXNjcmlwdGlvbixcbiAgICAgICAgZW1vamk6IG9wdGlvbi5lbW9qaVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBpZDogb3B0aW9uLmVtb2ppLmlkID8gYm90LnRyYW5zZm9ybWVycy5zbm93Zmxha2Uob3B0aW9uLmVtb2ppLmlkKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgbmFtZTogb3B0aW9uLmVtb2ppLm5hbWUgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBhbmltYXRlZDogb3B0aW9uLmVtb2ppLmFuaW1hdGVkLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBkZWZhdWx0OiBvcHRpb24uZGVmYXVsdCxcbiAgICAgIH0pKTtcbiAgICBpZiAocHJvcHMuZGlzYWJsZWQgJiYgcGF5bG9hZC5kaXNhYmxlZCkgc2VsZWN0LmRpc2FibGVkID0gcGF5bG9hZC5kaXNhYmxlZDtcbiAgfVxuXG4gIHJldHVybiBzZWxlY3Q7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVNlY3Rpb25Db21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IERpc2NvcmRTZWN0aW9uQ29tcG9uZW50KTogQ29tcG9uZW50IHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3Qgc2VjdGlvbiA9IHt9IGFzIENvbXBvbmVudDtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIHNlY3Rpb24udHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIHNlY3Rpb24uaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuY29tcG9uZW50cyAmJiBwYXlsb2FkLmNvbXBvbmVudHMpIHNlY3Rpb24uY29tcG9uZW50cyA9IHBheWxvYWQuY29tcG9uZW50cy5tYXAoKGNvbXBvbmVudCkgPT4gYm90LnRyYW5zZm9ybWVycy5jb21wb25lbnQoYm90LCBjb21wb25lbnQpKTtcbiAgaWYgKHByb3BzLmFjY2Vzc29yeSAmJiBwYXlsb2FkLmFjY2Vzc29yeSkgc2VjdGlvbi5hY2Nlc3NvcnkgPSBib3QudHJhbnNmb3JtZXJzLmNvbXBvbmVudChib3QsIHBheWxvYWQuYWNjZXNzb3J5KTtcblxuICByZXR1cm4gc2VjdGlvbjtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtVGh1bWJuYWlsQ29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBEaXNjb3JkVGh1bWJuYWlsQ29tcG9uZW50KTogQ29tcG9uZW50IHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3QgdGh1bWJuYWlsID0ge30gYXMgQ29tcG9uZW50O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgdGh1bWJuYWlsLnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSB0aHVtYm5haWwuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMubWVkaWEgJiYgcGF5bG9hZC5tZWRpYSkgdGh1bWJuYWlsLm1lZGlhID0gYm90LnRyYW5zZm9ybWVycy51bmZ1cmxlZE1lZGlhSXRlbShib3QsIHBheWxvYWQubWVkaWEpO1xuICBpZiAocHJvcHMuZGVzY3JpcHRpb24gJiYgcGF5bG9hZC5kZXNjcmlwdGlvbikgdGh1bWJuYWlsLmRlc2NyaXB0aW9uID0gcGF5bG9hZC5kZXNjcmlwdGlvbjtcbiAgaWYgKHByb3BzLnNwb2lsZXIgJiYgcGF5bG9hZC5zcG9pbGVyKSB0aHVtYm5haWwuc3BvaWxlciA9IHBheWxvYWQuc3BvaWxlcjtcblxuICByZXR1cm4gdGh1bWJuYWlsO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1NZWRpYUdhbGxlcnlDb21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IERpc2NvcmRNZWRpYUdhbGxlcnlDb21wb25lbnQpOiBDb21wb25lbnQge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBtZWRpYUdhbGxlcnkgPSB7fSBhcyBDb21wb25lbnQ7XG5cbiAgaWYgKHByb3BzLnR5cGUgJiYgcGF5bG9hZC50eXBlKSBtZWRpYUdhbGxlcnkudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIG1lZGlhR2FsbGVyeS5pZCA9IHBheWxvYWQuaWQ7XG4gIGlmIChwcm9wcy5pdGVtcyAmJiBwYXlsb2FkLml0ZW1zKSBtZWRpYUdhbGxlcnkuaXRlbXMgPSBwYXlsb2FkLml0ZW1zLm1hcCgoaXRlbSkgPT4gYm90LnRyYW5zZm9ybWVycy5tZWRpYUdhbGxlcnlJdGVtKGJvdCwgaXRlbSkpO1xuXG4gIHJldHVybiBtZWRpYUdhbGxlcnk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUZpbGVDb21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IERpc2NvcmRGaWxlQ29tcG9uZW50KTogQ29tcG9uZW50IHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3QgZmlsZSA9IHt9IGFzIENvbXBvbmVudDtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIGZpbGUudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIGZpbGUuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuZmlsZSAmJiBwYXlsb2FkLmZpbGUpIGZpbGUuZmlsZSA9IGJvdC50cmFuc2Zvcm1lcnMudW5mdXJsZWRNZWRpYUl0ZW0oYm90LCBwYXlsb2FkLmZpbGUpO1xuICBpZiAocHJvcHMuc3BvaWxlciAmJiBwYXlsb2FkLnNwb2lsZXIpIGZpbGUuc3BvaWxlciA9IHBheWxvYWQuc3BvaWxlcjtcbiAgaWYgKHByb3BzLm5hbWUgJiYgcGF5bG9hZC5uYW1lKSBmaWxlLm5hbWUgPSBwYXlsb2FkLm5hbWU7XG4gIGlmIChwcm9wcy5zaXplICYmIHBheWxvYWQuc2l6ZSkgZmlsZS5zaXplID0gcGF5bG9hZC5zaXplO1xuXG4gIHJldHVybiBmaWxlO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1UZXh0RGlzcGxheUNvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZFRleHREaXNwbGF5Q29tcG9uZW50IHwgRGlzY29yZFRleHREaXNwbGF5SW50ZXJhY3Rpb25SZXNwb25zZSk6IENvbXBvbmVudCB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IHRleHREaXNwbGF5ID0ge30gYXMgQ29tcG9uZW50O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgdGV4dERpc3BsYXkudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIHRleHREaXNwbGF5LmlkID0gcGF5bG9hZC5pZDtcbiAgLy8gVGhhdCB0aGF0IHRoaXMgaXNuJ3QgYSByZXNwb25zZVxuICBpZiAoJ2NvbnRlbnQnIGluIHBheWxvYWQpIHtcbiAgICBpZiAocHJvcHMuY29udGVudCAmJiBwYXlsb2FkLmNvbnRlbnQpIHRleHREaXNwbGF5LmNvbnRlbnQgPSBwYXlsb2FkLmNvbnRlbnQ7XG4gIH1cblxuICByZXR1cm4gdGV4dERpc3BsYXk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVNlcGFyYXRvckNvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZFNlcGFyYXRvckNvbXBvbmVudCk6IENvbXBvbmVudCB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IHNlcGFyYXRvciA9IHt9IGFzIENvbXBvbmVudDtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIHNlcGFyYXRvci50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgc2VwYXJhdG9yLmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmRpdmlkZXIgJiYgcGF5bG9hZC5kaXZpZGVyKSBzZXBhcmF0b3IuZGl2aWRlciA9IHBheWxvYWQuZGl2aWRlcjtcbiAgaWYgKHByb3BzLnNwYWNpbmcgJiYgcGF5bG9hZC5zcGFjaW5nKSBzZXBhcmF0b3Iuc3BhY2luZyA9IHBheWxvYWQuc3BhY2luZztcblxuICByZXR1cm4gc2VwYXJhdG9yO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1MYWJlbENvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZExhYmVsQ29tcG9uZW50IHwgRGlzY29yZExhYmVsSW50ZXJhY3Rpb25SZXNwb25zZSk6IENvbXBvbmVudCB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IGxhYmVsID0ge30gYXMgQ29tcG9uZW50O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgbGFiZWwudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIGxhYmVsLmlkID0gcGF5bG9hZC5pZDtcbiAgLy8gQ2hlY2sgdGhhdCB0aGlzIGlzbid0IGEgcmVzcG9uc2VcbiAgaWYgKCdsYWJlbCcgaW4gcGF5bG9hZCkge1xuICAgIGlmIChwcm9wcy5sYWJlbCAmJiBwYXlsb2FkLmxhYmVsKSBsYWJlbC5sYWJlbCA9IHBheWxvYWQubGFiZWw7XG4gICAgaWYgKHByb3BzLmRlc2NyaXB0aW9uICYmIHBheWxvYWQuZGVzY3JpcHRpb24pIGxhYmVsLmRlc2NyaXB0aW9uID0gcGF5bG9hZC5kZXNjcmlwdGlvbjtcbiAgfVxuICBpZiAocHJvcHMuY29tcG9uZW50ICYmIHBheWxvYWQuY29tcG9uZW50KSBsYWJlbC5jb21wb25lbnQgPSBib3QudHJhbnNmb3JtZXJzLmNvbXBvbmVudChib3QsIHBheWxvYWQuY29tcG9uZW50KTtcblxuICByZXR1cm4gbGFiZWw7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUZpbGVVcGxvYWRDb21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IERpc2NvcmRGaWxlVXBsb2FkQ29tcG9uZW50IHwgRGlzY29yZEZpbGVVcGxvYWRJbnRlcmFjdGlvblJlc3BvbnNlKTogQ29tcG9uZW50IHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3QgZmlsZVVwbG9hZCA9IHt9IGFzIENvbXBvbmVudDtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIGZpbGVVcGxvYWQudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIGZpbGVVcGxvYWQuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuY3VzdG9tSWQgJiYgcGF5bG9hZC5jdXN0b21faWQpIGZpbGVVcGxvYWQuY3VzdG9tSWQgPSBwYXlsb2FkLmN1c3RvbV9pZDtcblxuICAvLyBDaGVjayB0aGF0IHRoaXMgaXMgYSByZXNwb25zZVxuICBpZiAoJ3ZhbHVlcycgaW4gcGF5bG9hZCkge1xuICAgIGlmIChwcm9wcy52YWx1ZXMgJiYgcGF5bG9hZC52YWx1ZXMpIGZpbGVVcGxvYWQudmFsdWVzID0gcGF5bG9hZC52YWx1ZXM7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHByb3BzLm1pblZhbHVlcyAmJiBwYXlsb2FkLm1pbl92YWx1ZXMpIGZpbGVVcGxvYWQubWluVmFsdWVzID0gcGF5bG9hZC5taW5fdmFsdWVzO1xuICAgIGlmIChwcm9wcy5tYXhWYWx1ZXMgJiYgcGF5bG9hZC5tYXhfdmFsdWVzKSBmaWxlVXBsb2FkLm1heFZhbHVlcyA9IHBheWxvYWQubWF4X3ZhbHVlcztcbiAgICBpZiAocHJvcHMucmVxdWlyZWQgJiYgcGF5bG9hZC5yZXF1aXJlZCkgZmlsZVVwbG9hZC5yZXF1aXJlZCA9IHBheWxvYWQucmVxdWlyZWQ7XG4gIH1cblxuICByZXR1cm4gZmlsZVVwbG9hZDtcbn1cbiJdLCJuYW1lcyI6WyJNZXNzYWdlQ29tcG9uZW50VHlwZXMiLCJ0cmFuc2Zvcm1Db21wb25lbnQiLCJib3QiLCJwYXlsb2FkIiwiY29tcG9uZW50IiwidHlwZSIsIkFjdGlvblJvdyIsInRyYW5zZm9ybUFjdGlvblJvdyIsIkJ1dHRvbiIsInRyYW5zZm9ybUJ1dHRvbkNvbXBvbmVudCIsIkNvbnRhaW5lciIsInRyYW5zZm9ybUNvbnRhaW5lckNvbXBvbmVudCIsIlRleHRJbnB1dCIsInRyYW5zZm9ybUlucHV0VGV4dENvbXBvbmVudCIsIlN0cmluZ1NlbGVjdCIsIlVzZXJTZWxlY3QiLCJSb2xlU2VsZWN0IiwiTWVudGlvbmFibGVTZWxlY3QiLCJDaGFubmVsU2VsZWN0IiwidHJhbnNmb3JtU2VsZWN0TWVudUNvbXBvbmVudCIsIlNlY3Rpb24iLCJ0cmFuc2Zvcm1TZWN0aW9uQ29tcG9uZW50IiwiVGh1bWJuYWlsIiwidHJhbnNmb3JtVGh1bWJuYWlsQ29tcG9uZW50IiwiTWVkaWFHYWxsZXJ5IiwidHJhbnNmb3JtTWVkaWFHYWxsZXJ5Q29tcG9uZW50IiwiRmlsZSIsInRyYW5zZm9ybUZpbGVDb21wb25lbnQiLCJTZXBhcmF0b3IiLCJ0cmFuc2Zvcm1TZXBhcmF0b3JDb21wb25lbnQiLCJUZXh0RGlzcGxheSIsInRyYW5zZm9ybVRleHREaXNwbGF5Q29tcG9uZW50IiwiTGFiZWwiLCJ0cmFuc2Zvcm1MYWJlbENvbXBvbmVudCIsIkZpbGVVcGxvYWQiLCJ0cmFuc2Zvcm1GaWxlVXBsb2FkQ29tcG9uZW50IiwidHJhbnNmb3JtZXJzIiwiY3VzdG9taXplcnMiLCJ0cmFuc2Zvcm1VbmZ1cmxlZE1lZGlhSXRlbSIsInByb3BzIiwiZGVzaXJlZFByb3BlcnRpZXMiLCJ1bmZ1cmxlZE1lZGlhSXRlbSIsIm1lZGlhSXRlbSIsInVybCIsInByb3h5VXJsIiwicHJveHlfdXJsIiwiaGVpZ2h0Iiwid2lkdGgiLCJjb250ZW50VHlwZSIsImNvbnRlbnRfdHlwZSIsImF0dGFjaG1lbnRJZCIsImF0dGFjaG1lbnRfaWQiLCJzbm93Zmxha2UiLCJ0cmFuc2Zvcm1NZWRpYUdhbGxlcnlJdGVtIiwibWVkaWFHYWxsZXJ5SXRlbSIsImdhbGxlcnlJdGVtIiwibWVkaWEiLCJkZXNjcmlwdGlvbiIsInNwb2lsZXIiLCJhY3Rpb25Sb3ciLCJpZCIsImNvbXBvbmVudHMiLCJtYXAiLCJjb250YWluZXIiLCJhY2NlbnRDb2xvciIsImFjY2VudF9jb2xvciIsImJ1dHRvbiIsImxhYmVsIiwiY3VzdG9tSWQiLCJjdXN0b21faWQiLCJzdHlsZSIsImVtb2ppIiwiZGlzYWJsZWQiLCJza3VJZCIsInNrdV9pZCIsImlucHV0IiwidmFsdWUiLCJyZXF1aXJlZCIsInBsYWNlaG9sZGVyIiwibWluTGVuZ3RoIiwibWluX2xlbmd0aCIsIm1heExlbmd0aCIsIm1heF9sZW5ndGgiLCJzZWxlY3QiLCJ2YWx1ZXMiLCJtaW5WYWx1ZXMiLCJtaW5fdmFsdWVzIiwibWF4VmFsdWVzIiwibWF4X3ZhbHVlcyIsImRlZmF1bHRWYWx1ZXMiLCJkZWZhdWx0X3ZhbHVlcyIsImRlZmF1bHRWYWx1ZSIsImNoYW5uZWxUeXBlcyIsImNoYW5uZWxfdHlwZXMiLCJvcHRpb25zIiwib3B0aW9uIiwidW5kZWZpbmVkIiwibmFtZSIsImFuaW1hdGVkIiwiZGVmYXVsdCIsInNlY3Rpb24iLCJhY2Nlc3NvcnkiLCJ0aHVtYm5haWwiLCJtZWRpYUdhbGxlcnkiLCJpdGVtcyIsIml0ZW0iLCJmaWxlIiwic2l6ZSIsInRleHREaXNwbGF5IiwiY29udGVudCIsInNlcGFyYXRvciIsImRpdmlkZXIiLCJzcGFjaW5nIiwiZmlsZVVwbG9hZCJdLCJtYXBwaW5ncyI6IkFBQUEsU0F1QkVBLHFCQUFxQixRQUNoQixvQkFBb0I7QUFJM0IsT0FBTyxTQUFTQyxtQkFBbUJDLEdBQVEsRUFBRUMsT0FBc0Y7SUFDakksSUFBSUM7SUFFSixrSUFBa0k7SUFDbEksT0FBUUQsUUFBUUUsSUFBSTtRQUNsQixLQUFLTCxzQkFBc0JNLFNBQVM7WUFDbENGLFlBQVlHLG1CQUFtQkwsS0FBS0M7WUFDcEM7UUFDRixLQUFLSCxzQkFBc0JRLE1BQU07WUFDL0JKLFlBQVlLLHlCQUF5QlAsS0FBS0M7WUFDMUM7UUFDRixLQUFLSCxzQkFBc0JVLFNBQVM7WUFDbENOLFlBQVlPLDRCQUE0QlQsS0FBS0M7WUFDN0M7UUFDRixLQUFLSCxzQkFBc0JZLFNBQVM7WUFDbENSLFlBQVlTLDRCQUE0QlgsS0FBS0M7WUFDN0M7UUFDRixLQUFLSCxzQkFBc0JjLFlBQVk7UUFDdkMsS0FBS2Qsc0JBQXNCZSxVQUFVO1FBQ3JDLEtBQUtmLHNCQUFzQmdCLFVBQVU7UUFDckMsS0FBS2hCLHNCQUFzQmlCLGlCQUFpQjtRQUM1QyxLQUFLakIsc0JBQXNCa0IsYUFBYTtZQUN0Q2QsWUFBWWUsNkJBQTZCakIsS0FBS0M7WUFDOUM7UUFDRixLQUFLSCxzQkFBc0JvQixPQUFPO1lBQ2hDaEIsWUFBWWlCLDBCQUEwQm5CLEtBQUtDO1lBQzNDO1FBQ0YsS0FBS0gsc0JBQXNCc0IsU0FBUztZQUNsQ2xCLFlBQVltQiw0QkFBNEJyQixLQUFLQztZQUM3QztRQUNGLEtBQUtILHNCQUFzQndCLFlBQVk7WUFDckNwQixZQUFZcUIsK0JBQStCdkIsS0FBS0M7WUFDaEQ7UUFDRixLQUFLSCxzQkFBc0IwQixJQUFJO1lBQzdCdEIsWUFBWXVC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
409
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFuc2Zvcm1lcnMvY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHR5cGUgRGlzY29yZEFjdGlvblJvdyxcbiAgdHlwZSBEaXNjb3JkQnV0dG9uQ29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRDaGFubmVsU2VsZWN0Q29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRDaGFubmVsU2VsZWN0SW50ZXJhY3Rpb25SZXNwb25zZUZyb21Nb2RhbCxcbiAgdHlwZSBEaXNjb3JkQ2hlY2tib3hDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZENoZWNrYm94R3JvdXBDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZENoZWNrYm94R3JvdXBJbnRlcmFjdGlvblJlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRDaGVja2JveEludGVyYWN0aW9uUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZENvbnRhaW5lckNvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkRmlsZUNvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkRmlsZVVwbG9hZENvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkRmlsZVVwbG9hZEludGVyYWN0aW9uUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZExhYmVsQ29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRMYWJlbEludGVyYWN0aW9uUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZE1lZGlhR2FsbGVyeUNvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkTWVkaWFHYWxsZXJ5SXRlbSxcbiAgdHlwZSBEaXNjb3JkTWVudGlvbmFibGVTZWxlY3RDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZE1lbnRpb25hYmxlU2VsZWN0SW50ZXJhY3Rpb25SZXNwb25zZUZyb21Nb2RhbCxcbiAgdHlwZSBEaXNjb3JkTWVzc2FnZUNvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkTWVzc2FnZUNvbXBvbmVudEZyb21Nb2RhbEludGVyYWN0aW9uUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZFJhZGlvR3JvdXBDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZFJhZGlvR3JvdXBJbnRlcmFjdGlvblJlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRSb2xlU2VsZWN0Q29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRSb2xlU2VsZWN0SW50ZXJhY3Rpb25SZXNwb25zZUZyb21Nb2RhbCxcbiAgdHlwZSBEaXNjb3JkU2VjdGlvbkNvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkU2VwYXJhdG9yQ29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRTdHJpbmdTZWxlY3RDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZFN0cmluZ1NlbGVjdEludGVyYWN0aW9uUmVzcG9uc2VGcm9tTW9kYWwsXG4gIHR5cGUgRGlzY29yZFRleHREaXNwbGF5Q29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRUZXh0RGlzcGxheUludGVyYWN0aW9uUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZFRleHRJbnB1dENvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkVGV4dElucHV0SW50ZXJhY3Rpb25SZXNwb25zZSxcbiAgdHlwZSBEaXNjb3JkVGh1bWJuYWlsQ29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRVbmZ1cmxlZE1lZGlhSXRlbSxcbiAgdHlwZSBEaXNjb3JkVXNlclNlbGVjdENvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkVXNlclNlbGVjdEludGVyYWN0aW9uUmVzcG9uc2VGcm9tTW9kYWwsXG4gIE1lc3NhZ2VDb21wb25lbnRUeXBlcyxcbn0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBCb3QgfSBmcm9tICcuLi9ib3QuanMnO1xuaW1wb3J0IHR5cGUgeyBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yLCBTZXR1cERlc2lyZWRQcm9wcywgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMgfSBmcm9tICcuLi9kZXNpcmVkUHJvcGVydGllcy5qcyc7XG5pbXBvcnQgeyBjYWxsQ3VzdG9taXplciB9IGZyb20gJy4uL3RyYW5zZm9ybWVycy5qcyc7XG5pbXBvcnQgeyBUb2dnbGVCaXRmaWVsZCB9IGZyb20gJy4vdG9nZ2xlcy9Ub2dnbGVCaXRmaWVsZC5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudCwgTWVkaWFHYWxsZXJ5SXRlbSwgVW5mdXJsZWRNZWRpYUl0ZW0gfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybUNvbXBvbmVudChcbiAgYm90OiBCb3QsXG4gIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZE1lc3NhZ2VDb21wb25lbnQgfCBEaXNjb3JkTWVzc2FnZUNvbXBvbmVudEZyb21Nb2RhbEludGVyYWN0aW9uUmVzcG9uc2U+LFxuICBleHRyYT86IHsgcGFydGlhbD86IGJvb2xlYW4gfSxcbikge1xuICBsZXQgY29tcG9uZW50OiBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICAvLyBUaGVyZSdzIG5vdGhpbmcgdG8gZG8gd2l0aCBhIGNvbXBvbmVudCB3aXRob3V0IGEgdHlwZSwgYXMgaXQgbWVhbnMgYW4gaXNzdWUgb24gRGlzY29yZCwgc28gd2UganVzdCB0aHJvdyBhbiBlcnJvclxuICBpZiAoIXBheWxvYWQudHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgW0Rpc2NvcmRlbm9dIFJlY2VpdmVkIGEgY29tcG9uZW50IHBheWxvYWQgd2l0aG91dCBhIHR5cGUgaW4gdGhlIGNvbXBvbmVudCB0cmFuc2Zvcm1lci5gKTtcbiAgfVxuXG4gIC8vIFRoaXMgc3dpdGNoIGlzIGV4aGF1c3RpdmUsIHNvIHdlIGRvbnQgbmVlZCB0aGUgZGVmYXVsdCBjYXNlIGFuZCBUUyBkb2VzIG5vdCBlcnJvciBvdXQgZm9yIHRoZSB1bi1pbml0aWFsaXplZCBjb21wb25lbnQgdmFyaWFibGVcbiAgc3dpdGNoIChwYXlsb2FkLnR5cGUpIHtcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5BY3Rpb25Sb3c6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1BY3Rpb25Sb3coYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLkJ1dHRvbjpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybUJ1dHRvbkNvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuQ29udGFpbmVyOlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtQ29udGFpbmVyQ29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5UZXh0SW5wdXQ6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1JbnB1dFRleHRDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLlN0cmluZ1NlbGVjdDpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybVN0cmluZ1NlbGVjdE1lbnVDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLlVzZXJTZWxlY3Q6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1Vc2VyU2VsZWN0TWVudUNvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuUm9sZVNlbGVjdDpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybVJvbGVTZWxlY3RNZW51Q29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5NZW50aW9uYWJsZVNlbGVjdDpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybU1lbnRpb25hYmxlU2VsZWN0TWVudUNvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuQ2hhbm5lbFNlbGVjdDpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybUNoYW5uZWxTZWxlY3RNZW51Q29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5TZWN0aW9uOlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtU2VjdGlvbkNvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuVGh1bWJuYWlsOlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtVGh1bWJuYWlsQ29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5NZWRpYUdhbGxlcnk6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1NZWRpYUdhbGxlcnlDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLkZpbGU6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1GaWxlQ29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5TZXBhcmF0b3I6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1TZXBhcmF0b3JDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLlRleHREaXNwbGF5OlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtVGV4dERpc3BsYXlDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLkxhYmVsOlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtTGFiZWxDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLkZpbGVVcGxvYWQ6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1GaWxlVXBsb2FkQ29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5SYWRpb0dyb3VwOlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtUmFkaW9Hcm91cENvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuQ2hlY2tib3hHcm91cDpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybUNoZWNrYm94R3JvdXBDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLkNoZWNrYm94OlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtQ2hlY2tib3hDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGNhbGxDdXN0b21pemVyKCdjb21wb25lbnQnLCBib3QsIHBheWxvYWQsIGNvbXBvbmVudCwge1xuICAgIHBhcnRpYWw6IGV4dHJhPy5wYXJ0aWFsID8/IGZhbHNlLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVVuZnVybGVkTWVkaWFJdGVtKGJvdDogQm90LCBwYXlsb2FkOiBQYXJ0aWFsPERpc2NvcmRVbmZ1cmxlZE1lZGlhSXRlbT4sIGV4dHJhPzogeyBwYXJ0aWFsPzogYm9vbGVhbiB9KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy51bmZ1cmxlZE1lZGlhSXRlbTtcbiAgY29uc3QgbWVkaWFJdGVtID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8VW5mdXJsZWRNZWRpYUl0ZW0sIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudXJsICYmIHBheWxvYWQudXJsKSBtZWRpYUl0ZW0udXJsID0gcGF5bG9hZC51cmw7XG4gIGlmIChwcm9wcy5wcm94eVVybCAmJiBwYXlsb2FkLnByb3h5X3VybCkgbWVkaWFJdGVtLnByb3h5VXJsID0gcGF5bG9hZC5wcm94eV91cmw7XG4gIGlmIChwcm9wcy5oZWlnaHQgJiYgcGF5bG9hZC5oZWlnaHQpIG1lZGlhSXRlbS5oZWlnaHQgPSBwYXlsb2FkLmhlaWdodDtcbiAgaWYgKHByb3BzLndpZHRoICYmIHBheWxvYWQud2lkdGgpIG1lZGlhSXRlbS53aWR0aCA9IHBheWxvYWQud2lkdGg7XG4gIGlmIChwcm9wcy5wbGFjZWhvbGRlciAmJiBwYXlsb2FkLnBsYWNlaG9sZGVyKSBtZWRpYUl0ZW0ucGxhY2Vob2xkZXIgPSBwYXlsb2FkLnBsYWNlaG9sZGVyO1xuICBpZiAocHJvcHMucGxhY2Vob2xkZXJWZXJzaW9uICYmIHBheWxvYWQucGxhY2Vob2xkZXJfdmVyc2lvbikgbWVkaWFJdGVtLnBsYWNlaG9sZGVyVmVyc2lvbiA9IHBheWxvYWQucGxhY2Vob2xkZXJfdmVyc2lvbjtcbiAgaWYgKHByb3BzLmNvbnRlbnRUeXBlICYmIHBheWxvYWQuY29udGVudF90eXBlKSBtZWRpYUl0ZW0uY29udGVudFR5cGUgPSBwYXlsb2FkLmNvbnRlbnRfdHlwZTtcbiAgaWYgKHByb3BzLmZsYWdzICYmIHBheWxvYWQuZmxhZ3MpIG1lZGlhSXRlbS5mbGFncyA9IG5ldyBUb2dnbGVCaXRmaWVsZChwYXlsb2FkLmZsYWdzKTtcbiAgaWYgKHByb3BzLmF0dGFjaG1lbnRJZCAmJiBwYXlsb2FkLmF0dGFjaG1lbnRfaWQpIG1lZGlhSXRlbS5hdHRhY2htZW50SWQgPSBib3QudHJhbnNmb3JtZXJzLnNub3dmbGFrZShwYXlsb2FkLmF0dGFjaG1lbnRfaWQpO1xuXG4gIHJldHVybiBjYWxsQ3VzdG9taXplcigndW5mdXJsZWRNZWRpYUl0ZW0nLCBib3QsIHBheWxvYWQsIG1lZGlhSXRlbSwge1xuICAgIHBhcnRpYWw6IGV4dHJhPy5wYXJ0aWFsID8/IGZhbHNlLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybU1lZGlhR2FsbGVyeUl0ZW0oYm90OiBCb3QsIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZE1lZGlhR2FsbGVyeUl0ZW0+LCBleHRyYT86IHsgcGFydGlhbD86IGJvb2xlYW4gfSkge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMubWVkaWFHYWxsZXJ5SXRlbTtcbiAgY29uc3QgZ2FsbGVyeUl0ZW0gPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxNZWRpYUdhbGxlcnlJdGVtLCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLm1lZGlhICYmIHBheWxvYWQubWVkaWEpIGdhbGxlcnlJdGVtLm1lZGlhID0gYm90LnRyYW5zZm9ybWVycy51bmZ1cmxlZE1lZGlhSXRlbShib3QsIHBheWxvYWQubWVkaWEpO1xuICBpZiAocHJvcHMuZGVzY3JpcHRpb24gJiYgcGF5bG9hZC5kZXNjcmlwdGlvbikgZ2FsbGVyeUl0ZW0uZGVzY3JpcHRpb24gPSBwYXlsb2FkLmRlc2NyaXB0aW9uO1xuICBpZiAocHJvcHMuc3BvaWxlciAmJiBwYXlsb2FkLnNwb2lsZXIpIGdhbGxlcnlJdGVtLnNwb2lsZXIgPSBwYXlsb2FkLnNwb2lsZXI7XG5cbiAgcmV0dXJuIGNhbGxDdXN0b21pemVyKCdtZWRpYUdhbGxlcnlJdGVtJywgYm90LCBwYXlsb2FkLCBnYWxsZXJ5SXRlbSwge1xuICAgIHBhcnRpYWw6IGV4dHJhPy5wYXJ0aWFsID8/IGZhbHNlLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtQWN0aW9uUm93KGJvdDogQm90LCBwYXlsb2FkOiBQYXJ0aWFsPERpc2NvcmRBY3Rpb25Sb3c+KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IGFjdGlvblJvdyA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgYWN0aW9uUm93LnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBhY3Rpb25Sb3cuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuY29tcG9uZW50cyAmJiBwYXlsb2FkLmNvbXBvbmVudHMpXG4gICAgYWN0aW9uUm93LmNvbXBvbmVudHMgPSBwYXlsb2FkLmNvbXBvbmVudHMubWFwKChjb21wb25lbnQpID0+IGJvdC50cmFuc2Zvcm1lcnMuY29tcG9uZW50KGJvdCwgY29tcG9uZW50KSk7XG5cbiAgcmV0dXJuIGFjdGlvblJvdztcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtQ29udGFpbmVyQ29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBQYXJ0aWFsPERpc2NvcmRDb250YWluZXJDb21wb25lbnQ+KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IGNvbnRhaW5lciA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgY29udGFpbmVyLnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBjb250YWluZXIuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuYWNjZW50Q29sb3IgJiYgcGF5bG9hZC5hY2NlbnRfY29sb3IpIGNvbnRhaW5lci5hY2NlbnRDb2xvciA9IHBheWxvYWQuYWNjZW50X2NvbG9yO1xuICBpZiAocHJvcHMuc3BvaWxlciAmJiBwYXlsb2FkLnNwb2lsZXIpIGNvbnRhaW5lci5zcG9pbGVyID0gcGF5bG9hZC5zcG9pbGVyO1xuICBpZiAocHJvcHMuY29tcG9uZW50cyAmJiBwYXlsb2FkLmNvbXBvbmVudHMpXG4gICAgY29udGFpbmVyLmNvbXBvbmVudHMgPSBwYXlsb2FkLmNvbXBvbmVudHMubWFwKChjb21wb25lbnQpID0+IGJvdC50cmFuc2Zvcm1lcnMuY29tcG9uZW50KGJvdCwgY29tcG9uZW50KSk7XG5cbiAgcmV0dXJuIGNvbnRhaW5lcjtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtQnV0dG9uQ29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBQYXJ0aWFsPERpc2NvcmRCdXR0b25Db21wb25lbnQ+KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IGJ1dHRvbiA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgYnV0dG9uLnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBidXR0b24uaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMubGFiZWwgJiYgcGF5bG9hZC5sYWJlbCkgYnV0dG9uLmxhYmVsID0gcGF5bG9hZC5sYWJlbDtcbiAgaWYgKHByb3BzLmN1c3RvbUlkICYmIHBheWxvYWQuY3VzdG9tX2lkKSBidXR0b24uY3VzdG9tSWQgPSBwYXlsb2FkLmN1c3RvbV9pZDtcbiAgaWYgKHByb3BzLnN0eWxlICYmIHBheWxvYWQuc3R5bGUpIGJ1dHRvbi5zdHlsZSA9IHBheWxvYWQuc3R5bGU7XG4gIGlmIChwcm9wcy5lbW9qaSAmJiBwYXlsb2FkLmVtb2ppKSBidXR0b24uZW1vamkgPSBib3QudHJhbnNmb3JtZXJzLmVtb2ppKGJvdCwgcGF5bG9hZC5lbW9qaSwgeyBwYXJ0aWFsOiB0cnVlIH0pO1xuICBpZiAocHJvcHMudXJsICYmIHBheWxvYWQudXJsKSBidXR0b24udXJsID0gcGF5bG9hZC51cmw7XG4gIGlmIChwcm9wcy5kaXNhYmxlZCAmJiBwYXlsb2FkLmRpc2FibGVkKSBidXR0b24uZGlzYWJsZWQgPSBwYXlsb2FkLmRpc2FibGVkO1xuICBpZiAocHJvcHMuc2t1SWQgJiYgcGF5bG9hZC5za3VfaWQpIGJ1dHRvbi5za3VJZCA9IGJvdC50cmFuc2Zvcm1lcnMuc25vd2ZsYWtlKHBheWxvYWQuc2t1X2lkKTtcblxuICByZXR1cm4gYnV0dG9uO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1JbnB1dFRleHRDb21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZFRleHRJbnB1dENvbXBvbmVudCB8IERpc2NvcmRUZXh0SW5wdXRJbnRlcmFjdGlvblJlc3BvbnNlPikge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBpbnB1dCA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgaW5wdXQudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIGlucHV0LmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLnZhbHVlICYmIHBheWxvYWQudmFsdWUpIGlucHV0LnZhbHVlID0gcGF5bG9hZC52YWx1ZTtcbiAgaWYgKHByb3BzLmN1c3RvbUlkICYmIHBheWxvYWQuY3VzdG9tX2lkKSBpbnB1dC5jdXN0b21JZCA9IHBheWxvYWQuY3VzdG9tX2lkO1xuXG4gIC8vIFdlIGFzc3VtZSB0aGF0IGlmIHdlIGZpbmQgJ3ZhbHVlcycgaXQgaXMgdGhlIGludGVyYWN0aW9uIHJlc3BvbnNlXG4gIGlmICgnc3R5bGUnIGluIHBheWxvYWQpIHtcbiAgICBpZiAocHJvcHMuc3R5bGUgJiYgcGF5bG9hZC5zdHlsZSkgaW5wdXQuc3R5bGUgPSBwYXlsb2FkLnN0eWxlO1xuICAgIGlmIChwcm9wcy5yZXF1aXJlZCAmJiBwYXlsb2FkLnJlcXVpcmVkKSBpbnB1dC5yZXF1aXJlZCA9IHBheWxvYWQucmVxdWlyZWQ7XG4gICAgaWYgKHByb3BzLmxhYmVsICYmIHBheWxvYWQubGFiZWwpIGlucHV0LmxhYmVsID0gcGF5bG9hZC5sYWJlbDtcbiAgICBpZiAocHJvcHMucGxhY2Vob2xkZXIgJiYgcGF5bG9hZC5wbGFjZWhvbGRlcikgaW5wdXQucGxhY2Vob2xkZXIgPSBwYXlsb2FkLnBsYWNlaG9sZGVyO1xuICAgIGlmIChwcm9wcy5taW5MZW5ndGggJiYgcGF5bG9hZC5taW5fbGVuZ3RoKSBpbnB1dC5taW5MZW5ndGggPSBwYXlsb2FkLm1pbl9sZW5ndGg7XG4gICAgaWYgKHByb3BzLm1heExlbmd0aCAmJiBwYXlsb2FkLm1heF9sZW5ndGgpIGlucHV0Lm1heExlbmd0aCA9IHBheWxvYWQubWF4X2xlbmd0aDtcbiAgfVxuXG4gIHJldHVybiBpbnB1dDtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtU3RyaW5nU2VsZWN0TWVudUNvbXBvbmVudChcbiAgYm90OiBCb3QsXG4gIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZFN0cmluZ1NlbGVjdENvbXBvbmVudCB8IERpc2NvcmRTdHJpbmdTZWxlY3RJbnRlcmFjdGlvblJlc3BvbnNlRnJvbU1vZGFsPixcbikge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBzZWxlY3QgPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIHNlbGVjdC50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgc2VsZWN0LmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmN1c3RvbUlkICYmIHBheWxvYWQuY3VzdG9tX2lkKSBzZWxlY3QuY3VzdG9tSWQgPSBwYXlsb2FkLmN1c3RvbV9pZDtcblxuICAvLyBXZSBhc3N1bWUgdGhhdCBpZiB3ZSBmaW5kICd2YWx1ZXMnIGl0IGlzIHRoZSBpbnRlcmFjdGlvbiByZXNwb25zZVxuICBpZiAoJ3ZhbHVlcycgaW4gcGF5bG9hZCkge1xuICAgIGlmIChwcm9wcy52YWx1ZXMgJiYgcGF5bG9hZC52YWx1ZXMpIHNlbGVjdC52YWx1ZXMgPSBwYXlsb2FkLnZhbHVlcztcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBfcGF5bG9hZCA9IHBheWxvYWQgYXMgUGFydGlhbDxEaXNjb3JkU3RyaW5nU2VsZWN0Q29tcG9uZW50PjtcblxuICAgIGlmIChwcm9wcy5wbGFjZWhvbGRlciAmJiBfcGF5bG9hZC5wbGFjZWhvbGRlcikgc2VsZWN0LnBsYWNlaG9sZGVyID0gX3BheWxvYWQucGxhY2Vob2xkZXI7XG4gICAgaWYgKHByb3BzLm1pblZhbHVlcyAmJiBfcGF5bG9hZC5taW5fdmFsdWVzKSBzZWxlY3QubWluVmFsdWVzID0gX3BheWxvYWQubWluX3ZhbHVlcztcbiAgICBpZiAocHJvcHMubWF4VmFsdWVzICYmIF9wYXlsb2FkLm1heF92YWx1ZXMpIHNlbGVjdC5tYXhWYWx1ZXMgPSBfcGF5bG9hZC5tYXhfdmFsdWVzO1xuICAgIGlmIChwcm9wcy5vcHRpb25zICYmIF9wYXlsb2FkLm9wdGlvbnMpXG4gICAgICBzZWxlY3Qub3B0aW9ucyA9IF9wYXlsb2FkLm9wdGlvbnMubWFwKChvcHRpb24pID0+ICh7XG4gICAgICAgIGxhYmVsOiBvcHRpb24ubGFiZWwsXG4gICAgICAgIHZhbHVlOiBvcHRpb24udmFsdWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb24uZGVzY3JpcHRpb24sXG4gICAgICAgIGVtb2ppOiBvcHRpb24uZW1vamkgPyBib3QudHJhbnNmb3JtZXJzLmVtb2ppKGJvdCwgb3B0aW9uLmVtb2ppLCB7IHBhcnRpYWw6IHRydWUgfSkgOiB1bmRlZmluZWQsXG4gICAgICAgIGRlZmF1bHQ6IG9wdGlvbi5kZWZhdWx0LFxuICAgICAgfSkpO1xuICAgIGlmIChwcm9wcy5kaXNhYmxlZCAmJiBfcGF5bG9hZC5kaXNhYmxlZCkgc2VsZWN0LmRpc2FibGVkID0gX3BheWxvYWQuZGlzYWJsZWQ7XG4gIH1cblxuICByZXR1cm4gc2VsZWN0O1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Vc2VyU2VsZWN0TWVudUNvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogUGFydGlhbDxEaXNjb3JkVXNlclNlbGVjdENvbXBvbmVudCB8IERpc2NvcmRVc2VyU2VsZWN0SW50ZXJhY3Rpb25SZXNwb25zZUZyb21Nb2RhbD4pIHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3Qgc2VsZWN0ID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8Q29tcG9uZW50LCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLnR5cGUgJiYgcGF5bG9hZC50eXBlKSBzZWxlY3QudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIHNlbGVjdC5pZCA9IHBheWxvYWQuaWQ7XG4gIGlmIChwcm9wcy5jdXN0b21JZCAmJiBwYXlsb2FkLmN1c3RvbV9pZCkgc2VsZWN0LmN1c3RvbUlkID0gcGF5bG9hZC5jdXN0b21faWQ7XG5cbiAgLy8gV2UgYXNzdW1lIHRoYXQgaWYgd2UgZmluZCAndmFsdWVzJyBpdCBpcyB0aGUgaW50ZXJhY3Rpb24gcmVzcG9uc2VcbiAgaWYgKCd2YWx1ZXMnIGluIHBheWxvYWQpIHtcbiAgICBpZiAocHJvcHMudmFsdWVzICYmIHBheWxvYWQudmFsdWVzKSBzZWxlY3QudmFsdWVzID0gcGF5bG9hZC52YWx1ZXM7XG4gICAgaWYgKHByb3BzLnJlc29sdmVkICYmIHBheWxvYWQucmVzb2x2ZWQpIHNlbGVjdC5yZXNvbHZlZCA9IGJvdC50cmFuc2Zvcm1lcnMuaW50ZXJhY3Rpb25EYXRhUmVzb2x2ZWQoYm90LCBwYXlsb2FkLnJlc29sdmVkKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBfcGF5bG9hZCA9IHBheWxvYWQgYXMgUGFydGlhbDxEaXNjb3JkVXNlclNlbGVjdENvbXBvbmVudD47XG5cbiAgICBpZiAocHJvcHMucGxhY2Vob2xkZXIgJiYgX3BheWxvYWQucGxhY2Vob2xkZXIpIHNlbGVjdC5wbGFjZWhvbGRlciA9IF9wYXlsb2FkLnBsYWNlaG9sZGVyO1xuICAgIGlmIChwcm9wcy5taW5WYWx1ZXMgJiYgX3BheWxvYWQubWluX3ZhbHVlcykgc2VsZWN0Lm1pblZhbHVlcyA9IF9wYXlsb2FkLm1pbl92YWx1ZXM7XG4gICAgaWYgKHByb3BzLm1heFZhbHVlcyAmJiBfcGF5bG9hZC5tYXhfdmFsdWVzKSBzZWxlY3QubWF4VmFsdWVzID0gX3BheWxvYWQubWF4X3ZhbHVlcztcbiAgICBpZiAocHJvcHMuZGVmYXVsdFZhbHVlcyAmJiBfcGF5bG9hZC5kZWZhdWx0X3ZhbHVlcylcbiAgICAgIHNlbGVjdC5kZWZhdWx0VmFsdWVzID0gX3BheWxvYWQuZGVmYXVsdF92YWx1ZXMubWFwKChkZWZhdWx0VmFsdWUpID0+ICh7XG4gICAgICAgIGlkOiBib3QudHJhbnNmb3JtZXJzLnNub3dmbGFrZShkZWZhdWx0VmFsdWUuaWQpLFxuICAgICAgICB0eXBlOiBkZWZhdWx0VmFsdWUudHlwZSxcbiAgICAgIH0pKTtcbiAgICBpZiAocHJvcHMuZGlzYWJsZWQgJiYgX3BheWxvYWQuZGlzYWJsZWQpIHNlbGVjdC5kaXNhYmxlZCA9IF9wYXlsb2FkLmRpc2FibGVkO1xuICB9XG5cbiAgcmV0dXJuIHNlbGVjdDtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtUm9sZVNlbGVjdE1lbnVDb21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZFJvbGVTZWxlY3RDb21wb25lbnQgfCBEaXNjb3JkUm9sZVNlbGVjdEludGVyYWN0aW9uUmVzcG9uc2VGcm9tTW9kYWw+KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IHNlbGVjdCA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgc2VsZWN0LnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBzZWxlY3QuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuY3VzdG9tSWQgJiYgcGF5bG9hZC5jdXN0b21faWQpIHNlbGVjdC5jdXN0b21JZCA9IHBheWxvYWQuY3VzdG9tX2lkO1xuXG4gIC8vIFdlIGFzc3VtZSB0aGF0IGlmIHdlIGZpbmQgJ3ZhbHVlcycgaXQgaXMgdGhlIGludGVyYWN0aW9uIHJlc3BvbnNlXG4gIGlmICgndmFsdWVzJyBpbiBwYXlsb2FkKSB7XG4gICAgaWYgKHByb3BzLnZhbHVlcyAmJiBwYXlsb2FkLnZhbHVlcykgc2VsZWN0LnZhbHVlcyA9IHBheWxvYWQudmFsdWVzO1xuICAgIGlmIChwcm9wcy5yZXNvbHZlZCAmJiBwYXlsb2FkLnJlc29sdmVkKSBzZWxlY3QucmVzb2x2ZWQgPSBib3QudHJhbnNmb3JtZXJzLmludGVyYWN0aW9uRGF0YVJlc29sdmVkKGJvdCwgcGF5bG9hZC5yZXNvbHZlZCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgX3BheWxvYWQgPSBwYXlsb2FkIGFzIFBhcnRpYWw8RGlzY29yZFJvbGVTZWxlY3RDb21wb25lbnQ+O1xuXG4gICAgaWYgKHByb3BzLnBsYWNlaG9sZGVyICYmIF9wYXlsb2FkLnBsYWNlaG9sZGVyKSBzZWxlY3QucGxhY2Vob2xkZXIgPSBfcGF5bG9hZC5wbGFjZWhvbGRlcjtcbiAgICBpZiAocHJvcHMubWluVmFsdWVzICYmIF9wYXlsb2FkLm1pbl92YWx1ZXMpIHNlbGVjdC5taW5WYWx1ZXMgPSBfcGF5bG9hZC5taW5fdmFsdWVzO1xuICAgIGlmIChwcm9wcy5tYXhWYWx1ZXMgJiYgX3BheWxvYWQubWF4X3ZhbHVlcykgc2VsZWN0Lm1heFZhbHVlcyA9IF9wYXlsb2FkLm1heF92YWx1ZXM7XG4gICAgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZXMgJiYgX3BheWxvYWQuZGVmYXVsdF92YWx1ZXMpXG4gICAgICBzZWxlY3QuZGVmYXVsdFZhbHVlcyA9IF9wYXlsb2FkLmRlZmF1bHRfdmFsdWVzLm1hcCgoZGVmYXVsdFZhbHVlKSA9PiAoe1xuICAgICAgICBpZDogYm90LnRyYW5zZm9ybWVycy5zbm93Zmxha2UoZGVmYXVsdFZhbHVlLmlkKSxcbiAgICAgICAgdHlwZTogZGVmYXVsdFZhbHVlLnR5cGUsXG4gICAgICB9KSk7XG4gICAgaWYgKHByb3BzLmRpc2FibGVkICYmIF9wYXlsb2FkLmRpc2FibGVkKSBzZWxlY3QuZGlzYWJsZWQgPSBfcGF5bG9hZC5kaXNhYmxlZDtcbiAgfVxuXG4gIHJldHVybiBzZWxlY3Q7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybU1lbnRpb25hYmxlU2VsZWN0TWVudUNvbXBvbmVudChcbiAgYm90OiBCb3QsXG4gIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZE1lbnRpb25hYmxlU2VsZWN0Q29tcG9uZW50IHwgRGlzY29yZE1lbnRpb25hYmxlU2VsZWN0SW50ZXJhY3Rpb25SZXNwb25zZUZyb21Nb2RhbD4sXG4pIHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3Qgc2VsZWN0ID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8Q29tcG9uZW50LCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLnR5cGUgJiYgcGF5bG9hZC50eXBlKSBzZWxlY3QudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIHNlbGVjdC5pZCA9IHBheWxvYWQuaWQ7XG4gIGlmIChwcm9wcy5jdXN0b21JZCAmJiBwYXlsb2FkLmN1c3RvbV9pZCkgc2VsZWN0LmN1c3RvbUlkID0gcGF5bG9hZC5jdXN0b21faWQ7XG5cbiAgLy8gV2UgYXNzdW1lIHRoYXQgaWYgd2UgZmluZCAndmFsdWVzJyBpdCBpcyB0aGUgaW50ZXJhY3Rpb24gcmVzcG9uc2VcbiAgaWYgKCd2YWx1ZXMnIGluIHBheWxvYWQpIHtcbiAgICBpZiAocHJvcHMudmFsdWVzICYmIHBheWxvYWQudmFsdWVzKSBzZWxlY3QudmFsdWVzID0gcGF5bG9hZC52YWx1ZXM7XG4gICAgaWYgKHByb3BzLnJlc29sdmVkICYmIHBheWxvYWQucmVzb2x2ZWQpIHNlbGVjdC5yZXNvbHZlZCA9IGJvdC50cmFuc2Zvcm1lcnMuaW50ZXJhY3Rpb25EYXRhUmVzb2x2ZWQoYm90LCBwYXlsb2FkLnJlc29sdmVkKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBfcGF5bG9hZCA9IHBheWxvYWQgYXMgUGFydGlhbDxEaXNjb3JkTWVudGlvbmFibGVTZWxlY3RDb21wb25lbnQ+O1xuXG4gICAgaWYgKHByb3BzLnBsYWNlaG9sZGVyICYmIF9wYXlsb2FkLnBsYWNlaG9sZGVyKSBzZWxlY3QucGxhY2Vob2xkZXIgPSBfcGF5bG9hZC5wbGFjZWhvbGRlcjtcbiAgICBpZiAocHJvcHMubWluVmFsdWVzICYmIF9wYXlsb2FkLm1pbl92YWx1ZXMpIHNlbGVjdC5taW5WYWx1ZXMgPSBfcGF5bG9hZC5taW5fdmFsdWVzO1xuICAgIGlmIChwcm9wcy5tYXhWYWx1ZXMgJiYgX3BheWxvYWQubWF4X3ZhbHVlcykgc2VsZWN0Lm1heFZhbHVlcyA9IF9wYXlsb2FkLm1heF92YWx1ZXM7XG4gICAgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZXMgJiYgX3BheWxvYWQuZGVmYXVsdF92YWx1ZXMpXG4gICAgICBzZWxlY3QuZGVmYXVsdFZhbHVlcyA9IF9wYXlsb2FkLmRlZmF1bHRfdmFsdWVzLm1hcCgoZGVmYXVsdFZhbHVlKSA9PiAoe1xuICAgICAgICBpZDogYm90LnRyYW5zZm9ybWVycy5zbm93Zmxha2UoZGVmYXVsdFZhbHVlLmlkKSxcbiAgICAgICAgdHlwZTogZGVmYXVsdFZhbHVlLnR5cGUsXG4gICAgICB9KSk7XG4gICAgaWYgKHByb3BzLmRpc2FibGVkICYmIF9wYXlsb2FkLmRpc2FibGVkKSBzZWxlY3QuZGlzYWJsZWQgPSBfcGF5bG9hZC5kaXNhYmxlZDtcbiAgfVxuXG4gIHJldHVybiBzZWxlY3Q7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUNoYW5uZWxTZWxlY3RNZW51Q29tcG9uZW50KFxuICBib3Q6IEJvdCxcbiAgcGF5bG9hZDogUGFydGlhbDxEaXNjb3JkQ2hhbm5lbFNlbGVjdENvbXBvbmVudCB8IERpc2NvcmRDaGFubmVsU2VsZWN0SW50ZXJhY3Rpb25SZXNwb25zZUZyb21Nb2RhbD4sXG4pIHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3Qgc2VsZWN0ID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8Q29tcG9uZW50LCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLnR5cGUgJiYgcGF5bG9hZC50eXBlKSBzZWxlY3QudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIHNlbGVjdC5pZCA9IHBheWxvYWQuaWQ7XG4gIGlmIChwcm9wcy5jdXN0b21JZCAmJiBwYXlsb2FkLmN1c3RvbV9pZCkgc2VsZWN0LmN1c3RvbUlkID0gcGF5bG9hZC5jdXN0b21faWQ7XG5cbiAgLy8gV2UgYXNzdW1lIHRoYXQgaWYgd2UgZmluZCAndmFsdWVzJyBpdCBpcyB0aGUgaW50ZXJhY3Rpb24gcmVzcG9uc2VcbiAgaWYgKCd2YWx1ZXMnIGluIHBheWxvYWQpIHtcbiAgICBpZiAocHJvcHMudmFsdWVzICYmIHBheWxvYWQudmFsdWVzKSBzZWxlY3QudmFsdWVzID0gcGF5bG9hZC52YWx1ZXM7XG4gICAgaWYgKHByb3BzLnJlc29sdmVkICYmIHBheWxvYWQucmVzb2x2ZWQpIHNlbGVjdC5yZXNvbHZlZCA9IGJvdC50cmFuc2Zvcm1lcnMuaW50ZXJhY3Rpb25EYXRhUmVzb2x2ZWQoYm90LCBwYXlsb2FkLnJlc29sdmVkKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBfcGF5bG9hZCA9IHBheWxvYWQgYXMgUGFydGlhbDxEaXNjb3JkQ2hhbm5lbFNlbGVjdENvbXBvbmVudD47XG5cbiAgICBpZiAocHJvcHMucGxhY2Vob2xkZXIgJiYgX3BheWxvYWQucGxhY2Vob2xkZXIpIHNlbGVjdC5wbGFjZWhvbGRlciA9IF9wYXlsb2FkLnBsYWNlaG9sZGVyO1xuICAgIGlmIChwcm9wcy5taW5WYWx1ZXMgJiYgX3BheWxvYWQubWluX3ZhbHVlcykgc2VsZWN0Lm1pblZhbHVlcyA9IF9wYXlsb2FkLm1pbl92YWx1ZXM7XG4gICAgaWYgKHByb3BzLm1heFZhbHVlcyAmJiBfcGF5bG9hZC5tYXhfdmFsdWVzKSBzZWxlY3QubWF4VmFsdWVzID0gX3BheWxvYWQubWF4X3ZhbHVlcztcbiAgICBpZiAocHJvcHMuZGVmYXVsdFZhbHVlcyAmJiBfcGF5bG9hZC5kZWZhdWx0X3ZhbHVlcylcbiAgICAgIHNlbGVjdC5kZWZhdWx0VmFsdWVzID0gX3BheWxvYWQuZGVmYXVsdF92YWx1ZXMubWFwKChkZWZhdWx0VmFsdWUpID0+ICh7XG4gICAgICAgIGlkOiBib3QudHJhbnNmb3JtZXJzLnNub3dmbGFrZShkZWZhdWx0VmFsdWUuaWQpLFxuICAgICAgICB0eXBlOiBkZWZhdWx0VmFsdWUudHlwZSxcbiAgICAgIH0pKTtcbiAgICBpZiAocHJvcHMuY2hhbm5lbFR5cGVzICYmIF9wYXlsb2FkLmNoYW5uZWxfdHlwZXMpIHNlbGVjdC5jaGFubmVsVHlwZXMgPSBfcGF5bG9hZC5jaGFubmVsX3R5cGVzO1xuICAgIGlmIChwcm9wcy5kaXNhYmxlZCAmJiBfcGF5bG9hZC5kaXNhYmxlZCkgc2VsZWN0LmRpc2FibGVkID0gX3BheWxvYWQuZGlzYWJsZWQ7XG4gIH1cblxuICByZXR1cm4gc2VsZWN0O1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1TZWN0aW9uQ29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBQYXJ0aWFsPERpc2NvcmRTZWN0aW9uQ29tcG9uZW50Pikge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBzZWN0aW9uID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8Q29tcG9uZW50LCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLnR5cGUgJiYgcGF5bG9hZC50eXBlKSBzZWN0aW9uLnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBzZWN0aW9uLmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmNvbXBvbmVudHMgJiYgcGF5bG9hZC5jb21wb25lbnRzKSBzZWN0aW9uLmNvbXBvbmVudHMgPSBwYXlsb2FkLmNvbXBvbmVudHMubWFwKChjb21wb25lbnQpID0+IGJvdC50cmFuc2Zvcm1lcnMuY29tcG9uZW50KGJvdCwgY29tcG9uZW50KSk7XG4gIGlmIChwcm9wcy5hY2Nlc3NvcnkgJiYgcGF5bG9hZC5hY2Nlc3NvcnkpIHNlY3Rpb24uYWNjZXNzb3J5ID0gYm90LnRyYW5zZm9ybWVycy5jb21wb25lbnQoYm90LCBwYXlsb2FkLmFjY2Vzc29yeSk7XG5cbiAgcmV0dXJuIHNlY3Rpb247XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVRodW1ibmFpbENvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogUGFydGlhbDxEaXNjb3JkVGh1bWJuYWlsQ29tcG9uZW50Pikge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCB0aHVtYm5haWwgPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIHRodW1ibmFpbC50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgdGh1bWJuYWlsLmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLm1lZGlhICYmIHBheWxvYWQubWVkaWEpIHRodW1ibmFpbC5tZWRpYSA9IGJvdC50cmFuc2Zvcm1lcnMudW5mdXJsZWRNZWRpYUl0ZW0oYm90LCBwYXlsb2FkLm1lZGlhKTtcbiAgaWYgKHByb3BzLmRlc2NyaXB0aW9uICYmIHBheWxvYWQuZGVzY3JpcHRpb24pIHRodW1ibmFpbC5kZXNjcmlwdGlvbiA9IHBheWxvYWQuZGVzY3JpcHRpb247XG4gIGlmIChwcm9wcy5zcG9pbGVyICYmIHBheWxvYWQuc3BvaWxlcikgdGh1bWJuYWlsLnNwb2lsZXIgPSBwYXlsb2FkLnNwb2lsZXI7XG5cbiAgcmV0dXJuIHRodW1ibmFpbDtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtTWVkaWFHYWxsZXJ5Q29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBQYXJ0aWFsPERpc2NvcmRNZWRpYUdhbGxlcnlDb21wb25lbnQ+KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IG1lZGlhR2FsbGVyeSA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgbWVkaWFHYWxsZXJ5LnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBtZWRpYUdhbGxlcnkuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuaXRlbXMgJiYgcGF5bG9hZC5pdGVtcykgbWVkaWFHYWxsZXJ5Lml0ZW1zID0gcGF5bG9hZC5pdGVtcy5tYXAoKGl0ZW0pID0+IGJvdC50cmFuc2Zvcm1lcnMubWVkaWFHYWxsZXJ5SXRlbShib3QsIGl0ZW0pKTtcblxuICByZXR1cm4gbWVkaWFHYWxsZXJ5O1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1GaWxlQ29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBQYXJ0aWFsPERpc2NvcmRGaWxlQ29tcG9uZW50Pikge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBmaWxlID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8Q29tcG9uZW50LCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLnR5cGUgJiYgcGF5bG9hZC50eXBlKSBmaWxlLnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBmaWxlLmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmZpbGUgJiYgcGF5bG9hZC5maWxlKSBmaWxlLmZpbGUgPSBib3QudHJhbnNmb3JtZXJzLnVuZnVybGVkTWVkaWFJdGVtKGJvdCwgcGF5bG9hZC5maWxlKTtcbiAgaWYgKHByb3BzLnNwb2lsZXIgJiYgcGF5bG9hZC5zcG9pbGVyKSBmaWxlLnNwb2lsZXIgPSBwYXlsb2FkLnNwb2lsZXI7XG4gIGlmIChwcm9wcy5uYW1lICYmIHBheWxvYWQubmFtZSkgZmlsZS5uYW1lID0gcGF5bG9hZC5uYW1lO1xuICBpZiAocHJvcHMuc2l6ZSAmJiBwYXlsb2FkLnNpemUpIGZpbGUuc2l6ZSA9IHBheWxvYWQuc2l6ZTtcblxuICByZXR1cm4gZmlsZTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtVGV4dERpc3BsYXlDb21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZFRleHREaXNwbGF5Q29tcG9uZW50IHwgRGlzY29yZFRleHREaXNwbGF5SW50ZXJhY3Rpb25SZXNwb25zZT4pIHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3QgdGV4dERpc3BsYXkgPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIHRleHREaXNwbGF5LnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSB0ZXh0RGlzcGxheS5pZCA9IHBheWxvYWQuaWQ7XG4gIC8vIFdlIGFzc3VtZSB0aGF0IGlmIHdlIGZpbmQgJ2NvbnRlbnQnIGl0IGlzIHRoZSBjb21wb25lbnRcbiAgaWYgKCdjb250ZW50JyBpbiBwYXlsb2FkKSB7XG4gICAgaWYgKHByb3BzLmNvbnRlbnQgJiYgcGF5bG9hZC5jb250ZW50KSB0ZXh0RGlzcGxheS5jb250ZW50ID0gcGF5bG9hZC5jb250ZW50O1xuICB9XG5cbiAgcmV0dXJuIHRleHREaXNwbGF5O1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1TZXBhcmF0b3JDb21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZFNlcGFyYXRvckNvbXBvbmVudD4pIHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3Qgc2VwYXJhdG9yID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8Q29tcG9uZW50LCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLnR5cGUgJiYgcGF5bG9hZC50eXBlKSBzZXBhcmF0b3IudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIHNlcGFyYXRvci5pZCA9IHBheWxvYWQuaWQ7XG4gIGlmIChwcm9wcy5kaXZpZGVyICYmIHBheWxvYWQuZGl2aWRlcikgc2VwYXJhdG9yLmRpdmlkZXIgPSBwYXlsb2FkLmRpdmlkZXI7XG4gIGlmIChwcm9wcy5zcGFjaW5nICYmIHBheWxvYWQuc3BhY2luZykgc2VwYXJhdG9yLnNwYWNpbmcgPSBwYXlsb2FkLnNwYWNpbmc7XG5cbiAgcmV0dXJuIHNlcGFyYXRvcjtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtTGFiZWxDb21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZExhYmVsQ29tcG9uZW50IHwgRGlzY29yZExhYmVsSW50ZXJhY3Rpb25SZXNwb25zZT4pIHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3QgbGFiZWwgPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIGxhYmVsLnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBsYWJlbC5pZCA9IHBheWxvYWQuaWQ7XG4gIC8vIFdlIGFzc3VtZSB0aGF0IGlmIHdlIGZpbmQgJ2xhYmVsJyBpdCBpcyB0aGUgY29tcG9uZW50XG4gIGlmICgnbGFiZWwnIGluIHBheWxvYWQpIHtcbiAgICBpZiAocHJvcHMubGFiZWwgJiYgcGF5bG9hZC5sYWJlbCkgbGFiZWwubGFiZWwgPSBwYXlsb2FkLmxhYmVsO1xuICAgIGlmIChwcm9wcy5kZXNjcmlwdGlvbiAmJiBwYXlsb2FkLmRlc2NyaXB0aW9uKSBsYWJlbC5kZXNjcmlwdGlvbiA9IHBheWxvYWQuZGVzY3JpcHRpb247XG4gIH1cbiAgaWYgKHByb3BzLmNvbXBvbmVudCAmJiBwYXlsb2FkLmNvbXBvbmVudCkgbGFiZWwuY29tcG9uZW50ID0gYm90LnRyYW5zZm9ybWVycy5jb21wb25lbnQoYm90LCBwYXlsb2FkLmNvbXBvbmVudCk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1GaWxlVXBsb2FkQ29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBQYXJ0aWFsPERpc2NvcmRGaWxlVXBsb2FkQ29tcG9uZW50IHwgRGlzY29yZEZpbGVVcGxvYWRJbnRlcmFjdGlvblJlc3BvbnNlPikge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBmaWxlVXBsb2FkID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8Q29tcG9uZW50LCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLnR5cGUgJiYgcGF5bG9hZC50eXBlKSBmaWxlVXBsb2FkLnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBmaWxlVXBsb2FkLmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmN1c3RvbUlkICYmIHBheWxvYWQuY3VzdG9tX2lkKSBmaWxlVXBsb2FkLmN1c3RvbUlkID0gcGF5bG9hZC5jdXN0b21faWQ7XG5cbiAgLy8gV2UgYXNzdW1lIHRoYXQgaWYgd2UgZmluZCAndmFsdWVzJyBpdCBpcyB0aGUgaW50ZXJhY3Rpb24gcmVzcG9uc2VcbiAgaWYgKCd2YWx1ZXMnIGluIHBheWxvYWQpIHtcbiAgICBpZiAocHJvcHMudmFsdWVzICYmIHBheWxvYWQudmFsdWVzKSBmaWxlVXBsb2FkLnZhbHVlcyA9IHBheWxvYWQudmFsdWVzO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IF9wYXlsb2FkID0gcGF5bG9hZCBhcyBQYXJ0aWFsPERpc2NvcmRGaWxlVXBsb2FkQ29tcG9uZW50PjtcblxuICAgIGlmIChwcm9wcy5taW5WYWx1ZXMgJiYgX3BheWxvYWQubWluX3ZhbHVlcykgZmlsZVVwbG9hZC5taW5WYWx1ZXMgPSBfcGF5bG9hZC5taW5fdmFsdWVzO1xuICAgIGlmIChwcm9wcy5tYXhWYWx1ZXMgJiYgX3BheWxvYWQubWF4X3ZhbHVlcykgZmlsZVVwbG9hZC5tYXhWYWx1ZXMgPSBfcGF5bG9hZC5tYXhfdmFsdWVzO1xuICAgIGlmIChwcm9wcy5yZXF1aXJlZCAmJiBfcGF5bG9hZC5yZXF1aXJlZCkgZmlsZVVwbG9hZC5yZXF1aXJlZCA9IF9wYXlsb2FkLnJlcXVpcmVkO1xuICAgIGlmIChwcm9wcy5maWxlVHlwZXMgJiYgX3BheWxvYWQuZmlsZV90eXBlcykgZmlsZVVwbG9hZC5maWxlVHlwZXMgPSBfcGF5bG9hZC5maWxlX3R5cGVzO1xuICB9XG5cbiAgcmV0dXJuIGZpbGVVcGxvYWQ7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVJhZGlvR3JvdXBDb21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZFJhZGlvR3JvdXBDb21wb25lbnQgfCBEaXNjb3JkUmFkaW9Hcm91cEludGVyYWN0aW9uUmVzcG9uc2U+KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IHJhZGlvR3JvdXAgPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIHJhZGlvR3JvdXAudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIHJhZGlvR3JvdXAuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuY3VzdG9tSWQgJiYgcGF5bG9hZC5jdXN0b21faWQpIHJhZGlvR3JvdXAuY3VzdG9tSWQgPSBwYXlsb2FkLmN1c3RvbV9pZDtcblxuICAvLyBXZSBhc3N1bWUgdGhhdCBpZiB3ZSBmaW5kICdvcHRpb25zJyBpdCBpcyB0aGUgY29tcG9uZW50XG4gIGlmICgnb3B0aW9ucycgaW4gcGF5bG9hZCkge1xuICAgIGlmIChwcm9wcy5vcHRpb25zICYmIHBheWxvYWQub3B0aW9ucykgcmFkaW9Hcm91cC5vcHRpb25zID0gcGF5bG9hZC5vcHRpb25zO1xuICAgIGlmIChwcm9wcy5yZXF1aXJlZCAmJiBwYXlsb2FkLnJlcXVpcmVkICE9PSB1bmRlZmluZWQpIHJhZGlvR3JvdXAucmVxdWlyZWQgPSBwYXlsb2FkLnJlcXVpcmVkO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IF9wYXlsb2FkID0gcGF5bG9hZCBhcyBQYXJ0aWFsPERpc2NvcmRSYWRpb0dyb3VwSW50ZXJhY3Rpb25SZXNwb25zZT47XG5cbiAgICBpZiAocHJvcHMudmFsdWUpIHJhZGlvR3JvdXAudmFsdWUgPSBfcGF5bG9hZC52YWx1ZSA/PyB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gcmFkaW9Hcm91cDtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtQ2hlY2tib3hHcm91cENvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogUGFydGlhbDxEaXNjb3JkQ2hlY2tib3hHcm91cENvbXBvbmVudCB8IERpc2NvcmRDaGVja2JveEdyb3VwSW50ZXJhY3Rpb25SZXNwb25zZT4pIHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3QgY2hlY2tib3hHcm91cCA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgY2hlY2tib3hHcm91cC50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgY2hlY2tib3hHcm91cC5pZCA9IHBheWxvYWQuaWQ7XG4gIGlmIChwcm9wcy5jdXN0b21JZCAmJiBwYXlsb2FkLmN1c3RvbV9pZCkgY2hlY2tib3hHcm91cC5jdXN0b21JZCA9IHBheWxvYWQuY3VzdG9tX2lkO1xuXG4gIC8vIFdlIGFzc3VtZSB0aGF0IGlmIHdlIGZpbmQgJ29wdGlvbnMnIGl0IGlzIHRoZSBjb21wb25lbnRcbiAgaWYgKCdvcHRpb25zJyBpbiBwYXlsb2FkKSB7XG4gICAgaWYgKHByb3BzLm9wdGlvbnMgJiYgcGF5bG9hZC5vcHRpb25zKSBjaGVja2JveEdyb3VwLm9wdGlvbnMgPSBwYXlsb2FkLm9wdGlvbnM7XG4gICAgaWYgKHByb3BzLm1pblZhbHVlcyAmJiBwYXlsb2FkLm1pbl92YWx1ZXMgIT09IHVuZGVmaW5lZCkgY2hlY2tib3hHcm91cC5taW5WYWx1ZXMgPSBwYXlsb2FkLm1pbl92YWx1ZXM7XG4gICAgaWYgKHByb3BzLm1heFZhbHVlcyAmJiBwYXlsb2FkLm1heF92YWx1ZXMgIT09IHVuZGVmaW5lZCkgY2hlY2tib3hHcm91cC5tYXhWYWx1ZXMgPSBwYXlsb2FkLm1heF92YWx1ZXM7XG4gICAgaWYgKHByb3BzLnJlcXVpcmVkICYmIHBheWxvYWQucmVxdWlyZWQgIT09IHVuZGVmaW5lZCkgY2hlY2tib3hHcm91cC5yZXF1aXJlZCA9IHBheWxvYWQucmVxdWlyZWQ7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgX3BheWxvYWQgPSBwYXlsb2FkIGFzIFBhcnRpYWw8RGlzY29yZENoZWNrYm94R3JvdXBJbnRlcmFjdGlvblJlc3BvbnNlPjtcblxuICAgIGlmIChwcm9wcy52YWx1ZXMgJiYgX3BheWxvYWQudmFsdWVzKSBjaGVja2JveEdyb3VwLnZhbHVlcyA9IF9wYXlsb2FkLnZhbHVlcztcbiAgfVxuXG4gIHJldHVybiBjaGVja2JveEdyb3VwO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1DaGVja2JveENvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogUGFydGlhbDxEaXNjb3JkQ2hlY2tib3hDb21wb25lbnQgfCBEaXNjb3JkQ2hlY2tib3hJbnRlcmFjdGlvblJlc3BvbnNlPikge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBjaGVja2JveCA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgY2hlY2tib3gudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIGNoZWNrYm94LmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmN1c3RvbUlkICYmIHBheWxvYWQuY3VzdG9tX2lkKSBjaGVja2JveC5jdXN0b21JZCA9IHBheWxvYWQuY3VzdG9tX2lkO1xuXG4gIGlmIChwcm9wcy52YWx1ZSAmJiAndmFsdWUnIGluIHBheWxvYWQpIGNoZWNrYm94LnZhbHVlID0gcGF5bG9hZC52YWx1ZTtcbiAgaWYgKHByb3BzLmRlZmF1bHQgJiYgJ2RlZmF1bHQnIGluIHBheWxvYWQpIGNoZWNrYm94LmRlZmF1bHQgPSBwYXlsb2FkLmRlZmF1bHQ7XG5cbiAgcmV0dXJuIGNoZWNrYm94O1xufVxuIl0sIm5hbWVzIjpbIk1lc3NhZ2VDb21wb25lbnRUeXBlcyIsImNhbGxDdXN0b21pemVyIiwiVG9nZ2xlQml0ZmllbGQiLCJ0cmFuc2Zvcm1Db21wb25lbnQiLCJib3QiLCJwYXlsb2FkIiwiZXh0cmEiLCJjb21wb25lbnQiLCJ0eXBlIiwiRXJyb3IiLCJBY3Rpb25Sb3ciLCJ0cmFuc2Zvcm1BY3Rpb25Sb3ciLCJCdXR0b24iLCJ0cmFuc2Zvcm1CdXR0b25Db21wb25lbnQiLCJDb250YWluZXIiLCJ0cmFuc2Zvcm1Db250YWluZXJDb21wb25lbnQiLCJUZXh0SW5wdXQiLCJ0cmFuc2Zvcm1JbnB1dFRleHRDb21wb25lbnQiLCJTdHJpbmdTZWxlY3QiLCJ0cmFuc2Zvcm1TdHJpbmdTZWxlY3RNZW51Q29tcG9uZW50IiwiVXNlclNlbGVjdCIsInRyYW5zZm9ybVVzZXJTZWxlY3RNZW51Q29tcG9uZW50IiwiUm9sZVNlbGVjdCIsInRyYW5zZm9ybVJvbGVTZWxlY3RNZW51Q29tcG9uZW50IiwiTWVudGlvbmFibGVTZWxlY3QiLCJ0cmFuc2Zvcm1NZW50aW9uYWJsZVNlbGVjdE1lbnVDb21wb25lbnQiLCJDaGFubmVsU2VsZWN0IiwidHJhbnNmb3JtQ2hhbm5lbFNlbGVjdE1lbnVDb21wb25lbnQiLCJTZWN0aW9uIiwidHJhbnNmb3JtU2VjdGlvbkNvbXBvbmVudCIsIlRodW1ibmFpbCIsInRyYW5zZm9ybVRodW1ibmFpbENvbXBvbmVudCIsIk1lZGlhR2FsbGVyeSIsInRyYW5zZm9ybU1lZGlhR2FsbGVyeUNvbXBvbmVudCIsIkZpbGUiLCJ0cmFuc2Zvcm1GaWxlQ29tcG9uZW50IiwiU2VwYXJhdG9yIiwidHJhbnNmb3JtU2VwYXJhdG9yQ29tcG9uZW50IiwiVGV4dERpc3BsYXkiLCJ0cmFuc2Zvcm1UZXh0RGlzcGxheUNvbXBvbmVudCIsIkxhYmVsIiwidHJhbnNmb3JtTGFiZWxDb21wb25lbnQiLCJGaWxlVXBsb2FkIiwidHJhbnNmb3JtRmlsZVVwbG9hZENvbXBvbmVudCIsIlJhZGlvR3JvdXAiLCJ0cmFuc2Zvcm1SYWRpb0dyb3VwQ29tcG9uZW50IiwiQ2hlY2tib3hHcm91cCIsInRyYW5zZm9ybUNoZWNrYm94R3JvdXBDb21wb25lbnQiLCJDaGVja2JveCIsInRyYW5zZm9ybUNoZWNrYm94Q29tcG9uZW50IiwicGFydGlhbCIsInRyYW5zZm9ybVVuZnVybGVkTWVkaWFJdGVtIiwicHJvcHMiLCJ0cmFuc2Zvcm1lcnMiLCJkZXNpcmVkUHJvcGVydGllcyIsInVuZnVybGVkTWVkaWFJdGVtIiwibWVkaWFJdGVtIiwidXJsIiwicHJveHlVcmwiLCJwcm94eV91cmwiLCJoZWlnaHQiLCJ3aWR0aCIsInBsYWNlaG9sZGVyIiwicGxhY2Vob2xkZXJWZXJzaW9uIiwicGxhY2Vob2xkZXJfdmVyc2lvbiIsImNvbnRlbnRUeXBlIiwiY29udGVudF90eXBlIiwiZmxhZ3MiLCJhdHRhY2htZW50SWQiLCJhdHRhY2htZW50X2lkIiwic25vd2ZsYWtlIiwidHJhbnNmb3JtTWVkaWFHYWxsZXJ5SXRlbSIsIm1lZGlhR2FsbGVyeUl0ZW0iLCJnYWxsZXJ5SXRlbSIsIm1lZGlhIiwiZGVzY3JpcHRpb24iLCJzcG9pbGVyIiwiYWN0aW9uUm93IiwiaWQiLCJjb21wb25lbnRzIiwibWFwIiwiY29udGFpbmVyIiwiYWNjZW50Q29sb3IiLCJhY2NlbnRfY29sb3IiLCJidXR0b24iLCJsYWJlbCIsImN1c3RvbUlkIiwiY3VzdG9tX2lkIiwic3R5bGUiLCJlbW9qaSIsImRpc2FibGVkIiwic2t1SWQiLCJza3VfaWQiLCJpbnB1dCIsInZhbHVlIiwicmVxdWlyZWQiLCJtaW5MZW5ndGgiLCJtaW5fbGVuZ3RoIiwibWF4TGVuZ3RoIiwibWF4X2xlbmd0aCIsInNlbGVjdCIsInZhbHVlcyIsIl9wYXlsb2FkIiwibWluVmFsdWVzIiwibWluX3ZhbHVlcyIsIm1heFZhbHVlcyIsIm1heF92YWx1ZXMiLCJvcHRpb25zIiwib3B0aW9uIiwidW5kZWZpbmVkIiwiZGVmYXVsdCIsInJlc29sdmVkIiwiaW50ZXJhY3Rpb25EYXRhUmVzb2x2ZWQiLCJkZWZhdWx0VmFsdWVzIiwiZGVmYXVsdF92YWx1ZXMiLCJkZWZhdWx0VmFsdWUiLCJjaGFubmVsVHlwZXMiLCJjaGFubmVsX3R5cGVzIiwic2VjdGlvbiIsImFjY2Vzc29yeSIsInRodW1ibmFpbCIsIm1lZGlhR2FsbGVyeSIsIml0ZW1zIiwiaXRlbSIsImZpbGUiLCJuYW1lIiwic2l6ZSIsInRleHREaXNwbGF5IiwiY29udGVudCIsInNlcGFyYXRvciIsImRpdmlkZXIiLCJzcGFjaW5nIiwiZmlsZVVwbG9hZCIsImZpbGVUeXBlcyIsImZpbGVfdHlwZXMiLCJyYWRpb0dyb3VwIiwiY2hlY2tib3hHcm91cCIsImNoZWNrYm94Il0sIm1hcHBpbmdzIjoiQUFBQSxTQXFDRUEscUJBQXFCLFFBQ2hCLG9CQUFvQjtBQUczQixTQUFTQyxjQUFjLFFBQVEscUJBQXFCO0FBQ3BELFNBQVNDLGNBQWMsUUFBUSw4QkFBOEI7QUFHN0QsT0FBTyxTQUFTQyxt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
@@ -1,5 +1,18 @@
1
- import type { DiscordEmbed } from '@discordeno/types';
1
+ import type { DiscordEmbed, DiscordEmbedAuthor, DiscordEmbedFooter, DiscordEmbedImage, DiscordEmbedVideo } from '@discordeno/types';
2
2
  import type { Bot } from '../bot.js';
3
- import type { Embed } from './types.js';
4
- export declare function transformEmbed(bot: Bot, payload: DiscordEmbed): Embed;
3
+ export declare function transformEmbed(bot: Bot, payload: Partial<DiscordEmbed>, extra?: {
4
+ partial?: boolean;
5
+ }): any;
6
+ export declare function transformEmbedFooter(bot: Bot, payload: Partial<DiscordEmbedFooter>, extra?: {
7
+ partial?: boolean;
8
+ }): any;
9
+ export declare function transformEmbedImage(bot: Bot, payload: Partial<DiscordEmbedImage>, extra?: {
10
+ partial?: boolean;
11
+ }): any;
12
+ export declare function transformEmbedVideo(bot: Bot, payload: Partial<DiscordEmbedVideo>, extra?: {
13
+ partial?: boolean;
14
+ }): any;
15
+ export declare function transformEmbedAuthor(bot: Bot, payload: Partial<DiscordEmbedAuthor>, extra?: {
16
+ partial?: boolean;
17
+ }): any;
5
18
  //# sourceMappingURL=embed.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"embed.d.ts","sourceRoot":"","sources":["../../src/transformers/embed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,YAAY,GAAG,KAAK,CAoDrE"}
1
+ {"version":3,"file":"embed.d.ts","sourceRoot":"","sources":["../../src/transformers/embed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACpI,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAMrC,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,OAqBrG;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,EAAE,KAAK,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,OAUjH;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,OAgB/G;AACD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,OAgB/G;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,EAAE,KAAK,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,OAWjH"}