ngx-material-entity 16.0.4 → 16.0.6
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/README.md +4 -4
- package/classes/base.builder.d.ts +0 -4
- package/classes/entity.model.d.ts +7 -0
- package/components/confirm-dialog/confirm-dialog-data.d.ts +0 -3
- package/components/confirm-dialog/confirm-dialog.component.d.ts +6 -0
- package/components/create-page/create-data.route.d.ts +16 -0
- package/components/create-page/create-page.component.d.ts +147 -0
- package/components/create-page/page-create-data.builder.d.ts +18 -0
- package/components/edit-page/edit-data.route.d.ts +3 -0
- package/components/edit-page/edit-page.component.d.ts +34 -9
- package/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.d.ts +3 -3
- package/components/input/array/array-string-chips-input/array-string-chips-input.component.d.ts +0 -2
- package/components/input/array/array-table.class.d.ts +0 -1
- package/components/input/base-input.component.d.ts +5 -2
- package/components/input/boolean/boolean-checkbox-input/boolean-checkbox-input.component.d.ts +0 -1
- package/components/input/boolean/boolean-toggle-input/boolean-toggle-input.component.d.ts +0 -1
- package/components/input/date/date-range-input/date-range-input.component.d.ts +2 -6
- package/components/input/date/date-time-input/date-time-input.component.d.ts +0 -1
- package/components/input/file/file-input/file-input.component.d.ts +1 -0
- package/components/input/input.component.d.ts +160 -38
- package/components/input/input.module.d.ts +48 -47
- package/components/input/number/number-input/number-input.component.d.ts +1 -1
- package/components/input/relations/references-many-input/references-many-input.component.d.ts +0 -1
- package/components/input/string/string-autocomplete-input/string-autocomplete-input.component.d.ts +0 -1
- package/components/input/string/string-input/string-input.component.d.ts +1 -1
- package/components/input/string/string-textbox-input/string-textbox-input.component.d.ts +1 -1
- package/components/table/create-dialog/{create-dialog-data.builder.d.ts → create-data.builder.d.ts} +7 -7
- package/components/table/create-dialog/create-entity-dialog-data.builder.d.ts +11 -13
- package/components/table/create-dialog/create-entity-dialog-data.d.ts +7 -9
- package/components/table/create-dialog/create-entity-dialog.component.d.ts +26 -5
- package/components/table/default.actions.d.ts +0 -4
- package/components/table/display-column-value/base-display-column-value.component.d.ts +3 -0
- package/components/table/display-column-value/display-column-value.component.d.ts +9 -0
- package/components/table/edit-dialog/edit-data.builder.d.ts +3 -3
- package/components/table/edit-dialog/edit-entity-data.d.ts +2 -4
- package/components/table/edit-dialog/edit-entity-dialog.component.d.ts +34 -4
- package/components/table/edit-dialog/edit-entity.builder.d.ts +3 -5
- package/components/table/table-data.builder.d.ts +6 -8
- package/components/table/table-data.d.ts +8 -18
- package/components/table/table.component.d.ts +35 -9
- package/components/tooltip/tooltip.component.d.ts +3 -0
- package/decorators/array/array-decorator-internal.data.d.ts +3 -2
- package/decorators/array/array-decorator.data.d.ts +6 -17
- package/decorators/array/array.decorator.d.ts +0 -1
- package/decorators/base/base-property.decorator.d.ts +0 -1
- package/decorators/base/property-decorator-internal.data.d.ts +0 -2
- package/decorators/base/property-decorator.data.d.ts +0 -10
- package/decorators/boolean/boolean-decorator.data.d.ts +0 -2
- package/decorators/boolean/boolean.decorator.d.ts +0 -1
- package/decorators/custom/custom-decorator.data.d.ts +0 -2
- package/decorators/custom/custom.decorator.d.ts +0 -1
- package/decorators/date/date-decorator.data.d.ts +0 -3
- package/decorators/date/date.decorator.d.ts +0 -1
- package/decorators/file/file-decorator.data.d.ts +0 -6
- package/decorators/file/file.decorator.d.ts +0 -1
- package/decorators/has-many/has-many-decorator-internal.data.d.ts +2 -4
- package/decorators/has-many/has-many-decorator.data.d.ts +2 -6
- package/decorators/has-many/has-many.decorator.d.ts +0 -1
- package/decorators/number/number-decorator-internal.data.d.ts +0 -1
- package/decorators/number/number.decorator.d.ts +0 -1
- package/decorators/object/object.decorator.d.ts +0 -1
- package/decorators/references-many/references-many-decorator-internal.data.d.ts +0 -1
- package/decorators/references-many/references-many-decorator.data.d.ts +0 -5
- package/decorators/references-many/references-many.decorator.d.ts +0 -1
- package/decorators/references-one/references-one.decorator.d.ts +0 -1
- package/decorators/string/string-decorator-internal.data.d.ts +1 -0
- package/decorators/string/string-decorator.data.d.ts +4 -2
- package/decorators/string/string.decorator.d.ts +0 -1
- package/default-global-configuration-values.d.ts +12 -0
- package/directives/drag-drop.directive.d.ts +0 -3
- package/directives/included-in.directive.d.ts +14 -0
- package/directives/number.directive.d.ts +0 -1
- package/encapsulation/js-2-xml.utilities.d.ts +0 -1
- package/encapsulation/jszip.utilities.d.ts +0 -1
- package/encapsulation/lodash.utilities.d.ts +2 -11
- package/encapsulation/reflect.utilities.d.ts +0 -7
- package/encapsulation/uuid.utilities.d.ts +0 -1
- package/esm2022/classes/base.builder.mjs +3 -6
- package/esm2022/classes/entity.model.mjs +1 -1
- package/esm2022/components/confirm-dialog/confirm-dialog-data.builder.mjs +1 -3
- package/esm2022/components/confirm-dialog/confirm-dialog-data.mjs +1 -1
- package/esm2022/components/confirm-dialog/confirm-dialog.component.mjs +9 -3
- package/esm2022/components/create-page/create-data.route.mjs +11 -0
- package/esm2022/components/create-page/create-page.component.mjs +275 -0
- package/esm2022/components/create-page/page-create-data.builder.mjs +30 -0
- package/esm2022/components/edit-page/edit-data.route.mjs +4 -1
- package/esm2022/components/edit-page/edit-page.component.mjs +43 -18
- package/esm2022/components/edit-page/page-edit-data.builder.mjs +3 -3
- package/esm2022/components/input/array/array-date-input/array-date-input.component.mjs +11 -10
- package/esm2022/components/input/array/array-date-range-input/array-date-range-input.component.mjs +10 -9
- package/esm2022/components/input/array/array-date-time-input/array-date-time-input.component.mjs +13 -12
- package/esm2022/components/input/array/array-string-autocomplete-chips/array-string-autocomplete-chips.component.mjs +17 -13
- package/esm2022/components/input/array/array-string-chips-input/array-string-chips-input.component.mjs +8 -9
- package/esm2022/components/input/array/array-table.class.mjs +4 -6
- package/esm2022/components/input/base-input.component.mjs +8 -4
- package/esm2022/components/input/boolean/boolean-checkbox-input/boolean-checkbox-input.component.mjs +8 -11
- package/esm2022/components/input/boolean/boolean-dropdown-input/boolean-dropdown-input.component.mjs +8 -7
- package/esm2022/components/input/boolean/boolean-toggle-input/boolean-toggle-input.component.mjs +6 -9
- package/esm2022/components/input/custom/custom.component.mjs +2 -1
- package/esm2022/components/input/date/date-input/date-input.component.mjs +8 -7
- package/esm2022/components/input/date/date-range-input/date-range-input.component.mjs +38 -43
- package/esm2022/components/input/date/date-time-input/date-time-input.component.mjs +10 -10
- package/esm2022/components/input/file/file-default-input/file-default-input.component.mjs +4 -3
- package/esm2022/components/input/file/file-image-input/file-image-input.component.mjs +6 -5
- package/esm2022/components/input/file/file-input/file-input.component.mjs +9 -6
- package/esm2022/components/input/input.component.mjs +225 -91
- package/esm2022/components/input/input.module.mjs +84 -81
- package/esm2022/components/input/number/number-dropdown-input/number-dropdown-input.component.mjs +8 -7
- package/esm2022/components/input/number/number-input/number-input.component.mjs +6 -5
- package/esm2022/components/input/number/number-slider-input/number-slider-input.component.mjs +6 -5
- package/esm2022/components/input/relations/references-many-input/references-many-input.component.mjs +24 -19
- package/esm2022/components/input/string/string-autocomplete-input/string-autocomplete-input.component.mjs +12 -8
- package/esm2022/components/input/string/string-dropdown-input/string-dropdown-input.component.mjs +8 -7
- package/esm2022/components/input/string/string-input/string-input.component.mjs +6 -5
- package/esm2022/components/input/string/string-password-input/string-password-input.component.mjs +8 -7
- package/esm2022/components/input/string/string-textbox-input/string-textbox-input.component.mjs +7 -6
- package/esm2022/components/table/create-dialog/create-data.builder.mjs +44 -0
- package/esm2022/components/table/create-dialog/create-entity-dialog-data.builder.mjs +8 -9
- package/esm2022/components/table/create-dialog/create-entity-dialog-data.mjs +1 -1
- package/esm2022/components/table/create-dialog/create-entity-dialog.component.mjs +30 -9
- package/esm2022/components/table/default.actions.mjs +1 -5
- package/esm2022/components/table/display-column-value/base-display-column-value.component.mjs +5 -1
- package/esm2022/components/table/display-column-value/display-column-value.component.mjs +10 -2
- package/esm2022/components/table/edit-dialog/edit-data.builder.mjs +3 -3
- package/esm2022/components/table/edit-dialog/edit-entity-data.mjs +1 -1
- package/esm2022/components/table/edit-dialog/edit-entity-dialog.component.mjs +37 -7
- package/esm2022/components/table/edit-dialog/edit-entity.builder.mjs +3 -3
- package/esm2022/components/table/table-data.builder.mjs +12 -12
- package/esm2022/components/table/table-data.mjs +1 -1
- package/esm2022/components/table/table.component.mjs +63 -34
- package/esm2022/components/tooltip/tooltip.component.mjs +6 -3
- package/esm2022/decorators/array/array-decorator-internal.data.mjs +4 -2
- package/esm2022/decorators/array/array-decorator.data.mjs +1 -2
- package/esm2022/decorators/array/array.decorator.mjs +2 -3
- package/esm2022/decorators/base/base-property.decorator.mjs +1 -2
- package/esm2022/decorators/base/decorator-types.enum.mjs +1 -1
- package/esm2022/decorators/base/property-decorator-internal.data.mjs +1 -3
- package/esm2022/decorators/base/property-decorator.data.mjs +5 -11
- package/esm2022/decorators/boolean/boolean-decorator.data.mjs +1 -1
- package/esm2022/decorators/boolean/boolean.decorator.mjs +1 -2
- package/esm2022/decorators/custom/custom-decorator-internal.data.mjs +1 -2
- package/esm2022/decorators/custom/custom-decorator.data.mjs +1 -1
- package/esm2022/decorators/custom/custom.decorator.mjs +1 -2
- package/esm2022/decorators/date/date-decorator-internal.data.mjs +2 -2
- package/esm2022/decorators/date/date-decorator.data.mjs +1 -1
- package/esm2022/decorators/date/date.decorator.mjs +2 -3
- package/esm2022/decorators/file/file-decorator-internal.data.mjs +1 -4
- package/esm2022/decorators/file/file-decorator.data.mjs +1 -6
- package/esm2022/decorators/file/file.decorator.mjs +2 -3
- package/esm2022/decorators/has-many/has-many-decorator-internal.data.mjs +1 -2
- package/esm2022/decorators/has-many/has-many-decorator.data.mjs +1 -1
- package/esm2022/decorators/has-many/has-many.decorator.mjs +1 -2
- package/esm2022/decorators/number/number-decorator-internal.data.mjs +4 -5
- package/esm2022/decorators/number/number-decorator.data.mjs +1 -1
- package/esm2022/decorators/number/number.decorator.mjs +1 -2
- package/esm2022/decorators/object/object.decorator.mjs +1 -2
- package/esm2022/decorators/references-many/references-many-decorator-internal.data.mjs +1 -2
- package/esm2022/decorators/references-many/references-many-decorator.data.mjs +1 -1
- package/esm2022/decorators/references-many/references-many.decorator.mjs +1 -2
- package/esm2022/decorators/references-one/references-one.decorator.mjs +1 -2
- package/esm2022/decorators/string/string-decorator-internal.data.mjs +7 -4
- package/esm2022/decorators/string/string-decorator.data.mjs +1 -1
- package/esm2022/decorators/string/string.decorator.mjs +1 -2
- package/esm2022/default-global-configuration-values.mjs +16 -1
- package/esm2022/directives/drag-drop.directive.mjs +1 -4
- package/esm2022/directives/included-in.directive.mjs +33 -0
- package/esm2022/directives/number.directive.mjs +1 -2
- package/esm2022/directives/password-match.directive.mjs +2 -2
- package/esm2022/encapsulation/js-2-xml.utilities.mjs +1 -2
- package/esm2022/encapsulation/jszip.utilities.mjs +1 -2
- package/esm2022/encapsulation/lodash.utilities.mjs +12 -19
- package/esm2022/encapsulation/reflect.utilities.mjs +1 -8
- package/esm2022/encapsulation/uuid.utilities.mjs +1 -2
- package/esm2022/functions/default-false.function.mjs +1 -2
- package/esm2022/functions/default-true.function.mjs +1 -2
- package/esm2022/functions/get-config-value.function.mjs +1 -2
- package/esm2022/functions/get-validation-error-message.function.mjs +13 -7
- package/esm2022/functions/get-validation-errors-tooltip-content.function.ts.mjs +6 -4
- package/esm2022/functions/is-async-function.function.mjs +1 -2
- package/esm2022/global-configuration-values.mjs +5 -2
- package/esm2022/mocks/placeholder-data.png.mjs +3 -3
- package/esm2022/public-api.mjs +3 -1
- package/esm2022/services/entity.service.mjs +15 -21
- package/esm2022/services/unsaved-changes.guard.mjs +7 -2
- package/esm2022/utilities/date.utilities.mjs +3 -9
- package/esm2022/utilities/entity.utilities.mjs +82 -79
- package/esm2022/utilities/file.utilities.mjs +1 -10
- package/esm2022/utilities/selection.utilities.mjs +4 -7
- package/esm2022/utilities/validation.utilities.mjs +40 -35
- package/fesm2022/ngx-material-entity.mjs +1309 -752
- package/fesm2022/ngx-material-entity.mjs.map +1 -1
- package/functions/default-false.function.d.ts +0 -1
- package/functions/default-true.function.d.ts +0 -1
- package/functions/get-config-value.function.d.ts +0 -1
- package/functions/get-validation-error-message.function.d.ts +3 -0
- package/functions/get-validation-errors-tooltip-content.function.ts.d.ts +4 -2
- package/functions/is-async-function.function.d.ts +0 -1
- package/global-configuration-values.d.ts +9 -34
- package/mocks/placeholder-data.png.d.ts +1 -1
- package/package.json +2 -1
- package/public-api.d.ts +2 -0
- package/services/entity.service.d.ts +11 -16
- package/services/unsaved-changes.guard.d.ts +13 -1
- package/utilities/date.utilities.d.ts +0 -6
- package/utilities/entity.utilities.d.ts +10 -36
- package/utilities/file.utilities.d.ts +0 -9
- package/utilities/selection.utilities.d.ts +0 -3
- package/utilities/validation.utilities.d.ts +0 -3
- package/esm2022/components/table/create-dialog/create-dialog-data.builder.mjs +0 -44
|
@@ -7,7 +7,6 @@ import { LodashUtilities } from '../encapsulation/lodash.utilities';
|
|
|
7
7
|
export class FileUtilities {
|
|
8
8
|
/**
|
|
9
9
|
* Gets the accept value for the html input.
|
|
10
|
-
*
|
|
11
10
|
* @param mimeTypes - The mimeTypes to get the accept string from.
|
|
12
11
|
* @returns A comma separated string of all the provided mime types.
|
|
13
12
|
*/
|
|
@@ -21,7 +20,6 @@ export class FileUtilities {
|
|
|
21
20
|
/* istanbul ignore next */
|
|
22
21
|
/**
|
|
23
22
|
* Reads a url to display the given file.
|
|
24
|
-
*
|
|
25
23
|
* @param file - The file to get the url from.
|
|
26
24
|
* @returns A promise of the url. Undefined if no file was provided.
|
|
27
25
|
*/
|
|
@@ -40,7 +38,6 @@ export class FileUtilities {
|
|
|
40
38
|
/* istanbul ignore next */
|
|
41
39
|
/**
|
|
42
40
|
* Gets a file from the given url.
|
|
43
|
-
*
|
|
44
41
|
* @param url - The url to get the file from.
|
|
45
42
|
* @param http - The angular HttpClient. Used to fetch files.
|
|
46
43
|
* @returns A promise of the File.
|
|
@@ -57,7 +54,6 @@ export class FileUtilities {
|
|
|
57
54
|
/* istanbul ignore next */
|
|
58
55
|
/**
|
|
59
56
|
* Gets the file data with the blob from the given File Data.
|
|
60
|
-
*
|
|
61
57
|
* @param data - The File Data to get the file data with blob from.
|
|
62
58
|
* @param http - The angular HttpClient. Used to fetch files.
|
|
63
59
|
* @returns FileDataWithFile.
|
|
@@ -86,7 +82,6 @@ export class FileUtilities {
|
|
|
86
82
|
/* istanbul ignore next */
|
|
87
83
|
/**
|
|
88
84
|
* Downloads a single file from the given File Data.
|
|
89
|
-
*
|
|
90
85
|
* @param fileData - The file data. Needs to contain a blob.
|
|
91
86
|
*/
|
|
92
87
|
static downloadSingleFile(fileData) {
|
|
@@ -96,7 +91,6 @@ export class FileUtilities {
|
|
|
96
91
|
/* istanbul ignore next */
|
|
97
92
|
/**
|
|
98
93
|
* Downloads a blob.
|
|
99
|
-
*
|
|
100
94
|
* @param blob - The blob to download.
|
|
101
95
|
* @param name - The name of the downloaded file.
|
|
102
96
|
*/
|
|
@@ -114,7 +108,6 @@ export class FileUtilities {
|
|
|
114
108
|
/* istanbul ignore next */
|
|
115
109
|
/**
|
|
116
110
|
* Downloads multiple files as a zip with the given name.
|
|
117
|
-
*
|
|
118
111
|
* @param name - The name of the zip file to generate.
|
|
119
112
|
* @param multiFileData - The file data array to put in the zip.
|
|
120
113
|
* @param http - The angular HttpClient. Used to fetch files.
|
|
@@ -136,7 +129,6 @@ export class FileUtilities {
|
|
|
136
129
|
}
|
|
137
130
|
/**
|
|
138
131
|
* Checks if the given file has a valid mime type.
|
|
139
|
-
*
|
|
140
132
|
* @param type - The type of the file to check.
|
|
141
133
|
* @param allowedMimeTypes - The allowed mime types.
|
|
142
134
|
* @returns Whether or not the given file has a valid mime type.
|
|
@@ -157,7 +149,6 @@ export class FileUtilities {
|
|
|
157
149
|
}
|
|
158
150
|
/**
|
|
159
151
|
* Transform the given value to Megabytes.
|
|
160
|
-
*
|
|
161
152
|
* @param value - The original value.
|
|
162
153
|
* @param unit - If the value is B, KB or GB.
|
|
163
154
|
* @returns The given value as bytes.
|
|
@@ -177,4 +168,4 @@ export class FileUtilities {
|
|
|
177
168
|
}
|
|
178
169
|
}
|
|
179
170
|
}
|
|
180
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS51dGlsaXRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy91dGlsaXRpZXMvZmlsZS51dGlsaXRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUd0QyxPQUFPLEVBQUUsY0FBYyxFQUFPLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXBFOztHQUVHO0FBQ0gsTUFBTSxPQUFnQixhQUFhO0lBQy9COzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLGVBQWUsQ0FBQyxTQUFvQjtRQUN2QyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRTtZQUNwQixPQUFPLEdBQUcsQ0FBQztTQUNkO1FBQ0QsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsMEJBQTBCO0lBQzFCOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFXO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDUCxPQUFPLFNBQVMsQ0FBQztTQUNwQjtRQUNELE9BQU8sSUFBSSxPQUFPLENBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDM0MsTUFBTSxNQUFNLEdBQWUsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUM1QyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBZ0IsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEMsTUFBTSxDQUFDLGFB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QUFPLENBQUM7SUFDM0IsQ0FBQztJQUVPLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFhLEVBQUUsSUFBdUI7UUFDbEUsUUFBUSxJQUFJLEVBQUU7WUFDVixLQUFLLEdBQUc7Z0JBQ0osT0FBTyxLQUFLLENBQUM7WUFDakIsS0FBSyxJQUFJO2dCQUNMLE9BQU8sS0FBSyxHQUFHLElBQUksQ0FBQztZQUN4QixLQUFLLElBQUk7Z0JBQ0wsT0FBTyxLQUFLLEdBQUcsVUFBVSxDQUFDO1NBQ2pDO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGaWxlRGF0YVdpdGhGaWxlIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9maWxlL2ZpbGUtZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgRmlsZURhdGEgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2ZpbGUvZmlsZS1kZWNvcmF0b3IuZGF0YSc7XG5pbXBvcnQgeyBKU1ppcFV0aWxpdGllcywgWmlwIH0gZnJvbSAnLi4vZW5jYXBzdWxhdGlvbi9qc3ppcC51dGlsaXRpZXMnO1xuaW1wb3J0IHsgTG9kYXNoVXRpbGl0aWVzIH0gZnJvbSAnLi4vZW5jYXBzdWxhdGlvbi9sb2Rhc2gudXRpbGl0aWVzJztcblxuLyoqXG4gKiBQcm92aWRlcyBmdW5jdGlvbmFsaXR5IHJlZ2FyZGluZyBmaWxlcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZpbGVVdGlsaXRpZXMge1xuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGFjY2VwdCB2YWx1ZSBmb3IgdGhlIGh0bWwgaW5wdXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWltZVR5cGVzIC0gVGhlIG1pbWVUeXBlcyB0byBnZXQgdGhlIGFjY2VwdCBzdHJpbmcgZnJvbS5cbiAgICAgKiBAcmV0dXJucyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgYWxsIHRoZSBwcm92aWRlZCBtaW1lIHR5cGVzLlxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRBY2NlcHRTdHJpbmcobWltZVR5cGVzPzogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgICAgICBpZiAoIW1pbWVUeXBlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gJyonO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW1lVHlwZXMuam9pbignLCAnKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBGaW5kIGEgd2F5IHRvIHVzZSBibG9icyB3aXRoIGplc3RcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIC8qKlxuICAgICAqIFJlYWRzIGEgdXJsIHRvIGRpc3BsYXkgdGhlIGdpdmVuIGZpbGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsZSAtIFRoZSBmaWxlIHRvIGdldCB0aGUgdXJsIGZyb20uXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIG9mIHRoZSB1cmwuIFVuZGVmaW5lZCBpZiBubyBmaWxlIHdhcyBwcm92aWRlZC5cbiAgICAgKi9cbiAgICBzdGF0aWMgYXN5bmMgZ2V0RGF0YVVSTEZyb21GaWxlKGZpbGU/OiBCbG9iKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlcjogRmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZSA9PiByZXNvbHZlKGUudGFyZ2V0Py5yZXN1bHQgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgIHJlYWRlci5vbmVycm9yID0gZSA9PiByZWplY3QoZSk7XG4gICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogRmluZCBhIHdheSB0byB1c2UgYmxvYnMgd2l0aCBqZXN0XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAvKipcbiAgICAgKiBHZXRzIGEgZmlsZSBmcm9tIHRoZSBnaXZlbiB1cmwuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIC0gVGhlIHVybCB0byBnZXQgdGhlIGZpbGUgZnJvbS5cbiAgICAgKiBAcGFyYW0gaHR0cCAtIFRoZSBhbmd1bGFyIEh0dHBDbGllbnQuIFVzZWQgdG8gZmV0Y2ggZmlsZXMuXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIG9mIHRoZSBGaWxlLlxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGFzeW5jIGdldEZpbGVGcm9tVXJsKHVybDogc3RyaW5nLCBodHRwOiBIdHRwQ2xpZW50KTogUHJvbWlzZTxCbG9iPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZmlyc3RWYWx1ZUZyb20oaHR0cC5nZXQodXJsLCB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgZmV0Y2hpbmcgdGhlIGZpbGUgZnJvbSB0aGUgdXJsICR7dXJsfTpcXG4gJHtlcnJvcn1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IEZpbmQgYSB3YXkgdG8gdXNlIGJsb2JzIHdpdGggamVzdFxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZmlsZSBkYXRhIHdpdGggdGhlIGJsb2IgZnJvbSB0aGUgZ2l2ZW4gRmlsZSBEYXRhLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGEgLSBUaGUgRmlsZSBEYXRhIHRvIGdldCB0aGUgZmlsZSBkYXRhIHdpdGggYmxvYiBmcm9tLlxuICAgICAqIEBwYXJhbSBodHRwIC0gVGhlIGFuZ3VsYXIgSHR0cENsaWVudC4gVXNlZCB0byBmZXRjaCBmaWxlcy5cbiAgICAgKiBAcmV0dXJucyBGaWxlRGF0YVdpdGhGaWxlLlxuICAgICAqL1xuICAgIHN0YXRpYyBhc3luYyBnZXRGaWxlRGF0YShkYXRhOiBGaWxlRGF0YSwgaHR0cDogSHR0cENsaWVudCk6IFByb21pc2U8RmlsZURhdGFXaXRoRmlsZT4ge1xuICAgICAgICBpZiAoZGF0YS5maWxlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGZpbGU6IGRhdGEuZmlsZSxcbiAgICAgICAgICAgICAgICBuYW1lOiBkYXRhLm5hbWUsXG4gICAgICAgICAgICAgICAgdXJsOiBkYXRhLnVybCxcbiAgICAgICAgICAgICAgICB0eXBlOiBkYXRhLnR5cGUsXG4gICAgICAgICAgICAgICAgc2l6ZTogZGF0YS5zaXplXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmaWxlOiBhd2FpdCBGaWxlVXRpbGl0aWVzLmdldEZpbGVGcm9tVXJsKGRhdGEudXJsIGFzIHN0cmluZywgaHR0cCksXG4gICAgICAgICAgICAgICAgbmFtZTogZGF0YS5uYW1lLFxuICAgICAgICAgICAgICAgIHVybDogZGF0YS51cmwsXG4gICAgICAgICAgICAgICAgdHlwZTogZGF0YS50eXBlLFxuICAgICAgICAgICAgICAgIHNpemU6IGRhdGEuc2l6ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IEZpbmQgYSB3YXkgdG8gdXNlIGJsb2JzIHdpdGggamVzdFxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgLyoqXG4gICAgICogRG93bmxvYWRzIGEgc2luZ2xlIGZpbGUgZnJvbSB0aGUgZ2l2ZW4gRmlsZSBEYXRhLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZpbGVEYXRhIC0gVGhlIGZpbGUgZGF0YS4gTmVlZHMgdG8gY29udGFpbiBhIGJsb2IuXG4gICAgICovXG4gICAgc3RhdGljIGRvd25sb2FkU2luZ2xlRmlsZShmaWxlRGF0YTogRmlsZURhdGFXaXRoRmlsZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvd25Mb2FkQmxvYihmaWxlRGF0YS5maWxlLCBmaWxlRGF0YS5uYW1lKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBGaW5kIGEgd2F5IHRvIHVzZSBibG9icyB3aXRoIGplc3RcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIC8qKlxuICAgICAqIERvd25sb2FkcyBhIGJsb2IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmxvYiAtIFRoZSBibG9iIHRvIGRvd25sb2FkLlxuICAgICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGRvd25sb2FkZWQgZmlsZS5cbiAgICAgKi9cbiAgICBzdGF0aWMgZG93bkxvYWRCbG9iKGJsb2I6IEJsb2IsIG5hbWU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYTogSFRNTEFuY2hvckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIGNvbnN0IG9iamVjdFVybDogc3RyaW5nID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgYS5ocmVmID0gb2JqZWN0VXJsO1xuICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgYS5kb3dubG9hZCA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgYS5jbGljaygpO1xuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKG9iamVjdFVybCk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogRmluZCBhIHdheSB0byB1c2UgYmxvYnMgd2l0aCBqZXN0XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAvKipcbiAgICAgKiBEb3dubG9hZHMgbXVsdGlwbGUgZmlsZXMgYXMgYSB6aXAgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHppcCBmaWxlIHRvIGdlbmVyYXRlLlxuICAgICAqIEBwYXJhbSBtdWx0aUZpbGVEYXRhIC0gVGhlIGZpbGUgZGF0YSBhcnJheSB0byBwdXQgaW4gdGhlIHppcC5cbiAgICAgKiBAcGFyYW0gaHR0cCAtIFRoZSBhbmd1bGFyIEh0dHBDbGllbnQuIFVzZWQgdG8gZmV0Y2ggZmlsZXMuXG4gICAgICovXG4gICAgc3RhdGljIGFzeW5jIGRvd25sb2FkTXVsdGlwbGVGaWxlcyhuYW1lOiBzdHJpbmcsIG11bHRpRmlsZURhdGE6IEZpbGVEYXRhW10sIGh0dHA6IEh0dHBDbGllbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgemlwOiBaaXAgPSBKU1ppcFV0aWxpdGllcy5uZXcoKTtcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IG11bHRpRmlsZURhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG11bHRpRmlsZURhdGFbaV0gPSBhd2FpdCBGaWxlVXRpbGl0aWVzLmdldEZpbGVEYXRhKG11bHRpRmlsZURhdGFbaV0sIGh0dHApO1xuICAgICAgICAgICAgemlwLmZpbGUobXVsdGlGaWxlRGF0YVtpXS5uYW1lLCAobXVsdGlGaWxlRGF0YVtpXSBhcyBGaWxlRGF0YVdpdGhGaWxlKS5maWxlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB6aXBCbG9iOiBCbG9iID0gYXdhaXQgemlwLmdlbmVyYXRlQXN5bmMoeyB0eXBlOiAnYmxvYicgfSk7XG4gICAgICAgIGNvbnN0IGZpbGVEYXRhOiBGaWxlRGF0YVdpdGhGaWxlID0ge1xuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIGZpbGU6IHppcEJsb2IsXG4gICAgICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vemlwJyxcbiAgICAgICAgICAgIHNpemU6IHppcEJsb2Iuc2l6ZVxuICAgICAgICB9O1xuICAgICAgICBGaWxlVXRpbGl0aWVzLmRvd25sb2FkU2luZ2xlRmlsZShmaWxlRGF0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBmaWxlIGhhcyBhIHZhbGlkIG1pbWUgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0eXBlIC0gVGhlIHR5cGUgb2YgdGhlIGZpbGUgdG8gY2hlY2suXG4gICAgICogQHBhcmFtIGFsbG93ZWRNaW1lVHlwZXMgLSBUaGUgYWxsb3dlZCBtaW1lIHR5cGVzLlxuICAgICAqIEByZXR1cm5zIFdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiBmaWxlIGhhcyBhIHZhbGlkIG1pbWUgdHlwZS5cbiAgICAgKi9cbiAgICBzdGF0aWMgaXNNaW1lVHlwZVZhbGlkKHR5cGU6IHN0cmluZywgYWxsb3dlZE1pbWVUeXBlczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGFsbG93ZWRNaW1lVHlwZXMuaW5jbHVkZXMoJyonKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCB0IG9mIGFsbG93ZWRNaW1lVHlwZXMpIHtcbiAgICAgICAgICAgIGlmICh0ID09PSB0eXBlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodC5lbmRzV2l0aCgnKicpICYmIHR5cGUuc3RhcnRzV2l0aCh0LnNwbGl0KCcqJylbMF0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybSB0aGUgZ2l2ZW4gdmFsdWUgdG8gTWVnYWJ5dGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIG9yaWdpbmFsIHZhbHVlLlxuICAgICAqIEBwYXJhbSB1bml0IC0gSWYgdGhlIHZhbHVlIGlzIEIsIEtCIG9yIEdCLlxuICAgICAqIEByZXR1cm5zIFRoZSBnaXZlbiB2YWx1ZSBhcyBieXRlcy5cbiAgICAgKi9cbiAgICBzdGF0aWMgdHJhbnNmb3JtVG9NZWdhQnl0ZXModmFsdWU6IG51bWJlciwgdW5pdDogJ0InIHwgJ0tCJyB8ICdHQicpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBieXRlczogbnVtYmVyID0gdGhpcy50cmFuc2Zvcm1Ub0J5dGVzKExvZGFzaFV0aWxpdGllcy5jbG9uZURlZXAodmFsdWUpLCB1bml0KTtcbiAgICAgICAgcmV0dXJuIGJ5dGVzIC8gMTAwMDAwMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyB0cmFuc2Zvcm1Ub0J5dGVzKHZhbHVlOiBudW1iZXIsIHVuaXQ6ICdCJyB8ICdLQicgfCAnR0InKTogbnVtYmVyIHtcbiAgICAgICAgc3dpdGNoICh1bml0KSB7XG4gICAgICAgICAgICBjYXNlICdCJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICBjYXNlICdLQic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICogMTAwMDtcbiAgICAgICAgICAgIGNhc2UgJ0dCJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgKiAxMDAwMDAwMDAwO1xuICAgICAgICB9XG4gICAgfVxufSJdfQ==
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS51dGlsaXRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy91dGlsaXRpZXMvZmlsZS51dGlsaXRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUd0QyxPQUFPLEVBQUUsY0FBYyxFQUFPLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXBFOztHQUVHO0FBQ0gsTUFBTSxPQUFnQixhQUFhO0lBQy9COzs7O09BSUc7SUFDSCxNQUFNLENBQUMsZUFBZSxDQUFDLFNBQW9CO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFO1lBQ3BCLE9BQU8sR0FBRyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELDBDQUEwQztJQUMxQywwQkFBMEI7SUFDMUI7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBVztRQUN2QyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1AsT0FBTyxTQUFTLENBQUM7U0FDcEI7UUFDRCxPQUFPLElBQUksT0FBTyxDQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzNDLE1BQU0sTUFBTSxHQUFlLElBQUksVUFBVSxFQUFFLENBQUM7WUFDNUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQWdCLENBQUMsQ0FBQztZQUN6RCxNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sQ0FBQyxhQUFh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SUFDM0IsQ0FBQztJQUVPLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFhLEVBQUUsSUFBdUI7UUFDbEUsUUFBUSxJQUFJLEVBQUU7WUFDVixLQUFLLEdBQUc7Z0JBQ0osT0FBTyxLQUFLLENBQUM7WUFDakIsS0FBSyxJQUFJO2dCQUNMLE9BQU8sS0FBSyxHQUFHLElBQUksQ0FBQztZQUN4QixLQUFLLElBQUk7Z0JBQ0wsT0FBTyxLQUFLLEdBQUcsVUFBVSxDQUFDO1NBQ2pDO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGaWxlRGF0YVdpdGhGaWxlIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9maWxlL2ZpbGUtZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgRmlsZURhdGEgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2ZpbGUvZmlsZS1kZWNvcmF0b3IuZGF0YSc7XG5pbXBvcnQgeyBKU1ppcFV0aWxpdGllcywgWmlwIH0gZnJvbSAnLi4vZW5jYXBzdWxhdGlvbi9qc3ppcC51dGlsaXRpZXMnO1xuaW1wb3J0IHsgTG9kYXNoVXRpbGl0aWVzIH0gZnJvbSAnLi4vZW5jYXBzdWxhdGlvbi9sb2Rhc2gudXRpbGl0aWVzJztcblxuLyoqXG4gKiBQcm92aWRlcyBmdW5jdGlvbmFsaXR5IHJlZ2FyZGluZyBmaWxlcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZpbGVVdGlsaXRpZXMge1xuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGFjY2VwdCB2YWx1ZSBmb3IgdGhlIGh0bWwgaW5wdXQuXG4gICAgICogQHBhcmFtIG1pbWVUeXBlcyAtIFRoZSBtaW1lVHlwZXMgdG8gZ2V0IHRoZSBhY2NlcHQgc3RyaW5nIGZyb20uXG4gICAgICogQHJldHVybnMgQSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGFsbCB0aGUgcHJvdmlkZWQgbWltZSB0eXBlcy5cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0QWNjZXB0U3RyaW5nKG1pbWVUeXBlcz86IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFtaW1lVHlwZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuICcqJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWltZVR5cGVzLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogRmluZCBhIHdheSB0byB1c2UgYmxvYnMgd2l0aCBqZXN0XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAvKipcbiAgICAgKiBSZWFkcyBhIHVybCB0byBkaXNwbGF5IHRoZSBnaXZlbiBmaWxlLlxuICAgICAqIEBwYXJhbSBmaWxlIC0gVGhlIGZpbGUgdG8gZ2V0IHRoZSB1cmwgZnJvbS5cbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2Ugb2YgdGhlIHVybC4gVW5kZWZpbmVkIGlmIG5vIGZpbGUgd2FzIHByb3ZpZGVkLlxuICAgICAqL1xuICAgIHN0YXRpYyBhc3luYyBnZXREYXRhVVJMRnJvbUZpbGUoZmlsZT86IEJsb2IpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVhZGVyOiBGaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBlID0+IHJlc29sdmUoZS50YXJnZXQ/LnJlc3VsdCBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSBlID0+IHJlamVjdChlKTtcbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBGaW5kIGEgd2F5IHRvIHVzZSBibG9icyB3aXRoIGplc3RcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIC8qKlxuICAgICAqIEdldHMgYSBmaWxlIGZyb20gdGhlIGdpdmVuIHVybC5cbiAgICAgKiBAcGFyYW0gdXJsIC0gVGhlIHVybCB0byBnZXQgdGhlIGZpbGUgZnJvbS5cbiAgICAgKiBAcGFyYW0gaHR0cCAtIFRoZSBhbmd1bGFyIEh0dHBDbGllbnQuIFVzZWQgdG8gZmV0Y2ggZmlsZXMuXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIG9mIHRoZSBGaWxlLlxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGFzeW5jIGdldEZpbGVGcm9tVXJsKHVybDogc3RyaW5nLCBodHRwOiBIdHRwQ2xpZW50KTogUHJvbWlzZTxCbG9iPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZmlyc3RWYWx1ZUZyb20oaHR0cC5nZXQodXJsLCB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgZmV0Y2hpbmcgdGhlIGZpbGUgZnJvbSB0aGUgdXJsICR7dXJsfTpcXG4gJHtlcnJvcn1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IEZpbmQgYSB3YXkgdG8gdXNlIGJsb2JzIHdpdGggamVzdFxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZmlsZSBkYXRhIHdpdGggdGhlIGJsb2IgZnJvbSB0aGUgZ2l2ZW4gRmlsZSBEYXRhLlxuICAgICAqIEBwYXJhbSBkYXRhIC0gVGhlIEZpbGUgRGF0YSB0byBnZXQgdGhlIGZpbGUgZGF0YSB3aXRoIGJsb2IgZnJvbS5cbiAgICAgKiBAcGFyYW0gaHR0cCAtIFRoZSBhbmd1bGFyIEh0dHBDbGllbnQuIFVzZWQgdG8gZmV0Y2ggZmlsZXMuXG4gICAgICogQHJldHVybnMgRmlsZURhdGFXaXRoRmlsZS5cbiAgICAgKi9cbiAgICBzdGF0aWMgYXN5bmMgZ2V0RmlsZURhdGEoZGF0YTogRmlsZURhdGEsIGh0dHA6IEh0dHBDbGllbnQpOiBQcm9taXNlPEZpbGVEYXRhV2l0aEZpbGU+IHtcbiAgICAgICAgaWYgKGRhdGEuZmlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmaWxlOiBkYXRhLmZpbGUsXG4gICAgICAgICAgICAgICAgbmFtZTogZGF0YS5uYW1lLFxuICAgICAgICAgICAgICAgIHVybDogZGF0YS51cmwsXG4gICAgICAgICAgICAgICAgdHlwZTogZGF0YS50eXBlLFxuICAgICAgICAgICAgICAgIHNpemU6IGRhdGEuc2l6ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZmlsZTogYXdhaXQgRmlsZVV0aWxpdGllcy5nZXRGaWxlRnJvbVVybChkYXRhLnVybCBhcyBzdHJpbmcsIGh0dHApLFxuICAgICAgICAgICAgICAgIG5hbWU6IGRhdGEubmFtZSxcbiAgICAgICAgICAgICAgICB1cmw6IGRhdGEudXJsLFxuICAgICAgICAgICAgICAgIHR5cGU6IGRhdGEudHlwZSxcbiAgICAgICAgICAgICAgICBzaXplOiBkYXRhLnNpemVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUT0RPOiBGaW5kIGEgd2F5IHRvIHVzZSBibG9icyB3aXRoIGplc3RcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIC8qKlxuICAgICAqIERvd25sb2FkcyBhIHNpbmdsZSBmaWxlIGZyb20gdGhlIGdpdmVuIEZpbGUgRGF0YS5cbiAgICAgKiBAcGFyYW0gZmlsZURhdGEgLSBUaGUgZmlsZSBkYXRhLiBOZWVkcyB0byBjb250YWluIGEgYmxvYi5cbiAgICAgKi9cbiAgICBzdGF0aWMgZG93bmxvYWRTaW5nbGVGaWxlKGZpbGVEYXRhOiBGaWxlRGF0YVdpdGhGaWxlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG93bkxvYWRCbG9iKGZpbGVEYXRhLmZpbGUsIGZpbGVEYXRhLm5hbWUpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IEZpbmQgYSB3YXkgdG8gdXNlIGJsb2JzIHdpdGggamVzdFxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgLyoqXG4gICAgICogRG93bmxvYWRzIGEgYmxvYi5cbiAgICAgKiBAcGFyYW0gYmxvYiAtIFRoZSBibG9iIHRvIGRvd25sb2FkLlxuICAgICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGRvd25sb2FkZWQgZmlsZS5cbiAgICAgKi9cbiAgICBzdGF0aWMgZG93bkxvYWRCbG9iKGJsb2I6IEJsb2IsIG5hbWU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYTogSFRNTEFuY2hvckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIGNvbnN0IG9iamVjdFVybDogc3RyaW5nID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgYS5ocmVmID0gb2JqZWN0VXJsO1xuICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgYS5kb3dubG9hZCA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgYS5jbGljaygpO1xuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKG9iamVjdFVybCk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogRmluZCBhIHdheSB0byB1c2UgYmxvYnMgd2l0aCBqZXN0XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAvKipcbiAgICAgKiBEb3dubG9hZHMgbXVsdGlwbGUgZmlsZXMgYXMgYSB6aXAgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cbiAgICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB6aXAgZmlsZSB0byBnZW5lcmF0ZS5cbiAgICAgKiBAcGFyYW0gbXVsdGlGaWxlRGF0YSAtIFRoZSBmaWxlIGRhdGEgYXJyYXkgdG8gcHV0IGluIHRoZSB6aXAuXG4gICAgICogQHBhcmFtIGh0dHAgLSBUaGUgYW5ndWxhciBIdHRwQ2xpZW50LiBVc2VkIHRvIGZldGNoIGZpbGVzLlxuICAgICAqL1xuICAgIHN0YXRpYyBhc3luYyBkb3dubG9hZE11bHRpcGxlRmlsZXMobmFtZTogc3RyaW5nLCBtdWx0aUZpbGVEYXRhOiBGaWxlRGF0YVtdLCBodHRwOiBIdHRwQ2xpZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHppcDogWmlwID0gSlNaaXBVdGlsaXRpZXMubmV3KCk7XG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBtdWx0aUZpbGVEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBtdWx0aUZpbGVEYXRhW2ldID0gYXdhaXQgRmlsZVV0aWxpdGllcy5nZXRGaWxlRGF0YShtdWx0aUZpbGVEYXRhW2ldLCBodHRwKTtcbiAgICAgICAgICAgIHppcC5maWxlKG11bHRpRmlsZURhdGFbaV0ubmFtZSwgKG11bHRpRmlsZURhdGFbaV0gYXMgRmlsZURhdGFXaXRoRmlsZSkuZmlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgemlwQmxvYjogQmxvYiA9IGF3YWl0IHppcC5nZW5lcmF0ZUFzeW5jKHsgdHlwZTogJ2Jsb2InIH0pO1xuICAgICAgICBjb25zdCBmaWxlRGF0YTogRmlsZURhdGFXaXRoRmlsZSA9IHtcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICBmaWxlOiB6aXBCbG9iLFxuICAgICAgICAgICAgdHlwZTogJ2FwcGxpY2F0aW9uL3ppcCcsXG4gICAgICAgICAgICBzaXplOiB6aXBCbG9iLnNpemVcbiAgICAgICAgfTtcbiAgICAgICAgRmlsZVV0aWxpdGllcy5kb3dubG9hZFNpbmdsZUZpbGUoZmlsZURhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gZmlsZSBoYXMgYSB2YWxpZCBtaW1lIHR5cGUuXG4gICAgICogQHBhcmFtIHR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgZmlsZSB0byBjaGVjay5cbiAgICAgKiBAcGFyYW0gYWxsb3dlZE1pbWVUeXBlcyAtIFRoZSBhbGxvd2VkIG1pbWUgdHlwZXMuXG4gICAgICogQHJldHVybnMgV2hldGhlciBvciBub3QgdGhlIGdpdmVuIGZpbGUgaGFzIGEgdmFsaWQgbWltZSB0eXBlLlxuICAgICAqL1xuICAgIHN0YXRpYyBpc01pbWVUeXBlVmFsaWQodHlwZTogc3RyaW5nLCBhbGxvd2VkTWltZVR5cGVzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoYWxsb3dlZE1pbWVUeXBlcy5pbmNsdWRlcygnKicpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHQgb2YgYWxsb3dlZE1pbWVUeXBlcykge1xuICAgICAgICAgICAgaWYgKHQgPT09IHR5cGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0LmVuZHNXaXRoKCcqJykgJiYgdHlwZS5zdGFydHNXaXRoKHQuc3BsaXQoJyonKVswXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtIHRoZSBnaXZlbiB2YWx1ZSB0byBNZWdhYnl0ZXMuXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIG9yaWdpbmFsIHZhbHVlLlxuICAgICAqIEBwYXJhbSB1bml0IC0gSWYgdGhlIHZhbHVlIGlzIEIsIEtCIG9yIEdCLlxuICAgICAqIEByZXR1cm5zIFRoZSBnaXZlbiB2YWx1ZSBhcyBieXRlcy5cbiAgICAgKi9cbiAgICBzdGF0aWMgdHJhbnNmb3JtVG9NZWdhQnl0ZXModmFsdWU6IG51bWJlciwgdW5pdDogJ0InIHwgJ0tCJyB8ICdHQicpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBieXRlczogbnVtYmVyID0gdGhpcy50cmFuc2Zvcm1Ub0J5dGVzKExvZGFzaFV0aWxpdGllcy5jbG9uZURlZXAodmFsdWUpLCB1bml0KTtcbiAgICAgICAgcmV0dXJuIGJ5dGVzIC8gMTAwMDAwMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyB0cmFuc2Zvcm1Ub0J5dGVzKHZhbHVlOiBudW1iZXIsIHVuaXQ6ICdCJyB8ICdLQicgfCAnR0InKTogbnVtYmVyIHtcbiAgICAgICAgc3dpdGNoICh1bml0KSB7XG4gICAgICAgICAgICBjYXNlICdCJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICBjYXNlICdLQic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICogMTAwMDtcbiAgICAgICAgICAgIGNhc2UgJ0dCJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgKiAxMDAwMDAwMDAwO1xuICAgICAgICB9XG4gICAgfVxufSJdfQ==
|
|
@@ -5,12 +5,11 @@ export class SelectionUtilities {
|
|
|
5
5
|
/**
|
|
6
6
|
* Checks if all items in the table have been selected.
|
|
7
7
|
* This is needed to display the "masterToggle"-checkbox correctly.
|
|
8
|
-
*
|
|
9
8
|
* @param selection - The selection to check.
|
|
10
9
|
* @param dataSource - The dataSource of the selection.
|
|
11
10
|
* @returns Whether or not all items in the table have been selected.
|
|
12
11
|
*/
|
|
13
|
-
// eslint-disable-next-line
|
|
12
|
+
// eslint-disable-next-line typescript/no-explicit-any
|
|
14
13
|
static isAllSelected(selection, dataSource) {
|
|
15
14
|
const numSelected = selection.selected.length;
|
|
16
15
|
const numRows = dataSource.data.length;
|
|
@@ -18,11 +17,10 @@ export class SelectionUtilities {
|
|
|
18
17
|
}
|
|
19
18
|
/**
|
|
20
19
|
* Toggles all items in the table.
|
|
21
|
-
*
|
|
22
20
|
* @param selection - The selection to toggle.
|
|
23
21
|
* @param dataSource - The dataSource of the selection.
|
|
24
22
|
*/
|
|
25
|
-
// eslint-disable-next-line
|
|
23
|
+
// eslint-disable-next-line typescript/no-explicit-any
|
|
26
24
|
static masterToggle(selection, dataSource) {
|
|
27
25
|
if (SelectionUtilities.isAllSelected(selection, dataSource)) {
|
|
28
26
|
selection.clear();
|
|
@@ -33,12 +31,11 @@ export class SelectionUtilities {
|
|
|
33
31
|
}
|
|
34
32
|
/**
|
|
35
33
|
* Removes all selected entries from the array.
|
|
36
|
-
*
|
|
37
34
|
* @param selection - The selection containing the items to remove.
|
|
38
35
|
* @param values - The values of the dataSource.
|
|
39
36
|
* @param dataSource - The dataSource.
|
|
40
37
|
*/
|
|
41
|
-
// eslint-disable-next-line
|
|
38
|
+
// eslint-disable-next-line typescript/no-explicit-any
|
|
42
39
|
static remove(selection, values, dataSource) {
|
|
43
40
|
selection.selected.forEach(s => {
|
|
44
41
|
values.splice(values.indexOf(s), 1);
|
|
@@ -47,4 +44,4 @@ export class SelectionUtilities {
|
|
|
47
44
|
selection.clear();
|
|
48
45
|
}
|
|
49
46
|
}
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLnV0aWxpdGllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1tYXRlcmlhbC1lbnRpdHkvc3JjL3V0aWxpdGllcy9zZWxlY3Rpb24udXRpbGl0aWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBOztHQUVHO0FBQ0gsTUFBTSxPQUFnQixrQkFBa0I7SUFFcEM7Ozs7OztPQU1HO0lBQ0gsc0RBQXNEO0lBQ3RELE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBOEIsRUFBRSxVQUFtQztRQUNwRixNQUFNLFdBQVcsR0FBVyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUN0RCxNQUFNLE9BQU8sR0FBVyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMvQyxPQUFPLFdBQVcsS0FBSyxPQUFPLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxzREFBc0Q7SUFDdEQsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUE4QixFQUFFLFVBQW1DO1FBQ25GLElBQUksa0JBQWtCLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsRUFBRTtZQUN6RCxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDckI7YUFDSTtZQUNELFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3pEO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsc0RBQXNEO0lBQ3RELE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBOEIsRUFBRSxNQUFhLEVBQUUsVUFBbUM7UUFDNUYsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDM0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsVUFBVSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7UUFDekIsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcblxuLyoqXG4gKiBQcm92aWRlcyBmdW5jdGlvbmFsaXR5IGFyb3VuZCBtYXRlcmlhbCBzZWxlY3Rpb25zIGluc2lkZSBvZiB0YWJsZXMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTZWxlY3Rpb25VdGlsaXRpZXMge1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGFsbCBpdGVtcyBpbiB0aGUgdGFibGUgaGF2ZSBiZWVuIHNlbGVjdGVkLlxuICAgICAqIFRoaXMgaXMgbmVlZGVkIHRvIGRpc3BsYXkgdGhlIFwibWFzdGVyVG9nZ2xlXCItY2hlY2tib3ggY29ycmVjdGx5LlxuICAgICAqIEBwYXJhbSBzZWxlY3Rpb24gLSBUaGUgc2VsZWN0aW9uIHRvIGNoZWNrLlxuICAgICAqIEBwYXJhbSBkYXRhU291cmNlIC0gVGhlIGRhdGFTb3VyY2Ugb2YgdGhlIHNlbGVjdGlvbi5cbiAgICAgKiBAcmV0dXJucyBXaGV0aGVyIG9yIG5vdCBhbGwgaXRlbXMgaW4gdGhlIHRhYmxlIGhhdmUgYmVlbiBzZWxlY3RlZC5cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHlwZXNjcmlwdC9uby1leHBsaWNpdC1hbnlcbiAgICBzdGF0aWMgaXNBbGxTZWxlY3RlZChzZWxlY3Rpb246IFNlbGVjdGlvbk1vZGVsPGFueT4sIGRhdGFTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG51bVNlbGVjdGVkOiBudW1iZXIgPSBzZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoO1xuICAgICAgICBjb25zdCBudW1Sb3dzOiBudW1iZXIgPSBkYXRhU291cmNlLmRhdGEubGVuZ3RoO1xuICAgICAgICByZXR1cm4gbnVtU2VsZWN0ZWQgPT09IG51bVJvd3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyBhbGwgaXRlbXMgaW4gdGhlIHRhYmxlLlxuICAgICAqIEBwYXJhbSBzZWxlY3Rpb24gLSBUaGUgc2VsZWN0aW9uIHRvIHRvZ2dsZS5cbiAgICAgKiBAcGFyYW0gZGF0YVNvdXJjZSAtIFRoZSBkYXRhU291cmNlIG9mIHRoZSBzZWxlY3Rpb24uXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHR5cGVzY3JpcHQvbm8tZXhwbGljaXQtYW55XG4gICAgc3RhdGljIG1hc3RlclRvZ2dsZShzZWxlY3Rpb246IFNlbGVjdGlvbk1vZGVsPGFueT4sIGRhdGFTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+KTogdm9pZCB7XG4gICAgICAgIGlmIChTZWxlY3Rpb25VdGlsaXRpZXMuaXNBbGxTZWxlY3RlZChzZWxlY3Rpb24sIGRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgICBzZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRhdGFTb3VyY2UuZGF0YS5mb3JFYWNoKHJvdyA9PiBzZWxlY3Rpb24uc2VsZWN0KHJvdykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwgc2VsZWN0ZWQgZW50cmllcyBmcm9tIHRoZSBhcnJheS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0aW9uIC0gVGhlIHNlbGVjdGlvbiBjb250YWluaW5nIHRoZSBpdGVtcyB0byByZW1vdmUuXG4gICAgICogQHBhcmFtIHZhbHVlcyAtIFRoZSB2YWx1ZXMgb2YgdGhlIGRhdGFTb3VyY2UuXG4gICAgICogQHBhcmFtIGRhdGFTb3VyY2UgLSBUaGUgZGF0YVNvdXJjZS5cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHlwZXNjcmlwdC9uby1leHBsaWNpdC1hbnlcbiAgICBzdGF0aWMgcmVtb3ZlKHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55PiwgdmFsdWVzOiBhbnlbXSwgZGF0YVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPGFueT4pOiB2b2lkIHtcbiAgICAgICAgc2VsZWN0aW9uLnNlbGVjdGVkLmZvckVhY2gocyA9PiB7XG4gICAgICAgICAgICB2YWx1ZXMuc3BsaWNlKHZhbHVlcy5pbmRleE9mKHMpLCAxKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRhdGFTb3VyY2UuZGF0YSA9IHZhbHVlcztcbiAgICAgICAgc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgfVxufSJdfQ==
|
|
@@ -11,7 +11,6 @@ export class ValidationUtilities {
|
|
|
11
11
|
/**
|
|
12
12
|
* Checks if the values on an entity are valid.
|
|
13
13
|
* Also checks all the validators given by the metadata ("required", "maxLength" etc.).
|
|
14
|
-
*
|
|
15
14
|
* @param entity - The entity to validate.
|
|
16
15
|
* @param omit - Whether to check for creating or editing validity.
|
|
17
16
|
* @returns Whether or not the entity is valid.
|
|
@@ -21,7 +20,6 @@ export class ValidationUtilities {
|
|
|
21
20
|
}
|
|
22
21
|
/**
|
|
23
22
|
* Gets all validation errors on the given entity.
|
|
24
|
-
*
|
|
25
23
|
* @param entity - The entity to validate.
|
|
26
24
|
* @param omit - What keys not to check. An empty value means no keys are omitted.
|
|
27
25
|
* @returns An array of validation errors on the provided entity.
|
|
@@ -54,7 +52,6 @@ export class ValidationUtilities {
|
|
|
54
52
|
// }
|
|
55
53
|
/**
|
|
56
54
|
* Validates the property on the given entity with the given key.
|
|
57
|
-
*
|
|
58
55
|
* @param entity - The entity on which the property to check is.
|
|
59
56
|
* @param key - The key of the property to validate.
|
|
60
57
|
* @param omit - What keys not to check. An empty value means no keys are omitted.
|
|
@@ -170,7 +167,7 @@ export class ValidationUtilities {
|
|
|
170
167
|
case DecoratorTypes.HAS_MANY:
|
|
171
168
|
break;
|
|
172
169
|
case DecoratorTypes.CUSTOM:
|
|
173
|
-
// eslint-disable-next-line
|
|
170
|
+
// eslint-disable-next-line typescript/no-explicit-any, max-len
|
|
174
171
|
const customMetadata = metadata;
|
|
175
172
|
if (!customMetadata.isValid(entity[key], omit)) {
|
|
176
173
|
return {
|
|
@@ -301,45 +298,53 @@ export class ValidationUtilities {
|
|
|
301
298
|
};
|
|
302
299
|
}
|
|
303
300
|
}
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
property: metadata.displayName,
|
|
327
|
-
message: `end date needs to be before ${formatDate(metadata.maxEnd(value.end))}`
|
|
328
|
-
};
|
|
301
|
+
if (value.start) {
|
|
302
|
+
value.start = new Date(value.start);
|
|
303
|
+
if (metadata.minStart && value.start.getTime() < metadata.minStart(value.start).getTime()) {
|
|
304
|
+
return {
|
|
305
|
+
property: metadata.displayName,
|
|
306
|
+
message: `start date needs to be after ${formatDate(metadata.minStart(value.start))}`
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
if (metadata.maxStart && value.start.getTime() > metadata.maxStart(value.start).getTime()) {
|
|
310
|
+
return {
|
|
311
|
+
property: metadata.displayName,
|
|
312
|
+
message: `start date needs to be before ${formatDate(metadata.maxStart(value.start))}`
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
if (metadata.filter) {
|
|
316
|
+
if (!metadata.filter(value.start)) {
|
|
317
|
+
return {
|
|
318
|
+
property: metadata.displayName,
|
|
319
|
+
message: 'start date invalid'
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
}
|
|
329
323
|
}
|
|
330
|
-
if (
|
|
331
|
-
|
|
324
|
+
if (value.end) {
|
|
325
|
+
value.end = new Date(value.end);
|
|
326
|
+
if (metadata.minEnd && value.end.getTime() < metadata.minEnd(value.end).getTime()) {
|
|
332
327
|
return {
|
|
333
328
|
property: metadata.displayName,
|
|
334
|
-
message:
|
|
329
|
+
message: `end date needs to be after ${formatDate(metadata.minEnd(value.end))}`
|
|
335
330
|
};
|
|
336
331
|
}
|
|
337
|
-
if (
|
|
332
|
+
if (metadata.maxEnd && value.end.getTime() > metadata.maxEnd(value.end).getTime()) {
|
|
338
333
|
return {
|
|
339
334
|
property: metadata.displayName,
|
|
340
|
-
message:
|
|
335
|
+
message: `end date needs to be before ${formatDate(metadata.maxEnd(value.end))}`
|
|
341
336
|
};
|
|
342
337
|
}
|
|
338
|
+
if (metadata.filter) {
|
|
339
|
+
if (!metadata.filter(value.end)) {
|
|
340
|
+
return {
|
|
341
|
+
property: metadata.displayName,
|
|
342
|
+
message: 'end date invalid'
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
if (metadata.filter && value.values) {
|
|
343
348
|
for (const date of value.values) {
|
|
344
349
|
if (!metadata.filter(date)) {
|
|
345
350
|
return {
|
|
@@ -452,4 +457,4 @@ function formatDate(date) {
|
|
|
452
457
|
date.getFullYear()
|
|
453
458
|
].join('/');
|
|
454
459
|
}
|
|
455
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi51dGlsaXRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi51dGlsaXRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBV3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQWlCakQ7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLG1CQUFtQjtJQUNyQzs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLGFBQWEsQ0FBZ0QsTUFBa0IsRUFBRSxJQUEwQjtRQUM5RyxPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLHlCQUF5QixDQUM1QixNQUFrQixFQUNsQixJQUEwQjtRQUUxQixNQUFNLEdBQUcsR0FBc0IsRUFBRSxDQUFDO1FBQ2xDLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxFQUFFO1lBQ3RCLE1BQU0sR0FBRyxHQUFnQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM1RixJQUFJLEdBQUcsRUFBRTtnQkFDTCxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2pCO1NB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LENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLEVBQUU7S0FDckIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRpbWUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQmFzZUVudGl0eVR5cGUgfSBmcm9tICcuLi9jbGFzc2VzL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9hcnJheS9hcnJheS1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBEZWNvcmF0b3JUeXBlcyB9IGZyb20gJy4uL2RlY29yYXRvcnMvYmFzZS9kZWNvcmF0b3ItdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBQcm9wZXJ0eURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9iYXNlL3Byb3BlcnR5LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IFRvZ2dsZUJvb2xlYW5EZWNvcmF0b3JDb25maWdJbnRlcm5hbCB9IGZyb20gJy4uL2RlY29yYXRvcnMvYm9vbGVhbi9ib29sZWFuLWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IEN1c3RvbURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9jdXN0b20vY3VzdG9tLWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IERhdGVSYW5nZURhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbCwgRGF0ZVRpbWVEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwsIERlZmF1bHREYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2RhdGUvZGF0ZS1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2RhdGUvZGF0ZS1kZWNvcmF0b3IuZGF0YSc7XG5pbXBvcnQgeyBEZWZhdWx0RmlsZURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9maWxlL2ZpbGUtZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgRmlsZURhdGEgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2ZpbGUvZmlsZS1kZWNvcmF0b3IuZGF0YSc7XG5pbXBvcnQgeyBEZWZhdWx0TnVtYmVyRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi9kZWNvcmF0b3JzL251bWJlci9udW1iZXItZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgRGVmYXVsdE9iamVjdERlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9vYmplY3Qvb2JqZWN0LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IERlZmF1bHRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCwgUGFzc3dvcmRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCwgVGV4dGJveFN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9zdHJpbmcvc3RyaW5nLWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IExvZGFzaFV0aWxpdGllcyB9IGZyb20gJy4uL2VuY2Fwc3VsYXRpb24vbG9kYXNoLnV0aWxpdGllcyc7XG5pbXBvcnQgeyBSZWZsZWN0VXRpbGl0aWVzIH0gZnJvbSAnLi4vZW5jYXBzdWxhdGlvbi9yZWZsZWN0LnV0aWxpdGllcyc7XG5pbXBvcnQgeyBEYXRlVXRpbGl0aWVzIH0gZnJvbSAnLi9kYXRlLnV0aWxpdGllcyc7XG5pbXBvcnQgeyBFbnRpdHlVdGlsaXRpZXMgfSBmcm9tICcuL2VudGl0eS51dGlsaXRpZXMnO1xuaW1wb3J0IHsgRmlsZVV0aWxpdGllcyB9IGZyb20gJy4vZmlsZS51dGlsaXRpZXMnO1xuXG4vKipcbiAqIEEgdmFsaWRhdGlvbiBlcnJvciByZXBvcnRlZCBieSB0aGUgdmFsaWRhdGlvbiB1dGlsaXRpZXMuXG4gKiBDb25zaXN0cyBvZiB0aGUgcHJvcGVydHkgbmFtZSB3aGVyZSB0aGUgZXJyb3Igb3JpZ2luYXRlZCBmcm9tIGFuZCBhIG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvbkVycm9yIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcHJvcGVydHkgbmFtZSBvbiB3aGljaCB0aGUgZXJyb3Igb2NjdXJyZWQuIFRoaXMgaXMgdGhlIGRpc3BsYXlOYW1lIHZhbHVlLlxuICAgICAqL1xuICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgLyoqXG4gICAgICogVGhlIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBtZXNzYWdlOiBzdHJpbmdcbn1cblxuLyoqXG4gKiBDb250YWlucyBIZWxwZXJNZXRob2RzIGFyb3VuZCBoYW5kbGluZyBWYWxpZGF0aW9uIG9mIGVudGl0aWVzIGFuZCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVmFsaWRhdGlvblV0aWxpdGllcyB7XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSB2YWx1ZXMgb24gYW4gZW50aXR5IGFyZSB2YWxpZC5cbiAgICAgKiBBbHNvIGNoZWNrcyBhbGwgdGhlIHZhbGlkYXRvcnMgZ2l2ZW4gYnkgdGhlIG1ldGFkYXRhIChcInJlcXVpcmVkXCIsIFwibWF4TGVuZ3RoXCIgZXRjLikuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZW50aXR5IC0gVGhlIGVudGl0eSB0byB2YWxpZGF0ZS5cbiAgICAgKiBAcGFyYW0gb21pdCAtIFdoZXRoZXIgdG8gY2hlY2sgZm9yIGNyZWF0aW5nIG9yIGVkaXRpbmcgdmFsaWRpdHkuXG4gICAgICogQHJldHVybnMgV2hldGhlciBvciBub3QgdGhlIGVudGl0eSBpcyB2YWxpZC5cbiAgICAgKi9cbiAgICBzdGF0aWMgaXNFbnRpdHlWYWxpZDxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KGVudGl0eTogRW50aXR5VHlwZSwgb21pdD86ICdjcmVhdGUnIHwgJ3VwZGF0ZScpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RW50aXR5VmFsaWRhdGlvbkVycm9ycyhlbnRpdHksIG9taXQpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFsbCB2YWxpZGF0aW9uIGVycm9ycyBvbiB0aGUgZ2l2ZW4gZW50aXR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGVudGl0eSAtIFRoZSBlbnRpdHkgdG8gdmFsaWRhdGUuXG4gICAgICogQHBhcmFtIG9taXQgLSBXaGF0IGtleXMgbm90IHRvIGNoZWNrLiBBbiBlbXB0eSB2YWx1ZSBtZWFucyBubyBrZXlzIGFyZSBvbWl0dGVkLlxuICAgICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3JzIG9uIHRoZSBwcm92aWRlZCBlbnRpdHkuXG4gICAgICovXG4gICAgc3RhdGljIGdldEVudGl0eVZhbGlkYXRpb25FcnJvcnM8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PihcbiAgICAgICAgZW50aXR5OiBFbnRpdHlUeXBlLFxuICAgICAgICBvbWl0PzogJ2NyZWF0ZScgfCAndXBkYXRlJ1xuICAgICk6IFZhbGlkYXRpb25FcnJvcltdIHtcbiAgICAgICAgY29uc3QgcmVzOiBWYWxpZGF0aW9uRXJyb3JbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBlbnRpdHkpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycjogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkID0gdGhpcy5nZXRQcm9wZXJ0eVZhbGlkYXRpb25FcnJvcihlbnRpdHksIGtleSwgb21pdCk7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmVzLnB1c2goZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIC8qKlxuICAgIC8vICAqIENoZWNrcyBpZiBhIHNpbmdsZSBwcm9wZXJ0eSB2YWx1ZSBpcyB2YWxpZC5cbiAgICAvLyAgKlxuICAgIC8vICAqIEBwYXJhbSBlbnRpdHkgLSBUaGUgZW50aXR5IHdoZXJlIHRoZSBwcm9wZXJ0eSBpcyBmcm9tLlxuICAgIC8vICAqIEBwYXJhbSBrZXkgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuXG4gICAgLy8gICogQHBhcmFtIG9taXQgLSBXaGV0aGVyIHRvIGNoZWNrIGlmIHRoZSBnaXZlbiBlbnRpdHkgaXMgdmFsaWQgZm9yIGNyZWF0aW9uIG9yIHVwZGF0aW5nLlxuICAgIC8vICAqIEByZXR1cm5zIFdoZXRoZXIgb3Igbm90IHRoZSBwcm9wZXJ0eSB2YWx1ZSBpcyB2YWxpZC5cbiAgICAvLyAgKiBAdGhyb3dzIFRocm93cyB3aGVuIGl0IGV4dHJhY3RzIGFuIHVua25vd24gbWV0YWRhdGEgdHlwZS5cbiAgICAvLyAgKi9cbiAgICAvLyBzdGF0aWMgaXNQcm9wZXJ0eVZhbGlkPEVudGl0eVR5cGUgZXh0ZW5kcyBCYXNlRW50aXR5VHlwZTxFbnRpdHlUeXBlPj4oXG4gICAgLy8gICAgIGVudGl0eTogRW50aXR5VHlwZSxcbiAgICAvLyAgICAga2V5OiBrZXlvZiBFbnRpdHlUeXBlLFxuICAgIC8vICAgICBvbWl0PzogJ2NyZWF0ZScgfCAndXBkYXRlJ1xuICAgIC8vICk6IGJvb2xlYW4ge1xuICAgIC8vICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbGlkYXRpb25FcnJvcihlbnRpdHksIGtleSwgb21pdCkgPT0gbnVsbDtcbiAgICAvLyB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZXMgdGhlIHByb3BlcnR5IG9uIHRoZSBnaXZlbiBlbnRpdHkgd2l0aCB0aGUgZ2l2ZW4ga2V5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGVudGl0eSAtIFRoZSBlbnRpdHkgb24gd2hpY2ggdGhlIHByb3BlcnR5IHRvIGNoZWNrIGlzLlxuICAgICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byB2YWxpZGF0ZS5cbiAgICAgKiBAcGFyYW0gb21pdCAtIFdoYXQga2V5cyBub3QgdG8gY2hlY2suIEFuIGVtcHR5IHZhbHVlIG1lYW5zIG5vIGtleXMgYXJlIG9taXR0ZWQuXG4gICAgICogQHJldHVybnMgQSB2YWxpZGF0aW9uIGVycm9yIHdoZW4gdGhlIHByb3BlcnR5IGlzIG5vdCB2YWxpZCwgdW5kZWZpbmVkIG90aGVyd2lzZS5cbiAgICAgKiBAdGhyb3dzIFdoZW4gdGhlIHR5cGUgb2YgdGhlIHByb3BlcnR5IGlzIG5vdCBrbm93bi5cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UHJvcGVydHlWYWxpZGF0aW9uRXJyb3I8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PihcbiAgICAgICAgZW50aXR5OiBFbnRpdHlUeXBlLFxuICAgICAgICBrZXk6IGtleW9mIEVudGl0eVR5cGUsXG4gICAgICAgIG9taXQ/OiAnY3JlYXRlJyB8ICd1cGRhdGUnXG4gICAgKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgdHlwZTogRGVjb3JhdG9yVHlwZXMgPSBFbnRpdHlVdGlsaXRpZXMuZ2V0UHJvcGVydHlUeXBlKGVudGl0eSwga2V5KTtcbiAgICAgICAgY29uc3QgbWV0YWRhdGE6IFByb3BlcnR5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8dW5rbm93bj4gPSBFbnRpdHlVdGlsaXRpZXMuZ2V0UHJvcGVydHlNZXRhZGF0YShlbnRpdHksIGtleSwgdHlwZSk7XG5cbiAgICAgICAgaWYgKG1ldGFkYXRhLm9taXRGb3JDcmVhdGUgJiYgb21pdCA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm9taXRGb3JVcGRhdGUgJiYgb21pdCA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSkgJiYgdHlwZSAhPT0gRGVjb3JhdG9yVHlwZXMuSEFTX01BTlkpIHtcbiAgICAgICAgICAgIGlmIChlbnRpdHlba2V5XSA9PSBudWxsIHx8IGVudGl0eVtrZXldID09PSAnJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ3JlcXVpcmVkJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpKSB7XG4gICAgICAgICAgICBpZiAoZW50aXR5W2tleV0gPT0gbnVsbCB8fCBlbnRpdHlba2V5XSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5CT09MRUFOX0RST1BET1dOOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5CT09MRUFOX0NIRUNLQk9YOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5CT09MRUFOX1RPR0dMRTpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlCb29sZWFuOiBib29sZWFuID0gZW50aXR5W2tleV0gYXMgYm9vbGVhbjtcbiAgICAgICAgICAgICAgICBjb25zdCBib29sZWFuTWV0YWRhdGE6IFRvZ2dsZUJvb2xlYW5EZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIFRvZ2dsZUJvb2xlYW5EZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRCb29sZWFuVmFsaWRhdGlvbkVycm9yKGVudGl0eSwgZW50aXR5Qm9vbGVhbiwgYm9vbGVhbk1ldGFkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuU1RSSU5HX0RST1BET1dOOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5TVFJJTkc6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlNUUklOR19BVVRPQ09NUExFVEU6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5U3RyaW5nOiBzdHJpbmcgPSBlbnRpdHlba2V5XSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nTWV0YWRhdGE6IERlZmF1bHRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIERlZmF1bHRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdWYWxpZGF0aW9uRXJyb3IoZW50aXR5U3RyaW5nLCBzdHJpbmdNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlNUUklOR19URVhUQk9YOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eVRleHRib3g6IHN0cmluZyA9IGVudGl0eVtrZXldIGFzIHN0cmluZztcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0Ym94TWV0YWRhdGE6IFRleHRib3hTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIFRleHRib3hTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUZXh0Ym94VmFsaWRhdGlvbkVycm9yKGVudGl0eVRleHRib3gsIHRleHRib3hNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlNUUklOR19QQVNTV09SRDpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlQYXNzd29yZDogc3RyaW5nID0gZW50aXR5W2tleV0gYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhc3N3b3JkTWV0YWRhdGE6IFBhc3N3b3JkU3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgPSBtZXRhZGF0YSBhcyBQYXNzd29yZFN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpcm1QYXNzd29yZDogc3RyaW5nID0gUmVmbGVjdFV0aWxpdGllcy5nZXRNZXRhZGF0YShFbnRpdHlVdGlsaXRpZXMuQ09ORklSTV9QQVNTV09SRF9LRVksIGVudGl0eSwga2V5KSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFzc3dvcmRWYWxpZGF0aW9uRXJyb3IoZW50aXR5UGFzc3dvcmQsIHBhc3N3b3JkTWV0YWRhdGEsIGNvbmZpcm1QYXNzd29yZCk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLk5VTUJFUl9EUk9QRE9XTjpcbiAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIG9ubHkgdmFsaWQgdmFsdWVzIGNhbiBiZSBzZWxlY3RlZCwgdGhpcyBpcyBhbHdheXMgdHJ1ZSB3aGVuIGl0IGhhcyBhIHZhbHVlXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuTlVNQkVSOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5OVU1CRVJfU0xJREVSOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eU51bWJlcjogbnVtYmVyID0gZW50aXR5W2tleV0gYXMgbnVtYmVyO1xuICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlck1ldGFkYXRhOiBEZWZhdWx0TnVtYmVyRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgPSBtZXRhZGF0YSBhcyBEZWZhdWx0TnVtYmVyRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyVmFsaWRhdGlvbkVycm9yKGVudGl0eU51bWJlciwgbnVtYmVyTWV0YWRhdGEpO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5PQkpFQ1Q6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5T2JqZWN0OiBFbnRpdHlUeXBlID0gZW50aXR5W2tleV0gYXMgRW50aXR5VHlwZTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhcmFtZXRlcktleSBpbiBlbnRpdHlPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWU6IHVua25vd24gPSBlbnRpdHlPYmplY3RbcGFyYW1ldGVyS2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgIShtZXRhZGF0YSBhcyBEZWZhdWx0T2JqZWN0RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZT4pLm9taXQuaW5jbHVkZXMocGFyYW1ldGVyS2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgISghbWV0YWRhdGEucmVxdWlyZWQoZW50aXR5KSAmJiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PSAnJykpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQgPSB0aGlzLmdldFByb3BlcnR5VmFsaWRhdGlvbkVycm9yKGVudGl0eU9iamVjdCwgcGFyYW1ldGVyS2V5LCBvbWl0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGAke2Vyci5wcm9wZXJ0eX0gaXMgaW52YWxpZDogJHtlcnIubWVzc2FnZX1gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuQVJSQVlfU1RSSU5HX0NISVBTOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5BUlJBWV9TVFJJTkdfQVVUT0NPTVBMRVRFX0NISVBTOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5BUlJBWV9EQVRFOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5BUlJBWV9EQVRFX1RJTUU6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkFSUkFZX0RBVEVfUkFOR0U6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkFSUkFZOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eUFycmF5OiB1bmtub3duW10gPSBlbnRpdHlba2V5XSBhcyB1bmtub3duW107XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgICAgICAgICBjb25zdCBhcnJheU1ldGFkYXRhOiBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsPEVudGl0eVR5cGU+ID0gbWV0YWRhdGEgYXMgRW50aXR5QXJyYXlEZWNvcmF0b3JDb25maWdJbnRlcm5hbDxFbnRpdHlUeXBlPjtcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlNZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpICYmICFlbnRpdHlBcnJheS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdubyBpdGVtcyBpbiBhcnJheSdcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkRBVEU6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5RGF0ZTogRGF0ZSA9IG5ldyBEYXRlKGVudGl0eVtrZXldIGFzIERhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVNZXRhZGF0YTogRGVmYXVsdERhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIERlZmF1bHREYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0ZVZhbGlkYXRpb25FcnJvcihlbnRpdHlEYXRlLCBkYXRlTWV0YWRhdGEpO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5EQVRFX1JBTkdFOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eURhdGVSYW5nZTogRGF0ZVJhbmdlID0gTG9kYXNoVXRpbGl0aWVzLmNsb25lRGVlcChlbnRpdHlba2V5XSBhcyBEYXRlUmFuZ2UpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVSYW5nZU1ldGFkYXRhOiBEYXRlUmFuZ2VEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgPSBtZXRhZGF0YSBhcyBEYXRlUmFuZ2VEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0ZVJhbmdlVmFsaWRhdGlvbkVycm9yKGVudGl0eSwgZW50aXR5RGF0ZVJhbmdlLCBkYXRlUmFuZ2VNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkRBVEVfVElNRTpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlEYXRlVGltZTogRGF0ZSA9IG5ldyBEYXRlKGVudGl0eVtrZXldIGFzIERhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVUaW1lTWV0YWRhdGE6IERhdGVUaW1lRGF0ZURlY29yYXRvckNvbmZpZ0ludGVybmFsID0gbWV0YWRhdGEgYXMgRGF0ZVRpbWVEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzVGltZTogYm9vbGVhbiA9IFJlZmxlY3RVdGlsaXRpZXMuaGFzTWV0YWRhdGEoRW50aXR5VXRpbGl0aWVzLlRJTUVfS0VZLCBlbnRpdHksIGtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0ZVRpbWVWYWxpZGF0aW9uRXJyb3IoZW50aXR5RGF0ZVRpbWUsIGRhdGVUaW1lTWV0YWRhdGEsIGhhc1RpbWUpO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5GSUxFX0RFRkFVTFQ6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkZJTEVfSU1BR0U6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5RmlsZTogRmlsZURhdGEgfCBGaWxlRGF0YVtdID0gZW50aXR5W2tleV0gYXMgRmlsZURhdGEgfCBGaWxlRGF0YVtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eUZpbGVNZXRhZGF0YTogRGVmYXVsdEZpbGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIERlZmF1bHRGaWxlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RmlsZURhdGFWYWxpZGF0aW9uRXJyb3IoZW50aXR5RmlsZSwgZW50aXR5RmlsZU1ldGFkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuUkVGRVJFTkNFU19NQU5ZOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5SRUZFUkVOQ0VTX09ORTpcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuSEFTX01BTlk6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkNVU1RPTTpcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgbWF4LWxlblxuICAgICAgICAgICAgICAgIGNvbnN0IGN1c3RvbU1ldGFkYXRhOiBDdXN0b21EZWNvcmF0b3JDb25maWdJbnRlcm5hbDxFbnRpdHlUeXBlLCBhbnksIGFueSwgYW55PiA9IG1ldGFkYXRhIGFzIEN1c3RvbURlY29yYXRvckNvbmZpZ0ludGVybmFsPEVudGl0eVR5cGUsIGFueSwgYW55LCBhbnk+O1xuICAgICAgICAgICAgICAgIGlmICghY3VzdG9tTWV0YWRhdGEuaXNWYWxpZChlbnRpdHlba2V5XSwgb21pdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkJ1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgdmFsaWRhdGUgdGhlIGlucHV0IGJlY2F1c2UgdGhlIERlY29yYXRvclR5cGUgJHt0eXBlfSBpcyBub3Qga25vd25gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldEJvb2xlYW5WYWxpZGF0aW9uRXJyb3I8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PihcbiAgICAgICAgZW50aXR5OiBFbnRpdHlUeXBlLFxuICAgICAgICB2YWx1ZTogYm9vbGVhbixcbiAgICAgICAgbWV0YWRhdGE6IFRvZ2dsZUJvb2xlYW5EZWNvcmF0b3JDb25maWdJbnRlcm5hbFxuICAgICk6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChtZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpICYmICF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ25vdCBzZWxlY3RlZCdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRTdHJpbmdWYWxpZGF0aW9uRXJyb3IodmFsdWU6IHN0cmluZywgbWV0YWRhdGE6IERlZmF1bHRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCk6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChtZXRhZGF0YS5tYXhMZW5ndGggJiYgdmFsdWUubGVuZ3RoID4gbWV0YWRhdGEubWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgc21hbGxlciB0aGFuICR7bWV0YWRhdGEubWF4TGVuZ3RofSBjaGFyYWN0ZXJzYFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWluTGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA8IG1ldGFkYXRhLm1pbkxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIGJpZ2dlciB0aGFuICR7bWV0YWRhdGEubWluTGVuZ3RofSBjaGFyYWN0ZXJzYFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEucmVnZXggJiYgIXZhbHVlLm1hdGNoKG1ldGFkYXRhLnJlZ2V4KSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0VGV4dGJveFZhbGlkYXRpb25FcnJvcih2YWx1ZTogc3RyaW5nLCBtZXRhZGF0YTogVGV4dGJveFN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKG1ldGFkYXRhLm1heExlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPiBtZXRhZGF0YS5tYXhMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBzbWFsbGVyIHRoYW4gJHttZXRhZGF0YS5tYXhMZW5ndGh9IGNoYXJhY3RlcnNgXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5taW5MZW5ndGggJiYgdmFsdWUubGVuZ3RoIDwgbWV0YWRhdGEubWluTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgYmlnZ2VyIHRoYW4gJHttZXRhZGF0YS5taW5MZW5ndGh9IGNoYXJhY3RlcnNgXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0UGFzc3dvcmRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgICAgIG1ldGFkYXRhOiBQYXNzd29yZFN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsLFxuICAgICAgICBjb25maXJtUGFzc3dvcmQ6IHN0cmluZ1xuICAgICk6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gY29uZmlybVBhc3N3b3JkKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAncGFzc3dvcmRzIG5lZWQgdG8gbWF0Y2gnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5tYXhMZW5ndGggJiYgdmFsdWUubGVuZ3RoID4gbWV0YWRhdGEubWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgc21hbGxlciB0aGFuICR7bWV0YWRhdGEubWF4TGVuZ3RofSBjaGFyYWN0ZXJzYFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWluTGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA8IG1ldGFkYXRhLm1pbkxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIGJpZ2dlciB0aGFuICR7bWV0YWRhdGEubWluTGVuZ3RofSBjaGFyYWN0ZXJzYFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEucmVnZXggJiYgIXZhbHVlLm1hdGNoKG1ldGFkYXRhLnJlZ2V4KSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0TnVtYmVyVmFsaWRhdGlvbkVycm9yKHZhbHVlOiBudW1iZXIsIG1ldGFkYXRhOiBEZWZhdWx0TnVtYmVyRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwpOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAobWV0YWRhdGEubWF4ICYmIHZhbHVlID4gbWV0YWRhdGEubWF4KSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgc21hbGxlciB0aGFuICR7bWV0YWRhdGEubWF4fWBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm1pbiAmJiB2YWx1ZSA8IG1ldGFkYXRhLm1pbikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIGJpZ2dlciB0aGFuICR7bWV0YWRhdGEubWlufWBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXREYXRlVmFsaWRhdGlvbkVycm9yKHZhbHVlOiBEYXRlLCBtZXRhZGF0YTogRGVmYXVsdERhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbCk6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChtZXRhZGF0YS5taW4gJiYgdmFsdWUuZ2V0VGltZSgpIDwgbWV0YWRhdGEubWluKHZhbHVlKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBhZnRlciAke2Zvcm1hdERhdGUobWV0YWRhdGEubWluKHZhbHVlKSl9YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWF4ICYmIHZhbHVlLmdldFRpbWUoKSA+IG1ldGFkYXRhLm1heCh2YWx1ZSkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgYmVmb3JlICR7Zm9ybWF0RGF0ZShtZXRhZGF0YS5tYXgodmFsdWUpKX1gXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5maWx0ZXIgJiYgIW1ldGFkYXRhLmZpbHRlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldERhdGVSYW5nZVZhbGlkYXRpb25FcnJvcjxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KFxuICAgICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgICAgIHZhbHVlOiBEYXRlUmFuZ2UsXG4gICAgICAgIG1ldGFkYXRhOiBEYXRlUmFuZ2VEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWxcbiAgICApOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAobWV0YWRhdGEucmVxdWlyZWQoZW50aXR5KSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlLnN0YXJ0ID09IG51bGwgfHwgdmFsdWUuZW5kID09IG51bGwgfHwgdmFsdWUudmFsdWVzID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdyZXF1aXJlZCdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhbHVlLnN0YXJ0ID0gbmV3IERhdGUodmFsdWUuc3RhcnQpO1xuICAgICAgICB2YWx1ZS5lbmQgPSBuZXcgRGF0ZSh2YWx1ZS5lbmQpO1xuICAgICAgICBpZiAobWV0YWRhdGEubWluU3RhcnQgJiYgdmFsdWUuc3RhcnQuZ2V0VGltZSgpIDwgbWV0YWRhdGEubWluU3RhcnQodmFsdWUuc3RhcnQpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYHN0YXJ0IGRhdGUgbmVlZHMgdG8gYmUgYWZ0ZXIgJHtmb3JtYXREYXRlKG1ldGFkYXRhLm1pblN0YXJ0KHZhbHVlLnN0YXJ0KSl9YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWF4U3RhcnQgJiYgdmFsdWUuc3RhcnQuZ2V0VGltZSgpID4gbWV0YWRhdGEubWF4U3RhcnQodmFsdWUuc3RhcnQpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYHN0YXJ0IGRhdGUgbmVlZHMgdG8gYmUgYmVmb3JlICR7Zm9ybWF0RGF0ZShtZXRhZGF0YS5tYXhTdGFydCh2YWx1ZS5zdGFydCkpfWBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm1pbkVuZCAmJiB2YWx1ZS5lbmQuZ2V0VGltZSgpIDwgbWV0YWRhdGEubWluRW5kKHZhbHVlLmVuZCkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgZW5kIGRhdGUgbmVlZHMgdG8gYmUgYWZ0ZXIgJHtmb3JtYXREYXRlKG1ldGFkYXRhLm1pbkVuZCh2YWx1ZS5lbmQpKX1gXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5tYXhFbmQgJiYgdmFsdWUuZW5kLmdldFRpbWUoKSA+IG1ldGFkYXRhLm1heEVuZCh2YWx1ZS5lbmQpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYGVuZCBkYXRlIG5lZWRzIHRvIGJlIGJlZm9yZSAke2Zvcm1hdERhdGUobWV0YWRhdGEubWF4RW5kKHZhbHVlLmVuZCkpfWBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLmZpbHRlcikge1xuICAgICAgICAgICAgaWYgKCFtZXRhZGF0YS5maWx0ZXIodmFsdWUuc3RhcnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnc3RhcnQgZGF0ZSBpbnZhbGlkJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW1ldGFkYXRhLmZpbHRlcih2YWx1ZS5lbmQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnZW5kIGRhdGUgaW52YWxpZCdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBkYXRlIG9mIHZhbHVlLnZhbHVlcykge1xuICAgICAgICAgICAgICAgIGlmICghbWV0YWRhdGEuZmlsdGVyKGRhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgdmFsdWUgJHtmb3JtYXREYXRlKGRhdGUpfSBpbnZhbGlkYFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldERhdGVUaW1lVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICB2YWx1ZTogRGF0ZSxcbiAgICAgICAgbWV0YWRhdGE6IERhdGVUaW1lRGF0ZURlY29yYXRvckNvbmZpZ0ludGVybmFsLFxuICAgICAgICBoYXNUaW1lOiBib29sZWFuXG4gICAgKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKCFoYXNUaW1lKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnbm8gdGltZSdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm1pbkRhdGUgJiYgdmFsdWUuZ2V0VGltZSgpIDwgbWV0YWRhdGEubWluRGF0ZSh2YWx1ZSkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgZGF0ZSBuZWVkcyB0byBiZSBhZnRlciAke2Zvcm1hdERhdGUobWV0YWRhdGEubWluRGF0ZSh2YWx1ZSkpfWBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm1heERhdGUgJiYgdmFsdWUuZ2V0VGltZSgpID4gbWV0YWRhdGEubWF4RGF0ZSh2YWx1ZSkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgZGF0ZSBuZWVkcyB0byBiZSBiZWZvcmUgJHtmb3JtYXREYXRlKG1ldGFkYXRhLm1heERhdGUodmFsdWUpKX1gXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5maWx0ZXJEYXRlICYmICFtZXRhZGF0YS5maWx0ZXJEYXRlKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQgZGF0ZSdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGltZTogVGltZSA9IERhdGVVdGlsaXRpZXMuZ2V0VGltZUZyb21EYXRlKHZhbHVlKSBhcyBUaW1lO1xuICAgICAgICBpZiAobWV0YWRhdGEubWluVGltZSkge1xuICAgICAgICAgICAgY29uc3QgbWluVGltZTogVGltZSA9IG1ldGFkYXRhLm1pblRpbWUodmFsdWUpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgIHRpbWUuaG91cnMgPiBtaW5UaW1lLmhvdXJzXG4gICAgICAgICAgICAgICAgICAgIHx8IChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuaG91cnMgPT09IG1pblRpbWUuaG91cnNcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHRpbWUubWludXRlcyA+PSBtaW5UaW1lLm1pbnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYHRpbWUgbmVlZHMgdG8gYmUgYWZ0ZXIgJHttaW5UaW1lLmhvdXJzfToke21pblRpbWUubWludXRlc31gXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWF4VGltZSkge1xuICAgICAgICAgICAgY29uc3QgbWF4VGltZTogVGltZSA9IG1ldGFkYXRhLm1heFRpbWUodmFsdWUpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgIHRpbWUuaG91cnMgPCBtYXhUaW1lLmhvdXJzXG4gICAgICAgICAgICAgICAgICAgIHx8IChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuaG91cnMgPT09IG1heFRpbWUuaG91cnNcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHRpbWUubWludXRlcyA8PSBtYXhUaW1lLm1pbnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYHRpbWUgbmVlZHMgdG8gYmUgYmVmb3JlICR7bWF4VGltZS5ob3Vyc306JHttYXhUaW1lLm1pbnV0ZXN9YFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLmZpbHRlclRpbWUgJiYgIW1ldGFkYXRhLmZpbHRlclRpbWUodGltZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkIHRpbWUnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0RmlsZURhdGFWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIHZhbHVlOiBGaWxlRGF0YSB8IEZpbGVEYXRhW10sXG4gICAgICAgIG1ldGFkYXRhOiBEZWZhdWx0RmlsZURlY29yYXRvckNvbmZpZ0ludGVybmFsXG4gICAgKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgZmlsZXM6IEZpbGVEYXRhW10gPSBtZXRhZGF0YS5tdWx0aXBsZSA/IHZhbHVlIGFzIEZpbGVEYXRhW10gOiBbdmFsdWUgYXMgRmlsZURhdGFdO1xuICAgICAgICBsZXQgZmlsZVNpemVUb3RhbDogbnVtYmVyID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgICAgICBpZiAoIWZpbGUubmFtZSB8fCAhZmlsZS5maWxlICYmICFmaWxlLnVybCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghRmlsZVV0aWxpdGllcy5pc01pbWVUeXBlVmFsaWQoZmlsZS50eXBlLCBtZXRhZGF0YS5hbGxvd2VkTWltZVR5cGVzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYG1pbWV0eXBlIG5lZWRzIHRvIGJlIG9uZSBvZiAke21ldGFkYXRhLmFsbG93ZWRNaW1lVHlwZXN9YFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoRmlsZVV0aWxpdGllcy50cmFuc2Zvcm1Ub01lZ2FCeXRlcyhmaWxlLnNpemUsICdCJykgPiBtZXRhZGF0YS5tYXhTaXplKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgZmlsZSBuZWVkcyB0byBiZSBzbWFsbGVyIHRoYW4gJHttZXRhZGF0YS5tYXhTaXplfSBNQmBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsZVNpemVUb3RhbCArPSBmaWxlLnNpemU7XG4gICAgICAgICAgICBpZiAoRmlsZVV0aWxpdGllcy50cmFuc2Zvcm1Ub01lZ2FCeXRlcyhmaWxlU2l6ZVRvdGFsLCAnQicpID4gbWV0YWRhdGEubWF4U2l6ZVRvdGFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgVGhlIHNpemUgb2YgYWxsIGZpbGVzIGNvbWJpbmVkIG5lZWRzIHRvIGJlIHNtYWxsZXIgdGhhbiAke21ldGFkYXRhLm1heFNpemVUb3RhbH1gXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmZ1bmN0aW9uIHBhZFRvMkRpZ2l0cyhudW06IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIG51bS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5mdW5jdGlvbiBmb3JtYXREYXRlKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIHJldHVybiBbXG4gICAgICAgIHBhZFRvMkRpZ2l0cyhkYXRlLmdldERhdGUoKSksXG4gICAgICAgIHBhZFRvMkRpZ2l0cyhkYXRlLmdldE1vbnRoKCkgKyAxKSxcbiAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpXG4gICAgXS5qb2luKCcvJyk7XG59Il19
|
|
460
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi51dGlsaXRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi51dGlsaXRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBV3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQWlCakQ7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLG1CQUFtQjtJQUNyQzs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsYUFBYSxDQUFnRCxNQUFrQixFQUFFLElBQTBCO1FBQzlHLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyx5QkFBeUIsQ0FDNUIsTUFBa0IsRUFDbEIsSUFBMEI7UUFFMUIsTUFBTSxHQUFHLEdBQXNCLEVBQUUsQ0FBQztRQUNsQyxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRTtZQUN0QixNQUFNLEdBQUcsR0FBZ0MsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDNUYsSUFBSSxHQUFHLEVBQUU7Z0JBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNqQjtTQUNK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QUErQztBQUMvQyxTQUFTLFlBQVksQ0FBQyxHQUFXO0lBQzdCLE9BQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVELCtDQUErQztBQUMvQyxTQUFTLFVBQVUsQ0FBQyxJQUFVO0lBQzFCLE9BQU87UUFDSCxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLEVBQUU7S0FDckIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRpbWUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQmFzZUVudGl0eVR5cGUgfSBmcm9tICcuLi9jbGFzc2VzL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9hcnJheS9hcnJheS1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBEZWNvcmF0b3JUeXBlcyB9IGZyb20gJy4uL2RlY29yYXRvcnMvYmFzZS9kZWNvcmF0b3ItdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBQcm9wZXJ0eURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9iYXNlL3Byb3BlcnR5LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IFRvZ2dsZUJvb2xlYW5EZWNvcmF0b3JDb25maWdJbnRlcm5hbCB9IGZyb20gJy4uL2RlY29yYXRvcnMvYm9vbGVhbi9ib29sZWFuLWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IEN1c3RvbURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9jdXN0b20vY3VzdG9tLWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IERhdGVSYW5nZURhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbCwgRGF0ZVRpbWVEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwsIERlZmF1bHREYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2RhdGUvZGF0ZS1kZWNvcmF0b3ItaW50ZXJuYWwuZGF0YSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2RhdGUvZGF0ZS1kZWNvcmF0b3IuZGF0YSc7XG5pbXBvcnQgeyBEZWZhdWx0RmlsZURlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9maWxlL2ZpbGUtZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgRmlsZURhdGEgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2ZpbGUvZmlsZS1kZWNvcmF0b3IuZGF0YSc7XG5pbXBvcnQgeyBEZWZhdWx0TnVtYmVyRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi9kZWNvcmF0b3JzL251bWJlci9udW1iZXItZGVjb3JhdG9yLWludGVybmFsLmRhdGEnO1xuaW1wb3J0IHsgRGVmYXVsdE9iamVjdERlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9vYmplY3Qvb2JqZWN0LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IERlZmF1bHRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCwgUGFzc3dvcmRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCwgVGV4dGJveFN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9zdHJpbmcvc3RyaW5nLWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IExvZGFzaFV0aWxpdGllcyB9IGZyb20gJy4uL2VuY2Fwc3VsYXRpb24vbG9kYXNoLnV0aWxpdGllcyc7XG5pbXBvcnQgeyBSZWZsZWN0VXRpbGl0aWVzIH0gZnJvbSAnLi4vZW5jYXBzdWxhdGlvbi9yZWZsZWN0LnV0aWxpdGllcyc7XG5pbXBvcnQgeyBEYXRlVXRpbGl0aWVzIH0gZnJvbSAnLi9kYXRlLnV0aWxpdGllcyc7XG5pbXBvcnQgeyBFbnRpdHlVdGlsaXRpZXMgfSBmcm9tICcuL2VudGl0eS51dGlsaXRpZXMnO1xuaW1wb3J0IHsgRmlsZVV0aWxpdGllcyB9IGZyb20gJy4vZmlsZS51dGlsaXRpZXMnO1xuXG4vKipcbiAqIEEgdmFsaWRhdGlvbiBlcnJvciByZXBvcnRlZCBieSB0aGUgdmFsaWRhdGlvbiB1dGlsaXRpZXMuXG4gKiBDb25zaXN0cyBvZiB0aGUgcHJvcGVydHkgbmFtZSB3aGVyZSB0aGUgZXJyb3Igb3JpZ2luYXRlZCBmcm9tIGFuZCBhIG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvbkVycm9yIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcHJvcGVydHkgbmFtZSBvbiB3aGljaCB0aGUgZXJyb3Igb2NjdXJyZWQuIFRoaXMgaXMgdGhlIGRpc3BsYXlOYW1lIHZhbHVlLlxuICAgICAqL1xuICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgLyoqXG4gICAgICogVGhlIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZS5cbiAgICAgKi9cbiAgICBtZXNzYWdlOiBzdHJpbmdcbn1cblxuLyoqXG4gKiBDb250YWlucyBIZWxwZXJNZXRob2RzIGFyb3VuZCBoYW5kbGluZyBWYWxpZGF0aW9uIG9mIGVudGl0aWVzIGFuZCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVmFsaWRhdGlvblV0aWxpdGllcyB7XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSB2YWx1ZXMgb24gYW4gZW50aXR5IGFyZSB2YWxpZC5cbiAgICAgKiBBbHNvIGNoZWNrcyBhbGwgdGhlIHZhbGlkYXRvcnMgZ2l2ZW4gYnkgdGhlIG1ldGFkYXRhIChcInJlcXVpcmVkXCIsIFwibWF4TGVuZ3RoXCIgZXRjLikuXG4gICAgICogQHBhcmFtIGVudGl0eSAtIFRoZSBlbnRpdHkgdG8gdmFsaWRhdGUuXG4gICAgICogQHBhcmFtIG9taXQgLSBXaGV0aGVyIHRvIGNoZWNrIGZvciBjcmVhdGluZyBvciBlZGl0aW5nIHZhbGlkaXR5LlxuICAgICAqIEByZXR1cm5zIFdoZXRoZXIgb3Igbm90IHRoZSBlbnRpdHkgaXMgdmFsaWQuXG4gICAgICovXG4gICAgc3RhdGljIGlzRW50aXR5VmFsaWQ8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PihlbnRpdHk6IEVudGl0eVR5cGUsIG9taXQ/OiAnY3JlYXRlJyB8ICd1cGRhdGUnKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEVudGl0eVZhbGlkYXRpb25FcnJvcnMoZW50aXR5LCBvbWl0KS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbGwgdmFsaWRhdGlvbiBlcnJvcnMgb24gdGhlIGdpdmVuIGVudGl0eS5cbiAgICAgKiBAcGFyYW0gZW50aXR5IC0gVGhlIGVudGl0eSB0byB2YWxpZGF0ZS5cbiAgICAgKiBAcGFyYW0gb21pdCAtIFdoYXQga2V5cyBub3QgdG8gY2hlY2suIEFuIGVtcHR5IHZhbHVlIG1lYW5zIG5vIGtleXMgYXJlIG9taXR0ZWQuXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvcnMgb24gdGhlIHByb3ZpZGVkIGVudGl0eS5cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0RW50aXR5VmFsaWRhdGlvbkVycm9yczxFbnRpdHlUeXBlIGV4dGVuZHMgQmFzZUVudGl0eVR5cGU8RW50aXR5VHlwZT4+KFxuICAgICAgICBlbnRpdHk6IEVudGl0eVR5cGUsXG4gICAgICAgIG9taXQ/OiAnY3JlYXRlJyB8ICd1cGRhdGUnXG4gICAgKTogVmFsaWRhdGlvbkVycm9yW10ge1xuICAgICAgICBjb25zdCByZXM6IFZhbGlkYXRpb25FcnJvcltdID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGVudGl0eSkge1xuICAgICAgICAgICAgY29uc3QgZXJyOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQgPSB0aGlzLmdldFByb3BlcnR5VmFsaWRhdGlvbkVycm9yKGVudGl0eSwga2V5LCBvbWl0KTtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXMucHVzaChlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy8gLyoqXG4gICAgLy8gICogQ2hlY2tzIGlmIGEgc2luZ2xlIHByb3BlcnR5IHZhbHVlIGlzIHZhbGlkLlxuICAgIC8vICAqXG4gICAgLy8gICogQHBhcmFtIGVudGl0eSAtIFRoZSBlbnRpdHkgd2hlcmUgdGhlIHByb3BlcnR5IGlzIGZyb20uXG4gICAgLy8gICogQHBhcmFtIGtleSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eS5cbiAgICAvLyAgKiBAcGFyYW0gb21pdCAtIFdoZXRoZXIgdG8gY2hlY2sgaWYgdGhlIGdpdmVuIGVudGl0eSBpcyB2YWxpZCBmb3IgY3JlYXRpb24gb3IgdXBkYXRpbmcuXG4gICAgLy8gICogQHJldHVybnMgV2hldGhlciBvciBub3QgdGhlIHByb3BlcnR5IHZhbHVlIGlzIHZhbGlkLlxuICAgIC8vICAqIEB0aHJvd3MgVGhyb3dzIHdoZW4gaXQgZXh0cmFjdHMgYW4gdW5rbm93biBtZXRhZGF0YSB0eXBlLlxuICAgIC8vICAqL1xuICAgIC8vIHN0YXRpYyBpc1Byb3BlcnR5VmFsaWQ8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PihcbiAgICAvLyAgICAgZW50aXR5OiBFbnRpdHlUeXBlLFxuICAgIC8vICAgICBrZXk6IGtleW9mIEVudGl0eVR5cGUsXG4gICAgLy8gICAgIG9taXQ/OiAnY3JlYXRlJyB8ICd1cGRhdGUnXG4gICAgLy8gKTogYm9vbGVhbiB7XG4gICAgLy8gICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsaWRhdGlvbkVycm9yKGVudGl0eSwga2V5LCBvbWl0KSA9PSBudWxsO1xuICAgIC8vIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlcyB0aGUgcHJvcGVydHkgb24gdGhlIGdpdmVuIGVudGl0eSB3aXRoIHRoZSBnaXZlbiBrZXkuXG4gICAgICogQHBhcmFtIGVudGl0eSAtIFRoZSBlbnRpdHkgb24gd2hpY2ggdGhlIHByb3BlcnR5IHRvIGNoZWNrIGlzLlxuICAgICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byB2YWxpZGF0ZS5cbiAgICAgKiBAcGFyYW0gb21pdCAtIFdoYXQga2V5cyBub3QgdG8gY2hlY2suIEFuIGVtcHR5IHZhbHVlIG1lYW5zIG5vIGtleXMgYXJlIG9taXR0ZWQuXG4gICAgICogQHJldHVybnMgQSB2YWxpZGF0aW9uIGVycm9yIHdoZW4gdGhlIHByb3BlcnR5IGlzIG5vdCB2YWxpZCwgdW5kZWZpbmVkIG90aGVyd2lzZS5cbiAgICAgKiBAdGhyb3dzIFdoZW4gdGhlIHR5cGUgb2YgdGhlIHByb3BlcnR5IGlzIG5vdCBrbm93bi5cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UHJvcGVydHlWYWxpZGF0aW9uRXJyb3I8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PihcbiAgICAgICAgZW50aXR5OiBFbnRpdHlUeXBlLFxuICAgICAgICBrZXk6IGtleW9mIEVudGl0eVR5cGUsXG4gICAgICAgIG9taXQ/OiAnY3JlYXRlJyB8ICd1cGRhdGUnXG4gICAgKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgdHlwZTogRGVjb3JhdG9yVHlwZXMgPSBFbnRpdHlVdGlsaXRpZXMuZ2V0UHJvcGVydHlUeXBlKGVudGl0eSwga2V5KTtcbiAgICAgICAgY29uc3QgbWV0YWRhdGE6IFByb3BlcnR5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8dW5rbm93bj4gPSBFbnRpdHlVdGlsaXRpZXMuZ2V0UHJvcGVydHlNZXRhZGF0YShlbnRpdHksIGtleSwgdHlwZSk7XG5cbiAgICAgICAgaWYgKG1ldGFkYXRhLm9taXRGb3JDcmVhdGUgJiYgb21pdCA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm9taXRGb3JVcGRhdGUgJiYgb21pdCA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSkgJiYgdHlwZSAhPT0gRGVjb3JhdG9yVHlwZXMuSEFTX01BTlkpIHtcbiAgICAgICAgICAgIGlmIChlbnRpdHlba2V5XSA9PSBudWxsIHx8IGVudGl0eVtrZXldID09PSAnJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ3JlcXVpcmVkJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpKSB7XG4gICAgICAgICAgICBpZiAoZW50aXR5W2tleV0gPT0gbnVsbCB8fCBlbnRpdHlba2V5XSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5CT09MRUFOX0RST1BET1dOOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5CT09MRUFOX0NIRUNLQk9YOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5CT09MRUFOX1RPR0dMRTpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlCb29sZWFuOiBib29sZWFuID0gZW50aXR5W2tleV0gYXMgYm9vbGVhbjtcbiAgICAgICAgICAgICAgICBjb25zdCBib29sZWFuTWV0YWRhdGE6IFRvZ2dsZUJvb2xlYW5EZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIFRvZ2dsZUJvb2xlYW5EZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRCb29sZWFuVmFsaWRhdGlvbkVycm9yKGVudGl0eSwgZW50aXR5Qm9vbGVhbiwgYm9vbGVhbk1ldGFkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuU1RSSU5HX0RST1BET1dOOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5TVFJJTkc6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlNUUklOR19BVVRPQ09NUExFVEU6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5U3RyaW5nOiBzdHJpbmcgPSBlbnRpdHlba2V5XSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nTWV0YWRhdGE6IERlZmF1bHRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIERlZmF1bHRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdWYWxpZGF0aW9uRXJyb3IoZW50aXR5U3RyaW5nLCBzdHJpbmdNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlNUUklOR19URVhUQk9YOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eVRleHRib3g6IHN0cmluZyA9IGVudGl0eVtrZXldIGFzIHN0cmluZztcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0Ym94TWV0YWRhdGE6IFRleHRib3hTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIFRleHRib3hTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUZXh0Ym94VmFsaWRhdGlvbkVycm9yKGVudGl0eVRleHRib3gsIHRleHRib3hNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLlNUUklOR19QQVNTV09SRDpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlQYXNzd29yZDogc3RyaW5nID0gZW50aXR5W2tleV0gYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhc3N3b3JkTWV0YWRhdGE6IFBhc3N3b3JkU3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgPSBtZXRhZGF0YSBhcyBQYXNzd29yZFN0cmluZ0RlY29yYXRvckNvbmZpZ0ludGVybmFsO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpcm1QYXNzd29yZDogc3RyaW5nID0gUmVmbGVjdFV0aWxpdGllcy5nZXRNZXRhZGF0YShFbnRpdHlVdGlsaXRpZXMuQ09ORklSTV9QQVNTV09SRF9LRVksIGVudGl0eSwga2V5KSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFzc3dvcmRWYWxpZGF0aW9uRXJyb3IoZW50aXR5UGFzc3dvcmQsIHBhc3N3b3JkTWV0YWRhdGEsIGNvbmZpcm1QYXNzd29yZCk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLk5VTUJFUl9EUk9QRE9XTjpcbiAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIG9ubHkgdmFsaWQgdmFsdWVzIGNhbiBiZSBzZWxlY3RlZCwgdGhpcyBpcyBhbHdheXMgdHJ1ZSB3aGVuIGl0IGhhcyBhIHZhbHVlXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuTlVNQkVSOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5OVU1CRVJfU0xJREVSOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eU51bWJlcjogbnVtYmVyID0gZW50aXR5W2tleV0gYXMgbnVtYmVyO1xuICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlck1ldGFkYXRhOiBEZWZhdWx0TnVtYmVyRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgPSBtZXRhZGF0YSBhcyBEZWZhdWx0TnVtYmVyRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyVmFsaWRhdGlvbkVycm9yKGVudGl0eU51bWJlciwgbnVtYmVyTWV0YWRhdGEpO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5PQkpFQ1Q6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5T2JqZWN0OiBFbnRpdHlUeXBlID0gZW50aXR5W2tleV0gYXMgRW50aXR5VHlwZTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhcmFtZXRlcktleSBpbiBlbnRpdHlPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWU6IHVua25vd24gPSBlbnRpdHlPYmplY3RbcGFyYW1ldGVyS2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgIShtZXRhZGF0YSBhcyBEZWZhdWx0T2JqZWN0RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZT4pLm9taXQuaW5jbHVkZXMocGFyYW1ldGVyS2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgISghbWV0YWRhdGEucmVxdWlyZWQoZW50aXR5KSAmJiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PSAnJykpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQgPSB0aGlzLmdldFByb3BlcnR5VmFsaWRhdGlvbkVycm9yKGVudGl0eU9iamVjdCwgcGFyYW1ldGVyS2V5LCBvbWl0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGAke2Vyci5wcm9wZXJ0eX0gaXMgaW52YWxpZDogJHtlcnIubWVzc2FnZX1gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuQVJSQVlfU1RSSU5HX0NISVBTOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5BUlJBWV9TVFJJTkdfQVVUT0NPTVBMRVRFX0NISVBTOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5BUlJBWV9EQVRFOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5BUlJBWV9EQVRFX1RJTUU6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkFSUkFZX0RBVEVfUkFOR0U6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkFSUkFZOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eUFycmF5OiB1bmtub3duW10gPSBlbnRpdHlba2V5XSBhcyB1bmtub3duW107XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgICAgICAgICBjb25zdCBhcnJheU1ldGFkYXRhOiBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsPEVudGl0eVR5cGU+ID0gbWV0YWRhdGEgYXMgRW50aXR5QXJyYXlEZWNvcmF0b3JDb25maWdJbnRlcm5hbDxFbnRpdHlUeXBlPjtcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlNZXRhZGF0YS5yZXF1aXJlZChlbnRpdHkpICYmICFlbnRpdHlBcnJheS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdubyBpdGVtcyBpbiBhcnJheSdcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkRBVEU6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5RGF0ZTogRGF0ZSA9IG5ldyBEYXRlKGVudGl0eVtrZXldIGFzIERhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVNZXRhZGF0YTogRGVmYXVsdERhdGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIERlZmF1bHREYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0ZVZhbGlkYXRpb25FcnJvcihlbnRpdHlEYXRlLCBkYXRlTWV0YWRhdGEpO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5EQVRFX1JBTkdFOlxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eURhdGVSYW5nZTogRGF0ZVJhbmdlID0gTG9kYXNoVXRpbGl0aWVzLmNsb25lRGVlcChlbnRpdHlba2V5XSBhcyBEYXRlUmFuZ2UpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVSYW5nZU1ldGFkYXRhOiBEYXRlUmFuZ2VEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgPSBtZXRhZGF0YSBhcyBEYXRlUmFuZ2VEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0ZVJhbmdlVmFsaWRhdGlvbkVycm9yKGVudGl0eSwgZW50aXR5RGF0ZVJhbmdlLCBkYXRlUmFuZ2VNZXRhZGF0YSk7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkRBVEVfVElNRTpcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlEYXRlVGltZTogRGF0ZSA9IG5ldyBEYXRlKGVudGl0eVtrZXldIGFzIERhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVUaW1lTWV0YWRhdGE6IERhdGVUaW1lRGF0ZURlY29yYXRvckNvbmZpZ0ludGVybmFsID0gbWV0YWRhdGEgYXMgRGF0ZVRpbWVEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzVGltZTogYm9vbGVhbiA9IFJlZmxlY3RVdGlsaXRpZXMuaGFzTWV0YWRhdGEoRW50aXR5VXRpbGl0aWVzLlRJTUVfS0VZLCBlbnRpdHksIGtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0ZVRpbWVWYWxpZGF0aW9uRXJyb3IoZW50aXR5RGF0ZVRpbWUsIGRhdGVUaW1lTWV0YWRhdGEsIGhhc1RpbWUpO1xuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5GSUxFX0RFRkFVTFQ6XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkZJTEVfSU1BR0U6XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5RmlsZTogRmlsZURhdGEgfCBGaWxlRGF0YVtdID0gZW50aXR5W2tleV0gYXMgRmlsZURhdGEgfCBGaWxlRGF0YVtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eUZpbGVNZXRhZGF0YTogRGVmYXVsdEZpbGVEZWNvcmF0b3JDb25maWdJbnRlcm5hbCA9IG1ldGFkYXRhIGFzIERlZmF1bHRGaWxlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RmlsZURhdGFWYWxpZGF0aW9uRXJyb3IoZW50aXR5RmlsZSwgZW50aXR5RmlsZU1ldGFkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuUkVGRVJFTkNFU19NQU5ZOlxuICAgICAgICAgICAgY2FzZSBEZWNvcmF0b3JUeXBlcy5SRUZFUkVOQ0VTX09ORTpcbiAgICAgICAgICAgIGNhc2UgRGVjb3JhdG9yVHlwZXMuSEFTX01BTlk6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERlY29yYXRvclR5cGVzLkNVU1RPTTpcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHlwZXNjcmlwdC9uby1leHBsaWNpdC1hbnksIG1heC1sZW5cbiAgICAgICAgICAgICAgICBjb25zdCBjdXN0b21NZXRhZGF0YTogQ3VzdG9tRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZSwgYW55LCBhbnksIGFueT4gPSBtZXRhZGF0YSBhcyBDdXN0b21EZWNvcmF0b3JDb25maWdJbnRlcm5hbDxFbnRpdHlUeXBlLCBhbnksIGFueSwgYW55PjtcbiAgICAgICAgICAgICAgICBpZiAoIWN1c3RvbU1ldGFkYXRhLmlzVmFsaWQoZW50aXR5W2tleV0sIG9taXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCdcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHZhbGlkYXRlIHRoZSBpbnB1dCBiZWNhdXNlIHRoZSBEZWNvcmF0b3JUeXBlICR7dHlwZX0gaXMgbm90IGtub3duYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRCb29sZWFuVmFsaWRhdGlvbkVycm9yPEVudGl0eVR5cGUgZXh0ZW5kcyBCYXNlRW50aXR5VHlwZTxFbnRpdHlUeXBlPj4oXG4gICAgICAgIGVudGl0eTogRW50aXR5VHlwZSxcbiAgICAgICAgdmFsdWU6IGJvb2xlYW4sXG4gICAgICAgIG1ldGFkYXRhOiBUb2dnbGVCb29sZWFuRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWxcbiAgICApOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAobWV0YWRhdGEucmVxdWlyZWQoZW50aXR5KSAmJiAhdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdub3Qgc2VsZWN0ZWQnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0U3RyaW5nVmFsaWRhdGlvbkVycm9yKHZhbHVlOiBzdHJpbmcsIG1ldGFkYXRhOiBEZWZhdWx0U3RyaW5nRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwpOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAobWV0YWRhdGEubWF4TGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA+IG1ldGFkYXRhLm1heExlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIHNtYWxsZXIgdGhhbiAke21ldGFkYXRhLm1heExlbmd0aH0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm1pbkxlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPCBtZXRhZGF0YS5taW5MZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBiaWdnZXIgdGhhbiAke21ldGFkYXRhLm1pbkxlbmd0aH0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLnJlZ2V4ICYmICF2YWx1ZS5tYXRjaChtZXRhZGF0YS5yZWdleCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldFRleHRib3hWYWxpZGF0aW9uRXJyb3IodmFsdWU6IHN0cmluZywgbWV0YWRhdGE6IFRleHRib3hTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCk6IFZhbGlkYXRpb25FcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChtZXRhZGF0YS5tYXhMZW5ndGggJiYgdmFsdWUubGVuZ3RoID4gbWV0YWRhdGEubWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgc21hbGxlciB0aGFuICR7bWV0YWRhdGEubWF4TGVuZ3RofSBjaGFyYWN0ZXJzYFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWluTGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA8IG1ldGFkYXRhLm1pbkxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIGJpZ2dlciB0aGFuICR7bWV0YWRhdGEubWluTGVuZ3RofSBjaGFyYWN0ZXJzYFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldFBhc3N3b3JkVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICB2YWx1ZTogc3RyaW5nLFxuICAgICAgICBtZXRhZGF0YTogUGFzc3dvcmRTdHJpbmdEZWNvcmF0b3JDb25maWdJbnRlcm5hbCxcbiAgICAgICAgY29uZmlybVBhc3N3b3JkOiBzdHJpbmdcbiAgICApOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAodmFsdWUgIT09IGNvbmZpcm1QYXNzd29yZCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ3Bhc3N3b3JkcyBuZWVkIHRvIG1hdGNoJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWF4TGVuZ3RoICYmIHZhbHVlLmxlbmd0aCA+IG1ldGFkYXRhLm1heExlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIHNtYWxsZXIgdGhhbiAke21ldGFkYXRhLm1heExlbmd0aH0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm1pbkxlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPCBtZXRhZGF0YS5taW5MZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBiaWdnZXIgdGhhbiAke21ldGFkYXRhLm1pbkxlbmd0aH0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLnJlZ2V4ICYmICF2YWx1ZS5tYXRjaChtZXRhZGF0YS5yZWdleCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldE51bWJlclZhbGlkYXRpb25FcnJvcih2YWx1ZTogbnVtYmVyLCBtZXRhZGF0YTogRGVmYXVsdE51bWJlckRlY29yYXRvckNvbmZpZ0ludGVybmFsKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKG1ldGFkYXRhLm1heCAmJiB2YWx1ZSA+IG1ldGFkYXRhLm1heCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIHNtYWxsZXIgdGhhbiAke21ldGFkYXRhLm1heH1gXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5taW4gJiYgdmFsdWUgPCBtZXRhZGF0YS5taW4pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBuZWVkcyB0byBiZSBiaWdnZXIgdGhhbiAke21ldGFkYXRhLm1pbn1gXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0RGF0ZVZhbGlkYXRpb25FcnJvcih2YWx1ZTogRGF0ZSwgbWV0YWRhdGE6IERlZmF1bHREYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwpOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAobWV0YWRhdGEubWluICYmIHZhbHVlLmdldFRpbWUoKSA8IG1ldGFkYXRhLm1pbih2YWx1ZSkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbmVlZHMgdG8gYmUgYWZ0ZXIgJHtmb3JtYXREYXRlKG1ldGFkYXRhLm1pbih2YWx1ZSkpfWBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLm1heCAmJiB2YWx1ZS5nZXRUaW1lKCkgPiBtZXRhZGF0YS5tYXgodmFsdWUpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYG5lZWRzIHRvIGJlIGJlZm9yZSAke2Zvcm1hdERhdGUobWV0YWRhdGEubWF4KHZhbHVlKSl9YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEuZmlsdGVyICYmICFtZXRhZGF0YS5maWx0ZXIodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXREYXRlUmFuZ2VWYWxpZGF0aW9uRXJyb3I8RW50aXR5VHlwZSBleHRlbmRzIEJhc2VFbnRpdHlUeXBlPEVudGl0eVR5cGU+PihcbiAgICAgICAgZW50aXR5OiBFbnRpdHlUeXBlLFxuICAgICAgICB2YWx1ZTogUGFydGlhbDxEYXRlUmFuZ2U+LFxuICAgICAgICBtZXRhZGF0YTogRGF0ZVJhbmdlRGF0ZURlY29yYXRvckNvbmZpZ0ludGVybmFsXG4gICAgKTogVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKG1ldGFkYXRhLnJlcXVpcmVkKGVudGl0eSkpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5zdGFydCA9PSBudWxsIHx8IHZhbHVlLmVuZCA9PSBudWxsIHx8IHZhbHVlLnZhbHVlcyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAncmVxdWlyZWQnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUuc3RhcnQpIHtcbiAgICAgICAgICAgIHZhbHVlLnN0YXJ0ID0gbmV3IERhdGUodmFsdWUuc3RhcnQpO1xuICAgICAgICAgICAgaWYgKG1ldGFkYXRhLm1pblN0YXJ0ICYmIHZhbHVlLnN0YXJ0LmdldFRpbWUoKSA8IG1ldGFkYXRhLm1pblN0YXJ0KHZhbHVlLnN0YXJ0KS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBzdGFydCBkYXRlIG5lZWRzIHRvIGJlIGFmdGVyICR7Zm9ybWF0RGF0ZShtZXRhZGF0YS5taW5TdGFydCh2YWx1ZS5zdGFydCkpfWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1ldGFkYXRhLm1heFN0YXJ0ICYmIHZhbHVlLnN0YXJ0LmdldFRpbWUoKSA+IG1ldGFkYXRhLm1heFN0YXJ0KHZhbHVlLnN0YXJ0KS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBzdGFydCBkYXRlIG5lZWRzIHRvIGJlIGJlZm9yZSAke2Zvcm1hdERhdGUobWV0YWRhdGEubWF4U3RhcnQodmFsdWUuc3RhcnQpKX1gXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXRhZGF0YS5maWx0ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW1ldGFkYXRhLmZpbHRlcih2YWx1ZS5zdGFydCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdzdGFydCBkYXRlIGludmFsaWQnXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlLmVuZCkge1xuICAgICAgICAgICAgdmFsdWUuZW5kID0gbmV3IERhdGUodmFsdWUuZW5kKTtcbiAgICAgICAgICAgIGlmIChtZXRhZGF0YS5taW5FbmQgJiYgdmFsdWUuZW5kLmdldFRpbWUoKSA8IG1ldGFkYXRhLm1pbkVuZCh2YWx1ZS5lbmQpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGVuZCBkYXRlIG5lZWRzIHRvIGJlIGFmdGVyICR7Zm9ybWF0RGF0ZShtZXRhZGF0YS5taW5FbmQodmFsdWUuZW5kKSl9YFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWV0YWRhdGEubWF4RW5kICYmIHZhbHVlLmVuZC5nZXRUaW1lKCkgPiBtZXRhZGF0YS5tYXhFbmQodmFsdWUuZW5kKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBlbmQgZGF0ZSBuZWVkcyB0byBiZSBiZWZvcmUgJHtmb3JtYXREYXRlKG1ldGFkYXRhLm1heEVuZCh2YWx1ZS5lbmQpKX1gXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXRhZGF0YS5maWx0ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW1ldGFkYXRhLmZpbHRlcih2YWx1ZS5lbmQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnZW5kIGRhdGUgaW52YWxpZCdcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgICAgIGlmIChtZXRhZGF0YS5maWx0ZXIgJiYgdmFsdWUudmFsdWVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRhdGUgb2YgdmFsdWUudmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFtZXRhZGF0YS5maWx0ZXIoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGB2YWx1ZSAke2Zvcm1hdERhdGUoZGF0ZSl9IGludmFsaWRgXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0RGF0ZVRpbWVWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIHZhbHVlOiBEYXRlLFxuICAgICAgICBtZXRhZGF0YTogRGF0ZVRpbWVEYXRlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwsXG4gICAgICAgIGhhc1RpbWU6IGJvb2xlYW5cbiAgICApOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIWhhc1RpbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdubyB0aW1lJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWluRGF0ZSAmJiB2YWx1ZS5nZXRUaW1lKCkgPCBtZXRhZGF0YS5taW5EYXRlKHZhbHVlKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBkYXRlIG5lZWRzIHRvIGJlIGFmdGVyICR7Zm9ybWF0RGF0ZShtZXRhZGF0YS5taW5EYXRlKHZhbHVlKSl9YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubWF4RGF0ZSAmJiB2YWx1ZS5nZXRUaW1lKCkgPiBtZXRhZGF0YS5tYXhEYXRlKHZhbHVlKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBkYXRlIG5lZWRzIHRvIGJlIGJlZm9yZSAke2Zvcm1hdERhdGUobWV0YWRhdGEubWF4RGF0ZSh2YWx1ZSkpfWBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGFkYXRhLmZpbHRlckRhdGUgJiYgIW1ldGFkYXRhLmZpbHRlckRhdGUodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCBkYXRlJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0aW1lOiBUaW1lID0gRGF0ZVV0aWxpdGllcy5nZXRUaW1lRnJvbURhdGUodmFsdWUpIGFzIFRpbWU7XG4gICAgICAgIGlmIChtZXRhZGF0YS5taW5UaW1lKSB7XG4gICAgICAgICAgICBjb25zdCBtaW5UaW1lOiBUaW1lID0gbWV0YWRhdGEubWluVGltZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgdGltZS5ob3VycyA+IG1pblRpbWUuaG91cnNcbiAgICAgICAgICAgICAgICAgICAgfHwgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZS5ob3VycyA9PT0gbWluVGltZS5ob3Vyc1xuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGltZS5taW51dGVzID49IG1pblRpbWUubWludXRlc1xuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgdGltZSBuZWVkcyB0byBiZSBhZnRlciAke21pblRpbWUuaG91cnN9OiR7bWluVGltZS5taW51dGVzfWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhZGF0YS5tYXhUaW1lKSB7XG4gICAgICAgICAgICBjb25zdCBtYXhUaW1lOiBUaW1lID0gbWV0YWRhdGEubWF4VGltZSh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgdGltZS5ob3VycyA8IG1heFRpbWUuaG91cnNcbiAgICAgICAgICAgICAgICAgICAgfHwgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZS5ob3VycyA9PT0gbWF4VGltZS5ob3Vyc1xuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGltZS5taW51dGVzIDw9IG1heFRpbWUubWludXRlc1xuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgdGltZSBuZWVkcyB0byBiZSBiZWZvcmUgJHttYXhUaW1lLmhvdXJzfToke21heFRpbWUubWludXRlc31gXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEuZmlsdGVyVGltZSAmJiAhbWV0YWRhdGEuZmlsdGVyVGltZSh0aW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQgdGltZSdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRGaWxlRGF0YVZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgdmFsdWU6IEZpbGVEYXRhIHwgRmlsZURhdGFbXSxcbiAgICAgICAgbWV0YWRhdGE6IERlZmF1bHRGaWxlRGVjb3JhdG9yQ29uZmlnSW50ZXJuYWxcbiAgICApOiBWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBmaWxlczogRmlsZURhdGFbXSA9IG1ldGFkYXRhLm11bHRpcGxlID8gdmFsdWUgYXMgRmlsZURhdGFbXSA6IFt2YWx1ZSBhcyBGaWxlRGF0YV07XG4gICAgICAgIGxldCBmaWxlU2l6ZVRvdGFsOiBudW1iZXIgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgIGlmICghZmlsZS5uYW1lIHx8ICFmaWxlLmZpbGUgJiYgIWZpbGUudXJsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFGaWxlVXRpbGl0aWVzLmlzTWltZVR5cGVWYWxpZChmaWxlLnR5cGUsIG1ldGFkYXRhLmFsbG93ZWRNaW1lVHlwZXMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgbWltZXR5cGUgbmVlZHMgdG8gYmUgb25lIG9mICR7bWV0YWRhdGEuYWxsb3dlZE1pbWVUeXBlc31gXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChGaWxlVXRpbGl0aWVzLnRyYW5zZm9ybVRvTWVnYUJ5dGVzKGZpbGUuc2l6ZSwgJ0InKSA+IG1ldGFkYXRhLm1heFNpemUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBmaWxlIG5lZWRzIHRvIGJlIHNtYWxsZXIgdGhhbiAke21ldGFkYXRhLm1heFNpemV9IE1CYFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWxlU2l6ZVRvdGFsICs9IGZpbGUuc2l6ZTtcbiAgICAgICAgICAgIGlmIChGaWxlVXRpbGl0aWVzLnRyYW5zZm9ybVRvTWVnYUJ5dGVzKGZpbGVTaXplVG90YWwsICdCJykgPiBtZXRhZGF0YS5tYXhTaXplVG90YWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogbWV0YWRhdGEuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBUaGUgc2l6ZSBvZiBhbGwgZmlsZXMgY29tYmluZWQgbmVlZHMgdG8gYmUgc21hbGxlciB0aGFuICR7bWV0YWRhdGEubWF4U2l6ZVRvdGFsfWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuZnVuY3Rpb24gcGFkVG8yRGlnaXRzKG51bTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbnVtLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbmZ1bmN0aW9uIGZvcm1hdERhdGUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgcGFkVG8yRGlnaXRzKGRhdGUuZ2V0RGF0ZSgpKSxcbiAgICAgICAgcGFkVG8yRGlnaXRzKGRhdGUuZ2V0TW9udGgoKSArIDEpLFxuICAgICAgICBkYXRlLmdldEZ1bGxZZWFyKClcbiAgICBdLmpvaW4oJy8nKTtcbn0iXX0=
|