israeli-bank-scrapers 3.8.1 → 3.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/definitions.d.ts +10 -0
- package/lib/definitions.js +15 -2
- package/lib/helpers/waiting.d.ts +4 -1
- package/lib/helpers/waiting.js +9 -4
- package/lib/scrapers/base-isracard-amex.js +9 -9
- package/lib/scrapers/base-scraper-with-browser.d.ts +1 -0
- package/lib/scrapers/base-scraper-with-browser.js +36 -34
- package/lib/scrapers/base-scraper.d.ts +9 -16
- package/lib/scrapers/base-scraper.js +8 -19
- package/lib/scrapers/factory.test.d.ts +1 -0
- package/lib/scrapers/factory.test.js +21 -0
- package/lib/scrapers/interface.d.ts +6 -1
- package/lib/scrapers/visa-cal.js +5 -6
- package/package.json +1 -1
package/lib/definitions.d.ts
CHANGED
|
@@ -88,3 +88,13 @@ export declare const SCRAPERS: {
|
|
|
88
88
|
loginFields: string[];
|
|
89
89
|
};
|
|
90
90
|
};
|
|
91
|
+
export declare enum ScraperProgressTypes {
|
|
92
|
+
Initializing = "INITIALIZING",
|
|
93
|
+
StartScraping = "START_SCRAPING",
|
|
94
|
+
LoggingIn = "LOGGING_IN",
|
|
95
|
+
LoginSuccess = "LOGIN_SUCCESS",
|
|
96
|
+
LoginFailed = "LOGIN_FAILED",
|
|
97
|
+
ChangePassword = "CHANGE_PASSWORD",
|
|
98
|
+
EndScraping = "END_SCRAPING",
|
|
99
|
+
Terminating = "TERMINATING"
|
|
100
|
+
}
|
package/lib/definitions.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.SCRAPERS = exports.CompanyTypes = exports.PASSWORD_FIELD = void 0;
|
|
6
|
+
exports.ScraperProgressTypes = exports.SCRAPERS = exports.CompanyTypes = exports.PASSWORD_FIELD = void 0;
|
|
7
7
|
// NOTICE: avoid changing exported keys as they are part of the public api
|
|
8
8
|
const PASSWORD_FIELD = 'password';
|
|
9
9
|
exports.PASSWORD_FIELD = PASSWORD_FIELD;
|
|
@@ -103,4 +103,17 @@ const SCRAPERS = {
|
|
|
103
103
|
}
|
|
104
104
|
};
|
|
105
105
|
exports.SCRAPERS = SCRAPERS;
|
|
106
|
-
|
|
106
|
+
let ScraperProgressTypes;
|
|
107
|
+
exports.ScraperProgressTypes = ScraperProgressTypes;
|
|
108
|
+
|
|
109
|
+
(function (ScraperProgressTypes) {
|
|
110
|
+
ScraperProgressTypes["Initializing"] = "INITIALIZING";
|
|
111
|
+
ScraperProgressTypes["StartScraping"] = "START_SCRAPING";
|
|
112
|
+
ScraperProgressTypes["LoggingIn"] = "LOGGING_IN";
|
|
113
|
+
ScraperProgressTypes["LoginSuccess"] = "LOGIN_SUCCESS";
|
|
114
|
+
ScraperProgressTypes["LoginFailed"] = "LOGIN_FAILED";
|
|
115
|
+
ScraperProgressTypes["ChangePassword"] = "CHANGE_PASSWORD";
|
|
116
|
+
ScraperProgressTypes["EndScraping"] = "END_SCRAPING";
|
|
117
|
+
ScraperProgressTypes["Terminating"] = "TERMINATING";
|
|
118
|
+
})(ScraperProgressTypes || (exports.ScraperProgressTypes = ScraperProgressTypes = {}));
|
|
119
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kZWZpbml0aW9ucy50cyJdLCJuYW1lcyI6WyJQQVNTV09SRF9GSUVMRCIsIkNvbXBhbnlUeXBlcyIsIlNDUkFQRVJTIiwiaGFwb2FsaW0iLCJuYW1lIiwibG9naW5GaWVsZHMiLCJoYXBvYWxpbUJlT25saW5lIiwibGV1bWkiLCJtaXpyYWhpIiwiZGlzY291bnQiLCJvdHNhckhhaGF5YWwiLCJsZXVtaUNhcmQiLCJtYXgiLCJ2aXNhQ2FsIiwiaXNyYWNhcmQiLCJhbWV4IiwidW5pb24iLCJiZWlubGV1bWkiLCJtYXNzYWQiLCJ5YWhhdiIsImJleWFoYWRCaXNodmlsaGEiLCJvbmVaZXJvIiwiU2NyYXBlclByb2dyZXNzVHlwZXMiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBRU8sTUFBTUEsY0FBYyxHQUFHLFVBQXZCOztJQUVLQyxZOzs7V0FBQUEsWTtBQUFBQSxFQUFBQSxZO0FBQUFBLEVBQUFBLFk7QUFBQUEsRUFBQUEsWTtBQUFBQSxFQUFBQSxZO0FBQUFBLEVBQUFBLFk7QUFBQUEsRUFBQUEsWTtBQUFBQSxFQUFBQSxZO0FBQUFBLEVBQUFBLFk7QUFBQUEsRUFBQUEsWTtBQUFBQSxFQUFBQSxZO0FBQUFBLEVBQUFBLFk7QUFBQUEsRUFBQUEsWTtBQUFBQSxFQUFBQSxZO0FBQUFBLEVBQUFBLFk7QUFBQUEsRUFBQUEsWTtBQUFBQSxFQUFBQSxZO0FBQUFBLEVBQUFBLFk7R0FBQUEsWSw0QkFBQUEsWTs7QUFvQkwsTUFBTUMsUUFBUSxHQUFHO0FBQ3RCLEdBQUNELFlBQVksQ0FBQ0UsUUFBZCxHQUF5QjtBQUN2QkMsSUFBQUEsSUFBSSxFQUFFLGVBRGlCO0FBRXZCQyxJQUFBQSxXQUFXLEVBQUUsQ0FBQyxVQUFELEVBQWFMLGNBQWI7QUFGVSxHQURIO0FBS3RCLEdBQUNDLFlBQVksQ0FBQ0ssZ0JBQWQsR0FBaUM7QUFBRTtBQUNqQ0YsSUFBQUEsSUFBSSxFQUFFLGVBRHlCO0FBRS9CQyxJQUFBQSxXQUFXLEVBQUUsQ0FBQyxVQUFELEVB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RGdCO0FBRXRCQyxJQUFBQSxXQUFXLEVBQUUsQ0FBQyxPQUFELEVBQVVMLGNBQVYsRUFBMEIsa0JBQTFCLEVBQThDLGFBQTlDLEVBQTZELGtCQUE3RDtBQUZTO0FBakVGLENBQWpCOztJQXVFS3NCLG9COzs7V0FBQUEsb0I7QUFBQUEsRUFBQUEsb0I7QUFBQUEsRUFBQUEsb0I7QUFBQUEsRUFBQUEsb0I7QUFBQUEsRUFBQUEsb0I7QUFBQUEsRUFBQUEsb0I7QUFBQUEsRUFBQUEsb0I7QUFBQUEsRUFBQUEsb0I7QUFBQUEsRUFBQUEsb0I7R0FBQUEsb0Isb0NBQUFBLG9CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTk9USUNFOiBhdm9pZCBjaGFuZ2luZyBleHBvcnRlZCBrZXlzIGFzIHRoZXkgYXJlIHBhcnQgb2YgdGhlIHB1YmxpYyBhcGlcblxuZXhwb3J0IGNvbnN0IFBBU1NXT1JEX0ZJRUxEID0gJ3Bhc3N3b3JkJztcblxuZXhwb3J0IGVudW0gQ29tcGFueVR5cGVzIHtcbiAgaGFwb2FsaW0gPSAnaGFwb2FsaW0nLFxuICBoYXBvYWxpbUJlT25saW5lID0gJ2hhcG9hbGltQmVPbmxpbmUnLFxuICBiZWlubGV1bWkgPSAnYmVpbmxldW1pJyxcbiAgdW5pb24gPSAndW5pb24nLFxuICBhbWV4ID0gJ2FtZXgnLFxuICBpc3JhY2FyZCA9ICdpc3JhY2FyZCcsXG4gIHZpc2FDYWwgPSAndmlzYUNhbCcsXG4gIG1heCA9ICdtYXgnLFxuICBsZXVtaUNhcmQgPSAnbGV1bWlDYXJkJyxcbiAgb3RzYXJIYWhheWFsID0gJ290c2FySGFoYXlhbCcsXG4gIGRpc2NvdW50ID0gJ2Rpc2NvdW50JyxcbiAgbWl6cmFoaSA9ICdtaXpyYWhpJyxcbiAgbGV1bWkgPSAnbGV1bWknLFxuICBtYXNzYWQgPSAnbWFzc2FkJyxcbiAgeWFoYXYgPSAneWFoYXYnLFxuICBiZXlhaGFkQmlzaHZpbGhhID0gJ2JleWFoYWRCaXNodmlsaGEnLFxuICBvbmVaZXJvID0gJ29uZVplcm8nXG59XG5cbmV4cG9ydCBjb25zdCBTQ1JBUEVSUyA9IHtcbiAgW0NvbXBhbnlUeXBlcy5oYXBvYWxpbV06IHtcbiAgICBuYW1lOiAnQmFuayBIYXBvYWxpbScsXG4gICAgbG9naW5GaWVsZHM6IFsndXNlckNvZGUnLCBQQVNTV09SRF9GSUVMRF0sXG4gIH0sXG4gIFtDb21wYW55VHlwZXMuaGFwb2FsaW1CZU9ubGluZV06IHsgLy8gVE9ETyByZW1vdmUgaW4gTWFqb3IgdmVyc2lvblxuICAgIG5hbWU6ICdCYW5rIEhhcG9hbGltJyxcbiAgICBsb2dpbkZpZWxkczogWyd1c2VyQ29kZScsIFBBU1NXT1JEX0ZJRUxEXSxcbiAgfSxcbiAgW0NvbXBhbnlUeXBlcy5sZXVtaV06IHtcbiAgICBuYW1lOiAnQmFuayBMZXVtaScsXG4gICAgbG9naW5GaWVsZHM6IFsndXNlcm5hbWUnLCBQQVNTV09SRF9GSUVMRF0sXG4gIH0sXG4gIFtDb21wYW55VHlwZXMubWl6cmFoaV06IHtcbiAgICBuYW1lOiAnTWl6cmFoaSBCYW5rJyxcbiAgICBsb2dpbkZpZWxkczogWyd1c2VybmFtZScsIFBBU1NXT1JEX0ZJRUxEXSxcbiAgfSxcbiAgW0NvbXBhbnlUeXBlcy5kaXNjb3VudF06IHtcbiAgICBuYW1lOiAnRGlzY291bnQgQmFuaycsXG4gICAgbG9naW5GaWVsZHM6IFsnaWQnLCBQQVNTV09SRF9GSUVMRCwgJ251bSddLFxuICB9LFxuICBbQ29tcGFueVR5cGVzLm90c2FySGFoYXlhbF06IHtcbiAgICBuYW1lOiAnQmFuayBPdHNhciBIYWhheWFsJyxcbiAgICBsb2dpbkZpZWxkczogWyd1c2VybmFtZScsIFBBU1NXT1JEX0ZJRUxEXSxcbiAgfSxcbiAgW0NvbXBhbnlUeXBlcy5sZXVtaUNhcmRdOiB7IC8vIFRPRE8gcmVtb3ZlIGluIE1ham9yIHZlcnNpb25cbiAgICBuYW1lOiAnTGV1bWkgQ2FyZCcsXG4gICAgbG9naW5GaWVsZHM6IFsndXNlcm5hbWUnLCBQQVNTV09SRF9GSUVMRF0sXG4gIH0sXG4gIFtDb21wYW55VHlwZXMubWF4XToge1xuICAgIG5hbWU6ICdNYXgnLFxuICAgIGxvZ2luRmllbGRzOiBbJ3VzZXJuYW1lJywgUEFTU1dPUkRfRklFTERdLFxuICB9LFxuICBbQ29tcGFueVR5cGVzLnZpc2FDYWxdOiB7XG4gICAgbmFtZTogJ1Zpc2EgQ2FsJyxcbiAgICBsb2dpbkZpZWxkczogWyd1c2VybmFtZScsIFBBU1NXT1JEX0ZJRUxEXSxcbiAgfSxcbiAgW0NvbXBhbnlUeXBlcy5pc3JhY2FyZF06IHtcbiAgICBuYW1lOiAnSXNyYWNhcmQnLFxuICAgIGxvZ2luRmllbGRzOiBbJ2lkJywgJ2NhcmQ2RGlnaXRzJywgUEFTU1dPUkRfRklFTERdLFxuICB9LFxuICBbQ29tcGFueVR5cGVzLmFtZXhdOiB7XG4gICAgbmFtZTogJ0FtZXgnLFxuICAgIGxvZ2luRmllbGRzOiBbJ2lkJywgJ2NhcmQ2RGlnaXRzJywgUEFTU1dPUkRfRklFTERdLFxuICB9LFxuICBbQ29tcGFueVR5cGVzLnVuaW9uXToge1xuICAgIG5hbWU6ICdVbmlvbicsXG4gICAgbG9naW5GaWVsZHM6IFsndXNlcm5hbWUnLCBQQVNTV09SRF9GSUVMRF0sXG4gIH0sXG4gIFtDb21wYW55VHlwZXMuYmVpbmxldW1pXToge1xuICAgIG5hbWU6ICdCZWlubGV1bWknLFxuICAgIGxvZ2luRmllbGRzOiBbJ3VzZXJuYW1lJywgUEFTU1dPUkRfRklFTERdLFxuICB9LFxuICBbQ29tcGFueVR5cGVzLm1hc3NhZF06IHtcbiAgICBuYW1lOiAnTWFzc2FkJyxcbiAgICBsb2dpbkZpZWxkczogWyd1c2VybmFtZScsIFBBU1NXT1JEX0ZJRUxEXSxcbiAgfSxcbiAgW0NvbXBhbnlUeXBlcy55YWhhdl06IHtcbiAgICBuYW1lOiAnQmFuayBZYWhhdicsXG4gICAgbG9naW5GaWVsZHM6IFsndXNlcm5hbWUnLCAnbmF0aW9uYWxJRCcsIFBBU1NXT1JEX0ZJRUxEXSxcbiAgfSxcbiAgW0NvbXBhbnlUeXBlcy5iZXlhaGFkQmlzaHZpbGhhXToge1xuICAgIG5hbWU6ICdCZXlhaGFkIEJpc2h2aWxoYScsXG4gICAgbG9naW5GaWVsZHM6IFsnaWQnLCBQQVNTV09SRF9GSUVMRF0sXG4gIH0sXG4gIFtDb21wYW55VHlwZXMub25lWmVyb106IHtcbiAgICBuYW1lOiAnT25lIFplcm8nLFxuICAgIGxvZ2luRmllbGRzOiBbJ2VtYWlsJywgUEFTU1dPUkRfRklFTEQsICdvdHBDb2RlUmV0cmlldmVyJywgJ3Bob25lTnVtYmVyJywgJ290cExvbmdUZXJtVG9rZW4nXSxcbiAgfSxcbn07XG5cbmV4cG9ydCBlbnVtIFNjcmFwZXJQcm9ncmVzc1R5cGVzIHtcbiAgSW5pdGlhbGl6aW5nID0gJ0lOSVRJQUxJWklORycsXG4gIFN0YXJ0U2NyYXBpbmcgPSAnU1RBUlRfU0NSQVBJTkcnLFxuICBMb2dnaW5nSW4gPSAnTE9HR0lOR19JTicsXG4gIExvZ2luU3VjY2VzcyA9ICdMT0dJTl9TVUNDRVNTJyxcbiAgTG9naW5GYWlsZWQgPSAnTE9HSU5fRkFJTEVEJyxcbiAgQ2hhbmdlUGFzc3dvcmQgPSAnQ0hBTkdFX1BBU1NXT1JEJyxcbiAgRW5kU2NyYXBpbmcgPSAnRU5EX1NDUkFQSU5HJyxcbiAgVGVybWluYXRpbmcgPSAnVEVSTUlOQVRJTkcnLFxufVxuIl19
|
package/lib/helpers/waiting.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
export declare class TimeoutError extends Error {
|
|
2
2
|
}
|
|
3
3
|
export declare const SECOND = 1000;
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Wait until a promise resolves with a truthy value or reject after a timeout
|
|
6
|
+
*/
|
|
7
|
+
export declare function waitUntil<T>(asyncTest: () => Promise<T>, description?: string, timeout?: number, interval?: number): Promise<T>;
|
|
5
8
|
export declare function raceTimeout(ms: number, promise: Promise<any>): Promise<any>;
|
|
6
9
|
export declare function runSerial<T>(actions: (() => Promise<T>)[]): Promise<T[]>;
|
package/lib/helpers/waiting.js
CHANGED
|
@@ -26,15 +26,20 @@ function timeoutPromise(ms, promise, description) {
|
|
|
26
26
|
reject(error);
|
|
27
27
|
}, ms);
|
|
28
28
|
});
|
|
29
|
-
return Promise.race([promise,
|
|
29
|
+
return Promise.race([promise, // casting to avoid type error- safe since this promise will always reject
|
|
30
|
+
timeout]);
|
|
30
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Wait until a promise resolves with a truthy value or reject after a timeout
|
|
34
|
+
*/
|
|
35
|
+
|
|
31
36
|
|
|
32
37
|
function waitUntil(asyncTest, description = '', timeout = 10000, interval = 100) {
|
|
33
38
|
const promise = new Promise((resolve, reject) => {
|
|
34
39
|
function wait() {
|
|
35
40
|
asyncTest().then(value => {
|
|
36
|
-
if (value
|
|
37
|
-
resolve();
|
|
41
|
+
if (value) {
|
|
42
|
+
resolve(value);
|
|
38
43
|
} else {
|
|
39
44
|
setTimeout(wait, interval);
|
|
40
45
|
}
|
|
@@ -57,4 +62,4 @@ function raceTimeout(ms, promise) {
|
|
|
57
62
|
function runSerial(actions) {
|
|
58
63
|
return actions.reduce((m, a) => m.then(async x => [...x, await a()]), Promise.resolve(new Array()));
|
|
59
64
|
}
|
|
60
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
65
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9oZWxwZXJzL3dhaXRpbmcudHMiXSwibmFtZXMiOlsiVGltZW91dEVycm9yIiwiRXJyb3IiLCJTRUNPTkQiLCJ0aW1lb3V0UHJvbWlzZSIsIm1zIiwicHJvbWlzZSIsImRlc2NyaXB0aW9uIiwidGltZW91dCIsIlByb21pc2UiLCJfIiwicmVqZWN0IiwiaWQiLCJzZXRUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwiZXJyb3IiLCJyYWNlIiwid2FpdFVudGlsIiwiYXN5bmNUZXN0IiwiaW50ZXJ2YWwiLCJyZXNvbHZlIiwid2FpdCIsInRoZW4iLCJ2YWx1ZSIsImNhdGNoIiwicmFjZVRpbWVvdXQiLCJlcnIiLCJydW5TZXJpYWwiLCJhY3Rpb25zIiwicmVkdWNlIiwibSIsImEiLCJ4IiwiQXJyYXkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQ08sTUFBTUEsWUFBTixTQUEyQkMsS0FBM0IsQ0FBaUM7OztBQUlqQyxNQUFNQyxNQUFNLEdBQUcsSUFBZjs7O0FBRVAsU0FBU0MsY0FBVCxDQUEyQkMsRUFBM0IsRUFBdUNDLE9BQXZDLEVBQTREQyxXQUE1RCxFQUE2RjtBQUMzRixRQUFNQyxPQUFPLEdBQUcsSUFBSUMsT0FBSixDQUFZLENBQUNDLENBQUQsRUFBSUMsTUFBSixLQUFlO0FBQ3pDLFVBQU1DLEVBQUUsR0FBR0MsVUFBVSxDQUFDLE1BQU07QUFDMUJDLE1BQUFBLFlBQVksQ0FBQ0YsRUFBRCxDQUFaO0FBQ0EsWUFBTUcsS0FBSyxHQUFHLElBQUlkLFlBQUosQ0FBaUJNLFdBQWpCLENBQWQ7QUFDQUksTUFBQUEsTUFBTSxDQUFDSSxLQUFELENBQU47QUFDRCxLQUpvQixFQUlsQlYsRUFKa0IsQ0FBckI7QUFLRCxHQU5lLENBQWhCO0FBUUEsU0FBT0ksT0FBTyxDQUFDTyxJQUFSLENBQWEsQ0FDbEJWLE9BRGtCLEVBRWxCO0FBQ0FFLEVBQUFBLE9BSGtCLENBQWIsQ0FBUDtBQUtEO0FBRUQ7Ozs7O0FBR08sU0FBU1MsU0FBVCxDQUFzQkMsU0FBdEIsRUFBbURYLFdBQVcsR0FBRyxFQUFqRSxFQUFxRUMsT0FBTyxHQUFHLEtBQS9FLEVBQXNGVyxRQUFRLEdBQUcsR0FBakcsRUFBc0c7QUFDM0csUUFBTWIsT0FBTyxHQUFHLElBQUlHLE9BQUosQ0FBZSxDQUFDVyxPQUFELEVBQVVULE1BQVYsS0FBcUI7QUFDbEQsYUFBU1UsSUFBVCxHQUFnQjtBQUNkSCxNQUFBQSxTQUFTLEdBQUdJLElBQVosQ0FBa0JDLEtBQUQsSUFBVztBQUMxQixZQUFJQSxLQUFKLEVBQVc7QUFDVEgsVUFBQUEsT0FBTyxDQUFDRyxLQUFELENBQVA7QUFDRCxTQUZELE1BRU87QUFDTFYsVUFBQUEsVUFBVSxDQUFDUSxJQUFELEVBQU9GLFFBQVAsQ0FBVjtBQUNEO0FBQ0YsT0FORCxFQU1HSyxLQU5ILENBTVMsTUFBTTtBQUNiYixRQUFBQSxNQUFNO0FBQ1AsT0FSRDtBQVNEOztBQUNEVSxJQUFBQSxJQUFJO0FBQ0wsR0FiZSxDQUFoQjtBQWNBLFNBQU9qQixjQUFjLENBQUNJLE9BQUQsRUFBVUYsT0FBVixFQUFtQkMsV0FBbkIsQ0FBckI7QUFDRDs7QUFFTSxTQUFTa0IsV0FBVCxDQUFxQnBCLEVBQXJCLEVBQWlDQyxPQUFqQyxFQUF3RDtBQUM3RCxTQUFPRixjQUFjLENBQUNDLEVBQUQsRUFBS0MsT0FBTCxFQUFjLFNBQWQsQ0FBZCxDQUF1Q2tCLEtBQXZDLENBQThDRSxHQUFELElBQVM7QUFDM0QsUUFBSSxFQUFFQSxHQUFHLFlBQVl6QixZQUFqQixDQUFKLEVBQW9DLE1BQU15QixHQUFOO0FBQ3JDLEdBRk0sQ0FBUDtBQUdEOztBQUVNLFNBQVNDLFNBQVQsQ0FBc0JDLE9BQXRCLEVBQW1FO0FBQ3hFLFNBQU9BLE9BQU8sQ0FBQ0MsTUFBUixDQUFlLENBQUNDLENBQUQsRUFBSUMsQ0FBSixLQUFVRCxDQUFDLENBQUNSLElBQUYsQ0FBTyxNQUFPVSxDQUFQLElBQWEsQ0FBQyxHQUFHQSxDQUFKLEVBQU8sTUFBTUQsQ0FBQyxFQUFkLENBQXBCLENBQXpCLEVBQWlFdEIsT0FBTyxDQUFDVyxPQUFSLENBQXFCLElBQUlhLEtBQUosRUFBckIsQ0FBakUsQ0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiXG5leHBvcnQgY2xhc3MgVGltZW91dEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXG59XG5cbmV4cG9ydCBjb25zdCBTRUNPTkQgPSAxMDAwO1xuXG5mdW5jdGlvbiB0aW1lb3V0UHJvbWlzZTxUPihtczogbnVtYmVyLCBwcm9taXNlOiBQcm9taXNlPFQ+LCBkZXNjcmlwdGlvbjogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHRpbWVvdXQgPSBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgaWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dChpZCk7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBUaW1lb3V0RXJyb3IoZGVzY3JpcHRpb24pO1xuICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICB9LCBtcyk7XG4gIH0pO1xuXG4gIHJldHVybiBQcm9taXNlLnJhY2UoW1xuICAgIHByb21pc2UsXG4gICAgLy8gY2FzdGluZyB0byBhdm9pZCB0eXBlIGVycm9yLSBzYWZlIHNpbmNlIHRoaXMgcHJvbWlzZSB3aWxsIGFsd2F5cyByZWplY3RcbiAgICB0aW1lb3V0IGFzIFByb21pc2U8VD4sXG4gIF0pO1xufVxuXG4vKipcbiAqIFdhaXQgdW50aWwgYSBwcm9taXNlIHJlc29sdmVzIHdpdGggYSB0cnV0aHkgdmFsdWUgb3IgcmVqZWN0IGFmdGVyIGEgdGltZW91dFxuICovXG5leHBvcnQgZnVuY3Rpb24gd2FpdFVudGlsPFQ+KGFzeW5jVGVzdDogKCkgPT4gUHJvbWlzZTxUPiwgZGVzY3JpcHRpb24gPSAnJywgdGltZW91dCA9IDEwMDAwLCBpbnRlcnZhbCA9IDEwMCkge1xuICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGZ1bmN0aW9uIHdhaXQoKSB7XG4gICAgICBhc3luY1Rlc3QoKS50aGVuKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KHdhaXQsIGludGVydmFsKTtcbiAgICAgICAgfVxuICAgICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICByZWplY3QoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB3YWl0KCk7XG4gIH0pO1xuICByZXR1cm4gdGltZW91dFByb21pc2UodGltZW91dCwgcHJvbWlzZSwgZGVzY3JpcHRpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmFjZVRpbWVvdXQobXM6IG51bWJlciwgcHJvbWlzZTogUHJvbWlzZTxhbnk+KSB7XG4gIHJldHVybiB0aW1lb3V0UHJvbWlzZShtcywgcHJvbWlzZSwgJ3RpbWVvdXQnKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgVGltZW91dEVycm9yKSkgdGhyb3cgZXJyO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1blNlcmlhbDxUPihhY3Rpb25zOiAoKCkgPT4gUHJvbWlzZTxUPilbXSk6IFByb21pc2U8VFtdPiB7XG4gIHJldHVybiBhY3Rpb25zLnJlZHVjZSgobSwgYSkgPT4gbS50aGVuKGFzeW5jICh4KSA9PiBbLi4ueCwgYXdhaXQgYSgpXSksIFByb21pc2UucmVzb2x2ZTxUW10+KG5ldyBBcnJheTxUPigpKSk7XG59XG4iXX0=
|
|
@@ -29,14 +29,14 @@ var _transactions = require("../helpers/transactions");
|
|
|
29
29
|
|
|
30
30
|
var _transactions2 = require("../transactions");
|
|
31
31
|
|
|
32
|
-
var _baseScraper = require("./base-scraper");
|
|
33
|
-
|
|
34
32
|
var _debug = require("../helpers/debug");
|
|
35
33
|
|
|
36
34
|
var _waiting = require("../helpers/waiting");
|
|
37
35
|
|
|
38
36
|
var _errors = require("./errors");
|
|
39
37
|
|
|
38
|
+
var _definitions = require("../definitions");
|
|
39
|
+
|
|
40
40
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
41
41
|
|
|
42
42
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
@@ -305,7 +305,7 @@ class IsracardAmexBaseScraper extends _baseScraperWithBrowser.BaseScraperWithBro
|
|
|
305
305
|
});
|
|
306
306
|
debug('navigate to login page');
|
|
307
307
|
await this.navigateTo(`${this.baseUrl}/personalarea/Login`);
|
|
308
|
-
this.emitProgress(
|
|
308
|
+
this.emitProgress(_definitions.ScraperProgressTypes.LoggingIn);
|
|
309
309
|
const validateUrl = `${this.servicesUrl}?reqName=ValidateIdData`;
|
|
310
310
|
const validateRequest = {
|
|
311
311
|
id: credentials.id,
|
|
@@ -341,21 +341,21 @@ class IsracardAmexBaseScraper extends _baseScraperWithBrowser.BaseScraperWithBro
|
|
|
341
341
|
debug(`user login with status '${loginResult === null || loginResult === void 0 ? void 0 : loginResult.status}'`);
|
|
342
342
|
|
|
343
343
|
if (loginResult && loginResult.status === '1') {
|
|
344
|
-
this.emitProgress(
|
|
344
|
+
this.emitProgress(_definitions.ScraperProgressTypes.LoginSuccess);
|
|
345
345
|
return {
|
|
346
346
|
success: true
|
|
347
347
|
};
|
|
348
348
|
}
|
|
349
349
|
|
|
350
350
|
if (loginResult && loginResult.status === '3') {
|
|
351
|
-
this.emitProgress(
|
|
351
|
+
this.emitProgress(_definitions.ScraperProgressTypes.ChangePassword);
|
|
352
352
|
return {
|
|
353
353
|
success: false,
|
|
354
354
|
errorType: _errors.ScraperErrorTypes.ChangePassword
|
|
355
355
|
};
|
|
356
356
|
}
|
|
357
357
|
|
|
358
|
-
this.emitProgress(
|
|
358
|
+
this.emitProgress(_definitions.ScraperProgressTypes.LoginFailed);
|
|
359
359
|
return {
|
|
360
360
|
success: false,
|
|
361
361
|
errorType: _errors.ScraperErrorTypes.InvalidPassword
|
|
@@ -363,14 +363,14 @@ class IsracardAmexBaseScraper extends _baseScraperWithBrowser.BaseScraperWithBro
|
|
|
363
363
|
}
|
|
364
364
|
|
|
365
365
|
if (validateReturnCode === '4') {
|
|
366
|
-
this.emitProgress(
|
|
366
|
+
this.emitProgress(_definitions.ScraperProgressTypes.ChangePassword);
|
|
367
367
|
return {
|
|
368
368
|
success: false,
|
|
369
369
|
errorType: _errors.ScraperErrorTypes.ChangePassword
|
|
370
370
|
};
|
|
371
371
|
}
|
|
372
372
|
|
|
373
|
-
this.emitProgress(
|
|
373
|
+
this.emitProgress(_definitions.ScraperProgressTypes.LoginFailed);
|
|
374
374
|
return {
|
|
375
375
|
success: false,
|
|
376
376
|
errorType: _errors.ScraperErrorTypes.InvalidPassword
|
|
@@ -393,4 +393,4 @@ class IsracardAmexBaseScraper extends _baseScraperWithBrowser.BaseScraperWithBro
|
|
|
393
393
|
|
|
394
394
|
var _default = IsracardAmexBaseScraper;
|
|
395
395
|
exports.default = _default;
|
|
396
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9iYXNlLWlzcmFjYXJkLWFtZXgudHMiXSwibmFtZXMiOlsiQ09VTlRSWV9DT0RFIiwiSURfVFlQRSIsIklOU1RBTExNRU5UU19LRVlXT1JEIiwiREFURV9GT1JNQVQiLCJkZWJ1ZyIsImdldEFjY291bnRzVXJsIiwic2VydmljZXNVcmwiLCJtb250aE1vbWVudCIsImJpbGxpbmdEYXRlIiwiZm9ybWF0IiwicXVlcnlQYXJhbXMiLCJyZXFOYW1lIiwiYWN0aW9uQ29kZSIsImZldGNoQWNjb3VudHMiLCJwYWdlIiwiZGF0YVVybCIsImRhdGFSZXN1bHQiLCJfIiwiZ2V0IiwiRGFzaGJvYXJkTW9udGhCZWFuIiwiY2FyZHNDaGFyZ2VzIiwibWFwIiwiY2FyZENoYXJnZSIsImluZGV4IiwicGFyc2VJbnQiLCJjYXJkSW5kZXgiLCJhY2NvdW50TnVtYmVyIiwiY2FyZE51bWJlciIsInByb2Nlc3NlZERhdGUiLCJ0b0lTT1N0cmluZyIsImdldFRyYW5zYWN0aW9uc1VybCIsIm1vbnRoIiwieWVhciIsIm1vbnRoU3RyIiwidG9TdHJpbmciLCJyZXF1aXJlZERhdGUiLCJjb252ZXJ0Q3VycmVuY3kiLCJjdXJyZW5jeVN0ciIsIlNIRUtFTF9DVVJSRU5DWV9LRVlXT1JEIiwiQUxUX1NIRUtFTF9DVVJSRU5DWSIsIlNIRUtFTF9DVVJSRU5DWSIsImdldEluc3RhbGxtZW50c0luZm8iLCJ0eG4iLCJtb3JlSW5mbyIsImluY2x1ZGVzIiwidW5kZWZpbmVkIiwibWF0Y2hlcyIsIm1hdGNoIiwibGVuZ3RoIiwibnVtYmVyIiwidG90YWwiLCJnZXRUcmFuc2FjdGlvblR5cGUiLCJUcmFuc2FjdGlvblR5cGVzIiwiSW5zdGFsbG1lbnRzIiwiTm9ybWFsIiwiY29udmVydFRyYW5zYWN0aW9ucyIsInR4bnMiLCJmaWx0ZXJlZFR4bnMiLCJmaWx0ZXIiLCJkZWFsU3VtVHlwZSIsInZvdWNoZXJOdW1iZXJSYXR6Iiwidm91Y2hlck51bWJlclJhdHpPdXRib3VuZCIsImlzT3V0Ym91bmQiLCJkZWFsU3VtT3V0Ym91bmQiLCJ0eG5EYXRlU3RyIiwiZnVsbFB1cmNoYXNlRGF0ZU91dGJvdW5kIiwiZnVsbFB1cmNoYXNlRGF0ZSIsInR4bk1vbWVudCIsImN1cnJlbnRQcm9jZXNzZWREYXRlIiwiZnVsbFBheW1lbnREYXRlIiwicmVzdWx0IiwidHlwZSIsImlkZW50aWZpZXIiLCJkYXRlIiwib3JpZ2luYWxBbW91bnQiLCJkZWFsU3VtIiwib3JpZ2luYWxDdXJyZW5jeSIsImN1cnJlbmN5SWQiLCJjaGFyZ2VkQW1vdW50IiwicGF5bWVudFN1bU91dGJvdW5kIiwicGF5bWVudFN1bSIsImRlc2NyaXB0aW9uIiwiZnVsbFN1cHBsaWVyTmFtZU91dGJvdW5kIiwiZnVsbFN1cHBsaWVyTmFtZUhlYiIsIm1lbW8iLCJpbnN0YWxsbWVudHMiLCJzdGF0dXMiLCJUcmFuc2FjdGlvblN0YXR1c2VzIiwiQ29tcGxldGVkIiwiZmV0Y2hUcmFuc2FjdGlvbnMiLCJvcHRpb25zIiwic3RhcnRNb21lbnQiLCJhY2NvdW50cyIsIkNhcmRzVHJhbnNhY3Rpb25zTGlzdEJlYW4iLCJhY2NvdW50VHhucyIsImZvckVhY2giLCJhY2NvdW50IiwidHhuR3JvdXBzIiwiYWxsVHhucyIsInR4bkdyb3VwIiwidHhuSXNyYWVsIiwicHVzaCIsInR4bkFicm9hZCIsImNvbWJpbmVJbnN0YWxsbWVudHMiLCJvdXRwdXREYXRhIiwiZW5hYmxlVHJhbnNhY3Rpb25zRmlsdGVyQnlEYXRlIiwiZ2V0VHJhbnNhY3Rpb25FeHRyYURldGFpbHMiLCJhY2NvdW50SW5kZXgiLCJ0cmFuc2FjdGlvbiIsIm1vZWRDaGl1diIsIkNhcmRJbmRleCIsInNob3ZhclJhdHoiLCJnZXRFeHRyYVNjcmFwVHJhbnNhY3Rpb24iLCJkYXRhIiwicmF3Q2F0ZWdvcnkiLCJjYXRlZ29yeSIsInRyaW0iLCJnZXRFeHRyYVNjcmFwVHJhbnNhY3Rpb25zIiwiYWNjb3VudFdpdGhJbmRleCIsInByb21pc2VzIiwidCIsIlByb21pc2UiLCJhbGwiLCJnZXRFeHRyYVNjcmFwQWNjb3VudCIsImFjY291bnRNYXAiLCJPYmplY3QiLCJrZXlzIiwiYSIsInJlZHVjZSIsIm0iLCJ4IiwiZ2V0RXh0cmFTY3JhcCIsImFjY291bnRzV2l0aEluZGV4IiwiYWxsTW9udGhzIiwiYWN0aW9ucyIsImkiLCJmZXRjaEFsbFRyYW5zYWN0aW9ucyIsImZ1dHVyZU1vbnRoc1RvU2NyYXBlIiwicmVzdWx0cyIsImZpbmFsUmVzdWx0IiwiYWRkaXRpb25hbFRyYW5zYWN0aW9uSW5mb3JtYXRpb24iLCJjb21iaW5lZFR4bnMiLCJ0eG5zRm9yQWNjb3VudCIsInRvQmVBZGRlZFR4bnMiLCJzdWNjZXNzIiwiSXNyYWNhcmRBbWV4QmFzZVNjcmFwZXIiLCJCYXNlU2NyYXBlcldpdGhCcm93c2VyIiwiY29uc3RydWN0b3IiLCJiYXNlVXJsIiwiY29tcGFueUNvZGUiLCJsb2dpbiIsImNyZWRlbnRpYWxzIiwic2V0UmVxdWVzdEludGVyY2VwdGlvbiIsIm9uIiwicmVxdWVzdCIsInVybCIsImFib3J0IiwiY29udGludWUiLCJuYXZpZ2F0ZVRvIiwiZW1pdFByb2dyZXNzIiwiU2NyYXBlclByb2dyZXNzVHlwZXMiLCJMb2dnaW5nSW4iLCJ2YWxpZGF0ZVVybCIsInZhbGlkYXRlUmVxdWVzdCIsImlkIiwiY2FyZFN1ZmZpeCIsImNhcmQ2RGlnaXRzIiwiY291bnRyeUNvZGUiLCJpZFR5cGUiLCJjaGVja0xldmVsIiwidmFsaWRhdGVSZXN1bHQiLCJIZWFkZXIiLCJTdGF0dXMiLCJWYWxpZGF0ZUlkRGF0YUJlYW4iLCJFcnJvciIsInZhbGlkYXRlUmV0dXJuQ29kZSIsInJldHVybkNvZGUiLCJ1c2VyTmFtZSIsImxvZ2luVXJsIiwiS29kTWlzaHRhbWVzaCIsIk1pc3BhclppaHV5IiwiU2lzbWEiLCJwYXNzd29yZCIsImxvZ2luUmVzdWx0IiwiTG9naW5TdWNjZXNzIiwiQ2hhbmdlUGFzc3dvcmQiLCJlcnJvclR5cGUiLCJTY3JhcGVyRXJyb3JUeXBlcyIsIkxvZ2luRmFpbGVkIiwiSW52YWxpZFBhc3N3b3JkIiwiZmV0Y2hEYXRhIiwiZGVmYXVsdFN0YXJ0TW9tZW50Iiwic3VidHJhY3QiLCJzdGFydERhdGUiLCJ0b0RhdGUiLCJtb21lbnQiLCJtYXgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFLQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFJQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7OztBQUdBLE1BQU1BLFlBQVksR0FBRyxLQUFyQjtBQUNBLE1BQU1DLE9BQU8sR0FBRyxHQUFoQjtBQUNBLE1BQU1DLG9CQUFvQixHQUFHLE9BQTdCO0FBRUEsTUFBTUMsV0FBVyxHQUFHLFlBQXBCO0FBRUEsTUFBTUMsS0FBSyxHQUFHLHFCQUFTLG9CQUFULENBQWQ7O0FBc0VBLFNBQVNDLGNBQVQsQ0FBd0JDLFdBQXhCLEVBQTZDQyxXQUE3QyxFQUFrRTtBQUNoRSxRQUFNQyxXQUFXLEdBQUdELFdBQVcsQ0FBQ0UsTUFBWixDQUFtQixZQUFuQixDQUFwQjtBQUNBLFNBQU8sdUJBQVNILFdBQVQsRUFBc0I7QUFDM0JJLElBQUFBLFdBQVcsRUFBRTtBQUNYQyxNQUFBQSxPQUFPLEVBQUUsZ0JBREU7QUFFWEMsTUFBQUEsVUFBVSxFQUFFLEdBRkQ7QUFHWEosTUFBQUEsV0FIVztBQUlYQyxNQUFBQSxNQUFNLEVBQUU7QUFKRztBQURjLEdBQXRCLENBQVA7QUFRRDs7QUFFRCxlQUFlSSxhQUFmLENBQTZCQyxJQUE3QixFQUF5Q1IsV0FBekMsRUFBOERDLFdBQTlELEVBQThHO0FBQzVHLFFBQU1RLE9BQU8sR0FBR1YsY0FBYyxDQUFDQyxXQUFELEVBQWNDLFdBQWQsQ0FBOUI7QUFDQSxRQUFNUyxVQUFVLEdBQUcsTUFBTSwrQkFBc0RGLElBQXRELEVBQTREQyxPQUE1RCxDQUF6Qjs7QUFDQSxNQUFJQyxVQUFVLElBQUlDLGdCQUFFQyxHQUFGLENBQU1GLFVBQU4sRUFBa0IsZUFBbEIsTUFBdUMsR0FBckQsSUFBNERB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QUFBQSxPQUFPLEVBQUUsS0FESjtBQUVMMEMsUUFBQUEsU0FBUyxFQUFFQywwQkFBa0JGO0FBRnhCLE9BQVA7QUFJRDs7QUFFRCxTQUFLMUIsWUFBTCxDQUFrQkMsa0NBQXFCNEIsV0FBdkM7QUFDQSxXQUFPO0FBQ0w1QyxNQUFBQSxPQUFPLEVBQUUsS0FESjtBQUVMMEMsTUFBQUEsU0FBUyxFQUFFQywwQkFBa0JFO0FBRnhCLEtBQVA7QUFJRDs7QUFFRCxRQUFNQyxTQUFOLEdBQWtCO0FBQ2hCLFVBQU1DLGtCQUFrQixHQUFHLHVCQUFTQyxRQUFULENBQWtCLENBQWxCLEVBQXFCLE9BQXJCLENBQTNCO0FBQ0EsVUFBTUMsU0FBUyxHQUFHLEtBQUt2RyxPQUFMLENBQWF1RyxTQUFiLElBQTBCRixrQkFBa0IsQ0FBQ0csTUFBbkIsRUFBNUM7O0FBQ0EsVUFBTXZHLFdBQVcsR0FBR3dHLGdCQUFPQyxHQUFQLENBQVdMLGtCQUFYLEVBQStCLHFCQUFPRSxTQUFQLENBQS9CLENBQXBCOztBQUVBLFdBQU96RCxvQkFBb0IsQ0FBQyxLQUFLMUgsSUFBTixvQkFDdEIsS0FBSzRFLE9BRGlCO0FBRXpCcEYsTUFBQUEsV0FBVyxFQUFFLEtBQUtBLFdBRk87QUFHekIrSSxNQUFBQSxXQUFXLEVBQUUsS0FBS0E7QUFITyxRQUl4QjFELFdBSndCLENBQTNCO0FBS0Q7O0FBM0dzRjs7ZUE4RzFFc0QsdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGJ1aWxkVXJsIGZyb20gJ2J1aWxkLXVybCc7XG5pbXBvcnQgbW9tZW50LCB7IE1vbWVudCB9IGZyb20gJ21vbWVudCc7XG5cbmltcG9ydCB7IFBhZ2UgfSBmcm9tICdwdXBwZXRlZXInO1xuaW1wb3J0IHsgQmFzZVNjcmFwZXJXaXRoQnJvd3NlciB9IGZyb20gJy4vYmFzZS1zY3JhcGVyLXdpdGgtYnJvd3Nlcic7XG5pbXBvcnQgeyBmZXRjaEdldFdpdGhpblBhZ2UsIGZldGNoUG9zdFdpdGhpblBhZ2UgfSBmcm9tICcuLi9oZWxwZXJzL2ZldGNoJztcbmltcG9ydCB7XG4gIFNIRUtFTF9DVVJSRU5DWV9LRVlXT1JELFxuICBTSEVLRUxfQ1VSUkVOQ1ksXG4gIEFMVF9TSEVLRUxfQ1VSUkVOQ1ksXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgZ2V0QWxsTW9udGhNb21lbnRzIGZyb20gJy4uL2hlbHBlcnMvZGF0ZXMnO1xuaW1wb3J0IHsgZml4SW5zdGFsbG1lbnRzLCBmaWx0ZXJPbGRUcmFuc2FjdGlvbnMgfSBmcm9tICcuLi9oZWxwZXJzL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQge1xuICBUcmFuc2FjdGlvbnNBY2NvdW50LCBUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25JbnN0YWxsbWVudHMsXG4gIFRyYW5zYWN0aW9uU3RhdHVzZXMsIFRyYW5zYWN0aW9uVHlwZXMsXG59IGZyb20gJy4uL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQge1xuICBTY3JhcGVyUHJvZ3Jlc3NUeXBlcyxcblxufSBmcm9tICcuL2Jhc2Utc2NyYXBlcic7XG5pbXBvcnQgeyBnZXREZWJ1ZyB9IGZyb20gJy4uL2hlbHBlcnMvZGVidWcnO1xuaW1wb3J0IHsgcnVuU2VyaWFsIH0gZnJvbSAnLi4vaGVscGVycy93YWl0aW5nJztcbmltcG9ydCB7IFNjcmFwZXJFcnJvclR5cGVzIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsgU2NyYXBlclNjcmFwaW5nUmVzdWx0LCBTY3JhcGVyT3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlJztcblxuY29uc3QgQ09VTlRSWV9DT0RFID0gJzIxMic7XG5jb25zdCBJRF9UWVBFID0gJzEnO1xuY29uc3QgSU5TVEFMTE1FTlRTX0tFWVdPUkQgPSAn16rXqdec15XXnSc7XG5cbmNvbnN0IERBVEVfRk9STUFUID0gJ0REL01NL1lZWVknO1xuXG5jb25zdCBkZWJ1ZyA9IGdldERlYnVnKCdiYXNlLWlzcmFjYXJkLWFtZXgnKTtcblxuaW50ZXJmYWNlIEV4dGVuZGVkU2NyYXBlck9wdGlvbnMgZXh0ZW5kcyBTY3JhcGVyT3B0aW9ucyB7XG4gIHNlcnZpY2VzVXJsOiBzdHJpbmc7XG4gIGNvbXBhbnlDb2RlOiBzdHJpbmc7XG59XG5cbnR5cGUgU2NyYXBlZEFjY291bnRzV2l0aEluZGV4ID0gUmVjb3JkPHN0cmluZywgVHJhbnNhY3Rpb25zQWNjb3VudCAmIHsgaW5kZXg6IG51bWJlciB9PjtcblxuaW50ZXJmYWNlIFNjcmFwZWRUcmFuc2FjdGlvbiB7XG4gIGRlYWxTdW1UeXBlOiBzdHJpbmc7XG4gIHZvdWNoZXJOdW1iZXJSYXR6T3V0Ym91bmQ6IHN0cmluZztcbiAgdm91Y2hlck51bWJlclJhdHo6IHN0cmluZztcbiAgbW9yZUluZm8/OiBzdHJpbmc7XG4gIGRlYWxTdW1PdXRib3VuZDogYm9vbGVhbjtcbiAgY3VycmVuY3lJZDogc3RyaW5nO1xuICBkZWFsU3VtOiBudW1iZXI7XG4gIGZ1bGxQYXltZW50RGF0ZT86IHN0cmluZztcbiAgZnVsbFB1cmNoYXNlRGF0ZT86IHN0cmluZztcbiAgZnVsbFB1cmNoYXNlRGF0ZU91dGJvdW5kPzogc3RyaW5nO1xuICBmdWxsU3VwcGxpZXJOYW1lSGViOiBzdHJpbmc7XG4gIGZ1bGxTdXBwbGllck5hbWVPdXRib3VuZDogc3RyaW5nO1xuICBwYXltZW50U3VtOiBudW1iZXI7XG4gIHBheW1lbnRTdW1PdXRib3VuZDogbnVtYmVyO1xufVxuXG5cbmludGVyZmFjZSBTY3JhcGVkQWNjb3VudCB7XG4gIGluZGV4OiBudW1iZXI7XG4gIGFjY291bnROdW1iZXI6IHN0cmluZztcbiAgcHJvY2Vzc2VkRGF0ZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgU2NyYXBlZExvZ2luVmFsaWRhdGlvbiB7XG4gIEhlYWRlcjoge1xuICAgIFN0YXR1czogc3RyaW5nO1xuICB9O1xuICBWYWxpZGF0ZUlkRGF0YUJlYW4/OiB7XG4gICAgdXNlck5hbWU/OiBzdHJpbmc7XG4gICAgcmV0dXJuQ29kZTogc3RyaW5nO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgU2NyYXBlZEFjY291bnRzV2l0aGluUGFnZVJlc3BvbnNlIHtcbiAgSGVhZGVyOiB7XG4gICAgU3RhdHVzOiBzdHJpbmc7XG4gIH07XG4gIERhc2hib2FyZE1vbnRoQmVhbj86IHtcbiAgICBjYXJkc0NoYXJnZXM6IHtcbiAgICAgIGNhcmRJbmRleDogc3RyaW5nO1xuICAgICAgY2FyZE51bWJlcjogc3RyaW5nO1xuICAgICAgYmlsbGluZ0RhdGU6IHN0cmluZztcbiAgICB9W107XG4gIH07XG59XG5cbmludGVyZmFjZSBTY3JhcGVkQ3VycmVudENhcmRUcmFuc2FjdGlvbnMge1xuICB0eG5Jc3JhZWw/OiBTY3JhcGVkVHJhbnNhY3Rpb25bXTtcbiAgdHhuQWJyb2FkPzogU2NyYXBlZFRyYW5zYWN0aW9uW107XG59XG5cbmludGVyZmFjZSBTY3JhcGVkVHJhbnNhY3Rpb25EYXRhIHtcbiAgSGVhZGVyPzoge1xuICAgIFN0YXR1czogc3RyaW5nO1xuICB9O1xuICBDYXJkc1RyYW5zYWN0aW9uc0xpc3RCZWFuPzogUmVjb3JkPHN0cmluZywge1xuICAgIEN1cnJlbnRDYXJkVHJhbnNhY3Rpb25zOiBTY3JhcGVkQ3VycmVudENhcmRUcmFuc2FjdGlvbnNbXTtcbiAgfT47XG59XG5cbmZ1bmN0aW9uIGdldEFjY291bnRzVXJsKHNlcnZpY2VzVXJsOiBzdHJpbmcsIG1vbnRoTW9tZW50OiBNb21lbnQpIHtcbiAgY29uc3QgYmlsbGluZ0RhdGUgPSBtb250aE1vbWVudC5mb3JtYXQoJ1lZWVktTU0tREQnKTtcbiAgcmV0dXJuIGJ1aWxkVXJsKHNlcnZpY2VzVXJsLCB7XG4gICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgIHJlcU5hbWU6ICdEYXNoYm9hcmRNb250aCcsXG4gICAgICBhY3Rpb25Db2RlOiAnMCcsXG4gICAgICBiaWxsaW5nRGF0ZSxcbiAgICAgIGZvcm1hdDogJ0pzb24nLFxuICAgIH0sXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaEFjY291bnRzKHBhZ2U6IFBhZ2UsIHNlcnZpY2VzVXJsOiBzdHJpbmcsIG1vbnRoTW9tZW50OiBNb21lbnQpOiBQcm9taXNlPFNjcmFwZWRBY2NvdW50W10+IHtcbiAgY29uc3QgZGF0YVVybCA9IGdldEFjY291bnRzVXJsKHNlcnZpY2VzVXJsLCBtb250aE1vbWVudCk7XG4gIGNvbnN0IGRhdGFSZXN1bHQgPSBhd2FpdCBmZXRjaEdldFdpdGhpblBhZ2U8U2NyYXBlZEFjY291bnRzV2l0aGluUGFnZVJlc3BvbnNlPihwYWdlLCBkYXRhVXJsKTtcbiAgaWYgKGRhdGFSZXN1bHQgJiYgXy5nZXQoZGF0YVJlc3VsdCwgJ0hlYWRlci5TdGF0dXMnKSA9PT0gJzEnICYmIGRhdGFSZXN1bHQuRGFzaGJvYXJkTW9udGhCZWFuKSB7XG4gICAgY29uc3QgeyBjYXJkc0NoYXJnZXMgfSA9IGRhdGFSZXN1bHQuRGFzaGJvYXJkTW9udGhCZWFuO1xuICAgIGlmIChjYXJkc0NoYXJnZXMpIHtcbiAgICAgIHJldHVybiBjYXJkc0NoYXJnZXMubWFwKChjYXJkQ2hhcmdlKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaW5kZXg6IHBhcnNlSW50KGNhcmRDaGFyZ2UuY2FyZEluZGV4LCAxMCksXG4gICAgICAgICAgYWNjb3VudE51bWJlcjogY2FyZENoYXJnZS5jYXJkTnVtYmVyLFxuICAgICAgICAgIHByb2Nlc3NlZERhdGU6IG1vbWVudChjYXJkQ2hhcmdlLmJpbGxpbmdEYXRlLCBEQVRFX0ZPUk1BVCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gW107XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uc1VybChzZXJ2aWNlc1VybDogc3RyaW5nLCBtb250aE1vbWVudDogTW9tZW50KSB7XG4gIGNvbnN0IG1vbnRoID0gbW9udGhNb21lbnQubW9udGgoKSArIDE7XG4gIGNvbnN0IHllYXIgPSBtb250aE1vbWVudC55ZWFyKCk7XG4gIGNvbnN0IG1vbnRoU3RyID0gbW9udGggPCAxMCA/IGAwJHttb250aH1gIDogbW9udGgudG9TdHJpbmcoKTtcbiAgcmV0dXJuIGJ1aWxkVXJsKHNlcnZpY2VzVXJsLCB7XG4gICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgIHJlcU5hbWU6ICdDYXJkc1RyYW5zYWN0aW9uc0xpc3QnLFxuICAgICAgbW9udGg6IG1vbnRoU3RyLFxuICAgICAgeWVhcjogYCR7eWVhcn1gLFxuICAgICAgcmVxdWlyZWREYXRlOiAnTicsXG4gICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRDdXJyZW5jeShjdXJyZW5jeVN0cjogc3RyaW5nKSB7XG4gIGlmIChjdXJyZW5jeVN0ciA9PT0gU0hFS0VMX0NVUlJFTkNZX0tFWVdPUkQgfHwgY3VycmVuY3lTdHIgPT09IEFMVF9TSEVLRUxfQ1VSUkVOQ1kpIHtcbiAgICByZXR1cm4gU0hFS0VMX0NVUlJFTkNZO1xuICB9XG4gIHJldHVybiBjdXJyZW5jeVN0cjtcbn1cblxuZnVuY3Rpb24gZ2V0SW5zdGFsbG1lbnRzSW5mbyh0eG46IFNjcmFwZWRUcmFuc2FjdGlvbik6IFRyYW5zYWN0aW9uSW5zdGFsbG1lbnRzIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF0eG4ubW9yZUluZm8gfHwgIXR4bi5tb3JlSW5mby5pbmNsdWRlcyhJTlNUQUxMTUVOVFNfS0VZV09SRCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IG1hdGNoZXMgPSB0eG4ubW9yZUluZm8ubWF0Y2goL1xcZCsvZyk7XG4gIGlmICghbWF0Y2hlcyB8fCBtYXRjaGVzLmxlbmd0aCA8IDIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBudW1iZXI6IHBhcnNlSW50KG1hdGNoZXNbMF0sIDEwKSxcbiAgICB0b3RhbDogcGFyc2VJbnQobWF0Y2hlc1sxXSwgMTApLFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRUcmFuc2FjdGlvblR5cGUodHhuOiBTY3JhcGVkVHJhbnNhY3Rpb24pIHtcbiAgcmV0dXJuIGdldEluc3RhbGxtZW50c0luZm8odHhuKSA/IFRyYW5zYWN0aW9uVHlwZXMuSW5zdGFsbG1lbnRzIDogVHJhbnNhY3Rpb25UeXBlcy5Ob3JtYWw7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRUcmFuc2FjdGlvbnModHhuczogU2NyYXBlZFRyYW5zYWN0aW9uW10sIHByb2Nlc3NlZERhdGU6IHN0cmluZyk6IFRyYW5zYWN0aW9uW10ge1xuICBjb25zdCBmaWx0ZXJlZFR4bnMgPSB0eG5zLmZpbHRlcigodHhuKSA9PiB0eG4uZGVhbFN1bVR5cGUgIT09ICcxJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eG4udm91Y2hlck51bWJlclJhdHogIT09ICcwMDAwMDAwMDAnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4bi52b3VjaGVyTnVtYmVyUmF0ek91dGJvdW5kICE9PSAnMDAwMDAwMDAwJyk7XG5cbiAgcmV0dXJuIGZpbHRlcmVkVHhucy5tYXAoKHR4bikgPT4ge1xuICAgIGNvbnN0IGlzT3V0Ym91bmQgPSB0eG4uZGVhbFN1bU91dGJvdW5kO1xuICAgIGNvbnN0IHR4bkRhdGVTdHIgPSBpc091dGJvdW5kID8gdHhuLmZ1bGxQdXJjaGFzZURhdGVPdXRib3VuZCA6IHR4bi5mdWxsUHVyY2hhc2VEYXRlO1xuICAgIGNvbnN0IHR4bk1vbWVudCA9IG1vbWVudCh0eG5EYXRlU3RyLCBEQVRFX0ZPUk1BVCk7XG5cbiAgICBjb25zdCBjdXJyZW50UHJvY2Vzc2VkRGF0ZSA9IHR4bi5mdWxsUGF5bWVudERhdGUgP1xuICAgICAgbW9tZW50KHR4bi5mdWxsUGF5bWVudERhdGUsIERBVEVfRk9STUFUKS50b0lTT1N0cmluZygpIDpcbiAgICAgIHByb2Nlc3NlZERhdGU7XG4gICAgY29uc3QgcmVzdWx0OiBUcmFuc2FjdGlvbiA9IHtcbiAgICAgIHR5cGU6IGdldFRyYW5zYWN0aW9uVHlwZSh0eG4pLFxuICAgICAgaWRlbnRpZmllcjogcGFyc2VJbnQoaXNPdXRib3VuZCA/IHR4bi52b3VjaGVyTnVtYmVyUmF0ek91dGJvdW5kIDogdHhuLnZvdWNoZXJOdW1iZXJSYXR6LCAxMCksXG4gICAgICBkYXRlOiB0eG5Nb21lbnQudG9JU09TdHJpbmcoKSxcbiAgICAgIHByb2Nlc3NlZERhdGU6IGN1cnJlbnRQcm9jZXNzZWREYXRlLFxuICAgICAgb3JpZ2luYWxBbW91bnQ6IGlzT3V0Ym91bmQgPyAtdHhuLmRlYWxTdW1PdXRib3VuZCA6IC10eG4uZGVhbFN1bSxcbiAgICAgIG9yaWdpbmFsQ3VycmVuY3k6IGNvbnZlcnRDdXJyZW5jeSh0eG4uY3VycmVuY3lJZCksXG4gICAgICBjaGFyZ2VkQW1vdW50OiBpc091dGJvdW5kID8gLXR4bi5wYXltZW50U3VtT3V0Ym91bmQgOiAtdHhuLnBheW1lbnRTdW0sXG4gICAgICBkZXNjcmlwdGlvbjogaXNPdXRib3VuZCA/IHR4bi5mdWxsU3VwcGxpZXJOYW1lT3V0Ym91bmQgOiB0eG4uZnVsbFN1cHBsaWVyTmFtZUhlYixcbiAgICAgIG1lbW86IHR4bi5tb3JlSW5mbyB8fCAnJyxcbiAgICAgIGluc3RhbGxtZW50czogZ2V0SW5zdGFsbG1lbnRzSW5mbyh0eG4pIHx8IHVuZGVmaW5lZCxcbiAgICAgIHN0YXR1czogVHJhbnNhY3Rpb25TdGF0dXNlcy5Db21wbGV0ZWQsXG4gICAgfTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaFRyYW5zYWN0aW9ucyhwYWdlOiBQYWdlLCBvcHRpb25zOiBFeHRlbmRlZFNjcmFwZXJPcHRpb25zLCBzdGFydE1vbWVudDogTW9tZW50LCBtb250aE1vbWVudDogTW9tZW50KTogUHJvbWlzZTxTY3JhcGVkQWNjb3VudHNXaXRoSW5kZXg+IHtcbiAgY29uc3QgYWNjb3VudHMgPSBhd2FpdCBmZXRjaEFjY291bnRzKHBhZ2UsIG9wdGlvbnMuc2VydmljZXNVcmwsIG1vbnRoTW9tZW50KTtcbiAgY29uc3QgZGF0YVVybCA9IGdldFRyYW5zYWN0aW9uc1VybChvcHRpb25zLnNlcnZpY2VzVXJsLCBtb250aE1vbWVudCk7XG4gIGNvbnN0IGRhdGFSZXN1bHQgPSBhd2FpdCBmZXRjaEdldFdpdGhpblBhZ2U8U2NyYXBlZFRyYW5zYWN0aW9uRGF0YT4ocGFnZSwgZGF0YVVybCk7XG4gIGlmIChkYXRhUmVzdWx0ICYmIF8uZ2V0KGRhdGFSZXN1bHQsICdIZWFkZXIuU3RhdHVzJykgPT09ICcxJyAmJiBkYXRhUmVzdWx0LkNhcmRzVHJhbnNhY3Rpb25zTGlzdEJlYW4pIHtcbiAgICBjb25zdCBhY2NvdW50VHhuczogU2NyYXBlZEFjY291bnRzV2l0aEluZGV4ID0ge307XG4gICAgYWNjb3VudHMuZm9yRWFjaCgoYWNjb3VudCkgPT4ge1xuICAgICAgY29uc3QgdHhuR3JvdXBzOiBTY3JhcGVkQ3VycmVudENhcmRUcmFuc2FjdGlvbnNbXSA9IF8uZ2V0KGRhdGFSZXN1bHQsIGBDYXJkc1RyYW5zYWN0aW9uc0xpc3RCZWFuLkluZGV4JHthY2NvdW50LmluZGV4fS5DdXJyZW50Q2FyZFRyYW5zYWN0aW9uc2ApO1xuICAgICAgaWYgKHR4bkdyb3Vwcykge1xuICAgICAgICBsZXQgYWxsVHhuczogVHJhbnNhY3Rpb25bXSA9IFtdO1xuICAgICAgICB0eG5Hcm91cHMuZm9yRWFjaCgodHhuR3JvdXApID0+IHtcbiAgICAgICAgICBpZiAodHhuR3JvdXAudHhuSXNyYWVsKSB7XG4gICAgICAgICAgICBjb25zdCB0eG5zID0gY29udmVydFRyYW5zYWN0aW9ucyh0eG5Hcm91cC50eG5Jc3JhZWwsIGFjY291bnQucHJvY2Vzc2VkRGF0ZSk7XG4gICAgICAgICAgICBhbGxUeG5zLnB1c2goLi4udHhucyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eG5Hcm91cC50eG5BYnJvYWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHR4bnMgPSBjb252ZXJ0VHJhbnNhY3Rpb25zKHR4bkdyb3VwLnR4bkFicm9hZCwgYWNjb3VudC5wcm9jZXNzZWREYXRlKTtcbiAgICAgICAgICAgIGFsbFR4bnMucHVzaCguLi50eG5zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghb3B0aW9ucy5jb21iaW5lSW5zdGFsbG1lbnRzKSB7XG4gICAgICAgICAgYWxsVHhucyA9IGZpeEluc3RhbGxtZW50cyhhbGxUeG5zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5vdXRwdXREYXRhPy5lbmFibGVUcmFuc2FjdGlvbnNGaWx0ZXJCeURhdGUgPz8gdHJ1ZSkge1xuICAgICAgICAgIGFsbFR4bnMgPSBmaWx0ZXJPbGRUcmFuc2FjdGlvbnMoYWxsVHhucywgc3RhcnRNb21lbnQsIG9wdGlvbnMuY29tYmluZUluc3RhbGxtZW50cyB8fCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgYWNjb3VudFR4bnNbYWNjb3VudC5hY2NvdW50TnVtYmVyXSA9IHtcbiAgICAgICAgICBhY2NvdW50TnVtYmVyOiBhY2NvdW50LmFjY291bnROdW1iZXIsXG4gICAgICAgICAgaW5kZXg6IGFjY291bnQuaW5kZXgsXG4gICAgICAgICAgdHhuczogYWxsVHhucyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYWNjb3VudFR4bnM7XG4gIH1cblxuICByZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uRXh0cmFEZXRhaWxzKHNlcnZpY2VzVXJsOiBzdHJpbmcsIG1vbnRoOiBNb21lbnQsIGFjY291bnRJbmRleDogbnVtYmVyLCB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiBzdHJpbmcge1xuICBjb25zdCBtb2VkQ2hpdXYgPSBtb250aC5mb3JtYXQoJ01NWVlZWScpO1xuICByZXR1cm4gYnVpbGRVcmwoc2VydmljZXNVcmwsIHtcbiAgICBxdWVyeVBhcmFtczoge1xuICAgICAgcmVxTmFtZTogJ1BpcnRleUlza2FfMjA0JyxcbiAgICAgIENhcmRJbmRleDogYWNjb3VudEluZGV4LnRvU3RyaW5nKCksXG4gICAgICBzaG92YXJSYXR6OiB0cmFuc2FjdGlvbi5pZGVudGlmaWVyIS50b1N0cmluZygpLFxuICAgICAgbW9lZENoaXV2LFxuICAgIH0sXG4gIH0pO1xufVxuYXN5bmMgZnVuY3Rpb24gZ2V0RXh0cmFTY3JhcFRyYW5zYWN0aW9uKHBhZ2U6IFBhZ2UsIG9wdGlvbnM6IEV4dGVuZGVkU2NyYXBlck9wdGlvbnMsIG1vbnRoOiBNb21lbnQsIGFjY291bnRJbmRleDogbnVtYmVyLCB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gIGNvbnN0IGRhdGFVcmwgPSBnZXRUcmFuc2FjdGlvbkV4dHJhRGV0YWlscyhvcHRpb25zLnNlcnZpY2VzVXJsLCBtb250aCwgYWNjb3VudEluZGV4LCB0cmFuc2FjdGlvbik7XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEdldFdpdGhpblBhZ2U8U2NyYXBlZFRyYW5zYWN0aW9uRGF0YT4ocGFnZSwgZGF0YVVybCk7XG4gIGNvbnN0IHJhd0NhdGVnb3J5ID0gXy5nZXQoZGF0YSwgJ1BpcnRleUlza2FfMjA0QmVhbi5zZWN0b3InKTtcbiAgcmV0dXJuIHtcbiAgICAuLi50cmFuc2FjdGlvbixcbiAgICBjYXRlZ29yeTogcmF3Q2F0ZWdvcnkudHJpbSgpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRFeHRyYVNjcmFwVHJhbnNhY3Rpb25zKGFjY291bnRXaXRoSW5kZXg6IFRyYW5zYWN0aW9uc0FjY291bnQgJiB7IGluZGV4OiBudW1iZXIgfSwgcGFnZTogUGFnZSwgb3B0aW9uczogRXh0ZW5kZWRTY3JhcGVyT3B0aW9ucywgbW9udGg6IG1vbWVudC5Nb21lbnQpOiBQcm9taXNlPFRyYW5zYWN0aW9uW10+IHtcbiAgY29uc3QgcHJvbWlzZXMgPSBhY2NvdW50V2l0aEluZGV4LnR4bnNcbiAgICAubWFwKCh0KSA9PiBnZXRFeHRyYVNjcmFwVHJhbnNhY3Rpb24ocGFnZSwgb3B0aW9ucywgbW9udGgsIGFjY291bnRXaXRoSW5kZXguaW5kZXgsIHQpKTtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0RXh0cmFTY3JhcEFjY291bnQocGFnZTogUGFnZSwgb3B0aW9uczogRXh0ZW5kZWRTY3JhcGVyT3B0aW9ucywgYWNjb3VudE1hcDogU2NyYXBlZEFjY291bnRzV2l0aEluZGV4LCBtb250aDogbW9tZW50Lk1vbWVudCk6IFByb21pc2U8U2NyYXBlZEFjY291bnRzV2l0aEluZGV4PiB7XG4gIGNvbnN0IHByb21pc2VzID0gT2JqZWN0LmtleXMoYWNjb3VudE1hcClcbiAgICAubWFwKGFzeW5jIChhKSA9PiAoe1xuICAgICAgLi4uYWNjb3VudE1hcFthXSxcbiAgICAgIHR4bnM6IGF3YWl0IGdldEV4dHJhU2NyYXBUcmFuc2FjdGlvbnMoYWNjb3VudE1hcFthXSwgcGFnZSwgb3B0aW9ucywgbW9udGgpLFxuICAgIH0pKTtcbiAgY29uc3QgYWNjb3VudHMgPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gIHJldHVybiBhY2NvdW50cy5yZWR1Y2UoKG0sIHgpID0+ICh7IC4uLm0sIFt4LmFjY291bnROdW1iZXJdOiB4IH0pLCB7fSk7XG59XG5cbmZ1bmN0aW9uIGdldEV4dHJhU2NyYXAoYWNjb3VudHNXaXRoSW5kZXg6IFNjcmFwZWRBY2NvdW50c1dpdGhJbmRleFtdLCBwYWdlOiBQYWdlLCBvcHRpb25zOiBFeHRlbmRlZFNjcmFwZXJPcHRpb25zLCBhbGxNb250aHM6IG1vbWVudC5Nb21lbnRbXSk6IFByb21pc2U8U2NyYXBlZEFjY291bnRzV2l0aEluZGV4W10+IHtcbiAgY29uc3QgYWN0aW9ucyA9IGFjY291bnRzV2l0aEluZGV4Lm1hcCgoYSwgaSkgPT4gKCkgPT4gZ2V0RXh0cmFTY3JhcEFjY291bnQocGFnZSwgb3B0aW9ucywgYSwgYWxsTW9udGhzW2ldKSk7XG4gIHJldHVybiBydW5TZXJpYWwoYWN0aW9ucyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQWxsVHJhbnNhY3Rpb25zKHBhZ2U6IFBhZ2UsIG9wdGlvbnM6IEV4dGVuZGVkU2NyYXBlck9wdGlvbnMsIHN0YXJ0TW9tZW50OiBNb21lbnQpIHtcbiAgY29uc3QgZnV0dXJlTW9udGhzVG9TY3JhcGUgPSBvcHRpb25zLmZ1dHVyZU1vbnRoc1RvU2NyYXBlID8/IDE7XG4gIGNvbnN0IGFsbE1vbnRocyA9IGdldEFsbE1vbnRoTW9tZW50cyhzdGFydE1vbWVudCwgZnV0dXJlTW9udGhzVG9TY3JhcGUpO1xuICBjb25zdCByZXN1bHRzOiBTY3JhcGVkQWNjb3VudHNXaXRoSW5kZXhbXSA9IGF3YWl0IFByb21pc2UuYWxsKGFsbE1vbnRocy5tYXAoYXN5bmMgKG1vbnRoTW9tZW50KSA9PiB7XG4gICAgcmV0dXJuIGZldGNoVHJhbnNhY3Rpb25zKHBhZ2UsIG9wdGlvbnMsIHN0YXJ0TW9tZW50LCBtb250aE1vbWVudCk7XG4gIH0pKTtcblxuICBjb25zdCBmaW5hbFJlc3VsdCA9IG9wdGlvbnMuYWRkaXRpb25hbFRyYW5zYWN0aW9uSW5mb3JtYXRpb24gP1xuICAgIGF3YWl0IGdldEV4dHJhU2NyYXAocmVzdWx0cywgcGFnZSwgb3B0aW9ucywgYWxsTW9udGhzKSA6IHJlc3VsdHM7XG5cbiAgY29uc3QgY29tYmluZWRUeG5zOiBSZWNvcmQ8c3RyaW5nLCBUcmFuc2FjdGlvbltdPiA9IHt9O1xuXG4gIGZpbmFsUmVzdWx0LmZvckVhY2goKHJlc3VsdCkgPT4ge1xuICAgIE9iamVjdC5rZXlzKHJlc3VsdCkuZm9yRWFjaCgoYWNjb3VudE51bWJlcikgPT4ge1xuICAgICAgbGV0IHR4bnNGb3JBY2NvdW50ID0gY29tYmluZWRUeG5zW2FjY291bnROdW1iZXJdO1xuICAgICAgaWYgKCF0eG5zRm9yQWNjb3VudCkge1xuICAgICAgICB0eG5zRm9yQWNjb3VudCA9IFtdO1xuICAgICAgICBjb21iaW5lZFR4bnNbYWNjb3VudE51bWJlcl0gPSB0eG5zRm9yQWNjb3VudDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRvQmVBZGRlZFR4bnMgPSByZXN1bHRbYWNjb3VudE51bWJlcl0udHhucztcbiAgICAgIGNvbWJpbmVkVHhuc1thY2NvdW50TnVtYmVyXS5wdXNoKC4uLnRvQmVBZGRlZFR4bnMpO1xuICAgIH0pO1xuICB9KTtcblxuICBjb25zdCBhY2NvdW50cyA9IE9iamVjdC5rZXlzKGNvbWJpbmVkVHhucykubWFwKChhY2NvdW50TnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjY291bnROdW1iZXIsXG4gICAgICB0eG5zOiBjb21iaW5lZFR4bnNbYWNjb3VudE51bWJlcl0sXG4gICAgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdWNjZXNzOiB0cnVlLFxuICAgIGFjY291bnRzLFxuICB9O1xufVxuXG50eXBlIFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzID0ge2lkOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcsIGNhcmQ2RGlnaXRzOiBzdHJpbmd9O1xuY2xhc3MgSXNyYWNhcmRBbWV4QmFzZVNjcmFwZXIgZXh0ZW5kcyBCYXNlU2NyYXBlcldpdGhCcm93c2VyPFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzPiB7XG4gIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29tcGFueUNvZGU6IHN0cmluZztcblxuICBwcml2YXRlIHNlcnZpY2VzVXJsOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogU2NyYXBlck9wdGlvbnMsIGJhc2VVcmw6IHN0cmluZywgY29tcGFueUNvZGU6IHN0cmluZykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybDtcbiAgICB0aGlzLmNvbXBhbnlDb2RlID0gY29tcGFueUNvZGU7XG4gICAgdGhpcy5zZXJ2aWNlc1VybCA9IGAke2Jhc2VVcmx9L3NlcnZpY2VzL1Byb3h5UmVxdWVzdEhhbmRsZXIuYXNoeGA7XG4gIH1cblxuICBhc3luYyBsb2dpbihjcmVkZW50aWFsczogU2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHMpOiBQcm9taXNlPFNjcmFwZXJTY3JhcGluZ1Jlc3VsdD4ge1xuICAgIGF3YWl0IHRoaXMucGFnZS5zZXRSZXF1ZXN0SW50ZXJjZXB0aW9uKHRydWUpO1xuICAgIHRoaXMucGFnZS5vbigncmVxdWVzdCcsIChyZXF1ZXN0KSA9PiB7XG4gICAgICBpZiAocmVxdWVzdC51cmwoKS5pbmNsdWRlcygnZGV0ZWN0b3ItZG9tLm1pbi5qcycpKSB7XG4gICAgICAgIGRlYnVnKCdmb3JjZSBhYm9ydCBmb3IgcmVxdWVzdCBkbyBkb3dubG9hZCBkZXRlY3Rvci1kb20ubWluLmpzIHJlc291cmNlJyk7XG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3QuY29udGludWUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRlYnVnKCduYXZpZ2F0ZSB0byBsb2dpbiBwYWdlJyk7XG4gICAgYXdhaXQgdGhpcy5uYXZpZ2F0ZVRvKGAke3RoaXMuYmFzZVVybH0vcGVyc29uYWxhcmVhL0xvZ2luYCk7XG5cbiAgICB0aGlzLmVtaXRQcm9ncmVzcyhTY3JhcGVyUHJvZ3Jlc3NUeXBlcy5Mb2dnaW5nSW4pO1xuXG4gICAgY29uc3QgdmFsaWRhdGVVcmwgPSBgJHt0aGlzLnNlcnZpY2VzVXJsfT9yZXFOYW1lPVZhbGlkYXRlSWREYXRhYDtcbiAgICBjb25zdCB2YWxpZGF0ZVJlcXVlc3QgPSB7XG4gICAgICBpZDogY3JlZGVudGlhbHMuaWQsXG4gICAgICBjYXJkU3VmZml4OiBjcmVkZW50aWFscy5jYXJkNkRpZ2l0cyxcbiAgICAgIGNvdW50cnlDb2RlOiBDT1VOVFJZX0NPREUsXG4gICAgICBpZFR5cGU6IElEX1RZUEUsXG4gICAgICBjaGVja0xldmVsOiAnMScsXG4gICAgICBjb21wYW55Q29kZTogdGhpcy5jb21wYW55Q29kZSxcbiAgICB9O1xuICAgIGNvbnN0IHZhbGlkYXRlUmVzdWx0ID0gYXdhaXQgZmV0Y2hQb3N0V2l0aGluUGFnZTxTY3JhcGVkTG9naW5WYWxpZGF0aW9uPih0aGlzLnBhZ2UsIHZhbGlkYXRlVXJsLCB2YWxpZGF0ZVJlcXVlc3QpO1xuICAgIGlmICghdmFsaWRhdGVSZXN1bHQgfHwgIXZhbGlkYXRlUmVzdWx0LkhlYWRlciB8fCB2YWxpZGF0ZVJlc3VsdC5IZWFkZXIuU3RhdHVzICE9PSAnMScgfHwgIXZhbGlkYXRlUmVzdWx0LlZhbGlkYXRlSWREYXRhQmVhbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGVycm9yIGR1cmluZyBsb2dpbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkYXRlUmV0dXJuQ29kZSA9IHZhbGlkYXRlUmVzdWx0LlZhbGlkYXRlSWREYXRhQmVhbi5yZXR1cm5Db2RlO1xuICAgIGRlYnVnKGB1c2VyIHZhbGlkYXRlIHdpdGggcmV0dXJuIGNvZGUgJyR7dmFsaWRhdGVSZXR1cm5Db2RlfSdgKTtcbiAgICBpZiAodmFsaWRhdGVSZXR1cm5Db2RlID09PSAnMScpIHtcbiAgICAgIGNvbnN0IHsgdXNlck5hbWUgfSA9IHZhbGlkYXRlUmVzdWx0LlZhbGlkYXRlSWREYXRhQmVhbjtcblxuICAgICAgY29uc3QgbG9naW5VcmwgPSBgJHt0aGlzLnNlcnZpY2VzVXJsfT9yZXFOYW1lPXBlcmZvcm1Mb2dvbklgO1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgS29kTWlzaHRhbWVzaDogdXNlck5hbWUsXG4gICAgICAgIE1pc3BhclppaHV5OiBjcmVkZW50aWFscy5pZCxcbiAgICAgICAgU2lzbWE6IGNyZWRlbnRpYWxzLnBhc3N3b3JkLFxuICAgICAgICBjYXJkU3VmZml4OiBjcmVkZW50aWFscy5jYXJkNkRpZ2l0cyxcbiAgICAgICAgY291bnRyeUNvZGU6IENPVU5UUllfQ09ERSxcbiAgICAgICAgaWRUeXBlOiBJRF9UWVBFLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGxvZ2luUmVzdWx0ID0gYXdhaXQgZmV0Y2hQb3N0V2l0aGluUGFnZTx7c3RhdHVzOiBzdHJpbmd9Pih0aGlzLnBhZ2UsIGxvZ2luVXJsLCByZXF1ZXN0KTtcbiAgICAgIGRlYnVnKGB1c2VyIGxvZ2luIHdpdGggc3RhdHVzICcke2xvZ2luUmVzdWx0Py5zdGF0dXN9J2ApO1xuXG4gICAgICBpZiAobG9naW5SZXN1bHQgJiYgbG9naW5SZXN1bHQuc3RhdHVzID09PSAnMScpIHtcbiAgICAgICAgdGhpcy5lbWl0UHJvZ3Jlc3MoU2NyYXBlclByb2dyZXNzVHlwZXMuTG9naW5TdWNjZXNzKTtcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuICAgICAgfVxuXG4gICAgICBpZiAobG9naW5SZXN1bHQgJiYgbG9naW5SZXN1bHQuc3RhdHVzID09PSAnMycpIHtcbiAgICAgICAgdGhpcy5lbWl0UHJvZ3Jlc3MoU2NyYXBlclByb2dyZXNzVHlwZXMuQ2hhbmdlUGFzc3dvcmQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgIGVycm9yVHlwZTogU2NyYXBlckVycm9yVHlwZXMuQ2hhbmdlUGFzc3dvcmQsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZW1pdFByb2dyZXNzKFNjcmFwZXJQcm9ncmVzc1R5cGVzLkxvZ2luRmFpbGVkKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBlcnJvclR5cGU6IFNjcmFwZXJFcnJvclR5cGVzLkludmFsaWRQYXNzd29yZCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlUmV0dXJuQ29kZSA9PT0gJzQnKSB7XG4gICAgICB0aGlzLmVtaXRQcm9ncmVzcyhTY3JhcGVyUHJvZ3Jlc3NUeXBlcy5DaGFuZ2VQYXNzd29yZCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgZXJyb3JUeXBlOiBTY3JhcGVyRXJyb3JUeXBlcy5DaGFuZ2VQYXNzd29yZCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0UHJvZ3Jlc3MoU2NyYXBlclByb2dyZXNzVHlwZXMuTG9naW5GYWlsZWQpO1xuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgIGVycm9yVHlwZTogU2NyYXBlckVycm9yVHlwZXMuSW52YWxpZFBhc3N3b3JkLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBmZXRjaERhdGEoKSB7XG4gICAgY29uc3QgZGVmYXVsdFN0YXJ0TW9tZW50ID0gbW9tZW50KCkuc3VidHJhY3QoMSwgJ3llYXJzJyk7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5vcHRpb25zLnN0YXJ0RGF0ZSB8fCBkZWZhdWx0U3RhcnRNb21lbnQudG9EYXRlKCk7XG4gICAgY29uc3Qgc3RhcnRNb21lbnQgPSBtb21lbnQubWF4KGRlZmF1bHRTdGFydE1vbWVudCwgbW9tZW50KHN0YXJ0RGF0ZSkpO1xuXG4gICAgcmV0dXJuIGZldGNoQWxsVHJhbnNhY3Rpb25zKHRoaXMucGFnZSwge1xuICAgICAgLi4udGhpcy5vcHRpb25zLFxuICAgICAgc2VydmljZXNVcmw6IHRoaXMuc2VydmljZXNVcmwsXG4gICAgICBjb21wYW55Q29kZTogdGhpcy5jb21wYW55Q29kZSxcbiAgICB9LCBzdGFydE1vbWVudCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSXNyYWNhcmRBbWV4QmFzZVNjcmFwZXI7XG4iXX0=
|
|
396
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9iYXNlLWlzcmFjYXJkLWFtZXgudHMiXSwibmFtZXMiOlsiQ09VTlRSWV9DT0RFIiwiSURfVFlQRSIsIklOU1RBTExNRU5UU19LRVlXT1JEIiwiREFURV9GT1JNQVQiLCJkZWJ1ZyIsImdldEFjY291bnRzVXJsIiwic2VydmljZXNVcmwiLCJtb250aE1vbWVudCIsImJpbGxpbmdEYXRlIiwiZm9ybWF0IiwicXVlcnlQYXJhbXMiLCJyZXFOYW1lIiwiYWN0aW9uQ29kZSIsImZldGNoQWNjb3VudHMiLCJwYWdlIiwiZGF0YVVybCIsImRhdGFSZXN1bHQiLCJfIiwiZ2V0IiwiRGFzaGJvYXJkTW9udGhCZWFuIiwiY2FyZHNDaGFyZ2VzIiwibWFwIiwiY2FyZENoYXJnZSIsImluZGV4IiwicGFyc2VJbnQiLCJjYXJkSW5kZXgiLCJhY2NvdW50TnVtYmVyIiwiY2FyZE51bWJlciIsInByb2Nlc3NlZERhdGUiLCJ0b0lTT1N0cmluZyIsImdldFRyYW5zYWN0aW9uc1VybCIsIm1vbnRoIiwieWVhciIsIm1vbnRoU3RyIiwidG9TdHJpbmciLCJyZXF1aXJlZERhdGUiLCJjb252ZXJ0Q3VycmVuY3kiLCJjdXJyZW5jeVN0ciIsIlNIRUtFTF9DVVJSRU5DWV9LRVlXT1JEIiwiQUxUX1NIRUtFTF9DVVJSRU5DWSIsIlNIRUtFTF9DVVJSRU5DWSIsImdldEluc3RhbGxtZW50c0luZm8iLCJ0eG4iLCJtb3JlSW5mbyIsImluY2x1ZGVzIiwidW5kZWZpbmVkIiwibWF0Y2hlcyIsIm1hdGNoIiwibGVuZ3RoIiwibnVtYmVyIiwidG90YWwiLCJnZXRUcmFuc2FjdGlvblR5cGUiLCJUcmFuc2FjdGlvblR5cGVzIiwiSW5zdGFsbG1lbnRzIiwiTm9ybWFsIiwiY29udmVydFRyYW5zYWN0aW9ucyIsInR4bnMiLCJmaWx0ZXJlZFR4bnMiLCJmaWx0ZXIiLCJkZWFsU3VtVHlwZSIsInZvdWNoZXJOdW1iZXJSYXR6Iiwidm91Y2hlck51bWJlclJhdHpPdXRib3VuZCIsImlzT3V0Ym91bmQiLCJkZWFsU3VtT3V0Ym91bmQiLCJ0eG5EYXRlU3RyIiwiZnVsbFB1cmNoYXNlRGF0ZU91dGJvdW5kIiwiZnVsbFB1cmNoYXNlRGF0ZSIsInR4bk1vbWVudCIsImN1cnJlbnRQcm9jZXNzZWREYXRlIiwiZnVsbFBheW1lbnREYXRlIiwicmVzdWx0IiwidHlwZSIsImlkZW50aWZpZXIiLCJkYXRlIiwib3JpZ2luYWxBbW91bnQiLCJkZWFsU3VtIiwib3JpZ2luYWxDdXJyZW5jeSIsImN1cnJlbmN5SWQiLCJjaGFyZ2VkQW1vdW50IiwicGF5bWVudFN1bU91dGJvdW5kIiwicGF5bWVudFN1bSIsImRlc2NyaXB0aW9uIiwiZnVsbFN1cHBsaWVyTmFtZU91dGJvdW5kIiwiZnVsbFN1cHBsaWVyTmFtZUhlYiIsIm1lbW8iLCJpbnN0YWxsbWVudHMiLCJzdGF0dXMiLCJUcmFuc2FjdGlvblN0YXR1c2VzIiwiQ29tcGxldGVkIiwiZmV0Y2hUcmFuc2FjdGlvbnMiLCJvcHRpb25zIiwic3RhcnRNb21lbnQiLCJhY2NvdW50cyIsIkNhcmRzVHJhbnNhY3Rpb25zTGlzdEJlYW4iLCJhY2NvdW50VHhucyIsImZvckVhY2giLCJhY2NvdW50IiwidHhuR3JvdXBzIiwiYWxsVHhucyIsInR4bkdyb3VwIiwidHhuSXNyYWVsIiwicHVzaCIsInR4bkFicm9hZCIsImNvbWJpbmVJbnN0YWxsbWVudHMiLCJvdXRwdXREYXRhIiwiZW5hYmxlVHJhbnNhY3Rpb25zRmlsdGVyQnlEYXRlIiwiZ2V0VHJhbnNhY3Rpb25FeHRyYURldGFpbHMiLCJhY2NvdW50SW5kZXgiLCJ0cmFuc2FjdGlvbiIsIm1vZWRDaGl1diIsIkNhcmRJbmRleCIsInNob3ZhclJhdHoiLCJnZXRFeHRyYVNjcmFwVHJhbnNhY3Rpb24iLCJkYXRhIiwicmF3Q2F0ZWdvcnkiLCJjYXRlZ29yeSIsInRyaW0iLCJnZXRFeHRyYVNjcmFwVHJhbnNhY3Rpb25zIiwiYWNjb3VudFdpdGhJbmRleCIsInByb21pc2VzIiwidCIsIlByb21pc2UiLCJhbGwiLCJnZXRFeHRyYVNjcmFwQWNjb3VudCIsImFjY291bnRNYXAiLCJPYmplY3QiLCJrZXlzIiwiYSIsInJlZHVjZSIsIm0iLCJ4IiwiZ2V0RXh0cmFTY3JhcCIsImFjY291bnRzV2l0aEluZGV4IiwiYWxsTW9udGhzIiwiYWN0aW9ucyIsImkiLCJmZXRjaEFsbFRyYW5zYWN0aW9ucyIsImZ1dHVyZU1vbnRoc1RvU2NyYXBlIiwicmVzdWx0cyIsImZpbmFsUmVzdWx0IiwiYWRkaXRpb25hbFRyYW5zYWN0aW9uSW5mb3JtYXRpb24iLCJjb21iaW5lZFR4bnMiLCJ0eG5zRm9yQWNjb3VudCIsInRvQmVBZGRlZFR4bnMiLCJzdWNjZXNzIiwiSXNyYWNhcmRBbWV4QmFzZVNjcmFwZXIiLCJCYXNlU2NyYXBlcldpdGhCcm93c2VyIiwiY29uc3RydWN0b3IiLCJiYXNlVXJsIiwiY29tcGFueUNvZGUiLCJsb2dpbiIsImNyZWRlbnRpYWxzIiwic2V0UmVxdWVzdEludGVyY2VwdGlvbiIsIm9uIiwicmVxdWVzdCIsInVybCIsImFib3J0IiwiY29udGludWUiLCJuYXZpZ2F0ZVRvIiwiZW1pdFByb2dyZXNzIiwiU2NyYXBlclByb2dyZXNzVHlwZXMiLCJMb2dnaW5nSW4iLCJ2YWxpZGF0ZVVybCIsInZhbGlkYXRlUmVxdWVzdCIsImlkIiwiY2FyZFN1ZmZpeCIsImNhcmQ2RGlnaXRzIiwiY291bnRyeUNvZGUiLCJpZFR5cGUiLCJjaGVja0xldmVsIiwidmFsaWRhdGVSZXN1bHQiLCJIZWFkZXIiLCJTdGF0dXMiLCJWYWxpZGF0ZUlkRGF0YUJlYW4iLCJFcnJvciIsInZhbGlkYXRlUmV0dXJuQ29kZSIsInJldHVybkNvZGUiLCJ1c2VyTmFtZSIsImxvZ2luVXJsIiwiS29kTWlzaHRhbWVzaCIsIk1pc3BhclppaHV5IiwiU2lzbWEiLCJwYXNzd29yZCIsImxvZ2luUmVzdWx0IiwiTG9naW5TdWNjZXNzIiwiQ2hhbmdlUGFzc3dvcmQiLCJlcnJvclR5cGUiLCJTY3JhcGVyRXJyb3JUeXBlcyIsIkxvZ2luRmFpbGVkIiwiSW52YWxpZFBhc3N3b3JkIiwiZmV0Y2hEYXRhIiwiZGVmYXVsdFN0YXJ0TW9tZW50Iiwic3VidHJhY3QiLCJzdGFydERhdGUiLCJ0b0RhdGUiLCJtb21lbnQiLCJtYXgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFLQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFFQTs7Ozs7Ozs7OztBQUVBLE1BQU1BLFlBQVksR0FBRyxLQUFyQjtBQUNBLE1BQU1DLE9BQU8sR0FBRyxHQUFoQjtBQUNBLE1BQU1DLG9CQUFvQixHQUFHLE9BQTdCO0FBRUEsTUFBTUMsV0FBVyxHQUFHLFlBQXBCO0FBRUEsTUFBTUMsS0FBSyxHQUFHLHFCQUFTLG9CQUFULENBQWQ7O0FBc0VBLFNBQVNDLGNBQVQsQ0FBd0JDLFdBQXhCLEVBQTZDQyxXQUE3QyxFQUFrRTtBQUNoRSxRQUFNQyxXQUFXLEdBQUdELFdBQVcsQ0FBQ0UsTUFBWixDQUFtQixZQUFuQixDQUFwQjtBQUNBLFNBQU8sdUJBQVNILFdBQVQsRUFBc0I7QUFDM0JJLElBQUFBLFdBQVcsRUFBRTtBQUNYQyxNQUFBQSxPQUFPLEVBQUUsZ0JBREU7QUFFWEMsTUFBQUEsVUFBVSxFQUFFLEdBRkQ7QUFHWEosTUFBQUEsV0FIVztBQUlYQyxNQUFBQSxNQUFNLEVBQUU7QUFKRztBQURjLEdBQXRCLENBQVA7QUFRRDs7QUFFRCxlQUFlSSxhQUFmLENBQTZCQyxJQUE3QixFQUF5Q1IsV0FBekMsRUFBOERDLFdBQTlELEVBQThHO0FBQzVHLFFBQU1RLE9BQU8sR0FBR1YsY0FBYyxDQUFDQyxXQUFELEVBQWNDLFdBQWQsQ0FBOUI7QUFDQSxRQUFNUyxVQUFVLEdBQUcsTUFBTSwrQkFBc0RGLElBQXRELEVBQTREQyxPQUE1RCxDQUF6Qjs7QUFDQSxNQUFJQyxVQUFVLElBQUlDLGdCQUFFQyxHQUFGLENBQU1GLFVBQU4sRUFBa0IsZUFBbEIsTUFBdUMsR0FBckQsSUFBNERB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QUFBQSxPQUFPLEVBQUUsS0FESjtBQUVMMEMsUUFBQUEsU0FBUyxFQUFFQywwQkFBa0JGO0FBRnhCLE9BQVA7QUFJRDs7QUFFRCxTQUFLMUIsWUFBTCxDQUFrQkMsa0NBQXFCNEIsV0FBdkM7QUFDQSxXQUFPO0FBQ0w1QyxNQUFBQSxPQUFPLEVBQUUsS0FESjtBQUVMMEMsTUFBQUEsU0FBUyxFQUFFQywwQkFBa0JFO0FBRnhCLEtBQVA7QUFJRDs7QUFFRCxRQUFNQyxTQUFOLEdBQWtCO0FBQ2hCLFVBQU1DLGtCQUFrQixHQUFHLHVCQUFTQyxRQUFULENBQWtCLENBQWxCLEVBQXFCLE9BQXJCLENBQTNCO0FBQ0EsVUFBTUMsU0FBUyxHQUFHLEtBQUt2RyxPQUFMLENBQWF1RyxTQUFiLElBQTBCRixrQkFBa0IsQ0FBQ0csTUFBbkIsRUFBNUM7O0FBQ0EsVUFBTXZHLFdBQVcsR0FBR3dHLGdCQUFPQyxHQUFQLENBQVdMLGtCQUFYLEVBQStCLHFCQUFPRSxTQUFQLENBQS9CLENBQXBCOztBQUVBLFdBQU96RCxvQkFBb0IsQ0FBQyxLQUFLMUgsSUFBTixvQkFDdEIsS0FBSzRFLE9BRGlCO0FBRXpCcEYsTUFBQUEsV0FBVyxFQUFFLEtBQUtBLFdBRk87QUFHekIrSSxNQUFBQSxXQUFXLEVBQUUsS0FBS0E7QUFITyxRQUl4QjFELFdBSndCLENBQTNCO0FBS0Q7O0FBM0dzRjs7ZUE4RzFFc0QsdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGJ1aWxkVXJsIGZyb20gJ2J1aWxkLXVybCc7XG5pbXBvcnQgbW9tZW50LCB7IE1vbWVudCB9IGZyb20gJ21vbWVudCc7XG5cbmltcG9ydCB7IFBhZ2UgfSBmcm9tICdwdXBwZXRlZXInO1xuaW1wb3J0IHsgQmFzZVNjcmFwZXJXaXRoQnJvd3NlciB9IGZyb20gJy4vYmFzZS1zY3JhcGVyLXdpdGgtYnJvd3Nlcic7XG5pbXBvcnQgeyBmZXRjaEdldFdpdGhpblBhZ2UsIGZldGNoUG9zdFdpdGhpblBhZ2UgfSBmcm9tICcuLi9oZWxwZXJzL2ZldGNoJztcbmltcG9ydCB7XG4gIFNIRUtFTF9DVVJSRU5DWV9LRVlXT1JELFxuICBTSEVLRUxfQ1VSUkVOQ1ksXG4gIEFMVF9TSEVLRUxfQ1VSUkVOQ1ksXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgZ2V0QWxsTW9udGhNb21lbnRzIGZyb20gJy4uL2hlbHBlcnMvZGF0ZXMnO1xuaW1wb3J0IHsgZml4SW5zdGFsbG1lbnRzLCBmaWx0ZXJPbGRUcmFuc2FjdGlvbnMgfSBmcm9tICcuLi9oZWxwZXJzL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQge1xuICBUcmFuc2FjdGlvbnNBY2NvdW50LCBUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25JbnN0YWxsbWVudHMsXG4gIFRyYW5zYWN0aW9uU3RhdHVzZXMsIFRyYW5zYWN0aW9uVHlwZXMsXG59IGZyb20gJy4uL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQgeyBnZXREZWJ1ZyB9IGZyb20gJy4uL2hlbHBlcnMvZGVidWcnO1xuaW1wb3J0IHsgcnVuU2VyaWFsIH0gZnJvbSAnLi4vaGVscGVycy93YWl0aW5nJztcbmltcG9ydCB7IFNjcmFwZXJFcnJvclR5cGVzIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsgU2NyYXBlclNjcmFwaW5nUmVzdWx0LCBTY3JhcGVyT3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlJztcbmltcG9ydCB7IFNjcmFwZXJQcm9ncmVzc1R5cGVzIH0gZnJvbSAnLi4vZGVmaW5pdGlvbnMnO1xuXG5jb25zdCBDT1VOVFJZX0NPREUgPSAnMjEyJztcbmNvbnN0IElEX1RZUEUgPSAnMSc7XG5jb25zdCBJTlNUQUxMTUVOVFNfS0VZV09SRCA9ICfXqtep15zXldedJztcblxuY29uc3QgREFURV9GT1JNQVQgPSAnREQvTU0vWVlZWSc7XG5cbmNvbnN0IGRlYnVnID0gZ2V0RGVidWcoJ2Jhc2UtaXNyYWNhcmQtYW1leCcpO1xuXG5pbnRlcmZhY2UgRXh0ZW5kZWRTY3JhcGVyT3B0aW9ucyBleHRlbmRzIFNjcmFwZXJPcHRpb25zIHtcbiAgc2VydmljZXNVcmw6IHN0cmluZztcbiAgY29tcGFueUNvZGU6IHN0cmluZztcbn1cblxudHlwZSBTY3JhcGVkQWNjb3VudHNXaXRoSW5kZXggPSBSZWNvcmQ8c3RyaW5nLCBUcmFuc2FjdGlvbnNBY2NvdW50ICYgeyBpbmRleDogbnVtYmVyIH0+O1xuXG5pbnRlcmZhY2UgU2NyYXBlZFRyYW5zYWN0aW9uIHtcbiAgZGVhbFN1bVR5cGU6IHN0cmluZztcbiAgdm91Y2hlck51bWJlclJhdHpPdXRib3VuZDogc3RyaW5nO1xuICB2b3VjaGVyTnVtYmVyUmF0ejogc3RyaW5nO1xuICBtb3JlSW5mbz86IHN0cmluZztcbiAgZGVhbFN1bU91dGJvdW5kOiBib29sZWFuO1xuICBjdXJyZW5jeUlkOiBzdHJpbmc7XG4gIGRlYWxTdW06IG51bWJlcjtcbiAgZnVsbFBheW1lbnREYXRlPzogc3RyaW5nO1xuICBmdWxsUHVyY2hhc2VEYXRlPzogc3RyaW5nO1xuICBmdWxsUHVyY2hhc2VEYXRlT3V0Ym91bmQ/OiBzdHJpbmc7XG4gIGZ1bGxTdXBwbGllck5hbWVIZWI6IHN0cmluZztcbiAgZnVsbFN1cHBsaWVyTmFtZU91dGJvdW5kOiBzdHJpbmc7XG4gIHBheW1lbnRTdW06IG51bWJlcjtcbiAgcGF5bWVudFN1bU91dGJvdW5kOiBudW1iZXI7XG59XG5cblxuaW50ZXJmYWNlIFNjcmFwZWRBY2NvdW50IHtcbiAgaW5kZXg6IG51bWJlcjtcbiAgYWNjb3VudE51bWJlcjogc3RyaW5nO1xuICBwcm9jZXNzZWREYXRlOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTY3JhcGVkTG9naW5WYWxpZGF0aW9uIHtcbiAgSGVhZGVyOiB7XG4gICAgU3RhdHVzOiBzdHJpbmc7XG4gIH07XG4gIFZhbGlkYXRlSWREYXRhQmVhbj86IHtcbiAgICB1c2VyTmFtZT86IHN0cmluZztcbiAgICByZXR1cm5Db2RlOiBzdHJpbmc7XG4gIH07XG59XG5cbmludGVyZmFjZSBTY3JhcGVkQWNjb3VudHNXaXRoaW5QYWdlUmVzcG9uc2Uge1xuICBIZWFkZXI6IHtcbiAgICBTdGF0dXM6IHN0cmluZztcbiAgfTtcbiAgRGFzaGJvYXJkTW9udGhCZWFuPzoge1xuICAgIGNhcmRzQ2hhcmdlczoge1xuICAgICAgY2FyZEluZGV4OiBzdHJpbmc7XG4gICAgICBjYXJkTnVtYmVyOiBzdHJpbmc7XG4gICAgICBiaWxsaW5nRGF0ZTogc3RyaW5nO1xuICAgIH1bXTtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIFNjcmFwZWRDdXJyZW50Q2FyZFRyYW5zYWN0aW9ucyB7XG4gIHR4bklzcmFlbD86IFNjcmFwZWRUcmFuc2FjdGlvbltdO1xuICB0eG5BYnJvYWQ/OiBTY3JhcGVkVHJhbnNhY3Rpb25bXTtcbn1cblxuaW50ZXJmYWNlIFNjcmFwZWRUcmFuc2FjdGlvbkRhdGEge1xuICBIZWFkZXI/OiB7XG4gICAgU3RhdHVzOiBzdHJpbmc7XG4gIH07XG4gIENhcmRzVHJhbnNhY3Rpb25zTGlzdEJlYW4/OiBSZWNvcmQ8c3RyaW5nLCB7XG4gICAgQ3VycmVudENhcmRUcmFuc2FjdGlvbnM6IFNjcmFwZWRDdXJyZW50Q2FyZFRyYW5zYWN0aW9uc1tdO1xuICB9Pjtcbn1cblxuZnVuY3Rpb24gZ2V0QWNjb3VudHNVcmwoc2VydmljZXNVcmw6IHN0cmluZywgbW9udGhNb21lbnQ6IE1vbWVudCkge1xuICBjb25zdCBiaWxsaW5nRGF0ZSA9IG1vbnRoTW9tZW50LmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICByZXR1cm4gYnVpbGRVcmwoc2VydmljZXNVcmwsIHtcbiAgICBxdWVyeVBhcmFtczoge1xuICAgICAgcmVxTmFtZTogJ0Rhc2hib2FyZE1vbnRoJyxcbiAgICAgIGFjdGlvbkNvZGU6ICcwJyxcbiAgICAgIGJpbGxpbmdEYXRlLFxuICAgICAgZm9ybWF0OiAnSnNvbicsXG4gICAgfSxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQWNjb3VudHMocGFnZTogUGFnZSwgc2VydmljZXNVcmw6IHN0cmluZywgbW9udGhNb21lbnQ6IE1vbWVudCk6IFByb21pc2U8U2NyYXBlZEFjY291bnRbXT4ge1xuICBjb25zdCBkYXRhVXJsID0gZ2V0QWNjb3VudHNVcmwoc2VydmljZXNVcmwsIG1vbnRoTW9tZW50KTtcbiAgY29uc3QgZGF0YVJlc3VsdCA9IGF3YWl0IGZldGNoR2V0V2l0aGluUGFnZTxTY3JhcGVkQWNjb3VudHNXaXRoaW5QYWdlUmVzcG9uc2U+KHBhZ2UsIGRhdGFVcmwpO1xuICBpZiAoZGF0YVJlc3VsdCAmJiBfLmdldChkYXRhUmVzdWx0LCAnSGVhZGVyLlN0YXR1cycpID09PSAnMScgJiYgZGF0YVJlc3VsdC5EYXNoYm9hcmRNb250aEJlYW4pIHtcbiAgICBjb25zdCB7IGNhcmRzQ2hhcmdlcyB9ID0gZGF0YVJlc3VsdC5EYXNoYm9hcmRNb250aEJlYW47XG4gICAgaWYgKGNhcmRzQ2hhcmdlcykge1xuICAgICAgcmV0dXJuIGNhcmRzQ2hhcmdlcy5tYXAoKGNhcmRDaGFyZ2UpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpbmRleDogcGFyc2VJbnQoY2FyZENoYXJnZS5jYXJkSW5kZXgsIDEwKSxcbiAgICAgICAgICBhY2NvdW50TnVtYmVyOiBjYXJkQ2hhcmdlLmNhcmROdW1iZXIsXG4gICAgICAgICAgcHJvY2Vzc2VkRGF0ZTogbW9tZW50KGNhcmRDaGFyZ2UuYmlsbGluZ0RhdGUsIERBVEVfRk9STUFUKS50b0lTT1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBbXTtcbn1cblxuZnVuY3Rpb24gZ2V0VHJhbnNhY3Rpb25zVXJsKHNlcnZpY2VzVXJsOiBzdHJpbmcsIG1vbnRoTW9tZW50OiBNb21lbnQpIHtcbiAgY29uc3QgbW9udGggPSBtb250aE1vbWVudC5tb250aCgpICsgMTtcbiAgY29uc3QgeWVhciA9IG1vbnRoTW9tZW50LnllYXIoKTtcbiAgY29uc3QgbW9udGhTdHIgPSBtb250aCA8IDEwID8gYDAke21vbnRofWAgOiBtb250aC50b1N0cmluZygpO1xuICByZXR1cm4gYnVpbGRVcmwoc2VydmljZXNVcmwsIHtcbiAgICBxdWVyeVBhcmFtczoge1xuICAgICAgcmVxTmFtZTogJ0NhcmRzVHJhbnNhY3Rpb25zTGlzdCcsXG4gICAgICBtb250aDogbW9udGhTdHIsXG4gICAgICB5ZWFyOiBgJHt5ZWFyfWAsXG4gICAgICByZXF1aXJlZERhdGU6ICdOJyxcbiAgICB9LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gY29udmVydEN1cnJlbmN5KGN1cnJlbmN5U3RyOiBzdHJpbmcpIHtcbiAgaWYgKGN1cnJlbmN5U3RyID09PSBTSEVLRUxfQ1VSUkVOQ1lfS0VZV09SRCB8fCBjdXJyZW5jeVN0ciA9PT0gQUxUX1NIRUtFTF9DVVJSRU5DWSkge1xuICAgIHJldHVybiBTSEVLRUxfQ1VSUkVOQ1k7XG4gIH1cbiAgcmV0dXJuIGN1cnJlbmN5U3RyO1xufVxuXG5mdW5jdGlvbiBnZXRJbnN0YWxsbWVudHNJbmZvKHR4bjogU2NyYXBlZFRyYW5zYWN0aW9uKTogVHJhbnNhY3Rpb25JbnN0YWxsbWVudHMgfCB1bmRlZmluZWQge1xuICBpZiAoIXR4bi5tb3JlSW5mbyB8fCAhdHhuLm1vcmVJbmZvLmluY2x1ZGVzKElOU1RBTExNRU5UU19LRVlXT1JEKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgbWF0Y2hlcyA9IHR4bi5tb3JlSW5mby5tYXRjaCgvXFxkKy9nKTtcbiAgaWYgKCFtYXRjaGVzIHx8IG1hdGNoZXMubGVuZ3RoIDwgMikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG51bWJlcjogcGFyc2VJbnQobWF0Y2hlc1swXSwgMTApLFxuICAgIHRvdGFsOiBwYXJzZUludChtYXRjaGVzWzFdLCAxMCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uVHlwZSh0eG46IFNjcmFwZWRUcmFuc2FjdGlvbikge1xuICByZXR1cm4gZ2V0SW5zdGFsbG1lbnRzSW5mbyh0eG4pID8gVHJhbnNhY3Rpb25UeXBlcy5JbnN0YWxsbWVudHMgOiBUcmFuc2FjdGlvblR5cGVzLk5vcm1hbDtcbn1cblxuZnVuY3Rpb24gY29udmVydFRyYW5zYWN0aW9ucyh0eG5zOiBTY3JhcGVkVHJhbnNhY3Rpb25bXSwgcHJvY2Vzc2VkRGF0ZTogc3RyaW5nKTogVHJhbnNhY3Rpb25bXSB7XG4gIGNvbnN0IGZpbHRlcmVkVHhucyA9IHR4bnMuZmlsdGVyKCh0eG4pID0+IHR4bi5kZWFsU3VtVHlwZSAhPT0gJzEnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4bi52b3VjaGVyTnVtYmVyUmF0eiAhPT0gJzAwMDAwMDAwMCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHhuLnZvdWNoZXJOdW1iZXJSYXR6T3V0Ym91bmQgIT09ICcwMDAwMDAwMDAnKTtcblxuICByZXR1cm4gZmlsdGVyZWRUeG5zLm1hcCgodHhuKSA9PiB7XG4gICAgY29uc3QgaXNPdXRib3VuZCA9IHR4bi5kZWFsU3VtT3V0Ym91bmQ7XG4gICAgY29uc3QgdHhuRGF0ZVN0ciA9IGlzT3V0Ym91bmQgPyB0eG4uZnVsbFB1cmNoYXNlRGF0ZU91dGJvdW5kIDogdHhuLmZ1bGxQdXJjaGFzZURhdGU7XG4gICAgY29uc3QgdHhuTW9tZW50ID0gbW9tZW50KHR4bkRhdGVTdHIsIERBVEVfRk9STUFUKTtcblxuICAgIGNvbnN0IGN1cnJlbnRQcm9jZXNzZWREYXRlID0gdHhuLmZ1bGxQYXltZW50RGF0ZSA/XG4gICAgICBtb21lbnQodHhuLmZ1bGxQYXltZW50RGF0ZSwgREFURV9GT1JNQVQpLnRvSVNPU3RyaW5nKCkgOlxuICAgICAgcHJvY2Vzc2VkRGF0ZTtcbiAgICBjb25zdCByZXN1bHQ6IFRyYW5zYWN0aW9uID0ge1xuICAgICAgdHlwZTogZ2V0VHJhbnNhY3Rpb25UeXBlKHR4biksXG4gICAgICBpZGVudGlmaWVyOiBwYXJzZUludChpc091dGJvdW5kID8gdHhuLnZvdWNoZXJOdW1iZXJSYXR6T3V0Ym91bmQgOiB0eG4udm91Y2hlck51bWJlclJhdHosIDEwKSxcbiAgICAgIGRhdGU6IHR4bk1vbWVudC50b0lTT1N0cmluZygpLFxuICAgICAgcHJvY2Vzc2VkRGF0ZTogY3VycmVudFByb2Nlc3NlZERhdGUsXG4gICAgICBvcmlnaW5hbEFtb3VudDogaXNPdXRib3VuZCA/IC10eG4uZGVhbFN1bU91dGJvdW5kIDogLXR4bi5kZWFsU3VtLFxuICAgICAgb3JpZ2luYWxDdXJyZW5jeTogY29udmVydEN1cnJlbmN5KHR4bi5jdXJyZW5jeUlkKSxcbiAgICAgIGNoYXJnZWRBbW91bnQ6IGlzT3V0Ym91bmQgPyAtdHhuLnBheW1lbnRTdW1PdXRib3VuZCA6IC10eG4ucGF5bWVudFN1bSxcbiAgICAgIGRlc2NyaXB0aW9uOiBpc091dGJvdW5kID8gdHhuLmZ1bGxTdXBwbGllck5hbWVPdXRib3VuZCA6IHR4bi5mdWxsU3VwcGxpZXJOYW1lSGViLFxuICAgICAgbWVtbzogdHhuLm1vcmVJbmZvIHx8ICcnLFxuICAgICAgaW5zdGFsbG1lbnRzOiBnZXRJbnN0YWxsbWVudHNJbmZvKHR4bikgfHwgdW5kZWZpbmVkLFxuICAgICAgc3RhdHVzOiBUcmFuc2FjdGlvblN0YXR1c2VzLkNvbXBsZXRlZCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoVHJhbnNhY3Rpb25zKHBhZ2U6IFBhZ2UsIG9wdGlvbnM6IEV4dGVuZGVkU2NyYXBlck9wdGlvbnMsIHN0YXJ0TW9tZW50OiBNb21lbnQsIG1vbnRoTW9tZW50OiBNb21lbnQpOiBQcm9taXNlPFNjcmFwZWRBY2NvdW50c1dpdGhJbmRleD4ge1xuICBjb25zdCBhY2NvdW50cyA9IGF3YWl0IGZldGNoQWNjb3VudHMocGFnZSwgb3B0aW9ucy5zZXJ2aWNlc1VybCwgbW9udGhNb21lbnQpO1xuICBjb25zdCBkYXRhVXJsID0gZ2V0VHJhbnNhY3Rpb25zVXJsKG9wdGlvbnMuc2VydmljZXNVcmwsIG1vbnRoTW9tZW50KTtcbiAgY29uc3QgZGF0YVJlc3VsdCA9IGF3YWl0IGZldGNoR2V0V2l0aGluUGFnZTxTY3JhcGVkVHJhbnNhY3Rpb25EYXRhPihwYWdlLCBkYXRhVXJsKTtcbiAgaWYgKGRhdGFSZXN1bHQgJiYgXy5nZXQoZGF0YVJlc3VsdCwgJ0hlYWRlci5TdGF0dXMnKSA9PT0gJzEnICYmIGRhdGFSZXN1bHQuQ2FyZHNUcmFuc2FjdGlvbnNMaXN0QmVhbikge1xuICAgIGNvbnN0IGFjY291bnRUeG5zOiBTY3JhcGVkQWNjb3VudHNXaXRoSW5kZXggPSB7fTtcbiAgICBhY2NvdW50cy5mb3JFYWNoKChhY2NvdW50KSA9PiB7XG4gICAgICBjb25zdCB0eG5Hcm91cHM6IFNjcmFwZWRDdXJyZW50Q2FyZFRyYW5zYWN0aW9uc1tdID0gXy5nZXQoZGF0YVJlc3VsdCwgYENhcmRzVHJhbnNhY3Rpb25zTGlzdEJlYW4uSW5kZXgke2FjY291bnQuaW5kZXh9LkN1cnJlbnRDYXJkVHJhbnNhY3Rpb25zYCk7XG4gICAgICBpZiAodHhuR3JvdXBzKSB7XG4gICAgICAgIGxldCBhbGxUeG5zOiBUcmFuc2FjdGlvbltdID0gW107XG4gICAgICAgIHR4bkdyb3Vwcy5mb3JFYWNoKCh0eG5Hcm91cCkgPT4ge1xuICAgICAgICAgIGlmICh0eG5Hcm91cC50eG5Jc3JhZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IHR4bnMgPSBjb252ZXJ0VHJhbnNhY3Rpb25zKHR4bkdyb3VwLnR4bklzcmFlbCwgYWNjb3VudC5wcm9jZXNzZWREYXRlKTtcbiAgICAgICAgICAgIGFsbFR4bnMucHVzaCguLi50eG5zKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR4bkdyb3VwLnR4bkFicm9hZCkge1xuICAgICAgICAgICAgY29uc3QgdHhucyA9IGNvbnZlcnRUcmFuc2FjdGlvbnModHhuR3JvdXAudHhuQWJyb2FkLCBhY2NvdW50LnByb2Nlc3NlZERhdGUpO1xuICAgICAgICAgICAgYWxsVHhucy5wdXNoKC4uLnR4bnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLmNvbWJpbmVJbnN0YWxsbWVudHMpIHtcbiAgICAgICAgICBhbGxUeG5zID0gZml4SW5zdGFsbG1lbnRzKGFsbFR4bnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLm91dHB1dERhdGE/LmVuYWJsZVRyYW5zYWN0aW9uc0ZpbHRlckJ5RGF0ZSA/PyB0cnVlKSB7XG4gICAgICAgICAgYWxsVHhucyA9IGZpbHRlck9sZFRyYW5zYWN0aW9ucyhhbGxUeG5zLCBzdGFydE1vbWVudCwgb3B0aW9ucy5jb21iaW5lSW5zdGFsbG1lbnRzIHx8IGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBhY2NvdW50VHhuc1thY2NvdW50LmFjY291bnROdW1iZXJdID0ge1xuICAgICAgICAgIGFjY291bnROdW1iZXI6IGFjY291bnQuYWNjb3VudE51bWJlcixcbiAgICAgICAgICBpbmRleDogYWNjb3VudC5pbmRleCxcbiAgICAgICAgICB0eG5zOiBhbGxUeG5zLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBhY2NvdW50VHhucztcbiAgfVxuXG4gIHJldHVybiB7fTtcbn1cblxuZnVuY3Rpb24gZ2V0VHJhbnNhY3Rpb25FeHRyYURldGFpbHMoc2VydmljZXNVcmw6IHN0cmluZywgbW9udGg6IE1vbWVudCwgYWNjb3VudEluZGV4OiBudW1iZXIsIHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbik6IHN0cmluZyB7XG4gIGNvbnN0IG1vZWRDaGl1diA9IG1vbnRoLmZvcm1hdCgnTU1ZWVlZJyk7XG4gIHJldHVybiBidWlsZFVybChzZXJ2aWNlc1VybCwge1xuICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICByZXFOYW1lOiAnUGlydGV5SXNrYV8yMDQnLFxuICAgICAgQ2FyZEluZGV4OiBhY2NvdW50SW5kZXgudG9TdHJpbmcoKSxcbiAgICAgIHNob3ZhclJhdHo6IHRyYW5zYWN0aW9uLmlkZW50aWZpZXIhLnRvU3RyaW5nKCksXG4gICAgICBtb2VkQ2hpdXYsXG4gICAgfSxcbiAgfSk7XG59XG5hc3luYyBmdW5jdGlvbiBnZXRFeHRyYVNjcmFwVHJhbnNhY3Rpb24ocGFnZTogUGFnZSwgb3B0aW9uczogRXh0ZW5kZWRTY3JhcGVyT3B0aW9ucywgbW9udGg6IE1vbWVudCwgYWNjb3VudEluZGV4OiBudW1iZXIsIHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbik6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgY29uc3QgZGF0YVVybCA9IGdldFRyYW5zYWN0aW9uRXh0cmFEZXRhaWxzKG9wdGlvbnMuc2VydmljZXNVcmwsIG1vbnRoLCBhY2NvdW50SW5kZXgsIHRyYW5zYWN0aW9uKTtcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoR2V0V2l0aGluUGFnZTxTY3JhcGVkVHJhbnNhY3Rpb25EYXRhPihwYWdlLCBkYXRhVXJsKTtcbiAgY29uc3QgcmF3Q2F0ZWdvcnkgPSBfLmdldChkYXRhLCAnUGlydGV5SXNrYV8yMDRCZWFuLnNlY3RvcicpO1xuICByZXR1cm4ge1xuICAgIC4uLnRyYW5zYWN0aW9uLFxuICAgIGNhdGVnb3J5OiByYXdDYXRlZ29yeS50cmltKCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEV4dHJhU2NyYXBUcmFuc2FjdGlvbnMoYWNjb3VudFdpdGhJbmRleDogVHJhbnNhY3Rpb25zQWNjb3VudCAmIHsgaW5kZXg6IG51bWJlciB9LCBwYWdlOiBQYWdlLCBvcHRpb25zOiBFeHRlbmRlZFNjcmFwZXJPcHRpb25zLCBtb250aDogbW9tZW50Lk1vbWVudCk6IFByb21pc2U8VHJhbnNhY3Rpb25bXT4ge1xuICBjb25zdCBwcm9taXNlcyA9IGFjY291bnRXaXRoSW5kZXgudHhuc1xuICAgIC5tYXAoKHQpID0+IGdldEV4dHJhU2NyYXBUcmFuc2FjdGlvbihwYWdlLCBvcHRpb25zLCBtb250aCwgYWNjb3VudFdpdGhJbmRleC5pbmRleCwgdCkpO1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRFeHRyYVNjcmFwQWNjb3VudChwYWdlOiBQYWdlLCBvcHRpb25zOiBFeHRlbmRlZFNjcmFwZXJPcHRpb25zLCBhY2NvdW50TWFwOiBTY3JhcGVkQWNjb3VudHNXaXRoSW5kZXgsIG1vbnRoOiBtb21lbnQuTW9tZW50KTogUHJvbWlzZTxTY3JhcGVkQWNjb3VudHNXaXRoSW5kZXg+IHtcbiAgY29uc3QgcHJvbWlzZXMgPSBPYmplY3Qua2V5cyhhY2NvdW50TWFwKVxuICAgIC5tYXAoYXN5bmMgKGEpID0+ICh7XG4gICAgICAuLi5hY2NvdW50TWFwW2FdLFxuICAgICAgdHhuczogYXdhaXQgZ2V0RXh0cmFTY3JhcFRyYW5zYWN0aW9ucyhhY2NvdW50TWFwW2FdLCBwYWdlLCBvcHRpb25zLCBtb250aCksXG4gICAgfSkpO1xuICBjb25zdCBhY2NvdW50cyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgcmV0dXJuIGFjY291bnRzLnJlZHVjZSgobSwgeCkgPT4gKHsgLi4ubSwgW3guYWNjb3VudE51bWJlcl06IHggfSksIHt9KTtcbn1cblxuZnVuY3Rpb24gZ2V0RXh0cmFTY3JhcChhY2NvdW50c1dpdGhJbmRleDogU2NyYXBlZEFjY291bnRzV2l0aEluZGV4W10sIHBhZ2U6IFBhZ2UsIG9wdGlvbnM6IEV4dGVuZGVkU2NyYXBlck9wdGlvbnMsIGFsbE1vbnRoczogbW9tZW50Lk1vbWVudFtdKTogUHJvbWlzZTxTY3JhcGVkQWNjb3VudHNXaXRoSW5kZXhbXT4ge1xuICBjb25zdCBhY3Rpb25zID0gYWNjb3VudHNXaXRoSW5kZXgubWFwKChhLCBpKSA9PiAoKSA9PiBnZXRFeHRyYVNjcmFwQWNjb3VudChwYWdlLCBvcHRpb25zLCBhLCBhbGxNb250aHNbaV0pKTtcbiAgcmV0dXJuIHJ1blNlcmlhbChhY3Rpb25zKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hBbGxUcmFuc2FjdGlvbnMocGFnZTogUGFnZSwgb3B0aW9uczogRXh0ZW5kZWRTY3JhcGVyT3B0aW9ucywgc3RhcnRNb21lbnQ6IE1vbWVudCkge1xuICBjb25zdCBmdXR1cmVNb250aHNUb1NjcmFwZSA9IG9wdGlvbnMuZnV0dXJlTW9udGhzVG9TY3JhcGUgPz8gMTtcbiAgY29uc3QgYWxsTW9udGhzID0gZ2V0QWxsTW9udGhNb21lbnRzKHN0YXJ0TW9tZW50LCBmdXR1cmVNb250aHNUb1NjcmFwZSk7XG4gIGNvbnN0IHJlc3VsdHM6IFNjcmFwZWRBY2NvdW50c1dpdGhJbmRleFtdID0gYXdhaXQgUHJvbWlzZS5hbGwoYWxsTW9udGhzLm1hcChhc3luYyAobW9udGhNb21lbnQpID0+IHtcbiAgICByZXR1cm4gZmV0Y2hUcmFuc2FjdGlvbnMocGFnZSwgb3B0aW9ucywgc3RhcnRNb21lbnQsIG1vbnRoTW9tZW50KTtcbiAgfSkpO1xuXG4gIGNvbnN0IGZpbmFsUmVzdWx0ID0gb3B0aW9ucy5hZGRpdGlvbmFsVHJhbnNhY3Rpb25JbmZvcm1hdGlvbiA/XG4gICAgYXdhaXQgZ2V0RXh0cmFTY3JhcChyZXN1bHRzLCBwYWdlLCBvcHRpb25zLCBhbGxNb250aHMpIDogcmVzdWx0cztcblxuICBjb25zdCBjb21iaW5lZFR4bnM6IFJlY29yZDxzdHJpbmcsIFRyYW5zYWN0aW9uW10+ID0ge307XG5cbiAgZmluYWxSZXN1bHQuZm9yRWFjaCgocmVzdWx0KSA9PiB7XG4gICAgT2JqZWN0LmtleXMocmVzdWx0KS5mb3JFYWNoKChhY2NvdW50TnVtYmVyKSA9PiB7XG4gICAgICBsZXQgdHhuc0ZvckFjY291bnQgPSBjb21iaW5lZFR4bnNbYWNjb3VudE51bWJlcl07XG4gICAgICBpZiAoIXR4bnNGb3JBY2NvdW50KSB7XG4gICAgICAgIHR4bnNGb3JBY2NvdW50ID0gW107XG4gICAgICAgIGNvbWJpbmVkVHhuc1thY2NvdW50TnVtYmVyXSA9IHR4bnNGb3JBY2NvdW50O1xuICAgICAgfVxuICAgICAgY29uc3QgdG9CZUFkZGVkVHhucyA9IHJlc3VsdFthY2NvdW50TnVtYmVyXS50eG5zO1xuICAgICAgY29tYmluZWRUeG5zW2FjY291bnROdW1iZXJdLnB1c2goLi4udG9CZUFkZGVkVHhucyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGNvbnN0IGFjY291bnRzID0gT2JqZWN0LmtleXMoY29tYmluZWRUeG5zKS5tYXAoKGFjY291bnROdW1iZXIpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYWNjb3VudE51bWJlcixcbiAgICAgIHR4bnM6IGNvbWJpbmVkVHhuc1thY2NvdW50TnVtYmVyXSxcbiAgICB9O1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgYWNjb3VudHMsXG4gIH07XG59XG5cbnR5cGUgU2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHMgPSB7aWQ6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgY2FyZDZEaWdpdHM6IHN0cmluZ307XG5jbGFzcyBJc3JhY2FyZEFtZXhCYXNlU2NyYXBlciBleHRlbmRzIEJhc2VTY3JhcGVyV2l0aEJyb3dzZXI8U2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHM+IHtcbiAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb21wYW55Q29kZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgc2VydmljZXNVcmw6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBTY3JhcGVyT3B0aW9ucywgYmFzZVVybDogc3RyaW5nLCBjb21wYW55Q29kZTogc3RyaW5nKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsO1xuICAgIHRoaXMuY29tcGFueUNvZGUgPSBjb21wYW55Q29kZTtcbiAgICB0aGlzLnNlcnZpY2VzVXJsID0gYCR7YmFzZVVybH0vc2VydmljZXMvUHJveHlSZXF1ZXN0SGFuZGxlci5hc2h4YDtcbiAgfVxuXG4gIGFzeW5jIGxvZ2luKGNyZWRlbnRpYWxzOiBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscyk6IFByb21pc2U8U2NyYXBlclNjcmFwaW5nUmVzdWx0PiB7XG4gICAgYXdhaXQgdGhpcy5wYWdlLnNldFJlcXVlc3RJbnRlcmNlcHRpb24odHJ1ZSk7XG4gICAgdGhpcy5wYWdlLm9uKCdyZXF1ZXN0JywgKHJlcXVlc3QpID0+IHtcbiAgICAgIGlmIChyZXF1ZXN0LnVybCgpLmluY2x1ZGVzKCdkZXRlY3Rvci1kb20ubWluLmpzJykpIHtcbiAgICAgICAgZGVidWcoJ2ZvcmNlIGFib3J0IGZvciByZXF1ZXN0IGRvIGRvd25sb2FkIGRldGVjdG9yLWRvbS5taW4uanMgcmVzb3VyY2UnKTtcbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxdWVzdC5jb250aW51ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGVidWcoJ25hdmlnYXRlIHRvIGxvZ2luIHBhZ2UnKTtcbiAgICBhd2FpdCB0aGlzLm5hdmlnYXRlVG8oYCR7dGhpcy5iYXNlVXJsfS9wZXJzb25hbGFyZWEvTG9naW5gKTtcblxuICAgIHRoaXMuZW1pdFByb2dyZXNzKFNjcmFwZXJQcm9ncmVzc1R5cGVzLkxvZ2dpbmdJbik7XG5cbiAgICBjb25zdCB2YWxpZGF0ZVVybCA9IGAke3RoaXMuc2VydmljZXNVcmx9P3JlcU5hbWU9VmFsaWRhdGVJZERhdGFgO1xuICAgIGNvbnN0IHZhbGlkYXRlUmVxdWVzdCA9IHtcbiAgICAgIGlkOiBjcmVkZW50aWFscy5pZCxcbiAgICAgIGNhcmRTdWZmaXg6IGNyZWRlbnRpYWxzLmNhcmQ2RGlnaXRzLFxuICAgICAgY291bnRyeUNvZGU6IENPVU5UUllfQ09ERSxcbiAgICAgIGlkVHlwZTogSURfVFlQRSxcbiAgICAgIGNoZWNrTGV2ZWw6ICcxJyxcbiAgICAgIGNvbXBhbnlDb2RlOiB0aGlzLmNvbXBhbnlDb2RlLFxuICAgIH07XG4gICAgY29uc3QgdmFsaWRhdGVSZXN1bHQgPSBhd2FpdCBmZXRjaFBvc3RXaXRoaW5QYWdlPFNjcmFwZWRMb2dpblZhbGlkYXRpb24+KHRoaXMucGFnZSwgdmFsaWRhdGVVcmwsIHZhbGlkYXRlUmVxdWVzdCk7XG4gICAgaWYgKCF2YWxpZGF0ZVJlc3VsdCB8fCAhdmFsaWRhdGVSZXN1bHQuSGVhZGVyIHx8IHZhbGlkYXRlUmVzdWx0LkhlYWRlci5TdGF0dXMgIT09ICcxJyB8fCAhdmFsaWRhdGVSZXN1bHQuVmFsaWRhdGVJZERhdGFCZWFuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gZXJyb3IgZHVyaW5nIGxvZ2luJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRhdGVSZXR1cm5Db2RlID0gdmFsaWRhdGVSZXN1bHQuVmFsaWRhdGVJZERhdGFCZWFuLnJldHVybkNvZGU7XG4gICAgZGVidWcoYHVzZXIgdmFsaWRhdGUgd2l0aCByZXR1cm4gY29kZSAnJHt2YWxpZGF0ZVJldHVybkNvZGV9J2ApO1xuICAgIGlmICh2YWxpZGF0ZVJldHVybkNvZGUgPT09ICcxJykge1xuICAgICAgY29uc3QgeyB1c2VyTmFtZSB9ID0gdmFsaWRhdGVSZXN1bHQuVmFsaWRhdGVJZERhdGFCZWFuO1xuXG4gICAgICBjb25zdCBsb2dpblVybCA9IGAke3RoaXMuc2VydmljZXNVcmx9P3JlcU5hbWU9cGVyZm9ybUxvZ29uSWA7XG4gICAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgICBLb2RNaXNodGFtZXNoOiB1c2VyTmFtZSxcbiAgICAgICAgTWlzcGFyWmlodXk6IGNyZWRlbnRpYWxzLmlkLFxuICAgICAgICBTaXNtYTogY3JlZGVudGlhbHMucGFzc3dvcmQsXG4gICAgICAgIGNhcmRTdWZmaXg6IGNyZWRlbnRpYWxzLmNhcmQ2RGlnaXRzLFxuICAgICAgICBjb3VudHJ5Q29kZTogQ09VTlRSWV9DT0RFLFxuICAgICAgICBpZFR5cGU6IElEX1RZUEUsXG4gICAgICB9O1xuICAgICAgY29uc3QgbG9naW5SZXN1bHQgPSBhd2FpdCBmZXRjaFBvc3RXaXRoaW5QYWdlPHtzdGF0dXM6IHN0cmluZ30+KHRoaXMucGFnZSwgbG9naW5VcmwsIHJlcXVlc3QpO1xuICAgICAgZGVidWcoYHVzZXIgbG9naW4gd2l0aCBzdGF0dXMgJyR7bG9naW5SZXN1bHQ/LnN0YXR1c30nYCk7XG5cbiAgICAgIGlmIChsb2dpblJlc3VsdCAmJiBsb2dpblJlc3VsdC5zdGF0dXMgPT09ICcxJykge1xuICAgICAgICB0aGlzLmVtaXRQcm9ncmVzcyhTY3JhcGVyUHJvZ3Jlc3NUeXBlcy5Mb2dpblN1Y2Nlc3MpO1xuICAgICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChsb2dpblJlc3VsdCAmJiBsb2dpblJlc3VsdC5zdGF0dXMgPT09ICczJykge1xuICAgICAgICB0aGlzLmVtaXRQcm9ncmVzcyhTY3JhcGVyUHJvZ3Jlc3NUeXBlcy5DaGFuZ2VQYXNzd29yZCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgZXJyb3JUeXBlOiBTY3JhcGVyRXJyb3JUeXBlcy5DaGFuZ2VQYXNzd29yZCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5lbWl0UHJvZ3Jlc3MoU2NyYXBlclByb2dyZXNzVHlwZXMuTG9naW5GYWlsZWQpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIGVycm9yVHlwZTogU2NyYXBlckVycm9yVHlwZXMuSW52YWxpZFBhc3N3b3JkLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVSZXR1cm5Db2RlID09PSAnNCcpIHtcbiAgICAgIHRoaXMuZW1pdFByb2dyZXNzKFNjcmFwZXJQcm9ncmVzc1R5cGVzLkNoYW5nZVBhc3N3b3JkKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBlcnJvclR5cGU6IFNjcmFwZXJFcnJvclR5cGVzLkNoYW5nZVBhc3N3b3JkLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXRQcm9ncmVzcyhTY3JhcGVyUHJvZ3Jlc3NUeXBlcy5Mb2dpbkZhaWxlZCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgZXJyb3JUeXBlOiBTY3JhcGVyRXJyb3JUeXBlcy5JbnZhbGlkUGFzc3dvcmQsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoRGF0YSgpIHtcbiAgICBjb25zdCBkZWZhdWx0U3RhcnRNb21lbnQgPSBtb21lbnQoKS5zdWJ0cmFjdCgxLCAneWVhcnMnKTtcbiAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLm9wdGlvbnMuc3RhcnREYXRlIHx8IGRlZmF1bHRTdGFydE1vbWVudC50b0RhdGUoKTtcbiAgICBjb25zdCBzdGFydE1vbWVudCA9IG1vbWVudC5tYXgoZGVmYXVsdFN0YXJ0TW9tZW50LCBtb21lbnQoc3RhcnREYXRlKSk7XG5cbiAgICByZXR1cm4gZmV0Y2hBbGxUcmFuc2FjdGlvbnModGhpcy5wYWdlLCB7XG4gICAgICAuLi50aGlzLm9wdGlvbnMsXG4gICAgICBzZXJ2aWNlc1VybDogdGhpcy5zZXJ2aWNlc1VybCxcbiAgICAgIGNvbXBhbnlDb2RlOiB0aGlzLmNvbXBhbnlDb2RlLFxuICAgIH0sIHN0YXJ0TW9tZW50KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJc3JhY2FyZEFtZXhCYXNlU2NyYXBlcjtcbiJdfQ==
|
|
@@ -49,5 +49,6 @@ declare class BaseScraperWithBrowser<TCredentials extends ScraperCredentials> ex
|
|
|
49
49
|
}[]): Promise<void>;
|
|
50
50
|
login(credentials: ScraperCredentials): Promise<ScraperScrapingResult>;
|
|
51
51
|
terminate(_success: boolean): Promise<void>;
|
|
52
|
+
private handleLoginResult;
|
|
52
53
|
}
|
|
53
54
|
export { BaseScraperWithBrowser };
|
|
@@ -21,6 +21,8 @@ var _debug = require("../helpers/debug");
|
|
|
21
21
|
|
|
22
22
|
var _errors = require("./errors");
|
|
23
23
|
|
|
24
|
+
var _definitions = require("../definitions");
|
|
25
|
+
|
|
24
26
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
25
27
|
|
|
26
28
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
@@ -86,35 +88,6 @@ async function getKeyByValue(object, value, page) {
|
|
|
86
88
|
return Promise.resolve(LoginResults.UnknownError);
|
|
87
89
|
}
|
|
88
90
|
|
|
89
|
-
function handleLoginResult(scraper, loginResult) {
|
|
90
|
-
switch (loginResult) {
|
|
91
|
-
case LoginResults.Success:
|
|
92
|
-
scraper.emitProgress(_baseScraper.ScraperProgressTypes.LoginSuccess);
|
|
93
|
-
return {
|
|
94
|
-
success: true
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
case LoginResults.InvalidPassword:
|
|
98
|
-
case LoginResults.UnknownError:
|
|
99
|
-
scraper.emitProgress(_baseScraper.ScraperProgressTypes.LoginFailed);
|
|
100
|
-
return {
|
|
101
|
-
success: false,
|
|
102
|
-
errorType: loginResult === LoginResults.InvalidPassword ? _errors.ScraperErrorTypes.InvalidPassword : _errors.ScraperErrorTypes.General,
|
|
103
|
-
errorMessage: `Login failed with ${loginResult} error`
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
case LoginResults.ChangePassword:
|
|
107
|
-
scraper.emitProgress(_baseScraper.ScraperProgressTypes.ChangePassword);
|
|
108
|
-
return {
|
|
109
|
-
success: false,
|
|
110
|
-
errorType: _errors.ScraperErrorTypes.ChangePassword
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
default:
|
|
114
|
-
throw new Error(`unexpected login result "${loginResult}"`);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
91
|
function createGeneralError() {
|
|
119
92
|
return {
|
|
120
93
|
success: false,
|
|
@@ -141,7 +114,7 @@ class BaseScraperWithBrowser extends _baseScraper.BaseScraper {
|
|
|
141
114
|
async initialize() {
|
|
142
115
|
await super.initialize();
|
|
143
116
|
debug('initialize scraper');
|
|
144
|
-
this.emitProgress(
|
|
117
|
+
this.emitProgress(_definitions.ScraperProgressTypes.Initializing);
|
|
145
118
|
let env;
|
|
146
119
|
|
|
147
120
|
if (this.options.verbose) {
|
|
@@ -291,7 +264,7 @@ class BaseScraperWithBrowser extends _baseScraper.BaseScraper {
|
|
|
291
264
|
await loginOptions.submitButtonSelector();
|
|
292
265
|
}
|
|
293
266
|
|
|
294
|
-
this.emitProgress(
|
|
267
|
+
this.emitProgress(_definitions.ScraperProgressTypes.LoggingIn);
|
|
295
268
|
|
|
296
269
|
if (loginOptions.postAction) {
|
|
297
270
|
debug('execute \'postAction\' interceptor provided in login options');
|
|
@@ -305,12 +278,12 @@ class BaseScraperWithBrowser extends _baseScraper.BaseScraper {
|
|
|
305
278
|
const current = await (0, _navigation.getCurrentUrl)(this.page, true);
|
|
306
279
|
const loginResult = await getKeyByValue(loginOptions.possibleResults, current, this.page);
|
|
307
280
|
debug(`handle login results ${loginResult}`);
|
|
308
|
-
return handleLoginResult(
|
|
281
|
+
return this.handleLoginResult(loginResult);
|
|
309
282
|
}
|
|
310
283
|
|
|
311
284
|
async terminate(_success) {
|
|
312
285
|
debug(`terminating browser with success = ${_success}`);
|
|
313
|
-
this.emitProgress(
|
|
286
|
+
this.emitProgress(_definitions.ScraperProgressTypes.Terminating);
|
|
314
287
|
|
|
315
288
|
if (!_success && !!this.options.storeFailureScreenShotPath) {
|
|
316
289
|
debug(`create a snapshot before terminated in ${this.options.storeFailureScreenShotPath}`);
|
|
@@ -327,7 +300,36 @@ class BaseScraperWithBrowser extends _baseScraper.BaseScraper {
|
|
|
327
300
|
await this.browser.close();
|
|
328
301
|
}
|
|
329
302
|
|
|
303
|
+
handleLoginResult(loginResult) {
|
|
304
|
+
switch (loginResult) {
|
|
305
|
+
case LoginResults.Success:
|
|
306
|
+
this.emitProgress(_definitions.ScraperProgressTypes.LoginSuccess);
|
|
307
|
+
return {
|
|
308
|
+
success: true
|
|
309
|
+
};
|
|
310
|
+
|
|
311
|
+
case LoginResults.InvalidPassword:
|
|
312
|
+
case LoginResults.UnknownError:
|
|
313
|
+
this.emitProgress(_definitions.ScraperProgressTypes.LoginFailed);
|
|
314
|
+
return {
|
|
315
|
+
success: false,
|
|
316
|
+
errorType: loginResult === LoginResults.InvalidPassword ? _errors.ScraperErrorTypes.InvalidPassword : _errors.ScraperErrorTypes.General,
|
|
317
|
+
errorMessage: `Login failed with ${loginResult} error`
|
|
318
|
+
};
|
|
319
|
+
|
|
320
|
+
case LoginResults.ChangePassword:
|
|
321
|
+
this.emitProgress(_definitions.ScraperProgressTypes.ChangePassword);
|
|
322
|
+
return {
|
|
323
|
+
success: false,
|
|
324
|
+
errorType: _errors.ScraperErrorTypes.ChangePassword
|
|
325
|
+
};
|
|
326
|
+
|
|
327
|
+
default:
|
|
328
|
+
throw new Error(`unexpected login result "${loginResult}"`);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
|
|
330
332
|
}
|
|
331
333
|
|
|
332
334
|
exports.BaseScraperWithBrowser = BaseScraperWithBrowser;
|
|
333
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9iYXNlLXNjcmFwZXItd2l0aC1icm93c2VyLnRzIl0sIm5hbWVzIjpbIlZJRVdQT1JUX1dJRFRIIiwiVklFV1BPUlRfSEVJR0hUIiwiT0tfU1RBVFVTIiwiZGVidWciLCJMb2dpbkJhc2VSZXN1bHRzIiwiVGltZW91dCIsIkdlbmVyaWMiLCJHZW5lcmFsIiwiU2NyYXBlckVycm9yVHlwZXMiLCJyZXN0IiwiTG9naW5SZXN1bHRzIiwiZ2V0S2V5QnlWYWx1ZSIsIm9iamVjdCIsInZhbHVlIiwicGFnZSIsImtleXMiLCJPYmplY3QiLCJrZXkiLCJjb25kaXRpb25zIiwiY29uZGl0aW9uIiwicmVzdWx0IiwiUmVnRXhwIiwidGVzdCIsInRvTG93ZXJDYXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJVbmtub3duRXJyb3IiLCJoYW5kbGVMb2dpblJlc3VsdCIsInNjcmFwZXIiLCJsb2dpblJlc3VsdCIsIlN1Y2Nlc3MiLCJlbWl0UHJvZ3Jlc3MiLCJTY3JhcGVyUHJvZ3Jlc3NUeXBlcyIsIkxvZ2luU3VjY2VzcyIsInN1Y2Nlc3MiLCJJbnZhbGlkUGFzc3dvcmQiLCJMb2dpbkZhaWxlZCIsImVycm9yVHlwZSIsImVycm9yTWVzc2FnZSIsIkNoYW5nZVBhc3N3b3JkIiwiRXJyb3IiLCJjcmVhdGVHZW5lcmFsRXJyb3IiLCJCYXNlU2NyYXBlcldpdGhCcm93c2VyIiwiQmFzZVNjcmFwZXIiLCJnZXRWaWV3UG9ydCIsIndpZHRoIiwiaGVpZ2h0IiwiaW5pdGlhbGl6ZSIsIkluaXRpYWxpemluZyIsImVudiIsIm9wdGlvbnMiLCJ2ZXJib3NlIiwiREVCVUciLCJwcm9jZXNzIiwiYnJvd3NlciIsImV4ZWN1dGFibGVQYXRoIiwidW5kZWZpbmVkIiwiYXJncyIsInRpbWVvdXQiLCJoZWFkbGVzcyIsInNob3dCcm93c2VyIiwicHVwcGV0ZWVyIiwibGF1bmNoIiwicHJlcGFyZUJyb3dzZXIiLCJwYWdlcyIsImxlbmd0aCIsIm5ld1BhZ2UiLCJkZWZhdWx0VGltZW91dCIsInNldERlZmF1bHRUaW1lb3V0IiwicHJlcGFyZVBhZ2UiLCJ2aWV3cG9ydCIsInNldFZpZXdwb3J0Iiwib24iLCJyZXF1ZXN0IiwiZmFpbHVyZSIsImVycm9yVGV4dCIsInVybCIsIm5hdmlnYXRlVG8iLCJwYWdlVG9Vc2UiLCJyZXNwb25zZSIsImdvdG8iLCJzdGF0dXMiLCJnZXRMb2dpbk9wdGlvbnMiLCJfY3JlZGVudGlhbHMiLCJjb21wYW55SWQiLCJmaWxsSW5wdXRzIiwicGFnZU9yRnJhbWUiLCJmaWVsZHMiLCJtb2RpZmllZCIsImlucHV0Iiwic2hpZnQiLCJzZWxlY3RvciIsImxvZ2luIiwiY3JlZGVudGlhbHMiLCJsb2dpbk9wdGlvbnMiLCJ1c2VyQWdlbnQiLCJzZXRVc2VyQWdlbnQiLCJsb2dpblVybCIsImNoZWNrUmVhZGluZXNzIiwic3VibWl0QnV0dG9uU2VsZWN0b3IiLCJsb2dpbkZyYW1lT3JQYWdlIiwicHJlQWN0aW9uIiwiTG9nZ2luZ0luIiwicG9zdEFjdGlvbiIsImN1cnJlbnQiLCJwb3NzaWJsZVJlc3VsdHMiLCJ0ZXJtaW5hdGUiLCJfc3VjY2VzcyIsIlRlcm1pbmF0aW5nIiwic3RvcmVGYWlsdXJlU2NyZWVuU2hvdFBhdGgiLCJzY3JlZW5zaG90IiwicGF0aCIsImZ1bGxQYWdlIiwiY2xvc2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBRUE7O0FBSUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0FBR0EsTUFBTUEsY0FBYyxHQUFHLElBQXZCO0FBQ0EsTUFBTUMsZUFBZSxHQUFHLEdBQXhCO0FBQ0EsTUFBTUMsU0FBUyxHQUFHLEdBQWxCO0FBRUEsTUFBTUMsS0FBSyxHQUFHLHFCQUFTLDJCQUFULENBQWQ7SUFFS0MsZ0I7O1dBQUFBLGdCO0FBQUFBLEVBQUFBLGdCO0FBQUFBLEVBQUFBLGdCO0dBQUFBLGdCLEtBQUFBLGdCOztBQUtMLE1BQU07QUFDSkMsRUFBQUEsT0FESTtBQUNLQyxFQUFBQSxPQURMO0FB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RyxNQUFNLCtCQUFjLEtBQUsxRixJQUFuQixFQUF5QixJQUF6QixDQUF0QjtBQUNBLFVBQU1lLFdBQVcsR0FBRyxNQUFNbEIsYUFBYSxDQUFDbUYsWUFBWSxDQUFDVyxlQUFkLEVBQStCRCxPQUEvQixFQUF3QyxLQUFLMUYsSUFBN0MsQ0FBdkM7QUFDQVgsSUFBQUEsS0FBSyxDQUFFLHdCQUF1QjBCLFdBQVksRUFBckMsQ0FBTDtBQUNBLFdBQU9GLGlCQUFpQixDQUFDLElBQUQsRUFBT0UsV0FBUCxDQUF4QjtBQUNEOztBQUVELFFBQU02RSxTQUFOLENBQWdCQyxRQUFoQixFQUFtQztBQUNqQ3hHLElBQUFBLEtBQUssQ0FBRSxzQ0FBcUN3RyxRQUFTLEVBQWhELENBQUw7QUFDQSxTQUFLNUUsWUFBTCxDQUFrQkMsa0NBQXFCNEUsV0FBdkM7O0FBRUEsUUFBSSxDQUFDRCxRQUFELElBQWEsQ0FBQyxDQUFDLEtBQUt6RCxPQUFMLENBQWEyRCwwQkFBaEMsRUFBNEQ7QUFDMUQxRyxNQUFBQSxLQUFLLENBQUUsMENBQXlDLEtBQUsrQyxPQUFMLENBQWEyRCwwQkFBMkIsRUFBbkYsQ0FBTDtBQUNBLFlBQU0sS0FBSy9GLElBQUwsQ0FBVWdHLFVBQVYsQ0FBcUI7QUFDekJDLFFBQUFBLElBQUksRUFBRSxLQUFLN0QsT0FBTCxDQUFhMkQsMEJBRE07QUFFekJHLFFBQUFBLFFBQVEsRUFBRTtBQUZlLE9BQXJCLENBQU47QUFJRDs7QUFFRCxRQUFJLENBQUMsS0FBSzFELE9BQVYsRUFBbUI7QUFDakI7QUFDRDs7QUFFRCxVQUFNLEtBQUtBLE9BQUwsQ0FBYTJELEtBQWIsRUFBTjtBQUNEOztBQTlMcUciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcHVwcGV0ZWVyLCB7IEJyb3dzZXIsIEZyYW1lLCBQYWdlIH0gZnJvbSAncHVwcGV0ZWVyJztcblxuaW1wb3J0IHtcbiAgQmFzZVNjcmFwZXIsIFNjcmFwZXJQcm9ncmVzc1R5cGVzLFxuXG59IGZyb20gJy4vYmFzZS1zY3JhcGVyJztcbmltcG9ydCB7IGdldEN1cnJlbnRVcmwsIHdhaXRGb3JOYXZpZ2F0aW9uIH0gZnJvbSAnLi4vaGVscGVycy9uYXZpZ2F0aW9uJztcbmltcG9ydCB7IGNsaWNrQnV0dG9uLCBmaWxsSW5wdXQsIHdhaXRVbnRpbEVsZW1lbnRGb3VuZCB9IGZyb20gJy4uL2hlbHBlcnMvZWxlbWVudHMtaW50ZXJhY3Rpb25zJztcbmltcG9ydCB7IGdldERlYnVnIH0gZnJvbSAnLi4vaGVscGVycy9kZWJ1Zyc7XG5pbXBvcnQgeyBTY3JhcGVyRXJyb3JUeXBlcyB9IGZyb20gJy4vZXJyb3JzJztcbmltcG9ydCB7IFNjcmFwZXJTY3JhcGluZ1Jlc3VsdCwgU2NyYXBlckNyZWRlbnRpYWxzIH0gZnJvbSAnLi9pbnRlcmZhY2UnO1xuXG5jb25zdCBWSUVXUE9SVF9XSURUSCA9IDEwMjQ7XG5jb25zdCBWSUVXUE9SVF9IRUlHSFQgPSA3Njg7XG5jb25zdCBPS19TVEFUVVMgPSAyMDA7XG5cbmNvbnN0IGRlYnVnID0gZ2V0RGVidWcoJ2Jhc2Utc2NyYXBlci13aXRoLWJyb3dzZXInKTtcblxuZW51bSBMb2dpbkJhc2VSZXN1bHRzIHtcbiAgU3VjY2VzcyA9ICdTVUNDRVNTJyxcbiAgVW5rbm93bkVycm9yID0gJ1VOS05PV05fRVJST1InXG59XG5cbmNvbnN0IHtcbiAgVGltZW91dCwgR2VuZXJpYywgR2VuZXJhbCwgLi4ucmVzdFxufSA9IFNjcmFwZXJFcnJvclR5cGVzO1xuZXhwb3J0IGNvbnN0IExvZ2luUmVzdWx0cyA9IHtcbiAgLi4ucmVzdCxcbiAgLi4uTG9naW5CYXNlUmVzdWx0cyxcbn07XG5cbmV4cG9ydCB0eXBlIExvZ2luUmVzdWx0cyA9IEV4Y2x1ZGU8U2NyYXBlckVycm9yVHlwZXMsXG5TY3JhcGVyRXJyb3JUeXBlcy5UaW1lb3V0XG58IFNjcmFwZXJFcnJvclR5cGVzLkdlbmVyaWNcbnwgU2NyYXBlckVycm9yVHlwZXMuR2VuZXJhbD4gfCBMb2dpbkJhc2VSZXN1bHRzO1xuXG5leHBvcnQgdHlwZSBQb3NzaWJsZUxvZ2luUmVzdWx0cyA9IHtcbiAgW2tleSBpbiBMb2dpblJlc3VsdHNdPzogKHN0cmluZyB8IFJlZ0V4cCB8ICgob3B0aW9ucz86IHsgcGFnZT86IFBhZ2V9KSA9PiBQcm9taXNlPGJvb2xlYW4+KSlbXVxufTtcblxuZXhwb3J0IGludGVyZmFjZSBMb2dpbk9wdGlvbnMge1xuICBsb2dpblVybDogc3RyaW5nO1xuICBjaGVja1JlYWRpbmVzcz86ICgpID0+IFByb21pc2U8dm9pZD47XG4gIGZpZWxkczoge3NlbGVjdG9yOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmd9W107XG4gIHN1Ym1pdEJ1dHRvblNlbGVjdG9yOiBzdHJpbmcgfCAoKCkgPT4gUHJvbWlzZTx2b2lkPik7XG4gIHByZUFjdGlvbj86ICgpID0+IFByb21pc2U8RnJhbWUgfCB2b2lkPjtcbiAgcG9zdEFjdGlvbj86ICgpID0+IFByb21pc2U8dm9pZD47XG4gIHBvc3NpYmxlUmVzdWx0czogUG9zc2libGVMb2dpblJlc3VsdHM7XG4gIHVzZXJBZ2VudD86IHN0cmluZztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0S2V5QnlWYWx1ZShvYmplY3Q6IFBvc3NpYmxlTG9naW5SZXN1bHRzLCB2YWx1ZTogc3RyaW5nLCBwYWdlOiBQYWdlKTogUHJvbWlzZTxMb2dpblJlc3VsdHM+IHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgY29uZGl0aW9ucyA9IG9iamVjdFtrZXldO1xuXG4gICAgZm9yIChjb25zdCBjb25kaXRpb24gb2YgY29uZGl0aW9ucykge1xuICAgICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xuXG4gICAgICBpZiAoY29uZGl0aW9uIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIHJlc3VsdCA9IGNvbmRpdGlvbi50ZXN0KHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmRpdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBjb25kaXRpb24oeyBwYWdlLCB2YWx1ZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IGNvbmRpdGlvbi50b0xvd2VyQ2FzZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoTG9naW5SZXN1bHRzLlVua25vd25FcnJvcik7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUxvZ2luUmVzdWx0KHNjcmFwZXI6IEJhc2VTY3JhcGVyV2l0aEJyb3dzZXI8U2NyYXBlckNyZWRlbnRpYWxzPiwgbG9naW5SZXN1bHQ6IExvZ2luUmVzdWx0cykge1xuICBzd2l0Y2ggKGxvZ2luUmVzdWx0KSB7XG4gICAgY2FzZSBMb2dpblJlc3VsdHMuU3VjY2VzczpcbiAgICAgIHNjcmFwZXIuZW1pdFByb2dyZXNzKFNjcmFwZXJQcm9ncmVzc1R5cGVzLkxvZ2luU3VjY2Vzcyk7XG4gICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlIH07XG4gICAgY2FzZSBMb2dpblJlc3VsdHMuSW52YWxpZFBhc3N3b3JkOlxuICAgIGNhc2UgTG9naW5SZXN1bHRzLlVua25vd25FcnJvcjpcbiAgICAgIHNjcmFwZXIuZW1pdFByb2dyZXNzKFNjcmFwZXJQcm9ncmVzc1R5cGVzLkxvZ2luRmFpbGVkKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBlcnJvclR5cGU6IGxvZ2luUmVzdWx0ID09PSBMb2dpblJlc3VsdHMuSW52YWxpZFBhc3N3b3JkID8gU2NyYXBlckVycm9yVHlwZXMuSW52YWxpZFBhc3N3b3JkIDpcbiAgICAgICAgICBTY3JhcGVyRXJyb3JUeXBlcy5HZW5lcmFsLFxuICAgICAgICBlcnJvck1lc3NhZ2U6IGBMb2dpbiBmYWlsZWQgd2l0aCAke2xvZ2luUmVzdWx0fSBlcnJvcmAsXG4gICAgICB9O1xuICAgIGNhc2UgTG9naW5SZXN1bHRzLkNoYW5nZVBhc3N3b3JkOlxuICAgICAgc2NyYXBlci5lbWl0UHJvZ3Jlc3MoU2NyYXBlclByb2dyZXNzVHlwZXMuQ2hhbmdlUGFzc3dvcmQpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIGVycm9yVHlwZTogU2NyYXBlckVycm9yVHlwZXMuQ2hhbmdlUGFzc3dvcmQsXG4gICAgICB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgbG9naW4gcmVzdWx0IFwiJHtsb2dpblJlc3VsdH1cImApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUdlbmVyYWxFcnJvcigpOiBTY3JhcGVyU2NyYXBpbmdSZXN1bHQge1xuICByZXR1cm4ge1xuICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgIGVycm9yVHlwZTogU2NyYXBlckVycm9yVHlwZXMuR2VuZXJhbCxcbiAgfTtcbn1cblxuY2xhc3MgQmFzZVNjcmFwZXJXaXRoQnJvd3NlcjxUQ3JlZGVudGlhbHMgZXh0ZW5kcyBTY3JhcGVyQ3JlZGVudGlhbHM+IGV4dGVuZHMgQmFzZVNjcmFwZXI8VENyZWRlbnRpYWxzPiB7XG4gIC8vIE5PVElDRSAtIGl0IGlzIGRpc2NvdXJhZ2UgdG8gdXNlIGJhbmcgKCEpIGluIGdlbmVyYWwuIEl0IGlzIHVzZWQgaGVyZSBiZWNhdXNlXG4gIC8vIGFsbCB0aGUgY2xhc3NlcyB0aGF0IGluaGVyaXQgZnJvbSB0aGlzIGJhc2UgYXNzdW1lIGlzIGl0IG1hbmRhdG9yeS5cbiAgcHJvdGVjdGVkIGJyb3dzZXIhOiBCcm93c2VyO1xuXG4gIC8vIE5PVElDRSAtIGl0IGlzIGRpc2NvdXJhZ2UgdG8gdXNlIGJhbmcgKCEpIGluIGdlbmVyYWwuIEl0IGlzIHVzZWQgaGVyZSBiZWNhdXNlXG4gIC8vIGFsbCB0aGUgY2xhc3NlcyB0aGF0IGluaGVyaXQgZnJvbSB0aGlzIGJhc2UgYXNzdW1lIGlzIGl0IG1hbmRhdG9yeS5cbiAgcHJvdGVjdGVkIHBhZ2UhOiBQYWdlO1xuXG4gIHByb3RlY3RlZCBnZXRWaWV3UG9ydCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IFZJRVdQT1JUX1dJRFRILFxuICAgICAgaGVpZ2h0OiBWSUVXUE9SVF9IRUlHSFQsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGluaXRpYWxpemUoKSB7XG4gICAgYXdhaXQgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgIGRlYnVnKCdpbml0aWFsaXplIHNjcmFwZXInKTtcbiAgICB0aGlzLmVtaXRQcm9ncmVzcyhTY3JhcGVyUHJvZ3Jlc3NUeXBlcy5Jbml0aWFsaXppbmcpO1xuXG4gICAgbGV0IGVudjogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5vcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgIGVudiA9IHsgREVCVUc6ICcqJywgLi4ucHJvY2Vzcy5lbnYgfTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5icm93c2VyICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm9wdGlvbnMuYnJvd3NlciAhPT0gbnVsbCkge1xuICAgICAgZGVidWcoJ3VzZSBjdXN0b20gYnJvd3NlciBpbnN0YW5jZSBwcm92aWRlZCBpbiBvcHRpb25zJyk7XG4gICAgICB0aGlzLmJyb3dzZXIgPSB0aGlzLm9wdGlvbnMuYnJvd3NlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXhlY3V0YWJsZVBhdGggPSB0aGlzLm9wdGlvbnMuZXhlY3V0YWJsZVBhdGggfHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgYXJncyA9IHRoaXMub3B0aW9ucy5hcmdzIHx8IFtdO1xuICAgICAgY29uc3QgeyB0aW1lb3V0IH0gPSB0aGlzLm9wdGlvbnM7XG5cbiAgICAgIGNvbnN0IGhlYWRsZXNzID0gIXRoaXMub3B0aW9ucy5zaG93QnJvd3NlcjtcbiAgICAgIGRlYnVnKGBsYXVuY2ggYSBicm93c2VyIHdpdGggaGVhZGxlc3MgbW9kZSA9ICR7aGVhZGxlc3N9YCk7XG4gICAgICB0aGlzLmJyb3dzZXIgPSBhd2FpdCBwdXBwZXRlZXIubGF1bmNoKHtcbiAgICAgICAgZW52LFxuICAgICAgICBoZWFkbGVzcyxcbiAgICAgICAgZXhlY3V0YWJsZVBhdGgsXG4gICAgICAgIGFyZ3MsXG4gICAgICAgIHRpbWVvdXQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnByZXBhcmVCcm93c2VyKSB7XG4gICAgICBkZWJ1ZygnZXhlY3V0ZSBcXCdwcmVwYXJlQnJvd3NlclxcJyBpbnRlcmNlcHRvciBwcm92aWRlZCBpbiBvcHRpb25zJyk7XG4gICAgICBhd2FpdCB0aGlzLm9wdGlvbnMucHJlcGFyZUJyb3dzZXIodGhpcy5icm93c2VyKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYnJvd3Nlcikge1xuICAgICAgZGVidWcoJ2ZhaWxlZCB0byBpbml0aWF0ZSBhIGJyb3dzZXIsIGV4aXQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYWdlcyA9IGF3YWl0IHRoaXMuYnJvd3Nlci5wYWdlcygpO1xuICAgIGlmIChwYWdlcy5sZW5ndGgpIHtcbiAgICAgIGRlYnVnKCdicm93c2VyIGhhcyBhbHJlYWR5IHBhZ2VzIG9wZW4sIHVzZSB0aGUgZmlyc3Qgb25lJyk7XG4gICAgICBbdGhpcy5wYWdlXSA9IHBhZ2VzO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1ZygnY3JlYXRlIGEgbmV3IGJyb3dzZXIgcGFnZScpO1xuICAgICAgdGhpcy5wYWdlID0gYXdhaXQgdGhpcy5icm93c2VyLm5ld1BhZ2UoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmRlZmF1bHRUaW1lb3V0KSB7XG4gICAgICB0aGlzLnBhZ2Uuc2V0RGVmYXVsdFRpbWVvdXQodGhpcy5vcHRpb25zLmRlZmF1bHRUaW1lb3V0KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnByZXBhcmVQYWdlKSB7XG4gICAgICBkZWJ1ZygnZXhlY3V0ZSBcXCdwcmVwYXJlUGFnZVxcJyBpbnRlcmNlcHRvciBwcm92aWRlZCBpbiBvcHRpb25zJyk7XG4gICAgICBhd2FpdCB0aGlzLm9wdGlvbnMucHJlcGFyZVBhZ2UodGhpcy5wYWdlKTtcbiAgICB9XG5cbiAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMuZ2V0Vmlld1BvcnQoKTtcbiAgICBkZWJ1Zyhgc2V0IHZpZXdwb3J0IHRvIHdpZHRoICR7dmlld3BvcnQud2lkdGh9LCBoZWlnaHQgJHt2aWV3cG9ydC5oZWlnaHR9YCk7XG4gICAgYXdhaXQgdGhpcy5wYWdlLnNldFZpZXdwb3J0KHtcbiAgICAgIHdpZHRoOiB2aWV3cG9ydC53aWR0aCxcbiAgICAgIGhlaWdodDogdmlld3BvcnQuaGVpZ2h0LFxuICAgIH0pO1xuXG4gICAgdGhpcy5wYWdlLm9uKCdyZXF1ZXN0ZmFpbGVkJywgKHJlcXVlc3QpID0+IHtcbiAgICAgIGRlYnVnKCdSZXF1ZXN0IGZhaWxlZDogJXMgJXMnLCByZXF1ZXN0LmZhaWx1cmUoKT8uZXJyb3JUZXh0LCByZXF1ZXN0LnVybCgpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG5hdmlnYXRlVG8odXJsOiBzdHJpbmcsIHBhZ2U/OiBQYWdlLCB0aW1lb3V0PzogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGFnZVRvVXNlID0gcGFnZSB8fCB0aGlzLnBhZ2U7XG5cbiAgICBpZiAoIXBhZ2VUb1VzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnMgPSB7IC4uLih0aW1lb3V0ID09PSBudWxsID8gbnVsbCA6IHsgdGltZW91dCB9KSB9O1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcGFnZVRvVXNlLmdvdG8odXJsLCBvcHRpb25zKTtcblxuICAgIC8vIG5vdGU6IHJlc3BvbnNlIHdpbGwgYmUgbnVsbCB3aGVuIG5hdmlnYXRpbmcgdG8gc2FtZSB1cmwgd2hpbGUgY2hhbmdpbmcgdGhlIGhhc2ggcGFydC4gdGhlIGNvbmRpdGlvbiBiZWxvdyB3aWxsIGFsd2F5cyBhY2NlcHQgbnVsbCBhcyB2YWxpZCByZXN1bHQuXG4gICAgaWYgKHJlc3BvbnNlICE9PSBudWxsICYmIChyZXNwb25zZSA9PT0gdW5kZWZpbmVkIHx8IHJlc3BvbnNlLnN0YXR1cygpICE9PSBPS19TVEFUVVMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHdoaWxlIHRyeWluZyB0byBuYXZpZ2F0ZSB0byB1cmwgJHt1cmx9YCk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBnZXRMb2dpbk9wdGlvbnMoX2NyZWRlbnRpYWxzOiBTY3JhcGVyQ3JlZGVudGlhbHMpOiBMb2dpbk9wdGlvbnMge1xuICAgIHRocm93IG5ldyBFcnJvcihgZ2V0TG9naW5PcHRpb25zKCkgaXMgbm90IGNyZWF0ZWQgaW4gJHt0aGlzLm9wdGlvbnMuY29tcGFueUlkfWApO1xuICB9XG5cbiAgYXN5bmMgZmlsbElucHV0cyhwYWdlT3JGcmFtZTogUGFnZSB8IEZyYW1lLCBmaWVsZHM6IHsgc2VsZWN0b3I6IHN0cmluZywgdmFsdWU6IHN0cmluZ31bXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1vZGlmaWVkID0gWy4uLmZpZWxkc107XG4gICAgY29uc3QgaW5wdXQgPSBtb2RpZmllZC5zaGlmdCgpO1xuXG4gICAgaWYgKCFpbnB1dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCBmaWxsSW5wdXQocGFnZU9yRnJhbWUsIGlucHV0LnNlbGVjdG9yLCBpbnB1dC52YWx1ZSk7XG4gICAgaWYgKG1vZGlmaWVkLmxlbmd0aCkge1xuICAgICAgYXdhaXQgdGhpcy5maWxsSW5wdXRzKHBhZ2VPckZyYW1lLCBtb2RpZmllZCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9naW4oY3JlZGVudGlhbHM6IFNjcmFwZXJDcmVkZW50aWFscyk6IFByb21pc2U8U2NyYXBlclNjcmFwaW5nUmVzdWx0PiB7XG4gICAgaWYgKCFjcmVkZW50aWFscyB8fCAhdGhpcy5wYWdlKSB7XG4gICAgICByZXR1cm4gY3JlYXRlR2VuZXJhbEVycm9yKCk7XG4gICAgfVxuXG4gICAgZGVidWcoJ2V4ZWN1dGUgbG9naW4gcHJvY2VzcycpO1xuICAgIGNvbnN0IGxvZ2luT3B0aW9ucyA9IHRoaXMuZ2V0TG9naW5PcHRpb25zKGNyZWRlbnRpYWxzKTtcblxuICAgIGlmIChsb2dpbk9wdGlvbnMudXNlckFnZW50KSB7XG4gICAgICBkZWJ1Zygnc2V0IGN1c3RvbSB1c2VyIGFnZW50IHByb3ZpZGVkIGluIG9wdGlvbnMnKTtcbiAgICAgIGF3YWl0IHRoaXMucGFnZS5zZXRVc2VyQWdlbnQobG9naW5PcHRpb25zLnVzZXJBZ2VudCk7XG4gICAgfVxuXG4gICAgZGVidWcoJ25hdmlnYXRlIHRvIGxvZ2luIHVybCcpO1xuICAgIGF3YWl0IHRoaXMubmF2aWdhdGVUbyhsb2dpbk9wdGlvbnMubG9naW5VcmwpO1xuICAgIGlmIChsb2dpbk9wdGlvbnMuY2hlY2tSZWFkaW5lc3MpIHtcbiAgICAgIGRlYnVnKCdleGVjdXRlIFxcJ2NoZWNrUmVhZGluZXNzXFwnIGludGVyY2VwdG9yIHByb3ZpZGVkIGluIGxvZ2luIG9wdGlvbnMnKTtcbiAgICAgIGF3YWl0IGxvZ2luT3B0aW9ucy5jaGVja1JlYWRpbmVzcygpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGxvZ2luT3B0aW9ucy5zdWJtaXRCdXR0b25TZWxlY3RvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRlYnVnKCd3YWl0IHVudGlsIHN1Ym1pdCBidXR0b24gaXMgYXZhaWxhYmxlJyk7XG4gICAgICBhd2FpdCB3YWl0VW50aWxFbGVtZW50Rm91bmQodGhpcy5wYWdlLCBsb2dpbk9wdGlvbnMuc3VibWl0QnV0dG9uU2VsZWN0b3IpO1xuICAgIH1cblxuICAgIGxldCBsb2dpbkZyYW1lT3JQYWdlOiAoUGFnZSB8IEZyYW1lIHwgbnVsbCkgPSB0aGlzLnBhZ2U7XG4gICAgaWYgKGxvZ2luT3B0aW9ucy5wcmVBY3Rpb24pIHtcbiAgICAgIGRlYnVnKCdleGVjdXRlIFxcJ3ByZUFjdGlvblxcJyBpbnRlcmNlcHRvciBwcm92aWRlZCBpbiBsb2dpbiBvcHRpb25zJyk7XG4gICAgICBsb2dpbkZyYW1lT3JQYWdlID0gYXdhaXQgbG9naW5PcHRpb25zLnByZUFjdGlvbigpIHx8IHRoaXMucGFnZTtcbiAgICB9XG5cbiAgICBkZWJ1ZygnZmlsbCBsb2dpbiBjb21wb25lbnRzIGlucHV0IHdpdGggcmVsZXZhbnQgdmFsdWVzJyk7XG4gICAgYXdhaXQgdGhpcy5maWxsSW5wdXRzKGxvZ2luRnJhbWVPclBhZ2UsIGxvZ2luT3B0aW9ucy5maWVsZHMpO1xuICAgIGRlYnVnKCdjbGljayBvbiBsb2dpbiBzdWJtaXQgYnV0dG9uJyk7XG4gICAgaWYgKHR5cGVvZiBsb2dpbk9wdGlvbnMuc3VibWl0QnV0dG9uU2VsZWN0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBhd2FpdCBjbGlja0J1dHRvbihsb2dpbkZyYW1lT3JQYWdlLCBsb2dpbk9wdGlvbnMuc3VibWl0QnV0dG9uU2VsZWN0b3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBsb2dpbk9wdGlvbnMuc3VibWl0QnV0dG9uU2VsZWN0b3IoKTtcbiAgICB9XG4gICAgdGhpcy5lbWl0UHJvZ3Jlc3MoU2NyYXBlclByb2dyZXNzVHlwZXMuTG9nZ2luZ0luKTtcblxuICAgIGlmIChsb2dpbk9wdGlvbnMucG9zdEFjdGlvbikge1xuICAgICAgZGVidWcoJ2V4ZWN1dGUgXFwncG9zdEFjdGlvblxcJyBpbnRlcmNlcHRvciBwcm92aWRlZCBpbiBsb2dpbiBvcHRpb25zJyk7XG4gICAgICBhd2FpdCBsb2dpbk9wdGlvbnMucG9zdEFjdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1Zygnd2FpdCBmb3IgcGFnZSBuYXZpZ2F0aW9uJyk7XG4gICAgICBhd2FpdCB3YWl0Rm9yTmF2aWdhdGlvbih0aGlzLnBhZ2UpO1xuICAgIH1cblxuICAgIGRlYnVnKCdjaGVjayBsb2dpbiByZXN1bHQnKTtcbiAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgZ2V0Q3VycmVudFVybCh0aGlzLnBhZ2UsIHRydWUpO1xuICAgIGNvbnN0IGxvZ2luUmVzdWx0ID0gYXdhaXQgZ2V0S2V5QnlWYWx1ZShsb2dpbk9wdGlvbnMucG9zc2libGVSZXN1bHRzLCBjdXJyZW50LCB0aGlzLnBhZ2UpO1xuICAgIGRlYnVnKGBoYW5kbGUgbG9naW4gcmVzdWx0cyAke2xvZ2luUmVzdWx0fWApO1xuICAgIHJldHVybiBoYW5kbGVMb2dpblJlc3VsdCh0aGlzLCBsb2dpblJlc3VsdCk7XG4gIH1cblxuICBhc3luYyB0ZXJtaW5hdGUoX3N1Y2Nlc3M6IGJvb2xlYW4pIHtcbiAgICBkZWJ1ZyhgdGVybWluYXRpbmcgYnJvd3NlciB3aXRoIHN1Y2Nlc3MgPSAke19zdWNjZXNzfWApO1xuICAgIHRoaXMuZW1pdFByb2dyZXNzKFNjcmFwZXJQcm9ncmVzc1R5cGVzLlRlcm1pbmF0aW5nKTtcblxuICAgIGlmICghX3N1Y2Nlc3MgJiYgISF0aGlzLm9wdGlvbnMuc3RvcmVGYWlsdXJlU2NyZWVuU2hvdFBhdGgpIHtcbiAgICAgIGRlYnVnKGBjcmVhdGUgYSBzbmFwc2hvdCBiZWZvcmUgdGVybWluYXRlZCBpbiAke3RoaXMub3B0aW9ucy5zdG9yZUZhaWx1cmVTY3JlZW5TaG90UGF0aH1gKTtcbiAgICAgIGF3YWl0IHRoaXMucGFnZS5zY3JlZW5zaG90KHtcbiAgICAgICAgcGF0aDogdGhpcy5vcHRpb25zLnN0b3JlRmFpbHVyZVNjcmVlblNob3RQYXRoLFxuICAgICAgICBmdWxsUGFnZTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5icm93c2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5icm93c2VyLmNsb3NlKCk7XG4gIH1cbn1cblxuZXhwb3J0IHsgQmFzZVNjcmFwZXJXaXRoQnJvd3NlciB9O1xuIl19
|
|
335
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9iYXNlLXNjcmFwZXItd2l0aC1icm93c2VyLnRzIl0sIm5hbWVzIjpbIlZJRVdQT1JUX1dJRFRIIiwiVklFV1BPUlRfSEVJR0hUIiwiT0tfU1RBVFVTIiwiZGVidWciLCJMb2dpbkJhc2VSZXN1bHRzIiwiVGltZW91dCIsIkdlbmVyaWMiLCJHZW5lcmFsIiwiU2NyYXBlckVycm9yVHlwZXMiLCJyZXN0IiwiTG9naW5SZXN1bHRzIiwiZ2V0S2V5QnlWYWx1ZSIsIm9iamVjdCIsInZhbHVlIiwicGFnZSIsImtleXMiLCJPYmplY3QiLCJrZXkiLCJjb25kaXRpb25zIiwiY29uZGl0aW9uIiwicmVzdWx0IiwiUmVnRXhwIiwidGVzdCIsInRvTG93ZXJDYXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJVbmtub3duRXJyb3IiLCJjcmVhdGVHZW5lcmFsRXJyb3IiLCJzdWNjZXNzIiwiZXJyb3JUeXBlIiwiQmFzZVNjcmFwZXJXaXRoQnJvd3NlciIsIkJhc2VTY3JhcGVyIiwiZ2V0Vmlld1BvcnQiLCJ3aWR0aCIsImhlaWdodCIsImluaXRpYWxpemUiLCJlbWl0UHJvZ3Jlc3MiLCJTY3JhcGVyUHJvZ3Jlc3NUeXBlcyIsIkluaXRpYWxpemluZyIsImVudiIsIm9wdGlvbnMiLCJ2ZXJib3NlIiwiREVCVUciLCJwcm9jZXNzIiwiYnJvd3NlciIsImV4ZWN1dGFibGVQYXRoIiwidW5kZWZpbmVkIiwiYXJncyIsInRpbWVvdXQiLCJoZWFkbGVzcyIsInNob3dCcm93c2VyIiwicHVwcGV0ZWVyIiwibGF1bmNoIiwicHJlcGFyZUJyb3dzZXIiLCJwYWdlcyIsImxlbmd0aCIsIm5ld1BhZ2UiLCJkZWZhdWx0VGltZW91dCIsInNldERlZmF1bHRUaW1lb3V0IiwicHJlcGFyZVBhZ2UiLCJ2aWV3cG9ydCIsInNldFZpZXdwb3J0Iiwib24iLCJyZXF1ZXN0IiwiZmFpbHVyZSIsImVycm9yVGV4dCIsInVybCIsIm5hdmlnYXRlVG8iLCJwYWdlVG9Vc2UiLCJyZXNwb25zZSIsImdvdG8iLCJzdGF0dXMiLCJFcnJvciIsImdldExvZ2luT3B0aW9ucyIsIl9jcmVkZW50aWFscyIsImNvbXBhbnlJZCIsImZpbGxJbnB1dHMiLCJwYWdlT3JGcmFtZSIsImZpZWxkcyIsIm1vZGlmaWVkIiwiaW5wdXQiLCJzaGlmdCIsInNlbGVjdG9yIiwibG9naW4iLCJjcmVkZW50aWFscyIsImxvZ2luT3B0aW9ucyIsInVzZXJBZ2VudCIsInNldFVzZXJBZ2VudCIsImxvZ2luVXJsIiwiY2hlY2tSZWFkaW5lc3MiLCJzdWJtaXRCdXR0b25TZWxlY3RvciIsImxvZ2luRnJhbWVPclBhZ2UiLCJwcmVBY3Rpb24iLCJMb2dnaW5nSW4iLCJwb3N0QWN0aW9uIiwiY3VycmVudCIsImxvZ2luUmVzdWx0IiwicG9zc2libGVSZXN1bHRzIiwiaGFuZGxlTG9naW5SZXN1bHQiLCJ0ZXJtaW5hdGUiLCJfc3VjY2VzcyIsIlRlcm1pbmF0aW5nIiwic3RvcmVGYWlsdXJlU2NyZWVuU2hvdFBhdGgiLCJzY3JlZW5zaG90IiwicGF0aCIsImZ1bGxQYWdlIiwiY2xvc2UiLCJTdWNjZXNzIiwiTG9naW5TdWNjZXNzIiwiSW52YWxpZFBhc3N3b3JkIiwiTG9naW5GYWlsZWQiLCJlcnJvck1lc3NhZ2UiLCJDaGFuZ2VQYXNzd29yZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFFQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxjQUFjLEdBQUcsSUFBdkI7QUFDQSxNQUFNQyxlQUFlLEdBQUcsR0FBeEI7QUFDQSxNQUFNQyxTQUFTLEdBQUcsR0FBbEI7QUFFQSxNQUFNQyxLQUFLLEdBQUcscUJBQVMsMkJBQVQsQ0FBZDtJQUVLQyxnQjs7V0FBQUEsZ0I7QUFBQUEsRUFBQUEsZ0I7QUFBQUEsRUFBQUEsZ0I7R0FBQUEsZ0IsS0FBQUEsZ0I7O0FBS0wsTUFBTTtBQUNKQyxFQUFBQSxPQURJO0FBQ0tDLEVBQUFBLE9BREw7QUFDY0Ms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QUFFT1IsRUFBQUEsaUJBQVIsQ0FBMEJGLFdBQTFCLEVBQXFEO0FBQ25ELFlBQVFBLFdBQVI7QUFDRSxXQUFLdEYsWUFBWSxDQUFDaUcsT0FBbEI7QUFDRSxhQUFLdkUsWUFBTCxDQUFrQkMsa0NBQXFCdUUsWUFBdkM7QUFDQSxlQUFPO0FBQUVoRixVQUFBQSxPQUFPLEVBQUU7QUFBWCxTQUFQOztBQUNGLFdBQUtsQixZQUFZLENBQUNtRyxlQUFsQjtBQUNBLFdBQUtuRyxZQUFZLENBQUNnQixZQUFsQjtBQUNFLGFBQUtVLFlBQUwsQ0FBa0JDLGtDQUFxQnlFLFdBQXZDO0FBQ0EsZUFBTztBQUNMbEYsVUFBQUEsT0FBTyxFQUFFLEtBREo7QUFFTEMsVUFBQUEsU0FBUyxFQUFFbUUsV0FBVyxLQUFLdEYsWUFBWSxDQUFDbUcsZUFBN0IsR0FBK0NyRywwQkFBa0JxRyxlQUFqRSxHQUNUckcsMEJBQWtCRCxPQUhmO0FBSUx3RyxVQUFBQSxZQUFZLEVBQUcscUJBQW9CZixXQUFZO0FBSjFDLFNBQVA7O0FBTUYsV0FBS3RGLFlBQVksQ0FBQ3NHLGNBQWxCO0FBQ0UsYUFBSzVFLFlBQUwsQ0FBa0JDLGtDQUFxQjJFLGNBQXZDO0FBQ0EsZUFBTztBQUNMcEYsVUFBQUEsT0FBTyxFQUFFLEtBREo7QUFFTEMsVUFBQUEsU0FBUyxFQUFFckIsMEJBQWtCd0c7QUFGeEIsU0FBUDs7QUFJRjtBQUNFLGNBQU0sSUFBSXhDLEtBQUosQ0FBVyw0QkFBMkJ3QixXQUFZLEdBQWxELENBQU47QUFwQko7QUFzQkQ7O0FBdk5xRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwdXBwZXRlZXIsIHsgQnJvd3NlciwgRnJhbWUsIFBhZ2UgfSBmcm9tICdwdXBwZXRlZXInO1xuXG5pbXBvcnQge1xuICBCYXNlU2NyYXBlcixcblxufSBmcm9tICcuL2Jhc2Utc2NyYXBlcic7XG5pbXBvcnQgeyBnZXRDdXJyZW50VXJsLCB3YWl0Rm9yTmF2aWdhdGlvbiB9IGZyb20gJy4uL2hlbHBlcnMvbmF2aWdhdGlvbic7XG5pbXBvcnQgeyBjbGlja0J1dHRvbiwgZmlsbElucHV0LCB3YWl0VW50aWxFbGVtZW50Rm91bmQgfSBmcm9tICcuLi9oZWxwZXJzL2VsZW1lbnRzLWludGVyYWN0aW9ucyc7XG5pbXBvcnQgeyBnZXREZWJ1ZyB9IGZyb20gJy4uL2hlbHBlcnMvZGVidWcnO1xuaW1wb3J0IHsgU2NyYXBlckVycm9yVHlwZXMgfSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQgeyBTY3JhcGVyU2NyYXBpbmdSZXN1bHQsIFNjcmFwZXJDcmVkZW50aWFscyB9IGZyb20gJy4vaW50ZXJmYWNlJztcbmltcG9ydCB7IFNjcmFwZXJQcm9ncmVzc1R5cGVzIH0gZnJvbSAnLi4vZGVmaW5pdGlvbnMnO1xuXG5jb25zdCBWSUVXUE9SVF9XSURUSCA9IDEwMjQ7XG5jb25zdCBWSUVXUE9SVF9IRUlHSFQgPSA3Njg7XG5jb25zdCBPS19TVEFUVVMgPSAyMDA7XG5cbmNvbnN0IGRlYnVnID0gZ2V0RGVidWcoJ2Jhc2Utc2NyYXBlci13aXRoLWJyb3dzZXInKTtcblxuZW51bSBMb2dpbkJhc2VSZXN1bHRzIHtcbiAgU3VjY2VzcyA9ICdTVUNDRVNTJyxcbiAgVW5rbm93bkVycm9yID0gJ1VOS05PV05fRVJST1InXG59XG5cbmNvbnN0IHtcbiAgVGltZW91dCwgR2VuZXJpYywgR2VuZXJhbCwgLi4ucmVzdFxufSA9IFNjcmFwZXJFcnJvclR5cGVzO1xuZXhwb3J0IGNvbnN0IExvZ2luUmVzdWx0cyA9IHtcbiAgLi4ucmVzdCxcbiAgLi4uTG9naW5CYXNlUmVzdWx0cyxcbn07XG5cbmV4cG9ydCB0eXBlIExvZ2luUmVzdWx0cyA9IEV4Y2x1ZGU8U2NyYXBlckVycm9yVHlwZXMsXG5TY3JhcGVyRXJyb3JUeXBlcy5UaW1lb3V0XG58IFNjcmFwZXJFcnJvclR5cGVzLkdlbmVyaWNcbnwgU2NyYXBlckVycm9yVHlwZXMuR2VuZXJhbD4gfCBMb2dpbkJhc2VSZXN1bHRzO1xuXG5leHBvcnQgdHlwZSBQb3NzaWJsZUxvZ2luUmVzdWx0cyA9IHtcbiAgW2tleSBpbiBMb2dpblJlc3VsdHNdPzogKHN0cmluZyB8IFJlZ0V4cCB8ICgob3B0aW9ucz86IHsgcGFnZT86IFBhZ2V9KSA9PiBQcm9taXNlPGJvb2xlYW4+KSlbXVxufTtcblxuZXhwb3J0IGludGVyZmFjZSBMb2dpbk9wdGlvbnMge1xuICBsb2dpblVybDogc3RyaW5nO1xuICBjaGVja1JlYWRpbmVzcz86ICgpID0+IFByb21pc2U8dm9pZD47XG4gIGZpZWxkczoge3NlbGVjdG9yOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmd9W107XG4gIHN1Ym1pdEJ1dHRvblNlbGVjdG9yOiBzdHJpbmcgfCAoKCkgPT4gUHJvbWlzZTx2b2lkPik7XG4gIHByZUFjdGlvbj86ICgpID0+IFByb21pc2U8RnJhbWUgfCB2b2lkPjtcbiAgcG9zdEFjdGlvbj86ICgpID0+IFByb21pc2U8dm9pZD47XG4gIHBvc3NpYmxlUmVzdWx0czogUG9zc2libGVMb2dpblJlc3VsdHM7XG4gIHVzZXJBZ2VudD86IHN0cmluZztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0S2V5QnlWYWx1ZShvYmplY3Q6IFBvc3NpYmxlTG9naW5SZXN1bHRzLCB2YWx1ZTogc3RyaW5nLCBwYWdlOiBQYWdlKTogUHJvbWlzZTxMb2dpblJlc3VsdHM+IHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgY29uZGl0aW9ucyA9IG9iamVjdFtrZXldO1xuXG4gICAgZm9yIChjb25zdCBjb25kaXRpb24gb2YgY29uZGl0aW9ucykge1xuICAgICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xuXG4gICAgICBpZiAoY29uZGl0aW9uIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIHJlc3VsdCA9IGNvbmRpdGlvbi50ZXN0KHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmRpdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBjb25kaXRpb24oeyBwYWdlLCB2YWx1ZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IGNvbmRpdGlvbi50b0xvd2VyQ2FzZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoTG9naW5SZXN1bHRzLlVua25vd25FcnJvcik7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUdlbmVyYWxFcnJvcigpOiBTY3JhcGVyU2NyYXBpbmdSZXN1bHQge1xuICByZXR1cm4ge1xuICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgIGVycm9yVHlwZTogU2NyYXBlckVycm9yVHlwZXMuR2VuZXJhbCxcbiAgfTtcbn1cblxuY2xhc3MgQmFzZVNjcmFwZXJXaXRoQnJvd3NlcjxUQ3JlZGVudGlhbHMgZXh0ZW5kcyBTY3JhcGVyQ3JlZGVudGlhbHM+IGV4dGVuZHMgQmFzZVNjcmFwZXI8VENyZWRlbnRpYWxzPiB7XG4gIC8vIE5PVElDRSAtIGl0IGlzIGRpc2NvdXJhZ2VkIHRvIHVzZSBiYW5nICghKSBpbiBnZW5lcmFsLiBJdCBpcyB1c2VkIGhlcmUgYmVjYXVzZVxuICAvLyBhbGwgdGhlIGNsYXNzZXMgdGhhdCBpbmhlcml0IGZyb20gdGhpcyBiYXNlIGFzc3VtZSBpcyBpdCBtYW5kYXRvcnkuXG4gIHByb3RlY3RlZCBicm93c2VyITogQnJvd3NlcjtcblxuICAvLyBOT1RJQ0UgLSBpdCBpcyBkaXNjb3VyYWdlZCB0byB1c2UgYmFuZyAoISkgaW4gZ2VuZXJhbC4gSXQgaXMgdXNlZCBoZXJlIGJlY2F1c2VcbiAgLy8gYWxsIHRoZSBjbGFzc2VzIHRoYXQgaW5oZXJpdCBmcm9tIHRoaXMgYmFzZSBhc3N1bWUgaXMgaXQgbWFuZGF0b3J5LlxuICBwcm90ZWN0ZWQgcGFnZSE6IFBhZ2U7XG5cbiAgcHJvdGVjdGVkIGdldFZpZXdQb3J0KCkge1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogVklFV1BPUlRfV0lEVEgsXG4gICAgICBoZWlnaHQ6IFZJRVdQT1JUX0hFSUdIVCxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgaW5pdGlhbGl6ZSgpIHtcbiAgICBhd2FpdCBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgZGVidWcoJ2luaXRpYWxpemUgc2NyYXBlcicpO1xuICAgIHRoaXMuZW1pdFByb2dyZXNzKFNjcmFwZXJQcm9ncmVzc1R5cGVzLkluaXRpYWxpemluZyk7XG5cbiAgICBsZXQgZW52OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLm9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgZW52ID0geyBERUJVRzogJyonLCAuLi5wcm9jZXNzLmVudiB9O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmJyb3dzZXIgIT09ICd1bmRlZmluZWQnICYmIHRoaXMub3B0aW9ucy5icm93c2VyICE9PSBudWxsKSB7XG4gICAgICBkZWJ1ZygndXNlIGN1c3RvbSBicm93c2VyIGluc3RhbmNlIHByb3ZpZGVkIGluIG9wdGlvbnMnKTtcbiAgICAgIHRoaXMuYnJvd3NlciA9IHRoaXMub3B0aW9ucy5icm93c2VyO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBleGVjdXRhYmxlUGF0aCA9IHRoaXMub3B0aW9ucy5leGVjdXRhYmxlUGF0aCB8fCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBhcmdzID0gdGhpcy5vcHRpb25zLmFyZ3MgfHwgW107XG4gICAgICBjb25zdCB7IHRpbWVvdXQgfSA9IHRoaXMub3B0aW9ucztcblxuICAgICAgY29uc3QgaGVhZGxlc3MgPSAhdGhpcy5vcHRpb25zLnNob3dCcm93c2VyO1xuICAgICAgZGVidWcoYGxhdW5jaCBhIGJyb3dzZXIgd2l0aCBoZWFkbGVzcyBtb2RlID0gJHtoZWFkbGVzc31gKTtcbiAgICAgIHRoaXMuYnJvd3NlciA9IGF3YWl0IHB1cHBldGVlci5sYXVuY2goe1xuICAgICAgICBlbnYsXG4gICAgICAgIGhlYWRsZXNzLFxuICAgICAgICBleGVjdXRhYmxlUGF0aCxcbiAgICAgICAgYXJncyxcbiAgICAgICAgdGltZW91dCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMucHJlcGFyZUJyb3dzZXIpIHtcbiAgICAgIGRlYnVnKCdleGVjdXRlIFxcJ3ByZXBhcmVCcm93c2VyXFwnIGludGVyY2VwdG9yIHByb3ZpZGVkIGluIG9wdGlvbnMnKTtcbiAgICAgIGF3YWl0IHRoaXMub3B0aW9ucy5wcmVwYXJlQnJvd3Nlcih0aGlzLmJyb3dzZXIpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5icm93c2VyKSB7XG4gICAgICBkZWJ1ZygnZmFpbGVkIHRvIGluaXRpYXRlIGEgYnJvd3NlciwgZXhpdCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VzID0gYXdhaXQgdGhpcy5icm93c2VyLnBhZ2VzKCk7XG4gICAgaWYgKHBhZ2VzLmxlbmd0aCkge1xuICAgICAgZGVidWcoJ2Jyb3dzZXIgaGFzIGFscmVhZHkgcGFnZXMgb3BlbiwgdXNlIHRoZSBmaXJzdCBvbmUnKTtcbiAgICAgIFt0aGlzLnBhZ2VdID0gcGFnZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnKCdjcmVhdGUgYSBuZXcgYnJvd3NlciBwYWdlJyk7XG4gICAgICB0aGlzLnBhZ2UgPSBhd2FpdCB0aGlzLmJyb3dzZXIubmV3UGFnZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZGVmYXVsdFRpbWVvdXQpIHtcbiAgICAgIHRoaXMucGFnZS5zZXREZWZhdWx0VGltZW91dCh0aGlzLm9wdGlvbnMuZGVmYXVsdFRpbWVvdXQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMucHJlcGFyZVBhZ2UpIHtcbiAgICAgIGRlYnVnKCdleGVjdXRlIFxcJ3ByZXBhcmVQYWdlXFwnIGludGVyY2VwdG9yIHByb3ZpZGVkIGluIG9wdGlvbnMnKTtcbiAgICAgIGF3YWl0IHRoaXMub3B0aW9ucy5wcmVwYXJlUGFnZSh0aGlzLnBhZ2UpO1xuICAgIH1cblxuICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy5nZXRWaWV3UG9ydCgpO1xuICAgIGRlYnVnKGBzZXQgdmlld3BvcnQgdG8gd2lkdGggJHt2aWV3cG9ydC53aWR0aH0sIGhlaWdodCAke3ZpZXdwb3J0LmhlaWdodH1gKTtcbiAgICBhd2FpdCB0aGlzLnBhZ2Uuc2V0Vmlld3BvcnQoe1xuICAgICAgd2lkdGg6IHZpZXdwb3J0LndpZHRoLFxuICAgICAgaGVpZ2h0OiB2aWV3cG9ydC5oZWlnaHQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnBhZ2Uub24oJ3JlcXVlc3RmYWlsZWQnLCAocmVxdWVzdCkgPT4ge1xuICAgICAgZGVidWcoJ1JlcXVlc3QgZmFpbGVkOiAlcyAlcycsIHJlcXVlc3QuZmFpbHVyZSgpPy5lcnJvclRleHQsIHJlcXVlc3QudXJsKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbmF2aWdhdGVUbyh1cmw6IHN0cmluZywgcGFnZT86IFBhZ2UsIHRpbWVvdXQ/OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwYWdlVG9Vc2UgPSBwYWdlIHx8IHRoaXMucGFnZTtcblxuICAgIGlmICghcGFnZVRvVXNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHsgLi4uKHRpbWVvdXQgPT09IG51bGwgPyBudWxsIDogeyB0aW1lb3V0IH0pIH07XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBwYWdlVG9Vc2UuZ290byh1cmwsIG9wdGlvbnMpO1xuXG4gICAgLy8gbm90ZTogcmVzcG9uc2Ugd2lsbCBiZSBudWxsIHdoZW4gbmF2aWdhdGluZyB0byBzYW1lIHVybCB3aGlsZSBjaGFuZ2luZyB0aGUgaGFzaCBwYXJ0LiB0aGUgY29uZGl0aW9uIGJlbG93IHdpbGwgYWx3YXlzIGFjY2VwdCBudWxsIGFzIHZhbGlkIHJlc3VsdC5cbiAgICBpZiAocmVzcG9uc2UgIT09IG51bGwgJiYgKHJlc3BvbnNlID09PSB1bmRlZmluZWQgfHwgcmVzcG9uc2Uuc3RhdHVzKCkgIT09IE9LX1NUQVRVUykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIG5hdmlnYXRlIHRvIHVybCAke3VybH1gKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGdldExvZ2luT3B0aW9ucyhfY3JlZGVudGlhbHM6IFNjcmFwZXJDcmVkZW50aWFscyk6IExvZ2luT3B0aW9ucyB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBnZXRMb2dpbk9wdGlvbnMoKSBpcyBub3QgY3JlYXRlZCBpbiAke3RoaXMub3B0aW9ucy5jb21wYW55SWR9YCk7XG4gIH1cblxuICBhc3luYyBmaWxsSW5wdXRzKHBhZ2VPckZyYW1lOiBQYWdlIHwgRnJhbWUsIGZpZWxkczogeyBzZWxlY3Rvcjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nfVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbW9kaWZpZWQgPSBbLi4uZmllbGRzXTtcbiAgICBjb25zdCBpbnB1dCA9IG1vZGlmaWVkLnNoaWZ0KCk7XG5cbiAgICBpZiAoIWlucHV0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IGZpbGxJbnB1dChwYWdlT3JGcmFtZSwgaW5wdXQuc2VsZWN0b3IsIGlucHV0LnZhbHVlKTtcbiAgICBpZiAobW9kaWZpZWQubGVuZ3RoKSB7XG4gICAgICBhd2FpdCB0aGlzLmZpbGxJbnB1dHMocGFnZU9yRnJhbWUsIG1vZGlmaWVkKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2dpbihjcmVkZW50aWFsczogU2NyYXBlckNyZWRlbnRpYWxzKTogUHJvbWlzZTxTY3JhcGVyU2NyYXBpbmdSZXN1bHQ+IHtcbiAgICBpZiAoIWNyZWRlbnRpYWxzIHx8ICF0aGlzLnBhZ2UpIHtcbiAgICAgIHJldHVybiBjcmVhdGVHZW5lcmFsRXJyb3IoKTtcbiAgICB9XG5cbiAgICBkZWJ1ZygnZXhlY3V0ZSBsb2dpbiBwcm9jZXNzJyk7XG4gICAgY29uc3QgbG9naW5PcHRpb25zID0gdGhpcy5nZXRMb2dpbk9wdGlvbnMoY3JlZGVudGlhbHMpO1xuXG4gICAgaWYgKGxvZ2luT3B0aW9ucy51c2VyQWdlbnQpIHtcbiAgICAgIGRlYnVnKCdzZXQgY3VzdG9tIHVzZXIgYWdlbnQgcHJvdmlkZWQgaW4gb3B0aW9ucycpO1xuICAgICAgYXdhaXQgdGhpcy5wYWdlLnNldFVzZXJBZ2VudChsb2dpbk9wdGlvbnMudXNlckFnZW50KTtcbiAgICB9XG5cbiAgICBkZWJ1ZygnbmF2aWdhdGUgdG8gbG9naW4gdXJsJyk7XG4gICAgYXdhaXQgdGhpcy5uYXZpZ2F0ZVRvKGxvZ2luT3B0aW9ucy5sb2dpblVybCk7XG4gICAgaWYgKGxvZ2luT3B0aW9ucy5jaGVja1JlYWRpbmVzcykge1xuICAgICAgZGVidWcoJ2V4ZWN1dGUgXFwnY2hlY2tSZWFkaW5lc3NcXCcgaW50ZXJjZXB0b3IgcHJvdmlkZWQgaW4gbG9naW4gb3B0aW9ucycpO1xuICAgICAgYXdhaXQgbG9naW5PcHRpb25zLmNoZWNrUmVhZGluZXNzKCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbG9naW5PcHRpb25zLnN1Ym1pdEJ1dHRvblNlbGVjdG9yID09PSAnc3RyaW5nJykge1xuICAgICAgZGVidWcoJ3dhaXQgdW50aWwgc3VibWl0IGJ1dHRvbiBpcyBhdmFpbGFibGUnKTtcbiAgICAgIGF3YWl0IHdhaXRVbnRpbEVsZW1lbnRGb3VuZCh0aGlzLnBhZ2UsIGxvZ2luT3B0aW9ucy5zdWJtaXRCdXR0b25TZWxlY3Rvcik7XG4gICAgfVxuXG4gICAgbGV0IGxvZ2luRnJhbWVPclBhZ2U6IChQYWdlIHwgRnJhbWUgfCBudWxsKSA9IHRoaXMucGFnZTtcbiAgICBpZiAobG9naW5PcHRpb25zLnByZUFjdGlvbikge1xuICAgICAgZGVidWcoJ2V4ZWN1dGUgXFwncHJlQWN0aW9uXFwnIGludGVyY2VwdG9yIHByb3ZpZGVkIGluIGxvZ2luIG9wdGlvbnMnKTtcbiAgICAgIGxvZ2luRnJhbWVPclBhZ2UgPSBhd2FpdCBsb2dpbk9wdGlvbnMucHJlQWN0aW9uKCkgfHwgdGhpcy5wYWdlO1xuICAgIH1cblxuICAgIGRlYnVnKCdmaWxsIGxvZ2luIGNvbXBvbmVudHMgaW5wdXQgd2l0aCByZWxldmFudCB2YWx1ZXMnKTtcbiAgICBhd2FpdCB0aGlzLmZpbGxJbnB1dHMobG9naW5GcmFtZU9yUGFnZSwgbG9naW5PcHRpb25zLmZpZWxkcyk7XG4gICAgZGVidWcoJ2NsaWNrIG9uIGxvZ2luIHN1Ym1pdCBidXR0b24nKTtcbiAgICBpZiAodHlwZW9mIGxvZ2luT3B0aW9ucy5zdWJtaXRCdXR0b25TZWxlY3RvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGF3YWl0IGNsaWNrQnV0dG9uKGxvZ2luRnJhbWVPclBhZ2UsIGxvZ2luT3B0aW9ucy5zdWJtaXRCdXR0b25TZWxlY3Rvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IGxvZ2luT3B0aW9ucy5zdWJtaXRCdXR0b25TZWxlY3RvcigpO1xuICAgIH1cbiAgICB0aGlzLmVtaXRQcm9ncmVzcyhTY3JhcGVyUHJvZ3Jlc3NUeXBlcy5Mb2dnaW5nSW4pO1xuXG4gICAgaWYgKGxvZ2luT3B0aW9ucy5wb3N0QWN0aW9uKSB7XG4gICAgICBkZWJ1ZygnZXhlY3V0ZSBcXCdwb3N0QWN0aW9uXFwnIGludGVyY2VwdG9yIHByb3ZpZGVkIGluIGxvZ2luIG9wdGlvbnMnKTtcbiAgICAgIGF3YWl0IGxvZ2luT3B0aW9ucy5wb3N0QWN0aW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnKCd3YWl0IGZvciBwYWdlIG5hdmlnYXRpb24nKTtcbiAgICAgIGF3YWl0IHdhaXRGb3JOYXZpZ2F0aW9uKHRoaXMucGFnZSk7XG4gICAgfVxuXG4gICAgZGVidWcoJ2NoZWNrIGxvZ2luIHJlc3VsdCcpO1xuICAgIGNvbnN0IGN1cnJlbnQgPSBhd2FpdCBnZXRDdXJyZW50VXJsKHRoaXMucGFnZSwgdHJ1ZSk7XG4gICAgY29uc3QgbG9naW5SZXN1bHQgPSBhd2FpdCBnZXRLZXlCeVZhbHVlKGxvZ2luT3B0aW9ucy5wb3NzaWJsZVJlc3VsdHMsIGN1cnJlbnQsIHRoaXMucGFnZSk7XG4gICAgZGVidWcoYGhhbmRsZSBsb2dpbiByZXN1bHRzICR7bG9naW5SZXN1bHR9YCk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlTG9naW5SZXN1bHQobG9naW5SZXN1bHQpO1xuICB9XG5cbiAgYXN5bmMgdGVybWluYXRlKF9zdWNjZXNzOiBib29sZWFuKSB7XG4gICAgZGVidWcoYHRlcm1pbmF0aW5nIGJyb3dzZXIgd2l0aCBzdWNjZXNzID0gJHtfc3VjY2Vzc31gKTtcbiAgICB0aGlzLmVtaXRQcm9ncmVzcyhTY3JhcGVyUHJvZ3Jlc3NUeXBlcy5UZXJtaW5hdGluZyk7XG5cbiAgICBpZiAoIV9zdWNjZXNzICYmICEhdGhpcy5vcHRpb25zLnN0b3JlRmFpbHVyZVNjcmVlblNob3RQYXRoKSB7XG4gICAgICBkZWJ1ZyhgY3JlYXRlIGEgc25hcHNob3QgYmVmb3JlIHRlcm1pbmF0ZWQgaW4gJHt0aGlzLm9wdGlvbnMuc3RvcmVGYWlsdXJlU2NyZWVuU2hvdFBhdGh9YCk7XG4gICAgICBhd2FpdCB0aGlzLnBhZ2Uuc2NyZWVuc2hvdCh7XG4gICAgICAgIHBhdGg6IHRoaXMub3B0aW9ucy5zdG9yZUZhaWx1cmVTY3JlZW5TaG90UGF0aCxcbiAgICAgICAgZnVsbFBhZ2U6IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYnJvd3Nlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuYnJvd3Nlci5jbG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVMb2dpblJlc3VsdChsb2dpblJlc3VsdDogTG9naW5SZXN1bHRzKSB7XG4gICAgc3dpdGNoIChsb2dpblJlc3VsdCkge1xuICAgICAgY2FzZSBMb2dpblJlc3VsdHMuU3VjY2VzczpcbiAgICAgICAgdGhpcy5lbWl0UHJvZ3Jlc3MoU2NyYXBlclByb2dyZXNzVHlwZXMuTG9naW5TdWNjZXNzKTtcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuICAgICAgY2FzZSBMb2dpblJlc3VsdHMuSW52YWxpZFBhc3N3b3JkOlxuICAgICAgY2FzZSBMb2dpblJlc3VsdHMuVW5rbm93bkVycm9yOlxuICAgICAgICB0aGlzLmVtaXRQcm9ncmVzcyhTY3JhcGVyUHJvZ3Jlc3NUeXBlcy5Mb2dpbkZhaWxlZCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgZXJyb3JUeXBlOiBsb2dpblJlc3VsdCA9PT0gTG9naW5SZXN1bHRzLkludmFsaWRQYXNzd29yZCA/IFNjcmFwZXJFcnJvclR5cGVzLkludmFsaWRQYXNzd29yZCA6XG4gICAgICAgICAgICBTY3JhcGVyRXJyb3JUeXBlcy5HZW5lcmFsLFxuICAgICAgICAgIGVycm9yTWVzc2FnZTogYExvZ2luIGZhaWxlZCB3aXRoICR7bG9naW5SZXN1bHR9IGVycm9yYCxcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgTG9naW5SZXN1bHRzLkNoYW5nZVBhc3N3b3JkOlxuICAgICAgICB0aGlzLmVtaXRQcm9ncmVzcyhTY3JhcGVyUHJvZ3Jlc3NUeXBlcy5DaGFuZ2VQYXNzd29yZCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgZXJyb3JUeXBlOiBTY3JhcGVyRXJyb3JUeXBlcy5DaGFuZ2VQYXNzd29yZCxcbiAgICAgICAgfTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCBsb2dpbiByZXN1bHQgXCIke2xvZ2luUmVzdWx0fVwiYCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7IEJhc2VTY3JhcGVyV2l0aEJyb3dzZXIgfTtcbiJdfQ==
|
|
@@ -1,14 +1,5 @@
|
|
|
1
1
|
import { Scraper, ScraperCredentials, ScraperGetLongTermTwoFactorTokenResult, ScraperLoginResult, ScraperOptions, ScraperScrapingResult, ScraperTwoFactorAuthTriggerResult } from './interface';
|
|
2
|
-
|
|
3
|
-
Initializing = "INITIALIZING",
|
|
4
|
-
StartScraping = "START_SCRAPING",
|
|
5
|
-
LoggingIn = "LOGGING_IN",
|
|
6
|
-
LoginSuccess = "LOGIN_SUCCESS",
|
|
7
|
-
LoginFailed = "LOGIN_FAILED",
|
|
8
|
-
ChangePassword = "CHANGE_PASSWORD",
|
|
9
|
-
EndScraping = "END_SCRAPING",
|
|
10
|
-
Terminating = "TERMINATING"
|
|
11
|
-
}
|
|
2
|
+
import { CompanyTypes, ScraperProgressTypes } from '../definitions';
|
|
12
3
|
export declare class BaseScraper<TCredentials extends ScraperCredentials> implements Scraper<TCredentials> {
|
|
13
4
|
options: ScraperOptions;
|
|
14
5
|
private eventEmitter;
|
|
@@ -17,10 +8,12 @@ export declare class BaseScraper<TCredentials extends ScraperCredentials> implem
|
|
|
17
8
|
scrape(credentials: TCredentials): Promise<ScraperScrapingResult>;
|
|
18
9
|
triggerTwoFactorAuth(_phoneNumber: string): Promise<ScraperTwoFactorAuthTriggerResult>;
|
|
19
10
|
getLongTermTwoFactorToken(_otpCode: string): Promise<ScraperGetLongTermTwoFactorTokenResult>;
|
|
20
|
-
login(_credentials: TCredentials): Promise<ScraperLoginResult>;
|
|
21
|
-
fetchData(): Promise<ScraperScrapingResult>;
|
|
22
|
-
terminate(_success: boolean): Promise<void>;
|
|
23
|
-
emitProgress(type: ScraperProgressTypes): void;
|
|
24
|
-
emit(eventName: string, payload: Record<string, any>): void;
|
|
25
|
-
onProgress(func: (
|
|
11
|
+
protected login(_credentials: TCredentials): Promise<ScraperLoginResult>;
|
|
12
|
+
protected fetchData(): Promise<ScraperScrapingResult>;
|
|
13
|
+
protected terminate(_success: boolean): Promise<void>;
|
|
14
|
+
protected emitProgress(type: ScraperProgressTypes): void;
|
|
15
|
+
protected emit(eventName: string, payload: Record<string, any>): void;
|
|
16
|
+
onProgress(func: (companyId: CompanyTypes, payload: {
|
|
17
|
+
type: ScraperProgressTypes;
|
|
18
|
+
}) => void): void;
|
|
26
19
|
}
|
|
@@ -5,7 +5,7 @@ require("core-js/modules/es.promise");
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.BaseScraper =
|
|
8
|
+
exports.BaseScraper = void 0;
|
|
9
9
|
|
|
10
10
|
var _events = require("events");
|
|
11
11
|
|
|
@@ -15,24 +15,13 @@ var _waiting = require("../helpers/waiting");
|
|
|
15
15
|
|
|
16
16
|
var _errors = require("./errors");
|
|
17
17
|
|
|
18
|
+
var _definitions = require("../definitions");
|
|
19
|
+
|
|
18
20
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
21
|
|
|
20
22
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
21
23
|
|
|
22
24
|
const SCRAPE_PROGRESS = 'SCRAPE_PROGRESS';
|
|
23
|
-
let ScraperProgressTypes;
|
|
24
|
-
exports.ScraperProgressTypes = ScraperProgressTypes;
|
|
25
|
-
|
|
26
|
-
(function (ScraperProgressTypes) {
|
|
27
|
-
ScraperProgressTypes["Initializing"] = "INITIALIZING";
|
|
28
|
-
ScraperProgressTypes["StartScraping"] = "START_SCRAPING";
|
|
29
|
-
ScraperProgressTypes["LoggingIn"] = "LOGGING_IN";
|
|
30
|
-
ScraperProgressTypes["LoginSuccess"] = "LOGIN_SUCCESS";
|
|
31
|
-
ScraperProgressTypes["LoginFailed"] = "LOGIN_FAILED";
|
|
32
|
-
ScraperProgressTypes["ChangePassword"] = "CHANGE_PASSWORD";
|
|
33
|
-
ScraperProgressTypes["EndScraping"] = "END_SCRAPING";
|
|
34
|
-
ScraperProgressTypes["Terminating"] = "TERMINATING";
|
|
35
|
-
})(ScraperProgressTypes || (exports.ScraperProgressTypes = ScraperProgressTypes = {}));
|
|
36
25
|
|
|
37
26
|
class BaseScraper {
|
|
38
27
|
constructor(options) {
|
|
@@ -43,13 +32,13 @@ class BaseScraper {
|
|
|
43
32
|
|
|
44
33
|
|
|
45
34
|
async initialize() {
|
|
46
|
-
this.emitProgress(ScraperProgressTypes.Initializing);
|
|
35
|
+
this.emitProgress(_definitions.ScraperProgressTypes.Initializing);
|
|
47
36
|
|
|
48
37
|
_momentTimezone.default.tz.setDefault('Asia/Jerusalem');
|
|
49
38
|
}
|
|
50
39
|
|
|
51
40
|
async scrape(credentials) {
|
|
52
|
-
this.emitProgress(ScraperProgressTypes.StartScraping);
|
|
41
|
+
this.emitProgress(_definitions.ScraperProgressTypes.StartScraping);
|
|
53
42
|
await this.initialize();
|
|
54
43
|
let loginResult;
|
|
55
44
|
|
|
@@ -78,7 +67,7 @@ class BaseScraper {
|
|
|
78
67
|
scrapeResult = (0, _errors.createGenericError)(e.message);
|
|
79
68
|
}
|
|
80
69
|
|
|
81
|
-
this.emitProgress(ScraperProgressTypes.EndScraping);
|
|
70
|
+
this.emitProgress(_definitions.ScraperProgressTypes.EndScraping);
|
|
82
71
|
return scrapeResult;
|
|
83
72
|
} // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/require-await
|
|
84
73
|
|
|
@@ -104,7 +93,7 @@ class BaseScraper {
|
|
|
104
93
|
|
|
105
94
|
|
|
106
95
|
async terminate(_success) {
|
|
107
|
-
this.emitProgress(ScraperProgressTypes.Terminating);
|
|
96
|
+
this.emitProgress(_definitions.ScraperProgressTypes.Terminating);
|
|
108
97
|
}
|
|
109
98
|
|
|
110
99
|
emitProgress(type) {
|
|
@@ -124,4 +113,4 @@ class BaseScraper {
|
|
|
124
113
|
}
|
|
125
114
|
|
|
126
115
|
exports.BaseScraper = BaseScraper;
|
|
127
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
116
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9iYXNlLXNjcmFwZXIudHMiXSwibmFtZXMiOlsiU0NSQVBFX1BST0dSRVNTIiwiQmFzZVNjcmFwZXIiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJFdmVudEVtaXR0ZXIiLCJpbml0aWFsaXplIiwiZW1pdFByb2dyZXNzIiwiU2NyYXBlclByb2dyZXNzVHlwZXMiLCJJbml0aWFsaXppbmciLCJtb21lbnQiLCJ0eiIsInNldERlZmF1bHQiLCJzY3JhcGUiLCJjcmVkZW50aWFscyIsIlN0YXJ0U2NyYXBpbmciLCJsb2dpblJlc3VsdCIsImxvZ2luIiwiZSIsIlRpbWVvdXRFcnJvciIsIm1lc3NhZ2UiLCJzY3JhcGVSZXN1bHQiLCJzdWNjZXNzIiwiZmV0Y2hEYXRhIiwidGVybWluYXRlIiwiRW5kU2NyYXBpbmciLCJ0cmlnZ2VyVHdvRmFjdG9yQXV0aCIsIl9waG9uZU51bWJlciIsIkVycm9yIiwiY29tcGFueUlkIiwiZ2V0TG9uZ1Rlcm1Ud29GYWN0b3JUb2tlbiIsIl9vdHBDb2RlIiwiX2NyZWRlbnRpYWxzIiwiX3N1Y2Nlc3MiLCJUZXJtaW5hdGluZyIsInR5cGUiLCJlbWl0IiwiZXZlbnROYW1lIiwicGF5bG9hZCIsImV2ZW50RW1pdHRlciIsIm9uUHJvZ3Jlc3MiLCJmdW5jIiwib24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQVVBOzs7Ozs7QUFFQSxNQUFNQSxlQUFlLEdBQUcsaUJBQXhCOztBQUdPLE1BQU1DLFdBQU4sQ0FBNEY7QUFHakdDLEVBQUFBLFdBQVcsQ0FBUUMsT0FBUixFQUFpQztBQUFBLFNBQXpCQSxPQUF5QixHQUF6QkEsT0FBeUI7O0FBQUEsMENBRnJCLElBQUlDLG9CQUFKLEVBRXFCO0FBQzNDLEdBSmdHLENBTWpHOzs7QUFDQSxRQUFNQyxVQUFOLEdBQW1CO0FBQ2pCLFNBQUtDLFlBQUwsQ0FBa0JDLGtDQUFxQkMsWUFBdkM7O0FBQ0FDLDRCQUFPQyxF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QUwsQ0FBa0JHLEVBQWxCLENBQXFCekMsZUFBckIsRUFBc0N3QyxJQUF0QztBQUNEOztBQXJGZ0ciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuaW1wb3J0IHsgVGltZW91dEVycm9yIH0gZnJvbSAnLi4vaGVscGVycy93YWl0aW5nJztcbmltcG9ydCB7IGNyZWF0ZUdlbmVyaWNFcnJvciwgY3JlYXRlVGltZW91dEVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHtcbiAgU2NyYXBlcixcbiAgU2NyYXBlckNyZWRlbnRpYWxzLFxuICBTY3JhcGVyR2V0TG9uZ1Rlcm1Ud29GYWN0b3JUb2tlblJlc3VsdCxcbiAgU2NyYXBlckxvZ2luUmVzdWx0LFxuICBTY3JhcGVyT3B0aW9ucyxcbiAgU2NyYXBlclNjcmFwaW5nUmVzdWx0LFxuICBTY3JhcGVyVHdvRmFjdG9yQXV0aFRyaWdnZXJSZXN1bHQsXG59IGZyb20gJy4vaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbXBhbnlUeXBlcywgU2NyYXBlclByb2dyZXNzVHlwZXMgfSBmcm9tICcuLi9kZWZpbml0aW9ucyc7XG5cbmNvbnN0IFNDUkFQRV9QUk9HUkVTUyA9ICdTQ1JBUEVfUFJPR1JFU1MnO1xuXG5cbmV4cG9ydCBjbGFzcyBCYXNlU2NyYXBlcjxUQ3JlZGVudGlhbHMgZXh0ZW5kcyBTY3JhcGVyQ3JlZGVudGlhbHM+IGltcGxlbWVudHMgU2NyYXBlcjxUQ3JlZGVudGlhbHM+IHtcbiAgcHJpdmF0ZSBldmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIG9wdGlvbnM6IFNjcmFwZXJPcHRpb25zKSB7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgIEB0eXBlc2NyaXB0LWVzbGludC9yZXF1aXJlLWF3YWl0XG4gIGFzeW5jIGluaXRpYWxpemUoKSB7XG4gICAgdGhpcy5lbWl0UHJvZ3Jlc3MoU2NyYXBlclByb2dyZXNzVHlwZXMuSW5pdGlhbGl6aW5nKTtcbiAgICBtb21lbnQudHouc2V0RGVmYXVsdCgnQXNpYS9KZXJ1c2FsZW0nKTtcbiAgfVxuXG4gIGFzeW5jIHNjcmFwZShjcmVkZW50aWFsczogVENyZWRlbnRpYWxzKTogUHJvbWlzZTxTY3JhcGVyU2NyYXBpbmdSZXN1bHQ+IHtcbiAgICB0aGlzLmVtaXRQcm9ncmVzcyhTY3JhcGVyUHJvZ3Jlc3NUeXBlcy5TdGFydFNjcmFwaW5nKTtcbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemUoKTtcblxuICAgIGxldCBsb2dpblJlc3VsdDtcbiAgICB0cnkge1xuICAgICAgbG9naW5SZXN1bHQgPSBhd2FpdCB0aGlzLmxvZ2luKGNyZWRlbnRpYWxzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dpblJlc3VsdCA9IGUgaW5zdGFuY2VvZiBUaW1lb3V0RXJyb3IgP1xuICAgICAgICBjcmVhdGVUaW1lb3V0RXJyb3IoZS5tZXNzYWdlKSA6XG4gICAgICAgIGNyZWF0ZUdlbmVyaWNFcnJvcihlLm1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGxldCBzY3JhcGVSZXN1bHQ7XG4gICAgaWYgKGxvZ2luUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNjcmFwZVJlc3VsdCA9IGF3YWl0IHRoaXMuZmV0Y2hEYXRhKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNjcmFwZVJlc3VsdCA9XG4gICAgICAgICAgZSBpbnN0YW5jZW9mIFRpbWVvdXRFcnJvciA/XG4gICAgICAgICAgICBjcmVhdGVUaW1lb3V0RXJyb3IoZS5tZXNzYWdlKSA6XG4gICAgICAgICAgICBjcmVhdGVHZW5lcmljRXJyb3IoZS5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2NyYXBlUmVzdWx0ID0gbG9naW5SZXN1bHQ7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBzY3JhcGVSZXN1bHQgJiYgc2NyYXBlUmVzdWx0LnN1Y2Nlc3MgPT09IHRydWU7XG4gICAgICBhd2FpdCB0aGlzLnRlcm1pbmF0ZShzdWNjZXNzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBzY3JhcGVSZXN1bHQgPSBjcmVhdGVHZW5lcmljRXJyb3IoZS5tZXNzYWdlKTtcbiAgICB9XG4gICAgdGhpcy5lbWl0UHJvZ3Jlc3MoU2NyYXBlclByb2dyZXNzVHlwZXMuRW5kU2NyYXBpbmcpO1xuXG4gICAgcmV0dXJuIHNjcmFwZVJlc3VsdDtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9yZXF1aXJlLWF3YWl0XG4gIHRyaWdnZXJUd29GYWN0b3JBdXRoKF9waG9uZU51bWJlcjogc3RyaW5nKTogUHJvbWlzZTxTY3JhcGVyVHdvRmFjdG9yQXV0aFRyaWdnZXJSZXN1bHQ+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHRyaWdnZXJPdHAoKSBpcyBub3QgY3JlYXRlZCBpbiAke3RoaXMub3B0aW9ucy5jb21wYW55SWR9YCk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzLCBAdHlwZXNjcmlwdC1lc2xpbnQvcmVxdWlyZS1hd2FpdFxuICBnZXRMb25nVGVybVR3b0ZhY3RvclRva2VuKF9vdHBDb2RlOiBzdHJpbmcpOiBQcm9taXNlPFNjcmFwZXJHZXRMb25nVGVybVR3b0ZhY3RvclRva2VuUmVzdWx0PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBnZXRQZXJtYW5lbnRPdHBUb2tlbigpIGlzIG5vdCBjcmVhdGVkIGluICR7dGhpcy5vcHRpb25zLmNvbXBhbnlJZH1gKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9yZXF1aXJlLWF3YWl0XG4gIHByb3RlY3RlZCBhc3luYyBsb2dpbihfY3JlZGVudGlhbHM6IFRDcmVkZW50aWFscyk6IFByb21pc2U8U2NyYXBlckxvZ2luUmVzdWx0PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBsb2dpbigpIGlzIG5vdCBjcmVhdGVkIGluICR7dGhpcy5vcHRpb25zLmNvbXBhbnlJZH1gKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSAgQHR5cGVzY3JpcHQtZXNsaW50L3JlcXVpcmUtYXdhaXRcbiAgcHJvdGVjdGVkIGFzeW5jIGZldGNoRGF0YSgpOiBQcm9taXNlPFNjcmFwZXJTY3JhcGluZ1Jlc3VsdD4ge1xuICAgIHRocm93IG5ldyBFcnJvcihgZmV0Y2hEYXRhKCkgaXMgbm90IGNyZWF0ZWQgaW4gJHt0aGlzLm9wdGlvbnMuY29tcGFueUlkfWApO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycywgQHR5cGVzY3JpcHQtZXNsaW50L3JlcXVpcmUtYXdhaXRcbiAgcHJvdGVjdGVkIGFzeW5jIHRlcm1pbmF0ZShfc3VjY2VzczogYm9vbGVhbikge1xuICAgIHRoaXMuZW1pdFByb2dyZXNzKFNjcmFwZXJQcm9ncmVzc1R5cGVzLlRlcm1pbmF0aW5nKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlbWl0UHJvZ3Jlc3ModHlwZTogU2NyYXBlclByb2dyZXNzVHlwZXMpIHtcbiAgICB0aGlzLmVtaXQoU0NSQVBFX1BST0dSRVNTLCB7IHR5cGUgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZW1pdChldmVudE5hbWU6IHN0cmluZywgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIHRoaXMuZXZlbnRFbWl0dGVyLmVtaXQoZXZlbnROYW1lLCB0aGlzLm9wdGlvbnMuY29tcGFueUlkLCBwYXlsb2FkKTtcbiAgfVxuXG4gIG9uUHJvZ3Jlc3MoZnVuYzogKGNvbXBhbnlJZDogQ29tcGFueVR5cGVzLCBwYXlsb2FkOiB7dHlwZTogU2NyYXBlclByb2dyZXNzVHlwZXN9KSA9PiB2b2lkKSB7XG4gICAgdGhpcy5ldmVudEVtaXR0ZXIub24oU0NSQVBFX1BST0dSRVNTLCBmdW5jKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _definitions = require("../definitions");
|
|
4
|
+
|
|
5
|
+
var _factory = _interopRequireDefault(require("./factory"));
|
|
6
|
+
|
|
7
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
8
|
+
|
|
9
|
+
/* eslint-disable @typescript-eslint/unbound-method */
|
|
10
|
+
describe('Factory', () => {
|
|
11
|
+
test('should return a scraper instance', () => {
|
|
12
|
+
const scraper = (0, _factory.default)({
|
|
13
|
+
companyId: _definitions.CompanyTypes.hapoalim,
|
|
14
|
+
startDate: new Date()
|
|
15
|
+
});
|
|
16
|
+
expect(scraper).toBeDefined();
|
|
17
|
+
expect(scraper.scrape).toBeInstanceOf(Function);
|
|
18
|
+
expect(scraper.onProgress).toBeInstanceOf(Function);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9mYWN0b3J5LnRlc3QudHMiXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJ0ZXN0Iiwic2NyYXBlciIsImNvbXBhbnlJZCIsIkNvbXBhbnlUeXBlcyIsImhhcG9hbGltIiwic3RhcnREYXRlIiwiRGF0ZSIsImV4cGVjdCIsInRvQmVEZWZpbmVkIiwic2NyYXBlIiwidG9CZUluc3RhbmNlT2YiLCJGdW5jdGlvbiIsIm9uUHJvZ3Jlc3MiXSwibWFwcGluZ3MiOiI7O0FBQ0E7O0FBQ0E7Ozs7QUFGQTtBQUlBQSxRQUFRLENBQUMsU0FBRCxFQUFZLE1BQU07QUFDeEJDLEVBQUFBLElBQUksQ0FBQyxrQ0FBRCxFQUFxQyxNQUFNO0FBQzdDLFVBQU1DLE9BQU8sR0FBRyxzQkFBYztBQUM1QkMsTUFBQUEsU0FBUyxFQUFFQywwQkFBYUMsUUFESTtBQUU1QkMsTUFBQUEsU0FBUyxFQUFFLElBQUlDLElBQUo7QUFGaUIsS0FBZCxDQUFoQjtBQUlBQyxJQUFBQSxNQUFNLENBQUNOLE9BQUQsQ0FBTixDQUFnQk8sV0FBaEI7QUFFQUQsSUFBQUEsTUFBTSxDQUFDTixPQUFPLENBQUNRLE1BQVQsQ0FBTixDQUF1QkMsY0FBdkIsQ0FBc0NDLFFBQXRDO0FBQ0FKLElBQUFBLE1BQU0sQ0FBQ04sT0FBTyxDQUFDVyxVQUFULENBQU4sQ0FBMkJGLGNBQTNCLENBQTBDQyxRQUExQztBQUNELEdBVEcsQ0FBSjtBQVVELENBWE8sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZCAqL1xuaW1wb3J0IHsgQ29tcGFueVR5cGVzIH0gZnJvbSAnLi4vZGVmaW5pdGlvbnMnO1xuaW1wb3J0IGNyZWF0ZVNjcmFwZXIgZnJvbSAnLi9mYWN0b3J5JztcblxuZGVzY3JpYmUoJ0ZhY3RvcnknLCAoKSA9PiB7XG4gIHRlc3QoJ3Nob3VsZCByZXR1cm4gYSBzY3JhcGVyIGluc3RhbmNlJywgKCkgPT4ge1xuICAgIGNvbnN0IHNjcmFwZXIgPSBjcmVhdGVTY3JhcGVyKHtcbiAgICAgIGNvbXBhbnlJZDogQ29tcGFueVR5cGVzLmhhcG9hbGltLFxuICAgICAgc3RhcnREYXRlOiBuZXcgRGF0ZSgpLFxuICAgIH0pO1xuICAgIGV4cGVjdChzY3JhcGVyKS50b0JlRGVmaW5lZCgpO1xuXG4gICAgZXhwZWN0KHNjcmFwZXIuc2NyYXBlKS50b0JlSW5zdGFuY2VPZihGdW5jdGlvbik7XG4gICAgZXhwZWN0KHNjcmFwZXIub25Qcm9ncmVzcykudG9CZUluc3RhbmNlT2YoRnVuY3Rpb24pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Browser, Page } from 'puppeteer';
|
|
2
|
-
import { CompanyTypes } from '../definitions';
|
|
2
|
+
import { CompanyTypes, ScraperProgressTypes } from '../definitions';
|
|
3
3
|
import { TransactionsAccount } from '../transactions';
|
|
4
4
|
import { ErrorResult, ScraperErrorTypes } from './errors';
|
|
5
5
|
export declare type ScraperCredentials = {
|
|
@@ -130,6 +130,11 @@ export interface ScraperScrapingResult {
|
|
|
130
130
|
}
|
|
131
131
|
export interface Scraper<TCredentials extends ScraperCredentials> {
|
|
132
132
|
scrape(credentials: TCredentials): Promise<ScraperScrapingResult>;
|
|
133
|
+
onProgress(func: (companyId: CompanyTypes, payload: {
|
|
134
|
+
type: ScraperProgressTypes;
|
|
135
|
+
}) => void): void;
|
|
136
|
+
triggerTwoFactorAuth(phoneNumber: string): Promise<ScraperTwoFactorAuthTriggerResult>;
|
|
137
|
+
getLongTermTwoFactorToken(otpCode: string): Promise<ScraperGetLongTermTwoFactorTokenResult>;
|
|
133
138
|
}
|
|
134
139
|
export declare type ScraperTwoFactorAuthTriggerResult = ErrorResult | {
|
|
135
140
|
success: true;
|
package/lib/scrapers/visa-cal.js
CHANGED
|
@@ -128,7 +128,8 @@ function convertParsedDataToTransactions(parsedData) {
|
|
|
128
128
|
processedDate: transaction.debCrdDate,
|
|
129
129
|
status: _transactions2.TransactionStatuses.Completed,
|
|
130
130
|
date: installments ? date.add(installments.number - 1, 'month').toISOString() : date.toISOString(),
|
|
131
|
-
type: [trnTypeCode.regular, trnTypeCode.standingOrder].includes(transaction.trnTypeCode) ? _transactions2.TransactionTypes.Normal : _transactions2.TransactionTypes.Installments
|
|
131
|
+
type: [trnTypeCode.regular, trnTypeCode.standingOrder].includes(transaction.trnTypeCode) ? _transactions2.TransactionTypes.Normal : _transactions2.TransactionTypes.Installments,
|
|
132
|
+
memo: transaction.transTypeCommentDetails.toString() || undefined
|
|
132
133
|
};
|
|
133
134
|
|
|
134
135
|
if (installments) {
|
|
@@ -161,7 +162,7 @@ class VisaCalScraper extends _baseScraperWithBrowser.BaseScraperWithBrowser {
|
|
|
161
162
|
}
|
|
162
163
|
|
|
163
164
|
async getCards() {
|
|
164
|
-
const initData = await (0, _storage.getFromSessionStorage)(this.page, 'init');
|
|
165
|
+
const initData = await (0, _waiting.waitUntil)(() => (0, _storage.getFromSessionStorage)(this.page, 'init'), 'get init data in session storage', 10000, 1000);
|
|
165
166
|
|
|
166
167
|
if (!initData) {
|
|
167
168
|
throw new Error('could not find \'init\' data in session storage');
|
|
@@ -241,9 +242,7 @@ class VisaCalScraper extends _baseScraperWithBrowser.BaseScraperWithBrowser {
|
|
|
241
242
|
const startMoment = _moment.default.max(defaultStartMoment, (0, _moment.default)(startDate));
|
|
242
243
|
|
|
243
244
|
debug(`fetch transactions starting ${startMoment.format()}`);
|
|
244
|
-
const Authorization = await this.getAuthorizationHeader();
|
|
245
|
-
|
|
246
|
-
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
245
|
+
const Authorization = await this.getAuthorizationHeader();
|
|
247
246
|
const cards = await this.getCards();
|
|
248
247
|
const xSiteId = await this.getXSiteId();
|
|
249
248
|
const futureMonthsToScrape = (_this$options$futureM = this.options.futureMonthsToScrape) !== null && _this$options$futureM !== void 0 ? _this$options$futureM : 1;
|
|
@@ -295,4 +294,4 @@ class VisaCalScraper extends _baseScraperWithBrowser.BaseScraperWithBrowser {
|
|
|
295
294
|
|
|
296
295
|
var _default = VisaCalScraper;
|
|
297
296
|
exports.default = _default;
|
|
298
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy92aXNhLWNhbC50cyJdLCJuYW1lcyI6WyJMT0dJTl9VUkwiLCJUUkFOU0FDVElPTlNfUkVRVUVTVF9FTkRQT0lOVCIsIkludmFsaWRQYXNzd29yZE1lc3NhZ2UiLCJkZWJ1ZyIsInRyblR5cGVDb2RlIiwiZ2V0TG9naW5GcmFtZSIsInBhZ2UiLCJmcmFtZSIsImZyYW1lcyIsImZpbmQiLCJmIiwidXJsIiwiaW5jbHVkZXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsIkVycm9yIiwiaGFzSW52YWxpZFBhc3N3b3JkRXJyb3IiLCJlcnJvckZvdW5kIiwiZXJyb3JNZXNzYWdlIiwiaXRlbSIsImlubmVyVGV4dCIsImdldFBvc3NpYmxlTG9naW5SZXN1bHRzIiwidXJscyIsIkxvZ2luUmVzdWx0cyIsIlN1Y2Nlc3MiLCJJbnZhbGlkUGFzc3dvcmQiLCJvcHRpb25zIiwiY3JlYXRlTG9naW5GaWVsZHMiLCJjcmVkZW50aWFscyIsInNlbGVjdG9yIiwidmFsdWUiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwiY29udmVydFBhcnNlZERhdGFUb1RyYW5zYWN0aW9ucyIsInBhcnNlZERhdGEiLCJmbGF0TWFwIiwibW9udGhEYXRhIiwicmVzdWx0IiwiYmFua0FjY291bnRzIiwiYWNjb3VudHMiLCJkZWJpdERhdGVzIiwiZGViaXREYXRlIiwidHJhbnNhY3Rpb25zIiwibWFwIiwidHJhbnNhY3Rpb24iLCJpbnN0YWxsbWVudHMiLCJjdXJQYXltZW50TnVtIiwibnVtT2ZQYXltZW50cyIsIm51bWJlciIsInRvdGFsIiwidW5kZWZpbmVkIiwiZGF0ZSIsInRyblB1cmNoYXNlRGF0ZSIsImNoYXJnZWRBbW91bnQiLCJhbXRCZWZvcmVDb252QW5kSW5kZXgiLCJvcmlnaW5hbEFtb3VudCIsInRybkFtdCIsImNyZWRpdCIsImRlc2NyaXB0aW9uIiwibWVyY2hhbnROYW1lIiwib3JpZ2luYWxDdXJyZW5jeSIsInRybkN1cnJlbmN5U3ltYm9sIiwicHJvY2Vzc2VkRGF0ZSIsImRlYkNyZERhdGUiLCJzdGF0dXMiLCJUcmFuc2FjdGlvblN0YXR1c2VzIiwiQ29tcGxldGVkIiwiYWRkIiwidG9JU09TdHJpbmciLCJ0eXBlIiwicmVndWxhciIsInN0YW5kaW5nT3JkZXIiLCJUcmFuc2FjdGlvblR5cGVzIiwiTm9ybWFsIiwiSW5zdGFsbG1lbnRzIiwiVmlzYUNhbFNjcmFwZXIiLCJCYXNlU2NyYXBlcldpdGhCcm93c2VyIiwiZ2V0Q2FyZHMiLCJpbml0RGF0YSIsImNhcmRzIiwiY2FyZFVuaXF1ZUlkIiwibGFzdDREaWdpdHMiLCJnZXRBdXRob3JpemF0aW9uSGVhZGVyIiwiYXV0aE1vZHVsZSIsImF1dGgiLCJjYWxDb25uZWN0VG9rZW4iLCJnZXRYU2l0ZUlkIiwiZ2V0TG9naW5PcHRpb25zIiwibG9naW5VcmwiLCJmaWVsZHMiLCJzdWJtaXRCdXR0b25TZWxlY3RvciIsInBvc3NpYmxlUmVzdWx0cyIsImNoZWNrUmVhZGluZXNzIiwicHJlQWN0aW9uIiwib3BlbkxvZ2luUG9wdXAiLCJwb3N0QWN0aW9uIiwiY3VycmVudFVybCIsImVuZHNXaXRoIiwiZSIsInVzZXJBZ2VudCIsImlzQ2FyZFRyYW5zYWN0aW9uRGV0YWlscyIsImZldGNoRGF0YSIsImRlZmF1bHRTdGFydE1vbWVudCIsInN1YnRyYWN0Iiwic3RhcnREYXRlIiwidG9EYXRlIiwic3RhcnRNb21lbnQiLCJtb21lbnQiLCJtYXgiLCJmb3JtYXQiLCJBdXRob3JpemF0aW9uIiwic2V0VGltZW91dCIsInhTaXRlSWQiLCJmdXR1cmVNb250aHNUb1NjcmFwZSIsImFsbCIsImNhcmQiLCJmaW5hbE1vbnRoVG9GZXRjaE1vbWVudCIsIm1vbnRocyIsImRpZmYiLCJhbGxNb250aHNEYXRhIiwiaSIsIm1vbnRoIiwiY2xvbmUiLCJ5ZWFyIiwic3RhdHVzQ29kZSIsInRpdGxlIiwicHVzaCIsInR4bnMiLCJvdXRwdXREYXRhIiwiZW5hYmxlVHJhbnNhY3Rpb25zRmlsdGVyQnlEYXRlIiwiY29tYmluZUlu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QUFHLG9EQUFDLEtBQUtyRyxPQUFMLENBQWFzRyxVQUFkLDJEQUFDLHVCQUF5QkMsOEJBQTFCLHlFQUE0RCxJQUE1RCxJQUNYLHlDQUFzQnZGLFlBQXRCLEVBQW9DLHFCQUFPOEQsU0FBUCxDQUFwQyxFQUF1RCxLQUFLOUUsT0FBTCxDQUFhd0csbUJBQWIsSUFBb0MsS0FBM0YsQ0FEVyxHQUVYeEYsWUFGRjtBQUlBLGFBQU87QUFDTHFGLFFBQUFBLElBREs7QUFFTEksUUFBQUEsYUFBYSxFQUFFaEIsSUFBSSxDQUFDbEM7QUFGZixPQUFQO0FBSUQsS0F2Q0QsQ0FEcUIsQ0FBdkI7QUEyQ0E5RSxJQUFBQSxLQUFLLENBQUMsNkJBQUQsQ0FBTDtBQUVBQSxJQUFBQSxLQUFLLENBQUNpSSxJQUFJLENBQUNDLFNBQUwsQ0FBZTlGLFFBQWYsRUFBeUIsSUFBekIsRUFBK0IsQ0FBL0IsQ0FBRCxDQUFMO0FBQ0EsV0FBTztBQUNMK0YsTUFBQUEsT0FBTyxFQUFFLElBREo7QUFFTC9GLE1BQUFBO0FBRkssS0FBUDtBQUlEOztBQWpKNkU7O2VBb0pqRW9DLGMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBGcmFtZSwgUGFnZSB9IGZyb20gJ3B1cHBldGVlcic7XG5cbmltcG9ydCB7IGdldERlYnVnIH0gZnJvbSAnLi4vaGVscGVycy9kZWJ1Zyc7XG5pbXBvcnQge1xuICBjbGlja0J1dHRvbiwgZWxlbWVudFByZXNlbnRPblBhZ2UsIHBhZ2VFdmFsLCB3YWl0VW50aWxFbGVtZW50Rm91bmQsXG59IGZyb20gJy4uL2hlbHBlcnMvZWxlbWVudHMtaW50ZXJhY3Rpb25zJztcbmltcG9ydCB7IGZldGNoUG9zdFdpdGhpblBhZ2UgfSBmcm9tICcuLi9oZWxwZXJzL2ZldGNoJztcbmltcG9ydCB7IGdldEN1cnJlbnRVcmwgfSBmcm9tICcuLi9oZWxwZXJzL25hdmlnYXRpb24nO1xuaW1wb3J0IHsgZ2V0RnJvbVNlc3Npb25TdG9yYWdlIH0gZnJvbSAnLi4vaGVscGVycy9zdG9yYWdlJztcbmltcG9ydCB7IGZpbHRlck9sZFRyYW5zYWN0aW9ucyB9IGZyb20gJy4uL2hlbHBlcnMvdHJhbnNhY3Rpb25zJztcbmltcG9ydCB7IHdhaXRVbnRpbCB9IGZyb20gJy4uL2hlbHBlcnMvd2FpdGluZyc7XG5pbXBvcnQge1xuICBUcmFuc2FjdGlvbixcbiAgVHJhbnNhY3Rpb25TdGF0dXNlcyxcbiAgVHJhbnNhY3Rpb25UeXBlcyxcbiAgVHJhbnNhY3Rpb25zQWNjb3VudCxcbn0gZnJvbSAnLi4vdHJhbnNhY3Rpb25zJztcbmltcG9ydCB7IEJhc2VTY3JhcGVyV2l0aEJyb3dzZXIsIExvZ2luT3B0aW9ucywgTG9naW5SZXN1bHRzIH0gZnJvbSAnLi9iYXNlLXNjcmFwZXItd2l0aC1icm93c2VyJztcbmltcG9ydCB7IFNjcmFwZXJTY3JhcGluZ1Jlc3VsdCB9IGZyb20gJy4vaW50ZXJmYWNlJztcblxuY29uc3QgTE9HSU5fVVJMID0gJ2h0dHBzOi8vd3d3LmNhbC1vbmxpbmUuY28uaWwvJztcbmNvbnN0IFRSQU5TQUNUSU9OU19SRVFVRVNUX0VORFBPSU5UID0gJ2h0dHBzOi8vYXBpLmNhbC1vbmxpbmUuY28uaWwvVHJhbnNhY3Rpb25zL2FwaS90cmFuc2FjdGlvbnNEZXRhaWxzL2dldENhcmRUcmFuc2FjdGlvbnNEZXRhaWxzJztcblxuY29uc3QgSW52YWxpZFBhc3N3b3JkTWVzc2FnZSA9ICfXqdedINeU157Xqdeq157XqSDXkNeVINeU16HXmdeh157XlCDXqdeU15XXlteg15Ug16nXkteV15nXmdedJztcblxuY29uc3QgZGVidWcgPSBnZXREZWJ1ZygndmlzYS1jYWwnKTtcblxuZW51bSB0cm5UeXBlQ29kZSB7XG4gIHJlZ3VsYXIgPSAnNScsXG4gIGNyZWRpdCA9ICc2JyxcbiAgaW5zdGFsbG1lbnRzID0gJzgnLFxuICBzdGFuZGluZ09yZGVyID0gJzknLFxufVxuXG5pbnRlcmZhY2UgU2NyYXBlZFRyYW5zYWN0aW9uIHtcbiAgYW10QmVmb3JlQ29udkFuZEluZGV4OiBudW1iZXI7XG4gIGJyYW5jaENvZGVEZXNjOiBzdHJpbmc7XG4gIGNhc2hBY2NNYW5hZ2VyTmFtZTogbnVsbDtcbiAgY2FzaEFjY291bnRNYW5hZ2VyOiBudWxsO1xuICBjYXNoQWNjb3VudFRybkFtdDogbnVtYmVyO1xuICBjaGFyZ2VFeHRlcm5hbFRvQ2FyZENvbW1lbnQ6IHN0cmluZztcbiAgY29tbWVudHM6IFtdO1xuICBjdXJQYXltZW50TnVtOiBudW1iZXI7XG4gIGRlYkNyZEN1cnJlbmN5U3ltYm9sOiBDdXJyZW5jeVN5bWJvbDtcbiAgZGViQ3JkRGF0ZTogc3RyaW5nO1xuICBkZWJpdFNwcmVhZEluZDogYm9vbGVhbjtcbiAgZGlzY291bnRBbW91bnQ6IHVua25vd247XG4gIGRpc2NvdW50UmVhc29uOiB1bmtub3duO1xuICBpbW1lZGlhdGVDb21tZW50czogW107XG4gIGlzSW1tZWRpYXRlQ29tbWVudEluZDogYm9vbGVhbjtcbiAgaXNJbW1lZGlhdGVISEtJbmQ6IGJvb2xlYW47XG4gIGlzTWFyZ2FyaXRhOiBib29sZWFuO1xuICBpc1NwcmVhZFBheW1lbnN0QWJyb2FkOiBib29sZWFuO1xuICBsaW5rZWRDb21tZW50czogW107XG4gIG1lcmNoYW50QWRkcmVzczogc3RyaW5nO1xuICBtZXJjaGFudE5hbWU6IHN0cmluZztcbiAgbWVyY2hhbnRQaG9uZU5vOiBzdHJpbmc7XG4gIG51bU9mUGF5bWVudHM6IG51bWJlcjtcbiAgb25Hb2luZ1RyYW5zYWN0aW9uc0NvbW1lbnQ6IHN0cmluZztcbiAgcmVmdW5kSW5kOiBib29sZWFuO1xuICByb3VuZGluZ0Ftb3VudDogdW5rbm93bjtcbiAgcm91bmRpbmdSZWFzb246IHVua25vd247XG4gIHRva2VuSW5kOiAwO1xuICB0b2tlbk51bWJlclBhcnQ0OiAnJztcbiAgdHJhbnNDYXJkUHJlc2VudEluZDogYm9vbGVhbjtcbiAgdHJhbnNUeXBlQ29tbWVudERldGFpbHM6IFtdO1xuICB0cm5BbXQ6IG51bWJlcjtcbiAgdHJuQ3VycmVuY3lTeW1ib2w6IEN1cnJlbmN5U3ltYm9sO1xuICB0cm5FeGFjV2F5OiBudW1iZXI7XG4gIHRybkludElkOiBzdHJpbmc7XG4gIHRybk51bWFyZXRvcjogbnVtYmVyO1xuICB0cm5QdXJjaGFzZURhdGU6IHN0cmluZztcbiAgdHJuVHlwZTogc3RyaW5nO1xuICB0cm5UeXBlQ29kZTogdHJuVHlwZUNvZGU7XG4gIHdhbGxldFByb3ZpZGVyQ29kZTogMDtcbiAgd2FsbGV0UHJvdmlkZXJEZXNjOiAnJztcbn1cbmludGVyZmFjZSBJbml0UmVzcG9uc2Uge1xuICByZXN1bHQ6IHtcbiAgICBjYXJkczoge1xuICAgICAgY2FyZFVuaXF1ZUlkOiBzdHJpbmc7XG4gICAgICBsYXN0NERpZ2l0czogc3RyaW5nO1xuICAgICAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgICB9W107XG4gIH07XG59XG50eXBlIEN1cnJlbmN5U3ltYm9sID0gJ+KCqicgfCBzdHJpbmc7XG5pbnRlcmZhY2UgQ2FyZFRyYW5zYWN0aW9uRGV0YWlsc0Vycm9yIHtcbiAgdGl0bGU6IHN0cmluZztcbiAgc3RhdHVzQ29kZTogbnVtYmVyO1xufVxuaW50ZXJmYWNlIENhcmRUcmFuc2FjdGlvbkRldGFpbHMgZXh0ZW5kcyBDYXJkVHJhbnNhY3Rpb25EZXRhaWxzRXJyb3Ige1xuICByZXN1bHQ6IHtcbiAgICBiYW5rQWNjb3VudHM6IHtcbiAgICAgIGJhbmtBY2NvdW50TnVtOiBzdHJpbmc7XG4gICAgICBiYW5rTmFtZTogc3RyaW5nO1xuICAgICAgY2hvaWNlRXh0ZXJuYWxUcmFuc2FjdGlvbnM6IGFueTtcbiAgICAgIGN1cnJlbnRCYW5rQWNjb3VudEluZDogYm9vbGVhbjtcbiAgICAgIGRlYml0RGF0ZXM6IHtcbiAgICAgICAgYmFza2V0QW1vdW50Q29tbWVudDogdW5rbm93bjtcbiAgICAgICAgY2hvaWNlSEhLRGViaXQ6IG51bWJlcjtcbiAgICAgICAgZGF0ZTogc3RyaW5nO1xuICAgICAgICBkZWJpdFJlYXNvbjogdW5rbm93bjtcbiAgICAgICAgZml4RGViaXRBbW91bnQ6IG51bWJlcjtcbiAgICAgICAgZnJvbVB1cmNoYXNlRGF0ZTogc3RyaW5nO1xuICAgICAgICBpc0Nob2ljZVJlcGFpbWVudDogYm9vbGVhbjtcbiAgICAgICAgdG9QdXJjaGFzZURhdGU6IHN0cmluZztcbiAgICAgICAgdG90YWxCYXNrZXRBbW91bnQ6IG51bWJlcjtcbiAgICAgICAgdG90YWxEZWJpdHM6IHtcbiAgICAgICAgICBjdXJyZW5jeVN5bWJvbDogQ3VycmVuY3lTeW1ib2w7XG4gICAgICAgICAgYW1vdW50OiBudW1iZXI7XG4gICAgICAgIH1bXTtcbiAgICAgICAgdHJhbnNhY3Rpb25zOiBTY3JhcGVkVHJhbnNhY3Rpb25bXTtcbiAgICAgIH1bXTtcbiAgICAgIGltbWlkaWF0ZURlYml0czogeyB0b3RhbERlYml0czogW10sIGRlYml0RGF5czogW10gfTtcbiAgICB9W107XG4gICAgYmxvY2tlZENhcmRJbmQ6IGJvb2xlYW47XG4gIH07XG4gIHN0YXR1c0NvZGU6IDE7XG4gIHN0YXR1c0Rlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHN0YXR1c1RpdGxlOiBzdHJpbmc7XG59XG5cblxuYXN5bmMgZnVuY3Rpb24gZ2V0TG9naW5GcmFtZShwYWdlOiBQYWdlKSB7XG4gIGxldCBmcmFtZTogRnJhbWUgfCBudWxsID0gbnVsbDtcbiAgZGVidWcoJ3dhaXQgdW50aWwgbG9naW4gZnJhbWUgZm91bmQnKTtcbiAgYXdhaXQgd2FpdFVudGlsKCgpID0+IHtcbiAgICBmcmFtZSA9IHBhZ2VcbiAgICAgIC5mcmFtZXMoKVxuICAgICAgLmZpbmQoKGYpID0+IGYudXJsKCkuaW5jbHVkZXMoJ2NhbGNvbm5lY3QnKSkgfHwgbnVsbDtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCEhZnJhbWUpO1xuICB9LCAnd2FpdCBmb3IgaWZyYW1lIHdpdGggbG9naW4gZm9ybScsIDEwMDAwLCAxMDAwKTtcblxuICBpZiAoIWZyYW1lKSB7XG4gICAgZGVidWcoJ2ZhaWxlZCB0byBmaW5kIGxvZ2luIGZyYW1lIGZvciAxMCBzZWNvbmRzJyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdmYWlsZWQgdG8gZXh0cmFjdCBsb2dpbiBpZnJhbWUnKTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFzSW52YWxpZFBhc3N3b3JkRXJyb3IocGFnZTogUGFnZSkge1xuICBjb25zdCBmcmFtZSA9IGF3YWl0IGdldExvZ2luRnJhbWUocGFnZSk7XG4gIGNvbnN0IGVycm9yRm91bmQgPSBhd2FpdCBlbGVtZW50UHJlc2VudE9uUGFnZShmcmFtZSwgJ2Rpdi5nZW5lcmFsLWVycm9yID4gZGl2Jyk7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yRm91bmQgPyBhd2FpdCBwYWdlRXZhbChmcmFtZSwgJ2Rpdi5nZW5lcmFsLWVycm9yID4gZGl2JywgJycsIChpdGVtKSA9PiB7XG4gICAgcmV0dXJuIChpdGVtIGFzIEhUTUxEaXZFbGVtZW50KS5pbm5lclRleHQ7XG4gIH0pIDogJyc7XG4gIHJldHVybiBlcnJvck1lc3NhZ2UgPT09IEludmFsaWRQYXNzd29yZE1lc3NhZ2U7XG59XG5cbmZ1bmN0aW9uIGdldFBvc3NpYmxlTG9naW5SZXN1bHRzKCkge1xuICBkZWJ1ZygncmV0dXJuIHBvc3NpYmxlIGxvZ2luIHJlc3VsdHMnKTtcbiAgY29uc3QgdXJsczogTG9naW5PcHRpb25zWydwb3NzaWJsZVJlc3VsdHMnXSA9IHtcbiAgICBbTG9naW5SZXN1bHRzLlN1Y2Nlc3NdOiBbL2Rhc2hib2FyZC9pXSxcbiAgICBbTG9naW5SZXN1bHRzLkludmFsaWRQYXNzd29yZF06IFthc3luYyAob3B0aW9ucz86IHsgcGFnZT86IFBhZ2UgfSkgPT4ge1xuICAgICAgY29uc3QgcGFnZSA9IG9wdGlvbnM/LnBhZ2U7XG4gICAgICBpZiAoIXBhZ2UpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0ludmFsaWRQYXNzd29yZEVycm9yKHBhZ2UpO1xuICAgIH1dLFxuICAgIC8vIFtMb2dpblJlc3VsdHMuQWNjb3VudEJsb2NrZWRdOiBbXSwgLy8gVE9ETyBhZGQgd2hlbiByZWFjaGluZyB0aGlzIHNjZW5hcmlvXG4gICAgLy8gW0xvZ2luUmVzdWx0cy5DaGFuZ2VQYXNzd29yZF06IFtdLCAvLyBUT0RPIGFkZCB3aGVuIHJlYWNoaW5nIHRoaXMgc2NlbmFyaW9cbiAgfTtcbiAgcmV0dXJuIHVybHM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxvZ2luRmllbGRzKGNyZWRlbnRpYWxzOiBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscykge1xuICBkZWJ1ZygnY3JlYXRlIGxvZ2luIGZpZWxkcyBmb3IgdXNlcm5hbWUgYW5kIHBhc3N3b3JkJyk7XG4gIHJldHVybiBbXG4gICAgeyBzZWxlY3RvcjogJ1tmb3JtY29udHJvbG5hbWU9XCJ1c2VyTmFtZVwiXScsIHZhbHVlOiBjcmVkZW50aWFscy51c2VybmFtZSB9LFxuICAgIHsgc2VsZWN0b3I6ICdbZm9ybWNvbnRyb2xuYW1lPVwicGFzc3dvcmRcIl0nLCB2YWx1ZTogY3JlZGVudGlhbHMucGFzc3dvcmQgfSxcbiAgXTtcbn1cblxuZnVuY3Rpb24gY29udmVydFBhcnNlZERhdGFUb1RyYW5zYWN0aW9ucyhwYXJzZWREYXRhOiBDYXJkVHJhbnNhY3Rpb25EZXRhaWxzW10pOiBUcmFuc2FjdGlvbltdIHtcbiAgcmV0dXJuIHBhcnNlZERhdGFcbiAgICAuZmxhdE1hcCgobW9udGhEYXRhKSA9PiBtb250aERhdGEucmVzdWx0LmJhbmtBY2NvdW50cylcbiAgICAuZmxhdE1hcCgoYWNjb3VudHMpID0+IGFjY291bnRzLmRlYml0RGF0ZXMpXG4gICAgLmZsYXRNYXAoKGRlYml0RGF0ZSkgPT4gZGViaXREYXRlLnRyYW5zYWN0aW9ucylcbiAgICAubWFwKCh0cmFuc2FjdGlvbikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFsbG1lbnRzID0gKHRyYW5zYWN0aW9uLmN1clBheW1lbnROdW0gJiYgdHJhbnNhY3Rpb24ubnVtT2ZQYXltZW50cyAmJlxuICAgICAge1xuICAgICAgICBudW1iZXI6IHRyYW5zYWN0aW9uLmN1clBheW1lbnROdW0sXG4gICAgICAgIHRvdGFsOiB0cmFuc2FjdGlvbi5udW1PZlBheW1lbnRzLFxuICAgICAgfSkgfHxcbiAgICAgICAgdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBkYXRlID0gbW9tZW50KHRyYW5zYWN0aW9uLnRyblB1cmNoYXNlRGF0ZSk7XG5cbiAgICAgIGxldCBjaGFyZ2VkQW1vdW50ID0gdHJhbnNhY3Rpb24uYW10QmVmb3JlQ29udkFuZEluZGV4ICogKC0xKTtcbiAgICAgIGxldCBvcmlnaW5hbEFtb3VudCA9IHRyYW5zYWN0aW9uLnRybkFtdCAqICgtMSk7XG5cbiAgICAgIGlmICh0cmFuc2FjdGlvbi50cm5UeXBlQ29kZSA9PT0gdHJuVHlwZUNvZGUuY3JlZGl0KSB7XG4gICAgICAgIGNoYXJnZWRBbW91bnQgPSB0cmFuc2FjdGlvbi5hbXRCZWZvcmVDb252QW5kSW5kZXg7XG4gICAgICAgIG9yaWdpbmFsQW1vdW50ID0gdHJhbnNhY3Rpb24udHJuQW10O1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQ6IFRyYW5zYWN0aW9uID0ge1xuICAgICAgICBjaGFyZ2VkQW1vdW50LFxuICAgICAgICBkZXNjcmlwdGlvbjogdHJhbnNhY3Rpb24ubWVyY2hhbnROYW1lLFxuICAgICAgICBvcmlnaW5hbEFtb3VudCxcbiAgICAgICAgb3JpZ2luYWxDdXJyZW5jeTogdHJhbnNhY3Rpb24udHJuQ3VycmVuY3lTeW1ib2wsXG4gICAgICAgIHByb2Nlc3NlZERhdGU6IHRyYW5zYWN0aW9uLmRlYkNyZERhdGUsXG4gICAgICAgIHN0YXR1czogVHJhbnNhY3Rpb25TdGF0dXNlcy5Db21wbGV0ZWQsXG4gICAgICAgIGRhdGU6IGluc3RhbGxtZW50cyA/XG4gICAgICAgICAgZGF0ZS5hZGQoaW5zdGFsbG1lbnRzLm51bWJlciAtIDEsICdtb250aCcpLnRvSVNPU3RyaW5nKCkgOlxuICAgICAgICAgIGRhdGUudG9JU09TdHJpbmcoKSxcbiAgICAgICAgdHlwZTogW3RyblR5cGVDb2RlLnJlZ3VsYXIsIHRyblR5cGVDb2RlLnN0YW5kaW5nT3JkZXJdLmluY2x1ZGVzKHRyYW5zYWN0aW9uLnRyblR5cGVDb2RlKSA/XG4gICAgICAgICAgVHJhbnNhY3Rpb25UeXBlcy5Ob3JtYWwgOlxuICAgICAgICAgIFRyYW5zYWN0aW9uVHlwZXMuSW5zdGFsbG1lbnRzLFxuICAgICAgfTtcblxuICAgICAgaWYgKGluc3RhbGxtZW50cykge1xuICAgICAgICByZXN1bHQuaW5zdGFsbG1lbnRzID0gaW5zdGFsbG1lbnRzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xufVxuXG50eXBlIFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzID0geyB1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nIH07XG5cbmNsYXNzIFZpc2FDYWxTY3JhcGVyIGV4dGVuZHMgQmFzZVNjcmFwZXJXaXRoQnJvd3NlcjxTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscz4ge1xuICBvcGVuTG9naW5Qb3B1cCA9IGFzeW5jICgpID0+IHtcbiAgICBkZWJ1Zygnb3BlbiBsb2dpbiBwb3B1cCwgd2FpdCB1bnRpbCBsb2dpbiBidXR0b24gYXZhaWxhYmxlJyk7XG4gICAgYXdhaXQgd2FpdFVudGlsRWxlbWVudEZvdW5kKHRoaXMucGFnZSwgJyNjY0xvZ2luRGVza3RvcEJ0bicsIHRydWUpO1xuICAgIGRlYnVnKCdjbGljayBvbiB0aGUgbG9naW4gYnV0dG9uJyk7XG4gICAgYXdhaXQgY2xpY2tCdXR0b24odGhpcy5wYWdlLCAnI2NjTG9naW5EZXNrdG9wQnRuJyk7XG4gICAgZGVidWcoJ2dldCB0aGUgZnJhbWUgdGhhdCBob2xkcyB0aGUgbG9naW4nKTtcbiAgICBjb25zdCBmcmFtZSA9IGF3YWl0IGdldExvZ2luRnJhbWUodGhpcy5wYWdlKTtcbiAgICBkZWJ1Zygnd2FpdCB1bnRpbCB0aGUgcGFzc3dvcmQgbG9naW4gdGFiIGhlYWRlciBpcyBhdmFpbGFibGUnKTtcbiAgICBhd2FpdCB3YWl0VW50aWxFbGVtZW50Rm91bmQoZnJhbWUsICcjcmVndWxhci1sb2dpbicpO1xuICAgIGRlYnVnKCduYXZpZ2F0ZSB0byB0aGUgcGFzc3dvcmQgbG9naW4gdGFiJyk7XG4gICAgYXdhaXQgY2xpY2tCdXR0b24oZnJhbWUsICcjcmVndWxhci1sb2dpbicpO1xuICAgIGRlYnVnKCd3YWl0IHVudGlsIHRoZSBwYXNzd29yZCBsb2dpbiB0YWIgaXMgYWN0aXZlJyk7XG4gICAgYXdhaXQgd2FpdFVudGlsRWxlbWVudEZvdW5kKGZyYW1lLCAncmVndWxhci1sb2dpbicpO1xuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9O1xuXG4gIGFzeW5jIGdldENhcmRzKCkge1xuICAgIGNvbnN0IGluaXREYXRhID0gYXdhaXQgZ2V0RnJvbVNlc3Npb25TdG9yYWdlPEluaXRSZXNwb25zZT4odGhpcy5wYWdlLCAnaW5pdCcpO1xuICAgIGlmICghaW5pdERhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IGZpbmQgXFwnaW5pdFxcJyBkYXRhIGluIHNlc3Npb24gc3RvcmFnZScpO1xuICAgIH1cbiAgICByZXR1cm4gaW5pdERhdGE/LnJlc3VsdC5jYXJkcy5tYXAoKHsgY2FyZFVuaXF1ZUlkLCBsYXN0NERpZ2l0cyB9KSA9PiAoeyBjYXJkVW5pcXVlSWQsIGxhc3Q0RGlnaXRzIH0pKTtcbiAgfVxuXG4gIGFzeW5jIGdldEF1dGhvcml6YXRpb25IZWFkZXIoKSB7XG4gICAgY29uc3QgYXV0aE1vZHVsZSA9IGF3YWl0IGdldEZyb21TZXNzaW9uU3RvcmFnZTx7IGF1dGg6IHsgY2FsQ29ubmVjdFRva2VuOiBzdHJpbmcgfSB9Pih0aGlzLnBhZ2UsICdhdXRoLW1vZHVsZScpO1xuICAgIGlmICghYXV0aE1vZHVsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgZmluZCBcXCdhdXRoLW1vZHVsZVxcJyBpbiBzZXNzaW9uIHN0b3JhZ2UnKTtcbiAgICB9XG4gICAgcmV0dXJuIGBDQUxBdXRoU2NoZW1lICR7YXV0aE1vZHVsZS5hdXRoLmNhbENvbm5lY3RUb2tlbn1gO1xuICB9XG5cbiAgYXN5bmMgZ2V0WFNpdGVJZCgpIHtcbiAgICAvKlxuICAgICAgSSBkb24ndCBrbm93IGlmIHRoZSBjb25zdGFudCBiZWxvdyB3aWxsIGNoYW5nZSBpbiB0aGUgZmVhdHVyZS5cbiAgICAgIElmIHNvLCB1c2UgdGhlIG5leHQgY29kZTpcblxuICAgICAgcmV0dXJuIHRoaXMucGFnZS5ldmFsdWF0ZSgoKSA9PiBuZXcgVXQoKS54U2l0ZUlkKTtcblxuICAgICAgVG8gZ2V0IHRoZSBjbGFzc25hbWUgc2VhcmNoIGZvciAneFNpdGVJZCcgaW4gdGhlIHBhZ2Ugc291cmNlXG4gICAgICBjbGFzcyBVdCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKF9lLCBvbiwgeW4pIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUgPSBfZSxcbiAgICAgICAgICAgIHRoaXMuY29uZmlnID0gb24sXG4gICAgICAgICAgICB0aGlzLmV2ZW50QnVzU2VydmljZSA9IHluLFxuICAgICAgICAgICAgdGhpcy54U2l0ZUlkID0gXCIwOTAzMTk4Ny0yNzNFLTIzMTEtOTA2Qy04QUY4NUIxN0M4RDlcIixcbiAgICAqL1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoJzA5MDMxOTg3LTI3M0UtMjMxMS05MDZDLThBRjg1QjE3QzhEOScpO1xuICB9XG5cbiAgZ2V0TG9naW5PcHRpb25zKGNyZWRlbnRpYWxzOiBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscyk6IExvZ2luT3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvZ2luVXJsOiBgJHtMT0dJTl9VUkx9YCxcbiAgICAgIGZpZWxkczogY3JlYXRlTG9naW5GaWVsZHMoY3JlZGVudGlhbHMpLFxuICAgICAgc3VibWl0QnV0dG9uU2VsZWN0b3I6ICdidXR0b25bdHlwZT1cInN1Ym1pdFwiXScsXG4gICAgICBwb3NzaWJsZVJlc3VsdHM6IGdldFBvc3NpYmxlTG9naW5SZXN1bHRzKCksXG4gICAgICBjaGVja1JlYWRpbmVzczogYXN5bmMgKCkgPT4gd2FpdFVudGlsRWxlbWVudEZvdW5kKHRoaXMucGFnZSwgJyNjY0xvZ2luRGVza3RvcEJ0bicpLFxuICAgICAgcHJlQWN0aW9uOiB0aGlzLm9wZW5Mb2dpblBvcHVwLFxuICAgICAgcG9zdEFjdGlvbjogYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHdhaXRVbnRpbEVsZW1lbnRGb3VuZCh0aGlzLnBhZ2UsICdidXR0b24uYnRuLWNsb3NlJyk7XG4gICAgICAgICAgY29uc3QgY3VycmVudFVybCA9IGF3YWl0IGdldEN1cnJlbnRVcmwodGhpcy5wYWdlKTtcbiAgICAgICAgICBpZiAoY3VycmVudFVybC5lbmRzV2l0aCgnc2l0ZS10dXRvcmlhbCcpKSB7XG4gICAgICAgICAgICBhd2FpdCBjbGlja0J1dHRvbih0aGlzLnBhZ2UsICdidXR0b24uYnRuLWNsb3NlJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFVybCA9IGF3YWl0IGdldEN1cnJlbnRVcmwodGhpcy5wYWdlKTtcbiAgICAgICAgICBpZiAoY3VycmVudFVybC5lbmRzV2l0aCgnZGFzaGJvYXJkJykpIHJldHVybjtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlckFnZW50OiAnTW96aWxsYS81LjAgKFgxMTsgTGludXggeDg2XzY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNzguMC4zOTA0LjEwOCBTYWZhcmkvNTM3LjM2JyxcbiAgICB9O1xuICB9XG5cbiAgaXNDYXJkVHJhbnNhY3Rpb25EZXRhaWxzKHJlc3VsdDogQ2FyZFRyYW5zYWN0aW9uRGV0YWlscyB8IENhcmRUcmFuc2FjdGlvbkRldGFpbHNFcnJvcik6XG4gICAgcmVzdWx0IGlzIENhcmRUcmFuc2FjdGlvbkRldGFpbHMge1xuICAgIHJldHVybiAocmVzdWx0IGFzIENhcmRUcmFuc2FjdGlvbkRldGFpbHMpLnJlc3VsdCAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hEYXRhKCk6IFByb21pc2U8U2NyYXBlclNjcmFwaW5nUmVzdWx0PiB7XG4gICAgY29uc3QgZGVmYXVsdFN0YXJ0TW9tZW50ID0gbW9tZW50KCkuc3VidHJhY3QoMSwgJ3llYXJzJykuc3VidHJhY3QoNiwgJ21vbnRocycpLmFkZCgxLCAnZGF5Jyk7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5vcHRpb25zLnN0YXJ0RGF0ZSB8fCBkZWZhdWx0U3RhcnRNb21lbnQudG9EYXRlKCk7XG4gICAgY29uc3Qgc3RhcnRNb21lbnQgPSBtb21lbnQubWF4KGRlZmF1bHRTdGFydE1vbWVudCwgbW9tZW50KHN0YXJ0RGF0ZSkpO1xuICAgIGRlYnVnKGBmZXRjaCB0cmFuc2FjdGlvbnMgc3RhcnRpbmcgJHtzdGFydE1vbWVudC5mb3JtYXQoKX1gKTtcblxuICAgIGNvbnN0IEF1dGhvcml6YXRpb24gPSBhd2FpdCB0aGlzLmdldEF1dGhvcml6YXRpb25IZWFkZXIoKTtcbiAgICAvLyBXYWl0IGEgbGl0dGxlIGJlZm9yZSBgdGhpcy5nZXRDYXJkc2Agc28gdGhhdCBpdCB3b3VsZCBleGlzdFxuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMDApKTtcbiAgICBjb25zdCBjYXJkcyA9IGF3YWl0IHRoaXMuZ2V0Q2FyZHMoKTtcbiAgICBjb25zdCB4U2l0ZUlkID0gYXdhaXQgdGhpcy5nZXRYU2l0ZUlkKCk7XG4gICAgY29uc3QgZnV0dXJlTW9udGhzVG9TY3JhcGUgPSB0aGlzLm9wdGlvbnMuZnV0dXJlTW9udGhzVG9TY3JhcGUgPz8gMTtcblxuICAgIGNvbnN0IGFjY291bnRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBjYXJkcy5tYXAoYXN5bmMgKGNhcmQpID0+IHtcbiAgICAgICAgZGVidWcoYGZldGNoIHRyYW5zYWN0aW9ucyBmb3IgY2FyZCAke2NhcmQuY2FyZFVuaXF1ZUlkfWApO1xuXG4gICAgICAgIGNvbnN0IGZpbmFsTW9udGhUb0ZldGNoTW9tZW50ID0gbW9tZW50KCkuYWRkKGZ1dHVyZU1vbnRoc1RvU2NyYXBlLCAnbW9udGgnKTtcbiAgICAgICAgY29uc3QgbW9udGhzID0gZmluYWxNb250aFRvRmV0Y2hNb21lbnQuZGlmZihzdGFydE1vbWVudCwgJ21vbnRocycpO1xuXG4gICAgICAgIGNvbnN0IGFsbE1vbnRoc0RhdGE6IChDYXJkVHJhbnNhY3Rpb25EZXRhaWxzKVtdID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IG1vbnRoczsgaSArPSAxKSB7XG4gICAgICAgICAgY29uc3QgbW9udGggPSBmaW5hbE1vbnRoVG9GZXRjaE1vbWVudC5jbG9uZSgpLnN1YnRyYWN0KGksICdtb250aHMnKTtcbiAgICAgICAgICBjb25zdCBtb250aERhdGEgPSBhd2FpdCBmZXRjaFBvc3RXaXRoaW5QYWdlPENhcmRUcmFuc2FjdGlvbkRldGFpbHMgfCBDYXJkVHJhbnNhY3Rpb25EZXRhaWxzRXJyb3I+KFxuICAgICAgICAgICAgdGhpcy5wYWdlLCBUUkFOU0FDVElPTlNfUkVRVUVTVF9FTkRQT0lOVCxcbiAgICAgICAgICAgIHsgY2FyZFVuaXF1ZUlkOiBjYXJkLmNhcmRVbmlxdWVJZCwgbW9udGg6IG1vbnRoLmZvcm1hdCgnTScpLCB5ZWFyOiBtb250aC5mb3JtYXQoJ1lZWVknKSB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBBdXRob3JpemF0aW9uLFxuICAgICAgICAgICAgICAnWC1TaXRlLUlkJzogeFNpdGVJZCxcbiAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChtb250aERhdGE/LnN0YXR1c0NvZGUgIT09IDEpIHRocm93IG5ldyBFcnJvcihgZmFpbGVkIHRvIGZldGNoIHRyYW5zYWN0aW9ucyBmb3IgY2FyZCAke2NhcmQubGFzdDREaWdpdHN9LiBNZXNzYWdlOiAke21vbnRoRGF0YT8udGl0bGUgfHwgJyd9YCk7XG5cbiAgICAgICAgICBpZiAoIXRoaXMuaXNDYXJkVHJhbnNhY3Rpb25EZXRhaWxzKG1vbnRoRGF0YSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbW9udGhEYXRhIGlzIG5vdCBvZiB0eXBlIENhcmRUcmFuc2FjdGlvbkRldGFpbHMnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhbGxNb250aHNEYXRhLnB1c2gobW9udGhEYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRyYW5zYWN0aW9ucyA9IGNvbnZlcnRQYXJzZWREYXRhVG9UcmFuc2FjdGlvbnMoYWxsTW9udGhzRGF0YSk7XG5cbiAgICAgICAgZGVidWcoJ2ZpbGVyIG91dCBvbGQgdHJhbnNhY3Rpb25zJyk7XG4gICAgICAgIGNvbnN0IHR4bnMgPSAodGhpcy5vcHRpb25zLm91dHB1dERhdGE/LmVuYWJsZVRyYW5zYWN0aW9uc0ZpbHRlckJ5RGF0ZSA/PyB0cnVlKSA/XG4gICAgICAgICAgZmlsdGVyT2xkVHJhbnNhY3Rpb25zKHRyYW5zYWN0aW9ucywgbW9tZW50KHN0YXJ0RGF0ZSksIHRoaXMub3B0aW9ucy5jb21iaW5lSW5zdGFsbG1lbnRzIHx8IGZhbHNlKSA6XG4gICAgICAgICAgdHJhbnNhY3Rpb25zO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHhucyxcbiAgICAgICAgICBhY2NvdW50TnVtYmVyOiBjYXJkLmxhc3Q0RGlnaXRzLFxuICAgICAgICB9IGFzIFRyYW5zYWN0aW9uc0FjY291bnQ7XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgZGVidWcoJ3JldHVybiB0aGUgc2NyYXBlZCBhY2NvdW50cycpO1xuXG4gICAgZGVidWcoSlNPTi5zdHJpbmdpZnkoYWNjb3VudHMsIG51bGwsIDIpKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgIGFjY291bnRzLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmlzYUNhbFNjcmFwZXI7XG4iXX0=
|
|
297
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy92aXNhLWNhbC50cyJdLCJuYW1lcyI6WyJMT0dJTl9VUkwiLCJUUkFOU0FDVElPTlNfUkVRVUVTVF9FTkRQT0lOVCIsIkludmFsaWRQYXNzd29yZE1lc3NhZ2UiLCJkZWJ1ZyIsInRyblR5cGVDb2RlIiwiZ2V0TG9naW5GcmFtZSIsInBhZ2UiLCJmcmFtZSIsImZyYW1lcyIsImZpbmQiLCJmIiwidXJsIiwiaW5jbHVkZXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsIkVycm9yIiwiaGFzSW52YWxpZFBhc3N3b3JkRXJyb3IiLCJlcnJvckZvdW5kIiwiZXJyb3JNZXNzYWdlIiwiaXRlbSIsImlubmVyVGV4dCIsImdldFBvc3NpYmxlTG9naW5SZXN1bHRzIiwidXJscyIsIkxvZ2luUmVzdWx0cyIsIlN1Y2Nlc3MiLCJJbnZhbGlkUGFzc3dvcmQiLCJvcHRpb25zIiwiY3JlYXRlTG9naW5GaWVsZHMiLCJjcmVkZW50aWFscyIsInNlbGVjdG9yIiwidmFsdWUiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwiY29udmVydFBhcnNlZERhdGFUb1RyYW5zYWN0aW9ucyIsInBhcnNlZERhdGEiLCJmbGF0TWFwIiwibW9udGhEYXRhIiwicmVzdWx0IiwiYmFua0FjY291bnRzIiwiYWNjb3VudHMiLCJkZWJpdERhdGVzIiwiZGViaXREYXRlIiwidHJhbnNhY3Rpb25zIiwibWFwIiwidHJhbnNhY3Rpb24iLCJpbnN0YWxsbWVudHMiLCJjdXJQYXltZW50TnVtIiwibnVtT2ZQYXltZW50cyIsIm51bWJlciIsInRvdGFsIiwidW5kZWZpbmVkIiwiZGF0ZSIsInRyblB1cmNoYXNlRGF0ZSIsImNoYXJnZWRBbW91bnQiLCJhbXRCZWZvcmVDb252QW5kSW5kZXgiLCJvcmlnaW5hbEFtb3VudCIsInRybkFtdCIsImNyZWRpdCIsImRlc2NyaXB0aW9uIiwibWVyY2hhbnROYW1lIiwib3JpZ2luYWxDdXJyZW5jeSIsInRybkN1cnJlbmN5U3ltYm9sIiwicHJvY2Vzc2VkRGF0ZSIsImRlYkNyZERhdGUiLCJzdGF0dXMiLCJUcmFuc2FjdGlvblN0YXR1c2VzIiwiQ29tcGxldGVkIiwiYWRkIiwidG9JU09TdHJpbmciLCJ0eXBlIiwicmVndWxhciIsInN0YW5kaW5nT3JkZXIiLCJUcmFuc2FjdGlvblR5cGVzIiwiTm9ybWFsIiwiSW5zdGFsbG1lbnRzIiwibWVtbyIsInRyYW5zVHlwZUNvbW1lbnREZXRhaWxzIiwidG9TdHJpbmciLCJWaXNhQ2FsU2NyYXBlciIsIkJhc2VTY3JhcGVyV2l0aEJyb3dzZXIiLCJnZXRDYXJkcyIsImluaXREYXRhIiwiY2FyZHMiLCJjYXJkVW5pcXVlSWQiLCJsYXN0NERpZ2l0cyIsImdldEF1dGhvcml6YXRpb25IZWFkZXIiLCJhdXRoTW9kdWxlIiwiYXV0aCIsImNhbENvbm5lY3RUb2tlbiIsImdldFhTaXRlSWQiLCJnZXRMb2dpbk9wdGlvbnMiLCJsb2dpblVybCIsImZpZWxkcyIsInN1Ym1pdEJ1dHRvblNlbGVjdG9yIiwicG9zc2libGVSZXN1bHRzIiwiY2hlY2tSZWFkaW5lc3MiLCJwcmVBY3Rpb24iLCJvcGVuTG9naW5Qb3B1cCIsInBvc3RBY3Rpb24iLCJjdXJyZW50VXJsIiwiZW5kc1dpdGgiLCJlIiwidXNlckFnZW50IiwiaXNDYXJkVHJhbnNhY3Rpb25EZXRhaWxzIiwiZmV0Y2hEYXRhIiwiZGVmYXVsdFN0YXJ0TW9tZW50Iiwic3VidHJhY3QiLCJzdGFydERhdGUiLCJ0b0RhdGUiLCJzdGFydE1vbWVudCIsIm1vbWVudCIsIm1heCIsImZvcm1hdCIsIkF1dGhvcml6YXRpb24iLCJ4U2l0ZUlkIiwiZnV0dXJlTW9udGhzVG9TY3JhcGUiLCJhbGwiLCJjYXJkIiwiZmluYWxNb250aFRvRmV0Y2hNb21lbnQiLCJtb250aHMiLCJkaWZmIiwiYWxsTW9udGhzRGF0YSIsImkiLCJtb250aCIsImNsb25lIiwieWVhciIsInN0YXR1c0NvZGUiLCJ0aXRsZSIsInB1c2giLCJ0eG5zIiwib3V0cHV0RGF0YSIsImVuYWJsZVRyYW5zYWN0aW9uc0ZpbHRlckJ5RGF0ZSIsImNvbWJpbmVJbnN0YWxsbWVudHMiLCJhY2NvdW50TnVtYmVyIiwiSlNPTiIsInN0cmluZ2lmeSIsInN1Y2Nlc3MiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUdBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQU1BOzs7Ozs7QUFHQSxNQUFNQSxTQUFTLEdBQUcsK0JBQWxCO0FBQ0EsTUFBTUMsNkJBQTZCLEdBQUcsOEZBQXRDO0FBRUEsTUFBTUMsc0JBQXNCLEdBQUcsbUNBQS9CO0FBRUEsTUFBTUMsS0FBSyxHQUFHLHFCQUFTLFVBQVQsQ0FBZDtJQUVLQyxXOztXQUFBQSxXO0FBQUFBLEVBQUFBLFc7QUFBQUEsRUFBQUEsVztBQUFBQSxFQUFBQSxXO0FBQUFBLEVBQUFBLFc7R0FBQUEsVyxLQUFBQSxXOztBQWlHTCxlQUFlQyxhQUFmLENBQTZCQyxJQUE3QixFQUF5QztBQUN2QyxNQUFJQyxLQUFtQixHQUFHLElBQTFCO0FBQ0FKLEVBQUFBLEtBQUssQ0FBQyw4QkFBRCxDQUFMO0FBQ0EsUUFBTSx3QkFBVSxNQUFNO0FBQ3BCSSxJQUFBQSxLQUFLLEdBQUdELElBQUksQ0FDVEUsTUFESyxHQUVMQyxJQUZLLENBRUNDLENBQUQsSUFBT0EsQ0FBQyxDQUFDQyxHQUFGLEdBQVFDLFFBQVIsQ0FBaUIsWUFBakIsQ0FGUCxLQUUwQyxJQUZsRDtBQUdBLFdBQU9DLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixDQUFDLENBQUNQLEtBQWxCLENBQVA7QUFDRCxHQUxLLEVBS0gsaUNBTEcsRUFLZ0MsS0FMaEMsRUFLdUMsSUFMdkMsQ0FBTjs7QUFPQSxNQUFJLENBQUNBLEtBQUwsRUFBWTtBQUNWSixJQUFBQSxLQUFLLENBQUMsMkNBQUQsQ0FBTDtBQUNBLFVBQU0sSUFBSVksS0FBSixDQUFVLGdDQUFWLENBQU47QUFDRDs7QUFFRCxTQUFPUixLQUFQO0FBQ0Q7O0FBRUQsZUFBZVMsdUJBQWYsQ0FBdUNWLElBQXZDLEVBQW1EO0FBQ2pELFFBQU1DLEtBQUssR0FBRyxNQUFNRixhQUFhLENBQUNDLElBQUQsQ0FBakM7QUFDQSxRQUFNVyxVQUFVLEdBQUcsTUFBTSxnREFBcUJWLEtBQXJCLEVBQTRCLHlCQUE1QixDQUF6QjtBQUNBLFFBQU1XLFlBQVksR0FBR0QsVUFBVSxHQUFHLE1BQU0sb0NBQVNWLEtBQVQsRUFBZ0IseUJBQWhCLEVBQTJDLEVBQTNDLEVBQWdEWSxJQUFELElBQVU7QUFDL0YsV0FBUUEsSUFBRCxDQUF5QkMsU0FBaEM7QUFDRCxHQUZ1QyxDQUFULEdBRTFCLEVBRkw7QUFHQSxTQUFPRixZQUFZLEtBQUtoQixzQkFBeEI7QUFDRDs7QUFFRCxTQUFTbUIsdUJBQVQsR0FBbUM7QUFDakNsQixFQUFBQSxLQUFLLENBQUMsK0JBQUQsQ0FBTDtBQUNBLFFBQU1tQixJQUFxQyxHQUFHO0FBQzVDLEtBQUNDLHFDQUFhQyxPQUFkLEdBQXdCLENBQUMsWUFBRCxDQURvQjtBQUU1QyxLQUFDRCxxQ0FBYUUsZUFBZCxHQUFnQyxDQUFDLE1BQU9DLE9BQVAsSUFBcUM7QUFDcEUsWUFBTXBCLElBQUksR0FBR29CLE9BQUgsYUFBR0EsT0FBSCx1QkFBR0EsT0FBTyxDQUFFcEIsSUFBdEI7O0FBQ0EsVUFBSSxDQUFDQSxJQUFMLEVBQVc7QUFDVCxlQUFPLEtBQVA7QUFDRDs7QUFDRCxhQUFPVSx1QkFBdUIsQ0FBQ1YsSUFBRCxDQUE5QjtBQUNELEtBTitCLENBRlksQ0FTNUM7QUFDQTs7QUFWNEMsR0FBOUM7QUFZQSxTQUFPZ0IsSUFBUDtBQUNEOztBQUVELFNBQVNLLGlCQUFULENBQTJCQyxXQUEzQixFQUFvRTtBQUNsRXpCLEVBQUFBLEtBQUssQ0FBQywrQ0FBRCxDQUFMO0FBQ0EsU0FBTyxDQUNMO0FBQUUwQixJQUFBQSxRQUFRLEVBQUUsOEJBQVo7QUFBNENDLElBQUFBLEtBQUssRUFBRUYsV0FBVyxDQUFDRztBQUEvRCxHQURLLEVBRUw7QUFBRUYsSUFBQUEsUUFBUSxFQUFFLDhCQUFaO0FBQTRDQyxJQUFBQSxLQUFLLEVBQUVGLFdBQVcsQ0FBQ0k7QUFBL0QsR0FGSyxDQUFQO0FBSUQ7O0FBRUQsU0FBU0MsK0JBQVQsQ0FBeUNDLFVBQXpDLEVBQThGO0FBQzVGLFNBQU9BLFVBQVUsQ0FDZEMsT0FESSxDQUNLQyxTQUFELElBQWVBLFNBQVMsQ0FBQ0MsTUFBVixDQUFpQkMsWUFEcEMsRUFFSkgsT0FGSSxDQUVLSSxRQUFELElBQWNBLFFBQVEsQ0FBQ0MsVUFGM0IsRUFHSkwsT0FISSxDQUdLTSxTQUFELElBQWVBLFNBQVMsQ0FBQ0MsWUFIN0IsRUFJSkMsR0FKSSxDQUlDQyxXQUFELElBQWlCO0FBQ3BCLFVBQU1DLFlBQVksR0FBSUQsV0FBVyxDQUFDRSxhQUFaLElBQTZCRixXQUFXLENBQUNHLGFBQXpDLElBQ3RCO0FBQ0VDLE1BQUFBLE1BQU0sRUFBRUosV0FBVyxDQUFDRSxhQUR0QjtBQUVFRyxNQUFBQSxLQUFLLEVBQUVMLFdBQVcsQ0FBQ0c7QUFGckIsS0FEcUIsSUFLbkJHLFNBTEY7QUFPQSxVQUFNQyxJQUFJLEdBQUcscUJBQU9QLFdBQVcsQ0FBQ1EsZUFBbkIsQ0FBYjtBQUVBLFFBQUlDLGFBQWEsR0FBR1QsV0FBVyxDQUFDVSxxQkFBWixHQUFxQyxDQUFDLENBQTFEO0FBQ0EsUUFBSUMsY0FBYyxHQUFHWCxXQUFXLENBQUNZLE1BQVosR0FBc0IsQ0FBQyxDQUE1Qzs7QUFFQSxRQUFJWixXQUFXLENBQUN4QyxXQUFaLEtBQTRCQSxXQUFXLENBQUNxRCxNQUE1QyxFQUFvRDtBQUNsREosTUFBQUEsYUFBYSxHQUFHVCxXQUFXLENBQUNVLHFCQUE1QjtBQUNBQyxNQUFBQSxjQUFjLEdBQUdYLFdBQVcsQ0FBQ1ksTUFBN0I7QUFDRDs7QUFFRCxVQUFNbkIsTUFBbUIsR0FBRztBQUMxQmdCLE1BQUFBLGFBRDBCO0FBRTFCSyxNQUFBQSxXQUFXLEVBQUVkLFdBQVcsQ0FBQ2UsWUFGQztBQUcxQkosTUFBQUEsY0FIMEI7QUFJMUJLLE1BQUFBLGdCQUFnQixFQUFFaEIsV0FBVyxDQUFDaUIsaUJBSko7QUFLMUJDLE1BQUFBLGFBQWEsRUFBRWxCLFdBQVcsQ0FBQ21CLFVBTEQ7QUFNMUJDLE1BQUFBLE1BQU0sRUFBRUMsbUNBQW9CQyxTQU5GO0FBTzFCZixNQUFBQSxJQUFJLEVBQUVOLFlBQVksR0FDaEJNLElBQUksQ0FBQ2dCLEdBQUwsQ0FBU3RCLFlBQVksQ0FBQ0csTUFBYixHQUFzQixDQUEvQixFQUFrQyxPQUFsQyxFQUEyQ29CLFdBQTNDLEVBRGdCLEdBRWhCakIsSUFBSSxDQUFDaUIsV0FBTCxFQVR3QjtBQVUxQkMsTUFBQUEsSUFBSSxFQUFFLENBQUNqRSxXQUFXLENBQUNrRSxPQUFiLEVBQXNCbEUsV0FBVyxDQUFDbUUsYUFBbEMsRUFBaUQzRCxRQUFqRCxDQUEwRGdDLFdBQVcsQ0FBQ3hDLFdBQXRFLElBQ0pvRSxnQ0FBaUJDLE1BRGIsR0FFSkQsZ0NBQWlCRSxZQVpPO0FBYTFCQyxNQUFBQSxJQUFJLEVBQUUvQixXQUFXLENBQUNnQyx1QkFBWixDQUFvQ0MsUUFBcEMsTUFBa0QzQjtBQWI5QixLQUE1Qjs7QUFnQkEsUUFBSUwsWUFBSixFQUFrQjtBQUNoQlIsTUFBQUEsTUFBTSxDQUFDUSxZQUFQLEdBQXNCQSxZQUF0QjtBQUNEOztBQUVELFdBQU9SLE1BQVA7QUFDRCxHQTNDSSxDQUFQO0FBNENEOztBQUlELE1BQU15QyxjQUFOLFNBQTZCQyw4Q0FBN0IsQ0FBZ0Y7QUFBQTtBQUFBOztBQUFBLDRDQUM3RCxZQUFZO0FBQzNCNUUsTUFBQUEsS0FBSyxDQUFDLHFEQUFELENBQUw7QUFDQSxZQUFNLGlEQUFzQixLQUFLRyxJQUEzQixFQUFpQyxvQkFBakMsRUFBdUQsSUFBdkQsQ0FBTjtBQUNBSCxNQUFBQSxLQUFLLENBQUMsMkJBQUQsQ0FBTDtBQUNBLFlBQU0sdUNBQVksS0FBS0csSUFBakIsRUFBdUIsb0JBQXZCLENBQU47QUFDQUgsTUFBQUEsS0FBSyxDQUFDLG9DQUFELENBQUw7QUFDQSxZQUFNSSxLQUFLLEdBQUcsTUFBTUYsYUFBYSxDQUFDLEtBQUtDLElBQU4sQ0FBakM7QUFDQUgsTUFBQUEsS0FBSyxDQUFDLHVEQUFELENBQUw7QUFDQSxZQUFNLGlEQUFzQkksS0FBdEIsRUFBNkIsZ0JBQTdCLENBQU47QUFDQUosTUFBQUEsS0FBSyxDQUFDLG9DQUFELENBQUw7QUFDQSxZQUFNLHVDQUFZSSxLQUFaLEVBQW1CLGdCQUFuQixDQUFOO0FBQ0FKLE1BQUFBLEtBQUssQ0FBQyw2Q0FBRCxDQUFMO0FBQ0EsWUFBTSxpREFBc0JJLEtBQXRCLEVBQTZCLGVBQTdCLENBQU47QUFFQSxhQUFPQSxLQUFQO0FBQ0QsS0FoQjZFO0FBQUE7O0FBa0I5RSxRQUFNeUUsUUFBTixHQUFpQjtBQUNmLFVBQU1DLFFBQVEsR0FBRyxNQUFNLHdCQUNyQixNQUFNLG9DQUFvQyxLQUFLM0UsSUFBekMsRUFBK0MsTUFBL0MsQ0FEZSxFQUVyQixrQ0FGcUIsRUFHckIsS0FIcUIsRUFJckIsSUFKcUIsQ0FBdkI7O0FBTUEsUUFBSSxDQUFDMkUsUUFBTCxFQUFlO0FBQ2IsWUFBTSxJQUFJbEUsS0FBSixDQUFVLGlEQUFWLENBQU47QUFDRDs7QUFDRCxXQUFPa0UsUUFBUCxhQUFPQSxRQUFQLHVCQUFPQSxRQUFRLENBQUU1QyxNQUFWLENBQWlCNkMsS0FBakIsQ0FBdUJ2QyxHQUF2QixDQUEyQixDQUFDO0FBQUV3QyxNQUFBQSxZQUFGO0FBQWdCQyxNQUFBQTtBQUFoQixLQUFELE1BQW9DO0FBQUVELE1BQUFBLFlBQUY7QUFBZ0JDLE1BQUFBO0FBQWhCLEtBQXBDLENBQTNCLENBQVA7QUFDRDs7QUFFRCxRQUFNQyxzQkFBTixHQUErQjtBQUM3QixVQUFNQyxVQUFVLEdBQUcsTUFBTSxvQ0FBNkQsS0FBS2hGLElBQWxFLEVBQXdFLGFBQXhFLENBQXpCOztBQUNBLFFBQUksQ0FBQ2dGLFVBQUwsRUFBaUI7QUFDZixZQUFNLElBQUl2RSxLQUFKLENBQVUsbURBQVYsQ0FBTjtBQUNEOztBQUNELFdBQVEsaUJBQWdCdUUsVUFBVSxDQUFDQyxJQUFYLENBQWdCQyxlQUFnQixFQUF4RDtBQUNEOztBQUVELFFBQU1DLFVBQU4sR0FBbUI7QUFDakI7Ozs7Ozs7Ozs7OztBQWNBLFdBQU81RSxPQUFPLENBQUNDLE9BQVIsQ0FBZ0Isc0NBQWhCLENBQVA7QUFDRDs7QUFFRDRFLEVBQUFBLGVBQWUsQ0FBQzlELFdBQUQsRUFBd0Q7QUFDckUsV0FBTztBQUNMK0QsTUFBQUEsUUFBUSxFQUFHLEdBQUUzRixTQUFVLEVBRGxCO0FBRUw0RixNQUFBQSxNQUFNLEVBQUVqRSxpQkFBaUIsQ0FBQ0MsV0FBRCxDQUZwQjtBQUdMaUUsTUFBQUEsb0JBQW9CLEVBQUUsdUJBSGpCO0FBSUxDLE1BQUFBLGVBQWUsRUFBRXpFLHVCQUF1QixFQUpuQztBQUtMMEUsTUFBQUEsY0FBYyxFQUFFLFlBQVksaURBQXNCLEtBQUt6RixJQUEzQixFQUFpQyxvQkFBakMsQ0FMdkI7QUFNTDBGLE1BQUFBLFNBQVMsRUFBRSxLQUFLQyxjQU5YO0FBT0xDLE1BQUFBLFVBQVUsRUFBRSxZQUFZO0FBQ3RCLFlBQUk7QUFDRixnQkFBTSxpREFBc0IsS0FBSzVGLElBQTNCLEVBQWlDLGtCQUFqQyxDQUFOO0FBQ0EsZ0JBQU02RixVQUFVLEdBQUcsTUFBTSwrQkFBYyxLQUFLN0YsSUFBbkIsQ0FBekI7O0FBQ0EsY0FBSTZGLFVBQVUsQ0FBQ0MsUUFBWCxDQUFvQixlQUFwQixDQUFKLEVBQTBDO0FBQ3hDLGtCQUFNLHVDQUFZLEtBQUs5RixJQUFqQixFQUF1QixrQkFBdkIsQ0FBTjtBQUNEO0FBQ0YsU0FORCxDQU1FLE9BQU8rRixDQUFQLEVBQVU7QUFDVixnQkFBTUYsVUFBVSxHQUFHLE1BQU0sK0JBQWMsS0FBSzdGLElBQW5CLENBQXpCO0FBQ0EsY0FBSTZGLFVBQVUsQ0FBQ0MsUUFBWCxDQUFvQixXQUFwQixDQUFKLEVBQXNDO0FBQ3RDLGdCQUFNQyxDQUFOO0FBQ0Q7QUFDRixPQW5CSTtBQW9CTEMsTUFBQUEsU0FBUyxFQUFFO0FBcEJOLEtBQVA7QUFzQkQ7O0FBRURDLEVBQUFBLHdCQUF3QixDQUFDbEUsTUFBRCxFQUNXO0FBQ2pDLFdBQVFBLE1BQUQsQ0FBbUNBLE1BQW5DLEtBQThDYSxTQUFyRDtBQUNEOztBQUVELFFBQU1zRCxTQUFOLEdBQWtEO0FBQUE7O0FBQ2hELFVBQU1DLGtCQUFrQixHQUFHLHVCQUFTQyxRQUFULENBQWtCLENBQWxCLEVBQXFCLE9BQXJCLEVBQThCQSxRQUE5QixDQUF1QyxDQUF2QyxFQUEwQyxRQUExQyxFQUFvRHZDLEdBQXBELENBQXdELENBQXhELEVBQTJELEtBQTNELENBQTNCO0FBQ0EsVUFBTXdDLFNBQVMsR0FBRyxLQUFLakYsT0FBTCxDQUFhaUYsU0FBYixJQUEwQkYsa0JBQWtCLENBQUNHLE1BQW5CLEVBQTVDOztBQUNBLFVBQU1DLFdBQVcsR0FBR0MsZ0JBQU9DLEdBQVAsQ0FBV04sa0JBQVgsRUFBK0IscUJBQU9FLFNBQVAsQ0FBL0IsQ0FBcEI7O0FBQ0F4RyxJQUFBQSxLQUFLLENBQUUsK0JBQThCMEcsV0FBVyxDQUFDRyxNQUFaLEVBQXFCLEVBQXJELENBQUw7QUFFQSxVQUFNQyxhQUFhLEdBQUcsTUFBTSxLQUFLNUIsc0JBQUwsRUFBNUI7QUFDQSxVQUFNSCxLQUFLLEdBQUcsTUFBTSxLQUFLRixRQUFMLEVBQXBCO0FBQ0EsVUFBTWtDLE9BQU8sR0FBRyxNQUFNLEtBQUt6QixVQUFMLEVBQXRCO0FBQ0EsVUFBTTBCLG9CQUFvQiw0QkFBRyxLQUFLekYsT0FBTCxDQUFheUYsb0JBQWhCLHlFQUF3QyxDQUFsRTtBQUVBLFVBQU01RSxRQUFRLEdBQUcsTUFBTTFCLE9BQU8sQ0FBQ3VHLEdBQVIsQ0FDckJsQyxLQUFLLENBQUN2QyxHQUFOLENBQVUsTUFBTzBFLElBQVAsSUFBZ0I7QUFBQTs7QUFDeEJsSCxNQUFBQSxLQUFLLENBQUUsK0JBQThCa0gsSUFBSSxDQUFDbEMsWUFBYSxFQUFsRCxDQUFMO0FBRUEsWUFBTW1DLHVCQUF1QixHQUFHLHVCQUFTbkQsR0FBVCxDQUFhZ0Qsb0JBQWIsRUFBbUMsT0FBbkMsQ0FBaEM7QUFDQSxZQUFNSSxNQUFNLEdBQUdELHVCQUF1QixDQUFDRSxJQUF4QixDQUE2QlgsV0FBN0IsRUFBMEMsUUFBMUMsQ0FBZjtBQUVBLFlBQU1ZLGFBQXlDLEdBQUcsRUFBbEQ7O0FBQ0EsV0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxJQUFJSCxNQUFyQixFQUE2QkcsQ0FBQyxJQUFJLENBQWxDLEVBQXFDO0FBQ25DLGNBQU1DLEtBQUssR0FBR0wsdUJBQXVCLENBQUNNLEtBQXhCLEdBQWdDbEIsUUFBaEMsQ0FBeUNnQixDQUF6QyxFQUE0QyxRQUE1QyxDQUFkO0FBQ0EsY0FBTXRGLFNBQVMsR0FBRyxNQUFNLGdDQUN0QixLQUFLOUIsSUFEaUIsRUFDWEwsNkJBRFcsRUFFdEI7QUFBRWtGLFVBQUFBLFlBQVksRUFBRWtDLElBQUksQ0FBQ2xDLFlBQXJCO0FBQW1Dd0MsVUFBQUEsS0FBSyxFQUFFQSxLQUFLLENBQUNYLE1BQU4sQ0FBYSxHQUFiLENBQTFDO0FBQTZEYSxVQUFBQSxJQUFJLEVBQUVGLEtBQUssQ0FBQ1gsTUFBTixDQUFhLE1BQWI7QUFBbkUsU0FGc0IsRUFHdEI7QUFDRUMsVUFBQUEsYUFERjtBQUVFLHVCQUFhQyxPQUZmO0FBR0UsMEJBQWdCO0FBSGxCLFNBSHNCLENBQXhCO0FBVUEsWUFBSSxDQUFBOUUsU0FBUyxTQUFULElBQUFBLFNBQVMsV0FBVCxZQUFBQSxTQUFTLENBQUUwRixVQUFYLE1BQTBCLENBQTlCLEVBQWlDLE1BQU0sSUFBSS9HLEtBQUosQ0FBVyx5Q0FBd0NzRyxJQUFJLENBQUNqQyxXQUFZLGNBQWEsQ0FBQWhELFNBQVMsU0FBVCxJQUFBQSxTQUFTLFdBQVQsWUFBQUEsU0FBUyxDQUFFMkYsS0FBWCxLQUFvQixFQUFHLEVBQXhHLENBQU47O0FBRWpDLFlBQUksQ0FBQyxLQUFLeEIsd0JBQUwsQ0FBOEJuRSxTQUE5QixDQUFMLEVBQStDO0FBQzdDLGdCQUFNLElBQUlyQixLQUFKLENBQVUsaURBQVYsQ0FBTjtBQUNEOztBQUVEMEcsUUFBQUEsYUFBYSxDQUFDTyxJQUFkLENBQW1CNUYsU0FBbkI7QUFDRDs7QUFFRCxZQUFNTSxZQUFZLEdBQUdULCtCQUErQixDQUFDd0YsYUFBRCxDQUFwRDtBQUVBdEgsTUFBQUEsS0FBSyxDQUFDLDRCQUFELENBQUw7QUFDQSxZQUFNOEgsSUFBSSxHQUFHLG9EQUFDLEtBQUt2RyxPQUFMLENBQWF3RyxVQUFkLDJEQUFDLHVCQUF5QkMsOEJBQTFCLHlFQUE0RCxJQUE1RCxJQUNYLHlDQUFzQnpGLFlBQXRCLEVBQW9DLHFCQUFPaUUsU0FBUCxDQUFwQyxFQUF1RCxLQUFLakYsT0FBTCxDQUFhMEcsbUJBQWIsSUFBb0MsS0FBM0YsQ0FEVyxHQUVYMUYsWUFGRjtBQUlBLGFBQU87QUFDTHVGLFFBQUFBLElBREs7QUFFTEksUUFBQUEsYUFBYSxFQUFFaEIsSUFBSSxDQUFDakM7QUFGZixPQUFQO0FBSUQsS0F2Q0QsQ0FEcUIsQ0FBdkI7QUEyQ0FqRixJQUFBQSxLQUFLLENBQUMsNkJBQUQsQ0FBTDtBQUVBQSxJQUFBQSxLQUFLLENBQUNtSSxJQUFJLENBQUNDLFNBQUwsQ0FBZWhHLFFBQWYsRUFBeUIsSUFBekIsRUFBK0IsQ0FBL0IsQ0FBRCxDQUFMO0FBQ0EsV0FBTztBQUNMaUcsTUFBQUEsT0FBTyxFQUFFLElBREo7QUFFTGpHLE1BQUFBO0FBRkssS0FBUDtBQUlEOztBQXBKNkU7O2VBdUpqRXVDLGMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBGcmFtZSwgUGFnZSB9IGZyb20gJ3B1cHBldGVlcic7XG5cbmltcG9ydCB7IGdldERlYnVnIH0gZnJvbSAnLi4vaGVscGVycy9kZWJ1Zyc7XG5pbXBvcnQge1xuICBjbGlja0J1dHRvbiwgZWxlbWVudFByZXNlbnRPblBhZ2UsIHBhZ2VFdmFsLCB3YWl0VW50aWxFbGVtZW50Rm91bmQsXG59IGZyb20gJy4uL2hlbHBlcnMvZWxlbWVudHMtaW50ZXJhY3Rpb25zJztcbmltcG9ydCB7IGZldGNoUG9zdFdpdGhpblBhZ2UgfSBmcm9tICcuLi9oZWxwZXJzL2ZldGNoJztcbmltcG9ydCB7IGdldEN1cnJlbnRVcmwgfSBmcm9tICcuLi9oZWxwZXJzL25hdmlnYXRpb24nO1xuaW1wb3J0IHsgZ2V0RnJvbVNlc3Npb25TdG9yYWdlIH0gZnJvbSAnLi4vaGVscGVycy9zdG9yYWdlJztcbmltcG9ydCB7IGZpbHRlck9sZFRyYW5zYWN0aW9ucyB9IGZyb20gJy4uL2hlbHBlcnMvdHJhbnNhY3Rpb25zJztcbmltcG9ydCB7IHdhaXRVbnRpbCB9IGZyb20gJy4uL2hlbHBlcnMvd2FpdGluZyc7XG5pbXBvcnQge1xuICBUcmFuc2FjdGlvbixcbiAgVHJhbnNhY3Rpb25TdGF0dXNlcyxcbiAgVHJhbnNhY3Rpb25UeXBlcyxcbiAgVHJhbnNhY3Rpb25zQWNjb3VudCxcbn0gZnJvbSAnLi4vdHJhbnNhY3Rpb25zJztcbmltcG9ydCB7IEJhc2VTY3JhcGVyV2l0aEJyb3dzZXIsIExvZ2luT3B0aW9ucywgTG9naW5SZXN1bHRzIH0gZnJvbSAnLi9iYXNlLXNjcmFwZXItd2l0aC1icm93c2VyJztcbmltcG9ydCB7IFNjcmFwZXJTY3JhcGluZ1Jlc3VsdCB9IGZyb20gJy4vaW50ZXJmYWNlJztcblxuY29uc3QgTE9HSU5fVVJMID0gJ2h0dHBzOi8vd3d3LmNhbC1vbmxpbmUuY28uaWwvJztcbmNvbnN0IFRSQU5TQUNUSU9OU19SRVFVRVNUX0VORFBPSU5UID0gJ2h0dHBzOi8vYXBpLmNhbC1vbmxpbmUuY28uaWwvVHJhbnNhY3Rpb25zL2FwaS90cmFuc2FjdGlvbnNEZXRhaWxzL2dldENhcmRUcmFuc2FjdGlvbnNEZXRhaWxzJztcblxuY29uc3QgSW52YWxpZFBhc3N3b3JkTWVzc2FnZSA9ICfXqdedINeU157Xqdeq157XqSDXkNeVINeU16HXmdeh157XlCDXqdeU15XXlteg15Ug16nXkteV15nXmdedJztcblxuY29uc3QgZGVidWcgPSBnZXREZWJ1ZygndmlzYS1jYWwnKTtcblxuZW51bSB0cm5UeXBlQ29kZSB7XG4gIHJlZ3VsYXIgPSAnNScsXG4gIGNyZWRpdCA9ICc2JyxcbiAgaW5zdGFsbG1lbnRzID0gJzgnLFxuICBzdGFuZGluZ09yZGVyID0gJzknLFxufVxuXG5pbnRlcmZhY2UgU2NyYXBlZFRyYW5zYWN0aW9uIHtcbiAgYW10QmVmb3JlQ29udkFuZEluZGV4OiBudW1iZXI7XG4gIGJyYW5jaENvZGVEZXNjOiBzdHJpbmc7XG4gIGNhc2hBY2NNYW5hZ2VyTmFtZTogbnVsbDtcbiAgY2FzaEFjY291bnRNYW5hZ2VyOiBudWxsO1xuICBjYXNoQWNjb3VudFRybkFtdDogbnVtYmVyO1xuICBjaGFyZ2VFeHRlcm5hbFRvQ2FyZENvbW1lbnQ6IHN0cmluZztcbiAgY29tbWVudHM6IFtdO1xuICBjdXJQYXltZW50TnVtOiBudW1iZXI7XG4gIGRlYkNyZEN1cnJlbmN5U3ltYm9sOiBDdXJyZW5jeVN5bWJvbDtcbiAgZGViQ3JkRGF0ZTogc3RyaW5nO1xuICBkZWJpdFNwcmVhZEluZDogYm9vbGVhbjtcbiAgZGlzY291bnRBbW91bnQ6IHVua25vd247XG4gIGRpc2NvdW50UmVhc29uOiB1bmtub3duO1xuICBpbW1lZGlhdGVDb21tZW50czogW107XG4gIGlzSW1tZWRpYXRlQ29tbWVudEluZDogYm9vbGVhbjtcbiAgaXNJbW1lZGlhdGVISEtJbmQ6IGJvb2xlYW47XG4gIGlzTWFyZ2FyaXRhOiBib29sZWFuO1xuICBpc1NwcmVhZFBheW1lbnN0QWJyb2FkOiBib29sZWFuO1xuICBsaW5rZWRDb21tZW50czogW107XG4gIG1lcmNoYW50QWRkcmVzczogc3RyaW5nO1xuICBtZXJjaGFudE5hbWU6IHN0cmluZztcbiAgbWVyY2hhbnRQaG9uZU5vOiBzdHJpbmc7XG4gIG51bU9mUGF5bWVudHM6IG51bWJlcjtcbiAgb25Hb2luZ1RyYW5zYWN0aW9uc0NvbW1lbnQ6IHN0cmluZztcbiAgcmVmdW5kSW5kOiBib29sZWFuO1xuICByb3VuZGluZ0Ftb3VudDogdW5rbm93bjtcbiAgcm91bmRpbmdSZWFzb246IHVua25vd247XG4gIHRva2VuSW5kOiAwO1xuICB0b2tlbk51bWJlclBhcnQ0OiAnJztcbiAgdHJhbnNDYXJkUHJlc2VudEluZDogYm9vbGVhbjtcbiAgdHJhbnNUeXBlQ29tbWVudERldGFpbHM6IFtdO1xuICB0cm5BbXQ6IG51bWJlcjtcbiAgdHJuQ3VycmVuY3lTeW1ib2w6IEN1cnJlbmN5U3ltYm9sO1xuICB0cm5FeGFjV2F5OiBudW1iZXI7XG4gIHRybkludElkOiBzdHJpbmc7XG4gIHRybk51bWFyZXRvcjogbnVtYmVyO1xuICB0cm5QdXJjaGFzZURhdGU6IHN0cmluZztcbiAgdHJuVHlwZTogc3RyaW5nO1xuICB0cm5UeXBlQ29kZTogdHJuVHlwZUNvZGU7XG4gIHdhbGxldFByb3ZpZGVyQ29kZTogMDtcbiAgd2FsbGV0UHJvdmlkZXJEZXNjOiAnJztcbn1cbmludGVyZmFjZSBJbml0UmVzcG9uc2Uge1xuICByZXN1bHQ6IHtcbiAgICBjYXJkczoge1xuICAgICAgY2FyZFVuaXF1ZUlkOiBzdHJpbmc7XG4gICAgICBsYXN0NERpZ2l0czogc3RyaW5nO1xuICAgICAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgICB9W107XG4gIH07XG59XG50eXBlIEN1cnJlbmN5U3ltYm9sID0gJ+KCqicgfCBzdHJpbmc7XG5pbnRlcmZhY2UgQ2FyZFRyYW5zYWN0aW9uRGV0YWlsc0Vycm9yIHtcbiAgdGl0bGU6IHN0cmluZztcbiAgc3RhdHVzQ29kZTogbnVtYmVyO1xufVxuaW50ZXJmYWNlIENhcmRUcmFuc2FjdGlvbkRldGFpbHMgZXh0ZW5kcyBDYXJkVHJhbnNhY3Rpb25EZXRhaWxzRXJyb3Ige1xuICByZXN1bHQ6IHtcbiAgICBiYW5rQWNjb3VudHM6IHtcbiAgICAgIGJhbmtBY2NvdW50TnVtOiBzdHJpbmc7XG4gICAgICBiYW5rTmFtZTogc3RyaW5nO1xuICAgICAgY2hvaWNlRXh0ZXJuYWxUcmFuc2FjdGlvbnM6IGFueTtcbiAgICAgIGN1cnJlbnRCYW5rQWNjb3VudEluZDogYm9vbGVhbjtcbiAgICAgIGRlYml0RGF0ZXM6IHtcbiAgICAgICAgYmFza2V0QW1vdW50Q29tbWVudDogdW5rbm93bjtcbiAgICAgICAgY2hvaWNlSEhLRGViaXQ6IG51bWJlcjtcbiAgICAgICAgZGF0ZTogc3RyaW5nO1xuICAgICAgICBkZWJpdFJlYXNvbjogdW5rbm93bjtcbiAgICAgICAgZml4RGViaXRBbW91bnQ6IG51bWJlcjtcbiAgICAgICAgZnJvbVB1cmNoYXNlRGF0ZTogc3RyaW5nO1xuICAgICAgICBpc0Nob2ljZVJlcGFpbWVudDogYm9vbGVhbjtcbiAgICAgICAgdG9QdXJjaGFzZURhdGU6IHN0cmluZztcbiAgICAgICAgdG90YWxCYXNrZXRBbW91bnQ6IG51bWJlcjtcbiAgICAgICAgdG90YWxEZWJpdHM6IHtcbiAgICAgICAgICBjdXJyZW5jeVN5bWJvbDogQ3VycmVuY3lTeW1ib2w7XG4gICAgICAgICAgYW1vdW50OiBudW1iZXI7XG4gICAgICAgIH1bXTtcbiAgICAgICAgdHJhbnNhY3Rpb25zOiBTY3JhcGVkVHJhbnNhY3Rpb25bXTtcbiAgICAgIH1bXTtcbiAgICAgIGltbWlkaWF0ZURlYml0czogeyB0b3RhbERlYml0czogW10sIGRlYml0RGF5czogW10gfTtcbiAgICB9W107XG4gICAgYmxvY2tlZENhcmRJbmQ6IGJvb2xlYW47XG4gIH07XG4gIHN0YXR1c0NvZGU6IDE7XG4gIHN0YXR1c0Rlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHN0YXR1c1RpdGxlOiBzdHJpbmc7XG59XG5cblxuYXN5bmMgZnVuY3Rpb24gZ2V0TG9naW5GcmFtZShwYWdlOiBQYWdlKSB7XG4gIGxldCBmcmFtZTogRnJhbWUgfCBudWxsID0gbnVsbDtcbiAgZGVidWcoJ3dhaXQgdW50aWwgbG9naW4gZnJhbWUgZm91bmQnKTtcbiAgYXdhaXQgd2FpdFVudGlsKCgpID0+IHtcbiAgICBmcmFtZSA9IHBhZ2VcbiAgICAgIC5mcmFtZXMoKVxuICAgICAgLmZpbmQoKGYpID0+IGYudXJsKCkuaW5jbHVkZXMoJ2NhbGNvbm5lY3QnKSkgfHwgbnVsbDtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCEhZnJhbWUpO1xuICB9LCAnd2FpdCBmb3IgaWZyYW1lIHdpdGggbG9naW4gZm9ybScsIDEwMDAwLCAxMDAwKTtcblxuICBpZiAoIWZyYW1lKSB7XG4gICAgZGVidWcoJ2ZhaWxlZCB0byBmaW5kIGxvZ2luIGZyYW1lIGZvciAxMCBzZWNvbmRzJyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdmYWlsZWQgdG8gZXh0cmFjdCBsb2dpbiBpZnJhbWUnKTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFzSW52YWxpZFBhc3N3b3JkRXJyb3IocGFnZTogUGFnZSkge1xuICBjb25zdCBmcmFtZSA9IGF3YWl0IGdldExvZ2luRnJhbWUocGFnZSk7XG4gIGNvbnN0IGVycm9yRm91bmQgPSBhd2FpdCBlbGVtZW50UHJlc2VudE9uUGFnZShmcmFtZSwgJ2Rpdi5nZW5lcmFsLWVycm9yID4gZGl2Jyk7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yRm91bmQgPyBhd2FpdCBwYWdlRXZhbChmcmFtZSwgJ2Rpdi5nZW5lcmFsLWVycm9yID4gZGl2JywgJycsIChpdGVtKSA9PiB7XG4gICAgcmV0dXJuIChpdGVtIGFzIEhUTUxEaXZFbGVtZW50KS5pbm5lclRleHQ7XG4gIH0pIDogJyc7XG4gIHJldHVybiBlcnJvck1lc3NhZ2UgPT09IEludmFsaWRQYXNzd29yZE1lc3NhZ2U7XG59XG5cbmZ1bmN0aW9uIGdldFBvc3NpYmxlTG9naW5SZXN1bHRzKCkge1xuICBkZWJ1ZygncmV0dXJuIHBvc3NpYmxlIGxvZ2luIHJlc3VsdHMnKTtcbiAgY29uc3QgdXJsczogTG9naW5PcHRpb25zWydwb3NzaWJsZVJlc3VsdHMnXSA9IHtcbiAgICBbTG9naW5SZXN1bHRzLlN1Y2Nlc3NdOiBbL2Rhc2hib2FyZC9pXSxcbiAgICBbTG9naW5SZXN1bHRzLkludmFsaWRQYXNzd29yZF06IFthc3luYyAob3B0aW9ucz86IHsgcGFnZT86IFBhZ2UgfSkgPT4ge1xuICAgICAgY29uc3QgcGFnZSA9IG9wdGlvbnM/LnBhZ2U7XG4gICAgICBpZiAoIXBhZ2UpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0ludmFsaWRQYXNzd29yZEVycm9yKHBhZ2UpO1xuICAgIH1dLFxuICAgIC8vIFtMb2dpblJlc3VsdHMuQWNjb3VudEJsb2NrZWRdOiBbXSwgLy8gVE9ETyBhZGQgd2hlbiByZWFjaGluZyB0aGlzIHNjZW5hcmlvXG4gICAgLy8gW0xvZ2luUmVzdWx0cy5DaGFuZ2VQYXNzd29yZF06IFtdLCAvLyBUT0RPIGFkZCB3aGVuIHJlYWNoaW5nIHRoaXMgc2NlbmFyaW9cbiAgfTtcbiAgcmV0dXJuIHVybHM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxvZ2luRmllbGRzKGNyZWRlbnRpYWxzOiBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscykge1xuICBkZWJ1ZygnY3JlYXRlIGxvZ2luIGZpZWxkcyBmb3IgdXNlcm5hbWUgYW5kIHBhc3N3b3JkJyk7XG4gIHJldHVybiBbXG4gICAgeyBzZWxlY3RvcjogJ1tmb3JtY29udHJvbG5hbWU9XCJ1c2VyTmFtZVwiXScsIHZhbHVlOiBjcmVkZW50aWFscy51c2VybmFtZSB9LFxuICAgIHsgc2VsZWN0b3I6ICdbZm9ybWNvbnRyb2xuYW1lPVwicGFzc3dvcmRcIl0nLCB2YWx1ZTogY3JlZGVudGlhbHMucGFzc3dvcmQgfSxcbiAgXTtcbn1cblxuZnVuY3Rpb24gY29udmVydFBhcnNlZERhdGFUb1RyYW5zYWN0aW9ucyhwYXJzZWREYXRhOiBDYXJkVHJhbnNhY3Rpb25EZXRhaWxzW10pOiBUcmFuc2FjdGlvbltdIHtcbiAgcmV0dXJuIHBhcnNlZERhdGFcbiAgICAuZmxhdE1hcCgobW9udGhEYXRhKSA9PiBtb250aERhdGEucmVzdWx0LmJhbmtBY2NvdW50cylcbiAgICAuZmxhdE1hcCgoYWNjb3VudHMpID0+IGFjY291bnRzLmRlYml0RGF0ZXMpXG4gICAgLmZsYXRNYXAoKGRlYml0RGF0ZSkgPT4gZGViaXREYXRlLnRyYW5zYWN0aW9ucylcbiAgICAubWFwKCh0cmFuc2FjdGlvbikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFsbG1lbnRzID0gKHRyYW5zYWN0aW9uLmN1clBheW1lbnROdW0gJiYgdHJhbnNhY3Rpb24ubnVtT2ZQYXltZW50cyAmJlxuICAgICAge1xuICAgICAgICBudW1iZXI6IHRyYW5zYWN0aW9uLmN1clBheW1lbnROdW0sXG4gICAgICAgIHRvdGFsOiB0cmFuc2FjdGlvbi5udW1PZlBheW1lbnRzLFxuICAgICAgfSkgfHxcbiAgICAgICAgdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBkYXRlID0gbW9tZW50KHRyYW5zYWN0aW9uLnRyblB1cmNoYXNlRGF0ZSk7XG5cbiAgICAgIGxldCBjaGFyZ2VkQW1vdW50ID0gdHJhbnNhY3Rpb24uYW10QmVmb3JlQ29udkFuZEluZGV4ICogKC0xKTtcbiAgICAgIGxldCBvcmlnaW5hbEFtb3VudCA9IHRyYW5zYWN0aW9uLnRybkFtdCAqICgtMSk7XG5cbiAgICAgIGlmICh0cmFuc2FjdGlvbi50cm5UeXBlQ29kZSA9PT0gdHJuVHlwZUNvZGUuY3JlZGl0KSB7XG4gICAgICAgIGNoYXJnZWRBbW91bnQgPSB0cmFuc2FjdGlvbi5hbXRCZWZvcmVDb252QW5kSW5kZXg7XG4gICAgICAgIG9yaWdpbmFsQW1vdW50ID0gdHJhbnNhY3Rpb24udHJuQW10O1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQ6IFRyYW5zYWN0aW9uID0ge1xuICAgICAgICBjaGFyZ2VkQW1vdW50LFxuICAgICAgICBkZXNjcmlwdGlvbjogdHJhbnNhY3Rpb24ubWVyY2hhbnROYW1lLFxuICAgICAgICBvcmlnaW5hbEFtb3VudCxcbiAgICAgICAgb3JpZ2luYWxDdXJyZW5jeTogdHJhbnNhY3Rpb24udHJuQ3VycmVuY3lTeW1ib2wsXG4gICAgICAgIHByb2Nlc3NlZERhdGU6IHRyYW5zYWN0aW9uLmRlYkNyZERhdGUsXG4gICAgICAgIHN0YXR1czogVHJhbnNhY3Rpb25TdGF0dXNlcy5Db21wbGV0ZWQsXG4gICAgICAgIGRhdGU6IGluc3RhbGxtZW50cyA/XG4gICAgICAgICAgZGF0ZS5hZGQoaW5zdGFsbG1lbnRzLm51bWJlciAtIDEsICdtb250aCcpLnRvSVNPU3RyaW5nKCkgOlxuICAgICAgICAgIGRhdGUudG9JU09TdHJpbmcoKSxcbiAgICAgICAgdHlwZTogW3RyblR5cGVDb2RlLnJlZ3VsYXIsIHRyblR5cGVDb2RlLnN0YW5kaW5nT3JkZXJdLmluY2x1ZGVzKHRyYW5zYWN0aW9uLnRyblR5cGVDb2RlKSA/XG4gICAgICAgICAgVHJhbnNhY3Rpb25UeXBlcy5Ob3JtYWwgOlxuICAgICAgICAgIFRyYW5zYWN0aW9uVHlwZXMuSW5zdGFsbG1lbnRzLFxuICAgICAgICBtZW1vOiB0cmFuc2FjdGlvbi50cmFuc1R5cGVDb21tZW50RGV0YWlscy50b1N0cmluZygpIHx8IHVuZGVmaW5lZCxcbiAgICAgIH07XG5cbiAgICAgIGlmIChpbnN0YWxsbWVudHMpIHtcbiAgICAgICAgcmVzdWx0Lmluc3RhbGxtZW50cyA9IGluc3RhbGxtZW50cztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbn1cblxudHlwZSBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscyA9IHsgdXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyB9O1xuXG5jbGFzcyBWaXNhQ2FsU2NyYXBlciBleHRlbmRzIEJhc2VTY3JhcGVyV2l0aEJyb3dzZXI8U2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHM+IHtcbiAgb3BlbkxvZ2luUG9wdXAgPSBhc3luYyAoKSA9PiB7XG4gICAgZGVidWcoJ29wZW4gbG9naW4gcG9wdXAsIHdhaXQgdW50aWwgbG9naW4gYnV0dG9uIGF2YWlsYWJsZScpO1xuICAgIGF3YWl0IHdhaXRVbnRpbEVsZW1lbnRGb3VuZCh0aGlzLnBhZ2UsICcjY2NMb2dpbkRlc2t0b3BCdG4nLCB0cnVlKTtcbiAgICBkZWJ1ZygnY2xpY2sgb24gdGhlIGxvZ2luIGJ1dHRvbicpO1xuICAgIGF3YWl0IGNsaWNrQnV0dG9uKHRoaXMucGFnZSwgJyNjY0xvZ2luRGVza3RvcEJ0bicpO1xuICAgIGRlYnVnKCdnZXQgdGhlIGZyYW1lIHRoYXQgaG9sZHMgdGhlIGxvZ2luJyk7XG4gICAgY29uc3QgZnJhbWUgPSBhd2FpdCBnZXRMb2dpbkZyYW1lKHRoaXMucGFnZSk7XG4gICAgZGVidWcoJ3dhaXQgdW50aWwgdGhlIHBhc3N3b3JkIGxvZ2luIHRhYiBoZWFkZXIgaXMgYXZhaWxhYmxlJyk7XG4gICAgYXdhaXQgd2FpdFVudGlsRWxlbWVudEZvdW5kKGZyYW1lLCAnI3JlZ3VsYXItbG9naW4nKTtcbiAgICBkZWJ1ZygnbmF2aWdhdGUgdG8gdGhlIHBhc3N3b3JkIGxvZ2luIHRhYicpO1xuICAgIGF3YWl0IGNsaWNrQnV0dG9uKGZyYW1lLCAnI3JlZ3VsYXItbG9naW4nKTtcbiAgICBkZWJ1Zygnd2FpdCB1bnRpbCB0aGUgcGFzc3dvcmQgbG9naW4gdGFiIGlzIGFjdGl2ZScpO1xuICAgIGF3YWl0IHdhaXRVbnRpbEVsZW1lbnRGb3VuZChmcmFtZSwgJ3JlZ3VsYXItbG9naW4nKTtcblxuICAgIHJldHVybiBmcmFtZTtcbiAgfTtcblxuICBhc3luYyBnZXRDYXJkcygpIHtcbiAgICBjb25zdCBpbml0RGF0YSA9IGF3YWl0IHdhaXRVbnRpbChcbiAgICAgICgpID0+IGdldEZyb21TZXNzaW9uU3RvcmFnZTxJbml0UmVzcG9uc2U+KHRoaXMucGFnZSwgJ2luaXQnKSxcbiAgICAgICdnZXQgaW5pdCBkYXRhIGluIHNlc3Npb24gc3RvcmFnZScsXG4gICAgICAxMDAwMCxcbiAgICAgIDEwMDAsXG4gICAgKTtcbiAgICBpZiAoIWluaXREYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIFxcJ2luaXRcXCcgZGF0YSBpbiBzZXNzaW9uIHN0b3JhZ2UnKTtcbiAgICB9XG4gICAgcmV0dXJuIGluaXREYXRhPy5yZXN1bHQuY2FyZHMubWFwKCh7IGNhcmRVbmlxdWVJZCwgbGFzdDREaWdpdHMgfSkgPT4gKHsgY2FyZFVuaXF1ZUlkLCBsYXN0NERpZ2l0cyB9KSk7XG4gIH1cblxuICBhc3luYyBnZXRBdXRob3JpemF0aW9uSGVhZGVyKCkge1xuICAgIGNvbnN0IGF1dGhNb2R1bGUgPSBhd2FpdCBnZXRGcm9tU2Vzc2lvblN0b3JhZ2U8eyBhdXRoOiB7IGNhbENvbm5lY3RUb2tlbjogc3RyaW5nIH0gfT4odGhpcy5wYWdlLCAnYXV0aC1tb2R1bGUnKTtcbiAgICBpZiAoIWF1dGhNb2R1bGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IGZpbmQgXFwnYXV0aC1tb2R1bGVcXCcgaW4gc2Vzc2lvbiBzdG9yYWdlJyk7XG4gICAgfVxuICAgIHJldHVybiBgQ0FMQXV0aFNjaGVtZSAke2F1dGhNb2R1bGUuYXV0aC5jYWxDb25uZWN0VG9rZW59YDtcbiAgfVxuXG4gIGFzeW5jIGdldFhTaXRlSWQoKSB7XG4gICAgLypcbiAgICAgIEkgZG9uJ3Qga25vdyBpZiB0aGUgY29uc3RhbnQgYmVsb3cgd2lsbCBjaGFuZ2UgaW4gdGhlIGZlYXR1cmUuXG4gICAgICBJZiBzbywgdXNlIHRoZSBuZXh0IGNvZGU6XG5cbiAgICAgIHJldHVybiB0aGlzLnBhZ2UuZXZhbHVhdGUoKCkgPT4gbmV3IFV0KCkueFNpdGVJZCk7XG5cbiAgICAgIFRvIGdldCB0aGUgY2xhc3NuYW1lIHNlYXJjaCBmb3IgJ3hTaXRlSWQnIGluIHRoZSBwYWdlIHNvdXJjZVxuICAgICAgY2xhc3MgVXQge1xuICAgICAgICBjb25zdHJ1Y3RvcihfZSwgb24sIHluKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlID0gX2UsXG4gICAgICAgICAgICB0aGlzLmNvbmZpZyA9IG9uLFxuICAgICAgICAgICAgdGhpcy5ldmVudEJ1c1NlcnZpY2UgPSB5bixcbiAgICAgICAgICAgIHRoaXMueFNpdGVJZCA9IFwiMDkwMzE5ODctMjczRS0yMzExLTkwNkMtOEFGODVCMTdDOEQ5XCIsXG4gICAgKi9cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCcwOTAzMTk4Ny0yNzNFLTIzMTEtOTA2Qy04QUY4NUIxN0M4RDknKTtcbiAgfVxuXG4gIGdldExvZ2luT3B0aW9ucyhjcmVkZW50aWFsczogU2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHMpOiBMb2dpbk9wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICBsb2dpblVybDogYCR7TE9HSU5fVVJMfWAsXG4gICAgICBmaWVsZHM6IGNyZWF0ZUxvZ2luRmllbGRzKGNyZWRlbnRpYWxzKSxcbiAgICAgIHN1Ym1pdEJ1dHRvblNlbGVjdG9yOiAnYnV0dG9uW3R5cGU9XCJzdWJtaXRcIl0nLFxuICAgICAgcG9zc2libGVSZXN1bHRzOiBnZXRQb3NzaWJsZUxvZ2luUmVzdWx0cygpLFxuICAgICAgY2hlY2tSZWFkaW5lc3M6IGFzeW5jICgpID0+IHdhaXRVbnRpbEVsZW1lbnRGb3VuZCh0aGlzLnBhZ2UsICcjY2NMb2dpbkRlc2t0b3BCdG4nKSxcbiAgICAgIHByZUFjdGlvbjogdGhpcy5vcGVuTG9naW5Qb3B1cCxcbiAgICAgIHBvc3RBY3Rpb246IGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB3YWl0VW50aWxFbGVtZW50Rm91bmQodGhpcy5wYWdlLCAnYnV0dG9uLmJ0bi1jbG9zZScpO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRVcmwgPSBhd2FpdCBnZXRDdXJyZW50VXJsKHRoaXMucGFnZSk7XG4gICAgICAgICAgaWYgKGN1cnJlbnRVcmwuZW5kc1dpdGgoJ3NpdGUtdHV0b3JpYWwnKSkge1xuICAgICAgICAgICAgYXdhaXQgY2xpY2tCdXR0b24odGhpcy5wYWdlLCAnYnV0dG9uLmJ0bi1jbG9zZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRVcmwgPSBhd2FpdCBnZXRDdXJyZW50VXJsKHRoaXMucGFnZSk7XG4gICAgICAgICAgaWYgKGN1cnJlbnRVcmwuZW5kc1dpdGgoJ2Rhc2hib2FyZCcpKSByZXR1cm47XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZXJBZ2VudDogJ01vemlsbGEvNS4wIChYMTE7IExpbnV4IHg4Nl82NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzc4LjAuMzkwNC4xMDggU2FmYXJpLzUzNy4zNicsXG4gICAgfTtcbiAgfVxuXG4gIGlzQ2FyZFRyYW5zYWN0aW9uRGV0YWlscyhyZXN1bHQ6IENhcmRUcmFuc2FjdGlvbkRldGFpbHMgfCBDYXJkVHJhbnNhY3Rpb25EZXRhaWxzRXJyb3IpOlxuICAgIHJlc3VsdCBpcyBDYXJkVHJhbnNhY3Rpb25EZXRhaWxzIHtcbiAgICByZXR1cm4gKHJlc3VsdCBhcyBDYXJkVHJhbnNhY3Rpb25EZXRhaWxzKS5yZXN1bHQgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFzeW5jIGZldGNoRGF0YSgpOiBQcm9taXNlPFNjcmFwZXJTY3JhcGluZ1Jlc3VsdD4ge1xuICAgIGNvbnN0IGRlZmF1bHRTdGFydE1vbWVudCA9IG1vbWVudCgpLnN1YnRyYWN0KDEsICd5ZWFycycpLnN1YnRyYWN0KDYsICdtb250aHMnKS5hZGQoMSwgJ2RheScpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMub3B0aW9ucy5zdGFydERhdGUgfHwgZGVmYXVsdFN0YXJ0TW9tZW50LnRvRGF0ZSgpO1xuICAgIGNvbnN0IHN0YXJ0TW9tZW50ID0gbW9tZW50Lm1heChkZWZhdWx0U3RhcnRNb21lbnQsIG1vbWVudChzdGFydERhdGUpKTtcbiAgICBkZWJ1ZyhgZmV0Y2ggdHJhbnNhY3Rpb25zIHN0YXJ0aW5nICR7c3RhcnRNb21lbnQuZm9ybWF0KCl9YCk7XG5cbiAgICBjb25zdCBBdXRob3JpemF0aW9uID0gYXdhaXQgdGhpcy5nZXRBdXRob3JpemF0aW9uSGVhZGVyKCk7XG4gICAgY29uc3QgY2FyZHMgPSBhd2FpdCB0aGlzLmdldENhcmRzKCk7XG4gICAgY29uc3QgeFNpdGVJZCA9IGF3YWl0IHRoaXMuZ2V0WFNpdGVJZCgpO1xuICAgIGNvbnN0IGZ1dHVyZU1vbnRoc1RvU2NyYXBlID0gdGhpcy5vcHRpb25zLmZ1dHVyZU1vbnRoc1RvU2NyYXBlID8/IDE7XG5cbiAgICBjb25zdCBhY2NvdW50cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgY2FyZHMubWFwKGFzeW5jIChjYXJkKSA9PiB7XG4gICAgICAgIGRlYnVnKGBmZXRjaCB0cmFuc2FjdGlvbnMgZm9yIGNhcmQgJHtjYXJkLmNhcmRVbmlxdWVJZH1gKTtcblxuICAgICAgICBjb25zdCBmaW5hbE1vbnRoVG9GZXRjaE1vbWVudCA9IG1vbWVudCgpLmFkZChmdXR1cmVNb250aHNUb1NjcmFwZSwgJ21vbnRoJyk7XG4gICAgICAgIGNvbnN0IG1vbnRocyA9IGZpbmFsTW9udGhUb0ZldGNoTW9tZW50LmRpZmYoc3RhcnRNb21lbnQsICdtb250aHMnKTtcblxuICAgICAgICBjb25zdCBhbGxNb250aHNEYXRhOiAoQ2FyZFRyYW5zYWN0aW9uRGV0YWlscylbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBtb250aHM7IGkgKz0gMSkge1xuICAgICAgICAgIGNvbnN0IG1vbnRoID0gZmluYWxNb250aFRvRmV0Y2hNb21lbnQuY2xvbmUoKS5zdWJ0cmFjdChpLCAnbW9udGhzJyk7XG4gICAgICAgICAgY29uc3QgbW9udGhEYXRhID0gYXdhaXQgZmV0Y2hQb3N0V2l0aGluUGFnZTxDYXJkVHJhbnNhY3Rpb25EZXRhaWxzIHwgQ2FyZFRyYW5zYWN0aW9uRGV0YWlsc0Vycm9yPihcbiAgICAgICAgICAgIHRoaXMucGFnZSwgVFJBTlNBQ1RJT05TX1JFUVVFU1RfRU5EUE9JTlQsXG4gICAgICAgICAgICB7IGNhcmRVbmlxdWVJZDogY2FyZC5jYXJkVW5pcXVlSWQsIG1vbnRoOiBtb250aC5mb3JtYXQoJ00nKSwgeWVhcjogbW9udGguZm9ybWF0KCdZWVlZJykgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbixcbiAgICAgICAgICAgICAgJ1gtU2l0ZS1JZCc6IHhTaXRlSWQsXG4gICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAobW9udGhEYXRhPy5zdGF0dXNDb2RlICE9PSAxKSB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byBmZXRjaCB0cmFuc2FjdGlvbnMgZm9yIGNhcmQgJHtjYXJkLmxhc3Q0RGlnaXRzfS4gTWVzc2FnZTogJHttb250aERhdGE/LnRpdGxlIHx8ICcnfWApO1xuXG4gICAgICAgICAgaWYgKCF0aGlzLmlzQ2FyZFRyYW5zYWN0aW9uRGV0YWlscyhtb250aERhdGEpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21vbnRoRGF0YSBpcyBub3Qgb2YgdHlwZSBDYXJkVHJhbnNhY3Rpb25EZXRhaWxzJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYWxsTW9udGhzRGF0YS5wdXNoKG1vbnRoRGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0cmFuc2FjdGlvbnMgPSBjb252ZXJ0UGFyc2VkRGF0YVRvVHJhbnNhY3Rpb25zKGFsbE1vbnRoc0RhdGEpO1xuXG4gICAgICAgIGRlYnVnKCdmaWxlciBvdXQgb2xkIHRyYW5zYWN0aW9ucycpO1xuICAgICAgICBjb25zdCB0eG5zID0gKHRoaXMub3B0aW9ucy5vdXRwdXREYXRhPy5lbmFibGVUcmFuc2FjdGlvbnNGaWx0ZXJCeURhdGUgPz8gdHJ1ZSkgP1xuICAgICAgICAgIGZpbHRlck9sZFRyYW5zYWN0aW9ucyh0cmFuc2FjdGlvbnMsIG1vbWVudChzdGFydERhdGUpLCB0aGlzLm9wdGlvbnMuY29tYmluZUluc3RhbGxtZW50cyB8fCBmYWxzZSkgOlxuICAgICAgICAgIHRyYW5zYWN0aW9ucztcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR4bnMsXG4gICAgICAgICAgYWNjb3VudE51bWJlcjogY2FyZC5sYXN0NERpZ2l0cyxcbiAgICAgICAgfSBhcyBUcmFuc2FjdGlvbnNBY2NvdW50O1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIGRlYnVnKCdyZXR1cm4gdGhlIHNjcmFwZWQgYWNjb3VudHMnKTtcblxuICAgIGRlYnVnKEpTT04uc3RyaW5naWZ5KGFjY291bnRzLCBudWxsLCAyKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICBhY2NvdW50cyxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpc2FDYWxTY3JhcGVyO1xuIl19
|