@syncfusion/ej2-angular-charts 34.2.4 → 34.2.5

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.
package/CHANGELOG.md CHANGED
@@ -6,9 +6,23 @@
6
6
 
7
7
  #### Bug Fixes
8
8
 
9
+ - `#I858273` - Data labels are now positioned correctly when `enableRotation` is enabled in inverted charts.
10
+
11
+ - `#FB74509` - Added caching for text measurement results in `measureText`, reducing repeated width and height calculations and improving overall rendering performance.
12
+
13
+ #### New Features
14
+
15
+ - `#I849015` - Introduced the new `Rotate45WithTrim` and `Rotate90WithTrim` `LabelIntersectAction` options, which apply the `Trim` logic to improve label visibility and then rotate the labels by 45° or 90° respectively.
16
+
17
+ ## 34.2.4 (2026-08-18)
18
+
19
+ ### Chart
20
+
21
+ #### Bug Fixes
22
+
9
23
  - Updated component name casing in telemetry to ensure consistent event tracking and reporting.
10
24
 
11
- ## 34.2.3 (2026-08-10)
25
+ ## 34.2.3 (2026-08-11)
12
26
 
13
27
  ### Chart
14
28
 
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Angular Charts Components
2
2
 
3
- The [Angular Charts](https://www.syncfusion.com/angular-components/angular-charts?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm) component is a well-crafted charting component for visualizing data with 50+ charts and graphs, ranging from line to financial types. It can bind data from datasource such as array of JSON objects, `OData web services` or [DataManager](https://ej2.syncfusion.com/angular/documentation/data/data-binding/). All chart elements are rendered using Scalable Vector Graphics (SVG).
3
+ The [Angular Charts](https://www.syncfusion.com/angular-components/angular-charts?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm) component is a well-crafted charting component for visualizing data with 55+ charts and graphs, ranging from line to financial types. It can bind data from datasource such as array of JSON objects, `OData web services` or [DataManager](https://ej2.syncfusion.com/angular/documentation/chart/data-binding/working-with-data?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm). All chart elements are rendered using Scalable Vector Graphics (SVG).
4
4
 
5
5
 
6
6
  ## What's Included in the Angular Charts Package
@@ -9,11 +9,11 @@ The [Angular Charts](https://www.syncfusion.com/angular-components/angular-chart
9
9
 
10
10
  ### Angular Chart
11
11
 
12
- The [Angular Chart Component](https://www.syncfusion.com/angular-components/angular-charts) is a feature-rich chart component with built-in support for over 50 chart types, technical indictors, trendline, zooming, tooltip, selection, crosshair and trackball.
12
+ The [Angular Chart Component](https://www.syncfusion.com/angular-components/angular-charts?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm) is a feature-rich chart component with built-in support for over 50 chart types, technical indictors, trendline, zooming, tooltip, selection, crosshair and trackball.
13
13
 
14
14
  <p align="center">
15
- <a href="https://ej2.syncfusion.com/angular/documentation/chart/getting-started/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm">Getting started</a> .
16
- <a href="https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/bootstrap5/chart/overview-chart">Online demos</a> .
15
+ <a href="https://help.syncfusion.com/chart-sdk/angular/chart/getting-started?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm">Getting started</a> .
16
+ <a href="https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/chart/overview-chart">Online demos</a> .
17
17
  <a href="https://www.syncfusion.com/angular-components/angular-charts?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm">Learn more</a>
18
18
  </p>
19
19
 
@@ -23,42 +23,42 @@ The [Angular Chart Component](https://www.syncfusion.com/angular-components/angu
23
23
 
24
24
  #### Key features
25
25
 
26
- * Chart types: Supports 50+ interactive chart types starting from line to financial chart. Few chart types include:
27
- * [Angular Area Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/area-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-area-charts-npm)
28
- * [Angular Bar Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/bar-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-bar-charts-npm)
29
- * [Angular Line Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/line-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-line-charts-npm)
30
- * [Angular Spline Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/spline-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-spline-charts-npm)
31
- * [Angular Bubble Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/bubble-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-bubble-charts-npm)
32
- * [Angular Scatter Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/scatter-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-scatter-charts-npm)
33
- * [Angular Step Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/stepline-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-step-charts-npm)
34
- * [Angular Polar Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/polar-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-polar-charts-npm)
35
- * [Angular Radar Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/radar-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-radar-charts-npm)
36
- * [Angular Range Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/range-area-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-range-charts-npm)
37
- * [Angular Stacked Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/range-area-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-stacked-charts-npm)
26
+ * Chart types: Supports 55+ interactive chart types starting from line to financial chart. Few chart types include:
27
+ * [Angular Area Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/area-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
28
+ * [Angular Bar Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/bar-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
29
+ * [Angular Line Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/line-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
30
+ * [Angular Spline Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/spline-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
31
+ * [Angular Bubble Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/bubble-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
32
+ * [Angular Scatter Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/scatter-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
33
+ * [Angular Step Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/stepline-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
34
+ * [Angular Polar Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/polar-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
35
+ * [Angular Radar Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/radar-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
36
+ * [Angular Range Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/range-area-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
37
+ * [Angular Stacked Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/range-area-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
38
38
  * [Angular Box Plot Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/box-and-whisker-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
39
39
  * [Angular Histogram Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/histogram-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
40
- * [Angular Financial Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/stock-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-financial-charts-npm)
41
- * [Data binding](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=chart#/material/chart/local-data): Bind the Chart component with an array of JSON objects or DataManager. Other than chart series, data label and tooltip can also bound to your data.
42
- * [Axis types](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=chart#/material/chart/numeric): Supports multiple axes, and able to plot different data such as numbers, datetime, logarithmic and string.
43
- * [Rendering modes](https://ej2.syncfusion.com/angular/documentation/chart/render-methods/): Supports two type of rendering: SVG and Canvas. By default chart rendered in SVG, You can easily switch between the two simple configuration.
44
- * [Data label](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=chart#/material/chart/data-label-template): Supports data label to annotate points with label to improve the readability of data.
45
- * [Annotation](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=chart#/material/chart/pie-annotation): Provides support to mark any specific area of interest by adding custom element.
46
- * [Zooming and panning](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=chart#/material/chart/zooming): Provides options to visualize the data points under any region using rectangular selection, pinch, or mouse wheel zooming.
47
- * [Crosshair & trackball](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=chart#/material/chart/cross-hair): Provides options to track data points closer to the mouse position or touch action.
48
- * [Selection](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=chart#/material/chart/range-selection): Allows you to select any data point or subset of points using selection feature.
49
- * [Export](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=chart#/material/chart/export): Provides the options to Export the chart to PDF, SVG and CSV formats.
50
- * [RTL support](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=chart#/material/chart/rtl): Provides a full-fledged right-to-left mode which aligns axis, tooltip, legend and data in the chart component from right to left.
51
- * [Appearance](https://ej2.syncfusion.com/angular/documentation/chart/chart-appearance/): Colors for the charts are picked by the built-in theme, but each element of the chart can be customized by simple configuration options.
52
- * [Accessibility](https://ej2.syncfusion.com/angular/documentation/chart/accessibility/?utm_source=npm&utm_medium=listing&utm_campaign=angular-chart-npm#wai-aria): Designed to be accessible to users with disabilities, with features such as WAI-ARIA standard compliance and keyboard navigation to ensure that the chart can be effectively used with assistive technologies such as screen readers.
53
- * [Localization](https://ej2.syncfusion.com/angular/documentation/chart/localization/?utm_source=npm&utm_medium=listing&utm_campaign=angular-chart-npm#localization): The Localization library enables you to adapt the default text content of the chart to fit the language and cultural preferences of your target audience.
40
+ * [Angular Financial Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/stock-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
41
+ * [Data binding](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/chart/local-data): Bind the Chart component with an array of JSON objects or DataManager. Other than chart series, data label and tooltip can also bound to your data.
42
+ * [Axis types](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/chart/numeric): Supports multiple axes, and able to plot different data such as numbers, datetime, logarithmic and string.
43
+ * [Rendering modes](https://help.syncfusion.com/chart-sdk/angular/chart/render-methods?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm): Supports two type of rendering: SVG and Canvas. By default chart rendered in SVG, You can easily switch between the two simple configuration.
44
+ * [Data label](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/chart/data-label-template): Supports data label to annotate points with label to improve the readability of data.
45
+ * [Annotation](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/chart/pie-annotation): Provides support to mark any specific area of interest by adding custom element.
46
+ * [Zooming and panning](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/chart/zooming): Provides options to visualize the data points under any region using rectangular selection, pinch, or mouse wheel zooming.
47
+ * [Crosshair & trackball](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)#/material3/chart/cross-hair: Provides options to track data points closer to the mouse position or touch action.
48
+ * [Selection](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/chart/range-selection): Allows you to select any data point or subset of points using selection feature.
49
+ * [Export](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/chart/export): Provides the options to Export the chart to PDF, SVG and CSV formats.
50
+ * [RTL support](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/chart/rtl): Provides a full-fledged right-to-left mode which aligns axis, tooltip, legend and data in the chart component from right to left.
51
+ * [Appearance](https://help.syncfusion.com/chart-sdk/angular/chart/appearance?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm): Colors for the charts are picked by the built-in theme, but each element of the chart can be customized by simple configuration options.
52
+ * [Accessibility](https://help.syncfusion.com/chart-sdk/angular/chart/accessibility?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm): Designed to be accessible to users with disabilities, with features such as WAI-ARIA standard compliance and keyboard navigation to ensure that the chart can be effectively used with assistive technologies such as screen readers.
53
+ * [Localization](https://help.syncfusion.com/chart-sdk/angular/chart/localization?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm): The Localization library enables you to adapt the default text content of the chart to fit the language and cultural preferences of your target audience.
54
54
 
55
55
  ### Angular Accumulation Charts
56
56
 
57
57
  Built-in support for pie, doughnut, pyramid and funnel chart types, to show the proportions and percentages between the categories.
58
58
 
59
59
  <p align="center">
60
- <a href="https://ej2.syncfusion.com/angular/documentation/accumulation-chart/getting-started/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm">Getting started</a> .
61
- <a href="https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/bootstrap5/chart/default-pie">Online demos</a> .
60
+ <a href="https://help.syncfusion.com/chart-sdk/angular/accumulation-chart/getting-started?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm">Getting started</a> .
61
+ <a href="https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/chart/default-pie">Online demos</a> .
62
62
  <a href="https://www.syncfusion.com/angular-components/angular-charts?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm">Learn more</a>
63
63
  </p>
64
64
 
@@ -68,23 +68,23 @@ Built-in support for pie, doughnut, pyramid and funnel chart types, to show the
68
68
  #### Key features
69
69
 
70
70
  * Chart types: Supports Pie, Doughnut, Pyramid and Funnel charts.
71
- * [Angular Pie Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/pie-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-pie-charts-npm)
72
- * [Angular Doughnut Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/donut-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-doughnut-charts-npm)
73
- * [Angular Pyramid Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/pyramid-chart)
74
- * [Angular Funnel Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/funnel-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-funnel-charts-npm)
75
- * [Smart labels](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=chart#/material/chart/smart-labels): Supports arrangement of data labels smartly to avoid overlapping when the data point value falls in close range.
76
- * [Grouping](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=chart#/material/chart/grouping): Supports grouping of data points based on value and point count.
77
- * [Semi-pie](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=chart#/material/chart/semi-pie): Provides options to customize the start and end angle of the pie chart.
78
- * [Legend](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=chart#/material/chart/pie-legend): Provides options to display additional information about the points with the help of legend.
79
- * [Tooltip](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=chart#/material/chart/donut): Provides great user experiance by including a set of interactive features such as tooltip, drill-down, events, and selection.
71
+ * [Angular Pie Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/pie-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
72
+ * [Angular Doughnut Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/donut-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
73
+ * [Angular Pyramid Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/pyramid-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
74
+ * [Angular Funnel Chart](https://www.syncfusion.com/angular-components/angular-charts/chart-types/funnel-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
75
+ * [Smart labels](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/chart/smart-labels): Supports arrangement of data labels smartly to avoid overlapping when the data point value falls in close range.
76
+ * [Grouping](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/chart/grouping): Supports grouping of data points based on value and point count.
77
+ * [Semi-pie](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/chart/semi-pie): Provides options to customize the start and end angle of the pie chart.
78
+ * [Legend](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/chart/pie-legend): Provides options to display additional information about the points with the help of legend.
79
+ * [Tooltip](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/chart/donut): Provides great user experiance by including a set of interactive features such as tooltip, drill-down, events, and selection.
80
80
 
81
81
  ### Angular Stock Chart
82
82
 
83
- The [Angular Stock Chart](https://www.syncfusion.com/angular-components/angular-stock-chart) Component is a well-crafted, easy-to-use financial charting package to track and visualize stock price of any company over a specific period using charting and range tools.
83
+ The [Angular Stock Chart](https://www.syncfusion.com/angular-components/angular-stock-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm) Component is a well-crafted, easy-to-use financial charting package to track and visualize stock price of any company over a specific period using charting and range tools.
84
84
 
85
85
  <p align="center">
86
- <a href="https://ej2.syncfusion.com/angular/documentation/stock-chart/getting-started/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm">Getting started</a> .
87
- <a href="https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/bootstrap5/stock-chart/default">Online demos</a> .
86
+ <a href="https://help.syncfusion.com/chart-sdk/angular/stock-chart/getting-started?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm">Getting started</a> .
87
+ <a href="https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/stock-chart/default">Online demos</a> .
88
88
  <a href="https://www.syncfusion.com/angular-components/angular-stock-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm">Learn more</a>
89
89
  </p>
90
90
 
@@ -94,23 +94,23 @@ The [Angular Stock Chart](https://www.syncfusion.com/angular-components/angular-
94
94
 
95
95
  #### Key features
96
96
 
97
- * [Data binding](https://ej2.syncfusion.com/angular/documentation/stock-chart/working-with-data/): Bind the stock chart component with an array of JSON objects or DataManager. Other than chart series, data label and tooltip can also bound to your data.
98
- * [Range selector](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=stockchart#/material/stock-chart/disabled-period): Supports range selector to filter a date range for data that needs to be visualized.
99
- * [Period selector](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=stockchart#/material/stock-chart/disabled-navigator): Supports period selector to select predefined periods just by a single click.
100
- * [Technical indicators](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=stockchart#/material/stock-chart/default): Incidators allows to analyze the past and predict the future market trends based on historic price, volume, or open interest.
101
- * [Trendlines](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=stockchart#/material/stock-chart/default): Predicts the future trends with predetermined data for any measurements.
102
- * [Stock events](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=stockchart#/material/stock-chart/stock-events): Supports stock events to show different kinds of market events on the chart.
103
- * [Export](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=stockchart#/material/stock-chart/multi-pane): Provides the options to Export the stock chart to PDF, SVG and CSV formats.
104
- * [Appearance](https://ej2.syncfusion.com/angular/documentation/stock-chart/appearance/): Colors for the stock chart are picked by the built-in theme, but each element of the stock chart can be customized by simple configuration options.
105
- * [Tooltip](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=stockchart#/material/stock-chart/multi-pane): Provides great user experiance by including a set of interactive features such as tooltip, events, and trackball.
97
+ * [Data binding](https://help.syncfusion.com/chart-sdk/angular/stock-chart/working-with-data?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm): Bind the stock chart component with an array of JSON objects or DataManager. Other than chart series, data label and tooltip can also bound to your data.
98
+ * [Range selector](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/stock-chart/disabled-period): Supports range selector to filter a date range for data that needs to be visualized.
99
+ * [Period selector](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/stock-chart/disabled-navigator): Supports period selector to select predefined periods just by a single click.
100
+ * [Technical indicators](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/stock-chart/default): Incidators allows to analyze the past and predict the future market trends based on historic price, volume, or open interest.
101
+ * [Trendlines](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/stock-chart/default): Predicts the future trends with predetermined data for any measurements.
102
+ * [Stock events](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/stock-chart/stock-events): Supports stock events to show different kinds of market events on the chart.
103
+ * [Export](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/stock-chart/multi-pane): Provides the options to Export the stock chart to PDF, SVG and CSV formats.
104
+ * [Appearance](https://help.syncfusion.com/chart-sdk/angular/stock-chart/appearance?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm): Colors for the stock chart are picked by the built-in theme, but each element of the stock chart can be customized by simple configuration options.
105
+ * [Tooltip](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/stock-chart/multi-pane): Provides great user experiance by including a set of interactive features such as tooltip, events, and trackball.
106
106
 
107
107
  ### Angular Range Navigator
108
108
 
109
- The [Angular Range Navigator Component](https://www.syncfusion.com/angular-components/angular-range-selector) is an interface for selecting a small range from a large collection. It is commonly used in financial dashboards to filter a date range for data that needs to be visualized.
109
+ The [Angular Range Navigator Component](https://www.syncfusion.com/angular-components/angular-range-selector?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm) is an interface for selecting a small range from a large collection. It is commonly used in financial dashboards to filter a date range for data that needs to be visualized.
110
110
 
111
111
  <p align="center">
112
- <a href="https://ej2.syncfusion.com/angular/documentation/range-navigator/getting-started/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm">Getting started</a> .
113
- <a href="https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/bootstrap5/range-navigator/default">Online demos</a> .
112
+ <a href="https://help.syncfusion.com/chart-sdk/angular/range-navigator/getting-started?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm">Getting started</a> .
113
+ <a href="https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/range-navigator/default">Online demos</a> .
114
114
  <a href="https://www.syncfusion.com/angular-components/angular-range-selector?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm">Learn more</a>
115
115
  </p>
116
116
 
@@ -120,19 +120,19 @@ The [Angular Range Navigator Component](https://www.syncfusion.com/angular-compo
120
120
 
121
121
  #### Key features
122
122
 
123
- * [Data sources](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=range-navigator#/material/range-navigator/stock-chart): Bind the range navigator component with an array of JSON objects or DataManager.
124
- * [Tooltip](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=range-navigator#/material/range-navigator/default): Provides great user experiance by including a set of interactive features such as tooltip, events, and animation.
125
- * [Lightweight](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=range-navigator#/material/range-navigator/light-weight): Supports light-weight range navigator to load in mobile device.
126
- * [Period selector](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=range-navigator#/material/range-navigator/period-default): Provides options to select the data over the custom period.
127
- * [Axis types](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=range-navigator#/material/range-navigator/date-time): Supports multiple axis and able to plot different data such as numbers, datetime, logarithmic and string.
123
+ * [Data sources](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/range-navigator/stock-chart): Bind the range navigator component with an array of JSON objects or DataManager.
124
+ * [Tooltip](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/range-navigator/default): Provides great user experiance by including a set of interactive features such as tooltip, events, and animation.
125
+ * [Lightweight](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/range-navigator/light-weight): Supports light-weight range navigator to load in mobile device.
126
+ * [Period selector](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/range-navigator/period-default): Provides options to select the data over the custom period.
127
+ * [Axis types](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/range-navigator/date-time): Supports multiple axis and able to plot different data such as numbers, datetime, logarithmic and string.
128
128
 
129
129
  ### Angular Sparkline
130
130
 
131
- The [Angular Sparkline Component](https://www.syncfusion.com/angular-components/angular-sparkline) is a very small chart control drawn without axes or coordinates. The sparklines are easy to interpret and convey more information to users by visualizing data in a small amount of space.
131
+ The [Angular Sparkline Component](https://www.syncfusion.com/angular-components/angular-sparkline?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm) is a very small chart control drawn without axes or coordinates. The sparklines are easy to interpret and convey more information to users by visualizing data in a small amount of space.
132
132
 
133
133
  <p align="center">
134
- <a href="https://ej2.syncfusion.com/angular/documentation/sparkline/getting-started/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm">Getting started</a> .
135
- <a href="https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/bootstrap5/sparkline/default">Online demos</a> .
134
+ <a href="https://help.syncfusion.com/chart-sdk/angular/sparkline/getting-started?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm">Getting started</a> .
135
+ <a href="https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/sparkline/default">Online demos</a> .
136
136
  <a href="https://www.syncfusion.com/angular-components/angular-sparkline?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm">Learn more</a>
137
137
  </p>
138
138
 
@@ -142,19 +142,19 @@ The [Angular Sparkline Component](https://www.syncfusion.com/angular-components/
142
142
 
143
143
  #### Key features
144
144
 
145
- * [Series types](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=sparkline#/material/sparkline/series-type): Supports five types of sparklines : line, area, column, win loss, and pie to show data trends.
146
- * [Axis types](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=sparkline#/material/sparkline/axis-type): Supports multiple axis and able to plot different data such as numbers, datetime, logarithmic and string.
147
- * [Data label](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=sparkline#/material/sparkline/customization): Supports data label to annotate points with label to improve the readability of data.
148
- * [Range band](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=sparkline#/material/sparkline/range-band): Provides options to highlight specific range of values.
149
- * [Tooltip](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=sparkline#/material/sparkline/default): Provides great user experiance by including a set of interactive features such as tooltip, events, and trackball.
145
+ * [Series types](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/sparkline/series-type): Supports five types of sparklines : line, area, column, win loss, and pie to show data trends.
146
+ * [Axis types](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/sparkline/axis-type): Supports multiple axis and able to plot different data such as numbers, datetime, logarithmic and string.
147
+ * [Data label](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/sparkline/customization): Supports data label to annotate points with label to improve the readability of data.
148
+ * [Range band](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/sparkline/range-band): Provides options to highlight specific range of values.
149
+ * [Tooltip](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/sparkline/default): Provides great user experiance by including a set of interactive features such as tooltip, events, and trackball.
150
150
 
151
151
  ### Angular Bullet Chart
152
152
 
153
- The [Angular Bullet Chart Component](https://www.syncfusion.com/angular-components/angular-bullet-chart) is a interface to visually compare measures, similar to the commonly used bar chart. A bullet chart displays one or more measures and compares them with a target value.
153
+ The [Angular Bullet Chart Component](https://www.syncfusion.com/angular-components/angular-bullet-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm) is a interface to visually compare measures, similar to the commonly used bar chart. A bullet chart displays one or more measures and compares them with a target value.
154
154
 
155
155
  <p align="center">
156
- <a href="https://ej2.syncfusion.com/angular/documentation/bullet-chart/getting-started/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm">Getting started</a> .
157
- <a href="https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/bootstrap5/bullet-chart/default">Online demos</a> .
156
+ <a href="https://help.syncfusion.com/chart-sdk/angular/bullet-chart/getting-started?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm">Getting started</a> .
157
+ <a href="https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/bullet-chart/default">Online demos</a> .
158
158
  <a href="https://www.syncfusion.com/angular-components/angular-bullet-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm">Learn more</a>
159
159
  </p>
160
160
 
@@ -164,18 +164,18 @@ The [Angular Bullet Chart Component](https://www.syncfusion.com/angular-componen
164
164
 
165
165
  #### Key features
166
166
 
167
- * [Multiple measures](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=stockchart#/material/bullet-chart/multiple-data): Provides options to render multiple measure bars as well as multiple target bars to allow comparison of several measures at once.
168
- * [Legend](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=stockchart#/material/bullet-chart/bullet-legend): Provides options to display additional information about the target and actual bar.
169
- * [RTL support](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=bulletchart#/material/bullet-chart/rtl): Provides a full-fledged right-to-left mode which aligns axis, tooltip, legend and data in the chart component from right to left.
170
- * [Tooltip](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=stockchart#/material/bullet-chart/tooltip): Provides options to display additional information about target and actual on mouse hover.
167
+ * [Multiple measures](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/bullet-chart/multiple-data): Provides options to render multiple measure bars as well as multiple target bars to allow comparison of several measures at once.
168
+ * [Legend](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/bullet-chart/bullet-legend): Provides options to display additional information about the target and actual bar.
169
+ * [RTL support](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npmt#/material3/grid/over-view): Provides a full-fledged right-to-left mode which aligns axis, tooltip, legend and data in the chart component from right to left.
170
+ * [Tooltip](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/bullet-chart/tooltip): Provides options to display additional information about target and actual on mouse hover.
171
171
 
172
172
  ### Angular Smith Chart
173
173
 
174
174
  The [Angular Smith Chart Component](https://www.syncfusion.com/angular-components/angular-smith-chart) visualize data of high frequency circuit applications. It contains two sets of circles to plot parameters of transmission lines.
175
175
 
176
176
  <p align="center">
177
- <a href="https://ej2.syncfusion.com/angular/documentation/smithchart/getting-started/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm">Getting started</a> .
178
- <a href="https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/bootstrap5/smith-chart/default">Online demos</a> .
177
+ <a href="https://help.syncfusion.com/chart-sdk/angular/smithchart/getting-started?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm">Getting started</a> .
178
+ <a href="https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/smith-chart/default">Online demos</a> .
179
179
  <a href="https://www.syncfusion.com/angular-components/angular-smith-chart?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm">Learn more</a>
180
180
  </p>
181
181
 
@@ -185,10 +185,10 @@ The [Angular Smith Chart Component](https://www.syncfusion.com/angular-component
185
185
 
186
186
  #### Key features
187
187
 
188
- * [Legend](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=smithchart#/material/smith-chart/default): Provides options to display additional information about the series.
189
- * [Data label](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=smithchart#/material/smith-chart/custom): Supports data label to annotate points with label to improve the readability of data.
190
- * [Tooltip](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=smithchart#/material/smith-chart/custom): Provides options to display additional information about data points on mouse hover.
191
- * [Print and Export](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_campaign=smithchart#/material/smith-chart/print-export): Provides support to print and export the rendered smith chart for future use.
188
+ * [Legend](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/smith-chart/default): Provides options to display additional information about the series.
189
+ * [Data label](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/smith-chart/custom): Supports data label to annotate points with label to improve the readability of data.
190
+ * [Tooltip](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/smith-chart/custom): Provides options to display additional information about data points on mouse hover.
191
+ * [Print and Export](https://ej2.syncfusion.com/angular/demos/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm#/material3/smith-chart/print-export): Provides support to print and export the rendered smith chart for future use.
192
192
 
193
193
  ## Setup
194
194
 
@@ -262,44 +262,85 @@ export class AppComponent implements OnInit {
262
262
 
263
263
  Chart components are available in following list of frameworks.
264
264
 
265
- | [<img src="https://ej2.syncfusion.com/github/images/js.svg" height="50" />](https://www.syncfusion.com/javascript-ui-controls?utm_medium=listing&utm_source=github)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[JavaScript](https://www.syncfusion.com/javascript-ui-controls?utm_medium=listing&utm_source=github)&nbsp;&nbsp;&nbsp;&nbsp; | [<img src="https://ej2.syncfusion.com/github/images/react.svg" height="50" />](https://www.syncfusion.com/react-ui-components?utm_medium=listing&utm_source=github)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[React](https://www.syncfusion.com/react-ui-components?utm_medium=listing&utm_source=github)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | [<img src="https://ej2.syncfusion.com/github/images/vue.svg" height="50" />](https://www.syncfusion.com/vue-ui-components?utm_medium=listing&utm_source=github)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Vue](https://www.syncfusion.com/vue-ui-components?utm_medium=listing&utm_source=github)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | [<img src="https://ej2.syncfusion.com/github/images/netcore.svg" height="50" />](https://www.syncfusion.com/aspnet-core-ui-controls?utm_medium=listing&utm_source=github)<br/>&nbsp;&nbsp;[ASP.NET&nbsp;Core](https://www.syncfusion.com/aspnet-core-ui-controls?utm_medium=listing&utm_source=github)&nbsp;&nbsp; | [<img src="https://ej2.syncfusion.com/github/images/netmvc.svg" height="50" />](https://www.syncfusion.com/aspnet-mvc-ui-controls?utm_medium=listing&utm_source=github)<br/>&nbsp;&nbsp;[ASP.NET&nbsp;MVC](https://www.syncfusion.com/aspnet-mvc-ui-controls?utm_medium=listing&utm_source=github)&nbsp;&nbsp; |
265
+ | [<img src="https://ej2.syncfusion.com/github/images/js.svg" height="50" />](https://www.syncfusion.com/javascript-ui-controls?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[JavaScript](https://www.syncfusion.com/javascript-ui-controls?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)&nbsp;&nbsp;&nbsp;&nbsp; | [<img src="https://ej2.syncfusion.com/github/images/react.svg" height="50" />](https://www.syncfusion.com/react-components?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[React](https://www.syncfusion.com/react-components?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | [<img src="https://ej2.syncfusion.com/github/images/vue.svg" height="50" />](https://www.syncfusion.com/vue-components?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[Vue](https://www.syncfusion.com/vue-components?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | [<img src="https://ej2.syncfusion.com/github/images/netcore.svg" height="50" />](https://www.syncfusion.com/aspnet-core-ui-controls?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)<br/>&nbsp;&nbsp;[ASP.NET&nbsp;Core](https://www.syncfusion.com/aspnet-core-ui-controls?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)&nbsp;&nbsp; | [<img src="https://ej2.syncfusion.com/github/images/netmvc.svg" height="50" />](https://www.syncfusion.com/aspnet-mvc-ui-controls?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)<br/>&nbsp;&nbsp;[ASP.NET&nbsp;MVC](https://www.syncfusion.com/aspnet-mvc-ui-controls?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)&nbsp;&nbsp; |
266
266
  | :-----: | :-----: | :-----: | :-----: | :-----: |
267
267
 
268
268
  ## Showcase samples
269
269
 
270
- * Expense Tracker - [Source](https://github.com/syncfusion/ej2-sample-ng-expensetracker), [Live Demo](https://ej2.syncfusion.com/showcase/angular/expensetracker/#/dashboard?utm_source=npm&utm_campaign=chart)
271
- * Loan Calculator - [Source](https://github.com/syncfusion/ej2-sample-ng-loancalculator), [Live Demo](https://ej2.syncfusion.com/showcase/angular/loancalculator/?utm_source=npm&utm_campaign=chart)
272
- * [Angular Stock Chart demo](https://ej2.syncfusion.com/showcase/angular/stockchart/#/stockChart/?utm_source=npm&utm_campaign=chart)
273
- * Fitness Tracker - [Source](https://github.com/SyncfusionExamples/showcase-angular-health-tracker-dashboard-demo), [Live Demo](https://ej2.syncfusion.com/showcase/angular/fitness-tracker-app/)
270
+ * Expense Tracker - [Source](https://github.com/syncfusion/ej2-showcase-angular-expensetracker?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm), [Live Demo](https://ej2.syncfusion.com/showcase/angular/expensetracker/#/dashboard?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
271
+ * Loan Calculator - [Source](https://github.com/syncfusion/ej2-showcase-angular-loan-calculator?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm), [Live Demo](https://ej2.syncfusion.com/showcase/angular/loancalculator/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
272
+ * [Angular Stock Chart demo](https://ej2.syncfusion.com/showcase/angular/stockchart/#/stockChart?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
273
+ * Fitness Tracker - [Source](https://github.com/SyncfusionExamples/showcase-angular-health-tracker-dashboard-demo?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm), [Live Demo](https://ej2.syncfusion.com/showcase/angular/healthtracker/src/#/dashboard?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
274
274
 
275
275
  ## Resources
276
276
 
277
- * [Documentation](https://ej2.syncfusion.com/angular/documentation/chart/getting-started)
278
- * [Theme Studio](https://ej2.syncfusion.com/themestudio/)
279
- * [What's New](https://www.syncfusion.com/products/whatsnew/angular?utm_medium=listing&utm_source=github)
280
- * [Road Map](https://www.syncfusion.com/products/roadmap/angular)
281
- * [E-Books](https://www.syncfusion.com/succinctly-free-ebooks?searchkey=angular&type=all)
277
+ * [Documentation](https://help.syncfusion.com/chart-sdk/angular/chart/getting-started?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
278
+ * [Theme Studio](https://ej2.syncfusion.com/themestudio/?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
279
+ * [What's New](https://www.syncfusion.com/products/whatsnew/angular?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
280
+ * [Road Map](https://www.syncfusion.com/products/roadmap/angular?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
281
+ * [E-Books](https://www.syncfusion.com/succinctly-free-ebooks?searchkey=angular&type=all?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
282
282
 
283
283
  ## Support
284
284
 
285
285
  Product support is available through the following mediums.
286
286
 
287
- * [Support ticket](https://support.syncfusion.com/support/tickets/create) - Guaranteed Response in 24 hours | Unlimited tickets | Holiday support
287
+ * [Support ticket](https://support.syncfusion.com/support/tickets/create?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm) - Guaranteed Response in 24 hours | Unlimited tickets | Holiday support
288
288
  * [Community forum](https://www.syncfusion.com/forums/angular-js2?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
289
- * [GitHub issues](https://github.com/syncfusion/ej2-angular-ui-components/issues/new)
289
+ * [GitHub issues](https://github.com/syncfusion/ej2-angular-ui-components/issues/new?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
290
290
  * [Request feature or report bug](https://www.syncfusion.com/feedback/angular?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm)
291
291
  * Live chat
292
292
 
293
+ ## Other Popular Angular Components
294
+
295
+ Explore other popular Syncfusion<sup>®</sup> Angular components curated from UI components, standalone SDKs, and document solution suites.
296
+
297
+ <table>
298
+ <tr>
299
+ <td align="center">
300
+ <a href="https://www.syncfusion.com/angular-components/angular-data-grid">Angular DataGrid</a>
301
+ </td>
302
+ <td align="center">
303
+ <a href="https://www.syncfusion.com/scheduler-sdk/angular-scheduler">Angular Scheduler</a>
304
+ </td>
305
+ <td align="center">
306
+ <a href="https://www.syncfusion.com/angular-components/angular-file-manager">Angular File Manager</a>
307
+ </td>
308
+ <td align="center">
309
+ <a href="https://www.syncfusion.com/gantt-sdk/angular-gantt-chart">Angular Gantt Chart</a>
310
+ </td>
311
+ <td align="center">
312
+ <a href="https://www.syncfusion.com/diagram-sdk/angular-diagram">Angular Diagram</a>
313
+ </td>
314
+ </tr>
315
+ <tr>
316
+ <td align="center">
317
+ <a href="https://www.syncfusion.com/rich-text-editor-sdk/angular-rich-text-editor">Angular Rich Text Editor</a>
318
+ </td>
319
+ <td align="center">
320
+ <a href="https://www.syncfusion.com/docx-editor-sdk/angular-docx-editor">Angular DOCX Editor</a>
321
+ </td>
322
+ <td align="center">
323
+ <a href="https://www.syncfusion.com/pdf-viewer-sdk/angular-pdf-viewer">Angular PDF Viewer</a>
324
+ </td>
325
+ <td align="center">
326
+ <a href="https://www.syncfusion.com/spreadsheet-editor-sdk/angular-spreadsheet-editor">Angular Spreadsheet Editor</a>
327
+ </td>
328
+ <td align="center">
329
+ <a href="https://www.syncfusion.com/angular-components/angular-maps-library">Angular Maps</a>
330
+ </td>
331
+ </tr>
332
+ </table>
333
+
293
334
  ## Changelog
294
335
 
295
- Check the changelog [here](https://github.com/syncfusion/ej2-angular-ui-components/blob/master/components/charts/CHANGELOG.md). Get minor improvements and bug fixes every week to stay up to date with frequent updates.
336
+ Check the changelog [here](https://github.com/syncfusion/ej2-angular-ui-components/blob/master/components/charts/CHANGELOG.md?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm). Get minor improvements and bug fixes every week to stay up to date with frequent updates.
296
337
 
297
338
  ## License and copyright
298
339
 
299
- > This is a commercial product and requires a paid license for possession or use. Syncfusion<sup>®</sup> licensed software, including this component, is subject to the terms and conditions of Syncfusion's [EULA](https://www.syncfusion.com/eula/es/). To acquire a license for 140+ [Angular UI components](https://www.syncfusion.com/angular-components), you can [purchase](https://www.syncfusion.com/sales/products) or [start a free 30-day trial](https://www.syncfusion.com/account/manage-trials/start-trials).
340
+ > This is a commercial product and requires a paid license for possession or use. Syncfusion<sup>®</sup> licensed software, including this component, is subject to the terms and conditions of Syncfusion's [EULA](https://www.syncfusion.com/license/studio/33.2.3/syncfusion_essential_studio_eula.pdf?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm). To acquire a license for 150+ [Angular UI components](https://www.syncfusion.com/angular-components?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm), you can [purchase](https://www.syncfusion.com/sales/pricing?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm) or [start a free 30-day trial](https://www.syncfusion.com/downloads/angular?tag=es-seo-ft-angular-banner-trial).
300
341
 
301
- > A free community [license](https://www.syncfusion.com/products/communitylicense) is also available for companies and individuals whose organizations have less than $1 million USD in annual gross revenue and five or fewer developers.
342
+ > A free community [license](https://github.com/syncfusion/ej2-angular-ui-components/blob/master/license?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm) is also available for companies and individuals whose organizations have less than $1 million USD in annual gross revenue and five or fewer developers.
302
343
 
303
- See [LICENSE FILE](https://github.com/syncfusion/ej2-angular-ui-components/blob/master/license) for more info.
344
+ See [LICENSE FILE](https://github.com/syncfusion/ej2-angular-ui-components/blob/master/license?utm_source=npm&utm_medium=listing&utm_campaign=angular-charts-npm) for more info.
304
345
 
305
- © Copyright 2026 Syncfusion<sup>®</sup> Inc. All Rights Reserved. The Syncfusion<sup>®</sup> Essential Studio<sup>®</sup> license and copyright applies to this distribution.
346
+ © Copyright 2026 Syncfusion<sup>®</sup> Inc. All Rights Reserved. The Syncfusion<sup>®</sup> Essential Studio<sup>®</sup> license and copyright applies to this distribution.
@@ -55,4 +55,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImpor
55
55
  },
56
56
  }]
57
57
  }], ctorParameters: function () { return []; } });
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXhlcy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2hhcnQvYXhlcy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBb0IsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVoRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7QUFFekUsSUFBSSxLQUFLLEdBQWEsQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSw2QkFBNkIsRUFBRSwwQkFBMEIsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDdmpDLElBQUksT0FBTyxHQUFhLEVBQUUsQ0FBQztBQUMzQjs7Ozs7R0FLRztBQVVILE1BQU0sT0FBTyxhQUFjLFNBQVEsV0FBMEI7SUFxWXpELFlBQW9CLGdCQUFpQztRQUNqRCxLQUFLLEVBQUUsQ0FBQztRQURRLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFoWTlDLFNBQUksR0FBYSxDQUFDLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBa1l2RCxRQUFRLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUNuQyxDQUFDOzswR0ExWVEsYUFBYTs4RkFBYixhQUFhLDRpRUFKZ0IsbUJBQW1CLHdGQUNiLHlCQUF5QjsyRkFHNUQsYUFBYTtrQkFUekIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsTUFBTSxFQUFFLEtBQUs7b0JBQ2IsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLE9BQU8sRUFBRTt3QkFDTCxlQUFlLEVBQUUsSUFBSSxZQUFZLENBQUMsbUJBQW1CLENBQUM7d0JBQ3RELHFCQUFxQixFQUFFLElBQUksWUFBWSxDQUFDLHlCQUF5QixDQUFDO3FCQUNyRTtpQkFDSjs7QUE4WUQ7OztHQUdHO0FBT0gsTUFBTSxPQUFPLGFBQWMsU0FBUSxTQUF3QjtJQUN2RDtRQUNJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQixDQUFDOzswR0FIUSxhQUFhOzhGQUFiLGFBQWEsaUZBSFksYUFBYTsyRkFHdEMsYUFBYTtrQkFOekIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixPQUFPLEVBQUU7d0JBQ0wsUUFBUSxFQUFFLElBQUksZUFBZSxDQUFDLGFBQWEsQ0FBQztxQkFDL0M7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIFZpZXdDb250YWluZXJSZWYsIENvbnRlbnRDaGlsZHJlbiwgQ29udGVudENoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wbGV4QmFzZSwgQXJyYXlCYXNlLCBzZXRWYWx1ZSB9IGZyb20gJ0BzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLWJhc2UnO1xuXG5pbXBvcnQgeyBTdHJpcExpbmVzRGlyZWN0aXZlIH0gZnJvbSAnLi9zdHJpcGxpbmVzLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBNdWx0aUxldmVsTGFiZWxzRGlyZWN0aXZlIH0gZnJvbSAnLi9tdWx0aWxldmVsbGFiZWxzLmRpcmVjdGl2ZSc7XG5cbmxldCBpbnB1dDogc3RyaW5nW10gPSBbJ2JvcmRlcicsICdjb2VmZmljaWVudCcsICdjb2x1bW5JbmRleCcsICdjcm9zc2VzQXQnLCAnY3Jvc3Nlc0luQXhpcycsICdjcm9zc2hhaXJUb29sdGlwJywgJ2Rlc2NyaXB0aW9uJywgJ2Rlc2lyZWRJbnRlcnZhbHMnLCAnZWRnZUxhYmVsUGxhY2VtZW50JywgJ2VuYWJsZUF1dG9JbnRlcnZhbE9uWm9vbWluZycsICdlbmFibGVTY3JvbGxiYXJPblpvb21pbmcnLCAnZW5hYmxlVHJpbScsICdlbmFibGVXcmFwJywgJ2ludGVydmFsJywgJ2ludGVydmFsVHlwZScsICdpc0luZGV4ZWQnLCAnaXNJbnZlcnNlZCcsICdsYWJlbEZvcm1hdCcsICdsYWJlbEludGVyc2VjdEFjdGlvbicsICdsYWJlbFBhZGRpbmcnLCAnbGFiZWxQbGFjZW1lbnQnLCAnbGFiZWxQb3NpdGlvbicsICdsYWJlbFJvdGF0aW9uJywgJ2xhYmVsU3R5bGUnLCAnbGFiZWxUZW1wbGF0ZScsICdsaW5lQnJlYWtBbGlnbm1lbnQnLCAnbGluZVN0eWxlJywgJ2xvZ0Jhc2UnLCAnbWFqb3JHcmlkTGluZXMnLCAnbWFqb3JUaWNrTGluZXMnLCAnbWF4aW11bScsICdtYXhpbXVtTGFiZWxXaWR0aCcsICdtYXhpbXVtTGFiZWxzJywgJ21pbmltdW0nLCAnbWlub3JHcmlkTGluZXMnLCAnbWlub3JUaWNrTGluZXMnLCAnbWlub3JUaWNrc1BlckludGVydmFsJywgJ211bHRpTGV2ZWxMYWJlbHMnLCAnbmFtZScsICdvcHBvc2VkUG9zaXRpb24nLCAncGxhY2VOZXh0VG9BeGlzTGluZScsICdwbG90T2Zmc2V0JywgJ3Bsb3RPZmZzZXRCb3R0b20nLCAncGxvdE9mZnNldExlZnQnLCAncGxvdE9mZnNldFJpZ2h0JywgJ3Bsb3RPZmZzZXRUb3AnLCAncmFuZ2VQYWRkaW5nJywgJ3Jvd0luZGV4JywgJ3Njcm9sbGJhclNldHRpbmdzJywgJ3NrZWxldG9uJywgJ3NrZWxldG9uVHlwZScsICdzcGFuJywgJ3N0YXJ0QW5nbGUnLCAnc3RhcnRGcm9tWmVybycsICdzdHJpcExpbmVzJywgJ3RhYkluZGV4JywgJ3RpY2tQb3NpdGlvbicsICd0aXRsZScsICd0aXRsZVBhZGRpbmcnLCAndGl0bGVSb3RhdGlvbicsICd0aXRsZVN0eWxlJywgJ3ZhbHVlVHlwZScsICd2aXNpYmxlJywgJ3pvb21GYWN0b3InLCAnem9vbVBvc2l0aW9uJ107XG5sZXQgb3V0cHV0czogc3RyaW5nW10gPSBbXTtcbi8qKlxuICogQXhpcyBEaXJlY3RpdmVcbiAqIGBgYGh0bWxcbiAqIDxlLWF4ZXM+PGUtYXhpcz48L2UtYXhpcz48L2UtYXhlcz5cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ2UtYXhlcz5lLWF4aXMnLFxuICAgIGlucHV0czogaW5wdXQsXG4gICAgb3V0cHV0czogb3V0cHV0cywgICAgXG4gICAgcXVlcmllczoge1xuICAgICAgICBjaGlsZFN0cmlwTGluZXM6IG5ldyBDb250ZW50Q2hpbGQoU3RyaXBMaW5lc0RpcmVjdGl2ZSksIFxuICAgICAgICBjaGlsZE11bHRpTGV2ZWxMYWJlbHM6IG5ldyBDb250ZW50Q2hpbGQoTXVsdGlMZXZlbExhYmVsc0RpcmVjdGl2ZSlcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEF4aXNEaXJlY3RpdmUgZXh0ZW5kcyBDb21wbGV4QmFzZTxBeGlzRGlyZWN0aXZlPiB7XG4gICAgcHVibGljIGRpcmVjdGl2ZVByb3BMaXN0OiBhbnk7XG5cdFxuICAgIHB1YmxpYyBjaGlsZFN0cmlwTGluZXM6IGFueTtcbiAgICBwdWJsaWMgY2hpbGRNdWx0aUxldmVsTGFiZWxzOiBhbnk7XG4gICAgcHVibGljIHRhZ3M6IHN0cmluZ1tdID0gWydzdHJpcExpbmVzJywgJ211bHRpTGV2ZWxMYWJlbHMnXTtcbiAgICAvKiogXG4gICAgICogQ29uZmlndXJlcyB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgYm9yZGVyIGFyb3VuZCBtdWx0aS1sZXZlbCBsYWJlbHMsIGluY2x1ZGluZyB0aGUgY29sb3IsIHdpZHRoLCBhbmQgdHlwZSBvZiB0aGUgYm9yZGVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBib3JkZXI6IGFueTtcbiAgICAvKiogXG4gICAgICogVGhlIGBjb2VmZmljaWVudGAgdmFsdWUgYWRqdXN0cyB0aGUgc2l6ZSBvZiB0aGUgcG9sYXIgcmFkYXIgY2hhcnQncyByYWRpdXMuIEEgaGlnaGVyIHZhbHVlIGluY3JlYXNlcyB0aGUgcmFkaXVzIHNpemUsIHdoaWxlIGEgc21hbGxlciB2YWx1ZSBkZWNyZWFzZXMgaXQuXG4gICAgICogQGRlZmF1bHQgMTAwXG4gICAgICovXG4gICAgcHVibGljIGNvZWZmaWNpZW50OiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgaW5kZXggb2YgdGhlIGNvbHVtbiB3aGVyZSB0aGUgYXhpcyBpcyBhc3NvY2lhdGVkIHdoZW4gdGhlIGNoYXJ0IGFyZWEgaXMgZGl2aWRlZCBpbnRvIG11bHRpcGxlIHBsb3QgYXJlYXMgdXNpbmcgYGNvbHVtbnNgLiBcbiAgICAgKiBcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgcHVibGljIGNvbHVtbkluZGV4OiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgdmFsdWUgYXQgd2hpY2ggdGhlIGF4aXMgbGluZSBpbnRlcnNlY3RzIHdpdGggdGhlIHZlcnRpY2FsIGF4aXMgb3IgdmljZSB2ZXJzYS5cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgcHVibGljIGNyb3NzZXNBdDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGF4aXMgd2l0aCB3aGljaCB0aGUgYXhpcyBsaW5lIHNob3VsZCBpbnRlcnNlY3QuXG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqL1xuICAgIHB1YmxpYyBjcm9zc2VzSW5BeGlzOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIE9wdGlvbnMgdG8gY3VzdG9taXplIHRoZSBhcHBlYXJhbmNlIGFuZCBiZWhhdmlvciBvZiB0aGUgY3Jvc3NoYWlyIHRvb2x0aXAgdGhhdCBhcHBlYXJzIHdoZW4gaG92ZXJpbmcgb3ZlciB0aGUgY2hhcnQuXG4gICAgICovXG4gICAgcHVibGljIGNyb3NzaGFpclRvb2x0aXA6IGFueTtcbiAgICAvKiogXG4gICAgICogQSBkZXNjcmlwdGlvbiBmb3IgdGhlIGF4aXMgdGhhdCBwcm92aWRlcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGl0cyBjb250ZW50IGZvciBzY3JlZW4gcmVhZGVycy5cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgcHVibGljIGRlc2NyaXB0aW9uOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBgZGVzaXJlZEludGVydmFsc2AgcHJvcGVydHkgYWxsb3dzIHRoZSBheGlzIHRvIGNhbGN1bGF0ZSBpbnRlcnZhbHMgdGhhdCBhcmUgcm91Z2hseSBlcXVhbCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciwgcHJvbW90aW5nIGEgbW9yZSByZWFkYWJsZSBhbmQgZXZlbmx5IHNwYWNlZCBheGlzLlxuICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgKiBAYXNwZGVmYXVsdHZhbHVlaWdub3JlIFxuICAgICAqL1xuICAgIHB1YmxpYyBkZXNpcmVkSW50ZXJ2YWxzOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBgZWRnZUxhYmVsUGxhY2VtZW50YCBwcm9wZXJ0eSBlbnN1cmVzIHRoYXQgbGFiZWxzIHBvc2l0aW9uZWQgYXQgdGhlIGVkZ2VzIG9mIHRoZSBheGlzIGRvIG5vdCBvdmVybGFwIHdpdGggdGhlIGF4aXMgYm91bmRhcmllcyBvciBvdGhlciBjaGFydCBlbGVtZW50cywgb2ZmZXJpbmcgc2V2ZXJhbCBvcHRpb25zIHRvIGltcHJvdmUgY2hhcnQgcmVhZGFiaWxpdHkgYnkgbWFuYWdpbmcgZWRnZSBsYWJlbHMgZWZmZWN0aXZlbHkuIFxuICAgICAqIEF2YWlsYWJsZSBvcHRpb25zIGFyZTogXG4gICAgICogKiBOb25lOiBObyBhY3Rpb24gd2lsbCBiZSBwZXJmb3JtZWQgb24gZWRnZSBsYWJlbHMuIFxuICAgICAqICogSGlkZTogRWRnZSBsYWJlbHMgd2lsbCBiZSBoaWRkZW4gdG8gcHJldmVudCBvdmVybGFwLiBcbiAgICAgKiAqIFNoaWZ0OiBFZGdlIGxhYmVscyB3aWxsIGJlIHNoaWZ0ZWQgdG8gZml0IHdpdGhpbiB0aGUgYXhpcyBib3VuZHMgd2l0aG91dCBvdmVybGFwcGluZy5cbiAgICAgKiBAZGVmYXVsdCAnU2hpZnQnXG4gICAgICovXG4gICAgcHVibGljIGVkZ2VMYWJlbFBsYWNlbWVudDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGF4aXMgaW50ZXJ2YWwgd2lsbCBiZSBjYWxjdWxhdGVkIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gdGhlIHpvb21lZCByYW5nZS5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgcHVibGljIGVuYWJsZUF1dG9JbnRlcnZhbE9uWm9vbWluZzogYW55O1xuICAgIC8qKiBcbiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgYSBzY3JvbGxiYXIgd2lsbCBhcHBlYXIgd2hpbGUgem9vbWluZyB0byBoZWxwIG5hdmlnYXRlIHRocm91Z2ggdGhlIHpvb21lZCBjb250ZW50LlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBwdWJsaWMgZW5hYmxlU2Nyb2xsYmFyT25ab29taW5nOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIElmIHNldCB0byB0cnVlLCBheGlzIGxhYmVscyB3aWxsIGJlIHRyaW1tZWQgYmFzZWQgb24gdGhlIGBtYXhpbXVtTGFiZWxXaWR0aGAuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBwdWJsaWMgZW5hYmxlVHJpbTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgYXhpcyBsYWJlbHMgc2hvdWxkIGJlIHdyYXBwZWQgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBgbWF4aW11bUxhYmVsV2lkdGhgLiBcbiAgICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAsIHRoZSBheGlzIGxhYmVscyB3aWxsIGF1dG9tYXRpY2FsbHkgd3JhcCB0byBmaXQgd2l0aGluIHRoZSBhdmFpbGFibGUgd2lkdGggZGVmaW5lZCBieSBgbWF4aW11bUxhYmVsV2lkdGhgLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcHVibGljIGVuYWJsZVdyYXA6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBpbnRlcnZhbCBmb3IgdGhlIGF4aXMuXG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqIEBhc3BkZWZhdWx0dmFsdWVpZ25vcmUgXG4gICAgICovXG4gICAgcHVibGljIGludGVydmFsOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBgaW50ZXJ2YWxUeXBlYCBwcm9wZXJ0eSBkZWZpbmVzIGhvdyB0aGUgaW50ZXJ2YWxzIG9uIGEgZGF0ZS10aW1lIGF4aXMgYXJlIGNhbGN1bGF0ZWQgYW5kIGRpc3BsYXllZC4gXG4gICAgICogQXZhaWxhYmxlIG9wdGlvbnMgYXJlOiBcbiAgICAgKiAqIEF1dG86IEF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lcyB0aGUgaW50ZXJ2YWwgdHlwZSBiYXNlZCBvbiB0aGUgZGF0YSBhbmQgY2hhcnQgc2V0dGluZ3MuIFxuICAgICAqICogWWVhcnM6IFNldHMgdGhlIGludGVydmFsIG9mIHRoZSBheGlzIGluIHllYXJzLiBcbiAgICAgKiAqIE1vbnRoczogU2V0cyB0aGUgaW50ZXJ2YWwgb2YgdGhlIGF4aXMgaW4gbW9udGhzLiBcbiAgICAgKiAqIERheXM6IFNldHMgdGhlIGludGVydmFsIG9mIHRoZSBheGlzIGluIGRheXMuIFxuICAgICAqICogSG91cnM6IFNldHMgdGhlIGludGVydmFsIG9mIHRoZSBheGlzIGluIGhvdXJzLiBcbiAgICAgKiAqIE1pbnV0ZXM6IFNldHMgdGhlIGludGVydmFsIG9mIHRoZSBheGlzIGluIG1pbnV0ZXMuXG4gICAgICogQGRlZmF1bHQgJ0F1dG8nXG4gICAgICovXG4gICAgcHVibGljIGludGVydmFsVHlwZTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgZGF0YSBwb2ludHMgYXJlIHJlbmRlcmVkIGJhc2VkIG9uIHRoZWlyIGluZGV4LlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcHVibGljIGlzSW5kZXhlZDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGF4aXMgd2lsbCBiZSByZW5kZXJlZCBpbiBhbiBpbnZlcnNlZCBtYW5uZXIuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNJbnZlcnNlZDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBVc2VkIHRvIGZvcm1hdCB0aGUgYXhpcyBsYWJlbC4gVGhpcyBwcm9wZXJ0eSBhY2NlcHRzIGdsb2JhbCBzdHJpbmcgZm9ybWF0cyBzdWNoIGFzIGBDYCwgYG4xYCwgYFBgLCBldGMuIFxuICAgICAqIEl0IGFsc28gYWNjZXB0cyBwbGFjZWhvbGRlcnMgbGlrZSBge3ZhbHVlfcKwQ2AsIHdoZXJlIGB7dmFsdWV9YCByZXByZXNlbnRzIHRoZSBheGlzIGxhYmVsIChlLmcuLCAyMMKwQykuXG4gICAgICogQGRlZmF1bHQgJydcbiAgICAgKi9cbiAgICBwdWJsaWMgbGFiZWxGb3JtYXQ6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBhY3Rpb24gdG8gdGFrZSB3aGVuIGF4aXMgbGFiZWxzIGludGVyc2VjdCB3aXRoIGVhY2ggb3RoZXIuIFxuICAgICAqIFRoZSBhdmFpbGFibGUgb3B0aW9ucyBhcmU6IFxuICAgICAqICogTm9uZTogU2hvd3MgYWxsIGxhYmVscyB3aXRob3V0IGFueSBtb2RpZmljYXRpb24uIFxuICAgICAqICogSGlkZTogSGlkZXMgdGhlIGxhYmVsIGlmIGl0IGludGVyc2VjdHMgd2l0aCBhbm90aGVyIGxhYmVsLiBcbiAgICAgKiAqIFRyaW06IFRyaW1zIHRoZSBsYWJlbCB0ZXh0IHRvIGZpdCB3aXRoaW4gdGhlIGF2YWlsYWJsZSBzcGFjZS4gXG4gICAgICogKiBXcmFwOiBXcmFwcyB0aGUgbGFiZWwgdGV4dCB0byBmaXQgd2l0aGluIHRoZSBhdmFpbGFibGUgc3BhY2UuIFxuICAgICAqICogTXVsdGlwbGVSb3dzOiBEaXNwbGF5cyB0aGUgbGFiZWwgdGV4dCBpbiBtdWx0aXBsZSByb3dzIHRvIGF2b2lkIGludGVyc2VjdGlvbi4gXG4gICAgICogKiBSb3RhdGU0NTogUm90YXRlcyB0aGUgbGFiZWwgdGV4dCBieSA0NSBkZWdyZWVzIHRvIGF2b2lkIGludGVyc2VjdGlvbi4gXG4gICAgICogKiBSb3RhdGU5MDogUm90YXRlcyB0aGUgbGFiZWwgdGV4dCBieSA5MCBkZWdyZWVzIHRvIGF2b2lkIGludGVyc2VjdGlvbi5cbiAgICAgKiBAZGVmYXVsdCBUcmltXG4gICAgICovXG4gICAgcHVibGljIGxhYmVsSW50ZXJzZWN0QWN0aW9uOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBgbGFiZWxQYWRkaW5nYCBwcm9wZXJ0eSBhZGp1c3RzIHRoZSBkaXN0YW5jZSB0byBlbnN1cmUgYSBjbGVhciBzcGFjZSBiZXR3ZWVuIHRoZSBheGlzIGxhYmVscyBhbmQgdGhlIGF4aXMgbGluZS5cbiAgICAgKiBAZGVmYXVsdCA1XG4gICAgICovXG4gICAgcHVibGljIGxhYmVsUGFkZGluZzogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGUgYGxhYmVsUGxhY2VtZW50YCBwcm9wZXJ0eSBjb250cm9scyB3aGVyZSB0aGUgY2F0ZWdvcnkgYXhpcyBsYWJlbHMgYXJlIHJlbmRlcmVkIGluIHJlbGF0aW9uIHRvIHRoZSBheGlzIHRpY2tzLiBcbiAgICAgKiBBdmFpbGFibGUgb3B0aW9ucyBhcmU6IFxuICAgICAqICogQmV0d2VlblRpY2tzOiBSZW5kZXJzIHRoZSBsYWJlbCBiZXR3ZWVuIHRoZSBheGlzIHRpY2tzLiBcbiAgICAgKiAqIE9uVGlja3M6IFJlbmRlcnMgdGhlIGxhYmVsIGRpcmVjdGx5IG9uIHRoZSBheGlzIHRpY2tzLlxuICAgICAqIEBkZWZhdWx0ICdCZXR3ZWVuVGlja3MnXG4gICAgICovXG4gICAgcHVibGljIGxhYmVsUGxhY2VtZW50OiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBgbGFiZWxQb3NpdGlvbmAgcHJvcGVydHkgZGV0ZXJtaW5lcyB3aGVyZSB0aGUgYXhpcyBsYWJlbHMgYXJlIHJlbmRlcmVkIGluIHJlbGF0aW9uIHRvIHRoZSBheGlzIGxpbmUuIFxuICAgICAqIEF2YWlsYWJsZSBvcHRpb25zIGFyZTogXG4gICAgICogKiBJbnNpZGU6IFJlbmRlcnMgdGhlIGxhYmVscyBpbnNpZGUgdGhlIGF4aXMgbGluZS4gXG4gICAgICogKiBPdXRzaWRlOiBSZW5kZXJzIHRoZSBsYWJlbHMgb3V0c2lkZSB0aGUgYXhpcyBsaW5lLlxuICAgICAqIEBkZWZhdWx0ICdPdXRzaWRlJ1xuICAgICAqL1xuICAgIHB1YmxpYyBsYWJlbFBvc2l0aW9uOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBhbmdsZSB0byB3aGljaCB0aGUgYXhpcyBsYWJlbCBnZXRzIHJvdGF0ZWQuXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHB1YmxpYyBsYWJlbFJvdGF0aW9uOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoaXMgcHJvcGVydHkgYWxsb3dzIGRlZmluaW5nIHZhcmlvdXMgZm9udCBzZXR0aW5ncyB0byBjb250cm9sIGhvdyB0aGUgbGFiZWxzIGFyZSBkaXNwbGF5ZWQgb24gdGhlIGF4aXMuXG4gICAgICovXG4gICAgcHVibGljIGxhYmVsU3R5bGU6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSB0ZW1wbGF0ZSB1c2VkIHRvIHJlbmRlciBheGlzIGxhYmVscywgYWxsb3dpbmcgZm9yIGN1c3RvbWl6ZWQgbGFiZWxzIHdpdGggdGV4dCwgaW1hZ2VzLCBvciBvdGhlciBVSSBlbGVtZW50cy4gXG4gICAgICogVGhlIHRlbXBsYXRlIGlzIHByb3ZpZGVkIGFzIGEgc3RyaW5nIHdpdGggcGxhY2Vob2xkZXJzIGZvciBpbnRlcnBvbGF0aW9uLiBVc2UgYCR7bGFiZWx9YCB0byBpbnNlcnQgdGhlIGF4aXMgbGFiZWwgYW5kIGAke3ZhbHVlfWAgZm9yIHRoZSBheGlzIGxhYmVsIHZhbHVlLiBcbiAgICAgKiBGb3Igc2VjdXJpdHksIHN0cmluZyB0ZW1wbGF0ZXMgdXNlIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIGluIFJlYWN04oCUZW5zdXJlIGlucHV0IGlzIHRydXN0ZWQgdG8gYXZvaWQgWFNTIHZ1bG5lcmFiaWxpdGllcy4gXG4gICAgICogSWYgbnVsbCBvciB1bmRlZmluZWQsIHRoZSBheGlzIHdpbGwgcmVuZGVyIGRlZmF1bHQgbGFiZWxzLiBcbiAgICAgKiBDb21wYXRpYmxlIHdpdGggYm90aCBjYXRlZ29yaWNhbCBhbmQgbnVtZXJpY2FsIGF4ZXMuXG4gICAgICogQGV4YW1wbGUgYGBgaHRtbFxuPGRpdiBpZD0nQ2hhcnQnPjwvZGl2PlxuYGBgXG5gYGB0eXBlc2NyaXB0XG5sZXQgY2hhcnQ6IENoYXJ0ID0gbmV3IENoYXJ0KHtcbi4uLlxucHJpbWFyeVhBeGlzOiB7XG5sYWJlbFRlbXBsYXRlOiAnPGRpdj5Db3VudHJ5OiAke2xhYmVsfTwvZGl2Pidcbn1cbi4uLlxufSk7XG5jaGFydC5hcHBlbmRUbygnI0NoYXJ0Jyk7XG5gYGBcblxuICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgKi9cbiAgICBwdWJsaWMgbGFiZWxUZW1wbGF0ZTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBEZXRlcm1pbmVzIHRoZSBhbGlnbm1lbnQgb2YgbGFiZWxzIHdoZW4gYSBsaW5lIGJyZWFrIG9jY3VycyBpbiB0aGUgYXhpcyBsYWJlbHMuXG4gICAgICogQGRlZmF1bHQgJ0NlbnRlcidcbiAgICAgKi9cbiAgICBwdWJsaWMgbGluZUJyZWFrQWxpZ25tZW50OiBhbnk7XG4gICAgLyoqIFxuICAgICAqIE9wdGlvbnMgZm9yIGN1c3RvbWl6aW5nIHRoZSBheGlzIGxpbmVzLlxuICAgICAqL1xuICAgIHB1YmxpYyBsaW5lU3R5bGU6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBiYXNlIHZhbHVlIGZvciBhIGxvZ2FyaXRobWljIGF4aXMuIFxuICAgICAqID4gTm90ZSB0aGF0IGB2YWx1ZVR5cGVgIG11c3QgYmUgc2V0IHRvIGBMb2dhcml0aG1pY2AgZm9yIHRoaXMgZmVhdHVyZSB0byB3b3JrLlxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgcHVibGljIGxvZ0Jhc2U6IGFueTtcbiAgICAvKiogXG4gICAgICogT3B0aW9ucyBmb3IgY3VzdG9taXppbmcgbWFqb3IgZ3JpZCBsaW5lcyBvbiB0aGUgYXhpcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWFqb3JHcmlkTGluZXM6IGFueTtcbiAgICAvKiogXG4gICAgICogT3B0aW9ucyBmb3IgY3VzdG9taXppbmcgbWFqb3IgdGljayBsaW5lcyBvbiB0aGUgYXhpcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWFqb3JUaWNrTGluZXM6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBheGlzIHJhbmdlLCB3aGljaCBzZXRzIHRoZSB1cHBlciBib3VuZCBvZiB0aGUgYXhpcyBhbmQgZGVmaW5lcyB0aGUgbGFyZ2VzdCB2YWx1ZSBkaXNwbGF5ZWQgb24gdGhlIGNoYXJ0LCBoZWxwaW5nIHRvIGNvbnRyb2wgdGhlIHZpc2libGUgcmFuZ2Ugb2YgZGF0YS5cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgcHVibGljIG1heGltdW06IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBtYXhpbXVtIHdpZHRoIG9mIGFuIGF4aXMgbGFiZWwuXG4gICAgICogQGRlZmF1bHQgMzQuXG4gICAgICovXG4gICAgcHVibGljIG1heGltdW1MYWJlbFdpZHRoOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgbGFiZWxzIHBlciAxMDAgcGl4ZWxzIHJlbGF0aXZlIHRvIHRoZSBheGlzIGxlbmd0aC5cbiAgICAgKiBAZGVmYXVsdCAzXG4gICAgICovXG4gICAgcHVibGljIG1heGltdW1MYWJlbHM6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSBheGlzIHJhbmdlLCB3aGljaCBzZXRzIHRoZSBsb3dlciBib3VuZCBvZiB0aGUgYXhpcyBhbmQgZGVmaW5lcyB0aGUgc21hbGxlc3QgdmFsdWUgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBvbiB0aGUgY2hhcnQgdG8gY29udHJvbCB0aGUgdmlzaWJsZSByYW5nZSBvZiBkYXRhLlxuICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgKi9cbiAgICBwdWJsaWMgbWluaW11bTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBPcHRpb25zIGZvciBjdXN0b21pemluZyBtaW5vciBncmlkIGxpbmVzIG9uIHRoZSBheGlzLlxuICAgICAqL1xuICAgIHB1YmxpYyBtaW5vckdyaWRMaW5lczogYW55O1xuICAgIC8qKiBcbiAgICAgKiBPcHRpb25zIGZvciBjdXN0b21pemluZyBtaW5vciB0aWNrIGxpbmVzIG9uIHRoZSBheGlzLlxuICAgICAqL1xuICAgIHB1YmxpYyBtaW5vclRpY2tMaW5lczogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBtaW5vciB0aWNrcyBwZXIgaW50ZXJ2YWwuXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHB1YmxpYyBtaW5vclRpY2tzUGVySW50ZXJ2YWw6IGFueTtcbiAgICAvKiogXG4gICAgICogTXVsdGktbGV2ZWwgbGFiZWxzIGFyZSB1c2VkIHRvIGRpc3BsYXkgaGllcmFyY2hpY2FsIG9yIGdyb3VwZWQgbGFiZWxzIG9uIHRoZSBheGlzLCBhbGxvd2luZyBmb3IgYSBtb3JlIGRldGFpbGVkIGFuZCBzdHJ1Y3R1cmVkIGRhdGEgcmVwcmVzZW50YXRpb24uXG4gICAgICovXG4gICAgcHVibGljIG11bHRpTGV2ZWxMYWJlbHM6IGFueTtcbiAgICAvKiogXG4gICAgICogQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgYW4gYXhpcy4gVG8gYXNzb2NpYXRlIGFuIGF4aXMgd2l0aCBhIHNlcmllcywgc2V0IHRoaXMgbmFtZSB0byB0aGUgYHhBeGlzTmFtZWAgb3IgYHlBeGlzTmFtZWAgcHJvcGVydGllcyBvZiB0aGUgc2VyaWVzLlxuICAgICAqIEBkZWZhdWx0ICcnXG4gICAgICovXG4gICAgcHVibGljIG5hbWU6IGFueTtcbiAgICAvKiogXG4gICAgICogSWYgc2V0IHRvIHRydWUsIHRoZSBheGlzIHdpbGwgcmVuZGVyIG9uIHRoZSBvcHBvc2l0ZSBzaWRlIG9mIGl0cyBkZWZhdWx0IHBvc2l0aW9uLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcHVibGljIG9wcG9zZWRQb3NpdGlvbjogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgd2hldGhlciBheGlzIGVsZW1lbnRzLCBzdWNoIGFzIGF4aXMgbGFiZWxzIGFuZCB0aGUgYXhpcyB0aXRsZSwgc2hvdWxkIGJlIGNyb3NzZWQgYnkgdGhlIGF4aXMgbGluZS5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgcHVibGljIHBsYWNlTmV4dFRvQXhpc0xpbmU6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBwYWRkaW5nIG9uIHRoZSB0b3AsIGJvdHRvbSwgbGVmdCBhbmQgcmlnaHQgc2lkZXMgb2YgdGhlIGNoYXJ0IGFyZWEsIGluIHBpeGVscy5cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgcHVibGljIHBsb3RPZmZzZXQ6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBib3R0b20gcGFkZGluZyBmb3IgdGhlIGNoYXJ0IGFyZWEsIGluIHBpeGVscy5cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgcHVibGljIHBsb3RPZmZzZXRCb3R0b206IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBsZWZ0IHBhZGRpbmcgZm9yIHRoZSBjaGFydCBhcmVhLCBpbiBwaXhlbHMuXG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqL1xuICAgIHB1YmxpYyBwbG90T2Zmc2V0TGVmdDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIHJpZ2h0IHBhZGRpbmcgZm9yIHRoZSBjaGFydCBhcmVhLCBpbiBwaXhlbHMuXG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqL1xuICAgIHB1YmxpYyBwbG90T2Zmc2V0UmlnaHQ6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSB0b3AgcGFkZGluZyBmb3IgdGhlIGNoYXJ0IGFyZWEsIGluIHBpeGVscy5cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgcHVibGljIHBsb3RPZmZzZXRUb3A6IGFueTtcbiAgICAvKiogXG4gICAgICogVGhlIGByYW5nZVBhZGRpbmdgIHByb3BlcnR5IGRldGVybWluZXMgaG93IHBhZGRpbmcgaXMgYXBwbGllZCB0byB0aGUgYXhpcyByYW5nZSwgYWZmZWN0aW5nIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBjaGFydCBieSBhZGp1c3RpbmcgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIG9mIHRoZSBheGlzLiBcbiAgICAgKiBBdmFpbGFibGUgb3B0aW9ucyBhcmU6IFxuICAgICAqICogTm9uZTogTm8gcGFkZGluZyBpcyBhcHBsaWVkIHRvIHRoZSBheGlzLiBcbiAgICAgKiAqIE5vcm1hbDogUGFkZGluZyBpcyBhcHBsaWVkIGJhc2VkIG9uIHRoZSByYW5nZSBjYWxjdWxhdGlvbi4gXG4gICAgICogKiBBZGRpdGlvbmFsOiBUaGUgaW50ZXJ2YWwgb2YgdGhlIGF4aXMgaXMgYWRkZWQgYXMgcGFkZGluZyB0byBib3RoIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBvZiB0aGUgcmFuZ2UuIFxuICAgICAqICogUm91bmQ6IFRoZSBheGlzIHJhbmdlIGlzIHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgcG9zc2libGUgdmFsdWUgdGhhdCBpcyBkaXZpc2libGUgYnkgdGhlIGludGVydmFsLlxuICAgICAqIEBkZWZhdWx0ICdBdXRvJ1xuICAgICAqL1xuICAgIHB1YmxpYyByYW5nZVBhZGRpbmc6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBpbmRleCBvZiB0aGUgcm93IHdoZXJlIHRoZSBheGlzIGlzIGFzc29jaWF0ZWQgd2hlbiB0aGUgY2hhcnQgYXJlYSBpcyBkaXZpZGVkIGludG8gbXVsdGlwbGUgcGxvdCBhcmVhcyB1c2luZyBgcm93c2AuIFxuICAgICAqIFxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBwdWJsaWMgcm93SW5kZXg6IGFueTtcbiAgICAvKiogXG4gICAgICogQ29uZmlndXJlcyB0aGUgc2Nyb2xsYmFyIHdpdGggb3B0aW9ucyBmb3IgY3VzdG9taXphdGlvbiwgaW5jbHVkaW5nIGFwcGVhcmFuY2UsIGJlaGF2aW9yLCBhbmQgbGF6eSBsb2FkaW5nIHNldHRpbmdzLlxuICAgICAqL1xuICAgIHB1YmxpYyBzY3JvbGxiYXJTZXR0aW5nczogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIHNrZWxldG9uIGZvcm1hdCB1c2VkIGZvciBwcm9jZXNzaW5nIGRhdGUtdGltZSB2YWx1ZXMuXG4gICAgICogQGRlZmF1bHQgJydcbiAgICAgKi9cbiAgICBwdWJsaWMgc2tlbGV0b246IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBmb3JtYXQgdHlwZSB0byBiZSB1c2VkIGluIGRhdGUtdGltZSBmb3JtYXR0aW5nLlxuICAgICAqIEBkZWZhdWx0ICdEYXRlVGltZSdcbiAgICAgKiBAZGVwcmVjYXRlZCBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2tlbGV0b25UeXBlOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGBjb2x1bW5zYCBvciBgcm93c2AgdGhhdCBhbiBheGlzIHNwYW5zIGhvcml6b250YWxseSBvciB2ZXJ0aWNhbGx5LlxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICBwdWJsaWMgc3BhbjogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIHN0YXJ0IGFuZ2xlIGZvciB0aGUgc2VyaWVzIGluIGEgcG9sYXIgb3IgcmFkYXIgY2hhcnQsIG1lYXN1cmVkIGluIGRlZ3JlZXMgZnJvbSB0aGUgaG9yaXpvbnRhbCBheGlzLCBkZXRlcm1pbmluZyB0aGUgaW5pdGlhbCBhbmdsZSBmcm9tIHdoaWNoIHRoZSBzZXJpZXMgYmVnaW5zLlxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhcnRBbmdsZTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGF4aXMgc3RhcnRzIGZyb20gemVyby4gXG4gICAgICogSWYgc2V0IHRvIGZhbHNlLCB0aGUgYXhpcyBzdGFydHMgZnJvbSB0aGUgbWluaW11bSB2YWx1ZSBvZiB0aGUgZGF0YS5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgcHVibGljIHN0YXJ0RnJvbVplcm86IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBjb2xsZWN0aW9uIG9mIHN0cmlwIGxpbmVzIGZvciB0aGUgYXhpcywgd2hpY2ggYXJlIHZpc3VhbCBlbGVtZW50cyB1c2VkIHRvIG1hcmsgb3IgaGlnaGxpZ2h0IHNwZWNpZmljIHJhbmdlcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RyaXBMaW5lczogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGUgYHRhYkluZGV4YCB2YWx1ZSBmb3IgdGhlIGF4aXMsIGRldGVybWluaW5nIGl0cyBwb3NpdGlvbiBpbiB0aGUgdGFiIG9yZGVyLlxuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBwdWJsaWMgdGFiSW5kZXg6IGFueTtcbiAgICAvKiogXG4gICAgICogVGhlIGB0aWNrUG9zaXRpb25gIHByb3BlcnR5IGRldGVybWluZXMgd2hlcmUgdGhlIGF4aXMgdGlja3MgYXJlIHJlbmRlcmVkIGluIHJlbGF0aW9uIHRvIHRoZSBheGlzIGxpbmUuIFxuICAgICAqIEF2YWlsYWJsZSBvcHRpb25zIGFyZTogXG4gICAgICogKiBJbnNpZGU6IFJlbmRlcnMgdGhlIHRpY2tzIGluc2lkZSB0aGUgYXhpcyBsaW5lLiBcbiAgICAgKiAqIE91dHNpZGU6IFJlbmRlcnMgdGhlIHRpY2tzIG91dHNpZGUgdGhlIGF4aXMgbGluZS5cbiAgICAgKiBAZGVmYXVsdCAnT3V0c2lkZSdcbiAgICAgKi9cbiAgICBwdWJsaWMgdGlja1Bvc2l0aW9uOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgdGl0bGUgb2YgYW4gYXhpcywgZGlzcGxheWVkIGFsb25nIHRoZSBheGlzIHRvIHByb3ZpZGUgY29udGV4dCBhYm91dCB0aGUgcmVwcmVzZW50ZWQgZGF0YS5cbiAgICAgKiBAZGVmYXVsdCAnJ1xuICAgICAqL1xuICAgIHB1YmxpYyB0aXRsZTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIHBhZGRpbmcgYmV0d2VlbiB0aGUgYXhpcyB0aXRsZSBhbmQgdGhlIGF4aXMgbGFiZWxzLlxuICAgICAqIEBkZWZhdWx0IDVcbiAgICAgKi9cbiAgICBwdWJsaWMgdGl0bGVQYWRkaW5nOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIERlZmluZXMgYW4gYW5nbGUgZm9yIHJvdGF0aW5nIHRoZSBheGlzIHRpdGxlLiBCeSBkZWZhdWx0LCB0aGUgYW5nbGUgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgcG9zaXRpb24gYW5kIG9yaWVudGF0aW9uIG9mIHRoZSBheGlzLlxuICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgKi9cbiAgICBwdWJsaWMgdGl0bGVSb3RhdGlvbjogYW55O1xuICAgIC8qKiBcbiAgICAgKiBPcHRpb25zIGZvciBjdXN0b21pemluZyB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgYXhpcyB0aXRsZSwgaW5jbHVkaW5nIGZvbnQgZmFtaWx5LCBzaXplLCBzdHlsZSwgd2VpZ2h0LCBhbmQgY29sb3IuXG4gICAgICovXG4gICAgcHVibGljIHRpdGxlU3R5bGU6IGFueTtcbiAgICAvKiogXG4gICAgICogVGhlIGB2YWx1ZVR5cGVgIHByb3BlcnR5IGRlZmluZXMgdGhlIHR5cGUgb2YgZGF0YSB0aGF0IHRoZSBheGlzIGNhbiBtYW5hZ2UsIGVuc3VyaW5nIGNvcnJlY3QgcmVuZGVyaW5nIGJhc2VkIG9uIHRoZSBkYXRhIHR5cGUuIFRoaXMgcHJvcGVydHkgc3VwcG9ydHMgbXVsdGlwbGUgZGF0YSB0eXBlcywgZWFjaCBzdWl0ZWQgZm9yIGRpZmZlcmVudCBraW5kcyBvZiBkYXRhIHZpc3VhbGl6YXRpb24uIFxuICAgICAqIEF2YWlsYWJsZSBvcHRpb25zIGluY2x1ZGU6IFxuICAgICAqICogRG91YmxlOiBVc2VkIGZvciByZW5kZXJpbmcgYSBudW1lcmljIGF4aXMgdG8gYWNjb21tb2RhdGUgbnVtZXJpYyBkYXRhLiBcbiAgICAgKiAqIERhdGVUaW1lOiBVdGlsaXplZCBmb3IgcmVuZGVyaW5nIGEgZGF0ZS10aW1lIGF4aXMgdG8gbWFuYWdlIGRhdGUtdGltZSBkYXRhLiBcbiAgICAgKiAqIENhdGVnb3J5OiBFbXBsb3llZCBmb3IgcmVuZGVyaW5nIGEgY2F0ZWdvcnkgYXhpcyB0byBtYW5hZ2UgY2F0ZWdvcmljYWwgZGF0YS4gXG4gICAgICogKiBMb2dhcml0aG1pYzogQXBwbGllZCBmb3IgcmVuZGVyaW5nIGEgbG9nYXJpdGhtaWMgYXhpcyB0byBoYW5kbGUgYSB3aWRlIHJhbmdlIG9mIHZhbHVlcy4gXG4gICAgICogKiBEYXRlVGltZUNhdGVnb3J5OiBVc2VkIHRvIHJlbmRlciBhIGRhdGUtdGltZSBjYXRlZ29yeSBheGlzIGZvciBtYW5hZ2luZyBidXNpbmVzcyBkYXlzLlxuICAgICAqIEBkZWZhdWx0ICdEb3VibGUnXG4gICAgICogQGJsYXpvcnR5cGUgU3luY2Z1c2lvbi5FSjIuQmxhem9yLkNoYXJ0cy5WYWx1ZVR5cGVcbiAgICAgKiBAaXNlbnVtZXJhdGlvbiB0cnVlXG4gICAgICovXG4gICAgcHVibGljIHZhbHVlVHlwZTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgYXhpcyBsYWJlbHMgd2lsbCBiZSB2aXNpYmxlIGluIHRoZSBjaGFydC4gQnkgZGVmYXVsdCwgYXhpcyBsYWJlbHMgYXJlIGVuYWJsZWQuXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHB1YmxpYyB2aXNpYmxlOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBheGlzIGlzIHNjYWxlZCBieSB0aGlzIGZhY3Rvci4gV2hlbiBgem9vbUZhY3RvcmAgaXMgMC41LCB0aGUgY2hhcnQgaXMgc2NhbGVkIGJ5IDIwMCUgYWxvbmcgdGhpcyBheGlzLiBcbiAgICAgKiA+IE5vdGUgdGhlIHZhbHVlIHJhbmdlcyBmcm9tIDAgdG8gMS5cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgcHVibGljIHpvb21GYWN0b3I6IGFueTtcbiAgICAvKiogXG4gICAgICogU2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIHpvb21lZCBheGlzIG9uIHRoZSBjaGFydCwgd2l0aCB0aGUgYHpvb21Qb3NpdGlvbmAgcHJvcGVydHkgc3BlY2lmeWluZyB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSB6b29tZWQgcmFuZ2UsIGZyb20gMCAoc3RhcnQpIHRvIDEgKGVuZCkuXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHB1YmxpYyB6b29tUG9zaXRpb246IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjpWaWV3Q29udGFpbmVyUmVmKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHNldFZhbHVlKCdjdXJyZW50SW5zdGFuY2UnLCB0aGlzLCB0aGlzLnZpZXdDb250YWluZXJSZWYpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRXZlbnRzKG91dHB1dHMpO1xuICAgICAgICB0aGlzLmRpcmVjdGl2ZVByb3BMaXN0ID0gaW5wdXQ7XG4gICAgfVxufVxuXG4vKipcbiAqIEF4aXMgQXJyYXkgRGlyZWN0aXZlXG4gKiBAcHJpdmF0ZVxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ2Vqcy1jaGFydD5lLWF4ZXMnLFxuICAgIHF1ZXJpZXM6IHtcbiAgICAgICAgY2hpbGRyZW46IG5ldyBDb250ZW50Q2hpbGRyZW4oQXhpc0RpcmVjdGl2ZSlcbiAgICB9LFxufSlcbmV4cG9ydCBjbGFzcyBBeGVzRGlyZWN0aXZlIGV4dGVuZHMgQXJyYXlCYXNlPEF4ZXNEaXJlY3RpdmU+IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2F4ZXMnKTtcbiAgICB9XG59Il19
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXhlcy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2hhcnQvYXhlcy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBb0IsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVoRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7QUFFekUsSUFBSSxLQUFLLEdBQWEsQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSw2QkFBNkIsRUFBRSwwQkFBMEIsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDdmpDLElBQUksT0FBTyxHQUFhLEVBQUUsQ0FBQztBQUMzQjs7Ozs7R0FLRztBQVVILE1BQU0sT0FBTyxhQUFjLFNBQVEsV0FBMEI7SUF1WXpELFlBQW9CLGdCQUFpQztRQUNqRCxLQUFLLEVBQUUsQ0FBQztRQURRLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFsWTlDLFNBQUksR0FBYSxDQUFDLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBb1l2RCxRQUFRLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUNuQyxDQUFDOzswR0E1WVEsYUFBYTs4RkFBYixhQUFhLDRpRUFKZ0IsbUJBQW1CLHdGQUNiLHlCQUF5QjsyRkFHNUQsYUFBYTtrQkFUekIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsTUFBTSxFQUFFLEtBQUs7b0JBQ2IsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLE9BQU8sRUFBRTt3QkFDTCxlQUFlLEVBQUUsSUFBSSxZQUFZLENBQUMsbUJBQW1CLENBQUM7d0JBQ3RELHFCQUFxQixFQUFFLElBQUksWUFBWSxDQUFDLHlCQUF5QixDQUFDO3FCQUNyRTtpQkFDSjs7QUFnWkQ7OztHQUdHO0FBT0gsTUFBTSxPQUFPLGFBQWMsU0FBUSxTQUF3QjtJQUN2RDtRQUNJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQixDQUFDOzswR0FIUSxhQUFhOzhGQUFiLGFBQWEsaUZBSFksYUFBYTsyRkFHdEMsYUFBYTtrQkFOekIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixPQUFPLEVBQUU7d0JBQ0wsUUFBUSxFQUFFLElBQUksZUFBZSxDQUFDLGFBQWEsQ0FBQztxQkFDL0M7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIFZpZXdDb250YWluZXJSZWYsIENvbnRlbnRDaGlsZHJlbiwgQ29udGVudENoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wbGV4QmFzZSwgQXJyYXlCYXNlLCBzZXRWYWx1ZSB9IGZyb20gJ0BzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLWJhc2UnO1xuXG5pbXBvcnQgeyBTdHJpcExpbmVzRGlyZWN0aXZlIH0gZnJvbSAnLi9zdHJpcGxpbmVzLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBNdWx0aUxldmVsTGFiZWxzRGlyZWN0aXZlIH0gZnJvbSAnLi9tdWx0aWxldmVsbGFiZWxzLmRpcmVjdGl2ZSc7XG5cbmxldCBpbnB1dDogc3RyaW5nW10gPSBbJ2JvcmRlcicsICdjb2VmZmljaWVudCcsICdjb2x1bW5JbmRleCcsICdjcm9zc2VzQXQnLCAnY3Jvc3Nlc0luQXhpcycsICdjcm9zc2hhaXJUb29sdGlwJywgJ2Rlc2NyaXB0aW9uJywgJ2Rlc2lyZWRJbnRlcnZhbHMnLCAnZWRnZUxhYmVsUGxhY2VtZW50JywgJ2VuYWJsZUF1dG9JbnRlcnZhbE9uWm9vbWluZycsICdlbmFibGVTY3JvbGxiYXJPblpvb21pbmcnLCAnZW5hYmxlVHJpbScsICdlbmFibGVXcmFwJywgJ2ludGVydmFsJywgJ2ludGVydmFsVHlwZScsICdpc0luZGV4ZWQnLCAnaXNJbnZlcnNlZCcsICdsYWJlbEZvcm1hdCcsICdsYWJlbEludGVyc2VjdEFjdGlvbicsICdsYWJlbFBhZGRpbmcnLCAnbGFiZWxQbGFjZW1lbnQnLCAnbGFiZWxQb3NpdGlvbicsICdsYWJlbFJvdGF0aW9uJywgJ2xhYmVsU3R5bGUnLCAnbGFiZWxUZW1wbGF0ZScsICdsaW5lQnJlYWtBbGlnbm1lbnQnLCAnbGluZVN0eWxlJywgJ2xvZ0Jhc2UnLCAnbWFqb3JHcmlkTGluZXMnLCAnbWFqb3JUaWNrTGluZXMnLCAnbWF4aW11bScsICdtYXhpbXVtTGFiZWxXaWR0aCcsICdtYXhpbXVtTGFiZWxzJywgJ21pbmltdW0nLCAnbWlub3JHcmlkTGluZXMnLCAnbWlub3JUaWNrTGluZXMnLCAnbWlub3JUaWNrc1BlckludGVydmFsJywgJ211bHRpTGV2ZWxMYWJlbHMnLCAnbmFtZScsICdvcHBvc2VkUG9zaXRpb24nLCAncGxhY2VOZXh0VG9BeGlzTGluZScsICdwbG90T2Zmc2V0JywgJ3Bsb3RPZmZzZXRCb3R0b20nLCAncGxvdE9mZnNldExlZnQnLCAncGxvdE9mZnNldFJpZ2h0JywgJ3Bsb3RPZmZzZXRUb3AnLCAncmFuZ2VQYWRkaW5nJywgJ3Jvd0luZGV4JywgJ3Njcm9sbGJhclNldHRpbmdzJywgJ3NrZWxldG9uJywgJ3NrZWxldG9uVHlwZScsICdzcGFuJywgJ3N0YXJ0QW5nbGUnLCAnc3RhcnRGcm9tWmVybycsICdzdHJpcExpbmVzJywgJ3RhYkluZGV4JywgJ3RpY2tQb3NpdGlvbicsICd0aXRsZScsICd0aXRsZVBhZGRpbmcnLCAndGl0bGVSb3RhdGlvbicsICd0aXRsZVN0eWxlJywgJ3ZhbHVlVHlwZScsICd2aXNpYmxlJywgJ3pvb21GYWN0b3InLCAnem9vbVBvc2l0aW9uJ107XG5sZXQgb3V0cHV0czogc3RyaW5nW10gPSBbXTtcbi8qKlxuICogQXhpcyBEaXJlY3RpdmVcbiAqIGBgYGh0bWxcbiAqIDxlLWF4ZXM+PGUtYXhpcz48L2UtYXhpcz48L2UtYXhlcz5cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ2UtYXhlcz5lLWF4aXMnLFxuICAgIGlucHV0czogaW5wdXQsXG4gICAgb3V0cHV0czogb3V0cHV0cywgICAgXG4gICAgcXVlcmllczoge1xuICAgICAgICBjaGlsZFN0cmlwTGluZXM6IG5ldyBDb250ZW50Q2hpbGQoU3RyaXBMaW5lc0RpcmVjdGl2ZSksIFxuICAgICAgICBjaGlsZE11bHRpTGV2ZWxMYWJlbHM6IG5ldyBDb250ZW50Q2hpbGQoTXVsdGlMZXZlbExhYmVsc0RpcmVjdGl2ZSlcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEF4aXNEaXJlY3RpdmUgZXh0ZW5kcyBDb21wbGV4QmFzZTxBeGlzRGlyZWN0aXZlPiB7XG4gICAgcHVibGljIGRpcmVjdGl2ZVByb3BMaXN0OiBhbnk7XG5cdFxuICAgIHB1YmxpYyBjaGlsZFN0cmlwTGluZXM6IGFueTtcbiAgICBwdWJsaWMgY2hpbGRNdWx0aUxldmVsTGFiZWxzOiBhbnk7XG4gICAgcHVibGljIHRhZ3M6IHN0cmluZ1tdID0gWydzdHJpcExpbmVzJywgJ211bHRpTGV2ZWxMYWJlbHMnXTtcbiAgICAvKiogXG4gICAgICogQ29uZmlndXJlcyB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgYm9yZGVyIGFyb3VuZCBtdWx0aS1sZXZlbCBsYWJlbHMsIGluY2x1ZGluZyB0aGUgY29sb3IsIHdpZHRoLCBhbmQgdHlwZSBvZiB0aGUgYm9yZGVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBib3JkZXI6IGFueTtcbiAgICAvKiogXG4gICAgICogVGhlIGBjb2VmZmljaWVudGAgdmFsdWUgYWRqdXN0cyB0aGUgc2l6ZSBvZiB0aGUgcG9sYXIgcmFkYXIgY2hhcnQncyByYWRpdXMuIEEgaGlnaGVyIHZhbHVlIGluY3JlYXNlcyB0aGUgcmFkaXVzIHNpemUsIHdoaWxlIGEgc21hbGxlciB2YWx1ZSBkZWNyZWFzZXMgaXQuXG4gICAgICogQGRlZmF1bHQgMTAwXG4gICAgICovXG4gICAgcHVibGljIGNvZWZmaWNpZW50OiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgaW5kZXggb2YgdGhlIGNvbHVtbiB3aGVyZSB0aGUgYXhpcyBpcyBhc3NvY2lhdGVkIHdoZW4gdGhlIGNoYXJ0IGFyZWEgaXMgZGl2aWRlZCBpbnRvIG11bHRpcGxlIHBsb3QgYXJlYXMgdXNpbmcgYGNvbHVtbnNgLiBcbiAgICAgKiBcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgcHVibGljIGNvbHVtbkluZGV4OiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgdmFsdWUgYXQgd2hpY2ggdGhlIGF4aXMgbGluZSBpbnRlcnNlY3RzIHdpdGggdGhlIHZlcnRpY2FsIGF4aXMgb3IgdmljZSB2ZXJzYS5cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgcHVibGljIGNyb3NzZXNBdDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGF4aXMgd2l0aCB3aGljaCB0aGUgYXhpcyBsaW5lIHNob3VsZCBpbnRlcnNlY3QuXG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqL1xuICAgIHB1YmxpYyBjcm9zc2VzSW5BeGlzOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIE9wdGlvbnMgdG8gY3VzdG9taXplIHRoZSBhcHBlYXJhbmNlIGFuZCBiZWhhdmlvciBvZiB0aGUgY3Jvc3NoYWlyIHRvb2x0aXAgdGhhdCBhcHBlYXJzIHdoZW4gaG92ZXJpbmcgb3ZlciB0aGUgY2hhcnQuXG4gICAgICovXG4gICAgcHVibGljIGNyb3NzaGFpclRvb2x0aXA6IGFueTtcbiAgICAvKiogXG4gICAgICogQSBkZXNjcmlwdGlvbiBmb3IgdGhlIGF4aXMgdGhhdCBwcm92aWRlcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGl0cyBjb250ZW50IGZvciBzY3JlZW4gcmVhZGVycy5cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgcHVibGljIGRlc2NyaXB0aW9uOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBgZGVzaXJlZEludGVydmFsc2AgcHJvcGVydHkgYWxsb3dzIHRoZSBheGlzIHRvIGNhbGN1bGF0ZSBpbnRlcnZhbHMgdGhhdCBhcmUgcm91Z2hseSBlcXVhbCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciwgcHJvbW90aW5nIGEgbW9yZSByZWFkYWJsZSBhbmQgZXZlbmx5IHNwYWNlZCBheGlzLlxuICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgKiBAYXNwZGVmYXVsdHZhbHVlaWdub3JlIFxuICAgICAqL1xuICAgIHB1YmxpYyBkZXNpcmVkSW50ZXJ2YWxzOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBgZWRnZUxhYmVsUGxhY2VtZW50YCBwcm9wZXJ0eSBlbnN1cmVzIHRoYXQgbGFiZWxzIHBvc2l0aW9uZWQgYXQgdGhlIGVkZ2VzIG9mIHRoZSBheGlzIGRvIG5vdCBvdmVybGFwIHdpdGggdGhlIGF4aXMgYm91bmRhcmllcyBvciBvdGhlciBjaGFydCBlbGVtZW50cywgb2ZmZXJpbmcgc2V2ZXJhbCBvcHRpb25zIHRvIGltcHJvdmUgY2hhcnQgcmVhZGFiaWxpdHkgYnkgbWFuYWdpbmcgZWRnZSBsYWJlbHMgZWZmZWN0aXZlbHkuIFxuICAgICAqIEF2YWlsYWJsZSBvcHRpb25zIGFyZTogXG4gICAgICogKiBOb25lOiBObyBhY3Rpb24gd2lsbCBiZSBwZXJmb3JtZWQgb24gZWRnZSBsYWJlbHMuIFxuICAgICAqICogSGlkZTogRWRnZSBsYWJlbHMgd2lsbCBiZSBoaWRkZW4gdG8gcHJldmVudCBvdmVybGFwLiBcbiAgICAgKiAqIFNoaWZ0OiBFZGdlIGxhYmVscyB3aWxsIGJlIHNoaWZ0ZWQgdG8gZml0IHdpdGhpbiB0aGUgYXhpcyBib3VuZHMgd2l0aG91dCBvdmVybGFwcGluZy5cbiAgICAgKiBAZGVmYXVsdCAnU2hpZnQnXG4gICAgICovXG4gICAgcHVibGljIGVkZ2VMYWJlbFBsYWNlbWVudDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGF4aXMgaW50ZXJ2YWwgd2lsbCBiZSBjYWxjdWxhdGVkIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gdGhlIHpvb21lZCByYW5nZS5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgcHVibGljIGVuYWJsZUF1dG9JbnRlcnZhbE9uWm9vbWluZzogYW55O1xuICAgIC8qKiBcbiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgYSBzY3JvbGxiYXIgd2lsbCBhcHBlYXIgd2hpbGUgem9vbWluZyB0byBoZWxwIG5hdmlnYXRlIHRocm91Z2ggdGhlIHpvb21lZCBjb250ZW50LlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBwdWJsaWMgZW5hYmxlU2Nyb2xsYmFyT25ab29taW5nOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIElmIHNldCB0byB0cnVlLCBheGlzIGxhYmVscyB3aWxsIGJlIHRyaW1tZWQgYmFzZWQgb24gdGhlIGBtYXhpbXVtTGFiZWxXaWR0aGAuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBwdWJsaWMgZW5hYmxlVHJpbTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgYXhpcyBsYWJlbHMgc2hvdWxkIGJlIHdyYXBwZWQgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBgbWF4aW11bUxhYmVsV2lkdGhgLiBcbiAgICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAsIHRoZSBheGlzIGxhYmVscyB3aWxsIGF1dG9tYXRpY2FsbHkgd3JhcCB0byBmaXQgd2l0aGluIHRoZSBhdmFpbGFibGUgd2lkdGggZGVmaW5lZCBieSBgbWF4aW11bUxhYmVsV2lkdGhgLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcHVibGljIGVuYWJsZVdyYXA6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBpbnRlcnZhbCBmb3IgdGhlIGF4aXMuXG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqIEBhc3BkZWZhdWx0dmFsdWVpZ25vcmUgXG4gICAgICovXG4gICAgcHVibGljIGludGVydmFsOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBgaW50ZXJ2YWxUeXBlYCBwcm9wZXJ0eSBkZWZpbmVzIGhvdyB0aGUgaW50ZXJ2YWxzIG9uIGEgZGF0ZS10aW1lIGF4aXMgYXJlIGNhbGN1bGF0ZWQgYW5kIGRpc3BsYXllZC4gXG4gICAgICogQXZhaWxhYmxlIG9wdGlvbnMgYXJlOiBcbiAgICAgKiAqIEF1dG86IEF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lcyB0aGUgaW50ZXJ2YWwgdHlwZSBiYXNlZCBvbiB0aGUgZGF0YSBhbmQgY2hhcnQgc2V0dGluZ3MuIFxuICAgICAqICogWWVhcnM6IFNldHMgdGhlIGludGVydmFsIG9mIHRoZSBheGlzIGluIHllYXJzLiBcbiAgICAgKiAqIE1vbnRoczogU2V0cyB0aGUgaW50ZXJ2YWwgb2YgdGhlIGF4aXMgaW4gbW9udGhzLiBcbiAgICAgKiAqIERheXM6IFNldHMgdGhlIGludGVydmFsIG9mIHRoZSBheGlzIGluIGRheXMuIFxuICAgICAqICogSG91cnM6IFNldHMgdGhlIGludGVydmFsIG9mIHRoZSBheGlzIGluIGhvdXJzLiBcbiAgICAgKiAqIE1pbnV0ZXM6IFNldHMgdGhlIGludGVydmFsIG9mIHRoZSBheGlzIGluIG1pbnV0ZXMuXG4gICAgICogQGRlZmF1bHQgJ0F1dG8nXG4gICAgICovXG4gICAgcHVibGljIGludGVydmFsVHlwZTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgZGF0YSBwb2ludHMgYXJlIHJlbmRlcmVkIGJhc2VkIG9uIHRoZWlyIGluZGV4LlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcHVibGljIGlzSW5kZXhlZDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGF4aXMgd2lsbCBiZSByZW5kZXJlZCBpbiBhbiBpbnZlcnNlZCBtYW5uZXIuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNJbnZlcnNlZDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBVc2VkIHRvIGZvcm1hdCB0aGUgYXhpcyBsYWJlbC4gVGhpcyBwcm9wZXJ0eSBhY2NlcHRzIGdsb2JhbCBzdHJpbmcgZm9ybWF0cyBzdWNoIGFzIGBDYCwgYG4xYCwgYFBgLCBldGMuIFxuICAgICAqIEl0IGFsc28gYWNjZXB0cyBwbGFjZWhvbGRlcnMgbGlrZSBge3ZhbHVlfcKwQ2AsIHdoZXJlIGB7dmFsdWV9YCByZXByZXNlbnRzIHRoZSBheGlzIGxhYmVsIChlLmcuLCAyMMKwQykuXG4gICAgICogQGRlZmF1bHQgJydcbiAgICAgKi9cbiAgICBwdWJsaWMgbGFiZWxGb3JtYXQ6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBhY3Rpb24gdG8gdGFrZSB3aGVuIGF4aXMgbGFiZWxzIGludGVyc2VjdCB3aXRoIGVhY2ggb3RoZXIuIFxuICAgICAqIFRoZSBhdmFpbGFibGUgb3B0aW9ucyBhcmU6IFxuICAgICAqICogTm9uZTogU2hvd3MgYWxsIGxhYmVscyB3aXRob3V0IGFueSBtb2RpZmljYXRpb24uIFxuICAgICAqICogSGlkZTogSGlkZXMgdGhlIGxhYmVsIGlmIGl0IGludGVyc2VjdHMgd2l0aCBhbm90aGVyIGxhYmVsLiBcbiAgICAgKiAqIFRyaW06IFRyaW1zIHRoZSBsYWJlbCB0ZXh0IHRvIGZpdCB3aXRoaW4gdGhlIGF2YWlsYWJsZSBzcGFjZS4gXG4gICAgICogKiBXcmFwOiBXcmFwcyB0aGUgbGFiZWwgdGV4dCB0byBmaXQgd2l0aGluIHRoZSBhdmFpbGFibGUgc3BhY2UuIFxuICAgICAqICogTXVsdGlwbGVSb3dzOiBEaXNwbGF5cyB0aGUgbGFiZWwgdGV4dCBpbiBtdWx0aXBsZSByb3dzIHRvIGF2b2lkIGludGVyc2VjdGlvbi4gXG4gICAgICogKiBSb3RhdGU0NTogUm90YXRlcyB0aGUgbGFiZWwgdGV4dCBieSA0NSBkZWdyZWVzIHRvIGF2b2lkIGludGVyc2VjdGlvbi4gXG4gICAgICogKiBSb3RhdGU5MDogUm90YXRlcyB0aGUgbGFiZWwgdGV4dCBieSA5MCBkZWdyZWVzIHRvIGF2b2lkIGludGVyc2VjdGlvbi4gXG4gICAgICogKiBSb3RhdGU0NVdpdGhUcmltOiBUcmltIHRoZSBsYWJlbCBhbmQgcm90YXRlIGl0IHRvIDQ1IGRlZ3JlZXMgd2hlbiBpdCBpbnRlcnNlY3RzLiBcbiAgICAgKiAqIFJvdGF0ZTkwV2l0aFRyaW06IFRyaW0gdGhlIGxhYmVsIGFuZCByb3RhdGUgaXQgdG8gOTAgZGVncmVlcyB3aGVuIGl0IGludGVyc2VjdHMuXG4gICAgICogQGRlZmF1bHQgVHJpbVxuICAgICAqL1xuICAgIHB1YmxpYyBsYWJlbEludGVyc2VjdEFjdGlvbjogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGUgYGxhYmVsUGFkZGluZ2AgcHJvcGVydHkgYWRqdXN0cyB0aGUgZGlzdGFuY2UgdG8gZW5zdXJlIGEgY2xlYXIgc3BhY2UgYmV0d2VlbiB0aGUgYXhpcyBsYWJlbHMgYW5kIHRoZSBheGlzIGxpbmUuXG4gICAgICogQGRlZmF1bHQgNVxuICAgICAqL1xuICAgIHB1YmxpYyBsYWJlbFBhZGRpbmc6IGFueTtcbiAgICAvKiogXG4gICAgICogVGhlIGBsYWJlbFBsYWNlbWVudGAgcHJvcGVydHkgY29udHJvbHMgd2hlcmUgdGhlIGNhdGVnb3J5IGF4aXMgbGFiZWxzIGFyZSByZW5kZXJlZCBpbiByZWxhdGlvbiB0byB0aGUgYXhpcyB0aWNrcy4gXG4gICAgICogQXZhaWxhYmxlIG9wdGlvbnMgYXJlOiBcbiAgICAgKiAqIEJldHdlZW5UaWNrczogUmVuZGVycyB0aGUgbGFiZWwgYmV0d2VlbiB0aGUgYXhpcyB0aWNrcy4gXG4gICAgICogKiBPblRpY2tzOiBSZW5kZXJzIHRoZSBsYWJlbCBkaXJlY3RseSBvbiB0aGUgYXhpcyB0aWNrcy5cbiAgICAgKiBAZGVmYXVsdCAnQmV0d2VlblRpY2tzJ1xuICAgICAqL1xuICAgIHB1YmxpYyBsYWJlbFBsYWNlbWVudDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGUgYGxhYmVsUG9zaXRpb25gIHByb3BlcnR5IGRldGVybWluZXMgd2hlcmUgdGhlIGF4aXMgbGFiZWxzIGFyZSByZW5kZXJlZCBpbiByZWxhdGlvbiB0byB0aGUgYXhpcyBsaW5lLiBcbiAgICAgKiBBdmFpbGFibGUgb3B0aW9ucyBhcmU6IFxuICAgICAqICogSW5zaWRlOiBSZW5kZXJzIHRoZSBsYWJlbHMgaW5zaWRlIHRoZSBheGlzIGxpbmUuIFxuICAgICAqICogT3V0c2lkZTogUmVuZGVycyB0aGUgbGFiZWxzIG91dHNpZGUgdGhlIGF4aXMgbGluZS5cbiAgICAgKiBAZGVmYXVsdCAnT3V0c2lkZSdcbiAgICAgKi9cbiAgICBwdWJsaWMgbGFiZWxQb3NpdGlvbjogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGUgYW5nbGUgdG8gd2hpY2ggdGhlIGF4aXMgbGFiZWwgZ2V0cyByb3RhdGVkLlxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBwdWJsaWMgbGFiZWxSb3RhdGlvbjogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGlzIHByb3BlcnR5IGFsbG93cyBkZWZpbmluZyB2YXJpb3VzIGZvbnQgc2V0dGluZ3MgdG8gY29udHJvbCBob3cgdGhlIGxhYmVscyBhcmUgZGlzcGxheWVkIG9uIHRoZSBheGlzLlxuICAgICAqL1xuICAgIHB1YmxpYyBsYWJlbFN0eWxlOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgdGVtcGxhdGUgdXNlZCB0byByZW5kZXIgYXhpcyBsYWJlbHMsIGFsbG93aW5nIGZvciBjdXN0b21pemVkIGxhYmVscyB3aXRoIHRleHQsIGltYWdlcywgb3Igb3RoZXIgVUkgZWxlbWVudHMuIFxuICAgICAqIFRoZSB0ZW1wbGF0ZSBpcyBwcm92aWRlZCBhcyBhIHN0cmluZyB3aXRoIHBsYWNlaG9sZGVycyBmb3IgaW50ZXJwb2xhdGlvbi4gVXNlIGAke2xhYmVsfWAgdG8gaW5zZXJ0IHRoZSBheGlzIGxhYmVsIGFuZCBgJHt2YWx1ZX1gIGZvciB0aGUgYXhpcyBsYWJlbCB2YWx1ZS4gXG4gICAgICogRm9yIHNlY3VyaXR5LCBzdHJpbmcgdGVtcGxhdGVzIHVzZSBkYW5nZXJvdXNseVNldElubmVySFRNTCBpbiBSZWFjdOKAlGVuc3VyZSBpbnB1dCBpcyB0cnVzdGVkIHRvIGF2b2lkIFhTUyB2dWxuZXJhYmlsaXRpZXMuIFxuICAgICAqIElmIG51bGwgb3IgdW5kZWZpbmVkLCB0aGUgYXhpcyB3aWxsIHJlbmRlciBkZWZhdWx0IGxhYmVscy4gXG4gICAgICogQ29tcGF0aWJsZSB3aXRoIGJvdGggY2F0ZWdvcmljYWwgYW5kIG51bWVyaWNhbCBheGVzLlxuICAgICAqIEBleGFtcGxlIGBgYGh0bWxcbjxkaXYgaWQ9J0NoYXJ0Jz48L2Rpdj5cbmBgYFxuYGBgdHlwZXNjcmlwdFxubGV0IGNoYXJ0OiBDaGFydCA9IG5ldyBDaGFydCh7XG4uLi5cbnByaW1hcnlYQXhpczoge1xubGFiZWxUZW1wbGF0ZTogJzxkaXY+Q291bnRyeTogJHtsYWJlbH08L2Rpdj4nXG59XG4uLi5cbn0pO1xuY2hhcnQuYXBwZW5kVG8oJyNDaGFydCcpO1xuYGBgXG5cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgcHVibGljIGxhYmVsVGVtcGxhdGU6IGFueTtcbiAgICAvKiogXG4gICAgICogRGV0ZXJtaW5lcyB0aGUgYWxpZ25tZW50IG9mIGxhYmVscyB3aGVuIGEgbGluZSBicmVhayBvY2N1cnMgaW4gdGhlIGF4aXMgbGFiZWxzLlxuICAgICAqIEBkZWZhdWx0ICdDZW50ZXInXG4gICAgICovXG4gICAgcHVibGljIGxpbmVCcmVha0FsaWdubWVudDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBPcHRpb25zIGZvciBjdXN0b21pemluZyB0aGUgYXhpcyBsaW5lcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbGluZVN0eWxlOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgYmFzZSB2YWx1ZSBmb3IgYSBsb2dhcml0aG1pYyBheGlzLiBcbiAgICAgKiA+IE5vdGUgdGhhdCBgdmFsdWVUeXBlYCBtdXN0IGJlIHNldCB0byBgTG9nYXJpdGhtaWNgIGZvciB0aGlzIGZlYXR1cmUgdG8gd29yay5cbiAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAqL1xuICAgIHB1YmxpYyBsb2dCYXNlOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIE9wdGlvbnMgZm9yIGN1c3RvbWl6aW5nIG1ham9yIGdyaWQgbGluZXMgb24gdGhlIGF4aXMuXG4gICAgICovXG4gICAgcHVibGljIG1ham9yR3JpZExpbmVzOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIE9wdGlvbnMgZm9yIGN1c3RvbWl6aW5nIG1ham9yIHRpY2sgbGluZXMgb24gdGhlIGF4aXMuXG4gICAgICovXG4gICAgcHVibGljIG1ham9yVGlja0xpbmVzOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgYXhpcyByYW5nZSwgd2hpY2ggc2V0cyB0aGUgdXBwZXIgYm91bmQgb2YgdGhlIGF4aXMgYW5kIGRlZmluZXMgdGhlIGxhcmdlc3QgdmFsdWUgZGlzcGxheWVkIG9uIHRoZSBjaGFydCwgaGVscGluZyB0byBjb250cm9sIHRoZSB2aXNpYmxlIHJhbmdlIG9mIGRhdGEuXG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqL1xuICAgIHB1YmxpYyBtYXhpbXVtOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgbWF4aW11bSB3aWR0aCBvZiBhbiBheGlzIGxhYmVsLlxuICAgICAqIEBkZWZhdWx0IDM0LlxuICAgICAqL1xuICAgIHB1YmxpYyBtYXhpbXVtTGFiZWxXaWR0aDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxhYmVscyBwZXIgMTAwIHBpeGVscyByZWxhdGl2ZSB0byB0aGUgYXhpcyBsZW5ndGguXG4gICAgICogQGRlZmF1bHQgM1xuICAgICAqL1xuICAgIHB1YmxpYyBtYXhpbXVtTGFiZWxzOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgbWluaW11bSB2YWx1ZSBvZiB0aGUgYXhpcyByYW5nZSwgd2hpY2ggc2V0cyB0aGUgbG93ZXIgYm91bmQgb2YgdGhlIGF4aXMgYW5kIGRlZmluZXMgdGhlIHNtYWxsZXN0IHZhbHVlIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgb24gdGhlIGNoYXJ0IHRvIGNvbnRyb2wgdGhlIHZpc2libGUgcmFuZ2Ugb2YgZGF0YS5cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgcHVibGljIG1pbmltdW06IGFueTtcbiAgICAvKiogXG4gICAgICogT3B0aW9ucyBmb3IgY3VzdG9taXppbmcgbWlub3IgZ3JpZCBsaW5lcyBvbiB0aGUgYXhpcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWlub3JHcmlkTGluZXM6IGFueTtcbiAgICAvKiogXG4gICAgICogT3B0aW9ucyBmb3IgY3VzdG9taXppbmcgbWlub3IgdGljayBsaW5lcyBvbiB0aGUgYXhpcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWlub3JUaWNrTGluZXM6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgbWlub3IgdGlja3MgcGVyIGludGVydmFsLlxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBwdWJsaWMgbWlub3JUaWNrc1BlckludGVydmFsOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIE11bHRpLWxldmVsIGxhYmVscyBhcmUgdXNlZCB0byBkaXNwbGF5IGhpZXJhcmNoaWNhbCBvciBncm91cGVkIGxhYmVscyBvbiB0aGUgYXhpcywgYWxsb3dpbmcgZm9yIGEgbW9yZSBkZXRhaWxlZCBhbmQgc3RydWN0dXJlZCBkYXRhIHJlcHJlc2VudGF0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBtdWx0aUxldmVsTGFiZWxzOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGFuIGF4aXMuIFRvIGFzc29jaWF0ZSBhbiBheGlzIHdpdGggYSBzZXJpZXMsIHNldCB0aGlzIG5hbWUgdG8gdGhlIGB4QXhpc05hbWVgIG9yIGB5QXhpc05hbWVgIHByb3BlcnRpZXMgb2YgdGhlIHNlcmllcy5cbiAgICAgKiBAZGVmYXVsdCAnJ1xuICAgICAqL1xuICAgIHB1YmxpYyBuYW1lOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIElmIHNldCB0byB0cnVlLCB0aGUgYXhpcyB3aWxsIHJlbmRlciBvbiB0aGUgb3Bwb3NpdGUgc2lkZSBvZiBpdHMgZGVmYXVsdCBwb3NpdGlvbi5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHB1YmxpYyBvcHBvc2VkUG9zaXRpb246IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgYXhpcyBlbGVtZW50cywgc3VjaCBhcyBheGlzIGxhYmVscyBhbmQgdGhlIGF4aXMgdGl0bGUsIHNob3VsZCBiZSBjcm9zc2VkIGJ5IHRoZSBheGlzIGxpbmUuXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHB1YmxpYyBwbGFjZU5leHRUb0F4aXNMaW5lOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgcGFkZGluZyBvbiB0aGUgdG9wLCBib3R0b20sIGxlZnQgYW5kIHJpZ2h0IHNpZGVzIG9mIHRoZSBjaGFydCBhcmVhLCBpbiBwaXhlbHMuXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHB1YmxpYyBwbG90T2Zmc2V0OiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgYm90dG9tIHBhZGRpbmcgZm9yIHRoZSBjaGFydCBhcmVhLCBpbiBwaXhlbHMuXG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqL1xuICAgIHB1YmxpYyBwbG90T2Zmc2V0Qm90dG9tOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgbGVmdCBwYWRkaW5nIGZvciB0aGUgY2hhcnQgYXJlYSwgaW4gcGl4ZWxzLlxuICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgKi9cbiAgICBwdWJsaWMgcGxvdE9mZnNldExlZnQ6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSByaWdodCBwYWRkaW5nIGZvciB0aGUgY2hhcnQgYXJlYSwgaW4gcGl4ZWxzLlxuICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgKi9cbiAgICBwdWJsaWMgcGxvdE9mZnNldFJpZ2h0OiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgdG9wIHBhZGRpbmcgZm9yIHRoZSBjaGFydCBhcmVhLCBpbiBwaXhlbHMuXG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqL1xuICAgIHB1YmxpYyBwbG90T2Zmc2V0VG9wOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBgcmFuZ2VQYWRkaW5nYCBwcm9wZXJ0eSBkZXRlcm1pbmVzIGhvdyBwYWRkaW5nIGlzIGFwcGxpZWQgdG8gdGhlIGF4aXMgcmFuZ2UsIGFmZmVjdGluZyB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgY2hhcnQgYnkgYWRqdXN0aW5nIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBvZiB0aGUgYXhpcy4gXG4gICAgICogQXZhaWxhYmxlIG9wdGlvbnMgYXJlOiBcbiAgICAgKiAqIE5vbmU6IE5vIHBhZGRpbmcgaXMgYXBwbGllZCB0byB0aGUgYXhpcy4gXG4gICAgICogKiBOb3JtYWw6IFBhZGRpbmcgaXMgYXBwbGllZCBiYXNlZCBvbiB0aGUgcmFuZ2UgY2FsY3VsYXRpb24uIFxuICAgICAqICogQWRkaXRpb25hbDogVGhlIGludGVydmFsIG9mIHRoZSBheGlzIGlzIGFkZGVkIGFzIHBhZGRpbmcgdG8gYm90aCB0aGUgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMgb2YgdGhlIHJhbmdlLiBcbiAgICAgKiAqIFJvdW5kOiBUaGUgYXhpcyByYW5nZSBpcyByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IHBvc3NpYmxlIHZhbHVlIHRoYXQgaXMgZGl2aXNpYmxlIGJ5IHRoZSBpbnRlcnZhbC5cbiAgICAgKiBAZGVmYXVsdCAnQXV0bydcbiAgICAgKi9cbiAgICBwdWJsaWMgcmFuZ2VQYWRkaW5nOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgaW5kZXggb2YgdGhlIHJvdyB3aGVyZSB0aGUgYXhpcyBpcyBhc3NvY2lhdGVkIHdoZW4gdGhlIGNoYXJ0IGFyZWEgaXMgZGl2aWRlZCBpbnRvIG11bHRpcGxlIHBsb3QgYXJlYXMgdXNpbmcgYHJvd3NgLiBcbiAgICAgKiBcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgcHVibGljIHJvd0luZGV4OiBhbnk7XG4gICAgLyoqIFxuICAgICAqIENvbmZpZ3VyZXMgdGhlIHNjcm9sbGJhciB3aXRoIG9wdGlvbnMgZm9yIGN1c3RvbWl6YXRpb24sIGluY2x1ZGluZyBhcHBlYXJhbmNlLCBiZWhhdmlvciwgYW5kIGxhenkgbG9hZGluZyBzZXR0aW5ncy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2Nyb2xsYmFyU2V0dGluZ3M6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBza2VsZXRvbiBmb3JtYXQgdXNlZCBmb3IgcHJvY2Vzc2luZyBkYXRlLXRpbWUgdmFsdWVzLlxuICAgICAqIEBkZWZhdWx0ICcnXG4gICAgICovXG4gICAgcHVibGljIHNrZWxldG9uOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgZm9ybWF0IHR5cGUgdG8gYmUgdXNlZCBpbiBkYXRlLXRpbWUgZm9ybWF0dGluZy5cbiAgICAgKiBAZGVmYXVsdCAnRGF0ZVRpbWUnXG4gICAgICogQGRlcHJlY2F0ZWQgXG4gICAgICovXG4gICAgcHVibGljIHNrZWxldG9uVHlwZTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBgY29sdW1uc2Agb3IgYHJvd3NgIHRoYXQgYW4gYXhpcyBzcGFucyBob3Jpem9udGFsbHkgb3IgdmVydGljYWxseS5cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgcHVibGljIHNwYW46IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBzdGFydCBhbmdsZSBmb3IgdGhlIHNlcmllcyBpbiBhIHBvbGFyIG9yIHJhZGFyIGNoYXJ0LCBtZWFzdXJlZCBpbiBkZWdyZWVzIGZyb20gdGhlIGhvcml6b250YWwgYXhpcywgZGV0ZXJtaW5pbmcgdGhlIGluaXRpYWwgYW5nbGUgZnJvbSB3aGljaCB0aGUgc2VyaWVzIGJlZ2lucy5cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgcHVibGljIHN0YXJ0QW5nbGU6IGFueTtcbiAgICAvKiogXG4gICAgICogSWYgc2V0IHRvIHRydWUsIHRoZSBheGlzIHN0YXJ0cyBmcm9tIHplcm8uIFxuICAgICAqIElmIHNldCB0byBmYWxzZSwgdGhlIGF4aXMgc3RhcnRzIGZyb20gdGhlIG1pbmltdW0gdmFsdWUgb2YgdGhlIGRhdGEuXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHB1YmxpYyBzdGFydEZyb21aZXJvOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgY29sbGVjdGlvbiBvZiBzdHJpcCBsaW5lcyBmb3IgdGhlIGF4aXMsIHdoaWNoIGFyZSB2aXN1YWwgZWxlbWVudHMgdXNlZCB0byBtYXJrIG9yIGhpZ2hsaWdodCBzcGVjaWZpYyByYW5nZXMuXG4gICAgICovXG4gICAgcHVibGljIHN0cmlwTGluZXM6IGFueTtcbiAgICAvKiogXG4gICAgICogVGhlIGB0YWJJbmRleGAgdmFsdWUgZm9yIHRoZSBheGlzLCBkZXRlcm1pbmluZyBpdHMgcG9zaXRpb24gaW4gdGhlIHRhYiBvcmRlci5cbiAgICAgKiBAZGVmYXVsdCAyXG4gICAgICovXG4gICAgcHVibGljIHRhYkluZGV4OiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBgdGlja1Bvc2l0aW9uYCBwcm9wZXJ0eSBkZXRlcm1pbmVzIHdoZXJlIHRoZSBheGlzIHRpY2tzIGFyZSByZW5kZXJlZCBpbiByZWxhdGlvbiB0byB0aGUgYXhpcyBsaW5lLiBcbiAgICAgKiBBdmFpbGFibGUgb3B0aW9ucyBhcmU6IFxuICAgICAqICogSW5zaWRlOiBSZW5kZXJzIHRoZSB0aWNrcyBpbnNpZGUgdGhlIGF4aXMgbGluZS4gXG4gICAgICogKiBPdXRzaWRlOiBSZW5kZXJzIHRoZSB0aWNrcyBvdXRzaWRlIHRoZSBheGlzIGxpbmUuXG4gICAgICogQGRlZmF1bHQgJ091dHNpZGUnXG4gICAgICovXG4gICAgcHVibGljIHRpY2tQb3NpdGlvbjogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIHRpdGxlIG9mIGFuIGF4aXMsIGRpc3BsYXllZCBhbG9uZyB0aGUgYXhpcyB0byBwcm92aWRlIGNvbnRleHQgYWJvdXQgdGhlIHJlcHJlc2VudGVkIGRhdGEuXG4gICAgICogQGRlZmF1bHQgJydcbiAgICAgKi9cbiAgICBwdWJsaWMgdGl0bGU6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBwYWRkaW5nIGJldHdlZW4gdGhlIGF4aXMgdGl0bGUgYW5kIHRoZSBheGlzIGxhYmVscy5cbiAgICAgKiBAZGVmYXVsdCA1XG4gICAgICovXG4gICAgcHVibGljIHRpdGxlUGFkZGluZzogYW55O1xuICAgIC8qKiBcbiAgICAgKiBEZWZpbmVzIGFuIGFuZ2xlIGZvciByb3RhdGluZyB0aGUgYXhpcyB0aXRsZS4gQnkgZGVmYXVsdCwgdGhlIGFuZ2xlIGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIHBvc2l0aW9uIGFuZCBvcmllbnRhdGlvbiBvZiB0aGUgYXhpcy5cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgcHVibGljIHRpdGxlUm90YXRpb246IGFueTtcbiAgICAvKiogXG4gICAgICogT3B0aW9ucyBmb3IgY3VzdG9taXppbmcgdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIGF4aXMgdGl0bGUsIGluY2x1ZGluZyBmb250IGZhbWlseSwgc2l6ZSwgc3R5bGUsIHdlaWdodCwgYW5kIGNvbG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyB0aXRsZVN0eWxlOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBgdmFsdWVUeXBlYCBwcm9wZXJ0eSBkZWZpbmVzIHRoZSB0eXBlIG9mIGRhdGEgdGhhdCB0aGUgYXhpcyBjYW4gbWFuYWdlLCBlbnN1cmluZyBjb3JyZWN0IHJlbmRlcmluZyBiYXNlZCBvbiB0aGUgZGF0YSB0eXBlLiBUaGlzIHByb3BlcnR5IHN1cHBvcnRzIG11bHRpcGxlIGRhdGEgdHlwZXMsIGVhY2ggc3VpdGVkIGZvciBkaWZmZXJlbnQga2luZHMgb2YgZGF0YSB2aXN1YWxpemF0aW9uLiBcbiAgICAgKiBBdmFpbGFibGUgb3B0aW9ucyBpbmNsdWRlOiBcbiAgICAgKiAqIERvdWJsZTogVXNlZCBmb3IgcmVuZGVyaW5nIGEgbnVtZXJpYyBheGlzIHRvIGFjY29tbW9kYXRlIG51bWVyaWMgZGF0YS4gXG4gICAgICogKiBEYXRlVGltZTogVXRpbGl6ZWQgZm9yIHJlbmRlcmluZyBhIGRhdGUtdGltZSBheGlzIHRvIG1hbmFnZSBkYXRlLXRpbWUgZGF0YS4gXG4gICAgICogKiBDYXRlZ29yeTogRW1wbG95ZWQgZm9yIHJlbmRlcmluZyBhIGNhdGVnb3J5IGF4aXMgdG8gbWFuYWdlIGNhdGVnb3JpY2FsIGRhdGEuIFxuICAgICAqICogTG9nYXJpdGhtaWM6IEFwcGxpZWQgZm9yIHJlbmRlcmluZyBhIGxvZ2FyaXRobWljIGF4aXMgdG8gaGFuZGxlIGEgd2lkZSByYW5nZSBvZiB2YWx1ZXMuIFxuICAgICAqICogRGF0ZVRpbWVDYXRlZ29yeTogVXNlZCB0byByZW5kZXIgYSBkYXRlLXRpbWUgY2F0ZWdvcnkgYXhpcyBmb3IgbWFuYWdpbmcgYnVzaW5lc3MgZGF5cy5cbiAgICAgKiBAZGVmYXVsdCAnRG91YmxlJ1xuICAgICAqIEBibGF6b3J0eXBlIFN5bmNmdXNpb24uRUoyLkJsYXpvci5DaGFydHMuVmFsdWVUeXBlXG4gICAgICogQGlzZW51bWVyYXRpb24gdHJ1ZVxuICAgICAqL1xuICAgIHB1YmxpYyB2YWx1ZVR5cGU6IGFueTtcbiAgICAvKiogXG4gICAgICogSWYgc2V0IHRvIHRydWUsIGF4aXMgbGFiZWxzIHdpbGwgYmUgdmlzaWJsZSBpbiB0aGUgY2hhcnQuIEJ5IGRlZmF1bHQsIGF4aXMgbGFiZWxzIGFyZSBlbmFibGVkLlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBwdWJsaWMgdmlzaWJsZTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGUgYXhpcyBpcyBzY2FsZWQgYnkgdGhpcyBmYWN0b3IuIFdoZW4gYHpvb21GYWN0b3JgIGlzIDAuNSwgdGhlIGNoYXJ0IGlzIHNjYWxlZCBieSAyMDAlIGFsb25nIHRoaXMgYXhpcy4gXG4gICAgICogPiBOb3RlIHRoZSB2YWx1ZSByYW5nZXMgZnJvbSAwIHRvIDEuXG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHB1YmxpYyB6b29tRmFjdG9yOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNldHMgdGhlIHBvc2l0aW9uIG9mIHRoZSB6b29tZWQgYXhpcyBvbiB0aGUgY2hhcnQsIHdpdGggdGhlIGB6b29tUG9zaXRpb25gIHByb3BlcnR5IHNwZWNpZnlpbmcgdGhlIHBvc2l0aW9uIHdpdGhpbiB0aGUgem9vbWVkIHJhbmdlLCBmcm9tIDAgKHN0YXJ0KSB0byAxIChlbmQpLlxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBwdWJsaWMgem9vbVBvc2l0aW9uOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHZpZXdDb250YWluZXJSZWY6Vmlld0NvbnRhaW5lclJlZikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBzZXRWYWx1ZSgnY3VycmVudEluc3RhbmNlJywgdGhpcywgdGhpcy52aWV3Q29udGFpbmVyUmVmKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckV2ZW50cyhvdXRwdXRzKTtcbiAgICAgICAgdGhpcy5kaXJlY3RpdmVQcm9wTGlzdCA9IGlucHV0O1xuICAgIH1cbn1cblxuLyoqXG4gKiBBeGlzIEFycmF5IERpcmVjdGl2ZVxuICogQHByaXZhdGVcbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdlanMtY2hhcnQ+ZS1heGVzJyxcbiAgICBxdWVyaWVzOiB7XG4gICAgICAgIGNoaWxkcmVuOiBuZXcgQ29udGVudENoaWxkcmVuKEF4aXNEaXJlY3RpdmUpXG4gICAgfSxcbn0pXG5leHBvcnQgY2xhc3MgQXhlc0RpcmVjdGl2ZSBleHRlbmRzIEFycmF5QmFzZTxBeGVzRGlyZWN0aXZlPiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdheGVzJyk7XG4gICAgfVxufSJdfQ==