@angular/material 12.0.0-rc.0 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/material-chips.umd.js.map +1 -1
- package/bundles/material-core.umd.js +27 -30
- package/bundles/material-core.umd.js.map +1 -1
- package/bundles/material-datepicker-testing.umd.js +5 -5
- package/bundles/material-datepicker-testing.umd.js.map +1 -1
- package/bundles/material-datepicker.umd.js +57 -7
- package/bundles/material-datepicker.umd.js.map +1 -1
- package/bundles/material-form-field-testing.umd.js +16 -8
- package/bundles/material-form-field-testing.umd.js.map +1 -1
- package/bundles/material-menu.umd.js.map +1 -1
- package/bundles/material-paginator.umd.js +1 -0
- package/bundles/material-paginator.umd.js.map +1 -1
- package/bundles/material-table-testing.umd.js +103 -143
- package/bundles/material-table-testing.umd.js.map +1 -1
- package/bundles/material-tabs.umd.js +8 -1
- package/bundles/material-tabs.umd.js.map +1 -1
- package/bundles/material-tree.umd.js +1 -3
- package/bundles/material-tree.umd.js.map +1 -1
- package/chips/chip.d.ts +2 -1
- package/chips/index.metadata.json +1 -1
- package/core/common-behaviors/color.d.ts +3 -3
- package/core/common-behaviors/constructor.d.ts +1 -3
- package/core/common-behaviors/disable-ripple.d.ts +2 -2
- package/core/common-behaviors/disabled.d.ts +3 -3
- package/core/common-behaviors/error-state.d.ts +3 -3
- package/core/common-behaviors/tabindex.d.ts +1 -1
- package/core/index.metadata.json +1 -1
- package/core/ripple/ripple-renderer.d.ts +2 -0
- package/core/ripple/ripple.d.ts +2 -0
- package/datepicker/date-range-input-parts.d.ts +2 -0
- package/datepicker/date-range-input.d.ts +6 -1
- package/datepicker/date-selection-model.d.ts +2 -0
- package/datepicker/datepicker-base.d.ts +1 -0
- package/datepicker/datepicker-input.d.ts +4 -2
- package/datepicker/index.metadata.json +1 -1
- package/datepicker/testing/datepicker-input-harness-base.d.ts +3 -2
- package/esm2015/chips/chip.js +1 -1
- package/esm2015/core/common-behaviors/color.js +1 -2
- package/esm2015/core/common-behaviors/common-module.js +1 -1
- package/esm2015/core/common-behaviors/constructor.js +1 -1
- package/esm2015/core/common-behaviors/disable-ripple.js +3 -8
- package/esm2015/core/common-behaviors/disabled.js +1 -2
- package/esm2015/core/common-behaviors/error-state.js +1 -5
- package/esm2015/core/common-behaviors/tabindex.js +3 -10
- package/esm2015/core/ripple/ripple-renderer.js +9 -1
- package/esm2015/core/ripple/ripple.js +8 -1
- package/esm2015/core/version.js +1 -1
- package/esm2015/datepicker/date-range-input-parts.js +23 -1
- package/esm2015/datepicker/date-range-input.js +18 -3
- package/esm2015/datepicker/date-selection-model.js +3 -2
- package/esm2015/datepicker/datepicker-base.js +8 -3
- package/esm2015/datepicker/datepicker-input.js +8 -1
- package/esm2015/datepicker/datepicker-toggle.js +1 -1
- package/esm2015/datepicker/testing/datepicker-input-harness-base.js +4 -3
- package/esm2015/form-field/testing/form-field-harness.js +12 -3
- package/esm2015/menu/menu-trigger.js +1 -1
- package/esm2015/menu/menu.js +1 -1
- package/esm2015/paginator/paginator.js +2 -1
- package/esm2015/table/testing/cell-harness.js +9 -9
- package/esm2015/table/testing/row-harness.js +38 -70
- package/esm2015/table/testing/table-harness.js +23 -15
- package/esm2015/tabs/paginated-tab-header.js +2 -2
- package/esm2015/tabs/tab-group.js +8 -1
- package/esm2015/tree/data-source/nested-data-source.js +2 -4
- package/fesm2015/chips.js.map +1 -1
- package/fesm2015/core.js +21 -24
- package/fesm2015/core.js.map +1 -1
- package/fesm2015/datepicker/testing.js +2 -1
- package/fesm2015/datepicker/testing.js.map +1 -1
- package/fesm2015/datepicker.js +55 -5
- package/fesm2015/datepicker.js.map +1 -1
- package/fesm2015/form-field/testing.js +11 -2
- package/fesm2015/form-field/testing.js.map +1 -1
- package/fesm2015/menu.js.map +1 -1
- package/fesm2015/paginator.js +1 -0
- package/fesm2015/paginator.js.map +1 -1
- package/fesm2015/table/testing.js +66 -90
- package/fesm2015/table/testing.js.map +1 -1
- package/fesm2015/tabs.js +8 -1
- package/fesm2015/tabs.js.map +1 -1
- package/fesm2015/tree.js +1 -3
- package/fesm2015/tree.js.map +1 -1
- package/form-field/testing/form-field-harness.d.ts +6 -1
- package/package.json +6 -6
- package/paginator/index.metadata.json +1 -1
- package/prebuilt-themes/deeppurple-amber.css +1 -1
- package/prebuilt-themes/indigo-pink.css +1 -1
- package/prebuilt-themes/pink-bluegrey.css +1 -1
- package/prebuilt-themes/purple-green.css +1 -1
- package/schematics/collection.json +0 -6
- package/schematics/ng-add/index.js +2 -2
- package/schematics/ng-update/index.js +3 -1
- package/schematics/{ng-generate/theming-api → ng-update/migrations/theming-api-v12}/config.d.ts +6 -0
- package/schematics/ng-update/migrations/theming-api-v12/config.js +206 -0
- package/schematics/{ng-generate/theming-api → ng-update/migrations/theming-api-v12}/migration.d.ts +0 -0
- package/schematics/ng-update/migrations/theming-api-v12/migration.js +234 -0
- package/schematics/ng-update/migrations/theming-api-v12/theming-api-migration.d.ts +18 -0
- package/schematics/ng-update/migrations/theming-api-v12/theming-api-migration.js +45 -0
- package/table/testing/cell-harness.d.ts +2 -1
- package/table/testing/row-harness.d.ts +21 -22
- package/table/testing/table-harness.d.ts +32 -13
- package/tabs/_tabs-theme.scss +5 -2
- package/tabs/index.metadata.json +1 -1
- package/schematics/ng-generate/theming-api/config.js +0 -183
- package/schematics/ng-generate/theming-api/index.d.ts +0 -10
- package/schematics/ng-generate/theming-api/index.js +0 -26
- package/schematics/ng-generate/theming-api/migration.js +0 -223
- package/schematics/ng-generate/theming-api/schema.d.ts +0 -9
- package/schematics/ng-generate/theming-api/schema.js +0 -10
- package/schematics/ng-generate/theming-api/schema.json +0 -7
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @license
|
|
4
|
-
* Copyright Google LLC All Rights Reserved.
|
|
5
|
-
*
|
|
6
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
-
* found in the LICENSE file at https://angular.io/license
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.removedMaterialVariables = exports.cdkMixins = exports.cdkVariables = exports.materialVariables = exports.materialFunctions = exports.materialMixins = void 0;
|
|
11
|
-
/** Mapping of Material mixins that should be renamed. */
|
|
12
|
-
exports.materialMixins = {
|
|
13
|
-
'mat-core': 'core',
|
|
14
|
-
'mat-core-color': 'core-color',
|
|
15
|
-
'mat-core-theme': 'core-theme',
|
|
16
|
-
'angular-material-theme': 'all-component-themes',
|
|
17
|
-
'angular-material-typography': 'all-component-typographies',
|
|
18
|
-
'angular-material-color': 'all-component-colors',
|
|
19
|
-
'mat-base-typography': 'typography-hierarchy',
|
|
20
|
-
'mat-typography-level-to-styles': 'typography-level',
|
|
21
|
-
'mat-elevation': 'elevation',
|
|
22
|
-
'mat-overridable-elevation': 'overridable-elevation',
|
|
23
|
-
'mat-elevation-transition': 'elevation-transition',
|
|
24
|
-
'mat-ripple': 'ripple',
|
|
25
|
-
'mat-ripple-color': 'ripple-color',
|
|
26
|
-
'mat-ripple-theme': 'ripple-theme',
|
|
27
|
-
'mat-strong-focus-indicators': 'strong-focus-indicators',
|
|
28
|
-
'mat-strong-focus-indicators-color': 'strong-focus-indicators-color',
|
|
29
|
-
'mat-strong-focus-indicators-theme': 'strong-focus-indicators-theme',
|
|
30
|
-
'mat-font-shorthand': 'font-shorthand',
|
|
31
|
-
// The expansion panel is a special case, because the package is called `expansion`, but the
|
|
32
|
-
// mixins were prefixed with `expansion-panel`. This was corrected by the Sass module migration.
|
|
33
|
-
'mat-expansion-panel-theme': 'expansion-theme',
|
|
34
|
-
'mat-expansion-panel-color': 'expansion-color',
|
|
35
|
-
'mat-expansion-panel-typography': 'expansion-typography',
|
|
36
|
-
};
|
|
37
|
-
// The component themes all follow the same pattern so we can spare ourselves some typing.
|
|
38
|
-
[
|
|
39
|
-
'option', 'optgroup', 'pseudo-checkbox', 'autocomplete', 'badge', 'bottom-sheet', 'button',
|
|
40
|
-
'button-toggle', 'card', 'checkbox', 'chips', 'divider', 'table', 'datepicker', 'dialog',
|
|
41
|
-
'grid-list', 'icon', 'input', 'list', 'menu', 'paginator', 'progress-bar', 'progress-spinner',
|
|
42
|
-
'radio', 'select', 'sidenav', 'slide-toggle', 'slider', 'stepper', 'sort', 'tabs', 'toolbar',
|
|
43
|
-
'tooltip', 'snack-bar', 'form-field', 'tree'
|
|
44
|
-
].forEach(name => {
|
|
45
|
-
exports.materialMixins[`mat-${name}-theme`] = `${name}-theme`;
|
|
46
|
-
exports.materialMixins[`mat-${name}-color`] = `${name}-color`;
|
|
47
|
-
exports.materialMixins[`mat-${name}-typography`] = `${name}-typography`;
|
|
48
|
-
});
|
|
49
|
-
/** Mapping of Material functions that should be renamed. */
|
|
50
|
-
exports.materialFunctions = {
|
|
51
|
-
'mat-color': 'get-color-from-palette',
|
|
52
|
-
'mat-contrast': 'get-contrast-color-from-palette',
|
|
53
|
-
'mat-palette': 'define-palette',
|
|
54
|
-
'mat-dark-theme': 'define-dark-theme',
|
|
55
|
-
'mat-light-theme': 'define-light-theme',
|
|
56
|
-
'mat-typography-level': 'define-typography-level',
|
|
57
|
-
'mat-typography-config': 'define-typography-config',
|
|
58
|
-
'mat-font-size': 'font-size',
|
|
59
|
-
'mat-line-height': 'line-height',
|
|
60
|
-
'mat-font-weight': 'font-weight',
|
|
61
|
-
'mat-letter-spacing': 'letter-spacing',
|
|
62
|
-
'mat-font-family': 'font-family',
|
|
63
|
-
};
|
|
64
|
-
/** Mapping of Material variables that should be renamed. */
|
|
65
|
-
exports.materialVariables = {
|
|
66
|
-
'mat-light-theme-background': 'light-theme-background-palette',
|
|
67
|
-
'mat-dark-theme-background': 'dark-theme-background-palette',
|
|
68
|
-
'mat-light-theme-foreground': 'light-theme-foreground-palette',
|
|
69
|
-
'mat-dark-theme-foreground': 'dark-theme-foreground-palette',
|
|
70
|
-
};
|
|
71
|
-
// The palettes all follow the same pattern.
|
|
72
|
-
[
|
|
73
|
-
'red', 'pink', 'indigo', 'purple', 'deep-purple', 'blue', 'light-blue', 'cyan', 'teal', 'green',
|
|
74
|
-
'light-green', 'lime', 'yellow', 'amber', 'orange', 'deep-orange', 'brown', 'grey', 'gray',
|
|
75
|
-
'blue-grey', 'blue-gray'
|
|
76
|
-
].forEach(name => exports.materialVariables[`mat-${name}`] = `${name}-palette`);
|
|
77
|
-
/** Mapping of CDK variables that should be renamed. */
|
|
78
|
-
exports.cdkVariables = {
|
|
79
|
-
'cdk-z-index-overlay-container': 'overlay-container-z-index',
|
|
80
|
-
'cdk-z-index-overlay': 'overlay-z-index',
|
|
81
|
-
'cdk-z-index-overlay-backdrop': 'overlay-backdrop-z-index',
|
|
82
|
-
'cdk-overlay-dark-backdrop-background': 'overlay-backdrop-color',
|
|
83
|
-
};
|
|
84
|
-
/** Mapping of CDK mixins that should be renamed. */
|
|
85
|
-
exports.cdkMixins = {
|
|
86
|
-
'cdk-overlay': 'overlay',
|
|
87
|
-
'cdk-a11y': 'a11y-visually-hidden',
|
|
88
|
-
'cdk-high-contrast': 'high-contrast',
|
|
89
|
-
'cdk-text-field-autofill-color': 'text-field-autofill-color',
|
|
90
|
-
// This one was split up into two mixins which is trickier to
|
|
91
|
-
// migrate so for now we forward to the deprecated variant.
|
|
92
|
-
'cdk-text-field': 'text-field',
|
|
93
|
-
};
|
|
94
|
-
/**
|
|
95
|
-
* Material variables that have been removed from the public API
|
|
96
|
-
* and which should be replaced with their values.
|
|
97
|
-
*/
|
|
98
|
-
exports.removedMaterialVariables = {
|
|
99
|
-
// Note: there's also a usage of a variable called `$pi`, but the name is short enough that
|
|
100
|
-
// it matches things like `$mat-pink`. Don't migrate it since it's unlikely to be used.
|
|
101
|
-
'mat-xsmall': `'max-width: 599px'`,
|
|
102
|
-
'mat-small': `'max-width: 959px'`,
|
|
103
|
-
'mat-toggle-padding': '8px',
|
|
104
|
-
'mat-toggle-size': '20px',
|
|
105
|
-
'mat-linear-out-slow-in-timing-function': 'cubic-bezier(0, 0, 0.2, 0.1)',
|
|
106
|
-
'mat-fast-out-slow-in-timing-function': 'cubic-bezier(0.4, 0, 0.2, 1)',
|
|
107
|
-
'mat-fast-out-linear-in-timing-function': 'cubic-bezier(0.4, 0, 1, 1)',
|
|
108
|
-
'mat-elevation-transition-duration': '280ms',
|
|
109
|
-
'mat-elevation-transition-timing-function': 'cubic-bezier(0.4, 0, 0.2, 1)',
|
|
110
|
-
'mat-elevation-color': '#000',
|
|
111
|
-
'mat-elevation-opacity': '1',
|
|
112
|
-
'mat-elevation-prefix': `'mat-elevation-z'`,
|
|
113
|
-
'mat-ripple-color-opacity': '0.1',
|
|
114
|
-
'mat-badge-font-size': '12px',
|
|
115
|
-
'mat-badge-font-weight': '600',
|
|
116
|
-
'mat-badge-default-size': '22px',
|
|
117
|
-
'mat-badge-small-size': '16px',
|
|
118
|
-
'mat-badge-large-size': '28px',
|
|
119
|
-
'mat-button-toggle-standard-height': '48px',
|
|
120
|
-
'mat-button-toggle-standard-minimum-height': '24px',
|
|
121
|
-
'mat-button-toggle-standard-maximum-height': '48px',
|
|
122
|
-
'mat-chip-remove-font-size': '18px',
|
|
123
|
-
'mat-datepicker-selected-today-box-shadow-width': '1px',
|
|
124
|
-
'mat-datepicker-selected-fade-amount': '0.6',
|
|
125
|
-
'mat-datepicker-range-fade-amount': '0.2',
|
|
126
|
-
'mat-datepicker-today-fade-amount': '0.2',
|
|
127
|
-
'mat-calendar-body-font-size': '13px',
|
|
128
|
-
'mat-calendar-weekday-table-font-size': '11px',
|
|
129
|
-
'mat-expansion-panel-header-collapsed-height': '48px',
|
|
130
|
-
'mat-expansion-panel-header-collapsed-minimum-height': '36px',
|
|
131
|
-
'mat-expansion-panel-header-collapsed-maximum-height': '48px',
|
|
132
|
-
'mat-expansion-panel-header-expanded-height': '64px',
|
|
133
|
-
'mat-expansion-panel-header-expanded-minimum-height': '48px',
|
|
134
|
-
'mat-expansion-panel-header-expanded-maximum-height': '64px',
|
|
135
|
-
'mat-expansion-panel-header-transition': '225ms cubic-bezier(0.4, 0, 0.2, 1)',
|
|
136
|
-
'mat-paginator-height': '56px',
|
|
137
|
-
'mat-paginator-minimum-height': '40px',
|
|
138
|
-
'mat-paginator-maximum-height': '56px',
|
|
139
|
-
'mat-stepper-header-height': '72px',
|
|
140
|
-
'mat-stepper-header-minimum-height': '42px',
|
|
141
|
-
'mat-stepper-header-maximum-height': '72px',
|
|
142
|
-
'mat-stepper-label-header-height': '24px',
|
|
143
|
-
'mat-stepper-label-position-bottom-top-gap': '16px',
|
|
144
|
-
'mat-stepper-label-min-width': '50px',
|
|
145
|
-
'mat-vertical-stepper-content-margin': '36px',
|
|
146
|
-
'mat-stepper-side-gap': '24px',
|
|
147
|
-
'mat-stepper-line-width': '1px',
|
|
148
|
-
'mat-stepper-line-gap': '8px',
|
|
149
|
-
'mat-step-sub-label-font-size': '12px',
|
|
150
|
-
'mat-step-header-icon-size': '16px',
|
|
151
|
-
'mat-toolbar-minimum-height': '44px',
|
|
152
|
-
'mat-toolbar-height-desktop': '64px',
|
|
153
|
-
'mat-toolbar-maximum-height-desktop': '64px',
|
|
154
|
-
'mat-toolbar-minimum-height-desktop': '44px',
|
|
155
|
-
'mat-toolbar-height-mobile': '56px',
|
|
156
|
-
'mat-toolbar-maximum-height-mobile': '56px',
|
|
157
|
-
'mat-toolbar-minimum-height-mobile': '44px',
|
|
158
|
-
'mat-tooltip-target-height': '22px',
|
|
159
|
-
'mat-tooltip-font-size': '10px',
|
|
160
|
-
'mat-tooltip-vertical-padding': '6px',
|
|
161
|
-
'mat-tooltip-handset-target-height': '30px',
|
|
162
|
-
'mat-tooltip-handset-font-size': '14px',
|
|
163
|
-
'mat-tooltip-handset-vertical-padding': '8px',
|
|
164
|
-
'mat-tree-node-height': '48px',
|
|
165
|
-
'mat-tree-node-minimum-height': '24px',
|
|
166
|
-
'mat-tree-node-maximum-height': '48px',
|
|
167
|
-
'z-index-fab': '20',
|
|
168
|
-
'z-index-drawer': '100',
|
|
169
|
-
'ease-in-out-curve-function': 'cubic-bezier(0.35, 0, 0.25, 1)',
|
|
170
|
-
'swift-ease-out-duration': '400ms',
|
|
171
|
-
'swift-ease-out-timing-function': 'cubic-bezier(0.25, 0.8, 0.25, 1)',
|
|
172
|
-
'swift-ease-out': 'all 400ms cubic-bezier(0.25, 0.8, 0.25, 1)',
|
|
173
|
-
'swift-ease-in-duration': '300ms',
|
|
174
|
-
'swift-ease-in-timing-function': 'cubic-bezier(0.55, 0, 0.55, 0.2)',
|
|
175
|
-
'swift-ease-in': 'all 300ms cubic-bezier(0.55, 0, 0.55, 0.2)',
|
|
176
|
-
'swift-ease-in-out-duration': '500ms',
|
|
177
|
-
'swift-ease-in-out-timing-function': 'cubic-bezier(0.35, 0, 0.25, 1)',
|
|
178
|
-
'swift-ease-in-out': 'all 500ms cubic-bezier(0.35, 0, 0.25, 1)',
|
|
179
|
-
'swift-linear-duration': '80ms',
|
|
180
|
-
'swift-linear-timing-function': 'linear',
|
|
181
|
-
'swift-linear': 'all 80ms linear'
|
|
182
|
-
};
|
|
183
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21hdGVyaWFsL3NjaGVtYXRpY3MvbmctZ2VuZXJhdGUvdGhlbWluZy1hcGkvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7OztBQUVILHlEQUF5RDtBQUM1QyxRQUFBLGNBQWMsR0FBMkI7SUFDcEQsVUFBVSxFQUFFLE1BQU07SUFDbEIsZ0JBQWdCLEVBQUUsWUFBWTtJQUM5QixnQkFBZ0IsRUFBRSxZQUFZO0lBQzlCLHdCQUF3QixFQUFFLHNCQUFzQjtJQUNoRCw2QkFBNkIsRUFBRSw0QkFBNEI7SUFDM0Qsd0JBQXdCLEVBQUUsc0JBQXNCO0lBQ2hELHFCQUFxQixFQUFFLHNCQUFzQjtJQUM3QyxnQ0FBZ0MsRUFBRSxrQkFBa0I7SUFDcEQsZUFBZSxFQUFFLFdBQVc7SUFDNUIsMkJBQTJCLEVBQUUsdUJBQXVCO0lBQ3BELDBCQUEwQixFQUFFLHNCQUFzQjtJQUNsRCxZQUFZLEVBQUUsUUFBUTtJQUN0QixrQkFBa0IsRUFBRSxjQUFjO0lBQ2xDLGtCQUFrQixFQUFFLGNBQWM7SUFDbEMsNkJBQTZCLEVBQUUseUJBQXlCO0lBQ3hELG1DQUFtQyxFQUFFLCtCQUErQjtJQUNwRSxtQ0FBbUMsRUFBRSwrQkFBK0I7SUFDcEUsb0JBQW9CLEVBQUUsZ0JBQWdCO0lBQ3RDLDRGQUE0RjtJQUM1RixnR0FBZ0c7SUFDaEcsMkJBQTJCLEVBQUUsaUJBQWlCO0lBQzlDLDJCQUEyQixFQUFFLGlCQUFpQjtJQUM5QyxnQ0FBZ0MsRUFBRSxzQkFBc0I7Q0FDekQsQ0FBQztBQUVGLDBGQUEwRjtBQUMxRjtJQUNFLFFBQVEsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUTtJQUMxRixlQUFlLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsU0FB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bnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8qKiBNYXBwaW5nIG9mIE1hdGVyaWFsIG1peGlucyB0aGF0IHNob3VsZCBiZSByZW5hbWVkLiAqL1xuZXhwb3J0IGNvbnN0IG1hdGVyaWFsTWl4aW5zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAnbWF0LWNvcmUnOiAnY29yZScsXG4gICdtYXQtY29yZS1jb2xvcic6ICdjb3JlLWNvbG9yJyxcbiAgJ21hdC1jb3JlLXRoZW1lJzogJ2NvcmUtdGhlbWUnLFxuICAnYW5ndWxhci1tYXRlcmlhbC10aGVtZSc6ICdhbGwtY29tcG9uZW50LXRoZW1lcycsXG4gICdhbmd1bGFyLW1hdGVyaWFsLXR5cG9ncmFwaHknOiAnYWxsLWNvbXBvbmVudC10eXBvZ3JhcGhpZXMnLFxuICAnYW5ndWxhci1tYXRlcmlhbC1jb2xvcic6ICdhbGwtY29tcG9uZW50LWNvbG9ycycsXG4gICdtYXQtYmFzZS10eXBvZ3JhcGh5JzogJ3R5cG9ncmFwaHktaGllcmFyY2h5JyxcbiAgJ21hdC10eXBvZ3JhcGh5LWxldmVsLXRvLXN0eWxlcyc6ICd0eXBvZ3JhcGh5LWxldmVsJyxcbiAgJ21hdC1lbGV2YXRpb24nOiAnZWxldmF0aW9uJyxcbiAgJ21hdC1vdmVycmlkYWJsZS1lbGV2YXRpb24nOiAnb3ZlcnJpZGFibGUtZWxldmF0aW9uJyxcbiAgJ21hdC1lbGV2YXRpb24tdHJhbnNpdGlvbic6ICdlbGV2YXRpb24tdHJhbnNpdGlvbicsXG4gICdtYXQtcmlwcGxlJzogJ3JpcHBsZScsXG4gICdtYXQtcmlwcGxlLWNvbG9yJzogJ3JpcHBsZS1jb2xvcicsXG4gICdtYXQtcmlwcGxlLXRoZW1lJzogJ3JpcHBsZS10aGVtZScsXG4gICdtYXQtc3Ryb25nLWZvY3VzLWluZGljYXRvcnMnOiAnc3Ryb25nLWZvY3VzLWluZGljYXRvcnMnLFxuICAnbWF0LXN0cm9uZy1mb2N1cy1pbmRpY2F0b3JzLWNvbG9yJzogJ3N0cm9uZy1mb2N1cy1pbmRpY2F0b3JzLWNvbG9yJyxcbiAgJ21hdC1zdHJvbmctZm9jdXMtaW5kaWNhdG9ycy10aGVtZSc6ICdzdHJvbmctZm9jdXMtaW5kaWNhdG9ycy10aGVtZScsXG4gICdtYXQtZm9udC1zaG9ydGhhbmQnOiAnZm9udC1zaG9ydGhhbmQnLFxuICAvLyBUaGUgZXhwYW5zaW9uIHBhbmVsIGlzIGEgc3BlY2lhbCBjYXNlLCBiZWNhdXNlIHRoZSBwYWNrYWdlIGlzIGNhbGxlZCBgZXhwYW5zaW9uYCwgYnV0IHRoZVxuICAvLyBtaXhpbnMgd2VyZSBwcmVmaXhlZCB3aXRoIGBleHBhbnNpb24tcGFuZWxgLiBUaGlzIHdhcyBjb3JyZWN0ZWQgYnkgdGhlIFNhc3MgbW9kdWxlIG1pZ3JhdGlvbi5cbiAgJ21hdC1leHBhbnNpb24tcGFuZWwtdGhlbWUnOiAnZXhwYW5zaW9uLXRoZW1lJyxcbiAgJ21hdC1leHBhbnNpb24tcGFuZWwtY29sb3InOiAnZXhwYW5zaW9uLWNvbG9yJyxcbiAgJ21hdC1leHBhbnNpb24tcGFuZWwtdHlwb2dyYXBoeSc6ICdleHBhbnNpb24tdHlwb2dyYXBoeScsXG59O1xuXG4vLyBUaGUgY29tcG9uZW50IHRoZW1lcyBhbGwgZm9sbG93IHRoZSBzYW1lIHBhdHRlcm4gc28gd2UgY2FuIHNwYXJlIG91cnNlbHZlcyBzb21lIHR5cGluZy5cbltcbiAgJ29wdGlvbicsICdvcHRncm91cCcsICdwc2V1ZG8tY2hlY2tib3gnLCAnYXV0b2NvbXBsZXRlJywgJ2JhZGdlJywgJ2JvdHRvbS1zaGVldCcsICdidXR0b24nLFxuICAnYnV0dG9uLXRvZ2dsZScsICdjYXJkJywgJ2NoZWNrYm94JywgJ2NoaXBzJywgJ2RpdmlkZXInLCAndGFibGUnLCAnZGF0ZXBpY2tlcicsICdkaWFsb2cnLFxuICAnZ3JpZC1saXN0JywgJ2ljb24nLCAnaW5wdXQnLCAnbGlzdCcsICdtZW51JywgJ3BhZ2luYXRvcicsICdwcm9ncmVzcy1iYXInLCAncHJvZ3Jlc3Mtc3Bpbm5lcicsXG4gICdyYWRpbycsICdzZWxlY3QnLCAnc2lkZW5hdicsICdzbGlkZS10b2dnbGUnLCAnc2xpZGVyJywgJ3N0ZXBwZXInLCAnc29ydCcsICd0YWJzJywgJ3Rvb2xiYXInLFxuICAndG9vbHRpcCcsICdzbmFjay1iYXInLCAnZm9ybS1maWVsZCcsICd0cmVlJ1xuXS5mb3JFYWNoKG5hbWUgPT4ge1xuICBtYXRlcmlhbE1peGluc1tgbWF0LSR7bmFtZX0tdGhlbWVgXSA9IGAke25hbWV9LXRoZW1lYDtcbiAgbWF0ZXJpYWxNaXhpbnNbYG1hdC0ke25hbWV9LWNvbG9yYF0gPSBgJHtuYW1lfS1jb2xvcmA7XG4gIG1hdGVyaWFsTWl4aW5zW2BtYXQtJHtuYW1lfS10eXBvZ3JhcGh5YF0gPSBgJHtuYW1lfS10eXBvZ3JhcGh5YDtcbn0pO1xuXG4vKiogTWFwcGluZyBvZiBNYXRlcmlhbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgcmVuYW1lZC4gKi9cbmV4cG9ydCBjb25zdCBtYXRlcmlhbEZ1bmN0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgJ21hdC1jb2xvcic6ICdnZXQtY29sb3ItZnJvbS1wYWxldHRlJyxcbiAgJ21hdC1jb250cmFzdCc6ICdnZXQtY29udHJhc3QtY29sb3ItZnJvbS1wYWxldHRlJyxcbiAgJ21hdC1wYWxldHRlJzogJ2RlZmluZS1wYWxldHRlJyxcbiAgJ21hdC1kYXJrLXRoZW1lJzogJ2RlZmluZS1kYXJrLXRoZW1lJyxcbiAgJ21hdC1saWdodC10aGVtZSc6ICdkZWZpbmUtbGlnaHQtdGhlbWUnLFxuICAnbWF0LXR5cG9ncmFwaHktbGV2ZWwnOiAnZGVmaW5lLXR5cG9ncmFwaHktbGV2ZWwnLFxuICAnbWF0LXR5cG9ncmFwaHktY29uZmlnJzogJ2RlZmluZS10eXBvZ3JhcGh5LWNvbmZpZycsXG4gICdtYXQtZm9udC1zaXplJzogJ2ZvbnQtc2l6ZScsXG4gICdtYXQtbGluZS1oZWlnaHQnOiAnbGluZS1oZWlnaHQnLFxuICAnbWF0LWZvbnQtd2VpZ2h0JzogJ2ZvbnQtd2VpZ2h0JyxcbiAgJ21hdC1sZXR0ZXItc3BhY2luZyc6ICdsZXR0ZXItc3BhY2luZycsXG4gICdtYXQtZm9udC1mYW1pbHknOiAnZm9udC1mYW1pbHknLFxufTtcblxuLyoqIE1hcHBpbmcgb2YgTWF0ZXJpYWwgdmFyaWFibGVzIHRoYXQgc2hvdWxkIGJlIHJlbmFtZWQuICovXG5leHBvcnQgY29uc3QgbWF0ZXJpYWxWYXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICdtYXQtbGlnaHQtdGhlbWUtYmFja2dyb3VuZCc6ICdsaWdodC10aGVtZS1iYWNrZ3JvdW5kLXBhbGV0dGUnLFxuICAnbWF0LWRhcmstdGhlbWUtYmFja2dyb3VuZCc6ICdkYXJrLXRoZW1lLWJhY2tncm91bmQtcGFsZXR0ZScsXG4gICdtYXQtbGlnaHQtdGhlbWUtZm9yZWdyb3VuZCc6ICdsaWdodC10aGVtZS1mb3JlZ3JvdW5kLXBhbGV0dGUnLFxuICAnbWF0LWRhcmstdGhlbWUtZm9yZWdyb3VuZCc6ICdkYXJrLXRoZW1lLWZvcmVncm91bmQtcGFsZXR0ZScsXG59O1xuXG4vLyBUaGUgcGFsZXR0ZXMgYWxsIGZvbGxvdyB0aGUgc2FtZSBwYXR0ZXJuLlxuW1xuICAncmVkJywgJ3BpbmsnLCAnaW5kaWdvJywgJ3B1cnBsZScsICdkZWVwLXB1cnBsZScsICdibHVlJywgJ2xpZ2h0LWJsdWUnLCAnY3lhbicsICd0ZWFsJywgJ2dyZWVuJyxcbiAgJ2xpZ2h0LWdyZWVuJywgJ2xpbWUnLCAneWVsbG93JywgJ2FtYmVyJywgJ29yYW5nZScsICdkZWVwLW9yYW5nZScsICdicm93bicsICdncmV5JywgJ2dyYXknLFxuICAnYmx1ZS1ncmV5JywgJ2JsdWUtZ3JheSdcbl0uZm9yRWFjaChuYW1lID0+IG1hdGVyaWFsVmFyaWFibGVzW2BtYXQtJHtuYW1lfWBdID0gYCR7bmFtZX0tcGFsZXR0ZWApO1xuXG4vKiogTWFwcGluZyBvZiBDREsgdmFyaWFibGVzIHRoYXQgc2hvdWxkIGJlIHJlbmFtZWQuICovXG5leHBvcnQgY29uc3QgY2RrVmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAnY2RrLXotaW5kZXgtb3ZlcmxheS1jb250YWluZXInOiAnb3ZlcmxheS1jb250YWluZXItei1pbmRleCcsXG4gICdjZGstei1pbmRleC1vdmVybGF5JzogJ292ZXJsYXktei1pbmRleCcsXG4gICdjZGstei1pbmRleC1vdmVybGF5LWJhY2tkcm9wJzogJ292ZXJsYXktYmFja2Ryb3Atei1pbmRleCcsXG4gICdjZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wLWJhY2tncm91bmQnOiAnb3ZlcmxheS1iYWNrZHJvcC1jb2xvcicsXG59O1xuXG4vKiogTWFwcGluZyBvZiBDREsgbWl4aW5zIHRoYXQgc2hvdWxkIGJlIHJlbmFtZWQuICovXG5leHBvcnQgY29uc3QgY2RrTWl4aW5zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAnY2RrLW92ZXJsYXknOiAnb3ZlcmxheScsXG4gICdjZGstYTExeSc6ICdhMTF5LXZpc3VhbGx5LWhpZGRlbicsXG4gICdjZGstaGlnaC1jb250cmFzdCc6ICdoaWdoLWNvbnRyYXN0JyxcbiAgJ2Nkay10ZXh0LWZpZWxkLWF1dG9maWxsLWNvbG9yJzogJ3RleHQtZmllbGQtYXV0b2ZpbGwtY29sb3InLFxuICAvLyBUaGlzIG9uZSB3YXMgc3BsaXQgdXAgaW50byB0d28gbWl4aW5zIHdoaWNoIGlzIHRyaWNraWVyIHRvXG4gIC8vIG1pZ3JhdGUgc28gZm9yIG5vdyB3ZSBmb3J3YXJkIHRvIHRoZSBkZXByZWNhdGVkIHZhcmlhbnQuXG4gICdjZGstdGV4dC1maWVsZCc6ICd0ZXh0LWZpZWxkJyxcbn07XG5cbi8qKlxuICogTWF0ZXJpYWwgdmFyaWFibGVzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgcHVibGljIEFQSVxuICogYW5kIHdoaWNoIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIHRoZWlyIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZWRNYXRlcmlhbFZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgLy8gTm90ZTogdGhlcmUncyBhbHNvIGEgdXNhZ2Ugb2YgYSB2YXJpYWJsZSBjYWxsZWQgYCRwaWAsIGJ1dCB0aGUgbmFtZSBpcyBzaG9ydCBlbm91Z2ggdGhhdFxuICAvLyBpdCBtYXRjaGVzIHRoaW5ncyBsaWtlIGAkbWF0LXBpbmtgLiBEb24ndCBtaWdyYXRlIGl0IHNpbmNlIGl0J3MgdW5saWtlbHkgdG8gYmUgdXNlZC5cbiAgJ21hdC14c21hbGwnOiBgJ21heC13aWR0aDogNTk5cHgnYCxcbiAgJ21hdC1zbWFsbCc6IGAnbWF4LXdpZHRoOiA5NTlweCdgLFxuICAnbWF0LXRvZ2dsZS1wYWRkaW5nJzogJzhweCcsXG4gICdtYXQtdG9nZ2xlLXNpemUnOiAnMjBweCcsXG4gICdtYXQtbGluZWFyLW91dC1zbG93LWluLXRpbWluZy1mdW5jdGlvbic6ICdjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpJyxcbiAgJ21hdC1mYXN0LW91dC1zbG93LWluLXRpbWluZy1mdW5jdGlvbic6ICdjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpJyxcbiAgJ21hdC1mYXN0LW91dC1saW5lYXItaW4tdGltaW5nLWZ1bmN0aW9uJzogJ2N1YmljLWJlemllcigwLjQsIDAsIDEsIDEpJyxcbiAgJ21hdC1lbGV2YXRpb24tdHJhbnNpdGlvbi1kdXJhdGlvbic6ICcyODBtcycsXG4gICdtYXQtZWxldmF0aW9uLXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uJzogJ2N1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSknLFxuICAnbWF0LWVsZXZhdGlvbi1jb2xvcic6ICcjMDAwJyxcbiAgJ21hdC1lbGV2YXRpb24tb3BhY2l0eSc6ICcxJyxcbiAgJ21hdC1lbGV2YXRpb24tcHJlZml4JzogYCdtYXQtZWxldmF0aW9uLXonYCxcbiAgJ21hdC1yaXBwbGUtY29sb3Itb3BhY2l0eSc6ICcwLjEnLFxuICAnbWF0LWJhZGdlLWZvbnQtc2l6ZSc6ICcxMnB4JyxcbiAgJ21hdC1iYWRnZS1mb250LXdlaWdodCc6ICc2MDAnLFxuICAnbWF0LWJhZGdlLWRlZmF1bHQtc2l6ZSc6ICcyMnB4JyxcbiAgJ21hdC1iYWRnZS1zbWFsbC1zaXplJzogJzE2cHgnLFxuICAnbWF0LWJhZGdlLWxhcmdlLXNpemUnOiAnMjhweCcsXG4gICdtYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFyZC1oZWlnaHQnOiAnNDhweCcsXG4gICdtYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFyZC1taW5pbXVtLWhlaWdodCc6ICcyNHB4JyxcbiAgJ21hdC1idXR0b24tdG9nZ2xlLXN0YW5kYXJkLW1heGltdW0taGVpZ2h0JzogJzQ4cHgnLFxuICAnbWF0LWNoaXAtcmVtb3ZlLWZvbnQtc2l6ZSc6ICcxOHB4JyxcbiAgJ21hdC1kYXRlcGlja2VyLXNlbGVjdGVkLXRvZGF5LWJveC1zaGFkb3ctd2lkdGgnOiAnMXB4JyxcbiAgJ21hdC1kYXRlcGlja2VyLXNlbGVjdGVkLWZhZGUtYW1vdW50JzogJzAuNicsXG4gICdtYXQtZGF0ZXBpY2tlci1yYW5nZS1mYWRlLWFtb3VudCc6ICcwLjInLFxuICAnbWF0LWRhdGVwaWNrZXItdG9kYXktZmFkZS1hbW91bnQnOiAnMC4yJyxcbiAgJ21hdC1jYWxlbmRhci1ib2R5LWZvbnQtc2l6ZSc6ICcxM3B4JyxcbiAgJ21hdC1jYWxlbmRhci13ZWVrZGF5LXRhYmxlLWZvbnQtc2l6ZSc6ICcxMXB4JyxcbiAgJ21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWNvbGxhcHNlZC1oZWlnaHQnOiAnNDhweCcsXG4gICdtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1jb2xsYXBzZWQtbWluaW11bS1oZWlnaHQnOiAnMzZweCcsXG4gICdtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1jb2xsYXBzZWQtbWF4aW11bS1oZWlnaHQnOiAnNDhweCcsXG4gICdtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1leHBhbmRlZC1oZWlnaHQnOiAnNjRweCcsXG4gICdtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1leHBhbmRlZC1taW5pbXVtLWhlaWdodCc6ICc0OHB4JyxcbiAgJ21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWV4cGFuZGVkLW1heGltdW0taGVpZ2h0JzogJzY0cHgnLFxuICAnbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdHJhbnNpdGlvbic6ICcyMjVtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpJyxcbiAgJ21hdC1wYWdpbmF0b3ItaGVpZ2h0JzogJzU2cHgnLFxuICAnbWF0LXBhZ2luYXRvci1taW5pbXVtLWhlaWdodCc6ICc0MHB4JyxcbiAgJ21hdC1wYWdpbmF0b3ItbWF4aW11bS1oZWlnaHQnOiAnNTZweCcsXG4gICdtYXQtc3RlcHBlci1oZWFkZXItaGVpZ2h0JzogJzcycHgnLFxuICAnbWF0LXN0ZXBwZXItaGVhZGVyLW1pbmltdW0taGVpZ2h0JzogJzQycHgnLFxuICAnbWF0LXN0ZXBwZXItaGVhZGVyLW1heGltdW0taGVpZ2h0JzogJzcycHgnLFxuICAnbWF0LXN0ZXBwZXItbGFiZWwtaGVhZGVyLWhlaWdodCc6ICcyNHB4JyxcbiAgJ21hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbS10b3AtZ2FwJzogJzE2cHgnLFxuICAnbWF0LXN0ZXBwZXItbGFiZWwtbWluLXdpZHRoJzogJzUwcHgnLFxuICAnbWF0LXZlcnRpY2FsLXN0ZXBwZXItY29udGVudC1tYXJnaW4nOiAnMzZweCcsXG4gICdtYXQtc3RlcHBlci1zaWRlLWdhcCc6ICcyNHB4JyxcbiAgJ21hdC1zdGVwcGVyLWxpbmUtd2lkdGgnOiAnMXB4JyxcbiAgJ21hdC1zdGVwcGVyLWxpbmUtZ2FwJzogJzhweCcsXG4gICdtYXQtc3RlcC1zdWItbGFiZWwtZm9udC1zaXplJzogJzEycHgnLFxuICAnbWF0LXN0ZXAtaGVhZGVyLWljb24tc2l6ZSc6ICcxNnB4JyxcbiAgJ21hdC10b29sYmFyLW1pbmltdW0taGVpZ2h0JzogJzQ0cHgnLFxuICAnbWF0LXRvb2xiYXItaGVpZ2h0LWRlc2t0b3AnOiAnNjRweCcsXG4gICdtYXQtdG9vbGJhci1tYXhpbXVtLWhlaWdodC1kZXNrdG9wJzogJzY0cHgnLFxuICAnbWF0LXRvb2xiYXItbWluaW11bS1oZWlnaHQtZGVza3RvcCc6ICc0NHB4JyxcbiAgJ21hdC10b29sYmFyLWhlaWdodC1tb2JpbGUnOiAnNTZweCcsXG4gICdtYXQtdG9vbGJhci1tYXhpbXVtLWhlaWdodC1tb2JpbGUnOiAnNTZweCcsXG4gICdtYXQtdG9vbGJhci1taW5pbXVtLWhlaWdodC1tb2JpbGUnOiAnNDRweCcsXG4gICdtYXQtdG9vbHRpcC10YXJnZXQtaGVpZ2h0JzogJzIycHgnLFxuICAnbWF0LXRvb2x0aXAtZm9udC1zaXplJzogJzEwcHgnLFxuICAnbWF0LXRvb2x0aXAtdmVydGljYWwtcGFkZGluZyc6ICc2cHgnLFxuICAnbWF0LXRvb2x0aXAtaGFuZHNldC10YXJnZXQtaGVpZ2h0JzogJzMwcHgnLFxuICAnbWF0LXRvb2x0aXAtaGFuZHNldC1mb250LXNpemUnOiAnMTRweCcsXG4gICdtYXQtdG9vbHRpcC1oYW5kc2V0LXZlcnRpY2FsLXBhZGRpbmcnOiAnOHB4JyxcbiAgJ21hdC10cmVlLW5vZGUtaGVpZ2h0JzogJzQ4cHgnLFxuICAnbWF0LXRyZWUtbm9kZS1taW5pbXVtLWhlaWdodCc6ICcyNHB4JyxcbiAgJ21hdC10cmVlLW5vZGUtbWF4aW11bS1oZWlnaHQnOiAnNDhweCcsXG4gICd6LWluZGV4LWZhYic6ICcyMCcsXG4gICd6LWluZGV4LWRyYXdlcic6ICcxMDAnLFxuICAnZWFzZS1pbi1vdXQtY3VydmUtZnVuY3Rpb24nOiAnY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpJyxcbiAgJ3N3aWZ0LWVhc2Utb3V0LWR1cmF0aW9uJzogJzQwMG1zJyxcbiAgJ3N3aWZ0LWVhc2Utb3V0LXRpbWluZy1mdW5jdGlvbic6ICdjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKScsXG4gICdzd2lmdC1lYXNlLW91dCc6ICdhbGwgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSknLFxuICAnc3dpZnQtZWFzZS1pbi1kdXJhdGlvbic6ICczMDBtcycsXG4gICdzd2lmdC1lYXNlLWluLXRpbWluZy1mdW5jdGlvbic6ICdjdWJpYy1iZXppZXIoMC41NSwgMCwgMC41NSwgMC4yKScsXG4gICdzd2lmdC1lYXNlLWluJzogJ2FsbCAzMDBtcyBjdWJpYy1iZXppZXIoMC41NSwgMCwgMC41NSwgMC4yKScsXG4gICdzd2lmdC1lYXNlLWluLW91dC1kdXJhdGlvbic6ICc1MDBtcycsXG4gICdzd2lmdC1lYXNlLWluLW91dC10aW1pbmctZnVuY3Rpb24nOiAnY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpJyxcbiAgJ3N3aWZ0LWVhc2UtaW4tb3V0JzogJ2FsbCA1MDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSknLFxuICAnc3dpZnQtbGluZWFyLWR1cmF0aW9uJzogJzgwbXMnLFxuICAnc3dpZnQtbGluZWFyLXRpbWluZy1mdW5jdGlvbic6ICdsaW5lYXInLFxuICAnc3dpZnQtbGluZWFyJzogJ2FsbCA4MG1zIGxpbmVhcidcbn07XG4iXX0=
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import { Rule } from '@angular-devkit/schematics';
|
|
9
|
-
import { Schema } from './schema';
|
|
10
|
-
export default function (_options: Schema): Rule;
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @license
|
|
4
|
-
* Copyright Google LLC All Rights Reserved.
|
|
5
|
-
*
|
|
6
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
-
* found in the LICENSE file at https://angular.io/license
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
const core_1 = require("@angular-devkit/core");
|
|
11
|
-
const migration_1 = require("./migration");
|
|
12
|
-
function default_1(_options) {
|
|
13
|
-
return (tree) => {
|
|
14
|
-
tree.visit((path, entry) => {
|
|
15
|
-
if (core_1.extname(path) === '.scss') {
|
|
16
|
-
const content = entry === null || entry === void 0 ? void 0 : entry.content.toString();
|
|
17
|
-
const migratedContent = content ? migration_1.migrateFileContent(content, '~@angular/material/', '~@angular/cdk/', '~@angular/material', '~@angular/cdk') : content;
|
|
18
|
-
if (migratedContent && migratedContent !== content) {
|
|
19
|
-
tree.overwrite(path, migratedContent);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
exports.default = default_1;
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbWF0ZXJpYWwvc2NoZW1hdGljcy9uZy1nZW5lcmF0ZS90aGVtaW5nLWFwaS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOztBQUVILCtDQUE2QztBQUc3QywyQ0FBK0M7QUFFL0MsbUJBQXdCLFFBQWdCO0lBQ3RDLE9BQU8sQ0FBQyxJQUFVLEVBQUUsRUFBRTtRQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3pCLElBQUksY0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLE9BQU8sRUFBRTtnQkFDN0IsTUFBTSxPQUFPLEdBQUcsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDMUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyw4QkFBa0IsQ0FBQyxPQUFPLEVBQzFELHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBRTVGLElBQUksZUFBZSxJQUFJLGVBQWUsS0FBSyxPQUFPLEVBQUU7b0JBQ2xELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO2lCQUN2QzthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7QUFDSixDQUFDO0FBZEQsNEJBY0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtleHRuYW1lfSBmcm9tICdAYW5ndWxhci1kZXZraXQvY29yZSc7XG5pbXBvcnQge1J1bGUsIFRyZWV9IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9zY2hlbWF0aWNzJztcbmltcG9ydCB7U2NoZW1hfSBmcm9tICcuL3NjaGVtYSc7XG5pbXBvcnQge21pZ3JhdGVGaWxlQ29udGVudH0gZnJvbSAnLi9taWdyYXRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihfb3B0aW9uczogU2NoZW1hKTogUnVsZSB7XG4gIHJldHVybiAodHJlZTogVHJlZSkgPT4ge1xuICAgIHRyZWUudmlzaXQoKHBhdGgsIGVudHJ5KSA9PiB7XG4gICAgICBpZiAoZXh0bmFtZShwYXRoKSA9PT0gJy5zY3NzJykge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gZW50cnk/LmNvbnRlbnQudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgbWlncmF0ZWRDb250ZW50ID0gY29udGVudCA/IG1pZ3JhdGVGaWxlQ29udGVudChjb250ZW50LFxuICAgICAgICAgICd+QGFuZ3VsYXIvbWF0ZXJpYWwvJywgJ35AYW5ndWxhci9jZGsvJywgJ35AYW5ndWxhci9tYXRlcmlhbCcsICd+QGFuZ3VsYXIvY2RrJykgOiBjb250ZW50O1xuXG4gICAgICAgIGlmIChtaWdyYXRlZENvbnRlbnQgJiYgbWlncmF0ZWRDb250ZW50ICE9PSBjb250ZW50KSB7XG4gICAgICAgICAgdHJlZS5vdmVyd3JpdGUocGF0aCwgbWlncmF0ZWRDb250ZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufVxuIl19
|
|
@@ -1,223 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @license
|
|
4
|
-
* Copyright Google LLC All Rights Reserved.
|
|
5
|
-
*
|
|
6
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
-
* found in the LICENSE file at https://angular.io/license
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.migrateFileContent = void 0;
|
|
11
|
-
const config_1 = require("./config");
|
|
12
|
-
/**
|
|
13
|
-
* Migrates the content of a file to the new theming API. Note that this migration is using plain
|
|
14
|
-
* string manipulation, rather than the AST from PostCSS and the schematics string manipulation
|
|
15
|
-
* APIs, because it allows us to run it inside g3 and to avoid introducing new dependencies.
|
|
16
|
-
* @param content Content of the file.
|
|
17
|
-
* @param oldMaterialPrefix Prefix with which the old Material imports should start.
|
|
18
|
-
* Has to end with a slash. E.g. if `@import '~@angular/material/theming'` should be
|
|
19
|
-
* matched, the prefix would be `~@angular/material/`.
|
|
20
|
-
* @param oldCdkPrefix Prefix with which the old CDK imports should start.
|
|
21
|
-
* Has to end with a slash. E.g. if `@import '~@angular/cdk/overlay'` should be
|
|
22
|
-
* matched, the prefix would be `~@angular/cdk/`.
|
|
23
|
-
* @param newMaterialImportPath New import to the Material theming API (e.g. `~@angular/material`).
|
|
24
|
-
* @param newCdkImportPath New import to the CDK Sass APIs (e.g. `~@angular/cdk`).
|
|
25
|
-
*/
|
|
26
|
-
function migrateFileContent(content, oldMaterialPrefix, oldCdkPrefix, newMaterialImportPath, newCdkImportPath) {
|
|
27
|
-
const materialResults = detectImports(content, oldMaterialPrefix);
|
|
28
|
-
const cdkResults = detectImports(content, oldCdkPrefix);
|
|
29
|
-
// If there are no imports, we don't need to go further.
|
|
30
|
-
if (materialResults.imports.length > 0 || cdkResults.imports.length > 0) {
|
|
31
|
-
const initialContent = content;
|
|
32
|
-
content = migrateMaterialSymbols(content, newMaterialImportPath, materialResults.namespaces);
|
|
33
|
-
content = migrateCdkSymbols(content, newCdkImportPath, cdkResults.namespaces);
|
|
34
|
-
// Only drop the imports if any of the symbols were used within the file.
|
|
35
|
-
if (content !== initialContent) {
|
|
36
|
-
content = removeStrings(content, materialResults.imports);
|
|
37
|
-
content = removeStrings(content, cdkResults.imports);
|
|
38
|
-
content = content.replace(/^\s+/, '');
|
|
39
|
-
content = replaceRemovedVariables(content, config_1.removedMaterialVariables);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
return content;
|
|
43
|
-
}
|
|
44
|
-
exports.migrateFileContent = migrateFileContent;
|
|
45
|
-
/**
|
|
46
|
-
* Counts the number of imports with a specific prefix and extracts their namespaces.
|
|
47
|
-
* @param content File content in which to look for imports.
|
|
48
|
-
* @param prefix Prefix that the imports should start with.
|
|
49
|
-
*/
|
|
50
|
-
function detectImports(content, prefix) {
|
|
51
|
-
if (prefix[prefix.length - 1] !== '/') {
|
|
52
|
-
// Some of the logic further down makes assumptions about the import depth.
|
|
53
|
-
throw Error(`Prefix "${prefix}" has to end in a slash.`);
|
|
54
|
-
}
|
|
55
|
-
// List of `@use` namespaces from which Angular CDK/Material APIs may be referenced.
|
|
56
|
-
// Since we know that the library doesn't have any name collisions, we can treat all of these
|
|
57
|
-
// namespaces as equivalent.
|
|
58
|
-
const namespaces = [];
|
|
59
|
-
const imports = [];
|
|
60
|
-
const pattern = new RegExp(`@(import|use) +['"]${escapeRegExp(prefix)}.*['"].*;?\n`, 'g');
|
|
61
|
-
let match = null;
|
|
62
|
-
while (match = pattern.exec(content)) {
|
|
63
|
-
const [fullImport, type] = match;
|
|
64
|
-
if (type === 'use') {
|
|
65
|
-
const namespace = extractNamespaceFromUseStatement(fullImport);
|
|
66
|
-
if (namespaces.indexOf(namespace) === -1) {
|
|
67
|
-
namespaces.push(namespace);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
imports.push(fullImport);
|
|
71
|
-
}
|
|
72
|
-
return { imports, namespaces };
|
|
73
|
-
}
|
|
74
|
-
/** Migrates the Material symbls in a file. */
|
|
75
|
-
function migrateMaterialSymbols(content, importPath, namespaces) {
|
|
76
|
-
const initialContent = content;
|
|
77
|
-
const namespace = 'mat';
|
|
78
|
-
// Migrate the mixins.
|
|
79
|
-
content = renameSymbols(content, config_1.materialMixins, namespaces, mixinKeyFormatter, getMixinValueFormatter(namespace));
|
|
80
|
-
// Migrate the functions.
|
|
81
|
-
content = renameSymbols(content, config_1.materialFunctions, namespaces, functionKeyFormatter, getFunctionValueFormatter(namespace));
|
|
82
|
-
// Migrate the variables.
|
|
83
|
-
content = renameSymbols(content, config_1.materialVariables, namespaces, variableKeyFormatter, getVariableValueFormatter(namespace));
|
|
84
|
-
if (content !== initialContent) {
|
|
85
|
-
// Add an import to the new API only if any of the APIs were being used.
|
|
86
|
-
content = insertUseStatement(content, importPath, namespace);
|
|
87
|
-
}
|
|
88
|
-
return content;
|
|
89
|
-
}
|
|
90
|
-
/** Migrates the CDK symbols in a file. */
|
|
91
|
-
function migrateCdkSymbols(content, importPath, namespaces) {
|
|
92
|
-
const initialContent = content;
|
|
93
|
-
const namespace = 'cdk';
|
|
94
|
-
// Migrate the mixins.
|
|
95
|
-
content = renameSymbols(content, config_1.cdkMixins, namespaces, mixinKeyFormatter, getMixinValueFormatter(namespace));
|
|
96
|
-
// Migrate the variables.
|
|
97
|
-
content = renameSymbols(content, config_1.cdkVariables, namespaces, variableKeyFormatter, getVariableValueFormatter(namespace));
|
|
98
|
-
// Previously the CDK symbols were exposed through `material/theming`, but now we have a
|
|
99
|
-
// dedicated entrypoint for the CDK. Only add an import for it if any of the symbols are used.
|
|
100
|
-
if (content !== initialContent) {
|
|
101
|
-
content = insertUseStatement(content, importPath, namespace);
|
|
102
|
-
}
|
|
103
|
-
return content;
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Renames all Sass symbols in a file based on a pre-defined mapping.
|
|
107
|
-
* @param content Content of a file to be migrated.
|
|
108
|
-
* @param mapping Mapping between symbol names and their replacements.
|
|
109
|
-
* @param getKeyPattern Function used to turn each of the keys into a regex.
|
|
110
|
-
* @param formatValue Formats the value that will replace any matches of the pattern returned by
|
|
111
|
-
* `getKeyPattern`.
|
|
112
|
-
*/
|
|
113
|
-
function renameSymbols(content, mapping, namespaces, getKeyPattern, formatValue) {
|
|
114
|
-
// The null at the end is so that we make one last pass to cover non-namespaced symbols.
|
|
115
|
-
[...namespaces.slice().sort(sortLengthDescending), null].forEach(namespace => {
|
|
116
|
-
// Migrate the longest keys first so that our regex-based replacements don't accidentally
|
|
117
|
-
// capture keys that contain other keys. E.g. `$mat-blue` is contained within `$mat-blue-grey`.
|
|
118
|
-
Object.keys(mapping).sort(sortLengthDescending).forEach(key => {
|
|
119
|
-
const pattern = getKeyPattern(namespace, key);
|
|
120
|
-
// Sanity check since non-global regexes will only replace the first match.
|
|
121
|
-
if (pattern.flags.indexOf('g') === -1) {
|
|
122
|
-
throw Error('Replacement pattern must be global.');
|
|
123
|
-
}
|
|
124
|
-
content = content.replace(pattern, formatValue(mapping[key]));
|
|
125
|
-
});
|
|
126
|
-
});
|
|
127
|
-
return content;
|
|
128
|
-
}
|
|
129
|
-
/** Inserts an `@use` statement in a string. */
|
|
130
|
-
function insertUseStatement(content, importPath, namespace) {
|
|
131
|
-
// Sass has a limitation that all `@use` declarations have to come before `@import` so we have
|
|
132
|
-
// to find the first import and insert before it. Technically we can get away with always
|
|
133
|
-
// inserting at 0, but the file may start with something like a license header.
|
|
134
|
-
const newImportIndex = Math.max(0, content.indexOf('@import '));
|
|
135
|
-
return content.slice(0, newImportIndex) + `@use '${importPath}' as ${namespace};\n` +
|
|
136
|
-
content.slice(newImportIndex);
|
|
137
|
-
}
|
|
138
|
-
/** Formats a migration key as a Sass mixin invocation. */
|
|
139
|
-
function mixinKeyFormatter(namespace, name) {
|
|
140
|
-
// Note that adding a `(` at the end of the pattern would be more accurate, but mixin
|
|
141
|
-
// invocations don't necessarily have to include the parantheses. We could add `[(;]`,
|
|
142
|
-
// but then we won't know which character to include in the replacement string.
|
|
143
|
-
return new RegExp(`@include +${escapeRegExp((namespace ? namespace + '.' : '') + name)}`, 'g');
|
|
144
|
-
}
|
|
145
|
-
/** Returns a function that can be used to format a Sass mixin replacement. */
|
|
146
|
-
function getMixinValueFormatter(namespace) {
|
|
147
|
-
// Note that adding a `(` at the end of the pattern would be more accurate,
|
|
148
|
-
// but mixin invocations don't necessarily have to include the parantheses.
|
|
149
|
-
return name => `@include ${namespace}.${name}`;
|
|
150
|
-
}
|
|
151
|
-
/** Formats a migration key as a Sass function invocation. */
|
|
152
|
-
function functionKeyFormatter(namespace, name) {
|
|
153
|
-
return new RegExp(escapeRegExp(`${namespace ? namespace + '.' : ''}${name}(`), 'g');
|
|
154
|
-
}
|
|
155
|
-
/** Returns a function that can be used to format a Sass function replacement. */
|
|
156
|
-
function getFunctionValueFormatter(namespace) {
|
|
157
|
-
return name => `${namespace}.${name}(`;
|
|
158
|
-
}
|
|
159
|
-
/** Formats a migration key as a Sass variable. */
|
|
160
|
-
function variableKeyFormatter(namespace, name) {
|
|
161
|
-
return new RegExp(escapeRegExp(`${namespace ? namespace + '.' : ''}$${name}`), 'g');
|
|
162
|
-
}
|
|
163
|
-
/** Returns a function that can be used to format a Sass variable replacement. */
|
|
164
|
-
function getVariableValueFormatter(namespace) {
|
|
165
|
-
return name => `${namespace}.$${name}`;
|
|
166
|
-
}
|
|
167
|
-
/** Escapes special regex characters in a string. */
|
|
168
|
-
function escapeRegExp(str) {
|
|
169
|
-
return str.replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
|
|
170
|
-
}
|
|
171
|
-
/** Used with `Array.prototype.sort` to order strings in descending length. */
|
|
172
|
-
function sortLengthDescending(a, b) {
|
|
173
|
-
return b.length - a.length;
|
|
174
|
-
}
|
|
175
|
-
/** Removes all strings from another string. */
|
|
176
|
-
function removeStrings(content, toRemove) {
|
|
177
|
-
return toRemove.reduce((accumulator, current) => accumulator.replace(current, ''), content);
|
|
178
|
-
}
|
|
179
|
-
/** Parses out the namespace from a Sass `@use` statement. */
|
|
180
|
-
function extractNamespaceFromUseStatement(fullImport) {
|
|
181
|
-
const closeQuoteIndex = Math.max(fullImport.lastIndexOf(`"`), fullImport.lastIndexOf(`'`));
|
|
182
|
-
if (closeQuoteIndex > -1) {
|
|
183
|
-
const asExpression = 'as ';
|
|
184
|
-
const asIndex = fullImport.indexOf(asExpression, closeQuoteIndex);
|
|
185
|
-
// If we found an ` as ` expression, we consider the rest of the text as the namespace.
|
|
186
|
-
if (asIndex > -1) {
|
|
187
|
-
return fullImport.slice(asIndex + asExpression.length).split(';')[0].trim();
|
|
188
|
-
}
|
|
189
|
-
// Otherwise the namespace is the name of the file that is being imported.
|
|
190
|
-
const lastSlashIndex = fullImport.lastIndexOf('/', closeQuoteIndex);
|
|
191
|
-
if (lastSlashIndex > -1) {
|
|
192
|
-
const fileName = fullImport.slice(lastSlashIndex + 1, closeQuoteIndex)
|
|
193
|
-
// Sass allows for leading underscores to be omitted and it technically supports .scss.
|
|
194
|
-
.replace(/^_|(\.import)?\.scss$|\.import$/g, '');
|
|
195
|
-
// Sass ignores `/index` and infers the namespace as the next segment in the path.
|
|
196
|
-
if (fileName === 'index') {
|
|
197
|
-
const nextSlashIndex = fullImport.lastIndexOf('/', lastSlashIndex - 1);
|
|
198
|
-
if (nextSlashIndex > -1) {
|
|
199
|
-
return fullImport.slice(nextSlashIndex + 1, lastSlashIndex);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
else {
|
|
203
|
-
return fileName;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
throw Error(`Could not extract namespace from import "${fullImport}".`);
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Replaces variables that have been removed with their values.
|
|
211
|
-
* @param content Content of the file to be migrated.
|
|
212
|
-
* @param variables Mapping between variable names and their values.
|
|
213
|
-
*/
|
|
214
|
-
function replaceRemovedVariables(content, variables) {
|
|
215
|
-
Object.keys(variables).sort(sortLengthDescending).forEach(variableName => {
|
|
216
|
-
// Note that the pattern uses a negative lookahead to exclude
|
|
217
|
-
// variable assignments, because they can't be migrated.
|
|
218
|
-
const regex = new RegExp(`\\$${escapeRegExp(variableName)}(?!\\s+:|:)`, 'g');
|
|
219
|
-
content = content.replace(regex, variables[variableName]);
|
|
220
|
-
});
|
|
221
|
-
return content;
|
|
222
|
-
}
|
|
223
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlncmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21hdGVyaWFsL3NjaGVtYXRpY3MvbmctZ2VuZXJhdGUvdGhlbWluZy1hcGkvbWlncmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7OztBQUVILHFDQU9rQjtBQUVsQjs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQUMsT0FBZSxFQUNmLGlCQUF5QixFQUN6QixZQUFvQixFQUNwQixxQkFBNkIsRUFDN0IsZ0JBQXdCO0lBQ3pELE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUNsRSxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRXhELHdEQUF3RDtJQUN4RCxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDdkUsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDO1FBQy9CLE9BQU8sR0FBRyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzdGLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTlFLHlFQUF5RTtRQUN6RSxJQUFJLE9BQU8sS0FBSyxjQUFjLEVBQUU7WUFDOUIsT0FBTyxHQUFHLGFBQWEsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFELE9BQU8sR0FBRyxhQUFhLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyRCxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8s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LENBQUMsQ0FBQztpQkFDN0Q7YUFDRjtpQkFBTTtnQkFDTCxPQUFPLFFBQVEsQ0FBQzthQUNqQjtTQUNGO0tBQ0Y7SUFFRCxNQUFNLEtBQUssQ0FBQyw0Q0FBNEMsVUFBVSxJQUFJLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsdUJBQXVCLENBQUMsT0FBZSxFQUFFLFNBQWlDO0lBQ2pGLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQ3ZFLDZEQUE2RDtRQUM3RCx3REFBd0Q7UUFDeEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTSxZQUFZLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM3RSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7XG4gIG1hdGVyaWFsTWl4aW5zLFxuICBtYXRlcmlhbEZ1bmN0aW9ucyxcbiAgbWF0ZXJpYWxWYXJpYWJsZXMsXG4gIGNka01peGlucyxcbiAgY2RrVmFyaWFibGVzLFxuICByZW1vdmVkTWF0ZXJpYWxWYXJpYWJsZXNcbn0gZnJvbSAnLi9jb25maWcnO1xuXG4vKipcbiAqIE1pZ3JhdGVzIHRoZSBjb250ZW50IG9mIGEgZmlsZSB0byB0aGUgbmV3IHRoZW1pbmcgQVBJLiBOb3RlIHRoYXQgdGhpcyBtaWdyYXRpb24gaXMgdXNpbmcgcGxhaW5cbiAqIHN0cmluZyBtYW5pcHVsYXRpb24sIHJhdGhlciB0aGFuIHRoZSBBU1QgZnJvbSBQb3N0Q1NTIGFuZCB0aGUgc2NoZW1hdGljcyBzdHJpbmcgbWFuaXB1bGF0aW9uXG4gKiBBUElzLCBiZWNhdXNlIGl0IGFsbG93cyB1cyB0byBydW4gaXQgaW5zaWRlIGczIGFuZCB0byBhdm9pZCBpbnRyb2R1Y2luZyBuZXcgZGVwZW5kZW5jaWVzLlxuICogQHBhcmFtIGNvbnRlbnQgQ29udGVudCBvZiB0aGUgZmlsZS5cbiAqIEBwYXJhbSBvbGRNYXRlcmlhbFByZWZpeCBQcmVmaXggd2l0aCB3aGljaCB0aGUgb2xkIE1hdGVyaWFsIGltcG9ydHMgc2hvdWxkIHN0YXJ0LlxuICogICBIYXMgdG8gZW5kIHdpdGggYSBzbGFzaC4gRS5nLiBpZiBgQGltcG9ydCAnfkBhbmd1bGFyL21hdGVyaWFsL3RoZW1pbmcnYCBzaG91bGQgYmVcbiAqICAgbWF0Y2hlZCwgdGhlIHByZWZpeCB3b3VsZCBiZSBgfkBhbmd1bGFyL21hdGVyaWFsL2AuXG4gKiBAcGFyYW0gb2xkQ2RrUHJlZml4IFByZWZpeCB3aXRoIHdoaWNoIHRoZSBvbGQgQ0RLIGltcG9ydHMgc2hvdWxkIHN0YXJ0LlxuICogICBIYXMgdG8gZW5kIHdpdGggYSBzbGFzaC4gRS5nLiBpZiBgQGltcG9ydCAnfkBhbmd1bGFyL2Nkay9vdmVybGF5J2Agc2hvdWxkIGJlXG4gKiAgIG1hdGNoZWQsIHRoZSBwcmVmaXggd291bGQgYmUgYH5AYW5ndWxhci9jZGsvYC5cbiAqIEBwYXJhbSBuZXdNYXRlcmlhbEltcG9ydFBhdGggTmV3IGltcG9ydCB0byB0aGUgTWF0ZXJpYWwgdGhlbWluZyBBUEkgKGUuZy4gYH5AYW5ndWxhci9tYXRlcmlhbGApLlxuICogQHBhcmFtIG5ld0Nka0ltcG9ydFBhdGggTmV3IGltcG9ydCB0byB0aGUgQ0RLIFNhc3MgQVBJcyAoZS5nLiBgfkBhbmd1bGFyL2Nka2ApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWlncmF0ZUZpbGVDb250ZW50KGNvbnRlbnQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkTWF0ZXJpYWxQcmVmaXg6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkQ2RrUHJlZml4OiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld01hdGVyaWFsSW1wb3J0UGF0aDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDZGtJbXBvcnRQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRlcmlhbFJlc3VsdHMgPSBkZXRlY3RJbXBvcnRzKGNvbnRlbnQsIG9sZE1hdGVyaWFsUHJlZml4KTtcbiAgY29uc3QgY2RrUmVzdWx0cyA9IGRldGVjdEltcG9ydHMoY29udGVudCwgb2xkQ2RrUHJlZml4KTtcblxuICAvLyBJZiB0aGVyZSBhcmUgbm8gaW1wb3J0cywgd2UgZG9uJ3QgbmVlZCB0byBnbyBmdXJ0aGVyLlxuICBpZiAobWF0ZXJpYWxSZXN1bHRzLmltcG9ydHMubGVuZ3RoID4gMCB8fCBjZGtSZXN1bHRzLmltcG9ydHMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGluaXRpYWxDb250ZW50ID0gY29udGVudDtcbiAgICBjb250ZW50ID0gbWlncmF0ZU1hdGVyaWFsU3ltYm9scyhjb250ZW50LCBuZXdNYXRlcmlhbEltcG9ydFBhdGgsIG1hdGVyaWFsUmVzdWx0cy5uYW1lc3BhY2VzKTtcbiAgICBjb250ZW50ID0gbWlncmF0ZUNka1N5bWJvbHMoY29udGVudCwgbmV3Q2RrSW1wb3J0UGF0aCwgY2RrUmVzdWx0cy5uYW1lc3BhY2VzKTtcblxuICAgIC8vIE9ubHkgZHJvcCB0aGUgaW1wb3J0cyBpZiBhbnkgb2YgdGhlIHN5bWJvbHMgd2VyZSB1c2VkIHdpdGhpbiB0aGUgZmlsZS5cbiAgICBpZiAoY29udGVudCAhPT0gaW5pdGlhbENvbnRlbnQpIHtcbiAgICAgIGNvbnRlbnQgPSByZW1vdmVTdHJpbmdzKGNvbnRlbnQsIG1hdGVyaWFsUmVzdWx0cy5pbXBvcnRzKTtcbiAgICAgIGNvbnRlbnQgPSByZW1vdmVTdHJpbmdzKGNvbnRlbnQsIGNka1Jlc3VsdHMuaW1wb3J0cyk7XG4gICAgICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlKC9eXFxzKy8sICcnKTtcbiAgICAgIGNvbnRlbnQgPSByZXBsYWNlUmVtb3ZlZFZhcmlhYmxlcyhjb250ZW50LCByZW1vdmVkTWF0ZXJpYWxWYXJpYWJsZXMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb250ZW50O1xufVxuXG4vKipcbiAqIENvdW50cyB0aGUgbnVtYmVyIG9mIGltcG9ydHMgd2l0aCBhIHNwZWNpZmljIHByZWZpeCBhbmQgZXh0cmFjdHMgdGhlaXIgbmFtZXNwYWNlcy5cbiAqIEBwYXJhbSBjb250ZW50IEZpbGUgY29udGVudCBpbiB3aGljaCB0byBsb29rIGZvciBpbXBvcnRzLlxuICogQHBhcmFtIHByZWZpeCBQcmVmaXggdGhhdCB0aGUgaW1wb3J0cyBzaG91bGQgc3RhcnQgd2l0aC5cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0SW1wb3J0cyhjb250ZW50OiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKToge2ltcG9ydHM6IHN0cmluZ1tdLCBuYW1lc3BhY2VzOiBzdHJpbmdbXX0ge1xuICBpZiAocHJlZml4W3ByZWZpeC5sZW5ndGggLSAxXSAhPT0gJy8nKSB7XG4gICAgLy8gU29tZSBvZiB0aGUgbG9naWMgZnVydGhlciBkb3duIG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSBpbXBvcnQgZGVwdGguXG4gICAgdGhyb3cgRXJyb3IoYFByZWZpeCBcIiR7cHJlZml4fVwiIGhhcyB0byBlbmQgaW4gYSBzbGFzaC5gKTtcbiAgfVxuXG4gIC8vIExpc3Qgb2YgYEB1c2VgIG5hbWVzcGFjZXMgZnJvbSB3aGljaCBBbmd1bGFyIENESy9NYXRlcmlhbCBBUElzIG1heSBiZSByZWZlcmVuY2VkLlxuICAvLyBTaW5jZSB3ZSBrbm93IHRoYXQgdGhlIGxpYnJhcnkgZG9lc24ndCBoYXZlIGFueSBuYW1lIGNvbGxpc2lvbnMsIHdlIGNhbiB0cmVhdCBhbGwgb2YgdGhlc2VcbiAgLy8gbmFtZXNwYWNlcyBhcyBlcXVpdmFsZW50LlxuICBjb25zdCBuYW1lc3BhY2VzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBpbXBvcnRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChgQChpbXBvcnR8dXNlKSArWydcIl0ke2VzY2FwZVJlZ0V4cChwcmVmaXgpfS4qWydcIl0uKjs/XFxuYCwgJ2cnKTtcbiAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsID0gbnVsbDtcblxuICB3aGlsZSAobWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoY29udGVudCkpIHtcbiAgICBjb25zdCBbZnVsbEltcG9ydCwgdHlwZV0gPSBtYXRjaDtcblxuICAgIGlmICh0eXBlID09PSAndXNlJykge1xuICAgICAgY29uc3QgbmFtZXNwYWNlID0gZXh0cmFjdE5hbWVzcGFjZUZyb21Vc2VTdGF0ZW1lbnQoZnVsbEltcG9ydCk7XG5cbiAgICAgIGlmIChuYW1lc3BhY2VzLmluZGV4T2YobmFtZXNwYWNlKSA9PT0gLTEpIHtcbiAgICAgICAgbmFtZXNwYWNlcy5wdXNoKG5hbWVzcGFjZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW1wb3J0cy5wdXNoKGZ1bGxJbXBvcnQpO1xuICB9XG5cbiAgcmV0dXJuIHtpbXBvcnRzLCBuYW1lc3BhY2VzfTtcbn1cblxuLyoqIE1pZ3JhdGVzIHRoZSBNYXRlcmlhbCBzeW1ibHMgaW4gYSBmaWxlLiAqL1xuZnVuY3Rpb24gbWlncmF0ZU1hdGVyaWFsU3ltYm9scyhjb250ZW50OiBzdHJpbmcsIGltcG9ydFBhdGg6IHN0cmluZywgbmFtZXNwYWNlczogc3RyaW5nW10pOiBzdHJpbmcge1xuICBjb25zdCBpbml0aWFsQ29udGVudCA9IGNvbnRlbnQ7XG4gIGNvbnN0IG5hbWVzcGFjZSA9ICdtYXQnO1xuXG4gIC8vIE1pZ3JhdGUgdGhlIG1peGlucy5cbiAgY29udGVudCA9IHJlbmFtZVN5bWJvbHMoY29udGVudCwgbWF0ZXJpYWxNaXhpbnMsIG5hbWVzcGFjZXMsIG1peGluS2V5Rm9ybWF0dGVyLFxuICAgIGdldE1peGluVmFsdWVGb3JtYXR0ZXIobmFtZXNwYWNlKSk7XG5cbiAgLy8gTWlncmF0ZSB0aGUgZnVuY3Rpb25zLlxuICBjb250ZW50ID0gcmVuYW1lU3ltYm9scyhjb250ZW50LCBtYXRlcmlhbEZ1bmN0aW9ucywgbmFtZXNwYWNlcywgZnVuY3Rpb25LZXlGb3JtYXR0ZXIsXG4gICAgZ2V0RnVuY3Rpb25WYWx1ZUZvcm1hdHRlcihuYW1lc3BhY2UpKTtcblxuICAvLyBNaWdyYXRlIHRoZSB2YXJpYWJsZXMuXG4gIGNvbnRlbnQgPSByZW5hbWVTeW1ib2xzKGNvbnRlbnQsIG1hdGVyaWFsVmFyaWFibGVzLCBuYW1lc3BhY2VzLCB2YXJpYWJsZUtleUZvcm1hdHRlcixcbiAgICBnZXRWYXJpYWJsZVZhbHVlRm9ybWF0dGVyKG5hbWVzcGFjZSkpO1xuXG4gIGlmIChjb250ZW50ICE9PSBpbml0aWFsQ29udGVudCkge1xuICAgIC8vIEFkZCBhbiBpbXBvcnQgdG8gdGhlIG5ldyBBUEkgb25seSBpZiBhbnkgb2YgdGhlIEFQSXMgd2VyZSBiZWluZyB1c2VkLlxuICAgIGNvbnRlbnQgPSBpbnNlcnRVc2VTdGF0ZW1lbnQoY29udGVudCwgaW1wb3J0UGF0aCwgbmFtZXNwYWNlKTtcbiAgfVxuXG4gIHJldHVybiBjb250ZW50O1xufVxuXG4vKiogTWlncmF0ZXMgdGhlIENESyBzeW1ib2xzIGluIGEgZmlsZS4gKi9cbmZ1bmN0aW9uIG1pZ3JhdGVDZGtTeW1ib2xzKGNvbnRlbnQ6IHN0cmluZywgaW1wb3J0UGF0aDogc3RyaW5nLCBuYW1lc3BhY2VzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGNvbnN0IGluaXRpYWxDb250ZW50ID0gY29udGVudDtcbiAgY29uc3QgbmFtZXNwYWNlID0gJ2Nkayc7XG5cbiAgLy8gTWlncmF0ZSB0aGUgbWl4aW5zLlxuICBjb250ZW50ID0gcmVuYW1lU3ltYm9scyhjb250ZW50LCBjZGtNaXhpbnMsIG5hbWVzcGFjZXMsIG1peGluS2V5Rm9ybWF0dGVyLFxuICAgIGdldE1peGluVmFsdWVGb3JtYXR0ZXIobmFtZXNwYWNlKSk7XG5cbiAgLy8gTWlncmF0ZSB0aGUgdmFyaWFibGVzLlxuICBjb250ZW50ID0gcmVuYW1lU3ltYm9scyhjb250ZW50LCBjZGtWYXJpYWJsZXMsIG5hbWVzcGFjZXMsIHZhcmlhYmxlS2V5Rm9ybWF0dGVyLFxuICAgIGdldFZhcmlhYmxlVmFsdWVGb3JtYXR0ZXIobmFtZXNwYWNlKSk7XG5cbiAgLy8gUHJldmlvdXNseSB0aGUgQ0RLIHN5bWJvbHMgd2VyZSBleHBvc2VkIHRocm91Z2ggYG1hdGVyaWFsL3RoZW1pbmdgLCBidXQgbm93IHdlIGhhdmUgYVxuICAvLyBkZWRpY2F0ZWQgZW50cnlwb2ludCBmb3IgdGhlIENESy4gT25seSBhZGQgYW4gaW1wb3J0IGZvciBpdCBpZiBhbnkgb2YgdGhlIHN5bWJvbHMgYXJlIHVzZWQuXG4gIGlmIChjb250ZW50ICE9PSBpbml0aWFsQ29udGVudCkge1xuICAgIGNvbnRlbnQgPSBpbnNlcnRVc2VTdGF0ZW1lbnQoY29udGVudCwgaW1wb3J0UGF0aCwgbmFtZXNwYWNlKTtcbiAgfVxuXG4gIHJldHVybiBjb250ZW50O1xufVxuXG4vKipcbiAqIFJlbmFtZXMgYWxsIFNhc3Mgc3ltYm9scyBpbiBhIGZpbGUgYmFzZWQgb24gYSBwcmUtZGVmaW5lZCBtYXBwaW5nLlxuICogQHBhcmFtIGNvbnRlbnQgQ29udGVudCBvZiBhIGZpbGUgdG8gYmUgbWlncmF0ZWQuXG4gKiBAcGFyYW0gbWFwcGluZyBNYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCB0aGVpciByZXBsYWNlbWVudHMuXG4gKiBAcGFyYW0gZ2V0S2V5UGF0dGVybiBGdW5jdGlvbiB1c2VkIHRvIHR1cm4gZWFjaCBvZiB0aGUga2V5cyBpbnRvIGEgcmVnZXguXG4gKiBAcGFyYW0gZm9ybWF0VmFsdWUgRm9ybWF0cyB0aGUgdmFsdWUgdGhhdCB3aWxsIHJlcGxhY2UgYW55IG1hdGNoZXMgb2YgdGhlIHBhdHRlcm4gcmV0dXJuZWQgYnlcbiAqICBgZ2V0S2V5UGF0dGVybmAuXG4gKi9cbmZ1bmN0aW9uIHJlbmFtZVN5bWJvbHMoY29udGVudDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzOiBzdHJpbmdbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgZ2V0S2V5UGF0dGVybjogKG5hbWVzcGFjZTogc3RyaW5nfG51bGwsIGtleTogc3RyaW5nKSA9PiBSZWdFeHAsXG4gICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdFZhbHVlOiAoa2V5OiBzdHJpbmcpID0+IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFRoZSBudWxsIGF0IHRoZSBlbmQgaXMgc28gdGhhdCB3ZSBtYWtlIG9uZSBsYXN0IHBhc3MgdG8gY292ZXIgbm9uLW5hbWVzcGFjZWQgc3ltYm9scy5cbiAgWy4uLm5hbWVzcGFjZXMuc2xpY2UoKS5zb3J0KHNvcnRMZW5ndGhEZXNjZW5kaW5nKSwgbnVsbF0uZm9yRWFjaChuYW1lc3BhY2UgPT4ge1xuICAgIC8vIE1pZ3JhdGUgdGhlIGxvbmdlc3Qga2V5cyBmaXJzdCBzbyB0aGF0IG91ciByZWdleC1iYXNlZCByZXBsYWNlbWVudHMgZG9uJ3QgYWNjaWRlbnRhbGx5XG4gICAgLy8gY2FwdHVyZSBrZXlzIHRoYXQgY29udGFpbiBvdGhlciBrZXlzLiBFLmcuIGAkbWF0LWJsdWVgIGlzIGNvbnRhaW5lZCB3aXRoaW4gYCRtYXQtYmx1ZS1ncmV5YC5cbiAgICBPYmplY3Qua2V5cyhtYXBwaW5nKS5zb3J0KHNvcnRMZW5ndGhEZXNjZW5kaW5nKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBjb25zdCBwYXR0ZXJuID0gZ2V0S2V5UGF0dGVybihuYW1lc3BhY2UsIGtleSk7XG5cbiAgICAgIC8vIFNhbml0eSBjaGVjayBzaW5jZSBub24tZ2xvYmFsIHJlZ2V4ZXMgd2lsbCBvbmx5IHJlcGxhY2UgdGhlIGZpcnN0IG1hdGNoLlxuICAgICAgaWYgKHBhdHRlcm4uZmxhZ3MuaW5kZXhPZignZycpID09PSAtMSkge1xuICAgICAgICB0aHJvdyBFcnJvcignUmVwbGFjZW1lbnQgcGF0dGVybiBtdXN0IGJlIGdsb2JhbC4nKTtcbiAgICAgIH1cblxuICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZShwYXR0ZXJuLCBmb3JtYXRWYWx1ZShtYXBwaW5nW2tleV0pKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbi8qKiBJbnNlcnRzIGFuIGBAdXNlYCBzdGF0ZW1lbnQgaW4gYSBzdHJpbmcuICovXG5mdW5jdGlvbiBpbnNlcnRVc2VTdGF0ZW1lbnQoY29udGVudDogc3RyaW5nLCBpbXBvcnRQYXRoOiBzdHJpbmcsIG5hbWVzcGFjZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gU2FzcyBoYXMgYSBsaW1pdGF0aW9uIHRoYXQgYWxsIGBAdXNlYCBkZWNsYXJhdGlvbnMgaGF2ZSB0byBjb21lIGJlZm9yZSBgQGltcG9ydGAgc28gd2UgaGF2ZVxuICAvLyB0byBmaW5kIHRoZSBmaXJzdCBpbXBvcnQgYW5kIGluc2VydCBiZWZvcmUgaXQuIFRlY2huaWNhbGx5IHdlIGNhbiBnZXQgYXdheSB3aXRoIGFsd2F5c1xuICAvLyBpbnNlcnRpbmcgYXQgMCwgYnV0IHRoZSBmaWxlIG1heSBzdGFydCB3aXRoIHNvbWV0aGluZyBsaWtlIGEgbGljZW5zZSBoZWFkZXIuXG4gIGNvbnN0IG5ld0ltcG9ydEluZGV4ID0gTWF0aC5tYXgoMCwgY29udGVudC5pbmRleE9mKCdAaW1wb3J0ICcpKTtcbiAgcmV0dXJuIGNvbnRlbnQuc2xpY2UoMCwgbmV3SW1wb3J0SW5kZXgpICsgYEB1c2UgJyR7aW1wb3J0UGF0aH0nIGFzICR7bmFtZXNwYWNlfTtcXG5gICtcbiAgICAgICAgIGNvbnRlbnQuc2xpY2UobmV3SW1wb3J0SW5kZXgpO1xufVxuXG4vKiogRm9ybWF0cyBhIG1pZ3JhdGlvbiBrZXkgYXMgYSBTYXNzIG1peGluIGludm9jYXRpb24uICovXG5mdW5jdGlvbiBtaXhpbktleUZvcm1hdHRlcihuYW1lc3BhY2U6IHN0cmluZ3xudWxsLCBuYW1lOiBzdHJpbmcpOiBSZWdFeHAge1xuICAvLyBOb3RlIHRoYXQgYWRkaW5nIGEgYChgIGF0IHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4gd291bGQgYmUgbW9yZSBhY2N1cmF0ZSwgYnV0IG1peGluXG4gIC8vIGludm9jYXRpb25zIGRvbid0IG5lY2Vzc2FyaWx5IGhhdmUgdG8gaW5jbHVkZSB0aGUgcGFyYW50aGVzZXMuIFdlIGNvdWxkIGFkZCBgWyg7XWAsXG4gIC8vIGJ1dCB0aGVuIHdlIHdvbid0IGtub3cgd2hpY2ggY2hhcmFjdGVyIHRvIGluY2x1ZGUgaW4gdGhlIHJlcGxhY2VtZW50IHN0cmluZy5cbiAgcmV0dXJuIG5ldyBSZWdFeHAoYEBpbmNsdWRlICske2VzY2FwZVJlZ0V4cCgobmFtZXNwYWNlID8gbmFtZXNwYWNlICsgJy4nIDogJycpICsgbmFtZSl9YCwgJ2cnKTtcbn1cblxuLyoqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGZvcm1hdCBhIFNhc3MgbWl4aW4gcmVwbGFjZW1lbnQuICovXG5mdW5jdGlvbiBnZXRNaXhpblZhbHVlRm9ybWF0dGVyKG5hbWVzcGFjZTogc3RyaW5nKTogKG5hbWU6IHN0cmluZykgPT4gc3RyaW5nIHtcbiAgLy8gTm90ZSB0aGF0IGFkZGluZyBhIGAoYCBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuIHdvdWxkIGJlIG1vcmUgYWNjdXJhdGUsXG4gIC8vIGJ1dCBtaXhpbiBpbnZvY2F0aW9ucyBkb24ndCBuZWNlc3NhcmlseSBoYXZlIHRvIGluY2x1ZGUgdGhlIHBhcmFudGhlc2VzLlxuICByZXR1cm4gbmFtZSA9PiBgQGluY2x1ZGUgJHtuYW1lc3BhY2V9LiR7bmFtZX1gO1xufVxuXG4vKiogRm9ybWF0cyBhIG1pZ3JhdGlvbiBrZXkgYXMgYSBTYXNzIGZ1bmN0aW9uIGludm9jYXRpb24uICovXG5mdW5jdGlvbiBmdW5jdGlvbktleUZvcm1hdHRlcihuYW1lc3BhY2U6IHN0cmluZ3xudWxsLCBuYW1lOiBzdHJpbmcpOiBSZWdFeHAge1xuICByZXR1cm4gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeHAoYCR7bmFtZXNwYWNlID8gbmFtZXNwYWNlICsgJy4nIDogJyd9JHtuYW1lfShgKSwgJ2cnKTtcbn1cblxuLyoqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGZvcm1hdCBhIFNhc3MgZnVuY3Rpb24gcmVwbGFjZW1lbnQuICovXG5mdW5jdGlvbiBnZXRGdW5jdGlvblZhbHVlRm9ybWF0dGVyKG5hbWVzcGFjZTogc3RyaW5nKTogKG5hbWU6IHN0cmluZykgPT4gc3RyaW5nIHtcbiAgcmV0dXJuIG5hbWUgPT4gYCR7bmFtZXNwYWNlfS4ke25hbWV9KGA7XG59XG5cbi8qKiBGb3JtYXRzIGEgbWlncmF0aW9uIGtleSBhcyBhIFNhc3MgdmFyaWFibGUuICovXG5mdW5jdGlvbiB2YXJpYWJsZUtleUZvcm1hdHRlcihuYW1lc3BhY2U6IHN0cmluZ3xudWxsLCBuYW1lOiBzdHJpbmcpOiBSZWdFeHAge1xuICByZXR1cm4gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeHAoYCR7bmFtZXNwYWNlID8gbmFtZXNwYWNlICsgJy4nIDogJyd9JCR7bmFtZX1gKSwgJ2cnKTtcbn1cblxuLyoqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGZvcm1hdCBhIFNhc3MgdmFyaWFibGUgcmVwbGFjZW1lbnQuICovXG5mdW5jdGlvbiBnZXRWYXJpYWJsZVZhbHVlRm9ybWF0dGVyKG5hbWVzcGFjZTogc3RyaW5nKTogKG5hbWU6IHN0cmluZykgPT4gc3RyaW5nIHtcbiAgcmV0dXJuIG5hbWUgPT4gYCR7bmFtZXNwYWNlfS4kJHtuYW1lfWA7XG59XG5cbi8qKiBFc2NhcGVzIHNwZWNpYWwgcmVnZXggY2hhcmFjdGVycyBpbiBhIHN0cmluZy4gKi9cbmZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvKFsuKis/Xj0hOiR7fSgpfFtcXF1cXC9cXFxcXSkvZywgJ1xcXFwkMScpO1xufVxuXG4vKiogVXNlZCB3aXRoIGBBcnJheS5wcm90b3R5cGUuc29ydGAgdG8gb3JkZXIgc3RyaW5ncyBpbiBkZXNjZW5kaW5nIGxlbmd0aC4gKi9cbmZ1bmN0aW9uIHNvcnRMZW5ndGhEZXNjZW5kaW5nKGE6IHN0cmluZywgYjogc3RyaW5nKSB7XG4gIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xufVxuXG4vKiogUmVtb3ZlcyBhbGwgc3RyaW5ncyBmcm9tIGFub3RoZXIgc3RyaW5nLiAqL1xuZnVuY3Rpb24gcmVtb3ZlU3RyaW5ncyhjb250ZW50OiBzdHJpbmcsIHRvUmVtb3ZlOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiB0b1JlbW92ZS5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50KSA9PiBhY2N1bXVsYXRvci5yZXBsYWNlKGN1cnJlbnQsICcnKSwgY29udGVudCk7XG59XG5cbi8qKiBQYXJzZXMgb3V0IHRoZSBuYW1lc3BhY2UgZnJvbSBhIFNhc3MgYEB1c2VgIHN0YXRlbWVudC4gKi9cbmZ1bmN0aW9uIGV4dHJhY3ROYW1lc3BhY2VGcm9tVXNlU3RhdGVtZW50KGZ1bGxJbXBvcnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGNsb3NlUXVvdGVJbmRleCA9IE1hdGgubWF4KGZ1bGxJbXBvcnQubGFzdEluZGV4T2YoYFwiYCksIGZ1bGxJbXBvcnQubGFzdEluZGV4T2YoYCdgKSk7XG5cbiAgaWYgKGNsb3NlUXVvdGVJbmRleCA+IC0xKSB7XG4gICAgY29uc3QgYXNFeHByZXNzaW9uID0gJ2FzICc7XG4gICAgY29uc3QgYXNJbmRleCA9IGZ1bGxJbXBvcnQuaW5kZXhPZihhc0V4cHJlc3Npb24sIGNsb3NlUXVvdGVJbmRleCk7XG5cbiAgICAvLyBJZiB3ZSBmb3VuZCBhbiBgIGFzIGAgZXhwcmVzc2lvbiwgd2UgY29uc2lkZXIgdGhlIHJlc3Qgb2YgdGhlIHRleHQgYXMgdGhlIG5hbWVzcGFjZS5cbiAgICBpZiAoYXNJbmRleCA+IC0xKSB7XG4gICAgICByZXR1cm4gZnVsbEltcG9ydC5zbGljZShhc0luZGV4ICsgYXNFeHByZXNzaW9uLmxlbmd0aCkuc3BsaXQoJzsnKVswXS50cmltKCk7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlIHRoZSBuYW1lc3BhY2UgaXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdGhhdCBpcyBiZWluZyBpbXBvcnRlZC5cbiAgICBjb25zdCBsYXN0U2xhc2hJbmRleCA9IGZ1bGxJbXBvcnQubGFzdEluZGV4T2YoJy8nLCBjbG9zZVF1b3RlSW5kZXgpO1xuXG4gICAgaWYgKGxhc3RTbGFzaEluZGV4ID4gLTEpIHtcbiAgICAgIGNvbnN0IGZpbGVOYW1lID0gZnVsbEltcG9ydC5zbGljZShsYXN0U2xhc2hJbmRleCArIDEsIGNsb3NlUXVvdGVJbmRleClcbiAgICAgICAgLy8gU2FzcyBhbGxvd3MgZm9yIGxlYWRpbmcgdW5kZXJzY29yZXMgdG8gYmUgb21pdHRlZCBhbmQgaXQgdGVjaG5pY2FsbHkgc3VwcG9ydHMgLnNjc3MuXG4gICAgICAgIC5yZXBsYWNlKC9eX3woXFwuaW1wb3J0KT9cXC5zY3NzJHxcXC5pbXBvcnQkL2csICcnKTtcblxuICAgICAgLy8gU2FzcyBpZ25vcmVzIGAvaW5kZXhgIGFuZCBpbmZlcnMgdGhlIG5hbWVzcGFjZSBhcyB0aGUgbmV4dCBzZWdtZW50IGluIHRoZSBwYXRoLlxuICAgICAgaWYgKGZpbGVOYW1lID09PSAnaW5kZXgnKSB7XG4gICAgICAgIGNvbnN0IG5leHRTbGFzaEluZGV4ID0gZnVsbEltcG9ydC5sYXN0SW5kZXhPZignLycsIGxhc3RTbGFzaEluZGV4IC0gMSk7XG5cbiAgICAgICAgaWYgKG5leHRTbGFzaEluZGV4ID4gLTEpIHtcbiAgICAgICAgICByZXR1cm4gZnVsbEltcG9ydC5zbGljZShuZXh0U2xhc2hJbmRleCArIDEsIGxhc3RTbGFzaEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZpbGVOYW1lO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRocm93IEVycm9yKGBDb3VsZCBub3QgZXh0cmFjdCBuYW1lc3BhY2UgZnJvbSBpbXBvcnQgXCIke2Z1bGxJbXBvcnR9XCIuYCk7XG59XG5cbi8qKlxuICogUmVwbGFjZXMgdmFyaWFibGVzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgd2l0aCB0aGVpciB2YWx1ZXMuXG4gKiBAcGFyYW0gY29udGVudCBDb250ZW50IG9mIHRoZSBmaWxlIHRvIGJlIG1pZ3JhdGVkLlxuICogQHBhcmFtIHZhcmlhYmxlcyBNYXBwaW5nIGJldHdlZW4gdmFyaWFibGUgbmFtZXMgYW5kIHRoZWlyIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gcmVwbGFjZVJlbW92ZWRWYXJpYWJsZXMoY29udGVudDogc3RyaW5nLCB2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBzdHJpbmcge1xuICBPYmplY3Qua2V5cyh2YXJpYWJsZXMpLnNvcnQoc29ydExlbmd0aERlc2NlbmRpbmcpLmZvckVhY2godmFyaWFibGVOYW1lID0+IHtcbiAgICAvLyBOb3RlIHRoYXQgdGhlIHBhdHRlcm4gdXNlcyBhIG5lZ2F0aXZlIGxvb2thaGVhZCB0byBleGNsdWRlXG4gICAgLy8gdmFyaWFibGUgYXNzaWdubWVudHMsIGJlY2F1c2UgdGhleSBjYW4ndCBiZSBtaWdyYXRlZC5cbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYFxcXFwkJHtlc2NhcGVSZWdFeHAodmFyaWFibGVOYW1lKX0oPyFcXFxccys6fDopYCwgJ2cnKTtcbiAgICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlKHJlZ2V4LCB2YXJpYWJsZXNbdmFyaWFibGVOYW1lXSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb250ZW50O1xufVxuIl19
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @license
|
|
4
|
-
* Copyright Google LLC All Rights Reserved.
|
|
5
|
-
*
|
|
6
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
-
* found in the LICENSE file at https://angular.io/license
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21hdGVyaWFsL3NjaGVtYXRpY3MvbmctZ2VuZXJhdGUvdGhlbWluZy1hcGkvc2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuZXhwb3J0IGludGVyZmFjZSBTY2hlbWEge31cbiJdfQ==
|