@jsii/kernel 1.51.0 → 1.54.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api.d.ts +1 -4
- package/lib/api.js +1 -1
- package/lib/kernel.js +2 -2
- package/lib/objects.d.ts +2 -2
- package/lib/objects.js +48 -4
- package/lib/serialization.js +3 -3
- package/package.json +10 -10
- package/test/objects.test.d.ts +1 -0
- package/test/objects.test.js +20 -0
package/lib/api.d.ts
CHANGED
|
@@ -6,8 +6,6 @@ export declare const TOKEN_MAP = "$jsii.map";
|
|
|
6
6
|
export declare const TOKEN_STRUCT = "$jsii.struct";
|
|
7
7
|
export interface ObjRef {
|
|
8
8
|
readonly [TOKEN_REF]: string;
|
|
9
|
-
}
|
|
10
|
-
export interface AnnotatedObjRef extends ObjRef {
|
|
11
9
|
[TOKEN_INTERFACES]?: readonly string[];
|
|
12
10
|
}
|
|
13
11
|
export declare function isObjRef(value: any): value is ObjRef;
|
|
@@ -99,8 +97,7 @@ export interface CreateRequest {
|
|
|
99
97
|
*/
|
|
100
98
|
readonly overrides?: Override[];
|
|
101
99
|
}
|
|
102
|
-
export
|
|
103
|
-
}
|
|
100
|
+
export declare type CreateResponse = ObjRef;
|
|
104
101
|
export interface DelRequest {
|
|
105
102
|
readonly objref: ObjRef;
|
|
106
103
|
}
|
package/lib/api.js
CHANGED
|
@@ -35,4 +35,4 @@ function isPropertyOverride(value) {
|
|
|
35
35
|
return value.property != null; // Python passes "null"
|
|
36
36
|
}
|
|
37
37
|
exports.isPropertyOverride = isPropertyOverride;
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEsU0FBUyxHQUFHLGFBQWEsQ0FBQztBQUMxQixRQUFBLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDO0FBQ3RDLFFBQUEsVUFBVSxHQUFHLFlBQVksQ0FBQztBQUMxQixRQUFBLFVBQVUsR0FBRyxZQUFZLENBQUM7QUFDMUIsUUFBQSxTQUFTLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsWUFBWSxHQUFHLGNBQWMsQ0FBQztBQVUzQyxTQUFnQixRQUFRLENBQUMsS0FBVTtJQUNqQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLGlCQUFTLElBQUksS0FBSyxDQUFDO0FBQzNFLENBQUM7QUFGRCw0QkFFQztBQU1ELFNBQWdCLFVBQVUsQ0FBQyxLQUFVO0lBQ25DLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksa0JBQVUsSUFBSSxLQUFLLENBQUM7QUFDNUUsQ0FBQztBQUZELGdDQUVDO0FBTUQsU0FBZ0IsVUFBVSxDQUFDLEtBQVU7SUFDbkMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxrQkFBVSxJQUFJLEtBQUssQ0FBQztBQUM1RSxDQUFDO0FBRkQsZ0NBRUM7QUFNRCxTQUFnQixTQUFTLENBQUMsS0FBVTtJQUNsQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLGlCQUFTLElBQUksS0FBSyxDQUFDO0FBQzNFLENBQUM7QUFGRCw4QkFFQztBQVNELFNBQWdCLFlBQVksQ0FBQyxLQUFVO0lBQ3JDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksb0JBQVksSUFBSSxLQUFLLENBQUM7QUFDOUUsQ0FBQztBQUZELG9DQUVDO0FBU0QsU0FBZ0IsZ0JBQWdCLENBQUMsS0FBZTtJQUM5QyxPQUFRLEtBQWEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsdUJBQXVCO0FBQy9ELENBQUM7QUFGRCw0Q0FFQztBQU9ELFNBQWdCLGtCQUFrQixDQUFDLEtBQWU7SUFDaEQsT0FBUSxLQUFhLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLHVCQUF1QjtBQUNqRSxDQUFDO0FBRkQsZ0RBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgVE9LRU5fUkVGID0gJyRqc2lpLmJ5cmVmJztcbmV4cG9ydCBjb25zdCBUT0tFTl9JTlRFUkZBQ0VTID0gJyRqc2lpLmludGVyZmFjZXMnO1xuZXhwb3J0IGNvbnN0IFRPS0VOX0RBVEUgPSAnJGpzaWkuZGF0ZSc7XG5leHBvcnQgY29uc3QgVE9LRU5fRU5VTSA9ICckanNpaS5lbnVtJztcbmV4cG9ydCBjb25zdCBUT0tFTl9NQVAgPSAnJGpzaWkubWFwJztcbmV4cG9ydCBjb25zdCBUT0tFTl9TVFJVQ1QgPSAnJGpzaWkuc3RydWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBPYmpSZWYge1xuICByZWFkb25seSBbVE9LRU5fUkVGXTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFubm90YXRlZE9ialJlZiBleHRlbmRzIE9ialJlZiB7XG4gIFtUT0tFTl9JTlRFUkZBQ0VTXT86IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNPYmpSZWYodmFsdWU6IGFueSk6IHZhbHVlIGlzIE9ialJlZiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIFRPS0VOX1JFRiBpbiB2YWx1ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaXJlRGF0ZSB7XG4gIHJlYWRvbmx5IFtUT0tFTl9EQVRFXTogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNXaXJlRGF0ZSh2YWx1ZTogYW55KTogdmFsdWUgaXMgV2lyZURhdGUge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiBUT0tFTl9EQVRFIGluIHZhbHVlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpcmVFbnVtIHtcbiAgcmVhZG9ubHkgW1RPS0VOX0VOVU1dOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dpcmVFbnVtKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBXaXJlRW51bSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIFRPS0VOX0VOVU0gaW4gdmFsdWU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2lyZU1hcCB7XG4gIHJlYWRvbmx5IFtUT0tFTl9NQVBdOiB7IHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IGFueSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNXaXJlTWFwKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBXaXJlTWFwIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgVE9LRU5fTUFQIGluIHZhbHVlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpcmVTdHJ1Y3Qge1xuICByZWFkb25seSBbVE9LRU5fU1RSVUNUXToge1xuICAgIHJlYWRvbmx5IGZxbjogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGRhdGE6IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dpcmVTdHJ1Y3QodmFsdWU6IGFueSk6IHZhbHVlIGlzIFdpcmVTdHJ1Y3Qge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiBUT0tFTl9TVFJVQ1QgaW4gdmFsdWU7XG59XG5cbmV4cG9ydCB0eXBlIE92ZXJyaWRlID0gTWV0aG9kT3ZlcnJpZGUgfCBQcm9wZXJ0eU92ZXJyaWRlO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1ldGhvZE92ZXJyaWRlIHtcbiAgcmVhZG9ubHkgbWV0aG9kOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvb2tpZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWV0aG9kT3ZlcnJpZGUodmFsdWU6IE92ZXJyaWRlKTogdmFsdWUgaXMgTWV0aG9kT3ZlcnJpZGUge1xuICByZXR1cm4gKHZhbHVlIGFzIGFueSkubWV0aG9kICE9IG51bGw7IC8vIFB5dGhvbiBwYXNzZXMgXCJudWxsXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9wZXJ0eU92ZXJyaWRlIHtcbiAgcmVhZG9ubHkgcHJvcGVydHk6IHN0cmluZztcbiAgcmVhZG9ubHkgY29va2llPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9wZXJ0eU92ZXJyaWRlKHZhbHVlOiBPdmVycmlkZSk6IHZhbHVlIGlzIFByb3BlcnR5T3ZlcnJpZGUge1xuICByZXR1cm4gKHZhbHVlIGFzIGFueSkucHJvcGVydHkgIT0gbnVsbDsgLy8gUHl0aG9uIHBhc3NlcyBcIm51bGxcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbGxiYWNrIHtcbiAgcmVhZG9ubHkgY2JpZDogc3RyaW5nO1xuICByZWFkb25seSBjb29raWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgaW52b2tlPzogSW52b2tlUmVxdWVzdDtcbiAgcmVhZG9ubHkgZ2V0PzogR2V0UmVxdWVzdDtcbiAgcmVhZG9ubHkgc2V0PzogU2V0UmVxdWVzdDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIZWxsb1Jlc3BvbnNlIHtcbiAgcmVhZG9ubHkgaGVsbG86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2FkUmVxdWVzdCB7XG4gIC8qKiBUaGUgbmFtZSBvZiB0aGUgYXNzZW1ibHkgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKiBBc3NlbWJseSB2ZXJzaW9uICovXG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcblxuICAvKiogVGhlIHRhcmJhbGwgb2YgdGhlIHBhY2thZ2UgKi9cbiAgcmVhZG9ubHkgdGFyYmFsbDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvYWRSZXNwb25zZSB7XG4gIHJlYWRvbmx5IGFzc2VtYmx5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHR5cGVzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW52b2tlU2NyaXB0UmVxdWVzdCB7XG4gIHJlYWRvbmx5IGFzc2VtYmx5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNjcmlwdDogc3RyaW5nO1xuICByZWFkb25seSBhcmdzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW52b2tlU2NyaXB0UmVzcG9uc2Uge1xuICByZWFkb25seSBzdGF0dXM6IG51bWJlciB8IG51bGw7XG4gIHJlYWRvbmx5IHN0ZG91dDogc3RyaW5nO1xuICByZWFkb25seSBzdGRlcnI6IHN0cmluZztcbiAgcmVhZG9ubHkgc2lnbmFsOiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVJlcXVlc3Qge1xuICAvKipcbiAgICogVGhlIEZRTiBvZiB0aGUgY2xhc3Mgb2Ygd2hpY2ggYW4gaW5zdGFuY2UgaXMgcmVxdWVzdGVkIChvciBcIk9iamVjdFwiKVxuICAgKi9cbiAgcmVhZG9ubHkgZnFuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBGUU5zIG9mIGludGVyZmFjZXMgdGhlIGluc3RhbmNlIGltcGxlbWVudHMsIGlmIGFueS4gRGVjbGFyaW5nXG4gICAqIGludGVyZmFjZXMgdGhhdCB0aGUgY2xhc3MgZGVub3RlZCBieSBgZnFuYCBpbXBsZW1lbnRzIGlzIG5vdCBuZWNlc3NhcnkuXG4gICAqIFRoaXMgbWVhbnMgdGhhdCBtZW1lYmVycyBvZiBpbnRlcmZhY2VzIGZvdW5kIGluIHRoaXMgcHJvcGVydHkgc2hvdWxkXG4gICAqIGRlY2xhcmUgbWVtYmVycyB0aGF0IGFyZSBmb3VuZCBpbiB0aGUgYG92ZXJyaWRlc2AgcHJvcGVydHkuXG4gICAqL1xuICByZWFkb25seSBpbnRlcmZhY2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBjb25zdHJ1Y3RvciBvZiBgZnFuYC4gKFwiT2JqZWN0XCIgYWNjZXB0cyBub25lKVxuICAgKi9cbiAgcmVhZG9ubHkgYXJncz86IGFueVtdO1xuXG4gIC8qKlxuICAgKiBEZWNsYXJhdGlvbnMgb2YgbWV0aG9kIG92ZXJyaWRlcyB0aGF0IHNob3VsZCB0cmlnZ2VyIGNhbGxiYWNrc1xuICAgKi9cbiAgcmVhZG9ubHkgb3ZlcnJpZGVzPzogT3ZlcnJpZGVbXTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1pbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlUmVzcG9uc2UgZXh0ZW5kcyBBbm5vdGF0ZWRPYmpSZWYge31cblxuZXhwb3J0IGludGVyZmFjZSBEZWxSZXF1ZXN0IHtcbiAgcmVhZG9ubHkgb2JqcmVmOiBPYmpSZWY7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIERlbFJlc3BvbnNlIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0UmVxdWVzdCB7XG4gIHJlYWRvbmx5IG9ianJlZjogT2JqUmVmO1xuICByZWFkb25seSBwcm9wZXJ0eTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRpY0dldFJlcXVlc3Qge1xuICByZWFkb25seSBmcW46IHN0cmluZztcbiAgcmVhZG9ubHkgcHJvcGVydHk6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRSZXNwb25zZSB7XG4gIHJlYWRvbmx5IHZhbHVlOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdGljU2V0UmVxdWVzdCB7XG4gIHJlYWRvbmx5IGZxbjogc3RyaW5nO1xuICByZWFkb25seSBwcm9wZXJ0eTogc3RyaW5nO1xuICByZWFkb25seSB2YWx1ZTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNldFJlcXVlc3Qge1xuICByZWFkb25seSBvYmpyZWY6IE9ialJlZjtcbiAgcmVhZG9ubHkgcHJvcGVydHk6IHN0cmluZztcbiAgcmVhZG9ubHkgdmFsdWU6IGFueTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1pbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgU2V0UmVzcG9uc2Uge31cblxuZXhwb3J0IGludGVyZmFjZSBTdGF0aWNJbnZva2VSZXF1ZXN0IHtcbiAgcmVhZG9ubHkgZnFuOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1ldGhvZDogc3RyaW5nO1xuICByZWFkb25seSBhcmdzPzogYW55W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW52b2tlUmVxdWVzdCB7XG4gIHJlYWRvbmx5IG9ianJlZjogT2JqUmVmO1xuICByZWFkb25seSBtZXRob2Q6IHN0cmluZztcbiAgcmVhZG9ubHkgYXJncz86IGFueVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludm9rZVJlc3BvbnNlIHtcbiAgcmVhZG9ubHkgcmVzdWx0OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmVnaW5SZXF1ZXN0IHtcbiAgcmVhZG9ubHkgb2JqcmVmOiBPYmpSZWY7XG4gIHJlYWRvbmx5IG1ldGhvZDogc3RyaW5nO1xuICByZWFkb25seSBhcmdzPzogYW55W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmVnaW5SZXNwb25zZSB7XG4gIHJlYWRvbmx5IHByb21pc2VpZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVuZFJlcXVlc3Qge1xuICByZWFkb25seSBwcm9taXNlaWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbmRSZXNwb25zZSB7XG4gIHJlYWRvbmx5IHJlc3VsdDogYW55O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBDYWxsYmFja3NSZXF1ZXN0IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsbGJhY2tzUmVzcG9uc2Uge1xuICByZWFkb25seSBjYWxsYmFja3M6IENhbGxiYWNrW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxldGVSZXF1ZXN0IHtcbiAgcmVhZG9ubHkgY2JpZDogc3RyaW5nO1xuICByZWFkb25seSBlcnI/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc3VsdD86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wbGV0ZVJlc3BvbnNlIHtcbiAgcmVhZG9ubHkgY2JpZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5hbWluZ1JlcXVlc3Qge1xuICByZWFkb25seSBhc3NlbWJseTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5hbWluZ1Jlc3BvbnNlIHtcbiAgcmVhZG9ubHkgbmFtaW5nOiB7XG4gICAgcmVhZG9ubHkgW2xhbmd1YWdlOiBzdHJpbmddOiB7IHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IGFueSB9IHwgdW5kZWZpbmVkO1xuICB9O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBTdGF0c1JlcXVlc3Qge31cblxuZXhwb3J0IGludGVyZmFjZSBTdGF0c1Jlc3BvbnNlIHtcbiAgcmVhZG9ubHkgb2JqZWN0Q291bnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgS2VybmVsUmVxdWVzdCA9XG4gIHwgTG9hZFJlcXVlc3RcbiAgfCBDcmVhdGVSZXF1ZXN0XG4gIHwgRGVsUmVxdWVzdFxuICB8IEdldFJlcXVlc3RcbiAgfCBTZXRSZXF1ZXN0XG4gIHwgSW52b2tlUmVxdWVzdFxuICB8IEJlZ2luUmVxdWVzdFxuICB8IEVuZFJlcXVlc3RcbiAgfCBDYWxsYmFja3NSZXF1ZXN0XG4gIHwgQ29tcGxldGVSZXF1ZXN0XG4gIHwgTmFtaW5nUmVxdWVzdFxuICB8IFN0YXRzUmVxdWVzdDtcblxuZXhwb3J0IHR5cGUgS2VybmVsUmVzcG9uc2UgPVxuICB8IEhlbGxvUmVzcG9uc2VcbiAgfCBMb2FkUmVzcG9uc2VcbiAgfCBDcmVhdGVSZXNwb25zZVxuICB8IERlbFJlc3BvbnNlXG4gIHwgR2V0UmVzcG9uc2VcbiAgfCBTZXRSZXNwb25zZVxuICB8IEludm9rZVJlc3BvbnNlXG4gIHwgQmVnaW5SZXNwb25zZVxuICB8IEVuZFJlc3BvbnNlXG4gIHwgQ2FsbGJhY2tzUmVzcG9uc2VcbiAgfCBDb21wbGV0ZVJlc3BvbnNlXG4gIHwgTmFtaW5nUmVzcG9uc2VcbiAgfCBTdGF0c1Jlc3BvbnNlO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9rYXlSZXNwb25zZSB7XG4gIHJlYWRvbmx5IG9rOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JSZXNwb25zZSB7XG4gIHJlYWRvbmx5IGVycm9yOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YWNrPzogc3RyaW5nO1xufVxuIl19
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEsU0FBUyxHQUFHLGFBQWEsQ0FBQztBQUMxQixRQUFBLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDO0FBQ3RDLFFBQUEsVUFBVSxHQUFHLFlBQVksQ0FBQztBQUMxQixRQUFBLFVBQVUsR0FBRyxZQUFZLENBQUM7QUFDMUIsUUFBQSxTQUFTLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsWUFBWSxHQUFHLGNBQWMsQ0FBQztBQU8zQyxTQUFnQixRQUFRLENBQUMsS0FBVTtJQUNqQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLGlCQUFTLElBQUksS0FBSyxDQUFDO0FBQzNFLENBQUM7QUFGRCw0QkFFQztBQU1ELFNBQWdCLFVBQVUsQ0FBQyxLQUFVO0lBQ25DLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksa0JBQVUsSUFBSSxLQUFLLENBQUM7QUFDNUUsQ0FBQztBQUZELGdDQUVDO0FBTUQsU0FBZ0IsVUFBVSxDQUFDLEtBQVU7SUFDbkMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxrQkFBVSxJQUFJLEtBQUssQ0FBQztBQUM1RSxDQUFDO0FBRkQsZ0NBRUM7QUFNRCxTQUFnQixTQUFTLENBQUMsS0FBVTtJQUNsQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLGlCQUFTLElBQUksS0FBSyxDQUFDO0FBQzNFLENBQUM7QUFGRCw4QkFFQztBQVNELFNBQWdCLFlBQVksQ0FBQyxLQUFVO0lBQ3JDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksb0JBQVksSUFBSSxLQUFLLENBQUM7QUFDOUUsQ0FBQztBQUZELG9DQUVDO0FBU0QsU0FBZ0IsZ0JBQWdCLENBQUMsS0FBZTtJQUM5QyxPQUFRLEtBQWEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsdUJBQXVCO0FBQy9ELENBQUM7QUFGRCw0Q0FFQztBQU9ELFNBQWdCLGtCQUFrQixDQUFDLEtBQWU7SUFDaEQsT0FBUSxLQUFhLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLHVCQUF1QjtBQUNqRSxDQUFDO0FBRkQsZ0RBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgVE9LRU5fUkVGID0gJyRqc2lpLmJ5cmVmJztcbmV4cG9ydCBjb25zdCBUT0tFTl9JTlRFUkZBQ0VTID0gJyRqc2lpLmludGVyZmFjZXMnO1xuZXhwb3J0IGNvbnN0IFRPS0VOX0RBVEUgPSAnJGpzaWkuZGF0ZSc7XG5leHBvcnQgY29uc3QgVE9LRU5fRU5VTSA9ICckanNpaS5lbnVtJztcbmV4cG9ydCBjb25zdCBUT0tFTl9NQVAgPSAnJGpzaWkubWFwJztcbmV4cG9ydCBjb25zdCBUT0tFTl9TVFJVQ1QgPSAnJGpzaWkuc3RydWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBPYmpSZWYge1xuICByZWFkb25seSBbVE9LRU5fUkVGXTogc3RyaW5nO1xuICBbVE9LRU5fSU5URVJGQUNFU10/OiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqUmVmKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBPYmpSZWYge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiBUT0tFTl9SRUYgaW4gdmFsdWU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2lyZURhdGUge1xuICByZWFkb25seSBbVE9LRU5fREFURV06IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2lyZURhdGUodmFsdWU6IGFueSk6IHZhbHVlIGlzIFdpcmVEYXRlIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgVE9LRU5fREFURSBpbiB2YWx1ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaXJlRW51bSB7XG4gIHJlYWRvbmx5IFtUT0tFTl9FTlVNXTogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNXaXJlRW51bSh2YWx1ZTogYW55KTogdmFsdWUgaXMgV2lyZUVudW0ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiBUT0tFTl9FTlVNIGluIHZhbHVlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpcmVNYXAge1xuICByZWFkb25seSBbVE9LRU5fTUFQXTogeyByZWFkb25seSBba2V5OiBzdHJpbmddOiBhbnkgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2lyZU1hcCh2YWx1ZTogYW55KTogdmFsdWUgaXMgV2lyZU1hcCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIFRPS0VOX01BUCBpbiB2YWx1ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXaXJlU3RydWN0IHtcbiAgcmVhZG9ubHkgW1RPS0VOX1NUUlVDVF06IHtcbiAgICByZWFkb25seSBmcW46IHN0cmluZztcbiAgICByZWFkb25seSBkYXRhOiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNXaXJlU3RydWN0KHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBXaXJlU3RydWN0IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgVE9LRU5fU1RSVUNUIGluIHZhbHVlO1xufVxuXG5leHBvcnQgdHlwZSBPdmVycmlkZSA9IE1ldGhvZE92ZXJyaWRlIHwgUHJvcGVydHlPdmVycmlkZTtcblxuZXhwb3J0IGludGVyZmFjZSBNZXRob2RPdmVycmlkZSB7XG4gIHJlYWRvbmx5IG1ldGhvZDogc3RyaW5nO1xuICByZWFkb25seSBjb29raWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01ldGhvZE92ZXJyaWRlKHZhbHVlOiBPdmVycmlkZSk6IHZhbHVlIGlzIE1ldGhvZE92ZXJyaWRlIHtcbiAgcmV0dXJuICh2YWx1ZSBhcyBhbnkpLm1ldGhvZCAhPSBudWxsOyAvLyBQeXRob24gcGFzc2VzIFwibnVsbFwiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvcGVydHlPdmVycmlkZSB7XG4gIHJlYWRvbmx5IHByb3BlcnR5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvb2tpZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvcGVydHlPdmVycmlkZSh2YWx1ZTogT3ZlcnJpZGUpOiB2YWx1ZSBpcyBQcm9wZXJ0eU92ZXJyaWRlIHtcbiAgcmV0dXJuICh2YWx1ZSBhcyBhbnkpLnByb3BlcnR5ICE9IG51bGw7IC8vIFB5dGhvbiBwYXNzZXMgXCJudWxsXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYWxsYmFjayB7XG4gIHJlYWRvbmx5IGNiaWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgY29va2llOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGludm9rZT86IEludm9rZVJlcXVlc3Q7XG4gIHJlYWRvbmx5IGdldD86IEdldFJlcXVlc3Q7XG4gIHJlYWRvbmx5IHNldD86IFNldFJlcXVlc3Q7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGVsbG9SZXNwb25zZSB7XG4gIHJlYWRvbmx5IGhlbGxvOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZFJlcXVlc3Qge1xuICAvKiogVGhlIG5hbWUgb2YgdGhlIGFzc2VtYmx5ICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKiogQXNzZW1ibHkgdmVyc2lvbiAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqIFRoZSB0YXJiYWxsIG9mIHRoZSBwYWNrYWdlICovXG4gIHJlYWRvbmx5IHRhcmJhbGw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2FkUmVzcG9uc2Uge1xuICByZWFkb25seSBhc3NlbWJseTogc3RyaW5nO1xuICByZWFkb25seSB0eXBlczogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludm9rZVNjcmlwdFJlcXVlc3Qge1xuICByZWFkb25seSBhc3NlbWJseTogc3RyaW5nO1xuICByZWFkb25seSBzY3JpcHQ6IHN0cmluZztcbiAgcmVhZG9ubHkgYXJncz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludm9rZVNjcmlwdFJlc3BvbnNlIHtcbiAgcmVhZG9ubHkgc3RhdHVzOiBudW1iZXIgfCBudWxsO1xuICByZWFkb25seSBzdGRvdXQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc3RkZXJyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNpZ25hbDogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFRoZSBGUU4gb2YgdGhlIGNsYXNzIG9mIHdoaWNoIGFuIGluc3RhbmNlIGlzIHJlcXVlc3RlZCAob3IgXCJPYmplY3RcIilcbiAgICovXG4gIHJlYWRvbmx5IGZxbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgRlFOcyBvZiBpbnRlcmZhY2VzIHRoZSBpbnN0YW5jZSBpbXBsZW1lbnRzLCBpZiBhbnkuIERlY2xhcmluZ1xuICAgKiBpbnRlcmZhY2VzIHRoYXQgdGhlIGNsYXNzIGRlbm90ZWQgYnkgYGZxbmAgaW1wbGVtZW50cyBpcyBub3QgbmVjZXNzYXJ5LlxuICAgKiBUaGlzIG1lYW5zIHRoYXQgbWVtZWJlcnMgb2YgaW50ZXJmYWNlcyBmb3VuZCBpbiB0aGlzIHByb3BlcnR5IHNob3VsZFxuICAgKiBkZWNsYXJlIG1lbWJlcnMgdGhhdCBhcmUgZm91bmQgaW4gdGhlIGBvdmVycmlkZXNgIHByb3BlcnR5LlxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJmYWNlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgY29uc3RydWN0b3Igb2YgYGZxbmAuIChcIk9iamVjdFwiIGFjY2VwdHMgbm9uZSlcbiAgICovXG4gIHJlYWRvbmx5IGFyZ3M/OiBhbnlbXTtcblxuICAvKipcbiAgICogRGVjbGFyYXRpb25zIG9mIG1ldGhvZCBvdmVycmlkZXMgdGhhdCBzaG91bGQgdHJpZ2dlciBjYWxsYmFja3NcbiAgICovXG4gIHJlYWRvbmx5IG92ZXJyaWRlcz86IE92ZXJyaWRlW107XG59XG5cbmV4cG9ydCB0eXBlIENyZWF0ZVJlc3BvbnNlID0gT2JqUmVmO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlbFJlcXVlc3Qge1xuICByZWFkb25seSBvYmpyZWY6IE9ialJlZjtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1pbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgRGVsUmVzcG9uc2Uge31cblxuZXhwb3J0IGludGVyZmFjZSBHZXRSZXF1ZXN0IHtcbiAgcmVhZG9ubHkgb2JqcmVmOiBPYmpSZWY7XG4gIHJlYWRvbmx5IHByb3BlcnR5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdGljR2V0UmVxdWVzdCB7XG4gIHJlYWRvbmx5IGZxbjogc3RyaW5nO1xuICByZWFkb25seSBwcm9wZXJ0eTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldFJlc3BvbnNlIHtcbiAgcmVhZG9ubHkgdmFsdWU6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGF0aWNTZXRSZXF1ZXN0IHtcbiAgcmVhZG9ubHkgZnFuOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByb3BlcnR5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZhbHVlOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2V0UmVxdWVzdCB7XG4gIHJlYWRvbmx5IG9ianJlZjogT2JqUmVmO1xuICByZWFkb25seSBwcm9wZXJ0eTogc3RyaW5nO1xuICByZWFkb25seSB2YWx1ZTogYW55O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBTZXRSZXNwb25zZSB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRpY0ludm9rZVJlcXVlc3Qge1xuICByZWFkb25seSBmcW46IHN0cmluZztcbiAgcmVhZG9ubHkgbWV0aG9kOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFyZ3M/OiBhbnlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnZva2VSZXF1ZXN0IHtcbiAgcmVhZG9ubHkgb2JqcmVmOiBPYmpSZWY7XG4gIHJlYWRvbmx5IG1ldGhvZDogc3RyaW5nO1xuICByZWFkb25seSBhcmdzPzogYW55W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW52b2tlUmVzcG9uc2Uge1xuICByZWFkb25seSByZXN1bHQ6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCZWdpblJlcXVlc3Qge1xuICByZWFkb25seSBvYmpyZWY6IE9ialJlZjtcbiAgcmVhZG9ubHkgbWV0aG9kOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFyZ3M/OiBhbnlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCZWdpblJlc3BvbnNlIHtcbiAgcmVhZG9ubHkgcHJvbWlzZWlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW5kUmVxdWVzdCB7XG4gIHJlYWRvbmx5IHByb21pc2VpZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVuZFJlc3BvbnNlIHtcbiAgcmVhZG9ubHkgcmVzdWx0OiBhbnk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIENhbGxiYWNrc1JlcXVlc3Qge31cblxuZXhwb3J0IGludGVyZmFjZSBDYWxsYmFja3NSZXNwb25zZSB7XG4gIHJlYWRvbmx5IGNhbGxiYWNrczogQ2FsbGJhY2tbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wbGV0ZVJlcXVlc3Qge1xuICByZWFkb25seSBjYmlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVycj86IHN0cmluZztcbiAgcmVhZG9ubHkgcmVzdWx0PzogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsZXRlUmVzcG9uc2Uge1xuICByZWFkb25seSBjYmlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmFtaW5nUmVxdWVzdCB7XG4gIHJlYWRvbmx5IGFzc2VtYmx5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmFtaW5nUmVzcG9uc2Uge1xuICByZWFkb25seSBuYW1pbmc6IHtcbiAgICByZWFkb25seSBbbGFuZ3VhZ2U6IHN0cmluZ106IHsgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogYW55IH0gfCB1bmRlZmluZWQ7XG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRzUmVxdWVzdCB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRzUmVzcG9uc2Uge1xuICByZWFkb25seSBvYmplY3RDb3VudDogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBLZXJuZWxSZXF1ZXN0ID1cbiAgfCBMb2FkUmVxdWVzdFxuICB8IENyZWF0ZVJlcXVlc3RcbiAgfCBEZWxSZXF1ZXN0XG4gIHwgR2V0UmVxdWVzdFxuICB8IFNldFJlcXVlc3RcbiAgfCBJbnZva2VSZXF1ZXN0XG4gIHwgQmVnaW5SZXF1ZXN0XG4gIHwgRW5kUmVxdWVzdFxuICB8IENhbGxiYWNrc1JlcXVlc3RcbiAgfCBDb21wbGV0ZVJlcXVlc3RcbiAgfCBOYW1pbmdSZXF1ZXN0XG4gIHwgU3RhdHNSZXF1ZXN0O1xuXG5leHBvcnQgdHlwZSBLZXJuZWxSZXNwb25zZSA9XG4gIHwgSGVsbG9SZXNwb25zZVxuICB8IExvYWRSZXNwb25zZVxuICB8IENyZWF0ZVJlc3BvbnNlXG4gIHwgRGVsUmVzcG9uc2VcbiAgfCBHZXRSZXNwb25zZVxuICB8IFNldFJlc3BvbnNlXG4gIHwgSW52b2tlUmVzcG9uc2VcbiAgfCBCZWdpblJlc3BvbnNlXG4gIHwgRW5kUmVzcG9uc2VcbiAgfCBDYWxsYmFja3NSZXNwb25zZVxuICB8IENvbXBsZXRlUmVzcG9uc2VcbiAgfCBOYW1pbmdSZXNwb25zZVxuICB8IFN0YXRzUmVzcG9uc2U7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT2theVJlc3BvbnNlIHtcbiAgcmVhZG9ubHkgb2s6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFcnJvclJlc3BvbnNlIHtcbiAgcmVhZG9ubHkgZXJyb3I6IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhY2s/OiBzdHJpbmc7XG59XG4iXX0=
|
package/lib/kernel.js
CHANGED
|
@@ -716,7 +716,7 @@ class Kernel {
|
|
|
716
716
|
_tryTypeInfoForMethod(methodName, classFqn, interfaces = []) {
|
|
717
717
|
var _a, _b;
|
|
718
718
|
for (const fqn of [classFqn, ...interfaces]) {
|
|
719
|
-
if (fqn ===
|
|
719
|
+
if (fqn === wire.EMPTY_OBJECT_FQN) {
|
|
720
720
|
continue;
|
|
721
721
|
}
|
|
722
722
|
const typeinfo = this._typeInfoForFqn(fqn);
|
|
@@ -917,4 +917,4 @@ class Assembly {
|
|
|
917
917
|
this.closure = closure;
|
|
918
918
|
}
|
|
919
919
|
}
|
|
920
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2VybmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsia2VybmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFtQztBQUNuQyxvQ0FBb0M7QUFDcEMsK0JBQStCO0FBQy9CLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsMkJBQTJCO0FBQzNCLHlCQUF5QjtBQUV6Qiw2QkFBNkI7QUFDN0IsK0JBQWtDO0FBQ2xDLHVDQUE0RDtBQUM1RCxvQ0FBb0M7QUFDcEMsd0NBQXdDO0FBRXhDLE1BQWEsTUFBTTtJQWlCakI7Ozs7OztPQU1HO0lBQ0gsWUFBMEIsZUFBZ0Q7UUFDeEUsZ0VBQWdFO1FBQ2hFLHFEQUFxRDtRQUY3QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUM7UUF2QjFFOztXQUVHO1FBQ0ksaUJBQVksR0FBRyxLQUFLLENBQUM7UUFFcEIsZUFBVSxHQUFpQyxFQUFFLENBQUM7UUFDckMsWUFBTyxHQUFHLElBQUkscUJBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLFFBQUcsR0FBaUMsRUFBRSxDQUFDO1FBQ3ZDLFlBQU8sR0FBaUMsRUFBRSxDQUFDO1FBQzNDLGFBQVEsR0FBd0MsRUFBRSxDQUFDO1FBQ25ELFdBQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxrREFBa0Q7UUFpQnhFLDJEQUEyRDtRQUUzRCxnRkFBZ0Y7UUFDaEYsZ0ZBQWdGO1FBQ2hGLDhEQUE4RDtRQUM5RCwrRUFBK0U7UUFDL0UsZUFBZTtRQUNmLG9HQUFvRztRQUNwRyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNsRCxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFaEUsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFF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UUFDdkIsWUFBTyxHQUFQLE9BQU8sQ0FBSztJQUMzQixDQUFDO0NBQ0wiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzcGVjIGZyb20gJ0Bqc2lpL3NwZWMnO1xuaW1wb3J0ICogYXMgY3AgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgdGFyIGZyb20gJ3Rhcic7XG5pbXBvcnQgKiBhcyB2bSBmcm9tICd2bSc7XG5cbmltcG9ydCAqIGFzIGFwaSBmcm9tICcuL2FwaSc7XG5pbXBvcnQgeyBUT0tFTl9SRUYgfSBmcm9tICcuL2FwaSc7XG5pbXBvcnQgeyBPYmplY3RUYWJsZSwgdGFnSnNpaUNvbnN0cnVjdG9yIH0gZnJvbSAnLi9vYmplY3RzJztcbmltcG9ydCAqIGFzIG9uRXhpdCBmcm9tICcuL29uLWV4aXQnO1xuaW1wb3J0ICogYXMgd2lyZSBmcm9tICcuL3NlcmlhbGl6YXRpb24nO1xuXG5leHBvcnQgY2xhc3MgS2VybmVsIHtcbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIGZvciB2ZXJib3NlIGRlYnVnZ2luZy5cbiAgICovXG4gIHB1YmxpYyB0cmFjZUVuYWJsZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGFzc2VtYmxpZXM6IHsgW25hbWU6IHN0cmluZ106IEFzc2VtYmx5IH0gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBvYmplY3RzID0gbmV3IE9iamVjdFRhYmxlKHRoaXMuX3R5cGVJbmZvRm9yRnFuLmJpbmQodGhpcykpO1xuICBwcml2YXRlIGNiczogeyBbY2JpZDogc3RyaW5nXTogQ2FsbGJhY2sgfSA9IHt9O1xuICBwcml2YXRlIHdhaXRpbmc6IHsgW2NiaWQ6IHN0cmluZ106IENhbGxiYWNrIH0gPSB7fTtcbiAgcHJpdmF0ZSBwcm9taXNlczogeyBbcHJpZDogc3RyaW5nXTogQXN5bmNJbnZvY2F0aW9uIH0gPSB7fTtcbiAgcHJpdmF0ZSBuZXh0aWQgPSAyMDAwMDsgLy8gaW5jcmVtZW50aW5nIGNvdW50ZXIgZm9yIG9iamlkLCBjYmlkLCBwcm9taXNlaWRcbiAgcHJpdmF0ZSBzeW5jSW5Qcm9ncmVzcz86IHN0cmluZzsgLy8gZm9yYmlkcyBhc3luYyBjYWxscyAoYmVnaW4pIHdoaWxlIHByb2Nlc3Npbmcgc3luYyBjYWxscyAoZ2V0L3NldC9pbnZva2UpXG4gIHByaXZhdGUgaW5zdGFsbERpcj86IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IHNhbmRib3g6IHZtLkNvbnRleHQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBqc2lpIGtlcm5lbCBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFja0hhbmRsZXIgVGhpcyBoYW5kbGVyIGlzIGludm9rZWQgd2hlbiBhIHN5bmNocm9ub3VzIGNhbGxiYWNrIGlzIGNhbGxlZC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICBJdCdzIHJlc3BvbnNpYmlsaXR5IGlzIHRvIGV4ZWN1dGUgdGhlIGNhbGxiYWNrIGFuZCByZXR1cm4gaXQnc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCAob3IgdGhyb3cgYW4gZXJyb3IpLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyBjYWxsYmFja0hhbmRsZXI6IChjYWxsYmFjazogYXBpLkNhbGxiYWNrKSA9PiBhbnkpIHtcbiAgICAvLyBgc2V0SW1tZWRpYXRlYCBpcyByZXF1aXJlZCBmb3IgdGVzdHMgdG8gcGFzcyAoaXQgaXMgb3RoZXJ3aXNlXG4gICAgLy8gaW1wb3NzaWJsZSB0byB3YWl0IGZvciBpbi1WTSBwcm9taXNlcyB0byBjb21wbGV0ZSlcblxuICAgIC8vIGBCdWZmZXJgIGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgc2ltcGxlLXJlc291cmNlLWJ1bmRsZXIuXG5cbiAgICAvLyBIQUNLOiB3aGVuIHdlIHdlYnBhY2sgQGpzaWkvcnVudGltZSwgYWxsIFwicmVxdWlyZVwiIHN0YXRlbWVudHMgZ2V0IHRyYW5zcGlsZWQsXG4gICAgLy8gc28gbW9kdWxlcyBjYW4gYmUgcmVzb2x2ZWQgd2l0aGluIHRoZSBwYWNrLiBIb3dldmVyLCBoZXJlIHdlIGFjdHVhbGx5IHdhbnQgdG9cbiAgICAvLyBsZXQgbG9hZGVkIG1vZHVsZXMgdG8gdXNlIHRoZSBuYXRpdmUgbm9kZSBcInJlcXVpcmVcIiBtZXRob2QuXG4gICAgLy8gSSB3b25kZXIgaWYgd2VicGFjayBoYXMgc29tZSBwcmFnbWEgdGhhdCBhbGxvd3Mgb3B0aW5nLW91dCBhdCBjZXJ0YWluIHBvaW50c1xuICAgIC8vIGluIHRoZSBjb2RlLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzLEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcbiAgICBjb25zdCBtb2R1bGVMb2FkID0gcmVxdWlyZSgnbW9kdWxlJykuTW9kdWxlLl9sb2FkO1xuICAgIGNvbnN0IG5vZGVSZXF1aXJlID0gKHA6IHN0cmluZykgPT4gbW9kdWxlTG9hZChwLCBtb2R1bGUsIGZhbHNlKTtcblxuICAgIHRoaXMuc2FuZGJveCA9IHZtLmNyZWF0ZUNvbnRleHQoe1xuICAgICAgQnVmZmVyLCAvLyB0byB1c2Ugc2ltcGxlLXJlc291cmNlLWJ1bmRsZXJcbiAgICAgIHNldEltbWVkaWF0ZSwgLy8gYXN5bmMgdGVzdHNcbiAgICAgIHJlcXVpcmU6IG5vZGVSZXF1aXJlLCAvLyBtb2R1bGVzIG5lZWQgdG8gXCJyZXF1aXJlXCJcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBsb2FkKHJlcTogYXBpLkxvYWRSZXF1ZXN0KTogYXBpLkxvYWRSZXNwb25zZSB7XG4gICAgdGhpcy5fZGVidWcoJ2xvYWQnLCByZXEpO1xuXG4gICAgaWYgKCdhc3NlbWJseScgaW4gcmVxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdgYXNzZW1ibHlgIGZpZWxkIGlzIGRlcHJlY2F0ZWQgZm9yIFwibG9hZFwiLCB1c2UgYG5hbWVgLCBgdmVyc2lvbmAgYW5kIGB0YXJiYWxsYCBpbnN0ZWFkJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcGtnbmFtZSA9IHJlcS5uYW1lO1xuICAgIGNvbnN0IHBrZ3ZlciA9IHJlcS52ZXJzaW9uO1xuXG4gICAgLy8gY2hlY2sgaWYgd2UgYWxyZWFkeSBoYXZlIHN1Y2ggYSBtb2R1bGVcbiAgICBjb25zdCBwYWNrYWdlRGlyID0gdGhpcy5fZ2V0UGFja2FnZURpcihwa2duYW1lKTtcbiAgICBpZiAoZnMucGF0aEV4aXN0c1N5bmMocGFja2FnZURpcikpIHtcbiAgICAgIC8vIG1vZHVsZSBleGlzdHMsIHZlcmlmeSB2ZXJzaW9uXG4gICAgICBjb25zdCBlcGtnID0gZnMucmVhZEpzb25TeW5jKHBhdGguam9pbihwYWNrYWdlRGlyLCAncGFja2FnZS5qc29uJykpO1xuICAgICAgaWYgKGVwa2cudmVyc2lvbiAhPT0gcGtndmVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgTXVsdGlwbGUgdmVyc2lvbnMgJHtwa2d2ZXJ9IGFuZCAke2Vwa2cudmVyc2lvbn0gb2YgdGhlIGAgK1xuICAgICAgICAgICAgYHBhY2thZ2UgJyR7cGtnbmFtZX0nIGNhbm5vdCBiZSBsb2FkZWQgdG9nZXRoZXIgc2luY2UgdGhpcyBpcyB1bnN1cHBvcnRlZCBieSBgICtcbiAgICAgICAgICAgICdzb21lIHJ1bnRpbWUgZW52aXJvbm1lbnRzJyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gc2FtZSB2ZXJzaW9uLCBuby1vcFxuICAgICAgdGhpcy5fZGVidWcoJ2xvb2sgdXAgYWxyZWFkeS1sb2FkZWQgYXNzZW1ibHknLCBwa2duYW1lKTtcbiAgICAgIGNvbnN0IGFzc20gPSB0aGlzLmFzc2VtYmxpZXNbcGtnbmFtZV07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFzc2VtYmx5OiBhc3NtLm1ldGFkYXRhLm5hbWUsXG4gICAgICAgIHR5cGVzOiBPYmplY3Qua2V5cyhhc3NtLm1ldGFkYXRhLnR5cGVzID8/IHt9KS5sZW5ndGgsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgaW5zdGFsbCBkaXJlY3RvcnkgKHRoZXJlIG1heSBiZSBzZXZlcmFsIHBhdGggY29tcG9uZW50cyBmb3IgQHNjb3BlZC9wYWNrYWdlcylcbiAgICBmcy5ta2RpcnBTeW5jKHBhY2thZ2VEaXIpO1xuXG4gICAgLy8gRm9yY2UgdW1hc2sgdG8gaGF2ZSBucG0taW5zdGFsbC1saWtlIHBlcm1pc3Npb25zXG4gICAgY29uc3Qgb3JpZ2luYWxVbWFzayA9IHByb2Nlc3MudW1hc2soMG8wMjIpO1xuICAgIHRyeSB7XG4gICAgICAvLyB1bnRhciB0aGUgYXJjaGl2ZSB0byBpdHMgZmluYWwgbG9jYXRpb25cbiAgICAgIHRhci5leHRyYWN0KHtcbiAgICAgICAgY3dkOiBwYWNrYWdlRGlyLFxuICAgICAgICBmaWxlOiByZXEudGFyYmFsbCxcbiAgICAgICAgc3RyaWN0OiB0cnVlLFxuICAgICAgICBzdHJpcDogMSwgLy8gUmVtb3ZlcyB0aGUgJ3BhY2thZ2UvJyBwYXRoIGVsZW1lbnQgZnJvbSBlbnRyaWVzXG4gICAgICAgIHN5bmM6IHRydWUsXG4gICAgICAgIHVubGluazogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBSZXNldCB1bWFzayB0byB0aGUgaW5pdGlhbCB2YWx1ZVxuICAgICAgcHJvY2Vzcy51bWFzayhvcmlnaW5hbFVtYXNrKTtcbiAgICB9XG5cbiAgICAvLyByZWFkIC5qc2lpIG1ldGFkYXRhIGZyb20gdGhlIHJvb3Qgb2YgdGhlIHBhY2thZ2VcbiAgICBjb25zdCBqc2lpTWV0YWRhdGFGaWxlID0gcGF0aC5qb2luKHBhY2thZ2VEaXIsIHNwZWMuU1BFQ19GSUxFX05BTUUpO1xuICAgIGlmICghZnMucGF0aEV4aXN0c1N5bmMoanNpaU1ldGFkYXRhRmlsZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFBhY2thZ2UgdGFyYmFsbCAke3JlcS50YXJiYWxsfSBtdXN0IGhhdmUgYSBmaWxlIG5hbWVkICR7c3BlYy5TUEVDX0ZJTEVfTkFNRX0gYXQgdGhlIHJvb3RgLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgYXNzbVNwZWMgPSBmcy5yZWFkSnNvblN5bmMoanNpaU1ldGFkYXRhRmlsZSkgYXMgc3BlYy5Bc3NlbWJseTtcblxuICAgIC8vIGxvYWQgdGhlIG1vZHVsZSBhbmQgY2FwdHVyZSBpdCdzIGNsb3N1cmVcbiAgICBjb25zdCBjbG9zdXJlID0gdGhpcy5fZXhlY3V0ZShcbiAgICAgIGByZXF1aXJlKFN0cmluZy5yYXdcXGAke3BhY2thZ2VEaXJ9XFxgKWAsXG4gICAgICBwYWNrYWdlRGlyLFxuICAgICk7XG4gICAgY29uc3QgYXNzbSA9IG5ldyBBc3NlbWJseShhc3NtU3BlYywgY2xvc3VyZSk7XG4gICAgdGhpcy5fYWRkQXNzZW1ibHkoYXNzbSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYXNzZW1ibHk6IGFzc21TcGVjLm5hbWUsXG4gICAgICB0eXBlczogT2JqZWN0LmtleXMoYXNzbVNwZWMudHlwZXMgPz8ge30pLmxlbmd0aCxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGludm9rZUJpblNjcmlwdChcbiAgICByZXE6IGFwaS5JbnZva2VTY3JpcHRSZXF1ZXN0LFxuICApOiBhcGkuSW52b2tlU2NyaXB0UmVzcG9uc2Uge1xuICAgIGNvbnN0IHBhY2thZ2VEaXIgPSB0aGlzLl9nZXRQYWNrYWdlRGlyKHJlcS5hc3NlbWJseSk7XG4gICAgaWYgKGZzLnBhdGhFeGlzdHNTeW5jKHBhY2thZ2VEaXIpKSB7XG4gICAgICAvLyBtb2R1bGUgZXhpc3RzLCB2ZXJpZnkgdmVyc2lvblxuICAgICAgY29uc3QgZXBrZyA9IGZzLnJlYWRKc29uU3luYyhwYXRoLmpvaW4ocGFja2FnZURpciwgJ3BhY2thZ2UuanNvbicpKTtcblxuICAgICAgaWYgKCFlcGtnLmJpbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIG5vIGJpbiBzY3JpcHRzIGRlZmluZWQgZm9yIHRoaXMgcGFja2FnZS4nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2NyaXB0UGF0aCA9IGVwa2cuYmluW3JlcS5zY3JpcHRdO1xuXG4gICAgICBpZiAoIWVwa2cuYmluKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2NyaXB0IHdpdGggbmFtZSAke3JlcS5zY3JpcHR9IHdhcyBub3QgZGVmaW5lZC5gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gY3Auc3Bhd25TeW5jKFxuICAgICAgICBwYXRoLmpvaW4ocGFja2FnZURpciwgc2NyaXB0UGF0aCksXG4gICAgICAgIHJlcS5hcmdzID8/IFtdLFxuICAgICAgICB7XG4gICAgICAgICAgZW5jb2Rpbmc6ICd1dGYtOCcsXG4gICAgICAgICAgZW52OiB7XG4gICAgICAgICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgY3VycmVudCBOT0RFX09QVElPTlMgYXJlIGhvbm9yZWQgaWYgd2Ugc2hlbGwgb3V0IHRvIG5vZGVcbiAgICAgICAgICAgIE5PREVfT1BUSU9OUzogcHJvY2Vzcy5leGVjQXJndi5qb2luKCcgJyksXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgXCJ0aGlzXCIgbm9kZSBpcyBhaGVhZCBvZiAkUEFUSCBqdXN0IGluIGNhc2VcbiAgICAgICAgICAgIFBBVEg6IGAke3BhdGguZGlybmFtZShwcm9jZXNzLmV4ZWNQYXRoKX06JHtwcm9jZXNzLmVudi5QQVRIfWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzaGVsbDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0ZG91dDogcmVzdWx0LnN0ZG91dCxcbiAgICAgICAgc3RkZXJyOiByZXN1bHQuc3RkZXJyLFxuICAgICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMsXG4gICAgICAgIHNpZ25hbDogcmVzdWx0LnNpZ25hbCxcbiAgICAgIH07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgUGFja2FnZSB3aXRoIG5hbWUgJHtyZXEuYXNzZW1ibHl9IHdhcyBub3QgbG9hZGVkLmApO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZShyZXE6IGFwaS5DcmVhdGVSZXF1ZXN0KTogYXBpLkNyZWF0ZVJlc3BvbnNlIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlKHJlcSk7XG4gIH1cblxuICBwdWJsaWMgZGVsKHJlcTogYXBpLkRlbFJlcXVlc3QpOiBhcGkuRGVsUmVzcG9uc2Uge1xuICAgIGNvbnN0IHsgb2JqcmVmIH0gPSByZXE7XG5cbiAgICB0aGlzLl9kZWJ1ZygnZGVsJywgb2JqcmVmKTtcbiAgICB0aGlzLm9iamVjdHMuZGVsZXRlT2JqZWN0KG9ianJlZik7XG5cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBwdWJsaWMgc2dldChyZXE6IGFwaS5TdGF0aWNHZXRSZXF1ZXN0KTogYXBpLkdldFJlc3BvbnNlIHtcbiAgICBjb25zdCB7IGZxbiwgcHJvcGVydHkgfSA9IHJlcTtcbiAgICBjb25zdCBzeW1ib2wgPSBgJHtmcW59LiR7cHJvcGVydHl9YDtcbiAgICB0aGlzLl9kZWJ1Zygnc2dldCcsIHN5bWJvbCk7XG4gICAgY29uc3QgdGkgPSB0aGlzLl90eXBlSW5mb0ZvclByb3BlcnR5KHByb3BlcnR5LCBmcW4pO1xuXG4gICAgaWYgKCF0aS5zdGF0aWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcHJvcGVydHkgJHtzeW1ib2x9IGlzIG5vdCBzdGF0aWNgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLl9maW5kU3ltYm9sKGZxbik7XG5cbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2Vuc3VyZVN5bmMoYHByb3BlcnR5ICR7cHJvcGVydHl9YCwgKCkgPT5cbiAgICAgIHRoaXMuX3dyYXBTYW5kYm94Q29kZSgoKSA9PiBwcm90b3R5cGVbcHJvcGVydHldKSxcbiAgICApO1xuXG4gICAgdGhpcy5fZGVidWcoJ3ZhbHVlOicsIHZhbHVlKTtcbiAgICBjb25zdCByZXQgPSB0aGlzLl9mcm9tU2FuZGJveCh2YWx1ZSwgdGkpO1xuICAgIHRoaXMuX2RlYnVnKCdyZXQnLCByZXQpO1xuICAgIHJldHVybiB7IHZhbHVlOiByZXQgfTtcbiAgfVxuXG4gIHB1YmxpYyBzc2V0KHJlcTogYXBpLlN0YXRpY1NldFJlcXVlc3QpOiBhcGkuU2V0UmVzcG9uc2Uge1xuICAgIGNvbnN0IHsgZnFuLCBwcm9wZXJ0eSwgdmFsdWUgfSA9IHJlcTtcbiAgICBjb25zdCBzeW1ib2wgPSBgJHtmcW59LiR7cHJvcGVydHl9YDtcbiAgICB0aGlzLl9kZWJ1Zygnc3NldCcsIHN5bWJvbCk7XG4gICAgY29uc3QgdGkgPSB0aGlzLl90eXBlSW5mb0ZvclByb3BlcnR5KHByb3BlcnR5LCBmcW4pO1xuXG4gICAgaWYgKCF0aS5zdGF0aWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcHJvcGVydHkgJHtzeW1ib2x9IGlzIG5vdCBzdGF0aWNgKTtcbiAgICB9XG5cbiAgICBpZiAodGkuaW1tdXRhYmxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHN0YXRpYyBwcm9wZXJ0eSAke3N5bWJvbH0gaXMgcmVhZG9ubHlgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLl9maW5kU3ltYm9sKGZxbik7XG5cbiAgICB0aGlzLl9lbnN1cmVTeW5jKGBwcm9wZXJ0eSAke3Byb3BlcnR5fWAsICgpID0+XG4gICAgICB0aGlzLl93cmFwU2FuZGJveENvZGUoXG4gICAgICAgICgpID0+IChwcm90b3R5cGVbcHJvcGVydHldID0gdGhpcy5fdG9TYW5kYm94KHZhbHVlLCB0aSkpLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcHVibGljIGdldChyZXE6IGFwaS5HZXRSZXF1ZXN0KTogYXBpLkdldFJlc3BvbnNlIHtcbiAgICBjb25zdCB7IG9ianJlZiwgcHJvcGVydHkgfSA9IHJlcTtcbiAgICB0aGlzLl9kZWJ1ZygnZ2V0Jywgb2JqcmVmLCBwcm9wZXJ0eSk7XG4gICAgY29uc3QgeyBpbnN0YW5jZSwgZnFuLCBpbnRlcmZhY2VzIH0gPSB0aGlzLm9iamVjdHMuZmluZE9iamVjdChvYmpyZWYpO1xuICAgIGNvbnN0IHRpID0gdGhpcy5fdHlwZUluZm9Gb3JQcm9wZXJ0eShwcm9wZXJ0eSwgZnFuLCBpbnRlcmZhY2VzKTtcblxuICAgIC8vIGlmIHRoZSBwcm9wZXJ0eSBpcyBvdmVycmlkZGVuIGJ5IHRoZSBuYXRpdmUgY29kZSBhbmQgXCJnZXRcIiBpcyBjYWxsZWQgb24gdGhlIG9iamVjdCwgaXRcbiAgICAvLyBtZWFucyB0aGF0IHRoZSBuYXRpdmUgY29kZSBpcyB0cnlpbmcgdG8gYWNjZXNzIHRoZSBcInN1cGVyXCIgcHJvcGVydHkuIGluIG9yZGVyIHRvIGVuYWJsZVxuICAgIC8vIHRoYXQsIHdlIGFjdHVhbGx5IGtlZXAgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBwcm9wZXJ0eSBkZXNjcmlwdG9yIHdoZW4gd2Ugb3ZlcnJpZGUsXG4gICAgLy8gc28gYGZpbmRQcm9wZXJ0eVRhcmdldGAgd2lsbCByZXR1cm4gZWl0aGVyIHRoZSBvcmlnaW5hbCBwcm9wZXJ0eSBuYW1lIChcInByb3BlcnR5XCIpIG9yXG4gICAgLy8gdGhlIFwic3VwZXJcIiBwcm9wZXJ0eSBuYW1lIChzb21laGluZyBsaWtlIFwiJGpzaWkkc3VwZXIkPHByb3BlcnR5PiRcIikuXG4gICAgY29uc3QgcHJvcGVydHlUb0dldCA9IHRoaXMuX2ZpbmRQcm9wZXJ0eVRhcmdldChpbnN0YW5jZSwgcHJvcGVydHkpO1xuXG4gICAgLy8gbWFrZSB0aGUgYWN0dWFsIFwiZ2V0XCIsIGFuZCBibG9jayBhbnkgYXN5bmMgY2FsbHMgdGhhdCBtaWdodCBiZSBwZXJmb3JtZWRcbiAgICAvLyBieSBqc2lpIG92ZXJyaWRlcy5cbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2Vuc3VyZVN5bmMoXG4gICAgICBgcHJvcGVydHkgJyR7b2JqcmVmW1RPS0VOX1JFRl19LiR7cHJvcGVydHlUb0dldH0nYCxcbiAgICAgICgpID0+IHRoaXMuX3dyYXBTYW5kYm94Q29kZSgoKSA9PiBpbnN0YW5jZVtwcm9wZXJ0eVRvR2V0XSksXG4gICAgKTtcbiAgICB0aGlzLl9kZWJ1ZygndmFsdWU6JywgdmFsdWUpO1xuICAgIGNvbnN0IHJldCA9IHRoaXMuX2Zyb21TYW5kYm94KHZhbHVlLCB0aSk7XG4gICAgdGhpcy5fZGVidWcoJ3JldDonLCByZXQpO1xuICAgIHJldHVybiB7IHZhbHVlOiByZXQgfTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQocmVxOiBhcGkuU2V0UmVxdWVzdCk6IGFwaS5TZXRSZXNwb25zZSB7XG4gICAgY29uc3QgeyBvYmpyZWYsIHByb3BlcnR5LCB2YWx1ZSB9ID0gcmVxO1xuICAgIHRoaXMuX2RlYnVnKCdzZXQnLCBvYmpyZWYsIHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgY29uc3QgeyBpbnN0YW5jZSwgZnFuLCBpbnRlcmZhY2VzIH0gPSB0aGlzLm9iamVjdHMuZmluZE9iamVjdChvYmpyZWYpO1xuXG4gICAgY29uc3QgcHJvcEluZm8gPSB0aGlzLl90eXBlSW5mb0ZvclByb3BlcnR5KHJlcS5wcm9wZXJ0eSwgZnFuLCBpbnRlcmZhY2VzKTtcblxuICAgIGlmIChwcm9wSW5mby5pbW11dGFibGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBzZXQgdmFsdWUgb2YgaW1tdXRhYmxlIHByb3BlcnR5ICR7cmVxLnByb3BlcnR5fSB0byAke3JlcS52YWx1ZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wZXJ0eVRvU2V0ID0gdGhpcy5fZmluZFByb3BlcnR5VGFyZ2V0KGluc3RhbmNlLCBwcm9wZXJ0eSk7XG5cbiAgICB0aGlzLl9lbnN1cmVTeW5jKGBwcm9wZXJ0eSAnJHtvYmpyZWZbVE9LRU5fUkVGXX0uJHtwcm9wZXJ0eVRvU2V0fSdgLCAoKSA9PlxuICAgICAgdGhpcy5fd3JhcFNhbmRib3hDb2RlKFxuICAgICAgICAoKSA9PiAoaW5zdGFuY2VbcHJvcGVydHlUb1NldF0gPSB0aGlzLl90b1NhbmRib3godmFsdWUsIHByb3BJbmZvKSksXG4gICAgICApLFxuICAgICk7XG5cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBwdWJsaWMgaW52b2tlKHJlcTogYXBpLkludm9rZVJlcXVlc3QpOiBhcGkuSW52b2tlUmVzcG9uc2Uge1xuICAgIGNvbnN0IHsgb2JqcmVmLCBtZXRob2QgfSA9IHJlcTtcbiAgICBjb25zdCBhcmdzID0gcmVxLmFyZ3MgPz8gW107XG5cbiAgICB0aGlzLl9kZWJ1ZygnaW52b2tlJywgb2JqcmVmLCBtZXRob2QsIGFyZ3MpO1xuICAgIGNvbnN0IHsgdGksIG9iaiwgZm4gfSA9IHRoaXMuX2ZpbmRJbnZva2VUYXJnZXQob2JqcmVmLCBtZXRob2QsIGFyZ3MpO1xuXG4gICAgLy8gdmVyaWZ5IHRoaXMgaXMgbm90IGFuIGFzeW5jIG1ldGhvZFxuICAgIGlmICh0aS5hc3luYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke21ldGhvZH0gaXMgYW4gYXN5bmMgbWV0aG9kLCB1c2UgXCJiZWdpblwiIGluc3RlYWRgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXQgPSB0aGlzLl9lbnN1cmVTeW5jKFxuICAgICAgYG1ldGhvZCAnJHtvYmpyZWZbVE9LRU5fUkVGXX0uJHttZXRob2R9J2AsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl93cmFwU2FuZGJveENvZGUoKCkgPT5cbiAgICAgICAgICBmbi5hcHBseShvYmosIHRoaXMuX3RvU2FuZGJveFZhbHVlcyhhcmdzLCB0aS5wYXJhbWV0ZXJzKSksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9mcm9tU2FuZGJveChyZXQsIHRpLnJldHVybnMgPz8gJ3ZvaWQnKTtcbiAgICB0aGlzLl9kZWJ1ZygnaW52b2tlIHJlc3VsdCcsIHJlc3VsdCk7XG5cbiAgICByZXR1cm4geyByZXN1bHQgfTtcbiAgfVxuXG4gIHB1YmxpYyBzaW52b2tlKHJlcTogYXBpLlN0YXRpY0ludm9rZVJlcXVlc3QpOiBhcGkuSW52b2tlUmVzcG9uc2Uge1xuICAgIGNvbnN0IHsgZnFuLCBtZXRob2QgfSA9IHJlcTtcbiAgICBjb25zdCBhcmdzID0gcmVxLmFyZ3MgPz8gW107XG5cbiAgICB0aGlzLl9kZWJ1Zygnc2ludm9rZScsIGZxbiwgbWV0aG9kLCBhcmdzKTtcblxuICAgIGNvbnN0IHRpID0gdGhpcy5fdHlwZUluZm9Gb3JNZXRob2QobWV0aG9kLCBmcW4pO1xuXG4gICAgaWYgKCF0aS5zdGF0aWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtmcW59LiR7bWV0aG9kfSBpcyBub3QgYSBzdGF0aWMgbWV0aG9kYCk7XG4gICAgfVxuXG4gICAgLy8gdmVyaWZ5IHRoaXMgaXMgbm90IGFuIGFzeW5jIG1ldGhvZFxuICAgIGlmICh0aS5hc3luYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke21ldGhvZH0gaXMgYW4gYXN5bmMgbWV0aG9kLCB1c2UgXCJiZWdpblwiIGluc3RlYWRgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLl9maW5kU3ltYm9sKGZxbik7XG4gICAgY29uc3QgZm4gPSBwcm90b3R5cGVbbWV0aG9kXSBhcyAoLi4ucGFyYW1zOiBhbnlbXSkgPT4gYW55O1xuXG4gICAgY29uc3QgcmV0ID0gdGhpcy5fZW5zdXJlU3luYyhgbWV0aG9kICcke2Zxbn0uJHttZXRob2R9J2AsICgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLl93cmFwU2FuZGJveENvZGUoKCkgPT5cbiAgICAgICAgZm4uYXBwbHkocHJvdG90eXBlLCB0aGlzLl90b1NhbmRib3hWYWx1ZXMoYXJncywgdGkucGFyYW1ldGVycykpLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2RlYnVnKCdtZXRob2QgcmV0dXJuZWQ6JywgcmV0KTtcbiAgICByZXR1cm4geyByZXN1bHQ6IHRoaXMuX2Zyb21TYW5kYm94KHJldCwgdGkucmV0dXJucyA/PyAndm9pZCcpIH07XG4gIH1cblxuICBwdWJsaWMgYmVnaW4ocmVxOiBhcGkuQmVnaW5SZXF1ZXN0KTogYXBpLkJlZ2luUmVzcG9uc2Uge1xuICAgIGNvbnN0IHsgb2JqcmVmLCBtZXRob2QgfSA9IHJlcTtcbiAgICBjb25zdCBhcmdzID0gcmVxLmFyZ3MgPz8gW107XG5cbiAgICB0aGlzLl9kZWJ1ZygnYmVnaW4nLCBvYmpyZWYsIG1ldGhvZCwgYXJncyk7XG5cbiAgICBpZiAodGhpcy5zeW5jSW5Qcm9ncmVzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IGludm9rZSBhc3luYyBtZXRob2QgJyR7cmVxLm9ianJlZltUT0tFTl9SRUZdfS4ke3JlcS5tZXRob2R9JyB3aGlsZSBzeW5jICR7dGhpcy5zeW5jSW5Qcm9ncmVzc30gaXMgYmVpbmcgcHJvY2Vzc2VkYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgeyB0aSwgb2JqLCBmbiB9ID0gdGhpcy5fZmluZEludm9rZVRhcmdldChvYmpyZWYsIG1ldGhvZCwgYXJncyk7XG5cbiAgICAvLyB2ZXJpZnkgdGhpcyBpcyBpbmRlZWQgYW4gYXN5bmMgbWV0aG9kXG4gICAgaWYgKCF0aS5hc3luYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNZXRob2QgJHttZXRob2R9IGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFzeW5jIG1ldGhvZGApO1xuICAgIH1cblxuICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLl93cmFwU2FuZGJveENvZGUoKCkgPT5cbiAgICAgIGZuLmFwcGx5KG9iaiwgdGhpcy5fdG9TYW5kYm94VmFsdWVzKGFyZ3MsIHRpLnBhcmFtZXRlcnMpKSxcbiAgICApIGFzIFByb21pc2U8YW55PjtcblxuICAgIC8vIHNpbmNlIHdlIGFyZSBwbGFubmluZyB0byByZXNvbHZlIHRoaXMgcHJvbWlzZSBpbiBhIGRpZmZlcmVudCBzY29wZVxuICAgIC8vIHdlIG5lZWQgdG8gaGFuZGxlIHJlamVjdGlvbnMgaGVyZSBbMV1cbiAgICAvLyBbMV06IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQwOTIwMTc5L3Nob3VsZC1pLXJlZnJhaW4tZnJvbS1oYW5kbGluZy1wcm9taXNlLXJlamVjdGlvbi1hc3luY2hyb25vdXNseS80MDkyMTUwNVxuICAgIHByb21pc2UuY2F0Y2goKF8pID0+IHVuZGVmaW5lZCk7XG5cbiAgICBjb25zdCBwcmlkID0gdGhpcy5fbWFrZXByaWQoKTtcbiAgICB0aGlzLnByb21pc2VzW3ByaWRdID0ge1xuICAgICAgcHJvbWlzZSxcbiAgICAgIG1ldGhvZDogdGksXG4gICAgfTtcblxuICAgIHJldHVybiB7IHByb21pc2VpZDogcHJpZCB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGVuZChyZXE6IGFwaS5FbmRSZXF1ZXN0KTogUHJvbWlzZTxhcGkuRW5kUmVzcG9uc2U+IHtcbiAgICBjb25zdCB7IHByb21pc2VpZCB9ID0gcmVxO1xuXG4gICAgdGhpcy5fZGVidWcoJ2VuZCcsIHByb21pc2VpZCk7XG5cbiAgICBjb25zdCB7IHByb21pc2UsIG1ldGhvZCB9ID0gdGhpcy5wcm9taXNlc1twcm9taXNlaWRdO1xuICAgIGlmIChwcm9taXNlID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgcHJvbWlzZSB3aXRoIElEOiAke3Byb21pc2VpZH1gKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0O1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBhd2FpdCBwcm9taXNlO1xuICAgICAgdGhpcy5fZGVidWcoJ3Byb21pc2UgcmVzdWx0OicsIHJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fZGVidWcoJ3Byb21pc2UgZXJyb3I6JywgZSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHJldHVybiB7IHJlc3VsdDogdGhpcy5fZnJvbVNhbmRib3gocmVzdWx0LCBtZXRob2QucmV0dXJucyA/PyAndm9pZCcpIH07XG4gIH1cblxuICBwdWJsaWMgY2FsbGJhY2tzKF9yZXE/OiBhcGkuQ2FsbGJhY2tzUmVxdWVzdCk6IGFwaS5DYWxsYmFja3NSZXNwb25zZSB7XG4gICAgdGhpcy5fZGVidWcoJ2NhbGxiYWNrcycpO1xuICAgIGNvbnN0IHJldCA9IE9iamVjdC5rZXlzKHRoaXMuY2JzKS5tYXAoKGNiaWQpID0+IHtcbiAgICAgIGNvbnN0IGNiID0gdGhpcy5jYnNbY2JpZF07XG4gICAgICB0aGlzLndhaXRpbmdbY2JpZF0gPSBjYjsgLy8gbW92ZSB0byB3YWl0aW5nXG4gICAgICBjb25zdCBjYWxsYmFjazogYXBpLkNhbGxiYWNrID0ge1xuICAgICAgICBjYmlkLFxuICAgICAgICBjb29raWU6IGNiLm92ZXJyaWRlLmNvb2tpZSxcbiAgICAgICAgaW52b2tlOiB7XG4gICAgICAgICAgb2JqcmVmOiBjYi5vYmpyZWYsXG4gICAgICAgICAgbWV0aG9kOiBjYi5vdmVycmlkZS5tZXRob2QsXG4gICAgICAgICAgYXJnczogY2IuYXJncyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICByZXR1cm4gY2FsbGJhY2s7XG4gICAgfSk7XG5cbiAgICAvLyBtb3ZlIGFsbCBjYWxsYmFja3MgdG8gdGhlIHdhaXQgcXVldWUgYW5kIGNsZWFuIHRoZSBjYWxsYmFjayBxdWV1ZS5cbiAgICB0aGlzLmNicyA9IHt9O1xuICAgIHJldHVybiB7IGNhbGxiYWNrczogcmV0IH07XG4gIH1cblxuICBwdWJsaWMgY29tcGxldGUocmVxOiBhcGkuQ29tcGxldGVSZXF1ZXN0KTogYXBpLkNvbXBsZXRlUmVzcG9uc2Uge1xuICAgIGNvbnN0IHsgY2JpZCwgZXJyLCByZXN1bHQgfSA9IHJlcTtcblxuICAgIHRoaXMuX2RlYnVnKCdjb21wbGV0ZScsIGNiaWQsIGVyciwgcmVzdWx0KTtcblxuICAgIGlmICghKGNiaWQgaW4gdGhpcy53YWl0aW5nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYWxsYmFjayAke2NiaWR9IG5vdCBmb3VuZGApO1xuICAgIH1cblxuICAgIGNvbnN0IGNiID0gdGhpcy53YWl0aW5nW2NiaWRdO1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHRoaXMuX2RlYnVnKCdjb21wbGV0ZWQgd2l0aCBlcnJvcjonLCBlcnIpO1xuICAgICAgY2IuZmFpbChuZXcgRXJyb3IoZXJyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNhbmRveFJlc3VsdCA9IHRoaXMuX3RvU2FuZGJveChcbiAgICAgICAgcmVzdWx0LFxuICAgICAgICBjYi5leHBlY3RlZFJldHVyblR5cGUgPz8gJ3ZvaWQnLFxuICAgICAgKTtcbiAgICAgIHRoaXMuX2RlYnVnKCdjb21wbGV0ZWQgd2l0aCByZXN1bHQ6Jywgc2FuZG94UmVzdWx0KTtcbiAgICAgIGNiLnN1Y2NlZWQoc2FuZG94UmVzdWx0KTtcbiAgICB9XG5cbiAgICBkZWxldGUgdGhpcy53YWl0aW5nW2NiaWRdO1xuXG4gICAgcmV0dXJuIHsgY2JpZCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxhbmd1YWdlLXNwZWNpZmljIG5hbWVzIGZvciBhIGpzaWkgbW9kdWxlLlxuICAgKiBAcGFyYW0gYXNzZW1ibHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBqc2lpIG1vZHVsZSAoaS5lLiBqc2lpJGpzaWlfY2FsY3VsYXRvcl9saWIkKVxuICAgKi9cbiAgcHVibGljIG5hbWluZyhyZXE6IGFwaS5OYW1pbmdSZXF1ZXN0KTogYXBpLk5hbWluZ1Jlc3BvbnNlIHtcbiAgICBjb25zdCBhc3NlbWJseU5hbWUgPSByZXEuYXNzZW1ibHk7XG5cbiAgICB0aGlzLl9kZWJ1ZygnbmFtaW5nJywgYXNzZW1ibHlOYW1lKTtcblxuICAgIGNvbnN0IGFzc2VtYmx5ID0gdGhpcy5fYXNzZW1ibHlGb3IoYXNzZW1ibHlOYW1lKTtcbiAgICBjb25zdCB0YXJnZXRzID0gYXNzZW1ibHkubWV0YWRhdGEudGFyZ2V0cztcbiAgICBpZiAoIXRhcmdldHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCAtIFwidGFyZ2V0c1wiIGZvciAke2Fzc2VtYmx5TmFtZX0gaXMgbWlzc2luZyFgKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBuYW1pbmc6IHRhcmdldHMgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0cyhfcmVxPzogYXBpLlN0YXRzUmVxdWVzdCk6IGFwaS5TdGF0c1Jlc3BvbnNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgb2JqZWN0Q291bnQ6IHRoaXMub2JqZWN0cy5jb3VudCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfYWRkQXNzZW1ibHkoYXNzbTogQXNzZW1ibHkpIHtcbiAgICB0aGlzLmFzc2VtYmxpZXNbYXNzbS5tZXRhZGF0YS5uYW1lXSA9IGFzc207XG5cbiAgICAvLyBhZGQgdGhlIF9fanNpaV9fLmZxbiBwcm9wZXJ0eSBvbiBldmVyeSBjb25zdHJ1Y3Rvci4gdGhpcyBhbGxvd3NcbiAgICAvLyB0cmF2ZXJzaW5nIGJldHdlZW4gdGhlIGphdmFzY3JpcHQgYW5kIGpzaWkgd29ybGRzIGdpdmVuIGFueSBvYmplY3QuXG4gICAgZm9yIChjb25zdCBmcW4gb2YgT2JqZWN0LmtleXMoYXNzbS5tZXRhZGF0YS50eXBlcyA/PyB7fSkpIHtcbiAgICAgIGNvbnN0IHR5cGVkZWYgPSBhc3NtLm1ldGFkYXRhLnR5cGVzIVtmcW5dO1xuICAgICAgc3dpdGNoICh0eXBlZGVmLmtpbmQpIHtcbiAgICAgICAgY2FzZSBzcGVjLlR5cGVLaW5kLkludGVyZmFjZTpcbiAgICAgICAgICBjb250aW51ZTsgLy8gaW50ZXJmYWNlcyBkb24ndCByZWFsbHkgZXhpc3RcbiAgICAgICAgY2FzZSBzcGVjLlR5cGVLaW5kLkNsYXNzOlxuICAgICAgICBjYXNlIHNwZWMuVHlwZUtpbmQuRW51bTpcbiAgICAgICAgICBjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuX2ZpbmRTeW1ib2woZnFuKTtcbiAgICAgICAgICB0YWdKc2lpQ29uc3RydWN0b3IoY29uc3RydWN0b3IsIGZxbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gZmluZCB0aGUgamF2YXNjcmlwdCBjb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgYSBqc2lpIEZRTi5cbiAgcHJpdmF0ZSBfZmluZEN0b3IoXG4gICAgZnFuOiBzdHJpbmcsXG4gICAgYXJnczogYW55W10sXG4gICk6IHsgY3RvcjogYW55OyBwYXJhbWV0ZXJzPzogc3BlYy5QYXJhbWV0ZXJbXSB9IHtcbiAgICBpZiAoZnFuID09PSB3aXJlLkVNUFRZX09CSkVDVF9GUU4pIHtcbiAgICAgIHJldHVybiB7IGN0b3I6IE9iamVjdCB9O1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGVpbmZvID0gdGhpcy5fdHlwZUluZm9Gb3JGcW4oZnFuKTtcblxuICAgIHN3aXRjaCAodHlwZWluZm8ua2luZCkge1xuICAgICAgY2FzZSBzcGVjLlR5cGVLaW5kLkNsYXNzOlxuICAgICAgICBjb25zdCBjbGFzc1R5cGUgPSB0eXBlaW5mbyBhcyBzcGVjLkNsYXNzVHlwZTtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVNZXRob2RBcmd1bWVudHMoY2xhc3NUeXBlLmluaXRpYWxpemVyLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjdG9yOiB0aGlzLl9maW5kU3ltYm9sKGZxbiksXG4gICAgICAgICAgcGFyYW1ldGVyczogY2xhc3NUeXBlLmluaXRpYWxpemVyICYmIGNsYXNzVHlwZS5pbml0aWFsaXplci5wYXJhbWV0ZXJzLFxuICAgICAgICB9O1xuXG4gICAgICBjYXNlIHNwZWMuVHlwZUtpbmQuSW50ZXJmYWNlOlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENhbm5vdCBjcmVhdGUgYW4gb2JqZWN0IHdpdGggYW4gRlFOIG9mIGFuIGludGVyZmFjZTogJHtmcW59YCxcbiAgICAgICAgKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIEZRTiBraW5kOiAke2Zxbn1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXRQYWNrYWdlRGlyKHBrZ25hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmluc3RhbGxEaXIpIHtcbiAgICAgIHRoaXMuaW5zdGFsbERpciA9IGZzLm1rZHRlbXBTeW5jKHBhdGguam9pbihvcy50bXBkaXIoKSwgJ2pzaWkta2VybmVsLScpKTtcbiAgICAgIGZzLm1rZGlycFN5bmMocGF0aC5qb2luKHRoaXMuaW5zdGFsbERpciwgJ25vZGVfbW9kdWxlcycpKTtcbiAgICAgIHRoaXMuX2RlYnVnKCdjcmVhdGluZyBqc2lpLWtlcm5lbCBtb2R1bGVzIHdvcmtkaXI6JywgdGhpcy5pbnN0YWxsRGlyKTtcblxuICAgICAgb25FeGl0LnJlbW92ZVN5bmModGhpcy5pbnN0YWxsRGlyKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGguam9pbih0aGlzLmluc3RhbGxEaXIsICdub2RlX21vZHVsZXMnLCBwa2duYW1lKTtcbiAgfVxuXG4gIC8vIHByZWZpeGVkIHdpdGggXyB0byBhbGxvdyBjYWxsaW5nIHRoaXMgbWV0aG9kIGludGVybmFsbHkgd2l0aG91dFxuICAvLyBnZXR0aW5nIGl0IHJlY29yZGVkIGZvciB0ZXN0aW5nLlxuICBwcml2YXRlIF9jcmVhdGUocmVxOiBhcGkuQ3JlYXRlUmVxdWVzdCk6IGFwaS5DcmVhdGVSZXNwb25zZSB7XG4gICAgdGhpcy5fZGVidWcoJ2NyZWF0ZScsIHJlcSk7XG4gICAgY29uc3QgeyBmcW4sIGludGVyZmFjZXMsIG92ZXJyaWRlcyB9ID0gcmVxO1xuXG4gICAgY29uc3QgcmVxdWVzdEFyZ3MgPSByZXEuYXJncyA/PyBbXTtcblxuICAgIGNvbnN0IGN0b3JSZXN1bHQgPSB0aGlzLl9maW5kQ3RvcihmcW4sIHJlcXVlc3RBcmdzKTtcbiAgICBjb25zdCBjdG9yID0gY3RvclJlc3VsdC5jdG9yO1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuX3dyYXBTYW5kYm94Q29kZShcbiAgICAgICgpID0+XG4gICAgICAgIG5ldyBjdG9yKC4uLnRoaXMuX3RvU2FuZGJveFZhbHVlcyhyZXF1ZXN0QXJncywgY3RvclJlc3VsdC5wYXJhbWV0ZXJzKSksXG4gICAgKTtcbiAgICBjb25zdCBvYmpyZWYgPSB0aGlzLm9iamVjdHMucmVnaXN0ZXJPYmplY3Qob2JqLCBmcW4sIHJlcS5pbnRlcmZhY2VzID8/IFtdKTtcblxuICAgIC8vIG92ZXJyaWRlczogZm9yIGVhY2ggb25lIG9mIHRoZSBvdmVycmlkZSBtZXRob2QgbmFtZXMsIGluc3RhbGxzIGFcbiAgICAvLyBtZXRob2Qgb24gdGhlIG5ld2x5IGNyZWF0ZWQgb2JqZWN0IHdoaWNoIHJlcHJlc2VudHMgdGhlIHJlbW90ZSBcInJldmVyc2UgcHJveHlcIi5cblxuICAgIGlmIChvdmVycmlkZXMpIHtcbiAgICAgIHRoaXMuX2RlYnVnKCdvdmVycmlkZXMnLCBvdmVycmlkZXMpO1xuXG4gICAgICBjb25zdCBvdmVycmlkZVR5cGVFcnJvck1lc3NhZ2UgPVxuICAgICAgICAnT3ZlcnJpZGUgY2FuIGVpdGhlciBiZSBcIm1ldGhvZFwiIG9yIFwicHJvcGVydHlcIic7XG4gICAgICBjb25zdCBtZXRob2RzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgIGZvciAoY29uc3Qgb3ZlcnJpZGUgb2Ygb3ZlcnJpZGVzKSB7XG4gICAgICAgIGlmIChhcGkuaXNNZXRob2RPdmVycmlkZShvdmVycmlkZSkpIHtcbiAgICAgICAgICBpZiAoYXBpLmlzUHJvcGVydHlPdmVycmlkZShvdmVycmlkZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihvdmVycmlkZVR5cGVFcnJvck1lc3NhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobWV0aG9kcy5oYXMob3ZlcnJpZGUubWV0aG9kKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgRHVwbGljYXRlIG92ZXJyaWRlIGZvciBtZXRob2QgJyR7b3ZlcnJpZGUubWV0aG9kfSdgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbWV0aG9kcy5hZGQob3ZlcnJpZGUubWV0aG9kKTtcblxuICAgICAgICAgIHRoaXMuX2FwcGx5TWV0aG9kT3ZlcnJpZGUob2JqLCBvYmpyZWYsIGZxbiwgaW50ZXJmYWNlcywgb3ZlcnJpZGUpO1xuICAgICAgICB9IGVsc2UgaWYgKGFwaS5pc1Byb3BlcnR5T3ZlcnJpZGUob3ZlcnJpZGUpKSB7XG4gICAgICAgICAgaWYgKGFwaS5pc01ldGhvZE92ZXJyaWRlKG92ZXJyaWRlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG92ZXJyaWRlVHlwZUVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmhhcyhvdmVycmlkZS5wcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICBgRHVwbGljYXRlIG92ZXJyaWRlIGZvciBwcm9wZXJ0eSAnJHtvdmVycmlkZS5wcm9wZXJ0eX0nYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByb3BlcnRpZXMuYWRkKG92ZXJyaWRlLnByb3BlcnR5KTtcblxuICAgICAgICAgIHRoaXMuX2FwcGx5UHJvcGVydHlPdmVycmlkZShvYmosIG9ianJlZiwgZnFuLCBpbnRlcmZhY2VzLCBvdmVycmlkZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG92ZXJyaWRlVHlwZUVycm9yTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb2JqcmVmO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0U3VwZXJQcm9wZXJ0eU5hbWUobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGAkanNpaSRzdXBlciQke25hbWV9JGA7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseVByb3BlcnR5T3ZlcnJpZGUoXG4gICAgb2JqOiBhbnksXG4gICAgb2JqcmVmOiBhcGkuT2JqUmVmLFxuICAgIHR5cGVGcW46IHN0cmluZyxcbiAgICBpbnRlcmZhY2VzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCxcbiAgICBvdmVycmlkZTogYXBpLlByb3BlcnR5T3ZlcnJpZGUsXG4gICkge1xuICAgIC8vIGVycm9yIGlmIHdlIGNhbiBmaW5kIGEgbWV0aG9kIHdpdGggdGhpcyBuYW1lXG4gICAgaWYgKHRoaXMuX3RyeVR5cGVJbmZvRm9yTWV0aG9kKG92ZXJyaWRlLnByb3BlcnR5LCB0eXBlRnFuLCBpbnRlcmZhY2VzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVHJ5aW5nIHRvIG92ZXJyaWRlIG1ldGhvZCAnJHtvdmVycmlkZS5wcm9wZXJ0eX0nIGFzIGEgcHJvcGVydHlgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgcHJvcEluZm8gPSB0aGlzLl90cnlUeXBlSW5mb0ZvclByb3BlcnR5KFxuICAgICAgb3ZlcnJpZGUucHJvcGVydHksXG4gICAgICB0eXBlRnFuLFxuICAgICAgaW50ZXJmYWNlcyxcbiAgICApO1xuICAgIC8vIGlmIHRoaXMgaXMgYSBwcml2YXRlIHByb3BlcnR5IChpLmUuIGRvZXNuJ3QgaGF2ZSBgcHJvcEluZm9gIHRoZSBvYmplY3QgaGFzIGEga2V5KVxuICAgIGlmICghcHJvcEluZm8gJiYgb3ZlcnJpZGUucHJvcGVydHkgaW4gb2JqKSB7XG4gICAgICB0aGlzLl9kZWJ1ZyhgU2tpcHBpbmcgb3ZlcnJpZGUgb2YgcHJpdmF0ZSBwcm9wZXJ0eSAke292ZXJyaWRlLnByb3BlcnR5fWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghcHJvcEluZm8pIHtcbiAgICAgIC8vIFdlJ3ZlIG92ZXJyaWRpbmcgYSBwcm9wZXJ0eSBvbiBhbiBvYmplY3Qgd2UgaGF2ZSBOTyB0eXBlIGluZm9ybWF0aW9uIG9uIChwcm9iYWJseVxuICAgICAgLy8gYmVjYXVzZSBpdCdzIGFuIGFub255bW91cyBvYmplY3QpLlxuICAgICAgLy8gUHJldGVuZCBpdCdzICdwcm9wOiBhbnknO1xuICAgICAgLy9cbiAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBkbyBiZXR0ZXIgdHlwZSBjaGVja2luZyBkdXJpbmcgdGhlIGNvbnZlcnNpb24gaWYgSlNJSSBjbGllbnRzXG4gICAgICAvLyB3b3VsZCB0ZWxsIHVzIHRoZSBpbnRlbmRlZCBpbnRlcmZhY2UgdHlwZS5cbiAgICAgIHByb3BJbmZvID0ge1xuICAgICAgICBuYW1lOiBvdmVycmlkZS5wcm9wZXJ0eSxcbiAgICAgICAgdHlwZTogc3BlYy5DQU5PTklDQUxfQU5ZLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWZpbmVPdmVycmlkZW5Qcm9wZXJ0eShvYmosIG9ianJlZiwgb3ZlcnJpZGUsIHByb3BJbmZvKTtcbiAgfVxuXG4gIHByaXZhdGUgX2RlZmluZU92ZXJyaWRlblByb3BlcnR5KFxuICAgIG9iajogYW55LFxuICAgIG9ianJlZjogYXBpLk9ialJlZixcbiAgICBvdmVycmlkZTogYXBpLlByb3BlcnR5T3ZlcnJpZGUsXG4gICAgcHJvcEluZm86IHNwZWMuUHJvcGVydHksXG4gICkge1xuICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IG92ZXJyaWRlLnByb3BlcnR5O1xuXG4gICAgdGhpcy5fZGVidWcoJ2FwcGx5IG92ZXJyaWRlJywgcHJvcGVydHlOYW1lKTtcblxuICAgIC8vIHNhdmUgdGhlIG9sZCBwcm9wZXJ0eSB1bmRlciAkanNpaSRzdXBlciQ8cHJvcD4kIHNvIHRoYXQgcHJvcGVydHkgb3ZlcnJpZGVzXG4gICAgLy8gY2FuIHN0aWxsIGFjY2VzcyBpdCB2aWEgYHN1cGVyLjxwcm9wPmAuXG4gICAgY29uc3QgcHJldiA9IGdldFByb3BlcnR5RGVzY3JpcHRvcihvYmosIHByb3BlcnR5TmFtZSkgPz8ge1xuICAgICAgdmFsdWU6IG9ialtwcm9wZXJ0eU5hbWVdLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH07XG5cbiAgICBjb25zdCBwcmV2RW51bWVyYWJsZSA9IHByZXYuZW51bWVyYWJsZTtcbiAgICBwcmV2LmVudW1lcmFibGUgPSBmYWxzZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCB0aGlzLl9nZXRTdXBlclByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpLCBwcmV2KTtcblxuICAgIC8vIHdlIGFkZCBjYWxsYmFja3MgZm9yIGJvdGggJ2dldCcgYW5kICdzZXQnLCBldmVuIGlmIHRoZSBwcm9wZXJ0eVxuICAgIC8vIGlzIHJlYWRvbmx5LiB0aGlzIGlzIGZpbmUgYmVjYXVzZSBpZiB5b3UgdHJ5IHRvIHNldCgpIGEgcmVhZG9ubHlcbiAgICAvLyBwcm9wZXJ0eSwgaXQgd2lsbCBmYWlsLlxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3BlcnR5TmFtZSwge1xuICAgICAgZW51bWVyYWJsZTogcHJldkVudW1lcmFibGUsXG4gICAgICBjb25maWd1cmFibGU6IHByZXYuY29uZmlndXJhYmxlLFxuICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuX2RlYnVnKCd2aXJ0dWFsIGdldCcsIG9ianJlZiwgcHJvcGVydHlOYW1lLCB7XG4gICAgICAgICAgY29va2llOiBvdmVycmlkZS5jb29raWUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNhbGxiYWNrSGFuZGxlcih7XG4gICAgICAgICAgY29va2llOiBvdmVycmlkZS5jb29raWUsXG4gICAgICAgICAgY2JpZDogdGhpcy5fbWFrZWNiaWQoKSxcbiAgICAgICAgICBnZXQ6IHsgb2JqcmVmLCBwcm9wZXJ0eTogcHJvcGVydHlOYW1lIH0sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9kZWJ1ZygnY2FsbGJhY2sgcmV0dXJuZWQnLCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdG9TYW5kYm94KHJlc3VsdCwgcHJvcEluZm8pO1xuICAgICAgfSxcbiAgICAgIHNldDogKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5fZGVidWcoJ3ZpcnR1YWwgc2V0Jywgb2JqcmVmLCBwcm9wZXJ0eU5hbWUsIHtcbiAgICAgICAgICBjb29raWU6IG92ZXJyaWRlLmNvb2tpZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2FsbGJhY2tIYW5kbGVyKHtcbiAgICAgICAgICBjb29raWU6IG92ZXJyaWRlLmNvb2tpZSxcbiAgICAgICAgICBjYmlkOiB0aGlzLl9tYWtlY2JpZCgpLFxuICAgICAgICAgIHNldDoge1xuICAgICAgICAgICAgb2JqcmVmLFxuICAgICAgICAgICAgcHJvcGVydHk6IHByb3BlcnR5TmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9mcm9tU2FuZGJveCh2YWx1ZSwgcHJvcEluZm8pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGdldFByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgIG9iajogYW55LFxuICAgICAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gICAgKTogUHJvcGVydHlEZXNjcmlwdG9yIHwgdW5kZWZpbmVkIHtcbiAgICAgIGNvbnN0IGRpcmVjdCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wZXJ0eU5hbWUpO1xuICAgICAgaWYgKGRpcmVjdCAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBkaXJlY3Q7XG4gICAgICB9XG4gICAgICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopO1xuICAgICAgaWYgKHByb3RvID09IG51bGwgJiYgcHJvdG8gIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICAgICAgLy8gV2UgcmVhY2hlZCBPYmplY3Qgb3IgdGhlIHByb3RvdHlwZSBjaGFpbiByb290LCBhbGwgaG9wZSBpcyBsb3N0IVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldFByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgcHJvcGVydHlOYW1lKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9hcHBseU1ldGhvZE92ZXJyaWRlKFxuICAgIG9iajogYW55LFxuICAgIG9ianJlZjogYXBpLk9ialJlZixcbiAgICB0eXBlRnFuOiBzdHJpbmcsXG4gICAgaW50ZXJmYWNlczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gICAgb3ZlcnJpZGU6IGFwaS5NZXRob2RPdmVycmlkZSxcbiAgKSB7XG4gICAgLy8gZXJyb3IgaWYgd2UgY2FuIGZpbmQgYSBwcm9wZXJ0eSB3aXRoIHRoaXMgbmFtZVxuICAgIGlmICh0aGlzLl90cnlUeXBlSW5mb0ZvclByb3BlcnR5KG92ZXJyaWRlLm1ldGhvZCwgdHlwZUZxbiwgaW50ZXJmYWNlcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRyeWluZyB0byBvdmVycmlkZSBwcm9wZXJ0eSAnJHtvdmVycmlkZS5tZXRob2R9JyBhcyBhIG1ldGhvZGAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBtZXRob2RJbmZvID0gdGhpcy5fdHJ5VHlwZUluZm9Gb3JNZXRob2QoXG4gICAgICBvdmVycmlkZS5tZXRob2QsXG4gICAgICB0eXBlRnFuLFxuICAgICAgaW50ZXJmYWNlcyxcbiAgICApO1xuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHByaXZhdGUgbWV0aG9kIChkb2Vzbid0IGhhdmUgbWV0aG9kSW5mbywga2V5IHJlc29sdmVzIG9uIHRoZSBvYmplY3QpLCB3ZVxuICAgIC8vIGFyZSBnb2luZyB0byBza2lwIHRoZSBvdmVycmlkZS5cbiAgICBpZiAoIW1ldGhvZEluZm8gJiYgb2JqW292ZXJyaWRlLm1ldGhvZF0pIHtcbiAgICAgIHRoaXMuX2RlYnVnKGBTa2lwcGluZyBvdmVycmlkZSBvZiBwcml2YXRlIG1ldGhvZCAke292ZXJyaWRlLm1ldGhvZH1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIW1ldGhvZEluZm8pIHtcbiAgICAgIC8vIFdlJ3ZlIG92ZXJyaWRpbmcgYSBtZXRob2Qgb24gYW4gb2JqZWN0IHdlIGhhdmUgTk8gdHlwZSBpbmZvcm1hdGlvbiBvbiAocHJvYmFibHlcbiAgICAgIC8vIGJlY2F1c2UgaXQncyBhbiBhbm9ueW1vdXMgb2JqZWN0KS5cbiAgICAgIC8vIFByZXRlbmQgaXQncyBhbiAoLi4uYXJnczogYW55W10pID0+IGFueVxuICAgICAgbWV0aG9kSW5mbyA9IHtcbiAgICAgICAgbmFtZTogb3ZlcnJpZGUubWV0aG9kLFxuICAgICAgICByZXR1cm5zOiB7IHR5cGU6IHNwZWMuQ0FOT05JQ0FMX0FOWSB9LFxuICAgICAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2FyZ3MnLFxuICAgICAgICAgICAgdHlwZTogc3BlYy5DQU5PTklDQUxfQU5ZLFxuICAgICAgICAgICAgdmFyaWFkaWM6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgdmFyaWFkaWM6IHRydWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuX2RlZmluZU92ZXJyaWRlbk1ldGhvZChvYmosIG9ianJlZiwgb3ZlcnJpZGUsIG1ldGhvZEluZm8pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGVmaW5lT3ZlcnJpZGVuTWV0aG9kKFxuICAgIG9iajogYW55LFxuICAgIG9ianJlZjogYXBpLk9ialJlZixcbiAgICBvdmVycmlkZTogYXBpLk1ldGhvZE92ZXJyaWRlLFxuICAgIG1ldGhvZEluZm86IHNwZWMuTWV0aG9kLFxuICApIHtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gb3ZlcnJpZGUubWV0aG9kO1xuXG4gICAgaWYgKG1ldGhvZEluZm8uYXN5bmMpIHtcbiAgICAgIC8vIGFzeW5jIG1ldGhvZCBvdmVycmlkZVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgbWV0aG9kTmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogKC4uLm1ldGhvZEFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZGVidWcoJ2ludm9rZSBhc3luYyBtZXRob2Qgb3ZlcnJpZGUnLCBvdmVycmlkZSk7XG4gICAgICAgICAgY29uc3QgYXJncyA9IHRoaXMuX3RvU2FuZGJveFZhbHVlcyhtZXRob2RBcmdzLCBtZXRob2RJbmZvLnBhcmFtZXRlcnMpO1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChzdWNjZWVkLCBmYWlsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjYmlkID0gdGhpcy5fbWFrZWNiaWQoKTtcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKCdhZGRpbmcgY2FsbGJhY2sgdG8gcXVldWUnLCBjYmlkKTtcbiAgICAgICAgICAgIHRoaXMuY2JzW2NiaWRdID0ge1xuICAgICAgICAgICAgICBvYmpyZWYsXG4gICAgICAgICAgICAgIG92ZXJyaWRlLFxuICAgICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgICBleHBlY3RlZFJldHVyblR5cGU6IG1ldGhvZEluZm8ucmV0dXJucyA/PyAndm9pZCcsXG4gICAgICAgICAgICAgIHN1Y2NlZWQsXG4gICAgICAgICAgICAgIGZhaWwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHN5bmMgbWV0aG9kIG92ZXJyaWRlIChtZXRob2QgaW5mbyBpcyBub3QgcmVxdWlyZWQpXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBtZXRob2ROYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlOiAoLi4ubWV0aG9kQXJnczogYW55W10pID0+IHtcbiAgICAgICAgICB0aGlzLl9kZWJ1ZyhcbiAgICAgICAgICAgICdpbnZva2Ugc3luYyBtZXRob2Qgb3ZlcnJpZGUnLFxuICAgICAgICAgICAgb3ZlcnJpZGUsXG4gICAgICAgICAgICAnYXJncycsXG4gICAgICAgICAgICBtZXRob2RBcmdzLFxuICAgICAgICAgICk7XG4gICAgICAgICAgLy8gV2Ugc2hvdWxkIGJlIHZhbGlkYXRpbmcgdGhlIGFjdHVhbCBhcmd1bWVudHMgYWNjb3JkaW5nIHRvIHRoZVxuICAgICAgICAgIC8vIGRlY2xhcmVkIHBhcmFtZXRlcnMgaGVyZSwgYnV0IGxldCdzIGp1c3QgYXNzdW1lIHRoZSBKU0lJIHJ1bnRpbWUgb24gdGhlXG4gICAgICAgICAgLy8gb3RoZXIgZW5kIGhhcyBkb25lIGl0cyB3b3JrLlxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY2FsbGJhY2tIYW5kbGVyKHtcbiAgICAgICAgICAgIGNvb2tpZTogb3ZlcnJpZGUuY29va2llLFxuICAgICAgICAgICAgY2JpZDogdGhpcy5fbWFrZWNiaWQoKSxcbiAgICAgICAgICAgIGludm9rZToge1xuICAgICAgICAgICAgICBvYmpyZWYsXG4gICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICAgICAgYXJnczogdGhpcy5fZnJvbVNhbmRib3hWYWx1ZXMobWV0aG9kQXJncywgbWV0aG9kSW5mby5wYXJhbWV0ZXJzKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5fZGVidWcoJ1Jlc3VsdCcsIHJlc3VsdCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3RvU2FuZGJveChyZXN1bHQsIG1ldGhvZEluZm8ucmV0dXJucyA/PyAndm9pZCcpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZmluZEludm9rZVRhcmdldChcbiAgICBvYmpyZWY6IGFwaS5PYmpSZWYsXG4gICAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICAgIGFyZ3M6IGFueVtdLFxuICApIHtcbiAgICBjb25zdCB7IGluc3RhbmNlLCBmcW4sIGludGVyZmFjZXMgfSA9IHRoaXMub2JqZWN0cy5maW5kT2JqZWN0KG9ianJlZik7XG4gICAgY29uc3QgdGkgPSB0aGlzLl90eXBlSW5mb0Zvck1ldGhvZChtZXRob2ROYW1lLCBmcW4sIGludGVyZmFjZXMpO1xuICAgIHRoaXMuX3ZhbGlkYXRlTWV0aG9kQXJndW1lbnRzKHRpLCBhcmdzKTtcblxuICAgIC8vIGFsd2F5cyBmaXJzdCBsb29rIHVwIHRoZSBtZXRob2QgaW4gdGhlIHByb3RvdHlwZS4gdGhpcyBwcmFjdGljYWxseSBieXBhc3Nlc1xuICAgIC8vIGFueSBtZXRob2RzIG92ZXJyaWRkZW4gYnkgZGVyaXZlZCBjbGFzc2VzICh3aGljaCBhcmUgYnkgZGVmaW5pdGlvbiBuYXRpdmVcbiAgICAvLyBtZXRob2RzKS4gdGhpcyBzZXJ2ZXMgdG8gYWxsb3cgbmF0aXZlIGNhbGwgdG8gaW52b2tlIFwic3VwZXIubWV0aG9kKClcIiB3aGVuXG4gICAgLy8gb3ZlcnJpZGluZyB0aGUgbWV0aG9kLlxuICAgIC8vIGlmIHdlIGRpZG4ndCBmaW5kIHRoZSBtZXRob2Qgb24gdGhlIHByb3RvdHlwZSwgaXQgY291bGQgYmUgYSBsaXRlcmFsIG9iamVjdFxuICAgIC8vIHRoYXQgaW1wbGVtZW50cyBhbiBpbnRlcmZhY2UsIHNvIHdlIGxvb2sgaWYgd2UgaGF2ZSB0aGUgbWV0aG9kIG9uIHRoZSBvYmplY3RcbiAgICAvLyBpdHNlbGYuIGlmIHdlIGRvLCB3ZSBpbnZva2UgaXQuXG4gICAgbGV0IGZuID0gaW5zdGFuY2UuY29uc3RydWN0b3IucHJvdG90eXBlW21ldGhvZE5hbWVdO1xuICAgIGlmICghZm4pIHtcbiAgICAgIGZuID0gaW5zdGFuY2VbbWV0aG9kTmFtZV07XG4gICAgICBpZiAoIWZuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgJHttZXRob2ROYW1lfSBvbiBvYmplY3RgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgdGksIG9iajogaW5zdGFuY2UsIGZuIH07XG4gIH1cblxuICBwcml2YXRlIF92YWxpZGF0ZU1ldGhvZEFyZ3VtZW50cyhcbiAgICBtZXRob2Q6IHNwZWMuQ2FsbGFibGUgfCB1bmRlZmluZWQsXG4gICAgYXJnczogYW55W10sXG4gICkge1xuICAgIGNvbnN0IHBhcmFtczogc3BlYy5QYXJhbWV0ZXJbXSA9IG1ldGhvZD8ucGFyYW1ldGVycyA/PyBbXTtcblxuICAgIC8vIGVycm9yIGlmIGFyZ3MgPiBwYXJhbXNcbiAgICBpZiAoYXJncy5sZW5ndGggPiBwYXJhbXMubGVuZ3RoICYmICEobWV0aG9kICYmIG1ldGhvZC52YXJpYWRpYykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRvbyBtYW55IGFyZ3VtZW50cyAobWV0aG9kIGFjY2VwdHMgJHtwYXJhbXMubGVuZ3RofSBwYXJhbWV0ZXJzLCBnb3QgJHthcmdzLmxlbmd0aH0gYXJndW1lbnRzKWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBwYXJhbSA9IHBhcmFtc1tpXTtcbiAgICAgIGNvbnN0IGFyZyA9IGFyZ3NbaV07XG5cbiAgICAgIGlmIChwYXJhbS52YXJpYWRpYykge1xuICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCA8PSBpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIE5vIHZhcmFyZyB3YXMgcHJvdmlkZWRcbiAgICAgICAgZm9yIChsZXQgaiA9IGk7IGogPCBwYXJhbXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBpZiAoIXBhcmFtLm9wdGlvbmFsICYmIHBhcmFtc1tqXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBVbmV4cGVjdGVkICd1bmRlZmluZWQnIHZhbHVlIGF0IGluZGV4ICR7XG4gICAgICAgICAgICAgICAgaiAtIGlcbiAgICAgICAgICAgICAgfSBvZiB2YXJpYWRpYyBhcmd1bWVudCAnJHtcbiAgICAgICAgICAgICAgICBwYXJhbS5uYW1lXG4gICAgICAgICAgICAgIH0nIG9mIHR5cGUgJyR7c3BlYy5kZXNjcmliZVR5cGVSZWZlcmVuY2UocGFyYW0udHlwZSl9J2AsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghcGFyYW0ub3B0aW9uYWwgJiYgYXJnID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBOb3QgZW5vdWdoIGFyZ3VtZW50cy4gTWlzc2luZyBhcmd1bWVudCBmb3IgdGhlIHJlcXVpcmVkIHBhcmFtZXRlciAnJHtcbiAgICAgICAgICAgIHBhcmFtLm5hbWVcbiAgICAgICAgICB9JyBvZiB0eXBlICcke3NwZWMuZGVzY3JpYmVUeXBlUmVmZXJlbmNlKHBhcmFtLnR5cGUpfSdgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2Fzc2VtYmx5Rm9yKGFzc2VtYmx5TmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYXNzZW1ibHkgPSB0aGlzLmFzc2VtYmxpZXNbYXNzZW1ibHlOYW1lXTtcbiAgICBpZiAoIWFzc2VtYmx5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGFzc2VtYmx5OiAke2Fzc2VtYmx5TmFtZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGFzc2VtYmx5O1xuICB9XG5cbiAgcHJpdmF0ZSBfZmluZFN5bWJvbChmcW46IHN0cmluZykge1xuICAgIGNvbnN0IFthc3NlbWJseU5hbWUsIC4uLnBhcnRzXSA9IGZxbi5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGFzc2VtYmx5ID0gdGhpcy5fYXNzZW1ibHlGb3IoYXNzZW1ibHlOYW1lKTtcblxuICAgIGxldCBjdXJyID0gYXNzZW1ibHkuY2xvc3VyZTtcbiAgICB3aGlsZSAocGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbmFtZSA9IHBhcnRzLnNoaWZ0KCk7XG4gICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGN1cnIgPSBjdXJyW25hbWVdO1xuICAgIH1cbiAgICBpZiAoIWN1cnIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgc3ltYm9sICR7ZnFufWApO1xuICAgIH1cbiAgICByZXR1cm4gY3VycjtcbiAgfVxuXG4gIHByaXZhdGUgX3R5cGVJbmZvRm9yRnFuKGZxbjogc3RyaW5nKTogc3BlYy5UeXBlIHtcbiAgICBjb25zdCBjb21wb25lbnRzID0gZnFuLnNwbGl0KCcuJyk7XG4gICAgY29uc3QgbW9kdWxlTmFtZSA9IGNvbXBvbmVudHNbMF07XG5cbiAgICBjb25zdCBhc3NlbWJseSA9IHRoaXMuYXNzZW1ibGllc1ttb2R1bGVOYW1lXTtcbiAgICBpZiAoIWFzc2VtYmx5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZHVsZSAnJHttb2R1bGVOYW1lfScgbm90IGZvdW5kYCk7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZXMgPSBhc3NlbWJseS5tZXRhZGF0YS50eXBlcyA/PyB7fTtcbiAgICBjb25zdCBmcW5JbmZvID0gdHlwZXNbZnFuXTtcbiAgICBpZiAoIWZxbkluZm8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVHlwZSAnJHtmcW59JyBub3QgZm91bmRgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnFuSW5mbztcbiAgfVxuXG4gIHByaXZhdGUgX3R5cGVJbmZvRm9yTWV0aG9kKFxuICAgIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgICBmcW46IHN0cmluZyxcbiAgICBpbnRlcmZhY2VzPzogc3RyaW5nW10sXG4gICk6IHNwZWMuTWV0aG9kIHtcbiAgICBjb25zdCB0aSA9IHRoaXMuX3RyeVR5cGVJbmZvRm9yTWV0aG9kKG1ldGhvZE5hbWUsIGZxbiwgaW50ZXJmYWNlcyk7XG4gICAgaWYgKCF0aSkge1xuICAgICAgY29uc3QgYWRkZW5kdW0gPVxuICAgICAgICBpbnRlcmZhY2VzICYmIGludGVyZmFjZXMubGVuZ3RoID4gMFxuICAgICAgICAgID8gYCBvciBpbnRlcmZhY2UocykgJHtpbnRlcmZhY2VzLmpvaW4oJywgJyl9YFxuICAgICAgICAgIDogJyc7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDbGFzcyAke2Zxbn0ke2FkZGVuZHVtfSBkb2Vzbid0IGhhdmUgYSBtZXRob2QgJyR7bWV0aG9kTmFtZX0nYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aTtcbiAgfVxuXG4gIHByaXZhdGUgX3RyeVR5cGVJbmZvRm9yTWV0aG9kKFxuICAgIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgICBjbGFzc0Zxbjogc3RyaW5nLFxuICAgIGludGVyZmFjZXM6IHN0cmluZ1tdID0gW10sXG4gICk6IHNwZWMuTWV0aG9kIHwgdW5kZWZpbmVkIHtcbiAgICBmb3IgKGNvbnN0IGZxbiBvZiBbY2xhc3NGcW4sIC4uLmludGVyZmFjZXNdKSB7XG4gICAgICBpZiAoZnFuID09PSAnT2JqZWN0Jykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHR5cGVpbmZvID0gdGhpcy5fdHlwZUluZm9Gb3JGcW4oZnFuKTtcblxuICAgICAgY29uc3QgbWV0aG9kcyA9XG4gICAgICAgICh0eXBlaW5mbyBhcyBzcGVjLkNsYXNzVHlwZSB8IHNwZWMuSW50ZXJmYWNlVHlwZSkubWV0aG9kcyA/PyBbXTtcblxuICAgICAgZm9yIChjb25zdCBtIG9mIG1ldGhvZHMpIHtcbiAgICAgICAgaWYgKG0ubmFtZSA9PT0gbWV0aG9kTmFtZSkge1xuICAgICAgICAgIHJldHVybiBtO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHJlY3Vyc2lvbiB0byBwYXJlbnQgdHlwZSAoaWYgZXhpc3RzKVxuICAgICAgY29uc3QgYmFzZXMgPSBbXG4gICAgICAgICh0eXBlaW5mbyBhcyBzcGVjLkNsYXNzVHlwZSkuYmFzZSxcbiAgICAgICAgLi4uKCh0eXBlaW5mbyBhcyBzcGVjLkludGVyZmFjZVR5cGUpLmludGVyZmFjZXMgPz8gW10pLFxuICAgICAgXTtcbiAgICAgIGZvciAoY29uc3QgYmFzZSBvZiBiYXNlcykge1xuICAgICAgICBpZiAoIWJhc2UpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5fdHJ5VHlwZUluZm9Gb3JNZXRob2QobWV0aG9kTmFtZSwgYmFzZSk7XG4gICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIF90cnlUeXBlSW5mb0ZvclByb3BlcnR5KFxuICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgY2xhc3NGcW46IHN0cmluZyxcbiAgICBpbnRlcmZhY2VzOiBzdHJpbmdbXSA9IFtdLFxuICApOiBzcGVjLlByb3BlcnR5IHwgdW5kZWZpbmVkIHtcbiAgICBmb3IgKGNvbnN0IGZxbiBvZiBbY2xhc3NGcW4sIC4uLmludGVyZmFjZXNdKSB7XG4gICAgICBpZiAoZnFuID09PSB3aXJlLkVNUFRZX09CSkVDVF9GUU4pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCB0eXBlSW5mbyA9IHRoaXMuX3R5cGVJbmZvRm9yRnFuKGZxbik7XG5cbiAgICAgIGxldCBwcm9wZXJ0aWVzO1xuICAgICAgbGV0IGJhc2VzO1xuXG4gICAgICBpZiAoc3BlYy5pc0NsYXNzVHlwZSh0eXBlSW5mbykpIHtcbiAgICAgICAgY29uc3QgY2xhc3NUeXBlSW5mbyA9IHR5cGVJbmZvIGFzIHNwZWMuQ2xhc3NUeXBlO1xuICAgICAgICBwcm9wZXJ0aWVzID0gY2xhc3NUeXBlSW5mby5wcm9wZXJ0aWVzO1xuICAgICAgICBiYXNlcyA9IGNsYXNzVHlwZUluZm8uYmFzZSA/IFtjbGFzc1R5cGVJbmZvLmJhc2VdIDogW107XG4gICAgICB9IGVsc2UgaWYgKHNwZWMuaXNJbnRlcmZhY2VUeXBlKHR5cGVJbmZvKSkge1xuICAgICAgICBjb25zdCBpbnRlcmZhY2VUeXBlSW5mbyA9IHR5cGVJbmZvIGFzIHNwZWMuSW50ZXJmYWNlVHlwZTtcbiAgICAgICAgcHJvcGVydGllcyA9IGludGVyZmFjZVR5cGVJbmZvLnByb3BlcnRpZXM7XG4gICAgICAgIGJhc2VzID0gaW50ZXJmYWNlVHlwZUluZm8uaW50ZXJmYWNlcyA/PyBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVHlwZSBvZiBraW5kICR7dHlwZUluZm8ua2luZH0gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0aWVzYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBwIG9mIHByb3BlcnRpZXMgPz8gW10pIHtcbiAgICAgICAgaWYgKHAubmFtZSA9PT0gcHJvcGVydHkpIHtcbiAgICAgICAgICByZXR1cm4gcDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyByZWN1cnNlIHRvIHBhcmVudCB0eXBlIChpZiBleGlzdHMpXG4gICAgICBmb3IgKGNvbnN0IGJhc2VGcW4gb2YgYmFzZXMpIHtcbiAgICAgICAgY29uc3QgcmV0ID0gdGhpcy5fdHJ5VHlwZUluZm9Gb3JQcm9wZXJ0eShwcm9wZXJ0eSwgYmFzZUZxbik7XG4gICAgICAgIGlmIChyZXQpIHtcbiAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgX3R5cGVJbmZvRm9yUHJvcGVydHkoXG4gICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICBmcW46IHN0cmluZyxcbiAgICBpbnRlcmZhY2VzPzogc3RyaW5nW10sXG4gICk6IHNwZWMuUHJvcGVydHkge1xuICAgIGNvbnN0IHR5cGVJbmZvID0gdGhpcy5fdHJ5VHlwZUluZm9Gb3JQcm9wZXJ0eShwcm9wZXJ0eSwgZnFuLCBpbnRlcmZhY2VzKTtcbiAgICBpZiAoIXR5cGVJbmZvKSB7XG4gICAgICBjb25zdCBhZGRlbmR1bSA9XG4gICAgICAgIGludGVyZmFjZXMgJiYgaW50ZXJmYWNlcy5sZW5ndGggPiAwXG4gICAgICAgICAgPyBgIG9yIGludGVyZmFjZShzKSAke2ludGVyZmFjZXMuam9pbignLCAnKX1gXG4gICAgICAgICAgOiAnJztcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFR5cGUgJHtmcW59JHthZGRlbmR1bX0gZG9lc24ndCBoYXZlIGEgcHJvcGVydHkgJyR7cHJvcGVydHl9J2AsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZUluZm87XG4gIH1cblxuICBwcml2YXRlIF90b1NhbmRib3godjogYW55LCBleHBlY3RlZFR5cGU6IHdpcmUuT3B0aW9uYWxWYWx1ZU9yVm9pZCk6IGFueSB7XG4gICAgY29uc3Qgc2VyVHlwZXMgPSB3aXJlLnNlcmlhbGl6YXRpb25UeXBlKFxuICAgICAgZXhwZWN0ZWRUeXBlLFxuICAgICAgdGhpcy5fdHlwZUluZm9Gb3JGcW4uYmluZCh0aGlzKSxcbiAgICApO1xuICAgIHRoaXMuX2RlYnVnKCd0b1NhbmRib3gnLCB2LCBKU09OLnN0cmluZ2lmeShzZXJUeXBlcykpO1xuXG4gICAgY29uc3QgaG9zdDogd2lyZS5TZXJpYWxpemVySG9zdCA9IHtcbiAgICAgIG9iamVjdHM6IHRoaXMub2JqZWN0cyxcbiAgICAgIGRlYnVnOiB0aGlzLl9kZWJ1Zy5iaW5kKHRoaXMpLFxuICAgICAgZmluZFN5bWJvbDogdGhpcy5fZmluZFN5bWJvbC5iaW5kKHRoaXMpLFxuICAgICAgbG9va3VwVHlwZTogdGhpcy5fdHlwZUluZm9Gb3JGcW4uYmluZCh0aGlzKSxcbiAgICAgIHJlY3Vyc2U6IHRoaXMuX3RvU2FuZGJveC5iaW5kKHRoaXMpLFxuICAgIH07XG5cbiAgICBjb25zdCBlcnJvcnMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgeyBzZXJpYWxpemF0aW9uQ2xhc3MsIHR5cGVSZWYgfSBvZiBzZXJUeXBlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHdpcmUuU0VSSUFMSVpFUlNbc2VyaWFsaXphdGlvbkNsYXNzXS5kZXNlcmlhbGl6ZShcbiAgICAgICAgICB2LFxuICAgICAgICAgIHR5cGVSZWYsXG4gICAgICAgICAgaG9zdCxcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gSWYgbm8gdW5pb24gKDk5JSBjYXNlKSwgcmV0aHJvdyBpbW1lZGlhdGVseSB0byBwcmVzZXJ2ZSBzdGFjayB0cmFjZVxuICAgICAgICBpZiAoc2VyVHlwZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBlcnJvcnMucHVzaChlLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBWYWx1ZSBkaWQgbm90IG1hdGNoIGFueSB0eXBlIGluIHVuaW9uOiAke2Vycm9ycy5qb2luKCcsICcpfWAsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2Zyb21TYW5kYm94KHY6IGFueSwgdGFyZ2V0VHlwZTogd2lyZS5PcHRpb25hbFZhbHVlT3JWb2lkKTogYW55IHtcbiAgICBjb25zdCBzZXJUeXBlcyA9IHdpcmUuc2VyaWFsaXphdGlvblR5cGUoXG4gICAgICB0YXJnZXRUeXBlLFxuICAgICAgdGhpcy5fdHlwZUluZm9Gb3JGcW4uYmluZCh0aGlzKSxcbiAgICApO1xuICAgIHRoaXMuX2RlYnVnKCdmcm9tU2FuZGJveCcsIHYsIEpTT04uc3RyaW5naWZ5KHNlclR5cGVzKSk7XG5cbiAgICBjb25zdCBob3N0OiB3aXJlLlNlcmlhbGl6ZXJIb3N0ID0ge1xuICAgICAgb2JqZWN0czogdGhpcy5vYmplY3RzLFxuICAgICAgZGVidWc6IHRoaXMuX2RlYnVnLmJpbmQodGhpcyksXG4gICAgICBmaW5kU3ltYm9sOiB0aGlzLl9maW5kU3ltYm9sLmJpbmQodGhpcyksXG4gICAgICBsb29rdXBUeXBlOiB0aGlzLl90eXBlSW5mb0ZvckZxbi5iaW5kKHRoaXMpLFxuICAgICAgcmVjdXJzZTogdGhpcy5fZnJvbVNhbmRib3guYmluZCh0aGlzKSxcbiAgICB9O1xuXG4gICAgY29uc3QgZXJyb3JzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IHsgc2VyaWFsaXphdGlvbkNsYXNzLCB0eXBlUmVmIH0gb2Ygc2VyVHlwZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB3aXJlLlNFUklBTElaRVJTW3NlcmlhbGl6YXRpb25DbGFzc10uc2VyaWFsaXplKHYsIHR5cGVSZWYsIGhvc3QpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBJZiBubyB1bmlvbiAoOTklIGNhc2UpLCByZXRocm93IGltbWVkaWF0ZWx5IHRvIHByZXNlcnZlIHN0YWNrIHRyYWNlXG4gICAgICAgIGlmIChzZXJUeXBlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGVycm9ycy5wdXNoKGUubWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFZhbHVlIGRpZCBub3QgbWF0Y2ggYW55IHR5cGUgaW4gdW5pb246ICR7ZXJyb3JzLmpvaW4oJywgJyl9YCxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfdG9TYW5kYm94VmFsdWVzKHhzOiBhbnlbXSwgcGFyYW1ldGVycz86IHNwZWMuUGFyYW1ldGVyW10pIHtcbiAgICByZXR1cm4gdGhpcy5fYm94VW5ib3hQYXJhbWV0ZXJzKHhzLCBwYXJhbWV0ZXJzLCB0aGlzLl90b1NhbmRib3guYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIF9mcm9tU2FuZGJveFZhbHVlcyh4czogYW55W10sIHBhcmFtZXRlcnM/OiBzcGVjLlBhcmFtZXRlcltdKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JveFVuYm94UGFyYW1ldGVycyhcbiAgICAgIHhzLFxuICAgICAgcGFyYW1ldGVycyxcbiAgICAgIHRoaXMuX2Zyb21TYW5kYm94LmJpbmQodGhpcyksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2JveFVuYm94UGFyYW1ldGVycyhcbiAgICB4czogYW55W10sXG4gICAgcGFyYW1ldGVyczogc3BlYy5QYXJhbWV0ZXJbXSB8IHVuZGVmaW5lZCxcbiAgICBib3hVbmJveDogKHg6IGFueSwgdDogd2lyZS5PcHRpb25hbFZhbHVlT3JWb2lkKSA9PiBhbnksXG4gICkge1xuICAgIHBhcmFtZXRlcnMgPSBbLi4uKHBhcmFtZXRlcnMgPz8gW10pXTtcbiAgICBjb25zdCB2YXJpYWRpYyA9XG4gICAgICBwYXJhbWV0ZXJzLmxlbmd0aCA+IDAgJiYgISFwYXJhbWV0ZXJzW3BhcmFtZXRlcnMubGVuZ3RoIC0gMV0udmFyaWFkaWM7XG4gICAgLy8gUmVwZWF0IHRoZSBsYXN0ICh2YXJpYWRpYykgdHlwZSB0byBtYXRjaCB0aGUgbnVtYmVyIG9mIGFjdHVhbCBhcmd1bWVudHNcbiAgICB3aGlsZSAodmFyaWFkaWMgJiYgcGFyYW1ldGVycy5sZW5ndGggPCB4cy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtZXRlcnMucHVzaChwYXJhbWV0ZXJzW3BhcmFtZXRlcnMubGVuZ3RoIC0gMV0pO1xuICAgIH1cbiAgICBpZiAoeHMubGVuZ3RoID4gcGFyYW1ldGVycy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEFyZ3VtZW50IGxpc3QgKCR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgeHMsXG4gICAgICAgICl9KSBub3Qgc2FtZSBzaXplIGFzIGV4cGVjdGVkIGFyZ3VtZW50IGxpc3QgKGxlbmd0aCAke1xuICAgICAgICAgIHBhcmFtZXRlcnMubGVuZ3RoXG4gICAgICAgIH0pYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB4cy5tYXAoKHgsIGkpID0+IGJveFVuYm94KHgsIHBhcmFtZXRlcnMhW2ldKSk7XG4gIH1cblxuICBwcml2YXRlIF9kZWJ1ZyguLi5hcmdzOiBhbnlbXSkge1xuICAgIGlmICh0aGlzLnRyYWNlRW5hYmxlZCkge1xuICAgICAgY29uc29sZS5lcnJvcignW0Bqc2lpL2tlcm5lbF0nLCAuLi5hcmdzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyB0aGF0IGBmbmAgaXMgY2FsbGVkIGFuZCBkZWZlbmRzIGFnYWluc3QgYmVnaW5uaW5nIHRvIGludm9rZVxuICAgKiBhc3luYyBtZXRob2RzIHVudGlsIGZuIGZpbmlzaGVzIChzdWNjZXNzZnVsbHkgb3Igbm90KS5cbiAgICovXG4gIHByaXZhdGUgX2Vuc3VyZVN5bmM8VD4oZGVzYzogc3RyaW5nLCBmbjogKCkgPT4gVCk6IFQge1xuICAgIHRoaXMuc3luY0luUHJvZ3Jlc3MgPSBkZXNjO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZGVsZXRlIHRoaXMuc3luY0luUHJvZ3Jlc3M7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZmluZFByb3BlcnR5VGFyZ2V0KG9iajogYW55LCBwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3VwZXJQcm9wID0gdGhpcy5fZ2V0U3VwZXJQcm9wZXJ0eU5hbWUocHJvcGVydHkpO1xuICAgIGlmIChzdXBlclByb3AgaW4gb2JqKSB7XG4gICAgICByZXR1cm4gc3VwZXJQcm9wO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcGVydHk7XG4gIH1cblxuICAvL1xuICAvLyB0eXBlIGluZm9ybWF0aW9uXG4gIC8vXG5cbiAgcHJpdmF0ZSBfbWFrZWNiaWQoKSB7XG4gICAgcmV0dXJuIGBqc2lpOjpjYWxsYmFjazo6JHt0aGlzLm5leHRpZCsrfWA7XG4gIH1cblxuICBwcml2YXRlIF9tYWtlcHJpZCgpIHtcbiAgICByZXR1cm4gYGpzaWk6OnByb21pc2U6OiR7dGhpcy5uZXh0aWQrK31gO1xuICB9XG5cbiAgcHJpdmF0ZSBfd3JhcFNhbmRib3hDb2RlPFQ+KGZuOiAoKSA9PiBUKTogVCB7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgYXJiaXRyYXJ5IGNvZGUgaW4gYSBWTSBzYW5kYm94LlxuICAgKlxuICAgKiBAcGFyYW0gY29kZSAgICAgICBKYXZhU2NyaXB0IGNvZGUgdG8gYmUgZXhlY3V0ZWQgaW4gdGhlIFZNXG4gICAqIEBwYXJhbSBzYW5kYm94ICAgIGEgVk0gY29udGV4dCB0byB1c2UgZm9yIHJ1bm5pbmcgdGhlIGNvZGVcbiAgICogQHBhcmFtIHNvdXJjZU1hcHMgc291cmNlIG1hcHMgdG8gYmUgdXNlZCBpbiBjYXNlIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd25cbiAgICogQHBhcmFtIGZpbGVuYW1lICAgdGhlIGZpbGUgbmFtZSB0byB1c2UgZm9yIHRoZSBleGVjdXRlZCBjb2RlXG4gICAqXG4gICAqIEByZXR1cm5zIHRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyB0aGUgY29kZVxuICAgKi9cbiAgcHJpdmF0ZSBfZXhlY3V0ZShjb2RlOiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzY3JpcHQgPSBuZXcgdm0uU2NyaXB0KGNvZGUsIHsgZmlsZW5hbWUgfSk7XG4gICAgcmV0dXJuIHNjcmlwdC5ydW5JbkNvbnRleHQodGhpcy5zYW5kYm94LCB7IGRpc3BsYXlFcnJvcnM6IHRydWUgfSk7XG4gIH1cbn1cblxuaW50ZXJmYWNlIENhbGxiYWNrIHtcbiAgb2JqcmVmOiBhcGkuT2JqUmVmO1xuICBvdmVycmlkZTogYXBpLk1ldGhvZE92ZXJyaWRlO1xuICBhcmdzOiBhbnlbXTtcbiAgZXhwZWN0ZWRSZXR1cm5UeXBlOiB3aXJlLk9wdGlvbmFsVmFsdWVPclZvaWQ7XG5cbiAgLy8gY29tcGxldGlvbiBjYWxsYmFja3NcbiAgc3VjY2VlZDogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk7XG4gIGZhaWw6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55O1xufVxuXG5pbnRlcmZhY2UgQXN5bmNJbnZvY2F0aW9uIHtcbiAgbWV0aG9kOiBzcGVjLk1ldGhvZDtcbiAgcHJvbWlzZTogUHJvbWlzZTxhbnk+O1xufVxuXG5jbGFzcyBBc3NlbWJseSB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgbWV0YWRhdGE6IHNwZWMuQXNzZW1ibHksXG4gICAgcHVibGljIHJlYWRvbmx5IGNsb3N1cmU6IGFueSxcbiAgKSB7fVxufVxuIl19
|
|
920
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2VybmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsia2VybmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFtQztBQUNuQyxvQ0FBb0M7QUFDcEMsK0JBQStCO0FBQy9CLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsMkJBQTJCO0FBQzNCLHlCQUF5QjtBQUV6Qiw2QkFBNkI7QUFDN0IsK0JBQWtDO0FBQ2xDLHVDQUE0RDtBQUM1RCxvQ0FBb0M7QUFDcEMsd0NBQXdDO0FBRXhDLE1BQWEsTUFBTTtJQWlCakI7Ozs7OztPQU1HO0lBQ0gsWUFBMEIsZUFBZ0Q7UUFDeEUsZ0VBQWdFO1FBQ2hFLHFEQUFxRDtRQUY3QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUM7UUF2QjFFOztXQUVHO1FBQ0ksaUJBQVksR0FBRyxLQUFLLENBQUM7UUFFcEIsZUFBVSxHQUFpQyxFQUFFLENBQUM7UUFDckMsWUFBTyxHQUFHLElBQUkscUJBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLFFBQUcsR0FBaUMsRUFBRSxDQUFDO1FBQ3ZDLFlBQU8sR0FBaUMsRUFBRSxDQUFDO1FBQzNDLGFBQVEsR0FBd0MsRUFBRSxDQUFDO1FBQ25ELFdBQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxrREFBa0Q7UUFpQnhFLDJEQUEyRDtRQUUzRCxnRkFBZ0Y7UUFDaEYsZ0ZBQWdGO1FBQ2hGLDhEQUE4RDtRQUM5RCwrRUFBK0U7UUFDL0UsZUFBZTtRQUNmLG9HQUFvRztRQUNwRyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNsRCxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFaEUsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFF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UixRQUFRLENBQWU7UUFDdkIsWUFBTyxHQUFQLE9BQU8sQ0FBSztJQUMzQixDQUFDO0NBQ0wiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzcGVjIGZyb20gJ0Bqc2lpL3NwZWMnO1xuaW1wb3J0ICogYXMgY3AgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgdGFyIGZyb20gJ3Rhcic7XG5pbXBvcnQgKiBhcyB2bSBmcm9tICd2bSc7XG5cbmltcG9ydCAqIGFzIGFwaSBmcm9tICcuL2FwaSc7XG5pbXBvcnQgeyBUT0tFTl9SRUYgfSBmcm9tICcuL2FwaSc7XG5pbXBvcnQgeyBPYmplY3RUYWJsZSwgdGFnSnNpaUNvbnN0cnVjdG9yIH0gZnJvbSAnLi9vYmplY3RzJztcbmltcG9ydCAqIGFzIG9uRXhpdCBmcm9tICcuL29uLWV4aXQnO1xuaW1wb3J0ICogYXMgd2lyZSBmcm9tICcuL3NlcmlhbGl6YXRpb24nO1xuXG5leHBvcnQgY2xhc3MgS2VybmVsIHtcbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIGZvciB2ZXJib3NlIGRlYnVnZ2luZy5cbiAgICovXG4gIHB1YmxpYyB0cmFjZUVuYWJsZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGFzc2VtYmxpZXM6IHsgW25hbWU6IHN0cmluZ106IEFzc2VtYmx5IH0gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBvYmplY3RzID0gbmV3IE9iamVjdFRhYmxlKHRoaXMuX3R5cGVJbmZvRm9yRnFuLmJpbmQodGhpcykpO1xuICBwcml2YXRlIGNiczogeyBbY2JpZDogc3RyaW5nXTogQ2FsbGJhY2sgfSA9IHt9O1xuICBwcml2YXRlIHdhaXRpbmc6IHsgW2NiaWQ6IHN0cmluZ106IENhbGxiYWNrIH0gPSB7fTtcbiAgcHJpdmF0ZSBwcm9taXNlczogeyBbcHJpZDogc3RyaW5nXTogQXN5bmNJbnZvY2F0aW9uIH0gPSB7fTtcbiAgcHJpdmF0ZSBuZXh0aWQgPSAyMDAwMDsgLy8gaW5jcmVtZW50aW5nIGNvdW50ZXIgZm9yIG9iamlkLCBjYmlkLCBwcm9taXNlaWRcbiAgcHJpdmF0ZSBzeW5jSW5Qcm9ncmVzcz86IHN0cmluZzsgLy8gZm9yYmlkcyBhc3luYyBjYWxscyAoYmVnaW4pIHdoaWxlIHByb2Nlc3Npbmcgc3luYyBjYWxscyAoZ2V0L3NldC9pbnZva2UpXG4gIHByaXZhdGUgaW5zdGFsbERpcj86IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IHNhbmRib3g6IHZtLkNvbnRleHQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBqc2lpIGtlcm5lbCBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFja0hhbmRsZXIgVGhpcyBoYW5kbGVyIGlzIGludm9rZWQgd2hlbiBhIHN5bmNocm9ub3VzIGNhbGxiYWNrIGlzIGNhbGxlZC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICBJdCdzIHJlc3BvbnNpYmlsaXR5IGlzIHRvIGV4ZWN1dGUgdGhlIGNhbGxiYWNrIGFuZCByZXR1cm4gaXQnc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCAob3IgdGhyb3cgYW4gZXJyb3IpLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyBjYWxsYmFja0hhbmRsZXI6IChjYWxsYmFjazogYXBpLkNhbGxiYWNrKSA9PiBhbnkpIHtcbiAgICAvLyBgc2V0SW1tZWRpYXRlYCBpcyByZXF1aXJlZCBmb3IgdGVzdHMgdG8gcGFzcyAoaXQgaXMgb3RoZXJ3aXNlXG4gICAgLy8gaW1wb3NzaWJsZSB0byB3YWl0IGZvciBpbi1WTSBwcm9taXNlcyB0byBjb21wbGV0ZSlcblxuICAgIC8vIGBCdWZmZXJgIGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgc2ltcGxlLXJlc291cmNlLWJ1bmRsZXIuXG5cbiAgICAvLyBIQUNLOiB3aGVuIHdlIHdlYnBhY2sgQGpzaWkvcnVudGltZSwgYWxsIFwicmVxdWlyZVwiIHN0YXRlbWVudHMgZ2V0IHRyYW5zcGlsZWQsXG4gICAgLy8gc28gbW9kdWxlcyBjYW4gYmUgcmVzb2x2ZWQgd2l0aGluIHRoZSBwYWNrLiBIb3dldmVyLCBoZXJlIHdlIGFjdHVhbGx5IHdhbnQgdG9cbiAgICAvLyBsZXQgbG9hZGVkIG1vZHVsZXMgdG8gdXNlIHRoZSBuYXRpdmUgbm9kZSBcInJlcXVpcmVcIiBtZXRob2QuXG4gICAgLy8gSSB3b25kZXIgaWYgd2VicGFjayBoYXMgc29tZSBwcmFnbWEgdGhhdCBhbGxvd3Mgb3B0aW5nLW91dCBhdCBjZXJ0YWluIHBvaW50c1xuICAgIC8vIGluIHRoZSBjb2RlLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzLEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcbiAgICBjb25zdCBtb2R1bGVMb2FkID0gcmVxdWlyZSgnbW9kdWxlJykuTW9kdWxlLl9sb2FkO1xuICAgIGNvbnN0IG5vZGVSZXF1aXJlID0gKHA6IHN0cmluZykgPT4gbW9kdWxlTG9hZChwLCBtb2R1bGUsIGZhbHNlKTtcblxuICAgIHRoaXMuc2FuZGJveCA9IHZtLmNyZWF0ZUNvbnRleHQoe1xuICAgICAgQnVmZmVyLCAvLyB0byB1c2Ugc2ltcGxlLXJlc291cmNlLWJ1bmRsZXJcbiAgICAgIHNldEltbWVkaWF0ZSwgLy8gYXN5bmMgdGVzdHNcbiAgICAgIHJlcXVpcmU6IG5vZGVSZXF1aXJlLCAvLyBtb2R1bGVzIG5lZWQgdG8gXCJyZXF1aXJlXCJcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBsb2FkKHJlcTogYXBpLkxvYWRSZXF1ZXN0KTogYXBpLkxvYWRSZXNwb25zZSB7XG4gICAgdGhpcy5fZGVidWcoJ2xvYWQnLCByZXEpO1xuXG4gICAgaWYgKCdhc3NlbWJseScgaW4gcmVxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdgYXNzZW1ibHlgIGZpZWxkIGlzIGRlcHJlY2F0ZWQgZm9yIFwibG9hZFwiLCB1c2UgYG5hbWVgLCBgdmVyc2lvbmAgYW5kIGB0YXJiYWxsYCBpbnN0ZWFkJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcGtnbmFtZSA9IHJlcS5uYW1lO1xuICAgIGNvbnN0IHBrZ3ZlciA9IHJlcS52ZXJzaW9uO1xuXG4gICAgLy8gY2hlY2sgaWYgd2UgYWxyZWFkeSBoYXZlIHN1Y2ggYSBtb2R1bGVcbiAgICBjb25zdCBwYWNrYWdlRGlyID0gdGhpcy5fZ2V0UGFja2FnZURpcihwa2duYW1lKTtcbiAgICBpZiAoZnMucGF0aEV4aXN0c1N5bmMocGFja2FnZURpcikpIHtcbiAgICAgIC8vIG1vZHVsZSBleGlzdHMsIHZlcmlmeSB2ZXJzaW9uXG4gICAgICBjb25zdCBlcGtnID0gZnMucmVhZEpzb25TeW5jKHBhdGguam9pbihwYWNrYWdlRGlyLCAncGFja2FnZS5qc29uJykpO1xuICAgICAgaWYgKGVwa2cudmVyc2lvbiAhPT0gcGtndmVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgTXVsdGlwbGUgdmVyc2lvbnMgJHtwa2d2ZXJ9IGFuZCAke2Vwa2cudmVyc2lvbn0gb2YgdGhlIGAgK1xuICAgICAgICAgICAgYHBhY2thZ2UgJyR7cGtnbmFtZX0nIGNhbm5vdCBiZSBsb2FkZWQgdG9nZXRoZXIgc2luY2UgdGhpcyBpcyB1bnN1cHBvcnRlZCBieSBgICtcbiAgICAgICAgICAgICdzb21lIHJ1bnRpbWUgZW52aXJvbm1lbnRzJyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gc2FtZSB2ZXJzaW9uLCBuby1vcFxuICAgICAgdGhpcy5fZGVidWcoJ2xvb2sgdXAgYWxyZWFkeS1sb2FkZWQgYXNzZW1ibHknLCBwa2duYW1lKTtcbiAgICAgIGNvbnN0IGFzc20gPSB0aGlzLmFzc2VtYmxpZXNbcGtnbmFtZV07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFzc2VtYmx5OiBhc3NtLm1ldGFkYXRhLm5hbWUsXG4gICAgICAgIHR5cGVzOiBPYmplY3Qua2V5cyhhc3NtLm1ldGFkYXRhLnR5cGVzID8/IHt9KS5sZW5ndGgsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgaW5zdGFsbCBkaXJlY3RvcnkgKHRoZXJlIG1heSBiZSBzZXZlcmFsIHBhdGggY29tcG9uZW50cyBmb3IgQHNjb3BlZC9wYWNrYWdlcylcbiAgICBmcy5ta2RpcnBTeW5jKHBhY2thZ2VEaXIpO1xuXG4gICAgLy8gRm9yY2UgdW1hc2sgdG8gaGF2ZSBucG0taW5zdGFsbC1saWtlIHBlcm1pc3Npb25zXG4gICAgY29uc3Qgb3JpZ2luYWxVbWFzayA9IHByb2Nlc3MudW1hc2soMG8wMjIpO1xuICAgIHRyeSB7XG4gICAgICAvLyB1bnRhciB0aGUgYXJjaGl2ZSB0byBpdHMgZmluYWwgbG9jYXRpb25cbiAgICAgIHRhci5leHRyYWN0KHtcbiAgICAgICAgY3dkOiBwYWNrYWdlRGlyLFxuICAgICAgICBmaWxlOiByZXEudGFyYmFsbCxcbiAgICAgICAgc3RyaWN0OiB0cnVlLFxuICAgICAgICBzdHJpcDogMSwgLy8gUmVtb3ZlcyB0aGUgJ3BhY2thZ2UvJyBwYXRoIGVsZW1lbnQgZnJvbSBlbnRyaWVzXG4gICAgICAgIHN5bmM6IHRydWUsXG4gICAgICAgIHVubGluazogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBSZXNldCB1bWFzayB0byB0aGUgaW5pdGlhbCB2YWx1ZVxuICAgICAgcHJvY2Vzcy51bWFzayhvcmlnaW5hbFVtYXNrKTtcbiAgICB9XG5cbiAgICAvLyByZWFkIC5qc2lpIG1ldGFkYXRhIGZyb20gdGhlIHJvb3Qgb2YgdGhlIHBhY2thZ2VcbiAgICBjb25zdCBqc2lpTWV0YWRhdGFGaWxlID0gcGF0aC5qb2luKHBhY2thZ2VEaXIsIHNwZWMuU1BFQ19GSUxFX05BTUUpO1xuICAgIGlmICghZnMucGF0aEV4aXN0c1N5bmMoanNpaU1ldGFkYXRhRmlsZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFBhY2thZ2UgdGFyYmFsbCAke3JlcS50YXJiYWxsfSBtdXN0IGhhdmUgYSBmaWxlIG5hbWVkICR7c3BlYy5TUEVDX0ZJTEVfTkFNRX0gYXQgdGhlIHJvb3RgLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgYXNzbVNwZWMgPSBmcy5yZWFkSnNvblN5bmMoanNpaU1ldGFkYXRhRmlsZSkgYXMgc3BlYy5Bc3NlbWJseTtcblxuICAgIC8vIGxvYWQgdGhlIG1vZHVsZSBhbmQgY2FwdHVyZSBpdCdzIGNsb3N1cmVcbiAgICBjb25zdCBjbG9zdXJlID0gdGhpcy5fZXhlY3V0ZShcbiAgICAgIGByZXF1aXJlKFN0cmluZy5yYXdcXGAke3BhY2thZ2VEaXJ9XFxgKWAsXG4gICAgICBwYWNrYWdlRGlyLFxuICAgICk7XG4gICAgY29uc3QgYXNzbSA9IG5ldyBBc3NlbWJseShhc3NtU3BlYywgY2xvc3VyZSk7XG4gICAgdGhpcy5fYWRkQXNzZW1ibHkoYXNzbSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYXNzZW1ibHk6IGFzc21TcGVjLm5hbWUsXG4gICAgICB0eXBlczogT2JqZWN0LmtleXMoYXNzbVNwZWMudHlwZXMgPz8ge30pLmxlbmd0aCxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGludm9rZUJpblNjcmlwdChcbiAgICByZXE6IGFwaS5JbnZva2VTY3JpcHRSZXF1ZXN0LFxuICApOiBhcGkuSW52b2tlU2NyaXB0UmVzcG9uc2Uge1xuICAgIGNvbnN0IHBhY2thZ2VEaXIgPSB0aGlzLl9nZXRQYWNrYWdlRGlyKHJlcS5hc3NlbWJseSk7XG4gICAgaWYgKGZzLnBhdGhFeGlzdHNTeW5jKHBhY2thZ2VEaXIpKSB7XG4gICAgICAvLyBtb2R1bGUgZXhpc3RzLCB2ZXJpZnkgdmVyc2lvblxuICAgICAgY29uc3QgZXBrZyA9IGZzLnJlYWRKc29uU3luYyhwYXRoLmpvaW4ocGFja2FnZURpciwgJ3BhY2thZ2UuanNvbicpKTtcblxuICAgICAgaWYgKCFlcGtnLmJpbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIG5vIGJpbiBzY3JpcHRzIGRlZmluZWQgZm9yIHRoaXMgcGFja2FnZS4nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2NyaXB0UGF0aCA9IGVwa2cuYmluW3JlcS5zY3JpcHRdO1xuXG4gICAgICBpZiAoIWVwa2cuYmluKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2NyaXB0IHdpdGggbmFtZSAke3JlcS5zY3JpcHR9IHdhcyBub3QgZGVmaW5lZC5gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gY3Auc3Bhd25TeW5jKFxuICAgICAgICBwYXRoLmpvaW4ocGFja2FnZURpciwgc2NyaXB0UGF0aCksXG4gICAgICAgIHJlcS5hcmdzID8/IFtdLFxuICAgICAgICB7XG4gICAgICAgICAgZW5jb2Rpbmc6ICd1dGYtOCcsXG4gICAgICAgICAgZW52OiB7XG4gICAgICAgICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgY3VycmVudCBOT0RFX09QVElPTlMgYXJlIGhvbm9yZWQgaWYgd2Ugc2hlbGwgb3V0IHRvIG5vZGVcbiAgICAgICAgICAgIE5PREVfT1BUSU9OUzogcHJvY2Vzcy5leGVjQXJndi5qb2luKCcgJyksXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgXCJ0aGlzXCIgbm9kZSBpcyBhaGVhZCBvZiAkUEFUSCBqdXN0IGluIGNhc2VcbiAgICAgICAgICAgIFBBVEg6IGAke3BhdGguZGlybmFtZShwcm9jZXNzLmV4ZWNQYXRoKX06JHtwcm9jZXNzLmVudi5QQVRIfWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzaGVsbDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0ZG91dDogcmVzdWx0LnN0ZG91dCxcbiAgICAgICAgc3RkZXJyOiByZXN1bHQuc3RkZXJyLFxuICAgICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMsXG4gICAgICAgIHNpZ25hbDogcmVzdWx0LnNpZ25hbCxcbiAgICAgIH07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgUGFja2FnZSB3aXRoIG5hbWUgJHtyZXEuYXNzZW1ibHl9IHdhcyBub3QgbG9hZGVkLmApO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZShyZXE6IGFwaS5DcmVhdGVSZXF1ZXN0KTogYXBpLkNyZWF0ZVJlc3BvbnNlIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlKHJlcSk7XG4gIH1cblxuICBwdWJsaWMgZGVsKHJlcTogYXBpLkRlbFJlcXVlc3QpOiBhcGkuRGVsUmVzcG9uc2Uge1xuICAgIGNvbnN0IHsgb2JqcmVmIH0gPSByZXE7XG5cbiAgICB0aGlzLl9kZWJ1ZygnZGVsJywgb2JqcmVmKTtcbiAgICB0aGlzLm9iamVjdHMuZGVsZXRlT2JqZWN0KG9ianJlZik7XG5cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBwdWJsaWMgc2dldChyZXE6IGFwaS5TdGF0aWNHZXRSZXF1ZXN0KTogYXBpLkdldFJlc3BvbnNlIHtcbiAgICBjb25zdCB7IGZxbiwgcHJvcGVydHkgfSA9IHJlcTtcbiAgICBjb25zdCBzeW1ib2wgPSBgJHtmcW59LiR7cHJvcGVydHl9YDtcbiAgICB0aGlzLl9kZWJ1Zygnc2dldCcsIHN5bWJvbCk7XG4gICAgY29uc3QgdGkgPSB0aGlzLl90eXBlSW5mb0ZvclByb3BlcnR5KHByb3BlcnR5LCBmcW4pO1xuXG4gICAgaWYgKCF0aS5zdGF0aWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcHJvcGVydHkgJHtzeW1ib2x9IGlzIG5vdCBzdGF0aWNgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLl9maW5kU3ltYm9sKGZxbik7XG5cbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2Vuc3VyZVN5bmMoYHByb3BlcnR5ICR7cHJvcGVydHl9YCwgKCkgPT5cbiAgICAgIHRoaXMuX3dyYXBTYW5kYm94Q29kZSgoKSA9PiBwcm90b3R5cGVbcHJvcGVydHldKSxcbiAgICApO1xuXG4gICAgdGhpcy5fZGVidWcoJ3ZhbHVlOicsIHZhbHVlKTtcbiAgICBjb25zdCByZXQgPSB0aGlzLl9mcm9tU2FuZGJveCh2YWx1ZSwgdGkpO1xuICAgIHRoaXMuX2RlYnVnKCdyZXQnLCByZXQpO1xuICAgIHJldHVybiB7IHZhbHVlOiByZXQgfTtcbiAgfVxuXG4gIHB1YmxpYyBzc2V0KHJlcTogYXBpLlN0YXRpY1NldFJlcXVlc3QpOiBhcGkuU2V0UmVzcG9uc2Uge1xuICAgIGNvbnN0IHsgZnFuLCBwcm9wZXJ0eSwgdmFsdWUgfSA9IHJlcTtcbiAgICBjb25zdCBzeW1ib2wgPSBgJHtmcW59LiR7cHJvcGVydHl9YDtcbiAgICB0aGlzLl9kZWJ1Zygnc3NldCcsIHN5bWJvbCk7XG4gICAgY29uc3QgdGkgPSB0aGlzLl90eXBlSW5mb0ZvclByb3BlcnR5KHByb3BlcnR5LCBmcW4pO1xuXG4gICAgaWYgKCF0aS5zdGF0aWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcHJvcGVydHkgJHtzeW1ib2x9IGlzIG5vdCBzdGF0aWNgKTtcbiAgICB9XG5cbiAgICBpZiAodGkuaW1tdXRhYmxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHN0YXRpYyBwcm9wZXJ0eSAke3N5bWJvbH0gaXMgcmVhZG9ubHlgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLl9maW5kU3ltYm9sKGZxbik7XG5cbiAgICB0aGlzLl9lbnN1cmVTeW5jKGBwcm9wZXJ0eSAke3Byb3BlcnR5fWAsICgpID0+XG4gICAgICB0aGlzLl93cmFwU2FuZGJveENvZGUoXG4gICAgICAgICgpID0+IChwcm90b3R5cGVbcHJvcGVydHldID0gdGhpcy5fdG9TYW5kYm94KHZhbHVlLCB0aSkpLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcHVibGljIGdldChyZXE6IGFwaS5HZXRSZXF1ZXN0KTogYXBpLkdldFJlc3BvbnNlIHtcbiAgICBjb25zdCB7IG9ianJlZiwgcHJvcGVydHkgfSA9IHJlcTtcbiAgICB0aGlzLl9kZWJ1ZygnZ2V0Jywgb2JqcmVmLCBwcm9wZXJ0eSk7XG4gICAgY29uc3QgeyBpbnN0YW5jZSwgZnFuLCBpbnRlcmZhY2VzIH0gPSB0aGlzLm9iamVjdHMuZmluZE9iamVjdChvYmpyZWYpO1xuICAgIGNvbnN0IHRpID0gdGhpcy5fdHlwZUluZm9Gb3JQcm9wZXJ0eShwcm9wZXJ0eSwgZnFuLCBpbnRlcmZhY2VzKTtcblxuICAgIC8vIGlmIHRoZSBwcm9wZXJ0eSBpcyBvdmVycmlkZGVuIGJ5IHRoZSBuYXRpdmUgY29kZSBhbmQgXCJnZXRcIiBpcyBjYWxsZWQgb24gdGhlIG9iamVjdCwgaXRcbiAgICAvLyBtZWFucyB0aGF0IHRoZSBuYXRpdmUgY29kZSBpcyB0cnlpbmcgdG8gYWNjZXNzIHRoZSBcInN1cGVyXCIgcHJvcGVydHkuIGluIG9yZGVyIHRvIGVuYWJsZVxuICAgIC8vIHRoYXQsIHdlIGFjdHVhbGx5IGtlZXAgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBwcm9wZXJ0eSBkZXNjcmlwdG9yIHdoZW4gd2Ugb3ZlcnJpZGUsXG4gICAgLy8gc28gYGZpbmRQcm9wZXJ0eVRhcmdldGAgd2lsbCByZXR1cm4gZWl0aGVyIHRoZSBvcmlnaW5hbCBwcm9wZXJ0eSBuYW1lIChcInByb3BlcnR5XCIpIG9yXG4gICAgLy8gdGhlIFwic3VwZXJcIiBwcm9wZXJ0eSBuYW1lIChzb21laGluZyBsaWtlIFwiJGpzaWkkc3VwZXIkPHByb3BlcnR5PiRcIikuXG4gICAgY29uc3QgcHJvcGVydHlUb0dldCA9IHRoaXMuX2ZpbmRQcm9wZXJ0eVRhcmdldChpbnN0YW5jZSwgcHJvcGVydHkpO1xuXG4gICAgLy8gbWFrZSB0aGUgYWN0dWFsIFwiZ2V0XCIsIGFuZCBibG9jayBhbnkgYXN5bmMgY2FsbHMgdGhhdCBtaWdodCBiZSBwZXJmb3JtZWRcbiAgICAvLyBieSBqc2lpIG92ZXJyaWRlcy5cbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2Vuc3VyZVN5bmMoXG4gICAgICBgcHJvcGVydHkgJyR7b2JqcmVmW1RPS0VOX1JFRl19LiR7cHJvcGVydHlUb0dldH0nYCxcbiAgICAgICgpID0+IHRoaXMuX3dyYXBTYW5kYm94Q29kZSgoKSA9PiBpbnN0YW5jZVtwcm9wZXJ0eVRvR2V0XSksXG4gICAgKTtcbiAgICB0aGlzLl9kZWJ1ZygndmFsdWU6JywgdmFsdWUpO1xuICAgIGNvbnN0IHJldCA9IHRoaXMuX2Zyb21TYW5kYm94KHZhbHVlLCB0aSk7XG4gICAgdGhpcy5fZGVidWcoJ3JldDonLCByZXQpO1xuICAgIHJldHVybiB7IHZhbHVlOiByZXQgfTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQocmVxOiBhcGkuU2V0UmVxdWVzdCk6IGFwaS5TZXRSZXNwb25zZSB7XG4gICAgY29uc3QgeyBvYmpyZWYsIHByb3BlcnR5LCB2YWx1ZSB9ID0gcmVxO1xuICAgIHRoaXMuX2RlYnVnKCdzZXQnLCBvYmpyZWYsIHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgY29uc3QgeyBpbnN0YW5jZSwgZnFuLCBpbnRlcmZhY2VzIH0gPSB0aGlzLm9iamVjdHMuZmluZE9iamVjdChvYmpyZWYpO1xuXG4gICAgY29uc3QgcHJvcEluZm8gPSB0aGlzLl90eXBlSW5mb0ZvclByb3BlcnR5KHJlcS5wcm9wZXJ0eSwgZnFuLCBpbnRlcmZhY2VzKTtcblxuICAgIGlmIChwcm9wSW5mby5pbW11dGFibGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBzZXQgdmFsdWUgb2YgaW1tdXRhYmxlIHByb3BlcnR5ICR7cmVxLnByb3BlcnR5fSB0byAke3JlcS52YWx1ZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wZXJ0eVRvU2V0ID0gdGhpcy5fZmluZFByb3BlcnR5VGFyZ2V0KGluc3RhbmNlLCBwcm9wZXJ0eSk7XG5cbiAgICB0aGlzLl9lbnN1cmVTeW5jKGBwcm9wZXJ0eSAnJHtvYmpyZWZbVE9LRU5fUkVGXX0uJHtwcm9wZXJ0eVRvU2V0fSdgLCAoKSA9PlxuICAgICAgdGhpcy5fd3JhcFNhbmRib3hDb2RlKFxuICAgICAgICAoKSA9PiAoaW5zdGFuY2VbcHJvcGVydHlUb1NldF0gPSB0aGlzLl90b1NhbmRib3godmFsdWUsIHByb3BJbmZvKSksXG4gICAgICApLFxuICAgICk7XG5cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBwdWJsaWMgaW52b2tlKHJlcTogYXBpLkludm9rZVJlcXVlc3QpOiBhcGkuSW52b2tlUmVzcG9uc2Uge1xuICAgIGNvbnN0IHsgb2JqcmVmLCBtZXRob2QgfSA9IHJlcTtcbiAgICBjb25zdCBhcmdzID0gcmVxLmFyZ3MgPz8gW107XG5cbiAgICB0aGlzLl9kZWJ1ZygnaW52b2tlJywgb2JqcmVmLCBtZXRob2QsIGFyZ3MpO1xuICAgIGNvbnN0IHsgdGksIG9iaiwgZm4gfSA9IHRoaXMuX2ZpbmRJbnZva2VUYXJnZXQob2JqcmVmLCBtZXRob2QsIGFyZ3MpO1xuXG4gICAgLy8gdmVyaWZ5IHRoaXMgaXMgbm90IGFuIGFzeW5jIG1ldGhvZFxuICAgIGlmICh0aS5hc3luYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke21ldGhvZH0gaXMgYW4gYXN5bmMgbWV0aG9kLCB1c2UgXCJiZWdpblwiIGluc3RlYWRgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXQgPSB0aGlzLl9lbnN1cmVTeW5jKFxuICAgICAgYG1ldGhvZCAnJHtvYmpyZWZbVE9LRU5fUkVGXX0uJHttZXRob2R9J2AsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl93cmFwU2FuZGJveENvZGUoKCkgPT5cbiAgICAgICAgICBmbi5hcHBseShvYmosIHRoaXMuX3RvU2FuZGJveFZhbHVlcyhhcmdzLCB0aS5wYXJhbWV0ZXJzKSksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9mcm9tU2FuZGJveChyZXQsIHRpLnJldHVybnMgPz8gJ3ZvaWQnKTtcbiAgICB0aGlzLl9kZWJ1ZygnaW52b2tlIHJlc3VsdCcsIHJlc3VsdCk7XG5cbiAgICByZXR1cm4geyByZXN1bHQgfTtcbiAgfVxuXG4gIHB1YmxpYyBzaW52b2tlKHJlcTogYXBpLlN0YXRpY0ludm9rZVJlcXVlc3QpOiBhcGkuSW52b2tlUmVzcG9uc2Uge1xuICAgIGNvbnN0IHsgZnFuLCBtZXRob2QgfSA9IHJlcTtcbiAgICBjb25zdCBhcmdzID0gcmVxLmFyZ3MgPz8gW107XG5cbiAgICB0aGlzLl9kZWJ1Zygnc2ludm9rZScsIGZxbiwgbWV0aG9kLCBhcmdzKTtcblxuICAgIGNvbnN0IHRpID0gdGhpcy5fdHlwZUluZm9Gb3JNZXRob2QobWV0aG9kLCBmcW4pO1xuXG4gICAgaWYgKCF0aS5zdGF0aWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtmcW59LiR7bWV0aG9kfSBpcyBub3QgYSBzdGF0aWMgbWV0aG9kYCk7XG4gICAgfVxuXG4gICAgLy8gdmVyaWZ5IHRoaXMgaXMgbm90IGFuIGFzeW5jIG1ldGhvZFxuICAgIGlmICh0aS5hc3luYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke21ldGhvZH0gaXMgYW4gYXN5bmMgbWV0aG9kLCB1c2UgXCJiZWdpblwiIGluc3RlYWRgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLl9maW5kU3ltYm9sKGZxbik7XG4gICAgY29uc3QgZm4gPSBwcm90b3R5cGVbbWV0aG9kXSBhcyAoLi4ucGFyYW1zOiBhbnlbXSkgPT4gYW55O1xuXG4gICAgY29uc3QgcmV0ID0gdGhpcy5fZW5zdXJlU3luYyhgbWV0aG9kICcke2Zxbn0uJHttZXRob2R9J2AsICgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLl93cmFwU2FuZGJveENvZGUoKCkgPT5cbiAgICAgICAgZm4uYXBwbHkocHJvdG90eXBlLCB0aGlzLl90b1NhbmRib3hWYWx1ZXMoYXJncywgdGkucGFyYW1ldGVycykpLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2RlYnVnKCdtZXRob2QgcmV0dXJuZWQ6JywgcmV0KTtcbiAgICByZXR1cm4geyByZXN1bHQ6IHRoaXMuX2Zyb21TYW5kYm94KHJldCwgdGkucmV0dXJucyA/PyAndm9pZCcpIH07XG4gIH1cblxuICBwdWJsaWMgYmVnaW4ocmVxOiBhcGkuQmVnaW5SZXF1ZXN0KTogYXBpLkJlZ2luUmVzcG9uc2Uge1xuICAgIGNvbnN0IHsgb2JqcmVmLCBtZXRob2QgfSA9IHJlcTtcbiAgICBjb25zdCBhcmdzID0gcmVxLmFyZ3MgPz8gW107XG5cbiAgICB0aGlzLl9kZWJ1ZygnYmVnaW4nLCBvYmpyZWYsIG1ldGhvZCwgYXJncyk7XG5cbiAgICBpZiAodGhpcy5zeW5jSW5Qcm9ncmVzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IGludm9rZSBhc3luYyBtZXRob2QgJyR7cmVxLm9ianJlZltUT0tFTl9SRUZdfS4ke3JlcS5tZXRob2R9JyB3aGlsZSBzeW5jICR7dGhpcy5zeW5jSW5Qcm9ncmVzc30gaXMgYmVpbmcgcHJvY2Vzc2VkYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgeyB0aSwgb2JqLCBmbiB9ID0gdGhpcy5fZmluZEludm9rZVRhcmdldChvYmpyZWYsIG1ldGhvZCwgYXJncyk7XG5cbiAgICAvLyB2ZXJpZnkgdGhpcyBpcyBpbmRlZWQgYW4gYXN5bmMgbWV0aG9kXG4gICAgaWYgKCF0aS5hc3luYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNZXRob2QgJHttZXRob2R9IGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFzeW5jIG1ldGhvZGApO1xuICAgIH1cblxuICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLl93cmFwU2FuZGJveENvZGUoKCkgPT5cbiAgICAgIGZuLmFwcGx5KG9iaiwgdGhpcy5fdG9TYW5kYm94VmFsdWVzKGFyZ3MsIHRpLnBhcmFtZXRlcnMpKSxcbiAgICApIGFzIFByb21pc2U8YW55PjtcblxuICAgIC8vIHNpbmNlIHdlIGFyZSBwbGFubmluZyB0byByZXNvbHZlIHRoaXMgcHJvbWlzZSBpbiBhIGRpZmZlcmVudCBzY29wZVxuICAgIC8vIHdlIG5lZWQgdG8gaGFuZGxlIHJlamVjdGlvbnMgaGVyZSBbMV1cbiAgICAvLyBbMV06IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQwOTIwMTc5L3Nob3VsZC1pLXJlZnJhaW4tZnJvbS1oYW5kbGluZy1wcm9taXNlLXJlamVjdGlvbi1hc3luY2hyb25vdXNseS80MDkyMTUwNVxuICAgIHByb21pc2UuY2F0Y2goKF8pID0+IHVuZGVmaW5lZCk7XG5cbiAgICBjb25zdCBwcmlkID0gdGhpcy5fbWFrZXByaWQoKTtcbiAgICB0aGlzLnByb21pc2VzW3ByaWRdID0ge1xuICAgICAgcHJvbWlzZSxcbiAgICAgIG1ldGhvZDogdGksXG4gICAgfTtcblxuICAgIHJldHVybiB7IHByb21pc2VpZDogcHJpZCB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGVuZChyZXE6IGFwaS5FbmRSZXF1ZXN0KTogUHJvbWlzZTxhcGkuRW5kUmVzcG9uc2U+IHtcbiAgICBjb25zdCB7IHByb21pc2VpZCB9ID0gcmVxO1xuXG4gICAgdGhpcy5fZGVidWcoJ2VuZCcsIHByb21pc2VpZCk7XG5cbiAgICBjb25zdCB7IHByb21pc2UsIG1ldGhvZCB9ID0gdGhpcy5wcm9taXNlc1twcm9taXNlaWRdO1xuICAgIGlmIChwcm9taXNlID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgcHJvbWlzZSB3aXRoIElEOiAke3Byb21pc2VpZH1gKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0O1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBhd2FpdCBwcm9taXNlO1xuICAgICAgdGhpcy5fZGVidWcoJ3Byb21pc2UgcmVzdWx0OicsIHJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fZGVidWcoJ3Byb21pc2UgZXJyb3I6JywgZSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHJldHVybiB7IHJlc3VsdDogdGhpcy5fZnJvbVNhbmRib3gocmVzdWx0LCBtZXRob2QucmV0dXJucyA/PyAndm9pZCcpIH07XG4gIH1cblxuICBwdWJsaWMgY2FsbGJhY2tzKF9yZXE/OiBhcGkuQ2FsbGJhY2tzUmVxdWVzdCk6IGFwaS5DYWxsYmFja3NSZXNwb25zZSB7XG4gICAgdGhpcy5fZGVidWcoJ2NhbGxiYWNrcycpO1xuICAgIGNvbnN0IHJldCA9IE9iamVjdC5rZXlzKHRoaXMuY2JzKS5tYXAoKGNiaWQpID0+IHtcbiAgICAgIGNvbnN0IGNiID0gdGhpcy5jYnNbY2JpZF07XG4gICAgICB0aGlzLndhaXRpbmdbY2JpZF0gPSBjYjsgLy8gbW92ZSB0byB3YWl0aW5nXG4gICAgICBjb25zdCBjYWxsYmFjazogYXBpLkNhbGxiYWNrID0ge1xuICAgICAgICBjYmlkLFxuICAgICAgICBjb29raWU6IGNiLm92ZXJyaWRlLmNvb2tpZSxcbiAgICAgICAgaW52b2tlOiB7XG4gICAgICAgICAgb2JqcmVmOiBjYi5vYmpyZWYsXG4gICAgICAgICAgbWV0aG9kOiBjYi5vdmVycmlkZS5tZXRob2QsXG4gICAgICAgICAgYXJnczogY2IuYXJncyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICByZXR1cm4gY2FsbGJhY2s7XG4gICAgfSk7XG5cbiAgICAvLyBtb3ZlIGFsbCBjYWxsYmFja3MgdG8gdGhlIHdhaXQgcXVldWUgYW5kIGNsZWFuIHRoZSBjYWxsYmFjayBxdWV1ZS5cbiAgICB0aGlzLmNicyA9IHt9O1xuICAgIHJldHVybiB7IGNhbGxiYWNrczogcmV0IH07XG4gIH1cblxuICBwdWJsaWMgY29tcGxldGUocmVxOiBhcGkuQ29tcGxldGVSZXF1ZXN0KTogYXBpLkNvbXBsZXRlUmVzcG9uc2Uge1xuICAgIGNvbnN0IHsgY2JpZCwgZXJyLCByZXN1bHQgfSA9IHJlcTtcblxuICAgIHRoaXMuX2RlYnVnKCdjb21wbGV0ZScsIGNiaWQsIGVyciwgcmVzdWx0KTtcblxuICAgIGlmICghKGNiaWQgaW4gdGhpcy53YWl0aW5nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYWxsYmFjayAke2NiaWR9IG5vdCBmb3VuZGApO1xuICAgIH1cblxuICAgIGNvbnN0IGNiID0gdGhpcy53YWl0aW5nW2NiaWRdO1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHRoaXMuX2RlYnVnKCdjb21wbGV0ZWQgd2l0aCBlcnJvcjonLCBlcnIpO1xuICAgICAgY2IuZmFpbChuZXcgRXJyb3IoZXJyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNhbmRveFJlc3VsdCA9IHRoaXMuX3RvU2FuZGJveChcbiAgICAgICAgcmVzdWx0LFxuICAgICAgICBjYi5leHBlY3RlZFJldHVyblR5cGUgPz8gJ3ZvaWQnLFxuICAgICAgKTtcbiAgICAgIHRoaXMuX2RlYnVnKCdjb21wbGV0ZWQgd2l0aCByZXN1bHQ6Jywgc2FuZG94UmVzdWx0KTtcbiAgICAgIGNiLnN1Y2NlZWQoc2FuZG94UmVzdWx0KTtcbiAgICB9XG5cbiAgICBkZWxldGUgdGhpcy53YWl0aW5nW2NiaWRdO1xuXG4gICAgcmV0dXJuIHsgY2JpZCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxhbmd1YWdlLXNwZWNpZmljIG5hbWVzIGZvciBhIGpzaWkgbW9kdWxlLlxuICAgKiBAcGFyYW0gYXNzZW1ibHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBqc2lpIG1vZHVsZSAoaS5lLiBqc2lpJGpzaWlfY2FsY3VsYXRvcl9saWIkKVxuICAgKi9cbiAgcHVibGljIG5hbWluZyhyZXE6IGFwaS5OYW1pbmdSZXF1ZXN0KTogYXBpLk5hbWluZ1Jlc3BvbnNlIHtcbiAgICBjb25zdCBhc3NlbWJseU5hbWUgPSByZXEuYXNzZW1ibHk7XG5cbiAgICB0aGlzLl9kZWJ1ZygnbmFtaW5nJywgYXNzZW1ibHlOYW1lKTtcblxuICAgIGNvbnN0IGFzc2VtYmx5ID0gdGhpcy5fYXNzZW1ibHlGb3IoYXNzZW1ibHlOYW1lKTtcbiAgICBjb25zdCB0YXJnZXRzID0gYXNzZW1ibHkubWV0YWRhdGEudGFyZ2V0cztcbiAgICBpZiAoIXRhcmdldHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCAtIFwidGFyZ2V0c1wiIGZvciAke2Fzc2VtYmx5TmFtZX0gaXMgbWlzc2luZyFgKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBuYW1pbmc6IHRhcmdldHMgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0cyhfcmVxPzogYXBpLlN0YXRzUmVxdWVzdCk6IGFwaS5TdGF0c1Jlc3BvbnNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgb2JqZWN0Q291bnQ6IHRoaXMub2JqZWN0cy5jb3VudCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfYWRkQXNzZW1ibHkoYXNzbTogQXNzZW1ibHkpIHtcbiAgICB0aGlzLmFzc2VtYmxpZXNbYXNzbS5tZXRhZGF0YS5uYW1lXSA9IGFzc207XG5cbiAgICAvLyBhZGQgdGhlIF9fanNpaV9fLmZxbiBwcm9wZXJ0eSBvbiBldmVyeSBjb25zdHJ1Y3Rvci4gdGhpcyBhbGxvd3NcbiAgICAvLyB0cmF2ZXJzaW5nIGJldHdlZW4gdGhlIGphdmFzY3JpcHQgYW5kIGpzaWkgd29ybGRzIGdpdmVuIGFueSBvYmplY3QuXG4gICAgZm9yIChjb25zdCBmcW4gb2YgT2JqZWN0LmtleXMoYXNzbS5tZXRhZGF0YS50eXBlcyA/PyB7fSkpIHtcbiAgICAgIGNvbnN0IHR5cGVkZWYgPSBhc3NtLm1ldGFkYXRhLnR5cGVzIVtmcW5dO1xuICAgICAgc3dpdGNoICh0eXBlZGVmLmtpbmQpIHtcbiAgICAgICAgY2FzZSBzcGVjLlR5cGVLaW5kLkludGVyZmFjZTpcbiAgICAgICAgICBjb250aW51ZTsgLy8gaW50ZXJmYWNlcyBkb24ndCByZWFsbHkgZXhpc3RcbiAgICAgICAgY2FzZSBzcGVjLlR5cGVLaW5kLkNsYXNzOlxuICAgICAgICBjYXNlIHNwZWMuVHlwZUtpbmQuRW51bTpcbiAgICAgICAgICBjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuX2ZpbmRTeW1ib2woZnFuKTtcbiAgICAgICAgICB0YWdKc2lpQ29uc3RydWN0b3IoY29uc3RydWN0b3IsIGZxbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gZmluZCB0aGUgamF2YXNjcmlwdCBjb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgYSBqc2lpIEZRTi5cbiAgcHJpdmF0ZSBfZmluZEN0b3IoXG4gICAgZnFuOiBzdHJpbmcsXG4gICAgYXJnczogYW55W10sXG4gICk6IHsgY3RvcjogYW55OyBwYXJhbWV0ZXJzPzogc3BlYy5QYXJhbWV0ZXJbXSB9IHtcbiAgICBpZiAoZnFuID09PSB3aXJlLkVNUFRZX09CSkVDVF9GUU4pIHtcbiAgICAgIHJldHVybiB7IGN0b3I6IE9iamVjdCB9O1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGVpbmZvID0gdGhpcy5fdHlwZUluZm9Gb3JGcW4oZnFuKTtcblxuICAgIHN3aXRjaCAodHlwZWluZm8ua2luZCkge1xuICAgICAgY2FzZSBzcGVjLlR5cGVLaW5kLkNsYXNzOlxuICAgICAgICBjb25zdCBjbGFzc1R5cGUgPSB0eXBlaW5mbyBhcyBzcGVjLkNsYXNzVHlwZTtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVNZXRob2RBcmd1bWVudHMoY2xhc3NUeXBlLmluaXRpYWxpemVyLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjdG9yOiB0aGlzLl9maW5kU3ltYm9sKGZxbiksXG4gICAgICAgICAgcGFyYW1ldGVyczogY2xhc3NUeXBlLmluaXRpYWxpemVyICYmIGNsYXNzVHlwZS5pbml0aWFsaXplci5wYXJhbWV0ZXJzLFxuICAgICAgICB9O1xuXG4gICAgICBjYXNlIHNwZWMuVHlwZUtpbmQuSW50ZXJmYWNlOlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENhbm5vdCBjcmVhdGUgYW4gb2JqZWN0IHdpdGggYW4gRlFOIG9mIGFuIGludGVyZmFjZTogJHtmcW59YCxcbiAgICAgICAgKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIEZRTiBraW5kOiAke2Zxbn1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXRQYWNrYWdlRGlyKHBrZ25hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmluc3RhbGxEaXIpIHtcbiAgICAgIHRoaXMuaW5zdGFsbERpciA9IGZzLm1rZHRlbXBTeW5jKHBhdGguam9pbihvcy50bXBkaXIoKSwgJ2pzaWkta2VybmVsLScpKTtcbiAgICAgIGZzLm1rZGlycFN5bmMocGF0aC5qb2luKHRoaXMuaW5zdGFsbERpciwgJ25vZGVfbW9kdWxlcycpKTtcbiAgICAgIHRoaXMuX2RlYnVnKCdjcmVhdGluZyBqc2lpLWtlcm5lbCBtb2R1bGVzIHdvcmtkaXI6JywgdGhpcy5pbnN0YWxsRGlyKTtcblxuICAgICAgb25FeGl0LnJlbW92ZVN5bmModGhpcy5pbnN0YWxsRGlyKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGguam9pbih0aGlzLmluc3RhbGxEaXIsICdub2RlX21vZHVsZXMnLCBwa2duYW1lKTtcbiAgfVxuXG4gIC8vIHByZWZpeGVkIHdpdGggXyB0byBhbGxvdyBjYWxsaW5nIHRoaXMgbWV0aG9kIGludGVybmFsbHkgd2l0aG91dFxuICAvLyBnZXR0aW5nIGl0IHJlY29yZGVkIGZvciB0ZXN0aW5nLlxuICBwcml2YXRlIF9jcmVhdGUocmVxOiBhcGkuQ3JlYXRlUmVxdWVzdCk6IGFwaS5DcmVhdGVSZXNwb25zZSB7XG4gICAgdGhpcy5fZGVidWcoJ2NyZWF0ZScsIHJlcSk7XG4gICAgY29uc3QgeyBmcW4sIGludGVyZmFjZXMsIG92ZXJyaWRlcyB9ID0gcmVxO1xuXG4gICAgY29uc3QgcmVxdWVzdEFyZ3MgPSByZXEuYXJncyA/PyBbXTtcblxuICAgIGNvbnN0IGN0b3JSZXN1bHQgPSB0aGlzLl9maW5kQ3RvcihmcW4sIHJlcXVlc3RBcmdzKTtcbiAgICBjb25zdCBjdG9yID0gY3RvclJlc3VsdC5jdG9yO1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuX3dyYXBTYW5kYm94Q29kZShcbiAgICAgICgpID0+XG4gICAgICAgIG5ldyBjdG9yKC4uLnRoaXMuX3RvU2FuZGJveFZhbHVlcyhyZXF1ZXN0QXJncywgY3RvclJlc3VsdC5wYXJhbWV0ZXJzKSksXG4gICAgKTtcbiAgICBjb25zdCBvYmpyZWYgPSB0aGlzLm9iamVjdHMucmVnaXN0ZXJPYmplY3Qob2JqLCBmcW4sIHJlcS5pbnRlcmZhY2VzID8/IFtdKTtcblxuICAgIC8vIG92ZXJyaWRlczogZm9yIGVhY2ggb25lIG9mIHRoZSBvdmVycmlkZSBtZXRob2QgbmFtZXMsIGluc3RhbGxzIGFcbiAgICAvLyBtZXRob2Qgb24gdGhlIG5ld2x5IGNyZWF0ZWQgb2JqZWN0IHdoaWNoIHJlcHJlc2VudHMgdGhlIHJlbW90ZSBcInJldmVyc2UgcHJveHlcIi5cblxuICAgIGlmIChvdmVycmlkZXMpIHtcbiAgICAgIHRoaXMuX2RlYnVnKCdvdmVycmlkZXMnLCBvdmVycmlkZXMpO1xuXG4gICAgICBjb25zdCBvdmVycmlkZVR5cGVFcnJvck1lc3NhZ2UgPVxuICAgICAgICAnT3ZlcnJpZGUgY2FuIGVpdGhlciBiZSBcIm1ldGhvZFwiIG9yIFwicHJvcGVydHlcIic7XG4gICAgICBjb25zdCBtZXRob2RzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgIGZvciAoY29uc3Qgb3ZlcnJpZGUgb2Ygb3ZlcnJpZGVzKSB7XG4gICAgICAgIGlmIChhcGkuaXNNZXRob2RPdmVycmlkZShvdmVycmlkZSkpIHtcbiAgICAgICAgICBpZiAoYXBpLmlzUHJvcGVydHlPdmVycmlkZShvdmVycmlkZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihvdmVycmlkZVR5cGVFcnJvck1lc3NhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobWV0aG9kcy5oYXMob3ZlcnJpZGUubWV0aG9kKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgRHVwbGljYXRlIG92ZXJyaWRlIGZvciBtZXRob2QgJyR7b3ZlcnJpZGUubWV0aG9kfSdgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbWV0aG9kcy5hZGQob3ZlcnJpZGUubWV0aG9kKTtcblxuICAgICAgICAgIHRoaXMuX2FwcGx5TWV0aG9kT3ZlcnJpZGUob2JqLCBvYmpyZWYsIGZxbiwgaW50ZXJmYWNlcywgb3ZlcnJpZGUpO1xuICAgICAgICB9IGVsc2UgaWYgKGFwaS5pc1Byb3BlcnR5T3ZlcnJpZGUob3ZlcnJpZGUpKSB7XG4gICAgICAgICAgaWYgKGFwaS5pc01ldGhvZE92ZXJyaWRlKG92ZXJyaWRlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG92ZXJyaWRlVHlwZUVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmhhcyhvdmVycmlkZS5wcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICBgRHVwbGljYXRlIG92ZXJyaWRlIGZvciBwcm9wZXJ0eSAnJHtvdmVycmlkZS5wcm9wZXJ0eX0nYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByb3BlcnRpZXMuYWRkKG92ZXJyaWRlLnByb3BlcnR5KTtcblxuICAgICAgICAgIHRoaXMuX2FwcGx5UHJvcGVydHlPdmVycmlkZShvYmosIG9ianJlZiwgZnFuLCBpbnRlcmZhY2VzLCBvdmVycmlkZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG92ZXJyaWRlVHlwZUVycm9yTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb2JqcmVmO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0U3VwZXJQcm9wZXJ0eU5hbWUobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGAkanNpaSRzdXBlciQke25hbWV9JGA7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseVByb3BlcnR5T3ZlcnJpZGUoXG4gICAgb2JqOiBhbnksXG4gICAgb2JqcmVmOiBhcGkuT2JqUmVmLFxuICAgIHR5cGVGcW46IHN0cmluZyxcbiAgICBpbnRlcmZhY2VzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCxcbiAgICBvdmVycmlkZTogYXBpLlByb3BlcnR5T3ZlcnJpZGUsXG4gICkge1xuICAgIC8vIGVycm9yIGlmIHdlIGNhbiBmaW5kIGEgbWV0aG9kIHdpdGggdGhpcyBuYW1lXG4gICAgaWYgKHRoaXMuX3RyeVR5cGVJbmZvRm9yTWV0aG9kKG92ZXJyaWRlLnByb3BlcnR5LCB0eXBlRnFuLCBpbnRlcmZhY2VzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVHJ5aW5nIHRvIG92ZXJyaWRlIG1ldGhvZCAnJHtvdmVycmlkZS5wcm9wZXJ0eX0nIGFzIGEgcHJvcGVydHlgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgcHJvcEluZm8gPSB0aGlzLl90cnlUeXBlSW5mb0ZvclByb3BlcnR5KFxuICAgICAgb3ZlcnJpZGUucHJvcGVydHksXG4gICAgICB0eXBlRnFuLFxuICAgICAgaW50ZXJmYWNlcyxcbiAgICApO1xuICAgIC8vIGlmIHRoaXMgaXMgYSBwcml2YXRlIHByb3BlcnR5IChpLmUuIGRvZXNuJ3QgaGF2ZSBgcHJvcEluZm9gIHRoZSBvYmplY3QgaGFzIGEga2V5KVxuICAgIGlmICghcHJvcEluZm8gJiYgb3ZlcnJpZGUucHJvcGVydHkgaW4gb2JqKSB7XG4gICAgICB0aGlzLl9kZWJ1ZyhgU2tpcHBpbmcgb3ZlcnJpZGUgb2YgcHJpdmF0ZSBwcm9wZXJ0eSAke292ZXJyaWRlLnByb3BlcnR5fWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghcHJvcEluZm8pIHtcbiAgICAgIC8vIFdlJ3ZlIG92ZXJyaWRpbmcgYSBwcm9wZXJ0eSBvbiBhbiBvYmplY3Qgd2UgaGF2ZSBOTyB0eXBlIGluZm9ybWF0aW9uIG9uIChwcm9iYWJseVxuICAgICAgLy8gYmVjYXVzZSBpdCdzIGFuIGFub255bW91cyBvYmplY3QpLlxuICAgICAgLy8gUHJldGVuZCBpdCdzICdwcm9wOiBhbnknO1xuICAgICAgLy9cbiAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBkbyBiZXR0ZXIgdHlwZSBjaGVja2luZyBkdXJpbmcgdGhlIGNvbnZlcnNpb24gaWYgSlNJSSBjbGllbnRzXG4gICAgICAvLyB3b3VsZCB0ZWxsIHVzIHRoZSBpbnRlbmRlZCBpbnRlcmZhY2UgdHlwZS5cbiAgICAgIHByb3BJbmZvID0ge1xuICAgICAgICBuYW1lOiBvdmVycmlkZS5wcm9wZXJ0eSxcbiAgICAgICAgdHlwZTogc3BlYy5DQU5PTklDQUxfQU5ZLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWZpbmVPdmVycmlkZW5Qcm9wZXJ0eShvYmosIG9ianJlZiwgb3ZlcnJpZGUsIHByb3BJbmZvKTtcbiAgfVxuXG4gIHByaXZhdGUgX2RlZmluZU92ZXJyaWRlblByb3BlcnR5KFxuICAgIG9iajogYW55LFxuICAgIG9ianJlZjogYXBpLk9ialJlZixcbiAgICBvdmVycmlkZTogYXBpLlByb3BlcnR5T3ZlcnJpZGUsXG4gICAgcHJvcEluZm86IHNwZWMuUHJvcGVydHksXG4gICkge1xuICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IG92ZXJyaWRlLnByb3BlcnR5O1xuXG4gICAgdGhpcy5fZGVidWcoJ2FwcGx5IG92ZXJyaWRlJywgcHJvcGVydHlOYW1lKTtcblxuICAgIC8vIHNhdmUgdGhlIG9sZCBwcm9wZXJ0eSB1bmRlciAkanNpaSRzdXBlciQ8cHJvcD4kIHNvIHRoYXQgcHJvcGVydHkgb3ZlcnJpZGVzXG4gICAgLy8gY2FuIHN0aWxsIGFjY2VzcyBpdCB2aWEgYHN1cGVyLjxwcm9wPmAuXG4gICAgY29uc3QgcHJldiA9IGdldFByb3BlcnR5RGVzY3JpcHRvcihvYmosIHByb3BlcnR5TmFtZSkgPz8ge1xuICAgICAgdmFsdWU6IG9ialtwcm9wZXJ0eU5hbWVdLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH07XG5cbiAgICBjb25zdCBwcmV2RW51bWVyYWJsZSA9IHByZXYuZW51bWVyYWJsZTtcbiAgICBwcmV2LmVudW1lcmFibGUgPSBmYWxzZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCB0aGlzLl9nZXRTdXBlclByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpLCBwcmV2KTtcblxuICAgIC8vIHdlIGFkZCBjYWxsYmFja3MgZm9yIGJvdGggJ2dldCcgYW5kICdzZXQnLCBldmVuIGlmIHRoZSBwcm9wZXJ0eVxuICAgIC8vIGlzIHJlYWRvbmx5LiB0aGlzIGlzIGZpbmUgYmVjYXVzZSBpZiB5b3UgdHJ5IHRvIHNldCgpIGEgcmVhZG9ubHlcbiAgICAvLyBwcm9wZXJ0eSwgaXQgd2lsbCBmYWlsLlxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3BlcnR5TmFtZSwge1xuICAgICAgZW51bWVyYWJsZTogcHJldkVudW1lcmFibGUsXG4gICAgICBjb25maWd1cmFibGU6IHByZXYuY29uZmlndXJhYmxlLFxuICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuX2RlYnVnKCd2aXJ0dWFsIGdldCcsIG9ianJlZiwgcHJvcGVydHlOYW1lLCB7XG4gICAgICAgICAgY29va2llOiBvdmVycmlkZS5jb29raWUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNhbGxiYWNrSGFuZGxlcih7XG4gICAgICAgICAgY29va2llOiBvdmVycmlkZS5jb29raWUsXG4gICAgICAgICAgY2JpZDogdGhpcy5fbWFrZWNiaWQoKSxcbiAgICAgICAgICBnZXQ6IHsgb2JqcmVmLCBwcm9wZXJ0eTogcHJvcGVydHlOYW1lIH0sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9kZWJ1ZygnY2FsbGJhY2sgcmV0dXJuZWQnLCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdG9TYW5kYm94KHJlc3VsdCwgcHJvcEluZm8pO1xuICAgICAgfSxcbiAgICAgIHNldDogKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5fZGVidWcoJ3ZpcnR1YWwgc2V0Jywgb2JqcmVmLCBwcm9wZXJ0eU5hbWUsIHtcbiAgICAgICAgICBjb29raWU6IG92ZXJyaWRlLmNvb2tpZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2FsbGJhY2tIYW5kbGVyKHtcbiAgICAgICAgICBjb29raWU6IG92ZXJyaWRlLmNvb2tpZSxcbiAgICAgICAgICBjYmlkOiB0aGlzLl9tYWtlY2JpZCgpLFxuICAgICAgICAgIHNldDoge1xuICAgICAgICAgICAgb2JqcmVmLFxuICAgICAgICAgICAgcHJvcGVydHk6IHByb3BlcnR5TmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9mcm9tU2FuZGJveCh2YWx1ZSwgcHJvcEluZm8pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGdldFByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgIG9iajogYW55LFxuICAgICAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gICAgKTogUHJvcGVydHlEZXNjcmlwdG9yIHwgdW5kZWZpbmVkIHtcbiAgICAgIGNvbnN0IGRpcmVjdCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wZXJ0eU5hbWUpO1xuICAgICAgaWYgKGRpcmVjdCAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBkaXJlY3Q7XG4gICAgICB9XG4gICAgICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopO1xuICAgICAgaWYgKHByb3RvID09IG51bGwgJiYgcHJvdG8gIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICAgICAgLy8gV2UgcmVhY2hlZCBPYmplY3Qgb3IgdGhlIHByb3RvdHlwZSBjaGFpbiByb290LCBhbGwgaG9wZSBpcyBsb3N0IVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldFByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgcHJvcGVydHlOYW1lKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9hcHBseU1ldGhvZE92ZXJyaWRlKFxuICAgIG9iajogYW55LFxuICAgIG9ianJlZjogYXBpLk9ialJlZixcbiAgICB0eXBlRnFuOiBzdHJpbmcsXG4gICAgaW50ZXJmYWNlczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gICAgb3ZlcnJpZGU6IGFwaS5NZXRob2RPdmVycmlkZSxcbiAgKSB7XG4gICAgLy8gZXJyb3IgaWYgd2UgY2FuIGZpbmQgYSBwcm9wZXJ0eSB3aXRoIHRoaXMgbmFtZVxuICAgIGlmICh0aGlzLl90cnlUeXBlSW5mb0ZvclByb3BlcnR5KG92ZXJyaWRlLm1ldGhvZCwgdHlwZUZxbiwgaW50ZXJmYWNlcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRyeWluZyB0byBvdmVycmlkZSBwcm9wZXJ0eSAnJHtvdmVycmlkZS5tZXRob2R9JyBhcyBhIG1ldGhvZGAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBtZXRob2RJbmZvID0gdGhpcy5fdHJ5VHlwZUluZm9Gb3JNZXRob2QoXG4gICAgICBvdmVycmlkZS5tZXRob2QsXG4gICAgICB0eXBlRnFuLFxuICAgICAgaW50ZXJmYWNlcyxcbiAgICApO1xuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHByaXZhdGUgbWV0aG9kIChkb2Vzbid0IGhhdmUgbWV0aG9kSW5mbywga2V5IHJlc29sdmVzIG9uIHRoZSBvYmplY3QpLCB3ZVxuICAgIC8vIGFyZSBnb2luZyB0byBza2lwIHRoZSBvdmVycmlkZS5cbiAgICBpZiAoIW1ldGhvZEluZm8gJiYgb2JqW292ZXJyaWRlLm1ldGhvZF0pIHtcbiAgICAgIHRoaXMuX2RlYnVnKGBTa2lwcGluZyBvdmVycmlkZSBvZiBwcml2YXRlIG1ldGhvZCAke292ZXJyaWRlLm1ldGhvZH1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIW1ldGhvZEluZm8pIHtcbiAgICAgIC8vIFdlJ3ZlIG92ZXJyaWRpbmcgYSBtZXRob2Qgb24gYW4gb2JqZWN0IHdlIGhhdmUgTk8gdHlwZSBpbmZvcm1hdGlvbiBvbiAocHJvYmFibHlcbiAgICAgIC8vIGJlY2F1c2UgaXQncyBhbiBhbm9ueW1vdXMgb2JqZWN0KS5cbiAgICAgIC8vIFByZXRlbmQgaXQncyBhbiAoLi4uYXJnczogYW55W10pID0+IGFueVxuICAgICAgbWV0aG9kSW5mbyA9IHtcbiAgICAgICAgbmFtZTogb3ZlcnJpZGUubWV0aG9kLFxuICAgICAgICByZXR1cm5zOiB7IHR5cGU6IHNwZWMuQ0FOT05JQ0FMX0FOWSB9LFxuICAgICAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2FyZ3MnLFxuICAgICAgICAgICAgdHlwZTogc3BlYy5DQU5PTklDQUxfQU5ZLFxuICAgICAgICAgICAgdmFyaWFkaWM6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgdmFyaWFkaWM6IHRydWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuX2RlZmluZU92ZXJyaWRlbk1ldGhvZChvYmosIG9ianJlZiwgb3ZlcnJpZGUsIG1ldGhvZEluZm8pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGVmaW5lT3ZlcnJpZGVuTWV0aG9kKFxuICAgIG9iajogYW55LFxuICAgIG9ianJlZjogYXBpLk9ialJlZixcbiAgICBvdmVycmlkZTogYXBpLk1ldGhvZE92ZXJyaWRlLFxuICAgIG1ldGhvZEluZm86IHNwZWMuTWV0aG9kLFxuICApIHtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gb3ZlcnJpZGUubWV0aG9kO1xuXG4gICAgaWYgKG1ldGhvZEluZm8uYXN5bmMpIHtcbiAgICAgIC8vIGFzeW5jIG1ldGhvZCBvdmVycmlkZVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgbWV0aG9kTmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogKC4uLm1ldGhvZEFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZGVidWcoJ2ludm9rZSBhc3luYyBtZXRob2Qgb3ZlcnJpZGUnLCBvdmVycmlkZSk7XG4gICAgICAgICAgY29uc3QgYXJncyA9IHRoaXMuX3RvU2FuZGJveFZhbHVlcyhtZXRob2RBcmdzLCBtZXRob2RJbmZvLnBhcmFtZXRlcnMpO1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChzdWNjZWVkLCBmYWlsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjYmlkID0gdGhpcy5fbWFrZWNiaWQoKTtcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKCdhZGRpbmcgY2FsbGJhY2sgdG8gcXVldWUnLCBjYmlkKTtcbiAgICAgICAgICAgIHRoaXMuY2JzW2NiaWRdID0ge1xuICAgICAgICAgICAgICBvYmpyZWYsXG4gICAgICAgICAgICAgIG92ZXJyaWRlLFxuICAgICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgICBleHBlY3RlZFJldHVyblR5cGU6IG1ldGhvZEluZm8ucmV0dXJucyA/PyAndm9pZCcsXG4gICAgICAgICAgICAgIHN1Y2NlZWQsXG4gICAgICAgICAgICAgIGZhaWwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHN5bmMgbWV0aG9kIG92ZXJyaWRlIChtZXRob2QgaW5mbyBpcyBub3QgcmVxdWlyZWQpXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBtZXRob2ROYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlOiAoLi4ubWV0aG9kQXJnczogYW55W10pID0+IHtcbiAgICAgICAgICB0aGlzLl9kZWJ1ZyhcbiAgICAgICAgICAgICdpbnZva2Ugc3luYyBtZXRob2Qgb3ZlcnJpZGUnLFxuICAgICAgICAgICAgb3ZlcnJpZGUsXG4gICAgICAgICAgICAnYXJncycsXG4gICAgICAgICAgICBtZXRob2RBcmdzLFxuICAgICAgICAgICk7XG4gICAgICAgICAgLy8gV2Ugc2hvdWxkIGJlIHZhbGlkYXRpbmcgdGhlIGFjdHVhbCBhcmd1bWVudHMgYWNjb3JkaW5nIHRvIHRoZVxuICAgICAgICAgIC8vIGRlY2xhcmVkIHBhcmFtZXRlcnMgaGVyZSwgYnV0IGxldCdzIGp1c3QgYXNzdW1lIHRoZSBKU0lJIHJ1bnRpbWUgb24gdGhlXG4gICAgICAgICAgLy8gb3RoZXIgZW5kIGhhcyBkb25lIGl0cyB3b3JrLlxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY2FsbGJhY2tIYW5kbGVyKHtcbiAgICAgICAgICAgIGNvb2tpZTogb3ZlcnJpZGUuY29va2llLFxuICAgICAgICAgICAgY2JpZDogdGhpcy5fbWFrZWNiaWQoKSxcbiAgICAgICAgICAgIGludm9rZToge1xuICAgICAgICAgICAgICBvYmpyZWYsXG4gICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICAgICAgYXJnczogdGhpcy5fZnJvbVNhbmRib3hWYWx1ZXMobWV0aG9kQXJncywgbWV0aG9kSW5mby5wYXJhbWV0ZXJzKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5fZGVidWcoJ1Jlc3VsdCcsIHJlc3VsdCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3RvU2FuZGJveChyZXN1bHQsIG1ldGhvZEluZm8ucmV0dXJucyA/PyAndm9pZCcpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZmluZEludm9rZVRhcmdldChcbiAgICBvYmpyZWY6IGFwaS5PYmpSZWYsXG4gICAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICAgIGFyZ3M6IGFueVtdLFxuICApIHtcbiAgICBjb25zdCB7IGluc3RhbmNlLCBmcW4sIGludGVyZmFjZXMgfSA9IHRoaXMub2JqZWN0cy5maW5kT2JqZWN0KG9ianJlZik7XG4gICAgY29uc3QgdGkgPSB0aGlzLl90eXBlSW5mb0Zvck1ldGhvZChtZXRob2ROYW1lLCBmcW4sIGludGVyZmFjZXMpO1xuICAgIHRoaXMuX3ZhbGlkYXRlTWV0aG9kQXJndW1lbnRzKHRpLCBhcmdzKTtcblxuICAgIC8vIGFsd2F5cyBmaXJzdCBsb29rIHVwIHRoZSBtZXRob2QgaW4gdGhlIHByb3RvdHlwZS4gdGhpcyBwcmFjdGljYWxseSBieXBhc3Nlc1xuICAgIC8vIGFueSBtZXRob2RzIG92ZXJyaWRkZW4gYnkgZGVyaXZlZCBjbGFzc2VzICh3aGljaCBhcmUgYnkgZGVmaW5pdGlvbiBuYXRpdmVcbiAgICAvLyBtZXRob2RzKS4gdGhpcyBzZXJ2ZXMgdG8gYWxsb3cgbmF0aXZlIGNhbGwgdG8gaW52b2tlIFwic3VwZXIubWV0aG9kKClcIiB3aGVuXG4gICAgLy8gb3ZlcnJpZGluZyB0aGUgbWV0aG9kLlxuICAgIC8vIGlmIHdlIGRpZG4ndCBmaW5kIHRoZSBtZXRob2Qgb24gdGhlIHByb3RvdHlwZSwgaXQgY291bGQgYmUgYSBsaXRlcmFsIG9iamVjdFxuICAgIC8vIHRoYXQgaW1wbGVtZW50cyBhbiBpbnRlcmZhY2UsIHNvIHdlIGxvb2sgaWYgd2UgaGF2ZSB0aGUgbWV0aG9kIG9uIHRoZSBvYmplY3RcbiAgICAvLyBpdHNlbGYuIGlmIHdlIGRvLCB3ZSBpbnZva2UgaXQuXG4gICAgbGV0IGZuID0gaW5zdGFuY2UuY29uc3RydWN0b3IucHJvdG90eXBlW21ldGhvZE5hbWVdO1xuICAgIGlmICghZm4pIHtcbiAgICAgIGZuID0gaW5zdGFuY2VbbWV0aG9kTmFtZV07XG4gICAgICBpZiAoIWZuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgJHttZXRob2ROYW1lfSBvbiBvYmplY3RgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgdGksIG9iajogaW5zdGFuY2UsIGZuIH07XG4gIH1cblxuICBwcml2YXRlIF92YWxpZGF0ZU1ldGhvZEFyZ3VtZW50cyhcbiAgICBtZXRob2Q6IHNwZWMuQ2FsbGFibGUgfCB1bmRlZmluZWQsXG4gICAgYXJnczogYW55W10sXG4gICkge1xuICAgIGNvbnN0IHBhcmFtczogc3BlYy5QYXJhbWV0ZXJbXSA9IG1ldGhvZD8ucGFyYW1ldGVycyA/PyBbXTtcblxuICAgIC8vIGVycm9yIGlmIGFyZ3MgPiBwYXJhbXNcbiAgICBpZiAoYXJncy5sZW5ndGggPiBwYXJhbXMubGVuZ3RoICYmICEobWV0aG9kICYmIG1ldGhvZC52YXJpYWRpYykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRvbyBtYW55IGFyZ3VtZW50cyAobWV0aG9kIGFjY2VwdHMgJHtwYXJhbXMubGVuZ3RofSBwYXJhbWV0ZXJzLCBnb3QgJHthcmdzLmxlbmd0aH0gYXJndW1lbnRzKWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBwYXJhbSA9IHBhcmFtc1tpXTtcbiAgICAgIGNvbnN0IGFyZyA9IGFyZ3NbaV07XG5cbiAgICAgIGlmIChwYXJhbS52YXJpYWRpYykge1xuICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCA8PSBpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIE5vIHZhcmFyZyB3YXMgcHJvdmlkZWRcbiAgICAgICAgZm9yIChsZXQgaiA9IGk7IGogPCBwYXJhbXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBpZiAoIXBhcmFtLm9wdGlvbmFsICYmIHBhcmFtc1tqXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBVbmV4cGVjdGVkICd1bmRlZmluZWQnIHZhbHVlIGF0IGluZGV4ICR7XG4gICAgICAgICAgICAgICAgaiAtIGlcbiAgICAgICAgICAgICAgfSBvZiB2YXJpYWRpYyBhcmd1bWVudCAnJHtcbiAgICAgICAgICAgICAgICBwYXJhbS5uYW1lXG4gICAgICAgICAgICAgIH0nIG9mIHR5cGUgJyR7c3BlYy5kZXNjcmliZVR5cGVSZWZlcmVuY2UocGFyYW0udHlwZSl9J2AsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghcGFyYW0ub3B0aW9uYWwgJiYgYXJnID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBOb3QgZW5vdWdoIGFyZ3VtZW50cy4gTWlzc2luZyBhcmd1bWVudCBmb3IgdGhlIHJlcXVpcmVkIHBhcmFtZXRlciAnJHtcbiAgICAgICAgICAgIHBhcmFtLm5hbWVcbiAgICAgICAgICB9JyBvZiB0eXBlICcke3NwZWMuZGVzY3JpYmVUeXBlUmVmZXJlbmNlKHBhcmFtLnR5cGUpfSdgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2Fzc2VtYmx5Rm9yKGFzc2VtYmx5TmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYXNzZW1ibHkgPSB0aGlzLmFzc2VtYmxpZXNbYXNzZW1ibHlOYW1lXTtcbiAgICBpZiAoIWFzc2VtYmx5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGFzc2VtYmx5OiAke2Fzc2VtYmx5TmFtZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGFzc2VtYmx5O1xuICB9XG5cbiAgcHJpdmF0ZSBfZmluZFN5bWJvbChmcW46IHN0cmluZykge1xuICAgIGNvbnN0IFthc3NlbWJseU5hbWUsIC4uLnBhcnRzXSA9IGZxbi5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGFzc2VtYmx5ID0gdGhpcy5fYXNzZW1ibHlGb3IoYXNzZW1ibHlOYW1lKTtcblxuICAgIGxldCBjdXJyID0gYXNzZW1ibHkuY2xvc3VyZTtcbiAgICB3aGlsZSAocGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbmFtZSA9IHBhcnRzLnNoaWZ0KCk7XG4gICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGN1cnIgPSBjdXJyW25hbWVdO1xuICAgIH1cbiAgICBpZiAoIWN1cnIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgc3ltYm9sICR7ZnFufWApO1xuICAgIH1cbiAgICByZXR1cm4gY3VycjtcbiAgfVxuXG4gIHByaXZhdGUgX3R5cGVJbmZvRm9yRnFuKGZxbjogc3RyaW5nKTogc3BlYy5UeXBlIHtcbiAgICBjb25zdCBjb21wb25lbnRzID0gZnFuLnNwbGl0KCcuJyk7XG4gICAgY29uc3QgbW9kdWxlTmFtZSA9IGNvbXBvbmVudHNbMF07XG5cbiAgICBjb25zdCBhc3NlbWJseSA9IHRoaXMuYXNzZW1ibGllc1ttb2R1bGVOYW1lXTtcbiAgICBpZiAoIWFzc2VtYmx5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZHVsZSAnJHttb2R1bGVOYW1lfScgbm90IGZvdW5kYCk7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZXMgPSBhc3NlbWJseS5tZXRhZGF0YS50eXBlcyA/PyB7fTtcbiAgICBjb25zdCBmcW5JbmZvID0gdHlwZXNbZnFuXTtcbiAgICBpZiAoIWZxbkluZm8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVHlwZSAnJHtmcW59JyBub3QgZm91bmRgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnFuSW5mbztcbiAgfVxuXG4gIHByaXZhdGUgX3R5cGVJbmZvRm9yTWV0aG9kKFxuICAgIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgICBmcW46IHN0cmluZyxcbiAgICBpbnRlcmZhY2VzPzogc3RyaW5nW10sXG4gICk6IHNwZWMuTWV0aG9kIHtcbiAgICBjb25zdCB0aSA9IHRoaXMuX3RyeVR5cGVJbmZvRm9yTWV0aG9kKG1ldGhvZE5hbWUsIGZxbiwgaW50ZXJmYWNlcyk7XG4gICAgaWYgKCF0aSkge1xuICAgICAgY29uc3QgYWRkZW5kdW0gPVxuICAgICAgICBpbnRlcmZhY2VzICYmIGludGVyZmFjZXMubGVuZ3RoID4gMFxuICAgICAgICAgID8gYCBvciBpbnRlcmZhY2UocykgJHtpbnRlcmZhY2VzLmpvaW4oJywgJyl9YFxuICAgICAgICAgIDogJyc7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDbGFzcyAke2Zxbn0ke2FkZGVuZHVtfSBkb2Vzbid0IGhhdmUgYSBtZXRob2QgJyR7bWV0aG9kTmFtZX0nYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aTtcbiAgfVxuXG4gIHByaXZhdGUgX3RyeVR5cGVJbmZvRm9yTWV0aG9kKFxuICAgIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgICBjbGFzc0Zxbjogc3RyaW5nLFxuICAgIGludGVyZmFjZXM6IHN0cmluZ1tdID0gW10sXG4gICk6IHNwZWMuTWV0aG9kIHwgdW5kZWZpbmVkIHtcbiAgICBmb3IgKGNvbnN0IGZxbiBvZiBbY2xhc3NGcW4sIC4uLmludGVyZmFjZXNdKSB7XG4gICAgICBpZiAoZnFuID09PSB3aXJlLkVNUFRZX09CSkVDVF9GUU4pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCB0eXBlaW5mbyA9IHRoaXMuX3R5cGVJbmZvRm9yRnFuKGZxbik7XG5cbiAgICAgIGNvbnN0IG1ldGhvZHMgPVxuICAgICAgICAodHlwZWluZm8gYXMgc3BlYy5DbGFzc1R5cGUgfCBzcGVjLkludGVyZmFjZVR5cGUpLm1ldGhvZHMgPz8gW107XG5cbiAgICAgIGZvciAoY29uc3QgbSBvZiBtZXRob2RzKSB7XG4gICAgICAgIGlmIChtLm5hbWUgPT09IG1ldGhvZE5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyByZWN1cnNpb24gdG8gcGFyZW50IHR5cGUgKGlmIGV4aXN0cylcbiAgICAgIGNvbnN0IGJhc2VzID0gW1xuICAgICAgICAodHlwZWluZm8gYXMgc3BlYy5DbGFzc1R5cGUpLmJhc2UsXG4gICAgICAgIC4uLigodHlwZWluZm8gYXMgc3BlYy5JbnRlcmZhY2VUeXBlKS5pbnRlcmZhY2VzID8/IFtdKSxcbiAgICAgIF07XG4gICAgICBmb3IgKGNvbnN0IGJhc2Ugb2YgYmFzZXMpIHtcbiAgICAgICAgaWYgKCFiYXNlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuX3RyeVR5cGVJbmZvRm9yTWV0aG9kKG1ldGhvZE5hbWUsIGJhc2UpO1xuICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBfdHJ5VHlwZUluZm9Gb3JQcm9wZXJ0eShcbiAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgIGNsYXNzRnFuOiBzdHJpbmcsXG4gICAgaW50ZXJmYWNlczogc3RyaW5nW10gPSBbXSxcbiAgKTogc3BlYy5Qcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG4gICAgZm9yIChjb25zdCBmcW4gb2YgW2NsYXNzRnFuLCAuLi5pbnRlcmZhY2VzXSkge1xuICAgICAgaWYgKGZxbiA9PT0gd2lyZS5FTVBUWV9PQkpFQ1RfRlFOKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdHlwZUluZm8gPSB0aGlzLl90eXBlSW5mb0ZvckZxbihmcW4pO1xuXG4gICAgICBsZXQgcHJvcGVydGllcztcbiAgICAgIGxldCBiYXNlcztcblxuICAgICAgaWYgKHNwZWMuaXNDbGFzc1R5cGUodHlwZUluZm8pKSB7XG4gICAgICAgIGNvbnN0IGNsYXNzVHlwZUluZm8gPSB0eXBlSW5mbyBhcyBzcGVjLkNsYXNzVHlwZTtcbiAgICAgICAgcHJvcGVydGllcyA9IGNsYXNzVHlwZUluZm8ucHJvcGVydGllcztcbiAgICAgICAgYmFzZXMgPSBjbGFzc1R5cGVJbmZvLmJhc2UgPyBbY2xhc3NUeXBlSW5mby5iYXNlXSA6IFtdO1xuICAgICAgfSBlbHNlIGlmIChzcGVjLmlzSW50ZXJmYWNlVHlwZSh0eXBlSW5mbykpIHtcbiAgICAgICAgY29uc3QgaW50ZXJmYWNlVHlwZUluZm8gPSB0eXBlSW5mbyBhcyBzcGVjLkludGVyZmFjZVR5cGU7XG4gICAgICAgIHByb3BlcnRpZXMgPSBpbnRlcmZhY2VUeXBlSW5mby5wcm9wZXJ0aWVzO1xuICAgICAgICBiYXNlcyA9IGludGVyZmFjZVR5cGVJbmZvLmludGVyZmFjZXMgPz8gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFR5cGUgb2Yga2luZCAke3R5cGVJbmZvLmtpbmR9IGRvZXMgbm90IGhhdmUgcHJvcGVydGllc2AsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgcCBvZiBwcm9wZXJ0aWVzID8/IFtdKSB7XG4gICAgICAgIGlmIChwLm5hbWUgPT09IHByb3BlcnR5KSB7XG4gICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gcmVjdXJzZSB0byBwYXJlbnQgdHlwZSAoaWYgZXhpc3RzKVxuICAgICAgZm9yIChjb25zdCBiYXNlRnFuIG9mIGJhc2VzKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHRoaXMuX3RyeVR5cGVJbmZvRm9yUHJvcGVydHkocHJvcGVydHksIGJhc2VGcW4pO1xuICAgICAgICBpZiAocmV0KSB7XG4gICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIF90eXBlSW5mb0ZvclByb3BlcnR5KFxuICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgZnFuOiBzdHJpbmcsXG4gICAgaW50ZXJmYWNlcz86IHN0cmluZ1tdLFxuICApOiBzcGVjLlByb3BlcnR5IHtcbiAgICBjb25zdCB0eXBlSW5mbyA9IHRoaXMuX3RyeVR5cGVJbmZvRm9yUHJvcGVydHkocHJvcGVydHksIGZxbiwgaW50ZXJmYWNlcyk7XG4gICAgaWYgKCF0eXBlSW5mbykge1xuICAgICAgY29uc3QgYWRkZW5kdW0gPVxuICAgICAgICBpbnRlcmZhY2VzICYmIGludGVyZmFjZXMubGVuZ3RoID4gMFxuICAgICAgICAgID8gYCBvciBpbnRlcmZhY2UocykgJHtpbnRlcmZhY2VzLmpvaW4oJywgJyl9YFxuICAgICAgICAgIDogJyc7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUeXBlICR7ZnFufSR7YWRkZW5kdW19IGRvZXNuJ3QgaGF2ZSBhIHByb3BlcnR5ICcke3Byb3BlcnR5fSdgLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVJbmZvO1xuICB9XG5cbiAgcHJpdmF0ZSBfdG9TYW5kYm94KHY6IGFueSwgZXhwZWN0ZWRUeXBlOiB3aXJlLk9wdGlvbmFsVmFsdWVPclZvaWQpOiBhbnkge1xuICAgIGNvbnN0IHNlclR5cGVzID0gd2lyZS5zZXJpYWxpemF0aW9uVHlwZShcbiAgICAgIGV4cGVjdGVkVHlwZSxcbiAgICAgIHRoaXMuX3R5cGVJbmZvRm9yRnFuLmJpbmQodGhpcyksXG4gICAgKTtcbiAgICB0aGlzLl9kZWJ1ZygndG9TYW5kYm94JywgdiwgSlNPTi5zdHJpbmdpZnkoc2VyVHlwZXMpKTtcblxuICAgIGNvbnN0IGhvc3Q6IHdpcmUuU2VyaWFsaXplckhvc3QgPSB7XG4gICAgICBvYmplY3RzOiB0aGlzLm9iamVjdHMsXG4gICAgICBkZWJ1ZzogdGhpcy5fZGVidWcuYmluZCh0aGlzKSxcbiAgICAgIGZpbmRTeW1ib2w6IHRoaXMuX2ZpbmRTeW1ib2wuYmluZCh0aGlzKSxcbiAgICAgIGxvb2t1cFR5cGU6IHRoaXMuX3R5cGVJbmZvRm9yRnFuLmJpbmQodGhpcyksXG4gICAgICByZWN1cnNlOiB0aGlzLl90b1NhbmRib3guYmluZCh0aGlzKSxcbiAgICB9O1xuXG4gICAgY29uc3QgZXJyb3JzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IHsgc2VyaWFsaXphdGlvbkNsYXNzLCB0eXBlUmVmIH0gb2Ygc2VyVHlwZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB3aXJlLlNFUklBTElaRVJTW3NlcmlhbGl6YXRpb25DbGFzc10uZGVzZXJpYWxpemUoXG4gICAgICAgICAgdixcbiAgICAgICAgICB0eXBlUmVmLFxuICAgICAgICAgIGhvc3QsXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIElmIG5vIHVuaW9uICg5OSUgY2FzZSksIHJldGhyb3cgaW1tZWRpYXRlbHkgdG8gcHJlc2VydmUgc3RhY2sgdHJhY2VcbiAgICAgICAgaWYgKHNlclR5cGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgZXJyb3JzLnB1c2goZS5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVmFsdWUgZGlkIG5vdCBtYXRjaCBhbnkgdHlwZSBpbiB1bmlvbjogJHtlcnJvcnMuam9pbignLCAnKX1gLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9mcm9tU2FuZGJveCh2OiBhbnksIHRhcmdldFR5cGU6IHdpcmUuT3B0aW9uYWxWYWx1ZU9yVm9pZCk6IGFueSB7XG4gICAgY29uc3Qgc2VyVHlwZXMgPSB3aXJlLnNlcmlhbGl6YXRpb25UeXBlKFxuICAgICAgdGFyZ2V0VHlwZSxcbiAgICAgIHRoaXMuX3R5cGVJbmZvRm9yRnFuLmJpbmQodGhpcyksXG4gICAgKTtcbiAgICB0aGlzLl9kZWJ1ZygnZnJvbVNhbmRib3gnLCB2LCBKU09OLnN0cmluZ2lmeShzZXJUeXBlcykpO1xuXG4gICAgY29uc3QgaG9zdDogd2lyZS5TZXJpYWxpemVySG9zdCA9IHtcbiAgICAgIG9iamVjdHM6IHRoaXMub2JqZWN0cyxcbiAgICAgIGRlYnVnOiB0aGlzLl9kZWJ1Zy5iaW5kKHRoaXMpLFxuICAgICAgZmluZFN5bWJvbDogdGhpcy5fZmluZFN5bWJvbC5iaW5kKHRoaXMpLFxuICAgICAgbG9va3VwVHlwZTogdGhpcy5fdHlwZUluZm9Gb3JGcW4uYmluZCh0aGlzKSxcbiAgICAgIHJlY3Vyc2U6IHRoaXMuX2Zyb21TYW5kYm94LmJpbmQodGhpcyksXG4gICAgfTtcblxuICAgIGNvbnN0IGVycm9ycyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCB7IHNlcmlhbGl6YXRpb25DbGFzcywgdHlwZVJlZiB9IG9mIHNlclR5cGVzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gd2lyZS5TRVJJQUxJWkVSU1tzZXJpYWxpemF0aW9uQ2xhc3NdLnNlcmlhbGl6ZSh2LCB0eXBlUmVmLCBob3N0KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gSWYgbm8gdW5pb24gKDk5JSBjYXNlKSwgcmV0aHJvdyBpbW1lZGlhdGVseSB0byBwcmVzZXJ2ZSBzdGFjayB0cmFjZVxuICAgICAgICBpZiAoc2VyVHlwZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBlcnJvcnMucHVzaChlLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBWYWx1ZSBkaWQgbm90IG1hdGNoIGFueSB0eXBlIGluIHVuaW9uOiAke2Vycm9ycy5qb2luKCcsICcpfWAsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX3RvU2FuZGJveFZhbHVlcyh4czogYW55W10sIHBhcmFtZXRlcnM/OiBzcGVjLlBhcmFtZXRlcltdKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JveFVuYm94UGFyYW1ldGVycyh4cywgcGFyYW1ldGVycywgdGhpcy5fdG9TYW5kYm94LmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZnJvbVNhbmRib3hWYWx1ZXMoeHM6IGFueVtdLCBwYXJhbWV0ZXJzPzogc3BlYy5QYXJhbWV0ZXJbXSkge1xuICAgIHJldHVybiB0aGlzLl9ib3hVbmJveFBhcmFtZXRlcnMoXG4gICAgICB4cyxcbiAgICAgIHBhcmFtZXRlcnMsXG4gICAgICB0aGlzLl9mcm9tU2FuZGJveC5iaW5kKHRoaXMpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9ib3hVbmJveFBhcmFtZXRlcnMoXG4gICAgeHM6IGFueVtdLFxuICAgIHBhcmFtZXRlcnM6IHNwZWMuUGFyYW1ldGVyW10gfCB1bmRlZmluZWQsXG4gICAgYm94VW5ib3g6ICh4OiBhbnksIHQ6IHdpcmUuT3B0aW9uYWxWYWx1ZU9yVm9pZCkgPT4gYW55LFxuICApIHtcbiAgICBwYXJhbWV0ZXJzID0gWy4uLihwYXJhbWV0ZXJzID8/IFtdKV07XG4gICAgY29uc3QgdmFyaWFkaWMgPVxuICAgICAgcGFyYW1ldGVycy5sZW5ndGggPiAwICYmICEhcGFyYW1ldGVyc1twYXJhbWV0ZXJzLmxlbmd0aCAtIDFdLnZhcmlhZGljO1xuICAgIC8vIFJlcGVhdCB0aGUgbGFzdCAodmFyaWFkaWMpIHR5cGUgdG8gbWF0Y2ggdGhlIG51bWJlciBvZiBhY3R1YWwgYXJndW1lbnRzXG4gICAgd2hpbGUgKHZhcmlhZGljICYmIHBhcmFtZXRlcnMubGVuZ3RoIDwgeHMubGVuZ3RoKSB7XG4gICAgICBwYXJhbWV0ZXJzLnB1c2gocGFyYW1ldGVyc1twYXJhbWV0ZXJzLmxlbmd0aCAtIDFdKTtcbiAgICB9XG4gICAgaWYgKHhzLmxlbmd0aCA+IHBhcmFtZXRlcnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBcmd1bWVudCBsaXN0ICgke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHhzLFxuICAgICAgICApfSkgbm90IHNhbWUgc2l6ZSBhcyBleHBlY3RlZCBhcmd1bWVudCBsaXN0IChsZW5ndGggJHtcbiAgICAgICAgICBwYXJhbWV0ZXJzLmxlbmd0aFxuICAgICAgICB9KWAsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4geHMubWFwKCh4LCBpKSA9PiBib3hVbmJveCh4LCBwYXJhbWV0ZXJzIVtpXSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGVidWcoLi4uYXJnczogYW55W10pIHtcbiAgICBpZiAodGhpcy50cmFjZUVuYWJsZWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tAanNpaS9rZXJuZWxdJywgLi4uYXJncyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZXMgdGhhdCBgZm5gIGlzIGNhbGxlZCBhbmQgZGVmZW5kcyBhZ2FpbnN0IGJlZ2lubmluZyB0byBpbnZva2VcbiAgICogYXN5bmMgbWV0aG9kcyB1bnRpbCBmbiBmaW5pc2hlcyAoc3VjY2Vzc2Z1bGx5IG9yIG5vdCkuXG4gICAqL1xuICBwcml2YXRlIF9lbnN1cmVTeW5jPFQ+KGRlc2M6IHN0cmluZywgZm46ICgpID0+IFQpOiBUIHtcbiAgICB0aGlzLnN5bmNJblByb2dyZXNzID0gZGVzYztcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZuKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGRlbGV0ZSB0aGlzLnN5bmNJblByb2dyZXNzO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2ZpbmRQcm9wZXJ0eVRhcmdldChvYmo6IGFueSwgcHJvcGVydHk6IHN0cmluZykge1xuICAgIGNvbnN0IHN1cGVyUHJvcCA9IHRoaXMuX2dldFN1cGVyUHJvcGVydHlOYW1lKHByb3BlcnR5KTtcbiAgICBpZiAoc3VwZXJQcm9wIGluIG9iaikge1xuICAgICAgcmV0dXJuIHN1cGVyUHJvcDtcbiAgICB9XG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9XG5cbiAgLy9cbiAgLy8gdHlwZSBpbmZvcm1hdGlvblxuICAvL1xuXG4gIHByaXZhdGUgX21ha2VjYmlkKCkge1xuICAgIHJldHVybiBganNpaTo6Y2FsbGJhY2s6OiR7dGhpcy5uZXh0aWQrK31gO1xuICB9XG5cbiAgcHJpdmF0ZSBfbWFrZXByaWQoKSB7XG4gICAgcmV0dXJuIGBqc2lpOjpwcm9taXNlOjoke3RoaXMubmV4dGlkKyt9YDtcbiAgfVxuXG4gIHByaXZhdGUgX3dyYXBTYW5kYm94Q29kZTxUPihmbjogKCkgPT4gVCk6IFQge1xuICAgIHJldHVybiBmbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGFyYml0cmFyeSBjb2RlIGluIGEgVk0gc2FuZGJveC5cbiAgICpcbiAgICogQHBhcmFtIGNvZGUgICAgICAgSmF2YVNjcmlwdCBjb2RlIHRvIGJlIGV4ZWN1dGVkIGluIHRoZSBWTVxuICAgKiBAcGFyYW0gc2FuZGJveCAgICBhIFZNIGNvbnRleHQgdG8gdXNlIGZvciBydW5uaW5nIHRoZSBjb2RlXG4gICAqIEBwYXJhbSBzb3VyY2VNYXBzIHNvdXJjZSBtYXBzIHRvIGJlIHVzZWQgaW4gY2FzZSBhbiBleGNlcHRpb24gaXMgdGhyb3duXG4gICAqIEBwYXJhbSBmaWxlbmFtZSAgIHRoZSBmaWxlIG5hbWUgdG8gdXNlIGZvciB0aGUgZXhlY3V0ZWQgY29kZVxuICAgKlxuICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0IG9mIGV2YWx1YXRpbmcgdGhlIGNvZGVcbiAgICovXG4gIHByaXZhdGUgX2V4ZWN1dGUoY29kZTogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2NyaXB0ID0gbmV3IHZtLlNjcmlwdChjb2RlLCB7IGZpbGVuYW1lIH0pO1xuICAgIHJldHVybiBzY3JpcHQucnVuSW5Db250ZXh0KHRoaXMuc2FuZGJveCwgeyBkaXNwbGF5RXJyb3JzOiB0cnVlIH0pO1xuICB9XG59XG5cbmludGVyZmFjZSBDYWxsYmFjayB7XG4gIG9ianJlZjogYXBpLk9ialJlZjtcbiAgb3ZlcnJpZGU6IGFwaS5NZXRob2RPdmVycmlkZTtcbiAgYXJnczogYW55W107XG4gIGV4cGVjdGVkUmV0dXJuVHlwZTogd2lyZS5PcHRpb25hbFZhbHVlT3JWb2lkO1xuXG4gIC8vIGNvbXBsZXRpb24gY2FsbGJhY2tzXG4gIHN1Y2NlZWQ6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55O1xuICBmYWlsOiAoLi4uYXJnczogYW55W10pID0+IGFueTtcbn1cblxuaW50ZXJmYWNlIEFzeW5jSW52b2NhdGlvbiB7XG4gIG1ldGhvZDogc3BlYy5NZXRob2Q7XG4gIHByb21pc2U6IFByb21pc2U8YW55Pjtcbn1cblxuY2xhc3MgQXNzZW1ibHkge1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IG1ldGFkYXRhOiBzcGVjLkFzc2VtYmx5LFxuICAgIHB1YmxpYyByZWFkb25seSBjbG9zdXJlOiBhbnksXG4gICkge31cbn1cbiJdfQ==
|
package/lib/objects.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export declare function jsiiTypeFqn(obj: any): string | undefined;
|
|
|
13
13
|
*
|
|
14
14
|
* This is to retain object identity across invocations.
|
|
15
15
|
*/
|
|
16
|
-
export declare function objectReference(obj: unknown): api.
|
|
16
|
+
export declare function objectReference(obj: unknown): api.ObjRef | undefined;
|
|
17
17
|
/**
|
|
18
18
|
* Set the JSII FQN for classes produced by a given constructor
|
|
19
19
|
*/
|
|
@@ -34,7 +34,7 @@ export declare class ObjectTable {
|
|
|
34
34
|
*
|
|
35
35
|
* Return the existing registration if available.
|
|
36
36
|
*/
|
|
37
|
-
registerObject(obj: unknown, fqn: string, interfaces?: string[]): api.
|
|
37
|
+
registerObject(obj: unknown, fqn: string, interfaces?: string[]): api.ObjRef;
|
|
38
38
|
/**
|
|
39
39
|
* Find the object and registered type for the given ObjRef
|
|
40
40
|
*/
|
package/lib/objects.js
CHANGED
|
@@ -45,9 +45,29 @@ function objectReference(obj) {
|
|
|
45
45
|
}
|
|
46
46
|
exports.objectReference = objectReference;
|
|
47
47
|
function tagObject(obj, objid, interfaces) {
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
const privateField = {
|
|
49
|
+
// Make sure the field does not show in `JSON.stringify` outputs, and is not
|
|
50
|
+
// copied by splat expressions (`{...obj}`), as this would be problematic.
|
|
51
|
+
// See https://github.com/aws/aws-cdk/issues/17876 for an example of the
|
|
52
|
+
// consequences this could have.
|
|
53
|
+
enumerable: false,
|
|
54
|
+
// Probably not necessary, but allow the property to be re-configured (it
|
|
55
|
+
// would be good to make this `false` in the future, but might cause weird
|
|
56
|
+
// bugs, so not doing it now...)
|
|
57
|
+
configurable: true,
|
|
58
|
+
writable: true,
|
|
59
|
+
};
|
|
60
|
+
// Log a warning in case we are re-tagging this value, so we can hopefully
|
|
61
|
+
// discover about the bugs we'd have if we did not make it configurable nor
|
|
62
|
+
// writable.
|
|
63
|
+
if (Object.prototype.hasOwnProperty.call(obj, OBJID_SYMBOL)) {
|
|
64
|
+
console.error(`[jsii/kernel] WARNING: object ${JSON.stringify(obj)} was already tagged as ${obj[OBJID_SYMBOL]}!`);
|
|
65
|
+
}
|
|
66
|
+
Object.defineProperty(obj, OBJID_SYMBOL, { ...privateField, value: objid });
|
|
67
|
+
Object.defineProperty(obj, IFACES_SYMBOL, {
|
|
68
|
+
...privateField,
|
|
69
|
+
value: interfaces,
|
|
70
|
+
});
|
|
51
71
|
}
|
|
52
72
|
/**
|
|
53
73
|
* Set the JSII FQN for classes produced by a given constructor
|
|
@@ -90,6 +110,11 @@ class ObjectTable {
|
|
|
90
110
|
for (const iface of (_a = existingRef[api.TOKEN_INTERFACES]) !== null && _a !== void 0 ? _a : []) {
|
|
91
111
|
allIfaces.add(iface);
|
|
92
112
|
}
|
|
113
|
+
// Note - obj[INTERFACES_SYMBOL] should already have been declared as a
|
|
114
|
+
// private property by a previous call to tagObject at this stage.
|
|
115
|
+
if (!Object.prototype.hasOwnProperty.call(obj, IFACES_SYMBOL)) {
|
|
116
|
+
console.error(`[jsii/kernel] WARNING: referenced object ${existingRef[api.TOKEN_REF]} does not have the ${String(IFACES_SYMBOL)} property!`);
|
|
117
|
+
}
|
|
93
118
|
this.objects[existingRef[api.TOKEN_REF]].interfaces =
|
|
94
119
|
obj[IFACES_SYMBOL] =
|
|
95
120
|
existingRef[api.TOKEN_INTERFACES] =
|
|
@@ -108,6 +133,7 @@ class ObjectTable {
|
|
|
108
133
|
* Find the object and registered type for the given ObjRef
|
|
109
134
|
*/
|
|
110
135
|
findObject(objref) {
|
|
136
|
+
var _a;
|
|
111
137
|
if (typeof objref !== 'object' || !(api.TOKEN_REF in objref)) {
|
|
112
138
|
throw new Error(`Malformed object reference: ${JSON.stringify(objref)}`);
|
|
113
139
|
}
|
|
@@ -116,6 +142,24 @@ class ObjectTable {
|
|
|
116
142
|
if (!obj) {
|
|
117
143
|
throw new Error(`Object ${objid} not found`);
|
|
118
144
|
}
|
|
145
|
+
// If there are "additional" interfaces declared on the objref, merge them
|
|
146
|
+
// into the returned object. This is used to support client-side forced
|
|
147
|
+
// down-casting (a.k.a: unsafe casting). We do NOT register the extra
|
|
148
|
+
// interfaces here so that if the client provided an interface that is
|
|
149
|
+
// actually not implemented, we aren't "poisoning" our state with that
|
|
150
|
+
// incorrect information.
|
|
151
|
+
const additionalInterfaces = objref[api.TOKEN_INTERFACES];
|
|
152
|
+
if (additionalInterfaces != null && additionalInterfaces.length > 0) {
|
|
153
|
+
return {
|
|
154
|
+
...obj,
|
|
155
|
+
interfaces: [
|
|
156
|
+
...((_a = obj.interfaces) !== null && _a !== void 0 ? _a : []),
|
|
157
|
+
// We append at the end so "registered" interface information has
|
|
158
|
+
// precedence over client-declared ones.
|
|
159
|
+
...additionalInterfaces,
|
|
160
|
+
],
|
|
161
|
+
};
|
|
162
|
+
}
|
|
119
163
|
return obj;
|
|
120
164
|
}
|
|
121
165
|
/**
|
|
@@ -191,4 +235,4 @@ class InterfaceCollection {
|
|
|
191
235
|
return this.interfaces[Symbol.iterator]();
|
|
192
236
|
}
|
|
193
237
|
}
|
|
194
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm9iamVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQW1DO0FBRW5DLDZCQUE2QjtBQUM3QixtREFBbUQ7QUFFbkQ7O0dBRUc7QUFDSCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFFckQ7O0dBRUc7QUFDSCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFFM0Q7O0dBRUc7QUFDSCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBRTNDOzs7Ozs7R0FNRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxHQUFROztJQUNsQyxhQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLDBDQUFFLEdBQUcsQ0FBQztBQUMzQyxDQUFDO0FBRkQsa0NBRUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLEdBQVk7SUFDMUMscUNBQXFDO0lBQ3JDLElBQUssR0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQzlCLE9BQU87WUFDTCxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRyxHQUFxQixDQUFDLFlBQVksQ0FBQztZQUNyRCxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFHLEdBQXFCLENBQUMsYUFBYSxDQUFDO1NBQzlELENBQUM7S0FDSDtJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFWRCwwQ0FVQztBQU9ELFNBQVMsU0FBUyxDQUFDLEdBQVksRUFBRSxLQUFhLEVBQUUsVUFBcUI7SUFDbkUsTUFBTSxPQUFPLEdBQUcsR0FBb0IsQ0FBQztJQUNyQyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzlCLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxVQUFVLENBQUM7QUFD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LEtBQUssQ0FDYix1Q0FBdUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQ3hFLENBQUM7U0FDSDtRQUNELElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFO1lBQ2xCLE9BQU87U0FDUjtRQUNELEtBQUssTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRTtZQUNqQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUM5QixTQUFTO2FBQ1Y7WUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzcGVjIGZyb20gJ0Bqc2lpL3NwZWMnO1xuXG5pbXBvcnQgKiBhcyBhcGkgZnJvbSAnLi9hcGknO1xuaW1wb3J0IHsgRU1QVFlfT0JKRUNUX0ZRTiB9IGZyb20gJy4vc2VyaWFsaXphdGlvbic7XG5cbi8qKlxuICogU3ltYm9sIHVuZGVyIHdoaWNoIHdlIHN0b3JlIHRoZSB7IHR5cGUgLT4gb2JqaWQgfSBtYXAgb24gb2JqZWN0IGluc3RhbmNlc1xuICovXG5jb25zdCBPQkpJRF9TWU1CT0wgPSBTeW1ib2wuZm9yKCckX19qc2lpX19vYmppZF9fJCcpO1xuXG4vKipcbiAqIFN5bWJvbCB1bmRlciB3aGljaCB3ZSBzdG9yZSB0aGUgaW50ZXJmYWNlcyBpbXBsZW1lbnRlZCBieSBpbnN0YW5jZXNcbiAqL1xuY29uc3QgSUZBQ0VTX1NZTUJPTCA9IFN5bWJvbC5mb3IoJyRfX2pzaWlfX2ludGVyZmFjZXNfXyQnKTtcblxuLyoqXG4gKiBTeW1ib2wgd2UgdXNlIHRvIHRhZyB0aGUgY29uc3RydWN0b3Igb2YgYSBKU0lJIGNsYXNzXG4gKi9cbmNvbnN0IEpTSUlfU1lNQk9MID0gU3ltYm9sLmZvcignX19qc2lpX18nKTtcblxuLyoqXG4gKiBHZXQgdGhlIEpTSUkgZnFuIGZvciBhbiBvYmplY3QgKGlmIGF2YWlsYWJsZSlcbiAqXG4gKiBUaGlzIHdpbGwgcmV0dXJuIHNvbWV0aGluZyBpZiB0aGUgb2JqZWN0IHdhcyBjb25zdHJ1Y3RlZCBmcm9tIGEgSlNJSS1lbmFibGVkXG4gKiBjbGFzcy9jb25zdHJ1Y3Rvciwgb3IgaWYgYSBsaXRlcmFsIG9iamVjdCB3YXMgYW5ub3RhdGVkIHdpdGggdHlwZVxuICogaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc2lpVHlwZUZxbihvYmo6IGFueSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBvYmouY29uc3RydWN0b3JbSlNJSV9TWU1CT0xdPy5mcW47XG59XG5cbi8qKlxuICogSWYgdGhpcyBvYmplY3Qgd2FzIHByZXZpb3VzbHkgc2VyaWFsaXplZCB1bmRlciBhIGdpdmVuIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBzYW1lIHJlZmVyZW5jZVxuICpcbiAqIFRoaXMgaXMgdG8gcmV0YWluIG9iamVjdCBpZGVudGl0eSBhY3Jvc3MgaW52b2NhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3RSZWZlcmVuY2Uob2JqOiB1bmtub3duKTogYXBpLkFubm90YXRlZE9ialJlZiB8IHVuZGVmaW5lZCB7XG4gIC8vIElmIHRoaXMgb2JqZWN0IGFzIGFscmVhZHkgcmV0dXJuZWRcbiAgaWYgKChvYmogYXMgYW55KVtPQkpJRF9TWU1CT0xdKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFthcGkuVE9LRU5fUkVGXTogKG9iaiBhcyBNYW5hZ2VkT2JqZWN0KVtPQkpJRF9TWU1CT0xdLFxuICAgICAgW2FwaS5UT0tFTl9JTlRFUkZBQ0VTXTogKG9iaiBhcyBNYW5hZ2VkT2JqZWN0KVtJRkFDRVNfU1lNQk9MXSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxudHlwZSBNYW5hZ2VkT2JqZWN0ID0ge1xuICBbT0JKSURfU1lNQk9MXTogc3RyaW5nO1xuICBbSUZBQ0VTX1NZTUJPTF0/OiBzdHJpbmdbXTtcbn07XG5cbmZ1bmN0aW9uIHRhZ09iamVjdChvYmo6IHVua25vd24sIG9iamlkOiBzdHJpbmcsIGludGVyZmFjZXM/OiBzdHJpbmdbXSkge1xuICBjb25zdCBtYW5hZ2VkID0gb2JqIGFzIE1hbmFnZWRPYmplY3Q7XG4gIG1hbmFnZWRbT0JKSURfU1lNQk9MXSA9IG9iamlkO1xuICBtYW5hZ2VkW0lGQUNFU19TWU1CT0xdID0gaW50ZXJmYWNlcztcbn1cblxuLyoqXG4gKiBTZXQgdGhlIEpTSUkgRlFOIGZvciBjbGFzc2VzIHByb2R1Y2VkIGJ5IGEgZ2l2ZW4gY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRhZ0pzaWlDb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcjogYW55LCBmcW46IHN0cmluZykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IsIEpTSUlfU1lNQk9MLCB7XG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgdmFsdWU6IHsgZnFuIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIFRhYmxlIG9mIEpTSUkgb2JqZWN0c1xuICpcbiAqIFRoZXJlIGNhbiBiZSBtdWx0aXBsZSByZWZlcmVuY2VzIHRvIHRoZSBzYW1lIG9iamVjdCwgZWFjaCB1bmRlciBhIGRpZmZlcmVudCByZXF1ZXN0ZWRcbiAqIHR5cGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBPYmplY3RUYWJsZSB7XG4gIHByaXZhdGUgb2JqZWN0czogeyBbb2JqaWQ6IHN0cmluZ106IFJlZ2lzdGVyZWRPYmplY3QgfSA9IHt9O1xuICBwcml2YXRlIG5leHRpZCA9IDEwMDAwO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc29sdmVUeXBlOiAoZnFuOiBzdHJpbmcpID0+IHNwZWMuVHlwZSxcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciB0aGUgZ2l2ZW4gb2JqZWN0IHdpdGggdGhlIGdpdmVuIHR5cGVcbiAgICpcbiAgICogUmV0dXJuIHRoZSBleGlzdGluZyByZWdpc3RyYXRpb24gaWYgYXZhaWxhYmxlLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyT2JqZWN0KFxuICAgIG9iajogdW5rbm93bixcbiAgICBmcW46IHN0cmluZyxcbiAgICBpbnRlcmZhY2VzPzogc3RyaW5nW10sXG4gICk6IGFwaS5Bbm5vdGF0ZWRPYmpSZWYge1xuICAgIGlmIChmcW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGUU4gY2Fubm90IGJlIHVuZGVmaW5lZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGV4aXN0aW5nUmVmID0gb2JqZWN0UmVmZXJlbmNlKG9iaik7XG4gICAgaWYgKGV4aXN0aW5nUmVmKSB7XG4gICAgICBpZiAoaW50ZXJmYWNlcykge1xuICAgICAgICBjb25zdCBhbGxJZmFjZXMgPSBuZXcgU2V0KGludGVyZmFjZXMpO1xuICAgICAgICBmb3IgKGNvbnN0IGlmYWNlIG9mIGV4aXN0aW5nUmVmW2FwaS5UT0tFTl9JTlRFUkZBQ0VTXSA/PyBbXSkge1xuICAgICAgICAgIGFsbElmYWNlcy5hZGQoaWZhY2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2JqZWN0c1tleGlzdGluZ1JlZlthcGkuVE9LRU5fUkVGXV0uaW50ZXJmYWNlcyA9XG4gICAgICAgICAgKG9iaiBhcyBhbnkpW0lGQUNFU19TWU1CT0xdID1cbiAgICAgICAgICBleGlzdGluZ1JlZlthcGkuVE9LRU5fSU5URVJGQUNFU10gPVxuICAgICAgICAgIGludGVyZmFjZXMgPVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVSZWR1bmRhbnQoQXJyYXkuZnJvbShhbGxJZmFjZXMpLCBmcW4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4aXN0aW5nUmVmO1xuICAgIH1cblxuICAgIGludGVyZmFjZXMgPSB0aGlzLnJlbW92ZVJlZHVuZGFudChpbnRlcmZhY2VzLCBmcW4pO1xuXG4gICAgY29uc3Qgb2JqaWQgPSB0aGlzLm1ha2VJZChmcW4pO1xuICAgIHRoaXMub2JqZWN0c1tvYmppZF0gPSB7IGluc3RhbmNlOiBvYmosIGZxbiwgaW50ZXJmYWNlcyB9O1xuICAgIHRhZ09iamVjdChvYmosIG9iamlkLCBpbnRlcmZhY2VzKTtcblxuICAgIHJldHVybiB7IFthcGkuVE9LRU5fUkVGXTogb2JqaWQsIFthcGkuVE9LRU5fSU5URVJGQUNFU106IGludGVyZmFjZXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBvYmplY3QgYW5kIHJlZ2lzdGVyZWQgdHlwZSBmb3IgdGhlIGdpdmVuIE9ialJlZlxuICAgKi9cbiAgcHVibGljIGZpbmRPYmplY3Qob2JqcmVmOiBhcGkuT2JqUmVmKTogUmVnaXN0ZXJlZE9iamVjdCB7XG4gICAgaWYgKHR5cGVvZiBvYmpyZWYgIT09ICdvYmplY3QnIHx8ICEoYXBpLlRPS0VOX1JFRiBpbiBvYmpyZWYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1hbGZvcm1lZCBvYmplY3QgcmVmZXJlbmNlOiAke0pTT04uc3RyaW5naWZ5KG9ianJlZil9YCk7XG4gICAgfVxuXG4gICAgY29uc3Qgb2JqaWQgPSBvYmpyZWZbYXBpLlRPS0VOX1JFRl07XG4gICAgY29uc3Qgb2JqID0gdGhpcy5vYmplY3RzW29iamlkXTtcbiAgICBpZiAoIW9iaikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBPYmplY3QgJHtvYmppZH0gbm90IGZvdW5kYCk7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIHRoZSByZWdpc3RyYXRpb24gd2l0aCB0aGUgZ2l2ZW4gb2JqcmVmXG4gICAqL1xuICBwdWJsaWMgZGVsZXRlT2JqZWN0KG9ianJlZjogYXBpLk9ialJlZikge1xuICAgIHRoaXMuZmluZE9iamVjdChvYmpyZWYpOyAvLyBtYWtlIHN1cmUgb2JqZWN0IGV4aXN0c1xuICAgIGRlbGV0ZSB0aGlzLm9iamVjdHNbb2JqcmVmW2FwaS5UT0tFTl9SRUZdXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5vYmplY3RzKS5sZW5ndGg7XG4gIH1cblxuICBwcml2YXRlIG1ha2VJZChmcW46IHN0cmluZykge1xuICAgIHJldHVybiBgJHtmcW59QCR7dGhpcy5uZXh0aWQrK31gO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVSZWR1bmRhbnQoXG4gICAgaW50ZXJmYWNlczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gICAgZnFuOiBzdHJpbmcsXG4gICk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWludGVyZmFjZXMgfHwgaW50ZXJmYWNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFNldChpbnRlcmZhY2VzKTtcbiAgICBjb25zdCBidWlsdEluID0gbmV3IEludGVyZmFjZUNvbGxlY3Rpb24odGhpcy5yZXNvbHZlVHlwZSk7XG5cbiAgICBpZiAoZnFuICE9PSBFTVBUWV9PQkpFQ1RfRlFOKSB7XG4gICAgICBidWlsdEluLmFkZEZyb21DbGFzcyhmcW4pO1xuICAgIH1cbiAgICBpbnRlcmZhY2VzLmZvckVhY2goYnVpbHRJbi5hZGRGcm9tSW50ZXJmYWNlLmJpbmQoYnVpbHRJbikpO1xuXG4gICAgZm9yIChjb25zdCBpZmFjZSBvZiBidWlsdEluKSB7XG4gICAgICByZXN1bHQuZGVsZXRlKGlmYWNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0LnNpemUgPiAwID8gQXJyYXkuZnJvbShyZXN1bHQpLnNvcnQoKSA6IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdGVyZWRPYmplY3Qge1xuICBpbnN0YW5jZTogYW55O1xuICBmcW46IHN0cmluZztcbiAgaW50ZXJmYWNlcz86IHN0cmluZ1tdO1xufVxuXG5jbGFzcyBJbnRlcmZhY2VDb2xsZWN0aW9uIGltcGxlbWVudHMgSXRlcmFibGU8c3RyaW5nPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJmYWNlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc29sdmVUeXBlOiAoZnFuOiBzdHJpbmcpID0+IHNwZWMuVHlwZSxcbiAgKSB7fVxuXG4gIHB1YmxpYyBhZGRGcm9tQ2xhc3MoZnFuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB0aSA9IHRoaXMucmVzb2x2ZVR5cGUoZnFuKTtcbiAgICBpZiAoIXNwZWMuaXNDbGFzc1R5cGUodGkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBFeHBlY3RlZCBhIGNsYXNzLCBidXQgcmVjZWl2ZWQgJHtzcGVjLmRlc2NyaWJlVHlwZVJlZmVyZW5jZSh0aSl9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aS5iYXNlKSB7XG4gICAgICB0aGlzLmFkZEZyb21DbGFzcyh0aS5iYXNlKTtcbiAgICB9XG4gICAgaWYgKHRpLmludGVyZmFjZXMpIHtcbiAgICAgIGZvciAoY29uc3QgaWZhY2Ugb2YgdGkuaW50ZXJmYWNlcykge1xuICAgICAgICBpZiAodGhpcy5pbnRlcmZhY2VzLmhhcyhpZmFjZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludGVyZmFjZXMuYWRkKGlmYWNlKTtcbiAgICAgICAgdGhpcy5hZGRGcm9tSW50ZXJmYWNlKGlmYWNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkRnJvbUludGVyZmFjZShmcW46IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHRpID0gdGhpcy5yZXNvbHZlVHlwZShmcW4pO1xuICAgIGlmICghc3BlYy5pc0ludGVyZmFjZVR5cGUodGkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBFeHBlY3RlZCBhbiBpbnRlcmZhY2UsIGJ1dCByZWNlaXZlZCAke3NwZWMuZGVzY3JpYmVUeXBlUmVmZXJlbmNlKHRpKX1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCF0aS5pbnRlcmZhY2VzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgaWZhY2Ugb2YgdGkuaW50ZXJmYWNlcykge1xuICAgICAgaWYgKHRoaXMuaW50ZXJmYWNlcy5oYXMoaWZhY2UpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnRlcmZhY2VzLmFkZChpZmFjZSk7XG4gICAgICB0aGlzLmFkZEZyb21JbnRlcmZhY2UoaWZhY2UpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICByZXR1cm4gdGhpcy5pbnRlcmZhY2VzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxufVxuIl19
|
|
238
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm9iamVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQW1DO0FBRW5DLDZCQUE2QjtBQUM3QixtREFBbUQ7QUFFbkQ7O0dBRUc7QUFDSCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFFckQ7O0dBRUc7QUFDSCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFFM0Q7O0dBRUc7QUFDSCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBRTNDOzs7Ozs7R0FNRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxHQUFROztJQUNsQyxhQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLDBDQUFFLEdBQUcsQ0FBQztBQUMzQyxDQUFDO0FBRkQsa0NBRUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLEdBQVk7SUFDMUMscUNBQXFDO0lBQ3JDLElBQUssR0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQzlCLE9BQU87WUFDTCxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRyxHQUFxQixDQUFDLFlBQVksQ0FBQztZQUNyRCxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFHLEdBQXFCLENBQUMsYUFBYSxDQUFDO1NBQzlELENBQUM7S0FDSDtJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFWRCwwQ0FVQztBQU9ELFNBQVMsU0FBUyxDQUFDLEdBQVksRUFBRSxLQUFhLEVBQUUsVUFBcUI7SUFDbkUsTUFBTSxZQUFZLEdBQXNEO1FBQ3RFLDRFQUE0RTtRQUM1RSwwRUFBMEU7UUFDMUUsd0VBQXdFO1FBQ3hFLGdDQUFnQztRQUNoQyxVQUFVLEVBQUUsS0FBSztRQUNqQix5RUFBeUU7UUFDekUsMEVB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LENBQUM7YUFDOUI7U0FDRjtJQUNILENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxHQUFXO1FBQ2pDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FDYix1Q0FBdUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQ3hFLENBQUM7U0FDSDtRQUNELElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFO1lBQ2xCLE9BQU87U0FDUjtRQUNELEtBQUssTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRTtZQUNqQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUM5QixTQUFTO2FBQ1Y7WUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzcGVjIGZyb20gJ0Bqc2lpL3NwZWMnO1xuXG5pbXBvcnQgKiBhcyBhcGkgZnJvbSAnLi9hcGknO1xuaW1wb3J0IHsgRU1QVFlfT0JKRUNUX0ZRTiB9IGZyb20gJy4vc2VyaWFsaXphdGlvbic7XG5cbi8qKlxuICogU3ltYm9sIHVuZGVyIHdoaWNoIHdlIHN0b3JlIHRoZSB7IHR5cGUgLT4gb2JqaWQgfSBtYXAgb24gb2JqZWN0IGluc3RhbmNlc1xuICovXG5jb25zdCBPQkpJRF9TWU1CT0wgPSBTeW1ib2wuZm9yKCckX19qc2lpX19vYmppZF9fJCcpO1xuXG4vKipcbiAqIFN5bWJvbCB1bmRlciB3aGljaCB3ZSBzdG9yZSB0aGUgaW50ZXJmYWNlcyBpbXBsZW1lbnRlZCBieSBpbnN0YW5jZXNcbiAqL1xuY29uc3QgSUZBQ0VTX1NZTUJPTCA9IFN5bWJvbC5mb3IoJyRfX2pzaWlfX2ludGVyZmFjZXNfXyQnKTtcblxuLyoqXG4gKiBTeW1ib2wgd2UgdXNlIHRvIHRhZyB0aGUgY29uc3RydWN0b3Igb2YgYSBKU0lJIGNsYXNzXG4gKi9cbmNvbnN0IEpTSUlfU1lNQk9MID0gU3ltYm9sLmZvcignX19qc2lpX18nKTtcblxuLyoqXG4gKiBHZXQgdGhlIEpTSUkgZnFuIGZvciBhbiBvYmplY3QgKGlmIGF2YWlsYWJsZSlcbiAqXG4gKiBUaGlzIHdpbGwgcmV0dXJuIHNvbWV0aGluZyBpZiB0aGUgb2JqZWN0IHdhcyBjb25zdHJ1Y3RlZCBmcm9tIGEgSlNJSS1lbmFibGVkXG4gKiBjbGFzcy9jb25zdHJ1Y3Rvciwgb3IgaWYgYSBsaXRlcmFsIG9iamVjdCB3YXMgYW5ub3RhdGVkIHdpdGggdHlwZVxuICogaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc2lpVHlwZUZxbihvYmo6IGFueSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBvYmouY29uc3RydWN0b3JbSlNJSV9TWU1CT0xdPy5mcW47XG59XG5cbi8qKlxuICogSWYgdGhpcyBvYmplY3Qgd2FzIHByZXZpb3VzbHkgc2VyaWFsaXplZCB1bmRlciBhIGdpdmVuIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBzYW1lIHJlZmVyZW5jZVxuICpcbiAqIFRoaXMgaXMgdG8gcmV0YWluIG9iamVjdCBpZGVudGl0eSBhY3Jvc3MgaW52b2NhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3RSZWZlcmVuY2Uob2JqOiB1bmtub3duKTogYXBpLk9ialJlZiB8IHVuZGVmaW5lZCB7XG4gIC8vIElmIHRoaXMgb2JqZWN0IGFzIGFscmVhZHkgcmV0dXJuZWRcbiAgaWYgKChvYmogYXMgYW55KVtPQkpJRF9TWU1CT0xdKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFthcGkuVE9LRU5fUkVGXTogKG9iaiBhcyBNYW5hZ2VkT2JqZWN0KVtPQkpJRF9TWU1CT0xdLFxuICAgICAgW2FwaS5UT0tFTl9JTlRFUkZBQ0VTXTogKG9iaiBhcyBNYW5hZ2VkT2JqZWN0KVtJRkFDRVNfU1lNQk9MXSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxudHlwZSBNYW5hZ2VkT2JqZWN0ID0ge1xuICBbT0JKSURfU1lNQk9MXTogc3RyaW5nO1xuICBbSUZBQ0VTX1NZTUJPTF0/OiBzdHJpbmdbXTtcbn07XG5cbmZ1bmN0aW9uIHRhZ09iamVjdChvYmo6IHVua25vd24sIG9iamlkOiBzdHJpbmcsIGludGVyZmFjZXM/OiBzdHJpbmdbXSkge1xuICBjb25zdCBwcml2YXRlRmllbGQ6IE9taXQ8UHJvcGVydHlEZXNjcmlwdG9yLCAndmFsdWUnIHwgJ2dldCcgfCAnc2V0Jz4gPSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBmaWVsZCBkb2VzIG5vdCBzaG93IGluIGBKU09OLnN0cmluZ2lmeWAgb3V0cHV0cywgYW5kIGlzIG5vdFxuICAgIC8vIGNvcGllZCBieSBzcGxhdCBleHByZXNzaW9ucyAoYHsuLi5vYmp9YCksIGFzIHRoaXMgd291bGQgYmUgcHJvYmxlbWF0aWMuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMTc4NzYgZm9yIGFuIGV4YW1wbGUgb2YgdGhlXG4gICAgLy8gY29uc2VxdWVuY2VzIHRoaXMgY291bGQgaGF2ZS5cbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAvLyBQcm9iYWJseSBub3QgbmVjZXNzYXJ5LCBidXQgYWxsb3cgdGhlIHByb3BlcnR5IHRvIGJlIHJlLWNvbmZpZ3VyZWQgKGl0XG4gICAgLy8gd291bGQgYmUgZ29vZCB0byBtYWtlIHRoaXMgYGZhbHNlYCBpbiB0aGUgZnV0dXJlLCBidXQgbWlnaHQgY2F1c2Ugd2VpcmRcbiAgICAvLyBidWdzLCBzbyBub3QgZG9pbmcgaXQgbm93Li4uKVxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgfTtcblxuICAvLyBMb2cgYSB3YXJuaW5nIGluIGNhc2Ugd2UgYXJlIHJlLXRhZ2dpbmcgdGhpcyB2YWx1ZSwgc28gd2UgY2FuIGhvcGVmdWxseVxuICAvLyBkaXNjb3ZlciBhYm91dCB0aGUgYnVncyB3ZSdkIGhhdmUgaWYgd2UgZGlkIG5vdCBtYWtlIGl0IGNvbmZpZ3VyYWJsZSBub3JcbiAgLy8gd3JpdGFibGUuXG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBPQkpJRF9TWU1CT0wpKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGBbanNpaS9rZXJuZWxdIFdBUk5JTkc6IG9iamVjdCAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBvYmogYXMgYW55LFxuICAgICAgKX0gd2FzIGFscmVhZHkgdGFnZ2VkIGFzICR7KG9iaiBhcyBhbnkpW09CSklEX1NZTUJPTF19IWAsXG4gICAgKTtcbiAgfVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIE9CSklEX1NZTUJPTCwgeyAuLi5wcml2YXRlRmllbGQsIHZhbHVlOiBvYmppZCB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgSUZBQ0VTX1NZTUJPTCwge1xuICAgIC4uLnByaXZhdGVGaWVsZCxcbiAgICB2YWx1ZTogaW50ZXJmYWNlcyxcbiAgfSk7XG59XG5cbi8qKlxuICogU2V0IHRoZSBKU0lJIEZRTiBmb3IgY2xhc3NlcyBwcm9kdWNlZCBieSBhIGdpdmVuIGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0YWdKc2lpQ29uc3RydWN0b3IoY29uc3RydWN0b3I6IGFueSwgZnFuOiBzdHJpbmcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnN0cnVjdG9yLCBKU0lJX1NZTUJPTCwge1xuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICAgIHZhbHVlOiB7IGZxbiB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBUYWJsZSBvZiBKU0lJIG9iamVjdHNcbiAqXG4gKiBUaGVyZSBjYW4gYmUgbXVsdGlwbGUgcmVmZXJlbmNlcyB0byB0aGUgc2FtZSBvYmplY3QsIGVhY2ggdW5kZXIgYSBkaWZmZXJlbnQgcmVxdWVzdGVkXG4gKiB0eXBlLlxuICovXG5leHBvcnQgY2xhc3MgT2JqZWN0VGFibGUge1xuICBwcml2YXRlIG9iamVjdHM6IHsgW29iamlkOiBzdHJpbmddOiBSZWdpc3RlcmVkT2JqZWN0IH0gPSB7fTtcbiAgcHJpdmF0ZSBuZXh0aWQgPSAxMDAwMDtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNvbHZlVHlwZTogKGZxbjogc3RyaW5nKSA9PiBzcGVjLlR5cGUsXG4gICkge31cblxuICAvKipcbiAgICogUmVnaXN0ZXIgdGhlIGdpdmVuIG9iamVjdCB3aXRoIHRoZSBnaXZlbiB0eXBlXG4gICAqXG4gICAqIFJldHVybiB0aGUgZXhpc3RpbmcgcmVnaXN0cmF0aW9uIGlmIGF2YWlsYWJsZS5cbiAgICovXG4gIHB1YmxpYyByZWdpc3Rlck9iamVjdChcbiAgICBvYmo6IHVua25vd24sXG4gICAgZnFuOiBzdHJpbmcsXG4gICAgaW50ZXJmYWNlcz86IHN0cmluZ1tdLFxuICApOiBhcGkuT2JqUmVmIHtcbiAgICBpZiAoZnFuID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRlFOIGNhbm5vdCBiZSB1bmRlZmluZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBleGlzdGluZ1JlZiA9IG9iamVjdFJlZmVyZW5jZShvYmopO1xuICAgIGlmIChleGlzdGluZ1JlZikge1xuICAgICAgaWYgKGludGVyZmFjZXMpIHtcbiAgICAgICAgY29uc3QgYWxsSWZhY2VzID0gbmV3IFNldChpbnRlcmZhY2VzKTtcbiAgICAgICAgZm9yIChjb25zdCBpZmFjZSBvZiBleGlzdGluZ1JlZlthcGkuVE9LRU5fSU5URVJGQUNFU10gPz8gW10pIHtcbiAgICAgICAgICBhbGxJZmFjZXMuYWRkKGlmYWNlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3RlIC0gb2JqW0lOVEVSRkFDRVNfU1lNQk9MXSBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gZGVjbGFyZWQgYXMgYVxuICAgICAgICAvLyBwcml2YXRlIHByb3BlcnR5IGJ5IGEgcHJldmlvdXMgY2FsbCB0byB0YWdPYmplY3QgIGF0IHRoaXMgc3RhZ2UuXG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgSUZBQ0VTX1NZTUJPTCkpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYFtqc2lpL2tlcm5lbF0gV0FSTklORzogcmVmZXJlbmNlZCBvYmplY3QgJHtcbiAgICAgICAgICAgICAgZXhpc3RpbmdSZWZbYXBpLlRPS0VOX1JFRl1cbiAgICAgICAgICAgIH0gZG9lcyBub3QgaGF2ZSB0aGUgJHtTdHJpbmcoSUZBQ0VTX1NZTUJPTCl9IHByb3BlcnR5IWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub2JqZWN0c1tleGlzdGluZ1JlZlthcGkuVE9LRU5fUkVGXV0uaW50ZXJmYWNlcyA9XG4gICAgICAgICAgKG9iaiBhcyBhbnkpW0lGQUNFU19TWU1CT0xdID1cbiAgICAgICAgICBleGlzdGluZ1JlZlthcGkuVE9LRU5fSU5URVJGQUNFU10gPVxuICAgICAgICAgIGludGVyZmFjZXMgPVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVSZWR1bmRhbnQoQXJyYXkuZnJvbShhbGxJZmFjZXMpLCBmcW4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4aXN0aW5nUmVmO1xuICAgIH1cblxuICAgIGludGVyZmFjZXMgPSB0aGlzLnJlbW92ZVJlZHVuZGFudChpbnRlcmZhY2VzLCBmcW4pO1xuXG4gICAgY29uc3Qgb2JqaWQgPSB0aGlzLm1ha2VJZChmcW4pO1xuICAgIHRoaXMub2JqZWN0c1tvYmppZF0gPSB7IGluc3RhbmNlOiBvYmosIGZxbiwgaW50ZXJmYWNlcyB9O1xuICAgIHRhZ09iamVjdChvYmosIG9iamlkLCBpbnRlcmZhY2VzKTtcblxuICAgIHJldHVybiB7IFthcGkuVE9LRU5fUkVGXTogb2JqaWQsIFthcGkuVE9LRU5fSU5URVJGQUNFU106IGludGVyZmFjZXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBvYmplY3QgYW5kIHJlZ2lzdGVyZWQgdHlwZSBmb3IgdGhlIGdpdmVuIE9ialJlZlxuICAgKi9cbiAgcHVibGljIGZpbmRPYmplY3Qob2JqcmVmOiBhcGkuT2JqUmVmKTogUmVnaXN0ZXJlZE9iamVjdCB7XG4gICAgaWYgKHR5cGVvZiBvYmpyZWYgIT09ICdvYmplY3QnIHx8ICEoYXBpLlRPS0VOX1JFRiBpbiBvYmpyZWYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1hbGZvcm1lZCBvYmplY3QgcmVmZXJlbmNlOiAke0pTT04uc3RyaW5naWZ5KG9ianJlZil9YCk7XG4gICAgfVxuXG4gICAgY29uc3Qgb2JqaWQgPSBvYmpyZWZbYXBpLlRPS0VOX1JFRl07XG4gICAgY29uc3Qgb2JqID0gdGhpcy5vYmplY3RzW29iamlkXTtcbiAgICBpZiAoIW9iaikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBPYmplY3QgJHtvYmppZH0gbm90IGZvdW5kYCk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgYXJlIFwiYWRkaXRpb25hbFwiIGludGVyZmFjZXMgZGVjbGFyZWQgb24gdGhlIG9ianJlZiwgbWVyZ2UgdGhlbVxuICAgIC8vIGludG8gdGhlIHJldHVybmVkIG9iamVjdC4gVGhpcyBpcyB1c2VkIHRvIHN1cHBvcnQgY2xpZW50LXNpZGUgZm9yY2VkXG4gICAgLy8gZG93bi1jYXN0aW5nIChhLmsuYTogdW5zYWZlIGNhc3RpbmcpLiBXZSBkbyBOT1QgcmVnaXN0ZXIgdGhlIGV4dHJhXG4gICAgLy8gaW50ZXJmYWNlcyBoZXJlIHNvIHRoYXQgaWYgdGhlIGNsaWVudCBwcm92aWRlZCBhbiBpbnRlcmZhY2UgdGhhdCBpc1xuICAgIC8vIGFjdHVhbGx5IG5vdCBpbXBsZW1lbnRlZCwgd2UgYXJlbid0IFwicG9pc29uaW5nXCIgb3VyIHN0YXRlIHdpdGggdGhhdFxuICAgIC8vIGluY29ycmVjdCBpbmZvcm1hdGlvbi5cbiAgICBjb25zdCBhZGRpdGlvbmFsSW50ZXJmYWNlcyA9IG9ianJlZlthcGkuVE9LRU5fSU5URVJGQUNFU107XG4gICAgaWYgKGFkZGl0aW9uYWxJbnRlcmZhY2VzICE9IG51bGwgJiYgYWRkaXRpb25hbEludGVyZmFjZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqLFxuICAgICAgICBpbnRlcmZhY2VzOiBbXG4gICAgICAgICAgLi4uKG9iai5pbnRlcmZhY2VzID8/IFtdKSxcbiAgICAgICAgICAvLyBXZSBhcHBlbmQgYXQgdGhlIGVuZCBzbyBcInJlZ2lzdGVyZWRcIiBpbnRlcmZhY2UgaW5mb3JtYXRpb24gaGFzXG4gICAgICAgICAgLy8gcHJlY2VkZW5jZSBvdmVyIGNsaWVudC1kZWNsYXJlZCBvbmVzLlxuICAgICAgICAgIC4uLmFkZGl0aW9uYWxJbnRlcmZhY2VzLFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSB0aGUgcmVnaXN0cmF0aW9uIHdpdGggdGhlIGdpdmVuIG9ianJlZlxuICAgKi9cbiAgcHVibGljIGRlbGV0ZU9iamVjdChvYmpyZWY6IGFwaS5PYmpSZWYpIHtcbiAgICB0aGlzLmZpbmRPYmplY3Qob2JqcmVmKTsgLy8gbWFrZSBzdXJlIG9iamVjdCBleGlzdHNcbiAgICBkZWxldGUgdGhpcy5vYmplY3RzW29ianJlZlthcGkuVE9LRU5fUkVGXV07XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMub2JqZWN0cykubGVuZ3RoO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlSWQoZnFuOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYCR7ZnFufUAke3RoaXMubmV4dGlkKyt9YDtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUmVkdW5kYW50KFxuICAgIGludGVyZmFjZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuICAgIGZxbjogc3RyaW5nLFxuICApOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFpbnRlcmZhY2VzIHx8IGludGVyZmFjZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQoaW50ZXJmYWNlcyk7XG4gICAgY29uc3QgYnVpbHRJbiA9IG5ldyBJbnRlcmZhY2VDb2xsZWN0aW9uKHRoaXMucmVzb2x2ZVR5cGUpO1xuXG4gICAgaWYgKGZxbiAhPT0gRU1QVFlfT0JKRUNUX0ZRTikge1xuICAgICAgYnVpbHRJbi5hZGRGcm9tQ2xhc3MoZnFuKTtcbiAgICB9XG4gICAgaW50ZXJmYWNlcy5mb3JFYWNoKGJ1aWx0SW4uYWRkRnJvbUludGVyZmFjZS5iaW5kKGJ1aWx0SW4pKTtcblxuICAgIGZvciAoY29uc3QgaWZhY2Ugb2YgYnVpbHRJbikge1xuICAgICAgcmVzdWx0LmRlbGV0ZShpZmFjZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdC5zaXplID4gMCA/IEFycmF5LmZyb20ocmVzdWx0KS5zb3J0KCkgOiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlcmVkT2JqZWN0IHtcbiAgaW5zdGFuY2U6IGFueTtcbiAgZnFuOiBzdHJpbmc7XG4gIGludGVyZmFjZXM/OiBzdHJpbmdbXTtcbn1cblxuY2xhc3MgSW50ZXJmYWNlQ29sbGVjdGlvbiBpbXBsZW1lbnRzIEl0ZXJhYmxlPHN0cmluZz4ge1xuICBwcml2YXRlIHJlYWRvbmx5IGludGVyZmFjZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNvbHZlVHlwZTogKGZxbjogc3RyaW5nKSA9PiBzcGVjLlR5cGUsXG4gICkge31cblxuICBwdWJsaWMgYWRkRnJvbUNsYXNzKGZxbjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdGkgPSB0aGlzLnJlc29sdmVUeXBlKGZxbik7XG4gICAgaWYgKCFzcGVjLmlzQ2xhc3NUeXBlKHRpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRXhwZWN0ZWQgYSBjbGFzcywgYnV0IHJlY2VpdmVkICR7c3BlYy5kZXNjcmliZVR5cGVSZWZlcmVuY2UodGkpfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGkuYmFzZSkge1xuICAgICAgdGhpcy5hZGRGcm9tQ2xhc3ModGkuYmFzZSk7XG4gICAgfVxuICAgIGlmICh0aS5pbnRlcmZhY2VzKSB7XG4gICAgICBmb3IgKGNvbnN0IGlmYWNlIG9mIHRpLmludGVyZmFjZXMpIHtcbiAgICAgICAgaWYgKHRoaXMuaW50ZXJmYWNlcy5oYXMoaWZhY2UpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnRlcmZhY2VzLmFkZChpZmFjZSk7XG4gICAgICAgIHRoaXMuYWRkRnJvbUludGVyZmFjZShpZmFjZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFkZEZyb21JbnRlcmZhY2UoZnFuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB0aSA9IHRoaXMucmVzb2x2ZVR5cGUoZnFuKTtcbiAgICBpZiAoIXNwZWMuaXNJbnRlcmZhY2VUeXBlKHRpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRXhwZWN0ZWQgYW4gaW50ZXJmYWNlLCBidXQgcmVjZWl2ZWQgJHtzcGVjLmRlc2NyaWJlVHlwZVJlZmVyZW5jZSh0aSl9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghdGkuaW50ZXJmYWNlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGlmYWNlIG9mIHRpLmludGVyZmFjZXMpIHtcbiAgICAgIGlmICh0aGlzLmludGVyZmFjZXMuaGFzKGlmYWNlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW50ZXJmYWNlcy5hZGQoaWZhY2UpO1xuICAgICAgdGhpcy5hZGRGcm9tSW50ZXJmYWNlKGlmYWNlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW50ZXJmYWNlc1tTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cbn1cbiJdfQ==
|
package/lib/serialization.js
CHANGED
|
@@ -278,7 +278,7 @@ exports.SERIALIZERS = {
|
|
|
278
278
|
});
|
|
279
279
|
*/
|
|
280
280
|
host.debug('Returning value type by reference');
|
|
281
|
-
return host.objects.registerObject(value,
|
|
281
|
+
return host.objects.registerObject(value, exports.EMPTY_OBJECT_FQN, [
|
|
282
282
|
optionalValue.type.fqn,
|
|
283
283
|
]);
|
|
284
284
|
},
|
|
@@ -347,7 +347,7 @@ exports.SERIALIZERS = {
|
|
|
347
347
|
const interfaces = spec.isInterfaceType(expectedType)
|
|
348
348
|
? [expectedType.fqn]
|
|
349
349
|
: undefined;
|
|
350
|
-
const jsiiType = (_a = objects_1.jsiiTypeFqn(value)) !== null && _a !== void 0 ? _a : (spec.isClassType(expectedType) ? expectedType.fqn :
|
|
350
|
+
const jsiiType = (_a = objects_1.jsiiTypeFqn(value)) !== null && _a !== void 0 ? _a : (spec.isClassType(expectedType) ? expectedType.fqn : exports.EMPTY_OBJECT_FQN);
|
|
351
351
|
return host.objects.registerObject(value, jsiiType, interfaces);
|
|
352
352
|
},
|
|
353
353
|
deserialize(value, optionalValue, host) {
|
|
@@ -709,4 +709,4 @@ function isByReferenceOnly(obj) {
|
|
|
709
709
|
} while (Object.getPrototypeOf((curr = Object.getPrototypeOf(curr))) != null);
|
|
710
710
|
return false;
|
|
711
711
|
}
|
|
712
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNlcmlhbGl6YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRzs7O0FBRUgsbUNBQW1DO0FBRW5DLCtCQWFlO0FBQ2YsdUNBQXNFO0FBRXRFLHdCQUF3QjtBQW9CeEI7O0dBRUc7QUFDVSxRQUFBLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztBQUU1QixRQUFBLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQTBDakQsUUFBQSxXQUFXLEdBQWdDO0lBQ3RELHlFQUF5RTtJQUN6RSxtQkFBeUIsRUFBRTtRQUN6QixTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJO1lBQzFCLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtnQkFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN6QztZQUNELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJO1lBQzVCLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtnQkFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN6QztZQUNELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7S0FDRjtJQUVELHlFQUF5RTtJQUN6RSxtQkFBeUIsRUFBRTtRQUN6QixTQUFTLENBQUMsS0FBSyxFQUFFLGFBQWE7WUFDNUIsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxFQUFFO2dCQUNuQyxPQUFPLFNBQVMsQ0FBQzthQUNsQjtZQUNELElBQUksYUFBYSxLQUFLLE1BQU0sRUFBRTtnQkFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO2FBQ3ZE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LENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbkQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMxRCxJQUNFLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLEdBQUcsS0FBSSxJQUFJO2dCQUNsQixDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxHQUFHLEtBQUksSUFBSTtnQkFDbEIsUUFBTyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsS0FBSyxDQUFBLEtBQUssVUFBVSxFQUNsQztnQkFDQSx3RkFBd0Y7Z0JBQ3hGLE9BQU8sSUFBSSxDQUFDO2FBQ2I7U0FDRjtRQUNELDJFQUEyRTtLQUM1RSxRQUFRLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFO0lBRTlFLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSGFuZGxpbmcgb2YgdHlwZXMgaW4gSlNJSVxuICpcbiAqIFR5cGVzIHdpbGwgYmUgc2VyaWFsaXplZCBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyB0YWJsZTpcbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAqICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBKQVZBU0NSSVBUIFRZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiB1bmRlZmluZWQvbnVsbCDilIIgICBkYXRlICAgIOKUgiBzY2FsYXIgKCopIOKUgiAgICAgYXJyYXkgICAgIOKUgiBKU0lJLWNsYXNzIG9iamVjdCDilIIgbGl0ZXJhbCBvYmplY3QgIOKUglxuICog4pSc4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkXG4gKiDilIIgREVDTEFSRUQg4pSCIHZvaWQgICAgICAg4pSCIHVuZGVmaW5lZCAgICAgIOKUgiB1bmRlZmluZWQg4pSCIHVuZGVmaW5lZCAg4pSCIHVuZGVmaW5lZCAgICAg4pSCIHVuZGVmaW5lZCAgICAgICAgIOKUgiB1bmRlZmluZWQgICAgICAg4pSCXG4gKiDilIIgVFlQRSAgICAg4pSCIGRhdGUgICAgICAg4pSCIHVuZGVmaW5lZCjigKApICAg4pSCIHsgZGF0ZSB9ICDilIIgLSAgICAgICAgICDilIIgLSAgICAgICAgICAgICDilIIgLSAgICAgICAgICAgICAgICAg4pSCIC0gICAgICAgICAgICAgICDilIJcbiAqIOKUgiAgICAgICAgICDilIIgc2NhbGFyICgqKSDilIIgdW5kZWZpbmVkKOKAoCkgICDilIIgLSAgICAgICAgIOKUgiB2YWx1ZSAgICAgIOKUgiAtICAgICAgICAgICAgIOKUgiAtICAgICAgICAgICAgICAgICDilIIgLSAgICAgICAgICAgICAgIOKUglxuICog4pSCICAgICAgICAgIOKUgiBqc29uICAgICAgIOKUgiB1bmRlZmluZWQgICAgICDilIIgc3RyaW5nICAgIOKUgiB2YWx1ZSAgICAgIOKUgiBhcnJheS9SKGpzb24pIOKUgiAtICAgICAgICAgICAgICAgICDilIIgYnl2YWx1ZS9SKGpzb24pIOKUglxuICog4pSCICAgICAgICAgIOKUgiBlbnVtICAgICAgIOKUgiB1bmRlZmluZWQo4oCgKSAgIOKUgiAtICAgICAgICAg4pSCIHsgZW51bSB9ICAg4pSCIC0gICAgICAgICAgICAg4pSCIC0gICAgICAgICAgICAgICAgIOKUgiAtICAgICAgICAgICAgICAg4pSCXG4gKiDilIIgICAgICAgICAg4pSCIGFycmF5IG9mIFQg4pSCIHVuZGVmaW5lZCjigKApICAg4pSCIC0gICAgICAgICDilIIgLSAgICAgICAgICDilIIgYXJyYXkvUihUKSAgICDilIIgLSAgICAgICAgICAgICAgICAg4pSCIC0gICAgICAgICAgICAgICDilIJcbiAqIOKUgiAgICAgICAgICDilIIgbWFwIG9mIFQgICDilIIgdW5kZWZpbmVkKOKAoCkgICDilIIgLSAgICAgICAgIOKUgiAtICAgICAgICAgIOKUgiAtICAgICAgICAgICAgIOKUgiAtICAgICAgICAgICAgICAgICDilIIgYnl2YWx1ZS9SKFQpICAgIOKUglxuICog4pSCICAgICAgICAgIOKUgiBpbnRlcmZhY2UgIOKUgiB1bmRlZmluZWQo4oCgKSAgIOKUgiAtICAgICAgICAg4pSCIC0gICAgICAgICAg4pSCIC0gICAgICAgICAgICAg4pSCIHsgcmVmIH0gICAgICAgICAgIOKUgiB7IHJlZjogcHJveHkgfSAg4pSCXG4gKiDilIIgICAgICAgICAg4pSCIHN0cnVjdCAgICAg4pSCIHVuZGVmaW5lZCjigKApICAg4pSCIC0gICAgICAgICDilIIgLSAgICAgICAgICDilIIgLSAgICAgICAgICAgICDilIIgLSAgICAgICAgICAgICAgICAg4pSCIGJ5dmFsdWUvUihUW2tdKSDilIJcbiAqIOKUgiAgICAgICAgICDilIIgY2xhc3MgICAgICDilIIgdW5kZWZpbmVkKOKAoCkgICDilIIgLSAgICAgICAgIOKUgiAtICAgICAgICAgIOKUgiAtICAgICAgICAgICAgIOKUgiB7IHJlZiB9ICAgICAgICAgICDilIIgeyByZWY6IHByb3h5IH0gIOKUglxuICog4pSCICAgICAgICAgIOKUgiBhbnkgICAgICAgIOKUgiB1bmRlZmluZWQgICAgICDilIIgeyBkYXRlIH0gIOKUgiB2YWx1ZSAgICAgIOKUgiBhcnJheS9SKGFueSkgIOKUgiB7IHJlZiB9ICAgICAgICAgICDilIIgYnl2YWx1ZS9SKGFueSkgIOKUglxuICog4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gKlxuICogIC0gKCopIHNjYWxhciBtZWFucyAnc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbidcbiAqICAtICjigKApIHRocm93IGlmIG5vdCBudWxsYWJsZVxuICogIC0gL1IodCkgcmVjdXJzZSB3aXRoIGRlY2xhcmVkIHR5cGUgdFxuICovXG5cbmltcG9ydCAqIGFzIHNwZWMgZnJvbSAnQGpzaWkvc3BlYyc7XG5cbmltcG9ydCB7XG4gIGlzT2JqUmVmLFxuICBpc1dpcmVEYXRlLFxuICBpc1dpcmVFbnVtLFxuICBpc1dpcmVNYXAsXG4gIE9ialJlZixcbiAgVE9LRU5fREFURSxcbiAgVE9LRU5fRU5VTSxcbiAgVE9LRU5fTUFQLFxuICBXaXJlRGF0ZSxcbiAgV2lyZUVudW0sXG4gIGlzV2lyZVN0cnVjdCxcbiAgVE9LRU5fU1RSVUNULFxufSBmcm9tICcuL2FwaSc7XG5pbXBvcnQgeyBqc2lpVHlwZUZxbiwgb2JqZWN0UmVmZXJlbmNlLCBPYmplY3RUYWJsZSB9IGZyb20gJy4vb2JqZWN0cyc7XG5cbmltcG9ydCB7IGFwaSB9IGZyb20gJy4nO1xuXG4vKipcbiAqIEEgc3BlY2lmaWMgc2luZ2xldG9uIHR5cGUgdG8gYmUgZXhwbGljaXQgYWJvdXQgYSBWb2lkIHR5cGVcbiAqXG4gKiBJbiB0aGUgc3BlYywgJ3ZvaWQnIGlzIHJlcHJlc2VudGVkIGFzICd1bmRlZmluZWQnKCopLCBidXQgYWxsb3dpbmcgdGhlXG4gKiB2YWx1ZSAndW5kZWZpbmVkJyBpbiBmdW5jdGlvbiBjYWxscyBoYXMgbGVhZCB0byBjb25zdW1lcnMgZmFpbGluZyB0byBwYXNzXG4gKiB0eXBlIGluZm9ybWF0aW9uIHRoYXQgdGhleSBoYWQsIGp1c3QgYmVjYXVzZSB0aGV5IGRpZG4ndCBcImhhdmUgdG9cIiAodGhlXG4gKiBwYXJhbWV0ZXIgd2FzIG9wdGlvbmFsKS5cbiAqXG4gKiAoKikgQXMgaW4sIGRlY2xhcmF0aW9uIG9mIGEgbWV0aG9kIGxvb2tzIGxpa2UgeyByZXR1cm5zPzogVHlwZVJlZmVyZW5jZSB9XG4gKiBhbmQgdGhlIGFic2VuY2Ugb2YgYSB0eXBlIG1lYW5zIGl0IHJldHVybnMgJ3ZvaWQnLlxuICovXG5leHBvcnQgdHlwZSBWb2lkID0gJ3ZvaWQnO1xuXG4vKipcbiAqIEEgdHlwZSBpbnN0YW5jZSwgb3IgVm9pZFxuICovXG5leHBvcnQgdHlwZSBPcHRpb25hbFZhbHVlT3JWb2lkID0gc3BlYy5PcHRpb25hbFZhbHVlIHwgVm9pZDtcblxuLyoqXG4gKiBBIHNwZWNpYWwgRlFOIHRoYXQgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGVtcHR5IGphdmFzY3JpcHQgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNvbnN0IEVNUFRZX09CSkVDVF9GUU4gPSAnT2JqZWN0JztcblxuZXhwb3J0IGNvbnN0IFNZTUJPTF9XSVJFX1RZUEUgPSBTeW1ib2wuZm9yKCckanNpaSR3aXJlVHlwZSQnKTtcblxuLyoqXG4gKiBUaGUgdHlwZSBraW5kLCB0aGF0IGNvbnRyb2xzIGhvdyBpdCB3aWxsIGJlIHNlcmlhbGl6ZWQgYWNjb3JkaW5nIHRvIHRoZSBhYm92ZSB0YWJsZVxuICovXG5leHBvcnQgY29uc3QgZW51bSBTZXJpYWxpemF0aW9uQ2xhc3Mge1xuICBWb2lkID0gJ1ZvaWQnLFxuICBEYXRlID0gJ0RhdGUnLFxuICBTY2FsYXIgPSAnU2NhbGFyJyxcbiAgSnNvbiA9ICdKc29uJyxcbiAgRW51bSA9ICdFbnVtJyxcbiAgQXJyYXkgPSAnQXJyYXknLFxuICBNYXAgPSAnTWFwJyxcbiAgU3RydWN0ID0gJ1N0cnVjdCcsXG4gIFJlZmVyZW5jZVR5cGUgPSAnUmVmVHlwZScsXG4gIEFueSA9ICdBbnknLFxufVxuXG50eXBlIFR5cGVMb29rdXAgPSAoZnFuOiBzcGVjLkZRTikgPT4gc3BlYy5UeXBlO1xudHlwZSBTeW1ib2xMb29rdXAgPSAoZnFuOiBzcGVjLkZRTikgPT4gYW55O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6ZXJIb3N0IHtcbiAgcmVhZG9ubHkgb2JqZWN0czogT2JqZWN0VGFibGU7XG4gIGRlYnVnKC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcbiAgbG9va3VwVHlwZShmcW46IHN0cmluZyk6IHNwZWMuVHlwZTtcbiAgcmVjdXJzZSh4OiBhbnksIHR5cGU6IE9wdGlvbmFsVmFsdWVPclZvaWQpOiBhbnk7XG4gIGZpbmRTeW1ib2woZnFuOiBzcGVjLkZRTik6IGFueTtcbn1cblxuaW50ZXJmYWNlIFNlcmlhbGl6ZXIge1xuICBzZXJpYWxpemUoXG4gICAgdmFsdWU6IHVua25vd24sXG4gICAgdHlwZTogT3B0aW9uYWxWYWx1ZU9yVm9pZCxcbiAgICBob3N0OiBTZXJpYWxpemVySG9zdCxcbiAgKTogYW55O1xuICBkZXNlcmlhbGl6ZShcbiAgICB2YWx1ZTogdW5rbm93bixcbiAgICB0eXBlOiBPcHRpb25hbFZhbHVlT3JWb2lkLFxuICAgIGhvc3Q6IFNlcmlhbGl6ZXJIb3N0LFxuICApOiBhbnk7XG59XG5cbmV4cG9ydCBjb25zdCBTRVJJQUxJWkVSUzogeyBbazogc3RyaW5nXTogU2VyaWFsaXplciB9ID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIFtTZXJpYWxpemF0aW9uQ2xhc3MuVm9pZF06IHtcbiAgICBzZXJpYWxpemUodmFsdWUsIF90eXBlLCBob3N0KSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICBob3N0LmRlYnVnKCdFeHBlY3RlZCB2b2lkLCBnb3QnLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0sXG5cbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgX3R5cGUsIGhvc3QpIHtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIGhvc3QuZGVidWcoJ0V4cGVjdGVkIHZvaWQsIGdvdCcsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSxcbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIFtTZXJpYWxpemF0aW9uQ2xhc3MuRGF0ZV06IHtcbiAgICBzZXJpYWxpemUodmFsdWUsIG9wdGlvbmFsVmFsdWUpOiBXaXJlRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0RhdGUodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgRGF0ZSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlcmlhbGl6ZURhdGUodmFsdWUpO1xuICAgIH0sXG5cbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc1dpcmVEYXRlKHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIERhdGUsIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZXNlcmlhbGl6ZURhdGUodmFsdWUpO1xuICAgIH0sXG4gIH0sXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBbU2VyaWFsaXphdGlvbkNsYXNzLlNjYWxhcl06IHtcbiAgICBzZXJpYWxpemUodmFsdWUsIG9wdGlvbmFsVmFsdWUpIHtcbiAgICAgIGlmIChudWxsQW5kT2sodmFsdWUsIG9wdGlvbmFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uYWxWYWx1ZSA9PT0gJ3ZvaWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb3VudGVyZWQgdW5leHBlY3RlZCBgdm9pZGAgdHlwZScpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcmltaXRpdmVUeXBlID0gb3B0aW9uYWxWYWx1ZS50eXBlIGFzIHNwZWMuUHJpbWl0aXZlVHlwZVJlZmVyZW5jZTtcblxuICAgICAgaWYgKCFpc1NjYWxhcih2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCAke3NwZWMuZGVzY3JpYmVUeXBlUmVmZXJlbmNlKFxuICAgICAgICAgICAgb3B0aW9uYWxWYWx1ZS50eXBlLFxuICAgICAgICAgICl9LCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IHByaW1pdGl2ZVR5cGUucHJpbWl0aXZlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgYSAke3NwZWMuZGVzY3JpYmVUeXBlUmVmZXJlbmNlKFxuICAgICAgICAgICAgb3B0aW9uYWxWYWx1ZS50eXBlLFxuICAgICAgICAgICl9LCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9ICgke3R5cGVvZiB2YWx1ZX0pYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuXG4gICAgZGVzZXJpYWxpemUodmFsdWUsIG9wdGlvbmFsVmFsdWUpIHtcbiAgICAgIGlmIChudWxsQW5kT2sodmFsdWUsIG9wdGlvbmFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uYWxWYWx1ZSA9PT0gJ3ZvaWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb3VudGVyZWQgdW5leHBlY3RlZCBgdm9pZGAgdHlwZScpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcmltaXRpdmVUeXBlID0gb3B0aW9uYWxWYWx1ZS50eXBlIGFzIHNwZWMuUHJpbWl0aXZlVHlwZVJlZmVyZW5jZTtcblxuICAgICAgaWYgKCFpc1NjYWxhcih2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCBhICR7c3BlYy5kZXNjcmliZVR5cGVSZWZlcmVuY2UoXG4gICAgICAgICAgICBvcHRpb25hbFZhbHVlLnR5cGUsXG4gICAgICAgICAgKX0sIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gcHJpbWl0aXZlVHlwZS5wcmltaXRpdmUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCBhICR7c3BlYy5kZXNjcmliZVR5cGVSZWZlcmVuY2UoXG4gICAgICAgICAgICBvcHRpb25hbFZhbHVlLnR5cGUsXG4gICAgICAgICAgKX0sIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX0gKCR7dHlwZW9mIHZhbHVlfSlgLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSxcbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIFtTZXJpYWxpemF0aW9uQ2xhc3MuSnNvbl06IHtcbiAgICBzZXJpYWxpemUodmFsdWUpIHtcbiAgICAgIC8vIEp1c3Qgd2hhdGV2ZXIuIERhdGVzIHdpbGwgYXV0b21hdGljYWxseSBzZXJpYWxpemUgdGhlbXNlbHZlcyB0byBzdHJpbmdzLlxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgZGVzZXJpYWxpemUodmFsdWUsIG9wdGlvbmFsVmFsdWUsIGhvc3QpIHtcbiAgICAgIC8vIC8hXFwgVG9wLWxldmVsIFwibnVsbFwiIHdpbGwgdHVybiB0byB1bmRlZmluZWQsIGJ1dCBhbnkgbnVsbCBuZXN0ZWQgaW4gdGhlIHZhbHVlIGlzIHZhbGlkIEpTT04sIHNvIGl0J2xsIHN0YXkhXG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICAvLyBBIG1hcHBpbmcgb2JqZWN0IGNhbiBhcnJpdmUgdGhvdWdoIGhlcmUuIFRoaXMgd291bGQgYmUgdGhlIGNhc2UgaWYgYW55dGhpbmcgdGhhdCBpcyB2YWxpZCBpbnRvIGEgTWFwPHN0cmluZywgPz5cbiAgICAgIC8vIGlzIHBhc3NlZCBpbnRvIGEgSlNPTiB0cmFuc2ZlciBwb2ludC4gSW5kZWVkLCB0aG9zZSBhcmUgYWxzbyB2YWxpZCBKU09OISBGb3IgZXhhbXBsZSwgUHl0aG9uIFwiZGljdHNcIiB3aWxsIGJlXG4gICAgICAvLyBzZXJpYWxpemVkIChieSB0aGUgUHl0aG9uIHJ1bnRpbWUpIGFzIGEgJGpzaWkubWFwICh0aGUgbWFwcGluZyBvYmplY3QpLiBXZSBuZWVkIHRvIGRlLXNlcmlhbGl6ZSB0aGF0IGFzIGFcbiAgICAgIC8vIE1hcDxzdHJpbmcsIEpTT04+IGluIG9yZGVyIHRvIG9idGFpbiB0aGUgY29ycmVjdCBvdXRwdXQgYmVoYXZpb3IgaGVyZSFcbiAgICAgIGlmIChpc1dpcmVNYXAodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBTRVJJQUxJWkVSU1tTZXJpYWxpemF0aW9uQ2xhc3MuTWFwXS5kZXNlcmlhbGl6ZShcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBvcHRpb25hbDogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb246IHtcbiAgICAgICAgICAgICAgICBraW5kOiBzcGVjLkNvbGxlY3Rpb25LaW5kLk1hcCxcbiAgICAgICAgICAgICAgICBlbGVtZW50dHlwZTogeyBwcmltaXRpdmU6IHNwZWMuUHJpbWl0aXZlVHlwZS5Kc29uIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaG9zdCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLm1hcChtYXBKc29uVmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWFwVmFsdWVzKHZhbHVlLCBtYXBKc29uVmFsdWUpO1xuXG4gICAgICBmdW5jdGlvbiBtYXBKc29uVmFsdWUodG9NYXA6IGFueSkge1xuICAgICAgICBpZiAodG9NYXAgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB0b01hcDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaG9zdC5yZWN1cnNlKHRvTWFwLCB7XG4gICAgICAgICAgdHlwZTogeyBwcmltaXRpdmU6IHNwZWMuUHJpbWl0aXZlVHlwZS5Kc29uIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBbU2VyaWFsaXphdGlvbkNsYXNzLkVudW1dOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlLCBob3N0KTogV2lyZUVudW0gfCB1bmRlZmluZWQge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBlbnVtIHZhbHVlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgICB9XG5cbiAgICAgIGhvc3QuZGVidWcoJ1NlcmlhbGl6aW5nIGVudW0nKTtcblxuICAgICAgY29uc3QgZW51bVR5cGUgPSBvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5OYW1lZFR5cGVSZWZlcmVuY2U7XG4gICAgICBjb25zdCBlbnVtTWFwID0gaG9zdC5maW5kU3ltYm9sKGVudW1UeXBlLmZxbik7XG4gICAgICBjb25zdCBlbnVtRW50cnkgPSBPYmplY3QuZW50cmllcyhlbnVtTWFwKS5maW5kKChbLCB2XSkgPT4gdiA9PT0gdmFsdWUpO1xuICAgICAgaWYgKCFlbnVtRW50cnkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBlbnRyeSBpbiAke2VudW1UeXBlLmZxbn0gaGFzIHZhbHVlICR7dmFsdWV9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBbVE9LRU5fRU5VTV06IGAke2VudW1UeXBlLmZxbn0vJHtlbnVtRW50cnlbMF19YCB9O1xuICAgIH0sXG4gICAgZGVzZXJpYWxpemUodmFsdWUsIG9wdGlvbmFsVmFsdWUsIGhvc3QpIHtcbiAgICAgIGlmIChudWxsQW5kT2sodmFsdWUsIG9wdGlvbmFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNXaXJlRW51bSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBlbnVtIHZhbHVlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZXNlcmlhbGl6ZUVudW0odmFsdWUsIGhvc3QuZmluZFN5bWJvbCk7XG4gICAgfSxcbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIFtTZXJpYWxpemF0aW9uQ2xhc3MuQXJyYXldOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlLCBob3N0KSB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGFycmF5IHR5cGUsIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXJyYXlUeXBlID0gb3B0aW9uYWxWYWx1ZS50eXBlIGFzIHNwZWMuQ29sbGVjdGlvblR5cGVSZWZlcmVuY2U7XG5cbiAgICAgIHJldHVybiB2YWx1ZS5tYXAoKHgpID0+XG4gICAgICAgIGhvc3QucmVjdXJzZSh4LCB7IHR5cGU6IGFycmF5VHlwZS5jb2xsZWN0aW9uLmVsZW1lbnR0eXBlIH0pLFxuICAgICAgKTtcbiAgICB9LFxuICAgIGRlc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlLCBob3N0KSB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGFycmF5IHR5cGUsIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXJyYXlUeXBlID0gb3B0aW9uYWxWYWx1ZS50eXBlIGFzIHNwZWMuQ29sbGVjdGlvblR5cGVSZWZlcmVuY2U7XG5cbiAgICAgIHJldHVybiB2YWx1ZS5tYXAoKHgpID0+XG4gICAgICAgIGhvc3QucmVjdXJzZSh4LCB7IHR5cGU6IGFycmF5VHlwZS5jb2xsZWN0aW9uLmVsZW1lbnR0eXBlIH0pLFxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5NYXBdOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlLCBob3N0KSB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWFwVHlwZSA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLkNvbGxlY3Rpb25UeXBlUmVmZXJlbmNlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW1RPS0VOX01BUF06IG1hcFZhbHVlcyh2YWx1ZSwgKHYpID0+XG4gICAgICAgICAgaG9zdC5yZWN1cnNlKHYsIHsgdHlwZTogbWFwVHlwZS5jb2xsZWN0aW9uLmVsZW1lbnR0eXBlIH0pLFxuICAgICAgICApLFxuICAgICAgfTtcbiAgICB9LFxuICAgIGRlc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlLCBob3N0KSB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWFwVHlwZSA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLkNvbGxlY3Rpb25UeXBlUmVmZXJlbmNlO1xuICAgICAgaWYgKCFpc1dpcmVNYXAodmFsdWUpKSB7XG4gICAgICAgIC8vIENvbXBhdGliaWxpdHkgbW9kZSB3aXRoIG9sZGVyIHZlcnNpb25zIHRoYXQgZGlkbid0IHdyYXAgaW4gW1RPS0VOX01BUF1cbiAgICAgICAgcmV0dXJuIG1hcFZhbHVlcyh2YWx1ZSwgKHYpID0+XG4gICAgICAgICAgaG9zdC5yZWN1cnNlKHYsIHsgdHlwZTogbWFwVHlwZS5jb2xsZWN0aW9uLmVsZW1lbnR0eXBlIH0pLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0ID0gbWFwVmFsdWVzKHZhbHVlW1RPS0VOX01BUF0sICh2KSA9PlxuICAgICAgICBob3N0LnJlY3Vyc2UodiwgeyB0eXBlOiBtYXBUeXBlLmNvbGxlY3Rpb24uZWxlbWVudHR5cGUgfSksXG4gICAgICApO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc3VsdCwgU1lNQk9MX1dJUkVfVFlQRSwge1xuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IFRPS0VOX01BUCxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gIH0sXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBbU2VyaWFsaXphdGlvbkNsYXNzLlN0cnVjdF06IHtcbiAgICBzZXJpYWxpemUodmFsdWUsIG9wdGlvbmFsVmFsdWUsIGhvc3QpIHtcbiAgICAgIGlmIChudWxsQW5kT2sodmFsdWUsIG9wdGlvbmFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uYWxWYWx1ZSA9PT0gJ3ZvaWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb3VudGVyZWQgdW5leHBlY3RlZCBgdm9pZGAgdHlwZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgb2JqZWN0LCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgICB9XG5cbiAgICAgIC8qXG4gICAgICAgIFRoaXMgaXMgd2hhdCB3ZSdkIGxpa2UgdG8gZG8sIGJ1dCB3ZSBjYW4ndCBiZWNhdXNlIGF0IGxlYXN0IHRoZSBKYXZhIGNsaWVudFxuICAgICAgICBkb2VzIG5vdCB1bmRlcnN0YW5kIGJ5LXZhbHVlIHNlcmlhbGl6ZWQgaW50ZXJmYWNlIHR5cGVzLCBzbyB3ZSdsbCBoYXZlIHRvXG4gICAgICAgIHNlcmlhbGl6ZSBieS1yZWZlcmVuY2UuIEFkZGl0aW9uYWxseSwgc2VyaWFsaXppbmcga25vd24gcHJvcGVydGllcyB3b3VsZFxuICAgICAgICBjYXVzZSBwcm9ibGVtcyB3aGVuIHRoZSByZXR1cm4gdHlwZSBvZiBhIG1ldGhvZCBpcyBhIFVOSU9OIG9mIHN0cnVjdHMuXG4gICAgICAgIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9qc2lpL2lzc3Vlcy80MDBcblxuICAgICAgY29uc3QgcHJvcHMgPSBwcm9wZXJ0aWVzT2YobmFtZWRUeXBlKTtcblxuICAgICAgcmV0dXJuIG1hcFZhbHVlcyh2YWx1ZSwgKHYsIGtleSkgPT4ge1xuICAgICAgICBpZiAoIXByb3BzW2tleV0pIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSAvLyBEb24ndCBtYXAgaWYgdW5rbm93biBwcm9wZXJ0eVxuICAgICAgICByZXR1cm4gaG9zdC5yZWN1cnNlKHYsIHByb3BzW2tleV0udHlwZSk7XG4gICAgICB9KTtcbiAgICAgICovXG5cbiAgICAgIGhvc3QuZGVidWcoJ1JldHVybmluZyB2YWx1ZSB0eXBlIGJ5IHJlZmVyZW5jZScpO1xuICAgICAgcmV0dXJuIGhvc3Qub2JqZWN0cy5yZWdpc3Rlck9iamVjdCh2YWx1ZSwgJ09iamVjdCcsIFtcbiAgICAgICAgKG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLk5hbWVkVHlwZVJlZmVyZW5jZSkuZnFuLFxuICAgICAgXSk7XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXModmFsdWUgPz8ge30pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBUcmVhdCBlbXB0eSBzdHJ1Y3RzIGFzIGB1bmRlZmluZWRgIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9qc2lpL2lzc3Vlcy80MTEpXG4gICAgICAgIHZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCBvYmplY3QgcmVmZXJlbmNlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmFtZWRUeXBlID0gaG9zdC5sb29rdXBUeXBlKFxuICAgICAgICAob3B0aW9uYWxWYWx1ZS50eXBlIGFzIHNwZWMuTmFtZWRUeXBlUmVmZXJlbmNlKS5mcW4sXG4gICAgICApO1xuICAgICAgY29uc3QgcHJvcHMgPSBwcm9wZXJ0aWVzT2YobmFtZWRUeXBlLCBob3N0Lmxvb2t1cFR5cGUpO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBHb3QgYW4gYXJyYXkgd2hlcmUgYSAke25hbWVkVHlwZS5mcW59IHdhcyBleHBlY3RlZC4gRGlkIHlvdSBtZWFuIHRvIHBhc3MgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzP2AsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNpbWlsYXJseSB0byBzZXJpYWxpemF0aW9uLCB3ZSBtaWdodCBiZSBnZXR0aW5nIGEgcmVmZXJlbmNlIHR5cGUgd2hlcmUgd2UncmVcbiAgICAgIC8vIGV4cGVjdGluZyBhIHZhbHVlIHR5cGUuIEFjY2VwdCB0aGlzIGZvciBub3cgKGJ1dCBhbHNvIHZhbGlkYXRlIHRoYXQgb2JqZWN0XG4gICAgICAvLyBmb3IgcHJlc2VuY2Ugb2YgdGhlIHJpZ2h0IHByb3BlcnRpZXMpLlxuICAgICAgaWYgKGlzT2JqUmVmKHZhbHVlKSkge1xuICAgICAgICBob3N0LmRlYnVnKFxuICAgICAgICAgICdFeHBlY3RlZCB2YWx1ZSB0eXBlIGJ1dCBnb3QgcmVmZXJlbmNlIHR5cGUsIGFjY2VwdGluZyBmb3Igbm93IChhd3NsYWJzL2pzaWkjNDAwKScsXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gUmV0dXJuIHNhbWUgSU5TVEFOQ0UgKHNob3VsZG4ndCBtYXR0ZXIgYnV0IHdlIGRvbid0IGtub3cgZm9yIHN1cmUgdGhhdCBpdCBkb2Vzbid0KVxuICAgICAgICByZXR1cm4gdmFsaWRhdGVSZXF1aXJlZFByb3BzKFxuICAgICAgICAgIGhvc3Qub2JqZWN0cy5maW5kT2JqZWN0KHZhbHVlKS5pbnN0YW5jZSxcbiAgICAgICAgICBuYW1lZFR5cGUuZnFuLFxuICAgICAgICAgIHByb3BzLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXBpLmlzV2lyZVN0cnVjdCh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgeyBmcW4sIGRhdGEgfSA9IHZhbHVlW2FwaS5UT0tFTl9TVFJVQ1RdO1xuICAgICAgICBpZiAoIWlzQXNzaWduYWJsZShmcW4sIG5hbWVkVHlwZSwgaG9zdC5sb29rdXBUeXBlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBXaXJlIHN0cnVjdCB0eXBlICcke2Zxbn0nIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkICcke25hbWVkVHlwZS5mcW59J2AsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9IGRhdGE7XG4gICAgICB9XG5cbiAgICAgIC8vIFB5dGhvbiwgZm9yIGV4YW1wbGUsIGFsbG93cyB1c2luZyBwbGFpbiBtYXBwaW5nIG9iamVjdHMgaW5zdGVhZCBvZiBTdHJ1Y3RzIChkeWFubWljIHR5cGluZywgWU9MTyEpXG4gICAgICBpZiAoYXBpLmlzV2lyZU1hcCh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZVthcGkuVE9LRU5fTUFQXTtcbiAgICAgIH1cblxuICAgICAgdmFsdWUgPSB2YWxpZGF0ZVJlcXVpcmVkUHJvcHModmFsdWUgYXMgYW55LCBuYW1lZFR5cGUuZnFuLCBwcm9wcyk7XG5cbiAgICAgIC8vIFJldHVybiBhIGRpY3QgQ09QWSwgd2UgaGF2ZSBieS12YWx1ZSBzZW1hbnRpY3MgYW55d2F5LlxuICAgICAgcmV0dXJuIG1hcFZhbHVlcyh2YWx1ZSwgKHYsIGtleSkgPT4ge1xuICAgICAgICBpZiAoIXByb3BzW2tleV0pIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IC8vIERvbid0IG1hcCBpZiB1bmtub3duIHByb3BlcnR5XG4gICAgICAgIHJldHVybiBob3N0LnJlY3Vyc2UodiwgcHJvcHNba2V5XSk7XG4gICAgICB9KTtcbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5SZWZlcmVuY2VUeXBlXToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCk6IE9ialJlZiB8IHVuZGVmaW5lZCB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEV4cGVjdGVkIG9iamVjdCByZWZlcmVuY2UsIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBleHBlY3RlZFR5cGUgPSBob3N0Lmxvb2t1cFR5cGUoXG4gICAgICAgIChvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5OYW1lZFR5cGVSZWZlcmVuY2UpLmZxbixcbiAgICAgICk7XG4gICAgICBjb25zdCBpbnRlcmZhY2VzID0gc3BlYy5pc0ludGVyZmFjZVR5cGUoZXhwZWN0ZWRUeXBlKVxuICAgICAgICA/IFtleHBlY3RlZFR5cGUuZnFuXVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGpzaWlUeXBlID1cbiAgICAgICAganNpaVR5cGVGcW4odmFsdWUpID8/XG4gICAgICAgIChzcGVjLmlzQ2xhc3NUeXBlKGV4cGVjdGVkVHlwZSkgPyBleHBlY3RlZFR5cGUuZnFuIDogJ09iamVjdCcpO1xuXG4gICAgICByZXR1cm4gaG9zdC5vYmplY3RzLnJlZ2lzdGVyT2JqZWN0KHZhbHVlLCBqc2lpVHlwZSwgaW50ZXJmYWNlcyk7XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBvbmx5IHdheSB0byBwYXNzIGEgYnktcmVmIG9iamVjdCBpcyB0byBoYXZlIGNyZWF0ZWQgaXRcbiAgICAgIC8vIHByZXZpb3VzbHkgaW5zaWRlIEpTSUkga2VybmVsLCBzbyBpdCBtdXN0IGhhdmUgYW4gb2JqcmVmIGFscmVhZHkuXG5cbiAgICAgIGlmICghaXNPYmpSZWYodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgb2JqZWN0IHJlZmVyZW5jZSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgaW5zdGFuY2UsIGZxbiB9ID0gaG9zdC5vYmplY3RzLmZpbmRPYmplY3QodmFsdWUpO1xuXG4gICAgICBjb25zdCBuYW1lZFR5cGVSZWYgPSBvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5OYW1lZFR5cGVSZWZlcmVuY2U7XG4gICAgICBpZiAobmFtZWRUeXBlUmVmLmZxbiAhPT0gRU1QVFlfT0JKRUNUX0ZRTikge1xuICAgICAgICBjb25zdCBuYW1lZFR5cGUgPSBob3N0Lmxvb2t1cFR5cGUobmFtZWRUeXBlUmVmLmZxbik7XG5cbiAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgb2JqZWN0IHdlIGdvdCBpcyBvZiB0aGUgcmlnaHQgdHlwZVxuICAgICAgICAvLyBXZSBvbmx5IGRvIHRoaXMgZm9yIGNsYXNzZXMsIG5vdCBpbnRlcmZhY2VzLCBzaW5jZSBKYXZhIG1pZ2h0IHBhc3MgdXMgb2JqZWN0cyB0aGF0XG4gICAgICAgIC8vIHByaXZhdGVseSBpbXBsZW1lbnQgc29tZSBpbnRlcmZhY2UgYW5kIHdlIGNhbid0IHByb3ZlIHRoZXkgZG9uJ3QuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvanNpaS9pc3N1ZXMvMzk5XG4gICAgICAgIGNvbnN0IGRlY2xhcmVkVHlwZSA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLk5hbWVkVHlwZVJlZmVyZW5jZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNwZWMuaXNDbGFzc1R5cGUobmFtZWRUeXBlKSAmJlxuICAgICAgICAgICFpc0Fzc2lnbmFibGUoZnFuLCBkZWNsYXJlZFR5cGUsIGhvc3QubG9va3VwVHlwZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYE9iamVjdCBvZiB0eXBlICR7ZnFufSBpcyBub3QgY29udmVydGlibGUgdG8gJHtkZWNsYXJlZFR5cGUuZnFufWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfSxcbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIFtTZXJpYWxpemF0aW9uQ2xhc3MuQW55XToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgX3R5cGUsIGhvc3QpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVEYXRlKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1NjYWxhcih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAoKGUpID0+IGhvc3QucmVjdXJzZShlLCB7IHR5cGU6IHNwZWMuQ0FOT05JQ0FMX0FOWSB9KSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vdGU6IG5vIGNhc2UgZm9yIFwiRU5VTVwiIGhlcmUsIHdpdGhvdXQgdHlwZSBkZWNsYXJhdGlvbiB3ZSBjYW4ndCB0ZWxsIHRoZSBkaWZmZXJlbmNlXG4gICAgICAvLyBiZXR3ZWVuIGFuIGVudW0gbWVtYmVyIGFuZCBhIHNjYWxhci5cblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0pTSUkgS2VybmVsIGlzIHVuYWJsZSB0byBzZXJpYWxpemUgYGZ1bmN0aW9uYC4gQW4gaW5zdGFuY2Ugd2l0aCBtZXRob2RzIG1pZ2h0IGhhdmUgYmVlbiByZXR1cm5lZCBieSBhbiBgYW55YCBtZXRob2Q/JyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEpTSUkga2VybmVsIGFzc3VtcHRpb24gdmlvbGF0ZWQsICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICApfSBpcyBub3QgYW4gb2JqZWN0YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBTWU1CT0xfV0lSRV9UWVBFIGluIHZhbHVlICYmXG4gICAgICAgICh2YWx1ZSBhcyBhbnkpW1NZTUJPTF9XSVJFX1RZUEVdID09PSBUT0tFTl9NQVBcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gU0VSSUFMSVpFUlNbU2VyaWFsaXphdGlvbkNsYXNzLk1hcF0uc2VyaWFsaXplKFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvbjoge1xuICAgICAgICAgICAgICAgIGtpbmQ6IHNwZWMuQ29sbGVjdGlvbktpbmQuTWFwLFxuICAgICAgICAgICAgICAgIGVsZW1lbnR0eXBlOiBzcGVjLkNBTk9OSUNBTF9BTlksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaG9zdCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gVG8gbWFrZSBzdXJlIHBlb3BsZSBhcmVuJ3QgZ29pbmcgdG8gdHJ5IGFuZCByZXR1cm4gTWFwPD4gb3IgU2V0PD4gb3V0LCB0ZXN0IGZvclxuICAgICAgLy8gdGhvc2UgYW5kIHRocm93IGEgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZS4gV2UgY2FuJ3QgZGV0ZWN0IHRoZXNlIGNhc2VzIGFueSBvdGhlclxuICAgICAgLy8gd2F5LCBhbmQgdGhlIGJ5LXZhbHVlIHNlcmlhbGl6ZWQgb2JqZWN0IHdpbGwgYmUgcXVpdGUgdXNlbGVzcy5cbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFNldCB8fCB2YWx1ZSBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCByZXR1cm4gb2JqZWN0cyBvZiB0eXBlIFNldCBvciBNYXBcIik7XG4gICAgICB9XG5cbiAgICAgIC8vIFVzZSBhIHByZXZpb3VzIHJlZmVyZW5jZSB0byBtYWludGFpbiBvYmplY3QgaWRlbnRpdHkuIE5PVEU6IHRoaXMgbWF5IGNhdXNlIHVzIHRvIHJldHVyblxuICAgICAgLy8gYSBkaWZmZXJlbnQgdHlwZSB0aGFuIHJlcXVlc3RlZCEgVGhpcyBpcyBqdXN0IGhvdyBpdCBpcyByaWdodCBub3cuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2pzaWkvaXNzdWVzLzM5OVxuICAgICAgY29uc3QgcHJldlJlZiA9IG9iamVjdFJlZmVyZW5jZSh2YWx1ZSk7XG4gICAgICBpZiAocHJldlJlZikge1xuICAgICAgICByZXR1cm4gcHJldlJlZjtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhpcyBpcyBvciBzaG91bGQgYmUgYSByZWZlcmVuY2UgdHlwZSwgcGFzcyBvciBtYWtlIHRoZSByZWZlcmVuY2VcbiAgICAgIC8vIChMaWtlIHJlZ3VsYXIgcmVmdHlwZSBzZXJpYWxpemF0aW9uLCBidXQgd2l0aG91dCB0aGUgdHlwZSBkZXJpdmF0aW9uIHRvIGFuIGludGVyZmFjZSlcbiAgICAgIGNvbnN0IGpzaWlUeXBlID1cbiAgICAgICAganNpaVR5cGVGcW4odmFsdWUpID8/XG4gICAgICAgIChpc0J5UmVmZXJlbmNlT25seSh2YWx1ZSkgPyBFTVBUWV9PQkpFQ1RfRlFOIDogdW5kZWZpbmVkKTtcbiAgICAgIGlmIChqc2lpVHlwZSkge1xuICAgICAgICByZXR1cm4gaG9zdC5vYmplY3RzLnJlZ2lzdGVyT2JqZWN0KHZhbHVlLCBqc2lpVHlwZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhbiBvYmplY3QgdGhhdCBpcyBub3Qgb2YgYW4gZXhwb3J0ZWQgdHlwZS4gRWl0aGVyIGFuIG9iamVjdFxuICAgICAgLy8gbGl0ZXJhbCwgb3IgYW4gaW5zdGFuY2Ugb2YgYSBmdWxseSBwcml2YXRlIGNsYXNzIChjYW5ub3QgZGlzdGluZ3Vpc2ggdGhvc2UgY2FzZXMpLlxuXG4gICAgICAvLyBXZSB3aWxsIHNlcmlhbGl6ZSBieS12YWx1ZSwgYnV0IHJlY3Vyc2UgZm9yIHNlcmlhbGl6YXRpb24gc28gdGhhdCBpZlxuICAgICAgLy8gdGhlIG9iamVjdCBjb250YWlucyByZWZlcmVuY2Ugb2JqZWN0cywgdGhleSB3aWxsIGJlIHNlcmlhbGl6ZWQgYXBwcm9wcmlhdGVseS5cbiAgICAgIC8vIChCYXNpY2FsbHksIHNlcmlhbGl6ZSBhbnl0aGluZyBlbHNlIGFzIGEgbWFwIG9mICdhbnknKS5cbiAgICAgIHJldHVybiBtYXBWYWx1ZXModmFsdWUsICh2KSA9PlxuICAgICAgICBob3N0LnJlY3Vyc2UodiwgeyB0eXBlOiBzcGVjLkNBTk9OSUNBTF9BTlkgfSksXG4gICAgICApO1xuICAgIH0sXG5cbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgX3R5cGUsIGhvc3QpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1dpcmVEYXRlKHZhbHVlKSkge1xuICAgICAgICBob3N0LmRlYnVnKCdBTlkgaXMgYSBEYXRlJyk7XG4gICAgICAgIHJldHVybiBkZXNlcmlhbGl6ZURhdGUodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKGlzU2NhbGFyKHZhbHVlKSkge1xuICAgICAgICBob3N0LmRlYnVnKCdBTlkgaXMgYSBTY2FsYXInKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGhvc3QuZGVidWcoJ0FOWSBpcyBhbiBBcnJheScpO1xuICAgICAgICByZXR1cm4gdmFsdWUubWFwKChlKSA9PiBob3N0LnJlY3Vyc2UoZSwgeyB0eXBlOiBzcGVjLkNBTk9OSUNBTF9BTlkgfSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNXaXJlRW51bSh2YWx1ZSkpIHtcbiAgICAgICAgaG9zdC5kZWJ1ZygnQU5ZIGlzIGFuIEVudW0nKTtcbiAgICAgICAgcmV0dXJuIGRlc2VyaWFsaXplRW51bSh2YWx1ZSwgaG9zdC5maW5kU3ltYm9sKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1dpcmVNYXAodmFsdWUpKSB7XG4gICAgICAgIGhvc3QuZGVidWcoJ0FOWSBpcyBhIE1hcCcpO1xuICAgICAgICBjb25zdCBtYXBPZkFueTogc3BlYy5Db2xsZWN0aW9uVHlwZVJlZmVyZW5jZSA9IHtcbiAgICAgICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgICAgICBraW5kOiBzcGVjLkNvbGxlY3Rpb25LaW5kLk1hcCxcbiAgICAgICAgICAgIGVsZW1lbnR0eXBlOiBzcGVjLkNBTk9OSUNBTF9BTlksXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIFNFUklBTElaRVJTW1NlcmlhbGl6YXRpb25DbGFzcy5NYXBdLmRlc2VyaWFsaXplKFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHsgdHlwZTogbWFwT2ZBbnkgfSxcbiAgICAgICAgICBob3N0LFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGlzT2JqUmVmKHZhbHVlKSkge1xuICAgICAgICBob3N0LmRlYnVnKCdBTlkgaXMgYSBSZWYnKTtcbiAgICAgICAgcmV0dXJuIGhvc3Qub2JqZWN0cy5maW5kT2JqZWN0KHZhbHVlKS5pbnN0YW5jZTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgdGhlIHZhbHVlIGhhcyBhIHN0cnVjdCB0b2tlbiwgaXQgd2FzIHNlcmlhbGl6ZWQgYnkgYSB0eXBlZCBqc2lpXG4gICAgICAvLyBzdHJ1Y3QsIGJ1dCBzaW5jZSB0aGUgZGVzZXJpYWxpemF0aW9uIHRhcmdldCBpcyBBTlksIGFsbCB3ZSBjYW4gZG8gaXNcbiAgICAgIC8vIHN0cmlwIHRoZSBkYXRhIGZyb20gJGpzaWkuc3RydWN0IGFuZCBjb250aW51ZSB0byBkZXNlcmlhbGl6ZSBhcyBBTlkuXG4gICAgICBpZiAoaXNXaXJlU3RydWN0KHZhbHVlKSkge1xuICAgICAgICBjb25zdCB7IGZxbiwgZGF0YSB9ID0gdmFsdWVbVE9LRU5fU1RSVUNUXTtcbiAgICAgICAgaG9zdC5kZWJ1ZyhgQU5ZIGlzIGEgc3RydWN0IG9mIHR5cGUgJHtmcW59YCk7XG4gICAgICAgIHJldHVybiBTRVJJQUxJWkVSU1tTZXJpYWxpemF0aW9uQ2xhc3MuU3RydWN0XS5kZXNlcmlhbGl6ZShcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIHsgdHlwZTogeyBmcW4gfSB9LFxuICAgICAgICAgIGhvc3QsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEF0IHRoaXMgcG9pbnQgYWdhaW4sIGRlc2VyaWFsaXplIGJ5LXZhbHVlLlxuICAgICAgaG9zdC5kZWJ1ZygnQU5ZIGlzIGEgTWFwJyk7XG4gICAgICByZXR1cm4gbWFwVmFsdWVzKHZhbHVlLCAodikgPT5cbiAgICAgICAgaG9zdC5yZWN1cnNlKHYsIHsgdHlwZTogc3BlYy5DQU5PTklDQUxfQU5ZIH0pLFxuICAgICAgKTtcbiAgICB9LFxuICB9LFxufTtcblxuZnVuY3Rpb24gc2VyaWFsaXplRGF0ZSh2YWx1ZTogRGF0ZSk6IFdpcmVEYXRlIHtcbiAgcmV0dXJuIHsgW1RPS0VOX0RBVEVdOiB2YWx1ZS50b0lTT1N0cmluZygpIH07XG59XG5cbmZ1bmN0aW9uIGRlc2VyaWFsaXplRGF0ZSh2YWx1ZTogV2lyZURhdGUpOiBEYXRlIHtcbiAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlW1RPS0VOX0RBVEVdKTtcbn1cblxuZnVuY3Rpb24gZGVzZXJpYWxpemVFbnVtKHZhbHVlOiBXaXJlRW51bSwgbG9va3VwOiBTeW1ib2xMb29rdXApIHtcbiAgY29uc3QgZW51bUxvY2F0b3IgPSB2YWx1ZVtUT0tFTl9FTlVNXTtcbiAgY29uc3Qgc2VwID0gZW51bUxvY2F0b3IubGFzdEluZGV4T2YoJy8nKTtcbiAgaWYgKHNlcCA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1hbGZvcm1lZCBlbnVtIHZhbHVlOiAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgfVxuXG4gIGNvbnN0IHR5cGVOYW1lID0gZW51bUxvY2F0b3Iuc3Vic3RyKDAsIHNlcCk7XG4gIGNvbnN0IHZhbHVlTmFtZSA9IGVudW1Mb2NhdG9yLnN1YnN0cihzZXAgKyAxKTtcblxuICBjb25zdCBlbnVtVmFsdWUgPSBsb29rdXAodHlwZU5hbWUpW3ZhbHVlTmFtZV07XG4gIGlmIChlbnVtVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gZW51bSBtZW1iZXIgbmFtZWQgJHt2YWx1ZU5hbWV9IGluICR7dHlwZU5hbWV9YCk7XG4gIH1cbiAgcmV0dXJuIGVudW1WYWx1ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlU2VyaWFsaXphdGlvbiB7XG4gIHNlcmlhbGl6YXRpb25DbGFzczogU2VyaWFsaXphdGlvbkNsYXNzO1xuICB0eXBlUmVmOiBPcHRpb25hbFZhbHVlT3JWb2lkO1xufVxuXG4vKipcbiAqIEZyb20gYSB0eXBlIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBwb3NzaWJsZSBzZXJpYWxpemF0aW9uIHR5cGVzXG4gKlxuICogVGhlcmUgY2FuIGJlIG11bHRpcGxlLCBiZWNhdXNlIHRoZSB0eXBlIGNhbiBiZSBhIHR5cGUgdW5pb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemF0aW9uVHlwZShcbiAgdHlwZVJlZjogT3B0aW9uYWxWYWx1ZU9yVm9pZCxcbiAgbG9va3VwOiBUeXBlTG9va3VwLFxuKTogVHlwZVNlcmlhbGl6YXRpb25bXSB7XG4gIGlmICh0eXBlUmVmID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJLZXJuZWwgZXJyb3I6IGV4cGVjdGVkIHR5cGUgaW5mb3JtYXRpb24sIGdvdCAndW5kZWZpbmVkJ1wiKTtcbiAgfVxuICBpZiAodHlwZVJlZiA9PT0gJ3ZvaWQnKSB7XG4gICAgcmV0dXJuIFt7IHNlcmlhbGl6YXRpb25DbGFzczogU2VyaWFsaXphdGlvbkNsYXNzLlZvaWQsIHR5cGVSZWYgfV07XG4gIH1cbiAgaWYgKHNwZWMuaXNQcmltaXRpdmVUeXBlUmVmZXJlbmNlKHR5cGVSZWYudHlwZSkpIHtcbiAgICBzd2l0Y2ggKHR5cGVSZWYudHlwZS5wcmltaXRpdmUpIHtcbiAgICAgIGNhc2Ugc3BlYy5QcmltaXRpdmVUeXBlLkFueTpcbiAgICAgICAgcmV0dXJuIFt7IHNlcmlhbGl6YXRpb25DbGFzczogU2VyaWFsaXphdGlvbkNsYXNzLkFueSwgdHlwZVJlZiB9XTtcbiAgICAgIGNhc2Ugc3BlYy5QcmltaXRpdmVUeXBlLkRhdGU6XG4gICAgICAgIHJldHVybiBbeyBzZXJpYWxpemF0aW9uQ2xhc3M6IFNlcmlhbGl6YXRpb25DbGFzcy5EYXRlLCB0eXBlUmVmIH1dO1xuICAgICAgY2FzZSBzcGVjLlByaW1pdGl2ZVR5cGUuSnNvbjpcbiAgICAgICAgcmV0dXJuIFt7IHNlcmlhbGl6YXRpb25DbGFzczogU2VyaWFsaXphdGlvbkNsYXNzLkpzb24sIHR5cGVSZWYgfV07XG4gICAgICBjYXNlIHNwZWMuUHJpbWl0aXZlVHlwZS5Cb29sZWFuOlxuICAgICAgY2FzZSBzcGVjLlByaW1pdGl2ZVR5cGUuTnVtYmVyOlxuICAgICAgY2FzZSBzcGVjLlByaW1pdGl2ZVR5cGUuU3RyaW5nOlxuICAgICAgICByZXR1cm4gW3sgc2VyaWFsaXphdGlvbkNsYXNzOiBTZXJpYWxpemF0aW9uQ2xhc3MuU2NhbGFyLCB0eXBlUmVmIH1dO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBwcmltaXRpdmUgdHlwZScpO1xuICB9XG4gIGlmIChzcGVjLmlzQ29sbGVjdGlvblR5cGVSZWZlcmVuY2UodHlwZVJlZi50eXBlKSkge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHNlcmlhbGl6YXRpb25DbGFzczpcbiAgICAgICAgICB0eXBlUmVmLnR5cGUuY29sbGVjdGlvbi5raW5kID09PSBzcGVjLkNvbGxlY3Rpb25LaW5kLkFycmF5XG4gICAgICAgICAgICA/IFNlcmlhbGl6YXRpb25DbGFzcy5BcnJheVxuICAgICAgICAgICAgOiBTZXJpYWxpemF0aW9uQ2xhc3MuTWFwLFxuICAgICAgICB0eXBlUmVmLFxuICAgICAgfSxcbiAgICBdO1xuICB9XG4gIGlmIChzcGVjLmlzVW5pb25UeXBlUmVmZXJlbmNlKHR5cGVSZWYudHlwZSkpIHtcbiAgICBjb25zdCBjb21wb3VuZFR5cGVzID0gZmxhdE1hcCh0eXBlUmVmLnR5cGUudW5pb24udHlwZXMsICh0KSA9PlxuICAgICAgc2VyaWFsaXphdGlvblR5cGUoeyB0eXBlOiB0IH0sIGxvb2t1cCksXG4gICAgKTtcbiAgICAvLyBQcm9wYWdhdGUgdGhlIHRvcC1sZXZlbCAnb3B0aW9uYWwnIGZpZWxkIHRvIGVhY2ggaW5kaXZpZHVhbCBzdWJ0eXBlXG4gICAgZm9yIChjb25zdCB0IG9mIGNvbXBvdW5kVHlwZXMpIHtcbiAgICAgIGlmICh0LnR5cGVSZWYgIT09ICd2b2lkJykge1xuICAgICAgICB0LnR5cGVSZWYub3B0aW9uYWwgPSB0eXBlUmVmLm9wdGlvbmFsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29tcG91bmRUeXBlcy5zb3J0KChsLCByKSA9PlxuICAgICAgY29tcGFyZVNlcmlhbGl6YXRpb25DbGFzc2VzKGwuc2VyaWFsaXphdGlvbkNsYXNzLCByLnNlcmlhbGl6YXRpb25DbGFzcyksXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRoZSBuZXh0IHBhcnQgb2YgdGhlIGNvbnZlcnNpb24gaXMgbG9va3VwLWRlcGVuZGVudFxuICBjb25zdCB0eXBlID0gbG9va3VwKHR5cGVSZWYudHlwZS5mcW4pO1xuXG4gIGlmIChzcGVjLmlzRW51bVR5cGUodHlwZSkpIHtcbiAgICByZXR1cm4gW3sgc2VyaWFsaXphdGlvbkNsYXNzOiBTZXJpYWxpemF0aW9uQ2xhc3MuRW51bSwgdHlwZVJlZiB9XTtcbiAgfVxuXG4gIGlmIChzcGVjLmlzSW50ZXJmYWNlVHlwZSh0eXBlKSAmJiB0eXBlLmRhdGF0eXBlKSB7XG4gICAgcmV0dXJuIFt7IHNlcmlhbGl6YXRpb25DbGFzczogU2VyaWFsaXphdGlvbkNsYXNzLlN0cnVjdCwgdHlwZVJlZiB9XTtcbiAgfVxuXG4gIHJldHVybiBbeyBzZXJpYWxpemF0aW9uQ2xhc3M6IFNlcmlhbGl6YXRpb25DbGFzcy5SZWZlcmVuY2VUeXBlLCB0eXBlUmVmIH1dO1xufVxuXG5mdW5jdGlvbiBudWxsQW5kT2soeDogdW5rbm93biwgdHlwZTogT3B0aW9uYWxWYWx1ZU9yVm9pZCk6IGJvb2xlYW4ge1xuICBpZiAoeCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGUgIT09ICd2b2lkJyAmJiAhdHlwZS5vcHRpb25hbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBHb3QgJ3VuZGVmaW5lZCcgZm9yIG5vbi1vcHRpb25hbCBpbnN0YW5jZSBvZiAke0pTT04uc3RyaW5naWZ5KHR5cGUpfWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc0RhdGUoeDogdW5rbm93bik6IHggaXMgRGF0ZSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHggPT09ICdvYmplY3QnICYmXG4gICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHgpID09PSAnW29iamVjdCBEYXRlXSdcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNTY2FsYXIoeDogdW5rbm93bik6IHggaXMgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHggPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB4ID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgeCA9PT0gJ2Jvb2xlYW4nXG4gICk7XG59XG5cbmZ1bmN0aW9uIGZsYXRNYXA8VCwgVT4oeHM6IFRbXSwgZm46ICh4OiBUKSA9PiBVW10pOiBVW10ge1xuICBjb25zdCByZXQgPSBuZXcgQXJyYXk8VT4oKTtcbiAgZm9yIChjb25zdCB4IG9mIHhzKSB7XG4gICAgcmV0LnB1c2goLi4uZm4oeCkpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogTWFwIGFuIG9iamVjdCdzIHZhbHVlcywgc2tpcHBpbmcgJ3VuZGVmaW5lZCcgdmFsdWVzJ1xuICovXG5mdW5jdGlvbiBtYXBWYWx1ZXMoXG4gIHZhbHVlOiB1bmtub3duLFxuICBmbjogKHZhbHVlOiBhbnksIGZpZWxkOiBzdHJpbmcpID0+IGFueSxcbik6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBvYmplY3QgdHlwZSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICB9XG5cbiAgY29uc3Qgb3V0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgIGNvbnN0IHdpcmVWYWx1ZSA9IGZuKHYsIGspO1xuICAgIGlmICh3aXJlVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIG91dFtrXSA9IHdpcmVWYWx1ZTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0aWVzT2YoXG4gIHQ6IHNwZWMuVHlwZSxcbiAgbG9va3VwOiBUeXBlTG9va3VwLFxuKTogeyBbbmFtZTogc3RyaW5nXTogc3BlYy5Qcm9wZXJ0eSB9IHtcbiAgaWYgKCFzcGVjLmlzQ2xhc3NPckludGVyZmFjZVR5cGUodCkpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBsZXQgcmV0OiB7IFtuYW1lOiBzdHJpbmddOiBzcGVjLlByb3BlcnR5IH0gPSB7fTtcblxuICBpZiAodC5pbnRlcmZhY2VzKSB7XG4gICAgZm9yIChjb25zdCBpZmFjZSBvZiB0LmludGVyZmFjZXMpIHtcbiAgICAgIHJldCA9IHsgLi4ucmV0LCAuLi5wcm9wZXJ0aWVzT2YobG9va3VwKGlmYWNlKSwgbG9va3VwKSB9O1xuICAgIH1cbiAgfVxuICBpZiAoc3BlYy5pc0NsYXNzVHlwZSh0KSAmJiB0LmJhc2UpIHtcbiAgICByZXQgPSB7IC4uLnJldCwgLi4ucHJvcGVydGllc09mKGxvb2t1cCh0LmJhc2UpLCBsb29rdXApIH07XG4gIH1cblxuICBmb3IgKGNvbnN0IHByb3Agb2YgdC5wcm9wZXJ0aWVzID8/IFtdKSB7XG4gICAgcmV0W3Byb3AubmFtZV0gPSBwcm9wO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBUZXN0cyB3aGV0aGVyIGEgZ2l2ZW4gdHlwZSAoYnkgaXQncyBGUU4pIGNhbiBiZSBhc3NpZ25lZCB0byBhIG5hbWVkIHR5cGUgcmVmZXJlbmNlLlxuICpcbiAqIEBwYXJhbSBhY3R1YWxUeXBlRnFuIHRoZSBGUU4gb2YgdGhlIHR5cGUgdGhhdCBpcyBiZWluZyB0ZXN0ZWQuXG4gKiBAcGFyYW0gcmVxdWlyZWRUeXBlICB0aGUgcmVxdWlyZWQgcmVmZXJlbmNlIHR5cGUuXG4gKlxuICogQHJldHVybnMgdHJ1ZSBpZiBgYHJlcXVpcmVkVHlwZWBgIGlzIGEgc3VwZXItdHlwZSAoYmFzZSBjbGFzcyBvciBpbXBsZW1lbnRlZCBpbnRlcmZhY2UpIG9mIHRoZSB0eXBlIGRlc2lnbmF0ZWQgYnlcbiAqICAgICAgICAgIGBgYWN0dWFsVHlwZUZxbmBgLlxuICovXG5mdW5jdGlvbiBpc0Fzc2lnbmFibGUoXG4gIGFjdHVhbFR5cGVGcW46IHN0cmluZyxcbiAgcmVxdWlyZWRUeXBlOiBzcGVjLk5hbWVkVHlwZVJlZmVyZW5jZSxcbiAgbG9va3VwOiBUeXBlTG9va3VwLFxuKTogYm9vbGVhbiB7XG4gIC8vIFRoZSBlbXB0eSBvYmplY3QgaXMgYXNzaWduYWJsZSB0byBldmVyeXRoaW5nXG4gIGlmIChhY3R1YWxUeXBlRnFuID09PSBFTVBUWV9PQkpFQ1RfRlFOKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAocmVxdWlyZWRUeXBlLmZxbiA9PT0gYWN0dWFsVHlwZUZxbikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGFjdHVhbFR5cGUgPSBsb29rdXAoYWN0dWFsVHlwZUZxbik7XG4gIGlmIChzcGVjLmlzQ2xhc3NUeXBlKGFjdHVhbFR5cGUpKSB7XG4gICAgaWYgKFxuICAgICAgYWN0dWFsVHlwZS5iYXNlICYmXG4gICAgICBpc0Fzc2lnbmFibGUoYWN0dWFsVHlwZS5iYXNlLCByZXF1aXJlZFR5cGUsIGxvb2t1cClcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICBpZiAoc3BlYy5pc0NsYXNzT3JJbnRlcmZhY2VUeXBlKGFjdHVhbFR5cGUpICYmIGFjdHVhbFR5cGUuaW50ZXJmYWNlcykge1xuICAgIHJldHVybiAoXG4gICAgICBhY3R1YWxUeXBlLmludGVyZmFjZXMuZmluZCgoaWZhY2UpID0+XG4gICAgICAgIGlzQXNzaWduYWJsZShpZmFjZSwgcmVxdWlyZWRUeXBlLCBsb29rdXApLFxuICAgICAgKSAhPSBudWxsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUmVxdWlyZWRQcm9wcyhcbiAgYWN0dWFsUHJvcHM6IHsgW2tleTogc3RyaW5nXTogYW55IH0sXG4gIHR5cGVOYW1lOiBzdHJpbmcsXG4gIHNwZWNQcm9wczogeyBba2V5OiBzdHJpbmddOiBzcGVjLlByb3BlcnR5IH0sXG4pIHtcbiAgLy8gQ2hlY2sgZm9yIHJlcXVpcmVkIHByb3BlcnRpZXNcbiAgY29uc3QgbWlzc2luZ1JlcXVpcmVkUHJvcHMgPSBPYmplY3Qua2V5cyhzcGVjUHJvcHMpXG4gICAgLmZpbHRlcigobmFtZSkgPT4gIXNwZWNQcm9wc1tuYW1lXS5vcHRpb25hbClcbiAgICAuZmlsdGVyKChuYW1lKSA9PiAhKG5hbWUgaW4gYWN0dWFsUHJvcHMpKTtcblxuICBpZiAobWlzc2luZ1JlcXVpcmVkUHJvcHMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnRpZXMgZm9yICR7dHlwZU5hbWV9OiAke21pc3NpbmdSZXF1aXJlZFByb3BzLmpvaW4oXG4gICAgICAgICcsICcsXG4gICAgICApfWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBhY3R1YWxQcm9wcztcbn1cblxuZnVuY3Rpb24gY29tcGFyZVNlcmlhbGl6YXRpb25DbGFzc2VzKFxuICBsOiBTZXJpYWxpemF0aW9uQ2xhc3MsXG4gIHI6IFNlcmlhbGl6YXRpb25DbGFzcyxcbik6IG51bWJlciB7XG4gIGNvbnN0IG9yZGVyID0gW1xuICAgIFNlcmlhbGl6YXRpb25DbGFzcy5Wb2lkLFxuICAgIFNlcmlhbGl6YXRpb25DbGFzcy5EYXRlLFxuICAgIFNlcmlhbGl6YXRpb25DbGFzcy5TY2FsYXIsXG4gICAgU2VyaWFsaXphdGlvbkNsYXNzLkpzb24sXG4gICAgU2VyaWFsaXphdGlvbkNsYXNzLkVudW0sXG4gICAgU2VyaWFsaXphdGlvbkNsYXNzLkFycmF5LFxuICAgIFNlcmlhbGl6YXRpb25DbGFzcy5NYXAsXG4gICAgU2VyaWFsaXphdGlvbkNsYXNzLlN0cnVjdCxcbiAgICBTZXJpYWxpemF0aW9uQ2xhc3MuUmVmZXJlbmNlVHlwZSxcbiAgICBTZXJpYWxpemF0aW9uQ2xhc3MuQW55LFxuICBdO1xuICByZXR1cm4gb3JkZXIuaW5kZXhPZihsKSAtIG9yZGVyLmluZGV4T2Yocik7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGBvYmpgIG11c3QgYmUgcGFzc2VkIGJ5LXJlZmVyZW5jZSBvciBpZiBieS12YWx1ZSBpcyBhY2NlcHRhYmxlLiBGb3IgZXhhbXBsZSxcbiAqIG9iamVjdHMgd2l0aCBtZXRob2RzLCBvciBkeW5hbWljIGdldHRlcnMgKG9yIHNldHRlcnMpIHNob3VsZCBiZSBwYXNzZWQgYnktcmVmZXJlbmNlIGFzIGEgbWF0dGVyXG4gKiBvZiBzZWN1cml0eS4gVGhlIGJlaGF2aW9yIGluIG5vbi1KUyBydW50aW1lcyBjb3VsZCBvdGhlcndpc2UgZGlmZmVyIGZyb20gdGhhdCBpbiBwdXJlIEpTIChpZlxuICogZ2V0dGVycyBhcmUgbm90IHN0YWJsZSwgZXRjLi4uKS5cbiAqXG4gKiBAcGFyYW0gb2JqIHRoZSBvYmplY3QgdG8gYmUgdGVzdGVkLlxuICpcbiAqIEByZXR1cm5zIHRydWUgaWYgYG9iamAgbXVzdCBiZSBwYXNzZWQgYnktcmVmZXJlbmNlLlxuICovXG5mdW5jdGlvbiBpc0J5UmVmZXJlbmNlT25seShvYmo6IGFueSk6IGJvb2xlYW4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgbGV0IGN1cnIgPSBvYmo7XG4gIC8vIENyYXdsIHVwIHRoZSBwcm90b3R5cGUgY2hhaW4gdG8gbG9vayBmb3IgZHluYW1pYyBwcm9wZXJ0aWVzIG9yIG1ldGhvZHMuXG4gIGRvIHtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3VycikpIHtcbiAgICAgIGNvbnN0IGRlc2NyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjdXJyLCBwcm9wKTtcbiAgICAgIGlmIChcbiAgICAgICAgZGVzY3I/LmdldCAhPSBudWxsIHx8XG4gICAgICAgIGRlc2NyPy5zZXQgIT0gbnVsbCB8fFxuICAgICAgICB0eXBlb2YgZGVzY3I/LnZhbHVlID09PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgLy8gUHJvcGVydHkgaGFzIGEgZHluYW1pYyBnZXR0ZXIsIHNldHRlciBvciBpcyBhIGNvbnN0cnVjdG9yL21ldGhvZCwgc28gYnktcmVmIHJlcXVpcmVkIVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRW5kIHdoZW4gdGhlIHBhcmVudCBwcm90byBpcyBgT2JqZWN0YCwgd2hpY2ggaGFzIG5vIHBhcmVudCBwcm90byBpdHNlbGYuXG4gIH0gd2hpbGUgKE9iamVjdC5nZXRQcm90b3R5cGVPZigoY3VyciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyKSkpICE9IG51bGwpO1xuXG4gIHJldHVybiBmYWxzZTtcbn1cbiJdfQ==
|
|
712
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNlcmlhbGl6YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRzs7O0FBRUgsbUNBQW1DO0FBRW5DLCtCQWFlO0FBQ2YsdUNBQXNFO0FBRXRFLHdCQUF3QjtBQW9CeEI7O0dBRUc7QUFDVSxRQUFBLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztBQUU1QixRQUFBLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQTBDakQsUUFBQSxXQUFXLEdBQWdDO0lBQ3RELHlFQUF5RTtJQUN6RSxtQkFBeUIsRUFBRTtRQUN6QixTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJO1lBQzFCLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtnQkFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN6QztZQUNELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJO1lBQzVCLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtnQkFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN6QztZQUNELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7S0FDRjtJQUVELHlFQUF5RTtJQUN6RSxtQkFBeUIsRUFBRTtRQUN6QixTQUFTLENBQUMsS0FBSyxFQUFFLGFBQWE7WUFDNUIsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxFQUFFO2dCQUNuQyxPQUFPLFNBQVMsQ0FBQzthQUNsQjtZQUNELElBQUksYUFBYSxLQUFLLE1BQU0sRUFBRTtnQkFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO2FBQ3ZE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TUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ25ELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDMUQsSUFDRSxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxHQUFHLEtBQUksSUFBSTtnQkFDbEIsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsR0FBRyxLQUFJLElBQUk7Z0JBQ2xCLFFBQU8sS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLEtBQUssQ0FBQSxLQUFLLFVBQVUsRUFDbEM7Z0JBQ0Esd0ZBQXdGO2dCQUN4RixPQUFPLElBQUksQ0FBQzthQUNiO1NBQ0Y7UUFDRCwyRUFBMkU7S0FDNUUsUUFBUSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRTtJQUU5RSxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEhhbmRsaW5nIG9mIHR5cGVzIGluIEpTSUlcbiAqXG4gKiBUeXBlcyB3aWxsIGJlIHNlcmlhbGl6ZWQgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgdGFibGU6XG4gKlxuICogICAgICAgICAgICAgICAgICAgICAgICAg4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICDilIIgSkFWQVNDUklQVCBUWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICogICAgICAgICAgICAgICAgICAgICAgICAg4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICDilIIgdW5kZWZpbmVkL251bGwg4pSCICAgZGF0ZSAgICDilIIgc2NhbGFyICgqKSDilIIgICAgIGFycmF5ICAgICDilIIgSlNJSS1jbGFzcyBvYmplY3Qg4pSCIGxpdGVyYWwgb2JqZWN0ICDilIJcbiAqIOKUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpFxuICog4pSCIERFQ0xBUkVEIOKUgiB2b2lkICAgICAgIOKUgiB1bmRlZmluZWQgICAgICDilIIgdW5kZWZpbmVkIOKUgiB1bmRlZmluZWQgIOKUgiB1bmRlZmluZWQgICAgIOKUgiB1bmRlZmluZWQgICAgICAgICDilIIgdW5kZWZpbmVkICAgICAgIOKUglxuICog4pSCIFRZUEUgICAgIOKUgiBkYXRlICAgICAgIOKUgiB1bmRlZmluZWQo4oCgKSAgIOKUgiB7IGRhdGUgfSAg4pSCIC0gICAgICAgICAg4pSCIC0gICAgICAgICAgICAg4pSCIC0gICAgICAgICAgICAgICAgIOKUgiAtICAgICAgICAgICAgICAg4pSCXG4gKiDilIIgICAgICAgICAg4pSCIHNjYWxhciAoKikg4pSCIHVuZGVmaW5lZCjigKApICAg4pSCIC0gICAgICAgICDilIIgdmFsdWUgICAgICDilIIgLSAgICAgICAgICAgICDilIIgLSAgICAgICAgICAgICAgICAg4pSCIC0gICAgICAgICAgICAgICDilIJcbiAqIOKUgiAgICAgICAgICDilIIganNvbiAgICAgICDilIIgdW5kZWZpbmVkICAgICAg4pSCIHN0cmluZyAgICDilIIgdmFsdWUgICAgICDilIIgYXJyYXkvUihqc29uKSDilIIgLSAgICAgICAgICAgICAgICAg4pSCIGJ5dmFsdWUvUihqc29uKSDilIJcbiAqIOKUgiAgICAgICAgICDilIIgZW51bSAgICAgICDilIIgdW5kZWZpbmVkKOKAoCkgICDilIIgLSAgICAgICAgIOKUgiB7IGVudW0gfSAgIOKUgiAtICAgICAgICAgICAgIOKUgiAtICAgICAgICAgICAgICAgICDilIIgLSAgICAgICAgICAgICAgIOKUglxuICog4pSCICAgICAgICAgIOKUgiBhcnJheSBvZiBUIOKUgiB1bmRlZmluZWQo4oCgKSAgIOKUgiAtICAgICAgICAg4pSCIC0gICAgICAgICAg4pSCIGFycmF5L1IoVCkgICAg4pSCIC0gICAgICAgICAgICAgICAgIOKUgiAtICAgICAgICAgICAgICAg4pSCXG4gKiDilIIgICAgICAgICAg4pSCIG1hcCBvZiBUICAg4pSCIHVuZGVmaW5lZCjigKApICAg4pSCIC0gICAgICAgICDilIIgLSAgICAgICAgICDilIIgLSAgICAgICAgICAgICDilIIgLSAgICAgICAgICAgICAgICAg4pSCIGJ5dmFsdWUvUihUKSAgICDilIJcbiAqIOKUgiAgICAgICAgICDilIIgaW50ZXJmYWNlICDilIIgdW5kZWZpbmVkKOKAoCkgICDilIIgLSAgICAgICAgIOKUgiAtICAgICAgICAgIOKUgiAtICAgICAgICAgICAgIOKUgiB7IHJlZiB9ICAgICAgICAgICDilIIgeyByZWY6IHByb3h5IH0gIOKUglxuICog4pSCICAgICAgICAgIOKUgiBzdHJ1Y3QgICAgIOKUgiB1bmRlZmluZWQo4oCgKSAgIOKUgiAtICAgICAgICAg4pSCIC0gICAgICAgICAg4pSCIC0gICAgICAgICAgICAg4pSCIC0gICAgICAgICAgICAgICAgIOKUgiBieXZhbHVlL1IoVFtrXSkg4pSCXG4gKiDilIIgICAgICAgICAg4pSCIGNsYXNzICAgICAg4pSCIHVuZGVmaW5lZCjigKApICAg4pSCIC0gICAgICAgICDilIIgLSAgICAgICAgICDilIIgLSAgICAgICAgICAgICDilIIgeyByZWYgfSAgICAgICAgICAg4pSCIHsgcmVmOiBwcm94eSB9ICDilIJcbiAqIOKUgiAgICAgICAgICDilIIgYW55ICAgICAgICDilIIgdW5kZWZpbmVkICAgICAg4pSCIHsgZGF0ZSB9ICDilIIgdmFsdWUgICAgICDilIIgYXJyYXkvUihhbnkpICDilIIgeyByZWYgfSAgICAgICAgICAg4pSCIGJ5dmFsdWUvUihhbnkpICDilIJcbiAqIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICpcbiAqICAtICgqKSBzY2FsYXIgbWVhbnMgJ3N0cmluZyB8IG51bWJlciB8IGJvb2xlYW4nXG4gKiAgLSAo4oCgKSB0aHJvdyBpZiBub3QgbnVsbGFibGVcbiAqICAtIC9SKHQpIHJlY3Vyc2Ugd2l0aCBkZWNsYXJlZCB0eXBlIHRcbiAqL1xuXG5pbXBvcnQgKiBhcyBzcGVjIGZyb20gJ0Bqc2lpL3NwZWMnO1xuXG5pbXBvcnQge1xuICBpc09ialJlZixcbiAgaXNXaXJlRGF0ZSxcbiAgaXNXaXJlRW51bSxcbiAgaXNXaXJlTWFwLFxuICBPYmpSZWYsXG4gIFRPS0VOX0RBVEUsXG4gIFRPS0VOX0VOVU0sXG4gIFRPS0VOX01BUCxcbiAgV2lyZURhdGUsXG4gIFdpcmVFbnVtLFxuICBpc1dpcmVTdHJ1Y3QsXG4gIFRPS0VOX1NUUlVDVCxcbn0gZnJvbSAnLi9hcGknO1xuaW1wb3J0IHsganNpaVR5cGVGcW4sIG9iamVjdFJlZmVyZW5jZSwgT2JqZWN0VGFibGUgfSBmcm9tICcuL29iamVjdHMnO1xuXG5pbXBvcnQgeyBhcGkgfSBmcm9tICcuJztcblxuLyoqXG4gKiBBIHNwZWNpZmljIHNpbmdsZXRvbiB0eXBlIHRvIGJlIGV4cGxpY2l0IGFib3V0IGEgVm9pZCB0eXBlXG4gKlxuICogSW4gdGhlIHNwZWMsICd2b2lkJyBpcyByZXByZXNlbnRlZCBhcyAndW5kZWZpbmVkJygqKSwgYnV0IGFsbG93aW5nIHRoZVxuICogdmFsdWUgJ3VuZGVmaW5lZCcgaW4gZnVuY3Rpb24gY2FsbHMgaGFzIGxlYWQgdG8gY29uc3VtZXJzIGZhaWxpbmcgdG8gcGFzc1xuICogdHlwZSBpbmZvcm1hdGlvbiB0aGF0IHRoZXkgaGFkLCBqdXN0IGJlY2F1c2UgdGhleSBkaWRuJ3QgXCJoYXZlIHRvXCIgKHRoZVxuICogcGFyYW1ldGVyIHdhcyBvcHRpb25hbCkuXG4gKlxuICogKCopIEFzIGluLCBkZWNsYXJhdGlvbiBvZiBhIG1ldGhvZCBsb29rcyBsaWtlIHsgcmV0dXJucz86IFR5cGVSZWZlcmVuY2UgfVxuICogYW5kIHRoZSBhYnNlbmNlIG9mIGEgdHlwZSBtZWFucyBpdCByZXR1cm5zICd2b2lkJy5cbiAqL1xuZXhwb3J0IHR5cGUgVm9pZCA9ICd2b2lkJztcblxuLyoqXG4gKiBBIHR5cGUgaW5zdGFuY2UsIG9yIFZvaWRcbiAqL1xuZXhwb3J0IHR5cGUgT3B0aW9uYWxWYWx1ZU9yVm9pZCA9IHNwZWMuT3B0aW9uYWxWYWx1ZSB8IFZvaWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsIEZRTiB0aGF0IGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBlbXB0eSBqYXZhc2NyaXB0IG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBFTVBUWV9PQkpFQ1RfRlFOID0gJ09iamVjdCc7XG5cbmV4cG9ydCBjb25zdCBTWU1CT0xfV0lSRV9UWVBFID0gU3ltYm9sLmZvcignJGpzaWkkd2lyZVR5cGUkJyk7XG5cbi8qKlxuICogVGhlIHR5cGUga2luZCwgdGhhdCBjb250cm9scyBob3cgaXQgd2lsbCBiZSBzZXJpYWxpemVkIGFjY29yZGluZyB0byB0aGUgYWJvdmUgdGFibGVcbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gU2VyaWFsaXphdGlvbkNsYXNzIHtcbiAgVm9pZCA9ICdWb2lkJyxcbiAgRGF0ZSA9ICdEYXRlJyxcbiAgU2NhbGFyID0gJ1NjYWxhcicsXG4gIEpzb24gPSAnSnNvbicsXG4gIEVudW0gPSAnRW51bScsXG4gIEFycmF5ID0gJ0FycmF5JyxcbiAgTWFwID0gJ01hcCcsXG4gIFN0cnVjdCA9ICdTdHJ1Y3QnLFxuICBSZWZlcmVuY2VUeXBlID0gJ1JlZlR5cGUnLFxuICBBbnkgPSAnQW55Jyxcbn1cblxudHlwZSBUeXBlTG9va3VwID0gKGZxbjogc3BlYy5GUU4pID0+IHNwZWMuVHlwZTtcbnR5cGUgU3ltYm9sTG9va3VwID0gKGZxbjogc3BlYy5GUU4pID0+IGFueTtcblxuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemVySG9zdCB7XG4gIHJlYWRvbmx5IG9iamVjdHM6IE9iamVjdFRhYmxlO1xuICBkZWJ1ZyguLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XG4gIGxvb2t1cFR5cGUoZnFuOiBzdHJpbmcpOiBzcGVjLlR5cGU7XG4gIHJlY3Vyc2UoeDogYW55LCB0eXBlOiBPcHRpb25hbFZhbHVlT3JWb2lkKTogYW55O1xuICBmaW5kU3ltYm9sKGZxbjogc3BlYy5GUU4pOiBhbnk7XG59XG5cbmludGVyZmFjZSBTZXJpYWxpemVyIHtcbiAgc2VyaWFsaXplKFxuICAgIHZhbHVlOiB1bmtub3duLFxuICAgIHR5cGU6IE9wdGlvbmFsVmFsdWVPclZvaWQsXG4gICAgaG9zdDogU2VyaWFsaXplckhvc3QsXG4gICk6IGFueTtcbiAgZGVzZXJpYWxpemUoXG4gICAgdmFsdWU6IHVua25vd24sXG4gICAgdHlwZTogT3B0aW9uYWxWYWx1ZU9yVm9pZCxcbiAgICBob3N0OiBTZXJpYWxpemVySG9zdCxcbiAgKTogYW55O1xufVxuXG5leHBvcnQgY29uc3QgU0VSSUFMSVpFUlM6IHsgW2s6IHN0cmluZ106IFNlcmlhbGl6ZXIgfSA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBbU2VyaWFsaXphdGlvbkNsYXNzLlZvaWRdOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlLCBfdHlwZSwgaG9zdCkge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgaG9zdC5kZWJ1ZygnRXhwZWN0ZWQgdm9pZCwgZ290JywgdmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuXG4gICAgZGVzZXJpYWxpemUodmFsdWUsIF90eXBlLCBob3N0KSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICBob3N0LmRlYnVnKCdFeHBlY3RlZCB2b2lkLCBnb3QnLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0sXG4gIH0sXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBbU2VyaWFsaXphdGlvbkNsYXNzLkRhdGVdOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlKTogV2lyZURhdGUgfCB1bmRlZmluZWQge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNEYXRlKHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIERhdGUsIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXJpYWxpemVEYXRlKHZhbHVlKTtcbiAgICB9LFxuXG4gICAgZGVzZXJpYWxpemUodmFsdWUsIG9wdGlvbmFsVmFsdWUpIHtcbiAgICAgIGlmIChudWxsQW5kT2sodmFsdWUsIG9wdGlvbmFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNXaXJlRGF0ZSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBEYXRlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVzZXJpYWxpemVEYXRlKHZhbHVlKTtcbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5TY2FsYXJdOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlKSB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJpbWl0aXZlVHlwZSA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLlByaW1pdGl2ZVR5cGVSZWZlcmVuY2U7XG5cbiAgICAgIGlmICghaXNTY2FsYXIodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgJHtzcGVjLmRlc2NyaWJlVHlwZVJlZmVyZW5jZShcbiAgICAgICAgICAgIG9wdGlvbmFsVmFsdWUudHlwZSxcbiAgICAgICAgICApfSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBwcmltaXRpdmVUeXBlLnByaW1pdGl2ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEV4cGVjdGVkIGEgJHtzcGVjLmRlc2NyaWJlVHlwZVJlZmVyZW5jZShcbiAgICAgICAgICAgIG9wdGlvbmFsVmFsdWUudHlwZSxcbiAgICAgICAgICApfSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfSAoJHt0eXBlb2YgdmFsdWV9KWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSxcblxuICAgIGRlc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlKSB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJpbWl0aXZlVHlwZSA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLlByaW1pdGl2ZVR5cGVSZWZlcmVuY2U7XG5cbiAgICAgIGlmICghaXNTY2FsYXIodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgYSAke3NwZWMuZGVzY3JpYmVUeXBlUmVmZXJlbmNlKFxuICAgICAgICAgICAgb3B0aW9uYWxWYWx1ZS50eXBlLFxuICAgICAgICAgICl9LCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IHByaW1pdGl2ZVR5cGUucHJpbWl0aXZlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRXhwZWN0ZWQgYSAke3NwZWMuZGVzY3JpYmVUeXBlUmVmZXJlbmNlKFxuICAgICAgICAgICAgb3B0aW9uYWxWYWx1ZS50eXBlLFxuICAgICAgICAgICl9LCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9ICgke3R5cGVvZiB2YWx1ZX0pYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gIH0sXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBbU2VyaWFsaXphdGlvbkNsYXNzLkpzb25dOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlKSB7XG4gICAgICAvLyBKdXN0IHdoYXRldmVyLiBEYXRlcyB3aWxsIGF1dG9tYXRpY2FsbHkgc2VyaWFsaXplIHRoZW1zZWx2ZXMgdG8gc3RyaW5ncy5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuICAgIGRlc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlLCBob3N0KSB7XG4gICAgICAvLyAvIVxcIFRvcC1sZXZlbCBcIm51bGxcIiB3aWxsIHR1cm4gdG8gdW5kZWZpbmVkLCBidXQgYW55IG51bGwgbmVzdGVkIGluIHRoZSB2YWx1ZSBpcyB2YWxpZCBKU09OLCBzbyBpdCdsbCBzdGF5IVxuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gQSBtYXBwaW5nIG9iamVjdCBjYW4gYXJyaXZlIHRob3VnaCBoZXJlLiBUaGlzIHdvdWxkIGJlIHRoZSBjYXNlIGlmIGFueXRoaW5nIHRoYXQgaXMgdmFsaWQgaW50byBhIE1hcDxzdHJpbmcsID8+XG4gICAgICAvLyBpcyBwYXNzZWQgaW50byBhIEpTT04gdHJhbnNmZXIgcG9pbnQuIEluZGVlZCwgdGhvc2UgYXJlIGFsc28gdmFsaWQgSlNPTiEgRm9yIGV4YW1wbGUsIFB5dGhvbiBcImRpY3RzXCIgd2lsbCBiZVxuICAgICAgLy8gc2VyaWFsaXplZCAoYnkgdGhlIFB5dGhvbiBydW50aW1lKSBhcyBhICRqc2lpLm1hcCAodGhlIG1hcHBpbmcgb2JqZWN0KS4gV2UgbmVlZCB0byBkZS1zZXJpYWxpemUgdGhhdCBhcyBhXG4gICAgICAvLyBNYXA8c3RyaW5nLCBKU09OPiBpbiBvcmRlciB0byBvYnRhaW4gdGhlIGNvcnJlY3Qgb3V0cHV0IGJlaGF2aW9yIGhlcmUhXG4gICAgICBpZiAoaXNXaXJlTWFwKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gU0VSSUFMSVpFUlNbU2VyaWFsaXphdGlvbkNsYXNzLk1hcF0uZGVzZXJpYWxpemUoXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgb3B0aW9uYWw6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAga2luZDogc3BlYy5Db2xsZWN0aW9uS2luZC5NYXAsXG4gICAgICAgICAgICAgICAgZWxlbWVudHR5cGU6IHsgcHJpbWl0aXZlOiBzcGVjLlByaW1pdGl2ZVR5cGUuSnNvbiB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhvc3QsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAobWFwSnNvblZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1hcFZhbHVlcyh2YWx1ZSwgbWFwSnNvblZhbHVlKTtcblxuICAgICAgZnVuY3Rpb24gbWFwSnNvblZhbHVlKHRvTWFwOiBhbnkpIHtcbiAgICAgICAgaWYgKHRvTWFwID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdG9NYXA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhvc3QucmVjdXJzZSh0b01hcCwge1xuICAgICAgICAgIHR5cGU6IHsgcHJpbWl0aXZlOiBzcGVjLlByaW1pdGl2ZVR5cGUuSnNvbiB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5FbnVtXToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCk6IFdpcmVFbnVtIHwgdW5kZWZpbmVkIHtcbiAgICAgIGlmIChudWxsQW5kT2sodmFsdWUsIG9wdGlvbmFsVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uYWxWYWx1ZSA9PT0gJ3ZvaWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb3VudGVyZWQgdW5leHBlY3RlZCBgdm9pZGAgdHlwZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZW51bSB2YWx1ZSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgICAgfVxuXG4gICAgICBob3N0LmRlYnVnKCdTZXJpYWxpemluZyBlbnVtJyk7XG5cbiAgICAgIGNvbnN0IGVudW1UeXBlID0gb3B0aW9uYWxWYWx1ZS50eXBlIGFzIHNwZWMuTmFtZWRUeXBlUmVmZXJlbmNlO1xuICAgICAgY29uc3QgZW51bU1hcCA9IGhvc3QuZmluZFN5bWJvbChlbnVtVHlwZS5mcW4pO1xuICAgICAgY29uc3QgZW51bUVudHJ5ID0gT2JqZWN0LmVudHJpZXMoZW51bU1hcCkuZmluZCgoWywgdl0pID0+IHYgPT09IHZhbHVlKTtcbiAgICAgIGlmICghZW51bUVudHJ5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gZW50cnkgaW4gJHtlbnVtVHlwZS5mcW59IGhhcyB2YWx1ZSAke3ZhbHVlfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgW1RPS0VOX0VOVU1dOiBgJHtlbnVtVHlwZS5mcW59LyR7ZW51bUVudHJ5WzBdfWAgfTtcbiAgICB9LFxuICAgIGRlc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlLCBob3N0KSB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzV2lyZUVudW0odmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZW51bSB2YWx1ZSwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVzZXJpYWxpemVFbnVtKHZhbHVlLCBob3N0LmZpbmRTeW1ib2wpO1xuICAgIH0sXG4gIH0sXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBbU2VyaWFsaXphdGlvbkNsYXNzLkFycmF5XToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhcnJheSB0eXBlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFycmF5VHlwZSA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLkNvbGxlY3Rpb25UeXBlUmVmZXJlbmNlO1xuXG4gICAgICByZXR1cm4gdmFsdWUubWFwKCh4KSA9PlxuICAgICAgICBob3N0LnJlY3Vyc2UoeCwgeyB0eXBlOiBhcnJheVR5cGUuY29sbGVjdGlvbi5lbGVtZW50dHlwZSB9KSxcbiAgICAgICk7XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhcnJheSB0eXBlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFycmF5VHlwZSA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLkNvbGxlY3Rpb25UeXBlUmVmZXJlbmNlO1xuXG4gICAgICByZXR1cm4gdmFsdWUubWFwKCh4KSA9PlxuICAgICAgICBob3N0LnJlY3Vyc2UoeCwgeyB0eXBlOiBhcnJheVR5cGUuY29sbGVjdGlvbi5lbGVtZW50dHlwZSB9KSxcbiAgICAgICk7XG4gICAgfSxcbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIFtTZXJpYWxpemF0aW9uQ2xhc3MuTWFwXToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hcFR5cGUgPSBvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5Db2xsZWN0aW9uVHlwZVJlZmVyZW5jZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtUT0tFTl9NQVBdOiBtYXBWYWx1ZXModmFsdWUsICh2KSA9PlxuICAgICAgICAgIGhvc3QucmVjdXJzZSh2LCB7IHR5cGU6IG1hcFR5cGUuY29sbGVjdGlvbi5lbGVtZW50dHlwZSB9KSxcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hcFR5cGUgPSBvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5Db2xsZWN0aW9uVHlwZVJlZmVyZW5jZTtcbiAgICAgIGlmICghaXNXaXJlTWFwKHZhbHVlKSkge1xuICAgICAgICAvLyBDb21wYXRpYmlsaXR5IG1vZGUgd2l0aCBvbGRlciB2ZXJzaW9ucyB0aGF0IGRpZG4ndCB3cmFwIGluIFtUT0tFTl9NQVBdXG4gICAgICAgIHJldHVybiBtYXBWYWx1ZXModmFsdWUsICh2KSA9PlxuICAgICAgICAgIGhvc3QucmVjdXJzZSh2LCB7IHR5cGU6IG1hcFR5cGUuY29sbGVjdGlvbi5lbGVtZW50dHlwZSB9KSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3VsdCA9IG1hcFZhbHVlcyh2YWx1ZVtUT0tFTl9NQVBdLCAodikgPT5cbiAgICAgICAgaG9zdC5yZWN1cnNlKHYsIHsgdHlwZTogbWFwVHlwZS5jb2xsZWN0aW9uLmVsZW1lbnR0eXBlIH0pLFxuICAgICAgKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXN1bHQsIFNZTUJPTF9XSVJFX1RZUEUsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlOiBUT0tFTl9NQVAsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5TdHJ1Y3RdOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlLCBob3N0KSB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIG9iamVjdCwgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgICAgfVxuXG4gICAgICAvKlxuICAgICAgICBUaGlzIGlzIHdoYXQgd2UnZCBsaWtlIHRvIGRvLCBidXQgd2UgY2FuJ3QgYmVjYXVzZSBhdCBsZWFzdCB0aGUgSmF2YSBjbGllbnRcbiAgICAgICAgZG9lcyBub3QgdW5kZXJzdGFuZCBieS12YWx1ZSBzZXJpYWxpemVkIGludGVyZmFjZSB0eXBlcywgc28gd2UnbGwgaGF2ZSB0b1xuICAgICAgICBzZXJpYWxpemUgYnktcmVmZXJlbmNlLiBBZGRpdGlvbmFsbHksIHNlcmlhbGl6aW5nIGtub3duIHByb3BlcnRpZXMgd291bGRcbiAgICAgICAgY2F1c2UgcHJvYmxlbXMgd2hlbiB0aGUgcmV0dXJuIHR5cGUgb2YgYSBtZXRob2QgaXMgYSBVTklPTiBvZiBzdHJ1Y3RzLlxuICAgICAgICBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvanNpaS9pc3N1ZXMvNDAwXG5cbiAgICAgIGNvbnN0IHByb3BzID0gcHJvcGVydGllc09mKG5hbWVkVHlwZSk7XG5cbiAgICAgIHJldHVybiBtYXBWYWx1ZXModmFsdWUsICh2LCBrZXkpID0+IHtcbiAgICAgICAgaWYgKCFwcm9wc1trZXldKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gLy8gRG9uJ3QgbWFwIGlmIHVua25vd24gcHJvcGVydHlcbiAgICAgICAgcmV0dXJuIGhvc3QucmVjdXJzZSh2LCBwcm9wc1trZXldLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICAqL1xuXG4gICAgICBob3N0LmRlYnVnKCdSZXR1cm5pbmcgdmFsdWUgdHlwZSBieSByZWZlcmVuY2UnKTtcbiAgICAgIHJldHVybiBob3N0Lm9iamVjdHMucmVnaXN0ZXJPYmplY3QodmFsdWUsIEVNUFRZX09CSkVDVF9GUU4sIFtcbiAgICAgICAgKG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLk5hbWVkVHlwZVJlZmVyZW5jZSkuZnFuLFxuICAgICAgXSk7XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXModmFsdWUgPz8ge30pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBUcmVhdCBlbXB0eSBzdHJ1Y3RzIGFzIGB1bmRlZmluZWRgIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9qc2lpL2lzc3Vlcy80MTEpXG4gICAgICAgIHZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG51bGxBbmRPayh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25hbFZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvdW50ZXJlZCB1bmV4cGVjdGVkIGB2b2lkYCB0eXBlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCBvYmplY3QgcmVmZXJlbmNlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmFtZWRUeXBlID0gaG9zdC5sb29rdXBUeXBlKFxuICAgICAgICAob3B0aW9uYWxWYWx1ZS50eXBlIGFzIHNwZWMuTmFtZWRUeXBlUmVmZXJlbmNlKS5mcW4sXG4gICAgICApO1xuICAgICAgY29uc3QgcHJvcHMgPSBwcm9wZXJ0aWVzT2YobmFtZWRUeXBlLCBob3N0Lmxvb2t1cFR5cGUpO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBHb3QgYW4gYXJyYXkgd2hlcmUgYSAke25hbWVkVHlwZS5mcW59IHdhcyBleHBlY3RlZC4gRGlkIHlvdSBtZWFuIHRvIHBhc3MgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzP2AsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNpbWlsYXJseSB0byBzZXJpYWxpemF0aW9uLCB3ZSBtaWdodCBiZSBnZXR0aW5nIGEgcmVmZXJlbmNlIHR5cGUgd2hlcmUgd2UncmVcbiAgICAgIC8vIGV4cGVjdGluZyBhIHZhbHVlIHR5cGUuIEFjY2VwdCB0aGlzIGZvciBub3cgKGJ1dCBhbHNvIHZhbGlkYXRlIHRoYXQgb2JqZWN0XG4gICAgICAvLyBmb3IgcHJlc2VuY2Ugb2YgdGhlIHJpZ2h0IHByb3BlcnRpZXMpLlxuICAgICAgaWYgKGlzT2JqUmVmKHZhbHVlKSkge1xuICAgICAgICBob3N0LmRlYnVnKFxuICAgICAgICAgICdFeHBlY3RlZCB2YWx1ZSB0eXBlIGJ1dCBnb3QgcmVmZXJlbmNlIHR5cGUsIGFjY2VwdGluZyBmb3Igbm93IChhd3NsYWJzL2pzaWkjNDAwKScsXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gUmV0dXJuIHNhbWUgSU5TVEFOQ0UgKHNob3VsZG4ndCBtYXR0ZXIgYnV0IHdlIGRvbid0IGtub3cgZm9yIHN1cmUgdGhhdCBpdCBkb2Vzbid0KVxuICAgICAgICByZXR1cm4gdmFsaWRhdGVSZXF1aXJlZFByb3BzKFxuICAgICAgICAgIGhvc3Qub2JqZWN0cy5maW5kT2JqZWN0KHZhbHVlKS5pbnN0YW5jZSxcbiAgICAgICAgICBuYW1lZFR5cGUuZnFuLFxuICAgICAgICAgIHByb3BzLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXBpLmlzV2lyZVN0cnVjdCh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgeyBmcW4sIGRhdGEgfSA9IHZhbHVlW2FwaS5UT0tFTl9TVFJVQ1RdO1xuICAgICAgICBpZiAoIWlzQXNzaWduYWJsZShmcW4sIG5hbWVkVHlwZSwgaG9zdC5sb29rdXBUeXBlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBXaXJlIHN0cnVjdCB0eXBlICcke2Zxbn0nIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkICcke25hbWVkVHlwZS5mcW59J2AsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9IGRhdGE7XG4gICAgICB9XG5cbiAgICAgIC8vIFB5dGhvbiwgZm9yIGV4YW1wbGUsIGFsbG93cyB1c2luZyBwbGFpbiBtYXBwaW5nIG9iamVjdHMgaW5zdGVhZCBvZiBTdHJ1Y3RzIChkeWFubWljIHR5cGluZywgWU9MTyEpXG4gICAgICBpZiAoYXBpLmlzV2lyZU1hcCh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZVthcGkuVE9LRU5fTUFQXTtcbiAgICAgIH1cblxuICAgICAgdmFsdWUgPSB2YWxpZGF0ZVJlcXVpcmVkUHJvcHModmFsdWUgYXMgYW55LCBuYW1lZFR5cGUuZnFuLCBwcm9wcyk7XG5cbiAgICAgIC8vIFJldHVybiBhIGRpY3QgQ09QWSwgd2UgaGF2ZSBieS12YWx1ZSBzZW1hbnRpY3MgYW55d2F5LlxuICAgICAgcmV0dXJuIG1hcFZhbHVlcyh2YWx1ZSwgKHYsIGtleSkgPT4ge1xuICAgICAgICBpZiAoIXByb3BzW2tleV0pIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IC8vIERvbid0IG1hcCBpZiB1bmtub3duIHByb3BlcnR5XG4gICAgICAgIHJldHVybiBob3N0LnJlY3Vyc2UodiwgcHJvcHNba2V5XSk7XG4gICAgICB9KTtcbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5SZWZlcmVuY2VUeXBlXToge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9uYWxWYWx1ZSwgaG9zdCk6IE9ialJlZiB8IHVuZGVmaW5lZCB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEV4cGVjdGVkIG9iamVjdCByZWZlcmVuY2UsIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBleHBlY3RlZFR5cGUgPSBob3N0Lmxvb2t1cFR5cGUoXG4gICAgICAgIChvcHRpb25hbFZhbHVlLnR5cGUgYXMgc3BlYy5OYW1lZFR5cGVSZWZlcmVuY2UpLmZxbixcbiAgICAgICk7XG4gICAgICBjb25zdCBpbnRlcmZhY2VzID0gc3BlYy5pc0ludGVyZmFjZVR5cGUoZXhwZWN0ZWRUeXBlKVxuICAgICAgICA/IFtleHBlY3RlZFR5cGUuZnFuXVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGpzaWlUeXBlID1cbiAgICAgICAganNpaVR5cGVGcW4odmFsdWUpID8/XG4gICAgICAgIChzcGVjLmlzQ2xhc3NUeXBlKGV4cGVjdGVkVHlwZSkgPyBleHBlY3RlZFR5cGUuZnFuIDogRU1QVFlfT0JKRUNUX0ZRTik7XG5cbiAgICAgIHJldHVybiBob3N0Lm9iamVjdHMucmVnaXN0ZXJPYmplY3QodmFsdWUsIGpzaWlUeXBlLCBpbnRlcmZhY2VzKTtcbiAgICB9LFxuICAgIGRlc2VyaWFsaXplKHZhbHVlLCBvcHRpb25hbFZhbHVlLCBob3N0KSB7XG4gICAgICBpZiAobnVsbEFuZE9rKHZhbHVlLCBvcHRpb25hbFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsVmFsdWUgPT09ICd2b2lkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY291bnRlcmVkIHVuZXhwZWN0ZWQgYHZvaWRgIHR5cGUnKTtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIG9ubHkgd2F5IHRvIHBhc3MgYSBieS1yZWYgb2JqZWN0IGlzIHRvIGhhdmUgY3JlYXRlZCBpdFxuICAgICAgLy8gcHJldmlvdXNseSBpbnNpZGUgSlNJSSBrZXJuZWwsIHNvIGl0IG11c3QgaGF2ZSBhbiBvYmpyZWYgYWxyZWFkeS5cblxuICAgICAgaWYgKCFpc09ialJlZih2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBFeHBlY3RlZCBvYmplY3QgcmVmZXJlbmNlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBpbnN0YW5jZSwgZnFuIH0gPSBob3N0Lm9iamVjdHMuZmluZE9iamVjdCh2YWx1ZSk7XG5cbiAgICAgIGNvbnN0IG5hbWVkVHlwZVJlZiA9IG9wdGlvbmFsVmFsdWUudHlwZSBhcyBzcGVjLk5hbWVkVHlwZVJlZmVyZW5jZTtcbiAgICAgIGlmIChuYW1lZFR5cGVSZWYuZnFuICE9PSBFTVBUWV9PQkpFQ1RfRlFOKSB7XG4gICAgICAgIGNvbnN0IG5hbWVkVHlwZSA9IGhvc3QubG9va3VwVHlwZShuYW1lZFR5cGVSZWYuZnFuKTtcblxuICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBvYmplY3Qgd2UgZ290IGlzIG9mIHRoZSByaWdodCB0eXBlXG4gICAgICAgIC8vIFdlIG9ubHkgZG8gdGhpcyBmb3IgY2xhc3Nlcywgbm90IGludGVyZmFjZXMsIHNpbmNlIEphdmEgbWlnaHQgcGFzcyB1cyBvYmplY3RzIHRoYXRcbiAgICAgICAgLy8gcHJpdmF0ZWx5IGltcGxlbWVudCBzb21lIGludGVyZmFjZSBhbmQgd2UgY2FuJ3QgcHJvdmUgdGhleSBkb24ndC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9qc2lpL2lzc3Vlcy8zOTlcbiAgICAgICAgY29uc3QgZGVjbGFyZWRUeXBlID0gb3B0aW9uYWxWYWx1ZS50eXBlIGFzIHNwZWMuTmFtZWRUeXBlUmVmZXJlbmNlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgc3BlYy5pc0NsYXNzVHlwZShuYW1lZFR5cGUpICYmXG4gICAgICAgICAgIWlzQXNzaWduYWJsZShmcW4sIGRlY2xhcmVkVHlwZSwgaG9zdC5sb29rdXBUeXBlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgT2JqZWN0IG9mIHR5cGUgJHtmcW59IGlzIG5vdCBjb252ZXJ0aWJsZSB0byAke2RlY2xhcmVkVHlwZS5mcW59YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9LFxuICB9LFxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgW1NlcmlhbGl6YXRpb25DbGFzcy5BbnldOiB7XG4gICAgc2VyaWFsaXplKHZhbHVlLCBfdHlwZSwgaG9zdCkge1xuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZURhdGUodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKGlzU2NhbGFyKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLm1hcCgoZSkgPT4gaG9zdC5yZWN1cnNlKGUsIHsgdHlwZTogc3BlYy5DQU5PTklDQUxfQU5ZIH0pKTtcbiAgICAgIH1cblxuICAgICAgLy8gTm90ZTogbm8gY2FzZSBmb3IgXCJFTlVNXCIgaGVyZSwgd2l0aG91dCB0eXBlIGRlY2xhcmF0aW9uIHdlIGNhbid0IHRlbGwgdGhlIGRpZmZlcmVuY2VcbiAgICAgIC8vIGJldHdlZW4gYW4gZW51bSBtZW1iZXIgYW5kIGEgc2NhbGFyLlxuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnSlNJSSBLZXJuZWwgaXMgdW5hYmxlIHRvIHNlcmlhbGl6ZSBgZnVuY3Rpb25gLiBBbiBpbnN0YW5jZSB3aXRoIG1ldGhvZHMgbWlnaHQgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IGFuIGBhbnlgIG1ldGhvZD8nLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSlNJSSBrZXJuZWwgYXNzdW1wdGlvbiB2aW9sYXRlZCwgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICl9IGlzIG5vdCBhbiBvYmplY3RgLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIFNZTUJPTF9XSVJFX1RZUEUgaW4gdmFsdWUgJiZcbiAgICAgICAgKHZhbHVlIGFzIGFueSlbU1lNQk9MX1dJUkVfVFlQRV0gPT09IFRPS0VOX01BUFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBTRVJJQUxJWkVSU1tTZXJpYWxpemF0aW9uQ2xhc3MuTWFwXS5zZXJpYWxpemUoXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZToge1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAga2luZDogc3BlYy5Db2xsZWN0aW9uS2luZC5NYXAsXG4gICAgICAgICAgICAgICAgZWxlbWVudHR5cGU6IHNwZWMuQ0FOT05JQ0FMX0FOWSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBob3N0LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBUbyBtYWtlIHN1cmUgcGVvcGxlIGFyZW4ndCBnb2luZyB0byB0cnkgYW5kIHJldHVybiBNYXA8PiBvciBTZXQ8PiBvdXQsIHRlc3QgZm9yXG4gICAgICAvLyB0aG9zZSBhbmQgdGhyb3cgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlLiBXZSBjYW4ndCBkZXRlY3QgdGhlc2UgY2FzZXMgYW55IG90aGVyXG4gICAgICAvLyB3YXksIGFuZCB0aGUgYnktdmFsdWUgc2VyaWFsaXplZCBvYmplY3Qgd2lsbCBiZSBxdWl0ZSB1c2VsZXNzLlxuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgU2V0IHx8IHZhbHVlIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IHJldHVybiBvYmplY3RzIG9mIHR5cGUgU2V0IG9yIE1hcFwiKTtcbiAgICAgIH1cblxuICAgICAgLy8gVXNlIGEgcHJldmlvdXMgcmVmZXJlbmNlIHRvIG1haW50YWluIG9iamVjdCBpZGVudGl0eS4gTk9URTogdGhpcyBtYXkgY2F1c2UgdXMgdG8gcmV0dXJuXG4gICAgICAvLyBhIGRpZmZlcmVudCB0eXBlIHRoYW4gcmVxdWVzdGVkISBUaGlzIGlzIGp1c3QgaG93IGl0IGlzIHJpZ2h0IG5vdy5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvanNpaS9pc3N1ZXMvMzk5XG4gICAgICBjb25zdCBwcmV2UmVmID0gb2JqZWN0UmVmZXJlbmNlKHZhbHVlKTtcbiAgICAgIGlmIChwcmV2UmVmKSB7XG4gICAgICAgIHJldHVybiBwcmV2UmVmO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGlzIGlzIG9yIHNob3VsZCBiZSBhIHJlZmVyZW5jZSB0eXBlLCBwYXNzIG9yIG1ha2UgdGhlIHJlZmVyZW5jZVxuICAgICAgLy8gKExpa2UgcmVndWxhciByZWZ0eXBlIHNlcmlhbGl6YXRpb24sIGJ1dCB3aXRob3V0IHRoZSB0eXBlIGRlcml2YXRpb24gdG8gYW4gaW50ZXJmYWNlKVxuICAgICAgY29uc3QganNpaVR5cGUgPVxuICAgICAgICBqc2lpVHlwZUZxbih2YWx1ZSkgPz9cbiAgICAgICAgKGlzQnlSZWZlcmVuY2VPbmx5KHZhbHVlKSA/IEVNUFRZX09CSkVDVF9GUU4gOiB1bmRlZmluZWQpO1xuICAgICAgaWYgKGpzaWlUeXBlKSB7XG4gICAgICAgIHJldHVybiBob3N0Lm9iamVjdHMucmVnaXN0ZXJPYmplY3QodmFsdWUsIGpzaWlUeXBlKTtcbiAgICAgIH1cblxuICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGFuIG9iamVjdCB0aGF0IGlzIG5vdCBvZiBhbiBleHBvcnRlZCB0eXBlLiBFaXRoZXIgYW4gb2JqZWN0XG4gICAgICAvLyBsaXRlcmFsLCBvciBhbiBpbnN0YW5jZSBvZiBhIGZ1bGx5IHByaXZhdGUgY2xhc3MgKGNhbm5vdCBkaXN0aW5ndWlzaCB0aG9zZSBjYXNlcykuXG5cbiAgICAgIC8vIFdlIHdpbGwgc2VyaWFsaXplIGJ5LXZhbHVlLCBidXQgcmVjdXJzZSBmb3Igc2VyaWFsaXphdGlvbiBzbyB0aGF0IGlmXG4gICAgICAvLyB0aGUgb2JqZWN0IGNvbnRhaW5zIHJlZmVyZW5jZSBvYmplY3RzLCB0aGV5IHdpbGwgYmUgc2VyaWFsaXplZCBhcHByb3ByaWF0ZWx5LlxuICAgICAgLy8gKEJhc2ljYWxseSwgc2VyaWFsaXplIGFueXRoaW5nIGVsc2UgYXMgYSBtYXAgb2YgJ2FueScpLlxuICAgICAgcmV0dXJuIG1hcFZhbHVlcyh2YWx1ZSwgKHYpID0+XG4gICAgICAgIGhvc3QucmVjdXJzZSh2LCB7IHR5cGU6IHNwZWMuQ0FOT05JQ0FMX0FOWSB9KSxcbiAgICAgICk7XG4gICAgfSxcblxuICAgIGRlc2VyaWFsaXplKHZhbHVlLCBfdHlwZSwgaG9zdCkge1xuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzV2lyZURhdGUodmFsdWUpKSB7XG4gICAgICAgIGhvc3QuZGVidWcoJ0FOWSBpcyBhIERhdGUnKTtcbiAgICAgICAgcmV0dXJuIGRlc2VyaWFsaXplRGF0ZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNTY2FsYXIodmFsdWUpKSB7XG4gICAgICAgIGhvc3QuZGVidWcoJ0FOWSBpcyBhIFNjYWxhcicpO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaG9zdC5kZWJ1ZygnQU5ZIGlzIGFuIEFycmF5Jyk7XG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAoKGUpID0+IGhvc3QucmVjdXJzZShlLCB7IHR5cGU6IHNwZWMuQ0FOT05JQ0FMX0FOWSB9KSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1dpcmVFbnVtKHZhbHVlKSkge1xuICAgICAgICBob3N0LmRlYnVnKCdBTlkgaXMgYW4gRW51bScpO1xuICAgICAgICByZXR1cm4gZGVzZXJpYWxpemVFbnVtKHZhbHVlLCBob3N0LmZpbmRTeW1ib2wpO1xuICAgICAgfVxuICAgICAgaWYgKGlzV2lyZU1hcCh2YWx1ZSkpIHtcbiAgICAgICAgaG9zdC5kZWJ1ZygnQU5ZIGlzIGEgTWFwJyk7XG4gICAgICAgIGNvbnN0IG1hcE9mQW55OiBzcGVjLkNvbGxlY3Rpb25UeXBlUmVmZXJlbmNlID0ge1xuICAgICAgICAgIGNvbGxlY3Rpb246IHtcbiAgICAgICAgICAgIGtpbmQ6IHNwZWMuQ29sbGVjdGlvbktpbmQuTWFwLFxuICAgICAgICAgICAgZWxlbWVudHR5cGU6IHNwZWMuQ0FOT05JQ0FMX0FOWSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gU0VSSUFMSVpFUlNbU2VyaWFsaXphdGlvbkNsYXNzLk1hcF0uZGVzZXJpYWxpemUoXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgeyB0eXBlOiBtYXBPZkFueSB9LFxuICAgICAgICAgIGhvc3QsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoaXNPYmpSZWYodmFsdWUpKSB7XG4gICAgICAgIGhvc3QuZGVidWcoJ0FOWSBpcyBhIFJlZicpO1xuICAgICAgICByZXR1cm4gaG9zdC5vYmplY3RzLmZpbmRPYmplY3QodmFsdWUpLmluc3RhbmNlO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgdmFsdWUgaGFzIGEgc3RydWN0IHRva2VuLCBpdCB3YXMgc2VyaWFsaXplZCBieSBhIHR5cGVkIGpzaWlcbiAgICAgIC8vIHN0cnVjdCwgYnV0IHNpbmNlIHRoZSBkZXNlcmlhbGl6YXRpb24gdGFyZ2V0IGlzIEFOWSwgYWxsIHdlIGNhbiBkbyBpc1xuICAgICAgLy8gc3RyaXAgdGhlIGRhdGEgZnJvbSAkanNpaS5zdHJ1Y3QgYW5kIGNvbnRpbnVlIHRvIGRlc2VyaWFsaXplIGFzIEFOWS5cbiAgICAgIGlmIChpc1dpcmVTdHJ1Y3QodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHsgZnFuLCBkYXRhIH0gPSB2YWx1ZVtUT0tFTl9TVFJVQ1RdO1xuICAgICAgICBob3N0LmRlYnVnKGBBTlkgaXMgYSBzdHJ1Y3Qgb2YgdHlwZSAke2Zxbn1gKTtcbiAgICAgICAgcmV0dXJuIFNFUklBTElaRVJTW1NlcmlhbGl6YXRpb25DbGFzcy5TdHJ1Y3RdLmRlc2VyaWFsaXplKFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgeyB0eXBlOiB7IGZxbiB9IH0sXG4gICAgICAgICAgaG9zdCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gQXQgdGhpcyBwb2ludCBhZ2FpbiwgZGVzZXJpYWxpemUgYnktdmFsdWUuXG4gICAgICBob3N0LmRlYnVnKCdBTlkgaXMgYSBNYXAnKTtcbiAgICAgIHJldHVybiBtYXBWYWx1ZXModmFsdWUsICh2KSA9PlxuICAgICAgICBob3N0LnJlY3Vyc2UodiwgeyB0eXBlOiBzcGVjLkNBTk9OSUNBTF9BTlkgfSksXG4gICAgICApO1xuICAgIH0sXG4gIH0sXG59O1xuXG5mdW5jdGlvbiBzZXJpYWxpemVEYXRlKHZhbHVlOiBEYXRlKTogV2lyZURhdGUge1xuICByZXR1cm4geyBbVE9LRU5fREFURV06IHZhbHVlLnRvSVNPU3RyaW5nKCkgfTtcbn1cblxuZnVuY3Rpb24gZGVzZXJpYWxpemVEYXRlKHZhbHVlOiBXaXJlRGF0ZSk6IERhdGUge1xuICByZXR1cm4gbmV3IERhdGUodmFsdWVbVE9LRU5fREFURV0pO1xufVxuXG5mdW5jdGlvbiBkZXNlcmlhbGl6ZUVudW0odmFsdWU6IFdpcmVFbnVtLCBsb29rdXA6IFN5bWJvbExvb2t1cCkge1xuICBjb25zdCBlbnVtTG9jYXRvciA9IHZhbHVlW1RPS0VOX0VOVU1dO1xuICBjb25zdCBzZXAgPSBlbnVtTG9jYXRvci5sYXN0SW5kZXhPZignLycpO1xuICBpZiAoc2VwID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWFsZm9ybWVkIGVudW0gdmFsdWU6ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICB9XG5cbiAgY29uc3QgdHlwZU5hbWUgPSBlbnVtTG9jYXRvci5zdWJzdHIoMCwgc2VwKTtcbiAgY29uc3QgdmFsdWVOYW1lID0gZW51bUxvY2F0b3Iuc3Vic3RyKHNlcCArIDEpO1xuXG4gIGNvbnN0IGVudW1WYWx1ZSA9IGxvb2t1cCh0eXBlTmFtZSlbdmFsdWVOYW1lXTtcbiAgaWYgKGVudW1WYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBlbnVtIG1lbWJlciBuYW1lZCAke3ZhbHVlTmFtZX0gaW4gJHt0eXBlTmFtZX1gKTtcbiAgfVxuICByZXR1cm4gZW51bVZhbHVlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVTZXJpYWxpemF0aW9uIHtcbiAgc2VyaWFsaXphdGlvbkNsYXNzOiBTZXJpYWxpemF0aW9uQ2xhc3M7XG4gIHR5cGVSZWY6IE9wdGlvbmFsVmFsdWVPclZvaWQ7XG59XG5cbi8qKlxuICogRnJvbSBhIHR5cGUgcmVmZXJlbmNlLCByZXR1cm4gdGhlIHBvc3NpYmxlIHNlcmlhbGl6YXRpb24gdHlwZXNcbiAqXG4gKiBUaGVyZSBjYW4gYmUgbXVsdGlwbGUsIGJlY2F1c2UgdGhlIHR5cGUgY2FuIGJlIGEgdHlwZSB1bmlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6YXRpb25UeXBlKFxuICB0eXBlUmVmOiBPcHRpb25hbFZhbHVlT3JWb2lkLFxuICBsb29rdXA6IFR5cGVMb29rdXAsXG4pOiBUeXBlU2VyaWFsaXphdGlvbltdIHtcbiAgaWYgKHR5cGVSZWYgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIktlcm5lbCBlcnJvcjogZXhwZWN0ZWQgdHlwZSBpbmZvcm1hdGlvbiwgZ290ICd1bmRlZmluZWQnXCIpO1xuICB9XG4gIGlmICh0eXBlUmVmID09PSAndm9pZCcpIHtcbiAgICByZXR1cm4gW3sgc2VyaWFsaXphdGlvbkNsYXNzOiBTZXJpYWxpemF0aW9uQ2xhc3MuVm9pZCwgdHlwZVJlZiB9XTtcbiAgfVxuICBpZiAoc3BlYy5pc1ByaW1pdGl2ZVR5cGVSZWZlcmVuY2UodHlwZVJlZi50eXBlKSkge1xuICAgIHN3aXRjaCAodHlwZVJlZi50eXBlLnByaW1pdGl2ZSkge1xuICAgICAgY2FzZSBzcGVjLlByaW1pdGl2ZVR5cGUuQW55OlxuICAgICAgICByZXR1cm4gW3sgc2VyaWFsaXphdGlvbkNsYXNzOiBTZXJpYWxpemF0aW9uQ2xhc3MuQW55LCB0eXBlUmVmIH1dO1xuICAgICAgY2FzZSBzcGVjLlByaW1pdGl2ZVR5cGUuRGF0ZTpcbiAgICAgICAgcmV0dXJuIFt7IHNlcmlhbGl6YXRpb25DbGFzczogU2VyaWFsaXphdGlvbkNsYXNzLkRhdGUsIHR5cGVSZWYgfV07XG4gICAgICBjYXNlIHNwZWMuUHJpbWl0aXZlVHlwZS5Kc29uOlxuICAgICAgICByZXR1cm4gW3sgc2VyaWFsaXphdGlvbkNsYXNzOiBTZXJpYWxpemF0aW9uQ2xhc3MuSnNvbiwgdHlwZVJlZiB9XTtcbiAgICAgIGNhc2Ugc3BlYy5QcmltaXRpdmVUeXBlLkJvb2xlYW46XG4gICAgICBjYXNlIHNwZWMuUHJpbWl0aXZlVHlwZS5OdW1iZXI6XG4gICAgICBjYXNlIHNwZWMuUHJpbWl0aXZlVHlwZS5TdHJpbmc6XG4gICAgICAgIHJldHVybiBbeyBzZXJpYWxpemF0aW9uQ2xhc3M6IFNlcmlhbGl6YXRpb25DbGFzcy5TY2FsYXIsIHR5cGVSZWYgfV07XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHByaW1pdGl2ZSB0eXBlJyk7XG4gIH1cbiAgaWYgKHNwZWMuaXNDb2xsZWN0aW9uVHlwZVJlZmVyZW5jZSh0eXBlUmVmLnR5cGUpKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgc2VyaWFsaXphdGlvbkNsYXNzOlxuICAgICAgICAgIHR5cGVSZWYudHlwZS5jb2xsZWN0aW9uLmtpbmQgPT09IHNwZWMuQ29sbGVjdGlvbktpbmQuQXJyYXlcbiAgICAgICAgICAgID8gU2VyaWFsaXphdGlvbkNsYXNzLkFycmF5XG4gICAgICAgICAgICA6IFNlcmlhbGl6YXRpb25DbGFzcy5NYXAsXG4gICAgICAgIHR5cGVSZWYsXG4gICAgICB9LFxuICAgIF07XG4gIH1cbiAgaWYgKHNwZWMuaXNVbmlvblR5cGVSZWZlcmVuY2UodHlwZVJlZi50eXBlKSkge1xuICAgIGNvbnN0IGNvbXBvdW5kVHlwZXMgPSBmbGF0TWFwKHR5cGVSZWYudHlwZS51bmlvbi50eXBlcywgKHQpID0+XG4gICAgICBzZXJpYWxpemF0aW9uVHlwZSh7IHR5cGU6IHQgfSwgbG9va3VwKSxcbiAgICApO1xuICAgIC8vIFByb3BhZ2F0ZSB0aGUgdG9wLWxldmVsICdvcHRpb25hbCcgZmllbGQgdG8gZWFjaCBpbmRpdmlkdWFsIHN1YnR5cGVcbiAgICBmb3IgKGNvbnN0IHQgb2YgY29tcG91bmRUeXBlcykge1xuICAgICAgaWYgKHQudHlwZVJlZiAhPT0gJ3ZvaWQnKSB7XG4gICAgICAgIHQudHlwZVJlZi5vcHRpb25hbCA9IHR5cGVSZWYub3B0aW9uYWw7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb21wb3VuZFR5cGVzLnNvcnQoKGwsIHIpID0+XG4gICAgICBjb21wYXJlU2VyaWFsaXphdGlvbkNsYXNzZXMobC5zZXJpYWxpemF0aW9uQ2xhc3MsIHIuc2VyaWFsaXphdGlvbkNsYXNzKSxcbiAgICApO1xuICB9XG5cbiAgLy8gVGhlIG5leHQgcGFydCBvZiB0aGUgY29udmVyc2lvbiBpcyBsb29rdXAtZGVwZW5kZW50XG4gIGNvbnN0IHR5cGUgPSBsb29rdXAodHlwZVJlZi50eXBlLmZxbik7XG5cbiAgaWYgKHNwZWMuaXNFbnVtVHlwZSh0eXBlKSkge1xuICAgIHJldHVybiBbeyBzZXJpYWxpemF0aW9uQ2xhc3M6IFNlcmlhbGl6YXRpb25DbGFzcy5FbnVtLCB0eXBlUmVmIH1dO1xuICB9XG5cbiAgaWYgKHNwZWMuaXNJbnRlcmZhY2VUeXBlKHR5cGUpICYmIHR5cGUuZGF0YXR5cGUpIHtcbiAgICByZXR1cm4gW3sgc2VyaWFsaXphdGlvbkNsYXNzOiBTZXJpYWxpemF0aW9uQ2xhc3MuU3RydWN0LCB0eXBlUmVmIH1dO1xuICB9XG5cbiAgcmV0dXJuIFt7IHNlcmlhbGl6YXRpb25DbGFzczogU2VyaWFsaXphdGlvbkNsYXNzLlJlZmVyZW5jZVR5cGUsIHR5cGVSZWYgfV07XG59XG5cbmZ1bmN0aW9uIG51bGxBbmRPayh4OiB1bmtub3duLCB0eXBlOiBPcHRpb25hbFZhbHVlT3JWb2lkKTogYm9vbGVhbiB7XG4gIGlmICh4ICE9IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZSAhPT0gJ3ZvaWQnICYmICF0eXBlLm9wdGlvbmFsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEdvdCAndW5kZWZpbmVkJyBmb3Igbm9uLW9wdGlvbmFsIGluc3RhbmNlIG9mICR7SlNPTi5zdHJpbmdpZnkodHlwZSl9YCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRGF0ZSh4OiB1bmtub3duKTogeCBpcyBEYXRlIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiZcbiAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeCkgPT09ICdbb2JqZWN0IERhdGVdJ1xuICApO1xufVxuXG5mdW5jdGlvbiBpc1NjYWxhcih4OiB1bmtub3duKTogeCBpcyBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgeCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHggPT09ICdudW1iZXInIHx8IHR5cGVvZiB4ID09PSAnYm9vbGVhbidcbiAgKTtcbn1cblxuZnVuY3Rpb24gZmxhdE1hcDxULCBVPih4czogVFtdLCBmbjogKHg6IFQpID0+IFVbXSk6IFVbXSB7XG4gIGNvbnN0IHJldCA9IG5ldyBBcnJheTxVPigpO1xuICBmb3IgKGNvbnN0IHggb2YgeHMpIHtcbiAgICByZXQucHVzaCguLi5mbih4KSk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBNYXAgYW4gb2JqZWN0J3MgdmFsdWVzLCBza2lwcGluZyAndW5kZWZpbmVkJyB2YWx1ZXMnXG4gKi9cbmZ1bmN0aW9uIG1hcFZhbHVlcyhcbiAgdmFsdWU6IHVua25vd24sXG4gIGZuOiAodmFsdWU6IGFueSwgZmllbGQ6IHN0cmluZykgPT4gYW55LFxuKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIG9iamVjdCB0eXBlLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gIH1cblxuICBjb25zdCBvdXQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG4gICAgY29uc3Qgd2lyZVZhbHVlID0gZm4odiwgayk7XG4gICAgaWYgKHdpcmVWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgb3V0W2tdID0gd2lyZVZhbHVlO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIHByb3BlcnRpZXNPZihcbiAgdDogc3BlYy5UeXBlLFxuICBsb29rdXA6IFR5cGVMb29rdXAsXG4pOiB7IFtuYW1lOiBzdHJpbmddOiBzcGVjLlByb3BlcnR5IH0ge1xuICBpZiAoIXNwZWMuaXNDbGFzc09ySW50ZXJmYWNlVHlwZSh0KSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGxldCByZXQ6IHsgW25hbWU6IHN0cmluZ106IHNwZWMuUHJvcGVydHkgfSA9IHt9O1xuXG4gIGlmICh0LmludGVyZmFjZXMpIHtcbiAgICBmb3IgKGNvbnN0IGlmYWNlIG9mIHQuaW50ZXJmYWNlcykge1xuICAgICAgcmV0ID0geyAuLi5yZXQsIC4uLnByb3BlcnRpZXNPZihsb29rdXAoaWZhY2UpLCBsb29rdXApIH07XG4gICAgfVxuICB9XG4gIGlmIChzcGVjLmlzQ2xhc3NUeXBlKHQpICYmIHQuYmFzZSkge1xuICAgIHJldCA9IHsgLi4ucmV0LCAuLi5wcm9wZXJ0aWVzT2YobG9va3VwKHQuYmFzZSksIGxvb2t1cCkgfTtcbiAgfVxuXG4gIGZvciAoY29uc3QgcHJvcCBvZiB0LnByb3BlcnRpZXMgPz8gW10pIHtcbiAgICByZXRbcHJvcC5uYW1lXSA9IHByb3A7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIFRlc3RzIHdoZXRoZXIgYSBnaXZlbiB0eXBlIChieSBpdCdzIEZRTikgY2FuIGJlIGFzc2lnbmVkIHRvIGEgbmFtZWQgdHlwZSByZWZlcmVuY2UuXG4gKlxuICogQHBhcmFtIGFjdHVhbFR5cGVGcW4gdGhlIEZRTiBvZiB0aGUgdHlwZSB0aGF0IGlzIGJlaW5nIHRlc3RlZC5cbiAqIEBwYXJhbSByZXF1aXJlZFR5cGUgIHRoZSByZXF1aXJlZCByZWZlcmVuY2UgdHlwZS5cbiAqXG4gKiBAcmV0dXJucyB0cnVlIGlmIGBgcmVxdWlyZWRUeXBlYGAgaXMgYSBzdXBlci10eXBlIChiYXNlIGNsYXNzIG9yIGltcGxlbWVudGVkIGludGVyZmFjZSkgb2YgdGhlIHR5cGUgZGVzaWduYXRlZCBieVxuICogICAgICAgICAgYGBhY3R1YWxUeXBlRnFuYGAuXG4gKi9cbmZ1bmN0aW9uIGlzQXNzaWduYWJsZShcbiAgYWN0dWFsVHlwZUZxbjogc3RyaW5nLFxuICByZXF1aXJlZFR5cGU6IHNwZWMuTmFtZWRUeXBlUmVmZXJlbmNlLFxuICBsb29rdXA6IFR5cGVMb29rdXAsXG4pOiBib29sZWFuIHtcbiAgLy8gVGhlIGVtcHR5IG9iamVjdCBpcyBhc3NpZ25hYmxlIHRvIGV2ZXJ5dGhpbmdcbiAgaWYgKGFjdHVhbFR5cGVGcW4gPT09IEVNUFRZX09CSkVDVF9GUU4pIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChyZXF1aXJlZFR5cGUuZnFuID09PSBhY3R1YWxUeXBlRnFuKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3QgYWN0dWFsVHlwZSA9IGxvb2t1cChhY3R1YWxUeXBlRnFuKTtcbiAgaWYgKHNwZWMuaXNDbGFzc1R5cGUoYWN0dWFsVHlwZSkpIHtcbiAgICBpZiAoXG4gICAgICBhY3R1YWxUeXBlLmJhc2UgJiZcbiAgICAgIGlzQXNzaWduYWJsZShhY3R1YWxUeXBlLmJhc2UsIHJlcXVpcmVkVHlwZSwgbG9va3VwKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIGlmIChzcGVjLmlzQ2xhc3NPckludGVyZmFjZVR5cGUoYWN0dWFsVHlwZSkgJiYgYWN0dWFsVHlwZS5pbnRlcmZhY2VzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGFjdHVhbFR5cGUuaW50ZXJmYWNlcy5maW5kKChpZmFjZSkgPT5cbiAgICAgICAgaXNBc3NpZ25hYmxlKGlmYWNlLCByZXF1aXJlZFR5cGUsIGxvb2t1cCksXG4gICAgICApICE9IG51bGxcbiAgICApO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVSZXF1aXJlZFByb3BzKFxuICBhY3R1YWxQcm9wczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSxcbiAgdHlwZU5hbWU6IHN0cmluZyxcbiAgc3BlY1Byb3BzOiB7IFtrZXk6IHN0cmluZ106IHNwZWMuUHJvcGVydHkgfSxcbikge1xuICAvLyBDaGVjayBmb3IgcmVxdWlyZWQgcHJvcGVydGllc1xuICBjb25zdCBtaXNzaW5nUmVxdWlyZWRQcm9wcyA9IE9iamVjdC5rZXlzKHNwZWNQcm9wcylcbiAgICAuZmlsdGVyKChuYW1lKSA9PiAhc3BlY1Byb3BzW25hbWVdLm9wdGlvbmFsKVxuICAgIC5maWx0ZXIoKG5hbWUpID0+ICEobmFtZSBpbiBhY3R1YWxQcm9wcykpO1xuXG4gIGlmIChtaXNzaW5nUmVxdWlyZWRQcm9wcy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYE1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydGllcyBmb3IgJHt0eXBlTmFtZX06ICR7bWlzc2luZ1JlcXVpcmVkUHJvcHMuam9pbihcbiAgICAgICAgJywgJyxcbiAgICAgICl9YCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGFjdHVhbFByb3BzO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlU2VyaWFsaXphdGlvbkNsYXNzZXMoXG4gIGw6IFNlcmlhbGl6YXRpb25DbGFzcyxcbiAgcjogU2VyaWFsaXphdGlvbkNsYXNzLFxuKTogbnVtYmVyIHtcbiAgY29uc3Qgb3JkZXIgPSBbXG4gICAgU2VyaWFsaXphdGlvbkNsYXNzLlZvaWQsXG4gICAgU2VyaWFsaXphdGlvbkNsYXNzLkRhdGUsXG4gICAgU2VyaWFsaXphdGlvbkNsYXNzLlNjYWxhcixcbiAgICBTZXJpYWxpemF0aW9uQ2xhc3MuSnNvbixcbiAgICBTZXJpYWxpemF0aW9uQ2xhc3MuRW51bSxcbiAgICBTZXJpYWxpemF0aW9uQ2xhc3MuQXJyYXksXG4gICAgU2VyaWFsaXphdGlvbkNsYXNzLk1hcCxcbiAgICBTZXJpYWxpemF0aW9uQ2xhc3MuU3RydWN0LFxuICAgIFNlcmlhbGl6YXRpb25DbGFzcy5SZWZlcmVuY2VUeXBlLFxuICAgIFNlcmlhbGl6YXRpb25DbGFzcy5BbnksXG4gIF07XG4gIHJldHVybiBvcmRlci5pbmRleE9mKGwpIC0gb3JkZXIuaW5kZXhPZihyKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYG9iamAgbXVzdCBiZSBwYXNzZWQgYnktcmVmZXJlbmNlIG9yIGlmIGJ5LXZhbHVlIGlzIGFjY2VwdGFibGUuIEZvciBleGFtcGxlLFxuICogb2JqZWN0cyB3aXRoIG1ldGhvZHMsIG9yIGR5bmFtaWMgZ2V0dGVycyAob3Igc2V0dGVycykgc2hvdWxkIGJlIHBhc3NlZCBieS1yZWZlcmVuY2UgYXMgYSBtYXR0ZXJcbiAqIG9mIHNlY3VyaXR5LiBUaGUgYmVoYXZpb3IgaW4gbm9uLUpTIHJ1bnRpbWVzIGNvdWxkIG90aGVyd2lzZSBkaWZmZXIgZnJvbSB0aGF0IGluIHB1cmUgSlMgKGlmXG4gKiBnZXR0ZXJzIGFyZSBub3Qgc3RhYmxlLCBldGMuLi4pLlxuICpcbiAqIEBwYXJhbSBvYmogdGhlIG9iamVjdCB0byBiZSB0ZXN0ZWQuXG4gKlxuICogQHJldHVybnMgdHJ1ZSBpZiBgb2JqYCBtdXN0IGJlIHBhc3NlZCBieS1yZWZlcmVuY2UuXG4gKi9cbmZ1bmN0aW9uIGlzQnlSZWZlcmVuY2VPbmx5KG9iajogYW55KTogYm9vbGVhbiB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsZXQgY3VyciA9IG9iajtcbiAgLy8gQ3Jhd2wgdXAgdGhlIHByb3RvdHlwZSBjaGFpbiB0byBsb29rIGZvciBkeW5hbWljIHByb3BlcnRpZXMgb3IgbWV0aG9kcy5cbiAgZG8ge1xuICAgIGZvciAoY29uc3QgcHJvcCBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjdXJyKSkge1xuICAgICAgY29uc3QgZGVzY3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGN1cnIsIHByb3ApO1xuICAgICAgaWYgKFxuICAgICAgICBkZXNjcj8uZ2V0ICE9IG51bGwgfHxcbiAgICAgICAgZGVzY3I/LnNldCAhPSBudWxsIHx8XG4gICAgICAgIHR5cGVvZiBkZXNjcj8udmFsdWUgPT09ICdmdW5jdGlvbidcbiAgICAgICkge1xuICAgICAgICAvLyBQcm9wZXJ0eSBoYXMgYSBkeW5hbWljIGdldHRlciwgc2V0dGVyIG9yIGlzIGEgY29uc3RydWN0b3IvbWV0aG9kLCBzbyBieS1yZWYgcmVxdWlyZWQhXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBFbmQgd2hlbiB0aGUgcGFyZW50IHByb3RvIGlzIGBPYmplY3RgLCB3aGljaCBoYXMgbm8gcGFyZW50IHByb3RvIGl0c2VsZi5cbiAgfSB3aGlsZSAoT2JqZWN0LmdldFByb3RvdHlwZU9mKChjdXJyID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGN1cnIpKSkgIT0gbnVsbCk7XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jsii/kernel",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.54.0",
|
|
4
4
|
"description": "kernel for jsii execution environment",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": {
|
|
@@ -31,24 +31,24 @@
|
|
|
31
31
|
"package": "package-js"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@jsii/spec": "^1.
|
|
34
|
+
"@jsii/spec": "^1.54.0",
|
|
35
35
|
"fs-extra": "^9.1.0",
|
|
36
36
|
"tar": "^6.1.11"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@scope/jsii-calc-base": "^1.
|
|
40
|
-
"@scope/jsii-calc-lib": "^1.
|
|
39
|
+
"@scope/jsii-calc-base": "^1.54.0",
|
|
40
|
+
"@scope/jsii-calc-lib": "^1.54.0",
|
|
41
41
|
"@types/fs-extra": "^9.0.13",
|
|
42
|
-
"@types/jest": "^27.0
|
|
43
|
-
"@types/node": "^12.20.
|
|
42
|
+
"@types/jest": "^27.4.0",
|
|
43
|
+
"@types/node": "^12.20.43",
|
|
44
44
|
"@types/tar": "^6.1.1",
|
|
45
|
-
"eslint": "^8.
|
|
46
|
-
"jest": "^27.
|
|
45
|
+
"eslint": "^8.8.0",
|
|
46
|
+
"jest": "^27.5.1",
|
|
47
47
|
"jest-expect-message": "^1.0.2",
|
|
48
|
-
"jsii-build-tools": "^1.
|
|
48
|
+
"jsii-build-tools": "^1.54.0",
|
|
49
49
|
"jsii-calc": "^3.20.120",
|
|
50
50
|
"prettier": "^2.5.1",
|
|
51
|
-
"ts-jest": "^27.1.
|
|
51
|
+
"ts-jest": "^27.1.3",
|
|
52
52
|
"typescript": "~3.9.10"
|
|
53
53
|
}
|
|
54
54
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const objects_1 = require("../lib/objects");
|
|
4
|
+
const mockResolve = jest.fn();
|
|
5
|
+
test('can spread registered objects without consequences', () => {
|
|
6
|
+
const subject = new objects_1.ObjectTable(mockResolve);
|
|
7
|
+
const obj = { foo: 'bar', baz: 1337 };
|
|
8
|
+
const objRef = subject.registerObject(obj, 'Object');
|
|
9
|
+
const copy = { ...obj, foo: undefined, baz: undefined };
|
|
10
|
+
const copyRef = subject.registerObject(copy, 'Object');
|
|
11
|
+
expect(objRef).not.toEqual(copyRef);
|
|
12
|
+
});
|
|
13
|
+
test('registered objects have clean JSON.Stringify', () => {
|
|
14
|
+
const subject = new objects_1.ObjectTable(mockResolve);
|
|
15
|
+
const obj = { foo: 'bar', baz: 1337 };
|
|
16
|
+
const expected = JSON.stringify(obj);
|
|
17
|
+
subject.registerObject(obj, 'Object');
|
|
18
|
+
expect(JSON.stringify(obj)).toEqual(expected);
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0cy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsib2JqZWN0cy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNENBQTZDO0FBRTdDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUU5QixJQUFJLENBQUMsb0RBQW9ELEVBQUUsR0FBRyxFQUFFO0lBQzlELE1BQU0sT0FBTyxHQUFHLElBQUkscUJBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUU3QyxNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3RDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRXJELE1BQU0sSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDeEQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFdkQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdEMsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsOENBQThDLEVBQUUsR0FBRyxFQUFFO0lBQ3hELE1BQU0sT0FBTyxHQUFHLElBQUkscUJBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUU3QyxNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3RDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFckMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFdEMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDaEQsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYmplY3RUYWJsZSB9IGZyb20gJy4uL2xpYi9vYmplY3RzJztcblxuY29uc3QgbW9ja1Jlc29sdmUgPSBqZXN0LmZuKCk7XG5cbnRlc3QoJ2NhbiBzcHJlYWQgcmVnaXN0ZXJlZCBvYmplY3RzIHdpdGhvdXQgY29uc2VxdWVuY2VzJywgKCkgPT4ge1xuICBjb25zdCBzdWJqZWN0ID0gbmV3IE9iamVjdFRhYmxlKG1vY2tSZXNvbHZlKTtcblxuICBjb25zdCBvYmogPSB7IGZvbzogJ2JhcicsIGJhejogMTMzNyB9O1xuICBjb25zdCBvYmpSZWYgPSBzdWJqZWN0LnJlZ2lzdGVyT2JqZWN0KG9iaiwgJ09iamVjdCcpO1xuXG4gIGNvbnN0IGNvcHkgPSB7IC4uLm9iaiwgZm9vOiB1bmRlZmluZWQsIGJhejogdW5kZWZpbmVkIH07XG4gIGNvbnN0IGNvcHlSZWYgPSBzdWJqZWN0LnJlZ2lzdGVyT2JqZWN0KGNvcHksICdPYmplY3QnKTtcblxuICBleHBlY3Qob2JqUmVmKS5ub3QudG9FcXVhbChjb3B5UmVmKTtcbn0pO1xuXG50ZXN0KCdyZWdpc3RlcmVkIG9iamVjdHMgaGF2ZSBjbGVhbiBKU09OLlN0cmluZ2lmeScsICgpID0+IHtcbiAgY29uc3Qgc3ViamVjdCA9IG5ldyBPYmplY3RUYWJsZShtb2NrUmVzb2x2ZSk7XG5cbiAgY29uc3Qgb2JqID0geyBmb286ICdiYXInLCBiYXo6IDEzMzcgfTtcbiAgY29uc3QgZXhwZWN0ZWQgPSBKU09OLnN0cmluZ2lmeShvYmopO1xuXG4gIHN1YmplY3QucmVnaXN0ZXJPYmplY3Qob2JqLCAnT2JqZWN0Jyk7XG5cbiAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KG9iaikpLnRvRXF1YWwoZXhwZWN0ZWQpO1xufSk7XG4iXX0=
|