@discordeno/bot 19.0.0-next.f8f976a → 19.0.0-next.f9bdfce

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 (93) hide show
  1. package/README.md +30 -0
  2. package/dist/cjs/bot.cjs +1 -1
  3. package/dist/cjs/handlers/emojis/GUILD_EMOJIS_UPDATE.cjs +2 -2
  4. package/dist/cjs/handlers/guilds/GUILD_STICKERS_UPDATE.cjs +8 -5
  5. package/dist/cjs/handlers/interactions/INTERACTION_CREATE.cjs +6 -3
  6. package/dist/cjs/handlers/messages/MESSAGE_REACTION_ADD.cjs +4 -2
  7. package/dist/cjs/handlers/messages/MESSAGE_REACTION_REMOVE.cjs +3 -2
  8. package/dist/cjs/transformers/attachment.cjs +2 -1
  9. package/dist/cjs/transformers/avatarDecorationData.cjs +20 -0
  10. package/dist/cjs/transformers/channel.cjs +29 -2
  11. package/dist/cjs/transformers/emoji.cjs +19 -4
  12. package/dist/cjs/transformers/guild.cjs +5 -2
  13. package/dist/cjs/transformers/index.cjs +2 -1
  14. package/dist/cjs/transformers/interaction.cjs +38 -41
  15. package/dist/cjs/transformers/invite.cjs +2 -1
  16. package/dist/cjs/transformers/member.cjs +3 -2
  17. package/dist/cjs/transformers/message.cjs +32 -33
  18. package/dist/cjs/transformers/reverse/member.cjs +7 -2
  19. package/dist/cjs/transformers/sku.cjs +1 -1
  20. package/dist/cjs/transformers/toggles/Permissions.cjs +2 -2
  21. package/dist/cjs/transformers/toggles/channel.cjs +7 -2
  22. package/dist/cjs/transformers/toggles/guild.cjs +74 -52
  23. package/dist/cjs/transformers/user.cjs +2 -2
  24. package/dist/cjs/transformers.cjs +48 -7
  25. package/dist/cjs/typings.cjs +4 -26
  26. package/dist/esm/bot.js +1 -1
  27. package/dist/esm/handlers/emojis/GUILD_EMOJIS_UPDATE.js +2 -2
  28. package/dist/esm/handlers/guilds/GUILD_STICKERS_UPDATE.js +8 -5
  29. package/dist/esm/handlers/interactions/INTERACTION_CREATE.js +6 -3
  30. package/dist/esm/handlers/messages/MESSAGE_REACTION_ADD.js +4 -2
  31. package/dist/esm/handlers/messages/MESSAGE_REACTION_REMOVE.js +3 -2
  32. package/dist/esm/transformers/attachment.js +2 -1
  33. package/dist/esm/transformers/avatarDecorationData.js +10 -0
  34. package/dist/esm/transformers/channel.js +27 -3
  35. package/dist/esm/transformers/emoji.js +8 -1
  36. package/dist/esm/transformers/guild.js +5 -2
  37. package/dist/esm/transformers/index.js +2 -1
  38. package/dist/esm/transformers/interaction.js +37 -40
  39. package/dist/esm/transformers/invite.js +2 -1
  40. package/dist/esm/transformers/member.js +3 -2
  41. package/dist/esm/transformers/message.js +3 -4
  42. package/dist/esm/transformers/reverse/member.js +7 -2
  43. package/dist/esm/transformers/sku.js +1 -1
  44. package/dist/esm/transformers/toggles/Permissions.js +2 -2
  45. package/dist/esm/transformers/toggles/channel.js +7 -2
  46. package/dist/esm/transformers/toggles/guild.js +74 -52
  47. package/dist/esm/transformers/user.js +2 -2
  48. package/dist/esm/transformers.js +51 -10
  49. package/dist/esm/typings.js +1 -15
  50. package/dist/types/bot.d.ts +9 -3
  51. package/dist/types/bot.d.ts.map +1 -1
  52. package/dist/types/handlers/guilds/GUILD_STICKERS_UPDATE.d.ts.map +1 -1
  53. package/dist/types/handlers/interactions/INTERACTION_CREATE.d.ts +1 -1
  54. package/dist/types/handlers/interactions/INTERACTION_CREATE.d.ts.map +1 -1
  55. package/dist/types/handlers/messages/MESSAGE_REACTION_ADD.d.ts.map +1 -1
  56. package/dist/types/handlers/messages/MESSAGE_REACTION_REMOVE.d.ts.map +1 -1
  57. package/dist/types/transformers/attachment.d.ts +2 -0
  58. package/dist/types/transformers/attachment.d.ts.map +1 -1
  59. package/dist/types/transformers/avatarDecorationData.d.ts +9 -0
  60. package/dist/types/transformers/avatarDecorationData.d.ts.map +1 -0
  61. package/dist/types/transformers/channel.d.ts +38 -4
  62. package/dist/types/transformers/channel.d.ts.map +1 -1
  63. package/dist/types/transformers/emoji.d.ts +8 -1
  64. package/dist/types/transformers/emoji.d.ts.map +1 -1
  65. package/dist/types/transformers/guild.d.ts +3 -3
  66. package/dist/types/transformers/guild.d.ts.map +1 -1
  67. package/dist/types/transformers/index.d.ts +1 -0
  68. package/dist/types/transformers/index.d.ts.map +1 -1
  69. package/dist/types/transformers/interaction.d.ts +8 -14
  70. package/dist/types/transformers/interaction.d.ts.map +1 -1
  71. package/dist/types/transformers/invite.d.ts +3 -1
  72. package/dist/types/transformers/invite.d.ts.map +1 -1
  73. package/dist/types/transformers/member.d.ts +4 -1
  74. package/dist/types/transformers/member.d.ts.map +1 -1
  75. package/dist/types/transformers/message.d.ts +2 -2
  76. package/dist/types/transformers/message.d.ts.map +1 -1
  77. package/dist/types/transformers/reverse/member.d.ts.map +1 -1
  78. package/dist/types/transformers/sku.d.ts +2 -2
  79. package/dist/types/transformers/sku.d.ts.map +1 -1
  80. package/dist/types/transformers/toggles/Permissions.d.ts +4 -4
  81. package/dist/types/transformers/toggles/Permissions.d.ts.map +1 -1
  82. package/dist/types/transformers/toggles/channel.d.ts +3 -0
  83. package/dist/types/transformers/toggles/channel.d.ts.map +1 -1
  84. package/dist/types/transformers/toggles/guild.d.ts +50 -35
  85. package/dist/types/transformers/toggles/guild.d.ts.map +1 -1
  86. package/dist/types/transformers/user.d.ts +3 -3
  87. package/dist/types/transformers/user.d.ts.map +1 -1
  88. package/dist/types/transformers.d.ts +50 -8
  89. package/dist/types/transformers.d.ts.map +1 -1
  90. package/dist/types/typings.d.ts +0 -24
  91. package/dist/types/typings.d.ts.map +1 -1
  92. package/package.json +13 -13
  93. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1,28 +1,33 @@
1
1
  import { GuildFeatures } from '@discordeno/types';
2
2
  import { ToggleBitfieldBigint } from './ToggleBitfield.js';
3
3
  const featureNames = [
4
- 'inviteSplash',
5
- 'vipRegions',
6
- 'vanityUrl',
7
- 'verified',
8
- 'partnered',
4
+ 'animatedBanner',
5
+ 'animatedIcon',
6
+ 'applicationCommandPermissionsV2',
7
+ 'autoModeration',
8
+ 'banner',
9
9
  'community',
10
+ 'creatorMonetizableProvisional',
11
+ 'creatorStorePage',
10
12
  'developerSupportServer',
11
- 'news',
12
13
  'discoverable',
13
14
  'featurable',
14
- 'animatedIcon',
15
- 'banner',
16
- 'welcomeScreenEnabled',
15
+ 'invitesDisabled',
16
+ 'inviteSplash',
17
17
  'memberVerificationGateEnabled',
18
- 'previewEnabled',
19
- 'ticketedEventsEnabled',
20
- 'monetizationEnabled',
21
18
  'moreStickers',
19
+ 'news',
20
+ 'partnered',
21
+ 'previewEnabled',
22
+ 'raidAlertsDisabled',
22
23
  'roleIcons',
23
- 'autoModeration',
24
- 'invitesDisabled',
25
- 'animatedBanner'
24
+ 'roleSubscriptionsAvailableForPurchase',
25
+ 'roleSubscriptionsEnabled',
26
+ 'ticketedEventsEnabled',
27
+ 'vanityUrl',
28
+ 'verified',
29
+ 'vipRegions',
30
+ 'welcomeScreenEnabled'
26
31
  ];
