Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

tsickle

Package Overview
Dependencies
Maintainers
2
Versions
65
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

tsickle - npm Package Compare versions

Comparing version 0.29.0 to 0.30.0

src/enum_transformer.d.ts

12

package.json
{
"name": "tsickle",
"version": "0.29.0",
"version": "0.30.0",
"description": "Transpile TypeScript code to JavaScript with Closure annotations.",

@@ -15,2 +15,3 @@ "main": "src/tsickle.js",

"dependencies": {
"jasmine-diff": "^0.1.3",
"minimist": "^1.2.0",

@@ -25,6 +26,4 @@ "mkdirp": "^0.5.1",

"devDependencies": {
"@types/chai": "4.1.2",
"@types/diff": "3.2.2",
"@types/glob": "5.0.35",
"@types/google-closure-compiler": "0.0.18",
"@types/jasmine": "2.8.6",

@@ -34,6 +33,4 @@ "@types/minimatch": "3.0.3",

"@types/mkdirp": "0.5.2",
"@types/node": "6.0.102",
"@types/node": "^10.3.3",
"@types/source-map-support": "0.4.0",
"chai": "4.1.2",
"chai-diff": "1.0.1",
"clang-format": "1.2.2",

@@ -50,3 +47,4 @@ "diff": "3.5.0",

"tslint": "5.9.1",
"typescript": "2.8.3"
"tsutils": "^2.27.1",
"typescript": "2.9.2"
},

@@ -53,0 +51,0 @@ "scripts": {

/// <amd-module name="tsickle/src/cli_support" />
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
/// <amd-module name="tsickle/src/cli_support" />
export declare function pathToModuleName(rootModulePath: string, context: string, fileName: string): string;
/// <amd-module name="tsickle/src/decorator_downlevel_transformer" />
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
/// <amd-module name="tsickle/src/decorator_downlevel_transformer" />
import * as ts from './typescript';

@@ -3,0 +11,0 @@ /**

@@ -9,2 +9,3 @@ /// <amd-module name="tsickle/src/decorators" />

*/
/// <amd-module name="tsickle/src/decorators" />
import * as ts from './typescript';

@@ -11,0 +12,0 @@ /**

@@ -68,2 +68,3 @@ /**

return getDecoratorDeclarations(decorator, typeChecker).some(function (declaration) {
var e_1, _a;
var range = ts.getLeadingCommentRanges(declaration.getFullText(), 0);

@@ -75,3 +76,3 @@ if (!range) {

for (var range_1 = __values(range), range_1_1 = range_1.next(); !range_1_1.done; range_1_1 = range_1.next()) {
var _a = range_1_1.value, pos = _a.pos, end = _a.end;
var _b = range_1_1.value, pos = _b.pos, end = _b.end;
if (/@ExportDecoratedItems\b/.test(declaration.getFullText().substring(pos, end))) {

@@ -85,3 +86,3 @@ return true;

try {
if (range_1_1 && !range_1_1.done && (_b = range_1.return)) _b.call(range_1);
if (range_1_1 && !range_1_1.done && (_a = range_1.return)) _a.call(range_1);
}

@@ -91,6 +92,5 @@ finally { if (e_1) throw e_1.error; }

return false;
var e_1, _b;
});
}
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUVILDJDQUFtQztJQUVuQzs7T0FFRztJQUNILGtDQUNJLFNBQXVCLEVBQUUsV0FBMkI7UUFDdEQsNkVBQTZFO1FBQzdFLElBQUksSUFBSSxHQUFZLFNBQVMsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUU7WUFDN0MsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUU7Z0JBQ3ZGLElBQUksR0FBSSxJQUF5QyxDQUFDLFVBQVUsQ0FBQzthQUM5RDtpQkFBTTtnQkFDTCx1REFBdUQ7Z0JBQ3ZELE9BQU8sRUFBRSxDQUFDO2FBQ1g7U0FDRjtRQUVELElBQUksTUFBTSxHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3ZCLElBQUksTUFBTSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRTtZQUN2QyxNQUFNLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsT0FBTyxNQUFNLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFuQkQsNERBbUJDO0lBRUQ7OztPQUdHO0lBQ0gsK0JBQXNDLElBQWEsRUFBRSxXQUEyQjtRQUM5RSxPQUFPLElBQUksQ0FBQyxVQUFVO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQUEsU0FBUyxJQUFJLE9BQUEsb0JBQW9CLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxFQUE1QyxDQUE0QyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUhELHNEQUdDO0lBRUQ7O09BRUc7SUFDSCw4QkFBOEIsU0FBdUIsRUFBRSxXQUEyQjtRQUNoRixPQUFPLHdCQUF3QixDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQSxXQUFXO1lBQ3RFLElBQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDVixPQUFPLEtBQUssQ0FBQzthQUNkOztnQkFDRCxLQUF5QixJQUFBLFVBQUEsU0FBQSxLQUFLLENBQUEsNEJBQUE7b0JBQW5CLElBQUEsb0JBQVUsRUFBVCxZQUFHLEVBQUUsWUFBRztvQkFDbEIsSUFBSSx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRTt3QkFDakYsT0FBTyxJQUFJLENBQUM7cUJBQ2I7aUJBQ0Y7Ozs7Ozs7OztZQUNELE9BQU8sS0FBSyxDQUFDOztRQUNmLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAnLi90eXBlc2NyaXB0JztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkZWNsYXJhdGlvbnMgZm9yIHRoZSBnaXZlbiBkZWNvcmF0b3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWNvcmF0b3JEZWNsYXJhdGlvbnMoXG4gICAgZGVjb3JhdG9yOiB0cy5EZWNvcmF0b3IsIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlcik6IHRzLkRlY2xhcmF0aW9uW10ge1xuICAvLyBXYWxrIGRvd24gdGhlIGV4cHJlc3Npb24gdG8gZmluZCB0aGUgaWRlbnRpZmllciBvZiB0aGUgZGVjb3JhdG9yIGZ1bmN0aW9uLlxuICBsZXQgbm9kZTogdHMuTm9kZSA9IGRlY29yYXRvcjtcbiAgd2hpbGUgKG5vZGUua2luZCAhPT0gdHMuU3ludGF4S2luZC5JZGVudGlmaWVyKSB7XG4gICAgaWYgKG5vZGUua2luZCA9PT0gdHMuU3ludGF4S2luZC5EZWNvcmF0b3IgfHwgbm9kZS5raW5kID09PSB0cy5TeW50YXhLaW5kLkNhbGxFeHByZXNzaW9uKSB7XG4gICAgICBub2RlID0gKG5vZGUgYXMgdHMuRGVjb3JhdG9yIHwgdHMuQ2FsbEV4cHJlc3Npb24pLmV4cHJlc3Npb247XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFdlIGRvIG5vdCBrbm93IGhvdyB0byBoYW5kbGUgdGhpcyB0eXBlIG9mIGRlY29yYXRvci5cbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICBsZXQgZGVjU3ltID0gdHlwZUNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihub2RlKTtcbiAgaWYgKCFkZWNTeW0pIHJldHVybiBbXTtcbiAgaWYgKGRlY1N5bS5mbGFncyAmIHRzLlN5bWJvbEZsYWdzLkFsaWFzKSB7XG4gICAgZGVjU3ltID0gdHlwZUNoZWNrZXIuZ2V0QWxpYXNlZFN5bWJvbChkZWNTeW0pO1xuICB9XG4gIHJldHVybiBkZWNTeW0uZ2V0RGVjbGFyYXRpb25zKCkgfHwgW107XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIG5vZGUgaGFzIGFuIGV4cG9ydGluZyBkZWNvcmF0b3IgIChpLmUuLCBhIGRlY29yYXRvciB3aXRoIEBFeHBvcnREZWNvcmF0ZWRJdGVtc1xuICogaW4gaXRzIEpTRG9jKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0V4cG9ydGluZ0RlY29yYXRvcihub2RlOiB0cy5Ob2RlLCB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIpIHtcbiAgcmV0dXJuIG5vZGUuZGVjb3JhdG9ycyAmJlxuICAgICAgbm9kZS5kZWNvcmF0b3JzLnNvbWUoZGVjb3JhdG9yID0+IGlzRXhwb3J0aW5nRGVjb3JhdG9yKGRlY29yYXRvciwgdHlwZUNoZWNrZXIpKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGRlY29yYXRvciBoYXMgYW4gQEV4cG9ydERlY29yYXRlZEl0ZW1zIGRpcmVjdGl2ZSBpbiBpdHMgSlNEb2MuXG4gKi9cbmZ1bmN0aW9uIGlzRXhwb3J0aW5nRGVjb3JhdG9yKGRlY29yYXRvcjogdHMuRGVjb3JhdG9yLCB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIpIHtcbiAgcmV0dXJuIGdldERlY29yYXRvckRlY2xhcmF0aW9ucyhkZWNvcmF0b3IsIHR5cGVDaGVja2VyKS5zb21lKGRlY2xhcmF0aW9uID0+IHtcbiAgICBjb25zdCByYW5nZSA9IHRzLmdldExlYWRpbmdDb21tZW50UmFuZ2VzKGRlY2xhcmF0aW9uLmdldEZ1bGxUZXh0KCksIDApO1xuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB7cG9zLCBlbmR9IG9mIHJhbmdlKSB7XG4gICAgICBpZiAoL0BFeHBvcnREZWNvcmF0ZWRJdGVtc1xcYi8udGVzdChkZWNsYXJhdGlvbi5nZXRGdWxsVGV4dCgpLnN1YnN0cmluZyhwb3MsIGVuZCkpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUVILDJDQUFtQztJQUVuQzs7T0FFRztJQUNILGtDQUNJLFNBQXVCLEVBQUUsV0FBMkI7UUFDdEQsNkVBQTZFO1FBQzdFLElBQUksSUFBSSxHQUFZLFNBQVMsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUU7WUFDN0MsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUU7Z0JBQ3ZGLElBQUksR0FBSSxJQUF5QyxDQUFDLFVBQVUsQ0FBQzthQUM5RDtpQkFBTTtnQkFDTCx1REFBdUQ7Z0JBQ3ZELE9BQU8sRUFBRSxDQUFDO2FBQ1g7U0FDRjtRQUVELElBQUksTUFBTSxHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3ZCLElBQUksTUFBTSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRTtZQUN2QyxNQUFNLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsT0FBTyxNQUFNLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFuQkQsNERBbUJDO0lBRUQ7OztPQUdHO0lBQ0gsK0JBQXNDLElBQWEsRUFBRSxXQUEyQjtRQUM5RSxPQUFPLElBQUksQ0FBQyxVQUFVO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQUEsU0FBUyxJQUFJLE9BQUEsb0JBQW9CLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxFQUE1QyxDQUE0QyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUhELHNEQUdDO0lBRUQ7O09BRUc7SUFDSCw4QkFBOEIsU0FBdUIsRUFBRSxXQUEyQjtRQUNoRixPQUFPLHdCQUF3QixDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQSxXQUFXOztZQUN0RSxJQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ1YsT0FBTyxLQUFLLENBQUM7YUFDZDs7Z0JBQ0QsS0FBeUIsSUFBQSxVQUFBLFNBQUEsS0FBSyxDQUFBLDRCQUFBLCtDQUFFO29CQUFyQixJQUFBLG9CQUFVLEVBQVQsWUFBRyxFQUFFLFlBQUc7b0JBQ2xCLElBQUkseUJBQXlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUU7d0JBQ2pGLE9BQU8sSUFBSSxDQUFDO3FCQUNiO2lCQUNGOzs7Ozs7Ozs7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAnLi90eXBlc2NyaXB0JztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkZWNsYXJhdGlvbnMgZm9yIHRoZSBnaXZlbiBkZWNvcmF0b3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWNvcmF0b3JEZWNsYXJhdGlvbnMoXG4gICAgZGVjb3JhdG9yOiB0cy5EZWNvcmF0b3IsIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlcik6IHRzLkRlY2xhcmF0aW9uW10ge1xuICAvLyBXYWxrIGRvd24gdGhlIGV4cHJlc3Npb24gdG8gZmluZCB0aGUgaWRlbnRpZmllciBvZiB0aGUgZGVjb3JhdG9yIGZ1bmN0aW9uLlxuICBsZXQgbm9kZTogdHMuTm9kZSA9IGRlY29yYXRvcjtcbiAgd2hpbGUgKG5vZGUua2luZCAhPT0gdHMuU3ludGF4S2luZC5JZGVudGlmaWVyKSB7XG4gICAgaWYgKG5vZGUua2luZCA9PT0gdHMuU3ludGF4S2luZC5EZWNvcmF0b3IgfHwgbm9kZS5raW5kID09PSB0cy5TeW50YXhLaW5kLkNhbGxFeHByZXNzaW9uKSB7XG4gICAgICBub2RlID0gKG5vZGUgYXMgdHMuRGVjb3JhdG9yIHwgdHMuQ2FsbEV4cHJlc3Npb24pLmV4cHJlc3Npb247XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFdlIGRvIG5vdCBrbm93IGhvdyB0byBoYW5kbGUgdGhpcyB0eXBlIG9mIGRlY29yYXRvci5cbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICBsZXQgZGVjU3ltID0gdHlwZUNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihub2RlKTtcbiAgaWYgKCFkZWNTeW0pIHJldHVybiBbXTtcbiAgaWYgKGRlY1N5bS5mbGFncyAmIHRzLlN5bWJvbEZsYWdzLkFsaWFzKSB7XG4gICAgZGVjU3ltID0gdHlwZUNoZWNrZXIuZ2V0QWxpYXNlZFN5bWJvbChkZWNTeW0pO1xuICB9XG4gIHJldHVybiBkZWNTeW0uZ2V0RGVjbGFyYXRpb25zKCkgfHwgW107XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIG5vZGUgaGFzIGFuIGV4cG9ydGluZyBkZWNvcmF0b3IgIChpLmUuLCBhIGRlY29yYXRvciB3aXRoIEBFeHBvcnREZWNvcmF0ZWRJdGVtc1xuICogaW4gaXRzIEpTRG9jKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0V4cG9ydGluZ0RlY29yYXRvcihub2RlOiB0cy5Ob2RlLCB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIpIHtcbiAgcmV0dXJuIG5vZGUuZGVjb3JhdG9ycyAmJlxuICAgICAgbm9kZS5kZWNvcmF0b3JzLnNvbWUoZGVjb3JhdG9yID0+IGlzRXhwb3J0aW5nRGVjb3JhdG9yKGRlY29yYXRvciwgdHlwZUNoZWNrZXIpKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGRlY29yYXRvciBoYXMgYW4gQEV4cG9ydERlY29yYXRlZEl0ZW1zIGRpcmVjdGl2ZSBpbiBpdHMgSlNEb2MuXG4gKi9cbmZ1bmN0aW9uIGlzRXhwb3J0aW5nRGVjb3JhdG9yKGRlY29yYXRvcjogdHMuRGVjb3JhdG9yLCB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIpIHtcbiAgcmV0dXJuIGdldERlY29yYXRvckRlY2xhcmF0aW9ucyhkZWNvcmF0b3IsIHR5cGVDaGVja2VyKS5zb21lKGRlY2xhcmF0aW9uID0+IHtcbiAgICBjb25zdCByYW5nZSA9IHRzLmdldExlYWRpbmdDb21tZW50UmFuZ2VzKGRlY2xhcmF0aW9uLmdldEZ1bGxUZXh0KCksIDApO1xuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB7cG9zLCBlbmR9IG9mIHJhbmdlKSB7XG4gICAgICBpZiAoL0BFeHBvcnREZWNvcmF0ZWRJdGVtc1xcYi8udGVzdChkZWNsYXJhdGlvbi5nZXRGdWxsVGV4dCgpLnN1YnN0cmluZyhwb3MsIGVuZCkpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xufVxuIl19
/// <amd-module name="tsickle/src/fileoverview_comment_transformer" />
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
/// <amd-module name="tsickle/src/fileoverview_comment_transformer" />
import * as ts from './typescript';

@@ -3,0 +11,0 @@ /**

/// <amd-module name="tsickle/src/googmodule" />
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
/// <amd-module name="tsickle/src/googmodule" />
import { ModulesManifest } from './modules_manifest';

@@ -37,6 +45,6 @@ import * as ts from './typescript';

*/
export declare function resolveIndexShorthand(host: {
export declare function resolveIndexShorthand({ options, host }: {
options: ts.CompilerOptions;
host: ts.ModuleResolutionHost;
}, fileName: string, imported: string): string;
}, pathOfImportingFile: string, imported: string): string;
/**

@@ -43,0 +51,0 @@ * commonJsToGoogmoduleTransformer returns a transformer factory that converts TypeScript's CommonJS

/// <amd-module name="tsickle/src/jsdoc" />
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
/// <amd-module name="tsickle/src/jsdoc" />
/**
* TypeScript has an API for JSDoc already, but it's not exposed.

@@ -61,2 +69,4 @@ * https://github.com/Microsoft/TypeScript/issues/7393

} | null;
/** Tags that conflict with \@type in Closure Compiler (e.g. \@param). */
export declare const TAGS_CONFLICTING_WITH_TYPE: Set<string>;
/** Serializes a Comment out to a string, but does not include the start and end comment tokens. */

@@ -63,0 +73,0 @@ export declare function toStringWithoutStartEnd(tags: Tag[], escapeExtraTags?: Set<string>): string;

@@ -141,2 +141,3 @@ /**

function parseContents(commentText) {
var e_1, _a, _b, _c;
// Make sure we have proper line endings before parsing on Windows.

@@ -154,3 +155,3 @@ commentText = util_1.normalizeLineEndings(commentText);

if (match) {
var _a = __read(match, 3), _ = _a[0], tagName = _a[1], text = _a[2];
var _d = __read(match, 3), _ = _d[0], tagName = _d[1], text = _d[2];
if (tagName === 'returns') {

@@ -215,3 +216,3 @@ // A synonym for 'return'.

try {
if (lines_1_1 && !lines_1_1.done && (_d = lines_1.return)) _d.call(lines_1);
if (lines_1_1 && !lines_1_1.done && (_a = lines_1.return)) _a.call(lines_1);
}

@@ -224,3 +225,2 @@ finally { if (e_1) throw e_1.error; }

return { tags: tags };
var e_1, _d, _b, _c;
}

@@ -275,2 +275,4 @@ exports.parseContents = parseContents;

var SINGLETON_TAGS = new Set(['deprecated']);
/** Tags that conflict with \@type in Closure Compiler (e.g. \@param). */
exports.TAGS_CONFLICTING_WITH_TYPE = new Set(['param', 'return']);
/** Serializes a Comment out to a string, but does not include the start and end comment tokens. */

@@ -290,2 +292,3 @@ function toStringWithoutStartEnd(tags, escapeExtraTags) {

if (escapeExtraTags === void 0) { escapeExtraTags = new Set(); }
var e_2, _a;
if (tags.length === 0)

@@ -327,6 +330,6 @@ return '';

return out;
var e_2, _a;
}
/** Merges multiple tags (of the same tagName type) into a single unified tag. */
function merge(tags) {
var e_3, _a;
var tagNames = new Set();

@@ -380,6 +383,5 @@ var parameterNames = new Set();

return tag;
var e_3, _a;
}
exports.merge = merge;
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNkb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvanNkb2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUVILHlDQUE0QztJQXNDNUM7Ozs7OztPQU1HO0lBQ0gsSUFBTSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztRQUNuQyxVQUFVLEVBQU8sVUFBVTtRQUMzQixRQUFRLEVBQVMsdUJBQXVCO1FBQ3hDLE9BQU8sRUFBVSxVQUFVO1FBQzNCLGFBQWEsRUFBSSxXQUFXO1FBQzVCLFFBQVEsRUFBUyxZQUFZO1FBQzdCLE1BQU0sRUFBVyxNQUFNO1FBQ3ZCLFVBQVUsRUFBTyxTQUFTO1FBQzFCLGFBQWEsRUFBSSxNQUFNO1FBQ3ZCLFFBQVEsRUFBUyxRQUFRO1FBQ3pCLFNBQVMsRUFBUSxTQUFTO1FBQzFCLGNBQWMsRUFBRyxPQUFPO1FBQ3hCLGVBQWUsRUFBRSxtQkFBbUI7UUFDcEMsUUFBUSxFQUFTLElBQUk7UUFDckIsYUFBYSxFQUFJLFFBQVE7UUFDekIsWUFBWSxFQUFLLGNBQWM7UUFDL0IsWUFBWSxFQUFLLFdBQVc7UUFDNUIsY0FBYyxFQUFHLGNBQWM7UUFDL0IsZUFBZSxFQUFFLHNCQUFzQjtRQUN2QyxPQUFPLEVBQVUsU0FBUztRQUMxQixNQUFNLEVBQVcsU0FBUztRQUMxQixVQUFVLEVBQU8sU0FBUztRQUMxQixNQUFNLEVBQVcsVUFBVTtRQUMzQixTQUFTLEVBQVEsWUFBWTtRQUM3QixXQUFXLEVBQU0sZUFBZTtRQUNoQyxVQUFVLEVBQU8sT0FBTztRQUN4QixTQUFTLEVBQVEsT0FBTztRQUN4QixhQUFhLEVBQUksaUJBQWlCO1FBQ2xDLFVBQVUsRUFBTyxhQUFhO1FBQzlCLFNBQVMsRUFBUSxXQUFXO1FBQzVCLFFBQVEsRUFBUyxRQUFRO1FBQ3pCLFlBQVksRUFBSyxVQUFVO1FBQzNCLFFBQVEsRUFB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Qzs7SUFDYixDQUFDO0lBbENELHNCQWtDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtub3JtYWxpemVMaW5lRW5kaW5nc30gZnJvbSAnLi91dGlsJztcblxuLyoqXG4gKiBUeXBlU2NyaXB0IGhhcyBhbiBBUEkgZm9yIEpTRG9jIGFscmVhZHksIGJ1dCBpdCdzIG5vdCBleHBvc2VkLlxuICogaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy83MzkzXG4gKiBGb3Igbm93IHdlIGNyZWF0ZSB0eXBlcyB0aGF0IGFyZSBzaW1pbGFyIHRvIHRoZWlycyBzbyB0aGF0IG1pZ3JhdGluZ1xuICogdG8gdGhlaXIgQVBJIHdpbGwgYmUgZWFzaWVyLiAgU2VlIGUuZy4gdHMuSlNEb2NUYWcgYW5kIHRzLkpTRG9jQ29tbWVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWcge1xuICAvKipcbiAgICogdGFnTmFtZSBpcyBlLmcuIFwicGFyYW1cIiBpbiBhbiBAcGFyYW0gZGVjbGFyYXRpb24uICBJdCBpcyB0aGUgZW1wdHkgc3RyaW5nXG4gICAqIGZvciB0aGUgcGxhaW4gdGV4dCBkb2N1bWVudGF0aW9uIHRoYXQgb2NjdXJzIGJlZm9yZSBhbnkgQGZvbyBsaW5lcy5cbiAgICovXG4gIHRhZ05hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIHBhcmFtZXRlck5hbWUgaXMgdGhlIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIsIGUuZy4gXCJmb29cIlxuICAgKiBpbiBgXFxAcGFyYW0gZm9vIFRoZSBmb28gcGFyYW1gXG4gICAqL1xuICBwYXJhbWV0ZXJOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgYSBKU0RvYyBcXEBwYXJhbSwgXFxAdHlwZSBldGMgdGFnLCByZW5kZXJlZCBpbiBjdXJseSBicmFjZXMuXG4gICAqIENhbiBhbHNvIGhvbGQgdGhlIHR5cGUgb2YgYW4gXFxAc3VwcHJlc3MuXG4gICAqL1xuICB0eXBlPzogc3RyaW5nO1xuICAvKiogb3B0aW9uYWwgaXMgdHJ1ZSBmb3Igb3B0aW9uYWwgZnVuY3Rpb24gcGFyYW1ldGVycy4gKi9cbiAgb3B0aW9uYWw/OiBib29sZWFuO1xuICAvKiogcmVzdFBhcmFtIGlzIHRydWUgZm9yIFwiLi4ueDogZm9vW11cIiBmdW5jdGlvbiBwYXJhbWV0ZXJzLiAqL1xuICByZXN0UGFyYW0/OiBib29sZWFuO1xuICAvKipcbiAgICogZGVzdHJ1Y3R1cmluZyBpcyB0cnVlIGZvciBkZXN0cnVjdHVyaW5nIGJpbmQgcGFyYW1ldGVycywgd2hpY2ggcmVxdWlyZVxuICAgKiBub24tbnVsbCBhcmd1bWVudHMgb24gdGhlIENsb3N1cmUgc2lkZS4gIENhbiBsaWtlbHkgcmVtb3ZlIHRoaXNcbiAgICogb25jZSBUeXBlU2NyaXB0IG51bGxhYmxlIHR5cGVzIGFyZSBhdmFpbGFibGUuXG4gICAqL1xuICBkZXN0cnVjdHVyaW5nPzogYm9vbGVhbjtcbiAgLyoqIEFueSByZW1haW5pbmcgdGV4dCBvbiB0aGUgdGFnLCBlLmcuIHRoZSBkZXNjcmlwdGlvbi4gKi9cbiAgdGV4dD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIGxpc3Qgb2YgYWxsIEpTRG9jIHRhZ3MgYWxsb3dlZCBieSB0aGUgQ2xvc3VyZSBjb21waWxlci5cbiAqIFRoZSBwdWJsaWMgQ2xvc3VyZSBkb2NzIGRvbid0IGxpc3QgYWxsIHRoZSB0YWdzIGl0IGFsbG93czsgdGhpcyBsaXN0IGNvbWVzXG4gKiBmcm9tIHRoZSBjb21waWxlciBzb3VyY2UgaXRzZWxmLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9jbG9zdXJlLWNvbXBpbGVyL2Jsb2IvbWFzdGVyL3NyYy9jb20vZ29vZ2xlL2phdmFzY3JpcHQvanNjb21wL3BhcnNpbmcvQW5ub3RhdGlvbi5qYXZhXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2Nsb3N1cmUtY29tcGlsZXIvYmxvYi9tYXN0ZXIvc3JjL2NvbS9nb29nbGUvamF2YXNjcmlwdC9qc2NvbXAvcGFyc2luZy9QYXJzZXJDb25maWcucHJvcGVydGllc1xuICovXG5jb25zdCBKU0RPQ19UQUdTX1dISVRFTElTVCA9IG5ldyBTZXQoW1xuICAnYWJzdHJhY3QnLCAgICAgICdhcmd1bWVudCcsXG4gICdhdXRob3InLCAgICAgICAgJ2NvbnNpc3RlbnRJZEdlbmVyYXRvcicsXG4gICdjb25zdCcsICAgICAgICAgJ2NvbnN0YW50JyxcbiAgJ2NvbnN0cnVjdG9yJywgICAnY29weXJpZ2h0JyxcbiAgJ2RlZmluZScsICAgICAgICAnZGVwcmVjYXRlZCcsXG4gICdkZXNjJywgICAgICAgICAgJ2RpY3QnLFxuICAnZGlzcG9zZXMnLCAgICAgICdlbmhhbmNlJyxcbiAgJ2VuaGFuY2VhYmxlJywgICAnZW51bScsXG4gICdleHBvcnQnLCAgICAgICAgJ2V4cG9zZScsXG4gICdleHRlbmRzJywgICAgICAgJ2V4dGVybnMnLFxuICAnZmlsZW92ZXJ2aWV3JywgICdmaW5hbCcsXG4gICdoYXNzb3lkZWxjYWxsJywgJ2hhc3NveWRlbHRlbXBsYXRlJyxcbiAgJ2hpZGRlbicsICAgICAgICAnaWQnLFxuICAnaWRHZW5lcmF0b3InLCAgICdpZ25vcmUnLFxuICAnaW1wbGVtZW50cycsICAgICdpbXBsaWNpdENhc3QnLFxuICAnaW5oZXJpdERvYycsICAgICdpbnRlcmZhY2UnLFxuICAnamFnZ2VySW5qZWN0JywgICdqYWdnZXJNb2R1bGUnLFxuICAnamFnZ2VyUHJvdmlkZScsICdqYWdnZXJQcm92aWRlUHJvbWlzZScsXG4gICdsZW5kcycsICAgICAgICAgJ2xpY2Vuc2UnLFxuICAnbGluaycsICAgICAgICAgICdtZWFuaW5nJyxcbiAgJ21vZGlmaWVzJywgICAgICAnbW9kTmFtZScsXG4gICdtb2RzJywgICAgICAgICAgJ25nSW5qZWN0JyxcbiAgJ25vYWxpYXMnLCAgICAgICAnbm9jb2xsYXBzZScsXG4gICdub2NvbXBpbGUnLCAgICAgJ25vc2lkZWVmZmVjdHMnLFxuICAnb3ZlcnJpZGUnLCAgICAgICdvd25lcicsXG4gICdwYWNrYWdlJywgICAgICAgJ3BhcmFtJyxcbiAgJ3BpbnRvbW9kdWxlJywgICAncG9seW1lckJlaGF2aW9yJyxcbiAgJ3ByZXNlcnZlJywgICAgICAncHJlc2VydmVUcnknLFxuICAncHJpdmF0ZScsICAgICAgICdwcm90ZWN0ZWQnLFxuICAncHVibGljJywgICAgICAgICdyZWNvcmQnLFxuICAncmVxdWlyZWNzcycsICAgICdyZXF1aXJlcycsXG4gICdyZXR1cm4nLCAgICAgICAgJ3JldHVybnMnLFxuICAnc2VlJywgICAgICAgICAgICdzdGFibGVJZEdlbmVyYXRvcicsXG4gICdzdHJ1Y3QnLCAgICAgICAgJ3N1cHByZXNzJyxcbiAgJ3RlbXBsYXRlJywgICAgICAndGhpcycsXG4gICd0aHJvd3MnLCAgICAgICAgJ3R5cGUnLFxuICAndHlwZWRlZicsICAgICAgICd1bnJlc3RyaWN0ZWQnLFxuICAndmVyc2lvbicsICAgICAgICd3aXphY3Rpb24nLFxuICAnd2l6bW9kdWxlJyxcbl0pO1xuXG4vKipcbiAqIEEgbGlzdCBvZiBKU0RvYyBAdGFncyB0aGF0IGFyZSBuZXZlciBhbGxvd2VkIGluIFR5cGVTY3JpcHQgc291cmNlLiBUaGVzZSBhcmUgQ2xvc3VyZSB0YWdzIHRoYXRcbiAqIGNhbiBiZSBleHByZXNzZWQgaW4gdGhlIFR5cGVTY3JpcHQgc3VyZmFjZSBzeW50YXguIEFzIHRzaWNrbGUncyBlbWl0IHdpbGwgbWFuZ2xlIHR5cGUgbmFtZXMsXG4gKiB0aGVzZSB3aWxsIGNhdXNlIENsb3N1cmUgQ29tcGlsZXIgaXNzdWVzIGFuZCBzaG91bGQgbm90IGJlIHVzZWQuXG4gKi9cbmNvbnN0IEpTRE9DX1RBR1NfQkxBQ0tMSVNUID0gbmV3IFNldChbXG4gICdhdWdtZW50cycsICdjbGFzcycsICAgICAgJ2NvbnN0cnVjdHMnLCAnY29uc3RydWN0b3InLCAnZW51bScsICAgICAgJ2V4dGVuZHMnLCAnZmllbGQnLFxuICAnZnVuY3Rpb24nLCAnaW1wbGVtZW50cycsICdpbnRlcmZhY2UnLCAgJ2xlbmRzJywgICAgICAgJ25hbWVzcGFjZScsICdwcml2YXRlJywgJ3B1YmxpYycsXG4gICdyZWNvcmQnLCAgICdzdGF0aWMnLCAgICAgJ3RlbXBsYXRlJywgICAndGhpcycsICAgICAgICAndHlwZScsICAgICAgJ3R5cGVkZWYnLFxuXSk7XG5cbi8qKlxuICogQSBsaXN0IG9mIEpTRG9jIEB0YWdzIHRoYXQgbWlnaHQgaW5jbHVkZSBhIHt0eXBlfSBhZnRlciB0aGVtLiBPbmx5IGJhbm5lZCB3aGVuIGEgdHlwZSBpcyBwYXNzZWQuXG4gKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBpbmNsdWRlIHRhZ3MgdGhhdCBjYXJyeSBhIG5vbi10eXBlIHN5c3RlbSB0eXBlLCBlLmcuIFxcQHN1cHByZXNzLlxuICovXG5jb25zdCBKU0RPQ19UQUdTX1dJVEhfVFlQRVMgPSBuZXcgU2V0KFtcbiAgJ2NvbnN0JyxcbiAgJ2V4cG9ydCcsXG4gICdwYXJhbScsXG4gICdyZXR1cm4nLFxuXSk7XG5cbi8qKlxuICogUmVzdWx0IG9mIHBhcnNpbmcgYSBKU0RvYyBjb21tZW50LiBTdWNoIGNvbW1lbnRzIGVzc2VudGlhbGx5IGFyZSBidWlsdCBvZiBhIGxpc3Qgb2YgdGFncy5cbiAqIEluIGFkZGl0aW9uIHRvIHRoZSB0YWdzLCB0aGlzIG1pZ2h0IGFsc28gY29udGFpbiB3YXJuaW5ncyB0byBpbmRpY2F0ZSBub24tZmF0YWwgcHJvYmxlbXNcbiAqIHdoaWxlIGZpbmRpbmcgdGhlIHRhZ3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkSlNEb2NDb21tZW50IHtcbiAgdGFnczogVGFnW107XG4gIHdhcm5pbmdzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogcGFyc2UgcGFyc2VzIEpTRG9jIG91dCBvZiBhIGNvbW1lbnQgc3RyaW5nLlxuICogUmV0dXJucyBudWxsIGlmIGNvbW1lbnQgaXMgbm90IEpTRG9jLlxuICovXG4vLyBUT0RPKG1hcnRpbnByb2JzdCk6IHJlcHJlc2VudGluZyBKU0RvYyBhcyBhIGxpc3Qgb2YgdGFncyBpcyB0b28gc2ltcGxpc3RpYy4gV2UgbmVlZCBmdW5jdGlvbmFsaXR5XG4vLyBzdWNoIGFzIG1lcmdpbmcgKGJlbG93KSwgZGUtZHVwbGljYXRpbmcgY2VydGFpbiB0YWdzIChAZGVwcmVjYXRlZCksIGFuZCBzcGVjaWFsIHRyZWF0bWVudCBmb3Jcbi8vIG90aGVycyAoZS5nLiBAc3VwcHJlc3MpLiBXZSBzaG91bGQgaW50cm9kdWNlIGEgcHJvcGVyIG1vZGVsIGNsYXNzIHdpdGggYSBtb3JlIHN1aXRhYmxlIGRhdGFcbi8vIHN0cnVjdXJlIChlLmcuIGEgTWFwPFRhZ05hbWUsIFZhbHVlc1tdPikuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UoY29tbWVudDogc3RyaW5nKTogUGFyc2VkSlNEb2NDb21tZW50fG51bGwge1xuICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBwcm9wZXIgbGluZSBlbmRpbmdzIGJlZm9yZSBwYXJzaW5nIG9uIFdpbmRvd3MuXG4gIGNvbW1lbnQgPSBub3JtYWxpemVMaW5lRW5kaW5ncyhjb21tZW50KTtcbiAgLy8gVE9ETyhldmFubSk6IHRoaXMgaXMgYSBwaWxlIG9mIGhhY2t5IHJlZ2V4ZXMgZm9yIG5vdywgYmVjYXVzZSB3ZVxuICAvLyB3b3VsZCByYXRoZXIgdXNlIHRoZSBiZXR0ZXIgVHlwZVNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiBKU0RvY1xuICAvLyBwYXJzaW5nLiAgaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy83MzkzXG4gIGNvbnN0IG1hdGNoID0gY29tbWVudC5tYXRjaCgvXlxcL1xcKlxcKihbXFxzXFxTXSo/KVxcKlxcLyQvKTtcbiAgaWYgKCFtYXRjaCkgcmV0dXJuIG51bGw7XG4gIHJldHVybiBwYXJzZUNvbnRlbnRzKG1hdGNoWzFdLnRyaW0oKSk7XG59XG5cbi8qKlxuICogcGFyc2VDb250ZW50cyBwYXJzZXMgSlNEb2Mgb3V0IG9mIGEgY29tbWVudCB0ZXh0LlxuICogUmV0dXJucyBudWxsIGlmIGNvbW1lbnQgaXMgbm90IEpTRG9jLlxuICpcbiAqIEBwYXJhbSBjb21tZW50VGV4dCBhIGNvbW1lbnQncyB0ZXh0IGNvbnRlbnQsIGkuZS4gdGhlIGNvbW1lbnQgdy9vIC8qIGFuZCAqIC8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNvbnRlbnRzKGNvbW1lbnRUZXh0OiBzdHJpbmcpOiB7dGFnczogVGFnW10sIHdhcm5pbmdzPzogc3RyaW5nW119fG51bGwge1xuICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBwcm9wZXIgbGluZSBlbmRpbmdzIGJlZm9yZSBwYXJzaW5nIG9uIFdpbmRvd3MuXG4gIGNvbW1lbnRUZXh0ID0gbm9ybWFsaXplTGluZUVuZGluZ3MoY29tbWVudFRleHQpO1xuICAvLyBTdHJpcCBhbGwgdGhlIFwiICogXCIgYml0cyBmcm9tIHRoZSBmcm9udCBvZiBlYWNoIGxpbmUuXG4gIGNvbW1lbnRUZXh0ID0gY29tbWVudFRleHQucmVwbGFjZSgvXlxccypcXCo/ID8vZ20sICcnKTtcbiAgY29uc3QgbGluZXMgPSBjb21tZW50VGV4dC5zcGxpdCgnXFxuJyk7XG4gIGNvbnN0IHRhZ3M6IFRhZ1tdID0gW107XG4gIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICBsZXQgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eXFxzKkAoXFxTKykgKiguKikvKTtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIGxldCBbXywgdGFnTmFtZSwgdGV4dF0gPSBtYXRjaDtcbiAgICAgIGlmICh0YWdOYW1lID09PSAncmV0dXJucycpIHtcbiAgICAgICAgLy8gQSBzeW5vbnltIGZvciAncmV0dXJuJy5cbiAgICAgICAgdGFnTmFtZSA9ICdyZXR1cm4nO1xuICAgICAgfVxuICAgICAgbGV0IHR5cGU6IHN0cmluZ3x1bmRlZmluZWQ7XG4gICAgICBpZiAoSlNET0NfVEFHU19CTEFDS0xJU1QuaGFzKHRhZ05hbWUpKSB7XG4gICAgICAgIHdhcm5pbmdzLnB1c2goYEAke3RhZ05hbWV9IGFubm90YXRpb25zIGFyZSByZWR1bmRhbnQgd2l0aCBUeXBlU2NyaXB0IGVxdWl2YWxlbnRzYCk7XG4gICAgICAgIGNvbnRpbnVlOyAgLy8gRHJvcCB0aGUgdGFnIHNvIENsb3N1cmUgd29uJ3QgcHJvY2VzcyBpdC5cbiAgICAgIH0gZWxzZSBpZiAoSlNET0NfVEFHU19XSVRIX1RZUEVTLmhhcyh0YWdOYW1lKSAmJiB0ZXh0WzBdID09PSAneycpIHtcbiAgICAgICAgd2FybmluZ3MucHVzaChcbiAgICAgICAgICAgIGB0aGUgdHlwZSBhbm5vdGF0aW9uIG9uIEAke3RhZ05hbWV9IGlzIHJlZHVuZGFudCB3aXRoIGl0cyBUeXBlU2NyaXB0IHR5cGUsIGAgK1xuICAgICAgICAgICAgYHJlbW92ZSB0aGUgey4uLn0gcGFydGApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9PT0gJ3N1cHByZXNzJykge1xuICAgICAgICBjb25zdCBzdXBwcmVzc01hdGNoID0gdGV4dC5tYXRjaCgvXlxceyguKilcXH0oLiopJC8pO1xuICAgICAgICBpZiAoIXN1cHByZXNzTWF0Y2gpIHtcbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKGBtYWxmb3JtZWQgQHN1cHByZXNzIHRhZzogXCIke3RleHR9XCJgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBbLCB0eXBlLCB0ZXh0XSA9IHN1cHByZXNzTWF0Y2g7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9PT0gJ2RpY3QnKSB7XG4gICAgICAgIHdhcm5pbmdzLnB1c2goJ3VzZSBpbmRleCBzaWduYXR1cmVzIChgW2s6IHN0cmluZ106IHR5cGVgKSBpbnN0ZWFkIG9mIEBkaWN0Jyk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBHcmFiIHRoZSBwYXJhbWV0ZXIgbmFtZSBmcm9tIEBwYXJhbSB0YWdzLlxuICAgICAgbGV0IHBhcmFtZXRlck5hbWU6IHN0cmluZ3x1bmRlZmluZWQ7XG4gICAgICBpZiAodGFnTmFtZSA9PT0gJ3BhcmFtJykge1xuICAgICAgICBtYXRjaCA9IHRleHQubWF0Y2goL14oXFxTKykgPyguKikvKTtcbiAgICAgICAgaWYgKG1hdGNoKSBbXywgcGFyYW1ldGVyTmFtZSwgdGV4dF0gPSBtYXRjaDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFnOiBUYWcgPSB7dGFnTmFtZX07XG4gICAgICBpZiAocGFyYW1ldGVyTmFtZSkgdGFnLnBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXJOYW1lO1xuICAgICAgaWYgKHRleHQpIHRhZy50ZXh0ID0gdGV4dDtcbiAgICAgIGlmICh0eXBlKSB0YWcudHlwZSA9IHR5cGU7XG4gICAgICB0YWdzLnB1c2godGFnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGV4dCB3aXRob3V0IGEgcHJlY2VkaW5nIEB0YWcgb24gaXQgaXMgZWl0aGVyIHRoZSBwbGFpbiB0ZXh0XG4gICAgICAvLyBkb2N1bWVudGF0aW9uIG9yIGEgY29udGludWF0aW9uIG9mIGEgcHJldmlvdXMgdGFnLlxuICAgICAgaWYgKHRhZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRhZ3MucHVzaCh7dGFnTmFtZTogJycsIHRleHQ6IGxpbmV9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGxhc3RUYWcgPSB0YWdzW3RhZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgIGxhc3RUYWcudGV4dCA9IChsYXN0VGFnLnRleHQgfHwgJycpICsgJ1xcbicgKyBsaW5lO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAod2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB7dGFncywgd2FybmluZ3N9O1xuICB9XG4gIHJldHVybiB7dGFnc307XG59XG5cbi8qKlxuICogU2VyaWFsaXplcyBhIFRhZyBpbnRvIGEgc3RyaW5nIHVzYWJsZSBpbiBhIGNvbW1lbnQuXG4gKiBSZXR1cm5zIGEgc3RyaW5nIGxpa2UgXCIgQGZvbyB7YmFyfSBiYXpcIiAobm90ZSB0aGUgd2hpdGVzcGFjZSkuXG4gKi9cbmZ1bmN0aW9uIHRhZ1RvU3RyaW5nKHRhZzogVGFnLCBlc2NhcGVFeHRyYVRhZ3MgPSBuZXcgU2V0PHN0cmluZz4oKSk6IHN0cmluZyB7XG4gIGxldCBvdXQgPSAnJztcbiAgaWYgKHRhZy50YWdOYW1lKSB7XG4gICAgaWYgKCFKU0RPQ19UQUdTX1dISVRFTElTVC5oYXModGFnLnRhZ05hbWUpIHx8IGVzY2FwZUV4dHJhVGFncy5oYXModGFnLnRhZ05hbWUpKSB7XG4gICAgICAvLyBFc2NhcGUgdGFncyB3ZSBkb24ndCB1bmRlcnN0YW5kLiAgVGhpcyBpcyBhIHN1YnRsZVxuICAgICAgLy8gY29tcHJvbWlzZSBiZXR3ZWVuIG11bHRpcGxlIGlzc3Vlcy5cbiAgICAgIC8vIDEpIElmIHdlIHBhc3MgdGhyb3VnaCB0aGVzZSBub24tQ2xvc3VyZSB0YWdzLCB0aGUgdXNlciB3aWxsXG4gICAgICAvLyAgICBnZXQgYSB3YXJuaW5nIGZyb20gQ2xvc3VyZSwgYW5kIHRoZSBwb2ludCBvZiB0c2lja2xlIGlzXG4gICAgICAvLyAgICB0byBpbnN1bGF0ZSB0aGUgdXNlciBmcm9tIENsb3N1cmUuXG4gICAgICAvLyAyKSBUaGUgb3V0cHV0IG9mIHRzaWNrbGUgaXMgZm9yIENsb3N1cmUgYnV0IGFsc28gbWF5IGJlIHJlYWRcbiAgICAgIC8vICAgIGJ5IGh1bWFucywgZm9yIGV4YW1wbGUgbm9uLVR5cGVTY3JpcHQgdXNlcnMgb2YgQW5ndWxhci5cbiAgICAgIC8vIDMpIEZpbmFsbHksIHdlIGRvbid0IHdhbnQgdG8gd2FybiBiZWNhdXNlIHVzZXJzIHNob3VsZCBiZVxuICAgICAgLy8gICAgZnJlZSB0byBhZGQgd2hpY2hldmVyIEpTRG9jIHRoZXkgZmVlbCBsaWtlLiAgSWYgdGhlIHVzZXJcbiAgICAgIC8vICAgIHdhbnRzIGhlbHAgZW5zdXJpbmcgdGhleSBkaWRuJ3QgdHlwbyBhIHRhZywgdGhhdCBpcyB0aGVcbiAgICAgIC8vICAgIHJlc3BvbnNpYmlsaXR5IG9mIGEgbGludGVyLlxuICAgICAgb3V0ICs9IGAgXFxcXEAke3RhZy50YWdOYW1lfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSBgIEAke3RhZy50YWdOYW1lfWA7XG4gICAgfVxuICB9XG4gIGlmICh0YWcudHlwZSkge1xuICAgIG91dCArPSAnIHsnO1xuICAgIGlmICh0YWcucmVzdFBhcmFtKSB7XG4gICAgICBvdXQgKz0gJy4uLic7XG4gICAgfVxuICAgIG91dCArPSB0YWcudHlwZTtcbiAgICBpZiAodGFnLm9wdGlvbmFsKSB7XG4gICAgICBvdXQgKz0gJz0nO1xuICAgIH1cbiAgICBvdXQgKz0gJ30nO1xuICB9XG4gIGlmICh0YWcucGFyYW1ldGVyTmFtZSkge1xuICAgIG91dCArPSAnICcgKyB0YWcucGFyYW1ldGVyTmFtZTtcbiAgfVxuICBpZiAodGFnLnRleHQpIHtcbiAgICBvdXQgKz0gJyAnICsgdGFnLnRleHQucmVwbGFjZSgvQC9nLCAnXFxcXEAnKTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKiogVGFncyB0aGF0IG11c3Qgb25seSBvY2N1ciBvbmNlcyBpbiBhIGNvbW1lbnQgKGZpbHRlcmVkIGJlbG93KS4gKi9cbmNvbnN0IFNJTkdMRVRPTl9UQUdTID0gbmV3IFNldChbJ2RlcHJlY2F0ZWQnXSk7XG5cbi8qKiBTZXJpYWxpemVzIGEgQ29tbWVudCBvdXQgdG8gYSBzdHJpbmcsIGJ1dCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBzdGFydCBhbmQgZW5kIGNvbW1lbnQgdG9rZW5zLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nV2l0aG91dFN0YXJ0RW5kKHRhZ3M6IFRhZ1tdLCBlc2NhcGVFeHRyYVRhZ3MgPSBuZXcgU2V0PHN0cmluZz4oKSk6IHN0cmluZyB7XG4gIHJldHVybiBzZXJpYWxpemUodGFncywgZmFsc2UsIGVzY2FwZUV4dHJhVGFncyk7XG59XG5cbi8qKiBTZXJpYWxpemVzIGEgQ29tbWVudCBvdXQgdG8gYSBzdHJpbmcgdXNhYmxlIGluIHNvdXJjZSBjb2RlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHRhZ3M6IFRhZ1tdLCBlc2NhcGVFeHRyYVRhZ3MgPSBuZXcgU2V0PHN0cmluZz4oKSk6IHN0cmluZyB7XG4gIHJldHVybiBzZXJpYWxpemUodGFncywgdHJ1ZSwgZXNjYXBlRXh0cmFUYWdzKTtcbn1cblxuZnVuY3Rpb24gc2VyaWFsaXplKFxuICAgIHRhZ3M6IFRhZ1tdLCBpbmNsdWRlU3RhcnRFbmQ6IGJvb2xlYW4sIGVzY2FwZUV4dHJhVGFncyA9IG5ldyBTZXQ8c3RyaW5nPigpKTogc3RyaW5nIHtcbiAgaWYgKHRhZ3MubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gIGlmICh0YWdzLmxlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IHRhZyA9IHRhZ3NbMF07XG4gICAgaWYgKCh0YWcudGFnTmFtZSA9PT0gJ3R5cGUnIHx8IHRhZy50YWdOYW1lID09PSAnbm9jb2xsYXBzZScpICYmXG4gICAgICAgICghdGFnLnRleHQgfHwgIXRhZy50ZXh0Lm1hdGNoKCdcXG4nKSkpIHtcbiAgICAgIC8vIFNwZWNpYWwtY2FzZSBvbmUtbGluZXIgXCJ0eXBlXCIgYW5kIFwibm9jb2xsYXBzZVwiIHRhZ3MgdG8gZml0IG9uIG9uZSBsaW5lLCBlLmcuXG4gICAgICAvLyAgIC8qKiBAdHlwZSB7Zm9vfSAqL1xuICAgICAgcmV0dXJuICcvKionICsgdGFnVG9TdHJpbmcodGFnLCBlc2NhcGVFeHRyYVRhZ3MpICsgJyAqL1xcbic7XG4gICAgfVxuICAgIC8vIE90aGVyd2lzZSwgZmFsbCB0aHJvdWdoIHRvIHRoZSBtdWx0aS1saW5lIG91dHB1dC5cbiAgfVxuXG4gIGxldCBvdXQgPSBpbmNsdWRlU3RhcnRFbmQgPyAnLyoqXFxuJyA6ICcqXFxuJztcbiAgY29uc3QgZW1pdHRlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzKSB7XG4gICAgaWYgKGVtaXR0ZWQuaGFzKHRhZy50YWdOYW1lKSAmJiBTSU5HTEVUT05fVEFHUy5oYXModGFnLnRhZ05hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZW1pdHRlZC5hZGQodGFnLnRhZ05hbWUpO1xuICAgIG91dCArPSAnIConO1xuICAgIC8vIElmIHRoZSB0YWdUb1N0cmluZyBpcyBtdWx0aS1saW5lLCBpbnNlcnQgXCIgKiBcIiBwcmVmaXhlcyBvbiBzdWJzZXF1ZW50IGxpbmVzLlxuICAgIG91dCArPSB0YWdUb1N0cmluZyh0YWcsIGVzY2FwZUV4dHJhVGFncykuc3BsaXQoJ1xcbicpLmpvaW4oJ1xcbiAqICcpO1xuICAgIG91dCArPSAnXFxuJztcbiAgfVxuICBvdXQgKz0gaW5jbHVkZVN0YXJ0RW5kID8gJyAqL1xcbicgOiAnICc7XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBNZXJnZXMgbXVsdGlwbGUgdGFncyAob2YgdGhlIHNhbWUgdGFnTmFtZSB0eXBlKSBpbnRvIGEgc2luZ2xlIHVuaWZpZWQgdGFnLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlKHRhZ3M6IFRhZ1tdKTogVGFnIHtcbiAgY29uc3QgdGFnTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgcGFyYW1ldGVyTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgdHlwZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgdGV4dHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgLy8gSWYgYW55IG9mIHRoZSB0YWdzIGFyZSBvcHRpb25hbC9yZXN0LCB0aGVuIHRoZSBtZXJnZWQgb3V0cHV0IGlzIG9wdGlvbmFsL3Jlc3QuXG4gIGxldCBvcHRpb25hbCA9IGZhbHNlO1xuICBsZXQgcmVzdFBhcmFtID0gZmFsc2U7XG4gIGZvciAoY29uc3QgdGFnIG9mIHRhZ3MpIHtcbiAgICBpZiAodGFnLnRhZ05hbWUpIHRhZ05hbWVzLmFkZCh0YWcudGFnTmFtZSk7XG4gICAgaWYgKHRhZy5wYXJhbWV0ZXJOYW1lKSBwYXJhbWV0ZXJOYW1lcy5hZGQodGFnLnBhcmFtZXRlck5hbWUpO1xuICAgIGlmICh0YWcudHlwZSkgdHlwZXMuYWRkKHRhZy50eXBlKTtcbiAgICBpZiAodGFnLnRleHQpIHRleHRzLmFkZCh0YWcudGV4dCk7XG4gICAgaWYgKHRhZy5vcHRpb25hbCkgb3B0aW9uYWwgPSB0cnVlO1xuICAgIGlmICh0YWcucmVzdFBhcmFtKSByZXN0UGFyYW0gPSB0cnVlO1xuICB9XG5cbiAgaWYgKHRhZ05hbWVzLnNpemUgIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbm5vdCBtZXJnZSBkaWZmZXJpbmcgdGFnczogJHtKU09OLnN0cmluZ2lmeSh0YWdzKX1gKTtcbiAgfVxuICBjb25zdCB0YWdOYW1lID0gdGFnTmFtZXMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICBjb25zdCBwYXJhbWV0ZXJOYW1lID1cbiAgICAgIHBhcmFtZXRlck5hbWVzLnNpemUgPiAwID8gQXJyYXkuZnJvbShwYXJhbWV0ZXJOYW1lcykuam9pbignX29yXycpIDogdW5kZWZpbmVkO1xuICBjb25zdCB0eXBlID0gdHlwZXMuc2l6ZSA+IDAgPyBBcnJheS5mcm9tKHR5cGVzKS5qb2luKCd8JykgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHRleHQgPSB0ZXh0cy5zaXplID4gMCA/IEFycmF5LmZyb20odGV4dHMpLmpvaW4oJyAvICcpIDogdW5kZWZpbmVkO1xuICBjb25zdCB0YWc6IFRhZyA9IHt0YWdOYW1lLCBwYXJhbWV0ZXJOYW1lLCB0eXBlLCB0ZXh0fTtcbiAgLy8gTm90ZTogYSBwYXJhbSBjYW4gZWl0aGVyIGJlIG9wdGlvbmFsIG9yIGEgcmVzdCBwYXJhbTsgaWYgd2UgbWVyZ2VkIGFuXG4gIC8vIG9wdGlvbmFsIGFuZCByZXN0IHBhcmFtIHRvZ2V0aGVyLCBwcmVmZXIgbWFya2luZyBpdCBhcyBhIHJlc3QgcGFyYW0uXG4gIGlmIChyZXN0UGFyYW0pIHtcbiAgICB0YWcucmVzdFBhcmFtID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChvcHRpb25hbCkge1xuICAgIHRhZy5vcHRpb25hbCA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIHRhZztcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNkb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvanNkb2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUVILHlDQUE0QztJQXNDNUM7Ozs7OztPQU1HO0lBQ0gsSUFBTSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztRQUNuQyxVQUFVLEVBQU8sVUFBVTtRQUMzQixRQUFRLEVBQVMsdUJBQXVCO1FBQ3hDLE9BQU8sRUFBVSxVQUFVO1FBQzNCLGFBQWEsRUFBSSxXQUFXO1FBQzVCLFFBQVEsRUFBUyxZQUFZO1FBQzdCLE1BQU0sRUFBVyxNQUFNO1FBQ3ZCLFVBQVUsRUFBTyxTQUFTO1FBQzFCLGFBQWEsRUFBSSxNQUFNO1FBQ3ZCLFFBQVEsRUFBUyxRQUFRO1FBQ3pCLFNBQVMsRUFBUSxTQUFTO1FBQzFCLGNBQWMsRUFBRyxPQUFPO1FBQ3hCLGVBQWUsRUFBRSxtQkFBbUI7UUFDcEMsUUFBUSxFQUFTLElBQUk7UUFDckIsYUFBYSxFQUFJLFFBQVE7UUFDekIsWUFBWSxFQUFLLGNBQWM7UUFDL0IsWUFBWSxFQUFLLFdBQVc7UUFDNUIsY0FBYyxFQUFHLGNBQWM7UUFDL0IsZUFBZSxFQUFFLHNCQUFzQjtRQUN2QyxPQUFPLEVBQVUsU0FBUztRQUMxQixNQUFNLEVBQVcsU0FBUztRQUMxQixVQUFVLEVBQU8sU0FBUztRQUMxQixNQUFNLEVBQVcsVUFBVTtRQUMzQixTQUFTLEVBQVEsWUFBWTtRQUM3QixXQUFXLEVBQU0sZUFBZTtRQUNoQyxVQUFVLEVBQU8sT0FBTztRQUN4QixTQUFTLEVBQVEsT0FBTztRQUN4QixhQUFhLEVBQUksaUJBQWlCO1FBQ2xDLFVBQVUsRUFBTyxhQUFhO1FBQzlCLFNBQVMsRUFBUSxXQUFXO1FBQzVCLFFBQVEsRUFBUyxRQUFRO1FBQ3pCLFlBQVksRUFBSyxVQUFVO1FBQzNCLFFBQVEsRUFB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QUFTLEdBQUcsSUFBSSxDQUFDO1NBQ3RCO2FBQU0sSUFBSSxRQUFRLEVBQUU7WUFDbkIsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDckI7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFsQ0Qsc0JBa0NDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge25vcm1hbGl6ZUxpbmVFbmRpbmdzfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIFR5cGVTY3JpcHQgaGFzIGFuIEFQSSBmb3IgSlNEb2MgYWxyZWFkeSwgYnV0IGl0J3Mgbm90IGV4cG9zZWQuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzczOTNcbiAqIEZvciBub3cgd2UgY3JlYXRlIHR5cGVzIHRoYXQgYXJlIHNpbWlsYXIgdG8gdGhlaXJzIHNvIHRoYXQgbWlncmF0aW5nXG4gKiB0byB0aGVpciBBUEkgd2lsbCBiZSBlYXNpZXIuICBTZWUgZS5nLiB0cy5KU0RvY1RhZyBhbmQgdHMuSlNEb2NDb21tZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZyB7XG4gIC8qKlxuICAgKiB0YWdOYW1lIGlzIGUuZy4gXCJwYXJhbVwiIGluIGFuIEBwYXJhbSBkZWNsYXJhdGlvbi4gIEl0IGlzIHRoZSBlbXB0eSBzdHJpbmdcbiAgICogZm9yIHRoZSBwbGFpbiB0ZXh0IGRvY3VtZW50YXRpb24gdGhhdCBvY2N1cnMgYmVmb3JlIGFueSBAZm9vIGxpbmVzLlxuICAgKi9cbiAgdGFnTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogcGFyYW1ldGVyTmFtZSBpcyB0aGUgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciwgZS5nLiBcImZvb1wiXG4gICAqIGluIGBcXEBwYXJhbSBmb28gVGhlIGZvbyBwYXJhbWBcbiAgICovXG4gIHBhcmFtZXRlck5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBhIEpTRG9jIFxcQHBhcmFtLCBcXEB0eXBlIGV0YyB0YWcsIHJlbmRlcmVkIGluIGN1cmx5IGJyYWNlcy5cbiAgICogQ2FuIGFsc28gaG9sZCB0aGUgdHlwZSBvZiBhbiBcXEBzdXBwcmVzcy5cbiAgICovXG4gIHR5cGU/OiBzdHJpbmc7XG4gIC8qKiBvcHRpb25hbCBpcyB0cnVlIGZvciBvcHRpb25hbCBmdW5jdGlvbiBwYXJhbWV0ZXJzLiAqL1xuICBvcHRpb25hbD86IGJvb2xlYW47XG4gIC8qKiByZXN0UGFyYW0gaXMgdHJ1ZSBmb3IgXCIuLi54OiBmb29bXVwiIGZ1bmN0aW9uIHBhcmFtZXRlcnMuICovXG4gIHJlc3RQYXJhbT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBkZXN0cnVjdHVyaW5nIGlzIHRydWUgZm9yIGRlc3RydWN0dXJpbmcgYmluZCBwYXJhbWV0ZXJzLCB3aGljaCByZXF1aXJlXG4gICAqIG5vbi1udWxsIGFyZ3VtZW50cyBvbiB0aGUgQ2xvc3VyZSBzaWRlLiAgQ2FuIGxpa2VseSByZW1vdmUgdGhpc1xuICAgKiBvbmNlIFR5cGVTY3JpcHQgbnVsbGFibGUgdHlwZXMgYXJlIGF2YWlsYWJsZS5cbiAgICovXG4gIGRlc3RydWN0dXJpbmc/OiBib29sZWFuO1xuICAvKiogQW55IHJlbWFpbmluZyB0ZXh0IG9uIHRoZSB0YWcsIGUuZy4gdGhlIGRlc2NyaXB0aW9uLiAqL1xuICB0ZXh0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgbGlzdCBvZiBhbGwgSlNEb2MgdGFncyBhbGxvd2VkIGJ5IHRoZSBDbG9zdXJlIGNvbXBpbGVyLlxuICogVGhlIHB1YmxpYyBDbG9zdXJlIGRvY3MgZG9uJ3QgbGlzdCBhbGwgdGhlIHRhZ3MgaXQgYWxsb3dzOyB0aGlzIGxpc3QgY29tZXNcbiAqIGZyb20gdGhlIGNvbXBpbGVyIHNvdXJjZSBpdHNlbGYuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2Nsb3N1cmUtY29tcGlsZXIvYmxvYi9tYXN0ZXIvc3JjL2NvbS9nb29nbGUvamF2YXNjcmlwdC9qc2NvbXAvcGFyc2luZy9Bbm5vdGF0aW9uLmphdmFcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1jb21waWxlci9ibG9iL21hc3Rlci9zcmMvY29tL2dvb2dsZS9qYXZhc2NyaXB0L2pzY29tcC9wYXJzaW5nL1BhcnNlckNvbmZpZy5wcm9wZXJ0aWVzXG4gKi9cbmNvbnN0IEpTRE9DX1RBR1NfV0hJVEVMSVNUID0gbmV3IFNldChbXG4gICdhYnN0cmFjdCcsICAgICAgJ2FyZ3VtZW50JyxcbiAgJ2F1dGhvcicsICAgICAgICAnY29uc2lzdGVudElkR2VuZXJhdG9yJyxcbiAgJ2NvbnN0JywgICAgICAgICAnY29uc3RhbnQnLFxuICAnY29uc3RydWN0b3InLCAgICdjb3B5cmlnaHQnLFxuICAnZGVmaW5lJywgICAgICAgICdkZXByZWNhdGVkJyxcbiAgJ2Rlc2MnLCAgICAgICAgICAnZGljdCcsXG4gICdkaXNwb3NlcycsICAgICAgJ2VuaGFuY2UnLFxuICAnZW5oYW5jZWFibGUnLCAgICdlbnVtJyxcbiAgJ2V4cG9ydCcsICAgICAgICAnZXhwb3NlJyxcbiAgJ2V4dGVuZHMnLCAgICAgICAnZXh0ZXJucycsXG4gICdmaWxlb3ZlcnZpZXcnLCAgJ2ZpbmFsJyxcbiAgJ2hhc3NveWRlbGNhbGwnLCAnaGFzc295ZGVsdGVtcGxhdGUnLFxuICAnaGlkZGVuJywgICAgICAgICdpZCcsXG4gICdpZEdlbmVyYXRvcicsICAgJ2lnbm9yZScsXG4gICdpbXBsZW1lbnRzJywgICAgJ2ltcGxpY2l0Q2FzdCcsXG4gICdpbmhlcml0RG9jJywgICAgJ2ludGVyZmFjZScsXG4gICdqYWdnZXJJbmplY3QnLCAgJ2phZ2dlck1vZHVsZScsXG4gICdqYWdnZXJQcm92aWRlJywgJ2phZ2dlclByb3ZpZGVQcm9taXNlJyxcbiAgJ2xlbmRzJywgICAgICAgICAnbGljZW5zZScsXG4gICdsaW5rJywgICAgICAgICAgJ21lYW5pbmcnLFxuICAnbW9kaWZpZXMnLCAgICAgICdtb2ROYW1lJyxcbiAgJ21vZHMnLCAgICAgICAgICAnbmdJbmplY3QnLFxuICAnbm9hbGlhcycsICAgICAgICdub2NvbGxhcHNlJyxcbiAgJ25vY29tcGlsZScsICAgICAnbm9zaWRlZWZmZWN0cycsXG4gICdvdmVycmlkZScsICAgICAgJ293bmVyJyxcbiAgJ3BhY2thZ2UnLCAgICAgICAncGFyYW0nLFxuICAncGludG9tb2R1bGUnLCAgICdwb2x5bWVyQmVoYXZpb3InLFxuICAncHJlc2VydmUnLCAgICAgICdwcmVzZXJ2ZVRyeScsXG4gICdwcml2YXRlJywgICAgICAgJ3Byb3RlY3RlZCcsXG4gICdwdWJsaWMnLCAgICAgICAgJ3JlY29yZCcsXG4gICdyZXF1aXJlY3NzJywgICAgJ3JlcXVpcmVzJyxcbiAgJ3JldHVybicsICAgICAgICAncmV0dXJucycsXG4gICdzZWUnLCAgICAgICAgICAgJ3N0YWJsZUlkR2VuZXJhdG9yJyxcbiAgJ3N0cnVjdCcsICAgICAgICAnc3VwcHJlc3MnLFxuICAndGVtcGxhdGUnLCAgICAgICd0aGlzJyxcbiAgJ3Rocm93cycsICAgICAgICAndHlwZScsXG4gICd0eXBlZGVmJywgICAgICAgJ3VucmVzdHJpY3RlZCcsXG4gICd2ZXJzaW9uJywgICAgICAgJ3dpemFjdGlvbicsXG4gICd3aXptb2R1bGUnLFxuXSk7XG5cbi8qKlxuICogQSBsaXN0IG9mIEpTRG9jIEB0YWdzIHRoYXQgYXJlIG5ldmVyIGFsbG93ZWQgaW4gVHlwZVNjcmlwdCBzb3VyY2UuIFRoZXNlIGFyZSBDbG9zdXJlIHRhZ3MgdGhhdFxuICogY2FuIGJlIGV4cHJlc3NlZCBpbiB0aGUgVHlwZVNjcmlwdCBzdXJmYWNlIHN5bnRheC4gQXMgdHNpY2tsZSdzIGVtaXQgd2lsbCBtYW5nbGUgdHlwZSBuYW1lcyxcbiAqIHRoZXNlIHdpbGwgY2F1c2UgQ2xvc3VyZSBDb21waWxlciBpc3N1ZXMgYW5kIHNob3VsZCBub3QgYmUgdXNlZC5cbiAqL1xuY29uc3QgSlNET0NfVEFHU19CTEFDS0xJU1QgPSBuZXcgU2V0KFtcbiAgJ2F1Z21lbnRzJywgJ2NsYXNzJywgICAgICAnY29uc3RydWN0cycsICdjb25zdHJ1Y3RvcicsICdlbnVtJywgICAgICAnZXh0ZW5kcycsICdmaWVsZCcsXG4gICdmdW5jdGlvbicsICdpbXBsZW1lbnRzJywgJ2ludGVyZmFjZScsICAnbGVuZHMnLCAgICAgICAnbmFtZXNwYWNlJywgJ3ByaXZhdGUnLCAncHVibGljJyxcbiAgJ3JlY29yZCcsICAgJ3N0YXRpYycsICAgICAndGVtcGxhdGUnLCAgICd0aGlzJywgICAgICAgICd0eXBlJywgICAgICAndHlwZWRlZicsXG5dKTtcblxuLyoqXG4gKiBBIGxpc3Qgb2YgSlNEb2MgQHRhZ3MgdGhhdCBtaWdodCBpbmNsdWRlIGEge3R5cGV9IGFmdGVyIHRoZW0uIE9ubHkgYmFubmVkIHdoZW4gYSB0eXBlIGlzIHBhc3NlZC5cbiAqIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGluY2x1ZGUgdGFncyB0aGF0IGNhcnJ5IGEgbm9uLXR5cGUgc3lzdGVtIHR5cGUsIGUuZy4gXFxAc3VwcHJlc3MuXG4gKi9cbmNvbnN0IEpTRE9DX1RBR1NfV0lUSF9UWVBFUyA9IG5ldyBTZXQoW1xuICAnY29uc3QnLFxuICAnZXhwb3J0JyxcbiAgJ3BhcmFtJyxcbiAgJ3JldHVybicsXG5dKTtcblxuLyoqXG4gKiBSZXN1bHQgb2YgcGFyc2luZyBhIEpTRG9jIGNvbW1lbnQuIFN1Y2ggY29tbWVudHMgZXNzZW50aWFsbHkgYXJlIGJ1aWx0IG9mIGEgbGlzdCBvZiB0YWdzLlxuICogSW4gYWRkaXRpb24gdG8gdGhlIHRhZ3MsIHRoaXMgbWlnaHQgYWxzbyBjb250YWluIHdhcm5pbmdzIHRvIGluZGljYXRlIG5vbi1mYXRhbCBwcm9ibGVtc1xuICogd2hpbGUgZmluZGluZyB0aGUgdGFncy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRKU0RvY0NvbW1lbnQge1xuICB0YWdzOiBUYWdbXTtcbiAgd2FybmluZ3M/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBwYXJzZSBwYXJzZXMgSlNEb2Mgb3V0IG9mIGEgY29tbWVudCBzdHJpbmcuXG4gKiBSZXR1cm5zIG51bGwgaWYgY29tbWVudCBpcyBub3QgSlNEb2MuXG4gKi9cbi8vIFRPRE8obWFydGlucHJvYnN0KTogcmVwcmVzZW50aW5nIEpTRG9jIGFzIGEgbGlzdCBvZiB0YWdzIGlzIHRvbyBzaW1wbGlzdGljLiBXZSBuZWVkIGZ1bmN0aW9uYWxpdHlcbi8vIHN1Y2ggYXMgbWVyZ2luZyAoYmVsb3cpLCBkZS1kdXBsaWNhdGluZyBjZXJ0YWluIHRhZ3MgKEBkZXByZWNhdGVkKSwgYW5kIHNwZWNpYWwgdHJlYXRtZW50IGZvclxuLy8gb3RoZXJzIChlLmcuIEBzdXBwcmVzcykuIFdlIHNob3VsZCBpbnRyb2R1Y2UgYSBwcm9wZXIgbW9kZWwgY2xhc3Mgd2l0aCBhIG1vcmUgc3VpdGFibGUgZGF0YVxuLy8gc3RydWN1cmUgKGUuZy4gYSBNYXA8VGFnTmFtZSwgVmFsdWVzW10+KS5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZShjb21tZW50OiBzdHJpbmcpOiBQYXJzZWRKU0RvY0NvbW1lbnR8bnVsbCB7XG4gIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIHByb3BlciBsaW5lIGVuZGluZ3MgYmVmb3JlIHBhcnNpbmcgb24gV2luZG93cy5cbiAgY29tbWVudCA9IG5vcm1hbGl6ZUxpbmVFbmRpbmdzKGNvbW1lbnQpO1xuICAvLyBUT0RPKGV2YW5tKTogdGhpcyBpcyBhIHBpbGUgb2YgaGFja3kgcmVnZXhlcyBmb3Igbm93LCBiZWNhdXNlIHdlXG4gIC8vIHdvdWxkIHJhdGhlciB1c2UgdGhlIGJldHRlciBUeXBlU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIEpTRG9jXG4gIC8vIHBhcnNpbmcuICBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzczOTNcbiAgY29uc3QgbWF0Y2ggPSBjb21tZW50Lm1hdGNoKC9eXFwvXFwqXFwqKFtcXHNcXFNdKj8pXFwqXFwvJC8pO1xuICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHBhcnNlQ29udGVudHMobWF0Y2hbMV0udHJpbSgpKTtcbn1cblxuLyoqXG4gKiBwYXJzZUNvbnRlbnRzIHBhcnNlcyBKU0RvYyBvdXQgb2YgYSBjb21tZW50IHRleHQuXG4gKiBSZXR1cm5zIG51bGwgaWYgY29tbWVudCBpcyBub3QgSlNEb2MuXG4gKlxuICogQHBhcmFtIGNvbW1lbnRUZXh0IGEgY29tbWVudCdzIHRleHQgY29udGVudCwgaS5lLiB0aGUgY29tbWVudCB3L28gLyogYW5kICogLy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ29udGVudHMoY29tbWVudFRleHQ6IHN0cmluZyk6IHt0YWdzOiBUYWdbXSwgd2FybmluZ3M/OiBzdHJpbmdbXX18bnVsbCB7XG4gIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIHByb3BlciBsaW5lIGVuZGluZ3MgYmVmb3JlIHBhcnNpbmcgb24gV2luZG93cy5cbiAgY29tbWVudFRleHQgPSBub3JtYWxpemVMaW5lRW5kaW5ncyhjb21tZW50VGV4dCk7XG4gIC8vIFN0cmlwIGFsbCB0aGUgXCIgKiBcIiBiaXRzIGZyb20gdGhlIGZyb250IG9mIGVhY2ggbGluZS5cbiAgY29tbWVudFRleHQgPSBjb21tZW50VGV4dC5yZXBsYWNlKC9eXFxzKlxcKj8gPy9nbSwgJycpO1xuICBjb25zdCBsaW5lcyA9IGNvbW1lbnRUZXh0LnNwbGl0KCdcXG4nKTtcbiAgY29uc3QgdGFnczogVGFnW10gPSBbXTtcbiAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIGxldCBtYXRjaCA9IGxpbmUubWF0Y2goL15cXHMqQChcXFMrKSAqKC4qKS8pO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgbGV0IFtfLCB0YWdOYW1lLCB0ZXh0XSA9IG1hdGNoO1xuICAgICAgaWYgKHRhZ05hbWUgPT09ICdyZXR1cm5zJykge1xuICAgICAgICAvLyBBIHN5bm9ueW0gZm9yICdyZXR1cm4nLlxuICAgICAgICB0YWdOYW1lID0gJ3JldHVybic7XG4gICAgICB9XG4gICAgICBsZXQgdHlwZTogc3RyaW5nfHVuZGVmaW5lZDtcbiAgICAgIGlmIChKU0RPQ19UQUdTX0JMQUNLTElTVC5oYXModGFnTmFtZSkpIHtcbiAgICAgICAgd2FybmluZ3MucHVzaChgQCR7dGFnTmFtZX0gYW5ub3RhdGlvbnMgYXJlIHJlZHVuZGFudCB3aXRoIFR5cGVTY3JpcHQgZXF1aXZhbGVudHNgKTtcbiAgICAgICAgY29udGludWU7ICAvLyBEcm9wIHRoZSB0YWcgc28gQ2xvc3VyZSB3b24ndCBwcm9jZXNzIGl0LlxuICAgICAgfSBlbHNlIGlmIChKU0RPQ19UQUdTX1dJVEhfVFlQRVMuaGFzKHRhZ05hbWUpICYmIHRleHRbMF0gPT09ICd7Jykge1xuICAgICAgICB3YXJuaW5ncy5wdXNoKFxuICAgICAgICAgICAgYHRoZSB0eXBlIGFubm90YXRpb24gb24gQCR7dGFnTmFtZX0gaXMgcmVkdW5kYW50IHdpdGggaXRzIFR5cGVTY3JpcHQgdHlwZSwgYCArXG4gICAgICAgICAgICBgcmVtb3ZlIHRoZSB7Li4ufSBwYXJ0YCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09PSAnc3VwcHJlc3MnKSB7XG4gICAgICAgIGNvbnN0IHN1cHByZXNzTWF0Y2ggPSB0ZXh0Lm1hdGNoKC9eXFx7KC4qKVxcfSguKikkLyk7XG4gICAgICAgIGlmICghc3VwcHJlc3NNYXRjaCkge1xuICAgICAgICAgIHdhcm5pbmdzLnB1c2goYG1hbGZvcm1lZCBAc3VwcHJlc3MgdGFnOiBcIiR7dGV4dH1cImApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIFssIHR5cGUsIHRleHRdID0gc3VwcHJlc3NNYXRjaDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09PSAnZGljdCcpIHtcbiAgICAgICAgd2FybmluZ3MucHVzaCgndXNlIGluZGV4IHNpZ25hdHVyZXMgKGBbazogc3RyaW5nXTogdHlwZWApIGluc3RlYWQgb2YgQGRpY3QnKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEdyYWIgdGhlIHBhcmFtZXRlciBuYW1lIGZyb20gQHBhcmFtIHRhZ3MuXG4gICAgICBsZXQgcGFyYW1ldGVyTmFtZTogc3RyaW5nfHVuZGVmaW5lZDtcbiAgICAgIGlmICh0YWdOYW1lID09PSAncGFyYW0nKSB7XG4gICAgICAgIG1hdGNoID0gdGV4dC5tYXRjaCgvXihcXFMrKSA/KC4qKS8pO1xuICAgICAgICBpZiAobWF0Y2gpIFtfLCBwYXJhbWV0ZXJOYW1lLCB0ZXh0XSA9IG1hdGNoO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0YWc6IFRhZyA9IHt0YWdOYW1lfTtcbiAgICAgIGlmIChwYXJhbWV0ZXJOYW1lKSB0YWcucGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlck5hbWU7XG4gICAgICBpZiAodGV4dCkgdGFnLnRleHQgPSB0ZXh0O1xuICAgICAgaWYgKHR5cGUpIHRhZy50eXBlID0gdHlwZTtcbiAgICAgIHRhZ3MucHVzaCh0YWcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUZXh0IHdpdGhvdXQgYSBwcmVjZWRpbmcgQHRhZyBvbiBpdCBpcyBlaXRoZXIgdGhlIHBsYWluIHRleHRcbiAgICAgIC8vIGRvY3VtZW50YXRpb24gb3IgYSBjb250aW51YXRpb24gb2YgYSBwcmV2aW91cyB0YWcuXG4gICAgICBpZiAodGFncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGFncy5wdXNoKHt0YWdOYW1lOiAnJywgdGV4dDogbGluZX0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGFzdFRhZyA9IHRhZ3NbdGFncy5sZW5ndGggLSAxXTtcbiAgICAgICAgbGFzdFRhZy50ZXh0ID0gKGxhc3RUYWcudGV4dCB8fCAnJykgKyAnXFxuJyArIGxpbmU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICh3YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHt0YWdzLCB3YXJuaW5nc307XG4gIH1cbiAgcmV0dXJuIHt0YWdzfTtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemVzIGEgVGFnIGludG8gYSBzdHJpbmcgdXNhYmxlIGluIGEgY29tbWVudC5cbiAqIFJldHVybnMgYSBzdHJpbmcgbGlrZSBcIiBAZm9vIHtiYXJ9IGJhelwiIChub3RlIHRoZSB3aGl0ZXNwYWNlKS5cbiAqL1xuZnVuY3Rpb24gdGFnVG9TdHJpbmcodGFnOiBUYWcsIGVzY2FwZUV4dHJhVGFncyA9IG5ldyBTZXQ8c3RyaW5nPigpKTogc3RyaW5nIHtcbiAgbGV0IG91dCA9ICcnO1xuICBpZiAodGFnLnRhZ05hbWUpIHtcbiAgICBpZiAoIUpTRE9DX1RBR1NfV0hJVEVMSVNULmhhcyh0YWcudGFnTmFtZSkgfHwgZXNjYXBlRXh0cmFUYWdzLmhhcyh0YWcudGFnTmFtZSkpIHtcbiAgICAgIC8vIEVzY2FwZSB0YWdzIHdlIGRvbid0IHVuZGVyc3RhbmQuICBUaGlzIGlzIGEgc3VidGxlXG4gICAgICAvLyBjb21wcm9taXNlIGJldHdlZW4gbXVsdGlwbGUgaXNzdWVzLlxuICAgICAgLy8gMSkgSWYgd2UgcGFzcyB0aHJvdWdoIHRoZXNlIG5vbi1DbG9zdXJlIHRhZ3MsIHRoZSB1c2VyIHdpbGxcbiAgICAgIC8vICAgIGdldCBhIHdhcm5pbmcgZnJvbSBDbG9zdXJlLCBhbmQgdGhlIHBvaW50IG9mIHRzaWNrbGUgaXNcbiAgICAgIC8vICAgIHRvIGluc3VsYXRlIHRoZSB1c2VyIGZyb20gQ2xvc3VyZS5cbiAgICAgIC8vIDIpIFRoZSBvdXRwdXQgb2YgdHNpY2tsZSBpcyBmb3IgQ2xvc3VyZSBidXQgYWxzbyBtYXkgYmUgcmVhZFxuICAgICAgLy8gICAgYnkgaHVtYW5zLCBmb3IgZXhhbXBsZSBub24tVHlwZVNjcmlwdCB1c2VycyBvZiBBbmd1bGFyLlxuICAgICAgLy8gMykgRmluYWxseSwgd2UgZG9uJ3Qgd2FudCB0byB3YXJuIGJlY2F1c2UgdXNlcnMgc2hvdWxkIGJlXG4gICAgICAvLyAgICBmcmVlIHRvIGFkZCB3aGljaGV2ZXIgSlNEb2MgdGhleSBmZWVsIGxpa2UuICBJZiB0aGUgdXNlclxuICAgICAgLy8gICAgd2FudHMgaGVscCBlbnN1cmluZyB0aGV5IGRpZG4ndCB0eXBvIGEgdGFnLCB0aGF0IGlzIHRoZVxuICAgICAgLy8gICAgcmVzcG9uc2liaWxpdHkgb2YgYSBsaW50ZXIuXG4gICAgICBvdXQgKz0gYCBcXFxcQCR7dGFnLnRhZ05hbWV9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9IGAgQCR7dGFnLnRhZ05hbWV9YDtcbiAgICB9XG4gIH1cbiAgaWYgKHRhZy50eXBlKSB7XG4gICAgb3V0ICs9ICcgeyc7XG4gICAgaWYgKHRhZy5yZXN0UGFyYW0pIHtcbiAgICAgIG91dCArPSAnLi4uJztcbiAgICB9XG4gICAgb3V0ICs9IHRhZy50eXBlO1xuICAgIGlmICh0YWcub3B0aW9uYWwpIHtcbiAgICAgIG91dCArPSAnPSc7XG4gICAgfVxuICAgIG91dCArPSAnfSc7XG4gIH1cbiAgaWYgKHRhZy5wYXJhbWV0ZXJOYW1lKSB7XG4gICAgb3V0ICs9ICcgJyArIHRhZy5wYXJhbWV0ZXJOYW1lO1xuICB9XG4gIGlmICh0YWcudGV4dCkge1xuICAgIG91dCArPSAnICcgKyB0YWcudGV4dC5yZXBsYWNlKC9AL2csICdcXFxcQCcpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBUYWdzIHRoYXQgbXVzdCBvbmx5IG9jY3VyIG9uY2VzIGluIGEgY29tbWVudCAoZmlsdGVyZWQgYmVsb3cpLiAqL1xuY29uc3QgU0lOR0xFVE9OX1RBR1MgPSBuZXcgU2V0KFsnZGVwcmVjYXRlZCddKTtcblxuLyoqIFRhZ3MgdGhhdCBjb25mbGljdCB3aXRoIFxcQHR5cGUgaW4gQ2xvc3VyZSBDb21waWxlciAoZS5nLiBcXEBwYXJhbSkuICovXG5leHBvcnQgY29uc3QgVEFHU19DT05GTElDVElOR19XSVRIX1RZUEUgPSBuZXcgU2V0KFsncGFyYW0nLCAncmV0dXJuJ10pO1xuXG4vKiogU2VyaWFsaXplcyBhIENvbW1lbnQgb3V0IHRvIGEgc3RyaW5nLCBidXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgc3RhcnQgYW5kIGVuZCBjb21tZW50IHRva2Vucy4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1N0cmluZ1dpdGhvdXRTdGFydEVuZCh0YWdzOiBUYWdbXSwgZXNjYXBlRXh0cmFUYWdzID0gbmV3IFNldDxzdHJpbmc+KCkpOiBzdHJpbmcge1xuICByZXR1cm4gc2VyaWFsaXplKHRhZ3MsIGZhbHNlLCBlc2NhcGVFeHRyYVRhZ3MpO1xufVxuXG4vKiogU2VyaWFsaXplcyBhIENvbW1lbnQgb3V0IHRvIGEgc3RyaW5nIHVzYWJsZSBpbiBzb3VyY2UgY29kZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1N0cmluZyh0YWdzOiBUYWdbXSwgZXNjYXBlRXh0cmFUYWdzID0gbmV3IFNldDxzdHJpbmc+KCkpOiBzdHJpbmcge1xuICByZXR1cm4gc2VyaWFsaXplKHRhZ3MsIHRydWUsIGVzY2FwZUV4dHJhVGFncyk7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZShcbiAgICB0YWdzOiBUYWdbXSwgaW5jbHVkZVN0YXJ0RW5kOiBib29sZWFuLCBlc2NhcGVFeHRyYVRhZ3MgPSBuZXcgU2V0PHN0cmluZz4oKSk6IHN0cmluZyB7XG4gIGlmICh0YWdzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICBpZiAodGFncy5sZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCB0YWcgPSB0YWdzWzBdO1xuICAgIGlmICgodGFnLnRhZ05hbWUgPT09ICd0eXBlJyB8fCB0YWcudGFnTmFtZSA9PT0gJ25vY29sbGFwc2UnKSAmJlxuICAgICAgICAoIXRhZy50ZXh0IHx8ICF0YWcudGV4dC5tYXRjaCgnXFxuJykpKSB7XG4gICAgICAvLyBTcGVjaWFsLWNhc2Ugb25lLWxpbmVyIFwidHlwZVwiIGFuZCBcIm5vY29sbGFwc2VcIiB0YWdzIHRvIGZpdCBvbiBvbmUgbGluZSwgZS5nLlxuICAgICAgLy8gICAvKiogQHR5cGUge2Zvb30gKi9cbiAgICAgIHJldHVybiAnLyoqJyArIHRhZ1RvU3RyaW5nKHRhZywgZXNjYXBlRXh0cmFUYWdzKSArICcgKi9cXG4nO1xuICAgIH1cbiAgICAvLyBPdGhlcndpc2UsIGZhbGwgdGhyb3VnaCB0byB0aGUgbXVsdGktbGluZSBvdXRwdXQuXG4gIH1cblxuICBsZXQgb3V0ID0gaW5jbHVkZVN0YXJ0RW5kID8gJy8qKlxcbicgOiAnKlxcbic7XG4gIGNvbnN0IGVtaXR0ZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCB0YWcgb2YgdGFncykge1xuICAgIGlmIChlbWl0dGVkLmhhcyh0YWcudGFnTmFtZSkgJiYgU0lOR0xFVE9OX1RBR1MuaGFzKHRhZy50YWdOYW1lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGVtaXR0ZWQuYWRkKHRhZy50YWdOYW1lKTtcbiAgICBvdXQgKz0gJyAqJztcbiAgICAvLyBJZiB0aGUgdGFnVG9TdHJpbmcgaXMgbXVsdGktbGluZSwgaW5zZXJ0IFwiICogXCIgcHJlZml4ZXMgb24gc3Vic2VxdWVudCBsaW5lcy5cbiAgICBvdXQgKz0gdGFnVG9TdHJpbmcodGFnLCBlc2NhcGVFeHRyYVRhZ3MpLnNwbGl0KCdcXG4nKS5qb2luKCdcXG4gKiAnKTtcbiAgICBvdXQgKz0gJ1xcbic7XG4gIH1cbiAgb3V0ICs9IGluY2x1ZGVTdGFydEVuZCA/ICcgKi9cXG4nIDogJyAnO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogTWVyZ2VzIG11bHRpcGxlIHRhZ3MgKG9mIHRoZSBzYW1lIHRhZ05hbWUgdHlwZSkgaW50byBhIHNpbmdsZSB1bmlmaWVkIHRhZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZSh0YWdzOiBUYWdbXSk6IFRhZyB7XG4gIGNvbnN0IHRhZ05hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHBhcmFtZXRlck5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHR5cGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHRleHRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIC8vIElmIGFueSBvZiB0aGUgdGFncyBhcmUgb3B0aW9uYWwvcmVzdCwgdGhlbiB0aGUgbWVyZ2VkIG91dHB1dCBpcyBvcHRpb25hbC9yZXN0LlxuICBsZXQgb3B0aW9uYWwgPSBmYWxzZTtcbiAgbGV0IHJlc3RQYXJhbSA9IGZhbHNlO1xuICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzKSB7XG4gICAgaWYgKHRhZy50YWdOYW1lKSB0YWdOYW1lcy5hZGQodGFnLnRhZ05hbWUpO1xuICAgIGlmICh0YWcucGFyYW1ldGVyTmFtZSkgcGFyYW1ldGVyTmFtZXMuYWRkKHRhZy5wYXJhbWV0ZXJOYW1lKTtcbiAgICBpZiAodGFnLnR5cGUpIHR5cGVzLmFkZCh0YWcudHlwZSk7XG4gICAgaWYgKHRhZy50ZXh0KSB0ZXh0cy5hZGQodGFnLnRleHQpO1xuICAgIGlmICh0YWcub3B0aW9uYWwpIG9wdGlvbmFsID0gdHJ1ZTtcbiAgICBpZiAodGFnLnJlc3RQYXJhbSkgcmVzdFBhcmFtID0gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0YWdOYW1lcy5zaXplICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjYW5ub3QgbWVyZ2UgZGlmZmVyaW5nIHRhZ3M6ICR7SlNPTi5zdHJpbmdpZnkodGFncyl9YCk7XG4gIH1cbiAgY29uc3QgdGFnTmFtZSA9IHRhZ05hbWVzLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgY29uc3QgcGFyYW1ldGVyTmFtZSA9XG4gICAgICBwYXJhbWV0ZXJOYW1lcy5zaXplID4gMCA/IEFycmF5LmZyb20ocGFyYW1ldGVyTmFtZXMpLmpvaW4oJ19vcl8nKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgdHlwZSA9IHR5cGVzLnNpemUgPiAwID8gQXJyYXkuZnJvbSh0eXBlcykuam9pbignfCcpIDogdW5kZWZpbmVkO1xuICBjb25zdCB0ZXh0ID0gdGV4dHMuc2l6ZSA+IDAgPyBBcnJheS5mcm9tKHRleHRzKS5qb2luKCcgLyAnKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgdGFnOiBUYWcgPSB7dGFnTmFtZSwgcGFyYW1ldGVyTmFtZSwgdHlwZSwgdGV4dH07XG4gIC8vIE5vdGU6IGEgcGFyYW0gY2FuIGVpdGhlciBiZSBvcHRpb25hbCBvciBhIHJlc3QgcGFyYW07IGlmIHdlIG1lcmdlZCBhblxuICAvLyBvcHRpb25hbCBhbmQgcmVzdCBwYXJhbSB0b2dldGhlciwgcHJlZmVyIG1hcmtpbmcgaXQgYXMgYSByZXN0IHBhcmFtLlxuICBpZiAocmVzdFBhcmFtKSB7XG4gICAgdGFnLnJlc3RQYXJhbSA9IHRydWU7XG4gIH0gZWxzZSBpZiAob3B0aW9uYWwpIHtcbiAgICB0YWcub3B0aW9uYWwgPSB0cnVlO1xuICB9XG4gIHJldHVybiB0YWc7XG59XG4iXX0=
/// <amd-module name="tsickle/src/main" />
#!/usr/bin/env node
/// <amd-module name="tsickle/src/main" />
import * as ts from './typescript';

@@ -3,0 +5,0 @@ import * as tsickle from './tsickle';

@@ -40,7 +40,8 @@ #!/usr/bin/env node

function loadSettingsFromArgs(args) {
var e_1, _a;
var settings = {};
var parsedArgs = minimist(args);
try {
for (var _a = __values(Object.keys(parsedArgs)), _b = _a.next(); !_b.done; _b = _a.next()) {
var flag = _b.value;
for (var _b = __values(Object.keys(parsedArgs)), _c = _b.next(); !_c.done; _c = _b.next()) {
var flag = _c.value;
switch (flag) {

@@ -77,3 +78,3 @@ case 'h':

try {
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}

@@ -85,3 +86,2 @@ finally { if (e_1) throw e_1.error; }

return { settings: settings, tscArgs: tscArgs };
var e_1, _c;
}

@@ -96,4 +96,5 @@ /**

function loadTscConfig(args) {
var _a;
// Gather tsc options/input files from command line.
var _a = ts.parseCommandLine(args), options = _a.options, fileNames = _a.fileNames, errors = _a.errors;
var _b = ts.parseCommandLine(args), options = _b.options, fileNames = _b.fileNames, errors = _b.errors;
if (errors.length > 0) {

@@ -107,7 +108,7 @@ return { options: {}, fileNames: [], errors: errors };

var configFileName = path.join(projectDir, 'tsconfig.json');
var _b = ts.readConfigFile(configFileName, function (path) { return fs.readFileSync(path, 'utf-8'); }), json = _b.config, error = _b.error;
var _c = ts.readConfigFile(configFileName, function (path) { return fs.readFileSync(path, 'utf-8'); }), json = _c.config, error = _c.error;
if (error) {
return { options: {}, fileNames: [], errors: [error] };
}
(_c = ts.parseJsonConfigFileContent(json, ts.sys, projectDir, options, configFileName), options = _c.options, fileNames = _c.fileNames, errors = _c.errors);
(_a = ts.parseJsonConfigFileContent(json, ts.sys, projectDir, options, configFileName), options = _a.options, fileNames = _a.fileNames, errors = _a.errors);
if (errors.length > 0) {

@@ -119,3 +120,2 @@ return { options: {}, fileNames: [], errors: errors };

return { options: options, fileNames: fileNames, errors: [] };
var _c;
}

@@ -147,3 +147,3 @@ /**

untyped: false,
logWarning: function (warning) { return console.error(tsickle.formatDiagnostics([warning])); },
logWarning: function (warning) { return console.error(ts.formatDiagnostics([warning], compilerHost)); },
options: options,

@@ -169,3 +169,3 @@ host: compilerHost,

if (config.errors.length) {
console.error(tsickle.formatDiagnostics(config.errors));
console.error(ts.formatDiagnostics(config.errors, ts.createCompilerHost(config.options)));
return 1;

@@ -186,3 +186,3 @@ }

if (result.diagnostics.length) {
console.error(tsickle.formatDiagnostics(result.diagnostics));
console.error(ts.formatDiagnostics(result.diagnostics, ts.createCompilerHost(config.options)));
return 1;

@@ -201,2 +201,2 @@ }

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFVQSx1QkFBeUI7SUFDekIsbUNBQXFDO0lBQ3JDLCtCQUFpQztJQUNqQywyQkFBNkI7SUFDN0IsMkNBQW1DO0lBRW5DLG9EQUE0QztJQUM1Qyw2Q0FBcUM7SUFDckMsK0NBQTBDO0lBQzFDLHlDQUFnRDtJQWlCaEQ7UUFDRSxPQUFPLENBQUMsS0FBSyxDQUFDLGdZQVNmLENBQUMsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCw4QkFBOEIsSUFBYztRQUMxQyxJQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7UUFDOUIsSUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDOztZQUNsQyxLQUFtQixJQUFBLEtBQUEsU0FBQSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBLGdCQUFBO2dCQUFyQyxJQUFNLElBQUksV0FBQTtnQkFDYixRQUFRLElBQUksRUFBRTtvQkFDWixLQUFLLEdBQUcsQ0FBQztvQkFDVCxLQUFLLE1BQU07d0JBQ1QsS0FBSyxFQUFFLENBQUM7d0JBQ1IsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDaEIsTUFBTTtvQkFDUixLQUFLLFNBQVM7d0JBQ1osUUFBUSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3hDLE1BQU07b0JBQ1IsS0FBSyxPQUFPO3dCQUNWLFFBQVEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO3dCQUN4QixNQUFNO29CQUNSLEtBQUssU0FBUzt3QkFDWixRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzt3QkFDeEIsTUFBTTtvQkFDUixLQUFLLG9CQUFvQjt3QkFDdkIsUUFBUSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQzt3QkFD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O1NBQ1Y7UUFFRCxJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUU7WUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ2hELEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDckY7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtRQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDNUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5cbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgbWluaW1pc3QgZnJvbSAnbWluaW1pc3QnO1xuaW1wb3J0ICogYXMgbWtkaXJwIGZyb20gJ21rZGlycCc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAnLi90eXBlc2NyaXB0JztcblxuaW1wb3J0ICogYXMgY2xpU3VwcG9ydCBmcm9tICcuL2NsaV9zdXBwb3J0JztcbmltcG9ydCAqIGFzIHRzaWNrbGUgZnJvbSAnLi90c2lja2xlJztcbmltcG9ydCB7TW9kdWxlc01hbmlmZXN0fSBmcm9tICcuL3RzaWNrbGUnO1xuaW1wb3J0IHtnZXRDb21tb25QYXJlbnREaXJlY3Rvcnl9IGZyb20gJy4vdXRpbCc7XG5cbi8qKiBUc2lja2xlIHNldHRpbmdzIHBhc3NlZCBvbiB0aGUgY29tbWFuZCBsaW5lLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXR0aW5ncyB7XG4gIC8qKiBJZiBwcm92aWRlZCwgZG8gbm90IG1vZGlmeSBxdW90aW5nIG9mIHByb3BlcnR5IGFjY2Vzc2VzLiAqL1xuICBkaXNhYmxlQXV0b1F1b3Rpbmc/OiBib29sZWFuO1xuXG4gIC8qKiBJZiBwcm92aWRlZCwgcGF0aCB0byBzYXZlIGV4dGVybnMgdG8uICovXG4gIGV4dGVybnNQYXRoPzogc3RyaW5nO1xuXG4gIC8qKiBJZiBwcm92aWRlZCwgYXR0ZW1wdCB0byBwcm92aWRlIHR5cGVzIHJhdGhlciB0aGFuIHs/fS4gKi9cbiAgaXNUeXBlZD86IGJvb2xlYW47XG5cbiAgLyoqIElmIHRydWUsIGxvZyBpbnRlcm5hbCBkZWJ1ZyB3YXJuaW5ncyB0byB0aGUgY29uc29sZS4gKi9cbiAgdmVyYm9zZT86IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIHVzYWdlKCkge1xuICBjb25zb2xlLmVycm9yKGB1c2FnZTogdHNpY2tsZSBbdHNpY2tsZSBvcHRpb25zXSAtLSBbdHNjIG9wdGlvbnNdXG5cbmV4YW1wbGU6XG4gIHRzaWNrbGUgLS1leHRlcm5zPWZvby9leHRlcm5zLmpzIC0tIC1wIHNyYyAtLW5vSW1wbGljaXRBbnlcblxudHNpY2tsZSBmbGFncyBhcmU6XG4gIC0tZXh0ZXJucz1QQVRIICAgICAgICBzYXZlIGdlbmVyYXRlZCBDbG9zdXJlIGV4dGVybnMuanMgdG8gUEFUSFxuICAtLXR5cGVkICAgICAgICAgICAgICAgW2V4cGVyaW1lbnRhbF0gYXR0ZW1wdCB0byBwcm92aWRlIENsb3N1cmUgdHlwZXMgaW5zdGVhZCBvZiB7P31cbiAgLS1kaXNhYmxlQXV0b1F1b3RpbmcgIGRvIG5vdCBhdXRvbWF0aWNhbGx5IGFwcGx5IHF1b3RlcyB0byBwcm9wZXJ0eSBhY2Nlc3Nlc1xuYCk7XG59XG5cbi8qKlxuICogUGFyc2VzIHRoZSBjb21tYW5kLWxpbmUgYXJndW1lbnRzLCBleHRyYWN0aW5nIHRoZSB0c2lja2xlIHNldHRpbmdzIGFuZFxuICogdGhlIGFyZ3VtZW50cyB0byBwYXNzIG9uIHRvIHRzYy5cbiAqL1xuZnVuY3Rpb24gbG9hZFNldHRpbmdzRnJvbUFyZ3MoYXJnczogc3RyaW5nW10pOiB7c2V0dGluZ3M6IFNldHRpbmdzLCB0c2NBcmdzOiBzdHJpbmdbXX0ge1xuICBjb25zdCBzZXR0aW5nczogU2V0dGluZ3MgPSB7fTtcbiAgY29uc3QgcGFyc2VkQXJncyA9IG1pbmltaXN0KGFyZ3MpO1xuICBmb3IgKGNvbnN0IGZsYWcgb2YgT2JqZWN0LmtleXMocGFyc2VkQXJncykpIHtcbiAgICBzd2l0Y2ggKGZsYWcpIHtcbiAgICAgIGNhc2UgJ2gnOlxuICAgICAgY2FzZSAnaGVscCc6XG4gICAgICAgIHVzYWdlKCk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdleHRlcm5zJzpcbiAgICAgICAgc2V0dGluZ3MuZXh0ZXJuc1BhdGggPSBwYXJzZWRBcmdzW2ZsYWddO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3R5cGVkJzpcbiAgICAgICAgc2V0dGluZ3MuaXNUeXBlZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndmVyYm9zZSc6XG4gICAgICAgIHNldHRpbmdzLnZlcmJvc2UgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Rpc2FibGVBdXRvUXVvdGluZyc6XG4gICAgICAgIHNldHRpbmdzLmRpc2FibGVBdXRvUXVvdGluZyA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnXyc6XG4gICAgICAgIC8vIFRoaXMgaXMgcGFydCBvZiB0aGUgbWluaW1pc3QgQVBJLCBhbmQgaG9sZHMgYXJncyBhZnRlciB0aGUgJy0tJy5cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zb2xlLmVycm9yKGB1bmtub3duIGZsYWcgJy0tJHtmbGFnfSdgKTtcbiAgICAgICAgdXNhZ2UoKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfVxuICAvLyBBcmd1bWVudHMgYWZ0ZXIgdGhlICctLScgYXJnIGFyZSBhcmd1bWVudHMgdG8gdHNjLlxuICBjb25zdCB0c2NBcmdzID0gcGFyc2VkQXJnc1snXyddO1xuICByZXR1cm4ge3NldHRpbmdzLCB0c2NBcmdzfTtcbn1cblxuLyoqXG4gKiBMb2FkcyB0aGUgdHNjb25maWcuanNvbiBmcm9tIGEgZGlyZWN0b3J5LlxuICpcbiAqIFRPRE8obWFydGlucHJvYnN0KTogdXNlIHRzLmZpbmRDb25maWdGaWxlIHRvIG1hdGNoIHRzYyBiZWhhdmlvdXIuXG4gKlxuICogQHBhcmFtIGFyZ3MgdHNjIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuXG4gKi9cbmZ1bmN0aW9uIGxvYWRUc2NDb25maWcoYXJnczogc3RyaW5nW10pOlxuICAgIHtvcHRpb25zOiB0cy5Db21waWxlck9wdGlvbnMsIGZpbGVOYW1lczogc3RyaW5nW10sIGVycm9yczogdHMuRGlhZ25vc3RpY1tdfSB7XG4gIC8vIEdhdGhlciB0c2Mgb3B0aW9ucy9pbnB1dCBmaWxlcyBmcm9tIGNvbW1hbmQgbGluZS5cbiAgbGV0IHtvcHRpb25zLCBmaWxlTmFtZXMsIGVycm9yc30gPSB0cy5wYXJzZUNvbW1hbmRMaW5lKGFyZ3MpO1xuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4ge29wdGlvbnM6IHt9LCBmaWxlTmFtZXM6IFtdLCBlcnJvcnN9O1xuICB9XG5cbiAgLy8gU3RvcmUgZmlsZSBhcmd1bWVudHNcbiAgY29uc3QgdHNGaWxlQXJndW1lbnRzID0gZmlsZU5hbWVzO1xuXG4gIC8vIFJlYWQgZnVydGhlciBzZXR0aW5ncyBmcm9tIHRzY29uZmlnLmpzb24uXG4gIGNvbnN0IHByb2plY3REaXIgPSBvcHRpb25zLnByb2plY3QgfHwgJy4nO1xuICBjb25zdCBjb25maWdGaWxlTmFtZSA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAndHNjb25maWcuanNvbicpO1xuICBjb25zdCB7Y29uZmlnOiBqc29uLCBlcnJvcn0gPVxuICAgICAgdHMucmVhZENvbmZpZ0ZpbGUoY29uZmlnRmlsZU5hbWUsIHBhdGggPT4gZnMucmVhZEZpbGVTeW5jKHBhdGgsICd1dGYtOCcpKTtcbiAgaWYgKGVycm9yKSB7XG4gICAgcmV0dXJuIHtvcHRpb25zOiB7fSwgZmlsZU5hbWVzOiBbXSwgZXJyb3JzOiBbZXJyb3JdfTtcbiAgfVxuICAoe29wdGlvbnMsIGZpbGVOYW1lcywgZXJyb3JzfSA9XG4gICAgICAgdHMucGFyc2VKc29uQ29uZmlnRmlsZUNvbnRlbnQoanNvbiwgdHMuc3lzLCBwcm9qZWN0RGlyLCBvcHRpb25zLCBjb25maWdGaWxlTmFtZSkpO1xuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4ge29wdGlvbnM6IHt9LCBmaWxlTmFtZXM6IFtdLCBlcnJvcnN9O1xuICB9XG5cbiAgLy8gaWYgZmlsZSBhcmd1bWVudHMgd2VyZSBnaXZlbiB0byB0aGUgdHlwZXNjcmlwdCB0cmFuc3BpbGVyIHRoZW4gdHJhbnNwaWxlIG9ubHkgdGhvc2UgZmlsZXNcbiAgZmlsZU5hbWVzID0gdHNGaWxlQXJndW1lbnRzLmxlbmd0aCA+IDAgPyB0c0ZpbGVBcmd1bWVudHMgOiBmaWxlTmFtZXM7XG5cbiAgcmV0dXJuIHtvcHRpb25zLCBmaWxlTmFtZXMsIGVycm9yczogW119O1xufVxuXG4vKipcbiAqIENvbXBpbGVzIFR5cGVTY3JpcHQgY29kZSBpbnRvIENsb3N1cmUtY29tcGlsZXItcmVhZHkgSlMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0Nsb3N1cmVKUyhcbiAgICBvcHRpb25zOiB0cy5Db21waWxlck9wdGlvbnMsIGZpbGVOYW1lczogc3RyaW5nW10sIHNldHRpbmdzOiBTZXR0aW5ncyxcbiAgICB3cml0ZUZpbGU/OiB0cy5Xcml0ZUZpbGVDYWxsYmFjayk6IHRzaWNrbGUuRW1pdFJlc3VsdCB7XG4gIC8vIFVzZSBhYnNvbHV0ZSBwYXRocyB0byBkZXRlcm1pbmUgd2hhdCBmaWxlcyB0byBwcm9jZXNzIHNpbmNlIGZpbGVzIG1heSBiZSBpbXBvcnRlZCB1c2luZ1xuICAvLyByZWxhdGl2ZSBvciBhYnNvbHV0ZSBwYXRoc1xuICBjb25zdCBhYnNvbHV0ZUZpbGVOYW1lcyA9IGZpbGVOYW1lcy5tYXAoaSA9PiBwYXRoLnJlc29sdmUoaSkpO1xuXG4gIGNvbnN0IGNvbXBpbGVySG9zdCA9IHRzLmNyZWF0ZUNvbXBpbGVySG9zdChvcHRpb25zKTtcbiAgY29uc3QgcHJvZ3JhbSA9IHRzLmNyZWF0ZVByb2dyYW0oZmlsZU5hbWVzLCBvcHRpb25zLCBjb21waWxlckhvc3QpO1xuICBjb25zdCBmaWxlc1RvUHJvY2VzcyA9IG5ldyBTZXQoYWJzb2x1dGVGaWxlTmFtZXMpO1xuICBjb25zdCByb290TW9kdWxlUGF0aCA9IG9wdGlvbnMucm9vdERpciB8fCBnZXRDb21tb25QYXJlbnREaXJlY3RvcnkoYWJzb2x1dGVGaWxlTmFtZXMpO1xuICBjb25zdCB0cmFuc2Zvcm1lckhvc3Q6IHRzaWNrbGUuVHNpY2tsZUhvc3QgPSB7XG4gICAgc2hvdWxkU2tpcFRzaWNrbGVQcm9jZXNzaW5nOiAoZmlsZU5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgcmV0dXJuICFmaWxlc1RvUHJvY2Vzcy5oYXMocGF0aC5yZXNvbHZlKGZpbGVOYW1lKSk7XG4gICAgfSxcbiAgICBzaG91bGRJZ25vcmVXYXJuaW5nc0ZvclBhdGg6IChmaWxlTmFtZTogc3RyaW5nKSA9PiBmYWxzZSxcbiAgICBwYXRoVG9Nb2R1bGVOYW1lOiBjbGlTdXBwb3J0LnBhdGhUb01vZHVsZU5hbWUuYmluZChudWxsLCByb290TW9kdWxlUGF0aCksXG4gICAgZmlsZU5hbWVUb01vZHVsZUlkOiAoZmlsZU5hbWUpID0+IHBhdGgucmVsYXRpdmUocm9vdE1vZHVsZVBhdGgsIGZpbGVOYW1lKSxcbiAgICBlczVNb2RlOiB0cnVlLFxuICAgIGdvb2dtb2R1bGU6IHRydWUsXG4gICAgdHJhbnNmb3JtRGVjb3JhdG9yczogdHJ1ZSxcbiAgICB0cmFuc2Zvcm1UeXBlc1RvQ2xvc3VyZTogdHJ1ZSxcbiAgICB0eXBlQmxhY2tMaXN0UGF0aHM6IG5ldyBTZXQoKSxcbiAgICBkaXNhYmxlQXV0b1F1b3Rpbmc6IHNldHRpbmdzLmRpc2FibGVBdXRvUXVvdGluZyxcbiAgICB1bnR5cGVkOiBmYWxzZSxcbiAgICBsb2dXYXJuaW5nOiAod2FybmluZykgPT4gY29uc29sZS5lcnJvcih0c2lja2xlLmZvcm1hdERpYWdub3N0aWNzKFt3YXJuaW5nXSkpLFxuICAgIG9wdGlvbnMsXG4gICAgaG9zdDogY29tcGlsZXJIb3N0LFxuICB9O1xuICBjb25zdCBkaWFnbm9zdGljcyA9IHRzLmdldFByZUVtaXREaWFnbm9zdGljcyhwcm9ncmFtKTtcbiAgaWYgKGRpYWdub3N0aWNzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGlhZ25vc3RpY3MsXG4gICAgICBtb2R1bGVzTWFuaWZlc3Q6IG5ldyBNb2R1bGVzTWFuaWZlc3QoKSxcbiAgICAgIGV4dGVybnM6IHt9LFxuICAgICAgZW1pdFNraXBwZWQ6IHRydWUsXG4gICAgICBlbWl0dGVkRmlsZXM6IFtdLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHRzaWNrbGUuZW1pdFdpdGhUc2lja2xlKFxuICAgICAgcHJvZ3JhbSwgdHJhbnNmb3JtZXJIb3N0LCBjb21waWxlckhvc3QsIG9wdGlvbnMsIHVuZGVmaW5lZCwgd3JpdGVGaWxlKTtcbn1cblxuZnVuY3Rpb24gbWFpbihhcmdzOiBzdHJpbmdbXSk6IG51bWJlciB7XG4gIGNvbnN0IHtzZXR0aW5ncywgdHNjQXJnc30gPSBsb2FkU2V0dGluZ3NGcm9tQXJncyhhcmdzKTtcbiAgY29uc3QgY29uZmlnID0gbG9hZFRzY0NvbmZpZyh0c2NBcmdzKTtcbiAgaWYgKGNvbmZpZy5lcnJvcnMubGVuZ3RoKSB7XG4gICAgY29uc29sZS5lcnJvcih0c2lja2xlLmZvcm1hdERpYWdub3N0aWNzKGNvbmZpZy5lcnJvcnMpKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGlmIChjb25maWcub3B0aW9ucy5tb2R1bGUgIT09IHRzLk1vZHVsZUtpbmQuQ29tbW9uSlMpIHtcbiAgICAvLyBUaGlzIGlzIG5vdCBhbiB1cHN0cmVhbSBUeXBlU2NyaXB0IGRpYWdub3N0aWMsIHRoZXJlZm9yZSBpdCBkb2VzIG5vdCBnb1xuICAgIC8vIHRocm91Z2ggdGhlIGRpYWdub3N0aWNzIGFycmF5IG1lY2hhbmlzbS5cbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAndHNpY2tsZSBjb252ZXJ0cyBUeXBlU2NyaXB0IG1vZHVsZXMgdG8gQ2xvc3VyZSBtb2R1bGVzIHZpYSBDb21tb25KUyBpbnRlcm5hbGx5LiAnICtcbiAgICAgICAgJ1NldCB0c2NvbmZpZy5qcyBcIm1vZHVsZVwiOiBcImNvbW1vbmpzXCInKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIC8vIFJ1biB0c2lja2xlK1RTQyB0byBjb252ZXJ0IGlucHV0cyB0byBDbG9zdXJlIEpTIGZpbGVzLlxuICBjb25zdCByZXN1bHQgPSB0b0Nsb3N1cmVKUyhcbiAgICAgIGNvbmZpZy5vcHRpb25zLCBjb25maWcuZmlsZU5hbWVzLCBzZXR0aW5ncywgKGZpbGVQYXRoOiBzdHJpbmcsIGNvbnRlbnRzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgbWtkaXJwLnN5bmMocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSk7XG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIGNvbnRlbnRzLCB7ZW5jb2Rpbmc6ICd1dGYtOCd9KTtcbiAgICAgIH0pO1xuICBpZiAocmVzdWx0LmRpYWdub3N0aWNzLmxlbmd0aCkge1xuICAgIGNvbnNvbGUuZXJyb3IodHNpY2tsZS5mb3JtYXREaWFnbm9zdGljcyhyZXN1bHQuZGlhZ25vc3RpY3MpKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGlmIChzZXR0aW5ncy5leHRlcm5zUGF0aCkge1xuICAgIG1rZGlycC5zeW5jKHBhdGguZGlybmFtZShzZXR0aW5ncy5leHRlcm5zUGF0aCkpO1xuICAgIGZzLndyaXRlRmlsZVN5bmMoc2V0dGluZ3MuZXh0ZXJuc1BhdGgsIHRzaWNrbGUuZ2V0R2VuZXJhdGVkRXh0ZXJucyhyZXN1bHQuZXh0ZXJucykpO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vLyBDTEkgZW50cnkgcG9pbnRcbmlmIChyZXF1aXJlLm1haW4gPT09IG1vZHVsZSkge1xuICBwcm9jZXNzLmV4aXQobWFpbihwcm9jZXNzLmFyZ3Yuc3BsaWNlKDIpKSk7XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFVQSx1QkFBeUI7SUFDekIsbUNBQXFDO0lBQ3JDLCtCQUFpQztJQUNqQywyQkFBNkI7SUFDN0IsMkNBQW1DO0lBRW5DLG9EQUE0QztJQUM1Qyw2Q0FBcUM7SUFDckMsK0NBQTBDO0lBQzFDLHlDQUFnRDtJQWlCaEQ7UUFDRSxPQUFPLENBQUMsS0FBSyxDQUFDLGdZQVNmLENBQUMsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCw4QkFBOEIsSUFBYzs7UUFDMUMsSUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFDO1FBQzlCLElBQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7WUFDbEMsS0FBbUIsSUFBQSxLQUFBLFNBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQSxnQkFBQSw0QkFBRTtnQkFBdkMsSUFBTSxJQUFJLFdBQUE7Z0JBQ2IsUUFBUSxJQUFJLEVBQUU7b0JBQ1osS0FBSyxHQUFHLENBQUM7b0JBQ1QsS0FBSyxNQUFNO3dCQUNULEtBQUssRUFBRSxDQUFDO3dCQUNSLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2hCLE1BQU07b0JBQ1IsS0FBSyxTQUFTO3dCQUNaLFFBQVEsQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUN4QyxNQUFNO29CQUNSLEtBQUssT0FBTzt3QkFDVixRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzt3QkFDeEIsTUFBTTtvQkFDUixLQUFLLFNBQVM7d0JBQ1osUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7d0JBQ3hCLE1BQU07b0JBQ1IsS0FBSyxvQkFBb0I7d0JBQ3ZCLFFBQVEsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7d0JBQ25DLE1BQU07b0JBQ1IsS0FBSyxHQUFHO3dCQUNOLG1FQUFtRTt3QkFDbkUsTUFBTTtvQkFDUjt3QkFDRSxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFtQixJQUFJLE1BQUcsQ0FBQyxDQUFDO3dCQUMxQyxLQUFLLEVBQUUsQ0FBQzt3QkFDUixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNuQjthQUNGOzs7Ozs7Ozs7UUFDRCxxREFBcUQ7UUFDckQsSUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sRUFBQyxRQUFRLFVBQUEsRUFBRSxPQUFPLFNBQUEsRUFBQyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCx1QkFBdUIsSUFBYzs7UUFFbkMsb0RBQW9EO1FBQ2hELElBQUEsOEJBQXdELEVBQXZELG9CQUFPLEVBQUUsd0JBQVMsRUFBRSxrQkFBTSxDQUE4QjtRQUM3RCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JCLE9BQU8sRUFBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFBLEVBQUMsQ0FBQztTQUM3QztRQUVELHVCQUF1QjtRQUN2QixJQUFNLGVBQWUsR0FBRyxTQUFTLENBQUM7UUFFbEMsNENBQTRDO1FBQzVDLElBQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDO1FBQzFDLElBQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3hELElBQUEsa0dBQ3VFLEVBRHRFLGdCQUFZLEVBQUUsZ0JBQUssQ0FDb0Q7UUFDOUUsSUFBSSxLQUFLLEVBQUU7WUFDVCxPQUFPLEVBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUM7U0FDdEQ7UUFDRCxDQUFDLHFGQUNvRixFQURuRixvQkFBTyxFQUFFLHdCQUFTLEVBQUUsa0JBQU0sQ0FDMEQsQ0FBQztRQUN2RixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JCLE9BQU8sRUFBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFBLEVBQUMsQ0FBQztTQUM3QztRQUVELDRGQUE0RjtRQUM1RixTQUFTLEdBQUcsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRXJFLE9BQU8sRUFBQyxPQUFPLFNBQUEsRUFBRSxTQUFTLFdBQUEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gscUJBQ0ksT0FBMkIsRUFBRSxTQUFtQixFQUFFLFFBQWtCLEVBQ3BFLFNBQWdDO1FBQ2xDLDBGQUEwRjtRQUMxRiw2QkFBNkI7UUFDN0IsSUFBTSxpQkFBaUIsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBZixDQUFlLENBQUMsQ0FBQztRQUU5RCxJQUFNLFlBQVksR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEQsSUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ25FLElBQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDbEQsSUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSwrQkFBd0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3RGLElBQU0sZUFBZSxHQUF3QjtZQUMzQywyQkFBMkIsRUFBRSxVQUFDLFFBQWdCO2dCQUM1QyxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDckQsQ0FBQztZQUNELDJCQUEyQixFQUFFLFVBQUMsUUFBZ0IsSUFBSyxPQUFBLEtBQUssRUFBTCxDQUFLO1lBQ3hELGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQztZQUN4RSxrQkFBa0IsRUFBRSxVQUFDLFFBQVEsSUFBSyxPQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxFQUF2QyxDQUF1QztZQUN6RSxPQUFPLEVBQUUsSUFBSTtZQUNiLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLG1CQUFtQixFQUFFLElBQUk7WUFDekIsdUJBQXVCLEVBQUUsSUFBSTtZQUM3QixrQkFBa0IsRUFBRSxJQUFJLEdBQUcsRUFBRTtZQUM3QixrQkFBa0IsRUFBRSxRQUFRLENBQUMsa0JBQWtCO1lBQy9DLE9BQU8sRUFBRSxLQUFLO1lBQ2QsVUFBVSxFQUFFLFVBQUMsT0FBTyxJQUFLLE9BQUEsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxFQUE1RCxDQUE0RDtZQUNyRixPQUFPLFNBQUE7WUFDUCxJQUFJLEVBQUUsWUFBWTtTQUNuQixDQUFDO1FBQ0YsSUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDMUIsT0FBTztnQkFDTCxXQUFXLGFBQUE7Z0JBQ1gsZUFBZSxFQUFFLElBQUkseUJBQWUsRUFBRTtnQkFDdEMsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLFlBQVksRUFBRSxFQUFFO2FBQ2pCLENBQUM7U0FDSDtRQUNELE9BQU8sT0FBTyxDQUFDLGVBQWUsQ0FDMUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBekNELGtDQXlDQztJQUVELGNBQWMsSUFBYztRQUNwQixJQUFBLCtCQUFnRCxFQUEvQyxzQkFBUSxFQUFFLG9CQUFPLENBQStCO1FBQ3ZELElBQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQ3hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUYsT0FBTyxDQUFDLENBQUM7U0FDVjtRQUVELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7WUFDcEQsMEVBQTBFO1lBQzFFLDJDQUEyQztZQUMzQyxPQUFPLENBQUMsS0FBSyxDQUNULGtGQUFrRjtnQkFDbEYsc0NBQXNDLENBQUMsQ0FBQztZQUM1QyxPQUFPLENBQUMsQ0FBQztTQUNWO1FBRUQseURBQXlEO1FBQ3pELElBQU0sTUFBTSxHQUFHLFdBQVcsQ0FDdEIsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFDLFFBQWdCLEVBQUUsUUFBZ0I7WUFDN0UsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDcEMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQUM7UUFDUCxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFO1lBQzdCLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0YsT0FBTyxDQUFDLENBQUM7U0FDVjtRQUVELElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRTtZQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDaEQsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNyRjtRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO1FBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1QyIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBtaW5pbWlzdCBmcm9tICdtaW5pbWlzdCc7XG5pbXBvcnQgKiBhcyBta2RpcnAgZnJvbSAnbWtkaXJwJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICcuL3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQgKiBhcyBjbGlTdXBwb3J0IGZyb20gJy4vY2xpX3N1cHBvcnQnO1xuaW1wb3J0ICogYXMgdHNpY2tsZSBmcm9tICcuL3RzaWNrbGUnO1xuaW1wb3J0IHtNb2R1bGVzTWFuaWZlc3R9IGZyb20gJy4vdHNpY2tsZSc7XG5pbXBvcnQge2dldENvbW1vblBhcmVudERpcmVjdG9yeX0gZnJvbSAnLi91dGlsJztcblxuLyoqIFRzaWNrbGUgc2V0dGluZ3MgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUuICovXG5leHBvcnQgaW50ZXJmYWNlIFNldHRpbmdzIHtcbiAgLyoqIElmIHByb3ZpZGVkLCBkbyBub3QgbW9kaWZ5IHF1b3Rpbmcgb2YgcHJvcGVydHkgYWNjZXNzZXMuICovXG4gIGRpc2FibGVBdXRvUXVvdGluZz86IGJvb2xlYW47XG5cbiAgLyoqIElmIHByb3ZpZGVkLCBwYXRoIHRvIHNhdmUgZXh0ZXJucyB0by4gKi9cbiAgZXh0ZXJuc1BhdGg/OiBzdHJpbmc7XG5cbiAgLyoqIElmIHByb3ZpZGVkLCBhdHRlbXB0IHRvIHByb3ZpZGUgdHlwZXMgcmF0aGVyIHRoYW4gez99LiAqL1xuICBpc1R5cGVkPzogYm9vbGVhbjtcblxuICAvKiogSWYgdHJ1ZSwgbG9nIGludGVybmFsIGRlYnVnIHdhcm5pbmdzIHRvIHRoZSBjb25zb2xlLiAqL1xuICB2ZXJib3NlPzogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gdXNhZ2UoKSB7XG4gIGNvbnNvbGUuZXJyb3IoYHVzYWdlOiB0c2lja2xlIFt0c2lja2xlIG9wdGlvbnNdIC0tIFt0c2Mgb3B0aW9uc11cblxuZXhhbXBsZTpcbiAgdHNpY2tsZSAtLWV4dGVybnM9Zm9vL2V4dGVybnMuanMgLS0gLXAgc3JjIC0tbm9JbXBsaWNpdEFueVxuXG50c2lja2xlIGZsYWdzIGFyZTpcbiAgLS1leHRlcm5zPVBBVEggICAgICAgIHNhdmUgZ2VuZXJhdGVkIENsb3N1cmUgZXh0ZXJucy5qcyB0byBQQVRIXG4gIC0tdHlwZWQgICAgICAgICAgICAgICBbZXhwZXJpbWVudGFsXSBhdHRlbXB0IHRvIHByb3ZpZGUgQ2xvc3VyZSB0eXBlcyBpbnN0ZWFkIG9mIHs/fVxuICAtLWRpc2FibGVBdXRvUXVvdGluZyAgZG8gbm90IGF1dG9tYXRpY2FsbHkgYXBwbHkgcXVvdGVzIHRvIHByb3BlcnR5IGFjY2Vzc2VzXG5gKTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMsIGV4dHJhY3RpbmcgdGhlIHRzaWNrbGUgc2V0dGluZ3MgYW5kXG4gKiB0aGUgYXJndW1lbnRzIHRvIHBhc3Mgb24gdG8gdHNjLlxuICovXG5mdW5jdGlvbiBsb2FkU2V0dGluZ3NGcm9tQXJncyhhcmdzOiBzdHJpbmdbXSk6IHtzZXR0aW5nczogU2V0dGluZ3MsIHRzY0FyZ3M6IHN0cmluZ1tdfSB7XG4gIGNvbnN0IHNldHRpbmdzOiBTZXR0aW5ncyA9IHt9O1xuICBjb25zdCBwYXJzZWRBcmdzID0gbWluaW1pc3QoYXJncyk7XG4gIGZvciAoY29uc3QgZmxhZyBvZiBPYmplY3Qua2V5cyhwYXJzZWRBcmdzKSkge1xuICAgIHN3aXRjaCAoZmxhZykge1xuICAgICAgY2FzZSAnaCc6XG4gICAgICBjYXNlICdoZWxwJzpcbiAgICAgICAgdXNhZ2UoKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V4dGVybnMnOlxuICAgICAgICBzZXR0aW5ncy5leHRlcm5zUGF0aCA9IHBhcnNlZEFyZ3NbZmxhZ107XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndHlwZWQnOlxuICAgICAgICBzZXR0aW5ncy5pc1R5cGVkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd2ZXJib3NlJzpcbiAgICAgICAgc2V0dGluZ3MudmVyYm9zZSA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGlzYWJsZUF1dG9RdW90aW5nJzpcbiAgICAgICAgc2V0dGluZ3MuZGlzYWJsZUF1dG9RdW90aW5nID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdfJzpcbiAgICAgICAgLy8gVGhpcyBpcyBwYXJ0IG9mIHRoZSBtaW5pbWlzdCBBUEksIGFuZCBob2xkcyBhcmdzIGFmdGVyIHRoZSAnLS0nLlxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYHVua25vd24gZmxhZyAnLS0ke2ZsYWd9J2ApO1xuICAgICAgICB1c2FnZSgpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9XG4gIC8vIEFyZ3VtZW50cyBhZnRlciB0aGUgJy0tJyBhcmcgYXJlIGFyZ3VtZW50cyB0byB0c2MuXG4gIGNvbnN0IHRzY0FyZ3MgPSBwYXJzZWRBcmdzWydfJ107XG4gIHJldHVybiB7c2V0dGluZ3MsIHRzY0FyZ3N9O1xufVxuXG4vKipcbiAqIExvYWRzIHRoZSB0c2NvbmZpZy5qc29uIGZyb20gYSBkaXJlY3RvcnkuXG4gKlxuICogVE9ETyhtYXJ0aW5wcm9ic3QpOiB1c2UgdHMuZmluZENvbmZpZ0ZpbGUgdG8gbWF0Y2ggdHNjIGJlaGF2aW91ci5cbiAqXG4gKiBAcGFyYW0gYXJncyB0c2MgY29tbWFuZC1saW5lIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gbG9hZFRzY0NvbmZpZyhhcmdzOiBzdHJpbmdbXSk6XG4gICAge29wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucywgZmlsZU5hbWVzOiBzdHJpbmdbXSwgZXJyb3JzOiB0cy5EaWFnbm9zdGljW119IHtcbiAgLy8gR2F0aGVyIHRzYyBvcHRpb25zL2lucHV0IGZpbGVzIGZyb20gY29tbWFuZCBsaW5lLlxuICBsZXQge29wdGlvbnMsIGZpbGVOYW1lcywgZXJyb3JzfSA9IHRzLnBhcnNlQ29tbWFuZExpbmUoYXJncyk7XG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB7b3B0aW9uczoge30sIGZpbGVOYW1lczogW10sIGVycm9yc307XG4gIH1cblxuICAvLyBTdG9yZSBmaWxlIGFyZ3VtZW50c1xuICBjb25zdCB0c0ZpbGVBcmd1bWVudHMgPSBmaWxlTmFtZXM7XG5cbiAgLy8gUmVhZCBmdXJ0aGVyIHNldHRpbmdzIGZyb20gdHNjb25maWcuanNvbi5cbiAgY29uc3QgcHJvamVjdERpciA9IG9wdGlvbnMucHJvamVjdCB8fCAnLic7XG4gIGNvbnN0IGNvbmZpZ0ZpbGVOYW1lID0gcGF0aC5qb2luKHByb2plY3REaXIsICd0c2NvbmZpZy5qc29uJyk7XG4gIGNvbnN0IHtjb25maWc6IGpzb24sIGVycm9yfSA9XG4gICAgICB0cy5yZWFkQ29uZmlnRmlsZShjb25maWdGaWxlTmFtZSwgcGF0aCA9PiBmcy5yZWFkRmlsZVN5bmMocGF0aCwgJ3V0Zi04JykpO1xuICBpZiAoZXJyb3IpIHtcbiAgICByZXR1cm4ge29wdGlvbnM6IHt9LCBmaWxlTmFtZXM6IFtdLCBlcnJvcnM6IFtlcnJvcl19O1xuICB9XG4gICh7b3B0aW9ucywgZmlsZU5hbWVzLCBlcnJvcnN9ID1cbiAgICAgICB0cy5wYXJzZUpzb25Db25maWdGaWxlQ29udGVudChqc29uLCB0cy5zeXMsIHByb2plY3REaXIsIG9wdGlvbnMsIGNvbmZpZ0ZpbGVOYW1lKSk7XG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB7b3B0aW9uczoge30sIGZpbGVOYW1lczogW10sIGVycm9yc307XG4gIH1cblxuICAvLyBpZiBmaWxlIGFyZ3VtZW50cyB3ZXJlIGdpdmVuIHRvIHRoZSB0eXBlc2NyaXB0IHRyYW5zcGlsZXIgdGhlbiB0cmFuc3BpbGUgb25seSB0aG9zZSBmaWxlc1xuICBmaWxlTmFtZXMgPSB0c0ZpbGVBcmd1bWVudHMubGVuZ3RoID4gMCA/IHRzRmlsZUFyZ3VtZW50cyA6IGZpbGVOYW1lcztcblxuICByZXR1cm4ge29wdGlvbnMsIGZpbGVOYW1lcywgZXJyb3JzOiBbXX07XG59XG5cbi8qKlxuICogQ29tcGlsZXMgVHlwZVNjcmlwdCBjb2RlIGludG8gQ2xvc3VyZS1jb21waWxlci1yZWFkeSBKUy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ2xvc3VyZUpTKFxuICAgIG9wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucywgZmlsZU5hbWVzOiBzdHJpbmdbXSwgc2V0dGluZ3M6IFNldHRpbmdzLFxuICAgIHdyaXRlRmlsZT86IHRzLldyaXRlRmlsZUNhbGxiYWNrKTogdHNpY2tsZS5FbWl0UmVzdWx0IHtcbiAgLy8gVXNlIGFic29sdXRlIHBhdGhzIHRvIGRldGVybWluZSB3aGF0IGZpbGVzIHRvIHByb2Nlc3Mgc2luY2UgZmlsZXMgbWF5IGJlIGltcG9ydGVkIHVzaW5nXG4gIC8vIHJlbGF0aXZlIG9yIGFic29sdXRlIHBhdGhzXG4gIGNvbnN0IGFic29sdXRlRmlsZU5hbWVzID0gZmlsZU5hbWVzLm1hcChpID0+IHBhdGgucmVzb2x2ZShpKSk7XG5cbiAgY29uc3QgY29tcGlsZXJIb3N0ID0gdHMuY3JlYXRlQ29tcGlsZXJIb3N0KG9wdGlvbnMpO1xuICBjb25zdCBwcm9ncmFtID0gdHMuY3JlYXRlUHJvZ3JhbShmaWxlTmFtZXMsIG9wdGlvbnMsIGNvbXBpbGVySG9zdCk7XG4gIGNvbnN0IGZpbGVzVG9Qcm9jZXNzID0gbmV3IFNldChhYnNvbHV0ZUZpbGVOYW1lcyk7XG4gIGNvbnN0IHJvb3RNb2R1bGVQYXRoID0gb3B0aW9ucy5yb290RGlyIHx8IGdldENvbW1vblBhcmVudERpcmVjdG9yeShhYnNvbHV0ZUZpbGVOYW1lcyk7XG4gIGNvbnN0IHRyYW5zZm9ybWVySG9zdDogdHNpY2tsZS5Uc2lja2xlSG9zdCA9IHtcbiAgICBzaG91bGRTa2lwVHNpY2tsZVByb2Nlc3Npbmc6IChmaWxlTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gIWZpbGVzVG9Qcm9jZXNzLmhhcyhwYXRoLnJlc29sdmUoZmlsZU5hbWUpKTtcbiAgICB9LFxuICAgIHNob3VsZElnbm9yZVdhcm5pbmdzRm9yUGF0aDogKGZpbGVOYW1lOiBzdHJpbmcpID0+IGZhbHNlLFxuICAgIHBhdGhUb01vZHVsZU5hbWU6IGNsaVN1cHBvcnQucGF0aFRvTW9kdWxlTmFtZS5iaW5kKG51bGwsIHJvb3RNb2R1bGVQYXRoKSxcbiAgICBmaWxlTmFtZVRvTW9kdWxlSWQ6IChmaWxlTmFtZSkgPT4gcGF0aC5yZWxhdGl2ZShyb290TW9kdWxlUGF0aCwgZmlsZU5hbWUpLFxuICAgIGVzNU1vZGU6IHRydWUsXG4gICAgZ29vZ21vZHVsZTogdHJ1ZSxcbiAgICB0cmFuc2Zvcm1EZWNvcmF0b3JzOiB0cnVlLFxuICAgIHRyYW5zZm9ybVR5cGVzVG9DbG9zdXJlOiB0cnVlLFxuICAgIHR5cGVCbGFja0xpc3RQYXRoczogbmV3IFNldCgpLFxuICAgIGRpc2FibGVBdXRvUXVvdGluZzogc2V0dGluZ3MuZGlzYWJsZUF1dG9RdW90aW5nLFxuICAgIHVudHlwZWQ6IGZhbHNlLFxuICAgIGxvZ1dhcm5pbmc6ICh3YXJuaW5nKSA9PiBjb25zb2xlLmVycm9yKHRzLmZvcm1hdERpYWdub3N0aWNzKFt3YXJuaW5nXSwgY29tcGlsZXJIb3N0KSksXG4gICAgb3B0aW9ucyxcbiAgICBob3N0OiBjb21waWxlckhvc3QsXG4gIH07XG4gIGNvbnN0IGRpYWdub3N0aWNzID0gdHMuZ2V0UHJlRW1pdERpYWdub3N0aWNzKHByb2dyYW0pO1xuICBpZiAoZGlhZ25vc3RpY3MubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB7XG4gICAgICBkaWFnbm9zdGljcyxcbiAgICAgIG1vZHVsZXNNYW5pZmVzdDogbmV3IE1vZHVsZXNNYW5pZmVzdCgpLFxuICAgICAgZXh0ZXJuczoge30sXG4gICAgICBlbWl0U2tpcHBlZDogdHJ1ZSxcbiAgICAgIGVtaXR0ZWRGaWxlczogW10sXG4gICAgfTtcbiAgfVxuICByZXR1cm4gdHNpY2tsZS5lbWl0V2l0aFRzaWNrbGUoXG4gICAgICBwcm9ncmFtLCB0cmFuc2Zvcm1lckhvc3QsIGNvbXBpbGVySG9zdCwgb3B0aW9ucywgdW5kZWZpbmVkLCB3cml0ZUZpbGUpO1xufVxuXG5mdW5jdGlvbiBtYWluKGFyZ3M6IHN0cmluZ1tdKTogbnVtYmVyIHtcbiAgY29uc3Qge3NldHRpbmdzLCB0c2NBcmdzfSA9IGxvYWRTZXR0aW5nc0Zyb21BcmdzKGFyZ3MpO1xuICBjb25zdCBjb25maWcgPSBsb2FkVHNjQ29uZmlnKHRzY0FyZ3MpO1xuICBpZiAoY29uZmlnLmVycm9ycy5sZW5ndGgpIHtcbiAgICBjb25zb2xlLmVycm9yKHRzLmZvcm1hdERpYWdub3N0aWNzKGNvbmZpZy5lcnJvcnMsIHRzLmNyZWF0ZUNvbXBpbGVySG9zdChjb25maWcub3B0aW9ucykpKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGlmIChjb25maWcub3B0aW9ucy5tb2R1bGUgIT09IHRzLk1vZHVsZUtpbmQuQ29tbW9uSlMpIHtcbiAgICAvLyBUaGlzIGlzIG5vdCBhbiB1cHN0cmVhbSBUeXBlU2NyaXB0IGRpYWdub3N0aWMsIHRoZXJlZm9yZSBpdCBkb2VzIG5vdCBnb1xuICAgIC8vIHRocm91Z2ggdGhlIGRpYWdub3N0aWNzIGFycmF5IG1lY2hhbmlzbS5cbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAndHNpY2tsZSBjb252ZXJ0cyBUeXBlU2NyaXB0IG1vZHVsZXMgdG8gQ2xvc3VyZSBtb2R1bGVzIHZpYSBDb21tb25KUyBpbnRlcm5hbGx5LiAnICtcbiAgICAgICAgJ1NldCB0c2NvbmZpZy5qcyBcIm1vZHVsZVwiOiBcImNvbW1vbmpzXCInKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIC8vIFJ1biB0c2lja2xlK1RTQyB0byBjb252ZXJ0IGlucHV0cyB0byBDbG9zdXJlIEpTIGZpbGVzLlxuICBjb25zdCByZXN1bHQgPSB0b0Nsb3N1cmVKUyhcbiAgICAgIGNvbmZpZy5vcHRpb25zLCBjb25maWcuZmlsZU5hbWVzLCBzZXR0aW5ncywgKGZpbGVQYXRoOiBzdHJpbmcsIGNvbnRlbnRzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgbWtkaXJwLnN5bmMocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSk7XG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIGNvbnRlbnRzLCB7ZW5jb2Rpbmc6ICd1dGYtOCd9KTtcbiAgICAgIH0pO1xuICBpZiAocmVzdWx0LmRpYWdub3N0aWNzLmxlbmd0aCkge1xuICAgIGNvbnNvbGUuZXJyb3IodHMuZm9ybWF0RGlhZ25vc3RpY3MocmVzdWx0LmRpYWdub3N0aWNzLCB0cy5jcmVhdGVDb21waWxlckhvc3QoY29uZmlnLm9wdGlvbnMpKSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBpZiAoc2V0dGluZ3MuZXh0ZXJuc1BhdGgpIHtcbiAgICBta2RpcnAuc3luYyhwYXRoLmRpcm5hbWUoc2V0dGluZ3MuZXh0ZXJuc1BhdGgpKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHNldHRpbmdzLmV4dGVybnNQYXRoLCB0c2lja2xlLmdldEdlbmVyYXRlZEV4dGVybnMocmVzdWx0LmV4dGVybnMpKTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy8gQ0xJIGVudHJ5IHBvaW50XG5pZiAocmVxdWlyZS5tYWluID09PSBtb2R1bGUpIHtcbiAgcHJvY2Vzcy5leGl0KG1haW4ocHJvY2Vzcy5hcmd2LnNwbGljZSgyKSkpO1xufVxuIl19

@@ -9,2 +9,3 @@ /// <amd-module name="tsickle/src/modules_manifest" />

*/
/// <amd-module name="tsickle/src/modules_manifest" />
export interface FileMap<T> {

@@ -11,0 +12,0 @@ [fileName: string]: T;

/// <amd-module name="tsickle/src/rewriter" />
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
/// <amd-module name="tsickle/src/rewriter" />
import { SourceMapper } from './source_map_utils';

@@ -53,2 +61,9 @@ import * as ts from './typescript';

/**
* Start a source mapping for the given node. This allows adding source mappings for statements
* that are not yet finished, and whose total length is unknown. Does not add recursive mappings
* for child nodes.
* @return a handler to finish the mapping.
*/
startSourceMapping(node: ts.Node): () => void;
/**
* Write a span of the input file as expressed by absolute offsets.

@@ -55,0 +70,0 @@ * These offsets are found in attributes like node.getFullStart() and

@@ -59,2 +59,3 @@ /**

Rewriter.prototype.getOutput = function (prefix) {
var e_1, _a;
if (this.indent !== 0) {

@@ -70,4 +71,4 @@ throw new Error('visit() failed to track nesting');

try {
for (var _a = __values(ts.getLeadingCommentRanges(out, 0) || []), _b = _a.next(); !_b.done; _b = _a.next()) {
var cr = _b.value;
for (var _b = __values(ts.getLeadingCommentRanges(out, 0) || []), _c = _b.next(); !_c.done; _c = _b.next()) {
var cr = _c.value;
if (fileoverview_comment_transformer_1.isClosureFileoverviewComment(out.substring(cr.pos, cr.end))) {

@@ -85,3 +86,3 @@ insertionIdx = cr.end;

try {
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}

@@ -97,3 +98,2 @@ finally { if (e_1) throw e_1.error; }

};
var e_1, _c;
};

@@ -178,2 +178,15 @@ /**

/**
* Start a source mapping for the given node. This allows adding source mappings for statements
* that are not yet finished, and whose total length is unknown. Does not add recursive mappings
* for child nodes.
* @return a handler to finish the mapping.
*/
Rewriter.prototype.startSourceMapping = function (node) {
var _this = this;
var startPos = this.position.position;
return function () {
_this.sourceMapper.addMappingForRange(node, startPos, _this.position.position);
};
};
/**
* Write a span of the input file as expressed by absolute offsets.

@@ -207,2 +220,3 @@ * These offsets are found in attributes like node.getFullStart() and

Rewriter.prototype.emit = function (str) {
var e_2, _a;
this.output.push(str);

@@ -227,3 +241,2 @@ try {

this.position.position += str.length;
var e_2, _a;
};

@@ -288,2 +301,2 @@ /** Removes comment metacharacters from a string, to make it safe to embed in a comment. */

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV3cml0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmV3cml0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBRUgsaUdBQWdGO0lBQ2hGLGlFQUFvRjtJQUNwRiwyQ0FBbUM7SUFFbkM7Ozs7T0FJRztJQUNIO1FBaUJFLGtCQUFtQixJQUFtQixFQUFVLFlBQStDO1lBQS9DLDZCQUFBLEVBQUEsZUFBNkIscUNBQWtCO1lBQTVFLFNBQUksR0FBSixJQUFJLENBQWU7WUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBbUM7WUFoQnZGLFdBQU0sR0FBYSxFQUFFLENBQUM7WUFDOUIsNkNBQTZDO1lBQ25DLGdCQUFXLEdBQW9CLEVBQUUsQ0FBQztZQUM1QyxzQ0FBc0M7WUFDOUIsYUFBUSxHQUFtQixFQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFDLENBQUM7WUFDckU7OztlQUdHO1lBQ0ssV0FBTSxHQUFHLENBQUMsQ0FBQztZQUNuQjs7O2VBR0c7WUFDSywyQkFBc0IsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUdwQyxDQUFDO1FBRUQsNEJBQVMsR0FBVCxVQUFVLE1BQWU7WUFDdkIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO2FBQ3BEO1lBQ0QsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDL0IsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsMEZBQTBGO2dCQUMxRiwyRkFBMkY7Z0JBQzNGLHlGQUF5RjtnQkFDekYsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDOztvQkFDckIsS0FBaUIsSUFBQSxLQUFBLFNBQUEsRUFBRSxDQUFDLHVC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LG9DQUlDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge2lzQ2xvc3VyZUZpbGVvdmVydmlld0NvbW1lbnR9IGZyb20gJy4vZmlsZW92ZXJ2aWV3X2NvbW1lbnRfdHJhbnNmb3JtZXInO1xuaW1wb3J0IHtOT09QX1NPVVJDRV9NQVBQRVIsIFNvdXJjZU1hcHBlciwgU291cmNlUG9zaXRpb259IGZyb20gJy4vc291cmNlX21hcF91dGlscyc7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICcuL3R5cGVzY3JpcHQnO1xuXG4vKipcbiAqIEEgUmV3cml0ZXIgbWFuYWdlcyBpdGVyYXRpbmcgdGhyb3VnaCBhIHRzLlNvdXJjZUZpbGUsIGNvcHlpbmcgaW5wdXRcbiAqIHRvIG91dHB1dCB3aGlsZSBsZXR0aW5nIHRoZSBzdWJjbGFzcyBwb3RlbnRpYWxseSBhbHRlciBzb21lIG5vZGVzXG4gKiBhbG9uZyB0aGUgd2F5IGJ5IGltcGxlbWVudGluZyBtYXliZVByb2Nlc3MoKS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJld3JpdGVyIHtcbiAgcHJpdmF0ZSBvdXRwdXQ6IHN0cmluZ1tdID0gW107XG4gIC8qKiBFcnJvcnMgZm91bmQgd2hpbGUgZXhhbWluaW5nIHRoZSBjb2RlLiAqL1xuICBwcm90ZWN0ZWQgZGlhZ25vc3RpY3M6IHRzLkRpYWdub3N0aWNbXSA9IFtdO1xuICAvKiogQ3VycmVudCBwb3NpdGlvbiBpbiB0aGUgb3V0cHV0LiAqL1xuICBwcml2YXRlIHBvc2l0aW9uOiBTb3VyY2VQb3NpdGlvbiA9IHtsaW5lOiAwLCBjb2x1bW46IDAsIHBvc2l0aW9uOiAwfTtcbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IGxldmVsIG9mIHJlY3Vyc2lvbiB0aHJvdWdoIFR5cGVTY3JpcHQgTm9kZXMuICBVc2VkIGluIGZvcm1hdHRpbmcgaW50ZXJuYWwgZGVidWdcbiAgICogcHJpbnQgc3RhdGVtZW50cy5cbiAgICovXG4gIHByaXZhdGUgaW5kZW50ID0gMDtcbiAgLyoqXG4gICAqIFNraXAgZW1pdHRpbmcgYW55IGNvZGUgYmVmb3JlIHRoZSBnaXZlbiBvZmZzZXQuIEUuZy4gdXNlZCB0byBhdm9pZCBlbWl0dGluZyBAZmlsZW92ZXJ2aWV3XG4gICAqIGNvbW1lbnRzIHR3aWNlLlxuICAgKi9cbiAgcHJpdmF0ZSBza2lwQ29tbWVudHNVcFRvT2Zmc2V0ID0gLTE7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGZpbGU6IHRzLlNvdXJjZUZpbGUsIHByaXZhdGUgc291cmNlTWFwcGVyOiBTb3VyY2VNYXBwZXIgPSBOT09QX1NPVVJDRV9NQVBQRVIpIHtcbiAgfVxuXG4gIGdldE91dHB1dChwcmVmaXg/OiBzdHJpbmcpOiB7b3V0cHV0OiBzdHJpbmcsIGRpYWdub3N0aWNzOiB0cy5EaWFnbm9zdGljW119IHtcbiAgICBpZiAodGhpcy5pbmRlbnQgIT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndmlzaXQoKSBmYWlsZWQgdG8gdHJhY2sgbmVzdGluZycpO1xuICAgIH1cbiAgICBsZXQgb3V0ID0gdGhpcy5vdXRwdXQuam9pbignJyk7XG4gICAgaWYgKHByZWZpeCkge1xuICAgICAgLy8gSW5zZXJ0IHByZWZpeCBhZnRlciBhbnkgbGVhZGluZyBAZmlsZW92ZXJ2aWV3IGNvbW1lbnRzLCBzbyB0aGV5IHN0aWxsIGNvbWUgZmlyc3QgaW4gdGhlXG4gICAgICAvLyBmaWxlLiBUaGlzIG11c3Qgbm90IHVzZSBmaWxlLmdldFN0YXJ0KCkgKGNvbW1lbnQgcG9zaXRpb24gaW4gdGhlIGlucHV0IGZpbGUpLCBidXQgcmFodGVyXG4gICAgICAvLyBjaGVjayBjb21tZW50cyBpbiB0aGUgbmV3IG91dHB1dCwgYXMgdGhvc2UgKGluIHBhcnRpY3VsYXIgZm9yIGNvbW1lbnRzKSBhcmUgdW5yZWxhdGVkLlxuICAgICAgbGV0IGluc2VydGlvbklkeCA9IDA7XG4gICAgICBmb3IgKGNvbnN0IGNyIG9mIHRzLmdldExlYWRpbmdDb21tZW50UmFuZ2VzKG91dCwgMCkgfHwgW10pIHtcbiAgICAgICAgaWYgKGlzQ2xvc3VyZUZpbGVvdmVydmlld0NvbW1lbnQob3V0LnN1YnN0cmluZyhjci5wb3MsIGNyLmVuZCkpKSB7XG4gICAgICAgICAgaW5zZXJ0aW9uSWR4ID0gY3IuZW5kO1xuICAgICAgICAgIC8vIEluY2x1ZGUgc3BhY2UgKGluIHBhcnRpY3VsYXIgbGluZSBicmVha3MpIGFmdGVyIGEgQGZpbGVvdmVydmlldyBjb21tZW50OyB3aXRob3V0IHRoZVxuICAgICAgICAgIC8vIHNwYWNlIHNlcGVyYXRpbmcgaXQsIFR5cGVTY3JpcHQgbWlnaHQgZWxpZGUgdGhlIGVtaXQuXG4gICAgICAgICAgd2hpbGUgKGluc2VydGlvbklkeCA8IG91dC5sZW5ndGggJiYgb3V0W2luc2VydGlvbklkeF0ubWF0Y2goL1xccy8pKSBpbnNlcnRpb25JZHgrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgb3V0ID0gb3V0LnN1YnN0cmluZygwLCBpbnNlcnRpb25JZHgpICsgcHJlZml4ICsgb3V0LnN1YnN0cmluZyhpbnNlcnRpb25JZHgpO1xuICAgICAgdGhpcy5zb3VyY2VNYXBwZXIuc2hpZnRCeU9mZnNldChwcmVmaXgubGVuZ3RoKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG91dHB1dDogb3V0LFxuICAgICAgZGlhZ25vc3RpY3M6IHRoaXMuZGlhZ25vc3RpY3MsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiB2aXNpdCB0cmF2ZXJzZXMgYSBOb2RlLCByZWN1cnNpdmVseSB3cml0aW5nIGFsbCBub2RlcyBub3QgaGFuZGxlZCBieSB0aGlzLm1heWJlUHJvY2Vzcy5cbiAgICovXG4gIHZpc2l0KG5vZGU6IHRzLk5vZGUpIHtcbiAgICAvLyB0aGlzLmxvZ1dpdGhJbmRlbnQoJ25vZGU6ICcgKyB0cy5TeW50YXhLaW5kW25vZGUua2luZF0pO1xuICAgIHRoaXMuaW5kZW50Kys7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghdGhpcy5tYXliZVByb2Nlc3Mobm9kZSkpIHtcbiAgICAgICAgdGhpcy53cml0ZU5vZGUobm9kZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKCFlLm1lc3NhZ2UpIGUubWVzc2FnZSA9ICdVbmhhbmRsZWQgZXJyb3IgaW4gdHNpY2tsZSc7XG4gICAgICBlLm1lc3NhZ2UgKz0gYFxcbiBhdCAke3RzLlN5bnRheEtpbmRbbm9kZS5raW5kXX0gaW4gJHt0aGlzLmZpbGUuZmlsZU5hbWV9OmA7XG4gICAgICBjb25zdCB7bGluZSwgY2hhcmFjdGVyfSA9IHRoaXMuZmlsZS5nZXRMaW5lQW5kQ2hhcmFjdGVyT2ZQb3NpdGlvbihub2RlLmdldFN0YXJ0KCkpO1xuICAgICAgZS5tZXNzYWdlICs9IGAke2xpbmUgKyAxfToke2NoYXJhY3RlciArIDF9YDtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIHRoaXMuaW5kZW50LS07XG4gIH1cblxuICAvKipcbiAgICogbWF5YmVQcm9jZXNzIGxldHMgc3ViY2xhc3NlcyBvcHRpb25hbGx5IHByb2Nlc3NlcyBhIG5vZGUuXG4gICAqXG4gICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgbm9kZSBoYXMgYmVlbiBoYW5kbGVkIGFuZCBkb2Vzbid0IG5lZWQgdG8gYmUgdHJhdmVyc2VkO1xuICAgKiAgICBmYWxzZSB0byBoYXZlIHRoZSBub2RlIHdyaXR0ZW4gYW5kIGl0cyBjaGlsZHJlbiByZWN1cnNpdmVseSB2aXNpdGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIG1heWJlUHJvY2Vzcyhub2RlOiB0cy5Ob2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIHdyaXRlTm9kZSB3cml0ZXMgYSB0cy5Ob2RlLCBjYWxsaW5nIHRoaXMudmlzaXQoKSBvbiBpdHMgY2hpbGRyZW4uICovXG4gIHdyaXRlTm9kZShub2RlOiB0cy5Ob2RlLCBza2lwQ29tbWVudHMgPSBmYWxzZSwgbmV3TGluZUlmQ29tbWVudHNTdHJpcHBlZCA9IHRydWUpIHtcbiAgICBsZXQgcG9zID0gbm9kZS5nZXRGdWxsU3RhcnQoKTtcbiAgICBpZiAoc2tpcENvbW1lbnRzKSB7XG4gICAgICAvLyBUbyBza2lwIGNvbW1lbnRzLCB3ZSBza2lwIGFsbCB3aGl0ZXNwYWNlL2NvbW1lbnRzIHByZWNlZGluZ1xuICAgICAgLy8gdGhlIG5vZGUuICBCdXQgaWYgdGhlcmUgd2FzIGFueXRoaW5nIHNraXBwZWQgd2Ugc2hvdWxkIGVtaXRcbiAgICAgIC8vIGEgbmV3bGluZSBpbiBpdHMgcGxhY2Ugc28gdGhhdCB0aGUgbm9kZSByZW1haW5zIHNlcGFyYXRlZFxuICAgICAgLy8gZnJvbSB0aGUgcHJldmlvdXMgbm9kZS4gIFRPRE86IGRvbid0IHNraXAgYW55dGhpbmcgaGVyZSBpZlxuICAgICAgLy8gdGhlcmUgd2Fzbid0IGFueSBjb21tZW50LlxuICAgICAgaWYgKG5ld0xpbmVJZkNvbW1lbnRzU3RyaXBwZWQgJiYgbm9kZS5nZXRGdWxsU3RhcnQoKSA8IG5vZGUuZ2V0U3RhcnQoKSkge1xuICAgICAgICB0aGlzLmVtaXQoJ1xcbicpO1xuICAgICAgfVxuICAgICAgcG9zID0gbm9kZS5nZXRTdGFydCgpO1xuICAgIH1cbiAgICB0aGlzLndyaXRlTm9kZUZyb20obm9kZSwgcG9zKTtcbiAgfVxuXG4gIHdyaXRlTm9kZUZyb20obm9kZTogdHMuTm9kZSwgcG9zOiBudW1iZXIsIGVuZCA9IG5vZGUuZ2V0RW5kKCkpIHtcbiAgICBpZiAoZW5kIDw9IHRoaXMuc2tpcENvbW1lbnRzVXBUb09mZnNldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvbGRTa2lwQ29tbWVudHNVcFRvT2Zmc2V0ID0gdGhpcy5za2lwQ29tbWVudHNVcFRvT2Zmc2V0O1xuICAgIHRoaXMuc2tpcENvbW1lbnRzVXBUb09mZnNldCA9IE1hdGgubWF4KHRoaXMuc2tpcENvbW1lbnRzVXBUb09mZnNldCwgcG9zKTtcbiAgICB0cy5mb3JFYWNoQ2hpbGQobm9kZSwgY2hpbGQgPT4ge1xuICAgICAgdGhpcy53cml0ZVJhbmdlKG5vZGUsIHBvcywgY2hpbGQuZ2V0RnVsbFN0YXJ0KCkpO1xuICAgICAgdGhpcy52aXNpdChjaGlsZCk7XG4gICAgICBwb3MgPSBjaGlsZC5nZXRFbmQoKTtcbiAgICB9KTtcbiAgICB0aGlzLndyaXRlUmFuZ2Uobm9kZSwgcG9zLCBlbmQpO1xuICAgIHRoaXMuc2tpcENvbW1lbnRzVXBUb09mZnNldCA9IG9sZFNraXBDb21tZW50c1VwVG9PZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIGFsbCBsZWFkaW5nIHRyaXZpYSAod2hpdGVzcGFjZSBvciBjb21tZW50cykgb24gbm9kZSwgb3IgYWxsIHRyaXZpYSB1cCB0byB0aGUgZ2l2ZW5cbiAgICogcG9zaXRpb24uIEFsc28gbWFya3MgdGhvc2UgdHJpdmlhIGFzIFwiYWxyZWFkeSBlbWl0dGVkXCIgYnkgc2hpZnRpbmcgdGhlIHNraXBDb21tZW50c1VwVG8gbWFya2VyLlxuICAgKi9cbiAgd3JpdGVMZWFkaW5nVHJpdmlhKG5vZGU6IHRzLk5vZGUsIHVwVG8gPSAwKSB7XG4gICAgY29uc3QgdXBUb09mZnNldCA9IHVwVG8gfHwgbm9kZS5nZXRTdGFydCgpO1xuICAgIHRoaXMud3JpdGVSYW5nZShub2RlLCBub2RlLmdldEZ1bGxTdGFydCgpLCB1cFRvIHx8IG5vZGUuZ2V0U3RhcnQoKSk7XG4gICAgdGhpcy5za2lwQ29tbWVudHNVcFRvT2Zmc2V0ID0gdXBUb09mZnNldDtcbiAgfVxuXG4gIGFkZFNvdXJjZU1hcHBpbmcobm9kZTogdHMuTm9kZSkge1xuICAgIHRoaXMud3JpdGVSYW5nZShub2RlLCBub2RlLmdldEVuZCgpLCBub2RlLmdldEVuZCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZSBhIHNwYW4gb2YgdGhlIGlucHV0IGZpbGUgYXMgZXhwcmVzc2VkIGJ5IGFic29sdXRlIG9mZnNldHMuXG4gICAqIFRoZXNlIG9mZnNldHMgYXJlIGZvdW5kIGluIGF0dHJpYnV0ZXMgbGlrZSBub2RlLmdldEZ1bGxTdGFydCgpIGFuZFxuICAgKiBub2RlLmdldEVuZCgpLlxuICAgKi9cbiAgd3JpdGVSYW5nZShub2RlOiB0cy5Ob2RlLCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIpIHtcbiAgICBjb25zdCBmdWxsU3RhcnQgPSBub2RlLmdldEZ1bGxTdGFydCgpO1xuICAgIGNvbnN0IHRleHRTdGFydCA9IG5vZGUuZ2V0U3RhcnQoKTtcbiAgICBpZiAoZnJvbSA+PSBmdWxsU3RhcnQgJiYgZnJvbSA8IHRleHRTdGFydCkge1xuICAgICAgZnJvbSA9IE1hdGgubWF4KGZyb20sIHRoaXMuc2tpcENvbW1lbnRzVXBUb09mZnNldCk7XG4gICAgfVxuICAgIC8vIEFkZCBhIHNvdXJjZSBtYXBwaW5nLiB3cml0ZVJhbmdlKGZyb20sIHRvKSBhbHdheXMgY29ycmVzcG9uZHMgdG9cbiAgICAvLyBvcmlnaW5hbCBzb3VyY2UgY29kZSwgc28gYWRkIGEgbWFwcGluZyBhdCB0aGUgY3VycmVudCBsb2NhdGlvbiB0aGF0XG4gICAgLy8gcG9pbnRzIGJhY2sgdG8gdGhlIGxvY2F0aW9uIGF0IGBmcm9tYC4gVGhlIGFkZGl0aW9uYWwgY29kZSBnZW5lcmF0ZWRcbiAgICAvLyBieSB0c2lja2xlIHdpbGwgdGhlbiBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGxhc3QgbWFwcGVkIGNvZGVcbiAgICAvLyBzZWN0aW9uIHByZWNlZGluZyBpdC4gVGhhdCdzIGFyZ3VhYmx5IGluY29ycmVjdCAoZS5nLiBmb3IgdGhlIGZha2VcbiAgICAvLyBtZXRob2RzIGRlZmluaW5nIHByb3BlcnRpZXMpLCBidXQgaXMgZ29vZCBlbm91Z2ggZm9yIHN0YWNrIHRyYWNlcy5cbiAgICBjb25zdCBwb3MgPSB0aGlzLmZpbGUuZ2V0TGluZUFuZENoYXJhY3Rlck9mUG9zaXRpb24oZnJvbSk7XG4gICAgdGhpcy5zb3VyY2VNYXBwZXIuYWRkTWFwcGluZyhcbiAgICAgICAgbm9kZSwge2xpbmU6IHBvcy5saW5lLCBjb2x1bW46IHBvcy5jaGFyYWN0ZXIsIHBvc2l0aW9uOiBmcm9tfSwgdGhpcy5wb3NpdGlvbiwgdG8gLSBmcm9tKTtcbiAgICAvLyBnZXRTb3VyY2VGaWxlKCkuZ2V0VGV4dCgpIGlzIHdyb25nIGhlcmUgYmVjYXVzZSBpdCBoYXMgdGhlIHRleHQgb2ZcbiAgICAvLyB0aGUgU291cmNlRmlsZSBub2RlIG9mIHRoZSBBU1QsIHdoaWNoIGRvZXNuJ3QgY29udGFpbiB0aGUgY29tbWVudHNcbiAgICAvLyBwcmVjZWRpbmcgdGhhdCBub2RlLiAgU2VtYW50aWNhbGx5IHRoZXNlIHJhbmdlcyBhcmUganVzdCBvZmZzZXRzXG4gICAgLy8gaW50byB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGUgdGV4dCwgc28gc2xpY2UgZnJvbSB0aGF0LlxuICAgIGNvbnN0IHRleHQgPSB0aGlzLmZpbGUudGV4dC5zbGljZShmcm9tLCB0byk7XG4gICAgaWYgKHRleHQpIHtcbiAgICAgIHRoaXMuZW1pdCh0ZXh0KTtcbiAgICB9XG4gIH1cblxuICBlbWl0KHN0cjogc3RyaW5nKSB7XG4gICAgdGhpcy5vdXRwdXQucHVzaChzdHIpO1xuICAgIGZvciAoY29uc3QgYyBvZiBzdHIpIHtcbiAgICAgIHRoaXMucG9zaXRpb24uY29sdW1uKys7XG4gICAgICBpZiAoYyA9PT0gJ1xcbicpIHtcbiAgICAgICAgdGhpcy5wb3NpdGlvbi5saW5lKys7XG4gICAgICAgIHRoaXMucG9zaXRpb24uY29sdW1uID0gMDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wb3NpdGlvbi5wb3NpdGlvbiArPSBzdHIubGVuZ3RoO1xuICB9XG5cbiAgLyoqIFJlbW92ZXMgY29tbWVudCBtZXRhY2hhcmFjdGVycyBmcm9tIGEgc3RyaW5nLCB0byBtYWtlIGl0IHNhZmUgdG8gZW1iZWQgaW4gYSBjb21tZW50LiAqL1xuICBlc2NhcGVGb3JDb21tZW50KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcL1xcKi9nLCAnX18nKS5yZXBsYWNlKC9cXCpcXC8vZywgJ19fJyk7XG4gIH1cblxuICAvKiB0c2xpbnQ6ZGlzYWJsZTogbm8tdW51c2VkLXZhcmlhYmxlICovXG4gIGxvZ1dpdGhJbmRlbnQobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgLyogdHNsaW50OmVuYWJsZTogbm8tdW51c2VkLXZhcmlhYmxlICovXG4gICAgY29uc3QgcHJlZml4ID0gbmV3IEFycmF5KHRoaXMuaW5kZW50ICsgMSkuam9pbignfCAnKTtcbiAgICBjb25zb2xlLmxvZyhwcmVmaXggKyBtZXNzYWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9kdWNlcyBhIGNvbXBpbGVyIGVycm9yIHRoYXQgcmVmZXJlbmNlcyB0aGUgTm9kZSdzIGtpbmQuICBUaGlzIGlzIHVzZWZ1bCBmb3IgdGhlIFwiZWxzZVwiXG4gICAqIGJyYW5jaCBvZiBjb2RlIHRoYXQgaXMgYXR0ZW1wdGluZyB0byBoYW5kbGUgYWxsIHBvc3NpYmxlIGlucHV0IE5vZGUgdHlwZXMsIHRvIGVuc3VyZSBhbGwgY2FzZXNcbiAgICogY292ZXJlZC5cbiAgICovXG4gIGVycm9yVW5pbXBsZW1lbnRlZEtpbmQobm9kZTogdHMuTm9kZSwgd2hlcmU6IHN0cmluZykge1xuICAgIHRoaXMuZXJyb3Iobm9kZSwgYCR7dHMuU3ludGF4S2luZFtub2RlLmtpbmRdfSBub3QgaW1wbGVtZW50ZWQgaW4gJHt3aGVyZX1gKTtcbiAgfVxuXG4gIGVycm9yKG5vZGU6IHRzLk5vZGUsIG1lc3NhZ2VUZXh0OiBzdHJpbmcpIHtcbiAgICB0aGlzLmRpYWdub3N0aWNzLnB1c2goe1xuICAgICAgZmlsZTogbm9kZS5nZXRTb3VyY2VGaWxlKCksXG4gICAgICBzdGFydDogbm9kZS5nZXRTdGFydCgpLFxuICAgICAgbGVuZ3RoOiBub2RlLmdldEVuZCgpIC0gbm9kZS5nZXRTdGFydCgpLFxuICAgICAgbWVzc2FnZVRleHQsXG4gICAgICBjYXRlZ29yeTogdHMuRGlhZ25vc3RpY0NhdGVnb3J5LkVycm9yLFxuICAgICAgY29kZTogMCxcbiAgICB9KTtcbiAgfVxufVxuXG4vKiogUmV0dXJucyB0aGUgc3RyaW5nIGNvbnRlbnRzIG9mIGEgdHMuSWRlbnRpZmllci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJZGVudGlmaWVyVGV4dChpZGVudGlmaWVyOiB0cy5JZGVudGlmaWVyKTogc3RyaW5nIHtcbiAgLy8gTk9URTogdGhlICd0ZXh0JyBwcm9wZXJ0eSBvbiBhbiBJZGVudGlmaWVyIG1heSBiZSBlc2NhcGVkIGlmIGl0IHN0YXJ0c1xuICAvLyB3aXRoICdfXycsIHNvIGp1c3QgdXNlIGdldFRleHQoKS5cbiAgcmV0dXJuIGlkZW50aWZpZXIuZ2V0VGV4dCgpO1xufVxuXG4vKiogUmV0dXJucyBhIGRvdC1qb2luZWQgcXVhbGlmaWVkIG5hbWUgKGZvby5iYXIuQmF6KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnRpdHlOYW1lVGV4dChuYW1lOiB0cy5FbnRpdHlOYW1lKTogc3RyaW5nIHtcbiAgaWYgKHRzLmlzSWRlbnRpZmllcihuYW1lKSkge1xuICAgIHJldHVybiBnZXRJZGVudGlmaWVyVGV4dChuYW1lKTtcbiAgfVxuICByZXR1cm4gZ2V0RW50aXR5TmFtZVRleHQobmFtZS5sZWZ0KSArICcuJyArIGdldElkZW50aWZpZXJUZXh0KG5hbWUucmlnaHQpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGVzY2FwZWQgVHlwZVNjcmlwdCBuYW1lIGludG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBuYW1lLlxuICogUHJlZmVyIGdldElkZW50aWZpZXJUZXh0KCkgaW5zdGVhZCBpZiBwb3NzaWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuZXNjYXBlTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBTZWUgdGhlIHByaXZhdGUgZnVuY3Rpb24gdW5lc2NhcGVJZGVudGlmaWVyIGluIFR5cGVTY3JpcHQncyB1dGlsaXRpZXMudHMuXG4gIGlmIChuYW1lLm1hdGNoKC9eX19fLykpIHJldHVybiBuYW1lLnN1YnN0cigxKTtcbiAgcmV0dXJuIG5hbWU7XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV3cml0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmV3cml0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBRUgsaUdBQWdGO0lBQ2hGLGlFQUFvRjtJQUNwRiwyQ0FBbUM7SUFFbkM7Ozs7T0FJRztJQUNIO1FBaUJFLGtCQUFtQixJQUFtQixFQUFVLFlBQStDO1lBQS9DLDZCQUFBLEVBQUEsZUFBNkIscUNBQWtCO1lBQTVFLFNBQUksR0FBSixJQUFJLENBQWU7WUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBbUM7WUFoQnZGLFdBQU0sR0FBYSxFQUFFLENBQUM7WUFDOUIsNkNBQTZDO1lBQ25DLGdCQUFXLEdBQW9CLEVBQUUsQ0FBQztZQUM1QyxzQ0FBc0M7WUFDOUIsYUFBUSxHQUFtQixFQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFDLENBQUM7WUFDckU7OztlQUdHO1lBQ0ssV0FBTSxHQUFHLENBQUMsQ0FBQztZQUNuQjs7O2VBR0c7WUFDSywyQkFBc0IsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUdwQyxDQUFDO1FBRUQsNEJBQVMsR0FBVCxVQUFVLE1BQWU7O1lBQ3ZCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQzthQUNwRDtZQUNELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQy9CLElBQUksTUFBTSxFQUFFO2dCQUNWLDBGQUEwRjtnQkFDMUYsMkZBQTJGO2dCQUMzRix5RkFBeUY7Z0JBQ3pGLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQzs7b0JBQ3JCLEtBQWlCLElBQUEsS0FBQSxTQUFBLEVBQUUsQ0FBQyx1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LElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUxELDhDQUtDO0lBRUQ7OztPQUdHO0lBQ0gsc0JBQTZCLElBQVk7UUFDdkMsNEVBQTRFO1FBQzVFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBSkQsb0NBSUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7aXNDbG9zdXJlRmlsZW92ZXJ2aWV3Q29tbWVudH0gZnJvbSAnLi9maWxlb3ZlcnZpZXdfY29tbWVudF90cmFuc2Zvcm1lcic7XG5pbXBvcnQge05PT1BfU09VUkNFX01BUFBFUiwgU291cmNlTWFwcGVyLCBTb3VyY2VQb3NpdGlvbn0gZnJvbSAnLi9zb3VyY2VfbWFwX3V0aWxzJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJy4vdHlwZXNjcmlwdCc7XG5cbi8qKlxuICogQSBSZXdyaXRlciBtYW5hZ2VzIGl0ZXJhdGluZyB0aHJvdWdoIGEgdHMuU291cmNlRmlsZSwgY29weWluZyBpbnB1dFxuICogdG8gb3V0cHV0IHdoaWxlIGxldHRpbmcgdGhlIHN1YmNsYXNzIHBvdGVudGlhbGx5IGFsdGVyIHNvbWUgbm9kZXNcbiAqIGFsb25nIHRoZSB3YXkgYnkgaW1wbGVtZW50aW5nIG1heWJlUHJvY2VzcygpLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmV3cml0ZXIge1xuICBwcml2YXRlIG91dHB1dDogc3RyaW5nW10gPSBbXTtcbiAgLyoqIEVycm9ycyBmb3VuZCB3aGlsZSBleGFtaW5pbmcgdGhlIGNvZGUuICovXG4gIHByb3RlY3RlZCBkaWFnbm9zdGljczogdHMuRGlhZ25vc3RpY1tdID0gW107XG4gIC8qKiBDdXJyZW50IHBvc2l0aW9uIGluIHRoZSBvdXRwdXQuICovXG4gIHByaXZhdGUgcG9zaXRpb246IFNvdXJjZVBvc2l0aW9uID0ge2xpbmU6IDAsIGNvbHVtbjogMCwgcG9zaXRpb246IDB9O1xuICAvKipcbiAgICogVGhlIGN1cnJlbnQgbGV2ZWwgb2YgcmVjdXJzaW9uIHRocm91Z2ggVHlwZVNjcmlwdCBOb2Rlcy4gIFVzZWQgaW4gZm9ybWF0dGluZyBpbnRlcm5hbCBkZWJ1Z1xuICAgKiBwcmludCBzdGF0ZW1lbnRzLlxuICAgKi9cbiAgcHJpdmF0ZSBpbmRlbnQgPSAwO1xuICAvKipcbiAgICogU2tpcCBlbWl0dGluZyBhbnkgY29kZSBiZWZvcmUgdGhlIGdpdmVuIG9mZnNldC4gRS5nLiB1c2VkIHRvIGF2b2lkIGVtaXR0aW5nIEBmaWxlb3ZlcnZpZXdcbiAgICogY29tbWVudHMgdHdpY2UuXG4gICAqL1xuICBwcml2YXRlIHNraXBDb21tZW50c1VwVG9PZmZzZXQgPSAtMTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZmlsZTogdHMuU291cmNlRmlsZSwgcHJpdmF0ZSBzb3VyY2VNYXBwZXI6IFNvdXJjZU1hcHBlciA9IE5PT1BfU09VUkNFX01BUFBFUikge1xuICB9XG5cbiAgZ2V0T3V0cHV0KHByZWZpeD86IHN0cmluZyk6IHtvdXRwdXQ6IHN0cmluZywgZGlhZ25vc3RpY3M6IHRzLkRpYWdub3N0aWNbXX0ge1xuICAgIGlmICh0aGlzLmluZGVudCAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd2aXNpdCgpIGZhaWxlZCB0byB0cmFjayBuZXN0aW5nJyk7XG4gICAgfVxuICAgIGxldCBvdXQgPSB0aGlzLm91dHB1dC5qb2luKCcnKTtcbiAgICBpZiAocHJlZml4KSB7XG4gICAgICAvLyBJbnNlcnQgcHJlZml4IGFmdGVyIGFueSBsZWFkaW5nIEBmaWxlb3ZlcnZpZXcgY29tbWVudHMsIHNvIHRoZXkgc3RpbGwgY29tZSBmaXJzdCBpbiB0aGVcbiAgICAgIC8vIGZpbGUuIFRoaXMgbXVzdCBub3QgdXNlIGZpbGUuZ2V0U3RhcnQoKSAoY29tbWVudCBwb3NpdGlvbiBpbiB0aGUgaW5wdXQgZmlsZSksIGJ1dCByYWh0ZXJcbiAgICAgIC8vIGNoZWNrIGNvbW1lbnRzIGluIHRoZSBuZXcgb3V0cHV0LCBhcyB0aG9zZSAoaW4gcGFydGljdWxhciBmb3IgY29tbWVudHMpIGFyZSB1bnJlbGF0ZWQuXG4gICAgICBsZXQgaW5zZXJ0aW9uSWR4ID0gMDtcbiAgICAgIGZvciAoY29uc3QgY3Igb2YgdHMuZ2V0TGVhZGluZ0NvbW1lbnRSYW5nZXMob3V0LCAwKSB8fCBbXSkge1xuICAgICAgICBpZiAoaXNDbG9zdXJlRmlsZW92ZXJ2aWV3Q29tbWVudChvdXQuc3Vic3RyaW5nKGNyLnBvcywgY3IuZW5kKSkpIHtcbiAgICAgICAgICBpbnNlcnRpb25JZHggPSBjci5lbmQ7XG4gICAgICAgICAgLy8gSW5jbHVkZSBzcGFjZSAoaW4gcGFydGljdWxhciBsaW5lIGJyZWFrcykgYWZ0ZXIgYSBAZmlsZW92ZXJ2aWV3IGNvbW1lbnQ7IHdpdGhvdXQgdGhlXG4gICAgICAgICAgLy8gc3BhY2Ugc2VwZXJhdGluZyBpdCwgVHlwZVNjcmlwdCBtaWdodCBlbGlkZSB0aGUgZW1pdC5cbiAgICAgICAgICB3aGlsZSAoaW5zZXJ0aW9uSWR4IDwgb3V0Lmxlbmd0aCAmJiBvdXRbaW5zZXJ0aW9uSWR4XS5tYXRjaCgvXFxzLykpIGluc2VydGlvbklkeCsrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvdXQgPSBvdXQuc3Vic3RyaW5nKDAsIGluc2VydGlvbklkeCkgKyBwcmVmaXggKyBvdXQuc3Vic3RyaW5nKGluc2VydGlvbklkeCk7XG4gICAgICB0aGlzLnNvdXJjZU1hcHBlci5zaGlmdEJ5T2Zmc2V0KHByZWZpeC5sZW5ndGgpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgb3V0cHV0OiBvdXQsXG4gICAgICBkaWFnbm9zdGljczogdGhpcy5kaWFnbm9zdGljcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIHZpc2l0IHRyYXZlcnNlcyBhIE5vZGUsIHJlY3Vyc2l2ZWx5IHdyaXRpbmcgYWxsIG5vZGVzIG5vdCBoYW5kbGVkIGJ5IHRoaXMubWF5YmVQcm9jZXNzLlxuICAgKi9cbiAgdmlzaXQobm9kZTogdHMuTm9kZSkge1xuICAgIC8vIHRoaXMubG9nV2l0aEluZGVudCgnbm9kZTogJyArIHRzLlN5bnRheEtpbmRbbm9kZS5raW5kXSk7XG4gICAgdGhpcy5pbmRlbnQrKztcbiAgICB0cnkge1xuICAgICAgaWYgKCF0aGlzLm1heWJlUHJvY2Vzcyhub2RlKSkge1xuICAgICAgICB0aGlzLndyaXRlTm9kZShub2RlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoIWUubWVzc2FnZSkgZS5tZXNzYWdlID0gJ1VuaGFuZGxlZCBlcnJvciBpbiB0c2lja2xlJztcbiAgICAgIGUubWVzc2FnZSArPSBgXFxuIGF0ICR7dHMuU3ludGF4S2luZFtub2RlLmtpbmRdfSBpbiAke3RoaXMuZmlsZS5maWxlTmFtZX06YDtcbiAgICAgIGNvbnN0IHtsaW5lLCBjaGFyYWN0ZXJ9ID0gdGhpcy5maWxlLmdldExpbmVBbmRDaGFyYWN0ZXJPZlBvc2l0aW9uKG5vZGUuZ2V0U3RhcnQoKSk7XG4gICAgICBlLm1lc3NhZ2UgKz0gYCR7bGluZSArIDF9OiR7Y2hhcmFjdGVyICsgMX1gO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgdGhpcy5pbmRlbnQtLTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYXliZVByb2Nlc3MgbGV0cyBzdWJjbGFzc2VzIG9wdGlvbmFsbHkgcHJvY2Vzc2VzIGEgbm9kZS5cbiAgICpcbiAgICogQHJldHVybiBUcnVlIGlmIHRoZSBub2RlIGhhcyBiZWVuIGhhbmRsZWQgYW5kIGRvZXNuJ3QgbmVlZCB0byBiZSB0cmF2ZXJzZWQ7XG4gICAqICAgIGZhbHNlIHRvIGhhdmUgdGhlIG5vZGUgd3JpdHRlbiBhbmQgaXRzIGNoaWxkcmVuIHJlY3Vyc2l2ZWx5IHZpc2l0ZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgbWF5YmVQcm9jZXNzKG5vZGU6IHRzLk5vZGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKiogd3JpdGVOb2RlIHdyaXRlcyBhIHRzLk5vZGUsIGNhbGxpbmcgdGhpcy52aXNpdCgpIG9uIGl0cyBjaGlsZHJlbi4gKi9cbiAgd3JpdGVOb2RlKG5vZGU6IHRzLk5vZGUsIHNraXBDb21tZW50cyA9IGZhbHNlLCBuZXdMaW5lSWZDb21tZW50c1N0cmlwcGVkID0gdHJ1ZSkge1xuICAgIGxldCBwb3MgPSBub2RlLmdldEZ1bGxTdGFydCgpO1xuICAgIGlmIChza2lwQ29tbWVudHMpIHtcbiAgICAgIC8vIFRvIHNraXAgY29tbWVudHMsIHdlIHNraXAgYWxsIHdoaXRlc3BhY2UvY29tbWVudHMgcHJlY2VkaW5nXG4gICAgICAvLyB0aGUgbm9kZS4gIEJ1dCBpZiB0aGVyZSB3YXMgYW55dGhpbmcgc2tpcHBlZCB3ZSBzaG91bGQgZW1pdFxuICAgICAgLy8gYSBuZXdsaW5lIGluIGl0cyBwbGFjZSBzbyB0aGF0IHRoZSBub2RlIHJlbWFpbnMgc2VwYXJhdGVkXG4gICAgICAvLyBmcm9tIHRoZSBwcmV2aW91cyBub2RlLiAgVE9ETzogZG9uJ3Qgc2tpcCBhbnl0aGluZyBoZXJlIGlmXG4gICAgICAvLyB0aGVyZSB3YXNuJ3QgYW55IGNvbW1lbnQuXG4gICAgICBpZiAobmV3TGluZUlmQ29tbWVudHNTdHJpcHBlZCAmJiBub2RlLmdldEZ1bGxTdGFydCgpIDwgbm9kZS5nZXRTdGFydCgpKSB7XG4gICAgICAgIHRoaXMuZW1pdCgnXFxuJyk7XG4gICAgICB9XG4gICAgICBwb3MgPSBub2RlLmdldFN0YXJ0KCk7XG4gICAgfVxuICAgIHRoaXMud3JpdGVOb2RlRnJvbShub2RlLCBwb3MpO1xuICB9XG5cbiAgd3JpdGVOb2RlRnJvbShub2RlOiB0cy5Ob2RlLCBwb3M6IG51bWJlciwgZW5kID0gbm9kZS5nZXRFbmQoKSkge1xuICAgIGlmIChlbmQgPD0gdGhpcy5za2lwQ29tbWVudHNVcFRvT2Zmc2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG9sZFNraXBDb21tZW50c1VwVG9PZmZzZXQgPSB0aGlzLnNraXBDb21tZW50c1VwVG9PZmZzZXQ7XG4gICAgdGhpcy5za2lwQ29tbWVudHNVcFRvT2Zmc2V0ID0gTWF0aC5tYXgodGhpcy5za2lwQ29tbWVudHNVcFRvT2Zmc2V0LCBwb3MpO1xuICAgIHRzLmZvckVhY2hDaGlsZChub2RlLCBjaGlsZCA9PiB7XG4gICAgICB0aGlzLndyaXRlUmFuZ2Uobm9kZSwgcG9zLCBjaGlsZC5nZXRGdWxsU3RhcnQoKSk7XG4gICAgICB0aGlzLnZpc2l0KGNoaWxkKTtcbiAgICAgIHBvcyA9IGNoaWxkLmdldEVuZCgpO1xuICAgIH0pO1xuICAgIHRoaXMud3JpdGVSYW5nZShub2RlLCBwb3MsIGVuZCk7XG4gICAgdGhpcy5za2lwQ29tbWVudHNVcFRvT2Zmc2V0ID0gb2xkU2tpcENvbW1lbnRzVXBUb09mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZXMgYWxsIGxlYWRpbmcgdHJpdmlhICh3aGl0ZXNwYWNlIG9yIGNvbW1lbnRzKSBvbiBub2RlLCBvciBhbGwgdHJpdmlhIHVwIHRvIHRoZSBnaXZlblxuICAgKiBwb3NpdGlvbi4gQWxzbyBtYXJrcyB0aG9zZSB0cml2aWEgYXMgXCJhbHJlYWR5IGVtaXR0ZWRcIiBieSBzaGlmdGluZyB0aGUgc2tpcENvbW1lbnRzVXBUbyBtYXJrZXIuXG4gICAqL1xuICB3cml0ZUxlYWRpbmdUcml2aWEobm9kZTogdHMuTm9kZSwgdXBUbyA9IDApIHtcbiAgICBjb25zdCB1cFRvT2Zmc2V0ID0gdXBUbyB8fCBub2RlLmdldFN0YXJ0KCk7XG4gICAgdGhpcy53cml0ZVJhbmdlKG5vZGUsIG5vZGUuZ2V0RnVsbFN0YXJ0KCksIHVwVG8gfHwgbm9kZS5nZXRTdGFydCgpKTtcbiAgICB0aGlzLnNraXBDb21tZW50c1VwVG9PZmZzZXQgPSB1cFRvT2Zmc2V0O1xuICB9XG5cbiAgYWRkU291cmNlTWFwcGluZyhub2RlOiB0cy5Ob2RlKSB7XG4gICAgdGhpcy53cml0ZVJhbmdlKG5vZGUsIG5vZGUuZ2V0RW5kKCksIG5vZGUuZ2V0RW5kKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgc291cmNlIG1hcHBpbmcgZm9yIHRoZSBnaXZlbiBub2RlLiBUaGlzIGFsbG93cyBhZGRpbmcgc291cmNlIG1hcHBpbmdzIGZvciBzdGF0ZW1lbnRzXG4gICAqIHRoYXQgYXJlIG5vdCB5ZXQgZmluaXNoZWQsIGFuZCB3aG9zZSB0b3RhbCBsZW5ndGggaXMgdW5rbm93bi4gRG9lcyBub3QgYWRkIHJlY3Vyc2l2ZSBtYXBwaW5nc1xuICAgKiBmb3IgY2hpbGQgbm9kZXMuXG4gICAqIEByZXR1cm4gYSBoYW5kbGVyIHRvIGZpbmlzaCB0aGUgbWFwcGluZy5cbiAgICovXG4gIHN0YXJ0U291cmNlTWFwcGluZyhub2RlOiB0cy5Ob2RlKSB7XG4gICAgY29uc3Qgc3RhcnRQb3MgPSB0aGlzLnBvc2l0aW9uLnBvc2l0aW9uO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB0aGlzLnNvdXJjZU1hcHBlci5hZGRNYXBwaW5nRm9yUmFuZ2Uobm9kZSwgc3RhcnRQb3MsIHRoaXMucG9zaXRpb24ucG9zaXRpb24pO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogV3JpdGUgYSBzcGFuIG9mIHRoZSBpbnB1dCBmaWxlIGFzIGV4cHJlc3NlZCBieSBhYnNvbHV0ZSBvZmZzZXRzLlxuICAgKiBUaGVzZSBvZmZzZXRzIGFyZSBmb3VuZCBpbiBhdHRyaWJ1dGVzIGxpa2Ugbm9kZS5nZXRGdWxsU3RhcnQoKSBhbmRcbiAgICogbm9kZS5nZXRFbmQoKS5cbiAgICovXG4gIHdyaXRlUmFuZ2Uobm9kZTogdHMuTm9kZSwgZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKSB7XG4gICAgY29uc3QgZnVsbFN0YXJ0ID0gbm9kZS5nZXRGdWxsU3RhcnQoKTtcbiAgICBjb25zdCB0ZXh0U3RhcnQgPSBub2RlLmdldFN0YXJ0KCk7XG4gICAgaWYgKGZyb20gPj0gZnVsbFN0YXJ0ICYmIGZyb20gPCB0ZXh0U3RhcnQpIHtcbiAgICAgIGZyb20gPSBNYXRoLm1heChmcm9tLCB0aGlzLnNraXBDb21tZW50c1VwVG9PZmZzZXQpO1xuICAgIH1cbiAgICAvLyBBZGQgYSBzb3VyY2UgbWFwcGluZy4gd3JpdGVSYW5nZShmcm9tLCB0bykgYWx3YXlzIGNvcnJlc3BvbmRzIHRvXG4gICAgLy8gb3JpZ2luYWwgc291cmNlIGNvZGUsIHNvIGFkZCBhIG1hcHBpbmcgYXQgdGhlIGN1cnJlbnQgbG9jYXRpb24gdGhhdFxuICAgIC8vIHBvaW50cyBiYWNrIHRvIHRoZSBsb2NhdGlvbiBhdCBgZnJvbWAuIFRoZSBhZGRpdGlvbmFsIGNvZGUgZ2VuZXJhdGVkXG4gICAgLy8gYnkgdHNpY2tsZSB3aWxsIHRoZW4gYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBsYXN0IG1hcHBlZCBjb2RlXG4gICAgLy8gc2VjdGlvbiBwcmVjZWRpbmcgaXQuIFRoYXQncyBhcmd1YWJseSBpbmNvcnJlY3QgKGUuZy4gZm9yIHRoZSBmYWtlXG4gICAgLy8gbWV0aG9kcyBkZWZpbmluZyBwcm9wZXJ0aWVzKSwgYnV0IGlzIGdvb2QgZW5vdWdoIGZvciBzdGFjayB0cmFjZXMuXG4gICAgY29uc3QgcG9zID0gdGhpcy5maWxlLmdldExpbmVBbmRDaGFyYWN0ZXJPZlBvc2l0aW9uKGZyb20pO1xuICAgIHRoaXMuc291cmNlTWFwcGVyLmFkZE1hcHBpbmcoXG4gICAgICAgIG5vZGUsIHtsaW5lOiBwb3MubGluZSwgY29sdW1uOiBwb3MuY2hhcmFjdGVyLCBwb3NpdGlvbjogZnJvbX0sIHRoaXMucG9zaXRpb24sIHRvIC0gZnJvbSk7XG4gICAgLy8gZ2V0U291cmNlRmlsZSgpLmdldFRleHQoKSBpcyB3cm9uZyBoZXJlIGJlY2F1c2UgaXQgaGFzIHRoZSB0ZXh0IG9mXG4gICAgLy8gdGhlIFNvdXJjZUZpbGUgbm9kZSBvZiB0aGUgQVNULCB3aGljaCBkb2Vzbid0IGNvbnRhaW4gdGhlIGNvbW1lbnRzXG4gICAgLy8gcHJlY2VkaW5nIHRoYXQgbm9kZS4gIFNlbWFudGljYWxseSB0aGVzZSByYW5nZXMgYXJlIGp1c3Qgb2Zmc2V0c1xuICAgIC8vIGludG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRleHQsIHNvIHNsaWNlIGZyb20gdGhhdC5cbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5maWxlLnRleHQuc2xpY2UoZnJvbSwgdG8pO1xuICAgIGlmICh0ZXh0KSB7XG4gICAgICB0aGlzLmVtaXQodGV4dCk7XG4gICAgfVxuICB9XG5cbiAgZW1pdChzdHI6IHN0cmluZykge1xuICAgIHRoaXMub3V0cHV0LnB1c2goc3RyKTtcbiAgICBmb3IgKGNvbnN0IGMgb2Ygc3RyKSB7XG4gICAgICB0aGlzLnBvc2l0aW9uLmNvbHVtbisrO1xuICAgICAgaWYgKGMgPT09ICdcXG4nKSB7XG4gICAgICAgIHRoaXMucG9zaXRpb24ubGluZSsrO1xuICAgICAgICB0aGlzLnBvc2l0aW9uLmNvbHVtbiA9IDA7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucG9zaXRpb24ucG9zaXRpb24gKz0gc3RyLmxlbmd0aDtcbiAgfVxuXG4gIC8qKiBSZW1vdmVzIGNvbW1lbnQgbWV0YWNoYXJhY3RlcnMgZnJvbSBhIHN0cmluZywgdG8gbWFrZSBpdCBzYWZlIHRvIGVtYmVkIGluIGEgY29tbWVudC4gKi9cbiAgZXNjYXBlRm9yQ29tbWVudChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXC9cXCovZywgJ19fJykucmVwbGFjZSgvXFwqXFwvL2csICdfXycpO1xuICB9XG5cbiAgLyogdHNsaW50OmRpc2FibGU6IG5vLXVudXNlZC12YXJpYWJsZSAqL1xuICBsb2dXaXRoSW5kZW50KG1lc3NhZ2U6IHN0cmluZykge1xuICAgIC8qIHRzbGludDplbmFibGU6IG5vLXVudXNlZC12YXJpYWJsZSAqL1xuICAgIGNvbnN0IHByZWZpeCA9IG5ldyBBcnJheSh0aGlzLmluZGVudCArIDEpLmpvaW4oJ3wgJyk7XG4gICAgY29uc29sZS5sb2cocHJlZml4ICsgbWVzc2FnZSk7XG4gIH1cblxuICAvKipcbiAgICogUHJvZHVjZXMgYSBjb21waWxlciBlcnJvciB0aGF0IHJlZmVyZW5jZXMgdGhlIE5vZGUncyBraW5kLiAgVGhpcyBpcyB1c2VmdWwgZm9yIHRoZSBcImVsc2VcIlxuICAgKiBicmFuY2ggb2YgY29kZSB0aGF0IGlzIGF0dGVtcHRpbmcgdG8gaGFuZGxlIGFsbCBwb3NzaWJsZSBpbnB1dCBOb2RlIHR5cGVzLCB0byBlbnN1cmUgYWxsIGNhc2VzXG4gICAqIGNvdmVyZWQuXG4gICAqL1xuICBlcnJvclVuaW1wbGVtZW50ZWRLaW5kKG5vZGU6IHRzLk5vZGUsIHdoZXJlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVycm9yKG5vZGUsIGAke3RzLlN5bnRheEtpbmRbbm9kZS5raW5kXX0gbm90IGltcGxlbWVudGVkIGluICR7d2hlcmV9YCk7XG4gIH1cblxuICBlcnJvcihub2RlOiB0cy5Ob2RlLCBtZXNzYWdlVGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5kaWFnbm9zdGljcy5wdXNoKHtcbiAgICAgIGZpbGU6IG5vZGUuZ2V0U291cmNlRmlsZSgpLFxuICAgICAgc3RhcnQ6IG5vZGUuZ2V0U3RhcnQoKSxcbiAgICAgIGxlbmd0aDogbm9kZS5nZXRFbmQoKSAtIG5vZGUuZ2V0U3RhcnQoKSxcbiAgICAgIG1lc3NhZ2VUZXh0LFxuICAgICAgY2F0ZWdvcnk6IHRzLkRpYWdub3N0aWNDYXRlZ29yeS5FcnJvcixcbiAgICAgIGNvZGU6IDAsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqIFJldHVybnMgdGhlIHN0cmluZyBjb250ZW50cyBvZiBhIHRzLklkZW50aWZpZXIuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWRlbnRpZmllclRleHQoaWRlbnRpZmllcjogdHMuSWRlbnRpZmllcik6IHN0cmluZyB7XG4gIC8vIE5PVEU6IHRoZSAndGV4dCcgcHJvcGVydHkgb24gYW4gSWRlbnRpZmllciBtYXkgYmUgZXNjYXBlZCBpZiBpdCBzdGFydHNcbiAgLy8gd2l0aCAnX18nLCBzbyBqdXN0IHVzZSBnZXRUZXh0KCkuXG4gIHJldHVybiBpZGVudGlmaWVyLmdldFRleHQoKTtcbn1cblxuLyoqIFJldHVybnMgYSBkb3Qtam9pbmVkIHF1YWxpZmllZCBuYW1lIChmb28uYmFyLkJheikuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW50aXR5TmFtZVRleHQobmFtZTogdHMuRW50aXR5TmFtZSk6IHN0cmluZyB7XG4gIGlmICh0cy5pc0lkZW50aWZpZXIobmFtZSkpIHtcbiAgICByZXR1cm4gZ2V0SWRlbnRpZmllclRleHQobmFtZSk7XG4gIH1cbiAgcmV0dXJuIGdldEVudGl0eU5hbWVUZXh0KG5hbWUubGVmdCkgKyAnLicgKyBnZXRJZGVudGlmaWVyVGV4dChuYW1lLnJpZ2h0KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBlc2NhcGVkIFR5cGVTY3JpcHQgbmFtZSBpbnRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgbmFtZS5cbiAqIFByZWZlciBnZXRJZGVudGlmaWVyVGV4dCgpIGluc3RlYWQgaWYgcG9zc2libGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmVzY2FwZU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gU2VlIHRoZSBwcml2YXRlIGZ1bmN0aW9uIHVuZXNjYXBlSWRlbnRpZmllciBpbiBUeXBlU2NyaXB0J3MgdXRpbGl0aWVzLnRzLlxuICBpZiAobmFtZS5tYXRjaCgvXl9fXy8pKSByZXR1cm4gbmFtZS5zdWJzdHIoMSk7XG4gIHJldHVybiBuYW1lO1xufVxuIl19

@@ -9,2 +9,3 @@ /// <amd-module name="tsickle/src/source_map_utils" />

*/
/// <amd-module name="tsickle/src/source_map_utils" />
import { RawSourceMap, SourceMapConsumer, SourceMapGenerator } from 'source-map';

@@ -78,3 +79,10 @@ import * as ts from './typescript';

addMapping(originalNode: ts.Node, original: SourcePosition, generated: SourcePosition, length: number): void;
/**
* Adds a mapping from `startPosition` to `endPosition` in the generated output. Contrary to
* addMapping, this method does not attempt to add mappings for child nodes, nor does it always
* emit a mapping for the given `originalNode`. It also does not adjust original positions for any
* leading comments.
*/
addMappingForRange(originalNode: ts.Node, startPosition: number, endPosition: number): void;
}
export declare const NOOP_SOURCE_MAPPER: SourceMapper;

@@ -122,4 +122,5 @@ /**

addMapping: function () { },
addMappingForRange: function () { },
};
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlX21hcF91dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zb3VyY2VfbWFwX3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7O0lBRUgseUNBQStFO0lBMEIvRTs7OztPQUlHO0lBQ0g7UUFDRSxPQUFPLElBQUksTUFBTSxDQUFDLDBEQUEwRCxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxpQ0FBd0MsTUFBYztRQUNwRCxPQUFPLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRkQsMERBRUM7SUFFRCxpQ0FBd0MsTUFBYztRQUNwRCxJQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQztRQUN0RCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFIRCwwREFHQztJQUVELGdDQUF1QyxNQUFjO1FBQ25ELElBQU0sb0JBQW9CLEdBQUcsdUJBQXVCLEVBQUUsQ0FBQztRQUN2RCxJQUFJLGNBQWMsR0FBeUIsSUFBSSxDQUFDO1FBQ2hELElBQUksTUFBTSxHQUF5QixJQUFJLENBQUM7UUFDeEMsNERBQTREO1FBQzVELDREQUE0RDtRQUM1RCwyREFBMkQ7UUFDM0QsbUNBQW1DO1FBQ25DLEdBQUc7WUFDRCxjQUFjLEdBQUcsTUFBTSxDQUFDO1lBQ3hCLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDNUMsUUFBUSxNQUFNLEtBQUssSUFBSSxFQUFFO1FBQzFCLElBQU0sZ0JBQWdCLEdBQUcsY0FBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQWRELHdEQWNDO0lBRUQsK0JBQXNDLE1BQWM7UUFDbEQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUZELHNEQUVDO0lBRUQ7OztPQUdHO0lBQ0gsNEJBQW1DLE1BQWMsRUFBRSxTQUFpQjtRQUNsRSxJQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzRSxJQUFJLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ25DLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FDakIsdUJBQXVCLEVBQUUsRUFDekIsdURBQXFELGdCQUFrQixDQUFDLENBQUM7U0FDOUU7YUFBTTtZQUNMLE9BQVUsTUFBTSw0REFBdUQsZ0JBQWtCLENBQUM7U0FDM0Y7SUFDSCxDQUFDO0lBVEQsZ0RBU0M7SUFFRCx3QkFBK0IsSUFBWSxFQUFFLFFBQWlCLEVBQUUsVUFBbUI7UUFDakYsSUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQWlCLENBQUM7UUFDdEQsSUFBSSxVQUFVLEVBQUU7WUFDZCxZQUFZLENBQUMsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDckM7UUFDRCxJQUFJLFFBQVEsRUFBRTtZQUNaLFlBQVksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1NBQzlCO1FBQ0QsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQVRELHdDQVNDO0lBRUQsc0NBQTZDLGlCQUFvQztRQUUvRSxPQUFPLCtCQUFrQixDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFIRCxvRUFHQztJQUVEOzs7OztPQUtHO0lBQ0gsc0NBQ0ksa0JBQXNDLEVBQUUsUUFBaUIsRUFDekQsVUFBbUI7UUFDckIsSUFBTSxZQUFZLEdBQUksa0JBQStDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDL0UsSUFBSSxVQUFVLEVBQUU7WUFDZCxZQUFZLENBQUMsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDckM7UUFDRCxJQUFJLFFBQVEsRUFBRTtZQUNaLFlBQVksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1NBQzlCO1FBQ0QsT0FBTyxJQUFJLDhCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFYRCxvRUFXQztJQUVELGlDQUF3QyxhQUFxQjtRQUMzRCwyRUFBMkU7UUFDM0UsMkVBQTJFO1FBQzNFLDJFQUEyRTtRQUMzRSwyRUFBMkU7UUFDM0UsRUFBRTtRQUNGLHdGQUF3RjtRQUN4RiwrRUFBK0U7UUFDL0Usa0NBQWtDO1FBQ2xDLE9BQU8sSUFBSSw4QkFBaUIsQ0FBQyxhQUFvQixDQUEyQixDQUFDO0lBQy9FLENBQUM7SUFWRCwwREFVQztJQUVELGtDQUF5QyxhQUFxQjtRQUM1RCxPQUFPLCtCQUFrQixDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFGRCw0REFFQztJQWdDWSxRQUFBLGtCQUFrQixHQUFpQjtRQUM5QyxhQUFhLGdCQUFlLENBQUM7UUFDN0IsVUFBVSxnQkFBZSxDQUFDO0tBQzNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7UmF3U291cmNlTWFwLCBTb3VyY2VNYXBDb25zdW1lciwgU291cmNlTWFwR2VuZXJhdG9yfSBmcm9tICdzb3VyY2UtbWFwJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJy4vdHlwZXNjcmlwdCc7XG5cbi8qKlxuICogVGhpcyBpbnRlcmZhY2Ugd2FzIGRlZmluZWQgaW4gQHR5cGVzL3NvdXJjZS1tYXAgYnV0IGlzIGFic2VudCBmcm9tIHRoZSB0eXBpbmdzXG4gKiBkaXN0cmlidXRlZCBpbiB0aGUgc291cmNlLW1hcCBwYWNrYWdlLlxuICogQ29waWVkIGZyb20gaHR0cHM6Ly91bnBrZy5jb20vQHR5cGVzL3NvdXJjZS1tYXBAMC41LjIvaW5kZXguZC50c1xuICogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL3RzaWNrbGUvaXNzdWVzLzc1MFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2ljU291cmNlTWFwQ29uc3VtZXIgZXh0ZW5kcyBTb3VyY2VNYXBDb25zdW1lciB7XG4gIGZpbGU6IHN0cmluZztcbiAgc291cmNlUm9vdDogc3RyaW5nO1xuICBzb3VyY2VzOiBzdHJpbmdbXTtcbiAgc291cmNlc0NvbnRlbnQ6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSB0b0pTT04gbWV0aG9kIGlzIGludHJvZHVjZWQgaW5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvY29tbWl0LzdjMDZhYzgzZGQ2ZDc1ZTY1ZjcxNzI3MTg0YTJkODYzMGExNWJmNTgjZGlmZi03OTQ1ZjZiYjQ0NWQ5NTY3OTQ1NjRlMDk4ZWYyMGJiM1xuICogSG93ZXZlciB0aGVyZSBpcyBhIGJyZWFraW5nIGNoYW5nZSBpbiAwLjcuXG4gKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvdHNpY2tsZS9pc3N1ZXMvNzUwXG4gKi9cbmV4cG9ydCB0eXBlIFNvdXJjZU1hcEdlbmVyYXRvclRvSnNvbiA9IFNvdXJjZU1hcEdlbmVyYXRvciZ7XG4gIHRvSlNPTigpOiBSYXdTb3VyY2VNYXA7XG59O1xuXG4vKipcbiAqIFJldHVybiBhIG5ldyBSZWdFeHAgb2JqZWN0IGV2ZXJ5IHRpbWUgd2Ugd2FudCBvbmUgYmVjYXVzZSB0aGVcbiAqIFJlZ0V4cCBvYmplY3QgaGFzIGludGVybmFsIHN0YXRlIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBwZXJzaXN0XG4gKiBiZXR3ZWVuIGRpZmZlcmVudCBsb2dpY2FsIHVzZXMuXG4gKi9cbmZ1bmN0aW9uIGdldElubGluZVNvdXJjZU1hcFJlZ2V4KCk6IFJlZ0V4cCB7XG4gIHJldHVybiBuZXcgUmVnRXhwKCdeLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCwoLiopJCcsICdtZycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbnNJbmxpbmVTb3VyY2VNYXAoc291cmNlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGdldElubGluZVNvdXJjZU1hcENvdW50KHNvdXJjZSkgPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5saW5lU291cmNlTWFwQ291bnQoc291cmNlOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCBtYXRjaCA9IHNvdXJjZS5tYXRjaChnZXRJbmxpbmVTb3VyY2VNYXBSZWdleCgpKTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2gubGVuZ3RoIDogMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RJbmxpbmVTb3VyY2VNYXAoc291cmNlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBpbmxpbmVTb3VyY2VNYXBSZWdleCA9IGdldElubGluZVNvdXJjZU1hcFJlZ2V4KCk7XG4gIGxldCBwcmV2aW91c1Jlc3VsdDogUmVnRXhwRXhlY0FycmF5fG51bGwgPSBudWxsO1xuICBsZXQgcmVzdWx0OiBSZWdFeHBFeGVjQXJyYXl8bnVsbCA9IG51bGw7XG4gIC8vIFdlIHdhbnQgdG8gZXh0cmFjdCB0aGUgbGFzdCBzb3VyY2UgbWFwIGluIHRoZSBzb3VyY2UgZmlsZVxuICAvLyBzaW5jZSB0aGF0J3MgcHJvYmFibHkgdGhlIG1vc3QgcmVjZW50IG9uZSBhZGRlZC4gIFdlIGtlZXBcbiAgLy8gbWF0Y2hpbmcgYWdhaW5zdCB0aGUgc291cmNlIHVudGlsIHdlIGRvbid0IGdldCBhIHJlc3VsdCxcbiAgLy8gdGhlbiB3ZSB1c2UgdGhlIHByZXZpb3VzIHJlc3VsdC5cbiAgZG8ge1xuICAgIHByZXZpb3VzUmVzdWx0ID0gcmVzdWx0O1xuICAgIHJlc3VsdCA9IGlubGluZVNvdXJjZU1hcFJlZ2V4LmV4ZWMoc291cmNlKTtcbiAgfSB3aGlsZSAocmVzdWx0ICE9PSBudWxsKTtcbiAgY29uc3QgYmFzZTY0RW5jb2RlZE1hcCA9IHByZXZpb3VzUmVzdWx0IVsxXTtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJhc2U2NEVuY29kZWRNYXAsICdiYXNlNjQnKS50b1N0cmluZygndXRmOCcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlSW5saW5lU291cmNlTWFwKHNvdXJjZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlKGdldElubGluZVNvdXJjZU1hcFJlZ2V4KCksICcnKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBzb3VyY2UgbWFwIGlubGluZSBpbiB0aGUgZmlsZS4gIElmIHRoZXJlJ3MgYW4gZXhpc3RpbmcgaW5saW5lIHNvdXJjZVxuICogbWFwLCBpdCBjbG9iYmVycyBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldElubGluZVNvdXJjZU1hcChzb3VyY2U6IHN0cmluZywgc291cmNlTWFwOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBlbmNvZGVkU291cmNlTWFwID0gQnVmZmVyLmZyb20oc291cmNlTWFwLCAndXRmOCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgaWYgKGNvbnRhaW5zSW5saW5lU291cmNlTWFwKHNvdXJjZSkpIHtcbiAgICByZXR1cm4gc291cmNlLnJlcGxhY2UoXG4gICAgICAgIGdldElubGluZVNvdXJjZU1hcFJlZ2V4KCksXG4gICAgICAgIGAvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCR7ZW5jb2RlZFNvdXJjZU1hcH1gKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYCR7c291cmNlfVxcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsJHtlbmNvZGVkU291cmNlTWFwfWA7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU291cmNlTWFwKHRleHQ6IHN0cmluZywgZmlsZU5hbWU/OiBzdHJpbmcsIHNvdXJjZU5hbWU/OiBzdHJpbmcpOiBSYXdTb3VyY2VNYXAge1xuICBjb25zdCByYXdTb3VyY2VNYXAgPSBKU09OLnBhcnNlKHRleHQpIGFzIFJhd1NvdXJjZU1hcDtcbiAgaWYgKHNvdXJjZU5hbWUpIHtcbiAgICByYXdTb3VyY2VNYXAuc291cmNlcyA9IFtzb3VyY2VOYW1lXTtcbiAgfVxuICBpZiAoZmlsZU5hbWUpIHtcbiAgICByYXdTb3VyY2VNYXAuZmlsZSA9IGZpbGVOYW1lO1xuICB9XG4gIHJldHVybiByYXdTb3VyY2VNYXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb3VyY2VNYXBDb25zdW1lclRvR2VuZXJhdG9yKHNvdXJjZU1hcENvbnN1bWVyOiBTb3VyY2VNYXBDb25zdW1lcik6XG4gICAgU291cmNlTWFwR2VuZXJhdG9yIHtcbiAgcmV0dXJuIFNvdXJjZU1hcEdlbmVyYXRvci5mcm9tU291cmNlTWFwKHNvdXJjZU1hcENvbnN1bWVyKTtcbn1cblxuLyoqXG4gKiBUc2MgaWRlbnRpZmllcyBzb3VyY2UgZmlsZXMgYnkgdGhlaXIgcmVsYXRpdmUgcGF0aCB0byB0aGUgb3V0cHV0IGZpbGUuICBTaW5jZVxuICogdGhlcmUncyBubyBlYXN5IHdheSB0byBpZGVudGlmeSB0aGVzZSByZWxhdGl2ZSBwYXRocyB3aGVuIHRzaWNrbGUgZ2VuZXJhdGVzIGl0c1xuICogb3duIHNvdXJjZSBtYXBzLCB3ZSBwYXRjaCB0aGVtIHdpdGggdGhlIGZpbGUgbmFtZSBmcm9tIHRoZSB0c2Mgc291cmNlIG1hcHNcbiAqIGJlZm9yZSBjb21wb3NpbmcgdGhlbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvdXJjZU1hcEdlbmVyYXRvclRvQ29uc3VtZXIoXG4gICAgc291cmNlTWFwR2VuZXJhdG9yOiBTb3VyY2VNYXBHZW5lcmF0b3IsIGZpbGVOYW1lPzogc3RyaW5nLFxuICAgIHNvdXJjZU5hbWU/OiBzdHJpbmcpOiBTb3VyY2VNYXBDb25zdW1lciB7XG4gIGNvbnN0IHJhd1NvdXJjZU1hcCA9IChzb3VyY2VNYXBHZW5lcmF0b3IgYXMgU291cmNlTWFwR2VuZXJhdG9yVG9Kc29uKS50b0pTT04oKTtcbiAgaWYgKHNvdXJjZU5hbWUpIHtcbiAgICByYXdTb3VyY2VNYXAuc291cmNlcyA9IFtzb3VyY2VOYW1lXTtcbiAgfVxuICBpZiAoZmlsZU5hbWUpIHtcbiAgICByYXdTb3VyY2VNYXAuZmlsZSA9IGZpbGVOYW1lO1xuICB9XG4gIHJldHVybiBuZXcgU291cmNlTWFwQ29uc3VtZXIocmF3U291cmNlTWFwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvdXJjZU1hcFRleHRUb0NvbnN1bWVyKHNvdXJjZU1hcFRleHQ6IHN0cmluZyk6IEJhc2ljU291cmNlTWFwQ29uc3VtZXIge1xuICAvLyB0aGUgU291cmNlTWFwQ29uc3VtZXIgY29uc3RydWN0b3IgcmV0dXJucyBhIEJhc2ljU291cmNlTWFwQ29uc3VtZXIgb3IgYW5cbiAgLy8gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyIGRlcGVuZGluZyBvbiBpZiB5b3UgcGFzcyBpbiBhIFJhd1NvdXJjZU1hcCBvciBhXG4gIC8vIFJhd0luZGV4TWFwIG9yIHRoZSBzdHJpbmcganNvbiBvZiBlaXRoZXIuICBJbiB0aGlzIGNhc2Ugd2UncmUgcGFzc2luZyBpblxuICAvLyB0aGUgc3RyaW5nIGZvciBhIFJhd1NvdXJjZU1hcCwgc28gd2UgYWx3YXlzIGdldCBhIEJhc2ljU291cmNlTWFwQ29uc3VtZXJcbiAgLy9cbiAgLy8gTm90ZSwgdGhlIHR5cGluZ3MgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgbGlicmFyeSBhcmUgbWlzc2luZyB0aGlzIGNvbnN0cnVjdG9yIG92ZXJsb2FkLFxuICAvLyBzbyB3ZSBtdXN0IHR5cGUgaXQgYXMgYW55LCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvdHNpY2tsZS9pc3N1ZXMvNzUwXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBuby1hbnlcbiAgcmV0dXJuIG5ldyBTb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXBUZXh0IGFzIGFueSkgYXMgQmFzaWNTb3VyY2VNYXBDb25zdW1lcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvdXJjZU1hcFRleHRUb0dlbmVyYXRvcihzb3VyY2VNYXBUZXh0OiBzdHJpbmcpOiBTb3VyY2VNYXBHZW5lcmF0b3Ige1xuICByZXR1cm4gU291cmNlTWFwR2VuZXJhdG9yLmZyb21Tb3VyY2VNYXAoc291cmNlTWFwVGV4dFRvQ29uc3VtZXIoc291cmNlTWFwVGV4dCkpO1xufVxuXG4vKipcbiAqIEEgcG9zaXRpb24gaW4gYSBzb3VyY2UgbWFwLiBBbGwgb2Zmc2V0cyBhcmUgemVyby1iYXNlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb3VyY2VQb3NpdGlvbiB7XG4gIC8qKiAwIGJhc2VkICovXG4gIGNvbHVtbjogbnVtYmVyO1xuICAvKiogMCBiYXNlZCAqL1xuICBsaW5lOiBudW1iZXI7XG4gIC8qKiAwIGJhc2VkIGZ1bGwgb2Zmc2V0IGluIHRoZSBmaWxlLiAqL1xuICBwb3NpdGlvbjogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNvdXJjZU1hcHBlciB7XG4gIC8qKlxuICAgKiBMb2dpY2FsbHkgc2hpZnQgYWxsIHNvdXJjZSBwb3NpdGlvbnMgYnkgYG9mZnNldGAuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCBpZiBjb2RlIGhhcyB0byBwcmVwZW5kIGFkZGl0aW9uYWwgdGV4dCB0byB0aGUgZ2VuZXJhdGVkIG91dHB1dCBhZnRlclxuICAgKiBzb3VyY2UgbWFwcGluZ3MgaGF2ZSBhbHJlYWR5IGJlZW4gZ2VuZXJhdGVkLiBUaGUgc291cmNlIG1hcHMgYXJlIHRoZW4gdHJhbnNwYXJlbnRseSBhZGp1c3RlZFxuICAgKiBkdXJpbmcgVHlwZVNjcmlwdCBvdXRwdXQgZ2VuZXJhdGlvbi5cbiAgICovXG4gIHNoaWZ0QnlPZmZzZXQob2Zmc2V0OiBudW1iZXIpOiB2b2lkO1xuICAvKipcbiAgICogQWRkcyBhIG1hcHBpbmcgZnJvbSBgb3JpZ2luYWxOb2RlYCBpbiBgb3JpZ2luYWxgIHBvc2l0aW9uIHRvIGl0cyBuZXcgbG9jYXRpb24gaW4gdGhlIG91dHB1dCxcbiAgICogc3Bhbm5pbmcgZnJvbSBgZ2VuZXJhdGVkYCAoYW4gb2Zmc2V0IGluIHRoZSBmaWxlKSBmb3IgYGxlbmd0aGAgY2hhcmFjdGVycy5cbiAgICovXG4gIGFkZE1hcHBpbmcoXG4gICAgICBvcmlnaW5hbE5vZGU6IHRzLk5vZGUsIG9yaWdpbmFsOiBTb3VyY2VQb3NpdGlvbiwgZ2VuZXJhdGVkOiBTb3VyY2VQb3NpdGlvbixcbiAgICAgIGxlbmd0aDogbnVtYmVyKTogdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IE5PT1BfU09VUkNFX01BUFBFUjogU291cmNlTWFwcGVyID0ge1xuICBzaGlmdEJ5T2Zmc2V0KCkgey8qIG5vLW9wICovfSxcbiAgYWRkTWFwcGluZygpIHsvKiBuby1vcCAqL30sXG59O1xuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlX21hcF91dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zb3VyY2VfbWFwX3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7O0lBRUgseUNBQStFO0lBMEIvRTs7OztPQUlHO0lBQ0g7UUFDRSxPQUFPLElBQUksTUFBTSxDQUFDLDBEQUEwRCxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxpQ0FBd0MsTUFBYztRQUNwRCxPQUFPLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRkQsMERBRUM7SUFFRCxpQ0FBd0MsTUFBYztRQUNwRCxJQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQztRQUN0RCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFIRCwwREFHQztJQUVELGdDQUF1QyxNQUFjO1FBQ25ELElBQU0sb0JBQW9CLEdBQUcsdUJBQXVCLEVBQUUsQ0FBQztRQUN2RCxJQUFJLGNBQWMsR0FBeUIsSUFBSSxDQUFDO1FBQ2hELElBQUksTUFBTSxHQUF5QixJQUFJLENBQUM7UUFDeEMsNERBQTREO1FBQzVELDREQUE0RDtRQUM1RCwyREFBMkQ7UUFDM0QsbUNBQW1DO1FBQ25DLEdBQUc7WUFDRCxjQUFjLEdBQUcsTUFBTSxDQUFDO1lBQ3hCLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDNUMsUUFBUSxNQUFNLEtBQUssSUFBSSxFQUFFO1FBQzFCLElBQU0sZ0JBQWdCLEdBQUcsY0FBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQWRELHdEQWNDO0lBRUQsK0JBQXNDLE1BQWM7UUFDbEQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUZELHNEQUVDO0lBRUQ7OztPQUdHO0lBQ0gsNEJBQW1DLE1BQWMsRUFBRSxTQUFpQjtRQUNsRSxJQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzRSxJQUFJLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ25DLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FDakIsdUJBQXVCLEVBQUUsRUFDekIsdURBQXFELGdCQUFrQixDQUFDLENBQUM7U0FDOUU7YUFBTTtZQUNMLE9BQVUsTUFBTSw0REFBdUQsZ0JBQWtCLENBQUM7U0FDM0Y7SUFDSCxDQUFDO0lBVEQsZ0RBU0M7SUFFRCx3QkFBK0IsSUFBWSxFQUFFLFFBQWlCLEVBQUUsVUFBbUI7UUFDakYsSUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQWlCLENBQUM7UUFDdEQsSUFBSSxVQUFVLEVBQUU7WUFDZCxZQUFZLENBQUMsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDckM7UUFDRCxJQUFJLFFBQVEsRUFBRTtZQUNaLFlBQVksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1NBQzlCO1FBQ0QsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQVRELHdDQVNDO0lBRUQsc0NBQTZDLGlCQUFvQztRQUUvRSxPQUFPLCtCQUFrQixDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFIRCxvRUFHQztJQUVEOzs7OztPQUtHO0lBQ0gsc0NBQ0ksa0JBQXNDLEVBQUUsUUFBaUIsRUFDekQsVUFBbUI7UUFDckIsSUFBTSxZQUFZLEdBQUksa0JBQStDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDL0UsSUFBSSxVQUFVLEVBQUU7WUFDZCxZQUFZLENBQUMsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDckM7UUFDRCxJQUFJLFFBQVEsRUFBRTtZQUNaLFlBQVksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1NBQzlCO1FBQ0QsT0FBTyxJQUFJLDhCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFYRCxvRUFXQztJQUVELGlDQUF3QyxhQUFxQjtRQUMzRCwyRUFBMkU7UUFDM0UsMkVBQTJFO1FBQzNFLDJFQUEyRTtRQUMzRSwyRUFBMkU7UUFDM0UsRUFBRTtRQUNGLHdGQUF3RjtRQUN4RiwrRUFBK0U7UUFDL0Usa0NBQWtDO1FBQ2xDLE9BQU8sSUFBSSw4QkFBaUIsQ0FBQyxhQUFvQixDQUEyQixDQUFDO0lBQy9FLENBQUM7SUFWRCwwREFVQztJQUVELGtDQUF5QyxhQUFxQjtRQUM1RCxPQUFPLCtCQUFrQixDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFGRCw0REFFQztJQXVDWSxRQUFBLGtCQUFrQixHQUFpQjtRQUM5QyxhQUFhLGdCQUFlLENBQUM7UUFDN0IsVUFBVSxnQkFBZSxDQUFDO1FBQzFCLGtCQUFrQixnQkFBZSxDQUFDO0tBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7UmF3U291cmNlTWFwLCBTb3VyY2VNYXBDb25zdW1lciwgU291cmNlTWFwR2VuZXJhdG9yfSBmcm9tICdzb3VyY2UtbWFwJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJy4vdHlwZXNjcmlwdCc7XG5cbi8qKlxuICogVGhpcyBpbnRlcmZhY2Ugd2FzIGRlZmluZWQgaW4gQHR5cGVzL3NvdXJjZS1tYXAgYnV0IGlzIGFic2VudCBmcm9tIHRoZSB0eXBpbmdzXG4gKiBkaXN0cmlidXRlZCBpbiB0aGUgc291cmNlLW1hcCBwYWNrYWdlLlxuICogQ29waWVkIGZyb20gaHR0cHM6Ly91bnBrZy5jb20vQHR5cGVzL3NvdXJjZS1tYXBAMC41LjIvaW5kZXguZC50c1xuICogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL3RzaWNrbGUvaXNzdWVzLzc1MFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2ljU291cmNlTWFwQ29uc3VtZXIgZXh0ZW5kcyBTb3VyY2VNYXBDb25zdW1lciB7XG4gIGZpbGU6IHN0cmluZztcbiAgc291cmNlUm9vdDogc3RyaW5nO1xuICBzb3VyY2VzOiBzdHJpbmdbXTtcbiAgc291cmNlc0NvbnRlbnQ6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSB0b0pTT04gbWV0aG9kIGlzIGludHJvZHVjZWQgaW5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvY29tbWl0LzdjMDZhYzgzZGQ2ZDc1ZTY1ZjcxNzI3MTg0YTJkODYzMGExNWJmNTgjZGlmZi03OTQ1ZjZiYjQ0NWQ5NTY3OTQ1NjRlMDk4ZWYyMGJiM1xuICogSG93ZXZlciB0aGVyZSBpcyBhIGJyZWFraW5nIGNoYW5nZSBpbiAwLjcuXG4gKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvdHNpY2tsZS9pc3N1ZXMvNzUwXG4gKi9cbmV4cG9ydCB0eXBlIFNvdXJjZU1hcEdlbmVyYXRvclRvSnNvbiA9IFNvdXJjZU1hcEdlbmVyYXRvciZ7XG4gIHRvSlNPTigpOiBSYXdTb3VyY2VNYXA7XG59O1xuXG4vKipcbiAqIFJldHVybiBhIG5ldyBSZWdFeHAgb2JqZWN0IGV2ZXJ5IHRpbWUgd2Ugd2FudCBvbmUgYmVjYXVzZSB0aGVcbiAqIFJlZ0V4cCBvYmplY3QgaGFzIGludGVybmFsIHN0YXRlIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBwZXJzaXN0XG4gKiBiZXR3ZWVuIGRpZmZlcmVudCBsb2dpY2FsIHVzZXMuXG4gKi9cbmZ1bmN0aW9uIGdldElubGluZVNvdXJjZU1hcFJlZ2V4KCk6IFJlZ0V4cCB7XG4gIHJldHVybiBuZXcgUmVnRXhwKCdeLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCwoLiopJCcsICdtZycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbnNJbmxpbmVTb3VyY2VNYXAoc291cmNlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGdldElubGluZVNvdXJjZU1hcENvdW50KHNvdXJjZSkgPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5saW5lU291cmNlTWFwQ291bnQoc291cmNlOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCBtYXRjaCA9IHNvdXJjZS5tYXRjaChnZXRJbmxpbmVTb3VyY2VNYXBSZWdleCgpKTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2gubGVuZ3RoIDogMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RJbmxpbmVTb3VyY2VNYXAoc291cmNlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBpbmxpbmVTb3VyY2VNYXBSZWdleCA9IGdldElubGluZVNvdXJjZU1hcFJlZ2V4KCk7XG4gIGxldCBwcmV2aW91c1Jlc3VsdDogUmVnRXhwRXhlY0FycmF5fG51bGwgPSBudWxsO1xuICBsZXQgcmVzdWx0OiBSZWdFeHBFeGVjQXJyYXl8bnVsbCA9IG51bGw7XG4gIC8vIFdlIHdhbnQgdG8gZXh0cmFjdCB0aGUgbGFzdCBzb3VyY2UgbWFwIGluIHRoZSBzb3VyY2UgZmlsZVxuICAvLyBzaW5jZSB0aGF0J3MgcHJvYmFibHkgdGhlIG1vc3QgcmVjZW50IG9uZSBhZGRlZC4gIFdlIGtlZXBcbiAgLy8gbWF0Y2hpbmcgYWdhaW5zdCB0aGUgc291cmNlIHVudGlsIHdlIGRvbid0IGdldCBhIHJlc3VsdCxcbiAgLy8gdGhlbiB3ZSB1c2UgdGhlIHByZXZpb3VzIHJlc3VsdC5cbiAgZG8ge1xuICAgIHByZXZpb3VzUmVzdWx0ID0gcmVzdWx0O1xuICAgIHJlc3VsdCA9IGlubGluZVNvdXJjZU1hcFJlZ2V4LmV4ZWMoc291cmNlKTtcbiAgfSB3aGlsZSAocmVzdWx0ICE9PSBudWxsKTtcbiAgY29uc3QgYmFzZTY0RW5jb2RlZE1hcCA9IHByZXZpb3VzUmVzdWx0IVsxXTtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJhc2U2NEVuY29kZWRNYXAsICdiYXNlNjQnKS50b1N0cmluZygndXRmOCcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlSW5saW5lU291cmNlTWFwKHNvdXJjZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlKGdldElubGluZVNvdXJjZU1hcFJlZ2V4KCksICcnKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBzb3VyY2UgbWFwIGlubGluZSBpbiB0aGUgZmlsZS4gIElmIHRoZXJlJ3MgYW4gZXhpc3RpbmcgaW5saW5lIHNvdXJjZVxuICogbWFwLCBpdCBjbG9iYmVycyBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldElubGluZVNvdXJjZU1hcChzb3VyY2U6IHN0cmluZywgc291cmNlTWFwOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBlbmNvZGVkU291cmNlTWFwID0gQnVmZmVyLmZyb20oc291cmNlTWFwLCAndXRmOCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgaWYgKGNvbnRhaW5zSW5saW5lU291cmNlTWFwKHNvdXJjZSkpIHtcbiAgICByZXR1cm4gc291cmNlLnJlcGxhY2UoXG4gICAgICAgIGdldElubGluZVNvdXJjZU1hcFJlZ2V4KCksXG4gICAgICAgIGAvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCR7ZW5jb2RlZFNvdXJjZU1hcH1gKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYCR7c291cmNlfVxcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsJHtlbmNvZGVkU291cmNlTWFwfWA7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU291cmNlTWFwKHRleHQ6IHN0cmluZywgZmlsZU5hbWU/OiBzdHJpbmcsIHNvdXJjZU5hbWU/OiBzdHJpbmcpOiBSYXdTb3VyY2VNYXAge1xuICBjb25zdCByYXdTb3VyY2VNYXAgPSBKU09OLnBhcnNlKHRleHQpIGFzIFJhd1NvdXJjZU1hcDtcbiAgaWYgKHNvdXJjZU5hbWUpIHtcbiAgICByYXdTb3VyY2VNYXAuc291cmNlcyA9IFtzb3VyY2VOYW1lXTtcbiAgfVxuICBpZiAoZmlsZU5hbWUpIHtcbiAgICByYXdTb3VyY2VNYXAuZmlsZSA9IGZpbGVOYW1lO1xuICB9XG4gIHJldHVybiByYXdTb3VyY2VNYXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb3VyY2VNYXBDb25zdW1lclRvR2VuZXJhdG9yKHNvdXJjZU1hcENvbnN1bWVyOiBTb3VyY2VNYXBDb25zdW1lcik6XG4gICAgU291cmNlTWFwR2VuZXJhdG9yIHtcbiAgcmV0dXJuIFNvdXJjZU1hcEdlbmVyYXRvci5mcm9tU291cmNlTWFwKHNvdXJjZU1hcENvbnN1bWVyKTtcbn1cblxuLyoqXG4gKiBUc2MgaWRlbnRpZmllcyBzb3VyY2UgZmlsZXMgYnkgdGhlaXIgcmVsYXRpdmUgcGF0aCB0byB0aGUgb3V0cHV0IGZpbGUuICBTaW5jZVxuICogdGhlcmUncyBubyBlYXN5IHdheSB0byBpZGVudGlmeSB0aGVzZSByZWxhdGl2ZSBwYXRocyB3aGVuIHRzaWNrbGUgZ2VuZXJhdGVzIGl0c1xuICogb3duIHNvdXJjZSBtYXBzLCB3ZSBwYXRjaCB0aGVtIHdpdGggdGhlIGZpbGUgbmFtZSBmcm9tIHRoZSB0c2Mgc291cmNlIG1hcHNcbiAqIGJlZm9yZSBjb21wb3NpbmcgdGhlbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvdXJjZU1hcEdlbmVyYXRvclRvQ29uc3VtZXIoXG4gICAgc291cmNlTWFwR2VuZXJhdG9yOiBTb3VyY2VNYXBHZW5lcmF0b3IsIGZpbGVOYW1lPzogc3RyaW5nLFxuICAgIHNvdXJjZU5hbWU/OiBzdHJpbmcpOiBTb3VyY2VNYXBDb25zdW1lciB7XG4gIGNvbnN0IHJhd1NvdXJjZU1hcCA9IChzb3VyY2VNYXBHZW5lcmF0b3IgYXMgU291cmNlTWFwR2VuZXJhdG9yVG9Kc29uKS50b0pTT04oKTtcbiAgaWYgKHNvdXJjZU5hbWUpIHtcbiAgICByYXdTb3VyY2VNYXAuc291cmNlcyA9IFtzb3VyY2VOYW1lXTtcbiAgfVxuICBpZiAoZmlsZU5hbWUpIHtcbiAgICByYXdTb3VyY2VNYXAuZmlsZSA9IGZpbGVOYW1lO1xuICB9XG4gIHJldHVybiBuZXcgU291cmNlTWFwQ29uc3VtZXIocmF3U291cmNlTWFwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvdXJjZU1hcFRleHRUb0NvbnN1bWVyKHNvdXJjZU1hcFRleHQ6IHN0cmluZyk6IEJhc2ljU291cmNlTWFwQ29uc3VtZXIge1xuICAvLyB0aGUgU291cmNlTWFwQ29uc3VtZXIgY29uc3RydWN0b3IgcmV0dXJucyBhIEJhc2ljU291cmNlTWFwQ29uc3VtZXIgb3IgYW5cbiAgLy8gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyIGRlcGVuZGluZyBvbiBpZiB5b3UgcGFzcyBpbiBhIFJhd1NvdXJjZU1hcCBvciBhXG4gIC8vIFJhd0luZGV4TWFwIG9yIHRoZSBzdHJpbmcganNvbiBvZiBlaXRoZXIuICBJbiB0aGlzIGNhc2Ugd2UncmUgcGFzc2luZyBpblxuICAvLyB0aGUgc3RyaW5nIGZvciBhIFJhd1NvdXJjZU1hcCwgc28gd2UgYWx3YXlzIGdldCBhIEJhc2ljU291cmNlTWFwQ29uc3VtZXJcbiAgLy9cbiAgLy8gTm90ZSwgdGhlIHR5cGluZ3MgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgbGlicmFyeSBhcmUgbWlzc2luZyB0aGlzIGNvbnN0cnVjdG9yIG92ZXJsb2FkLFxuICAvLyBzbyB3ZSBtdXN0IHR5cGUgaXQgYXMgYW55LCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvdHNpY2tsZS9pc3N1ZXMvNzUwXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBuby1hbnlcbiAgcmV0dXJuIG5ldyBTb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXBUZXh0IGFzIGFueSkgYXMgQmFzaWNTb3VyY2VNYXBDb25zdW1lcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvdXJjZU1hcFRleHRUb0dlbmVyYXRvcihzb3VyY2VNYXBUZXh0OiBzdHJpbmcpOiBTb3VyY2VNYXBHZW5lcmF0b3Ige1xuICByZXR1cm4gU291cmNlTWFwR2VuZXJhdG9yLmZyb21Tb3VyY2VNYXAoc291cmNlTWFwVGV4dFRvQ29uc3VtZXIoc291cmNlTWFwVGV4dCkpO1xufVxuXG4vKipcbiAqIEEgcG9zaXRpb24gaW4gYSBzb3VyY2UgbWFwLiBBbGwgb2Zmc2V0cyBhcmUgemVyby1iYXNlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb3VyY2VQb3NpdGlvbiB7XG4gIC8qKiAwIGJhc2VkICovXG4gIGNvbHVtbjogbnVtYmVyO1xuICAvKiogMCBiYXNlZCAqL1xuICBsaW5lOiBudW1iZXI7XG4gIC8qKiAwIGJhc2VkIGZ1bGwgb2Zmc2V0IGluIHRoZSBmaWxlLiAqL1xuICBwb3NpdGlvbjogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNvdXJjZU1hcHBlciB7XG4gIC8qKlxuICAgKiBMb2dpY2FsbHkgc2hpZnQgYWxsIHNvdXJjZSBwb3NpdGlvbnMgYnkgYG9mZnNldGAuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCBpZiBjb2RlIGhhcyB0byBwcmVwZW5kIGFkZGl0aW9uYWwgdGV4dCB0byB0aGUgZ2VuZXJhdGVkIG91dHB1dCBhZnRlclxuICAgKiBzb3VyY2UgbWFwcGluZ3MgaGF2ZSBhbHJlYWR5IGJlZW4gZ2VuZXJhdGVkLiBUaGUgc291cmNlIG1hcHMgYXJlIHRoZW4gdHJhbnNwYXJlbnRseSBhZGp1c3RlZFxuICAgKiBkdXJpbmcgVHlwZVNjcmlwdCBvdXRwdXQgZ2VuZXJhdGlvbi5cbiAgICovXG4gIHNoaWZ0QnlPZmZzZXQob2Zmc2V0OiBudW1iZXIpOiB2b2lkO1xuICAvKipcbiAgICogQWRkcyBhIG1hcHBpbmcgZnJvbSBgb3JpZ2luYWxOb2RlYCBpbiBgb3JpZ2luYWxgIHBvc2l0aW9uIHRvIGl0cyBuZXcgbG9jYXRpb24gaW4gdGhlIG91dHB1dCxcbiAgICogc3Bhbm5pbmcgZnJvbSBgZ2VuZXJhdGVkYCAoYW4gb2Zmc2V0IGluIHRoZSBmaWxlKSBmb3IgYGxlbmd0aGAgY2hhcmFjdGVycy5cbiAgICovXG4gIGFkZE1hcHBpbmcoXG4gICAgICBvcmlnaW5hbE5vZGU6IHRzLk5vZGUsIG9yaWdpbmFsOiBTb3VyY2VQb3NpdGlvbiwgZ2VuZXJhdGVkOiBTb3VyY2VQb3NpdGlvbixcbiAgICAgIGxlbmd0aDogbnVtYmVyKTogdm9pZDtcbiAgLyoqXG4gICAqIEFkZHMgYSBtYXBwaW5nIGZyb20gYHN0YXJ0UG9zaXRpb25gIHRvIGBlbmRQb3NpdGlvbmAgaW4gdGhlIGdlbmVyYXRlZCBvdXRwdXQuIENvbnRyYXJ5IHRvXG4gICAqIGFkZE1hcHBpbmcsIHRoaXMgbWV0aG9kIGRvZXMgbm90IGF0dGVtcHQgdG8gYWRkIG1hcHBpbmdzIGZvciBjaGlsZCBub2Rlcywgbm9yIGRvZXMgaXQgYWx3YXlzXG4gICAqIGVtaXQgYSBtYXBwaW5nIGZvciB0aGUgZ2l2ZW4gYG9yaWdpbmFsTm9kZWAuIEl0IGFsc28gZG9lcyBub3QgYWRqdXN0IG9yaWdpbmFsIHBvc2l0aW9ucyBmb3IgYW55XG4gICAqIGxlYWRpbmcgY29tbWVudHMuXG4gICAqL1xuICBhZGRNYXBwaW5nRm9yUmFuZ2Uob3JpZ2luYWxOb2RlOiB0cy5Ob2RlLCBzdGFydFBvc2l0aW9uOiBudW1iZXIsIGVuZFBvc2l0aW9uOiBudW1iZXIpOiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgTk9PUF9TT1VSQ0VfTUFQUEVSOiBTb3VyY2VNYXBwZXIgPSB7XG4gIHNoaWZ0QnlPZmZzZXQoKSB7Lyogbm8tb3AgKi99LFxuICBhZGRNYXBwaW5nKCkgey8qIG5vLW9wICovfSxcbiAgYWRkTWFwcGluZ0ZvclJhbmdlKCkgey8qIG5vLW9wICovfSxcbn07XG4iXX0=

@@ -9,2 +9,3 @@ /// <amd-module name="tsickle/src/transformer_sourcemap" />

*/
/// <amd-module name="tsickle/src/transformer_sourcemap" />
import { SourceMapper } from './source_map_utils';

@@ -11,0 +12,0 @@ import * as ts from './typescript';

@@ -129,2 +129,10 @@ /**

}
/**
* Recursively adds a source mapping for node and each of its children, mapping ranges from the
* generated start position plus the child nodes offset up to its length.
*
* This is a useful catch all that works for most nodes, as long as their distance from the parent
* does not change during emit and their own length does not change during emit (e.g. there are no
* comments added inside them, no rewrites happening).
*/
NodeSourceMapper.prototype.addFullNodeRange = function (node, genStartPos) {

@@ -138,2 +146,14 @@ var _this = this;

};
/**
* Adds a mapping for the specific start/end range in the generated output back to the
* originalNode.
*/
NodeSourceMapper.prototype.addMappingForRange = function (originalNode, startPos, endPos) {
// TODO(martinprobst): This glaringly duplicates addMapping below. However attempting to unify
// these causes failures around exported variable nodes. Additionally, inspecting this code
// longer suggests that it really only barely works by accident, and should much rather be
// replaced by proper transformers :-(
var cc = this.nodeCacheKey(originalNode.kind, startPos, endPos);
this.originalNodeByGeneratedRange.set(cc, originalNode);
};
NodeSourceMapper.prototype.addMapping = function (originalNode, original, generated, length) {

@@ -154,3 +174,4 @@ var _this = this;

if (originalStartPos + length === originalNode.getEnd()) {
this.originalNodeByGeneratedRange.set(this.nodeCacheKey(originalNode.kind, this.genStartPositions.get(originalNode), genStartPos + length), originalNode);
var cc = this.nodeCacheKey(originalNode.kind, this.genStartPositions.get(originalNode), genStartPos + length);
this.originalNodeByGeneratedRange.set(cc, originalNode);
}

@@ -202,2 +223,2 @@ originalNode.forEachChild(function (child) {

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtZXJfc291cmNlbWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyYW5zZm9ybWVyX3NvdXJjZW1hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7OztJQUdILGlFQUEwRztJQUMxRywyQ0FBbUM7SUFFbkM7Ozs7Ozs7Ozs7O09BV0c7SUFDSCx3Q0FDSSxzQkFDVTtRQUNaLE9BQU8sVUFBQyxPQUFPLElBQUssT0FBQSxVQUFDLFVBQVU7WUFDN0IsSUFBTSxZQUFZLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQzVDLElBQU0scUJBQXFCLEdBQUcsc0JBQXNCLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQy9FLElBQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FDL0IsVUFBVSxDQUFDLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM5RSxJQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEMsT0FBTyx1Q0FBb0IsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRS9ELG1CQUFzQyxJQUFPO2dCQUMzQyxPQUFPLG1EQUFnQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBTSxDQUFDO1lBQ3RGLENBQUM7WUFFRCx1QkFBdUIsSUFBYTtnQkFDbEMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFO29CQUN6QyxPQUFPLElBQUksQ0FBQztpQkFDYjtnQkFDRCxJQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUV4RCw0QkFBNEI7Z0JBQzVCLDJFQUEyRTtnQkFDM0UsNkRBQTZE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QztRQUN2QixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLEdBQUcsS0FBSyxTQUFTLElBQUksUUFBUSxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUM7SUFDMUYsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxpQkFBaUIsS0FBVTtRQUN6QixPQUFPLEtBQUssSUFBSSxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVO1lBQ3ZGLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7SUFDNUMsQ0FBQztJQUVELHlCQUF5QjtJQUN6Qix1QkFBdUIsSUFBbUI7UUFDeEMsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLGlCQUFpQixJQUFJLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztJQUMzRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1NvdXJjZU1hcHBlciwgU291cmNlUG9zaXRpb259IGZyb20gJy4vc291cmNlX21hcF91dGlscyc7XG5pbXBvcnQge2lzVHlwZU5vZGVLaW5kLCB1cGRhdGVTb3VyY2VGaWxlTm9kZSwgdmlzaXROb2RlV2l0aFN5bnRoZXNpemVkQ29tbWVudHN9IGZyb20gJy4vdHJhbnNmb3JtZXJfdXRpbCc7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICcuL3R5cGVzY3JpcHQnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBUeXBlU2NyaXB0IHRyYW5zZm9ybWVyIGJhc2VkIG9uIGEgc291cmNlLT50ZXh0IHRyYW5zZm9ybWF0aW9uLlxuICpcbiAqIFR5cGVTY3JpcHQgdHJhbnNmb3JtZXJzIG9wZXJhdGUgb24gQVNUIG5vZGVzLiBOZXdseSBjcmVhdGVkIG5vZGVzIG11c3QgYmUgbWFya2VkIGFzIHJlcGxhY2luZyBhblxuICogb2xkZXIgQVNUIG5vZGUuIFRoaXMgc2hpbSBhbGxvd3MgcnVubmluZyBhIHRyYW5zZm9ybWF0aW9uIHN0ZXAgdGhhdCdzIGJhc2VkIG9uIGVtaXR0aW5nIG5ldyB0ZXh0XG4gKiBhcyBhIG5vZGUgYmFzZWQgdHJhbnNmb3JtZXIuIEl0IGFjaGlldmVzIHRoYXQgYnkgcnVubmluZyB0aGUgdHJhbnNmb3JtYXRpb24sIGNvbGxlY3RpbmcgYSBzb3VyY2VcbiAqIG1hcHBpbmcgaW4gdGhlIHByb2Nlc3MsIGFuZCB0aGVuIGFmdGVyd2FyZHMgcGFyc2luZyB0aGUgc291cmNlIHRleHQgaW50byBhIG5ldyBBU1QgYW5kIG1hcmtpbmdcbiAqIHRoZSBuZXcgbm9kZXMgYXMgcmVwcmVzZW50YXRpb25zIG9mIHRoZSBvbGQgbm9kZXMgYmFzZWQgb24gdGhlaXIgc291cmNlIG1hcCBwb3NpdGlvbnMuXG4gKlxuICogVGhlIHByb2Nlc3MgbWFya3MgYWxsIG5vZGVzIGFzIHN5bnRoZXNpemVkIGV4Y2VwdCBmb3IgYSBoYW5kZnVsIG9mIHNwZWNpYWwgY2FzZXMgKGlkZW50aWZpZXJzXG4gKiBldGMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVHJhbnNmb3JtZXJGcm9tU291cmNlTWFwKFxuICAgIHNvdXJjZUJhc2VkVHJhbnNmb3JtZXI6IChzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlLCBzb3VyY2VNYXBwZXI6IFNvdXJjZU1hcHBlcikgPT5cbiAgICAgICAgc3RyaW5nKTogdHMuVHJhbnNmb3JtZXJGYWN0b3J5PHRzLlNvdXJjZUZpbGU+IHtcbiAgcmV0dXJuIChjb250ZXh0KSA9PiAoc291cmNlRmlsZSkgPT4ge1xuICAgIGNvbnN0IHNvdXJjZU1hcHBlciA9IG5ldyBOb2RlU291cmNlTWFwcGVyKCk7XG4gICAgY29uc3QgdHJhbnNmb3JtZWRTb3VyY2VUZXh0ID0gc291cmNlQmFzZWRUcmFuc2Zvcm1lcihzb3VyY2VGaWxlLCBzb3VyY2VNYXBwZXIpO1xuICAgIGNvbnN0IG5ld0ZpbGUgPSB0cy5jcmVhdGVTb3VyY2VGaWxlKFxuICAgICAgICBzb3VyY2VGaWxlLmZpbGVOYW1lLCB0cmFuc2Zvcm1lZFNvdXJjZVRleHQsIHRzLlNjcmlwdFRhcmdldC5MYXRlc3QsIHRydWUpO1xuICAgIGNvbnN0IG1hcHBlZEZpbGUgPSB2aXNpdE5vZGUobmV3RmlsZSk7XG4gICAgcmV0dXJuIHVwZGF0ZVNvdXJjZUZpbGVOb2RlKHNvdXJjZUZpbGUsIG1hcHBlZEZpbGUuc3RhdGVtZW50cyk7XG5cbiAgICBmdW5jdGlvbiB2aXNpdE5vZGU8VCBleHRlbmRzIHRzLk5vZGU+KG5vZGU6IFQpOiBUIHtcbiAgICAgIHJldHVybiB2aXNpdE5vZGVXaXRoU3ludGhlc2l6ZWRDb21tZW50cyhjb250ZXh0LCBuZXdGaWxlLCBub2RlLCB2aXNpdE5vZGVJbXBsKSBhcyBUO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZpc2l0Tm9kZUltcGwobm9kZTogdHMuTm9kZSkge1xuICAgICAgaWYgKG5vZGUuZmxhZ3MgJiB0cy5Ob2RlRmxhZ3MuU3ludGhlc2l6ZWQpIHtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG4gICAgICBjb25zdCBvcmlnaW5hbE5vZGUgPSBzb3VyY2VNYXBwZXIuZ2V0T3JpZ2luYWxOb2RlKG5vZGUpO1xuXG4gICAgICAvLyBVc2UgdGhlIG9yaWdpbmFsTm9kZSBmb3I6XG4gICAgICAvLyAtIGxpdGVyYWxzOiBhcyBlLmcuIHR5cGVzY3JpcHQgZG9lcyBub3Qgc3VwcG9ydCBzeW50aGV0aWMgcmVnZXggbGl0ZXJhbHNcbiAgICAgIC8vIC0gaWRlbnRpZmllcnM6IGFzIHRoZXkgZG9uJ3QgaGF2ZSBjaGlsZHJlbiBhbmQgYmVoYXZlIHdlbGxcbiAgICAgIC8vICAgIHJlZ2FyZGluZyBjb21tZW50IHN5bnRoZXNpemF0aW9uXG4gICAgICAvLyAtIHR5cGVzOiBhcyB0aGV5IGFyZSBub3QgZW1pdGVkIGFueXdheXNcbiAgICAgIC8vICAgICAgICAgIGFuZCBpdCBsZWFkcyB0byBlcnJvcnMgd2l0aCBgZXh0ZW5kc2AgY2FzZXMuXG4gICAgICAvLyAtIGltcG9ydHMvZXhwb3J0czogYXMgVHlwZVNjcmlwdCB3aWxsIG9ubHkgYXR0ZW1wdCB0byBlbGlkZSB0eXBlIG9ubHlcbiAgICAgIC8vICAgICAgICAgICAgICAgICAgICBpbXBvcnRzIGlmIHRoZSBuZXcgbm9kZSBpcyBpZGVudGljYWwgdG8gdGhlIG9yaWdpbmFsIG5vZGUuXG4gICAgICBpZiAob3JpZ2luYWxOb2RlKSB7XG4gICAgICAgIGlmIChpc0xpdGVyYWxLaW5kKG5vZGUua2luZCkgfHwgbm9kZS5raW5kID09PSB0cy5TeW50YXhLaW5kLklkZW50aWZpZXIgfHxcbiAgICAgICAgICAgIGlzVHlwZU5vZGVLaW5kKG5vZGUua2luZCkgfHwgbm9kZS5raW5kID09PSB0cy5TeW50YXhLaW5kLkluZGV4U2lnbmF0dXJlKSB7XG4gICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTm9kZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5raW5kID09PSB0cy5TeW50YXhLaW5kLkltcG9ydERlY2xhcmF0aW9uIHx8XG4gICAgICAgICAgICBub2RlLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24gfHxcbiAgICAgICAgICAgIG5vZGUua2luZCA9PT0gdHMuU3ludGF4S2luZC5FeHBvcnRBc3NpZ25tZW50KSB7XG4gICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTm9kZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHMuaXNFeHBvcnREZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgICAgIC8vIFJldHVybiB0aGUgb3JpZ2luYWwgbm9kZXMgZm9yIGV4cG9ydCBkZWNsYXJhdGlvbnMsIHVubGVzcyB0aGV5IHdlcmUgZXhwYW5kZWQgZnJvbSBhblxuICAgICAgICAgIC8vIGV4cG9ydCAqIHRvIHNwZWNpZmljIGV4cG9ydGVkIHN5bWJvbHMuXG4gICAgICAgICAgY29uc3Qgb3JpZ2luYWxFeHBvcnQgPSBvcmlnaW5hbE5vZGUgYXMgdHMuRXhwb3J0RGVjbGFyYXRpb247XG4gICAgICAgICAgaWYgKCFub2RlLm1vZHVsZVNwZWNpZmllcikge1xuICAgICAgICAgICAgLy8gZXhwb3J0IHthLCBiLCBjfTtcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghIW9yaWdpbmFsRXhwb3J0LmV4cG9ydENsYXVzZSA9PT0gISFub2RlLmV4cG9ydENsYXVzZSkge1xuICAgICAgICAgICAgLy8gVGhpcyBhbHJlYWR5IHdhcyBleHBvcnRlZCB3aXRoIHN5bWJvbHMgKGV4cG9ydCB7Li4ufSkgb3Igd2FzIG5vdCBleHBhbmRlZC5cbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFJld3JvdGUgZXhwb3J0ICogLT4gZXhwb3J0IHsuLi59LCB0aGUgZXhwb3J0IGRlY2xhcmF0aW9uIG11c3QgYmUgZW1pdHRlZCBpbiB0aGUgdXBkYXRlZFxuICAgICAgICAgIC8vIGZvcm0uXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG5vZGUgPSB0cy52aXNpdEVhY2hDaGlsZChub2RlLCB2aXNpdE5vZGUsIGNvbnRleHQpO1xuXG4gICAgICBub2RlLmZsYWdzIHw9IHRzLk5vZGVGbGFncy5TeW50aGVzaXplZDtcbiAgICAgIG5vZGUucGFyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdHMuc2V0VGV4dFJhbmdlKG5vZGUsIG9yaWdpbmFsTm9kZSA/IG9yaWdpbmFsTm9kZSA6IHtwb3M6IC0xLCBlbmQ6IC0xfSk7XG4gICAgICB0cy5zZXRPcmlnaW5hbE5vZGUobm9kZSwgb3JpZ2luYWxOb2RlKTtcblxuICAgICAgLy8gTG9vcCBvdmVyIGFsbCBuZXN0ZWQgdHMuTm9kZUFycmF5cyAvXG4gICAgICAvLyB0cy5Ob2RlcyB0aGF0IHdlcmUgbm90IHZpc2l0ZWQgYW5kIHNldCB0aGVpclxuICAgICAgLy8gdGV4dCByYW5nZSB0byAtMSB0byBub3QgZW1pdCB0aGVpciB3aGl0ZXNwYWNlLlxuICAgICAgLy8gU2FkbHksIFR5cGVTY3JpcHQgZG9lcyBub3QgaGF2ZSBhbiBBUEkgZm9yIHRoaXMuLi5cbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnkgVG8gcmVhZCBhbGwgcHJvcGVydGllc1xuICAgICAgY29uc3Qgbm9kZUFueSA9IG5vZGUgYXMge1trZXk6IHN0cmluZ106IGFueX07XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55IFRvIHJlYWQgYWxsIHByb3BlcnRpZXNcbiAgICAgIGNvbnN0IG9yaWdpbmFsTm9kZUFueSA9IG9yaWdpbmFsTm9kZSBhcyB7W2tleTogc3RyaW5nXTogYW55fTtcbiAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBub2RlQW55KSB7XG4gICAgICAgIGlmIChub2RlQW55Lmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgICAgICAgIGNvbnN0IHZhbHVlID0gbm9kZUFueVtwcm9wXTtcbiAgICAgICAgICBpZiAoaXNOb2RlQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAvLyByZXNldCB0aGUgcG9zL2VuZCBvZiBhbGwgTm9kZUFycmF5cyBzbyB0aGF0IHdlIGRvbid0IGVtaXQgY29tbWVudHNcbiAgICAgICAgICAgIC8vIGZyb20gdGhlbS5cbiAgICAgICAgICAgIHRzLnNldFRleHRSYW5nZSh2YWx1ZSwge3BvczogLTEsIGVuZDogLTF9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICBpc1Rva2VuKHZhbHVlKSAmJiAhKHZhbHVlLmZsYWdzICYgdHMuTm9kZUZsYWdzLlN5bnRoZXNpemVkKSAmJlxuICAgICAgICAgICAgICB2YWx1ZS5nZXRTb3VyY2VGaWxlKCkgIT09IHNvdXJjZUZpbGUpIHtcbiAgICAgICAgICAgIC8vIFVzZSB0aGUgb3JpZ2luYWwgVGV4dFJhbmdlIGZvciBhbGwgbm9uIHZpc2l0ZWQgdG9rZW5zIChlLmcuIHRoZVxuICAgICAgICAgICAgLy8gYEJpbmFyeUV4cHJlc3Npb24ub3BlcmF0b3JUb2tlbmApIHRvIHByZXNlcnZlIHRoZSBmb3JtYXR0aW5nXG4gICAgICAgICAgICBjb25zdCB0ZXh0UmFuZ2UgPSBvcmlnaW5hbE5vZGUgPyBvcmlnaW5hbE5vZGVBbnlbcHJvcF0gOiB7cG9zOiAtMSwgZW5kOiAtMX07XG4gICAgICAgICAgICB0cy5zZXRUZXh0UmFuZ2UodmFsdWUsIHRleHRSYW5nZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgYFNvdXJjZU1hcHBlcmAgdGhhdCBzdG9yZXMgYW5kIHJldHJpZXZlcyBtYXBwaW5nc1xuICogdG8gb3JpZ2luYWwgbm9kZXMuXG4gKi9cbmNsYXNzIE5vZGVTb3VyY2VNYXBwZXIgaW1wbGVtZW50cyBTb3VyY2VNYXBwZXIge1xuICBwcml2YXRlIG9yaWdpbmFsTm9kZUJ5R2VuZXJhdGVkUmFuZ2UgPSBuZXcgTWFwPHN0cmluZywgdHMuTm9kZT4oKTtcbiAgcHJpdmF0ZSBnZW5TdGFydFBvc2l0aW9ucyA9IG5ldyBNYXA8dHMuTm9kZSwgbnVtYmVyPigpO1xuICAvKiogQ29uY2VwdHVhbCBvZmZzZXQgZm9yIGFsbCBub2RlcyBpbiB0aGlzIG1hcHBpbmcuICovXG4gIHByaXZhdGUgb2Zmc2V0ID0gMDtcblxuICBwcml2YXRlIGFkZEZ1bGxOb2RlUmFuZ2Uobm9kZTogdHMuTm9kZSwgZ2VuU3RhcnRQb3M6IG51bWJlcikge1xuICAgIHRoaXMub3JpZ2luYWxOb2RlQnlHZW5lcmF0ZWRSYW5nZS5zZXQoXG4gICAgICAgIHRoaXMubm9kZUNhY2hlS2V5KG5vZGUua2luZCwgZ2VuU3RhcnRQb3MsIGdlblN0YXJ0UG9zICsgKG5vZGUuZ2V0RW5kKCkgLSBub2RlLmdldFN0YXJ0KCkpKSxcbiAgICAgICAgbm9kZSk7XG4gICAgbm9kZS5mb3JFYWNoQ2hpbGQoXG4gICAgICAgIGNoaWxkID0+IHRoaXMuYWRkRnVsbE5vZGVSYW5nZShjaGlsZCwgZ2VuU3RhcnRQb3MgKyAoY2hpbGQuZ2V0U3RhcnQoKSAtIG5vZGUuZ2V0U3RhcnQoKSkpKTtcbiAgfVxuXG4gIHNoaWZ0QnlPZmZzZXQob2Zmc2V0OiBudW1iZXIpIHtcbiAgICB0aGlzLm9mZnNldCArPSBvZmZzZXQ7XG4gIH1cblxuICBhZGRNYXBwaW5nKFxuICAgICAgb3JpZ2luYWxOb2RlOiB0cy5Ob2RlLCBvcmlnaW5hbDogU291cmNlUG9zaXRpb24sIGdlbmVyYXRlZDogU291cmNlUG9zaXRpb24sIGxlbmd0aDogbnVtYmVyKSB7XG4gICAgbGV0IG9yaWdpbmFsU3RhcnRQb3MgPSBvcmlnaW5hbC5wb3NpdGlvbjtcbiAgICBsZXQgZ2VuU3RhcnRQb3MgPSBnZW5lcmF0ZWQucG9zaXRpb247XG4gICAgaWYgKG9yaWdpbmFsU3RhcnRQb3MgPj0gb3JpZ2luYWxOb2RlLmdldEZ1bGxTdGFydCgpICYmXG4gICAgICAgIG9yaWdpbmFsU3RhcnRQb3MgPD0gb3JpZ2luYWxOb2RlLmdldFN0YXJ0KCkpIHtcbiAgICAgIC8vIGFsd2F5cyB1c2UgdGhlIG5vZGUuZ2V0U3RhcnQoKSBmb3IgdGhlIGluZGV4LFxuICAgICAgLy8gYXMgY29tbWVudHMgYW5kIHdoaXRlc3BhY2VzIG1pZ2h0IGRpZmZlciBiZXR3ZWVuIHRoZSBvcmlnaW5hbCBhbmQgdHJhbnNmb3JtZWQgY29kZS5cbiAgICAgIGNvbnN0IGRpZmZUb1N0YXJ0ID0gb3JpZ2luYWxOb2RlLmdldFN0YXJ0KCkgLSBvcmlnaW5hbFN0YXJ0UG9zO1xuICAgICAgb3JpZ2luYWxTdGFydFBvcyArPSBkaWZmVG9TdGFydDtcbiAgICAgIGdlblN0YXJ0UG9zICs9IGRpZmZUb1N0YXJ0O1xuICAgICAgbGVuZ3RoIC09IGRpZmZUb1N0YXJ0O1xuICAgICAgdGhpcy5nZW5TdGFydFBvc2l0aW9ucy5zZXQob3JpZ2luYWxOb2RlLCBnZW5TdGFydFBvcyk7XG4gICAgfVxuICAgIGlmIChvcmlnaW5hbFN0YXJ0UG9zICsgbGVuZ3RoID09PSBvcmlnaW5hbE5vZGUuZ2V0RW5kKCkpIHtcbiAgICAgIHRoaXMub3JpZ2luYWxOb2RlQnlHZW5lcmF0ZWRSYW5nZS5zZXQoXG4gICAgICAgICAgdGhpcy5ub2RlQ2FjaGVLZXkoXG4gICAgICAgICAgICAgIG9yaWdpbmFsTm9kZS5raW5kLCB0aGlzLmdlblN0YXJ0UG9zaXRpb25zLmdldChvcmlnaW5hbE5vZGUpISwgZ2VuU3RhcnRQb3MgKyBsZW5ndGgpLFxuICAgICAgICAgIG9yaWdpbmFsTm9kZSk7XG4gICAgfVxuICAgIG9yaWdpbmFsTm9kZS5mb3JFYWNoQ2hpbGQoKGNoaWxkKSA9PiB7XG4gICAgICBpZiAoY2hpbGQuZ2V0U3RhcnQoKSA+PSBvcmlnaW5hbFN0YXJ0UG9zICYmIGNoaWxkLmdldEVuZCgpIDw9IG9yaWdpbmFsU3RhcnRQb3MgKyBsZW5ndGgpIHtcbiAgICAgICAgdGhpcy5hZGRGdWxsTm9kZVJhbmdlKGNoaWxkLCBnZW5TdGFydFBvcyArIChjaGlsZC5nZXRTdGFydCgpIC0gb3JpZ2luYWxTdGFydFBvcykpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEZvciB0aGUgbmV3bHkgcGFyc2VkIGBub2RlYCwgZmluZCB3aGF0IG5vZGUgY29ycmVzcG9uZGVkIHRvIGl0IGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGV4dC4gKi9cbiAgZ2V0T3JpZ2luYWxOb2RlKG5vZGU6IHRzLk5vZGUpOiB0cy5Ob2RlfHVuZGVmaW5lZCB7XG4gICAgLy8gQXBwbHkgdGhlIG9mZnNldDogaWYgdGhlcmUgaXMgYW4gb2Zmc2V0ID4gMCwgYWxsIG5vZGVzIGFyZSBjb25jZXB0dWFsbHkgc2hpZnRlZCBieSBzbyBtYW55XG4gICAgLy8gY2hhcmFjdGVycyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZmlsZS5cbiAgICBsZXQgc3RhcnQgPSBub2RlLmdldFN0YXJ0KCkgLSB0aGlzLm9mZnNldDtcbiAgICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgICAvLyBTcGVjaWFsIGNhc2U6IHRoZSBzb3VyY2UgZmlsZSBjb25jZXB0dWFsbHkgc3BhbnMgYWxsIG9mIHRoZSBmaWxlLCBpbmNsdWRpbmcgYW55IGFkZGVkXG4gICAgICAvLyBwcmVmaXggYWRkZWQgdGhhdCBjYXVzZXMgb2Zmc2V0IHRvIGJlIHNldC5cbiAgICAgIGlmIChub2RlLmtpbmQgIT09IHRzLlN5bnRheEtpbmQuU291cmNlRmlsZSkge1xuICAgICAgICAvLyBOb2RlcyB3aXRoaW4gWzAsIG9mZnNldF0gb2YgdGhlIG5ldyBmaWxlIChzdGFydCA8IDApIGlzIHRoZSBhZGRpdGlvbmFsIHByZWZpeCB0aGF0IGhhcyBub1xuICAgICAgICAvLyBjb3JyZXNwb25kaW5nIG5vZGVzIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIHNvIHJldHVybiB1bmRlZmluZWQuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBzdGFydCA9IDA7XG4gICAgfVxuICAgIGNvbnN0IGVuZCA9IG5vZGUuZ2V0RW5kKCkgLSB0aGlzLm9mZnNldDtcbiAgICBjb25zdCBrZXkgPSB0aGlzLm5vZGVDYWNoZUtleShub2RlLmtpbmQsIHN0YXJ0LCBlbmQpO1xuICAgIHJldHVybiB0aGlzLm9yaWdpbmFsTm9kZUJ5R2VuZXJhdGVkUmFuZ2UuZ2V0KGtleSk7XG4gIH1cblxuICBwcml2YXRlIG5vZGVDYWNoZUtleShraW5kOiB0cy5TeW50YXhLaW5kLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke2tpbmR9IyR7c3RhcnR9IyR7ZW5kfWA7XG4gIH1cbn1cblxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuZnVuY3Rpb24gaXNOb2RlQXJyYXkodmFsdWU6IGFueSk6IHZhbHVlIGlzIHRzLk5vZGVBcnJheTxhbnk+IHtcbiAgY29uc3QgYW55VmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIGFueVZhbHVlLnBvcyAhPT0gdW5kZWZpbmVkICYmIGFueVZhbHVlLmVuZCAhPT0gdW5kZWZpbmVkO1xufVxuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG5mdW5jdGlvbiBpc1Rva2VuKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyB0cy5Ub2tlbjxhbnk+IHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5raW5kID49IHRzLlN5bnRheEtpbmQuRmlyc3RUb2tlbiAmJlxuICAgICAgdmFsdWUua2luZCA8PSB0cy5TeW50YXhLaW5kLkxhc3RUb2tlbjtcbn1cblxuLy8gQ29waWVkIGZyb20gVHlwZVNjcmlwdFxuZnVuY3Rpb24gaXNMaXRlcmFsS2luZChraW5kOiB0cy5TeW50YXhLaW5kKSB7XG4gIHJldHVybiB0cy5TeW50YXhLaW5kLkZpcnN0TGl0ZXJhbFRva2VuIDw9IGtpbmQgJiYga2luZCA8PSB0cy5TeW50YXhLaW5kLkxhc3RMaXRlcmFsVG9rZW47XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtZXJfc291cmNlbWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyYW5zZm9ybWVyX3NvdXJjZW1hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7OztJQUdILGlFQUEwRztJQUMxRywyQ0FBbUM7SUFFbkM7Ozs7Ozs7Ozs7O09BV0c7SUFDSCx3Q0FDSSxzQkFDVTtRQUNaLE9BQU8sVUFBQyxPQUFPLElBQUssT0FBQSxVQUFDLFVBQVU7WUFDN0IsSUFBTSxZQUFZLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQzVDLElBQU0scUJBQXFCLEdBQUcsc0JBQXNCLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQy9FLElBQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FDL0IsVUFBVSxDQUFDLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM5RSxJQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEMsT0FBTyx1Q0FBb0IsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRS9ELG1CQUFzQyxJQUFPO2dCQUMzQyxPQUFPLG1EQUFnQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBTSxDQUFDO1lBQ3RGLENBQUM7WUFFRCx1QkFBdUIsSUFBYTtnQkFDbEMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFO29CQUN6QyxPQUFPLElBQUksQ0FBQztpQkFDYjtnQkFDRCxJQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUV4RCw0QkFBNEI7Z0JBQzVCLDJFQUEyRTtnQkFDM0UsNkRBQTZE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Q0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDckQsT0FBTyxJQUFJLENBQUMsNEJBQTRCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFFTyx1Q0FBWSxHQUFwQixVQUFxQixJQUFtQixFQUFFLEtBQWEsRUFBRSxHQUFXO1lBQ2xFLE9BQVUsSUFBSSxTQUFJLEtBQUssU0FBSSxHQUFLLENBQUM7UUFDbkMsQ0FBQztRQUNILHVCQUFDO0lBQUQsQ0FBQyxBQXhGRCxJQXdGQztJQUVELGtDQUFrQztJQUNsQyxxQkFBcUIsS0FBVTtRQUM3QixJQUFNLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdkIsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxHQUFHLEtBQUssU0FBUyxJQUFJLFFBQVEsQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDO0lBQzFGLENBQUM7SUFFRCxrQ0FBa0M7SUFDbEMsaUJBQWlCLEtBQVU7UUFDekIsT0FBTyxLQUFLLElBQUksSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVTtZQUN2RixLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO0lBQzVDLENBQUM7SUFFRCx5QkFBeUI7SUFDekIsdUJBQXVCLElBQW1CO1FBQ3hDLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUM7SUFDM0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtTb3VyY2VNYXBwZXIsIFNvdXJjZVBvc2l0aW9ufSBmcm9tICcuL3NvdXJjZV9tYXBfdXRpbHMnO1xuaW1wb3J0IHtpc1R5cGVOb2RlS2luZCwgdXBkYXRlU291cmNlRmlsZU5vZGUsIHZpc2l0Tm9kZVdpdGhTeW50aGVzaXplZENvbW1lbnRzfSBmcm9tICcuL3RyYW5zZm9ybWVyX3V0aWwnO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAnLi90eXBlc2NyaXB0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgVHlwZVNjcmlwdCB0cmFuc2Zvcm1lciBiYXNlZCBvbiBhIHNvdXJjZS0+dGV4dCB0cmFuc2Zvcm1hdGlvbi5cbiAqXG4gKiBUeXBlU2NyaXB0IHRyYW5zZm9ybWVycyBvcGVyYXRlIG9uIEFTVCBub2Rlcy4gTmV3bHkgY3JlYXRlZCBub2RlcyBtdXN0IGJlIG1hcmtlZCBhcyByZXBsYWNpbmcgYW5cbiAqIG9sZGVyIEFTVCBub2RlLiBUaGlzIHNoaW0gYWxsb3dzIHJ1bm5pbmcgYSB0cmFuc2Zvcm1hdGlvbiBzdGVwIHRoYXQncyBiYXNlZCBvbiBlbWl0dGluZyBuZXcgdGV4dFxuICogYXMgYSBub2RlIGJhc2VkIHRyYW5zZm9ybWVyLiBJdCBhY2hpZXZlcyB0aGF0IGJ5IHJ1bm5pbmcgdGhlIHRyYW5zZm9ybWF0aW9uLCBjb2xsZWN0aW5nIGEgc291cmNlXG4gKiBtYXBwaW5nIGluIHRoZSBwcm9jZXNzLCBhbmQgdGhlbiBhZnRlcndhcmRzIHBhcnNpbmcgdGhlIHNvdXJjZSB0ZXh0IGludG8gYSBuZXcgQVNUIGFuZCBtYXJraW5nXG4gKiB0aGUgbmV3IG5vZGVzIGFzIHJlcHJlc2VudGF0aW9ucyBvZiB0aGUgb2xkIG5vZGVzIGJhc2VkIG9uIHRoZWlyIHNvdXJjZSBtYXAgcG9zaXRpb25zLlxuICpcbiAqIFRoZSBwcm9jZXNzIG1hcmtzIGFsbCBub2RlcyBhcyBzeW50aGVzaXplZCBleGNlcHQgZm9yIGEgaGFuZGZ1bCBvZiBzcGVjaWFsIGNhc2VzIChpZGVudGlmaWVyc1xuICogZXRjKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRyYW5zZm9ybWVyRnJvbVNvdXJjZU1hcChcbiAgICBzb3VyY2VCYXNlZFRyYW5zZm9ybWVyOiAoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSwgc291cmNlTWFwcGVyOiBTb3VyY2VNYXBwZXIpID0+XG4gICAgICAgIHN0cmluZyk6IHRzLlRyYW5zZm9ybWVyRmFjdG9yeTx0cy5Tb3VyY2VGaWxlPiB7XG4gIHJldHVybiAoY29udGV4dCkgPT4gKHNvdXJjZUZpbGUpID0+IHtcbiAgICBjb25zdCBzb3VyY2VNYXBwZXIgPSBuZXcgTm9kZVNvdXJjZU1hcHBlcigpO1xuICAgIGNvbnN0IHRyYW5zZm9ybWVkU291cmNlVGV4dCA9IHNvdXJjZUJhc2VkVHJhbnNmb3JtZXIoc291cmNlRmlsZSwgc291cmNlTWFwcGVyKTtcbiAgICBjb25zdCBuZXdGaWxlID0gdHMuY3JlYXRlU291cmNlRmlsZShcbiAgICAgICAgc291cmNlRmlsZS5maWxlTmFtZSwgdHJhbnNmb3JtZWRTb3VyY2VUZXh0LCB0cy5TY3JpcHRUYXJnZXQuTGF0ZXN0LCB0cnVlKTtcbiAgICBjb25zdCBtYXBwZWRGaWxlID0gdmlzaXROb2RlKG5ld0ZpbGUpO1xuICAgIHJldHVybiB1cGRhdGVTb3VyY2VGaWxlTm9kZShzb3VyY2VGaWxlLCBtYXBwZWRGaWxlLnN0YXRlbWVudHMpO1xuXG4gICAgZnVuY3Rpb24gdmlzaXROb2RlPFQgZXh0ZW5kcyB0cy5Ob2RlPihub2RlOiBUKTogVCB7XG4gICAgICByZXR1cm4gdmlzaXROb2RlV2l0aFN5bnRoZXNpemVkQ29tbWVudHMoY29udGV4dCwgbmV3RmlsZSwgbm9kZSwgdmlzaXROb2RlSW1wbCkgYXMgVDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2aXNpdE5vZGVJbXBsKG5vZGU6IHRzLk5vZGUpIHtcbiAgICAgIGlmIChub2RlLmZsYWdzICYgdHMuTm9kZUZsYWdzLlN5bnRoZXNpemVkKSB7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3JpZ2luYWxOb2RlID0gc291cmNlTWFwcGVyLmdldE9yaWdpbmFsTm9kZShub2RlKTtcblxuICAgICAgLy8gVXNlIHRoZSBvcmlnaW5hbE5vZGUgZm9yOlxuICAgICAgLy8gLSBsaXRlcmFsczogYXMgZS5nLiB0eXBlc2NyaXB0IGRvZXMgbm90IHN1cHBvcnQgc3ludGhldGljIHJlZ2V4IGxpdGVyYWxzXG4gICAgICAvLyAtIGlkZW50aWZpZXJzOiBhcyB0aGV5IGRvbid0IGhhdmUgY2hpbGRyZW4gYW5kIGJlaGF2ZSB3ZWxsXG4gICAgICAvLyAgICByZWdhcmRpbmcgY29tbWVudCBzeW50aGVzaXphdGlvblxuICAgICAgLy8gLSB0eXBlczogYXMgdGhleSBhcmUgbm90IGVtaXRlZCBhbnl3YXlzXG4gICAgICAvLyAgICAgICAgICBhbmQgaXQgbGVhZHMgdG8gZXJyb3JzIHdpdGggYGV4dGVuZHNgIGNhc2VzLlxuICAgICAgLy8gLSBpbXBvcnRzL2V4cG9ydHM6IGFzIFR5cGVTY3JpcHQgd2lsbCBvbmx5IGF0dGVtcHQgdG8gZWxpZGUgdHlwZSBvbmx5XG4gICAgICAvLyAgICAgICAgICAgICAgICAgICAgaW1wb3J0cyBpZiB0aGUgbmV3IG5vZGUgaXMgaWRlbnRpY2FsIHRvIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgICAgaWYgKG9yaWdpbmFsTm9kZSkge1xuICAgICAgICBpZiAoaXNMaXRlcmFsS2luZChub2RlLmtpbmQpIHx8IG5vZGUua2luZCA9PT0gdHMuU3ludGF4S2luZC5JZGVudGlmaWVyIHx8XG4gICAgICAgICAgICBpc1R5cGVOb2RlS2luZChub2RlLmtpbmQpIHx8IG5vZGUua2luZCA9PT0gdHMuU3ludGF4S2luZC5JbmRleFNpZ25hdHVyZSkge1xuICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUua2luZCA9PT0gdHMuU3ludGF4S2luZC5JbXBvcnREZWNsYXJhdGlvbiB8fFxuICAgICAgICAgICAgbm9kZS5raW5kID09PSB0cy5TeW50YXhLaW5kLkltcG9ydEVxdWFsc0RlY2xhcmF0aW9uIHx8XG4gICAgICAgICAgICBub2RlLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuRXhwb3J0QXNzaWdubWVudCkge1xuICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRzLmlzRXhwb3J0RGVjbGFyYXRpb24obm9kZSkpIHtcbiAgICAgICAgICAvLyBSZXR1cm4gdGhlIG9yaWdpbmFsIG5vZGVzIGZvciBleHBvcnQgZGVjbGFyYXRpb25zLCB1bmxlc3MgdGhleSB3ZXJlIGV4cGFuZGVkIGZyb20gYW5cbiAgICAgICAgICAvLyBleHBvcnQgKiB0byBzcGVjaWZpYyBleHBvcnRlZCBzeW1ib2xzLlxuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRXhwb3J0ID0gb3JpZ2luYWxOb2RlIGFzIHRzLkV4cG9ydERlY2xhcmF0aW9uO1xuICAgICAgICAgIGlmICghbm9kZS5tb2R1bGVTcGVjaWZpZXIpIHtcbiAgICAgICAgICAgIC8vIGV4cG9ydCB7YSwgYiwgY307XG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxOb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoISFvcmlnaW5hbEV4cG9ydC5leHBvcnRDbGF1c2UgPT09ICEhbm9kZS5leHBvcnRDbGF1c2UpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgYWxyZWFkeSB3YXMgZXhwb3J0ZWQgd2l0aCBzeW1ib2xzIChleHBvcnQgey4uLn0pIG9yIHdhcyBub3QgZXhwYW5kZWQuXG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxOb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBSZXdyb3RlIGV4cG9ydCAqIC0+IGV4cG9ydCB7Li4ufSwgdGhlIGV4cG9ydCBkZWNsYXJhdGlvbiBtdXN0IGJlIGVtaXR0ZWQgaW4gdGhlIHVwZGF0ZWRcbiAgICAgICAgICAvLyBmb3JtLlxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBub2RlID0gdHMudmlzaXRFYWNoQ2hpbGQobm9kZSwgdmlzaXROb2RlLCBjb250ZXh0KTtcblxuICAgICAgbm9kZS5mbGFncyB8PSB0cy5Ob2RlRmxhZ3MuU3ludGhlc2l6ZWQ7XG4gICAgICBub2RlLnBhcmVudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRzLnNldFRleHRSYW5nZShub2RlLCBvcmlnaW5hbE5vZGUgPyBvcmlnaW5hbE5vZGUgOiB7cG9zOiAtMSwgZW5kOiAtMX0pO1xuICAgICAgdHMuc2V0T3JpZ2luYWxOb2RlKG5vZGUsIG9yaWdpbmFsTm9kZSk7XG5cbiAgICAgIC8vIExvb3Agb3ZlciBhbGwgbmVzdGVkIHRzLk5vZGVBcnJheXMgL1xuICAgICAgLy8gdHMuTm9kZXMgdGhhdCB3ZXJlIG5vdCB2aXNpdGVkIGFuZCBzZXQgdGhlaXJcbiAgICAgIC8vIHRleHQgcmFuZ2UgdG8gLTEgdG8gbm90IGVtaXQgdGhlaXIgd2hpdGVzcGFjZS5cbiAgICAgIC8vIFNhZGx5LCBUeXBlU2NyaXB0IGRvZXMgbm90IGhhdmUgYW4gQVBJIGZvciB0aGlzLi4uXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55IFRvIHJlYWQgYWxsIHByb3BlcnRpZXNcbiAgICAgIGNvbnN0IG5vZGVBbnkgPSBub2RlIGFzIHtba2V5OiBzdHJpbmddOiBhbnl9O1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueSBUbyByZWFkIGFsbCBwcm9wZXJ0aWVzXG4gICAgICBjb25zdCBvcmlnaW5hbE5vZGVBbnkgPSBvcmlnaW5hbE5vZGUgYXMge1trZXk6IHN0cmluZ106IGFueX07XG4gICAgICBmb3IgKGNvbnN0IHByb3AgaW4gbm9kZUFueSkge1xuICAgICAgICBpZiAobm9kZUFueS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IG5vZGVBbnlbcHJvcF07XG4gICAgICAgICAgaWYgKGlzTm9kZUFycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgLy8gcmVzZXQgdGhlIHBvcy9lbmQgb2YgYWxsIE5vZGVBcnJheXMgc28gdGhhdCB3ZSBkb24ndCBlbWl0IGNvbW1lbnRzXG4gICAgICAgICAgICAvLyBmcm9tIHRoZW0uXG4gICAgICAgICAgICB0cy5zZXRUZXh0UmFuZ2UodmFsdWUsIHtwb3M6IC0xLCBlbmQ6IC0xfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgaXNUb2tlbih2YWx1ZSkgJiYgISh2YWx1ZS5mbGFncyAmIHRzLk5vZGVGbGFncy5TeW50aGVzaXplZCkgJiZcbiAgICAgICAgICAgICAgdmFsdWUuZ2V0U291cmNlRmlsZSgpICE9PSBzb3VyY2VGaWxlKSB7XG4gICAgICAgICAgICAvLyBVc2UgdGhlIG9yaWdpbmFsIFRleHRSYW5nZSBmb3IgYWxsIG5vbiB2aXNpdGVkIHRva2VucyAoZS5nLiB0aGVcbiAgICAgICAgICAgIC8vIGBCaW5hcnlFeHByZXNzaW9uLm9wZXJhdG9yVG9rZW5gKSB0byBwcmVzZXJ2ZSB0aGUgZm9ybWF0dGluZ1xuICAgICAgICAgICAgY29uc3QgdGV4dFJhbmdlID0gb3JpZ2luYWxOb2RlID8gb3JpZ2luYWxOb2RlQW55W3Byb3BdIDoge3BvczogLTEsIGVuZDogLTF9O1xuICAgICAgICAgICAgdHMuc2V0VGV4dFJhbmdlKHZhbHVlLCB0ZXh0UmFuZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIGBTb3VyY2VNYXBwZXJgIHRoYXQgc3RvcmVzIGFuZCByZXRyaWV2ZXMgbWFwcGluZ3NcbiAqIHRvIG9yaWdpbmFsIG5vZGVzLlxuICovXG5jbGFzcyBOb2RlU291cmNlTWFwcGVyIGltcGxlbWVudHMgU291cmNlTWFwcGVyIHtcbiAgcHJpdmF0ZSBvcmlnaW5hbE5vZGVCeUdlbmVyYXRlZFJhbmdlID0gbmV3IE1hcDxzdHJpbmcsIHRzLk5vZGU+KCk7XG4gIHByaXZhdGUgZ2VuU3RhcnRQb3NpdGlvbnMgPSBuZXcgTWFwPHRzLk5vZGUsIG51bWJlcj4oKTtcbiAgLyoqIENvbmNlcHR1YWwgb2Zmc2V0IGZvciBhbGwgbm9kZXMgaW4gdGhpcyBtYXBwaW5nLiAqL1xuICBwcml2YXRlIG9mZnNldCA9IDA7XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGFkZHMgYSBzb3VyY2UgbWFwcGluZyBmb3Igbm9kZSBhbmQgZWFjaCBvZiBpdHMgY2hpbGRyZW4sIG1hcHBpbmcgcmFuZ2VzIGZyb20gdGhlXG4gICAqIGdlbmVyYXRlZCBzdGFydCBwb3NpdGlvbiBwbHVzIHRoZSBjaGlsZCBub2RlcyBvZmZzZXQgdXAgdG8gaXRzIGxlbmd0aC5cbiAgICpcbiAgICogVGhpcyBpcyBhIHVzZWZ1bCBjYXRjaCBhbGwgdGhhdCB3b3JrcyBmb3IgbW9zdCBub2RlcywgYXMgbG9uZyBhcyB0aGVpciBkaXN0YW5jZSBmcm9tIHRoZSBwYXJlbnRcbiAgICogZG9lcyBub3QgY2hhbmdlIGR1cmluZyBlbWl0IGFuZCB0aGVpciBvd24gbGVuZ3RoIGRvZXMgbm90IGNoYW5nZSBkdXJpbmcgZW1pdCAoZS5nLiB0aGVyZSBhcmUgbm9cbiAgICogY29tbWVudHMgYWRkZWQgaW5zaWRlIHRoZW0sIG5vIHJld3JpdGVzIGhhcHBlbmluZykuXG4gICAqL1xuICBwcml2YXRlIGFkZEZ1bGxOb2RlUmFuZ2Uobm9kZTogdHMuTm9kZSwgZ2VuU3RhcnRQb3M6IG51bWJlcikge1xuICAgIHRoaXMub3JpZ2luYWxOb2RlQnlHZW5lcmF0ZWRSYW5nZS5zZXQoXG4gICAgICAgIHRoaXMubm9kZUNhY2hlS2V5KG5vZGUua2luZCwgZ2VuU3RhcnRQb3MsIGdlblN0YXJ0UG9zICsgKG5vZGUuZ2V0RW5kKCkgLSBub2RlLmdldFN0YXJ0KCkpKSxcbiAgICAgICAgbm9kZSk7XG4gICAgbm9kZS5mb3JFYWNoQ2hpbGQoXG4gICAgICAgIGNoaWxkID0+IHRoaXMuYWRkRnVsbE5vZGVSYW5nZShjaGlsZCwgZ2VuU3RhcnRQb3MgKyAoY2hpbGQuZ2V0U3RhcnQoKSAtIG5vZGUuZ2V0U3RhcnQoKSkpKTtcbiAgfVxuXG4gIHNoaWZ0QnlPZmZzZXQob2Zmc2V0OiBudW1iZXIpIHtcbiAgICB0aGlzLm9mZnNldCArPSBvZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG1hcHBpbmcgZm9yIHRoZSBzcGVjaWZpYyBzdGFydC9lbmQgcmFuZ2UgaW4gdGhlIGdlbmVyYXRlZCBvdXRwdXQgYmFjayB0byB0aGVcbiAgICogb3JpZ2luYWxOb2RlLlxuICAgKi9cbiAgYWRkTWFwcGluZ0ZvclJhbmdlKG9yaWdpbmFsTm9kZTogdHMuTm9kZSwgc3RhcnRQb3M6IG51bWJlciwgZW5kUG9zOiBudW1iZXIpIHtcbiAgICAvLyBUT0RPKG1hcnRpbnByb2JzdCk6IFRoaXMgZ2xhcmluZ2x5IGR1cGxpY2F0ZXMgYWRkTWFwcGluZyBiZWxvdy4gSG93ZXZlciBhdHRlbXB0aW5nIHRvIHVuaWZ5XG4gICAgLy8gdGhlc2UgY2F1c2VzIGZhaWx1cmVzIGFyb3VuZCBleHBvcnRlZCB2YXJpYWJsZSBub2Rlcy4gQWRkaXRpb25hbGx5LCBpbnNwZWN0aW5nIHRoaXMgY29kZVxuICAgIC8vIGxvbmdlciBzdWdnZXN0cyB0aGF0IGl0IHJlYWxseSBvbmx5IGJhcmVseSB3b3JrcyBieSBhY2NpZGVudCwgYW5kIHNob3VsZCBtdWNoIHJhdGhlciBiZVxuICAgIC8vIHJlcGxhY2VkIGJ5IHByb3BlciB0cmFuc2Zvcm1lcnMgOi0oXG4gICAgY29uc3QgY2MgPSB0aGlzLm5vZGVDYWNoZUtleShvcmlnaW5hbE5vZGUua2luZCwgc3RhcnRQb3MsIGVuZFBvcyk7XG4gICAgdGhpcy5vcmlnaW5hbE5vZGVCeUdlbmVyYXRlZFJhbmdlLnNldChjYywgb3JpZ2luYWxOb2RlKTtcbiAgfVxuXG4gIGFkZE1hcHBpbmcoXG4gICAgICBvcmlnaW5hbE5vZGU6IHRzLk5vZGUsIG9yaWdpbmFsOiBTb3VyY2VQb3NpdGlvbiwgZ2VuZXJhdGVkOiBTb3VyY2VQb3NpdGlvbiwgbGVuZ3RoOiBudW1iZXIpIHtcbiAgICBsZXQgb3JpZ2luYWxTdGFydFBvcyA9IG9yaWdpbmFsLnBvc2l0aW9uO1xuICAgIGxldCBnZW5TdGFydFBvcyA9IGdlbmVyYXRlZC5wb3NpdGlvbjtcbiAgICBpZiAob3JpZ2luYWxTdGFydFBvcyA+PSBvcmlnaW5hbE5vZGUuZ2V0RnVsbFN0YXJ0KCkgJiZcbiAgICAgICAgb3JpZ2luYWxTdGFydFBvcyA8PSBvcmlnaW5hbE5vZGUuZ2V0U3RhcnQoKSkge1xuICAgICAgLy8gYWx3YXlzIHVzZSB0aGUgbm9kZS5nZXRTdGFydCgpIGZvciB0aGUgaW5kZXgsXG4gICAgICAvLyBhcyBjb21tZW50cyBhbmQgd2hpdGVzcGFjZXMgbWlnaHQgZGlmZmVyIGJldHdlZW4gdGhlIG9yaWdpbmFsIGFuZCB0cmFuc2Zvcm1lZCBjb2RlLlxuICAgICAgY29uc3QgZGlmZlRvU3RhcnQgPSBvcmlnaW5hbE5vZGUuZ2V0U3RhcnQoKSAtIG9yaWdpbmFsU3RhcnRQb3M7XG4gICAgICBvcmlnaW5hbFN0YXJ0UG9zICs9IGRpZmZUb1N0YXJ0O1xuICAgICAgZ2VuU3RhcnRQb3MgKz0gZGlmZlRvU3RhcnQ7XG4gICAgICBsZW5ndGggLT0gZGlmZlRvU3RhcnQ7XG4gICAgICB0aGlzLmdlblN0YXJ0UG9zaXRpb25zLnNldChvcmlnaW5hbE5vZGUsIGdlblN0YXJ0UG9zKTtcbiAgICB9XG4gICAgaWYgKG9yaWdpbmFsU3RhcnRQb3MgKyBsZW5ndGggPT09IG9yaWdpbmFsTm9kZS5nZXRFbmQoKSkge1xuICAgICAgY29uc3QgY2MgPSB0aGlzLm5vZGVDYWNoZUtleShcbiAgICAgICAgICBvcmlnaW5hbE5vZGUua2luZCwgdGhpcy5nZW5TdGFydFBvc2l0aW9ucy5nZXQob3JpZ2luYWxOb2RlKSEsIGdlblN0YXJ0UG9zICsgbGVuZ3RoKTtcbiAgICAgIHRoaXMub3JpZ2luYWxOb2RlQnlHZW5lcmF0ZWRSYW5nZS5zZXQoY2MsIG9yaWdpbmFsTm9kZSk7XG4gICAgfVxuICAgIG9yaWdpbmFsTm9kZS5mb3JFYWNoQ2hpbGQoKGNoaWxkKSA9PiB7XG4gICAgICBpZiAoY2hpbGQuZ2V0U3RhcnQoKSA+PSBvcmlnaW5hbFN0YXJ0UG9zICYmIGNoaWxkLmdldEVuZCgpIDw9IG9yaWdpbmFsU3RhcnRQb3MgKyBsZW5ndGgpIHtcbiAgICAgICAgdGhpcy5hZGRGdWxsTm9kZVJhbmdlKGNoaWxkLCBnZW5TdGFydFBvcyArIChjaGlsZC5nZXRTdGFydCgpIC0gb3JpZ2luYWxTdGFydFBvcykpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEZvciB0aGUgbmV3bHkgcGFyc2VkIGBub2RlYCwgZmluZCB3aGF0IG5vZGUgY29ycmVzcG9uZGVkIHRvIGl0IGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGV4dC4gKi9cbiAgZ2V0T3JpZ2luYWxOb2RlKG5vZGU6IHRzLk5vZGUpOiB0cy5Ob2RlfHVuZGVmaW5lZCB7XG4gICAgLy8gQXBwbHkgdGhlIG9mZnNldDogaWYgdGhlcmUgaXMgYW4gb2Zmc2V0ID4gMCwgYWxsIG5vZGVzIGFyZSBjb25jZXB0dWFsbHkgc2hpZnRlZCBieSBzbyBtYW55XG4gICAgLy8gY2hhcmFjdGVycyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZmlsZS5cbiAgICBsZXQgc3RhcnQgPSBub2RlLmdldFN0YXJ0KCkgLSB0aGlzLm9mZnNldDtcbiAgICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgICAvLyBTcGVjaWFsIGNhc2U6IHRoZSBzb3VyY2UgZmlsZSBjb25jZXB0dWFsbHkgc3BhbnMgYWxsIG9mIHRoZSBmaWxlLCBpbmNsdWRpbmcgYW55IGFkZGVkXG4gICAgICAvLyBwcmVmaXggYWRkZWQgdGhhdCBjYXVzZXMgb2Zmc2V0IHRvIGJlIHNldC5cbiAgICAgIGlmIChub2RlLmtpbmQgIT09IHRzLlN5bnRheEtpbmQuU291cmNlRmlsZSkge1xuICAgICAgICAvLyBOb2RlcyB3aXRoaW4gWzAsIG9mZnNldF0gb2YgdGhlIG5ldyBmaWxlIChzdGFydCA8IDApIGlzIHRoZSBhZGRpdGlvbmFsIHByZWZpeCB0aGF0IGhhcyBub1xuICAgICAgICAvLyBjb3JyZXNwb25kaW5nIG5vZGVzIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIHNvIHJldHVybiB1bmRlZmluZWQuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBzdGFydCA9IDA7XG4gICAgfVxuICAgIGNvbnN0IGVuZCA9IG5vZGUuZ2V0RW5kKCkgLSB0aGlzLm9mZnNldDtcbiAgICBjb25zdCBrZXkgPSB0aGlzLm5vZGVDYWNoZUtleShub2RlLmtpbmQsIHN0YXJ0LCBlbmQpO1xuICAgIHJldHVybiB0aGlzLm9yaWdpbmFsTm9kZUJ5R2VuZXJhdGVkUmFuZ2UuZ2V0KGtleSk7XG4gIH1cblxuICBwcml2YXRlIG5vZGVDYWNoZUtleShraW5kOiB0cy5TeW50YXhLaW5kLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke2tpbmR9IyR7c3RhcnR9IyR7ZW5kfWA7XG4gIH1cbn1cblxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuZnVuY3Rpb24gaXNOb2RlQXJyYXkodmFsdWU6IGFueSk6IHZhbHVlIGlzIHRzLk5vZGVBcnJheTxhbnk+IHtcbiAgY29uc3QgYW55VmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIGFueVZhbHVlLnBvcyAhPT0gdW5kZWZpbmVkICYmIGFueVZhbHVlLmVuZCAhPT0gdW5kZWZpbmVkO1xufVxuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG5mdW5jdGlvbiBpc1Rva2VuKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyB0cy5Ub2tlbjxhbnk+IHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5raW5kID49IHRzLlN5bnRheEtpbmQuRmlyc3RUb2tlbiAmJlxuICAgICAgdmFsdWUua2luZCA8PSB0cy5TeW50YXhLaW5kLkxhc3RUb2tlbjtcbn1cblxuLy8gQ29waWVkIGZyb20gVHlwZVNjcmlwdFxuZnVuY3Rpb24gaXNMaXRlcmFsS2luZChraW5kOiB0cy5TeW50YXhLaW5kKSB7XG4gIHJldHVybiB0cy5TeW50YXhLaW5kLkZpcnN0TGl0ZXJhbFRva2VuIDw9IGtpbmQgJiYga2luZCA8PSB0cy5TeW50YXhLaW5kLkxhc3RMaXRlcmFsVG9rZW47XG59XG4iXX0=

@@ -9,2 +9,3 @@ /// <amd-module name="tsickle/src/transformer_util" />

*/
/// <amd-module name="tsickle/src/transformer_util" />
import * as ts from './typescript';

@@ -64,1 +65,6 @@ /**

export declare function isTypeNodeKind(kind: ts.SyntaxKind): boolean;
/**
* Creates a string literal that uses single quotes. Purely cosmetic, but increases fidelity to the
* existing test suite.
*/
export declare function createSingleQuoteStringLiteral(text: string): ts.StringLiteral;
/// <amd-module name="tsickle/src/tsickle" />
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
/// <amd-module name="tsickle/src/tsickle" />
import * as googmodule from './googmodule';

@@ -43,5 +51,2 @@ import { ModulesManifest } from './modules_manifest';

export declare let closureExternsBlacklist: string[];
export declare function formatDiagnostics(diags: ReadonlyArray<ts.Diagnostic>): string;
/** Returns a fileName:line:column string for the given position in the file. */
export declare function formatLocation(sf: ts.SourceFile, start: number | undefined): string;
export declare function annotate(typeChecker: ts.TypeChecker, file: ts.SourceFile, host: AnnotatorHost, tsHost: ts.ModuleResolutionHost, tsOpts: ts.CompilerOptions, sourceMapper?: SourceMapper): {

@@ -48,0 +53,0 @@ output: string;

/// <amd-module name="tsickle/src/type-translator" />
import * as ts from 'typescript';
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
/// <amd-module name="tsickle/src/type-translator" />
import * as ts from './typescript';
/**
* Determines if fileName refers to a builtin lib.d.ts file.

@@ -14,3 +22,3 @@ * This is a terrible hack but it mirrors a similar thing done in Clutz.

private readonly node;
private readonly pathBlackList;
private readonly pathBlackList?;
private readonly symbolsToAliasedNames;

@@ -50,7 +58,7 @@ private readonly ensureSymbolDeclared;

symbolToString(sym: ts.Symbol, useFqn: boolean): string;
private stripClutzNamespace(name);
private stripClutzNamespace;
translate(type: ts.Type, resolveAlias?: boolean): string;
private translateUnion(type);
private translateEnumLiteral(type);
private translateObject(type);
private translateUnion;
private translateEnumLiteral;
private translateObject;
/**

@@ -64,5 +72,5 @@ * translateAnonymousType translates a ts.TypeFlags.ObjectType that is also

*/
private translateAnonymousType(type);
private translateAnonymousType;
/** Converts a ts.Signature (function signature) to a Closure function type. */
private signatureToClosure(sig);
private signatureToClosure;
/**

@@ -73,3 +81,3 @@ * Converts parameters for the given signature. Takes parameter declarations as those might not

*/
private convertParams(sig, paramDecls);
private convertParams;
warn(msg: string): void;

@@ -76,0 +84,0 @@ /** @return true if sym should always have type {?}. */

@@ -9,2 +9,3 @@ /// <amd-module name="tsickle/src/typescript" />

*/
/// <amd-module name="tsickle/src/typescript" />
/**

@@ -18,4 +19,5 @@ * @fileoverview Abstraction over the TypeScript API that makes multiple

import * as ts from 'typescript';
export { __String, addSyntheticTrailingComment, AssertionExpression, BinaryExpression, Block, CallExpression, CancellationToken, ClassDeclaration, ClassElement, ClassLikeDeclaration, CommentRange, CompilerHost, CompilerOptions, ConstructorDeclaration, createArrayLiteral, createArrayTypeNode, createArrowFunction, createAssignment, createBinary, createCall, createCompilerHost, createFunctionTypeNode, createIdentifier, createIndexSignature, createKeywordTypeNode, createLiteral, createLiteralTypeNode, createNodeArray, createNotEmittedStatement, createNull, createObjectLiteral, createParameter, createProgram, createProperty, createPropertyAccess, createPropertyAssignment, createPropertySignature, createSourceFile, createStatement, createToken, createTypeLiteralNode, createTypeReferenceNode, createUnionTypeNode, createVariableDeclaration, createVariableDeclarationList, createVariableStatement, CustomTransformers, Declaration, DeclarationStatement, DeclarationWithTypeParameters, Decorator, Diagnostic, DiagnosticCategory, ElementAccessExpression, EmitFlags, EmitResult, EntityName, EnumDeclaration, EnumMember, ExportDeclaration, ExportSpecifier, Expression, ExpressionStatement, flattenDiagnosticMessageText, forEachChild, FunctionDeclaration, FunctionLikeDeclaration, GetAccessorDeclaration, getCombinedModifierFlags, getLeadingCommentRanges, getLineAndCharacterOfPosition, getMutableClone, getOriginalNode, getPreEmitDiagnostics, getSyntheticLeadingComments, getSyntheticTrailingComments, getTrailingCommentRanges, Identifier, ImportDeclaration, ImportEqualsDeclaration, ImportSpecifier, InterfaceDeclaration, isArrowFunction, isBinaryExpression, isCallExpression, isExportDeclaration, isExpressionStatement, isIdentifier, isImportDeclaration, isLiteralExpression, isLiteralTypeNode, isObjectLiteralExpression, isPropertyAccessExpression, isPropertyAssignment, isQualifiedName, isStringLiteral, isTypeReferenceNode, isVariableStatement, MethodDeclaration, ModifierFlags, ModuleBlock, ModuleDeclaration, ModuleKind, ModuleResolutionHost, NamedDeclaration, NamedImports, Node, NodeArray, NodeFlags, NonNullExpression, NotEmittedStatement, ObjectLiteralElementLike, ObjectLiteralExpression, ParameterDeclaration, parseCommandLine, parseJsonConfigFileContent, Program, PropertyAccessExpression, PropertyAssignment, PropertyDeclaration, PropertyName, PropertySignature, QualifiedName, readConfigFile, resolveModuleName, ScriptTarget, SetAccessorDeclaration, setCommentRange, setEmitFlags, setOriginalNode, setSourceMapRange, setSyntheticLeadingComments, setSyntheticTrailingComments, setTextRange, SignatureDeclaration, SourceFile, Statement, StringLiteral, Symbol, SymbolFlags, SyntaxKind, SynthesizedComment, sys, Token, TransformationContext, Transformer, TransformerFactory, Type, TypeAliasDeclaration, TypeChecker, TypeElement, TypeFlags, TypeNode, TypeReference, TypeReferenceNode, UnionType, updateBlock, updateConstructor, updateGetAccessor, updateMethod, updateParameter, updateSetAccessor, updateSourceFileNode, VariableDeclaration, VariableStatement, visitEachChild, visitFunctionBody, visitLexicalEnvironment, visitNode, Visitor, visitParameterList, WriteFileCallback } from 'typescript';
export { __String, addSyntheticTrailingComment, AssertionExpression, BinaryExpression, Block, CallExpression, CancellationToken, ClassDeclaration, ClassElement, ClassLikeDeclaration, CommentRange, CompilerHost, CompilerOptions, ConstructorDeclaration, createArrayLiteral, createArrayTypeNode, createArrowFunction, createAssignment, createBinary, createCall, createCompilerHost, createFunctionTypeNode, createIdentifier, createIndexSignature, createKeywordTypeNode, createLiteral, createLiteralTypeNode, createNodeArray, createNotEmittedStatement, createNull, createObjectLiteral, createParameter, createProgram, createProperty, createPropertyAccess, createPropertyAssignment, createPropertySignature, createSourceFile, createStatement, createToken, createTypeLiteralNode, createTypeReferenceNode, createUnionTypeNode, createVariableDeclaration, createVariableDeclarationList, createVariableStatement, CustomTransformers, Declaration, DeclarationStatement, DeclarationWithTypeParameters, Decorator, Diagnostic, DiagnosticCategory, ElementAccessExpression, EmitFlags, EmitResult, EntityName, EnumDeclaration, EnumMember, ExportDeclaration, ExportSpecifier, Expression, ExpressionStatement, flattenDiagnosticMessageText, forEachChild, formatDiagnostics, FormatDiagnosticsHost, FunctionDeclaration, FunctionLikeDeclaration, GetAccessorDeclaration, getCombinedModifierFlags, getLeadingCommentRanges, getLineAndCharacterOfPosition, getMutableClone, getOriginalNode, getPreEmitDiagnostics, getSyntheticLeadingComments, getSyntheticTrailingComments, getTrailingCommentRanges, Identifier, ImportDeclaration, ImportEqualsDeclaration, ImportSpecifier, IndexKind, InterfaceDeclaration, isArrowFunction, isBinaryExpression, isCallExpression, isExportDeclaration, isExpressionStatement, isExternalModule, isIdentifier, isImportDeclaration, isLiteralExpression, isLiteralTypeNode, isObjectLiteralExpression, isPropertyAccessExpression, isPropertyAssignment, isQualifiedName, isStringLiteral, isTypeReferenceNode, isVariableStatement, MethodDeclaration, ModifierFlags, ModuleBlock, ModuleDeclaration, ModuleKind, ModuleResolutionHost, NamedDeclaration, NamedImports, Node, NodeArray, NodeFlags, NonNullExpression, NotEmittedStatement, ObjectFlags, ObjectLiteralElementLike, ObjectLiteralExpression, ObjectType, ParameterDeclaration, parseCommandLine, parseJsonConfigFileContent, Program, PropertyAccessExpression, PropertyAssignment, PropertyDeclaration, PropertyName, PropertySignature, QualifiedName, readConfigFile, resolveModuleName, ScriptTarget, SetAccessorDeclaration, setCommentRange, setEmitFlags, setOriginalNode, setSourceMapRange, setSyntheticLeadingComments, setSyntheticTrailingComments, setTextRange, Signature, SignatureDeclaration, SignatureKind, SourceFile, Statement, StringLiteral, Symbol, SymbolFlags, SymbolWriter, SyntaxKind, SynthesizedComment, sys, Token, TransformationContext, Transformer, TransformerFactory, Type, TypeAliasDeclaration, TypeChecker, TypeElement, TypeFlags, TypeNode, TypeParameterDeclaration, TypeReference, TypeReferenceNode, UnionType, updateBlock, updateConstructor, updateGetAccessor, updateMethod, updateParameter, updateSetAccessor, updateSourceFileNode, VariableDeclaration, VariableStatement, visitEachChild, visitFunctionBody, visitLexicalEnvironment, visitNode, Visitor, visitParameterList, WriteFileCallback } from 'typescript';
export declare const SyntaxKindJSDocSignature: ts.SyntaxKind;
export declare function getEmitFlags(node: ts.Node): ts.EmitFlags | undefined;
export declare let updateProperty: typeof ts.updateProperty;

@@ -82,2 +82,3 @@ /**

exports.forEachChild = typescript_1.forEachChild;
exports.formatDiagnostics = typescript_1.formatDiagnostics;
exports.getCombinedModifierFlags = typescript_1.getCombinedModifierFlags;

@@ -92,2 +93,3 @@ exports.getLeadingCommentRanges = typescript_1.getLeadingCommentRanges;

exports.getTrailingCommentRanges = typescript_1.getTrailingCommentRanges;
exports.IndexKind = typescript_1.IndexKind;
exports.isArrowFunction = typescript_1.isArrowFunction;

@@ -98,2 +100,3 @@ exports.isBinaryExpression = typescript_1.isBinaryExpression;

exports.isExpressionStatement = typescript_1.isExpressionStatement;
exports.isExternalModule = typescript_1.isExternalModule;
exports.isIdentifier = typescript_1.isIdentifier;

@@ -113,2 +116,3 @@ exports.isImportDeclaration = typescript_1.isImportDeclaration;

exports.NodeFlags = typescript_1.NodeFlags;
exports.ObjectFlags = typescript_1.ObjectFlags;
exports.parseCommandLine = typescript_1.parseCommandLine;

@@ -126,2 +130,3 @@ exports.parseJsonConfigFileContent = typescript_1.parseJsonConfigFileContent;

exports.setTextRange = typescript_1.setTextRange;
exports.SignatureKind = typescript_1.SignatureKind;
exports.SymbolFlags = typescript_1.SymbolFlags;

@@ -143,2 +148,4 @@ exports.SyntaxKind = typescript_1.SyntaxKind;

exports.visitParameterList = typescript_1.visitParameterList;
// tslint:disable-next-line:variable-name Re-exporting JSDocSignature for backwards compat.
exports.SyntaxKindJSDocSignature = ts.SyntaxKind.JSDocSignature;
// getEmitFlags is now private starting in TS 2.5.

@@ -162,2 +169,2 @@ // So we define our own method that calls through to TypeScript to defeat the

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90eXBlc2NyaXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUVIOzs7Ozs7T0FNRztJQUVILCtFQUErRTtJQUUvRSwrQkFBaUM7SUFLakMseUNBQW9vRztJQUFsbkcsbURBQUEsMkJBQTJCLENBQUE7SUFBOE0sMENBQUEsa0JBQWtCLENBQUE7SUFBRSwyQ0FBQSxtQkFBbUIsQ0FBQTtJQUFFLDJDQUFBLG1CQUFtQixDQUFBO0lBQUUsd0NBQUEsZ0JBQWdCLENBQUE7SUFBRSxvQ0FBQSxZQUFZLENBQUE7SUFBRSxrQ0FBQSxVQUFVLENBQUE7SUFBRSwwQ0FBQSxrQkFBa0IsQ0FBQTtJQUFFLDhDQUFBLHNCQUFzQixDQUFBO0lBQUUsd0NBQUEsZ0JBQWdCLENBQUE7SUFBRSw0Q0FBQSxvQkFBb0IsQ0FBQTtJQUFFLDZDQUFBLHFCQUFxQixDQUFBO0lBQUUscUNBQUEsYUFBYSxDQUFBO0lBQUUsNkNBQUEscUJBQXFCLENBQUE7SUFBRSx1Q0FBQSxlQUFlLENBQUE7SUFBRSxpREFBQSx5QkFBeUIsQ0FBQTtJQUFFLGtDQUFBLFVBQVUsQ0FBQTtJQUFFLDJDQUFBLG1CQUFtQixDQUFBO0lBQUUsdUNBQUEsZUFBZSxDQUFBO0lBQUUscUNBQUEsYUFBYSxDQUFBO0lBQUUsc0NBQUEsY0FBYyxDQUFBO0lBQUUsNENBQUEsb0JBQW9CLENBQUE7SUFBRSxnREFBQSx3QkFBd0IsQ0FBQTtJQUFFLCtDQUFBLHVCQUF1QixDQUFBO0lBQUUsd0NBQUEsZ0JBQWdCLENBQUE7SUFBRSx1Q0FBQSxlQUFlLENBQUE7SUFBRSxtQ0FBQSxXQUFXLENBQUE7SUFBRSw2Q0FBQSxxQkFBcUIsQ0FBQTtJQUFFLCtDQUFBLHVCQUF1QixDQUFBO0lBQUUsMkNBQUEsbUJBQW1CLENBQUE7SUFBRSxpREFBQSx5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QXlDLEVBQUUsSUFBMkIsRUFDdEUsV0FBb0M7WUFDcEQsT0FBTyxrQkFBZ0IsQ0FDWixJQUF1QyxFQUFFLFVBQXFDLEVBQzlFLFNBQWdCLEVBQUUsSUFBVyxFQUFFLElBQVcsRUFBRSxXQUFrQixDQUFRLENBQUM7UUFDcEYsQ0FBQyxDQUFDO0tBQ0giLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8qKlxuICogQGZpbGVvdmVydmlldyBBYnN0cmFjdGlvbiBvdmVyIHRoZSBUeXBlU2NyaXB0IEFQSSB0aGF0IG1ha2VzIG11bHRpcGxlXG4gKiB2ZXJzaW9ucyBvZiBUeXBlU2NyaXB0IGFwcGVhciB0byBiZSBpbnRlcm9wZXJhYmxlLiBBbnkgdGltZSBhIGJyZWFraW5nIGNoYW5nZVxuICogaW4gVHlwZVNjcmlwdCBhZmZlY3RzIFRzaWNrbGUgY29kZSwgd2Ugc2hvdWxkIGV4dGVuZCB0aGlzIHNoaW0gdG8gcHJlc2VudCBhblxuICogdW5icm9rZW4gQVBJLlxuICogQWxsIGNvZGUgaW4gdHNpY2tsZSBzaG91bGQgaW1wb3J0IGZyb20gdGhpcyBsb2NhdGlvbiwgbm90IGZyb20gJ3R5cGVzY3JpcHQnLlxuICovXG5cbi8vIHRzbGludDpkaXNhYmxlOm5vLWFueSBXZSBuZWVkIHRvIGRvIHZhcmlvdXMgdW5zYWZlIGNhc3RzIGJldHdlZW4gVFMgdmVyc2lvbnNcblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbi8vIE5vdGUsIHRoaXMgaW1wb3J0IGRlcGVuZHMgb24gYSBnZW5ydWxlIGNvcHlpbmcgdGhlIC5kLnRzIGZpbGUgdG8gdGhpcyBwYWNrYWdlXG5pbXBvcnQgKiBhcyB0czI0IGZyb20gJy4vdHlwZXNjcmlwdC0yLjQnO1xuXG5leHBvcnQge19fU3RyaW5nLCBhZGRTeW50aGV0aWNUcmFpbGluZ0NvbW1lbnQsIEFzc2VydGlvbkV4cHJlc3Npb24sIEJpbmFyeUV4cHJlc3Npb24sIEJsb2NrLCBDYWxsRXhwcmVzc2lvbiwgQ2FuY2VsbGF0aW9uVG9rZW4sIENsYXNzRGVjbGFyYXRpb24sIENsYXNzRWxlbWVudCwgQ2xhc3NMaWtlRGVjbGFyYXRpb24sIENvbW1lbnRSYW5nZSwgQ29tcGlsZXJIb3N0LCBDb21waWxlck9wdGlvbnMsIENvbnN0cnVjdG9yRGVjbGFyYXRpb24sIGNyZWF0ZUFycmF5TGl0ZXJhbCwgY3JlYXRlQXJyYXlUeXBlTm9kZSwgY3JlYXRlQXJyb3dGdW5jdGlvbiwgY3JlYXRlQXNzaWdubWVudCwgY3JlYXRlQmluYXJ5LCBjcmVhdGVDYWxsLCBjcmVhdGVDb21waWxlckhvc3QsIGNyZWF0ZUZ1bmN0aW9uVHlwZU5vZGUsIGNyZWF0ZUlkZW50aWZpZXIsIGNyZWF0ZUluZGV4U2lnbmF0dXJlLCBjcmVhdGVLZXl3b3JkVHlwZU5vZGUsIGNyZWF0ZUxpdGVyYWwsIGNyZWF0ZUxpdGVyYWxUeXBlTm9kZSwgY3JlYXRlTm9kZUFycmF5LCBjcmVhdGVOb3RFbWl0dGVkU3RhdGVtZW50LCBjcmVhdGVOdWxsLCBjcmVhdGVPYmplY3RMaXRlcmFsLCBjcmVhdGVQYXJhbWV0ZXIsIGNyZWF0ZVByb2dyYW0sIGNyZWF0ZVByb3BlcnR5LCBjcmVhdGVQcm9wZXJ0eUFjY2VzcywgY3JlYXRlUHJvcGVydHlBc3NpZ25tZW50LCBjcmVhdGVQcm9wZXJ0eVNpZ25hdHVyZSwgY3JlYXRlU291cmNlRmlsZSwgY3JlYXRlU3RhdGVtZW50LCBjcmVhdGVUb2tlbiwgY3JlYXRlVHlwZUxpdGVyYWxOb2RlLCBjcmVhdGVUeXBlUmVmZXJlbmNlTm9kZSwgY3JlYXRlVW5pb25UeXBlTm9kZSwgY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbiwgY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QsIGNyZWF0ZVZhcmlhYmxlU3RhdGVtZW50LCBDdXN0b21UcmFuc2Zvcm1lcnMsIERlY2xhcmF0aW9uLCBEZWNsYXJhdGlvblN0YXRlbWVudCwgRGVjbGFyYXRpb25XaXRoVHlwZVBhcmFtZXRlcnMsIERlY29yYXRvciwgRGlhZ25vc3RpYywgRGlhZ25vc3RpY0NhdGVnb3J5LCBFbGVtZW50QWNjZXNzRXhwcmVzc2lvbiwgRW1pdEZsYWdzLCBFbWl0UmVzdWx0LCBFbnRpdHlOYW1lLCBFbnVtRGVjbGFyYXRpb24sIEVudW1NZW1iZXIsIEV4cG9ydERlY2xhcmF0aW9uLCBFeHBvcnRTcGVjaWZpZXIsIEV4cHJlc3Npb24sIEV4cHJlc3Npb25TdGF0ZW1lbnQsIGZsYXR0ZW5EaWFnbm9zdGljTWVzc2FnZVRleHQsIGZvckVhY2hDaGlsZCwgRnVuY3Rpb25EZWNsYXJhdGlvbiwgRnVuY3Rpb25MaWtlRGVjbGFyYXRpb24sIEdldEFjY2Vzc29yRGVjbGFyYXRpb24sIGdldENvbWJpbmVkTW9kaWZpZXJGbGFncywgZ2V0TGVhZGluZ0NvbW1lbnRSYW5nZXMsIGdldExpbmVBbmRDaGFyYWN0ZXJPZlBvc2l0aW9uLCBnZXRNdXRhYmxlQ2xvbmUsIGdldE9yaWdpbmFsTm9kZSwgZ2V0UHJlRW1pdERpYWdub3N0aWNzLCBnZXRTeW50aGV0aWNMZWFkaW5nQ29tbWVudHMsIGdldFN5bnRoZXRpY1RyYWlsaW5nQ29tbWVudHMsIGdldFRyYWlsaW5nQ29tbWVudFJhbmdlcywgSWRlbnRpZmllciwgSW1wb3J0RGVjbGFyYXRpb24sIEltcG9ydEVxdWFsc0RlY2xhcmF0aW9uLCBJbXBvcnRTcGVjaWZpZXIsIEludGVyZmFjZURlY2xhcmF0aW9uLCBpc0Fycm93RnVuY3Rpb24sIGlzQmluYXJ5RXhwcmVzc2lvbiwgaXNDYWxsRXhwcmVzc2lvbiwgaXNFeHBvcnREZWNsYXJhdGlvbiwgaXNFeHByZXNzaW9uU3RhdGVtZW50LCBpc0lkZW50aWZpZXIsIGlzSW1wb3J0RGVjbGFyYXRpb24sIGlzTGl0ZXJhbEV4cHJlc3Npb24sIGlzTGl0ZXJhbFR5cGVOb2RlLCBpc09iamVjdExpdGVyYWxFeHByZXNzaW9uLCBpc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiwgaXNQcm9wZXJ0eUFzc2lnbm1lbnQsIGlzUXVhbGlmaWVkTmFtZSwgaXNTdHJpbmdMaXRlcmFsLCBpc1R5cGVSZWZlcmVuY2VOb2RlLCBpc1ZhcmlhYmxlU3RhdGVtZW50LCBNZXRob2REZWNsYXJhdGlvbiwgTW9kaWZpZXJGbGFncywgTW9kdWxlQmxvY2ssIE1vZHVsZURlY2xhcmF0aW9uLCBNb2R1bGVLaW5kLCBNb2R1bGVSZXNvbHV0aW9uSG9zdCwgTmFtZWREZWNsYXJhdGlvbiwgTmFtZWRJbXBvcnRzLCBOb2RlLCBOb2RlQXJyYXksIE5vZGVGbGFncywgTm9uTnVsbEV4cHJlc3Npb24sIE5vdEVtaXR0ZWRTdGF0ZW1lbnQsIE9iamVjdExpdGVyYWxFbGVtZW50TGlrZSwgT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24sIFBhcmFtZXRlckRlY2xhcmF0aW9uLCBwYXJzZUNvbW1hbmRMaW5lLCBwYXJzZUpzb25Db25maWdGaWxlQ29udGVudCwgUHJvZ3JhbSwgUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBQcm9wZXJ0eUFzc2lnbm1lbnQsIFByb3BlcnR5RGVjbGFyYXRpb24sIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTaWduYXR1cmUsIFF1YWxpZmllZE5hbWUsIHJlYWRDb25maWdGaWxlLCByZXNvbHZlTW9kdWxlTmFtZSwgU2NyaXB0VGFyZ2V0LCBTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLCBzZXRDb21tZW50UmFuZ2UsIHNldEVtaXRGbGFncywgc2V0T3JpZ2luYWxOb2RlLCBzZXRTb3VyY2VNYXBSYW5nZSwgc2V0U3ludGhldGljTGVhZGluZ0NvbW1lbnRzLCBzZXRTeW50aGV0aWNUcmFpbGluZ0NvbW1lbnRzLCBzZXRUZXh0UmFuZ2UsIFNpZ25hdHVyZURlY2xhcmF0aW9uLCBTb3VyY2VGaWxlLCBTdGF0ZW1lbnQsIFN0cmluZ0xpdGVyYWwsIFN5bWJvbCwgU3ltYm9sRmxhZ3MsIFN5bnRheEtpbmQsIFN5bnRoZXNpemVkQ29tbWVudCwgc3lzLCBUb2tlbiwgVHJhbnNmb3JtYXRpb25Db250ZXh0LCBUcmFuc2Zvcm1lciwgVHJhbnNmb3JtZXJGYWN0b3J5LCBUeXBlLCBUeXBlQWxpYXNEZWNsYXJhdGlvbiwgVHlwZUNoZWNrZXIsIFR5cGVFbGVtZW50LCBUeXBlRmxhZ3MsIFR5cGVOb2RlLCBUeXBlUmVmZXJlbmNlLCBUeXBlUmVmZXJlbmNlTm9kZSwgVW5pb25UeXBlLCB1cGRhdGVCbG9jaywgdXBkYXRlQ29uc3RydWN0b3IsIHVwZGF0ZUdldEFjY2Vzc29yLCB1cGRhdGVNZXRob2QsIHVwZGF0ZVBhcmFtZXRlciwgdXBkYXRlU2V0QWNjZXNzb3IsIHVwZGF0ZVNvdXJjZUZpbGVOb2RlLCBWYXJpYWJsZURlY2xhcmF0aW9uLCBWYXJpYWJsZVN0YXRlbWVudCwgdmlzaXRFYWNoQ2hpbGQsIHZpc2l0RnVuY3Rpb25Cb2R5LCB2aXNpdExleGljYWxFbnZpcm9ubWVudCwgdmlzaXROb2RlLCBWaXNpdG9yLCB2aXNpdFBhcmFtZXRlckxpc3QsIFdyaXRlRmlsZUNhbGxiYWNrfSBmcm9tICd0eXBlc2NyaXB0JztcblxuLy8gZ2V0RW1pdEZsYWdzIGlzIG5vdyBwcml2YXRlIHN0YXJ0aW5nIGluIFRTIDIuNS5cbi8vIFNvIHdlIGRlZmluZSBvdXIgb3duIG1ldGhvZCB0aGF0IGNhbGxzIHRocm91Z2ggdG8gVHlwZVNjcmlwdCB0byBkZWZlYXQgdGhlXG4vLyB2aXNpYmlsaXR5IGNvbnN0cmFpbnQuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW1pdEZsYWdzKG5vZGU6IHRzLk5vZGUpOiB0cy5FbWl0RmxhZ3N8dW5kZWZpbmVkIHtcbiAgcmV0dXJuICh0cyBhcyBhbnkpLmdldEVtaXRGbGFncyhub2RlKTtcbn1cblxuLy8gQmV0d2VlbiBUeXBlU2NyaXB0IDIuNCBhbmQgMi41IHVwZGF0ZVByb3BlcnR5IHdhcyBtb2RpZmllZC4gSWYgY2FsbGVkIHdpdGggMi40IHJlLW9yZGVyIHRoZVxuLy8gcGFyYW1ldGVycy5cbmV4cG9ydCBsZXQgdXBkYXRlUHJvcGVydHkgPSB0cy51cGRhdGVQcm9wZXJ0eTtcblxuY29uc3QgW21ham9yLCBtaW5vcl0gPSB0cy52ZXJzaW9uLnNwbGl0KCcuJyk7XG5pZiAobWFqb3IgPT09ICcyJyAmJiBtaW5vciA9PT0gJzQnKSB7XG4gIGNvbnN0IHVwZGF0ZVByb3BlcnR5MjQgPSB0cy51cGRhdGVQcm9wZXJ0eSBhcyBhbnkgYXMgdHlwZW9mIHRzMjQudXBkYXRlUHJvcGVydHk7XG4gIHVwZGF0ZVByb3BlcnR5ID0gKG5vZGU6IHRzLlByb3BlcnR5RGVjbGFyYXRpb24sIGRlY29yYXRvcnM6IFJlYWRvbmx5QXJyYXk8dHMuRGVjb3JhdG9yPnx1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyczogUmVhZG9ubHlBcnJheTx0cy5Nb2RpZmllcj58dW5kZWZpbmVkLCBuYW1lOiBzdHJpbmd8dHMuUHJvcGVydHlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblRva2VuOiB0cy5RdWVzdGlvblRva2VufHVuZGVmaW5lZCwgdHlwZTogdHMuVHlwZU5vZGV8dW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplcjogdHMuRXhwcmVzc2lvbnx1bmRlZmluZWQpOiB0cy5Qcm9wZXJ0eURlY2xhcmF0aW9uID0+IHtcbiAgICByZXR1cm4gdXBkYXRlUHJvcGVydHkyNChcbiAgICAgICAgICAgICAgIG5vZGUgYXMgYW55IGFzIHRzMjQuUHJvcGVydHlEZWNsYXJhdGlvbiwgZGVjb3JhdG9ycyBhcyBhbnkgYXMgdHMyNC5EZWNvcmF0b3JbXSxcbiAgICAgICAgICAgICAgIG1vZGlmaWVycyBhcyBhbnksIG5hbWUgYXMgYW55LCB0eXBlIGFzIGFueSzCoGluaXRpYWxpemVyIGFzIGFueSkgYXMgYW55O1xuICB9O1xufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90eXBlc2NyaXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUVIOzs7Ozs7T0FNRztJQUVILCtFQUErRTtJQUUvRSwrQkFBaUM7SUFLakMseUNBQXN5RztJQUFweEcsbURBQUEsMkJBQTJCLENBQUE7SUFBOE0sMENBQUEsa0JBQWtCLENBQUE7SUFBRSwyQ0FBQSxtQkFBbUIsQ0FBQTtJQUFFLDJDQUFBLG1CQUFtQixDQUFBO0lBQUUsd0NBQUEsZ0JBQWdCLENBQUE7SUFBRSxvQ0FBQSxZQUFZLENBQUE7SUFBRSxrQ0FBQSxVQUFVLENBQUE7SUFBRSwwQ0FBQSxrQkFBa0IsQ0FBQTtJQUFFLDhDQUFBLHNCQUFzQixDQUFBO0lBQUUsd0NBQUEsZ0JBQWdCLENBQUE7SUFBRSw0Q0FBQSxvQkFBb0IsQ0FBQTtJQUFFLDZDQUFBLHFCQUFxQixDQUFBO0lBQUUscUNBQUEsYUFBYSxDQUFBO0lBQUUsNkNBQUEscUJBQXFCLENBQUE7SUFBRSx1Q0FBQSxlQUFlLENBQUE7SUFBRSxpREFBQSx5QkFBeUIsQ0FBQTtJQUFFLGtDQUFBLFVBQVUsQ0FBQTtJQUFFLDJDQUFBLG1CQUFtQixDQUFBO0lBQUUsdUNBQUEsZUFBZSxDQUFBO0lBQUUscUNBQUEsYUFBYSxDQUFBO0lBQUUsc0NBQUEsY0FBYyxDQUFBO0lBQUUsNENBQUEsb0JBQW9CLENBQUE7SUFBRSxnREFBQSx3QkFBd0IsQ0FBQTtJQUFFLCtDQUFBLHVCQUF1QixDQUFBO0lBQUUsd0NBQUEsZ0JBQWdCLENBQUE7SUFBRSx1Q0FBQSxlQUFlLENBQUE7SUFBRSxtQ0FBQSxXQUFXLENBQUE7SUFBRSw2Q0FBQSxxQkFBcUIsQ0FBQTtJQUFFLCtDQUFBLHVCQUF1QixDQUFBO0lBQUUsMkNBQUEsbUJBQW1CLENBQUE7SUFBRSxpREFBQSx5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QUUsYUFBSyxDQUEwQjtJQUM3QyxJQUFJLEtBQUssS0FBSyxHQUFHLElBQUksS0FBSyxLQUFLLEdBQUcsRUFBRTtRQUNsQyxJQUFNLGtCQUFnQixHQUFHLEVBQUUsQ0FBQyxjQUFtRCxDQUFDO1FBQ2hGLHNCQUFjLEdBQUcsVUFBQyxJQUE0QixFQUFFLFVBQWlELEVBQy9FLFNBQStDLEVBQUUsSUFBNEIsRUFDN0UsYUFBeUMsRUFBRSxJQUEyQixFQUN0RSxXQUFvQztZQUNwRCxPQUFPLGtCQUFnQixDQUNaLElBQXVDLEVBQUUsVUFBcUMsRUFDOUUsU0FBZ0IsRUFBRSxJQUFXLEVBQUUsSUFBVyxFQUFFLFdBQWtCLENBQVEsQ0FBQztRQUNwRixDQUFDLENBQUM7S0FDSCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEFic3RyYWN0aW9uIG92ZXIgdGhlIFR5cGVTY3JpcHQgQVBJIHRoYXQgbWFrZXMgbXVsdGlwbGVcbiAqIHZlcnNpb25zIG9mIFR5cGVTY3JpcHQgYXBwZWFyIHRvIGJlIGludGVyb3BlcmFibGUuIEFueSB0aW1lIGEgYnJlYWtpbmcgY2hhbmdlXG4gKiBpbiBUeXBlU2NyaXB0IGFmZmVjdHMgVHNpY2tsZSBjb2RlLCB3ZSBzaG91bGQgZXh0ZW5kIHRoaXMgc2hpbSB0byBwcmVzZW50IGFuXG4gKiB1bmJyb2tlbiBBUEkuXG4gKiBBbGwgY29kZSBpbiB0c2lja2xlIHNob3VsZCBpbXBvcnQgZnJvbSB0aGlzIGxvY2F0aW9uLCBub3QgZnJvbSAndHlwZXNjcmlwdCcuXG4gKi9cblxuLy8gdHNsaW50OmRpc2FibGU6bm8tYW55IFdlIG5lZWQgdG8gZG8gdmFyaW91cyB1bnNhZmUgY2FzdHMgYmV0d2VlbiBUUyB2ZXJzaW9uc1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuLy8gTm90ZSwgdGhpcyBpbXBvcnQgZGVwZW5kcyBvbiBhIGdlbnJ1bGUgY29weWluZyB0aGUgLmQudHMgZmlsZSB0byB0aGlzIHBhY2thZ2VcbmltcG9ydCAqIGFzIHRzMjQgZnJvbSAnLi90eXBlc2NyaXB0LTIuNCc7XG5cbmV4cG9ydCB7X19TdHJpbmcsIGFkZFN5bnRoZXRpY1RyYWlsaW5nQ29tbWVudCwgQXNzZXJ0aW9uRXhwcmVzc2lvbiwgQmluYXJ5RXhwcmVzc2lvbiwgQmxvY2ssIENhbGxFeHByZXNzaW9uLCBDYW5jZWxsYXRpb25Ub2tlbiwgQ2xhc3NEZWNsYXJhdGlvbiwgQ2xhc3NFbGVtZW50LCBDbGFzc0xpa2VEZWNsYXJhdGlvbiwgQ29tbWVudFJhbmdlLCBDb21waWxlckhvc3QsIENvbXBpbGVyT3B0aW9ucywgQ29uc3RydWN0b3JEZWNsYXJhdGlvbiwgY3JlYXRlQXJyYXlMaXRlcmFsLCBjcmVhdGVBcnJheVR5cGVOb2RlLCBjcmVhdGVBcnJvd0Z1bmN0aW9uLCBjcmVhdGVBc3NpZ25tZW50LCBjcmVhdGVCaW5hcnksIGNyZWF0ZUNhbGwsIGNyZWF0ZUNvbXBpbGVySG9zdCwgY3JlYXRlRnVuY3Rpb25UeXBlTm9kZSwgY3JlYXRlSWRlbnRpZmllciwgY3JlYXRlSW5kZXhTaWduYXR1cmUsIGNyZWF0ZUtleXdvcmRUeXBlTm9kZSwgY3JlYXRlTGl0ZXJhbCwgY3JlYXRlTGl0ZXJhbFR5cGVOb2RlLCBjcmVhdGVOb2RlQXJyYXksIGNyZWF0ZU5vdEVtaXR0ZWRTdGF0ZW1lbnQsIGNyZWF0ZU51bGwsIGNyZWF0ZU9iamVjdExpdGVyYWwsIGNyZWF0ZVBhcmFtZXRlciwgY3JlYXRlUHJvZ3JhbSwgY3JlYXRlUHJvcGVydHksIGNyZWF0ZVByb3BlcnR5QWNjZXNzLCBjcmVhdGVQcm9wZXJ0eUFzc2lnbm1lbnQsIGNyZWF0ZVByb3BlcnR5U2lnbmF0dXJlLCBjcmVhdGVTb3VyY2VGaWxlLCBjcmVhdGVTdGF0ZW1lbnQsIGNyZWF0ZVRva2VuLCBjcmVhdGVUeXBlTGl0ZXJhbE5vZGUsIGNyZWF0ZVR5cGVSZWZlcmVuY2VOb2RlLCBjcmVhdGVVbmlvblR5cGVOb2RlLCBjcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uLCBjcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCwgY3JlYXRlVmFyaWFibGVTdGF0ZW1lbnQsIEN1c3RvbVRyYW5zZm9ybWVycywgRGVjbGFyYXRpb24sIERlY2xhcmF0aW9uU3RhdGVtZW50LCBEZWNsYXJhdGlvbldpdGhUeXBlUGFyYW1ldGVycywgRGVjb3JhdG9yLCBEaWFnbm9zdGljLCBEaWFnbm9zdGljQ2F0ZWdvcnksIEVsZW1lbnRBY2Nlc3NFeHByZXNzaW9uLCBFbWl0RmxhZ3MsIEVtaXRSZXN1bHQsIEVudGl0eU5hbWUsIEVudW1EZWNsYXJhdGlvbiwgRW51bU1lbWJlciwgRXhwb3J0RGVjbGFyYXRpb24sIEV4cG9ydFNwZWNpZmllciwgRXhwcmVzc2lvbiwgRXhwcmVzc2lvblN0YXRlbWVudCwgZmxhdHRlbkRpYWdub3N0aWNNZXNzYWdlVGV4dCwgZm9yRWFjaENoaWxkLCBmb3JtYXREaWFnbm9zdGljcywgRm9ybWF0RGlhZ25vc3RpY3NIb3N0LCBGdW5jdGlvbkRlY2xhcmF0aW9uLCBGdW5jdGlvbkxpa2VEZWNsYXJhdGlvbiwgR2V0QWNjZXNzb3JEZWNsYXJhdGlvbiwgZ2V0Q29tYmluZWRNb2RpZmllckZsYWdzLCBnZXRMZWFkaW5nQ29tbWVudFJhbmdlcywgZ2V0TGluZUFuZENoYXJhY3Rlck9mUG9zaXRpb24sIGdldE11dGFibGVDbG9uZSwgZ2V0T3JpZ2luYWxOb2RlLCBnZXRQcmVFbWl0RGlhZ25vc3RpY3MsIGdldFN5bnRoZXRpY0xlYWRpbmdDb21tZW50cywgZ2V0U3ludGhldGljVHJhaWxpbmdDb21tZW50cywgZ2V0VHJhaWxpbmdDb21tZW50UmFuZ2VzLCBJZGVudGlmaWVyLCBJbXBvcnREZWNsYXJhdGlvbiwgSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24sIEltcG9ydFNwZWNpZmllciwgSW5kZXhLaW5kLCBJbnRlcmZhY2VEZWNsYXJhdGlvbiwgaXNBcnJvd0Z1bmN0aW9uLCBpc0JpbmFyeUV4cHJlc3Npb24sIGlzQ2FsbEV4cHJlc3Npb24sIGlzRXhwb3J0RGVjbGFyYXRpb24sIGlzRXhwcmVzc2lvblN0YXRlbWVudCwgaXNFeHRlcm5hbE1vZHVsZSwgaXNJZGVudGlmaWVyLCBpc0ltcG9ydERlY2xhcmF0aW9uLCBpc0xpdGVyYWxFeHByZXNzaW9uLCBpc0xpdGVyYWxUeXBlTm9kZSwgaXNPYmplY3RMaXRlcmFsRXhwcmVzc2lvbiwgaXNQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sIGlzUHJvcGVydHlBc3NpZ25tZW50LCBpc1F1YWxpZmllZE5hbWUsIGlzU3RyaW5nTGl0ZXJhbCwgaXNUeXBlUmVmZXJlbmNlTm9kZSwgaXNWYXJpYWJsZVN0YXRlbWVudCwgTWV0aG9kRGVjbGFyYXRpb24sIE1vZGlmaWVyRmxhZ3MsIE1vZHVsZUJsb2NrLCBNb2R1bGVEZWNsYXJhdGlvbiwgTW9kdWxlS2luZCwgTW9kdWxlUmVzb2x1dGlvbkhvc3QsIE5hbWVkRGVjbGFyYXRpb24sIE5hbWVkSW1wb3J0cywgTm9kZSwgTm9kZUFycmF5LCBOb2RlRmxhZ3MsIE5vbk51bGxFeHByZXNzaW9uLCBOb3RFbWl0dGVkU3RhdGVtZW50LCBPYmplY3RGbGFncywgT2JqZWN0TGl0ZXJhbEVsZW1lbnRMaWtlLCBPYmplY3RMaXRlcmFsRXhwcmVzc2lvbiwgT2JqZWN0VHlwZSwgUGFyYW1ldGVyRGVjbGFyYXRpb24sIHBhcnNlQ29tbWFuZExpbmUsIHBhcnNlSnNvbkNvbmZpZ0ZpbGVDb250ZW50LCBQcm9ncmFtLCBQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sIFByb3BlcnR5QXNzaWdubWVudCwgUHJvcGVydHlEZWNsYXJhdGlvbiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNpZ25hdHVyZSwgUXVhbGlmaWVkTmFtZSwgcmVhZENvbmZpZ0ZpbGUsIHJlc29sdmVNb2R1bGVOYW1lLCBTY3JpcHRUYXJnZXQsIFNldEFjY2Vzc29yRGVjbGFyYXRpb24sIHNldENvbW1lbnRSYW5nZSwgc2V0RW1pdEZsYWdzLCBzZXRPcmlnaW5hbE5vZGUsIHNldFNvdXJjZU1hcFJhbmdlLCBzZXRTeW50aGV0aWNMZWFkaW5nQ29tbWVudHMsIHNldFN5bnRoZXRpY1RyYWlsaW5nQ29tbWVudHMsIHNldFRleHRSYW5nZSwgU2lnbmF0dXJlLCBTaWduYXR1cmVEZWNsYXJhdGlvbiwgU2lnbmF0dXJlS2luZCwgU291cmNlRmlsZSwgU3RhdGVtZW50LCBTdHJpbmdMaXRlcmFsLCBTeW1ib2wsIFN5bWJvbEZsYWdzLCBTeW1ib2xXcml0ZXIsIFN5bnRheEtpbmQsIFN5bnRoZXNpemVkQ29tbWVudCwgc3lzLCBUb2tlbiwgVHJhbnNmb3JtYXRpb25Db250ZXh0LCBUcmFuc2Zvcm1lciwgVHJhbnNmb3JtZXJGYWN0b3J5LCBUeXBlLCBUeXBlQWxpYXNEZWNsYXJhdGlvbiwgVHlwZUNoZWNrZXIsIFR5cGVFbGVtZW50LCBUeXBlRmxhZ3MsIFR5cGVOb2RlLCBUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24sIFR5cGVSZWZlcmVuY2UsIFR5cGVSZWZlcmVuY2VOb2RlLCBVbmlvblR5cGUsIHVwZGF0ZUJsb2NrLCB1cGRhdGVDb25zdHJ1Y3RvciwgdXBkYXRlR2V0QWNjZXNzb3IsIHVwZGF0ZU1ldGhvZCwgdXBkYXRlUGFyYW1ldGVyLCB1cGRhdGVTZXRBY2Nlc3NvciwgdXBkYXRlU291cmNlRmlsZU5vZGUsIFZhcmlhYmxlRGVjbGFyYXRpb24sIFZhcmlhYmxlU3RhdGVtZW50LCB2aXNpdEVhY2hDaGlsZCwgdmlzaXRGdW5jdGlvbkJvZHksIHZpc2l0TGV4aWNhbEVudmlyb25tZW50LCB2aXNpdE5vZGUsIFZpc2l0b3IsIHZpc2l0UGFyYW1ldGVyTGlzdCwgV3JpdGVGaWxlQ2FsbGJhY2t9IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZSBSZS1leHBvcnRpbmcgSlNEb2NTaWduYXR1cmUgZm9yIGJhY2t3YXJkcyBjb21wYXQuXG5leHBvcnQgY29uc3QgU3ludGF4S2luZEpTRG9jU2lnbmF0dXJlID0gdHMuU3ludGF4S2luZC5KU0RvY1NpZ25hdHVyZTtcblxuLy8gZ2V0RW1pdEZsYWdzIGlzIG5vdyBwcml2YXRlIHN0YXJ0aW5nIGluIFRTIDIuNS5cbi8vIFNvIHdlIGRlZmluZSBvdXIgb3duIG1ldGhvZCB0aGF0IGNhbGxzIHRocm91Z2ggdG8gVHlwZVNjcmlwdCB0byBkZWZlYXQgdGhlXG4vLyB2aXNpYmlsaXR5IGNvbnN0cmFpbnQuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW1pdEZsYWdzKG5vZGU6IHRzLk5vZGUpOiB0cy5FbWl0RmxhZ3N8dW5kZWZpbmVkIHtcbiAgcmV0dXJuICh0cyBhcyBhbnkpLmdldEVtaXRGbGFncyhub2RlKTtcbn1cblxuLy8gQmV0d2VlbiBUeXBlU2NyaXB0IDIuNCBhbmQgMi41IHVwZGF0ZVByb3BlcnR5IHdhcyBtb2RpZmllZC4gSWYgY2FsbGVkIHdpdGggMi40IHJlLW9yZGVyIHRoZVxuLy8gcGFyYW1ldGVycy5cbmV4cG9ydCBsZXQgdXBkYXRlUHJvcGVydHkgPSB0cy51cGRhdGVQcm9wZXJ0eTtcblxuY29uc3QgW21ham9yLCBtaW5vcl0gPSB0cy52ZXJzaW9uLnNwbGl0KCcuJyk7XG5pZiAobWFqb3IgPT09ICcyJyAmJiBtaW5vciA9PT0gJzQnKSB7XG4gIGNvbnN0IHVwZGF0ZVByb3BlcnR5MjQgPSB0cy51cGRhdGVQcm9wZXJ0eSBhcyBhbnkgYXMgdHlwZW9mIHRzMjQudXBkYXRlUHJvcGVydHk7XG4gIHVwZGF0ZVByb3BlcnR5ID0gKG5vZGU6IHRzLlByb3BlcnR5RGVjbGFyYXRpb24sIGRlY29yYXRvcnM6IFJlYWRvbmx5QXJyYXk8dHMuRGVjb3JhdG9yPnx1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyczogUmVhZG9ubHlBcnJheTx0cy5Nb2RpZmllcj58dW5kZWZpbmVkLCBuYW1lOiBzdHJpbmd8dHMuUHJvcGVydHlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblRva2VuOiB0cy5RdWVzdGlvblRva2VufHVuZGVmaW5lZCwgdHlwZTogdHMuVHlwZU5vZGV8dW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplcjogdHMuRXhwcmVzc2lvbnx1bmRlZmluZWQpOiB0cy5Qcm9wZXJ0eURlY2xhcmF0aW9uID0+IHtcbiAgICByZXR1cm4gdXBkYXRlUHJvcGVydHkyNChcbiAgICAgICAgICAgICAgIG5vZGUgYXMgYW55IGFzIHRzMjQuUHJvcGVydHlEZWNsYXJhdGlvbiwgZGVjb3JhdG9ycyBhcyBhbnkgYXMgdHMyNC5EZWNvcmF0b3JbXSxcbiAgICAgICAgICAgICAgIG1vZGlmaWVycyBhcyBhbnksIG5hbWUgYXMgYW55LCB0eXBlIGFzIGFueSzCoGluaXRpYWxpemVyIGFzIGFueSkgYXMgYW55O1xuICB9O1xufVxuIl19
/// <amd-module name="tsickle/src/util" />
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
/// <amd-module name="tsickle/src/util" />
import * as ts from 'typescript';

@@ -3,0 +11,0 @@ /**

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc