parse-server 9.10.2-alpha.6 → 9.10.2-alpha.8

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.
@@ -295,7 +295,7 @@ const handleRateLimit = async (req, res, next) => {
295
295
  try {
296
296
  await Promise.all(rateLimits.map(async limit => {
297
297
  const pathExp = limit.path.regexp || limit.path;
298
- if (pathExp.test(req.path)) {
298
+ if (pathExp.test(req.path) || req._graphQLPath && pathExp.test(req._graphQLPath)) {
299
299
  await limit.handler(req, res, err => {
300
300
  if (err) {
301
301
  if (err.code === _node.default.Error.CONNECTION_FAILED) {
@@ -846,4 +846,4 @@ function allowDoubleForwardSlash(req, res, next) {
846
846
  req.url = req.url.startsWith('//') ? req.url.substring(1) : req.url;
847
847
  next();
848
848
  }
849
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2FjaGUiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9VdGlscyIsIl9ub2RlIiwiX0F1dGgiLCJfQ29uZmlnIiwiX2xvZ2dlciIsIl9yZXN0IiwiX01vbmdvU3RvcmFnZUFkYXB0ZXIiLCJfUG9zdGdyZXNTdG9yYWdlQWRhcHRlciIsIl9leHByZXNzUmF0ZUxpbWl0IiwiX0RlZmluaXRpb25zIiwiX3BhdGhUb1JlZ2V4cCIsIl9yYXRlTGltaXRSZWRpcyIsIl9yZWRpcyIsIl9uZXQiLCJfRXJyb3IiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJERUZBVUxUX0FMTE9XRURfSEVBREVSUyIsImV4cG9ydHMiLCJnZXRNb3VudEZvclJlcXVlc3QiLCJyZXEiLCJtb3VudFBhdGhMZW5ndGgiLCJvcmlnaW5hbFVybCIsImxlbmd0aCIsInVybCIsIm1vdW50UGF0aCIsInNsaWNlIiwicHJvdG9jb2wiLCJnZXQiLCJnZXRCbG9ja0xpc3QiLCJpcFJhbmdlTGlzdCIsInN0b3JlIiwiYmxvY2tMaXN0IiwiQmxvY2tMaXN0IiwiZm9yRWFjaCIsImZ1bGxJcCIsInNldCIsImlwIiwibWFzayIsInNwbGl0IiwiYWRkQWRkcmVzcyIsImlzSVB2NCIsImFkZFN1Ym5ldCIsIk51bWJlciIsImNoZWNrSXAiLCJpbmNvbWluZ0lwSXNWNCIsInJlc3VsdCIsImNoZWNrIiwiaW5jbHVkZXMiLCJoYW5kbGVQYXJzZUhlYWRlcnMiLCJyZXMiLCJuZXh0IiwibW91bnQiLCJjb250ZXh0IiwiSlNPTiIsInBhcnNlIiwiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwibWFsZm9ybWVkQ29udGV4dCIsImluZm8iLCJhcHBJZCIsInNlc3Npb25Ub2tlbiIsIm1hc3RlcktleSIsIm1haW50ZW5hbmNlS2V5IiwiaW5zdGFsbGF0aW9uSWQiLCJjbGllbnRLZXkiLCJqYXZhc2NyaXB0S2V5IiwiZG90TmV0S2V5IiwicmVzdEFQSUtleSIsImJhc2ljQXV0aCIsImh0dHBBdXRoIiwiYmFzaWNBdXRoQXBwSWQiLCJBcHBDYWNoZSIsImJvZHkiLCJfbm9Cb2R5IiwiZmlsZVZpYUpTT04iLCJCdWZmZXIiLCJpc0J1ZmZlciIsImludmFsaWRSZXF1ZXN0IiwiX1Jldm9jYWJsZVNlc3Npb24iLCJfQXBwbGljYXRpb25JZCIsIl9KYXZhU2NyaXB0S2V5IiwiX0NsaWVudFZlcnNpb24iLCJfSW5zdGFsbGF0aW9uSWQiLCJfU2Vzc2lvblRva2VuIiwiX01hc3RlcktleSIsIl9jb250ZXh0IiwiVXRpbHMiLCJpc09iamVjdCIsIl9Db250ZW50VHlwZSIsImhlYWRlcnMiLCJiYXNlNjQiLCJmaWxlRGF0YSIsImZyb20iLCJjbGllbnRJcCIsImdldENsaWVudElwIiwiY29uZmlnIiwiQ29uZmlnIiwic3RhdGUiLCJzdGF0dXMiLCJqc29uIiwiY29kZSIsIlBhcnNlIiwiRXJyb3IiLCJJTlRFUk5BTF9TRVJWRVJfRVJST1IiLCJlcnJvciIsImxvYWRLZXlzIiwiYXBwIiwiYXV0aCIsImlzTWFzdGVyIiwiaXNNYWludGVuYW5jZSIsInJlc29sdmVkIiwicmVzb2x2ZUtleUF1dGgiLCJrZXlWYWx1ZSIsIm1haW50ZW5hbmNlS2V5VmFsdWUiLCJoYW5kbGVSYXRlTGltaXQiLCJrZXlzIiwib25lS2V5Q29uZmlndXJlZCIsInNvbWUiLCJrZXkiLCJ1bmRlZmluZWQiLCJvbmVLZXlNYXRjaGVzIiwibWF0Y2hlc0V4YWN0Um91dGUiLCJwYXRoIiwidXNlckZyb21KV1QiLCJBdXRoIiwidXNlciIsInJhdGVMaW1pdHMiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwibGltaXQiLCJwYXRoRXhwIiwicmVnZXhwIiwidGVzdCIsImhhbmRsZXIiLCJlcnIiLCJDT05ORUNUSU9OX0ZBSUxFRCIsImxvZ2dlckNvbnRyb2xsZXIiLCJtZXNzYWdlIiwiaGFuZGxlUGFyc2VTZXNzaW9uIiwibWV0aG9kIiwicmVxdWVzdEF1dGgiLCJpbmRleE9mIiwiZ2V0QXV0aEZvckxlZ2FjeVNlc3Npb25Ub2tlbiIsImdldEF1dGhGb3JTZXNzaW9uVG9rZW4iLCJVTktOT1dOX0VSUk9SIiwiYXV0aG9yaXphdGlvbiIsImhlYWRlciIsImF1dGhQcmVmaXgiLCJtYXRjaCIsInRvTG93ZXJDYXNlIiwiZW5jb2RlZEF1dGgiLCJzdWJzdHJpbmciLCJjcmVkZW50aWFscyIsImRlY29kZUJhc2U2NCIsImpzS2V5UHJlZml4IiwibWF0Y2hLZXkiLCJzdHIiLCJhbGxvd0Nyb3NzRG9tYWluIiwiYWxsb3dIZWFkZXJzIiwiam9pbiIsImJhc2VPcmlnaW5zIiwiYWxsb3dPcmlnaW4iLCJyZXF1ZXN0T3JpZ2luIiwib3JpZ2luIiwiYWxsb3dPcmlnaW5zIiwic2VuZFN0YXR1cyIsImFsbG93TWV0aG9kT3ZlcnJpZGUiLCJfbWV0aG9kIiwib3JpZ2luYWxNZXRob2QiLCJ0b1VwcGVyQ2FzZSIsIm1haW50ZW5hbmNlS2V5SXBzIiwibWFpbnRlbmFuY2VLZXlJcHNTdG9yZSIsImxvZyIsImRlZmF1bHRMb2dnZXIiLCJsb2FkTWFzdGVyS2V5IiwibWFzdGVyS2V5SXBzIiwibWFzdGVyS2V5SXBzU3RvcmUiLCJyZWFkT25seU1hc3RlcktleSIsInJlYWRPbmx5TWFzdGVyS2V5SXBzIiwicmVhZE9ubHlNYXN0ZXJLZXlJcHNTdG9yZSIsImlzUmVhZE9ubHkiLCJoYW5kbGVQYXJzZUF1dGgiLCJoYW5kbGVQYXJzZUhlYWx0aCIsIm9wdGlvbnMiLCJub3JtYWxpemVSb3V0ZUFsbG93TGlzdFBhdGgiLCJub3JtYWxpemVkIiwiVVJMIiwicGF0aG5hbWUiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJxdWVyeUluZGV4IiwiZXhhY3RSb3V0ZVJlZ2V4cENhY2hlIiwiY3JlYXRlIiwicm91dGUiLCJwYXRoVG9SZWdleHAiLCJpc1JvdXRlQWxsb3dlZCIsInJvdXRlQWxsb3dMaXN0IiwicmVnZXhlcyIsIl9yb3V0ZUFsbG93TGlzdFJlZ2V4IiwicmVnZXgiLCJlbmZvcmNlUm91dGVBbGxvd0xpc3QiLCJjcmVhdGVTYW5pdGl6ZWRFcnJvciIsIk9QRVJBVElPTl9GT1JCSURERU4iLCJoYW5kbGVQYXJzZUVycm9ycyIsImVuYWJsZUV4cHJlc3NFcnJvckhhbmRsZXIiLCJzaWdudXBVc2VybmFtZVRha2VuTGV2ZWwiLCJsb2dMZXZlbHMiLCJzaWdudXBVc2VybmFtZVRha2VuIiwiaHR0cFN0YXR1cyIsIk9CSkVDVF9OT1RfRk9VTkQiLCJVU0VSTkFNRV9UQUtFTiIsImxvZ2dlck1ldGhvZCIsImJpbmQiLCJwcm9jZXNzIiwiZW52IiwiVEVTVElORyIsInN0YWNrIiwiZW5mb3JjZU1hc3RlcktleUFjY2VzcyIsImNyZWF0ZVNhbml0aXplZEh0dHBFcnJvciIsImVuZCIsInByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzIiwicmVxdWVzdCIsInJlc29sdmUiLCJpc0ludGVybmFsUmVxdWVzdCIsInNvY2tldCIsInJlbW90ZUFkZHJlc3MiLCJhZGRSYXRlTGltaXQiLCJjbG91ZCIsIlJhdGVMaW1pdE9wdGlvbnMiLCJyZWRpc1N0b3JlIiwiY29ubmVjdGlvblByb21pc2UiLCJyZWRpc1VybCIsImNsaWVudCIsImNyZWF0ZUNsaWVudCIsIm9uIiwiaXNPcGVuIiwiY29ubmVjdCIsIlJlZGlzU3RvcmUiLCJzZW5kQ29tbWFuZCIsImFyZ3MiLCJwdXNoIiwicmVxdWVzdFBhdGgiLCJyZXF1ZXN0Q291bnQiLCJyZXF1ZXN0TWV0aG9kcyIsImluY2x1ZGVNYXN0ZXJLZXkiLCJpbmNsdWRlSW50ZXJuYWxSZXF1ZXN0cyIsImVycm9yUmVzcG9uc2VNZXNzYWdlIiwicmF0ZUxpbWl0Iiwid2luZG93TXMiLCJyZXF1ZXN0VGltZVdpbmRvdyIsIm1heCIsInJlc3BvbnNlIiwic2tpcCIsIm1ldGhvZHNUb0NoZWNrIiwiU2V0IiwiX2JhdGNoT3JpZ2luYWxNZXRob2QiLCJhZGQiLCJBcnJheSIsImlzQXJyYXkiLCJtIiwiaGFzIiwicmVnRXhwIiwiUmVnRXhwIiwia2V5R2VuZXJhdG9yIiwiem9uZSIsIlNlcnZlciIsIlJhdGVMaW1pdFpvbmUiLCJnbG9iYWwiLCJ0b2tlbiIsInNlc3Npb24iLCJpZCIsInB1dCIsInByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSIsImRhdGFiYXNlIiwiYWRhcHRlciIsIk1vbmdvU3RvcmFnZUFkYXB0ZXIiLCJQb3N0Z3Jlc1N0b3JhZ2VBZGFwdGVyIiwicmVxdWVzdElkIiwicGF0aHMiLCJ0dGwiLCJpZGVtcG90ZW5jeU9wdGlvbnMiLCJyZXFQYXRoIiwicmVwbGFjZSIsImNoYXJBdCIsImV4cGlyeURhdGUiLCJEYXRlIiwic2V0U2Vjb25kcyIsImdldFNlY29uZHMiLCJyZXN0IiwibWFzdGVyIiwicmVxSWQiLCJleHBpcmUiLCJfZW5jb2RlIiwiY2F0Y2giLCJEVVBMSUNBVEVfVkFMVUUiLCJEVVBMSUNBVEVfUkVRVUVTVCIsIklOVkFMSURfSlNPTiIsImFsbG93RG91YmxlRm9yd2FyZFNsYXNoIl0sInNvdXJjZXMiOlsiLi4vc3JjL21pZGRsZXdhcmVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBcHBDYWNoZSBmcm9tICcuL2NhY2hlJztcbmltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBhdXRoIGZyb20gJy4vQXV0aCc7XG5pbXBvcnQgQ29uZmlnIGZyb20gJy4vQ29uZmlnJztcbmltcG9ydCBkZWZhdWx0TG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCByZXN0IGZyb20gJy4vcmVzdCc7XG5pbXBvcnQgTW9uZ29TdG9yYWdlQWRhcHRlciBmcm9tICcuL0FkYXB0ZXJzL1N0b3JhZ2UvTW9uZ28vTW9uZ29TdG9yYWdlQWRhcHRlcic7XG5pbXBvcnQgUG9zdGdyZXNTdG9yYWdlQWRhcHRlciBmcm9tICcuL0FkYXB0ZXJzL1N0b3JhZ2UvUG9zdGdyZXMvUG9zdGdyZXNTdG9yYWdlQWRhcHRlcic7XG5pbXBvcnQgcmF0ZUxpbWl0IGZyb20gJ2V4cHJlc3MtcmF0ZS1saW1pdCc7XG5pbXBvcnQgeyBSYXRlTGltaXRPcHRpb25zIH0gZnJvbSAnLi9PcHRpb25zL0RlZmluaXRpb25zJztcbmltcG9ydCB7IHBhdGhUb1JlZ2V4cCB9IGZyb20gJ3BhdGgtdG8tcmVnZXhwJztcbmltcG9ydCBSZWRpc1N0b3JlIGZyb20gJ3JhdGUtbGltaXQtcmVkaXMnO1xuaW1wb3J0IHsgY3JlYXRlQ2xpZW50IH0gZnJvbSAncmVkaXMnO1xuaW1wb3J0IHsgQmxvY2tMaXN0LCBpc0lQdjQgfSBmcm9tICduZXQnO1xuaW1wb3J0IHsgY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yLCBjcmVhdGVTYW5pdGl6ZWRFcnJvciB9IGZyb20gJy4vRXJyb3InO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BTExPV0VEX0hFQURFUlMgPVxuICAnWC1QYXJzZS1NYXN0ZXItS2V5LCBYLVBhcnNlLVJFU1QtQVBJLUtleSwgWC1QYXJzZS1KYXZhc2NyaXB0LUtleSwgWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCwgWC1QYXJzZS1DbGllbnQtVmVyc2lvbiwgWC1QYXJzZS1TZXNzaW9uLVRva2VuLCBYLVJlcXVlc3RlZC1XaXRoLCBYLVBhcnNlLVJldm9jYWJsZS1TZXNzaW9uLCBYLVBhcnNlLVJlcXVlc3QtSWQsIENvbnRlbnQtVHlwZSwgUHJhZ21hLCBDYWNoZS1Db250cm9sJztcblxuY29uc3QgZ2V0TW91bnRGb3JSZXF1ZXN0ID0gZnVuY3Rpb24gKHJlcSkge1xuICBjb25zdCBtb3VudFBhdGhMZW5ndGggPSByZXEub3JpZ2luYWxVcmwubGVuZ3RoIC0gcmVxLnVybC5sZW5ndGg7XG4gIGNvbnN0IG1vdW50UGF0aCA9IHJlcS5vcmlnaW5hbFVybC5zbGljZSgwLCBtb3VudFBhdGhMZW5ndGgpO1xuICByZXR1cm4gcmVxLnByb3RvY29sICsgJzovLycgKyByZXEuZ2V0KCdob3N0JykgKyBtb3VudFBhdGg7XG59O1xuXG5jb25zdCBnZXRCbG9ja0xpc3QgPSAoaXBSYW5nZUxpc3QsIHN0b3JlKSA9PiB7XG4gIGlmIChzdG9yZS5nZXQoJ2Jsb2NrTGlzdCcpKSB7IHJldHVybiBzdG9yZS5nZXQoJ2Jsb2NrTGlzdCcpOyB9XG4gIGNvbnN0IGJsb2NrTGlzdCA9IG5ldyBCbG9ja0xpc3QoKTtcbiAgaXBSYW5nZUxpc3QuZm9yRWFjaChmdWxsSXAgPT4ge1xuICAgIGlmIChmdWxsSXAgPT09ICc6Oi8wJyB8fCBmdWxsSXAgPT09ICc6OicgfHwgZnVsbElwID09PSAnOjowJykge1xuICAgICAgc3RvcmUuc2V0KCdhbGxvd0FsbElwdjYnLCB0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGZ1bGxJcCA9PT0gJzAuMC4wLjAvMCcgfHwgZnVsbElwID09PSAnMC4wLjAuMCcpIHtcbiAgICAgIHN0b3JlLnNldCgnYWxsb3dBbGxJcHY0JywgdHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IFtpcCwgbWFza10gPSBmdWxsSXAuc3BsaXQoJy8nKTtcbiAgICBpZiAoIW1hc2spIHtcbiAgICAgIGJsb2NrTGlzdC5hZGRBZGRyZXNzKGlwLCBpc0lQdjQoaXApID8gJ2lwdjQnIDogJ2lwdjYnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmxvY2tMaXN0LmFkZFN1Ym5ldChpcCwgTnVtYmVyKG1hc2spLCBpc0lQdjQoaXApID8gJ2lwdjQnIDogJ2lwdjYnKTtcbiAgICB9XG4gIH0pO1xuICBzdG9yZS5zZXQoJ2Jsb2NrTGlzdCcsIGJsb2NrTGlzdCk7XG4gIHJldHVybiBibG9ja0xpc3Q7XG59O1xuXG5leHBvcnQgY29uc3QgY2hlY2tJcCA9IChpcCwgaXBSYW5nZUxpc3QsIHN0b3JlKSA9PiB7XG4gIGNvbnN0IGluY29taW5nSXBJc1Y0ID0gaXNJUHY0KGlwKTtcbiAgY29uc3QgYmxvY2tMaXN0ID0gZ2V0QmxvY2tMaXN0KGlwUmFuZ2VMaXN0LCBzdG9yZSk7XG5cbiAgaWYgKHN0b3JlLmdldChpcCkpIHsgcmV0dXJuIHRydWU7IH1cbiAgaWYgKHN0b3JlLmdldCgnYWxsb3dBbGxJcHY0JykgJiYgaW5jb21pbmdJcElzVjQpIHsgcmV0dXJuIHRydWU7IH1cbiAgaWYgKHN0b3JlLmdldCgnYWxsb3dBbGxJcHY2JykgJiYgIWluY29taW5nSXBJc1Y0KSB7IHJldHVybiB0cnVlOyB9XG4gIGNvbnN0IHJlc3VsdCA9IGJsb2NrTGlzdC5jaGVjayhpcCwgaW5jb21pbmdJcElzVjQgPyAnaXB2NCcgOiAnaXB2NicpO1xuXG4gIC8vIElmIHRoZSBpcCBpcyBpbiB0aGUgbGlzdCwgd2Ugc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUgc3RvcmVcbiAgLy8gc28gd2UgaGF2ZSBhIG9wdGltaXplZCBwYXRoIGZvciB0aGUgbmV4dCByZXF1ZXN0XG4gIGlmIChpcFJhbmdlTGlzdC5pbmNsdWRlcyhpcCkgJiYgcmVzdWx0KSB7XG4gICAgc3RvcmUuc2V0KGlwLCByZXN1bHQpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBDaGVja3MgdGhhdCB0aGUgcmVxdWVzdCBpcyBhdXRob3JpemVkIGZvciB0aGlzIGFwcCBhbmQgY2hlY2tzIHVzZXJcbi8vIGF1dGggdG9vLlxuLy8gVGhlIGJvZHlwYXJzZXIgc2hvdWxkIHJ1biBiZWZvcmUgdGhpcyBtaWRkbGV3YXJlLlxuLy8gQWRkcyBpbmZvIHRvIHRoZSByZXF1ZXN0OlxuLy8gcmVxLmNvbmZpZyAtIHRoZSBDb25maWcgZm9yIHRoaXMgYXBwXG4vLyByZXEuYXV0aCAtIHRoZSBBdXRoIGZvciB0aGlzIHJlcXVlc3RcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVQYXJzZUhlYWRlcnMocmVxLCByZXMsIG5leHQpIHtcbiAgdmFyIG1vdW50ID0gZ2V0TW91bnRGb3JSZXF1ZXN0KHJlcSk7XG5cbiAgbGV0IGNvbnRleHQgPSB7fTtcbiAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtQ2xvdWQtQ29udGV4dCcpICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgY29udGV4dCA9IEpTT04ucGFyc2UocmVxLmdldCgnWC1QYXJzZS1DbG91ZC1Db250ZXh0JykpO1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjb250ZXh0KSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgICAgdGhyb3cgJ0NvbnRleHQgaXMgbm90IGFuIG9iamVjdCc7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbWFsZm9ybWVkQ29udGV4dChyZXEsIHJlcyk7XG4gICAgfVxuICB9XG4gIHZhciBpbmZvID0ge1xuICAgIGFwcElkOiByZXEuZ2V0KCdYLVBhcnNlLUFwcGxpY2F0aW9uLUlkJyksXG4gICAgc2Vzc2lvblRva2VuOiByZXEuZ2V0KCdYLVBhcnNlLVNlc3Npb24tVG9rZW4nKSxcbiAgICBtYXN0ZXJLZXk6IHJlcS5nZXQoJ1gtUGFyc2UtTWFzdGVyLUtleScpLFxuICAgIG1haW50ZW5hbmNlS2V5OiByZXEuZ2V0KCdYLVBhcnNlLU1haW50ZW5hbmNlLUtleScpLFxuICAgIGluc3RhbGxhdGlvbklkOiByZXEuZ2V0KCdYLVBhcnNlLUluc3RhbGxhdGlvbi1JZCcpLFxuICAgIGNsaWVudEtleTogcmVxLmdldCgnWC1QYXJzZS1DbGllbnQtS2V5JyksXG4gICAgamF2YXNjcmlwdEtleTogcmVxLmdldCgnWC1QYXJzZS1KYXZhc2NyaXB0LUtleScpLFxuICAgIGRvdE5ldEtleTogcmVxLmdldCgnWC1QYXJzZS1XaW5kb3dzLUtleScpLFxuICAgIHJlc3RBUElLZXk6IHJlcS5nZXQoJ1gtUGFyc2UtUkVTVC1BUEktS2V5JyksXG4gICAgY29udGV4dDogY29udGV4dCxcbiAgfTtcblxuICB2YXIgYmFzaWNBdXRoID0gaHR0cEF1dGgocmVxKTtcblxuICBpZiAoYmFzaWNBdXRoKSB7XG4gICAgdmFyIGJhc2ljQXV0aEFwcElkID0gYmFzaWNBdXRoLmFwcElkO1xuICAgIGlmIChBcHBDYWNoZS5nZXQoYmFzaWNBdXRoQXBwSWQpKSB7XG4gICAgICBpbmZvLmFwcElkID0gYmFzaWNBdXRoQXBwSWQ7XG4gICAgICBpbmZvLm1hc3RlcktleSA9IGJhc2ljQXV0aC5tYXN0ZXJLZXkgfHwgaW5mby5tYXN0ZXJLZXk7XG4gICAgICBpbmZvLmphdmFzY3JpcHRLZXkgPSBiYXNpY0F1dGguamF2YXNjcmlwdEtleSB8fCBpbmZvLmphdmFzY3JpcHRLZXk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHJlcS5ib2R5KSB7XG4gICAgLy8gVW5pdHkgU0RLIHNlbmRzIGEgX25vQm9keSBrZXkgd2hpY2ggbmVlZHMgdG8gYmUgcmVtb3ZlZC5cbiAgICAvLyBVbmNsZWFyIGF0IHRoaXMgcG9pbnQgaWYgYWN0aW9uIG5lZWRzIHRvIGJlIHRha2VuLlxuICAgIGRlbGV0ZSByZXEuYm9keS5fbm9Cb2R5O1xuICB9XG5cbiAgdmFyIGZpbGVWaWFKU09OID0gZmFsc2U7XG5cbiAgaWYgKCFpbmZvLmFwcElkIHx8ICFBcHBDYWNoZS5nZXQoaW5mby5hcHBJZCkpIHtcbiAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgdGhlIGFwcCBpZCBvbiB0aGUgYm9keS5cbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHJlcS5ib2R5KSkge1xuICAgICAgLy8gVGhlIG9ubHkgY2hhbmNlIHRvIGZpbmQgdGhlIGFwcCBpZCBpcyBpZiB0aGlzIGlzIGEgZmlsZVxuICAgICAgLy8gdXBsb2FkIHRoYXQgYWN0dWFsbHkgaXMgYSBKU09OIGJvZHkuIFNvIHRyeSB0byBwYXJzZSBpdC5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXJzZS1jb21tdW5pdHkvcGFyc2Utc2VydmVyL2lzc3Vlcy82NTg5XG4gICAgICAvLyBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgdGhlIGNsaWVudCBpcyB0cnlpbmcgdG8gdXBsb2FkIGEgZmlsZSBidXQgZm9yZ290XG4gICAgICAvLyB0byBwcm92aWRlIHgtcGFyc2UtYXBwLWlkIGluIGhlYWRlciBhbmQgcGFyc2UgYSBiaW5hcnkgZmlsZSB3aWxsIGZhaWxcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcS5ib2R5ID0gSlNPTi5wYXJzZShyZXEuYm9keSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgICAgIH1cbiAgICAgIGZpbGVWaWFKU09OID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocmVxLmJvZHkpIHtcbiAgICAgIGRlbGV0ZSByZXEuYm9keS5fUmV2b2NhYmxlU2Vzc2lvbjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICByZXEuYm9keSAmJlxuICAgICAgcmVxLmJvZHkuX0FwcGxpY2F0aW9uSWQgJiZcbiAgICAgIEFwcENhY2hlLmdldChyZXEuYm9keS5fQXBwbGljYXRpb25JZCkgJiZcbiAgICAgICghaW5mby5tYXN0ZXJLZXkgfHwgQXBwQ2FjaGUuZ2V0KHJlcS5ib2R5Ll9BcHBsaWNhdGlvbklkKS5tYXN0ZXJLZXkgPT09IGluZm8ubWFzdGVyS2V5KVxuICAgICkge1xuICAgICAgaW5mby5hcHBJZCA9IHJlcS5ib2R5Ll9BcHBsaWNhdGlvbklkO1xuICAgICAgaW5mby5qYXZhc2NyaXB0S2V5ID0gcmVxLmJvZHkuX0phdmFTY3JpcHRLZXkgfHwgJyc7XG4gICAgICBkZWxldGUgcmVxLmJvZHkuX0FwcGxpY2F0aW9uSWQ7XG4gICAgICBkZWxldGUgcmVxLmJvZHkuX0phdmFTY3JpcHRLZXk7XG4gICAgICAvLyBUT0RPOiB0ZXN0IHRoYXQgdGhlIFJFU1QgQVBJIGZvcm1hdHMgZ2VuZXJhdGVkIGJ5IHRoZSBvdGhlclxuICAgICAgLy8gU0RLcyBhcmUgaGFuZGxlZCBva1xuICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9DbGllbnRWZXJzaW9uO1xuICAgICAgaWYgKHJlcS5ib2R5Ll9JbnN0YWxsYXRpb25JZCkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcS5ib2R5Ll9JbnN0YWxsYXRpb25JZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpO1xuICAgICAgICB9XG4gICAgICAgIGluZm8uaW5zdGFsbGF0aW9uSWQgPSByZXEuYm9keS5fSW5zdGFsbGF0aW9uSWQ7XG4gICAgICAgIGRlbGV0ZSByZXEuYm9keS5fSW5zdGFsbGF0aW9uSWQ7XG4gICAgICB9XG4gICAgICBpZiAocmVxLmJvZHkuX1Nlc3Npb25Ub2tlbikge1xuICAgICAgICBpZiAodHlwZW9mIHJlcS5ib2R5Ll9TZXNzaW9uVG9rZW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgICAgICAgfVxuICAgICAgICBpbmZvLnNlc3Npb25Ub2tlbiA9IHJlcS5ib2R5Ll9TZXNzaW9uVG9rZW47XG4gICAgICAgIGRlbGV0ZSByZXEuYm9keS5fU2Vzc2lvblRva2VuO1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5ib2R5Ll9NYXN0ZXJLZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXEuYm9keS5fTWFzdGVyS2V5ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaW5mby5tYXN0ZXJLZXkgPSByZXEuYm9keS5fTWFzdGVyS2V5O1xuICAgICAgICBkZWxldGUgcmVxLmJvZHkuX01hc3RlcktleTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXEuYm9keS5fY29udGV4dCkge1xuICAgICAgICBpZiAoVXRpbHMuaXNPYmplY3QocmVxLmJvZHkuX2NvbnRleHQpKSB7XG4gICAgICAgICAgaW5mby5jb250ZXh0ID0gcmVxLmJvZHkuX2NvbnRleHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGluZm8uY29udGV4dCA9IEpTT04ucGFyc2UocmVxLmJvZHkuX2NvbnRleHQpO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbmZvLmNvbnRleHQpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgICAgICAgICB0aHJvdyAnQ29udGV4dCBpcyBub3QgYW4gb2JqZWN0JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiBtYWxmb3JtZWRDb250ZXh0KHJlcSwgcmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9jb250ZXh0O1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5ib2R5Ll9Db250ZW50VHlwZSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcS5ib2R5Ll9Db250ZW50VHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJlcS5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9IHJlcS5ib2R5Ll9Db250ZW50VHlwZTtcbiAgICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9Db250ZW50VHlwZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaW5mby5zZXNzaW9uVG9rZW4gJiYgdHlwZW9mIGluZm8uc2Vzc2lvblRva2VuICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcyk7XG4gIH1cblxuICBpZiAoZmlsZVZpYUpTT04gJiYgcmVxLmJvZHkpIHtcbiAgICBpZiAocmVxLmJvZHkuYmFzZTY0ICYmIHR5cGVvZiByZXEuYm9keS5iYXNlNjQgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpO1xuICAgIH1cbiAgICByZXEuZmlsZURhdGEgPSByZXEuYm9keS5maWxlRGF0YTtcbiAgICAvLyBXZSBuZWVkIHRvIHJlcG9wdWxhdGUgcmVxLmJvZHkgd2l0aCBhIGJ1ZmZlclxuICAgIHZhciBiYXNlNjQgPSByZXEuYm9keS5iYXNlNjQ7XG4gICAgcmVxLmJvZHkgPSBCdWZmZXIuZnJvbShiYXNlNjQsICdiYXNlNjQnKTtcbiAgfVxuXG4gIGNvbnN0IGNsaWVudElwID0gZ2V0Q2xpZW50SXAocmVxKTtcbiAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZyB8fCBDb25maWcuZ2V0KGluZm8uYXBwSWQsIG1vdW50KTtcbiAgaWYgKGNvbmZpZy5zdGF0ZSAmJiBjb25maWcuc3RhdGUgIT09ICdvaycpIHtcbiAgICByZXMuc3RhdHVzKDUwMCk7XG4gICAgcmVzLmpzb24oe1xuICAgICAgY29kZTogUGFyc2UuRXJyb3IuSU5URVJOQUxfU0VSVkVSX0VSUk9SLFxuICAgICAgZXJyb3I6IGBJbnZhbGlkIHNlcnZlciBzdGF0ZTogJHtjb25maWcuc3RhdGV9YCxcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFyZXEuY29uZmlnKSB7XG4gICAgYXdhaXQgY29uZmlnLmxvYWRLZXlzKCk7XG4gIH1cblxuICBpbmZvLmFwcCA9IEFwcENhY2hlLmdldChpbmZvLmFwcElkKTtcbiAgcmVxLmNvbmZpZyA9IGNvbmZpZztcbiAgcmVxLmNvbmZpZy5oZWFkZXJzID0gcmVxLmhlYWRlcnMgfHwge307XG4gIHJlcS5jb25maWcuaXAgPSBjbGllbnRJcDtcbiAgcmVxLmluZm8gPSBpbmZvO1xuXG4gIC8vIFNraXAga2V5IGRldGVjdGlvbiBpZiBhbHJlYWR5IHJlc29sdmVkIGJ5IGhhbmRsZVBhcnNlQXV0aCAoaGVhZGVyLWJhc2VkKS5cbiAgLy8gT25seSByZXNvbHZlIGhlcmUgZm9yIGJvZHktYmFzZWQgX01hc3RlcktleSAoaW5mby5tYXN0ZXJLZXkgbWF5IGNvbWUgZnJvbSBib2R5KS5cbiAgaWYgKCFyZXEuYXV0aCB8fCAoIXJlcS5hdXRoLmlzTWFzdGVyICYmICFyZXEuYXV0aC5pc01haW50ZW5hbmNlKSkge1xuICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzb2x2ZUtleUF1dGgoe1xuICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAga2V5VmFsdWU6IGluZm8ubWFzdGVyS2V5LFxuICAgICAgbWFpbnRlbmFuY2VLZXlWYWx1ZTogaW5mby5tYWludGVuYW5jZUtleSxcbiAgICAgIGluc3RhbGxhdGlvbklkOiBpbmZvLmluc3RhbGxhdGlvbklkLFxuICAgICAgY2xpZW50SXAsXG4gICAgfSk7XG4gICAgaWYgKHJlc29sdmVkKSB7XG4gICAgICByZXEuYXV0aCA9IHJlc29sdmVkO1xuICAgIH1cbiAgfVxuXG4gIGlmIChyZXEuYXV0aCAmJiAocmVxLmF1dGguaXNNYXN0ZXIgfHwgcmVxLmF1dGguaXNNYWludGVuYW5jZSkpIHtcbiAgICByZXR1cm4gaGFuZGxlUmF0ZUxpbWl0KHJlcSwgcmVzLCBuZXh0KTtcbiAgfVxuXG4gIC8vIENsaWVudCBrZXlzIGFyZSBub3QgcmVxdWlyZWQgaW4gcGFyc2Utc2VydmVyLCBidXQgaWYgYW55IGhhdmUgYmVlbiBjb25maWd1cmVkIGluIHRoZSBzZXJ2ZXIsIHZhbGlkYXRlIHRoZW1cbiAgLy8gIHRvIHByZXNlcnZlIG9yaWdpbmFsIGJlaGF2aW9yLlxuICBjb25zdCBrZXlzID0gWydjbGllbnRLZXknLCAnamF2YXNjcmlwdEtleScsICdkb3ROZXRLZXknLCAncmVzdEFQSUtleSddO1xuICBjb25zdCBvbmVLZXlDb25maWd1cmVkID0ga2V5cy5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gcmVxLmNvbmZpZ1trZXldICE9PSB1bmRlZmluZWQ7XG4gIH0pO1xuICBjb25zdCBvbmVLZXlNYXRjaGVzID0ga2V5cy5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gcmVxLmNvbmZpZ1trZXldICE9PSB1bmRlZmluZWQgJiYgaW5mb1trZXldID09PSByZXEuY29uZmlnW2tleV07XG4gIH0pO1xuXG4gIGlmIChvbmVLZXlDb25maWd1cmVkICYmICFvbmVLZXlNYXRjaGVzKSB7XG4gICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgfVxuXG4gIGlmIChtYXRjaGVzRXhhY3RSb3V0ZShyZXEucGF0aCwgJy9sb2dpbicpKSB7XG4gICAgZGVsZXRlIGluZm8uc2Vzc2lvblRva2VuO1xuICB9XG5cbiAgaWYgKHJlcS51c2VyRnJvbUpXVCkge1xuICAgIHJlcS5hdXRoID0gbmV3IGF1dGguQXV0aCh7XG4gICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICBpbnN0YWxsYXRpb25JZDogaW5mby5pbnN0YWxsYXRpb25JZCxcbiAgICAgIGlzTWFzdGVyOiBmYWxzZSxcbiAgICAgIHVzZXI6IHJlcS51c2VyRnJvbUpXVCxcbiAgICB9KTtcbiAgICByZXR1cm4gaGFuZGxlUmF0ZUxpbWl0KHJlcSwgcmVzLCBuZXh0KTtcbiAgfVxuXG4gIGlmICghaW5mby5zZXNzaW9uVG9rZW4pIHtcbiAgICByZXEuYXV0aCA9IG5ldyBhdXRoLkF1dGgoe1xuICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAgaW5zdGFsbGF0aW9uSWQ6IGluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICBpc01hc3RlcjogZmFsc2UsXG4gICAgfSk7XG4gIH1cbiAgaGFuZGxlUmF0ZUxpbWl0KHJlcSwgcmVzLCBuZXh0KTtcbn1cblxuY29uc3QgaGFuZGxlUmF0ZUxpbWl0ID0gYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gIGNvbnN0IHJhdGVMaW1pdHMgPSByZXEuY29uZmlnLnJhdGVMaW1pdHMgfHwgW107XG4gIHRyeSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICByYXRlTGltaXRzLm1hcChhc3luYyBsaW1pdCA9PiB7XG4gICAgICAgIGNvbnN0IHBhdGhFeHAgPSBsaW1pdC5wYXRoLnJlZ2V4cCB8fCBsaW1pdC5wYXRoO1xuICAgICAgICBpZiAocGF0aEV4cC50ZXN0KHJlcS5wYXRoKSkge1xuICAgICAgICAgIGF3YWl0IGxpbWl0LmhhbmRsZXIocmVxLCByZXMsIGVyciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIGlmIChlcnIuY29kZSA9PT0gUGFyc2UuRXJyb3IuQ09OTkVDVElPTl9GQUlMRUQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVxLmNvbmZpZy5sb2dnZXJDb250cm9sbGVyLmVycm9yKFxuICAgICAgICAgICAgICAgICdBbiB1bmtub3duIGVycm9yIG9jY3VyZWQgd2hlbiBhdHRlbXB0aW5nIHRvIGFwcGx5IHRoZSByYXRlIGxpbWl0ZXI6ICcsXG4gICAgICAgICAgICAgICAgZXJyXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXMuc3RhdHVzKDQyOSk7XG4gICAgcmVzLmpzb24oeyBjb2RlOiBQYXJzZS5FcnJvci5DT05ORUNUSU9OX0ZBSUxFRCwgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIG5leHQoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVQYXJzZVNlc3Npb24gPSBhc3luYyAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBpbmZvID0gcmVxLmluZm87XG4gICAgaWYgKHJlcS5hdXRoIHx8IChtYXRjaGVzRXhhY3RSb3V0ZShyZXEucGF0aCwgJy9zZXNzaW9ucy9tZScpICYmIHJlcS5tZXRob2QgPT09ICdHRVQnKSkge1xuICAgICAgbmV4dCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgcmVxdWVzdEF1dGggPSBudWxsO1xuICAgIGlmIChcbiAgICAgIGluZm8uc2Vzc2lvblRva2VuICYmXG4gICAgICBtYXRjaGVzRXhhY3RSb3V0ZShyZXEucGF0aCwgJy91cGdyYWRlVG9SZXZvY2FibGVTZXNzaW9uJykgJiZcbiAgICAgIGluZm8uc2Vzc2lvblRva2VuLmluZGV4T2YoJ3I6JykgIT0gMFxuICAgICkge1xuICAgICAgcmVxdWVzdEF1dGggPSBhd2FpdCBhdXRoLmdldEF1dGhGb3JMZWdhY3lTZXNzaW9uVG9rZW4oe1xuICAgICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICAgIGluc3RhbGxhdGlvbklkOiBpbmZvLmluc3RhbGxhdGlvbklkLFxuICAgICAgICBzZXNzaW9uVG9rZW46IGluZm8uc2Vzc2lvblRva2VuLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3RBdXRoID0gYXdhaXQgYXV0aC5nZXRBdXRoRm9yU2Vzc2lvblRva2VuKHtcbiAgICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAgICBpbnN0YWxsYXRpb25JZDogaW5mby5pbnN0YWxsYXRpb25JZCxcbiAgICAgICAgc2Vzc2lvblRva2VuOiBpbmZvLnNlc3Npb25Ub2tlbixcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXEuYXV0aCA9IHJlcXVlc3RBdXRoO1xuICAgIG5leHQoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBQYXJzZS5FcnJvcikge1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIExvZyBmdWxsIGVycm9yIGRldGFpbHMgaW50ZXJuYWxseSwgYnV0IGRvbid0IGV4cG9zZSB0byBjbGllbnRcbiAgICByZXEuY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIuZXJyb3IoJ2Vycm9yIGdldHRpbmcgYXV0aCBmb3Igc2Vzc2lvblRva2VuJywgZXJyb3IpO1xuICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLlVOS05PV05fRVJST1IsICdVbmtub3duIGVycm9yJykpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBnZXRDbGllbnRJcChyZXEpIHtcbiAgcmV0dXJuIHJlcS5pcDtcbn1cblxuZnVuY3Rpb24gaHR0cEF1dGgocmVxKSB7XG4gIGlmICghKHJlcS5yZXEgfHwgcmVxKS5oZWFkZXJzLmF1dGhvcml6YXRpb24pIHsgcmV0dXJuOyB9XG5cbiAgdmFyIGhlYWRlciA9IChyZXEucmVxIHx8IHJlcSkuaGVhZGVycy5hdXRob3JpemF0aW9uO1xuICB2YXIgYXBwSWQsIG1hc3RlcktleSwgamF2YXNjcmlwdEtleTtcblxuICAvLyBwYXJzZSBoZWFkZXJcbiAgdmFyIGF1dGhQcmVmaXggPSAnYmFzaWMgJztcblxuICB2YXIgbWF0Y2ggPSBoZWFkZXIudG9Mb3dlckNhc2UoKS5pbmRleE9mKGF1dGhQcmVmaXgpO1xuXG4gIGlmIChtYXRjaCA9PSAwKSB7XG4gICAgdmFyIGVuY29kZWRBdXRoID0gaGVhZGVyLnN1YnN0cmluZyhhdXRoUHJlZml4Lmxlbmd0aCwgaGVhZGVyLmxlbmd0aCk7XG4gICAgdmFyIGNyZWRlbnRpYWxzID0gZGVjb2RlQmFzZTY0KGVuY29kZWRBdXRoKS5zcGxpdCgnOicpO1xuXG4gICAgaWYgKGNyZWRlbnRpYWxzLmxlbmd0aCA9PSAyKSB7XG4gICAgICBhcHBJZCA9IGNyZWRlbnRpYWxzWzBdO1xuICAgICAgdmFyIGtleSA9IGNyZWRlbnRpYWxzWzFdO1xuXG4gICAgICB2YXIganNLZXlQcmVmaXggPSAnamF2YXNjcmlwdC1rZXk9JztcblxuICAgICAgdmFyIG1hdGNoS2V5ID0ga2V5LmluZGV4T2YoanNLZXlQcmVmaXgpO1xuICAgICAgaWYgKG1hdGNoS2V5ID09IDApIHtcbiAgICAgICAgamF2YXNjcmlwdEtleSA9IGtleS5zdWJzdHJpbmcoanNLZXlQcmVmaXgubGVuZ3RoLCBrZXkubGVuZ3RoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1hc3RlcktleSA9IGtleTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBhcHBJZDogYXBwSWQsIG1hc3RlcktleTogbWFzdGVyS2V5LCBqYXZhc2NyaXB0S2V5OiBqYXZhc2NyaXB0S2V5IH07XG59XG5cbmZ1bmN0aW9uIGRlY29kZUJhc2U2NChzdHIpIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKHN0ciwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGxvd0Nyb3NzRG9tYWluKGFwcElkKSB7XG4gIHJldHVybiAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KGFwcElkLCBnZXRNb3VudEZvclJlcXVlc3QocmVxKSk7XG4gICAgbGV0IGFsbG93SGVhZGVycyA9IERFRkFVTFRfQUxMT1dFRF9IRUFERVJTO1xuICAgIGlmIChjb25maWcgJiYgY29uZmlnLmFsbG93SGVhZGVycykge1xuICAgICAgYWxsb3dIZWFkZXJzICs9IGAsICR7Y29uZmlnLmFsbG93SGVhZGVycy5qb2luKCcsICcpfWA7XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZU9yaWdpbnMgPVxuICAgICAgdHlwZW9mIGNvbmZpZz8uYWxsb3dPcmlnaW4gPT09ICdzdHJpbmcnID8gW2NvbmZpZy5hbGxvd09yaWdpbl0gOiBjb25maWc/LmFsbG93T3JpZ2luID8/IFsnKiddO1xuICAgIGNvbnN0IHJlcXVlc3RPcmlnaW4gPSByZXEuaGVhZGVycy5vcmlnaW47XG4gICAgY29uc3QgYWxsb3dPcmlnaW5zID1cbiAgICAgIHJlcXVlc3RPcmlnaW4gJiYgYmFzZU9yaWdpbnMuaW5jbHVkZXMocmVxdWVzdE9yaWdpbikgPyByZXF1ZXN0T3JpZ2luIDogYmFzZU9yaWdpbnNbMF07XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJywgYWxsb3dPcmlnaW5zKTtcbiAgICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJywgJ0dFVCxQVVQsUE9TVCxERUxFVEUsT1BUSU9OUycpO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnLCBhbGxvd0hlYWRlcnMpO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzJywgJ1gtUGFyc2UtSm9iLVN0YXR1cy1JZCwgWC1QYXJzZS1QdXNoLVN0YXR1cy1JZCcpO1xuICAgIC8vIGludGVyY2VwdCBPUFRJT05TIG1ldGhvZFxuICAgIGlmICgnT1BUSU9OUycgPT0gcmVxLm1ldGhvZCkge1xuICAgICAgcmVzLnNlbmRTdGF0dXMoMjAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dCgpO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbG93TWV0aG9kT3ZlcnJpZGUocmVxLCByZXMsIG5leHQpIHtcbiAgaWYgKHJlcS5tZXRob2QgPT09ICdQT1NUJyAmJiByZXEuYm9keT8uX21ldGhvZCkge1xuICAgIGlmICh0eXBlb2YgcmVxLmJvZHkuX21ldGhvZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJlcS5vcmlnaW5hbE1ldGhvZCA9IHJlcS5tZXRob2Q7XG4gICAgICByZXEubWV0aG9kID0gcmVxLmJvZHkuX21ldGhvZC50b1VwcGVyQ2FzZSgpO1xuICAgIH1cbiAgICBkZWxldGUgcmVxLmJvZHkuX21ldGhvZDtcbiAgfVxuICBuZXh0KCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVLZXlBdXRoKHsgY29uZmlnLCBrZXlWYWx1ZSwgbWFpbnRlbmFuY2VLZXlWYWx1ZSwgaW5zdGFsbGF0aW9uSWQsIGNsaWVudElwIH0pIHtcbiAgaWYgKG1haW50ZW5hbmNlS2V5VmFsdWUgJiYgbWFpbnRlbmFuY2VLZXlWYWx1ZSA9PT0gY29uZmlnLm1haW50ZW5hbmNlS2V5KSB7XG4gICAgaWYgKGNoZWNrSXAoY2xpZW50SXAsIGNvbmZpZy5tYWludGVuYW5jZUtleUlwcyB8fCBbXSwgY29uZmlnLm1haW50ZW5hbmNlS2V5SXBzU3RvcmUpKSB7XG4gICAgICByZXR1cm4gbmV3IGF1dGguQXV0aCh7IGNvbmZpZywgaW5zdGFsbGF0aW9uSWQsIGlzTWFpbnRlbmFuY2U6IHRydWUgfSk7XG4gICAgfVxuICAgIGNvbnN0IGxvZyA9IGNvbmZpZy5sb2dnZXJDb250cm9sbGVyIHx8IGRlZmF1bHRMb2dnZXI7XG4gICAgbG9nLmVycm9yKFxuICAgICAgYFJlcXVlc3QgdXNpbmcgbWFpbnRlbmFuY2Uga2V5IHJlamVjdGVkIGFzIHRoZSByZXF1ZXN0IElQIGFkZHJlc3MgJyR7Y2xpZW50SXB9JyBpcyBub3Qgc2V0IGluIFBhcnNlIFNlcnZlciBvcHRpb24gJ21haW50ZW5hbmNlS2V5SXBzJy5gXG4gICAgKTtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcigpO1xuICAgIGVycm9yLnN0YXR1cyA9IDQwMztcbiAgICBlcnJvci5tZXNzYWdlID0gJ3VuYXV0aG9yaXplZCc7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbiAgY29uc3QgbWFzdGVyS2V5ID0gYXdhaXQgY29uZmlnLmxvYWRNYXN0ZXJLZXkoKTtcbiAgaWYgKGtleVZhbHVlID09PSBtYXN0ZXJLZXkpIHtcbiAgICBpZiAoY2hlY2tJcChjbGllbnRJcCwgY29uZmlnLm1hc3RlcktleUlwcyB8fCBbXSwgY29uZmlnLm1hc3RlcktleUlwc1N0b3JlKSkge1xuICAgICAgcmV0dXJuIG5ldyBhdXRoLkF1dGgoeyBjb25maWcsIGluc3RhbGxhdGlvbklkLCBpc01hc3RlcjogdHJ1ZSB9KTtcbiAgICB9XG4gICAgY29uc3QgbG9nID0gY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIgfHwgZGVmYXVsdExvZ2dlcjtcbiAgICBsb2cuZXJyb3IoXG4gICAgICBgUmVxdWVzdCB1c2luZyBtYXN0ZXIga2V5IHJlamVjdGVkIGFzIHRoZSByZXF1ZXN0IElQIGFkZHJlc3MgJyR7Y2xpZW50SXB9JyBpcyBub3Qgc2V0IGluIFBhcnNlIFNlcnZlciBvcHRpb24gJ21hc3RlcktleUlwcycuYFxuICAgICk7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKTtcbiAgICBlcnJvci5zdGF0dXMgPSA0MDM7XG4gICAgZXJyb3IubWVzc2FnZSA9ICd1bmF1dGhvcml6ZWQnO1xuICAgIHRocm93IGVycm9yO1xuICB9XG4gIGlmIChcbiAgICBrZXlWYWx1ZSAmJlxuICAgIHR5cGVvZiBjb25maWcucmVhZE9ubHlNYXN0ZXJLZXkgIT09ICd1bmRlZmluZWQnICYmXG4gICAgY29uZmlnLnJlYWRPbmx5TWFzdGVyS2V5ICYmXG4gICAga2V5VmFsdWUgPT09IGNvbmZpZy5yZWFkT25seU1hc3RlcktleVxuICApIHtcbiAgICBpZiAoY2hlY2tJcChjbGllbnRJcCwgY29uZmlnLnJlYWRPbmx5TWFzdGVyS2V5SXBzIHx8IFtdLCBjb25maWcucmVhZE9ubHlNYXN0ZXJLZXlJcHNTdG9yZSkpIHtcbiAgICAgIHJldHVybiBuZXcgYXV0aC5BdXRoKHsgY29uZmlnLCBpbnN0YWxsYXRpb25JZCwgaXNNYXN0ZXI6IHRydWUsIGlzUmVhZE9ubHk6IHRydWUgfSk7XG4gICAgfVxuICAgIGNvbnN0IGxvZyA9IGNvbmZpZy5sb2dnZXJDb250cm9sbGVyIHx8IGRlZmF1bHRMb2dnZXI7XG4gICAgbG9nLmVycm9yKFxuICAgICAgYFJlcXVlc3QgdXNpbmcgcmVhZC1vbmx5IG1hc3RlciBrZXkgcmVqZWN0ZWQgYXMgdGhlIHJlcXVlc3QgSVAgYWRkcmVzcyAnJHtjbGllbnRJcH0nIGlzIG5vdCBzZXQgaW4gUGFyc2UgU2VydmVyIG9wdGlvbiAncmVhZE9ubHlNYXN0ZXJLZXlJcHMnLmBcbiAgICApO1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCk7XG4gICAgZXJyb3Iuc3RhdHVzID0gNDAzO1xuICAgIGVycm9yLm1lc3NhZ2UgPSAndW5hdXRob3JpemVkJztcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZVBhcnNlQXV0aChhcHBJZCkge1xuICByZXR1cm4gYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgY29uc3QgbW91bnQgPSBnZXRNb3VudEZvclJlcXVlc3QocmVxKTtcbiAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KGFwcElkLCBtb3VudCk7XG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgfVxuICAgIHJlcS5jb25maWcgPSBjb25maWc7XG4gICAgY29uc3QgY2xpZW50SXAgPSBnZXRDbGllbnRJcChyZXEpO1xuICAgIHJlcS5jb25maWcuaXAgPSBjbGllbnRJcDtcbiAgICBhd2FpdCBjb25maWcubG9hZEtleXMoKTtcbiAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHJlc29sdmVLZXlBdXRoKHtcbiAgICAgIGNvbmZpZyxcbiAgICAgIGtleVZhbHVlOiByZXEuZ2V0KCdYLVBhcnNlLU1hc3Rlci1LZXknKSB8fCBudWxsLFxuICAgICAgbWFpbnRlbmFuY2VLZXlWYWx1ZTogcmVxLmdldCgnWC1QYXJzZS1NYWludGVuYW5jZS1LZXknKSB8fCBudWxsLFxuICAgICAgaW5zdGFsbGF0aW9uSWQ6IHJlcS5nZXQoJ1gtUGFyc2UtSW5zdGFsbGF0aW9uLUlkJykgfHwgJ2Nsb3VkJyxcbiAgICAgIGNsaWVudElwLFxuICAgIH0pO1xuICAgIGlmIChyZXNvbHZlZCkge1xuICAgICAgcmVxLmF1dGggPSByZXNvbHZlZDtcbiAgICB9XG4gICAgcmV0dXJuIG5leHQoKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZVBhcnNlSGVhbHRoKG9wdGlvbnMpIHtcbiAgcmV0dXJuIChyZXEsIHJlcykgPT4ge1xuICAgIHJlcy5zdGF0dXMob3B0aW9ucy5zdGF0ZSA9PT0gJ29rJyA/IDIwMCA6IDUwMyk7XG4gICAgaWYgKG9wdGlvbnMuc3RhdGUgPT09ICdzdGFydGluZycpIHtcbiAgICAgIHJlcy5zZXQoJ1JldHJ5LUFmdGVyJywgMSk7XG4gICAgfVxuICAgIHJlcy5qc29uKHtcbiAgICAgIHN0YXR1czogb3B0aW9ucy5zdGF0ZSxcbiAgICB9KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUm91dGVBbGxvd0xpc3RQYXRoKHBhdGgsIG1vdW50KSB7XG4gIGxldCBub3JtYWxpemVkID0gcGF0aDtcbiAgaWYgKG1vdW50KSB7XG4gICAgY29uc3QgbW91bnRQYXRoID0gbmV3IFVSTChtb3VudCkucGF0aG5hbWU7XG4gICAgaWYgKG5vcm1hbGl6ZWQuc3RhcnRzV2l0aChtb3VudFBhdGgpKSB7XG4gICAgICBub3JtYWxpemVkID0gbm9ybWFsaXplZC5zdWJzdHJpbmcobW91bnRQYXRoLmxlbmd0aCk7XG4gICAgfVxuICB9XG4gIGlmIChub3JtYWxpemVkLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVkLnN1YnN0cmluZygxKTtcbiAgfVxuICBpZiAobm9ybWFsaXplZC5lbmRzV2l0aCgnLycpKSB7XG4gICAgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQuc3Vic3RyaW5nKDAsIG5vcm1hbGl6ZWQubGVuZ3RoIC0gMSk7XG4gIH1cbiAgY29uc3QgcXVlcnlJbmRleCA9IG5vcm1hbGl6ZWQuaW5kZXhPZignPycpO1xuICBpZiAocXVlcnlJbmRleCAhPT0gLTEpIHtcbiAgICBub3JtYWxpemVkID0gbm9ybWFsaXplZC5zdWJzdHJpbmcoMCwgcXVlcnlJbmRleCk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbi8vIENhY2hlIG9mIGNvbXBpbGVkIGV4YWN0LXJvdXRlIG1hdGNoZXJzLCBrZXllZCBieSByb3V0ZS4gTWlycm9ycyBob3cgYGFkZFJhdGVMaW1pdGAgY29tcGlsZXMgYVxuLy8gcm91dGUncyBgcGF0aFRvUmVnZXhwYCBvbmNlIGFuZCByZXVzZXMgaXQsIGF2b2lkaW5nIHJlY29tcGlsYXRpb24gb24gZXZlcnkgcmVxdWVzdC5cbmNvbnN0IGV4YWN0Um91dGVSZWdleHBDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGBwYXRoYCByZXNvbHZlcyB0byB0aGUgZ2l2ZW4gZXhhY3Qgc3RhdGljIGByb3V0ZWAsIHVzaW5nIHRoZSBzYW1lXG4gKiBgcGF0aC10by1yZWdleHBgIG1hdGNoaW5nIHRoYXQgdGhlIEV4cHJlc3Mgcm91dGVyIGFuZCB0aGUgcmF0ZSBsaW1pdGVyIHVzZSAoY2FzZS1pbnNlbnNpdGl2ZVxuICogYW5kIHRyYWlsaW5nLXNsYXNoLXRvbGVyYW50IGJ5IGRlZmF1bHQpLiBQYXRoLWxpdGVyYWwgY2hlY2tzIOKAlCBzdWNoIGFzIGRldGVjdGluZyBgL2xvZ2luYCB0b1xuICogZHJvcCB0aGUgaW5ib3VuZCBzZXNzaW9uIHRva2VuIOKAlCBtdXN0IHVzZSB0aGlzIHNvIHRoZXkgc3RheSBjb25zaXN0ZW50IHdpdGggaG93IHRoZSByb3V0ZXJcbiAqIGFjdHVhbGx5IGRpc3BhdGNoZXMgdGhlIHJlcXVlc3QsIGluc3RlYWQgb2YgcmUtZGVyaXZpbmcgdGhlIG1hdGNoaW5nIHJ1bGVzIGJ5IGhhbmQuXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgcmVxdWVzdCBwYXRoIChlLmcuIGByZXEucGF0aGAgb3IgYSBiYXRjaCBzdWItcmVxdWVzdCByb3V0YWJsZSBwYXRoKS5cbiAqIEBwYXJhbSB7c3RyaW5nfSByb3V0ZSBUaGUgZXhhY3Qgc3RhdGljIHJvdXRlIHRvIG1hdGNoIChlLmcuIGAvbG9naW5gKS5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hlc0V4YWN0Um91dGUocGF0aCwgcm91dGUpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoIWV4YWN0Um91dGVSZWdleHBDYWNoZVtyb3V0ZV0pIHtcbiAgICBleGFjdFJvdXRlUmVnZXhwQ2FjaGVbcm91dGVdID0gcGF0aFRvUmVnZXhwKHJvdXRlKS5yZWdleHA7XG4gIH1cbiAgcmV0dXJuIGV4YWN0Um91dGVSZWdleHBDYWNoZVtyb3V0ZV0udGVzdChwYXRoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUm91dGVBbGxvd2VkKHBhdGgsIGNvbmZpZywgYXV0aCkge1xuICBpZiAoIWNvbmZpZyB8fCBjb25maWcucm91dGVBbGxvd0xpc3QgPT09IHVuZGVmaW5lZCB8fCBjb25maWcucm91dGVBbGxvd0xpc3QgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoYXV0aCAmJiAoYXV0aC5pc01hc3RlciB8fCBhdXRoLmlzTWFpbnRlbmFuY2UpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVJvdXRlQWxsb3dMaXN0UGF0aChwYXRoLCBjb25maWcubW91bnQpO1xuICBjb25zdCByZWdleGVzID0gY29uZmlnLl9yb3V0ZUFsbG93TGlzdFJlZ2V4IHx8IFtdO1xuICBmb3IgKGNvbnN0IHJlZ2V4IG9mIHJlZ2V4ZXMpIHtcbiAgICBpZiAocmVnZXgudGVzdChub3JtYWxpemVkKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuZm9yY2VSb3V0ZUFsbG93TGlzdChyZXEsIHJlcywgbmV4dCkge1xuICBpZiAoaXNSb3V0ZUFsbG93ZWQocmVxLm9yaWdpbmFsVXJsLCByZXEuY29uZmlnLCByZXEuYXV0aCkpIHtcbiAgICByZXR1cm4gbmV4dCgpO1xuICB9XG4gIGNvbnN0IHBhdGggPSBub3JtYWxpemVSb3V0ZUFsbG93TGlzdFBhdGgocmVxLm9yaWdpbmFsVXJsLCByZXEuY29uZmlnPy5tb3VudCk7XG4gIHRocm93IGNyZWF0ZVNhbml0aXplZEVycm9yKFxuICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgYFJvdXRlIG5vdCBhbGxvd2VkIGJ5IHJvdXRlQWxsb3dMaXN0OiAke3JlcS5tZXRob2R9ICR7cGF0aH1gLFxuICAgIHJlcS5jb25maWdcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZVBhcnNlRXJyb3JzKGVyciwgcmVxLCByZXMsIG5leHQpIHtcbiAgY29uc3QgbG9nID0gKHJlcS5jb25maWcgJiYgcmVxLmNvbmZpZy5sb2dnZXJDb250cm9sbGVyKSB8fCBkZWZhdWx0TG9nZ2VyO1xuICBpZiAoZXJyIGluc3RhbmNlb2YgUGFyc2UuRXJyb3IpIHtcbiAgICBpZiAocmVxLmNvbmZpZyAmJiByZXEuY29uZmlnLmVuYWJsZUV4cHJlc3NFcnJvckhhbmRsZXIpIHtcbiAgICAgIHJldHVybiBuZXh0KGVycik7XG4gICAgfVxuICAgIGNvbnN0IHNpZ251cFVzZXJuYW1lVGFrZW5MZXZlbCA9XG4gICAgICByZXEuY29uZmlnPy5sb2dMZXZlbHM/LnNpZ251cFVzZXJuYW1lVGFrZW4gfHwgJ2luZm8nO1xuICAgIGxldCBodHRwU3RhdHVzO1xuICAgIC8vIFRPRE86IGZpbGwgb3V0IHRoaXMgbWFwcGluZ1xuICAgIHN3aXRjaCAoZXJyLmNvZGUpIHtcbiAgICAgIGNhc2UgUGFyc2UuRXJyb3IuSU5URVJOQUxfU0VSVkVSX0VSUk9SOlxuICAgICAgICBodHRwU3RhdHVzID0gNTAwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORDpcbiAgICAgICAgaHR0cFN0YXR1cyA9IDQwNDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBodHRwU3RhdHVzID0gNDAwO1xuICAgIH1cbiAgICByZXMuc3RhdHVzKGh0dHBTdGF0dXMpO1xuICAgIHJlcy5qc29uKHsgY29kZTogZXJyLmNvZGUsIGVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAgICBpZiAoZXJyLmNvZGUgPT09IFBhcnNlLkVycm9yLlVTRVJOQU1FX1RBS0VOKSB7XG4gICAgICBpZiAoc2lnbnVwVXNlcm5hbWVUYWtlbkxldmVsICE9PSAnc2lsZW50Jykge1xuICAgICAgICBjb25zdCBsb2dnZXJNZXRob2QgPVxuICAgICAgICAgIHR5cGVvZiBsb2dbc2lnbnVwVXNlcm5hbWVUYWtlbkxldmVsXSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyBsb2dbc2lnbnVwVXNlcm5hbWVUYWtlbkxldmVsXS5iaW5kKGxvZylcbiAgICAgICAgICAgIDogbG9nLmVycm9yLmJpbmQobG9nKTtcbiAgICAgICAgbG9nZ2VyTWV0aG9kKCdQYXJzZSBlcnJvcjogJywgZXJyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmVycm9yKCdQYXJzZSBlcnJvcjogJywgZXJyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZXJyLnN0YXR1cyAmJiBlcnIubWVzc2FnZSkge1xuICAgIHJlcy5zdGF0dXMoZXJyLnN0YXR1cyk7XG4gICAgcmVzLmpzb24oeyBlcnJvcjogZXJyLm1lc3NhZ2UgfSk7XG4gICAgaWYgKCEocHJvY2VzcyAmJiBwcm9jZXNzLmVudi5URVNUSU5HKSkge1xuICAgICAgbmV4dChlcnIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsb2cuZXJyb3IoJ1VuY2F1Z2h0IGludGVybmFsIHNlcnZlciBlcnJvci4nLCBlcnIsIGVyci5zdGFjayk7XG4gICAgcmVzLnN0YXR1cyg1MDApO1xuICAgIHJlcy5qc29uKHtcbiAgICAgIGNvZGU6IFBhcnNlLkVycm9yLklOVEVSTkFMX1NFUlZFUl9FUlJPUixcbiAgICAgIG1lc3NhZ2U6ICdJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IuJyxcbiAgICB9KTtcbiAgICBpZiAoIShwcm9jZXNzICYmIHByb2Nlc3MuZW52LlRFU1RJTkcpKSB7XG4gICAgICBuZXh0KGVycik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmZvcmNlTWFzdGVyS2V5QWNjZXNzKHJlcSwgcmVzLCBuZXh0KSB7XG4gIGlmICghcmVxLmF1dGguaXNNYXN0ZXIpIHtcbiAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsICd1bmF1dGhvcml6ZWQ6IG1hc3RlciBrZXkgaXMgcmVxdWlyZWQnLCByZXEuY29uZmlnKTtcbiAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgcmVzLmVuZChge1wiZXJyb3JcIjpcIiR7ZXJyb3IubWVzc2FnZX1cIn1gKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbmV4dCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MocmVxdWVzdCkge1xuICBpZiAoIXJlcXVlc3QuYXV0aC5pc01hc3Rlcikge1xuICAgIHRocm93IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsICd1bmF1dGhvcml6ZWQ6IG1hc3RlciBrZXkgaXMgcmVxdWlyZWQnLCByZXF1ZXN0LmNvbmZpZyk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIHJlcXVlc3QgaXMgYW4gaW50ZXJuYWwgcmVxdWVzdCwgaS5lLiBvbmUgdGhhdCBvcmlnaW5hdGVzIGZyb20gdGhlIHNhbWUgaG9zdFxuICogd2l0aG91dCBwYXNzaW5nIHRocm91Z2ggYSBwcm94eSwgc3VjaCBhcyBhIENsb3VkIENvZGUgcmVxdWVzdCB0aGF0IGlzIHJvdXRlZCB2aWEgSFRUUCB3aGVuIHRoZVxuICogUGFyc2UgU2VydmVyIG9wdGlvbiBgZGlyZWN0QWNjZXNzYCBpcyBgZmFsc2VgLiBPbmx5IHRoZSByYXcgc29ja2V0IHBlZXIgYWRkcmVzcyBpcyBjb25zdWx0ZWQsXG4gKiBuZXZlciBgcmVxdWVzdC5pcGA6IHVuZGVyIGEgcGVybWlzc2l2ZSBgdHJ1c3RQcm94eWAgc2V0dGluZyBFeHByZXNzIHJlc29sdmVzIGByZXF1ZXN0LmlwYCBmcm9tXG4gKiB0aGUgY2xpZW50LXN1cHBsaWVkIGBYLUZvcndhcmRlZC1Gb3JgIGhlYWRlciwgc28gYSByZW1vdGUgY2xpZW50IGNvdWxkIG90aGVyd2lzZSBwb3NlIGFzIGFuXG4gKiBpbnRlcm5hbCByZXF1ZXN0LiBBIHJlcXVlc3QgdGhhdCBjYXJyaWVzIGFuIGBYLUZvcndhcmRlZC1Gb3JgIGhlYWRlciwgZXZlbiBhbiBlbXB0eSBvbmUsIGhhcyBiZWVuXG4gKiBmb3J3YXJkZWQgYnkgYSBwcm94eSBvciBjcmFmdGVkIGJ5IGEgY2xpZW50IGFuZCBpcyB0aGVyZWZvcmUgbmV2ZXIgaW50ZXJuYWwsIGV2ZW4gaWYgaXQgYXJyaXZlc1xuICogb3ZlciBhIGxvb3BiYWNrIHNvY2tldC5cbiAqIEBwYXJhbSB7T2JqZWN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRvIGV2YWx1YXRlLlxuICogQHJldHVybnMge0Jvb2xlYW59IFdoZXRoZXIgdGhlIHJlcXVlc3QgaXMgaW50ZXJuYWwuXG4gKi9cbmNvbnN0IGlzSW50ZXJuYWxSZXF1ZXN0ID0gcmVxdWVzdCA9PlxuICByZXF1ZXN0LnNvY2tldD8ucmVtb3RlQWRkcmVzcyA9PT0gJzEyNy4wLjAuMScgJiZcbiAgcmVxdWVzdC5oZWFkZXJzPy5bJ3gtZm9yd2FyZGVkLWZvciddID09PSB1bmRlZmluZWQ7XG5cbmV4cG9ydCBjb25zdCBhZGRSYXRlTGltaXQgPSAocm91dGUsIGNvbmZpZywgY2xvdWQpID0+IHtcbiAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnID0gQ29uZmlnLmdldChjb25maWcpO1xuICB9XG4gIGZvciAoY29uc3Qga2V5IGluIHJvdXRlKSB7XG4gICAgaWYgKCFSYXRlTGltaXRPcHRpb25zW2tleV0pIHtcbiAgICAgIHRocm93IGBJbnZhbGlkIHJhdGUgbGltaXQgb3B0aW9uIFwiJHtrZXl9XCJgO1xuICAgIH1cbiAgfVxuICBpZiAoIWNvbmZpZy5yYXRlTGltaXRzKSB7XG4gICAgY29uZmlnLnJhdGVMaW1pdHMgPSBbXTtcbiAgfVxuICBjb25zdCByZWRpc1N0b3JlID0ge1xuICAgIGNvbm5lY3Rpb25Qcm9taXNlOiBQcm9taXNlLnJlc29sdmUoKSxcbiAgICBzdG9yZTogbnVsbCxcbiAgfTtcbiAgaWYgKHJvdXRlLnJlZGlzVXJsKSB7XG4gICAgY29uc3QgbG9nID0gY29uZmlnPy5sb2dnZXJDb250cm9sbGVyIHx8IGRlZmF1bHRMb2dnZXI7XG4gICAgY29uc3QgY2xpZW50ID0gY3JlYXRlQ2xpZW50KHtcbiAgICAgIHVybDogcm91dGUucmVkaXNVcmwsXG4gICAgfSk7XG4gICAgY2xpZW50Lm9uKCdlcnJvcicsIGVyciA9PiB7IGxvZy5lcnJvcignTWlkZGxld2FyZXMgYWRkUmF0ZUxpbWl0IFJlZGlzIGNsaWVudCBlcnJvcicsIHsgZXJyb3I6IGVyciB9KSB9KTtcbiAgICBjbGllbnQub24oJ2Nvbm5lY3QnLCAoKSA9PiB7IH0pO1xuICAgIGNsaWVudC5vbigncmVjb25uZWN0aW5nJywgKCkgPT4geyB9KTtcbiAgICBjbGllbnQub24oJ3JlYWR5JywgKCkgPT4geyB9KTtcbiAgICByZWRpc1N0b3JlLmNvbm5lY3Rpb25Qcm9taXNlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKGNsaWVudC5pc09wZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY2xpZW50LmNvbm5lY3QoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLmVycm9yKGBDb3VsZCBub3QgY29ubmVjdCB0byByZWRpc1VSTCBpbiByYXRlIGxpbWl0OiAke2V9YCk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZWRpc1N0b3JlLmNvbm5lY3Rpb25Qcm9taXNlKCk7XG4gICAgcmVkaXNTdG9yZS5zdG9yZSA9IG5ldyBSZWRpc1N0b3JlKHtcbiAgICAgIHNlbmRDb21tYW5kOiBhc3luYyAoLi4uYXJncykgPT4ge1xuICAgICAgICBhd2FpdCByZWRpc1N0b3JlLmNvbm5lY3Rpb25Qcm9taXNlKCk7XG4gICAgICAgIHJldHVybiBjbGllbnQuc2VuZENvbW1hbmQoYXJncyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIGNvbmZpZy5yYXRlTGltaXRzLnB1c2goe1xuICAgIHBhdGg6IHBhdGhUb1JlZ2V4cChyb3V0ZS5yZXF1ZXN0UGF0aCksXG4gICAgcmVxdWVzdENvdW50OiByb3V0ZS5yZXF1ZXN0Q291bnQsXG4gICAgcmVxdWVzdE1ldGhvZHM6IHJvdXRlLnJlcXVlc3RNZXRob2RzLFxuICAgIGluY2x1ZGVNYXN0ZXJLZXk6IHJvdXRlLmluY2x1ZGVNYXN0ZXJLZXksXG4gICAgaW5jbHVkZUludGVybmFsUmVxdWVzdHM6IHJvdXRlLmluY2x1ZGVJbnRlcm5hbFJlcXVlc3RzLFxuICAgIGVycm9yUmVzcG9uc2VNZXNzYWdlOiByb3V0ZS5lcnJvclJlc3BvbnNlTWVzc2FnZSB8fCBSYXRlTGltaXRPcHRpb25zLmVycm9yUmVzcG9uc2VNZXNzYWdlLmRlZmF1bHQsXG4gICAgaGFuZGxlcjogcmF0ZUxpbWl0KHtcbiAgICAgIHdpbmRvd01zOiByb3V0ZS5yZXF1ZXN0VGltZVdpbmRvdyxcbiAgICAgIG1heDogcm91dGUucmVxdWVzdENvdW50LFxuICAgICAgbWVzc2FnZTogcm91dGUuZXJyb3JSZXNwb25zZU1lc3NhZ2UgfHwgUmF0ZUxpbWl0T3B0aW9ucy5lcnJvclJlc3BvbnNlTWVzc2FnZS5kZWZhdWx0LFxuICAgICAgaGFuZGxlcjogKHJlcXVlc3QsIHJlc3BvbnNlLCBuZXh0LCBvcHRpb25zKSA9PiB7XG4gICAgICAgIHRocm93IHtcbiAgICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5DT05ORUNUSU9OX0ZBSUxFRCxcbiAgICAgICAgICBtZXNzYWdlOiBvcHRpb25zLm1lc3NhZ2UsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgc2tpcDogcmVxdWVzdCA9PiB7XG4gICAgICAgIGlmICghcm91dGUuaW5jbHVkZUludGVybmFsUmVxdWVzdHMgJiYgaXNJbnRlcm5hbFJlcXVlc3QocmVxdWVzdCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGUuaW5jbHVkZU1hc3RlcktleSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGUucmVxdWVzdE1ldGhvZHMpIHtcbiAgICAgICAgICBjb25zdCBtZXRob2RzVG9DaGVjayA9IG5ldyBTZXQoW3JlcXVlc3QubWV0aG9kXSk7XG4gICAgICAgICAgaWYgKHJlcXVlc3QuX2JhdGNoT3JpZ2luYWxNZXRob2QpIHtcbiAgICAgICAgICAgIG1ldGhvZHNUb0NoZWNrLmFkZChyZXF1ZXN0Ll9iYXRjaE9yaWdpbmFsTWV0aG9kKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocm91dGUucmVxdWVzdE1ldGhvZHMpKSB7XG4gICAgICAgICAgICBpZiAoIXJvdXRlLnJlcXVlc3RNZXRob2RzLnNvbWUobSA9PiBtZXRob2RzVG9DaGVjay5oYXMobSkpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKHJvdXRlLnJlcXVlc3RNZXRob2RzKTtcbiAgICAgICAgICAgIGlmICghWy4uLm1ldGhvZHNUb0NoZWNrXS5zb21lKG0gPT4gcmVnRXhwLnRlc3QobSkpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVxdWVzdC5hdXRoPy5pc01hc3RlcjtcbiAgICAgIH0sXG4gICAgICBrZXlHZW5lcmF0b3I6IGFzeW5jIHJlcXVlc3QgPT4ge1xuICAgICAgICBpZiAocm91dGUuem9uZSA9PT0gUGFyc2UuU2VydmVyLlJhdGVMaW1pdFpvbmUuZ2xvYmFsKSB7XG4gICAgICAgICAgcmV0dXJuIHJlcXVlc3QuY29uZmlnLmFwcElkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRva2VuID0gcmVxdWVzdC5pbmZvLnNlc3Npb25Ub2tlbjtcbiAgICAgICAgaWYgKHJvdXRlLnpvbmUgPT09IFBhcnNlLlNlcnZlci5SYXRlTGltaXRab25lLnNlc3Npb24gJiYgdG9rZW4pIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdXRlLnpvbmUgPT09IFBhcnNlLlNlcnZlci5SYXRlTGltaXRab25lLnVzZXIgJiYgdG9rZW4pIHtcbiAgICAgICAgICBpZiAoIXJlcXVlc3QuYXV0aCkge1xuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBoYW5kbGVQYXJzZVNlc3Npb24ocmVxdWVzdCwgbnVsbCwgcmVzb2x2ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVxdWVzdC5hdXRoPy51c2VyPy5pZCAmJiByb3V0ZS56b25lID09PSAndXNlcicpIHtcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0LmF1dGgudXNlci5pZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcXVlc3QuY29uZmlnLmlwO1xuICAgICAgfSxcbiAgICAgIHN0b3JlOiByZWRpc1N0b3JlLnN0b3JlLFxuICAgIH0pLFxuICAgIGNsb3VkLFxuICB9KTtcbiAgQ29uZmlnLnB1dChjb25maWcpO1xufTtcblxuLyoqXG4gKiBEZWR1cGxpY2F0ZXMgYSByZXF1ZXN0IHRvIGVuc3VyZSBpZGVtcG90ZW5jeS4gRHVwbGljYXRlcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgcmVxdWVzdCBJRFxuICogaW4gdGhlIHJlcXVlc3QgaGVhZGVyLiBJZiBhIHJlcXVlc3QgaGFzIG5vIHJlcXVlc3QgSUQsIGl0IGlzIGV4ZWN1dGVkIGFueXdheS5cbiAqIEBwYXJhbSB7Kn0gcmVxIFRoZSByZXF1ZXN0IHRvIGV2YWx1YXRlLlxuICogQHJldHVybnMgUHJvbWlzZTx7fT5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb21pc2VFbnN1cmVJZGVtcG90ZW5jeShyZXEpIHtcbiAgLy8gRW5hYmxlIGZlYXR1cmUgb25seSBmb3IgTW9uZ29EQlxuICBpZiAoXG4gICAgIShcbiAgICAgIHJlcS5jb25maWcuZGF0YWJhc2UuYWRhcHRlciBpbnN0YW5jZW9mIE1vbmdvU3RvcmFnZUFkYXB0ZXIgfHxcbiAgICAgIHJlcS5jb25maWcuZGF0YWJhc2UuYWRhcHRlciBpbnN0YW5jZW9mIFBvc3RncmVzU3RvcmFnZUFkYXB0ZXJcbiAgICApXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuICAvLyBHZXQgcGFyYW1ldGVyc1xuICBjb25zdCBjb25maWcgPSByZXEuY29uZmlnO1xuICBjb25zdCByZXF1ZXN0SWQgPSAoKHJlcSB8fCB7fSkuaGVhZGVycyB8fCB7fSlbJ3gtcGFyc2UtcmVxdWVzdC1pZCddO1xuICBjb25zdCB7IHBhdGhzLCB0dGwgfSA9IGNvbmZpZy5pZGVtcG90ZW5jeU9wdGlvbnM7XG4gIGlmICghcmVxdWVzdElkIHx8ICFjb25maWcuaWRlbXBvdGVuY3lPcHRpb25zKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIC8vIFJlcXVlc3QgcGF0aCBtYXkgY29udGFpbiB0cmFpbGluZyBzbGFzaGVzLCBkZXBlbmRpbmcgb24gdGhlIG9yaWdpbmFsIHJlcXVlc3QsIHNvIHJlbW92ZVxuICAvLyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHNwZWNpZnkgcGF0aHMgaW4gdGhlIGNvbmZpZ3VyYXRpb25cbiAgY29uc3QgcmVxUGF0aCA9IHJlcS5wYXRoLnJlcGxhY2UoL15cXC98XFwvJC8sICcnKTtcbiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgaWRlbXBvdGVuY3kgaXMgZW5hYmxlZCBmb3IgY3VycmVudCByZXF1ZXN0IHBhdGhcbiAgbGV0IG1hdGNoID0gZmFsc2U7XG4gIGZvciAoY29uc3QgcGF0aCBvZiBwYXRocykge1xuICAgIC8vIEFzc3VtZSBvbmUgd2FudHMgYSBwYXRoIHRvIGFsd2F5cyBtYXRjaCBmcm9tIHRoZSBiZWdpbm5pbmcgdG8gcHJldmVudCBhbnkgbWlzdGFrZXNcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAocGF0aC5jaGFyQXQoMCkgPT09ICdeJyA/IHBhdGggOiAnXicgKyBwYXRoKTtcbiAgICBpZiAocmVxUGF0aC5tYXRjaChyZWdleCkpIHtcbiAgICAgIG1hdGNoID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIC8vIFRyeSB0byBzdG9yZSByZXF1ZXN0XG4gIGNvbnN0IGV4cGlyeURhdGUgPSBuZXcgRGF0ZShuZXcgRGF0ZSgpLnNldFNlY29uZHMobmV3IERhdGUoKS5nZXRTZWNvbmRzKCkgKyB0dGwpKTtcbiAgcmV0dXJuIHJlc3RcbiAgICAuY3JlYXRlKGNvbmZpZywgYXV0aC5tYXN0ZXIoY29uZmlnKSwgJ19JZGVtcG90ZW5jeScsIHtcbiAgICAgIHJlcUlkOiByZXF1ZXN0SWQsXG4gICAgICBleHBpcmU6IFBhcnNlLl9lbmNvZGUoZXhwaXJ5RGF0ZSksXG4gICAgfSlcbiAgICAuY2F0Y2goZSA9PiB7XG4gICAgICBpZiAoZS5jb2RlID09IFBhcnNlLkVycm9yLkRVUExJQ0FURV9WQUxVRSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRFVQTElDQVRFX1JFUVVFU1QsICdEdXBsaWNhdGUgcmVxdWVzdCcpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpIHtcbiAgcmVzLnN0YXR1cyg0MDMpO1xuICByZXMuZW5kKCd7XCJlcnJvclwiOlwidW5hdXRob3JpemVkXCJ9Jyk7XG59XG5cbmZ1bmN0aW9uIG1hbGZvcm1lZENvbnRleHQocmVxLCByZXMpIHtcbiAgcmVzLnN0YXR1cyg0MDApO1xuICByZXMuanNvbih7IGNvZGU6IFBhcnNlLkVycm9yLklOVkFMSURfSlNPTiwgZXJyb3I6ICdJbnZhbGlkIG9iamVjdCBmb3IgY29udGV4dC4nIH0pO1xufVxuXG4vKipcbiAqIEV4cHJlc3MgNCBhbGxvd2VkIGEgZG91YmxlIGZvcndhcmQgc2xhc2ggYmV0d2VlbiBhIHJvdXRlIGFuZCByb3V0ZXIuIEFsdGhvdWdoXG4gKiB0aGlzIHNob3VsZCBiZSBjb25zaWRlcmVkIGFuIGFudGktcGF0dGVybiwgd2UgbmVlZCB0byBzdXBwb3J0IGl0IGZvciBiYWNrd2FyZHNcbiAqIGNvbXBhdGliaWxpdHkuXG4gKlxuICogVGVjaG5pY2FsbHkgdmFsaWQgVVJMIHdpdGggZG91YmxlIGZvcm93YXJkIHNsYXNoOlxuICogaHR0cDovL2xvY2FsaG9zdDoxMzM3L3BhcnNlLy9mdW5jdGlvbnMvdGVzdEZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxvd0RvdWJsZUZvcndhcmRTbGFzaChyZXEsIHJlcywgbmV4dCkge1xuICByZXEudXJsID0gcmVxLnVybC5zdGFydHNXaXRoKCcvLycpID8gcmVxLnVybC5zdWJzdHJpbmcoMSkgOiByZXEudXJsO1xuICBuZXh0KCk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLEtBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLEtBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLE9BQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLEtBQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFPLG9CQUFBLEdBQUFSLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUSx1QkFBQSxHQUFBVCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVMsaUJBQUEsR0FBQVYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFVLFlBQUEsR0FBQVYsT0FBQTtBQUNBLElBQUFXLGFBQUEsR0FBQVgsT0FBQTtBQUNBLElBQUFZLGVBQUEsR0FBQWIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFhLE1BQUEsR0FBQWIsT0FBQTtBQUNBLElBQUFjLElBQUEsR0FBQWQsT0FBQTtBQUNBLElB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
849
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2FjaGUiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9VdGlscyIsIl9ub2RlIiwiX0F1dGgiLCJfQ29uZmlnIiwiX2xvZ2dlciIsIl9yZXN0IiwiX01vbmdvU3RvcmFnZUFkYXB0ZXIiLCJfUG9zdGdyZXNTdG9yYWdlQWRhcHRlciIsIl9leHByZXNzUmF0ZUxpbWl0IiwiX0RlZmluaXRpb25zIiwiX3BhdGhUb1JlZ2V4cCIsIl9yYXRlTGltaXRSZWRpcyIsIl9yZWRpcyIsIl9uZXQiLCJfRXJyb3IiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJERUZBVUxUX0FMTE9XRURfSEVBREVSUyIsImV4cG9ydHMiLCJnZXRNb3VudEZvclJlcXVlc3QiLCJyZXEiLCJtb3VudFBhdGhMZW5ndGgiLCJvcmlnaW5hbFVybCIsImxlbmd0aCIsInVybCIsIm1vdW50UGF0aCIsInNsaWNlIiwicHJvdG9jb2wiLCJnZXQiLCJnZXRCbG9ja0xpc3QiLCJpcFJhbmdlTGlzdCIsInN0b3JlIiwiYmxvY2tMaXN0IiwiQmxvY2tMaXN0IiwiZm9yRWFjaCIsImZ1bGxJcCIsInNldCIsImlwIiwibWFzayIsInNwbGl0IiwiYWRkQWRkcmVzcyIsImlzSVB2NCIsImFkZFN1Ym5ldCIsIk51bWJlciIsImNoZWNrSXAiLCJpbmNvbWluZ0lwSXNWNCIsInJlc3VsdCIsImNoZWNrIiwiaW5jbHVkZXMiLCJoYW5kbGVQYXJzZUhlYWRlcnMiLCJyZXMiLCJuZXh0IiwibW91bnQiLCJjb250ZXh0IiwiSlNPTiIsInBhcnNlIiwiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwibWFsZm9ybWVkQ29udGV4dCIsImluZm8iLCJhcHBJZCIsInNlc3Npb25Ub2tlbiIsIm1hc3RlcktleSIsIm1haW50ZW5hbmNlS2V5IiwiaW5zdGFsbGF0aW9uSWQiLCJjbGllbnRLZXkiLCJqYXZhc2NyaXB0S2V5IiwiZG90TmV0S2V5IiwicmVzdEFQSUtleSIsImJhc2ljQXV0aCIsImh0dHBBdXRoIiwiYmFzaWNBdXRoQXBwSWQiLCJBcHBDYWNoZSIsImJvZHkiLCJfbm9Cb2R5IiwiZmlsZVZpYUpTT04iLCJCdWZmZXIiLCJpc0J1ZmZlciIsImludmFsaWRSZXF1ZXN0IiwiX1Jldm9jYWJsZVNlc3Npb24iLCJfQXBwbGljYXRpb25JZCIsIl9KYXZhU2NyaXB0S2V5IiwiX0NsaWVudFZlcnNpb24iLCJfSW5zdGFsbGF0aW9uSWQiLCJfU2Vzc2lvblRva2VuIiwiX01hc3RlcktleSIsIl9jb250ZXh0IiwiVXRpbHMiLCJpc09iamVjdCIsIl9Db250ZW50VHlwZSIsImhlYWRlcnMiLCJiYXNlNjQiLCJmaWxlRGF0YSIsImZyb20iLCJjbGllbnRJcCIsImdldENsaWVudElwIiwiY29uZmlnIiwiQ29uZmlnIiwic3RhdGUiLCJzdGF0dXMiLCJqc29uIiwiY29kZSIsIlBhcnNlIiwiRXJyb3IiLCJJTlRFUk5BTF9TRVJWRVJfRVJST1IiLCJlcnJvciIsImxvYWRLZXlzIiwiYXBwIiwiYXV0aCIsImlzTWFzdGVyIiwiaXNNYWludGVuYW5jZSIsInJlc29sdmVkIiwicmVzb2x2ZUtleUF1dGgiLCJrZXlWYWx1ZSIsIm1haW50ZW5hbmNlS2V5VmFsdWUiLCJoYW5kbGVSYXRlTGltaXQiLCJrZXlzIiwib25lS2V5Q29uZmlndXJlZCIsInNvbWUiLCJrZXkiLCJ1bmRlZmluZWQiLCJvbmVLZXlNYXRjaGVzIiwibWF0Y2hlc0V4YWN0Um91dGUiLCJwYXRoIiwidXNlckZyb21KV1QiLCJBdXRoIiwidXNlciIsInJhdGVMaW1pdHMiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwibGltaXQiLCJwYXRoRXhwIiwicmVnZXhwIiwidGVzdCIsIl9ncmFwaFFMUGF0aCIsImhhbmRsZXIiLCJlcnIiLCJDT05ORUNUSU9OX0ZBSUxFRCIsImxvZ2dlckNvbnRyb2xsZXIiLCJtZXNzYWdlIiwiaGFuZGxlUGFyc2VTZXNzaW9uIiwibWV0aG9kIiwicmVxdWVzdEF1dGgiLCJpbmRleE9mIiwiZ2V0QXV0aEZvckxlZ2FjeVNlc3Npb25Ub2tlbiIsImdldEF1dGhGb3JTZXNzaW9uVG9rZW4iLCJVTktOT1dOX0VSUk9SIiwiYXV0aG9yaXphdGlvbiIsImhlYWRlciIsImF1dGhQcmVmaXgiLCJtYXRjaCIsInRvTG93ZXJDYXNlIiwiZW5jb2RlZEF1dGgiLCJzdWJzdHJpbmciLCJjcmVkZW50aWFscyIsImRlY29kZUJhc2U2NCIsImpzS2V5UHJlZml4IiwibWF0Y2hLZXkiLCJzdHIiLCJhbGxvd0Nyb3NzRG9tYWluIiwiYWxsb3dIZWFkZXJzIiwiam9pbiIsImJhc2VPcmlnaW5zIiwiYWxsb3dPcmlnaW4iLCJyZXF1ZXN0T3JpZ2luIiwib3JpZ2luIiwiYWxsb3dPcmlnaW5zIiwic2VuZFN0YXR1cyIsImFsbG93TWV0aG9kT3ZlcnJpZGUiLCJfbWV0aG9kIiwib3JpZ2luYWxNZXRob2QiLCJ0b1VwcGVyQ2FzZSIsIm1haW50ZW5hbmNlS2V5SXBzIiwibWFpbnRlbmFuY2VLZXlJcHNTdG9yZSIsImxvZyIsImRlZmF1bHRMb2dnZXIiLCJsb2FkTWFzdGVyS2V5IiwibWFzdGVyS2V5SXBzIiwibWFzdGVyS2V5SXBzU3RvcmUiLCJyZWFkT25seU1hc3RlcktleSIsInJlYWRPbmx5TWFzdGVyS2V5SXBzIiwicmVhZE9ubHlNYXN0ZXJLZXlJcHNTdG9yZSIsImlzUmVhZE9ubHkiLCJoYW5kbGVQYXJzZUF1dGgiLCJoYW5kbGVQYXJzZUhlYWx0aCIsIm9wdGlvbnMiLCJub3JtYWxpemVSb3V0ZUFsbG93TGlzdFBhdGgiLCJub3JtYWxpemVkIiwiVVJMIiwicGF0aG5hbWUiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJxdWVyeUluZGV4IiwiZXhhY3RSb3V0ZVJlZ2V4cENhY2hlIiwiY3JlYXRlIiwicm91dGUiLCJwYXRoVG9SZWdleHAiLCJpc1JvdXRlQWxsb3dlZCIsInJvdXRlQWxsb3dMaXN0IiwicmVnZXhlcyIsIl9yb3V0ZUFsbG93TGlzdFJlZ2V4IiwicmVnZXgiLCJlbmZvcmNlUm91dGVBbGxvd0xpc3QiLCJjcmVhdGVTYW5pdGl6ZWRFcnJvciIsIk9QRVJBVElPTl9GT1JCSURERU4iLCJoYW5kbGVQYXJzZUVycm9ycyIsImVuYWJsZUV4cHJlc3NFcnJvckhhbmRsZXIiLCJzaWdudXBVc2VybmFtZVRha2VuTGV2ZWwiLCJsb2dMZXZlbHMiLCJzaWdudXBVc2VybmFtZVRha2VuIiwiaHR0cFN0YXR1cyIsIk9CSkVDVF9OT1RfRk9VTkQiLCJVU0VSTkFNRV9UQUtFTiIsImxvZ2dlck1ldGhvZCIsImJpbmQiLCJwcm9jZXNzIiwiZW52IiwiVEVTVElORyIsInN0YWNrIiwiZW5mb3JjZU1hc3RlcktleUFjY2VzcyIsImNyZWF0ZVNhbml0aXplZEh0dHBFcnJvciIsImVuZCIsInByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzIiwicmVxdWVzdCIsInJlc29sdmUiLCJpc0ludGVybmFsUmVxdWVzdCIsInNvY2tldCIsInJlbW90ZUFkZHJlc3MiLCJhZGRSYXRlTGltaXQiLCJjbG91ZCIsIlJhdGVMaW1pdE9wdGlvbnMiLCJyZWRpc1N0b3JlIiwiY29ubmVjdGlvblByb21pc2UiLCJyZWRpc1VybCIsImNsaWVudCIsImNyZWF0ZUNsaWVudCIsIm9uIiwiaXNPcGVuIiwiY29ubmVjdCIsIlJlZGlzU3RvcmUiLCJzZW5kQ29tbWFuZCIsImFyZ3MiLCJwdXNoIiwicmVxdWVzdFBhdGgiLCJyZXF1ZXN0Q291bnQiLCJyZXF1ZXN0TWV0aG9kcyIsImluY2x1ZGVNYXN0ZXJLZXkiLCJpbmNsdWRlSW50ZXJuYWxSZXF1ZXN0cyIsImVycm9yUmVzcG9uc2VNZXNzYWdlIiwicmF0ZUxpbWl0Iiwid2luZG93TXMiLCJyZXF1ZXN0VGltZVdpbmRvdyIsIm1heCIsInJlc3BvbnNlIiwic2tpcCIsIm1ldGhvZHNUb0NoZWNrIiwiU2V0IiwiX2JhdGNoT3JpZ2luYWxNZXRob2QiLCJhZGQiLCJBcnJheSIsImlzQXJyYXkiLCJtIiwiaGFzIiwicmVnRXhwIiwiUmVnRXhwIiwia2V5R2VuZXJhdG9yIiwiem9uZSIsIlNlcnZlciIsIlJhdGVMaW1pdFpvbmUiLCJnbG9iYWwiLCJ0b2tlbiIsInNlc3Npb24iLCJpZCIsInB1dCIsInByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSIsImRhdGFiYXNlIiwiYWRhcHRlciIsIk1vbmdvU3RvcmFnZUFkYXB0ZXIiLCJQb3N0Z3Jlc1N0b3JhZ2VBZGFwdGVyIiwicmVxdWVzdElkIiwicGF0aHMiLCJ0dGwiLCJpZGVtcG90ZW5jeU9wdGlvbnMiLCJyZXFQYXRoIiwicmVwbGFjZSIsImNoYXJBdCIsImV4cGlyeURhdGUiLCJEYXRlIiwic2V0U2Vjb25kcyIsImdldFNlY29uZHMiLCJyZXN0IiwibWFzdGVyIiwicmVxSWQiLCJleHBpcmUiLCJfZW5jb2RlIiwiY2F0Y2giLCJEVVBMSUNBVEVfVkFMVUUiLCJEVVBMSUNBVEVfUkVRVUVTVCIsIklOVkFMSURfSlNPTiIsImFsbG93RG91YmxlRm9yd2FyZFNsYXNoIl0sInNvdXJjZXMiOlsiLi4vc3JjL21pZGRsZXdhcmVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBcHBDYWNoZSBmcm9tICcuL2NhY2hlJztcbmltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBhdXRoIGZyb20gJy4vQXV0aCc7XG5pbXBvcnQgQ29uZmlnIGZyb20gJy4vQ29uZmlnJztcbmltcG9ydCBkZWZhdWx0TG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCByZXN0IGZyb20gJy4vcmVzdCc7XG5pbXBvcnQgTW9uZ29TdG9yYWdlQWRhcHRlciBmcm9tICcuL0FkYXB0ZXJzL1N0b3JhZ2UvTW9uZ28vTW9uZ29TdG9yYWdlQWRhcHRlcic7XG5pbXBvcnQgUG9zdGdyZXNTdG9yYWdlQWRhcHRlciBmcm9tICcuL0FkYXB0ZXJzL1N0b3JhZ2UvUG9zdGdyZXMvUG9zdGdyZXNTdG9yYWdlQWRhcHRlcic7XG5pbXBvcnQgcmF0ZUxpbWl0IGZyb20gJ2V4cHJlc3MtcmF0ZS1saW1pdCc7XG5pbXBvcnQgeyBSYXRlTGltaXRPcHRpb25zIH0gZnJvbSAnLi9PcHRpb25zL0RlZmluaXRpb25zJztcbmltcG9ydCB7IHBhdGhUb1JlZ2V4cCB9IGZyb20gJ3BhdGgtdG8tcmVnZXhwJztcbmltcG9ydCBSZWRpc1N0b3JlIGZyb20gJ3JhdGUtbGltaXQtcmVkaXMnO1xuaW1wb3J0IHsgY3JlYXRlQ2xpZW50IH0gZnJvbSAncmVkaXMnO1xuaW1wb3J0IHsgQmxvY2tMaXN0LCBpc0lQdjQgfSBmcm9tICduZXQnO1xuaW1wb3J0IHsgY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yLCBjcmVhdGVTYW5pdGl6ZWRFcnJvciB9IGZyb20gJy4vRXJyb3InO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BTExPV0VEX0hFQURFUlMgPVxuICAnWC1QYXJzZS1NYXN0ZXItS2V5LCBYLVBhcnNlLVJFU1QtQVBJLUtleSwgWC1QYXJzZS1KYXZhc2NyaXB0LUtleSwgWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCwgWC1QYXJzZS1DbGllbnQtVmVyc2lvbiwgWC1QYXJzZS1TZXNzaW9uLVRva2VuLCBYLVJlcXVlc3RlZC1XaXRoLCBYLVBhcnNlLVJldm9jYWJsZS1TZXNzaW9uLCBYLVBhcnNlLVJlcXVlc3QtSWQsIENvbnRlbnQtVHlwZSwgUHJhZ21hLCBDYWNoZS1Db250cm9sJztcblxuY29uc3QgZ2V0TW91bnRGb3JSZXF1ZXN0ID0gZnVuY3Rpb24gKHJlcSkge1xuICBjb25zdCBtb3VudFBhdGhMZW5ndGggPSByZXEub3JpZ2luYWxVcmwubGVuZ3RoIC0gcmVxLnVybC5sZW5ndGg7XG4gIGNvbnN0IG1vdW50UGF0aCA9IHJlcS5vcmlnaW5hbFVybC5zbGljZSgwLCBtb3VudFBhdGhMZW5ndGgpO1xuICByZXR1cm4gcmVxLnByb3RvY29sICsgJzovLycgKyByZXEuZ2V0KCdob3N0JykgKyBtb3VudFBhdGg7XG59O1xuXG5jb25zdCBnZXRCbG9ja0xpc3QgPSAoaXBSYW5nZUxpc3QsIHN0b3JlKSA9PiB7XG4gIGlmIChzdG9yZS5nZXQoJ2Jsb2NrTGlzdCcpKSB7IHJldHVybiBzdG9yZS5nZXQoJ2Jsb2NrTGlzdCcpOyB9XG4gIGNvbnN0IGJsb2NrTGlzdCA9IG5ldyBCbG9ja0xpc3QoKTtcbiAgaXBSYW5nZUxpc3QuZm9yRWFjaChmdWxsSXAgPT4ge1xuICAgIGlmIChmdWxsSXAgPT09ICc6Oi8wJyB8fCBmdWxsSXAgPT09ICc6OicgfHwgZnVsbElwID09PSAnOjowJykge1xuICAgICAgc3RvcmUuc2V0KCdhbGxvd0FsbElwdjYnLCB0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGZ1bGxJcCA9PT0gJzAuMC4wLjAvMCcgfHwgZnVsbElwID09PSAnMC4wLjAuMCcpIHtcbiAgICAgIHN0b3JlLnNldCgnYWxsb3dBbGxJcHY0JywgdHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IFtpcCwgbWFza10gPSBmdWxsSXAuc3BsaXQoJy8nKTtcbiAgICBpZiAoIW1hc2spIHtcbiAgICAgIGJsb2NrTGlzdC5hZGRBZGRyZXNzKGlwLCBpc0lQdjQoaXApID8gJ2lwdjQnIDogJ2lwdjYnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmxvY2tMaXN0LmFkZFN1Ym5ldChpcCwgTnVtYmVyKG1hc2spLCBpc0lQdjQoaXApID8gJ2lwdjQnIDogJ2lwdjYnKTtcbiAgICB9XG4gIH0pO1xuICBzdG9yZS5zZXQoJ2Jsb2NrTGlzdCcsIGJsb2NrTGlzdCk7XG4gIHJldHVybiBibG9ja0xpc3Q7XG59O1xuXG5leHBvcnQgY29uc3QgY2hlY2tJcCA9IChpcCwgaXBSYW5nZUxpc3QsIHN0b3JlKSA9PiB7XG4gIGNvbnN0IGluY29taW5nSXBJc1Y0ID0gaXNJUHY0KGlwKTtcbiAgY29uc3QgYmxvY2tMaXN0ID0gZ2V0QmxvY2tMaXN0KGlwUmFuZ2VMaXN0LCBzdG9yZSk7XG5cbiAgaWYgKHN0b3JlLmdldChpcCkpIHsgcmV0dXJuIHRydWU7IH1cbiAgaWYgKHN0b3JlLmdldCgnYWxsb3dBbGxJcHY0JykgJiYgaW5jb21pbmdJcElzVjQpIHsgcmV0dXJuIHRydWU7IH1cbiAgaWYgKHN0b3JlLmdldCgnYWxsb3dBbGxJcHY2JykgJiYgIWluY29taW5nSXBJc1Y0KSB7IHJldHVybiB0cnVlOyB9XG4gIGNvbnN0IHJlc3VsdCA9IGJsb2NrTGlzdC5jaGVjayhpcCwgaW5jb21pbmdJcElzVjQgPyAnaXB2NCcgOiAnaXB2NicpO1xuXG4gIC8vIElmIHRoZSBpcCBpcyBpbiB0aGUgbGlzdCwgd2Ugc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUgc3RvcmVcbiAgLy8gc28gd2UgaGF2ZSBhIG9wdGltaXplZCBwYXRoIGZvciB0aGUgbmV4dCByZXF1ZXN0XG4gIGlmIChpcFJhbmdlTGlzdC5pbmNsdWRlcyhpcCkgJiYgcmVzdWx0KSB7XG4gICAgc3RvcmUuc2V0KGlwLCByZXN1bHQpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBDaGVja3MgdGhhdCB0aGUgcmVxdWVzdCBpcyBhdXRob3JpemVkIGZvciB0aGlzIGFwcCBhbmQgY2hlY2tzIHVzZXJcbi8vIGF1dGggdG9vLlxuLy8gVGhlIGJvZHlwYXJzZXIgc2hvdWxkIHJ1biBiZWZvcmUgdGhpcyBtaWRkbGV3YXJlLlxuLy8gQWRkcyBpbmZvIHRvIHRoZSByZXF1ZXN0OlxuLy8gcmVxLmNvbmZpZyAtIHRoZSBDb25maWcgZm9yIHRoaXMgYXBwXG4vLyByZXEuYXV0aCAtIHRoZSBBdXRoIGZvciB0aGlzIHJlcXVlc3RcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVQYXJzZUhlYWRlcnMocmVxLCByZXMsIG5leHQpIHtcbiAgdmFyIG1vdW50ID0gZ2V0TW91bnRGb3JSZXF1ZXN0KHJlcSk7XG5cbiAgbGV0IGNvbnRleHQgPSB7fTtcbiAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtQ2xvdWQtQ29udGV4dCcpICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgY29udGV4dCA9IEpTT04ucGFyc2UocmVxLmdldCgnWC1QYXJzZS1DbG91ZC1Db250ZXh0JykpO1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjb250ZXh0KSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgICAgdGhyb3cgJ0NvbnRleHQgaXMgbm90IGFuIG9iamVjdCc7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbWFsZm9ybWVkQ29udGV4dChyZXEsIHJlcyk7XG4gICAgfVxuICB9XG4gIHZhciBpbmZvID0ge1xuICAgIGFwcElkOiByZXEuZ2V0KCdYLVBhcnNlLUFwcGxpY2F0aW9uLUlkJyksXG4gICAgc2Vzc2lvblRva2VuOiByZXEuZ2V0KCdYLVBhcnNlLVNlc3Npb24tVG9rZW4nKSxcbiAgICBtYXN0ZXJLZXk6IHJlcS5nZXQoJ1gtUGFyc2UtTWFzdGVyLUtleScpLFxuICAgIG1haW50ZW5hbmNlS2V5OiByZXEuZ2V0KCdYLVBhcnNlLU1haW50ZW5hbmNlLUtleScpLFxuICAgIGluc3RhbGxhdGlvbklkOiByZXEuZ2V0KCdYLVBhcnNlLUluc3RhbGxhdGlvbi1JZCcpLFxuICAgIGNsaWVudEtleTogcmVxLmdldCgnWC1QYXJzZS1DbGllbnQtS2V5JyksXG4gICAgamF2YXNjcmlwdEtleTogcmVxLmdldCgnWC1QYXJzZS1KYXZhc2NyaXB0LUtleScpLFxuICAgIGRvdE5ldEtleTogcmVxLmdldCgnWC1QYXJzZS1XaW5kb3dzLUtleScpLFxuICAgIHJlc3RBUElLZXk6IHJlcS5nZXQoJ1gtUGFyc2UtUkVTVC1BUEktS2V5JyksXG4gICAgY29udGV4dDogY29udGV4dCxcbiAgfTtcblxuICB2YXIgYmFzaWNBdXRoID0gaHR0cEF1dGgocmVxKTtcblxuICBpZiAoYmFzaWNBdXRoKSB7XG4gICAgdmFyIGJhc2ljQXV0aEFwcElkID0gYmFzaWNBdXRoLmFwcElkO1xuICAgIGlmIChBcHBDYWNoZS5nZXQoYmFzaWNBdXRoQXBwSWQpKSB7XG4gICAgICBpbmZvLmFwcElkID0gYmFzaWNBdXRoQXBwSWQ7XG4gICAgICBpbmZvLm1hc3RlcktleSA9IGJhc2ljQXV0aC5tYXN0ZXJLZXkgfHwgaW5mby5tYXN0ZXJLZXk7XG4gICAgICBpbmZvLmphdmFzY3JpcHRLZXkgPSBiYXNpY0F1dGguamF2YXNjcmlwdEtleSB8fCBpbmZvLmphdmFzY3JpcHRLZXk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHJlcS5ib2R5KSB7XG4gICAgLy8gVW5pdHkgU0RLIHNlbmRzIGEgX25vQm9keSBrZXkgd2hpY2ggbmVlZHMgdG8gYmUgcmVtb3ZlZC5cbiAgICAvLyBVbmNsZWFyIGF0IHRoaXMgcG9pbnQgaWYgYWN0aW9uIG5lZWRzIHRvIGJlIHRha2VuLlxuICAgIGRlbGV0ZSByZXEuYm9keS5fbm9Cb2R5O1xuICB9XG5cbiAgdmFyIGZpbGVWaWFKU09OID0gZmFsc2U7XG5cbiAgaWYgKCFpbmZvLmFwcElkIHx8ICFBcHBDYWNoZS5nZXQoaW5mby5hcHBJZCkpIHtcbiAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgdGhlIGFwcCBpZCBvbiB0aGUgYm9keS5cbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHJlcS5ib2R5KSkge1xuICAgICAgLy8gVGhlIG9ubHkgY2hhbmNlIHRvIGZpbmQgdGhlIGFwcCBpZCBpcyBpZiB0aGlzIGlzIGEgZmlsZVxuICAgICAgLy8gdXBsb2FkIHRoYXQgYWN0dWFsbHkgaXMgYSBKU09OIGJvZHkuIFNvIHRyeSB0byBwYXJzZSBpdC5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXJzZS1jb21tdW5pdHkvcGFyc2Utc2VydmVyL2lzc3Vlcy82NTg5XG4gICAgICAvLyBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgdGhlIGNsaWVudCBpcyB0cnlpbmcgdG8gdXBsb2FkIGEgZmlsZSBidXQgZm9yZ290XG4gICAgICAvLyB0byBwcm92aWRlIHgtcGFyc2UtYXBwLWlkIGluIGhlYWRlciBhbmQgcGFyc2UgYSBiaW5hcnkgZmlsZSB3aWxsIGZhaWxcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcS5ib2R5ID0gSlNPTi5wYXJzZShyZXEuYm9keSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgICAgIH1cbiAgICAgIGZpbGVWaWFKU09OID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocmVxLmJvZHkpIHtcbiAgICAgIGRlbGV0ZSByZXEuYm9keS5fUmV2b2NhYmxlU2Vzc2lvbjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICByZXEuYm9keSAmJlxuICAgICAgcmVxLmJvZHkuX0FwcGxpY2F0aW9uSWQgJiZcbiAgICAgIEFwcENhY2hlLmdldChyZXEuYm9keS5fQXBwbGljYXRpb25JZCkgJiZcbiAgICAgICghaW5mby5tYXN0ZXJLZXkgfHwgQXBwQ2FjaGUuZ2V0KHJlcS5ib2R5Ll9BcHBsaWNhdGlvbklkKS5tYXN0ZXJLZXkgPT09IGluZm8ubWFzdGVyS2V5KVxuICAgICkge1xuICAgICAgaW5mby5hcHBJZCA9IHJlcS5ib2R5Ll9BcHBsaWNhdGlvbklkO1xuICAgICAgaW5mby5qYXZhc2NyaXB0S2V5ID0gcmVxLmJvZHkuX0phdmFTY3JpcHRLZXkgfHwgJyc7XG4gICAgICBkZWxldGUgcmVxLmJvZHkuX0FwcGxpY2F0aW9uSWQ7XG4gICAgICBkZWxldGUgcmVxLmJvZHkuX0phdmFTY3JpcHRLZXk7XG4gICAgICAvLyBUT0RPOiB0ZXN0IHRoYXQgdGhlIFJFU1QgQVBJIGZvcm1hdHMgZ2VuZXJhdGVkIGJ5IHRoZSBvdGhlclxuICAgICAgLy8gU0RLcyBhcmUgaGFuZGxlZCBva1xuICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9DbGllbnRWZXJzaW9uO1xuICAgICAgaWYgKHJlcS5ib2R5Ll9JbnN0YWxsYXRpb25JZCkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcS5ib2R5Ll9JbnN0YWxsYXRpb25JZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpO1xuICAgICAgICB9XG4gICAgICAgIGluZm8uaW5zdGFsbGF0aW9uSWQgPSByZXEuYm9keS5fSW5zdGFsbGF0aW9uSWQ7XG4gICAgICAgIGRlbGV0ZSByZXEuYm9keS5fSW5zdGFsbGF0aW9uSWQ7XG4gICAgICB9XG4gICAgICBpZiAocmVxLmJvZHkuX1Nlc3Npb25Ub2tlbikge1xuICAgICAgICBpZiAodHlwZW9mIHJlcS5ib2R5Ll9TZXNzaW9uVG9rZW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgICAgICAgfVxuICAgICAgICBpbmZvLnNlc3Npb25Ub2tlbiA9IHJlcS5ib2R5Ll9TZXNzaW9uVG9rZW47XG4gICAgICAgIGRlbGV0ZSByZXEuYm9keS5fU2Vzc2lvblRva2VuO1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5ib2R5Ll9NYXN0ZXJLZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXEuYm9keS5fTWFzdGVyS2V5ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaW5mby5tYXN0ZXJLZXkgPSByZXEuYm9keS5fTWFzdGVyS2V5O1xuICAgICAgICBkZWxldGUgcmVxLmJvZHkuX01hc3RlcktleTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXEuYm9keS5fY29udGV4dCkge1xuICAgICAgICBpZiAoVXRpbHMuaXNPYmplY3QocmVxLmJvZHkuX2NvbnRleHQpKSB7XG4gICAgICAgICAgaW5mby5jb250ZXh0ID0gcmVxLmJvZHkuX2NvbnRleHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGluZm8uY29udGV4dCA9IEpTT04ucGFyc2UocmVxLmJvZHkuX2NvbnRleHQpO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbmZvLmNvbnRleHQpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgICAgICAgICB0aHJvdyAnQ29udGV4dCBpcyBub3QgYW4gb2JqZWN0JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiBtYWxmb3JtZWRDb250ZXh0KHJlcSwgcmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9jb250ZXh0O1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5ib2R5Ll9Db250ZW50VHlwZSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcS5ib2R5Ll9Db250ZW50VHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJlcS5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9IHJlcS5ib2R5Ll9Db250ZW50VHlwZTtcbiAgICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9Db250ZW50VHlwZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaW5mby5zZXNzaW9uVG9rZW4gJiYgdHlwZW9mIGluZm8uc2Vzc2lvblRva2VuICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcyk7XG4gIH1cblxuICBpZiAoZmlsZVZpYUpTT04gJiYgcmVxLmJvZHkpIHtcbiAgICBpZiAocmVxLmJvZHkuYmFzZTY0ICYmIHR5cGVvZiByZXEuYm9keS5iYXNlNjQgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpO1xuICAgIH1cbiAgICByZXEuZmlsZURhdGEgPSByZXEuYm9keS5maWxlRGF0YTtcbiAgICAvLyBXZSBuZWVkIHRvIHJlcG9wdWxhdGUgcmVxLmJvZHkgd2l0aCBhIGJ1ZmZlclxuICAgIHZhciBiYXNlNjQgPSByZXEuYm9keS5iYXNlNjQ7XG4gICAgcmVxLmJvZHkgPSBCdWZmZXIuZnJvbShiYXNlNjQsICdiYXNlNjQnKTtcbiAgfVxuXG4gIGNvbnN0IGNsaWVudElwID0gZ2V0Q2xpZW50SXAocmVxKTtcbiAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZyB8fCBDb25maWcuZ2V0KGluZm8uYXBwSWQsIG1vdW50KTtcbiAgaWYgKGNvbmZpZy5zdGF0ZSAmJiBjb25maWcuc3RhdGUgIT09ICdvaycpIHtcbiAgICByZXMuc3RhdHVzKDUwMCk7XG4gICAgcmVzLmpzb24oe1xuICAgICAgY29kZTogUGFyc2UuRXJyb3IuSU5URVJOQUxfU0VSVkVSX0VSUk9SLFxuICAgICAgZXJyb3I6IGBJbnZhbGlkIHNlcnZlciBzdGF0ZTogJHtjb25maWcuc3RhdGV9YCxcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFyZXEuY29uZmlnKSB7XG4gICAgYXdhaXQgY29uZmlnLmxvYWRLZXlzKCk7XG4gIH1cblxuICBpbmZvLmFwcCA9IEFwcENhY2hlLmdldChpbmZvLmFwcElkKTtcbiAgcmVxLmNvbmZpZyA9IGNvbmZpZztcbiAgcmVxLmNvbmZpZy5oZWFkZXJzID0gcmVxLmhlYWRlcnMgfHwge307XG4gIHJlcS5jb25maWcuaXAgPSBjbGllbnRJcDtcbiAgcmVxLmluZm8gPSBpbmZvO1xuXG4gIC8vIFNraXAga2V5IGRldGVjdGlvbiBpZiBhbHJlYWR5IHJlc29sdmVkIGJ5IGhhbmRsZVBhcnNlQXV0aCAoaGVhZGVyLWJhc2VkKS5cbiAgLy8gT25seSByZXNvbHZlIGhlcmUgZm9yIGJvZHktYmFzZWQgX01hc3RlcktleSAoaW5mby5tYXN0ZXJLZXkgbWF5IGNvbWUgZnJvbSBib2R5KS5cbiAgaWYgKCFyZXEuYXV0aCB8fCAoIXJlcS5hdXRoLmlzTWFzdGVyICYmICFyZXEuYXV0aC5pc01haW50ZW5hbmNlKSkge1xuICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzb2x2ZUtleUF1dGgoe1xuICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAga2V5VmFsdWU6IGluZm8ubWFzdGVyS2V5LFxuICAgICAgbWFpbnRlbmFuY2VLZXlWYWx1ZTogaW5mby5tYWludGVuYW5jZUtleSxcbiAgICAgIGluc3RhbGxhdGlvbklkOiBpbmZvLmluc3RhbGxhdGlvbklkLFxuICAgICAgY2xpZW50SXAsXG4gICAgfSk7XG4gICAgaWYgKHJlc29sdmVkKSB7XG4gICAgICByZXEuYXV0aCA9IHJlc29sdmVkO1xuICAgIH1cbiAgfVxuXG4gIGlmIChyZXEuYXV0aCAmJiAocmVxLmF1dGguaXNNYXN0ZXIgfHwgcmVxLmF1dGguaXNNYWludGVuYW5jZSkpIHtcbiAgICByZXR1cm4gaGFuZGxlUmF0ZUxpbWl0KHJlcSwgcmVzLCBuZXh0KTtcbiAgfVxuXG4gIC8vIENsaWVudCBrZXlzIGFyZSBub3QgcmVxdWlyZWQgaW4gcGFyc2Utc2VydmVyLCBidXQgaWYgYW55IGhhdmUgYmVlbiBjb25maWd1cmVkIGluIHRoZSBzZXJ2ZXIsIHZhbGlkYXRlIHRoZW1cbiAgLy8gIHRvIHByZXNlcnZlIG9yaWdpbmFsIGJlaGF2aW9yLlxuICBjb25zdCBrZXlzID0gWydjbGllbnRLZXknLCAnamF2YXNjcmlwdEtleScsICdkb3ROZXRLZXknLCAncmVzdEFQSUtleSddO1xuICBjb25zdCBvbmVLZXlDb25maWd1cmVkID0ga2V5cy5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gcmVxLmNvbmZpZ1trZXldICE9PSB1bmRlZmluZWQ7XG4gIH0pO1xuICBjb25zdCBvbmVLZXlNYXRjaGVzID0ga2V5cy5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gcmVxLmNvbmZpZ1trZXldICE9PSB1bmRlZmluZWQgJiYgaW5mb1trZXldID09PSByZXEuY29uZmlnW2tleV07XG4gIH0pO1xuXG4gIGlmIChvbmVLZXlDb25maWd1cmVkICYmICFvbmVLZXlNYXRjaGVzKSB7XG4gICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgfVxuXG4gIGlmIChtYXRjaGVzRXhhY3RSb3V0ZShyZXEucGF0aCwgJy9sb2dpbicpKSB7XG4gICAgZGVsZXRlIGluZm8uc2Vzc2lvblRva2VuO1xuICB9XG5cbiAgaWYgKHJlcS51c2VyRnJvbUpXVCkge1xuICAgIHJlcS5hdXRoID0gbmV3IGF1dGguQXV0aCh7XG4gICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICBpbnN0YWxsYXRpb25JZDogaW5mby5pbnN0YWxsYXRpb25JZCxcbiAgICAgIGlzTWFzdGVyOiBmYWxzZSxcbiAgICAgIHVzZXI6IHJlcS51c2VyRnJvbUpXVCxcbiAgICB9KTtcbiAgICByZXR1cm4gaGFuZGxlUmF0ZUxpbWl0KHJlcSwgcmVzLCBuZXh0KTtcbiAgfVxuXG4gIGlmICghaW5mby5zZXNzaW9uVG9rZW4pIHtcbiAgICByZXEuYXV0aCA9IG5ldyBhdXRoLkF1dGgoe1xuICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAgaW5zdGFsbGF0aW9uSWQ6IGluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICBpc01hc3RlcjogZmFsc2UsXG4gICAgfSk7XG4gIH1cbiAgaGFuZGxlUmF0ZUxpbWl0KHJlcSwgcmVzLCBuZXh0KTtcbn1cblxuY29uc3QgaGFuZGxlUmF0ZUxpbWl0ID0gYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gIGNvbnN0IHJhdGVMaW1pdHMgPSByZXEuY29uZmlnLnJhdGVMaW1pdHMgfHwgW107XG4gIHRyeSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICByYXRlTGltaXRzLm1hcChhc3luYyBsaW1pdCA9PiB7XG4gICAgICAgIGNvbnN0IHBhdGhFeHAgPSBsaW1pdC5wYXRoLnJlZ2V4cCB8fCBsaW1pdC5wYXRoO1xuICAgICAgICBpZiAocGF0aEV4cC50ZXN0KHJlcS5wYXRoKSB8fCAocmVxLl9ncmFwaFFMUGF0aCAmJiBwYXRoRXhwLnRlc3QocmVxLl9ncmFwaFFMUGF0aCkpKSB7XG4gICAgICAgICAgYXdhaXQgbGltaXQuaGFuZGxlcihyZXEsIHJlcywgZXJyID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgaWYgKGVyci5jb2RlID09PSBQYXJzZS5FcnJvci5DT05ORUNUSU9OX0ZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXEuY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgJ0FuIHVua25vd24gZXJyb3Igb2NjdXJlZCB3aGVuIGF0dGVtcHRpbmcgdG8gYXBwbHkgdGhlIHJhdGUgbGltaXRlcjogJyxcbiAgICAgICAgICAgICAgICBlcnJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcy5zdGF0dXMoNDI5KTtcbiAgICByZXMuanNvbih7IGNvZGU6IFBhcnNlLkVycm9yLkNPTk5FQ1RJT05fRkFJTEVELCBlcnJvcjogZXJyb3IubWVzc2FnZSB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgbmV4dCgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhbmRsZVBhcnNlU2Vzc2lvbiA9IGFzeW5jIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGluZm8gPSByZXEuaW5mbztcbiAgICBpZiAocmVxLmF1dGggfHwgKG1hdGNoZXNFeGFjdFJvdXRlKHJlcS5wYXRoLCAnL3Nlc3Npb25zL21lJykgJiYgcmVxLm1ldGhvZCA9PT0gJ0dFVCcpKSB7XG4gICAgICBuZXh0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCByZXF1ZXN0QXV0aCA9IG51bGw7XG4gICAgaWYgKFxuICAgICAgaW5mby5zZXNzaW9uVG9rZW4gJiZcbiAgICAgIG1hdGNoZXNFeGFjdFJvdXRlKHJlcS5wYXRoLCAnL3VwZ3JhZGVUb1Jldm9jYWJsZVNlc3Npb24nKSAmJlxuICAgICAgaW5mby5zZXNzaW9uVG9rZW4uaW5kZXhPZigncjonKSAhPSAwXG4gICAgKSB7XG4gICAgICByZXF1ZXN0QXV0aCA9IGF3YWl0IGF1dGguZ2V0QXV0aEZvckxlZ2FjeVNlc3Npb25Ub2tlbih7XG4gICAgICAgIGNvbmZpZzogcmVxLmNvbmZpZyxcbiAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICAgIHNlc3Npb25Ub2tlbjogaW5mby5zZXNzaW9uVG9rZW4sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdEF1dGggPSBhd2FpdCBhdXRoLmdldEF1dGhGb3JTZXNzaW9uVG9rZW4oe1xuICAgICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICAgIGluc3RhbGxhdGlvbklkOiBpbmZvLmluc3RhbGxhdGlvbklkLFxuICAgICAgICBzZXNzaW9uVG9rZW46IGluZm8uc2Vzc2lvblRva2VuLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJlcS5hdXRoID0gcmVxdWVzdEF1dGg7XG4gICAgbmV4dCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFBhcnNlLkVycm9yKSB7XG4gICAgICBuZXh0KGVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gTG9nIGZ1bGwgZXJyb3IgZGV0YWlscyBpbnRlcm5hbGx5LCBidXQgZG9uJ3QgZXhwb3NlIHRvIGNsaWVudFxuICAgIHJlcS5jb25maWcubG9nZ2VyQ29udHJvbGxlci5lcnJvcignZXJyb3IgZ2V0dGluZyBhdXRoIGZvciBzZXNzaW9uVG9rZW4nLCBlcnJvcik7XG4gICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuVU5LTk9XTl9FUlJPUiwgJ1Vua25vd24gZXJyb3InKSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdldENsaWVudElwKHJlcSkge1xuICByZXR1cm4gcmVxLmlwO1xufVxuXG5mdW5jdGlvbiBodHRwQXV0aChyZXEpIHtcbiAgaWYgKCEocmVxLnJlcSB8fCByZXEpLmhlYWRlcnMuYXV0aG9yaXphdGlvbikgeyByZXR1cm47IH1cblxuICB2YXIgaGVhZGVyID0gKHJlcS5yZXEgfHwgcmVxKS5oZWFkZXJzLmF1dGhvcml6YXRpb247XG4gIHZhciBhcHBJZCwgbWFzdGVyS2V5LCBqYXZhc2NyaXB0S2V5O1xuXG4gIC8vIHBhcnNlIGhlYWRlclxuICB2YXIgYXV0aFByZWZpeCA9ICdiYXNpYyAnO1xuXG4gIHZhciBtYXRjaCA9IGhlYWRlci50b0xvd2VyQ2FzZSgpLmluZGV4T2YoYXV0aFByZWZpeCk7XG5cbiAgaWYgKG1hdGNoID09IDApIHtcbiAgICB2YXIgZW5jb2RlZEF1dGggPSBoZWFkZXIuc3Vic3RyaW5nKGF1dGhQcmVmaXgubGVuZ3RoLCBoZWFkZXIubGVuZ3RoKTtcbiAgICB2YXIgY3JlZGVudGlhbHMgPSBkZWNvZGVCYXNlNjQoZW5jb2RlZEF1dGgpLnNwbGl0KCc6Jyk7XG5cbiAgICBpZiAoY3JlZGVudGlhbHMubGVuZ3RoID09IDIpIHtcbiAgICAgIGFwcElkID0gY3JlZGVudGlhbHNbMF07XG4gICAgICB2YXIga2V5ID0gY3JlZGVudGlhbHNbMV07XG5cbiAgICAgIHZhciBqc0tleVByZWZpeCA9ICdqYXZhc2NyaXB0LWtleT0nO1xuXG4gICAgICB2YXIgbWF0Y2hLZXkgPSBrZXkuaW5kZXhPZihqc0tleVByZWZpeCk7XG4gICAgICBpZiAobWF0Y2hLZXkgPT0gMCkge1xuICAgICAgICBqYXZhc2NyaXB0S2V5ID0ga2V5LnN1YnN0cmluZyhqc0tleVByZWZpeC5sZW5ndGgsIGtleS5sZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWFzdGVyS2V5ID0ga2V5O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFwcElkOiBhcHBJZCwgbWFzdGVyS2V5OiBtYXN0ZXJLZXksIGphdmFzY3JpcHRLZXk6IGphdmFzY3JpcHRLZXkgfTtcbn1cblxuZnVuY3Rpb24gZGVjb2RlQmFzZTY0KHN0cikge1xuICByZXR1cm4gQnVmZmVyLmZyb20oc3RyLCAnYmFzZTY0JykudG9TdHJpbmcoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbG93Q3Jvc3NEb21haW4oYXBwSWQpIHtcbiAgcmV0dXJuIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQoYXBwSWQsIGdldE1vdW50Rm9yUmVxdWVzdChyZXEpKTtcbiAgICBsZXQgYWxsb3dIZWFkZXJzID0gREVGQVVMVF9BTExPV0VEX0hFQURFUlM7XG4gICAgaWYgKGNvbmZpZyAmJiBjb25maWcuYWxsb3dIZWFkZXJzKSB7XG4gICAgICBhbGxvd0hlYWRlcnMgKz0gYCwgJHtjb25maWcuYWxsb3dIZWFkZXJzLmpvaW4oJywgJyl9YDtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlT3JpZ2lucyA9XG4gICAgICB0eXBlb2YgY29uZmlnPy5hbGxvd09yaWdpbiA9PT0gJ3N0cmluZycgPyBbY29uZmlnLmFsbG93T3JpZ2luXSA6IGNvbmZpZz8uYWxsb3dPcmlnaW4gPz8gWycqJ107XG4gICAgY29uc3QgcmVxdWVzdE9yaWdpbiA9IHJlcS5oZWFkZXJzLm9yaWdpbjtcbiAgICBjb25zdCBhbGxvd09yaWdpbnMgPVxuICAgICAgcmVxdWVzdE9yaWdpbiAmJiBiYXNlT3JpZ2lucy5pbmNsdWRlcyhyZXF1ZXN0T3JpZ2luKSA/IHJlcXVlc3RPcmlnaW4gOiBiYXNlT3JpZ2luc1swXTtcbiAgICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nLCBhbGxvd09yaWdpbnMpO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnLCAnR0VULFBVVCxQT1NULERFTEVURSxPUFRJT05TJyk7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsIGFsbG93SGVhZGVycyk7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMnLCAnWC1QYXJzZS1Kb2ItU3RhdHVzLUlkLCBYLVBhcnNlLVB1c2gtU3RhdHVzLUlkJyk7XG4gICAgLy8gaW50ZXJjZXB0IE9QVElPTlMgbWV0aG9kXG4gICAgaWYgKCdPUFRJT05TJyA9PSByZXEubWV0aG9kKSB7XG4gICAgICByZXMuc2VuZFN0YXR1cygyMDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0KCk7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsb3dNZXRob2RPdmVycmlkZShyZXEsIHJlcywgbmV4dCkge1xuICBpZiAocmVxLm1ldGhvZCA9PT0gJ1BPU1QnICYmIHJlcS5ib2R5Py5fbWV0aG9kKSB7XG4gICAgaWYgKHR5cGVvZiByZXEuYm9keS5fbWV0aG9kID09PSAnc3RyaW5nJykge1xuICAgICAgcmVxLm9yaWdpbmFsTWV0aG9kID0gcmVxLm1ldGhvZDtcbiAgICAgIHJlcS5tZXRob2QgPSByZXEuYm9keS5fbWV0aG9kLnRvVXBwZXJDYXNlKCk7XG4gICAgfVxuICAgIGRlbGV0ZSByZXEuYm9keS5fbWV0aG9kO1xuICB9XG4gIG5leHQoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUtleUF1dGgoeyBjb25maWcsIGtleVZhbHVlLCBtYWludGVuYW5jZUtleVZhbHVlLCBpbnN0YWxsYXRpb25JZCwgY2xpZW50SXAgfSkge1xuICBpZiAobWFpbnRlbmFuY2VLZXlWYWx1ZSAmJiBtYWludGVuYW5jZUtleVZhbHVlID09PSBjb25maWcubWFpbnRlbmFuY2VLZXkpIHtcbiAgICBpZiAoY2hlY2tJcChjbGllbnRJcCwgY29uZmlnLm1haW50ZW5hbmNlS2V5SXBzIHx8IFtdLCBjb25maWcubWFpbnRlbmFuY2VLZXlJcHNTdG9yZSkpIHtcbiAgICAgIHJldHVybiBuZXcgYXV0aC5BdXRoKHsgY29uZmlnLCBpbnN0YWxsYXRpb25JZCwgaXNNYWludGVuYW5jZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgY29uc3QgbG9nID0gY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIgfHwgZGVmYXVsdExvZ2dlcjtcbiAgICBsb2cuZXJyb3IoXG4gICAgICBgUmVxdWVzdCB1c2luZyBtYWludGVuYW5jZSBrZXkgcmVqZWN0ZWQgYXMgdGhlIHJlcXVlc3QgSVAgYWRkcmVzcyAnJHtjbGllbnRJcH0nIGlzIG5vdCBzZXQgaW4gUGFyc2UgU2VydmVyIG9wdGlvbiAnbWFpbnRlbmFuY2VLZXlJcHMnLmBcbiAgICApO1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCk7XG4gICAgZXJyb3Iuc3RhdHVzID0gNDAzO1xuICAgIGVycm9yLm1lc3NhZ2UgPSAndW5hdXRob3JpemVkJztcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuICBjb25zdCBtYXN0ZXJLZXkgPSBhd2FpdCBjb25maWcubG9hZE1hc3RlcktleSgpO1xuICBpZiAoa2V5VmFsdWUgPT09IG1hc3RlcktleSkge1xuICAgIGlmIChjaGVja0lwKGNsaWVudElwLCBjb25maWcubWFzdGVyS2V5SXBzIHx8IFtdLCBjb25maWcubWFzdGVyS2V5SXBzU3RvcmUpKSB7XG4gICAgICByZXR1cm4gbmV3IGF1dGguQXV0aCh7IGNvbmZpZywgaW5zdGFsbGF0aW9uSWQsIGlzTWFzdGVyOiB0cnVlIH0pO1xuICAgIH1cbiAgICBjb25zdCBsb2cgPSBjb25maWcubG9nZ2VyQ29udHJvbGxlciB8fCBkZWZhdWx0TG9nZ2VyO1xuICAgIGxvZy5lcnJvcihcbiAgICAgIGBSZXF1ZXN0IHVzaW5nIG1hc3RlciBrZXkgcmVqZWN0ZWQgYXMgdGhlIHJlcXVlc3QgSVAgYWRkcmVzcyAnJHtjbGllbnRJcH0nIGlzIG5vdCBzZXQgaW4gUGFyc2UgU2VydmVyIG9wdGlvbiAnbWFzdGVyS2V5SXBzJy5gXG4gICAgKTtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcigpO1xuICAgIGVycm9yLnN0YXR1cyA9IDQwMztcbiAgICBlcnJvci5tZXNzYWdlID0gJ3VuYXV0aG9yaXplZCc7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbiAgaWYgKFxuICAgIGtleVZhbHVlICYmXG4gICAgdHlwZW9mIGNvbmZpZy5yZWFkT25seU1hc3RlcktleSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICBjb25maWcucmVhZE9ubHlNYXN0ZXJLZXkgJiZcbiAgICBrZXlWYWx1ZSA9PT0gY29uZmlnLnJlYWRPbmx5TWFzdGVyS2V5XG4gICkge1xuICAgIGlmIChjaGVja0lwKGNsaWVudElwLCBjb25maWcucmVhZE9ubHlNYXN0ZXJLZXlJcHMgfHwgW10sIGNvbmZpZy5yZWFkT25seU1hc3RlcktleUlwc1N0b3JlKSkge1xuICAgICAgcmV0dXJuIG5ldyBhdXRoLkF1dGgoeyBjb25maWcsIGluc3RhbGxhdGlvbklkLCBpc01hc3RlcjogdHJ1ZSwgaXNSZWFkT25seTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgY29uc3QgbG9nID0gY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIgfHwgZGVmYXVsdExvZ2dlcjtcbiAgICBsb2cuZXJyb3IoXG4gICAgICBgUmVxdWVzdCB1c2luZyByZWFkLW9ubHkgbWFzdGVyIGtleSByZWplY3RlZCBhcyB0aGUgcmVxdWVzdCBJUCBhZGRyZXNzICcke2NsaWVudElwfScgaXMgbm90IHNldCBpbiBQYXJzZSBTZXJ2ZXIgb3B0aW9uICdyZWFkT25seU1hc3RlcktleUlwcycuYFxuICAgICk7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKTtcbiAgICBlcnJvci5zdGF0dXMgPSA0MDM7XG4gICAgZXJyb3IubWVzc2FnZSA9ICd1bmF1dGhvcml6ZWQnO1xuICAgIHRocm93IGVycm9yO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlUGFyc2VBdXRoKGFwcElkKSB7XG4gIHJldHVybiBhc3luYyAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICBjb25zdCBtb3VudCA9IGdldE1vdW50Rm9yUmVxdWVzdChyZXEpO1xuICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQoYXBwSWQsIG1vdW50KTtcbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICB9XG4gICAgcmVxLmNvbmZpZyA9IGNvbmZpZztcbiAgICBjb25zdCBjbGllbnRJcCA9IGdldENsaWVudElwKHJlcSk7XG4gICAgcmVxLmNvbmZpZy5pcCA9IGNsaWVudElwO1xuICAgIGF3YWl0IGNvbmZpZy5sb2FkS2V5cygpO1xuICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzb2x2ZUtleUF1dGgoe1xuICAgICAgY29uZmlnLFxuICAgICAga2V5VmFsdWU6IHJlcS5nZXQoJ1gtUGFyc2UtTWFzdGVyLUtleScpIHx8IG51bGwsXG4gICAgICBtYWludGVuYW5jZUtleVZhbHVlOiByZXEuZ2V0KCdYLVBhcnNlLU1haW50ZW5hbmNlLUtleScpIHx8IG51bGwsXG4gICAgICBpbnN0YWxsYXRpb25JZDogcmVxLmdldCgnWC1QYXJzZS1JbnN0YWxsYXRpb24tSWQnKSB8fCAnY2xvdWQnLFxuICAgICAgY2xpZW50SXAsXG4gICAgfSk7XG4gICAgaWYgKHJlc29sdmVkKSB7XG4gICAgICByZXEuYXV0aCA9IHJlc29sdmVkO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dCgpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlUGFyc2VIZWFsdGgob3B0aW9ucykge1xuICByZXR1cm4gKHJlcSwgcmVzKSA9PiB7XG4gICAgcmVzLnN0YXR1cyhvcHRpb25zLnN0YXRlID09PSAnb2snID8gMjAwIDogNTAzKTtcbiAgICBpZiAob3B0aW9ucy5zdGF0ZSA9PT0gJ3N0YXJ0aW5nJykge1xuICAgICAgcmVzLnNldCgnUmV0cnktQWZ0ZXInLCAxKTtcbiAgICB9XG4gICAgcmVzLmpzb24oe1xuICAgICAgc3RhdHVzOiBvcHRpb25zLnN0YXRlLFxuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVSb3V0ZUFsbG93TGlzdFBhdGgocGF0aCwgbW91bnQpIHtcbiAgbGV0IG5vcm1hbGl6ZWQgPSBwYXRoO1xuICBpZiAobW91bnQpIHtcbiAgICBjb25zdCBtb3VudFBhdGggPSBuZXcgVVJMKG1vdW50KS5wYXRobmFtZTtcbiAgICBpZiAobm9ybWFsaXplZC5zdGFydHNXaXRoKG1vdW50UGF0aCkpIHtcbiAgICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVkLnN1YnN0cmluZyhtb3VudFBhdGgubGVuZ3RoKTtcbiAgICB9XG4gIH1cbiAgaWYgKG5vcm1hbGl6ZWQuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQuc3Vic3RyaW5nKDEpO1xuICB9XG4gIGlmIChub3JtYWxpemVkLmVuZHNXaXRoKCcvJykpIHtcbiAgICBub3JtYWxpemVkID0gbm9ybWFsaXplZC5zdWJzdHJpbmcoMCwgbm9ybWFsaXplZC5sZW5ndGggLSAxKTtcbiAgfVxuICBjb25zdCBxdWVyeUluZGV4ID0gbm9ybWFsaXplZC5pbmRleE9mKCc/Jyk7XG4gIGlmIChxdWVyeUluZGV4ICE9PSAtMSkge1xuICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVkLnN1YnN0cmluZygwLCBxdWVyeUluZGV4KTtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLy8gQ2FjaGUgb2YgY29tcGlsZWQgZXhhY3Qtcm91dGUgbWF0Y2hlcnMsIGtleWVkIGJ5IHJvdXRlLiBNaXJyb3JzIGhvdyBgYWRkUmF0ZUxpbWl0YCBjb21waWxlcyBhXG4vLyByb3V0ZSdzIGBwYXRoVG9SZWdleHBgIG9uY2UgYW5kIHJldXNlcyBpdCwgYXZvaWRpbmcgcmVjb21waWxhdGlvbiBvbiBldmVyeSByZXF1ZXN0LlxuY29uc3QgZXhhY3RSb3V0ZVJlZ2V4cENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYHBhdGhgIHJlc29sdmVzIHRvIHRoZSBnaXZlbiBleGFjdCBzdGF0aWMgYHJvdXRlYCwgdXNpbmcgdGhlIHNhbWVcbiAqIGBwYXRoLXRvLXJlZ2V4cGAgbWF0Y2hpbmcgdGhhdCB0aGUgRXhwcmVzcyByb3V0ZXIgYW5kIHRoZSByYXRlIGxpbWl0ZXIgdXNlIChjYXNlLWluc2Vuc2l0aXZlXG4gKiBhbmQgdHJhaWxpbmctc2xhc2gtdG9sZXJhbnQgYnkgZGVmYXVsdCkuIFBhdGgtbGl0ZXJhbCBjaGVja3Mg4oCUIHN1Y2ggYXMgZGV0ZWN0aW5nIGAvbG9naW5gIHRvXG4gKiBkcm9wIHRoZSBpbmJvdW5kIHNlc3Npb24gdG9rZW4g4oCUIG11c3QgdXNlIHRoaXMgc28gdGhleSBzdGF5IGNvbnNpc3RlbnQgd2l0aCBob3cgdGhlIHJvdXRlclxuICogYWN0dWFsbHkgZGlzcGF0Y2hlcyB0aGUgcmVxdWVzdCwgaW5zdGVhZCBvZiByZS1kZXJpdmluZyB0aGUgbWF0Y2hpbmcgcnVsZXMgYnkgaGFuZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFRoZSByZXF1ZXN0IHBhdGggKGUuZy4gYHJlcS5wYXRoYCBvciBhIGJhdGNoIHN1Yi1yZXF1ZXN0IHJvdXRhYmxlIHBhdGgpLlxuICogQHBhcmFtIHtzdHJpbmd9IHJvdXRlIFRoZSBleGFjdCBzdGF0aWMgcm91dGUgdG8gbWF0Y2ggKGUuZy4gYC9sb2dpbmApLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaGVzRXhhY3RSb3V0ZShwYXRoLCByb3V0ZSkge1xuICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghZXhhY3RSb3V0ZVJlZ2V4cENhY2hlW3JvdXRlXSkge1xuICAgIGV4YWN0Um91dGVSZWdleHBDYWNoZVtyb3V0ZV0gPSBwYXRoVG9SZWdleHAocm91dGUpLnJlZ2V4cDtcbiAgfVxuICByZXR1cm4gZXhhY3RSb3V0ZVJlZ2V4cENhY2hlW3JvdXRlXS50ZXN0KHBhdGgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSb3V0ZUFsbG93ZWQocGF0aCwgY29uZmlnLCBhdXRoKSB7XG4gIGlmICghY29uZmlnIHx8IGNvbmZpZy5yb3V0ZUFsbG93TGlzdCA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5yb3V0ZUFsbG93TGlzdCA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChhdXRoICYmIChhdXRoLmlzTWFzdGVyIHx8IGF1dGguaXNNYWludGVuYW5jZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplUm91dGVBbGxvd0xpc3RQYXRoKHBhdGgsIGNvbmZpZy5tb3VudCk7XG4gIGNvbnN0IHJlZ2V4ZXMgPSBjb25maWcuX3JvdXRlQWxsb3dMaXN0UmVnZXggfHwgW107XG4gIGZvciAoY29uc3QgcmVnZXggb2YgcmVnZXhlcykge1xuICAgIGlmIChyZWdleC50ZXN0KG5vcm1hbGl6ZWQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5mb3JjZVJvdXRlQWxsb3dMaXN0KHJlcSwgcmVzLCBuZXh0KSB7XG4gIGlmIChpc1JvdXRlQWxsb3dlZChyZXEub3JpZ2luYWxVcmwsIHJlcS5jb25maWcsIHJlcS5hdXRoKSkge1xuICAgIHJldHVybiBuZXh0KCk7XG4gIH1cbiAgY29uc3QgcGF0aCA9IG5vcm1hbGl6ZVJvdXRlQWxsb3dMaXN0UGF0aChyZXEub3JpZ2luYWxVcmwsIHJlcS5jb25maWc/Lm1vdW50KTtcbiAgdGhyb3cgY3JlYXRlU2FuaXRpemVkRXJyb3IoXG4gICAgUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTixcbiAgICBgUm91dGUgbm90IGFsbG93ZWQgYnkgcm91dGVBbGxvd0xpc3Q6ICR7cmVxLm1ldGhvZH0gJHtwYXRofWAsXG4gICAgcmVxLmNvbmZpZ1xuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlUGFyc2VFcnJvcnMoZXJyLCByZXEsIHJlcywgbmV4dCkge1xuICBjb25zdCBsb2cgPSAocmVxLmNvbmZpZyAmJiByZXEuY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIpIHx8IGRlZmF1bHRMb2dnZXI7XG4gIGlmIChlcnIgaW5zdGFuY2VvZiBQYXJzZS5FcnJvcikge1xuICAgIGlmIChyZXEuY29uZmlnICYmIHJlcS5jb25maWcuZW5hYmxlRXhwcmVzc0Vycm9ySGFuZGxlcikge1xuICAgICAgcmV0dXJuIG5leHQoZXJyKTtcbiAgICB9XG4gICAgY29uc3Qgc2lnbnVwVXNlcm5hbWVUYWtlbkxldmVsID1cbiAgICAgIHJlcS5jb25maWc/LmxvZ0xldmVscz8uc2lnbnVwVXNlcm5hbWVUYWtlbiB8fCAnaW5mbyc7XG4gICAgbGV0IGh0dHBTdGF0dXM7XG4gICAgLy8gVE9ETzogZmlsbCBvdXQgdGhpcyBtYXBwaW5nXG4gICAgc3dpdGNoIChlcnIuY29kZSkge1xuICAgICAgY2FzZSBQYXJzZS5FcnJvci5JTlRFUk5BTF9TRVJWRVJfRVJST1I6XG4gICAgICAgIGh0dHBTdGF0dXMgPSA1MDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5EOlxuICAgICAgICBodHRwU3RhdHVzID0gNDA0O1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGh0dHBTdGF0dXMgPSA0MDA7XG4gICAgfVxuICAgIHJlcy5zdGF0dXMoaHR0cFN0YXR1cyk7XG4gICAgcmVzLmpzb24oeyBjb2RlOiBlcnIuY29kZSwgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgIGlmIChlcnIuY29kZSA9PT0gUGFyc2UuRXJyb3IuVVNFUk5BTUVfVEFLRU4pIHtcbiAgICAgIGlmIChzaWdudXBVc2VybmFtZVRha2VuTGV2ZWwgIT09ICdzaWxlbnQnKSB7XG4gICAgICAgIGNvbnN0IGxvZ2dlck1ldGhvZCA9XG4gICAgICAgICAgdHlwZW9mIGxvZ1tzaWdudXBVc2VybmFtZVRha2VuTGV2ZWxdID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IGxvZ1tzaWdudXBVc2VybmFtZVRha2VuTGV2ZWxdLmJpbmQobG9nKVxuICAgICAgICAgICAgOiBsb2cuZXJyb3IuYmluZChsb2cpO1xuICAgICAgICBsb2dnZXJNZXRob2QoJ1BhcnNlIGVycm9yOiAnLCBlcnIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuZXJyb3IoJ1BhcnNlIGVycm9yOiAnLCBlcnIpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChlcnIuc3RhdHVzICYmIGVyci5tZXNzYWdlKSB7XG4gICAgcmVzLnN0YXR1cyhlcnIuc3RhdHVzKTtcbiAgICByZXMuanNvbih7IGVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAgICBpZiAoIShwcm9jZXNzICYmIHByb2Nlc3MuZW52LlRFU1RJTkcpKSB7XG4gICAgICBuZXh0KGVycik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxvZy5lcnJvcignVW5jYXVnaHQgaW50ZXJuYWwgc2VydmVyIGVycm9yLicsIGVyciwgZXJyLnN0YWNrKTtcbiAgICByZXMuc3RhdHVzKDUwMCk7XG4gICAgcmVzLmpzb24oe1xuICAgICAgY29kZTogUGFyc2UuRXJyb3IuSU5URVJOQUxfU0VSVkVSX0VSUk9SLFxuICAgICAgbWVzc2FnZTogJ0ludGVybmFsIHNlcnZlciBlcnJvci4nLFxuICAgIH0pO1xuICAgIGlmICghKHByb2Nlc3MgJiYgcHJvY2Vzcy5lbnYuVEVTVElORykpIHtcbiAgICAgIG5leHQoZXJyKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MocmVxLCByZXMsIG5leHQpIHtcbiAgaWYgKCFyZXEuYXV0aC5pc01hc3Rlcikge1xuICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgJ3VuYXV0aG9yaXplZDogbWFzdGVyIGtleSBpcyByZXF1aXJlZCcsIHJlcS5jb25maWcpO1xuICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKTtcbiAgICByZXMuZW5kKGB7XCJlcnJvclwiOlwiJHtlcnJvci5tZXNzYWdlfVwifWApO1xuICAgIHJldHVybjtcbiAgfVxuICBuZXh0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyhyZXF1ZXN0KSB7XG4gIGlmICghcmVxdWVzdC5hdXRoLmlzTWFzdGVyKSB7XG4gICAgdGhyb3cgY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgJ3VuYXV0aG9yaXplZDogbWFzdGVyIGtleSBpcyByZXF1aXJlZCcsIHJlcXVlc3QuY29uZmlnKTtcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgcmVxdWVzdCBpcyBhbiBpbnRlcm5hbCByZXF1ZXN0LCBpLmUuIG9uZSB0aGF0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgc2FtZSBob3N0XG4gKiB3aXRob3V0IHBhc3NpbmcgdGhyb3VnaCBhIHByb3h5LCBzdWNoIGFzIGEgQ2xvdWQgQ29kZSByZXF1ZXN0IHRoYXQgaXMgcm91dGVkIHZpYSBIVFRQIHdoZW4gdGhlXG4gKiBQYXJzZSBTZXJ2ZXIgb3B0aW9uIGBkaXJlY3RBY2Nlc3NgIGlzIGBmYWxzZWAuIE9ubHkgdGhlIHJhdyBzb2NrZXQgcGVlciBhZGRyZXNzIGlzIGNvbnN1bHRlZCxcbiAqIG5ldmVyIGByZXF1ZXN0LmlwYDogdW5kZXIgYSBwZXJtaXNzaXZlIGB0cnVzdFByb3h5YCBzZXR0aW5nIEV4cHJlc3MgcmVzb2x2ZXMgYHJlcXVlc3QuaXBgIGZyb21cbiAqIHRoZSBjbGllbnQtc3VwcGxpZWQgYFgtRm9yd2FyZGVkLUZvcmAgaGVhZGVyLCBzbyBhIHJlbW90ZSBjbGllbnQgY291bGQgb3RoZXJ3aXNlIHBvc2UgYXMgYW5cbiAqIGludGVybmFsIHJlcXVlc3QuIEEgcmVxdWVzdCB0aGF0IGNhcnJpZXMgYW4gYFgtRm9yd2FyZGVkLUZvcmAgaGVhZGVyLCBldmVuIGFuIGVtcHR5IG9uZSwgaGFzIGJlZW5cbiAqIGZvcndhcmRlZCBieSBhIHByb3h5IG9yIGNyYWZ0ZWQgYnkgYSBjbGllbnQgYW5kIGlzIHRoZXJlZm9yZSBuZXZlciBpbnRlcm5hbCwgZXZlbiBpZiBpdCBhcnJpdmVzXG4gKiBvdmVyIGEgbG9vcGJhY2sgc29ja2V0LlxuICogQHBhcmFtIHtPYmplY3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdG8gZXZhbHVhdGUuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gV2hldGhlciB0aGUgcmVxdWVzdCBpcyBpbnRlcm5hbC5cbiAqL1xuY29uc3QgaXNJbnRlcm5hbFJlcXVlc3QgPSByZXF1ZXN0ID0+XG4gIHJlcXVlc3Quc29ja2V0Py5yZW1vdGVBZGRyZXNzID09PSAnMTI3LjAuMC4xJyAmJlxuICByZXF1ZXN0LmhlYWRlcnM/LlsneC1mb3J3YXJkZWQtZm9yJ10gPT09IHVuZGVmaW5lZDtcblxuZXhwb3J0IGNvbnN0IGFkZFJhdGVMaW1pdCA9IChyb3V0ZSwgY29uZmlnLCBjbG91ZCkgPT4ge1xuICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25maWcgPSBDb25maWcuZ2V0KGNvbmZpZyk7XG4gIH1cbiAgZm9yIChjb25zdCBrZXkgaW4gcm91dGUpIHtcbiAgICBpZiAoIVJhdGVMaW1pdE9wdGlvbnNba2V5XSkge1xuICAgICAgdGhyb3cgYEludmFsaWQgcmF0ZSBsaW1pdCBvcHRpb24gXCIke2tleX1cImA7XG4gICAgfVxuICB9XG4gIGlmICghY29uZmlnLnJhdGVMaW1pdHMpIHtcbiAgICBjb25maWcucmF0ZUxpbWl0cyA9IFtdO1xuICB9XG4gIGNvbnN0IHJlZGlzU3RvcmUgPSB7XG4gICAgY29ubmVjdGlvblByb21pc2U6IFByb21pc2UucmVzb2x2ZSgpLFxuICAgIHN0b3JlOiBudWxsLFxuICB9O1xuICBpZiAocm91dGUucmVkaXNVcmwpIHtcbiAgICBjb25zdCBsb2cgPSBjb25maWc/LmxvZ2dlckNvbnRyb2xsZXIgfHwgZGVmYXVsdExvZ2dlcjtcbiAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVDbGllbnQoe1xuICAgICAgdXJsOiByb3V0ZS5yZWRpc1VybCxcbiAgICB9KTtcbiAgICBjbGllbnQub24oJ2Vycm9yJywgZXJyID0+IHsgbG9nLmVycm9yKCdNaWRkbGV3YXJlcyBhZGRSYXRlTGltaXQgUmVkaXMgY2xpZW50IGVycm9yJywgeyBlcnJvcjogZXJyIH0pIH0pO1xuICAgIGNsaWVudC5vbignY29ubmVjdCcsICgpID0+IHsgfSk7XG4gICAgY2xpZW50Lm9uKCdyZWNvbm5lY3RpbmcnLCAoKSA9PiB7IH0pO1xuICAgIGNsaWVudC5vbigncmVhZHknLCAoKSA9PiB7IH0pO1xuICAgIHJlZGlzU3RvcmUuY29ubmVjdGlvblByb21pc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoY2xpZW50LmlzT3Blbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjbGllbnQuY29ubmVjdCgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2cuZXJyb3IoYENvdWxkIG5vdCBjb25uZWN0IHRvIHJlZGlzVVJMIGluIHJhdGUgbGltaXQ6ICR7ZX1gKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJlZGlzU3RvcmUuY29ubmVjdGlvblByb21pc2UoKTtcbiAgICByZWRpc1N0b3JlLnN0b3JlID0gbmV3IFJlZGlzU3RvcmUoe1xuICAgICAgc2VuZENvbW1hbmQ6IGFzeW5jICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGF3YWl0IHJlZGlzU3RvcmUuY29ubmVjdGlvblByb21pc2UoKTtcbiAgICAgICAgcmV0dXJuIGNsaWVudC5zZW5kQ29tbWFuZChhcmdzKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgY29uZmlnLnJhdGVMaW1pdHMucHVzaCh7XG4gICAgcGF0aDogcGF0aFRvUmVnZXhwKHJvdXRlLnJlcXVlc3RQYXRoKSxcbiAgICByZXF1ZXN0Q291bnQ6IHJvdXRlLnJlcXVlc3RDb3VudCxcbiAgICByZXF1ZXN0TWV0aG9kczogcm91dGUucmVxdWVzdE1ldGhvZHMsXG4gICAgaW5jbHVkZU1hc3RlcktleTogcm91dGUuaW5jbHVkZU1hc3RlcktleSxcbiAgICBpbmNsdWRlSW50ZXJuYWxSZXF1ZXN0czogcm91dGUuaW5jbHVkZUludGVybmFsUmVxdWVzdHMsXG4gICAgZXJyb3JSZXNwb25zZU1lc3NhZ2U6IHJvdXRlLmVycm9yUmVzcG9uc2VNZXNzYWdlIHx8IFJhdGVMaW1pdE9wdGlvbnMuZXJyb3JSZXNwb25zZU1lc3NhZ2UuZGVmYXVsdCxcbiAgICBoYW5kbGVyOiByYXRlTGltaXQoe1xuICAgICAgd2luZG93TXM6IHJvdXRlLnJlcXVlc3RUaW1lV2luZG93LFxuICAgICAgbWF4OiByb3V0ZS5yZXF1ZXN0Q291bnQsXG4gICAgICBtZXNzYWdlOiByb3V0ZS5lcnJvclJlc3BvbnNlTWVzc2FnZSB8fCBSYXRlTGltaXRPcHRpb25zLmVycm9yUmVzcG9uc2VNZXNzYWdlLmRlZmF1bHQsXG4gICAgICBoYW5kbGVyOiAocmVxdWVzdCwgcmVzcG9uc2UsIG5leHQsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgdGhyb3cge1xuICAgICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLkNPTk5FQ1RJT05fRkFJTEVELFxuICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMubWVzc2FnZSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBza2lwOiByZXF1ZXN0ID0+IHtcbiAgICAgICAgaWYgKCFyb3V0ZS5pbmNsdWRlSW50ZXJuYWxSZXF1ZXN0cyAmJiBpc0ludGVybmFsUmVxdWVzdChyZXF1ZXN0KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZS5pbmNsdWRlTWFzdGVyS2V5KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZS5yZXF1ZXN0TWV0aG9kcykge1xuICAgICAgICAgIGNvbnN0IG1ldGhvZHNUb0NoZWNrID0gbmV3IFNldChbcmVxdWVzdC5tZXRob2RdKTtcbiAgICAgICAgICBpZiAocmVxdWVzdC5fYmF0Y2hPcmlnaW5hbE1ldGhvZCkge1xuICAgICAgICAgICAgbWV0aG9kc1RvQ2hlY2suYWRkKHJlcXVlc3QuX2JhdGNoT3JpZ2luYWxNZXRob2QpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyb3V0ZS5yZXF1ZXN0TWV0aG9kcykpIHtcbiAgICAgICAgICAgIGlmICghcm91dGUucmVxdWVzdE1ldGhvZHMuc29tZShtID0+IG1ldGhvZHNUb0NoZWNrLmhhcyhtKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAocm91dGUucmVxdWVzdE1ldGhvZHMpO1xuICAgICAgICAgICAgaWYgKCFbLi4ubWV0aG9kc1RvQ2hlY2tdLnNvbWUobSA9PiByZWdFeHAudGVzdChtKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXF1ZXN0LmF1dGg/LmlzTWFzdGVyO1xuICAgICAgfSxcbiAgICAgIGtleUdlbmVyYXRvcjogYXN5bmMgcmVxdWVzdCA9PiB7XG4gICAgICAgIGlmIChyb3V0ZS56b25lID09PSBQYXJzZS5TZXJ2ZXIuUmF0ZUxpbWl0Wm9uZS5nbG9iYWwpIHtcbiAgICAgICAgICByZXR1cm4gcmVxdWVzdC5jb25maWcuYXBwSWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG9rZW4gPSByZXF1ZXN0LmluZm8uc2Vzc2lvblRva2VuO1xuICAgICAgICBpZiAocm91dGUuem9uZSA9PT0gUGFyc2UuU2VydmVyLlJhdGVMaW1pdFpvbmUuc2Vzc2lvbiAmJiB0b2tlbikge1xuICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGUuem9uZSA9PT0gUGFyc2UuU2VydmVyLlJhdGVMaW1pdFpvbmUudXNlciAmJiB0b2tlbikge1xuICAgICAgICAgIGlmICghcmVxdWVzdC5hdXRoKSB7XG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGhhbmRsZVBhcnNlU2Vzc2lvbihyZXF1ZXN0LCBudWxsLCByZXNvbHZlKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXF1ZXN0LmF1dGg/LnVzZXI/LmlkICYmIHJvdXRlLnpvbmUgPT09ICd1c2VyJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3QuYXV0aC51c2VyLmlkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVxdWVzdC5jb25maWcuaXA7XG4gICAgICB9LFxuICAgICAgc3RvcmU6IHJlZGlzU3RvcmUuc3RvcmUsXG4gICAgfSksXG4gICAgY2xvdWQsXG4gIH0pO1xuICBDb25maWcucHV0KGNvbmZpZyk7XG59O1xuXG4vKipcbiAqIERlZHVwbGljYXRlcyBhIHJlcXVlc3QgdG8gZW5zdXJlIGlkZW1wb3RlbmN5LiBEdXBsaWNhdGVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSByZXF1ZXN0IElEXG4gKiBpbiB0aGUgcmVxdWVzdCBoZWFkZXIuIElmIGEgcmVxdWVzdCBoYXMgbm8gcmVxdWVzdCBJRCwgaXQgaXMgZXhlY3V0ZWQgYW55d2F5LlxuICogQHBhcmFtIHsqfSByZXEgVGhlIHJlcXVlc3QgdG8gZXZhbHVhdGUuXG4gKiBAcmV0dXJucyBQcm9taXNlPHt9PlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvbWlzZUVuc3VyZUlkZW1wb3RlbmN5KHJlcSkge1xuICAvLyBFbmFibGUgZmVhdHVyZSBvbmx5IGZvciBNb25nb0RCXG4gIGlmIChcbiAgICAhKFxuICAgICAgcmVxLmNvbmZpZy5kYXRhYmFzZS5hZGFwdGVyIGluc3RhbmNlb2YgTW9uZ29TdG9yYWdlQWRhcHRlciB8fFxuICAgICAgcmVxLmNvbmZpZy5kYXRhYmFzZS5hZGFwdGVyIGluc3RhbmNlb2YgUG9zdGdyZXNTdG9yYWdlQWRhcHRlclxuICAgIClcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIC8vIEdldCBwYXJhbWV0ZXJzXG4gIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gIGNvbnN0IHJlcXVlc3RJZCA9ICgocmVxIHx8IHt9KS5oZWFkZXJzIHx8IHt9KVsneC1wYXJzZS1yZXF1ZXN0LWlkJ107XG4gIGNvbnN0IHsgcGF0aHMsIHR0bCB9ID0gY29uZmlnLmlkZW1wb3RlbmN5T3B0aW9ucztcbiAgaWYgKCFyZXF1ZXN0SWQgfHwgIWNvbmZpZy5pZGVtcG90ZW5jeU9wdGlvbnMpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbiAgLy8gUmVxdWVzdCBwYXRoIG1heSBjb250YWluIHRyYWlsaW5nIHNsYXNoZXMsIGRlcGVuZGluZyBvbiB0aGUgb3JpZ2luYWwgcmVxdWVzdCwgc28gcmVtb3ZlXG4gIC8vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgdG8gbWFrZSBpdCBlYXNpZXIgdG8gc3BlY2lmeSBwYXRocyBpbiB0aGUgY29uZmlndXJhdGlvblxuICBjb25zdCByZXFQYXRoID0gcmVxLnBhdGgucmVwbGFjZSgvXlxcL3xcXC8kLywgJycpO1xuICAvLyBEZXRlcm1pbmUgd2hldGhlciBpZGVtcG90ZW5jeSBpcyBlbmFibGVkIGZvciBjdXJyZW50IHJlcXVlc3QgcGF0aFxuICBsZXQgbWF0Y2ggPSBmYWxzZTtcbiAgZm9yIChjb25zdCBwYXRoIG9mIHBhdGhzKSB7XG4gICAgLy8gQXNzdW1lIG9uZSB3YW50cyBhIHBhdGggdG8gYWx3YXlzIG1hdGNoIGZyb20gdGhlIGJlZ2lubmluZyB0byBwcmV2ZW50IGFueSBtaXN0YWtlc1xuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChwYXRoLmNoYXJBdCgwKSA9PT0gJ14nID8gcGF0aCA6ICdeJyArIHBhdGgpO1xuICAgIGlmIChyZXFQYXRoLm1hdGNoKHJlZ2V4KSkge1xuICAgICAgbWF0Y2ggPSB0cnVlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbiAgLy8gVHJ5IHRvIHN0b3JlIHJlcXVlc3RcbiAgY29uc3QgZXhwaXJ5RGF0ZSA9IG5ldyBEYXRlKG5ldyBEYXRlKCkuc2V0U2Vjb25kcyhuZXcgRGF0ZSgpLmdldFNlY29uZHMoKSArIHR0bCkpO1xuICByZXR1cm4gcmVzdFxuICAgIC5jcmVhdGUoY29uZmlnLCBhdXRoLm1hc3Rlcihjb25maWcpLCAnX0lkZW1wb3RlbmN5Jywge1xuICAgICAgcmVxSWQ6IHJlcXVlc3RJZCxcbiAgICAgIGV4cGlyZTogUGFyc2UuX2VuY29kZShleHBpcnlEYXRlKSxcbiAgICB9KVxuICAgIC5jYXRjaChlID0+IHtcbiAgICAgIGlmIChlLmNvZGUgPT0gUGFyc2UuRXJyb3IuRFVQTElDQVRFX1ZBTFVFKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5EVVBMSUNBVEVfUkVRVUVTVCwgJ0R1cGxpY2F0ZSByZXF1ZXN0Jyk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcykge1xuICByZXMuc3RhdHVzKDQwMyk7XG4gIHJlcy5lbmQoJ3tcImVycm9yXCI6XCJ1bmF1dGhvcml6ZWRcIn0nKTtcbn1cblxuZnVuY3Rpb24gbWFsZm9ybWVkQ29udGV4dChyZXEsIHJlcykge1xuICByZXMuc3RhdHVzKDQwMCk7XG4gIHJlcy5qc29uKHsgY29kZTogUGFyc2UuRXJyb3IuSU5WQUxJRF9KU09OLCBlcnJvcjogJ0ludmFsaWQgb2JqZWN0IGZvciBjb250ZXh0LicgfSk7XG59XG5cbi8qKlxuICogRXhwcmVzcyA0IGFsbG93ZWQgYSBkb3VibGUgZm9yd2FyZCBzbGFzaCBiZXR3ZWVuIGEgcm91dGUgYW5kIHJvdXRlci4gQWx0aG91Z2hcbiAqIHRoaXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYW4gYW50aS1wYXR0ZXJuLCB3ZSBuZWVkIHRvIHN1cHBvcnQgaXQgZm9yIGJhY2t3YXJkc1xuICogY29tcGF0aWJpbGl0eS5cbiAqXG4gKiBUZWNobmljYWxseSB2YWxpZCBVUkwgd2l0aCBkb3VibGUgZm9yb3dhcmQgc2xhc2g6XG4gKiBodHRwOi8vbG9jYWxob3N0OjEzMzcvcGFyc2UvL2Z1bmN0aW9ucy90ZXN0RnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFsbG93RG91YmxlRm9yd2FyZFNsYXNoKHJlcSwgcmVzLCBuZXh0KSB7XG4gIHJlcS51cmwgPSByZXEudXJsLnN0YXJ0c1dpdGgoJy8vJykgPyByZXEudXJsLnN1YnN0cmluZygxKSA6IHJlcS51cmw7XG4gIG5leHQoKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsS0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsS0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssT0FBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU0sS0FBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU8sb0JBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFRLHVCQUFBLEdBQUFULHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUyxpQkFBQSxHQUFBVixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVUsWUFBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsYUFBQSxHQUFBWCxPQUFBO0FBQ0EsSUFBQVksZUFBQSxHQUFBYixzQkFBQSxD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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "parse-server",
3
- "version": "9.10.2-alpha.6",
3
+ "version": "9.10.2-alpha.8",
4
4
  "description": "An express module providing a Parse-compatible API server",
5
5
  "main": "lib/index.js",
6
6
  "repository": {