parse-server 6.3.0-alpha.7 → 6.3.0-alpha.9

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.
@@ -20,6 +20,14 @@ class RedisCacheAdapter {
20
20
  this.ttl = isValidTTL(ttl) ? ttl : DEFAULT_REDIS_TTL;
21
21
  this.client = (0, _redis.createClient)(redisCtx);
22
22
  this.queue = new _KeyPromiseQueue.KeyPromiseQueue();
23
+ this.client.on('error', err => {
24
+ _logger.default.error('RedisCacheAdapter client error', {
25
+ error: err
26
+ });
27
+ });
28
+ this.client.on('connect', () => {});
29
+ this.client.on('reconnecting', () => {});
30
+ this.client.on('ready', () => {});
23
31
  }
24
32
  async connect() {
25
33
  if (this.client.isOpen) {
@@ -99,4 +107,4 @@ class RedisCacheAdapter {
99
107
  exports.RedisCacheAdapter = RedisCacheAdapter;
100
108
  var _default = RedisCacheAdapter;
101
109
  exports.default = _default;
102
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUZBVUxUX1JFRElTX1RUTCIsIkZMVVNIX0RCX0tFWSIsImRlYnVnIiwiYXJncyIsIm1lc3NhZ2UiLCJhcmd1bWVudHMiLCJjb25jYXQiLCJzbGljZSIsImxlbmd0aCIsImxvZ2dlciIsImFwcGx5IiwiaXNWYWxpZFRUTCIsInR0bCIsIlJlZGlzQ2FjaGVBZGFwdGVyIiwiY29uc3RydWN0b3IiLCJyZWRpc0N0eCIsImNsaWVudCIsImNyZWF0ZUNsaWVudCIsInF1ZXVlIiwiS2V5UHJvbWlzZVF1ZXVlIiwiY29ubmVjdCIsImlzT3BlbiIsImhhbmRsZVNodXRkb3duIiwicXVpdCIsImVyciIsImVycm9yIiwiZ2V0Iiwia2V5IiwiZW5xdWV1ZSIsInJlcyIsIkpTT04iLCJwYXJzZSIsInB1dCIsInZhbHVlIiwic3RyaW5naWZ5IiwiSW5maW5pdHkiLCJzZXQiLCJQWCIsImRlbCIsImNsZWFyIiwic2VuZENvbW1hbmQiLCJnZXRBbGxLZXlzIiwia2V5cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9DYWNoZS9SZWRpc0NhY2hlQWRhcHRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVDbGllbnQgfSBmcm9tICdyZWRpcyc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uLy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBLZXlQcm9taXNlUXVldWUgfSBmcm9tICcuLi8uLi9LZXlQcm9taXNlUXVldWUnO1xuXG5jb25zdCBERUZBVUxUX1JFRElTX1RUTCA9IDMwICogMTAwMDsgLy8gMzAgc2Vjb25kcyBpbiBtaWxsaXNlY29uZHNcbmNvbnN0IEZMVVNIX0RCX0tFWSA9ICdfX2ZsdXNoX2RiX18nO1xuXG5mdW5jdGlvbiBkZWJ1ZyguLi5hcmdzOiBhbnkpIHtcbiAgY29uc3QgbWVzc2FnZSA9IFsnUmVkaXNDYWNoZUFkYXB0ZXI6ICcgKyBhcmd1bWVudHNbMF1dLmNvbmNhdChhcmdzLnNsaWNlKDEsIGFyZ3MubGVuZ3RoKSk7XG4gIGxvZ2dlci5kZWJ1Zy5hcHBseShsb2dnZXIsIG1lc3NhZ2UpO1xufVxuXG5jb25zdCBpc1ZhbGlkVFRMID0gdHRsID0+IHR5cGVvZiB0dGwgPT09ICdudW1iZXInICYmIHR0bCA+IDA7XG5cbmV4cG9ydCBjbGFzcyBSZWRpc0NhY2hlQWRhcHRlciB7XG4gIGNvbnN0cnVjdG9yKHJlZGlzQ3R4LCB0dGwgPSBERUZBVUxUX1JFRElTX1RUTCkge1xuICAgIHRoaXMudHRsID0gaXNWYWxpZFRUTCh0dGwpID8gdHRsIDogREVGQVVMVF9SRURJU19UVEw7XG4gICAgdGhpcy5jbGllbnQgPSBjcmVhdGVDbGllbnQocmVkaXNDdHgpO1xuICAgIHRoaXMucXVldWUgPSBuZXcgS2V5UHJvbWlzZVF1ZXVlKCk7XG4gIH1cblxuICBhc3luYyBjb25uZWN0KCkge1xuICAgIGlmICh0aGlzLmNsaWVudC5pc09wZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmNvbm5lY3QoKTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZVNodXRkb3duKCkge1xuICAgIGlmICghdGhpcy5jbGllbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50LnF1aXQoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignUmVkaXNDYWNoZUFkYXB0ZXIgZXJyb3Igb24gc2h1dGRvd24nLCB7IGVycm9yOiBlcnIgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0KGtleSkge1xuICAgIGRlYnVnKCdnZXQnLCB7IGtleSB9KTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5xdWV1ZS5lbnF1ZXVlKGtleSk7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXQoa2V5KTtcbiAgICAgIGlmICghcmVzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignUmVkaXNDYWNoZUFkYXB0ZXIgZXJyb3Igb24gZ2V0JywgeyBlcnJvcjogZXJyIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHB1dChrZXksIHZhbHVlLCB0dGwgPSB0aGlzLnR0bCkge1xuICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIGRlYnVnKCdwdXQnLCB7IGtleSwgdmFsdWUsIHR0bCB9KTtcbiAgICBhd2FpdCB0aGlzLnF1ZXVlLmVucXVldWUoa2V5KTtcbiAgICBpZiAodHRsID09PSAwKSB7XG4gICAgICAvLyB0dGwgb2YgemVybyBpcyBhIGxvZ2ljYWwgbm8tb3AsIGJ1dCByZWRpcyBjYW5ub3Qgc2V0IGV4cGlyZSB0aW1lIG9mIHplcm9cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHRsID09PSBJbmZpbml0eSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnNldChrZXksIHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzVmFsaWRUVEwodHRsKSkge1xuICAgICAgdHRsID0gdGhpcy50dGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNsaWVudC5zZXQoa2V5LCB2YWx1ZSwgeyBQWDogdHRsIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsKGtleSkge1xuICAgIGRlYnVnKCdkZWwnLCB7IGtleSB9KTtcbiAgICBhd2FpdCB0aGlzLnF1ZXVlLmVucXVldWUoa2V5KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuZGVsKGtleSk7XG4gIH1cblxuICBhc3luYyBjbGVhcigpIHtcbiAgICBkZWJ1ZygnY2xlYXInKTtcbiAgICBhd2FpdCB0aGlzLnF1ZXVlLmVucXVldWUoRkxVU0hfREJfS0VZKTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZENvbW1hbmQoWydGTFVTSERCJ10pO1xuICB9XG5cbiAgLy8gVXNlZCBmb3IgdGVzdGluZ1xuICBnZXRBbGxLZXlzKCkge1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5rZXlzKCcqJyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVkaXNDYWNoZUFkYXB0ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUF3RDtBQUV4RCxNQUFNQSxpQkFBaUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDckMsTUFBTUMsWUFBWSxHQUFHLGNBQWM7QUFFbkMsU0FBU0MsS0FBSyxDQUFDLEdBQUdDLElBQVMsRUFBRTtFQUMzQixNQUFNQyxPQUFPLEdBQUcsQ0FBQyxxQkFBcUIsR0FBR0MsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNDLE1BQU0sQ0FBQ0gsSUFBSSxDQUFDSSxLQUFLLENBQUMsQ0FBQyxFQUFFSixJQUFJLENBQUNLLE1BQU0sQ0FBQyxDQUFDO0VBQ3pGQyxlQUFNLENBQUNQLEtBQUssQ0FBQ1EsS0FBSyxDQUFDRCxlQUFNLEVBQUVMLE9BQU8sQ0FBQztBQUNyQztBQUVBLE1BQU1PLFVBQVUsR0FBR0MsR0FBRyxJQUFJLE9BQU9BLEdBQUcsS0FBSyxRQUFRLElBQUlBLEdBQUcsR0FBRyxDQUFDO0FBRXJELE1BQU1DLGlCQUFpQixDQUFDO0VBQzdCQyxXQUFXLENBQUNDLFFBQVEsRUFBRUgsR0FBRyxHQUFHWixpQkFBaUIsRUFBRTtJQUM3QyxJQUFJLENBQUNZLEdBQUcsR0FBR0QsVUFBVSxDQUFDQyxHQUFHLENBQUMsR0FBR0EsR0FBRyxHQUFHWixpQkFBaUI7SUFDcEQsSUFBSSxDQUFDZ0IsTUFBTSxHQUFHLElBQUFDLG1CQUFZLEVBQUNGLFFBQVEsQ0FBQztJQUNwQyxJQUFJLENBQUNHLEtBQUssR0FBRyxJQUFJQyxnQ0FBZSxFQUFFO0VBQ3BDO0VBRUEsTUFBTUMsT0FBTyxHQUFHO0lBQ2QsSUFBSSxJQUFJLENBQUNKLE1BQU0sQ0FBQ0ssTUFBTSxFQUFFO01BQ3RCO0lBQ0Y7SUFDQSxPQUFPLElBQUksQ0FBQ0wsTUFBTSxDQUFDSSxPQUFPLEVB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
110
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUZBVUxUX1JFRElTX1RUTCIsIkZMVVNIX0RCX0tFWSIsImRlYnVnIiwiYXJncyIsIm1lc3NhZ2UiLCJhcmd1bWVudHMiLCJjb25jYXQiLCJzbGljZSIsImxlbmd0aCIsImxvZ2dlciIsImFwcGx5IiwiaXNWYWxpZFRUTCIsInR0bCIsIlJlZGlzQ2FjaGVBZGFwdGVyIiwiY29uc3RydWN0b3IiLCJyZWRpc0N0eCIsImNsaWVudCIsImNyZWF0ZUNsaWVudCIsInF1ZXVlIiwiS2V5UHJvbWlzZVF1ZXVlIiwib24iLCJlcnIiLCJlcnJvciIsImNvbm5lY3QiLCJpc09wZW4iLCJoYW5kbGVTaHV0ZG93biIsInF1aXQiLCJnZXQiLCJrZXkiLCJlbnF1ZXVlIiwicmVzIiwiSlNPTiIsInBhcnNlIiwicHV0IiwidmFsdWUiLCJzdHJpbmdpZnkiLCJJbmZpbml0eSIsInNldCIsIlBYIiwiZGVsIiwiY2xlYXIiLCJzZW5kQ29tbWFuZCIsImdldEFsbEtleXMiLCJrZXlzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0NhY2hlL1JlZGlzQ2FjaGVBZGFwdGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUNsaWVudCB9IGZyb20gJ3JlZGlzJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vLi4vbG9nZ2VyJztcbmltcG9ydCB7IEtleVByb21pc2VRdWV1ZSB9IGZyb20gJy4uLy4uL0tleVByb21pc2VRdWV1ZSc7XG5cbmNvbnN0IERFRkFVTFRfUkVESVNfVFRMID0gMzAgKiAxMDAwOyAvLyAzMCBzZWNvbmRzIGluIG1pbGxpc2Vjb25kc1xuY29uc3QgRkxVU0hfREJfS0VZID0gJ19fZmx1c2hfZGJfXyc7XG5cbmZ1bmN0aW9uIGRlYnVnKC4uLmFyZ3M6IGFueSkge1xuICBjb25zdCBtZXNzYWdlID0gWydSZWRpc0NhY2hlQWRhcHRlcjogJyArIGFyZ3VtZW50c1swXV0uY29uY2F0KGFyZ3Muc2xpY2UoMSwgYXJncy5sZW5ndGgpKTtcbiAgbG9nZ2VyLmRlYnVnLmFwcGx5KGxvZ2dlciwgbWVzc2FnZSk7XG59XG5cbmNvbnN0IGlzVmFsaWRUVEwgPSB0dGwgPT4gdHlwZW9mIHR0bCA9PT0gJ251bWJlcicgJiYgdHRsID4gMDtcblxuZXhwb3J0IGNsYXNzIFJlZGlzQ2FjaGVBZGFwdGVyIHtcbiAgY29uc3RydWN0b3IocmVkaXNDdHgsIHR0bCA9IERFRkFVTFRfUkVESVNfVFRMKSB7XG4gICAgdGhpcy50dGwgPSBpc1ZhbGlkVFRMKHR0bCkgPyB0dGwgOiBERUZBVUxUX1JFRElTX1RUTDtcbiAgICB0aGlzLmNsaWVudCA9IGNyZWF0ZUNsaWVudChyZWRpc0N0eCk7XG4gICAgdGhpcy5xdWV1ZSA9IG5ldyBLZXlQcm9taXNlUXVldWUoKTtcbiAgICB0aGlzLmNsaWVudC5vbignZXJyb3InLCBlcnIgPT4geyBsb2dnZXIuZXJyb3IoJ1JlZGlzQ2FjaGVBZGFwdGVyIGNsaWVudCBlcnJvcicsIHsgZXJyb3I6IGVyciB9KSB9KTtcbiAgICB0aGlzLmNsaWVudC5vbignY29ubmVjdCcsICgpID0+IHt9KTtcbiAgICB0aGlzLmNsaWVudC5vbigncmVjb25uZWN0aW5nJywgKCkgPT4ge30pO1xuICAgIHRoaXMuY2xpZW50Lm9uKCdyZWFkeScsICgpID0+IHt9KTtcbiAgfVxuXG4gIGFzeW5jIGNvbm5lY3QoKSB7XG4gICAgaWYgKHRoaXMuY2xpZW50LmlzT3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jbGllbnQuY29ubmVjdCgpO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlU2h1dGRvd24oKSB7XG4gICAgaWYgKCF0aGlzLmNsaWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jbGllbnQucXVpdCgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdSZWRpc0NhY2hlQWRhcHRlciBlcnJvciBvbiBzaHV0ZG93bicsIHsgZXJyb3I6IGVyciB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXQoa2V5KSB7XG4gICAgZGVidWcoJ2dldCcsIHsga2V5IH0pO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnF1ZXVlLmVucXVldWUoa2V5KTtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuY2xpZW50LmdldChrZXkpO1xuICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShyZXMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdSZWRpc0NhY2hlQWRhcHRlciBlcnJvciBvbiBnZXQnLCB7IGVycm9yOiBlcnIgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcHV0KGtleSwgdmFsdWUsIHR0bCA9IHRoaXMudHRsKSB7XG4gICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgZGVidWcoJ3B1dCcsIHsga2V5LCB2YWx1ZSwgdHRsIH0pO1xuICAgIGF3YWl0IHRoaXMucXVldWUuZW5xdWV1ZShrZXkpO1xuICAgIGlmICh0dGwgPT09IDApIHtcbiAgICAgIC8vIHR0bCBvZiB6ZXJvIGlzIGEgbG9naWNhbCBuby1vcCwgYnV0IHJlZGlzIGNhbm5vdCBzZXQgZXhwaXJlIHRpbWUgb2YgemVyb1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0dGwgPT09IEluZmluaXR5KSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGllbnQuc2V0KGtleSwgdmFsdWUpO1xuICAgIH1cblxuICAgIGlmICghaXNWYWxpZFRUTCh0dGwpKSB7XG4gICAgICB0dGwgPSB0aGlzLnR0bDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnNldChrZXksIHZhbHVlLCB7IFBYOiB0dGwgfSk7XG4gIH1cblxuICBhc3luYyBkZWwoa2V5KSB7XG4gICAgZGVidWcoJ2RlbCcsIHsga2V5IH0pO1xuICAgIGF3YWl0IHRoaXMucXVldWUuZW5xdWV1ZShrZXkpO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5kZWwoa2V5KTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyKCkge1xuICAgIGRlYnVnKCdjbGVhcicpO1xuICAgIGF3YWl0IHRoaXMucXVldWUuZW5xdWV1ZShGTFVTSF9EQl9LRVkpO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5zZW5kQ29tbWFuZChbJ0ZMVVNIREInXSk7XG4gIH1cblxuICAvLyBVc2VkIGZvciB0ZXN0aW5nXG4gIGdldEFsbEtleXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmtleXMoJyonKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZWRpc0NhY2hlQWRhcHRlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQXdEO0FBRXhELE1BQU1BLGlCQUFpQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNyQyxNQUFNQyxZQUFZLEdBQUcsY0FBYztBQUVuQyxTQUFTQyxLQUFLLENBQUMsR0FBR0MsSUFBUyxFQUFFO0VBQzNCLE1BQU1DLE9BQU8sR0FBRyxDQUFDLHFCQUFxQixHQUFHQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsTUFBTSxDQUFDSCxJQUFJLENBQUNJLEtBQUssQ0FBQyxDQUFDLEVBQUVKLElBQUksQ0FBQ0ssTUFBTSxDQUFDLENBQUM7RUFDekZDLGVBQU0sQ0FBQ1AsS0FBSyxDQUFDUSxLQUFLLENBQUNELGVBQU0sRUFBRUwsT0FBTyxDQUFDO0FBQ3JDO0FBRUEsTUFBTU8sVUFBVSxHQUFHQyxHQUFHLElBQUksT0FBT0EsR0FBRyxLQUFLLFFBQVEsSUFBSUEsR0FBRyxHQUFHLENBQUM7QUFFckQsTUFBTUMsaUJBQWlCLENBQUM7RUFDN0JDLFdBQVcsQ0FBQ0MsUUFBUSxFQUFFSCxHQUFHLEdBQUdaLGlCQUFpQixFQUFFO0lBQzdDLElBQUksQ0FBQ1ksR0FBRyxHQUFHRCxVQUFVLENBQUNDLEdBQUcsQ0FBQyxHQUFH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
package/lib/Auth.js CHANGED
@@ -101,13 +101,22 @@ const renewSessionIfNeeded = async ({
101
101
  try {
102
102
  var _session;
103
103
  if (!session) {
104
+ const query = await (0, _RestQuery.default)({
105
+ method: _RestQuery.default.Method.get,
106
+ config,
107
+ auth: master(config),
108
+ runBeforeFind: false,
109
+ className: '_Session',
110
+ restWhere: {
111
+ sessionToken
112
+ },
113
+ restOptions: {
114
+ limit: 1
115
+ }
116
+ });
104
117
  const {
105
118
  results
106
- } = await new _RestQuery.default(config, master(config), '_Session', {
107
- sessionToken
108
- }, {
109
- limit: 1
110
- }).execute();
119
+ } = await query.execute();
111
120
  session = results[0];
112
121
  }
113
122
  const lastUpdated = new Date((_session = session) === null || _session === void 0 ? void 0 : _session.updatedAt);
@@ -162,9 +171,17 @@ const getAuthForSessionToken = async function ({
162
171
  include: 'user'
163
172
  };
164
173
  const RestQuery = require('./RestQuery');
165
- const query = new RestQuery(config, master(config), '_Session', {
166
- sessionToken
167
- }, restOptions);
174
+ const query = await RestQuery({
175
+ method: RestQuery.Method.get,
176
+ config,
177
+ runBeforeFind: false,
178
+ auth: master(config),
179
+ className: '_Session',
180
+ restWhere: {
181
+ sessionToken
182
+ },
183
+ restOptions
184
+ });
168
185
  results = (await query.execute()).results;
169
186
  } else {
170
187
  results = (await new Parse.Query(Parse.Session).limit(1).include('user').equalTo('sessionToken', sessionToken).find({
@@ -201,7 +218,7 @@ const getAuthForSessionToken = async function ({
201
218
  user: userObject
202
219
  });
203
220
  };
204
- var getAuthForLegacySessionToken = function ({
221
+ var getAuthForLegacySessionToken = async function ({
205
222
  config,
206
223
  sessionToken,
207
224
  installationId
@@ -210,9 +227,17 @@ var getAuthForLegacySessionToken = function ({
210
227
  limit: 1
211
228
  };
212
229
  const RestQuery = require('./RestQuery');
213
- var query = new RestQuery(config, master(config), '_User', {
214
- sessionToken
215
- }, restOptions);
230
+ var query = await RestQuery({
231
+ method: RestQuery.Method.get,
232
+ config,
233
+ runBeforeFind: false,
234
+ auth: master(config),
235
+ className: '_User',
236
+ restWhere: {
237
+ _session_token: sessionToken
238
+ },
239
+ restOptions
240
+ });
216
241
  return query.execute().then(response => {
217
242
  var results = response.results;
218
243
  if (results.length !== 1) {
@@ -256,7 +281,15 @@ Auth.prototype.getRolesForUser = async function () {
256
281
  }
257
282
  };
258
283
  const RestQuery = require('./RestQuery');
259
- await new RestQuery(this.config, master(this.config), '_Role', restWhere, {}).each(result => results.push(result));
284
+ const query = await RestQuery({
285
+ method: RestQuery.Method.find,
286
+ runBeforeFind: false,
287
+ config: this.config,
288
+ auth: master(this.config),
289
+ className: '_Role',
290
+ restWhere
291
+ });
292
+ await query.each(result => results.push(result));
260
293
  } else {
261
294
  await new Parse.Query(Parse.Role).equalTo('users', this.user).each(result => results.push(result.toJSON()), {
262
295
  useMasterKey: true
@@ -344,7 +377,15 @@ Auth.prototype.getRolesByIds = async function (ins) {
344
377
  }
345
378
  };
346
379
  const RestQuery = require('./RestQuery');
347
- await new RestQuery(this.config, master(this.config), '_Role', restWhere, {}).each(result => results.push(result));
380
+ const query = await RestQuery({
381
+ method: RestQuery.Method.find,
382
+ config: this.config,
383
+ runBeforeFind: false,
384
+ auth: master(this.config),
385
+ className: '_Role',
386
+ restWhere
387
+ });
388
+ await query.each(result => results.push(result));
348
389
  }
349
390
  return results;
350
391
  };
@@ -560,4 +601,4 @@ module.exports = {
560
601
  checkIfUserHasProvidedConfiguredProvidersForLogin,
561
602
  handleAuthDataValidation
562
603
  };
563
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJBdXRoIiwiY29uZmlnIiwiY2FjaGVDb250cm9sbGVyIiwidW5kZWZpbmVkIiwiaXNNYXN0ZXIiLCJpc01haW50ZW5hbmNlIiwiaXNSZWFkT25seSIsInVzZXIiLCJpbnN0YWxsYXRpb25JZCIsInVzZXJSb2xlcyIsImZldGNoZWRSb2xlcyIsInJvbGVQcm9taXNlIiwicHJvdG90eXBlIiwiaXNVbmF1dGhlbnRpY2F0ZWQiLCJtYXN0ZXIiLCJtYWludGVuYW5jZSIsInJlYWRPbmx5Iiwibm9ib2R5IiwidGhyb3R0bGUiLCJyZW5ld1Nlc3Npb25JZk5lZWRlZCIsInNlc3Npb24iLCJzZXNzaW9uVG9rZW4iLCJleHRlbmRTZXNzaW9uT25Vc2UiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwicmVzdWx0cyIsIlJlc3RRdWVyeSIsImxpbWl0IiwiZXhlY3V0ZSIsImxhc3RVcGRhdGVkIiwiRGF0ZSIsInVwZGF0ZWRBdCIsInllc3RlcmRheSIsInNldERhdGUiLCJnZXREYXRlIiwiZXhwaXJlc0F0IiwiZ2VuZXJhdGVTZXNzaW9uRXhwaXJlc0F0IiwiUmVzdFdyaXRlIiwib2JqZWN0SWQiLCJfZW5jb2RlIiwiZSIsImNvZGUiLCJFcnJvciIsIk9CSkVDVF9OT1RfRk9VTkQiLCJsb2dnZXIiLCJlcnJvciIsImdldEF1dGhGb3JTZXNzaW9uVG9rZW4iLCJ1c2VySlNPTiIsImdldCIsImNhY2hlZFVzZXIiLCJPYmplY3QiLCJmcm9tSlNPTiIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVzdE9wdGlvbnMiLCJpbmNsdWRlIiwicXVlcnkiLCJRdWVyeSIsIlNlc3Npb24iLCJlcXVhbFRvIiwiZmluZCIsInVzZU1hc3RlcktleSIsIm1hcCIsIm9iaiIsInRvSlNPTiIsImxlbmd0aCIsIklOVkFMSURfU0VTU0lPTl9UT0tFTiIsIm5vdyIsImlzbyIsInBhc3N3b3JkIiwicHV0IiwidXNlck9iamVjdCIsImdldEF1dGhGb3JMZWdhY3lTZXNzaW9uVG9rZW4iLCJ0aGVuIiwicmVzcG9uc2UiLCJjbGFzc05hbWUiLCJnZXRVc2VyUm9sZXMiLCJfbG9hZFJvbGVzIiwiZ2V0Um9sZXNGb3JVc2VyIiwicmVzdFdoZXJlIiwidXNlcnMiLCJfX3R5cGUiLCJpZCIsImVhY2giLCJyZXN1bHQiLCJwdXNoIiwiUm9sZSIsImNhY2hlZFJvbGVzIiwicm9sZSIsImNhY2hlUm9sZXMiLCJyb2xlc01hcCIsInJlZHVjZSIsIm0iLCJyIiwibmFtZXMiLCJuYW1lIiwiaWRzIiwicm9sZU5hbWVzIiwiX2dldEFsbFJvbGVzTmFtZXNGb3JSb2xlSWRzIiwiQXJyYXkiLCJjbGVhclJvbGVDYWNoZSIsImRlbCIsImdldFJvbGVzQnlJZHMiLCJpbnMiLCJjb250YWluZWRJbiIsInJvbGVzIiwiJGluIiwicm9sZUlEcyIsInF1ZXJpZWRSb2xlcyIsImZpbHRlciIsInJvbGVJRCIsIndhc1F1ZXJpZWQiLCJTZXQiLCJyZXN1bHRNYXAiLCJtZW1vIiwiY29uY2F0IiwiZmluZFVzZXJzV2l0aEF1dGhEYXRhIiwiYXV0aERhdGEiLCJwcm92aWRlcnMiLCJrZXlzIiwicHJvdmlkZXIiLCJxdWVyeUtleSIsInEiLCJkYXRhYmFzZSIsIiRvciIsImhhc011dGF0ZWRBdXRoRGF0YSIsInVzZXJBdXRoRGF0YSIsIm11dGF0ZWRBdXRoRGF0YSIsImZvckVhY2giLCJwcm92aWRlckRhdGEiLCJ1c2VyUHJvdmlkZXJBdXRoRGF0YSIsImlzRGVlcFN0cmljdEVxdWFsIiwiY2hlY2tJZlVzZXJIYXNQcm92aWRlZENvbmZpZ3VyZWRQcm92aWRlcnNGb3JMb2dpbiIsInJlcSIsInNhdmVkVXNlclByb3ZpZGVycyIsImFkYXB0ZXIiLCJhdXRoRGF0YU1hbmFnZXIiLCJnZXRWYWxpZGF0b3JGb3JQcm92aWRlciIsImhhc1Byb3ZpZGVkQVNvbG9Qcm92aWRlciIsInNvbWUiLCJwb2xpY3kiLCJhZGRpdGlvblByb3ZpZGVyc05vdEZvdW5kIiwiaGFzUHJvdmlkZWRBdExlYXN0T25lQWRkaXRpb25hbFByb3ZpZGVyIiwicmVxdWVzdE9iamVjdCIsImlwIiwiYXV0aCIsImNhbGwiLCJPVEhFUl9DQVVTRSIsImpvaW4iLCJoYW5kbGVBdXRoRGF0YVZhbGlkYXRpb24iLCJmb3VuZFVzZXIiLCJVc2VyIiwiZ2V0VXNlcklkIiwiZmV0Y2giLCJ1cGRhdGVkT2JqZWN0IiwiYnVpbGRQYXJzZU9iamVjdHMiLCJnZXRSZXF1ZXN0T2JqZWN0IiwiYWNjIiwiYXV0aERhdGFSZXNwb25zZSIsImF1dGhLZXlzIiwic29ydCIsIm1ldGhvZCIsInZhbGlkYXRvciIsImF1dGhQcm92aWRlciIsImVuYWJsZWQiLCJEZXByZWNhdG9yIiwibG9nUnVudGltZURlcHJlY2F0aW9uIiwidXNhZ2UiLCJzb2x1dGlvbiIsIlVOU1VQUE9SVEVEX1NFUlZJQ0UiLCJ2YWxpZGF0aW9uUmVzdWx0IiwidHJpZ2dlck5hbWUiLCJkb05vdFNhdmUiLCJzYXZlIiwiZXJyIiwicmVzb2x2ZUVycm9yIiwiU0NSSVBUX0ZBSUxFRCIsIm1lc3NhZ2UiLCJ1c2VyU3RyaW5nIiwiZGF0YSIsIkpTT04iLCJzdHJpbmdpZnkiLCJhdXRoZW50aWNhdGlvblN0ZXAiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL0F1dGguanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJyk7XG5pbXBvcnQgeyBpc0RlZXBTdHJpY3RFcXVhbCB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHsgZ2V0UmVxdWVzdE9iamVjdCwgcmVzb2x2ZUVycm9yIH0gZnJvbSAnLi90cmlnZ2Vycyc7XG5pbXBvcnQgRGVwcmVjYXRvciBmcm9tICcuL0RlcHJlY2F0b3IvRGVwcmVjYXRvcic7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgUmVzdFF1ZXJ5IGZyb20gJy4vUmVzdFF1ZXJ5JztcbmltcG9ydCBSZXN0V3JpdGUgZnJvbSAnLi9SZXN0V3JpdGUnO1xuXG4vLyBBbiBBdXRoIG9iamVjdCB0ZWxscyB5b3Ugd2hvIGlzIHJlcXVlc3Rpbmcgc29tZXRoaW5nIGFuZCB3aGV0aGVyXG4vLyB0aGUgbWFzdGVyIGtleSB3YXMgdXNlZC5cbi8vIHVzZXJPYmplY3QgaXMgYSBQYXJzZS5Vc2VyIGFuZCBjYW4gYmUgbnVsbCBpZiB0aGVyZSdzIG5vIHVzZXIuXG5mdW5jdGlvbiBBdXRoKHtcbiAgY29uZmlnLFxuICBjYWNoZUNvbnRyb2xsZXIgPSB1bmRlZmluZWQsXG4gIGlzTWFzdGVyID0gZmFsc2UsXG4gIGlzTWFpbnRlbmFuY2UgPSBmYWxzZSxcbiAgaXNSZWFkT25seSA9IGZhbHNlLFxuICB1c2VyLFxuICBpbnN0YWxsYXRpb25JZCxcbn0pIHtcbiAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gIHRoaXMuY2FjaGVDb250cm9sbGVyID0gY2FjaGVDb250cm9sbGVyIHx8IChjb25maWcgJiYgY29uZmlnLmNhY2hlQ29udHJvbGxlcik7XG4gIHRoaXMuaW5zdGFsbGF0aW9uSWQgPSBpbnN0YWxsYXRpb25JZDtcbiAgdGhpcy5pc01hc3RlciA9IGlzTWFzdGVyO1xuICB0aGlzLmlzTWFpbnRlbmFuY2UgPSBpc01haW50ZW5hbmNlO1xuICB0aGlzLnVzZXIgPSB1c2VyO1xuICB0aGlzLmlzUmVhZE9ubHkgPSBpc1JlYWRPbmx5O1xuXG4gIC8vIEFzc3VtaW5nIGEgdXNlcnMgcm9sZXMgd29uJ3QgY2hhbmdlIGR1cmluZyBhIHNpbmdsZSByZXF1ZXN0LCB3ZSdsbFxuICAvLyBvbmx5IGxvYWQgdGhlbSBvbmNlLlxuICB0aGlzLnVzZXJSb2xlcyA9IFtdO1xuICB0aGlzLmZldGNoZWRSb2xlcyA9IGZhbHNlO1xuICB0aGlzLnJvbGVQcm9taXNlID0gbnVsbDtcbn1cblxuLy8gV2hldGhlciB0aGlzIGF1dGggY291bGQgcG9zc2libHkgbW9kaWZ5IHRoZSBnaXZlbiB1c2VyIGlkLlxuLy8gSXQgc3RpbGwgY291bGQgYmUgZm9yYmlkZGVuIHZpYSBBQ0xzIGV2ZW4gaWYgdGhpcyByZXR1cm5zIHRydWUuXG5BdXRoLnByb3RvdHlwZS5pc1VuYXV0aGVudGljYXRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuaXNNYXN0ZXIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHRoaXMuaXNNYWludGVuYW5jZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodGhpcy51c2VyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufTtcblxuLy8gQSBoZWxwZXIgdG8gZ2V0IGEgbWFzdGVyLWxldmVsIEF1dGggb2JqZWN0XG5mdW5jdGlvbiBtYXN0ZXIoY29uZmlnKSB7XG4gIHJldHVybiBuZXcgQXV0aCh7IGNvbmZpZywgaXNNYXN0ZXI6IHRydWUgfSk7XG59XG5cbi8vIEEgaGVscGVyIHRvIGdldCBhIG1haW50ZW5hbmNlLWxldmVsIEF1dGggb2JqZWN0XG5mdW5jdGlvbiBtYWludGVuYW5jZShjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBBdXRoKHsgY29uZmlnLCBpc01haW50ZW5hbmNlOiB0cnVlIH0pO1xufVxuXG4vLyBBIGhlbHBlciB0byBnZXQgYSBtYXN0ZXItbGV2ZWwgQXV0aCBvYmplY3RcbmZ1bmN0aW9uIHJlYWRPbmx5KGNvbmZpZykge1xuICByZXR1cm4gbmV3IEF1dGgoeyBjb25maWcsIGlzTWFzdGVyOiB0cnVlLCBpc1JlYWRPbmx5OiB0cnVlIH0pO1xufVxuXG4vLyBBIGhlbHBlciB0byBnZXQgYSBub2JvZHktbGV2ZWwgQXV0aCBvYmplY3RcbmZ1bmN0aW9uIG5vYm9keShjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBBdXRoKHsgY29uZmlnLCBpc01hc3RlcjogZmFsc2UgfSk7XG59XG5cbmNvbnN0IHRocm90dGxlID0ge307XG5jb25zdCByZW5ld1Nlc3Npb25JZk5lZWRlZCA9IGFzeW5jICh7IGNvbmZpZywgc2Vzc2lvbiwgc2Vzc2lvblRva2VuIH0pID0+IHtcbiAgaWYgKCFjb25maWc/LmV4dGVuZFNlc3Npb25PblVzZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjbGVhclRpbWVvdXQodGhyb3R0bGVbc2Vzc2lvblRva2VuXSk7XG4gIHRocm90dGxlW3Nlc3Npb25Ub2tlbl0gPSBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFzZXNzaW9uKSB7XG4gICAgICAgIGNvbnN0IHsgcmVzdWx0cyB9ID0gYXdhaXQgbmV3IFJlc3RRdWVyeShcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgbWFzdGVyKGNvbmZpZyksXG4gICAgICAgICAgJ19TZXNzaW9uJyxcbiAgICAgICAgICB7IHNlc3Npb25Ub2tlbiB9LFxuICAgICAgICAgIHsgbGltaXQ6IDEgfVxuICAgICAgICApLmV4ZWN1dGUoKTtcbiAgICAgICAgc2Vzc2lvbiA9IHJlc3VsdHNbMF07XG4gICAgICB9XG4gICAgICBjb25zdCBsYXN0VXBkYXRlZCA9IG5ldyBEYXRlKHNlc3Npb24/LnVwZGF0ZWRBdCk7XG4gICAgICBjb25zdCB5ZXN0ZXJkYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgeWVzdGVyZGF5LnNldERhdGUoeWVzdGVyZGF5LmdldERhdGUoKSAtIDEpO1xuICAgICAgaWYgKGxhc3RVcGRhdGVkID4geWVzdGVyZGF5IHx8ICFzZXNzaW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV4cGlyZXNBdCA9IGNvbmZpZy5nZW5lcmF0ZVNlc3Npb25FeHBpcmVzQXQoKTtcbiAgICAgIGF3YWl0IG5ldyBSZXN0V3JpdGUoXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgbWFzdGVyKGNvbmZpZyksXG4gICAgICAgICdfU2Vzc2lvbicsXG4gICAgICAgIHsgb2JqZWN0SWQ6IHNlc3Npb24ub2JqZWN0SWQgfSxcbiAgICAgICAgeyBleHBpcmVzQXQ6IFBhcnNlLl9lbmNvZGUoZXhwaXJlc0F0KSB9XG4gICAgICApLmV4ZWN1dGUoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZT8uY29kZSAhPT0gUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0NvdWxkIG5vdCB1cGRhdGUgc2Vzc2lvbiBleHBpcnk6ICcsIGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgNTAwKTtcbn07XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gQXV0aCBvYmplY3RcbmNvbnN0IGdldEF1dGhGb3JTZXNzaW9uVG9rZW4gPSBhc3luYyBmdW5jdGlvbiAoe1xuICBjb25maWcsXG4gIGNhY2hlQ29udHJvbGxlcixcbiAgc2Vzc2lvblRva2VuLFxuICBpbnN0YWxsYXRpb25JZCxcbn0pIHtcbiAgY2FjaGVDb250cm9sbGVyID0gY2FjaGVDb250cm9sbGVyIHx8IChjb25maWcgJiYgY29uZmlnLmNhY2hlQ29udHJvbGxlcik7XG4gIGlmIChjYWNoZUNvbnRyb2xsZXIpIHtcbiAgICBjb25zdCB1c2VySlNPTiA9IGF3YWl0IGNhY2hlQ29udHJvbGxlci51c2VyLmdldChzZXNzaW9uVG9rZW4pO1xuICAgIGlmICh1c2VySlNPTikge1xuICAgICAgY29uc3QgY2FjaGVkVXNlciA9IFBhcnNlLk9iamVjdC5mcm9tSlNPTih1c2VySlNPTik7XG4gICAgICByZW5ld1Nlc3Npb25JZk5lZWRlZCh7IGNvbmZpZywgc2Vzc2lvblRva2VuIH0pO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgbmV3IEF1dGgoe1xuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBjYWNoZUNvbnRyb2xsZXIsXG4gICAgICAgICAgaXNNYXN0ZXI6IGZhbHNlLFxuICAgICAgICAgIGluc3RhbGxhdGlvbklkLFxuICAgICAgICAgIHVzZXI6IGNhY2hlZFVzZXIsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGxldCByZXN1bHRzO1xuICBpZiAoY29uZmlnKSB7XG4gICAgY29uc3QgcmVzdE9wdGlvbnMgPSB7XG4gICAgICBsaW1pdDogMSxcbiAgICAgIGluY2x1ZGU6ICd1c2VyJyxcbiAgICB9O1xuICAgIGNvbnN0IFJlc3RRdWVyeSA9IHJlcXVpcmUoJy4vUmVzdFF1ZXJ5Jyk7XG4gICAgY29uc3QgcXVlcnkgPSBuZXcgUmVzdFF1ZXJ5KGNvbmZpZywgbWFzdGVyKGNvbmZpZyksICdfU2Vzc2lvbicsIHsgc2Vzc2lvblRva2VuIH0sIHJlc3RPcHRpb25zKTtcbiAgICByZXN1bHRzID0gKGF3YWl0IHF1ZXJ5LmV4ZWN1dGUoKSkucmVzdWx0cztcbiAgfSBlbHNlIHtcbiAgICByZXN1bHRzID0gKFxuICAgICAgYXdhaXQgbmV3IFBhcnNlLlF1ZXJ5KFBhcnNlLlNlc3Npb24pXG4gICAgICAgIC5saW1pdCgxKVxuICAgICAgICAuaW5jbHVkZSgndXNlcicpXG4gICAgICAgIC5lcXVhbFRvKCdzZXNzaW9uVG9rZW4nLCBzZXNzaW9uVG9rZW4pXG4gICAgICAgIC5maW5kKHsgdXNlTWFzdGVyS2V5OiB0cnVlIH0pXG4gICAgKS5tYXAob2JqID0+IG9iai50b0pTT04oKSk7XG4gIH1cblxuICBpZiAocmVzdWx0cy5sZW5ndGggIT09IDEgfHwgIXJlc3VsdHNbMF1bJ3VzZXInXSkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1NFU1NJT05fVE9LRU4sICdJbnZhbGlkIHNlc3Npb24gdG9rZW4nKTtcbiAgfVxuICBjb25zdCBzZXNzaW9uID0gcmVzdWx0c1swXTtcbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKSxcbiAgICBleHBpcmVzQXQgPSBzZXNzaW9uLmV4cGlyZXNBdCA/IG5ldyBEYXRlKHNlc3Npb24uZXhwaXJlc0F0LmlzbykgOiB1bmRlZmluZWQ7XG4gIGlmIChleHBpcmVzQXQgPCBub3cpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9TRVNTSU9OX1RPS0VOLCAnU2Vzc2lvbiB0b2tlbiBpcyBleHBpcmVkLicpO1xuICB9XG4gIGNvbnN0IG9iaiA9IHNlc3Npb24udXNlcjtcbiAgZGVsZXRlIG9iai5wYXNzd29yZDtcbiAgb2JqWydjbGFzc05hbWUnXSA9ICdfVXNlcic7XG4gIG9ialsnc2Vzc2lvblRva2VuJ10gPSBzZXNzaW9uVG9rZW47XG4gIGlmIChjYWNoZUNvbnRyb2xsZXIpIHtcbiAgICBjYWNoZUNvbnRyb2xsZXIudXNlci5wdXQoc2Vzc2lvblRva2VuLCBvYmopO1xuICB9XG4gIHJlbmV3U2Vzc2lvbklmTmVlZGVkKHsgY29uZmlnLCBzZXNzaW9uLCBzZXNzaW9uVG9rZW4gfSk7XG4gIGNvbnN0IHVzZXJPYmplY3QgPSBQYXJzZS5PYmplY3QuZnJvbUpTT04ob2JqKTtcbiAgcmV0dXJuIG5ldyBBdXRoKHtcbiAgICBjb25maWcsXG4gICAgY2FjaGVDb250cm9sbGVyLFxuICAgIGlzTWFzdGVyOiBmYWxzZSxcbiAgICBpbnN0YWxsYXRpb25JZCxcbiAgICB1c2VyOiB1c2VyT2JqZWN0LFxuICB9KTtcbn07XG5cbnZhciBnZXRBdXRoRm9yTGVnYWN5U2Vzc2lvblRva2VuID0gZnVuY3Rpb24gKHsgY29uZmlnLCBzZXNzaW9uVG9rZW4sIGluc3RhbGxhdGlvbklkIH0pIHtcbiAgdmFyIHJlc3RPcHRpb25zID0ge1xuICAgIGxpbWl0OiAxLFxuICB9O1xuICBjb25zdCBSZXN0UXVlcnkgPSByZXF1aXJlKCcuL1Jlc3RRdWVyeScpO1xuICB2YXIgcXVlcnkgPSBuZXcgUmVzdFF1ZXJ5KGNvbmZpZywgbWFzdGVyKGNvbmZpZyksICdfVXNlcicsIHsgc2Vzc2lvblRva2VuIH0sIHJlc3RPcHRpb25zKTtcbiAgcmV0dXJuIHF1ZXJ5LmV4ZWN1dGUoKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICB2YXIgcmVzdWx0cyA9IHJlc3BvbnNlLnJlc3VsdHM7XG4gICAgaWYgKHJlc3VsdHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9TRVNTSU9OX1RPS0VOLCAnaW52YWxpZCBsZWdhY3kgc2Vzc2lvbiB0b2tlbicpO1xuICAgIH1cbiAgICBjb25zdCBvYmogPSByZXN1bHRzWzBdO1xuICAgIG9iai5jbGFzc05hbWUgPSAnX1VzZXInO1xuICAgIGNvbnN0IHVzZXJPYmplY3QgPSBQYXJzZS5PYmplY3QuZnJvbUpTT04ob2JqKTtcbiAgICByZXR1cm4gbmV3IEF1dGgoe1xuICAgICAgY29uZmlnLFxuICAgICAgaXNNYXN0ZXI6IGZhbHNlLFxuICAgICAgaW5zdGFsbGF0aW9uSWQsXG4gICAgICB1c2VyOiB1c2VyT2JqZWN0LFxuICAgIH0pO1xuICB9KTtcbn07XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgb2Ygcm9sZSBuYW1lc1xuQXV0aC5wcm90b3R5cGUuZ2V0VXNlclJvbGVzID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5pc01hc3RlciB8fCB0aGlzLmlzTWFpbnRlbmFuY2UgfHwgIXRoaXMudXNlcikge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9XG4gIGlmICh0aGlzLmZldGNoZWRSb2xlcykge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy51c2VyUm9sZXMpO1xuICB9XG4gIGlmICh0aGlzLnJvbGVQcm9taXNlKSB7XG4gICAgcmV0dXJuIHRoaXMucm9sZVByb21pc2U7XG4gIH1cbiAgdGhpcy5yb2xlUHJvbWlzZSA9IHRoaXMuX2xvYWRSb2xlcygpO1xuICByZXR1cm4gdGhpcy5yb2xlUHJvbWlzZTtcbn07XG5cbkF1dGgucHJvdG90eXBlLmdldFJvbGVzRm9yVXNlciA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgLy9TdGFjayBhbGwgUGFyc2UuUm9sZVxuICBjb25zdCByZXN1bHRzID0gW107XG4gIGlmICh0aGlzLmNvbmZpZykge1xuICAgIGNvbnN0IHJlc3RXaGVyZSA9IHtcbiAgICAgIHVzZXJzOiB7XG4gICAgICAgIF9fdHlwZTogJ1BvaW50ZXInLFxuICAgICAgICBjbGFzc05hbWU6ICdfVXNlcicsXG4gICAgICAgIG9iamVjdElkOiB0aGlzLnVzZXIuaWQsXG4gICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgUmVzdFF1ZXJ5ID0gcmVxdWlyZSgnLi9SZXN0UXVlcnknKTtcbiAgICBhd2FpdCBuZXcgUmVzdFF1ZXJ5KHRoaXMuY29uZmlnLCBtYXN0ZXIodGhpcy5jb25maWcpLCAnX1JvbGUnLCByZXN0V2hlcmUsIHt9KS5lYWNoKHJlc3VsdCA9PlxuICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdClcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IG5ldyBQYXJzZS5RdWVyeShQYXJzZS5Sb2xlKVxuICAgICAgLmVxdWFsVG8oJ3VzZXJzJywgdGhpcy51c2VyKVxuICAgICAgLmVhY2gocmVzdWx0ID0+IHJlc3VsdHMucHVzaChyZXN1bHQudG9KU09OKCkpLCB7IHVzZU1hc3RlcktleTogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0cztcbn07XG5cbi8vIEl0ZXJhdGVzIHRocm91Z2ggdGhlIHJvbGUgdHJlZSBhbmQgY29tcGlsZXMgYSB1c2VyJ3Mgcm9sZXNcbkF1dGgucHJvdG90eXBlLl9sb2FkUm9sZXMgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmNhY2hlQ29udHJvbGxlcikge1xuICAgIGNvbnN0IGNhY2hlZFJvbGVzID0gYXdhaXQgdGhpcy5jYWNoZUNvbnRyb2xsZXIucm9sZS5nZXQodGhpcy51c2VyLmlkKTtcbiAgICBpZiAoY2FjaGVkUm9sZXMgIT0gbnVsbCkge1xuICAgICAgdGhpcy5mZXRjaGVkUm9sZXMgPSB0cnVlO1xuICAgICAgdGhpcy51c2VyUm9sZXMgPSBjYWNoZWRSb2xlcztcbiAgICAgIHJldHVybiBjYWNoZWRSb2xlcztcbiAgICB9XG4gIH1cblxuICAvLyBGaXJzdCBnZXQgdGhlIHJvbGUgaWRzIHRoaXMgdXNlciBpcyBkaXJlY3RseSBhIG1lbWJlciBvZlxuICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5nZXRSb2xlc0ZvclVzZXIoKTtcbiAgaWYgKCFyZXN1bHRzLmxlbmd0aCkge1xuICAgIHRoaXMudXNlclJvbGVzID0gW107XG4gICAgdGhpcy5mZXRjaGVkUm9sZXMgPSB0cnVlO1xuICAgIHRoaXMucm9sZVByb21pc2UgPSBudWxsO1xuXG4gICAgdGhpcy5jYWNoZVJvbGVzKCk7XG4gICAgcmV0dXJuIHRoaXMudXNlclJvbGVzO1xuICB9XG5cbiAgY29uc3Qgcm9sZXNNYXAgPSByZXN1bHRzLnJlZHVjZShcbiAgICAobSwgcikgPT4ge1xuICAgICAgbS5uYW1lcy5wdXNoKHIubmFtZSk7XG4gICAgICBtLmlkcy5wdXNoKHIub2JqZWN0SWQpO1xuICAgICAgcmV0dXJuIG07XG4gICAgfSxcbiAgICB7IGlkczogW10sIG5hbWVzOiBbXSB9XG4gICk7XG5cbiAgLy8gcnVuIHRoZSByZWN1cnNpdmUgZmluZGluZ1xuICBjb25zdCByb2xlTmFtZXMgPSBhd2FpdCB0aGlzLl9nZXRBbGxSb2xlc05hbWVzRm9yUm9sZUlkcyhyb2xlc01hcC5pZHMsIHJvbGVzTWFwLm5hbWVzKTtcbiAgdGhpcy51c2VyUm9sZXMgPSByb2xlTmFtZXMubWFwKHIgPT4ge1xuICAgIHJldHVybiAncm9sZTonICsgcjtcbiAgfSk7XG4gIHRoaXMuZmV0Y2hlZFJvbGVzID0gdHJ1ZTtcbiAgdGhpcy5yb2xlUHJvbWlzZSA9IG51bGw7XG4gIHRoaXMuY2FjaGVSb2xlcygpO1xuICByZXR1cm4gdGhpcy51c2VyUm9sZXM7XG59O1xuXG5BdXRoLnByb3RvdHlwZS5jYWNoZVJvbGVzID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMuY2FjaGVDb250cm9sbGVyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRoaXMuY2FjaGVDb250cm9sbGVyLnJvbGUucHV0KHRoaXMudXNlci5pZCwgQXJyYXkoLi4udGhpcy51c2VyUm9sZXMpKTtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG5BdXRoLnByb3RvdHlwZS5jbGVhclJvbGVDYWNoZSA9IGZ1bmN0aW9uIChzZXNzaW9uVG9rZW4pIHtcbiAgaWYgKCF0aGlzLmNhY2hlQ29udHJvbGxlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB0aGlzLmNhY2hlQ29udHJvbGxlci5yb2xlLmRlbCh0aGlzLnVzZXIuaWQpO1xuICB0aGlzLmNhY2hlQ29udHJvbGxlci51c2VyLmRlbChzZXNzaW9uVG9rZW4pO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkF1dGgucHJvdG90eXBlLmdldFJvbGVzQnlJZHMgPSBhc3luYyBmdW5jdGlvbiAoaW5zKSB7XG4gIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgLy8gQnVpbGQgYW4gT1IgcXVlcnkgYWNyb3NzIGFsbCBwYXJlbnRSb2xlc1xuICBpZiAoIXRoaXMuY29uZmlnKSB7XG4gICAgYXdhaXQgbmV3IFBhcnNlLlF1ZXJ5KFBhcnNlLlJvbGUpXG4gICAgICAuY29udGFpbmVkSW4oXG4gICAgICAgICdyb2xlcycsXG4gICAgICAgIGlucy5tYXAoaWQgPT4ge1xuICAgICAgICAgIGNvbnN0IHJvbGUgPSBuZXcgUGFyc2UuT2JqZWN0KFBhcnNlLlJvbGUpO1xuICAgICAgICAgIHJvbGUuaWQgPSBpZDtcbiAgICAgICAgICByZXR1cm4gcm9sZTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5lYWNoKHJlc3VsdCA9PiByZXN1bHRzLnB1c2gocmVzdWx0LnRvSlNPTigpKSwgeyB1c2VNYXN0ZXJLZXk6IHRydWUgfSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgcm9sZXMgPSBpbnMubWFwKGlkID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIF9fdHlwZTogJ1BvaW50ZXInLFxuICAgICAgICBjbGFzc05hbWU6ICdfUm9sZScsXG4gICAgICAgIG9iamVjdElkOiBpZCxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgY29uc3QgcmVzdFdoZXJlID0geyByb2xlczogeyAkaW46IHJvbGVzIH0gfTtcbiAgICBjb25zdCBSZXN0UXVlcnkgPSByZXF1aXJlKCcuL1Jlc3RRdWVyeScpO1xuICAgIGF3YWl0IG5ldyBSZXN0UXVlcnkodGhpcy5jb25maWcsIG1hc3Rlcih0aGlzLmNvbmZpZyksICdfUm9sZScsIHJlc3RXaGVyZSwge30pLmVhY2gocmVzdWx0ID0+XG4gICAgICByZXN1bHRzLnB1c2gocmVzdWx0KVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vLyBHaXZlbiBhIGxpc3Qgb2Ygcm9sZUlkcywgZmluZCBhbGwgdGhlIHBhcmVudCByb2xlcywgcmV0dXJucyBhIHByb21pc2Ugd2l0aCBhbGwgbmFtZXNcbkF1dGgucHJvdG90eXBlLl9nZXRBbGxSb2xlc05hbWVzRm9yUm9sZUlkcyA9IGZ1bmN0aW9uIChyb2xlSURzLCBuYW1lcyA9IFtdLCBxdWVyaWVkUm9sZXMgPSB7fSkge1xuICBjb25zdCBpbnMgPSByb2xlSURzLmZpbHRlcihyb2xlSUQgPT4ge1xuICAgIGNvbnN0IHdhc1F1ZXJpZWQgPSBxdWVyaWVkUm9sZXNbcm9sZUlEXSAhPT0gdHJ1ZTtcbiAgICBxdWVyaWVkUm9sZXNbcm9sZUlEXSA9IHRydWU7XG4gICAgcmV0dXJuIHdhc1F1ZXJpZWQ7XG4gIH0pO1xuXG4gIC8vIGFsbCByb2xlcyBhcmUgYWNjb3VudGVkIGZvciwgcmV0dXJuIHRoZSBuYW1lc1xuICBpZiAoaW5zLmxlbmd0aCA9PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbLi4ubmV3IFNldChuYW1lcyldKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmdldFJvbGVzQnlJZHMoaW5zKVxuICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgLy8gTm90aGluZyBmb3VuZFxuICAgICAgaWYgKCFyZXN1bHRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5hbWVzKTtcbiAgICAgIH1cbiAgICAgIC8vIE1hcCB0aGUgcmVzdWx0cyB3aXRoIGFsbCBJZHMgYW5kIG5hbWVzXG4gICAgICBjb25zdCByZXN1bHRNYXAgPSByZXN1bHRzLnJlZHVjZShcbiAgICAgICAgKG1lbW8sIHJvbGUpID0+IHtcbiAgICAgICAgICBtZW1vLm5hbWVzLnB1c2gocm9sZS5uYW1lKTtcbiAgICAgICAgICBtZW1vLmlkcy5wdXNoKHJvbGUub2JqZWN0SWQpO1xuICAgICAgICAgIHJldHVybiBtZW1vO1xuICAgICAgICB9LFxuICAgICAgICB7IGlkczogW10sIG5hbWVzOiBbXSB9XG4gICAgICApO1xuICAgICAgLy8gc3RvcmUgdGhlIG5ldyBmb3VuZCBuYW1lc1xuICAgICAgbmFtZXMgPSBuYW1lcy5jb25jYXQocmVzdWx0TWFwLm5hbWVzKTtcbiAgICAgIC8vIGZpbmQgdGhlIG5leHQgb25lcywgY2lyY3VsYXIgcm9sZXMgd2lsbCBiZSBjdXRcbiAgICAgIHJldHVybiB0aGlzLl9nZXRBbGxSb2xlc05hbWVzRm9yUm9sZUlkcyhyZXN1bHRNYXAuaWRzLCBuYW1lcywgcXVlcmllZFJvbGVzKTtcbiAgICB9KVxuICAgIC50aGVuKG5hbWVzID0+IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoWy4uLm5ldyBTZXQobmFtZXMpXSk7XG4gICAgfSk7XG59O1xuXG5jb25zdCBmaW5kVXNlcnNXaXRoQXV0aERhdGEgPSAoY29uZmlnLCBhdXRoRGF0YSkgPT4ge1xuICBjb25zdCBwcm92aWRlcnMgPSBPYmplY3Qua2V5cyhhdXRoRGF0YSk7XG4gIGNvbnN0IHF1ZXJ5ID0gcHJvdmlkZXJzXG4gICAgLnJlZHVjZSgobWVtbywgcHJvdmlkZXIpID0+IHtcbiAgICAgIGlmICghYXV0aERhdGFbcHJvdmlkZXJdIHx8IChhdXRoRGF0YSAmJiAhYXV0aERhdGFbcHJvdmlkZXJdLmlkKSkge1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHF1ZXJ5S2V5ID0gYGF1dGhEYXRhLiR7cHJvdmlkZXJ9LmlkYDtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0ge307XG4gICAgICBxdWVyeVtxdWVyeUtleV0gPSBhdXRoRGF0YVtwcm92aWRlcl0uaWQ7XG4gICAgICBtZW1vLnB1c2gocXVlcnkpO1xuICAgICAgcmV0dXJuIG1lbW87XG4gICAgfSwgW10pXG4gICAgLmZpbHRlcihxID0+IHtcbiAgICAgIHJldHVybiB0eXBlb2YgcSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgfSk7XG5cbiAgcmV0dXJuIHF1ZXJ5Lmxlbmd0aCA+IDBcbiAgICA/IGNvbmZpZy5kYXRhYmFzZS5maW5kKCdfVXNlcicsIHsgJG9yOiBxdWVyeSB9LCB7IGxpbWl0OiAyIH0pXG4gICAgOiBQcm9taXNlLnJlc29sdmUoW10pO1xufTtcblxuY29uc3QgaGFzTXV0YXRlZEF1dGhEYXRhID0gKGF1dGhEYXRhLCB1c2VyQXV0aERhdGEpID0+IHtcbiAgaWYgKCF1c2VyQXV0aERhdGEpIHJldHVybiB7IGhhc011dGF0ZWRBdXRoRGF0YTogdHJ1ZSwgbXV0YXRlZEF1dGhEYXRhOiBhdXRoRGF0YSB9O1xuICBjb25zdCBtdXRhdGVkQXV0aERhdGEgPSB7fTtcbiAgT2JqZWN0LmtleXMoYXV0aERhdGEpLmZvckVhY2gocHJvdmlkZXIgPT4ge1xuICAgIC8vIEFub255bW91cyBwcm92aWRlciBpcyBub3QgaGFuZGxlZCB0aGlzIHdheVxuICAgIGlmIChwcm92aWRlciA9PT0gJ2Fub255bW91cycpIHJldHVybjtcbiAgICBjb25zdCBwcm92aWRlckRhdGEgPSBhdXRoRGF0YVtwcm92aWRlcl07XG4gICAgY29uc3QgdXNlclByb3ZpZGVyQXV0aERhdGEgPSB1c2VyQXV0aERhdGFbcHJvdmlkZXJdO1xuICAgIGlmICghaXNEZWVwU3RyaWN0RXF1YWwocHJvdmlkZXJEYXRhLCB1c2VyUHJvdmlkZXJBdXRoRGF0YSkpIHtcbiAgICAgIG11dGF0ZWRBdXRoRGF0YVtwcm92aWRlcl0gPSBwcm92aWRlckRhdGE7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFzTXV0YXRlZEF1dGhEYXRhID0gT2JqZWN0LmtleXMobXV0YXRlZEF1dGhEYXRhKS5sZW5ndGggIT09IDA7XG4gIHJldHVybiB7IGhhc011dGF0ZWRBdXRoRGF0YSwgbXV0YXRlZEF1dGhEYXRhIH07XG59O1xuXG5jb25zdCBjaGVja0lmVXNlckhhc1Byb3ZpZGVkQ29uZmlndXJlZFByb3ZpZGVyc0ZvckxvZ2luID0gKFxuICByZXEgPSB7fSxcbiAgYXV0aERhdGEgPSB7fSxcbiAgdXNlckF1dGhEYXRhID0ge30sXG4gIGNvbmZpZ1xuKSA9PiB7XG4gIGNvbnN0IHNhdmVkVXNlclByb3ZpZGVycyA9IE9iamVjdC5rZXlzKHVzZXJBdXRoRGF0YSkubWFwKHByb3ZpZGVyID0+ICh7XG4gICAgbmFtZTogcHJvdmlkZXIsXG4gICAgYWRhcHRlcjogY29uZmlnLmF1dGhEYXRhTWFuYWdlci5nZXRWYWxpZGF0b3JGb3JQcm92aWRlcihwcm92aWRlcikuYWRhcHRlcixcbiAgfSkpO1xuXG4gIGNvbnN0IGhhc1Byb3ZpZGVkQVNvbG9Qcm92aWRlciA9IHNhdmVkVXNlclByb3ZpZGVycy5zb21lKFxuICAgIHByb3ZpZGVyID0+XG4gICAgICBwcm92aWRlciAmJiBwcm92aWRlci5hZGFwdGVyICYmIHByb3ZpZGVyLmFkYXB0ZXIucG9saWN5ID09PSAnc29sbycgJiYgYXV0aERhdGFbcHJvdmlkZXIubmFtZV1cbiAgKTtcblxuICAvLyBTb2xvIHByb3ZpZGVycyBjYW4gYmUgY29uc2lkZXJlZCBhcyBzYWZlLCBzbyB3ZSBkbyBub3QgaGF2ZSB0byBjaGVjayBpZiB0aGUgdXNlciBuZWVkc1xuICAvLyB0byBwcm92aWRlIGFuIGFkZGl0aW9uYWwgcHJvdmlkZXIgdG8gbG9naW4uIEFuIGF1dGggYWRhcHRlciB3aXRoIFwic29sb1wiIChsaWtlIHdlYmF1dGhuKSBtZWFuc1xuICAvLyBubyBcImFkZGl0aW9uYWxcIiBhdXRoIG5lZWRzIHRvIGJlIHByb3ZpZGVkIHRvIGxvZ2luIChsaWtlIE9UUCwgTUZBKVxuICBpZiAoaGFzUHJvdmlkZWRBU29sb1Byb3ZpZGVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYWRkaXRpb25Qcm92aWRlcnNOb3RGb3VuZCA9IFtdO1xuICBjb25zdCBoYXNQcm92aWRlZEF0TGVhc3RPbmVBZGRpdGlvbmFsUHJvdmlkZXIgPSBzYXZlZFVzZXJQcm92aWRlcnMuc29tZShwcm92aWRlciA9PiB7XG4gICAgbGV0IHBvbGljeSA9IHByb3ZpZGVyLmFkYXB0ZXIucG9saWN5O1xuICAgIGlmICh0eXBlb2YgcG9saWN5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCByZXF1ZXN0T2JqZWN0ID0ge1xuICAgICAgICBpcDogcmVxLmNvbmZpZy5pcCxcbiAgICAgICAgdXNlcjogcmVxLmF1dGgudXNlcixcbiAgICAgICAgbWFzdGVyOiByZXEuYXV0aC5pc01hc3RlcixcbiAgICAgIH07XG4gICAgICBwb2xpY3kgPSBwb2xpY3kuY2FsbChwcm92aWRlci5hZGFwdGVyLCByZXF1ZXN0T2JqZWN0LCB1c2VyQXV0aERhdGFbcHJvdmlkZXIubmFtZV0pO1xuICAgIH1cbiAgICBpZiAocG9saWN5ID09PSAnYWRkaXRpb25hbCcpIHtcbiAgICAgIGlmIChhdXRoRGF0YVtwcm92aWRlci5uYW1lXSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFB1c2ggbWlzc2luZyBwcm92aWRlciBmb3IgZXJyb3IgbWVzc2FnZVxuICAgICAgICBhZGRpdGlvblByb3ZpZGVyc05vdEZvdW5kLnB1c2gocHJvdmlkZXIubmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgaWYgKGhhc1Byb3ZpZGVkQXRMZWFzdE9uZUFkZGl0aW9uYWxQcm92aWRlciB8fCAhYWRkaXRpb25Qcm92aWRlcnNOb3RGb3VuZC5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgUGFyc2UuRXJyb3IuT1RIRVJfQ0FVU0UsXG4gICAgYE1pc3NpbmcgYWRkaXRpb25hbCBhdXRoRGF0YSAke2FkZGl0aW9uUHJvdmlkZXJzTm90Rm91bmQuam9pbignLCcpfWBcbiAgKTtcbn07XG5cbi8vIFZhbGlkYXRlIGVhY2ggYXV0aERhdGEgc3RlcC1ieS1zdGVwIGFuZCByZXR1cm4gdGhlIHByb3ZpZGVyIHJlc3BvbnNlc1xuY29uc3QgaGFuZGxlQXV0aERhdGFWYWxpZGF0aW9uID0gYXN5bmMgKGF1dGhEYXRhLCByZXEsIGZvdW5kVXNlcikgPT4ge1xuICBsZXQgdXNlcjtcbiAgaWYgKGZvdW5kVXNlcikge1xuICAgIHVzZXIgPSBQYXJzZS5Vc2VyLmZyb21KU09OKHsgY2xhc3NOYW1lOiAnX1VzZXInLCAuLi5mb3VuZFVzZXIgfSk7XG4gICAgLy8gRmluZCB1c2VyIGJ5IHNlc3Npb24gYW5kIGN1cnJlbnQgb2JqZWN0SWQ7IG9ubHkgcGFzcyB1c2VyIGlmIGl0J3MgdGhlIGN1cnJlbnQgdXNlciBvciBtYXN0ZXIga2V5IGlzIHByb3ZpZGVkXG4gIH0gZWxzZSBpZiAoXG4gICAgKHJlcS5hdXRoICYmXG4gICAgICByZXEuYXV0aC51c2VyICYmXG4gICAgICB0eXBlb2YgcmVxLmdldFVzZXJJZCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgcmVxLmdldFVzZXJJZCgpID09PSByZXEuYXV0aC51c2VyLmlkKSB8fFxuICAgIChyZXEuYXV0aCAmJiByZXEuYXV0aC5pc01hc3RlciAmJiB0eXBlb2YgcmVxLmdldFVzZXJJZCA9PT0gJ2Z1bmN0aW9uJyAmJiByZXEuZ2V0VXNlcklkKCkpXG4gICkge1xuICAgIHVzZXIgPSBuZXcgUGFyc2UuVXNlcigpO1xuICAgIHVzZXIuaWQgPSByZXEuYXV0aC5pc01hc3RlciA/IHJlcS5nZXRVc2VySWQoKSA6IHJlcS5hdXRoLnVzZXIuaWQ7XG4gICAgYXdhaXQgdXNlci5mZXRjaCh7IHVzZU1hc3RlcktleTogdHJ1ZSB9KTtcbiAgfVxuXG4gIGNvbnN0IHsgdXBkYXRlZE9iamVjdCB9ID0gcmVxLmJ1aWxkUGFyc2VPYmplY3RzKCk7XG4gIGNvbnN0IHJlcXVlc3RPYmplY3QgPSBnZXRSZXF1ZXN0T2JqZWN0KHVuZGVmaW5lZCwgcmVxLmF1dGgsIHVwZGF0ZWRPYmplY3QsIHVzZXIsIHJlcS5jb25maWcpO1xuICAvLyBQZXJmb3JtIHZhbGlkYXRpb24gYXMgc3RlcC1ieS1zdGVwIHBpcGVsaW5lIGZvciBiZXR0ZXIgZXJyb3IgY29uc2lzdGVuY3lcbiAgLy8gYW5kIGFsc28gdG8gYXZvaWQgdG8gdHJpZ2dlciBhIHByb3ZpZGVyIChsaWtlIE9UUCBTTVMpIGlmIGFub3RoZXIgb25lIGZhaWxzXG4gIGNvbnN0IGFjYyA9IHsgYXV0aERhdGE6IHt9LCBhdXRoRGF0YVJlc3BvbnNlOiB7fSB9O1xuICBjb25zdCBhdXRoS2V5cyA9IE9iamVjdC5rZXlzKGF1dGhEYXRhKS5zb3J0KCk7XG4gIGZvciAoY29uc3QgcHJvdmlkZXIgb2YgYXV0aEtleXMpIHtcbiAgICBsZXQgbWV0aG9kID0gJyc7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChhdXRoRGF0YVtwcm92aWRlcl0gPT09IG51bGwpIHtcbiAgICAgICAgYWNjLmF1dGhEYXRhW3Byb3ZpZGVyXSA9IG51bGw7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgeyB2YWxpZGF0b3IgfSA9IHJlcS5jb25maWcuYXV0aERhdGFNYW5hZ2VyLmdldFZhbGlkYXRvckZvclByb3ZpZGVyKHByb3ZpZGVyKTtcbiAgICAgIGNvbnN0IGF1dGhQcm92aWRlciA9IChyZXEuY29uZmlnLmF1dGggfHwge30pW3Byb3ZpZGVyXSB8fCB7fTtcbiAgICAgIGlmIChhdXRoUHJvdmlkZXIuZW5hYmxlZCA9PSBudWxsKSB7XG4gICAgICAgIERlcHJlY2F0b3IubG9nUnVudGltZURlcHJlY2F0aW9uKHtcbiAgICAgICAgICB1c2FnZTogYFVzaW5nIHRoZSBhdXRoZW50aWNhdGlvbiBhZGFwdGVyIFwiJHtwcm92aWRlcn1cIiB3aXRob3V0IGV4cGxpY2l0bHkgZW5hYmxpbmcgaXRgLFxuICAgICAgICAgIHNvbHV0aW9uOiBgRW5hYmxlIHRoZSBhdXRoZW50aWNhdGlvbiBhZGFwdGVyIGJ5IHNldHRpbmcgdGhlIFBhcnNlIFNlcnZlciBvcHRpb24gXCJhdXRoLiR7cHJvdmlkZXJ9LmVuYWJsZWQ6IHRydWVcIi5gLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghdmFsaWRhdG9yIHx8IGF1dGhQcm92aWRlci5lbmFibGVkID09PSBmYWxzZSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgUGFyc2UuRXJyb3IuVU5TVVBQT1JURURfU0VSVklDRSxcbiAgICAgICAgICAnVGhpcyBhdXRoZW50aWNhdGlvbiBtZXRob2QgaXMgdW5zdXBwb3J0ZWQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgbGV0IHZhbGlkYXRpb25SZXN1bHQgPSBhd2FpdCB2YWxpZGF0b3IoYXV0aERhdGFbcHJvdmlkZXJdLCByZXEsIHVzZXIsIHJlcXVlc3RPYmplY3QpO1xuICAgICAgbWV0aG9kID0gdmFsaWRhdGlvblJlc3VsdCAmJiB2YWxpZGF0aW9uUmVzdWx0Lm1ldGhvZDtcbiAgICAgIHJlcXVlc3RPYmplY3QudHJpZ2dlck5hbWUgPSBtZXRob2Q7XG4gICAgICBpZiAodmFsaWRhdGlvblJlc3VsdCAmJiB2YWxpZGF0aW9uUmVzdWx0LnZhbGlkYXRvcikge1xuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0ID0gYXdhaXQgdmFsaWRhdGlvblJlc3VsdC52YWxpZGF0b3IoKTtcbiAgICAgIH1cbiAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdCkge1xuICAgICAgICBhY2MuYXV0aERhdGFbcHJvdmlkZXJdID0gYXV0aERhdGFbcHJvdmlkZXJdO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghT2JqZWN0LmtleXModmFsaWRhdGlvblJlc3VsdCkubGVuZ3RoKSB7XG4gICAgICAgIGFjYy5hdXRoRGF0YVtwcm92aWRlcl0gPSBhdXRoRGF0YVtwcm92aWRlcl07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5yZXNwb25zZSkge1xuICAgICAgICBhY2MuYXV0aERhdGFSZXNwb25zZVtwcm92aWRlcl0gPSB2YWxpZGF0aW9uUmVzdWx0LnJlc3BvbnNlO1xuICAgICAgfVxuICAgICAgLy8gU29tZSBhdXRoIHByb3ZpZGVycyBhZnRlciBpbml0aWFsaXphdGlvbiB3aWxsIGF2b2lkIHRvIHJlcGxhY2UgYXV0aERhdGEgYWxyZWFkeSBzdG9yZWRcbiAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdC5kb05vdFNhdmUpIHtcbiAgICAgICAgYWNjLmF1dGhEYXRhW3Byb3ZpZGVyXSA9IHZhbGlkYXRpb25SZXN1bHQuc2F2ZSB8fCBhdXRoRGF0YVtwcm92aWRlcl07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBlID0gcmVzb2x2ZUVycm9yKGVyciwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5TQ1JJUFRfRkFJTEVELFxuICAgICAgICBtZXNzYWdlOiAnQXV0aCBmYWlsZWQuIFVua25vd24gZXJyb3IuJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdXNlclN0cmluZyA9XG4gICAgICAgIHJlcS5hdXRoICYmIHJlcS5hdXRoLnVzZXIgPyByZXEuYXV0aC51c2VyLmlkIDogcmVxLmRhdGEub2JqZWN0SWQgfHwgdW5kZWZpbmVkO1xuICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICBgRmFpbGVkIHJ1bm5pbmcgYXV0aCBzdGVwICR7bWV0aG9kfSBmb3IgJHtwcm92aWRlcn0gZm9yIHVzZXIgJHt1c2VyU3RyaW5nfSB3aXRoIEVycm9yOiBgICtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShlKSxcbiAgICAgICAge1xuICAgICAgICAgIGF1dGhlbnRpY2F0aW9uU3RlcDogbWV0aG9kLFxuICAgICAgICAgIGVycm9yOiBlLFxuICAgICAgICAgIHVzZXI6IHVzZXJTdHJpbmcsXG4gICAgICAgICAgcHJvdmlkZXIsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYWNjO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEF1dGgsXG4gIG1hc3RlcixcbiAgbWFpbnRlbmFuY2UsXG4gIG5vYm9keSxcbiAgcmVhZE9ubHksXG4gIGdldEF1dGhGb3JTZXNzaW9uVG9rZW4sXG4gIGdldEF1dGhGb3JMZWdhY3lTZXNzaW9uVG9rZW4sXG4gIGZpbmRVc2Vyc1dpdGhBdXRoRGF0YSxcbiAgaGFzTXV0YXRlZEF1dGhEYXRhLFxuICBjaGVja0lmVXNlckhhc1Byb3ZpZGVkQ29uZmlndXJlZFByb3ZpZGVyc0ZvckxvZ2luLFxuICBoYW5kbGVBdXRoRGF0YVZhbGlkYXRpb24sXG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFvQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFOcEMsTUFBTUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsWUFBWSxDQUFDO0FBUW5DO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLElBQUksQ0FBQztFQUNaQyxNQUFNO0VBQ05DLGVBQWUsR0FBR0MsU0FBUztFQUMzQkMsUUFBUSxHQUFHLEtBQUs7RUFDaEJDLGFBQWEsR0FBRyxLQUFLO0VBQ3JCQyxVQUFVLEdBQUcsS0FBSztFQUNsQkMsSUFBSTtFQUNKQztBQUNGLENBQUMsRUFBRTtFQUNELElBQUksQ0FBQ1AsTUFBTSxHQUFHQSxNQUFNO0VBQ3BCLElBQUksQ0FBQ0MsZUFBZSxHQUFHQSxlQUFlLElBQUtELE1BQU0sSUFBSUEsTUFBTSxDQUFDQyxlQUFnQjtFQUM1RSxJQUFJLENBQUNNLGNBQWMsR0FBR0EsY0FBYztFQUNwQyxJQUFJLENBQUNKLFFBQVEsR0FBR0EsUUFBUTtFQUN4QixJQUFJLENBQUNDLGFBQWEsR0FBR0EsYUFBYTtFQUNsQyxJQUFJLENBQUNFLElBQUksR0FBR0EsSUFBSTtFQUNoQixJQUFJLENBQUNELFVBQVUsR0FBR0EsVUFBVTs7RUFFNUI7RUFDQTtFQUNBLElB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
604
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJBdXRoIiwiY29uZmlnIiwiY2FjaGVDb250cm9sbGVyIiwidW5kZWZpbmVkIiwiaXNNYXN0ZXIiLCJpc01haW50ZW5hbmNlIiwiaXNSZWFkT25seSIsInVzZXIiLCJpbnN0YWxsYXRpb25JZCIsInVzZXJSb2xlcyIsImZldGNoZWRSb2xlcyIsInJvbGVQcm9taXNlIiwicHJvdG90eXBlIiwiaXNVbmF1dGhlbnRpY2F0ZWQiLCJtYXN0ZXIiLCJtYWludGVuYW5jZSIsInJlYWRPbmx5Iiwibm9ib2R5IiwidGhyb3R0bGUiLCJyZW5ld1Nlc3Npb25JZk5lZWRlZCIsInNlc3Npb24iLCJzZXNzaW9uVG9rZW4iLCJleHRlbmRTZXNzaW9uT25Vc2UiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwicXVlcnkiLCJSZXN0UXVlcnkiLCJtZXRob2QiLCJNZXRob2QiLCJnZXQiLCJhdXRoIiwicnVuQmVmb3JlRmluZCIsImNsYXNzTmFtZSIsInJlc3RXaGVyZSIsInJlc3RPcHRpb25zIiwibGltaXQiLCJyZXN1bHRzIiwiZXhlY3V0ZSIsImxhc3RVcGRhdGVkIiwiRGF0ZSIsInVwZGF0ZWRBdCIsInllc3RlcmRheSIsInNldERhdGUiLCJnZXREYXRlIiwiZXhwaXJlc0F0IiwiZ2VuZXJhdGVTZXNzaW9uRXhwaXJlc0F0IiwiUmVzdFdyaXRlIiwib2JqZWN0SWQiLCJfZW5jb2RlIiwiZSIsImNvZGUiLCJFcnJvciIsIk9CSkVDVF9OT1RfRk9VTkQiLCJsb2dnZXIiLCJlcnJvciIsImdldEF1dGhGb3JTZXNzaW9uVG9rZW4iLCJ1c2VySlNPTiIsImNhY2hlZFVzZXIiLCJPYmplY3QiLCJmcm9tSlNPTiIsIlByb21pc2UiLCJyZXNvbHZlIiwiaW5jbHVkZSIsIlF1ZXJ5IiwiU2Vzc2lvbiIsImVxdWFsVG8iLCJmaW5kIiwidXNlTWFzdGVyS2V5IiwibWFwIiwib2JqIiwidG9KU09OIiwibGVuZ3RoIiwiSU5WQUxJRF9TRVNTSU9OX1RPS0VOIiwibm93IiwiaXNvIiwicGFzc3dvcmQiLCJwdXQiLCJ1c2VyT2JqZWN0IiwiZ2V0QXV0aEZvckxlZ2FjeVNlc3Npb25Ub2tlbiIsIl9zZXNzaW9uX3Rva2VuIiwidGhlbiIsInJlc3BvbnNlIiwiZ2V0VXNlclJvbGVzIiwiX2xvYWRSb2xlcyIsImdldFJvbGVzRm9yVXNlciIsInVzZXJzIiwiX190eXBlIiwiaWQiLCJlYWNoIiwicmVzdWx0IiwicHVzaCIsIlJvbGUiLCJjYWNoZWRSb2xlcyIsInJvbGUiLCJjYWNoZVJvbGVzIiwicm9sZXNNYXAiLCJyZWR1Y2UiLCJtIiwiciIsIm5hbWVzIiwibmFtZSIsImlkcyIsInJvbGVOYW1lcyIsIl9nZXRBbGxSb2xlc05hbWVzRm9yUm9sZUlkcyIsIkFycmF5IiwiY2xlYXJSb2xlQ2FjaGUiLCJkZWwiLCJnZXRSb2xlc0J5SWRzIiwiaW5zIiwiY29udGFpbmVkSW4iLCJyb2xlcyIsIiRpbiIsInJvbGVJRHMiLCJxdWVyaWVkUm9sZXMiLCJmaWx0ZXIiLCJyb2xlSUQiLCJ3YXNRdWVyaWVkIiwiU2V0IiwicmVzdWx0TWFwIiwibWVtbyIsImNvbmNhdCIsImZpbmRVc2Vyc1dpdGhBdXRoRGF0YSIsImF1dGhEYXRhIiwicHJvdmlkZXJzIiwia2V5cyIsInByb3ZpZGVyIiwicXVlcnlLZXkiLCJxIiwiZGF0YWJhc2UiLCIkb3IiLCJoYXNNdXRhdGVkQXV0aERhdGEiLCJ1c2VyQXV0aERhdGEiLCJtdXRhdGVkQXV0aERhdGEiLCJmb3JFYWNoIiwicHJvdmlkZXJEYXRhIiwidXNlclByb3ZpZGVyQXV0aERhdGEiLCJpc0RlZXBTdHJpY3RFcXVhbCIsImNoZWNrSWZVc2VySGFzUHJvdmlkZWRDb25maWd1cmVkUHJvdmlkZXJzRm9yTG9naW4iLCJyZXEiLCJzYXZlZFVzZXJQcm92aWRlcnMiLCJhZGFwdGVyIiwiYXV0aERhdGFNYW5hZ2VyIiwiZ2V0VmFsaWRhdG9yRm9yUHJvdmlkZXIiLCJoYXNQcm92aWRlZEFTb2xvUHJvdmlkZXIiLCJzb21lIiwicG9saWN5IiwiYWRkaXRpb25Qcm92aWRlcnNOb3RGb3VuZCIsImhhc1Byb3ZpZGVkQXRMZWFzdE9uZUFkZGl0aW9uYWxQcm92aWRlciIsInJlcXVlc3RPYmplY3QiLCJpcCIsImNhbGwiLCJPVEhFUl9DQVVTRSIsImpvaW4iLCJoYW5kbGVBdXRoRGF0YVZhbGlkYXRpb24iLCJmb3VuZFVzZXIiLCJVc2VyIiwiZ2V0VXNlcklkIiwiZmV0Y2giLCJ1cGRhdGVkT2JqZWN0IiwiYnVpbGRQYXJzZU9iamVjdHMiLCJnZXRSZXF1ZXN0T2JqZWN0IiwiYWNjIiwiYXV0aERhdGFSZXNwb25zZSIsImF1dGhLZXlzIiwic29ydCIsInZhbGlkYXRvciIsImF1dGhQcm92aWRlciIsImVuYWJsZWQiLCJEZXByZWNhdG9yIiwibG9nUnVudGltZURlcHJlY2F0aW9uIiwidXNhZ2UiLCJzb2x1dGlvbiIsIlVOU1VQUE9SVEVEX1NFUlZJQ0UiLCJ2YWxpZGF0aW9uUmVzdWx0IiwidHJpZ2dlck5hbWUiLCJkb05vdFNhdmUiLCJzYXZlIiwiZXJyIiwicmVzb2x2ZUVycm9yIiwiU0NSSVBUX0ZBSUxFRCIsIm1lc3NhZ2UiLCJ1c2VyU3RyaW5nIiwiZGF0YSIsIkpTT04iLCJzdHJpbmdpZnkiLCJhdXRoZW50aWNhdGlvblN0ZXAiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL0F1dGguanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJyk7XG5pbXBvcnQgeyBpc0RlZXBTdHJpY3RFcXVhbCB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHsgZ2V0UmVxdWVzdE9iamVjdCwgcmVzb2x2ZUVycm9yIH0gZnJvbSAnLi90cmlnZ2Vycyc7XG5pbXBvcnQgRGVwcmVjYXRvciBmcm9tICcuL0RlcHJlY2F0b3IvRGVwcmVjYXRvcic7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgUmVzdFF1ZXJ5IGZyb20gJy4vUmVzdFF1ZXJ5JztcbmltcG9ydCBSZXN0V3JpdGUgZnJvbSAnLi9SZXN0V3JpdGUnO1xuXG4vLyBBbiBBdXRoIG9iamVjdCB0ZWxscyB5b3Ugd2hvIGlzIHJlcXVlc3Rpbmcgc29tZXRoaW5nIGFuZCB3aGV0aGVyXG4vLyB0aGUgbWFzdGVyIGtleSB3YXMgdXNlZC5cbi8vIHVzZXJPYmplY3QgaXMgYSBQYXJzZS5Vc2VyIGFuZCBjYW4gYmUgbnVsbCBpZiB0aGVyZSdzIG5vIHVzZXIuXG5mdW5jdGlvbiBBdXRoKHtcbiAgY29uZmlnLFxuICBjYWNoZUNvbnRyb2xsZXIgPSB1bmRlZmluZWQsXG4gIGlzTWFzdGVyID0gZmFsc2UsXG4gIGlzTWFpbnRlbmFuY2UgPSBmYWxzZSxcbiAgaXNSZWFkT25seSA9IGZhbHNlLFxuICB1c2VyLFxuICBpbnN0YWxsYXRpb25JZCxcbn0pIHtcbiAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gIHRoaXMuY2FjaGVDb250cm9sbGVyID0gY2FjaGVDb250cm9sbGVyIHx8IChjb25maWcgJiYgY29uZmlnLmNhY2hlQ29udHJvbGxlcik7XG4gIHRoaXMuaW5zdGFsbGF0aW9uSWQgPSBpbnN0YWxsYXRpb25JZDtcbiAgdGhpcy5pc01hc3RlciA9IGlzTWFzdGVyO1xuICB0aGlzLmlzTWFpbnRlbmFuY2UgPSBpc01haW50ZW5hbmNlO1xuICB0aGlzLnVzZXIgPSB1c2VyO1xuICB0aGlzLmlzUmVhZE9ubHkgPSBpc1JlYWRPbmx5O1xuXG4gIC8vIEFzc3VtaW5nIGEgdXNlcnMgcm9sZXMgd29uJ3QgY2hhbmdlIGR1cmluZyBhIHNpbmdsZSByZXF1ZXN0LCB3ZSdsbFxuICAvLyBvbmx5IGxvYWQgdGhlbSBvbmNlLlxuICB0aGlzLnVzZXJSb2xlcyA9IFtdO1xuICB0aGlzLmZldGNoZWRSb2xlcyA9IGZhbHNlO1xuICB0aGlzLnJvbGVQcm9taXNlID0gbnVsbDtcbn1cblxuLy8gV2hldGhlciB0aGlzIGF1dGggY291bGQgcG9zc2libHkgbW9kaWZ5IHRoZSBnaXZlbiB1c2VyIGlkLlxuLy8gSXQgc3RpbGwgY291bGQgYmUgZm9yYmlkZGVuIHZpYSBBQ0xzIGV2ZW4gaWYgdGhpcyByZXR1cm5zIHRydWUuXG5BdXRoLnByb3RvdHlwZS5pc1VuYXV0aGVudGljYXRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuaXNNYXN0ZXIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHRoaXMuaXNNYWludGVuYW5jZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodGhpcy51c2VyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufTtcblxuLy8gQSBoZWxwZXIgdG8gZ2V0IGEgbWFzdGVyLWxldmVsIEF1dGggb2JqZWN0XG5mdW5jdGlvbiBtYXN0ZXIoY29uZmlnKSB7XG4gIHJldHVybiBuZXcgQXV0aCh7IGNvbmZpZywgaXNNYXN0ZXI6IHRydWUgfSk7XG59XG5cbi8vIEEgaGVscGVyIHRvIGdldCBhIG1haW50ZW5hbmNlLWxldmVsIEF1dGggb2JqZWN0XG5mdW5jdGlvbiBtYWludGVuYW5jZShjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBBdXRoKHsgY29uZmlnLCBpc01haW50ZW5hbmNlOiB0cnVlIH0pO1xufVxuXG4vLyBBIGhlbHBlciB0byBnZXQgYSBtYXN0ZXItbGV2ZWwgQXV0aCBvYmplY3RcbmZ1bmN0aW9uIHJlYWRPbmx5KGNvbmZpZykge1xuICByZXR1cm4gbmV3IEF1dGgoeyBjb25maWcsIGlzTWFzdGVyOiB0cnVlLCBpc1JlYWRPbmx5OiB0cnVlIH0pO1xufVxuXG4vLyBBIGhlbHBlciB0byBnZXQgYSBub2JvZHktbGV2ZWwgQXV0aCBvYmplY3RcbmZ1bmN0aW9uIG5vYm9keShjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBBdXRoKHsgY29uZmlnLCBpc01hc3RlcjogZmFsc2UgfSk7XG59XG5cbmNvbnN0IHRocm90dGxlID0ge307XG5jb25zdCByZW5ld1Nlc3Npb25JZk5lZWRlZCA9IGFzeW5jICh7IGNvbmZpZywgc2Vzc2lvbiwgc2Vzc2lvblRva2VuIH0pID0+IHtcbiAgaWYgKCFjb25maWc/LmV4dGVuZFNlc3Npb25PblVzZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjbGVhclRpbWVvdXQodGhyb3R0bGVbc2Vzc2lvblRva2VuXSk7XG4gIHRocm90dGxlW3Nlc3Npb25Ub2tlbl0gPSBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFzZXNzaW9uKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gYXdhaXQgUmVzdFF1ZXJ5KHtcbiAgICAgICAgICBtZXRob2Q6IFJlc3RRdWVyeS5NZXRob2QuZ2V0LFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBhdXRoOiBtYXN0ZXIoY29uZmlnKSxcbiAgICAgICAgICBydW5CZWZvcmVGaW5kOiBmYWxzZSxcbiAgICAgICAgICBjbGFzc05hbWU6ICdfU2Vzc2lvbicsXG4gICAgICAgICAgcmVzdFdoZXJlOiB7IHNlc3Npb25Ub2tlbiB9LFxuICAgICAgICAgIHJlc3RPcHRpb25zOiB7IGxpbWl0OiAxIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB7IHJlc3VsdHMgfSA9IGF3YWl0IHF1ZXJ5LmV4ZWN1dGUoKTtcbiAgICAgICAgc2Vzc2lvbiA9IHJlc3VsdHNbMF07XG4gICAgICB9XG4gICAgICBjb25zdCBsYXN0VXBkYXRlZCA9IG5ldyBEYXRlKHNlc3Npb24/LnVwZGF0ZWRBdCk7XG4gICAgICBjb25zdCB5ZXN0ZXJkYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgeWVzdGVyZGF5LnNldERhdGUoeWVzdGVyZGF5LmdldERhdGUoKSAtIDEpO1xuICAgICAgaWYgKGxhc3RVcGRhdGVkID4geWVzdGVyZGF5IHx8ICFzZXNzaW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV4cGlyZXNBdCA9IGNvbmZpZy5nZW5lcmF0ZVNlc3Npb25FeHBpcmVzQXQoKTtcbiAgICAgIGF3YWl0IG5ldyBSZXN0V3JpdGUoXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgbWFzdGVyKGNvbmZpZyksXG4gICAgICAgICdfU2Vzc2lvbicsXG4gICAgICAgIHsgb2JqZWN0SWQ6IHNlc3Npb24ub2JqZWN0SWQgfSxcbiAgICAgICAgeyBleHBpcmVzQXQ6IFBhcnNlLl9lbmNvZGUoZXhwaXJlc0F0KSB9XG4gICAgICApLmV4ZWN1dGUoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZT8uY29kZSAhPT0gUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0NvdWxkIG5vdCB1cGRhdGUgc2Vzc2lvbiBleHBpcnk6ICcsIGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgNTAwKTtcbn07XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gQXV0aCBvYmplY3RcbmNvbnN0IGdldEF1dGhGb3JTZXNzaW9uVG9rZW4gPSBhc3luYyBmdW5jdGlvbiAoe1xuICBjb25maWcsXG4gIGNhY2hlQ29udHJvbGxlcixcbiAgc2Vzc2lvblRva2VuLFxuICBpbnN0YWxsYXRpb25JZCxcbn0pIHtcbiAgY2FjaGVDb250cm9sbGVyID0gY2FjaGVDb250cm9sbGVyIHx8IChjb25maWcgJiYgY29uZmlnLmNhY2hlQ29udHJvbGxlcik7XG4gIGlmIChjYWNoZUNvbnRyb2xsZXIpIHtcbiAgICBjb25zdCB1c2VySlNPTiA9IGF3YWl0IGNhY2hlQ29udHJvbGxlci51c2VyLmdldChzZXNzaW9uVG9rZW4pO1xuICAgIGlmICh1c2VySlNPTikge1xuICAgICAgY29uc3QgY2FjaGVkVXNlciA9IFBhcnNlLk9iamVjdC5mcm9tSlNPTih1c2VySlNPTik7XG4gICAgICByZW5ld1Nlc3Npb25JZk5lZWRlZCh7IGNvbmZpZywgc2Vzc2lvblRva2VuIH0pO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgbmV3IEF1dGgoe1xuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBjYWNoZUNvbnRyb2xsZXIsXG4gICAgICAgICAgaXNNYXN0ZXI6IGZhbHNlLFxuICAgICAgICAgIGluc3RhbGxhdGlvbklkLFxuICAgICAgICAgIHVzZXI6IGNhY2hlZFVzZXIsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGxldCByZXN1bHRzO1xuICBpZiAoY29uZmlnKSB7XG4gICAgY29uc3QgcmVzdE9wdGlvbnMgPSB7XG4gICAgICBsaW1pdDogMSxcbiAgICAgIGluY2x1ZGU6ICd1c2VyJyxcbiAgICB9O1xuICAgIGNvbnN0IFJlc3RRdWVyeSA9IHJlcXVpcmUoJy4vUmVzdFF1ZXJ5Jyk7XG4gICAgY29uc3QgcXVlcnkgPSBhd2FpdCBSZXN0UXVlcnkoe1xuICAgICAgbWV0aG9kOiBSZXN0UXVlcnkuTWV0aG9kLmdldCxcbiAgICAgIGNvbmZpZyxcbiAgICAgIHJ1bkJlZm9yZUZpbmQ6IGZhbHNlLFxuICAgICAgYXV0aDogbWFzdGVyKGNvbmZpZyksXG4gICAgICBjbGFzc05hbWU6ICdfU2Vzc2lvbicsXG4gICAgICByZXN0V2hlcmU6IHsgc2Vzc2lvblRva2VuIH0sXG4gICAgICByZXN0T3B0aW9ucyxcbiAgICB9KTtcbiAgICByZXN1bHRzID0gKGF3YWl0IHF1ZXJ5LmV4ZWN1dGUoKSkucmVzdWx0cztcbiAgfSBlbHNlIHtcbiAgICByZXN1bHRzID0gKFxuICAgICAgYXdhaXQgbmV3IFBhcnNlLlF1ZXJ5KFBhcnNlLlNlc3Npb24pXG4gICAgICAgIC5saW1pdCgxKVxuICAgICAgICAuaW5jbHVkZSgndXNlcicpXG4gICAgICAgIC5lcXVhbFRvKCdzZXNzaW9uVG9rZW4nLCBzZXNzaW9uVG9rZW4pXG4gICAgICAgIC5maW5kKHsgdXNlTWFzdGVyS2V5OiB0cnVlIH0pXG4gICAgKS5tYXAob2JqID0+IG9iai50b0pTT04oKSk7XG4gIH1cblxuICBpZiAocmVzdWx0cy5sZW5ndGggIT09IDEgfHwgIXJlc3VsdHNbMF1bJ3VzZXInXSkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1NFU1NJT05fVE9LRU4sICdJbnZhbGlkIHNlc3Npb24gdG9rZW4nKTtcbiAgfVxuICBjb25zdCBzZXNzaW9uID0gcmVzdWx0c1swXTtcbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKSxcbiAgICBleHBpcmVzQXQgPSBzZXNzaW9uLmV4cGlyZXNBdCA/IG5ldyBEYXRlKHNlc3Npb24uZXhwaXJlc0F0LmlzbykgOiB1bmRlZmluZWQ7XG4gIGlmIChleHBpcmVzQXQgPCBub3cpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9TRVNTSU9OX1RPS0VOLCAnU2Vzc2lvbiB0b2tlbiBpcyBleHBpcmVkLicpO1xuICB9XG4gIGNvbnN0IG9iaiA9IHNlc3Npb24udXNlcjtcbiAgZGVsZXRlIG9iai5wYXNzd29yZDtcbiAgb2JqWydjbGFzc05hbWUnXSA9ICdfVXNlcic7XG4gIG9ialsnc2Vzc2lvblRva2VuJ10gPSBzZXNzaW9uVG9rZW47XG4gIGlmIChjYWNoZUNvbnRyb2xsZXIpIHtcbiAgICBjYWNoZUNvbnRyb2xsZXIudXNlci5wdXQoc2Vzc2lvblRva2VuLCBvYmopO1xuICB9XG4gIHJlbmV3U2Vzc2lvbklmTmVlZGVkKHsgY29uZmlnLCBzZXNzaW9uLCBzZXNzaW9uVG9rZW4gfSk7XG4gIGNvbnN0IHVzZXJPYmplY3QgPSBQYXJzZS5PYmplY3QuZnJvbUpTT04ob2JqKTtcbiAgcmV0dXJuIG5ldyBBdXRoKHtcbiAgICBjb25maWcsXG4gICAgY2FjaGVDb250cm9sbGVyLFxuICAgIGlzTWFzdGVyOiBmYWxzZSxcbiAgICBpbnN0YWxsYXRpb25JZCxcbiAgICB1c2VyOiB1c2VyT2JqZWN0LFxuICB9KTtcbn07XG5cbnZhciBnZXRBdXRoRm9yTGVnYWN5U2Vzc2lvblRva2VuID0gYXN5bmMgZnVuY3Rpb24gKHsgY29uZmlnLCBzZXNzaW9uVG9rZW4sIGluc3RhbGxhdGlvbklkIH0pIHtcbiAgdmFyIHJlc3RPcHRpb25zID0ge1xuICAgIGxpbWl0OiAxLFxuICB9O1xuICBjb25zdCBSZXN0UXVlcnkgPSByZXF1aXJlKCcuL1Jlc3RRdWVyeScpO1xuICB2YXIgcXVlcnkgPSBhd2FpdCBSZXN0UXVlcnkoe1xuICAgIG1ldGhvZDogUmVzdFF1ZXJ5Lk1ldGhvZC5nZXQsXG4gICAgY29uZmlnLFxuICAgIHJ1bkJlZm9yZUZpbmQ6IGZhbHNlLFxuICAgIGF1dGg6IG1hc3Rlcihjb25maWcpLFxuICAgIGNsYXNzTmFtZTogJ19Vc2VyJyxcbiAgICByZXN0V2hlcmU6IHsgX3Nlc3Npb25fdG9rZW46IHNlc3Npb25Ub2tlbiB9LFxuICAgIHJlc3RPcHRpb25zLFxuICB9KTtcbiAgcmV0dXJuIHF1ZXJ5LmV4ZWN1dGUoKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICB2YXIgcmVzdWx0cyA9IHJlc3BvbnNlLnJlc3VsdHM7XG4gICAgaWYgKHJlc3VsdHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9TRVNTSU9OX1RPS0VOLCAnaW52YWxpZCBsZWdhY3kgc2Vzc2lvbiB0b2tlbicpO1xuICAgIH1cbiAgICBjb25zdCBvYmogPSByZXN1bHRzWzBdO1xuICAgIG9iai5jbGFzc05hbWUgPSAnX1VzZXInO1xuICAgIGNvbnN0IHVzZXJPYmplY3QgPSBQYXJzZS5PYmplY3QuZnJvbUpTT04ob2JqKTtcbiAgICByZXR1cm4gbmV3IEF1dGgoe1xuICAgICAgY29uZmlnLFxuICAgICAgaXNNYXN0ZXI6IGZhbHNlLFxuICAgICAgaW5zdGFsbGF0aW9uSWQsXG4gICAgICB1c2VyOiB1c2VyT2JqZWN0LFxuICAgIH0pO1xuICB9KTtcbn07XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgb2Ygcm9sZSBuYW1lc1xuQXV0aC5wcm90b3R5cGUuZ2V0VXNlclJvbGVzID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5pc01hc3RlciB8fCB0aGlzLmlzTWFpbnRlbmFuY2UgfHwgIXRoaXMudXNlcikge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9XG4gIGlmICh0aGlzLmZldGNoZWRSb2xlcykge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy51c2VyUm9sZXMpO1xuICB9XG4gIGlmICh0aGlzLnJvbGVQcm9taXNlKSB7XG4gICAgcmV0dXJuIHRoaXMucm9sZVByb21pc2U7XG4gIH1cbiAgdGhpcy5yb2xlUHJvbWlzZSA9IHRoaXMuX2xvYWRSb2xlcygpO1xuICByZXR1cm4gdGhpcy5yb2xlUHJvbWlzZTtcbn07XG5cbkF1dGgucHJvdG90eXBlLmdldFJvbGVzRm9yVXNlciA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgLy9TdGFjayBhbGwgUGFyc2UuUm9sZVxuICBjb25zdCByZXN1bHRzID0gW107XG4gIGlmICh0aGlzLmNvbmZpZykge1xuICAgIGNvbnN0IHJlc3RXaGVyZSA9IHtcbiAgICAgIHVzZXJzOiB7XG4gICAgICAgIF9fdHlwZTogJ1BvaW50ZXInLFxuICAgICAgICBjbGFzc05hbWU6ICdfVXNlcicsXG4gICAgICAgIG9iamVjdElkOiB0aGlzLnVzZXIuaWQsXG4gICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgUmVzdFF1ZXJ5ID0gcmVxdWlyZSgnLi9SZXN0UXVlcnknKTtcbiAgICBjb25zdCBxdWVyeSA9IGF3YWl0IFJlc3RRdWVyeSh7XG4gICAgICBtZXRob2Q6IFJlc3RRdWVyeS5NZXRob2QuZmluZCxcbiAgICAgIHJ1bkJlZm9yZUZpbmQ6IGZhbHNlLFxuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGF1dGg6IG1hc3Rlcih0aGlzLmNvbmZpZyksXG4gICAgICBjbGFzc05hbWU6ICdfUm9sZScsXG4gICAgICByZXN0V2hlcmUsXG4gICAgfSk7XG4gICAgYXdhaXQgcXVlcnkuZWFjaChyZXN1bHQgPT4gcmVzdWx0cy5wdXNoKHJlc3VsdCkpO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IG5ldyBQYXJzZS5RdWVyeShQYXJzZS5Sb2xlKVxuICAgICAgLmVxdWFsVG8oJ3VzZXJzJywgdGhpcy51c2VyKVxuICAgICAgLmVhY2gocmVzdWx0ID0+IHJlc3VsdHMucHVzaChyZXN1bHQudG9KU09OKCkpLCB7IHVzZU1hc3RlcktleTogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0cztcbn07XG5cbi8vIEl0ZXJhdGVzIHRocm91Z2ggdGhlIHJvbGUgdHJlZSBhbmQgY29tcGlsZXMgYSB1c2VyJ3Mgcm9sZXNcbkF1dGgucHJvdG90eXBlLl9sb2FkUm9sZXMgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmNhY2hlQ29udHJvbGxlcikge1xuICAgIGNvbnN0IGNhY2hlZFJvbGVzID0gYXdhaXQgdGhpcy5jYWNoZUNvbnRyb2xsZXIucm9sZS5nZXQodGhpcy51c2VyLmlkKTtcbiAgICBpZiAoY2FjaGVkUm9sZXMgIT0gbnVsbCkge1xuICAgICAgdGhpcy5mZXRjaGVkUm9sZXMgPSB0cnVlO1xuICAgICAgdGhpcy51c2VyUm9sZXMgPSBjYWNoZWRSb2xlcztcbiAgICAgIHJldHVybiBjYWNoZWRSb2xlcztcbiAgICB9XG4gIH1cblxuICAvLyBGaXJzdCBnZXQgdGhlIHJvbGUgaWRzIHRoaXMgdXNlciBpcyBkaXJlY3RseSBhIG1lbWJlciBvZlxuICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5nZXRSb2xlc0ZvclVzZXIoKTtcbiAgaWYgKCFyZXN1bHRzLmxlbmd0aCkge1xuICAgIHRoaXMudXNlclJvbGVzID0gW107XG4gICAgdGhpcy5mZXRjaGVkUm9sZXMgPSB0cnVlO1xuICAgIHRoaXMucm9sZVByb21pc2UgPSBudWxsO1xuXG4gICAgdGhpcy5jYWNoZVJvbGVzKCk7XG4gICAgcmV0dXJuIHRoaXMudXNlclJvbGVzO1xuICB9XG5cbiAgY29uc3Qgcm9sZXNNYXAgPSByZXN1bHRzLnJlZHVjZShcbiAgICAobSwgcikgPT4ge1xuICAgICAgbS5uYW1lcy5wdXNoKHIubmFtZSk7XG4gICAgICBtLmlkcy5wdXNoKHIub2JqZWN0SWQpO1xuICAgICAgcmV0dXJuIG07XG4gICAgfSxcbiAgICB7IGlkczogW10sIG5hbWVzOiBbXSB9XG4gICk7XG5cbiAgLy8gcnVuIHRoZSByZWN1cnNpdmUgZmluZGluZ1xuICBjb25zdCByb2xlTmFtZXMgPSBhd2FpdCB0aGlzLl9nZXRBbGxSb2xlc05hbWVzRm9yUm9sZUlkcyhyb2xlc01hcC5pZHMsIHJvbGVzTWFwLm5hbWVzKTtcbiAgdGhpcy51c2VyUm9sZXMgPSByb2xlTmFtZXMubWFwKHIgPT4ge1xuICAgIHJldHVybiAncm9sZTonICsgcjtcbiAgfSk7XG4gIHRoaXMuZmV0Y2hlZFJvbGVzID0gdHJ1ZTtcbiAgdGhpcy5yb2xlUHJvbWlzZSA9IG51bGw7XG4gIHRoaXMuY2FjaGVSb2xlcygpO1xuICByZXR1cm4gdGhpcy51c2VyUm9sZXM7XG59O1xuXG5BdXRoLnByb3RvdHlwZS5jYWNoZVJvbGVzID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMuY2FjaGVDb250cm9sbGVyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRoaXMuY2FjaGVDb250cm9sbGVyLnJvbGUucHV0KHRoaXMudXNlci5pZCwgQXJyYXkoLi4udGhpcy51c2VyUm9sZXMpKTtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG5BdXRoLnByb3RvdHlwZS5jbGVhclJvbGVDYWNoZSA9IGZ1bmN0aW9uIChzZXNzaW9uVG9rZW4pIHtcbiAgaWYgKCF0aGlzLmNhY2hlQ29udHJvbGxlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB0aGlzLmNhY2hlQ29udHJvbGxlci5yb2xlLmRlbCh0aGlzLnVzZXIuaWQpO1xuICB0aGlzLmNhY2hlQ29udHJvbGxlci51c2VyLmRlbChzZXNzaW9uVG9rZW4pO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkF1dGgucHJvdG90eXBlLmdldFJvbGVzQnlJZHMgPSBhc3luYyBmdW5jdGlvbiAoaW5zKSB7XG4gIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgLy8gQnVpbGQgYW4gT1IgcXVlcnkgYWNyb3NzIGFsbCBwYXJlbnRSb2xlc1xuICBpZiAoIXRoaXMuY29uZmlnKSB7XG4gICAgYXdhaXQgbmV3IFBhcnNlLlF1ZXJ5KFBhcnNlLlJvbGUpXG4gICAgICAuY29udGFpbmVkSW4oXG4gICAgICAgICdyb2xlcycsXG4gICAgICAgIGlucy5tYXAoaWQgPT4ge1xuICAgICAgICAgIGNvbnN0IHJvbGUgPSBuZXcgUGFyc2UuT2JqZWN0KFBhcnNlLlJvbGUpO1xuICAgICAgICAgIHJvbGUuaWQgPSBpZDtcbiAgICAgICAgICByZXR1cm4gcm9sZTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5lYWNoKHJlc3VsdCA9PiByZXN1bHRzLnB1c2gocmVzdWx0LnRvSlNPTigpKSwgeyB1c2VNYXN0ZXJLZXk6IHRydWUgfSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgcm9sZXMgPSBpbnMubWFwKGlkID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIF9fdHlwZTogJ1BvaW50ZXInLFxuICAgICAgICBjbGFzc05hbWU6ICdfUm9sZScsXG4gICAgICAgIG9iamVjdElkOiBpZCxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgY29uc3QgcmVzdFdoZXJlID0geyByb2xlczogeyAkaW46IHJvbGVzIH0gfTtcbiAgICBjb25zdCBSZXN0UXVlcnkgPSByZXF1aXJlKCcuL1Jlc3RRdWVyeScpO1xuICAgIGNvbnN0IHF1ZXJ5ID0gYXdhaXQgUmVzdFF1ZXJ5KHtcbiAgICAgIG1ldGhvZDogUmVzdFF1ZXJ5Lk1ldGhvZC5maW5kLFxuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIHJ1bkJlZm9yZUZpbmQ6IGZhbHNlLFxuICAgICAgYXV0aDogbWFzdGVyKHRoaXMuY29uZmlnKSxcbiAgICAgIGNsYXNzTmFtZTogJ19Sb2xlJyxcbiAgICAgIHJlc3RXaGVyZSxcbiAgICB9KTtcbiAgICBhd2FpdCBxdWVyeS5lYWNoKHJlc3VsdCA9PiByZXN1bHRzLnB1c2gocmVzdWx0KSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vLyBHaXZlbiBhIGxpc3Qgb2Ygcm9sZUlkcywgZmluZCBhbGwgdGhlIHBhcmVudCByb2xlcywgcmV0dXJucyBhIHByb21pc2Ugd2l0aCBhbGwgbmFtZXNcbkF1dGgucHJvdG90eXBlLl9nZXRBbGxSb2xlc05hbWVzRm9yUm9sZUlkcyA9IGZ1bmN0aW9uIChyb2xlSURzLCBuYW1lcyA9IFtdLCBxdWVyaWVkUm9sZXMgPSB7fSkge1xuICBjb25zdCBpbnMgPSByb2xlSURzLmZpbHRlcihyb2xlSUQgPT4ge1xuICAgIGNvbnN0IHdhc1F1ZXJpZWQgPSBxdWVyaWVkUm9sZXNbcm9sZUlEXSAhPT0gdHJ1ZTtcbiAgICBxdWVyaWVkUm9sZXNbcm9sZUlEXSA9IHRydWU7XG4gICAgcmV0dXJuIHdhc1F1ZXJpZWQ7XG4gIH0pO1xuXG4gIC8vIGFsbCByb2xlcyBhcmUgYWNjb3VudGVkIGZvciwgcmV0dXJuIHRoZSBuYW1lc1xuICBpZiAoaW5zLmxlbmd0aCA9PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbLi4ubmV3IFNldChuYW1lcyldKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmdldFJvbGVzQnlJZHMoaW5zKVxuICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgLy8gTm90aGluZyBmb3VuZFxuICAgICAgaWYgKCFyZXN1bHRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5hbWVzKTtcbiAgICAgIH1cbiAgICAgIC8vIE1hcCB0aGUgcmVzdWx0cyB3aXRoIGFsbCBJZHMgYW5kIG5hbWVzXG4gICAgICBjb25zdCByZXN1bHRNYXAgPSByZXN1bHRzLnJlZHVjZShcbiAgICAgICAgKG1lbW8sIHJvbGUpID0+IHtcbiAgICAgICAgICBtZW1vLm5hbWVzLnB1c2gocm9sZS5uYW1lKTtcbiAgICAgICAgICBtZW1vLmlkcy5wdXNoKHJvbGUub2JqZWN0SWQpO1xuICAgICAgICAgIHJldHVybiBtZW1vO1xuICAgICAgICB9LFxuICAgICAgICB7IGlkczogW10sIG5hbWVzOiBbXSB9XG4gICAgICApO1xuICAgICAgLy8gc3RvcmUgdGhlIG5ldyBmb3VuZCBuYW1lc1xuICAgICAgbmFtZXMgPSBuYW1lcy5jb25jYXQocmVzdWx0TWFwLm5hbWVzKTtcbiAgICAgIC8vIGZpbmQgdGhlIG5leHQgb25lcywgY2lyY3VsYXIgcm9sZXMgd2lsbCBiZSBjdXRcbiAgICAgIHJldHVybiB0aGlzLl9nZXRBbGxSb2xlc05hbWVzRm9yUm9sZUlkcyhyZXN1bHRNYXAuaWRzLCBuYW1lcywgcXVlcmllZFJvbGVzKTtcbiAgICB9KVxuICAgIC50aGVuKG5hbWVzID0+IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoWy4uLm5ldyBTZXQobmFtZXMpXSk7XG4gICAgfSk7XG59O1xuXG5jb25zdCBmaW5kVXNlcnNXaXRoQXV0aERhdGEgPSAoY29uZmlnLCBhdXRoRGF0YSkgPT4ge1xuICBjb25zdCBwcm92aWRlcnMgPSBPYmplY3Qua2V5cyhhdXRoRGF0YSk7XG4gIGNvbnN0IHF1ZXJ5ID0gcHJvdmlkZXJzXG4gICAgLnJlZHVjZSgobWVtbywgcHJvdmlkZXIpID0+IHtcbiAgICAgIGlmICghYXV0aERhdGFbcHJvdmlkZXJdIHx8IChhdXRoRGF0YSAmJiAhYXV0aERhdGFbcHJvdmlkZXJdLmlkKSkge1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHF1ZXJ5S2V5ID0gYGF1dGhEYXRhLiR7cHJvdmlkZXJ9LmlkYDtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0ge307XG4gICAgICBxdWVyeVtxdWVyeUtleV0gPSBhdXRoRGF0YVtwcm92aWRlcl0uaWQ7XG4gICAgICBtZW1vLnB1c2gocXVlcnkpO1xuICAgICAgcmV0dXJuIG1lbW87XG4gICAgfSwgW10pXG4gICAgLmZpbHRlcihxID0+IHtcbiAgICAgIHJldHVybiB0eXBlb2YgcSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgfSk7XG5cbiAgcmV0dXJuIHF1ZXJ5Lmxlbmd0aCA+IDBcbiAgICA/IGNvbmZpZy5kYXRhYmFzZS5maW5kKCdfVXNlcicsIHsgJG9yOiBxdWVyeSB9LCB7IGxpbWl0OiAyIH0pXG4gICAgOiBQcm9taXNlLnJlc29sdmUoW10pO1xufTtcblxuY29uc3QgaGFzTXV0YXRlZEF1dGhEYXRhID0gKGF1dGhEYXRhLCB1c2VyQXV0aERhdGEpID0+IHtcbiAgaWYgKCF1c2VyQXV0aERhdGEpIHJldHVybiB7IGhhc011dGF0ZWRBdXRoRGF0YTogdHJ1ZSwgbXV0YXRlZEF1dGhEYXRhOiBhdXRoRGF0YSB9O1xuICBjb25zdCBtdXRhdGVkQXV0aERhdGEgPSB7fTtcbiAgT2JqZWN0LmtleXMoYXV0aERhdGEpLmZvckVhY2gocHJvdmlkZXIgPT4ge1xuICAgIC8vIEFub255bW91cyBwcm92aWRlciBpcyBub3QgaGFuZGxlZCB0aGlzIHdheVxuICAgIGlmIChwcm92aWRlciA9PT0gJ2Fub255bW91cycpIHJldHVybjtcbiAgICBjb25zdCBwcm92aWRlckRhdGEgPSBhdXRoRGF0YVtwcm92aWRlcl07XG4gICAgY29uc3QgdXNlclByb3ZpZGVyQXV0aERhdGEgPSB1c2VyQXV0aERhdGFbcHJvdmlkZXJdO1xuICAgIGlmICghaXNEZWVwU3RyaWN0RXF1YWwocHJvdmlkZXJEYXRhLCB1c2VyUHJvdmlkZXJBdXRoRGF0YSkpIHtcbiAgICAgIG11dGF0ZWRBdXRoRGF0YVtwcm92aWRlcl0gPSBwcm92aWRlckRhdGE7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFzTXV0YXRlZEF1dGhEYXRhID0gT2JqZWN0LmtleXMobXV0YXRlZEF1dGhEYXRhKS5sZW5ndGggIT09IDA7XG4gIHJldHVybiB7IGhhc011dGF0ZWRBdXRoRGF0YSwgbXV0YXRlZEF1dGhEYXRhIH07XG59O1xuXG5jb25zdCBjaGVja0lmVXNlckhhc1Byb3ZpZGVkQ29uZmlndXJlZFByb3ZpZGVyc0ZvckxvZ2luID0gKFxuICByZXEgPSB7fSxcbiAgYXV0aERhdGEgPSB7fSxcbiAgdXNlckF1dGhEYXRhID0ge30sXG4gIGNvbmZpZ1xuKSA9PiB7XG4gIGNvbnN0IHNhdmVkVXNlclByb3ZpZGVycyA9IE9iamVjdC5rZXlzKHVzZXJBdXRoRGF0YSkubWFwKHByb3ZpZGVyID0+ICh7XG4gICAgbmFtZTogcHJvdmlkZXIsXG4gICAgYWRhcHRlcjogY29uZmlnLmF1dGhEYXRhTWFuYWdlci5nZXRWYWxpZGF0b3JGb3JQcm92aWRlcihwcm92aWRlcikuYWRhcHRlcixcbiAgfSkpO1xuXG4gIGNvbnN0IGhhc1Byb3ZpZGVkQVNvbG9Qcm92aWRlciA9IHNhdmVkVXNlclByb3ZpZGVycy5zb21lKFxuICAgIHByb3ZpZGVyID0+XG4gICAgICBwcm92aWRlciAmJiBwcm92aWRlci5hZGFwdGVyICYmIHByb3ZpZGVyLmFkYXB0ZXIucG9saWN5ID09PSAnc29sbycgJiYgYXV0aERhdGFbcHJvdmlkZXIubmFtZV1cbiAgKTtcblxuICAvLyBTb2xvIHByb3ZpZGVycyBjYW4gYmUgY29uc2lkZXJlZCBhcyBzYWZlLCBzbyB3ZSBkbyBub3QgaGF2ZSB0byBjaGVjayBpZiB0aGUgdXNlciBuZWVkc1xuICAvLyB0byBwcm92aWRlIGFuIGFkZGl0aW9uYWwgcHJvdmlkZXIgdG8gbG9naW4uIEFuIGF1dGggYWRhcHRlciB3aXRoIFwic29sb1wiIChsaWtlIHdlYmF1dGhuKSBtZWFuc1xuICAvLyBubyBcImFkZGl0aW9uYWxcIiBhdXRoIG5lZWRzIHRvIGJlIHByb3ZpZGVkIHRvIGxvZ2luIChsaWtlIE9UUCwgTUZBKVxuICBpZiAoaGFzUHJvdmlkZWRBU29sb1Byb3ZpZGVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYWRkaXRpb25Qcm92aWRlcnNOb3RGb3VuZCA9IFtdO1xuICBjb25zdCBoYXNQcm92aWRlZEF0TGVhc3RPbmVBZGRpdGlvbmFsUHJvdmlkZXIgPSBzYXZlZFVzZXJQcm92aWRlcnMuc29tZShwcm92aWRlciA9PiB7XG4gICAgbGV0IHBvbGljeSA9IHByb3ZpZGVyLmFkYXB0ZXIucG9saWN5O1xuICAgIGlmICh0eXBlb2YgcG9saWN5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCByZXF1ZXN0T2JqZWN0ID0ge1xuICAgICAgICBpcDogcmVxLmNvbmZpZy5pcCxcbiAgICAgICAgdXNlcjogcmVxLmF1dGgudXNlcixcbiAgICAgICAgbWFzdGVyOiByZXEuYXV0aC5pc01hc3RlcixcbiAgICAgIH07XG4gICAgICBwb2xpY3kgPSBwb2xpY3kuY2FsbChwcm92aWRlci5hZGFwdGVyLCByZXF1ZXN0T2JqZWN0LCB1c2VyQXV0aERhdGFbcHJvdmlkZXIubmFtZV0pO1xuICAgIH1cbiAgICBpZiAocG9saWN5ID09PSAnYWRkaXRpb25hbCcpIHtcbiAgICAgIGlmIChhdXRoRGF0YVtwcm92aWRlci5uYW1lXSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFB1c2ggbWlzc2luZyBwcm92aWRlciBmb3IgZXJyb3IgbWVzc2FnZVxuICAgICAgICBhZGRpdGlvblByb3ZpZGVyc05vdEZvdW5kLnB1c2gocHJvdmlkZXIubmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgaWYgKGhhc1Byb3ZpZGVkQXRMZWFzdE9uZUFkZGl0aW9uYWxQcm92aWRlciB8fCAhYWRkaXRpb25Qcm92aWRlcnNOb3RGb3VuZC5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgUGFyc2UuRXJyb3IuT1RIRVJfQ0FVU0UsXG4gICAgYE1pc3NpbmcgYWRkaXRpb25hbCBhdXRoRGF0YSAke2FkZGl0aW9uUHJvdmlkZXJzTm90Rm91bmQuam9pbignLCcpfWBcbiAgKTtcbn07XG5cbi8vIFZhbGlkYXRlIGVhY2ggYXV0aERhdGEgc3RlcC1ieS1zdGVwIGFuZCByZXR1cm4gdGhlIHByb3ZpZGVyIHJlc3BvbnNlc1xuY29uc3QgaGFuZGxlQXV0aERhdGFWYWxpZGF0aW9uID0gYXN5bmMgKGF1dGhEYXRhLCByZXEsIGZvdW5kVXNlcikgPT4ge1xuICBsZXQgdXNlcjtcbiAgaWYgKGZvdW5kVXNlcikge1xuICAgIHVzZXIgPSBQYXJzZS5Vc2VyLmZyb21KU09OKHsgY2xhc3NOYW1lOiAnX1VzZXInLCAuLi5mb3VuZFVzZXIgfSk7XG4gICAgLy8gRmluZCB1c2VyIGJ5IHNlc3Npb24gYW5kIGN1cnJlbnQgb2JqZWN0SWQ7IG9ubHkgcGFzcyB1c2VyIGlmIGl0J3MgdGhlIGN1cnJlbnQgdXNlciBvciBtYXN0ZXIga2V5IGlzIHByb3ZpZGVkXG4gIH0gZWxzZSBpZiAoXG4gICAgKHJlcS5hdXRoICYmXG4gICAgICByZXEuYXV0aC51c2VyICYmXG4gICAgICB0eXBlb2YgcmVxLmdldFVzZXJJZCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgcmVxLmdldFVzZXJJZCgpID09PSByZXEuYXV0aC51c2VyLmlkKSB8fFxuICAgIChyZXEuYXV0aCAmJiByZXEuYXV0aC5pc01hc3RlciAmJiB0eXBlb2YgcmVxLmdldFVzZXJJZCA9PT0gJ2Z1bmN0aW9uJyAmJiByZXEuZ2V0VXNlcklkKCkpXG4gICkge1xuICAgIHVzZXIgPSBuZXcgUGFyc2UuVXNlcigpO1xuICAgIHVzZXIuaWQgPSByZXEuYXV0aC5pc01hc3RlciA/IHJlcS5nZXRVc2VySWQoKSA6IHJlcS5hdXRoLnVzZXIuaWQ7XG4gICAgYXdhaXQgdXNlci5mZXRjaCh7IHVzZU1hc3RlcktleTogdHJ1ZSB9KTtcbiAgfVxuXG4gIGNvbnN0IHsgdXBkYXRlZE9iamVjdCB9ID0gcmVxLmJ1aWxkUGFyc2VPYmplY3RzKCk7XG4gIGNvbnN0IHJlcXVlc3RPYmplY3QgPSBnZXRSZXF1ZXN0T2JqZWN0KHVuZGVmaW5lZCwgcmVxLmF1dGgsIHVwZGF0ZWRPYmplY3QsIHVzZXIsIHJlcS5jb25maWcpO1xuICAvLyBQZXJmb3JtIHZhbGlkYXRpb24gYXMgc3RlcC1ieS1zdGVwIHBpcGVsaW5lIGZvciBiZXR0ZXIgZXJyb3IgY29uc2lzdGVuY3lcbiAgLy8gYW5kIGFsc28gdG8gYXZvaWQgdG8gdHJpZ2dlciBhIHByb3ZpZGVyIChsaWtlIE9UUCBTTVMpIGlmIGFub3RoZXIgb25lIGZhaWxzXG4gIGNvbnN0IGFjYyA9IHsgYXV0aERhdGE6IHt9LCBhdXRoRGF0YVJlc3BvbnNlOiB7fSB9O1xuICBjb25zdCBhdXRoS2V5cyA9IE9iamVjdC5rZXlzKGF1dGhEYXRhKS5zb3J0KCk7XG4gIGZvciAoY29uc3QgcHJvdmlkZXIgb2YgYXV0aEtleXMpIHtcbiAgICBsZXQgbWV0aG9kID0gJyc7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChhdXRoRGF0YVtwcm92aWRlcl0gPT09IG51bGwpIHtcbiAgICAgICAgYWNjLmF1dGhEYXRhW3Byb3ZpZGVyXSA9IG51bGw7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgeyB2YWxpZGF0b3IgfSA9IHJlcS5jb25maWcuYXV0aERhdGFNYW5hZ2VyLmdldFZhbGlkYXRvckZvclByb3ZpZGVyKHByb3ZpZGVyKTtcbiAgICAgIGNvbnN0IGF1dGhQcm92aWRlciA9IChyZXEuY29uZmlnLmF1dGggfHwge30pW3Byb3ZpZGVyXSB8fCB7fTtcbiAgICAgIGlmIChhdXRoUHJvdmlkZXIuZW5hYmxlZCA9PSBudWxsKSB7XG4gICAgICAgIERlcHJlY2F0b3IubG9nUnVudGltZURlcHJlY2F0aW9uKHtcbiAgICAgICAgICB1c2FnZTogYFVzaW5nIHRoZSBhdXRoZW50aWNhdGlvbiBhZGFwdGVyIFwiJHtwcm92aWRlcn1cIiB3aXRob3V0IGV4cGxpY2l0bHkgZW5hYmxpbmcgaXRgLFxuICAgICAgICAgIHNvbHV0aW9uOiBgRW5hYmxlIHRoZSBhdXRoZW50aWNhdGlvbiBhZGFwdGVyIGJ5IHNldHRpbmcgdGhlIFBhcnNlIFNlcnZlciBvcHRpb24gXCJhdXRoLiR7cHJvdmlkZXJ9LmVuYWJsZWQ6IHRydWVcIi5gLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghdmFsaWRhdG9yIHx8IGF1dGhQcm92aWRlci5lbmFibGVkID09PSBmYWxzZSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgUGFyc2UuRXJyb3IuVU5TVVBQT1JURURfU0VSVklDRSxcbiAgICAgICAgICAnVGhpcyBhdXRoZW50aWNhdGlvbiBtZXRob2QgaXMgdW5zdXBwb3J0ZWQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgbGV0IHZhbGlkYXRpb25SZXN1bHQgPSBhd2FpdCB2YWxpZGF0b3IoYXV0aERhdGFbcHJvdmlkZXJdLCByZXEsIHVzZXIsIHJlcXVlc3RPYmplY3QpO1xuICAgICAgbWV0aG9kID0gdmFsaWRhdGlvblJlc3VsdCAmJiB2YWxpZGF0aW9uUmVzdWx0Lm1ldGhvZDtcbiAgICAgIHJlcXVlc3RPYmplY3QudHJpZ2dlck5hbWUgPSBtZXRob2Q7XG4gICAgICBpZiAodmFsaWRhdGlvblJlc3VsdCAmJiB2YWxpZGF0aW9uUmVzdWx0LnZhbGlkYXRvcikge1xuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0ID0gYXdhaXQgdmFsaWRhdGlvblJlc3VsdC52YWxpZGF0b3IoKTtcbiAgICAgIH1cbiAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdCkge1xuICAgICAgICBhY2MuYXV0aERhdGFbcHJvdmlkZXJdID0gYXV0aERhdGFbcHJvdmlkZXJdO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghT2JqZWN0LmtleXModmFsaWRhdGlvblJlc3VsdCkubGVuZ3RoKSB7XG4gICAgICAgIGFjYy5hdXRoRGF0YVtwcm92aWRlcl0gPSBhdXRoRGF0YVtwcm92aWRlcl07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5yZXNwb25zZSkge1xuICAgICAgICBhY2MuYXV0aERhdGFSZXNwb25zZVtwcm92aWRlcl0gPSB2YWxpZGF0aW9uUmVzdWx0LnJlc3BvbnNlO1xuICAgICAgfVxuICAgICAgLy8gU29tZSBhdXRoIHByb3ZpZGVycyBhZnRlciBpbml0aWFsaXphdGlvbiB3aWxsIGF2b2lkIHRvIHJlcGxhY2UgYXV0aERhdGEgYWxyZWFkeSBzdG9yZWRcbiAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdC5kb05vdFNhdmUpIHtcbiAgICAgICAgYWNjLmF1dGhEYXRhW3Byb3ZpZGVyXSA9IHZhbGlkYXRpb25SZXN1bHQuc2F2ZSB8fCBhdXRoRGF0YVtwcm92aWRlcl07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBlID0gcmVzb2x2ZUVycm9yKGVyciwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5TQ1JJUFRfRkFJTEVELFxuICAgICAgICBtZXNzYWdlOiAnQXV0aCBmYWlsZWQuIFVua25vd24gZXJyb3IuJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdXNlclN0cmluZyA9XG4gICAgICAgIHJlcS5hdXRoICYmIHJlcS5hdXRoLnVzZXIgPyByZXEuYXV0aC51c2VyLmlkIDogcmVxLmRhdGEub2JqZWN0SWQgfHwgdW5kZWZpbmVkO1xuICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICBgRmFpbGVkIHJ1bm5pbmcgYXV0aCBzdGVwICR7bWV0aG9kfSBmb3IgJHtwcm92aWRlcn0gZm9yIHVzZXIgJHt1c2VyU3RyaW5nfSB3aXRoIEVycm9yOiBgICtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShlKSxcbiAgICAgICAge1xuICAgICAgICAgIGF1dGhlbnRpY2F0aW9uU3RlcDogbWV0aG9kLFxuICAgICAgICAgIGVycm9yOiBlLFxuICAgICAgICAgIHVzZXI6IHVzZXJTdHJpbmcsXG4gICAgICAgICAgcHJvdmlkZXIsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYWNjO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEF1dGgsXG4gIG1hc3RlcixcbiAgbWFpbnRlbmFuY2UsXG4gIG5vYm9keSxcbiAgcmVhZE9ubHksXG4gIGdldEF1dGhGb3JTZXNzaW9uVG9rZW4sXG4gIGdldEF1dGhGb3JMZWdhY3lTZXNzaW9uVG9rZW4sXG4gIGZpbmRVc2Vyc1dpdGhBdXRoRGF0YSxcbiAgaGFzTXV0YXRlZEF1dGhEYXRhLFxuICBjaGVja0lmVXNlckhhc1Byb3ZpZGVkQ29uZmlndXJlZFByb3ZpZGVyc0ZvckxvZ2luLFxuICBoYW5kbGVBdXRoRGF0YVZhbGlkYXRpb24sXG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFvQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFOcEMsTUFBTUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsWUFBWSxDQUFDO0FBUW5DO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLElBQUksQ0FBQztFQUNaQyxNQUFNO0VBQ05DLGVBQWUsR0FBR0MsU0FBUztFQUMzQkMsUUFBUSxHQUFHLEtBQUs7RUFDaEJDLGFBQWEsR0FBRyxLQUFLO0VBQ3JCQyxVQUFVLEdBQUcsS0FBSztFQUNsQkMsSUFBSTtFQUNKQztBQUNGLENBQUMsRUFBRTtFQUNELElBQUksQ0FBQ1AsTUFBTSxHQUFHQSxNQUFNO0VBQ3BCLElBQUksQ0FBQ0MsZUFBZSxHQUFHQSxlQUFlLElBQUtELE1BQU0sSUFBSUEsTUFBTSxDQUFDQyxlQUFnQjtFQUM1RSxJQUFJLENBQUNNLGNBQWMsR0FBR0EsY0FBYztFQUNwQyxJQUFJLENBQUNKLFFBQVEsR0FBR0EsUUFBUTtFQUN4QixJQUFJLENBQUNDLGFBQWEsR0FBR0EsYUFBYTtFQUNsQyxJQUFJLENBQUNFLElBQUksR0FBR0EsSUFBSTtFQUNoQixJQUFJLENBQUNELFVBQVUsR0FBR0EsVUFBVTs7RUFFNUI7RUFDQTtFQUNBLElBQUksQ0FBQ0csU0FBUyxHQUFHLEVBQUU7RUFDbkIsSUFBSSxDQUFDQyxZQUFZLEdBQUcsS0FBSztFQUN6QixJQUFJLENBQUNDLFdBQVcsR0FBRyxJQUFJO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQVgsSUFBSSxDQUFDWSxTQUFTLENBQUNDLGlCQUFp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
@@ -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+IHtcbiAgICAgICAgcmV0dXJuIHB1c2hTdGF0dXMuZmFpbChlcnIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZXhwaXJhdGlvbiB0aW1lIGZyb20gdGhlIHJlcXVlc3QgYm9keS5cbiAgICogQHBhcmFtIHtPYmplY3R9IHJlcXVlc3QgQSByZXF1ZXN0IG9iamVjdFxuICAgKiBAcmV0dXJucyB7TnVtYmVyfHVuZGVmaW5lZH0gVGhlIGV4cGlyYXRpb24gdGltZSBpZiBpdCBleGlzdHMgaW4gdGhlIHJlcXVlc3RcbiAgICovXG4gIHN0YXRpYyBnZXRFeHBpcmF0aW9uVGltZShib2R5ID0ge30pIHtcbiAgICB2YXIgaGFzRXhwaXJhdGlvblRpbWUgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYm9keSwgJ2V4cGlyYXRpb25fdGltZScpO1xuICAgIGlmICghaGFzRXhwaXJhdGlvblRpbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGV4cGlyYXRpb25UaW1lUGFyYW0gPSBib2R5WydleHBpcmF0aW9uX3RpbWUnXTtcbiAgICB2YXIgZXhwaXJhdGlvblRpbWU7XG4gICAgaWYgKHR5cGVvZiBleHBpcmF0aW9uVGltZVBhcmFtID09PSAnbnVtYmVyJykge1xuICAgICAgZXhwaXJhdGlvblRpbWUgPSBuZXcgRGF0ZShleHBpcmF0aW9uVGltZVBhcmFtICogMTAwMCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwaXJhdGlvblRpbWVQYXJhbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGV4cGlyYXRpb25UaW1lID0gbmV3IERhdGUoZXhwaXJhdGlvblRpbWVQYXJhbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuUFVTSF9NSVNDT05GSUdVUkVELFxuICAgICAgICBib2R5WydleHBpcmF0aW9uX3RpbWUnXSArICcgaXMgbm90IHZhbGlkIHRpbWUuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgLy8gQ2hlY2sgZXhwaXJhdGlvblRpbWUgaXMgdmFsaWQgb3Igbm90LCBpZiBpdCBpcyBub3QgdmFsaWQsIGV4cGlyYXRpb25UaW1lIGlzIE5hTlxuICAgIGlmICghaXNGaW5pdGUoZXhwaXJhdGlvblRpbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLlBVU0hfTUlTQ09ORklHVVJFRCxcbiAgICAgICAgYm9keVsnZXhwaXJhdGlvbl90aW1lJ10gKyAnIGlzIG5vdCB2YWxpZCB0aW1lLidcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBleHBpcmF0aW9uVGltZS52YWx1ZU9mKCk7XG4gIH1cblxuICBzdGF0aWMgZ2V0RXhwaXJhdGlvbkludGVydmFsKGJvZHkgPSB7fSkge1xuICAgIGNvbnN0IGhhc0V4cGlyYXRpb25JbnRlcnZhbCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChib2R5LCAnZXhwaXJhdGlvbl9pbnRlcnZhbCcpO1xuICAgIGlmICghaGFzRXhwaXJhdGlvbkludGVydmFsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGV4cGlyYXRpb25JbnRlcnZhbFBhcmFtID0gYm9keVsnZXhwaXJhdGlvbl9pbnRlcnZhbCddO1xuICAgIGlmICh0eXBlb2YgZXhwaXJhdGlvbkludGVydmFsUGFyYW0gIT09ICdudW1iZXInIHx8IGV4cGlyYXRpb25JbnRlcnZhbFBhcmFtIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuUFVTSF9NSVNDT05GSUdVUkVELFxuICAgICAgICBgZXhwaXJhdGlvbl9pbnRlcnZhbCBtdXN0IGJlIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAwYFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cGlyYXRpb25JbnRlcnZhbFBhcmFtO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwdXNoIHRpbWUgZnJvbSB0aGUgcmVxdWVzdCBib2R5LlxuICAgKiBAcGFyYW0ge09iamVjdH0gcmVxdWVzdCBBIHJlcXVlc3Qgb2JqZWN0XG4gICAqIEByZXR1cm5zIHtOdW1iZXJ8dW5kZWZpbmVkfSBUaGUgcHVzaCB0aW1lIGlmIGl0IGV4aXN0cyBpbiB0aGUgcmVxdWVzdFxuICAgKi9cbiAgc3RhdGljIGdldFB1c2hUaW1lKGJvZHkgPSB7fSkge1xuICAgIHZhciBoYXNQdXNoVGltZSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChib2R5LCAncHVzaF90aW1lJyk7XG4gICAgaWYgKCFoYXNQdXNoVGltZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcHVzaFRpbWVQYXJhbSA9IGJvZHlbJ3B1c2hfdGltZSddO1xuICAgIHZhciBkYXRlO1xuICAgIHZhciBpc0xvY2FsVGltZSA9IHRydWU7XG5cbiAgICBpZiAodHlwZW9mIHB1c2hUaW1lUGFyYW0gPT09ICdudW1iZXInKSB7XG4gICAgICBkYXRlID0gbmV3IERhdGUocHVzaFRpbWVQYXJhbSAqIDEwMDApO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHB1c2hUaW1lUGFyYW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICBpc0xvY2FsVGltZSA9ICFQdXNoQ29udHJvbGxlci5wdXNoVGltZUhhc1RpbWV6b25lQ29tcG9uZW50KHB1c2hUaW1lUGFyYW0pO1xuICAgICAgZGF0ZSA9IG5ldyBEYXRlKHB1c2hUaW1lUGFyYW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLlBVU0hfTUlTQ09ORklHVVJFRCxcbiAgICAgICAgYm9keVsncHVzaF90aW1lJ10gKyAnIGlzIG5vdCB2YWxpZCB0aW1lLidcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIENoZWNrIHB1c2hUaW1lIGlzIHZhbGlkIG9yIG5vdCwgaWYgaXQgaXMgbm90IHZhbGlkLCBwdXNoVGltZSBpcyBOYU5cbiAgICBpZiAoIWlzRmluaXRlKGRhdGUpKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLlBVU0hfTUlTQ09ORklHVVJFRCxcbiAgICAgICAgYm9keVsncHVzaF90aW1lJ10gKyAnIGlzIG5vdCB2YWxpZCB0aW1lLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGUsXG4gICAgICBpc0xvY2FsVGltZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIElTTzg2MDEgZm9ybWF0dGVkIGRhdGUgY29udGFpbnMgYSB0aW1lem9uZSBjb21wb25lbnRcbiAgICogQHBhcmFtIHB1c2hUaW1lUGFyYW0ge3N0cmluZ31cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgcHVzaFRpbWVIYXNUaW1lem9uZUNvbXBvbmVudChwdXNoVGltZVBhcmFtOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBvZmZzZXRQYXR0ZXJuID0gLyguKykoWystXSlcXGRcXGQ6XFxkXFxkJC87XG4gICAgcmV0dXJuIChcbiAgICAgIHB1c2hUaW1lUGFyYW0uaW5kZXhPZignWicpID09PSBwdXNoVGltZVBhcmFtLmxlbmd0aCAtIDEgfHwgb2Zmc2V0UGF0dGVybi50ZXN0KHB1c2hUaW1lUGFyYW0pIC8vIDIwMDctMDQtMDVUMTI6MzBaXG4gICAgKTsgLy8gMjAwNy0wNC0wNVQxMjozMC4wMDArMDI6MDAsIDIwMDctMDQtMDVUMTI6MzAuMDAwLTAyOjAwXG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBkYXRlIHRvIElTTyBmb3JtYXQgaW4gVVRDIHRpbWUgYW5kIHN0cmlwcyB0aGUgdGltZXpvbmUgaWYgYGlzTG9jYWxUaW1lYCBpcyB0cnVlXG4gICAqIEBwYXJhbSBkYXRlIHtEYXRlfVxuICAgKiBAcGFyYW0gaXNMb2NhbFRpbWUge2Jvb2xlYW59XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgZm9ybWF0UHVzaFRpbWUoeyBkYXRlLCBpc0xvY2FsVGltZSB9OiB7IGRhdGU6IERhdGUsIGlzTG9jYWxUaW1lOiBib29sZWFuIH0pIHtcbiAgICBpZiAoaXNMb2NhbFRpbWUpIHtcbiAgICAgIC8vIFN0cmlwICdaJ1xuICAgICAgY29uc3QgaXNvU3RyaW5nID0gZGF0ZS50b0lTT1N0cmluZygpO1xuICAgICAgcmV0dXJuIGlzb1N0cmluZy5zdWJzdHJpbmcoMCwgaXNvU3RyaW5nLmluZGV4T2YoJ1onKSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUHVzaENvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUF1RDtBQUVoRCxNQUFNQSxjQUFjLENBQUM7RUFDMUJDLFFBQVEsQ0FBQ0MsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxpQkFBaUIs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