@esfaenza/es-charts 15.2.7 → 16.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/{esm2020 → esm2022}/esfaenza-es-charts.mjs +4 -4
  2. package/{esm2020 → esm2022}/lib/adapters/BaseAdapter.mjs +50 -50
  3. package/{esm2020 → esm2022}/lib/adapters/IBaseAdapter.mjs +1 -1
  4. package/{esm2020 → esm2022}/lib/components/base/base-chart.component.mjs +350 -350
  5. package/{esm2020 → esm2022}/lib/components/chart-pager/chart-pager.component.mjs +89 -89
  6. package/{esm2020 → esm2022}/lib/components/specializations/es-area-chart.component.mjs +77 -77
  7. package/{esm2020 → esm2022}/lib/components/specializations/es-chart.component.mjs +122 -122
  8. package/{esm2020 → esm2022}/lib/components/specializations/es-line-chart.component.mjs +112 -112
  9. package/{esm2020 → esm2022}/lib/components/specializations/es-pie-chart.component.mjs +98 -98
  10. package/{esm2020 → esm2022}/lib/components/specializations/es-vertical-2d-chart.component.mjs +95 -95
  11. package/{esm2020 → esm2022}/lib/components/specializations/es-vertical-chart.component.mjs +92 -92
  12. package/{esm2020 → esm2022}/lib/components/specializations/es-vertical-stacked-chart.component.mjs +92 -92
  13. package/{esm2020 → esm2022}/lib/es-charts.module.mjs +67 -67
  14. package/{esm2020 → esm2022}/lib/models/EsChaartsModuleConfig.mjs +5 -5
  15. package/{esm2020 → esm2022}/lib/models/core/ChartDispatcher.mjs +91 -91
  16. package/{esm2020 → esm2022}/lib/models/core/ChartLoader.mjs +212 -212
  17. package/{esm2020 → esm2022}/lib/models/core/ChartThemes.mjs +60 -60
  18. package/{esm2020 → esm2022}/lib/models/data/AreaChartData.mjs +15 -15
  19. package/{esm2020 → esm2022}/lib/models/data/LineChartData.mjs +15 -15
  20. package/{esm2020 → esm2022}/lib/models/data/PagedChartData.mjs +19 -19
  21. package/{esm2020 → esm2022}/lib/models/data/PieChartData.mjs +13 -13
  22. package/{esm2020 → esm2022}/lib/models/data/Vertical2DChartData.mjs +15 -15
  23. package/{esm2020 → esm2022}/lib/models/data/VerticalChartData.mjs +13 -13
  24. package/{esm2020 → esm2022}/lib/models/data/VerticalStackedChartData.mjs +13 -13
  25. package/{esm2020 → esm2022}/lib/models/data/base/DateValue.mjs +10 -10
  26. package/{esm2020 → esm2022}/lib/models/data/base/KeyValue.mjs +10 -10
  27. package/{esm2020 → esm2022}/lib/models/data/base/KeyValueColor.mjs +12 -12
  28. package/{esm2020 → esm2022}/lib/models/data/base/Limit.mjs +15 -15
  29. package/{esm2020 → esm2022}/lib/models/data/base/LineSerie.mjs +27 -27
  30. package/{esm2020 → esm2022}/lib/models/settings/AreaChartSettings.mjs +10 -10
  31. package/{esm2020 → esm2022}/lib/models/settings/LineChartSettings.mjs +10 -10
  32. package/{esm2020 → esm2022}/lib/models/settings/PieChartSettings.mjs +6 -6
  33. package/{esm2020 → esm2022}/lib/models/settings/Vertical2DChartSettings.mjs +10 -10
  34. package/{esm2020 → esm2022}/lib/models/settings/VerticalChartSettings.mjs +10 -10
  35. package/{esm2020 → esm2022}/lib/models/settings/VerticalStackedChartSettings.mjs +10 -10
  36. package/{esm2020 → esm2022}/lib/models/settings/base/BaseInterval.mjs +5 -5
  37. package/{esm2020 → esm2022}/lib/models/settings/base/BaseSettings.mjs +5 -5
  38. package/{esm2020 → esm2022}/lib/models/settings/base/LegendPad.mjs +5 -5
  39. package/esm2022/lib/services/AreaChartService.mjs +157 -0
  40. package/esm2022/lib/services/LineChartService.mjs +392 -0
  41. package/{esm2020 → esm2022}/lib/services/PieChartService.mjs +113 -113
  42. package/{esm2020 → esm2022}/lib/services/Vertical2DChartService.mjs +162 -162
  43. package/{esm2020 → esm2022}/lib/services/VerticalChartService.mjs +113 -113
  44. package/{esm2020 → esm2022}/lib/services/VerticalStackedChartService.mjs +126 -126
  45. package/{esm2020 → esm2022}/lib/services/base/IBaseService.mjs +1 -1
  46. package/{esm2020 → esm2022}/lib/tokens.mjs +13 -13
  47. package/{esm2020 → esm2022}/public-api.mjs +38 -38
  48. package/{fesm2020 → fesm2022}/esfaenza-es-charts.mjs +2728 -2688
  49. package/fesm2022/esfaenza-es-charts.mjs.map +1 -0
  50. package/index.d.ts +5 -5
  51. package/lib/adapters/BaseAdapter.d.ts +40 -40
  52. package/lib/adapters/IBaseAdapter.d.ts +35 -35
  53. package/lib/components/base/base-chart.component.d.ts +304 -304
  54. package/lib/components/chart-pager/chart-pager.component.d.ts +70 -70
  55. package/lib/components/specializations/es-area-chart.component.d.ts +53 -53
  56. package/lib/components/specializations/es-chart.component.d.ts +71 -71
  57. package/lib/components/specializations/es-line-chart.component.d.ts +112 -112
  58. package/lib/components/specializations/es-pie-chart.component.d.ts +81 -81
  59. package/lib/components/specializations/es-vertical-2d-chart.component.d.ts +79 -79
  60. package/lib/components/specializations/es-vertical-chart.component.d.ts +74 -74
  61. package/lib/components/specializations/es-vertical-stacked-chart.component.d.ts +74 -74
  62. package/lib/es-charts.module.d.ts +18 -18
  63. package/lib/models/EsChaartsModuleConfig.d.ts +24 -24
  64. package/lib/models/core/ChartDispatcher.d.ts +46 -46
  65. package/lib/models/core/ChartLoader.d.ts +92 -92
  66. package/lib/models/core/ChartThemes.d.ts +23 -23
  67. package/lib/models/data/AreaChartData.d.ts +22 -22
  68. package/lib/models/data/LineChartData.d.ts +16 -16
  69. package/lib/models/data/PagedChartData.d.ts +23 -23
  70. package/lib/models/data/PieChartData.d.ts +13 -13
  71. package/lib/models/data/Vertical2DChartData.d.ts +27 -27
  72. package/lib/models/data/VerticalChartData.d.ts +13 -13
  73. package/lib/models/data/VerticalStackedChartData.d.ts +21 -21
  74. package/lib/models/data/base/DateValue.d.ts +9 -9
  75. package/lib/models/data/base/KeyValue.d.ts +9 -9
  76. package/lib/models/data/base/KeyValueColor.d.ts +11 -11
  77. package/lib/models/data/base/Limit.d.ts +14 -14
  78. package/lib/models/data/base/LineSerie.d.ts +28 -28
  79. package/lib/models/settings/AreaChartSettings.d.ts +10 -10
  80. package/lib/models/settings/LineChartSettings.d.ts +67 -67
  81. package/lib/models/settings/PieChartSettings.d.ts +34 -34
  82. package/lib/models/settings/Vertical2DChartSettings.d.ts +36 -36
  83. package/lib/models/settings/VerticalChartSettings.d.ts +31 -31
  84. package/lib/models/settings/VerticalStackedChartSettings.d.ts +31 -31
  85. package/lib/models/settings/base/BaseInterval.d.ts +13 -13
  86. package/lib/models/settings/base/BaseSettings.d.ts +67 -67
  87. package/lib/models/settings/base/LegendPad.d.ts +21 -21
  88. package/lib/services/AreaChartService.d.ts +32 -31
  89. package/lib/services/LineChartService.d.ts +48 -47
  90. package/lib/services/PieChartService.d.ts +27 -27
  91. package/lib/services/Vertical2DChartService.d.ts +39 -39
  92. package/lib/services/VerticalChartService.d.ts +33 -33
  93. package/lib/services/VerticalStackedChartService.d.ts +35 -35
  94. package/lib/services/base/IBaseService.d.ts +38 -38
  95. package/lib/tokens.d.ts +13 -13
  96. package/package.json +11 -17
  97. package/public-api.d.ts +35 -35
  98. package/esm2020/lib/services/AreaChartService.mjs +0 -137
  99. package/esm2020/lib/services/LineChartService.mjs +0 -372
  100. package/fesm2015/esfaenza-es-charts.mjs +0 -2829
  101. package/fesm2015/esfaenza-es-charts.mjs.map +0 -1
  102. package/fesm2020/esfaenza-es-charts.mjs.map +0 -1
