application-sidebar 1.0.0

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 (121) hide show
  1. package/README.md +24 -0
  2. package/application-sidebar.theme.scss +44 -0
  3. package/assets/logos/Intentwise.svg +11 -0
  4. package/assets/logos/ProfitlogiQ_logo.png +0 -0
  5. package/assets/logos/bmc_logo.png +0 -0
  6. package/assets/logos/intentwise_logo.png +0 -0
  7. package/assets/logos/krooga_logo.png +0 -0
  8. package/assets/logos/opt_logo.png +0 -0
  9. package/assets/logos/optivations_logo.png +0 -0
  10. package/assets/logos/upstart_logo.png +0 -0
  11. package/assets/sidemenu-icons/Perf_Diagnostics_Detail.svg +15 -0
  12. package/assets/sidemenu-icons/Performance_Diagnostics.svg +12 -0
  13. package/assets/sidemenu-icons/account_management.svg +15 -0
  14. package/assets/sidemenu-icons/asin_overview.svg +18 -0
  15. package/assets/sidemenu-icons/audience.svg +22 -0
  16. package/assets/sidemenu-icons/auto_targeting.svg +16 -0
  17. package/assets/sidemenu-icons/automated_rule.svg +17 -0
  18. package/assets/sidemenu-icons/bookmark-archive.svg +15 -0
  19. package/assets/sidemenu-icons/calendar.svg +1 -0
  20. package/assets/sidemenu-icons/campaign_placement.svg +16 -0
  21. package/assets/sidemenu-icons/campaign_report.svg +13 -0
  22. package/assets/sidemenu-icons/cardboard-box.svg +13 -0
  23. package/assets/sidemenu-icons/category_reporting.svg +14 -0
  24. package/assets/sidemenu-icons/coins.svg +24 -0
  25. package/assets/sidemenu-icons/compettive_ad_tracking.svg +17 -0
  26. package/assets/sidemenu-icons/configuration-5968_94f8832d-fd0a-4001-9bf0-c5820072ab85.svg +16 -0
  27. package/assets/sidemenu-icons/creatives.svg +18 -0
  28. package/assets/sidemenu-icons/demand_forcasting.svg +27 -0
  29. package/assets/sidemenu-icons/document-error.svg +17 -0
  30. package/assets/sidemenu-icons/download-40586C.svg +1 -0
  31. package/assets/sidemenu-icons/favorite-window.svg +19 -0
  32. package/assets/sidemenu-icons/file-explorer.svg +12 -0
  33. package/assets/sidemenu-icons/help-circle.svg +1 -0
  34. package/assets/sidemenu-icons/help-icon.svg +1 -0
  35. package/assets/sidemenu-icons/help_icon.png +0 -0
  36. package/assets/sidemenu-icons/help_icon_white.png +0 -0
  37. package/assets/sidemenu-icons/high_level_metrics.svg +20 -0
  38. package/assets/sidemenu-icons/horizontal-mixer-158_fe655cc6-eb7e-4e44-af0f-0ce0830c9433.svg +19 -0
  39. package/assets/sidemenu-icons/inventory_forecast.svg +13 -0
  40. package/assets/sidemenu-icons/keyword_suggestion.svg +16 -0
  41. package/assets/sidemenu-icons/keywords.svg +18 -0
  42. package/assets/sidemenu-icons/line-item.svg +17 -0
  43. package/assets/sidemenu-icons/management.svg +14 -0
  44. package/assets/sidemenu-icons/maximize-40586C.svg +1 -0
  45. package/assets/sidemenu-icons/maximize.svg +1 -0
  46. package/assets/sidemenu-icons/mental-health.svg +16 -0
  47. package/assets/sidemenu-icons/minimize-40586C.svg +1 -0
  48. package/assets/sidemenu-icons/minimize.svg +1 -0
  49. package/assets/sidemenu-icons/new_product.svg +11 -0
  50. package/assets/sidemenu-icons/orders.svg +15 -0
  51. package/assets/sidemenu-icons/organic_ranking.svg +17 -0
  52. package/assets/sidemenu-icons/placement.svg +14 -0
  53. package/assets/sidemenu-icons/portfolio-grid.svg +17 -0
  54. package/assets/sidemenu-icons/pos_and_ams.svg +17 -0
  55. package/assets/sidemenu-icons/price-tag.svg +14 -0
  56. package/assets/sidemenu-icons/prime_day.svg +16 -0
  57. package/assets/sidemenu-icons/product_asin.svg +21 -0
  58. package/assets/sidemenu-icons/product_content.svg +13 -0
  59. package/assets/sidemenu-icons/product_overview_download.svg +15 -0
  60. package/assets/sidemenu-icons/purchase-order.svg +15 -0
  61. package/assets/sidemenu-icons/quit.svg +12 -0
  62. package/assets/sidemenu-icons/radar-signal.svg +15 -0
  63. package/assets/sidemenu-icons/report-download.svg +15 -0
  64. package/assets/sidemenu-icons/report.svg +18 -0
  65. package/assets/sidemenu-icons/ring-binders-3503_6f429b0c-3931-476a-b65e-ce5a4b9249de.svg +25 -0
  66. package/assets/sidemenu-icons/sales_overview.svg +19 -0
  67. package/assets/sidemenu-icons/sb_search_terms.svg +22 -0
  68. package/assets/sidemenu-icons/sc_order_report.svg +18 -0
  69. package/assets/sidemenu-icons/schedule_icon.png +0 -0
  70. package/assets/sidemenu-icons/search-place.svg +15 -0
  71. package/assets/sidemenu-icons/setting.svg +12 -0
  72. package/assets/sidemenu-icons/settings-2180_735e6b4c-49a9-4407-9ca1-5078e3c6eb1b.svg +20 -0
  73. package/assets/sidemenu-icons/signout_icon.png +0 -0
  74. package/assets/sidemenu-icons/sorting-149_8150e98a-647b-477d-a382-2ff46463a1fd.svg +16 -0
  75. package/assets/sidemenu-icons/sp_ad-groups.svg +16 -0
  76. package/assets/sidemenu-icons/sreenath_pic.jpg +0 -0
  77. package/assets/sidemenu-icons/targeting.svg +14 -0
  78. package/assets/sidemenu-icons/user-icon.svg +1 -0
  79. package/assets/sidemenu-icons/user.svg +1 -0
  80. package/assets/sidemenu-icons/user_icon.png +0 -0
  81. package/assets/sidemenu-icons/user_icon_white.png +0 -0
  82. package/assets/sidemenu-icons/vendor_charge_backs.svg +12 -0
  83. package/assets/sidemenu-icons/vendor_replenishment_code.svg +16 -0
  84. package/assets/sidemenu-icons/vendor_sales_alert.svg +20 -0
  85. package/assets/sidemenu-icons/vendor_sales_overivew.svg +14 -0
  86. package/assets/sidemenu-icons/video-icon.svg +1 -0
  87. package/assets/sidemenu-icons/video.svg +1 -0
  88. package/assets/sidemenu-icons/video_icon.png +0 -0
  89. package/assets/sidemenu-icons/video_icon_white.png +0 -0
  90. package/assets/sidemenu-icons/x-circle.svg +1 -0
  91. package/esm2022/application-sidebar.mjs +5 -0
  92. package/esm2022/lib/app-details.mjs +2 -0
  93. package/esm2022/lib/application-sidebar.component.mjs +473 -0
  94. package/esm2022/lib/application-sidebar.module.mjs +152 -0
  95. package/esm2022/lib/constants.mjs +1016 -0
  96. package/esm2022/lib/nav-menu-item.mjs +2 -0
  97. package/esm2022/lib/nav-menu.directive.mjs +32 -0
  98. package/esm2022/lib/nav-menus/nav-menus.component.mjs +264 -0
  99. package/esm2022/lib/services/application-sidebar.service.mjs +627 -0
  100. package/esm2022/lib/services/rest-api.services.mjs +98 -0
  101. package/esm2022/lib/services/url-context.service.mjs +104 -0
  102. package/esm2022/lib/translations/translations-en.mjs +33 -0
  103. package/esm2022/lib/translations/translations-ja.mjs +33 -0
  104. package/esm2022/public-api.mjs +7 -0
  105. package/fesm2022/application-sidebar.mjs +2778 -0
  106. package/fesm2022/application-sidebar.mjs.map +1 -0
  107. package/index.d.ts +5 -0
  108. package/lib/app-details.d.ts +13 -0
  109. package/lib/application-sidebar.component.d.ts +63 -0
  110. package/lib/application-sidebar.module.d.ts +44 -0
  111. package/lib/constants.d.ts +496 -0
  112. package/lib/nav-menu-item.d.ts +32 -0
  113. package/lib/nav-menu.directive.d.ts +17 -0
  114. package/lib/nav-menus/nav-menus.component.d.ts +41 -0
  115. package/lib/services/application-sidebar.service.d.ts +97 -0
  116. package/lib/services/rest-api.services.d.ts +22 -0
  117. package/lib/services/url-context.service.d.ts +15 -0
  118. package/lib/translations/translations-en.d.ts +32 -0
  119. package/lib/translations/translations-ja.d.ts +32 -0
  120. package/package.json +72 -0
  121. package/public-api.d.ts +3 -0
