raise-common-lib-new 0.0.63 → 0.0.64

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 (221) hide show
  1. package/esm2022/lib/actions/toolbar/index.component.mjs +4 -3
  2. package/esm2022/lib/actions/toolbar-item/index.component.mjs +2 -2
  3. package/esm2022/lib/common-grid/grid-action/grid-action-item/grid-action-item.component.mjs +1 -1
  4. package/esm2022/lib/common-grid/grid-action/grid-action.component.mjs +3 -2
  5. package/esm2022/lib/common-grid/index.component.mjs +6 -3
  6. package/esm2022/lib/dashboard/api.mjs +33 -0
  7. package/esm2022/lib/dashboard/bar-charts/bar-charts.component.mjs +430 -0
  8. package/esm2022/lib/dashboard/bar-charts/utils.mjs +18 -0
  9. package/esm2022/lib/dashboard/dashboard-properties/data-mart-new/data-mart-new.component.mjs +442 -0
  10. package/esm2022/lib/dashboard/dashboard.service.mjs +295 -0
  11. package/esm2022/lib/dashboard/dashboardPorlets.service.mjs +2169 -0
  12. package/esm2022/lib/dashboard/dialog-group/download/index.component.mjs +212 -0
  13. package/esm2022/lib/dashboard/dialog-group/empty-icon-prompt/empty-icon-prompt.component.mjs +36 -0
  14. package/esm2022/lib/dashboard/gadget-group/gadget-pivot/gadget-pivot.component.mjs +3211 -0
  15. package/esm2022/lib/dashboard/gadget-group/gadget-pivot-chart/gadget-pivot.component.mjs +3117 -0
  16. package/esm2022/lib/dashboard/gadget-group/gadget-table/gadget-table.component.mjs +1099 -0
  17. package/esm2022/lib/dashboard/gadget-group/gadget-transpose/gadget-transpose.component.mjs +583 -0
  18. package/esm2022/lib/dashboard/pane-group-new.component.mjs +2031 -0
  19. package/esm2022/lib/dashboard/sidebar-iconlist/field-filter/field-filter.component.mjs +637 -0
  20. package/esm2022/lib/dashboard/sidebar-iconlist/field-format/field-format.component.mjs +753 -0
  21. package/esm2022/lib/dashboard/sidebar-iconlist/portlet-type-new/portlet-type-new.component.mjs +216 -0
  22. package/esm2022/lib/dashboard/sidebar-iconlist/sidebar-iconlist-new.component.mjs +1239 -0
  23. package/esm2022/lib/dialog/common-delete-dialog/index.component.mjs +1 -1
  24. package/esm2022/lib/dialog/common-dialog/index.component.mjs +16 -5
  25. package/esm2022/lib/float-box/index.component.mjs +18 -4
  26. package/esm2022/lib/form/checkbox-group/index.component.mjs +35 -5
  27. package/esm2022/lib/form/drawer-form/drawer-form.component.mjs +177 -76
  28. package/esm2022/lib/layout/drawer/index.component.mjs +2 -2
  29. package/esm2022/lib/layout/page-list/index.component.mjs +9 -3
  30. package/esm2022/lib/layout/page-tab/index.component.mjs +5 -3
  31. package/esm2022/lib/layout/rs-stepper/constants.mjs +2 -0
  32. package/esm2022/lib/layout/rs-stepper/index.component.mjs +148 -0
  33. package/esm2022/lib/raise-common-lib.module.mjs +114 -7
  34. package/esm2022/lib/service/InjectionToken.mjs +5 -0
  35. package/esm2022/lib/service/keep-alive.service.mjs +2 -2
  36. package/esm2022/lib/smart-popup/index.component.mjs +1084 -0
  37. package/esm2022/public-api.mjs +19 -1
  38. package/fesm2022/raise-common-lib-new.mjs +18037 -220
  39. package/fesm2022/raise-common-lib-new.mjs.map +1 -1
  40. package/lib/common-grid/index.component.d.ts +2 -1
  41. package/lib/dashboard/api.d.ts +24 -0
  42. package/lib/dashboard/bar-charts/bar-charts.component.d.ts +63 -0
  43. package/lib/dashboard/bar-charts/utils.d.ts +1 -0
  44. package/lib/dashboard/dashboard-properties/data-mart-new/data-mart-new.component.d.ts +52 -0
  45. package/lib/dashboard/dashboard.service.d.ts +152 -0
  46. package/lib/dashboard/dashboardPorlets.service.d.ts +214 -0
  47. package/lib/dashboard/dialog-group/download/index.component.d.ts +36 -0
  48. package/lib/dashboard/dialog-group/empty-icon-prompt/empty-icon-prompt.component.d.ts +15 -0
  49. package/lib/dashboard/gadget-group/gadget-pivot/gadget-pivot.component.d.ts +128 -0
  50. package/lib/dashboard/gadget-group/gadget-pivot-chart/gadget-pivot.component.d.ts +131 -0
  51. package/lib/dashboard/gadget-group/gadget-table/gadget-table.component.d.ts +77 -0
  52. package/lib/dashboard/gadget-group/gadget-transpose/gadget-transpose.component.d.ts +47 -0
  53. package/lib/dashboard/pane-group-new.component.d.ts +169 -0
  54. package/lib/dashboard/sidebar-iconlist/field-filter/field-filter.component.d.ts +56 -0
  55. package/lib/dashboard/sidebar-iconlist/field-format/field-format.component.d.ts +62 -0
  56. package/lib/dashboard/sidebar-iconlist/portlet-type-new/portlet-type-new.component.d.ts +30 -0
  57. package/lib/dashboard/sidebar-iconlist/sidebar-iconlist-new.component.d.ts +150 -0
  58. package/lib/dialog/common-dialog/index.component.d.ts +3 -1
  59. package/lib/float-box/index.component.d.ts +4 -3
  60. package/lib/form/checkbox-group/index.component.d.ts +5 -0
  61. package/lib/form/drawer-form/drawer-form.component.d.ts +21 -8
  62. package/lib/layout/page-list/index.component.d.ts +3 -1
  63. package/lib/layout/page-tab/index.component.d.ts +1 -0
  64. package/lib/layout/rs-stepper/constants.d.ts +5 -0
  65. package/lib/layout/rs-stepper/index.component.d.ts +31 -0
  66. package/lib/raise-common-lib.module.d.ts +61 -40
  67. package/lib/service/InjectionToken.d.ts +4 -0
  68. package/lib/smart-popup/index.component.d.ts +60 -0
  69. package/package.json +1 -1
  70. package/public-api.d.ts +18 -0
  71. package/src/assets/img/dashboard_icon/AddPerson.svg +4 -0
  72. package/src/assets/img/dashboard_icon/Angle-double-left.svg +12 -0
  73. package/src/assets/img/dashboard_icon/Angle-double-right.svg +12 -0
  74. package/src/assets/img/dashboard_icon/Arrow_collapse.svg +3 -0
  75. package/src/assets/img/dashboard_icon/Arrow_expand.svg +3 -0
  76. package/src/assets/img/dashboard_icon/Close.svg +4 -0
  77. package/src/assets/img/dashboard_icon/Edit_label.svg +3 -0
  78. package/src/assets/img/dashboard_icon/RemoveMini.svg +3 -0
  79. package/src/assets/img/dashboard_icon/ShareTo.svg +3 -0
  80. package/src/assets/img/dashboard_icon/add-dashboard.svg +4 -0
  81. package/src/assets/img/dashboard_icon/add-tab.svg +4 -0
  82. package/src/assets/img/dashboard_icon/angle-left.svg +12 -0
  83. package/src/assets/img/dashboard_icon/angle-right.svg +12 -0
  84. package/src/assets/img/dashboard_icon/area-white.svg +3 -0
  85. package/src/assets/img/dashboard_icon/area.svg +3 -0
  86. package/src/assets/img/dashboard_icon/bar-white.svg +14 -0
  87. package/src/assets/img/dashboard_icon/bar.svg +14 -0
  88. package/src/assets/img/dashboard_icon/basic-icon-filter.svg +14 -0
  89. package/src/assets/img/dashboard_icon/chart-combined-active.svg +7 -0
  90. package/src/assets/img/dashboard_icon/chart-combined.svg +7 -0
  91. package/src/assets/img/dashboard_icon/column-white.svg +14 -0
  92. package/src/assets/img/dashboard_icon/column.svg +26 -0
  93. package/src/assets/img/dashboard_icon/customize.png +0 -0
  94. package/src/assets/img/dashboard_icon/dashboard-description.svg +18 -0
  95. package/src/assets/img/dashboard_icon/dashboard-download.svg +18 -0
  96. package/src/assets/img/dashboard_icon/dashboard-drag.svg +28 -0
  97. package/src/assets/img/dashboard_icon/dashboard-duplicate.svg +24 -0
  98. package/src/assets/img/dashboard_icon/dashboard-icon.svg +12 -0
  99. package/src/assets/img/dashboard_icon/dashboard-properties.svg +18 -0
  100. package/src/assets/img/dashboard_icon/dashboard-rename.svg +18 -0
  101. package/src/assets/img/dashboard_icon/dashboard-share.svg +20 -0
  102. package/src/assets/img/dashboard_icon/dashboard-tab-delete.svg +4 -0
  103. package/src/assets/img/dashboard_icon/dashboard_Share.svg +3 -0
  104. package/src/assets/img/dashboard_icon/dashboard_ToolsHide.svg +4 -0
  105. package/src/assets/img/dashboard_icon/datamart_.svg +5 -0
  106. package/src/assets/img/dashboard_icon/datamart_Admin.svg +3 -0
  107. package/src/assets/img/dashboard_icon/datamart_Asset Portfolio.svg +4 -0
  108. package/src/assets/img/dashboard_icon/datamart_Bank.svg +3 -0
  109. package/src/assets/img/dashboard_icon/datamart_CRM.svg +6 -0
  110. package/src/assets/img/dashboard_icon/datamart_Company.svg +6 -0
  111. package/src/assets/img/dashboard_icon/datamart_Compliance.svg +3 -0
  112. package/src/assets/img/dashboard_icon/datamart_Contact.svg +3 -0
  113. package/src/assets/img/dashboard_icon/datamart_DASHBOARD.svg +4 -0
  114. package/src/assets/img/dashboard_icon/datamart_DOCX.svg +4 -0
  115. package/src/assets/img/dashboard_icon/datamart_ESG.svg +4 -0
  116. package/src/assets/img/dashboard_icon/datamart_Financials - Company.svg +3 -0
  117. package/src/assets/img/dashboard_icon/datamart_Fund.svg +4 -0
  118. package/src/assets/img/dashboard_icon/datamart_FundFinancial.svg +4 -0
  119. package/src/assets/img/dashboard_icon/datamart_HTML.svg +4 -0
  120. package/src/assets/img/dashboard_icon/datamart_Logs.svg +8 -0
  121. package/src/assets/img/dashboard_icon/datamart_PDF.svg +5 -0
  122. package/src/assets/img/dashboard_icon/datamart_Project.svg +3 -0
  123. package/src/assets/img/dashboard_icon/datamart_Templates.svg +7 -0
  124. package/src/assets/img/dashboard_icon/datamart_Track Change.svg +3 -0
  125. package/src/assets/img/dashboard_icon/datamart_VirtualGroup.svg +5 -0
  126. package/src/assets/img/dashboard_icon/datamart_XLS.svg +4 -0
  127. package/src/assets/img/dashboard_icon/desktop_selected.svg +10 -0
  128. package/src/assets/img/dashboard_icon/desktop_unselected.svg +10 -0
  129. package/src/assets/img/dashboard_icon/favourite-grey.svg +3 -0
  130. package/src/assets/img/dashboard_icon/favourite-yellow.svg +3 -0
  131. package/src/assets/img/dashboard_icon/forms-checkbox-square-tick.svg +3 -0
  132. package/src/assets/img/dashboard_icon/ftable-white.svg +24 -0
  133. package/src/assets/img/dashboard_icon/ftable.svg +24 -0
  134. package/src/assets/img/dashboard_icon/gadget-basic-arrow-down.svg +14 -0
  135. package/src/assets/img/dashboard_icon/gadget-basic-format.svg +21 -0
  136. package/src/assets/img/dashboard_icon/gadget-basic-sub-total.svg +18 -0
  137. package/src/assets/img/dashboard_icon/gadget-basic-total-1.svg +9 -0
  138. package/src/assets/img/dashboard_icon/gadget-basic-total.svg +16 -0
  139. package/src/assets/img/dashboard_icon/gadget-columns.svg +12 -0
  140. package/src/assets/img/dashboard_icon/gadget-delete.svg +18 -0
  141. package/src/assets/img/dashboard_icon/gadget-download.svg +18 -0
  142. package/src/assets/img/dashboard_icon/gadget-duplicate.svg +24 -0
  143. package/src/assets/img/dashboard_icon/gadget-edit.svg +18 -0
  144. package/src/assets/img/dashboard_icon/gadget-filters-light.svg +9 -0
  145. package/src/assets/img/dashboard_icon/gadget-filters.svg +9 -0
  146. package/src/assets/img/dashboard_icon/gadget-format-0.svg +8 -0
  147. package/src/assets/img/dashboard_icon/gadget-format-1.svg +8 -0
  148. package/src/assets/img/dashboard_icon/gadget-format.svg +19 -0
  149. package/src/assets/img/dashboard_icon/gadget-fullscreen.svg +30 -0
  150. package/src/assets/img/dashboard_icon/gadget-settings.svg +18 -0
  151. package/src/assets/img/dashboard_icon/gadget-sub-total-0.svg +18 -0
  152. package/src/assets/img/dashboard_icon/gadget-sub-total-1.svg +18 -0
  153. package/src/assets/img/dashboard_icon/gadget-thumbnail.svg +12 -0
  154. package/src/assets/img/dashboard_icon/gadget-type-light.svg +15 -0
  155. package/src/assets/img/dashboard_icon/gadget-type.svg +16 -0
  156. package/src/assets/img/dashboard_icon/geo-white.svg +14 -0
  157. package/src/assets/img/dashboard_icon/geo.svg +14 -0
  158. package/src/assets/img/dashboard_icon/historic-IRR-white.svg +9 -0
  159. package/src/assets/img/dashboard_icon/historic-IRR.svg +5 -0
  160. package/src/assets/img/dashboard_icon/information-1.png +0 -0
  161. package/src/assets/img/dashboard_icon/information-grey.svg +4 -0
  162. package/src/assets/img/dashboard_icon/menu-change-group.svg +3 -0
  163. package/src/assets/img/dashboard_icon/menu-close.svg +20 -0
  164. package/src/assets/img/dashboard_icon/menu-delete.svg +18 -0
  165. package/src/assets/img/dashboard_icon/menu-description.svg +19 -0
  166. package/src/assets/img/dashboard_icon/menu-download.svg +24 -0
  167. package/src/assets/img/dashboard_icon/menu-drag.svg +28 -0
  168. package/src/assets/img/dashboard_icon/menu-duplicate.svg +26 -0
  169. package/src/assets/img/dashboard_icon/menu-properties.svg +18 -0
  170. package/src/assets/img/dashboard_icon/menu-rename.svg +23 -0
  171. package/src/assets/img/dashboard_icon/menu-share.svg +20 -0
  172. package/src/assets/img/dashboard_icon/menu-toolbar.svg +10 -0
  173. package/src/assets/img/dashboard_icon/mobile_selected.svg +10 -0
  174. package/src/assets/img/dashboard_icon/mobile_unselected.svg +10 -0
  175. package/src/assets/img/dashboard_icon/more_Save.svg +3 -0
  176. package/src/assets/img/dashboard_icon/more_View.svg +3 -0
  177. package/src/assets/img/dashboard_icon/multi-series-white.svg +20 -0
  178. package/src/assets/img/dashboard_icon/multi-series.svg +6 -0
  179. package/src/assets/img/dashboard_icon/paint-bucket.svg +6 -0
  180. package/src/assets/img/dashboard_icon/pie-white.svg +16 -0
  181. package/src/assets/img/dashboard_icon/pie.svg +16 -0
  182. package/src/assets/img/dashboard_icon/pivot-chart-active.svg +8 -0
  183. package/src/assets/img/dashboard_icon/pivot-chart.svg +8 -0
  184. package/src/assets/img/dashboard_icon/pivot-white.svg +8 -0
  185. package/src/assets/img/dashboard_icon/pivot.svg +8 -0
  186. package/src/assets/img/dashboard_icon/pivot_column.svg +9 -0
  187. package/src/assets/img/dashboard_icon/pivot_column_active.svg +9 -0
  188. package/src/assets/img/dashboard_icon/pivot_line.svg +12 -0
  189. package/src/assets/img/dashboard_icon/pivot_line_active.svg +12 -0
  190. package/src/assets/img/dashboard_icon/print-A2.svg +3 -0
  191. package/src/assets/img/dashboard_icon/radar-white.svg +19 -0
  192. package/src/assets/img/dashboard_icon/radar.svg +19 -0
  193. package/src/assets/img/dashboard_icon/saveAs.svg +3 -0
  194. package/src/assets/img/dashboard_icon/search_input.svg +4 -0
  195. package/src/assets/img/dashboard_icon/table-3-white.svg +16 -0
  196. package/src/assets/img/dashboard_icon/table-3.svg +16 -0
  197. package/src/assets/img/dashboard_icon/table-filter-off.svg +5 -0
  198. package/src/assets/img/dashboard_icon/table-filter-on.svg +5 -0
  199. package/src/assets/img/dashboard_icon/tag_dashboard_selected.svg +3 -0
  200. package/src/assets/img/dashboard_icon/tag_dashboard_unselected.svg +3 -0
  201. package/src/assets/img/dashboard_icon/tag_share_selected.svg +3 -0
  202. package/src/assets/img/dashboard_icon/tag_share_unselected.svg +3 -0
  203. package/src/assets/img/dashboard_icon/tick.svg +26 -0
  204. package/src/assets/img/dashboard_icon/toolbar_AddDashboard.svg +5 -0
  205. package/src/assets/img/dashboard_icon/toolbar_AddGroup.svg +3 -0
  206. package/src/assets/img/dashboard_icon/toolbar_AddReport.svg +3 -0
  207. package/src/assets/img/dashboard_icon/toolbar_CollapseAll.svg +3 -0
  208. package/src/assets/img/dashboard_icon/toolbar_Customize.svg +3 -0
  209. package/src/assets/img/dashboard_icon/toolbar_DeleteDark.svg +3 -0
  210. package/src/assets/img/dashboard_icon/toolbar_Duplicate.svg +3 -0
  211. package/src/assets/img/dashboard_icon/toolbar_Edit.svg +3 -0
  212. package/src/assets/img/dashboard_icon/toolbar_ExpandAll.svg +3 -0
  213. package/src/assets/img/dashboard_icon/toolbar_Search.svg +3 -0
  214. package/src/assets/img/dashboard_icon/topbar-menu.svg +33 -0
  215. package/src/assets/img/dashboard_icon/topbar-refresh.svg +17 -0
  216. package/src/assets/img/dashboard_icon/topbar-tool-off.svg +12 -0
  217. package/src/assets/img/dashboard_icon/topbar-tool-on.svg +12 -0
  218. package/src/assets/img/dashboard_icon/trade-up-white.svg +14 -0
  219. package/src/assets/img/dashboard_icon/trade-up.svg +14 -0
  220. package/src/assets/img/dashboard_icon/transpose-white.svg +16 -0
  221. package/src/assets/img/dashboard_icon/transpose.svg +16 -0
