parse-server 9.10.0-alpha.1 → 9.10.0-alpha.3

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.
@@ -388,33 +388,53 @@ class FilesRouter {
388
388
  // Parse the filename extension token, stripping MIME parameters and whitespace.
389
389
  let extension = Utils.getFileExtension(filename);
390
390
  extension = extension?.split(';')[0]?.replace(/\s+/g, '');
391
-
392
- // Derive the Content-Type subtype as a fallback identifier, e.g.
393
- // "image/svg+xml" -> "svg+xml", "image/svg+xml;charset=utf-8" -> "svg+xml".
394
- let contentTypeExtension;
395
- if (contentType && contentType.includes('/')) {
396
- contentTypeExtension = contentType.split('/')[1]?.split(';')[0]?.replace(/\s+/g, '');
397
- } else if (contentType) {
398
- // Malformed Content-Type without a slash: use the raw value so the
399
- // existing rejection path still fires.
400
- contentTypeExtension = contentType.split(';')[0]?.replace(/\s+/g, '');
401
- }
402
-
403
- // The blocklist must be evaluated against the type the file is actually
404
- // served as. `FilesController.createFile` derives the stored Content-Type
405
- // from the filename extension only when `mime` recognizes it; otherwise it
406
- // preserves the client-supplied Content-Type. So the Content-Type subtype
407
- // must also be validated whenever the filename has no usable extension OR
408
- // an extension that `mime` does not recognize (e.g. "file.svg~"), which
409
- // would otherwise slip past the exact-match blocklist.
410
391
  const isExtensionRecognized = extension && mime.getType(filename);
411
392
  if (extension && !isValidExtension(extension)) {
412
393
  rejectExtension(extension);
413
394
  return;
414
395
  }
415
- if (!isExtensionRecognized && contentTypeExtension && !isValidExtension(contentTypeExtension)) {
416
- rejectExtension(contentTypeExtension);
417
- return;
396
+
397
+ // When the filename extension is not recognized by `mime`,
398
+ // `FilesController.createFile` cannot derive a Content-Type from the
399
+ // filename and preserves the client-supplied Content-Type verbatim, so the
400
+ // type the file is actually served as must be validated. Skip this when
401
+ // extension filtering is disabled (`*`).
402
+ const allowsAllExtensions = fileExtensions.includes('*');
403
+ if (!isExtensionRecognized && contentType && !allowsAllExtensions) {
404
+ const slashIndex = contentType.indexOf('/');
405
+ const type = slashIndex > 0 ? contentType.slice(0, slashIndex).trim() : '';
406
+ const subtype = slashIndex > 0 ? contentType.slice(slashIndex + 1).split(';')[0].trim() : '';
407
+ // A valid media type is `type/subtype` where both are non-empty `token`s
408
+ // (RFC 9110 §5.6.2). Reject anything else.
409
+ const token = /^[!#$%&'*+\-.^_`|~A-Za-z0-9]+$/;
410
+ if (!token.test(type) || !token.test(subtype)) {
411
+ // A Content-Type that does not parse as `type/subtype` with valid,
412
+ // non-empty type AND subtype tokens is malformed: there is no valid MIME
413
+ // type without a subtype (RFC 9110 §8.3.1), and malformed tokens such as
414
+ // `image//svg+xml` or `text/plain,text/html` are equally unparseable.
415
+ // Browsers cannot parse such values and fall back to MIME-sniffing the
416
+ // file body, which can render HTML/script markers as active content on
417
+ // storage adapters that serve the stored Content-Type (e.g. `image`,
418
+ // `image/`). Surface the precise blocklist message when the bare token
419
+ // names a blocked extension (e.g. a no-slash `svg`), otherwise reject the
420
+ // unparseable Content-Type.
421
+ const bareToken = (slashIndex < 0 ? contentType.split(';')[0] : type).replace(/\s+/g, '');
422
+ if (bareToken && !isValidExtension(bareToken)) {
423
+ rejectExtension(bareToken);
424
+ return;
425
+ }
426
+ next(new _node.default.Error(_node.default.Error.FILE_SAVE_ERROR, 'Invalid Content-Type.'));
427
+ return;
428
+ }
429
+ // Validate the well-formed Content-Type subtype against the blocklist, e.g.
430
+ // "image/svg+xml" -> "svg+xml", "image/svg+xml;charset=utf-8" -> "svg+xml".
431
+ // Valid custom/vendor types (e.g. "application/vnd.api+json") parse and are
432
+ // allowed; only blocked subtypes are rejected.
433
+ const contentTypeExtension = subtype.replace(/\s+/g, '');
434
+ if (!isValidExtension(contentTypeExtension)) {
435
+ rejectExtension(contentTypeExtension);
436
+ return;
437
+ }
418
438
  }
419
439
  }
420
440
 
@@ -793,4 +813,4 @@ function isFileStreamable(req, filesController) {
793
813
  const end = Number(range[1]);
794
814
  return (!isNaN(start) || !isNaN(end)) && typeof filesController.adapter.handleFileStream === 'function';
795
815
  }
796
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhwcmVzcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiTWlkZGxld2FyZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9ub2RlIiwiX0NvbmZpZyIsIl9sb2dnZXIiLCJfc3RyZWFtIiwiX0Vycm9yIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidHJpZ2dlcnMiLCJVdGlscyIsImNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtIiwic291cmNlIiwibWF4Qnl0ZXMiLCJ0b3RhbEJ5dGVzIiwic3RhcnRlZCIsInNvdXJjZUVuZGVkIiwib25EYXRhIiwib25FbmQiLCJvbkVycm9yIiwib3V0cHV0IiwiUmVhZGFibGUiLCJyZWFkIiwiY2h1bmsiLCJsZW5ndGgiLCJkZXN0cm95IiwiUGFyc2UiLCJFcnJvciIsIkZJTEVfU0FWRV9FUlJPUiIsInB1c2giLCJwYXVzZSIsImVyciIsIm9uIiwicmVzdW1lIiwiY2FsbGJhY2siLCJyZW1vdmVMaXN0ZW5lciIsIlJFU0VSVkVEX0RJUkVDVE9SWV9TRUdNRU5UUyIsImV4cG9ydHMiLCJGaWxlc1JvdXRlciIsImV4cHJlc3NSb3V0ZXIiLCJtYXhVcGxvYWRTaXplIiwicm91dGVyIiwiZXhwcmVzcyIsIlJvdXRlciIsImluaXRJbmZvIiwicmVxIiwicmVzIiwibmV4dCIsImluZm8iLCJzZXNzaW9uVG9rZW4iLCJpbnN0YWxsYXRpb25JZCIsImF1dGgiLCJpc01hc3RlciIsImhhbmRsZVBhcnNlU2Vzc2lvbiIsIm1ldGFkYXRhSGFuZGxlciIsImdldEhhbmRsZXIiLCJwb3N0IiwiSU5WQUxJRF9GSUxFX05BTUUiLCJfZWFybHlIZWFkZXJzTWlkZGxld2FyZSIsIl9ib2R5UGFyc2luZ01pZGRsZXdhcmUiLCJoYW5kbGVQYXJzZUhlYWRlcnMiLCJjcmVhdGVIYW5kbGVyIiwiYmluZCIsImRlbGV0ZSIsImVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiLCJkZWxldGVIYW5kbGVyIiwiX2dldEZpbGVuYW1lRnJvbVBhcmFtcyIsInBhcnRzIiwicGFyYW1zIiwiZmlsZXBhdGgiLCJBcnJheSIsImlzQXJyYXkiLCJqb2luIiwidmFsaWRhdGVEaXJlY3RvcnkiLCJkaXJlY3RvcnkiLCJpbmNsdWRlcyIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsImZpcnN0U2VnbWVudCIsInNwbGl0IiwiZGlyUmVnZXgiLCJ0ZXN0IiwiX3ZhbGlkYXRlRmlsZURvd25sb2FkIiwiY29uZmlnIiwiaXNNYWludGVuYW5jZSIsInVzZXIiLCJpc0xpbmtlZCIsIkFub255bW91c1V0aWxzIiwiZmlsZURvd25sb2FkIiwiZW5hYmxlRm9yQW5vbnltb3VzVXNlciIsIk9QRVJBVElPTl9GT1JCSURERU4iLCJlbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciIsImVuYWJsZUZvclB1YmxpYyIsIkNvbmZpZyIsImFwcElkIiwiZXJyb3IiLCJjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IiLCJzdGF0dXMiLCJqc29uIiwibWVzc2FnZSIsImZpbGVuYW1lIiwiZmlsZXNDb250cm9sbGVyIiwibWltZSIsImNvbnRlbnRUeXBlIiwiZ2V0VHlwZSIsImZpbGUiLCJGaWxlIiwiYmFzZTY0IiwiZmlsZUF1dGgiLCJ0cmlnZ2VyUmVzdWx0IiwibWF5YmVSdW5GaWxlVHJpZ2dlciIsIlR5cGVzIiwiYmVmb3JlRmluZCIsIl9uYW1lIiwiZGVmYXVsdFJlc3BvbnNlSGVhZGVycyIsImlzRmlsZVN0cmVhbWFibGUiLCJhZnRlckZpbmQiLCJmb3JjZURvd25sb2FkIiwicmVzcG9uc2VIZWFkZXJzIiwia2V5IiwidmFsdWUiLCJlbnRyaWVzIiwiaGFuZGxlRmlsZVN0cmVhbSIsImNhdGNoIiwiZW5kIiwiZGF0YSIsImdldEZpbGVEYXRhIiwidG9TdHJpbmciLCJCdWZmZXIiLCJmcm9tIiwiX2RhdGEiLCJyZXNvbHZlRXJyb3IiLCJjb2RlIiwiU0NSSVBUX0ZBSUxFRCIsIm1heFVwbG9hZFNpemVPdmVycmlkZSIsInVuZGVmaW5lZCIsIm1hc3RlcktleSIsImxvYWRNYXN0ZXJLZXkiLCJtYXN0ZXJLZXlJcHMiLCJjaGVja0lwIiwiaXAiLCJtYXN0ZXJLZXlJcHNTdG9yZSIsInBhcnNlZEJ5dGVzIiwicGFyc2VTaXplVG9CeXRlcyIsIl9tYXhVcGxvYWRTaXplT3ZlcnJpZGUiLCJkZWZhdWx0TWF4Qnl0ZXMiLCJfbWF4VXBsb2FkU2l6ZUJ5dGVzIiwibGltaXQiLCJyYXciLCJ0eXBlIiwiaXNSZWFkT25seSIsImZpbGVVcGxvYWQiLCJ2YWxpZGF0ZUZpbGVuYW1lIiwiZmlsZUV4dGVuc2lvbnMiLCJpc1ZhbGlkRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uIiwic29tZSIsImV4dCIsInJlZ2V4IiwiUmVnRXhwIiwicmVqZWN0RXh0ZW5zaW9uIiwiZ2V0RmlsZUV4dGVuc2lvbiIsInJlcGxhY2UiLCJjb250ZW50VHlwZUV4dGVuc2lvbiIsImlzRXh0ZW5zaW9uUmVjb2duaXplZCIsImZpbGVEYXRhIiwicGFyc2VkIiwiSlNPTiIsInBhcnNlIiwibWV0YWRhdGEiLCJJTlZBTElEX0pTT04iLCJ0YWdzIiwiZGlyZWN0b3J5RXJyb3IiLCJpc0J1ZmZlciIsImJvZHkiLCJfaGFuZGxlQnVmZmVyZWRVcGxvYWQiLCJfaGFuZGxlU3RyZWFtVXBsb2FkIiwiY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMiLCJJTlZBTElEX0tFWV9OQU1FIiwic2V0VGFncyIsInNldE1ldGFkYXRhIiwic2V0RGlyZWN0b3J5IiwiZmlsZVNpemUiLCJieXRlTGVuZ3RoIiwiZmlsZU9iamVjdCIsImJlZm9yZVNhdmUiLCJzYXZlUmVzdWx0IiwidXJsIiwibmFtZSIsImJ1ZmZlckRhdGEiLCJfc291cmNlIiwiZm9ybWF0IiwiYnVmZmVyIiwiZmlsZU9wdGlvbnMiLCJfbWV0YWRhdGEiLCJmaWxlVGFncyIsImtleXMiLCJfdGFncyIsImFzc2lnbiIsIl9kaXJlY3RvcnkiLCJjcmVhdGVGaWxlUmVzdWx0IiwiY3JlYXRlRmlsZSIsIl91cmwiLCJfcmVxdWVzdFRhc2siLCJfcHJldmlvdXNTYXZlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhZnRlclNhdmUiLCJsb2dnZXIiLCJzdHJlYW0iLCJjb250ZW50TGVuZ3RoIiwicGFyc2VJbnQiLCJoYXNFeHRlbnNpb24iLCJzb3VyY2VUeXBlIiwiYWRhcHRlciIsImdldEZpbGVMb2NhdGlvbiIsImJlZm9yZURlbGV0ZSIsImRlbGV0ZUZpbGUiLCJhZnRlckRlbGV0ZSIsIkZJTEVfREVMRVRFX0VSUk9SIiwiZ2V0TWV0YWRhdGEiLCJyYW5nZSIsInN0YXJ0IiwiTnVtYmVyIiwiaXNOYU4iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUm91dGVycy9GaWxlc1JvdXRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXhwcmVzcyBmcm9tICdleHByZXNzJztcbmltcG9ydCAqIGFzIE1pZGRsZXdhcmVzIGZyb20gJy4uL21pZGRsZXdhcmVzJztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBDb25maWcgZnJvbSAnLi4vQ29uZmlnJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmNvbnN0IHRyaWdnZXJzID0gcmVxdWlyZSgnLi4vdHJpZ2dlcnMnKTtcbmNvbnN0IFV0aWxzID0gcmVxdWlyZSgnLi4vVXRpbHMnKTtcbmltcG9ydCB7IFJlYWRhYmxlIH0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvciB9IGZyb20gJy4uL0Vycm9yJztcblxuLyoqXG4gKiBXcmFwcyBhIHJlYWRhYmxlIHN0cmVhbSBpbiBhIFJlYWRhYmxlIHRoYXQgZW5mb3JjZXMgYSBieXRlIHNpemUgbGltaXQuXG4gKiBEYXRhIGZsb3cgaXMgbGF6eTogdGhlIHNvdXJjZSBpcyBub3QgcmVhZCB1bnRpbCBhIGNvbnN1bWVyIHN0YXJ0cyByZWFkaW5nXG4gKiBmcm9tIHRoZSByZXR1cm5lZCBzdHJlYW0gKHZpYSBwaXBlIG9yICdkYXRhJyBsaXN0ZW5lcikuIFRoaXMgZW5zdXJlcyB0aGVcbiAqIGNvbnN1bWVyJ3MgZXJyb3IgbGlzdGVuZXIgaXMgYXR0YWNoZWQgYmVmb3JlIGFueSBkYXRhIChvciBlcnJvcikgaXMgZW1pdHRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtKHNvdXJjZSwgbWF4Qnl0ZXMpIHtcbiAgbGV0IHRvdGFsQnl0ZXMgPSAwO1xuICBsZXQgc3RhcnRlZCA9IGZhbHNlO1xuICBsZXQgc291cmNlRW5kZWQgPSBmYWxzZTtcbiAgbGV0IG9uRGF0YSwgb25FbmQsIG9uRXJyb3I7XG5cbiAgY29uc3Qgb3V0cHV0ID0gbmV3IFJlYWRhYmxlKHtcbiAgICByZWFkKCkge1xuICAgICAgaWYgKCFzdGFydGVkKSB7XG4gICAgICAgIHN0YXJ0ZWQgPSB0cnVlO1xuXG4gICAgICAgIG9uRGF0YSA9IChjaHVuaykgPT4ge1xuICAgICAgICAgIHRvdGFsQnl0ZXMgKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICAgIGlmICh0b3RhbEJ5dGVzID4gbWF4Qnl0ZXMpIHtcbiAgICAgICAgICAgIG91dHB1dC5kZXN0cm95KFxuICAgICAgICAgICAgICBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgICAgICAgIGBGaWxlIHNpemUgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQ6ICR7bWF4Qnl0ZXN9IGJ5dGVzLmBcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFvdXRwdXQucHVzaChjaHVuaykpIHtcbiAgICAgICAgICAgIHNvdXJjZS5wYXVzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBvbkVuZCA9ICgpID0+IHtcbiAgICAgICAgICBzb3VyY2VFbmRlZCA9IHRydWU7XG4gICAgICAgICAgb3V0cHV0LnB1c2gobnVsbCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgb25FcnJvciA9IChlcnIpID0+IG91dHB1dC5kZXN0cm95KGVycik7XG5cbiAgICAgICAgc291cmNlLm9uKCdkYXRhJywgb25EYXRhKTtcbiAgICAgICAgc291cmNlLm9uKCdlbmQnLCBvbkVuZCk7XG4gICAgICAgIHNvdXJjZS5vbignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVzdW1lIHNvdXJjZSBpbiBjYXNlIGl0IHdhcyBwYXVzZWQgZHVlIHRvIGJhY2twcmVzc3VyZVxuICAgICAgaWYgKCFzb3VyY2VFbmRlZCkge1xuICAgICAgICBzb3VyY2UucmVzdW1lKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95KGVyciwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChvbkRhdGEpIHtcbiAgICAgICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25EYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmIChvbkVuZCkge1xuICAgICAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uRW5kKTtcbiAgICAgIH1cbiAgICAgIGlmIChvbkVycm9yKSB7XG4gICAgICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgIH1cbiAgICAgIC8vIFN1cHByZXNzIGVycm9ycyBlbWl0dGVkIGR1cmluZyBkcmFpbiAoZS5nLiBjbGllbnQgZGlzY29ubmVjdClcbiAgICAgIHNvdXJjZS5vbignZXJyb3InLCAoKSA9PiB7fSk7XG4gICAgICBpZiAoIXNvdXJjZUVuZGVkKSB7XG4gICAgICAgIHNvdXJjZS5yZXN1bWUoKTtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vLyBTZWdtZW50cyB0aGF0IGNvbmZsaWN0IHdpdGggc3ViLXJvdXRlcyB1bmRlciBHRVQgL2ZpbGVzLzphcHBJZC8qLiBJZiBhIGZpbGVcbi8vIGRpcmVjdG9yeSBzdGFydHMgd2l0aCBvbmUgb2YgdGhlc2UsIGl0cyBVUkwgd291bGQgbWF0Y2ggdGhlIHdyb25nIHJvdXRlXG4vLyBoYW5kbGVyLiBVcGRhdGUgdGhpcyBsaXN0IHdoZW4gYWRkaW5nIG5ldyBzdWItcm91dGVzIHRvIGV4cHJlc3NSb3V0ZXIoKS5cbmV4cG9ydCBjb25zdCBSRVNFUlZFRF9ESVJFQ1RPUllfU0VHTUVOVFMgPSBbJ21ldGFkYXRhJ107XG5cbmV4cG9ydCBjbGFzcyBGaWxlc1JvdXRlciB7XG4gIGV4cHJlc3NSb3V0ZXIoeyBtYXhVcGxvYWRTaXplID0gJzIwTWInIH0gPSB7fSkge1xuICAgIHZhciByb3V0ZXIgPSBleHByZXNzLlJvdXRlcigpO1xuICAgIC8vIExpZ2h0d2VpZ2h0IGluZm8gaW5pdGlhbGl6ZXIgc28gaGFuZGxlUGFyc2VTZXNzaW9uIGNhbiByZXNvbHZlIHNlc3Npb24gdG9rZW5zLlxuICAgIC8vIFVubGlrZSBQT1NUL0RFTEVURSByb3V0ZXMsIEdFVCBmaWxlIHJvdXRlcyBza2lwIGhhbmRsZVBhcnNlSGVhZGVycyAod2hpY2hcbiAgICAvLyBub3JtYWxseSBzZXRzIHJlcS5pbmZvKSBiZWNhdXNlIHRob3NlIHJlcXVlc3RzIG1heSBub3QgY2FycnkgUGFyc2UgaGVhZGVycy5cbiAgICBjb25zdCBpbml0SW5mbyA9IChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgICAgaWYgKCFyZXEuaW5mbykge1xuICAgICAgICBjb25zdCBzZXNzaW9uVG9rZW4gPSByZXEuZ2V0KCdYLVBhcnNlLVNlc3Npb24tVG9rZW4nKTtcbiAgICAgICAgcmVxLmluZm8gPSB7XG4gICAgICAgICAgc2Vzc2lvblRva2VuLFxuICAgICAgICAgIGluc3RhbGxhdGlvbklkOiByZXEuZ2V0KCdYLVBhcnNlLUluc3RhbGxhdGlvbi1JZCcpLFxuICAgICAgICB9O1xuICAgICAgICAvLyBJZiBubyBzZXNzaW9uIHRva2VuIGFuZCBubyBhdXRoIHlldCAocHVibGljIGFjY2VzcyksIHNldCBhIG1pbmltYWxcbiAgICAgICAgLy8gYXV0aCBvYmplY3Qgc28gaGFuZGxlUGFyc2VTZXNzaW9uIHNraXBzIHNlc3Npb24gcmVzb2x1dGlvbi5cbiAgICAgICAgaWYgKCFzZXNzaW9uVG9rZW4gJiYgIXJlcS5hdXRoKSB7XG4gICAgICAgICAgcmVxLmF1dGggPSB7IGlzTWFzdGVyOiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0KCk7XG4gICAgfTtcbiAgICAvLyBNZXRhZGF0YSByb3V0ZSBtdXN0IGNvbWUgYmVmb3JlIHRoZSBjYXRjaC1hbGwgR0VUIHJvdXRlXG4gICAgcm91dGVyLmdldCgnL2ZpbGVzLzphcHBJZC9tZXRhZGF0YS8qZmlsZXBhdGgnLCBpbml0SW5mbywgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VTZXNzaW9uLCB0aGlzLm1ldGFkYXRhSGFuZGxlcik7XG4gICAgcm91dGVyLmdldCgnL2ZpbGVzLzphcHBJZC8qZmlsZXBhdGgnLCBpbml0SW5mbywgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VTZXNzaW9uLCB0aGlzLmdldEhhbmRsZXIpO1xuXG4gICAgcm91dGVyLnBvc3QoJy9maWxlcycsIGZ1bmN0aW9uIChyZXEsIHJlcywgbmV4dCkge1xuICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsICdGaWxlbmFtZSBub3QgcHJvdmlkZWQuJykpO1xuICAgIH0pO1xuXG4gICAgcm91dGVyLnBvc3QoXG4gICAgICAnL2ZpbGVzLzpmaWxlbmFtZScsXG4gICAgICB0aGlzLl9lYXJseUhlYWRlcnNNaWRkbGV3YXJlKCksXG4gICAgICB0aGlzLl9ib2R5UGFyc2luZ01pZGRsZXdhcmUobWF4VXBsb2FkU2l6ZSksXG4gICAgICBNaWRkbGV3YXJlcy5oYW5kbGVQYXJzZUhlYWRlcnMsXG4gICAgICBNaWRkbGV3YXJlcy5oYW5kbGVQYXJzZVNlc3Npb24sXG4gICAgICB0aGlzLmNyZWF0ZUhhbmRsZXIuYmluZCh0aGlzKVxuICAgICk7XG5cbiAgICByb3V0ZXIuZGVsZXRlKFxuICAgICAgJy9maWxlcy8qZmlsZXBhdGgnLFxuICAgICAgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VIZWFkZXJzLFxuICAgICAgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VTZXNzaW9uLFxuICAgICAgTWlkZGxld2FyZXMuZW5mb3JjZU1hc3RlcktleUFjY2VzcyxcbiAgICAgIHRoaXMuZGVsZXRlSGFuZGxlclxuICAgICk7XG4gICAgcmV0dXJuIHJvdXRlcjtcbiAgfVxuXG4gIHN0YXRpYyBfZ2V0RmlsZW5hbWVGcm9tUGFyYW1zKHJlcSkge1xuICAgIGNvbnN0IHBhcnRzID0gcmVxLnBhcmFtcy5maWxlcGF0aDtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwYXJ0cykgPyBwYXJ0cy5qb2luKCcvJykgOiBwYXJ0cztcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZURpcmVjdG9yeShkaXJlY3RvcnkpIHtcbiAgICBpZiAodHlwZW9mIGRpcmVjdG9yeSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsICdEaXJlY3RvcnkgbXVzdCBiZSBhIHN0cmluZy4nKTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdG9yeS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsICdEaXJlY3RvcnkgbXVzdCBub3QgYmUgZW1wdHkuJyk7XG4gICAgfVxuICAgIGlmIChkaXJlY3RvcnkubGVuZ3RoID4gMjU2KSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRGlyZWN0b3J5IHBhdGggaXMgdG9vIGxvbmcuJyk7XG4gICAgfVxuICAgIGlmIChkaXJlY3RvcnkuaW5jbHVkZXMoJy4uJykpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsICdEaXJlY3RvcnkgbXVzdCBub3QgY29udGFpbiBcIi4uXCIuJyk7XG4gICAgfVxuICAgIGlmIChkaXJlY3Rvcnkuc3RhcnRzV2l0aCgnLycpIHx8IGRpcmVjdG9yeS5lbmRzV2l0aCgnLycpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSxcbiAgICAgICAgJ0RpcmVjdG9yeSBtdXN0IG5vdCBzdGFydCBvciBlbmQgd2l0aCBcIi9cIi4nXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0b3J5LmluY2x1ZGVzKCcvLycpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSxcbiAgICAgICAgJ0RpcmVjdG9yeSBtdXN0IG5vdCBjb250YWluIGNvbnNlY3V0aXZlIHNsYXNoZXMuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZmlyc3RTZWdtZW50ID0gZGlyZWN0b3J5LnNwbGl0KCcvJylbMF07XG4gICAgaWYgKFJFU0VSVkVEX0RJUkVDVE9SWV9TRUdNRU5UUy5pbmNsdWRlcyhmaXJzdFNlZ21lbnQpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSxcbiAgICAgICAgYERpcmVjdG9yeSBtdXN0IG5vdCBzdGFydCB3aXRoIHJlc2VydmVkIHNlZ21lbnQgXCIke2ZpcnN0U2VnbWVudH1cIi5gXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBkaXJSZWdleCA9IC9eW2EtekEtWjAtOV1bYS16QS1aMC05X1xcLS9dKiQvO1xuICAgIGlmICghZGlyUmVnZXgudGVzdChkaXJlY3RvcnkpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSxcbiAgICAgICAgJ0RpcmVjdG9yeSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgX3ZhbGlkYXRlRmlsZURvd25sb2FkKHJlcSwgY29uZmlnKSB7XG4gICAgY29uc3QgaXNNYXN0ZXIgPSByZXEuYXV0aD8uaXNNYXN0ZXI7XG4gICAgY29uc3QgaXNNYWludGVuYW5jZSA9IHJlcS5hdXRoPy5pc01haW50ZW5hbmNlO1xuICAgIGlmIChpc01hc3RlciB8fCBpc01haW50ZW5hbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHVzZXIgPSByZXEuYXV0aD8udXNlcjtcbiAgICBjb25zdCBpc0xpbmtlZCA9IHVzZXIgJiYgUGFyc2UuQW5vbnltb3VzVXRpbHMuaXNMaW5rZWQodXNlcik7XG4gICAgaWYgKCFjb25maWcuZmlsZURvd25sb2FkLmVuYWJsZUZvckFub255bW91c1VzZXIgJiYgaXNMaW5rZWQpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTixcbiAgICAgICAgJ0ZpbGUgZG93bmxvYWQgYnkgYW5vbnltb3VzIHVzZXIgaXMgZGlzYWJsZWQuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFjb25maWcuZmlsZURvd25sb2FkLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyICYmICFpc0xpbmtlZCAmJiB1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICAgICdGaWxlIGRvd25sb2FkIGJ5IGF1dGhlbnRpY2F0ZWQgdXNlciBpcyBkaXNhYmxlZC4nXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIWNvbmZpZy5maWxlRG93bmxvYWQuZW5hYmxlRm9yUHVibGljICYmICF1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICAgICdGaWxlIGRvd25sb2FkIGJ5IHB1YmxpYyBpcyBkaXNhYmxlZC4nXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldEhhbmRsZXIocmVxLCByZXMpIHtcbiAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KHJlcS5wYXJhbXMuYXBwSWQpO1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsICdJbnZhbGlkIGFwcGxpY2F0aW9uIElELicsIGNvbmZpZyk7XG4gICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICByZXMuanNvbih7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEZpbGVzUm91dGVyLl92YWxpZGF0ZUZpbGVEb3dubG9hZChyZXEsIGNvbmZpZyk7XG5cbiAgICBsZXQgZmlsZW5hbWUgPSBGaWxlc1JvdXRlci5fZ2V0RmlsZW5hbWVGcm9tUGFyYW1zKHJlcSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbGVzQ29udHJvbGxlciA9IGNvbmZpZy5maWxlc0NvbnRyb2xsZXI7XG4gICAgICBjb25zdCBtaW1lID0gKGF3YWl0IGltcG9ydCgnbWltZScpKS5kZWZhdWx0O1xuICAgICAgbGV0IGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGZpbGVuYW1lKTtcbiAgICAgIGxldCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0OiAnJyB9LCBjb250ZW50VHlwZSk7XG4gICAgICBjb25zdCBmaWxlQXV0aCA9IHJlcS5hdXRoO1xuICAgICAgY29uc3QgdHJpZ2dlclJlc3VsdCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZUZpbmQsXG4gICAgICAgIHsgZmlsZSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGZpbGVBdXRoXG4gICAgICApO1xuICAgICAgaWYgKHRyaWdnZXJSZXN1bHQ/LmZpbGU/Ll9uYW1lKSB7XG4gICAgICAgIGZpbGVuYW1lID0gdHJpZ2dlclJlc3VsdD8uZmlsZT8uX25hbWU7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGZpbGVuYW1lKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVmYXVsdFJlc3BvbnNlSGVhZGVycyA9IHsgJ1gtQ29udGVudC1UeXBlLU9wdGlvbnMnOiAnbm9zbmlmZicgfTtcblxuICAgICAgaWYgKGlzRmlsZVN0cmVhbWFibGUocmVxLCBmaWxlc0NvbnRyb2xsZXIpKSB7XG4gICAgICAgIGNvbnN0IGFmdGVyRmluZCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYWZ0ZXJGaW5kLFxuICAgICAgICAgIHsgZmlsZSwgZm9yY2VEb3dubG9hZDogZmFsc2UsIHJlc3BvbnNlSGVhZGVyczogeyAuLi5kZWZhdWx0UmVzcG9uc2VIZWFkZXJzIH0gfSxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgZmlsZUF1dGhcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGFmdGVyRmluZD8uZm9yY2VEb3dubG9hZCkge1xuICAgICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCBgYXR0YWNobWVudDtmaWxlbmFtZT0ke2FmdGVyRmluZC5maWxlPy5fbmFtZSB8fCBmaWxlbmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhZnRlckZpbmQ/LnJlc3BvbnNlSGVhZGVycyA/PyBkZWZhdWx0UmVzcG9uc2VIZWFkZXJzKSkge1xuICAgICAgICAgIHJlcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZmlsZXNDb250cm9sbGVyLmhhbmRsZUZpbGVTdHJlYW0oY29uZmlnLCBmaWxlbmFtZSwgcmVxLCByZXMsIGNvbnRlbnRUeXBlKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgcmVzLnN0YXR1cyg0MDQpO1xuICAgICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyk7XG4gICAgICAgICAgcmVzLmVuZCgnRmlsZSBub3QgZm91bmQuJyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBkYXRhID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmdldEZpbGVEYXRhKGNvbmZpZywgZmlsZW5hbWUpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MDQpO1xuICAgICAgICByZXMuc2V0KCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xuICAgICAgICByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZC4nKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQ6IGRhdGEudG9TdHJpbmcoJ2Jhc2U2NCcpIH0sIGNvbnRlbnRUeXBlKTtcbiAgICAgIGNvbnN0IGFmdGVyRmluZCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRmluZCxcbiAgICAgICAgeyBmaWxlLCBmb3JjZURvd25sb2FkOiBmYWxzZSwgcmVzcG9uc2VIZWFkZXJzOiB7IC4uLmRlZmF1bHRSZXNwb25zZUhlYWRlcnMgfSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGZpbGVBdXRoXG4gICAgICApO1xuXG4gICAgICBpZiAoYWZ0ZXJGaW5kPy5maWxlKSB7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGFmdGVyRmluZC5maWxlLl9uYW1lKTtcbiAgICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGFmdGVyRmluZC5maWxlLl9kYXRhLCAnYmFzZTY0Jyk7XG4gICAgICB9XG5cbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtVHlwZScsIGNvbnRlbnRUeXBlKTtcbiAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtTGVuZ3RoJywgZGF0YS5sZW5ndGgpO1xuICAgICAgaWYgKGFmdGVyRmluZC5mb3JjZURvd25sb2FkKSB7XG4gICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCBgYXR0YWNobWVudDtmaWxlbmFtZT0ke2FmdGVyRmluZC5maWxlLl9uYW1lfWApO1xuICAgICAgfVxuICAgICAgaWYgKGFmdGVyRmluZC5yZXNwb25zZUhlYWRlcnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYWZ0ZXJGaW5kLnJlc3BvbnNlSGVhZGVycykpIHtcbiAgICAgICAgICByZXMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXMuZW5kKGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVyciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3QgZmluZCBmaWxlOiAke2ZpbGVuYW1lfS5gLFxuICAgICAgfSk7XG4gICAgICByZXMuc3RhdHVzKDQwMyk7XG4gICAgICByZXMuanNvbih7IGNvZGU6IGVyci5jb2RlLCBlcnJvcjogZXJyLm1lc3NhZ2UgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1pZGRsZXdhcmUgdGhhdCBydW5zIGJlZm9yZSBib2R5IHBhcnNpbmcgdG8gaGFuZGxlIGhlYWRlcnMgdGhhdCBtdXN0IGJlXG4gICAqIHJlc29sdmVkIGJlZm9yZSB0aGUgcmVxdWVzdCBib2R5IGlzIGNvbnN1bWVkLiBDdXJyZW50bHkgc3VwcG9ydHM6XG4gICAqXG4gICAqIC0gYFgtUGFyc2UtRmlsZS1NYXgtVXBsb2FkLVNpemVgOiBPdmVycmlkZXMgdGhlIHNlcnZlci13aWRlIGBtYXhVcGxvYWRTaXplYFxuICAgKiAgIGZvciB0aGlzIHJlcXVlc3QuIFJlcXVpcmVzIHRoZSBtYXN0ZXIga2V5LiBUaGUgdmFsdWUgdXNlcyB0aGUgc2FtZSBmb3JtYXRcbiAgICogICBhcyB0aGUgc2VydmVyIG9wdGlvbiAoZS5nLiBgJzUwbWInYCwgYCcxZ2InYCkuIFNldHMgYHJlcS5fbWF4VXBsb2FkU2l6ZU92ZXJyaWRlYFxuICAgKiAgIChpbiBieXRlcykgZm9yIGBfYm9keVBhcnNpbmdNaWRkbGV3YXJlYCB0byB1c2UuXG4gICAqL1xuICBfZWFybHlIZWFkZXJzTWlkZGxld2FyZSgpIHtcbiAgICByZXR1cm4gYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgICBjb25zdCBtYXhVcGxvYWRTaXplT3ZlcnJpZGUgPSByZXEuZ2V0KCdYLVBhcnNlLUZpbGUtTWF4LVVwbG9hZC1TaXplJyk7XG4gICAgICBpZiAoIW1heFVwbG9hZFNpemVPdmVycmlkZSkge1xuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgYXBwSWQgPSByZXEuZ2V0KCdYLVBhcnNlLUFwcGxpY2F0aW9uLUlkJyk7XG4gICAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KGFwcElkKTtcbiAgICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgJ0ludmFsaWQgYXBwbGljYXRpb24gSUQuJywgdW5kZWZpbmVkKTtcbiAgICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgICByZXMuanNvbih7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBtYXN0ZXJLZXkgPSBhd2FpdCBjb25maWcubG9hZE1hc3RlcktleSgpO1xuICAgICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtTWFzdGVyLUtleScpICE9PSBtYXN0ZXJLZXkpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IoNDAzLCAndW5hdXRob3JpemVkOiBtYXN0ZXIga2V5IGlzIHJlcXVpcmVkJywgY29uZmlnKTtcbiAgICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgICByZXMuanNvbih7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLm1hc3RlcktleUlwcz8ubGVuZ3RoICYmICFNaWRkbGV3YXJlcy5jaGVja0lwKHJlcS5pcCwgY29uZmlnLm1hc3RlcktleUlwcywgY29uZmlnLm1hc3RlcktleUlwc1N0b3JlKSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsICd1bmF1dGhvcml6ZWQ6IG1hc3RlciBrZXkgaXMgcmVxdWlyZWQnLCBjb25maWcpO1xuICAgICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICAgIHJlcy5qc29uKHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBwYXJzZWRCeXRlcztcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZEJ5dGVzID0gVXRpbHMucGFyc2VTaXplVG9CeXRlcyhtYXhVcGxvYWRTaXplT3ZlcnJpZGUpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBuZXh0KFxuICAgICAgICAgIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgIFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgICAgIGBJbnZhbGlkIG1heFVwbG9hZFNpemUgb3ZlcnJpZGUgdmFsdWU6ICR7bWF4VXBsb2FkU2l6ZU92ZXJyaWRlfWBcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXEuX21heFVwbG9hZFNpemVPdmVycmlkZSA9IHBhcnNlZEJ5dGVzO1xuICAgICAgbmV4dCgpO1xuICAgIH07XG4gIH1cblxuICBfYm9keVBhcnNpbmdNaWRkbGV3YXJlKG1heFVwbG9hZFNpemUpIHtcbiAgICBjb25zdCBkZWZhdWx0TWF4Qnl0ZXMgPSBVdGlscy5wYXJzZVNpemVUb0J5dGVzKG1heFVwbG9hZFNpemUpO1xuICAgIHJldHVybiAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICAgIGlmIChyZXEuZ2V0KCdYLVBhcnNlLVVwbG9hZC1Nb2RlJykgPT09ICdzdHJlYW0nKSB7XG4gICAgICAgIHJlcS5fbWF4VXBsb2FkU2l6ZUJ5dGVzID0gcmVxLl9tYXhVcGxvYWRTaXplT3ZlcnJpZGUgPz8gZGVmYXVsdE1heEJ5dGVzO1xuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgbGltaXQgPSByZXEuX21heFVwbG9hZFNpemVPdmVycmlkZSA/PyBtYXhVcGxvYWRTaXplO1xuICAgICAgcmV0dXJuIGV4cHJlc3MucmF3KHsgdHlwZTogKCkgPT4gdHJ1ZSwgbGltaXQgfSkocmVxLCByZXMsIG5leHQpO1xuICAgIH07XG4gIH1cblxuICBhc3luYyBjcmVhdGVIYW5kbGVyKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgaWYgKHJlcS5hdXRoLmlzUmVhZE9ubHkpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgXCJyZWFkLW9ubHkgbWFzdGVyS2V5IGlzbid0IGFsbG93ZWQgdG8gY3JlYXRlIGEgZmlsZS5cIiwgcmVxLmNvbmZpZyk7XG4gICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICByZXMuZW5kKGB7XCJlcnJvclwiOlwiJHtlcnJvci5tZXNzYWdlfVwifWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb25maWcgPSByZXEuY29uZmlnO1xuICAgIGNvbnN0IGlzTWFzdGVyID0gcmVxLmF1dGguaXNNYXN0ZXI7XG4gICAgY29uc3QgaXNNYWludGVuYW5jZSA9IHJlcS5hdXRoLmlzTWFpbnRlbmFuY2U7XG4gICAgaWYgKCFpc01hc3RlciAmJiAhaXNNYWludGVuYW5jZSkge1xuICAgICAgY29uc3QgdXNlciA9IHJlcS5hdXRoLnVzZXI7XG4gICAgICBjb25zdCBpc0xpbmtlZCA9IHVzZXIgJiYgUGFyc2UuQW5vbnltb3VzVXRpbHMuaXNMaW5rZWQodXNlcik7XG4gICAgICBpZiAoIWNvbmZpZy5maWxlVXBsb2FkLmVuYWJsZUZvckFub255bW91c1VzZXIgJiYgaXNMaW5rZWQpIHtcbiAgICAgICAgbmV4dChcbiAgICAgICAgICBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLCAnRmlsZSB1cGxvYWQgYnkgYW5vbnltb3VzIHVzZXIgaXMgZGlzYWJsZWQuJylcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFjb25maWcuZmlsZVVwbG9hZC5lbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciAmJiAhaXNMaW5rZWQgJiYgdXNlcikge1xuICAgICAgICBuZXh0KFxuICAgICAgICAgIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgIFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgICAgICdGaWxlIHVwbG9hZCBieSBhdXRoZW50aWNhdGVkIHVzZXIgaXMgZGlzYWJsZWQuJ1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFjb25maWcuZmlsZVVwbG9hZC5lbmFibGVGb3JQdWJsaWMgJiYgIXVzZXIpIHtcbiAgICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLCAnRmlsZSB1cGxvYWQgYnkgcHVibGljIGlzIGRpc2FibGVkLicpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSByZXEuZ2V0KCdDb250ZW50LXR5cGUnKTtcblxuICAgIGNvbnN0IGVycm9yID0gZmlsZXNDb250cm9sbGVyLnZhbGlkYXRlRmlsZW5hbWUoZmlsZW5hbWUpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZUV4dGVuc2lvbnMgPSBjb25maWcuZmlsZVVwbG9hZD8uZmlsZUV4dGVuc2lvbnM7XG4gICAgaWYgKCFpc01hc3RlciAmJiBmaWxlRXh0ZW5zaW9ucykge1xuICAgICAgY29uc3QgbWltZSA9IChhd2FpdCBpbXBvcnQoJ21pbWUnKSkuZGVmYXVsdDtcbiAgICAgIGNvbnN0IGlzVmFsaWRFeHRlbnNpb24gPSBleHRlbnNpb24gPT4ge1xuICAgICAgICByZXR1cm4gZmlsZUV4dGVuc2lvbnMuc29tZShleHQgPT4ge1xuICAgICAgICAgIGlmIChleHQgPT09ICcqJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChleHQpO1xuICAgICAgICAgIGlmIChyZWdleC50ZXN0KGV4dGVuc2lvbikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVqZWN0RXh0ZW5zaW9uID0gZXh0ID0+IHtcbiAgICAgICAgbmV4dChcbiAgICAgICAgICBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgICAgICBgRmlsZSB1cGxvYWQgb2YgZXh0ZW5zaW9uICR7ZXh0fSBpcyBkaXNhYmxlZC5gXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfTtcblxuICAgICAgLy8gUGFyc2UgdGhlIGZpbGVuYW1lIGV4dGVuc2lvbiB0b2tlbiwgc3RyaXBwaW5nIE1JTUUgcGFyYW1ldGVycyBhbmQgd2hpdGVzcGFjZS5cbiAgICAgIGxldCBleHRlbnNpb24gPSBVdGlscy5nZXRGaWxlRXh0ZW5zaW9uKGZpbGVuYW1lKTtcbiAgICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbj8uc3BsaXQoJzsnKVswXT8ucmVwbGFjZSgvXFxzKy9nLCAnJyk7XG5cbiAgICAgIC8vIERlcml2ZSB0aGUgQ29udGVudC1UeXBlIHN1YnR5cGUgYXMgYSBmYWxsYmFjayBpZGVudGlmaWVyLCBlLmcuXG4gICAgICAvLyBcImltYWdlL3N2Zyt4bWxcIiAtPiBcInN2Zyt4bWxcIiwgXCJpbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLThcIiAtPiBcInN2Zyt4bWxcIi5cbiAgICAgIGxldCBjb250ZW50VHlwZUV4dGVuc2lvbjtcbiAgICAgIGlmIChjb250ZW50VHlwZSAmJiBjb250ZW50VHlwZS5pbmNsdWRlcygnLycpKSB7XG4gICAgICAgIGNvbnRlbnRUeXBlRXh0ZW5zaW9uID0gY29udGVudFR5cGUuc3BsaXQoJy8nKVsxXT8uc3BsaXQoJzsnKVswXT8ucmVwbGFjZSgvXFxzKy9nLCAnJyk7XG4gICAgICB9IGVsc2UgaWYgKGNvbnRlbnRUeXBlKSB7XG4gICAgICAgIC8vIE1hbGZvcm1lZCBDb250ZW50LVR5cGUgd2l0aG91dCBhIHNsYXNoOiB1c2UgdGhlIHJhdyB2YWx1ZSBzbyB0aGVcbiAgICAgICAgLy8gZXhpc3RpbmcgcmVqZWN0aW9uIHBhdGggc3RpbGwgZmlyZXMuXG4gICAgICAgIGNvbnRlbnRUeXBlRXh0ZW5zaW9uID0gY29udGVudFR5cGUuc3BsaXQoJzsnKVswXT8ucmVwbGFjZSgvXFxzKy9nLCAnJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBibG9ja2xpc3QgbXVzdCBiZSBldmFsdWF0ZWQgYWdhaW5zdCB0aGUgdHlwZSB0aGUgZmlsZSBpcyBhY3R1YWxseVxuICAgICAgLy8gc2VydmVkIGFzLiBgRmlsZXNDb250cm9sbGVyLmNyZWF0ZUZpbGVgIGRlcml2ZXMgdGhlIHN0b3JlZCBDb250ZW50LVR5cGVcbiAgICAgIC8vIGZyb20gdGhlIGZpbGVuYW1lIGV4dGVuc2lvbiBvbmx5IHdoZW4gYG1pbWVgIHJlY29nbml6ZXMgaXQ7IG90aGVyd2lzZSBpdFxuICAgICAgLy8gcHJlc2VydmVzIHRoZSBjbGllbnQtc3VwcGxpZWQgQ29udGVudC1UeXBlLiBTbyB0aGUgQ29udGVudC1UeXBlIHN1YnR5cGVcbiAgICAgIC8vIG11c3QgYWxzbyBiZSB2YWxpZGF0ZWQgd2hlbmV2ZXIgdGhlIGZpbGVuYW1lIGhhcyBubyB1c2FibGUgZXh0ZW5zaW9uIE9SXG4gICAgICAvLyBhbiBleHRlbnNpb24gdGhhdCBgbWltZWAgZG9lcyBub3QgcmVjb2duaXplIChlLmcuIFwiZmlsZS5zdmd+XCIpLCB3aGljaFxuICAgICAgLy8gd291bGQgb3RoZXJ3aXNlIHNsaXAgcGFzdCB0aGUgZXhhY3QtbWF0Y2ggYmxvY2tsaXN0LlxuICAgICAgY29uc3QgaXNFeHRlbnNpb25SZWNvZ25pemVkID0gZXh0ZW5zaW9uICYmIG1pbWUuZ2V0VHlwZShmaWxlbmFtZSk7XG4gICAgICBpZiAoZXh0ZW5zaW9uICYmICFpc1ZhbGlkRXh0ZW5zaW9uKGV4dGVuc2lvbikpIHtcbiAgICAgICAgcmVqZWN0RXh0ZW5zaW9uKGV4dGVuc2lvbik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghaXNFeHRlbnNpb25SZWNvZ25pemVkICYmIGNvbnRlbnRUeXBlRXh0ZW5zaW9uICYmICFpc1ZhbGlkRXh0ZW5zaW9uKGNvbnRlbnRUeXBlRXh0ZW5zaW9uKSkge1xuICAgICAgICByZWplY3RFeHRlbnNpb24oY29udGVudFR5cGVFeHRlbnNpb24pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRm9yIHN0cmVhbWluZyB1cGxvYWRzLCByZWFkIGZpbGUgZGF0YSBmcm9tIGhlYWRlcnMgc2luY2UgdGhlIGJvZHkgaXMgdGhlIHJhdyBzdHJlYW1cbiAgICBpZiAocmVxLmdldCgnWC1QYXJzZS1VcGxvYWQtTW9kZScpID09PSAnc3RyZWFtJykge1xuICAgICAgcmVxLmZpbGVEYXRhID0ge307XG4gICAgICBpZiAocmVxLmdldCgnWC1QYXJzZS1GaWxlLURpcmVjdG9yeScpKSB7XG4gICAgICAgIHJlcS5maWxlRGF0YS5kaXJlY3RvcnkgPSByZXEuZ2V0KCdYLVBhcnNlLUZpbGUtRGlyZWN0b3J5Jyk7XG4gICAgICB9XG4gICAgICBpZiAocmVxLmdldCgnWC1QYXJzZS1GaWxlLU1ldGFkYXRhJykpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1NZXRhZGF0YScpKTtcbiAgICAgICAgICBpZiAoIXBhcnNlZCB8fCB0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHBhcnNlZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXEuZmlsZURhdGEubWV0YWRhdGEgPSBwYXJzZWQ7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfSlNPTiwgJ0ludmFsaWQgSlNPTiBpbiBYLVBhcnNlLUZpbGUtTWV0YWRhdGEgaGVhZGVyLicpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZXEuZ2V0KCdYLVBhcnNlLUZpbGUtVGFncycpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyZXEuZ2V0KCdYLVBhcnNlLUZpbGUtVGFncycpKTtcbiAgICAgICAgICBpZiAoIXBhcnNlZCB8fCB0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHBhcnNlZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXEuZmlsZURhdGEudGFncyA9IHBhcnNlZDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9KU09OLCAnSW52YWxpZCBKU09OIGluIFgtUGFyc2UtRmlsZS1UYWdzIGhlYWRlci4nKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZGlyZWN0b3J5IG9wdGlvbiAocmVxdWlyZXMgbWFzdGVyIGtleSlcbiAgICBjb25zdCBkaXJlY3RvcnkgPSByZXEuZmlsZURhdGE/LmRpcmVjdG9yeTtcbiAgICBpZiAoZGlyZWN0b3J5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghaXNNYXN0ZXIpIHtcbiAgICAgICAgbmV4dChcbiAgICAgICAgICBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLFxuICAgICAgICAgICAgJ0RpcmVjdG9yeSBjYW4gb25seSBiZSBzZXQgdXNpbmcgdGhlIE1hc3RlciBLZXkuJ1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZGlyZWN0b3J5RXJyb3IgPSBGaWxlc1JvdXRlci52YWxpZGF0ZURpcmVjdG9yeShkaXJlY3RvcnkpO1xuICAgICAgaWYgKGRpcmVjdG9yeUVycm9yKSB7XG4gICAgICAgIG5leHQoZGlyZWN0b3J5RXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGlzcGF0Y2ggdG8gdGhlIGFwcHJvcHJpYXRlIGhhbmRsZXIgYmFzZWQgb24gd2hldGhlciB0aGUgYm9keSB3YXMgYnVmZmVyZWRcbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHJlcS5ib2R5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2hhbmRsZUJ1ZmZlcmVkVXBsb2FkKHJlcSwgcmVzLCBuZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2hhbmRsZVN0cmVhbVVwbG9hZChyZXEsIHJlcywgbmV4dCk7XG4gIH1cblxuICBhc3luYyBfaGFuZGxlQnVmZmVyZWRVcGxvYWQocmVxLCByZXMsIG5leHQpIHtcbiAgICBjb25zdCBjb25maWcgPSByZXEuY29uZmlnO1xuICAgIGNvbnN0IGZpbGVzQ29udHJvbGxlciA9IGNvbmZpZy5maWxlc0NvbnRyb2xsZXI7XG4gICAgY29uc3QgeyBmaWxlbmFtZSB9ID0gcmVxLnBhcmFtcztcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlcS5nZXQoJ0NvbnRlbnQtdHlwZScpO1xuXG4gICAgaWYgKCFyZXEuYm9keSB8fCAhcmVxLmJvZHkubGVuZ3RoKSB7XG4gICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsICdJbnZhbGlkIGZpbGUgdXBsb2FkLicpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlNjQgPSByZXEuYm9keS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgY29uc3QgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lLCB7IGJhc2U2NCB9LCBjb250ZW50VHlwZSk7XG4gICAgY29uc3QgeyBtZXRhZGF0YSA9IHt9LCB0YWdzID0ge30sIGRpcmVjdG9yeSB9ID0gcmVxLmZpbGVEYXRhIHx8IHt9O1xuICAgIHRyeSB7XG4gICAgICAvLyBTY2FuIHJlcXVlc3QgZGF0YSBmb3IgZGVuaWVkIGtleXdvcmRzXG4gICAgICBVdGlscy5jaGVja1Byb2hpYml0ZWRLZXl3b3Jkcyhjb25maWcsIG1ldGFkYXRhKTtcbiAgICAgIFV0aWxzLmNoZWNrUHJvaGliaXRlZEtleXdvcmRzKGNvbmZpZywgdGFncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfS0VZX05BTUUsIGVycm9yKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZpbGUuc2V0VGFncyh0YWdzKTtcbiAgICBmaWxlLnNldE1ldGFkYXRhKG1ldGFkYXRhKTtcbiAgICBpZiAoZGlyZWN0b3J5KSB7XG4gICAgICBmaWxlLnNldERpcmVjdG9yeShkaXJlY3RvcnkpO1xuICAgIH1cbiAgICBjb25zdCBmaWxlU2l6ZSA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHJlcS5ib2R5KTtcbiAgICBjb25zdCBmaWxlT2JqZWN0ID0geyBmaWxlLCBmaWxlU2l6ZSB9O1xuICAgIHRyeSB7XG4gICAgICAvLyBydW4gYmVmb3JlU2F2ZUZpbGUgdHJpZ2dlclxuICAgICAgY29uc3QgdHJpZ2dlclJlc3VsdCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZVNhdmUsXG4gICAgICAgIGZpbGVPYmplY3QsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICBsZXQgc2F2ZVJlc3VsdDtcbiAgICAgIC8vIGlmIGEgbmV3IFBhcnNlRmlsZSBpcyByZXR1cm5lZCBjaGVjayBpZiBpdCdzIGFuIGFscmVhZHkgc2F2ZWQgZmlsZVxuICAgICAgaWYgKHRyaWdnZXJSZXN1bHQgaW5zdGFuY2VvZiBQYXJzZS5GaWxlKSB7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZSA9IHRyaWdnZXJSZXN1bHQ7XG4gICAgICAgIGlmICh0cmlnZ2VyUmVzdWx0LnVybCgpKSB7XG4gICAgICAgICAgLy8gc2V0IGZpbGVTaXplIHRvIG51bGwgYmVjYXVzZSB3ZSB3b250IGtub3cgaG93IGJpZyBpdCBpcyBoZXJlXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlU2l6ZSA9IG51bGw7XG4gICAgICAgICAgc2F2ZVJlc3VsdCA9IHtcbiAgICAgICAgICAgIHVybDogdHJpZ2dlclJlc3VsdC51cmwoKSxcbiAgICAgICAgICAgIG5hbWU6IHRyaWdnZXJSZXN1bHQuX25hbWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIGZpbGUgcmV0dXJuZWQgYnkgdGhlIHRyaWdnZXIgaGFzIGFscmVhZHkgYmVlbiBzYXZlZCBza2lwIHNhdmluZyBhbnl0aGluZ1xuICAgICAgaWYgKCFzYXZlUmVzdWx0KSB7XG4gICAgICAgIC8vIHVwZGF0ZSBmaWxlU2l6ZVxuICAgICAgICBsZXQgYnVmZmVyRGF0YTtcbiAgICAgICAgaWYgKGZpbGVPYmplY3QuZmlsZS5fc291cmNlPy5mb3JtYXQgPT09ICdidWZmZXInKSB7XG4gICAgICAgICAgYnVmZmVyRGF0YSA9IGZpbGVPYmplY3QuZmlsZS5fc291cmNlLmJ1ZmZlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBidWZmZXJEYXRhID0gQnVmZmVyLmZyb20oZmlsZU9iamVjdC5maWxlLl9kYXRhLCAnYmFzZTY0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgZmlsZU9iamVjdC5maWxlU2l6ZSA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGJ1ZmZlckRhdGEpO1xuICAgICAgICAvLyBwcmVwYXJlIGZpbGUgb3B0aW9uc1xuICAgICAgICBjb25zdCBmaWxlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtZXRhZGF0YTogZmlsZU9iamVjdC5maWxlLl9tZXRhZGF0YSxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gc29tZSBzMy1jb21wYXRpYmxlIHByb3ZpZGVycyAoRGlnaXRhbE9jZWFuLCBMaW5vZGUpIGRvIG5vdCBhY2NlcHQgdGFnc1xuICAgICAgICAvLyBzbyB3ZSBkbyBub3QgaW5jbHVkZSB0aGUgdGFncyBvcHRpb24gaWYgaXQgaXMgZW1wdHkuXG4gICAgICAgIGNvbnN0IGZpbGVUYWdzID1cbiAgICAgICAgICBPYmplY3Qua2V5cyhmaWxlT2JqZWN0LmZpbGUuX3RhZ3MpLmxlbmd0aCA+IDAgPyB7IHRhZ3M6IGZpbGVPYmplY3QuZmlsZS5fdGFncyB9IDoge307XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZmlsZU9wdGlvbnMsIGZpbGVUYWdzKTtcbiAgICAgICAgLy8gaW5jbHVkZSBkaXJlY3RvcnkgaWYgc2V0IChmcm9tIGNsaWVudCByZXF1ZXN0IG9yIGJlZm9yZVNhdmVGaWxlIHRyaWdnZXIpXG4gICAgICAgIGlmIChmaWxlT2JqZWN0LmZpbGUuX2RpcmVjdG9yeSkge1xuICAgICAgICAgIGZpbGVPcHRpb25zLmRpcmVjdG9yeSA9IGZpbGVPYmplY3QuZmlsZS5fZGlyZWN0b3J5O1xuICAgICAgICB9XG4gICAgICAgIC8vIHNhdmUgZmlsZVxuICAgICAgICBjb25zdCBjcmVhdGVGaWxlUmVzdWx0ID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmNyZWF0ZUZpbGUoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSxcbiAgICAgICAgICBidWZmZXJEYXRhLFxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZS5fc291cmNlLnR5cGUsXG4gICAgICAgICAgZmlsZU9wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgICAgLy8gdXBkYXRlIGZpbGUgd2l0aCBuZXcgZGF0YVxuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX25hbWUgPSBjcmVhdGVGaWxlUmVzdWx0Lm5hbWU7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fdXJsID0gY3JlYXRlRmlsZVJlc3VsdC51cmw7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fcmVxdWVzdFRhc2sgPSBudWxsO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3ByZXZpb3VzU2F2ZSA9IFByb21pc2UucmVzb2x2ZShmaWxlT2JqZWN0LmZpbGUpO1xuICAgICAgICBzYXZlUmVzdWx0ID0ge1xuICAgICAgICAgIHVybDogY3JlYXRlRmlsZVJlc3VsdC51cmwsXG4gICAgICAgICAgbmFtZTogY3JlYXRlRmlsZVJlc3VsdC5uYW1lLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgLy8gcnVuIGFmdGVyU2F2ZUZpbGUgdHJpZ2dlclxuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcih0cmlnZ2Vycy5UeXBlcy5hZnRlclNhdmUsIGZpbGVPYmplY3QsIGNvbmZpZywgcmVxLmF1dGgpO1xuICAgICAgcmVzLnN0YXR1cygyMDEpO1xuICAgICAgcmVzLnNldCgnTG9jYXRpb24nLCBzYXZlUmVzdWx0LnVybCk7XG4gICAgICByZXMuanNvbihzYXZlUmVzdWx0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGNyZWF0aW5nIGEgZmlsZTogJywgZSk7XG4gICAgICBjb25zdCBlcnJvciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBzdG9yZSBmaWxlOiAke2ZpbGVPYmplY3QuZmlsZS5fbmFtZX0uYCxcbiAgICAgIH0pO1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX2hhbmRsZVN0cmVhbVVwbG9hZChyZXEsIHJlcywgbmV4dCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gICAgY29uc3QgZmlsZXNDb250cm9sbGVyID0gY29uZmlnLmZpbGVzQ29udHJvbGxlcjtcbiAgICBjb25zdCB7IGZpbGVuYW1lIH0gPSByZXEucGFyYW1zO1xuICAgIGxldCBjb250ZW50VHlwZSA9IHJlcS5nZXQoJ0NvbnRlbnQtVHlwZScpO1xuICAgIGNvbnN0IG1heEJ5dGVzID0gcmVxLl9tYXhVcGxvYWRTaXplQnl0ZXM7XG4gICAgbGV0IHN0cmVhbTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBFYXJseSByZWplY3Rpb24gdmlhIENvbnRlbnQtTGVuZ3RoIGhlYWRlclxuICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IHJlcS5nZXQoJ0NvbnRlbnQtTGVuZ3RoJyk7XG4gICAgICBpZiAoY29udGVudExlbmd0aCAmJiBwYXJzZUludChjb250ZW50TGVuZ3RoLCAxMCkgPiBtYXhCeXRlcykge1xuICAgICAgICByZXEucmVzdW1lKCk7XG4gICAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgIFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgICBgRmlsZSBzaXplIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkOiAke21heEJ5dGVzfSBieXRlcy5gXG4gICAgICAgICkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1pbWUgPSAoYXdhaXQgaW1wb3J0KCdtaW1lJykpLmRlZmF1bHQ7XG5cbiAgICAgIC8vIEluZmVyIGNvbnRlbnQgdHlwZSBmcm9tIGV4dGVuc2lvbiBvciBhZGQgZXh0ZW5zaW9uIGZyb20gY29udGVudCB0eXBlXG4gICAgICBjb25zdCBoYXNFeHRlbnNpb24gPSBmaWxlbmFtZSAmJiBmaWxlbmFtZS5pbmNsdWRlcygnLicpO1xuICAgICAgaWYgKGhhc0V4dGVuc2lvbiAmJiAhY29udGVudFR5cGUpIHtcbiAgICAgICAgY29udGVudFR5cGUgPSBtaW1lLmdldFR5cGUoZmlsZW5hbWUpO1xuICAgICAgfSBlbHNlIGlmICghaGFzRXh0ZW5zaW9uICYmIGNvbnRlbnRUeXBlKSB7XG4gICAgICAgIC8vIGV4dGVuc2lvbiB3aWxsIGJlIGFkZGVkIGJ5IGZpbGVzQ29udHJvbGxlci5jcmVhdGVGaWxlXG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBzaXplLWxpbWl0ZWQgc3RyZWFtIHdyYXBwaW5nIHRoZSByZXF1ZXN0XG4gICAgICBzdHJlYW0gPSBjcmVhdGVTaXplTGltaXRlZFN0cmVhbShyZXEsIG1heEJ5dGVzKTtcblxuICAgICAgLy8gQnVpbGQgYSBQYXJzZS5GaWxlIHdpdGggbm8gX2RhdGEgKHN0cmVhbWluZyBtb2RlKVxuICAgICAgY29uc3QgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lLCB7IGJhc2U2NDogJycgfSwgY29udGVudFR5cGUpO1xuICAgICAgY29uc3QgeyBtZXRhZGF0YSA9IHt9LCB0YWdzID0ge30sIGRpcmVjdG9yeSB9ID0gcmVxLmZpbGVEYXRhIHx8IHt9O1xuXG4gICAgICAvLyBWYWxpZGF0ZSBtZXRhZGF0YSBhbmQgdGFncyBmb3IgcHJvaGliaXRlZCBrZXl3b3Jkc1xuICAgICAgdHJ5IHtcbiAgICAgICAgVXRpbHMuY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMoY29uZmlnLCBtZXRhZGF0YSk7XG4gICAgICAgIFV0aWxzLmNoZWNrUHJvaGliaXRlZEtleXdvcmRzKGNvbmZpZywgdGFncyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0tFWV9OQU1FLCBlcnJvcikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZpbGUuc2V0VGFncyh0YWdzKTtcbiAgICAgIGZpbGUuc2V0TWV0YWRhdGEobWV0YWRhdGEpO1xuICAgICAgaWYgKGRpcmVjdG9yeSkge1xuICAgICAgICBmaWxlLnNldERpcmVjdG9yeShkaXJlY3RvcnkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaWxlU2l6ZSA9IHJlcS5nZXQoJ0NvbnRlbnQtTGVuZ3RoJylcbiAgICAgICAgPyBwYXJzZUludChyZXEuZ2V0KCdDb250ZW50LUxlbmd0aCcpLCAxMClcbiAgICAgICAgOiBudWxsO1xuICAgICAgY29uc3QgZmlsZU9iamVjdCA9IHsgZmlsZSwgZmlsZVNpemUsIHN0cmVhbTogdHJ1ZSB9O1xuXG4gICAgICAvLyBSdW4gYmVmb3JlU2F2ZUZpbGUgdHJpZ2dlclxuICAgICAgY29uc3QgdHJpZ2dlclJlc3VsdCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZVNhdmUsXG4gICAgICAgIGZpbGVPYmplY3QsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG5cbiAgICAgIGxldCBzYXZlUmVzdWx0O1xuICAgICAgLy8gSWYgYSBuZXcgUGFyc2VGaWxlIGlzIHJldHVybmVkLCBjaGVjayBpZiBpdCdzIGFuIGFscmVhZHkgc2F2ZWQgZmlsZVxuICAgICAgaWYgKHRyaWdnZXJSZXN1bHQgaW5zdGFuY2VvZiBQYXJzZS5GaWxlKSB7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZSA9IHRyaWdnZXJSZXN1bHQ7XG4gICAgICAgIGlmICh0cmlnZ2VyUmVzdWx0LnVybCgpKSB7XG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlU2l6ZSA9IG51bGw7XG4gICAgICAgICAgc2F2ZVJlc3VsdCA9IHtcbiAgICAgICAgICAgIHVybDogdHJpZ2dlclJlc3VsdC51cmwoKSxcbiAgICAgICAgICAgIG5hbWU6IHRyaWdnZXJSZXN1bHQuX25hbWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICAvLyBEZXN0cm95IHN0cmVhbSB0byByZW1vdmUgbGlzdGVuZXJzIGFuZCBkcmFpbiByZXF1ZXN0XG4gICAgICAgICAgc3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgZmlsZSByZXR1cm5lZCBieSB0aGUgdHJpZ2dlciBoYXMgYWxyZWFkeSBiZWVuIHNhdmVkLCBza2lwIHNhdmluZ1xuICAgICAgaWYgKCFzYXZlUmVzdWx0KSB7XG4gICAgICAgIC8vIFByZXBhcmUgZmlsZSBvcHRpb25zXG4gICAgICAgIGNvbnN0IGZpbGVPcHRpb25zID0ge1xuICAgICAgICAgIG1ldGFkYXRhOiBmaWxlT2JqZWN0LmZpbGUuX21ldGFkYXRhLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBmaWxlVGFncyA9XG4gICAgICAgICAgT2JqZWN0LmtleXMoZmlsZU9iamVjdC5maWxlLl90YWdzKS5sZW5ndGggPiAwID8geyB0YWdzOiBmaWxlT2JqZWN0LmZpbGUuX3RhZ3MgfSA6IHt9O1xuICAgICAgICBPYmplY3QuYXNzaWduKGZpbGVPcHRpb25zLCBmaWxlVGFncyk7XG4gICAgICAgIC8vIGluY2x1ZGUgZGlyZWN0b3J5IGlmIHNldCAoZnJvbSBjbGllbnQgcmVxdWVzdCBvciBiZWZvcmVTYXZlRmlsZSB0cmlnZ2VyKVxuICAgICAgICBpZiAoZmlsZU9iamVjdC5maWxlLl9kaXJlY3RvcnkpIHtcbiAgICAgICAgICBmaWxlT3B0aW9ucy5kaXJlY3RvcnkgPSBmaWxlT2JqZWN0LmZpbGUuX2RpcmVjdG9yeTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBhc3Mgc3RyZWFtIGRpcmVjdGx5IHRvIGZpbGVzQ29udHJvbGxlciDigJQgaXQgd2lsbCBidWZmZXIgaWYgYWRhcHRlciBkb2Vzbid0IHN1cHBvcnQgc3RyZWFtaW5nXG4gICAgICAgIGNvbnN0IHNvdXJjZVR5cGUgPSBmaWxlT2JqZWN0LmZpbGUuX3NvdXJjZT8udHlwZSB8fCBjb250ZW50VHlwZTtcbiAgICAgICAgY29uc3QgY3JlYXRlRmlsZVJlc3VsdCA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5jcmVhdGVGaWxlKFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX25hbWUsXG4gICAgICAgICAgc3RyZWFtLFxuICAgICAgICAgIHNvdXJjZVR5cGUsXG4gICAgICAgICAgZmlsZU9wdGlvbnNcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBVcGRhdGUgZmlsZSB3aXRoIG5ldyBkYXRhXG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSA9IGNyZWF0ZUZpbGVSZXN1bHQubmFtZTtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl91cmwgPSBjcmVhdGVGaWxlUmVzdWx0LnVybDtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9yZXF1ZXN0VGFzayA9IG51bGw7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fcHJldmlvdXNTYXZlID0gUHJvbWlzZS5yZXNvbHZlKGZpbGVPYmplY3QuZmlsZSk7XG4gICAgICAgIHNhdmVSZXN1bHQgPSB7XG4gICAgICAgICAgdXJsOiBjcmVhdGVGaWxlUmVzdWx0LnVybCxcbiAgICAgICAgICBuYW1lOiBjcmVhdGVGaWxlUmVzdWx0Lm5hbWUsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIFJ1biBhZnRlclNhdmVGaWxlIHRyaWdnZXJcbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIodHJpZ2dlcnMuVHlwZXMuYWZ0ZXJTYXZlLCBmaWxlT2JqZWN0LCBjb25maWcsIHJlcS5hdXRoKTtcbiAgICAgIHJlcy5zdGF0dXMoMjAxKTtcbiAgICAgIHJlcy5zZXQoJ0xvY2F0aW9uJywgc2F2ZVJlc3VsdC51cmwpO1xuICAgICAgcmVzLmpzb24oc2F2ZVJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gRGVzdHJveSBzdHJlYW0gdG8gcmVtb3ZlIGxpc3RlbmVycyBhbmQgZHJhaW4gcmVxdWVzdCwgb3IgcmVzdW1lIGRpcmVjdGx5XG4gICAgICBpZiAoc3RyZWFtKSB7XG4gICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXEucmVzdW1lKCk7XG4gICAgICB9XG4gICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGNyZWF0aW5nIGEgZmlsZTogJywgZSk7XG4gICAgICBjb25zdCBlcnJvciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBzdG9yZSBmaWxlOiAke2ZpbGVuYW1lfS5gLFxuICAgICAgfSk7XG4gICAgICBuZXh0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVIYW5kbGVyKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgaWYgKHJlcS5hdXRoLmlzUmVhZE9ubHkpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgXCJyZWFkLW9ubHkgbWFzdGVyS2V5IGlzbid0IGFsbG93ZWQgdG8gZGVsZXRlIGEgZmlsZS5cIiwgcmVxLmNvbmZpZyk7XG4gICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICByZXMuZW5kKGB7XCJlcnJvclwiOlwiJHtlcnJvci5tZXNzYWdlfVwifWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBmaWxlc0NvbnRyb2xsZXIgfSA9IHJlcS5jb25maWc7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IEZpbGVzUm91dGVyLl9nZXRGaWxlbmFtZUZyb21QYXJhbXMocmVxKTtcbiAgICAgIC8vIHJ1biBiZWZvcmVEZWxldGVGaWxlIHRyaWdnZXJcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSk7XG4gICAgICBmaWxlLl91cmwgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuYWRhcHRlci5nZXRGaWxlTG9jYXRpb24ocmVxLmNvbmZpZywgZmlsZW5hbWUpO1xuICAgICAgY29uc3QgZmlsZU9iamVjdCA9IHsgZmlsZSwgZmlsZVNpemU6IG51bGwgfTtcbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZURlbGV0ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgcmVxLmNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICAvLyBkZWxldGUgZmlsZVxuICAgICAgYXdhaXQgZmlsZXNDb250cm9sbGVyLmRlbGV0ZUZpbGUocmVxLmNvbmZpZywgZmlsZW5hbWUpO1xuICAgICAgLy8gcnVuIGFmdGVyRGVsZXRlRmlsZSB0cmlnZ2VyXG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5hZnRlckRlbGV0ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgcmVxLmNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICAvLyBUT0RPOiByZXR1cm4gdXNlZnVsIEpTT04gaGVyZT9cbiAgICAgIHJlcy5lbmQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGRlbGV0aW5nIGEgZmlsZTogJywgZSk7XG4gICAgICBjb25zdCBlcnJvciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLkZJTEVfREVMRVRFX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IGRlbGV0ZSBmaWxlLicsXG4gICAgICB9KTtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG1ldGFkYXRhSGFuZGxlcihyZXEsIHJlcykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KHJlcS5wYXJhbXMuYXBwSWQpO1xuICAgICAgaWYgKCFjb25maWcpIHtcbiAgICAgICAgcmVzLnN0YXR1cygyMDApO1xuICAgICAgICByZXMuanNvbih7fSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIEZpbGVzUm91dGVyLl92YWxpZGF0ZUZpbGVEb3dubG9hZChyZXEsIGNvbmZpZyk7XG4gICAgICBjb25zdCB7IGZpbGVzQ29udHJvbGxlciB9ID0gY29uZmlnO1xuICAgICAgbGV0IGZpbGVuYW1lID0gRmlsZXNSb3V0ZXIuX2dldEZpbGVuYW1lRnJvbVBhcmFtcyhyZXEpO1xuICAgICAgY29uc3QgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lLCB7IGJhc2U2NDogJycgfSk7XG4gICAgICBjb25zdCBmaWxlQXV0aCA9IHJlcS5hdXRoO1xuICAgICAgY29uc3QgdHJpZ2dlclJlc3VsdCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZUZpbmQsXG4gICAgICAgIHsgZmlsZSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGZpbGVBdXRoXG4gICAgICApO1xuICAgICAgaWYgKHRyaWdnZXJSZXN1bHQ/LmZpbGU/Ll9uYW1lKSB7XG4gICAgICAgIGZpbGVuYW1lID0gdHJpZ2dlclJlc3VsdC5maWxlLl9uYW1lO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5nZXRNZXRhZGF0YShmaWxlbmFtZSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICAgIHJlcy5qc29uKHt9KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRmluZCxcbiAgICAgICAgeyBmaWxlIH0sXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZmlsZUF1dGhcbiAgICAgICk7XG4gICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICByZXMuanNvbihkYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnIgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5TQ1JJUFRfRkFJTEVELFxuICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IGdldCBmaWxlIG1ldGFkYXRhLicsXG4gICAgICB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDAzKTtcbiAgICAgIHJlcy5qc29uKHsgY29kZTogZXJyLmNvZGUsIGVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNGaWxlU3RyZWFtYWJsZShyZXEsIGZpbGVzQ29udHJvbGxlcikge1xuICBjb25zdCByYW5nZSA9IChyZXEuZ2V0KCdSYW5nZScpIHx8ICcvLS8nKS5zcGxpdCgnLScpO1xuICBjb25zdCBzdGFydCA9IE51bWJlcihyYW5nZVswXSk7XG4gIGNvbnN0IGVuZCA9IE51bWJlcihyYW5nZVsxXSk7XG4gIHJldHVybiAoXG4gICAgKCFpc05hTihzdGFydCkgfHwgIWlzTmFOKGVuZCkpICYmIHR5cGVvZiBmaWxlc0NvbnRyb2xsZXIuYWRhcHRlci5oYW5kbGVGaWxlU3RyZWFtID09PSAnZnVuY3Rpb24nXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxRQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxXQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxLQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxPQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFHQSxJQUFBTSxPQUFBLEdBQUFOLE9BQUE7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
816
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhwcmVzcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiTWlkZGxld2FyZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9ub2RlIiwiX0NvbmZpZyIsIl9sb2dnZXIiLCJfc3RyZWFtIiwiX0Vycm9yIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidHJpZ2dlcnMiLCJVdGlscyIsImNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtIiwic291cmNlIiwibWF4Qnl0ZXMiLCJ0b3RhbEJ5dGVzIiwic3RhcnRlZCIsInNvdXJjZUVuZGVkIiwib25EYXRhIiwib25FbmQiLCJvbkVycm9yIiwib3V0cHV0IiwiUmVhZGFibGUiLCJyZWFkIiwiY2h1bmsiLCJsZW5ndGgiLCJkZXN0cm95IiwiUGFyc2UiLCJFcnJvciIsIkZJTEVfU0FWRV9FUlJPUiIsInB1c2giLCJwYXVzZSIsImVyciIsIm9uIiwicmVzdW1lIiwiY2FsbGJhY2siLCJyZW1vdmVMaXN0ZW5lciIsIlJFU0VSVkVEX0RJUkVDVE9SWV9TRUdNRU5UUyIsImV4cG9ydHMiLCJGaWxlc1JvdXRlciIsImV4cHJlc3NSb3V0ZXIiLCJtYXhVcGxvYWRTaXplIiwicm91dGVyIiwiZXhwcmVzcyIsIlJvdXRlciIsImluaXRJbmZvIiwicmVxIiwicmVzIiwibmV4dCIsImluZm8iLCJzZXNzaW9uVG9rZW4iLCJpbnN0YWxsYXRpb25JZCIsImF1dGgiLCJpc01hc3RlciIsImhhbmRsZVBhcnNlU2Vzc2lvbiIsIm1ldGFkYXRhSGFuZGxlciIsImdldEhhbmRsZXIiLCJwb3N0IiwiSU5WQUxJRF9GSUxFX05BTUUiLCJfZWFybHlIZWFkZXJzTWlkZGxld2FyZSIsIl9ib2R5UGFyc2luZ01pZGRsZXdhcmUiLCJoYW5kbGVQYXJzZUhlYWRlcnMiLCJjcmVhdGVIYW5kbGVyIiwiYmluZCIsImRlbGV0ZSIsImVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiLCJkZWxldGVIYW5kbGVyIiwiX2dldEZpbGVuYW1lRnJvbVBhcmFtcyIsInBhcnRzIiwicGFyYW1zIiwiZmlsZXBhdGgiLCJBcnJheSIsImlzQXJyYXkiLCJqb2luIiwidmFsaWRhdGVEaXJlY3RvcnkiLCJkaXJlY3RvcnkiLCJpbmNsdWRlcyIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsImZpcnN0U2VnbWVudCIsInNwbGl0IiwiZGlyUmVnZXgiLCJ0ZXN0IiwiX3ZhbGlkYXRlRmlsZURvd25sb2FkIiwiY29uZmlnIiwiaXNNYWludGVuYW5jZSIsInVzZXIiLCJpc0xpbmtlZCIsIkFub255bW91c1V0aWxzIiwiZmlsZURvd25sb2FkIiwiZW5hYmxlRm9yQW5vbnltb3VzVXNlciIsIk9QRVJBVElPTl9GT1JCSURERU4iLCJlbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciIsImVuYWJsZUZvclB1YmxpYyIsIkNvbmZpZyIsImFwcElkIiwiZXJyb3IiLCJjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IiLCJzdGF0dXMiLCJqc29uIiwibWVzc2FnZSIsImZpbGVuYW1lIiwiZmlsZXNDb250cm9sbGVyIiwibWltZSIsImNvbnRlbnRUeXBlIiwiZ2V0VHlwZSIsImZpbGUiLCJGaWxlIiwiYmFzZTY0IiwiZmlsZUF1dGgiLCJ0cmlnZ2VyUmVzdWx0IiwibWF5YmVSdW5GaWxlVHJpZ2dlciIsIlR5cGVzIiwiYmVmb3JlRmluZCIsIl9uYW1lIiwiZGVmYXVsdFJlc3BvbnNlSGVhZGVycyIsImlzRmlsZVN0cmVhbWFibGUiLCJhZnRlckZpbmQiLCJmb3JjZURvd25sb2FkIiwicmVzcG9uc2VIZWFkZXJzIiwia2V5IiwidmFsdWUiLCJlbnRyaWVzIiwiaGFuZGxlRmlsZVN0cmVhbSIsImNhdGNoIiwiZW5kIiwiZGF0YSIsImdldEZpbGVEYXRhIiwidG9TdHJpbmciLCJCdWZmZXIiLCJmcm9tIiwiX2RhdGEiLCJyZXNvbHZlRXJyb3IiLCJjb2RlIiwiU0NSSVBUX0ZBSUxFRCIsIm1heFVwbG9hZFNpemVPdmVycmlkZSIsInVuZGVmaW5lZCIsIm1hc3RlcktleSIsImxvYWRNYXN0ZXJLZXkiLCJtYXN0ZXJLZXlJcHMiLCJjaGVja0lwIiwiaXAiLCJtYXN0ZXJLZXlJcHNTdG9yZSIsInBhcnNlZEJ5dGVzIiwicGFyc2VTaXplVG9CeXRlcyIsIl9tYXhVcGxvYWRTaXplT3ZlcnJpZGUiLCJkZWZhdWx0TWF4Qnl0ZXMiLCJfbWF4VXBsb2FkU2l6ZUJ5dGVzIiwibGltaXQiLCJyYXciLCJ0eXBlIiwiaXNSZWFkT25seSIsImZpbGVVcGxvYWQiLCJ2YWxpZGF0ZUZpbGVuYW1lIiwiZmlsZUV4dGVuc2lvbnMiLCJpc1ZhbGlkRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uIiwic29tZSIsImV4dCIsInJlZ2V4IiwiUmVnRXhwIiwicmVqZWN0RXh0ZW5zaW9uIiwiZ2V0RmlsZUV4dGVuc2lvbiIsInJlcGxhY2UiLCJpc0V4dGVuc2lvblJlY29nbml6ZWQiLCJhbGxvd3NBbGxFeHRlbnNpb25zIiwic2xhc2hJbmRleCIsImluZGV4T2YiLCJzbGljZSIsInRyaW0iLCJzdWJ0eXBlIiwidG9rZW4iLCJiYXJlVG9rZW4iLCJjb250ZW50VHlwZUV4dGVuc2lvbiIsImZpbGVEYXRhIiwicGFyc2VkIiwiSlNPTiIsInBhcnNlIiwibWV0YWRhdGEiLCJJTlZBTElEX0pTT04iLCJ0YWdzIiwiZGlyZWN0b3J5RXJyb3IiLCJpc0J1ZmZlciIsImJvZHkiLCJfaGFuZGxlQnVmZmVyZWRVcGxvYWQiLCJfaGFuZGxlU3RyZWFtVXBsb2FkIiwiY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMiLCJJTlZBTElEX0tFWV9OQU1FIiwic2V0VGFncyIsInNldE1ldGFkYXRhIiwic2V0RGlyZWN0b3J5IiwiZmlsZVNpemUiLCJieXRlTGVuZ3RoIiwiZmlsZU9iamVjdCIsImJlZm9yZVNhdmUiLCJzYXZlUmVzdWx0IiwidXJsIiwibmFtZSIsImJ1ZmZlckRhdGEiLCJfc291cmNlIiwiZm9ybWF0IiwiYnVmZmVyIiwiZmlsZU9wdGlvbnMiLCJfbWV0YWRhdGEiLCJmaWxlVGFncyIsImtleXMiLCJfdGFncyIsImFzc2lnbiIsIl9kaXJlY3RvcnkiLCJjcmVhdGVGaWxlUmVzdWx0IiwiY3JlYXRlRmlsZSIsIl91cmwiLCJfcmVxdWVzdFRhc2siLCJfcHJldmlvdXNTYXZlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhZnRlclNhdmUiLCJsb2dnZXIiLCJzdHJlYW0iLCJjb250ZW50TGVuZ3RoIiwicGFyc2VJbnQiLCJoYXNFeHRlbnNpb24iLCJzb3VyY2VUeXBlIiwiYWRhcHRlciIsImdldEZpbGVMb2NhdGlvbiIsImJlZm9yZURlbGV0ZSIsImRlbGV0ZUZpbGUiLCJhZnRlckRlbGV0ZSIsIkZJTEVfREVMRVRFX0VSUk9SIiwiZ2V0TWV0YWRhdGEiLCJyYW5nZSIsInN0YXJ0IiwiTnVtYmVyIiwiaXNOYU4iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUm91dGVycy9GaWxlc1JvdXRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXhwcmVzcyBmcm9tICdleHByZXNzJztcbmltcG9ydCAqIGFzIE1pZGRsZXdhcmVzIGZyb20gJy4uL21pZGRsZXdhcmVzJztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBDb25maWcgZnJvbSAnLi4vQ29uZmlnJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmNvbnN0IHRyaWdnZXJzID0gcmVxdWlyZSgnLi4vdHJpZ2dlcnMnKTtcbmNvbnN0IFV0aWxzID0gcmVxdWlyZSgnLi4vVXRpbHMnKTtcbmltcG9ydCB7IFJlYWRhYmxlIH0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvciB9IGZyb20gJy4uL0Vycm9yJztcblxuLyoqXG4gKiBXcmFwcyBhIHJlYWRhYmxlIHN0cmVhbSBpbiBhIFJlYWRhYmxlIHRoYXQgZW5mb3JjZXMgYSBieXRlIHNpemUgbGltaXQuXG4gKiBEYXRhIGZsb3cgaXMgbGF6eTogdGhlIHNvdXJjZSBpcyBub3QgcmVhZCB1bnRpbCBhIGNvbnN1bWVyIHN0YXJ0cyByZWFkaW5nXG4gKiBmcm9tIHRoZSByZXR1cm5lZCBzdHJlYW0gKHZpYSBwaXBlIG9yICdkYXRhJyBsaXN0ZW5lcikuIFRoaXMgZW5zdXJlcyB0aGVcbiAqIGNvbnN1bWVyJ3MgZXJyb3IgbGlzdGVuZXIgaXMgYXR0YWNoZWQgYmVmb3JlIGFueSBkYXRhIChvciBlcnJvcikgaXMgZW1pdHRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtKHNvdXJjZSwgbWF4Qnl0ZXMpIHtcbiAgbGV0IHRvdGFsQnl0ZXMgPSAwO1xuICBsZXQgc3RhcnRlZCA9IGZhbHNlO1xuICBsZXQgc291cmNlRW5kZWQgPSBmYWxzZTtcbiAgbGV0IG9uRGF0YSwgb25FbmQsIG9uRXJyb3I7XG5cbiAgY29uc3Qgb3V0cHV0ID0gbmV3IFJlYWRhYmxlKHtcbiAgICByZWFkKCkge1xuICAgICAgaWYgKCFzdGFydGVkKSB7XG4gICAgICAgIHN0YXJ0ZWQgPSB0cnVlO1xuXG4gICAgICAgIG9uRGF0YSA9IChjaHVuaykgPT4ge1xuICAgICAgICAgIHRvdGFsQnl0ZXMgKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICAgIGlmICh0b3RhbEJ5dGVzID4gbWF4Qnl0ZXMpIHtcbiAgICAgICAgICAgIG91dHB1dC5kZXN0cm95KFxuICAgICAgICAgICAgICBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgICAgICAgIGBGaWxlIHNpemUgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQ6ICR7bWF4Qnl0ZXN9IGJ5dGVzLmBcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFvdXRwdXQucHVzaChjaHVuaykpIHtcbiAgICAgICAgICAgIHNvdXJjZS5wYXVzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBvbkVuZCA9ICgpID0+IHtcbiAgICAgICAgICBzb3VyY2VFbmRlZCA9IHRydWU7XG4gICAgICAgICAgb3V0cHV0LnB1c2gobnVsbCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgb25FcnJvciA9IChlcnIpID0+IG91dHB1dC5kZXN0cm95KGVycik7XG5cbiAgICAgICAgc291cmNlLm9uKCdkYXRhJywgb25EYXRhKTtcbiAgICAgICAgc291cmNlLm9uKCdlbmQnLCBvbkVuZCk7XG4gICAgICAgIHNvdXJjZS5vbignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVzdW1lIHNvdXJjZSBpbiBjYXNlIGl0IHdhcyBwYXVzZWQgZHVlIHRvIGJhY2twcmVzc3VyZVxuICAgICAgaWYgKCFzb3VyY2VFbmRlZCkge1xuICAgICAgICBzb3VyY2UucmVzdW1lKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95KGVyciwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChvbkRhdGEpIHtcbiAgICAgICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25EYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmIChvbkVuZCkge1xuICAgICAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uRW5kKTtcbiAgICAgIH1cbiAgICAgIGlmIChvbkVycm9yKSB7XG4gICAgICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgIH1cbiAgICAgIC8vIFN1cHByZXNzIGVycm9ycyBlbWl0dGVkIGR1cmluZyBkcmFpbiAoZS5nLiBjbGllbnQgZGlzY29ubmVjdClcbiAgICAgIHNvdXJjZS5vbignZXJyb3InLCAoKSA9PiB7fSk7XG4gICAgICBpZiAoIXNvdXJjZUVuZGVkKSB7XG4gICAgICAgIHNvdXJjZS5yZXN1bWUoKTtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vLyBTZWdtZW50cyB0aGF0IGNvbmZsaWN0IHdpdGggc3ViLXJvdXRlcyB1bmRlciBHRVQgL2ZpbGVzLzphcHBJZC8qLiBJZiBhIGZpbGVcbi8vIGRpcmVjdG9yeSBzdGFydHMgd2l0aCBvbmUgb2YgdGhlc2UsIGl0cyBVUkwgd291bGQgbWF0Y2ggdGhlIHdyb25nIHJvdXRlXG4vLyBoYW5kbGVyLiBVcGRhdGUgdGhpcyBsaXN0IHdoZW4gYWRkaW5nIG5ldyBzdWItcm91dGVzIHRvIGV4cHJlc3NSb3V0ZXIoKS5cbmV4cG9ydCBjb25zdCBSRVNFUlZFRF9ESVJFQ1RPUllfU0VHTUVOVFMgPSBbJ21ldGFkYXRhJ107XG5cbmV4cG9ydCBjbGFzcyBGaWxlc1JvdXRlciB7XG4gIGV4cHJlc3NSb3V0ZXIoeyBtYXhVcGxvYWRTaXplID0gJzIwTWInIH0gPSB7fSkge1xuICAgIHZhciByb3V0ZXIgPSBleHByZXNzLlJvdXRlcigpO1xuICAgIC8vIExpZ2h0d2VpZ2h0IGluZm8gaW5pdGlhbGl6ZXIgc28gaGFuZGxlUGFyc2VTZXNzaW9uIGNhbiByZXNvbHZlIHNlc3Npb24gdG9rZW5zLlxuICAgIC8vIFVubGlrZSBQT1NUL0RFTEVURSByb3V0ZXMsIEdFVCBmaWxlIHJvdXRlcyBza2lwIGhhbmRsZVBhcnNlSGVhZGVycyAod2hpY2hcbiAgICAvLyBub3JtYWxseSBzZXRzIHJlcS5pbmZvKSBiZWNhdXNlIHRob3NlIHJlcXVlc3RzIG1heSBub3QgY2FycnkgUGFyc2UgaGVhZGVycy5cbiAgICBjb25zdCBpbml0SW5mbyA9IChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgICAgaWYgKCFyZXEuaW5mbykge1xuICAgICAgICBjb25zdCBzZXNzaW9uVG9rZW4gPSByZXEuZ2V0KCdYLVBhcnNlLVNlc3Npb24tVG9rZW4nKTtcbiAgICAgICAgcmVxLmluZm8gPSB7XG4gICAgICAgICAgc2Vzc2lvblRva2VuLFxuICAgICAgICAgIGluc3RhbGxhdGlvbklkOiByZXEuZ2V0KCdYLVBhcnNlLUluc3RhbGxhdGlvbi1JZCcpLFxuICAgICAgICB9O1xuICAgICAgICAvLyBJZiBubyBzZXNzaW9uIHRva2VuIGFuZCBubyBhdXRoIHlldCAocHVibGljIGFjY2VzcyksIHNldCBhIG1pbmltYWxcbiAgICAgICAgLy8gYXV0aCBvYmplY3Qgc28gaGFuZGxlUGFyc2VTZXNzaW9uIHNraXBzIHNlc3Npb24gcmVzb2x1dGlvbi5cbiAgICAgICAgaWYgKCFzZXNzaW9uVG9rZW4gJiYgIXJlcS5hdXRoKSB7XG4gICAgICAgICAgcmVxLmF1dGggPSB7IGlzTWFzdGVyOiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0KCk7XG4gICAgfTtcbiAgICAvLyBNZXRhZGF0YSByb3V0ZSBtdXN0IGNvbWUgYmVmb3JlIHRoZSBjYXRjaC1hbGwgR0VUIHJvdXRlXG4gICAgcm91dGVyLmdldCgnL2ZpbGVzLzphcHBJZC9tZXRhZGF0YS8qZmlsZXBhdGgnLCBpbml0SW5mbywgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VTZXNzaW9uLCB0aGlzLm1ldGFkYXRhSGFuZGxlcik7XG4gICAgcm91dGVyLmdldCgnL2ZpbGVzLzphcHBJZC8qZmlsZXBhdGgnLCBpbml0SW5mbywgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VTZXNzaW9uLCB0aGlzLmdldEhhbmRsZXIpO1xuXG4gICAgcm91dGVyLnBvc3QoJy9maWxlcycsIGZ1bmN0aW9uIChyZXEsIHJlcywgbmV4dCkge1xuICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsICdGaWxlbmFtZSBub3QgcHJvdmlkZWQuJykpO1xuICAgIH0pO1xuXG4gICAgcm91dGVyLnBvc3QoXG4gICAgICAnL2ZpbGVzLzpmaWxlbmFtZScsXG4gICAgICB0aGlzLl9lYXJseUhlYWRlcnNNaWRkbGV3YXJlKCksXG4gICAgICB0aGlzLl9ib2R5UGFyc2luZ01pZGRsZXdhcmUobWF4VXBsb2FkU2l6ZSksXG4gICAgICBNaWRkbGV3YXJlcy5oYW5kbGVQYXJzZUhlYWRlcnMsXG4gICAgICBNaWRkbGV3YXJlcy5oYW5kbGVQYXJzZVNlc3Npb24sXG4gICAgICB0aGlzLmNyZWF0ZUhhbmRsZXIuYmluZCh0aGlzKVxuICAgICk7XG5cbiAgICByb3V0ZXIuZGVsZXRlKFxuICAgICAgJy9maWxlcy8qZmlsZXBhdGgnLFxuICAgICAgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VIZWFkZXJzLFxuICAgICAgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VTZXNzaW9uLFxuICAgICAgTWlkZGxld2FyZXMuZW5mb3JjZU1hc3RlcktleUFjY2VzcyxcbiAgICAgIHRoaXMuZGVsZXRlSGFuZGxlclxuICAgICk7XG4gICAgcmV0dXJuIHJvdXRlcjtcbiAgfVxuXG4gIHN0YXRpYyBfZ2V0RmlsZW5hbWVGcm9tUGFyYW1zKHJlcSkge1xuICAgIGNvbnN0IHBhcnRzID0gcmVxLnBhcmFtcy5maWxlcGF0aDtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwYXJ0cykgPyBwYXJ0cy5qb2luKCcvJykgOiBwYXJ0cztcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZURpcmVjdG9yeShkaXJlY3RvcnkpIHtcbiAgICBpZiAodHlwZW9mIGRpcmVjdG9yeSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsICdEaXJlY3RvcnkgbXVzdCBiZSBhIHN0cmluZy4nKTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdG9yeS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsICdEaXJlY3RvcnkgbXVzdCBub3QgYmUgZW1wdHkuJyk7XG4gICAgfVxuICAgIGlmIChkaXJlY3RvcnkubGVuZ3RoID4gMjU2KSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRGlyZWN0b3J5IHBhdGggaXMgdG9vIGxvbmcuJyk7XG4gICAgfVxuICAgIGlmIChkaXJlY3RvcnkuaW5jbHVkZXMoJy4uJykpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsICdEaXJlY3RvcnkgbXVzdCBub3QgY29udGFpbiBcIi4uXCIuJyk7XG4gICAgfVxuICAgIGlmIChkaXJlY3Rvcnkuc3RhcnRzV2l0aCgnLycpIHx8IGRpcmVjdG9yeS5lbmRzV2l0aCgnLycpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSxcbiAgICAgICAgJ0RpcmVjdG9yeSBtdXN0IG5vdCBzdGFydCBvciBlbmQgd2l0aCBcIi9cIi4nXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0b3J5LmluY2x1ZGVzKCcvLycpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSxcbiAgICAgICAgJ0RpcmVjdG9yeSBtdXN0IG5vdCBjb250YWluIGNvbnNlY3V0aXZlIHNsYXNoZXMuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZmlyc3RTZWdtZW50ID0gZGlyZWN0b3J5LnNwbGl0KCcvJylbMF07XG4gICAgaWYgKFJFU0VSVkVEX0RJUkVDVE9SWV9TRUdNRU5UUy5pbmNsdWRlcyhmaXJzdFNlZ21lbnQpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSxcbiAgICAgICAgYERpcmVjdG9yeSBtdXN0IG5vdCBzdGFydCB3aXRoIHJlc2VydmVkIHNlZ21lbnQgXCIke2ZpcnN0U2VnbWVudH1cIi5gXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBkaXJSZWdleCA9IC9eW2EtekEtWjAtOV1bYS16QS1aMC05X1xcLS9dKiQvO1xuICAgIGlmICghZGlyUmVnZXgudGVzdChkaXJlY3RvcnkpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSxcbiAgICAgICAgJ0RpcmVjdG9yeSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgX3ZhbGlkYXRlRmlsZURvd25sb2FkKHJlcSwgY29uZmlnKSB7XG4gICAgY29uc3QgaXNNYXN0ZXIgPSByZXEuYXV0aD8uaXNNYXN0ZXI7XG4gICAgY29uc3QgaXNNYWludGVuYW5jZSA9IHJlcS5hdXRoPy5pc01haW50ZW5hbmNlO1xuICAgIGlmIChpc01hc3RlciB8fCBpc01haW50ZW5hbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHVzZXIgPSByZXEuYXV0aD8udXNlcjtcbiAgICBjb25zdCBpc0xpbmtlZCA9IHVzZXIgJiYgUGFyc2UuQW5vbnltb3VzVXRpbHMuaXNMaW5rZWQodXNlcik7XG4gICAgaWYgKCFjb25maWcuZmlsZURvd25sb2FkLmVuYWJsZUZvckFub255bW91c1VzZXIgJiYgaXNMaW5rZWQpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTixcbiAgICAgICAgJ0ZpbGUgZG93bmxvYWQgYnkgYW5vbnltb3VzIHVzZXIgaXMgZGlzYWJsZWQuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFjb25maWcuZmlsZURvd25sb2FkLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyICYmICFpc0xpbmtlZCAmJiB1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICAgICdGaWxlIGRvd25sb2FkIGJ5IGF1dGhlbnRpY2F0ZWQgdXNlciBpcyBkaXNhYmxlZC4nXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIWNvbmZpZy5maWxlRG93bmxvYWQuZW5hYmxlRm9yUHVibGljICYmICF1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICAgICdGaWxlIGRvd25sb2FkIGJ5IHB1YmxpYyBpcyBkaXNhYmxlZC4nXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldEhhbmRsZXIocmVxLCByZXMpIHtcbiAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KHJlcS5wYXJhbXMuYXBwSWQpO1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsICdJbnZhbGlkIGFwcGxpY2F0aW9uIElELicsIGNvbmZpZyk7XG4gICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICByZXMuanNvbih7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEZpbGVzUm91dGVyLl92YWxpZGF0ZUZpbGVEb3dubG9hZChyZXEsIGNvbmZpZyk7XG5cbiAgICBsZXQgZmlsZW5hbWUgPSBGaWxlc1JvdXRlci5fZ2V0RmlsZW5hbWVGcm9tUGFyYW1zKHJlcSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbGVzQ29udHJvbGxlciA9IGNvbmZpZy5maWxlc0NvbnRyb2xsZXI7XG4gICAgICBjb25zdCBtaW1lID0gKGF3YWl0IGltcG9ydCgnbWltZScpKS5kZWZhdWx0O1xuICAgICAgbGV0IGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGZpbGVuYW1lKTtcbiAgICAgIGxldCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0OiAnJyB9LCBjb250ZW50VHlwZSk7XG4gICAgICBjb25zdCBmaWxlQXV0aCA9IHJlcS5hdXRoO1xuICAgICAgY29uc3QgdHJpZ2dlclJlc3VsdCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZUZpbmQsXG4gICAgICAgIHsgZmlsZSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGZpbGVBdXRoXG4gICAgICApO1xuICAgICAgaWYgKHRyaWdnZXJSZXN1bHQ/LmZpbGU/Ll9uYW1lKSB7XG4gICAgICAgIGZpbGVuYW1lID0gdHJpZ2dlclJlc3VsdD8uZmlsZT8uX25hbWU7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGZpbGVuYW1lKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVmYXVsdFJlc3BvbnNlSGVhZGVycyA9IHsgJ1gtQ29udGVudC1UeXBlLU9wdGlvbnMnOiAnbm9zbmlmZicgfTtcblxuICAgICAgaWYgKGlzRmlsZVN0cmVhbWFibGUocmVxLCBmaWxlc0NvbnRyb2xsZXIpKSB7XG4gICAgICAgIGNvbnN0IGFmdGVyRmluZCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYWZ0ZXJGaW5kLFxuICAgICAgICAgIHsgZmlsZSwgZm9yY2VEb3dubG9hZDogZmFsc2UsIHJlc3BvbnNlSGVhZGVyczogeyAuLi5kZWZhdWx0UmVzcG9uc2VIZWFkZXJzIH0gfSxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgZmlsZUF1dGhcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGFmdGVyRmluZD8uZm9yY2VEb3dubG9hZCkge1xuICAgICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCBgYXR0YWNobWVudDtmaWxlbmFtZT0ke2FmdGVyRmluZC5maWxlPy5fbmFtZSB8fCBmaWxlbmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhZnRlckZpbmQ/LnJlc3BvbnNlSGVhZGVycyA/PyBkZWZhdWx0UmVzcG9uc2VIZWFkZXJzKSkge1xuICAgICAgICAgIHJlcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZmlsZXNDb250cm9sbGVyLmhhbmRsZUZpbGVTdHJlYW0oY29uZmlnLCBmaWxlbmFtZSwgcmVxLCByZXMsIGNvbnRlbnRUeXBlKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgcmVzLnN0YXR1cyg0MDQpO1xuICAgICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyk7XG4gICAgICAgICAgcmVzLmVuZCgnRmlsZSBub3QgZm91bmQuJyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBkYXRhID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmdldEZpbGVEYXRhKGNvbmZpZywgZmlsZW5hbWUpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MDQpO1xuICAgICAgICByZXMuc2V0KCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xuICAgICAgICByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZC4nKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQ6IGRhdGEudG9TdHJpbmcoJ2Jhc2U2NCcpIH0sIGNvbnRlbnRUeXBlKTtcbiAgICAgIGNvbnN0IGFmdGVyRmluZCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRmluZCxcbiAgICAgICAgeyBmaWxlLCBmb3JjZURvd25sb2FkOiBmYWxzZSwgcmVzcG9uc2VIZWFkZXJzOiB7IC4uLmRlZmF1bHRSZXNwb25zZUhlYWRlcnMgfSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGZpbGVBdXRoXG4gICAgICApO1xuXG4gICAgICBpZiAoYWZ0ZXJGaW5kPy5maWxlKSB7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGFmdGVyRmluZC5maWxlLl9uYW1lKTtcbiAgICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGFmdGVyRmluZC5maWxlLl9kYXRhLCAnYmFzZTY0Jyk7XG4gICAgICB9XG5cbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtVHlwZScsIGNvbnRlbnRUeXBlKTtcbiAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtTGVuZ3RoJywgZGF0YS5sZW5ndGgpO1xuICAgICAgaWYgKGFmdGVyRmluZC5mb3JjZURvd25sb2FkKSB7XG4gICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCBgYXR0YWNobWVudDtmaWxlbmFtZT0ke2FmdGVyRmluZC5maWxlLl9uYW1lfWApO1xuICAgICAgfVxuICAgICAgaWYgKGFmdGVyRmluZC5yZXNwb25zZUhlYWRlcnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYWZ0ZXJGaW5kLnJlc3BvbnNlSGVhZGVycykpIHtcbiAgICAgICAgICByZXMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXMuZW5kKGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVyciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3QgZmluZCBmaWxlOiAke2ZpbGVuYW1lfS5gLFxuICAgICAgfSk7XG4gICAgICByZXMuc3RhdHVzKDQwMyk7XG4gICAgICByZXMuanNvbih7IGNvZGU6IGVyci5jb2RlLCBlcnJvcjogZXJyLm1lc3NhZ2UgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1pZGRsZXdhcmUgdGhhdCBydW5zIGJlZm9yZSBib2R5IHBhcnNpbmcgdG8gaGFuZGxlIGhlYWRlcnMgdGhhdCBtdXN0IGJlXG4gICAqIHJlc29sdmVkIGJlZm9yZSB0aGUgcmVxdWVzdCBib2R5IGlzIGNvbnN1bWVkLiBDdXJyZW50bHkgc3VwcG9ydHM6XG4gICAqXG4gICAqIC0gYFgtUGFyc2UtRmlsZS1NYXgtVXBsb2FkLVNpemVgOiBPdmVycmlkZXMgdGhlIHNlcnZlci13aWRlIGBtYXhVcGxvYWRTaXplYFxuICAgKiAgIGZvciB0aGlzIHJlcXVlc3QuIFJlcXVpcmVzIHRoZSBtYXN0ZXIga2V5LiBUaGUgdmFsdWUgdXNlcyB0aGUgc2FtZSBmb3JtYXRcbiAgICogICBhcyB0aGUgc2VydmVyIG9wdGlvbiAoZS5nLiBgJzUwbWInYCwgYCcxZ2InYCkuIFNldHMgYHJlcS5fbWF4VXBsb2FkU2l6ZU92ZXJyaWRlYFxuICAgKiAgIChpbiBieXRlcykgZm9yIGBfYm9keVBhcnNpbmdNaWRkbGV3YXJlYCB0byB1c2UuXG4gICAqL1xuICBfZWFybHlIZWFkZXJzTWlkZGxld2FyZSgpIHtcbiAgICByZXR1cm4gYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgICBjb25zdCBtYXhVcGxvYWRTaXplT3ZlcnJpZGUgPSByZXEuZ2V0KCdYLVBhcnNlLUZpbGUtTWF4LVVwbG9hZC1TaXplJyk7XG4gICAgICBpZiAoIW1heFVwbG9hZFNpemVPdmVycmlkZSkge1xuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgYXBwSWQgPSByZXEuZ2V0KCdYLVBhcnNlLUFwcGxpY2F0aW9uLUlkJyk7XG4gICAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KGFwcElkKTtcbiAgICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgJ0ludmFsaWQgYXBwbGljYXRpb24gSUQuJywgdW5kZWZpbmVkKTtcbiAgICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgICByZXMuanNvbih7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBtYXN0ZXJLZXkgPSBhd2FpdCBjb25maWcubG9hZE1hc3RlcktleSgpO1xuICAgICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtTWFzdGVyLUtleScpICE9PSBtYXN0ZXJLZXkpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IoNDAzLCAndW5hdXRob3JpemVkOiBtYXN0ZXIga2V5IGlzIHJlcXVpcmVkJywgY29uZmlnKTtcbiAgICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgICByZXMuanNvbih7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLm1hc3RlcktleUlwcz8ubGVuZ3RoICYmICFNaWRkbGV3YXJlcy5jaGVja0lwKHJlcS5pcCwgY29uZmlnLm1hc3RlcktleUlwcywgY29uZmlnLm1hc3RlcktleUlwc1N0b3JlKSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsICd1bmF1dGhvcml6ZWQ6IG1hc3RlciBrZXkgaXMgcmVxdWlyZWQnLCBjb25maWcpO1xuICAgICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICAgIHJlcy5qc29uKHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBwYXJzZWRCeXRlcztcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZEJ5dGVzID0gVXRpbHMucGFyc2VTaXplVG9CeXRlcyhtYXhVcGxvYWRTaXplT3ZlcnJpZGUpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBuZXh0KFxuICAgICAgICAgIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgIFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgICAgIGBJbnZhbGlkIG1heFVwbG9hZFNpemUgb3ZlcnJpZGUgdmFsdWU6ICR7bWF4VXBsb2FkU2l6ZU92ZXJyaWRlfWBcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXEuX21heFVwbG9hZFNpemVPdmVycmlkZSA9IHBhcnNlZEJ5dGVzO1xuICAgICAgbmV4dCgpO1xuICAgIH07XG4gIH1cblxuICBfYm9keVBhcnNpbmdNaWRkbGV3YXJlKG1heFVwbG9hZFNpemUpIHtcbiAgICBjb25zdCBkZWZhdWx0TWF4Qnl0ZXMgPSBVdGlscy5wYXJzZVNpemVUb0J5dGVzKG1heFVwbG9hZFNpemUpO1xuICAgIHJldHVybiAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICAgIGlmIChyZXEuZ2V0KCdYLVBhcnNlLVVwbG9hZC1Nb2RlJykgPT09ICdzdHJlYW0nKSB7XG4gICAgICAgIHJlcS5fbWF4VXBsb2FkU2l6ZUJ5dGVzID0gcmVxLl9tYXhVcGxvYWRTaXplT3ZlcnJpZGUgPz8gZGVmYXVsdE1heEJ5dGVzO1xuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgbGltaXQgPSByZXEuX21heFVwbG9hZFNpemVPdmVycmlkZSA/PyBtYXhVcGxvYWRTaXplO1xuICAgICAgcmV0dXJuIGV4cHJlc3MucmF3KHsgdHlwZTogKCkgPT4gdHJ1ZSwgbGltaXQgfSkocmVxLCByZXMsIG5leHQpO1xuICAgIH07XG4gIH1cblxuICBhc3luYyBjcmVhdGVIYW5kbGVyKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgaWYgKHJlcS5hdXRoLmlzUmVhZE9ubHkpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgXCJyZWFkLW9ubHkgbWFzdGVyS2V5IGlzbid0IGFsbG93ZWQgdG8gY3JlYXRlIGEgZmlsZS5cIiwgcmVxLmNvbmZpZyk7XG4gICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICByZXMuZW5kKGB7XCJlcnJvclwiOlwiJHtlcnJvci5tZXNzYWdlfVwifWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb25maWcgPSByZXEuY29uZmlnO1xuICAgIGNvbnN0IGlzTWFzdGVyID0gcmVxLmF1dGguaXNNYXN0ZXI7XG4gICAgY29uc3QgaXNNYWludGVuYW5jZSA9IHJlcS5hdXRoLmlzTWFpbnRlbmFuY2U7XG4gICAgaWYgKCFpc01hc3RlciAmJiAhaXNNYWludGVuYW5jZSkge1xuICAgICAgY29uc3QgdXNlciA9IHJlcS5hdXRoLnVzZXI7XG4gICAgICBjb25zdCBpc0xpbmtlZCA9IHVzZXIgJiYgUGFyc2UuQW5vbnltb3VzVXRpbHMuaXNMaW5rZWQodXNlcik7XG4gICAgICBpZiAoIWNvbmZpZy5maWxlVXBsb2FkLmVuYWJsZUZvckFub255bW91c1VzZXIgJiYgaXNMaW5rZWQpIHtcbiAgICAgICAgbmV4dChcbiAgICAgICAgICBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLCAnRmlsZSB1cGxvYWQgYnkgYW5vbnltb3VzIHVzZXIgaXMgZGlzYWJsZWQuJylcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFjb25maWcuZmlsZVVwbG9hZC5lbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciAmJiAhaXNMaW5rZWQgJiYgdXNlcikge1xuICAgICAgICBuZXh0KFxuICAgICAgICAgIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgIFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgICAgICdGaWxlIHVwbG9hZCBieSBhdXRoZW50aWNhdGVkIHVzZXIgaXMgZGlzYWJsZWQuJ1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFjb25maWcuZmlsZVVwbG9hZC5lbmFibGVGb3JQdWJsaWMgJiYgIXVzZXIpIHtcbiAgICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLCAnRmlsZSB1cGxvYWQgYnkgcHVibGljIGlzIGRpc2FibGVkLicpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSByZXEuZ2V0KCdDb250ZW50LXR5cGUnKTtcblxuICAgIGNvbnN0IGVycm9yID0gZmlsZXNDb250cm9sbGVyLnZhbGlkYXRlRmlsZW5hbWUoZmlsZW5hbWUpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZUV4dGVuc2lvbnMgPSBjb25maWcuZmlsZVVwbG9hZD8uZmlsZUV4dGVuc2lvbnM7XG4gICAgaWYgKCFpc01hc3RlciAmJiBmaWxlRXh0ZW5zaW9ucykge1xuICAgICAgY29uc3QgbWltZSA9IChhd2FpdCBpbXBvcnQoJ21pbWUnKSkuZGVmYXVsdDtcbiAgICAgIGNvbnN0IGlzVmFsaWRFeHRlbnNpb24gPSBleHRlbnNpb24gPT4ge1xuICAgICAgICByZXR1cm4gZmlsZUV4dGVuc2lvbnMuc29tZShleHQgPT4ge1xuICAgICAgICAgIGlmIChleHQgPT09ICcqJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChleHQpO1xuICAgICAgICAgIGlmIChyZWdleC50ZXN0KGV4dGVuc2lvbikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcmVqZWN0RXh0ZW5zaW9uID0gZXh0ID0+IHtcbiAgICAgICAgbmV4dChcbiAgICAgICAgICBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgICAgICBgRmlsZSB1cGxvYWQgb2YgZXh0ZW5zaW9uICR7ZXh0fSBpcyBkaXNhYmxlZC5gXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfTtcblxuICAgICAgLy8gUGFyc2UgdGhlIGZpbGVuYW1lIGV4dGVuc2lvbiB0b2tlbiwgc3RyaXBwaW5nIE1JTUUgcGFyYW1ldGVycyBhbmQgd2hpdGVzcGFjZS5cbiAgICAgIGxldCBleHRlbnNpb24gPSBVdGlscy5nZXRGaWxlRXh0ZW5zaW9uKGZpbGVuYW1lKTtcbiAgICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbj8uc3BsaXQoJzsnKVswXT8ucmVwbGFjZSgvXFxzKy9nLCAnJyk7XG5cbiAgICAgIGNvbnN0IGlzRXh0ZW5zaW9uUmVjb2duaXplZCA9IGV4dGVuc2lvbiAmJiBtaW1lLmdldFR5cGUoZmlsZW5hbWUpO1xuICAgICAgaWYgKGV4dGVuc2lvbiAmJiAhaXNWYWxpZEV4dGVuc2lvbihleHRlbnNpb24pKSB7XG4gICAgICAgIHJlamVjdEV4dGVuc2lvbihleHRlbnNpb24pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFdoZW4gdGhlIGZpbGVuYW1lIGV4dGVuc2lvbiBpcyBub3QgcmVjb2duaXplZCBieSBgbWltZWAsXG4gICAgICAvLyBgRmlsZXNDb250cm9sbGVyLmNyZWF0ZUZpbGVgIGNhbm5vdCBkZXJpdmUgYSBDb250ZW50LVR5cGUgZnJvbSB0aGVcbiAgICAgIC8vIGZpbGVuYW1lIGFuZCBwcmVzZXJ2ZXMgdGhlIGNsaWVudC1zdXBwbGllZCBDb250ZW50LVR5cGUgdmVyYmF0aW0sIHNvIHRoZVxuICAgICAgLy8gdHlwZSB0aGUgZmlsZSBpcyBhY3R1YWxseSBzZXJ2ZWQgYXMgbXVzdCBiZSB2YWxpZGF0ZWQuIFNraXAgdGhpcyB3aGVuXG4gICAgICAvLyBleHRlbnNpb24gZmlsdGVyaW5nIGlzIGRpc2FibGVkIChgKmApLlxuICAgICAgY29uc3QgYWxsb3dzQWxsRXh0ZW5zaW9ucyA9IGZpbGVFeHRlbnNpb25zLmluY2x1ZGVzKCcqJyk7XG4gICAgICBpZiAoIWlzRXh0ZW5zaW9uUmVjb2duaXplZCAmJiBjb250ZW50VHlwZSAmJiAhYWxsb3dzQWxsRXh0ZW5zaW9ucykge1xuICAgICAgICBjb25zdCBzbGFzaEluZGV4ID0gY29udGVudFR5cGUuaW5kZXhPZignLycpO1xuICAgICAgICBjb25zdCB0eXBlID0gc2xhc2hJbmRleCA+IDAgPyBjb250ZW50VHlwZS5zbGljZSgwLCBzbGFzaEluZGV4KS50cmltKCkgOiAnJztcbiAgICAgICAgY29uc3Qgc3VidHlwZSA9XG4gICAgICAgICAgc2xhc2hJbmRleCA+IDAgPyBjb250ZW50VHlwZS5zbGljZShzbGFzaEluZGV4ICsgMSkuc3BsaXQoJzsnKVswXS50cmltKCkgOiAnJztcbiAgICAgICAgLy8gQSB2YWxpZCBtZWRpYSB0eXBlIGlzIGB0eXBlL3N1YnR5cGVgIHdoZXJlIGJvdGggYXJlIG5vbi1lbXB0eSBgdG9rZW5gc1xuICAgICAgICAvLyAoUkZDIDkxMTAgwqc1LjYuMikuIFJlamVjdCBhbnl0aGluZyBlbHNlLlxuICAgICAgICBjb25zdCB0b2tlbiA9IC9eWyEjJCUmJyorXFwtLl5fYHx+QS1aYS16MC05XSskLztcbiAgICAgICAgaWYgKCF0b2tlbi50ZXN0KHR5cGUpIHx8ICF0b2tlbi50ZXN0KHN1YnR5cGUpKSB7XG4gICAgICAgICAgLy8gQSBDb250ZW50LVR5cGUgdGhhdCBkb2VzIG5vdCBwYXJzZSBhcyBgdHlwZS9zdWJ0eXBlYCB3aXRoIHZhbGlkLFxuICAgICAgICAgIC8vIG5vbi1lbXB0eSB0eXBlIEFORCBzdWJ0eXBlIHRva2VucyBpcyBtYWxmb3JtZWQ6IHRoZXJlIGlzIG5vIHZhbGlkIE1JTUVcbiAgICAgICAgICAvLyB0eXBlIHdpdGhvdXQgYSBzdWJ0eXBlIChSRkMgOTExMCDCpzguMy4xKSwgYW5kIG1hbGZvcm1lZCB0b2tlbnMgc3VjaCBhc1xuICAgICAgICAgIC8vIGBpbWFnZS8vc3ZnK3htbGAgb3IgYHRleHQvcGxhaW4sdGV4dC9odG1sYCBhcmUgZXF1YWxseSB1bnBhcnNlYWJsZS5cbiAgICAgICAgICAvLyBCcm93c2VycyBjYW5ub3QgcGFyc2Ugc3VjaCB2YWx1ZXMgYW5kIGZhbGwgYmFjayB0byBNSU1FLXNuaWZmaW5nIHRoZVxuICAgICAgICAgIC8vIGZpbGUgYm9keSwgd2hpY2ggY2FuIHJlbmRlciBIVE1ML3NjcmlwdCBtYXJrZXJzIGFzIGFjdGl2ZSBjb250ZW50IG9uXG4gICAgICAgICAgLy8gc3RvcmFnZSBhZGFwdGVycyB0aGF0IHNlcnZlIHRoZSBzdG9yZWQgQ29udGVudC1UeXBlIChlLmcuIGBpbWFnZWAsXG4gICAgICAgICAgLy8gYGltYWdlL2ApLiBTdXJmYWNlIHRoZSBwcmVjaXNlIGJsb2NrbGlzdCBtZXNzYWdlIHdoZW4gdGhlIGJhcmUgdG9rZW5cbiAgICAgICAgICAvLyBuYW1lcyBhIGJsb2NrZWQgZXh0ZW5zaW9uIChlLmcuIGEgbm8tc2xhc2ggYHN2Z2ApLCBvdGhlcndpc2UgcmVqZWN0IHRoZVxuICAgICAgICAgIC8vIHVucGFyc2VhYmxlIENvbnRlbnQtVHlwZS5cbiAgICAgICAgICBjb25zdCBiYXJlVG9rZW4gPSAoc2xhc2hJbmRleCA8IDAgPyBjb250ZW50VHlwZS5zcGxpdCgnOycpWzBdIDogdHlwZSkucmVwbGFjZShcbiAgICAgICAgICAgIC9cXHMrL2csXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGJhcmVUb2tlbiAmJiAhaXNWYWxpZEV4dGVuc2lvbihiYXJlVG9rZW4pKSB7XG4gICAgICAgICAgICByZWplY3RFeHRlbnNpb24oYmFyZVRva2VuKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLCAnSW52YWxpZCBDb250ZW50LVR5cGUuJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBWYWxpZGF0ZSB0aGUgd2VsbC1mb3JtZWQgQ29udGVudC1UeXBlIHN1YnR5cGUgYWdhaW5zdCB0aGUgYmxvY2tsaXN0LCBlLmcuXG4gICAgICAgIC8vIFwiaW1hZ2Uvc3ZnK3htbFwiIC0+IFwic3ZnK3htbFwiLCBcImltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOFwiIC0+IFwic3ZnK3htbFwiLlxuICAgICAgICAvLyBWYWxpZCBjdXN0b20vdmVuZG9yIHR5cGVzIChlLmcuIFwiYXBwbGljYXRpb24vdm5kLmFwaStqc29uXCIpIHBhcnNlIGFuZCBhcmVcbiAgICAgICAgLy8gYWxsb3dlZDsgb25seSBibG9ja2VkIHN1YnR5cGVzIGFyZSByZWplY3RlZC5cbiAgICAgICAgY29uc3QgY29udGVudFR5cGVFeHRlbnNpb24gPSBzdWJ0eXBlLnJlcGxhY2UoL1xccysvZywgJycpO1xuICAgICAgICBpZiAoIWlzVmFsaWRFeHRlbnNpb24oY29udGVudFR5cGVFeHRlbnNpb24pKSB7XG4gICAgICAgICAgcmVqZWN0RXh0ZW5zaW9uKGNvbnRlbnRUeXBlRXh0ZW5zaW9uKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGb3Igc3RyZWFtaW5nIHVwbG9hZHMsIHJlYWQgZmlsZSBkYXRhIGZyb20gaGVhZGVycyBzaW5jZSB0aGUgYm9keSBpcyB0aGUgcmF3IHN0cmVhbVxuICAgIGlmIChyZXEuZ2V0KCdYLVBhcnNlLVVwbG9hZC1Nb2RlJykgPT09ICdzdHJlYW0nKSB7XG4gICAgICByZXEuZmlsZURhdGEgPSB7fTtcbiAgICAgIGlmIChyZXEuZ2V0KCdYLVBhcnNlLUZpbGUtRGlyZWN0b3J5JykpIHtcbiAgICAgICAgcmVxLmZpbGVEYXRhLmRpcmVjdG9yeSA9IHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1EaXJlY3RvcnknKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXEuZ2V0KCdYLVBhcnNlLUZpbGUtTWV0YWRhdGEnKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmVxLmdldCgnWC1QYXJzZS1GaWxlLU1ldGFkYXRhJykpO1xuICAgICAgICAgIGlmICghcGFyc2VkIHx8IHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkocGFyc2VkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlcS5maWxlRGF0YS5tZXRhZGF0YSA9IHBhcnNlZDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9KU09OLCAnSW52YWxpZCBKU09OIGluIFgtUGFyc2UtRmlsZS1NZXRhZGF0YSBoZWFkZXIuJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1UYWdzJykpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1UYWdzJykpO1xuICAgICAgICAgIGlmICghcGFyc2VkIHx8IHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkocGFyc2VkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlcS5maWxlRGF0YS50YWdzID0gcGFyc2VkO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0pTT04sICdJbnZhbGlkIEpTT04gaW4gWC1QYXJzZS1GaWxlLVRhZ3MgaGVhZGVyLicpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBkaXJlY3Rvcnkgb3B0aW9uIChyZXF1aXJlcyBtYXN0ZXIga2V5KVxuICAgIGNvbnN0IGRpcmVjdG9yeSA9IHJlcS5maWxlRGF0YT8uZGlyZWN0b3J5O1xuICAgIGlmIChkaXJlY3RvcnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFpc01hc3Rlcikge1xuICAgICAgICBuZXh0KFxuICAgICAgICAgIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICAgICAgICAnRGlyZWN0b3J5IGNhbiBvbmx5IGJlIHNldCB1c2luZyB0aGUgTWFzdGVyIEtleS4nXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBkaXJlY3RvcnlFcnJvciA9IEZpbGVzUm91dGVyLnZhbGlkYXRlRGlyZWN0b3J5KGRpcmVjdG9yeSk7XG4gICAgICBpZiAoZGlyZWN0b3J5RXJyb3IpIHtcbiAgICAgICAgbmV4dChkaXJlY3RvcnlFcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEaXNwYXRjaCB0byB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlciBiYXNlZCBvbiB3aGV0aGVyIHRoZSBib2R5IHdhcyBidWZmZXJlZFxuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIocmVxLmJvZHkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5faGFuZGxlQnVmZmVyZWRVcGxvYWQocmVxLCByZXMsIG5leHQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5faGFuZGxlU3RyZWFtVXBsb2FkKHJlcSwgcmVzLCBuZXh0KTtcbiAgfVxuXG4gIGFzeW5jIF9oYW5kbGVCdWZmZXJlZFVwbG9hZChyZXEsIHJlcywgbmV4dCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gICAgY29uc3QgZmlsZXNDb250cm9sbGVyID0gY29uZmlnLmZpbGVzQ29udHJvbGxlcjtcbiAgICBjb25zdCB7IGZpbGVuYW1lIH0gPSByZXEucGFyYW1zO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVxLmdldCgnQ29udGVudC10eXBlJyk7XG5cbiAgICBpZiAoIXJlcS5ib2R5IHx8ICFyZXEuYm9keS5sZW5ndGgpIHtcbiAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUiwgJ0ludmFsaWQgZmlsZSB1cGxvYWQuJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJhc2U2NCA9IHJlcS5ib2R5LnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0IH0sIGNvbnRlbnRUeXBlKTtcbiAgICBjb25zdCB7IG1ldGFkYXRhID0ge30sIHRhZ3MgPSB7fSwgZGlyZWN0b3J5IH0gPSByZXEuZmlsZURhdGEgfHwge307XG4gICAgdHJ5IHtcbiAgICAgIC8vIFNjYW4gcmVxdWVzdCBkYXRhIGZvciBkZW5pZWQga2V5d29yZHNcbiAgICAgIFV0aWxzLmNoZWNrUHJvaGliaXRlZEtleXdvcmRzKGNvbmZpZywgbWV0YWRhdGEpO1xuICAgICAgVXRpbHMuY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMoY29uZmlnLCB0YWdzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9LRVlfTkFNRSwgZXJyb3IpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZmlsZS5zZXRUYWdzKHRhZ3MpO1xuICAgIGZpbGUuc2V0TWV0YWRhdGEobWV0YWRhdGEpO1xuICAgIGlmIChkaXJlY3RvcnkpIHtcbiAgICAgIGZpbGUuc2V0RGlyZWN0b3J5KGRpcmVjdG9yeSk7XG4gICAgfVxuICAgIGNvbnN0IGZpbGVTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgocmVxLmJvZHkpO1xuICAgIGNvbnN0IGZpbGVPYmplY3QgPSB7IGZpbGUsIGZpbGVTaXplIH07XG4gICAgdHJ5IHtcbiAgICAgIC8vIHJ1biBiZWZvcmVTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBjb25zdCB0cmlnZ2VyUmVzdWx0ID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlU2F2ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIGxldCBzYXZlUmVzdWx0O1xuICAgICAgLy8gaWYgYSBuZXcgUGFyc2VGaWxlIGlzIHJldHVybmVkIGNoZWNrIGlmIGl0J3MgYW4gYWxyZWFkeSBzYXZlZCBmaWxlXG4gICAgICBpZiAodHJpZ2dlclJlc3VsdCBpbnN0YW5jZW9mIFBhcnNlLkZpbGUpIHtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlID0gdHJpZ2dlclJlc3VsdDtcbiAgICAgICAgaWYgKHRyaWdnZXJSZXN1bHQudXJsKCkpIHtcbiAgICAgICAgICAvLyBzZXQgZmlsZVNpemUgdG8gbnVsbCBiZWNhdXNlIHdlIHdvbnQga25vdyBob3cgYmlnIGl0IGlzIGhlcmVcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGVTaXplID0gbnVsbDtcbiAgICAgICAgICBzYXZlUmVzdWx0ID0ge1xuICAgICAgICAgICAgdXJsOiB0cmlnZ2VyUmVzdWx0LnVybCgpLFxuICAgICAgICAgICAgbmFtZTogdHJpZ2dlclJlc3VsdC5fbmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgZmlsZSByZXR1cm5lZCBieSB0aGUgdHJpZ2dlciBoYXMgYWxyZWFkeSBiZWVuIHNhdmVkIHNraXAgc2F2aW5nIGFueXRoaW5nXG4gICAgICBpZiAoIXNhdmVSZXN1bHQpIHtcbiAgICAgICAgLy8gdXBkYXRlIGZpbGVTaXplXG4gICAgICAgIGxldCBidWZmZXJEYXRhO1xuICAgICAgICBpZiAoZmlsZU9iamVjdC5maWxlLl9zb3VyY2U/LmZvcm1hdCA9PT0gJ2J1ZmZlcicpIHtcbiAgICAgICAgICBidWZmZXJEYXRhID0gZmlsZU9iamVjdC5maWxlLl9zb3VyY2UuYnVmZmVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1ZmZlckRhdGEgPSBCdWZmZXIuZnJvbShmaWxlT2JqZWN0LmZpbGUuX2RhdGEsICdiYXNlNjQnKTtcbiAgICAgICAgfVxuICAgICAgICBmaWxlT2JqZWN0LmZpbGVTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgoYnVmZmVyRGF0YSk7XG4gICAgICAgIC8vIHByZXBhcmUgZmlsZSBvcHRpb25zXG4gICAgICAgIGNvbnN0IGZpbGVPcHRpb25zID0ge1xuICAgICAgICAgIG1ldGFkYXRhOiBmaWxlT2JqZWN0LmZpbGUuX21ldGFkYXRhLFxuICAgICAgICB9O1xuICAgICAgICAvLyBzb21lIHMzLWNvbXBhdGlibGUgcHJvdmlkZXJzIChEaWdpdGFsT2NlYW4sIExpbm9kZSkgZG8gbm90IGFjY2VwdCB0YWdzXG4gICAgICAgIC8vIHNvIHdlIGRvIG5vdCBpbmNsdWRlIHRoZSB0YWdzIG9wdGlvbiBpZiBpdCBpcyBlbXB0eS5cbiAgICAgICAgY29uc3QgZmlsZVRhZ3MgPVxuICAgICAgICAgIE9iamVjdC5rZXlzKGZpbGVPYmplY3QuZmlsZS5fdGFncykubGVuZ3RoID4gMCA/IHsgdGFnczogZmlsZU9iamVjdC5maWxlLl90YWdzIH0gOiB7fTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihmaWxlT3B0aW9ucywgZmlsZVRhZ3MpO1xuICAgICAgICAvLyBpbmNsdWRlIGRpcmVjdG9yeSBpZiBzZXQgKGZyb20gY2xpZW50IHJlcXVlc3Qgb3IgYmVmb3JlU2F2ZUZpbGUgdHJpZ2dlcilcbiAgICAgICAgaWYgKGZpbGVPYmplY3QuZmlsZS5fZGlyZWN0b3J5KSB7XG4gICAgICAgICAgZmlsZU9wdGlvbnMuZGlyZWN0b3J5ID0gZmlsZU9iamVjdC5maWxlLl9kaXJlY3Rvcnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2F2ZSBmaWxlXG4gICAgICAgIGNvbnN0IGNyZWF0ZUZpbGVSZXN1bHQgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuY3JlYXRlRmlsZShcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlLl9uYW1lLFxuICAgICAgICAgIGJ1ZmZlckRhdGEsXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlLl9zb3VyY2UudHlwZSxcbiAgICAgICAgICBmaWxlT3B0aW9uc1xuICAgICAgICApO1xuICAgICAgICAvLyB1cGRhdGUgZmlsZSB3aXRoIG5ldyBkYXRhXG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSA9IGNyZWF0ZUZpbGVSZXN1bHQubmFtZTtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl91cmwgPSBjcmVhdGVGaWxlUmVzdWx0LnVybDtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9yZXF1ZXN0VGFzayA9IG51bGw7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fcHJldmlvdXNTYXZlID0gUHJvbWlzZS5yZXNvbHZlKGZpbGVPYmplY3QuZmlsZSk7XG4gICAgICAgIHNhdmVSZXN1bHQgPSB7XG4gICAgICAgICAgdXJsOiBjcmVhdGVGaWxlUmVzdWx0LnVybCxcbiAgICAgICAgICBuYW1lOiBjcmVhdGVGaWxlUmVzdWx0Lm5hbWUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBydW4gYWZ0ZXJTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKHRyaWdnZXJzLlR5cGVzLmFmdGVyU2F2ZSwgZmlsZU9iamVjdCwgY29uZmlnLCByZXEuYXV0aCk7XG4gICAgICByZXMuc3RhdHVzKDIwMSk7XG4gICAgICByZXMuc2V0KCdMb2NhdGlvbicsIHNhdmVSZXN1bHQudXJsKTtcbiAgICAgIHJlcy5qc29uKHNhdmVSZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgY3JlYXRpbmcgYSBmaWxlOiAnLCBlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiBgQ291bGQgbm90IHN0b3JlIGZpbGU6ICR7ZmlsZU9iamVjdC5maWxlLl9uYW1lfS5gLFxuICAgICAgfSk7XG4gICAgICBuZXh0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfaGFuZGxlU3RyZWFtVXBsb2FkKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZztcbiAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgbGV0IGNvbnRlbnRUeXBlID0gcmVxLmdldCgnQ29udGVudC1UeXBlJyk7XG4gICAgY29uc3QgbWF4Qnl0ZXMgPSByZXEuX21heFVwbG9hZFNpemVCeXRlcztcbiAgICBsZXQgc3RyZWFtO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEVhcmx5IHJlamVjdGlvbiB2aWEgQ29udGVudC1MZW5ndGggaGVhZGVyXG4gICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gcmVxLmdldCgnQ29udGVudC1MZW5ndGgnKTtcbiAgICAgIGlmIChjb250ZW50TGVuZ3RoICYmIHBhcnNlSW50KGNvbnRlbnRMZW5ndGgsIDEwKSA+IG1heEJ5dGVzKSB7XG4gICAgICAgIHJlcS5yZXN1bWUoKTtcbiAgICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgIGBGaWxlIHNpemUgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQ6ICR7bWF4Qnl0ZXN9IGJ5dGVzLmBcbiAgICAgICAgKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWltZSA9IChhd2FpdCBpbXBvcnQoJ21pbWUnKSkuZGVmYXVsdDtcblxuICAgICAgLy8gSW5mZXIgY29udGVudCB0eXBlIGZyb20gZXh0ZW5zaW9uIG9yIGFkZCBleHRlbnNpb24gZnJvbSBjb250ZW50IHR5cGVcbiAgICAgIGNvbnN0IGhhc0V4dGVuc2lvbiA9IGZpbGVuYW1lICYmIGZpbGVuYW1lLmluY2x1ZGVzKCcuJyk7XG4gICAgICBpZiAoaGFzRXh0ZW5zaW9uICYmICFjb250ZW50VHlwZSkge1xuICAgICAgICBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKCFoYXNFeHRlbnNpb24gJiYgY29udGVudFR5cGUpIHtcbiAgICAgICAgLy8gZXh0ZW5zaW9uIHdpbGwgYmUgYWRkZWQgYnkgZmlsZXNDb250cm9sbGVyLmNyZWF0ZUZpbGVcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIHNpemUtbGltaXRlZCBzdHJlYW0gd3JhcHBpbmcgdGhlIHJlcXVlc3RcbiAgICAgIHN0cmVhbSA9IGNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtKHJlcSwgbWF4Qnl0ZXMpO1xuXG4gICAgICAvLyBCdWlsZCBhIFBhcnNlLkZpbGUgd2l0aCBubyBfZGF0YSAoc3RyZWFtaW5nIG1vZGUpXG4gICAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0OiAnJyB9LCBjb250ZW50VHlwZSk7XG4gICAgICBjb25zdCB7IG1ldGFkYXRhID0ge30sIHRhZ3MgPSB7fSwgZGlyZWN0b3J5IH0gPSByZXEuZmlsZURhdGEgfHwge307XG5cbiAgICAgIC8vIFZhbGlkYXRlIG1ldGFkYXRhIGFuZCB0YWdzIGZvciBwcm9oaWJpdGVkIGtleXdvcmRzXG4gICAgICB0cnkge1xuICAgICAgICBVdGlscy5jaGVja1Byb2hpYml0ZWRLZXl3b3Jkcyhjb25maWcsIG1ldGFkYXRhKTtcbiAgICAgICAgVXRpbHMuY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMoY29uZmlnLCB0YWdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfS0VZX05BTUUsIGVycm9yKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZmlsZS5zZXRUYWdzKHRhZ3MpO1xuICAgICAgZmlsZS5zZXRNZXRhZGF0YShtZXRhZGF0YSk7XG4gICAgICBpZiAoZGlyZWN0b3J5KSB7XG4gICAgICAgIGZpbGUuc2V0RGlyZWN0b3J5KGRpcmVjdG9yeSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGVTaXplID0gcmVxLmdldCgnQ29udGVudC1MZW5ndGgnKVxuICAgICAgICA/IHBhcnNlSW50KHJlcS5nZXQoJ0NvbnRlbnQtTGVuZ3RoJyksIDEwKVxuICAgICAgICA6IG51bGw7XG4gICAgICBjb25zdCBmaWxlT2JqZWN0ID0geyBmaWxlLCBmaWxlU2l6ZSwgc3RyZWFtOiB0cnVlIH07XG5cbiAgICAgIC8vIFJ1biBiZWZvcmVTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBjb25zdCB0cmlnZ2VyUmVzdWx0ID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlU2F2ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcblxuICAgICAgbGV0IHNhdmVSZXN1bHQ7XG4gICAgICAvLyBJZiBhIG5ldyBQYXJzZUZpbGUgaXMgcmV0dXJuZWQsIGNoZWNrIGlmIGl0J3MgYW4gYWxyZWFkeSBzYXZlZCBmaWxlXG4gICAgICBpZiAodHJpZ2dlclJlc3VsdCBpbnN0YW5jZW9mIFBhcnNlLkZpbGUpIHtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlID0gdHJpZ2dlclJlc3VsdDtcbiAgICAgICAgaWYgKHRyaWdnZXJSZXN1bHQudXJsKCkpIHtcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGVTaXplID0gbnVsbDtcbiAgICAgICAgICBzYXZlUmVzdWx0ID0ge1xuICAgICAgICAgICAgdXJsOiB0cmlnZ2VyUmVzdWx0LnVybCgpLFxuICAgICAgICAgICAgbmFtZTogdHJpZ2dlclJlc3VsdC5fbmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIC8vIERlc3Ryb3kgc3RyZWFtIHRvIHJlbW92ZSBsaXN0ZW5lcnMgYW5kIGRyYWluIHJlcXVlc3RcbiAgICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBmaWxlIHJldHVybmVkIGJ5IHRoZSB0cmlnZ2VyIGhhcyBhbHJlYWR5IGJlZW4gc2F2ZWQsIHNraXAgc2F2aW5nXG4gICAgICBpZiAoIXNhdmVSZXN1bHQpIHtcbiAgICAgICAgLy8gUHJlcGFyZSBmaWxlIG9wdGlvbnNcbiAgICAgICAgY29uc3QgZmlsZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWV0YWRhdGE6IGZpbGVPYmplY3QuZmlsZS5fbWV0YWRhdGEsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZpbGVUYWdzID1cbiAgICAgICAgICBPYmplY3Qua2V5cyhmaWxlT2JqZWN0LmZpbGUuX3RhZ3MpLmxlbmd0aCA+IDAgPyB7IHRhZ3M6IGZpbGVPYmplY3QuZmlsZS5fdGFncyB9IDoge307XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZmlsZU9wdGlvbnMsIGZpbGVUYWdzKTtcbiAgICAgICAgLy8gaW5jbHVkZSBkaXJlY3RvcnkgaWYgc2V0IChmcm9tIGNsaWVudCByZXF1ZXN0IG9yIGJlZm9yZVNhdmVGaWxlIHRyaWdnZXIpXG4gICAgICAgIGlmIChmaWxlT2JqZWN0LmZpbGUuX2RpcmVjdG9yeSkge1xuICAgICAgICAgIGZpbGVPcHRpb25zLmRpcmVjdG9yeSA9IGZpbGVPYmplY3QuZmlsZS5fZGlyZWN0b3J5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGFzcyBzdHJlYW0gZGlyZWN0bHkgdG8gZmlsZXNDb250cm9sbGVyIOKAlCBpdCB3aWxsIGJ1ZmZlciBpZiBhZGFwdGVyIGRvZXNuJ3Qgc3VwcG9ydCBzdHJlYW1pbmdcbiAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IGZpbGVPYmplY3QuZmlsZS5fc291cmNlPy50eXBlIHx8IGNvbnRlbnRUeXBlO1xuICAgICAgICBjb25zdCBjcmVhdGVGaWxlUmVzdWx0ID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmNyZWF0ZUZpbGUoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSxcbiAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgc291cmNlVHlwZSxcbiAgICAgICAgICBmaWxlT3B0aW9uc1xuICAgICAgICApO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBmaWxlIHdpdGggbmV3IGRhdGFcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9uYW1lID0gY3JlYXRlRmlsZVJlc3VsdC5uYW1lO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3VybCA9IGNyZWF0ZUZpbGVSZXN1bHQudXJsO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3JlcXVlc3RUYXNrID0gbnVsbDtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9wcmV2aW91c1NhdmUgPSBQcm9taXNlLnJlc29sdmUoZmlsZU9iamVjdC5maWxlKTtcbiAgICAgICAgc2F2ZVJlc3VsdCA9IHtcbiAgICAgICAgICB1cmw6IGNyZWF0ZUZpbGVSZXN1bHQudXJsLFxuICAgICAgICAgIG5hbWU6IGNyZWF0ZUZpbGVSZXN1bHQubmFtZSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gUnVuIGFmdGVyU2F2ZUZpbGUgdHJpZ2dlclxuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcih0cmlnZ2Vycy5UeXBlcy5hZnRlclNhdmUsIGZpbGVPYmplY3QsIGNvbmZpZywgcmVxLmF1dGgpO1xuICAgICAgcmVzLnN0YXR1cygyMDEpO1xuICAgICAgcmVzLnNldCgnTG9jYXRpb24nLCBzYXZlUmVzdWx0LnVybCk7XG4gICAgICByZXMuanNvbihzYXZlUmVzdWx0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBEZXN0cm95IHN0cmVhbSB0byByZW1vdmUgbGlzdGVuZXJzIGFuZCBkcmFpbiByZXF1ZXN0LCBvciByZXN1bWUgZGlyZWN0bHlcbiAgICAgIGlmIChzdHJlYW0pIHtcbiAgICAgICAgc3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcS5yZXN1bWUoKTtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgY3JlYXRpbmcgYSBmaWxlOiAnLCBlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiBgQ291bGQgbm90IHN0b3JlIGZpbGU6ICR7ZmlsZW5hbWV9LmAsXG4gICAgICB9KTtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUhhbmRsZXIocmVxLCByZXMsIG5leHQpIHtcbiAgICBpZiAocmVxLmF1dGguaXNSZWFkT25seSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IoNDAzLCBcInJlYWQtb25seSBtYXN0ZXJLZXkgaXNuJ3QgYWxsb3dlZCB0byBkZWxldGUgYSBmaWxlLlwiLCByZXEuY29uZmlnKTtcbiAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKTtcbiAgICAgIHJlcy5lbmQoYHtcImVycm9yXCI6XCIke2Vycm9yLm1lc3NhZ2V9XCJ9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGZpbGVzQ29udHJvbGxlciB9ID0gcmVxLmNvbmZpZztcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gRmlsZXNSb3V0ZXIuX2dldEZpbGVuYW1lRnJvbVBhcmFtcyhyZXEpO1xuICAgICAgLy8gcnVuIGJlZm9yZURlbGV0ZUZpbGUgdHJpZ2dlclxuICAgICAgY29uc3QgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lKTtcbiAgICAgIGZpbGUuX3VybCA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5hZGFwdGVyLmdldEZpbGVMb2NhdGlvbihyZXEuY29uZmlnLCBmaWxlbmFtZSk7XG4gICAgICBjb25zdCBmaWxlT2JqZWN0ID0geyBmaWxlLCBmaWxlU2l6ZTogbnVsbCB9O1xuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlRGVsZXRlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIC8vIGRlbGV0ZSBmaWxlXG4gICAgICBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuZGVsZXRlRmlsZShyZXEuY29uZmlnLCBmaWxlbmFtZSk7XG4gICAgICAvLyBydW4gYWZ0ZXJEZWxldGVGaWxlIHRyaWdnZXJcbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRGVsZXRlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIC8vIFRPRE86IHJldHVybiB1c2VmdWwgSlNPTiBoZXJlP1xuICAgICAgcmVzLmVuZCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgZGVsZXRpbmcgYSBmaWxlOiAnLCBlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuRklMRV9ERUxFVEVfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6ICdDb3VsZCBub3QgZGVsZXRlIGZpbGUuJyxcbiAgICAgIH0pO1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbWV0YWRhdGFIYW5kbGVyKHJlcSwgcmVzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQocmVxLnBhcmFtcy5hcHBJZCk7XG4gICAgICBpZiAoIWNvbmZpZykge1xuICAgICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICAgIHJlcy5qc29uKHt9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgRmlsZXNSb3V0ZXIuX3ZhbGlkYXRlRmlsZURvd25sb2FkKHJlcSwgY29uZmlnKTtcbiAgICAgIGNvbnN0IHsgZmlsZXNDb250cm9sbGVyIH0gPSBjb25maWc7XG4gICAgICBsZXQgZmlsZW5hbWUgPSBGaWxlc1JvdXRlci5fZ2V0RmlsZW5hbWVGcm9tUGFyYW1zKHJlcSk7XG4gICAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0OiAnJyB9KTtcbiAgICAgIGNvbnN0IGZpbGVBdXRoID0gcmVxLmF1dGg7XG4gICAgICBjb25zdCB0cmlnZ2VyUmVzdWx0ID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlRmluZCxcbiAgICAgICAgeyBmaWxlIH0sXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZmlsZUF1dGhcbiAgICAgICk7XG4gICAgICBpZiAodHJpZ2dlclJlc3VsdD8uZmlsZT8uX25hbWUpIHtcbiAgICAgICAgZmlsZW5hbWUgPSB0cmlnZ2VyUmVzdWx0LmZpbGUuX25hbWU7XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmdldE1ldGFkYXRhKGZpbGVuYW1lKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgICAgcmVzLmpzb24oe30pO1xuICAgICAgfSk7XG4gICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYWZ0ZXJGaW5kLFxuICAgICAgICB7IGZpbGUgfSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBmaWxlQXV0aFxuICAgICAgKTtcbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIHJlcy5qc29uKGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVyciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsXG4gICAgICAgIG1lc3NhZ2U6ICdDb3VsZCBub3QgZ2V0IGZpbGUgbWV0YWRhdGEuJyxcbiAgICAgIH0pO1xuICAgICAgcmVzLnN0YXR1cyg0MDMpO1xuICAgICAgcmVzLmpzb24oeyBjb2RlOiBlcnIuY29kZSwgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0ZpbGVTdHJlYW1hYmxlKHJlcSwgZmlsZXNDb250cm9sbGVyKSB7XG4gIGNvbnN0IHJhbmdlID0gKHJlcS5nZXQoJ1JhbmdlJykgfHwgJy8tLycpLnNwbGl0KCctJyk7XG4gIGNvbnN0IHN0YXJ0ID0gTnVtYmVyKHJhbmdlWzBdKTtcbiAgY29uc3QgZW5kID0gTnVtYmVyKHJhbmdlWzFdKTtcbiAgcmV0dXJuIChcbiAgICAoIWlzTmFOKHN0YXJ0KSB8fCAhaXNOYU4oZW5kKSkgJiYgdHlwZW9mIGZpbGVzQ29udHJvbGxlci5hZGFwdGVyLmhhbmRsZUZpbGVTdHJlYW0gPT09ICdmdW5jdGlvbidcbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUMsdUJBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLEtBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLE9BQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUdBLElBQUFNLE9BQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLE1BQUEsR0FBQVAsT0FBQTtBQUFvRCxTQUFBRSx3QkFBQU0sQ0FBQSxFQUFBQyxDQUFBLDZCQUFBQyxPQUFBLE1BQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQVIsdUJBQUEsWUFBQUEsQ0FBQU0sQ0FBQSxFQUFBQyxDQUFBLFNBQUFBLENBQUEsSUFBQUQsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVBQUEsU0FBQUwsQ0FBQSxNQUFBTSxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxLQUFBQyxTQUFBLFFBQUFDLE9BQUEsRUFBQVYsQ0FBQSxpQkFBQUEsQ0FBQSx1QkFBQUEsQ0FBQSx5QkFBQUEsQ0FBQSxT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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "parse-server",
3
- "version": "9.10.0-alpha.1",
3
+ "version": "9.10.0-alpha.3",
4
4
  "description": "An express module providing a Parse-compatible API server",
5
5
  "main": "lib/index.js",
6
6
  "repository": {