parse-server 4.10.17 → 4.10.18
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/Routers/FilesRouter.js +16 -1
- package/package.json +1 -1
|
@@ -29,6 +29,8 @@ const triggers = require('../triggers');
|
|
|
29
29
|
|
|
30
30
|
const http = require('http');
|
|
31
31
|
|
|
32
|
+
const Utils = require('../Utils');
|
|
33
|
+
|
|
32
34
|
const downloadFileFromURI = uri => {
|
|
33
35
|
return new Promise((res, rej) => {
|
|
34
36
|
http.get(uri, response => {
|
|
@@ -141,6 +143,19 @@ class FilesRouter {
|
|
|
141
143
|
metadata = {},
|
|
142
144
|
tags = {}
|
|
143
145
|
} = req.fileData || {};
|
|
146
|
+
|
|
147
|
+
if (req.config && req.config.requestKeywordDenylist) {
|
|
148
|
+
// Scan request data for denied keywords
|
|
149
|
+
for (const keyword of req.config.requestKeywordDenylist) {
|
|
150
|
+
const match = Utils.objectContainsKeyValue(metadata, keyword.key, keyword.value) || Utils.objectContainsKeyValue(tags, keyword.key, keyword.value);
|
|
151
|
+
|
|
152
|
+
if (match) {
|
|
153
|
+
next(new _node.default.Error(_node.default.Error.INVALID_KEY_NAME, `Prohibited keyword in request data: ${JSON.stringify(keyword)}.`));
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
144
159
|
file.setTags(tags);
|
|
145
160
|
file.setMetadata(metadata);
|
|
146
161
|
const fileSize = Buffer.byteLength(req.body);
|
|
@@ -269,4 +284,4 @@ function isFileStreamable(req, filesController) {
|
|
|
269
284
|
const end = Number(range[1]);
|
|
270
285
|
return (!isNaN(start) || !isNaN(end)) && typeof filesController.adapter.handleFileStream === 'function';
|
|
271
286
|
}
|
|
272
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0ZpbGVzUm91dGVyLmpzIl0sIm5hbWVzIjpbInRyaWdnZXJzIiwicmVxdWlyZSIsImh0dHAiLCJkb3dubG9hZEZpbGVGcm9tVVJJIiwidXJpIiwiUHJvbWlzZSIsInJlcyIsInJlaiIsImdldCIsInJlc3BvbnNlIiwic2V0RGVmYXVsdEVuY29kaW5nIiwiYm9keSIsImhlYWRlcnMiLCJvbiIsImRhdGEiLCJlIiwibWVzc2FnZSIsImFkZEZpbGVEYXRhSWZOZWVkZWQiLCJmaWxlIiwiX3NvdXJjZSIsImZvcm1hdCIsImJhc2U2NCIsIl9wcmV2aW91c1NhdmUiLCJfZGF0YSIsIl9yZXF1ZXN0VGFzayIsIkZpbGVzUm91dGVyIiwiZXhwcmVzc1JvdXRlciIsIm1heFVwbG9hZFNpemUiLCJyb3V0ZXIiLCJleHByZXNzIiwiUm91dGVyIiwiZ2V0SGFuZGxlciIsIm1ldGFkYXRhSGFuZGxlciIsInBvc3QiLCJyZXEiLCJuZXh0IiwiUGFyc2UiLCJFcnJvciIsIklOVkFMSURfRklMRV9OQU1FIiwiQm9keVBhcnNlciIsInJhdyIsInR5cGUiLCJsaW1pdCIsIk1pZGRsZXdhcmVzIiwiaGFuZGxlUGFyc2VIZWFkZXJzIiwiY3JlYXRlSGFuZGxlciIsImRlbGV0ZSIsImVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiLCJkZWxldGVIYW5kbGVyIiwiY29uZmlnIiwiQ29uZmlnIiwicGFyYW1zIiwiYXBwSWQiLCJzdGF0dXMiLCJlcnIiLCJPUEVSQVRJT05fRk9SQklEREVOIiwianNvbiIsImNvZGUiLCJlcnJvciIsImZpbGVzQ29udHJvbGxlciIsImZpbGVuYW1lIiwiY29udGVudFR5cGUiLCJtaW1lIiwiZ2V0VHlwZSIsImlzRmlsZVN0cmVhbWFibGUiLCJoYW5kbGVGaWxlU3RyZWFtIiwiY2F0Y2giLCJzZXQiLCJlbmQiLCJnZXRGaWxlRGF0YSIsInRoZW4iLCJsZW5ndGgiLCJGSUxFX1NBVkVfRVJST1IiLCJ2YWxpZGF0ZUZpbGVuYW1lIiwidG9TdHJpbmciLCJGaWxlIiwibWV0YWRhdGEiLCJ0YWdzIiwiZmlsZURhdGEiLCJzZXRUYWdzIiwic2V0TWV0YWRhdGEiLCJmaWxlU2l6ZSIsIkJ1ZmZlciIsImJ5dGVMZW5ndGgiLCJmaWxlT2JqZWN0IiwidHJpZ2dlclJlc3VsdCIsIm1heWJlUnVuRmlsZVRyaWdnZXIiLCJUeXBlcyIsImJlZm9yZVNhdmVGaWxlIiwiYXV0aCIsInNhdmVSZXN1bHQiLCJ1cmwiLCJuYW1lIiwiX25hbWUiLCJidWZmZXJEYXRhIiwiZnJvbSIsImNyZWF0ZUZpbGVSZXN1bHQiLCJjcmVhdGVGaWxlIiwiX3RhZ3MiLCJfbWV0YWRhdGEiLCJfdXJsIiwicmVzb2x2ZSIsImFmdGVyU2F2ZUZpbGUiLCJsb2dnZXIiLCJyZXNvbHZlRXJyb3IiLCJhZGFwdGVyIiwiZ2V0RmlsZUxvY2F0aW9uIiwiYmVmb3JlRGVsZXRlRmlsZSIsImRlbGV0ZUZpbGUiLCJhZnRlckRlbGV0ZUZpbGUiLCJGSUxFX0RFTEVURV9FUlJPUiIsImdldE1ldGFkYXRhIiwicmFuZ2UiLCJzcGxpdCIsInN0YXJ0IiwiTnVtYmVyIiwiaXNOYU4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFDQSxNQUFNQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxhQUFELENBQXhCOztBQUNBLE1BQU1DLElBQUksR0FBR0QsT0FBTyxDQUFDLE1BQUQsQ0FBcEI7O0FBRUEsTUFBTUUsbUJBQW1CLEdBQUdDLEdBQUcsSUFBSTtBQUNqQyxTQUFPLElBQUlDLE9BQUosQ0FBWSxDQUFDQyxHQUFELEVBQU1DLEdBQU4sS0FBYztBQUMvQkwsSUFBQUEsSUFBSSxDQUNETSxHQURILENBQ09KLEdBRFAsRUFDWUssUUFBUSxJQUFJO0FBQ3BCQSxNQUFBQSxRQUFRLENBQUNDLGtCQUFULENBQTRCLFFBQTVCO0FBQ0EsVUFBSUMsSUFBSSxHQUFJLFFBQU9GLFFBQVEsQ0FBQ0csT0FBVCxDQUFpQixjQUFqQixD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LE1BQTVCO0FBQ0EsWUFBTTtBQUFFVyxRQUFBQTtBQUFGLFVBQWUxQixHQUFHLENBQUNpQixNQUF6QjtBQUNBLFlBQU1yQyxJQUFJLEdBQUcsTUFBTTZDLGVBQWUsQ0FBQ29ELFdBQWhCLENBQTRCbkQsUUFBNUIsQ0FBbkI7QUFDQXRELE1BQUFBLEdBQUcsQ0FBQytDLE1BQUosQ0FBVyxHQUFYO0FBQ0EvQyxNQUFBQSxHQUFHLENBQUNrRCxJQUFKLENBQVMxQyxJQUFUO0FBQ0QsS0FQRCxDQU9FLE9BQU9DLENBQVAsRUFBVTtBQUNWVCxNQUFBQSxHQUFHLENBQUMrQyxNQUFKLENBQVcsR0FBWDtBQUNBL0MsTUFBQUEsR0FBRyxDQUFDa0QsSUFBSixDQUFTLEVBQVQ7QUFDRDtBQUNGOztBQTlNc0I7Ozs7QUFpTnpCLFNBQVNRLGdCQUFULENBQTBCOUIsR0FBMUIsRUFBK0J5QixlQUEvQixFQUFnRDtBQUM5QyxRQUFNcUQsS0FBSyxHQUFHLENBQUM5RSxHQUFHLENBQUMxQixHQUFKLENBQVEsT0FBUixLQUFvQixLQUFyQixFQUE0QnlHLEtBQTVCLENBQWtDLEdBQWxDLENBQWQ7QUFDQSxRQUFNQyxLQUFLLEdBQUdDLE1BQU0sQ0FBQ0gsS0FBSyxDQUFDLENBQUQsQ0FBTixDQUFwQjtBQUNBLFFBQU01QyxHQUFHLEdBQUcrQyxNQUFNLENBQUNILEtBQUssQ0FBQyxDQUFELENBQU4sQ0FBbEI7QUFDQSxTQUNFLENBQUMsQ0FBQ0ksS0FBSyxDQUFDRixLQUFELENBQU4sSUFBaUIsQ0FBQ0UsS0FBSyxDQUFDaEQsR0FBRCxDQUF4QixLQUFrQyxPQUFPVCxlQUFlLENBQUM4QyxPQUFoQixDQUF3QnhDLGdCQUEvQixLQUFvRCxVQUR4RjtBQUdEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgQm9keVBhcnNlciBmcm9tICdib2R5LXBhcnNlcic7XG5pbXBvcnQgKiBhcyBNaWRkbGV3YXJlcyBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5pbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgQ29uZmlnIGZyb20gJy4uL0NvbmZpZyc7XG5pbXBvcnQgbWltZSBmcm9tICdtaW1lJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmNvbnN0IHRyaWdnZXJzID0gcmVxdWlyZSgnLi4vdHJpZ2dlcnMnKTtcbmNvbnN0IGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG5cbmNvbnN0IGRvd25sb2FkRmlsZUZyb21VUkkgPSB1cmkgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgaHR0cFxuICAgICAgLmdldCh1cmksIHJlc3BvbnNlID0+IHtcbiAgICAgICAgcmVzcG9uc2Uuc2V0RGVmYXVsdEVuY29kaW5nKCdiYXNlNjQnKTtcbiAgICAgICAgbGV0IGJvZHkgPSBgZGF0YToke3Jlc3BvbnNlLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddfTtiYXNlNjQsYDtcbiAgICAgICAgcmVzcG9uc2Uub24oJ2RhdGEnLCBkYXRhID0+IChib2R5ICs9IGRhdGEpKTtcbiAgICAgICAgcmVzcG9uc2Uub24oJ2VuZCcsICgpID0+IHJlcyhib2R5KSk7XG4gICAgICB9KVxuICAgICAgLm9uKCdlcnJvcicsIGUgPT4ge1xuICAgICAgICByZWooYEVycm9yIGRvd25sb2FkaW5nIGZpbGUgZnJvbSAke3VyaX06ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfSk7XG4gIH0pO1xufTtcblxuY29uc3QgYWRkRmlsZURhdGFJZk5lZWRlZCA9IGFzeW5jIGZpbGUgPT4ge1xuICBpZiAoZmlsZS5fc291cmNlLmZvcm1hdCA9PT0gJ3VyaScpIHtcbiAgICBjb25zdCBiYXNlNjQgPSBhd2FpdCBkb3dubG9hZEZpbGVGcm9tVVJJKGZpbGUuX3NvdXJjZS51cmkpO1xuICAgIGZpbGUuX3ByZXZpb3VzU2F2ZSA9IGZpbGU7XG4gICAgZmlsZS5fZGF0YSA9IGJhc2U2NDtcbiAgICBmaWxlLl9yZXF1ZXN0VGFzayA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIGZpbGU7XG59O1xuXG5leHBvcnQgY2xhc3MgRmlsZXNSb3V0ZXIge1xuICBleHByZXNzUm91dGVyKHsgbWF4VXBsb2FkU2l6ZSA9ICcyME1iJyB9ID0ge30pIHtcbiAgICB2YXIgcm91dGVyID0gZXhwcmVzcy5Sb3V0ZXIoKTtcbiAgICByb3V0ZXIuZ2V0KCcvZmlsZXMvOmFwcElkLzpmaWxlbmFtZScsIHRoaXMuZ2V0SGFuZGxlcik7XG4gICAgcm91dGVyLmdldCgnL2ZpbGVzLzphcHBJZC9tZXRhZGF0YS86ZmlsZW5hbWUnLCB0aGlzLm1ldGFkYXRhSGFuZGxlcik7XG5cbiAgICByb3V0ZXIucG9zdCgnL2ZpbGVzJywgZnVuY3Rpb24gKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0ZpbGVuYW1lIG5vdCBwcm92aWRlZC4nKSk7XG4gICAgfSk7XG5cbiAgICByb3V0ZXIucG9zdChcbiAgICAgICcvZmlsZXMvOmZpbGVuYW1lJyxcbiAgICAgIEJvZHlQYXJzZXIucmF3KHtcbiAgICAgICAgdHlwZTogKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBsaW1pdDogbWF4VXBsb2FkU2l6ZSxcbiAgICAgIH0pLCAvLyBBbGxvdyB1cGxvYWRzIHdpdGhvdXQgQ29udGVudC1UeXBlLCBvciB3aXRoIGFueSBDb250ZW50LVR5cGUuXG4gICAgICBNaWRkbGV3YXJlcy5oYW5kbGVQYXJzZUhlYWRlcnMsXG4gICAgICB0aGlzLmNyZWF0ZUhhbmRsZXJcbiAgICApO1xuXG4gICAgcm91dGVyLmRlbGV0ZShcbiAgICAgICcvZmlsZXMvOmZpbGVuYW1lJyxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlSGVhZGVycyxcbiAgICAgIE1pZGRsZXdhcmVzLmVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsXG4gICAgICB0aGlzLmRlbGV0ZUhhbmRsZXJcbiAgICApO1xuICAgIHJldHVybiByb3V0ZXI7XG4gIH1cblxuICBnZXRIYW5kbGVyKHJlcSwgcmVzKSB7XG4gICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChyZXEucGFyYW1zLmFwcElkKTtcbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgcmVzLnN0YXR1cyg0MDMpO1xuICAgICAgY29uc3QgZXJyID0gbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sICdJbnZhbGlkIGFwcGxpY2F0aW9uIElELicpO1xuICAgICAgcmVzLmpzb24oeyBjb2RlOiBlcnIuY29kZSwgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gcmVxLnBhcmFtcy5maWxlbmFtZTtcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSk7XG4gICAgaWYgKGlzRmlsZVN0cmVhbWFibGUocmVxLCBmaWxlc0NvbnRyb2xsZXIpKSB7XG4gICAgICBmaWxlc0NvbnRyb2xsZXIuaGFuZGxlRmlsZVN0cmVhbShjb25maWcsIGZpbGVuYW1lLCByZXEsIHJlcywgY29udGVudFR5cGUpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MDQpO1xuICAgICAgICByZXMuc2V0KCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xuICAgICAgICByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZC4nKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWxlc0NvbnRyb2xsZXJcbiAgICAgICAgLmdldEZpbGVEYXRhKGNvbmZpZywgZmlsZW5hbWUpXG4gICAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgICAgICByZXMuc2V0KCdDb250ZW50LVR5cGUnLCBjb250ZW50VHlwZSk7XG4gICAgICAgICAgcmVzLnNldCgnQ29udGVudC1MZW5ndGgnLCBkYXRhLmxlbmd0aCk7XG4gICAgICAgICAgcmVzLmVuZChkYXRhKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICByZXMuc3RhdHVzKDQwNCk7XG4gICAgICAgICAgcmVzLnNldCgnQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKTtcbiAgICAgICAgICByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZC4nKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY3JlYXRlSGFuZGxlcihyZXEsIHJlcywgbmV4dCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gICAgY29uc3QgZmlsZXNDb250cm9sbGVyID0gY29uZmlnLmZpbGVzQ29udHJvbGxlcjtcbiAgICBjb25zdCB7IGZpbGVuYW1lIH0gPSByZXEucGFyYW1zO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVxLmdldCgnQ29udGVudC10eXBlJyk7XG5cbiAgICBpZiAoIXJlcS5ib2R5IHx8ICFyZXEuYm9keS5sZW5ndGgpIHtcbiAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUiwgJ0ludmFsaWQgZmlsZSB1cGxvYWQuJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9yID0gZmlsZXNDb250cm9sbGVyLnZhbGlkYXRlRmlsZW5hbWUoZmlsZW5hbWUpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZTY0ID0gcmVxLmJvZHkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQgfSwgY29udGVudFR5cGUpO1xuICAgIGNvbnN0IHsgbWV0YWRhdGEgPSB7fSwgdGFncyA9IHt9IH0gPSByZXEuZmlsZURhdGEgfHwge307XG4gICAgZmlsZS5zZXRUYWdzKHRhZ3MpO1xuICAgIGZpbGUuc2V0TWV0YWRhdGEobWV0YWRhdGEpO1xuICAgIGNvbnN0IGZpbGVTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgocmVxLmJvZHkpO1xuICAgIGNvbnN0IGZpbGVPYmplY3QgPSB7IGZpbGUsIGZpbGVTaXplIH07XG4gICAgdHJ5IHtcbiAgICAgIC8vIHJ1biBiZWZvcmVTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBjb25zdCB0cmlnZ2VyUmVzdWx0ID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlU2F2ZUZpbGUsXG4gICAgICAgIGZpbGVPYmplY3QsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICBsZXQgc2F2ZVJlc3VsdDtcbiAgICAgIC8vIGlmIGEgbmV3IFBhcnNlRmlsZSBpcyByZXR1cm5lZCBjaGVjayBpZiBpdCdzIGFuIGFscmVhZHkgc2F2ZWQgZmlsZVxuICAgICAgaWYgKHRyaWdnZXJSZXN1bHQgaW5zdGFuY2VvZiBQYXJzZS5GaWxlKSB7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZSA9IHRyaWdnZXJSZXN1bHQ7XG4gICAgICAgIGlmICh0cmlnZ2VyUmVzdWx0LnVybCgpKSB7XG4gICAgICAgICAgLy8gc2V0IGZpbGVTaXplIHRvIG51bGwgYmVjYXVzZSB3ZSB3b250IGtub3cgaG93IGJpZyBpdCBpcyBoZXJlXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlU2l6ZSA9IG51bGw7XG4gICAgICAgICAgc2F2ZVJlc3VsdCA9IHtcbiAgICAgICAgICAgIHVybDogdHJpZ2dlclJlc3VsdC51cmwoKSxcbiAgICAgICAgICAgIG5hbWU6IHRyaWdnZXJSZXN1bHQuX25hbWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIGZpbGUgcmV0dXJuZWQgYnkgdGhlIHRyaWdnZXIgaGFzIGFscmVhZHkgYmVlbiBzYXZlZCBza2lwIHNhdmluZyBhbnl0aGluZ1xuICAgICAgaWYgKCFzYXZlUmVzdWx0KSB7XG4gICAgICAgIC8vIGlmIHRoZSBQYXJzZUZpbGUgcmV0dXJuZWQgaXMgdHlwZSB1cmksIGRvd25sb2FkIHRoZSBmaWxlIGJlZm9yZSBzYXZpbmcgaXRcbiAgICAgICAgYXdhaXQgYWRkRmlsZURhdGFJZk5lZWRlZChmaWxlT2JqZWN0LmZpbGUpO1xuICAgICAgICAvLyB1cGRhdGUgZmlsZVNpemVcbiAgICAgICAgY29uc3QgYnVmZmVyRGF0YSA9IEJ1ZmZlci5mcm9tKGZpbGVPYmplY3QuZmlsZS5fZGF0YSwgJ2Jhc2U2NCcpO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGVTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgoYnVmZmVyRGF0YSk7XG4gICAgICAgIC8vIHNhdmUgZmlsZVxuICAgICAgICBjb25zdCBjcmVhdGVGaWxlUmVzdWx0ID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmNyZWF0ZUZpbGUoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSxcbiAgICAgICAgICBidWZmZXJEYXRhLFxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZS5fc291cmNlLnR5cGUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGFnczogZmlsZU9iamVjdC5maWxlLl90YWdzLFxuICAgICAgICAgICAgbWV0YWRhdGE6IGZpbGVPYmplY3QuZmlsZS5fbWV0YWRhdGEsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICAvLyB1cGRhdGUgZmlsZSB3aXRoIG5ldyBkYXRhXG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSA9IGNyZWF0ZUZpbGVSZXN1bHQubmFtZTtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl91cmwgPSBjcmVhdGVGaWxlUmVzdWx0LnVybDtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9yZXF1ZXN0VGFzayA9IG51bGw7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fcHJldmlvdXNTYXZlID0gUHJvbWlzZS5yZXNvbHZlKGZpbGVPYmplY3QuZmlsZSk7XG4gICAgICAgIHNhdmVSZXN1bHQgPSB7XG4gICAgICAgICAgdXJsOiBjcmVhdGVGaWxlUmVzdWx0LnVybCxcbiAgICAgICAgICBuYW1lOiBjcmVhdGVGaWxlUmVzdWx0Lm5hbWUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBydW4gYWZ0ZXJTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5hZnRlclNhdmVGaWxlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgcmVzLnN0YXR1cygyMDEpO1xuICAgICAgcmVzLnNldCgnTG9jYXRpb24nLCBzYXZlUmVzdWx0LnVybCk7XG4gICAgICByZXMuanNvbihzYXZlUmVzdWx0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGNyZWF0aW5nIGEgZmlsZTogJywgZSk7XG4gICAgICBjb25zdCBlcnJvciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBzdG9yZSBmaWxlOiAke2ZpbGVPYmplY3QuZmlsZS5fbmFtZX0uYCxcbiAgICAgIH0pO1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlSGFuZGxlcihyZXEsIHJlcywgbmV4dCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGZpbGVzQ29udHJvbGxlciB9ID0gcmVxLmNvbmZpZztcbiAgICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgICAvLyBydW4gYmVmb3JlRGVsZXRlRmlsZSB0cmlnZ2VyXG4gICAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUpO1xuICAgICAgZmlsZS5fdXJsID0gZmlsZXNDb250cm9sbGVyLmFkYXB0ZXIuZ2V0RmlsZUxvY2F0aW9uKHJlcS5jb25maWcsIGZpbGVuYW1lKTtcbiAgICAgIGNvbnN0IGZpbGVPYmplY3QgPSB7IGZpbGUsIGZpbGVTaXplOiBudWxsIH07XG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVEZWxldGVGaWxlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIC8vIGRlbGV0ZSBmaWxlXG4gICAgICBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuZGVsZXRlRmlsZShyZXEuY29uZmlnLCBmaWxlbmFtZSk7XG4gICAgICAvLyBydW4gYWZ0ZXJEZWxldGVGaWxlIHRyaWdnZXJcbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRGVsZXRlRmlsZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgcmVxLmNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICAvLyBUT0RPOiByZXR1cm4gdXNlZnVsIEpTT04gaGVyZT9cbiAgICAgIHJlcy5lbmQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGRlbGV0aW5nIGEgZmlsZTogJywgZSk7XG4gICAgICBjb25zdCBlcnJvciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLkZJTEVfREVMRVRFX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IGRlbGV0ZSBmaWxlLicsXG4gICAgICB9KTtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG1ldGFkYXRhSGFuZGxlcihyZXEsIHJlcykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KHJlcS5wYXJhbXMuYXBwSWQpO1xuICAgICAgY29uc3QgeyBmaWxlc0NvbnRyb2xsZXIgfSA9IGNvbmZpZztcbiAgICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmdldE1ldGFkYXRhKGZpbGVuYW1lKTtcbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIHJlcy5qc29uKGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIHJlcy5qc29uKHt9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNGaWxlU3RyZWFtYWJsZShyZXEsIGZpbGVzQ29udHJvbGxlcikge1xuICBjb25zdCByYW5nZSA9IChyZXEuZ2V0KCdSYW5nZScpIHx8ICcvLS8nKS5zcGxpdCgnLScpO1xuICBjb25zdCBzdGFydCA9IE51bWJlcihyYW5nZVswXSk7XG4gIGNvbnN0IGVuZCA9IE51bWJlcihyYW5nZVsxXSk7XG4gIHJldHVybiAoXG4gICAgKCFpc05hTihzdGFydCkgfHwgIWlzTmFOKGVuZCkpICYmIHR5cGVvZiBmaWxlc0NvbnRyb2xsZXIuYWRhcHRlci5oYW5kbGVGaWxlU3RyZWFtID09PSAnZnVuY3Rpb24nXG4gICk7XG59XG4iXX0=
|
|
287
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0ZpbGVzUm91dGVyLmpzIl0sIm5hbWVzIjpbInRyaWdnZXJzIiwicmVxdWlyZSIsImh0dHAiLCJVdGlscyIsImRvd25sb2FkRmlsZUZyb21VUkkiLCJ1cmkiLCJQcm9taXNlIiwicmVzIiwicmVqIiwiZ2V0IiwicmVzcG9uc2UiLCJzZXREZWZhdWx0RW5jb2RpbmciLCJib2R5IiwiaGVhZGVycyIsIm9uIiwiZGF0YSIsImUiLCJtZXNzYWdlIiwiYWRkRmlsZURhdGFJZk5lZWRlZCIsImZpbGUiLCJfc291cmNlIiwiZm9ybWF0IiwiYmFzZTY0IiwiX3ByZXZpb3VzU2F2ZSIsIl9kYXRhIiwiX3JlcXVlc3RUYXNrIiwiRmlsZXNSb3V0ZXIiLCJleHByZXNzUm91dGVyIiwibWF4VXBsb2FkU2l6ZSIsInJvdXRlciIsImV4cHJlc3MiLCJSb3V0ZXIiLCJnZXRIYW5kbGVyIiwibWV0YWRhdGFIYW5kbGVyIiwicG9zdCIsInJlcSIsIm5leHQiLCJQYXJzZSIsIkVycm9yIiwiSU5WQUxJRF9GSUxFX05BTUUiLCJCb2R5UGFyc2VyIiwicmF3IiwidHlwZSIsImxpbWl0IiwiTWlkZGxld2FyZXMiLCJoYW5kbGVQYXJzZUhlYWRlcnMiLCJjcmVhdGVIYW5kbGVyIiwiZGVsZXRlIiwiZW5mb3JjZU1hc3RlcktleUFjY2VzcyIsImRlbGV0ZUhhbmRsZXIiLCJjb25maWciLCJDb25maWciLCJwYXJhbXMiLCJhcHBJZCIsInN0YXR1cyIsImVyciIsIk9QRVJBVElPTl9GT1JCSURERU4iLCJqc29uIiwiY29kZSIsImVycm9yIiwiZmlsZXNDb250cm9sbGVyIiwiZmlsZW5hbWUiLCJjb250ZW50VHlwZSIsIm1pbWUiLCJnZXRUeXBlIiwiaXNGaWxlU3RyZWFtYWJsZSIsImhhbmRsZUZpbGVTdHJlYW0iLCJjYXRjaCIsInNldCIsImVuZCIsImdldEZpbGVEYXRhIiwidGhlbiIsImxlbmd0aCIsIkZJTEVfU0FWRV9FUlJPUiIsInZhbGlkYXRlRmlsZW5hbWUiLCJ0b1N0cmluZyIsIkZpbGUiLCJtZXRhZGF0YSIsInRhZ3MiLCJmaWxlRGF0YSIsInJlcXVlc3RLZXl3b3JkRGVueWxpc3QiLCJrZXl3b3JkIiwibWF0Y2giLCJvYmplY3RDb250YWluc0tleVZhbHVlIiwia2V5IiwidmFsdWUiLCJJTlZBTElEX0tFWV9OQU1FIiwiSlNPTiIsInN0cmluZ2lmeSIsInNldFRhZ3MiLCJzZXRNZXRhZGF0YSIsImZpbGVTaXplIiwiQnVmZmVyIiwiYnl0ZUxlbmd0aCIsImZpbGVPYmplY3QiLCJ0cmlnZ2VyUmVzdWx0IiwibWF5YmVSdW5GaWxlVHJpZ2dlciIsIlR5cGVzIiwiYmVmb3JlU2F2ZUZpbGUiLCJhdXRoIiwic2F2ZVJlc3VsdCIsInVybCIsIm5hbWUiLCJfbmFtZSIsImJ1ZmZlckRhdGEiLCJmcm9tIiwiY3JlYXRlRmlsZVJlc3VsdCIsImNyZWF0ZUZpbGUiLCJfdGFncyIsIl9tZXRhZGF0YSIsIl91cmwiLCJyZXNvbHZlIiwiYWZ0ZXJTYXZlRmlsZSIsImxvZ2dlciIsInJlc29sdmVFcnJvciIsImFkYXB0ZXIiLCJnZXRGaWxlTG9jYXRpb24iLCJiZWZvcmVEZWxldGVGaWxlIiwiZGVsZXRlRmlsZSIsImFmdGVyRGVsZXRlRmlsZSIsIkZJTEVfREVMRVRFX0VSUk9SIiwiZ2V0TWV0YWRhdGEiLCJyYW5nZSIsInNwbGl0Iiwic3RhcnQiLCJOdW1iZXIiLCJpc05hTiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7OztBQUNBLE1BQU1BLFFBQVEsR0FBR0MsT0FBTyxDQUFDLGFBQUQsQ0FBeEI7O0FBQ0EsTUFBTUMsSUFBSSxHQUFHRCxPQUFPLENBQUMsTUFBRCxDQUFwQjs7QUFDQSxNQUFNRSxLQUFLLEdBQUdGLE9BQU8sQ0FBQyxVQUFELENBQXJCOztBQUVBLE1BQU1HLG1CQUFtQixHQUFHQyxHQUFHLElBQUk7QUFDakMsU0FBTyxJQUFJQyxPQUFKLENBQVksQ0FBQ0MsR0FB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QVBELENBT0UsT0FBT0MsQ0FBUCxFQUFVO0FBQ1ZULE1BQUFBLEdBQUcsQ0FBQytDLE1BQUosQ0FBVyxHQUFYO0FBQ0EvQyxNQUFBQSxHQUFHLENBQUNrRCxJQUFKLENBQVMsRUFBVDtBQUNEO0FBQ0Y7O0FBL05zQjs7OztBQWtPekIsU0FBU1EsZ0JBQVQsQ0FBMEI5QixHQUExQixFQUErQnlCLGVBQS9CLEVBQWdEO0FBQzlDLFFBQU04RCxLQUFLLEdBQUcsQ0FBQ3ZGLEdBQUcsQ0FBQzFCLEdBQUosQ0FBUSxPQUFSLEtBQW9CLEtBQXJCLEVBQTRCa0gsS0FBNUIsQ0FBa0MsR0FBbEMsQ0FBZDtBQUNBLFFBQU1DLEtBQUssR0FBR0MsTUFBTSxDQUFDSCxLQUFLLENBQUMsQ0FBRCxDQUFOLENBQXBCO0FBQ0EsUUFBTXJELEdBQUcsR0FBR3dELE1BQU0sQ0FBQ0gsS0FBSyxDQUFDLENBQUQsQ0FBTixDQUFsQjtBQUNBLFNBQ0UsQ0FBQyxDQUFDSSxLQUFLLENBQUNGLEtBQUQsQ0FBTixJQUFpQixDQUFDRSxLQUFLLENBQUN6RCxHQUFELENBQXhCLEtBQWtDLE9BQU9ULGVBQWUsQ0FBQ3VELE9BQWhCLENBQXdCakQsZ0JBQS9CLEtBQW9ELFVBRHhGO0FBR0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXhwcmVzcyBmcm9tICdleHByZXNzJztcbmltcG9ydCBCb2R5UGFyc2VyIGZyb20gJ2JvZHktcGFyc2VyJztcbmltcG9ydCAqIGFzIE1pZGRsZXdhcmVzIGZyb20gJy4uL21pZGRsZXdhcmVzJztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBDb25maWcgZnJvbSAnLi4vQ29uZmlnJztcbmltcG9ydCBtaW1lIGZyb20gJ21pbWUnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuY29uc3QgdHJpZ2dlcnMgPSByZXF1aXJlKCcuLi90cmlnZ2VycycpO1xuY29uc3QgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKTtcbmNvbnN0IFV0aWxzID0gcmVxdWlyZSgnLi4vVXRpbHMnKTtcblxuY29uc3QgZG93bmxvYWRGaWxlRnJvbVVSSSA9IHVyaSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICBodHRwXG4gICAgICAuZ2V0KHVyaSwgcmVzcG9uc2UgPT4ge1xuICAgICAgICByZXNwb25zZS5zZXREZWZhdWx0RW5jb2RpbmcoJ2Jhc2U2NCcpO1xuICAgICAgICBsZXQgYm9keSA9IGBkYXRhOiR7cmVzcG9uc2UuaGVhZGVyc1snY29udGVudC10eXBlJ119O2Jhc2U2NCxgO1xuICAgICAgICByZXNwb25zZS5vbignZGF0YScsIGRhdGEgPT4gKGJvZHkgKz0gZGF0YSkpO1xuICAgICAgICByZXNwb25zZS5vbignZW5kJywgKCkgPT4gcmVzKGJvZHkpKTtcbiAgICAgIH0pXG4gICAgICAub24oJ2Vycm9yJywgZSA9PiB7XG4gICAgICAgIHJlaihgRXJyb3IgZG93bmxvYWRpbmcgZmlsZSBmcm9tICR7dXJpfTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9KTtcbiAgfSk7XG59O1xuXG5jb25zdCBhZGRGaWxlRGF0YUlmTmVlZGVkID0gYXN5bmMgZmlsZSA9PiB7XG4gIGlmIChmaWxlLl9zb3VyY2UuZm9ybWF0ID09PSAndXJpJykge1xuICAgIGNvbnN0IGJhc2U2NCA9IGF3YWl0IGRvd25sb2FkRmlsZUZyb21VUkkoZmlsZS5fc291cmNlLnVyaSk7XG4gICAgZmlsZS5fcHJldmlvdXNTYXZlID0gZmlsZTtcbiAgICBmaWxlLl9kYXRhID0gYmFzZTY0O1xuICAgIGZpbGUuX3JlcXVlc3RUYXNrID0gbnVsbDtcbiAgfVxuICByZXR1cm4gZmlsZTtcbn07XG5cbmV4cG9ydCBjbGFzcyBGaWxlc1JvdXRlciB7XG4gIGV4cHJlc3NSb3V0ZXIoeyBtYXhVcGxvYWRTaXplID0gJzIwTWInIH0gPSB7fSkge1xuICAgIHZhciByb3V0ZXIgPSBleHByZXNzLlJvdXRlcigpO1xuICAgIHJvdXRlci5nZXQoJy9maWxlcy86YXBwSWQvOmZpbGVuYW1lJywgdGhpcy5nZXRIYW5kbGVyKTtcbiAgICByb3V0ZXIuZ2V0KCcvZmlsZXMvOmFwcElkL21ldGFkYXRhLzpmaWxlbmFtZScsIHRoaXMubWV0YWRhdGFIYW5kbGVyKTtcblxuICAgIHJvdXRlci5wb3N0KCcvZmlsZXMnLCBmdW5jdGlvbiAocmVxLCByZXMsIG5leHQpIHtcbiAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRmlsZW5hbWUgbm90IHByb3ZpZGVkLicpKTtcbiAgICB9KTtcblxuICAgIHJvdXRlci5wb3N0KFxuICAgICAgJy9maWxlcy86ZmlsZW5hbWUnLFxuICAgICAgQm9keVBhcnNlci5yYXcoe1xuICAgICAgICB0eXBlOiAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGxpbWl0OiBtYXhVcGxvYWRTaXplLFxuICAgICAgfSksIC8vIEFsbG93IHVwbG9hZHMgd2l0aG91dCBDb250ZW50LVR5cGUsIG9yIHdpdGggYW55IENvbnRlbnQtVHlwZS5cbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlSGVhZGVycyxcbiAgICAgIHRoaXMuY3JlYXRlSGFuZGxlclxuICAgICk7XG5cbiAgICByb3V0ZXIuZGVsZXRlKFxuICAgICAgJy9maWxlcy86ZmlsZW5hbWUnLFxuICAgICAgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VIZWFkZXJzLFxuICAgICAgTWlkZGxld2FyZXMuZW5mb3JjZU1hc3RlcktleUFjY2VzcyxcbiAgICAgIHRoaXMuZGVsZXRlSGFuZGxlclxuICAgICk7XG4gICAgcmV0dXJuIHJvdXRlcjtcbiAgfVxuXG4gIGdldEhhbmRsZXIocmVxLCByZXMpIHtcbiAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KHJlcS5wYXJhbXMuYXBwSWQpO1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICByZXMuc3RhdHVzKDQwMyk7XG4gICAgICBjb25zdCBlcnIgPSBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTiwgJ0ludmFsaWQgYXBwbGljYXRpb24gSUQuJyk7XG4gICAgICByZXMuanNvbih7IGNvZGU6IGVyci5jb2RlLCBlcnJvcjogZXJyLm1lc3NhZ2UgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZpbGVzQ29udHJvbGxlciA9IGNvbmZpZy5maWxlc0NvbnRyb2xsZXI7XG4gICAgY29uc3QgZmlsZW5hbWUgPSByZXEucGFyYW1zLmZpbGVuYW1lO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGZpbGVuYW1lKTtcbiAgICBpZiAoaXNGaWxlU3RyZWFtYWJsZShyZXEsIGZpbGVzQ29udHJvbGxlcikpIHtcbiAgICAgIGZpbGVzQ29udHJvbGxlci5oYW5kbGVGaWxlU3RyZWFtKGNvbmZpZywgZmlsZW5hbWUsIHJlcSwgcmVzLCBjb250ZW50VHlwZSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICByZXMuc3RhdHVzKDQwNCk7XG4gICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyk7XG4gICAgICAgIHJlcy5lbmQoJ0ZpbGUgbm90IGZvdW5kLicpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbGVzQ29udHJvbGxlclxuICAgICAgICAuZ2V0RmlsZURhdGEoY29uZmlnLCBmaWxlbmFtZSlcbiAgICAgICAgLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgcmVzLnN0YXR1cygyMDApO1xuICAgICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtVHlwZScsIGNvbnRlbnRUeXBlKTtcbiAgICAgICAgICByZXMuc2V0KCdDb250ZW50LUxlbmd0aCcsIGRhdGEubGVuZ3RoKTtcbiAgICAgICAgICByZXMuZW5kKGRhdGEpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgIHJlcy5zdGF0dXMoNDA0KTtcbiAgICAgICAgICByZXMuc2V0KCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xuICAgICAgICAgIHJlcy5lbmQoJ0ZpbGUgbm90IGZvdW5kLicpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjcmVhdGVIYW5kbGVyKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZztcbiAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSByZXEuZ2V0KCdDb250ZW50LXR5cGUnKTtcblxuICAgIGlmICghcmVxLmJvZHkgfHwgIXJlcS5ib2R5Lmxlbmd0aCkge1xuICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLCAnSW52YWxpZCBmaWxlIHVwbG9hZC4nKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSBmaWxlc0NvbnRyb2xsZXIudmFsaWRhdGVGaWxlbmFtZShmaWxlbmFtZSk7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBuZXh0KGVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlNjQgPSByZXEuYm9keS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgY29uc3QgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lLCB7IGJhc2U2NCB9LCBjb250ZW50VHlwZSk7XG4gICAgY29uc3QgeyBtZXRhZGF0YSA9IHt9LCB0YWdzID0ge30gfSA9IHJlcS5maWxlRGF0YSB8fCB7fTtcbiAgICBpZiAocmVxLmNvbmZpZyAmJiByZXEuY29uZmlnLnJlcXVlc3RLZXl3b3JkRGVueWxpc3QpIHtcbiAgICAgIC8vIFNjYW4gcmVxdWVzdCBkYXRhIGZvciBkZW5pZWQga2V5d29yZHNcbiAgICAgIGZvciAoY29uc3Qga2V5d29yZCBvZiByZXEuY29uZmlnLnJlcXVlc3RLZXl3b3JkRGVueWxpc3QpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPVxuICAgICAgICAgIFV0aWxzLm9iamVjdENvbnRhaW5zS2V5VmFsdWUobWV0YWRhdGEsIGtleXdvcmQua2V5LCBrZXl3b3JkLnZhbHVlKSB8fFxuICAgICAgICAgIFV0aWxzLm9iamVjdENvbnRhaW5zS2V5VmFsdWUodGFncywga2V5d29yZC5rZXksIGtleXdvcmQudmFsdWUpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBuZXh0KFxuICAgICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX0tFWV9OQU1FLFxuICAgICAgICAgICAgICBgUHJvaGliaXRlZCBrZXl3b3JkIGluIHJlcXVlc3QgZGF0YTogJHtKU09OLnN0cmluZ2lmeShrZXl3b3JkKX0uYFxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZpbGUuc2V0VGFncyh0YWdzKTtcbiAgICBmaWxlLnNldE1ldGFkYXRhKG1ldGFkYXRhKTtcbiAgICBjb25zdCBmaWxlU2l6ZSA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHJlcS5ib2R5KTtcbiAgICBjb25zdCBmaWxlT2JqZWN0ID0geyBmaWxlLCBmaWxlU2l6ZSB9O1xuICAgIHRyeSB7XG4gICAgICAvLyBydW4gYmVmb3JlU2F2ZUZpbGUgdHJpZ2dlclxuICAgICAgY29uc3QgdHJpZ2dlclJlc3VsdCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZVNhdmVGaWxlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgbGV0IHNhdmVSZXN1bHQ7XG4gICAgICAvLyBpZiBhIG5ldyBQYXJzZUZpbGUgaXMgcmV0dXJuZWQgY2hlY2sgaWYgaXQncyBhbiBhbHJlYWR5IHNhdmVkIGZpbGVcbiAgICAgIGlmICh0cmlnZ2VyUmVzdWx0IGluc3RhbmNlb2YgUGFyc2UuRmlsZSkge1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUgPSB0cmlnZ2VyUmVzdWx0O1xuICAgICAgICBpZiAodHJpZ2dlclJlc3VsdC51cmwoKSkge1xuICAgICAgICAgIC8vIHNldCBmaWxlU2l6ZSB0byBudWxsIGJlY2F1c2Ugd2Ugd29udCBrbm93IGhvdyBiaWcgaXQgaXMgaGVyZVxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZVNpemUgPSBudWxsO1xuICAgICAgICAgIHNhdmVSZXN1bHQgPSB7XG4gICAgICAgICAgICB1cmw6IHRyaWdnZXJSZXN1bHQudXJsKCksXG4gICAgICAgICAgICBuYW1lOiB0cmlnZ2VyUmVzdWx0Ll9uYW1lLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSBmaWxlIHJldHVybmVkIGJ5IHRoZSB0cmlnZ2VyIGhhcyBhbHJlYWR5IGJlZW4gc2F2ZWQgc2tpcCBzYXZpbmcgYW55dGhpbmdcbiAgICAgIGlmICghc2F2ZVJlc3VsdCkge1xuICAgICAgICAvLyBpZiB0aGUgUGFyc2VGaWxlIHJldHVybmVkIGlzIHR5cGUgdXJpLCBkb3dubG9hZCB0aGUgZmlsZSBiZWZvcmUgc2F2aW5nIGl0XG4gICAgICAgIGF3YWl0IGFkZEZpbGVEYXRhSWZOZWVkZWQoZmlsZU9iamVjdC5maWxlKTtcbiAgICAgICAgLy8gdXBkYXRlIGZpbGVTaXplXG4gICAgICAgIGNvbnN0IGJ1ZmZlckRhdGEgPSBCdWZmZXIuZnJvbShmaWxlT2JqZWN0LmZpbGUuX2RhdGEsICdiYXNlNjQnKTtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlU2l6ZSA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGJ1ZmZlckRhdGEpO1xuICAgICAgICAvLyBzYXZlIGZpbGVcbiAgICAgICAgY29uc3QgY3JlYXRlRmlsZVJlc3VsdCA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5jcmVhdGVGaWxlKFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX25hbWUsXG4gICAgICAgICAgYnVmZmVyRGF0YSxcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3NvdXJjZS50eXBlLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRhZ3M6IGZpbGVPYmplY3QuZmlsZS5fdGFncyxcbiAgICAgICAgICAgIG1ldGFkYXRhOiBmaWxlT2JqZWN0LmZpbGUuX21ldGFkYXRhLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgLy8gdXBkYXRlIGZpbGUgd2l0aCBuZXcgZGF0YVxuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX25hbWUgPSBjcmVhdGVGaWxlUmVzdWx0Lm5hbWU7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fdXJsID0gY3JlYXRlRmlsZVJlc3VsdC51cmw7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fcmVxdWVzdFRhc2sgPSBudWxsO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3ByZXZpb3VzU2F2ZSA9IFByb21pc2UucmVzb2x2ZShmaWxlT2JqZWN0LmZpbGUpO1xuICAgICAgICBzYXZlUmVzdWx0ID0ge1xuICAgICAgICAgIHVybDogY3JlYXRlRmlsZVJlc3VsdC51cmwsXG4gICAgICAgICAgbmFtZTogY3JlYXRlRmlsZVJlc3VsdC5uYW1lLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgLy8gcnVuIGFmdGVyU2F2ZUZpbGUgdHJpZ2dlclxuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYWZ0ZXJTYXZlRmlsZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIHJlcy5zdGF0dXMoMjAxKTtcbiAgICAgIHJlcy5zZXQoJ0xvY2F0aW9uJywgc2F2ZVJlc3VsdC51cmwpO1xuICAgICAgcmVzLmpzb24oc2F2ZVJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciBjcmVhdGluZyBhIGZpbGU6ICcsIGUpO1xuICAgICAgY29uc3QgZXJyb3IgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3Qgc3RvcmUgZmlsZTogJHtmaWxlT2JqZWN0LmZpbGUuX25hbWV9LmAsXG4gICAgICB9KTtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUhhbmRsZXIocmVxLCByZXMsIG5leHQpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBmaWxlc0NvbnRyb2xsZXIgfSA9IHJlcS5jb25maWc7XG4gICAgICBjb25zdCB7IGZpbGVuYW1lIH0gPSByZXEucGFyYW1zO1xuICAgICAgLy8gcnVuIGJlZm9yZURlbGV0ZUZpbGUgdHJpZ2dlclxuICAgICAgY29uc3QgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lKTtcbiAgICAgIGZpbGUuX3VybCA9IGZpbGVzQ29udHJvbGxlci5hZGFwdGVyLmdldEZpbGVMb2NhdGlvbihyZXEuY29uZmlnLCBmaWxlbmFtZSk7XG4gICAgICBjb25zdCBmaWxlT2JqZWN0ID0geyBmaWxlLCBmaWxlU2l6ZTogbnVsbCB9O1xuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlRGVsZXRlRmlsZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgcmVxLmNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICAvLyBkZWxldGUgZmlsZVxuICAgICAgYXdhaXQgZmlsZXNDb250cm9sbGVyLmRlbGV0ZUZpbGUocmVxLmNvbmZpZywgZmlsZW5hbWUpO1xuICAgICAgLy8gcnVuIGFmdGVyRGVsZXRlRmlsZSB0cmlnZ2VyXG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5hZnRlckRlbGV0ZUZpbGUsXG4gICAgICAgIGZpbGVPYmplY3QsXG4gICAgICAgIHJlcS5jb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgcmVzLnN0YXR1cygyMDApO1xuICAgICAgLy8gVE9ETzogcmV0dXJuIHVzZWZ1bCBKU09OIGhlcmU/XG4gICAgICByZXMuZW5kKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciBkZWxldGluZyBhIGZpbGU6ICcsIGUpO1xuICAgICAgY29uc3QgZXJyb3IgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5GSUxFX0RFTEVURV9FUlJPUixcbiAgICAgICAgbWVzc2FnZTogJ0NvdWxkIG5vdCBkZWxldGUgZmlsZS4nLFxuICAgICAgfSk7XG4gICAgICBuZXh0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBtZXRhZGF0YUhhbmRsZXIocmVxLCByZXMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChyZXEucGFyYW1zLmFwcElkKTtcbiAgICAgIGNvbnN0IHsgZmlsZXNDb250cm9sbGVyIH0gPSBjb25maWc7XG4gICAgICBjb25zdCB7IGZpbGVuYW1lIH0gPSByZXEucGFyYW1zO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5nZXRNZXRhZGF0YShmaWxlbmFtZSk7XG4gICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICByZXMuanNvbihkYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICByZXMuanNvbih7fSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzRmlsZVN0cmVhbWFibGUocmVxLCBmaWxlc0NvbnRyb2xsZXIpIHtcbiAgY29uc3QgcmFuZ2UgPSAocmVxLmdldCgnUmFuZ2UnKSB8fCAnLy0vJykuc3BsaXQoJy0nKTtcbiAgY29uc3Qgc3RhcnQgPSBOdW1iZXIocmFuZ2VbMF0pO1xuICBjb25zdCBlbmQgPSBOdW1iZXIocmFuZ2VbMV0pO1xuICByZXR1cm4gKFxuICAgICghaXNOYU4oc3RhcnQpIHx8ICFpc05hTihlbmQpKSAmJiB0eXBlb2YgZmlsZXNDb250cm9sbGVyLmFkYXB0ZXIuaGFuZGxlRmlsZVN0cmVhbSA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufVxuIl19
|