@@ -0,0 +1,442 @@
1
+ import { Component, Inject, Optional, } from "@angular/core";
2
+ import { MAT_DIALOG_DATA } from "@angular/material/dialog";
3
+ import { throttle } from "lodash";
4
+ import { API_SERVICE_TOKEN, PBF_TOKEN } from "../../../service/InjectionToken";
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/material/dialog";
7
+ import * as i2 from "../../../service/dialog.service";
8
+ import * as i3 from "../../api";
9
+ import * as i4 from "../../dashboard.service";
10
+ import * as i5 from "../../dashboardPorlets.service";
11
+ import * as i6 from "@angular/common";
12
+ import * as i7 from "@angular/forms";
13
+ import * as i8 from "@angular/material/checkbox";
14
+ import * as i9 from "@angular/material/input";
15
+ import * as i10 from "@syncfusion/ej2-angular-popups";
16
+ export class DataMartNewComponent {
17
+ data;
18
+ dialogRef;
19
+ dialogService;
20
+ dialog;
21
+ api;
22
+ dashboardService;
23
+ DashboardPorletsService;
24
+ ref;
25
+ pbf;
26
+ http;
27
+ translation;
28
+ userInfo;
29
+ lang;
30
+ entityType;
31
+ config;
32
+ fatherList = [];
33
+ sonList = [];
34
+ grandsonList = [];
35
+ fatherId = "";
36
+ sonIds = [];
37
+ selectedAll = false;
38
+ orginGrandData = [];
39
+ disabled = false;
40
+ cacheEntityType = "";
41
+ isSelectAllDisabled = false;
42
+ constructor(data, dialogRef, dialogService, dialog, api, dashboardService, DashboardPorletsService, ref, pbf, http) {
43
+ this.data = data;
44
+ this.dialogRef = dialogRef;
45
+ this.dialogService = dialogService;
46
+ this.dialog = dialog;
47
+ this.api = api;
48
+ this.dashboardService = dashboardService;
49
+ this.DashboardPorletsService = DashboardPorletsService;
50
+ this.ref = ref;
51
+ this.pbf = pbf;
52
+ this.http = http;
53
+ }
54
+ ngOnInit() {
55
+ this.getInfo();
56
+ this.getSources();
57
+ }
58
+ ngAfterViewInit() {
59
+ this.pbf.introStep.next("next");
60
+ }
61
+ getInfo() {
62
+ this.translation = JSON.parse(localStorage.getItem("translation"));
63
+ this.userInfo = JSON.parse(localStorage.getItem("userInfo"));
64
+ this.lang = this.pbf.getLanguageParams();
65
+ this.config =
66
+ this.data && this.data.dashboard
67
+ ? JSON.parse(this.data.dashboard.config)
68
+ : {};
69
+ }
70
+ getSources() {
71
+ const dataObj = {
72
+ accountId: this.userInfo.accountId,
73
+ language: this.lang,
74
+ dashboardVersion: 2,
75
+ };
76
+ this.pbf.pageLoading = true;
77
+ this.pbf.pageLoading_.next(true);
78
+ this.http.post(this.api.urlList.GetSources, dataObj, (res) => {
79
+ this.pbf.pageLoading = false;
80
+ this.pbf.pageLoading_.next(true);
81
+ if (res) {
82
+ this.DashboardPorletsService.sourcesData[this.data.dashboard.id] = res;
83
+ this.DashboardPorletsService.GetSourcesRes = res;
84
+ this.fatherList = res;
85
+ if (this.config.datamartId) {
86
+ // this.disabled = true;
87
+ this.fatherId = this.config.datamartId;
88
+ this.sonIds = this.config.datamartViewId
89
+ ? this.config.datamartViewId.split(",")
90
+ : this.config.views
91
+ ? this.config.views.map((item) => item.datamartViewId)
92
+ : [];
93
+ let datasource = res.find((el) => el.id == this.fatherId);
94
+ if (datasource) {
95
+ this.getdataMart(datasource, true);
96
+ if (!this.cacheEntityType && this.config.datamartId) {
97
+ this.cacheEntityType = this.entityType;
98
+ }
99
+ let dataview = datasource.views.filter((el) => this.sonIds.includes(el.id));
100
+ this.handleItemChange(dataview, true);
101
+ this.getSelectedAllStatus();
102
+ }
103
+ }
104
+ }
105
+ });
106
+ }
107
+ getSelectedAllStatus() {
108
+ let num = 0;
109
+ this.sonList.forEach((son) => {
110
+ if (son.checked && son.langCode !== "FINANCIAL_FIGURES") {
111
+ num++;
112
+ }
113
+ });
114
+ if (num === this.sonList.length - 1)
115
+ this.selectedAll = true;
116
+ else
117
+ this.selectedAll = false;
118
+ }
119
+ nextStep() {
120
+ this.pbf.introStep.next("next");
121
+ }
122
+ getdataMart(item, isInit = false) {
123
+ if (this.cacheEntityType && this.cacheEntityType === item.entityType) {
124
+ return;
125
+ }
126
+ if (!isInit &&
127
+ this.cacheEntityType &&
128
+ this.cacheEntityType !== item.entityType) {
129
+ const _title = this.translation.ARE_YOU_SURE_TO_CHANGE_DATA_MART ||
130
+ ".Are you sure to change entity type of data mart? Dashboard will be reset since entity type is changed.";
131
+ const _no = this.translation.NO || ".NO";
132
+ const _yes = this.translation.YES || ".YES";
133
+ // const dialogRef = this.layoutUtilsService.alertElement(
134
+ // this.translation.WARNING || ".WARNING",
135
+ // _title,
136
+ // _no,
137
+ // _yes,
138
+ // true,
139
+ // true,
140
+ // "480px",
141
+ // "324px"
142
+ // );
143
+ const dialogRef = this.dialogService.showCommonDilaog({
144
+ title: this.translation.WARNING || ".WARNING",
145
+ description: _title,
146
+ saveBtnLabel: _yes,
147
+ cancelBtnLabel: _no,
148
+ });
149
+ dialogRef.afterClosed().subscribe((res) => {
150
+ if (!res) {
151
+ return;
152
+ }
153
+ this.setFatherId(item, isInit);
154
+ });
155
+ return;
156
+ }
157
+ if (!item) {
158
+ return;
159
+ }
160
+ this.setFatherId(item, isInit);
161
+ }
162
+ setFatherId(item, isInit) {
163
+ this.fatherId = item.id;
164
+ this.entityType = item.entityType;
165
+ let isFiguresChecked = false;
166
+ let isOtherChecked = false;
167
+ if (item.views.find((item) => item.langCode === "FINANCIAL_FIGURES" && this.sonIds.includes(item.id))) {
168
+ isFiguresChecked = true;
169
+ this.isSelectAllDisabled = true;
170
+ }
171
+ if (item.views.find((item) => item.langCode !== "FINANCIAL_FIGURES" && this.sonIds.includes(item.id)))
172
+ isOtherChecked = true;
173
+ this.sonList = item.views.map((item) => {
174
+ let isDisabled = (isFiguresChecked && item.langCode !== "FINANCIAL_FIGURES") ||
175
+ (item.langCode === "FINANCIAL_FIGURES" && isOtherChecked);
176
+ return {
177
+ ...item,
178
+ checked: this.cacheEntityType && this.cacheEntityType !== this.entityType
179
+ ? false
180
+ : this.sonIds.includes(item.id),
181
+ disabled: this.cacheEntityType && this.cacheEntityType !== this.entityType
182
+ ? false
183
+ : isDisabled,
184
+ };
185
+ });
186
+ this.cacheEntityType = item.entityType;
187
+ if (!isInit) {
188
+ this.sonIds = [];
189
+ this.grandsonList = [];
190
+ this.orginGrandData = [];
191
+ this.selectedAll = false;
192
+ this.isSelectAllDisabled = false;
193
+ if (this.cacheEntityType && this.cacheEntityType !== item.entityType) {
194
+ this.sonList = item.views.map((item) => {
195
+ return {
196
+ ...item,
197
+ checked: false,
198
+ disabled: false,
199
+ };
200
+ });
201
+ }
202
+ }
203
+ }
204
+ handleItemChange(data, val) {
205
+ if (!data)
206
+ return false;
207
+ if (val) {
208
+ if (Array.isArray(data)) {
209
+ data.forEach((item) => {
210
+ if (!this.sonIds.includes(item.id)) {
211
+ this.sonIds.push(item.id);
212
+ }
213
+ if (Array.isArray(item.tables)) {
214
+ item.tables.forEach((child) => {
215
+ if (!this.grandsonList.some((el) => el.id === child.id)) {
216
+ this.grandsonList.push({
217
+ ...child,
218
+ });
219
+ }
220
+ });
221
+ }
222
+ });
223
+ }
224
+ else {
225
+ // financial figures can’t be selected together with other groups
226
+ if (data.langCode !== "FINANCIAL_FIGURES") {
227
+ this.sonList.forEach((item) => {
228
+ if (item.langCode === "FINANCIAL_FIGURES")
229
+ item.disabled = true;
230
+ });
231
+ }
232
+ else {
233
+ if (!this.sonList.find((item) => item.checked && item.langCode !== "FINANCIAL_FIGURES")) {
234
+ this.sonList.forEach((item) => {
235
+ if (item.langCode !== "FINANCIAL_FIGURES")
236
+ item.disabled = true;
237
+ });
238
+ this.isSelectAllDisabled = true;
239
+ }
240
+ }
241
+ data.tables.forEach((item) => {
242
+ if (!this.grandsonList.some((el) => el.id === item.id)) {
243
+ this.grandsonList.push({
244
+ ...item,
245
+ });
246
+ }
247
+ });
248
+ if (!this.sonIds.includes(data.id)) {
249
+ this.sonIds.push(data.id);
250
+ }
251
+ }
252
+ }
253
+ else {
254
+ this.grandsonList = [];
255
+ this.sonList.forEach((item) => {
256
+ if (data.langCode === "FINANCIAL_FIGURES") {
257
+ item.disabled = false;
258
+ this.isSelectAllDisabled = false;
259
+ }
260
+ if (item.id == data.id) {
261
+ item.checked = val;
262
+ }
263
+ if (item.checked) {
264
+ item.tables.forEach((sonItem) => {
265
+ if (!this.grandsonList.some((el) => el.id === sonItem.id)) {
266
+ this.grandsonList.push({
267
+ ...sonItem,
268
+ });
269
+ }
270
+ });
271
+ }
272
+ });
273
+ if (data.langCode !== "FINANCIAL_FIGURES" &&
274
+ !this.sonList.find((item) => item.checked && item.langCode !== "FINANCIAL_FIGURES")) {
275
+ this.sonList.forEach((obj) => {
276
+ if (obj.langCode === "FINANCIAL_FIGURES")
277
+ obj.disabled = false;
278
+ });
279
+ }
280
+ this.sonIds = this.sonIds.filter((item) => item != data.id);
281
+ }
282
+ this.getSelectedAllStatus();
283
+ this.orginGrandData = JSON.parse(JSON.stringify(this.grandsonList));
284
+ if (!this.ref["destroyed"]) {
285
+ this.ref.markForCheck();
286
+ this.ref.detectChanges;
287
+ }
288
+ }
289
+ selectAll(val) {
290
+ if (!val) {
291
+ this.orginGrandData = [];
292
+ }
293
+ this.grandsonList = [];
294
+ this.sonIds = [];
295
+ this.sonList.forEach((item) => {
296
+ if (item.langCode !== "FINANCIAL_FIGURES")
297
+ item.checked = val;
298
+ if (val) {
299
+ if (item.langCode === "FINANCIAL_FIGURES") {
300
+ item.disabled = true;
301
+ return;
302
+ }
303
+ this.sonIds.push(item.id);
304
+ item.tables.forEach((sonItem) => {
305
+ if (!this.grandsonList.some((el) => el.id === sonItem.id)) {
306
+ this.grandsonList.push({
307
+ ...sonItem,
308
+ });
309
+ }
310
+ });
311
+ }
312
+ else {
313
+ if (item.langCode === "FINANCIAL_FIGURES")
314
+ item.disabled = false;
315
+ }
316
+ });
317
+ this.orginGrandData = JSON.parse(JSON.stringify(this.grandsonList));
318
+ }
319
+ doFilter = throttle((val) => this.doSearch(val), 200);
320
+ doSearch(val) {
321
+ let tempList = JSON.parse(JSON.stringify(this.orginGrandData));
322
+ if (val) {
323
+ this.grandsonList = tempList.filter((item) => item.langValue.toLowerCase().includes(val.toLowerCase()));
324
+ }
325
+ else {
326
+ this.grandsonList = tempList;
327
+ }
328
+ }
329
+ // 保存弹窗筛选数据
330
+ saveData() {
331
+ this.pbf.introStep.next("complete");
332
+ this.pbf.pageLoading = true;
333
+ let config;
334
+ let datamartViewCode = this.sonList.filter((el) => this.sonIds.includes(el.id));
335
+ config = {
336
+ datamartId: this.fatherId,
337
+ datamartViewId: this.sonIds.join(","),
338
+ views: datamartViewCode.map((e) => {
339
+ return {
340
+ datamartViewId: e.id,
341
+ datamartViewCode: e.langCode,
342
+ };
343
+ }),
344
+ };
345
+ const entityList = this.data.dashboard.entityType === this.entityType
346
+ ? this.DashboardPorletsService.entityList
347
+ : [];
348
+ const dataObj = {
349
+ entityList,
350
+ accountId: this.userInfo.accountId,
351
+ userId: this.userInfo.id,
352
+ dashboardId: this.data.dashboardId,
353
+ dataMartTables: this.grandsonList,
354
+ entityType: this.entityType || this.data.dashboard.entityType,
355
+ config: JSON.stringify(config),
356
+ };
357
+ this.http.post(this.api.urlList.AddDataMartTables, dataObj, (res) => {
358
+ if (res.status === "SUCCESS") {
359
+ const _saveMessage = this.translation.DASHBOARD_PROPERTIES_SAVED ||
360
+ ".DASHBOARD_PROPERTIES_SAVED";
361
+ this.showToast(_saveMessage, "Success");
362
+ this.config.datamartViewId = this.sonIds.join(",");
363
+ this.config.views = [];
364
+ this.sonList.forEach((item) => {
365
+ this.sonIds.forEach((sonId) => {
366
+ if (item.id === sonId) {
367
+ this.config.views.push({
368
+ datamartViewCode: item.langCode,
369
+ datamartViewId: item.id,
370
+ });
371
+ }
372
+ });
373
+ });
374
+ this.data.dashboard.config = JSON.stringify(this.config);
375
+ if (this.data.edit) {
376
+ this.DashboardPorletsService.portletFields_Temp = {};
377
+ }
378
+ if (entityList &&
379
+ entityList.length &&
380
+ this.data.dashboard.entityType === this.entityType) {
381
+ this.pbf.triggerDashboardRefresh.next({
382
+ entityList,
383
+ id: this.data.dashboard.id,
384
+ });
385
+ this.dialogRef.close();
386
+ return;
387
+ }
388
+ this.DashboardPorletsService.GetDashboardV1(this.data.dashboardId, true, (res, portlets = []) => {
389
+ this.dashboardService.changelayout.next({
390
+ status: "true",
391
+ id: this.data.dashboard.id,
392
+ });
393
+ this.pbf.pageLoading = false;
394
+ this.dialogRef.close({
395
+ push_btn: false,
396
+ portlet: {},
397
+ portlets,
398
+ dashboard: res,
399
+ });
400
+ this.ref.markForCheck();
401
+ });
402
+ }
403
+ else {
404
+ this.pbf.pageLoading = false;
405
+ this.pbf.pageLoading_.next(true);
406
+ this.ref.markForCheck();
407
+ const _saveMessage = res.messages[0].message || "error";
408
+ this.showToast(_saveMessage, "Error");
409
+ }
410
+ });
411
+ }
412
+ // toast msg
413
+ showToast(msg, status) {
414
+ this.dialogService.showNotification(msg, {
415
+ status,
416
+ });
417
+ }
418
+ // 关闭弹窗
419
+ closePopup() {
420
+ this.dialogRef.close();
421
+ }
422
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataMartNewComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: i2.DialogService }, { token: i1.MatDialog }, { token: i3.ApiList }, { token: i4.DashboardService }, { token: i5.DashboardPorletsService }, { token: i0.ChangeDetectorRef }, { token: PBF_TOKEN, optional: true }, { token: API_SERVICE_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Component });
423
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DataMartNewComponent, selector: "rs-data-mart-new", ngImport: i0, template: "<div class=\"new_mart_data_popup\">\r\n\t<div class=\"close_box\" (click)=\"closePopup()\">\r\n\t\t<img src=\"../../../../assets/img/dialog-close.svg\" class=\"deleteIcon\" />\r\n\t</div>\r\n\t<div class=\"popup_header\">\r\n\t\t<p class=\"popup_title\">{{ translation.DATA_MART || \".DATA_MART\" }}</p>\r\n\t\t<p class=\"popup_sub_title\">\r\n\t\t\t{{\r\n\t\t\t\ttranslation.PLS_SELECT_DATA_TABLES ||\r\n\t\t\t\t\t\".Please select data tables for this dashboard\"\r\n\t\t\t}}\r\n\t\t</p>\r\n\t</div>\r\n\t<div class=\"popup_main_container\">\r\n\t\t<div class=\"left_menu_container\" id=\"info-step-2\">\r\n\t\t\t<div\r\n\t\t\t\tclass=\"menu_item\"\r\n\t\t\t\t*ngFor=\"let item of fatherList\"\r\n\t\t\t\t[ngClass]=\"{ selectItem: fatherId === item.id }\"\r\n\t\t\t\t(click)=\"getdataMart(item, true)\"\r\n\t\t\t>\r\n\t\t\t\t<span class=\"activeLine\" *ngIf=\"fatherId === item.id\"></span>\r\n\t\t\t\t{{\r\n\t\t\t\t\titem.FromQB\r\n\t\t\t\t\t\t? item.langCode\r\n\t\t\t\t\t\t: translation[item.langCode] || \".\" + item.langCode\r\n\t\t\t\t}}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div class=\"table_container\" id=\"info-step-3\" (click)=\"nextStep()\">\r\n\t\t\t<div class=\"table_content\">\r\n\t\t\t\t<div class=\"group_data\">\r\n\t\t\t\t\t<div class=\"table_header\">\r\n\t\t\t\t\t\t<div class=\"div_group\">\r\n\t\t\t\t\t\t\t<mat-checkbox\r\n\t\t\t\t\t\t\t\t[disabled]=\"isSelectAllDisabled\"\r\n\t\t\t\t\t\t\t\t[color]=\"'primary'\"\r\n\t\t\t\t\t\t\t\t[(ngModel)]=\"selectedAll\"\r\n\t\t\t\t\t\t\t\t(ngModelChange)=\"selectAll($event)\"\r\n\t\t\t\t\t\t\t\t>{{\r\n\t\t\t\t\t\t\t\t\ttranslation[\"GROUP\"] || \".group\"\r\n\t\t\t\t\t\t\t\t}}</mat-checkbox\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"group_item__box\" *ngFor=\"let item of sonList\">\r\n\t\t\t\t\t\t<mat-checkbox\r\n\t\t\t\t\t\t\t[disabled]=\"item.disabled\"\r\n\t\t\t\t\t\t\t[color]=\"'primary'\"\r\n\t\t\t\t\t\t\t[(ngModel)]=\"item.checked\"\r\n\t\t\t\t\t\t\t(ngModelChange)=\"handleItemChange(item, $event)\"\r\n\t\t\t\t\t\t\t>{{\r\n\t\t\t\t\t\t\t\titem.FromQB\r\n\t\t\t\t\t\t\t\t\t? item.langCode\r\n\t\t\t\t\t\t\t\t\t: translation[item.langCode] ||\r\n\t\t\t\t\t\t\t\t\t \".\" + item.langCode\r\n\t\t\t\t\t\t\t}}</mat-checkbox\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t<ejs-tooltip\r\n\t\t\t\t\t\t\t*ngIf=\"item.langCode === 'FINANCIAL_FIGURES'\"\r\n\t\t\t\t\t\t\tid=\"tooltip\"\r\n\t\t\t\t\t\t\tcssClass=\"figures-tooltip\"\r\n\t\t\t\t\t\t\t[content]=\"\r\n\t\t\t\t\t\t\t\ttranslation.DASHBOARD_FINANCIAL_FIGURES_TOOLTIPS ||\r\n\t\t\t\t\t\t\t\t'Financial Figures can\u2019t be selected together with other groups.'\r\n\t\t\t\t\t\t\t\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span></span>\r\n\t\t\t\t\t\t</ejs-tooltip>\r\n\t\t\t\t\t\t<!-- <ejs-tooltip\r\n\t\t\t\t\t\t\t*ngIf=\"\r\n\t\t\t\t\t\t\t\tDashboardPorletsService.checkIsQ2Q(item.tables)\r\n\t\t\t\t\t\t\t\"\r\n\t\t\t\t\t\t\tcssClass=\"figures-tooltip\"\r\n\t\t\t\t\t\t\tcontent=\"Q2Q\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span></span>\r\n\t\t\t\t\t\t</ejs-tooltip> -->\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"table_data\">\r\n\t\t\t\t\t<div class=\"table_header\">\r\n\t\t\t\t\t\t<div class=\"data_table_box\">\r\n\t\t\t\t\t\t\t<div class=\"table_title\">\r\n\t\t\t\t\t\t\t\t{{ translation[\"DATA_TABLE\"] || \".Data Table\" }}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class=\"search_container\">\r\n\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\t\t\t\tmatInput\r\n\t\t\t\t\t\t\t\t\t[placeholder]=\"translation['SEARCH']\"\r\n\t\t\t\t\t\t\t\t\tclass=\"search_input\"\r\n\t\t\t\t\t\t\t\t\t(keyup)=\"doFilter($event.target.value)\"\r\n\t\t\t\t\t\t\t\t\tautocomplete=\"off\"\r\n\t\t\t\t\t\t\t\t\t(keydown)=\"\r\n\t\t\t\t\t\t\t\t\t\tpbf.disabledInputEnterEvent($event)\r\n\t\t\t\t\t\t\t\t\t\"\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"table_main_content\" style=\"overflow: auto\">\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t*ngFor=\"let item of grandsonList\"\r\n\t\t\t\t\t\t\t[ngClass]=\"{ maxBox: grandsonList.length >= 11 }\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<div *ngIf=\"!item.isHide\" class=\"table_data_item\">\r\n\t\t\t\t\t\t\t\t{{\r\n\t\t\t\t\t\t\t\t\titem.FromQB\r\n\t\t\t\t\t\t\t\t\t\t? item.langCode\r\n\t\t\t\t\t\t\t\t\t\t: translation[item.langCode] ||\r\n\t\t\t\t\t\t\t\t\t\t \".\" + item.langCode\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\t<div class=\"popup_footer\">\r\n\t\t<button class=\"cancle_btn popup_btn\" (click)=\"closePopup()\">\r\n\t\t\t{{ translation[\"CANCEL\"] || \".CANCEL\" }}\r\n\t\t</button>\r\n\t\t<button\r\n\t\t\tclass=\"sure_btn popup_btn\"\r\n\t\t\tid=\"info-step-5\"\r\n\t\t\t(click)=\"saveData()\"\r\n\t\t\t[disabled]=\"disabled || !entityType || grandsonList.length == 0\"\r\n\t\t>\r\n\t\t\t{{ translation[\"SAVE\"] || \".SAVE\" }}\r\n\t\t</button>\r\n\t</div>\r\n</div>\r\n", styles: [".new_mart_data_popup{width:100%;position:relative;height:100%;padding:60px 74px;font-family:Arial;display:flex;flex-direction:column;overflow:hidden}.new_mart_data_popup .close_box{position:absolute;right:12px;top:12px;padding:10px;cursor:pointer}.new_mart_data_popup .close_box .deleteIcon{width:24px;height:24px}.new_mart_data_popup .popup_header{margin-bottom:32px}.new_mart_data_popup .popup_header .popup_title{font-size:24px;font-weight:700;text-align:center;color:#44566c;line-height:28px;margin-bottom:12px}.new_mart_data_popup .popup_header .popup_sub_title{font-size:13px;line-height:15px;color:#44566c;text-align:center}.new_mart_data_popup .popup_main_container{flex:1;width:100%;margin-bottom:40px;display:flex;overflow:hidden}.new_mart_data_popup .popup_main_container .left_menu_container{margin-right:30px;text-align:left}.new_mart_data_popup .popup_main_container .left_menu_container .menu_item{line-height:16px;margin-bottom:22px;color:#002c4f;font-size:13px;position:relative;max-width:160px;word-wrap:break-word;cursor:pointer;padding-left:15px}.new_mart_data_popup .popup_main_container .left_menu_container .menu_item.selectItem{font-weight:700}.new_mart_data_popup .popup_main_container .left_menu_container .menu_item .activeLine{display:block;position:absolute;left:0;top:0;width:2px;height:17px;background-color:#0081ff}.new_mart_data_popup .popup_main_container .table_container{flex:1;height:100%;overflow:hidden;border:1px solid #eaedf0;display:flex;flex-direction:column}.new_mart_data_popup .popup_main_container .table_container .table_header{height:40px;background-color:#f8fafb;display:flex;align-items:center}.new_mart_data_popup .popup_main_container .table_container .table_header::ng-deep .mat-checkbox .mat-checkbox-layout{color:#44566c;font-size:13px;font-weight:700}.new_mart_data_popup .popup_main_container .table_container .table_header .div_group{min-width:200px;padding-left:20px}.new_mart_data_popup .popup_main_container .table_container .table_header .data_table_box{flex:1;display:flex;align-items:center;justify-content:space-between;padding-left:20px;padding-right:5px}.new_mart_data_popup .popup_main_container .table_container .table_header .data_table_box .table_title{font-size:13px;font-weight:700;color:#44566c}.new_mart_data_popup .popup_main_container .table_container .table_header .data_table_box .search_container{width:190px;height:30px;position:relative}.new_mart_data_popup .popup_main_container .table_container .table_header .data_table_box .search_container .search_input{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Ccircle cx%3D%227%22 cy%3D%227%22 r%3D%224.5%22 transform%3D%22rotate(-90 7 7)%22 stroke%3D%22%236C7C90%22%2F%3E%0D%3Cline x1%3D%2210.3399%22 y1%3D%229.63326%22 x2%3D%2213.8754%22 y2%3D%2213.1688%22 stroke%3D%22%236C7C90%22%2F%3E%0D%3C%2Fsvg%3E%0D\");background-size:16px;background-repeat:no-repeat;background-position-y:center;background-position-x:10px;width:190px;height:30px;padding:7px 7px 6px 38px;border-radius:5px;background-color:#fff;transform:translateY(0);outline:none;border:none;font-weight:400!important;color:#44566c;font-size:12px!important}.new_mart_data_popup .popup_main_container .table_container .table_header .data_table_box .search_container .search_input::placeholder{color:#adb5bd}.new_mart_data_popup .popup_main_container .table_container .table_content{display:flex;flex:1;overflow:hidden}.new_mart_data_popup .popup_main_container .table_container .table_content::ng-deep .mat-checkbox .mat-checkbox-layout{color:#44566c;font-size:13px;font-weight:400}.new_mart_data_popup .popup_main_container .table_container .table_content .group_data{height:100%;border-right:1px solid #eaedf0}.new_mart_data_popup .popup_main_container .table_container .table_content .group_data .group_item__box{display:flex;align-items:center;padding-left:20px;height:40px;border-bottom:1px solid #eaedf0;padding-right:10px}.new_mart_data_popup .popup_main_container .table_container .table_content .group_data .group_item__box .e-tooltip{margin-left:5px}.new_mart_data_popup .popup_main_container .table_container .table_content .group_data .group_item__box .e-tooltip span{display:inline-block;width:14px;height:14px;background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2218%22 height%3D%2218%22 viewBox%3D%220 0 18 18%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D %3Cpath d%3D%22M9 1a8 8 0 1 0 8 8 8.009 8.009 0 0 0-8-8zm0 14.667A6.666 6.666 0 1 1 15.667 9 6.674 6.674 0 0 1 9 15.667z%22 fill%3D%22%2344566C%22%2F%3E%0D %3Cpath d%3D%22M9 7.667h-.667a.667.667 0 1 0 0 1.333h.666v4a.667.667 0 0 0 1.334 0V9a1.333 1.333 0 0 0-1.334-1.333zM9 6.333a1 1 0 1 0 0-2 1 1 0 0 0 0 2z%22 fill%3D%22%2344566C%22%2F%3E%0D%3C%2Fsvg%3E%0D\");background-size:contain;margin-top:5px;cursor:pointer}.new_mart_data_popup .popup_main_container .table_container .table_content .table_data{flex:1;display:flex;height:100%;flex-direction:column;overflow:hidden}.new_mart_data_popup .popup_main_container .table_container .table_content .table_data .table_main_content{flex:1;overflow:auto}.new_mart_data_popup .popup_main_container .table_container .table_content .table_data .maxBox:last-child .table_data_item{border-bottom:none}.new_mart_data_popup .popup_main_container .table_container .table_content .table_data .table_data_item{padding-right:5px;padding-left:20px;height:40px;line-height:40px;font-size:13px;color:#44566c;border-bottom:1px solid #eaedf0}.new_mart_data_popup .popup_main_container::ng-deep .mat-checkbox .mat-checkbox-background{border:1px solid #d1d1d1}.new_mart_data_popup .popup_main_container::ng-deep .mat-checkbox.mat-checkbox-checked .mat-checkbox-background{border:none}.new_mart_data_popup .disabled-button{pointer-events:none;opacity:.5}.new_mart_data_popup .popup_footer{height:40px;display:flex;align-items:center;justify-content:center}.new_mart_data_popup .popup_footer .popup_btn{width:200px;height:40px;line-height:40px;border:none;border-radius:5px;text-align:center;font-size:13px;font-weight:700}.new_mart_data_popup .popup_footer .popup_btn.cancle_btn{background-color:#eaedf0;color:#979797;margin-right:20px}.new_mart_data_popup .popup_footer .popup_btn.sure_btn{color:#fff;background-color:#1364b3}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i10.TooltipComponent, selector: "ejs-tooltip", inputs: ["animation", "closeDelay", "container", "content", "cssClass", "enableHtmlParse", "enableHtmlSanitizer", "enablePersistence", "enableRtl", "height", "htmlAttributes", "isSticky", "locale", "mouseTrail", "offsetX", "offsetY", "openDelay", "opensOn", "position", "showTipPointer", "target", "tipPointerPosition", "width", "windowCollision"], outputs: ["afterClose", "afterOpen", "beforeClose", "beforeCollision", "beforeOpen", "beforeRender", "created", "destroyed"] }] });
424
+ }
425
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataMartNewComponent, decorators: [{
426
+ type: Component,
427
+ args: [{ selector: "rs-data-mart-new", template: "<div class=\"new_mart_data_popup\">\r\n\t<div class=\"close_box\" (click)=\"closePopup()\">\r\n\t\t<img src=\"../../../../assets/img/dialog-close.svg\" class=\"deleteIcon\" />\r\n\t</div>\r\n\t<div class=\"popup_header\">\r\n\t\t<p class=\"popup_title\">{{ translation.DATA_MART || \".DATA_MART\" }}</p>\r\n\t\t<p class=\"popup_sub_title\">\r\n\t\t\t{{\r\n\t\t\t\ttranslation.PLS_SELECT_DATA_TABLES ||\r\n\t\t\t\t\t\".Please select data tables for this dashboard\"\r\n\t\t\t}}\r\n\t\t</p>\r\n\t</div>\r\n\t<div class=\"popup_main_container\">\r\n\t\t<div class=\"left_menu_container\" id=\"info-step-2\">\r\n\t\t\t<div\r\n\t\t\t\tclass=\"menu_item\"\r\n\t\t\t\t*ngFor=\"let item of fatherList\"\r\n\t\t\t\t[ngClass]=\"{ selectItem: fatherId === item.id }\"\r\n\t\t\t\t(click)=\"getdataMart(item, true)\"\r\n\t\t\t>\r\n\t\t\t\t<span class=\"activeLine\" *ngIf=\"fatherId === item.id\"></span>\r\n\t\t\t\t{{\r\n\t\t\t\t\titem.FromQB\r\n\t\t\t\t\t\t? item.langCode\r\n\t\t\t\t\t\t: translation[item.langCode] || \".\" + item.langCode\r\n\t\t\t\t}}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div class=\"table_container\" id=\"info-step-3\" (click)=\"nextStep()\">\r\n\t\t\t<div class=\"table_content\">\r\n\t\t\t\t<div class=\"group_data\">\r\n\t\t\t\t\t<div class=\"table_header\">\r\n\t\t\t\t\t\t<div class=\"div_group\">\r\n\t\t\t\t\t\t\t<mat-checkbox\r\n\t\t\t\t\t\t\t\t[disabled]=\"isSelectAllDisabled\"\r\n\t\t\t\t\t\t\t\t[color]=\"'primary'\"\r\n\t\t\t\t\t\t\t\t[(ngModel)]=\"selectedAll\"\r\n\t\t\t\t\t\t\t\t(ngModelChange)=\"selectAll($event)\"\r\n\t\t\t\t\t\t\t\t>{{\r\n\t\t\t\t\t\t\t\t\ttranslation[\"GROUP\"] || \".group\"\r\n\t\t\t\t\t\t\t\t}}</mat-checkbox\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"group_item__box\" *ngFor=\"let item of sonList\">\r\n\t\t\t\t\t\t<mat-checkbox\r\n\t\t\t\t\t\t\t[disabled]=\"item.disabled\"\r\n\t\t\t\t\t\t\t[color]=\"'primary'\"\r\n\t\t\t\t\t\t\t[(ngModel)]=\"item.checked\"\r\n\t\t\t\t\t\t\t(ngModelChange)=\"handleItemChange(item, $event)\"\r\n\t\t\t\t\t\t\t>{{\r\n\t\t\t\t\t\t\t\titem.FromQB\r\n\t\t\t\t\t\t\t\t\t? item.langCode\r\n\t\t\t\t\t\t\t\t\t: translation[item.langCode] ||\r\n\t\t\t\t\t\t\t\t\t \".\" + item.langCode\r\n\t\t\t\t\t\t\t}}</mat-checkbox\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t<ejs-tooltip\r\n\t\t\t\t\t\t\t*ngIf=\"item.langCode === 'FINANCIAL_FIGURES'\"\r\n\t\t\t\t\t\t\tid=\"tooltip\"\r\n\t\t\t\t\t\t\tcssClass=\"figures-tooltip\"\r\n\t\t\t\t\t\t\t[content]=\"\r\n\t\t\t\t\t\t\t\ttranslation.DASHBOARD_FINANCIAL_FIGURES_TOOLTIPS ||\r\n\t\t\t\t\t\t\t\t'Financial Figures can\u2019t be selected together with other groups.'\r\n\t\t\t\t\t\t\t\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span></span>\r\n\t\t\t\t\t\t</ejs-tooltip>\r\n\t\t\t\t\t\t<!-- <ejs-tooltip\r\n\t\t\t\t\t\t\t*ngIf=\"\r\n\t\t\t\t\t\t\t\tDashboardPorletsService.checkIsQ2Q(item.tables)\r\n\t\t\t\t\t\t\t\"\r\n\t\t\t\t\t\t\tcssClass=\"figures-tooltip\"\r\n\t\t\t\t\t\t\tcontent=\"Q2Q\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span></span>\r\n\t\t\t\t\t\t</ejs-tooltip> -->\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"table_data\">\r\n\t\t\t\t\t<div class=\"table_header\">\r\n\t\t\t\t\t\t<div class=\"data_table_box\">\r\n\t\t\t\t\t\t\t<div class=\"table_title\">\r\n\t\t\t\t\t\t\t\t{{ translation[\"DATA_TABLE\"] || \".Data Table\" }}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class=\"search_container\">\r\n\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\t\t\t\tmatInput\r\n\t\t\t\t\t\t\t\t\t[placeholder]=\"translation['SEARCH']\"\r\n\t\t\t\t\t\t\t\t\tclass=\"search_input\"\r\n\t\t\t\t\t\t\t\t\t(keyup)=\"doFilter($event.target.value)\"\r\n\t\t\t\t\t\t\t\t\tautocomplete=\"off\"\r\n\t\t\t\t\t\t\t\t\t(keydown)=\"\r\n\t\t\t\t\t\t\t\t\t\tpbf.disabledInputEnterEvent($event)\r\n\t\t\t\t\t\t\t\t\t\"\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"table_main_content\" style=\"overflow: auto\">\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t*ngFor=\"let item of grandsonList\"\r\n\t\t\t\t\t\t\t[ngClass]=\"{ maxBox: grandsonList.length >= 11 }\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<div *ngIf=\"!item.isHide\" class=\"table_data_item\">\r\n\t\t\t\t\t\t\t\t{{\r\n\t\t\t\t\t\t\t\t\titem.FromQB\r\n\t\t\t\t\t\t\t\t\t\t? item.langCode\r\n\t\t\t\t\t\t\t\t\t\t: translation[item.langCode] ||\r\n\t\t\t\t\t\t\t\t\t\t \".\" + item.langCode\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\t<div class=\"popup_footer\">\r\n\t\t<button class=\"cancle_btn popup_btn\" (click)=\"closePopup()\">\r\n\t\t\t{{ translation[\"CANCEL\"] || \".CANCEL\" }}\r\n\t\t</button>\r\n\t\t<button\r\n\t\t\tclass=\"sure_btn popup_btn\"\r\n\t\t\tid=\"info-step-5\"\r\n\t\t\t(click)=\"saveData()\"\r\n\t\t\t[disabled]=\"disabled || !entityType || grandsonList.length == 0\"\r\n\t\t>\r\n\t\t\t{{ translation[\"SAVE\"] || \".SAVE\" }}\r\n\t\t</button>\r\n\t</div>\r\n</div>\r\n", styles: [".new_mart_data_popup{width:100%;position:relative;height:100%;padding:60px 74px;font-family:Arial;display:flex;flex-direction:column;overflow:hidden}.new_mart_data_popup .close_box{position:absolute;right:12px;top:12px;padding:10px;cursor:pointer}.new_mart_data_popup .close_box .deleteIcon{width:24px;height:24px}.new_mart_data_popup .popup_header{margin-bottom:32px}.new_mart_data_popup .popup_header .popup_title{font-size:24px;font-weight:700;text-align:center;color:#44566c;line-height:28px;margin-bottom:12px}.new_mart_data_popup .popup_header .popup_sub_title{font-size:13px;line-height:15px;color:#44566c;text-align:center}.new_mart_data_popup .popup_main_container{flex:1;width:100%;margin-bottom:40px;display:flex;overflow:hidden}.new_mart_data_popup .popup_main_container .left_menu_container{margin-right:30px;text-align:left}.new_mart_data_popup .popup_main_container .left_menu_container .menu_item{line-height:16px;margin-bottom:22px;color:#002c4f;font-size:13px;position:relative;max-width:160px;word-wrap:break-word;cursor:pointer;padding-left:15px}.new_mart_data_popup .popup_main_container .left_menu_container .menu_item.selectItem{font-weight:700}.new_mart_data_popup .popup_main_container .left_menu_container .menu_item .activeLine{display:block;position:absolute;left:0;top:0;width:2px;height:17px;background-color:#0081ff}.new_mart_data_popup .popup_main_container .table_container{flex:1;height:100%;overflow:hidden;border:1px solid #eaedf0;display:flex;flex-direction:column}.new_mart_data_popup .popup_main_container .table_container .table_header{height:40px;background-color:#f8fafb;display:flex;align-items:center}.new_mart_data_popup .popup_main_container .table_container .table_header::ng-deep .mat-checkbox .mat-checkbox-layout{color:#44566c;font-size:13px;font-weight:700}.new_mart_data_popup .popup_main_container .table_container .table_header .div_group{min-width:200px;padding-left:20px}.new_mart_data_popup .popup_main_container .table_container .table_header .data_table_box{flex:1;display:flex;align-items:center;justify-content:space-between;padding-left:20px;padding-right:5px}.new_mart_data_popup .popup_main_container .table_container .table_header .data_table_box .table_title{font-size:13px;font-weight:700;color:#44566c}.new_mart_data_popup .popup_main_container .table_container .table_header .data_table_box .search_container{width:190px;height:30px;position:relative}.new_mart_data_popup .popup_main_container .table_container .table_header .data_table_box .search_container .search_input{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Ccircle cx%3D%227%22 cy%3D%227%22 r%3D%224.5%22 transform%3D%22rotate(-90 7 7)%22 stroke%3D%22%236C7C90%22%2F%3E%0D%3Cline x1%3D%2210.3399%22 y1%3D%229.63326%22 x2%3D%2213.8754%22 y2%3D%2213.1688%22 stroke%3D%22%236C7C90%22%2F%3E%0D%3C%2Fsvg%3E%0D\");background-size:16px;background-repeat:no-repeat;background-position-y:center;background-position-x:10px;width:190px;height:30px;padding:7px 7px 6px 38px;border-radius:5px;background-color:#fff;transform:translateY(0);outline:none;border:none;font-weight:400!important;color:#44566c;font-size:12px!important}.new_mart_data_popup .popup_main_container .table_container .table_header .data_table_box .search_container .search_input::placeholder{color:#adb5bd}.new_mart_data_popup .popup_main_container .table_container .table_content{display:flex;flex:1;overflow:hidden}.new_mart_data_popup .popup_main_container .table_container .table_content::ng-deep .mat-checkbox .mat-checkbox-layout{color:#44566c;font-size:13px;font-weight:400}.new_mart_data_popup .popup_main_container .table_container .table_content .group_data{height:100%;border-right:1px solid #eaedf0}.new_mart_data_popup .popup_main_container .table_container .table_content .group_data .group_item__box{display:flex;align-items:center;padding-left:20px;height:40px;border-bottom:1px solid #eaedf0;padding-right:10px}.new_mart_data_popup .popup_main_container .table_container .table_content .group_data .group_item__box .e-tooltip{margin-left:5px}.new_mart_data_popup .popup_main_container .table_container .table_content .group_data .group_item__box .e-tooltip span{display:inline-block;width:14px;height:14px;background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2218%22 height%3D%2218%22 viewBox%3D%220 0 18 18%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D %3Cpath d%3D%22M9 1a8 8 0 1 0 8 8 8.009 8.009 0 0 0-8-8zm0 14.667A6.666 6.666 0 1 1 15.667 9 6.674 6.674 0 0 1 9 15.667z%22 fill%3D%22%2344566C%22%2F%3E%0D %3Cpath d%3D%22M9 7.667h-.667a.667.667 0 1 0 0 1.333h.666v4a.667.667 0 0 0 1.334 0V9a1.333 1.333 0 0 0-1.334-1.333zM9 6.333a1 1 0 1 0 0-2 1 1 0 0 0 0 2z%22 fill%3D%22%2344566C%22%2F%3E%0D%3C%2Fsvg%3E%0D\");background-size:contain;margin-top:5px;cursor:pointer}.new_mart_data_popup .popup_main_container .table_container .table_content .table_data{flex:1;display:flex;height:100%;flex-direction:column;overflow:hidden}.new_mart_data_popup .popup_main_container .table_container .table_content .table_data .table_main_content{flex:1;overflow:auto}.new_mart_data_popup .popup_main_container .table_container .table_content .table_data .maxBox:last-child .table_data_item{border-bottom:none}.new_mart_data_popup .popup_main_container .table_container .table_content .table_data .table_data_item{padding-right:5px;padding-left:20px;height:40px;line-height:40px;font-size:13px;color:#44566c;border-bottom:1px solid #eaedf0}.new_mart_data_popup .popup_main_container::ng-deep .mat-checkbox .mat-checkbox-background{border:1px solid #d1d1d1}.new_mart_data_popup .popup_main_container::ng-deep .mat-checkbox.mat-checkbox-checked .mat-checkbox-background{border:none}.new_mart_data_popup .disabled-button{pointer-events:none;opacity:.5}.new_mart_data_popup .popup_footer{height:40px;display:flex;align-items:center;justify-content:center}.new_mart_data_popup .popup_footer .popup_btn{width:200px;height:40px;line-height:40px;border:none;border-radius:5px;text-align:center;font-size:13px;font-weight:700}.new_mart_data_popup .popup_footer .popup_btn.cancle_btn{background-color:#eaedf0;color:#979797;margin-right:20px}.new_mart_data_popup .popup_footer .popup_btn.sure_btn{color:#fff;background-color:#1364b3}\n"] }]
428
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
429
+ type: Inject,
430
+ args: [MAT_DIALOG_DATA]
431
+ }] }, { type: i1.MatDialogRef }, { type: i2.DialogService }, { type: i1.MatDialog }, { type: i3.ApiList }, { type: i4.DashboardService }, { type: i5.DashboardPorletsService }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
432
+ type: Optional
433
+ }, {
434
+ type: Inject,
435
+ args: [PBF_TOKEN]
436
+ }] }, { type: undefined, decorators: [{
437
+ type: Optional
438
+ }, {
439
+ type: Inject,
440
+ args: [API_SERVICE_TOKEN]
441
+ }] }]; } });
442
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1tYXJ0LW5ldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yYWlzZS1jb21tb24tbGliL3NyYy9saWIvZGFzaGJvYXJkL2Rhc2hib2FyZC1wcm9wZXJ0aWVzL2RhdGEtbWFydC1uZXcvZGF0YS1tYXJ0LW5ldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yYWlzZS1jb21tb24tbGliL3NyYy9saWIvZGFzaGJvYXJkL2Rhc2hib2FyZC1wcm9wZXJ0aWVzL2RhdGEtbWFydC1uZXcvZGF0YS1tYXJ0LW5ldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULE1BQU0sRUFHTixRQUFRLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUEyQixlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUlwRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7Ozs7O0FBUS9FLE1BQU0sT0FBTyxvQkFBb0I7SUFtQkc7SUFDekI7SUFDQztJQUNEO0lBQ0M7SUFDRDtJQUNBO0lBQ0M7SUFDOEI7SUFDUztJQTNCakQsV0FBVyxDQUFDO0lBQ1osUUFBUSxDQUFDO0lBQ1QsSUFBSSxDQUFDO0lBQ0wsVUFBVSxDQUFDO0lBQ1gsTUFBTSxDQUFDO0lBRUEsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUNoQixPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ2IsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUNsQixRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ2QsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNaLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDcEIsY0FBYyxHQUFHLEVBQUUsQ0FB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LGlCQUFpQjs0RkE1QjVCLG9CQUFvQix3RENyQmpDLG01SkFzSUE7OzRGRGpIYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0Usa0JBQWtCOzswQkF1QnpCLE1BQU07MkJBQUMsZUFBZTs7MEJBUXRCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsU0FBUzs7MEJBQzVCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIEluamVjdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIE9wdGlvbmFsLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7IEFwaUxpc3QgfSBmcm9tIFwiLi4vLi4vYXBpXCI7XHJcbmltcG9ydCB7IERhc2hib2FyZFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vZGFzaGJvYXJkLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vZGFzaGJvYXJkUG9ybGV0cy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IHRocm90dGxlIH0gZnJvbSBcImxvZGFzaFwiO1xyXG5pbXBvcnQgeyBBUElfU0VSVklDRV9UT0tFTiwgUEJGX1RPS0VOIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2UvSW5qZWN0aW9uVG9rZW5cIjtcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlL2RpYWxvZy5zZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJycy1kYXRhLW1hcnQtbmV3XCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9kYXRhLW1hcnQtbmV3LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2RhdGEtbWFydC1uZXcuY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRhTWFydE5ld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgdHJhbnNsYXRpb247XHJcbiAgdXNlckluZm87XHJcbiAgbGFuZztcclxuICBlbnRpdHlUeXBlO1xyXG4gIGNvbmZpZztcclxuXHJcbiAgcHVibGljIGZhdGhlckxpc3QgPSBbXTtcclxuICBwdWJsaWMgc29uTGlzdCA9IFtdO1xyXG4gIHB1YmxpYyBncmFuZHNvbkxpc3QgPSBbXTtcclxuICBwdWJsaWMgZmF0aGVySWQgPSBcIlwiO1xyXG4gIHB1YmxpYyBzb25JZHMgPSBbXTtcclxuICBwdWJsaWMgc2VsZWN0ZWRBbGwgPSBmYWxzZTtcclxuICBwdWJsaWMgb3JnaW5HcmFuZERhdGEgPSBbXTtcclxuICBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcclxuICBwdWJsaWMgY2FjaGVFbnRpdHlUeXBlID0gXCJcIjtcclxuICBwdWJsaWMgaXNTZWxlY3RBbGxEaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LFxyXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPERhdGFNYXJ0TmV3Q29tcG9uZW50PixcclxuICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgYXBpOiBBcGlMaXN0LFxyXG4gICAgcHVibGljIGRhc2hib2FyZFNlcnZpY2U6IERhc2hib2FyZFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgRGFzaGJvYXJkUG9ybGV0c1NlcnZpY2U6IERhc2hib2FyZFBvcmxldHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChQQkZfVE9LRU4pIHB1YmxpYyBwYmY6IGFueSxcclxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBJX1NFUlZJQ0VfVE9LRU4pIHByaXZhdGUgaHR0cDogYW55XHJcbiAgKSB7fVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5nZXRJbmZvKCk7XHJcbiAgICB0aGlzLmdldFNvdXJjZXMoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucGJmLmludHJvU3RlcC5uZXh0KFwibmV4dFwiKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJbmZvKCkge1xyXG4gICAgdGhpcy50cmFuc2xhdGlvbiA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ0cmFuc2xhdGlvblwiKSk7XHJcbiAgICB0aGlzLnVzZXJJbmZvID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInVzZXJJbmZvXCIpKTtcclxuICAgIHRoaXMubGFuZyA9IHRoaXMucGJmLmdldExhbmd1YWdlUGFyYW1zKCk7XHJcbiAgICB0aGlzLmNvbmZpZyA9XHJcbiAgICAgIHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEuZGFzaGJvYXJkXHJcbiAgICAgICAgPyBKU09OLnBhcnNlKHRoaXMuZGF0YS5kYXNoYm9hcmQuY29uZmlnKVxyXG4gICAgICAgIDoge307XHJcbiAgfVxyXG4gIGdldFNvdXJjZXMoKSB7XHJcbiAgICBjb25zdCBkYXRhT2JqID0ge1xyXG4gICAgICBhY2NvdW50SWQ6IHRoaXMudXNlckluZm8uYWNjb3VudElkLFxyXG4gICAgICBsYW5ndWFnZTogdGhpcy5sYW5nLFxyXG4gICAgICBkYXNoYm9hcmRWZXJzaW9uOiAyLFxyXG4gICAgfTtcclxuICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nXy5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5odHRwLnBvc3QodGhpcy5hcGkudXJsTGlzdC5HZXRTb3VyY2VzLCBkYXRhT2JqLCAocmVzKSA9PiB7XHJcbiAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nXy5uZXh0KHRydWUpO1xyXG4gICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgdGhpcy5EYXNoYm9hcmRQb3JsZXRzU2VydmljZS5zb3VyY2VzRGF0YVt0aGlzLmRhdGEuZGFzaGJvYXJkLmlkXSA9IHJlcztcclxuICAgICAgICB0aGlzLkRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLkdldFNvdXJjZXNSZXMgPSByZXM7XHJcbiAgICAgICAgdGhpcy5mYXRoZXJMaXN0ID0gcmVzO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWcuZGF0YW1hcnRJZCkge1xyXG4gICAgICAgICAgLy8gdGhpcy5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmZhdGhlcklkID0gdGhpcy5jb25maWcuZGF0YW1hcnRJZDtcclxuICAgICAgICAgIHRoaXMuc29uSWRzID0gdGhpcy5jb25maWcuZGF0YW1hcnRWaWV3SWRcclxuICAgICAgICAgICAgPyB0aGlzLmNvbmZpZy5kYXRhbWFydFZpZXdJZC5zcGxpdChcIixcIilcclxuICAgICAgICAgICAgOiB0aGlzLmNvbmZpZy52aWV3c1xyXG4gICAgICAgICAgICA/IHRoaXMuY29uZmlnLnZpZXdzLm1hcCgoaXRlbSkgPT4gaXRlbS5kYXRhbWFydFZpZXdJZClcclxuICAgICAgICAgICAgOiBbXTtcclxuICAgICAgICAgIGxldCBkYXRhc291cmNlID0gcmVzLmZpbmQoKGVsKSA9PiBlbC5pZCA9PSB0aGlzLmZhdGhlcklkKTtcclxuICAgICAgICAgIGlmIChkYXRhc291cmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0ZGF0YU1hcnQoZGF0YXNvdXJjZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jYWNoZUVudGl0eVR5cGUgJiYgdGhpcy5jb25maWcuZGF0YW1hcnRJZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2FjaGVFbnRpdHlUeXBlID0gdGhpcy5lbnRpdHlUeXBlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZGF0YXZpZXcgPSBkYXRhc291cmNlLnZpZXdzLmZpbHRlcigoZWwpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5zb25JZHMuaW5jbHVkZXMoZWwuaWQpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlSXRlbUNoYW5nZShkYXRhdmlldywgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRBbGxTdGF0dXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBnZXRTZWxlY3RlZEFsbFN0YXR1cygpIHtcclxuICAgIGxldCBudW0gPSAwO1xyXG4gICAgdGhpcy5zb25MaXN0LmZvckVhY2goKHNvbikgPT4ge1xyXG4gICAgICBpZiAoc29uLmNoZWNrZWQgJiYgc29uLmxhbmdDb2RlICE9PSBcIkZJTkFOQ0lBTF9GSUdVUkVTXCIpIHtcclxuICAgICAgICBudW0rKztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAobnVtID09PSB0aGlzLnNvbkxpc3QubGVuZ3RoIC0gMSkgdGhpcy5zZWxlY3RlZEFsbCA9IHRydWU7XHJcbiAgICBlbHNlIHRoaXMuc2VsZWN0ZWRBbGwgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG5leHRTdGVwKCkge1xyXG4gICAgdGhpcy5wYmYuaW50cm9TdGVwLm5leHQoXCJuZXh0XCIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0ZGF0YU1hcnQoaXRlbSwgaXNJbml0ID0gZmFsc2UpIHtcclxuICAgIGlmICh0aGlzLmNhY2hlRW50aXR5VHlwZSAmJiB0aGlzLmNhY2hlRW50aXR5VHlwZSA9PT0gaXRlbS5lbnRpdHlUeXBlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgIWlzSW5pdCAmJlxyXG4gICAgICB0aGlzLmNhY2hlRW50aXR5VHlwZSAmJlxyXG4gICAgICB0aGlzLmNhY2hlRW50aXR5VHlwZSAhPT0gaXRlbS5lbnRpdHlUeXBlXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgX3RpdGxlID1cclxuICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLkFSRV9ZT1VfU1VSRV9UT19DSEFOR0VfREFUQV9NQVJUIHx8XHJcbiAgICAgICAgXCIuQXJlIHlvdSBzdXJlIHRvIGNoYW5nZSBlbnRpdHkgdHlwZSBvZiBkYXRhIG1hcnQ/IERhc2hib2FyZCB3aWxsIGJlIHJlc2V0IHNpbmNlIGVudGl0eSB0eXBlIGlzIGNoYW5nZWQuXCI7XHJcbiAgICAgIGNvbnN0IF9ubyA9IHRoaXMudHJhbnNsYXRpb24uTk8gfHwgXCIuTk9cIjtcclxuICAgICAgY29uc3QgX3llcyA9IHRoaXMudHJhbnNsYXRpb24uWUVTIHx8IFwiLllFU1wiO1xyXG4gICAgICAvLyBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmxheW91dFV0aWxzU2VydmljZS5hbGVydEVsZW1lbnQoXHJcbiAgICAgIC8vIFx0dGhpcy50cmFuc2xhdGlvbi5XQVJOSU5HIHx8IFwiLldBUk5JTkdcIixcclxuICAgICAgLy8gXHRfdGl0bGUsXHJcbiAgICAgIC8vIFx0X25vLFxyXG4gICAgICAvLyBcdF95ZXMsXHJcbiAgICAgIC8vIFx0dHJ1ZSxcclxuICAgICAgLy8gXHR0cnVlLFxyXG4gICAgICAvLyBcdFwiNDgwcHhcIixcclxuICAgICAgLy8gXHRcIjMyNHB4XCJcclxuICAgICAgLy8gKTtcclxuICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dDb21tb25EaWxhb2coe1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0aW9uLldBUk5JTkcgfHwgXCIuV0FSTklOR1wiLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBfdGl0bGUsXHJcbiAgICAgICAgc2F2ZUJ0bkxhYmVsOiBfeWVzLFxyXG4gICAgICAgIGNhbmNlbEJ0bkxhYmVsOiBfbm8sXHJcbiAgICAgIH0pO1xyXG4gICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgIGlmICghcmVzKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0RmF0aGVySWQoaXRlbSwgaXNJbml0KTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghaXRlbSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldEZhdGhlcklkKGl0ZW0sIGlzSW5pdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEZhdGhlcklkKGl0ZW0sIGlzSW5pdCkge1xyXG4gICAgdGhpcy5mYXRoZXJJZCA9IGl0ZW0uaWQ7XHJcbiAgICB0aGlzLmVudGl0eVR5cGUgPSBpdGVtLmVudGl0eVR5cGU7XHJcbiAgICBsZXQgaXNGaWd1cmVzQ2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgbGV0IGlzT3RoZXJDaGVja2VkID0gZmFsc2U7XHJcbiAgICBpZiAoXHJcbiAgICAgIGl0ZW0udmlld3MuZmluZChcclxuICAgICAgICAoaXRlbSkgPT5cclxuICAgICAgICAgIGl0ZW0ubGFuZ0NvZGUgPT09IFwiRklOQU5DSUFMX0ZJR1VSRVNcIiAmJiB0aGlzLnNvbklkcy5pbmNsdWRlcyhpdGVtLmlkKVxyXG4gICAgICApXHJcbiAgICApIHtcclxuICAgICAgaXNGaWd1cmVzQ2hlY2tlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNTZWxlY3RBbGxEaXNhYmxlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIGl0ZW0udmlld3MuZmluZChcclxuICAgICAgICAoaXRlbSkgPT5cclxuICAgICAgICAgIGl0ZW0ubGFuZ0NvZGUgIT09IFwiRklOQU5DSUFMX0ZJR1VSRVNcIiAmJiB0aGlzLnNvbklkcy5pbmNsdWRlcyhpdGVtLmlkKVxyXG4gICAgICApXHJcbiAgICApXHJcbiAgICAgIGlzT3RoZXJDaGVja2VkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnNvbkxpc3QgPSBpdGVtLnZpZXdzLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICBsZXQgaXNEaXNhYmxlZCA9XHJcbiAgICAgICAgKGlzRmlndXJlc0NoZWNrZWQgJiYgaXRlbS5sYW5nQ29kZSAhPT0gXCJGSU5BTkNJQUxfRklHVVJFU1wiKSB8fFxyXG4gICAgICAgIChpdGVtLmxhbmdDb2RlID09PSBcIkZJTkFOQ0lBTF9GSUdVUkVTXCIgJiYgaXNPdGhlckNoZWNrZWQpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLml0ZW0sXHJcbiAgICAgICAgY2hlY2tlZDpcclxuICAgICAgICAgIHRoaXMuY2FjaGVFbnRpdHlUeXBlICYmIHRoaXMuY2FjaGVFbnRpdHlUeXBlICE9PSB0aGlzLmVudGl0eVR5cGVcclxuICAgICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgICA6IHRoaXMuc29uSWRzLmluY2x1ZGVzKGl0ZW0uaWQpLFxyXG4gICAgICAgIGRpc2FibGVkOlxyXG4gICAgICAgICAgdGhpcy5jYWNoZUVudGl0eVR5cGUgJiYgdGhpcy5jYWNoZUVudGl0eVR5cGUgIT09IHRoaXMuZW50aXR5VHlwZVxyXG4gICAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICAgIDogaXNEaXNhYmxlZCxcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FjaGVFbnRpdHlUeXBlID0gaXRlbS5lbnRpdHlUeXBlO1xyXG5cclxuICAgIGlmICghaXNJbml0KSB7XHJcbiAgICAgIHRoaXMuc29uSWRzID0gW107XHJcbiAgICAgIHRoaXMuZ3JhbmRzb25MaXN0ID0gW107XHJcbiAgICAgIHRoaXMub3JnaW5HcmFuZERhdGEgPSBbXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEFsbCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzU2VsZWN0QWxsRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgaWYgKHRoaXMuY2FjaGVFbnRpdHlUeXBlICYmIHRoaXMuY2FjaGVFbnRpdHlUeXBlICE9PSBpdGVtLmVudGl0eVR5cGUpIHtcclxuICAgICAgICB0aGlzLnNvbkxpc3QgPSBpdGVtLnZpZXdzLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uaXRlbSxcclxuICAgICAgICAgICAgY2hlY2tlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUl0ZW1DaGFuZ2UoZGF0YSwgdmFsPzogYm9vbGVhbikge1xyXG4gICAgaWYgKCFkYXRhKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodmFsKSB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XHJcbiAgICAgICAgZGF0YS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuc29uSWRzLmluY2x1ZGVzKGl0ZW0uaWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc29uSWRzLnB1c2goaXRlbS5pZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtLnRhYmxlcykpIHtcclxuICAgICAgICAgICAgaXRlbS50YWJsZXMuZm9yRWFjaCgoY2hpbGQpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuZ3JhbmRzb25MaXN0LnNvbWUoKGVsKSA9PiBlbC5pZCA9PT0gY2hpbGQuaWQpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyYW5kc29uTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgLi4uY2hpbGQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGZpbmFuY2lhbCBmaWd1cmVzIGNhbuKAmXQgYmUgc2VsZWN0ZWQgdG9nZXRoZXIgd2l0aCBvdGhlciBncm91cHNcclxuICAgICAgICBpZiAoZGF0YS5sYW5nQ29kZSAhPT0gXCJGSU5BTkNJQUxfRklHVVJFU1wiKSB7XHJcbiAgICAgICAgICB0aGlzLnNvbkxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5sYW5nQ29kZSA9PT0gXCJGSU5BTkNJQUxfRklHVVJFU1wiKSBpdGVtLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICF0aGlzLnNvbkxpc3QuZmluZChcclxuICAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5jaGVja2VkICYmIGl0ZW0ubGFuZ0NvZGUgIT09IFwiRklOQU5DSUFMX0ZJR1VSRVNcIlxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5zb25MaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICBpZiAoaXRlbS5sYW5nQ29kZSAhPT0gXCJGSU5BTkNJQUxfRklHVVJFU1wiKSBpdGVtLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RBbGxEaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRhdGEudGFibGVzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgIGlmICghdGhpcy5ncmFuZHNvbkxpc3Quc29tZSgoZWwpID0+IGVsLmlkID09PSBpdGVtLmlkKSkge1xyXG4gICAgICAgICAgICB0aGlzLmdyYW5kc29uTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAuLi5pdGVtLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoIXRoaXMuc29uSWRzLmluY2x1ZGVzKGRhdGEuaWQpKSB7XHJcbiAgICAgICAgICB0aGlzLnNvbklkcy5wdXNoKGRhdGEuaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5ncmFuZHNvbkxpc3QgPSBbXTtcclxuICAgICAgdGhpcy5zb25MaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBpZiAoZGF0YS5sYW5nQ29kZSA9PT0gXCJGSU5BTkNJQUxfRklHVVJFU1wiKSB7XHJcbiAgICAgICAgICBpdGVtLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmlzU2VsZWN0QWxsRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGl0ZW0uaWQgPT0gZGF0YS5pZCkge1xyXG4gICAgICAgICAgaXRlbS5jaGVja2VkID0gdmFsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXRlbS5jaGVja2VkKSB7XHJcbiAgICAgICAgICBpdGVtLnRhYmxlcy5mb3JFYWNoKChzb25JdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5ncmFuZHNvbkxpc3Quc29tZSgoZWwpID0+IGVsLmlkID09PSBzb25JdGVtLmlkKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ3JhbmRzb25MaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgLi4uc29uSXRlbSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGRhdGEubGFuZ0NvZGUgIT09IFwiRklOQU5DSUFMX0ZJR1VSRVNcIiAmJlxyXG4gICAgICAgICF0aGlzLnNvbkxpc3QuZmluZChcclxuICAgICAgICAgIChpdGVtKSA9PiBpdGVtLmNoZWNrZWQgJiYgaXRlbS5sYW5nQ29kZSAhPT0gXCJGSU5BTkNJQUxfRklHVVJFU1wiXHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNvbkxpc3QuZm9yRWFjaCgob2JqKSA9PiB7XHJcbiAgICAgICAgICBpZiAob2JqLmxhbmdDb2RlID09PSBcIkZJTkFOQ0lBTF9GSUdVUkVTXCIpIG9iai5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc29uSWRzID0gdGhpcy5zb25JZHMuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9IGRhdGEuaWQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRTZWxlY3RlZEFsbFN0YXR1cygpO1xyXG4gICAgdGhpcy5vcmdpbkdyYW5kRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5ncmFuZHNvbkxpc3QpKTtcclxuICAgIGlmICghdGhpcy5yZWZbXCJkZXN0cm95ZWRcIl0pIHtcclxuICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXM7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNlbGVjdEFsbCh2YWwpIHtcclxuICAgIGlmICghdmFsKSB7XHJcbiAgICAgIHRoaXMub3JnaW5HcmFuZERhdGEgPSBbXTtcclxuICAgIH1cclxuICAgIHRoaXMuZ3JhbmRzb25MaXN0ID0gW107XHJcbiAgICB0aGlzLnNvbklkcyA9IFtdO1xyXG4gICAgdGhpcy5zb25MaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKGl0ZW0ubGFuZ0NvZGUgIT09IFwiRklOQU5DSUFMX0ZJR1VSRVNcIikgaXRlbS5jaGVja2VkID0gdmFsO1xyXG4gICAgICBpZiAodmFsKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0ubGFuZ0NvZGUgPT09IFwiRklOQU5DSUFMX0ZJR1VSRVNcIikge1xyXG4gICAgICAgICAgaXRlbS5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc29uSWRzLnB1c2goaXRlbS5pZCk7XHJcbiAgICAgICAgaXRlbS50YWJsZXMuZm9yRWFjaCgoc29uSXRlbSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmdyYW5kc29uTGlzdC5zb21lKChlbCkgPT4gZWwuaWQgPT09IHNvbkl0ZW0uaWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JhbmRzb25MaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgIC4uLnNvbkl0ZW0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChpdGVtLmxhbmdDb2RlID09PSBcIkZJTkFOQ0lBTF9GSUdVUkVTXCIpIGl0ZW0uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLm9yZ2luR3JhbmREYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmdyYW5kc29uTGlzdCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRvRmlsdGVyID0gdGhyb3R0bGUoKHZhbCkgPT4gdGhpcy5kb1NlYXJjaCh2YWwpLCAyMDApO1xyXG4gIHB1YmxpYyBkb1NlYXJjaCh2YWwpIHtcclxuICAgIGxldCB0ZW1wTGlzdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5vcmdpbkdyYW5kRGF0YSkpO1xyXG4gICAgaWYgKHZhbCkge1xyXG4gICAgICB0aGlzLmdyYW5kc29uTGlzdCA9IHRlbXBMaXN0LmZpbHRlcigoaXRlbSkgPT5cclxuICAgICAgICBpdGVtLmxhbmdWYWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHZhbC50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5ncmFuZHNvbkxpc3QgPSB0ZW1wTGlzdDtcclxuICAgIH1cclxuICB9XHJcbiAgLy8g5L+d5a2Y5by556qX562b6YCJ5pWw5o2uXHJcbiAgc2F2ZURhdGEoKSB7XHJcbiAgICB0aGlzLnBiZi5pbnRyb1N0ZXAubmV4dChcImNvbXBsZXRlXCIpO1xyXG4gICAgdGhpcy5wYmYucGFnZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgbGV0IGNvbmZpZztcclxuICAgIGxldCBkYXRhbWFydFZpZXdDb2RlID0gdGhpcy5zb25MaXN0LmZpbHRlcigoZWwpID0+XHJcbiAgICAgIHRoaXMuc29uSWRzLmluY2x1ZGVzKGVsLmlkKVxyXG4gICAgKTtcclxuICAgIGNvbmZpZyA9IHtcclxuICAgICAgZGF0YW1hcnRJZDogdGhpcy5mYXRoZXJJZCxcclxuICAgICAgZGF0YW1hcnRWaWV3SWQ6IHRoaXMuc29uSWRzLmpvaW4oXCIsXCIpLFxyXG4gICAgICB2aWV3czogZGF0YW1hcnRWaWV3Q29kZS5tYXAoKGUpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgZGF0YW1hcnRWaWV3SWQ6IGUuaWQsXHJcbiAgICAgICAgICBkYXRhbWFydFZpZXdDb2RlOiBlLmxhbmdDb2RlLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IGVudGl0eUxpc3QgPVxyXG4gICAgICB0aGlzLmRhdGEuZGFzaGJvYXJkLmVudGl0eVR5cGUgPT09IHRoaXMuZW50aXR5VHlwZVxyXG4gICAgICAgID8gdGhpcy5EYXNoYm9hcmRQb3JsZXRzU2VydmljZS5lbnRpdHlMaXN0XHJcbiAgICAgICAgOiBbXTtcclxuXHJcbiAgICBjb25zdCBkYXRhT2JqID0ge1xyXG4gICAgICBlbnRpdHlMaXN0LFxyXG4gICAgICBhY2NvdW50SWQ6IHRoaXMudXNlckluZm8uYWNjb3VudElkLFxyXG4gICAgICB1c2VySWQ6IHRoaXMudXNlckluZm8uaWQsXHJcbiAgICAgIGRhc2hib2FyZElkOiB0aGlzLmRhdGEuZGFzaGJvYXJkSWQsXHJcbiAgICAgIGRhdGFNYXJ0VGFibGVzOiB0aGlzLmdyYW5kc29uTGlzdCxcclxuICAgICAgZW50aXR5VHlwZTogdGhpcy5lbnRpdHlUeXBlIHx8IHRoaXMuZGF0YS5kYXNoYm9hcmQuZW50aXR5VHlwZSxcclxuICAgICAgY29uZmlnOiBKU09OLnN0cmluZ2lmeShjb25maWcpLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmh0dHAucG9zdCh0aGlzLmFwaS51cmxMaXN0LkFkZERhdGFNYXJ0VGFibGVzLCBkYXRhT2JqLCAocmVzKSA9PiB7XHJcbiAgICAgIGlmIChyZXMuc3RhdHVzID09PSBcIlNVQ0NFU1NcIikge1xyXG4gICAgICAgIGNvbnN0IF9zYXZlTWVzc2FnZSA9XHJcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLkRBU0hCT0FSRF9QUk9QRVJUSUVTX1NBVkVEIHx8XHJcbiAgICAgICAgICBcIi5EQVNIQk9BUkRfUFJPUEVSVElFU19TQVZFRFwiO1xyXG4gICAgICAgIHRoaXMuc2hvd1RvYXN0KF9zYXZlTWVzc2FnZSwgXCJTdWNjZXNzXCIpO1xyXG4gICAgICAgIHRoaXMuY29uZmlnLmRhdGFtYXJ0Vmlld0lkID0gdGhpcy5zb25JZHMuam9pbihcIixcIik7XHJcbiAgICAgICAgdGhpcy5jb25maWcudmlld3MgPSBbXTtcclxuICAgICAgICB0aGlzLnNvbkxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zb25JZHMuZm9yRWFjaCgoc29uSWQpID0+IHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT09IHNvbklkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcudmlld3MucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBkYXRhbWFydFZpZXdDb2RlOiBpdGVtLmxhbmdDb2RlLFxyXG4gICAgICAgICAgICAgICAgZGF0YW1hcnRWaWV3SWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEuZGFzaGJvYXJkLmNvbmZpZyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlnKTtcclxuICAgICAgICBpZiAodGhpcy5kYXRhLmVkaXQpIHtcclxuICAgICAgICAgIHRoaXMuRGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucG9ydGxldEZpZWxkc19UZW1wID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGVudGl0eUxpc3QgJiZcclxuICAgICAgICAgIGVudGl0eUxpc3QubGVuZ3RoICYmXHJcbiAgICAgICAgICB0aGlzLmRhdGEuZGFzaGJvYXJkLmVudGl0eVR5cGUgPT09IHRoaXMuZW50aXR5VHlwZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5wYmYudHJpZ2dlckRhc2hib2FyZFJlZnJlc2gubmV4dCh7XHJcbiAgICAgICAgICAgIGVudGl0eUxpc3QsXHJcbiAgICAgICAgICAgIGlkOiB0aGlzLmRhdGEuZGFzaGJvYXJkLmlkLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5EYXNoYm9hcmRQb3JsZXRzU2VydmljZS5HZXREYXNoYm9hcmRWMShcclxuICAgICAgICAgIHRoaXMuZGF0YS5kYXNoYm9hcmRJZCxcclxuICAgICAgICAgIHRydWUsXHJcbiAgICAgICAgICAocmVzLCBwb3J0bGV0cyA9IFtdKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5jaGFuZ2VsYXlvdXQubmV4dCh7XHJcbiAgICAgICAgICAgICAgc3RhdHVzOiBcInRydWVcIixcclxuICAgICAgICAgICAgICBpZDogdGhpcy5kYXRhLmRhc2hib2FyZC5pZCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHtcclxuICAgICAgICAgICAgICBwdXNoX2J0bjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgcG9ydGxldDoge30sXHJcbiAgICAgICAgICAgICAgcG9ydGxldHMsXHJcbiAgICAgICAgICAgICAgZGFzaGJvYXJkOiByZXMsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGJmLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5wYmYucGFnZUxvYWRpbmdfLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgY29uc3QgX3NhdmVNZXNzYWdlID0gcmVzLm1lc3NhZ2VzWzBdLm1lc3NhZ2UgfHwgXCJlcnJvclwiO1xyXG4gICAgICAgIHRoaXMuc2hvd1RvYXN0KF9zYXZlTWVzc2FnZSwgXCJFcnJvclwiKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vIHRvYXN0IG1zZ1xyXG4gIHB1YmxpYyBzaG93VG9hc3QobXNnLCBzdGF0dXM6IFwiU3VjY2Vzc1wiIHwgXCJFcnJvclwiKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd05vdGlmaWNhdGlvbihtc2csIHtcclxuICAgICAgc3RhdHVzLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vIOWFs+mXreW8ueeql1xyXG4gIHB1YmxpYyBjbG9zZVBvcHVwKCkge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cIm5ld19tYXJ0X2RhdGFfcG9wdXBcIj5cclxuXHQ8ZGl2IGNsYXNzPVwiY2xvc2VfYm94XCIgKGNsaWNrKT1cImNsb3NlUG9wdXAoKVwiPlxyXG5cdFx0PGltZyBzcmM9XCIuLi8uLi8uLi8uLi9hc3NldHMvaW1nL2RpYWxvZy1jbG9zZS5zdmdcIiBjbGFzcz1cImRlbGV0ZUljb25cIiAvPlxyXG5cdDwvZGl2PlxyXG5cdDxkaXYgY2xhc3M9XCJwb3B1cF9oZWFkZXJcIj5cclxuXHRcdDxwIGNsYXNzPVwicG9wdXBfdGl0bGVcIj57eyB0cmFuc2xhdGlvbi5EQVRBX01BUlQgfHwgXCIuREFUQV9NQVJUXCIgfX08L3A+XHJcblx0XHQ8cCBjbGFzcz1cInBvcHVwX3N1Yl90aXRsZVwiPlxyXG5cdFx0XHR7e1xyXG5cdFx0XHRcdHRyYW5zbGF0aW9uLlBMU19TRUxFQ1RfREFUQV9UQUJMRVMgfHxcclxuXHRcdFx0XHRcdFwiLlBsZWFzZSBzZWxlY3QgZGF0YSB0YWJsZXMgZm9yIHRoaXMgZGFzaGJvYXJkXCJcclxuXHRcdFx0fX1cclxuXHRcdDwvcD5cclxuXHQ8L2Rpdj5cclxuXHQ8ZGl2IGNsYXNzPVwicG9wdXBfbWFpbl9jb250YWluZXJcIj5cclxuXHRcdDxkaXYgY2xhc3M9XCJsZWZ0X21lbnVfY29udGFpbmVyXCIgaWQ9XCJpbmZvLXN0ZXAtMlwiPlxyXG5cdFx0XHQ8ZGl2XHJcblx0XHRcdFx0Y2xhc3M9XCJtZW51X2l0ZW1cIlxyXG5cdFx0XHRcdCpuZ0Zvcj1cImxldCBpdGVtIG9mIGZhdGhlckxpc3RcIlxyXG5cdFx0XHRcdFtuZ0NsYXNzXT1cInsgc2VsZWN0SXRlbTogZmF0aGVySWQgPT09IGl0ZW0uaWQgfVwiXHJcblx0XHRcdFx0KGNsaWNrKT1cImdldGRhdGFNYXJ0KGl0ZW0sIHRydWUpXCJcclxuXHRcdFx0PlxyXG5cdFx0XHRcdDxzcGFuIGNsYXNzPVwiYWN0aXZlTGluZVwiICpuZ0lmPVwiZmF0aGVySWQgPT09IGl0ZW0uaWRcIj48L3NwYW4+XHJcblx0XHRcdFx0e3tcclxuXHRcdFx0XHRcdGl0ZW0uRnJvbVFCXHJcblx0XHRcdFx0XHRcdD8gaXRlbS5sYW5nQ29kZVxyXG5cdFx0XHRcdFx0XHQ6IHRyYW5zbGF0aW9uW2l0ZW0ubGFuZ0NvZGVdIHx8IFwiLlwiICsgaXRlbS5sYW5nQ29kZVxyXG5cdFx0XHRcdH19XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0PC9kaXY+XHJcblx0XHQ8ZGl2IGNsYXNzPVwidGFibGVfY29udGFpbmVyXCIgaWQ9XCJpbmZvLXN0ZXAtM1wiIChjbGljayk9XCJuZXh0U3RlcCgpXCI+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZV9jb250ZW50XCI+XHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cImdyb3VwX2RhdGFcIj5cclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZV9oZWFkZXJcIj5cclxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImRpdl9ncm91cFwiPlxyXG5cdFx0XHRcdFx0XHRcdDxtYXQtY2hlY2tib3hcclxuXHRcdFx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJpc1NlbGVjdEFsbERpc2FibGVkXCJcclxuXHRcdFx0XHRcdFx0XHRcdFtjb2xvcl09XCIncHJpbWFyeSdcIlxyXG5cdFx0XHRcdFx0XHRcdFx0WyhuZ01vZGVsKV09XCJzZWxlY3RlZEFsbFwiXHJcblx0XHRcdFx0XHRcdFx0XHQobmdNb2RlbENoYW5nZSk9XCJzZWxlY3RBbGwoJGV2ZW50KVwiXHJcblx0XHRcdFx0XHRcdFx0XHQ+e3tcclxuXHRcdFx0XHRcdFx0XHRcdFx0dHJhbnNsYXRpb25bXCJHUk9VUFwiXSB8fCBcIi5ncm91cFwiXHJcblx0XHRcdFx0XHRcdFx0XHR9fTwvbWF0LWNoZWNrYm94XHJcblx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImdyb3VwX2l0ZW1fX2JveFwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNvbkxpc3RcIj5cclxuXHRcdFx0XHRcdFx0PG1hdC1jaGVja2JveFxyXG5cdFx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcclxuXHRcdFx0XHRcdFx0XHRbY29sb3JdPVwiJ3ByaW1hcnknXCJcclxuXHRcdFx0XHRcdFx0XHRbKG5nTW9kZWwpXT1cIml0ZW0uY2hlY2tlZFwiXHJcblx0XHRcdFx0XHRcdFx0KG5nTW9kZWxDaGFuZ2UpPVwiaGFuZGxlSXRlbUNoYW5nZShpdGVtLCAkZXZlbnQpXCJcclxuXHRcdFx0XHRcdFx0XHQ+e3tcclxuXHRcdFx0XHRcdFx0XHRcdGl0ZW0uRnJvbVFCXHJcblx0XHRcdFx0XHRcdFx0XHRcdD8gaXRlbS5sYW5nQ29kZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IHRyYW5zbGF0aW9uW2l0ZW0ubGFuZ0NvZGVdIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgXCIuXCIgKyBpdGVtLmxhbmdDb2RlXHJcblx0XHRcdFx0XHRcdFx0fX08L21hdC1jaGVja2JveFxyXG5cdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdDxlanMtdG9vbHRpcFxyXG5cdFx0XHRcdFx0XHRcdCpuZ0lmPVwiaXRlbS5sYW5nQ29kZSA9PT0gJ0ZJTkFOQ0lBTF9GSUdVUkVTJ1wiXHJcblx0XHRcdFx0XHRcdFx0aWQ9XCJ0b29sdGlwXCJcclxuXHRcdFx0XHRcdFx0XHRjc3NDbGFzcz1cImZpZ3VyZXMtdG9vbHRpcFwiXHJcblx0XHRcdFx0XHRcdFx0W2NvbnRlbnRdPVwiXHJcblx0XHRcdFx0XHRcdFx0XHR0cmFuc2xhdGlvbi5EQVNIQk9BUkRfRklOQU5DSUFMX0ZJR1VSRVNfVE9PTFRJUFMgfHxcclxuXHRcdFx0XHRcdFx0XHRcdCdGaW5hbmNpYWwgRmlndXJlcyBjYW7igJl0IGJlIHNlbGVjdGVkIHRvZ2V0aGVyIHdpdGggb3RoZXIgZ3JvdXBzLidcclxuXHRcdFx0XHRcdFx0XHRcIlxyXG5cdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHQ8L2Vqcy10b29sdGlwPlxyXG5cdFx0XHRcdFx0XHQ8IS0tIDxlanMtdG9vbHRpcFxyXG5cdFx0XHRcdFx0XHRcdCpuZ0lmPVwiXHJcblx0XHRcdFx0XHRcdFx0XHREYXNoYm9hcmRQb3JsZXRzU2VydmljZS5jaGVja0lzUTJRKGl0ZW0udGFibGVzKVxyXG5cdFx0XHRcdFx0XHRcdFwiXHJcblx0XHRcdFx0XHRcdFx0Y3NzQ2xhc3M9XCJmaWd1cmVzLXRvb2x0aXBcIlxyXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ9XCJRMlFcIlxyXG5cdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHQ8L2Vqcy10b29sdGlwPiAtLT5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZV9kYXRhXCI+XHJcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGFibGVfaGVhZGVyXCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJkYXRhX3RhYmxlX2JveFwiPlxyXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZV90aXRsZVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0e3sgdHJhbnNsYXRpb25bXCJEQVRBX1RBQkxFXCJdIHx8IFwiLkRhdGEgVGFibGVcIiB9fVxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJzZWFyY2hfY29udGFpbmVyXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXRcclxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cInRleHRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRtYXRJbnB1dFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRbcGxhY2Vob2xkZXJdPVwidHJhbnNsYXRpb25bJ1NFQVJDSCddXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzZWFyY2hfaW5wdXRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQoa2V5dXApPVwiZG9GaWx0ZXIoJGV2ZW50LnRhcmdldC52YWx1ZSlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRhdXRvY29tcGxldGU9XCJvZmZcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQoa2V5ZG93bik9XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYmYuZGlzYWJsZWRJbnB1dEVudGVyRXZlbnQoJGV2ZW50KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0Lz5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZV9tYWluX2NvbnRlbnRcIiBzdHlsZT1cIm92ZXJmbG93OiBhdXRvXCI+XHJcblx0XHRcdFx0XHRcdDxkaXZcclxuXHRcdFx0XHRcdFx0XHQqbmdGb3I9XCJsZXQgaXRlbSBvZiBncmFuZHNvbkxpc3RcIlxyXG5cdFx0XHRcdFx0XHRcdFtuZ0NsYXNzXT1cInsgbWF4Qm94OiBncmFuZHNvbkxpc3QubGVuZ3RoID49IDExIH1cIlxyXG5cdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0PGRpdiAqbmdJZj1cIiFpdGVtLmlzSGlkZVwiIGNsYXNzPVwidGFibGVfZGF0YV9pdGVtXCI+XHJcblx0XHRcdFx0XHRcdFx0XHR7e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpdGVtLkZyb21RQlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD8gaXRlbS5sYW5nQ29kZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDogdHJhbnNsYXRpb25baXRlbS5sYW5nQ29kZV0gfHxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgIFwiLlwiICsgaXRlbS5sYW5nQ29kZVxyXG5cdFx0XHRcdFx0XHRcdFx0fX1cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0PC9kaXY+XHJcblx0XHQ8L2Rpdj5cclxuXHQ8L2Rpdj5cclxuXHQ8ZGl2IGNsYXNzPVwicG9wdXBfZm9vdGVyXCI+XHJcblx0XHQ8YnV0dG9uIGNsYXNzPVwiY2FuY2xlX2J0biBwb3B1cF9idG5cIiAoY2xpY2spPVwiY2xvc2VQb3B1cCgpXCI+XHJcblx0XHRcdHt7IHRyYW5zbGF0aW9uW1wiQ0FOQ0VMXCJdIHx8IFwiLkNBTkNFTFwiIH19XHJcblx0XHQ8L2J1dHRvbj5cclxuXHRcdDxidXR0b25cclxuXHRcdFx0Y2xhc3M9XCJzdXJlX2J0biBwb3B1cF9idG5cIlxyXG5cdFx0XHRpZD1cImluZm8tc3RlcC01XCJcclxuXHRcdFx0KGNsaWNrKT1cInNhdmVEYXRhKClcIlxyXG5cdFx0XHRbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgIWVudGl0eVR5cGUgfHwgZ3JhbmRzb25MaXN0Lmxlbmd0aCA9PSAwXCJcclxuXHRcdD5cclxuXHRcdFx0e3sgdHJhbnNsYXRpb25bXCJTQVZFXCJdIHx8IFwiLlNBVkVcIiB9fVxyXG5cdFx0PC9idXR0b24+XHJcblx0PC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=