1 | /**
|
---|
2 | * @license
|
---|
3 | * Copyright Google LLC All Rights Reserved.
|
---|
4 | *
|
---|
5 | * Use of this source code is governed by an MIT-style license that can be
|
---|
6 | * found in the LICENSE file at https://angular.io/license
|
---|
7 | */
|
---|
8 | (function (factory) {
|
---|
9 | if (typeof module === "object" && typeof module.exports === "object") {
|
---|
10 | var v = factory(require, exports);
|
---|
11 | if (v !== undefined) module.exports = v;
|
---|
12 | }
|
---|
13 | else if (typeof define === "function" && define.amd) {
|
---|
14 | define("@angular/compiler-cli/src/transformers/metadata_reader", ["require", "exports", "tslib", "@angular/compiler-cli/src/metadata/index", "@angular/compiler-cli/src/transformers/util"], factory);
|
---|
15 | }
|
---|
16 | })(function (require, exports) {
|
---|
17 | "use strict";
|
---|
18 | Object.defineProperty(exports, "__esModule", { value: true });
|
---|
19 | exports.readMetadata = exports.createMetadataReaderCache = void 0;
|
---|
20 | var tslib_1 = require("tslib");
|
---|
21 | var metadata_1 = require("@angular/compiler-cli/src/metadata/index");
|
---|
22 | var util_1 = require("@angular/compiler-cli/src/transformers/util");
|
---|
23 | function createMetadataReaderCache() {
|
---|
24 | var data = new Map();
|
---|
25 | return { data: data };
|
---|
26 | }
|
---|
27 | exports.createMetadataReaderCache = createMetadataReaderCache;
|
---|
28 | function readMetadata(filePath, host, cache) {
|
---|
29 | var metadatas = cache && cache.data.get(filePath);
|
---|
30 | if (metadatas) {
|
---|
31 | return metadatas;
|
---|
32 | }
|
---|
33 | if (host.fileExists(filePath)) {
|
---|
34 | // If the file doesn't exists then we cannot return metadata for the file.
|
---|
35 | // This will occur if the user referenced a declared module for which no file
|
---|
36 | // exists for the module (i.e. jQuery or angularjs).
|
---|
37 | if (util_1.DTS.test(filePath)) {
|
---|
38 | metadatas = readMetadataFile(host, filePath);
|
---|
39 | if (!metadatas) {
|
---|
40 | // If there is a .d.ts file but no metadata file we need to produce a
|
---|
41 | // metadata from the .d.ts file as metadata files capture reexports
|
---|
42 | // (starting with v3).
|
---|
43 | metadatas = [upgradeMetadataWithDtsData(host, { '__symbolic': 'module', 'version': 1, 'metadata': {} }, filePath)];
|
---|
44 | }
|
---|
45 | }
|
---|
46 | else {
|
---|
47 | var metadata = host.getSourceFileMetadata(filePath);
|
---|
48 | metadatas = metadata ? [metadata] : [];
|
---|
49 | }
|
---|
50 | }
|
---|
51 | if (cache && (!host.cacheMetadata || host.cacheMetadata(filePath))) {
|
---|
52 | cache.data.set(filePath, metadatas);
|
---|
53 | }
|
---|
54 | return metadatas;
|
---|
55 | }
|
---|
56 | exports.readMetadata = readMetadata;
|
---|
57 | function readMetadataFile(host, dtsFilePath) {
|
---|
58 | var metadataPath = dtsFilePath.replace(util_1.DTS, '.metadata.json');
|
---|
59 | if (!host.fileExists(metadataPath)) {
|
---|
60 | return undefined;
|
---|
61 | }
|
---|
62 | try {
|
---|
63 | var metadataOrMetadatas = JSON.parse(host.readFile(metadataPath));
|
---|
64 | var metadatas = metadataOrMetadatas ?
|
---|
65 | (Array.isArray(metadataOrMetadatas) ? metadataOrMetadatas : [metadataOrMetadatas]) :
|
---|
66 | [];
|
---|
67 | if (metadatas.length) {
|
---|
68 | var maxMetadata = metadatas.reduce(function (p, c) { return p.version > c.version ? p : c; });
|
---|
69 | if (maxMetadata.version < metadata_1.METADATA_VERSION) {
|
---|
70 | metadatas.push(upgradeMetadataWithDtsData(host, maxMetadata, dtsFilePath));
|
---|
71 | }
|
---|
72 | }
|
---|
73 | return metadatas;
|
---|
74 | }
|
---|
75 | catch (e) {
|
---|
76 | console.error("Failed to read JSON file " + metadataPath);
|
---|
77 | throw e;
|
---|
78 | }
|
---|
79 | }
|
---|
80 | function upgradeMetadataWithDtsData(host, oldMetadata, dtsFilePath) {
|
---|
81 | // patch v1 to v3 by adding exports and the `extends` clause.
|
---|
82 | // patch v3 to v4 by adding `interface` symbols for TypeAlias
|
---|
83 | var newMetadata = {
|
---|
84 | '__symbolic': 'module',
|
---|
85 | 'version': metadata_1.METADATA_VERSION,
|
---|
86 | 'metadata': tslib_1.__assign({}, oldMetadata.metadata),
|
---|
87 | };
|
---|
88 | if (oldMetadata.exports) {
|
---|
89 | newMetadata.exports = oldMetadata.exports;
|
---|
90 | }
|
---|
91 | if (oldMetadata.importAs) {
|
---|
92 | newMetadata.importAs = oldMetadata.importAs;
|
---|
93 | }
|
---|
94 | if (oldMetadata.origins) {
|
---|
95 | newMetadata.origins = oldMetadata.origins;
|
---|
96 | }
|
---|
97 | var dtsMetadata = host.getSourceFileMetadata(dtsFilePath);
|
---|
98 | if (dtsMetadata) {
|
---|
99 | for (var prop in dtsMetadata.metadata) {
|
---|
100 | if (!newMetadata.metadata[prop]) {
|
---|
101 | newMetadata.metadata[prop] = dtsMetadata.metadata[prop];
|
---|
102 | }
|
---|
103 | }
|
---|
104 | if (dtsMetadata['importAs'])
|
---|
105 | newMetadata['importAs'] = dtsMetadata['importAs'];
|
---|
106 | // Only copy exports from exports from metadata prior to version 3.
|
---|
107 | // Starting with version 3 the collector began collecting exports and
|
---|
108 | // this should be redundant. Also, with bundler will rewrite the exports
|
---|
109 | // which will hoist the exports from modules referenced indirectly causing
|
---|
110 | // the imports to be different than the .d.ts files and using the .d.ts file
|
---|
111 | // exports would cause the StaticSymbolResolver to redirect symbols to the
|
---|
112 | // incorrect location.
|
---|
113 | if ((!oldMetadata.version || oldMetadata.version < 3) && dtsMetadata.exports) {
|
---|
114 | newMetadata.exports = dtsMetadata.exports;
|
---|
115 | }
|
---|
116 | }
|
---|
117 | return newMetadata;
|
---|
118 | }
|
---|
119 | });
|
---|
120 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGFfcmVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy90cmFuc2Zvcm1lcnMvbWV0YWRhdGFfcmVhZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7SUFJSCxxRUFBNkQ7SUFFN0Qsb0VBQTJCO0lBZ0IzQixTQUFnQix5QkFBeUI7UUFDdkMsSUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQXNDLENBQUM7UUFDM0QsT0FBTyxFQUFDLElBQUksTUFBQSxFQUFDLENBQUM7SUFDaEIsQ0FBQztJQUhELDhEQUdDO0lBRUQsU0FBZ0IsWUFBWSxDQUN4QixRQUFnQixFQUFFLElBQXdCLEVBQUUsS0FBMkI7UUFFekUsSUFBSSxTQUFTLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xELElBQUksU0FBUyxFQUFFO1lBQ2IsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDN0IsMEVBQTBFO1lBQzFFLDZFQUE2RTtZQUM3RSxvREFBb0Q7WUFDcEQsSUFBSSxVQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUN0QixTQUFTLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLENBQUMsU0FBUyxFQUFFO29CQUNkLHFFQUFxRTtvQkFDckUsbUVBQW1FO29CQUNuRSxzQkFBc0I7b0JBQ3RCLFNBQVMsR0FBRyxDQUFDLDBCQUEwQixDQUNuQyxJQUFJLEVBQUUsRUFBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBQyxFQUFFLFFBQVEsQ0FBQyxDQUFD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LEtBQUssSUFBSSxJQUFJLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRTtnQkFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQy9CLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDekQ7YUFDRjtZQUNELElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQztnQkFBRSxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRS9FLG1FQUFtRTtZQUNuRSxxRUFBcUU7WUFDckUsd0VBQXdFO1lBQ3hFLDBFQUEwRTtZQUMxRSw0RUFBNEU7WUFDNUUsMEVBQTBFO1lBQzFFLHNCQUFzQjtZQUN0QixJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRTtnQkFDNUUsV0FBVyxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDO2FBQzNDO1NBQ0Y7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge01FVEFEQVRBX1ZFUlNJT04sIE1vZHVsZU1ldGFkYXRhfSBmcm9tICcuLi9tZXRhZGF0YSc7XG5cbmltcG9ydCB7RFRTfSBmcm9tICcuL3V0aWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1ldGFkYXRhUmVhZGVySG9zdCB7XG4gIGdldFNvdXJjZUZpbGVNZXRhZGF0YShmaWxlUGF0aDogc3RyaW5nKTogTW9kdWxlTWV0YWRhdGF8dW5kZWZpbmVkO1xuICBjYWNoZU1ldGFkYXRhPyhmaWxlTmFtZTogc3RyaW5nKTogYm9vbGVhbjtcbiAgZmlsZUV4aXN0cyhmaWxlUGF0aDogc3RyaW5nKTogYm9vbGVhbjtcbiAgcmVhZEZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRhZGF0YVJlYWRlckNhY2hlIHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZGF0YTogTWFwPHN0cmluZywgTW9kdWxlTWV0YWRhdGFbXXx1bmRlZmluZWQ+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWV0YWRhdGFSZWFkZXJDYWNoZSgpOiBNZXRhZGF0YVJlYWRlckNhY2hlIHtcbiAgY29uc3QgZGF0YSA9IG5ldyBNYXA8c3RyaW5nLCBNb2R1bGVNZXRhZGF0YVtdfHVuZGVmaW5lZD4oKTtcbiAgcmV0dXJuIHtkYXRhfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRNZXRhZGF0YShcbiAgICBmaWxlUGF0aDogc3RyaW5nLCBob3N0OiBNZXRhZGF0YVJlYWRlckhvc3QsIGNhY2hlPzogTWV0YWRhdGFSZWFkZXJDYWNoZSk6IE1vZHVsZU1ldGFkYXRhW118XG4gICAgdW5kZWZpbmVkIHtcbiAgbGV0IG1ldGFkYXRhcyA9IGNhY2hlICYmIGNhY2hlLmRhdGEuZ2V0KGZpbGVQYXRoKTtcbiAgaWYgKG1ldGFkYXRhcykge1xuICAgIHJldHVybiBtZXRhZGF0YXM7XG4gIH1cbiAgaWYgKGhvc3QuZmlsZUV4aXN0cyhmaWxlUGF0aCkpIHtcbiAgICAvLyBJZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0cyB0aGVuIHdlIGNhbm5vdCByZXR1cm4gbWV0YWRhdGEgZm9yIHRoZSBmaWxlLlxuICAgIC8vIFRoaXMgd2lsbCBvY2N1ciBpZiB0aGUgdXNlciByZWZlcmVuY2VkIGEgZGVjbGFyZWQgbW9kdWxlIGZvciB3aGljaCBubyBmaWxlXG4gICAgLy8gZXhpc3RzIGZvciB0aGUgbW9kdWxlIChpLmUuIGpRdWVyeSBvciBhbmd1bGFyanMpLlxuICAgIGlmIChEVFMudGVzdChmaWxlUGF0aCkpIHtcbiAgICAgIG1ldGFkYXRhcyA9IHJlYWRNZXRhZGF0YUZpbGUoaG9zdCwgZmlsZVBhdGgpO1xuICAgICAgaWYgKCFtZXRhZGF0YXMpIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSAuZC50cyBmaWxlIGJ1dCBubyBtZXRhZGF0YSBmaWxlIHdlIG5lZWQgdG8gcHJvZHVjZSBhXG4gICAgICAgIC8vIG1ldGFkYXRhIGZyb20gdGhlIC5kLnRzIGZpbGUgYXMgbWV0YWRhdGEgZmlsZXMgY2FwdHVyZSByZWV4cG9ydHNcbiAgICAgICAgLy8gKHN0YXJ0aW5nIHdpdGggdjMpLlxuICAgICAgICBtZXRhZGF0YXMgPSBbdXBncmFkZU1ldGFkYXRhV2l0aER0c0RhdGEoXG4gICAgICAgICAgICBob3N0LCB7J19fc3ltYm9saWMnOiAnbW9kdWxlJywgJ3ZlcnNpb24nOiAxLCAnbWV0YWRhdGEnOiB7fX0sIGZpbGVQYXRoKV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gaG9zdC5nZXRTb3VyY2VGaWxlTWV0YWRhdGEoZmlsZVBhdGgpO1xuICAgICAgbWV0YWRhdGFzID0gbWV0YWRhdGEgPyBbbWV0YWRhdGFdIDogW107XG4gICAgfVxuICB9XG4gIGlmIChjYWNoZSAmJiAoIWhvc3QuY2FjaGVNZXRhZGF0YSB8fCBob3N0LmNhY2hlTWV0YWRhdGEoZmlsZVBhdGgpKSkge1xuICAgIGNhY2hlLmRhdGEuc2V0KGZpbGVQYXRoLCBtZXRhZGF0YXMpO1xuICB9XG4gIHJldHVybiBtZXRhZGF0YXM7XG59XG5cblxuZnVuY3Rpb24gcmVhZE1ldGFkYXRhRmlsZShob3N0OiBNZXRhZGF0YVJlYWRlckhvc3QsIGR0c0ZpbGVQYXRoOiBzdHJpbmcpOiBNb2R1bGVNZXRhZGF0YVtdfFxuICAgIHVuZGVmaW5lZCB7XG4gIGNvbnN0IG1ldGFkYXRhUGF0aCA9IGR0c0ZpbGVQYXRoLnJlcGxhY2UoRFRTLCAnLm1ldGFkYXRhLmpzb24nKTtcbiAgaWYgKCFob3N0LmZpbGVFeGlzdHMobWV0YWRhdGFQYXRoKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBtZXRhZGF0YU9yTWV0YWRhdGFzID1cbiAgICAgICAgSlNPTi5wYXJzZShob3N0LnJlYWRGaWxlKG1ldGFkYXRhUGF0aCkpIGFzIE1vZHVsZU1ldGFkYXRhIHwgTW9kdWxlTWV0YWRhdGFbXSB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBtZXRhZGF0YXMgPSBtZXRhZGF0YU9yTWV0YWRhdGFzID9cbiAgICAgICAgKEFycmF5LmlzQXJyYXkobWV0YWRhdGFPck1ldGFkYXRhcykgPyBtZXRhZGF0YU9yTWV0YWRhdGFzIDogW21ldGFkYXRhT3JNZXRhZGF0YXNdKSA6XG4gICAgICAgIFtdO1xuICAgIGlmIChtZXRhZGF0YXMubGVuZ3RoKSB7XG4gICAgICBsZXQgbWF4TWV0YWRhdGEgPSBtZXRhZGF0YXMucmVkdWNlKChwLCBjKSA9PiBwLnZlcnNpb24gPiBjLnZlcnNpb24gPyBwIDogYyk7XG4gICAgICBpZiAobWF4TWV0YWRhdGEudmVyc2lvbiA8IE1FVEFEQVRBX1ZFUlNJT04pIHtcbiAgICAgICAgbWV0YWRhdGFzLnB1c2godXBncmFkZU1ldGFkYXRhV2l0aER0c0RhdGEoaG9zdCwgbWF4TWV0YWRhdGEsIGR0c0ZpbGVQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXRhZGF0YXM7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gcmVhZCBKU09OIGZpbGUgJHttZXRhZGF0YVBhdGh9YCk7XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGdyYWRlTWV0YWRhdGFXaXRoRHRzRGF0YShcbiAgICBob3N0OiBNZXRhZGF0YVJlYWRlckhvc3QsIG9sZE1ldGFkYXRhOiBNb2R1bGVNZXRhZGF0YSwgZHRzRmlsZVBhdGg6IHN0cmluZyk6IE1vZHVsZU1ldGFkYXRhIHtcbiAgLy8gcGF0Y2ggdjEgdG8gdjMgYnkgYWRkaW5nIGV4cG9ydHMgYW5kIHRoZSBgZXh0ZW5kc2AgY2xhdXNlLlxuICAvLyBwYXRjaCB2MyB0byB2NCBieSBhZGRpbmcgYGludGVyZmFjZWAgc3ltYm9scyBmb3IgVHlwZUFsaWFzXG4gIGxldCBuZXdNZXRhZGF0YTogTW9kdWxlTWV0YWRhdGEgPSB7XG4gICAgJ19fc3ltYm9saWMnOiAnbW9kdWxlJyxcbiAgICAndmVyc2lvbic6IE1FVEFEQVRBX1ZFUlNJT04sXG4gICAgJ21ldGFkYXRhJzogey4uLm9sZE1ldGFkYXRhLm1ldGFkYXRhfSxcbiAgfTtcbiAgaWYgKG9sZE1ldGFkYXRhLmV4cG9ydHMpIHtcbiAgICBuZXdNZXRhZGF0YS5leHBvcnRzID0gb2xkTWV0YWRhdGEuZXhwb3J0cztcbiAgfVxuICBpZiAob2xkTWV0YWRhdGEuaW1wb3J0QXMpIHtcbiAgICBuZXdNZXRhZGF0YS5pbXBvcnRBcyA9IG9sZE1ldGFkYXRhLmltcG9ydEFzO1xuICB9XG4gIGlmIChvbGRNZXRhZGF0YS5vcmlnaW5zKSB7XG4gICAgbmV3TWV0YWRhdGEub3JpZ2lucyA9IG9sZE1ldGFkYXRhLm9yaWdpbnM7XG4gIH1cbiAgY29uc3QgZHRzTWV0YWRhdGEgPSBob3N0LmdldFNvdXJjZUZpbGVNZXRhZGF0YShkdHNGaWxlUGF0aCk7XG4gIGlmIChkdHNNZXRhZGF0YSkge1xuICAgIGZvciAobGV0IHByb3AgaW4gZHRzTWV0YWRhdGEubWV0YWRhdGEpIHtcbiAgICAgIGlmICghbmV3TWV0YWRhdGEubWV0YWRhdGFbcHJvcF0pIHtcbiAgICAgICAgbmV3TWV0YWRhdGEubWV0YWRhdGFbcHJvcF0gPSBkdHNNZXRhZGF0YS5tZXRhZGF0YVtwcm9wXTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGR0c01ldGFkYXRhWydpbXBvcnRBcyddKSBuZXdNZXRhZGF0YVsnaW1wb3J0QXMnXSA9IGR0c01ldGFkYXRhWydpbXBvcnRBcyddO1xuXG4gICAgLy8gT25seSBjb3B5IGV4cG9ydHMgZnJvbSBleHBvcnRzIGZyb20gbWV0YWRhdGEgcHJpb3IgdG8gdmVyc2lvbiAzLlxuICAgIC8vIFN0YXJ0aW5nIHdpdGggdmVyc2lvbiAzIHRoZSBjb2xsZWN0b3IgYmVnYW4gY29sbGVjdGluZyBleHBvcnRzIGFuZFxuICAgIC8vIHRoaXMgc2hvdWxkIGJlIHJlZHVuZGFudC4gQWxzbywgd2l0aCBidW5kbGVyIHdpbGwgcmV3cml0ZSB0aGUgZXhwb3J0c1xuICAgIC8vIHdoaWNoIHdpbGwgaG9pc3QgdGhlIGV4cG9ydHMgZnJvbSBtb2R1bGVzIHJlZmVyZW5jZWQgaW5kaXJlY3RseSBjYXVzaW5nXG4gICAgLy8gdGhlIGltcG9ydHMgdG8gYmUgZGlmZmVyZW50IHRoYW4gdGhlIC5kLnRzIGZpbGVzIGFuZCB1c2luZyB0aGUgLmQudHMgZmlsZVxuICAgIC8vIGV4cG9ydHMgd291bGQgY2F1c2UgdGhlIFN0YXRpY1N5bWJvbFJlc29sdmVyIHRvIHJlZGlyZWN0IHN5bWJvbHMgdG8gdGhlXG4gICAgLy8gaW5jb3JyZWN0IGxvY2F0aW9uLlxuICAgIGlmICgoIW9sZE1ldGFkYXRhLnZlcnNpb24gfHwgb2xkTWV0YWRhdGEudmVyc2lvbiA8IDMpICYmIGR0c01ldGFkYXRhLmV4cG9ydHMpIHtcbiAgICAgIG5ld01ldGFkYXRhLmV4cG9ydHMgPSBkdHNNZXRhZGF0YS5leHBvcnRzO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3TWV0YWRhdGE7XG59XG4iXX0= |
---|