ng-miam 6.4.13 → 7.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 (208) hide show
  1. package/bundles/ng-miam.umd.js +8539 -10855
  2. package/bundles/ng-miam.umd.js.map +1 -1
  3. package/bundles/ng-miam.umd.min.js +2 -2
  4. package/bundles/ng-miam.umd.min.js.map +1 -1
  5. package/esm2015/lib/_components/abstracts/event-tracer.component.js +3 -2
  6. package/esm2015/lib/_components/accordion/accordion.component.js +75 -0
  7. package/esm2015/lib/_components/components.module.js +27 -21
  8. package/esm2015/lib/_components/counter-input/counter-input.component.js +86 -76
  9. package/esm2015/lib/_components/icon/icon.component.js +1 -1
  10. package/esm2015/lib/_components/index.js +5 -5
  11. package/esm2015/lib/_components/like-button/like-button.component.js +1 -1
  12. package/esm2015/lib/_components/list-input/list-input.component.js +5 -5
  13. package/esm2015/lib/_components/loader/loader.component.js +1 -1
  14. package/esm2015/lib/_components/meals-planner-link/meals-planner-link.component.js +3 -3
  15. package/esm2015/lib/_components/modal/modal.component.js +155 -137
  16. package/esm2015/lib/_components/product-card/product-card.component.js +333 -0
  17. package/esm2015/lib/_components/products-picker/products-picker.component.js +155 -0
  18. package/esm2015/lib/_components/progress-tracker/progress-tracker.component.js +1 -1
  19. package/esm2015/lib/_components/recipe-filters/recipe-filters.component.js +166 -217
  20. package/esm2015/lib/_components/recipe-pricing/recipe-pricing.component.js +55 -35
  21. package/esm2015/lib/_components/slider-tabs/slider-tabs.component.js +84 -0
  22. package/esm2015/lib/_components/sponsor-blocks/sponsor-image-and-text-block/sponsor-image-and-text-block.component.js +1 -1
  23. package/esm2015/lib/_components/sponsor-blocks/sponsor-text-and-image-block/sponsor-text-and-image-block.component.js +1 -1
  24. package/esm2015/lib/_components/tabs/tabs.component.js +48 -88
  25. package/esm2015/lib/_components/toaster/toaster.component.js +48 -84
  26. package/esm2015/lib/_components/tooltipable-content/tooltipable-content.component.js +1 -1
  27. package/esm2015/lib/_models/basket-entry.js +33 -49
  28. package/esm2015/lib/_models/basket-preview-line.js +5 -5
  29. package/esm2015/lib/_models/basket.js +15 -12
  30. package/esm2015/lib/_models/item.js +2 -2
  31. package/esm2015/lib/_models/recipe.js +2 -15
  32. package/esm2015/lib/_models/user.js +1 -1
  33. package/esm2015/lib/_services/analytics.service.js +24 -5
  34. package/esm2015/lib/_services/baskets-synchronizing/baskets-comparator.service.js +1 -10
  35. package/esm2015/lib/_services/baskets-synchronizing/baskets-synchronizer.service.js +15 -15
  36. package/esm2015/lib/_services/baskets.service.js +478 -60
  37. package/esm2015/lib/_services/context.service.js +22 -35
  38. package/esm2015/lib/_services/index.js +3 -5
  39. package/esm2015/lib/_services/interceptor.service.js +2 -2
  40. package/esm2015/lib/_services/items.service.js +27 -4
  41. package/esm2015/lib/_services/recipe-details.service.js +198 -0
  42. package/esm2015/lib/_services/recipe-likes.service.js +1 -1
  43. package/esm2015/lib/_services/recipes.service.js +24 -53
  44. package/esm2015/lib/_services/scrolling.service.js +17 -0
  45. package/esm2015/lib/_services/toaster.service.js +4 -5
  46. package/esm2015/lib/_services/user.service.js +2 -2
  47. package/esm2015/lib/_types/basket-action-type.enum.js +11 -0
  48. package/esm2015/lib/_types/basket-action.js +2 -0
  49. package/esm2015/lib/_types/basket-stats.js +2 -0
  50. package/esm2015/lib/_types/builded/miam-interface.js +1 -1
  51. package/esm2015/lib/_types/event-trace.js +5 -0
  52. package/esm2015/lib/_types/items-comparator.js +1 -10
  53. package/esm2015/lib/_types/recipe-filters.js +1 -1
  54. package/esm2015/lib/_types/toaster.js +1 -1
  55. package/esm2015/lib/_utils/directives/index.js +2 -1
  56. package/esm2015/lib/_utils/directives/reach-top.directive.js +33 -0
  57. package/esm2015/lib/_utils/pipes/readable-float-number/readable-float-number.pipe.js +8 -2
  58. package/esm2015/lib/_utils/utils.module.js +12 -8
  59. package/esm2015/lib/_web-components/basket-preview/basket-preview-block/basket-preview-block.component.js +140 -118
  60. package/esm2015/lib/_web-components/basket-preview/basket-preview-disabled/basket-preview-disabled.component.js +2 -2
  61. package/esm2015/lib/_web-components/basket-preview/basket-preview-line/basket-preview-line.component.js +125 -444
  62. package/esm2015/lib/_web-components/basket-preview/replace-item/replace-item.component.js +211 -108
  63. package/esm2015/lib/_web-components/index.js +1 -4
  64. package/esm2015/lib/_web-components/list-scan/basket-preview/basket-preview.component.js +11 -14
  65. package/esm2015/lib/_web-components/list-scan/files-inputs/files-inputs.component.js +13 -13
  66. package/esm2015/lib/_web-components/list-scan/ingredients-list/ingredients-list.component.js +6 -6
  67. package/esm2015/lib/_web-components/list-scan/list-scan.component.js +10 -10
  68. package/esm2015/lib/_web-components/list-scan/overlay-button/overlay-button.component.js +23 -11
  69. package/esm2015/lib/_web-components/meals-planner/meals-planner-basket-confirmation/meals-planner-basket-confirmation.component.js +1 -1
  70. package/esm2015/lib/_web-components/meals-planner/meals-planner-catalog/meals-planner-catalog.component.js +1 -1
  71. package/esm2015/lib/_web-components/meals-planner/meals-planner-form/meals-planner-form.component.js +7 -7
  72. package/esm2015/lib/_web-components/meals-planner/meals-planner-result/meals-planner-result.component.js +5 -5
  73. package/esm2015/lib/_web-components/meals-planner/meals-planner.component.js +16 -20
  74. package/esm2015/lib/_web-components/planner-side-menu/planner-side-menu.component.js +4 -53
  75. package/esm2015/lib/_web-components/recipe-cards/add-recipe-card/add-recipe-card.component.js +1 -1
  76. package/esm2015/lib/_web-components/recipe-cards/index.js +1 -3
  77. package/esm2015/lib/_web-components/recipe-cards/recipe-card/recipe-card.component.js +326 -404
  78. package/esm2015/lib/_web-components/recipe-cards/recipe-card-cta/recipe-card-cta.component.js +50 -146
  79. package/esm2015/lib/_web-components/recipe-cards/recipe-cards.module.js +3 -15
  80. package/esm2015/lib/_web-components/recipe-catalog/catalog-article-card/catalog-article-card.component.js +1 -1
  81. package/esm2015/lib/_web-components/recipe-catalog/catalog-category/catalog-category.component.js +35 -29
  82. package/esm2015/lib/_web-components/recipe-catalog/catalog-header/catalog-header.component.js +1 -1
  83. package/esm2015/lib/_web-components/recipe-catalog/catalog-list/catalog-list.component.js +27 -31
  84. package/esm2015/lib/_web-components/recipe-catalog/recipe-catalog.component.js +98 -100
  85. package/esm2015/lib/_web-components/recipe-creation/recipe-form/recipe-form.component.js +2 -2
  86. package/esm2015/lib/_web-components/recipe-creation/recipe-stepper/recipe-stepper.component.js +7 -7
  87. package/esm2015/lib/_web-components/recipe-creation/tags-creator/tags-creator.component.js +4 -4
  88. package/esm2015/lib/_web-components/recipe-creation/tags-selector/tags-selector.component.js +8 -8
  89. package/esm2015/lib/_web-components/recipe-details/recipe-addon/recipe-addon.component.js +7 -3
  90. package/esm2015/lib/_web-components/recipe-details/recipe-details-infos/recipe-details-infos.component.js +57 -358
  91. package/esm2015/lib/_web-components/recipe-details/recipe-details-ingredients/recipe-details-ingredients.component.js +59 -122
  92. package/esm2015/lib/_web-components/recipe-details/recipe-details-steps/recipe-details-steps.component.js +51 -72
  93. package/esm2015/lib/_web-components/recipe-details/recipe-details.component.js +313 -363
  94. package/esm2015/lib/_web-components/recipe-details/recipe-details.module.js +8 -4
  95. package/esm2015/lib/_web-components/recipe-details/sponsor-storytelling/sponsor-storytelling.component.js +1 -1
  96. package/esm2015/lib/_web-components/recipe-helper/recipe-helper.component.js +89 -113
  97. package/esm2015/lib/_web-components/recipe-modal/recipe-modal.component.js +78 -69
  98. package/esm2015/lib/_web-components/recipe-tags/recipe-tags.component.js +5 -5
  99. package/esm2015/lib/_web-components/toaster-stack/toaster-stack.component.js +8 -4
  100. package/esm2015/lib/_web-components/web-components.module.js +3 -19
  101. package/esm2015/lib/ng-miam.module.js +5 -7
  102. package/fesm2015/ng-miam.js +5165 -6973
  103. package/fesm2015/ng-miam.js.map +1 -1
  104. package/lib/_components/abstracts/event-tracer.component.d.ts +2 -1
  105. package/lib/_components/accordion/accordion.component.d.ts +23 -0
  106. package/lib/_components/components.module.d.ts +38 -36
  107. package/lib/_components/counter-input/counter-input.component.d.ts +12 -14
  108. package/lib/_components/index.d.ts +4 -4
  109. package/lib/_components/modal/modal.component.d.ts +18 -18
  110. package/lib/_components/product-card/product-card.component.d.ts +40 -0
  111. package/lib/_components/products-picker/products-picker.component.d.ts +17 -0
  112. package/lib/_components/recipe-pricing/recipe-pricing.component.d.ts +12 -8
  113. package/lib/_components/slider-tabs/slider-tabs.component.d.ts +16 -0
  114. package/lib/_components/tabs/tabs.component.d.ts +11 -11
  115. package/lib/_components/toaster/toaster.component.d.ts +4 -2
  116. package/lib/_models/basket-entry.d.ts +16 -20
  117. package/lib/_models/basket-preview-line.d.ts +1 -0
  118. package/lib/_models/basket.d.ts +12 -5
  119. package/lib/_models/item.d.ts +1 -1
  120. package/lib/_models/recipe.d.ts +0 -5
  121. package/lib/_models/user.d.ts +0 -1
  122. package/lib/_services/analytics.service.d.ts +8 -22
  123. package/lib/_services/baskets-synchronizing/baskets-comparator.service.d.ts +0 -5
  124. package/lib/_services/baskets-synchronizing/baskets-synchronizer.service.d.ts +3 -6
  125. package/lib/_services/baskets.service.d.ts +137 -18
  126. package/lib/_services/context.service.d.ts +2 -4
  127. package/lib/_services/index.d.ts +2 -4
  128. package/lib/_services/items.service.d.ts +9 -2
  129. package/lib/_services/recipe-details.service.d.ts +84 -0
  130. package/lib/_services/recipe-likes.service.d.ts +2 -1
  131. package/lib/_services/recipes.service.d.ts +10 -14
  132. package/lib/_services/scrolling.service.d.ts +8 -0
  133. package/lib/_services/toaster.service.d.ts +1 -1
  134. package/lib/_types/basket-action-type.enum.d.ts +9 -0
  135. package/lib/_types/basket-action.d.ts +14 -0
  136. package/lib/_types/basket-stats.d.ts +5 -0
  137. package/lib/_types/builded/miam-interface.d.ts +16 -25
  138. package/lib/_types/event-trace.d.ts +22 -0
  139. package/lib/_types/items-comparator.d.ts +0 -5
  140. package/lib/_types/recipe-filters.d.ts +0 -2
  141. package/lib/_types/toaster.d.ts +1 -1
  142. package/lib/_utils/directives/index.d.ts +1 -0
  143. package/lib/_utils/directives/reach-top.directive.d.ts +13 -0
  144. package/lib/_utils/pipes/readable-float-number/readable-float-number.pipe.d.ts +1 -1
  145. package/lib/_utils/utils.module.d.ts +2 -2
  146. package/lib/_web-components/basket-preview/basket-preview-block/basket-preview-block.component.d.ts +9 -8
  147. package/lib/_web-components/basket-preview/basket-preview-line/basket-preview-line.component.d.ts +11 -9
  148. package/lib/_web-components/basket-preview/replace-item/replace-item.component.d.ts +27 -20
  149. package/lib/_web-components/index.d.ts +0 -3
  150. package/lib/_web-components/list-scan/basket-preview/basket-preview.component.d.ts +1 -2
  151. package/lib/_web-components/list-scan/files-inputs/files-inputs.component.d.ts +6 -5
  152. package/lib/_web-components/list-scan/ingredients-list/ingredients-list.component.d.ts +3 -3
  153. package/lib/_web-components/list-scan/list-scan.component.d.ts +3 -3
  154. package/lib/_web-components/list-scan/overlay-button/overlay-button.component.d.ts +8 -6
  155. package/lib/_web-components/meals-planner/meals-planner.component.d.ts +2 -3
  156. package/lib/_web-components/recipe-cards/index.d.ts +0 -2
  157. package/lib/_web-components/recipe-cards/recipe-card/recipe-card.component.d.ts +58 -17
  158. package/lib/_web-components/recipe-cards/recipe-card-cta/recipe-card-cta.component.d.ts +5 -12
  159. package/lib/_web-components/recipe-cards/recipe-cards.module.d.ts +7 -9
  160. package/lib/_web-components/recipe-catalog/catalog-category/catalog-category.component.d.ts +8 -6
  161. package/lib/_web-components/recipe-catalog/catalog-list/catalog-list.component.d.ts +7 -4
  162. package/lib/_web-components/recipe-catalog/recipe-catalog.component.d.ts +2 -3
  163. package/lib/_web-components/recipe-details/recipe-addon/recipe-addon.component.d.ts +5 -2
  164. package/lib/_web-components/recipe-details/recipe-details-infos/recipe-details-infos.component.d.ts +6 -18
  165. package/lib/_web-components/recipe-details/recipe-details-ingredients/recipe-details-ingredients.component.d.ts +6 -13
  166. package/lib/_web-components/recipe-details/recipe-details-steps/recipe-details-steps.component.d.ts +2 -10
  167. package/lib/_web-components/recipe-details/recipe-details.component.d.ts +29 -36
  168. package/lib/_web-components/recipe-details/recipe-details.module.d.ts +2 -1
  169. package/lib/_web-components/recipe-helper/recipe-helper.component.d.ts +2 -6
  170. package/lib/_web-components/recipe-modal/recipe-modal.component.d.ts +11 -9
  171. package/lib/_web-components/toaster-stack/toaster-stack.component.d.ts +5 -2
  172. package/lib/_web-components/web-components.module.d.ts +23 -29
  173. package/miam-style.css +1 -1
  174. package/package.json +1 -1
  175. package/esm2015/lib/_components/abstracts/abstract-recipe-card.component.js +0 -130
  176. package/esm2015/lib/_components/skeleton/skeleton.component.js +0 -70
  177. package/esm2015/lib/_components/tabs/tab-body.component.js +0 -30
  178. package/esm2015/lib/_components/tabs/tab-item.component.js +0 -36
  179. package/esm2015/lib/_components/tabs/tab-label.component.js +0 -30
  180. package/esm2015/lib/_models/groceries-entry.js +0 -42
  181. package/esm2015/lib/_models/groceries-list.js +0 -36
  182. package/esm2015/lib/_services/counter.service.js +0 -20
  183. package/esm2015/lib/_services/groceries-entries.service.js +0 -21
  184. package/esm2015/lib/_services/groceries-lists.service.js +0 -240
  185. package/esm2015/lib/_services/recipe-events.service.js +0 -63
  186. package/esm2015/lib/_types/skeleton.enum.js +0 -7
  187. package/esm2015/lib/_web-components/drawer/drawer.component.js +0 -273
  188. package/esm2015/lib/_web-components/pos-card/pos-card.component.js +0 -207
  189. package/esm2015/lib/_web-components/pos-selection/pos-selection.component.js +0 -283
  190. package/esm2015/lib/_web-components/recipe-cards/catalog-recipe-card/catalog-recipe-card.component.js +0 -632
  191. package/esm2015/lib/_web-components/recipe-cards/suggestion-card/suggestion-card.component.js +0 -144
  192. package/lib/_components/abstracts/abstract-recipe-card.component.d.ts +0 -49
  193. package/lib/_components/skeleton/skeleton.component.d.ts +0 -11
  194. package/lib/_components/tabs/tab-body.component.d.ts +0 -8
  195. package/lib/_components/tabs/tab-item.component.d.ts +0 -11
  196. package/lib/_components/tabs/tab-label.component.d.ts +0 -8
  197. package/lib/_models/groceries-entry.d.ts +0 -20
  198. package/lib/_models/groceries-list.d.ts +0 -30
  199. package/lib/_services/counter.service.d.ts +0 -10
  200. package/lib/_services/groceries-entries.service.d.ts +0 -10
  201. package/lib/_services/groceries-lists.service.d.ts +0 -68
  202. package/lib/_services/recipe-events.service.d.ts +0 -23
  203. package/lib/_types/skeleton.enum.d.ts +0 -5
  204. package/lib/_web-components/drawer/drawer.component.d.ts +0 -37
  205. package/lib/_web-components/pos-card/pos-card.component.d.ts +0 -24
  206. package/lib/_web-components/pos-selection/pos-selection.component.d.ts +0 -38
  207. package/lib/_web-components/recipe-cards/catalog-recipe-card/catalog-recipe-card.component.d.ts +0 -49
  208. package/lib/_web-components/recipe-cards/suggestion-card/suggestion-card.component.d.ts +0 -42
