@sumaris-net/ngx-components 18.12.5 → 18.12.7

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/doc/changelog.md CHANGED
@@ -1449,3 +1449,10 @@ enh: Environment: add useHash property to configure Angular router to use hash U
1449
1449
 
1450
1450
  # 18.12.5
1451
1451
  - enh(functions) Add function `UrlUtils.appendQueryParams()` to append q queryParams (as a map) to an url
1452
+
1453
+ # 18.12.6
1454
+ - enh(functions) Allow `UrlUtils.appendQueryParams()` to get url as `string | any[]`
1455
+
1456
+ # 18.12.7
1457
+ - enh(forms) Add `AppFormUtils.setFormErrors()` to apply errors into a form group and it children (inverse function as `getFormErrors()`))
1458
+ - enh(forms) Allow `AppFormUtils.getControlFromPath()` to works with any control (FormGroup, FormArray or simple control)
@@ -1,7 +1,7 @@
1
1
  import { round, toBoolean } from '../../shared/functions';
2
2
  import { filterNumberInput, selectInputContent, selectInputContentFromEvent } from '../../shared/inputs';
3
3
  import { waitFor } from '../../shared/observables';
4
- import { addValueInArray, clearValueInArray, copyEntity2Form, disableAndClearControl, disableAndClearControls, disableControl, disableControls, enableControl, enableControls, filterFormErrors, filterFormErrorsByPath, filterFormErrorsByPrefix, getControlFromPath, getFormErrors, getFormValueFromEntity, logFormErrors, markAllAsTouched, markAsUntouched, removeValueInArray, resizeArray, setControlEnabled, setControlsEnabled, updateValueAndValidity, waitIdle, waitWhilePending, } from '../../shared/forms';
4
+ import { addValueInArray, clearValueInArray, copyEntity2Form, disableAndClearControl, disableAndClearControls, disableControl, disableControls, enableControl, enableControls, filterFormErrors, filterFormErrorsByPath, filterFormErrorsByPrefix, getControlFromPath, getFormErrors, getFormValueFromEntity, logFormErrors, markAllAsTouched, markAsUntouched, removeValueInArray, resizeArray, setControlEnabled, setControlsEnabled, setFormErrors, updateValueAndValidity, waitIdle, waitWhilePending, } from '../../shared/forms';
5
5
  /**
6
6
  * A form that do nothing
7
7
  */