@@ -1,212 +1,212 @@
1
- import { Inject, Injectable } from '@angular/core';
2
- import { ChartThemes } from './ChartThemes';
3
- import { ESC_DEBUG_MODE } from '../../tokens';
4
- import * as i0 from "@angular/core";
5
- /**
6
- * Classe di supporto al caricamento dinamico dei vari pezzi di amcharts che mi servono per il grafico (temi, locali, ecc...)
7
- *
8
- * Essenzialmente ogni volta che viene creato un grafico, questo acquisisce il tema e il locale applicato IN QUEL MOMENTO,
9
- * questo significa che per creare due grafici con temi diversi bisogna fare:
10
- *
11
- * 1) Caricamento tema 1
12
- *
13
- * 2) Creazione grafico 1
14
- *
15
- * 3) Scaricamento tema 1
16
- *
17
- * 3) Caricamento tema 2
18
- *
19
- * 4) Creazione grafico 2
20
- *
21
- */
22
- export class ChartLoader {
23
- /**
24
- * @ignore
25
- */
26
- constructor(logs) {
27
- this.logs = logs;
28
- /**
29
- * Indica se attualmente ho le animazioni caricate in modo da non ricaricarle inutilmente
30
- */
31
- this.AnimationsAreLoaded = false;
32
- /**
33
- * Indica l'ultimo tema caricato in modo da non ricaricarlo inutilmente qualora il prossimo grafico da creare richieda lo stesso tema
34
- */
35
- this.LastLoadedTheme = "";
36
- /**
37
- * Cache dei temi (moduli caricati dinamicamente)
38
- */
39
- this.themeCache = {};
40
- /**
41
- * Cache delle localizzazioni (moduli caricati dinamicamente)
42
- */
43
- this.localizationCache = {};
44
- }
45
- /**
46
- * Applica il tema con le animazioni all'istanza globale di amCharts
47
- *
48
- * @param {Object} chartsCore Istanza globale di amCharts
49
- * @returns {Promise} Promise che identifica la fine del caricamento
50
- */
51
- applyAnimations(chartsCore) {
52
- if (!this.AnimationsAreLoaded) {
53
- return this.importIfNeeded('themes', ChartThemes.animated).then(() => {
54
- this.log("CORE: Applying theme " + ChartThemes.animated);
55
- chartsCore.useTheme(this.themeCache[ChartThemes.animated]);
56
- this.AnimationsAreLoaded = true;
57
- });
58
- }
59
- else {
60
- this.log("CORE: theme already applyed " + ChartThemes.animated);
61
- return new Promise((resolve) => { resolve(true); });
62
- }
63
- }
64
- /**
65
- * De-applica il tema con le animazioni dall'istanza globale di amCharts
66
- *
67
- * @param {Object} chartsCore Istanza globale di amCharts
68
- * @returns {Promise} Promise che identifica la fine dello scarico
69
- */
70
- unapplyAnimations(chartsCore) {
71
- if (this.AnimationsAreLoaded) {
72
- this.log("CORE: Animations in use, unapplying theme " + ChartThemes.animated);
73
- chartsCore.unuseTheme(this.themeCache[ChartThemes.animated]);
74
- this.AnimationsAreLoaded = false;
75
- }
76
- else
77
- this.log("CORE: Animations already unused, no need to unapply them");
78
- return new Promise((resolve) => { resolve(true); });
79
- }
80
- /**
81
- * Applica il tema specificato all'istanza globale di amCharts
82
- *
83
- * @param {Object} chartsCore Istanza globale di amCharts
84
- * @param {'spiritedaway' | 'moonrisekingdom' | 'frozen' | 'dark' | 'kelly' | 'material' | 'dataviz' | 'none'} theme Tema da applicare
85
- * @returns {Promise} Promise che identifica la fine del caricamento
86
- */
87
- applyTheme(chartsCore, theme) {
88
- // Ultimo tema applicato è lo stesso che mi è stato richiesto di applicare --> NO-OP
89
- if (this.LastLoadedTheme == theme) {
90
- this.log("CORE: theme already applied " + theme);
91
- return new Promise((resolve) => { resolve(true); });
92
- }
93
- // Scarico il tema precedente a prescindere, ormai non mi serve più
94
- this.unapplyPreviousTheme(chartsCore);
95
- // Il tema è il none --> registro la cosa e basta, il tema precedente è stato rimosso subito qui sopra ^
96
- if (theme == ChartThemes.none) {
97
- this.LastLoadedTheme = ChartThemes.none;
98
- return new Promise((resolve) => { resolve(true); });
99
- }
100
- // Il tema è diverso dal precedente e non è il tema vuoto --> Importo il tema specificato se non presente in memoria e lo applico al grafico attuale
101
- return this.importIfNeeded('themes', theme).then(() => {
102
- this.log("CORE: Applying theme " + theme);
103
- chartsCore.useTheme(this.themeCache[theme]);
104
- this.LastLoadedTheme = theme;
105
- });
106
- }
107
- /**
108
- * De-applica il tema precedente dall'istanza globale di amCharts
109
- *
110
- * @param {Object} chartsCore Istanza globale di amCharts
111
- */
112
- unapplyPreviousTheme(chartsCore) {
113
- if (!this.LastLoadedTheme || this.LastLoadedTheme == ChartThemes.none)
114
- return;
115
- this.log("CORE: Unapplying previously used theme " + this.LastLoadedTheme);
116
- chartsCore.unuseTheme(this.themeCache[this.LastLoadedTheme]);
117
- }
118
- /**
119
- * Applica il locale specificato all'istanza specifica del grafico
120
- *
121
- * @param {amCharts.Chart} chart Istanza specifica del grafico a cui applicare il locale
122
- * @param {string} locale Locale da applicare
123
- * @returns {Promise} Promise che identifica la fine del caricamento
124
- */
125
- applyLocale(chart, locale) {
126
- return this.importIfNeeded('lang', locale).then(() => {
127
- this.log("Chart " + chart.htmlContainer.id + ": applying locale " + locale);
128
- chart.language.locale = this.localizationCache[locale];
129
- });
130
- }
131
- /**
132
- * Permette di importare, se serve un dato tema o localizzazione
133
- *
134
- * @param {'lang' | 'themes'} what Oggetto da importare, se localizzazione o tema
135
- * @param {string} item Chiave dell'oggetto da importare
136
- *
137
- * @returns {Promise} Promise che identifica la fine del caricamento
138
- */
139
- importIfNeeded(what, item) {
140
- // Se sto cercando di caricare qualcosa di già caricato non faccio nulla
141
- if (!(what == 'themes' && !this.themeCache[item]) && !(what == 'lang' && !this.localizationCache[item])) {
142
- this.log("CORE: " + (what == 'lang' ? "Language " : "Theme ") + item + " already loaded");
143
- return new Promise((resolve) => { resolve(true); });
144
- }
145
- this.log("CORE: Loading " + (what == 'lang' ? "language " : "theme ") + item);
146
- /*
147
- * ****************************
148
- * ******** ATTENZIONE ********
149
- * ****************************
150
- *
151
- * Se stai vedendo questo codice di import e stai valutando di riscriverlo come:
152
- *
153
- * V V
154
- * import(`@amcharts/amcharts4/${what}/${item}`).then(module => {
155
- * if (what == 'themes') this.themeCache[item] = module.default;
156
- * else if (what == 'lang') this.localizationCache[item] = module.default;
157
- * });
158
- *
159
- * Sappi che è una pessima idea. Gli import sono valutati da webpack in compiletime per generare i chunk,
160
- * mettere la navigazione agli import con la concatenazione viene preso malissimo ed essenzialmente dice a webpack
161
- * di tirare su e bundlare l'intera node_modules. Divertente, no?
162
- *
163
- */
164
- switch (what) {
165
- case 'themes':
166
- switch (item) {
167
- case ChartThemes.spiritedaway:
168
- return import("@amcharts/amcharts4/themes/spiritedaway").then(theme => this.themeCache[item] = theme.default);
169
- case ChartThemes.moonrisekingdom:
170
- return import("@amcharts/amcharts4/themes/moonrisekingdom").then(theme => this.themeCache[item] = theme.default);
171
- case ChartThemes.frozen:
172
- return import("@amcharts/amcharts4/themes/frozen").then(theme => this.themeCache[item] = theme.default);
173
- case ChartThemes.dark:
174
- return import("@amcharts/amcharts4/themes/dark").then(theme => this.themeCache[item] = theme.default);
175
- case ChartThemes.kelly:
176
- return import("@amcharts/amcharts4/themes/kelly").then(theme => this.themeCache[item] = theme.default);
177
- case ChartThemes.material:
178
- return import("@amcharts/amcharts4/themes/material").then(theme => this.themeCache[item] = theme.default);
179
- case ChartThemes.dataviz:
180
- return import("@amcharts/amcharts4/themes/dataviz").then(theme => this.themeCache[item] = theme.default);
181
- case ChartThemes.animated:
182
- return import("@amcharts/amcharts4/themes/animated").then(theme => this.themeCache[item] = theme.default);
183
- }
184
- break;
185
- case 'lang':
186
- switch (item) {
187
- case 'it-IT':
188
- return import("@amcharts/amcharts4/lang/it_IT").then(lang => this.localizationCache[item] = lang.default);
189
- case 'en-US':
190
- return import("@amcharts/amcharts4/lang/en_US").then(lang => this.localizationCache[item] = lang.default);
191
- }
192
- }
193
- this.log("CORE: Loading Failed. " + (what == 'lang' ? "Language " : "Theme") + " not recognized: " + item);
194
- return new Promise((resolve) => { resolve(true); });
195
- }
196
- /**
197
- * @ignore
198
- */
199
- log(text) {
200
- if (this.logs)
201
- console.log("@esfaenza/es-charts: " + text);
202
- }
203
- }
204
- ChartLoader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ChartLoader, deps: [{ token: ESC_DEBUG_MODE }], target: i0.ɵɵFactoryTarget.Injectable });
205
- ChartLoader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ChartLoader });
206
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ChartLoader, decorators: [{
207
- type: Injectable
208
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
209
- type: Inject,
210
- args: [ESC_DEBUG_MODE]
211
- }] }]; } });
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hhcnRMb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcy1jaGFydHMvc3JjL2xpYi9tb2RlbHMvY29yZS9DaGFydExvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBRzlDOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsTUFBTSxPQUFPLFdBQVc7SUFzQnRCOztPQUVHO0lBQ0gsWUFBNEMsSUFBYTtRQUFiLFNBQUksR0FBSixJQUFJLENBQVM7UUF2QnpEOztXQUVHO1FBQ0ssd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBRTdDOztXQUVHO1FBQ0ssb0JBQWUsR0FBVyxFQUFFLENBQUM7UUFFckM7O1dBRUc7UUFDSyxlQUFVLEdBQU8sRUFBRSxDQUFDO1FBRTVCOztXQUVHO1FBQ0ssc0JBQWlCLEdBQU8sRUFBRSxDQUFDO0lBSzBCLENBQUM7SUFFOUQ7Ozs7O09BS0c7SUFDSSxlQUFlLENBQUMsVUFBZTtRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzdCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ25FLElBQUksQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN6RCxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQzNELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7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QUNILEdBQUcsQ0FBQyxJQUFZO1FBQ2QsSUFBSSxJQUFJLENBQUMsSUFBSTtZQUNYLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDaEQsQ0FBQzs7d0dBdk1VLFdBQVcsa0JBeUJGLGNBQWM7NEdBekJ2QixXQUFXOzJGQUFYLFdBQVc7a0JBRHZCLFVBQVU7OzBCQTBCSSxNQUFNOzJCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2hhcnRUaGVtZXMgfSBmcm9tICcuL0NoYXJ0VGhlbWVzJ1xyXG5pbXBvcnQgeyBFU0NfREVCVUdfTU9ERSB9IGZyb20gJy4uLy4uL3Rva2Vucyc7XHJcbmltcG9ydCB7IEVzQ2hhcnRzTW9kdWxlIH0gZnJvbSAnLi4vLi4vZXMtY2hhcnRzLm1vZHVsZSc7XHJcblxyXG4vKipcclxuICogQ2xhc3NlIGRpIHN1cHBvcnRvIGFsIGNhcmljYW1lbnRvIGRpbmFtaWNvIGRlaSB2YXJpIHBlenppIGRpIGFtY2hhcnRzIGNoZSBtaSBzZXJ2b25vIHBlciBpbCBncmFmaWNvICh0ZW1pLCBsb2NhbGksIGVjYy4uLilcclxuICogXHJcbiAqIEVzc2VuemlhbG1lbnRlIG9nbmkgdm9sdGEgY2hlIHZpZW5lIGNyZWF0byB1biBncmFmaWNvLCBxdWVzdG8gYWNxdWlzaXNjZSBpbCB0ZW1hIGUgaWwgbG9jYWxlIGFwcGxpY2F0byBJTiBRVUVMIE1PTUVOVE8sXHJcbiAqIHF1ZXN0byBzaWduaWZpY2EgY2hlIHBlciBjcmVhcmUgZHVlIGdyYWZpY2kgY29uIHRlbWkgZGl2ZXJzaSBiaXNvZ25hIGZhcmU6XHJcbiAqIFxyXG4gKiAxKSBDYXJpY2FtZW50byB0ZW1hIDFcclxuICogXHJcbiAqIDIpIENyZWF6aW9uZSBncmFmaWNvIDFcclxuICogXHJcbiAqIDMpIFNjYXJpY2FtZW50byB0ZW1hIDFcclxuICogXHJcbiAqIDMpIENhcmljYW1lbnRvIHRlbWEgMlxyXG4gKiBcclxuICogNCkgQ3JlYXppb25lIGdyYWZpY28gMlxyXG4gKiBcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIENoYXJ0TG9hZGVyIHtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIHNlIGF0dHVhbG1lbnRlIGhvIGxlIGFuaW1hemlvbmkgY2FyaWNhdGUgaW4gbW9kbyBkYSBub24gcmljYXJpY2FybGUgaW51dGlsbWVudGVcclxuICAgKi9cclxuICBwcml2YXRlIEFuaW1hdGlvbnNBcmVMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIGwndWx0aW1vIHRlbWEgY2FyaWNhdG8gaW4gbW9kbyBkYSBub24gcmljYXJpY2FybG8gaW51dGlsbWVudGUgcXVhbG9yYSBpbCBwcm9zc2ltbyBncmFmaWNvIGRhIGNyZWFyZSByaWNoaWVkYSBsbyBzdGVzc28gdGVtYVxyXG4gICAqL1xyXG4gIHByaXZhdGUgTGFzdExvYWRlZFRoZW1lOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAvKipcclxuICAgKiBDYWNoZSBkZWkgdGVtaSAobW9kdWxpIGNhcmljYXRpIGRpbmFtaWNhbWVudGUpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB0aGVtZUNhY2hlOiB7fSA9IHt9O1xyXG5cclxuICAvKipcclxuICAgKiBDYWNoZSBkZWxsZSBsb2NhbGl6emF6aW9uaSAobW9kdWxpIGNhcmljYXRpIGRpbmFtaWNhbWVudGUpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBsb2NhbGl6YXRpb25DYWNoZToge30gPSB7fTtcclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoRVNDX0RFQlVHX01PREUpIHByaXZhdGUgbG9nczogYm9vbGVhbikgeyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGxpY2EgaWwgdGVtYSBjb24gbGUgYW5pbWF6aW9uaSBhbGwnaXN0YW56YSBnbG9iYWxlIGRpIGFtQ2hhcnRzXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGNoYXJ0c0NvcmUgSXN0YW56YSBnbG9iYWxlIGRpIGFtQ2hhcnRzXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2UgY2hlIGlkZW50aWZpY2EgbGEgZmluZSBkZWwgY2FyaWNhbWVudG9cclxuICAgKi9cclxuICBwdWJsaWMgYXBwbHlBbmltYXRpb25zKGNoYXJ0c0NvcmU6IGFueSk6IFByb21pc2U8YW55PiB7XHJcbiAgICBpZiAoIXRoaXMuQW5pbWF0aW9uc0FyZUxvYWRlZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5pbXBvcnRJZk5lZWRlZCgndGhlbWVzJywgQ2hhcnRUaGVtZXMuYW5pbWF0ZWQpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9nKFwiQ09SRTogQXBwbHlpbmcgdGhlbWUgXCIgKyBDaGFydFRoZW1lcy5hbmltYXRlZCk7XHJcbiAgICAgICAgY2hhcnRzQ29yZS51c2VUaGVtZSh0aGlzLnRoZW1lQ2FjaGVbQ2hhcnRUaGVtZXMuYW5pbWF0ZWRdKTtcclxuICAgICAgICB0aGlzLkFuaW1hdGlvbnNBcmVMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmxvZyhcIkNPUkU6IHRoZW1lIGFscmVhZHkgYXBwbHllZCBcIiArIENoYXJ0VGhlbWVzLmFuaW1hdGVkKTtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7IHJlc29sdmUodHJ1ZSkgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZS1hcHBsaWNhIGlsIHRlbWEgY29uIGxlIGFuaW1hemlvbmkgZGFsbCdpc3RhbnphIGdsb2JhbGUgZGkgYW1DaGFydHNcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge09iamVjdH0gY2hhcnRzQ29yZSBJc3RhbnphIGdsb2JhbGUgZGkgYW1DaGFydHNcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSBjaGUgaWRlbnRpZmljYSBsYSBmaW5lIGRlbGxvIHNjYXJpY29cclxuICAgKi9cclxuICB1bmFwcGx5QW5pbWF0aW9ucyhjaGFydHNDb3JlOiBhbnkpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgaWYgKHRoaXMuQW5pbWF0aW9uc0FyZUxvYWRlZCkge1xyXG4gICAgICB0aGlzLmxvZyhcIkNPUkU6IEFuaW1hdGlvbnMgaW4gdXNlLCB1bmFwcGx5aW5nIHRoZW1lIFwiICsgQ2hhcnRUaGVtZXMuYW5pbWF0ZWQpO1xyXG4gICAgICBjaGFydHNDb3JlLnVudXNlVGhlbWUodGhpcy50aGVtZUNhY2hlW0NoYXJ0VGhlbWVzLmFuaW1hdGVkXSk7XHJcbiAgICAgIHRoaXMuQW5pbWF0aW9uc0FyZUxvYWRlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmxvZyhcIkNPUkU6IEFuaW1hdGlvbnMgYWxyZWFkeSB1bnVzZWQsIG5vIG5lZWQgdG8gdW5hcHBseSB0aGVtXCIpO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7IHJlc29sdmUodHJ1ZSkgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBcHBsaWNhIGlsIHRlbWEgc3BlY2lmaWNhdG8gYWxsJ2lzdGFuemEgZ2xvYmFsZSBkaSBhbUNoYXJ0c1xyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjaGFydHNDb3JlIElzdGFuemEgZ2xvYmFsZSBkaSBhbUNoYXJ0c1xyXG4gICAqIEBwYXJhbSB7J3NwaXJpdGVkYXdheScgfCAnbW9vbnJpc2VraW5nZG9tJyB8ICdmcm96ZW4nIHwgJ2RhcmsnIHwgJ2tlbGx5JyB8ICdtYXRlcmlhbCcgfCAnZGF0YXZpeicgfCAnbm9uZSd9IHRoZW1lIFRlbWEgZGEgYXBwbGljYXJlXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2UgY2hlIGlkZW50aWZpY2EgbGEgZmluZSBkZWwgY2FyaWNhbWVudG9cclxuICAgKi9cclxuICBhcHBseVRoZW1lKGNoYXJ0c0NvcmU6IGFueSwgdGhlbWU6ICdzcGlyaXRlZGF3YXknIHwgJ21vb25yaXNla2luZ2RvbScgfCAnZnJvemVuJyB8ICdkYXJrJyB8ICdrZWxseScgfCAnbWF0ZXJpYWwnIHwgJ2RhdGF2aXonIHwgJ25vbmUnKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIC8vIFVsdGltbyB0ZW1hIGFwcGxpY2F0byDDqCBsbyBzdGVzc28gY2hlIG1pIMOoIHN0YXRvIHJpY2hpZXN0byBkaSBhcHBsaWNhcmUgLS0+IE5PLU9QXHJcbiAgICBpZiAodGhpcy5MYXN0TG9hZGVkVGhlbWUgPT0gdGhlbWUpIHtcclxuICAgICAgdGhpcy5sb2coXCJDT1JFOiB0aGVtZSBhbHJlYWR5IGFwcGxpZWQgXCIgKyB0aGVtZSk7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4geyByZXNvbHZlKHRydWUpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNjYXJpY28gaWwgdGVtYSBwcmVjZWRlbnRlIGEgcHJlc2NpbmRlcmUsIG9ybWFpIG5vbiBtaSBzZXJ2ZSBwacO5XHJcbiAgICB0aGlzLnVuYXBwbHlQcmV2aW91c1RoZW1lKGNoYXJ0c0NvcmUpXHJcblxyXG4gICAgLy8gSWwgdGVtYSDDqCBpbCBub25lIC0tPiByZWdpc3RybyBsYSBjb3NhIGUgYmFzdGEsIGlsIHRlbWEgcHJlY2VkZW50ZSDDqCBzdGF0byByaW1vc3NvIHN1Yml0byBxdWkgc29wcmEgXlxyXG4gICAgaWYgKHRoZW1lID09IENoYXJ0VGhlbWVzLm5vbmUpIHtcclxuICAgICAgdGhpcy5MYXN0TG9hZGVkVGhlbWUgPSBDaGFydFRoZW1lcy5ub25lO1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsgcmVzb2x2ZSh0cnVlKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJbCB0ZW1hIMOoIGRpdmVyc28gZGFsIHByZWNlZGVudGUgZSBub24gw6ggaWwgdGVtYSB2dW90byAtLT4gSW1wb3J0byBpbCB0ZW1hIHNwZWNpZmljYXRvIHNlIG5vbiBwcmVzZW50ZSBpbiBtZW1vcmlhIGUgbG8gYXBwbGljbyBhbCBncmFmaWNvIGF0dHVhbGVcclxuICAgIHJldHVybiB0aGlzLmltcG9ydElmTmVlZGVkKCd0aGVtZXMnLCB0aGVtZSkudGhlbigoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9nKFwiQ09SRTogQXBwbHlpbmcgdGhlbWUgXCIgKyB0aGVtZSk7XHJcbiAgICAgIGNoYXJ0c0NvcmUudXNlVGhlbWUodGhpcy50aGVtZUNhY2hlW3RoZW1lXSk7XHJcbiAgICAgIHRoaXMuTGFzdExvYWRlZFRoZW1lID0gdGhlbWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlLWFwcGxpY2EgaWwgdGVtYSBwcmVjZWRlbnRlIGRhbGwnaXN0YW56YSBnbG9iYWxlIGRpIGFtQ2hhcnRzXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGNoYXJ0c0NvcmUgSXN0YW56YSBnbG9iYWxlIGRpIGFtQ2hhcnRzXHJcbiAgICovXHJcbiAgdW5hcHBseVByZXZpb3VzVGhlbWUoY2hhcnRzQ29yZTogYW55KSB7XHJcbiAgICBpZiAoIXRoaXMuTGFzdExvYWRlZFRoZW1lIHx8IHRoaXMuTGFzdExvYWRlZFRoZW1lID09IENoYXJ0VGhlbWVzLm5vbmUpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmxvZyhcIkNPUkU6IFVuYXBwbHlpbmcgcHJldmlvdXNseSB1c2VkIHRoZW1lIFwiICsgdGhpcy5MYXN0TG9hZGVkVGhlbWUpO1xyXG4gICAgY2hhcnRzQ29yZS51bnVzZVRoZW1lKHRoaXMudGhlbWVDYWNoZVt0aGlzLkxhc3RMb2FkZWRUaGVtZV0pXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBcHBsaWNhIGlsIGxvY2FsZSBzcGVjaWZpY2F0byBhbGwnaXN0YW56YSBzcGVjaWZpY2EgZGVsIGdyYWZpY29cclxuICAgKiBcclxuICAgKiBAcGFyYW0ge2FtQ2hhcnRzLkNoYXJ0fSBjaGFydCBJc3RhbnphIHNwZWNpZmljYSBkZWwgZ3JhZmljbyBhIGN1aSBhcHBsaWNhcmUgaWwgbG9jYWxlXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvY2FsZSBMb2NhbGUgZGEgYXBwbGljYXJlXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2UgY2hlIGlkZW50aWZpY2EgbGEgZmluZSBkZWwgY2FyaWNhbWVudG9cclxuICAgKi9cclxuICBhcHBseUxvY2FsZShjaGFydDogYW55LCBsb2NhbGU6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5pbXBvcnRJZk5lZWRlZCgnbGFuZycsIGxvY2FsZSkudGhlbigoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9nKFwiQ2hhcnQgXCIgKyBjaGFydC5odG1sQ29udGFpbmVyLmlkICsgXCI6IGFwcGx5aW5nIGxvY2FsZSBcIiArIGxvY2FsZSk7XHJcbiAgICAgIGNoYXJ0Lmxhbmd1YWdlLmxvY2FsZSA9IHRoaXMubG9jYWxpemF0aW9uQ2FjaGVbbG9jYWxlXTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGVybWV0dGUgZGkgaW1wb3J0YXJlLCBzZSBzZXJ2ZSB1biBkYXRvIHRlbWEgbyBsb2NhbGl6emF6aW9uZVxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7J2xhbmcnIHwgJ3RoZW1lcyd9IHdoYXQgT2dnZXR0byBkYSBpbXBvcnRhcmUsIHNlIGxvY2FsaXp6YXppb25lIG8gdGVtYVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpdGVtIENoaWF2ZSBkZWxsJ29nZ2V0dG8gZGEgaW1wb3J0YXJlXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2UgY2hlIGlkZW50aWZpY2EgbGEgZmluZSBkZWwgY2FyaWNhbWVudG9cclxuICAgKi9cclxuICBpbXBvcnRJZk5lZWRlZCh3aGF0OiAnbGFuZycgfCAndGhlbWVzJywgaXRlbTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuXHJcbiAgICAvLyBTZSBzdG8gY2VyY2FuZG8gZGkgY2FyaWNhcmUgcXVhbGNvc2EgZGkgZ2nDoCBjYXJpY2F0byBub24gZmFjY2lvIG51bGxhXHJcbiAgICBpZiAoISh3aGF0ID09ICd0aGVtZXMnICYmICF0aGlzLnRoZW1lQ2FjaGVbaXRlbV0pICYmICEod2hhdCA9PSAnbGFuZycgJiYgIXRoaXMubG9jYWxpemF0aW9uQ2FjaGVbaXRlbV0pKSB7XHJcbiAgICAgIHRoaXMubG9nKFwiQ09SRTogXCIgKyAod2hhdCA9PSAnbGFuZycgPyBcIkxhbmd1YWdlIFwiIDogXCJUaGVtZSBcIikgKyBpdGVtICsgXCIgYWxyZWFkeSBsb2FkZWRcIik7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4geyByZXNvbHZlKHRydWUpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubG9nKFwiQ09SRTogTG9hZGluZyBcIiArICh3aGF0ID09ICdsYW5nJyA/IFwibGFuZ3VhZ2UgXCIgOiBcInRoZW1lIFwiKSArIGl0ZW0pO1xyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKiBBVFRFTlpJT05FICoqKioqKioqXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICAgKiBcclxuICAgICAqICBTZSBzdGFpIHZlZGVuZG8gcXVlc3RvIGNvZGljZSBkaSBpbXBvcnQgZSBzdGFpIHZhbHV0YW5kbyBkaSByaXNjcml2ZXJsbyBjb21lOlxyXG4gICAgICogXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWICAgICAgIFYgICBcclxuICAgICAqICAgICAgaW1wb3J0KGBAYW1jaGFydHMvYW1jaGFydHM0LyR7d2hhdH0vJHtpdGVtfWApLnRoZW4obW9kdWxlID0+IHtcclxuICAgICAqICAgICAgICBpZiAod2hhdCA9PSAndGhlbWVzJykgdGhpcy50aGVtZUNhY2hlW2l0ZW1dID0gbW9kdWxlLmRlZmF1bHQ7XHJcbiAgICAgKiAgICAgICAgZWxzZSBpZiAod2hhdCA9PSAnbGFuZycpIHRoaXMubG9jYWxpemF0aW9uQ2FjaGVbaXRlbV0gPSBtb2R1bGUuZGVmYXVsdDtcclxuICAgICAqICAgICAgfSk7XHJcbiAgICAgKiBcclxuICAgICAqICBTYXBwaSBjaGUgw6ggdW5hIHBlc3NpbWEgaWRlYS4gR2xpIGltcG9ydCBzb25vIHZhbHV0YXRpIGRhIHdlYnBhY2sgaW4gY29tcGlsZXRpbWUgcGVyIGdlbmVyYXJlIGkgY2h1bmssXHJcbiAgICAgKiAgbWV0dGVyZSBsYSBuYXZpZ2F6aW9uZSBhZ2xpIGltcG9ydCBjb24gbGEgY29uY2F0ZW5hemlvbmUgdmllbmUgcHJlc28gbWFsaXNzaW1vIGVkIGVzc2VuemlhbG1lbnRlIGRpY2UgYSB3ZWJwYWNrXHJcbiAgICAgKiAgZGkgdGlyYXJlIHN1IGUgYnVuZGxhcmUgbCdpbnRlcmEgbm9kZV9tb2R1bGVzLiBEaXZlcnRlbnRlLCBubz9cclxuICAgICAqXHJcbiAgICAgKi9cclxuXHJcbiAgICBzd2l0Y2ggKHdoYXQpIHtcclxuICAgICAgY2FzZSAndGhlbWVzJzpcclxuICAgICAgICBzd2l0Y2ggKGl0ZW0pIHtcclxuICAgICAgICAgIGNhc2UgQ2hhcnRUaGVtZXMuc3Bpcml0ZWRhd2F5OlxyXG4gICAgICAgICAgICByZXR1cm4gaW1wb3J0KFwiQGFtY2hhcnRzL2FtY2hhcnRzNC90aGVtZXMvc3Bpcml0ZWRhd2F5XCIpLnRoZW4odGhlbWUgPT4gdGhpcy50aGVtZUNhY2hlW2l0ZW1dID0gdGhlbWUuZGVmYXVsdCk7XHJcbiAgICAgICAgICBjYXNlIENoYXJ0VGhlbWVzLm1vb25yaXNla2luZ2RvbTpcclxuICAgICAgICAgICAgcmV0dXJuIGltcG9ydChcIkBhbWNoYXJ0cy9hbWNoYXJ0czQvdGhlbWVzL21vb25yaXNla2luZ2RvbVwiKS50aGVuKHRoZW1lID0+IHRoaXMudGhlbWVDYWNoZVtpdGVtXSA9IHRoZW1lLmRlZmF1bHQpO1xyXG4gICAgICAgICAgY2FzZSBDaGFydFRoZW1lcy5mcm96ZW46XHJcbiAgICAgICAgICAgIHJldHVybiBpbXBvcnQoXCJAYW1jaGFydHMvYW1jaGFydHM0L3RoZW1lcy9mcm96ZW5cIikudGhlbih0aGVtZSA9PiB0aGlzLnRoZW1lQ2FjaGVbaXRlbV0gPSB0aGVtZS5kZWZhdWx0KTtcclxuICAgICAgICAgIGNhc2UgQ2hhcnRUaGVtZXMuZGFyazpcclxuICAgICAgICAgICAgcmV0dXJuIGltcG9ydChcIkBhbWNoYXJ0cy9hbWNoYXJ0czQvdGhlbWVzL2RhcmtcIikudGhlbih0aGVtZSA9PiB0aGlzLnRoZW1lQ2FjaGVbaXRlbV0gPSB0aGVtZS5kZWZhdWx0KTtcclxuICAgICAgICAgIGNhc2UgQ2hhcnRUaGVtZXMua2VsbHk6XHJcbiAgICAgICAgICAgIHJldHVybiBpbXBvcnQoXCJAYW1jaGFydHMvYW1jaGFydHM0L3RoZW1lcy9rZWxseVwiKS50aGVuKHRoZW1lID0+IHRoaXMudGhlbWVDYWNoZVtpdGVtXSA9IHRoZW1lLmRlZmF1bHQpO1xyXG4gICAgICAgICAgY2FzZSBDaGFydFRoZW1lcy5tYXRlcmlhbDpcclxuICAgICAgICAgICAgcmV0dXJuIGltcG9ydChcIkBhbWNoYXJ0cy9hbWNoYXJ0czQvdGhlbWVzL21hdGVyaWFsXCIpLnRoZW4odGhlbWUgPT4gdGhpcy50aGVtZUNhY2hlW2l0ZW1dID0gdGhlbWUuZGVmYXVsdCk7XHJcbiAgICAgICAgICBjYXNlIENoYXJ0VGhlbWVzLmRhdGF2aXo6XHJcbiAgICAgICAgICAgIHJldHVybiBpbXBvcnQoXCJAYW1jaGFydHMvYW1jaGFydHM0L3RoZW1lcy9kYXRhdml6XCIpLnRoZW4odGhlbWUgPT4gdGhpcy50aGVtZUNhY2hlW2l0ZW1dID0gdGhlbWUuZGVmYXVsdCk7XHJcbiAgICAgICAgICBjYXNlIENoYXJ0VGhlbWVzLmFuaW1hdGVkOlxyXG4gICAgICAgICAgICByZXR1cm4gaW1wb3J0KFwiQGFtY2hhcnRzL2FtY2hhcnRzNC90aGVtZXMvYW5pbWF0ZWRcIikudGhlbih0aGVtZSA9PiB0aGlzLnRoZW1lQ2FjaGVbaXRlbV0gPSB0aGVtZS5kZWZhdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2xhbmcnOlxyXG4gICAgICAgIHN3aXRjaCAoaXRlbSkge1xyXG4gICAgICAgICAgY2FzZSAnaXQtSVQnOlxyXG4gICAgICAgICAgICByZXR1cm4gaW1wb3J0KFwiQGFtY2hhcnRzL2FtY2hhcnRzNC9sYW5nL2l0X0lUXCIpLnRoZW4obGFuZyA9PiB0aGlzLmxvY2FsaXphdGlvbkNhY2hlW2l0ZW1dID0gbGFuZy5kZWZhdWx0KTtcclxuICAgICAgICAgIGNhc2UgJ2VuLVVTJzpcclxuICAgICAgICAgICAgcmV0dXJuIGltcG9ydChcIkBhbWNoYXJ0cy9hbWNoYXJ0czQvbGFuZy9lbl9VU1wiKS50aGVuKGxhbmcgPT4gdGhpcy5sb2NhbGl6YXRpb25DYWNoZVtpdGVtXSA9IGxhbmcuZGVmYXVsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubG9nKFwiQ09SRTogTG9hZGluZyBGYWlsZWQuIFwiICsgKHdoYXQgPT0gJ2xhbmcnID8gXCJMYW5ndWFnZSBcIiA6IFwiVGhlbWVcIikgKyBcIiBub3QgcmVjb2duaXplZDogXCIgKyBpdGVtKTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4geyByZXNvbHZlKHRydWUpIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGxvZyh0ZXh0OiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLmxvZ3MpXHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQGVzZmFlbnphL2VzLWNoYXJ0czogXCIgKyB0ZXh0KTtcclxuICB9XHJcbn0iXX0=
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { ChartThemes } from './ChartThemes';
3
+ import { ESC_DEBUG_MODE } from '../../tokens';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Classe di supporto al caricamento dinamico dei vari pezzi di amcharts che mi servono per il grafico (temi, locali, ecc...)
7
+ *
8
+ * Essenzialmente ogni volta che viene creato un grafico, questo acquisisce il tema e il locale applicato IN QUEL MOMENTO,
9
+ * questo significa che per creare due grafici con temi diversi bisogna fare:
10
+ *
11
+ * 1) Caricamento tema 1
12
+ *
13
+ * 2) Creazione grafico 1
14
+ *
15
+ * 3) Scaricamento tema 1
16
+ *
17
+ * 3) Caricamento tema 2
18
+ *
19
+ * 4) Creazione grafico 2
20
+ *
21
+ */
22
+ export class ChartLoader {
23
+ /**
24
+ * @ignore
25
+ */
26
+ constructor(logs) {
27
+ this.logs = logs;
28
+ /**
29
+ * Indica se attualmente ho le animazioni caricate in modo da non ricaricarle inutilmente
30
+ */
31
+ this.AnimationsAreLoaded = false;
32
+ /**
33
+ * Indica l'ultimo tema caricato in modo da non ricaricarlo inutilmente qualora il prossimo grafico da creare richieda lo stesso tema
34
+ */
35
+ this.LastLoadedTheme = "";
36
+ /**
37
+ * Cache dei temi (moduli caricati dinamicamente)
38
+ */
39
+ this.themeCache = {};
40
+ /**
41
+ * Cache delle localizzazioni (moduli caricati dinamicamente)
42
+ */
43
+ this.localizationCache = {};
44
+ }
45
+ /**
46
+ * Applica il tema con le animazioni all'istanza globale di amCharts
47
+ *
48
+ * @param {Object} chartsCore Istanza globale di amCharts
49
+ * @returns {Promise} Promise che identifica la fine del caricamento
50
+ */
51
+ applyAnimations(chartsCore) {
52
+ if (!this.AnimationsAreLoaded) {
53
+ return this.importIfNeeded('themes', ChartThemes.animated).then(() => {
54
+ this.log("CORE: Applying theme " + ChartThemes.animated);
55
+ chartsCore.useTheme(this.themeCache[ChartThemes.animated]);
56
+ this.AnimationsAreLoaded = true;
57
+ });
58
+ }
59
+ else {
60
+ this.log("CORE: theme already applyed " + ChartThemes.animated);
61
+ return new Promise((resolve) => { resolve(true); });
62
+ }
63
+ }
64
+ /**
65
+ * De-applica il tema con le animazioni dall'istanza globale di amCharts
66
+ *
67
+ * @param {Object} chartsCore Istanza globale di amCharts
68
+ * @returns {Promise} Promise che identifica la fine dello scarico
69
+ */
70
+ unapplyAnimations(chartsCore) {
71
+ if (this.AnimationsAreLoaded) {
72
+ this.log("CORE: Animations in use, unapplying theme " + ChartThemes.animated);
73
+ chartsCore.unuseTheme(this.themeCache[ChartThemes.animated]);
74
+ this.AnimationsAreLoaded = false;
75
+ }
76
+ else
77
+ this.log("CORE: Animations already unused, no need to unapply them");
78
+ return new Promise((resolve) => { resolve(true); });
79
+ }
80
+ /**
81
+ * Applica il tema specificato all'istanza globale di amCharts
82
+ *
83
+ * @param {Object} chartsCore Istanza globale di amCharts
84
+ * @param {'spiritedaway' | 'moonrisekingdom' | 'frozen' | 'dark' | 'kelly' | 'material' | 'dataviz' | 'none'} theme Tema da applicare
85
+ * @returns {Promise} Promise che identifica la fine del caricamento
86
+ */
87
+ applyTheme(chartsCore, theme) {
88
+ // Ultimo tema applicato è lo stesso che mi è stato richiesto di applicare --> NO-OP
89
+ if (this.LastLoadedTheme == theme) {
90
+ this.log("CORE: theme already applied " + theme);
91
+ return new Promise((resolve) => { resolve(true); });
92
+ }
93
+ // Scarico il tema precedente a prescindere, ormai non mi serve più
94
+ this.unapplyPreviousTheme(chartsCore);
95
+ // Il tema è il none --> registro la cosa e basta, il tema precedente è stato rimosso subito qui sopra ^
96
+ if (theme == ChartThemes.none) {
97
+ this.LastLoadedTheme = ChartThemes.none;
98
+ return new Promise((resolve) => { resolve(true); });
99
+ }
100
+ // Il tema è diverso dal precedente e non è il tema vuoto --> Importo il tema specificato se non presente in memoria e lo applico al grafico attuale
101
+ return this.importIfNeeded('themes', theme).then(() => {
102
+ this.log("CORE: Applying theme " + theme);
103
+ chartsCore.useTheme(this.themeCache[theme]);
104
+ this.LastLoadedTheme = theme;
105
+ });
106
+ }
107
+ /**
108
+ * De-applica il tema precedente dall'istanza globale di amCharts
109
+ *
110
+ * @param {Object} chartsCore Istanza globale di amCharts
111
+ */
112
+ unapplyPreviousTheme(chartsCore) {
113
+ if (!this.LastLoadedTheme || this.LastLoadedTheme == ChartThemes.none)
114
+ return;
115
+ this.log("CORE: Unapplying previously used theme " + this.LastLoadedTheme);
116
+ chartsCore.unuseTheme(this.themeCache[this.LastLoadedTheme]);
117
+ }
118
+ /**
119
+ * Applica il locale specificato all'istanza specifica del grafico
120
+ *
121
+ * @param {amCharts.Chart} chart Istanza specifica del grafico a cui applicare il locale
122
+ * @param {string} locale Locale da applicare
123
+ * @returns {Promise} Promise che identifica la fine del caricamento
124
+ */
125
+ applyLocale(chart, locale) {
126
+ return this.importIfNeeded('lang', locale).then(() => {
127
+ this.log("Chart " + chart.htmlContainer.id + ": applying locale " + locale);
128
+ chart.language.locale = this.localizationCache[locale];
129
+ });
130
+ }
131
+ /**
132
+ * Permette di importare, se serve un dato tema o localizzazione
133
+ *
134
+ * @param {'lang' | 'themes'} what Oggetto da importare, se localizzazione o tema
135
+ * @param {string} item Chiave dell'oggetto da importare
136
+ *
137
+ * @returns {Promise} Promise che identifica la fine del caricamento
138
+ */
139
+ importIfNeeded(what, item) {
140
+ // Se sto cercando di caricare qualcosa di già caricato non faccio nulla
141
+ if (!(what == 'themes' && !this.themeCache[item]) && !(what == 'lang' && !this.localizationCache[item])) {
142
+ this.log("CORE: " + (what == 'lang' ? "Language " : "Theme ") + item + " already loaded");
143
+ return new Promise((resolve) => { resolve(true); });
144
+ }
145
+ this.log("CORE: Loading " + (what == 'lang' ? "language " : "theme ") + item);
146
+ /*
147
+ * ****************************
148
+ * ******** ATTENZIONE ********
149
+ * ****************************
150
+ *
151
+ * Se stai vedendo questo codice di import e stai valutando di riscriverlo come:
152
+ *
153
+ * V V
154
+ * import(`@amcharts/amcharts4/${what}/${item}`).then(module => {
155
+ * if (what == 'themes') this.themeCache[item] = module.default;
156
+ * else if (what == 'lang') this.localizationCache[item] = module.default;
157
+ * });
158
+ *
159
+ * Sappi che è una pessima idea. Gli import sono valutati da webpack in compiletime per generare i chunk,
160
+ * mettere la navigazione agli import con la concatenazione viene preso malissimo ed essenzialmente dice a webpack
161
+ * di tirare su e bundlare l'intera node_modules. Divertente, no?
162
+ *
163
+ */
164
+ switch (what) {
165
+ case 'themes':
166
+ switch (item) {
167
+ case ChartThemes.spiritedaway:
168
+ return import("@amcharts/amcharts4/themes/spiritedaway").then(theme => this.themeCache[item] = theme.default);
169
+ case ChartThemes.moonrisekingdom:
170
+ return import("@amcharts/amcharts4/themes/moonrisekingdom").then(theme => this.themeCache[item] = theme.default);
171
+ case ChartThemes.frozen:
172
+ return import("@amcharts/amcharts4/themes/frozen").then(theme => this.themeCache[item] = theme.default);
173
+ case ChartThemes.dark:
174
+ return import("@amcharts/amcharts4/themes/dark").then(theme => this.themeCache[item] = theme.default);
175
+ case ChartThemes.kelly:
176
+ return import("@amcharts/amcharts4/themes/kelly").then(theme => this.themeCache[item] = theme.default);
177
+ case ChartThemes.material:
178
+ return import("@amcharts/amcharts4/themes/material").then(theme => this.themeCache[item] = theme.default);
179
+ case ChartThemes.dataviz:
180
+ return import("@amcharts/amcharts4/themes/dataviz").then(theme => this.themeCache[item] = theme.default);
181
+ case ChartThemes.animated:
182
+ return import("@amcharts/amcharts4/themes/animated").then(theme => this.themeCache[item] = theme.default);
183
+ }
184
+ break;
185
+ case 'lang':
186
+ switch (item) {
187
+ case 'it-IT':
188
+ return import("@amcharts/amcharts4/lang/it_IT").then(lang => this.localizationCache[item] = lang.default);
189
+ case 'en-US':
190
+ return import("@amcharts/amcharts4/lang/en_US").then(lang => this.localizationCache[item] = lang.default);
191
+ }
192
+ }
193
+ this.log("CORE: Loading Failed. " + (what == 'lang' ? "Language " : "Theme") + " not recognized: " + item);
194
+ return new Promise((resolve) => { resolve(true); });
195
+ }
196
+ /**
197
+ * @ignore
198
+ */
199
+ log(text) {
200
+ if (this.logs)
201
+ console.log("@esfaenza/es-charts: " + text);
202
+ }
203
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ChartLoader, deps: [{ token: ESC_DEBUG_MODE }], target: i0.ɵɵFactoryTarget.Injectable }); }
204
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ChartLoader }); }
205
+ }
206
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ChartLoader, decorators: [{
207
+ type: Injectable
208
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
209
+ type: Inject,
210
+ args: [ESC_DEBUG_MODE]
211
+ }] }]; } });
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hhcnRMb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcy1jaGFydHMvc3JjL2xpYi9tb2RlbHMvY29yZS9DaGFydExvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBRzlDOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsTUFBTSxPQUFPLFdBQVc7SUFzQnRCOztPQUVHO0lBQ0gsWUFBNEMsSUFBYTtRQUFiLFNBQUksR0FBSixJQUFJLENBQVM7UUF2QnpEOztXQUVHO1FBQ0ssd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBRTdDOztXQUVHO1FBQ0ssb0JBQWUsR0FBVyxFQUFFLENBQUM7UUFFckM7O1dBRUc7UUFDSyxlQUFVLEdBQU8sRUFBRSxDQUFDO1FBRTVCOztXQUVHO1FBQ0ssc0JBQWlCLEdBQU8sRUFBRSxDQUFDO0lBSzBCLENBQUM7SUFFOUQ7Ozs7O09BS0c7SUFDSSxlQUFlLENBQUMsVUFBZTtRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzdCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ25FLElBQUksQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN6RCxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQzNELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7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QUNILEdBQUcsQ0FBQyxJQUFZO1FBQ2QsSUFBSSxJQUFJLENBQUMsSUFBSTtZQUNYLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDaEQsQ0FBQzsrR0F2TVUsV0FBVyxrQkF5QkYsY0FBYzttSEF6QnZCLFdBQVc7OzRGQUFYLFdBQVc7a0JBRHZCLFVBQVU7OzBCQTBCSSxNQUFNOzJCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2hhcnRUaGVtZXMgfSBmcm9tICcuL0NoYXJ0VGhlbWVzJ1xyXG5pbXBvcnQgeyBFU0NfREVCVUdfTU9ERSB9IGZyb20gJy4uLy4uL3Rva2Vucyc7XHJcbmltcG9ydCB7IEVzQ2hhcnRzTW9kdWxlIH0gZnJvbSAnLi4vLi4vZXMtY2hhcnRzLm1vZHVsZSc7XHJcblxyXG4vKipcclxuICogQ2xhc3NlIGRpIHN1cHBvcnRvIGFsIGNhcmljYW1lbnRvIGRpbmFtaWNvIGRlaSB2YXJpIHBlenppIGRpIGFtY2hhcnRzIGNoZSBtaSBzZXJ2b25vIHBlciBpbCBncmFmaWNvICh0ZW1pLCBsb2NhbGksIGVjYy4uLilcclxuICogXHJcbiAqIEVzc2VuemlhbG1lbnRlIG9nbmkgdm9sdGEgY2hlIHZpZW5lIGNyZWF0byB1biBncmFmaWNvLCBxdWVzdG8gYWNxdWlzaXNjZSBpbCB0ZW1hIGUgaWwgbG9jYWxlIGFwcGxpY2F0byBJTiBRVUVMIE1PTUVOVE8sXHJcbiAqIHF1ZXN0byBzaWduaWZpY2EgY2hlIHBlciBjcmVhcmUgZHVlIGdyYWZpY2kgY29uIHRlbWkgZGl2ZXJzaSBiaXNvZ25hIGZhcmU6XHJcbiAqIFxyXG4gKiAxKSBDYXJpY2FtZW50byB0ZW1hIDFcclxuICogXHJcbiAqIDIpIENyZWF6aW9uZSBncmFmaWNvIDFcclxuICogXHJcbiAqIDMpIFNjYXJpY2FtZW50byB0ZW1hIDFcclxuICogXHJcbiAqIDMpIENhcmljYW1lbnRvIHRlbWEgMlxyXG4gKiBcclxuICogNCkgQ3JlYXppb25lIGdyYWZpY28gMlxyXG4gKiBcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIENoYXJ0TG9hZGVyIHtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIHNlIGF0dHVhbG1lbnRlIGhvIGxlIGFuaW1hemlvbmkgY2FyaWNhdGUgaW4gbW9kbyBkYSBub24gcmljYXJpY2FybGUgaW51dGlsbWVudGVcclxuICAgKi9cclxuICBwcml2YXRlIEFuaW1hdGlvbnNBcmVMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIGwndWx0aW1vIHRlbWEgY2FyaWNhdG8gaW4gbW9kbyBkYSBub24gcmljYXJpY2FybG8gaW51dGlsbWVudGUgcXVhbG9yYSBpbCBwcm9zc2ltbyBncmFmaWNvIGRhIGNyZWFyZSByaWNoaWVkYSBsbyBzdGVzc28gdGVtYVxyXG4gICAqL1xyXG4gIHByaXZhdGUgTGFzdExvYWRlZFRoZW1lOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAvKipcclxuICAgKiBDYWNoZSBkZWkgdGVtaSAobW9kdWxpIGNhcmljYXRpIGRpbmFtaWNhbWVudGUpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB0aGVtZUNhY2hlOiB7fSA9IHt9O1xyXG5cclxuICAvKipcclxuICAgKiBDYWNoZSBkZWxsZSBsb2NhbGl6emF6aW9uaSAobW9kdWxpIGNhcmljYXRpIGRpbmFtaWNhbWVudGUpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBsb2NhbGl6YXRpb25DYWNoZToge30gPSB7fTtcclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoRVNDX0RFQlVHX01PREUpIHByaXZhdGUgbG9nczogYm9vbGVhbikgeyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGxpY2EgaWwgdGVtYSBjb24gbGUgYW5pbWF6aW9uaSBhbGwnaXN0YW56YSBnbG9iYWxlIGRpIGFtQ2hhcnRzXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGNoYXJ0c0NvcmUgSXN0YW56YSBnbG9iYWxlIGRpIGFtQ2hhcnRzXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2UgY2hlIGlkZW50aWZpY2EgbGEgZmluZSBkZWwgY2FyaWNhbWVudG9cclxuICAgKi9cclxuICBwdWJsaWMgYXBwbHlBbmltYXRpb25zKGNoYXJ0c0NvcmU6IGFueSk6IFByb21pc2U8YW55PiB7XHJcbiAgICBpZiAoIXRoaXMuQW5pbWF0aW9uc0FyZUxvYWRlZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5pbXBvcnRJZk5lZWRlZCgndGhlbWVzJywgQ2hhcnRUaGVtZXMuYW5pbWF0ZWQpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9nKFwiQ09SRTogQXBwbHlpbmcgdGhlbWUgXCIgKyBDaGFydFRoZW1lcy5hbmltYXRlZCk7XHJcbiAgICAgICAgY2hhcnRzQ29yZS51c2VUaGVtZSh0aGlzLnRoZW1lQ2FjaGVbQ2hhcnRUaGVtZXMuYW5pbWF0ZWRdKTtcclxuICAgICAgICB0aGlzLkFuaW1hdGlvbnNBcmVMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmxvZyhcIkNPUkU6IHRoZW1lIGFscmVhZHkgYXBwbHllZCBcIiArIENoYXJ0VGhlbWVzLmFuaW1hdGVkKTtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7IHJlc29sdmUodHJ1ZSkgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZS1hcHBsaWNhIGlsIHRlbWEgY29uIGxlIGFuaW1hemlvbmkgZGFsbCdpc3RhbnphIGdsb2JhbGUgZGkgYW1DaGFydHNcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge09iamVjdH0gY2hhcnRzQ29yZSBJc3RhbnphIGdsb2JhbGUgZGkgYW1DaGFydHNcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSBjaGUgaWRlbnRpZmljYSBsYSBmaW5lIGRlbGxvIHNjYXJpY29cclxuICAgKi9cclxuICB1bmFwcGx5QW5pbWF0aW9ucyhjaGFydHNDb3JlOiBhbnkpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgaWYgKHRoaXMuQW5pbWF0aW9uc0FyZUxvYWRlZCkge1xyXG4gICAgICB0aGlzLmxvZyhcIkNPUkU6IEFuaW1hdGlvbnMgaW4gdXNlLCB1bmFwcGx5aW5nIHRoZW1lIFwiICsgQ2hhcnRUaGVtZXMuYW5pbWF0ZWQpO1xyXG4gICAgICBjaGFydHNDb3JlLnVudXNlVGhlbWUodGhpcy50aGVtZUNhY2hlW0NoYXJ0VGhlbWVzLmFuaW1hdGVkXSk7XHJcbiAgICAgIHRoaXMuQW5pbWF0aW9uc0FyZUxvYWRlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmxvZyhcIkNPUkU6IEFuaW1hdGlvbnMgYWxyZWFkeSB1bnVzZWQsIG5vIG5lZWQgdG8gdW5hcHBseSB0aGVtXCIpO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7IHJlc29sdmUodHJ1ZSkgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBcHBsaWNhIGlsIHRlbWEgc3BlY2lmaWNhdG8gYWxsJ2lzdGFuemEgZ2xvYmFsZSBkaSBhbUNoYXJ0c1xyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjaGFydHNDb3JlIElzdGFuemEgZ2xvYmFsZSBkaSBhbUNoYXJ0c1xyXG4gICAqIEBwYXJhbSB7J3NwaXJpdGVkYXdheScgfCAnbW9vbnJpc2VraW5nZG9tJyB8ICdmcm96ZW4nIHwgJ2RhcmsnIHwgJ2tlbGx5JyB8ICdtYXRlcmlhbCcgfCAnZGF0YXZpeicgfCAnbm9uZSd9IHRoZW1lIFRlbWEgZGEgYXBwbGljYXJlXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2UgY2hlIGlkZW50aWZpY2EgbGEgZmluZSBkZWwgY2FyaWNhbWVudG9cclxuICAgKi9cclxuICBhcHBseVRoZW1lKGNoYXJ0c0NvcmU6IGFueSwgdGhlbWU6ICdzcGlyaXRlZGF3YXknIHwgJ21vb25yaXNla2luZ2RvbScgfCAnZnJvemVuJyB8ICdkYXJrJyB8ICdrZWxseScgfCAnbWF0ZXJpYWwnIHwgJ2RhdGF2aXonIHwgJ25vbmUnKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIC8vIFVsdGltbyB0ZW1hIGFwcGxpY2F0byDDqCBsbyBzdGVzc28gY2hlIG1pIMOoIHN0YXRvIHJpY2hpZXN0byBkaSBhcHBsaWNhcmUgLS0+IE5PLU9QXHJcbiAgICBpZiAodGhpcy5MYXN0TG9hZGVkVGhlbWUgPT0gdGhlbWUpIHtcclxuICAgICAgdGhpcy5sb2coXCJDT1JFOiB0aGVtZSBhbHJlYWR5IGFwcGxpZWQgXCIgKyB0aGVtZSk7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4geyByZXNvbHZlKHRydWUpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNjYXJpY28gaWwgdGVtYSBwcmVjZWRlbnRlIGEgcHJlc2NpbmRlcmUsIG9ybWFpIG5vbiBtaSBzZXJ2ZSBwacO5XHJcbiAgICB0aGlzLnVuYXBwbHlQcmV2aW91c1RoZW1lKGNoYXJ0c0NvcmUpXHJcblxyXG4gICAgLy8gSWwgdGVtYSDDqCBpbCBub25lIC0tPiByZWdpc3RybyBsYSBjb3NhIGUgYmFzdGEsIGlsIHRlbWEgcHJlY2VkZW50ZSDDqCBzdGF0byByaW1vc3NvIHN1Yml0byBxdWkgc29wcmEgXlxyXG4gICAgaWYgKHRoZW1lID09IENoYXJ0VGhlbWVzLm5vbmUpIHtcclxuICAgICAgdGhpcy5MYXN0TG9hZGVkVGhlbWUgPSBDaGFydFRoZW1lcy5ub25lO1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsgcmVzb2x2ZSh0cnVlKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJbCB0ZW1hIMOoIGRpdmVyc28gZGFsIHByZWNlZGVudGUgZSBub24gw6ggaWwgdGVtYSB2dW90byAtLT4gSW1wb3J0byBpbCB0ZW1hIHNwZWNpZmljYXRvIHNlIG5vbiBwcmVzZW50ZSBpbiBtZW1vcmlhIGUgbG8gYXBwbGljbyBhbCBncmFmaWNvIGF0dHVhbGVcclxuICAgIHJldHVybiB0aGlzLmltcG9ydElmTmVlZGVkKCd0aGVtZXMnLCB0aGVtZSkudGhlbigoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9nKFwiQ09SRTogQXBwbHlpbmcgdGhlbWUgXCIgKyB0aGVtZSk7XHJcbiAgICAgIGNoYXJ0c0NvcmUudXNlVGhlbWUodGhpcy50aGVtZUNhY2hlW3RoZW1lXSk7XHJcbiAgICAgIHRoaXMuTGFzdExvYWRlZFRoZW1lID0gdGhlbWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlLWFwcGxpY2EgaWwgdGVtYSBwcmVjZWRlbnRlIGRhbGwnaXN0YW56YSBnbG9iYWxlIGRpIGFtQ2hhcnRzXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGNoYXJ0c0NvcmUgSXN0YW56YSBnbG9iYWxlIGRpIGFtQ2hhcnRzXHJcbiAgICovXHJcbiAgdW5hcHBseVByZXZpb3VzVGhlbWUoY2hhcnRzQ29yZTogYW55KSB7XHJcbiAgICBpZiAoIXRoaXMuTGFzdExvYWRlZFRoZW1lIHx8IHRoaXMuTGFzdExvYWRlZFRoZW1lID09IENoYXJ0VGhlbWVzLm5vbmUpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmxvZyhcIkNPUkU6IFVuYXBwbHlpbmcgcHJldmlvdXNseSB1c2VkIHRoZW1lIFwiICsgdGhpcy5MYXN0TG9hZGVkVGhlbWUpO1xyXG4gICAgY2hhcnRzQ29yZS51bnVzZVRoZW1lKHRoaXMudGhlbWVDYWNoZVt0aGlzLkxhc3RMb2FkZWRUaGVtZV0pXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBcHBsaWNhIGlsIGxvY2FsZSBzcGVjaWZpY2F0byBhbGwnaXN0YW56YSBzcGVjaWZpY2EgZGVsIGdyYWZpY29cclxuICAgKiBcclxuICAgKiBAcGFyYW0ge2FtQ2hhcnRzLkNoYXJ0fSBjaGFydCBJc3RhbnphIHNwZWNpZmljYSBkZWwgZ3JhZmljbyBhIGN1aSBhcHBsaWNhcmUgaWwgbG9jYWxlXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvY2FsZSBMb2NhbGUgZGEgYXBwbGljYXJlXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2UgY2hlIGlkZW50aWZpY2EgbGEgZmluZSBkZWwgY2FyaWNhbWVudG9cclxuICAgKi9cclxuICBhcHBseUxvY2FsZShjaGFydDogYW55LCBsb2NhbGU6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5pbXBvcnRJZk5lZWRlZCgnbGFuZycsIGxvY2FsZSkudGhlbigoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9nKFwiQ2hhcnQgXCIgKyBjaGFydC5odG1sQ29udGFpbmVyLmlkICsgXCI6IGFwcGx5aW5nIGxvY2FsZSBcIiArIGxvY2FsZSk7XHJcbiAgICAgIGNoYXJ0Lmxhbmd1YWdlLmxvY2FsZSA9IHRoaXMubG9jYWxpemF0aW9uQ2FjaGVbbG9jYWxlXTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGVybWV0dGUgZGkgaW1wb3J0YXJlLCBzZSBzZXJ2ZSB1biBkYXRvIHRlbWEgbyBsb2NhbGl6emF6aW9uZVxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7J2xhbmcnIHwgJ3RoZW1lcyd9IHdoYXQgT2dnZXR0byBkYSBpbXBvcnRhcmUsIHNlIGxvY2FsaXp6YXppb25lIG8gdGVtYVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpdGVtIENoaWF2ZSBkZWxsJ29nZ2V0dG8gZGEgaW1wb3J0YXJlXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2UgY2hlIGlkZW50aWZpY2EgbGEgZmluZSBkZWwgY2FyaWNhbWVudG9cclxuICAgKi9cclxuICBpbXBvcnRJZk5lZWRlZCh3aGF0OiAnbGFuZycgfCAndGhlbWVzJywgaXRlbTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuXHJcbiAgICAvLyBTZSBzdG8gY2VyY2FuZG8gZGkgY2FyaWNhcmUgcXVhbGNvc2EgZGkgZ2nDoCBjYXJpY2F0byBub24gZmFjY2lvIG51bGxhXHJcbiAgICBpZiAoISh3aGF0ID09ICd0aGVtZXMnICYmICF0aGlzLnRoZW1lQ2FjaGVbaXRlbV0pICYmICEod2hhdCA9PSAnbGFuZycgJiYgIXRoaXMubG9jYWxpemF0aW9uQ2FjaGVbaXRlbV0pKSB7XHJcbiAgICAgIHRoaXMubG9nKFwiQ09SRTogXCIgKyAod2hhdCA9PSAnbGFuZycgPyBcIkxhbmd1YWdlIFwiIDogXCJUaGVtZSBcIikgKyBpdGVtICsgXCIgYWxyZWFkeSBsb2FkZWRcIik7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4geyByZXNvbHZlKHRydWUpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubG9nKFwiQ09SRTogTG9hZGluZyBcIiArICh3aGF0ID09ICdsYW5nJyA/IFwibGFuZ3VhZ2UgXCIgOiBcInRoZW1lIFwiKSArIGl0ZW0pO1xyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKiBBVFRFTlpJT05FICoqKioqKioqXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICAgKiBcclxuICAgICAqICBTZSBzdGFpIHZlZGVuZG8gcXVlc3RvIGNvZGljZSBkaSBpbXBvcnQgZSBzdGFpIHZhbHV0YW5kbyBkaSByaXNjcml2ZXJsbyBjb21lOlxyXG4gICAgICogXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWICAgICAgIFYgICBcclxuICAgICAqICAgICAgaW1wb3J0KGBAYW1jaGFydHMvYW1jaGFydHM0LyR7d2hhdH0vJHtpdGVtfWApLnRoZW4obW9kdWxlID0+IHtcclxuICAgICAqICAgICAgICBpZiAod2hhdCA9PSAndGhlbWVzJykgdGhpcy50aGVtZUNhY2hlW2l0ZW1dID0gbW9kdWxlLmRlZmF1bHQ7XHJcbiAgICAgKiAgICAgICAgZWxzZSBpZiAod2hhdCA9PSAnbGFuZycpIHRoaXMubG9jYWxpemF0aW9uQ2FjaGVbaXRlbV0gPSBtb2R1bGUuZGVmYXVsdDtcclxuICAgICAqICAgICAgfSk7XHJcbiAgICAgKiBcclxuICAgICAqICBTYXBwaSBjaGUgw6ggdW5hIHBlc3NpbWEgaWRlYS4gR2xpIGltcG9ydCBzb25vIHZhbHV0YXRpIGRhIHdlYnBhY2sgaW4gY29tcGlsZXRpbWUgcGVyIGdlbmVyYXJlIGkgY2h1bmssXHJcbiAgICAgKiAgbWV0dGVyZSBsYSBuYXZpZ2F6aW9uZSBhZ2xpIGltcG9ydCBjb24gbGEgY29uY2F0ZW5hemlvbmUgdmllbmUgcHJlc28gbWFsaXNzaW1vIGVkIGVzc2VuemlhbG1lbnRlIGRpY2UgYSB3ZWJwYWNrXHJcbiAgICAgKiAgZGkgdGlyYXJlIHN1IGUgYnVuZGxhcmUgbCdpbnRlcmEgbm9kZV9tb2R1bGVzLiBEaXZlcnRlbnRlLCBubz9cclxuICAgICAqXHJcbiAgICAgKi9cclxuXHJcbiAgICBzd2l0Y2ggKHdoYXQpIHtcclxuICAgICAgY2FzZSAndGhlbWVzJzpcclxuICAgICAgICBzd2l0Y2ggKGl0ZW0pIHtcclxuICAgICAgICAgIGNhc2UgQ2hhcnRUaGVtZXMuc3Bpcml0ZWRhd2F5OlxyXG4gICAgICAgICAgICByZXR1cm4gaW1wb3J0KFwiQGFtY2hhcnRzL2FtY2hhcnRzNC90aGVtZXMvc3Bpcml0ZWRhd2F5XCIpLnRoZW4odGhlbWUgPT4gdGhpcy50aGVtZUNhY2hlW2l0ZW1dID0gdGhlbWUuZGVmYXVsdCk7XHJcbiAgICAgICAgICBjYXNlIENoYXJ0VGhlbWVzLm1vb25yaXNla2luZ2RvbTpcclxuICAgICAgICAgICAgcmV0dXJuIGltcG9ydChcIkBhbWNoYXJ0cy9hbWNoYXJ0czQvdGhlbWVzL21vb25yaXNla2luZ2RvbVwiKS50aGVuKHRoZW1lID0+IHRoaXMudGhlbWVDYWNoZVtpdGVtXSA9IHRoZW1lLmRlZmF1bHQpO1xyXG4gICAgICAgICAgY2FzZSBDaGFydFRoZW1lcy5mcm96ZW46XHJcbiAgICAgICAgICAgIHJldHVybiBpbXBvcnQoXCJAYW1jaGFydHMvYW1jaGFydHM0L3RoZW1lcy9mcm96ZW5cIikudGhlbih0aGVtZSA9PiB0aGlzLnRoZW1lQ2FjaGVbaXRlbV0gPSB0aGVtZS5kZWZhdWx0KTtcclxuICAgICAgICAgIGNhc2UgQ2hhcnRUaGVtZXMuZGFyazpcclxuICAgICAgICAgICAgcmV0dXJuIGltcG9ydChcIkBhbWNoYXJ0cy9hbWNoYXJ0czQvdGhlbWVzL2RhcmtcIikudGhlbih0aGVtZSA9PiB0aGlzLnRoZW1lQ2FjaGVbaXRlbV0gPSB0aGVtZS5kZWZhdWx0KTtcclxuICAgICAgICAgIGNhc2UgQ2hhcnRUaGVtZXMua2VsbHk6XHJcbiAgICAgICAgICAgIHJldHVybiBpbXBvcnQoXCJAYW1jaGFydHMvYW1jaGFydHM0L3RoZW1lcy9rZWxseVwiKS50aGVuKHRoZW1lID0+IHRoaXMudGhlbWVDYWNoZVtpdGVtXSA9IHRoZW1lLmRlZmF1bHQpO1xyXG4gICAgICAgICAgY2FzZSBDaGFydFRoZW1lcy5tYXRlcmlhbDpcclxuICAgICAgICAgICAgcmV0dXJuIGltcG9ydChcIkBhbWNoYXJ0cy9hbWNoYXJ0czQvdGhlbWVzL21hdGVyaWFsXCIpLnRoZW4odGhlbWUgPT4gdGhpcy50aGVtZUNhY2hlW2l0ZW1dID0gdGhlbWUuZGVmYXVsdCk7XHJcbiAgICAgICAgICBjYXNlIENoYXJ0VGhlbWVzLmRhdGF2aXo6XHJcbiAgICAgICAgICAgIHJldHVybiBpbXBvcnQoXCJAYW1jaGFydHMvYW1jaGFydHM0L3RoZW1lcy9kYXRhdml6XCIpLnRoZW4odGhlbWUgPT4gdGhpcy50aGVtZUNhY2hlW2l0ZW1dID0gdGhlbWUuZGVmYXVsdCk7XHJcbiAgICAgICAgICBjYXNlIENoYXJ0VGhlbWVzLmFuaW1hdGVkOlxyXG4gICAgICAgICAgICByZXR1cm4gaW1wb3J0KFwiQGFtY2hhcnRzL2FtY2hhcnRzNC90aGVtZXMvYW5pbWF0ZWRcIikudGhlbih0aGVtZSA9PiB0aGlzLnRoZW1lQ2FjaGVbaXRlbV0gPSB0aGVtZS5kZWZhdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2xhbmcnOlxyXG4gICAgICAgIHN3aXRjaCAoaXRlbSkge1xyXG4gICAgICAgICAgY2FzZSAnaXQtSVQnOlxyXG4gICAgICAgICAgICByZXR1cm4gaW1wb3J0KFwiQGFtY2hhcnRzL2FtY2hhcnRzNC9sYW5nL2l0X0lUXCIpLnRoZW4obGFuZyA9PiB0aGlzLmxvY2FsaXphdGlvbkNhY2hlW2l0ZW1dID0gbGFuZy5kZWZhdWx0KTtcclxuICAgICAgICAgIGNhc2UgJ2VuLVVTJzpcclxuICAgICAgICAgICAgcmV0dXJuIGltcG9ydChcIkBhbWNoYXJ0cy9hbWNoYXJ0czQvbGFuZy9lbl9VU1wiKS50aGVuKGxhbmcgPT4gdGhpcy5sb2NhbGl6YXRpb25DYWNoZVtpdGVtXSA9IGxhbmcuZGVmYXVsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubG9nKFwiQ09SRTogTG9hZGluZyBGYWlsZWQuIFwiICsgKHdoYXQgPT0gJ2xhbmcnID8gXCJMYW5ndWFnZSBcIiA6IFwiVGhlbWVcIikgKyBcIiBub3QgcmVjb2duaXplZDogXCIgKyBpdGVtKTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4geyByZXNvbHZlKHRydWUpIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGxvZyh0ZXh0OiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLmxvZ3MpXHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQGVzZmFlbnphL2VzLWNoYXJ0czogXCIgKyB0ZXh0KTtcclxuICB9XHJcbn0iXX0=