27
32
  export const GuildToggle = {
28
33
  /** Whether the bot is the owner of the guild */ owner: 1n << 0n,
@@ -31,32 +36,34 @@ export const GuildToggle = {
31
36
  /** Whether this guild is unavailable due to an outage */ unavailable: 1n << 3n,
32
37
  /** Whether the guild has the boost progress bar enabled */ premiumProgressBarEnabled: 1n << 4n,
33
38
  // GUILD FEATURES ARE BELOW THIS
34
- /** Whether the guild has access to set an invite splash background */ inviteSplash: 1n << 5n,
35
- /** Whether the guild has access to set 384 kbps bitrate in voice (previously VIP voice servers) */ vipRegions: 1n << 6n,
36
- /** Whether the guild has access to set a vanity URL */ vanityUrl: 1n << 7n,
37
- /** Whether the guild is verified */ verified: 1n << 8n,
38
- /** Whether the guild is partnered */ partnered: 1n << 9n,
39
+ // MISSING VALUES IN THE BITFIELD: 24, 25, 26
40
+ /** Whether the guild has access to set an animated guild banner image */ animatedBanner: 1n << 11n,
41
+ /** Whether the guild has access to set an animated guild icon */ animatedIcon: 1n << 16n,
42
+ /** Whether the guild is using the old permissions configuration behavior */ applicationCommandPermissionsV2: 1n << 14n,
43
+ /** Whether the guild has set up auto moderation rules */ autoModeration: 1n << 28n,
44
+ /** Whether the guild has access to set a guild banner image */ banner: 1n << 17n,
39
45
  /** Whether the guild can enable welcome screen, Membership Screening, stage channels and discovery, and receives community updates */ community: 1n << 10n,
40
46
  /** Whether the guild has enabled monetization. */ creatorMonetizableProvisional: 1n << 31n,
41
47
  /** Whether the guild has enabled the role subscription promo page. */ creatorStorePage: 1n << 32n,
42
- /** Whether the guild has access to set an animated guild banner image */ animatedBanner: 1n << 11n,
43
- /** Whether the guild has access to create news channels */ news: 1n << 12n,
48
+ /** Whether the guild has been set as a support server on the App Directory */ developerSupportServer: 1n << 30n,
44
49
  /** Whether the guild is able to be discovered in the directory */ discoverable: 1n << 13n,
45
50
  /** Whether the guild is able to be featured in the directory */ featurable: 1n << 15n,
46
- /** Whether the guild has access to set an animated guild icon */ animatedIcon: 1n << 16n,
47
- /** Whether the guild has access to set a guild banner image */ banner: 1n << 17n,
48
- /** Whether the guild has enabled the welcome screen */ welcomeScreenEnabled: 1n << 18n,
51
+ /** Whether the guild has paused invites, preventing new users from joining */ invitesDisabled: 1n << 29n,
52
+ /** Whether the guild has access to set an invite splash background */ inviteSplash: 1n << 5n,
49
53
  /** Whether the guild has enabled [Membership Screening](https://discord.com/developers/docs/resources/guild#membership-screening-object) */ memberVerificationGateEnabled: 1n << 19n,
50
- /** Whether the guild can be previewed before joining via Membership Screening or the directory */ previewEnabled: 1n << 20n,
51
- /** Whether the guild has enabled ticketed events */ ticketedEventsEnabled: 1n << 21n,
52
- /** Whether the guild has enabled monetization */ monetizationEnabled: 1n << 22n,
53
54
  /** Whether the guild has increased custom sticker slots */ moreStickers: 1n << 23n,
55
+ /** Whether the guild has access to create news channels */ news: 1n << 12n,
56
+ /** Whether the guild is partnered */ partnered: 1n << 9n,
57
+ /** Whether the guild can be previewed before joining via Membership Screening or the directory */ previewEnabled: 1n << 20n,
58
+ /** Whether the guild has disabled alerts for join raids in the configured safety alerts channel */ raidAlertsDisabled: 1n << 22n,
54
59
  /** Whether the guild is able to set role icons */ roleIcons: 1n << 27n,
55
60
  /** Whether the guild has role subscriptions that can be purchased. */ roleSubscriptionsAvailableForPurchase: 1n << 33n,
56
61
  /** Whether the guild has enabled role subscriptions. */ roleSubscriptionsEnabled: 1n << 34n,
57
- /** Whether the guild has set up auto moderation rules */ autoModeration: 1n << 28n,
58
- /** Whether the guild has paused invites, preventing new users from joining */ invitesDisabled: 1n << 29n,
59
- /** Whether the guild has been set as a support server on the App Directory */ developerSupportServer: 1n << 30n
62
+ /** Whether the guild has enabled ticketed events */ ticketedEventsEnabled: 1n << 21n,
63
+ /** Whether the guild has access to set a vanity URL */ vanityUrl: 1n << 7n,
64
+ /** Whether the guild is verified */ verified: 1n << 8n,
65
+ /** Whether the guild has access to set 384 kbps bitrate in voice (previously VIP voice servers) */ vipRegions: 1n << 6n,
66
+ /** Whether the guild has enabled the welcome screen */ welcomeScreenEnabled: 1n << 18n
60
67
  };
61
68
  export class GuildToggles extends ToggleBitfieldBigint {
62
69
  constructor(guildOrTogglesBigint){
@@ -71,33 +78,33 @@ export class GuildToggles extends ToggleBitfieldBigint {
71
78
  if (guild.large) this.add(GuildToggle.large);
72
79
  if (guild.unavailable) this.add(GuildToggle.unavailable);
73
80
  if (guild.premium_progress_bar_enabled) this.add(GuildToggle.premiumProgressBarEnabled);
74
- if (guild.features.includes(GuildFeatures.InviteSplash)) this.add(GuildToggle.inviteSplash);
75
- if (guild.features.includes(GuildFeatures.VipRegions)) this.add(GuildToggle.vipRegions);
76
- if (guild.features.includes(GuildFeatures.VanityUrl)) this.add(GuildToggle.vanityUrl);
77
- if (guild.features.includes(GuildFeatures.Verified)) this.add(GuildToggle.verified);
78
- if (guild.features.includes(GuildFeatures.Partnered)) this.add(GuildToggle.partnered);
81
+ if (guild.features.includes(GuildFeatures.AnimatedBanner)) this.add(GuildToggle.animatedBanner);
82
+ if (guild.features.includes(GuildFeatures.AnimatedIcon)) this.add(GuildToggle.animatedIcon);
83
+ if (guild.features.includes(GuildFeatures.ApplicationCommandPermissionsV2)) this.add(GuildToggle.applicationCommandPermissionsV2);
84
+ if (guild.features.includes(GuildFeatures.AutoModeration)) this.add(GuildToggle.autoModeration);
85
+ if (guild.features.includes(GuildFeatures.Banner)) this.add(GuildToggle.banner);
79
86
  if (guild.features.includes(GuildFeatures.Community)) this.add(GuildToggle.community);
80
87
  if (guild.features.includes(GuildFeatures.CreatorMonetizableProvisional)) this.add(GuildToggle.creatorMonetizableProvisional);
81
88
  if (guild.features.includes(GuildFeatures.CreatorStorePage)) this.add(GuildToggle.creatorStorePage);
82
89
  if (guild.features.includes(GuildFeatures.DeveloperSupportServer)) this.add(GuildToggle.developerSupportServer);
83
- if (guild.features.includes(GuildFeatures.AnimatedBanner)) this.add(GuildToggle.animatedBanner);
84
- if (guild.features.includes(GuildFeatures.News)) this.add(GuildToggle.news);
85
90
  if (guild.features.includes(GuildFeatures.Discoverable)) this.add(GuildToggle.discoverable);
86
91
  if (guild.features.includes(GuildFeatures.Featurable)) this.add(GuildToggle.featurable);
87
- if (guild.features.includes(GuildFeatures.AnimatedIcon)) this.add(GuildToggle.animatedIcon);
88
- if (guild.features.includes(GuildFeatures.Banner)) this.add(GuildToggle.banner);
89
- if (guild.features.includes(GuildFeatures.WelcomeScreenEnabled)) this.add(GuildToggle.welcomeScreenEnabled);
90
- if (guild.features.includes(GuildFeatures.MemberVerificationGateEnabled)) {
91
- this.add(GuildToggle.memberVerificationGateEnabled);
92
- }
93
- if (guild.features.includes(GuildFeatures.PreviewEnabled)) this.add(GuildToggle.previewEnabled);
94
- if (guild.features.includes(GuildFeatures.TicketedEventsEnabled)) this.add(GuildToggle.ticketedEventsEnabled);
92
+ if (guild.features.includes(GuildFeatures.InvitesDisabled)) this.add(GuildToggle.invitesDisabled);
93
+ if (guild.features.includes(GuildFeatures.InviteSplash)) this.add(GuildToggle.inviteSplash);
94
+ if (guild.features.includes(GuildFeatures.MemberVerificationGateEnabled)) this.add(GuildToggle.memberVerificationGateEnabled);
95
95
  if (guild.features.includes(GuildFeatures.MoreStickers)) this.add(GuildToggle.moreStickers);
96
+ if (guild.features.includes(GuildFeatures.News)) this.add(GuildToggle.news);
97
+ if (guild.features.includes(GuildFeatures.Partnered)) this.add(GuildToggle.partnered);
98
+ if (guild.features.includes(GuildFeatures.PreviewEnabled)) this.add(GuildToggle.previewEnabled);
99
+ if (guild.features.includes(GuildFeatures.RaidAlertsDisabled)) this.add(GuildToggle.raidAlertsDisabled);
96
100
  if (guild.features.includes(GuildFeatures.RoleIcons)) this.add(GuildToggle.roleIcons);
97
101
  if (guild.features.includes(GuildFeatures.RoleSubscriptionsAvailableForPurchase)) this.add(GuildToggle.roleSubscriptionsAvailableForPurchase);
98
102
  if (guild.features.includes(GuildFeatures.RoleSubscriptionsEnabled)) this.add(GuildToggle.roleSubscriptionsEnabled);
99
- if (guild.features.includes(GuildFeatures.AutoModeration)) this.add(GuildToggle.autoModeration);
100
- if (guild.features.includes(GuildFeatures.InvitesDisabled)) this.add(GuildToggle.invitesDisabled);
103
+ if (guild.features.includes(GuildFeatures.TicketedEventsEnabled)) this.add(GuildToggle.ticketedEventsEnabled);
104
+ if (guild.features.includes(GuildFeatures.VanityUrl)) this.add(GuildToggle.vanityUrl);
105
+ if (guild.features.includes(GuildFeatures.Verified)) this.add(GuildToggle.verified);
106
+ if (guild.features.includes(GuildFeatures.VipRegions)) this.add(GuildToggle.vipRegions);
107
+ if (guild.features.includes(GuildFeatures.WelcomeScreenEnabled)) this.add(GuildToggle.welcomeScreenEnabled);
101
108
  }
102
109
  }
103
110
  get features() {
@@ -175,9 +182,6 @@ export class GuildToggles extends ToggleBitfieldBigint {
175
182
  /** Whether the guild has enabled ticketed events */ get ticketedEventsEnabled() {
176
183
  return this.has('ticketedEventsEnabled');
177
184
  }
178
- /** Whether the guild has enabled monetization */ get monetizationEnabled() {
179
- return this.has('monetizationEnabled');
180
- }
181
185
  /** Whether the guild has increased custom sticker slots */ get moreStickers() {
182
186
  return this.has('moreStickers');
183
187
  }
@@ -190,6 +194,24 @@ export class GuildToggles extends ToggleBitfieldBigint {
190
194
  /** Whether the guild has paused invites, preventing new users from joining */ get invitesDisabled() {
191
195
  return this.has('invitesDisabled');
192
196
  }
197
+ /** Whether the guild is using the old permissions configuration behavior */ get applicationCommandPermissionsV2() {
198
+ return this.has('applicationCommandPermissionsV2');
199
+ }
200
+ /** Whether the guild has enabled monetization. */ get creatorMonetizableProvisional() {
201
+ return this.has('creatorMonetizableProvisional');
202
+ }
203
+ /** Whether the guild has enabled the role subscription promo page. */ get creatorStorePage() {
204
+ return this.has('creatorStorePage');
205
+ }
206
+ /** Whether the guild has disabled alerts for join raids in the configured safety alerts channel */ get raidAlertsDisabled() {
207
+ return this.has('raidAlertsDisabled');
208
+ }
209
+ /** Whether the guild has role subscriptions that can be purchased. */ get roleSubscriptionsAvailableForPurchase() {
210
+ return this.has('roleSubscriptionsAvailableForPurchase');
211
+ }
212
+ /** Whether the guild has enabled role subscriptions. */ get roleSubscriptionsEnabled() {
213
+ return this.has('roleSubscriptionsEnabled');
214
+ }
193
215
  /** Checks whether or not the permissions exist in this */ has(permissions) {
194
216
  if (!Array.isArray(permissions)) return super.contains(GuildToggle[permissions]);
195
217
  return super.contains(permissions.reduce((a, b)=>a |= GuildToggle[b], 0n));
@@ -203,4 +225,4 @@ export class GuildToggles extends ToggleBitfieldBigint {
203
225
  }
204
226
  }
205
227
 
206
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90cmFuc2Zvcm1lcnMvdG9nZ2xlcy9ndWlsZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHdWlsZEZlYXR1cmVzLCB0eXBlIERpc2NvcmRHdWlsZCB9IGZyb20gJ0BkaXNjb3JkZW5vL3R5cGVzJ1xuaW1wb3J0IHsgVG9nZ2xlQml0ZmllbGRCaWdpbnQgfSBmcm9tICcuL1RvZ2dsZUJpdGZpZWxkLmpzJ1xuXG5jb25zdCBmZWF0dXJlTmFtZXMgPSBbXG4gICdpbnZpdGVTcGxhc2gnLFxuICAndmlwUmVnaW9ucycsXG4gICd2YW5pdHlVcmwnLFxuICAndmVyaWZpZWQnLFxuICAncGFydG5lcmVkJyxcbiAgJ2NvbW11bml0eScsXG4gICdkZXZlbG9wZXJTdXBwb3J0U2VydmVyJyxcbiAgJ25ld3MnLFxuICAnZGlzY292ZXJhYmxlJyxcbiAgJ2ZlYXR1cmFibGUnLFxuICAnYW5pbWF0ZWRJY29uJyxcbiAgJ2Jhbm5lcicsXG4gICd3ZWxjb21lU2NyZWVuRW5hYmxlZCcsXG4gICdtZW1iZXJWZXJpZmljYXRpb25HYXRlRW5hYmxlZCcsXG4gICdwcmV2aWV3RW5hYmxlZCcsXG4gICd0aWNrZXRlZEV2ZW50c0VuYWJsZWQnLFxuICAnbW9uZXRpemF0aW9uRW5hYmxlZCcsXG4gICdtb3JlU3RpY2tlcnMnLFxuICAncm9sZUljb25zJyxcbiAgJ2F1dG9Nb2RlcmF0aW9uJyxcbiAgJ2ludml0ZXNEaXNhYmxlZCcsXG4gICdhbmltYXRlZEJhbm5lcicsXG5dXG5cbmV4cG9ydCBjb25zdCBHdWlsZFRvZ2dsZSA9IHtcbiAgLyoqIFdoZXRoZXIgdGhlIGJvdCBpcyB0aGUgb3duZXIgb2YgdGhlIGd1aWxkICovXG4gIG93bmVyOiAxbiA8PCAwbixcbiAgLyoqIFdoZXRoZXIgdGhlIHNlcnZlciB3aWRnZXQgaXMgZW5hYmxlZCAqL1xuICB3aWRnZXRFbmFibGVkOiAxbiA8PCAxbixcbiAgLyoqIFdoZXRoZXIgdGhpcyBpcyBjb25zaWRlcmVkIGEgbGFyZ2UgZ3VpbGQgKi9cbiAgbGFyZ2U6IDFuIDw8IDJuLFxuICAvKiogV2hldGhlciB0aGlzIGd1aWxkIGlzIHVuYXZhaWxhYmxlIGR1ZSB0byBhbiBvdXRhZ2UgKi9cbiAgdW5hdmFpbGFibGU6IDFuIDw8IDNuLFxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaGFzIHRoZSBib29zdCBwcm9ncmVzcyBiYXIgZW5hYmxlZCAqL1xuICBwcmVtaXVtUHJvZ3Jlc3NCYXJFbmFibGVkOiAxbiA8PCA0bixcblxuICAvLyBHVUlMRCBGRUFUVVJFUyBBUkUgQkVMT1cgVEhJU1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgYWNjZXNzIHRvIHNldCBhbiBpbnZpdGUgc3BsYXNoIGJhY2tncm91bmQgKi9cbiAgaW52aXRlU3BsYXNoOiAxbiA8PCA1bixcbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGhhcyBhY2Nlc3MgdG8gc2V0IDM4NCBrYnBzIGJpdHJhdGUgaW4gdm9pY2UgKHByZXZpb3VzbHkgVklQIHZvaWNlIHNlcnZlcnMpICovXG4gIHZpcFJlZ2lvbnM6IDFuIDw8IDZuLFxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaGFzIGFjY2VzcyB0byBzZXQgYSB2YW5pdHkgVVJMICovXG4gIHZhbml0eVVybDogMW4gPDwgN24sXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBpcyB2ZXJpZmllZCAqL1xuICB2ZXJpZmllZDogMW4gPDwgOG4sXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBpcyBwYXJ0bmVyZWQgKi9cbiAgcGFydG5lcmVkOiAxbiA8PCA5bixcbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGNhbiBlbmFibGUgd2VsY29tZSBzY3JlZW4sIE1lbWJlcnNoaXAgU2NyZWVuaW5nLCBzdGFnZSBjaGFubmVscyBhbmQgZGlzY292ZXJ5LCBhbmQgcmVjZWl2ZXMgY29tbXVuaXR5IHVwZGF0ZXMgKi9cbiAgY29tbXVuaXR5OiAxbiA8PCAxMG4sXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgZW5hYmxlZCBtb25ldGl6YXRpb24uICovXG4gIGNyZWF0b3JNb25ldGl6YWJsZVByb3Zpc2lvbmFsOiAxbiA8PCAzMW4sXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgZW5hYmxlZCB0aGUgcm9sZSBzdWJzY3JpcHRpb24gcHJvbW8gcGFnZS4gKi9cbiAgY3JlYXRvclN0b3JlUGFnZTogMW4gPDwgMzJuLFxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaGFzIGFjY2VzcyB0byBzZXQgYW4gYW5pbWF0ZWQgZ3VpbGQgYmFubmVyIGltYWdlICovXG4gIGFuaW1hdGVkQmFubmVyOiAxbiA8PCAxMW4sXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgYWNjZXNzIHRvIGNyZWF0ZSBuZXdzIGNoYW5uZWxzICovXG4gIG5ld3M6IDFuIDw8IDEybixcbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGlzIGFibGUgdG8gYmUgZGlzY292ZXJlZCBpbiB0aGUgZGlyZWN0b3J5ICovXG4gIGRpc2NvdmVyYWJsZTogMW4gPDwgMTNuLFxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaXMgYWJsZSB0byBiZSBmZWF0dXJlZCBpbiB0aGUgZGlyZWN0b3J5ICovXG4gIGZlYXR1cmFibGU6IDFuIDw8IDE1bixcbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGhhcyBhY2Nlc3MgdG8gc2V0IGFuIGFuaW1hdGVkIGd1aWxkIGljb24gKi9cbiAgYW5pbWF0ZWRJY29uOiAxbiA8PCAxNm4sXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgYWNjZXNzIHRvIHNldCBhIGd1aWxkIGJhbm5lciBpbWFnZSAqL1xuICBiYW5uZXI6IDFuIDw8IDE3bixcbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGhhcyBlbmFibGVkIHRoZSB3ZWxjb21lIHNjcmVlbiAqL1xuICB3ZWxjb21lU2NyZWVuRW5hYmxlZDogMW4gPDwgMThuLFxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaGFzIGVuYWJsZWQgW01lbWJlcnNoaXAgU2NyZWVuaW5nXShodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjbWVtYmVyc2hpcC1zY3JlZW5pbmctb2JqZWN0KSAqL1xuICBtZW1iZXJWZXJpZmljYXRpb25HYXRlRW5hYmxlZDogMW4gPDwgMTluLFxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgY2FuIGJlIHByZXZpZXdlZCBiZWZvcmUgam9pbmluZyB2aWEgTWVtYmVyc2hpcCBTY3JlZW5pbmcgb3IgdGhlIGRpcmVjdG9yeSAqL1xuICBwcmV2aWV3RW5hYmxlZDogMW4gPDwgMjBuLFxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaGFzIGVuYWJsZWQgdGlja2V0ZWQgZXZlbnRzICovXG4gIHRpY2tldGVkRXZlbnRzRW5hYmxlZDogMW4gPDwgMjFuLFxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaGFzIGVuYWJsZWQgbW9uZXRpemF0aW9uICovXG4gIG1vbmV0aXphdGlvbkVuYWJsZWQ6IDFuIDw8IDIybixcbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGhhcyBpbmNyZWFzZWQgY3VzdG9tIHN0aWNrZXIgc2xvdHMgKi9cbiAgbW9yZVN0aWNrZXJzOiAxbiA8PCAyM24sXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBpcyBhYmxlIHRvIHNldCByb2xlIGljb25zICovXG4gIHJvbGVJY29uczogMW4gPDwgMjduLFxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaGFzIHJvbGUgc3Vic2NyaXB0aW9ucyB0aGF0IGNhbiBiZSBwdXJjaGFzZWQuICovXG4gIHJvbGVTdWJzY3JpcHRpb25zQXZhaWxhYmxlRm9yUHVyY2hhc2U6IDFuIDw8IDMzbixcbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGhhcyBlbmFibGVkIHJvbGUgc3Vic2NyaXB0aW9ucy4gKi9cbiAgcm9sZVN1YnNjcmlwdGlvbnNFbmFibGVkOiAxbiA8PCAzNG4sXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgc2V0IHVwIGF1dG8gbW9kZXJhdGlvbiBydWxlcyAqL1xuICBhdXRvTW9kZXJhdGlvbjogMW4gPDwgMjhuLFxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaGFzIHBhdXNlZCBpbnZpdGVzLCBwcmV2ZW50aW5nIG5ldyB1c2VycyBmcm9tIGpvaW5pbmcgKi9cbiAgaW52aXRlc0Rpc2FibGVkOiAxbiA8PCAyOW4sXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgYmVlbiBzZXQgYXMgYSBzdXBwb3J0IHNlcnZlciBvbiB0aGUgQXBwIERpcmVjdG9yeSAqL1xuICBkZXZlbG9wZXJTdXBwb3J0U2VydmVyOiAxbiA8PCAzMG4sXG59XG5cbmV4cG9ydCBjbGFzcyBHdWlsZFRvZ2dsZXMgZXh0ZW5kcyBUb2dnbGVCaXRmaWVsZEJpZ2ludCB7XG4gIGNvbnN0cnVjdG9yKGd1aWxkT3JUb2dnbGVzQmlnaW50OiBEaXNjb3JkR3VpbGQgfCBiaWdpbnQpIHtcbiAgICBzdXBlcigpXG5cbiAgICBpZiAodHlwZW9mIGd1aWxkT3JUb2dnbGVzQmlnaW50ID09PSAnYmlnaW50JykgdGhpcy5iaXRmaWVsZCA9IGd1aWxkT3JUb2dnbGVzQmlnaW50XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBndWlsZCA9IGd1aWxkT3JUb2dnbGVzQmlnaW50XG4gICAgICAvLyBDYXVzZSBkaXNjb3JkIGJlIHNtYXJ0IGxpa2UgdGhhdFxuICAgICAgaWYgKCFndWlsZC5mZWF0dXJlcykgZ3VpbGQuZmVhdHVyZXMgPSBbXVxuXG4gICAgICBpZiAoZ3VpbGQub3duZXIpIHRoaXMuYWRkKEd1aWxkVG9nZ2xlLm93bmVyKVxuICAgICAgaWYgKGd1aWxkLndpZGdldF9lbmFibGVkKSB0aGlzLmFkZChHdWlsZFRvZ2dsZS53aWRnZXRFbmFibGVkKVxuICAgICAgaWYgKGd1aWxkLmxhcmdlKSB0aGlzLmFkZChHdWlsZFRvZ2dsZS5sYXJnZSlcbiAgICAgIGlmIChndWlsZC51bmF2YWlsYWJsZSkgdGhpcy5hZGQoR3VpbGRUb2dnbGUudW5hdmFpbGFibGUpXG4gICAgICBpZiAoZ3VpbGQucHJlbWl1bV9wcm9ncmVzc19iYXJfZW5hYmxlZCkgdGhpcy5hZGQoR3VpbGRUb2dnbGUucHJlbWl1bVByb2dyZXNzQmFyRW5hYmxlZClcblxuICAgICAgaWYgKGd1aWxkLmZlYXR1cmVzLmluY2x1ZGVzKEd1aWxkRmVhdHVyZXMuSW52aXRlU3BsYXNoKSkgdGhpcy5hZGQoR3VpbGRUb2dnbGUuaW52aXRlU3BsYXNoKVxuICAgICAgaWYgKGd1aWxkLmZlYXR1cmVzLmluY2x1ZGVzKEd1aWxkRmVhdHVyZXMuVmlwUmVnaW9ucykpIHRoaXMuYWRkKEd1aWxkVG9nZ2xlLnZpcFJlZ2lvbnMpXG4gICAgICBpZiAoZ3VpbGQuZmVhdHVyZXMuaW5jbHVkZXMoR3VpbGRGZWF0dXJlcy5WYW5pdHlVcmwpKSB0aGlzLmFkZChHdWlsZFRvZ2dsZS52YW5pdHlVcmwpXG4gICAgICBpZiAoZ3VpbGQuZmVhdHVyZXMuaW5jbHVkZXMoR3VpbGRGZWF0dXJlcy5WZXJpZmllZCkpIHRoaXMuYWRkKEd1aWxkVG9nZ2xlLnZlcmlmaWVkKVxuICAgICAgaWYgKGd1aWxkLmZlYXR1cmVzLmluY2x1ZGVzKEd1aWxkRmVhdHVyZXMuUGFydG5lcmVkKSkgdGhpcy5hZGQoR3VpbGRUb2dnbGUucGFydG5lcmVkKVxuICAgICAgaWYgKGd1aWxkLmZlYXR1cmVzLmluY2x1ZGVzKEd1aWxkRmVhdHVyZXMuQ29tbXVuaXR5KSkgdGhpcy5hZGQoR3VpbGRUb2dnbGUuY29tbXVuaXR5KVxuICAgICAgaWYgKGd1aWxkLmZlYXR1cmVzLmluY2x1ZGVzKEd1aWxkRmVhdHVyZXMuQ3JlYXRvck1vbmV0aXphYmxlUHJvdmlzaW9uYWwpKSB0aGlzLmFkZChHdWlsZFRvZ2dsZS5jcmVhdG9yTW9uZXRpemFibGVQcm92aXNpb25hbClcbiAgICAgIGlmIChndWlsZC5mZWF0dXJlcy5pbmNsdWRlcyhHdWlsZEZlYXR1cmVzLkNyZWF0b3JTdG9yZVBhZ2UpKSB0aGlzLmFkZChHdWlsZFRvZ2dsZS5jcmVhdG9yU3RvcmVQYWdlKVxuICAgICAgaWYgKGd1aWxkLmZlYXR1cmVzLmluY2x1ZGVzKEd1aWxkRmVhdHVyZXMuRGV2ZWxvcGVyU3VwcG9ydFNlcnZlcikpIHRoaXMuYWRkKEd1aWxkVG9nZ2xlLmRldmVsb3BlclN1cHBvcnRTZXJ2ZXIpXG4gICAgICBpZiAoZ3VpbGQuZmVhdHVyZXMuaW5jbHVkZXMoR3VpbGRGZWF0dXJlcy5BbmltYXRlZEJhbm5lcikpIHRoaXMuYWRkKEd1aWxkVG9nZ2xlLmFuaW1hdGVkQmFubmVyKVxuICAgICAgaWYgKGd1aWxkLmZlYXR1cmVzLmluY2x1ZGVzKEd1aWxkRmVhdHVyZXMuTmV3cykpIHRoaXMuYWRkKEd1aWxkVG9nZ2xlLm5ld3MpXG4gICAgICBpZiAoZ3VpbGQuZmVhdHVyZXMuaW5jbHVkZXMoR3VpbGRGZWF0dXJlcy5EaXNjb3ZlcmFibGUpKSB0aGlzLmFkZChHdWlsZFRvZ2dsZS5kaXNjb3ZlcmFibGUpXG4gICAgICBpZiAoZ3VpbGQuZmVhdHVyZXMuaW5jbHVkZXMoR3VpbGRGZWF0dXJlcy5GZWF0dXJhYmxlKSkgdGhpcy5hZGQoR3VpbGRUb2dnbGUuZmVhdHVyYWJsZSlcbiAgICAgIGlmIChndWlsZC5mZWF0dXJlcy5pbmNsdWRlcyhHdWlsZEZlYXR1cmVzLkFuaW1hdGVkSWNvbikpIHRoaXMuYWRkKEd1aWxkVG9nZ2xlLmFuaW1hdGVkSWNvbilcbiAgICAgIGlmIChndWlsZC5mZWF0dXJlcy5pbmNsdWRlcyhHdWlsZEZlYXR1cmVzLkJhbm5lcikpIHRoaXMuYWRkKEd1aWxkVG9nZ2xlLmJhbm5lcilcbiAgICAgIGlmIChndWlsZC5mZWF0dXJlcy5pbmNsdWRlcyhHdWlsZEZlYXR1cmVzLldlbGNvbWVTY3JlZW5FbmFibGVkKSkgdGhpcy5hZGQoR3VpbGRUb2dnbGUud2VsY29tZVNjcmVlbkVuYWJsZWQpXG4gICAgICBpZiAoZ3VpbGQuZmVhdHVyZXMuaW5jbHVkZXMoR3VpbGRGZWF0dXJlcy5NZW1iZXJWZXJpZmljYXRpb25HYXRlRW5hYmxlZCkpIHtcbiAgICAgICAgdGhpcy5hZGQoR3VpbGRUb2dnbGUubWVtYmVyVmVyaWZpY2F0aW9uR2F0ZUVuYWJsZWQpXG4gICAgICB9XG4gICAgICBpZiAoZ3VpbGQuZmVhdHVyZXMuaW5jbHVkZXMoR3VpbGRGZWF0dXJlcy5QcmV2aWV3RW5hYmxlZCkpIHRoaXMuYWRkKEd1aWxkVG9nZ2xlLnByZXZpZXdFbmFibGVkKVxuICAgICAgaWYgKGd1aWxkLmZlYXR1cmVzLmluY2x1ZGVzKEd1aWxkRmVhdHVyZXMuVGlja2V0ZWRFdmVudHNFbmFibGVkKSkgdGhpcy5hZGQoR3VpbGRUb2dnbGUudGlja2V0ZWRFdmVudHNFbmFibGVkKVxuICAgICAgaWYgKGd1aWxkLmZlYXR1cmVzLmluY2x1ZGVzKEd1aWxkRmVhdHVyZXMuTW9yZVN0aWNrZXJzKSkgdGhpcy5hZGQoR3VpbGRUb2dnbGUubW9yZVN0aWNrZXJzKVxuICAgICAgaWYgKGd1aWxkLmZlYXR1cmVzLmluY2x1ZGVzKEd1aWxkRmVhdHVyZXMuUm9sZUljb25zKSkgdGhpcy5hZGQoR3VpbGRUb2dnbGUucm9sZUljb25zKVxuICAgICAgaWYgKGd1aWxkLmZlYXR1cmVzLmluY2x1ZGVzKEd1aWxkRmVhdHVyZXMuUm9sZVN1YnNjcmlwdGlvbnNBdmFpbGFibGVGb3JQdXJjaGFzZSkpIHRoaXMuYWRkKEd1aWxkVG9nZ2xlLnJvbGVTdWJzY3JpcHRpb25zQXZhaWxhYmxlRm9yUHVyY2hhc2UpXG4gICAgICBpZiAoZ3VpbGQuZmVhdHVyZXMuaW5jbHVkZXMoR3VpbGRGZWF0dXJlcy5Sb2xlU3Vic2NyaXB0aW9uc0VuYWJsZWQpKSB0aGlzLmFkZChHdWlsZFRvZ2dsZS5yb2xlU3Vic2NyaXB0aW9uc0VuYWJsZWQpXG4gICAgICBpZiAoZ3VpbGQuZmVhdHVyZXMuaW5jbHVkZXMoR3VpbGRGZWF0dXJlcy5BdXRvTW9kZXJhdGlvbikpIHRoaXMuYWRkKEd1aWxkVG9nZ2xlLmF1dG9Nb2RlcmF0aW9uKVxuICAgICAgaWYgKGd1aWxkLmZlYXR1cmVzLmluY2x1ZGVzKEd1aWxkRmVhdHVyZXMuSW52aXRlc0Rpc2FibGVkKSkgdGhpcy5hZGQoR3VpbGRUb2dnbGUuaW52aXRlc0Rpc2FibGVkKVxuICAgIH1cbiAgfVxuXG4gIGdldCBmZWF0dXJlcygpOiBHdWlsZFRvZ2dsZUtleXNbXSB7XG4gICAgY29uc3QgZmVhdHVyZXM6IEd1aWxkVG9nZ2xlS2V5c1tdID0gW11cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhHdWlsZFRvZ2dsZSkpIHtcbiAgICAgIGlmICghZmVhdHVyZU5hbWVzLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlXG4gICAgICBpZiAoIXN1cGVyLmNvbnRhaW5zKEd1aWxkVG9nZ2xlW2tleSBhcyBHdWlsZFRvZ2dsZUtleXNdKSkgY29udGludWVcblxuICAgICAgZmVhdHVyZXMucHVzaChrZXkgYXMgR3VpbGRUb2dnbGVLZXlzKVxuICAgIH1cblxuICAgIHJldHVybiBmZWF0dXJlc1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGJvdCBpcyB0aGUgb3duZXIgb2YgdGhlIGd1aWxkICovXG4gIGdldCBvd25lcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXMoJ293bmVyJylcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBzZXJ2ZXIgd2lkZ2V0IGlzIGVuYWJsZWQgKi9cbiAgZ2V0IHdpZGdldEVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKCd3aWRnZXRFbmFibGVkJylcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoaXMgaXMgY29uc2lkZXJlZCBhIGxhcmdlIGd1aWxkICovXG4gIGdldCBsYXJnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXMoJ2xhcmdlJylcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoaXMgZ3VpbGQgaXMgdW5hdmFpbGFibGUgZHVlIHRvIGFuIG91dGFnZSAqL1xuICBnZXQgdW5hdmFpbGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKCd1bmF2YWlsYWJsZScpXG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaGFzIHRoZSBib29zdCBwcm9ncmVzcyBiYXIgZW5hYmxlZCAqL1xuICBnZXQgcHJlbWl1bVByb2dyZXNzQmFyRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXMoJ3ByZW1pdW1Qcm9ncmVzc0JhckVuYWJsZWQnKVxuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGhhcyBhY2Nlc3MgdG8gc2V0IGFuIGludml0ZSBzcGxhc2ggYmFja2dyb3VuZCAqL1xuICBnZXQgaW52aXRlU3BsYXNoKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhcygnaW52aXRlU3BsYXNoJylcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgYWNjZXNzIHRvIHNldCAzODQga2JwcyBiaXRyYXRlIGluIHZvaWNlIChwcmV2aW91c2x5IFZJUCB2b2ljZSBzZXJ2ZXJzKSAqL1xuICBnZXQgdmlwUmVnaW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXMoJ3ZpcFJlZ2lvbnMnKVxuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGhhcyBhY2Nlc3MgdG8gc2V0IGEgdmFuaXR5IFVSTCAqL1xuICBnZXQgdmFuaXR5VXJsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhcygndmFuaXR5VXJsJylcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBpcyB2ZXJpZmllZCAqL1xuICBnZXQgdmVyaWZpZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKCd2ZXJpZmllZCcpXG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaXMgcGFydG5lcmVkICovXG4gIGdldCBwYXJ0bmVyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKCdwYXJ0bmVyZWQnKVxuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGNhbiBlbmFibGUgd2VsY29tZSBzY3JlZW4sIE1lbWJlcnNoaXAgU2NyZWVuaW5nLCBzdGFnZSBjaGFubmVscyBhbmQgZGlzY292ZXJ5LCBhbmQgcmVjZWl2ZXMgY29tbXVuaXR5IHVwZGF0ZXMgKi9cbiAgZ2V0IGNvbW11bml0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXMoJ2NvbW11bml0eScpXG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgR3VpbGQgaGFzIGJlZW4gc2V0IGFzIGEgc3VwcG9ydCBzZXJ2ZXIgb24gdGhlIEFwcCBEaXJlY3RvcnkgKi9cbiAgZ2V0IGRldmVsb3BlclN1cHBvcnRTZXJ2ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKCdkZXZlbG9wZXJTdXBwb3J0U2VydmVyJylcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgYWNjZXNzIHRvIHNldCBhbiBhbmltYXRlZCBndWlsZCBiYW5uZXIgaW1hZ2UgKi9cbiAgZ2V0IGFuaW1hdGVkQmFubmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhcygnYW5pbWF0ZWRCYW5uZXInKVxuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGhhcyBhY2Nlc3MgdG8gY3JlYXRlIG5ld3MgY2hhbm5lbHMgKi9cbiAgZ2V0IG5ld3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKCduZXdzJylcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBpcyBhYmxlIHRvIGJlIGRpc2NvdmVyZWQgaW4gdGhlIGRpcmVjdG9yeSAqL1xuICBnZXQgZGlzY292ZXJhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhcygnZGlzY292ZXJhYmxlJylcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBpcyBhYmxlIHRvIGJlIGZlYXR1cmVkIGluIHRoZSBkaXJlY3RvcnkgKi9cbiAgZ2V0IGZlYXR1cmFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKCdmZWF0dXJhYmxlJylcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgYWNjZXNzIHRvIHNldCBhbiBhbmltYXRlZCBndWlsZCBpY29uICovXG4gIGdldCBhbmltYXRlZEljb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKCdhbmltYXRlZEljb24nKVxuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGhhcyBhY2Nlc3MgdG8gc2V0IGEgZ3VpbGQgYmFubmVyIGltYWdlICovXG4gIGdldCBiYW5uZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKCdiYW5uZXInKVxuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGhhcyBlbmFibGVkIHRoZSB3ZWxjb21lIHNjcmVlbiAqL1xuICBnZXQgd2VsY29tZVNjcmVlbkVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKCd3ZWxjb21lU2NyZWVuRW5hYmxlZCcpXG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaGFzIGVuYWJsZWQgW01lbWJlcnNoaXAgU2NyZWVuaW5nXShodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjbWVtYmVyc2hpcC1zY3JlZW5pbmctb2JqZWN0KSAqL1xuICBnZXQgbWVtYmVyVmVyaWZpY2F0aW9uR2F0ZUVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKCdtZW1iZXJWZXJpZmljYXRpb25HYXRlRW5hYmxlZCcpXG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgY2FuIGJlIHByZXZpZXdlZCBiZWZvcmUgam9pbmluZyB2aWEgTWVtYmVyc2hpcCBTY3JlZW5pbmcgb3IgdGhlIGRpcmVjdG9yeSAqL1xuICBnZXQgcHJldmlld0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKCdwcmV2aWV3RW5hYmxlZCcpXG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaGFzIGVuYWJsZWQgdGlja2V0ZWQgZXZlbnRzICovXG4gIGdldCB0aWNrZXRlZEV2ZW50c0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKCd0aWNrZXRlZEV2ZW50c0VuYWJsZWQnKVxuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGhhcyBlbmFibGVkIG1vbmV0aXphdGlvbiAqL1xuICBnZXQgbW9uZXRpemF0aW9uRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXMoJ21vbmV0aXphdGlvbkVuYWJsZWQnKVxuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGhhcyBpbmNyZWFzZWQgY3VzdG9tIHN0aWNrZXIgc2xvdHMgKi9cbiAgZ2V0IG1vcmVTdGlja2VycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXMoJ21vcmVTdGlja2VycycpXG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaXMgYWJsZSB0byBzZXQgcm9sZSBpY29ucyAqL1xuICBnZXQgcm9sZUljb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhcygncm9sZUljb25zJylcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgc2V0IHVwIGF1dG8gbW9kZXJhdGlvbiBydWxlcyAqL1xuICBnZXQgYXV0b01vZGVyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKCdhdXRvTW9kZXJhdGlvbicpXG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaGFzIHBhdXNlZCBpbnZpdGVzLCBwcmV2ZW50aW5nIG5ldyB1c2VycyBmcm9tIGpvaW5pbmcgKi9cbiAgZ2V0IGludml0ZXNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXMoJ2ludml0ZXNEaXNhYmxlZCcpXG4gIH1cblxuICAvKiogQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoZSBwZXJtaXNzaW9ucyBleGlzdCBpbiB0aGlzICovXG4gIGhhcyhwZXJtaXNzaW9uczogR3VpbGRUb2dnbGVLZXlzIHwgR3VpbGRUb2dnbGVLZXlzW10pOiBib29sZWFuIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGVybWlzc2lvbnMpKSByZXR1cm4gc3VwZXIuY29udGFpbnMoR3VpbGRUb2dnbGVbcGVybWlzc2lvbnNdKVxuXG4gICAgcmV0dXJuIHN1cGVyLmNvbnRhaW5zKHBlcm1pc3Npb25zLnJlZHVjZSgoYSwgYikgPT4gKGEgfD0gR3VpbGRUb2dnbGVbYl0pLCAwbikpXG4gIH1cblxuICAvKiogTGlzdHMgYWxsIHRoZSB0b2dnbGVzIGZvciB0aGUgcm9sZSBhbmQgd2hldGhlciBvciBub3QgZWFjaCBpcyB0cnVlIG9yIGZhbHNlLiAqL1xuICBsaXN0KCk6IFJlY29yZDxHdWlsZFRvZ2dsZUtleXMsIGJvb2xlYW4+IHtcbiAgICBjb25zdCBqc29uOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoR3VpbGRUb2dnbGUpKSB7XG4gICAgICBqc29uW2tleV0gPSBzdXBlci5jb250YWlucyh2YWx1ZSlcbiAgICB9XG5cbiAgICByZXR1cm4ganNvbiBhcyBSZWNvcmQ8R3VpbGRUb2dnbGVLZXlzLCBib29sZWFuPlxuICB9XG59XG5cbmV4cG9ydCB0eXBlIEd1aWxkVG9nZ2xlS2V5cyA9IGtleW9mIHR5cGVvZiBHdWlsZFRvZ2dsZVxuIl0sIm5hbWVzIjpbIkd1aWxkRmVhdHVyZXMiLCJUb2dnbGVCaXRmaWVsZEJpZ2ludCIsImZlYXR1cmVOYW1lcyIsIkd1aWxkVG9nZ2xlIiwib3duZXIiLCJ3aWRnZXRFbmFibGVkIiwibGFyZ2UiLCJ1bmF2YWlsYWJsZSIsInByZW1pdW1Qcm9ncmVzc0JhckVuYWJsZWQiLCJpbnZpdGVTcGxhc2giLCJ2aXBSZWdpb25zIiwidmFuaXR5VXJsIiwidmVyaWZpZWQiLCJwYXJ0bmVyZWQiLCJjb21tdW5pdHkiLCJjcmVhdG9yTW9uZXRpemFibGVQcm92aXNpb25hbCIsImNyZWF0b3JTdG9yZVBhZ2UiLCJhbmltYXRlZEJhbm5lciIsIm5ld3MiLCJkaXNjb3ZlcmFibGUiLCJmZWF0dXJhYmxlIiwiYW5pbWF0ZWRJY29uIiwiYmFubmVyIiwid2VsY29tZVNjcmVlbkVuYWJsZWQiLCJtZW1iZXJWZXJpZmljYXRpb25HYXRlRW5hYmxlZCIsInByZXZpZXdFbmFibGVkIiwidGlja2V0ZWRFdmVudHNFbmFibGVkIiwibW9uZXRpemF0aW9uRW5hYmxlZCIsIm1vcmVTdGlja2VycyIsInJvbGVJY29ucyIsInJvbGVTdWJzY3JpcHRpb25zQXZhaWxhYmxlRm9yUHVyY2hhc2UiLCJyb2xlU3Vic2NyaXB0aW9uc0VuYWJsZWQiLCJhdXRvTW9kZXJhdGlvbiIsImludml0ZXNEaXNhYmxlZCIsImRldmVsb3BlclN1cHBvcnRTZXJ2ZXIiLCJHdWlsZFRvZ2dsZXMiLCJjb25zdHJ1Y3RvciIsImd1aWxkT3JUb2dnbGVzQmlnaW50IiwiYml0ZmllbGQiLCJndWlsZCIsImZlYXR1cmVzIiwiYWRkIiwid2lkZ2V0X2VuYWJsZWQiLCJwcmVtaXVtX3Byb2dyZXNzX2Jhcl9lbmFibGVkIiwiaW5jbHVkZXMiLCJJbnZpdGVTcGxhc2giLCJWaXBSZWdpb25zIiwiVmFuaXR5VXJsIiwiVmVyaWZpZWQiLCJQYXJ0bmVyZWQiLCJDb21tdW5pdHkiLCJDcmVhdG9yTW9uZXRpemFibGVQcm92aXNpb25hbCIsIkNyZWF0b3JTdG9yZVBhZ2UiLCJEZXZlbG9wZXJTdXBwb3J0U2VydmVyIiwiQW5pbWF0ZWRCYW5uZXIiLCJOZXdzIiwiRGlzY292ZXJhYmxlIiwiRmVhdHVyYWJsZSIsIkFuaW1hdGVkSWNvbiIsIkJhbm5lciIsIldlbGNvbWVTY3JlZW5FbmFibGVkIiwiTWVtYmVyVmVyaWZpY2F0aW9uR2F0ZUVuYWJsZWQiLCJQcmV2aWV3RW5hYmxlZCIsIlRpY2tldGVkRXZlbnRzRW5hYmxlZCIsIk1vcmVTdGlja2VycyIsIlJvbGVJY29ucyIsIlJvbGVTdWJzY3JpcHRpb25zQXZhaWxhYmxlRm9yUHVyY2hhc2UiLCJSb2xlU3Vic2NyaXB0aW9uc0VuYWJsZWQiLCJBdXRvTW9kZXJhdGlvbiIsIkludml0ZXNEaXNhYmxlZCIsImtleSIsIk9iamVjdCIsImtleXMiLCJjb250YWlucyIsInB1c2giLCJoYXMiLCJwZXJtaXNzaW9ucyIsIkFycmF5IiwiaXNBcnJheSIsInJlZHVjZSIsImEiLCJiIiwibGlzdCIsImpzb24iLCJ2YWx1ZSIsImVudHJpZXMiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGFBQWEsUUFBMkIsb0JBQW1CO0FBQ3BFLFNBQVNDLG9CQUFvQixRQUFRLHNCQUFxQjtBQUUxRCxNQUFNQyxlQUFlO0lBQ25CO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0Q7QUFFRCxPQUFPLE1BQU1DLGNBQWM7SUFDekIsOENBQThDLEdBQzlDQyxPQUFPLEVBQUUsSUFBSSxFQUFFO0lBQ2YseUNBQXlDLEdBQ3pDQyxlQUFlLEVBQUUsSUFBSSxFQUFFO0lBQ3ZCLDZDQUE2QyxHQUM3Q0MsT0FBTyxFQUFFLElBQUksRUFBRTtJQUNmLHVEQUF1RCxHQUN2REMsYUFBYSxFQUFFLElBQUksRUFBRTtJQUNyQix5REFBeUQsR0FDekRDLDJCQUEyQixFQUFFLElBQUksRUFBRTtJQUVuQyxnQ0FBZ0M7SUFFaEMsb0VBQW9FLEdBQ3BFQyxjQUFjLEVBQUUsSUFBSSxFQUFFO0lBQ3RCLGlHQUFpRyxHQUNqR0MsWUFBWSxFQUFFLElBQUksRUFBRTtJQUNwQixxREFBcUQsR0FDckRDLFdBQVcsRUFBRSxJQUFJLEVBQUU7SUFDbkIsa0NBQWtDLEdBQ2xDQyxVQUFVLEVBQUUsSUFBSSxFQUFFO0lBQ2xCLG1DQUFtQyxHQUNuQ0MsV0FBVyxFQUFFLElBQUksRUFBRTtJQUNuQixvSUFBb0ksR0FDcElDLFdBQVcsRUFBRSxJQUFJLEdBQUc7SUFDcEIsZ0RBQWdELEdBQ2hEQywrQkFBK0IsRUFBRSxJQUFJ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
228
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90cmFuc2Zvcm1lcnMvdG9nZ2xlcy9ndWlsZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHdWlsZEZlYXR1cmVzLCB0eXBlIERpc2NvcmRHdWlsZCB9IGZyb20gJ0BkaXNjb3JkZW5vL3R5cGVzJ1xuaW1wb3J0IHsgVG9nZ2xlQml0ZmllbGRCaWdpbnQgfSBmcm9tICcuL1RvZ2dsZUJpdGZpZWxkLmpzJ1xuXG5jb25zdCBmZWF0dXJlTmFtZXMgPSBbXG4gICdhbmltYXRlZEJhbm5lcicsXG4gICdhbmltYXRlZEljb24nLFxuICAnYXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnNWMicsXG4gICdhdXRvTW9kZXJhdGlvbicsXG4gICdiYW5uZXInLFxuICAnY29tbXVuaXR5JyxcbiAgJ2NyZWF0b3JNb25ldGl6YWJsZVByb3Zpc2lvbmFsJyxcbiAgJ2NyZWF0b3JTdG9yZVBhZ2UnLFxuICAnZGV2ZWxvcGVyU3VwcG9ydFNlcnZlcicsXG4gICdkaXNjb3ZlcmFibGUnLFxuICAnZmVhdHVyYWJsZScsXG4gICdpbnZpdGVzRGlzYWJsZWQnLFxuICAnaW52aXRlU3BsYXNoJyxcbiAgJ21lbWJlclZlcmlmaWNhdGlvbkdhdGVFbmFibGVkJyxcbiAgJ21vcmVTdGlja2VycycsXG4gICduZXdzJyxcbiAgJ3BhcnRuZXJlZCcsXG4gICdwcmV2aWV3RW5hYmxlZCcsXG4gICdyYWlkQWxlcnRzRGlzYWJsZWQnLFxuICAncm9sZUljb25zJyxcbiAgJ3JvbGVTdWJzY3JpcHRpb25zQXZhaWxhYmxlRm9yUHVyY2hhc2UnLFxuICAncm9sZVN1YnNjcmlwdGlvbnNFbmFibGVkJyxcbiAgJ3RpY2tldGVkRXZlbnRzRW5hYmxlZCcsXG4gICd2YW5pdHlVcmwnLFxuICAndmVyaWZpZWQnLFxuICAndmlwUmVnaW9ucycsXG4gICd3ZWxjb21lU2NyZWVuRW5hYmxlZCcsXG5dIGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBHdWlsZFRvZ2dsZSA9IHtcbiAgLyoqIFdoZXRoZXIgdGhlIGJvdCBpcyB0aGUgb3duZXIgb2YgdGhlIGd1aWxkICovXG4gIG93bmVyOiAxbiA8PCAwbixcbiAgLyoqIFdoZXRoZXIgdGhlIHNlcnZlciB3aWRnZXQgaXMgZW5hYmxlZCAqL1xuICB3aWRnZXRFbmFibGVkOiAxbiA8PCAxbixcbiAgLyoqIFdoZXRoZXIgdGhpcyBpcyBjb25zaWRlcmVkIGEgbGFyZ2UgZ3VpbGQgKi9cbiAgbGFyZ2U6IDFuIDw8IDJuLFxuICAvKiogV2hldGhlciB0aGlzIGd1aWxkIGlzIHVuYXZhaWxhYmxlIGR1ZSB0byBhbiBvdXRhZ2UgKi9cbiAgdW5hdmFpbGFibGU6IDFuIDw8IDNuLFxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaGFzIHRoZSBib29zdCBwcm9ncmVzcyBiYXIgZW5hYmxlZCAqL1xuICBwcmVtaXVtUHJvZ3Jlc3NCYXJFbmFibGVkOiAxbiA8PCA0bixcblxuICAvLyBHVUlMRCBGRUFUVVJFUyBBUkUgQkVMT1cgVEhJU1xuICAvLyBNSVNTSU5HIFZBTFVFUyBJTiBUSEUgQklURklFTEQ6IDI0LCAyNSwgMjZcblxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaGFzIGFjY2VzcyB0byBzZXQgYW4gYW5pbWF0ZWQgZ3VpbGQgYmFubmVyIGltYWdlICovXG4gIGFuaW1hdGVkQmFubmVyOiAxbiA8PCAxMW4sXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgYWNjZXNzIHRvIHNldCBhbiBhbmltYXRlZCBndWlsZCBpY29uICovXG4gIGFuaW1hdGVkSWNvbjogMW4gPDwgMTZuLFxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaXMgdXNpbmcgdGhlIG9sZCBwZXJtaXNzaW9ucyBjb25maWd1cmF0aW9uIGJlaGF2aW9yICovXG4gIGFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zVjI6IDFuIDw8IDE0bixcbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGhhcyBzZXQgdXAgYXV0byBtb2RlcmF0aW9uIHJ1bGVzICovXG4gIGF1dG9Nb2RlcmF0aW9uOiAxbiA8PCAyOG4sXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgYWNjZXNzIHRvIHNldCBhIGd1aWxkIGJhbm5lciBpbWFnZSAqL1xuICBiYW5uZXI6IDFuIDw8IDE3bixcbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGNhbiBlbmFibGUgd2VsY29tZSBzY3JlZW4sIE1lbWJlcnNoaXAgU2NyZWVuaW5nLCBzdGFnZSBjaGFubmVscyBhbmQgZGlzY292ZXJ5LCBhbmQgcmVjZWl2ZXMgY29tbXVuaXR5IHVwZGF0ZXMgKi9cbiAgY29tbXVuaXR5OiAxbiA8PCAxMG4sXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgZW5hYmxlZCBtb25ldGl6YXRpb24uICovXG4gIGNyZWF0b3JNb25ldGl6YWJsZVByb3Zpc2lvbmFsOiAxbiA8PCAzMW4sXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgZW5hYmxlZCB0aGUgcm9sZSBzdWJzY3JpcHRpb24gcHJvbW8gcGFnZS4gKi9cbiAgY3JlYXRvclN0b3JlUGFnZTogMW4gPDwgMzJuLFxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaGFzIGJlZW4gc2V0IGFzIGEgc3VwcG9ydCBzZXJ2ZXIgb24gdGhlIEFwcCBEaXJlY3RvcnkgKi9cbiAgZGV2ZWxvcGVyU3VwcG9ydFNlcnZlcjogMW4gPDwgMzBuLFxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaXMgYWJsZSB0byBiZSBkaXNjb3ZlcmVkIGluIHRoZSBkaXJlY3RvcnkgKi9cbiAgZGlzY292ZXJhYmxlOiAxbiA8PCAxM24sXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBpcyBhYmxlIHRvIGJlIGZlYXR1cmVkIGluIHRoZSBkaXJlY3RvcnkgKi9cbiAgZmVhdHVyYWJsZTogMW4gPDwgMTVuLFxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaGFzIHBhdXNlZCBpbnZpdGVzLCBwcmV2ZW50aW5nIG5ldyB1c2VycyBmcm9tIGpvaW5pbmcgKi9cbiAgaW52aXRlc0Rpc2FibGVkOiAxbiA8PCAyOW4sXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgYWNjZXNzIHRvIHNldCBhbiBpbnZpdGUgc3BsYXNoIGJhY2tncm91bmQgKi9cbiAgaW52aXRlU3BsYXNoOiAxbiA8PCA1bixcbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGhhcyBlbmFibGVkIFtNZW1iZXJzaGlwIFNjcmVlbmluZ10oaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI21lbWJlcnNoaXAtc2NyZWVuaW5nLW9iamVjdCkgKi9cbiAgbWVtYmVyVmVyaWZpY2F0aW9uR2F0ZUVuYWJsZWQ6IDFuIDw8IDE5bixcbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGhhcyBpbmNyZWFzZWQgY3VzdG9tIHN0aWNrZXIgc2xvdHMgKi9cbiAgbW9yZVN0aWNrZXJzOiAxbiA8PCAyM24sXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgYWNjZXNzIHRvIGNyZWF0ZSBuZXdzIGNoYW5uZWxzICovXG4gIG5ld3M6IDFuIDw8IDEybixcbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGlzIHBhcnRuZXJlZCAqL1xuICBwYXJ0bmVyZWQ6IDFuIDw8IDluLFxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgY2FuIGJlIHByZXZpZXdlZCBiZWZvcmUgam9pbmluZyB2aWEgTWVtYmVyc2hpcCBTY3JlZW5pbmcgb3IgdGhlIGRpcmVjdG9yeSAqL1xuICBwcmV2aWV3RW5hYmxlZDogMW4gPDwgMjBuLFxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaGFzIGRpc2FibGVkIGFsZXJ0cyBmb3Igam9pbiByYWlkcyBpbiB0aGUgY29uZmlndXJlZCBzYWZldHkgYWxlcnRzIGNoYW5uZWwgKi9cbiAgcmFpZEFsZXJ0c0Rpc2FibGVkOiAxbiA8PCAyMm4sXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBpcyBhYmxlIHRvIHNldCByb2xlIGljb25zICovXG4gIHJvbGVJY29uczogMW4gPDwgMjduLFxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaGFzIHJvbGUgc3Vic2NyaXB0aW9ucyB0aGF0IGNhbiBiZSBwdXJjaGFzZWQuICovXG4gIHJvbGVTdWJzY3JpcHRpb25zQXZhaWxhYmxlRm9yUHVyY2hhc2U6IDFuIDw8IDMzbixcbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGhhcyBlbmFibGVkIHJvbGUgc3Vic2NyaXB0aW9ucy4gKi9cbiAgcm9sZVN1YnNjcmlwdGlvbnNFbmFibGVkOiAxbiA8PCAzNG4sXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgZW5hYmxlZCB0aWNrZXRlZCBldmVudHMgKi9cbiAgdGlja2V0ZWRFdmVudHNFbmFibGVkOiAxbiA8PCAyMW4sXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgYWNjZXNzIHRvIHNldCBhIHZhbml0eSBVUkwgKi9cbiAgdmFuaXR5VXJsOiAxbiA8PCA3bixcbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGlzIHZlcmlmaWVkICovXG4gIHZlcmlmaWVkOiAxbiA8PCA4bixcbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGhhcyBhY2Nlc3MgdG8gc2V0IDM4NCBrYnBzIGJpdHJhdGUgaW4gdm9pY2UgKHByZXZpb3VzbHkgVklQIHZvaWNlIHNlcnZlcnMpICovXG4gIHZpcFJlZ2lvbnM6IDFuIDw8IDZuLFxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaGFzIGVuYWJsZWQgdGhlIHdlbGNvbWUgc2NyZWVuICovXG4gIHdlbGNvbWVTY3JlZW5FbmFibGVkOiAxbiA8PCAxOG4sXG59XG5cbmV4cG9ydCBjbGFzcyBHdWlsZFRvZ2dsZXMgZXh0ZW5kcyBUb2dnbGVCaXRmaWVsZEJpZ2ludCB7XG4gIGNvbnN0cnVjdG9yKGd1aWxkT3JUb2dnbGVzQmlnaW50OiBEaXNjb3JkR3VpbGQgfCBiaWdpbnQpIHtcbiAgICBzdXBlcigpXG5cbiAgICBpZiAodHlwZW9mIGd1aWxkT3JUb2dnbGVzQmlnaW50ID09PSAnYmlnaW50JykgdGhpcy5iaXRmaWVsZCA9IGd1aWxkT3JUb2dnbGVzQmlnaW50XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBndWlsZCA9IGd1aWxkT3JUb2dnbGVzQmlnaW50XG4gICAgICAvLyBDYXVzZSBkaXNjb3JkIGJlIHNtYXJ0IGxpa2UgdGhhdFxuICAgICAgaWYgKCFndWlsZC5mZWF0dXJlcykgZ3VpbGQuZmVhdHVyZXMgPSBbXVxuXG4gICAgICBpZiAoZ3VpbGQub3duZXIpIHRoaXMuYWRkKEd1aWxkVG9nZ2xlLm93bmVyKVxuICAgICAgaWYgKGd1aWxkLndpZGdldF9lbmFibGVkKSB0aGlzLmFkZChHdWlsZFRvZ2dsZS53aWRnZXRFbmFibGVkKVxuICAgICAgaWYgKGd1aWxkLmxhcmdlKSB0aGlzLmFkZChHdWlsZFRvZ2dsZS5sYXJnZSlcbiAgICAgIGlmIChndWlsZC51bmF2YWlsYWJsZSkgdGhpcy5hZGQoR3VpbGRUb2dnbGUudW5hdmFpbGFibGUpXG4gICAgICBpZiAoZ3VpbGQucHJlbWl1bV9wcm9ncmVzc19iYXJfZW5hYmxlZCkgdGhpcy5hZGQoR3VpbGRUb2dnbGUucHJlbWl1bVByb2dyZXNzQmFyRW5hYmxlZClcblxuICAgICAgaWYgKGd1aWxkLmZlYXR1cmVzLmluY2x1ZGVzKEd1aWxkRmVhdHVyZXMuQW5pbWF0ZWRCYW5uZXIpKSB0aGlzLmFkZChHdWlsZFRvZ2dsZS5hbmltYXRlZEJhbm5lcilcbiAgICAgIGlmIChndWlsZC5mZWF0dXJlcy5pbmNsdWRlcyhHdWlsZEZlYXR1cmVzLkFuaW1hdGVkSWNvbikpIHRoaXMuYWRkKEd1aWxkVG9nZ2xlLmFuaW1hdGVkSWNvbilcbiAgICAgIGlmIChndWlsZC5mZWF0dXJlcy5pbmNsdWRlcyhHdWlsZEZlYXR1cmVzLkFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zVjIpKSB0aGlzLmFkZChHdWlsZFRvZ2dsZS5hcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uc1YyKVxuICAgICAgaWYgKGd1aWxkLmZlYXR1cmVzLmluY2x1ZGVzKEd1aWxkRmVhdHVyZXMuQXV0b01vZGVyYXRpb24pKSB0aGlzLmFkZChHdWlsZFRvZ2dsZS5hdXRvTW9kZXJhdGlvbilcbiAgICAgIGlmIChndWlsZC5mZWF0dXJlcy5pbmNsdWRlcyhHdWlsZEZlYXR1cmVzLkJhbm5lcikpIHRoaXMuYWRkKEd1aWxkVG9nZ2xlLmJhbm5lcilcbiAgICAgIGlmIChndWlsZC5mZWF0dXJlcy5pbmNsdWRlcyhHdWlsZEZlYXR1cmVzLkNvbW11bml0eSkpIHRoaXMuYWRkKEd1aWxkVG9nZ2xlLmNvbW11bml0eSlcbiAgICAgIGlmIChndWlsZC5mZWF0dXJlcy5pbmNsdWRlcyhHdWlsZEZlYXR1cmVzLkNyZWF0b3JNb25ldGl6YWJsZVByb3Zpc2lvbmFsKSkgdGhpcy5hZGQoR3VpbGRUb2dnbGUuY3JlYXRvck1vbmV0aXphYmxlUHJvdmlzaW9uYWwpXG4gICAgICBpZiAoZ3VpbGQuZmVhdHVyZXMuaW5jbHVkZXMoR3VpbGRGZWF0dXJlcy5DcmVhdG9yU3RvcmVQYWdlKSkgdGhpcy5hZGQoR3VpbGRUb2dnbGUuY3JlYXRvclN0b3JlUGFnZSlcbiAgICAgIGlmIChndWlsZC5mZWF0dXJlcy5pbmNsdWRlcyhHdWlsZEZlYXR1cmVzLkRldmVsb3BlclN1cHBvcnRTZXJ2ZXIpKSB0aGlzLmFkZChHdWlsZFRvZ2dsZS5kZXZlbG9wZXJTdXBwb3J0U2VydmVyKVxuICAgICAgaWYgKGd1aWxkLmZlYXR1cmVzLmluY2x1ZGVzKEd1aWxkRmVhdHVyZXMuRGlzY292ZXJhYmxlKSkgdGhpcy5hZGQoR3VpbGRUb2dnbGUuZGlzY292ZXJhYmxlKVxuICAgICAgaWYgKGd1aWxkLmZlYXR1cmVzLmluY2x1ZGVzKEd1aWxkRmVhdHVyZXMuRmVhdHVyYWJsZSkpIHRoaXMuYWRkKEd1aWxkVG9nZ2xlLmZlYXR1cmFibGUpXG4gICAgICBpZiAoZ3VpbGQuZmVhdHVyZXMuaW5jbHVkZXMoR3VpbGRGZWF0dXJlcy5JbnZpdGVzRGlzYWJsZWQpKSB0aGlzLmFkZChHdWlsZFRvZ2dsZS5pbnZpdGVzRGlzYWJsZWQpXG4gICAgICBpZiAoZ3VpbGQuZmVhdHVyZXMuaW5jbHVkZXMoR3VpbGRGZWF0dXJlcy5JbnZpdGVTcGxhc2gpKSB0aGlzLmFkZChHdWlsZFRvZ2dsZS5pbnZpdGVTcGxhc2gpXG4gICAgICBpZiAoZ3VpbGQuZmVhdHVyZXMuaW5jbHVkZXMoR3VpbGRGZWF0dXJlcy5NZW1iZXJWZXJpZmljYXRpb25HYXRlRW5hYmxlZCkpIHRoaXMuYWRkKEd1aWxkVG9nZ2xlLm1lbWJlclZlcmlmaWNhdGlvbkdhdGVFbmFibGVkKVxuICAgICAgaWYgKGd1aWxkLmZlYXR1cmVzLmluY2x1ZGVzKEd1aWxkRmVhdHVyZXMuTW9yZVN0aWNrZXJzKSkgdGhpcy5hZGQoR3VpbGRUb2dnbGUubW9yZVN0aWNrZXJzKVxuICAgICAgaWYgKGd1aWxkLmZlYXR1cmVzLmluY2x1ZGVzKEd1aWxkRmVhdHVyZXMuTmV3cykpIHRoaXMuYWRkKEd1aWxkVG9nZ2xlLm5ld3MpXG4gICAgICBpZiAoZ3VpbGQuZmVhdHVyZXMuaW5jbHVkZXMoR3VpbGRGZWF0dXJlcy5QYXJ0bmVyZWQpKSB0aGlzLmFkZChHdWlsZFRvZ2dsZS5wYXJ0bmVyZWQpXG4gICAgICBpZiAoZ3VpbGQuZmVhdHVyZXMuaW5jbHVkZXMoR3VpbGRGZWF0dXJlcy5QcmV2aWV3RW5hYmxlZCkpIHRoaXMuYWRkKEd1aWxkVG9nZ2xlLnByZXZpZXdFbmFibGVkKVxuICAgICAgaWYgKGd1aWxkLmZlYXR1cmVzLmluY2x1ZGVzKEd1aWxkRmVhdHVyZXMuUmFpZEFsZXJ0c0Rpc2FibGVkKSkgdGhpcy5hZGQoR3VpbGRUb2dnbGUucmFpZEFsZXJ0c0Rpc2FibGVkKVxuICAgICAgaWYgKGd1aWxkLmZlYXR1cmVzLmluY2x1ZGVzKEd1aWxkRmVhdHVyZXMuUm9sZUljb25zKSkgdGhpcy5hZGQoR3VpbGRUb2dnbGUucm9sZUljb25zKVxuICAgICAgaWYgKGd1aWxkLmZlYXR1cmVzLmluY2x1ZGVzKEd1aWxkRmVhdHVyZXMuUm9sZVN1YnNjcmlwdGlvbnNBdmFpbGFibGVGb3JQdXJjaGFzZSkpIHRoaXMuYWRkKEd1aWxkVG9nZ2xlLnJvbGVTdWJzY3JpcHRpb25zQXZhaWxhYmxlRm9yUHVyY2hhc2UpXG4gICAgICBpZiAoZ3VpbGQuZmVhdHVyZXMuaW5jbHVkZXMoR3VpbGRGZWF0dXJlcy5Sb2xlU3Vic2NyaXB0aW9uc0VuYWJsZWQpKSB0aGlzLmFkZChHdWlsZFRvZ2dsZS5yb2xlU3Vic2NyaXB0aW9uc0VuYWJsZWQpXG4gICAgICBpZiAoZ3VpbGQuZmVhdHVyZXMuaW5jbHVkZXMoR3VpbGRGZWF0dXJlcy5UaWNrZXRlZEV2ZW50c0VuYWJsZWQpKSB0aGlzLmFkZChHdWlsZFRvZ2dsZS50aWNrZXRlZEV2ZW50c0VuYWJsZWQpXG4gICAgICBpZiAoZ3VpbGQuZmVhdHVyZXMuaW5jbHVkZXMoR3VpbGRGZWF0dXJlcy5WYW5pdHlVcmwpKSB0aGlzLmFkZChHdWlsZFRvZ2dsZS52YW5pdHlVcmwpXG4gICAgICBpZiAoZ3VpbGQuZmVhdHVyZXMuaW5jbHVkZXMoR3VpbGRGZWF0dXJlcy5WZXJpZmllZCkpIHRoaXMuYWRkKEd1aWxkVG9nZ2xlLnZlcmlmaWVkKVxuICAgICAgaWYgKGd1aWxkLmZlYXR1cmVzLmluY2x1ZGVzKEd1aWxkRmVhdHVyZXMuVmlwUmVnaW9ucykpIHRoaXMuYWRkKEd1aWxkVG9nZ2xlLnZpcFJlZ2lvbnMpXG4gICAgICBpZiAoZ3VpbGQuZmVhdHVyZXMuaW5jbHVkZXMoR3VpbGRGZWF0dXJlcy5XZWxjb21lU2NyZWVuRW5hYmxlZCkpIHRoaXMuYWRkKEd1aWxkVG9nZ2xlLndlbGNvbWVTY3JlZW5FbmFibGVkKVxuICAgIH1cbiAgfVxuXG4gIGdldCBmZWF0dXJlcygpOiBHdWlsZEZlYXR1cmVLZXlzW10ge1xuICAgIGNvbnN0IGZlYXR1cmVzOiBHdWlsZEZlYXR1cmVLZXlzW10gPSBbXVxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKEd1aWxkVG9nZ2xlKSkge1xuICAgICAgaWYgKCFmZWF0dXJlTmFtZXMuaW5jbHVkZXMoa2V5IGFzIEd1aWxkRmVhdHVyZUtleXMpKSBjb250aW51ZVxuICAgICAgaWYgKCFzdXBlci5jb250YWlucyhHdWlsZFRvZ2dsZVtrZXkgYXMgR3VpbGRUb2dnbGVLZXlzXSkpIGNvbnRpbnVlXG5cbiAgICAgIGZlYXR1cmVzLnB1c2goa2V5IGFzIEd1aWxkRmVhdHVyZUtleXMpXG4gICAgfVxuXG4gICAgcmV0dXJuIGZlYXR1cmVzXG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgYm90IGlzIHRoZSBvd25lciBvZiB0aGUgZ3VpbGQgKi9cbiAgZ2V0IG93bmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhcygnb3duZXInKVxuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHNlcnZlciB3aWRnZXQgaXMgZW5hYmxlZCAqL1xuICBnZXQgd2lkZ2V0RW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXMoJ3dpZGdldEVuYWJsZWQnKVxuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhpcyBpcyBjb25zaWRlcmVkIGEgbGFyZ2UgZ3VpbGQgKi9cbiAgZ2V0IGxhcmdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhcygnbGFyZ2UnKVxuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhpcyBndWlsZCBpcyB1bmF2YWlsYWJsZSBkdWUgdG8gYW4gb3V0YWdlICovXG4gIGdldCB1bmF2YWlsYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXMoJ3VuYXZhaWxhYmxlJylcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgdGhlIGJvb3N0IHByb2dyZXNzIGJhciBlbmFibGVkICovXG4gIGdldCBwcmVtaXVtUHJvZ3Jlc3NCYXJFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhcygncHJlbWl1bVByb2dyZXNzQmFyRW5hYmxlZCcpXG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaGFzIGFjY2VzcyB0byBzZXQgYW4gaW52aXRlIHNwbGFzaCBiYWNrZ3JvdW5kICovXG4gIGdldCBpbnZpdGVTcGxhc2goKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKCdpbnZpdGVTcGxhc2gnKVxuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGhhcyBhY2Nlc3MgdG8gc2V0IDM4NCBrYnBzIGJpdHJhdGUgaW4gdm9pY2UgKHByZXZpb3VzbHkgVklQIHZvaWNlIHNlcnZlcnMpICovXG4gIGdldCB2aXBSZWdpb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhcygndmlwUmVnaW9ucycpXG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaGFzIGFjY2VzcyB0byBzZXQgYSB2YW5pdHkgVVJMICovXG4gIGdldCB2YW5pdHlVcmwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKCd2YW5pdHlVcmwnKVxuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGlzIHZlcmlmaWVkICovXG4gIGdldCB2ZXJpZmllZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXMoJ3ZlcmlmaWVkJylcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBpcyBwYXJ0bmVyZWQgKi9cbiAgZ2V0IHBhcnRuZXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXMoJ3BhcnRuZXJlZCcpXG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgY2FuIGVuYWJsZSB3ZWxjb21lIHNjcmVlbiwgTWVtYmVyc2hpcCBTY3JlZW5pbmcsIHN0YWdlIGNoYW5uZWxzIGFuZCBkaXNjb3ZlcnksIGFuZCByZWNlaXZlcyBjb21tdW5pdHkgdXBkYXRlcyAqL1xuICBnZXQgY29tbXVuaXR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhcygnY29tbXVuaXR5JylcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBHdWlsZCBoYXMgYmVlbiBzZXQgYXMgYSBzdXBwb3J0IHNlcnZlciBvbiB0aGUgQXBwIERpcmVjdG9yeSAqL1xuICBnZXQgZGV2ZWxvcGVyU3VwcG9ydFNlcnZlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXMoJ2RldmVsb3BlclN1cHBvcnRTZXJ2ZXInKVxuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGhhcyBhY2Nlc3MgdG8gc2V0IGFuIGFuaW1hdGVkIGd1aWxkIGJhbm5lciBpbWFnZSAqL1xuICBnZXQgYW5pbWF0ZWRCYW5uZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKCdhbmltYXRlZEJhbm5lcicpXG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaGFzIGFjY2VzcyB0byBjcmVhdGUgbmV3cyBjaGFubmVscyAqL1xuICBnZXQgbmV3cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXMoJ25ld3MnKVxuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGlzIGFibGUgdG8gYmUgZGlzY292ZXJlZCBpbiB0aGUgZGlyZWN0b3J5ICovXG4gIGdldCBkaXNjb3ZlcmFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKCdkaXNjb3ZlcmFibGUnKVxuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGlzIGFibGUgdG8gYmUgZmVhdHVyZWQgaW4gdGhlIGRpcmVjdG9yeSAqL1xuICBnZXQgZmVhdHVyYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXMoJ2ZlYXR1cmFibGUnKVxuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGhhcyBhY2Nlc3MgdG8gc2V0IGFuIGFuaW1hdGVkIGd1aWxkIGljb24gKi9cbiAgZ2V0IGFuaW1hdGVkSWNvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXMoJ2FuaW1hdGVkSWNvbicpXG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaGFzIGFjY2VzcyB0byBzZXQgYSBndWlsZCBiYW5uZXIgaW1hZ2UgKi9cbiAgZ2V0IGJhbm5lcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXMoJ2Jhbm5lcicpXG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaGFzIGVuYWJsZWQgdGhlIHdlbGNvbWUgc2NyZWVuICovXG4gIGdldCB3ZWxjb21lU2NyZWVuRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXMoJ3dlbGNvbWVTY3JlZW5FbmFibGVkJylcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgZW5hYmxlZCBbTWVtYmVyc2hpcCBTY3JlZW5pbmddKGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNtZW1iZXJzaGlwLXNjcmVlbmluZy1vYmplY3QpICovXG4gIGdldCBtZW1iZXJWZXJpZmljYXRpb25HYXRlRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXMoJ21lbWJlclZlcmlmaWNhdGlvbkdhdGVFbmFibGVkJylcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBjYW4gYmUgcHJldmlld2VkIGJlZm9yZSBqb2luaW5nIHZpYSBNZW1iZXJzaGlwIFNjcmVlbmluZyBvciB0aGUgZGlyZWN0b3J5ICovXG4gIGdldCBwcmV2aWV3RW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXMoJ3ByZXZpZXdFbmFibGVkJylcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgZW5hYmxlZCB0aWNrZXRlZCBldmVudHMgKi9cbiAgZ2V0IHRpY2tldGVkRXZlbnRzRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXMoJ3RpY2tldGVkRXZlbnRzRW5hYmxlZCcpXG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgZ3VpbGQgaGFzIGluY3JlYXNlZCBjdXN0b20gc3RpY2tlciBzbG90cyAqL1xuICBnZXQgbW9yZVN0aWNrZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhcygnbW9yZVN0aWNrZXJzJylcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBpcyBhYmxlIHRvIHNldCByb2xlIGljb25zICovXG4gIGdldCByb2xlSWNvbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKCdyb2xlSWNvbnMnKVxuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGd1aWxkIGhhcyBzZXQgdXAgYXV0byBtb2RlcmF0aW9uIHJ1bGVzICovXG4gIGdldCBhdXRvTW9kZXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXMoJ2F1dG9Nb2RlcmF0aW9uJylcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgcGF1c2VkIGludml0ZXMsIHByZXZlbnRpbmcgbmV3IHVzZXJzIGZyb20gam9pbmluZyAqL1xuICBnZXQgaW52aXRlc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhcygnaW52aXRlc0Rpc2FibGVkJylcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBpcyB1c2luZyB0aGUgb2xkIHBlcm1pc3Npb25zIGNvbmZpZ3VyYXRpb24gYmVoYXZpb3IgKi9cbiAgZ2V0IGFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zVjIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKCdhcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uc1YyJylcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgZW5hYmxlZCBtb25ldGl6YXRpb24uICovXG4gIGdldCBjcmVhdG9yTW9uZXRpemFibGVQcm92aXNpb25hbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXMoJ2NyZWF0b3JNb25ldGl6YWJsZVByb3Zpc2lvbmFsJylcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgZW5hYmxlZCB0aGUgcm9sZSBzdWJzY3JpcHRpb24gcHJvbW8gcGFnZS4gKi9cbiAgZ2V0IGNyZWF0b3JTdG9yZVBhZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKCdjcmVhdG9yU3RvcmVQYWdlJylcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgZGlzYWJsZWQgYWxlcnRzIGZvciBqb2luIHJhaWRzIGluIHRoZSBjb25maWd1cmVkIHNhZmV0eSBhbGVydHMgY2hhbm5lbCAqL1xuICBnZXQgcmFpZEFsZXJ0c0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhcygncmFpZEFsZXJ0c0Rpc2FibGVkJylcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgcm9sZSBzdWJzY3JpcHRpb25zIHRoYXQgY2FuIGJlIHB1cmNoYXNlZC4gKi9cbiAgZ2V0IHJvbGVTdWJzY3JpcHRpb25zQXZhaWxhYmxlRm9yUHVyY2hhc2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKCdyb2xlU3Vic2NyaXB0aW9uc0F2YWlsYWJsZUZvclB1cmNoYXNlJylcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBndWlsZCBoYXMgZW5hYmxlZCByb2xlIHN1YnNjcmlwdGlvbnMuICovXG4gIGdldCByb2xlU3Vic2NyaXB0aW9uc0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzKCdyb2xlU3Vic2NyaXB0aW9uc0VuYWJsZWQnKVxuICB9XG5cbiAgLyoqIENoZWNrcyB3aGV0aGVyIG9yIG5vdCB0aGUgcGVybWlzc2lvbnMgZXhpc3QgaW4gdGhpcyAqL1xuICBoYXMocGVybWlzc2lvbnM6IEd1aWxkVG9nZ2xlS2V5cyB8IEd1aWxkVG9nZ2xlS2V5c1tdKTogYm9vbGVhbiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBlcm1pc3Npb25zKSkgcmV0dXJuIHN1cGVyLmNvbnRhaW5zKEd1aWxkVG9nZ2xlW3Blcm1pc3Npb25zXSlcblxuICAgIHJldHVybiBzdXBlci5jb250YWlucyhwZXJtaXNzaW9ucy5yZWR1Y2UoKGEsIGIpID0+IChhIHw9IEd1aWxkVG9nZ2xlW2JdKSwgMG4pKVxuICB9XG5cbiAgLyoqIExpc3RzIGFsbCB0aGUgdG9nZ2xlcyBmb3IgdGhlIHJvbGUgYW5kIHdoZXRoZXIgb3Igbm90IGVhY2ggaXMgdHJ1ZSBvciBmYWxzZS4gKi9cbiAgbGlzdCgpOiBSZWNvcmQ8R3VpbGRUb2dnbGVLZXlzLCBib29sZWFuPiB7XG4gICAgY29uc3QganNvbjogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKEd1aWxkVG9nZ2xlKSkge1xuICAgICAganNvbltrZXldID0gc3VwZXIuY29udGFpbnModmFsdWUpXG4gICAgfVxuXG4gICAgcmV0dXJuIGpzb24gYXMgUmVjb3JkPEd1aWxkVG9nZ2xlS2V5cywgYm9vbGVhbj5cbiAgfVxufVxuXG5leHBvcnQgdHlwZSBHdWlsZFRvZ2dsZUtleXMgPSBrZXlvZiB0eXBlb2YgR3VpbGRUb2dnbGVcblxuZXhwb3J0IHR5cGUgR3VpbGRGZWF0dXJlS2V5cyA9ICh0eXBlb2YgZmVhdHVyZU5hbWVzKVtudW1iZXJdXG4iXSwibmFtZXMiOlsiR3VpbGRGZWF0dXJlcyIsIlRvZ2dsZUJpdGZpZWxkQmlnaW50IiwiZmVhdHVyZU5hbWVzIiwiR3VpbGRUb2dnbGUiLCJvd25lciIsIndpZGdldEVuYWJsZWQiLCJsYXJnZSIsInVuYXZhaWxhYmxlIiwicHJlbWl1bVByb2dyZXNzQmFyRW5hYmxlZCIsImFuaW1hdGVkQmFubmVyIiwiYW5pbWF0ZWRJY29uIiwiYXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnNWMiIsImF1dG9Nb2RlcmF0aW9uIiwiYmFubmVyIiwiY29tbXVuaXR5IiwiY3JlYXRvck1vbmV0aXphYmxlUHJvdmlzaW9uYWwiLCJjcmVhdG9yU3RvcmVQYWdlIiwiZGV2ZWxvcGVyU3VwcG9ydFNlcnZlciIsImRpc2NvdmVyYWJsZSIsImZlYXR1cmFibGUiLCJpbnZpdGVzRGlzYWJsZWQiLCJpbnZpdGVTcGxhc2giLCJtZW1iZXJWZXJpZmljYXRpb25HYXRlRW5hYmxlZCIsIm1vcmVTdGlja2VycyIsIm5ld3MiLCJwYXJ0bmVyZWQiLCJwcmV2aWV3RW5hYmxlZCIsInJhaWRBbGVydHNEaXNhYmxlZCIsInJvbGVJY29ucyIsInJvbGVTdWJzY3JpcHRpb25zQXZhaWxhYmxlRm9yUHVyY2hhc2UiLCJyb2xlU3Vic2NyaXB0aW9uc0VuYWJsZWQiLCJ0aWNrZXRlZEV2ZW50c0VuYWJsZWQiLCJ2YW5pdHlVcmwiLCJ2ZXJpZmllZCIsInZpcFJlZ2lvbnMiLCJ3ZWxjb21lU2NyZWVuRW5hYmxlZCIsIkd1aWxkVG9nZ2xlcyIsImNvbnN0cnVjdG9yIiwiZ3VpbGRPclRvZ2dsZXNCaWdpbnQiLCJiaXRmaWVsZCIsImd1aWxkIiwiZmVhdHVyZXMiLCJhZGQiLCJ3aWRnZXRfZW5hYmxlZCIsInByZW1pdW1fcHJvZ3Jlc3NfYmFyX2VuYWJsZWQiLCJpbmNsdWRlcyIsIkFuaW1hdGVkQmFubmVyIiwiQW5pbWF0ZWRJY29uIiwiQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnNWMiIsIkF1dG9Nb2RlcmF0aW9uIiwiQmFubmVyIiwiQ29tbXVuaXR5IiwiQ3JlYXRvck1vbmV0aXphYmxlUHJvdmlzaW9uYWwiLCJDcmVhdG9yU3RvcmVQYWdlIiwiRGV2ZWxvcGVyU3VwcG9ydFNlcnZlciIsIkRpc2NvdmVyYWJsZSIsIkZlYXR1cmFibGUiLCJJbnZpdGVzRGlzYWJsZWQiLCJJbnZpdGVTcGxhc2giLCJNZW1iZXJWZXJpZmljYXRpb25HYXRlRW5hYmxlZCIsIk1vcmVTdGlja2VycyIsIk5ld3MiLCJQYXJ0bmVyZWQiLCJQcmV2aWV3RW5hYmxlZCIsIlJhaWRBbGVydHNEaXNhYmxlZCIsIlJvbGVJY29ucyIsIlJvbGVTdWJzY3JpcHRpb25zQXZhaWxhYmxlRm9yUHVyY2hhc2UiLCJSb2xlU3Vic2NyaXB0aW9uc0VuYWJsZWQiLCJUaWNrZXRlZEV2ZW50c0VuYWJsZWQiLCJWYW5pdHlVcmwiLCJWZXJpZmllZCIsIlZpcFJlZ2lvbnMiLCJXZWxjb21lU2NyZWVuRW5hYmxlZCIsImtleSIsIk9iamVjdCIsImtleXMiLCJjb250YWlucyIsInB1c2giLCJoYXMiLCJwZXJtaXNzaW9ucyIsIkFycmF5IiwiaXNBcnJheSIsInJlZHVjZSIsImEiLCJiIiwibGlzdCIsImpzb24iLCJ2YWx1ZSIsImVudHJpZXMiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGFBQWEsUUFBMkIsb0JBQW1CO0FBQ3BFLFNBQVNDLG9CQUFvQixRQUFRLHNCQUFxQjtBQUUxRCxNQUFNQyxlQUFlO0lBQ25CO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNEO0FBRUQsT0FBTyxNQUFNQyxjQUFjO0lBQ3pCLDhDQUE4QyxHQUM5Q0MsT0FBTyxFQUFFLElBQUksRUFBRTtJQUNmLHlDQUF5QyxHQUN6Q0MsZUFBZSxFQUFFLElBQUksRUFBRTtJQUN2Qiw2Q0FBNkMsR0FDN0NDLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDZix1REFBdUQsR0FDdkRDLGFBQWEsRUFBRSxJQUFJLEVBQUU7SUFDckIseURBQXlELEdBQ3pEQywyQkFBMkIsRUFBRSxJQUFJLEVBQUU7SUFFbkMsZ0NBQWdDO0lBQ2hDLDZDQUE2QztJQUU3Qyx1RUFBdUUsR0FDdkVDLGdCQUFnQixFQUFFLElBQUksR0FBRztJQUN6QiwrREFBK0QsR0FDL0RDLGNBQWMsRUFBRSxJQUFJLEdBQUc7SUFDdkIsMEVBQTBFLEdBQzFFQyxpQ0FBaUMsRUFBRSxJQUFJLEdBQUc7SUFDMUMsdURBQXVELEdBQ3ZEQyxnQkFBZ0IsRUFBRSxJQUFJLEdBQUc7SUFDekIsNkRBQTZELEdBQzdEQyxRQUFRLEVBQUUsSUFBSSxHQUFHO0lBQ2pCLG9JQUFvSSxHQUNwSUMsV0FBVyxFQUFFLElBQUksR0FBRztJQUNwQixnREFBZ0QsR0FDaERDLCtCQUErQixFQUFFLElBQUksR0FBRztJQUN4QyxvRUFBb0Us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
@@ -35,9 +35,9 @@ export function transformUser(bot, payload) {
35
35
  if (props.premiumType && payload.premium_type) user.premiumType = payload.premium_type;
36
36
  if (props.avatar && payload.avatar) user.avatar = iconHashToBigInt(payload.avatar);
37
37
  if (props.banner && payload.banner) user.banner = iconHashToBigInt(payload.banner);
38
- if (props.avatarDecoration && payload.avatar_decoration) user.avatarDecoration = iconHashToBigInt(payload.avatar_decoration);
39
38
  if (props.accentColor && payload.accent_color) user.accentColor = payload.accent_color;
39
+ if (props.avatarDecorationData && payload.avatar_decoration_data) user.avatarDecorationData = bot.transformers.avatarDecorationData(bot, payload.avatar_decoration_data);
40
40
  return bot.transformers.customizers.user(bot, payload, user);
41
41
  }
42
42
 
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90cmFuc2Zvcm1lcnMvdXNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERpc2NvcmRVc2VyLCBQcmVtaXVtVHlwZXMgfSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7IGljb25IYXNoVG9CaWdJbnQgfSBmcm9tICdAZGlzY29yZGVuby91dGlscydcbmltcG9ydCB7IFRvZ2dsZUJpdGZpZWxkLCBVc2VyVG9nZ2xlcywgdHlwZSBCb3QgfSBmcm9tICcuLi9pbmRleC5qcydcblxuY29uc3QgYmFzZVVzZXI6IFBhcnRpYWw8VXNlcj4gJiBCYXNlVXNlciA9IHtcbiAgZ2V0IHRhZygpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgcmV0dXJuIGAke3RoaXMudXNlcm5hbWV9IyR7dGhpcy5kaXNjcmltaW5hdG9yfWBcbiAgfSxcbiAgZ2V0IGJvdCgpIHtcbiAgICByZXR1cm4gISF0aGlzLnRvZ2dsZXM/LmhhcygnYm90JylcbiAgfSxcbiAgZ2V0IHN5c3RlbSgpIHtcbiAgICByZXR1cm4gISF0aGlzLnRvZ2dsZXM/Lmhhcygnc3lzdGVtJylcbiAgfSxcbiAgZ2V0IG1mYUVuYWJsZWQoKSB7XG4gICAgcmV0dXJuICEhdGhpcy50b2dnbGVzPy5oYXMoJ21mYUVuYWJsZWQnKVxuICB9LFxuICBnZXQgdmVyaWZpZWQoKSB7XG4gICAgcmV0dXJuICEhdGhpcy50b2dnbGVzPy5oYXMoJ3ZlcmlmaWVkJylcbiAgfSxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVVzZXIoYm90OiBCb3QsIHBheWxvYWQ6IERpc2NvcmRVc2VyKTogVXNlciB7XG4gIGNvbnN0IHVzZXI6IFVzZXIgPSBPYmplY3QuY3JlYXRlKGJhc2VVc2VyKVxuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMudXNlclxuXG4gIGlmIChwcm9wcy5ib3QgfHwgcHJvcHMuc3lzdGVtIHx8IHByb3BzLm1mYUVuYWJsZWQgfHwgcHJvcHMudmVyaWZpZWQpIHtcbiAgICB1c2VyLnRvZ2dsZXMgPSBuZXcgVXNlclRvZ2dsZXMocGF5bG9hZClcbiAgfVxuICBpZiAocHJvcHMuZmxhZ3MpIHVzZXIuZmxhZ3MgPSBuZXcgVG9nZ2xlQml0ZmllbGQocGF5bG9hZC5mbGFncylcbiAgaWYgKHByb3BzLnB1YmxpY0ZsYWdzKSB1c2VyLnB1YmxpY0ZsYWdzID0gbmV3IFRvZ2dsZUJpdGZpZWxkKHBheWxvYWQucHVibGljX2ZsYWdzKVxuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgdXNlci5pZCA9IGJvdC50cmFuc2Zvcm1lcnMuc25vd2ZsYWtlKHBheWxvYWQuaWQpXG4gIGlmIChwcm9wcy51c2VybmFtZSAmJiBwYXlsb2FkLnVzZXJuYW1lKSB1c2VyLnVzZXJuYW1lID0gcGF5bG9hZC51c2VybmFtZVxuICBpZiAocHJvcHMuZ2xvYmFsTmFtZSAmJiBwYXlsb2FkLmdsb2JhbF9uYW1lKSB1c2VyLmdsb2JhbE5hbWUgPSBwYXlsb2FkLmdsb2JhbF9uYW1lXG4gIGlmIChwcm9wcy5kaXNjcmltaW5hdG9yICYmIHBheWxvYWQuZGlzY3JpbWluYXRvcikgdXNlci5kaXNjcmltaW5hdG9yID0gcGF5bG9hZC5kaXNjcmltaW5hdG9yXG4gIGlmIChwcm9wcy5sb2NhbGUgJiYgcGF5bG9hZC5sb2NhbGUpIHVzZXIubG9jYWxlID0gcGF5bG9hZC5sb2NhbGVcbiAgaWYgKHByb3BzLmVtYWlsICYmIHBheWxvYWQuZW1haWwpIHVzZXIuZW1haWwgPSBwYXlsb2FkLmVtYWlsXG4gIGlmIChwcm9wcy5wcmVtaXVtVHlwZSAmJiBwYXlsb2FkLnByZW1pdW1fdHlwZSkgdXNlci5wcmVtaXVtVHlwZSA9IHBheWxvYWQucHJlbWl1bV90eXBlXG4gIGlmIChwcm9wcy5hdmF0YXIgJiYgcGF5bG9hZC5hdmF0YXIpIHVzZXIuYXZhdGFyID0gaWNvbkhhc2hUb0JpZ0ludChwYXlsb2FkLmF2YXRhcilcbiAgaWYgKHByb3BzLmJhbm5lciAmJiBwYXlsb2FkLmJhbm5lcikgdXNlci5iYW5uZXIgPSBpY29uSGFzaFRvQmlnSW50KHBheWxvYWQuYmFubmVyKVxuICBpZiAocHJvcHMuYXZhdGFyRGVjb3JhdGlvbiAmJiBwYXlsb2FkLmF2YXRhcl9kZWNvcmF0aW9uKSB1c2VyLmF2YXRhckRlY29yYXRpb24gPSBpY29uSGFzaFRvQmlnSW50KHBheWxvYWQuYXZhdGFyX2RlY29yYXRpb24pXG4gIGlmIChwcm9wcy5hY2NlbnRDb2xvciAmJiBwYXlsb2FkLmFjY2VudF9jb2xvcikgdXNlci5hY2NlbnRDb2xvciA9IHBheWxvYWQuYWNjZW50X2NvbG9yXG5cbiAgcmV0dXJuIGJvdC50cmFuc2Zvcm1lcnMuY3VzdG9taXplcnMudXNlcihib3QsIHBheWxvYWQsIHVzZXIpXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZVVzZXIge1xuICAvKiogVGhlIHVzZXIgdGFnIGluIHRoZSBmb3JtIG9mIHVzZXJuYW1lI2Rpc2NyaW1pbmF0b3IgKi9cbiAgdGFnOiBzdHJpbmdcbiAgLyoqIFdoZXRoZXIgdGhlIHVzZXIgYmVsb25ncyB0byBhbiBPQXV0aDIgYXBwbGljYXRpb24gKi9cbiAgYm90OiBib29sZWFuXG4gIC8qKiBXaGV0aGVyIHRoZSB1c2VyIGlzIGFuIE9mZmljaWFsIERpc2NvcmQgU3lzdGVtIHVzZXIgKHBhcnQgb2YgdGhlIHVyZ2VudCBtZXNzYWdlIHN5c3RlbSkgKi9cbiAgc3lzdGVtOiBib29sZWFuXG4gIC8qKiBXaGV0aGVyIHRoZSB1c2VyIGhhcyB0d28gZmFjdG9yIGVuYWJsZWQgb24gdGhlaXIgYWNjb3VudCAqL1xuICBtZmFFbmFibGVkOiBib29sZWFuXG4gIC8qKiBXaGV0aGVyIHRoZSBlbWFpbCBvbiB0aGlzIGFjY291bnQgaGFzIGJlZW4gdmVyaWZpZWQgKi9cbiAgdmVyaWZpZWQ6IGJvb2xlYW5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyIGV4dGVuZHMgQmFzZVVzZXIge1xuICAvKiogQ29tcHJlc3NlZCB2ZXJzaW9uIG9mIGFsbCB0aGUgYm9vbGVhbnMgb24gYSB1c2VyLiAqL1xuICB0b2dnbGVzPzogVXNlclRvZ2dsZXNcbiAgLyoqIFRoZSB1c2VyJ3MgdXNlcm5hbWUsIG5vdCB1bmlxdWUgYWNyb3NzIHRoZSBwbGF0Zm9ybSAqL1xuICB1c2VybmFtZTogc3RyaW5nXG4gIC8qKiBUaGUgdXNlcidzIGRpc3BsYXkgbmFtZSwgaWYgaXQgaXMgc2V0LiBGb3IgYm90cywgdGhpcyBpcyB0aGUgYXBwbGljYXRpb24gbmFtZSAqL1xuICBnbG9iYWxOYW1lPzogc3RyaW5nXG4gIC8qKiBUaGUgdXNlcidzIGNob3NlbiBsYW5ndWFnZSBvcHRpb24gKi9cbiAgbG9jYWxlPzogc3RyaW5nXG4gIC8qKiBUaGUgZmxhZ3Mgb24gYSB1c2VyJ3MgYWNjb3VudCAqL1xuICBmbGFncz86IFRvZ2dsZUJpdGZpZWxkXG4gIC8qKiBUaGUgdHlwZSBvZiBOaXRybyBzdWJzY3JpcHRpb24gb24gYSB1c2VyJ3MgYWNjb3VudCAqL1xuICBwcmVtaXVtVHlwZT86IFByZW1pdW1UeXBlc1xuICAvKiogVGhlIHB1YmxpYyBmbGFncyBvbiBhIHVzZXIncyBhY2NvdW50ICovXG4gIHB1YmxpY0ZsYWdzPzogVG9nZ2xlQml0ZmllbGRcbiAgLyoqIHRoZSB1c2VyJ3MgYmFubmVyIGNvbG9yIGVuY29kZWQgYXMgYW4gaW50ZWdlciByZXByZXNlbnRhdGlvbiBvZiBoZXhhZGVjaW1hbCBjb2xvciBjb2RlICovXG4gIGFjY2VudENvbG9yPzogbnVtYmVyXG4gIC8qKiBUaGUgdXNlcidzIGlkICovXG4gIGlkOiBiaWdpbnRcbiAgLyoqIFRoZSB1c2VyJ3MgZGlzY29yZC10YWcgKi9cbiAgZGlzY3JpbWluYXRvcjogc3RyaW5nXG4gIC8qKiBUaGUgdXNlcidzIGF2YXRhciBoYXNoICovXG4gIGF2YXRhcj86IGJpZ2ludFxuICAvKiogVGhlIHVzZXIncyBlbWFpbCAqL1xuICBlbWFpbD86IHN0cmluZ1xuICAvKiogdGhlIHVzZXIncyBiYW5uZXIsIG9yIG51bGwgaWYgdW5zZXQgKi9cbiAgYmFubmVyPzogYmlnaW50XG4gIC8qKiB0aGUgdXNlcidzIGF2YXRhciBkZWNvcmF0aW9uLCBvciBudWxsIGlmIHVuc2V0ICovXG4gIGF2YXRhckRlY29yYXRpb24/OiBiaWdpbnRcbn1cbiJdLCJuYW1lcyI6WyJpY29uSGFzaFRvQmlnSW50IiwiVG9nZ2xlQml0ZmllbGQiLCJVc2VyVG9nZ2xlcyIsImJhc2VVc2VyIiwidGFnIiwidXNlcm5hbWUiLCJkaXNjcmltaW5hdG9yIiwiYm90IiwidG9nZ2xlcyIsImhhcyIsInN5c3RlbSIsIm1mYUVuYWJsZWQiLCJ2ZXJpZmllZCIsInRyYW5zZm9ybVVzZXIiLCJwYXlsb2FkIiwidXNlciIsIk9iamVjdCIsImNyZWF0ZSIsInByb3BzIiwidHJhbnNmb3JtZXJzIiwiZGVzaXJlZFByb3BlcnRpZXMiLCJmbGFncyIsInB1YmxpY0ZsYWdzIiwicHVibGljX2ZsYWdzIiwiaWQiLCJzbm93Zmxha2UiLCJnbG9iYWxOYW1lIiwiZ2xvYmFsX25hbWUiLCJsb2NhbGUiLCJlbWFpbCIsInByZW1pdW1UeXBlIiwicHJlbWl1bV90eXBlIiwiYXZhdGFyIiwiYmFubmVyIiwiYXZhdGFyRGVjb3JhdGlvbiIsImF2YXRhcl9kZWNvcmF0aW9uIiwiYWNjZW50Q29sb3IiLCJhY2NlbnRfY29sb3IiLCJjdXN0b21pemVycyJdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBU0EsZ0JBQWdCLFFBQVEsb0JBQW1CO0FBQ3BELFNBQVNDLGNBQWMsRUFBRUMsV0FBVyxRQUFrQixjQUFhO0FBRW5FLE1BQU1DLFdBQXFDO0lBQ3pDLElBQUlDLE9BQU07UUFDUiw0RUFBNEU7UUFDNUUsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQ0MsYUFBYSxDQUFDLENBQUM7SUFDakQ7SUFDQSxJQUFJQyxPQUFNO1FBQ1IsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDQyxPQUFPLEVBQUVDLElBQUk7SUFDN0I7SUFDQSxJQUFJQyxVQUFTO1FBQ1gsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDRixPQUFPLEVBQUVDLElBQUk7SUFDN0I7SUFDQSxJQUFJRSxjQUFhO1FBQ2YsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDSCxPQUFPLEVBQUVDLElBQUk7SUFDN0I7SUFDQSxJQUFJRyxZQUFXO1FBQ2IsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDSixPQUFPLEVBQUVDLElBQUk7SUFDN0I7QUFDRjtBQUVBLE9BQU8sU0FBU0ksY0FBY04sR0FBUSxFQUFFTyxPQUFvQjtJQUMxRCxNQUFNQyxPQUFhQyxPQUFPQyxNQUFNLENBQUNkO0lBQ2pDLE1BQU1lLFFBQVFYLElBQUlZLFlBQVksQ0FBQ0MsaUJBQWlCLENBQUNMLElBQUk7SUFFckQsSUFBSUcsTUFBTVgsR0FBRyxJQUFJVyxNQUFNUixNQUFNLElBQUlRLE1BQU1QLFVBQVUsSUFBSU8sTUFBTU4sUUFBUSxFQUFFO1FBQ25FRyxLQUFLUCxPQUFPLEdBQUcsSUFBSU4sWUFBWVk7SUFDakM7SUFDQSxJQUFJSSxNQUFNRyxLQUFLLEVBQUVOLEtBQUtNLEtBQUssR0FBRyxJQUFJcEIsZUFBZWEsUUFBUU8sS0FBSztJQUM5RCxJQUFJSCxNQUFNSSxXQUFXLEVBQUVQLEtBQUtPLFdBQVcsR0FBRyxJQUFJckIsZUFBZWEsUUFBUVMsWUFBWTtJQUNqRixJQUFJTCxNQUFNTSxFQUFFLElBQUlWLFFBQVFVLEVBQUUsRUFBRVQsS0FBS1MsRUFBRSxHQUFHakIsSUFBSVksWUFBWSxDQUFDTSxTQUFTLENBQUNYLFFBQVFVLEVBQUU7SUFDM0UsSUFBSU4sTUFBTWIsUUFBUSxJQUFJUyxRQUFRVCxRQUFRLEVBQUVVLEtBQUtWLFFBQVEsR0FBR1MsUUFBUVQsUUFBUTtJQUN4RSxJQUFJYSxNQUFNUSxVQUFVLElBQUlaLFFBQVFhLFdBQVcsRUFBRVosS0FBS1csVUFBVSxHQUFHWixRQUFRYSxXQUFXO0lBQ2xGLElBQUlULE1BQU1aLGFBQWEsSUFBSVEsUUFBUVIsYUFBYSxFQUFFUyxLQUFLVCxhQUFhLEdBQUdRLFFBQVFSLGFBQWE7SUFDNUYsSUFBSVksTUFBTVUsTUFBTSxJQUFJZCxRQUFRYyxNQUFNLEVBQUViLEtBQUthLE1BQU0sR0FBR2QsUUFBUWMsTUFBTTtJQUNoRSxJQUFJVixNQUFNVyxLQUFLLElBQUlmLFFBQVFlLEtBQUssRUFBRWQsS0FBS2MsS0FBSyxHQUFHZixRQUFRZSxLQUFLO0lBQzVELElBQUlYLE1BQU1ZLFdBQVcsSUFBSWhCLFFBQVFpQixZQUFZLEVBQUVoQixLQUFLZSxXQUFXLEdBQUdoQixRQUFRaUIsWUFBWTtJQUN0RixJQUFJYixNQUFNYyxNQUFNLElBQUlsQixRQUFRa0IsTUFBTSxFQUFFakIsS0FBS2lCLE1BQU0sR0FBR2hDLGlCQUFpQmMsUUFBUWtCLE1BQU07SUFDakYsSUFBSWQsTUFBTWUsTUFBTSxJQUFJbkIsUUFBUW1CLE1BQU0sRUFBRWxCLEtBQUtrQixNQUFNLEdBQUdqQyxpQkFBaUJjLFFBQVFtQixNQUFNO0lBQ2pGLElBQUlmLE1BQU1nQixnQkFBZ0IsSUFBSXBCLFFBQVFxQixpQkFBaUIsRUFBRXBCLEtBQUttQixnQkFBZ0IsR0FBR2xDLGlCQUFpQmMsUUFBUXFCLGlCQUFpQjtJQUMzSCxJQUFJakIsTUFBTWtCLFdBQVcsSUFBSXRCLFFBQVF1QixZQUFZLEVBQUV0QixLQUFLcUIsV0FBVyxHQUFHdEIsUUFBUXVCLFlBQVk7SUFFdEYsT0FBTzlCLElBQUlZLFlBQVksQ0FBQ21CLFdBQVcsQ0FBQ3ZCLElBQUksQ0FBQ1IsS0FBS08sU0FBU0M7QUFDekQifQ==
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90cmFuc2Zvcm1lcnMvdXNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERpc2NvcmRVc2VyLCBQcmVtaXVtVHlwZXMgfSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7IGljb25IYXNoVG9CaWdJbnQgfSBmcm9tICdAZGlzY29yZGVuby91dGlscydcbmltcG9ydCB7IFRvZ2dsZUJpdGZpZWxkLCBVc2VyVG9nZ2xlcywgdHlwZSBBdmF0YXJEZWNvcmF0aW9uRGF0YSwgdHlwZSBCb3QgfSBmcm9tICcuLi9pbmRleC5qcydcblxuY29uc3QgYmFzZVVzZXI6IFBhcnRpYWw8VXNlcj4gJiBCYXNlVXNlciA9IHtcbiAgZ2V0IHRhZygpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgcmV0dXJuIGAke3RoaXMudXNlcm5hbWV9IyR7dGhpcy5kaXNjcmltaW5hdG9yfWBcbiAgfSxcbiAgZ2V0IGJvdCgpIHtcbiAgICByZXR1cm4gISF0aGlzLnRvZ2dsZXM/LmhhcygnYm90JylcbiAgfSxcbiAgZ2V0IHN5c3RlbSgpIHtcbiAgICByZXR1cm4gISF0aGlzLnRvZ2dsZXM/Lmhhcygnc3lzdGVtJylcbiAgfSxcbiAgZ2V0IG1mYUVuYWJsZWQoKSB7XG4gICAgcmV0dXJuICEhdGhpcy50b2dnbGVzPy5oYXMoJ21mYUVuYWJsZWQnKVxuICB9LFxuICBnZXQgdmVyaWZpZWQoKSB7XG4gICAgcmV0dXJuICEhdGhpcy50b2dnbGVzPy5oYXMoJ3ZlcmlmaWVkJylcbiAgfSxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVVzZXIoYm90OiBCb3QsIHBheWxvYWQ6IERpc2NvcmRVc2VyKTogVXNlciB7XG4gIGNvbnN0IHVzZXI6IFVzZXIgPSBPYmplY3QuY3JlYXRlKGJhc2VVc2VyKVxuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMudXNlclxuXG4gIGlmIChwcm9wcy5ib3QgfHwgcHJvcHMuc3lzdGVtIHx8IHByb3BzLm1mYUVuYWJsZWQgfHwgcHJvcHMudmVyaWZpZWQpIHtcbiAgICB1c2VyLnRvZ2dsZXMgPSBuZXcgVXNlclRvZ2dsZXMocGF5bG9hZClcbiAgfVxuICBpZiAocHJvcHMuZmxhZ3MpIHVzZXIuZmxhZ3MgPSBuZXcgVG9nZ2xlQml0ZmllbGQocGF5bG9hZC5mbGFncylcbiAgaWYgKHByb3BzLnB1YmxpY0ZsYWdzKSB1c2VyLnB1YmxpY0ZsYWdzID0gbmV3IFRvZ2dsZUJpdGZpZWxkKHBheWxvYWQucHVibGljX2ZsYWdzKVxuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgdXNlci5pZCA9IGJvdC50cmFuc2Zvcm1lcnMuc25vd2ZsYWtlKHBheWxvYWQuaWQpXG4gIGlmIChwcm9wcy51c2VybmFtZSAmJiBwYXlsb2FkLnVzZXJuYW1lKSB1c2VyLnVzZXJuYW1lID0gcGF5bG9hZC51c2VybmFtZVxuICBpZiAocHJvcHMuZ2xvYmFsTmFtZSAmJiBwYXlsb2FkLmdsb2JhbF9uYW1lKSB1c2VyLmdsb2JhbE5hbWUgPSBwYXlsb2FkLmdsb2JhbF9uYW1lXG4gIGlmIChwcm9wcy5kaXNjcmltaW5hdG9yICYmIHBheWxvYWQuZGlzY3JpbWluYXRvcikgdXNlci5kaXNjcmltaW5hdG9yID0gcGF5bG9hZC5kaXNjcmltaW5hdG9yXG4gIGlmIChwcm9wcy5sb2NhbGUgJiYgcGF5bG9hZC5sb2NhbGUpIHVzZXIubG9jYWxlID0gcGF5bG9hZC5sb2NhbGVcbiAgaWYgKHByb3BzLmVtYWlsICYmIHBheWxvYWQuZW1haWwpIHVzZXIuZW1haWwgPSBwYXlsb2FkLmVtYWlsXG4gIGlmIChwcm9wcy5wcmVtaXVtVHlwZSAmJiBwYXlsb2FkLnByZW1pdW1fdHlwZSkgdXNlci5wcmVtaXVtVHlwZSA9IHBheWxvYWQucHJlbWl1bV90eXBlXG4gIGlmIChwcm9wcy5hdmF0YXIgJiYgcGF5bG9hZC5hdmF0YXIpIHVzZXIuYXZhdGFyID0gaWNvbkhhc2hUb0JpZ0ludChwYXlsb2FkLmF2YXRhcilcbiAgaWYgKHByb3BzLmJhbm5lciAmJiBwYXlsb2FkLmJhbm5lcikgdXNlci5iYW5uZXIgPSBpY29uSGFzaFRvQmlnSW50KHBheWxvYWQuYmFubmVyKVxuICBpZiAocHJvcHMuYWNjZW50Q29sb3IgJiYgcGF5bG9hZC5hY2NlbnRfY29sb3IpIHVzZXIuYWNjZW50Q29sb3IgPSBwYXlsb2FkLmFjY2VudF9jb2xvclxuICBpZiAocHJvcHMuYXZhdGFyRGVjb3JhdGlvbkRhdGEgJiYgcGF5bG9hZC5hdmF0YXJfZGVjb3JhdGlvbl9kYXRhKVxuICAgIHVzZXIuYXZhdGFyRGVjb3JhdGlvbkRhdGEgPSBib3QudHJhbnNmb3JtZXJzLmF2YXRhckRlY29yYXRpb25EYXRhKGJvdCwgcGF5bG9hZC5hdmF0YXJfZGVjb3JhdGlvbl9kYXRhKVxuXG4gIHJldHVybiBib3QudHJhbnNmb3JtZXJzLmN1c3RvbWl6ZXJzLnVzZXIoYm90LCBwYXlsb2FkLCB1c2VyKVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VVc2VyIHtcbiAgLyoqIFRoZSB1c2VyIHRhZyBpbiB0aGUgZm9ybSBvZiB1c2VybmFtZSNkaXNjcmltaW5hdG9yICovXG4gIHRhZzogc3RyaW5nXG4gIC8qKiBXaGV0aGVyIHRoZSB1c2VyIGJlbG9uZ3MgdG8gYW4gT0F1dGgyIGFwcGxpY2F0aW9uICovXG4gIGJvdDogYm9vbGVhblxuICAvKiogV2hldGhlciB0aGUgdXNlciBpcyBhbiBPZmZpY2lhbCBEaXNjb3JkIFN5c3RlbSB1c2VyIChwYXJ0IG9mIHRoZSB1cmdlbnQgbWVzc2FnZSBzeXN0ZW0pICovXG4gIHN5c3RlbTogYm9vbGVhblxuICAvKiogV2hldGhlciB0aGUgdXNlciBoYXMgdHdvIGZhY3RvciBlbmFibGVkIG9uIHRoZWlyIGFjY291bnQgKi9cbiAgbWZhRW5hYmxlZDogYm9vbGVhblxuICAvKiogV2hldGhlciB0aGUgZW1haWwgb24gdGhpcyBhY2NvdW50IGhhcyBiZWVuIHZlcmlmaWVkICovXG4gIHZlcmlmaWVkOiBib29sZWFuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlciBleHRlbmRzIEJhc2VVc2VyIHtcbiAgLyoqIENvbXByZXNzZWQgdmVyc2lvbiBvZiBhbGwgdGhlIGJvb2xlYW5zIG9uIGEgdXNlci4gKi9cbiAgdG9nZ2xlcz86IFVzZXJUb2dnbGVzXG4gIC8qKiBUaGUgdXNlcidzIHVzZXJuYW1lLCBub3QgdW5pcXVlIGFjcm9zcyB0aGUgcGxhdGZvcm0gKi9cbiAgdXNlcm5hbWU6IHN0cmluZ1xuICAvKiogVGhlIHVzZXIncyBkaXNwbGF5IG5hbWUsIGlmIGl0IGlzIHNldC4gRm9yIGJvdHMsIHRoaXMgaXMgdGhlIGFwcGxpY2F0aW9uIG5hbWUgKi9cbiAgZ2xvYmFsTmFtZT86IHN0cmluZ1xuICAvKiogVGhlIHVzZXIncyBjaG9zZW4gbGFuZ3VhZ2Ugb3B0aW9uICovXG4gIGxvY2FsZT86IHN0cmluZ1xuICAvKiogVGhlIGZsYWdzIG9uIGEgdXNlcidzIGFjY291bnQgKi9cbiAgZmxhZ3M/OiBUb2dnbGVCaXRmaWVsZFxuICAvKiogVGhlIHR5cGUgb2YgTml0cm8gc3Vic2NyaXB0aW9uIG9uIGEgdXNlcidzIGFjY291bnQgKi9cbiAgcHJlbWl1bVR5cGU/OiBQcmVtaXVtVHlwZXNcbiAgLyoqIFRoZSBwdWJsaWMgZmxhZ3Mgb24gYSB1c2VyJ3MgYWNjb3VudCAqL1xuICBwdWJsaWNGbGFncz86IFRvZ2dsZUJpdGZpZWxkXG4gIC8qKiB0aGUgdXNlcidzIGJhbm5lciBjb2xvciBlbmNvZGVkIGFzIGFuIGludGVnZXIgcmVwcmVzZW50YXRpb24gb2YgaGV4YWRlY2ltYWwgY29sb3IgY29kZSAqL1xuICBhY2NlbnRDb2xvcj86IG51bWJlclxuICAvKiogVGhlIHVzZXIncyBpZCAqL1xuICBpZDogYmlnaW50XG4gIC8qKiBUaGUgdXNlcidzIGRpc2NvcmQtdGFnICovXG4gIGRpc2NyaW1pbmF0b3I6IHN0cmluZ1xuICAvKiogVGhlIHVzZXIncyBhdmF0YXIgaGFzaCAqL1xuICBhdmF0YXI/OiBiaWdpbnRcbiAgLyoqIFRoZSB1c2VyJ3MgZW1haWwgKi9cbiAgZW1haWw/OiBzdHJpbmdcbiAgLyoqIHRoZSB1c2VyJ3MgYmFubmVyLCBvciBudWxsIGlmIHVuc2V0ICovXG4gIGJhbm5lcj86IGJpZ2ludFxuICAvKiogZGF0YSBmb3IgdGhlIHVzZXIncyBhdmF0YXIgZGVjb3JhdGlvbiAqL1xuICBhdmF0YXJEZWNvcmF0aW9uRGF0YT86IEF2YXRhckRlY29yYXRpb25EYXRhXG59XG4iXSwibmFtZXMiOlsiaWNvbkhhc2hUb0JpZ0ludCIsIlRvZ2dsZUJpdGZpZWxkIiwiVXNlclRvZ2dsZXMiLCJiYXNlVXNlciIsInRhZyIsInVzZXJuYW1lIiwiZGlzY3JpbWluYXRvciIsImJvdCIsInRvZ2dsZXMiLCJoYXMiLCJzeXN0ZW0iLCJtZmFFbmFibGVkIiwidmVyaWZpZWQiLCJ0cmFuc2Zvcm1Vc2VyIiwicGF5bG9hZCIsInVzZXIiLCJPYmplY3QiLCJjcmVhdGUiLCJwcm9wcyIsInRyYW5zZm9ybWVycyIsImRlc2lyZWRQcm9wZXJ0aWVzIiwiZmxhZ3MiLCJwdWJsaWNGbGFncyIsInB1YmxpY19mbGFncyIsImlkIiwic25vd2ZsYWtlIiwiZ2xvYmFsTmFtZSIsImdsb2JhbF9uYW1lIiwibG9jYWxlIiwiZW1haWwiLCJwcmVtaXVtVHlwZSIsInByZW1pdW1fdHlwZSIsImF2YXRhciIsImJhbm5lciIsImFjY2VudENvbG9yIiwiYWNjZW50X2NvbG9yIiwiYXZhdGFyRGVjb3JhdGlvbkRhdGEiLCJhdmF0YXJfZGVjb3JhdGlvbl9kYXRhIiwiY3VzdG9taXplcnMiXSwibWFwcGluZ3MiOiJBQUNBLFNBQVNBLGdCQUFnQixRQUFRLG9CQUFtQjtBQUNwRCxTQUFTQyxjQUFjLEVBQUVDLFdBQVcsUUFBNkMsY0FBYTtBQUU5RixNQUFNQyxXQUFxQztJQUN6QyxJQUFJQyxPQUFNO1FBQ1IsNEVBQTRFO1FBQzVFLE9B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