@@ -137,7 +137,15 @@ export class AppFormProvider {
137
137
  export class AppFormUtils {
138
138
  static copyEntity2Form = copyEntity2Form;
139
139
  static getFormValueFromEntity = getFormValueFromEntity;
140
- static logFormErrors = logFormErrors;
140
+ /**
141
+ * Retrieves a control from the provided form/control structure using a dot-separated path.
142
+ *
143
+ * @param {AbstractControl} form - The root form group, form array, or control to start searching from.
144
+ * @param {string} path - The dot-separated path specifying the control. For example, 'groupName.controlName' or 'arrayName.0.controlName'.
145
+ * @param {boolean} [strict=true] - If true, throws an error if the full path cannot be resolved; if false, returns the last valid control encountered.
146
+ * @return {AbstractControl} - The control at the specified path or the closest valid control if strict mode is disabled.
147
+ * @throws {Error} - Throws an error if the path cannot be resolved and strict mode is enabled.
148
+ */
141
149
  static getControlFromPath = getControlFromPath;
142
150
  static filterNumberInput = filterNumberInput;
143
151
  static enableControls = enableControls;
@@ -164,7 +172,6 @@ export class AppFormUtils {
164
172
  static waitWhilePending = waitWhilePending;
165
173
  static waitIdle = waitIdle;
166
174
  static updateValueAndValidity = updateValueAndValidity;
167
- static getFormErrors = getFormErrors;
168
175
  static isForm(object) {
169
176
  return object instanceof AppFormProvider || ('dirty' in object && 'enabled' in object && 'valid' in object);
170
177
  }
@@ -182,9 +189,29 @@ export class AppFormUtils {
182
189
  static setCalculatedValue = setCalculatedValue;
183
190
  static resetCalculatedValue = resetCalculatedValue;
184
191
  // Form errors
192
+ static logFormErrors = logFormErrors;
185
193
  static filterErrorsByPrefix = filterFormErrorsByPrefix;
186
194
  static filterErrorsByPath = filterFormErrorsByPath;
187
195
  static filterErrors = filterFormErrors;
196
+ /**
197
+ * Retrieves all validation errors from a given form control, including its child controls if it is a form group or array.
198
+ *
199
+ * @param {AbstractControl} control - The form control to retrieve errors from. This can be a form group, a form array, or a simple form control.
200
+ * @param {Object} [opts] - Optional configurations for error retrieval.
201
+ * @param {string} [opts.controlName] - The name or path of the control being processed, used for structuring error keys in the result.
202
+ * @param {FormErrors} [opts.result] - The object to which errors will be added, allowing for aggregation and persistence between calls.
203
+ * @param {boolean} [opts.recursive=true] - Whether to recursively collect errors from child controls within a form group or array. Defaults to true.
204
+ * @return {FormErrors} The collected errors as a key-value object where keys represent control names or paths and values represent their respective errors. Returns `undefined` if the provided control is valid and has no errors.
205
+ */
206
+ static getFormErrors = getFormErrors;
207
+ /**
208
+ * Sets form errors on an AbstractControl, including nested controls within form groups or arrays.
209
+ *
210
+ * @param {AbstractControl} control - The form control, form group, or form array to apply the errors to.
211
+ * @param {FormErrors} errors - An object representing the errors to be set on the control or its children.
212
+ * @return {void} Does not return a value.
213
+ */
214
+ static setFormErrors = setFormErrors;
188
215
  }
189
216
  export function isControlHasInput(controls, controlName) {
190
217
  // true if the control has a value and its 'calculated' control has the value 'false'
@@ -202,4 +229,4 @@ export function resetCalculatedValue(controls, controlName) {
202
229
  AppFormUtils.setCalculatedValue(controls, controlName, undefined);
203
230
  }
204
231
  }
205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL2Zvcm0udXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RyxPQUFPLEVBQUUsT0FBTyxFQUFrQixNQUFNLDBCQUEwQixDQUFDO0FBQ25FLE9BQU8sRUFDTCxlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLGNBQWMsRUFDZCxlQUFlLEVBQ2YsYUFBYSxFQUNiLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBQ3RCLHdCQUF3QixFQUN4QixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLHNCQUFzQixFQUN0QixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3RCLFFBQVEsRUFDUixnQkFBZ0IsR0FDakIsTUFBTSxvQkFBb0IsQ0FBQztBQXlENUI7O0dBRUc7QUFDSCxNQUFNLE9BQU8sV0FBVztJQUNiLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDaEIsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNkLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDZCxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ2IsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ2IsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDekIsSUFB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QUFNLENBQUMsa0JBQWtCLEdBQUcsc0JBQXNCLENBQUM7SUFDbkQsTUFBTSxDQUFDLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQzs7QUFHekMsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFFBQTRDLEVBQUUsV0FBbUI7SUFDakcscUZBQXFGO0lBQ3JGLE9BQU8sUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN2SCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFFBQTRDLEVBQUUsV0FBbUIsRUFBRSxLQUF5QjtJQUM3SCx1QkFBdUI7SUFDdkIsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM3QyxxQ0FBcUM7SUFDckMsUUFBUSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkUsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxRQUE0QyxFQUFFLFdBQW1CO0lBQ3BHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUM5QyxtREFBbUQ7UUFDbkQsWUFBWSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDcEUsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyByb3VuZCwgdG9Cb29sZWFuIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBmaWx0ZXJOdW1iZXJJbnB1dCwgc2VsZWN0SW5wdXRDb250ZW50LCBzZWxlY3RJbnB1dENvbnRlbnRGcm9tRXZlbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvaW5wdXRzJztcbmltcG9ydCB7IHdhaXRGb3IsIFdhaXRGb3JPcHRpb25zIH0gZnJvbSAnLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcbmltcG9ydCB7XG4gIGFkZFZhbHVlSW5BcnJheSxcbiAgY2xlYXJWYWx1ZUluQXJyYXksXG4gIGNvcHlFbnRpdHkyRm9ybSxcbiAgZGlzYWJsZUFuZENsZWFyQ29udHJvbCxcbiAgZGlzYWJsZUFuZENsZWFyQ29udHJvbHMsXG4gIGRpc2FibGVDb250cm9sLFxuICBkaXNhYmxlQ29udHJvbHMsXG4gIGVuYWJsZUNvbnRyb2wsXG4gIGVuYWJsZUNvbnRyb2xzLFxuICBmaWx0ZXJGb3JtRXJyb3JzLFxuICBmaWx0ZXJGb3JtRXJyb3JzQnlQYXRoLFxuICBmaWx0ZXJGb3JtRXJyb3JzQnlQcmVmaXgsXG4gIGdldENvbnRyb2xGcm9tUGF0aCxcbiAgZ2V0Rm9ybUVycm9ycyxcbiAgZ2V0Rm9ybVZhbHVlRnJvbUVudGl0eSxcbiAgbG9nRm9ybUVycm9ycyxcbiAgbWFya0FsbEFzVG91Y2hlZCxcbiAgbWFya0FzVW50b3VjaGVkLFxuICByZW1vdmVWYWx1ZUluQXJyYXksXG4gIHJlc2l6ZUFycmF5LFxuICBzZXRDb250cm9sRW5hYmxlZCxcbiAgc2V0Q29udHJvbHNFbmFibGVkLFxuICB1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5LFxuICB3YWl0SWRsZSxcbiAgd2FpdFdoaWxlUGVuZGluZyxcbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm1zJztcblxuZXhwb3J0IGRlY2xhcmUgdHlwZSBJQXBwRm9ybUdldHRlciA9ICgpID0+IElBcHBGb3JtO1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgT25SZWFkeSB7XG4gIG5nT25SZWFkeSgpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBcHBGb3JtPFQgPSBhbnk+IHtcbiAgLy8gRnJvbSBBbmd1bGFyIGZvcm1cbiAgaW52YWxpZDogYm9vbGVhbjtcbiAgdmFsaWQ6IGJvb2xlYW47XG4gIGRpcnR5OiBib29sZWFuO1xuICBwZW5kaW5nOiBib29sZWFuO1xuICBlcnJvcjogc3RyaW5nO1xuICBlbmFibGVkOiBib29sZWFuO1xuICBkaXNhYmxlZDogYm9vbGVhbjtcbiAgdG91Y2hlZDogYm9vbGVhbjtcbiAgdW50b3VjaGVkOiBib29sZWFuO1xuICBkaXNhYmxlKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogdm9pZDtcbiAgZW5hYmxlKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogdm9pZDtcblxuICAvLyBTcGVjaWZpYyB0byBJQXBwRm9ybVxuICBlbXB0eT86IGJvb2xlYW47XG4gIGxvYWRpbmc/OiBib29sZWFuO1xuICBsb2FkZWQ/OiBib29sZWFuO1xuICBkZXN0cm95ZWQ/OiBib29sZWFuO1xuICByZWFkeSgpOiBQcm9taXNlPHZvaWQ+O1xuICB3YWl0SWRsZShvcHRzPzogV2FpdEZvck9wdGlvbnMpOiBQcm9taXNlPGFueT47XG5cbiAgLy8gT3B0aW9uYWwgZnVuY3Rpb25zXG4gIHNldFZhbHVlPzogKGRhdGE6IFQsIG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbiAgcGF0Y2hWYWx1ZT86IChkYXRhOiBULCBvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gIHJlc2V0PzogKGRhdGE/OiBULCBvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkgPT4gdm9pZDtcbiAgZ2V0VmFsdWU/OiAoKSA9PiBQcm9taXNlPFQ+IHwgVDtcblxuICBtYXJrQXNQcmlzdGluZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IHZvaWQ7XG4gIG1hcmtBc1VudG91Y2hlZChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IHZvaWQ7XG4gIG1hcmtBc1RvdWNoZWQob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiB2b2lkO1xuICBtYXJrQWxsQXNUb3VjaGVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IHZvaWQ7XG4gIG1hcmtBc0RpcnR5KG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogdm9pZDtcbiAgbWFya0FzTG9hZGluZyhvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IHZvaWQ7XG4gIG1hcmtBc0xvYWRlZChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IHZvaWQ7XG4gIG1hcmtBc1JlYWR5KG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYW5TYXZlIHtcbiAgZGlydHk6IGJvb2xlYW47XG4gIHZhbGlkOiBib29sZWFuO1xuICBzYXZlKCk6IFByb21pc2U8Ym9vbGVhbj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuTGVhdmUgZXh0ZW5kcyBDYW5TYXZlIHtcbiAgY2FuY2VsKGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPHZvaWQ+O1xuICBkZWFjdGl2YXRlPzogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBBIGZvcm0gdGhhdCBkbyBub3RoaW5nXG4gKi9cbmV4cG9ydCBjbGFzcyBBcHBOdWxsRm9ybSBpbXBsZW1lbnRzIElBcHBGb3JtIHtcbiAgcmVhZG9ubHkgaW52YWxpZCA9IGZhbHNlO1xuICByZWFkb25seSB2YWxpZCA9IGZhbHNlO1xuICByZWFkb25seSBkaXJ0eSA9IGZhbHNlO1xuICByZWFkb25seSBlbXB0eSA9IHRydWU7XG4gIHJlYWRvbmx5IHBlbmRpbmcgPSBmYWxzZTtcbiAgcmVhZG9ubHkgZXJyb3IgPSBudWxsO1xuICByZWFkb25seSBlbmFibGVkID0gZmFsc2U7XG4gIHJlYWRvbmx5IGxvYWRpbmcgPSBmYWxzZTtcbiAgcmVhZG9ubHkgdG91Y2hlZCA9IGZhbHNlO1xuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmVuYWJsZWQ7XG4gIH1cbiAgZ2V0IHVudG91Y2hlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMudG91Y2hlZDtcbiAgfVxuXG4gIGRpc2FibGUob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHt9XG4gIGVuYWJsZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge31cblxuICBtYXJrQXNQcmlzdGluZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge31cbiAgbWFya0FzVW50b3VjaGVkKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7fVxuICBtYXJrQXNUb3VjaGVkKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7fVxuICBtYXJrQWxsQXNUb3VjaGVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge31cbiAgbWFya0FzRGlydHkob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHt9XG4gIG1hcmtBc0xvYWRpbmcob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHt9XG4gIG1hcmtBc0xvYWRlZChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge31cbiAgbWFya0FzUmVhZHkob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHt9XG5cbiAgd2FpdElkbGUob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZmFsc2UpO1xuICB9XG4gIHJlYWR5KCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHRydWUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcHBGb3JtUHJvdmlkZXI8RiBleHRlbmRzIElBcHBGb3JtID0gSUFwcEZvcm0+IGltcGxlbWVudHMgSUFwcEZvcm0ge1xuICBzdGF0aWMgTlVMTF9GT1JNID0gbmV3IEFwcE51bGxGb3JtKCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBnZXR0ZXJGbjogKCkgPT4gRikge31cblxuICBwcml2YXRlIGdldCBkZWxlZ2F0ZSgpOiBJQXBwRm9ybSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0dGVyRm4oKSB8fCBBcHBGb3JtUHJvdmlkZXIuTlVMTF9GT1JNO1xuICB9XG5cbiAgd2FpdERlbGVnYXRlKG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8Rj4ge1xuICAgIGxldCBjb250ZW50OiBGO1xuICAgIHJldHVybiB3YWl0Rm9yKCgpID0+IHtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLmdldHRlckZuKCk7XG4gICAgICByZXR1cm4gISFjb250ZW50O1xuICAgIH0sIG9wdHMpLnRoZW4oKF8pID0+IGNvbnRlbnQpO1xuICB9XG5cbiAgLyogLS0gZGVsZWdhdGVkIG1ldGhvZHMgLS0gKi9cblxuICBnZXQgZW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5lbmFibGVkO1xuICB9XG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5kaXNhYmxlZDtcbiAgfVxuICBnZXQgZXJyb3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5lcnJvcjtcbiAgfVxuICBnZXQgaW52YWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5pbnZhbGlkO1xuICB9XG4gIGdldCB2YWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS52YWxpZDtcbiAgfVxuICBnZXQgZGlydHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuZGlydHk7XG4gIH1cbiAgZ2V0IGVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmVtcHR5O1xuICB9XG4gIGdldCBwZW5kaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLnBlbmRpbmc7XG4gIH1cbiAgZ2V0IGxvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubG9hZGluZztcbiAgfVxuICBnZXQgdG91Y2hlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS50b3VjaGVkO1xuICB9XG4gIGdldCB1bnRvdWNoZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUudW50b3VjaGVkO1xuICB9XG4gIHJlYWR5KCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUucmVhZHkoKTtcbiAgfVxuICB3YWl0SWRsZShvcHRzPzogV2FpdEZvck9wdGlvbnMpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLndhaXRJZGxlKCk7XG4gIH1cbiAgZGlzYWJsZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmRpc2FibGUob3B0cyk7XG4gIH1cbiAgZW5hYmxlKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuZW5hYmxlKG9wdHMpO1xuICB9XG4gIG1hcmtBc1ByaXN0aW5lKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubWFya0FzUHJpc3RpbmUob3B0cyk7XG4gIH1cbiAgbWFya0FzVW50b3VjaGVkKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubWFya0FzVW50b3VjaGVkKG9wdHMpO1xuICB9XG4gIG1hcmtBc1RvdWNoZWQob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5tYXJrQXNUb3VjaGVkKG9wdHMpO1xuICB9XG4gIG1hcmtBbGxBc1RvdWNoZWQob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubWFya0FsbEFzVG91Y2hlZChvcHRzKTtcbiAgfVxuICBtYXJrQXNEaXJ0eShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLm1hcmtBc0RpcnR5KG9wdHMpO1xuICB9XG4gIG1hcmtBc0xvYWRpbmcob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5tYXJrQXNMb2FkaW5nKG9wdHMpO1xuICB9XG4gIG1hcmtBc0xvYWRlZChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLm1hcmtBc0xvYWRlZChvcHRzKTtcbiAgfVxuICBtYXJrQXNSZWFkeShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLm1hcmtBc1JlYWR5KG9wdHMpO1xuICB9XG5cbiAgYXN5bmMgc2F2ZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoQXBwRm9ybVV0aWxzLmNhblNhdmUodGhpcy5kZWxlZ2F0ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLnNhdmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MsIGZvciBhbmd1bGFyIGZvcm1zXG4gKi9cbmV4cG9ydCBjbGFzcyBBcHBGb3JtVXRpbHMge1xuICBzdGF0aWMgY29weUVudGl0eTJGb3JtID0gY29weUVudGl0eTJGb3JtO1xuICBzdGF0aWMgZ2V0Rm9ybVZhbHVlRnJvbUVudGl0eSA9IGdldEZvcm1WYWx1ZUZyb21FbnRpdHk7XG4gIHN0YXRpYyBsb2dGb3JtRXJyb3JzID0gbG9nRm9ybUVycm9ycztcbiAgc3RhdGljIGdldENvbnRyb2xGcm9tUGF0aCA9IGdldENvbnRyb2xGcm9tUGF0aDtcbiAgc3RhdGljIGZpbHRlck51bWJlcklucHV0ID0gZmlsdGVyTnVtYmVySW5wdXQ7XG4gIHN0YXRpYyBlbmFibGVDb250cm9scyA9IGVuYWJsZUNvbnRyb2xzO1xuICBzdGF0aWMgZW5hYmxlQ29udHJvbCA9IGVuYWJsZUNvbnRyb2w7XG4gIHN0YXRpYyBkaXNhYmxlQ29udHJvbCA9IGRpc2FibGVDb250cm9sO1xuICBzdGF0aWMgZGlzYWJsZUNvbnRyb2xzID0gZGlzYWJsZUNvbnRyb2xzO1xuICBzdGF0aWMgZGlzYWJsZUFuZENsZWFyQ29udHJvbCA9IGRpc2FibGVBbmRDbGVhckNvbnRyb2w7XG4gIHN0YXRpYyBkaXNhYmxlQW5kQ2xlYXJDb250cm9scyA9IGRpc2FibGVBbmRDbGVhckNvbnRyb2xzO1xuICBzdGF0aWMgc2V0Q29udHJvbEVuYWJsZWQgPSBzZXRDb250cm9sRW5hYmxlZDtcbiAgc3RhdGljIHNldENvbnRyb2xzRW5hYmxlZCA9IHNldENvbnRyb2xzRW5hYmxlZDtcbiAgc3RhdGljIHNlbGVjdElucHV0Q29udGVudEZyb21FdmVudCA9IHNlbGVjdElucHV0Q29udGVudEZyb21FdmVudDtcbiAgc3RhdGljIHNlbGVjdElucHV0Q29udGVudCA9IHNlbGVjdElucHV0Q29udGVudDtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBtYXJrQWxsQXNUb3VjaGVkKCkgaW5zdGVhZCAobmFtaW5nIHdhcyB3cm9uZylcbiAgICovXG4gIHN0YXRpYyBtYXJrQXNUb3VjaGVkID0gbWFya0FsbEFzVG91Y2hlZDtcblxuICAvKipcbiAgICogTWFya3MgdGhlIGNvbnRyb2wgYW5kIGFsbCBpdHMgZGVzY2VuZGFudCBjb250cm9scyBhcyB0b3VjaGVkLlxuICAgKiBTZWUgYWxzbzpcbiAgICogLSBgbWFya0FzVG91Y2hlZCgpYFxuICAgKi9cbiAgc3RhdGljIG1hcmtBbGxBc1RvdWNoZWQgPSBtYXJrQWxsQXNUb3VjaGVkO1xuICBzdGF0aWMgbWFya0FzVW50b3VjaGVkID0gbWFya0FzVW50b3VjaGVkO1xuICBzdGF0aWMgd2FpdFdoaWxlUGVuZGluZyA9IHdhaXRXaGlsZVBlbmRpbmc7XG4gIHN0YXRpYyB3YWl0SWRsZSA9IHdhaXRJZGxlO1xuICBzdGF0aWMgdXBkYXRlVmFsdWVBbmRWYWxpZGl0eSA9IHVwZGF0ZVZhbHVlQW5kVmFsaWRpdHk7XG5cbiAgc3RhdGljIGdldEZvcm1FcnJvcnMgPSBnZXRGb3JtRXJyb3JzO1xuXG4gIHN0YXRpYyBpc0Zvcm0ob2JqZWN0OiBhbnkpOiBvYmplY3QgaXMgSUFwcEZvcm0ge1xuICAgIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBBcHBGb3JtUHJvdmlkZXIgfHwgKCdkaXJ0eScgaW4gb2JqZWN0ICYmICdlbmFibGVkJyBpbiBvYmplY3QgJiYgJ3ZhbGlkJyBpbiBvYmplY3QpO1xuICB9XG5cbiAgc3RhdGljIGNhblNhdmUob2JqZWN0OiBhbnkpOiBvYmplY3QgaXMgSUFwcEZvcm0gJiBDYW5TYXZlIHtcbiAgICByZXR1cm4gJ3NhdmUnIGluIG9iamVjdCAmJiBBcHBGb3JtVXRpbHMuaXNGb3JtKG9iamVjdCk7XG4gIH1cblxuICAvLyBBcnJheUZvcm1cbiAgc3RhdGljIGFkZFZhbHVlSW5BcnJheSA9IGFkZFZhbHVlSW5BcnJheTtcbiAgc3RhdGljIHJlbW92ZVZhbHVlSW5BcnJheSA9IHJlbW92ZVZhbHVlSW5BcnJheTtcbiAgc3RhdGljIHJlc2l6ZUFycmF5ID0gcmVzaXplQXJyYXk7XG4gIHN0YXRpYyBjbGVhclZhbHVlSW5BcnJheSA9IGNsZWFyVmFsdWVJbkFycmF5O1xuXG4gIC8vIENhbGN1bGF0ZWQgZmllbGRzXG4gIHN0YXRpYyBjYWxjdWxhdGVkU3VmZml4ID0gJ0NhbGN1bGF0ZWQnO1xuICBzdGF0aWMgaXNDb250cm9sSGFzSW5wdXQgPSBpc0NvbnRyb2xIYXNJbnB1dDtcbiAgc3RhdGljIHNldENhbGN1bGF0ZWRWYWx1ZSA9IHNldENhbGN1bGF0ZWRWYWx1ZTtcbiAgc3RhdGljIHJlc2V0Q2FsY3VsYXRlZFZhbHVlID0gcmVzZXRDYWxjdWxhdGVkVmFsdWU7XG5cbiAgLy8gRm9ybSBlcnJvcnNcbiAgc3RhdGljIGZpbHRlckVycm9yc0J5UHJlZml4ID0gZmlsdGVyRm9ybUVycm9yc0J5UHJlZml4O1xuICBzdGF0aWMgZmlsdGVyRXJyb3JzQnlQYXRoID0gZmlsdGVyRm9ybUVycm9yc0J5UGF0aDtcbiAgc3RhdGljIGZpbHRlckVycm9ycyA9IGZpbHRlckZvcm1FcnJvcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnRyb2xIYXNJbnB1dChjb250cm9sczogeyBba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2wgfSwgY29udHJvbE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyB0cnVlIGlmIHRoZSBjb250cm9sIGhhcyBhIHZhbHVlIGFuZCBpdHMgJ2NhbGN1bGF0ZWQnIGNvbnRyb2wgaGFzIHRoZSB2YWx1ZSAnZmFsc2UnXG4gIHJldHVybiBjb250cm9sc1tjb250cm9sTmFtZV0udmFsdWUgJiYgIXRvQm9vbGVhbihjb250cm9sc1tjb250cm9sTmFtZSArIEFwcEZvcm1VdGlscy5jYWxjdWxhdGVkU3VmZml4XS52YWx1ZSwgZmFsc2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FsY3VsYXRlZFZhbHVlKGNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9LCBjb250cm9sTmFtZTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gIC8vIHNldCB2YWx1ZSB0byBjb250cm9sXG4gIGNvbnRyb2xzW2NvbnRyb2xOYW1lXS5zZXRWYWx1ZShyb3VuZCh2YWx1ZSkpO1xuICAvLyBzZXQgJ2NhbGN1bGF0ZWQnIGNvbnRyb2wgdG8gJ3RydWUnXG4gIGNvbnRyb2xzW2NvbnRyb2xOYW1lICsgQXBwRm9ybVV0aWxzLmNhbGN1bGF0ZWRTdWZmaXhdLnNldFZhbHVlKHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRDYWxjdWxhdGVkVmFsdWUoY29udHJvbHM6IHsgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sIH0sIGNvbnRyb2xOYW1lOiBzdHJpbmcpIHtcbiAgaWYgKCFpc0NvbnRyb2xIYXNJbnB1dChjb250cm9scywgY29udHJvbE5hbWUpKSB7XG4gICAgLy8gc2V0IHVuZGVmaW5lZCBvbmx5IGlmIGNvbnRyb2wgYWxyZWFkeSBjYWxjdWxhdGVkXG4gICAgQXBwRm9ybVV0aWxzLnNldENhbGN1bGF0ZWRWYWx1ZShjb250cm9scywgY29udHJvbE5hbWUsIHVuZGVmaW5lZCk7XG4gIH1cbn1cbiJdfQ==
232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL2Zvcm0udXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RyxPQUFPLEVBQUUsT0FBTyxFQUFrQixNQUFNLDBCQUEwQixDQUFDO0FBQ25FLE9BQU8sRUFDTCxlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLGNBQWMsRUFDZCxlQUFlLEVBQ2YsYUFBYSxFQUNiLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBQ3RCLHdCQUF3QixFQUN4QixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLHNCQUFzQixFQUN0QixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLHNCQUFzQixFQUN0QixRQUFRLEVBQ1IsZ0JBQWdCLEdBQ2pCLE1BQU0sb0JBQW9CLENBQUM7QUF5RDVCOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUFDYixPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDZCxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ2QsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNiLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDaEIsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNiLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDaEIsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLElBQUksUUFBUTtRQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxJQUFJLFNBQVM7UUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN2QixDQUFDO0lBRUQsT0FBTyxDQUFDLElBQWtELElBQUcsQ0FBQztJQUM5RCxNQUFNLENBQUMsSUFBa0QsSUFBRyxDQUFDO0lBRTdELGNBQWMsQ0FBQyxJQUFrRCxJQUFHLENBQUM7SUFDckUsZUFBZSxDQUFDLElBQWtELElBQUcsQ0FBQztJQUN0RSxhQUFhLENBQUMsSUFBa0QsSUFBRyxDQUFDO0lBQ3BFLGdCQUFnQixDQUFDLElBQThCLElBQUcsQ0FBQztJQUNuRCxXQUFXLENBQUMsSUFBa0QsSUFBRyxDQUFDO0lBQ2xFLGFBQWEsQ0FBQyxJQUFrRCxJQUFHLENBQUM7SUFDcEUsWUFBWSxDQUFDLElBQWtELElBQUcsQ0FBQztJQUNuRSxXQUFXLENBQUMsSUFBa0QsSUFBRyxDQUFDO0lBRWxFLFFBQVEsQ0FBQyxJQUFxQjtRQUM1QixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUNELEtBQUs7UUFDSCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGVBQWU7SUFHTjtJQUZwQixNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFFckMsWUFBb0IsUUFBaUI7UUFBakIsYUFBUSxHQUFSLFFBQVEsQ0FBUztJQUFHLENBQUM7SUFFekMsSUFBWSxRQUFRO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLGVBQWUsQ0FBQyxTQUFTLENBQUM7SUFDdEQsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFxQjtRQUNoQyxJQUFJLE9BQVUsQ0FBQztRQUNmLE9BQU8sT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUNsQixPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzFCLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNuQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsNkJBQTZCO0lBRTdCLElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUNELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUNELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUNELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUNELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7SUFDakMsQ0FBQztJQUNELEtBQUs7UUFDSCxPQUFPLElB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a0JBQWtCLEdBQUcsc0JBQXNCLENBQUM7SUFDbkQsTUFBTSxDQUFDLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQztJQUV2Qzs7Ozs7Ozs7O09BU0c7SUFDSCxNQUFNLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztJQUVyQzs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQzs7QUFHdkMsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFFBQTRDLEVBQUUsV0FBbUI7SUFDakcscUZBQXFGO0lBQ3JGLE9BQU8sUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN2SCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFFBQTRDLEVBQUUsV0FBbUIsRUFBRSxLQUF5QjtJQUM3SCx1QkFBdUI7SUFDdkIsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM3QyxxQ0FBcUM7SUFDckMsUUFBUSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkUsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxRQUE0QyxFQUFFLFdBQW1CO0lBQ3BHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUM5QyxtREFBbUQ7UUFDbkQsWUFBWSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDcEUsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyByb3VuZCwgdG9Cb29sZWFuIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBmaWx0ZXJOdW1iZXJJbnB1dCwgc2VsZWN0SW5wdXRDb250ZW50LCBzZWxlY3RJbnB1dENvbnRlbnRGcm9tRXZlbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvaW5wdXRzJztcbmltcG9ydCB7IHdhaXRGb3IsIFdhaXRGb3JPcHRpb25zIH0gZnJvbSAnLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcbmltcG9ydCB7XG4gIGFkZFZhbHVlSW5BcnJheSxcbiAgY2xlYXJWYWx1ZUluQXJyYXksXG4gIGNvcHlFbnRpdHkyRm9ybSxcbiAgZGlzYWJsZUFuZENsZWFyQ29udHJvbCxcbiAgZGlzYWJsZUFuZENsZWFyQ29udHJvbHMsXG4gIGRpc2FibGVDb250cm9sLFxuICBkaXNhYmxlQ29udHJvbHMsXG4gIGVuYWJsZUNvbnRyb2wsXG4gIGVuYWJsZUNvbnRyb2xzLFxuICBmaWx0ZXJGb3JtRXJyb3JzLFxuICBmaWx0ZXJGb3JtRXJyb3JzQnlQYXRoLFxuICBmaWx0ZXJGb3JtRXJyb3JzQnlQcmVmaXgsXG4gIGdldENvbnRyb2xGcm9tUGF0aCxcbiAgZ2V0Rm9ybUVycm9ycyxcbiAgZ2V0Rm9ybVZhbHVlRnJvbUVudGl0eSxcbiAgbG9nRm9ybUVycm9ycyxcbiAgbWFya0FsbEFzVG91Y2hlZCxcbiAgbWFya0FzVW50b3VjaGVkLFxuICByZW1vdmVWYWx1ZUluQXJyYXksXG4gIHJlc2l6ZUFycmF5LFxuICBzZXRDb250cm9sRW5hYmxlZCxcbiAgc2V0Q29udHJvbHNFbmFibGVkLFxuICBzZXRGb3JtRXJyb3JzLFxuICB1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5LFxuICB3YWl0SWRsZSxcbiAgd2FpdFdoaWxlUGVuZGluZyxcbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm1zJztcblxuZXhwb3J0IGRlY2xhcmUgdHlwZSBJQXBwRm9ybUdldHRlciA9ICgpID0+IElBcHBGb3JtO1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgT25SZWFkeSB7XG4gIG5nT25SZWFkeSgpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBcHBGb3JtPFQgPSBhbnk+IHtcbiAgLy8gRnJvbSBBbmd1bGFyIGZvcm1cbiAgaW52YWxpZDogYm9vbGVhbjtcbiAgdmFsaWQ6IGJvb2xlYW47XG4gIGRpcnR5OiBib29sZWFuO1xuICBwZW5kaW5nOiBib29sZWFuO1xuICBlcnJvcjogc3RyaW5nO1xuICBlbmFibGVkOiBib29sZWFuO1xuICBkaXNhYmxlZDogYm9vbGVhbjtcbiAgdG91Y2hlZDogYm9vbGVhbjtcbiAgdW50b3VjaGVkOiBib29sZWFuO1xuICBkaXNhYmxlKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogdm9pZDtcbiAgZW5hYmxlKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogdm9pZDtcblxuICAvLyBTcGVjaWZpYyB0byBJQXBwRm9ybVxuICBlbXB0eT86IGJvb2xlYW47XG4gIGxvYWRpbmc/OiBib29sZWFuO1xuICBsb2FkZWQ/OiBib29sZWFuO1xuICBkZXN0cm95ZWQ/OiBib29sZWFuO1xuICByZWFkeSgpOiBQcm9taXNlPHZvaWQ+O1xuICB3YWl0SWRsZShvcHRzPzogV2FpdEZvck9wdGlvbnMpOiBQcm9taXNlPGFueT47XG5cbiAgLy8gT3B0aW9uYWwgZnVuY3Rpb25zXG4gIHNldFZhbHVlPzogKGRhdGE6IFQsIG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbiAgcGF0Y2hWYWx1ZT86IChkYXRhOiBULCBvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gIHJlc2V0PzogKGRhdGE/OiBULCBvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkgPT4gdm9pZDtcbiAgZ2V0VmFsdWU/OiAoKSA9PiBQcm9taXNlPFQ+IHwgVDtcblxuICBtYXJrQXNQcmlzdGluZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IHZvaWQ7XG4gIG1hcmtBc1VudG91Y2hlZChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IHZvaWQ7XG4gIG1hcmtBc1RvdWNoZWQob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiB2b2lkO1xuICBtYXJrQWxsQXNUb3VjaGVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IHZvaWQ7XG4gIG1hcmtBc0RpcnR5KG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogdm9pZDtcbiAgbWFya0FzTG9hZGluZyhvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IHZvaWQ7XG4gIG1hcmtBc0xvYWRlZChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IHZvaWQ7XG4gIG1hcmtBc1JlYWR5KG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYW5TYXZlIHtcbiAgZGlydHk6IGJvb2xlYW47XG4gIHZhbGlkOiBib29sZWFuO1xuICBzYXZlKCk6IFByb21pc2U8Ym9vbGVhbj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuTGVhdmUgZXh0ZW5kcyBDYW5TYXZlIHtcbiAgY2FuY2VsKGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPHZvaWQ+O1xuICBkZWFjdGl2YXRlPzogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBBIGZvcm0gdGhhdCBkbyBub3RoaW5nXG4gKi9cbmV4cG9ydCBjbGFzcyBBcHBOdWxsRm9ybSBpbXBsZW1lbnRzIElBcHBGb3JtIHtcbiAgcmVhZG9ubHkgaW52YWxpZCA9IGZhbHNlO1xuICByZWFkb25seSB2YWxpZCA9IGZhbHNlO1xuICByZWFkb25seSBkaXJ0eSA9IGZhbHNlO1xuICByZWFkb25seSBlbXB0eSA9IHRydWU7XG4gIHJlYWRvbmx5IHBlbmRpbmcgPSBmYWxzZTtcbiAgcmVhZG9ubHkgZXJyb3IgPSBudWxsO1xuICByZWFkb25seSBlbmFibGVkID0gZmFsc2U7XG4gIHJlYWRvbmx5IGxvYWRpbmcgPSBmYWxzZTtcbiAgcmVhZG9ubHkgdG91Y2hlZCA9IGZhbHNlO1xuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmVuYWJsZWQ7XG4gIH1cbiAgZ2V0IHVudG91Y2hlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMudG91Y2hlZDtcbiAgfVxuXG4gIGRpc2FibGUob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHt9XG4gIGVuYWJsZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge31cblxuICBtYXJrQXNQcmlzdGluZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge31cbiAgbWFya0FzVW50b3VjaGVkKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7fVxuICBtYXJrQXNUb3VjaGVkKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7fVxuICBtYXJrQWxsQXNUb3VjaGVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge31cbiAgbWFya0FzRGlydHkob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHt9XG4gIG1hcmtBc0xvYWRpbmcob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHt9XG4gIG1hcmtBc0xvYWRlZChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge31cbiAgbWFya0FzUmVhZHkob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHt9XG5cbiAgd2FpdElkbGUob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZmFsc2UpO1xuICB9XG4gIHJlYWR5KCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHRydWUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcHBGb3JtUHJvdmlkZXI8RiBleHRlbmRzIElBcHBGb3JtID0gSUFwcEZvcm0+IGltcGxlbWVudHMgSUFwcEZvcm0ge1xuICBzdGF0aWMgTlVMTF9GT1JNID0gbmV3IEFwcE51bGxGb3JtKCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBnZXR0ZXJGbjogKCkgPT4gRikge31cblxuICBwcml2YXRlIGdldCBkZWxlZ2F0ZSgpOiBJQXBwRm9ybSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0dGVyRm4oKSB8fCBBcHBGb3JtUHJvdmlkZXIuTlVMTF9GT1JNO1xuICB9XG5cbiAgd2FpdERlbGVnYXRlKG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8Rj4ge1xuICAgIGxldCBjb250ZW50OiBGO1xuICAgIHJldHVybiB3YWl0Rm9yKCgpID0+IHtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLmdldHRlckZuKCk7XG4gICAgICByZXR1cm4gISFjb250ZW50O1xuICAgIH0sIG9wdHMpLnRoZW4oKF8pID0+IGNvbnRlbnQpO1xuICB9XG5cbiAgLyogLS0gZGVsZWdhdGVkIG1ldGhvZHMgLS0gKi9cblxuICBnZXQgZW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5lbmFibGVkO1xuICB9XG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5kaXNhYmxlZDtcbiAgfVxuICBnZXQgZXJyb3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5lcnJvcjtcbiAgfVxuICBnZXQgaW52YWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5pbnZhbGlkO1xuICB9XG4gIGdldCB2YWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS52YWxpZDtcbiAgfVxuICBnZXQgZGlydHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuZGlydHk7XG4gIH1cbiAgZ2V0IGVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmVtcHR5O1xuICB9XG4gIGdldCBwZW5kaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLnBlbmRpbmc7XG4gIH1cbiAgZ2V0IGxvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubG9hZGluZztcbiAgfVxuICBnZXQgdG91Y2hlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS50b3VjaGVkO1xuICB9XG4gIGdldCB1bnRvdWNoZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUudW50b3VjaGVkO1xuICB9XG4gIHJlYWR5KCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUucmVhZHkoKTtcbiAgfVxuICB3YWl0SWRsZShvcHRzPzogV2FpdEZvck9wdGlvbnMpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLndhaXRJZGxlKCk7XG4gIH1cbiAgZGlzYWJsZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmRpc2FibGUob3B0cyk7XG4gIH1cbiAgZW5hYmxlKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuZW5hYmxlKG9wdHMpO1xuICB9XG4gIG1hcmtBc1ByaXN0aW5lKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubWFya0FzUHJpc3RpbmUob3B0cyk7XG4gIH1cbiAgbWFya0FzVW50b3VjaGVkKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubWFya0FzVW50b3VjaGVkKG9wdHMpO1xuICB9XG4gIG1hcmtBc1RvdWNoZWQob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5tYXJrQXNUb3VjaGVkKG9wdHMpO1xuICB9XG4gIG1hcmtBbGxBc1RvdWNoZWQob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubWFya0FsbEFzVG91Y2hlZChvcHRzKTtcbiAgfVxuICBtYXJrQXNEaXJ0eShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLm1hcmtBc0RpcnR5KG9wdHMpO1xuICB9XG4gIG1hcmtBc0xvYWRpbmcob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5tYXJrQXNMb2FkaW5nKG9wdHMpO1xuICB9XG4gIG1hcmtBc0xvYWRlZChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLm1hcmtBc0xvYWRlZChvcHRzKTtcbiAgfVxuICBtYXJrQXNSZWFkeShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLm1hcmtBc1JlYWR5KG9wdHMpO1xuICB9XG5cbiAgYXN5bmMgc2F2ZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoQXBwRm9ybVV0aWxzLmNhblNhdmUodGhpcy5kZWxlZ2F0ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLnNhdmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MsIGZvciBhbmd1bGFyIGZvcm1zXG4gKi9cbmV4cG9ydCBjbGFzcyBBcHBGb3JtVXRpbHMge1xuICBzdGF0aWMgY29weUVudGl0eTJGb3JtID0gY29weUVudGl0eTJGb3JtO1xuICBzdGF0aWMgZ2V0Rm9ybVZhbHVlRnJvbUVudGl0eSA9IGdldEZvcm1WYWx1ZUZyb21FbnRpdHk7XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIGNvbnRyb2wgZnJvbSB0aGUgcHJvdmlkZWQgZm9ybS9jb250cm9sIHN0cnVjdHVyZSB1c2luZyBhIGRvdC1zZXBhcmF0ZWQgcGF0aC5cbiAgICpcbiAgICogQHBhcmFtIHtBYnN0cmFjdENvbnRyb2x9IGZvcm0gLSBUaGUgcm9vdCBmb3JtIGdyb3VwLCBmb3JtIGFycmF5LCBvciBjb250cm9sIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBkb3Qtc2VwYXJhdGVkIHBhdGggc3BlY2lmeWluZyB0aGUgY29udHJvbC4gRm9yIGV4YW1wbGUsICdncm91cE5hbWUuY29udHJvbE5hbWUnIG9yICdhcnJheU5hbWUuMC5jb250cm9sTmFtZScuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3N0cmljdD10cnVlXSAtIElmIHRydWUsIHRocm93cyBhbiBlcnJvciBpZiB0aGUgZnVsbCBwYXRoIGNhbm5vdCBiZSByZXNvbHZlZDsgaWYgZmFsc2UsIHJldHVybnMgdGhlIGxhc3QgdmFsaWQgY29udHJvbCBlbmNvdW50ZXJlZC5cbiAgICogQHJldHVybiB7QWJzdHJhY3RDb250cm9sfSAtIFRoZSBjb250cm9sIGF0IHRoZSBzcGVjaWZpZWQgcGF0aCBvciB0aGUgY2xvc2VzdCB2YWxpZCBjb250cm9sIGlmIHN0cmljdCBtb2RlIGlzIGRpc2FibGVkLlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gLSBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIHBhdGggY2Fubm90IGJlIHJlc29sdmVkIGFuZCBzdHJpY3QgbW9kZSBpcyBlbmFibGVkLlxuICAgKi9cbiAgc3RhdGljIGdldENvbnRyb2xGcm9tUGF0aCA9IGdldENvbnRyb2xGcm9tUGF0aDtcblxuICBzdGF0aWMgZmlsdGVyTnVtYmVySW5wdXQgPSBmaWx0ZXJOdW1iZXJJbnB1dDtcbiAgc3RhdGljIGVuYWJsZUNvbnRyb2xzID0gZW5hYmxlQ29udHJvbHM7XG4gIHN0YXRpYyBlbmFibGVDb250cm9sID0gZW5hYmxlQ29udHJvbDtcbiAgc3RhdGljIGRpc2FibGVDb250cm9sID0gZGlzYWJsZUNvbnRyb2w7XG4gIHN0YXRpYyBkaXNhYmxlQ29udHJvbHMgPSBkaXNhYmxlQ29udHJvbHM7XG4gIHN0YXRpYyBkaXNhYmxlQW5kQ2xlYXJDb250cm9sID0gZGlzYWJsZUFuZENsZWFyQ29udHJvbDtcbiAgc3RhdGljIGRpc2FibGVBbmRDbGVhckNvbnRyb2xzID0gZGlzYWJsZUFuZENsZWFyQ29udHJvbHM7XG4gIHN0YXRpYyBzZXRDb250cm9sRW5hYmxlZCA9IHNldENvbnRyb2xFbmFibGVkO1xuICBzdGF0aWMgc2V0Q29udHJvbHNFbmFibGVkID0gc2V0Q29udHJvbHNFbmFibGVkO1xuICBzdGF0aWMgc2VsZWN0SW5wdXRDb250ZW50RnJvbUV2ZW50ID0gc2VsZWN0SW5wdXRDb250ZW50RnJvbUV2ZW50O1xuICBzdGF0aWMgc2VsZWN0SW5wdXRDb250ZW50ID0gc2VsZWN0SW5wdXRDb250ZW50O1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIG1hcmtBbGxBc1RvdWNoZWQoKSBpbnN0ZWFkIChuYW1pbmcgd2FzIHdyb25nKVxuICAgKi9cbiAgc3RhdGljIG1hcmtBc1RvdWNoZWQgPSBtYXJrQWxsQXNUb3VjaGVkO1xuXG4gIC8qKlxuICAgKiBNYXJrcyB0aGUgY29udHJvbCBhbmQgYWxsIGl0cyBkZXNjZW5kYW50IGNvbnRyb2xzIGFzIHRvdWNoZWQuXG4gICAqIFNlZSBhbHNvOlxuICAgKiAtIGBtYXJrQXNUb3VjaGVkKClgXG4gICAqL1xuICBzdGF0aWMgbWFya0FsbEFzVG91Y2hlZCA9IG1hcmtBbGxBc1RvdWNoZWQ7XG4gIHN0YXRpYyBtYXJrQXNVbnRvdWNoZWQgPSBtYXJrQXNVbnRvdWNoZWQ7XG4gIHN0YXRpYyB3YWl0V2hpbGVQZW5kaW5nID0gd2FpdFdoaWxlUGVuZGluZztcbiAgc3RhdGljIHdhaXRJZGxlID0gd2FpdElkbGU7XG4gIHN0YXRpYyB1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5ID0gdXBkYXRlVmFsdWVBbmRWYWxpZGl0eTtcblxuICBzdGF0aWMgaXNGb3JtKG9iamVjdDogYW55KTogb2JqZWN0IGlzIElBcHBGb3JtIHtcbiAgICByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgQXBwRm9ybVByb3ZpZGVyIHx8ICgnZGlydHknIGluIG9iamVjdCAmJiAnZW5hYmxlZCcgaW4gb2JqZWN0ICYmICd2YWxpZCcgaW4gb2JqZWN0KTtcbiAgfVxuXG4gIHN0YXRpYyBjYW5TYXZlKG9iamVjdDogYW55KTogb2JqZWN0IGlzIElBcHBGb3JtICYgQ2FuU2F2ZSB7XG4gICAgcmV0dXJuICdzYXZlJyBpbiBvYmplY3QgJiYgQXBwRm9ybVV0aWxzLmlzRm9ybShvYmplY3QpO1xuICB9XG5cbiAgLy8gQXJyYXlGb3JtXG4gIHN0YXRpYyBhZGRWYWx1ZUluQXJyYXkgPSBhZGRWYWx1ZUluQXJyYXk7XG4gIHN0YXRpYyByZW1vdmVWYWx1ZUluQXJyYXkgPSByZW1vdmVWYWx1ZUluQXJyYXk7XG4gIHN0YXRpYyByZXNpemVBcnJheSA9IHJlc2l6ZUFycmF5O1xuICBzdGF0aWMgY2xlYXJWYWx1ZUluQXJyYXkgPSBjbGVhclZhbHVlSW5BcnJheTtcblxuICAvLyBDYWxjdWxhdGVkIGZpZWxkc1xuICBzdGF0aWMgY2FsY3VsYXRlZFN1ZmZpeCA9ICdDYWxjdWxhdGVkJztcbiAgc3RhdGljIGlzQ29udHJvbEhhc0lucHV0ID0gaXNDb250cm9sSGFzSW5wdXQ7XG4gIHN0YXRpYyBzZXRDYWxjdWxhdGVkVmFsdWUgPSBzZXRDYWxjdWxhdGVkVmFsdWU7XG4gIHN0YXRpYyByZXNldENhbGN1bGF0ZWRWYWx1ZSA9IHJlc2V0Q2FsY3VsYXRlZFZhbHVlO1xuXG4gIC8vIEZvcm0gZXJyb3JzXG4gIHN0YXRpYyBsb2dGb3JtRXJyb3JzID0gbG9nRm9ybUVycm9ycztcbiAgc3RhdGljIGZpbHRlckVycm9yc0J5UHJlZml4ID0gZmlsdGVyRm9ybUVycm9yc0J5UHJlZml4O1xuICBzdGF0aWMgZmlsdGVyRXJyb3JzQnlQYXRoID0gZmlsdGVyRm9ybUVycm9yc0J5UGF0aDtcbiAgc3RhdGljIGZpbHRlckVycm9ycyA9IGZpbHRlckZvcm1FcnJvcnM7XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdmFsaWRhdGlvbiBlcnJvcnMgZnJvbSBhIGdpdmVuIGZvcm0gY29udHJvbCwgaW5jbHVkaW5nIGl0cyBjaGlsZCBjb250cm9scyBpZiBpdCBpcyBhIGZvcm0gZ3JvdXAgb3IgYXJyYXkuXG4gICAqXG4gICAqIEBwYXJhbSB7QWJzdHJhY3RDb250cm9sfSBjb250cm9sIC0gVGhlIGZvcm0gY29udHJvbCB0byByZXRyaWV2ZSBlcnJvcnMgZnJvbS4gVGhpcyBjYW4gYmUgYSBmb3JtIGdyb3VwLCBhIGZvcm0gYXJyYXksIG9yIGEgc2ltcGxlIGZvcm0gY29udHJvbC5cbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb25zIGZvciBlcnJvciByZXRyaWV2YWwuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb250cm9sTmFtZV0gLSBUaGUgbmFtZSBvciBwYXRoIG9mIHRoZSBjb250cm9sIGJlaW5nIHByb2Nlc3NlZCwgdXNlZCBmb3Igc3RydWN0dXJpbmcgZXJyb3Iga2V5cyBpbiB0aGUgcmVzdWx0LlxuICAgKiBAcGFyYW0ge0Zvcm1FcnJvcnN9IFtvcHRzLnJlc3VsdF0gLSBUaGUgb2JqZWN0IHRvIHdoaWNoIGVycm9ycyB3aWxsIGJlIGFkZGVkLCBhbGxvd2luZyBmb3IgYWdncmVnYXRpb24gYW5kIHBlcnNpc3RlbmNlIGJldHdlZW4gY2FsbHMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMucmVjdXJzaXZlPXRydWVdIC0gV2hldGhlciB0byByZWN1cnNpdmVseSBjb2xsZWN0IGVycm9ycyBmcm9tIGNoaWxkIGNvbnRyb2xzIHdpdGhpbiBhIGZvcm0gZ3JvdXAgb3IgYXJyYXkuIERlZmF1bHRzIHRvIHRydWUuXG4gICAqIEByZXR1cm4ge0Zvcm1FcnJvcnN9IFRoZSBjb2xsZWN0ZWQgZXJyb3JzIGFzIGEga2V5LXZhbHVlIG9iamVjdCB3aGVyZSBrZXlzIHJlcHJlc2VudCBjb250cm9sIG5hbWVzIG9yIHBhdGhzIGFuZCB2YWx1ZXMgcmVwcmVzZW50IHRoZWlyIHJlc3BlY3RpdmUgZXJyb3JzLiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSBwcm92aWRlZCBjb250cm9sIGlzIHZhbGlkIGFuZCBoYXMgbm8gZXJyb3JzLlxuICAgKi9cbiAgc3RhdGljIGdldEZvcm1FcnJvcnMgPSBnZXRGb3JtRXJyb3JzO1xuXG4gIC8qKlxuICAgKiBTZXRzIGZvcm0gZXJyb3JzIG9uIGFuIEFic3RyYWN0Q29udHJvbCwgaW5jbHVkaW5nIG5lc3RlZCBjb250cm9scyB3aXRoaW4gZm9ybSBncm91cHMgb3IgYXJyYXlzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0Q29udHJvbH0gY29udHJvbCAtIFRoZSBmb3JtIGNvbnRyb2wsIGZvcm0gZ3JvdXAsIG9yIGZvcm0gYXJyYXkgdG8gYXBwbHkgdGhlIGVycm9ycyB0by5cbiAgICogQHBhcmFtIHtGb3JtRXJyb3JzfSBlcnJvcnMgLSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBlcnJvcnMgdG8gYmUgc2V0IG9uIHRoZSBjb250cm9sIG9yIGl0cyBjaGlsZHJlbi5cbiAgICogQHJldHVybiB7dm9pZH0gRG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuXG4gICAqL1xuICBzdGF0aWMgc2V0Rm9ybUVycm9ycyA9IHNldEZvcm1FcnJvcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnRyb2xIYXNJbnB1dChjb250cm9sczogeyBba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2wgfSwgY29udHJvbE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyB0cnVlIGlmIHRoZSBjb250cm9sIGhhcyBhIHZhbHVlIGFuZCBpdHMgJ2NhbGN1bGF0ZWQnIGNvbnRyb2wgaGFzIHRoZSB2YWx1ZSAnZmFsc2UnXG4gIHJldHVybiBjb250cm9sc1tjb250cm9sTmFtZV0udmFsdWUgJiYgIXRvQm9vbGVhbihjb250cm9sc1tjb250cm9sTmFtZSArIEFwcEZvcm1VdGlscy5jYWxjdWxhdGVkU3VmZml4XS52YWx1ZSwgZmFsc2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FsY3VsYXRlZFZhbHVlKGNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9LCBjb250cm9sTmFtZTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gIC8vIHNldCB2YWx1ZSB0byBjb250cm9sXG4gIGNvbnRyb2xzW2NvbnRyb2xOYW1lXS5zZXRWYWx1ZShyb3VuZCh2YWx1ZSkpO1xuICAvLyBzZXQgJ2NhbGN1bGF0ZWQnIGNvbnRyb2wgdG8gJ3RydWUnXG4gIGNvbnRyb2xzW2NvbnRyb2xOYW1lICsgQXBwRm9ybVV0aWxzLmNhbGN1bGF0ZWRTdWZmaXhdLnNldFZhbHVlKHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRDYWxjdWxhdGVkVmFsdWUoY29udHJvbHM6IHsgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sIH0sIGNvbnRyb2xOYW1lOiBzdHJpbmcpIHtcbiAgaWYgKCFpc0NvbnRyb2xIYXNJbnB1dChjb250cm9scywgY29udHJvbE5hbWUpKSB7XG4gICAgLy8gc2V0IHVuZGVmaW5lZCBvbmx5IGlmIGNvbnRyb2wgYWxyZWFkeSBjYWxjdWxhdGVkXG4gICAgQXBwRm9ybVV0aWxzLnNldENhbGN1bGF0ZWRWYWx1ZShjb250cm9scywgY29udHJvbE5hbWUsIHVuZGVmaW5lZCk7XG4gIH1cbn1cbiJdfQ==
@@ -113,15 +113,16 @@ export class UrlUtils {
113
113
  * @param queryParams
114
114
  */
115
115
  static appendQueryParams(url, queryParams) {
116
- if (isNilOrBlank(url) || !queryParams)
117
- return url;
116
+ const urlStr = typeof url === 'string' ? url : this.addStartingSlash(url.join('/'));
117
+ if (isNilOrBlank(urlStr) || !queryParams)
118
+ return urlStr;
118
119
  const queryString = Object.entries(queryParams)
119
120
  .filter(([_, value]) => isNotNil(value))
120
121
  .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
121
122
  .join('&');
122
123
  if (isNilOrBlank(queryString))
123
- return url;
124
- return url + (url.includes('?') ? '&' : '?') + queryString;
124
+ return urlStr;
125
+ return urlStr + (urlStr.includes('?') ? '&' : '?') + queryString;
125
126
  }
126
127
  /**
127
128
  * Extracts and returns the root URL from the given complete URL string.
@@ -191,4 +192,4 @@ export class UrlUtils {
191
192
  return this.addTrailingSlash(basePath) + this.removeStartingSlash(relativePath);
192
193
  }
193
194
  }
194
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZmlsZS91cmwudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdEQsTUFBTSxPQUFnQixRQUFRO0lBQzVCOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFtQjtRQUN0QyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBbUI7UUFDdEMsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxNQUFNLENBQUMsYUFBYSxDQUFDLElBQW1CO1FBQ3RDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFXO1FBQzNCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FB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QUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUN0RCxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFnQixFQUFFLFlBQW9CO1FBQ2xELElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxZQUFZLENBQUM7UUFDbkMsSUFBSSxDQUFDLFlBQVk7WUFBRSxPQUFPLFFBQVEsQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbEYsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNOaWxPckJsYW5rLCBpc05vdE5pbCB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBVcmxVdGlscyB7XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gVVJMIGlzIGEgcmVsYXRpdmUgVVJMLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IGhyZWYgLSBUaGUgVVJMIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBVUkwgaXMgcmVsYXRpdmUsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIHN0YXRpYyBpc1JlbGF0aXZlVXJsKGhyZWY6IHN0cmluZyB8IG51bGwpOiBib29sZWFuIHtcbiAgICBpZiAoIWhyZWYpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gIWhyZWYuc3RhcnRzV2l0aCgnaHR0cDonKSAmJiAhaHJlZi5zdGFydHNXaXRoKCdodHRwczonKSAmJiAhaHJlZi5zdGFydHNXaXRoKCdtYWlsdG86JykgJiYgIWhyZWYuc3RhcnRzV2l0aCgndGVsOicpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgYSBnaXZlbiBVUkwgaXMgYW4gaW50ZXJuYWwgVVJMLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IGhyZWYgLSBUaGUgVVJMIHRvIGJlIGNoZWNrZWQuIENhbiBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIFVSTCBvciBudWxsLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIFVSTCBpcyBpbnRlcm5hbCwgb3RoZXJ3aXNlIGZhbHNlLlxuICAgKi9cbiAgc3RhdGljIGlzSW50ZXJuYWxVcmwoaHJlZjogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4ge1xuICAgIGlmICghaHJlZikgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBocmVmLnN0YXJ0c1dpdGgod2luZG93LmxvY2F0aW9uLm9yaWdpbikgfHwgdGhpcy5pc1JlbGF0aXZlVXJsKGhyZWYpO1xuICB9XG5cbiAgc3RhdGljIGlzRXh0ZXJuYWxVcmwoaHJlZjogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4ge1xuICAgIGlmICghaHJlZikgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhdGhpcy5pc0ludGVybmFsVXJsKGhyZWYpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIHF1ZXJ5IHN0cmluZyBmcm9tIHRoZSBnaXZlbiBVUkwsIHJldHVybmluZyBvbmx5IHRoZSBiYXNlIFVSTC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCAtIFRoZSBVUkwgZnJvbSB3aGljaCB0aGUgcXVlcnkgc3RyaW5nIHdpbGwgYmUgc3RyaXBwZWQuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVSTCB3aXRob3V0IHRoZSBxdWVyeSBzdHJpbmcuXG4gICAqL1xuICBzdGF0aWMgc3RyaXBRdWVyeSh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIC9bXj9dKi8uZXhlYyh1cmwpWzBdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGZyYWdtZW50IGFuZCBxdWVyeSBjb21wb25lbnRzIGZyb20gYSBnaXZlbiBVUkwgc3RyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIC0gVGhlIFVSTCBzdHJpbmcgdG8gcHJvY2Vzcy5cbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgVVJMIHdpdGhvdXQgaXRzIGZyYWdtZW50IGFuZCBxdWVyeSBjb21wb25lbnRzLlxuICAgKi9cbiAgc3RhdGljIHN0cmlwRnJhZ21lbnRBbmRRdWVyeSh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF1cmwpIHJldHVybiB1cmw7XG4gICAgcmV0dXJuIHRoaXMuc3RyaXBRdWVyeSgvW14jXSovLmV4ZWModXJsKVswXSk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgdGhlIGZyYWdtZW50IGlkZW50aWZpZXIgZnJvbSB0aGUgZ2l2ZW4gVVJMLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIC0gVGhlIFVSTCBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGZyYWdtZW50LlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBmcmFnbWVudCBpZGVudGlmaWVyIG9mIHRoZSBVUkwsIGV4Y2x1ZGluZyB0aGUgJyMnIHN5bWJvbC5cbiAgICovXG4gIHN0YXRpYyBnZXRGcmFnbWVudCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGlzTmlsT3JCbGFuayh1cmwpKSByZXR1cm4gJyc7XG5cbiAgICBjb25zdCBtYXRjaCA9IHVybC5tYXRjaCgvIyguKikkLyk7XG4gICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiAnJztcbiAgfVxuXG4gIHN0YXRpYyByZXNvbHZlUmVsYXRpdmVVcmwoYmFzZVVybDogc3RyaW5nLCByZWxhdGl2ZVBhdGg6IHN0cmluZywgb3B0cz86IHsgYWJzb2x1dGVCeURlZmF1bHQ6IGJvb2xlYW4gfSk6IHN0cmluZyB7XG4gICAgaWYgKCFiYXNlVXJsKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nICdiYXNlVXJsJyBhcmd1bWVudFwiKTtcbiAgICBpZiAoIXJlbGF0aXZlUGF0aCkgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyAncmVsYXRpdmVQYXRoJyBhcmd1bWVudFwiKTtcbiAgICBpZiAoIXRoaXMuaXNSZWxhdGl2ZVVybChyZWxhdGl2ZVBhdGgpKSB0aHJvdyBuZXcgRXJyb3IoJ1Nob3VsZCBiZSBhIHJlbGF0aXZlIHBhdGgnKTtcblxuICAgIC8vIERldGVjdCBhYnNvbHV0ZSBVUkxcbiAgICBpZiAocmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy8nKSB8fCAob3B0cz8uYWJzb2x1dGVCeURlZmF1bHQgJiYgIXJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKCcuJykpKSB7XG4gICAgICBiYXNlVXJsID0gdGhpcy5nZXRSb290VXJsKGJhc2VVcmwpO1xuICAgIH1cblxuICAgIHJldHVybiBVcmxVdGlscy5ub3JtYWxpemVVcmwoVXJsVXRpbHMuY29uY2F0KGJhc2VVcmwsIHJlbGF0aXZlUGF0aCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGEgZ2l2ZW4gVVJMIGJ5IG5vcm1hbGl6aW5nIGl0cyBwYXJ0cywgcmVtb3ZpbmcgdW5uZWNlc3NhcnkgcGF0aCBzZWdtZW50cyBsaWtlIFwiLlwiIGFuZCBcIi4uXCIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSBUaGUgVVJMIHRvIGJlIHJlc29sdmVkLiBNdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy5cbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgcmVzb2x2ZWQgYW5kIGNsZWFuZWQgVVJMIHN0cmluZy5cbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwcm92aWRlZCBVUkwgaXMgbWlzc2luZyBvciB1bmRlZmluZWQuXG4gICAqL1xuICBzdGF0aWMgbm9ybWFsaXplVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXVybCkgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyAndXJsJyBhcmd1bWVudFwiKTtcbiAgICByZXR1cm4gdGhpcy5jbGVhblVybCh1cmwpXG4gICAgICAuc3BsaXQoJy8nKVxuICAgICAgLnJlZHVjZSgocmVzLCBwYXJ0KSA9PiB7XG4gICAgICAgIGlmIChwYXJ0ID09PSAnLicpIHJldHVybiByZXM7XG4gICAgICAgIGlmIChwYXJ0ID09PSAnLi4nICYmIHJlcy5sZW5ndGggPiAwKSByZXR1cm4gcmVzLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgcmV0dXJuIHJlcy5jb25jYXQocGFydCk7XG4gICAgICB9LCBbXSlcbiAgICAgIC5qb2luKCcvJyk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBjb21wbGV0ZXMgYSBiYXNlIFVSTCB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIGtleS12YWx1ZSBwYWlyc1xuICAgKiByZXByZXNlbnRpbmcgdGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gYWRkLiBJdCBwcm9wZXJseSBlbmNvZGVzIHRoZVxuICAgKiBwYXJhbWV0ZXJzIGFuZCBlbnN1cmVzIHRoZXkgYXJlIGFkZGVkIHdpdGggdGhlIGFwcHJvcHJpYXRlIHNlcGFyYXRvciAoJz8nIG9yICcmJykuXG4gICAqIFBhcmFtZXRlcnMgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCB2YWx1ZXMgYXJlIGF1dG9tYXRpY2FsbHkgZmlsdGVyZWQgb3V0LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBJbiBhIHRlbXBsYXRlXG4gICAqIDxhIFtocmVmXT1cIidodHRwczovL2V4YW1wbGUuY29tJyB8IGFwcGVuZFF1ZXJ5UGFyYW1zOntpZDogMTIzLCBuYW1lOiAndGVzdCd9XCI+TGluazwvYT5cbiAgICogLy8gUmVzdWx0OiBodHRwczovL2V4YW1wbGUuY29tP2lkPTEyMyZuYW1lPXRlc3RcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gSWYgdGhlIFVSTCBhbHJlYWR5IGNvbnRhaW5zIHBhcmFtZXRlcnNcbiAgICogPGEgW2hyZWZdPVwiJ2h0dHBzOi8vZXhhbXBsZS5jb20/cGFnZT0xJyB8IGFwcGVuZFF1ZXJ5UGFyYW1zOntzb3J0OiAnYXNjJ31cIj5MaW5rPC9hPlxuICAgKiAvLyBSZXN1bHQ6IGh0dHBzOi8vZXhhbXBsZS5jb20/cGFnZT0xJnNvcnQ9YXNjXG4gICAqXG4gICAqIEBwYXJhbSB1cmxcbiAgICogQHBhcmFtIHF1ZXJ5UGFyYW1zXG4gICAqL1xuICBzdGF0aWMgYXBwZW5kUXVlcnlQYXJhbXModXJsOiBzdHJpbmcsIHF1ZXJ5UGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogc3RyaW5nIHtcbiAgICBpZiAoaXNOaWxPckJsYW5rKHVybCkgfHwgIXF1ZXJ5UGFyYW1zKSByZXR1cm4gdXJsO1xuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gT2JqZWN0LmVudHJpZXMocXVlcnlQYXJhbXMpXG4gICAgICAuZmlsdGVyKChbXywgdmFsdWVdKSA9PiBpc05vdE5pbCh2YWx1ZSkpXG4gICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IGAke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSl9YClcbiAgICAgIC5qb2luKCcmJyk7XG4gICAgaWYgKGlzTmlsT3JCbGFuayhxdWVyeVN0cmluZykpIHJldHVybiB1cmw7XG4gICAgcmV0dXJuIHVybCArICh1cmwuaW5jbHVkZXMoJz8nKSA/ICcmJyA6ICc/JykgKyBxdWVyeVN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyBhbmQgcmV0dXJucyB0aGUgcm9vdCBVUkwgZnJvbSB0aGUgZ2l2ZW4gY29tcGxldGUgVVJMIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCAtIFRoZSBjb21wbGV0ZSBVUkwgc3RyaW5nIGZyb20gd2hpY2ggdGhlIHJvb3QgVVJMIHdpbGwgYmUgZXh0cmFjdGVkLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSByb290IFVSTCBpbmNsdWRpbmcgdGhlIHByb3RvY29sIGFuZCBob3N0IChhbmQgcG9ydCBpZiBwcmVzZW50KS5cbiAgICogQHRocm93cyB7RXJyb3J9IFRocm93cyBhbiBlcnJvciBpZiB0aGUgcHJvdmlkZWQgVVJMIGlzIG1pc3Npbmcgb3IgaXMgaW4gYW4gaW52YWxpZCBmb3JtYXQuXG4gICAqL1xuICBzdGF0aWMgZ2V0Um9vdFVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF1cmwpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgJ3VybCcgYXJndW1lbnRcIik7XG4gICAgbGV0IFtwcm90b2NvbCwgcGF0aF0gPSB1cmwuc3BsaXQoJy8vJywgMik7XG4gICAgaWYgKCFwcm90b2NvbCB8fCBpc05pbE9yQmxhbmsocGF0aCkpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBVUkwgZm9ybWF0OiAke3VybH1gKTtcbiAgICBjb25zdCBob3N0QW5kUG9ydCA9IHBhdGguc3BsaXQoJy8nLCAyKVswXTtcbiAgICByZXR1cm4gYCR7cHJvdG9jb2x9Ly8ke2hvc3RBbmRQb3J0fWA7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBwYXJlbnQgVVJMIG9yIGRpcmVjdG9yeSBwYXRoIGZyb20gdGhlIHByb3ZpZGVkIFVSTC5cbiAgICogVGhpcyBtZXRob2QgaGFuZGxlcyBib3RoIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBVUkxzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIC0gVGhlIFVSTCBmcm9tIHdoaWNoIHRvIGRlcml2ZSB0aGUgcGFyZW50IHBhdGguXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBNdXN0IGJlIGEgdmFsaWQgVVJMIG9yIHJlbGF0aXZlIHBhdGguXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHBhcmVudCBVUkwgb3IgZGlyZWN0b3J5IHBhdGguIFRocm93cyBhbiBlcnJvciBpZiB0aGUgaW5wdXQgaXMgaW52YWxpZC5cbiAgICovXG4gIHN0YXRpYyBnZXRQYXJlbnQodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdXJsKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nICd1cmwnIGFyZ3VtZW50XCIpO1xuICAgIGNvbnN0IGNsZWFuVXJsID0gdGhpcy5zdHJpcEZyYWdtZW50QW5kUXVlcnkodXJsKTtcbiAgICBpZiAoY2xlYW5VcmwuZW5kc1dpdGgoJy8nKSkgcmV0dXJuIGNsZWFuVXJsOyAvLyBTa2lwIGlmIGFscmVhZHkgYSBwYXJlbnQgZGlyZWN0b3J5XG4gICAgY29uc3QgcGFyZW50UGF0aCA9IGNsZWFuVXJsICsgJy8nICsgJy4uJztcbiAgICBpZiAodGhpcy5pc1JlbGF0aXZlVXJsKHVybCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVSZWxhdGl2ZVVybCh3aW5kb3cubG9jYXRpb24uaHJlZiwgcGFyZW50UGF0aCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZVVybChwYXJlbnRQYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbnMgdGhlIHByb3ZpZGVkIFVSTCBieSBlbmNvZGluZyBpdCBzYWZlbHkgYW5kIHJlcGxhY2luZyBzcGVjaWZpYyBwYXR0ZXJucy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhyZWYgLSBUaGUgVVJMIHN0cmluZyB0byBiZSBjbGVhbmVkLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH0gVGhlIGNsZWFuZWQgYW5kIGVuY29kZWQgVVJMIHN0cmluZywgb3IgbnVsbCBpZiBhbiBlcnJvciBvY2N1cnMuXG4gICAqL1xuICBzdGF0aWMgY2xlYW5VcmwoaHJlZjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgaHJlZiA9IGVuY29kZVVSSShocmVmKS5yZXBsYWNlKC8lMjUvZywgJyUnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGhyZWY7XG4gIH1cblxuICBzdGF0aWMgYWRkVHJhaWxpbmdTbGFzaCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVybC5lbmRzV2l0aCgnLycpID8gdXJsIDogdXJsICsgJy8nO1xuICB9XG5cbiAgc3RhdGljIGFkZFN0YXJ0aW5nU2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmwuc3RhcnRzV2l0aCgnLycpID8gdXJsIDogJy8nICsgdXJsO1xuICB9XG5cbiAgc3RhdGljIHJlbW92ZVN0YXJ0aW5nU2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmwuc3RhcnRzV2l0aCgnLycpID8gdXJsLnN1YnN0cmluZygxKSA6IHVybDtcbiAgfVxuXG4gIHN0YXRpYyBjb25jYXQoYmFzZVBhdGg6IHN0cmluZywgcmVsYXRpdmVQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghYmFzZVBhdGgpIHJldHVybiByZWxhdGl2ZVBhdGg7XG4gICAgaWYgKCFyZWxhdGl2ZVBhdGgpIHJldHVybiBiYXNlUGF0aDtcbiAgICByZXR1cm4gdGhpcy5hZGRUcmFpbGluZ1NsYXNoKGJhc2VQYXRoKSArIHRoaXMucmVtb3ZlU3RhcnRpbmdTbGFzaChyZWxhdGl2ZVBhdGgpO1xuICB9XG59XG4iXX0=
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZmlsZS91cmwudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdEQsTUFBTSxPQUFnQixRQUFRO0lBQzVCOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFtQjtRQUN0QyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBbUI7UUFDdEMsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxNQUFNLENBQUMsYUFBYSxDQUFDLElBQW1CO1FBQ3RDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFXO1FBQzNCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FB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QUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMvQyxDQUFDO0lBRUQsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEdBQVc7UUFDcEMsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDdEQsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBZ0IsRUFBRSxZQUFvQjtRQUNsRCxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU8sWUFBWSxDQUFDO1FBQ25DLElBQUksQ0FBQyxZQUFZO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzTmlsT3JCbGFuaywgaXNOb3ROaWwgfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVXJsVXRpbHMge1xuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBhIGdpdmVuIFVSTCBpcyBhIHJlbGF0aXZlIFVSTC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsfSBocmVmIC0gVGhlIFVSTCB0byBjaGVjay5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgVVJMIGlzIHJlbGF0aXZlLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBzdGF0aWMgaXNSZWxhdGl2ZVVybChocmVmOiBzdHJpbmcgfCBudWxsKTogYm9vbGVhbiB7XG4gICAgaWYgKCFocmVmKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICFocmVmLnN0YXJ0c1dpdGgoJ2h0dHA6JykgJiYgIWhyZWYuc3RhcnRzV2l0aCgnaHR0cHM6JykgJiYgIWhyZWYuc3RhcnRzV2l0aCgnbWFpbHRvOicpICYmICFocmVmLnN0YXJ0c1dpdGgoJ3RlbDonKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gVVJMIGlzIGFuIGludGVybmFsIFVSTC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsfSBocmVmIC0gVGhlIFVSTCB0byBiZSBjaGVja2VkLiBDYW4gYmUgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBVUkwgb3IgbnVsbC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBVUkwgaXMgaW50ZXJuYWwsIG90aGVyd2lzZSBmYWxzZS5cbiAgICovXG4gIHN0YXRpYyBpc0ludGVybmFsVXJsKGhyZWY6IHN0cmluZyB8IG51bGwpOiBib29sZWFuIHtcbiAgICBpZiAoIWhyZWYpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gaHJlZi5zdGFydHNXaXRoKHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pIHx8IHRoaXMuaXNSZWxhdGl2ZVVybChocmVmKTtcbiAgfVxuXG4gIHN0YXRpYyBpc0V4dGVybmFsVXJsKGhyZWY6IHN0cmluZyB8IG51bGwpOiBib29sZWFuIHtcbiAgICBpZiAoIWhyZWYpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gIXRoaXMuaXNJbnRlcm5hbFVybChocmVmKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBxdWVyeSBzdHJpbmcgZnJvbSB0aGUgZ2l2ZW4gVVJMLCByZXR1cm5pbmcgb25seSB0aGUgYmFzZSBVUkwuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSBUaGUgVVJMIGZyb20gd2hpY2ggdGhlIHF1ZXJ5IHN0cmluZyB3aWxsIGJlIHN0cmlwcGVkLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBVUkwgd2l0aG91dCB0aGUgcXVlcnkgc3RyaW5nLlxuICAgKi9cbiAgc3RhdGljIHN0cmlwUXVlcnkodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAvW14/XSovLmV4ZWModXJsKVswXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBmcmFnbWVudCBhbmQgcXVlcnkgY29tcG9uZW50cyBmcm9tIGEgZ2l2ZW4gVVJMIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCAtIFRoZSBVUkwgc3RyaW5nIHRvIHByb2Nlc3MuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVSTCB3aXRob3V0IGl0cyBmcmFnbWVudCBhbmQgcXVlcnkgY29tcG9uZW50cy5cbiAgICovXG4gIHN0YXRpYyBzdHJpcEZyYWdtZW50QW5kUXVlcnkodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdXJsKSByZXR1cm4gdXJsO1xuICAgIHJldHVybiB0aGlzLnN0cmlwUXVlcnkoL1teI10qLy5leGVjKHVybClbMF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIHRoZSBmcmFnbWVudCBpZGVudGlmaWVyIGZyb20gdGhlIGdpdmVuIFVSTC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCAtIFRoZSBVUkwgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBmcmFnbWVudC5cbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgZnJhZ21lbnQgaWRlbnRpZmllciBvZiB0aGUgVVJMLCBleGNsdWRpbmcgdGhlICcjJyBzeW1ib2wuXG4gICAqL1xuICBzdGF0aWMgZ2V0RnJhZ21lbnQodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChpc05pbE9yQmxhbmsodXJsKSkgcmV0dXJuICcnO1xuXG4gICAgY29uc3QgbWF0Y2ggPSB1cmwubWF0Y2goLyMoLiopJC8pO1xuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogJyc7XG4gIH1cblxuICBzdGF0aWMgcmVzb2x2ZVJlbGF0aXZlVXJsKGJhc2VVcmw6IHN0cmluZywgcmVsYXRpdmVQYXRoOiBzdHJpbmcsIG9wdHM/OiB7IGFic29sdXRlQnlEZWZhdWx0OiBib29sZWFuIH0pOiBzdHJpbmcge1xuICAgIGlmICghYmFzZVVybCkgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyAnYmFzZVVybCcgYXJndW1lbnRcIik7XG4gICAgaWYgKCFyZWxhdGl2ZVBhdGgpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgJ3JlbGF0aXZlUGF0aCcgYXJndW1lbnRcIik7XG4gICAgaWYgKCF0aGlzLmlzUmVsYXRpdmVVcmwocmVsYXRpdmVQYXRoKSkgdGhyb3cgbmV3IEVycm9yKCdTaG91bGQgYmUgYSByZWxhdGl2ZSBwYXRoJyk7XG5cbiAgICAvLyBEZXRlY3QgYWJzb2x1dGUgVVJMXG4gICAgaWYgKHJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKCcvJykgfHwgKG9wdHM/LmFic29sdXRlQnlEZWZhdWx0ICYmICFyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aCgnLicpKSkge1xuICAgICAgYmFzZVVybCA9IHRoaXMuZ2V0Um9vdFVybChiYXNlVXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gVXJsVXRpbHMubm9ybWFsaXplVXJsKFVybFV0aWxzLmNvbmNhdChiYXNlVXJsLCByZWxhdGl2ZVBhdGgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhIGdpdmVuIFVSTCBieSBub3JtYWxpemluZyBpdHMgcGFydHMsIHJlbW92aW5nIHVubmVjZXNzYXJ5IHBhdGggc2VnbWVudHMgbGlrZSBcIi5cIiBhbmQgXCIuLlwiLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIC0gVGhlIFVSTCB0byBiZSByZXNvbHZlZC4gTXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHJlc29sdmVkIGFuZCBjbGVhbmVkIFVSTCBzdHJpbmcuXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcHJvdmlkZWQgVVJMIGlzIG1pc3Npbmcgb3IgdW5kZWZpbmVkLlxuICAgKi9cbiAgc3RhdGljIG5vcm1hbGl6ZVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF1cmwpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgJ3VybCcgYXJndW1lbnRcIik7XG4gICAgcmV0dXJuIHRoaXMuY2xlYW5VcmwodXJsKVxuICAgICAgLnNwbGl0KCcvJylcbiAgICAgIC5yZWR1Y2UoKHJlcywgcGFydCkgPT4ge1xuICAgICAgICBpZiAocGFydCA9PT0gJy4nKSByZXR1cm4gcmVzO1xuICAgICAgICBpZiAocGFydCA9PT0gJy4uJyAmJiByZXMubGVuZ3RoID4gMCkgcmV0dXJuIHJlcy5zbGljZSgwLCAtMSk7XG4gICAgICAgIHJldHVybiByZXMuY29uY2F0KHBhcnQpO1xuICAgICAgfSwgW10pXG4gICAgICAuam9pbignLycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gY29tcGxldGVzIGEgYmFzZSBVUkwgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyBrZXktdmFsdWUgcGFpcnNcbiAgICogcmVwcmVzZW50aW5nIHRoZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIGFkZC4gSXQgcHJvcGVybHkgZW5jb2RlcyB0aGVcbiAgICogcGFyYW1ldGVycyBhbmQgZW5zdXJlcyB0aGV5IGFyZSBhZGRlZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBzZXBhcmF0b3IgKCc/JyBvciAnJicpLlxuICAgKiBQYXJhbWV0ZXJzIHdpdGggbnVsbCBvciB1bmRlZmluZWQgdmFsdWVzIGFyZSBhdXRvbWF0aWNhbGx5IGZpbHRlcmVkIG91dC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gSW4gYSB0ZW1wbGF0ZVxuICAgKiA8YSBbaHJlZl09XCInaHR0cHM6Ly9leGFtcGxlLmNvbScgfCBhcHBlbmRRdWVyeVBhcmFtczp7aWQ6IDEyMywgbmFtZTogJ3Rlc3QnfVwiPkxpbms8L2E+XG4gICAqIC8vIFJlc3VsdDogaHR0cHM6Ly9leGFtcGxlLmNvbT9pZD0xMjMmbmFtZT10ZXN0XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIElmIHRoZSBVUkwgYWxyZWFkeSBjb250YWlucyBwYXJhbWV0ZXJzXG4gICAqIDxhIFtocmVmXT1cIidodHRwczovL2V4YW1wbGUuY29tP3BhZ2U9MScgfCBhcHBlbmRRdWVyeVBhcmFtczp7c29ydDogJ2FzYyd9XCI+TGluazwvYT5cbiAgICogLy8gUmVzdWx0OiBodHRwczovL2V4YW1wbGUuY29tP3BhZ2U9MSZzb3J0PWFzY1xuICAgKlxuICAgKiBAcGFyYW0gdXJsXG4gICAqIEBwYXJhbSBxdWVyeVBhcmFtc1xuICAgKi9cbiAgc3RhdGljIGFwcGVuZFF1ZXJ5UGFyYW1zKHVybDogc3RyaW5nIHwgYW55W10sIHF1ZXJ5UGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmxTdHIgPSB0eXBlb2YgdXJsID09PSAnc3RyaW5nJyA/IHVybCA6IHRoaXMuYWRkU3RhcnRpbmdTbGFzaCh1cmwuam9pbignLycpKTtcbiAgICBpZiAoaXNOaWxPckJsYW5rKHVybFN0cikgfHwgIXF1ZXJ5UGFyYW1zKSByZXR1cm4gdXJsU3RyO1xuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gT2JqZWN0LmVudHJpZXMocXVlcnlQYXJhbXMpXG4gICAgICAuZmlsdGVyKChbXywgdmFsdWVdKSA9PiBpc05vdE5pbCh2YWx1ZSkpXG4gICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IGAke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSl9YClcbiAgICAgIC5qb2luKCcmJyk7XG4gICAgaWYgKGlzTmlsT3JCbGFuayhxdWVyeVN0cmluZykpIHJldHVybiB1cmxTdHI7XG4gICAgcmV0dXJuIHVybFN0ciArICh1cmxTdHIuaW5jbHVkZXMoJz8nKSA/ICcmJyA6ICc/JykgKyBxdWVyeVN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyBhbmQgcmV0dXJucyB0aGUgcm9vdCBVUkwgZnJvbSB0aGUgZ2l2ZW4gY29tcGxldGUgVVJMIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCAtIFRoZSBjb21wbGV0ZSBVUkwgc3RyaW5nIGZyb20gd2hpY2ggdGhlIHJvb3QgVVJMIHdpbGwgYmUgZXh0cmFjdGVkLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSByb290IFVSTCBpbmNsdWRpbmcgdGhlIHByb3RvY29sIGFuZCBob3N0IChhbmQgcG9ydCBpZiBwcmVzZW50KS5cbiAgICogQHRocm93cyB7RXJyb3J9IFRocm93cyBhbiBlcnJvciBpZiB0aGUgcHJvdmlkZWQgVVJMIGlzIG1pc3Npbmcgb3IgaXMgaW4gYW4gaW52YWxpZCBmb3JtYXQuXG4gICAqL1xuICBzdGF0aWMgZ2V0Um9vdFVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF1cmwpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgJ3VybCcgYXJndW1lbnRcIik7XG4gICAgbGV0IFtwcm90b2NvbCwgcGF0aF0gPSB1cmwuc3BsaXQoJy8vJywgMik7XG4gICAgaWYgKCFwcm90b2NvbCB8fCBpc05pbE9yQmxhbmsocGF0aCkpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBVUkwgZm9ybWF0OiAke3VybH1gKTtcbiAgICBjb25zdCBob3N0QW5kUG9ydCA9IHBhdGguc3BsaXQoJy8nLCAyKVswXTtcbiAgICByZXR1cm4gYCR7cHJvdG9jb2x9Ly8ke2hvc3RBbmRQb3J0fWA7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBwYXJlbnQgVVJMIG9yIGRpcmVjdG9yeSBwYXRoIGZyb20gdGhlIHByb3ZpZGVkIFVSTC5cbiAgICogVGhpcyBtZXRob2QgaGFuZGxlcyBib3RoIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBVUkxzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIC0gVGhlIFVSTCBmcm9tIHdoaWNoIHRvIGRlcml2ZSB0aGUgcGFyZW50IHBhdGguXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBNdXN0IGJlIGEgdmFsaWQgVVJMIG9yIHJlbGF0aXZlIHBhdGguXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHBhcmVudCBVUkwgb3IgZGlyZWN0b3J5IHBhdGguIFRocm93cyBhbiBlcnJvciBpZiB0aGUgaW5wdXQgaXMgaW52YWxpZC5cbiAgICovXG4gIHN0YXRpYyBnZXRQYXJlbnQodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdXJsKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nICd1cmwnIGFyZ3VtZW50XCIpO1xuICAgIGNvbnN0IGNsZWFuVXJsID0gdGhpcy5zdHJpcEZyYWdtZW50QW5kUXVlcnkodXJsKTtcbiAgICBpZiAoY2xlYW5VcmwuZW5kc1dpdGgoJy8nKSkgcmV0dXJuIGNsZWFuVXJsOyAvLyBTa2lwIGlmIGFscmVhZHkgYSBwYXJlbnQgZGlyZWN0b3J5XG4gICAgY29uc3QgcGFyZW50UGF0aCA9IGNsZWFuVXJsICsgJy8nICsgJy4uJztcbiAgICBpZiAodGhpcy5pc1JlbGF0aXZlVXJsKHVybCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVSZWxhdGl2ZVVybCh3aW5kb3cubG9jYXRpb24uaHJlZiwgcGFyZW50UGF0aCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZVVybChwYXJlbnRQYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbnMgdGhlIHByb3ZpZGVkIFVSTCBieSBlbmNvZGluZyBpdCBzYWZlbHkgYW5kIHJlcGxhY2luZyBzcGVjaWZpYyBwYXR0ZXJucy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhyZWYgLSBUaGUgVVJMIHN0cmluZyB0byBiZSBjbGVhbmVkLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH0gVGhlIGNsZWFuZWQgYW5kIGVuY29kZWQgVVJMIHN0cmluZywgb3IgbnVsbCBpZiBhbiBlcnJvciBvY2N1cnMuXG4gICAqL1xuICBzdGF0aWMgY2xlYW5VcmwoaHJlZjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgaHJlZiA9IGVuY29kZVVSSShocmVmKS5yZXBsYWNlKC8lMjUvZywgJyUnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGhyZWY7XG4gIH1cblxuICBzdGF0aWMgYWRkVHJhaWxpbmdTbGFzaCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVybC5lbmRzV2l0aCgnLycpID8gdXJsIDogdXJsICsgJy8nO1xuICB9XG5cbiAgc3RhdGljIGFkZFN0YXJ0aW5nU2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmwuc3RhcnRzV2l0aCgnLycpID8gdXJsIDogJy8nICsgdXJsO1xuICB9XG5cbiAgc3RhdGljIHJlbW92ZVN0YXJ0aW5nU2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmwuc3RhcnRzV2l0aCgnLycpID8gdXJsLnN1YnN0cmluZygxKSA6IHVybDtcbiAgfVxuXG4gIHN0YXRpYyBjb25jYXQoYmFzZVBhdGg6IHN0cmluZywgcmVsYXRpdmVQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghYmFzZVBhdGgpIHJldHVybiByZWxhdGl2ZVBhdGg7XG4gICAgaWYgKCFyZWxhdGl2ZVBhdGgpIHJldHVybiBiYXNlUGF0aDtcbiAgICByZXR1cm4gdGhpcy5hZGRUcmFpbGluZ1NsYXNoKGJhc2VQYXRoKSArIHRoaXMucmVtb3ZlU3RhcnRpbmdTbGFzaChyZWxhdGl2ZVBhdGgpO1xuICB9XG59XG4iXX0=