@@ -0,0 +1,627 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { MENULIST } from '../constants';
3
+ import { GLOBAL_SETTING_LIST } from '../constants';
4
+ import { RestApiService } from './rest-api.services';
5
+ import { ActivatedRoute } from '@angular/router';
6
+ import { UrlContextService } from './url-context.service';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "./rest-api.services";
9
+ import * as i2 from "@angular/router";
10
+ import * as i3 from "./url-context.service";
11
+ export class ApplicationSidebarService {
12
+ RestApiService;
13
+ activatedRoute;
14
+ urlContextService;
15
+ conditions = ['org_user_ctrl', 'visibility_roles', 'visibility_roles_not_in', 'account_ids', 'organization_ids', 'organization_ids_not_in', 'account_type', 'account_ids_not_in', 'organization_setting', 'organization_setting_not_in', 'campaign_types', 'incontext_campaign_targeting', 'incontext_campaign_targeting_walmart', 'subscription_types', 'siteIds', 'not_account_type', 'not_account_name', 'disable_readonly_org', 'user_emails', 'app_org_setting'];
16
+ MenuList = [];
17
+ applicationIds = ['ads_amazon_advertising', 'ads_seller_sales', 'ads_vendor_sales', 'ads_amazon_content_share_of_voice', 'ads_amazon_content_content_analytics', 'ads_amazon_dsp', 'ads_amazon_attribution', 'ads_instacart', 'ads_criteo', 'ads_walmart', 'ads_data_platform', 'amc-platform-web', 'ads_amazon_seller_seller_analytics', 'ads_amazon_seller_vendor_analytics'];
18
+ enableAllMenusByOrg = [30780];
19
+ appDetails;
20
+ isStructureApiSupport;
21
+ SettingsMenuList;
22
+ appNames;
23
+ contentAppRoutes = ['content-insight', 'content-analytics', 'content', 'product-meta-data', 'brand-terms-settings', 'labels-settings', 'sub-brands', 'sub-brands-mapping', 'sov-settings', 'content-settings'];
24
+ sovAppRoutes = ['insights', 'share-of-voice', 'sov', 'product-meta-data', 'brand-terms-settings', 'labels-settings', 'sub-brands', 'sub-brands-mapping', 'sov-settings', 'content-settings'];
25
+ sellerAnalyticsAppRoutes = ['seller/insights', 'product-meta-data', 'brand-terms-settings', 'labels-settings', 'sub-brands', 'sub-brands-mapping', 'sov-settings', 'content-settings'];
26
+ vendorAnalyticsAppRoutes = ['vendor/insights', 'product-meta-data', 'brand-terms-settings', 'labels-settings', 'sub-brands', 'sub-brands-mapping', 'sov-settings', 'content-settings'];
27
+ typeStatusConfigs = {
28
+ 'SPONSORED_KEYWORD_BIDS': true,
29
+ 'SPONSORED_PRODUCT_MANUAL_TARGETING_BIDS': true,
30
+ 'SPONSORED_PRODUCT_AUTO_TARGETING_BIDS': true,
31
+ 'SPONSORED_KEYWORD_AUTO': true,
32
+ 'SPONSORED_KEYWORD': true,
33
+ 'SP_KEYWORDS_BID_GAP': false,
34
+ 'SP_PLACEMENT_BID': false,
35
+ 'SP_TARGETING_TYPE_BREAKDOWN': false,
36
+ 'SP_MATCH_TYPE_BREAKDOWN': false,
37
+ 'SP_SB_KEYWORD_PARITY': true,
38
+ 'HEADLINE_KEYWORD_BIDS': true,
39
+ 'SB_KEYWORDS_BID_GAP': false,
40
+ 'SB_MATCH_TYPE_BREAKDOWN': false,
41
+ 'SB_SP_KEYWORD_PARITY': true,
42
+ 'NO_KEYWORD_BIDS': true,
43
+ 'CAMPAIGN_TYPE_BREAKDOWN': false,
44
+ 'AUTO_TO_MANUAL_ASIN_PARITY': true,
45
+ 'MANUAL_TO_AUTO_ASIN_PARITY': true,
46
+ 'COMPETITOR_PRODUCT': true,
47
+ 'SPONSORED_BRAND_KEYWORD': true
48
+ };
49
+ constructor(RestApiService, activatedRoute, urlContextService) {
50
+ this.RestApiService = RestApiService;
51
+ this.activatedRoute = activatedRoute;
52
+ this.urlContextService = urlContextService;
53
+ }
54
+ getTypeStatusConfigs() {
55
+ return this.typeStatusConfigs;
56
+ }
57
+ constructChildMenus(menuItems) {
58
+ if (this.appDetails.listMenus) {
59
+ for (let item of menuItems) {
60
+ if (this.appDetails.appSet) {
61
+ if (item.id.includes(this.appDetails.applicationId)) {
62
+ for (let listMenuItem of this.appDetails.listMenus) {
63
+ if (item.id == listMenuItem.id) {
64
+ item.children = listMenuItem.children;
65
+ }
66
+ }
67
+ }
68
+ }
69
+ else if (item.id == this.appDetails.applicationId) {
70
+ item.children = this.appDetails.listMenus;
71
+ }
72
+ }
73
+ }
74
+ return menuItems;
75
+ }
76
+ getMenuList(appDetails) {
77
+ this.appDetails = appDetails;
78
+ this.MenuList = [];
79
+ let appendChildMenus = this.constructChildMenus(MENULIST);
80
+ let MENULIST_SORTED = MENULIST.sort((a, b) => (a.order > b.order) ? 1 : -1);
81
+ this.appNames = this.applicationIds;
82
+ if ((this.appDetails.currentOrganization.organizationId === 10390 ||
83
+ this.appDetails.currentOrganization.organizationId === 10530) &&
84
+ this.appDetails.userInfo.email == "sreenath@intentwise.com") {
85
+ this.appNames = this.applicationIds.filter((name) => {
86
+ return (name != 'ads_amazon_content_share_of_voice' && name != 'ads_amazon_content_content_analytics');
87
+ });
88
+ }
89
+ for (let appName of MENULIST_SORTED) {
90
+ if (this.appNames.indexOf(appName.id) >= 0) {
91
+ let list = this.getApplicationMenuItem(appName);
92
+ if (list && list.children != undefined) {
93
+ if (appName.id == 'ads_amazon_dsp') {
94
+ if (list.children && list.children.length > 0) {
95
+ for (let child of list.children) {
96
+ if (!this.isStructureApiSupport && child.id == "ams_dsp_settings") {
97
+ child.children = child.children.filter(s_child => s_child.id !== 'ams_dsp_rules');
98
+ }
99
+ }
100
+ }
101
+ this.MenuList.push(list);
102
+ }
103
+ else {
104
+ this.MenuList.push(list);
105
+ }
106
+ }
107
+ }
108
+ else if (appName.type != 'expandable') {
109
+ let list = this.getApplicationMenuItem(appName);
110
+ if (list != undefined) {
111
+ this.MenuList.push(list);
112
+ }
113
+ }
114
+ }
115
+ return this.MenuList;
116
+ }
117
+ getApplicationMenuItem(currentMenuItem) {
118
+ let menuItem = {
119
+ children: []
120
+ };
121
+ if (currentMenuItem.type != 'expandable') {
122
+ let allKeys = Object.keys(currentMenuItem);
123
+ const hasConditionstoCheck = this.conditions.some(condition => allKeys.includes(condition));
124
+ if (hasConditionstoCheck) {
125
+ let isMenuAllowed = this.checkAllConditions(currentMenuItem, allKeys);
126
+ if (isMenuAllowed) {
127
+ menuItem = currentMenuItem;
128
+ }
129
+ else {
130
+ // console.log('return empty');
131
+ return;
132
+ }
133
+ }
134
+ else {
135
+ menuItem = currentMenuItem;
136
+ }
137
+ }
138
+ else {
139
+ let allKeys = Object.keys(currentMenuItem);
140
+ const hasConditionstoCheck = this.conditions.some(condition => allKeys.includes(condition));
141
+ if (!hasConditionstoCheck || (hasConditionstoCheck && this.checkAllConditions(currentMenuItem, allKeys))) {
142
+ Object.keys(currentMenuItem).forEach((key) => {
143
+ if (typeof currentMenuItem[key] != "object") {
144
+ menuItem[key] = currentMenuItem[key];
145
+ }
146
+ });
147
+ menuItem.children = [];
148
+ for (let child of currentMenuItem.children) {
149
+ let nav_menu = this.getApplicationMenuItem(child);
150
+ if (nav_menu != null) {
151
+ if (nav_menu.children != undefined) {
152
+ if (nav_menu.children.length > 0) {
153
+ menuItem.children.push(nav_menu);
154
+ }
155
+ }
156
+ else {
157
+ menuItem.children.push(nav_menu);
158
+ }
159
+ }
160
+ }
161
+ }
162
+ else {
163
+ return;
164
+ }
165
+ }
166
+ return menuItem;
167
+ }
168
+ getGlobalSettingsMenu(appDetails) {
169
+ this.appDetails = appDetails;
170
+ this.SettingsMenuList = [];
171
+ let GLOBAL_SETTING_LIST_SORTED = GLOBAL_SETTING_LIST.sort((a, b) => (a.order > b.order) ? 1 : -1);
172
+ for (let appName of GLOBAL_SETTING_LIST_SORTED) {
173
+ if (appName.type == 'expandable') {
174
+ let list = this.getApplicationMenuItem(appName);
175
+ if (list.children != undefined && list.children.length > 0) {
176
+ this.SettingsMenuList.push(list);
177
+ }
178
+ }
179
+ else if (appName.type != 'expandable') {
180
+ let list = this.getApplicationMenuItem(appName);
181
+ if (list != undefined) {
182
+ this.SettingsMenuList.push(list);
183
+ }
184
+ }
185
+ }
186
+ return this.SettingsMenuList;
187
+ }
188
+ checkAllConditions(currentMenuItem, allKeys) {
189
+ let includeMenu = false;
190
+ if ((!this.appDetails.currentAccount && currentMenuItem.id == "ads_overview" && !this.appDetails.currentOrganization['noActiveAccounts'])) {
191
+ return true;
192
+ }
193
+ else if (currentMenuItem.id === "ads_signup_overview") {
194
+ if (!this.appDetails.currentAccount && this.appDetails.currentOrganization['noActiveAccounts']) {
195
+ return true;
196
+ }
197
+ else {
198
+ return false;
199
+ }
200
+ }
201
+ for (let cond of this.conditions) {
202
+ if (currentMenuItem[cond] != undefined) {
203
+ switch (cond) {
204
+ case 'visibility_roles': {
205
+ includeMenu = this.checkForRoles(currentMenuItem[cond]);
206
+ break;
207
+ }
208
+ case 'visibility_roles_not_in': {
209
+ includeMenu = this.checkForvisibilityRolesNotIn(currentMenuItem[cond]);
210
+ break;
211
+ }
212
+ case 'disable_readonly_org': {
213
+ includeMenu = this.disableForOrgwithReadOnly(currentMenuItem[cond]);
214
+ break;
215
+ }
216
+ case 'organization_ids': {
217
+ if (this.appDetails.currentAccount && this.appDetails.currentAccount.organizationId) {
218
+ includeMenu = this.checkForSpecifiedIds(currentMenuItem[cond], currentMenuItem, this.appDetails.currentAccount.organizationId);
219
+ }
220
+ else if (this.appDetails.currentOrganization && this.appDetails.currentOrganization.organizationId) {
221
+ includeMenu = this.checkForSpecifiedIds(currentMenuItem[cond], currentMenuItem, this.appDetails.currentOrganization.organizationId);
222
+ }
223
+ else {
224
+ includeMenu = false;
225
+ }
226
+ break;
227
+ }
228
+ case 'organization_ids_not_in': {
229
+ if (this.appDetails.currentAccount && this.appDetails.currentAccount.organizationId) {
230
+ includeMenu = this.checkForSpecifiedIdsNotIn(currentMenuItem[cond], currentMenuItem, this.appDetails.currentAccount.organizationId);
231
+ }
232
+ else if (this.appDetails.currentOrganization && this.appDetails.currentOrganization.organizationId) {
233
+ includeMenu = this.checkForSpecifiedIdsNotIn(currentMenuItem[cond], currentMenuItem, this.appDetails.currentOrganization.organizationId);
234
+ }
235
+ else {
236
+ includeMenu = false;
237
+ }
238
+ break;
239
+ }
240
+ case 'org_user_ctrl': {
241
+ if (this.appDetails.currentOrganization && this.appDetails.currentOrganization.organizationId) {
242
+ includeMenu = this.checkForOrgWithUserRole(currentMenuItem[cond], currentMenuItem, this.appDetails.currentOrganization.organizationId);
243
+ }
244
+ else {
245
+ includeMenu = false;
246
+ }
247
+ break;
248
+ }
249
+ case 'account_ids': {
250
+ if (this.appDetails.currentAccount && this.appDetails.currentAccount.amsAccountId) {
251
+ includeMenu = this.checkForSpecifiedIds(currentMenuItem[cond], currentMenuItem, this.appDetails.currentAccount.amsAccountId);
252
+ }
253
+ else {
254
+ includeMenu = false;
255
+ }
256
+ break;
257
+ }
258
+ case 'account_ids_not_in': {
259
+ includeMenu = this.checkForSpecifiedAccountIdsNotIn(currentMenuItem[cond], currentMenuItem, this.appDetails.currentAccount.amsAccountId);
260
+ break;
261
+ }
262
+ case 'not_account_name': {
263
+ includeMenu = this.checkForNotAccName(currentMenuItem[cond]);
264
+ break;
265
+ }
266
+ // case 'account_type' : {
267
+ // if(this.appDetails.currentAccount && this.appDetails.currentAccount.type) {
268
+ // includeMenu = this.checkForAccType(currentMenuItem);
269
+ // } else {
270
+ // includeMenu = false;
271
+ // }
272
+ // break;
273
+ // }
274
+ case 'organization_setting': {
275
+ includeMenu = this.checkForOrgSettings(currentMenuItem[cond]);
276
+ break;
277
+ }
278
+ case 'app_org_setting': {
279
+ includeMenu = this.checkForOrgAppSettings(currentMenuItem[cond]);
280
+ break;
281
+ }
282
+ case 'organization_setting_not_in': {
283
+ includeMenu = this.checkForNotOrgSettings(currentMenuItem[cond]);
284
+ break;
285
+ }
286
+ case 'siteIds': {
287
+ includeMenu = this.checkForSiteIds(currentMenuItem[cond]);
288
+ break;
289
+ }
290
+ // case 'subscription_types' : {
291
+ // if(currentMenuItem['account_type'] == undefined){
292
+ // if(this.appDetails.currentAccount && this.appDetails.currentAccount.subscription) {
293
+ // includeMenu = this.checkForSubscriptions(currentMenuItem[cond])
294
+ // } else {
295
+ // includeMenu = false;
296
+ // }
297
+ // }else{
298
+ // if(this.appDetails.currentAccount && this.appDetails.currentAccount.type) {
299
+ // includeMenu = this.checkForAccType(currentMenuItem);
300
+ // } else {
301
+ // includeMenu = false;
302
+ // }
303
+ // }
304
+ // break;
305
+ // }
306
+ case 'campaign_types': {
307
+ if (this.appDetails.campaignInContext) {
308
+ includeMenu = this.checkForCampaignType(currentMenuItem[cond]);
309
+ }
310
+ else {
311
+ includeMenu = true;
312
+ }
313
+ break;
314
+ }
315
+ case 'incontext_campaign_targeting': {
316
+ if (this.appDetails.campaignInContext) {
317
+ includeMenu = this.checkForCampaignTargeting(currentMenuItem[cond]);
318
+ }
319
+ else {
320
+ includeMenu = true;
321
+ }
322
+ break;
323
+ }
324
+ case 'incontext_campaign_targeting_walmart': {
325
+ if (this.appDetails.campaignInContextwalmart) {
326
+ includeMenu = this.checkForCampaignTargetingWalmart(currentMenuItem[cond]);
327
+ }
328
+ else {
329
+ includeMenu = true;
330
+ }
331
+ break;
332
+ }
333
+ case 'user_emails': {
334
+ includeMenu = this.authenticateUserMailMenu(currentMenuItem[cond]);
335
+ break;
336
+ }
337
+ // default: {
338
+ // //statements;
339
+ // break;
340
+ // }
341
+ }
342
+ if (!includeMenu) {
343
+ return false;
344
+ }
345
+ }
346
+ else {
347
+ includeMenu = true;
348
+ }
349
+ }
350
+ return includeMenu;
351
+ }
352
+ checkForNotAccName(possibleValues) {
353
+ if (possibleValues.indexOf(this.appDetails.currentAccount.name) == -1) {
354
+ return true;
355
+ }
356
+ else {
357
+ return false;
358
+ }
359
+ }
360
+ checkForCampaignType(possibleValues) {
361
+ if (this.appDetails.campaignInContext && possibleValues.indexOf(this.appDetails.campaignInContext[0].dataType) >= 0) {
362
+ return true;
363
+ }
364
+ else {
365
+ return false;
366
+ }
367
+ }
368
+ checkForCampaignTargeting(possibleValues) {
369
+ if (this.appDetails.campaignInContext && possibleValues.indexOf(this.appDetails.campaignInContext[0].campaignTargeting) >= 0) {
370
+ return true;
371
+ }
372
+ else {
373
+ return false;
374
+ }
375
+ }
376
+ checkForCampaignTargetingWalmart(possibleValues) {
377
+ if (this.appDetails.campaignInContextwalmart && possibleValues.indexOf(this.appDetails.campaignInContextwalmart[0].campaignTargeting) >= 0) {
378
+ return true;
379
+ }
380
+ else {
381
+ return false;
382
+ }
383
+ }
384
+ authenticateUserMailMenu(possibleValues) {
385
+ return possibleValues && possibleValues.includes(this.appDetails.userInfo.email);
386
+ }
387
+ checkForSubscriptions(possibleValues) {
388
+ for (let settings of this.appDetails.currentAccount.subscription) {
389
+ if ((possibleValues.indexOf(settings.type) >= 0) && settings.status == "ACTIVE") {
390
+ return true;
391
+ }
392
+ }
393
+ return false;
394
+ }
395
+ checkForSiteIds(possibleValues) {
396
+ if (this.appDetails.sidebarInfo && this.appDetails.sidebarInfo.siteId && possibleValues.indexOf(+this.appDetails.sidebarInfo.siteId) >= 0) {
397
+ return true;
398
+ }
399
+ else {
400
+ return false;
401
+ }
402
+ }
403
+ checkForOrgSettings(possibleValues) {
404
+ if (this.appDetails.orgSettings) {
405
+ for (let settings of this.appDetails.orgSettings) {
406
+ if (possibleValues.indexOf(settings.setting) >= 0) {
407
+ return true;
408
+ }
409
+ }
410
+ return false;
411
+ }
412
+ else {
413
+ return false;
414
+ }
415
+ }
416
+ checkForOrgAppSettings(possibleValues) {
417
+ if (this.appDetails.orgAppSettings) {
418
+ for (let settings of this.appDetails.orgAppSettings) {
419
+ if (possibleValues.indexOf(settings.type) >= 0 && settings.status == 'ACTIVE') {
420
+ return true;
421
+ }
422
+ }
423
+ return false;
424
+ }
425
+ else {
426
+ return false;
427
+ }
428
+ }
429
+ checkForNotOrgSettings(possibleValues) {
430
+ let allow = true;
431
+ const role = ['SUPER_ADMIN', 'SUPER_ADMIN_READ_ONLY'];
432
+ const isAdminRole = role.indexOf(this.appDetails.userInfo.role) > -1 ? true : false;
433
+ if (this.appDetails.orgSettings && this.appDetails.orgSettings.length > 0) {
434
+ for (let settings of this.appDetails.orgSettings) {
435
+ if (!isAdminRole && possibleValues.indexOf(settings.setting) > -1) {
436
+ allow = false;
437
+ }
438
+ }
439
+ return allow;
440
+ }
441
+ else {
442
+ return allow;
443
+ }
444
+ }
445
+ checkForAccType(menuItem) {
446
+ if (menuItem['account_type'].indexOf(this.appDetails.currentAccount.type) >= 0) {
447
+ return true;
448
+ }
449
+ else {
450
+ if (menuItem['subscription_types']) {
451
+ return this.checkForSubscriptions(menuItem['subscription_types']);
452
+ }
453
+ else {
454
+ return false;
455
+ }
456
+ }
457
+ }
458
+ checkForSpecifiedIds(possibleValues, currentMenuItem, id) {
459
+ if (possibleValues[0].id) {
460
+ for (let item of possibleValues) {
461
+ if (item.id === id) {
462
+ Object.keys(item).forEach((key) => {
463
+ if (key != 'id') {
464
+ currentMenuItem[key] = item[key];
465
+ }
466
+ });
467
+ console.log('Link changed to ' + currentMenuItem.link + ' and route changed to ' + currentMenuItem.route);
468
+ return true;
469
+ }
470
+ }
471
+ return true;
472
+ }
473
+ else {
474
+ if (possibleValues.indexOf(id) >= 0) {
475
+ return true;
476
+ }
477
+ else {
478
+ return false;
479
+ }
480
+ }
481
+ }
482
+ checkForOrgWithUserRole(possibleValues, currentMenuItem, id) {
483
+ if (possibleValues && possibleValues.length > 0) {
484
+ for (let item of possibleValues) {
485
+ if (item.organizations) {
486
+ if (item.visibility_sa_roles.includes(this.appDetails.userInfo.role) ||
487
+ (item.organizations && item.visibilityroles && item.organizations.includes(id) && item.visibilityroles.includes(this.appDetails.userInfo.role))) {
488
+ return true;
489
+ }
490
+ else {
491
+ return false;
492
+ }
493
+ }
494
+ else if (item.organization_setting) {
495
+ if ((this.checkForOrgSettings(item.organization_setting) && item.visibilityroles.includes(this.appDetails.userInfo.role)) ||
496
+ item.visibility_sa_roles.includes(this.appDetails.userInfo.role)) {
497
+ return true;
498
+ }
499
+ else {
500
+ return false;
501
+ }
502
+ }
503
+ }
504
+ }
505
+ }
506
+ checkForSpecifiedIdsNotIn(possibleValues, currentMenuItem, id) {
507
+ return possibleValues.indexOf(id) < 0;
508
+ }
509
+ checkForSpecifiedAccountIdsNotIn(possibleValues, currentMenuItem, id) {
510
+ return possibleValues.indexOf(id) < 0;
511
+ }
512
+ checkForRoles(possibleValues) {
513
+ if (possibleValues.indexOf(this.appDetails.userInfo.role) >= 0) {
514
+ return true;
515
+ }
516
+ else {
517
+ return false;
518
+ }
519
+ }
520
+ checkForvisibilityRolesNotIn(possibleValues) {
521
+ if (possibleValues.indexOf(this.appDetails.userInfo.role) >= 0) {
522
+ return false;
523
+ }
524
+ else {
525
+ return true;
526
+ }
527
+ }
528
+ disableForOrgwithReadOnly(possibleValues) {
529
+ if (this.appDetails.userInfo.role === 'READ_ONLY' && possibleValues.indexOf(this.appDetails.currentAccount.organizationId) >= 0) {
530
+ return false;
531
+ }
532
+ else {
533
+ return true;
534
+ }
535
+ }
536
+ getHostOriginAndNavigate(route, applicationId = undefined) {
537
+ if (window.location.href.indexOf(route) == -1) {
538
+ this.activatedRoute.queryParams.subscribe(params => {
539
+ if (applicationId) {
540
+ params = { ...params, ...applicationId };
541
+ }
542
+ let urlToNavigate = this.urlContextService.prepareUrlWithQueryParams(route, params);
543
+ urlToNavigate = `${window.location.origin}/${urlToNavigate}`;
544
+ // urlToNavigate = `http://localhost:3000/${urlToNavigate}`
545
+ console.log('Navigating to - ', urlToNavigate);
546
+ window.open(urlToNavigate, '_self');
547
+ });
548
+ }
549
+ }
550
+ fetchKeyValue(key) {
551
+ if (this.appDetails && this.appDetails.currentAccount) {
552
+ return (this.appDetails.currentAccount[key]);
553
+ }
554
+ else {
555
+ return null;
556
+ }
557
+ }
558
+ setActiveRecoCount(count) {
559
+ this.appDetails.currentAccount['activeRecommendation'] = count;
560
+ }
561
+ isHavingAnyActiveSubs(id, subs, type) {
562
+ if (id === 'ads_amazon_attribution' && this.checkSubscriptionActive(subs, type, 'AMS_ATTRIBUTION')) {
563
+ return true;
564
+ }
565
+ else if (id === 'ads_amazon_dsp' && this.checkSubscriptionActive(subs, type, 'DSP')) {
566
+ return true;
567
+ }
568
+ else if ((id === 'ads_amazon_content') && this.checkSubscriptionActive(subs, type, 'CONTENT')) {
569
+ return true;
570
+ }
571
+ else if ((id === 'ads_instacart') && this.checkSubscriptionActive(subs, type, 'INSTACART')) {
572
+ return true;
573
+ }
574
+ else if ((id === 'ads_criteo') && this.checkSubscriptionActive(subs, type, 'CRITEO')) {
575
+ return true;
576
+ }
577
+ else if ((id === 'ads_walmart') && this.checkSubscriptionActive(subs, type, 'WALMART')) {
578
+ return true;
579
+ }
580
+ else if (id === 'ads_data_platform' || id === 'amc-platform-web' || id === 'ads_amazon_seller') {
581
+ return true;
582
+ }
583
+ else if (id === 'ads_amazon_advertising' || id === 'ads_vendor_sales' || id === 'ads_seller_sales') {
584
+ for (let settings of subs) {
585
+ if (settings.type != type && settings.status == "ACTIVE") {
586
+ return true;
587
+ }
588
+ }
589
+ return false;
590
+ }
591
+ return false;
592
+ }
593
+ checkSubscriptionActive(subs, accType, subType) {
594
+ if (subType === accType) {
595
+ return true;
596
+ }
597
+ const currentTypeSub = subs.filter(subscription => subscription.type === subType);
598
+ if (currentTypeSub.length === 0) {
599
+ return false;
600
+ }
601
+ if (currentTypeSub[0].status === 'ACTIVE' || currentTypeSub[0].type === accType) {
602
+ return true;
603
+ }
604
+ else {
605
+ return false;
606
+ }
607
+ }
608
+ getApplicationID() {
609
+ let urlArray = this.urlContextService.router.url.split('/');
610
+ let currentRoute = urlArray[urlArray.length - 1];
611
+ if (this.contentAppRoutes.indexOf(currentRoute) > -1) {
612
+ return "ads_amazon_content_content_analytics";
613
+ }
614
+ else if (this.sovAppRoutes.indexOf(currentRoute) > -1) {
615
+ return "ads_amazon_content_share_of_voice";
616
+ }
617
+ }
618
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ApplicationSidebarService, deps: [{ token: i1.RestApiService }, { token: i2.ActivatedRoute }, { token: i3.UrlContextService }], target: i0.ɵɵFactoryTarget.Injectable });
619
+ /** @nocollapse */ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ApplicationSidebarService, providedIn: 'root' });
620
+ }
621
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ApplicationSidebarService, decorators: [{
622
+ type: Injectable,
623
+ args: [{
624
+ providedIn: 'root'
625
+ }]
626
+ }], ctorParameters: function () { return [{ type: i1.RestApiService }, { type: i2.ActivatedRoute }, { type: i3.UrlContextService }]; } });
627
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tc2lkZWJhci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXBwbGljYXRpb24tc2lkZWJhci9zcmMvbGliL3NlcnZpY2VzL2FwcGxpY2F0aW9uLXNpZGViYXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7O0FBTzFELE1BQU0sT0FBTyx5QkFBeUI7SUE0QzVCO0lBQ0E7SUFDQTtJQTVDVCxVQUFVLEdBQU0sQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLEVBQUcseUJBQXlCLEVBQUcsYUFBYSxFQUFHLGtCQUFrQixFQUFFLHlCQUF5QixFQUFDLGNBQWMsRUFBRyxvQkFBb0IsRUFBQyxzQkFBc0IsRUFBRyw2QkFBNkIsRUFBQyxnQkFBZ0IsRUFBRSw4QkFBOEIsRUFBRSxzQ0FBc0MsRUFBRyxvQkFBb0IsRUFBRSxTQUFTLEVBQUMsa0JBQWtCLEVBQUMsa0JBQWtCLEVBQUMsc0JBQXNCLEVBQUMsYUFBYSxFQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdmMsUUFBUSxHQUFNLEVBQUUsQ0FBQztJQUVqQixjQUFjLEdBQUssQ0FBQyx3QkFBd0IsRUFBQyxrQkFBa0IsRUFBQyxrQkFBa0IsRUFBQyxtQ0FBbUMsRUFBQyxzQ0FBc0MsRUFBQyxnQkFBZ0IsRUFBQyx3QkFBd0IsRUFBRSxlQUFlLEVBQUMsWUFBWSxFQUFDLGFBQWEsRUFBQyxtQkFBbUIsRUFBQyxrQkFBa0IsRUFBQyxvQ0FBb0MsRUFBQyxvQ0FBb0MsQ0FBQyxDQUFDO0lBQ3RXLG1CQUFtQixHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFN0IsVUFBVSxDQUFNO0lBQ2hCLHFCQUFxQixDQUFNO0lBQzNCLGdCQUFnQixDQUFRO0lBQ3hCLFFBQVEsQ0FBVztJQUVuQixnQkFBZ0IsR0FBQyxDQUFDLGlCQUFpQixFQUFDLG1CQUFtQixFQUFDLFNBQVMsRUFBQyxtQkFBbUIsRUFBQyxzQkFBc0IsRUFBQyxpQkFBaUIsRUFBQyxZQUFZLEVBQUMsb0JBQW9CLEVBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUE7SUFDcE0sWUFBWSxHQUFDLENBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLEtBQUssRUFBQyxtQkFBbUIsRUFBQyxzQkFBc0IsRUFBQyxpQkFBaUIsRUFBQyxZQUFZLEVBQUMsb0JBQW9CLEVBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUE7SUFDbEwsd0JBQXdCLEdBQUMsQ0FBQyxpQkFBaUIsRUFBQyxtQkFBbUIsRUFBQyxzQkFBc0IsRUFBQyxpQkFBaUIsRUFBQyxZQUFZLEVBQUMsb0JBQW9CLEVBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUE7SUFDOUssd0JBQXdCLEdBQUMsQ0FBQyxpQkFBaUIsRUFBQyxtQkFBbUIsRUFBQyxzQkFBc0IsRUFBQyxpQkFBaUIsRUFBQyxZQUFZLEVBQUMsb0JBQW9CLEVBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUE7SUFFOUssaUJBQWlCLEdBQUc7UUFDYix3QkFBd0IsRUFBRyxJQUFJO1FBQy9CLHlDQUF5QyxFQUFHLElBQUk7UUFDaEQsdUNBQXVDLEVBQUcsSUFBSTtRQUM5Qyx3QkFBd0IsRUFBRyxJQUFJO1FBQy9CLG1CQUFtQixFQUFHLElBQUk7UUFDMUIscUJBQXFCLEVBQUcsS0FBSztRQUM3QixrQkFBa0IsRUFBRyxLQUFLO1FBQzFCLDZCQUE2QixFQUFHLEtBQUs7UUFDckMseUJBQXlCLEVBQUcsS0FBSztRQUNqQyxzQkFBc0IsRUFBRyxJQUFJO1FBQzdCLHVCQUF1QixFQUFHLElBQUk7UUFDOUIscUJBQXFCLEVBQUcsS0FBSztRQUM3Qix5QkFBeUIsRUFBRyxLQUFLO1FBQ2pDLHNCQUFzQixFQUFHLElBQUk7UUFDN0IsaUJBQWlCLEVBQUcsSUFBSTtRQUN4Qix5QkFBeUIsRUFBRyxLQUFLO1FBQ2pDLDRCQUE0QixFQUFHLElBQUk7UUFDbkMsNEJBQTRCLEVBQUcsSUFBSTtRQUNuQyxvQkFBb0IsRUFBRyxJQUFJO1FBQzNCLHlCQUF5QixFQUFFLElBQUk7S0FDbEMsQ0FBQTtJQUlKLFlBQ1MsY0FBOEIsRUFDOUIsY0FBNkIsRUFDN0IsaUJBQW9DO1FBRnBDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO0lBQUcsQ0FBQztJQUVqRCxvQkFBb0I7UUFDbkIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDL0IsQ0FBQztJQUNELG1CQUFtQixDQUFDLFNBQVM7UUFDNUIsSUFBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBQztZQUM1QixLQUFLLElBQUksSUFBSSxJQUFJLFNBQVMsRUFBRTtnQkFDM0IsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtvQkFDM0IsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUFFO3dCQUNwRCxLQUFLLElBQUksWUFBWSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFOzRCQUNuRCxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksWUFBWSxDQUFDLEVBQUUsRUFBRTtnQ0FDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFBOzZCQUNyQzt5QkFDRDtxQkFDRDtpQkFDRDtxQkFBTSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUU7b0JBQ3BELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUE7aUJBQ3pDO2FBQ0Q7U0FDRDtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxXQUFXLENBQUMsVUFBZ0I7UUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBSyxVQUFVLENBQUM7UUFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBTSxFQUFFLENBQUM7UUFDdEIsSUFBSSxnQkFBZ0IsR0FBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0QsSUFBSSxlQUFlLEdBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RSxJQUFJLENBQUMsUUFBUSxHQUFNLElBQUksQ0FBQyxjQUFjLENBQUM7UUFFdkMsSUFBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsY0FBYyxLQUFLLEtBQUs7WUFDL0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEtBQUssS0FBSyxDQUFDO1lBQzdELElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSx5QkFBeUIsRUFBQztZQUU1RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFDLEVBQUU7Z0JBQ2xELE9BQU8sQ0FBQyxJQUFJLElBQUksbUNBQW1DLElBQUksSUFBSSxJQUFJLHNDQUFzQyxDQUFDLENBQUE7WUFDdkcsQ0FBQyxDQUFDLENBQUM7U0FFSDtRQUVELEtBQUssSUFBSSxPQUFPLElBQUksZUFBZSxFQUFFO1lBQ3BDLElBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBQztnQkFDekMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNoRCxJQUFHLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLFNBQVMsRUFBQztvQkFDckMsSUFBRyxPQUFPLENBQUMsRUFBRSxJQUFHLGdCQUFnQixFQUFDO3dCQUNoQyxJQUFHLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDOzRCQUM1QyxLQUFJLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUM7Z0NBQzlCLElBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLElBQUksS0FBSyxDQUFDLEVBQUUsSUFBRyxrQkFBa0IsRUFBQztvQ0FDL0QsS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssZUFBZSxDQUFDLENBQUM7aUNBQ2xGOzZCQUNEO3lCQUNEO3dCQUNELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUN6Qjt5QkFBSTt3QkFDSixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDekI7aUJBQ0Q7YUFFRDtpQkFBSyxJQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksWUFBWSxFQUFDO2dCQUNyQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2hELElBQUcsSUFBSSxJQUFJLFNBQVMsRUFBQztvQkFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7aUJBQ3hCO2FBQ0Q7U0FDRDtRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN0QixDQUFDO0lBRUQsc0JBQXNCLENBQUMsZUFBbUI7UUFDekMsSUFBSSxRQUFRLEdBQUc7WUFDZCxRQUFRLEVBQUcsRUFBRTtTQUNiLENBQUM7UUFFRixJQUFHLGVBQWUsQ0FBQyxJQUFJLElBQUksWUFBWSxFQUFDO1lBQ3ZDLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDM0MsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtZQUMzRixJQUFHLG9CQUFvQixFQUFDO2dCQUN2QixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxFQUFHLE9BQU8sQ0FBQyxDQUFDO2dCQUN2RSxJQUFHLGFBQWEsRUFBQztvQkFDaEIsUUFBUSxHQUFHLGVBQWUsQ0FBQztpQkFDM0I7cUJBQ0c7b0JBQ0gsK0JBQStCO29CQUMvQixPQUFPO2lCQUNQO2FBQ0Q7aUJBQ0c7Z0JBQ0gsUUFBUSxHQUFHLGVBQWUsQ0FBQzthQUMzQjtTQUNEO2FBQ0c7WUFDSCxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7WUFDM0YsSUFBRyxDQUFDLG9CQUFvQixJQUFJLENBQUMsb0JBQW9CLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsRUFBRyxPQUFPLENBQUMsQ0FBQyxFQUFFO2dCQUN6RyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBQyxFQUFFO29CQUMzQyxJQUFJLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFFBQVEsRUFBRzt3QkFDN0MsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDckM7Z0JBQ0YsQ0FBQyxDQUFDLENBQUE7Z0JBQ0YsUUFBUSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7Z0JBQ3ZCLEtBQUksSUFBSSxLQUFLLElBQUksZUFBZSxDQUFDLFFBQVEsRUFBQztvQkFDekMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNsRCxJQUFHLFFBQVEsSUFBSSxJQUFJLEVBQUM7d0JBQ25CLElBQUcsUUFBUSxDQUFDLFFBQVEsSUFBSSxTQUFTLEVBQUM7NEJBQ2pDLElBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDO2dDQUMvQixRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzs2QkFDakM7eUJBQ0Q7NkJBQ0c7NEJBQ0gsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7eUJBQ2pDO3FCQUNEO2lCQUNEO2FBQ0Q7aUJBQUk7Z0JBQ0osT0FBTzthQUNQO1NBQ0Q7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNqQixDQUFDO0lBRUQscUJBQXFCLENBQUMsVUFBZ0I7UUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMzQixJQUFJLDBCQUEwQixHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRyxLQUFLLElBQUksT0FBTyxJQUFJLDBCQUEwQixFQUFFO1lBQy9DLElBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxZQUFZLEVBQUM7Z0JBQy9CLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDaEQsSUFBRyxJQUFJLENBQUMsUUFBUSxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUM7b0JBQ3pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ2pDO2FBQ0Q7aUJBQUssSUFBRyxPQUFPLENBQUMsSUFBSSxJQUFJLFlBQVksRUFBQztnQkFDckMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNoRCxJQUFHLElBQUksSUFBSSxTQUFTLEVBQUM7b0JBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7aUJBQ2hDO2FBQ0Q7U0FDRDtRQUNELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQzlCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxlQUFvQixFQUFFLE9BQWlCO1FBQ3pELElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsSUFBSSxlQUFlLENBQUMsRUFBRSxJQUFJLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxFQUFDO1lBQ3hJLE9BQU8sSUFBSSxDQUFDO1NBQ1o7YUFDSSxJQUFHLGVBQWUsQ0FBQyxFQUFFLEtBQUsscUJBQXFCLEVBQUU7WUFDckQsSUFBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsRUFBQztnQkFDN0YsT0FBTyxJQUFJLENBQUM7YUFDWjtpQkFDRztnQkFDSCxPQUFPLEtBQUssQ0FBQzthQUNiO1NBQ0Q7UUFDRCxLQUFJLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUM7WUFDL0IsSUFBRyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxFQUFDO2dCQUNyQyxRQUFPLElBQUksRUFBQztvQkFDWCxLQUFLLGtCQUFrQixDQUFDLENBQUM7d0JBQ3hCLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUN6RCxNQUFNO3FCQUNMO29CQUNELEtBQUsseUJBQXlCLENBQUMsQ0FBQzt3QkFDL0IsV0FBVyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDeEUsTUFBTTtxQkFDTDtvQkFDRCxLQUFLLHNCQUFzQixDQUFDLENBQUE7d0JBQzNCLFdBQVcsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQ3JFLE1BQU07cUJBQ0w7b0JBQ0QsS0FBSyxrQkFBbUIsQ0FBQyxDQUFDO3dCQUN6QixJQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRTs0QkFDbkYsV0FBVyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUMsZUFBZSxFQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO3lCQUM3SDs2QkFBTSxJQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUU7NEJBQ3BHLFdBQVcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFDLGVBQWUsRUFBQyxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxDQUFDO3lCQUNsSTs2QkFBTTs0QkFDTixXQUFXLEdBQUcsS0FBSyxDQUFDO3lCQUNwQjt3QkFDRixNQUFNO3FCQUNMO29CQUNELEtBQUsseUJBQTBCLENBQUMsQ0FBQzt3QkFDaEMsSUFBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUU7NEJBQ25GLFdBQVcsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFDLGVBQWUsRUFBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQzt5QkFDbEk7NkJBQU0sSUFBRyxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFOzRCQUNwRyxXQUFXLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBQyxlQUFlLEVBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsQ0FBQzt5QkFDdkk7NkJBQU07NEJBQ04sV0FBVyxHQUFHLEtBQUssQ0FBQzt5QkFDcEI7d0JBQ0QsTUFBTTtxQkFDTjtvQkFDRCxLQUFLLGVBQWUsQ0FBQyxDQUFBO3dCQUNwQixJQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUU7NEJBQzdGLFdBQVcsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFDLGVBQWUsRUFBQyxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxDQUFDO3lCQUNySTs2QkFBTTs0QkFDTixXQUFXLEdBQUcsS0FBSyxDQUFDO3lCQUNwQjt3QkFDRCxNQUFNO3FCQUNOO29CQUNELEtBQUssYUFBYyxDQUFDLENBQUM7d0JBQ3BCLElBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFOzRCQUNqRixXQUFXLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBQyxlQUFlLEVBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7eUJBQzNIOzZCQUFNOzRCQUNOLFdBQVcsR0FBRyxLQUFLLENBQUM7eUJBQ3BCO3dCQUNGLE1BQU07cUJBQ0w7b0JBQ0QsS0FBSyxvQkFBcUIsQ0FBQyxDQUFDO3dCQUMzQixXQUFXLEdBQUcsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBQyxlQUFlLEVBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7d0JBQ3ZJLE1BQU07cUJBQ047b0JBQ0QsS0FBSyxrQkFBbUIsQ0FBQyxDQUFDO3dCQUN6QixXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUM5RCxNQUFNO3FCQUNMO29CQUNELDJCQUEyQjtvQkFDM0IsK0VBQStFO29CQUMvRSx5REFBeUQ7b0JBQ3pELFlBQVk7b0JBQ1oseUJBQXlCO29CQUN6QixLQUFLO29CQUNMLFVBQVU7b0JBQ1YsSUFBSTtvQkFDSixLQUFLLHNCQUF1QixDQUFDLENBQUM7d0JBQzdCLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQy9ELE1BQU07cUJBQ0w7b0JBQUEsS0FBSyxpQkFBa0IsQ0FBQyxDQUFDO3dCQUN6QixXQUFXLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUNsRSxNQUFNO3FCQUNMO29CQUNELEtBQUssNkJBQThCLENBQUMsQ0FBQzt3QkFDcEMsV0FBVyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDbEUsTUFBTTtxQkFDTDtvQkFDRCxLQUFLLFNBQVUsQ0FBQyxDQUFDO3dCQUNoQixXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDM0QsTUFBTTtxQkFDTDtvQkFDRCxpQ0FBaUM7b0JBQ2pDLHFEQUFxRDtvQkFDckQsd0ZBQXdGO29CQUN4RixxRUFBcUU7b0JBQ3JFLGFBQWE7b0JBQ2IsMEJBQTBCO29CQUMxQixNQUFNO29CQUNOLFVBQVU7b0JBQ1YsZ0ZBQWdGO29CQUNoRiwwREFBMEQ7b0JBQzFELGFBQWE7b0JBQ2IsMEJBQTBCO29CQUMxQixNQUFNO29CQUNOLEtBQUs7b0JBQ0wsVUFBVTtvQkFDVixLQUFLO29CQUNMLEtBQUssZ0JBQWlCLENBQUMsQ0FBQzt3QkFDdkIsSUFBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFDOzRCQUNwQyxXQUFXLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO3lCQUM5RDs2QkFDRzs0QkFDSCxXQUFXLEdBQUcsSUFBSSxDQUFDO3lCQUNuQjt3QkFDRixNQUFNO3FCQUNMO29CQUNELEtBQUssOEJBQStCLENBQUMsQ0FBQzt3QkFDckMsSUFBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFDOzRCQUNwQyxXQUFXLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO3lCQUNuRTs2QkFDRzs0QkFDSCxXQUFXLEdBQUcsSUFBSSxDQUFDO3lCQUNuQjt3QkFDRixNQUFNO3FCQUNMO29CQUNELEtBQUssc0NBQXVDLENBQUMsQ0FBQzt3QkFDN0MsSUFBRyxJQUFJLENBQUMsVUFBVSxDQUFDLHdCQUF3QixFQUFDOzRCQUMzQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO3lCQUMxRTs2QkFDRzs0QkFDSCxXQUFXLEdBQUcsSUFBSSxDQUFDO3lCQUNuQjt3QkFDRixNQUFNO3FCQUNMO29CQUNELEtBQUssYUFBYyxDQUFDLENBQUM7d0JBQ3BCLFdBQVcsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7d0JBQ25FLE1BQU07cUJBQ0w7b0JBQ0QsY0FBYztvQkFDZCxpQkFBaUI7b0JBQ2pCLFVBQVU7b0JBQ1YsS0FBSztpQkFDTDtnQkFDRCxJQUFHLENBQUMsV0FBVyxFQUFDO29CQUNmLE9BQU8sS0FBSyxDQUFDO2lCQUNiO2FBQ0Q7aUJBQUk7Z0JBQ0osV0FBVyxHQUFHLElBQUksQ0FBQzthQUNuQjtTQUNEO1FBRUQsT0FBTyxXQUFXLENBQUM7SUFDcEIsQ0FBQztJQUVELGtCQUFrQixDQUFDLGNBQW1CO1FBQ3JDLElBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQztZQUNwRSxPQUFPLElBQUksQ0FBQztTQUNaO2FBQ0c7WUFDSCxPQUFPLEtBQUssQ0FBQztTQUNiO0lBQ0YsQ0FBQztJQUVELG9CQUFvQixDQUFDLGNBQW1CO1FBQ3ZDLElBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFDO1lBQ2xILE9BQU8sSUFBSSxDQUFDO1NBQ1o7YUFDRztZQUNILE9BQU8sS0FBSyxDQUFDO1NBQ2I7SUFDRixDQUFDO0lBRUQseUJBQXlCLENBQUMsY0FBbUI7UUFDNUMsSUFBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBQztZQUMzSCxPQUFPLElBQUksQ0FBQztTQUNaO2FBQ0c7WUFDSCxPQUFPLEtBQUssQ0FBQztTQUNiO0lBQ0YsQ0FBQztJQUVELGdDQUFnQyxDQUFDLGNBQW1CO1FBQ25ELElBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUM7WUFDekksT0FBTyxJQUFJLENBQUM7U0FDWjthQUNHO1lBQ0gsT0FBTyxLQUFLLENBQUM7U0FDYjtJQUNGLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxjQUFtQjtRQUMzQyxPQUFPLGNBQWMsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxjQUFtQjtRQUN4QyxLQUFJLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBQztZQUMvRCxJQUFHLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxRQUFRLEVBQUM7Z0JBQzlFLE9BQU8sSUFBSSxDQUFDO2FBQ1o7U0FDRDtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQUVELGVBQWUsQ0FBQyxjQUFtQjtRQUNsQyxJQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDO1lBQ3hJLE9BQU8sSUFBSSxDQUFDO1NBQ1o7YUFDRztZQUNILE9BQU8sS0FBSyxDQUFDO1NBQ2I7SUFDRixDQUFDO0lBRUQsbUJBQW1CLENBQUMsY0FBbUI7UUFDdEMsSUFBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBQztZQUM5QixLQUFJLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFDO2dCQUMvQyxJQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBQztvQkFDaEQsT0FBTyxJQUFJLENBQUM7aUJBQ1o7YUFDRDtZQUNELE9BQU8sS0FBSyxDQUFDO1NBQ2I7YUFBSTtZQUNKLE9BQU8sS0FBSyxDQUFDO1NBQ2I7SUFDRixDQUFDO0lBRUQsc0JBQXNCLENBQUMsY0FBbUI7UUFDekMsSUFBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBQztZQUNqQyxLQUFJLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFDO2dCQUNsRCxJQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLFFBQVEsRUFBQztvQkFDNUUsT0FBTyxJQUFJLENBQUM7aUJBQ1o7YUFDRDtZQUNELE9BQU8sS0FBSyxDQUFDO1NBQ2I7YUFBSTtZQUNKLE9BQU8sS0FBSyxDQUFDO1NBQ2I7SUFDRixDQUFDO0lBRUQsc0JBQXNCLENBQUMsY0FBbUI7UUFDekMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxHQUFHLENBQUMsYUFBYSxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDdEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDcEYsSUFBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDO1lBQ3hFLEtBQUksSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUM7Z0JBQy9DLElBQUcsQ0FBQyxXQUFXLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQ2pFLEtBQUssR0FBRyxLQUFLLENBQUM7aUJBQ2Q7YUFDRDtZQUNELE9BQU8sS0FBSyxDQUFDO1NBQ2I7YUFBSTtZQUNKLE9BQU8sS0FBSyxDQUFDO1NBQ2I7SUFDRixDQUFDO0lBR0QsZUFBZSxDQUFDLFFBQWE7UUFDNUIsSUFBRyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQztZQUM3RSxPQUFPLElBQUksQ0FBQztTQUNaO2FBQ0c7WUFDSCxJQUFHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFDO2dCQUNqQyxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFBO2FBQ2pFO2lCQUNHO2dCQUNILE9BQU8sS0FBSyxDQUFDO2FBQ2I7U0FDRDtJQUNGLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxjQUFtQixFQUFHLGVBQW1CLEVBQUcsRUFBUztRQUN6RSxJQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUM7WUFDdkIsS0FBSyxJQUFJLElBQUksSUFBSSxjQUFjLEVBQUU7Z0JBQ2hDLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFDLEVBQUU7d0JBQ2hDLElBQUksR0FBRyxJQUFJLElBQUksRUFBRTs0QkFDaEIsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzt5QkFDakM7b0JBQ0YsQ0FBQyxDQUFDLENBQUE7b0JBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsR0FBQyxlQUFlLENBQUMsSUFBSSxHQUFDLHdCQUF3QixHQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDcEcsT0FBTyxJQUFJLENBQUM7aUJBQ1o7YUFDRDtZQUNELE9BQU8sSUFBSSxDQUFDO1NBQ1o7YUFDSTtZQUNKLElBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUM7Z0JBQ2xDLE9BQU8sSUFBSSxDQUFDO2FBQ1o7aUJBQ0c7Z0JBQ0gsT0FBTyxLQUFLLENBQUM7YUFDYjtTQUNEO0lBQ0YsQ0FBQztJQUNELHVCQUF1QixDQUFDLGNBQW1CLEVBQUcsZUFBbUIsRUFBRyxFQUFTO1FBQzVFLElBQUcsY0FBYyxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDO1lBQzlDLEtBQUssSUFBSSxJQUFJLElBQUksY0FBYyxFQUFFO2dCQUNoQyxJQUFHLElBQUksQ0FBQyxhQUFhLEVBQUM7b0JBQ3JCLElBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7d0JBQ2pFLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUM7d0JBQ2pKLE9BQU8sSUFBSSxDQUFDO3FCQUNaO3lCQUFJO3dCQUNKLE9BQU8sS0FBSyxDQUFDO3FCQUNiO2lCQUNEO3FCQUFLLElBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFDO29CQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUN4SCxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO3dCQUNsRSxPQUFPLElBQUksQ0FBQztxQkFDWjt5QkFBSTt3QkFDSixPQUFPLEtBQUssQ0FBQztxQkFDYjtpQkFDRDthQUVEO1NBQ0Q7SUFDRixDQUFDO0lBQ0QseUJBQXlCLENBQUMsY0FBbUIsRUFBRyxlQUFtQixFQUFHLEVBQVM7UUFDOUUsT0FBTyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsZ0NBQWdDLENBQUMsY0FBbUIsRUFBRyxlQUFtQixFQUFHLEVBQVM7UUFDckYsT0FBTyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsYUFBYSxDQUFDLGNBQW1CO1FBQ2hDLElBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUM7WUFDN0QsT0FBTyxJQUFJLENBQUM7U0FDWjthQUNHO1lBQ0gsT0FBTyxLQUFLLENBQUM7U0FDYjtJQUNGLENBQUM7SUFFRCw0QkFBNEIsQ0FBQyxjQUFtQjtRQUMvQyxJQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFDO1lBQzdELE9BQU8sS0FBSyxDQUFDO1NBQ2I7YUFBSTtZQUNKLE9BQU8sSUFBSSxDQUFDO1NBQ1o7SUFDRixDQUFDO0lBRU0seUJBQXlCLENBQUMsY0FBbUI7UUFDbkQsSUFBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFDO1lBQzlILE9BQU8sS0FBSyxDQUFDO1NBQ2I7YUFDRztZQUNILE9BQU8sSUFBSSxDQUFDO1NBQ1o7SUFDRixDQUFDO0lBRU0sd0JBQXdCLENBQUMsS0FBSyxFQUFHLGFBQWEsR0FBQyxTQUFTO1FBQzlELElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQzlDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDbEQsSUFBSSxhQUFhLEVBQUU7b0JBQ2xCLE1BQU0sR0FBRyxFQUFDLEdBQUcsTUFBTSxFQUFFLEdBQUcsYUFBYSxFQUFDLENBQUM7aUJBQ3ZDO2dCQUNELElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3BGLGFBQWEsR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLGFBQWEsRUFBRSxDQUFBO2dCQUM1RCwyREFBMkQ7Z0JBQzNELE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFDO1NBQ0g7SUFDQyxDQUFDO0lBRUcsYUFBYSxDQUFDLEdBQVc7UUFDL0IsSUFBRyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFO1lBQ3JELE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzdDO2FBQU07WUFDTixPQUFPLElBQUksQ0FBQztTQUNaO0lBRUYsQ0FBQztJQUVNLGtCQUFrQixDQUFDLEtBQVk7UUFDckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDaEUsQ0FBQztJQUVNLHFCQUFxQixDQUFDLEVBQUUsRUFBQyxJQUFJLEVBQUMsSUFBSTtRQUN0QyxJQUFHLEVBQUUsS0FBSyx3QkFBd0IsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxFQUFFO1lBQ2pHLE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFBTSxJQUFHLEVBQUUsS0FBSyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRTtZQUNwRixPQUFPLElBQUksQ0FBQztTQUNiO2FBQU0sSUFBRyxDQUFDLEVBQUUsS0FBSyxvQkFBb0IsQ0FBQyxJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1lBQzlGLE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFBTSxJQUFHLENBQUMsRUFBRSxLQUFLLGVBQWUsQ0FBQyxJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUFFO1lBQzNGLE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFBSyxJQUFHLENBQUMsRUFBRSxLQUFLLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQ3hGLE9BQU8sSUFBSSxDQUFDO1NBQ1o7YUFBSyxJQUFHLENBQUMsRUFBRSxLQUFLLGFBQWEsQ0FBQyxJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1lBQ3ZGLE9BQU8sSUFBSSxDQUFDO1NBQ1o7YUFBSyxJQUFHLEVBQUUsS0FBSyxtQkFBbUIsSUFBRyxFQUFFLEtBQUssa0JBQWtCLElBQUksRUFBRSxLQUFLLG1CQUFtQixFQUFFO1lBQzlGLE9BQU8sSUFBSSxDQUFDO1NBQ1o7YUFBSyxJQUFHLEVBQUUsS0FBSyx3QkFBd0IsSUFBSSxFQUFFLEtBQUssa0JBQWtCLElBQUksRUFBRSxLQUFLLGtCQUFrQixFQUFFO1lBQy9GLEtBQUksSUFBSSxRQUFRLElBQUksSUFBSSxFQUFDO2dCQUN2QixJQUFHLFFBQVEsQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxFQUFDO29CQUN0RCxPQUFPLElBQUksQ0FBQztpQkFDYjthQUNGO1lBQ0QsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE9BQU8sS0FBSyxDQUFBO0lBQ2IsQ0FBQztJQUVJLHVCQUF1QixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTztRQUNwRCxJQUFHLE9BQU8sS0FBSyxPQUFPLEVBQUM7WUFDdkIsT0FBTyxJQUFJLENBQUM7U0FDWDtRQUNELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1FBQ2xGLElBQUcsY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDaEMsT0FBTyxLQUFLLENBQUM7U0FDWjtRQUNELElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxRQUFRLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7WUFDaEYsT0FBTyxJQUFJLENBQUM7U0FDWjthQUFNO1lBQ04sT0FBTyxLQUFLLENBQUM7U0FDYjtJQUNGLENBQUM7SUFFTSxnQkFBZ0I7UUFDdEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVELElBQUksWUFBWSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWpELElBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBRztZQUNuRCxPQUFPLHNDQUFzQyxDQUFDO1NBQzlDO2FBQU0sSUFBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBRTtZQUNyRCxPQUFPLG1DQUFtQyxDQUFDO1NBQzNDO0lBQ0YsQ0FBQzsySEExbUJXLHlCQUF5QjsrSEFBekIseUJBQXlCLGNBRnhCLE1BQU07OzRGQUVQLHlCQUF5QjtrQkFIckMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNRU5VTElTVCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBHTE9CQUxfU0VUVElOR19MSVNUIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFJlc3RBcGlTZXJ2aWNlIH0gZnJvbSAnLi9yZXN0LWFwaS5zZXJ2aWNlcyc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFVybENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi91cmwtY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IEVOX0xBQkVMUyB9IGZyb20gJy4uL3RyYW5zbGF0aW9ucy90cmFuc2xhdGlvbnMtZW4nO1xuaW1wb3J0IHsgSkFfTEFCRUxTIH0gZnJvbSAnLi4vdHJhbnNsYXRpb25zL3RyYW5zbGF0aW9ucy1qYSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uU2lkZWJhclNlcnZpY2Uge1xuXG5cdGNvbmRpdGlvbnMgXHRcdFx0PSBbJ29yZ191c2VyX2N0cmwnLCAndmlzaWJpbGl0eV9yb2xlcycgLCAndmlzaWJpbGl0eV9yb2xlc19ub3RfaW4nICwgJ2FjY291bnRfaWRzJyAsICdvcmdhbml6YXRpb25faWRzJywgJ29yZ2FuaXphdGlvbl9pZHNfbm90X2luJywnYWNjb3VudF90eXBlJyAsICdhY2NvdW50X2lkc19ub3RfaW4nLCdvcmdhbml6YXRpb25fc2V0dGluZycgLCAnb3JnYW5pemF0aW9uX3NldHRpbmdfbm90X2luJywnY2FtcGFpZ25fdHlwZXMnLCAnaW5jb250ZXh0X2NhbXBhaWduX3RhcmdldGluZycsICdpbmNvbnRleHRfY2FtcGFpZ25fdGFyZ2V0aW5nX3dhbG1hcnQnICwgJ3N1YnNjcmlwdGlvbl90eXBlcycgLCdzaXRlSWRzJywnbm90X2FjY291bnRfdHlwZScsJ25vdF9hY2NvdW50X25hbWUnLCdkaXNhYmxlX3JlYWRvbmx5X29yZycsJ3VzZXJfZW1haWxzJywnYXBwX29yZ19zZXR0aW5nJ107XG5cdE1lbnVMaXN0IFx0XHRcdD0gW107XG5cblx0YXBwbGljYXRpb25JZHMgXHRcdD0gWydhZHNfYW1hem9uX2FkdmVydGlzaW5nJywnYWRzX3NlbGxlcl9zYWxlcycsJ2Fkc192ZW5kb3Jfc2FsZXMnLCdhZHNfYW1hem9uX2NvbnRlbnRfc2hhcmVfb2Zfdm9pY2UnLCdhZHNfYW1hem9uX2NvbnRlbnRfY29udGVudF9hbmFseXRpY3MnLCdhZHNfYW1hem9uX2RzcCcsJ2Fkc19hbWF6b25fYXR0cmlidXRpb24nLCAnYWRzX2luc3RhY2FydCcsJ2Fkc19jcml0ZW8nLCdhZHNfd2FsbWFydCcsJ2Fkc19kYXRhX3BsYXRmb3JtJywnYW1jLXBsYXRmb3JtLXdlYicsJ2Fkc19hbWF6b25fc2VsbGVyX3NlbGxlcl9hbmFseXRpY3MnLCdhZHNfYW1hem9uX3NlbGxlcl92ZW5kb3JfYW5hbHl0aWNzJ107XG5cdGVuYWJsZUFsbE1lbnVzQnlPcmcgPSBbMzA3ODBdXG5cdFxuXHRhcHBEZXRhaWxzOlx0YW55O1xuXHRpc1N0cnVjdHVyZUFwaVN1cHBvcnQ6XHRhbnk7XG5cdFNldHRpbmdzTWVudUxpc3Q6IGFueVtdO1xuXHRhcHBOYW1lczogc3RyaW5nW107XG5cblx0Y29udGVudEFwcFJvdXRlcz1bJ2NvbnRlbnQtaW5zaWdodCcsJ2NvbnRlbnQtYW5hbHl0aWNzJywnY29udGVudCcsJ3Byb2R1Y3QtbWV0YS1kYXRhJywnYnJhbmQtdGVybXMtc2V0dGluZ3MnLCdsYWJlbHMtc2V0dGluZ3MnLCdzdWItYnJhbmRzJywnc3ViLWJyYW5kcy1tYXBwaW5nJywnc292LXNldHRpbmdzJyAsJ2NvbnRlbnQtc2V0dGluZ3MnXVxuXHRzb3ZBcHBSb3V0ZXM9WydpbnNpZ2h0cycsJ3NoYXJlLW9mLXZvaWNlJywnc292JywncHJvZHVjdC1tZXRhLWRhdGEnLCdicmFuZC10ZXJtcy1zZXR0aW5ncycsJ2xhYmVscy1zZXR0aW5ncycsJ3N1Yi1icmFuZHMnLCdzdWItYnJhbmRzLW1hcHBpbmcnLCdzb3Ytc2V0dGluZ3MnICwnY29udGVudC1zZXR0aW5ncyddXG5cdHNlbGxlckFuYWx5dGljc0FwcFJvdXRlcz1bJ3NlbGxlci9pbnNpZ2h0cycsJ3Byb2R1Y3QtbWV0YS1kYXRhJywnYnJhbmQtdGVybXMtc2V0dGluZ3MnLCdsYWJlbHMtc2V0dGluZ3MnLCdzdWItYnJhbmRzJywnc3ViLWJyYW5kcy1tYXBwaW5nJywnc292LXNldHRpbmdzJyAsJ2NvbnRlbnQtc2V0dGluZ3MnXVxuXHR2ZW5kb3JBbmFseXRpY3NBcHBSb3V0ZXM9Wyd2ZW5kb3IvaW5zaWdodHMnLCdwcm9kdWN0LW1ldGEtZGF0YScsJ2JyYW5kLXRlcm1zLXNldHRpbmdzJywnbGFiZWxzLXNldHRpbmdzJywnc3ViLWJyYW5kcycsJ3N1Yi1icmFuZHMtbWFwcGluZycsJ3Nvdi1zZXR0aW5ncycgLCdjb250ZW50LXNldHRpbmdzJ11cblx0XG5cdHR5cGVTdGF0dXNDb25maWdzID0ge1xuICAgICAgICAnU1BPTlNPUkVEX0tFWVdPUkRfQklEUycgOiB0cnVlLFxuICAgICAgICAnU1BPTlNPUkVEX1BST0RVQ1RfTUFOVUFMX1RBUkdFVElOR19CSURTJyA6IHRydWUsXG4gICAgICAgICdTUE9OU09SRURfUFJPRFVDVF9BVVRPX1RBUkdFVElOR19CSURTJyA6IHRydWUsXG4gICAgICAgICdTUE9OU09SRURfS0VZV09SRF9BVVRPJyA6IHRydWUsXG4gICAgICAgICdTUE9OU09SRURfS0VZV09SRCcgOiB0cnVlLFxuICAgICAgICAnU1BfS0VZV09SRFNfQklEX0dBUCcgOiBmYWxzZSxcbiAgICAgICAgJ1NQX1BMQUNFTUVOVF9CSUQnIDogZmFsc2UsXG4gICAgICAgICdTUF9UQVJHRVRJTkdfVFlQRV9CUkVBS0RPV04nIDogZmFsc2UsXG4gICAgICAgICdTUF9NQVRDSF9UWVBFX0JSRUFLRE9XTicgOiBmYWxzZSxcbiAgICAgICAgJ1NQX1NCX0tFWVdPUkRfUEFSSVRZJyA6IHRydWUsXG4gICAgICAgICdIRUFETElORV9LRVlXT1JEX0JJRFMnIDogdHJ1ZSxcbiAgICAgICAgJ1NCX0tFWVdPUkRTX0JJRF9HQVAnIDogZmFsc2UsXG4gICAgICAgICdTQl9NQVRDSF9UWVBFX0JSRUFLRE9XTicgOiBmYWxzZSxcbiAgICAgICAgJ1NCX1NQX0tFWVdPUkRfUEFSSVRZJyA6IHRydWUsXG4gICAgICAgICdOT19LRVlXT1JEX0JJRFMnIDogdHJ1ZSxcbiAgICAgICAgJ0NBTVBBSUdOX1RZUEVfQlJFQUtET1dOJyA6IGZhbHNlLFxuICAgICAgICAnQVVUT19UT19NQU5VQUxfQVNJTl9QQVJJVFknIDogdHJ1ZSxcbiAgICAgICAgJ01BTlVBTF9UT19BVVRPX0FTSU5fUEFSSVRZJyA6IHRydWUsXG4gICAgICAgICdDT01QRVRJVE9SX1BST0RVQ1QnIDogdHJ1ZSxcbiAgICAgICAgJ1NQT05TT1JFRF9CUkFORF9LRVlXT1JEJzogdHJ1ZVxuICAgIH1cblxuXHRcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIFJlc3RBcGlTZXJ2aWNlOiBSZXN0QXBpU2VydmljZSxcblx0XHRwcml2YXRlIGFjdGl2YXRlZFJvdXRlOkFjdGl2YXRlZFJvdXRlLFxuXHRcdHByaXZhdGUgdXJsQ29udGV4dFNlcnZpY2U6IFVybENvbnRleHRTZXJ2aWNlKSB7fVxuXG5cdGdldFR5cGVTdGF0dXNDb25maWdzKCl7XG5cdFx0cmV0dXJuIHRoaXMudHlwZVN0YXR1c0NvbmZpZ3M7XG5cdH1cblx0Y29uc3RydWN0Q2hpbGRNZW51cyhtZW51SXRlbXMpe1xuXHRcdGlmKHRoaXMuYXBwRGV0YWlscy5saXN0TWVudXMpe1xuXHRcdFx0Zm9yIChsZXQgaXRlbSBvZiBtZW51SXRlbXMpIHtcblx0XHRcdFx0aWYgKHRoaXMuYXBwRGV0YWlscy5hcHBTZXQpIHtcblx0XHRcdFx0XHRpZiAoaXRlbS5pZC5pbmNsdWRlcyh0aGlzLmFwcERldGFpbHMuYXBwbGljYXRpb25JZCkpIHtcblx0XHRcdFx0XHRcdGZvciAobGV0IGxpc3RNZW51SXRlbSBvZiB0aGlzLmFwcERldGFpbHMubGlzdE1lbnVzKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChpdGVtLmlkID09IGxpc3RNZW51SXRlbS5pZCkge1xuXHRcdFx0XHRcdFx0XHRcdGl0ZW0uY2hpbGRyZW4gPSBsaXN0TWVudUl0ZW0uY2hpbGRyZW5cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChpdGVtLmlkID09IHRoaXMuYXBwRGV0YWlscy5hcHBsaWNhdGlvbklkKSB7XG5cdFx0XHRcdFx0aXRlbS5jaGlsZHJlbiA9IHRoaXMuYXBwRGV0YWlscy5saXN0TWVudXNcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbWVudUl0ZW1zO1xuXHR9XG5cblx0Z2V0TWVudUxpc3QoYXBwRGV0YWlscyA6IGFueSkge1x0XG5cdFx0dGhpcy5hcHBEZXRhaWxzIFx0XHQ9IGFwcERldGFpbHM7XG5cdFx0dGhpcy5NZW51TGlzdCBcdFx0XHQ9IFtdO1xuXHRcdGxldCBhcHBlbmRDaGlsZE1lbnVzIFx0PSB0aGlzLmNvbnN0cnVjdENoaWxkTWVudXMoTUVOVUxJU1QpO1xuXHRcdGxldCBNRU5VTElTVF9TT1JURUQgXHQ9IE1FTlVMSVNULnNvcnQoKGEsIGIpID0+IChhLm9yZGVyID4gYi5vcmRlcikgPyAxIDogLTEpO1xuXHRcdHRoaXMuYXBwTmFtZXMgXHRcdFx0PSB0aGlzLmFwcGxpY2F0aW9uSWRzO1xuXG5cdFx0aWYoKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50T3JnYW5pemF0aW9uLm9yZ2FuaXphdGlvbklkID09PSAxMDM5MCB8fCBcblx0XHRcdHRoaXMuYXBwRGV0YWlscy5jdXJyZW50T3JnYW5pemF0aW9uLm9yZ2FuaXphdGlvbklkID09PSAxMDUzMCkgJiYgXG5cdFx0XHR0aGlzLmFwcERldGFpbHMudXNlckluZm8uZW1haWwgPT0gXCJzcmVlbmF0aEBpbnRlbnR3aXNlLmNvbVwiKXtcblxuXHRcdFx0dGhpcy5hcHBOYW1lcyA9IHRoaXMuYXBwbGljYXRpb25JZHMuZmlsdGVyKChuYW1lKT0+e1xuXHRcdFx0XHRyZXR1cm4gKG5hbWUgIT0gJ2Fkc19hbWF6b25fY29udGVudF9zaGFyZV9vZl92b2ljZScgJiYgbmFtZSAhPSAnYWRzX2FtYXpvbl9jb250ZW50X2NvbnRlbnRfYW5hbHl0aWNzJylcblx0XHRcdH0pO1xuXHRcdFx0XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgYXBwTmFtZSBvZiBNRU5VTElTVF9TT1JURUQpIHtcblx0XHRcdGlmKHRoaXMuYXBwTmFtZXMuaW5kZXhPZihhcHBOYW1lLmlkKSA+PSAwKXtcblx0XHRcdFx0bGV0IGxpc3QgPSB0aGlzLmdldEFwcGxpY2F0aW9uTWVudUl0ZW0oYXBwTmFtZSk7XG5cdFx0XHRcdGlmKGxpc3QgJiYgbGlzdC5jaGlsZHJlbiAhPSB1bmRlZmluZWQpe1xuXHRcdFx0XHRcdGlmKGFwcE5hbWUuaWQgPT0nYWRzX2FtYXpvbl9kc3AnKXtcblx0XHRcdFx0XHRcdGlmKGxpc3QuY2hpbGRyZW4gJiYgbGlzdC5jaGlsZHJlbi5sZW5ndGggPiAwKXtcblx0XHRcdFx0XHRcdFx0Zm9yKGxldCBjaGlsZCBvZiBsaXN0LmNoaWxkcmVuKXtcblx0XHRcdFx0XHRcdFx0XHRpZighdGhpcy5pc1N0cnVjdHVyZUFwaVN1cHBvcnQgJiYgY2hpbGQuaWQgPT1cImFtc19kc3Bfc2V0dGluZ3NcIil7XG5cdFx0XHRcdFx0XHRcdFx0XHRjaGlsZC5jaGlsZHJlbiA9IGNoaWxkLmNoaWxkcmVuLmZpbHRlcihzX2NoaWxkID0+IHNfY2hpbGQuaWQgIT09ICdhbXNfZHNwX3J1bGVzJyk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzLk1lbnVMaXN0LnB1c2gobGlzdCk7XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHR0aGlzLk1lbnVMaXN0LnB1c2gobGlzdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHR9ZWxzZSBpZihhcHBOYW1lLnR5cGUgIT0gJ2V4cGFuZGFibGUnKXtcblx0XHRcdFx0bGV0IGxpc3QgPSB0aGlzLmdldEFwcGxpY2F0aW9uTWVudUl0ZW0oYXBwTmFtZSk7XG5cdFx0XHRcdGlmKGxpc3QgIT0gdW5kZWZpbmVkKXtcblx0XHRcdFx0XHR0aGlzLk1lbnVMaXN0LnB1c2gobGlzdClcblx0XHRcdFx0fVxuXHRcdFx0fVx0XHRcdFxuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5NZW51TGlzdDtcblx0fVxuXG5cdGdldEFwcGxpY2F0aW9uTWVudUl0ZW0oY3VycmVudE1lbnVJdGVtOmFueSk6IGFueSB7XG5cdFx0bGV0IG1lbnVJdGVtID0ge1xuXHRcdFx0Y2hpbGRyZW4gOiBbXVxuXHRcdH07XG5cblx0XHRpZihjdXJyZW50TWVudUl0ZW0udHlwZSAhPSAnZXhwYW5kYWJsZScpe1xuXHRcdFx0bGV0IGFsbEtleXMgPSBPYmplY3Qua2V5cyhjdXJyZW50TWVudUl0ZW0pO1xuXHRcdFx0Y29uc3QgaGFzQ29uZGl0aW9uc3RvQ2hlY2sgPSB0aGlzLmNvbmRpdGlvbnMuc29tZShjb25kaXRpb24gPT4gYWxsS2V5cy5pbmNsdWRlcyhjb25kaXRpb24pKVxuXHRcdFx0aWYoaGFzQ29uZGl0aW9uc3RvQ2hlY2spe1xuXHRcdFx0XHRsZXQgaXNNZW51QWxsb3dlZCA9IHRoaXMuY2hlY2tBbGxDb25kaXRpb25zKGN1cnJlbnRNZW51SXRlbSAsIGFsbEtleXMpO1xuXHRcdFx0XHRpZihpc01lbnVBbGxvd2VkKXtcblx0XHRcdFx0XHRtZW51SXRlbSA9IGN1cnJlbnRNZW51SXRlbTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdyZXR1cm4gZW1wdHknKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2V7XG5cdFx0XHRcdG1lbnVJdGVtID0gY3VycmVudE1lbnVJdGVtO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNle1xuXHRcdFx0bGV0IGFsbEtleXMgPSBPYmplY3Qua2V5cyhjdXJyZW50TWVudUl0ZW0pO1xuXHRcdFx0Y29uc3QgaGFzQ29uZGl0aW9uc3RvQ2hlY2sgPSB0aGlzLmNvbmRpdGlvbnMuc29tZShjb25kaXRpb24gPT4gYWxsS2V5cy5pbmNsdWRlcyhjb25kaXRpb24pKVxuXHRcdFx0aWYoIWhhc0NvbmRpdGlvbnN0b0NoZWNrIHx8IChoYXNDb25kaXRpb25zdG9DaGVjayAmJiB0aGlzLmNoZWNrQWxsQ29uZGl0aW9ucyhjdXJyZW50TWVudUl0ZW0gLCBhbGxLZXlzKSkpIHtcblx0XHRcdFx0T2JqZWN0LmtleXMoY3VycmVudE1lbnVJdGVtKS5mb3JFYWNoKChrZXkpPT57IFxuXHRcdFx0XHRcdGlmICh0eXBlb2YgY3VycmVudE1lbnVJdGVtW2tleV0gIT0gXCJvYmplY3RcIiApIHtcblx0XHRcdFx0XHRcdG1lbnVJdGVtW2tleV0gPSBjdXJyZW50TWVudUl0ZW1ba2V5XTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdG1lbnVJdGVtLmNoaWxkcmVuID0gW107XG5cdFx0XHRcdGZvcihsZXQgY2hpbGQgb2YgY3VycmVudE1lbnVJdGVtLmNoaWxkcmVuKXtcblx0XHRcdFx0XHRsZXQgbmF2X21lbnUgPSB0aGlzLmdldEFwcGxpY2F0aW9uTWVudUl0ZW0oY2hpbGQpO1xuXHRcdFx0XHRcdGlmKG5hdl9tZW51ICE9IG51bGwpeyBcblx0XHRcdFx0XHRcdGlmKG5hdl9tZW51LmNoaWxkcmVuICE9IHVuZGVmaW5lZCl7XG5cdFx0XHRcdFx0XHRcdGlmKG5hdl9tZW51LmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuXHRcdFx0XHRcdFx0XHRcdG1lbnVJdGVtLmNoaWxkcmVuLnB1c2gobmF2X21lbnUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdFx0XHRtZW51SXRlbS5jaGlsZHJlbi5wdXNoKG5hdl9tZW51KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1lbHNle1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XHRcdFx0XG5cdFx0fVxuXHRcdHJldHVybiBtZW51SXRlbTtcblx0fVxuXG5cdGdldEdsb2JhbFNldHRpbmdzTWVudShhcHBEZXRhaWxzIDogYW55KSB7XG5cdFx0dGhpcy5hcHBEZXRhaWxzID0gYXBwRGV0YWlscztcdFxuXHRcdHRoaXMuU2V0dGluZ3NNZW51TGlzdCA9IFtdO1xuXHRcdGxldCBHTE9CQUxfU0VUVElOR19MSVNUX1NPUlRFRCA9IEdMT0JBTF9TRVRUSU5HX0xJU1Quc29ydCgoYSwgYikgPT4gKGEub3JkZXIgPiBiLm9yZGVyKSA/IDEgOiAtMSk7XG5cdFx0Zm9yIChsZXQgYXBwTmFtZSBvZiBHTE9CQUxfU0VUVElOR19MSVNUX1NPUlRFRCkge1xuXHRcdFx0aWYoYXBwTmFtZS50eXBlID09ICdleHBhbmRhYmxlJyl7XG5cdFx0XHRcdGxldCBsaXN0ID0gdGhpcy5nZXRBcHBsaWNhdGlvbk1lbnVJdGVtKGFwcE5hbWUpO1xuXHRcdFx0XHRpZihsaXN0LmNoaWxkcmVuICE9IHVuZGVmaW5lZCAmJiBsaXN0LmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuXHRcdFx0XHRcdHRoaXMuU2V0dGluZ3NNZW51TGlzdC5wdXNoKGxpc3QpO1xuXHRcdFx0XHR9XHRcdFx0XHRcblx0XHRcdH1lbHNlIGlmKGFwcE5hbWUudHlwZSAhPSAnZXhwYW5kYWJsZScpe1xuXHRcdFx0XHRsZXQgbGlzdCA9IHRoaXMuZ2V0QXBwbGljYXRpb25NZW51SXRlbShhcHBOYW1lKTtcblx0XHRcdFx0aWYobGlzdCAhPSB1bmRlZmluZWQpe1xuXHRcdFx0XHRcdHRoaXMuU2V0dGluZ3NNZW51TGlzdC5wdXNoKGxpc3QpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XHRcdFxuXHRcdHJldHVybiB0aGlzLlNldHRpbmdzTWVudUxpc3Q7XG5cdH1cblxuXHRjaGVja0FsbENvbmRpdGlvbnMoY3VycmVudE1lbnVJdGVtOiBhbnksIGFsbEtleXM6IHN0cmluZ1tdKTogYW55IHtcblx0XHRsZXQgaW5jbHVkZU1lbnUgPSBmYWxzZTtcblx0XHRpZigoIXRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudCAmJiBjdXJyZW50TWVudUl0ZW0uaWQgPT0gXCJhZHNfb3ZlcnZpZXdcIiAmJiAhdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb25bJ25vQWN0aXZlQWNjb3VudHMnXSkpe1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGVsc2UgaWYoY3VycmVudE1lbnVJdGVtLmlkID09PSBcImFkc19zaWdudXBfb3ZlcnZpZXdcIikge1xuXHRcdFx0aWYoIXRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudCAmJiB0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvblsnbm9BY3RpdmVBY2NvdW50cyddKXtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNle1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZvcihsZXQgY29uZCBvZiB0aGlzLmNvbmRpdGlvbnMpe1xuXHRcdFx0aWYoY3VycmVudE1lbnVJdGVtW2NvbmRdICE9IHVuZGVmaW5lZCl7XG5cdFx0XHRcdHN3aXRjaChjb25kKXtcblx0XHRcdFx0XHRjYXNlICd2aXNpYmlsaXR5X3JvbGVzJzogeyBcblx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdGhpcy5jaGVja0ZvclJvbGVzKGN1cnJlbnRNZW51SXRlbVtjb25kXSk7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0YnJlYWs7IFxuXHRcdFx0XHRcdH0gXG5cdFx0XHRcdFx0Y2FzZSAndmlzaWJpbGl0eV9yb2xlc19ub3RfaW4nOiB7IFxuXHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmNoZWNrRm9ydmlzaWJpbGl0eVJvbGVzTm90SW4oY3VycmVudE1lbnVJdGVtW2NvbmRdKTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRicmVhazsgXG5cdFx0XHRcdFx0fSBcblx0XHRcdFx0XHRjYXNlICdkaXNhYmxlX3JlYWRvbmx5X29yZyc6e1xuXHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmRpc2FibGVGb3JPcmd3aXRoUmVhZE9ubHkoY3VycmVudE1lbnVJdGVtW2NvbmRdKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAnb3JnYW5pemF0aW9uX2lkcycgOiB7XG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQgJiYgdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50Lm9yZ2FuaXphdGlvbklkKSB7XG5cdFx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdGhpcy5jaGVja0ZvclNwZWNpZmllZElkcyhjdXJyZW50TWVudUl0ZW1bY29uZF0sY3VycmVudE1lbnVJdGVtLHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC5vcmdhbml6YXRpb25JZCk7XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdH0gZWxzZSBpZih0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbiAmJiB0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCkge1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JTcGVjaWZpZWRJZHMoY3VycmVudE1lbnVJdGVtW2NvbmRdLGN1cnJlbnRNZW51SXRlbSx0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCk7XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ29yZ2FuaXphdGlvbl9pZHNfbm90X2luJyA6IHtcblx0XHRcdFx0XHRcdGlmKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudCAmJiB0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQub3JnYW5pemF0aW9uSWQpIHtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmNoZWNrRm9yU3BlY2lmaWVkSWRzTm90SW4oY3VycmVudE1lbnVJdGVtW2NvbmRdLGN1cnJlbnRNZW51SXRlbSx0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQub3JnYW5pemF0aW9uSWQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50T3JnYW5pemF0aW9uICYmIHRoaXMuYXBwRGV0YWlscy5jdXJyZW50T3JnYW5pemF0aW9uLm9yZ2FuaXphdGlvbklkKSB7XG5cdFx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdGhpcy5jaGVja0ZvclNwZWNpZmllZElkc05vdEluKGN1cnJlbnRNZW51SXRlbVtjb25kXSxjdXJyZW50TWVudUl0ZW0sdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb24ub3JnYW5pemF0aW9uSWQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICdvcmdfdXNlcl9jdHJsJzp7XG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbiAmJiB0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCkge1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JPcmdXaXRoVXNlclJvbGUoY3VycmVudE1lbnVJdGVtW2NvbmRdLGN1cnJlbnRNZW51SXRlbSx0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ2FjY291bnRfaWRzJyA6IHsgXG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQgJiYgdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50LmFtc0FjY291bnRJZCkge1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JTcGVjaWZpZWRJZHMoY3VycmVudE1lbnVJdGVtW2NvbmRdLGN1cnJlbnRNZW51SXRlbSx0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQuYW1zQWNjb3VudElkKTtcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhazsgXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ2FjY291bnRfaWRzX25vdF9pbicgOiB7XG5cdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JTcGVjaWZpZWRBY2NvdW50SWRzTm90SW4oY3VycmVudE1lbnVJdGVtW2NvbmRdLGN1cnJlbnRNZW51SXRlbSx0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQuYW1zQWNjb3VudElkKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cdFx0XHRcdFx0XG5cdFx0XHRcdFx0Y2FzZSAnbm90X2FjY291bnRfbmFtZScgOiB7XG5cdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JOb3RBY2NOYW1lKGN1cnJlbnRNZW51SXRlbVtjb25kXSk7XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gY2FzZSAnYWNjb3VudF90eXBlJyA6IHsgXG5cdFx0XHRcdFx0Ly8gXHRpZih0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQgJiYgdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50LnR5cGUpIHtcblx0XHRcdFx0XHQvLyBcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmNoZWNrRm9yQWNjVHlwZShjdXJyZW50TWVudUl0ZW0pO1xuXHRcdFx0XHRcdC8vIFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBcdFx0aW5jbHVkZU1lbnUgPSBmYWxzZTtcblx0XHRcdFx0XHQvLyBcdH1cblx0XHRcdFx0XHQvLyBicmVhazsgXG5cdFx0XHRcdFx0Ly8gfVxuXHRcdFx0XHRcdGNhc2UgJ29yZ2FuaXphdGlvbl9zZXR0aW5nJyA6IHsgXG5cdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JPcmdTZXR0aW5ncyhjdXJyZW50TWVudUl0ZW1bY29uZF0pO1x0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9Y2FzZSAnYXBwX29yZ19zZXR0aW5nJyA6IHsgXG5cdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JPcmdBcHBTZXR0aW5ncyhjdXJyZW50TWVudUl0ZW1bY29uZF0pO1x0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAnb3JnYW5pemF0aW9uX3NldHRpbmdfbm90X2luJyA6IHsgXG5cdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JOb3RPcmdTZXR0aW5ncyhjdXJyZW50TWVudUl0ZW1bY29uZF0pO1x0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9IFxuXHRcdFx0XHRcdGNhc2UgJ3NpdGVJZHMnIDogeyBcblx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdGhpcy5jaGVja0ZvclNpdGVJZHMoY3VycmVudE1lbnVJdGVtW2NvbmRdKTtcblx0XHRcdFx0XHRicmVhazsgXG5cdFx0XHRcdFx0fSBcblx0XHRcdFx0XHQvLyBjYXNlICdzdWJzY3JpcHRpb25fdHlwZXMnIDogeyBcblx0XHRcdFx0XHQvLyBcdGlmKGN1cnJlbnRNZW51SXRlbVsnYWNjb3VudF90eXBlJ10gPT0gdW5kZWZpbmVkKXtcblx0XHRcdFx0XHQvLyBcdFx0aWYodGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50ICYmIHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC5zdWJzY3JpcHRpb24pIHtcblx0XHRcdFx0XHQvLyBcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JTdWJzY3JpcHRpb25zKGN1cnJlbnRNZW51SXRlbVtjb25kXSlcblx0XHRcdFx0XHQvLyBcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBcdFx0XHRpbmNsdWRlTWVudSA9IGZhbHNlO1xuXHRcdFx0XHRcdC8vIFx0XHR9XG5cdFx0XHRcdFx0Ly8gXHR9ZWxzZXtcblx0XHRcdFx0XHQvLyBcdFx0aWYodGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50ICYmIHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC50eXBlKSB7XG5cdFx0XHRcdFx0Ly8gXHRcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmNoZWNrRm9yQWNjVHlwZShjdXJyZW50TWVudUl0ZW0pO1xuXHRcdFx0XHRcdC8vIFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIFx0XHRcdGluY2x1ZGVNZW51ID0gZmFsc2U7XG5cdFx0XHRcdFx0Ly8gXHRcdH1cblx0XHRcdFx0XHQvLyBcdH1cblx0XHRcdFx0XHQvLyBicmVhazsgXG5cdFx0XHRcdFx0Ly8gfSBcblx0XHRcdFx0XHRjYXNlICdjYW1wYWlnbl90eXBlcycgOiB7XG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY2FtcGFpZ25JbkNvbnRleHQpe1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JDYW1wYWlnblR5cGUoY3VycmVudE1lbnVJdGVtW2NvbmRdKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZXtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICdpbmNvbnRleHRfY2FtcGFpZ25fdGFyZ2V0aW5nJyA6IHsgXG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY2FtcGFpZ25JbkNvbnRleHQpe1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JDYW1wYWlnblRhcmdldGluZyhjdXJyZW50TWVudUl0ZW1bY29uZF0pXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7IFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICdpbmNvbnRleHRfY2FtcGFpZ25fdGFyZ2V0aW5nX3dhbG1hcnQnIDogeyBcblx0XHRcdFx0XHRcdGlmKHRoaXMuYXBwRGV0YWlscy5jYW1wYWlnbkluQ29udGV4dHdhbG1hcnQpe1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JDYW1wYWlnblRhcmdldGluZ1dhbG1hcnQoY3VycmVudE1lbnVJdGVtW2NvbmRdKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZXtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAndXNlcl9lbWFpbHMnIDogeyBcblx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdGhpcy5hdXRoZW50aWNhdGVVc2VyTWFpbE1lbnUoY3VycmVudE1lbnVJdGVtW2NvbmRdKVxuXHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gZGVmYXVsdDogeyBcblx0XHRcdFx0XHQvLyAvL3N0YXRlbWVudHM7IFxuXHRcdFx0XHRcdC8vIGJyZWFrOyBcblx0XHRcdFx0XHQvLyB9IFxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKCFpbmNsdWRlTWVudSl7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XHRcdFx0XG5cdFx0XHR9ZWxzZXtcblx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBpbmNsdWRlTWVudTtcblx0fVxuXG5cdGNoZWNrRm9yTm90QWNjTmFtZShwb3NzaWJsZVZhbHVlczogYW55KTogYm9vbGVhbiB7XG5cdFx0aWYocG9zc2libGVWYWx1ZXMuaW5kZXhPZih0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQubmFtZSkgPT0gLTEpe1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGVsc2V7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0Y2hlY2tGb3JDYW1wYWlnblR5cGUocG9zc2libGVWYWx1ZXM6IGFueSk6Ym9vbGVhbntcblx0XHRpZih0aGlzLmFwcERldGFpbHMuY2FtcGFpZ25JbkNvbnRleHQgJiYgcG9zc2libGVWYWx1ZXMuaW5kZXhPZih0aGlzLmFwcERldGFpbHMuY2FtcGFpZ25JbkNvbnRleHRbMF0uZGF0YVR5cGUpID49IDApe1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGVsc2V7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0Y2hlY2tGb3JDYW1wYWlnblRhcmdldGluZyhwb3NzaWJsZVZhbHVlczogYW55KTpib29sZWFue1xuXHRcdGlmKHRoaXMuYXBwRGV0YWlscy5jYW1wYWlnbkluQ29udGV4dCAmJiBwb3NzaWJsZVZhbHVlcy5pbmRleE9mKHRoaXMuYXBwRGV0YWlscy5jYW1wYWlnbkluQ29udGV4dFswXS5jYW1wYWlnblRhcmdldGluZykgPj0gMCl7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0ZWxzZXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRjaGVja0ZvckNhbXBhaWduVGFyZ2V0aW5nV2FsbWFydChwb3NzaWJsZVZhbHVlczogYW55KTpib29sZWFue1xuXHRcdGlmKHRoaXMuYXBwRGV0YWlscy5jYW1wYWlnbkluQ29udGV4dHdhbG1hcnQgJiYgcG9zc2libGVWYWx1ZXMuaW5kZXhPZih0aGlzLmFwcERldGFpbHMuY2FtcGFpZ25JbkNvbnRleHR3YWxtYXJ0WzBdLmNhbXBhaWduVGFyZ2V0aW5nKSA+PSAwKXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRlbHNle1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGF1dGhlbnRpY2F0ZVVzZXJNYWlsTWVudShwb3NzaWJsZVZhbHVlczogYW55KTpib29sZWFue1xuXHRcdHJldHVybiBwb3NzaWJsZVZhbHVlcyAmJiBwb3NzaWJsZVZhbHVlcy5pbmNsdWRlcyh0aGlzLmFwcERldGFpbHMudXNlckluZm8uZW1haWwpO1xuXHR9XG5cblx0Y2hlY2tGb3JTdWJzY3JpcHRpb25zKHBvc3NpYmxlVmFsdWVzOiBhbnkpOiBib29sZWFue1xuXHRcdGZvcihsZXQgc2V0dGluZ3Mgb2YgdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50LnN1YnNjcmlwdGlvbil7XG5cdFx0XHRpZigocG9zc2libGVWYWx1ZXMuaW5kZXhPZihzZXR0aW5ncy50eXBlKSA+PSAwKSAmJiBzZXR0aW5ncy5zdGF0dXMgPT0gXCJBQ1RJVkVcIil7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRjaGVja0ZvclNpdGVJZHMocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuXHRcdGlmKHRoaXMuYXBwRGV0YWlscy5zaWRlYmFySW5mbyAmJiB0aGlzLmFwcERldGFpbHMuc2lkZWJhckluZm8uc2l0ZUlkICYmIHBvc3NpYmxlVmFsdWVzLmluZGV4T2YoK3RoaXMuYXBwRGV0YWlscy5zaWRlYmFySW5mby5zaXRlSWQpID49IDApe1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGVsc2V7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0Y2hlY2tGb3JPcmdTZXR0aW5ncyhwb3NzaWJsZVZhbHVlczogYW55KTogYm9vbGVhbiB7XG5cdFx0aWYodGhpcy5hcHBEZXRhaWxzLm9yZ1NldHRpbmdzKXtcblx0XHRcdGZvcihsZXQgc2V0dGluZ3Mgb2YgdGhpcy5hcHBEZXRhaWxzLm9yZ1NldHRpbmdzKXtcblx0XHRcdFx0aWYocG9zc2libGVWYWx1ZXMuaW5kZXhPZihzZXR0aW5ncy5zZXR0aW5nKSA+PSAwKXtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1lbHNle1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGNoZWNrRm9yT3JnQXBwU2V0dGluZ3MocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuXHRcdGlmKHRoaXMuYXBwRGV0YWlscy5vcmdBcHBTZXR0aW5ncyl7XG5cdFx0XHRmb3IobGV0IHNldHRpbmdzIG9mIHRoaXMuYXBwRGV0YWlscy5vcmdBcHBTZXR0aW5ncyl7XG5cdFx0XHRcdGlmKHBvc3NpYmxlVmFsdWVzLmluZGV4T2Yoc2V0dGluZ3MudHlwZSkgPj0gMCAmJiBzZXR0aW5ncy5zdGF0dXMgPT0gJ0FDVElWRScpe1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fWVsc2V7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0Y2hlY2tGb3JOb3RPcmdTZXR0aW5ncyhwb3NzaWJsZVZhbHVlczogYW55KTogYm9vbGVhbiB7XG5cdFx0bGV0IGFsbG93ID0gdHJ1ZTtcblx0XHRjb25zdCByb2xlID0gWydTVVBFUl9BRE1JTicsICdTVVBFUl9BRE1JTl9SRUFEX09OTFknXTtcblx0XHRjb25zdCBpc0FkbWluUm9sZSA9IHJvbGUuaW5kZXhPZih0aGlzLmFwcERldGFpbHMudXNlckluZm8ucm9sZSkgPiAtMSA/IHRydWUgOiBmYWxzZTtcblx0XHRpZih0aGlzLmFwcERldGFpbHMub3JnU2V0dGluZ3MgJiYgdGhpcy5hcHBEZXRhaWxzLm9yZ1NldHRpbmdzLmxlbmd0aCA+IDApe1xuXHRcdFx0Zm9yKGxldCBzZXR0aW5ncyBvZiB0aGlzLmFwcERldGFpbHMub3JnU2V0dGluZ3Mpe1xuXHRcdFx0XHRpZighaXNBZG1pblJvbGUgJiYgcG9zc2libGVWYWx1ZXMuaW5kZXhPZihzZXR0aW5ncy5zZXR0aW5nKSA+IC0xICl7XG5cdFx0XHRcdFx0YWxsb3cgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFsbG93O1xuXHRcdH1lbHNle1xuXHRcdFx0cmV0dXJuIGFsbG93O1xuXHRcdH1cblx0fVxuXHRcblxuXHRjaGVja0ZvckFjY1R5cGUobWVudUl0ZW06IGFueSk6IGJvb2xlYW4ge1xuXHRcdGlmKG1lbnVJdGVtWydhY2NvdW50X3R5cGUnXS5pbmRleE9mKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC50eXBlKSA+PSAwKXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRlbHNle1xuXHRcdFx0aWYobWVudUl0ZW1bJ3N1YnNjcmlwdGlvbl90eXBlcyddKXtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2hlY2tGb3JTdWJzY3JpcHRpb25zKG1lbnVJdGVtWydzdWJzY3JpcHRpb25fdHlwZXMnXSlcblx0XHRcdH1cblx0XHRcdGVsc2V7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRjaGVja0ZvclNwZWNpZmllZElkcyhwb3NzaWJsZVZhbHVlczogYW55ICwgY3VycmVudE1lbnVJdGVtOmFueSAsIGlkOm51bWJlcik6IGJvb2xlYW4ge1xuXHRcdGlmKHBvc3NpYmxlVmFsdWVzWzBdLmlkKXtcblx0XHRcdGZvciAobGV0IGl0ZW0gb2YgcG9zc2libGVWYWx1ZXMpIHtcblx0XHRcdFx0aWYoIGl0ZW0uaWQgPT09IGlkICl7XG5cdFx0XHRcdFx0T2JqZWN0LmtleXMoaXRlbSkuZm9yRWFjaCgoa2V5KT0+eyBcblx0XHRcdFx0XHRcdGlmIChrZXkgIT0gJ2lkJykge1xuXHRcdFx0XHRcdFx0XHRjdXJyZW50TWVudUl0ZW1ba2V5XSA9IGl0ZW1ba2V5XTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKCdMaW5rIGNoYW5nZWQgdG8gJytjdXJyZW50TWVudUl0ZW0ubGluaysnIGFuZCByb3V0ZSBjaGFuZ2VkIHRvICcrY3VycmVudE1lbnVJdGVtLnJvdXRlKTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0aWYocG9zc2libGVWYWx1ZXMuaW5kZXhPZihpZCkgPj0gMCl7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZXtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRjaGVja0Zvck9yZ1dpdGhVc2VyUm9sZShwb3NzaWJsZVZhbHVlczogYW55ICwgY3VycmVudE1lbnVJdGVtOmFueSAsIGlkOm51bWJlcik6IGJvb2xlYW4ge1xuXHRcdGlmKHBvc3NpYmxlVmFsdWVzICYmIHBvc3NpYmxlVmFsdWVzLmxlbmd0aCA+IDApe1xuXHRcdFx0Zm9yIChsZXQgaXRlbSBvZiBwb3NzaWJsZVZhbHVlcykge1xuXHRcdFx0XHRpZihpdGVtLm9yZ2FuaXphdGlvbnMpe1xuXHRcdFx0XHRcdGlmKGl0ZW0udmlzaWJpbGl0eV9zYV9yb2xlcy5pbmNsdWRlcyh0aGlzLmFwcERldGFpbHMudXNlckluZm8ucm9sZSkgfHwgXG5cdFx0XHRcdFx0ICAoaXRlbS5vcmdhbml6YXRpb25zICYmIGl0ZW0udmlzaWJpbGl0eXJvbGVzICYmIGl0ZW0ub3JnYW5pemF0aW9ucy5pbmNsdWRlcyhpZCkgJiYgaXRlbS52aXNpYmlsaXR5cm9sZXMuaW5jbHVkZXModGhpcy5hcHBEZXRhaWxzLnVzZXJJbmZvLnJvbGUpKSl7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1lbHNlIGlmKGl0ZW0ub3JnYW5pemF0aW9uX3NldHRpbmcpe1xuXHRcdFx0XHRcdGlmICgodGhpcy5jaGVja0Zvck9yZ1NldHRpbmdzKGl0ZW0ub3JnYW5pemF0aW9uX3NldHRpbmcpICYmIGl0ZW0udmlzaWJpbGl0eXJvbGVzLmluY2x1ZGVzKHRoaXMuYXBwRGV0YWlscy51c2VySW5mby5yb2xlKSkgfHxcblx0XHRcdFx0XHRcdGl0ZW0udmlzaWJpbGl0eV9zYV9yb2xlcy5pbmNsdWRlcyh0aGlzLmFwcERldGFpbHMudXNlckluZm8ucm9sZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Y2hlY2tGb3JTcGVjaWZpZWRJZHNOb3RJbihwb3NzaWJsZVZhbHVlczogYW55ICwgY3VycmVudE1lbnVJdGVtOmFueSAsIGlkOm51bWJlcik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBwb3NzaWJsZVZhbHVlcy5pbmRleE9mKGlkKSA8IDA7XG5cdH1cblxuXHRjaGVja0ZvclNwZWNpZmllZEFjY291bnRJZHNOb3RJbihwb3NzaWJsZVZhbHVlczogYW55ICwgY3VycmVudE1lbnVJdGVtOmFueSAsIGlkOm51bWJlcik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBwb3NzaWJsZVZhbHVlcy5pbmRleE9mKGlkKSA8IDA7XG5cdH1cblxuXHRjaGVja0ZvclJvbGVzKHBvc3NpYmxlVmFsdWVzOiBhbnkpOiBib29sZWFuIHtcblx0XHRpZihwb3NzaWJsZVZhbHVlcy5pbmRleE9mKHRoaXMuYXBwRGV0YWlscy51c2VySW5mby5yb2xlKSA+PSAwKXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRlbHNle1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGNoZWNrRm9ydmlzaWJpbGl0eVJvbGVzTm90SW4ocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuXHRcdGlmKHBvc3NpYmxlVmFsdWVzLmluZGV4T2YodGhpcy5hcHBEZXRhaWxzLnVzZXJJbmZvLnJvbGUpID49IDApe1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1lbHNle1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGRpc2FibGVGb3JPcmd3aXRoUmVhZE9ubHkocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW57XG5cdFx0aWYodGhpcy5hcHBEZXRhaWxzLnVzZXJJbmZvLnJvbGUgPT09ICdSRUFEX09OTFknICYmIHBvc3NpYmxlVmFsdWVzLmluZGV4T2YodGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50Lm9yZ2FuaXphdGlvbklkKSA+PSAwKXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0ZWxzZXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBnZXRIb3N0T3JpZ2luQW5kTmF2aWdhdGUocm91dGUgLCBhcHBsaWNhdGlvbklkPXVuZGVmaW5lZCkge1xuXHRcdGlmICh3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHJvdXRlKSA9PSAtMSkge1xuXHRcdFx0dGhpcy5hY3RpdmF0ZWRSb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcblx0XHRcdFx0aWYgKGFwcGxpY2F0aW9uSWQpIHtcblx0XHRcdFx0XHRwYXJhbXMgPSB7Li4ucGFyYW1zLCAuLi5hcHBsaWNhdGlvbklkfTtcdFxuXHRcdFx0XHR9XG5cdFx0XHRcdGxldCB1cmxUb05hdmlnYXRlID0gdGhpcy51cmxDb250ZXh0U2VydmljZS5wcmVwYXJlVXJsV2l0aFF1ZXJ5UGFyYW1zKHJvdXRlLCBwYXJhbXMpO1xuXHRcdFx0XHR1cmxUb05hdmlnYXRlID0gYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vJHt1cmxUb05hdmlnYXRlfWBcblx0XHRcdFx0Ly8gdXJsVG9OYXZpZ2F0ZSA9IGBodHRwOi8vbG9jYWxob3N0OjMwMDAvJHt1cmxUb05hdmlnYXRlfWBcblx0XHRcdFx0Y29uc29sZS5sb2coJ05hdmlnYXRpbmcgdG8gLSAnLHVybFRvTmF2aWdhdGUpO1xuXHRcdFx0XHR3aW5kb3cub3Blbih1cmxUb05hdmlnYXRlLCAnX3NlbGYnKTtcblx0XHRcdH0pO1xuXHRcdH1cbiAgICB9XG5cdFxuXHRwdWJsaWMgZmV0Y2hLZXlWYWx1ZShrZXk6IHN0cmluZykge1xuXHRcdGlmKHRoaXMuYXBwRGV0YWlscyAmJiB0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQpIHtcblx0XHRcdHJldHVybiAodGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50W2tleV0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0XG5cdH1cblxuXHRwdWJsaWMgc2V0QWN0aXZlUmVjb0NvdW50KGNvdW50Om51bWJlcil7XG5cdFx0dGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50WydhY3RpdmVSZWNvbW1lbmRhdGlvbiddID0gY291bnQ7XG5cdH1cblx0XG5cdHB1YmxpYyBpc0hhdmluZ0FueUFjdGl2ZVN1YnMoaWQsc3Vicyx0eXBlKXtcbiAgICBpZihpZCA9PT0gJ2Fkc19hbWF6b25fYXR0cmlidXRpb24nICYmIHRoaXMuY2hlY2tTdWJzY3JpcHRpb25BY3RpdmUoc3VicywgdHlwZSwgJ0FNU19BVFRSSUJVVElPTicpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYoaWQgPT09ICdhZHNfYW1hem9uX2RzcCcgJiYgdGhpcy5jaGVja1N1YnNjcmlwdGlvbkFjdGl2ZShzdWJzLCB0eXBlLCAnRFNQJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZigoaWQgPT09ICdhZHNfYW1hem9uX2NvbnRlbnQnKSAmJiB0aGlzLmNoZWNrU3Vic2NyaXB0aW9uQWN0aXZlKHN1YnMsIHR5cGUsICdDT05URU5UJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZigoaWQgPT09ICdhZHNfaW5zdGFjYXJ0JykgJiYgdGhpcy5jaGVja1N1YnNjcmlwdGlvbkFjdGl2ZShzdWJzLCB0eXBlLCAnSU5TVEFDQVJUJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1lbHNlIGlmKChpZCA9PT0gJ2Fkc19jcml0ZW8nKSAmJiB0aGlzLmNoZWNrU3Vic2NyaXB0aW9uQWN0aXZlKHN1YnMsIHR5cGUsICdDUklURU8nKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9ZWxzZSBpZigoaWQgPT09ICdhZHNfd2FsbWFydCcpICYmIHRoaXMuY2hlY2tTdWJzY3JpcHRpb25BY3RpdmUoc3VicywgdHlwZSwgJ1dBTE1BUlQnKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9ZWxzZSBpZihpZCA9PT0gJ2Fkc19kYXRhX3BsYXRmb3JtJ3x8IGlkID09PSAnYW1jLXBsYXRmb3JtLXdlYicgfHwgaWQgPT09ICdhZHNfYW1hem9uX3NlbGxlcicpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fWVsc2UgaWYoaWQgPT09ICdhZHNfYW1hem9uX2FkdmVydGlzaW5nJyB8fCBpZCA9PT0gJ2Fkc192ZW5kb3Jfc2FsZXMnIHx8IGlkID09PSAnYWRzX3NlbGxlcl9zYWxlcycpIHtcbiAgICAgIGZvcihsZXQgc2V0dGluZ3Mgb2Ygc3Vicyl7XG4gICAgICAgIGlmKHNldHRpbmdzLnR5cGUgIT0gdHlwZSAmJiBzZXR0aW5ncy5zdGF0dXMgPT0gXCJBQ1RJVkVcIil7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIFx0fVxuXG5cdHB1YmxpYyBjaGVja1N1YnNjcmlwdGlvbkFjdGl2ZShzdWJzLCBhY2NUeXBlICxzdWJUeXBlKSB7XG5cdFx0aWYoc3ViVHlwZSA9PT0gYWNjVHlwZSl7XG5cdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGNvbnN0IGN1cnJlbnRUeXBlU3ViID0gc3Vicy5maWx0ZXIoc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbi50eXBlID09PSBzdWJUeXBlKTtcblx0XHRpZihjdXJyZW50VHlwZVN1Yi5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChjdXJyZW50VHlwZVN1YlswXS5zdGF0dXMgPT09ICdBQ1RJVkUnIHx8IGN1cnJlbnRUeXBlU3ViWzBdLnR5cGUgPT09IGFjY1R5cGUpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGdldEFwcGxpY2F0aW9uSUQoKSB7XG5cdFx0bGV0IHVybEFycmF5ID0gdGhpcy51cmxDb250ZXh0U2VydmljZS5yb3V0ZXIudXJsLnNwbGl0KCcvJyk7XG5cdFx0bGV0IGN1cnJlbnRSb3V0ZSA9IHVybEFycmF5W3VybEFycmF5Lmxlbmd0aCAtIDFdO1xuXHRcdFxuXHRcdGlmKHRoaXMuY29udGVudEFwcFJvdXRlcy5pbmRleE9mKGN1cnJlbnRSb3V0ZSk+LTEgKSB7XG5cdFx0XHRyZXR1cm4gXCJhZHNfYW1hem9uX2NvbnRlbnRfY29udGVudF9hbmFseXRpY3NcIjtcblx0XHR9IGVsc2UgaWYodGhpcy5zb3ZBcHBSb3V0ZXMuaW5kZXhPZihjdXJyZW50Um91dGUpPi0xKSB7XG5cdFx0XHRyZXR1cm4gXCJhZHNfYW1hem9uX2NvbnRlbnRfc2hhcmVfb2Zfdm9pY2VcIjtcblx0XHR9XG5cdH1cbn0iXX0=