ctt-babylon 0.22.111 → 0.22.113

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.
@@ -34,27 +34,61 @@ export class BabylonWebmapComponent {
34
34
  if (!links?.length)
35
35
  return [];
36
36
  const groups = [];
37
- const groupedByFirstSegment = new Map();
37
+ const rootNodes = new Map();
38
+ const homeLinks = [];
39
+ // 1. Construir un árbol jerárquico basado en las carpetas/segmentos de la URL
38
40
  links.forEach((link, index) => {
39
41
  const segments = this.getUrlSegments(link.url);
40
42
  if (segments.length === 0) {
41
- groups.push(this.createGroup(link, `home-${index}`, '', true));
43
+ homeLinks.push(link);
42
44
  return;
43
45
  }
44
- const [firstSegment] = segments;
45
- const group = groupedByFirstSegment.get(firstSegment) ??
46
- this.createGroup(undefined, firstSegment, this.getLabelFromSlug(firstSegment));
47
- if (!groupedByFirstSegment.has(firstSegment)) {
48
- groupedByFirstSegment.set(firstSegment, group);
49
- groups.push(group);
50
- }
51
- if (segments.length === 1) {
52
- group.link = link;
53
- group.label = link.label || group.label;
54
- group.trackKey = link.url || firstSegment;
55
- return;
56
- }
57
- group.children.push(link);
46
+ let currentLevel = rootNodes;
47
+ segments.forEach((segment, segmentIndex) => {
48
+ if (!currentLevel.has(segment)) {
49
+ currentLevel.set(segment, {
50
+ segment,
51
+ label: this.getLabelFromSlug(segment),
52
+ children: new Map(),
53
+ });
54
+ }
55
+ const node = currentLevel.get(segment);
56
+ // Si es el último segmento, enlazamos los datos reales del botón
57
+ if (segmentIndex === segments.length - 1) {
58
+ node.link = link;
59
+ if (link.label) {
60
+ node.label = link.label;
61
+ }
62
+ }
63
+ currentLevel = node.children;
64
+ });
65
+ });
66
+ // 2. Aplanar el árbol jerárquico simulando sangrías visuales (para 2, 3, 4, 5... niveles)
67
+ rootNodes.forEach((rootNode, rootSegment) => {
68
+ const group = this.createGroup(rootNode.link, rootSegment, rootNode.label);
69
+ // Función recursiva que añade hijos al grupo plano
70
+ const flattenChildren = (node, depth) => {
71
+ const sortedChildren = Array.from(node.children.values()).sort((a, b) => a.label.localeCompare(b.label));
72
+ sortedChildren.forEach((child) => {
73
+ // Magia aquí: Espaciado visual de no-separación según profundidad sin romper el HTML actual
74
+ const indent = '\u00A0\u00A0\u00A0\u00A0'.repeat(depth);
75
+ const prefix = depth > 0 ? '- ' : '';
76
+ group.children.push({
77
+ ...(child.link || {}),
78
+ url: child.link?.url || '',
79
+ label: `${indent}${prefix}${child.label}`,
80
+ isParent: child.children.size > 0, // <-- Añadimos esta propiedad para CSS
81
+ });
82
+ // Procesar el siguiente nivel de profundidad (sub-sub-items)
83
+ flattenChildren(child, depth + 1);
84
+ });
85
+ };
86
+ flattenChildren(rootNode, 0);
87
+ groups.push(group);
88
+ });
89
+ // Manejar enlaces "home"
90
+ homeLinks.forEach((link, index) => {
91
+ groups.push(this.createGroup(link, `home-${index}`, link.label, true));
58
92
  });
59
93
  return this.moveHomeGroupFirst(groups);
60
94
  }
@@ -115,11 +149,11 @@ export class BabylonWebmapComponent {
115
149
  return [homeGroup, ...sortedGroups];
116
150
  }