@@ -2,18 +2,20 @@ import { Component, ViewEncapsulation, ChangeDetectionStrategy, ChangeDetectorRe
2
2
  import { BehaviorSubject, forkJoin, of } from 'rxjs';
3
3
  import { filter, map, switchMap, take } from 'rxjs/operators';
4
4
  import { EventTracerComponent } from '../../../_components/abstracts/event-tracer.component';
5
- import { ArticlesService, ContextService, RecipeLikesService, RecipesService, UserService, AnalyticsService } from '../../../_services';
5
+ import { ArticlesService, ContextService, RecipeLikesService, RecipesService, UserService } from '../../../_services';
6
+ import { AnalyticsService } from '../../../_services/analytics.service';
6
7
  import { Icon } from '../../../_types/icon.enum';
7
8
  import { RecipeFilters } from '../../../_types/recipe-filters';
8
- import { CatalogRecipeCardComponent } from '../../recipe-cards';
9
+ import { RecipeCardComponent } from '../../recipe-cards';
9
10
  import * as i0 from "@angular/core";
10
11
  import * as i1 from "../../../_services";
11
- import * as i2 from "@angular/common";
12
- import * as i3 from "../../../_components/icon/icon.component";
13
- import * as i4 from "../../../_components/card-create-recipe/card-create-recipe.component";
14
- import * as i5 from "../../recipe-cards/catalog-recipe-card/catalog-recipe-card.component";
15
- import * as i6 from "../catalog-article-card/catalog-article-card.component";
16
- import * as i7 from "../../../_components/loader/loader.component";
12
+ import * as i2 from "../../../_services/analytics.service";
13
+ import * as i3 from "@angular/common";
14
+ import * as i4 from "../../../_components/icon/icon.component";
15
+ import * as i5 from "../../../_components/card-create-recipe/card-create-recipe.component";
16
+ import * as i6 from "../../recipe-cards/recipe-card/recipe-card.component";
17
+ import * as i7 from "../catalog-article-card/catalog-article-card.component";
18
+ import * as i8 from "../../../_components/loader/loader.component";
17
19
  function CatalogListComponent_div_1_div_2_div_4_Template(rf, ctx) { if (rf & 1) {
18
20
  i0.ɵɵelementStart(0, "div", 17);
19
21
  i0.ɵɵelementStart(1, "span");
@@ -93,10 +95,10 @@ function CatalogListComponent_ng_miam_card_create_recipe_3_Template(rf, ctx) { i
93
95
  i0.ɵɵlistener("clicked", function CatalogListComponent_ng_miam_card_create_recipe_3_Template_ng_miam_card_create_recipe_clicked_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r12 = i0.ɵɵnextContext(); return ctx_r12.recipeActionTriggered.emit({ action: "CREATE", recipe: null }); });
94
96
  i0.ɵɵelementEnd();
95
97
  } }
96
- function CatalogListComponent_ng_miam_catalog_recipe_card_4_Template(rf, ctx) { if (rf & 1) {
98
+ function CatalogListComponent_ng_miam_recipe_card_4_Template(rf, ctx) { if (rf & 1) {
97
99
  const _r16 = i0.ɵɵgetCurrentView();
98
- i0.ɵɵelementStart(0, "ng-miam-catalog-recipe-card", 24);
99
- i0.ɵɵlistener("addToMealsPlanner", function CatalogListComponent_ng_miam_catalog_recipe_card_4_Template_ng_miam_catalog_recipe_card_addToMealsPlanner_0_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r15 = i0.ɵɵnextContext(); return ctx_r15.addToMealsPlanner.emit($event); })("actionTriggered", function CatalogListComponent_ng_miam_catalog_recipe_card_4_Template_ng_miam_catalog_recipe_card_actionTriggered_0_listener($event) { i0.ɵɵrestoreView(_r16); const recipe_r14 = ctx.$implicit; const ctx_r17 = i0.ɵɵnextContext(); return ctx_r17.recipeActionTriggered.emit({ action: $event, recipe: recipe_r14 }); });
100
+ i0.ɵɵelementStart(0, "ng-miam-recipe-card", 24);
101
+ i0.ɵɵlistener("addToMealsPlanner", function CatalogListComponent_ng_miam_recipe_card_4_Template_ng_miam_recipe_card_addToMealsPlanner_0_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r15 = i0.ɵɵnextContext(); return ctx_r15.addToMealsPlanner.emit($event); })("actionTriggered", function CatalogListComponent_ng_miam_recipe_card_4_Template_ng_miam_recipe_card_actionTriggered_0_listener($event) { i0.ɵɵrestoreView(_r16); const recipe_r14 = ctx.$implicit; const ctx_r17 = i0.ɵɵnextContext(); return ctx_r17.recipeActionTriggered.emit({ action: $event, recipe: recipe_r14 }); });
100
102
  i0.ɵɵelementEnd();
101
103
  } if (rf & 2) {
102
104
  const recipe_r14 = ctx.$implicit;
@@ -137,6 +139,7 @@ export class CatalogListComponent extends EventTracerComponent {
137
139
  this.insertCreateCard = false;
138
140
  this.randomMode = false;
139
141
  this.modifiedGuests = null;
142
+ this.displayPricing = true;
140
143
  this.displayGuests = true;
141
144
  this.helpButtonAllowed = true;
142
145
  this.addRecipeMode = false;
@@ -202,14 +205,14 @@ export class CatalogListComponent extends EventTracerComponent {
202
205
  return (rect.top <= viewportHeight && rect.bottom >= 0);
203
206
  }
204
207
  autoloadContentIfNecessary() {
205
- this.loading.pipe(take(1), filter(loading => !loading)).subscribe(() => {
208
+ this.subscriptions.push(this.loading.pipe(take(1), filter(loading => !loading)).subscribe(() => {
206
209
  if (this.anchorIsOnScreen() && ((this.currentRecipes.length > 0 && !this.noMoreRecipes) ||
207
210
  (this.articles.length > 0 && !this.noMoreArticles))) {
208
211
  // At component initial load, 2 calls will be made for the first two recipes page
209
212
  // This is to avoid making the loader spin twice
210
213
  this.loadMore(this.lastPage > 2);
211
214
  }
212
- });
215
+ }));
213
216
  }
214
217
  loadMore(loader = true) {
215
218
  if (loader) {
@@ -222,17 +225,10 @@ export class CatalogListComponent extends EventTracerComponent {
222
225
  if (this.noMoreRecipes) {
223
226
  return of([]);
224
227
  }
225
- return this.recipesService.addMandatoryCompletionToFilter(this.filters).pipe(switchMap(() => {
226
- // keep a copy of the filters when request is sent, so we can check they are still the same when it is received
227
- // Because if it's not the case we have to ignore the results
228
- const requestFilters = this.filters.copy();
229
- if (this.context.displayIngredientPicturesOnRecipeCards && !recipeIncludes.includes('ingredients')) {
230
- recipeIncludes.push('ingredients');
231
- recipeSparseFields.recipes.push('ingredients');
232
- Object.assign(recipeSparseFields, { ingredients: ['name', 'quantity', 'unit', 'active', 'forced-eans', 'picture-url', 'position'] });
233
- }
234
- return this.recipesService.filter(requestFilters, { size: 20, number: page }, recipeIncludes, recipeSparseFields, this.modifiedGuests, this.randomMode, this.sort).pipe(switchMap((result) => this.processResults(result, requestFilters, page)));
235
- }));
228
+ // keep a copy of the filters when request is sent, so we can check they are still the same when it is received
229
+ // Because if it's not the case we have to ignore the results
230
+ const requestFilters = this.filters.copy();
231
+ return this.recipesService.filter(requestFilters, { size: 20, number: page }, recipeIncludes, recipeSparseFields, this.modifiedGuests, this.randomMode, this.sort).pipe(switchMap((result) => this.processResults(result, requestFilters, page)));
236
232
  }
237
233
  processResults(results, requestFilters, page) {
238
234
  // Because Filter is a type, attributes are always in the same order, so stringify won't be false for objects with same attributes
@@ -341,9 +337,9 @@ export class CatalogListComponent extends EventTracerComponent {
341
337
  }));
342
338
  }
343
339
  }
344
- CatalogListComponent.ɵfac = function CatalogListComponent_Factory(t) { return new (t || CatalogListComponent)(i0.ɵɵdirectiveInject(i1.RecipesService), i0.ɵɵdirectiveInject(i1.RecipeLikesService), i0.ɵɵdirectiveInject(i1.ArticlesService), i0.ɵɵdirectiveInject(i1.UserService), i0.ɵɵdirectiveInject(i1.ContextService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.AnalyticsService)); };
340
+ CatalogListComponent.ɵfac = function CatalogListComponent_Factory(t) { return new (t || CatalogListComponent)(i0.ɵɵdirectiveInject(i1.RecipesService), i0.ɵɵdirectiveInject(i1.RecipeLikesService), i0.ɵɵdirectiveInject(i1.ArticlesService), i0.ɵɵdirectiveInject(i1.UserService), i0.ɵɵdirectiveInject(i1.ContextService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i2.AnalyticsService)); };
345
341
  CatalogListComponent.ɵcmp = i0.ɵɵdefineComponent({ type: CatalogListComponent, selectors: [["ng-miam-catalog-list"]], viewQuery: function CatalogListComponent_Query(rf, ctx) { if (rf & 1) {
346
- i0.ɵɵviewQuery(CatalogRecipeCardComponent, true);
342
+ i0.ɵɵviewQuery(RecipeCardComponent, true);
347
343
  } if (rf & 2) {
348
344
  var _t;
349
345
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.recipeCards = _t);
@@ -388,7 +384,7 @@ CatalogListComponent.ɵcmp = i0.ɵɵdefineComponent({ type: CatalogListComponent
388
384
  i0.ɵɵtemplate(1, CatalogListComponent_div_1_Template, 7, 5, "div", 1);
389
385
  i0.ɵɵpipe(2, "async");
390
386
  i0.ɵɵtemplate(3, CatalogListComponent_ng_miam_card_create_recipe_3_Template, 1, 0, "ng-miam-card-create-recipe", 2);
391
- i0.ɵɵtemplate(4, CatalogListComponent_ng_miam_catalog_recipe_card_4_Template, 1, 7, "ng-miam-catalog-recipe-card", 3);
387
+ i0.ɵɵtemplate(4, CatalogListComponent_ng_miam_recipe_card_4_Template, 1, 7, "ng-miam-recipe-card", 3);
392
388
  i0.ɵɵtemplate(5, CatalogListComponent_ng_miam_catalog_article_card_5_Template, 1, 1, "ng-miam-catalog-article-card", 4);
393
389
  i0.ɵɵtemplate(6, CatalogListComponent_div_6_Template, 4, 0, "div", 5);
394
390
  i0.ɵɵpipe(7, "async");
@@ -405,7 +401,7 @@ CatalogListComponent.ɵcmp = i0.ɵɵdefineComponent({ type: CatalogListComponent
405
401
  i0.ɵɵproperty("ngForOf", ctx.articles);
406
402
  i0.ɵɵadvance(1);
407
403
  i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(7, 7, ctx.loading));
408
- } }, directives: [i2.NgIf, i2.NgForOf, i3.IconComponent, i4.CardCreateRecipeComponent, i5.CatalogRecipeCardComponent, i6.CatalogArticleCardComponent, i7.LoaderComponent], pipes: [i2.AsyncPipe], styles: [".miam-catalog-list__cards{display:flex;flex-flow:row wrap;justify-content:center;margin:calc(0px - var(--m-catalog-cards-spacing)/2);position:relative;right:0;top:0;width:calc(100% + var(--m-catalog-cards-spacing))}.miam-catalog-list__cards .miam-catalog-list__notFound{display:flex;flex-direction:column;justify-content:center;padding:36px 0 0;text-align:center;width:100%}.miam-catalog-list__cards .miam-catalog-list__notFound .miam-catalog-list__notFound__title1{color:var(--m-color-primary);font-size:24px;font-weight:700;margin-top:36px}.miam-catalog-list__cards .miam-catalog-list__notFound .miam-catalog-list__notFound__title1.filtering{display:flex;justify-content:center}.miam-catalog-list__cards .miam-catalog-list__notFound .miam-catalog-list__notFound__title1.filtering .miam-catalog-list__notFound__searching span{margin-left:5px}.miam-catalog-list__cards .miam-catalog-list__notFound .miam-catalog-list__notFound__title2{color:var(--m-color-grey-text);font-size:22px}.miam-catalog-list__cards .miam-catalog-list__loader{color:var(--m-color-grey-text);font-size:20px;font-weight:700;text-align:center;width:100%}.miam-catalog-list__cards .miam-catalog-list__loader .miam-loader{height:80px;margin-bottom:16px;margin-left:calc(50% - 40px);margin-top:80px;width:80px}.miam-catalog-list__cards #miam-catalog-list__anchor{bottom:0;height:600px;margin-top:-600px;position:relative}"], encapsulation: 2, changeDetection: 0 });
404
+ } }, directives: [i3.NgIf, i3.NgForOf, i4.IconComponent, i5.CardCreateRecipeComponent, i6.RecipeCardComponent, i7.CatalogArticleCardComponent, i8.LoaderComponent], pipes: [i3.AsyncPipe], styles: [".miam-catalog-list__cards{display:flex;flex-flow:row wrap;justify-content:center;margin:calc(0px - var(--m-catalog-cards-spacing)/2);position:relative;right:0;top:0;width:calc(100% + var(--m-catalog-cards-spacing))}.miam-catalog-list__cards .miam-catalog-list__notFound{display:flex;flex-direction:column;justify-content:center;padding:36px 0 0;text-align:center;width:100%}.miam-catalog-list__cards .miam-catalog-list__notFound .miam-catalog-list__notFound__title1{color:var(--m-color-primary);font-size:24px;font-weight:700;margin-top:36px}.miam-catalog-list__cards .miam-catalog-list__notFound .miam-catalog-list__notFound__title1.filtering{display:flex;justify-content:center}.miam-catalog-list__cards .miam-catalog-list__notFound .miam-catalog-list__notFound__title1.filtering .miam-catalog-list__notFound__searching span{margin-left:5px}.miam-catalog-list__cards .miam-catalog-list__notFound .miam-catalog-list__notFound__title2{color:var(--m-color-grey-text);font-size:22px}.miam-catalog-list__cards .miam-catalog-list__loader{color:var(--m-color-grey-text);font-size:20px;font-weight:700;text-align:center;width:100%}.miam-catalog-list__cards .miam-catalog-list__loader .miam-loader{height:80px;margin-bottom:16px;margin-left:calc(50% - 40px);margin-top:80px;width:80px}.miam-catalog-list__cards #miam-catalog-list__anchor{bottom:0;height:600px;margin-top:-600px;position:relative}"], encapsulation: 2, changeDetection: 0 });
409
405
  /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(CatalogListComponent, [{
410
406
  type: Component,
411
407
  args: [{
@@ -415,7 +411,7 @@ CatalogListComponent.ɵcmp = i0.ɵɵdefineComponent({ type: CatalogListComponent
415
411
  encapsulation: ViewEncapsulation.None,
416
412
  changeDetection: ChangeDetectionStrategy.OnPush
417
413
  }]
418
- }], function () { return [{ type: i1.RecipesService }, { type: i1.RecipeLikesService }, { type: i1.ArticlesService }, { type: i1.UserService }, { type: i1.ContextService }, { type: i0.ChangeDetectorRef }, { type: i1.AnalyticsService }]; }, { filters: [{
414
+ }], function () { return [{ type: i1.RecipesService }, { type: i1.RecipeLikesService }, { type: i1.ArticlesService }, { type: i1.UserService }, { type: i1.ContextService }, { type: i0.ChangeDetectorRef }, { type: i2.AnalyticsService }]; }, { filters: [{
419
415
  type: Input
420
416
  }], insertCreateCard: [{
421
417
  type: Input
@@ -443,6 +439,6 @@ CatalogListComponent.ɵcmp = i0.ɵɵdefineComponent({ type: CatalogListComponent
443
439
  type: Output
444
440
  }], recipeCards: [{
445
441
  type: ViewChildren,
446
- args: [CatalogRecipeCardComponent]
442
+ args: [RecipeCardComponent]
447
443
  }] }); })();
448
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIvYnVpbGRzL21pYW0vbmctbWlhbS1zZGsvcHJvamVjdHMvbmctbWlhbS9zcmMvIiwic291cmNlcyI6WyJsaWIvX3dlYi1jb21wb25lbnRzL3JlY2lwZS1jYXRhbG9nL2NhdGFsb2ctbGlzdC9jYXRhbG9nLWxpc3QuY29tcG9uZW50LnRzIiwibGliL193ZWItY29tcG9uZW50cy9yZWNpcGUtY2F0YWxvZy9jYXRhbG9nLWxpc3QvY2F0YWxvZy1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQXFCLE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUNwSCxZQUFZLEVBQUUsU0FBUyxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUUzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUU3RixPQUFPLEVBQ0wsZUFBZSxFQUNmLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLFdBQVcsRUFDWCxnQkFBZ0IsRUFFakIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakQsT0FBTyxFQUFnQixhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7OztJQ0d4RCwrQkFDRTtJQUFBLDRCQUFXO0lBQVgsZ0JBQVc7SUFBSSxpQkFBTztJQUN0Qiw0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UUFDNUMsaUJBQU07O1FBeERDLGVBQWtGO1FBQWxGLHlIQUFrRjtRQTZCM0QsZUFBdUQ7UUFBdkQsOEVBQXVEO1FBSWpGLGVBQXFDO1FBQXJDLDRDQUFxQztRQWFULGVBQWdDO1FBQWhDLHNDQUFnQztRQUd6RCxlQUF1QjtRQUF2Qix3REFBdUI7O2tERDlCakIsb0JBQW9CO2NBUGhDLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsc0JBQXNCO2dCQUNoQyxXQUFXLEVBQUUsK0JBQStCO2dCQUM1QyxTQUFTLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztnQkFDNUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7Z0JBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2hEO3NQQUVVLE9BQU87a0JBQWYsS0FBSztZQUNHLGdCQUFnQjtrQkFBeEIsS0FBSztZQUNHLFVBQVU7a0JBQWxCLEtBQUs7WUFDRyxjQUFjO2tCQUF0QixLQUFLO1lBQ0csY0FBYztrQkFBdEIsS0FBSztZQUNHLGFBQWE7a0JBQXJCLEtBQUs7WUFDRyxpQkFBaUI7a0JBQXpCLEtBQUs7WUFDRyxhQUFhO2tCQUFyQixLQUFLO1lBQ0csa0JBQWtCO2tCQUExQixLQUFLO1lBQ0ksaUJBQWlCO2tCQUExQixNQUFNO1lBQ0csYUFBYTtrQkFBdEIsTUFBTTtZQUNHLHFCQUFxQjtrQkFBOUIsTUFBTTtZQUNHLE9BQU87a0JBQWhCLE1BQU07WUFFbUMsV0FBVztrQkFBcEQsWUFBWTttQkFBQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5wdXQsXG4gIE9uQ2hhbmdlcywgVmlld0NoaWxkcmVuLCBRdWVyeUxpc3QsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvY3VtZW50Q29sbGVjdGlvbiB9IGZyb20gJ25neC1qc29uYXBpJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFdmVudFRyYWNlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL19jb21wb25lbnRzL2Fic3RyYWN0cy9ldmVudC10cmFjZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFydGljbGUsIFJlY2lwZSB9IGZyb20gJy4uLy4uLy4uL19tb2RlbHMnO1xuaW1wb3J0IHtcbiAgQXJ0aWNsZXNTZXJ2aWNlLFxuICBDb250ZXh0U2VydmljZSxcbiAgUmVjaXBlTGlrZXNTZXJ2aWNlLFxuICBSZWNpcGVzU2VydmljZSxcbiAgVXNlclNlcnZpY2UsXG4gIEFuYWx5dGljc1NlcnZpY2UsXG4gIEN1c3RvbVByb3BlcnRpZXNcbn0gZnJvbSAnLi4vLi4vLi4vX3NlcnZpY2VzJztcbmltcG9ydCB7IEljb24gfSBmcm9tICcuLi8uLi8uLi9fdHlwZXMvaWNvbi5lbnVtJztcbmltcG9ydCB7IFJlY2lwZUZpbHRlciwgUmVjaXBlRmlsdGVycyB9IGZyb20gJy4uLy4uLy4uL190eXBlcy9yZWNpcGUtZmlsdGVycyc7XG5pbXBvcnQgeyBDYXRhbG9nUmVjaXBlQ2FyZENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3JlY2lwZS1jYXJkcyc7XG5cbmNvbnN0IHJlY2lwZUluY2x1ZGVzID0gWydyZWNpcGUtcHJvdmlkZXInLCAnc3BvbnNvcnMnXTtcbmNvbnN0IHJlY2lwZVNwYXJzZUZpZWxkcyA9IHtcbiAgcmVjaXBlczogWyd0aXRsZScsICdudW1iZXItb2YtZ3Vlc3RzJywgJ21lZGlhLXVybCcsICd2aWRlby1pZCcsICdmaWxpZ3JhbmUtbG9nby11cmwnLCAnZGlmZmljdWx0eScsICdwcmVwYXJhdGlvbi10aW1lJywgJ2Nvb2tpbmctdGltZScsXG4gICAgJ3Jlc3RpbmctdGltZScsIC4uLnJlY2lwZUluY2x1ZGVzXSxcbiAgc3BvbnNvcnM6IFsnbG9nby11cmwnXSxcbiAgWydyZWNpcGUtcHJvdmlkZXInXTogWyduYW1lJ11cbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nLW1pYW0tY2F0YWxvZy1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhdGFsb2ctbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NhdGFsb2ctbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBDYXRhbG9nTGlzdENvbXBvbmVudCBleHRlbmRzIEV2ZW50VHJhY2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGZpbHRlcnM6IFJlY2lwZUZpbHRlcnM7XG4gIEBJbnB1dCgpIGluc2VydENyZWF0ZUNhcmQgPSBmYWxzZTtcbiAgQElucHV0KCkgcmFuZG9tTW9kZSA9IGZhbHNlO1xuICBASW5wdXQoKSBtb2RpZmllZEd1ZXN0czogbnVtYmVyID0gbnVsbDtcbiAgQElucHV0KCkgZGlzcGxheVByaWNpbmc6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGRpc3BsYXlHdWVzdHMgPSB0cnVlO1xuICBASW5wdXQoKSBoZWxwQnV0dG9uQWxsb3dlZCA9IHRydWU7XG4gIEBJbnB1dCgpIGFkZFJlY2lwZU1vZGUgPSBmYWxzZTtcbiAgQElucHV0KCkgZXhjbHVkZWRSZWNpcGVzSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBAT3V0cHV0KCkgYWRkVG9NZWFsc1BsYW5uZXIgPSBuZXcgRXZlbnRFbWl0dGVyPFJlY2lwZT4oKTtcbiAgQE91dHB1dCgpIGZpbHRlclJlbW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHJlY2lwZUFjdGlvblRyaWdnZXJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8e2FjdGlvbjogc3RyaW5nOyByZWNpcGU6IFJlY2lwZX0+KCk7XG4gIEBPdXRwdXQoKSBsb2FkaW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcblxuICBAVmlld0NoaWxkcmVuKENhdGFsb2dSZWNpcGVDYXJkQ29tcG9uZW50KSByZWNpcGVDYXJkcyE6IFF1ZXJ5TGlzdDxDYXRhbG9nUmVjaXBlQ2FyZENvbXBvbmVudD47XG5cbiAgY3VycmVudFJlY2lwZXM6IFJlY2lwZVtdID0gW107XG4gIGxhc3RQYWdlID0gMDtcbiAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW107XG4gIGljb24gPSBJY29uO1xuICBub01vcmVSZWNpcGVzID0gZmFsc2U7XG4gIG5vTW9yZUFydGljbGVzID0gZmFsc2U7XG4gIGJvdHRvbUFuY2hvcjogSFRNTEVsZW1lbnQ7XG4gIGZpbHRlcnNUb0Rpc3BsYXkgPSBbXTtcbiAgYXJ0aWNsZXM6IEFydGljbGVbXSA9IFtdO1xuXG4gIHByaXZhdGUgaW50ZXJzZWN0aW9uT2JzZXJ2ZXI6IEludGVyc2VjdGlvbk9ic2VydmVyO1xuICBwcml2YXRlIG11dGF0aW9uT2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWNpcGVzU2VydmljZTogUmVjaXBlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWNpcGVMaWtlc1NlcnZpY2U6IFJlY2lwZUxpa2VzU2VydmljZSxcbiAgICBwcml2YXRlIGFydGljbGVzU2VydmljZTogQXJ0aWNsZXNTZXJ2aWNlLFxuICAgIHB1YmxpYyB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb250ZXh0OiBDb250ZXh0U2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJvdGVjdGVkIGFuYWx5dGljc1NlcnZpY2U6IEFuYWx5dGljc1NlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoYW5hbHl0aWNzU2VydmljZSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zID0gW107XG4gICAgdGhpcy5jdXJyZW50UmVjaXBlcyA9IFtdO1xuICAgIHRoaXMuZmlsdGVycyA9IG5ldyBSZWNpcGVGaWx0ZXJzKHsgc2VhcmNoOiAnJyB9KTtcbiAgfVxuXG4gIGdldCBzb3J0KCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZmlsdGVycy5hZGRpdGlvbmFsRmlsdGVycz8uZmlsdGVycy5wYWNrYWdlcykge1xuICAgICAgcmV0dXJuICdwb3NpdGlvbic7XG4gICAgfVxuICAgIGlmICh0aGlzLmFkZFJlY2lwZU1vZGUpIHtcbiAgICAgIHJldHVybiAncHJpY2UnO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmJvdHRvbUFuY2hvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtaWFtLWNhdGFsb2ctbGlzdF9fYW5jaG9yJyk7XG4gICAgdGhpcy5pbml0TG9hZE9uU2Nyb2xsKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgY2hhbmdlc0tleXMgPSBPYmplY3Qua2V5cyhjaGFuZ2VzKTtcbiAgICAvLyBQcmV2ZW50cyByZWxvYWQgbG9vcCBpbiBhbmd1bGFyLCBiZWNhdXNlIG9yaWdpblRyYWNlIGFuZCBleGNsdWRlZFJlY2lwZXNJZHMgYXJlIHBhc3NlZCBhcyBtZXRob2RzIHNvIHRoZXkga2VlcCByZWZyZXNoaW5nIHRoZSBET01cbiAgICBpZiAoIShjaGFuZ2VzS2V5cy5pbmNsdWRlcygnb3JpZ2luVHJhY2UnKSAmJlxuICAgICAgKGNoYW5nZXNLZXlzLmxlbmd0aCA9PT0gMSB8fCAoY2hhbmdlc0tleXMubGVuZ3RoID09PSAyICYmIGNoYW5nZXNLZXlzLmluY2x1ZGVzKCdleGNsdWRlZFJlY2lwZXNJZHMnKSkpKSlcbiAgICB7XG4gICAgICB0aGlzLmZpbHRlcnNUb0Rpc3BsYXkgPSB0aGlzLmJ1aWxkRmlsdGVyc0FycmF5KCk7XG4gICAgICB0aGlzLnJlbG9hZFBhZ2UoKTtcbiAgICAgIGlmICh0aGlzLmZpbHRlcnMuc2VhcmNoKSB7XG4gICAgICAgIHRoaXMuc2VuZEV2ZW50KHRoaXMuYW5hbHl0aWNzU2VydmljZS5FVkVOVF9TRUFSQ0gpO1xuICAgICAgfVxuICAgICAgdGhpcy5wYWdldmlldygpO1xuICAgIH1cbiAgfVxuXG4gIGN1cnJlbnRQYXRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVycy5ldmVudFBhdGgoKTtcbiAgfVxuXG4gIGluaXRMb2FkT25TY3JvbGwoKTogdm9pZCB7XG4gICAgLy8gUmVjZWl2ZSBhbiBldmVudCBlYWNoIHRpbWUgdGhlIGFuY2hvciBlbnRlcnMvbGVhdmVzIHRoZSB2aWV3cG9ydFxuICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKCkgPT4geyB0aGlzLmF1dG9sb2FkQ29udGVudElmTmVjZXNzYXJ5KCk7IH0sIHt9KTtcbiAgICAvLyBSZWNlaXZlIGFuIGV2ZW50IGVhY2ggdGltZSBhbiBhdHRyaWJ1dGUvY2hpbGQgaXMgYWRkZWQvZGVsZXRlZC91cGRhdGVkIGluIHRoZSBwYXJlbnQgZGl2IG9mIHRoZSByZWNpcGVzXG4gICAgLy8gaS5lLiB3aWxsIGJlIHRyaWdnZXJlZCBlYWNoIHRpbWUgbmV3IHJlY2lwZXMgYXJlIGRpc3BsYXllZFxuICAgIHRoaXMubXV0YXRpb25PYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHsgdGhpcy5hdXRvbG9hZENvbnRlbnRJZk5lY2Vzc2FyeSgpOyB9KTtcblxuICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmJvdHRvbUFuY2hvcik7XG4gICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyLm9ic2VydmUoXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdtaWFtLWNhdGFsb2ctbGlzdF9fY2FyZHMnKVswXSxcbiAgICAgIHsgYXR0cmlidXRlczogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiBmYWxzZSB9IC8vIHN1YnRyZWUgZmFsc2UgPT4gY2hhbmdlcyBvbiBjaGlsZHJlbiB3b24ndCB0cmlnZ2VyIHRoZSBjYWxsYmFja1xuICAgICk7XG4gIH1cblxuICBhbmNob3JJc09uU2NyZWVuKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgY29uc3QgcmVjdCA9IHRoaXMuYm90dG9tQW5jaG9yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiAocmVjdC50b3AgPD0gdmlld3BvcnRIZWlnaHQgJiYgcmVjdC5ib3R0b20gPj0gMCk7XG4gIH1cblxuICBhdXRvbG9hZENvbnRlbnRJZk5lY2Vzc2FyeSgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmcucGlwZSh0YWtlKDEpLCBmaWx0ZXIobG9hZGluZyA9PiAhbG9hZGluZykpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuYW5jaG9ySXNPblNjcmVlbigpICYmIChcbiAgICAgICAgICAodGhpcy5jdXJyZW50UmVjaXBlcy5sZW5ndGggPiAwICYmICF0aGlzLm5vTW9yZVJlY2lwZXMpIHx8XG4gICAgICAgICAgKHRoaXMuYXJ0aWNsZXMubGVuZ3RoID4gMCAmJiAhdGhpcy5ub01vcmVBcnRpY2xlcylcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIC8vIEF0IGNvbXBvbmVudCBpbml0aWFsIGxvYWQsIDIgY2FsbHMgd2lsbCBiZSBtYWRlIGZvciB0aGUgZmlyc3QgdHdvIHJlY2lwZXMgcGFnZVxuICAgICAgICAvLyBUaGlzIGlzIHRvIGF2b2lkIG1ha2luZyB0aGUgbG9hZGVyIHNwaW4gdHdpY2VcbiAgICAgICAgdGhpcy5sb2FkTW9yZSh0aGlzLmxhc3RQYWdlID4gMik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBsb2FkTW9yZShsb2FkZXIgPSB0cnVlKTogdm9pZCB7XG4gICAgaWYgKGxvYWRlcikgeyB0aGlzLmxvYWRpbmcubmV4dCh0cnVlKTsgfVxuICAgIHRoaXMubGFzdFBhZ2UrKztcbiAgICB0aGlzLmxvYWRDb250ZW50KCk7XG4gIH1cblxuICBsb2FkUmVjaXBlc1BhZ2UocGFnZTogbnVtYmVyKTogT2JzZXJ2YWJsZTxSZWNpcGVbXT4ge1xuICAgIGlmICh0aGlzLm5vTW9yZVJlY2lwZXMpIHtcbiAgICAgIHJldHVybiBvZigoW10gYXMgUmVjaXBlW10pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZWNpcGVzU2VydmljZS5hZGRNYW5kYXRvcnlDb21wbGV0aW9uVG9GaWx0ZXIodGhpcy5maWx0ZXJzKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgLy8ga2VlcCBhIGNvcHkgb2YgdGhlIGZpbHRlcnMgd2hlbiByZXF1ZXN0IGlzIHNlbnQsIHNvIHdlIGNhbiBjaGVjayB0aGV5IGFyZSBzdGlsbCB0aGUgc2FtZSB3aGVuIGl0IGlzIHJlY2VpdmVkXG4gICAgICAgIC8vIEJlY2F1c2UgaWYgaXQncyBub3QgdGhlIGNhc2Ugd2UgaGF2ZSB0byBpZ25vcmUgdGhlIHJlc3VsdHNcbiAgICAgICAgY29uc3QgcmVxdWVzdEZpbHRlcnMgPSB0aGlzLmZpbHRlcnMuY29weSgpO1xuICAgICAgICBpZiAodGhpcy5jb250ZXh0LmRpc3BsYXlJbmdyZWRpZW50UGljdHVyZXNPblJlY2lwZUNhcmRzICYmICFyZWNpcGVJbmNsdWRlcy5pbmNsdWRlcygnaW5ncmVkaWVudHMnKSkge1xuICAgICAgICAgIHJlY2lwZUluY2x1ZGVzLnB1c2goJ2luZ3JlZGllbnRzJyk7XG4gICAgICAgICAgcmVjaXBlU3BhcnNlRmllbGRzLnJlY2lwZXMucHVzaCgnaW5ncmVkaWVudHMnKTtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgcmVjaXBlU3BhcnNlRmllbGRzLFxuICAgICAgICAgICAgeyBpbmdyZWRpZW50czogWyduYW1lJywgJ3F1YW50aXR5JywgJ3VuaXQnLCAnYWN0aXZlJywgJ2ZvcmNlZC1lYW5zJywgJ3BpY3R1cmUtdXJsJywgJ3Bvc2l0aW9uJ10gfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucmVjaXBlc1NlcnZpY2UuZmlsdGVyKFxuICAgICAgICAgIHJlcXVlc3RGaWx0ZXJzLFxuICAgICAgICAgIHsgc2l6ZTogMjAsIG51bWJlcjogcGFnZSB9LFxuICAgICAgICAgIHJlY2lwZUluY2x1ZGVzLFxuICAgICAgICAgIHJlY2lwZVNwYXJzZUZpZWxkcyxcbiAgICAgICAgICB0aGlzLm1vZGlmaWVkR3Vlc3RzLFxuICAgICAgICAgIHRoaXMucmFuZG9tTW9kZSxcbiAgICAgICAgICB0aGlzLnNvcnRcbiAgICAgICAgKS5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgocmVzdWx0OiBSZWNpcGVbXSkgPT4gdGhpcy5wcm9jZXNzUmVzdWx0cyhyZXN1bHQsIHJlcXVlc3RGaWx0ZXJzLCBwYWdlKSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByb2Nlc3NSZXN1bHRzKHJlc3VsdHM6IFJlY2lwZVtdLCByZXF1ZXN0RmlsdGVyczogUmVjaXBlRmlsdGVycywgcGFnZTogbnVtYmVyKTogT2JzZXJ2YWJsZTxSZWNpcGVbXT4ge1xuICAgIC8vIEJlY2F1c2UgRmlsdGVyIGlzIGEgdHlwZSwgYXR0cmlidXRlcyBhcmUgYWx3YXlzIGluIHRoZSBzYW1lIG9yZGVyLCBzbyBzdHJpbmdpZnkgd29uJ3QgYmUgZmFsc2UgZm9yIG9iamVjdHMgd2l0aCBzYW1lIGF0dHJpYnV0ZXNcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkocmVxdWVzdEZpbHRlcnMpID09PSBKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlcnMpKSB7XG4gICAgICBpZiAodGhpcy5leGNsdWRlZFJlY2lwZXNJZHMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5maWx0ZXIocmVjaXBlID0+ICF0aGlzLmV4Y2x1ZGVkUmVjaXBlc0lkcy5pbmNsdWRlcyhyZWNpcGUuaWQpKTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIHlvdSBzcGFtIGNsaWNrIG9uIGZpbHRlcnMsIG11bHRpcGxlIHJlcXVlc3RzIHdpdGggcGFnZSA9PSAxIGNvdWxkIGJlIHNlbnQgZm9yIHRoZSBzYW1lIGZpbHRlcnMgLT4gb25seSBrZWVwIHRoZSBsYXN0IHJlc3VsdFxuICAgICAgdGhpcy5jdXJyZW50UmVjaXBlcyA9IHBhZ2UgPT09IDEgPyByZXN1bHRzIDogWy4uLnRoaXMuY3VycmVudFJlY2lwZXMsIC4uLnJlc3VsdHNdO1xuICAgICAgdGhpcy5jdXJyZW50UmVjaXBlcy5mb3JFYWNoKChyOiBSZWNpcGUpID0+IHtcbiAgICAgICAgaWYgKHRoaXMubW9kaWZpZWRHdWVzdHMgJiYgdGhpcy5tb2RpZmllZEd1ZXN0cyA+IDApIHtcbiAgICAgICAgICByLm1vZGlmaWVkR3Vlc3RzID0gdGhpcy5tb2RpZmllZEd1ZXN0cztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLm5vTW9yZVJlY2lwZXMgPSByZXN1bHRzLmxlbmd0aCA9PT0gMDtcbiAgICAgIHJldHVybiBvZih0aGlzLmN1cnJlbnRSZWNpcGVzKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5kZWJ1ZyhgRmlsdGVyaW5nIGFib3J0ZWQgOiAke0pTT04uc3RyaW5naWZ5KHJlcXVlc3RGaWx0ZXJzKX0gYW5kICR7SlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXJzKX0gYXJlIGRpZmZlcmVudGApO1xuICAgICAgcmV0dXJuIG9mKChbXSBhcyBSZWNpcGVbXSkpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUZpbHRlcihmaWx0ZXJOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlclJlbW92ZWQuZW1pdChmaWx0ZXJOYW1lKTtcbiAgfVxuXG4gIGJ1aWxkRmlsdGVyc0FycmF5KCk6IHN0cmluZ1tdIHtcbiAgICBsZXQgZmlsdGVyTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgZmlsdGVyTmFtZXMgPSBbLi4uZmlsdGVyTmFtZXMsIC4uLnRoaXMuZ2V0U2VsZWN0ZWRGaWx0ZXJzKHRoaXMuZmlsdGVycy5jb3N0KSwgLi4udGhpcy5nZXRTZWxlY3RlZEZpbHRlcnModGhpcy5maWx0ZXJzLmRpZmZpY3VsdHkpLFxuICAgICAgLi4udGhpcy5nZXRTZWxlY3RlZEZpbHRlcnModGhpcy5maWx0ZXJzLnRpbWUpXTtcbiAgICBpZiAodGhpcy5maWx0ZXJzLmFkZGl0aW9uYWxGaWx0ZXJzICYmIHRoaXMuZmlsdGVycy5hZGRpdGlvbmFsRmlsdGVycy50aXRsZSAhPT0gJycpIHtcbiAgICAgIGZpbHRlck5hbWVzID0gW3RoaXMuZmlsdGVycy5hZGRpdGlvbmFsRmlsdGVycy50aXRsZV0uY29uY2F0KGZpbHRlck5hbWVzKTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlck5hbWVzO1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRGaWx0ZXJzKGZpbHRlcnNBcnJheTogUmVjaXBlRmlsdGVyW10pOiBzdHJpbmdbXSB7XG4gICAgaWYgKCFmaWx0ZXJzQXJyYXkpIHsgcmV0dXJuIFtdOyB9XG5cbiAgICByZXR1cm4gZmlsdGVyc0FycmF5LmZpbHRlcihlbCA9PiBlbC52YWx1ZSkubWFwKGVsID0+IGVsLnRleHQpO1xuICB9XG5cbiAgcmVsb2FkUGFnZSgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmcubmV4dCh0cnVlKTtcbiAgICB0aGlzLmxhc3RQYWdlID0gMTtcbiAgICB0aGlzLm5vTW9yZVJlY2lwZXMgPSBmYWxzZTtcbiAgICB0aGlzLm5vTW9yZUFydGljbGVzID0gZmFsc2U7XG4gICAgdGhpcy5jdXJyZW50UmVjaXBlcyA9IFtdO1xuICAgIHRoaXMuYXJ0aWNsZXMgPSBbXTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5sb2FkQ29udGVudCgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3ViID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcbiAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgaXNTZWFyY2hpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVycy5zZWFyY2ggJiYgdGhpcy5maWx0ZXJzLnNlYXJjaCAhPT0gJyc7XG4gIH1cblxuICBpc0ZpZWxkRW1wdHkocmVjaXBlRmlsdGVyOiBSZWNpcGVGaWx0ZXJbXSk6IGJvb2xlYW4ge1xuICAgIGlmICghcmVjaXBlRmlsdGVyKSB7IHJldHVybiB0cnVlOyB9XG5cbiAgICBmb3IgKGNvbnN0IGYgb2YgcmVjaXBlRmlsdGVyKSB7XG4gICAgICBpZiAoZi52YWx1ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaXNGaWx0ZXJpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNTZWFyY2hpbmcoKSB8fFxuICAgICAgIXRoaXMuaXNGaWVsZEVtcHR5KHRoaXMuZmlsdGVycy5kaWZmaWN1bHR5KSB8fFxuICAgICAgIXRoaXMuaXNGaWVsZEVtcHR5KHRoaXMuZmlsdGVycy5jb3N0KSB8fFxuICAgICAgIXRoaXMuaXNGaWVsZEVtcHR5KHRoaXMuZmlsdGVycy50aW1lKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9wcygpOiBDdXN0b21Qcm9wZXJ0aWVzIHtcbiAgICBpZiAoIXRoaXMuZmlsdGVycz8uc2VhcmNoKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHJldHVybiB7IHNlYXJjaF90ZXJtOiB0aGlzLmZpbHRlcnM/LnNlYXJjaCB9O1xuICB9XG5cbiAgLy8gQXJ0aWNsZXMgd2lsbCBiZSBsb2FkZWQgb25seSBpZiBhIGZpbHRlciBpcyBhcHBsaWVkIG9uIHBhY2thZ2VzXG4gIC8vIFRoaXMgaXMgdG8gYXZvaWQgYXJ0aWNsZXMgYmVpbmcgbG9hZGVkIGluIHNwZWNpYWwgcGFnZXMgd2hlcmUgb25seSBmaWx0ZXJzIG9uIHJlY2lwZXMgYXJlIHBhc3NlZCAoZmF2b3JpdGVzLCBzdWdnZXN0ZWQsIGV0Yy4pXG4gIC8vID0+IFBhY2thZ2VzIG1peGluZyBhcnRpY2xlcyB3aXRoIHJlY2lwZXMgaXMgbm90IHN1cHBvcnRlZCB5ZXRcbiAgcHJpdmF0ZSBsb2FkQXJ0aWNsZXMocGFnZTogbnVtYmVyKTogT2JzZXJ2YWJsZTxBcnRpY2xlW10+IHtcbiAgICBpZiAoIXRoaXMuY29udGV4dC5hcnRpY2xlc0luQ2F0YWxvZ0VuYWJsZWQgfHwgdGhpcy5ub01vcmVBcnRpY2xlcyB8fCAhdGhpcy5maWx0ZXJzLmFkZGl0aW9uYWxGaWx0ZXJzPy5maWx0ZXJzLnBhY2thZ2VzKSB7XG4gICAgICByZXR1cm4gb2YoKFtdIGFzIEFydGljbGVbXSkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFydGljbGVzU2VydmljZS5hbGwoe1xuICAgICAgcmVtb3RlZmlsdGVyOiB7XG4gICAgICAgIHBhY2thZ2VzOiB0aGlzLmZpbHRlcnMuYWRkaXRpb25hbEZpbHRlcnMuZmlsdGVycy5wYWNrYWdlcyxcbiAgICAgICAgLi4udGhpcy5maWx0ZXJzLnNlYXJjaCA/IHsgc2VhcmNoOiB0aGlzLmZpbHRlcnMuc2VhcmNoIH0gOiB7fVxuICAgICAgfSxcbiAgICAgIHBhZ2U6IHsgc2l6ZTogMjAsIG51bWJlcjogcGFnZSB9LFxuICAgICAgc29ydDogWyctZGF0ZSddIH0pLnBpcGUoXG4gICAgICBtYXAoKHJlc3VsdDogRG9jdW1lbnRDb2xsZWN0aW9uPEFydGljbGU+KSA9PiB7XG4gICAgICAgIHRoaXMuYXJ0aWNsZXMgPSBwYWdlID09PSAxID8gcmVzdWx0LmRhdGEgOiBbLi4udGhpcy5hcnRpY2xlcywgLi4ucmVzdWx0LmRhdGFdO1xuICAgICAgICB0aGlzLm5vTW9yZUFydGljbGVzID0gcmVzdWx0LmRhdGEubGVuZ3RoID09PSAwO1xuICAgICAgICByZXR1cm4gdGhpcy5hcnRpY2xlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZENvbnRlbnQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICBmb3JrSm9pbihbdGhpcy5sb2FkUmVjaXBlc1BhZ2UodGhpcy5sYXN0UGFnZSksIHRoaXMubG9hZEFydGljbGVzKHRoaXMubGFzdFBhZ2UpXSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nLm5leHQoZmFsc2UpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtaWFtLWNhdGFsb2ctbGlzdF9fY2FyZHNcIj5cblxuICA8IS0tIDxkaXYgKm5nSWY9XCJmaWx0ZXJzVG9EaXNwbGF5Lmxlbmd0aCA+IDBcIiBjbGFzcz1cIm1pYW0tY2F0YWxvZy1saXN0X19maWx0ZXJzXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1pYW0tY2F0YWxvZy1saXN0X19maWx0ZXJfX3RpdGxlXCI+Vm9zIGZpbHRyZXM8L2Rpdj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgZmlsdGVyc1RvRGlzcGxheVwiIGNsYXNzPVwibWlhbS1jYXRhbG9nLWxpc3RfX2ZpbHRlclwiPlxuICAgICAgPHNwYW4+e3tmaWx0ZXJ9fTwvc3Bhbj5cbiAgICAgIDxuZy1taWFtLWljb24gXG4gICAgICAgIGNsYXNzPVwibWlhbS1jYXRhbG9nLWxpc3RfX2ZpbHRlcl9faWNvblwiIFxuICAgICAgICAoY2xpY2spPVwicmVtb3ZlRmlsdGVyKGZpbHRlcilcIiBcbiAgICAgICAgW2ljb25OYW1lXT1cImljb24uQ2xlYXJcIlxuICAgICAgICBwcmltYXJ5Q29sb3I9XCJ2YXIoLS1tLWNvbG9yLXByaW1hcnkpXCI+XG4gICAgICA8L25nLW1pYW0taWNvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+IC0tPlxuXG4gIDwhLS0gTm8gcmVzdWx0cyAtLT5cbiAgPGRpdiAqbmdJZj1cIiEobG9hZGluZyB8IGFzeW5jKSAmJiBjdXJyZW50UmVjaXBlcy5sZW5ndGggPT09IDAgJiYgYXJ0aWNsZXMubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJtaWFtLWNhdGFsb2ctbGlzdF9fbm90Rm91bmRcIj5cbiAgICA8bmctbWlhbS1pY29uIGNsYXNzPVwibWlhbS1jYXRhbG9nLWxpc3RfX25vdEZvdW5kX19pY29uXCIgW3dpZHRoXT1cIjI3OVwiIFtoZWlnaHRdPVwiMjQzXCIgW2ljb25OYW1lXT1cImljb24uTm9SZWNpcGVGb3VuZFwiPjwvbmctbWlhbS1pY29uPlxuICAgIDxkaXYgKm5nSWY9XCJpc0ZpbHRlcmluZygpIGVsc2Ugbm90RmlsdGVyaW5nXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWlhbS1jYXRhbG9nLWxpc3RfX25vdEZvdW5kX190aXRsZTEgZmlsdGVyaW5nXCI+XG4gICAgICAgIDxzcGFuIGkxOG4+RMOpc29sw6ksIGF1Y3VuZSBwcm9wb3NpdGlvbiB0cm91dsOpZTwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1pYW0tY2F0YWxvZy1saXN0X19ub3RGb3VuZF9fc2VhcmNoaW5nXCIgKm5nSWY9XCJpc1NlYXJjaGluZygpXCI+XG4gICAgICAgICAgPHNwYW4gaTE4bj5wb3VyPC9zcGFuPlxuICAgICAgICAgIDxzcGFuPlwie3tmaWx0ZXJzLnNlYXJjaH19XCI8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibWlhbS1jYXRhbG9nLWxpc3RfX25vdEZvdW5kX190aXRsZTJcIj5cbiAgICAgICAgPHNwYW4gaTE4bj5WZXVpbGxleiBtb2RpZmllciBsZXMgdGVybWVzIGRlIHZvdHJlIHJlY2hlcmNoZSBvdSByw6lnbGVyIGxlcyBmaWx0cmVzPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPG5nLXRlbXBsYXRlICNub3RGaWx0ZXJpbmc+XG4gICAgICA8ZGl2ICpuZ0lmPVwidGhpcy51c2VyU2VydmljZS5pc0xvZ2dlZCQgfCBhc3luYyBlbHNlIG5vdExvZ2dlZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWlhbS1jYXRhbG9nLWxpc3RfX25vdEZvdW5kX190aXRsZTEgbm90LWZpbHRlcmluZ1wiPlxuICAgICAgICAgIDxzcGFuIGkxOG4+RMOpc29sw6ksIHZvdXMgbidhdmV6IHBhcyBlbmNvcmUgZCdpZMOpZXMgcmVwYXMgc2F1dmVnYXJkw6llczwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjbm90TG9nZ2VkPlxuICAgICAgPGRpdiBjbGFzcz1cIm1pYW0tY2F0YWxvZy1saXN0X19ub3RGb3VuZF9fdGl0bGUxIG5vdC1sb2dnZWRcIj5cbiAgICAgICAgPHNwYW4gaTE4bj5Ew6lzb2zDqSwgdm91cyBkZXZleiDDqnRyZSBjb25uZWN0w6kgcG91ciBhY2PDqWRlciBhdSBjb250ZW51IGRlIGNldHRlIHBhZ2UuPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG5cbiAgPCEtLSBJbnNlcnQgYSBjYXJkIHRvIGNyZWF0ZSBhIHJlY2lwZSAtLT5cbiAgPG5nLW1pYW0tY2FyZC1jcmVhdGUtcmVjaXBlICpuZ0lmPVwiaW5zZXJ0Q3JlYXRlQ2FyZCAmJiBjdXJyZW50UmVjaXBlcy5sZW5ndGggIT09IDBcIiAoY2xpY2tlZCk9XCJyZWNpcGVBY3Rpb25UcmlnZ2VyZWQuZW1pdCh7YWN0aW9uOiAnQ1JFQVRFJywgcmVjaXBlOiBudWxsfSlcIiBjbGFzcz1cIm1pYW0tY2F0YWxvZy1saXN0X19jYXJkXCI+PC9uZy1taWFtLWNhcmQtY3JlYXRlLXJlY2lwZT5cbiAgXG4gIDwhLS0gQ2xhc3NpY2FsIHJlY2lwZSBjYXJkIC0tPlxuICA8bmctbWlhbS1jYXRhbG9nLXJlY2lwZS1jYXJkXG4gICAgKm5nRm9yPVwibGV0IHJlY2lwZSBvZiBjdXJyZW50UmVjaXBlc1wiXG4gICAgW3JlY2lwZV09J3JlY2lwZSdcbiAgICBbb3JpZ2luVHJhY2VdPVwiZXZlbnRUcmFjZSgpXCJcbiAgICBbZGlzcGxheVByaWNpbmddPVwiZGlzcGxheVByaWNpbmdcIlxuICAgIFtwcmV2aWV3QWxsb3dlZF09XCIhYWRkUmVjaXBlTW9kZVwiXG4gICAgW2FkZFJlY2lwZU1vZGVdPVwiYWRkUmVjaXBlTW9kZVwiXG4gICAgW2Rpc3BsYXlHdWVzdHNdPVwiZGlzcGxheUd1ZXN0c1wiXG4gICAgW2hlbHBCdXR0b25BbGxvd2VkXT1cImhlbHBCdXR0b25BbGxvd2VkXCJcbiAgICAoYWRkVG9NZWFsc1BsYW5uZXIpPVwiYWRkVG9NZWFsc1BsYW5uZXIuZW1pdCgkZXZlbnQpXCJcbiAgICAoYWN0aW9uVHJpZ2dlcmVkKT1cInJlY2lwZUFjdGlvblRyaWdnZXJlZC5lbWl0KHthY3Rpb246ICRldmVudCwgcmVjaXBlOiByZWNpcGV9KVwiXG4gID48L25nLW1pYW0tY2F0YWxvZy1yZWNpcGUtY2FyZD5cbiAgXG4gIDwhLS0gQXJ0aWNsZSBjYXJkIC0tPlxuICA8bmctbWlhbS1jYXRhbG9nLWFydGljbGUtY2FyZCAqbmdGb3I9XCJsZXQgYXJ0aWNsZSBvZiBhcnRpY2xlc1wiIFthcnRpY2xlXT1cImFydGljbGVcIj48L25nLW1pYW0tY2F0YWxvZy1hcnRpY2xlLWNhcmQ+XG5cbiAgPCEtLSBMb2FkZXIgLS0+XG4gIDxkaXYgKm5nSWY9XCJsb2FkaW5nIHwgYXN5bmNcIiBjbGFzcz1cIm1pYW0tY2F0YWxvZy1saXN0X19sb2FkZXJcIj5cbiAgICA8bmctbWlhbS1sb2FkZXI+PC9uZy1taWFtLWxvYWRlcj5cbiAgICA8ZGl2IGkxOG4+XG4gICAgICBDaGFyZ2VtZW50IGRlcyByw6lzdWx0YXRzLi4uXG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGlkPVwibWlhbS1jYXRhbG9nLWxpc3RfX2FuY2hvclwiPjwvZGl2PlxuPC9kaXY+Il19
444
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIvYnVpbGRzL21pYW0vbmctbWlhbS1zZGsvcHJvamVjdHMvbmctbWlhbS9zcmMvIiwic291cmNlcyI6WyJsaWIvX3dlYi1jb21wb25lbnRzL3JlY2lwZS1jYXRhbG9nL2NhdGFsb2ctbGlzdC9jYXRhbG9nLWxpc3QuY29tcG9uZW50LnRzIiwibGliL193ZWItY29tcG9uZW50cy9yZWNpcGUtY2F0YWxvZy9jYXRhbG9nLWxpc3QvY2F0YWxvZy1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQXFCLE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUNwSCxZQUFZLEVBQUUsU0FBUyxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUUzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUc3RixPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFeEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pELE9BQU8sRUFBZ0IsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7Ozs7O0lDUWpELCtCQUNFO0lBQUEsNEJB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QjtrQkFBeEIsS0FBSztZQUNHLFVBQVU7a0JBQWxCLEtBQUs7WUFDRyxjQUFjO2tCQUF0QixLQUFLO1lBQ0csY0FBYztrQkFBdEIsS0FBSztZQUNHLGFBQWE7a0JBQXJCLEtBQUs7WUFDRyxpQkFBaUI7a0JBQXpCLEtBQUs7WUFDRyxhQUFhO2tCQUFyQixLQUFLO1lBQ0csa0JBQWtCO2tCQUExQixLQUFLO1lBQ0ksaUJBQWlCO2tCQUExQixNQUFNO1lBQ0csYUFBYTtrQkFBdEIsTUFBTTtZQUNHLHFCQUFxQjtrQkFBOUIsTUFBTTtZQUNHLE9BQU87a0JBQWhCLE1BQU07WUFFNEIsV0FBVztrQkFBN0MsWUFBWTttQkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5wdXQsXG4gIE9uQ2hhbmdlcywgVmlld0NoaWxkcmVuLCBRdWVyeUxpc3QsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvY3VtZW50Q29sbGVjdGlvbiB9IGZyb20gJ25neC1qc29uYXBpJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFdmVudFRyYWNlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL19jb21wb25lbnRzL2Fic3RyYWN0cy9ldmVudC10cmFjZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFydGljbGUgfSBmcm9tICcuLi8uLi8uLi9fbW9kZWxzJztcbmltcG9ydCB7IFJlY2lwZSB9IGZyb20gJy4uLy4uLy4uL19tb2RlbHMvcmVjaXBlJztcbmltcG9ydCB7IEFydGljbGVzU2VydmljZSwgQ29udGV4dFNlcnZpY2UsIFJlY2lwZUxpa2VzU2VydmljZSwgUmVjaXBlc1NlcnZpY2UsIFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX3NlcnZpY2VzJztcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9fc2VydmljZXMvYW5hbHl0aWNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tUHJvcGVydGllcyB9IGZyb20gJy4uLy4uLy4uL190eXBlcy9ldmVudC10cmFjZSc7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSAnLi4vLi4vLi4vX3R5cGVzL2ljb24uZW51bSc7XG5pbXBvcnQgeyBSZWNpcGVGaWx0ZXIsIFJlY2lwZUZpbHRlcnMgfSBmcm9tICcuLi8uLi8uLi9fdHlwZXMvcmVjaXBlLWZpbHRlcnMnO1xuaW1wb3J0IHsgUmVjaXBlQ2FyZENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3JlY2lwZS1jYXJkcyc7XG5cbmNvbnN0IHJlY2lwZUluY2x1ZGVzID0gWydyZWNpcGUtcHJvdmlkZXInLCAnc3BvbnNvcnMnXTtcbmNvbnN0IHJlY2lwZVNwYXJzZUZpZWxkcyA9IHtcbiAgcmVjaXBlczogWyd0aXRsZScsICdudW1iZXItb2YtZ3Vlc3RzJywgJ21lZGlhLXVybCcsICd2aWRlby1pZCcsICdmaWxpZ3JhbmUtbG9nby11cmwnLCAnZGlmZmljdWx0eScsICdwcmVwYXJhdGlvbi10aW1lJywgJ2Nvb2tpbmctdGltZScsXG4gICAgJ3Jlc3RpbmctdGltZScsIC4uLnJlY2lwZUluY2x1ZGVzXSxcbiAgc3BvbnNvcnM6IFsnbG9nby11cmwnXSxcbiAgWydyZWNpcGUtcHJvdmlkZXInXTogWyduYW1lJ11cbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nLW1pYW0tY2F0YWxvZy1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhdGFsb2ctbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NhdGFsb2ctbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBDYXRhbG9nTGlzdENvbXBvbmVudCBleHRlbmRzIEV2ZW50VHJhY2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGZpbHRlcnM6IFJlY2lwZUZpbHRlcnM7XG4gIEBJbnB1dCgpIGluc2VydENyZWF0ZUNhcmQgPSBmYWxzZTtcbiAgQElucHV0KCkgcmFuZG9tTW9kZSA9IGZhbHNlO1xuICBASW5wdXQoKSBtb2RpZmllZEd1ZXN0czogbnVtYmVyID0gbnVsbDtcbiAgQElucHV0KCkgZGlzcGxheVByaWNpbmcgPSB0cnVlO1xuICBASW5wdXQoKSBkaXNwbGF5R3Vlc3RzID0gdHJ1ZTtcbiAgQElucHV0KCkgaGVscEJ1dHRvbkFsbG93ZWQgPSB0cnVlO1xuICBASW5wdXQoKSBhZGRSZWNpcGVNb2RlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGV4Y2x1ZGVkUmVjaXBlc0lkczogc3RyaW5nW10gPSBbXTtcbiAgQE91dHB1dCgpIGFkZFRvTWVhbHNQbGFubmVyID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNpcGU+KCk7XG4gIEBPdXRwdXQoKSBmaWx0ZXJSZW1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSByZWNpcGVBY3Rpb25UcmlnZ2VyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHthY3Rpb246IHN0cmluZzsgcmVjaXBlOiBSZWNpcGV9PigpO1xuICBAT3V0cHV0KCkgbG9hZGluZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgQFZpZXdDaGlsZHJlbihSZWNpcGVDYXJkQ29tcG9uZW50KSByZWNpcGVDYXJkcyE6IFF1ZXJ5TGlzdDxSZWNpcGVDYXJkQ29tcG9uZW50PjtcblxuICBjdXJyZW50UmVjaXBlczogUmVjaXBlW10gPSBbXTtcbiAgbGFzdFBhZ2UgPSAwO1xuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXTtcbiAgaWNvbiA9IEljb247XG4gIG5vTW9yZVJlY2lwZXMgPSBmYWxzZTtcbiAgbm9Nb3JlQXJ0aWNsZXMgPSBmYWxzZTtcbiAgYm90dG9tQW5jaG9yOiBIVE1MRWxlbWVudDtcbiAgZmlsdGVyc1RvRGlzcGxheSA9IFtdO1xuICBhcnRpY2xlczogQXJ0aWNsZVtdID0gW107XG5cbiAgcHJpdmF0ZSBpbnRlcnNlY3Rpb25PYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG4gIHByaXZhdGUgbXV0YXRpb25PYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlY2lwZXNTZXJ2aWNlOiBSZWNpcGVzU2VydmljZSxcbiAgICBwcml2YXRlIHJlY2lwZUxpa2VzU2VydmljZTogUmVjaXBlTGlrZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXJ0aWNsZXNTZXJ2aWNlOiBBcnRpY2xlc1NlcnZpY2UsXG4gICAgcHVibGljIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIGNvbnRleHQ6IENvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcm90ZWN0ZWQgYW5hbHl0aWNzU2VydmljZTogQW5hbHl0aWNzU2VydmljZVxuICApIHtcbiAgICBzdXBlcihhbmFseXRpY3NTZXJ2aWNlKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICB0aGlzLmN1cnJlbnRSZWNpcGVzID0gW107XG4gICAgdGhpcy5maWx0ZXJzID0gbmV3IFJlY2lwZUZpbHRlcnMoeyBzZWFyY2g6ICcnIH0pO1xuICB9XG5cbiAgZ2V0IHNvcnQoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5maWx0ZXJzLmFkZGl0aW9uYWxGaWx0ZXJzPy5maWx0ZXJzLnBhY2thZ2VzKSB7XG4gICAgICByZXR1cm4gJ3Bvc2l0aW9uJztcbiAgICB9XG4gICAgaWYgKHRoaXMuYWRkUmVjaXBlTW9kZSkge1xuICAgICAgcmV0dXJuICdwcmljZSc7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYm90dG9tQW5jaG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21pYW0tY2F0YWxvZy1saXN0X19hbmNob3InKTtcbiAgICB0aGlzLmluaXRMb2FkT25TY3JvbGwoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCBjaGFuZ2VzS2V5cyA9IE9iamVjdC5rZXlzKGNoYW5nZXMpO1xuICAgIC8vIFByZXZlbnRzIHJlbG9hZCBsb29wIGluIGFuZ3VsYXIsIGJlY2F1c2Ugb3JpZ2luVHJhY2UgYW5kIGV4Y2x1ZGVkUmVjaXBlc0lkcyBhcmUgcGFzc2VkIGFzIG1ldGhvZHMgc28gdGhleSBrZWVwIHJlZnJlc2hpbmcgdGhlIERPTVxuICAgIGlmICghKGNoYW5nZXNLZXlzLmluY2x1ZGVzKCdvcmlnaW5UcmFjZScpICYmXG4gICAgICAoY2hhbmdlc0tleXMubGVuZ3RoID09PSAxIHx8IChjaGFuZ2VzS2V5cy5sZW5ndGggPT09IDIgJiYgY2hhbmdlc0tleXMuaW5jbHVkZXMoJ2V4Y2x1ZGVkUmVjaXBlc0lkcycpKSkpKVxuICAgIHtcbiAgICAgIHRoaXMuZmlsdGVyc1RvRGlzcGxheSA9IHRoaXMuYnVpbGRGaWx0ZXJzQXJyYXkoKTtcbiAgICAgIHRoaXMucmVsb2FkUGFnZSgpO1xuICAgICAgaWYgKHRoaXMuZmlsdGVycy5zZWFyY2gpIHtcbiAgICAgICAgdGhpcy5zZW5kRXZlbnQodGhpcy5hbmFseXRpY3NTZXJ2aWNlLkVWRU5UX1NFQVJDSCk7XG4gICAgICB9XG4gICAgICB0aGlzLnBhZ2V2aWV3KCk7XG4gICAgfVxuICB9XG5cbiAgY3VycmVudFBhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJzLmV2ZW50UGF0aCgpO1xuICB9XG5cbiAgaW5pdExvYWRPblNjcm9sbCgpOiB2b2lkIHtcbiAgICAvLyBSZWNlaXZlIGFuIGV2ZW50IGVhY2ggdGltZSB0aGUgYW5jaG9yIGVudGVycy9sZWF2ZXMgdGhlIHZpZXdwb3J0XG4gICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoKSA9PiB7IHRoaXMuYXV0b2xvYWRDb250ZW50SWZOZWNlc3NhcnkoKTsgfSwge30pO1xuICAgIC8vIFJlY2VpdmUgYW4gZXZlbnQgZWFjaCB0aW1lIGFuIGF0dHJpYnV0ZS9jaGlsZCBpcyBhZGRlZC9kZWxldGVkL3VwZGF0ZWQgaW4gdGhlIHBhcmVudCBkaXYgb2YgdGhlIHJlY2lwZXNcbiAgICAvLyBpLmUuIHdpbGwgYmUgdHJpZ2dlcmVkIGVhY2ggdGltZSBuZXcgcmVjaXBlcyBhcmUgZGlzcGxheWVkXG4gICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4geyB0aGlzLmF1dG9sb2FkQ29udGVudElmTmVjZXNzYXJ5KCk7IH0pO1xuXG4gICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKHRoaXMuYm90dG9tQW5jaG9yKTtcbiAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZShcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ21pYW0tY2F0YWxvZy1saXN0X19jYXJkcycpWzBdLFxuICAgICAgeyBhdHRyaWJ1dGVzOiB0cnVlLCBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IGZhbHNlIH0gLy8gc3VidHJlZSBmYWxzZSA9PiBjaGFuZ2VzIG9uIGNoaWxkcmVuIHdvbid0IHRyaWdnZXIgdGhlIGNhbGxiYWNrXG4gICAgKTtcbiAgfVxuXG4gIGFuY2hvcklzT25TY3JlZW4oKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICBjb25zdCByZWN0ID0gdGhpcy5ib3R0b21BbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIChyZWN0LnRvcCA8PSB2aWV3cG9ydEhlaWdodCAmJiByZWN0LmJvdHRvbSA+PSAwKTtcbiAgfVxuXG4gIGF1dG9sb2FkQ29udGVudElmTmVjZXNzYXJ5KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5sb2FkaW5nLnBpcGUodGFrZSgxKSwgZmlsdGVyKGxvYWRpbmcgPT4gIWxvYWRpbmcpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5hbmNob3JJc09uU2NyZWVuKCkgJiYgKFxuICAgICAgICAgICAgKHRoaXMuY3VycmVudFJlY2lwZXMubGVuZ3RoID4gMCAmJiAhdGhpcy5ub01vcmVSZWNpcGVzKSB8fFxuICAgICAgICAgICAgKHRoaXMuYXJ0aWNsZXMubGVuZ3RoID4gMCAmJiAhdGhpcy5ub01vcmVBcnRpY2xlcylcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIEF0IGNvbXBvbmVudCBpbml0aWFsIGxvYWQsIDIgY2FsbHMgd2lsbCBiZSBtYWRlIGZvciB0aGUgZmlyc3QgdHdvIHJlY2lwZXMgcGFnZVxuICAgICAgICAgIC8vIFRoaXMgaXMgdG8gYXZvaWQgbWFraW5nIHRoZSBsb2FkZXIgc3BpbiB0d2ljZVxuICAgICAgICAgIHRoaXMubG9hZE1vcmUodGhpcy5sYXN0UGFnZSA+IDIpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBsb2FkTW9yZShsb2FkZXIgPSB0cnVlKTogdm9pZCB7XG4gICAgaWYgKGxvYWRlcikgeyB0aGlzLmxvYWRpbmcubmV4dCh0cnVlKTsgfVxuICAgIHRoaXMubGFzdFBhZ2UrKztcbiAgICB0aGlzLmxvYWRDb250ZW50KCk7XG4gIH1cblxuICBsb2FkUmVjaXBlc1BhZ2UocGFnZTogbnVtYmVyKTogT2JzZXJ2YWJsZTxSZWNpcGVbXT4ge1xuICAgIGlmICh0aGlzLm5vTW9yZVJlY2lwZXMpIHtcbiAgICAgIHJldHVybiBvZigoW10gYXMgUmVjaXBlW10pKTtcbiAgICB9XG5cbiAgICAvLyBrZWVwIGEgY29weSBvZiB0aGUgZmlsdGVycyB3aGVuIHJlcXVlc3QgaXMgc2VudCwgc28gd2UgY2FuIGNoZWNrIHRoZXkgYXJlIHN0aWxsIHRoZSBzYW1lIHdoZW4gaXQgaXMgcmVjZWl2ZWRcbiAgICAvLyBCZWNhdXNlIGlmIGl0J3Mgbm90IHRoZSBjYXNlIHdlIGhhdmUgdG8gaWdub3JlIHRoZSByZXN1bHRzXG4gICAgY29uc3QgcmVxdWVzdEZpbHRlcnMgPSB0aGlzLmZpbHRlcnMuY29weSgpO1xuXG4gICAgcmV0dXJuIHRoaXMucmVjaXBlc1NlcnZpY2UuZmlsdGVyKFxuICAgICAgcmVxdWVzdEZpbHRlcnMsXG4gICAgICB7IHNpemU6IDIwLCBudW1iZXI6IHBhZ2UgfSxcbiAgICAgIHJlY2lwZUluY2x1ZGVzLFxuICAgICAgcmVjaXBlU3BhcnNlRmllbGRzLFxuICAgICAgdGhpcy5tb2RpZmllZEd1ZXN0cyxcbiAgICAgIHRoaXMucmFuZG9tTW9kZSxcbiAgICAgIHRoaXMuc29ydFxuICAgICkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocmVzdWx0OiBSZWNpcGVbXSkgPT4gdGhpcy5wcm9jZXNzUmVzdWx0cyhyZXN1bHQsIHJlcXVlc3RGaWx0ZXJzLCBwYWdlKSlcbiAgICApO1xuICB9XG5cbiAgcHJvY2Vzc1Jlc3VsdHMocmVzdWx0czogUmVjaXBlW10sIHJlcXVlc3RGaWx0ZXJzOiBSZWNpcGVGaWx0ZXJzLCBwYWdlOiBudW1iZXIpOiBPYnNlcnZhYmxlPFJlY2lwZVtdPiB7XG4gICAgLy8gQmVjYXVzZSBGaWx0ZXIgaXMgYSB0eXBlLCBhdHRyaWJ1dGVzIGFyZSBhbHdheXMgaW4gdGhlIHNhbWUgb3JkZXIsIHNvIHN0cmluZ2lmeSB3b24ndCBiZSBmYWxzZSBmb3Igb2JqZWN0cyB3aXRoIHNhbWUgYXR0cmlidXRlc1xuICAgIGlmIChKU09OLnN0cmluZ2lmeShyZXF1ZXN0RmlsdGVycykgPT09IEpTT04uc3RyaW5naWZ5KHRoaXMuZmlsdGVycykpIHtcbiAgICAgIGlmICh0aGlzLmV4Y2x1ZGVkUmVjaXBlc0lkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLmZpbHRlcihyZWNpcGUgPT4gIXRoaXMuZXhjbHVkZWRSZWNpcGVzSWRzLmluY2x1ZGVzKHJlY2lwZS5pZCkpO1xuICAgICAgfVxuICAgICAgLy8gaWYgeW91IHNwYW0gY2xpY2sgb24gZmlsdGVycywgbXVsdGlwbGUgcmVxdWVzdHMgd2l0aCBwYWdlID09IDEgY291bGQgYmUgc2VudCBmb3IgdGhlIHNhbWUgZmlsdGVycyAtPiBvbmx5IGtlZXAgdGhlIGxhc3QgcmVzdWx0XG4gICAgICB0aGlzLmN1cnJlbnRSZWNpcGVzID0gcGFnZSA9PT0gMSA/IHJlc3VsdHMgOiBbLi4udGhpcy5jdXJyZW50UmVjaXBlcywgLi4ucmVzdWx0c107XG4gICAgICB0aGlzLmN1cnJlbnRSZWNpcGVzLmZvckVhY2goKHI6IFJlY2lwZSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5tb2RpZmllZEd1ZXN0cyAmJiB0aGlzLm1vZGlmaWVkR3Vlc3RzID4gMCkge1xuICAgICAgICAgIHIubW9kaWZpZWRHdWVzdHMgPSB0aGlzLm1vZGlmaWVkR3Vlc3RzO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMubm9Nb3JlUmVjaXBlcyA9IHJlc3VsdHMubGVuZ3RoID09PSAwO1xuICAgICAgcmV0dXJuIG9mKHRoaXMuY3VycmVudFJlY2lwZXMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmRlYnVnKGBGaWx0ZXJpbmcgYWJvcnRlZCA6ICR7SlNPTi5zdHJpbmdpZnkocmVxdWVzdEZpbHRlcnMpfSBhbmQgJHtKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlcnMpfSBhcmUgZGlmZmVyZW50YCk7XG4gICAgICByZXR1cm4gb2YoKFtdIGFzIFJlY2lwZVtdKSk7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlRmlsdGVyKGZpbHRlck5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyUmVtb3ZlZC5lbWl0KGZpbHRlck5hbWUpO1xuICB9XG5cbiAgYnVpbGRGaWx0ZXJzQXJyYXkoKTogc3RyaW5nW10ge1xuICAgIGxldCBmaWx0ZXJOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICBmaWx0ZXJOYW1lcyA9IFsuLi5maWx0ZXJOYW1lcywgLi4udGhpcy5nZXRTZWxlY3RlZEZpbHRlcnModGhpcy5maWx0ZXJzLmNvc3QpLCAuLi50aGlzLmdldFNlbGVjdGVkRmlsdGVycyh0aGlzLmZpbHRlcnMuZGlmZmljdWx0eSksXG4gICAgICAuLi50aGlzLmdldFNlbGVjdGVkRmlsdGVycyh0aGlzLmZpbHRlcnMudGltZSldO1xuICAgIGlmICh0aGlzLmZpbHRlcnMuYWRkaXRpb25hbEZpbHRlcnMgJiYgdGhpcy5maWx0ZXJzLmFkZGl0aW9uYWxGaWx0ZXJzLnRpdGxlICE9PSAnJykge1xuICAgICAgZmlsdGVyTmFtZXMgPSBbdGhpcy5maWx0ZXJzLmFkZGl0aW9uYWxGaWx0ZXJzLnRpdGxlXS5jb25jYXQoZmlsdGVyTmFtZXMpO1xuICAgIH1cbiAgICByZXR1cm4gZmlsdGVyTmFtZXM7XG4gIH1cblxuICBnZXRTZWxlY3RlZEZpbHRlcnMoZmlsdGVyc0FycmF5OiBSZWNpcGVGaWx0ZXJbXSk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIWZpbHRlcnNBcnJheSkgeyByZXR1cm4gW107IH1cblxuICAgIHJldHVybiBmaWx0ZXJzQXJyYXkuZmlsdGVyKGVsID0+IGVsLnZhbHVlKS5tYXAoZWwgPT4gZWwudGV4dCk7XG4gIH1cblxuICByZWxvYWRQYWdlKCk6IHZvaWQge1xuICAgIHRoaXMubG9hZGluZy5uZXh0KHRydWUpO1xuICAgIHRoaXMubGFzdFBhZ2UgPSAxO1xuICAgIHRoaXMubm9Nb3JlUmVjaXBlcyA9IGZhbHNlO1xuICAgIHRoaXMubm9Nb3JlQXJ0aWNsZXMgPSBmYWxzZTtcbiAgICB0aGlzLmN1cnJlbnRSZWNpcGVzID0gW107XG4gICAgdGhpcy5hcnRpY2xlcyA9IFtdO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLmxvYWRDb250ZW50KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWIgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xuICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMubXV0YXRpb25PYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gIH1cblxuICBpc1NlYXJjaGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJzLnNlYXJjaCAmJiB0aGlzLmZpbHRlcnMuc2VhcmNoICE9PSAnJztcbiAgfVxuXG4gIGlzRmllbGRFbXB0eShyZWNpcGVGaWx0ZXI6IFJlY2lwZUZpbHRlcltdKTogYm9vbGVhbiB7XG4gICAgaWYgKCFyZWNpcGVGaWx0ZXIpIHsgcmV0dXJuIHRydWU7IH1cblxuICAgIGZvciAoY29uc3QgZiBvZiByZWNpcGVGaWx0ZXIpIHtcbiAgICAgIGlmIChmLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpc0ZpbHRlcmluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1NlYXJjaGluZygpIHx8XG4gICAgICAhdGhpcy5pc0ZpZWxkRW1wdHkodGhpcy5maWx0ZXJzLmRpZmZpY3VsdHkpIHx8XG4gICAgICAhdGhpcy5pc0ZpZWxkRW1wdHkodGhpcy5maWx0ZXJzLmNvc3QpIHx8XG4gICAgICAhdGhpcy5pc0ZpZWxkRW1wdHkodGhpcy5maWx0ZXJzLnRpbWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb3BzKCk6IEN1c3RvbVByb3BlcnRpZXMge1xuICAgIGlmICghdGhpcy5maWx0ZXJzPy5zZWFyY2gpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgcmV0dXJuIHsgc2VhcmNoX3Rlcm06IHRoaXMuZmlsdGVycz8uc2VhcmNoIH07XG4gIH1cblxuICAvLyBBcnRpY2xlcyB3aWxsIGJlIGxvYWRlZCBvbmx5IGlmIGEgZmlsdGVyIGlzIGFwcGxpZWQgb24gcGFja2FnZXNcbiAgLy8gVGhpcyBpcyB0byBhdm9pZCBhcnRpY2xlcyBiZWluZyBsb2FkZWQgaW4gc3BlY2lhbCBwYWdlcyB3aGVyZSBvbmx5IGZpbHRlcnMgb24gcmVjaXBlcyBhcmUgcGFzc2VkIChmYXZvcml0ZXMsIHN1Z2dlc3RlZCwgZXRjLilcbiAgLy8gPT4gUGFja2FnZXMgbWl4aW5nIGFydGljbGVzIHdpdGggcmVjaXBlcyBpcyBub3Qgc3VwcG9ydGVkIHlldFxuICBwcml2YXRlIGxvYWRBcnRpY2xlcyhwYWdlOiBudW1iZXIpOiBPYnNlcnZhYmxlPEFydGljbGVbXT4ge1xuICAgIGlmICghdGhpcy5jb250ZXh0LmFydGljbGVzSW5DYXRhbG9nRW5hYmxlZCB8fCB0aGlzLm5vTW9yZUFydGljbGVzIHx8ICF0aGlzLmZpbHRlcnMuYWRkaXRpb25hbEZpbHRlcnM/LmZpbHRlcnMucGFja2FnZXMpIHtcbiAgICAgIHJldHVybiBvZigoW10gYXMgQXJ0aWNsZVtdKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXJ0aWNsZXNTZXJ2aWNlLmFsbCh7XG4gICAgICByZW1vdGVmaWx0ZXI6IHtcbiAgICAgICAgcGFja2FnZXM6IHRoaXMuZmlsdGVycy5hZGRpdGlvbmFsRmlsdGVycy5maWx0ZXJzLnBhY2thZ2VzLFxuICAgICAgICAuLi50aGlzLmZpbHRlcnMuc2VhcmNoID8geyBzZWFyY2g6IHRoaXMuZmlsdGVycy5zZWFyY2ggfSA6IHt9XG4gICAgICB9LFxuICAgICAgcGFnZTogeyBzaXplOiAyMCwgbnVtYmVyOiBwYWdlIH0sXG4gICAgICBzb3J0OiBbJy1kYXRlJ10gfSkucGlwZShcbiAgICAgIG1hcCgocmVzdWx0OiBEb2N1bWVudENvbGxlY3Rpb248QXJ0aWNsZT4pID0+IHtcbiAgICAgICAgdGhpcy5hcnRpY2xlcyA9IHBhZ2UgPT09IDEgPyByZXN1bHQuZGF0YSA6IFsuLi50aGlzLmFydGljbGVzLCAuLi5yZXN1bHQuZGF0YV07XG4gICAgICAgIHRoaXMubm9Nb3JlQXJ0aWNsZXMgPSByZXN1bHQuZGF0YS5sZW5ndGggPT09IDA7XG4gICAgICAgIHJldHVybiB0aGlzLmFydGljbGVzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkQ29udGVudCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIGZvcmtKb2luKFt0aGlzLmxvYWRSZWNpcGVzUGFnZSh0aGlzLmxhc3RQYWdlKSwgdGhpcy5sb2FkQXJ0aWNsZXModGhpcy5sYXN0UGFnZSldKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmcubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1pYW0tY2F0YWxvZy1saXN0X19jYXJkc1wiPlxuXG4gIDwhLS0gPGRpdiAqbmdJZj1cImZpbHRlcnNUb0Rpc3BsYXkubGVuZ3RoID4gMFwiIGNsYXNzPVwibWlhbS1jYXRhbG9nLWxpc3RfX2ZpbHRlcnNcIj5cbiAgICA8ZGl2IGNsYXNzPVwibWlhbS1jYXRhbG9nLWxpc3RfX2ZpbHRlcl9fdGl0bGVcIj5Wb3MgZmlsdHJlczwvZGl2PlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBmaWx0ZXJzVG9EaXNwbGF5XCIgY2xhc3M9XCJtaWFtLWNhdGFsb2ctbGlzdF9fZmlsdGVyXCI+XG4gICAgICA8c3Bhbj57e2ZpbHRlcn19PC9zcGFuPlxuICAgICAgPG5nLW1pYW0taWNvbiBcbiAgICAgICAgY2xhc3M9XCJtaWFtLWNhdGFsb2ctbGlzdF9fZmlsdGVyX19pY29uXCIgXG4gICAgICAgIChjbGljayk9XCJyZW1vdmVGaWx0ZXIoZmlsdGVyKVwiIFxuICAgICAgICBbaWNvbk5hbWVdPVwiaWNvbi5DbGVhclwiXG4gICAgICAgIHByaW1hcnlDb2xvcj1cInZhcigtLW0tY29sb3ItcHJpbWFyeSlcIj5cbiAgICAgIDwvbmctbWlhbS1pY29uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj4gLS0+XG5cbiAgPCEtLSBObyByZXN1bHRzIC0tPlxuICA8ZGl2ICpuZ0lmPVwiIShsb2FkaW5nIHwgYXN5bmMpICYmIGN1cnJlbnRSZWNpcGVzLmxlbmd0aCA9PT0gMCAmJiBhcnRpY2xlcy5sZW5ndGggPT09IDBcIiBjbGFzcz1cIm1pYW0tY2F0YWxvZy1saXN0X19ub3RGb3VuZFwiPlxuICAgIDxuZy1taWFtLWljb24gY2xhc3M9XCJtaWFtLWNhdGFsb2ctbGlzdF9fbm90Rm91bmRfX2ljb25cIiBbd2lkdGhdPVwiMjc5XCIgW2hlaWdodF09XCIyNDNcIiBbaWNvbk5hbWVdPVwiaWNvbi5Ob1JlY2lwZUZvdW5kXCI+PC9uZy1taWFtLWljb24+XG4gICAgPGRpdiAqbmdJZj1cImlzRmlsdGVyaW5nKCkgZWxzZSBub3RGaWx0ZXJpbmdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtaWFtLWNhdGFsb2ctbGlzdF9fbm90Rm91bmRfX3RpdGxlMSBmaWx0ZXJpbmdcIj5cbiAgICAgICAgPHNwYW4gaTE4bj5Ew6lzb2zDqSwgYXVjdW5lIHByb3Bvc2l0aW9uIHRyb3V2w6llPC9zcGFuPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWlhbS1jYXRhbG9nLWxpc3RfX25vdEZvdW5kX19zZWFyY2hpbmdcIiAqbmdJZj1cImlzU2VhcmNoaW5nKClcIj5cbiAgICAgICAgICA8c3BhbiBpMThuPnBvdXI8L3NwYW4+XG4gICAgICAgICAgPHNwYW4+XCJ7e2ZpbHRlcnMuc2VhcmNofX1cIjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtaWFtLWNhdGFsb2ctbGlzdF9fbm90Rm91bmRfX3RpdGxlMlwiPlxuICAgICAgICA8c3BhbiBpMThuPlZldWlsbGV6IG1vZGlmaWVyIGxlcyB0ZXJtZXMgZGUgdm90cmUgcmVjaGVyY2hlIG91IHLDqWdsZXIgbGVzIGZpbHRyZXM8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8bmctdGVtcGxhdGUgI25vdEZpbHRlcmluZz5cbiAgICAgIDxkaXYgKm5nSWY9XCJ0aGlzLnVzZXJTZXJ2aWNlLmlzTG9nZ2VkJCB8IGFzeW5jIGVsc2Ugbm90TG9nZ2VkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtaWFtLWNhdGFsb2ctbGlzdF9fbm90Rm91bmRfX3RpdGxlMSBub3QtZmlsdGVyaW5nXCI+XG4gICAgICAgICAgPHNwYW4gaTE4bj5Ew6lzb2zDqSwgdm91cyBuJ2F2ZXogcGFzIGVuY29yZSBkJ2lkw6llcyByZXBhcyBzYXV2ZWdhcmTDqWVzPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNub3RMb2dnZWQ+XG4gICAgICA8ZGl2IGNsYXNzPVwibWlhbS1jYXRhbG9nLWxpc3RfX25vdEZvdW5kX190aXRsZTEgbm90LWxvZ2dlZFwiPlxuICAgICAgICA8c3BhbiBpMThuPkTDqXNvbMOpLCB2b3VzIGRldmV6IMOqdHJlIGNvbm5lY3TDqSBwb3VyIGFjY8OpZGVyIGF1IGNvbnRlbnUgZGUgY2V0dGUgcGFnZS48L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cblxuICA8IS0tIEluc2VydCBhIGNhcmQgdG8gY3JlYXRlIGEgcmVjaXBlIC0tPlxuICA8bmctbWlhbS1jYXJkLWNyZWF0ZS1yZWNpcGUgKm5nSWY9XCJpbnNlcnRDcmVhdGVDYXJkICYmIGN1cnJlbnRSZWNpcGVzLmxlbmd0aCAhPT0gMFwiIChjbGlja2VkKT1cInJlY2lwZUFjdGlvblRyaWdnZXJlZC5lbWl0KHthY3Rpb246ICdDUkVBVEUnLCByZWNpcGU6IG51bGx9KVwiIGNsYXNzPVwibWlhbS1jYXRhbG9nLWxpc3RfX2NhcmRcIj48L25nLW1pYW0tY2FyZC1jcmVhdGUtcmVjaXBlPlxuICBcbiAgPCEtLSBDbGFzc2ljYWwgcmVjaXBlIGNhcmQgLS0+XG4gIDxuZy1taWFtLXJlY2lwZS1jYXJkXG4gICAgKm5nRm9yPVwibGV0IHJlY2lwZSBvZiBjdXJyZW50UmVjaXBlc1wiXG4gICAgW3JlY2lwZV09J3JlY2lwZSdcbiAgICBbb3JpZ2luVHJhY2VdPVwiZXZlbnRUcmFjZSgpXCJcbiAgICBbZGlzcGxheVByaWNpbmddPVwiZGlzcGxheVByaWNpbmdcIlxuICAgIFtwcmV2aWV3QWxsb3dlZF09XCIhYWRkUmVjaXBlTW9kZVwiXG4gICAgW2FkZFJlY2lwZU1vZGVdPVwiYWRkUmVjaXBlTW9kZVwiXG4gICAgW2Rpc3BsYXlHdWVzdHNdPVwiZGlzcGxheUd1ZXN0c1wiXG4gICAgW2hlbHBCdXR0b25BbGxvd2VkXT1cImhlbHBCdXR0b25BbGxvd2VkXCJcbiAgICAoYWRkVG9NZWFsc1BsYW5uZXIpPVwiYWRkVG9NZWFsc1BsYW5uZXIuZW1pdCgkZXZlbnQpXCJcbiAgICAoYWN0aW9uVHJpZ2dlcmVkKT1cInJlY2lwZUFjdGlvblRyaWdnZXJlZC5lbWl0KHthY3Rpb246ICRldmVudCwgcmVjaXBlOiByZWNpcGV9KVwiXG4gID48L25nLW1pYW0tcmVjaXBlLWNhcmQ+XG4gIFxuICA8IS0tIEFydGljbGUgY2FyZCAtLT5cbiAgPG5nLW1pYW0tY2F0YWxvZy1hcnRpY2xlLWNhcmQgKm5nRm9yPVwibGV0IGFydGljbGUgb2YgYXJ0aWNsZXNcIiBbYXJ0aWNsZV09XCJhcnRpY2xlXCI+PC9uZy1taWFtLWNhdGFsb2ctYXJ0aWNsZS1jYXJkPlxuXG4gIDwhLS0gTG9hZGVyIC0tPlxuICA8ZGl2ICpuZ0lmPVwibG9hZGluZyB8IGFzeW5jXCIgY2xhc3M9XCJtaWFtLWNhdGFsb2ctbGlzdF9fbG9hZGVyXCI+XG4gICAgPG5nLW1pYW0tbG9hZGVyPjwvbmctbWlhbS1sb2FkZXI+XG4gICAgPGRpdiBpMThuPlxuICAgICAgQ2hhcmdlbWVudCBkZXMgcsOpc3VsdGF0cy4uLlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBpZD1cIm1pYW0tY2F0YWxvZy1saXN0X19hbmNob3JcIj48L2Rpdj5cbjwvZGl2PiJdfQ==