parse-server 8.6.80 → 8.6.81
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 +31 -13
- package/package.json +1 -1
|
@@ -169,6 +169,7 @@ class FilesRouter {
|
|
|
169
169
|
}
|
|
170
170
|
const fileExtensions = config.fileUpload?.fileExtensions;
|
|
171
171
|
if (!isMaster && fileExtensions) {
|
|
172
|
+
const mime = (await import('mime')).default;
|
|
172
173
|
const isValidExtension = extension => {
|
|
173
174
|
return fileExtensions.some(ext => {
|
|
174
175
|
if (ext === '*') {
|
|
@@ -180,22 +181,39 @@ class FilesRouter {
|
|
|
180
181
|
}
|
|
181
182
|
});
|
|
182
183
|
};
|
|
184
|
+
const rejectExtension = ext => {
|
|
185
|
+
next(new _node.default.Error(_node.default.Error.FILE_SAVE_ERROR, `File upload of extension ${ext} is disabled.`));
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
// Parse the filename extension token, stripping MIME parameters and whitespace.
|
|
183
189
|
let extension = Utils.getFileExtension(filename);
|
|
184
|
-
// Strip MIME parameters (e.g. ";charset=utf-8") and whitespace
|
|
185
190
|
extension = extension?.split(';')[0]?.replace(/\s+/g, '');
|
|
186
|
-
|
|
187
|
-
//
|
|
188
|
-
//
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
191
|
+
|
|
192
|
+
// Derive the Content-Type subtype as a fallback identifier, e.g.
|
|
193
|
+
// "image/svg+xml" -> "svg+xml", "image/svg+xml;charset=utf-8" -> "svg+xml".
|
|
194
|
+
let contentTypeExtension;
|
|
195
|
+
if (contentType && contentType.includes('/')) {
|
|
196
|
+
contentTypeExtension = contentType.split('/')[1]?.split(';')[0]?.replace(/\s+/g, '');
|
|
197
|
+
} else if (contentType) {
|
|
198
|
+
// Malformed Content-Type without a slash: use the raw value so the
|
|
199
|
+
// existing rejection path still fires.
|
|
200
|
+
contentTypeExtension = contentType.split(';')[0]?.replace(/\s+/g, '');
|
|
196
201
|
}
|
|
202
|
+
|
|
203
|
+
// The blocklist must be evaluated against the type the file is actually
|
|
204
|
+
// served as. `FilesController.createFile` derives the stored Content-Type
|
|
205
|
+
// from the filename extension only when `mime` recognizes it; otherwise it
|
|
206
|
+
// preserves the client-supplied Content-Type. So the Content-Type subtype
|
|
207
|
+
// must also be validated whenever the filename has no usable extension OR
|
|
208
|
+
// an extension that `mime` does not recognize (e.g. "file.svg~"), which
|
|
209
|
+
// would otherwise slip past the exact-match blocklist.
|
|
210
|
+
const isExtensionRecognized = extension && mime.getType(filename);
|
|
197
211
|
if (extension && !isValidExtension(extension)) {
|
|
198
|
-
|
|
212
|
+
rejectExtension(extension);
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
if (!isExtensionRecognized && contentTypeExtension && !isValidExtension(contentTypeExtension)) {
|
|
216
|
+
rejectExtension(contentTypeExtension);
|
|
199
217
|
return;
|
|
200
218
|
}
|
|
201
219
|
}
|
|
@@ -373,4 +391,4 @@ function isFileStreamable(req, filesController) {
|
|
|
373
391
|
const end = Number(range[1]);
|
|
374
392
|
return (!isNaN(start) || !isNaN(end)) && typeof filesController.adapter.handleFileStream === 'function';
|
|
375
393
|
}
|
|
376
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhwcmVzcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiTWlkZGxld2FyZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9ub2RlIiwiX0NvbmZpZyIsIl9sb2dnZXIiLCJfRXJyb3IiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ0cmlnZ2VycyIsIlV0aWxzIiwiYXV0aCIsIkZpbGVzUm91dGVyIiwiZXhwcmVzc1JvdXRlciIsIm1heFVwbG9hZFNpemUiLCJyb3V0ZXIiLCJleHByZXNzIiwiUm91dGVyIiwiZ2V0SGFuZGxlciIsIm1ldGFkYXRhSGFuZGxlciIsInBvc3QiLCJyZXEiLCJyZXMiLCJuZXh0IiwiUGFyc2UiLCJFcnJvciIsIklOVkFMSURfRklMRV9OQU1FIiwicmF3IiwidHlwZSIsImxpbWl0IiwiaGFuZGxlUGFyc2VIZWFkZXJzIiwiaGFuZGxlUGFyc2VTZXNzaW9uIiwiY3JlYXRlSGFuZGxlciIsImRlbGV0ZSIsImVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiLCJkZWxldGVIYW5kbGVyIiwiX3Jlc29sdmVBdXRoIiwiY29uZmlnIiwic2Vzc2lvblRva2VuIiwiZ2V0QXV0aEZvclNlc3Npb25Ub2tlbiIsImluc3RhbGxhdGlvbklkIiwiQ29uZmlnIiwicGFyYW1zIiwiYXBwSWQiLCJzdGF0dXMiLCJqc29uIiwiY29kZSIsIk9QRVJBVElPTl9GT1JCSURERU4iLCJlcnJvciIsImZpbGVuYW1lIiwiZmlsZXNDb250cm9sbGVyIiwibWltZSIsImNvbnRlbnRUeXBlIiwiZ2V0VHlwZSIsImZpbGUiLCJGaWxlIiwiYmFzZTY0IiwiZmlsZUF1dGgiLCJ0cmlnZ2VyUmVzdWx0IiwibWF5YmVSdW5GaWxlVHJpZ2dlciIsIlR5cGVzIiwiYmVmb3JlRmluZCIsIl9uYW1lIiwiaXNGaWxlU3RyZWFtYWJsZSIsImFmdGVyRmluZCIsImZvcmNlRG93bmxvYWQiLCJoYW5kbGVGaWxlU3RyZWFtIiwiY2F0Y2giLCJlbmQiLCJkYXRhIiwiZ2V0RmlsZURhdGEiLCJ0b1N0cmluZyIsIkJ1ZmZlciIsImZyb20iLCJfZGF0YSIsImxlbmd0aCIsImVyciIsInJlc29sdmVFcnJvciIsIlNDUklQVF9GQUlMRUQiLCJtZXNzYWdlIiwiaXNSZWFkT25seSIsImNyZWF0ZVNhbml0aXplZEh0dHBFcnJvciIsInVzZXIiLCJpc01hc3RlciIsImlzTGlua2VkIiwiQW5vbnltb3VzVXRpbHMiLCJmaWxlVXBsb2FkIiwiZW5hYmxlRm9yQW5vbnltb3VzVXNlciIsIkZJTEVfU0FWRV9FUlJPUiIsImVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyIiwiZW5hYmxlRm9yUHVibGljIiwiYm9keSIsInZhbGlkYXRlRmlsZW5hbWUiLCJmaWxlRXh0ZW5zaW9ucyIsImlzVmFsaWRFeHRlbnNpb24iLCJleHRlbnNpb24iLCJzb21lIiwiZXh0IiwicmVnZXgiLCJSZWdFeHAiLCJ0ZXN0IiwiZ2V0RmlsZUV4dGVuc2lvbiIsInNwbGl0IiwicmVwbGFjZSIsImluY2x1ZGVzIiwibWV0YWRhdGEiLCJ0YWdzIiwiZmlsZURhdGEiLCJjaGVja1Byb2hpYml0ZWRLZXl3b3JkcyIsIklOVkFMSURfS0VZX05BTUUiLCJzZXRUYWdzIiwic2V0TWV0YWRhdGEiLCJmaWxlU2l6ZSIsImJ5dGVMZW5ndGgiLCJmaWxlT2JqZWN0IiwiYmVmb3JlU2F2ZSIsInNhdmVSZXN1bHQiLCJ1cmwiLCJuYW1lIiwiYnVmZmVyRGF0YSIsImZpbGVPcHRpb25zIiwiX21ldGFkYXRhIiwiZmlsZVRhZ3MiLCJrZXlzIiwiX3RhZ3MiLCJhc3NpZ24iLCJjcmVhdGVGaWxlUmVzdWx0IiwiY3JlYXRlRmlsZSIsIl9zb3VyY2UiLCJfdXJsIiwiX3JlcXVlc3RUYXNrIiwiX3ByZXZpb3VzU2F2ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiYWZ0ZXJTYXZlIiwibG9nZ2VyIiwiYWRhcHRlciIsImdldEZpbGVMb2NhdGlvbiIsImJlZm9yZURlbGV0ZSIsImRlbGV0ZUZpbGUiLCJhZnRlckRlbGV0ZSIsIkZJTEVfREVMRVRFX0VSUk9SIiwiZ2V0TWV0YWRhdGEiLCJleHBvcnRzIiwicmFuZ2UiLCJzdGFydCIsIk51bWJlciIsImlzTmFOIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL1JvdXRlcnMvRmlsZXNSb3V0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgKiBhcyBNaWRkbGV3YXJlcyBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5pbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgQ29uZmlnIGZyb20gJy4uL0NvbmZpZyc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5jb25zdCB0cmlnZ2VycyA9IHJlcXVpcmUoJy4uL3RyaWdnZXJzJyk7XG5jb25zdCBVdGlscyA9IHJlcXVpcmUoJy4uL1V0aWxzJyk7XG5jb25zdCBhdXRoID0gcmVxdWlyZSgnLi4vQXV0aCcpO1xuaW1wb3J0IHsgY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yIH0gZnJvbSAnLi4vRXJyb3InO1xuXG5leHBvcnQgY2xhc3MgRmlsZXNSb3V0ZXIge1xuICBleHByZXNzUm91dGVyKHsgbWF4VXBsb2FkU2l6ZSA9ICcyME1iJyB9ID0ge30pIHtcbiAgICB2YXIgcm91dGVyID0gZXhwcmVzcy5Sb3V0ZXIoKTtcbiAgICByb3V0ZXIuZ2V0KCcvZmlsZXMvOmFwcElkLzpmaWxlbmFtZScsIHRoaXMuZ2V0SGFuZGxlcik7XG4gICAgcm91dGVyLmdldCgnL2ZpbGVzLzphcHBJZC9tZXRhZGF0YS86ZmlsZW5hbWUnLCB0aGlzLm1ldGFkYXRhSGFuZGxlcik7XG5cbiAgICByb3V0ZXIucG9zdCgnL2ZpbGVzJywgZnVuY3Rpb24gKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0ZpbGVuYW1lIG5vdCBwcm92aWRlZC4nKSk7XG4gICAgfSk7XG5cbiAgICByb3V0ZXIucG9zdChcbiAgICAgICcvZmlsZXMvOmZpbGVuYW1lJyxcbiAgICAgIGV4cHJlc3MucmF3KHtcbiAgICAgICAgdHlwZTogKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBsaW1pdDogbWF4VXBsb2FkU2l6ZSxcbiAgICAgIH0pLCAvLyBBbGxvdyB1cGxvYWRzIHdpdGhvdXQgQ29udGVudC1UeXBlLCBvciB3aXRoIGFueSBDb250ZW50LVR5cGUuXG4gICAgICBNaWRkbGV3YXJlcy5oYW5kbGVQYXJzZUhlYWRlcnMsXG4gICAgICBNaWRkbGV3YXJlcy5oYW5kbGVQYXJzZVNlc3Npb24sXG4gICAgICB0aGlzLmNyZWF0ZUhhbmRsZXJcbiAgICApO1xuXG4gICAgcm91dGVyLmRlbGV0ZShcbiAgICAgICcvZmlsZXMvOmZpbGVuYW1lJyxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlSGVhZGVycyxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlU2Vzc2lvbixcbiAgICAgIE1pZGRsZXdhcmVzLmVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsXG4gICAgICB0aGlzLmRlbGV0ZUhhbmRsZXJcbiAgICApO1xuICAgIHJldHVybiByb3V0ZXI7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgX3Jlc29sdmVBdXRoKHJlcSwgY29uZmlnKSB7XG4gICAgY29uc3Qgc2Vzc2lvblRva2VuID0gcmVxLmdldCgnWC1QYXJzZS1TZXNzaW9uLVRva2VuJyk7XG4gICAgaWYgKCFzZXNzaW9uVG9rZW4pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGF1dGguZ2V0QXV0aEZvclNlc3Npb25Ub2tlbih7XG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgc2Vzc2lvblRva2VuLFxuICAgICAgICBpbnN0YWxsYXRpb25JZDogcmVxLmdldCgnWC1QYXJzZS1JbnN0YWxsYXRpb24tSWQnKSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0SGFuZGxlcihyZXEsIHJlcykge1xuICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQocmVxLnBhcmFtcy5hcHBJZCk7XG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAzKTtcbiAgICAgIHJlcy5qc29uKHsgY29kZTogUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTiwgZXJyb3I6ICdJbnZhbGlkIGFwcGxpY2F0aW9uIElELicgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGZpbGVuYW1lID0gcmVxLnBhcmFtcy5maWxlbmFtZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmlsZXNDb250cm9sbGVyID0gY29uZmlnLmZpbGVzQ29udHJvbGxlcjtcbiAgICAgIGNvbnN0IG1pbWUgPSAoYXdhaXQgaW1wb3J0KCdtaW1lJykpLmRlZmF1bHQ7XG4gICAgICBsZXQgY29udGVudFR5cGUgPSBtaW1lLmdldFR5cGUoZmlsZW5hbWUpO1xuICAgICAgbGV0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQ6ICcnIH0sIGNvbnRlbnRUeXBlKTtcbiAgICAgIGNvbnN0IGZpbGVBdXRoID0gYXdhaXQgRmlsZXNSb3V0ZXIuX3Jlc29sdmVBdXRoKHJlcSwgY29uZmlnKTtcbiAgICAgIGNvbnN0IHRyaWdnZXJSZXN1bHQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVGaW5kLFxuICAgICAgICB7IGZpbGUgfSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBmaWxlQXV0aFxuICAgICAgKTtcbiAgICAgIGlmICh0cmlnZ2VyUmVzdWx0Py5maWxlPy5fbmFtZSkge1xuICAgICAgICBmaWxlbmFtZSA9IHRyaWdnZXJSZXN1bHQ/LmZpbGU/Ll9uYW1lO1xuICAgICAgICBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0ZpbGVTdHJlYW1hYmxlKHJlcSwgZmlsZXNDb250cm9sbGVyKSkge1xuICAgICAgICBjb25zdCBhZnRlckZpbmQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRmluZCxcbiAgICAgICAgICB7IGZpbGUsIGZvcmNlRG93bmxvYWQ6IGZhbHNlIH0sXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGZpbGVBdXRoXG4gICAgICAgICk7XG4gICAgICAgIGlmIChhZnRlckZpbmQ/LmZvcmNlRG93bmxvYWQpIHtcbiAgICAgICAgICByZXMuc2V0KCdDb250ZW50LURpc3Bvc2l0aW9uJywgYGF0dGFjaG1lbnQ7ZmlsZW5hbWU9JHthZnRlckZpbmQuZmlsZT8uX25hbWUgfHwgZmlsZW5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgZmlsZXNDb250cm9sbGVyLmhhbmRsZUZpbGVTdHJlYW0oY29uZmlnLCBmaWxlbmFtZSwgcmVxLCByZXMsIGNvbnRlbnRUeXBlKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgcmVzLnN0YXR1cyg0MDQpO1xuICAgICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyk7XG4gICAgICAgICAgcmVzLmVuZCgnRmlsZSBub3QgZm91bmQuJyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBkYXRhID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmdldEZpbGVEYXRhKGNvbmZpZywgZmlsZW5hbWUpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MDQpO1xuICAgICAgICByZXMuc2V0KCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xuICAgICAgICByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZC4nKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQ6IGRhdGEudG9TdHJpbmcoJ2Jhc2U2NCcpIH0sIGNvbnRlbnRUeXBlKTtcbiAgICAgIGNvbnN0IGFmdGVyRmluZCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRmluZCxcbiAgICAgICAgeyBmaWxlLCBmb3JjZURvd25sb2FkOiBmYWxzZSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGZpbGVBdXRoXG4gICAgICApO1xuXG4gICAgICBpZiAoYWZ0ZXJGaW5kPy5maWxlKSB7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGFmdGVyRmluZC5maWxlLl9uYW1lKTtcbiAgICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGFmdGVyRmluZC5maWxlLl9kYXRhLCAnYmFzZTY0Jyk7XG4gICAgICB9XG5cbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtVHlwZScsIGNvbnRlbnRUeXBlKTtcbiAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtTGVuZ3RoJywgZGF0YS5sZW5ndGgpO1xuICAgICAgaWYgKGFmdGVyRmluZC5mb3JjZURvd25sb2FkKSB7XG4gICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCBgYXR0YWNobWVudDtmaWxlbmFtZT0ke2FmdGVyRmluZC5maWxlLl9uYW1lfWApO1xuICAgICAgfVxuICAgICAgcmVzLmVuZChkYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnIgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5TQ1JJUFRfRkFJTEVELFxuICAgICAgICBtZXNzYWdlOiBgQ291bGQgbm90IGZpbmQgZmlsZTogJHtmaWxlbmFtZX0uYCxcbiAgICAgIH0pO1xuICAgICAgcmVzLnN0YXR1cyg0MDMpO1xuICAgICAgcmVzLmpzb24oeyBjb2RlOiBlcnIuY29kZSwgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUhhbmRsZXIocmVxLCByZXMsIG5leHQpIHtcbiAgICBpZiAocmVxLmF1dGguaXNSZWFkT25seSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IoNDAzLCBcInJlYWQtb25seSBtYXN0ZXJLZXkgaXNuJ3QgYWxsb3dlZCB0byBjcmVhdGUgYSBmaWxlLlwiLCByZXEuY29uZmlnKTtcbiAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKTtcbiAgICAgIHJlcy5lbmQoYHtcImVycm9yXCI6XCIke2Vycm9yLm1lc3NhZ2V9XCJ9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gICAgY29uc3QgdXNlciA9IHJlcS5hdXRoLnVzZXI7XG4gICAgY29uc3QgaXNNYXN0ZXIgPSByZXEuYXV0aC5pc01hc3RlcjtcbiAgICBjb25zdCBpc0xpbmtlZCA9IHVzZXIgJiYgUGFyc2UuQW5vbnltb3VzVXRpbHMuaXNMaW5rZWQodXNlcik7XG4gICAgaWYgKCFpc01hc3RlciAmJiAhY29uZmlnLmZpbGVVcGxvYWQuZW5hYmxlRm9yQW5vbnltb3VzVXNlciAmJiBpc0xpbmtlZCkge1xuICAgICAgbmV4dChcbiAgICAgICAgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUiwgJ0ZpbGUgdXBsb2FkIGJ5IGFub255bW91cyB1c2VyIGlzIGRpc2FibGVkLicpXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWlzTWFzdGVyICYmICFjb25maWcuZmlsZVVwbG9hZC5lbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciAmJiAhaXNMaW5rZWQgJiYgdXNlcikge1xuICAgICAgbmV4dChcbiAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgIFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgICAnRmlsZSB1cGxvYWQgYnkgYXV0aGVudGljYXRlZCB1c2VyIGlzIGRpc2FibGVkLidcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFpc01hc3RlciAmJiAhY29uZmlnLmZpbGVVcGxvYWQuZW5hYmxlRm9yUHVibGljICYmICF1c2VyKSB7XG4gICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsICdGaWxlIHVwbG9hZCBieSBwdWJsaWMgaXMgZGlzYWJsZWQuJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSByZXEuZ2V0KCdDb250ZW50LXR5cGUnKTtcblxuICAgIGlmICghcmVxLmJvZHkgfHwgIXJlcS5ib2R5Lmxlbmd0aCkge1xuICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLCAnSW52YWxpZCBmaWxlIHVwbG9hZC4nKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSBmaWxlc0NvbnRyb2xsZXIudmFsaWRhdGVGaWxlbmFtZShmaWxlbmFtZSk7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBuZXh0KGVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlRXh0ZW5zaW9ucyA9IGNvbmZpZy5maWxlVXBsb2FkPy5maWxlRXh0ZW5zaW9ucztcbiAgICBpZiAoIWlzTWFzdGVyICYmIGZpbGVFeHRlbnNpb25zKSB7XG4gICAgICBjb25zdCBpc1ZhbGlkRXh0ZW5zaW9uID0gZXh0ZW5zaW9uID0+IHtcbiAgICAgICAgcmV0dXJuIGZpbGVFeHRlbnNpb25zLnNvbWUoZXh0ID0+IHtcbiAgICAgICAgICBpZiAoZXh0ID09PSAnKicpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoZXh0KTtcbiAgICAgICAgICBpZiAocmVnZXgudGVzdChleHRlbnNpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGxldCBleHRlbnNpb24gPSBVdGlscy5nZXRGaWxlRXh0ZW5zaW9uKGZpbGVuYW1lKTtcbiAgICAgIC8vIFN0cmlwIE1JTUUgcGFyYW1ldGVycyAoZS5nLiBcIjtjaGFyc2V0PXV0Zi04XCIpIGFuZCB3aGl0ZXNwYWNlXG4gICAgICBleHRlbnNpb24gPSBleHRlbnNpb24/LnNwbGl0KCc7JylbMF0/LnJlcGxhY2UoL1xccysvZywgJycpO1xuICAgICAgLy8gSWYgdGhlIGZpbGVuYW1lIGhhcyBubyB1c2FibGUgZXh0ZW5zaW9uIChubyBkb3QsIHRyYWlsaW5nIGRvdCwgb3JcbiAgICAgIC8vIHdoaXRlc3BhY2Utb25seSBzdWZmaXgpLCBmYWxsIGJhY2sgdG8gdGhlIENvbnRlbnQtVHlwZSBzdWJ0eXBlIOKAlCBzYW1lXG4gICAgICAvLyBhcyBhIGRvdGxlc3MgZmlsZW5hbWUuXG4gICAgICBpZiAoIWV4dGVuc2lvbiAmJiBjb250ZW50VHlwZSAmJiBjb250ZW50VHlwZS5pbmNsdWRlcygnLycpKSB7XG4gICAgICAgIGV4dGVuc2lvbiA9IGNvbnRlbnRUeXBlLnNwbGl0KCcvJylbMV0/LnNwbGl0KCc7JylbMF0/LnJlcGxhY2UoL1xccysvZywgJycpO1xuICAgICAgfVxuICAgICAgLy8gTGFzdCByZXNvcnQgZm9yIG1hbGZvcm1lZCBpbnB1dHMgKGUuZy4gQ29udGVudC1UeXBlIHdpdGhvdXQgYSBzbGFzaCk6XG4gICAgICAvLyB1c2UgdGhlIHJhdyBDb250ZW50LVR5cGUgc28gdGhlIGV4aXN0aW5nIHJlamVjdGlvbiBwYXRoIHN0aWxsIGZpcmVzLlxuICAgICAgaWYgKCFleHRlbnNpb24gJiYgY29udGVudFR5cGUpIHtcbiAgICAgICAgZXh0ZW5zaW9uID0gY29udGVudFR5cGUuc3BsaXQoJzsnKVswXT8ucmVwbGFjZSgvXFxzKy9nLCAnJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChleHRlbnNpb24gJiYgIWlzVmFsaWRFeHRlbnNpb24oZXh0ZW5zaW9uKSkge1xuICAgICAgICBuZXh0KFxuICAgICAgICAgIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgIFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgICAgIGBGaWxlIHVwbG9hZCBvZiBleHRlbnNpb24gJHtleHRlbnNpb259IGlzIGRpc2FibGVkLmBcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBiYXNlNjQgPSByZXEuYm9keS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgY29uc3QgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lLCB7IGJhc2U2NCB9LCBjb250ZW50VHlwZSk7XG4gICAgY29uc3QgeyBtZXRhZGF0YSA9IHt9LCB0YWdzID0ge30gfSA9IHJlcS5maWxlRGF0YSB8fCB7fTtcbiAgICB0cnkge1xuICAgICAgLy8gU2NhbiByZXF1ZXN0IGRhdGEgZm9yIGRlbmllZCBrZXl3b3Jkc1xuICAgICAgVXRpbHMuY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMoY29uZmlnLCBtZXRhZGF0YSk7XG4gICAgICBVdGlscy5jaGVja1Byb2hpYml0ZWRLZXl3b3Jkcyhjb25maWcsIHRhZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0tFWV9OQU1FLCBlcnJvcikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmaWxlLnNldFRhZ3ModGFncyk7XG4gICAgZmlsZS5zZXRNZXRhZGF0YShtZXRhZGF0YSk7XG4gICAgY29uc3QgZmlsZVNpemUgPSBCdWZmZXIuYnl0ZUxlbmd0aChyZXEuYm9keSk7XG4gICAgY29uc3QgZmlsZU9iamVjdCA9IHsgZmlsZSwgZmlsZVNpemUgfTtcbiAgICB0cnkge1xuICAgICAgLy8gcnVuIGJlZm9yZVNhdmVGaWxlIHRyaWdnZXJcbiAgICAgIGNvbnN0IHRyaWdnZXJSZXN1bHQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVTYXZlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgbGV0IHNhdmVSZXN1bHQ7XG4gICAgICAvLyBpZiBhIG5ldyBQYXJzZUZpbGUgaXMgcmV0dXJuZWQgY2hlY2sgaWYgaXQncyBhbiBhbHJlYWR5IHNhdmVkIGZpbGVcbiAgICAgIGlmICh0cmlnZ2VyUmVzdWx0IGluc3RhbmNlb2YgUGFyc2UuRmlsZSkge1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUgPSB0cmlnZ2VyUmVzdWx0O1xuICAgICAgICBpZiAodHJpZ2dlclJlc3VsdC51cmwoKSkge1xuICAgICAgICAgIC8vIHNldCBmaWxlU2l6ZSB0byBudWxsIGJlY2F1c2Ugd2Ugd29udCBrbm93IGhvdyBiaWcgaXQgaXMgaGVyZVxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZVNpemUgPSBudWxsO1xuICAgICAgICAgIHNhdmVSZXN1bHQgPSB7XG4gICAgICAgICAgICB1cmw6IHRyaWdnZXJSZXN1bHQudXJsKCksXG4gICAgICAgICAgICBuYW1lOiB0cmlnZ2VyUmVzdWx0Ll9uYW1lLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSBmaWxlIHJldHVybmVkIGJ5IHRoZSB0cmlnZ2VyIGhhcyBhbHJlYWR5IGJlZW4gc2F2ZWQgc2tpcCBzYXZpbmcgYW55dGhpbmdcbiAgICAgIGlmICghc2F2ZVJlc3VsdCkge1xuICAgICAgICAvLyB1cGRhdGUgZmlsZVNpemVcbiAgICAgICAgY29uc3QgYnVmZmVyRGF0YSA9IEJ1ZmZlci5mcm9tKGZpbGVPYmplY3QuZmlsZS5fZGF0YSwgJ2Jhc2U2NCcpO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGVTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgoYnVmZmVyRGF0YSk7XG4gICAgICAgIC8vIHByZXBhcmUgZmlsZSBvcHRpb25zXG4gICAgICAgIGNvbnN0IGZpbGVPcHRpb25zID0ge1xuICAgICAgICAgIG1ldGFkYXRhOiBmaWxlT2JqZWN0LmZpbGUuX21ldGFkYXRhLFxuICAgICAgICB9O1xuICAgICAgICAvLyBzb21lIHMzLWNvbXBhdGlibGUgcHJvdmlkZXJzIChEaWdpdGFsT2NlYW4sIExpbm9kZSkgZG8gbm90IGFjY2VwdCB0YWdzXG4gICAgICAgIC8vIHNvIHdlIGRvIG5vdCBpbmNsdWRlIHRoZSB0YWdzIG9wdGlvbiBpZiBpdCBpcyBlbXB0eS5cbiAgICAgICAgY29uc3QgZmlsZVRhZ3MgPVxuICAgICAgICAgIE9iamVjdC5rZXlzKGZpbGVPYmplY3QuZmlsZS5fdGFncykubGVuZ3RoID4gMCA/IHsgdGFnczogZmlsZU9iamVjdC5maWxlLl90YWdzIH0gOiB7fTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihmaWxlT3B0aW9ucywgZmlsZVRhZ3MpO1xuICAgICAgICAvLyBzYXZlIGZpbGVcbiAgICAgICAgY29uc3QgY3JlYXRlRmlsZVJlc3VsdCA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5jcmVhdGVGaWxlKFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX25hbWUsXG4gICAgICAgICAgYnVmZmVyRGF0YSxcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3NvdXJjZS50eXBlLFxuICAgICAgICAgIGZpbGVPcHRpb25zXG4gICAgICAgICk7XG4gICAgICAgIC8vIHVwZGF0ZSBmaWxlIHdpdGggbmV3IGRhdGFcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9uYW1lID0gY3JlYXRlRmlsZVJlc3VsdC5uYW1lO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3VybCA9IGNyZWF0ZUZpbGVSZXN1bHQudXJsO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3JlcXVlc3RUYXNrID0gbnVsbDtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9wcmV2aW91c1NhdmUgPSBQcm9taXNlLnJlc29sdmUoZmlsZU9iamVjdC5maWxlKTtcbiAgICAgICAgc2F2ZVJlc3VsdCA9IHtcbiAgICAgICAgICB1cmw6IGNyZWF0ZUZpbGVSZXN1bHQudXJsLFxuICAgICAgICAgIG5hbWU6IGNyZWF0ZUZpbGVSZXN1bHQubmFtZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIHJ1biBhZnRlclNhdmVGaWxlIHRyaWdnZXJcbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIodHJpZ2dlcnMuVHlwZXMuYWZ0ZXJTYXZlLCBmaWxlT2JqZWN0LCBjb25maWcsIHJlcS5hdXRoKTtcbiAgICAgIHJlcy5zdGF0dXMoMjAxKTtcbiAgICAgIHJlcy5zZXQoJ0xvY2F0aW9uJywgc2F2ZVJlc3VsdC51cmwpO1xuICAgICAgcmVzLmpzb24oc2F2ZVJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciBjcmVhdGluZyBhIGZpbGU6ICcsIGUpO1xuICAgICAgY29uc3QgZXJyb3IgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3Qgc3RvcmUgZmlsZTogJHtmaWxlT2JqZWN0LmZpbGUuX25hbWV9LmAsXG4gICAgICB9KTtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUhhbmRsZXIocmVxLCByZXMsIG5leHQpIHtcbiAgICBpZiAocmVxLmF1dGguaXNSZWFkT25seSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IoNDAzLCBcInJlYWQtb25seSBtYXN0ZXJLZXkgaXNuJ3QgYWxsb3dlZCB0byBkZWxldGUgYSBmaWxlLlwiLCByZXEuY29uZmlnKTtcbiAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKTtcbiAgICAgIHJlcy5lbmQoYHtcImVycm9yXCI6XCIke2Vycm9yLm1lc3NhZ2V9XCJ9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGZpbGVzQ29udHJvbGxlciB9ID0gcmVxLmNvbmZpZztcbiAgICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgICAvLyBydW4gYmVmb3JlRGVsZXRlRmlsZSB0cmlnZ2VyXG4gICAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUpO1xuICAgICAgZmlsZS5fdXJsID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmFkYXB0ZXIuZ2V0RmlsZUxvY2F0aW9uKHJlcS5jb25maWcsIGZpbGVuYW1lKTtcbiAgICAgIGNvbnN0IGZpbGVPYmplY3QgPSB7IGZpbGUsIGZpbGVTaXplOiBudWxsIH07XG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVEZWxldGUsXG4gICAgICAgIGZpbGVPYmplY3QsXG4gICAgICAgIHJlcS5jb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgLy8gZGVsZXRlIGZpbGVcbiAgICAgIGF3YWl0IGZpbGVzQ29udHJvbGxlci5kZWxldGVGaWxlKHJlcS5jb25maWcsIGZpbGVuYW1lKTtcbiAgICAgIC8vIHJ1biBhZnRlckRlbGV0ZUZpbGUgdHJpZ2dlclxuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYWZ0ZXJEZWxldGUsXG4gICAgICAgIGZpbGVPYmplY3QsXG4gICAgICAgIHJlcS5jb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgcmVzLnN0YXR1cygyMDApO1xuICAgICAgLy8gVE9ETzogcmV0dXJuIHVzZWZ1bCBKU09OIGhlcmU/XG4gICAgICByZXMuZW5kKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciBkZWxldGluZyBhIGZpbGU6ICcsIGUpO1xuICAgICAgY29uc3QgZXJyb3IgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5GSUxFX0RFTEVURV9FUlJPUixcbiAgICAgICAgbWVzc2FnZTogJ0NvdWxkIG5vdCBkZWxldGUgZmlsZS4nLFxuICAgICAgfSk7XG4gICAgICBuZXh0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBtZXRhZGF0YUhhbmRsZXIocmVxLCByZXMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChyZXEucGFyYW1zLmFwcElkKTtcbiAgICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgICAgcmVzLmpzb24oe30pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB7IGZpbGVzQ29udHJvbGxlciB9ID0gY29uZmlnO1xuICAgICAgbGV0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0OiAnJyB9KTtcbiAgICAgIGNvbnN0IGZpbGVBdXRoID0gYXdhaXQgRmlsZXNSb3V0ZXIuX3Jlc29sdmVBdXRoKHJlcSwgY29uZmlnKTtcbiAgICAgIGNvbnN0IHRyaWdnZXJSZXN1bHQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVGaW5kLFxuICAgICAgICB7IGZpbGUgfSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBmaWxlQXV0aFxuICAgICAgKTtcbiAgICAgIGlmICh0cmlnZ2VyUmVzdWx0Py5maWxlPy5fbmFtZSkge1xuICAgICAgICBmaWxlbmFtZSA9IHRyaWdnZXJSZXN1bHQuZmlsZS5fbmFtZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuZ2V0TWV0YWRhdGEoZmlsZW5hbWUpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgcmVzLnN0YXR1cygyMDApO1xuICAgICAgICByZXMuanNvbih7fSk7XG4gICAgICB9KTtcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5hZnRlckZpbmQsXG4gICAgICAgIHsgZmlsZSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGZpbGVBdXRoXG4gICAgICApO1xuICAgICAgcmVzLnN0YXR1cygyMDApO1xuICAgICAgcmVzLmpzb24oZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuU0NSSVBUX0ZBSUxFRCxcbiAgICAgICAgbWVzc2FnZTogJ0NvdWxkIG5vdCBnZXQgZmlsZSBtZXRhZGF0YS4nLFxuICAgICAgfSk7XG4gICAgICByZXMuc3RhdHVzKDQwMyk7XG4gICAgICByZXMuanNvbih7IGNvZGU6IGVyci5jb2RlLCBlcnJvcjogZXJyLm1lc3NhZ2UgfSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzRmlsZVN0cmVhbWFibGUocmVxLCBmaWxlc0NvbnRyb2xsZXIpIHtcbiAgY29uc3QgcmFuZ2UgPSAocmVxLmdldCgnUmFuZ2UnKSB8fCAnLy0vJykuc3BsaXQoJy0nKTtcbiAgY29uc3Qgc3RhcnQgPSBOdW1iZXIocmFuZ2VbMF0pO1xuICBjb25zdCBlbmQgPSBOdW1iZXIocmFuZ2VbMV0pO1xuICByZXR1cm4gKFxuICAgICghaXNOYU4oc3RhcnQpIHx8ICFpc05hTihlbmQpKSAmJiB0eXBlb2YgZmlsZXNDb250cm9sbGVyLmFkYXB0ZXIuaGFuZGxlRmlsZVN0cmVhbSA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxRQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxXQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxLQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxPQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFJQSxJQUFBTSxNQUFBLEdBQUFOLE9BQUE7QUFBb0QsU0FBQUUsd0JBQUFLLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFQLHVCQUFBLFlBQUFBLENBQUFLLENBQUEsRUFBQUMsQ0FBQSxT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
|
|
394
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhwcmVzcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiTWlkZGxld2FyZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9ub2RlIiwiX0NvbmZpZyIsIl9sb2dnZXIiLCJfRXJyb3IiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ0cmlnZ2VycyIsIlV0aWxzIiwiYXV0aCIsIkZpbGVzUm91dGVyIiwiZXhwcmVzc1JvdXRlciIsIm1heFVwbG9hZFNpemUiLCJyb3V0ZXIiLCJleHByZXNzIiwiUm91dGVyIiwiZ2V0SGFuZGxlciIsIm1ldGFkYXRhSGFuZGxlciIsInBvc3QiLCJyZXEiLCJyZXMiLCJuZXh0IiwiUGFyc2UiLCJFcnJvciIsIklOVkFMSURfRklMRV9OQU1FIiwicmF3IiwidHlwZSIsImxpbWl0IiwiaGFuZGxlUGFyc2VIZWFkZXJzIiwiaGFuZGxlUGFyc2VTZXNzaW9uIiwiY3JlYXRlSGFuZGxlciIsImRlbGV0ZSIsImVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiLCJkZWxldGVIYW5kbGVyIiwiX3Jlc29sdmVBdXRoIiwiY29uZmlnIiwic2Vzc2lvblRva2VuIiwiZ2V0QXV0aEZvclNlc3Npb25Ub2tlbiIsImluc3RhbGxhdGlvbklkIiwiQ29uZmlnIiwicGFyYW1zIiwiYXBwSWQiLCJzdGF0dXMiLCJqc29uIiwiY29kZSIsIk9QRVJBVElPTl9GT1JCSURERU4iLCJlcnJvciIsImZpbGVuYW1lIiwiZmlsZXNDb250cm9sbGVyIiwibWltZSIsImNvbnRlbnRUeXBlIiwiZ2V0VHlwZSIsImZpbGUiLCJGaWxlIiwiYmFzZTY0IiwiZmlsZUF1dGgiLCJ0cmlnZ2VyUmVzdWx0IiwibWF5YmVSdW5GaWxlVHJpZ2dlciIsIlR5cGVzIiwiYmVmb3JlRmluZCIsIl9uYW1lIiwiaXNGaWxlU3RyZWFtYWJsZSIsImFmdGVyRmluZCIsImZvcmNlRG93bmxvYWQiLCJoYW5kbGVGaWxlU3RyZWFtIiwiY2F0Y2giLCJlbmQiLCJkYXRhIiwiZ2V0RmlsZURhdGEiLCJ0b1N0cmluZyIsIkJ1ZmZlciIsImZyb20iLCJfZGF0YSIsImxlbmd0aCIsImVyciIsInJlc29sdmVFcnJvciIsIlNDUklQVF9GQUlMRUQiLCJtZXNzYWdlIiwiaXNSZWFkT25seSIsImNyZWF0ZVNhbml0aXplZEh0dHBFcnJvciIsInVzZXIiLCJpc01hc3RlciIsImlzTGlua2VkIiwiQW5vbnltb3VzVXRpbHMiLCJmaWxlVXBsb2FkIiwiZW5hYmxlRm9yQW5vbnltb3VzVXNlciIsIkZJTEVfU0FWRV9FUlJPUiIsImVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyIiwiZW5hYmxlRm9yUHVibGljIiwiYm9keSIsInZhbGlkYXRlRmlsZW5hbWUiLCJmaWxlRXh0ZW5zaW9ucyIsImlzVmFsaWRFeHRlbnNpb24iLCJleHRlbnNpb24iLCJzb21lIiwiZXh0IiwicmVnZXgiLCJSZWdFeHAiLCJ0ZXN0IiwicmVqZWN0RXh0ZW5zaW9uIiwiZ2V0RmlsZUV4dGVuc2lvbiIsInNwbGl0IiwicmVwbGFjZSIsImNvbnRlbnRUeXBlRXh0ZW5zaW9uIiwiaW5jbHVkZXMiLCJpc0V4dGVuc2lvblJlY29nbml6ZWQiLCJtZXRhZGF0YSIsInRhZ3MiLCJmaWxlRGF0YSIsImNoZWNrUHJvaGliaXRlZEtleXdvcmRzIiwiSU5WQUxJRF9LRVlfTkFNRSIsInNldFRhZ3MiLCJzZXRNZXRhZGF0YSIsImZpbGVTaXplIiwiYnl0ZUxlbmd0aCIsImZpbGVPYmplY3QiLCJiZWZvcmVTYXZlIiwic2F2ZVJlc3VsdCIsInVybCIsIm5hbWUiLCJidWZmZXJEYXRhIiwiZmlsZU9wdGlvbnMiLCJfbWV0YWRhdGEiLCJmaWxlVGFncyIsImtleXMiLCJfdGFncyIsImFzc2lnbiIsImNyZWF0ZUZpbGVSZXN1bHQiLCJjcmVhdGVGaWxlIiwiX3NvdXJjZSIsIl91cmwiLCJfcmVxdWVzdFRhc2siLCJfcHJldmlvdXNTYXZlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhZnRlclNhdmUiLCJsb2dnZXIiLCJhZGFwdGVyIiwiZ2V0RmlsZUxvY2F0aW9uIiwiYmVmb3JlRGVsZXRlIiwiZGVsZXRlRmlsZSIsImFmdGVyRGVsZXRlIiwiRklMRV9ERUxFVEVfRVJST1IiLCJnZXRNZXRhZGF0YSIsImV4cG9ydHMiLCJyYW5nZSIsInN0YXJ0IiwiTnVtYmVyIiwiaXNOYU4iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUm91dGVycy9GaWxlc1JvdXRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXhwcmVzcyBmcm9tICdleHByZXNzJztcbmltcG9ydCAqIGFzIE1pZGRsZXdhcmVzIGZyb20gJy4uL21pZGRsZXdhcmVzJztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBDb25maWcgZnJvbSAnLi4vQ29uZmlnJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmNvbnN0IHRyaWdnZXJzID0gcmVxdWlyZSgnLi4vdHJpZ2dlcnMnKTtcbmNvbnN0IFV0aWxzID0gcmVxdWlyZSgnLi4vVXRpbHMnKTtcbmNvbnN0IGF1dGggPSByZXF1aXJlKCcuLi9BdXRoJyk7XG5pbXBvcnQgeyBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IgfSBmcm9tICcuLi9FcnJvcic7XG5cbmV4cG9ydCBjbGFzcyBGaWxlc1JvdXRlciB7XG4gIGV4cHJlc3NSb3V0ZXIoeyBtYXhVcGxvYWRTaXplID0gJzIwTWInIH0gPSB7fSkge1xuICAgIHZhciByb3V0ZXIgPSBleHByZXNzLlJvdXRlcigpO1xuICAgIHJvdXRlci5nZXQoJy9maWxlcy86YXBwSWQvOmZpbGVuYW1lJywgdGhpcy5nZXRIYW5kbGVyKTtcbiAgICByb3V0ZXIuZ2V0KCcvZmlsZXMvOmFwcElkL21ldGFkYXRhLzpmaWxlbmFtZScsIHRoaXMubWV0YWRhdGFIYW5kbGVyKTtcblxuICAgIHJvdXRlci5wb3N0KCcvZmlsZXMnLCBmdW5jdGlvbiAocmVxLCByZXMsIG5leHQpIHtcbiAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRmlsZW5hbWUgbm90IHByb3ZpZGVkLicpKTtcbiAgICB9KTtcblxuICAgIHJvdXRlci5wb3N0KFxuICAgICAgJy9maWxlcy86ZmlsZW5hbWUnLFxuICAgICAgZXhwcmVzcy5yYXcoe1xuICAgICAgICB0eXBlOiAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGxpbWl0OiBtYXhVcGxvYWRTaXplLFxuICAgICAgfSksIC8vIEFsbG93IHVwbG9hZHMgd2l0aG91dCBDb250ZW50LVR5cGUsIG9yIHdpdGggYW55IENvbnRlbnQtVHlwZS5cbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlSGVhZGVycyxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlU2Vzc2lvbixcbiAgICAgIHRoaXMuY3JlYXRlSGFuZGxlclxuICAgICk7XG5cbiAgICByb3V0ZXIuZGVsZXRlKFxuICAgICAgJy9maWxlcy86ZmlsZW5hbWUnLFxuICAgICAgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VIZWFkZXJzLFxuICAgICAgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VTZXNzaW9uLFxuICAgICAgTWlkZGxld2FyZXMuZW5mb3JjZU1hc3RlcktleUFjY2VzcyxcbiAgICAgIHRoaXMuZGVsZXRlSGFuZGxlclxuICAgICk7XG4gICAgcmV0dXJuIHJvdXRlcjtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBfcmVzb2x2ZUF1dGgocmVxLCBjb25maWcpIHtcbiAgICBjb25zdCBzZXNzaW9uVG9rZW4gPSByZXEuZ2V0KCdYLVBhcnNlLVNlc3Npb24tVG9rZW4nKTtcbiAgICBpZiAoIXNlc3Npb25Ub2tlbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgYXV0aC5nZXRBdXRoRm9yU2Vzc2lvblRva2VuKHtcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBzZXNzaW9uVG9rZW4sXG4gICAgICAgIGluc3RhbGxhdGlvbklkOiByZXEuZ2V0KCdYLVBhcnNlLUluc3RhbGxhdGlvbi1JZCcpLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRIYW5kbGVyKHJlcSwgcmVzKSB7XG4gICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChyZXEucGFyYW1zLmFwcElkKTtcbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgcmVzLnN0YXR1cyg0MDMpO1xuICAgICAgcmVzLmpzb24oeyBjb2RlOiBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLCBlcnJvcjogJ0ludmFsaWQgYXBwbGljYXRpb24gSUQuJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZmlsZW5hbWUgPSByZXEucGFyYW1zLmZpbGVuYW1lO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgICAgY29uc3QgbWltZSA9IChhd2FpdCBpbXBvcnQoJ21pbWUnKSkuZGVmYXVsdDtcbiAgICAgIGxldCBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSk7XG4gICAgICBsZXQgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lLCB7IGJhc2U2NDogJycgfSwgY29udGVudFR5cGUpO1xuICAgICAgY29uc3QgZmlsZUF1dGggPSBhd2FpdCBGaWxlc1JvdXRlci5fcmVzb2x2ZUF1dGgocmVxLCBjb25maWcpO1xuICAgICAgY29uc3QgdHJpZ2dlclJlc3VsdCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZUZpbmQsXG4gICAgICAgIHsgZmlsZSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGZpbGVBdXRoXG4gICAgICApO1xuICAgICAgaWYgKHRyaWdnZXJSZXN1bHQ/LmZpbGU/Ll9uYW1lKSB7XG4gICAgICAgIGZpbGVuYW1lID0gdHJpZ2dlclJlc3VsdD8uZmlsZT8uX25hbWU7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGZpbGVuYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRmlsZVN0cmVhbWFibGUocmVxLCBmaWxlc0NvbnRyb2xsZXIpKSB7XG4gICAgICAgIGNvbnN0IGFmdGVyRmluZCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYWZ0ZXJGaW5kLFxuICAgICAgICAgIHsgZmlsZSwgZm9yY2VEb3dubG9hZDogZmFsc2UgfSxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgZmlsZUF1dGhcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGFmdGVyRmluZD8uZm9yY2VEb3dubG9hZCkge1xuICAgICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCBgYXR0YWNobWVudDtmaWxlbmFtZT0ke2FmdGVyRmluZC5maWxlPy5fbmFtZSB8fCBmaWxlbmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBmaWxlc0NvbnRyb2xsZXIuaGFuZGxlRmlsZVN0cmVhbShjb25maWcsIGZpbGVuYW1lLCByZXEsIHJlcywgY29udGVudFR5cGUpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICByZXMuc3RhdHVzKDQwNCk7XG4gICAgICAgICAgcmVzLnNldCgnQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKTtcbiAgICAgICAgICByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZC4nKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGRhdGEgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuZ2V0RmlsZURhdGEoY29uZmlnLCBmaWxlbmFtZSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICByZXMuc3RhdHVzKDQwNCk7XG4gICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyk7XG4gICAgICAgIHJlcy5lbmQoJ0ZpbGUgbm90IGZvdW5kLicpO1xuICAgICAgfSk7XG4gICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lLCB7IGJhc2U2NDogZGF0YS50b1N0cmluZygnYmFzZTY0JykgfSwgY29udGVudFR5cGUpO1xuICAgICAgY29uc3QgYWZ0ZXJGaW5kID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYWZ0ZXJGaW5kLFxuICAgICAgICB7IGZpbGUsIGZvcmNlRG93bmxvYWQ6IGZhbHNlIH0sXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZmlsZUF1dGhcbiAgICAgICk7XG5cbiAgICAgIGlmIChhZnRlckZpbmQ/LmZpbGUpIHtcbiAgICAgICAgY29udGVudFR5cGUgPSBtaW1lLmdldFR5cGUoYWZ0ZXJGaW5kLmZpbGUuX25hbWUpO1xuICAgICAgICBkYXRhID0gQnVmZmVyLmZyb20oYWZ0ZXJGaW5kLmZpbGUuX2RhdGEsICdiYXNlNjQnKTtcbiAgICAgIH1cblxuICAgICAgcmVzLnN0YXR1cygyMDApO1xuICAgICAgcmVzLnNldCgnQ29udGVudC1UeXBlJywgY29udGVudFR5cGUpO1xuICAgICAgcmVzLnNldCgnQ29udGVudC1MZW5ndGgnLCBkYXRhLmxlbmd0aCk7XG4gICAgICBpZiAoYWZ0ZXJGaW5kLmZvcmNlRG93bmxvYWQpIHtcbiAgICAgICAgcmVzLnNldCgnQ29udGVudC1EaXNwb3NpdGlvbicsIGBhdHRhY2htZW50O2ZpbGVuYW1lPSR7YWZ0ZXJGaW5kLmZpbGUuX25hbWV9YCk7XG4gICAgICB9XG4gICAgICByZXMuZW5kKGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVyciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3QgZmluZCBmaWxlOiAke2ZpbGVuYW1lfS5gLFxuICAgICAgfSk7XG4gICAgICByZXMuc3RhdHVzKDQwMyk7XG4gICAgICByZXMuanNvbih7IGNvZGU6IGVyci5jb2RlLCBlcnJvcjogZXJyLm1lc3NhZ2UgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY3JlYXRlSGFuZGxlcihyZXEsIHJlcywgbmV4dCkge1xuICAgIGlmIChyZXEuYXV0aC5pc1JlYWRPbmx5KSB7XG4gICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsIFwicmVhZC1vbmx5IG1hc3RlcktleSBpc24ndCBhbGxvd2VkIHRvIGNyZWF0ZSBhIGZpbGUuXCIsIHJlcS5jb25maWcpO1xuICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgcmVzLmVuZChge1wiZXJyb3JcIjpcIiR7ZXJyb3IubWVzc2FnZX1cIn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZztcbiAgICBjb25zdCB1c2VyID0gcmVxLmF1dGgudXNlcjtcbiAgICBjb25zdCBpc01hc3RlciA9IHJlcS5hdXRoLmlzTWFzdGVyO1xuICAgIGNvbnN0IGlzTGlua2VkID0gdXNlciAmJiBQYXJzZS5Bbm9ueW1vdXNVdGlscy5pc0xpbmtlZCh1c2VyKTtcbiAgICBpZiAoIWlzTWFzdGVyICYmICFjb25maWcuZmlsZVVwbG9hZC5lbmFibGVGb3JBbm9ueW1vdXNVc2VyICYmIGlzTGlua2VkKSB7XG4gICAgICBuZXh0KFxuICAgICAgICBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLCAnRmlsZSB1cGxvYWQgYnkgYW5vbnltb3VzIHVzZXIgaXMgZGlzYWJsZWQuJylcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghaXNNYXN0ZXIgJiYgIWNvbmZpZy5maWxlVXBsb2FkLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyICYmICFpc0xpbmtlZCAmJiB1c2VyKSB7XG4gICAgICBuZXh0KFxuICAgICAgICBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgICdGaWxlIHVwbG9hZCBieSBhdXRoZW50aWNhdGVkIHVzZXIgaXMgZGlzYWJsZWQuJ1xuICAgICAgICApXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWlzTWFzdGVyICYmICFjb25maWcuZmlsZVVwbG9hZC5lbmFibGVGb3JQdWJsaWMgJiYgIXVzZXIpIHtcbiAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUiwgJ0ZpbGUgdXBsb2FkIGJ5IHB1YmxpYyBpcyBkaXNhYmxlZC4nKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZpbGVzQ29udHJvbGxlciA9IGNvbmZpZy5maWxlc0NvbnRyb2xsZXI7XG4gICAgY29uc3QgeyBmaWxlbmFtZSB9ID0gcmVxLnBhcmFtcztcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlcS5nZXQoJ0NvbnRlbnQtdHlwZScpO1xuXG4gICAgaWYgKCFyZXEuYm9keSB8fCAhcmVxLmJvZHkubGVuZ3RoKSB7XG4gICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsICdJbnZhbGlkIGZpbGUgdXBsb2FkLicpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlcnJvciA9IGZpbGVzQ29udHJvbGxlci52YWxpZGF0ZUZpbGVuYW1lKGZpbGVuYW1lKTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVFeHRlbnNpb25zID0gY29uZmlnLmZpbGVVcGxvYWQ/LmZpbGVFeHRlbnNpb25zO1xuICAgIGlmICghaXNNYXN0ZXIgJiYgZmlsZUV4dGVuc2lvbnMpIHtcbiAgICAgIGNvbnN0IG1pbWUgPSAoYXdhaXQgaW1wb3J0KCdtaW1lJykpLmRlZmF1bHQ7XG4gICAgICBjb25zdCBpc1ZhbGlkRXh0ZW5zaW9uID0gZXh0ZW5zaW9uID0+IHtcbiAgICAgICAgcmV0dXJuIGZpbGVFeHRlbnNpb25zLnNvbWUoZXh0ID0+IHtcbiAgICAgICAgICBpZiAoZXh0ID09PSAnKicpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoZXh0KTtcbiAgICAgICAgICBpZiAocmVnZXgudGVzdChleHRlbnNpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlamVjdEV4dGVuc2lvbiA9IGV4dCA9PiB7XG4gICAgICAgIG5leHQoXG4gICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgICAgYEZpbGUgdXBsb2FkIG9mIGV4dGVuc2lvbiAke2V4dH0gaXMgZGlzYWJsZWQuYFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIFBhcnNlIHRoZSBmaWxlbmFtZSBleHRlbnNpb24gdG9rZW4sIHN0cmlwcGluZyBNSU1FIHBhcmFtZXRlcnMgYW5kIHdoaXRlc3BhY2UuXG4gICAgICBsZXQgZXh0ZW5zaW9uID0gVXRpbHMuZ2V0RmlsZUV4dGVuc2lvbihmaWxlbmFtZSk7XG4gICAgICBleHRlbnNpb24gPSBleHRlbnNpb24/LnNwbGl0KCc7JylbMF0/LnJlcGxhY2UoL1xccysvZywgJycpO1xuXG4gICAgICAvLyBEZXJpdmUgdGhlIENvbnRlbnQtVHlwZSBzdWJ0eXBlIGFzIGEgZmFsbGJhY2sgaWRlbnRpZmllciwgZS5nLlxuICAgICAgLy8gXCJpbWFnZS9zdmcreG1sXCIgLT4gXCJzdmcreG1sXCIsIFwiaW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04XCIgLT4gXCJzdmcreG1sXCIuXG4gICAgICBsZXQgY29udGVudFR5cGVFeHRlbnNpb247XG4gICAgICBpZiAoY29udGVudFR5cGUgJiYgY29udGVudFR5cGUuaW5jbHVkZXMoJy8nKSkge1xuICAgICAgICBjb250ZW50VHlwZUV4dGVuc2lvbiA9IGNvbnRlbnRUeXBlLnNwbGl0KCcvJylbMV0/LnNwbGl0KCc7JylbMF0/LnJlcGxhY2UoL1xccysvZywgJycpO1xuICAgICAgfSBlbHNlIGlmIChjb250ZW50VHlwZSkge1xuICAgICAgICAvLyBNYWxmb3JtZWQgQ29udGVudC1UeXBlIHdpdGhvdXQgYSBzbGFzaDogdXNlIHRoZSByYXcgdmFsdWUgc28gdGhlXG4gICAgICAgIC8vIGV4aXN0aW5nIHJlamVjdGlvbiBwYXRoIHN0aWxsIGZpcmVzLlxuICAgICAgICBjb250ZW50VHlwZUV4dGVuc2lvbiA9IGNvbnRlbnRUeXBlLnNwbGl0KCc7JylbMF0/LnJlcGxhY2UoL1xccysvZywgJycpO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGUgYmxvY2tsaXN0IG11c3QgYmUgZXZhbHVhdGVkIGFnYWluc3QgdGhlIHR5cGUgdGhlIGZpbGUgaXMgYWN0dWFsbHlcbiAgICAgIC8vIHNlcnZlZCBhcy4gYEZpbGVzQ29udHJvbGxlci5jcmVhdGVGaWxlYCBkZXJpdmVzIHRoZSBzdG9yZWQgQ29udGVudC1UeXBlXG4gICAgICAvLyBmcm9tIHRoZSBmaWxlbmFtZSBleHRlbnNpb24gb25seSB3aGVuIGBtaW1lYCByZWNvZ25pemVzIGl0OyBvdGhlcndpc2UgaXRcbiAgICAgIC8vIHByZXNlcnZlcyB0aGUgY2xpZW50LXN1cHBsaWVkIENvbnRlbnQtVHlwZS4gU28gdGhlIENvbnRlbnQtVHlwZSBzdWJ0eXBlXG4gICAgICAvLyBtdXN0IGFsc28gYmUgdmFsaWRhdGVkIHdoZW5ldmVyIHRoZSBmaWxlbmFtZSBoYXMgbm8gdXNhYmxlIGV4dGVuc2lvbiBPUlxuICAgICAgLy8gYW4gZXh0ZW5zaW9uIHRoYXQgYG1pbWVgIGRvZXMgbm90IHJlY29nbml6ZSAoZS5nLiBcImZpbGUuc3ZnflwiKSwgd2hpY2hcbiAgICAgIC8vIHdvdWxkIG90aGVyd2lzZSBzbGlwIHBhc3QgdGhlIGV4YWN0LW1hdGNoIGJsb2NrbGlzdC5cbiAgICAgIGNvbnN0IGlzRXh0ZW5zaW9uUmVjb2duaXplZCA9IGV4dGVuc2lvbiAmJiBtaW1lLmdldFR5cGUoZmlsZW5hbWUpO1xuICAgICAgaWYgKGV4dGVuc2lvbiAmJiAhaXNWYWxpZEV4dGVuc2lvbihleHRlbnNpb24pKSB7XG4gICAgICAgIHJlamVjdEV4dGVuc2lvbihleHRlbnNpb24pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIWlzRXh0ZW5zaW9uUmVjb2duaXplZCAmJiBjb250ZW50VHlwZUV4dGVuc2lvbiAmJiAhaXNWYWxpZEV4dGVuc2lvbihjb250ZW50VHlwZUV4dGVuc2lvbikpIHtcbiAgICAgICAgcmVqZWN0RXh0ZW5zaW9uKGNvbnRlbnRUeXBlRXh0ZW5zaW9uKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGJhc2U2NCA9IHJlcS5ib2R5LnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0IH0sIGNvbnRlbnRUeXBlKTtcbiAgICBjb25zdCB7IG1ldGFkYXRhID0ge30sIHRhZ3MgPSB7fSB9ID0gcmVxLmZpbGVEYXRhIHx8IHt9O1xuICAgIHRyeSB7XG4gICAgICAvLyBTY2FuIHJlcXVlc3QgZGF0YSBmb3IgZGVuaWVkIGtleXdvcmRzXG4gICAgICBVdGlscy5jaGVja1Byb2hpYml0ZWRLZXl3b3Jkcyhjb25maWcsIG1ldGFkYXRhKTtcbiAgICAgIFV0aWxzLmNoZWNrUHJvaGliaXRlZEtleXdvcmRzKGNvbmZpZywgdGFncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfS0VZX05BTUUsIGVycm9yKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZpbGUuc2V0VGFncyh0YWdzKTtcbiAgICBmaWxlLnNldE1ldGFkYXRhKG1ldGFkYXRhKTtcbiAgICBjb25zdCBmaWxlU2l6ZSA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHJlcS5ib2R5KTtcbiAgICBjb25zdCBmaWxlT2JqZWN0ID0geyBmaWxlLCBmaWxlU2l6ZSB9O1xuICAgIHRyeSB7XG4gICAgICAvLyBydW4gYmVmb3JlU2F2ZUZpbGUgdHJpZ2dlclxuICAgICAgY29uc3QgdHJpZ2dlclJlc3VsdCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZVNhdmUsXG4gICAgICAgIGZpbGVPYmplY3QsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICBsZXQgc2F2ZVJlc3VsdDtcbiAgICAgIC8vIGlmIGEgbmV3IFBhcnNlRmlsZSBpcyByZXR1cm5lZCBjaGVjayBpZiBpdCdzIGFuIGFscmVhZHkgc2F2ZWQgZmlsZVxuICAgICAgaWYgKHRyaWdnZXJSZXN1bHQgaW5zdGFuY2VvZiBQYXJzZS5GaWxlKSB7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZSA9IHRyaWdnZXJSZXN1bHQ7XG4gICAgICAgIGlmICh0cmlnZ2VyUmVzdWx0LnVybCgpKSB7XG4gICAgICAgICAgLy8gc2V0IGZpbGVTaXplIHRvIG51bGwgYmVjYXVzZSB3ZSB3b250IGtub3cgaG93IGJpZyBpdCBpcyBoZXJlXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlU2l6ZSA9IG51bGw7XG4gICAgICAgICAgc2F2ZVJlc3VsdCA9IHtcbiAgICAgICAgICAgIHVybDogdHJpZ2dlclJlc3VsdC51cmwoKSxcbiAgICAgICAgICAgIG5hbWU6IHRyaWdnZXJSZXN1bHQuX25hbWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIGZpbGUgcmV0dXJuZWQgYnkgdGhlIHRyaWdnZXIgaGFzIGFscmVhZHkgYmVlbiBzYXZlZCBza2lwIHNhdmluZyBhbnl0aGluZ1xuICAgICAgaWYgKCFzYXZlUmVzdWx0KSB7XG4gICAgICAgIC8vIHVwZGF0ZSBmaWxlU2l6ZVxuICAgICAgICBjb25zdCBidWZmZXJEYXRhID0gQnVmZmVyLmZyb20oZmlsZU9iamVjdC5maWxlLl9kYXRhLCAnYmFzZTY0Jyk7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZVNpemUgPSBCdWZmZXIuYnl0ZUxlbmd0aChidWZmZXJEYXRhKTtcbiAgICAgICAgLy8gcHJlcGFyZSBmaWxlIG9wdGlvbnNcbiAgICAgICAgY29uc3QgZmlsZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWV0YWRhdGE6IGZpbGVPYmplY3QuZmlsZS5fbWV0YWRhdGEsXG4gICAgICAgIH07XG4gICAgICAgIC8vIHNvbWUgczMtY29tcGF0aWJsZSBwcm92aWRlcnMgKERpZ2l0YWxPY2VhbiwgTGlub2RlKSBkbyBub3QgYWNjZXB0IHRhZ3NcbiAgICAgICAgLy8gc28gd2UgZG8gbm90IGluY2x1ZGUgdGhlIHRhZ3Mgb3B0aW9uIGlmIGl0IGlzIGVtcHR5LlxuICAgICAgICBjb25zdCBmaWxlVGFncyA9XG4gICAgICAgICAgT2JqZWN0LmtleXMoZmlsZU9iamVjdC5maWxlLl90YWdzKS5sZW5ndGggPiAwID8geyB0YWdzOiBmaWxlT2JqZWN0LmZpbGUuX3RhZ3MgfSA6IHt9O1xuICAgICAgICBPYmplY3QuYXNzaWduKGZpbGVPcHRpb25zLCBmaWxlVGFncyk7XG4gICAgICAgIC8vIHNhdmUgZmlsZVxuICAgICAgICBjb25zdCBjcmVhdGVGaWxlUmVzdWx0ID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmNyZWF0ZUZpbGUoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSxcbiAgICAgICAgICBidWZmZXJEYXRhLFxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZS5fc291cmNlLnR5cGUsXG4gICAgICAgICAgZmlsZU9wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgICAgLy8gdXBkYXRlIGZpbGUgd2l0aCBuZXcgZGF0YVxuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX25hbWUgPSBjcmVhdGVGaWxlUmVzdWx0Lm5hbWU7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fdXJsID0gY3JlYXRlRmlsZVJlc3VsdC51cmw7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fcmVxdWVzdFRhc2sgPSBudWxsO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3ByZXZpb3VzU2F2ZSA9IFByb21pc2UucmVzb2x2ZShmaWxlT2JqZWN0LmZpbGUpO1xuICAgICAgICBzYXZlUmVzdWx0ID0ge1xuICAgICAgICAgIHVybDogY3JlYXRlRmlsZVJlc3VsdC51cmwsXG4gICAgICAgICAgbmFtZTogY3JlYXRlRmlsZVJlc3VsdC5uYW1lLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgLy8gcnVuIGFmdGVyU2F2ZUZpbGUgdHJpZ2dlclxuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcih0cmlnZ2Vycy5UeXBlcy5hZnRlclNhdmUsIGZpbGVPYmplY3QsIGNvbmZpZywgcmVxLmF1dGgpO1xuICAgICAgcmVzLnN0YXR1cygyMDEpO1xuICAgICAgcmVzLnNldCgnTG9jYXRpb24nLCBzYXZlUmVzdWx0LnVybCk7XG4gICAgICByZXMuanNvbihzYXZlUmVzdWx0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGNyZWF0aW5nIGEgZmlsZTogJywgZSk7XG4gICAgICBjb25zdCBlcnJvciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBzdG9yZSBmaWxlOiAke2ZpbGVPYmplY3QuZmlsZS5fbmFtZX0uYCxcbiAgICAgIH0pO1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlSGFuZGxlcihyZXEsIHJlcywgbmV4dCkge1xuICAgIGlmIChyZXEuYXV0aC5pc1JlYWRPbmx5KSB7XG4gICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsIFwicmVhZC1vbmx5IG1hc3RlcktleSBpc24ndCBhbGxvd2VkIHRvIGRlbGV0ZSBhIGZpbGUuXCIsIHJlcS5jb25maWcpO1xuICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgcmVzLmVuZChge1wiZXJyb3JcIjpcIiR7ZXJyb3IubWVzc2FnZX1cIn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZmlsZXNDb250cm9sbGVyIH0gPSByZXEuY29uZmlnO1xuICAgICAgY29uc3QgeyBmaWxlbmFtZSB9ID0gcmVxLnBhcmFtcztcbiAgICAgIC8vIHJ1biBiZWZvcmVEZWxldGVGaWxlIHRyaWdnZXJcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSk7XG4gICAgICBmaWxlLl91cmwgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuYWRhcHRlci5nZXRGaWxlTG9jYXRpb24ocmVxLmNvbmZpZywgZmlsZW5hbWUpO1xuICAgICAgY29uc3QgZmlsZU9iamVjdCA9IHsgZmlsZSwgZmlsZVNpemU6IG51bGwgfTtcbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZURlbGV0ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgcmVxLmNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICAvLyBkZWxldGUgZmlsZVxuICAgICAgYXdhaXQgZmlsZXNDb250cm9sbGVyLmRlbGV0ZUZpbGUocmVxLmNvbmZpZywgZmlsZW5hbWUpO1xuICAgICAgLy8gcnVuIGFmdGVyRGVsZXRlRmlsZSB0cmlnZ2VyXG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5hZnRlckRlbGV0ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgcmVxLmNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICAvLyBUT0RPOiByZXR1cm4gdXNlZnVsIEpTT04gaGVyZT9cbiAgICAgIHJlcy5lbmQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGRlbGV0aW5nIGEgZmlsZTogJywgZSk7XG4gICAgICBjb25zdCBlcnJvciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLkZJTEVfREVMRVRFX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IGRlbGV0ZSBmaWxlLicsXG4gICAgICB9KTtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG1ldGFkYXRhSGFuZGxlcihyZXEsIHJlcykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KHJlcS5wYXJhbXMuYXBwSWQpO1xuICAgICAgaWYgKCFjb25maWcpIHtcbiAgICAgICAgcmVzLnN0YXR1cygyMDApO1xuICAgICAgICByZXMuanNvbih7fSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgZmlsZXNDb250cm9sbGVyIH0gPSBjb25maWc7XG4gICAgICBsZXQgeyBmaWxlbmFtZSB9ID0gcmVxLnBhcmFtcztcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQ6ICcnIH0pO1xuICAgICAgY29uc3QgZmlsZUF1dGggPSBhd2FpdCBGaWxlc1JvdXRlci5fcmVzb2x2ZUF1dGgocmVxLCBjb25maWcpO1xuICAgICAgY29uc3QgdHJpZ2dlclJlc3VsdCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZUZpbmQsXG4gICAgICAgIHsgZmlsZSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGZpbGVBdXRoXG4gICAgICApO1xuICAgICAgaWYgKHRyaWdnZXJSZXN1bHQ/LmZpbGU/Ll9uYW1lKSB7XG4gICAgICAgIGZpbGVuYW1lID0gdHJpZ2dlclJlc3VsdC5maWxlLl9uYW1lO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5nZXRNZXRhZGF0YShmaWxlbmFtZSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICAgIHJlcy5qc29uKHt9KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRmluZCxcbiAgICAgICAgeyBmaWxlIH0sXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZmlsZUF1dGhcbiAgICAgICk7XG4gICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICByZXMuanNvbihkYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnIgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5TQ1JJUFRfRkFJTEVELFxuICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IGdldCBmaWxlIG1ldGFkYXRhLicsXG4gICAgICB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDAzKTtcbiAgICAgIHJlcy5qc29uKHsgY29kZTogZXJyLmNvZGUsIGVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNGaWxlU3RyZWFtYWJsZShyZXEsIGZpbGVzQ29udHJvbGxlcikge1xuICBjb25zdCByYW5nZSA9IChyZXEuZ2V0KCdSYW5nZScpIHx8ICcvLS8nKS5zcGxpdCgnLScpO1xuICBjb25zdCBzdGFydCA9IE51bWJlcihyYW5nZVswXSk7XG4gIGNvbnN0IGVuZCA9IE51bWJlcihyYW5nZVsxXSk7XG4gIHJldHVybiAoXG4gICAgKCFpc05hTihzdGFydCkgfHwgIWlzTmFOKGVuZCkpICYmIHR5cGVvZiBmaWxlc0NvbnRyb2xsZXIuYWRhcHRlci5oYW5kbGVGaWxlU3RyZWFtID09PSAnZnVuY3Rpb24nXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUMsdUJBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLEtBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLE9BQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUlBLElBQUFNLE1BQUEsR0FBQU4sT0FBQTtBQUFvRCxTQUFBRSx3QkFBQUssQ0FBQSxFQUFBQyxDQUFBLDZCQUFBQyxP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
|