parse-server 6.3.0-beta.1 → 6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -66,9 +66,16 @@ class PushController {
66
66
 
67
67
  // Force filtering on only valid device tokens
68
68
  const updateWhere = (0, _utils.applyDeviceTokenExists)(where);
69
- badgeUpdate = () => {
69
+ badgeUpdate = async () => {
70
70
  // Build a real RestQuery so we can use it in RestWrite
71
- const restQuery = new _RestQuery.default(config, (0, _Auth.master)(config), '_Installation', updateWhere);
71
+ const restQuery = await (0, _RestQuery.default)({
72
+ method: _RestQuery.default.Method.find,
73
+ config,
74
+ runBeforeFind: false,
75
+ auth: (0, _Auth.master)(config),
76
+ className: '_Installation',
77
+ restWhere: updateWhere
78
+ });
72
79
  return restQuery.buildRestWhere().then(() => {
73
80
  const write = new _RestWrite.default(config, (0, _Auth.master)(config), '_Installation', restQuery.restWhere, restUpdate);
74
81
  write.runOptions.many = true;
@@ -215,4 +222,4 @@ class PushController {
215
222
  exports.PushController = PushController;
216
223
  var _default = PushController;
217
224
  exports.default = _default;
218
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQdXNoQ29udHJvbGxlciIsInNlbmRQdXNoIiwiYm9keSIsIndoZXJlIiwiY29uZmlnIiwiYXV0aCIsIm9uUHVzaFN0YXR1c1NhdmVkIiwibm93IiwiRGF0ZSIsImhhc1B1c2hTdXBwb3J0IiwiUGFyc2UiLCJFcnJvciIsIlBVU0hfTUlTQ09ORklHVVJFRCIsImV4cGlyYXRpb25fdGltZSIsImdldEV4cGlyYXRpb25UaW1lIiwiZXhwaXJhdGlvbl9pbnRlcnZhbCIsImdldEV4cGlyYXRpb25JbnRlcnZhbCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInR0bE1zIiwidmFsdWVPZiIsInB1c2hUaW1lIiwiZ2V0UHVzaFRpbWUiLCJkYXRlIiwiZm9ybWF0UHVzaFRpbWUiLCJiYWRnZVVwZGF0ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiZGF0YSIsImJhZGdlIiwicmVzdFVwZGF0ZSIsInRvTG93ZXJDYXNlIiwiX19vcCIsImFtb3VudCIsIk51bWJlciIsInVwZGF0ZVdoZXJlIiwiYXBwbHlEZXZpY2VUb2tlbkV4aXN0cyIsInJlc3RRdWVyeSIsIlJlc3RRdWVyeSIsIm1hc3RlciIsImJ1aWxkUmVzdFdoZXJlIiwidGhlbiIsIndyaXRlIiwiUmVzdFdyaXRlIiwicmVzdFdoZXJlIiwicnVuT3B0aW9ucyIsIm1hbnkiLCJleGVjdXRlIiwicHVzaFN0YXR1cyIsInB1c2hTdGF0dXNIYW5kbGVyIiwic2V0SW5pdGlhbCIsIm9iamVjdElkIiwiYXVkaWVuY2VfaWQiLCJhdWRpZW5jZUlkIiwidXBkYXRlQXVkaWVuY2UiLCJsYXN0VXNlZCIsIl9fdHlwZSIsImlzbyIsInRvSVNPU3RyaW5nIiwidGltZXNVc2VkIiwiaGFzUHVzaFNjaGVkdWxlZFN1cHBvcnQiLCJwdXNoQ29udHJvbGxlclF1ZXVlIiwiZW5xdWV1ZSIsImNhdGNoIiwiZXJyIiwiZmFpbCIsImhhc0V4cGlyYXRpb25UaW1lIiwiZXhwaXJhdGlvblRpbWVQYXJhbSIsImV4cGlyYXRpb25UaW1lIiwiaXNGaW5pdGUiLCJoYXNFeHBpcmF0aW9uSW50ZXJ2YWwiLCJleHBpcmF0aW9uSW50ZXJ2YWxQYXJhbSIsImhhc1B1c2hUaW1lIiwicHVzaFRpbWVQYXJhbSIsImlzTG9jYWxUaW1lIiwicHVzaFRpbWVIYXNUaW1lem9uZUNvbXBvbmVudCIsIm9mZnNldFBhdHRlcm4iLCJpbmRleE9mIiwibGVuZ3RoIiwidGVzdCIsImlzb1N0cmluZyIsInN1YnN0cmluZyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Db250cm9sbGVycy9QdXNoQ29udHJvbGxlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQYXJzZSB9IGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IFJlc3RRdWVyeSBmcm9tICcuLi9SZXN0UXVlcnknO1xuaW1wb3J0IFJlc3RXcml0ZSBmcm9tICcuLi9SZXN0V3JpdGUnO1xuaW1wb3J0IHsgbWFzdGVyIH0gZnJvbSAnLi4vQXV0aCc7XG5pbXBvcnQgeyBwdXNoU3RhdHVzSGFuZGxlciB9IGZyb20gJy4uL1N0YXR1c0hhbmRsZXInO1xuaW1wb3J0IHsgYXBwbHlEZXZpY2VUb2tlbkV4aXN0cyB9IGZyb20gJy4uL1B1c2gvdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgUHVzaENvbnRyb2xsZXIge1xuICBzZW5kUHVzaChib2R5ID0ge30sIHdoZXJlID0ge30sIGNvbmZpZywgYXV0aCwgb25QdXNoU3RhdHVzU2F2ZWQgPSAoKSA9PiB7fSwgbm93ID0gbmV3IERhdGUoKSkge1xuICAgIGlmICghY29uZmlnLmhhc1B1c2hTdXBwb3J0KSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuUFVTSF9NSVNDT05GSUdVUkVELCAnTWlzc2luZyBwdXNoIGNvbmZpZ3VyYXRpb24nKTtcbiAgICB9XG5cbiAgICAvLyBSZXBsYWNlIHRoZSBleHBpcmF0aW9uX3RpbWUgYW5kIHB1c2hfdGltZSB3aXRoIGEgdmFsaWQgVW5peCBlcG9jaCBtaWxsaXNlY29uZHMgdGltZVxuICAgIGJvZHkuZXhwaXJhdGlvbl90aW1lID0gUHVzaENvbnRyb2xsZXIuZ2V0RXhwaXJhdGlvblRpbWUoYm9keSk7XG4gICAgYm9keS5leHBpcmF0aW9uX2ludGVydmFsID0gUHVzaENvbnRyb2xsZXIuZ2V0RXhwaXJhdGlvbkludGVydmFsKGJvZHkpO1xuICAgIGlmIChib2R5LmV4cGlyYXRpb25fdGltZSAmJiBib2R5LmV4cGlyYXRpb25faW50ZXJ2YWwpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuUFVTSF9NSVNDT05GSUdVUkVELFxuICAgICAgICAnQm90aCBleHBpcmF0aW9uX3RpbWUgYW5kIGV4cGlyYXRpb25faW50ZXJ2YWwgY2Fubm90IGJlIHNldCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gSW1tZWRpYXRlIHB1c2hcbiAgICBpZiAoYm9keS5leHBpcmF0aW9uX2ludGVydmFsICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYm9keSwgJ3B1c2hfdGltZScpKSB7XG4gICAgICBjb25zdCB0dGxNcyA9IGJvZHkuZXhwaXJhdGlvbl9pbnRlcnZhbCAqIDEwMDA7XG4gICAgICBib2R5LmV4cGlyYXRpb25fdGltZSA9IG5ldyBEYXRlKG5vdy52YWx1ZU9mKCkgKyB0dGxNcykudmFsdWVPZigpO1xuICAgIH1cblxuICAgIGNvbnN0IHB1c2hUaW1lID0gUHVzaENvbnRyb2xsZXIuZ2V0UHVzaFRpbWUoYm9keSk7XG4gICAgaWYgKHB1c2hUaW1lICYmIHB1c2hUaW1lLmRhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBib2R5WydwdXNoX3RpbWUnXSA9IFB1c2hDb250cm9sbGVyLmZvcm1hdFB1c2hUaW1lKHB1c2hUaW1lKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBJZiB0aGUgcmVxIGNhbiBwYXNzIHRoZSBjaGVja2luZywgd2UgcmV0dXJuIGltbWVkaWF0ZWx5IGluc3RlYWQgb2Ygd2FpdGluZ1xuICAgIC8vIHB1c2hlcyB0byBiZSBzZW50LiBXZSBwcm9iYWJseSBjaGFuZ2UgdGhpcyBiZWhhdmlvdXIgaW4gdGhlIGZ1dHVyZS5cbiAgICBsZXQgYmFkZ2VVcGRhdGUgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfTtcblxuICAgIGlmIChib2R5LmRhdGEgJiYgYm9keS5kYXRhLmJhZGdlKSB7XG4gICAgICBjb25zdCBiYWRnZSA9IGJvZHkuZGF0YS5iYWRnZTtcbiAgICAgIGxldCByZXN0VXBkYXRlID0ge307XG4gICAgICBpZiAodHlwZW9mIGJhZGdlID09ICdzdHJpbmcnICYmIGJhZGdlLnRvTG93ZXJDYXNlKCkgPT09ICdpbmNyZW1lbnQnKSB7XG4gICAgICAgIHJlc3RVcGRhdGUgPSB7IGJhZGdlOiB7IF9fb3A6ICdJbmNyZW1lbnQnLCBhbW91bnQ6IDEgfSB9O1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdHlwZW9mIGJhZGdlID09ICdvYmplY3QnICYmXG4gICAgICAgIHR5cGVvZiBiYWRnZS5fX29wID09ICdzdHJpbmcnICYmXG4gICAgICAgIGJhZGdlLl9fb3AudG9Mb3dlckNhc2UoKSA9PSAnaW5jcmVtZW50JyAmJlxuICAgICAgICBOdW1iZXIoYmFkZ2UuYW1vdW50KVxuICAgICAgKSB7XG4gICAgICAgIHJlc3RVcGRhdGUgPSB7IGJhZGdlOiB7IF9fb3A6ICdJbmNyZW1lbnQnLCBhbW91bnQ6IGJhZGdlLmFtb3VudCB9IH07XG4gICAgICB9IGVsc2UgaWYgKE51bWJlcihiYWRnZSkpIHtcbiAgICAgICAgcmVzdFVwZGF0ZSA9IHsgYmFkZ2U6IGJhZGdlIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBcIkludmFsaWQgdmFsdWUgZm9yIGJhZGdlLCBleHBlY3RlZCBudW1iZXIgb3IgJ0luY3JlbWVudCcgb3Ige2luY3JlbWVudDogbnVtYmVyfVwiO1xuICAgICAgfVxuXG4gICAgICAvLyBGb3JjZSBmaWx0ZXJpbmcgb24gb25seSB2YWxpZCBkZXZpY2UgdG9rZW5zXG4gICAgICBjb25zdCB1cGRhdGVXaGVyZSA9IGFwcGx5RGV2aWNlVG9rZW5FeGlzdHMod2hlcmUpO1xuICAgICAgYmFkZ2VVcGRhdGUgPSAoKSA9PiB7XG4gICAgICAgIC8vIEJ1aWxkIGEgcmVhbCBSZXN0UXVlcnkgc28gd2UgY2FuIHVzZSBpdCBpbiBSZXN0V3JpdGVcbiAgICAgICAgY29uc3QgcmVzdFF1ZXJ5ID0gbmV3IFJlc3RRdWVyeShjb25maWcsIG1hc3Rlcihjb25maWcpLCAnX0luc3RhbGxhdGlvbicsIHVwZGF0ZVdoZXJlKTtcbiAgICAgICAgcmV0dXJuIHJlc3RRdWVyeS5idWlsZFJlc3RXaGVyZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHdyaXRlID0gbmV3IFJlc3RXcml0ZShcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIG1hc3Rlcihjb25maWcpLFxuICAgICAgICAgICAgJ19JbnN0YWxsYXRpb24nLFxuICAgICAgICAgICAgcmVzdFF1ZXJ5LnJlc3RXaGVyZSxcbiAgICAgICAgICAgIHJlc3RVcGRhdGVcbiAgICAgICAgICApO1xuICAgICAgICAgIHdyaXRlLnJ1bk9wdGlvbnMubWFueSA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIHdyaXRlLmV4ZWN1dGUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBwdXNoU3RhdHVzID0gcHVzaFN0YXR1c0hhbmRsZXIoY29uZmlnKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHB1c2hTdGF0dXMuc2V0SW5pdGlhbChib2R5LCB3aGVyZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBvblB1c2hTdGF0dXNTYXZlZChwdXNoU3RhdHVzLm9iamVjdElkKTtcbiAgICAgICAgcmV0dXJuIGJhZGdlVXBkYXRlKCk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAvLyBVcGRhdGUgYXVkaWVuY2UgbGFzdFVzZWQgYW5kIHRpbWVzVXNlZFxuICAgICAgICBpZiAoYm9keS5hdWRpZW5jZV9pZCkge1xuICAgICAgICAgIGNvbnN0IGF1ZGllbmNlSWQgPSBib2R5LmF1ZGllbmNlX2lkO1xuXG4gICAgICAgICAgdmFyIHVwZGF0ZUF1ZGllbmNlID0ge1xuICAgICAgICAgICAgbGFzdFVzZWQ6IHsgX190eXBlOiAnRGF0ZScsIGlzbzogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH0sXG4gICAgICAgICAgICB0aW1lc1VzZWQ6IHsgX19vcDogJ0luY3JlbWVudCcsIGFtb3VudDogMSB9LFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3Qgd3JpdGUgPSBuZXcgUmVzdFdyaXRlKFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgbWFzdGVyKGNvbmZpZyksXG4gICAgICAgICAgICAnX0F1ZGllbmNlJyxcbiAgICAgICAgICAgIHsgb2JqZWN0SWQ6IGF1ZGllbmNlSWQgfSxcbiAgICAgICAgICAgIHVwZGF0ZUF1ZGllbmNlXG4gICAgICAgICAgKTtcbiAgICAgICAgICB3cml0ZS5leGVjdXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRG9uJ3Qgd2FpdCBmb3IgdGhlIGF1ZGllbmNlIHVwZGF0ZSBwcm9taXNlIHRvIHJlc29sdmUuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYm9keSwgJ3B1c2hfdGltZScpICYmXG4gICAgICAgICAgY29uZmlnLmhhc1B1c2hTY2hlZHVsZWRTdXBwb3J0XG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29uZmlnLnB1c2hDb250cm9sbGVyUXVldWUuZW5xdWV1ZShib2R5LCB3aGVyZSwgY29uZmlnLCBhdXRoLCBwdXNoU3RhdHVzKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgcmV0dXJuIHB1c2hTdGF0dXMuZmFpbChlcnIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZXhwaXJhdGlvbiB0aW1lIGZyb20gdGhlIHJlcXVlc3QgYm9keS5cbiAgICogQHBhcmFtIHtPYmplY3R9IHJlcXVlc3QgQSByZXF1ZXN0IG9iamVjdFxuICAgKiBAcmV0dXJucyB7TnVtYmVyfHVuZGVmaW5lZH0gVGhlIGV4cGlyYXRpb24gdGltZSBpZiBpdCBleGlzdHMgaW4gdGhlIHJlcXVlc3RcbiAgICovXG4gIHN0YXRpYyBnZXRFeHBpcmF0aW9uVGltZShib2R5ID0ge30pIHtcbiAgICB2YXIgaGFzRXhwaXJhdGlvblRpbWUgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYm9keSwgJ2V4cGlyYXRpb25fdGltZScpO1xuICAgIGlmICghaGFzRXhwaXJhdGlvblRpbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGV4cGlyYXRpb25UaW1lUGFyYW0gPSBib2R5WydleHBpcmF0aW9uX3RpbWUnXTtcbiAgICB2YXIgZXhwaXJhdGlvblRpbWU7XG4gICAgaWYgKHR5cGVvZiBleHBpcmF0aW9uVGltZVBhcmFtID09PSAnbnVtYmVyJykge1xuICAgICAgZXhwaXJhdGlvblRpbWUgPSBuZXcgRGF0ZShleHBpcmF0aW9uVGltZVBhcmFtICogMTAwMCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwaXJhdGlvblRpbWVQYXJhbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGV4cGlyYXRpb25UaW1lID0gbmV3IERhdGUoZXhwaXJhdGlvblRpbWVQYXJhbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuUFVTSF9NSVNDT05GSUdVUkVELFxuICAgICAgICBib2R5WydleHBpcmF0aW9uX3RpbWUnXSArICcgaXMgbm90IHZhbGlkIHRpbWUuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgLy8gQ2hlY2sgZXhwaXJhdGlvblRpbWUgaXMgdmFsaWQgb3Igbm90LCBpZiBpdCBpcyBub3QgdmFsaWQsIGV4cGlyYXRpb25UaW1lIGlzIE5hTlxuICAgIGlmICghaXNGaW5pdGUoZXhwaXJhdGlvblRpbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLlBVU0hfTUlTQ09ORklHVVJFRCxcbiAgICAgICAgYm9keVsnZXhwaXJhdGlvbl90aW1lJ10gKyAnIGlzIG5vdCB2YWxpZCB0aW1lLidcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBleHBpcmF0aW9uVGltZS52YWx1ZU9mKCk7XG4gIH1cblxuICBzdGF0aWMgZ2V0RXhwaXJhdGlvbkludGVydmFsKGJvZHkgPSB7fSkge1xuICAgIGNvbnN0IGhhc0V4cGlyYXRpb25JbnRlcnZhbCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChib2R5LCAnZXhwaXJhdGlvbl9pbnRlcnZhbCcpO1xuICAgIGlmICghaGFzRXhwaXJhdGlvbkludGVydmFsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGV4cGlyYXRpb25JbnRlcnZhbFBhcmFtID0gYm9keVsnZXhwaXJhdGlvbl9pbnRlcnZhbCddO1xuICAgIGlmICh0eXBlb2YgZXhwaXJhdGlvbkludGVydmFsUGFyYW0gIT09ICdudW1iZXInIHx8IGV4cGlyYXRpb25JbnRlcnZhbFBhcmFtIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuUFVTSF9NSVNDT05GSUdVUkVELFxuICAgICAgICBgZXhwaXJhdGlvbl9pbnRlcnZhbCBtdXN0IGJlIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAwYFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cGlyYXRpb25JbnRlcnZhbFBhcmFtO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwdXNoIHRpbWUgZnJvbSB0aGUgcmVxdWVzdCBib2R5LlxuICAgKiBAcGFyYW0ge09iamVjdH0gcmVxdWVzdCBBIHJlcXVlc3Qgb2JqZWN0XG4gICAqIEByZXR1cm5zIHtOdW1iZXJ8dW5kZWZpbmVkfSBUaGUgcHVzaCB0aW1lIGlmIGl0IGV4aXN0cyBpbiB0aGUgcmVxdWVzdFxuICAgKi9cbiAgc3RhdGljIGdldFB1c2hUaW1lKGJvZHkgPSB7fSkge1xuICAgIHZhciBoYXNQdXNoVGltZSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChib2R5LCAncHVzaF90aW1lJyk7XG4gICAgaWYgKCFoYXNQdXNoVGltZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcHVzaFRpbWVQYXJhbSA9IGJvZHlbJ3B1c2hfdGltZSddO1xuICAgIHZhciBkYXRlO1xuICAgIHZhciBpc0xvY2FsVGltZSA9IHRydWU7XG5cbiAgICBpZiAodHlwZW9mIHB1c2hUaW1lUGFyYW0gPT09ICdudW1iZXInKSB7XG4gICAgICBkYXRlID0gbmV3IERhdGUocHVzaFRpbWVQYXJhbSAqIDEwMDApO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHB1c2hUaW1lUGFyYW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICBpc0xvY2FsVGltZSA9ICFQdXNoQ29udHJvbGxlci5wdXNoVGltZUhhc1RpbWV6b25lQ29tcG9uZW50KHB1c2hUaW1lUGFyYW0pO1xuICAgICAgZGF0ZSA9IG5ldyBEYXRlKHB1c2hUaW1lUGFyYW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLlBVU0hfTUlTQ09ORklHVVJFRCxcbiAgICAgICAgYm9keVsncHVzaF90aW1lJ10gKyAnIGlzIG5vdCB2YWxpZCB0aW1lLidcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIENoZWNrIHB1c2hUaW1lIGlzIHZhbGlkIG9yIG5vdCwgaWYgaXQgaXMgbm90IHZhbGlkLCBwdXNoVGltZSBpcyBOYU5cbiAgICBpZiAoIWlzRmluaXRlKGRhdGUpKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLlBVU0hfTUlTQ09ORklHVVJFRCxcbiAgICAgICAgYm9keVsncHVzaF90aW1lJ10gKyAnIGlzIG5vdCB2YWxpZCB0aW1lLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGUsXG4gICAgICBpc0xvY2FsVGltZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIElTTzg2MDEgZm9ybWF0dGVkIGRhdGUgY29udGFpbnMgYSB0aW1lem9uZSBjb21wb25lbnRcbiAgICogQHBhcmFtIHB1c2hUaW1lUGFyYW0ge3N0cmluZ31cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgcHVzaFRpbWVIYXNUaW1lem9uZUNvbXBvbmVudChwdXNoVGltZVBhcmFtOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBvZmZzZXRQYXR0ZXJuID0gLyguKykoWystXSlcXGRcXGQ6XFxkXFxkJC87XG4gICAgcmV0dXJuIChcbiAgICAgIHB1c2hUaW1lUGFyYW0uaW5kZXhPZignWicpID09PSBwdXNoVGltZVBhcmFtLmxlbmd0aCAtIDEgfHwgb2Zmc2V0UGF0dGVybi50ZXN0KHB1c2hUaW1lUGFyYW0pIC8vIDIwMDctMDQtMDVUMTI6MzBaXG4gICAgKTsgLy8gMjAwNy0wNC0wNVQxMjozMC4wMDArMDI6MDAsIDIwMDctMDQtMDVUMTI6MzAuMDAwLTAyOjAwXG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBkYXRlIHRvIElTTyBmb3JtYXQgaW4gVVRDIHRpbWUgYW5kIHN0cmlwcyB0aGUgdGltZXpvbmUgaWYgYGlzTG9jYWxUaW1lYCBpcyB0cnVlXG4gICAqIEBwYXJhbSBkYXRlIHtEYXRlfVxuICAgKiBAcGFyYW0gaXNMb2NhbFRpbWUge2Jvb2xlYW59XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgZm9ybWF0UHVzaFRpbWUoeyBkYXRlLCBpc0xvY2FsVGltZSB9OiB7IGRhdGU6IERhdGUsIGlzTG9jYWxUaW1lOiBib29sZWFuIH0pIHtcbiAgICBpZiAoaXNMb2NhbFRpbWUpIHtcbiAgICAgIC8vIFN0cmlwICdaJ1xuICAgICAgY29uc3QgaXNvU3RyaW5nID0gZGF0ZS50b0lTT1N0cmluZygpO1xuICAgICAgcmV0dXJuIGlzb1N0cmluZy5zdWJzdHJpbmcoMCwgaXNvU3RyaW5nLmluZGV4T2YoJ1onKSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUHVzaENvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUF1RDtBQUVoRCxNQUFNQSxjQUFjLENBQUM7RUFDMUJDLFFBQVEsQ0FBQ0MsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFQyxHQUFHLEdBQUcsSUFBSUMsSUFBSSxFQUFFLEVBQUU7SUFDNUYsSUFBSSxDQUFDSixNQUFNLENBQUNLLGNBQWMsRUFBRTtNQUMxQixNQUFNLElBQUlDLFdBQUssQ0FBQ0MsS0FBSyxDQUFDRCxXQUFLLENBQUNDLEtBQUssQ0FBQ0Msa0JBQWtCLEVBQUUsNEJBQTRCLENBQUM7SUFDckY7O0lBRUE7SUFDQVYsSUFBSSxDQUFDVyxlQUFlLEdBQUdiLGNB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
225
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQdXNoQ29udHJvbGxlciIsInNlbmRQdXNoIiwiYm9keSIsIndoZXJlIiwiY29uZmlnIiwiYXV0aCIsIm9uUHVzaFN0YXR1c1NhdmVkIiwibm93IiwiRGF0ZSIsImhhc1B1c2hTdXBwb3J0IiwiUGFyc2UiLCJFcnJvciIsIlBVU0hfTUlTQ09ORklHVVJFRCIsImV4cGlyYXRpb25fdGltZSIsImdldEV4cGlyYXRpb25UaW1lIiwiZXhwaXJhdGlvbl9pbnRlcnZhbCIsImdldEV4cGlyYXRpb25JbnRlcnZhbCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInR0bE1zIiwidmFsdWVPZiIsInB1c2hUaW1lIiwiZ2V0UHVzaFRpbWUiLCJkYXRlIiwiZm9ybWF0UHVzaFRpbWUiLCJiYWRnZVVwZGF0ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiZGF0YSIsImJhZGdlIiwicmVzdFVwZGF0ZSIsInRvTG93ZXJDYXNlIiwiX19vcCIsImFtb3VudCIsIk51bWJlciIsInVwZGF0ZVdoZXJlIiwiYXBwbHlEZXZpY2VUb2tlbkV4aXN0cyIsInJlc3RRdWVyeSIsIlJlc3RRdWVyeSIsIm1ldGhvZCIsIk1ldGhvZCIsImZpbmQiLCJydW5CZWZvcmVGaW5kIiwibWFzdGVyIiwiY2xhc3NOYW1lIiwicmVzdFdoZXJlIiwiYnVpbGRSZXN0V2hlcmUiLCJ0aGVuIiwid3JpdGUiLCJSZXN0V3JpdGUiLCJydW5PcHRpb25zIiwibWFueSIsImV4ZWN1dGUiLCJwdXNoU3RhdHVzIiwicHVzaFN0YXR1c0hhbmRsZXIiLCJzZXRJbml0aWFsIiwib2JqZWN0SWQiLCJhdWRpZW5jZV9pZCIsImF1ZGllbmNlSWQiLCJ1cGRhdGVBdWRpZW5jZSIsImxhc3RVc2VkIiwiX190eXBlIiwiaXNvIiwidG9JU09TdHJpbmciLCJ0aW1lc1VzZWQiLCJoYXNQdXNoU2NoZWR1bGVkU3VwcG9ydCIsInB1c2hDb250cm9sbGVyUXVldWUiLCJlbnF1ZXVlIiwiY2F0Y2giLCJlcnIiLCJmYWlsIiwiaGFzRXhwaXJhdGlvblRpbWUiLCJleHBpcmF0aW9uVGltZVBhcmFtIiwiZXhwaXJhdGlvblRpbWUiLCJpc0Zpbml0ZSIsImhhc0V4cGlyYXRpb25JbnRlcnZhbCIsImV4cGlyYXRpb25JbnRlcnZhbFBhcmFtIiwiaGFzUHVzaFRpbWUiLCJwdXNoVGltZVBhcmFtIiwiaXNMb2NhbFRpbWUiLCJwdXNoVGltZUhhc1RpbWV6b25lQ29tcG9uZW50Iiwib2Zmc2V0UGF0dGVybiIsImluZGV4T2YiLCJsZW5ndGgiLCJ0ZXN0IiwiaXNvU3RyaW5nIiwic3Vic3RyaW5nIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NvbnRyb2xsZXJzL1B1c2hDb250cm9sbGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhcnNlIH0gZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgUmVzdFF1ZXJ5IGZyb20gJy4uL1Jlc3RRdWVyeSc7XG5pbXBvcnQgUmVzdFdyaXRlIGZyb20gJy4uL1Jlc3RXcml0ZSc7XG5pbXBvcnQgeyBtYXN0ZXIgfSBmcm9tICcuLi9BdXRoJztcbmltcG9ydCB7IHB1c2hTdGF0dXNIYW5kbGVyIH0gZnJvbSAnLi4vU3RhdHVzSGFuZGxlcic7XG5pbXBvcnQgeyBhcHBseURldmljZVRva2VuRXhpc3RzIH0gZnJvbSAnLi4vUHVzaC91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBQdXNoQ29udHJvbGxlciB7XG4gIHNlbmRQdXNoKGJvZHkgPSB7fSwgd2hlcmUgPSB7fSwgY29uZmlnLCBhdXRoLCBvblB1c2hTdGF0dXNTYXZlZCA9ICgpID0+IHt9LCBub3cgPSBuZXcgRGF0ZSgpKSB7XG4gICAgaWYgKCFjb25maWcuaGFzUHVzaFN1cHBvcnQpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5QVVNIX01JU0NPTkZJR1VSRUQsICdNaXNzaW5nIHB1c2ggY29uZmlndXJhdGlvbicpO1xuICAgIH1cblxuICAgIC8vIFJlcGxhY2UgdGhlIGV4cGlyYXRpb25fdGltZSBhbmQgcHVzaF90aW1lIHdpdGggYSB2YWxpZCBVbml4IGVwb2NoIG1pbGxpc2Vjb25kcyB0aW1lXG4gICAgYm9keS5leHBpcmF0aW9uX3RpbWUgPSBQdXNoQ29udHJvbGxlci5nZXRFeHBpcmF0aW9uVGltZShib2R5KTtcbiAgICBib2R5LmV4cGlyYXRpb25faW50ZXJ2YWwgPSBQdXNoQ29udHJvbGxlci5nZXRFeHBpcmF0aW9uSW50ZXJ2YWwoYm9keSk7XG4gICAgaWYgKGJvZHkuZXhwaXJhdGlvbl90aW1lICYmIGJvZHkuZXhwaXJhdGlvbl9pbnRlcnZhbCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5QVVNIX01JU0NPTkZJR1VSRUQsXG4gICAgICAgICdCb3RoIGV4cGlyYXRpb25fdGltZSBhbmQgZXhwaXJhdGlvbl9pbnRlcnZhbCBjYW5ub3QgYmUgc2V0J1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBJbW1lZGlhdGUgcHVzaFxuICAgIGlmIChib2R5LmV4cGlyYXRpb25faW50ZXJ2YWwgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChib2R5LCAncHVzaF90aW1lJykpIHtcbiAgICAgIGNvbnN0IHR0bE1zID0gYm9keS5leHBpcmF0aW9uX2ludGVydmFsICogMTAwMDtcbiAgICAgIGJvZHkuZXhwaXJhdGlvbl90aW1lID0gbmV3IERhdGUobm93LnZhbHVlT2YoKSArIHR0bE1zKS52YWx1ZU9mKCk7XG4gICAgfVxuXG4gICAgY29uc3QgcHVzaFRpbWUgPSBQdXNoQ29udHJvbGxlci5nZXRQdXNoVGltZShib2R5KTtcbiAgICBpZiAocHVzaFRpbWUgJiYgcHVzaFRpbWUuZGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGJvZHlbJ3B1c2hfdGltZSddID0gUHVzaENvbnRyb2xsZXIuZm9ybWF0UHVzaFRpbWUocHVzaFRpbWUpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IElmIHRoZSByZXEgY2FuIHBhc3MgdGhlIGNoZWNraW5nLCB3ZSByZXR1cm4gaW1tZWRpYXRlbHkgaW5zdGVhZCBvZiB3YWl0aW5nXG4gICAgLy8gcHVzaGVzIHRvIGJlIHNlbnQuIFdlIHByb2JhYmx5IGNoYW5nZSB0aGlzIGJlaGF2aW91ciBpbiB0aGUgZnV0dXJlLlxuICAgIGxldCBiYWRnZVVwZGF0ZSA9ICgpID0+IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9O1xuXG4gICAgaWYgKGJvZHkuZGF0YSAmJiBib2R5LmRhdGEuYmFkZ2UpIHtcbiAgICAgIGNvbnN0IGJhZGdlID0gYm9keS5kYXRhLmJhZGdlO1xuICAgICAgbGV0IHJlc3RVcGRhdGUgPSB7fTtcbiAgICAgIGlmICh0eXBlb2YgYmFkZ2UgPT0gJ3N0cmluZycgJiYgYmFkZ2UudG9Mb3dlckNhc2UoKSA9PT0gJ2luY3JlbWVudCcpIHtcbiAgICAgICAgcmVzdFVwZGF0ZSA9IHsgYmFkZ2U6IHsgX19vcDogJ0luY3JlbWVudCcsIGFtb3VudDogMSB9IH07XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0eXBlb2YgYmFkZ2UgPT0gJ29iamVjdCcgJiZcbiAgICAgICAgdHlwZW9mIGJhZGdlLl9fb3AgPT0gJ3N0cmluZycgJiZcbiAgICAgICAgYmFkZ2UuX19vcC50b0xvd2VyQ2FzZSgpID09ICdpbmNyZW1lbnQnICYmXG4gICAgICAgIE51bWJlcihiYWRnZS5hbW91bnQpXG4gICAgICApIHtcbiAgICAgICAgcmVzdFVwZGF0ZSA9IHsgYmFkZ2U6IHsgX19vcDogJ0luY3JlbWVudCcsIGFtb3VudDogYmFkZ2UuYW1vdW50IH0gfTtcbiAgICAgIH0gZWxzZSBpZiAoTnVtYmVyKGJhZGdlKSkge1xuICAgICAgICByZXN0VXBkYXRlID0geyBiYWRnZTogYmFkZ2UgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IFwiSW52YWxpZCB2YWx1ZSBmb3IgYmFkZ2UsIGV4cGVjdGVkIG51bWJlciBvciAnSW5jcmVtZW50JyBvciB7aW5jcmVtZW50OiBudW1iZXJ9XCI7XG4gICAgICB9XG5cbiAgICAgIC8vIEZvcmNlIGZpbHRlcmluZyBvbiBvbmx5IHZhbGlkIGRldmljZSB0b2tlbnNcbiAgICAgIGNvbnN0IHVwZGF0ZVdoZXJlID0gYXBwbHlEZXZpY2VUb2tlbkV4aXN0cyh3aGVyZSk7XG4gICAgICBiYWRnZVVwZGF0ZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gQnVpbGQgYSByZWFsIFJlc3RRdWVyeSBzbyB3ZSBjYW4gdXNlIGl0IGluIFJlc3RXcml0ZVxuICAgICAgICBjb25zdCByZXN0UXVlcnkgPSBhd2FpdCBSZXN0UXVlcnkoe1xuICAgICAgICAgIG1ldGhvZDogUmVzdFF1ZXJ5Lk1ldGhvZC5maW5kLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBydW5CZWZvcmVGaW5kOiBmYWxzZSxcbiAgICAgICAgICBhdXRoOiBtYXN0ZXIoY29uZmlnKSxcbiAgICAgICAgICBjbGFzc05hbWU6ICdfSW5zdGFsbGF0aW9uJyxcbiAgICAgICAgICByZXN0V2hlcmU6IHVwZGF0ZVdoZXJlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3RRdWVyeS5idWlsZFJlc3RXaGVyZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHdyaXRlID0gbmV3IFJlc3RXcml0ZShcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIG1hc3Rlcihjb25maWcpLFxuICAgICAgICAgICAgJ19JbnN0YWxsYXRpb24nLFxuICAgICAgICAgICAgcmVzdFF1ZXJ5LnJlc3RXaGVyZSxcbiAgICAgICAgICAgIHJlc3RVcGRhdGVcbiAgICAgICAgICApO1xuICAgICAgICAgIHdyaXRlLnJ1bk9wdGlvbnMubWFueSA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIHdyaXRlLmV4ZWN1dGUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBwdXNoU3RhdHVzID0gcHVzaFN0YXR1c0hhbmRsZXIoY29uZmlnKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHB1c2hTdGF0dXMuc2V0SW5pdGlhbChib2R5LCB3aGVyZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBvblB1c2hTdGF0dXNTYXZlZChwdXNoU3RhdHVzLm9iamVjdElkKTtcbiAgICAgICAgcmV0dXJuIGJhZGdlVXBkYXRlKCk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAvLyBVcGRhdGUgYXVkaWVuY2UgbGFzdFVzZWQgYW5kIHRpbWVzVXNlZFxuICAgICAgICBpZiAoYm9keS5hdWRpZW5jZV9pZCkge1xuICAgICAgICAgIGNvbnN0IGF1ZGllbmNlSWQgPSBib2R5LmF1ZGllbmNlX2lkO1xuXG4gICAgICAgICAgdmFyIHVwZGF0ZUF1ZGllbmNlID0ge1xuICAgICAgICAgICAgbGFzdFVzZWQ6IHsgX190eXBlOiAnRGF0ZScsIGlzbzogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH0sXG4gICAgICAgICAgICB0aW1lc1VzZWQ6IHsgX19vcDogJ0luY3JlbWVudCcsIGFtb3VudDogMSB9LFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3Qgd3JpdGUgPSBuZXcgUmVzdFdyaXRlKFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgbWFzdGVyKGNvbmZpZyksXG4gICAgICAgICAgICAnX0F1ZGllbmNlJyxcbiAgICAgICAgICAgIHsgb2JqZWN0SWQ6IGF1ZGllbmNlSWQgfSxcbiAgICAgICAgICAgIHVwZGF0ZUF1ZGllbmNlXG4gICAgICAgICAgKTtcbiAgICAgICAgICB3cml0ZS5leGVjdXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRG9uJ3Qgd2FpdCBmb3IgdGhlIGF1ZGllbmNlIHVwZGF0ZSBwcm9taXNlIHRvIHJlc29sdmUuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYm9keSwgJ3B1c2hfdGltZScpICYmXG4gICAgICAgICAgY29uZmlnLmhhc1B1c2hTY2hlZHVsZWRTdXBwb3J0XG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29uZmlnLnB1c2hDb250cm9sbGVyUXVldWUuZW5xdWV1ZShib2R5LCB3aGVyZSwgY29uZmlnLCBhdXRoLCBwdXNoU3RhdHVzKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgcmV0dXJuIHB1c2hTdGF0dXMuZmFpbChlcnIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZXhwaXJhdGlvbiB0aW1lIGZyb20gdGhlIHJlcXVlc3QgYm9keS5cbiAgICogQHBhcmFtIHtPYmplY3R9IHJlcXVlc3QgQSByZXF1ZXN0IG9iamVjdFxuICAgKiBAcmV0dXJucyB7TnVtYmVyfHVuZGVmaW5lZH0gVGhlIGV4cGlyYXRpb24gdGltZSBpZiBpdCBleGlzdHMgaW4gdGhlIHJlcXVlc3RcbiAgICovXG4gIHN0YXRpYyBnZXRFeHBpcmF0aW9uVGltZShib2R5ID0ge30pIHtcbiAgICB2YXIgaGFzRXhwaXJhdGlvblRpbWUgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYm9keSwgJ2V4cGlyYXRpb25fdGltZScpO1xuICAgIGlmICghaGFzRXhwaXJhdGlvblRpbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGV4cGlyYXRpb25UaW1lUGFyYW0gPSBib2R5WydleHBpcmF0aW9uX3RpbWUnXTtcbiAgICB2YXIgZXhwaXJhdGlvblRpbWU7XG4gICAgaWYgKHR5cGVvZiBleHBpcmF0aW9uVGltZVBhcmFtID09PSAnbnVtYmVyJykge1xuICAgICAgZXhwaXJhdGlvblRpbWUgPSBuZXcgRGF0ZShleHBpcmF0aW9uVGltZVBhcmFtICogMTAwMCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwaXJhdGlvblRpbWVQYXJhbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGV4cGlyYXRpb25UaW1lID0gbmV3IERhdGUoZXhwaXJhdGlvblRpbWVQYXJhbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuUFVTSF9NSVNDT05GSUdVUkVELFxuICAgICAgICBib2R5WydleHBpcmF0aW9uX3RpbWUnXSArICcgaXMgbm90IHZhbGlkIHRpbWUuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgLy8gQ2hlY2sgZXhwaXJhdGlvblRpbWUgaXMgdmFsaWQgb3Igbm90LCBpZiBpdCBpcyBub3QgdmFsaWQsIGV4cGlyYXRpb25UaW1lIGlzIE5hTlxuICAgIGlmICghaXNGaW5pdGUoZXhwaXJhdGlvblRpbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLlBVU0hfTUlTQ09ORklHVVJFRCxcbiAgICAgICAgYm9keVsnZXhwaXJhdGlvbl90aW1lJ10gKyAnIGlzIG5vdCB2YWxpZCB0aW1lLidcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBleHBpcmF0aW9uVGltZS52YWx1ZU9mKCk7XG4gIH1cblxuICBzdGF0aWMgZ2V0RXhwaXJhdGlvbkludGVydmFsKGJvZHkgPSB7fSkge1xuICAgIGNvbnN0IGhhc0V4cGlyYXRpb25JbnRlcnZhbCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChib2R5LCAnZXhwaXJhdGlvbl9pbnRlcnZhbCcpO1xuICAgIGlmICghaGFzRXhwaXJhdGlvbkludGVydmFsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGV4cGlyYXRpb25JbnRlcnZhbFBhcmFtID0gYm9keVsnZXhwaXJhdGlvbl9pbnRlcnZhbCddO1xuICAgIGlmICh0eXBlb2YgZXhwaXJhdGlvbkludGVydmFsUGFyYW0gIT09ICdudW1iZXInIHx8IGV4cGlyYXRpb25JbnRlcnZhbFBhcmFtIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuUFVTSF9NSVNDT05GSUdVUkVELFxuICAgICAgICBgZXhwaXJhdGlvbl9pbnRlcnZhbCBtdXN0IGJlIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAwYFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cGlyYXRpb25JbnRlcnZhbFBhcmFtO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwdXNoIHRpbWUgZnJvbSB0aGUgcmVxdWVzdCBib2R5LlxuICAgKiBAcGFyYW0ge09iamVjdH0gcmVxdWVzdCBBIHJlcXVlc3Qgb2JqZWN0XG4gICAqIEByZXR1cm5zIHtOdW1iZXJ8dW5kZWZpbmVkfSBUaGUgcHVzaCB0aW1lIGlmIGl0IGV4aXN0cyBpbiB0aGUgcmVxdWVzdFxuICAgKi9cbiAgc3RhdGljIGdldFB1c2hUaW1lKGJvZHkgPSB7fSkge1xuICAgIHZhciBoYXNQdXNoVGltZSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChib2R5LCAncHVzaF90aW1lJyk7XG4gICAgaWYgKCFoYXNQdXNoVGltZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcHVzaFRpbWVQYXJhbSA9IGJvZHlbJ3B1c2hfdGltZSddO1xuICAgIHZhciBkYXRlO1xuICAgIHZhciBpc0xvY2FsVGltZSA9IHRydWU7XG5cbiAgICBpZiAodHlwZW9mIHB1c2hUaW1lUGFyYW0gPT09ICdudW1iZXInKSB7XG4gICAgICBkYXRlID0gbmV3IERhdGUocHVzaFRpbWVQYXJhbSAqIDEwMDApO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHB1c2hUaW1lUGFyYW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICBpc0xvY2FsVGltZSA9ICFQdXNoQ29udHJvbGxlci5wdXNoVGltZUhhc1RpbWV6b25lQ29tcG9uZW50KHB1c2hUaW1lUGFyYW0pO1xuICAgICAgZGF0ZSA9IG5ldyBEYXRlKHB1c2hUaW1lUGFyYW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLlBVU0hfTUlTQ09ORklHVVJFRCxcbiAgICAgICAgYm9keVsncHVzaF90aW1lJ10gKyAnIGlzIG5vdCB2YWxpZCB0aW1lLidcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIENoZWNrIHB1c2hUaW1lIGlzIHZhbGlkIG9yIG5vdCwgaWYgaXQgaXMgbm90IHZhbGlkLCBwdXNoVGltZSBpcyBOYU5cbiAgICBpZiAoIWlzRmluaXRlKGRhdGUpKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLlBVU0hfTUlTQ09ORklHVVJFRCxcbiAgICAgICAgYm9keVsncHVzaF90aW1lJ10gKyAnIGlzIG5vdCB2YWxpZCB0aW1lLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGUsXG4gICAgICBpc0xvY2FsVGltZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIElTTzg2MDEgZm9ybWF0dGVkIGRhdGUgY29udGFpbnMgYSB0aW1lem9uZSBjb21wb25lbnRcbiAgICogQHBhcmFtIHB1c2hUaW1lUGFyYW0ge3N0cmluZ31cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgcHVzaFRpbWVIYXNUaW1lem9uZUNvbXBvbmVudChwdXNoVGltZVBhcmFtOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBvZmZzZXRQYXR0ZXJuID0gLyguKykoWystXSlcXGRcXGQ6XFxkXFxkJC87XG4gICAgcmV0dXJuIChcbiAgICAgIHB1c2hUaW1lUGFyYW0uaW5kZXhPZignWicpID09PSBwdXNoVGltZVBhcmFtLmxlbmd0aCAtIDEgfHwgb2Zmc2V0UGF0dGVybi50ZXN0KHB1c2hUaW1lUGFyYW0pIC8vIDIwMDctMDQtMDVUMTI6MzBaXG4gICAgKTsgLy8gMjAwNy0wNC0wNVQxMjozMC4wMDArMDI6MDAsIDIwMDctMDQtMDVUMTI6MzAuMDAwLTAyOjAwXG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBkYXRlIHRvIElTTyBmb3JtYXQgaW4gVVRDIHRpbWUgYW5kIHN0cmlwcyB0aGUgdGltZXpvbmUgaWYgYGlzTG9jYWxUaW1lYCBpcyB0cnVlXG4gICAqIEBwYXJhbSBkYXRlIHtEYXRlfVxuICAgKiBAcGFyYW0gaXNMb2NhbFRpbWUge2Jvb2xlYW59XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgZm9ybWF0UHVzaFRpbWUoeyBkYXRlLCBpc0xvY2FsVGltZSB9OiB7IGRhdGU6IERhdGUsIGlzTG9jYWxUaW1lOiBib29sZWFuIH0pIHtcbiAgICBpZiAoaXNMb2NhbFRpbWUpIHtcbiAgICAgIC8vIFN0cmlwICdaJ1xuICAgICAgY29uc3QgaXNvU3RyaW5nID0gZGF0ZS50b0lTT1N0cmluZygpO1xuICAgICAgcmV0dXJuIGlzb1N0cmluZy5zdWJzdHJpbmcoMCwgaXNvU3RyaW5nLmluZGV4T2YoJ1onKSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUHVzaENvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUF1RDtBQUVoRCxNQUFNQSxjQUFjLENBQUM7RUFDMUJDLFFBQVEsQ0FBQ0MsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFQyxHQUFHLEdBQUcsSUFBSUMsSUFBSSxFQUFFLEVBQUU7SUFDNUYsSUFBSSxDQUFDSixNQUFNLENBQUNLLGNBQWMsRUFBRTtNQUMxQixNQUFNLElBQUlDLFdBQUssQ0FBQ0MsS0FBSyxDQUFDRCxXQUFLLENBQUNDLEtBQUssQ0FBQ0Msa0JBQWtCLEVBQUUsNEJBQTRCLENBQUM7SUFDckY7O0lBRUE7SUFDQVYsSUFBSSxDQUFDVyxlQUFlLEdBQUdiLGNBQWMsQ0FBQ2MsaUJBQWlCLENBQUNaLElBQUksQ0FBQztJQUM3REEsSUFBSSxDQUFDYSxtQkFBbUIsR0FBR2YsY0FBYyxDQUFDZ0IscUJBQXFCLENBQUNkLElBQUksQ0FBQztJQUNyRSxJQUFJQSxJQUFJLENBQUNXLGVBQWUsSUFBSVgsSUFBSSxDQUFDYSxtQkFBbUIsRUFBRTtNQUNwRCxNQUFNLElBQUlMLFdBQUssQ0FBQ0MsS0FBSyxDQUNuQkQsV0FBSyxDQUFDQyxLQUFLLENBQUNDLGtCQUFrQixFQUM5Qiw0REFBNEQsQ0FDN0Q7SUFDSDs7SUFFQTtJQUNBLElBQUlWLElBQUksQ0FBQ2EsbUJBQW1CLElBQUksQ0FBQ0UsTUFBTSxDQUFDQyxTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDbEIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUFFO01BQ3hGLE1BQU1tQixLQUFLLEdBQUduQixJQUFJLENBQUNhLG1CQUFtQixHQUFHLElBQUk7TUFDN0NiLElBQUksQ0FBQ1csZUFBZSxHQUFHLElBQUlMLElBQUksQ0FBQ0QsR0FBRyxDQUFDZSxPQUFPLEVBQUUsR0FBR0QsS0FBSyxDQUFDLENBQUNDLE9BQU8sRUFBRTtJQUNsRTtJQUVBLE1BQU1DLFFBQVEsR0FBR3ZCLGNBQWMsQ0FBQ3dCLFdBQVcsQ0FBQ3RCLElBQUksQ0FBQztJQUNqRCxJQUFJcUIsUUFBUSxJQUFJQSxRQUFRLENBQUNFLElBQUksS0FBSyxXQUFXLEVBQUU7TUFDN0N2QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUdGLGNBQWMsQ0FBQzBCLGNBQWMsQ0FBQ0gsUUFBUSxDQUFDO0lBQzdEOztJQUVBO0lBQ0E7SUFDQSxJQUFJSSxXQUFXLEdBQUcsTUFBTTtNQUN0QixPQUFPQyxPQUFPLENBQUNDLE9BQU8sRUFBRTtJQUMxQixDQUFDO0lBRUQsSUFBSTNCLElBQUksQ0FBQzRCLElBQUksSUFBSTVCLElBQUksQ0FBQzRCLElBQUksQ0FBQ0MsS0FBSyxFQUFFO01BQ2hDLE1BQU1BLEtBQUssR0FBRzdCLElBQUksQ0FBQzRCLElBQUksQ0FBQ0MsS0FBSztNQUM3QixJQUFJQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO01BQ25CLElBQUksT0FBT0QsS0FBSyxJQUFJLFFBQVEsSUFBSUEsS0FBSyxDQUFDRSxXQUFXLEVBQUUsS0FBSyxXQUFXLEVBQUU7UUFDbkVELFVBQVUsR0FBRztVQUFFRCxLQUFLLEVBQUU7WUFBRUcsSUFBSSxFQUFFLFdBQVc7WUFBRUMsTUFBTSxFQUFFO1VBQUU7UUFBRSxDQUFDO01BQzFELENBQUMsTUFBTSxJQUNMLE9BQU9KLEtBQUssSUFBSSxRQUFRLElBQ3hCLE9BQU9BLEtBQUssQ0FBQ0csSUFBSSxJQUFJLFFBQVEsSUFDN0JILEtBQUssQ0FBQ0csSUFBSSxDQUFDRCxXQUFXLEVBQUUsSUFBSSxXQUFXLElBQ3ZDRyxNQUFNLENBQUNMLEtBQUssQ0FBQ0ksTUFBTSxDQUFDLEVBQ3BCO1FBQ0FILFVBQVUsR0FBRztVQUFFRCxLQUFLLEVBQUU7WUFBRUcsSUFBSSxFQUFFLFdBQVc7WUFBRUMsTUFBTSxFQUFFSixLQUFLLENBQUNJO1VBQU87UUFBRSxDQUFDO01BQ3JFLENBQUMsTUFBTSxJQUFJQyxNQUFNLENBQUNMLEtBQUssQ0FBQyxFQUFFO1FBQ3hCQyxVQUFVLEdBQUc7VUFBRUQsS0FBSyxFQUFFQTtRQUFNLENBQUM7TUFDL0IsQ0FBQyxNQUFNO1FBQ0wsTUFBTSxnRkFBZ0Y7TUFDeEY7O01BRUE7TUFDQSxNQUFNTSxXQUFXLEdBQUcsSUFBQUMsNkJBQXNCLEVBQUNuQyxLQUFLLENBQUM7TUFDakR3QixXQUFXLEdBQUcsWUFBWTtRQUN4QjtRQUNBLE1BQU1ZLFNBQVMsR0FBRyxNQUFNLElBQUFDLGtCQUFTLEVBQUM7VUFDaENDLE1BQU0sRUFBRUQsa0JBQVMsQ0FBQ0UsTUFBTSxDQUFDQyxJQUFJO1VBQzdCdkMsTUFBTTtVQUNOd0MsYUFBYSxFQUFFLEtBQUs7VUFDcEJ2QyxJQUFJLEVBQUUsSUFBQXdDLFlBQU0sRUFBQ3pDLE1BQU0sQ0FBQztVQUNwQjBDLFNBQVMsRUFBRSxlQUFlO1VBQzFCQyxTQUFTLEVBQUVWO1FBQ2IsQ0FBQyxDQUFDO1FBQ0YsT0FBT0UsU0FBUyxDQUFDUyxjQUFjLEVBQUUsQ0FBQ0MsSUFBSSxDQUFDLE1BQU07VUFDM0MsTUFBTUMsS0FBSyxHQUFHLElBQUlDLGtCQUFTLENBQ3pCL0MsTUFBTSxFQUNOLElBQUF5QyxZQUFNLEVBQUN6QyxNQUFNLENBQUMsRUFDZCxlQUFlLEVBQ2ZtQyxTQUFTLENBQUNRLFNBQVMsRUFDbkJmLFVBQVUsQ0FDWDtVQUNEa0IsS0FBSyxDQUFDRSxVQUFVLENBQUNDLElBQUksR0FBRyxJQUFJO1VBQzVCLE9BQU9ILEtBQUssQ0FBQ0ksT0FBTyxFQUFFO1FBQ3hCLENBQUMsQ0FBQztNQUNKLENBQUM7SUFDSDtJQUNBLE1BQU1DLFVBQVUsR0FBRyxJQUFBQyxnQ0FBaUIsRUFBQ3BELE1BQU0sQ0FBQztJQUM1QyxPQUFPd0IsT0FBTyxDQUFDQyxPQUFPLEVBQUUsQ0FDckJvQixJQUFJLENBQUMsTUFBTTtNQUNWLE9BQU9NLFVBQVUsQ0FBQ0UsVUFBVSxDQUFDdkQsSUFBSSxFQUFFQyxLQUFLLENBQUM7SUFDM0MsQ0FBQyxDQUFDLENBQ0Q4QyxJQUFJLENBQUMsTUFBTTtNQUNWM0MsaUJBQWlCLENBQUNpRCxVQUFVLENBQUNHLFFBQVEsQ0FBQztNQUN0QyxPQUFPL0IsV0FBVyxFQUFFO0lBQ3RCLENBQUMsQ0FBQyxDQUNEc0IsSUFBSSxDQUFDLE1BQU07TUFDVjtNQUNBLElBQUkvQyxJQUFJLENBQUN5RCxXQUFXLEVBQUU7UUFDcEIsTUFBTUMsVUFBVSxHQUFHMUQsSUFBSSxDQUFDeUQsV0FBVztRQUVuQyxJQUFJRSxjQUFjLEdBQUc7VUFDbkJDLFFBQVEsRUFBRTtZQUFFQyxNQUFNLEVBQUUsTUFBTTtZQUFFQyxHQUFHLEVBQUUsSUFBSXhELElBQUksRUFBRSxDQUFDeUQsV0FBVztVQUFHLENBQUM7VUFDM0RDLFNBQVMsRUFBRTtZQUFFaEMsSUFBSSxFQUFFLFdBQVc7WUFBRUMsTUFBTSxFQUFFO1VBQUU7UUFDNUMsQ0FBQztRQUNELE1BQU1lLEtBQUssR0FBRyxJQUFJQyxrQkFBUyxDQUN6Qi9DLE1BQU0sRUFDTixJQUFBeUMsWUFBTSxFQUFDekMsTUFBTSxDQUFDLEVBQ2QsV0FBVyxFQUNYO1VBQUVzRCxRQUFRLEVBQUVFO1FBQVcsQ0FBQyxFQUN4QkMsY0FBYyxDQUNmO1FBQ0RYLEtBQUssQ0FBQ0ksT0FBTyxFQUFFO01BQ2pCO01BQ0E7TUFDQSxPQUFPMUIsT0FBTyxDQUFDQyxPQUFPLEVBQUU7SUFDMUIsQ0FBQyxDQUFDLENBQ0RvQixJQUFJLENBQUMsTUFBTTtNQUNWLElBQ0VoQyxNQUFNLENBQUNDLFNBQVMsQ0FBQ0MsY0FBYyxDQUFDQyxJQUFJLENBQUNsQixJQUFJLEVBQUUsV0FBVyxDQUFDLElBQ3ZERSxNQUFNLENBQUMrRCx1QkFBdUIsRUFDOUI7UUFDQSxPQUFPdkMsT0FBTyxDQUFDQyxPQUFPLEVBQUU7TUFDMUI7TUFDQSxPQUFPekIsTUFBTSxDQUFDZ0UsbUJBQW1CLENBQUNDLE9BQU8sQ0FBQ25FLElBQUksRUFBRUMsS0FBSyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRWtELFVBQVUsQ0FBQztJQUNsRixDQUFDLENBQUMsQ0FDRGUsS0FBSyxDQUFDQyxHQUFHLElBQUk7TUFDWixPQUFPaEIsVUFBVSxDQUFDaUIsSUFBSSxDQUFDRCxHQUFHLENBQUMsQ0FBQ3RCLElBQUksQ0FBQyxNQUFNO1FBQ3JDLE1BQU1zQixHQUFHO01BQ1gsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDO0VBQ047O0VBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtFQUNFLE9BQU96RCxpQkFBaUIsQ0FBQ1osSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ2xDLElBQUl1RSxpQkFBaUIsR0FBR3hELE1BQU0sQ0FBQ0MsU0FBUyxDQUFDQyxjQUFjLENBQUNDLElBQUksQ0FBQ2xCLElBQUksRUFBRSxpQkFBaUIsQ0FBQztJQUNyRixJQUFJLENBQUN1RSxpQkFBaUIsRUFBRTtNQUN0QjtJQUNGO0lBQ0EsSUFBSUMsbUJBQW1CLEdBQUd4RSxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDakQsSUFBSXlFLGNBQWM7SUFDbEIsSUFBSSxPQUFPRCxtQkFBbUIsS0FBSyxRQUFRLEVBQUU7TUFDM0NDLGNBQWMsR0FBRyxJQUFJbkUsSUFBSSxDQUFDa0UsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0lBQ3ZELENBQUMsTUFBTSxJQUFJLE9BQU9BLG1CQUFtQixLQUFLLFFBQVEsRUFBRTtNQUNsREMsY0FBYyxHQUFHLElBQUluRSxJQUFJLENBQUNrRSxtQkFBbUIsQ0FBQztJQUNoRCxDQUFDLE1BQU07TUFDTCxNQUFNLElBQUloRSxXQUFLLENBQUNDLEtBQUssQ0FDbkJELFdBQUssQ0FBQ0MsS0FBSyxDQUFDQyxrQkFBa0IsRUFDOUJWLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLHFCQUFxQixDQUNoRDtJQUNIO0lBQ0E7SUFDQSxJQUFJLENBQUMwRSxRQUFRLENBQUNELGNBQWMsQ0FBQyxFQUFFO01BQzdCLE1BQU0sSUFBSWpFLFdBQUssQ0FBQ0MsS0FBSyxDQUNuQkQsV0FBSyxDQUFDQyxLQUFLLENBQUNDLGtCQUFrQixFQUM5QlYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcscUJBQXFCLENBQ2hEO0lBQ0g7SUFDQSxPQUFPeUUsY0FBYyxDQUFDckQsT0FBTyxFQUFFO0VBQ2pDO0VBRUEsT0FBT04scUJBQXFCLENBQUNkLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtJQUN0QyxNQUFNMkUscUJBQXFCLEdBQUc1RCxNQUFNLENBQUNDLFNBQVMsQ0FBQ0MsY0FBYyxDQUFDQyxJQUFJLENBQUNsQixJQUFJLEVBQUUscUJBQXFCLENBQUM7SUFDL0YsSUFBSSxDQUFDMkUscUJBQXFCLEVBQUU7TUFDMUI7SUFDRjtJQUVBLElBQUlDLHVCQUF1QixHQUFHNUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDO0lBQ3pELElBQUksT0FBTzRFLHVCQUF1QixLQUFLLFFBQVEsSUFBSUEsdUJBQXVCLElBQUksQ0FBQyxFQUFFO01BQy9FLE1BQU0sSUFBSXBFLFdBQUssQ0FBQ0MsS0FBSyxDQUNuQkQsV0FBSyxDQUFDQyxLQUFLLENBQUNDLGtCQUFrQixFQUM3QixxREFBb0QsQ0FDdEQ7SUFDSDtJQUNBLE9BQU9rRSx1QkFBdUI7RUFDaEM7O0VBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtFQUNFLE9BQU90RCxXQUFXLENBQUN0QixJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDNUIsSUFBSTZFLFdBQVcsR0FBRzlELE1BQU0sQ0FBQ0MsU0FBUyxDQUFDQyxjQUFjLENBQUNDLElBQUksQ0FBQ2xCLElBQUksRUFBRSxXQUFXLENBQUM7SUFDekUsSUFBSSxDQUFDNkUsV0FBVyxFQUFFO01BQ2hCO0lBQ0Y7SUFDQSxJQUFJQyxhQUFhLEdBQUc5RSxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQ3JDLElBQUl1QixJQUFJO0lBQ1IsSUFBSXdELFdBQVcsR0FBRyxJQUFJO0lBRXRCLElBQUksT0FBT0QsYUFBYSxLQUFLLFFBQVEsRUFBRTtNQUNyQ3ZELElBQUksR0FBRyxJQUFJakIsSUFBSSxDQUFDd0UsYUFBYSxHQUFHLElBQUksQ0FBQztJQUN2QyxDQUFDLE1BQU0sSUFBSSxPQUFPQSxhQUFhLEtBQUssUUFBUSxFQUFFO01BQzVDQyxXQUFXLEdBQUcsQ0FBQ2pGLGNBQWMsQ0FBQ2tGLDRCQUE0QixDQUFDRixhQUFhLENBQUM7TUFDekV2RCxJQUFJLEdBQUcsSUFBSWpCLElBQUksQ0FBQ3dFLGFBQWEsQ0FBQztJQUNoQyxDQUFDLE1BQU07TUFDTCxNQUFNLElBQUl0RSxXQUFLLENBQUNDLEtBQUssQ0FDbkJELFdBQUssQ0FBQ0MsS0FBSyxDQUFDQyxrQkFBa0IsRUFDOUJWLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxxQkFBcUIsQ0FDMUM7SUFDSDtJQUNBO0lBQ0EsSUFBSSxDQUFDMEUsUUFBUSxDQUFDbkQsSUFBSSxDQUFDLEVBQUU7TUFDbkIsTUFBTSxJQUFJZixXQUFLLENBQUNDLEtBQUssQ0FDbkJELFdBQUssQ0FBQ0MsS0FBSyxDQUFDQyxrQkFBa0IsRUFDOUJWLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxxQkFBcUIsQ0FDMUM7SUFDSDtJQUVBLE9BQU87TUFDTHVCLElBQUk7TUFDSndEO0lBQ0YsQ0FBQztFQUNIOztFQUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7RUFDRSxPQUFPQyw0QkFBNEIsQ0FBQ0YsYUFBcUIsRUFBVztJQUNsRSxNQUFNRyxhQUFhLEdBQUcsc0JBQXNCO0lBQzVDLE9BQ0VILGFBQWEsQ0FBQ0ksT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLSixhQUFhLENBQUNLLE1BQU0sR0FBRyxDQUFDLElBQUlGLGFBQWEsQ0FBQ0csSUFBSSxDQUFDTixhQUFhLENBQUMsQ0FBQztJQUFBLENBQzdGLENBQUM7RUFDTDs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRSxPQUFPdEQsY0FBYyxDQUFDO0lBQUVELElBQUk7SUFBRXdEO0VBQWtELENBQUMsRUFBRTtJQUNqRixJQUFJQSxXQUFXLEVBQUU7TUFDZjtNQUNBLE1BQU1NLFNBQVMsR0FBRzlELElBQUksQ0FBQ3dDLFdBQVcsRUFBRTtNQUNwQyxPQUFPc0IsU0FBUyxDQUFDQyxTQUFTLENBQUMsQ0FBQyxFQUFFRCxTQUFTLENBQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2RDtJQUNBLE9BQU8zRCxJQUFJLENBQUN3QyxXQUFXLEVBQUU7RUFDM0I7QUFDRjtBQUFDO0FBQUEsZUFFY2pFLGNBQWM7QUFBQSJ9
@@ -13,6 +13,11 @@ var _node = _interopRequireDefault(require("parse/node"));
13
13
  var _AccountLockout = _interopRequireDefault(require("../AccountLockout"));
14
14
  var _Config = _interopRequireDefault(require("../Config"));
15
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
17
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
18
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
19
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
20
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
16
21
  var RestQuery = require('../RestQuery');
17
22
  var Auth = require('../Auth');
18
23
  class UserController extends _AdaptableController.default {
@@ -33,18 +38,28 @@ class UserController extends _AdaptableController.default {
33
38
  return _MailAdapter.default;
34
39
  }
35
40
  get shouldVerifyEmails() {
36
- return this.options.verifyUserEmails;
41
+ return (this.config || this.options).verifyUserEmails;
37
42
  }
38
- setEmailVerifyToken(user) {
39
- if (this.shouldVerifyEmails) {
40
- user._email_verify_token = (0, _cryptoUtils.randomString)(25);
43
+ async setEmailVerifyToken(user, req, storage = {}) {
44
+ let shouldSendEmail = this.shouldVerifyEmails;
45
+ if (typeof shouldSendEmail === 'function') {
46
+ const response = await Promise.resolve(shouldSendEmail(req));
47
+ shouldSendEmail = response !== false;
48
+ }
49
+ if (!shouldSendEmail) {
50
+ return false;
51
+ }
52
+ storage.sendVerificationEmail = true;
53
+ user._email_verify_token = (0, _cryptoUtils.randomString)(25);
54
+ if (!storage.fieldsChangedByTrigger || !storage.fieldsChangedByTrigger.includes('emailVerified')) {
41
55
  user.emailVerified = false;
42
- if (this.config.emailVerifyTokenValidityDuration) {
43
- user._email_verify_token_expires_at = _node.default._encode(this.config.generateEmailVerifyTokenExpiresAt());
44
- }
45
56
  }
57
+ if (this.config.emailVerifyTokenValidityDuration) {
58
+ user._email_verify_token_expires_at = _node.default._encode(this.config.generateEmailVerifyTokenExpiresAt());
59
+ }
60
+ return true;
46
61
  }
47
- verifyEmail(username, token) {
62
+ async verifyEmail(username, token) {
48
63
  if (!this.shouldVerifyEmails) {
49
64
  // Trying to verify email when not enabled
50
65
  // TODO: Better error here.
@@ -73,8 +88,14 @@ class UserController extends _AdaptableController.default {
73
88
  };
74
89
  }
75
90
  const maintenanceAuth = Auth.maintenance(this.config);
76
- var findUserForEmailVerification = new RestQuery(this.config, maintenanceAuth, '_User', {
77
- username
91
+ var findUserForEmailVerification = await RestQuery({
92
+ method: RestQuery.Method.get,
93
+ config: this.config,
94
+ auth: maintenanceAuth,
95
+ className: '_User',
96
+ restWhere: {
97
+ username
98
+ }
78
99
  });
79
100
  return findUserForEmailVerification.execute().then(result => {
80
101
  if (result.results.length && result.results[0].emailVerified) {
@@ -105,7 +126,7 @@ class UserController extends _AdaptableController.default {
105
126
  return results[0];
106
127
  });
107
128
  }
108
- getUserIfNeeded(user) {
129
+ async getUserIfNeeded(user) {
109
130
  if (user.username && user.email) {
110
131
  return Promise.resolve(user);
111
132
  }
@@ -116,7 +137,14 @@ class UserController extends _AdaptableController.default {
116
137
  if (user.email) {
117
138
  where.email = user.email;
118
139
  }
119
- var query = new RestQuery(this.config, Auth.master(this.config), '_User', where);
140
+ var query = await RestQuery({
141
+ method: RestQuery.Method.get,
142
+ config: this.config,
143
+ runBeforeFind: false,
144
+ auth: Auth.master(this.config),
145
+ className: '_User',
146
+ restWhere: where
147
+ });
120
148
  return query.execute().then(function (result) {
121
149
  if (result.results.length != 1) {
122
150
  throw undefined;
@@ -124,26 +152,39 @@ class UserController extends _AdaptableController.default {
124
152
  return result.results[0];
125
153
  });
126
154
  }
127
- sendVerificationEmail(user) {
155
+ async sendVerificationEmail(user, req) {
128
156
  if (!this.shouldVerifyEmails) {
129
157
  return;
130
158
  }
131
159
  const token = encodeURIComponent(user._email_verify_token);
132
160
  // We may need to fetch the user in case of update email
133
- this.getUserIfNeeded(user).then(user => {
134
- const username = encodeURIComponent(user.username);
135
- const link = buildEmailLink(this.config.verifyEmailURL, username, token, this.config);
136
- const options = {
137
- appName: this.config.appName,
138
- link: link,
139
- user: (0, _triggers.inflate)('_User', user)
140
- };
141
- if (this.adapter.sendVerificationEmail) {
142
- this.adapter.sendVerificationEmail(options);
143
- } else {
144
- this.adapter.sendMail(this.defaultVerificationEmail(options));
145
- }
146
- });
161
+ const fetchedUser = await this.getUserIfNeeded(user);
162
+ let shouldSendEmail = this.config.sendUserEmailVerification;
163
+ if (typeof shouldSendEmail === 'function') {
164
+ var _req$auth;
165
+ const response = await Promise.resolve(this.config.sendUserEmailVerification({
166
+ user: _node.default.Object.fromJSON(_objectSpread({
167
+ className: '_User'
168
+ }, fetchedUser)),
169
+ master: (_req$auth = req.auth) === null || _req$auth === void 0 ? void 0 : _req$auth.isMaster
170
+ }));
171
+ shouldSendEmail = !!response;
172
+ }
173
+ if (!shouldSendEmail) {
174
+ return;
175
+ }
176
+ const username = encodeURIComponent(user.username);
177
+ const link = buildEmailLink(this.config.verifyEmailURL, username, token, this.config);
178
+ const options = {
179
+ appName: this.config.appName,
180
+ link: link,
181
+ user: (0, _triggers.inflate)('_User', fetchedUser)
182
+ };
183
+ if (this.adapter.sendVerificationEmail) {
184
+ this.adapter.sendVerificationEmail(options);
185
+ } else {
186
+ this.adapter.sendMail(this.defaultVerificationEmail(options));
187
+ }
147
188
  }
148
189
 
149
190
  /**
@@ -152,7 +193,7 @@ class UserController extends _AdaptableController.default {
152
193
  * @param user
153
194
  * @returns {*}
154
195
  */
155
- regenerateEmailVerifyToken(user) {
196
+ async regenerateEmailVerifyToken(user, master) {
156
197
  const {
157
198
  _email_verify_token
158
199
  } = user;
@@ -165,22 +206,29 @@ class UserController extends _AdaptableController.default {
165
206
  if (this.config.emailVerifyTokenReuseIfValid && this.config.emailVerifyTokenValidityDuration && _email_verify_token && new Date() < new Date(_email_verify_token_expires_at)) {
166
207
  return Promise.resolve();
167
208
  }
168
- this.setEmailVerifyToken(user);
209
+ const shouldSend = await this.setEmailVerifyToken(user, {
210
+ user,
211
+ master
212
+ });
213
+ if (!shouldSend) {
214
+ return;
215
+ }
169
216
  return this.config.database.update('_User', {
170
217
  username: user.username
171
218
  }, user);
172
219
  }
173
- resendVerificationEmail(username) {
174
- return this.getUserIfNeeded({
220
+ async resendVerificationEmail(username, req) {
221
+ var _req$auth2;
222
+ const aUser = await this.getUserIfNeeded({
175
223
  username: username
176
- }).then(aUser => {
177
- if (!aUser || aUser.emailVerified) {
178
- throw undefined;
179
- }
180
- return this.regenerateEmailVerifyToken(aUser).then(() => {
181
- this.sendVerificationEmail(aUser);
182
- });
183
224
  });
225
+ if (!aUser || aUser.emailVerified) {
226
+ throw undefined;
227
+ }
228
+ const generate = await this.regenerateEmailVerifyToken(aUser, (_req$auth2 = req.auth) === null || _req$auth2 === void 0 ? void 0 : _req$auth2.isMaster);
229
+ if (generate) {
230
+ this.sendVerificationEmail(aUser, req);
231
+ }
184
232
  }
185
233
  setPasswordResetToken(email) {
186
234
  const token = {
@@ -317,4 +365,4 @@ function buildEmailLink(destination, username, token, config) {
317
365
  }
318
366
  var _default = UserController;
319
367
  exports.default = _default;
320
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZXN0UXVlcnkiLCJyZXF1aXJlIiwiQXV0aCIsIlVzZXJDb250cm9sbGVyIiwiQWRhcHRhYmxlQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiYWRhcHRlciIsImFwcElkIiwib3B0aW9ucyIsImNvbmZpZyIsIkNvbmZpZyIsImdldCIsInZhbGlkYXRlQWRhcHRlciIsInNob3VsZFZlcmlmeUVtYWlscyIsImV4cGVjdGVkQWRhcHRlclR5cGUiLCJNYWlsQWRhcHRlciIsInZlcmlmeVVzZXJFbWFpbHMiLCJzZXRFbWFpbFZlcmlmeVRva2VuIiwidXNlciIsIl9lbWFpbF92ZXJpZnlfdG9rZW4iLCJyYW5kb21TdHJpbmciLCJlbWFpbFZlcmlmaWVkIiwiZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24iLCJfZW1haWxfdmVyaWZ5X3Rva2VuX2V4cGlyZXNfYXQiLCJQYXJzZSIsIl9lbmNvZGUiLCJnZW5lcmF0ZUVtYWlsVmVyaWZ5VG9rZW5FeHBpcmVzQXQiLCJ2ZXJpZnlFbWFpbCIsInVzZXJuYW1lIiwidG9rZW4iLCJ1bmRlZmluZWQiLCJxdWVyeSIsInVwZGF0ZUZpZWxkcyIsIl9fb3AiLCIkZ3QiLCJEYXRlIiwibWFpbnRlbmFuY2VBdXRoIiwibWFpbnRlbmFuY2UiLCJmaW5kVXNlckZvckVtYWlsVmVyaWZpY2F0aW9uIiwiZXhlY3V0ZSIsInRoZW4iLCJyZXN1bHQiLCJyZXN1bHRzIiwibGVuZ3RoIiwiUHJvbWlzZSIsInJlc29sdmUiLCJvYmplY3RJZCIsInJlc3QiLCJ1cGRhdGUiLCJjaGVja1Jlc2V0VG9rZW5WYWxpZGl0eSIsImRhdGFiYXNlIiwiZmluZCIsIl9wZXJpc2hhYmxlX3Rva2VuIiwibGltaXQiLCJwYXNzd29yZFBvbGljeSIsInJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uIiwiZXhwaXJlc0RhdGUiLCJfcGVyaXNoYWJsZV90b2tlbl9leHBpcmVzX2F0IiwiX190eXBlIiwiaXNvIiwiZ2V0VXNlcklmTmVlZGVkIiwiZW1haWwiLCJ3aGVyZSIsIm1hc3RlciIsInNlbmRWZXJpZmljYXRpb25FbWFpbCIsImVuY29kZVVSSUNvbXBvbmVudCIsImxpbmsiLCJidWlsZEVtYWlsTGluayIsInZlcmlmeUVtYWlsVVJMIiwiYXBwTmFtZSIsImluZmxhdGUiLCJzZW5kTWFpbCIsImRlZmF1bHRWZXJpZmljYXRpb25FbWFpbCIsInJlZ2VuZXJhdGVFbWFpbFZlcmlmeVRva2VuIiwiZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCIsInJlc2VuZFZlcmlmaWNhdGlvbkVtYWlsIiwiYVVzZXIiLCJzZXRQYXNzd29yZFJlc2V0VG9rZW4iLCJnZW5lcmF0ZVBhc3N3b3JkUmVzZXRUb2tlbkV4cGlyZXNBdCIsIiRvciIsIiRleGlzdHMiLCJzZW5kUGFzc3dvcmRSZXNldEVtYWlsIiwicmVzZXRUb2tlblJldXNlSWZWYWxpZCIsInJlcXVlc3RSZXNldFBhc3N3b3JkVVJMIiwiZGVmYXVsdFJlc2V0UGFzc3dvcmRFbWFpbCIsInVwZGF0ZVBhc3N3b3JkIiwicGFzc3dvcmQiLCJ1cGRhdGVVc2VyUGFzc3dvcmQiLCJhY2NvdW50TG9ja291dFBvbGljeSIsIkFjY291bnRMb2Nrb3V0IiwidW5sb2NrQWNjb3VudCIsImNhdGNoIiwiZXJyb3IiLCJtZXNzYWdlIiwicmVqZWN0IiwidGV4dCIsInRvIiwic3ViamVjdCIsImRlc3RpbmF0aW9uIiwidXNlcm5hbWVBbmRUb2tlbiIsInBhcnNlRnJhbWVVUkwiLCJkZXN0aW5hdGlvbldpdGhvdXRIb3N0IiwicmVwbGFjZSIsInB1YmxpY1NlcnZlclVSTCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Db250cm9sbGVycy9Vc2VyQ29udHJvbGxlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21TdHJpbmcgfSBmcm9tICcuLi9jcnlwdG9VdGlscyc7XG5pbXBvcnQgeyBpbmZsYXRlIH0gZnJvbSAnLi4vdHJpZ2dlcnMnO1xuaW1wb3J0IEFkYXB0YWJsZUNvbnRyb2xsZXIgZnJvbSAnLi9BZGFwdGFibGVDb250cm9sbGVyJztcbmltcG9ydCBNYWlsQWRhcHRlciBmcm9tICcuLi9BZGFwdGVycy9FbWFpbC9NYWlsQWRhcHRlcic7XG5pbXBvcnQgcmVzdCBmcm9tICcuLi9yZXN0JztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBBY2NvdW50TG9ja291dCBmcm9tICcuLi9BY2NvdW50TG9ja291dCc7XG5pbXBvcnQgQ29uZmlnIGZyb20gJy4uL0NvbmZpZyc7XG5cbnZhciBSZXN0UXVlcnkgPSByZXF1aXJlKCcuLi9SZXN0UXVlcnknKTtcbnZhciBBdXRoID0gcmVxdWlyZSgnLi4vQXV0aCcpO1xuXG5leHBvcnQgY2xhc3MgVXNlckNvbnRyb2xsZXIgZXh0ZW5kcyBBZGFwdGFibGVDb250cm9sbGVyIHtcbiAgY29uc3RydWN0b3IoYWRhcHRlciwgYXBwSWQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKGFkYXB0ZXIsIGFwcElkLCBvcHRpb25zKTtcbiAgfVxuXG4gIGdldCBjb25maWcoKSB7XG4gICAgcmV0dXJuIENvbmZpZy5nZXQodGhpcy5hcHBJZCk7XG4gIH1cblxuICB2YWxpZGF0ZUFkYXB0ZXIoYWRhcHRlcikge1xuICAgIC8vIEFsbG93IG5vIGFkYXB0ZXJcbiAgICBpZiAoIWFkYXB0ZXIgJiYgIXRoaXMuc2hvdWxkVmVyaWZ5RW1haWxzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN1cGVyLnZhbGlkYXRlQWRhcHRlcihhZGFwdGVyKTtcbiAgfVxuXG4gIGV4cGVjdGVkQWRhcHRlclR5cGUoKSB7XG4gICAgcmV0dXJuIE1haWxBZGFwdGVyO1xuICB9XG5cbiAgZ2V0IHNob3VsZFZlcmlmeUVtYWlscygpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnZlcmlmeVVzZXJFbWFpbHM7XG4gIH1cblxuICBzZXRFbWFpbFZlcmlmeVRva2VuKHVzZXIpIHtcbiAgICBpZiAodGhpcy5zaG91bGRWZXJpZnlFbWFpbHMpIHtcbiAgICAgIHVzZXIuX2VtYWlsX3ZlcmlmeV90b2tlbiA9IHJhbmRvbVN0cmluZygyNSk7XG4gICAgICB1c2VyLmVtYWlsVmVyaWZpZWQgPSBmYWxzZTtcblxuICAgICAgaWYgKHRoaXMuY29uZmlnLmVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uKSB7XG4gICAgICAgIHVzZXIuX2VtYWlsX3ZlcmlmeV90b2tlbl9leHBpcmVzX2F0ID0gUGFyc2UuX2VuY29kZShcbiAgICAgICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZUVtYWlsVmVyaWZ5VG9rZW5FeHBpcmVzQXQoKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZlcmlmeUVtYWlsKHVzZXJuYW1lLCB0b2tlbikge1xuICAgIGlmICghdGhpcy5zaG91bGRWZXJpZnlFbWFpbHMpIHtcbiAgICAgIC8vIFRyeWluZyB0byB2ZXJpZnkgZW1haWwgd2hlbiBub3QgZW5hYmxlZFxuICAgICAgLy8gVE9ETzogQmV0dGVyIGVycm9yIGhlcmUuXG4gICAgICB0aHJvdyB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnkgPSB7IHVzZXJuYW1lOiB1c2VybmFtZSwgX2VtYWlsX3ZlcmlmeV90b2tlbjogdG9rZW4gfTtcbiAgICBjb25zdCB1cGRhdGVGaWVsZHMgPSB7XG4gICAgICBlbWFpbFZlcmlmaWVkOiB0cnVlLFxuICAgICAgX2VtYWlsX3ZlcmlmeV90b2tlbjogeyBfX29wOiAnRGVsZXRlJyB9LFxuICAgIH07XG5cbiAgICAvLyBpZiB0aGUgZW1haWwgdmVyaWZ5IHRva2VuIG5lZWRzIHRvIGJlIHZhbGlkYXRlZCB0aGVuXG4gICAgLy8gYWRkIGFkZGl0aW9uYWwgcXVlcnkgcGFyYW1zIGFuZCBhZGRpdGlvbmFsIGZpZWxkcyB0aGF0IG5lZWQgdG8gYmUgdXBkYXRlZFxuICAgIGlmICh0aGlzLmNvbmZpZy5lbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbikge1xuICAgICAgcXVlcnkuZW1haWxWZXJpZmllZCA9IGZhbHNlO1xuICAgICAgcXVlcnkuX2VtYWlsX3ZlcmlmeV90b2tlbl9leHBpcmVzX2F0ID0geyAkZ3Q6IFBhcnNlLl9lbmNvZGUobmV3IERhdGUoKSkgfTtcblxuICAgICAgdXBkYXRlRmllbGRzLl9lbWFpbF92ZXJpZnlfdG9rZW5fZXhwaXJlc19hdCA9IHsgX19vcDogJ0RlbGV0ZScgfTtcbiAgICB9XG4gICAgY29uc3QgbWFpbnRlbmFuY2VBdXRoID0gQXV0aC5tYWludGVuYW5jZSh0aGlzLmNvbmZpZyk7XG4gICAgdmFyIGZpbmRVc2VyRm9yRW1haWxWZXJpZmljYXRpb24gPSBuZXcgUmVzdFF1ZXJ5KHRoaXMuY29uZmlnLCBtYWludGVuYW5jZUF1dGgsICdfVXNlcicsIHtcbiAgICAgIHVzZXJuYW1lLFxuICAgIH0pO1xuICAgIHJldHVybiBmaW5kVXNlckZvckVtYWlsVmVyaWZpY2F0aW9uLmV4ZWN1dGUoKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0LnJlc3VsdHMubGVuZ3RoICYmIHJlc3VsdC5yZXN1bHRzWzBdLmVtYWlsVmVyaWZpZWQpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHQucmVzdWx0cy5sZW5ndGhbMF0pO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHQucmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgICAgcXVlcnkub2JqZWN0SWQgPSByZXN1bHQucmVzdWx0c1swXS5vYmplY3RJZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN0LnVwZGF0ZSh0aGlzLmNvbmZpZywgbWFpbnRlbmFuY2VBdXRoLCAnX1VzZXInLCBxdWVyeSwgdXBkYXRlRmllbGRzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNoZWNrUmVzZXRUb2tlblZhbGlkaXR5KHVzZXJuYW1lLCB0b2tlbikge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5kYXRhYmFzZVxuICAgICAgLmZpbmQoXG4gICAgICAgICdfVXNlcicsXG4gICAgICAgIHtcbiAgICAgICAgICB1c2VybmFtZTogdXNlcm5hbWUsXG4gICAgICAgICAgX3BlcmlzaGFibGVfdG9rZW46IHRva2VuLFxuICAgICAgICB9LFxuICAgICAgICB7IGxpbWl0OiAxIH0sXG4gICAgICAgIEF1dGgubWFpbnRlbmFuY2UodGhpcy5jb25maWcpXG4gICAgICApXG4gICAgICAudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoICE9IDEpIHtcbiAgICAgICAgICB0aHJvdyAnRmFpbGVkIHRvIHJlc2V0IHBhc3N3b3JkOiB1c2VybmFtZSAvIGVtYWlsIC8gdG9rZW4gaXMgaW52YWxpZCc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb25maWcucGFzc3dvcmRQb2xpY3kgJiYgdGhpcy5jb25maWcucGFzc3dvcmRQb2xpY3kucmVzZXRUb2tlblZhbGlkaXR5RHVyYXRpb24pIHtcbiAgICAgICAgICBsZXQgZXhwaXJlc0RhdGUgPSByZXN1bHRzWzBdLl9wZXJpc2hhYmxlX3Rva2VuX2V4cGlyZXNfYXQ7XG4gICAgICAgICAgaWYgKGV4cGlyZXNEYXRlICYmIGV4cGlyZXNEYXRlLl9fdHlwZSA9PSAnRGF0ZScpIHtcbiAgICAgICAgICAgIGV4cGlyZXNEYXRlID0gbmV3IERhdGUoZXhwaXJlc0RhdGUuaXNvKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV4cGlyZXNEYXRlIDwgbmV3IERhdGUoKSkgdGhyb3cgJ1RoZSBwYXNzd29yZCByZXNldCBsaW5rIGhhcyBleHBpcmVkJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0c1swXTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0VXNlcklmTmVlZGVkKHVzZXIpIHtcbiAgICBpZiAodXNlci51c2VybmFtZSAmJiB1c2VyLmVtYWlsKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVzZXIpO1xuICAgIH1cbiAgICB2YXIgd2hlcmUgPSB7fTtcbiAgICBpZiAodXNlci51c2VybmFtZSkge1xuICAgICAgd2hlcmUudXNlcm5hbWUgPSB1c2VyLnVzZXJuYW1lO1xuICAgIH1cbiAgICBpZiAodXNlci5lbWFpbCkge1xuICAgICAgd2hlcmUuZW1haWwgPSB1c2VyLmVtYWlsO1xuICAgIH1cblxuICAgIHZhciBxdWVyeSA9IG5ldyBSZXN0UXVlcnkodGhpcy5jb25maWcsIEF1dGgubWFzdGVyKHRoaXMuY29uZmlnKSwgJ19Vc2VyJywgd2hlcmUpO1xuICAgIHJldHVybiBxdWVyeS5leGVjdXRlKCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICBpZiAocmVzdWx0LnJlc3VsdHMubGVuZ3RoICE9IDEpIHtcbiAgICAgICAgdGhyb3cgdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdC5yZXN1bHRzWzBdO1xuICAgIH0pO1xuICB9XG5cbiAgc2VuZFZlcmlmaWNhdGlvbkVtYWlsKHVzZXIpIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkVmVyaWZ5RW1haWxzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRva2VuID0gZW5jb2RlVVJJQ29tcG9uZW50KHVzZXIuX2VtYWlsX3ZlcmlmeV90b2tlbik7XG4gICAgLy8gV2UgbWF5IG5lZWQgdG8gZmV0Y2ggdGhlIHVzZXIgaW4gY2FzZSBvZiB1cGRhdGUgZW1haWxcbiAgICB0aGlzLmdldFVzZXJJZk5lZWRlZCh1c2VyKS50aGVuKHVzZXIgPT4ge1xuICAgICAgY29uc3QgdXNlcm5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQodXNlci51c2VybmFtZSk7XG5cbiAgICAgIGNvbnN0IGxpbmsgPSBidWlsZEVtYWlsTGluayh0aGlzLmNvbmZpZy52ZXJpZnlFbWFpbFVSTCwgdXNlcm5hbWUsIHRva2VuLCB0aGlzLmNvbmZpZyk7XG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICBhcHBOYW1lOiB0aGlzLmNvbmZpZy5hcHBOYW1lLFxuICAgICAgICBsaW5rOiBsaW5rLFxuICAgICAgICB1c2VyOiBpbmZsYXRlKCdfVXNlcicsIHVzZXIpLFxuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLmFkYXB0ZXIuc2VuZFZlcmlmaWNhdGlvbkVtYWlsKSB7XG4gICAgICAgIHRoaXMuYWRhcHRlci5zZW5kVmVyaWZpY2F0aW9uRW1haWwob3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFkYXB0ZXIuc2VuZE1haWwodGhpcy5kZWZhdWx0VmVyaWZpY2F0aW9uRW1haWwob3B0aW9ucykpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2VuZXJhdGVzIHRoZSBnaXZlbiB1c2VyJ3MgZW1haWwgdmVyaWZpY2F0aW9uIHRva2VuXG4gICAqXG4gICAqIEBwYXJhbSB1c2VyXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgcmVnZW5lcmF0ZUVtYWlsVmVyaWZ5VG9rZW4odXNlcikge1xuICAgIGNvbnN0IHsgX2VtYWlsX3ZlcmlmeV90b2tlbiB9ID0gdXNlcjtcbiAgICBsZXQgeyBfZW1haWxfdmVyaWZ5X3Rva2VuX2V4cGlyZXNfYXQgfSA9IHVzZXI7XG4gICAgaWYgKF9lbWFpbF92ZXJpZnlfdG9rZW5fZXhwaXJlc19hdCAmJiBfZW1haWxfdmVyaWZ5X3Rva2VuX2V4cGlyZXNfYXQuX190eXBlID09PSAnRGF0ZScpIHtcbiAgICAgIF9lbWFpbF92ZXJpZnlfdG9rZW5fZXhwaXJlc19hdCA9IF9lbWFpbF92ZXJpZnlfdG9rZW5fZXhwaXJlc19hdC5pc287XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMuY29uZmlnLmVtYWlsVmVyaWZ5VG9rZW5SZXVzZUlmVmFsaWQgJiZcbiAgICAgIHRoaXMuY29uZmlnLmVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uICYmXG4gICAgICBfZW1haWxfdmVyaWZ5X3Rva2VuICYmXG4gICAgICBuZXcgRGF0ZSgpIDwgbmV3IERhdGUoX2VtYWlsX3ZlcmlmeV90b2tlbl9leHBpcmVzX2F0KVxuICAgICkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICB0aGlzLnNldEVtYWlsVmVyaWZ5VG9rZW4odXNlcik7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRhdGFiYXNlLnVwZGF0ZSgnX1VzZXInLCB7IHVzZXJuYW1lOiB1c2VyLnVzZXJuYW1lIH0sIHVzZXIpO1xuICB9XG5cbiAgcmVzZW5kVmVyaWZpY2F0aW9uRW1haWwodXNlcm5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRVc2VySWZOZWVkZWQoeyB1c2VybmFtZTogdXNlcm5hbWUgfSkudGhlbihhVXNlciA9PiB7XG4gICAgICBpZiAoIWFVc2VyIHx8IGFVc2VyLmVtYWlsVmVyaWZpZWQpIHtcbiAgICAgICAgdGhyb3cgdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucmVnZW5lcmF0ZUVtYWlsVmVyaWZ5VG9rZW4oYVVzZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnNlbmRWZXJpZmljYXRpb25FbWFpbChhVXNlcik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldFBhc3N3b3JkUmVzZXRUb2tlbihlbWFpbCkge1xuICAgIGNvbnN0IHRva2VuID0geyBfcGVyaXNoYWJsZV90b2tlbjogcmFuZG9tU3RyaW5nKDI1KSB9O1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLnBhc3N3b3JkUG9saWN5ICYmIHRoaXMuY29uZmlnLnBhc3N3b3JkUG9saWN5LnJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uKSB7XG4gICAgICB0b2tlbi5fcGVyaXNoYWJsZV90b2tlbl9leHBpcmVzX2F0ID0gUGFyc2UuX2VuY29kZShcbiAgICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVQYXNzd29yZFJlc2V0VG9rZW5FeHBpcmVzQXQoKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb25maWcuZGF0YWJhc2UudXBkYXRlKFxuICAgICAgJ19Vc2VyJyxcbiAgICAgIHsgJG9yOiBbeyBlbWFpbCB9LCB7IHVzZXJuYW1lOiBlbWFpbCwgZW1haWw6IHsgJGV4aXN0czogZmFsc2UgfSB9XSB9LFxuICAgICAgdG9rZW4sXG4gICAgICB7fSxcbiAgICAgIHRydWVcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgc2VuZFBhc3N3b3JkUmVzZXRFbWFpbChlbWFpbCkge1xuICAgIGlmICghdGhpcy5hZGFwdGVyKSB7XG4gICAgICB0aHJvdyAnVHJ5aW5nIHRvIHNlbmQgYSByZXNldCBwYXNzd29yZCBidXQgbm8gYWRhcHRlciBpcyBzZXQnO1xuICAgICAgLy8gIFRPRE86IE5vIGFkYXB0ZXI/XG4gICAgfVxuICAgIGxldCB1c2VyO1xuICAgIGlmIChcbiAgICAgIHRoaXMuY29uZmlnLnBhc3N3b3JkUG9saWN5ICYmXG4gICAgICB0aGlzLmNvbmZpZy5wYXNzd29yZFBvbGljeS5yZXNldFRva2VuUmV1c2VJZlZhbGlkICYmXG4gICAgICB0aGlzLmNvbmZpZy5wYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvblxuICAgICkge1xuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuY29uZmlnLmRhdGFiYXNlLmZpbmQoXG4gICAgICAgICdfVXNlcicsXG4gICAgICAgIHtcbiAgICAgICAgICAkb3I6IFtcbiAgICAgICAgICAgIHsgZW1haWwsIF9wZXJpc2hhYmxlX3Rva2VuOiB7ICRleGlzdHM6IHRydWUgfSB9LFxuICAgICAgICAgICAgeyB1c2VybmFtZTogZW1haWwsIGVtYWlsOiB7ICRleGlzdHM6IGZhbHNlIH0sIF9wZXJpc2hhYmxlX3Rva2VuOiB7ICRleGlzdHM6IHRydWUgfSB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHsgbGltaXQ6IDEgfSxcbiAgICAgICAgQXV0aC5tYWludGVuYW5jZSh0aGlzLmNvbmZpZylcbiAgICAgICk7XG4gICAgICBpZiAocmVzdWx0cy5sZW5ndGggPT0gMSkge1xuICAgICAgICBsZXQgZXhwaXJlc0RhdGUgPSByZXN1bHRzWzBdLl9wZXJpc2hhYmxlX3Rva2VuX2V4cGlyZXNfYXQ7XG4gICAgICAgIGlmIChleHBpcmVzRGF0ZSAmJiBleHBpcmVzRGF0ZS5fX3R5cGUgPT0gJ0RhdGUnKSB7XG4gICAgICAgICAgZXhwaXJlc0RhdGUgPSBuZXcgRGF0ZShleHBpcmVzRGF0ZS5pc28pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleHBpcmVzRGF0ZSA+IG5ldyBEYXRlKCkpIHtcbiAgICAgICAgICB1c2VyID0gcmVzdWx0c1swXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXVzZXIgfHwgIXVzZXIuX3BlcmlzaGFibGVfdG9rZW4pIHtcbiAgICAgIHVzZXIgPSBhd2FpdCB0aGlzLnNldFBhc3N3b3JkUmVzZXRUb2tlbihlbWFpbCk7XG4gICAgfVxuICAgIGNvbnN0IHRva2VuID0gZW5jb2RlVVJJQ29tcG9uZW50KHVzZXIuX3BlcmlzaGFibGVfdG9rZW4pO1xuICAgIGNvbnN0IHVzZXJuYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KHVzZXIudXNlcm5hbWUpO1xuXG4gICAgY29uc3QgbGluayA9IGJ1aWxkRW1haWxMaW5rKHRoaXMuY29uZmlnLnJlcXVlc3RSZXNldFBhc3N3b3JkVVJMLCB1c2VybmFtZSwgdG9rZW4sIHRoaXMuY29uZmlnKTtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgYXBwTmFtZTogdGhpcy5jb25maWcuYXBwTmFtZSxcbiAgICAgIGxpbms6IGxpbmssXG4gICAgICB1c2VyOiBpbmZsYXRlKCdfVXNlcicsIHVzZXIpLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5hZGFwdGVyLnNlbmRQYXNzd29yZFJlc2V0RW1haWwpIHtcbiAgICAgIHRoaXMuYWRhcHRlci5zZW5kUGFzc3dvcmRSZXNldEVtYWlsKG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkYXB0ZXIuc2VuZE1haWwodGhpcy5kZWZhdWx0UmVzZXRQYXNzd29yZEVtYWlsKG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVzZXIpO1xuICB9XG5cbiAgdXBkYXRlUGFzc3dvcmQodXNlcm5hbWUsIHRva2VuLCBwYXNzd29yZCkge1xuICAgIHJldHVybiB0aGlzLmNoZWNrUmVzZXRUb2tlblZhbGlkaXR5KHVzZXJuYW1lLCB0b2tlbilcbiAgICAgIC50aGVuKHVzZXIgPT4gdXBkYXRlVXNlclBhc3N3b3JkKHVzZXIsIHBhc3N3b3JkLCB0aGlzLmNvbmZpZykpXG4gICAgICAudGhlbih1c2VyID0+IHtcbiAgICAgICAgY29uc3QgYWNjb3VudExvY2tvdXRQb2xpY3kgPSBuZXcgQWNjb3VudExvY2tvdXQodXNlciwgdGhpcy5jb25maWcpO1xuICAgICAgICByZXR1cm4gYWNjb3VudExvY2tvdXRQb2xpY3kudW5sb2NrQWNjb3VudCgpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5tZXNzYWdlKSB7XG4gICAgICAgICAgLy8gaW4gY2FzZSBvZiBQYXJzZS5FcnJvciwgZmFpbCB3aXRoIHRoZSBlcnJvciBtZXNzYWdlIG9ubHlcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBkZWZhdWx0VmVyaWZpY2F0aW9uRW1haWwoeyBsaW5rLCB1c2VyLCBhcHBOYW1lIH0pIHtcbiAgICBjb25zdCB0ZXh0ID1cbiAgICAgICdIaSxcXG5cXG4nICtcbiAgICAgICdZb3UgYXJlIGJlaW5nIGFza2VkIHRvIGNvbmZpcm0gdGhlIGUtbWFpbCBhZGRyZXNzICcgK1xuICAgICAgdXNlci5nZXQoJ2VtYWlsJykgK1xuICAgICAgJyB3aXRoICcgK1xuICAgICAgYXBwTmFtZSArXG4gICAgICAnXFxuXFxuJyArXG4gICAgICAnJyArXG4gICAgICAnQ2xpY2sgaGVyZSB0byBjb25maXJtIGl0OlxcbicgK1xuICAgICAgbGluaztcbiAgICBjb25zdCB0byA9IHVzZXIuZ2V0KCdlbWFpbCcpO1xuICAgIGNvbnN0IHN1YmplY3QgPSAnUGxlYXNlIHZlcmlmeSB5b3VyIGUtbWFpbCBmb3IgJyArIGFwcE5hbWU7XG4gICAgcmV0dXJuIHsgdGV4dCwgdG8sIHN1YmplY3QgfTtcbiAgfVxuXG4gIGRlZmF1bHRSZXNldFBhc3N3b3JkRW1haWwoeyBsaW5rLCB1c2VyLCBhcHBOYW1lIH0pIHtcbiAgICBjb25zdCB0ZXh0ID1cbiAgICAgICdIaSxcXG5cXG4nICtcbiAgICAgICdZb3UgcmVxdWVzdGVkIHRvIHJlc2V0IHlvdXIgcGFzc3dvcmQgZm9yICcgK1xuICAgICAgYXBwTmFtZSArXG4gICAgICAodXNlci5nZXQoJ3VzZXJuYW1lJykgPyBcIiAoeW91ciB1c2VybmFtZSBpcyAnXCIgKyB1c2VyLmdldCgndXNlcm5hbWUnKSArIFwiJylcIiA6ICcnKSArXG4gICAgICAnLlxcblxcbicgK1xuICAgICAgJycgK1xuICAgICAgJ0NsaWNrIGhlcmUgdG8gcmVzZXQgaXQ6XFxuJyArXG4gICAgICBsaW5rO1xuICAgIGNvbnN0IHRvID0gdXNlci5nZXQoJ2VtYWlsJykgfHwgdXNlci5nZXQoJ3VzZXJuYW1lJyk7XG4gICAgY29uc3Qgc3ViamVjdCA9ICdQYXNzd29yZCBSZXNldCBmb3IgJyArIGFwcE5hbWU7XG4gICAgcmV0dXJuIHsgdGV4dCwgdG8sIHN1YmplY3QgfTtcbiAgfVxufVxuXG4vLyBNYXJrIHRoaXMgcHJpdmF0ZVxuZnVuY3Rpb24gdXBkYXRlVXNlclBhc3N3b3JkKHVzZXIsIHBhc3N3b3JkLCBjb25maWcpIHtcbiAgcmV0dXJuIHJlc3RcbiAgICAudXBkYXRlKFxuICAgICAgY29uZmlnLFxuICAgICAgQXV0aC5tYXN0ZXIoY29uZmlnKSxcbiAgICAgICdfVXNlcicsXG4gICAgICB7IG9iamVjdElkOiB1c2VyLm9iamVjdElkIH0sXG4gICAgICB7XG4gICAgICAgIHBhc3N3b3JkOiBwYXNzd29yZCxcbiAgICAgIH1cbiAgICApXG4gICAgLnRoZW4oKCkgPT4gdXNlcik7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRW1haWxMaW5rKGRlc3RpbmF0aW9uLCB1c2VybmFtZSwgdG9rZW4sIGNvbmZpZykge1xuICBjb25zdCB1c2VybmFtZUFuZFRva2VuID0gYHRva2VuPSR7dG9rZW59JnVzZXJuYW1lPSR7dXNlcm5hbWV9YDtcblxuICBpZiAoY29uZmlnLnBhcnNlRnJhbWVVUkwpIHtcbiAgICBjb25zdCBkZXN0aW5hdGlvbldpdGhvdXRIb3N0ID0gZGVzdGluYXRpb24ucmVwbGFjZShjb25maWcucHVibGljU2VydmVyVVJMLCAnJyk7XG5cbiAgICByZXR1cm4gYCR7Y29uZmlnLnBhcnNlRnJhbWVVUkx9P2xpbms9JHtlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICBkZXN0aW5hdGlvbldpdGhvdXRIb3N0XG4gICAgKX0mJHt1c2VybmFtZUFuZFRva2VufWA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGAke2Rlc3RpbmF0aW9ufT8ke3VzZXJuYW1lQW5kVG9rZW59YDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBVc2VyQ29udHJvbGxlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUErQjtBQUUvQixJQUFJQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxjQUFjLENBQUM7QUFDdkMsSUFBSUMsSUFBSSxHQUFHRCxPQUFPLENBQUMsU0FBUyxDQUFDO0FBRXRCLE1BQU1FLGNBQWMsU0FBU0MsNEJBQW1CLENBQUM7RUFDdERDLFdBQVcsQ0FBQ0MsT0FBTyxFQUFFQyxLQUFLLEVBQUVDLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRTtJQUN4QyxLQUFLLENBQUNGLE9BQU8sRUFBRUMsS0FBSyxFQUFFQyxPQUFPLENBQUM7RUFDaEM7RUFFQSxJQUFJQyxNQUFNLEdBQUc7SUFDWCxPQUFPQyxlQUFNLENBQUND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
368
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZXN0UXVlcnkiLCJyZXF1aXJlIiwiQXV0aCIsIlVzZXJDb250cm9sbGVyIiwiQWRhcHRhYmxlQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiYWRhcHRlciIsImFwcElkIiwib3B0aW9ucyIsImNvbmZpZyIsIkNvbmZpZyIsImdldCIsInZhbGlkYXRlQWRhcHRlciIsInNob3VsZFZlcmlmeUVtYWlscyIsImV4cGVjdGVkQWRhcHRlclR5cGUiLCJNYWlsQWRhcHRlciIsInZlcmlmeVVzZXJFbWFpbHMiLCJzZXRFbWFpbFZlcmlmeVRva2VuIiwidXNlciIsInJlcSIsInN0b3JhZ2UiLCJzaG91bGRTZW5kRW1haWwiLCJyZXNwb25zZSIsIlByb21pc2UiLCJyZXNvbHZlIiwic2VuZFZlcmlmaWNhdGlvbkVtYWlsIiwiX2VtYWlsX3ZlcmlmeV90b2tlbiIsInJhbmRvbVN0cmluZyIsImZpZWxkc0NoYW5nZWRCeVRyaWdnZXIiLCJpbmNsdWRlcyIsImVtYWlsVmVyaWZpZWQiLCJlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbiIsIl9lbWFpbF92ZXJpZnlfdG9rZW5fZXhwaXJlc19hdCIsIlBhcnNlIiwiX2VuY29kZSIsImdlbmVyYXRlRW1haWxWZXJpZnlUb2tlbkV4cGlyZXNBdCIsInZlcmlmeUVtYWlsIiwidXNlcm5hbWUiLCJ0b2tlbiIsInVuZGVmaW5lZCIsInF1ZXJ5IiwidXBkYXRlRmllbGRzIiwiX19vcCIsIiRndCIsIkRhdGUiLCJtYWludGVuYW5jZUF1dGgiLCJtYWludGVuYW5jZSIsImZpbmRVc2VyRm9yRW1haWxWZXJpZmljYXRpb24iLCJtZXRob2QiLCJNZXRob2QiLCJhdXRoIiwiY2xhc3NOYW1lIiwicmVzdFdoZXJlIiwiZXhlY3V0ZSIsInRoZW4iLCJyZXN1bHQiLCJyZXN1bHRzIiwibGVuZ3RoIiwib2JqZWN0SWQiLCJyZXN0IiwidXBkYXRlIiwiY2hlY2tSZXNldFRva2VuVmFsaWRpdHkiLCJkYXRhYmFzZSIsImZpbmQiLCJfcGVyaXNoYWJsZV90b2tlbiIsImxpbWl0IiwicGFzc3dvcmRQb2xpY3kiLCJyZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbiIsImV4cGlyZXNEYXRlIiwiX3BlcmlzaGFibGVfdG9rZW5fZXhwaXJlc19hdCIsIl9fdHlwZSIsImlzbyIsImdldFVzZXJJZk5lZWRlZCIsImVtYWlsIiwid2hlcmUiLCJydW5CZWZvcmVGaW5kIiwibWFzdGVyIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZmV0Y2hlZFVzZXIiLCJzZW5kVXNlckVtYWlsVmVyaWZpY2F0aW9uIiwiT2JqZWN0IiwiZnJvbUpTT04iLCJpc01hc3RlciIsImxpbmsiLCJidWlsZEVtYWlsTGluayIsInZlcmlmeUVtYWlsVVJMIiwiYXBwTmFtZSIsImluZmxhdGUiLCJzZW5kTWFpbCIsImRlZmF1bHRWZXJpZmljYXRpb25FbWFpbCIsInJlZ2VuZXJhdGVFbWFpbFZlcmlmeVRva2VuIiwiZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCIsInNob3VsZFNlbmQiLCJyZXNlbmRWZXJpZmljYXRpb25FbWFpbCIsImFVc2VyIiwiZ2VuZXJhdGUiLCJzZXRQYXNzd29yZFJlc2V0VG9rZW4iLCJnZW5lcmF0ZVBhc3N3b3JkUmVzZXRUb2tlbkV4cGlyZXNBdCIsIiRvciIsIiRleGlzdHMiLCJzZW5kUGFzc3dvcmRSZXNldEVtYWlsIiwicmVzZXRUb2tlblJldXNlSWZWYWxpZCIsInJlcXVlc3RSZXNldFBhc3N3b3JkVVJMIiwiZGVmYXVsdFJlc2V0UGFzc3dvcmRFbWFpbCIsInVwZGF0ZVBhc3N3b3JkIiwicGFzc3dvcmQiLCJ1cGRhdGVVc2VyUGFzc3dvcmQiLCJhY2NvdW50TG9ja291dFBvbGljeSIsIkFjY291bnRMb2Nrb3V0IiwidW5sb2NrQWNjb3VudCIsImNhdGNoIiwiZXJyb3IiLCJtZXNzYWdlIiwicmVqZWN0IiwidGV4dCIsInRvIiwic3ViamVjdCIsImRlc3RpbmF0aW9uIiwidXNlcm5hbWVBbmRUb2tlbiIsInBhcnNlRnJhbWVVUkwiLCJkZXN0aW5hdGlvbldpdGhvdXRIb3N0IiwicmVwbGFjZSIsInB1YmxpY1NlcnZlclVSTCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Db250cm9sbGVycy9Vc2VyQ29udHJvbGxlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21TdHJpbmcgfSBmcm9tICcuLi9jcnlwdG9VdGlscyc7XG5pbXBvcnQgeyBpbmZsYXRlIH0gZnJvbSAnLi4vdHJpZ2dlcnMnO1xuaW1wb3J0IEFkYXB0YWJsZUNvbnRyb2xsZXIgZnJvbSAnLi9BZGFwdGFibGVDb250cm9sbGVyJztcbmltcG9ydCBNYWlsQWRhcHRlciBmcm9tICcuLi9BZGFwdGVycy9FbWFpbC9NYWlsQWRhcHRlcic7XG5pbXBvcnQgcmVzdCBmcm9tICcuLi9yZXN0JztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBBY2NvdW50TG9ja291dCBmcm9tICcuLi9BY2NvdW50TG9ja291dCc7XG5pbXBvcnQgQ29uZmlnIGZyb20gJy4uL0NvbmZpZyc7XG5cbnZhciBSZXN0UXVlcnkgPSByZXF1aXJlKCcuLi9SZXN0UXVlcnknKTtcbnZhciBBdXRoID0gcmVxdWlyZSgnLi4vQXV0aCcpO1xuXG5leHBvcnQgY2xhc3MgVXNlckNvbnRyb2xsZXIgZXh0ZW5kcyBBZGFwdGFibGVDb250cm9sbGVyIHtcbiAgY29uc3RydWN0b3IoYWRhcHRlciwgYXBwSWQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKGFkYXB0ZXIsIGFwcElkLCBvcHRpb25zKTtcbiAgfVxuXG4gIGdldCBjb25maWcoKSB7XG4gICAgcmV0dXJuIENvbmZpZy5nZXQodGhpcy5hcHBJZCk7XG4gIH1cblxuICB2YWxpZGF0ZUFkYXB0ZXIoYWRhcHRlcikge1xuICAgIC8vIEFsbG93IG5vIGFkYXB0ZXJcbiAgICBpZiAoIWFkYXB0ZXIgJiYgIXRoaXMuc2hvdWxkVmVyaWZ5RW1haWxzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN1cGVyLnZhbGlkYXRlQWRhcHRlcihhZGFwdGVyKTtcbiAgfVxuXG4gIGV4cGVjdGVkQWRhcHRlclR5cGUoKSB7XG4gICAgcmV0dXJuIE1haWxBZGFwdGVyO1xuICB9XG5cbiAgZ2V0IHNob3VsZFZlcmlmeUVtYWlscygpIHtcbiAgICByZXR1cm4gKHRoaXMuY29uZmlnIHx8IHRoaXMub3B0aW9ucykudmVyaWZ5VXNlckVtYWlscztcbiAgfVxuXG4gIGFzeW5jIHNldEVtYWlsVmVyaWZ5VG9rZW4odXNlciwgcmVxLCBzdG9yYWdlID0ge30pIHtcbiAgICBsZXQgc2hvdWxkU2VuZEVtYWlsID0gdGhpcy5zaG91bGRWZXJpZnlFbWFpbHM7XG4gICAgaWYgKHR5cGVvZiBzaG91bGRTZW5kRW1haWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKHNob3VsZFNlbmRFbWFpbChyZXEpKTtcbiAgICAgIHNob3VsZFNlbmRFbWFpbCA9IHJlc3BvbnNlICE9PSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFzaG91bGRTZW5kRW1haWwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc3RvcmFnZS5zZW5kVmVyaWZpY2F0aW9uRW1haWwgPSB0cnVlO1xuICAgIHVzZXIuX2VtYWlsX3ZlcmlmeV90b2tlbiA9IHJhbmRvbVN0cmluZygyNSk7XG4gICAgaWYgKFxuICAgICAgIXN0b3JhZ2UuZmllbGRzQ2hhbmdlZEJ5VHJpZ2dlciB8fFxuICAgICAgIXN0b3JhZ2UuZmllbGRzQ2hhbmdlZEJ5VHJpZ2dlci5pbmNsdWRlcygnZW1haWxWZXJpZmllZCcpXG4gICAgKSB7XG4gICAgICB1c2VyLmVtYWlsVmVyaWZpZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcuZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24pIHtcbiAgICAgIHVzZXIuX2VtYWlsX3ZlcmlmeV90b2tlbl9leHBpcmVzX2F0ID0gUGFyc2UuX2VuY29kZShcbiAgICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVFbWFpbFZlcmlmeVRva2VuRXhwaXJlc0F0KClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5RW1haWwodXNlcm5hbWUsIHRva2VuKSB7XG4gICAgaWYgKCF0aGlzLnNob3VsZFZlcmlmeUVtYWlscykge1xuICAgICAgLy8gVHJ5aW5nIHRvIHZlcmlmeSBlbWFpbCB3aGVuIG5vdCBlbmFibGVkXG4gICAgICAvLyBUT0RPOiBCZXR0ZXIgZXJyb3IgaGVyZS5cbiAgICAgIHRocm93IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeSA9IHsgdXNlcm5hbWU6IHVzZXJuYW1lLCBfZW1haWxfdmVyaWZ5X3Rva2VuOiB0b2tlbiB9O1xuICAgIGNvbnN0IHVwZGF0ZUZpZWxkcyA9IHtcbiAgICAgIGVtYWlsVmVyaWZpZWQ6IHRydWUsXG4gICAgICBfZW1haWxfdmVyaWZ5X3Rva2VuOiB7IF9fb3A6ICdEZWxldGUnIH0sXG4gICAgfTtcblxuICAgIC8vIGlmIHRoZSBlbWFpbCB2ZXJpZnkgdG9rZW4gbmVlZHMgdG8gYmUgdmFsaWRhdGVkIHRoZW5cbiAgICAvLyBhZGQgYWRkaXRpb25hbCBxdWVyeSBwYXJhbXMgYW5kIGFkZGl0aW9uYWwgZmllbGRzIHRoYXQgbmVlZCB0byBiZSB1cGRhdGVkXG4gICAgaWYgKHRoaXMuY29uZmlnLmVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uKSB7XG4gICAgICBxdWVyeS5lbWFpbFZlcmlmaWVkID0gZmFsc2U7XG4gICAgICBxdWVyeS5fZW1haWxfdmVyaWZ5X3Rva2VuX2V4cGlyZXNfYXQgPSB7ICRndDogUGFyc2UuX2VuY29kZShuZXcgRGF0ZSgpKSB9O1xuXG4gICAgICB1cGRhdGVGaWVsZHMuX2VtYWlsX3ZlcmlmeV90b2tlbl9leHBpcmVzX2F0ID0geyBfX29wOiAnRGVsZXRlJyB9O1xuICAgIH1cbiAgICBjb25zdCBtYWludGVuYW5jZUF1dGggPSBBdXRoLm1haW50ZW5hbmNlKHRoaXMuY29uZmlnKTtcbiAgICB2YXIgZmluZFVzZXJGb3JFbWFpbFZlcmlmaWNhdGlvbiA9IGF3YWl0IFJlc3RRdWVyeSh7XG4gICAgICBtZXRob2Q6IFJlc3RRdWVyeS5NZXRob2QuZ2V0LFxuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGF1dGg6IG1haW50ZW5hbmNlQXV0aCxcbiAgICAgIGNsYXNzTmFtZTogJ19Vc2VyJyxcbiAgICAgIHJlc3RXaGVyZToge1xuICAgICAgICB1c2VybmFtZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbmRVc2VyRm9yRW1haWxWZXJpZmljYXRpb24uZXhlY3V0ZSgpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQucmVzdWx0cy5sZW5ndGggJiYgcmVzdWx0LnJlc3VsdHNbMF0uZW1haWxWZXJpZmllZCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdC5yZXN1bHRzLmxlbmd0aFswXSk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5yZXN1bHRzLmxlbmd0aCkge1xuICAgICAgICBxdWVyeS5vYmplY3RJZCA9IHJlc3VsdC5yZXN1bHRzWzBdLm9iamVjdElkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3QudXBkYXRlKHRoaXMuY29uZmlnLCBtYWludGVuYW5jZUF1dGgsICdfVXNlcicsIHF1ZXJ5LCB1cGRhdGVGaWVsZHMpO1xuICAgIH0pO1xuICB9XG5cbiAgY2hlY2tSZXNldFRva2VuVmFsaWRpdHkodXNlcm5hbWUsIHRva2VuKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRhdGFiYXNlXG4gICAgICAuZmluZChcbiAgICAgICAgJ19Vc2VyJyxcbiAgICAgICAge1xuICAgICAgICAgIHVzZXJuYW1lOiB1c2VybmFtZSxcbiAgICAgICAgICBfcGVyaXNoYWJsZV90b2tlbjogdG9rZW4sXG4gICAgICAgIH0sXG4gICAgICAgIHsgbGltaXQ6IDEgfSxcbiAgICAgICAgQXV0aC5tYWludGVuYW5jZSh0aGlzLmNvbmZpZylcbiAgICAgIClcbiAgICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggIT0gMSkge1xuICAgICAgICAgIHRocm93ICdGYWlsZWQgdG8gcmVzZXQgcGFzc3dvcmQ6IHVzZXJuYW1lIC8gZW1haWwgLyB0b2tlbiBpcyBpbnZhbGlkJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5wYXNzd29yZFBvbGljeSAmJiB0aGlzLmNvbmZpZy5wYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbikge1xuICAgICAgICAgIGxldCBleHBpcmVzRGF0ZSA9IHJlc3VsdHNbMF0uX3BlcmlzaGFibGVfdG9rZW5fZXhwaXJlc19hdDtcbiAgICAgICAgICBpZiAoZXhwaXJlc0RhdGUgJiYgZXhwaXJlc0RhdGUuX190eXBlID09ICdEYXRlJykge1xuICAgICAgICAgICAgZXhwaXJlc0RhdGUgPSBuZXcgRGF0ZShleHBpcmVzRGF0ZS5pc28pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZXhwaXJlc0RhdGUgPCBuZXcgRGF0ZSgpKSB0aHJvdyAnVGhlIHBhc3N3b3JkIHJlc2V0IGxpbmsgaGFzIGV4cGlyZWQnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzWzBdO1xuICAgICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXRVc2VySWZOZWVkZWQodXNlcikge1xuICAgIGlmICh1c2VyLnVzZXJuYW1lICYmIHVzZXIuZW1haWwpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodXNlcik7XG4gICAgfVxuICAgIHZhciB3aGVyZSA9IHt9O1xuICAgIGlmICh1c2VyLnVzZXJuYW1lKSB7XG4gICAgICB3aGVyZS51c2VybmFtZSA9IHVzZXIudXNlcm5hbWU7XG4gICAgfVxuICAgIGlmICh1c2VyLmVtYWlsKSB7XG4gICAgICB3aGVyZS5lbWFpbCA9IHVzZXIuZW1haWw7XG4gICAgfVxuXG4gICAgdmFyIHF1ZXJ5ID0gYXdhaXQgUmVzdFF1ZXJ5KHtcbiAgICAgIG1ldGhvZDogUmVzdFF1ZXJ5Lk1ldGhvZC5nZXQsXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgcnVuQmVmb3JlRmluZDogZmFsc2UsXG4gICAgICBhdXRoOiBBdXRoLm1hc3Rlcih0aGlzLmNvbmZpZyksXG4gICAgICBjbGFzc05hbWU6ICdfVXNlcicsXG4gICAgICByZXN0V2hlcmU6IHdoZXJlLFxuICAgIH0pO1xuICAgIHJldHVybiBxdWVyeS5leGVjdXRlKCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICBpZiAocmVzdWx0LnJlc3VsdHMubGVuZ3RoICE9IDEpIHtcbiAgICAgICAgdGhyb3cgdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdC5yZXN1bHRzWzBdO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2VuZFZlcmlmaWNhdGlvbkVtYWlsKHVzZXIsIHJlcSkge1xuICAgIGlmICghdGhpcy5zaG91bGRWZXJpZnlFbWFpbHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdG9rZW4gPSBlbmNvZGVVUklDb21wb25lbnQodXNlci5fZW1haWxfdmVyaWZ5X3Rva2VuKTtcbiAgICAvLyBXZSBtYXkgbmVlZCB0byBmZXRjaCB0aGUgdXNlciBpbiBjYXNlIG9mIHVwZGF0ZSBlbWFpbFxuICAgIGNvbnN0IGZldGNoZWRVc2VyID0gYXdhaXQgdGhpcy5nZXRVc2VySWZOZWVkZWQodXNlcik7XG4gICAgbGV0IHNob3VsZFNlbmRFbWFpbCA9IHRoaXMuY29uZmlnLnNlbmRVc2VyRW1haWxWZXJpZmljYXRpb247XG4gICAgaWYgKHR5cGVvZiBzaG91bGRTZW5kRW1haWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICB0aGlzLmNvbmZpZy5zZW5kVXNlckVtYWlsVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgICB1c2VyOiBQYXJzZS5PYmplY3QuZnJvbUpTT04oeyBjbGFzc05hbWU6ICdfVXNlcicsIC4uLmZldGNoZWRVc2VyIH0pLFxuICAgICAgICAgIG1hc3RlcjogcmVxLmF1dGg/LmlzTWFzdGVyLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHNob3VsZFNlbmRFbWFpbCA9ICEhcmVzcG9uc2U7XG4gICAgfVxuICAgIGlmICghc2hvdWxkU2VuZEVtYWlsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHVzZXJuYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KHVzZXIudXNlcm5hbWUpO1xuXG4gICAgY29uc3QgbGluayA9IGJ1aWxkRW1haWxMaW5rKHRoaXMuY29uZmlnLnZlcmlmeUVtYWlsVVJMLCB1c2VybmFtZSwgdG9rZW4sIHRoaXMuY29uZmlnKTtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgYXBwTmFtZTogdGhpcy5jb25maWcuYXBwTmFtZSxcbiAgICAgIGxpbms6IGxpbmssXG4gICAgICB1c2VyOiBpbmZsYXRlKCdfVXNlcicsIGZldGNoZWRVc2VyKSxcbiAgICB9O1xuICAgIGlmICh0aGlzLmFkYXB0ZXIuc2VuZFZlcmlmaWNhdGlvbkVtYWlsKSB7XG4gICAgICB0aGlzLmFkYXB0ZXIuc2VuZFZlcmlmaWNhdGlvbkVtYWlsKG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkYXB0ZXIuc2VuZE1haWwodGhpcy5kZWZhdWx0VmVyaWZpY2F0aW9uRW1haWwob3B0aW9ucykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdlbmVyYXRlcyB0aGUgZ2l2ZW4gdXNlcidzIGVtYWlsIHZlcmlmaWNhdGlvbiB0b2tlblxuICAgKlxuICAgKiBAcGFyYW0gdXNlclxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGFzeW5jIHJlZ2VuZXJhdGVFbWFpbFZlcmlmeVRva2VuKHVzZXIsIG1hc3Rlcikge1xuICAgIGNvbnN0IHsgX2VtYWlsX3ZlcmlmeV90b2tlbiB9ID0gdXNlcjtcbiAgICBsZXQgeyBfZW1haWxfdmVyaWZ5X3Rva2VuX2V4cGlyZXNfYXQgfSA9IHVzZXI7XG4gICAgaWYgKF9lbWFpbF92ZXJpZnlfdG9rZW5fZXhwaXJlc19hdCAmJiBfZW1haWxfdmVyaWZ5X3Rva2VuX2V4cGlyZXNfYXQuX190eXBlID09PSAnRGF0ZScpIHtcbiAgICAgIF9lbWFpbF92ZXJpZnlfdG9rZW5fZXhwaXJlc19hdCA9IF9lbWFpbF92ZXJpZnlfdG9rZW5fZXhwaXJlc19hdC5pc287XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMuY29uZmlnLmVtYWlsVmVyaWZ5VG9rZW5SZXVzZUlmVmFsaWQgJiZcbiAgICAgIHRoaXMuY29uZmlnLmVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uICYmXG4gICAgICBfZW1haWxfdmVyaWZ5X3Rva2VuICYmXG4gICAgICBuZXcgRGF0ZSgpIDwgbmV3IERhdGUoX2VtYWlsX3ZlcmlmeV90b2tlbl9leHBpcmVzX2F0KVxuICAgICkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICBjb25zdCBzaG91bGRTZW5kID0gYXdhaXQgdGhpcy5zZXRFbWFpbFZlcmlmeVRva2VuKHVzZXIsIHsgdXNlciwgbWFzdGVyIH0pO1xuICAgIGlmICghc2hvdWxkU2VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb25maWcuZGF0YWJhc2UudXBkYXRlKCdfVXNlcicsIHsgdXNlcm5hbWU6IHVzZXIudXNlcm5hbWUgfSwgdXNlcik7XG4gIH1cblxuICBhc3luYyByZXNlbmRWZXJpZmljYXRpb25FbWFpbCh1c2VybmFtZSwgcmVxKSB7XG4gICAgY29uc3QgYVVzZXIgPSBhd2FpdCB0aGlzLmdldFVzZXJJZk5lZWRlZCh7IHVzZXJuYW1lOiB1c2VybmFtZSB9KTtcbiAgICBpZiAoIWFVc2VyIHx8IGFVc2VyLmVtYWlsVmVyaWZpZWQpIHtcbiAgICAgIHRocm93IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZ2VuZXJhdGUgPSBhd2FpdCB0aGlzLnJlZ2VuZXJhdGVFbWFpbFZlcmlmeVRva2VuKGFVc2VyLCByZXEuYXV0aD8uaXNNYXN0ZXIpO1xuICAgIGlmIChnZW5lcmF0ZSkge1xuICAgICAgdGhpcy5zZW5kVmVyaWZpY2F0aW9uRW1haWwoYVVzZXIsIHJlcSk7XG4gICAgfVxuICB9XG5cbiAgc2V0UGFzc3dvcmRSZXNldFRva2VuKGVtYWlsKSB7XG4gICAgY29uc3QgdG9rZW4gPSB7IF9wZXJpc2hhYmxlX3Rva2VuOiByYW5kb21TdHJpbmcoMjUpIH07XG5cbiAgICBpZiAodGhpcy5jb25maWcucGFzc3dvcmRQb2xpY3kgJiYgdGhpcy5jb25maWcucGFzc3dvcmRQb2xpY3kucmVzZXRUb2tlblZhbGlkaXR5RHVyYXRpb24pIHtcbiAgICAgIHRva2VuLl9wZXJpc2hhYmxlX3Rva2VuX2V4cGlyZXNfYXQgPSBQYXJzZS5fZW5jb2RlKFxuICAgICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZVBhc3N3b3JkUmVzZXRUb2tlbkV4cGlyZXNBdCgpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5kYXRhYmFzZS51cGRhdGUoXG4gICAgICAnX1VzZXInLFxuICAgICAgeyAkb3I6IFt7IGVtYWlsIH0sIHsgdXNlcm5hbWU6IGVtYWlsLCBlbWFpbDogeyAkZXhpc3RzOiBmYWxzZSB9IH1dIH0sXG4gICAgICB0b2tlbixcbiAgICAgIHt9LFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cblxuICBhc3luYyBzZW5kUGFzc3dvcmRSZXNldEVtYWlsKGVtYWlsKSB7XG4gICAgaWYgKCF0aGlzLmFkYXB0ZXIpIHtcbiAgICAgIHRocm93ICdUcnlpbmcgdG8gc2VuZCBhIHJlc2V0IHBhc3N3b3JkIGJ1dCBubyBhZGFwdGVyIGlzIHNldCc7XG4gICAgICAvLyAgVE9ETzogTm8gYWRhcHRlcj9cbiAgICB9XG4gICAgbGV0IHVzZXI7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jb25maWcucGFzc3dvcmRQb2xpY3kgJiZcbiAgICAgIHRoaXMuY29uZmlnLnBhc3N3b3JkUG9saWN5LnJlc2V0VG9rZW5SZXVzZUlmVmFsaWQgJiZcbiAgICAgIHRoaXMuY29uZmlnLnBhc3N3b3JkUG9saWN5LnJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uXG4gICAgKSB7XG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5jb25maWcuZGF0YWJhc2UuZmluZChcbiAgICAgICAgJ19Vc2VyJyxcbiAgICAgICAge1xuICAgICAgICAgICRvcjogW1xuICAgICAgICAgICAgeyBlbWFpbCwgX3BlcmlzaGFibGVfdG9rZW46IHsgJGV4aXN0czogdHJ1ZSB9IH0sXG4gICAgICAgICAgICB7IHVzZXJuYW1lOiBlbWFpbCwgZW1haWw6IHsgJGV4aXN0czogZmFsc2UgfSwgX3BlcmlzaGFibGVfdG9rZW46IHsgJGV4aXN0czogdHJ1ZSB9IH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgeyBsaW1pdDogMSB9LFxuICAgICAgICBBdXRoLm1haW50ZW5hbmNlKHRoaXMuY29uZmlnKVxuICAgICAgKTtcbiAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgIGxldCBleHBpcmVzRGF0ZSA9IHJlc3VsdHNbMF0uX3BlcmlzaGFibGVfdG9rZW5fZXhwaXJlc19hdDtcbiAgICAgICAgaWYgKGV4cGlyZXNEYXRlICYmIGV4cGlyZXNEYXRlLl9fdHlwZSA9PSAnRGF0ZScpIHtcbiAgICAgICAgICBleHBpcmVzRGF0ZSA9IG5ldyBEYXRlKGV4cGlyZXNEYXRlLmlzbyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4cGlyZXNEYXRlID4gbmV3IERhdGUoKSkge1xuICAgICAgICAgIHVzZXIgPSByZXN1bHRzWzBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghdXNlciB8fCAhdXNlci5fcGVyaXNoYWJsZV90b2tlbikge1xuICAgICAgdXNlciA9IGF3YWl0IHRoaXMuc2V0UGFzc3dvcmRSZXNldFRva2VuKGVtYWlsKTtcbiAgICB9XG4gICAgY29uc3QgdG9rZW4gPSBlbmNvZGVVUklDb21wb25lbnQodXNlci5fcGVyaXNoYWJsZV90b2tlbik7XG4gICAgY29uc3QgdXNlcm5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQodXNlci51c2VybmFtZSk7XG5cbiAgICBjb25zdCBsaW5rID0gYnVpbGRFbWFpbExpbmsodGhpcy5jb25maWcucmVxdWVzdFJlc2V0UGFzc3dvcmRVUkwsIHVzZXJuYW1lLCB0b2tlbiwgdGhpcy5jb25maWcpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBhcHBOYW1lOiB0aGlzLmNvbmZpZy5hcHBOYW1lLFxuICAgICAgbGluazogbGluayxcbiAgICAgIHVzZXI6IGluZmxhdGUoJ19Vc2VyJywgdXNlciksXG4gICAgfTtcblxuICAgIGlmICh0aGlzLmFkYXB0ZXIuc2VuZFBhc3N3b3JkUmVzZXRFbWFpbCkge1xuICAgICAgdGhpcy5hZGFwdGVyLnNlbmRQYXNzd29yZFJlc2V0RW1haWwob3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRhcHRlci5zZW5kTWFpbCh0aGlzLmRlZmF1bHRSZXNldFBhc3N3b3JkRW1haWwob3B0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodXNlcik7XG4gIH1cblxuICB1cGRhdGVQYXNzd29yZCh1c2VybmFtZSwgdG9rZW4sIHBhc3N3b3JkKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tSZXNldFRva2VuVmFsaWRpdHkodXNlcm5hbWUsIHRva2VuKVxuICAgICAgLnRoZW4odXNlciA9PiB1cGRhdGVVc2VyUGFzc3dvcmQodXNlciwgcGFzc3dvcmQsIHRoaXMuY29uZmlnKSlcbiAgICAgIC50aGVuKHVzZXIgPT4ge1xuICAgICAgICBjb25zdCBhY2NvdW50TG9ja291dFBvbGljeSA9IG5ldyBBY2NvdW50TG9ja291dCh1c2VyLCB0aGlzLmNvbmZpZyk7XG4gICAgICAgIHJldHVybiBhY2NvdW50TG9ja291dFBvbGljeS51bmxvY2tBY2NvdW50KCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLm1lc3NhZ2UpIHtcbiAgICAgICAgICAvLyBpbiBjYXNlIG9mIFBhcnNlLkVycm9yLCBmYWlsIHdpdGggdGhlIGVycm9yIG1lc3NhZ2Ugb25seVxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIGRlZmF1bHRWZXJpZmljYXRpb25FbWFpbCh7IGxpbmssIHVzZXIsIGFwcE5hbWUgfSkge1xuICAgIGNvbnN0IHRleHQgPVxuICAgICAgJ0hpLFxcblxcbicgK1xuICAgICAgJ1lvdSBhcmUgYmVpbmcgYXNrZWQgdG8gY29uZmlybSB0aGUgZS1tYWlsIGFkZHJlc3MgJyArXG4gICAgICB1c2VyLmdldCgnZW1haWwnKSArXG4gICAgICAnIHdpdGggJyArXG4gICAgICBhcHBOYW1lICtcbiAgICAgICdcXG5cXG4nICtcbiAgICAgICcnICtcbiAgICAgICdDbGljayBoZXJlIHRvIGNvbmZpcm0gaXQ6XFxuJyArXG4gICAgICBsaW5rO1xuICAgIGNvbnN0IHRvID0gdXNlci5nZXQoJ2VtYWlsJyk7XG4gICAgY29uc3Qgc3ViamVjdCA9ICdQbGVhc2UgdmVyaWZ5IHlvdXIgZS1tYWlsIGZvciAnICsgYXBwTmFtZTtcbiAgICByZXR1cm4geyB0ZXh0LCB0bywgc3ViamVjdCB9O1xuICB9XG5cbiAgZGVmYXVsdFJlc2V0UGFzc3dvcmRFbWFpbCh7IGxpbmssIHVzZXIsIGFwcE5hbWUgfSkge1xuICAgIGNvbnN0IHRleHQgPVxuICAgICAgJ0hpLFxcblxcbicgK1xuICAgICAgJ1lvdSByZXF1ZXN0ZWQgdG8gcmVzZXQgeW91ciBwYXNzd29yZCBmb3IgJyArXG4gICAgICBhcHBOYW1lICtcbiAgICAgICh1c2VyLmdldCgndXNlcm5hbWUnKSA/IFwiICh5b3VyIHVzZXJuYW1lIGlzICdcIiArIHVzZXIuZ2V0KCd1c2VybmFtZScpICsgXCInKVwiIDogJycpICtcbiAgICAgICcuXFxuXFxuJyArXG4gICAgICAnJyArXG4gICAgICAnQ2xpY2sgaGVyZSB0byByZXNldCBpdDpcXG4nICtcbiAgICAgIGxpbms7XG4gICAgY29uc3QgdG8gPSB1c2VyLmdldCgnZW1haWwnKSB8fCB1c2VyLmdldCgndXNlcm5hbWUnKTtcbiAgICBjb25zdCBzdWJqZWN0ID0gJ1Bhc3N3b3JkIFJlc2V0IGZvciAnICsgYXBwTmFtZTtcbiAgICByZXR1cm4geyB0ZXh0LCB0bywgc3ViamVjdCB9O1xuICB9XG59XG5cbi8vIE1hcmsgdGhpcyBwcml2YXRlXG5mdW5jdGlvbiB1cGRhdGVVc2VyUGFzc3dvcmQodXNlciwgcGFzc3dvcmQsIGNvbmZpZykge1xuICByZXR1cm4gcmVzdFxuICAgIC51cGRhdGUoXG4gICAgICBjb25maWcsXG4gICAgICBBdXRoLm1hc3Rlcihjb25maWcpLFxuICAgICAgJ19Vc2VyJyxcbiAgICAgIHsgb2JqZWN0SWQ6IHVzZXIub2JqZWN0SWQgfSxcbiAgICAgIHtcbiAgICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkLFxuICAgICAgfVxuICAgIClcbiAgICAudGhlbigoKSA9PiB1c2VyKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRFbWFpbExpbmsoZGVzdGluYXRpb24sIHVzZXJuYW1lLCB0b2tlbiwgY29uZmlnKSB7XG4gIGNvbnN0IHVzZXJuYW1lQW5kVG9rZW4gPSBgdG9rZW49JHt0b2tlbn0mdXNlcm5hbWU9JHt1c2VybmFtZX1gO1xuXG4gIGlmIChjb25maWcucGFyc2VGcmFtZVVSTCkge1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uV2l0aG91dEhvc3QgPSBkZXN0aW5hdGlvbi5yZXBsYWNlKGNvbmZpZy5wdWJsaWNTZXJ2ZXJVUkwsICcnKTtcblxuICAgIHJldHVybiBgJHtjb25maWcucGFyc2VGcmFtZVVSTH0/bGluaz0ke2VuY29kZVVSSUNvbXBvbmVudChcbiAgICAgIGRlc3RpbmF0aW9uV2l0aG91dEhvc3RcbiAgICApfSYke3VzZXJuYW1lQW5kVG9rZW59YDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYCR7ZGVzdGluYXRpb259PyR7dXNlcm5hbWVBbmRUb2tlbn1gO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFVzZXJDb250cm9sbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQStCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUUvQixJQUFJQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxjQUFjLENBQUM7QUFDdkMsSUFBSUMsSUFBSSxHQUFHRCxPQUFPLENBQUMsU0FBUyxDQUFDO0FBRXRCLE1BQU1FLGNBQWMsU0FBU0MsNEJBQW1CLENBQUM7RUFDdERDLFdBQVcsQ0FBQ0MsT0FBTyxFQUFFQyxLQUFLLEVBQUVDLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRTtJQUN4QyxLQUFLLENBQUNGLE9BQU8sRUFBRUMsS0FBSyxFQUFFQyxPQUFPLENBQUM7RUFDaEM7RUFFQSxJQUFJQyxNQUFNLEdBQUc7SUFDWCxPQUFPQyxlQUFNLENBQUNDLEdBQUcsQ0FBQyxJQUFJLENBQUNKLEtBQUssQ0FBQztFQUMvQjtFQUVBSyxlQUFlLENBQUNOLE9BQU8sRUFBRTtJQUN2QjtJQUNBLElBQUksQ0FBQ0EsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDTyxrQkFBa0IsRUFBRTtNQUN4QztJQUNGO0lBQ0EsS0FBSyxDQUFDRCxlQUFlLENBQUNOLE9BQU8sQ0FBQztFQUNoQztFQUVBUSxtQkFBbUIsR0FBRztJQUNwQixPQUFPQyxvQkFBVztF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
@@ -23,5 +23,8 @@ module.exports = [{
23
23
  }, {
24
24
  optionKey: 'allowExpiredAuthDataToken',
25
25
  changeNewDefault: 'false'
26
+ }, {
27
+ optionKey: 'encodeParseObjectInCloudFunction',
28
+ changeNewDefault: 'true'
26
29
  }];
27
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwib3B0aW9uS2V5IiwiY2hhbmdlTmV3RGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9EZXByZWNhdG9yL0RlcHJlY2F0aW9ucy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBkZXByZWNhdGlvbnMuXG4gKlxuICogQWRkIGRlcHJlY2F0aW9ucyB0byB0aGUgYXJyYXkgdXNpbmcgdGhlIGZvbGxvd2luZyBrZXlzOlxuICogLSBgb3B0aW9uS2V5YCB7U3RyaW5nfTogVGhlIG9wdGlvbiBrZXkgaW5jbC4gaXRzIHBhdGgsIGUuZy4gYHNlY3VyaXR5LmVuYWJsZUNoZWNrYC5cbiAqIC0gYGVudktleWAge1N0cmluZ306IFRoZSBlbnZpcm9ubWVudCBrZXksIGUuZy4gYFBBUlNFX1NFUlZFUl9TRUNVUklUWWAuXG4gKiAtIGBjaGFuZ2VOZXdLZXlgIHtTdHJpbmd9OiBTZXQgdGhlIG5ldyBrZXkgbmFtZSBpZiB0aGUgY3VycmVudCBrZXkgd2lsbCBiZSByZXBsYWNlZCxcbiAqIG9yIHNldCB0byBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGN1cnJlbnQga2V5IHdpbGwgYmUgcmVtb3ZlZCB3aXRob3V0IHJlcGxhY2VtZW50LlxuICogLSBgY2hhbmdlTmV3RGVmYXVsdGAge1N0cmluZ306IFNldCB0aGUgbmV3IGRlZmF1bHQgdmFsdWUgaWYgdGhlIGtleSdzIGRlZmF1bHQgdmFsdWVcbiAqIHdpbGwgY2hhbmdlIGluIGEgZnV0dXJlIHZlcnNpb24uXG4gKiAtIGBzb2x1dGlvbmA6IFRoZSBpbnN0cnVjdGlvbiB0byByZXNvbHZlIHRoaXMgZGVwcmVjYXRpb24gd2FybmluZy4gT3B0aW9uYWwuIFRoaXNcbiAqIGluc3RydWN0aW9uIG11c3Qgbm90IGluY2x1ZGUgdGhlIGRlcHJlY2F0aW9uIHdhcm5pbmcgd2hpY2ggaXMgYXV0by1nZW5lcmF0ZWQuXG4gKiBJdCBzaG91bGQgb25seSBjb250YWluIGFkZGl0aW9uYWwgaW5zdHJ1Y3Rpb24gcmVnYXJkaW5nIHRoZSBkZXByZWNhdGlvbiBpZlxuICogbmVjZXNzYXJ5LlxuICpcbiAqIElmIHRoZXJlIGFyZSBubyBkZXByZWNhdGlvbnMsIHRoaXMgbXVzdCByZXR1cm4gYW4gZW1wdHkgYXJyYXkuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gW1xuICB7IG9wdGlvbktleTogJ2FsbG93Q2xpZW50Q2xhc3NDcmVhdGlvbicsIGNoYW5nZU5ld0RlZmF1bHQ6ICdmYWxzZScgfSxcbiAgeyBvcHRpb25LZXk6ICdhbGxvd0V4cGlyZWRBdXRoRGF0YVRva2VuJywgY2hhbmdlTmV3RGVmYXVsdDogJ2ZhbHNlJyB9LFxuXTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0FBLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHLENBQ2Y7RUFBRUMsU0FBUyxFQUFFLDBCQUEwQjtFQUFFQyxnQkFBZ0IsRUFBRTtBQUFRLENBQUMsRUFDcEU7RUFBRUQsU0FBUyxFQUFFLDJCQUEyQjtFQUFFQyxnQkFBZ0IsRUFBRTtBQUFRLENBQUMsQ0FDdEUifQ==
30
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwib3B0aW9uS2V5IiwiY2hhbmdlTmV3RGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9EZXByZWNhdG9yL0RlcHJlY2F0aW9ucy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBkZXByZWNhdGlvbnMuXG4gKlxuICogQWRkIGRlcHJlY2F0aW9ucyB0byB0aGUgYXJyYXkgdXNpbmcgdGhlIGZvbGxvd2luZyBrZXlzOlxuICogLSBgb3B0aW9uS2V5YCB7U3RyaW5nfTogVGhlIG9wdGlvbiBrZXkgaW5jbC4gaXRzIHBhdGgsIGUuZy4gYHNlY3VyaXR5LmVuYWJsZUNoZWNrYC5cbiAqIC0gYGVudktleWAge1N0cmluZ306IFRoZSBlbnZpcm9ubWVudCBrZXksIGUuZy4gYFBBUlNFX1NFUlZFUl9TRUNVUklUWWAuXG4gKiAtIGBjaGFuZ2VOZXdLZXlgIHtTdHJpbmd9OiBTZXQgdGhlIG5ldyBrZXkgbmFtZSBpZiB0aGUgY3VycmVudCBrZXkgd2lsbCBiZSByZXBsYWNlZCxcbiAqIG9yIHNldCB0byBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGN1cnJlbnQga2V5IHdpbGwgYmUgcmVtb3ZlZCB3aXRob3V0IHJlcGxhY2VtZW50LlxuICogLSBgY2hhbmdlTmV3RGVmYXVsdGAge1N0cmluZ306IFNldCB0aGUgbmV3IGRlZmF1bHQgdmFsdWUgaWYgdGhlIGtleSdzIGRlZmF1bHQgdmFsdWVcbiAqIHdpbGwgY2hhbmdlIGluIGEgZnV0dXJlIHZlcnNpb24uXG4gKiAtIGBzb2x1dGlvbmA6IFRoZSBpbnN0cnVjdGlvbiB0byByZXNvbHZlIHRoaXMgZGVwcmVjYXRpb24gd2FybmluZy4gT3B0aW9uYWwuIFRoaXNcbiAqIGluc3RydWN0aW9uIG11c3Qgbm90IGluY2x1ZGUgdGhlIGRlcHJlY2F0aW9uIHdhcm5pbmcgd2hpY2ggaXMgYXV0by1nZW5lcmF0ZWQuXG4gKiBJdCBzaG91bGQgb25seSBjb250YWluIGFkZGl0aW9uYWwgaW5zdHJ1Y3Rpb24gcmVnYXJkaW5nIHRoZSBkZXByZWNhdGlvbiBpZlxuICogbmVjZXNzYXJ5LlxuICpcbiAqIElmIHRoZXJlIGFyZSBubyBkZXByZWNhdGlvbnMsIHRoaXMgbXVzdCByZXR1cm4gYW4gZW1wdHkgYXJyYXkuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gW1xuICB7IG9wdGlvbktleTogJ2FsbG93Q2xpZW50Q2xhc3NDcmVhdGlvbicsIGNoYW5nZU5ld0RlZmF1bHQ6ICdmYWxzZScgfSxcbiAgeyBvcHRpb25LZXk6ICdhbGxvd0V4cGlyZWRBdXRoRGF0YVRva2VuJywgY2hhbmdlTmV3RGVmYXVsdDogJ2ZhbHNlJyB9LFxuICB7IG9wdGlvbktleTogJ2VuY29kZVBhcnNlT2JqZWN0SW5DbG91ZEZ1bmN0aW9uJywgY2hhbmdlTmV3RGVmYXVsdDogJ3RydWUnIH0sXG5dO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQUEsTUFBTSxDQUFDQyxPQUFPLEdBQUcsQ0FDZjtFQUFFQyxTQUFTLEVBQUUsMEJBQTBCO0VBQUVDLGdCQUFnQixFQUFFO0FBQVEsQ0FBQyxFQUNwRTtFQUFFRCxTQUFTLEVBQUUsMkJBQTJCO0VBQUVDLGdCQUFnQixFQUFFO0FBQVEsQ0FBQyxFQUNyRTtFQUFFRCxTQUFTLEVBQUUsa0NBQWtDO0VBQUVDLGdCQUFnQixFQUFFO0FBQU8sQ0FBQyxDQUM1RSJ9