117
151
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BabylonWebmapComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
118
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: BabylonWebmapComponent, isStandalone: true, selector: "lib-babylon-webmap", inputs: { pretitle: "pretitle", title: "title", image: "image", tags: "tags", textColors: "textColors", links: "links", groupByCategory: "groupByCategory" }, ngImport: i0, template: "<section class=\"babylon__webmap margin-main\">\n <div class=\"container\">\n <div class=\"row cs_gap_y_30\">\n <div class=\"col-lg-6 cs_pr_110\">\n <div class=\"intro_info no-align\">\n @if (pretitle) {\n <lib-babylon-dynamic-heading\n [tag]=\"tags?.pretitle || 'h3'\"\n cssClass=\"pretitle mb--10\"\n [color]=\"textColors?.pretitle\"\n [content]=\"pretitle\"\n ></lib-babylon-dynamic-heading>\n }\n @if (title) {\n <lib-babylon-dynamic-heading\n [tag]=\"tags?.title || 'h2'\"\n cssClass=\"title\"\n [color]=\"textColors?.title\"\n [content]=\"title\"\n ></lib-babylon-dynamic-heading>\n }\n @if (shouldGroupLinks && groupedLinks.length) {\n <ul\n class=\"cs_list cs_style_1 cs_mp_0 babylon__webmap-list--grouped\"\n >\n @for (group of groupedLinks; track group.trackKey) {\n <li\n [class.babylon__webmap-group--has-children]=\"\n group.children.length\n \"\n >\n <div class=\"babylon__webmap-group-title\">\n @if (group.link?.url) {\n <a\n [attr.aria-label]=\"\n group.link?.label\n \"\n [href]=\"group.link?.url\"\n [routerLink]=\"group.link?.url\"\n (click)=\"linkClick($event)\"\n >\n <p class=\"text--small\">\n {{ group.label }}\n </p>\n </a>\n } @else {\n <p class=\"text--small\">\n {{ group.label }}\n </p>\n }\n </div>\n @if (group.children.length) {\n <ul class=\"babylon__webmap-sublist\">\n @for (\n child of group.children;\n track child.url ||\n child.label ||\n $index\n ) {\n <li>\n <a\n [attr.aria-label]=\"\n child.label\n \"\n [href]=\"child.url\"\n [routerLink]=\"child.url\"\n (click)=\"\n linkClick($event)\n \"\n >\n <p class=\"text--small\">\n {{ child.label }}\n </p>\n </a>\n </li>\n }\n </ul>\n }\n </li>\n }\n </ul>\n } @else if (links?.length) {\n <ul class=\"cs_list cs_style_1 cs_mp_0\">\n @for (link of links; track $index) {\n @if (link) {\n <li>\n <a\n [attr.aria-label]=\"link.label\"\n [href]=\"link.url\"\n [routerLink]=\"link.url\"\n (click)=\"linkClick($event)\"\n >\n <p class=\"text--small\">\n {{ link.label }}\n </p>\n </a>\n </li>\n }\n }\n </ul>\n }\n </div>\n </div>\n @if (image) {\n <div class=\"col-lg-6\">\n <div\n class=\"cs_pr_1101 cs_image_layer cs_style_3 position-relative\"\n >\n <img\n [src]=\"\n image?.src ||\n 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'\n \"\n [alt]=\"image?.alt ?? image?.title ?? 'title'\"\n class=\"cs--radius\"\n loading=\"lazy\"\n />\n </div>\n </div>\n }\n </div>\n </div>\n</section>\n", styles: ["@charset \"UTF-8\";.cs_list.cs_style_1 li{position:relative;display:flex;align-items:flex-start;gap:10px;border-bottom:1px solid var(--cl_border-light);padding-bottom:10px}.cs_list.cs_style_1 li:not(:last-child){margin-bottom:15px}.cs_list.cs_style_1.babylon__webmap-list--grouped li{flex-direction:column;gap:8px}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-group-title{display:flex;align-items:flex-start;gap:10px}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-group-title:before{content:\"\\2022\";flex:none;line-height:1.7}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-group--has-children>.babylon__webmap-group-title .text--small{font-weight:700}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-sublist{display:flex;flex-direction:column;gap:8px;width:100%;padding-left:28px}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-sublist li{display:flex;flex-direction:row;gap:10px;border-bottom:0;padding-bottom:0}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-sublist li:not(:last-child){margin-bottom:0}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-sublist li:before{content:\"\\2022\";flex:none;line-height:1.7}.cs_image_layer.cs_style_3.cs_type_1,.cs_image_layer.cs_style_4.cs_type_1{border-radius:250px 0}.cs_image_layer.cs_style_3.cs_type_1 img,.cs_image_layer.cs_style_4.cs_type_1 img{border-radius:inherit}.cs_image_layer.cs_style_3.cs_type_1:before,.cs_image_layer.cs_style_4.cs_type_1:before{border-radius:225px 0}.cs_list{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: BabylonDynamicHeadingComponent, selector: "lib-babylon-dynamic-heading", inputs: ["useInnerHtml", "tag", "wrapper", "cssClass", "content", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
152
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: BabylonWebmapComponent, isStandalone: true, selector: "lib-babylon-webmap", inputs: { pretitle: "pretitle", title: "title", image: "image", tags: "tags", textColors: "textColors", links: "links", groupByCategory: "groupByCategory" }, ngImport: i0, template: "<section class=\"babylon__webmap margin-main\">\n <div class=\"container\">\n <div class=\"row cs_gap_y_30\">\n <div class=\"col-lg-6 cs_pr_110\">\n <div class=\"intro_info no-align\">\n @if (pretitle) {\n <lib-babylon-dynamic-heading\n [tag]=\"tags?.pretitle || 'h3'\"\n cssClass=\"pretitle mb--10\"\n [color]=\"textColors?.pretitle\"\n [content]=\"pretitle\"\n ></lib-babylon-dynamic-heading>\n }\n @if (title) {\n <lib-babylon-dynamic-heading\n [tag]=\"tags?.title || 'h2'\"\n cssClass=\"title\"\n [color]=\"textColors?.title\"\n [content]=\"title\"\n ></lib-babylon-dynamic-heading>\n }\n @if (shouldGroupLinks && groupedLinks.length) {\n <ul\n class=\"cs_list cs_style_1 cs_mp_0 babylon__webmap-list--grouped\"\n >\n @for (group of groupedLinks; track group.trackKey) {\n <li\n [class.babylon__webmap-group--has-children]=\"\n group.children.length\n \"\n >\n <div class=\"babylon__webmap-group-title\">\n @if (group.link?.url) {\n <a\n [attr.aria-label]=\"\n group.link?.label\n \"\n [href]=\"group.link?.url\"\n [routerLink]=\"group.link?.url\"\n (click)=\"linkClick($event)\"\n >\n <p class=\"text--small\">\n {{ group.label }}\n </p>\n </a>\n } @else {\n <p class=\"text--small\">\n {{ group.label }}\n </p>\n }\n </div>\n @if (group.children.length) {\n <ul class=\"babylon__webmap-sublist\">\n @for (\n child of group.children;\n track child.url ||\n child.label ||\n $index\n ) {\n <li\n [class.is-parent]=\"\n child.isParent\n \"\n >\n <a\n [attr.aria-label]=\"\n child.label\n \"\n [href]=\"child.url\"\n [routerLink]=\"child.url\"\n (click)=\"\n linkClick($event)\n \"\n >\n <p class=\"text--small\">\n {{ child.label }}\n </p>\n </a>\n </li>\n }\n </ul>\n }\n </li>\n }\n </ul>\n } @else if (links?.length) {\n <ul class=\"cs_list cs_style_1 cs_mp_0\">\n @for (link of links; track $index) {\n @if (link) {\n <li>\n <a\n [attr.aria-label]=\"link.label\"\n [href]=\"link.url\"\n [routerLink]=\"link.url\"\n (click)=\"linkClick($event)\"\n >\n <p class=\"text--small\">\n {{ link.label }}\n </p>\n </a>\n </li>\n }\n }\n </ul>\n }\n </div>\n </div>\n @if (image) {\n <div class=\"col-lg-6 babylon__webmap-sticky-col\">\n <div\n class=\"cs_pr_1101 cs_image_layer cs_style_3 position-sticky\"\n >\n <img\n [src]=\"\n image?.src ||\n 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'\n \"\n [alt]=\"image?.alt ?? image?.title ?? 'title'\"\n class=\"cs--radius\"\n loading=\"lazy\"\n />\n </div>\n </div>\n }\n </div>\n </div>\n</section>\n", styles: ["@charset \"UTF-8\";.cs_list.cs_style_1 li{position:relative;display:flex;align-items:flex-start;gap:10px;border-bottom:1px solid var(--cl_border-light);padding-bottom:10px}.cs_list.cs_style_1 li:not(:last-child){margin-bottom:15px}.cs_list.cs_style_1.babylon__webmap-list--grouped li{flex-direction:column;gap:8px}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-group-title{display:flex;align-items:flex-start;gap:10px}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-group-title:before{content:\"\\2022\";flex:none;line-height:1.7}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-group--has-children>.babylon__webmap-group-title .text--small{font-weight:700}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-sublist{display:flex;flex-direction:column;gap:8px;width:100%;padding-left:28px}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-sublist li{display:flex;flex-direction:row;gap:10px;border-bottom:0;padding-bottom:0}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-sublist li:not(:last-child){margin-bottom:0}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-sublist li:before{content:\"\\2022\";flex:none;line-height:1.7}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-sublist li.is-parent .text--small{font-weight:700}.babylon__webmap-sticky-col{position:relative}.position-sticky{position:sticky;top:20rem}.cs_image_layer.cs_style_3.cs_type_1,.cs_image_layer.cs_style_4.cs_type_1{border-radius:250px 0}.cs_image_layer.cs_style_3.cs_type_1 img,.cs_image_layer.cs_style_4.cs_type_1 img{border-radius:inherit}.cs_image_layer.cs_style_3.cs_type_1:before,.cs_image_layer.cs_style_4.cs_type_1:before{border-radius:225px 0}.cs_list{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: BabylonDynamicHeadingComponent, selector: "lib-babylon-dynamic-heading", inputs: ["useInnerHtml", "tag", "wrapper", "cssClass", "content", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
119
153
  }
120
154
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BabylonWebmapComponent, decorators: [{
121
155
  type: Component,
122
- args: [{ selector: 'lib-babylon-webmap', standalone: true, imports: [RouterModule, BabylonDynamicHeadingComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"babylon__webmap margin-main\">\n <div class=\"container\">\n <div class=\"row cs_gap_y_30\">\n <div class=\"col-lg-6 cs_pr_110\">\n <div class=\"intro_info no-align\">\n @if (pretitle) {\n <lib-babylon-dynamic-heading\n [tag]=\"tags?.pretitle || 'h3'\"\n cssClass=\"pretitle mb--10\"\n [color]=\"textColors?.pretitle\"\n [content]=\"pretitle\"\n ></lib-babylon-dynamic-heading>\n }\n @if (title) {\n <lib-babylon-dynamic-heading\n [tag]=\"tags?.title || 'h2'\"\n cssClass=\"title\"\n [color]=\"textColors?.title\"\n [content]=\"title\"\n ></lib-babylon-dynamic-heading>\n }\n @if (shouldGroupLinks && groupedLinks.length) {\n <ul\n class=\"cs_list cs_style_1 cs_mp_0 babylon__webmap-list--grouped\"\n >\n @for (group of groupedLinks; track group.trackKey) {\n <li\n [class.babylon__webmap-group--has-children]=\"\n group.children.length\n \"\n >\n <div class=\"babylon__webmap-group-title\">\n @if (group.link?.url) {\n <a\n [attr.aria-label]=\"\n group.link?.label\n \"\n [href]=\"group.link?.url\"\n [routerLink]=\"group.link?.url\"\n (click)=\"linkClick($event)\"\n >\n <p class=\"text--small\">\n {{ group.label }}\n </p>\n </a>\n } @else {\n <p class=\"text--small\">\n {{ group.label }}\n </p>\n }\n </div>\n @if (group.children.length) {\n <ul class=\"babylon__webmap-sublist\">\n @for (\n child of group.children;\n track child.url ||\n child.label ||\n $index\n ) {\n <li>\n <a\n [attr.aria-label]=\"\n child.label\n \"\n [href]=\"child.url\"\n [routerLink]=\"child.url\"\n (click)=\"\n linkClick($event)\n \"\n >\n <p class=\"text--small\">\n {{ child.label }}\n </p>\n </a>\n </li>\n }\n </ul>\n }\n </li>\n }\n </ul>\n } @else if (links?.length) {\n <ul class=\"cs_list cs_style_1 cs_mp_0\">\n @for (link of links; track $index) {\n @if (link) {\n <li>\n <a\n [attr.aria-label]=\"link.label\"\n [href]=\"link.url\"\n [routerLink]=\"link.url\"\n (click)=\"linkClick($event)\"\n >\n <p class=\"text--small\">\n {{ link.label }}\n </p>\n </a>\n </li>\n }\n }\n </ul>\n }\n </div>\n </div>\n @if (image) {\n <div class=\"col-lg-6\">\n <div\n class=\"cs_pr_1101 cs_image_layer cs_style_3 position-relative\"\n >\n <img\n [src]=\"\n image?.src ||\n 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'\n \"\n [alt]=\"image?.alt ?? image?.title ?? 'title'\"\n class=\"cs--radius\"\n loading=\"lazy\"\n />\n </div>\n </div>\n }\n </div>\n </div>\n</section>\n", styles: ["@charset \"UTF-8\";.cs_list.cs_style_1 li{position:relative;display:flex;align-items:flex-start;gap:10px;border-bottom:1px solid var(--cl_border-light);padding-bottom:10px}.cs_list.cs_style_1 li:not(:last-child){margin-bottom:15px}.cs_list.cs_style_1.babylon__webmap-list--grouped li{flex-direction:column;gap:8px}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-group-title{display:flex;align-items:flex-start;gap:10px}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-group-title:before{content:\"\\2022\";flex:none;line-height:1.7}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-group--has-children>.babylon__webmap-group-title .text--small{font-weight:700}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-sublist{display:flex;flex-direction:column;gap:8px;width:100%;padding-left:28px}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-sublist li{display:flex;flex-direction:row;gap:10px;border-bottom:0;padding-bottom:0}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-sublist li:not(:last-child){margin-bottom:0}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-sublist li:before{content:\"\\2022\";flex:none;line-height:1.7}.cs_image_layer.cs_style_3.cs_type_1,.cs_image_layer.cs_style_4.cs_type_1{border-radius:250px 0}.cs_image_layer.cs_style_3.cs_type_1 img,.cs_image_layer.cs_style_4.cs_type_1 img{border-radius:inherit}.cs_image_layer.cs_style_3.cs_type_1:before,.cs_image_layer.cs_style_4.cs_type_1:before{border-radius:225px 0}.cs_list{width:100%}\n"] }]
156
+ args: [{ selector: 'lib-babylon-webmap', standalone: true, imports: [RouterModule, BabylonDynamicHeadingComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"babylon__webmap margin-main\">\n <div class=\"container\">\n <div class=\"row cs_gap_y_30\">\n <div class=\"col-lg-6 cs_pr_110\">\n <div class=\"intro_info no-align\">\n @if (pretitle) {\n <lib-babylon-dynamic-heading\n [tag]=\"tags?.pretitle || 'h3'\"\n cssClass=\"pretitle mb--10\"\n [color]=\"textColors?.pretitle\"\n [content]=\"pretitle\"\n ></lib-babylon-dynamic-heading>\n }\n @if (title) {\n <lib-babylon-dynamic-heading\n [tag]=\"tags?.title || 'h2'\"\n cssClass=\"title\"\n [color]=\"textColors?.title\"\n [content]=\"title\"\n ></lib-babylon-dynamic-heading>\n }\n @if (shouldGroupLinks && groupedLinks.length) {\n <ul\n class=\"cs_list cs_style_1 cs_mp_0 babylon__webmap-list--grouped\"\n >\n @for (group of groupedLinks; track group.trackKey) {\n <li\n [class.babylon__webmap-group--has-children]=\"\n group.children.length\n \"\n >\n <div class=\"babylon__webmap-group-title\">\n @if (group.link?.url) {\n <a\n [attr.aria-label]=\"\n group.link?.label\n \"\n [href]=\"group.link?.url\"\n [routerLink]=\"group.link?.url\"\n (click)=\"linkClick($event)\"\n >\n <p class=\"text--small\">\n {{ group.label }}\n </p>\n </a>\n } @else {\n <p class=\"text--small\">\n {{ group.label }}\n </p>\n }\n </div>\n @if (group.children.length) {\n <ul class=\"babylon__webmap-sublist\">\n @for (\n child of group.children;\n track child.url ||\n child.label ||\n $index\n ) {\n <li\n [class.is-parent]=\"\n child.isParent\n \"\n >\n <a\n [attr.aria-label]=\"\n child.label\n \"\n [href]=\"child.url\"\n [routerLink]=\"child.url\"\n (click)=\"\n linkClick($event)\n \"\n >\n <p class=\"text--small\">\n {{ child.label }}\n </p>\n </a>\n </li>\n }\n </ul>\n }\n </li>\n }\n </ul>\n } @else if (links?.length) {\n <ul class=\"cs_list cs_style_1 cs_mp_0\">\n @for (link of links; track $index) {\n @if (link) {\n <li>\n <a\n [attr.aria-label]=\"link.label\"\n [href]=\"link.url\"\n [routerLink]=\"link.url\"\n (click)=\"linkClick($event)\"\n >\n <p class=\"text--small\">\n {{ link.label }}\n </p>\n </a>\n </li>\n }\n }\n </ul>\n }\n </div>\n </div>\n @if (image) {\n <div class=\"col-lg-6 babylon__webmap-sticky-col\">\n <div\n class=\"cs_pr_1101 cs_image_layer cs_style_3 position-sticky\"\n >\n <img\n [src]=\"\n image?.src ||\n 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'\n \"\n [alt]=\"image?.alt ?? image?.title ?? 'title'\"\n class=\"cs--radius\"\n loading=\"lazy\"\n />\n </div>\n </div>\n }\n </div>\n </div>\n</section>\n", styles: ["@charset \"UTF-8\";.cs_list.cs_style_1 li{position:relative;display:flex;align-items:flex-start;gap:10px;border-bottom:1px solid var(--cl_border-light);padding-bottom:10px}.cs_list.cs_style_1 li:not(:last-child){margin-bottom:15px}.cs_list.cs_style_1.babylon__webmap-list--grouped li{flex-direction:column;gap:8px}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-group-title{display:flex;align-items:flex-start;gap:10px}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-group-title:before{content:\"\\2022\";flex:none;line-height:1.7}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-group--has-children>.babylon__webmap-group-title .text--small{font-weight:700}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-sublist{display:flex;flex-direction:column;gap:8px;width:100%;padding-left:28px}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-sublist li{display:flex;flex-direction:row;gap:10px;border-bottom:0;padding-bottom:0}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-sublist li:not(:last-child){margin-bottom:0}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-sublist li:before{content:\"\\2022\";flex:none;line-height:1.7}.cs_list.cs_style_1.babylon__webmap-list--grouped .babylon__webmap-sublist li.is-parent .text--small{font-weight:700}.babylon__webmap-sticky-col{position:relative}.position-sticky{position:sticky;top:20rem}.cs_image_layer.cs_style_3.cs_type_1,.cs_image_layer.cs_style_4.cs_type_1{border-radius:250px 0}.cs_image_layer.cs_style_3.cs_type_1 img,.cs_image_layer.cs_style_4.cs_type_1 img{border-radius:inherit}.cs_image_layer.cs_style_3.cs_type_1:before,.cs_image_layer.cs_style_4.cs_type_1:before{border-radius:225px 0}.cs_list{width:100%}\n"] }]
123
157
  }], propDecorators: { pretitle: [{
124
158
  type: Input
125
159
  }], title: [{
@@ -135,4 +169,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
135
169
  }], groupByCategory: [{
136
170
  type: Input
137
171
  }] } });
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFieWxvbi13ZWJtYXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFieWxvbi9zcmMvbGliL2NvbXBvbmVudHMvY29yZS9iYWJ5bG9uLXdlYm1hcC9iYWJ5bG9uLXdlYm1hcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvY29tcG9uZW50cy9jb3JlL2JhYnlsb24td2VibWFwL2JhYnlsb24td2VibWFwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxjQUFjLENBQUM7OztBQW1COUQsTUFBTSxPQUFPLHNCQUFzQjtJQVJuQztRQWdCWSxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFFakMsaUJBQVksR0FBeUIsRUFBRSxDQUFDO0tBb0ozQztJQWxKRyxJQUNJLEtBQUssQ0FBQyxLQUFtQztRQUN6QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUNJLGVBQWUsQ0FBQyxLQUEwQztRQUMxRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdC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LENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMzRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVPLGtCQUFrQixDQUN0QixNQUE0QjtRQUU1QixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFNUQsSUFBSSxTQUFTLElBQUksQ0FBQztZQUFFLE9BQU8sTUFBTSxDQUFDO1FBRWxDLE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztRQUNqQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFdEQsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLFlBQVksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7K0dBN0pRLHNCQUFzQjttR0FBdEIsc0JBQXNCLDRPQ3ZCbkMseTNNQTJIQSwybUREekdjLFlBQVksZ1JBQUUsOEJBQThCOzs0RkFLN0Msc0JBQXNCO2tCQVJsQyxTQUFTOytCQUNJLG9CQUFvQixjQUNsQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsOEJBQThCLENBQUMsbUJBR3RDLHVCQUF1QixDQUFDLE1BQU07OEJBR3RDLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFRRixLQUFLO3NCQURSLEtBQUs7Z0JBV0YsZUFBZTtzQkFEbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYWJ5bG9uQnV0dG9uSSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvYmFieWxvbi1idXR0b24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCYWJ5bG9uSW1hZ2VJIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9iYWJ5bG9uLWltYWdlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBCYWJ5bG9uRHluYW1pY0hlYWRpbmdDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuaW1wb3J0IHsgQmFieWxvblRhZ3NJLCBCYWJ5bG9uVGV4dHNDb2xvcnNJIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFieWxvbldlYm1hcEdyb3VwIHtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGxpbms/OiBCYWJ5bG9uQnV0dG9uSTtcbiAgICBjaGlsZHJlbjogQmFieWxvbkJ1dHRvbklbXTtcbiAgICB0cmFja0tleTogc3RyaW5nO1xuICAgIGlzSG9tZTogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaWItYmFieWxvbi13ZWJtYXAnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1JvdXRlck1vZHVsZSwgQmFieWxvbkR5bmFtaWNIZWFkaW5nQ29tcG9uZW50XSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYmFieWxvbi13ZWJtYXAuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9iYWJ5bG9uLXdlYm1hcC5jb21wb25lbnQuc2NzcycsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEJhYnlsb25XZWJtYXBDb21wb25lbnQge1xuICAgIEBJbnB1dCgpIHByZXRpdGxlPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHRpdGxlPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGltYWdlPzogQmFieWxvbkltYWdlSTtcbiAgICBASW5wdXQoKSB0YWdzPzogQmFieWxvblRhZ3NJO1xuICAgIEBJbnB1dCgpIHRleHRDb2xvcnM/OiBCYWJ5bG9uVGV4dHNDb2xvcnNJO1xuXG4gICAgcHJpdmF0ZSBfbGlua3M/OiBCYWJ5bG9uQnV0dG9uSVtdO1xuICAgIHByaXZhdGUgX2dyb3VwQnlDYXRlZ29yeSA9IGZhbHNlO1xuXG4gICAgZ3JvdXBlZExpbmtzOiBCYWJ5bG9uV2VibWFwR3JvdXBbXSA9IFtdO1xuXG4gICAgQElucHV0KClcbiAgICBzZXQgbGlua3ModmFsdWU6IEJhYnlsb25CdXR0b25JW10gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fbGlua3MgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5yZWZyZXNoR3JvdXBlZExpbmtzKCk7XG4gICAgfVxuXG4gICAgZ2V0IGxpbmtzKCk6IEJhYnlsb25CdXR0b25JW10gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGlua3M7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBzZXQgZ3JvdXBCeUNhdGVnb3J5KHZhbHVlOiBib29sZWFuIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9ncm91cEJ5Q2F0ZWdvcnkgPSB0aGlzLmhhc1Rva2VuVmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLnJlZnJlc2hHcm91cGVkTGlua3MoKTtcbiAgICB9XG5cbiAgICBnZXQgc2hvdWxkR3JvdXBMaW5rcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dyb3VwQnlDYXRlZ29yeTtcbiAgICB9XG5cbiAgICBsaW5rQ2xpY2soZTogRXZlbnQpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVmcmVzaEdyb3VwZWRMaW5rcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ncm91cGVkTGlua3MgPSB0aGlzLl9ncm91cEJ5Q2F0ZWdvcnlcbiAgICAgICAgICAgID8gdGhpcy5ncm91cExpbmtzQnlVcmwodGhpcy5fbGlua3MpXG4gICAgICAgICAgICA6IFtdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ3JvdXBMaW5rc0J5VXJsKFxuICAgICAgICBsaW5rczogQmFieWxvbkJ1dHRvbklbXSB8IHVuZGVmaW5lZFxuICAgICk6IEJhYnlsb25XZWJtYXBHcm91cFtdIHtcbiAgICAgICAgaWYgKCFsaW5rcz8ubGVuZ3RoKSByZXR1cm4gW107XG5cbiAgICAgICAgY29uc3QgZ3JvdXBzOiBCYWJ5bG9uV2VibWFwR3JvdXBbXSA9IFtdO1xuICAgICAgICBjb25zdCBncm91cGVkQnlGaXJzdFNlZ21lbnQgPSBuZXcgTWFwPHN0cmluZywgQmFieWxvbldlYm1hcEdyb3VwPigpO1xuXG4gICAgICAgIGxpbmtzLmZvckVhY2goKGxpbmssIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWdtZW50cyA9IHRoaXMuZ2V0VXJsU2VnbWVudHMobGluay51cmwpO1xuXG4gICAgICAgICAgICBpZiAoc2VnbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBzLnB1c2godGhpcy5jcmVhdGVHcm91cChsaW5rLCBgaG9tZS0ke2luZGV4fWAsICcnLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBbZmlyc3RTZWdtZW50XSA9IHNlZ21lbnRzO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPVxuICAgICAgICAgICAgICAgIGdyb3VwZWRCeUZpcnN0U2VnbWVudC5nZXQoZmlyc3RTZWdtZW50KSA/P1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlR3JvdXAoXG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RTZWdtZW50LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldExhYmVsRnJvbVNsdWcoZmlyc3RTZWdtZW50KVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghZ3JvdXBlZEJ5Rmlyc3RTZWdtZW50LmhhcyhmaXJzdFNlZ21lbnQpKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBlZEJ5Rmlyc3RTZWdtZW50LnNldChmaXJzdFNlZ21lbnQsIGdyb3VwKTtcbiAgICAgICAgICAgICAgICBncm91cHMucHVzaChncm91cCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZWdtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBncm91cC5saW5rID0gbGluaztcbiAgICAgICAgICAgICAgICBncm91cC5sYWJlbCA9IGxpbmsubGFiZWwgfHwgZ3JvdXAubGFiZWw7XG4gICAgICAgICAgICAgICAgZ3JvdXAudHJhY2tLZXkgPSBsaW5rLnVybCB8fCBmaXJzdFNlZ21lbnQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBncm91cC5jaGlsZHJlbi5wdXNoKGxpbmspO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5tb3ZlSG9tZUdyb3VwRmlyc3QoZ3JvdXBzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUdyb3VwKFxuICAgICAgICBsaW5rOiBCYWJ5bG9uQnV0dG9uSSB8IHVuZGVmaW5lZCxcbiAgICAgICAgdHJhY2tLZXk6IHN0cmluZyxcbiAgICAgICAgZmFsbGJhY2tMYWJlbCA9ICcnLFxuICAgICAgICBpc0hvbWUgPSBmYWxzZVxuICAgICk6IEJhYnlsb25XZWJtYXBHcm91cCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsYWJlbDogbGluaz8ubGFiZWwgfHwgZmFsbGJhY2tMYWJlbCxcbiAgICAgICAgICAgIGxpbmssXG4gICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICB0cmFja0tleTogbGluaz8udXJsIHx8IHRyYWNrS2V5LFxuICAgICAgICAgICAgaXNIb21lLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VXJsU2VnbWVudHModXJsOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmdbXSB7XG4gICAgICAgIGlmICghdXJsKSByZXR1cm4gW107XG5cbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZ2V0VXJsUGF0aCh1cmwpO1xuICAgICAgICBjb25zdCBzZWdtZW50cyA9IHBhdGguc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICAgICAgaWYgKHNlZ21lbnRzWzBdICYmIHRoaXMuaXNMYW5ndWFnZVNlZ21lbnQoc2VnbWVudHNbMF0pKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VnbWVudHMuc2xpY2UoMSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VnbWVudHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRVcmxQYXRoKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgY2xlYW5VcmwgPSB1cmwuc3BsaXQoJyMnKVswXT8uc3BsaXQoJz8nKVswXSA/PyAnJztcblxuICAgICAgICBpZiAoL15bYS16XVthLXpcXGQrXFwtLl0qOlxcL1xcLy9pLnRlc3QoY2xlYW5VcmwpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVVJMKGNsZWFuVXJsKS5wYXRobmFtZTtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbGVhblVybDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjbGVhblVybDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTGFuZ3VhZ2VTZWdtZW50KHNlZ21lbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gL15bYS16XXsyfSgtW2Etel17Mn0pPyQvaS50ZXN0KHNlZ21lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzVG9rZW5WYWx1ZSh2YWx1ZTogYm9vbGVhbiB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gdmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWUudHJpbSgpLmxlbmd0aCA+IDA7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TGFiZWxGcm9tU2x1ZyhzbHVnOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gc2x1Z1xuICAgICAgICAgICAgLnNwbGl0KCctJylcbiAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgIC5tYXAoKHdvcmQpID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpKVxuICAgICAgICAgICAgLmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdmVIb21lR3JvdXBGaXJzdChcbiAgICAgICAgZ3JvdXBzOiBCYWJ5bG9uV2VibWFwR3JvdXBbXVxuICAgICk6IEJhYnlsb25XZWJtYXBHcm91cFtdIHtcbiAgICAgICAgY29uc3QgaG9tZUluZGV4ID0gZ3JvdXBzLmZpbmRJbmRleCgoZ3JvdXApID0+IGdyb3VwLmlzSG9tZSk7XG5cbiAgICAgICAgaWYgKGhvbWVJbmRleCA8PSAwKSByZXR1cm4gZ3JvdXBzO1xuXG4gICAgICAgIGNvbnN0IHNvcnRlZEdyb3VwcyA9IFsuLi5ncm91cHNdO1xuICAgICAgICBjb25zdCBbaG9tZUdyb3VwXSA9IHNvcnRlZEdyb3Vwcy5zcGxpY2UoaG9tZUluZGV4LCAxKTtcblxuICAgICAgICByZXR1cm4gW2hvbWVHcm91cCwgLi4uc29ydGVkR3JvdXBzXTtcbiAgICB9XG59XG4iLCI8c2VjdGlvbiBjbGFzcz1cImJhYnlsb25fX3dlYm1hcCBtYXJnaW4tbWFpblwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBjc19nYXBfeV8zMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy02IGNzX3ByXzExMFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnRyb19pbmZvIG5vLWFsaWduXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAocHJldGl0bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItYmFieWxvbi1keW5hbWljLWhlYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFnXT1cInRhZ3M/LnByZXRpdGxlIHx8ICdoMydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzPVwicHJldGl0bGUgbWItLTEwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwidGV4dENvbG9ycz8ucHJldGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50XT1cInByZXRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2xpYi1iYWJ5bG9uLWR5bmFtaWMtaGVhZGluZz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaWYgKHRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLWJhYnlsb24tZHluYW1pYy1oZWFkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhZ109XCJ0YWdzPy50aXRsZSB8fCAnaDInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3NDbGFzcz1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwidGV4dENvbG9ycz8udGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50XT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2xpYi1iYWJ5bG9uLWR5bmFtaWMtaGVhZGluZz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3VsZEdyb3VwTGlua3MgJiYgZ3JvdXBlZExpbmtzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjc19saXN0IGNzX3N0eWxlXzEgY3NfbXBfMCBiYWJ5bG9uX193ZWJtYXAtbGlzdC0tZ3JvdXBlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoZ3JvdXAgb2YgZ3JvdXBlZExpbmtzOyB0cmFjayBncm91cC50cmFja0tleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5iYWJ5bG9uX193ZWJtYXAtZ3JvdXAtLWhhcy1jaGlsZHJlbl09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cC5jaGlsZHJlbi5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYWJ5bG9uX193ZWJtYXAtZ3JvdXAtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGdyb3VwLmxpbms/LnVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cC5saW5rPy5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cImdyb3VwLmxpbms/LnVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJncm91cC5saW5rPy51cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImxpbmtDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LS1zbWFsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdyb3VwLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LS1zbWFsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZ3JvdXAubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChncm91cC5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJiYWJ5bG9uX193ZWJtYXAtc3VibGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkIG9mIGdyb3VwLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2sgY2hpbGQudXJsIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQubGFiZWwgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cImNoaWxkLnVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cImNoaWxkLnVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtDbGljaygkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtLXNtYWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjaGlsZC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAobGlua3M/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiY3NfbGlzdCBjc19zdHlsZV8xIGNzX21wXzBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChsaW5rIG9mIGxpbmtzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChsaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsaW5rLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwibGluay51cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJsaW5rLnVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJsaW5rQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtLXNtYWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBsaW5rLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAaWYgKGltYWdlKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy02XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3NfcHJfMTEwMSBjc19pbWFnZV9sYXllciBjc19zdHlsZV8zIHBvc2l0aW9uLXJlbGF0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlPy5zcmMgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBSUFBQUFBQUFQLy8veUg1QkFFQUFBQUFMQUFBQUFBQkFBRUFBQUlCUkFBNydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbHRdPVwiaW1hZ2U/LmFsdCA/PyBpbWFnZT8udGl0bGUgPz8gJ3RpdGxlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcy0tcmFkaXVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nPVwibGF6eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L3NlY3Rpb24+XG4iXX0=
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFieWxvbi13ZWJtYXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFieWxvbi9zcmMvbGliL2NvbXBvbmVudHMvY29yZS9iYWJ5bG9uLXdlYm1hcC9iYWJ5bG9uLXdlYm1hcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvY29tcG9uZW50cy9jb3JlL2JhYnlsb24td2VibWFwL2JhYnlsb24td2VibWFwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUkvQyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxjQUFjLENBQUM7OztBQThCOUQsTUFBTSxPQUFPLHNCQUFzQjtJQVJuQztRQWdCWSxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFFakMsaUJBQVksR0FBeUIsRUFBRSxDQUFDO0tBZ00zQztJQTlMRyxJQUNJLEtBQUssQ0FBQyxLQUFtQztRQUN6QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUNJLGVBQWUsQ0FBQyxLQUEwQztRQUMxRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdC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O2tCQVJsQyxTQUFTOytCQUNJLG9CQUFvQixjQUNsQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsOEJBQThCLENBQUMsbUJBR3RDLHVCQUF1QixDQUFDLE1BQU07OEJBR3RDLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFRRixLQUFLO3NCQURSLEtBQUs7Z0JBV0YsZUFBZTtzQkFEbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQmFieWxvblRhZ3NJLCBCYWJ5bG9uVGV4dHNDb2xvcnNJIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBCYWJ5bG9uQnV0dG9uSSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvYmFieWxvbi1idXR0b24uaW50ZXJmYWNlJztcbmltcG9ydCB7IEJhYnlsb25JbWFnZUkgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL2JhYnlsb24taW1hZ2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IEJhYnlsb25EeW5hbWljSGVhZGluZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2VibWFwR3JvdXBDaGlsZCBleHRlbmRzIEJhYnlsb25CdXR0b25JIHtcbiAgICBpc1BhcmVudD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFieWxvbldlYm1hcEdyb3VwIHtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGxpbms/OiBCYWJ5bG9uQnV0dG9uSTtcbiAgICBjaGlsZHJlbjogV2VibWFwR3JvdXBDaGlsZFtdO1xuICAgIHRyYWNrS2V5OiBzdHJpbmc7XG4gICAgaXNIb21lOiBib29sZWFuO1xufVxuXG4vLyBOdWV2YSBpbnRlcmZheiBwYXJhIGNyZWFyIHVuIMOhcmJvbCBqZXLDoXJxdWljbyByZWFsIGludGVybmFtZW50ZVxuaW50ZXJmYWNlIFdlYm1hcE5vZGUge1xuICAgIHNlZ21lbnQ6IHN0cmluZztcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGxpbms/OiBCYWJ5bG9uQnV0dG9uSTtcbiAgICBjaGlsZHJlbjogTWFwPHN0cmluZywgV2VibWFwTm9kZT47XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGliLWJhYnlsb24td2VibWFwJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtSb3V0ZXJNb2R1bGUsIEJhYnlsb25EeW5hbWljSGVhZGluZ0NvbXBvbmVudF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2JhYnlsb24td2VibWFwLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vYmFieWxvbi13ZWJtYXAuY29tcG9uZW50LnNjc3MnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBCYWJ5bG9uV2VibWFwQ29tcG9uZW50IHtcbiAgICBASW5wdXQoKSBwcmV0aXRsZT86IHN0cmluZztcbiAgICBASW5wdXQoKSB0aXRsZT86IHN0cmluZztcbiAgICBASW5wdXQoKSBpbWFnZT86IEJhYnlsb25JbWFnZUk7XG4gICAgQElucHV0KCkgdGFncz86IEJhYnlsb25UYWdzSTtcbiAgICBASW5wdXQoKSB0ZXh0Q29sb3JzPzogQmFieWxvblRleHRzQ29sb3JzSTtcblxuICAgIHByaXZhdGUgX2xpbmtzPzogQmFieWxvbkJ1dHRvbklbXTtcbiAgICBwcml2YXRlIF9ncm91cEJ5Q2F0ZWdvcnkgPSBmYWxzZTtcblxuICAgIGdyb3VwZWRMaW5rczogQmFieWxvbldlYm1hcEdyb3VwW10gPSBbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGxpbmtzKHZhbHVlOiBCYWJ5bG9uQnV0dG9uSVtdIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX2xpbmtzID0gdmFsdWU7XG4gICAgICAgIHRoaXMucmVmcmVzaEdyb3VwZWRMaW5rcygpO1xuICAgIH1cblxuICAgIGdldCBsaW5rcygpOiBCYWJ5bG9uQnV0dG9uSVtdIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xpbmtzO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGdyb3VwQnlDYXRlZ29yeSh2YWx1ZTogYm9vbGVhbiB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fZ3JvdXBCeUNhdGVnb3J5ID0gdGhpcy5oYXNUb2tlblZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoR3JvdXBlZExpbmtzKCk7XG4gICAgfVxuXG4gICAgZ2V0IHNob3VsZEdyb3VwTGlua3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ncm91cEJ5Q2F0ZWdvcnk7XG4gICAgfVxuXG4gICAgbGlua0NsaWNrKGU6IEV2ZW50KSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZnJlc2hHcm91cGVkTGlua3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ3JvdXBlZExpbmtzID0gdGhpcy5fZ3JvdXBCeUNhdGVnb3J5XG4gICAgICAgICAgICA/IHRoaXMuZ3JvdXBMaW5rc0J5VXJsKHRoaXMuX2xpbmtzKVxuICAgICAgICAgICAgOiBbXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdyb3VwTGlua3NCeVVybChcbiAgICAgICAgbGlua3M6IEJhYnlsb25CdXR0b25JW10gfCB1bmRlZmluZWRcbiAgICApOiBCYWJ5bG9uV2VibWFwR3JvdXBbXSB7XG4gICAgICAgIGlmICghbGlua3M/Lmxlbmd0aCkgcmV0dXJuIFtdO1xuXG4gICAgICAgIGNvbnN0IGdyb3VwczogQmFieWxvbldlYm1hcEdyb3VwW10gPSBbXTtcbiAgICAgICAgY29uc3Qgcm9vdE5vZGVzID0gbmV3IE1hcDxzdHJpbmcsIFdlYm1hcE5vZGU+KCk7XG4gICAgICAgIGNvbnN0IGhvbWVMaW5rczogQmFieWxvbkJ1dHRvbklbXSA9IFtdO1xuXG4gICAgICAgIC8vIDEuIENvbnN0cnVpciB1biDDoXJib2wgamVyw6FycXVpY28gYmFzYWRvIGVuIGxhcyBjYXJwZXRhcy9zZWdtZW50b3MgZGUgbGEgVVJMXG4gICAgICAgIGxpbmtzLmZvckVhY2goKGxpbmssIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWdtZW50cyA9IHRoaXMuZ2V0VXJsU2VnbWVudHMobGluay51cmwpO1xuXG4gICAgICAgICAgICBpZiAoc2VnbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaG9tZUxpbmtzLnB1c2gobGluayk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgY3VycmVudExldmVsID0gcm9vdE5vZGVzO1xuICAgICAgICAgICAgc2VnbWVudHMuZm9yRWFjaCgoc2VnbWVudCwgc2VnbWVudEluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50TGV2ZWwuaGFzKHNlZ21lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMZXZlbC5zZXQoc2VnbWVudCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmdldExhYmVsRnJvbVNsdWcoc2VnbWVudCksXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogbmV3IE1hcCgpLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gY3VycmVudExldmVsLmdldChzZWdtZW50KSE7XG5cbiAgICAgICAgICAgICAgICAvLyBTaSBlcyBlbCDDumx0aW1vIHNlZ21lbnRvLCBlbmxhemFtb3MgbG9zIGRhdG9zIHJlYWxlcyBkZWwgYm90w7NuXG4gICAgICAgICAgICAgICAgaWYgKHNlZ21lbnRJbmRleCA9PT0gc2VnbWVudHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlLmxpbmsgPSBsaW5rO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGluay5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5sYWJlbCA9IGxpbmsubGFiZWw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50TGV2ZWwgPSBub2RlLmNoaWxkcmVuO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIDIuIEFwbGFuYXIgZWwgw6FyYm9sIGplcsOhcnF1aWNvIHNpbXVsYW5kbyBzYW5ncsOtYXMgdmlzdWFsZXMgKHBhcmEgMiwgMywgNCwgNS4uLiBuaXZlbGVzKVxuICAgICAgICByb290Tm9kZXMuZm9yRWFjaCgocm9vdE5vZGUsIHJvb3RTZWdtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuY3JlYXRlR3JvdXAoXG4gICAgICAgICAgICAgICAgcm9vdE5vZGUubGluayxcbiAgICAgICAgICAgICAgICByb290U2VnbWVudCxcbiAgICAgICAgICAgICAgICByb290Tm9kZS5sYWJlbFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gRnVuY2nDs24gcmVjdXJzaXZhIHF1ZSBhw7FhZGUgaGlqb3MgYWwgZ3J1cG8gcGxhbm9cbiAgICAgICAgICAgIGNvbnN0IGZsYXR0ZW5DaGlsZHJlbiA9IChub2RlOiBXZWJtYXBOb2RlLCBkZXB0aDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc29ydGVkQ2hpbGRyZW4gPSBBcnJheS5mcm9tKG5vZGUuY2hpbGRyZW4udmFsdWVzKCkpLnNvcnQoXG4gICAgICAgICAgICAgICAgICAgIChhLCBiKSA9PiBhLmxhYmVsLmxvY2FsZUNvbXBhcmUoYi5sYWJlbClcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgc29ydGVkQ2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTWFnaWEgYXF1w606IEVzcGFjaWFkbyB2aXN1YWwgZGUgbm8tc2VwYXJhY2nDs24gc2Vnw7puIHByb2Z1bmRpZGFkIHNpbiByb21wZXIgZWwgSFRNTCBhY3R1YWxcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZW50ID0gJ1xcdTAwQTBcXHUwMEEwXFx1MDBBMFxcdTAwQTAnLnJlcGVhdChkZXB0aCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IGRlcHRoID4gMCA/ICctICcgOiAnJztcblxuICAgICAgICAgICAgICAgICAgICBncm91cC5jaGlsZHJlbi5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLihjaGlsZC5saW5rIHx8IHt9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogY2hpbGQubGluaz8udXJsIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGAke2luZGVudH0ke3ByZWZpeH0ke2NoaWxkLmxhYmVsfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1BhcmVudDogY2hpbGQuY2hpbGRyZW4uc2l6ZSA+IDAsIC8vIDwtLSBBw7FhZGltb3MgZXN0YSBwcm9waWVkYWQgcGFyYSBDU1NcbiAgICAgICAgICAgICAgICAgICAgfSBhcyBXZWJtYXBHcm91cENoaWxkKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBQcm9jZXNhciBlbCBzaWd1aWVudGUgbml2ZWwgZGUgcHJvZnVuZGlkYWQgKHN1Yi1zdWItaXRlbXMpXG4gICAgICAgICAgICAgICAgICAgIGZsYXR0ZW5DaGlsZHJlbihjaGlsZCwgZGVwdGggKyAxKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGZsYXR0ZW5DaGlsZHJlbihyb290Tm9kZSwgMCk7XG4gICAgICAgICAgICBncm91cHMucHVzaChncm91cCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIE1hbmVqYXIgZW5sYWNlcyBcImhvbWVcIlxuICAgICAgICBob21lTGlua3MuZm9yRWFjaCgobGluaywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGdyb3Vwcy5wdXNoKFxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlR3JvdXAobGluaywgYGhvbWUtJHtpbmRleH1gLCBsaW5rLmxhYmVsLCB0cnVlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubW92ZUhvbWVHcm91cEZpcnN0KGdyb3Vwcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVHcm91cChcbiAgICAgICAgbGluazogQmFieWxvbkJ1dHRvbkkgfCB1bmRlZmluZWQsXG4gICAgICAgIHRyYWNrS2V5OiBzdHJpbmcsXG4gICAgICAgIGZhbGxiYWNrTGFiZWwgPSAnJyxcbiAgICAgICAgaXNIb21lID0gZmFsc2VcbiAgICApOiBCYWJ5bG9uV2VibWFwR3JvdXAge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGFiZWw6IGxpbms/LmxhYmVsIHx8IGZhbGxiYWNrTGFiZWwsXG4gICAgICAgICAgICBsaW5rLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgdHJhY2tLZXk6IGxpbms/LnVybCB8fCB0cmFja0tleSxcbiAgICAgICAgICAgIGlzSG9tZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFVybFNlZ21lbnRzKHVybDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nW10ge1xuICAgICAgICBpZiAoIXVybCkgcmV0dXJuIFtdO1xuXG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmdldFVybFBhdGgodXJsKTtcbiAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBwYXRoLnNwbGl0KCcvJykuZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgICAgIGlmIChzZWdtZW50c1swXSAmJiB0aGlzLmlzTGFuZ3VhZ2VTZWdtZW50KHNlZ21lbnRzWzBdKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNlZ21lbnRzLnNsaWNlKDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlZ21lbnRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VXJsUGF0aCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGNsZWFuVXJsID0gdXJsLnNwbGl0KCcjJylbMF0/LnNwbGl0KCc/JylbMF0gPz8gJyc7XG5cbiAgICAgICAgaWYgKC9eW2Etel1bYS16XFxkK1xcLS5dKjpcXC9cXC8vaS50ZXN0KGNsZWFuVXJsKSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVSTChjbGVhblVybCkucGF0aG5hbWU7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xlYW5Vcmw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2xlYW5Vcmw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0xhbmd1YWdlU2VnbWVudChzZWdtZW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIC9eW2Etel17Mn0oLVthLXpdezJ9KT8kL2kudGVzdChzZWdtZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1Rva2VuVmFsdWUodmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykgcmV0dXJuIHZhbHVlO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIHZhbHVlLnRyaW0oKS5sZW5ndGggPiAwO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldExhYmVsRnJvbVNsdWcoc2x1Zzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHNsdWdcbiAgICAgICAgICAgIC5zcGxpdCgnLScpXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAubWFwKCh3b3JkKSA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAgICAgICAgIC5qb2luKCcgJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtb3ZlSG9tZUdyb3VwRmlyc3QoXG4gICAgICAgIGdyb3VwczogQmFieWxvbldlYm1hcEdyb3VwW11cbiAgICApOiBCYWJ5bG9uV2VibWFwR3JvdXBbXSB7XG4gICAgICAgIGNvbnN0IGhvbWVJbmRleCA9IGdyb3Vwcy5maW5kSW5kZXgoKGdyb3VwKSA9PiBncm91cC5pc0hvbWUpO1xuXG4gICAgICAgIGlmIChob21lSW5kZXggPD0gMCkgcmV0dXJuIGdyb3VwcztcblxuICAgICAgICBjb25zdCBzb3J0ZWRHcm91cHMgPSBbLi4uZ3JvdXBzXTtcbiAgICAgICAgY29uc3QgW2hvbWVHcm91cF0gPSBzb3J0ZWRHcm91cHMuc3BsaWNlKGhvbWVJbmRleCwgMSk7XG5cbiAgICAgICAgcmV0dXJuIFtob21lR3JvdXAsIC4uLnNvcnRlZEdyb3Vwc107XG4gICAgfVxufVxuIiwiPHNlY3Rpb24gY2xhc3M9XCJiYWJ5bG9uX193ZWJtYXAgbWFyZ2luLW1haW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY3NfZ2FwX3lfMzBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNiBjc19wcl8xMTBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW50cm9faW5mbyBuby1hbGlnblwiPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKHByZXRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLWJhYnlsb24tZHluYW1pYy1oZWFkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhZ109XCJ0YWdzPy5wcmV0aXRsZSB8fCAnaDMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3NDbGFzcz1cInByZXRpdGxlIG1iLS0xMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cInRleHRDb2xvcnM/LnByZXRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29udGVudF09XCJwcmV0aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9saWItYmFieWxvbi1keW5hbWljLWhlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmICh0aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1iYWJ5bG9uLWR5bmFtaWMtaGVhZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWddPVwidGFncz8udGl0bGUgfHwgJ2gyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3M9XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cInRleHRDb2xvcnM/LnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29udGVudF09XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9saWItYmFieWxvbi1keW5hbWljLWhlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzaG91bGRHcm91cExpbmtzICYmIGdyb3VwZWRMaW5rcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3NfbGlzdCBjc19zdHlsZV8xIGNzX21wXzAgYmFieWxvbl9fd2VibWFwLWxpc3QtLWdyb3VwZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGdyb3VwIG9mIGdyb3VwZWRMaW5rczsgdHJhY2sgZ3JvdXAudHJhY2tLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYmFieWxvbl9fd2VibWFwLWdyb3VwLS1oYXMtY2hpbGRyZW5dPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAuY2hpbGRyZW4ubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFieWxvbl9fd2VibWFwLWdyb3VwLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChncm91cC5saW5rPy51cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAubGluaz8ubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJncm91cC5saW5rPy51cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiZ3JvdXAubGluaz8udXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJsaW5rQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC0tc21hbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBncm91cC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC0tc21hbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdyb3VwLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZ3JvdXAuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYmFieWxvbl9fd2VibWFwLXN1Ymxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCBvZiBncm91cC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrIGNoaWxkLnVybCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmxhYmVsIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLXBhcmVudF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuaXNQYXJlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJjaGlsZC51cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJjaGlsZC51cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQ2xpY2soJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LS1zbWFsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY2hpbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYgKGxpbmtzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImNzX2xpc3QgY3Nfc3R5bGVfMSBjc19tcF8wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAobGluayBvZiBsaW5rczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobGluaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibGluay5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cImxpbmsudXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwibGluay51cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibGlua0NsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LS1zbWFsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbGluay5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmIChpbWFnZSkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNiBiYWJ5bG9uX193ZWJtYXAtc3RpY2t5LWNvbFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNzX3ByXzExMDEgY3NfaW1hZ2VfbGF5ZXIgY3Nfc3R5bGVfMyBwb3NpdGlvbi1zdGlja3lcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2U/LnNyYyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFJQUFBQUFBQVAvLy95SDVCQUVBQUFBQUxBQUFBQUFCQUFFQUFBSUJSQUE3J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsdF09XCJpbWFnZT8uYWx0ID8/IGltYWdlPy50aXRsZSA/PyAndGl0bGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNzLS1yYWRpdXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmc9XCJsYXp5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvc2VjdGlvbj5cbiJdfQ==