@messaia/cdk 18.1.0-rc19 → 18.1.0-rc20
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/esm2022/lib/common/pipes/enum.pipe.mjs +24 -6
- package/esm2022/lib/common/pipes/order.pipe.mjs +127 -41
- package/fesm2022/messaia-cdk.mjs +150 -46
- package/fesm2022/messaia-cdk.mjs.map +1 -1
- package/lib/common/pipes/enum.pipe.d.ts +13 -4
- package/lib/common/pipes/order.pipe.d.ts +77 -38
- package/package.json +1 -1
|
@@ -2,12 +2,30 @@ import { Pipe } from "@angular/core";
|
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
export class EnumPipe {
|
|
4
4
|
/**
|
|
5
|
-
* Converts enum value to string
|
|
6
|
-
*
|
|
7
|
-
* @param
|
|
5
|
+
* Converts an enum value to its corresponding string representation.
|
|
6
|
+
*
|
|
7
|
+
* @param value - The numeric value of the enum to convert.
|
|
8
|
+
* @param enumType - The enum type (as an object) that defines the mapping of values to their string representations.
|
|
9
|
+
* @param prefixOrMetadata - Either a prefix string to prepend to the resulting string,
|
|
10
|
+
* or an object containing EnumMetadata for additional display information.
|
|
11
|
+
* @param suffix - An optional string to append to the resulting string (default is an empty string).
|
|
12
|
+
* @returns The formatted string representation of the enum value, including any specified prefixes or suffixes,
|
|
13
|
+
* or undefined if the value is not recognized in the provided enum type.
|
|
8
14
|
*/
|
|
9
|
-
transform(value, enumType,
|
|
10
|
-
|
|
15
|
+
transform(value, enumType, prefixOrMetadata, suffix = '') {
|
|
16
|
+
/* Determine if prefixOrMetadata is an object containing EnumMetadata for the given value */
|
|
17
|
+
if (prefixOrMetadata && typeof prefixOrMetadata === 'object' && value in prefixOrMetadata) {
|
|
18
|
+
const metadata = prefixOrMetadata[value];
|
|
19
|
+
/* Return the display string from the metadata along with the suffix */
|
|
20
|
+
return `${metadata.display}${suffix}`;
|
|
21
|
+
}
|
|
22
|
+
/* Check if enumType is an object and contains the specified value */
|
|
23
|
+
if (enumType && typeof enumType === 'object' && value in enumType) {
|
|
24
|
+
/* Return the corresponding string value from the enum, prepending the prefix if provided */
|
|
25
|
+
return `${prefixOrMetadata ?? ''}${enumType[value]}${suffix}`;
|
|
26
|
+
}
|
|
27
|
+
/* If the value is not recognized in the enumType, return undefined as a fallback */
|
|
28
|
+
return undefined;
|
|
11
29
|
}
|
|
12
30
|
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: EnumPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
13
31
|
/** @nocollapse */ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: EnumPipe, name: "enum", pure: false });
|
|
@@ -20,4 +38,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
20
38
|
pure: false
|
|
21
39
|
}]
|
|
22
40
|
}] });
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvY29tbW9uL3BpcGVzL2VudW0ucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFRcEQsTUFBTSxPQUFPLFFBQVE7SUFDcEI7Ozs7Ozs7Ozs7T0FVRztJQUNILFNBQVMsQ0FBQyxLQUFhLEVBQUUsUUFBYSxFQUFFLGdCQUEyRCxFQUFFLFNBQWlCLEVBQUU7UUFDdkgsNEZBQTRGO1FBQzVGLElBQUksZ0JBQWdCLElBQUksT0FBTyxnQkFBZ0IsS0FBSyxRQUFRLElBQUksS0FBSyxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDM0YsTUFBTSxRQUFRLEdBQWlCLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZELHVFQUF1RTtZQUN2RSxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUN2QyxDQUFDO1FBRUQscUVBQXFFO1FBQ3JFLElBQUksUUFBUSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxLQUFLLElBQUksUUFBUSxFQUFFLENBQUM7WUFDbkUsNEZBQTRGO1lBQzVGLE9BQU8sR0FBRyxnQkFBZ0IsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDO1FBQy9ELENBQUM7UUFFRCxvRkFBb0Y7UUFDcEYsT0FBTyxTQUFTLENBQUM7SUFDbEIsQ0FBQzswSEE1QlcsUUFBUTt3SEFBUixRQUFROzsyRkFBUixRQUFRO2tCQUxwQixJQUFJO21CQUFDO29CQUNMLElBQUksRUFBRSxNQUFNO29CQUNaLCtEQUErRDtvQkFDL0QsSUFBSSxFQUFFLEtBQUs7aUJBQ1giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRW51bU1ldGFkYXRhIH0gZnJvbSBcIi4uL21vZGVscy9lbnVtLW1ldGFkYXRhXCI7XHJcblxyXG5AUGlwZSh7XHJcblx0bmFtZTogJ2VudW0nLFxyXG5cdC8qIFJlcXVpcmVkIHRvIHVwZGF0ZSB0aGUgdmFsdWUgd2hlbiB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCAqL1xyXG5cdHB1cmU6IGZhbHNlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFbnVtUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG5cdC8qKlxyXG5cdCAqIENvbnZlcnRzIGFuIGVudW0gdmFsdWUgdG8gaXRzIGNvcnJlc3BvbmRpbmcgc3RyaW5nIHJlcHJlc2VudGF0aW9uLlxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBudW1lcmljIHZhbHVlIG9mIHRoZSBlbnVtIHRvIGNvbnZlcnQuXHJcblx0ICogQHBhcmFtIGVudW1UeXBlIC0gVGhlIGVudW0gdHlwZSAoYXMgYW4gb2JqZWN0KSB0aGF0IGRlZmluZXMgdGhlIG1hcHBpbmcgb2YgdmFsdWVzIHRvIHRoZWlyIHN0cmluZyByZXByZXNlbnRhdGlvbnMuXHJcblx0ICogQHBhcmFtIHByZWZpeE9yTWV0YWRhdGEgLSBFaXRoZXIgYSBwcmVmaXggc3RyaW5nIHRvIHByZXBlbmQgdG8gdGhlIHJlc3VsdGluZyBzdHJpbmcsIFxyXG5cdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYW4gb2JqZWN0IGNvbnRhaW5pbmcgRW51bU1ldGFkYXRhIGZvciBhZGRpdGlvbmFsIGRpc3BsYXkgaW5mb3JtYXRpb24uXHJcblx0ICogQHBhcmFtIHN1ZmZpeCAtIEFuIG9wdGlvbmFsIHN0cmluZyB0byBhcHBlbmQgdG8gdGhlIHJlc3VsdGluZyBzdHJpbmcgKGRlZmF1bHQgaXMgYW4gZW1wdHkgc3RyaW5nKS5cclxuXHQgKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZW51bSB2YWx1ZSwgaW5jbHVkaW5nIGFueSBzcGVjaWZpZWQgcHJlZml4ZXMgb3Igc3VmZml4ZXMsIFxyXG5cdCAqICAgICAgICAgIG9yIHVuZGVmaW5lZCBpZiB0aGUgdmFsdWUgaXMgbm90IHJlY29nbml6ZWQgaW4gdGhlIHByb3ZpZGVkIGVudW0gdHlwZS5cclxuXHQgKi9cclxuXHR0cmFuc2Zvcm0odmFsdWU6IG51bWJlciwgZW51bVR5cGU6IGFueSwgcHJlZml4T3JNZXRhZGF0YT86IHN0cmluZyB8IHsgW2tleTogbnVtYmVyXTogRW51bU1ldGFkYXRhIH0sIHN1ZmZpeDogc3RyaW5nID0gJycpOiBhbnkge1xyXG5cdFx0LyogRGV0ZXJtaW5lIGlmIHByZWZpeE9yTWV0YWRhdGEgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgRW51bU1ldGFkYXRhIGZvciB0aGUgZ2l2ZW4gdmFsdWUgKi9cclxuXHRcdGlmIChwcmVmaXhPck1ldGFkYXRhICYmIHR5cGVvZiBwcmVmaXhPck1ldGFkYXRhID09PSAnb2JqZWN0JyAmJiB2YWx1ZSBpbiBwcmVmaXhPck1ldGFkYXRhKSB7XHJcblx0XHRcdGNvbnN0IG1ldGFkYXRhOiBFbnVtTWV0YWRhdGEgPSBwcmVmaXhPck1ldGFkYXRhW3ZhbHVlXTtcclxuXHRcdFx0LyogUmV0dXJuIHRoZSBkaXNwbGF5IHN0cmluZyBmcm9tIHRoZSBtZXRhZGF0YSBhbG9uZyB3aXRoIHRoZSBzdWZmaXggKi9cclxuXHRcdFx0cmV0dXJuIGAke21ldGFkYXRhLmRpc3BsYXl9JHtzdWZmaXh9YDtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBDaGVjayBpZiBlbnVtVHlwZSBpcyBhbiBvYmplY3QgYW5kIGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgdmFsdWUgKi9cclxuXHRcdGlmIChlbnVtVHlwZSAmJiB0eXBlb2YgZW51bVR5cGUgPT09ICdvYmplY3QnICYmIHZhbHVlIGluIGVudW1UeXBlKSB7XHJcblx0XHRcdC8qIFJldHVybiB0aGUgY29ycmVzcG9uZGluZyBzdHJpbmcgdmFsdWUgZnJvbSB0aGUgZW51bSwgcHJlcGVuZGluZyB0aGUgcHJlZml4IGlmIHByb3ZpZGVkICovXHJcblx0XHRcdHJldHVybiBgJHtwcmVmaXhPck1ldGFkYXRhID8/ICcnfSR7ZW51bVR5cGVbdmFsdWVdfSR7c3VmZml4fWA7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogSWYgdGhlIHZhbHVlIGlzIG5vdCByZWNvZ25pemVkIGluIHRoZSBlbnVtVHlwZSwgcmV0dXJuIHVuZGVmaW5lZCBhcyBhIGZhbGxiYWNrICovXHJcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdH1cclxufSJdfQ==
|
|
@@ -3,111 +3,176 @@ import * as i0 from "@angular/core";
|
|
|
3
3
|
//@dynamic
|
|
4
4
|
export class OrderPipe {
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Checks if a value is a string.
|
|
7
7
|
*
|
|
8
|
-
* @param value
|
|
8
|
+
* @param value - The value to check.
|
|
9
|
+
* @returns True if the value is a string; otherwise, false.
|
|
9
10
|
*/
|
|
10
11
|
static isString(value) {
|
|
11
12
|
return typeof value === 'string' || value instanceof String;
|
|
12
13
|
}
|
|
13
14
|
/**
|
|
14
|
-
* Sorts values
|
|
15
|
+
* Sorts two values in a case-insensitive manner.
|
|
15
16
|
*
|
|
16
|
-
* @param a
|
|
17
|
-
* @param b
|
|
17
|
+
* @param a - The first value to compare.
|
|
18
|
+
* @param b - The second value to compare.
|
|
19
|
+
* @returns A negative number if a < b, a positive number if a > b, and 0 if they are equal.
|
|
18
20
|
*/
|
|
19
21
|
static caseInsensitiveSort(a, b) {
|
|
22
|
+
/* If both values are strings, compare them using localeCompare for case-insensitive sorting. */
|
|
20
23
|
if (OrderPipe.isString(a) && OrderPipe.isString(b)) {
|
|
21
24
|
return a.localeCompare(b);
|
|
22
25
|
}
|
|
26
|
+
/* Otherwise, fall back to the default comparison. */
|
|
23
27
|
return OrderPipe.defaultCompare(a, b);
|
|
24
28
|
}
|
|
25
29
|
/**
|
|
26
|
-
* Default
|
|
30
|
+
* Default comparison method for sorting values.
|
|
27
31
|
*
|
|
28
|
-
* @param a
|
|
29
|
-
* @param b
|
|
32
|
+
* @param a - The first value to compare.
|
|
33
|
+
* @param b - The second value to compare.
|
|
34
|
+
* @returns A negative number if a < b, a positive number if a > b, and 0 if they are equal.
|
|
30
35
|
*/
|
|
31
36
|
static defaultCompare(a, b) {
|
|
37
|
+
/* If both values are equal, return 0. */
|
|
32
38
|
if (a === b) {
|
|
33
39
|
return 0;
|
|
34
40
|
}
|
|
41
|
+
/* If 'a' is null, it is considered greater than 'b'. */
|
|
35
42
|
if (a == null) {
|
|
36
43
|
return 1;
|
|
37
44
|
}
|
|
45
|
+
/* If 'b' is null, it is considered greater than 'a'. */
|
|
38
46
|
if (b == null) {
|
|
39
47
|
return -1;
|
|
40
48
|
}
|
|
49
|
+
/* Compare the two values. */
|
|
41
50
|
return a > b ? 1 : -1;
|
|
42
51
|
}
|
|
43
52
|
/**
|
|
44
|
-
*
|
|
45
|
-
*
|
|
53
|
+
* Parses a dot-separated expression string into an array of strings.
|
|
54
|
+
*
|
|
55
|
+
* @param expression - The expression string to parse.
|
|
56
|
+
* @returns An array of strings representing the parsed expression.
|
|
46
57
|
*/
|
|
47
58
|
static parseExpression(expression) {
|
|
59
|
+
/* Replace bracket notation with dot notation and remove leading dot. */
|
|
48
60
|
expression = expression.replace(/\[(\w+)\]/g, '.$1');
|
|
49
61
|
expression = expression.replace(/^\./, '');
|
|
50
62
|
return expression.split('.');
|
|
51
63
|
}
|
|
52
64
|
/**
|
|
53
|
-
*
|
|
65
|
+
* Retrieves a value from an object based on a parsed expression.
|
|
54
66
|
*
|
|
55
|
-
* @param object
|
|
56
|
-
* @param expression
|
|
67
|
+
* @param object - The object to retrieve the value from.
|
|
68
|
+
* @param expression - The parsed expression as an array of strings.
|
|
69
|
+
* @returns The retrieved value or undefined if not found.
|
|
57
70
|
*/
|
|
58
71
|
static getValue(object, expression) {
|
|
59
72
|
for (let i = 0, n = expression.length; i < n; ++i) {
|
|
60
73
|
const k = expression[i];
|
|
74
|
+
/* If the key does not exist in the object, return undefined. */
|
|
61
75
|
if (!(k in object)) {
|
|
62
76
|
return;
|
|
63
77
|
}
|
|
78
|
+
/* Move to the next level in the object. */
|
|
64
79
|
object = object[k];
|
|
65
80
|
}
|
|
81
|
+
/* Return the final value. */
|
|
66
82
|
return object;
|
|
67
83
|
}
|
|
68
84
|
/**
|
|
69
|
-
*
|
|
85
|
+
* Sets a value in an object based on a parsed expression.
|
|
70
86
|
*
|
|
71
|
-
* @param object
|
|
72
|
-
* @param value
|
|
73
|
-
* @param expression
|
|
87
|
+
* @param object - The object to modify.
|
|
88
|
+
* @param value - The value to set.
|
|
89
|
+
* @param expression - The parsed expression as an array of strings.
|
|
74
90
|
*/
|
|
75
91
|
static setValue(object, value, expression) {
|
|
76
92
|
let i;
|
|
77
93
|
for (i = 0; i < expression.length - 1; i++) {
|
|
94
|
+
/* Traverse the object to the second-to-last property. */
|
|
78
95
|
object = object[expression[i]];
|
|
79
96
|
}
|
|
97
|
+
/* Set the value at the last property. */
|
|
80
98
|
object[expression[i]] = value;
|
|
81
99
|
}
|
|
82
|
-
|
|
100
|
+
/**
|
|
101
|
+
* Transforms the input value by sorting it based on the provided expression and metadata.
|
|
102
|
+
*
|
|
103
|
+
* @param value - The value to transform, which can be an array or a single object.
|
|
104
|
+
* @param expression - The expression to sort by, can be a string or an array of strings.
|
|
105
|
+
* @param metadata - An optional metadata object for sorting.
|
|
106
|
+
* @param reverse - Indicates if the sorting should be in reverse order.
|
|
107
|
+
* @param isCaseInsensitive - Indicates if the sorting should be case insensitive.
|
|
108
|
+
* @param comparator - An optional custom comparator function.
|
|
109
|
+
* @returns The transformed (sorted) value.
|
|
110
|
+
*/
|
|
111
|
+
transform(value, expression, metadata, reverse, isCaseInsensitive = false, comparator) {
|
|
112
|
+
/* If the value is null or undefined, return it as is. */
|
|
83
113
|
if (!value) {
|
|
84
114
|
return value;
|
|
85
115
|
}
|
|
116
|
+
/* Check if we should sort by metadata. */
|
|
117
|
+
if (metadata) {
|
|
118
|
+
return this.sortByMetadata(value, expression, reverse ?? false, metadata);
|
|
119
|
+
}
|
|
120
|
+
/* If expression is an array, handle multiple expressions. */
|
|
86
121
|
if (Array.isArray(expression)) {
|
|
87
122
|
return this.multiExpressionTransform(value, expression, reverse ?? false, isCaseInsensitive, comparator);
|
|
88
123
|
}
|
|
124
|
+
/* If value is an array, sort it using the provided expression. */
|
|
89
125
|
if (Array.isArray(value)) {
|
|
90
126
|
return this.sortArray(value.slice(), expression, reverse, isCaseInsensitive, comparator);
|
|
91
127
|
}
|
|
128
|
+
/* If value is an object, transform it accordingly. */
|
|
92
129
|
if (typeof value === 'object') {
|
|
93
130
|
return this.transformObject(Object.assign({}, value), expression, reverse, isCaseInsensitive, comparator);
|
|
94
131
|
}
|
|
132
|
+
/* If value is not an array or object, return it unchanged. */
|
|
95
133
|
return value;
|
|
96
134
|
}
|
|
97
135
|
/**
|
|
98
|
-
*
|
|
136
|
+
* Sorts an array based on metadata for enum values.
|
|
137
|
+
*
|
|
138
|
+
* @param value - The array to sort.
|
|
139
|
+
* @param expression - The expression to sort by.
|
|
140
|
+
* @param reverse - Indicates if the sorting should be in reverse order.
|
|
141
|
+
* @param metadata - The metadata for enum sorting.
|
|
142
|
+
* @returns The sorted array.
|
|
143
|
+
*/
|
|
144
|
+
sortByMetadata(value, expression, reverse, metadata) {
|
|
145
|
+
/* Comparison function for sorting by metadata order. */
|
|
146
|
+
const compareFn = (a, b) => {
|
|
147
|
+
const valueA = expression ? OrderPipe.getValue(a, OrderPipe.parseExpression(expression)) : a;
|
|
148
|
+
const valueB = expression ? OrderPipe.getValue(b, OrderPipe.parseExpression(expression)) : b;
|
|
149
|
+
/* Retrieve the order values from metadata, defaulting to Infinity if not found. */
|
|
150
|
+
const orderA = metadata[valueA]?.order ?? Infinity;
|
|
151
|
+
const orderB = metadata[valueB]?.order ?? Infinity;
|
|
152
|
+
return orderA - orderB;
|
|
153
|
+
};
|
|
154
|
+
/* Sort the array and handle reverse order. */
|
|
155
|
+
const sortedArray = value.slice().sort(compareFn);
|
|
156
|
+
return reverse ? sortedArray.reverse() : sortedArray;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Sorts an array based on the given expression.
|
|
99
160
|
*
|
|
100
|
-
* @param value
|
|
101
|
-
* @param expression
|
|
102
|
-
* @param reverse
|
|
103
|
-
* @param isCaseInsensitive
|
|
104
|
-
* @param comparator
|
|
161
|
+
* @param value - The array to sort.
|
|
162
|
+
* @param expression - The expression to sort by.
|
|
163
|
+
* @param reverse - Indicates if the sorting should be in reverse order.
|
|
164
|
+
* @param isCaseInsensitive - Indicates if the sorting should be case insensitive.
|
|
165
|
+
* @param comparator - An optional custom comparator function.
|
|
166
|
+
* @returns The sorted array.
|
|
105
167
|
*/
|
|
106
168
|
sortArray(value, expression, reverse, isCaseInsensitive, comparator) {
|
|
169
|
+
/* Determine if the expression is a deep link. */
|
|
107
170
|
const isDeepLink = expression && expression.indexOf('.') !== -1;
|
|
171
|
+
/* Parse the expression if it's a deep link. */
|
|
108
172
|
if (isDeepLink) {
|
|
109
173
|
expression = OrderPipe.parseExpression(expression);
|
|
110
174
|
}
|
|
175
|
+
/* Determine the comparison function. */
|
|
111
176
|
let compareFn;
|
|
112
177
|
if (comparator && typeof comparator === 'function') {
|
|
113
178
|
compareFn = comparator;
|
|
@@ -115,60 +180,81 @@ export class OrderPipe {
|
|
|
115
180
|
else {
|
|
116
181
|
compareFn = isCaseInsensitive ? OrderPipe.caseInsensitiveSort : OrderPipe.defaultCompare;
|
|
117
182
|
}
|
|
183
|
+
/* Sort the array using the determined comparison function. */
|
|
118
184
|
let array = value.sort((a, b) => {
|
|
119
185
|
if (!expression) {
|
|
120
186
|
return compareFn(a, b);
|
|
121
187
|
}
|
|
122
188
|
if (!isDeepLink) {
|
|
189
|
+
/* If not a deep link, compare the specified properties directly. */
|
|
123
190
|
if (a && b) {
|
|
124
191
|
return compareFn(a[expression], b[expression]);
|
|
125
192
|
}
|
|
193
|
+
/* Fall back to direct comparison. */
|
|
126
194
|
return compareFn(a, b);
|
|
127
195
|
}
|
|
196
|
+
/* For deep links, get the values from the parsed expression. */
|
|
128
197
|
return compareFn(OrderPipe.getValue(a, expression), OrderPipe.getValue(b, expression));
|
|
129
198
|
});
|
|
199
|
+
/* Handle reverse sorting if specified. */
|
|
130
200
|
if (reverse) {
|
|
131
201
|
return array.reverse();
|
|
132
202
|
}
|
|
133
203
|
return array;
|
|
134
204
|
}
|
|
135
205
|
/**
|
|
136
|
-
*
|
|
206
|
+
* Transforms an object based on a specified expression.
|
|
137
207
|
*
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
* @param
|
|
142
|
-
* @param
|
|
208
|
+
* This method retrieves a value from the given object according to the parsed expression,
|
|
209
|
+
* applies the transformation to that value, and then sets the transformed value back into the object.
|
|
210
|
+
*
|
|
211
|
+
* @param value The object to transform.
|
|
212
|
+
* @param expression The expression used to identify the property to transform.
|
|
213
|
+
* @param reverse Optional. Indicates whether the transformation should be applied in reverse order.
|
|
214
|
+
* @param isCaseInsensitive Optional. Indicates whether the transformation should ignore case.
|
|
215
|
+
* @param comparator Optional. A custom comparator function to be used for sorting.
|
|
216
|
+
* @returns The transformed object with the updated value.
|
|
143
217
|
*/
|
|
144
218
|
transformObject(value, expression, reverse, isCaseInsensitive, comparator) {
|
|
219
|
+
/* Parse the expression into an array of keys */
|
|
145
220
|
let parsedExpression = OrderPipe.parseExpression(expression);
|
|
221
|
+
/* Retrieve the last predicate from the parsed expression for further processing */
|
|
146
222
|
let lastPredicate = parsedExpression.pop();
|
|
223
|
+
/* Get the current value from the object using the parsed expression */
|
|
147
224
|
let oldValue = OrderPipe.getValue(value, parsedExpression);
|
|
225
|
+
/* If there's a last predicate and the old value is not an array,
|
|
226
|
+
push the predicate back into the parsed expression for future use */
|
|
148
227
|
if (lastPredicate && !Array.isArray(oldValue)) {
|
|
149
228
|
parsedExpression.push(lastPredicate);
|
|
150
229
|
lastPredicate = undefined;
|
|
151
230
|
oldValue = OrderPipe.getValue(value, parsedExpression);
|
|
152
231
|
}
|
|
232
|
+
/* If no old value is found, return the original object */
|
|
153
233
|
if (!oldValue) {
|
|
154
234
|
return value;
|
|
155
235
|
}
|
|
156
|
-
|
|
157
|
-
|
|
236
|
+
/* Set the transformed value back into the original object */
|
|
237
|
+
OrderPipe.setValue(value, this.transform(oldValue, lastPredicate, undefined, reverse, isCaseInsensitive), parsedExpression);
|
|
238
|
+
return value; /* Return the updated object */
|
|
158
239
|
}
|
|
159
240
|
/**
|
|
160
|
-
*
|
|
241
|
+
* Applies multiple expressions in sequence to transform a value.
|
|
242
|
+
*
|
|
243
|
+
* This method iterates over an array of expressions, applying each one in reverse order
|
|
244
|
+
* to the given value. The result of each transformation is passed as input to the next expression.
|
|
161
245
|
*
|
|
162
|
-
* @param value
|
|
163
|
-
* @param expressions
|
|
164
|
-
* @param reverse
|
|
165
|
-
* @param isCaseInsensitive
|
|
166
|
-
* @param comparator
|
|
246
|
+
* @param value The initial value to transform.
|
|
247
|
+
* @param expressions An array of expressions to apply in reverse order.
|
|
248
|
+
* @param reverse Optional. Indicates whether the transformations should be applied in reverse order.
|
|
249
|
+
* @param isCaseInsensitive Optional. Indicates whether the transformations should ignore case.
|
|
250
|
+
* @param comparator Optional. A custom comparator function to be used for sorting.
|
|
251
|
+
* @returns The final transformed value after applying all expressions.
|
|
167
252
|
*/
|
|
168
253
|
multiExpressionTransform(value, expressions, reverse, isCaseInsensitive = false, comparator) {
|
|
254
|
+
/* Apply each expression in reverse order, passing the result to the next transformation */
|
|
169
255
|
return expressions.reverse().reduce((result, expression) => {
|
|
170
|
-
return this.transform(result, expression, reverse, isCaseInsensitive, comparator);
|
|
171
|
-
}, value);
|
|
256
|
+
return this.transform(result, expression, undefined, reverse, isCaseInsensitive, comparator);
|
|
257
|
+
}, value); /* Return the final transformed value */
|
|
172
258
|
}
|
|
173
259
|
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: OrderPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
174
260
|
/** @nocollapse */ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: OrderPipe, name: "orderBy", pure: false });
|
|
@@ -180,4 +266,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
180
266
|
pure: false
|
|
181
267
|
}]
|
|
182
268
|
}] });
|
|
183
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXIucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9zcmMvbGliL2NvbW1vbi9waXBlcy9vcmRlci5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQUVwRCxVQUFVO0FBS1YsTUFBTSxPQUFPLFNBQVM7SUFFckI7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBVTtRQUN6QixPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLFlBQVksTUFBTSxDQUFDO0lBQzdELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFNLEVBQUUsQ0FBTTtRQUN4QyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3BELE9BQU8sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLENBQU0sRUFBRSxDQUFNO1FBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLENBQUM7UUFDVixDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsQ0FBQztRQUNWLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDO1FBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsZUFBZSxDQUFDLFVBQWtCO1FBQ3hDLFVBQVUsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRCxVQUFVLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDM0MsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBVyxFQUFFLFVBQW9CO1FBQ2hELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNuRCxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3BCLE9BQU87WUFDUixDQUFDO1lBQ0QsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFXLEVBQUUsS0FBVSxFQUFFLFVBQW9CO1FBQzVELElBQUksQ0FBQyxDQUFDO1FBQ04sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzVDLE1BQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFrQixFQUFFLFVBQWdCLEVBQUUsT0FBaUIsRUFBRSxvQkFBNkIsS0FBSyxFQUFFLFVBQXFCO1FBQzNILElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNaLE9BQU8sS0FBSyxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQy9CLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxJQUFJLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMxRyxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzFGLENBQUM7UUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9CLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzNHLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNLLFNBQVMsQ0FBQyxLQUFZLEVBQUUsVUFBZ0IsRUFBRSxPQUFpQixFQUFFLGlCQUEyQixFQUFFLFVBQXFCO1FBQ3RILE1BQU0sVUFBVSxHQUFHLFVBQVUsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRWhFLElBQUksVUFBVSxFQUFFLENBQUM7WUFDaEIsVUFBVSxHQUFHLFNBQVMsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUVELElBQUksU0FBbUIsQ0FBQztRQUV4QixJQUFJLFVBQVUsSUFBSSxPQUFPLFVBQVUsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNwRCxTQUFTLEdBQUcsVUFBVSxDQUFDO1FBQ3hCLENBQUM7YUFBTSxDQUFDO1lBQ1AsU0FBUyxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUM7UUFDMUYsQ0FBQztRQUVELElBQUksS0FBSyxHQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFVLEVBQUU7WUFDeEQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNqQixPQUFPLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDeEIsQ0FBQztZQUVELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ1osT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUNoRCxDQUFDO2dCQUNELE9BQU8sU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN4QixDQUFDO1lBRUQsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN4RixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksT0FBTyxFQUFFLENBQUM7WUFDYixPQUFPLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4QixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSyxlQUFlLENBQUMsS0FBa0IsRUFBRSxVQUFnQixFQUFFLE9BQWlCLEVBQUUsaUJBQTJCLEVBQUUsVUFBcUI7UUFFbEksSUFBSSxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzdELElBQUksYUFBYSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzNDLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFM0QsSUFBSSxhQUFhLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDL0MsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3JDLGFBQWEsR0FBRyxTQUFTLENBQUM7WUFDMUIsUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNmLE9BQU8sS0FBSyxDQUFDO1FBQ2QsQ0FBQztRQUVELFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2pILE9BQU8sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ssd0JBQXdCLENBQUMsS0FBVSxFQUFFLFdBQWtCLEVBQUUsT0FBZ0IsRUFBRSxvQkFBNkIsS0FBSyxFQUFFLFVBQXFCO1FBQzNJLE9BQU8sV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQVcsRUFBRSxVQUFlLEVBQUUsRUFBRTtZQUNwRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDbkYsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ1gsQ0FBQzswSEFuTVcsU0FBUzt3SEFBVCxTQUFTOzsyRkFBVCxTQUFTO2tCQUpyQixJQUFJO21CQUFDO29CQUNMLElBQUksRUFBRSxTQUFTO29CQUNmLElBQUksRUFBRSxLQUFLO2lCQUNYIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLy9AZHluYW1pY1xyXG5AUGlwZSh7XHJcblx0bmFtZTogJ29yZGVyQnknLFxyXG5cdHB1cmU6IGZhbHNlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBPcmRlclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBhIHN0cmluZ1xyXG5cdCAqXHJcblx0ICogQHBhcmFtIHZhbHVlXHJcblx0ICovXHJcblx0c3RhdGljIGlzU3RyaW5nKHZhbHVlOiBhbnkpIHtcclxuXHRcdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU29ydHMgdmFsdWVzIGlnbm9yaW5nIHRoZSBjYXNlXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gYVxyXG5cdCAqIEBwYXJhbSBiXHJcblx0ICovXHJcblx0c3RhdGljIGNhc2VJbnNlbnNpdGl2ZVNvcnQoYTogYW55LCBiOiBhbnkpIHtcclxuXHRcdGlmIChPcmRlclBpcGUuaXNTdHJpbmcoYSkgJiYgT3JkZXJQaXBlLmlzU3RyaW5nKGIpKSB7XHJcblx0XHRcdHJldHVybiBhLmxvY2FsZUNvbXBhcmUoYik7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gT3JkZXJQaXBlLmRlZmF1bHRDb21wYXJlKGEsIGIpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRGVmYXVsdCBjb21wYXJlIG1ldGhvZFxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBhIFxyXG5cdCAqIEBwYXJhbSBiIFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBkZWZhdWx0Q29tcGFyZShhOiBhbnksIGI6IGFueSkge1xyXG5cdFx0aWYgKGEgPT09IGIpIHtcclxuXHRcdFx0cmV0dXJuIDA7XHJcblx0XHR9XHJcblx0XHRpZiAoYSA9PSBudWxsKSB7XHJcblx0XHRcdHJldHVybiAxO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGIgPT0gbnVsbCkge1xyXG5cdFx0XHRyZXR1cm4gLTE7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gYSA+IGIgPyAxIDogLTE7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQYXJzZSBleHByZXNzaW9uLCBzcGxpdCBpbnRvIGl0ZW1zXHJcblx0ICogQHBhcmFtIGV4cHJlc3Npb25cclxuXHQgKi9cclxuXHRzdGF0aWMgcGFyc2VFeHByZXNzaW9uKGV4cHJlc3Npb246IHN0cmluZyk6IHN0cmluZ1tdIHtcclxuXHRcdGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnJlcGxhY2UoL1xcWyhcXHcrKVxcXS9nLCAnLiQxJyk7XHJcblx0XHRleHByZXNzaW9uID0gZXhwcmVzc2lvbi5yZXBsYWNlKC9eXFwuLywgJycpO1xyXG5cdFx0cmV0dXJuIGV4cHJlc3Npb24uc3BsaXQoJy4nKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCB2YWx1ZSBieSBleHByZXNzaW9uXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gb2JqZWN0XHJcblx0ICogQHBhcmFtIGV4cHJlc3Npb25cclxuXHQgKi9cclxuXHRzdGF0aWMgZ2V0VmFsdWUob2JqZWN0OiBhbnksIGV4cHJlc3Npb246IHN0cmluZ1tdKSB7XHJcblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGV4cHJlc3Npb24ubGVuZ3RoOyBpIDwgbjsgKytpKSB7XHJcblx0XHRcdGNvbnN0IGsgPSBleHByZXNzaW9uW2ldO1xyXG5cdFx0XHRpZiAoIShrIGluIG9iamVjdCkpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0b2JqZWN0ID0gb2JqZWN0W2tdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBvYmplY3Q7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTZXQgdmFsdWUgYnkgZXhwcmVzc2lvblxyXG5cdCAqXHJcblx0ICogQHBhcmFtIG9iamVjdFxyXG5cdCAqIEBwYXJhbSB2YWx1ZVxyXG5cdCAqIEBwYXJhbSBleHByZXNzaW9uXHJcblx0ICovXHJcblx0c3RhdGljIHNldFZhbHVlKG9iamVjdDogYW55LCB2YWx1ZTogYW55LCBleHByZXNzaW9uOiBzdHJpbmdbXSkge1xyXG5cdFx0bGV0IGk7XHJcblx0XHRmb3IgKGkgPSAwOyBpIDwgZXhwcmVzc2lvbi5sZW5ndGggLSAxOyBpKyspIHtcclxuXHRcdFx0b2JqZWN0ID0gb2JqZWN0W2V4cHJlc3Npb25baV1dO1xyXG5cdFx0fVxyXG5cclxuXHRcdG9iamVjdFtleHByZXNzaW9uW2ldXSA9IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0dHJhbnNmb3JtKHZhbHVlOiBhbnkgfCBhbnlbXSwgZXhwcmVzc2lvbj86IGFueSwgcmV2ZXJzZT86IGJvb2xlYW4sIGlzQ2FzZUluc2Vuc2l0aXZlOiBib29sZWFuID0gZmFsc2UsIGNvbXBhcmF0b3I/OiBGdW5jdGlvbik6IGFueSB7XHJcblx0XHRpZiAoIXZhbHVlKSB7XHJcblx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoQXJyYXkuaXNBcnJheShleHByZXNzaW9uKSkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5tdWx0aUV4cHJlc3Npb25UcmFuc2Zvcm0odmFsdWUsIGV4cHJlc3Npb24sIHJldmVyc2UgPz8gZmFsc2UsIGlzQ2FzZUluc2Vuc2l0aXZlLCBjb21wYXJhdG9yKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuc29ydEFycmF5KHZhbHVlLnNsaWNlKCksIGV4cHJlc3Npb24sIHJldmVyc2UsIGlzQ2FzZUluc2Vuc2l0aXZlLCBjb21wYXJhdG9yKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy50cmFuc2Zvcm1PYmplY3QoT2JqZWN0LmFzc2lnbih7fSwgdmFsdWUpLCBleHByZXNzaW9uLCByZXZlcnNlLCBpc0Nhc2VJbnNlbnNpdGl2ZSwgY29tcGFyYXRvcik7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHZhbHVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU29ydCBhcnJheVxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHZhbHVlXHJcblx0ICogQHBhcmFtIGV4cHJlc3Npb25cclxuXHQgKiBAcGFyYW0gcmV2ZXJzZVxyXG5cdCAqIEBwYXJhbSBpc0Nhc2VJbnNlbnNpdGl2ZVxyXG5cdCAqIEBwYXJhbSBjb21wYXJhdG9yXHJcblx0ICovXHJcblx0cHJpdmF0ZSBzb3J0QXJyYXkodmFsdWU6IGFueVtdLCBleHByZXNzaW9uPzogYW55LCByZXZlcnNlPzogYm9vbGVhbiwgaXNDYXNlSW5zZW5zaXRpdmU/OiBib29sZWFuLCBjb21wYXJhdG9yPzogRnVuY3Rpb24pOiBhbnlbXSB7XHJcblx0XHRjb25zdCBpc0RlZXBMaW5rID0gZXhwcmVzc2lvbiAmJiBleHByZXNzaW9uLmluZGV4T2YoJy4nKSAhPT0gLTE7XHJcblxyXG5cdFx0aWYgKGlzRGVlcExpbmspIHtcclxuXHRcdFx0ZXhwcmVzc2lvbiA9IE9yZGVyUGlwZS5wYXJzZUV4cHJlc3Npb24oZXhwcmVzc2lvbik7XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IGNvbXBhcmVGbjogRnVuY3Rpb247XHJcblxyXG5cdFx0aWYgKGNvbXBhcmF0b3IgJiYgdHlwZW9mIGNvbXBhcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcclxuXHRcdFx0Y29tcGFyZUZuID0gY29tcGFyYXRvcjtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbXBhcmVGbiA9IGlzQ2FzZUluc2Vuc2l0aXZlID8gT3JkZXJQaXBlLmNhc2VJbnNlbnNpdGl2ZVNvcnQgOiBPcmRlclBpcGUuZGVmYXVsdENvbXBhcmU7XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IGFycmF5OiBhbnlbXSA9IHZhbHVlLnNvcnQoKGE6IGFueSwgYjogYW55KTogbnVtYmVyID0+IHtcclxuXHRcdFx0aWYgKCFleHByZXNzaW9uKSB7XHJcblx0XHRcdFx0cmV0dXJuIGNvbXBhcmVGbihhLCBiKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCFpc0RlZXBMaW5rKSB7XHJcblx0XHRcdFx0aWYgKGEgJiYgYikge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGNvbXBhcmVGbihhW2V4cHJlc3Npb25dLCBiW2V4cHJlc3Npb25dKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIGNvbXBhcmVGbihhLCBiKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIGNvbXBhcmVGbihPcmRlclBpcGUuZ2V0VmFsdWUoYSwgZXhwcmVzc2lvbiksIE9yZGVyUGlwZS5nZXRWYWx1ZShiLCBleHByZXNzaW9uKSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHRpZiAocmV2ZXJzZSkge1xyXG5cdFx0XHRyZXR1cm4gYXJyYXkucmV2ZXJzZSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBhcnJheTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRyYW5zZm9ybSBPYmplY3RcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB2YWx1ZVxyXG5cdCAqIEBwYXJhbSBleHByZXNzaW9uXHJcblx0ICogQHBhcmFtIHJldmVyc2VcclxuXHQgKiBAcGFyYW0gaXNDYXNlSW5zZW5zaXRpdmVcclxuXHQgKiBAcGFyYW0gY29tcGFyYXRvclxyXG5cdCAqL1xyXG5cdHByaXZhdGUgdHJhbnNmb3JtT2JqZWN0KHZhbHVlOiBhbnkgfCBhbnlbXSwgZXhwcmVzc2lvbj86IGFueSwgcmV2ZXJzZT86IGJvb2xlYW4sIGlzQ2FzZUluc2Vuc2l0aXZlPzogYm9vbGVhbiwgY29tcGFyYXRvcj86IEZ1bmN0aW9uKTogYW55IHtcclxuXHJcblx0XHRsZXQgcGFyc2VkRXhwcmVzc2lvbiA9IE9yZGVyUGlwZS5wYXJzZUV4cHJlc3Npb24oZXhwcmVzc2lvbik7XHJcblx0XHRsZXQgbGFzdFByZWRpY2F0ZSA9IHBhcnNlZEV4cHJlc3Npb24ucG9wKCk7XHJcblx0XHRsZXQgb2xkVmFsdWUgPSBPcmRlclBpcGUuZ2V0VmFsdWUodmFsdWUsIHBhcnNlZEV4cHJlc3Npb24pO1xyXG5cclxuXHRcdGlmIChsYXN0UHJlZGljYXRlICYmICFBcnJheS5pc0FycmF5KG9sZFZhbHVlKSkge1xyXG5cdFx0XHRwYXJzZWRFeHByZXNzaW9uLnB1c2gobGFzdFByZWRpY2F0ZSk7XHJcblx0XHRcdGxhc3RQcmVkaWNhdGUgPSB1bmRlZmluZWQ7XHJcblx0XHRcdG9sZFZhbHVlID0gT3JkZXJQaXBlLmdldFZhbHVlKHZhbHVlLCBwYXJzZWRFeHByZXNzaW9uKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIW9sZFZhbHVlKSB7XHJcblx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRPcmRlclBpcGUuc2V0VmFsdWUodmFsdWUsIHRoaXMudHJhbnNmb3JtKG9sZFZhbHVlLCBsYXN0UHJlZGljYXRlLCByZXZlcnNlLCBpc0Nhc2VJbnNlbnNpdGl2ZSksIHBhcnNlZEV4cHJlc3Npb24pO1xyXG5cdFx0cmV0dXJuIHZhbHVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQXBwbHkgbXVsdGlwbGUgZXhwcmVzc2lvbnNcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB2YWx1ZVxyXG5cdCAqIEBwYXJhbSBleHByZXNzaW9uc1xyXG5cdCAqIEBwYXJhbSByZXZlcnNlXHJcblx0ICogQHBhcmFtIGlzQ2FzZUluc2Vuc2l0aXZlXHJcblx0ICogQHBhcmFtIGNvbXBhcmF0b3JcclxuXHQgKi9cclxuXHRwcml2YXRlIG11bHRpRXhwcmVzc2lvblRyYW5zZm9ybSh2YWx1ZTogYW55LCBleHByZXNzaW9uczogYW55W10sIHJldmVyc2U6IGJvb2xlYW4sIGlzQ2FzZUluc2Vuc2l0aXZlOiBib29sZWFuID0gZmFsc2UsIGNvbXBhcmF0b3I/OiBGdW5jdGlvbik6IGFueSB7XHJcblx0XHRyZXR1cm4gZXhwcmVzc2lvbnMucmV2ZXJzZSgpLnJlZHVjZSgocmVzdWx0OiBhbnksIGV4cHJlc3Npb246IGFueSkgPT4ge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy50cmFuc2Zvcm0ocmVzdWx0LCBleHByZXNzaW9uLCByZXZlcnNlLCBpc0Nhc2VJbnNlbnNpdGl2ZSwgY29tcGFyYXRvcik7XHJcblx0XHR9LCB2YWx1ZSk7XHJcblx0fVxyXG59Il19
|
|
269
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXIucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9zcmMvbGliL2NvbW1vbi9waXBlcy9vcmRlci5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQUdwRCxVQUFVO0FBS1YsTUFBTSxPQUFPLFNBQVM7SUFFckI7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQVU7UUFDekIsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxZQUFZLE1BQU0sQ0FBQztJQUM3RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQU0sRUFBRSxDQUFNO1FBQ3hDLGdHQUFnRztRQUNoRyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3BELE9BQU8sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBQ0QscURBQXFEO1FBQ3JELE9BQU8sU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBTSxFQUFFLENBQU07UUFDbkMseUNBQXlDO1FBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLENBQUM7UUFDVixDQUFDO1FBQ0Qsd0RBQXdEO1FBQ3hELElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLENBQUM7UUFDVixDQUFDO1FBQ0Qsd0RBQXdEO1FBQ3hELElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2YsT0FB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Q2YsT0FBTyxLQUFLLENBQUM7UUFDZCxDQUFDO1FBRUQsNkRBQTZEO1FBQzdELFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUM1SCxPQUFPLEtBQUssQ0FBQyxDQUFDLCtCQUErQjtJQUM5QyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0ssd0JBQXdCLENBQUMsS0FBVSxFQUFFLFdBQWtCLEVBQUUsT0FBZ0IsRUFBRSxvQkFBNkIsS0FBSyxFQUFFLFVBQXFCO1FBQzNJLDJGQUEyRjtRQUMzRixPQUFPLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFXLEVBQUUsVUFBZSxFQUFFLEVBQUU7WUFDcEUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM5RixDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyx3Q0FBd0M7SUFDcEQsQ0FBQzswSEE3UlcsU0FBUzt3SEFBVCxTQUFTOzsyRkFBVCxTQUFTO2tCQUpyQixJQUFJO21CQUFDO29CQUNMLElBQUksRUFBRSxTQUFTO29CQUNmLElBQUksRUFBRSxLQUFLO2lCQUNYIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBFbnVtTWV0YWRhdGEgfSBmcm9tICcuLi9tb2RlbHMvZW51bS1tZXRhZGF0YSc7XHJcblxyXG4vL0BkeW5hbWljXHJcbkBQaXBlKHtcclxuXHRuYW1lOiAnb3JkZXJCeScsXHJcblx0cHVyZTogZmFsc2VcclxufSlcclxuZXhwb3J0IGNsYXNzIE9yZGVyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG5cclxuXHQvKipcclxuXHQgKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyBhIHN0cmluZy5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjaGVjay5cclxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHN0cmluZzsgb3RoZXJ3aXNlLCBmYWxzZS5cclxuXHQgKi9cclxuXHRzdGF0aWMgaXNTdHJpbmcodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmc7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTb3J0cyB0d28gdmFsdWVzIGluIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYW5uZXIuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gYSAtIFRoZSBmaXJzdCB2YWx1ZSB0byBjb21wYXJlLlxyXG5cdCAqIEBwYXJhbSBiIC0gVGhlIHNlY29uZCB2YWx1ZSB0byBjb21wYXJlLlxyXG5cdCAqIEByZXR1cm5zIEEgbmVnYXRpdmUgbnVtYmVyIGlmIGEgPCBiLCBhIHBvc2l0aXZlIG51bWJlciBpZiBhID4gYiwgYW5kIDAgaWYgdGhleSBhcmUgZXF1YWwuXHJcblx0ICovXHJcblx0c3RhdGljIGNhc2VJbnNlbnNpdGl2ZVNvcnQoYTogYW55LCBiOiBhbnkpOiBudW1iZXIge1xyXG5cdFx0LyogSWYgYm90aCB2YWx1ZXMgYXJlIHN0cmluZ3MsIGNvbXBhcmUgdGhlbSB1c2luZyBsb2NhbGVDb21wYXJlIGZvciBjYXNlLWluc2Vuc2l0aXZlIHNvcnRpbmcuICovXHJcblx0XHRpZiAoT3JkZXJQaXBlLmlzU3RyaW5nKGEpICYmIE9yZGVyUGlwZS5pc1N0cmluZyhiKSkge1xyXG5cdFx0XHRyZXR1cm4gYS5sb2NhbGVDb21wYXJlKGIpO1xyXG5cdFx0fVxyXG5cdFx0LyogT3RoZXJ3aXNlLCBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgY29tcGFyaXNvbi4gKi9cclxuXHRcdHJldHVybiBPcmRlclBpcGUuZGVmYXVsdENvbXBhcmUoYSwgYik7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEZWZhdWx0IGNvbXBhcmlzb24gbWV0aG9kIGZvciBzb3J0aW5nIHZhbHVlcy5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBhIC0gVGhlIGZpcnN0IHZhbHVlIHRvIGNvbXBhcmUuXHJcblx0ICogQHBhcmFtIGIgLSBUaGUgc2Vjb25kIHZhbHVlIHRvIGNvbXBhcmUuXHJcblx0ICogQHJldHVybnMgQSBuZWdhdGl2ZSBudW1iZXIgaWYgYSA8IGIsIGEgcG9zaXRpdmUgbnVtYmVyIGlmIGEgPiBiLCBhbmQgMCBpZiB0aGV5IGFyZSBlcXVhbC5cclxuXHQgKi9cclxuXHRzdGF0aWMgZGVmYXVsdENvbXBhcmUoYTogYW55LCBiOiBhbnkpOiBudW1iZXIge1xyXG5cdFx0LyogSWYgYm90aCB2YWx1ZXMgYXJlIGVxdWFsLCByZXR1cm4gMC4gKi9cclxuXHRcdGlmIChhID09PSBiKSB7XHJcblx0XHRcdHJldHVybiAwO1xyXG5cdFx0fVxyXG5cdFx0LyogSWYgJ2EnIGlzIG51bGwsIGl0IGlzIGNvbnNpZGVyZWQgZ3JlYXRlciB0aGFuICdiJy4gKi9cclxuXHRcdGlmIChhID09IG51bGwpIHtcclxuXHRcdFx0cmV0dXJuIDE7XHJcblx0XHR9XHJcblx0XHQvKiBJZiAnYicgaXMgbnVsbCwgaXQgaXMgY29uc2lkZXJlZCBncmVhdGVyIHRoYW4gJ2EnLiAqL1xyXG5cdFx0aWYgKGIgPT0gbnVsbCkge1xyXG5cdFx0XHRyZXR1cm4gLTE7XHJcblx0XHR9XHJcblx0XHQvKiBDb21wYXJlIHRoZSB0d28gdmFsdWVzLiAqL1xyXG5cdFx0cmV0dXJuIGEgPiBiID8gMSA6IC0xO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUGFyc2VzIGEgZG90LXNlcGFyYXRlZCBleHByZXNzaW9uIHN0cmluZyBpbnRvIGFuIGFycmF5IG9mIHN0cmluZ3MuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gZXhwcmVzc2lvbiAtIFRoZSBleHByZXNzaW9uIHN0cmluZyB0byBwYXJzZS5cclxuXHQgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzIHJlcHJlc2VudGluZyB0aGUgcGFyc2VkIGV4cHJlc3Npb24uXHJcblx0ICovXHJcblx0c3RhdGljIHBhcnNlRXhwcmVzc2lvbihleHByZXNzaW9uOiBzdHJpbmcpOiBzdHJpbmdbXSB7XHJcblx0XHQvKiBSZXBsYWNlIGJyYWNrZXQgbm90YXRpb24gd2l0aCBkb3Qgbm90YXRpb24gYW5kIHJlbW92ZSBsZWFkaW5nIGRvdC4gKi9cclxuXHRcdGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnJlcGxhY2UoL1xcWyhcXHcrKVxcXS9nLCAnLiQxJyk7XHJcblx0XHRleHByZXNzaW9uID0gZXhwcmVzc2lvbi5yZXBsYWNlKC9eXFwuLywgJycpO1xyXG5cdFx0cmV0dXJuIGV4cHJlc3Npb24uc3BsaXQoJy4nKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJldHJpZXZlcyBhIHZhbHVlIGZyb20gYW4gb2JqZWN0IGJhc2VkIG9uIGEgcGFyc2VkIGV4cHJlc3Npb24uXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gb2JqZWN0IC0gVGhlIG9iamVjdCB0byByZXRyaWV2ZSB0aGUgdmFsdWUgZnJvbS5cclxuXHQgKiBAcGFyYW0gZXhwcmVzc2lvbiAtIFRoZSBwYXJzZWQgZXhwcmVzc2lvbiBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxyXG5cdCAqIEByZXR1cm5zIFRoZSByZXRyaWV2ZWQgdmFsdWUgb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZC5cclxuXHQgKi9cclxuXHRzdGF0aWMgZ2V0VmFsdWUob2JqZWN0OiBhbnksIGV4cHJlc3Npb246IHN0cmluZ1tdKTogYW55IHtcclxuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gZXhwcmVzc2lvbi5sZW5ndGg7IGkgPCBuOyArK2kpIHtcclxuXHRcdFx0Y29uc3QgayA9IGV4cHJlc3Npb25baV07XHJcblx0XHRcdC8qIElmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG9iamVjdCwgcmV0dXJuIHVuZGVmaW5lZC4gKi9cclxuXHRcdFx0aWYgKCEoayBpbiBvYmplY3QpKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8qIE1vdmUgdG8gdGhlIG5leHQgbGV2ZWwgaW4gdGhlIG9iamVjdC4gKi9cclxuXHRcdFx0b2JqZWN0ID0gb2JqZWN0W2tdO1xyXG5cdFx0fVxyXG5cdFx0LyogUmV0dXJuIHRoZSBmaW5hbCB2YWx1ZS4gKi9cclxuXHRcdHJldHVybiBvYmplY3Q7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTZXRzIGEgdmFsdWUgaW4gYW4gb2JqZWN0IGJhc2VkIG9uIGEgcGFyc2VkIGV4cHJlc3Npb24uXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gb2JqZWN0IC0gVGhlIG9iamVjdCB0byBtb2RpZnkuXHJcblx0ICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHNldC5cclxuXHQgKiBAcGFyYW0gZXhwcmVzc2lvbiAtIFRoZSBwYXJzZWQgZXhwcmVzc2lvbiBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLlxyXG5cdCAqL1xyXG5cdHN0YXRpYyBzZXRWYWx1ZShvYmplY3Q6IGFueSwgdmFsdWU6IGFueSwgZXhwcmVzc2lvbjogc3RyaW5nW10pOiB2b2lkIHtcclxuXHRcdGxldCBpO1xyXG5cdFx0Zm9yIChpID0gMDsgaSA8IGV4cHJlc3Npb24ubGVuZ3RoIC0gMTsgaSsrKSB7XHJcblx0XHRcdC8qIFRyYXZlcnNlIHRoZSBvYmplY3QgdG8gdGhlIHNlY29uZC10by1sYXN0IHByb3BlcnR5LiAqL1xyXG5cdFx0XHRvYmplY3QgPSBvYmplY3RbZXhwcmVzc2lvbltpXV07XHJcblx0XHR9XHJcblx0XHQvKiBTZXQgdGhlIHZhbHVlIGF0IHRoZSBsYXN0IHByb3BlcnR5LiAqL1xyXG5cdFx0b2JqZWN0W2V4cHJlc3Npb25baV1dID0gdmFsdWU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUcmFuc2Zvcm1zIHRoZSBpbnB1dCB2YWx1ZSBieSBzb3J0aW5nIGl0IGJhc2VkIG9uIHRoZSBwcm92aWRlZCBleHByZXNzaW9uIGFuZCBtZXRhZGF0YS5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB0cmFuc2Zvcm0sIHdoaWNoIGNhbiBiZSBhbiBhcnJheSBvciBhIHNpbmdsZSBvYmplY3QuXHJcblx0ICogQHBhcmFtIGV4cHJlc3Npb24gLSBUaGUgZXhwcmVzc2lvbiB0byBzb3J0IGJ5LCBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cclxuXHQgKiBAcGFyYW0gbWV0YWRhdGEgLSBBbiBvcHRpb25hbCBtZXRhZGF0YSBvYmplY3QgZm9yIHNvcnRpbmcuXHJcblx0ICogQHBhcmFtIHJldmVyc2UgLSBJbmRpY2F0ZXMgaWYgdGhlIHNvcnRpbmcgc2hvdWxkIGJlIGluIHJldmVyc2Ugb3JkZXIuXHJcblx0ICogQHBhcmFtIGlzQ2FzZUluc2Vuc2l0aXZlIC0gSW5kaWNhdGVzIGlmIHRoZSBzb3J0aW5nIHNob3VsZCBiZSBjYXNlIGluc2Vuc2l0aXZlLlxyXG5cdCAqIEBwYXJhbSBjb21wYXJhdG9yIC0gQW4gb3B0aW9uYWwgY3VzdG9tIGNvbXBhcmF0b3IgZnVuY3Rpb24uXHJcblx0ICogQHJldHVybnMgVGhlIHRyYW5zZm9ybWVkIChzb3J0ZWQpIHZhbHVlLlxyXG5cdCAqL1xyXG5cdHRyYW5zZm9ybSh2YWx1ZTogYW55IHwgYW55W10sIGV4cHJlc3Npb24/OiBhbnksIG1ldGFkYXRhPzogeyBba2V5OiBudW1iZXJdOiBFbnVtTWV0YWRhdGEgfSwgcmV2ZXJzZT86IGJvb2xlYW4sIGlzQ2FzZUluc2Vuc2l0aXZlOiBib29sZWFuID0gZmFsc2UsIGNvbXBhcmF0b3I/OiBGdW5jdGlvbik6IGFueSB7XHJcblx0XHQvKiBJZiB0aGUgdmFsdWUgaXMgbnVsbCBvciB1bmRlZmluZWQsIHJldHVybiBpdCBhcyBpcy4gKi9cclxuXHRcdGlmICghdmFsdWUpIHtcclxuXHRcdFx0cmV0dXJuIHZhbHVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIENoZWNrIGlmIHdlIHNob3VsZCBzb3J0IGJ5IG1ldGFkYXRhLiAqL1xyXG5cdFx0aWYgKG1ldGFkYXRhKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLnNvcnRCeU1ldGFkYXRhKHZhbHVlLCBleHByZXNzaW9uLCByZXZlcnNlID8/IGZhbHNlLCBtZXRhZGF0YSk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogSWYgZXhwcmVzc2lvbiBpcyBhbiBhcnJheSwgaGFuZGxlIG11bHRpcGxlIGV4cHJlc3Npb25zLiAqL1xyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoZXhwcmVzc2lvbikpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMubXVsdGlFeHByZXNzaW9uVHJhbnNmb3JtKHZhbHVlLCBleHByZXNzaW9uLCByZXZlcnNlID8/IGZhbHNlLCBpc0Nhc2VJbnNlbnNpdGl2ZSwgY29tcGFyYXRvcik7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogSWYgdmFsdWUgaXMgYW4gYXJyYXksIHNvcnQgaXQgdXNpbmcgdGhlIHByb3ZpZGVkIGV4cHJlc3Npb24uICovXHJcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuc29ydEFycmF5KHZhbHVlLnNsaWNlKCksIGV4cHJlc3Npb24sIHJldmVyc2UsIGlzQ2FzZUluc2Vuc2l0aXZlLCBjb21wYXJhdG9yKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBJZiB2YWx1ZSBpcyBhbiBvYmplY3QsIHRyYW5zZm9ybSBpdCBhY2NvcmRpbmdseS4gKi9cclxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLnRyYW5zZm9ybU9iamVjdChPYmplY3QuYXNzaWduKHt9LCB2YWx1ZSksIGV4cHJlc3Npb24sIHJldmVyc2UsIGlzQ2FzZUluc2Vuc2l0aXZlLCBjb21wYXJhdG9yKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBJZiB2YWx1ZSBpcyBub3QgYW4gYXJyYXkgb3Igb2JqZWN0LCByZXR1cm4gaXQgdW5jaGFuZ2VkLiAqL1xyXG5cdFx0cmV0dXJuIHZhbHVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU29ydHMgYW4gYXJyYXkgYmFzZWQgb24gbWV0YWRhdGEgZm9yIGVudW0gdmFsdWVzLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHZhbHVlIC0gVGhlIGFycmF5IHRvIHNvcnQuXHJcblx0ICogQHBhcmFtIGV4cHJlc3Npb24gLSBUaGUgZXhwcmVzc2lvbiB0byBzb3J0IGJ5LlxyXG5cdCAqIEBwYXJhbSByZXZlcnNlIC0gSW5kaWNhdGVzIGlmIHRoZSBzb3J0aW5nIHNob3VsZCBiZSBpbiByZXZlcnNlIG9yZGVyLlxyXG5cdCAqIEBwYXJhbSBtZXRhZGF0YSAtIFRoZSBtZXRhZGF0YSBmb3IgZW51bSBzb3J0aW5nLlxyXG5cdCAqIEByZXR1cm5zIFRoZSBzb3J0ZWQgYXJyYXkuXHJcblx0ICovXHJcblx0cHJpdmF0ZSBzb3J0QnlNZXRhZGF0YSh2YWx1ZTogYW55W10sIGV4cHJlc3Npb246IHN0cmluZyB8IHVuZGVmaW5lZCwgcmV2ZXJzZTogYm9vbGVhbiwgbWV0YWRhdGE6IHsgW2tleTogbnVtYmVyXTogRW51bU1ldGFkYXRhIH0pOiBhbnlbXSB7XHJcblx0XHQvKiBDb21wYXJpc29uIGZ1bmN0aW9uIGZvciBzb3J0aW5nIGJ5IG1ldGFkYXRhIG9yZGVyLiAqL1xyXG5cdFx0Y29uc3QgY29tcGFyZUZuID0gKGE6IGFueSwgYjogYW55KTogbnVtYmVyID0+IHtcclxuXHRcdFx0Y29uc3QgdmFsdWVBID0gZXhwcmVzc2lvbiA/IE9yZGVyUGlwZS5nZXRWYWx1ZShhLCBPcmRlclBpcGUucGFyc2VFeHByZXNzaW9uKGV4cHJlc3Npb24pKSA6IGE7XHJcblx0XHRcdGNvbnN0IHZhbHVlQiA9IGV4cHJlc3Npb24gPyBPcmRlclBpcGUuZ2V0VmFsdWUoYiwgT3JkZXJQaXBlLnBhcnNlRXhwcmVzc2lvbihleHByZXNzaW9uKSkgOiBiO1xyXG5cclxuXHRcdFx0LyogUmV0cmlldmUgdGhlIG9yZGVyIHZhbHVlcyBmcm9tIG1ldGFkYXRhLCBkZWZhdWx0aW5nIHRvIEluZmluaXR5IGlmIG5vdCBmb3VuZC4gKi9cclxuXHRcdFx0Y29uc3Qgb3JkZXJBID0gbWV0YWRhdGFbdmFsdWVBXT8ub3JkZXIgPz8gSW5maW5pdHk7XHJcblx0XHRcdGNvbnN0IG9yZGVyQiA9IG1ldGFkYXRhW3ZhbHVlQl0/Lm9yZGVyID8/IEluZmluaXR5O1xyXG5cclxuXHRcdFx0cmV0dXJuIG9yZGVyQSAtIG9yZGVyQjtcclxuXHRcdH07XHJcblxyXG5cdFx0LyogU29ydCB0aGUgYXJyYXkgYW5kIGhhbmRsZSByZXZlcnNlIG9yZGVyLiAqL1xyXG5cdFx0Y29uc3Qgc29ydGVkQXJyYXkgPSB2YWx1ZS5zbGljZSgpLnNvcnQoY29tcGFyZUZuKTtcclxuXHRcdHJldHVybiByZXZlcnNlID8gc29ydGVkQXJyYXkucmV2ZXJzZSgpIDogc29ydGVkQXJyYXk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTb3J0cyBhbiBhcnJheSBiYXNlZCBvbiB0aGUgZ2l2ZW4gZXhwcmVzc2lvbi5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBhcnJheSB0byBzb3J0LlxyXG5cdCAqIEBwYXJhbSBleHByZXNzaW9uIC0gVGhlIGV4cHJlc3Npb24gdG8gc29ydCBieS5cclxuXHQgKiBAcGFyYW0gcmV2ZXJzZSAtIEluZGljYXRlcyBpZiB0aGUgc29ydGluZyBzaG91bGQgYmUgaW4gcmV2ZXJzZSBvcmRlci5cclxuXHQgKiBAcGFyYW0gaXNDYXNlSW5zZW5zaXRpdmUgLSBJbmRpY2F0ZXMgaWYgdGhlIHNvcnRpbmcgc2hvdWxkIGJlIGNhc2UgaW5zZW5zaXRpdmUuXHJcblx0ICogQHBhcmFtIGNvbXBhcmF0b3IgLSBBbiBvcHRpb25hbCBjdXN0b20gY29tcGFyYXRvciBmdW5jdGlvbi5cclxuXHQgKiBAcmV0dXJucyBUaGUgc29ydGVkIGFycmF5LlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgc29ydEFycmF5KHZhbHVlOiBhbnlbXSwgZXhwcmVzc2lvbj86IGFueSwgcmV2ZXJzZT86IGJvb2xlYW4sIGlzQ2FzZUluc2Vuc2l0aXZlPzogYm9vbGVhbiwgY29tcGFyYXRvcj86IEZ1bmN0aW9uKTogYW55W10ge1xyXG5cdFx0LyogRGV0ZXJtaW5lIGlmIHRoZSBleHByZXNzaW9uIGlzIGEgZGVlcCBsaW5rLiAqL1xyXG5cdFx0Y29uc3QgaXNEZWVwTGluayA9IGV4cHJlc3Npb24gJiYgZXhwcmVzc2lvbi5pbmRleE9mKCcuJykgIT09IC0xO1xyXG5cclxuXHRcdC8qIFBhcnNlIHRoZSBleHByZXNzaW9uIGlmIGl0J3MgYSBkZWVwIGxpbmsuICovXHJcblx0XHRpZiAoaXNEZWVwTGluaykge1xyXG5cdFx0XHRleHByZXNzaW9uID0gT3JkZXJQaXBlLnBhcnNlRXhwcmVzc2lvbihleHByZXNzaW9uKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBEZXRlcm1pbmUgdGhlIGNvbXBhcmlzb24gZnVuY3Rpb24uICovXHJcblx0XHRsZXQgY29tcGFyZUZuOiBGdW5jdGlvbjtcclxuXHJcblx0XHRpZiAoY29tcGFyYXRvciAmJiB0eXBlb2YgY29tcGFyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHRjb21wYXJlRm4gPSBjb21wYXJhdG9yO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29tcGFyZUZuID0gaXNDYXNlSW5zZW5zaXRpdmUgPyBPcmRlclBpcGUuY2FzZUluc2Vuc2l0aXZlU29ydCA6IE9yZGVyUGlwZS5kZWZhdWx0Q29tcGFyZTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBTb3J0IHRoZSBhcnJheSB1c2luZyB0aGUgZGV0ZXJtaW5lZCBjb21wYXJpc29uIGZ1bmN0aW9uLiAqL1xyXG5cdFx0bGV0IGFycmF5OiBhbnlbXSA9IHZhbHVlLnNvcnQoKGE6IGFueSwgYjogYW55KTogbnVtYmVyID0+IHtcclxuXHRcdFx0aWYgKCFleHByZXNzaW9uKSB7XHJcblx0XHRcdFx0cmV0dXJuIGNvbXBhcmVGbihhLCBiKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCFpc0RlZXBMaW5rKSB7XHJcblx0XHRcdFx0LyogSWYgbm90IGEgZGVlcCBsaW5rLCBjb21wYXJlIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcyBkaXJlY3RseS4gKi9cclxuXHRcdFx0XHRpZiAoYSAmJiBiKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gY29tcGFyZUZuKGFbZXhwcmVzc2lvbl0sIGJbZXhwcmVzc2lvbl0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvKiBGYWxsIGJhY2sgdG8gZGlyZWN0IGNvbXBhcmlzb24uICovXHJcblx0XHRcdFx0cmV0dXJuIGNvbXBhcmVGbihhLCBiKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogRm9yIGRlZXAgbGlua3MsIGdldCB0aGUgdmFsdWVzIGZyb20gdGhlIHBhcnNlZCBleHByZXNzaW9uLiAqL1xyXG5cdFx0XHRyZXR1cm4gY29tcGFyZUZuKE9yZGVyUGlwZS5nZXRWYWx1ZShhLCBleHByZXNzaW9uKSwgT3JkZXJQaXBlLmdldFZhbHVlKGIsIGV4cHJlc3Npb24pKTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8qIEhhbmRsZSByZXZlcnNlIHNvcnRpbmcgaWYgc3BlY2lmaWVkLiAqL1xyXG5cdFx0aWYgKHJldmVyc2UpIHtcclxuXHRcdFx0cmV0dXJuIGFycmF5LnJldmVyc2UoKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gYXJyYXk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUcmFuc2Zvcm1zIGFuIG9iamVjdCBiYXNlZCBvbiBhIHNwZWNpZmllZCBleHByZXNzaW9uLlxyXG5cdCAqXHJcblx0ICogVGhpcyBtZXRob2QgcmV0cmlldmVzIGEgdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gb2JqZWN0IGFjY29yZGluZyB0byB0aGUgcGFyc2VkIGV4cHJlc3Npb24sXHJcblx0ICogYXBwbGllcyB0aGUgdHJhbnNmb3JtYXRpb24gdG8gdGhhdCB2YWx1ZSwgYW5kIHRoZW4gc2V0cyB0aGUgdHJhbnNmb3JtZWQgdmFsdWUgYmFjayBpbnRvIHRoZSBvYmplY3QuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIG9iamVjdCB0byB0cmFuc2Zvcm0uXHJcblx0ICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGV4cHJlc3Npb24gdXNlZCB0byBpZGVudGlmeSB0aGUgcHJvcGVydHkgdG8gdHJhbnNmb3JtLlxyXG5cdCAqIEBwYXJhbSByZXZlcnNlIE9wdGlvbmFsLiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdHJhbnNmb3JtYXRpb24gc2hvdWxkIGJlIGFwcGxpZWQgaW4gcmV2ZXJzZSBvcmRlci5cclxuXHQgKiBAcGFyYW0gaXNDYXNlSW5zZW5zaXRpdmUgT3B0aW9uYWwuIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0cmFuc2Zvcm1hdGlvbiBzaG91bGQgaWdub3JlIGNhc2UuXHJcblx0ICogQHBhcmFtIGNvbXBhcmF0b3IgT3B0aW9uYWwuIEEgY3VzdG9tIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8gYmUgdXNlZCBmb3Igc29ydGluZy5cclxuXHQgKiBAcmV0dXJucyBUaGUgdHJhbnNmb3JtZWQgb2JqZWN0IHdpdGggdGhlIHVwZGF0ZWQgdmFsdWUuXHJcblx0ICovXHJcblx0cHJpdmF0ZSB0cmFuc2Zvcm1PYmplY3QodmFsdWU6IGFueSB8IGFueVtdLCBleHByZXNzaW9uPzogYW55LCByZXZlcnNlPzogYm9vbGVhbiwgaXNDYXNlSW5zZW5zaXRpdmU/OiBib29sZWFuLCBjb21wYXJhdG9yPzogRnVuY3Rpb24pOiBhbnkge1xyXG5cdFx0LyogUGFyc2UgdGhlIGV4cHJlc3Npb24gaW50byBhbiBhcnJheSBvZiBrZXlzICovXHJcblx0XHRsZXQgcGFyc2VkRXhwcmVzc2lvbiA9IE9yZGVyUGlwZS5wYXJzZUV4cHJlc3Npb24oZXhwcmVzc2lvbik7XHJcblxyXG5cdFx0LyogUmV0cmlldmUgdGhlIGxhc3QgcHJlZGljYXRlIGZyb20gdGhlIHBhcnNlZCBleHByZXNzaW9uIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcgKi9cclxuXHRcdGxldCBsYXN0UHJlZGljYXRlID0gcGFyc2VkRXhwcmVzc2lvbi5wb3AoKTtcclxuXHJcblx0XHQvKiBHZXQgdGhlIGN1cnJlbnQgdmFsdWUgZnJvbSB0aGUgb2JqZWN0IHVzaW5nIHRoZSBwYXJzZWQgZXhwcmVzc2lvbiAqL1xyXG5cdFx0bGV0IG9sZFZhbHVlID0gT3JkZXJQaXBlLmdldFZhbHVlKHZhbHVlLCBwYXJzZWRFeHByZXNzaW9uKTtcclxuXHJcblx0XHQvKiBJZiB0aGVyZSdzIGEgbGFzdCBwcmVkaWNhdGUgYW5kIHRoZSBvbGQgdmFsdWUgaXMgbm90IGFuIGFycmF5LCBcclxuXHRcdCAgIHB1c2ggdGhlIHByZWRpY2F0ZSBiYWNrIGludG8gdGhlIHBhcnNlZCBleHByZXNzaW9uIGZvciBmdXR1cmUgdXNlICovXHJcblx0XHRpZiAobGFzdFByZWRpY2F0ZSAmJiAhQXJyYXkuaXNBcnJheShvbGRWYWx1ZSkpIHtcclxuXHRcdFx0cGFyc2VkRXhwcmVzc2lvbi5wdXNoKGxhc3RQcmVkaWNhdGUpO1xyXG5cdFx0XHRsYXN0UHJlZGljYXRlID0gdW5kZWZpbmVkO1xyXG5cdFx0XHRvbGRWYWx1ZSA9IE9yZGVyUGlwZS5nZXRWYWx1ZSh2YWx1ZSwgcGFyc2VkRXhwcmVzc2lvbik7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogSWYgbm8gb2xkIHZhbHVlIGlzIGZvdW5kLCByZXR1cm4gdGhlIG9yaWdpbmFsIG9iamVjdCAqL1xyXG5cdFx0aWYgKCFvbGRWYWx1ZSkge1xyXG5cdFx0XHRyZXR1cm4gdmFsdWU7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogU2V0IHRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSBiYWNrIGludG8gdGhlIG9yaWdpbmFsIG9iamVjdCAqL1xyXG5cdFx0T3JkZXJQaXBlLnNldFZhbHVlKHZhbHVlLCB0aGlzLnRyYW5zZm9ybShvbGRWYWx1ZSwgbGFzdFByZWRpY2F0ZSwgdW5kZWZpbmVkLCByZXZlcnNlLCBpc0Nhc2VJbnNlbnNpdGl2ZSksIHBhcnNlZEV4cHJlc3Npb24pO1xyXG5cdFx0cmV0dXJuIHZhbHVlOyAvKiBSZXR1cm4gdGhlIHVwZGF0ZWQgb2JqZWN0ICovXHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBcHBsaWVzIG11bHRpcGxlIGV4cHJlc3Npb25zIGluIHNlcXVlbmNlIHRvIHRyYW5zZm9ybSBhIHZhbHVlLlxyXG5cdCAqXHJcblx0ICogVGhpcyBtZXRob2QgaXRlcmF0ZXMgb3ZlciBhbiBhcnJheSBvZiBleHByZXNzaW9ucywgYXBwbHlpbmcgZWFjaCBvbmUgaW4gcmV2ZXJzZSBvcmRlclxyXG5cdCAqIHRvIHRoZSBnaXZlbiB2YWx1ZS4gVGhlIHJlc3VsdCBvZiBlYWNoIHRyYW5zZm9ybWF0aW9uIGlzIHBhc3NlZCBhcyBpbnB1dCB0byB0aGUgbmV4dCBleHByZXNzaW9uLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHZhbHVlIFRoZSBpbml0aWFsIHZhbHVlIHRvIHRyYW5zZm9ybS5cclxuXHQgKiBAcGFyYW0gZXhwcmVzc2lvbnMgQW4gYXJyYXkgb2YgZXhwcmVzc2lvbnMgdG8gYXBwbHkgaW4gcmV2ZXJzZSBvcmRlci5cclxuXHQgKiBAcGFyYW0gcmV2ZXJzZSBPcHRpb25hbC4gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRyYW5zZm9ybWF0aW9ucyBzaG91bGQgYmUgYXBwbGllZCBpbiByZXZlcnNlIG9yZGVyLlxyXG5cdCAqIEBwYXJhbSBpc0Nhc2VJbnNlbnNpdGl2ZSBPcHRpb25hbC4gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRyYW5zZm9ybWF0aW9ucyBzaG91bGQgaWdub3JlIGNhc2UuXHJcblx0ICogQHBhcmFtIGNvbXBhcmF0b3IgT3B0aW9uYWwuIEEgY3VzdG9tIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8gYmUgdXNlZCBmb3Igc29ydGluZy5cclxuXHQgKiBAcmV0dXJucyBUaGUgZmluYWwgdHJhbnNmb3JtZWQgdmFsdWUgYWZ0ZXIgYXBwbHlpbmcgYWxsIGV4cHJlc3Npb25zLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgbXVsdGlFeHByZXNzaW9uVHJhbnNmb3JtKHZhbHVlOiBhbnksIGV4cHJlc3Npb25zOiBhbnlbXSwgcmV2ZXJzZTogYm9vbGVhbiwgaXNDYXNlSW5zZW5zaXRpdmU6IGJvb2xlYW4gPSBmYWxzZSwgY29tcGFyYXRvcj86IEZ1bmN0aW9uKTogYW55IHtcclxuXHRcdC8qIEFwcGx5IGVhY2ggZXhwcmVzc2lvbiBpbiByZXZlcnNlIG9yZGVyLCBwYXNzaW5nIHRoZSByZXN1bHQgdG8gdGhlIG5leHQgdHJhbnNmb3JtYXRpb24gKi9cclxuXHRcdHJldHVybiBleHByZXNzaW9ucy5yZXZlcnNlKCkucmVkdWNlKChyZXN1bHQ6IGFueSwgZXhwcmVzc2lvbjogYW55KSA9PiB7XHJcblx0XHRcdHJldHVybiB0aGlzLnRyYW5zZm9ybShyZXN1bHQsIGV4cHJlc3Npb24sIHVuZGVmaW5lZCwgcmV2ZXJzZSwgaXNDYXNlSW5zZW5zaXRpdmUsIGNvbXBhcmF0b3IpO1xyXG5cdFx0fSwgdmFsdWUpOyAvKiBSZXR1cm4gdGhlIGZpbmFsIHRyYW5zZm9ybWVkIHZhbHVlICovXHJcblx0fVxyXG59XHJcbiJdfQ==
|