parse-server 9.5.0-alpha.8 → 9.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/Config.js CHANGED
@@ -106,6 +106,7 @@ class Config {
106
106
  maintenanceKey,
107
107
  maintenanceKeyIps,
108
108
  readOnlyMasterKey,
109
+ readOnlyMasterKeyIps,
109
110
  allowHeaders,
110
111
  idempotencyOptions,
111
112
  fileUpload,
@@ -143,6 +144,7 @@ class Config {
143
144
  this.validateSessionConfiguration(sessionLength, expireInactiveSessions);
144
145
  this.validateIps('masterKeyIps', masterKeyIps);
145
146
  this.validateIps('maintenanceKeyIps', maintenanceKeyIps);
147
+ this.validateIps('readOnlyMasterKeyIps', readOnlyMasterKeyIps);
146
148
  this.validateDefaultLimit(defaultLimit);
147
149
  this.validateMaxLimit(maxLimit);
148
150
  this.validateAllowHeaders(allowHeaders);
@@ -735,4 +737,4 @@ class Config {
735
737
  exports.Config = Config;
736
738
  var _default = exports.default = Config;
737
739
  module.exports = Config;
738
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwicmVxdWlyZSIsIl9wYXRoVG9SZWdleHAiLCJfbmV0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jYWNoZSIsIl9EYXRhYmFzZUNvbnRyb2xsZXIiLCJfTG9nZ2VyQ29udHJvbGxlciIsIl9wYWNrYWdlIiwiX0RlZmluaXRpb25zIiwiX1BhcnNlIiwiX0RlcHJlY2F0b3IiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJyZW1vdmVUcmFpbGluZ1NsYXNoIiwic3RyIiwiZW5kc1dpdGgiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJhc3luY0tleXMiLCJDb25maWciLCJnZXQiLCJhcHBsaWNhdGlvbklkIiwibW91bnQiLCJjYWNoZUluZm8iLCJBcHBDYWNoZSIsImNvbmZpZyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwiZGF0YWJhc2UiLCJEYXRhYmFzZUNvbnRyb2xsZXIiLCJkYXRhYmFzZUNvbnRyb2xsZXIiLCJhZGFwdGVyIiwiZ2VuZXJhdGVTZXNzaW9uRXhwaXJlc0F0IiwiYmluZCIsImdlbmVyYXRlRW1haWxWZXJpZnlUb2tlbkV4cGlyZXNBdCIsInZlcnNpb24iLCJsb2FkS2V5cyIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJlcnJvciIsIkVycm9yIiwibWVzc2FnZSIsImNhY2hlZENvbmZpZyIsImFwcElkIiwidXBkYXRlZENvbmZpZyIsInB1dCIsInRyYW5zZm9ybUNvbmZpZ3VyYXRpb24iLCJzZXJ2ZXJDb25maWd1cmF0aW9uIiwiaW5jbHVkZXMiLCJ2YWxpZGF0ZU9wdGlvbnMiLCJ2YWxpZGF0ZUNvbnRyb2xsZXJzIiwic2V0dXBQYXNzd29yZFZhbGlkYXRvciIsInBhc3N3b3JkUG9saWN5IiwiY3VzdG9tUGFnZXMiLCJwdWJsaWNTZXJ2ZXJVUkwiLCJyZXZva2VTZXNzaW9uT25QYXNzd29yZFJlc2V0IiwiZXhwaXJlSW5hY3RpdmVTZXNzaW9ucyIsInNlc3Npb25MZW5ndGgiLCJkZWZhdWx0TGltaXQiLCJtYXhMaW1pdCIsImFjY291bnRMb2Nrb3V0IiwibWFzdGVyS2V5SXBzIiwibWFzdGVyS2V5IiwibWFpbnRlbmFuY2VLZXkiLCJtYWludGVuYW5jZUtleUlwcyIsInJlYWRPbmx5TWFzdGVyS2V5IiwiYWxsb3dIZWFkZXJzIiwiaWRlbXBvdGVuY3lPcHRpb25zIiwiZmlsZVVwbG9hZCIsInBhZ2VzIiwic2VjdXJpdHkiLCJlbmZvcmNlUHJpdmF0ZVVzZXJzIiwiZW5hYmxlSW5zZWN1cmVBdXRoQWRhcHRlcnMiLCJzY2hlbWEiLCJyZXF1ZXN0S2V5d29yZERlbnlsaXN0IiwiYWxsb3dFeHBpcmVkQXV0aERhdGFUb2tlbiIsImxvZ0xldmVscyIsInJhdGVMaW1pdCIsImRhdGFiYXNlT3B0aW9ucyIsImV4dGVuZFNlc3Npb25PblVzZSIsImFsbG93Q2xpZW50Q2xhc3NDcmVhdGlvbiIsInZhbGlkYXRlQWNjb3VudExvY2tvdXRQb2xpY3kiLCJ2YWxpZGF0ZVBhc3N3b3JkUG9saWN5IiwidmFsaWRhdGVGaWxlVXBsb2FkT3B0aW9ucyIsInZhbGlkYXRlUHVibGljU2VydmVyVVJMIiwidmFsaWRhdGVTZXNzaW9uQ29uZmlndXJhdGlvbiIsInZhbGlkYXRlSXBzIiwidmFsaWRhdGVEZWZhdWx0TGltaXQiLCJ2YWxpZGF0ZU1heExpbWl0IiwidmFsaWRhdGVBbGxvd0hlYWRlcnMiLCJ2YWxpZGF0ZUlkZW1wb3RlbmN5T3B0aW9ucyIsInZhbGlkYXRlUGFnZXNPcHRpb25zIiwidmFsaWRhdGVTZWN1cml0eU9wdGlvbnMiLCJ2YWxpZGF0ZVNjaGVtYU9wdGlvbnMiLCJ2YWxpZGF0ZUVuZm9yY2VQcml2YXRlVXNlcnMiLCJ2YWxpZGF0ZUVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzIiwidmFsaWRhdGVBbGxvd0V4cGlyZWRBdXRoRGF0YVRva2VuIiwidmFsaWRhdGVSZXF1ZXN0S2V5d29yZERlbnlsaXN0IiwidmFsaWRhdGVSYXRlTGltaXQiLCJ2YWxpZGF0ZUxvZ0xldmVscyIsInZhbGlkYXRlRGF0YWJhc2VPcHRpb25zIiwidmFsaWRhdGVDdXN0b21QYWdlcyIsInZhbGlkYXRlQWxsb3dDbGllbnRDbGFzc0NyZWF0aW9uIiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwidmVyaWZ5VXNlckVtYWlscyIsInVzZXJDb250cm9sbGVyIiwiYXBwTmFtZSIsIl9wdWJsaWNTZXJ2ZXJVUkwiLCJlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbiIsImVtYWlsVmVyaWZ5VG9rZW5SZXVzZUlmVmFsaWQiLCJlbWFpbEFkYXB0ZXIiLCJ2YWxpZGF0ZUVtYWlsQ29uZmlndXJhdGlvbiIsInVuZGVmaW5lZCIsIkFycmF5IiwiaXNBcnJheSIsImVuYWJsZUNoZWNrIiwiU2VjdXJpdHlPcHRpb25zIiwiaXNCb29sZWFuIiwiZW5hYmxlQ2hlY2tMb2ciLCJkZWZpbml0aW9ucyIsIlNjaGVtYU9wdGlvbnMiLCJzdHJpY3QiLCJkZWxldGVFeHRyYUZpZWxkcyIsInJlY3JlYXRlTW9kaWZpZWRGaWVsZHMiLCJsb2NrU2NoZW1hcyIsImJlZm9yZU1pZ3JhdGlvbiIsImFmdGVyTWlncmF0aW9uIiwiZW5hYmxlTG9jYWxpemF0aW9uIiwiUGFnZXNPcHRpb25zIiwibG9jYWxpemF0aW9uSnNvblBhdGgiLCJpc1N0cmluZyIsImxvY2FsaXphdGlvbkZhbGxiYWNrTG9jYWxlIiwicGxhY2Vob2xkZXJzIiwiZm9yY2VSZWRpcmVjdCIsInBhZ2VzUGF0aCIsInBhZ2VzRW5kcG9pbnQiLCJjdXN0b21VcmxzIiwiY3VzdG9tUm91dGVzIiwiZW5jb2RlUGFnZVBhcmFtSGVhZGVycyIsInR0bCIsIklkZW1wb3RlbmN5T3B0aW9ucyIsImlzTmFOIiwicGF0aHMiLCJkdXJhdGlvbiIsIk51bWJlciIsImlzSW50ZWdlciIsInRocmVzaG9sZCIsInVubG9ja09uUGFzc3dvcmRSZXNldCIsIkFjY291bnRMb2Nrb3V0T3B0aW9ucyIsIm1heFBhc3N3b3JkQWdlIiwicmVzZXRUb2tlblZhbGlkaXR5RHVyYXRpb24iLCJ2YWxpZGF0b3JQYXR0ZXJuIiwiUmVnRXhwIiwidmFsaWRhdG9yQ2FsbGJhY2siLCJkb05vdEFsbG93VXNlcm5hbWUiLCJtYXhQYXNzd29yZEhpc3RvcnkiLCJyZXNldFRva2VuUmV1c2VJZlZhbGlkIiwicmVzZXRQYXNzd29yZFN1Y2Nlc3NPbkludmFsaWRFbWFpbCIsInBhdHRlcm5WYWxpZGF0b3IiLCJ2YWx1ZSIsInRlc3QiLCJyZXF1aXJlZCIsInR5cGUiLCJzdGFydHNXaXRoIiwiUmVmZXJlbmNlRXJyb3IiLCJlbmFibGVGb3JBbm9ueW1vdXNVc2VyIiwiRmlsZVVwbG9hZE9wdGlvbnMiLCJlbmFibGVGb3JQdWJsaWMiLCJlbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciIsImZpbGVFeHRlbnNpb25zIiwiYWxsb3dlZEZpbGVVcmxEb21haW5zIiwiZG9tYWluIiwiZmllbGQiLCJpcCIsInNwbGl0IiwibmV0IiwiaXNJUCIsIkRlcHJlY2F0b3IiLCJsb2dSdW50aW1lRGVwcmVjYXRpb24iLCJ1c2FnZSIsIl9tb3VudCIsIm5ld1ZhbHVlIiwiUGFyc2VTZXJ2ZXJPcHRpb25zIiwiaGVhZGVyIiwidHJpbSIsIkxvZ0xldmVscyIsInZhbGlkTG9nTGV2ZWxzIiwiaW5kZXhPZiIsIkpTT04iLCJzdHJpbmdpZnkiLCJlbmFibGVTY2hlbWFIb29rcyIsIkRhdGFiYXNlT3B0aW9ucyIsInNjaGVtYUNhY2hlVHRsIiwiYWxsb3dQdWJsaWNFeHBsYWluIiwib3B0aW9ucyIsIm9wdGlvbiIsInJlcXVlc3RQYXRoIiwicGF0aFRvUmVnZXhwIiwicmVxdWVzdFRpbWVXaW5kb3ciLCJpbmNsdWRlSW50ZXJuYWxSZXF1ZXN0cyIsInJlcXVlc3RDb3VudCIsImVycm9yUmVzcG9uc2VNZXNzYWdlIiwiUGFyc2VTZXJ2ZXIiLCJSYXRlTGltaXRab25lIiwiem9uZSIsImZvcm1hdHRlciIsIkludGwiLCJMaXN0Rm9ybWF0Iiwic3R5bGUiLCJmb3JtYXQiLCJub3ciLCJEYXRlIiwiZ2V0VGltZSIsImdlbmVyYXRlUGFzc3dvcmRSZXNldFRva2VuRXhwaXJlc0F0IiwidW5yZWdpc3RlclJhdGVMaW1pdGVycyIsImkiLCJyYXRlTGltaXRzIiwibGltaXQiLCJjbG91ZCIsInNwbGljZSIsImludmFsaWRMaW5rVVJMIiwiaW52YWxpZExpbmsiLCJpbnZhbGlkVmVyaWZpY2F0aW9uTGlua1VSTCIsImludmFsaWRWZXJpZmljYXRpb25MaW5rIiwibGlua1NlbmRTdWNjZXNzVVJMIiwibGlua1NlbmRTdWNjZXNzIiwibGlua1NlbmRGYWlsVVJMIiwibGlua1NlbmRGYWlsIiwidmVyaWZ5RW1haWxTdWNjZXNzVVJMIiwidmVyaWZ5RW1haWxTdWNjZXNzIiwiY2hvb3NlUGFzc3dvcmRVUkwiLCJjaG9vc2VQYXNzd29yZCIsInJlcXVlc3RSZXNldFBhc3N3b3JkVVJMIiwicGFzc3dvcmRSZXNldFN1Y2Nlc3NVUkwiLCJwYXNzd29yZFJlc2V0U3VjY2VzcyIsInBhcnNlRnJhbWVVUkwiLCJ2ZXJpZnlFbWFpbFVSTCIsImxvYWRNYXN0ZXJLZXkiLCJ0dGxJc0VtcHR5IiwibWFzdGVyS2V5VHRsIiwiaXNFeHBpcmVkIiwibWFzdGVyS2V5Q2FjaGUiLCJleHBpcmVzQXQiLCJleHBvcnRzIiwiX2RlZmF1bHQiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi9zcmMvQ29uZmlnLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEEgQ29uZmlnIG9iamVjdCBwcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCBob3cgYSBzcGVjaWZpYyBhcHAgaXNcbi8vIGNvbmZpZ3VyZWQuXG4vLyBtb3VudCBpcyB0aGUgVVJMIGZvciB0aGUgcm9vdCBvZiB0aGUgQVBJOyBpbmNsdWRlcyBodHRwLCBkb21haW4sIGV0Yy5cblxuaW1wb3J0IHsgaXNCb29sZWFuLCBpc1N0cmluZyB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBwYXRoVG9SZWdleHAgfSBmcm9tICdwYXRoLXRvLXJlZ2V4cCc7XG5pbXBvcnQgbmV0IGZyb20gJ25ldCc7XG5pbXBvcnQgQXBwQ2FjaGUgZnJvbSAnLi9jYWNoZSc7XG5pbXBvcnQgRGF0YWJhc2VDb250cm9sbGVyIGZyb20gJy4vQ29udHJvbGxlcnMvRGF0YWJhc2VDb250cm9sbGVyJztcbmltcG9ydCB7IGxvZ0xldmVscyBhcyB2YWxpZExvZ0xldmVscyB9IGZyb20gJy4vQ29udHJvbGxlcnMvTG9nZ2VyQ29udHJvbGxlcic7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vcGFja2FnZS5qc29uJztcbmltcG9ydCB7XG4gIEFjY291bnRMb2Nrb3V0T3B0aW9ucyxcbiAgRGF0YWJhc2VPcHRpb25zLFxuICBGaWxlVXBsb2FkT3B0aW9ucyxcbiAgSWRlbXBvdGVuY3lPcHRpb25zLFxuICBMb2dMZXZlbHMsXG4gIFBhZ2VzT3B0aW9ucyxcbiAgUGFyc2VTZXJ2ZXJPcHRpb25zLFxuICBTY2hlbWFPcHRpb25zLFxuICBTZWN1cml0eU9wdGlvbnMsXG59IGZyb20gJy4vT3B0aW9ucy9EZWZpbml0aW9ucyc7XG5pbXBvcnQgUGFyc2VTZXJ2ZXIgZnJvbSAnLi9jbG91ZC1jb2RlL1BhcnNlLlNlcnZlcic7XG5pbXBvcnQgRGVwcmVjYXRvciBmcm9tICcuL0RlcHJlY2F0b3IvRGVwcmVjYXRvcic7XG5cbmZ1bmN0aW9uIHJlbW92ZVRyYWlsaW5nU2xhc2goc3RyKSB7XG4gIGlmICghc3RyKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICBpZiAoc3RyLmVuZHNXaXRoKCcvJykpIHtcbiAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIHN0ci5sZW5ndGggLSAxKTtcbiAgfVxuICByZXR1cm4gc3RyO1xufVxuXG4vKipcbiAqIENvbmZpZyBrZXlzIHRoYXQgbmVlZCB0byBiZSBsb2FkZWQgYXN5bmNocm9ub3VzbHkuXG4gKi9cbmNvbnN0IGFzeW5jS2V5cyA9IFsncHVibGljU2VydmVyVVJMJ107XG5cbmV4cG9ydCBjbGFzcyBDb25maWcge1xuICBzdGF0aWMgZ2V0KGFwcGxpY2F0aW9uSWQ6IHN0cmluZywgbW91bnQ6IHN0cmluZykge1xuICAgIGNvbnN0IGNhY2hlSW5mbyA9IEFwcENhY2hlLmdldChhcHBsaWNhdGlvbklkKTtcbiAgICBpZiAoIWNhY2hlSW5mbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb25maWcgPSBuZXcgQ29uZmlnKCk7XG4gICAgY29uZmlnLmFwcGxpY2F0aW9uSWQgPSBhcHBsaWNhdGlvbklkO1xuICAgIE9iamVjdC5rZXlzKGNhY2hlSW5mbykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKGtleSA9PSAnZGF0YWJhc2VDb250cm9sbGVyJykge1xuICAgICAgICBjb25maWcuZGF0YWJhc2UgPSBuZXcgRGF0YWJhc2VDb250cm9sbGVyKGNhY2hlSW5mby5kYXRhYmFzZUNvbnRyb2xsZXIuYWRhcHRlciwgY29uZmlnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbmZpZ1trZXldID0gY2FjaGVJbmZvW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uZmlnLm1vdW50ID0gcmVtb3ZlVHJhaWxpbmdTbGFzaChtb3VudCk7XG4gICAgY29uZmlnLmdlbmVyYXRlU2Vzc2lvbkV4cGlyZXNBdCA9IGNvbmZpZy5nZW5lcmF0ZVNlc3Npb25FeHBpcmVzQXQuYmluZChjb25maWcpO1xuICAgIGNvbmZpZy5nZW5lcmF0ZUVtYWlsVmVyaWZ5VG9rZW5FeHBpcmVzQXQgPSBjb25maWcuZ2VuZXJhdGVFbWFpbFZlcmlmeVRva2VuRXhwaXJlc0F0LmJpbmQoXG4gICAgICBjb25maWdcbiAgICApO1xuICAgIGNvbmZpZy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG5cbiAgYXN5bmMgbG9hZEtleXMoKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBhc3luY0tleXMubWFwKGFzeW5jIGtleSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpc1tgXyR7a2V5fWBdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXNba2V5XSA9IGF3YWl0IHRoaXNbYF8ke2tleX1gXSgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byByZXNvbHZlIGFzeW5jIGNvbmZpZyBrZXkgJyR7a2V5fSc6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGNhY2hlZENvbmZpZyA9IEFwcENhY2hlLmdldCh0aGlzLmFwcElkKTtcbiAgICBpZiAoY2FjaGVkQ29uZmlnKSB7XG4gICAgICBjb25zdCB1cGRhdGVkQ29uZmlnID0geyAuLi5jYWNoZWRDb25maWcgfTtcbiAgICAgIGFzeW5jS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIHVwZGF0ZWRDb25maWdba2V5XSA9IHRoaXNba2V5XTtcbiAgICAgIH0pO1xuICAgICAgQXBwQ2FjaGUucHV0KHRoaXMuYXBwSWQsIHVwZGF0ZWRDb25maWcpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB0cmFuc2Zvcm1Db25maWd1cmF0aW9uKHNlcnZlckNvbmZpZ3VyYXRpb24pIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzZXJ2ZXJDb25maWd1cmF0aW9uKSkge1xuICAgICAgaWYgKGFzeW5jS2V5cy5pbmNsdWRlcyhrZXkpICYmIHR5cGVvZiBzZXJ2ZXJDb25maWd1cmF0aW9uW2tleV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgc2VydmVyQ29uZmlndXJhdGlvbltgXyR7a2V5fWBdID0gc2VydmVyQ29uZmlndXJhdGlvbltrZXldO1xuICAgICAgICBkZWxldGUgc2VydmVyQ29uZmlndXJhdGlvbltrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBwdXQoc2VydmVyQ29uZmlndXJhdGlvbikge1xuICAgIENvbmZpZy52YWxpZGF0ZU9wdGlvbnMoc2VydmVyQ29uZmlndXJhdGlvbik7XG4gICAgQ29uZmlnLnZhbGlkYXRlQ29udHJvbGxlcnMoc2VydmVyQ29uZmlndXJhdGlvbik7XG4gICAgQ29uZmlnLnRyYW5zZm9ybUNvbmZpZ3VyYXRpb24oc2VydmVyQ29uZmlndXJhdGlvbik7XG4gICAgQXBwQ2FjaGUucHV0KHNlcnZlckNvbmZpZ3VyYXRpb24uYXBwSWQsIHNlcnZlckNvbmZpZ3VyYXRpb24pO1xuICAgIENvbmZpZy5zZXR1cFBhc3N3b3JkVmFsaWRhdG9yKHNlcnZlckNvbmZpZ3VyYXRpb24ucGFzc3dvcmRQb2xpY3kpO1xuICAgIHJldHVybiBzZXJ2ZXJDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlT3B0aW9ucyh7XG4gICAgY3VzdG9tUGFnZXMsXG4gICAgcHVibGljU2VydmVyVVJMLFxuICAgIHJldm9rZVNlc3Npb25PblBhc3N3b3JkUmVzZXQsXG4gICAgZXhwaXJlSW5hY3RpdmVTZXNzaW9ucyxcbiAgICBzZXNzaW9uTGVuZ3RoLFxuICAgIGRlZmF1bHRMaW1pdCxcbiAgICBtYXhMaW1pdCxcbiAgICBhY2NvdW50TG9ja291dCxcbiAgICBwYXNzd29yZFBvbGljeSxcbiAgICBtYXN0ZXJLZXlJcHMsXG4gICAgbWFzdGVyS2V5LFxuICAgIG1haW50ZW5hbmNlS2V5LFxuICAgIG1haW50ZW5hbmNlS2V5SXBzLFxuICAgIHJlYWRPbmx5TWFzdGVyS2V5LFxuICAgIGFsbG93SGVhZGVycyxcbiAgICBpZGVtcG90ZW5jeU9wdGlvbnMsXG4gICAgZmlsZVVwbG9hZCxcbiAgICBwYWdlcyxcbiAgICBzZWN1cml0eSxcbiAgICBlbmZvcmNlUHJpdmF0ZVVzZXJzLFxuICAgIGVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzLFxuICAgIHNjaGVtYSxcbiAgICByZXF1ZXN0S2V5d29yZERlbnlsaXN0LFxuICAgIGFsbG93RXhwaXJlZEF1dGhEYXRhVG9rZW4sXG4gICAgbG9nTGV2ZWxzLFxuICAgIHJhdGVMaW1pdCxcbiAgICBkYXRhYmFzZU9wdGlvbnMsXG4gICAgZXh0ZW5kU2Vzc2lvbk9uVXNlLFxuICAgIGFsbG93Q2xpZW50Q2xhc3NDcmVhdGlvbixcbiAgfSkge1xuICAgIGlmIChtYXN0ZXJLZXkgPT09IHJlYWRPbmx5TWFzdGVyS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21hc3RlcktleSBhbmQgcmVhZE9ubHlNYXN0ZXJLZXkgc2hvdWxkIGJlIGRpZmZlcmVudCcpO1xuICAgIH1cblxuICAgIGlmIChtYXN0ZXJLZXkgPT09IG1haW50ZW5hbmNlS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21hc3RlcktleSBhbmQgbWFpbnRlbmFuY2VLZXkgc2hvdWxkIGJlIGRpZmZlcmVudCcpO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWRhdGVBY2NvdW50TG9ja291dFBvbGljeShhY2NvdW50TG9ja291dCk7XG4gICAgdGhpcy52YWxpZGF0ZVBhc3N3b3JkUG9saWN5KHBhc3N3b3JkUG9saWN5KTtcbiAgICB0aGlzLnZhbGlkYXRlRmlsZVVwbG9hZE9wdGlvbnMoZmlsZVVwbG9hZCk7XG5cbiAgICBpZiAodHlwZW9mIHJldm9rZVNlc3Npb25PblBhc3N3b3JkUmVzZXQgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgJ3Jldm9rZVNlc3Npb25PblBhc3N3b3JkUmVzZXQgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWUnO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXh0ZW5kU2Vzc2lvbk9uVXNlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdleHRlbmRTZXNzaW9uT25Vc2UgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWUnO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWRhdGVQdWJsaWNTZXJ2ZXJVUkwoeyBwdWJsaWNTZXJ2ZXJVUkwgfSk7XG4gICAgdGhpcy52YWxpZGF0ZVNlc3Npb25Db25maWd1cmF0aW9uKHNlc3Npb25MZW5ndGgsIGV4cGlyZUluYWN0aXZlU2Vzc2lvbnMpO1xuICAgIHRoaXMudmFsaWRhdGVJcHMoJ21hc3RlcktleUlwcycsIG1hc3RlcktleUlwcyk7XG4gICAgdGhpcy52YWxpZGF0ZUlwcygnbWFpbnRlbmFuY2VLZXlJcHMnLCBtYWludGVuYW5jZUtleUlwcyk7XG4gICAgdGhpcy52YWxpZGF0ZURlZmF1bHRMaW1pdChkZWZhdWx0TGltaXQpO1xuICAgIHRoaXMudmFsaWRhdGVNYXhMaW1pdChtYXhMaW1pdCk7XG4gICAgdGhpcy52YWxpZGF0ZUFsbG93SGVhZGVycyhhbGxvd0hlYWRlcnMpO1xuICAgIHRoaXMudmFsaWRhdGVJZGVtcG90ZW5jeU9wdGlvbnMoaWRlbXBvdGVuY3lPcHRpb25zKTtcbiAgICB0aGlzLnZhbGlkYXRlUGFnZXNPcHRpb25zKHBhZ2VzKTtcbiAgICB0aGlzLnZhbGlkYXRlU2VjdXJpdHlPcHRpb25zKHNlY3VyaXR5KTtcbiAgICB0aGlzLnZhbGlkYXRlU2NoZW1hT3B0aW9ucyhzY2hlbWEpO1xuICAgIHRoaXMudmFsaWRhdGVFbmZvcmNlUHJpdmF0ZVVzZXJzKGVuZm9yY2VQcml2YXRlVXNlcnMpO1xuICAgIHRoaXMudmFsaWRhdGVFbmFibGVJbnNlY3VyZUF1dGhBZGFwdGVycyhlbmFibGVJbnNlY3VyZUF1dGhBZGFwdGVycyk7XG4gICAgdGhpcy52YWxpZGF0ZUFsbG93RXhwaXJlZEF1dGhEYXRhVG9rZW4oYWxsb3dFeHBpcmVkQXV0aERhdGFUb2tlbik7XG4gICAgdGhpcy52YWxpZGF0ZVJlcXVlc3RLZXl3b3JkRGVueWxpc3QocmVxdWVzdEtleXdvcmREZW55bGlzdCk7XG4gICAgdGhpcy52YWxpZGF0ZVJhdGVMaW1pdChyYXRlTGltaXQpO1xuICAgIHRoaXMudmFsaWRhdGVMb2dMZXZlbHMobG9nTGV2ZWxzKTtcbiAgICB0aGlzLnZhbGlkYXRlRGF0YWJhc2VPcHRpb25zKGRhdGFiYXNlT3B0aW9ucyk7XG4gICAgdGhpcy52YWxpZGF0ZUN1c3RvbVBhZ2VzKGN1c3RvbVBhZ2VzKTtcbiAgICB0aGlzLnZhbGlkYXRlQWxsb3dDbGllbnRDbGFzc0NyZWF0aW9uKGFsbG93Q2xpZW50Q2xhc3NDcmVhdGlvbik7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVDdXN0b21QYWdlcyhjdXN0b21QYWdlcykge1xuICAgIGlmICghY3VzdG9tUGFnZXMpIHsgcmV0dXJuOyB9XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGN1c3RvbVBhZ2VzKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgIHRocm93IEVycm9yKCdQYXJzZSBTZXJ2ZXIgb3B0aW9uIGN1c3RvbVBhZ2VzIG11c3QgYmUgYW4gb2JqZWN0LicpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUNvbnRyb2xsZXJzKHtcbiAgICB2ZXJpZnlVc2VyRW1haWxzLFxuICAgIHVzZXJDb250cm9sbGVyLFxuICAgIGFwcE5hbWUsXG4gICAgcHVibGljU2VydmVyVVJMLFxuICAgIF9wdWJsaWNTZXJ2ZXJVUkwsXG4gICAgZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24sXG4gICAgZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCxcbiAgfSkge1xuICAgIGNvbnN0IGVtYWlsQWRhcHRlciA9IHVzZXJDb250cm9sbGVyLmFkYXB0ZXI7XG4gICAgaWYgKHZlcmlmeVVzZXJFbWFpbHMpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVFbWFpbENvbmZpZ3VyYXRpb24oe1xuICAgICAgICBlbWFpbEFkYXB0ZXIsXG4gICAgICAgIGFwcE5hbWUsXG4gICAgICAgIHB1YmxpY1NlcnZlclVSTDogcHVibGljU2VydmVyVVJMIHx8IF9wdWJsaWNTZXJ2ZXJVUkwsXG4gICAgICAgIGVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uLFxuICAgICAgICBlbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlUmVxdWVzdEtleXdvcmREZW55bGlzdChyZXF1ZXN0S2V5d29yZERlbnlsaXN0KSB7XG4gICAgaWYgKHJlcXVlc3RLZXl3b3JkRGVueWxpc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdEtleXdvcmREZW55bGlzdCA9IHJlcXVlc3RLZXl3b3JkRGVueWxpc3QuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KHJlcXVlc3RLZXl3b3JkRGVueWxpc3QpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiByZXF1ZXN0S2V5d29yZERlbnlsaXN0IG11c3QgYmUgYW4gYXJyYXkuJztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVFbmZvcmNlUHJpdmF0ZVVzZXJzKGVuZm9yY2VQcml2YXRlVXNlcnMpIHtcbiAgICBpZiAodHlwZW9mIGVuZm9yY2VQcml2YXRlVXNlcnMgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gZW5mb3JjZVByaXZhdGVVc2VycyBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUFsbG93RXhwaXJlZEF1dGhEYXRhVG9rZW4oYWxsb3dFeHBpcmVkQXV0aERhdGFUb2tlbikge1xuICAgIGlmICh0eXBlb2YgYWxsb3dFeHBpcmVkQXV0aERhdGFUb2tlbiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBhbGxvd0V4cGlyZWRBdXRoRGF0YVRva2VuIG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlQWxsb3dDbGllbnRDbGFzc0NyZWF0aW9uKGFsbG93Q2xpZW50Q2xhc3NDcmVhdGlvbikge1xuICAgIGlmICh0eXBlb2YgYWxsb3dDbGllbnRDbGFzc0NyZWF0aW9uICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIGFsbG93Q2xpZW50Q2xhc3NDcmVhdGlvbiBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVNlY3VyaXR5T3B0aW9ucyhzZWN1cml0eSkge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc2VjdXJpdHkpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2VjdXJpdHkgbXVzdCBiZSBhbiBvYmplY3QuJztcbiAgICB9XG4gICAgaWYgKHNlY3VyaXR5LmVuYWJsZUNoZWNrID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNlY3VyaXR5LmVuYWJsZUNoZWNrID0gU2VjdXJpdHlPcHRpb25zLmVuYWJsZUNoZWNrLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNCb29sZWFuKHNlY3VyaXR5LmVuYWJsZUNoZWNrKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2VjdXJpdHkuZW5hYmxlQ2hlY2sgbXVzdCBiZSBhIGJvb2xlYW4uJztcbiAgICB9XG4gICAgaWYgKHNlY3VyaXR5LmVuYWJsZUNoZWNrTG9nID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNlY3VyaXR5LmVuYWJsZUNoZWNrTG9nID0gU2VjdXJpdHlPcHRpb25zLmVuYWJsZUNoZWNrTG9nLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNCb29sZWFuKHNlY3VyaXR5LmVuYWJsZUNoZWNrTG9nKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2VjdXJpdHkuZW5hYmxlQ2hlY2tMb2cgbXVzdCBiZSBhIGJvb2xlYW4uJztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVTY2hlbWFPcHRpb25zKHNjaGVtYTogU2NoZW1hT3B0aW9ucykge1xuICAgIGlmICghc2NoZW1hKSB7IHJldHVybjsgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc2NoZW1hKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHNjaGVtYSBtdXN0IGJlIGFuIG9iamVjdC4nO1xuICAgIH1cbiAgICBpZiAoc2NoZW1hLmRlZmluaXRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNjaGVtYS5kZWZpbml0aW9ucyA9IFNjaGVtYU9wdGlvbnMuZGVmaW5pdGlvbnMuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KHNjaGVtYS5kZWZpbml0aW9ucykpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHNjaGVtYS5kZWZpbml0aW9ucyBtdXN0IGJlIGFuIGFycmF5Lic7XG4gICAgfVxuICAgIGlmIChzY2hlbWEuc3RyaWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNjaGVtYS5zdHJpY3QgPSBTY2hlbWFPcHRpb25zLnN0cmljdC5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIWlzQm9vbGVhbihzY2hlbWEuc3RyaWN0KSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2NoZW1hLnN0cmljdCBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgIH1cbiAgICBpZiAoc2NoZW1hLmRlbGV0ZUV4dHJhRmllbGRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNjaGVtYS5kZWxldGVFeHRyYUZpZWxkcyA9IFNjaGVtYU9wdGlvbnMuZGVsZXRlRXh0cmFGaWVsZHMuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFpc0Jvb2xlYW4oc2NoZW1hLmRlbGV0ZUV4dHJhRmllbGRzKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2NoZW1hLmRlbGV0ZUV4dHJhRmllbGRzIG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICAgIGlmIChzY2hlbWEucmVjcmVhdGVNb2RpZmllZEZpZWxkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzY2hlbWEucmVjcmVhdGVNb2RpZmllZEZpZWxkcyA9IFNjaGVtYU9wdGlvbnMucmVjcmVhdGVNb2RpZmllZEZpZWxkcy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIWlzQm9vbGVhbihzY2hlbWEucmVjcmVhdGVNb2RpZmllZEZpZWxkcykpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHNjaGVtYS5yZWNyZWF0ZU1vZGlmaWVkRmllbGRzIG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICAgIGlmIChzY2hlbWEubG9ja1NjaGVtYXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZW1hLmxvY2tTY2hlbWFzID0gU2NoZW1hT3B0aW9ucy5sb2NrU2NoZW1hcy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIWlzQm9vbGVhbihzY2hlbWEubG9ja1NjaGVtYXMpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBzY2hlbWEubG9ja1NjaGVtYXMgbXVzdCBiZSBhIGJvb2xlYW4uJztcbiAgICB9XG4gICAgaWYgKHNjaGVtYS5iZWZvcmVNaWdyYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZW1hLmJlZm9yZU1pZ3JhdGlvbiA9IG51bGw7XG4gICAgfSBlbHNlIGlmIChzY2hlbWEuYmVmb3JlTWlncmF0aW9uICE9PSBudWxsICYmIHR5cGVvZiBzY2hlbWEuYmVmb3JlTWlncmF0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBzY2hlbWEuYmVmb3JlTWlncmF0aW9uIG11c3QgYmUgYSBmdW5jdGlvbi4nO1xuICAgIH1cbiAgICBpZiAoc2NoZW1hLmFmdGVyTWlncmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNjaGVtYS5hZnRlck1pZ3JhdGlvbiA9IG51bGw7XG4gICAgfSBlbHNlIGlmIChzY2hlbWEuYWZ0ZXJNaWdyYXRpb24gIT09IG51bGwgJiYgdHlwZW9mIHNjaGVtYS5hZnRlck1pZ3JhdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2NoZW1hLmFmdGVyTWlncmF0aW9uIG11c3QgYmUgYSBmdW5jdGlvbi4nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVBhZ2VzT3B0aW9ucyhwYWdlcykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocGFnZXMpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gcGFnZXMgbXVzdCBiZSBhbiBvYmplY3QuJztcbiAgICB9XG4gICAgaWYgKHBhZ2VzLmVuYWJsZUxvY2FsaXphdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYWdlcy5lbmFibGVMb2NhbGl6YXRpb24gPSBQYWdlc09wdGlvbnMuZW5hYmxlTG9jYWxpemF0aW9uLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNCb29sZWFuKHBhZ2VzLmVuYWJsZUxvY2FsaXphdGlvbikpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHBhZ2VzLmVuYWJsZUxvY2FsaXphdGlvbiBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgIH1cbiAgICBpZiAocGFnZXMubG9jYWxpemF0aW9uSnNvblBhdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFnZXMubG9jYWxpemF0aW9uSnNvblBhdGggPSBQYWdlc09wdGlvbnMubG9jYWxpemF0aW9uSnNvblBhdGguZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFpc1N0cmluZyhwYWdlcy5sb2NhbGl6YXRpb25Kc29uUGF0aCkpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHBhZ2VzLmxvY2FsaXphdGlvbkpzb25QYXRoIG11c3QgYmUgYSBzdHJpbmcuJztcbiAgICB9XG4gICAgaWYgKHBhZ2VzLmxvY2FsaXphdGlvbkZhbGxiYWNrTG9jYWxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhZ2VzLmxvY2FsaXphdGlvbkZhbGxiYWNrTG9jYWxlID0gUGFnZXNPcHRpb25zLmxvY2FsaXphdGlvbkZhbGxiYWNrTG9jYWxlLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNTdHJpbmcocGFnZXMubG9jYWxpemF0aW9uRmFsbGJhY2tMb2NhbGUpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBwYWdlcy5sb2NhbGl6YXRpb25GYWxsYmFja0xvY2FsZSBtdXN0IGJlIGEgc3RyaW5nLic7XG4gICAgfVxuICAgIGlmIChwYWdlcy5wbGFjZWhvbGRlcnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFnZXMucGxhY2Vob2xkZXJzID0gUGFnZXNPcHRpb25zLnBsYWNlaG9sZGVycy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocGFnZXMucGxhY2Vob2xkZXJzKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScgJiZcbiAgICAgIHR5cGVvZiBwYWdlcy5wbGFjZWhvbGRlcnMgIT09ICdmdW5jdGlvbidcbiAgICApIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHBhZ2VzLnBsYWNlaG9sZGVycyBtdXN0IGJlIGFuIG9iamVjdCBvciBhIGZ1bmN0aW9uLic7XG4gICAgfVxuICAgIGlmIChwYWdlcy5mb3JjZVJlZGlyZWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhZ2VzLmZvcmNlUmVkaXJlY3QgPSBQYWdlc09wdGlvbnMuZm9yY2VSZWRpcmVjdC5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIWlzQm9vbGVhbihwYWdlcy5mb3JjZVJlZGlyZWN0KSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gcGFnZXMuZm9yY2VSZWRpcmVjdCBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgIH1cbiAgICBpZiAocGFnZXMucGFnZXNQYXRoICE9PSB1bmRlZmluZWQgJiYgIWlzU3RyaW5nKHBhZ2VzLnBhZ2VzUGF0aCkpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHBhZ2VzLnBhZ2VzUGF0aCBtdXN0IGJlIGEgc3RyaW5nLic7XG4gICAgfVxuICAgIGlmIChwYWdlcy5wYWdlc0VuZHBvaW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhZ2VzLnBhZ2VzRW5kcG9pbnQgPSBQYWdlc09wdGlvbnMucGFnZXNFbmRwb2ludC5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIWlzU3RyaW5nKHBhZ2VzLnBhZ2VzRW5kcG9pbnQpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBwYWdlcy5wYWdlc0VuZHBvaW50IG11c3QgYmUgYSBzdHJpbmcuJztcbiAgICB9XG4gICAgaWYgKHBhZ2VzLmN1c3RvbVVybHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFnZXMuY3VzdG9tVXJscyA9IFBhZ2VzT3B0aW9ucy5jdXN0b21VcmxzLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocGFnZXMuY3VzdG9tVXJscykgIT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBwYWdlcy5jdXN0b21VcmxzIG11c3QgYmUgYW4gb2JqZWN0Lic7XG4gICAgfVxuICAgIGlmIChwYWdlcy5jdXN0b21Sb3V0ZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFnZXMuY3VzdG9tUm91dGVzID0gUGFnZXNPcHRpb25zLmN1c3RvbVJvdXRlcy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIShwYWdlcy5jdXN0b21Sb3V0ZXMgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHBhZ2VzLmN1c3RvbVJvdXRlcyBtdXN0IGJlIGFuIGFycmF5Lic7XG4gICAgfVxuICAgIGlmIChwYWdlcy5lbmNvZGVQYWdlUGFyYW1IZWFkZXJzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhZ2VzLmVuY29kZVBhZ2VQYXJhbUhlYWRlcnMgPSBQYWdlc09wdGlvbnMuZW5jb2RlUGFnZVBhcmFtSGVhZGVycy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIWlzQm9vbGVhbihwYWdlcy5lbmNvZGVQYWdlUGFyYW1IZWFkZXJzKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gcGFnZXMuZW5jb2RlUGFnZVBhcmFtSGVhZGVycyBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUlkZW1wb3RlbmN5T3B0aW9ucyhpZGVtcG90ZW5jeU9wdGlvbnMpIHtcbiAgICBpZiAoIWlkZW1wb3RlbmN5T3B0aW9ucykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaWRlbXBvdGVuY3lPcHRpb25zLnR0bCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZGVtcG90ZW5jeU9wdGlvbnMudHRsID0gSWRlbXBvdGVuY3lPcHRpb25zLnR0bC5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIWlzTmFOKGlkZW1wb3RlbmN5T3B0aW9ucy50dGwpICYmIGlkZW1wb3RlbmN5T3B0aW9ucy50dGwgPD0gMCkge1xuICAgICAgdGhyb3cgJ2lkZW1wb3RlbmN5IFRUTCB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwIHNlY29uZHMnO1xuICAgIH0gZWxzZSBpZiAoaXNOYU4oaWRlbXBvdGVuY3lPcHRpb25zLnR0bCkpIHtcbiAgICAgIHRocm93ICdpZGVtcG90ZW5jeSBUVEwgdmFsdWUgbXVzdCBiZSBhIG51bWJlcic7XG4gICAgfVxuICAgIGlmICghaWRlbXBvdGVuY3lPcHRpb25zLnBhdGhzKSB7XG4gICAgICBpZGVtcG90ZW5jeU9wdGlvbnMucGF0aHMgPSBJZGVtcG90ZW5jeU9wdGlvbnMucGF0aHMuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCEoaWRlbXBvdGVuY3lPcHRpb25zLnBhdGhzIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICB0aHJvdyAnaWRlbXBvdGVuY3kgcGF0aHMgbXVzdCBiZSBvZiBhbiBhcnJheSBvZiBzdHJpbmdzJztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVBY2NvdW50TG9ja291dFBvbGljeShhY2NvdW50TG9ja291dCkge1xuICAgIGlmIChhY2NvdW50TG9ja291dCkge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgYWNjb3VudExvY2tvdXQuZHVyYXRpb24gIT09ICdudW1iZXInIHx8XG4gICAgICAgIGFjY291bnRMb2Nrb3V0LmR1cmF0aW9uIDw9IDAgfHxcbiAgICAgICAgYWNjb3VudExvY2tvdXQuZHVyYXRpb24gPiA5OTk5OVxuICAgICAgKSB7XG4gICAgICAgIHRocm93ICdBY2NvdW50IGxvY2tvdXQgZHVyYXRpb24gc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwIGFuZCBsZXNzIHRoYW4gMTAwMDAwJztcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICAhTnVtYmVyLmlzSW50ZWdlcihhY2NvdW50TG9ja291dC50aHJlc2hvbGQpIHx8XG4gICAgICAgIGFjY291bnRMb2Nrb3V0LnRocmVzaG9sZCA8IDEgfHxcbiAgICAgICAgYWNjb3VudExvY2tvdXQudGhyZXNob2xkID4gOTk5XG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgJ0FjY291bnQgbG9ja291dCB0aHJlc2hvbGQgc2hvdWxkIGJlIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDAgYW5kIGxlc3MgdGhhbiAxMDAwJztcbiAgICAgIH1cblxuICAgICAgaWYgKGFjY291bnRMb2Nrb3V0LnVubG9ja09uUGFzc3dvcmRSZXNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjY291bnRMb2Nrb3V0LnVubG9ja09uUGFzc3dvcmRSZXNldCA9IEFjY291bnRMb2Nrb3V0T3B0aW9ucy51bmxvY2tPblBhc3N3b3JkUmVzZXQuZGVmYXVsdDtcbiAgICAgIH0gZWxzZSBpZiAoIWlzQm9vbGVhbihhY2NvdW50TG9ja291dC51bmxvY2tPblBhc3N3b3JkUmVzZXQpKSB7XG4gICAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIGFjY291bnRMb2Nrb3V0LnVubG9ja09uUGFzc3dvcmRSZXNldCBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVBhc3N3b3JkUG9saWN5KHBhc3N3b3JkUG9saWN5KSB7XG4gICAgaWYgKHBhc3N3b3JkUG9saWN5KSB7XG4gICAgICBpZiAoXG4gICAgICAgIHBhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkQWdlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgKHR5cGVvZiBwYXNzd29yZFBvbGljeS5tYXhQYXNzd29yZEFnZSAhPT0gJ251bWJlcicgfHwgcGFzc3dvcmRQb2xpY3kubWF4UGFzc3dvcmRBZ2UgPCAwKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93ICdwYXNzd29yZFBvbGljeS5tYXhQYXNzd29yZEFnZSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJztcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBwYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICh0eXBlb2YgcGFzc3dvcmRQb2xpY3kucmVzZXRUb2tlblZhbGlkaXR5RHVyYXRpb24gIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgcGFzc3dvcmRQb2xpY3kucmVzZXRUb2tlblZhbGlkaXR5RHVyYXRpb24gPD0gMClcbiAgICAgICkge1xuICAgICAgICB0aHJvdyAncGFzc3dvcmRQb2xpY3kucmVzZXRUb2tlblZhbGlkaXR5RHVyYXRpb24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcic7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXNzd29yZFBvbGljeS52YWxpZGF0b3JQYXR0ZXJuKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGFzc3dvcmRQb2xpY3kudmFsaWRhdG9yUGF0dGVybiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBwYXNzd29yZFBvbGljeS52YWxpZGF0b3JQYXR0ZXJuID0gbmV3IFJlZ0V4cChwYXNzd29yZFBvbGljeS52YWxpZGF0b3JQYXR0ZXJuKTtcbiAgICAgICAgfSBlbHNlIGlmICghKHBhc3N3b3JkUG9saWN5LnZhbGlkYXRvclBhdHRlcm4gaW5zdGFuY2VvZiBSZWdFeHApKSB7XG4gICAgICAgICAgdGhyb3cgJ3Bhc3N3b3JkUG9saWN5LnZhbGlkYXRvclBhdHRlcm4gbXVzdCBiZSBhIHJlZ2V4IHN0cmluZyBvciBSZWdFeHAgb2JqZWN0Lic7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBwYXNzd29yZFBvbGljeS52YWxpZGF0b3JDYWxsYmFjayAmJlxuICAgICAgICB0eXBlb2YgcGFzc3dvcmRQb2xpY3kudmFsaWRhdG9yQ2FsbGJhY2sgIT09ICdmdW5jdGlvbidcbiAgICAgICkge1xuICAgICAgICB0aHJvdyAncGFzc3dvcmRQb2xpY3kudmFsaWRhdG9yQ2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uLic7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgcGFzc3dvcmRQb2xpY3kuZG9Ob3RBbGxvd1VzZXJuYW1lICYmXG4gICAgICAgIHR5cGVvZiBwYXNzd29yZFBvbGljeS5kb05vdEFsbG93VXNlcm5hbWUgIT09ICdib29sZWFuJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93ICdwYXNzd29yZFBvbGljeS5kb05vdEFsbG93VXNlcm5hbWUgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWUuJztcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBwYXNzd29yZFBvbGljeS5tYXhQYXNzd29yZEhpc3RvcnkgJiZcbiAgICAgICAgKCFOdW1iZXIuaXNJbnRlZ2VyKHBhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkSGlzdG9yeSkgfHxcbiAgICAgICAgICBwYXNzd29yZFBvbGljeS5tYXhQYXNzd29yZEhpc3RvcnkgPD0gMCB8fFxuICAgICAgICAgIHBhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkSGlzdG9yeSA+IDIwKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93ICdwYXNzd29yZFBvbGljeS5tYXhQYXNzd29yZEhpc3RvcnkgbXVzdCBiZSBhbiBpbnRlZ2VyIHJhbmdpbmcgMCAtIDIwJztcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBwYXNzd29yZFBvbGljeS5yZXNldFRva2VuUmV1c2VJZlZhbGlkICYmXG4gICAgICAgIHR5cGVvZiBwYXNzd29yZFBvbGljeS5yZXNldFRva2VuUmV1c2VJZlZhbGlkICE9PSAnYm9vbGVhbidcbiAgICAgICkge1xuICAgICAgICB0aHJvdyAncmVzZXRUb2tlblJldXNlSWZWYWxpZCBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZSc7XG4gICAgICB9XG4gICAgICBpZiAocGFzc3dvcmRQb2xpY3kucmVzZXRUb2tlblJldXNlSWZWYWxpZCAmJiAhcGFzc3dvcmRQb2xpY3kucmVzZXRUb2tlblZhbGlkaXR5RHVyYXRpb24pIHtcbiAgICAgICAgdGhyb3cgJ1lvdSBjYW5ub3QgdXNlIHJlc2V0VG9rZW5SZXVzZUlmVmFsaWQgd2l0aG91dCByZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbic7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgcGFzc3dvcmRQb2xpY3kucmVzZXRQYXNzd29yZFN1Y2Nlc3NPbkludmFsaWRFbWFpbCAmJlxuICAgICAgICB0eXBlb2YgcGFzc3dvcmRQb2xpY3kucmVzZXRQYXNzd29yZFN1Y2Nlc3NPbkludmFsaWRFbWFpbCAhPT0gJ2Jvb2xlYW4nXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgJ3Jlc2V0UGFzc3dvcmRTdWNjZXNzT25JbnZhbGlkRW1haWwgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWUnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXNzd29yZFBvbGljeS52YWxpZGF0b3JQYXR0ZXJuIGlzIGNvbmZpZ3VyZWQgdGhlbiBzZXR1cCBhIGNhbGxiYWNrIHRvIHByb2Nlc3MgdGhlIHBhdHRlcm5cbiAgc3RhdGljIHNldHVwUGFzc3dvcmRWYWxpZGF0b3IocGFzc3dvcmRQb2xpY3kpIHtcbiAgICBpZiAocGFzc3dvcmRQb2xpY3kgJiYgcGFzc3dvcmRQb2xpY3kudmFsaWRhdG9yUGF0dGVybikge1xuICAgICAgcGFzc3dvcmRQb2xpY3kucGF0dGVyblZhbGlkYXRvciA9IHZhbHVlID0+IHtcbiAgICAgICAgcmV0dXJuIHBhc3N3b3JkUG9saWN5LnZhbGlkYXRvclBhdHRlcm4udGVzdCh2YWx1ZSk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVB1YmxpY1NlcnZlclVSTCh7IHB1YmxpY1NlcnZlclVSTCwgcmVxdWlyZWQgPSBmYWxzZSB9KSB7XG4gICAgaWYgKCFwdWJsaWNTZXJ2ZXJVUkwpIHtcbiAgICAgIGlmICghcmVxdWlyZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgJ1RoZSBvcHRpb24gcHVibGljU2VydmVyVVJMIGlzIHJlcXVpcmVkLic7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiBwdWJsaWNTZXJ2ZXJVUkw7XG5cbiAgICBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICghcHVibGljU2VydmVyVVJMLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSAmJiAhcHVibGljU2VydmVyVVJMLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcbiAgICAgICAgdGhyb3cgJ1RoZSBvcHRpb24gcHVibGljU2VydmVyVVJMIG11c3QgYmUgYSB2YWxpZCBVUkwgc3RhcnRpbmcgd2l0aCBodHRwOi8vIG9yIGh0dHBzOi8vLic7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aHJvdyBgVGhlIG9wdGlvbiBwdWJsaWNTZXJ2ZXJVUkwgbXVzdCBiZSBhIHN0cmluZyBvciBmdW5jdGlvbiwgYnV0IGdvdCAke3R5cGV9LmA7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVFbWFpbENvbmZpZ3VyYXRpb24oe1xuICAgIGVtYWlsQWRhcHRlcixcbiAgICBhcHBOYW1lLFxuICAgIHB1YmxpY1NlcnZlclVSTCxcbiAgICBlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbixcbiAgICBlbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkLFxuICB9KSB7XG4gICAgaWYgKCFlbWFpbEFkYXB0ZXIpIHtcbiAgICAgIHRocm93ICdBbiBlbWFpbEFkYXB0ZXIgaXMgcmVxdWlyZWQgZm9yIGUtbWFpbCB2ZXJpZmljYXRpb24gYW5kIHBhc3N3b3JkIHJlc2V0cy4nO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGFwcE5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyAnQW4gYXBwIG5hbWUgaXMgcmVxdWlyZWQgZm9yIGUtbWFpbCB2ZXJpZmljYXRpb24gYW5kIHBhc3N3b3JkIHJlc2V0cy4nO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlUHVibGljU2VydmVyVVJMKHsgcHVibGljU2VydmVyVVJMLCByZXF1aXJlZDogdHJ1ZSB9KTtcbiAgICBpZiAoZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24pIHtcbiAgICAgIGlmIChpc05hTihlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbikpIHtcbiAgICAgICAgdGhyb3cgJ0VtYWlsIHZlcmlmeSB0b2tlbiB2YWxpZGl0eSBkdXJhdGlvbiBtdXN0IGJlIGEgdmFsaWQgbnVtYmVyLic7XG4gICAgICB9IGVsc2UgaWYgKGVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uIDw9IDApIHtcbiAgICAgICAgdGhyb3cgJ0VtYWlsIHZlcmlmeSB0b2tlbiB2YWxpZGl0eSBkdXJhdGlvbiBtdXN0IGJlIGEgdmFsdWUgZ3JlYXRlciB0aGFuIDAuJztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVtYWlsVmVyaWZ5VG9rZW5SZXVzZUlmVmFsaWQgJiYgdHlwZW9mIGVtYWlsVmVyaWZ5VG9rZW5SZXVzZUlmVmFsaWQgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgJ2VtYWlsVmVyaWZ5VG9rZW5SZXVzZUlmVmFsaWQgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWUnO1xuICAgIH1cbiAgICBpZiAoZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCAmJiAhZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24pIHtcbiAgICAgIHRocm93ICdZb3UgY2Fubm90IHVzZSBlbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkIHdpdGhvdXQgZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUZpbGVVcGxvYWRPcHRpb25zKGZpbGVVcGxvYWQpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKGZpbGVVcGxvYWQgPT0gbnVsbCB8fCB0eXBlb2YgZmlsZVVwbG9hZCAhPT0gJ29iamVjdCcgfHwgZmlsZVVwbG9hZCBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgIHRocm93ICdmaWxlVXBsb2FkIG11c3QgYmUgYW4gb2JqZWN0IHZhbHVlLic7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBSZWZlcmVuY2VFcnJvcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICBpZiAoZmlsZVVwbG9hZC5lbmFibGVGb3JBbm9ueW1vdXNVc2VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZpbGVVcGxvYWQuZW5hYmxlRm9yQW5vbnltb3VzVXNlciA9IEZpbGVVcGxvYWRPcHRpb25zLmVuYWJsZUZvckFub255bW91c1VzZXIuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaWxlVXBsb2FkLmVuYWJsZUZvckFub255bW91c1VzZXIgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgJ2ZpbGVVcGxvYWQuZW5hYmxlRm9yQW5vbnltb3VzVXNlciBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZS4nO1xuICAgIH1cbiAgICBpZiAoZmlsZVVwbG9hZC5lbmFibGVGb3JQdWJsaWMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZmlsZVVwbG9hZC5lbmFibGVGb3JQdWJsaWMgPSBGaWxlVXBsb2FkT3B0aW9ucy5lbmFibGVGb3JQdWJsaWMuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaWxlVXBsb2FkLmVuYWJsZUZvclB1YmxpYyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyAnZmlsZVVwbG9hZC5lbmFibGVGb3JQdWJsaWMgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWUuJztcbiAgICB9XG4gICAgaWYgKGZpbGVVcGxvYWQuZW5hYmxlRm9yQXV0aGVudGljYXRlZFVzZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZmlsZVVwbG9hZC5lbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciA9IEZpbGVVcGxvYWRPcHRpb25zLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZmlsZVVwbG9hZC5lbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyAnZmlsZVVwbG9hZC5lbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZS4nO1xuICAgIH1cbiAgICBpZiAoZmlsZVVwbG9hZC5maWxlRXh0ZW5zaW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaWxlVXBsb2FkLmZpbGVFeHRlbnNpb25zID0gRmlsZVVwbG9hZE9wdGlvbnMuZmlsZUV4dGVuc2lvbnMuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KGZpbGVVcGxvYWQuZmlsZUV4dGVuc2lvbnMpKSB7XG4gICAgICB0aHJvdyAnZmlsZVVwbG9hZC5maWxlRXh0ZW5zaW9ucyBtdXN0IGJlIGFuIGFycmF5Lic7XG4gICAgfVxuICAgIGlmIChmaWxlVXBsb2FkLmFsbG93ZWRGaWxlVXJsRG9tYWlucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaWxlVXBsb2FkLmFsbG93ZWRGaWxlVXJsRG9tYWlucyA9IEZpbGVVcGxvYWRPcHRpb25zLmFsbG93ZWRGaWxlVXJsRG9tYWlucy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoZmlsZVVwbG9hZC5hbGxvd2VkRmlsZVVybERvbWFpbnMpKSB7XG4gICAgICB0aHJvdyAnZmlsZVVwbG9hZC5hbGxvd2VkRmlsZVVybERvbWFpbnMgbXVzdCBiZSBhbiBhcnJheS4nO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGRvbWFpbiBvZiBmaWxlVXBsb2FkLmFsbG93ZWRGaWxlVXJsRG9tYWlucykge1xuICAgICAgICBpZiAodHlwZW9mIGRvbWFpbiAhPT0gJ3N0cmluZycgfHwgZG9tYWluID09PSAnJykge1xuICAgICAgICAgIHRocm93ICdmaWxlVXBsb2FkLmFsbG93ZWRGaWxlVXJsRG9tYWlucyBtdXN0IGNvbnRhaW4gb25seSBub24tZW1wdHkgc3RyaW5ncy4nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlSXBzKGZpZWxkLCBtYXN0ZXJLZXlJcHMpIHtcbiAgICBmb3IgKGxldCBpcCBvZiBtYXN0ZXJLZXlJcHMpIHtcbiAgICAgIGlmIChpcC5pbmNsdWRlcygnLycpKSB7XG4gICAgICAgIGlwID0gaXAuc3BsaXQoJy8nKVswXTtcbiAgICAgIH1cbiAgICAgIGlmICghbmV0LmlzSVAoaXApKSB7XG4gICAgICAgIHRocm93IGBUaGUgUGFyc2UgU2VydmVyIG9wdGlvbiBcIiR7ZmllbGR9XCIgY29udGFpbnMgYW4gaW52YWxpZCBJUCBhZGRyZXNzIFwiJHtpcH1cIi5gO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzKGVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzKSB7XG4gICAgaWYgKGVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzICYmIHR5cGVvZiBlbmFibGVJbnNlY3VyZUF1dGhBZGFwdGVycyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBlbmFibGVJbnNlY3VyZUF1dGhBZGFwdGVycyBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgIH1cbiAgICBpZiAoZW5hYmxlSW5zZWN1cmVBdXRoQWRhcHRlcnMpIHtcbiAgICAgIERlcHJlY2F0b3IubG9nUnVudGltZURlcHJlY2F0aW9uKHsgdXNhZ2U6ICdpbnNlY3VyZSBhZGFwdGVyJyB9KTtcbiAgICB9XG4gIH1cblxuICBnZXQgbW91bnQoKSB7XG4gICAgdmFyIG1vdW50ID0gdGhpcy5fbW91bnQ7XG4gICAgaWYgKHRoaXMucHVibGljU2VydmVyVVJMKSB7XG4gICAgICBtb3VudCA9IHRoaXMucHVibGljU2VydmVyVVJMO1xuICAgIH1cbiAgICByZXR1cm4gbW91bnQ7XG4gIH1cblxuICBzZXQgbW91bnQobmV3VmFsdWUpIHtcbiAgICB0aGlzLl9tb3VudCA9IG5ld1ZhbHVlO1xuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlU2Vzc2lvbkNvbmZpZ3VyYXRpb24oc2Vzc2lvbkxlbmd0aCwgZXhwaXJlSW5hY3RpdmVTZXNzaW9ucykge1xuICAgIGlmIChleHBpcmVJbmFjdGl2ZVNlc3Npb25zKSB7XG4gICAgICBpZiAoaXNOYU4oc2Vzc2lvbkxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgJ1Nlc3Npb24gbGVuZ3RoIG11c3QgYmUgYSB2YWxpZCBudW1iZXIuJztcbiAgICAgIH0gZWxzZSBpZiAoc2Vzc2lvbkxlbmd0aCA8PSAwKSB7XG4gICAgICAgIHRocm93ICdTZXNzaW9uIGxlbmd0aCBtdXN0IGJlIGEgdmFsdWUgZ3JlYXRlciB0aGFuIDAuJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVEZWZhdWx0TGltaXQoZGVmYXVsdExpbWl0KSB7XG4gICAgaWYgKGRlZmF1bHRMaW1pdCA9PSBudWxsKSB7XG4gICAgICBkZWZhdWx0TGltaXQgPSBQYXJzZVNlcnZlck9wdGlvbnMuZGVmYXVsdExpbWl0LmRlZmF1bHQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGVmYXVsdExpbWl0ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgJ0RlZmF1bHQgbGltaXQgbXVzdCBiZSBhIG51bWJlci4nO1xuICAgIH1cbiAgICBpZiAoZGVmYXVsdExpbWl0IDw9IDApIHtcbiAgICAgIHRocm93ICdEZWZhdWx0IGxpbWl0IG11c3QgYmUgYSB2YWx1ZSBncmVhdGVyIHRoYW4gMC4nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZU1heExpbWl0KG1heExpbWl0KSB7XG4gICAgaWYgKG1heExpbWl0IDw9IDApIHtcbiAgICAgIHRocm93ICdNYXggbGltaXQgbXVzdCBiZSBhIHZhbHVlIGdyZWF0ZXIgdGhhbiAwLic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlQWxsb3dIZWFkZXJzKGFsbG93SGVhZGVycykge1xuICAgIGlmICghW251bGwsIHVuZGVmaW5lZF0uaW5jbHVkZXMoYWxsb3dIZWFkZXJzKSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYWxsb3dIZWFkZXJzKSkge1xuICAgICAgICBhbGxvd0hlYWRlcnMuZm9yRWFjaChoZWFkZXIgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgaGVhZGVyICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgJ0FsbG93IGhlYWRlcnMgbXVzdCBvbmx5IGNvbnRhaW4gc3RyaW5ncyc7XG4gICAgICAgICAgfSBlbHNlIGlmICghaGVhZGVyLnRyaW0oKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93ICdBbGxvdyBoZWFkZXJzIG11c3Qgbm90IGNvbnRhaW4gZW1wdHkgc3RyaW5ncyc7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93ICdBbGxvdyBoZWFkZXJzIG11c3QgYmUgYW4gYXJyYXknO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUxvZ0xldmVscyhsb2dMZXZlbHMpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhMb2dMZXZlbHMpKSB7XG4gICAgICBpZiAobG9nTGV2ZWxzW2tleV0pIHtcbiAgICAgICAgaWYgKHZhbGlkTG9nTGV2ZWxzLmluZGV4T2YobG9nTGV2ZWxzW2tleV0pID09PSAtMSkge1xuICAgICAgICAgIHRocm93IGAnJHtrZXl9JyBtdXN0IGJlIG9uZSBvZiAke0pTT04uc3RyaW5naWZ5KHZhbGlkTG9nTGV2ZWxzKX1gO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dMZXZlbHNba2V5XSA9IExvZ0xldmVsc1trZXldLmRlZmF1bHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlRGF0YWJhc2VPcHRpb25zKGRhdGFiYXNlT3B0aW9ucykge1xuICAgIGlmIChkYXRhYmFzZU9wdGlvbnMgPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZGF0YWJhc2VPcHRpb25zKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgIHRocm93IGBkYXRhYmFzZU9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3RgO1xuICAgIH1cblxuICAgIGlmIChkYXRhYmFzZU9wdGlvbnMuZW5hYmxlU2NoZW1hSG9va3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGF0YWJhc2VPcHRpb25zLmVuYWJsZVNjaGVtYUhvb2tzID0gRGF0YWJhc2VPcHRpb25zLmVuYWJsZVNjaGVtYUhvb2tzLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YWJhc2VPcHRpb25zLmVuYWJsZVNjaGVtYUhvb2tzICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IGBkYXRhYmFzZU9wdGlvbnMuZW5hYmxlU2NoZW1hSG9va3MgbXVzdCBiZSBhIGJvb2xlYW5gO1xuICAgIH1cbiAgICBpZiAoZGF0YWJhc2VPcHRpb25zLnNjaGVtYUNhY2hlVHRsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRhdGFiYXNlT3B0aW9ucy5zY2hlbWFDYWNoZVR0bCA9IERhdGFiYXNlT3B0aW9ucy5zY2hlbWFDYWNoZVR0bC5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGFiYXNlT3B0aW9ucy5zY2hlbWFDYWNoZVR0bCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IGBkYXRhYmFzZU9wdGlvbnMuc2NoZW1hQ2FjaGVUdGwgbXVzdCBiZSBhIG51bWJlcmA7XG4gICAgfVxuICAgIGlmIChkYXRhYmFzZU9wdGlvbnMuYWxsb3dQdWJsaWNFeHBsYWluID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRhdGFiYXNlT3B0aW9ucy5hbGxvd1B1YmxpY0V4cGxhaW4gPSBEYXRhYmFzZU9wdGlvbnMuYWxsb3dQdWJsaWNFeHBsYWluLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YWJhc2VPcHRpb25zLmFsbG93UHVibGljRXhwbGFpbiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBgUGFyc2UgU2VydmVyIG9wdGlvbiAnZGF0YWJhc2VPcHRpb25zLmFsbG93UHVibGljRXhwbGFpbicgbXVzdCBiZSBhIGJvb2xlYW4uYDtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVSYXRlTGltaXQocmF0ZUxpbWl0KSB7XG4gICAgaWYgKCFyYXRlTGltaXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHJhdGVMaW1pdCkgIT09ICdbb2JqZWN0IE9iamVjdF0nICYmXG4gICAgICAhQXJyYXkuaXNBcnJheShyYXRlTGltaXQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBgcmF0ZUxpbWl0IG11c3QgYmUgYW4gYXJyYXkgb3Igb2JqZWN0YDtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IEFycmF5LmlzQXJyYXkocmF0ZUxpbWl0KSA/IHJhdGVMaW1pdCA6IFtyYXRlTGltaXRdO1xuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob3B0aW9uKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgICAgdGhyb3cgYHJhdGVMaW1pdCBtdXN0IGJlIGFuIGFycmF5IG9mIG9iamVjdHNgO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbi5yZXF1ZXN0UGF0aCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IGByYXRlTGltaXQucmVxdWVzdFBhdGggbXVzdCBiZSBkZWZpbmVkYDtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uLnJlcXVlc3RQYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBgcmF0ZUxpbWl0LnJlcXVlc3RQYXRoIG11c3QgYmUgYSBzdHJpbmdgO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSB0aGF0IHRoZSBwYXRoIGlzIHZhbGlkIHBhdGgtdG8tcmVnZXhwIHN5bnRheFxuICAgICAgdHJ5IHtcbiAgICAgICAgcGF0aFRvUmVnZXhwKG9wdGlvbi5yZXF1ZXN0UGF0aCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aHJvdyBgcmF0ZUxpbWl0LnJlcXVlc3RQYXRoIFwiJHtvcHRpb24ucmVxdWVzdFBhdGh9XCIgaXMgbm90IHZhbGlkOiAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbi5yZXF1ZXN0VGltZVdpbmRvdyA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IGByYXRlTGltaXQucmVxdWVzdFRpbWVXaW5kb3cgbXVzdCBiZSBkZWZpbmVkYDtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uLnJlcXVlc3RUaW1lV2luZG93ICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBgcmF0ZUxpbWl0LnJlcXVlc3RUaW1lV2luZG93IG11c3QgYmUgYSBudW1iZXJgO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbi5pbmNsdWRlSW50ZXJuYWxSZXF1ZXN0cyAmJiB0eXBlb2Ygb3B0aW9uLmluY2x1ZGVJbnRlcm5hbFJlcXVlc3RzICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhyb3cgYHJhdGVMaW1pdC5pbmNsdWRlSW50ZXJuYWxSZXF1ZXN0cyBtdXN0IGJlIGEgYm9vbGVhbmA7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uLnJlcXVlc3RDb3VudCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IGByYXRlTGltaXQucmVxdWVzdENvdW50IG11c3QgYmUgZGVmaW5lZGA7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbi5yZXF1ZXN0Q291bnQgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IGByYXRlTGltaXQucmVxdWVzdENvdW50IG11c3QgYmUgYSBudW1iZXJgO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbi5lcnJvclJlc3BvbnNlTWVzc2FnZSAmJiB0eXBlb2Ygb3B0aW9uLmVycm9yUmVzcG9uc2VNZXNzYWdlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBgcmF0ZUxpbWl0LmVycm9yUmVzcG9uc2VNZXNzYWdlIG11c3QgYmUgYSBzdHJpbmdgO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5rZXlzKFBhcnNlU2VydmVyLlJhdGVMaW1pdFpvbmUpO1xuICAgICAgaWYgKG9wdGlvbi56b25lICYmICFvcHRpb25zLmluY2x1ZGVzKG9wdGlvbi56b25lKSkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgSW50bC5MaXN0Rm9ybWF0KCdlbicsIHsgc3R5bGU6ICdzaG9ydCcsIHR5cGU6ICdkaXNqdW5jdGlvbicgfSk7XG4gICAgICAgIHRocm93IGByYXRlTGltaXQuem9uZSBtdXN0IGJlIG9uZSBvZiAke2Zvcm1hdHRlci5mb3JtYXQob3B0aW9ucyl9YDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZW5lcmF0ZUVtYWlsVmVyaWZ5VG9rZW5FeHBpcmVzQXQoKSB7XG4gICAgaWYgKCF0aGlzLnZlcmlmeVVzZXJFbWFpbHMgfHwgIXRoaXMuZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIHJldHVybiBuZXcgRGF0ZShub3cuZ2V0VGltZSgpICsgdGhpcy5lbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbiAqIDEwMDApO1xuICB9XG5cbiAgZ2VuZXJhdGVQYXNzd29yZFJlc2V0VG9rZW5FeHBpcmVzQXQoKSB7XG4gICAgaWYgKCF0aGlzLnBhc3N3b3JkUG9saWN5IHx8ICF0aGlzLnBhc3N3b3JkUG9saWN5LnJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIHJldHVybiBuZXcgRGF0ZShub3cuZ2V0VGltZSgpICsgdGhpcy5wYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbiAqIDEwMDApO1xuICB9XG5cbiAgZ2VuZXJhdGVTZXNzaW9uRXhwaXJlc0F0KCkge1xuICAgIGlmICghdGhpcy5leHBpcmVJbmFjdGl2ZVNlc3Npb25zKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgbm93ID0gbmV3IERhdGUoKTtcbiAgICByZXR1cm4gbmV3IERhdGUobm93LmdldFRpbWUoKSArIHRoaXMuc2Vzc2lvbkxlbmd0aCAqIDEwMDApO1xuICB9XG5cbiAgdW5yZWdpc3RlclJhdGVMaW1pdGVycygpIHtcbiAgICBsZXQgaSA9IHRoaXMucmF0ZUxpbWl0cz8ubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGNvbnN0IGxpbWl0ID0gdGhpcy5yYXRlTGltaXRzW2ldO1xuICAgICAgaWYgKGxpbWl0LmNsb3VkKSB7XG4gICAgICAgIHRoaXMucmF0ZUxpbWl0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGludmFsaWRMaW5rVVJMKCkge1xuICAgIHJldHVybiB0aGlzLmN1c3RvbVBhZ2VzLmludmFsaWRMaW5rIHx8IGAke3RoaXMucHVibGljU2VydmVyVVJMfS9hcHBzL2ludmFsaWRfbGluay5odG1sYDtcbiAgfVxuXG4gIGdldCBpbnZhbGlkVmVyaWZpY2F0aW9uTGlua1VSTCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXN0b21QYWdlcy5pbnZhbGlkVmVyaWZpY2F0aW9uTGluayB8fFxuICAgICAgYCR7dGhpcy5wdWJsaWNTZXJ2ZXJVUkx9L2FwcHMvaW52YWxpZF92ZXJpZmljYXRpb25fbGluay5odG1sYFxuICAgICk7XG4gIH1cblxuICBnZXQgbGlua1NlbmRTdWNjZXNzVVJMKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmN1c3RvbVBhZ2VzLmxpbmtTZW5kU3VjY2VzcyB8fCBgJHt0aGlzLnB1YmxpY1NlcnZlclVSTH0vYXBwcy9saW5rX3NlbmRfc3VjY2Vzcy5odG1sYFxuICAgICk7XG4gIH1cblxuICBnZXQgbGlua1NlbmRGYWlsVVJMKCkge1xuICAgIHJldHVybiB0aGlzLmN1c3RvbVBhZ2VzLmxpbmtTZW5kRmFpbCB8fCBgJHt0aGlzLnB1YmxpY1NlcnZlclVSTH0vYXBwcy9saW5rX3NlbmRfZmFpbC5odG1sYDtcbiAgfVxuXG4gIGdldCB2ZXJpZnlFbWFpbFN1Y2Nlc3NVUkwoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY3VzdG9tUGFnZXMudmVyaWZ5RW1haWxTdWNjZXNzIHx8XG4gICAgICBgJHt0aGlzLnB1YmxpY1NlcnZlclVSTH0vYXBwcy92ZXJpZnlfZW1haWxfc3VjY2Vzcy5odG1sYFxuICAgICk7XG4gIH1cblxuICBnZXQgY2hvb3NlUGFzc3dvcmRVUkwoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tUGFnZXMuY2hvb3NlUGFzc3dvcmQgfHwgYCR7dGhpcy5wdWJsaWNTZXJ2ZXJVUkx9L2FwcHMvY2hvb3NlX3Bhc3N3b3JkYDtcbiAgfVxuXG4gIGdldCByZXF1ZXN0UmVzZXRQYXNzd29yZFVSTCgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5wdWJsaWNTZXJ2ZXJVUkx9LyR7dGhpcy5wYWdlc0VuZHBvaW50fS8ke3RoaXMuYXBwbGljYXRpb25JZH0vcmVxdWVzdF9wYXNzd29yZF9yZXNldGA7XG4gIH1cblxuICBnZXQgcGFzc3dvcmRSZXNldFN1Y2Nlc3NVUkwoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY3VzdG9tUGFnZXMucGFzc3dvcmRSZXNldFN1Y2Nlc3MgfHxcbiAgICAgIGAke3RoaXMucHVibGljU2VydmVyVVJMfS9hcHBzL3Bhc3N3b3JkX3Jlc2V0X3N1Y2Nlc3MuaHRtbGBcbiAgICApO1xuICB9XG5cbiAgZ2V0IHBhcnNlRnJhbWVVUkwoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tUGFnZXMucGFyc2VGcmFtZVVSTDtcbiAgfVxuXG4gIGdldCB2ZXJpZnlFbWFpbFVSTCgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5wdWJsaWNTZXJ2ZXJVUkx9LyR7dGhpcy5wYWdlc0VuZHBvaW50fS8ke3RoaXMuYXBwbGljYXRpb25JZH0vdmVyaWZ5X2VtYWlsYDtcbiAgfVxuXG4gIGFzeW5jIGxvYWRNYXN0ZXJLZXkoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLm1hc3RlcktleSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgdHRsSXNFbXB0eSA9ICF0aGlzLm1hc3RlcktleVR0bDtcbiAgICAgIGNvbnN0IGlzRXhwaXJlZCA9IHRoaXMubWFzdGVyS2V5Q2FjaGU/LmV4cGlyZXNBdCAmJiB0aGlzLm1hc3RlcktleUNhY2hlLmV4cGlyZXNBdCA8IG5ldyBEYXRlKCk7XG5cbiAgICAgIGlmICgoIWlzRXhwaXJlZCB8fCB0dGxJc0VtcHR5KSAmJiB0aGlzLm1hc3RlcktleUNhY2hlPy5tYXN0ZXJLZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFzdGVyS2V5Q2FjaGUubWFzdGVyS2V5O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXN0ZXJLZXkgPSBhd2FpdCB0aGlzLm1hc3RlcktleSgpO1xuXG4gICAgICBjb25zdCBleHBpcmVzQXQgPSB0aGlzLm1hc3RlcktleVR0bCA/IG5ldyBEYXRlKERhdGUubm93KCkgKyAxMDAwICogdGhpcy5tYXN0ZXJLZXlUdGwpIDogbnVsbFxuICAgICAgdGhpcy5tYXN0ZXJLZXlDYWNoZSA9IHsgbWFzdGVyS2V5LCBleHBpcmVzQXQgfTtcbiAgICAgIENvbmZpZy5wdXQodGhpcyk7XG5cbiAgICAgIHJldHVybiB0aGlzLm1hc3RlcktleUNhY2hlLm1hc3RlcktleTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5tYXN0ZXJLZXk7XG4gIH1cblxuICBnZXQgcGFnZXNFbmRwb2ludCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlcyAmJiB0aGlzLnBhZ2VzLnBhZ2VzRW5kcG9pbnRcbiAgICAgID8gdGhpcy5wYWdlcy5wYWdlc0VuZHBvaW50XG4gICAgICA6ICdhcHBzJztcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDb25maWc7XG5tb2R1bGUuZXhwb3J0cyA9IENvbmZpZztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBSUEsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsYUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsSUFBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksTUFBQSxHQUFBRCxzQkFBQSxDQUFB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QUFJLENBQUN4TCxlQUFlLElBQUksSUFBSSxDQUFDbUYsYUFBYSxJQUFJLElBQUksQ0FBQ3ZILGFBQWEsZUFBZTtFQUMzRjtFQUVBLE1BQU02TixhQUFhQSxDQUFBLEVBQUc7SUFDcEIsSUFBSSxPQUFPLElBQUksQ0FBQ2pMLFNBQVMsS0FBSyxVQUFVLEVBQUU7TUFDeEMsTUFBTWtMLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQ0MsWUFBWTtNQUNyQyxNQUFNQyxTQUFTLEdBQUcsSUFBSSxDQUFDQyxjQUFjLEVBQUVDLFNBQVMsSUFBSSxJQUFJLENBQUNELGNBQWMsQ0FBQ0MsU0FBUyxHQUFHLElBQUkvQixJQUFJLENBQUMsQ0FBQztNQUU5RixJQUFJLENBQUMsQ0FBQzZCLFNBQVMsSUFBSUYsVUFBVSxLQUFLLElBQUksQ0FBQ0csY0FBYyxFQUFFckwsU0FBUyxFQUFFO1FBQ2hFLE9BQU8sSUFBSSxDQUFDcUwsY0FBYyxDQUFDckwsU0FBUztNQUN0QztNQUVBLE1BQU1BLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQ0EsU0FBUyxDQUFDLENBQUM7TUFFeEMsTUFBTXNMLFNBQVMsR0FBRyxJQUFJLENBQUNILFlBQVksR0FBRyxJQUFJNUIsSUFBSSxDQUFDQSxJQUFJLENBQUNELEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQzZCLFlBQVksQ0FBQyxHQUFHLElBQUk7TUFDNUYsSUFBSSxDQUFDRSxjQUFjLEdBQUc7UUFBRXJMLFNBQVM7UUFBRXNMO01BQVUsQ0FBQztNQUM5Q3BPLE1BQU0sQ0FBQzZCLEdBQUcsQ0FBQyxJQUFJLENBQUM7TUFFaEIsT0FBTyxJQUFJLENBQUNzTSxjQUFjLENBQUNyTCxTQUFTO0lBQ3RDO0lBRUEsT0FBTyxJQUFJLENBQUNBLFNBQVM7RUFDdkI7RUFFQSxJQUFJMkUsYUFBYUEsQ0FBQSxFQUFHO0lBQ2xCLE9BQU8sSUFBSSxDQUFDcEUsS0FBSyxJQUFJLElBQUksQ0FBQ0EsS0FBSyxDQUFDb0UsYUFBYSxHQUN6QyxJQUFJLENBQUNwRSxLQUFLLENBQUNvRSxhQUFhLEdBQ3hCLE1BQU07RUFDWjtBQUNGO0FBQUM0RyxPQUFBLENBQUFyTyxNQUFBLEdBQUFBLE1BQUE7QUFBQSxJQUFBc08sUUFBQSxHQUFBRCxPQUFBLENBQUE1TyxPQUFBLEdBRWNPLE1BQU07QUFDckJ1TyxNQUFNLENBQUNGLE9BQU8sR0FBR3JPLE1BQU0iLCJpZ25vcmVMaXN0IjpbXX0=
740
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwicmVxdWlyZSIsIl9wYXRoVG9SZWdleHAiLCJfbmV0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jYWNoZSIsIl9EYXRhYmFzZUNvbnRyb2xsZXIiLCJfTG9nZ2VyQ29udHJvbGxlciIsIl9wYWNrYWdlIiwiX0RlZmluaXRpb25zIiwiX1BhcnNlIiwiX0RlcHJlY2F0b3IiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJyZW1vdmVUcmFpbGluZ1NsYXNoIiwic3RyIiwiZW5kc1dpdGgiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJhc3luY0tleXMiLCJDb25maWciLCJnZXQiLCJhcHBsaWNhdGlvbklkIiwibW91bnQiLCJjYWNoZUluZm8iLCJBcHBDYWNoZSIsImNvbmZpZyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwiZGF0YWJhc2UiLCJEYXRhYmFzZUNvbnRyb2xsZXIiLCJkYXRhYmFzZUNvbnRyb2xsZXIiLCJhZGFwdGVyIiwiZ2VuZXJhdGVTZXNzaW9uRXhwaXJlc0F0IiwiYmluZCIsImdlbmVyYXRlRW1haWxWZXJpZnlUb2tlbkV4cGlyZXNBdCIsInZlcnNpb24iLCJsb2FkS2V5cyIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJlcnJvciIsIkVycm9yIiwibWVzc2FnZSIsImNhY2hlZENvbmZpZyIsImFwcElkIiwidXBkYXRlZENvbmZpZyIsInB1dCIsInRyYW5zZm9ybUNvbmZpZ3VyYXRpb24iLCJzZXJ2ZXJDb25maWd1cmF0aW9uIiwiaW5jbHVkZXMiLCJ2YWxpZGF0ZU9wdGlvbnMiLCJ2YWxpZGF0ZUNvbnRyb2xsZXJzIiwic2V0dXBQYXNzd29yZFZhbGlkYXRvciIsInBhc3N3b3JkUG9saWN5IiwiY3VzdG9tUGFnZXMiLCJwdWJsaWNTZXJ2ZXJVUkwiLCJyZXZva2VTZXNzaW9uT25QYXNzd29yZFJlc2V0IiwiZXhwaXJlSW5hY3RpdmVTZXNzaW9ucyIsInNlc3Npb25MZW5ndGgiLCJkZWZhdWx0TGltaXQiLCJtYXhMaW1pdCIsImFjY291bnRMb2Nrb3V0IiwibWFzdGVyS2V5SXBzIiwibWFzdGVyS2V5IiwibWFpbnRlbmFuY2VLZXkiLCJtYWludGVuYW5jZUtleUlwcyIsInJlYWRPbmx5TWFzdGVyS2V5IiwicmVhZE9ubHlNYXN0ZXJLZXlJcHMiLCJhbGxvd0hlYWRlcnMiLCJpZGVtcG90ZW5jeU9wdGlvbnMiLCJmaWxlVXBsb2FkIiwicGFnZXMiLCJzZWN1cml0eSIsImVuZm9yY2VQcml2YXRlVXNlcnMiLCJlbmFibGVJbnNlY3VyZUF1dGhBZGFwdGVycyIsInNjaGVtYSIsInJlcXVlc3RLZXl3b3JkRGVueWxpc3QiLCJhbGxvd0V4cGlyZWRBdXRoRGF0YVRva2VuIiwibG9nTGV2ZWxzIiwicmF0ZUxpbWl0IiwiZGF0YWJhc2VPcHRpb25zIiwiZXh0ZW5kU2Vzc2lvbk9uVXNlIiwiYWxsb3dDbGllbnRDbGFzc0NyZWF0aW9uIiwidmFsaWRhdGVBY2NvdW50TG9ja291dFBvbGljeSIsInZhbGlkYXRlUGFzc3dvcmRQb2xpY3kiLCJ2YWxpZGF0ZUZpbGVVcGxvYWRPcHRpb25zIiwidmFsaWRhdGVQdWJsaWNTZXJ2ZXJVUkwiLCJ2YWxpZGF0ZVNlc3Npb25Db25maWd1cmF0aW9uIiwidmFsaWRhdGVJcHMiLCJ2YWxpZGF0ZURlZmF1bHRMaW1pdCIsInZhbGlkYXRlTWF4TGltaXQiLCJ2YWxpZGF0ZUFsbG93SGVhZGVycyIsInZhbGlkYXRlSWRlbXBvdGVuY3lPcHRpb25zIiwidmFsaWRhdGVQYWdlc09wdGlvbnMiLCJ2YWxpZGF0ZVNlY3VyaXR5T3B0aW9ucyIsInZhbGlkYXRlU2NoZW1hT3B0aW9ucyIsInZhbGlkYXRlRW5mb3JjZVByaXZhdGVVc2VycyIsInZhbGlkYXRlRW5hYmxlSW5zZWN1cmVBdXRoQWRhcHRlcnMiLCJ2YWxpZGF0ZUFsbG93RXhwaXJlZEF1dGhEYXRhVG9rZW4iLCJ2YWxpZGF0ZVJlcXVlc3RLZXl3b3JkRGVueWxpc3QiLCJ2YWxpZGF0ZVJhdGVMaW1pdCIsInZhbGlkYXRlTG9nTGV2ZWxzIiwidmFsaWRhdGVEYXRhYmFzZU9wdGlvbnMiLCJ2YWxpZGF0ZUN1c3RvbVBhZ2VzIiwidmFsaWRhdGVBbGxvd0NsaWVudENsYXNzQ3JlYXRpb24iLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJ2ZXJpZnlVc2VyRW1haWxzIiwidXNlckNvbnRyb2xsZXIiLCJhcHBOYW1lIiwiX3B1YmxpY1NlcnZlclVSTCIsImVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uIiwiZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCIsImVtYWlsQWRhcHRlciIsInZhbGlkYXRlRW1haWxDb25maWd1cmF0aW9uIiwidW5kZWZpbmVkIiwiQXJyYXkiLCJpc0FycmF5IiwiZW5hYmxlQ2hlY2siLCJTZWN1cml0eU9wdGlvbnMiLCJpc0Jvb2xlYW4iLCJlbmFibGVDaGVja0xvZyIsImRlZmluaXRpb25zIiwiU2NoZW1hT3B0aW9ucyIsInN0cmljdCIsImRlbGV0ZUV4dHJhRmllbGRzIiwicmVjcmVhdGVNb2RpZmllZEZpZWxkcyIsImxvY2tTY2hlbWFzIiwiYmVmb3JlTWlncmF0aW9uIiwiYWZ0ZXJNaWdyYXRpb24iLCJlbmFibGVMb2NhbGl6YXRpb24iLCJQYWdlc09wdGlvbnMiLCJsb2NhbGl6YXRpb25Kc29uUGF0aCIsImlzU3RyaW5nIiwibG9jYWxpemF0aW9uRmFsbGJhY2tMb2NhbGUiLCJwbGFjZWhvbGRlcnMiLCJmb3JjZVJlZGlyZWN0IiwicGFnZXNQYXRoIiwicGFnZXNFbmRwb2ludCIsImN1c3RvbVVybHMiLCJjdXN0b21Sb3V0ZXMiLCJlbmNvZGVQYWdlUGFyYW1IZWFkZXJzIiwidHRsIiwiSWRlbXBvdGVuY3lPcHRpb25zIiwiaXNOYU4iLCJwYXRocyIsImR1cmF0aW9uIiwiTnVtYmVyIiwiaXNJbnRlZ2VyIiwidGhyZXNob2xkIiwidW5sb2NrT25QYXNzd29yZFJlc2V0IiwiQWNjb3VudExvY2tvdXRPcHRpb25zIiwibWF4UGFzc3dvcmRBZ2UiLCJyZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbiIsInZhbGlkYXRvclBhdHRlcm4iLCJSZWdFeHAiLCJ2YWxpZGF0b3JDYWxsYmFjayIsImRvTm90QWxsb3dVc2VybmFtZSIsIm1heFBhc3N3b3JkSGlzdG9yeSIsInJlc2V0VG9rZW5SZXVzZUlmVmFsaWQiLCJyZXNldFBhc3N3b3JkU3VjY2Vzc09uSW52YWxpZEVtYWlsIiwicGF0dGVyblZhbGlkYXRvciIsInZhbHVlIiwidGVzdCIsInJlcXVpcmVkIiwidHlwZSIsInN0YXJ0c1dpdGgiLCJSZWZlcmVuY2VFcnJvciIsImVuYWJsZUZvckFub255bW91c1VzZXIiLCJGaWxlVXBsb2FkT3B0aW9ucyIsImVuYWJsZUZvclB1YmxpYyIsImVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyIiwiZmlsZUV4dGVuc2lvbnMiLCJhbGxvd2VkRmlsZVVybERvbWFpbnMiLCJkb21haW4iLCJmaWVsZCIsImlwIiwic3BsaXQiLCJuZXQiLCJpc0lQIiwiRGVwcmVjYXRvciIsImxvZ1J1bnRpbWVEZXByZWNhdGlvbiIsInVzYWdlIiwiX21vdW50IiwibmV3VmFsdWUiLCJQYXJzZVNlcnZlck9wdGlvbnMiLCJoZWFkZXIiLCJ0cmltIiwiTG9nTGV2ZWxzIiwidmFsaWRMb2dMZXZlbHMiLCJpbmRleE9mIiwiSlNPTiIsInN0cmluZ2lmeSIsImVuYWJsZVNjaGVtYUhvb2tzIiwiRGF0YWJhc2VPcHRpb25zIiwic2NoZW1hQ2FjaGVUdGwiLCJhbGxvd1B1YmxpY0V4cGxhaW4iLCJvcHRpb25zIiwib3B0aW9uIiwicmVxdWVzdFBhdGgiLCJwYXRoVG9SZWdleHAiLCJyZXF1ZXN0VGltZVdpbmRvdyIsImluY2x1ZGVJbnRlcm5hbFJlcXVlc3RzIiwicmVxdWVzdENvdW50IiwiZXJyb3JSZXNwb25zZU1lc3NhZ2UiLCJQYXJzZVNlcnZlciIsIlJhdGVMaW1pdFpvbmUiLCJ6b25lIiwiZm9ybWF0dGVyIiwiSW50bCIsIkxpc3RGb3JtYXQiLCJzdHlsZSIsImZvcm1hdCIsIm5vdyIsIkRhdGUiLCJnZXRUaW1lIiwiZ2VuZXJhdGVQYXNzd29yZFJlc2V0VG9rZW5FeHBpcmVzQXQiLCJ1bnJlZ2lzdGVyUmF0ZUxpbWl0ZXJzIiwiaSIsInJhdGVMaW1pdHMiLCJsaW1pdCIsImNsb3VkIiwic3BsaWNlIiwiaW52YWxpZExpbmtVUkwiLCJpbnZhbGlkTGluayIsImludmFsaWRWZXJpZmljYXRpb25MaW5rVVJMIiwiaW52YWxpZFZlcmlmaWNhdGlvbkxpbmsiLCJsaW5rU2VuZFN1Y2Nlc3NVUkwiLCJsaW5rU2VuZFN1Y2Nlc3MiLCJsaW5rU2VuZEZhaWxVUkwiLCJsaW5rU2VuZEZhaWwiLCJ2ZXJpZnlFbWFpbFN1Y2Nlc3NVUkwiLCJ2ZXJpZnlFbWFpbFN1Y2Nlc3MiLCJjaG9vc2VQYXNzd29yZFVSTCIsImNob29zZVBhc3N3b3JkIiwicmVxdWVzdFJlc2V0UGFzc3dvcmRVUkwiLCJwYXNzd29yZFJlc2V0U3VjY2Vzc1VSTCIsInBhc3N3b3JkUmVzZXRTdWNjZXNzIiwicGFyc2VGcmFtZVVSTCIsInZlcmlmeUVtYWlsVVJMIiwibG9hZE1hc3RlcktleSIsInR0bElzRW1wdHkiLCJtYXN0ZXJLZXlUdGwiLCJpc0V4cGlyZWQiLCJtYXN0ZXJLZXlDYWNoZSIsImV4cGlyZXNBdCIsImV4cG9ydHMiLCJfZGVmYXVsdCIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9Db25maWcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQSBDb25maWcgb2JqZWN0IHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IGhvdyBhIHNwZWNpZmljIGFwcCBpc1xuLy8gY29uZmlndXJlZC5cbi8vIG1vdW50IGlzIHRoZSBVUkwgZm9yIHRoZSByb290IG9mIHRoZSBBUEk7IGluY2x1ZGVzIGh0dHAsIGRvbWFpbiwgZXRjLlxuXG5pbXBvcnQgeyBpc0Jvb2xlYW4sIGlzU3RyaW5nIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHBhdGhUb1JlZ2V4cCB9IGZyb20gJ3BhdGgtdG8tcmVnZXhwJztcbmltcG9ydCBuZXQgZnJvbSAnbmV0JztcbmltcG9ydCBBcHBDYWNoZSBmcm9tICcuL2NhY2hlJztcbmltcG9ydCBEYXRhYmFzZUNvbnRyb2xsZXIgZnJvbSAnLi9Db250cm9sbGVycy9EYXRhYmFzZUNvbnRyb2xsZXInO1xuaW1wb3J0IHsgbG9nTGV2ZWxzIGFzIHZhbGlkTG9nTGV2ZWxzIH0gZnJvbSAnLi9Db250cm9sbGVycy9Mb2dnZXJDb250cm9sbGVyJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuLi9wYWNrYWdlLmpzb24nO1xuaW1wb3J0IHtcbiAgQWNjb3VudExvY2tvdXRPcHRpb25zLFxuICBEYXRhYmFzZU9wdGlvbnMsXG4gIEZpbGVVcGxvYWRPcHRpb25zLFxuICBJZGVtcG90ZW5jeU9wdGlvbnMsXG4gIExvZ0xldmVscyxcbiAgUGFnZXNPcHRpb25zLFxuICBQYXJzZVNlcnZlck9wdGlvbnMsXG4gIFNjaGVtYU9wdGlvbnMsXG4gIFNlY3VyaXR5T3B0aW9ucyxcbn0gZnJvbSAnLi9PcHRpb25zL0RlZmluaXRpb25zJztcbmltcG9ydCBQYXJzZVNlcnZlciBmcm9tICcuL2Nsb3VkLWNvZGUvUGFyc2UuU2VydmVyJztcbmltcG9ydCBEZXByZWNhdG9yIGZyb20gJy4vRGVwcmVjYXRvci9EZXByZWNhdG9yJztcblxuZnVuY3Rpb24gcmVtb3ZlVHJhaWxpbmdTbGFzaChzdHIpIHtcbiAgaWYgKCFzdHIpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIGlmIChzdHIuZW5kc1dpdGgoJy8nKSkge1xuICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgc3RyLmxlbmd0aCAtIDEpO1xuICB9XG4gIHJldHVybiBzdHI7XG59XG5cbi8qKlxuICogQ29uZmlnIGtleXMgdGhhdCBuZWVkIHRvIGJlIGxvYWRlZCBhc3luY2hyb25vdXNseS5cbiAqL1xuY29uc3QgYXN5bmNLZXlzID0gWydwdWJsaWNTZXJ2ZXJVUkwnXTtcblxuZXhwb3J0IGNsYXNzIENvbmZpZyB7XG4gIHN0YXRpYyBnZXQoYXBwbGljYXRpb25JZDogc3RyaW5nLCBtb3VudDogc3RyaW5nKSB7XG4gICAgY29uc3QgY2FjaGVJbmZvID0gQXBwQ2FjaGUuZ2V0KGFwcGxpY2F0aW9uSWQpO1xuICAgIGlmICghY2FjaGVJbmZvKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZyA9IG5ldyBDb25maWcoKTtcbiAgICBjb25maWcuYXBwbGljYXRpb25JZCA9IGFwcGxpY2F0aW9uSWQ7XG4gICAgT2JqZWN0LmtleXMoY2FjaGVJbmZvKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoa2V5ID09ICdkYXRhYmFzZUNvbnRyb2xsZXInKSB7XG4gICAgICAgIGNvbmZpZy5kYXRhYmFzZSA9IG5ldyBEYXRhYmFzZUNvbnRyb2xsZXIoY2FjaGVJbmZvLmRhdGFiYXNlQ29udHJvbGxlci5hZGFwdGVyLCBjb25maWcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uZmlnW2tleV0gPSBjYWNoZUluZm9ba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25maWcubW91bnQgPSByZW1vdmVUcmFpbGluZ1NsYXNoKG1vdW50KTtcbiAgICBjb25maWcuZ2VuZXJhdGVTZXNzaW9uRXhwaXJlc0F0ID0gY29uZmlnLmdlbmVyYXRlU2Vzc2lvbkV4cGlyZXNBdC5iaW5kKGNvbmZpZyk7XG4gICAgY29uZmlnLmdlbmVyYXRlRW1haWxWZXJpZnlUb2tlbkV4cGlyZXNBdCA9IGNvbmZpZy5nZW5lcmF0ZUVtYWlsVmVyaWZ5VG9rZW5FeHBpcmVzQXQuYmluZChcbiAgICAgIGNvbmZpZ1xuICAgICk7XG4gICAgY29uZmlnLnZlcnNpb24gPSB2ZXJzaW9uO1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cblxuICBhc3luYyBsb2FkS2V5cygpIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGFzeW5jS2V5cy5tYXAoYXN5bmMga2V5ID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzW2BfJHtrZXl9YF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpc1trZXldID0gYXdhaXQgdGhpc1tgXyR7a2V5fWBdKCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHJlc29sdmUgYXN5bmMgY29uZmlnIGtleSAnJHtrZXl9JzogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgY2FjaGVkQ29uZmlnID0gQXBwQ2FjaGUuZ2V0KHRoaXMuYXBwSWQpO1xuICAgIGlmIChjYWNoZWRDb25maWcpIHtcbiAgICAgIGNvbnN0IHVwZGF0ZWRDb25maWcgPSB7IC4uLmNhY2hlZENvbmZpZyB9O1xuICAgICAgYXN5bmNLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgdXBkYXRlZENvbmZpZ1trZXldID0gdGhpc1trZXldO1xuICAgICAgfSk7XG4gICAgICBBcHBDYWNoZS5wdXQodGhpcy5hcHBJZCwgdXBkYXRlZENvbmZpZyk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHRyYW5zZm9ybUNvbmZpZ3VyYXRpb24oc2VydmVyQ29uZmlndXJhdGlvbikge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHNlcnZlckNvbmZpZ3VyYXRpb24pKSB7XG4gICAgICBpZiAoYXN5bmNLZXlzLmluY2x1ZGVzKGtleSkgJiYgdHlwZW9mIHNlcnZlckNvbmZpZ3VyYXRpb25ba2V5XSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBzZXJ2ZXJDb25maWd1cmF0aW9uW2BfJHtrZXl9YF0gPSBzZXJ2ZXJDb25maWd1cmF0aW9uW2tleV07XG4gICAgICAgIGRlbGV0ZSBzZXJ2ZXJDb25maWd1cmF0aW9uW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHB1dChzZXJ2ZXJDb25maWd1cmF0aW9uKSB7XG4gICAgQ29uZmlnLnZhbGlkYXRlT3B0aW9ucyhzZXJ2ZXJDb25maWd1cmF0aW9uKTtcbiAgICBDb25maWcudmFsaWRhdGVDb250cm9sbGVycyhzZXJ2ZXJDb25maWd1cmF0aW9uKTtcbiAgICBDb25maWcudHJhbnNmb3JtQ29uZmlndXJhdGlvbihzZXJ2ZXJDb25maWd1cmF0aW9uKTtcbiAgICBBcHBDYWNoZS5wdXQoc2VydmVyQ29uZmlndXJhdGlvbi5hcHBJZCwgc2VydmVyQ29uZmlndXJhdGlvbik7XG4gICAgQ29uZmlnLnNldHVwUGFzc3dvcmRWYWxpZGF0b3Ioc2VydmVyQ29uZmlndXJhdGlvbi5wYXNzd29yZFBvbGljeSk7XG4gICAgcmV0dXJuIHNlcnZlckNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVPcHRpb25zKHtcbiAgICBjdXN0b21QYWdlcyxcbiAgICBwdWJsaWNTZXJ2ZXJVUkwsXG4gICAgcmV2b2tlU2Vzc2lvbk9uUGFzc3dvcmRSZXNldCxcbiAgICBleHBpcmVJbmFjdGl2ZVNlc3Npb25zLFxuICAgIHNlc3Npb25MZW5ndGgsXG4gICAgZGVmYXVsdExpbWl0LFxuICAgIG1heExpbWl0LFxuICAgIGFjY291bnRMb2Nrb3V0LFxuICAgIHBhc3N3b3JkUG9saWN5LFxuICAgIG1hc3RlcktleUlwcyxcbiAgICBtYXN0ZXJLZXksXG4gICAgbWFpbnRlbmFuY2VLZXksXG4gICAgbWFpbnRlbmFuY2VLZXlJcHMsXG4gICAgcmVhZE9ubHlNYXN0ZXJLZXksXG4gICAgcmVhZE9ubHlNYXN0ZXJLZXlJcHMsXG4gICAgYWxsb3dIZWFkZXJzLFxuICAgIGlkZW1wb3RlbmN5T3B0aW9ucyxcbiAgICBmaWxlVXBsb2FkLFxuICAgIHBhZ2VzLFxuICAgIHNlY3VyaXR5LFxuICAgIGVuZm9yY2VQcml2YXRlVXNlcnMsXG4gICAgZW5hYmxlSW5zZWN1cmVBdXRoQWRhcHRlcnMsXG4gICAgc2NoZW1hLFxuICAgIHJlcXVlc3RLZXl3b3JkRGVueWxpc3QsXG4gICAgYWxsb3dFeHBpcmVkQXV0aERhdGFUb2tlbixcbiAgICBsb2dMZXZlbHMsXG4gICAgcmF0ZUxpbWl0LFxuICAgIGRhdGFiYXNlT3B0aW9ucyxcbiAgICBleHRlbmRTZXNzaW9uT25Vc2UsXG4gICAgYWxsb3dDbGllbnRDbGFzc0NyZWF0aW9uLFxuICB9KSB7XG4gICAgaWYgKG1hc3RlcktleSA9PT0gcmVhZE9ubHlNYXN0ZXJLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWFzdGVyS2V5IGFuZCByZWFkT25seU1hc3RlcktleSBzaG91bGQgYmUgZGlmZmVyZW50Jyk7XG4gICAgfVxuXG4gICAgaWYgKG1hc3RlcktleSA9PT0gbWFpbnRlbmFuY2VLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWFzdGVyS2V5IGFuZCBtYWludGVuYW5jZUtleSBzaG91bGQgYmUgZGlmZmVyZW50Jyk7XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZGF0ZUFjY291bnRMb2Nrb3V0UG9saWN5KGFjY291bnRMb2Nrb3V0KTtcbiAgICB0aGlzLnZhbGlkYXRlUGFzc3dvcmRQb2xpY3kocGFzc3dvcmRQb2xpY3kpO1xuICAgIHRoaXMudmFsaWRhdGVGaWxlVXBsb2FkT3B0aW9ucyhmaWxlVXBsb2FkKTtcblxuICAgIGlmICh0eXBlb2YgcmV2b2tlU2Vzc2lvbk9uUGFzc3dvcmRSZXNldCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyAncmV2b2tlU2Vzc2lvbk9uUGFzc3dvcmRSZXNldCBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBleHRlbmRTZXNzaW9uT25Vc2UgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgJ2V4dGVuZFNlc3Npb25PblVzZSBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZSc7XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZGF0ZVB1YmxpY1NlcnZlclVSTCh7IHB1YmxpY1NlcnZlclVSTCB9KTtcbiAgICB0aGlzLnZhbGlkYXRlU2Vzc2lvbkNvbmZpZ3VyYXRpb24oc2Vzc2lvbkxlbmd0aCwgZXhwaXJlSW5hY3RpdmVTZXNzaW9ucyk7XG4gICAgdGhpcy52YWxpZGF0ZUlwcygnbWFzdGVyS2V5SXBzJywgbWFzdGVyS2V5SXBzKTtcbiAgICB0aGlzLnZhbGlkYXRlSXBzKCdtYWludGVuYW5jZUtleUlwcycsIG1haW50ZW5hbmNlS2V5SXBzKTtcbiAgICB0aGlzLnZhbGlkYXRlSXBzKCdyZWFkT25seU1hc3RlcktleUlwcycsIHJlYWRPbmx5TWFzdGVyS2V5SXBzKTtcbiAgICB0aGlzLnZhbGlkYXRlRGVmYXVsdExpbWl0KGRlZmF1bHRMaW1pdCk7XG4gICAgdGhpcy52YWxpZGF0ZU1heExpbWl0KG1heExpbWl0KTtcbiAgICB0aGlzLnZhbGlkYXRlQWxsb3dIZWFkZXJzKGFsbG93SGVhZGVycyk7XG4gICAgdGhpcy52YWxpZGF0ZUlkZW1wb3RlbmN5T3B0aW9ucyhpZGVtcG90ZW5jeU9wdGlvbnMpO1xuICAgIHRoaXMudmFsaWRhdGVQYWdlc09wdGlvbnMocGFnZXMpO1xuICAgIHRoaXMudmFsaWRhdGVTZWN1cml0eU9wdGlvbnMoc2VjdXJpdHkpO1xuICAgIHRoaXMudmFsaWRhdGVTY2hlbWFPcHRpb25zKHNjaGVtYSk7XG4gICAgdGhpcy52YWxpZGF0ZUVuZm9yY2VQcml2YXRlVXNlcnMoZW5mb3JjZVByaXZhdGVVc2Vycyk7XG4gICAgdGhpcy52YWxpZGF0ZUVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzKGVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzKTtcbiAgICB0aGlzLnZhbGlkYXRlQWxsb3dFeHBpcmVkQXV0aERhdGFUb2tlbihhbGxvd0V4cGlyZWRBdXRoRGF0YVRva2VuKTtcbiAgICB0aGlzLnZhbGlkYXRlUmVxdWVzdEtleXdvcmREZW55bGlzdChyZXF1ZXN0S2V5d29yZERlbnlsaXN0KTtcbiAgICB0aGlzLnZhbGlkYXRlUmF0ZUxpbWl0KHJhdGVMaW1pdCk7XG4gICAgdGhpcy52YWxpZGF0ZUxvZ0xldmVscyhsb2dMZXZlbHMpO1xuICAgIHRoaXMudmFsaWRhdGVEYXRhYmFzZU9wdGlvbnMoZGF0YWJhc2VPcHRpb25zKTtcbiAgICB0aGlzLnZhbGlkYXRlQ3VzdG9tUGFnZXMoY3VzdG9tUGFnZXMpO1xuICAgIHRoaXMudmFsaWRhdGVBbGxvd0NsaWVudENsYXNzQ3JlYXRpb24oYWxsb3dDbGllbnRDbGFzc0NyZWF0aW9uKTtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUN1c3RvbVBhZ2VzKGN1c3RvbVBhZ2VzKSB7XG4gICAgaWYgKCFjdXN0b21QYWdlcykgeyByZXR1cm47IH1cblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoY3VzdG9tUGFnZXMpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgdGhyb3cgRXJyb3IoJ1BhcnNlIFNlcnZlciBvcHRpb24gY3VzdG9tUGFnZXMgbXVzdCBiZSBhbiBvYmplY3QuJyk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlQ29udHJvbGxlcnMoe1xuICAgIHZlcmlmeVVzZXJFbWFpbHMsXG4gICAgdXNlckNvbnRyb2xsZXIsXG4gICAgYXBwTmFtZSxcbiAgICBwdWJsaWNTZXJ2ZXJVUkwsXG4gICAgX3B1YmxpY1NlcnZlclVSTCxcbiAgICBlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbixcbiAgICBlbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkLFxuICB9KSB7XG4gICAgY29uc3QgZW1haWxBZGFwdGVyID0gdXNlckNvbnRyb2xsZXIuYWRhcHRlcjtcbiAgICBpZiAodmVyaWZ5VXNlckVtYWlscykge1xuICAgICAgdGhpcy52YWxpZGF0ZUVtYWlsQ29uZmlndXJhdGlvbih7XG4gICAgICAgIGVtYWlsQWRhcHRlcixcbiAgICAgICAgYXBwTmFtZSxcbiAgICAgICAgcHVibGljU2VydmVyVVJMOiBwdWJsaWNTZXJ2ZXJVUkwgfHwgX3B1YmxpY1NlcnZlclVSTCxcbiAgICAgICAgZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24sXG4gICAgICAgIGVtYWlsVmVyaWZ5VG9rZW5SZXVzZUlmVmFsaWQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVSZXF1ZXN0S2V5d29yZERlbnlsaXN0KHJlcXVlc3RLZXl3b3JkRGVueWxpc3QpIHtcbiAgICBpZiAocmVxdWVzdEtleXdvcmREZW55bGlzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0S2V5d29yZERlbnlsaXN0ID0gcmVxdWVzdEtleXdvcmREZW55bGlzdC5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkocmVxdWVzdEtleXdvcmREZW55bGlzdCkpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHJlcXVlc3RLZXl3b3JkRGVueWxpc3QgbXVzdCBiZSBhbiBhcnJheS4nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUVuZm9yY2VQcml2YXRlVXNlcnMoZW5mb3JjZVByaXZhdGVVc2Vycykge1xuICAgIGlmICh0eXBlb2YgZW5mb3JjZVByaXZhdGVVc2VycyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBlbmZvcmNlUHJpdmF0ZVVzZXJzIG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlQWxsb3dFeHBpcmVkQXV0aERhdGFUb2tlbihhbGxvd0V4cGlyZWRBdXRoRGF0YVRva2VuKSB7XG4gICAgaWYgKHR5cGVvZiBhbGxvd0V4cGlyZWRBdXRoRGF0YVRva2VuICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIGFsbG93RXhwaXJlZEF1dGhEYXRhVG9rZW4gbXVzdCBiZSBhIGJvb2xlYW4uJztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVBbGxvd0NsaWVudENsYXNzQ3JlYXRpb24oYWxsb3dDbGllbnRDbGFzc0NyZWF0aW9uKSB7XG4gICAgaWYgKHR5cGVvZiBhbGxvd0NsaWVudENsYXNzQ3JlYXRpb24gIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gYWxsb3dDbGllbnRDbGFzc0NyZWF0aW9uIG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlU2VjdXJpdHlPcHRpb25zKHNlY3VyaXR5KSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzZWN1cml0eSkgIT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBzZWN1cml0eSBtdXN0IGJlIGFuIG9iamVjdC4nO1xuICAgIH1cbiAgICBpZiAoc2VjdXJpdHkuZW5hYmxlQ2hlY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2VjdXJpdHkuZW5hYmxlQ2hlY2sgPSBTZWN1cml0eU9wdGlvbnMuZW5hYmxlQ2hlY2suZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFpc0Jvb2xlYW4oc2VjdXJpdHkuZW5hYmxlQ2hlY2spKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBzZWN1cml0eS5lbmFibGVDaGVjayBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgIH1cbiAgICBpZiAoc2VjdXJpdHkuZW5hYmxlQ2hlY2tMb2cgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2VjdXJpdHkuZW5hYmxlQ2hlY2tMb2cgPSBTZWN1cml0eU9wdGlvbnMuZW5hYmxlQ2hlY2tMb2cuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFpc0Jvb2xlYW4oc2VjdXJpdHkuZW5hYmxlQ2hlY2tMb2cpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBzZWN1cml0eS5lbmFibGVDaGVja0xvZyBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVNjaGVtYU9wdGlvbnMoc2NoZW1hOiBTY2hlbWFPcHRpb25zKSB7XG4gICAgaWYgKCFzY2hlbWEpIHsgcmV0dXJuOyB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzY2hlbWEpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2NoZW1hIG11c3QgYmUgYW4gb2JqZWN0Lic7XG4gICAgfVxuICAgIGlmIChzY2hlbWEuZGVmaW5pdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZW1hLmRlZmluaXRpb25zID0gU2NoZW1hT3B0aW9ucy5kZWZpbml0aW9ucy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hLmRlZmluaXRpb25zKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2NoZW1hLmRlZmluaXRpb25zIG11c3QgYmUgYW4gYXJyYXkuJztcbiAgICB9XG4gICAgaWYgKHNjaGVtYS5zdHJpY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZW1hLnN0cmljdCA9IFNjaGVtYU9wdGlvbnMuc3RyaWN0LmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNCb29sZWFuKHNjaGVtYS5zdHJpY3QpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBzY2hlbWEuc3RyaWN0IG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICAgIGlmIChzY2hlbWEuZGVsZXRlRXh0cmFGaWVsZHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZW1hLmRlbGV0ZUV4dHJhRmllbGRzID0gU2NoZW1hT3B0aW9ucy5kZWxldGVFeHRyYUZpZWxkcy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIWlzQm9vbGVhbihzY2hlbWEuZGVsZXRlRXh0cmFGaWVsZHMpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBzY2hlbWEuZGVsZXRlRXh0cmFGaWVsZHMgbXVzdCBiZSBhIGJvb2xlYW4uJztcbiAgICB9XG4gICAgaWYgKHNjaGVtYS5yZWNyZWF0ZU1vZGlmaWVkRmllbGRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNjaGVtYS5yZWNyZWF0ZU1vZGlmaWVkRmllbGRzID0gU2NoZW1hT3B0aW9ucy5yZWNyZWF0ZU1vZGlmaWVkRmllbGRzLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNCb29sZWFuKHNjaGVtYS5yZWNyZWF0ZU1vZGlmaWVkRmllbGRzKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gc2NoZW1hLnJlY3JlYXRlTW9kaWZpZWRGaWVsZHMgbXVzdCBiZSBhIGJvb2xlYW4uJztcbiAgICB9XG4gICAgaWYgKHNjaGVtYS5sb2NrU2NoZW1hcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzY2hlbWEubG9ja1NjaGVtYXMgPSBTY2hlbWFPcHRpb25zLmxvY2tTY2hlbWFzLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNCb29sZWFuKHNjaGVtYS5sb2NrU2NoZW1hcykpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHNjaGVtYS5sb2NrU2NoZW1hcyBtdXN0IGJlIGEgYm9vbGVhbi4nO1xuICAgIH1cbiAgICBpZiAoc2NoZW1hLmJlZm9yZU1pZ3JhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzY2hlbWEuYmVmb3JlTWlncmF0aW9uID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHNjaGVtYS5iZWZvcmVNaWdyYXRpb24gIT09IG51bGwgJiYgdHlwZW9mIHNjaGVtYS5iZWZvcmVNaWdyYXRpb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHNjaGVtYS5iZWZvcmVNaWdyYXRpb24gbXVzdCBiZSBhIGZ1bmN0aW9uLic7XG4gICAgfVxuICAgIGlmIChzY2hlbWEuYWZ0ZXJNaWdyYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2NoZW1hLmFmdGVyTWlncmF0aW9uID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHNjaGVtYS5hZnRlck1pZ3JhdGlvbiAhPT0gbnVsbCAmJiB0eXBlb2Ygc2NoZW1hLmFmdGVyTWlncmF0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBzY2hlbWEuYWZ0ZXJNaWdyYXRpb24gbXVzdCBiZSBhIGZ1bmN0aW9uLic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlUGFnZXNPcHRpb25zKHBhZ2VzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwYWdlcykgIT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBwYWdlcyBtdXN0IGJlIGFuIG9iamVjdC4nO1xuICAgIH1cbiAgICBpZiAocGFnZXMuZW5hYmxlTG9jYWxpemF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhZ2VzLmVuYWJsZUxvY2FsaXphdGlvbiA9IFBhZ2VzT3B0aW9ucy5lbmFibGVMb2NhbGl6YXRpb24uZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFpc0Jvb2xlYW4ocGFnZXMuZW5hYmxlTG9jYWxpemF0aW9uKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gcGFnZXMuZW5hYmxlTG9jYWxpemF0aW9uIG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICAgIGlmIChwYWdlcy5sb2NhbGl6YXRpb25Kc29uUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYWdlcy5sb2NhbGl6YXRpb25Kc29uUGF0aCA9IFBhZ2VzT3B0aW9ucy5sb2NhbGl6YXRpb25Kc29uUGF0aC5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIWlzU3RyaW5nKHBhZ2VzLmxvY2FsaXphdGlvbkpzb25QYXRoKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gcGFnZXMubG9jYWxpemF0aW9uSnNvblBhdGggbXVzdCBiZSBhIHN0cmluZy4nO1xuICAgIH1cbiAgICBpZiAocGFnZXMubG9jYWxpemF0aW9uRmFsbGJhY2tMb2NhbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFnZXMubG9jYWxpemF0aW9uRmFsbGJhY2tMb2NhbGUgPSBQYWdlc09wdGlvbnMubG9jYWxpemF0aW9uRmFsbGJhY2tMb2NhbGUuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFpc1N0cmluZyhwYWdlcy5sb2NhbGl6YXRpb25GYWxsYmFja0xvY2FsZSkpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHBhZ2VzLmxvY2FsaXphdGlvbkZhbGxiYWNrTG9jYWxlIG11c3QgYmUgYSBzdHJpbmcuJztcbiAgICB9XG4gICAgaWYgKHBhZ2VzLnBsYWNlaG9sZGVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYWdlcy5wbGFjZWhvbGRlcnMgPSBQYWdlc09wdGlvbnMucGxhY2Vob2xkZXJzLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwYWdlcy5wbGFjZWhvbGRlcnMpICE9PSAnW29iamVjdCBPYmplY3RdJyAmJlxuICAgICAgdHlwZW9mIHBhZ2VzLnBsYWNlaG9sZGVycyAhPT0gJ2Z1bmN0aW9uJ1xuICAgICkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gcGFnZXMucGxhY2Vob2xkZXJzIG11c3QgYmUgYW4gb2JqZWN0IG9yIGEgZnVuY3Rpb24uJztcbiAgICB9XG4gICAgaWYgKHBhZ2VzLmZvcmNlUmVkaXJlY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFnZXMuZm9yY2VSZWRpcmVjdCA9IFBhZ2VzT3B0aW9ucy5mb3JjZVJlZGlyZWN0LmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNCb29sZWFuKHBhZ2VzLmZvcmNlUmVkaXJlY3QpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBwYWdlcy5mb3JjZVJlZGlyZWN0IG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICAgIGlmIChwYWdlcy5wYWdlc1BhdGggIT09IHVuZGVmaW5lZCAmJiAhaXNTdHJpbmcocGFnZXMucGFnZXNQYXRoKSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gcGFnZXMucGFnZXNQYXRoIG11c3QgYmUgYSBzdHJpbmcuJztcbiAgICB9XG4gICAgaWYgKHBhZ2VzLnBhZ2VzRW5kcG9pbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFnZXMucGFnZXNFbmRwb2ludCA9IFBhZ2VzT3B0aW9ucy5wYWdlc0VuZHBvaW50LmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNTdHJpbmcocGFnZXMucGFnZXNFbmRwb2ludCkpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHBhZ2VzLnBhZ2VzRW5kcG9pbnQgbXVzdCBiZSBhIHN0cmluZy4nO1xuICAgIH1cbiAgICBpZiAocGFnZXMuY3VzdG9tVXJscyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYWdlcy5jdXN0b21VcmxzID0gUGFnZXNPcHRpb25zLmN1c3RvbVVybHMuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwYWdlcy5jdXN0b21VcmxzKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIHBhZ2VzLmN1c3RvbVVybHMgbXVzdCBiZSBhbiBvYmplY3QuJztcbiAgICB9XG4gICAgaWYgKHBhZ2VzLmN1c3RvbVJvdXRlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYWdlcy5jdXN0b21Sb3V0ZXMgPSBQYWdlc09wdGlvbnMuY3VzdG9tUm91dGVzLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghKHBhZ2VzLmN1c3RvbVJvdXRlcyBpbnN0YW5jZW9mIEFycmF5KSkge1xuICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gcGFnZXMuY3VzdG9tUm91dGVzIG11c3QgYmUgYW4gYXJyYXkuJztcbiAgICB9XG4gICAgaWYgKHBhZ2VzLmVuY29kZVBhZ2VQYXJhbUhlYWRlcnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFnZXMuZW5jb2RlUGFnZVBhcmFtSGVhZGVycyA9IFBhZ2VzT3B0aW9ucy5lbmNvZGVQYWdlUGFyYW1IZWFkZXJzLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNCb29sZWFuKHBhZ2VzLmVuY29kZVBhZ2VQYXJhbUhlYWRlcnMpKSB7XG4gICAgICB0aHJvdyAnUGFyc2UgU2VydmVyIG9wdGlvbiBwYWdlcy5lbmNvZGVQYWdlUGFyYW1IZWFkZXJzIG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlSWRlbXBvdGVuY3lPcHRpb25zKGlkZW1wb3RlbmN5T3B0aW9ucykge1xuICAgIGlmICghaWRlbXBvdGVuY3lPcHRpb25zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpZGVtcG90ZW5jeU9wdGlvbnMudHRsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlkZW1wb3RlbmN5T3B0aW9ucy50dGwgPSBJZGVtcG90ZW5jeU9wdGlvbnMudHRsLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghaXNOYU4oaWRlbXBvdGVuY3lPcHRpb25zLnR0bCkgJiYgaWRlbXBvdGVuY3lPcHRpb25zLnR0bCA8PSAwKSB7XG4gICAgICB0aHJvdyAnaWRlbXBvdGVuY3kgVFRMIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAgc2Vjb25kcyc7XG4gICAgfSBlbHNlIGlmIChpc05hTihpZGVtcG90ZW5jeU9wdGlvbnMudHRsKSkge1xuICAgICAgdGhyb3cgJ2lkZW1wb3RlbmN5IFRUTCB2YWx1ZSBtdXN0IGJlIGEgbnVtYmVyJztcbiAgICB9XG4gICAgaWYgKCFpZGVtcG90ZW5jeU9wdGlvbnMucGF0aHMpIHtcbiAgICAgIGlkZW1wb3RlbmN5T3B0aW9ucy5wYXRocyA9IElkZW1wb3RlbmN5T3B0aW9ucy5wYXRocy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIShpZGVtcG90ZW5jeU9wdGlvbnMucGF0aHMgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgIHRocm93ICdpZGVtcG90ZW5jeSBwYXRocyBtdXN0IGJlIG9mIGFuIGFycmF5IG9mIHN0cmluZ3MnO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUFjY291bnRMb2Nrb3V0UG9saWN5KGFjY291bnRMb2Nrb3V0KSB7XG4gICAgaWYgKGFjY291bnRMb2Nrb3V0KSB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBhY2NvdW50TG9ja291dC5kdXJhdGlvbiAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgYWNjb3VudExvY2tvdXQuZHVyYXRpb24gPD0gMCB8fFxuICAgICAgICBhY2NvdW50TG9ja291dC5kdXJhdGlvbiA+IDk5OTk5XG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgJ0FjY291bnQgbG9ja291dCBkdXJhdGlvbiBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAgYW5kIGxlc3MgdGhhbiAxMDAwMDAnO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgICFOdW1iZXIuaXNJbnRlZ2VyKGFjY291bnRMb2Nrb3V0LnRocmVzaG9sZCkgfHxcbiAgICAgICAgYWNjb3VudExvY2tvdXQudGhyZXNob2xkIDwgMSB8fFxuICAgICAgICBhY2NvdW50TG9ja291dC50aHJlc2hvbGQgPiA5OTlcbiAgICAgICkge1xuICAgICAgICB0aHJvdyAnQWNjb3VudCBsb2Nrb3V0IHRocmVzaG9sZCBzaG91bGQgYmUgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gMCBhbmQgbGVzcyB0aGFuIDEwMDAnO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWNjb3VudExvY2tvdXQudW5sb2NrT25QYXNzd29yZFJlc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWNjb3VudExvY2tvdXQudW5sb2NrT25QYXNzd29yZFJlc2V0ID0gQWNjb3VudExvY2tvdXRPcHRpb25zLnVubG9ja09uUGFzc3dvcmRSZXNldC5kZWZhdWx0O1xuICAgICAgfSBlbHNlIGlmICghaXNCb29sZWFuKGFjY291bnRMb2Nrb3V0LnVubG9ja09uUGFzc3dvcmRSZXNldCkpIHtcbiAgICAgICAgdGhyb3cgJ1BhcnNlIFNlcnZlciBvcHRpb24gYWNjb3VudExvY2tvdXQudW5sb2NrT25QYXNzd29yZFJlc2V0IG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlUGFzc3dvcmRQb2xpY3kocGFzc3dvcmRQb2xpY3kpIHtcbiAgICBpZiAocGFzc3dvcmRQb2xpY3kpIHtcbiAgICAgIGlmIChcbiAgICAgICAgcGFzc3dvcmRQb2xpY3kubWF4UGFzc3dvcmRBZ2UgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAodHlwZW9mIHBhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkQWdlICE9PSAnbnVtYmVyJyB8fCBwYXNzd29yZFBvbGljeS5tYXhQYXNzd29yZEFnZSA8IDApXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgJ3Bhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkQWdlIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHBhc3N3b3JkUG9saWN5LnJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgKHR5cGVvZiBwYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbiAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICBwYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbiA8PSAwKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93ICdwYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJztcbiAgICAgIH1cblxuICAgICAgaWYgKHBhc3N3b3JkUG9saWN5LnZhbGlkYXRvclBhdHRlcm4pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXNzd29yZFBvbGljeS52YWxpZGF0b3JQYXR0ZXJuID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHBhc3N3b3JkUG9saWN5LnZhbGlkYXRvclBhdHRlcm4gPSBuZXcgUmVnRXhwKHBhc3N3b3JkUG9saWN5LnZhbGlkYXRvclBhdHRlcm4pO1xuICAgICAgICB9IGVsc2UgaWYgKCEocGFzc3dvcmRQb2xpY3kudmFsaWRhdG9yUGF0dGVybiBpbnN0YW5jZW9mIFJlZ0V4cCkpIHtcbiAgICAgICAgICB0aHJvdyAncGFzc3dvcmRQb2xpY3kudmFsaWRhdG9yUGF0dGVybiBtdXN0IGJlIGEgcmVnZXggc3RyaW5nIG9yIFJlZ0V4cCBvYmplY3QuJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHBhc3N3b3JkUG9saWN5LnZhbGlkYXRvckNhbGxiYWNrICYmXG4gICAgICAgIHR5cGVvZiBwYXNzd29yZFBvbGljeS52YWxpZGF0b3JDYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93ICdwYXNzd29yZFBvbGljeS52YWxpZGF0b3JDYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24uJztcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBwYXNzd29yZFBvbGljeS5kb05vdEFsbG93VXNlcm5hbWUgJiZcbiAgICAgICAgdHlwZW9mIHBhc3N3b3JkUG9saWN5LmRvTm90QWxsb3dVc2VybmFtZSAhPT0gJ2Jvb2xlYW4nXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgJ3Bhc3N3b3JkUG9saWN5LmRvTm90QWxsb3dVc2VybmFtZSBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZS4nO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHBhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkSGlzdG9yeSAmJlxuICAgICAgICAoIU51bWJlci5pc0ludGVnZXIocGFzc3dvcmRQb2xpY3kubWF4UGFzc3dvcmRIaXN0b3J5KSB8fFxuICAgICAgICAgIHBhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkSGlzdG9yeSA8PSAwIHx8XG4gICAgICAgICAgcGFzc3dvcmRQb2xpY3kubWF4UGFzc3dvcmRIaXN0b3J5ID4gMjApXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgJ3Bhc3N3b3JkUG9saWN5Lm1heFBhc3N3b3JkSGlzdG9yeSBtdXN0IGJlIGFuIGludGVnZXIgcmFuZ2luZyAwIC0gMjAnO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHBhc3N3b3JkUG9saWN5LnJlc2V0VG9rZW5SZXVzZUlmVmFsaWQgJiZcbiAgICAgICAgdHlwZW9mIHBhc3N3b3JkUG9saWN5LnJlc2V0VG9rZW5SZXVzZUlmVmFsaWQgIT09ICdib29sZWFuJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93ICdyZXNldFRva2VuUmV1c2VJZlZhbGlkIG11c3QgYmUgYSBib29sZWFuIHZhbHVlJztcbiAgICAgIH1cbiAgICAgIGlmIChwYXNzd29yZFBvbGljeS5yZXNldFRva2VuUmV1c2VJZlZhbGlkICYmICFwYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbikge1xuICAgICAgICB0aHJvdyAnWW91IGNhbm5vdCB1c2UgcmVzZXRUb2tlblJldXNlSWZWYWxpZCB3aXRob3V0IHJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uJztcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBwYXNzd29yZFBvbGljeS5yZXNldFBhc3N3b3JkU3VjY2Vzc09uSW52YWxpZEVtYWlsICYmXG4gICAgICAgIHR5cGVvZiBwYXNzd29yZFBvbGljeS5yZXNldFBhc3N3b3JkU3VjY2Vzc09uSW52YWxpZEVtYWlsICE9PSAnYm9vbGVhbidcbiAgICAgICkge1xuICAgICAgICB0aHJvdyAncmVzZXRQYXNzd29yZFN1Y2Nlc3NPbkludmFsaWRFbWFpbCBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZSc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlIHBhc3N3b3JkUG9saWN5LnZhbGlkYXRvclBhdHRlcm4gaXMgY29uZmlndXJlZCB0aGVuIHNldHVwIGEgY2FsbGJhY2sgdG8gcHJvY2VzcyB0aGUgcGF0dGVyblxuICBzdGF0aWMgc2V0dXBQYXNzd29yZFZhbGlkYXRvcihwYXNzd29yZFBvbGljeSkge1xuICAgIGlmIChwYXNzd29yZFBvbGljeSAmJiBwYXNzd29yZFBvbGljeS52YWxpZGF0b3JQYXR0ZXJuKSB7XG4gICAgICBwYXNzd29yZFBvbGljeS5wYXR0ZXJuVmFsaWRhdG9yID0gdmFsdWUgPT4ge1xuICAgICAgICByZXR1cm4gcGFzc3dvcmRQb2xpY3kudmFsaWRhdG9yUGF0dGVybi50ZXN0KHZhbHVlKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlUHVibGljU2VydmVyVVJMKHsgcHVibGljU2VydmVyVVJMLCByZXF1aXJlZCA9IGZhbHNlIH0pIHtcbiAgICBpZiAoIXB1YmxpY1NlcnZlclVSTCkge1xuICAgICAgaWYgKCFyZXF1aXJlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyAnVGhlIG9wdGlvbiBwdWJsaWNTZXJ2ZXJVUkwgaXMgcmVxdWlyZWQuJztcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIHB1YmxpY1NlcnZlclVSTDtcblxuICAgIGlmICh0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKCFwdWJsaWNTZXJ2ZXJVUkwuc3RhcnRzV2l0aCgnaHR0cDovLycpICYmICFwdWJsaWNTZXJ2ZXJVUkwuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xuICAgICAgICB0aHJvdyAnVGhlIG9wdGlvbiBwdWJsaWNTZXJ2ZXJVUkwgbXVzdCBiZSBhIHZhbGlkIFVSTCBzdGFydGluZyB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly8uJztcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRocm93IGBUaGUgb3B0aW9uIHB1YmxpY1NlcnZlclVSTCBtdXN0IGJlIGEgc3RyaW5nIG9yIGZ1bmN0aW9uLCBidXQgZ290ICR7dHlwZX0uYDtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZUVtYWlsQ29uZmlndXJhdGlvbih7XG4gICAgZW1haWxBZGFwdGVyLFxuICAgIGFwcE5hbWUsXG4gICAgcHVibGljU2VydmVyVVJMLFxuICAgIGVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uLFxuICAgIGVtYWlsVmVyaWZ5VG9rZW5SZXVzZUlmVmFsaWQsXG4gIH0pIHtcbiAgICBpZiAoIWVtYWlsQWRhcHRlcikge1xuICAgICAgdGhyb3cgJ0FuIGVtYWlsQWRhcHRlciBpcyByZXF1aXJlZCBmb3IgZS1tYWlsIHZlcmlmaWNhdGlvbiBhbmQgcGFzc3dvcmQgcmVzZXRzLic7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYXBwTmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93ICdBbiBhcHAgbmFtZSBpcyByZXF1aXJlZCBmb3IgZS1tYWlsIHZlcmlmaWNhdGlvbiBhbmQgcGFzc3dvcmQgcmVzZXRzLic7XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdGVQdWJsaWNTZXJ2ZXJVUkwoeyBwdWJsaWNTZXJ2ZXJVUkwsIHJlcXVpcmVkOiB0cnVlIH0pO1xuICAgIGlmIChlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbikge1xuICAgICAgaWYgKGlzTmFOKGVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uKSkge1xuICAgICAgICB0aHJvdyAnRW1haWwgdmVyaWZ5IHRva2VuIHZhbGlkaXR5IGR1cmF0aW9uIG11c3QgYmUgYSB2YWxpZCBudW1iZXIuJztcbiAgICAgIH0gZWxzZSBpZiAoZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24gPD0gMCkge1xuICAgICAgICB0aHJvdyAnRW1haWwgdmVyaWZ5IHRva2VuIHZhbGlkaXR5IGR1cmF0aW9uIG11c3QgYmUgYSB2YWx1ZSBncmVhdGVyIHRoYW4gMC4nO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCAmJiB0eXBlb2YgZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyAnZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZSc7XG4gICAgfVxuICAgIGlmIChlbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkICYmICFlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbikge1xuICAgICAgdGhyb3cgJ1lvdSBjYW5ub3QgdXNlIGVtYWlsVmVyaWZ5VG9rZW5SZXVzZUlmVmFsaWQgd2l0aG91dCBlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlRmlsZVVwbG9hZE9wdGlvbnMoZmlsZVVwbG9hZCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoZmlsZVVwbG9hZCA9PSBudWxsIHx8IHR5cGVvZiBmaWxlVXBsb2FkICE9PSAnb2JqZWN0JyB8fCBmaWxlVXBsb2FkIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgdGhyb3cgJ2ZpbGVVcGxvYWQgbXVzdCBiZSBhbiBvYmplY3QgdmFsdWUuJztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIFJlZmVyZW5jZUVycm9yKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIGlmIChmaWxlVXBsb2FkLmVuYWJsZUZvckFub255bW91c1VzZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZmlsZVVwbG9hZC5lbmFibGVGb3JBbm9ueW1vdXNVc2VyID0gRmlsZVVwbG9hZE9wdGlvbnMuZW5hYmxlRm9yQW5vbnltb3VzVXNlci5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbGVVcGxvYWQuZW5hYmxlRm9yQW5vbnltb3VzVXNlciAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyAnZmlsZVVwbG9hZC5lbmFibGVGb3JBbm9ueW1vdXNVc2VyIG11c3QgYmUgYSBib29sZWFuIHZhbHVlLic7XG4gICAgfVxuICAgIGlmIChmaWxlVXBsb2FkLmVuYWJsZUZvclB1YmxpYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaWxlVXBsb2FkLmVuYWJsZUZvclB1YmxpYyA9IEZpbGVVcGxvYWRPcHRpb25zLmVuYWJsZUZvclB1YmxpYy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbGVVcGxvYWQuZW5hYmxlRm9yUHVibGljICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdmaWxlVXBsb2FkLmVuYWJsZUZvclB1YmxpYyBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZS4nO1xuICAgIH1cbiAgICBpZiAoZmlsZVVwbG9hZC5lbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaWxlVXBsb2FkLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyID0gRmlsZVVwbG9hZE9wdGlvbnMuZW5hYmxlRm9yQXV0aGVudGljYXRlZFVzZXIuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaWxlVXBsb2FkLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdmaWxlVXBsb2FkLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyIG11c3QgYmUgYSBib29sZWFuIHZhbHVlLic7XG4gICAgfVxuICAgIGlmIChmaWxlVXBsb2FkLmZpbGVFeHRlbnNpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZpbGVVcGxvYWQuZmlsZUV4dGVuc2lvbnMgPSBGaWxlVXBsb2FkT3B0aW9ucy5maWxlRXh0ZW5zaW9ucy5kZWZhdWx0O1xuICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoZmlsZVVwbG9hZC5maWxlRXh0ZW5zaW9ucykpIHtcbiAgICAgIHRocm93ICdmaWxlVXBsb2FkLmZpbGVFeHRlbnNpb25zIG11c3QgYmUgYW4gYXJyYXkuJztcbiAgICB9XG4gICAgaWYgKGZpbGVVcGxvYWQuYWxsb3dlZEZpbGVVcmxEb21haW5zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZpbGVVcGxvYWQuYWxsb3dlZEZpbGVVcmxEb21haW5zID0gRmlsZVVwbG9hZE9wdGlvbnMuYWxsb3dlZEZpbGVVcmxEb21haW5zLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShmaWxlVXBsb2FkLmFsbG93ZWRGaWxlVXJsRG9tYWlucykpIHtcbiAgICAgIHRocm93ICdmaWxlVXBsb2FkLmFsbG93ZWRGaWxlVXJsRG9tYWlucyBtdXN0IGJlIGFuIGFycmF5Lic7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgZG9tYWluIG9mIGZpbGVVcGxvYWQuYWxsb3dlZEZpbGVVcmxEb21haW5zKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZG9tYWluICE9PSAnc3RyaW5nJyB8fCBkb21haW4gPT09ICcnKSB7XG4gICAgICAgICAgdGhyb3cgJ2ZpbGVVcGxvYWQuYWxsb3dlZEZpbGVVcmxEb21haW5zIG11c3QgY29udGFpbiBvbmx5IG5vbi1lbXB0eSBzdHJpbmdzLic7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVJcHMoZmllbGQsIG1hc3RlcktleUlwcykge1xuICAgIGZvciAobGV0IGlwIG9mIG1hc3RlcktleUlwcykge1xuICAgICAgaWYgKGlwLmluY2x1ZGVzKCcvJykpIHtcbiAgICAgICAgaXAgPSBpcC5zcGxpdCgnLycpWzBdO1xuICAgICAgfVxuICAgICAgaWYgKCFuZXQuaXNJUChpcCkpIHtcbiAgICAgICAgdGhyb3cgYFRoZSBQYXJzZSBTZXJ2ZXIgb3B0aW9uIFwiJHtmaWVsZH1cIiBjb250YWlucyBhbiBpbnZhbGlkIElQIGFkZHJlc3MgXCIke2lwfVwiLmA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlRW5hYmxlSW5zZWN1cmVBdXRoQWRhcHRlcnMoZW5hYmxlSW5zZWN1cmVBdXRoQWRhcHRlcnMpIHtcbiAgICBpZiAoZW5hYmxlSW5zZWN1cmVBdXRoQWRhcHRlcnMgJiYgdHlwZW9mIGVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93ICdQYXJzZSBTZXJ2ZXIgb3B0aW9uIGVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzIG11c3QgYmUgYSBib29sZWFuLic7XG4gICAgfVxuICAgIGlmIChlbmFibGVJbnNlY3VyZUF1dGhBZGFwdGVycykge1xuICAgICAgRGVwcmVjYXRvci5sb2dSdW50aW1lRGVwcmVjYXRpb24oeyB1c2FnZTogJ2luc2VjdXJlIGFkYXB0ZXInIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBtb3VudCgpIHtcbiAgICB2YXIgbW91bnQgPSB0aGlzLl9tb3VudDtcbiAgICBpZiAodGhpcy5wdWJsaWNTZXJ2ZXJVUkwpIHtcbiAgICAgIG1vdW50ID0gdGhpcy5wdWJsaWNTZXJ2ZXJVUkw7XG4gICAgfVxuICAgIHJldHVybiBtb3VudDtcbiAgfVxuXG4gIHNldCBtb3VudChuZXdWYWx1ZSkge1xuICAgIHRoaXMuX21vdW50ID0gbmV3VmFsdWU7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVTZXNzaW9uQ29uZmlndXJhdGlvbihzZXNzaW9uTGVuZ3RoLCBleHBpcmVJbmFjdGl2ZVNlc3Npb25zKSB7XG4gICAgaWYgKGV4cGlyZUluYWN0aXZlU2Vzc2lvbnMpIHtcbiAgICAgIGlmIChpc05hTihzZXNzaW9uTGVuZ3RoKSkge1xuICAgICAgICB0aHJvdyAnU2Vzc2lvbiBsZW5ndGggbXVzdCBiZSBhIHZhbGlkIG51bWJlci4nO1xuICAgICAgfSBlbHNlIGlmIChzZXNzaW9uTGVuZ3RoIDw9IDApIHtcbiAgICAgICAgdGhyb3cgJ1Nlc3Npb24gbGVuZ3RoIG11c3QgYmUgYSB2YWx1ZSBncmVhdGVyIHRoYW4gMC4nO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZURlZmF1bHRMaW1pdChkZWZhdWx0TGltaXQpIHtcbiAgICBpZiAoZGVmYXVsdExpbWl0ID09IG51bGwpIHtcbiAgICAgIGRlZmF1bHRMaW1pdCA9IFBhcnNlU2VydmVyT3B0aW9ucy5kZWZhdWx0TGltaXQuZGVmYXVsdDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkZWZhdWx0TGltaXQgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyAnRGVmYXVsdCBsaW1pdCBtdXN0IGJlIGEgbnVtYmVyLic7XG4gICAgfVxuICAgIGlmIChkZWZhdWx0TGltaXQgPD0gMCkge1xuICAgICAgdGhyb3cgJ0RlZmF1bHQgbGltaXQgbXVzdCBiZSBhIHZhbHVlIGdyZWF0ZXIgdGhhbiAwLic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlTWF4TGltaXQobWF4TGltaXQpIHtcbiAgICBpZiAobWF4TGltaXQgPD0gMCkge1xuICAgICAgdGhyb3cgJ01heCBsaW1pdCBtdXN0IGJlIGEgdmFsdWUgZ3JlYXRlciB0aGFuIDAuJztcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVBbGxvd0hlYWRlcnMoYWxsb3dIZWFkZXJzKSB7XG4gICAgaWYgKCFbbnVsbCwgdW5kZWZpbmVkXS5pbmNsdWRlcyhhbGxvd0hlYWRlcnMpKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhbGxvd0hlYWRlcnMpKSB7XG4gICAgICAgIGFsbG93SGVhZGVycy5mb3JFYWNoKGhlYWRlciA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBoZWFkZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyAnQWxsb3cgaGVhZGVycyBtdXN0IG9ubHkgY29udGFpbiBzdHJpbmdzJztcbiAgICAgICAgICB9IGVsc2UgaWYgKCFoZWFkZXIudHJpbSgpLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgJ0FsbG93IGhlYWRlcnMgbXVzdCBub3QgY29udGFpbiBlbXB0eSBzdHJpbmdzJztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgJ0FsbG93IGhlYWRlcnMgbXVzdCBiZSBhbiBhcnJheSc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlTG9nTGV2ZWxzKGxvZ0xldmVscykge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKExvZ0xldmVscykpIHtcbiAgICAgIGlmIChsb2dMZXZlbHNba2V5XSkge1xuICAgICAgICBpZiAodmFsaWRMb2dMZXZlbHMuaW5kZXhPZihsb2dMZXZlbHNba2V5XSkgPT09IC0xKSB7XG4gICAgICAgICAgdGhyb3cgYCcke2tleX0nIG11c3QgYmUgb25lIG9mICR7SlNPTi5zdHJpbmdpZnkodmFsaWRMb2dMZXZlbHMpfWA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ0xldmVsc1trZXldID0gTG9nTGV2ZWxzW2tleV0uZGVmYXVsdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVEYXRhYmFzZU9wdGlvbnMoZGF0YWJhc2VPcHRpb25zKSB7XG4gICAgaWYgKGRhdGFiYXNlT3B0aW9ucyA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkYXRhYmFzZU9wdGlvbnMpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgdGhyb3cgYGRhdGFiYXNlT3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdGA7XG4gICAgfVxuXG4gICAgaWYgKGRhdGFiYXNlT3B0aW9ucy5lbmFibGVTY2hlbWFIb29rcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkYXRhYmFzZU9wdGlvbnMuZW5hYmxlU2NoZW1hSG9va3MgPSBEYXRhYmFzZU9wdGlvbnMuZW5hYmxlU2NoZW1hSG9va3MuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhYmFzZU9wdGlvbnMuZW5hYmxlU2NoZW1hSG9va3MgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgYGRhdGFiYXNlT3B0aW9ucy5lbmFibGVTY2hlbWFIb29rcyBtdXN0IGJlIGEgYm9vbGVhbmA7XG4gICAgfVxuICAgIGlmIChkYXRhYmFzZU9wdGlvbnMuc2NoZW1hQ2FjaGVUdGwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGF0YWJhc2VPcHRpb25zLnNjaGVtYUNhY2hlVHRsID0gRGF0YWJhc2VPcHRpb25zLnNjaGVtYUNhY2hlVHRsLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YWJhc2VPcHRpb25zLnNjaGVtYUNhY2hlVHRsICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgYGRhdGFiYXNlT3B0aW9ucy5zY2hlbWFDYWNoZVR0bCBtdXN0IGJlIGEgbnVtYmVyYDtcbiAgICB9XG4gICAgaWYgKGRhdGFiYXNlT3B0aW9ucy5hbGxvd1B1YmxpY0V4cGxhaW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGF0YWJhc2VPcHRpb25zLmFsbG93UHVibGljRXhwbGFpbiA9IERhdGFiYXNlT3B0aW9ucy5hbGxvd1B1YmxpY0V4cGxhaW4uZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhYmFzZU9wdGlvbnMuYWxsb3dQdWJsaWNFeHBsYWluICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IGBQYXJzZSBTZXJ2ZXIgb3B0aW9uICdkYXRhYmFzZU9wdGlvbnMuYWxsb3dQdWJsaWNFeHBsYWluJyBtdXN0IGJlIGEgYm9vbGVhbi5gO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVJhdGVMaW1pdChyYXRlTGltaXQpIHtcbiAgICBpZiAoIXJhdGVMaW1pdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocmF0ZUxpbWl0KSAhPT0gJ1tvYmplY3QgT2JqZWN0XScgJiZcbiAgICAgICFBcnJheS5pc0FycmF5KHJhdGVMaW1pdClcbiAgICApIHtcbiAgICAgIHRocm93IGByYXRlTGltaXQgbXVzdCBiZSBhbiBhcnJheSBvciBvYmplY3RgO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25zID0gQXJyYXkuaXNBcnJheShyYXRlTGltaXQpID8gcmF0ZUxpbWl0IDogW3JhdGVMaW1pdF07XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvcHRpb24pICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgICB0aHJvdyBgcmF0ZUxpbWl0IG11c3QgYmUgYW4gYXJyYXkgb2Ygb2JqZWN0c2A7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uLnJlcXVlc3RQYXRoID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgYHJhdGVMaW1pdC5yZXF1ZXN0UGF0aCBtdXN0IGJlIGRlZmluZWRgO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb24ucmVxdWVzdFBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IGByYXRlTGltaXQucmVxdWVzdFBhdGggbXVzdCBiZSBhIHN0cmluZ2A7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRoYXQgdGhlIHBhdGggaXMgdmFsaWQgcGF0aC10by1yZWdleHAgc3ludGF4XG4gICAgICB0cnkge1xuICAgICAgICBwYXRoVG9SZWdleHAob3B0aW9uLnJlcXVlc3RQYXRoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRocm93IGByYXRlTGltaXQucmVxdWVzdFBhdGggXCIke29wdGlvbi5yZXF1ZXN0UGF0aH1cIiBpcyBub3QgdmFsaWQ6ICR7ZXJyb3IubWVzc2FnZX1gO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9uLnJlcXVlc3RUaW1lV2luZG93ID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgYHJhdGVMaW1pdC5yZXF1ZXN0VGltZVdpbmRvdyBtdXN0IGJlIGRlZmluZWRgO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb24ucmVxdWVzdFRpbWVXaW5kb3cgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IGByYXRlTGltaXQucmVxdWVzdFRpbWVXaW5kb3cgbXVzdCBiZSBhIG51bWJlcmA7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uLmluY2x1ZGVJbnRlcm5hbFJlcXVlc3RzICYmIHR5cGVvZiBvcHRpb24uaW5jbHVkZUludGVybmFsUmVxdWVzdHMgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aHJvdyBgcmF0ZUxpbWl0LmluY2x1ZGVJbnRlcm5hbFJlcXVlc3RzIG11c3QgYmUgYSBib29sZWFuYDtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb24ucmVxdWVzdENvdW50ID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgYHJhdGVMaW1pdC5yZXF1ZXN0Q291bnQgbXVzdCBiZSBkZWZpbmVkYDtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uLnJlcXVlc3RDb3VudCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgYHJhdGVMaW1pdC5yZXF1ZXN0Q291bnQgbXVzdCBiZSBhIG51bWJlcmA7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uLmVycm9yUmVzcG9uc2VNZXNzYWdlICYmIHR5cGVvZiBvcHRpb24uZXJyb3JSZXNwb25zZU1lc3NhZ2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IGByYXRlTGltaXQuZXJyb3JSZXNwb25zZU1lc3NhZ2UgbXVzdCBiZSBhIHN0cmluZ2A7XG4gICAgICB9XG4gICAgICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmtleXMoUGFyc2VTZXJ2ZXIuUmF0ZUxpbWl0Wm9uZSk7XG4gICAgICBpZiAob3B0aW9uLnpvbmUgJiYgIW9wdGlvbnMuaW5jbHVkZXMob3B0aW9uLnpvbmUpKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBJbnRsLkxpc3RGb3JtYXQoJ2VuJywgeyBzdHlsZTogJ3Nob3J0JywgdHlwZTogJ2Rpc2p1bmN0aW9uJyB9KTtcbiAgICAgICAgdGhyb3cgYHJhdGVMaW1pdC56b25lIG11c3QgYmUgb25lIG9mICR7Zm9ybWF0dGVyLmZvcm1hdChvcHRpb25zKX1gO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdlbmVyYXRlRW1haWxWZXJpZnlUb2tlbkV4cGlyZXNBdCgpIHtcbiAgICBpZiAoIXRoaXMudmVyaWZ5VXNlckVtYWlscyB8fCAhdGhpcy5lbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgcmV0dXJuIG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgKyB0aGlzLmVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uICogMTAwMCk7XG4gIH1cblxuICBnZW5lcmF0ZVBhc3N3b3JkUmVzZXRUb2tlbkV4cGlyZXNBdCgpIHtcbiAgICBpZiAoIXRoaXMucGFzc3dvcmRQb2xpY3kgfHwgIXRoaXMucGFzc3dvcmRQb2xpY3kucmVzZXRUb2tlblZhbGlkaXR5RHVyYXRpb24pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgcmV0dXJuIG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgKyB0aGlzLnBhc3N3b3JkUG9saWN5LnJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uICogMTAwMCk7XG4gIH1cblxuICBnZW5lcmF0ZVNlc3Npb25FeHBpcmVzQXQoKSB7XG4gICAgaWYgKCF0aGlzLmV4cGlyZUluYWN0aXZlU2Vzc2lvbnMpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIHJldHVybiBuZXcgRGF0ZShub3cuZ2V0VGltZSgpICsgdGhpcy5zZXNzaW9uTGVuZ3RoICogMTAwMCk7XG4gIH1cblxuICB1bnJlZ2lzdGVyUmF0ZUxpbWl0ZXJzKCkge1xuICAgIGxldCBpID0gdGhpcy5yYXRlTGltaXRzPy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY29uc3QgbGltaXQgPSB0aGlzLnJhdGVMaW1pdHNbaV07XG4gICAgICBpZiAobGltaXQuY2xvdWQpIHtcbiAgICAgICAgdGhpcy5yYXRlTGltaXRzLnNwbGljZShpLCAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgaW52YWxpZExpbmtVUkwoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tUGFnZXMuaW52YWxpZExpbmsgfHwgYCR7dGhpcy5wdWJsaWNTZXJ2ZXJVUkx9L2FwcHMvaW52YWxpZF9saW5rLmh0bWxgO1xuICB9XG5cbiAgZ2V0IGludmFsaWRWZXJpZmljYXRpb25MaW5rVVJMKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmN1c3RvbVBhZ2VzLmludmFsaWRWZXJpZmljYXRpb25MaW5rIHx8XG4gICAgICBgJHt0aGlzLnB1YmxpY1NlcnZlclVSTH0vYXBwcy9pbnZhbGlkX3ZlcmlmaWNhdGlvbl9saW5rLmh0bWxgXG4gICAgKTtcbiAgfVxuXG4gIGdldCBsaW5rU2VuZFN1Y2Nlc3NVUkwoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY3VzdG9tUGFnZXMubGlua1NlbmRTdWNjZXNzIHx8IGAke3RoaXMucHVibGljU2VydmVyVVJMfS9hcHBzL2xpbmtfc2VuZF9zdWNjZXNzLmh0bWxgXG4gICAgKTtcbiAgfVxuXG4gIGdldCBsaW5rU2VuZEZhaWxVUkwoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tUGFnZXMubGlua1NlbmRGYWlsIHx8IGAke3RoaXMucHVibGljU2VydmVyVVJMfS9hcHBzL2xpbmtfc2VuZF9mYWlsLmh0bWxgO1xuICB9XG5cbiAgZ2V0IHZlcmlmeUVtYWlsU3VjY2Vzc1VSTCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXN0b21QYWdlcy52ZXJpZnlFbWFpbFN1Y2Nlc3MgfHxcbiAgICAgIGAke3RoaXMucHVibGljU2VydmVyVVJMfS9hcHBzL3ZlcmlmeV9lbWFpbF9zdWNjZXNzLmh0bWxgXG4gICAgKTtcbiAgfVxuXG4gIGdldCBjaG9vc2VQYXNzd29yZFVSTCgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXN0b21QYWdlcy5jaG9vc2VQYXNzd29yZCB8fCBgJHt0aGlzLnB1YmxpY1NlcnZlclVSTH0vYXBwcy9jaG9vc2VfcGFzc3dvcmRgO1xuICB9XG5cbiAgZ2V0IHJlcXVlc3RSZXNldFBhc3N3b3JkVVJMKCkge1xuICAgIHJldHVybiBgJHt0aGlzLnB1YmxpY1NlcnZlclVSTH0vJHt0aGlzLnBhZ2VzRW5kcG9pbnR9LyR7dGhpcy5hcHBsaWNhdGlvbklkfS9yZXF1ZXN0X3Bhc3N3b3JkX3Jlc2V0YDtcbiAgfVxuXG4gIGdldCBwYXNzd29yZFJlc2V0U3VjY2Vzc1VSTCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXN0b21QYWdlcy5wYXNzd29yZFJlc2V0U3VjY2VzcyB8fFxuICAgICAgYCR7dGhpcy5wdWJsaWNTZXJ2ZXJVUkx9L2FwcHMvcGFzc3dvcmRfcmVzZXRfc3VjY2Vzcy5odG1sYFxuICAgICk7XG4gIH1cblxuICBnZXQgcGFyc2VGcmFtZVVSTCgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXN0b21QYWdlcy5wYXJzZUZyYW1lVVJMO1xuICB9XG5cbiAgZ2V0IHZlcmlmeUVtYWlsVVJMKCkge1xuICAgIHJldHVybiBgJHt0aGlzLnB1YmxpY1NlcnZlclVSTH0vJHt0aGlzLnBhZ2VzRW5kcG9pbnR9LyR7dGhpcy5hcHBsaWNhdGlvbklkfS92ZXJpZnlfZW1haWxgO1xuICB9XG5cbiAgYXN5bmMgbG9hZE1hc3RlcktleSgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMubWFzdGVyS2V5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCB0dGxJc0VtcHR5ID0gIXRoaXMubWFzdGVyS2V5VHRsO1xuICAgICAgY29uc3QgaXNFeHBpcmVkID0gdGhpcy5tYXN0ZXJLZXlDYWNoZT8uZXhwaXJlc0F0ICYmIHRoaXMubWFzdGVyS2V5Q2FjaGUuZXhwaXJlc0F0IDwgbmV3IERhdGUoKTtcblxuICAgICAgaWYgKCghaXNFeHBpcmVkIHx8IHR0bElzRW1wdHkpICYmIHRoaXMubWFzdGVyS2V5Q2FjaGU/Lm1hc3RlcktleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXN0ZXJLZXlDYWNoZS5tYXN0ZXJLZXk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hc3RlcktleSA9IGF3YWl0IHRoaXMubWFzdGVyS2V5KCk7XG5cbiAgICAgIGNvbnN0IGV4cGlyZXNBdCA9IHRoaXMubWFzdGVyS2V5VHRsID8gbmV3IERhdGUoRGF0ZS5ub3coKSArIDEwMDAgKiB0aGlzLm1hc3RlcktleVR0bCkgOiBudWxsXG4gICAgICB0aGlzLm1hc3RlcktleUNhY2hlID0geyBtYXN0ZXJLZXksIGV4cGlyZXNBdCB9O1xuICAgICAgQ29uZmlnLnB1dCh0aGlzKTtcblxuICAgICAgcmV0dXJuIHRoaXMubWFzdGVyS2V5Q2FjaGUubWFzdGVyS2V5O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm1hc3RlcktleTtcbiAgfVxuXG4gIGdldCBwYWdlc0VuZHBvaW50KCkge1xuICAgIHJldHVybiB0aGlzLnBhZ2VzICYmIHRoaXMucGFnZXMucGFnZXNFbmRwb2ludFxuICAgICAgPyB0aGlzLnBhZ2VzLnBhZ2VzRW5kcG9pbnRcbiAgICAgIDogJ2FwcHMnO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbmZpZztcbm1vZHVsZS5leHBvcnRzID0gQ29uZmlnO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFJQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxhQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxJQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFELHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSyxtQkFBQSxHQUFBRixzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQU0saUJBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLFFBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLFlBQUEsR0FBQVIsT0FBQTtBQVdBLElBQUFTLE1BQUEsR0FBQU4sc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFVLFdBQUEsR0FBQVAsc0JBQUEsQ0FBQUgsT0FBQTtBQUFpRCxTQUFBRyx1QkFBQVEsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQXZCakQ7QUFDQTtBQUNBOztBQXVCQSxTQUFTRyxtQkFBbUJBLENBQUNDLEdBQUcsRUFBRTtFQUNoQyxJQUFJLENBQUNBLEdBQUcsRUFBRTtJQUNSLE9BQU9BLEdBQUc7RUFDWjtFQUNBLElBQUlBLEdBQUcsQ0FBQ0MsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0lBQ3JCRCxHQUFHLEdBQUdBLEdBQUcsQ0FBQ0UsU0FBUyxDQUFDLENBQUMsRUFBRUYsR0FBRyxDQUFDRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBQ3hDO0VBQ0EsT0FBT0gsR0FBRztBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU1JLFNBQVMsR0FBRyxDQUFDLGlCQUFpQixDQUFDO0FBRTlCLE1BQU1DLE1BQU0sQ0FBQztFQUNsQixPQUFPQyxHQUFHQSxDQUFDQyxhQUFxQixFQUFFQyxLQUFhLEVBQUU7SUFDL0MsTUFBTUMsU0FBUyxHQUFHQyxjQUFRLENBQUNKLEdBQUcsQ0FBQ0MsYUFBYSxDQUFDO0lBQzdDLElBQUksQ0FBQ0UsU0FBUyxFQUFFO01BQ2Q7SUFDRjtJQUNBLE1BQU1FLE1BQU0sR0FBRyxJQUFJTixNQUFNLENBQUMsQ0FBQztJQUMzQk0sTUFBTSxDQUFDSixhQUFhLEdBQUdBLGFBQWE7SUFDcENLLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDSixTQUFTLENBQUMsQ0FBQ0ssT0FBTyxDQUFDQyxHQUFHLElBQUk7TUFDcEMsSUFBSUEsR0FBRyxJQUFJLG9CQUFvQixFQUFFO1FBQy9CSixNQUFNLENBQUNLLFFBQVEsR0FBRyxJQUFJQywyQkFBa0IsQ0FBQ1IsU0FBUyxDQUFDUyxrQkFBa0IsQ0FBQ0MsT0FBTyxFQUFFUixNQUFNLENBQUM7TUFDeEYsQ0FBQyxNQUFNO1FBQ0xBLE1BQU0sQ0FBQ0ksR0FBRyxDQUFDLEdBQUdOLFNBQVMsQ0FBQ00sR0FBRyxDQUFDO01BQzlCO0lBQ0YsQ0FBQyxDQUFDO0lBQ0ZKLE1BQU0sQ0FBQ0gsS0FBSyxHQUFHVCxtQkFBbUIsQ0FBQ1MsS0FBSyxDQUFDO0lBQ3pDRyxNQUFNLENBQUNTLHdCQUF3QixHQUFHVCxNQUFNLENBQUNTLHdCQUF3QixDQUFDQyxJQUFJLENBQUNWLE1BQU0sQ0FBQztJQUM5RUEsTUFBTSxDQUFDVyxpQ0FBaUMsR0FBR1gsTUFBTSxDQUFDVyxpQ0FBaUMsQ0FBQ0QsSUFBSSxDQUN0RlYsTUFDRixDQUFDO0lBQ0RBLE1BQU0sQ0FBQ1ksT0FBTyxHQUFHQSxnQkFBTztJQUN4QixPQUFPWixNQUFNO0VBQ2Y7RUFFQSxNQUFNYSxRQUFRQSxDQUFBLEVBQUc7SUFDZixNQUFNQyxPQUFPLENBQUNDLEdBQUcsQ0FDZnRCLFNBQVMsQ0FBQ3VCLEdBQUcsQ0FBQyxNQUFNWixHQUFHLElBQUk7TUFDekIsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJQSxHQUFHLEVBQUUsQ0FBQyxLQUFLLFVBQVUsRUFBRTtRQUN6QyxJQUFJO1VBQ0YsSUFBSSxDQUFDQSxHQUFHLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJQSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLE9BQU9hLEtBQUssRUFBRTtVQUNkLE1BQU0sSUFBSUMsS0FBSyxDQUFDLHVDQUF1Q2QsR0FBRyxNQUFNYSxLQUFLLENBQUNFLE9BQU8sRUFBRSxDQUFDO1FBQ2xGO01BQ0Y7SUFDRixDQUFDLENBQ0gsQ0FBQztJQUVELE1BQU1DLFlBQVksR0FBR3JCLGNBQVEsQ0FBQ0osR0FBRyxDQUFDLElBQUksQ0FBQzBCLEtBQUssQ0FBQztJQUM3QyxJQUFJRCxZQUFZLEVBQUU7TUFDaEIsTUFBTUUsYUFBYSxHQUFHO1FBQUUsR0FBR0Y7TUFBYSxDQUFDO01BQ3pDM0IsU0FBUyxDQUFDVSxPQUFPLENBQUNDLEdBQUcsSUFBSTtRQUN2QmtCLGFBQWEsQ0FBQ2xCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQ0EsR0FBRyxDQUFDO01BQ2hDLENBQUMsQ0FBQztNQUNGTCxjQUFRLENBQUN3QixHQUFHLENBQUMsSUFBSSxDQUFDRixLQUFLLEVBQUVDLGFBQWEsQ0FBQztJQUN6QztFQUNGO0VBRUEsT0FBT0Usc0JBQXNCQSxDQUFDQyxtQkFBbUIsRUFBRTtJQUNqRCxLQUFLLE1BQU1yQixHQUFHLElBQUlILE1BQU0sQ0FBQ0MsSUFBSSxDQUFDdUIsbUJBQW1CLENBQUMsRUFBRTtNQUNsRCxJQUFJaEMsU0FBUyxDQUFDaUMsUUFBUSxDQUFDdEIsR0FBRyxDQUFDLElBQUksT0FBT3FCLG1CQUFtQixDQUFDckIsR0FBRyxDQUFDLEtBQUssVUFBVSxFQUFFO1FBQzdFcUIsbUJBQW1CLENBQUMsSUFBSXJCLEdBQUcsRUFBRSxDQUFDLEdBQUdxQixtQkFBbUIsQ0FBQ3JCLEdBQUcsQ0FBQztRQUN6RCxPQUFPcUIsbUJBQW1CLENBQUNyQixHQUFHLENBQUM7TUFDakM7SUFDRjtFQUNGO0VBRUEsT0FBT21CLEdBQUdBLENBQUNFLG1CQUFtQixFQUFFO0lBQzlCL0IsTUFBTSxDQUFDaUMsZUFBZSxDQUFDRixtQkFBbUIsQ0FBQztJQUMzQy9CLE1BQU0sQ0FBQ2tDLG1CQUFtQixDQUFDSCxtQkFBbUIsQ0FBQztJQUMvQy9CLE1BQU0sQ0FBQzhCLHNCQUFzQixDQUFDQyxtQkFBbUIsQ0FBQztJQUNsRDFCLGNBQVEsQ0FBQ3dCLEdBQUcsQ0FBQ0UsbUJBQW1CLENBQUNKLEtBQUssRUFBRUksbUJBQW1CLENBQUM7SUFDNUQvQixNQUFNLENBQUNtQyxzQkFBc0IsQ0FBQ0osbUJBQW1CLENBQUNLLGNBQWMsQ0FBQztJQUNqRSxPQUFPTCxtQkFBbUI7RUFDNUI7RUFFQSxPQUFPRSxlQUFlQSxDQUFDO0lBQ3JCSSxXQUFXO0lBQ1hDLGVBQWU7SUFDZkMsNEJBQTRCO0lBQzVCQyxzQkFBc0I7SUFDdEJDLGFBQWE7SUFDYkMsWUFBWTtJQUNaQyxRQUFRO0lBQ1JDLGNBQWM7SUFDZFIsY0FBYztJQUNkUyxZQUFZO0lBQ1pDLFNBQVM7SUFDVEMsY0FBYztJQUNkQyxpQkFBaUI7SUFDakJDLGlCQUFpQjtJQUNqQkMsb0JBQW9CO0lBQ3BCQyxZQUFZO0lBQ1pDLGtCQUFrQjtJQUNsQkMsVUFBVTtJQUNWQyxLQUFLO0lBQ0xDLFFBQVE7SUFDUkMsbUJBQW1CO0lBQ25CQywwQkFBMEI7SUFDMUJDLE1BQU07SUFDTkMsc0JBQXNCO0lBQ3RCQyx5QkFBeUI7SUFDekJDLFNBQVM7SUFDVEMsU0FBUztJQUNUQyxlQUFlO0lBQ2ZDLGtCQUFrQjtJQUNsQkM7RUFDRixDQUFDLEVBQUU7SUFDRCxJQUFJbkIsU0FBUyxLQUFLRyxpQkFBaUIsRUFBRTtNQUNuQyxNQUFNLElBQUl6QixLQUFLLENBQUMscURBQXFELENBQUM7SUFDeEU7SUFFQSxJQUFJc0IsU0FBUyxLQUFLQyxjQUFjLEVBQUU7TUFDaEMsTUFBTSxJQUFJdkIsS0FBSyxDQUFDLGtEQUFrRCxDQUFDO0lBQ3JFO0lBRUEsSUFBSSxDQUFDMEMsNEJBQTRCLENBQUN0QixjQUFjLENBQUM7SUFDakQsSUFBSSxDQUFDdUIsc0JBQXNCLENBQUMvQixjQUFjLENBQUM7SUFDM0MsSUFBSSxDQUFDZ0MseUJBQXlCLENBQUNmLFVBQVUsQ0FBQztJQUUxQyxJQUFJLE9BQU9kLDRCQUE0QixLQUFLLFNBQVMsRUFBRTtNQUNyRCxNQUFNLHNEQUFzRDtJQUM5RDtJQUVBLElBQUksT0FBT3lCLGtCQUFrQixLQUFLLFNBQVMsRUFBRTtNQUMzQyxNQUFNLDRDQUE0QztJQUNwRDtJQUVBLElBQUksQ0FBQ0ssdUJBQXVCLENBQUM7TUFBRS9CO0lBQWdCLENBQUMsQ0FBQztJQUNqRCxJQUFJLENBQUNnQyw0QkFBNEIsQ0FBQzdCLGFBQWEsRUFBRUQsc0JBQXNCLENBQUM7SUFDeEUsSUFBSSxDQUFDK0IsV0FBVyxDQUFDLGNBQWMsRUFBRTFCLFlBQVksQ0FBQztJQUM5QyxJQUFJLENBQUMwQixXQUFXLENBQUMsbUJBQW1CLEVBQUV2QixpQkFBaUIsQ0FBQztJQUN4RCxJQUFJLENBQUN1QixXQUFXLENBQUMsc0JBQXNCLEVBQUVyQixvQkFBb0IsQ0FBQztJQUM5RCxJQUFJLENBQUNzQixvQkFBb0IsQ0FBQzlCLFlBQVksQ0FBQztJQUN2QyxJQUFJLENBQUMrQixnQkFBZ0IsQ0FBQzlCLFFBQVEsQ0FBQztJQUMvQixJQUFJLENBQUMrQixvQkFBb0IsQ0FBQ3ZCLFlBQVksQ0FBQztJQUN2QyxJQUFJLENBQUN3QiwwQkFBMEIsQ0FBQ3ZCLGtCQUFrQixDQUFDO0lBQ25ELElBQUksQ0FBQ3dCLG9CQUFvQixDQUFDdEIsS0FBSyxDQUFDO0lBQ2hDLElBQUksQ0FBQ3VCLHVCQUF1QixDQUFDdEIsUUFBUSxDQUFDO0lBQ3RDLElBQUksQ0FBQ3VCLHFCQUFxQixDQUFDcEIsTUFBTSxDQUFDO0lBQ2xDLElBQUksQ0FBQ3FCLDJCQUEyQixDQUFDdkIsbUJBQW1CLENBQUM7SUFDckQsSUFBSSxDQUFDd0Isa0NBQWtDLENBQUN2QiwwQkFBMEIsQ0FBQztJQUNuRSxJQUFJLENBQUN3QixpQ0FBaUMsQ0FBQ3JCLHlCQUF5QixDQUFDO0lBQ2pFLElBQUksQ0FBQ3NCLDhCQUE4QixDQUFDdkIsc0JBQXNCLENBQUM7SUFDM0QsSUFBSSxDQUFDd0IsaUJBQWlCLENBQUNyQixTQUFTLENBQUM7SUFDakMsSUFBSSxDQUFDc0IsaUJBQWlCLENBQUN2QixTQUFTLENBQUM7SUFDakMsSUFBSSxDQUFDd0IsdUJBQXVCLENBQUN0QixlQUFlLENBQUM7SUFDN0MsSUFBSSxDQUFDdUIsbUJBQW1CLENBQUNqRCxXQUFXLENBQUM7SUFDckMsSUFBSSxDQUFDa0QsZ0NBQWdDLENBQUN0Qix3QkFBd0IsQ0FBQztFQUNqRTtFQUVBLE9BQU9xQixtQkFBbUJBLENBQUNqRCxXQUFXLEVBQUU7SUFDdEMsSUFBSSxDQUFDQSxXQUFXLEVBQUU7TUFBRTtJQUFRO0lBRTVCLElBQUk5QixNQUFNLENBQUNpRixTQUFTLENBQUNDLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDckQsV0FBVyxDQUFDLEtBQUssaUJBQWlCLEVBQUU7TUFDckUsTUFBTWIsS0FBSyxDQUFDLG9EQUFvRCxDQUFDO0lBQ25FO0VBQ0Y7RUFFQSxPQUFPVSxtQkFBbUJBLENBQUM7SUFDekJ5RCxnQkFBZ0I7SUFDaEJDLGNBQWM7SUFDZEMsT0FBTztJQUNQdkQsZUFBZTtJQUNmd0QsZ0JBQWdCO0lBQ2hCQyxnQ0FBZ0M7SUFDaENDO0VBQ0YsQ0FBQyxFQUFFO0lBQ0QsTUFBTUMsWUFBWSxHQUFHTCxjQUFjLENBQUM5RSxPQUFPO0lBQzNDLElBQUk2RSxnQkFBZ0IsRUFBRTtNQUNwQixJQUFJLENBQUNPLDBCQUEwQixDQUFDO1FBQzlCRCxZQUFZO1FBQ1pKLE9BQU87UUFDUHZELGVBQWUsRUFBRUEsZUFBZSxJQUFJd0QsZ0JBQWdCO1FBQ3BEQyxnQ0FBZ0M7UUFDaENDO01BQ0YsQ0FBQyxDQUFDO0lBQ0o7RUFDRjtFQUVBLE9BQU9kLDhCQUE4QkEsQ0FBQ3ZCLHNCQUFzQixFQUFFO0lBQzVELElBQUlBLHNCQUFzQixLQUFLd0MsU0FBUyxFQUFFO01BQ3hDeEMsc0JBQXNCLEdBQUdBLHNCQUFzQixDQUFDbEUsT0FBTztJQUN6RCxDQUFDLE1BQU0sSUFBSSxDQUFDMkcsS0FBSyxDQUFDQyxPQUFPLENBQUMxQyxzQkFBc0IsQ0FBQyxFQUFFO01BQ2pELE1BQU0sOERBQThEO0lBQ3RFO0VBQ0Y7RUFFQSxPQUFPb0IsMkJBQTJCQSxDQUFDdkIsbUJBQW1CLEVBQUU7SUFDdEQsSUFBSSxPQUFPQSxtQkFBbUIsS0FBSyxTQUFTLEVBQUU7TUFDNUMsTUFBTSw0REFBNEQ7SUFDcEU7RUFDRjtFQUVBLE9BQU95QixpQ0FBaUNBLENBQUNyQix5QkFBeUIsRUFBRTtJQUNsRSxJQUFJLE9BQU9BLHlCQUF5QixLQUFLLFNBQVMsRUFBRTtNQUNsRCxNQUFNLGtFQUFrRTtJQUMxRTtFQUNGO0VBRUEsT0FBTzJCLGdDQUFnQ0EsQ0FBQ3RCLHdCQUF3QixFQUFFO0lBQ2hFLElBQUksT0FBT0Esd0JBQXdCLEtBQUssU0FBUyxFQUFFO01BQ2pELE1BQU0saUVBQWlFO0lBQ3pFO0VBQ0Y7RUFFQSxPQUFPWSx1QkFBdUJBLENBQUN0QixRQUFRLEVBQUU7SUFDdkMsSUFBSWhELE1BQU0sQ0FBQ2lGLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDQyxJQUFJLENBQUNuQyxRQUFRLENBQUMsS0FBSyxpQkFBaUIsRUFBRTtNQUNsRSxNQUFNLGlEQUFpRDtJQUN6RDtJQUNBLElBQUlBLFFBQVEsQ0FBQytDLFdBQVcsS0FBS0gsU0FBUyxFQUFFO01BQ3RDNUMsUUFBUSxDQUFDK0MsV0FBVyxHQUFHQyw0QkFBZSxDQUFDRCxXQUFXLENBQUM3RyxPQUFPO0lBQzVELENBQUMsTUFBTSxJQUFJLENBQUMsSUFBQStHLGlCQUFTLEVBQUNqRCxRQUFRLENBQUMrQyxXQUFXLENBQUMsRUFBRTtNQUMzQyxNQUFNLDZEQUE2RDtJQUNyRTtJQUNBLElBQUkvQyxRQUFRLENBQUNrRCxjQUFjLEtBQUtOLFNBQVMsRUFBRTtNQUN6QzVDLFFBQVEsQ0FBQ2tELGNBQWMsR0FBR0YsNEJBQWUsQ0FBQ0UsY0FBYyxDQUFDaEgsT0FBTztJQUNsRSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUErRyxpQkFBUyxFQUFDakQsUUFBUSxDQUFDa0QsY0FBYyxDQUFDLEVBQUU7TUFDOUMsTUFBTSxnRUFBZ0U7SUFDeEU7RUFDRjtFQUVBLE9BQU8zQixxQkFBcUJBLENBQUNwQixNQUFxQixFQUFFO0lBQ2xELElBQUksQ0FBQ0EsTUFBTSxFQUFFO01BQUU7SUFBUTtJQUN2QixJQUFJbkQsTUFBTSxDQUFDaUYsU0FBUyxDQUFDQyxRQUFRLENBQUNDLElBQUksQ0FBQ2hDLE1BQU0sQ0FBQyxLQUFLLGlCQUFpQixFQUFFO01BQ2hFLE1BQU0sK0NBQStDO0lBQ3ZEO0lBQ0EsSUFBSUEsTUFBTSxDQUFDZ0QsV0FBVyxLQUFLUCxTQUFTLEVBQUU7TUFDcEN6QyxNQUFNLENBQUNnRCxXQUFXLEdBQUdDLDBCQUFhLENBQUNELFdBQVcsQ0FBQ2pILE9BQU87SUFDeEQsQ0FBQyxNQUFNLElBQUksQ0FBQzJHLEtBQUssQ0FBQ0MsT0FBTyxDQUFDM0MsTUFBTSxDQUFDZ0QsV0FBVyxDQUFDLEVBQUU7TUFDN0MsTUFBTSwwREFBMEQ7SUFDbEU7SUFDQSxJQUFJaEQsTUFBTSxDQUFDa0QsTUFBTSxLQUFLVCxTQUFTLEVBQUU7TUFDL0J6QyxNQUFNLENBQUNrRCxNQUFNLEdBQUdELDBCQUFhLENBQUNDLE1BQU0sQ0FBQ25ILE9BQU87SUFDOUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFBK0csaUJBQVMsRUFBQzlDLE1BQU0sQ0FBQ2tELE1BQU0sQ0FBQyxFQUFFO01BQ3BDLE1BQU0sc0RBQXNEO0lBQzlEO0lBQ0EsSUFBSWxELE1BQU0sQ0FBQ21ELGlCQUFpQixLQUFLVixTQUFTLEVBQUU7TUFDMUN6QyxNQUFNLENBQUNtRCxpQkFBaUIsR0FBR0YsMEJBQWEsQ0FBQ0UsaUJBQWlCLENBQUNwSCxPQUFPO0lBQ3BFLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBQStHLGlCQUFTLEVBQUM5QyxNQUFNLENBQUNtRCxpQkFBaUIsQ0FBQyxFQUFFO01BQy9DLE1BQU0saUVBQWlFO0lBQ3pFO0lBQ0EsSUFBSW5ELE1BQU0sQ0FBQ29ELHNCQUFzQixLQUFLWCxTQUFTLEVBQUU7TUFDL0N6QyxNQUFNLENBQUNvRCxzQkFBc0IsR0FBR0gsMEJBQWEsQ0FBQ0csc0JBQXNCLENBQUNySCxPQUFPO0lBQzlFLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBQStHLGlCQUFTLEVBQUM5QyxNQUFNLENBQUNvRCxzQkFBc0IsQ0FBQyxFQUFFO01BQ3BELE1BQU0sc0VBQXNFO0lBQzlFO0lBQ0EsSUFBSXBELE1BQU0sQ0FBQ3FELFdBQVcsS0FBS1osU0FBUyxFQUFFO01BQ3BDekMsTUFBTSxDQUFDcUQsV0FBVyxHQUFHSiwwQkFBYSxDQUFDSSxXQUFXLENBQUN0SCxPQUFPO0lBQ3hELENBQUMsTUFBTSxJQUFJLENBQUMsSUFBQStHLGlCQUFTLEVBQUM5QyxNQUFNLENBQUNxRCxXQUFXLENBQUMsRUFBRTtNQUN6QyxNQUFNLDJEQUEyRDtJQUNuRTtJQUNBLElBQUlyRCxNQUFNLENBQUNzRCxlQUFlLEtBQUtiLFNBQVMsRUFBRTtNQUN4Q3pDLE1BQU0sQ0FBQ3NELGVBQWUsR0FBRyxJQUFJO0lBQy9CLENBQUMsTUFBTSxJQUFJdEQsTUFBTSxDQUFDc0QsZUFBZSxLQUFLLElBQUksSUFBSSxPQUFPdEQsTUFBTSxDQUFDc0QsZUFBZSxLQUFLLFVBQVUsRUFBRTtNQUMxRixNQUFNLGdFQUFnRTtJQUN4RTtJQUNBLElBQUl0RCxNQUFNLENBQUN1RCxjQUFjLEtBQUtkLFNBQVMsRUFBRTtNQUN2Q3pDLE1BQU0sQ0FBQ3VELGNBQWMsR0FBRyxJQUFJO0lBQzlCLENBQUMsTUFBTSxJQUFJdkQsTUFBTSxDQUFDdUQsY0FBYyxLQUFLLElBQUksSUFBSSxPQUFPdkQsTUFBTSxDQUFDdUQsY0FBYyxLQUFLLFVBQVUsRUFBRTtNQUN4RixNQUFNLCtEQUErRDtJQUN2RTtFQUNGO0VBRUEsT0FBT3JDLG9CQUFvQkEsQ0FBQ3RCLEtBQUssRUFBRTtJQUNqQyxJQUFJL0MsTUFBTSxDQUFDaUYsU0FBUyxDQUFDQyxRQUFRLENBQUNDLElBQUksQ0FBQ3BDLEtBQUssQ0FBQyxLQUFLLGlCQUFpQixFQUFFO01BQy9ELE1BQU0sOENBQThDO0lBQ3REO0lBQ0EsSUFBSUEsS0FBSyxDQUFDNEQsa0JBQWtCLEtBQUtmLFNBQVMsRUFBRTtNQUMxQzdDLEtBQUssQ0FBQzRELGtCQUFrQixHQUFHQyx5QkFBWSxDQUFDRCxrQkFBa0IsQ0FBQ3pILE9BQU87SUFDcEUsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFBK0csaUJBQVMsRUFBQ2xELEtBQUssQ0FBQzRELGtCQUFrQixDQUFDLEVBQUU7TUFDL0MsTUFBTSxpRUFBaUU7SUFDekU7SUFDQSxJQUFJNUQsS0FBSyxDQUFDOEQsb0JBQW9CLEtBQUtqQixTQUFTLEVBQUU7TUFDNUM3QyxLQUFLLENBQUM4RCxvQkFBb0IsR0FBR0QseUJBQVksQ0FBQ0Msb0JBQW9CLENBQUMzSCxPQUFPO0lBQ3hFLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBQTRILGdCQUFRLEVBQUMvRCxLQUFLLENBQUM4RCxvQkFBb0IsQ0FBQyxFQUFFO01BQ2hELE1BQU0sa0VBQWtFO0lBQzFFO0lBQ0EsSUFBSTlELEtBQUssQ0FBQ2dFLDBCQUEwQixLQUFLbkIsU0FBUyxFQUFFO01BQ2xEN0MsS0FBSyxDQUFDZ0UsMEJBQTBCLEdBQUdILHlCQUFZLENBQUNHLDBCQUEwQixDQUFDN0gsT0FBTztJQUNwRixDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUE0SCxnQkFBUSxFQUFDL0QsS0FBSyxDQUFDZ0UsMEJBQTBCLENBQUMsRUFBRTtNQUN0RCxNQUFNLHdFQUF3RTtJQUNoRjtJQUNBLElBQUloRSxLQUFLLENBQUNpRSxZQUFZLEtBQUtwQixTQUFTLEVBQUU7TUFDcEM3QyxLQUFLLENBQUNpRSxZQUFZLEdBQUdKLHlCQUFZLENBQUNJLFlBQVksQ0FBQzlILE9BQU87SUFDeEQsQ0FBQyxNQUFNLElBQ0xjLE1BQU0sQ0FBQ2lGLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDQyxJQUFJLENBQUNwQyxLQUFLLENBQUNpRSxZQUFZLENBQUMsS0FBSyxpQkFBaUIsSUFDeEUsT0FBT2pFLEtBQUssQ0FBQ2lFLFlBQVksS0FBSyxVQUFVLEVBQ3hDO01BQ0EsTUFBTSx5RUFBeUU7SUFDakY7SUFDQSxJQUFJakUsS0FBSyxDQUFDa0UsYUFBYSxLQUFLckIsU0FBUyxFQUFFO01BQ3JDN0MsS0FBSyxDQUFDa0UsYUFBYSxHQUFHTCx5QkFBWSxDQUFDSyxhQUFhLENBQUMvSCxPQUFPO0lBQzFELENBQUMsTUFBTSxJQUFJLENBQUMsSUFBQStHLGlCQUFTLEVBQUNsRCxLQUFLLENBQUNrRSxhQUFhLENBQUMsRUFBRTtNQUMxQyxNQUFNLDREQUE0RDtJQUNwRTtJQUNBLElBQUlsRSxLQUFLLENBQUNtRSxTQUFTLEtBQUt0QixTQUFTLElBQUksQ0FBQyxJQUFBa0IsZ0JBQVEsRUFBQy9ELEtBQUssQ0FBQ21FLFNBQVMsQ0FBQyxFQUFFO01BQy9ELE1BQU0sdURBQXVEO0lBQy9EO0lBQ0EsSUFBSW5FLEtBQUssQ0FBQ29FLGFBQWEsS0FBS3ZCLFNBQVMsRUFBRTtNQUNyQzdDLEtBQUssQ0FBQ29FLGFBQWEsR0FBR1AseUJBQVksQ0FBQ08sYUFBYSxDQUFDakksT0FBTztJQUMxRCxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUE0SCxnQkFBUSxFQUFDL0QsS0FBSyxDQUFDb0UsYUFBYSxDQUFDLEVBQUU7TUFDekMsTUFBTSwyREFBMkQ7SUFDbkU7SUFDQSxJQUFJcEUsS0FBSyxDQUFDcUUsVUFBVSxLQUFLeEIsU0FBUyxFQUFFO01BQ2xDN0MsS0FBSyxDQUFDcUUsVUFBVSxHQUFHUix5QkFBWSxDQUFDUSxVQUFVLENBQUNsSSxPQUFPO0lBQ3BELENBQUMsTUFBTSxJQUFJYyxNQUFNLENBQUNpRixTQUFTLENBQUNDLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDcEMsS0FBSyxDQUFDcUUsVUFBVSxDQUFDLEtBQUssaUJBQWlCLEVBQUU7TUFDakYsTUFBTSx5REFBeUQ7SUFDakU7SUFDQSxJQUFJckUsS0FBSyxDQUFDc0UsWUFBWSxLQUFLekIsU0FBUyxFQUFFO01BQ3BDN0MsS0FBSyxDQUFDc0UsWUFBWSxHQUFHVCx5QkFBWSxDQUFDUyxZQUFZLENBQUNuSSxPQUFPO0lBQ3hELENBQUMsTUFBTSxJQUFJLEVBQUU2RCxLQUFLLENBQUNzRSxZQUFZLFlBQVl4QixLQUFLLENBQUMsRUFBRTtNQUNqRCxNQUFNLDBEQUEwRDtJQUNsRTtJQUNBLElBQUk5QyxLQUFLLENBQUN1RSxzQkFBc0IsS0FBSzFCLFNBQVMsRUFBRTtNQUM5QzdDLEtBQUssQ0FBQ3VFLHNCQUFzQixHQUFHVix5QkFBWSxDQUFDVSxzQkFBc0IsQ0FBQ3BJLE9BQU87SUFDNUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFBK0csaUJBQVMsRUFBQ2xELEtBQUssQ0FBQ3VFLHNCQUFzQixDQUFDLEVBQUU7TUFDbkQsTUFBTSxxRUFBcUU7SUFDN0U7RUFDRjtFQUVBLE9BQU9sRCwwQkFBMEJBLENBQUN2QixrQkFBa0IsRUFBRTtJQUNwRCxJQUFJLENBQUNBLGtCQUFrQixFQUFFO01BQ3ZCO0lBQ0Y7SUFDQSxJQUFJQSxrQkFBa0IsQ0FBQzBFLEdBQUcsS0FBSzNCLFNBQVMsRUFBRTtNQUN4Qy9DLGtCQUFrQixDQUFDMEUsR0FBRyxHQUFHQywrQkFBa0IsQ0FBQ0QsR0FBRyxDQUFDckksT0FBTztJQUN6RCxDQUFDLE1BQU0sSUFBSSxDQUFDdUksS0FBSyxDQUFDNUUsa0JBQWtCLENBQUMwRSxHQUFHLENBQUMsSUFBSTFFLGtCQUFrQixDQUFDMEUsR0FBRyxJQUFJLENBQUMsRUFBRTtNQUN4RSxNQUFNLHNEQUFzRDtJQUM5RCxDQUFDLE1BQU0sSUFBSUUsS0FBSyxDQUFDNUUsa0JBQWtCLENBQUMwRSxHQUFHLENBQUMsRUFBRTtNQUN4QyxNQUFNLHdDQUF3QztJQUNoRDtJQUNBLElBQUksQ0FBQzFFLGtCQUFrQixDQUFDNkUsS0FBSyxFQUFFO01BQzdCN0Usa0JBQWtCLENBQUM2RSxLQUFLLEdBQUdGLCtCQUFrQixDQUFDRSxLQUFLLENBQUN4SSxPQUFPO0lBQzdELENBQUMsTUFBTSxJQUFJLEVBQUUyRCxrQkFBa0IsQ0FBQzZFLEtBQUssWUFBWTdCLEtBQUssQ0FBQyxFQUFFO01BQ3ZELE1BQU0sa0RBQWtEO0lBQzFEO0VBQ0Y7RUFFQSxPQUFPbEMsNEJBQTRCQSxDQUFDdEIsY0FBYyxFQUFFO0lBQ2xELElBQUlBLGNBQWMsRUFBRTtNQUNsQixJQUNFLE9BQU9BLGNBQWMsQ0FBQ3NGLFFBQVEsS0FBSyxRQUFRLElBQzNDdEYsY0FBYyxDQUFDc0YsUUFBUSxJQUFJLENBQUMsSUFDNUJ0RixjQUFjLENBQUNzRixRQUFRLEdBQUcsS0FBSyxFQUMvQjtRQUNBLE1BQU0sd0VBQXdFO01BQ2hGO01BRUEsSUFDRSxDQUFDQyxNQUFNLENBQUNDLFNBQVMsQ0FBQ3hGLGNBQWMsQ0FBQ3lGLFNBQVMsQ0FBQyxJQUMzQ3pGLGNBQWMsQ0FBQ3lGLFNBQVMsR0FBRyxDQUFDLElBQzVCekYsY0FBYyxDQUFDeUYsU0FBUyxHQUFHLEdBQUcsRUFDOUI7UUFDQSxNQUFNLGtGQUFrRjtNQUMxRjtNQUVBLElBQUl6RixjQUFjLENBQUMwRixxQkFBcUIsS0FBS25DLFNBQVMsRUFBRTtRQUN0RHZELGNBQWMsQ0FBQzBGLHFCQUFxQixHQUFHQyxrQ0FBcUIsQ0FBQ0QscUJBQXFCLENBQUM3SSxPQUFPO01BQzVGLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBQStHLGlCQUFTLEVBQUM1RCxjQUFjLENBQUMwRixxQkFBcUIsQ0FBQyxFQUFFO1FBQzNELE1BQU0sNkVBQTZFO01BQ3JGO0lBQ0Y7RUFDRjtFQUVBLE9BQU9uRSxzQkFBc0JBLENBQUMvQixjQUFjLEVBQUU7SUFDNUMsSUFBSUEsY0FBYyxFQUFFO01BQ2xCLElBQ0VBLGNBQWMsQ0FBQ29HLGNBQWMsS0FBS3JDLFNBQVMsS0FDMUMsT0FBTy9ELGNBQWMsQ0FBQ29HLGNBQWMsS0FBSyxRQUFRLElBQUlwRyxjQUFjLENBQUNvRyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEVBQ3hGO1FBQ0EsTUFBTSx5REFBeUQ7TUFDakU7TUFFQSxJQUNFcEcsY0FBYyxDQUFDcUcsMEJBQTBCLEtBQUt0QyxTQUFTLEtBQ3RELE9BQU8vRCxjQUFjLENBQUNxRywwQkFBMEIsS0FBSyxRQUFRLElBQzVEckcsY0FBYyxDQUFDcUcsMEJBQTBCLElBQUksQ0FBQyxDQUFDLEVBQ2pEO1FBQ0EsTUFBTSxxRUFBcUU7TUFDN0U7TUFFQSxJQUFJckcsY0FBYyxDQUFDc0csZ0JBQWdCLEVBQUU7UUFDbkMsSUFBSSxPQUFPdEcsY0FBYyxDQUFDc0csZ0JBQWdCLEtBQUssUUFBUSxFQUFFO1VBQ3ZEdEcsY0FBYyxDQUFDc0csZ0JBQWdCLEdBQUcsSUFBSUMsTUFBTSxDQUFDdkcsY0FBYyxDQUFDc0csZ0JBQWdCLENBQUM7UUFDL0UsQ0FBQyxNQUFNLElBQUksRUFBRXRHLGNBQWMsQ0FBQ3NHLGdCQUFnQixZQUFZQyxNQUFNLENBQUMsRUFBRTtVQUMvRCxNQUFNLDBFQUEwRTtRQUNsRjtNQUNGO01BRUEsSUFDRXZHLGNBQWMsQ0FBQ3dHLGlCQUFpQixJQUNoQyxPQUFPeEcsY0FBYyxDQUFDd0csaUJBQWlCLEtBQUssVUFBVSxFQUN0RDtRQUNBLE1BQU0sc0RBQXNEO01BQzlEO01BRUEsSUFDRXhHLGNBQWMsQ0FBQ3lHLGtCQUFrQixJQUNqQyxPQUFPekcsY0FBYyxDQUFDeUcsa0JBQWtCLEtBQUssU0FBUyxFQUN0RDtRQUNBLE1BQU0sNERBQTREO01BQ3BFO01BRUEsSUFDRXpHLGNBQWMsQ0FBQzBHLGtCQUFrQixLQUNoQyxDQUFDWCxNQUFNLENBQUNDLFNBQVMsQ0FBQ2hHLGNBQWMsQ0FBQzBHLGtCQUFrQixDQUFDLElBQ25EMUcsY0FBYyxDQUFDMEcsa0JBQWtCLElBQUksQ0FBQyxJQUN0QzFHLGNBQWMsQ0FBQzBHLGtCQUFrQixHQUFHLEVBQUUsQ0FBQyxFQUN6QztRQUNBLE1BQU0scUVBQXFFO01BQzdFO01BRUEsSUFDRTFHLGNBQWMsQ0FBQzJHLHNCQUFzQixJQUNyQyxPQUFPM0csY0FBYyxDQUFDMkcsc0JBQXNCLEtBQUssU0FBUyxFQUMxRDtRQUNBLE1BQU0sZ0RBQWdEO01BQ3hEO01BQ0EsSUFBSTNHLGNBQWMsQ0FBQzJHLHNCQUFzQixJQUFJLENBQUMzRyxjQUFjLENBQUNxRywwQkFBMEIsRUFBRTtRQUN2RixNQUFNLDBFQUEwRTtNQUNsRjtNQUVBLElBQ0VyRyxjQUFjLENBQUM0RyxrQ0FBa0MsSUFDakQsT0FBTzVHLGNBQWMsQ0FBQzRHLGtDQUFrQyxLQUFLLFNBQVMsRUFDdEU7UUFDQSxNQUFNLDREQUE0RDtNQUNwRTtJQUNGO0VBQ0Y7O0VBRUE7RUFDQSxPQUFPN0csc0JBQXNCQSxDQUFDQyxjQUFjLEVBQUU7SUFDNUMsSUFBSUEsY0FBYyxJQUFJQSxjQUFjLENBQUNzRyxnQkFBZ0IsRUFBRTtNQUNyRHRHLGNBQWMsQ0FBQzZHLGdCQUFnQixHQUFHQyxLQUFLLElBQUk7UUFDekMsT0FBTzlHLGNBQWMsQ0FBQ3NHLGdCQUFnQixDQUFDUyxJQUFJLENBQUNELEtBQUssQ0FBQztNQUNwRCxDQUFDO0lBQ0g7RUFDRjtFQUVBLE9BQU83RSx1QkFBdUJBLENBQUM7SUFBRS9CLGVBQWU7SUFBRThHLFFBQVEsR0FBRztFQUFNLENBQUMsRUFBRTtJQUNwRSxJQUFJLENBQUM5RyxlQUFlLEVBQUU7TUFDcEIsSUFBSSxDQUFDOEcsUUFBUSxFQUFFO1FBQ2I7TUFDRjtNQUNBLE1BQU0seUNBQXlDO0lBQ2pEO0lBRUEsTUFBTUMsSUFBSSxHQUFHLE9BQU8vRyxlQUFlO0lBRW5DLElBQUkrRyxJQUFJLEtBQUssUUFBUSxFQUFFO01BQ3JCLElBQUksQ0FBQy9HLGVBQWUsQ0FBQ2dILFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDaEgsZUFBZSxDQUFDZ0gsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQ3JGLE1BQU0sbUZBQW1GO01BQzNGO01BQ0E7SUFDRjtJQUVBLElBQUlELElBQUksS0FBSyxVQUFVLEVBQUU7TUFDdkI7SUFDRjtJQUVBLE1BQU0sb0VBQW9FQSxJQUFJLEdBQUc7RUFDbkY7RUFFQSxPQUFPbkQsMEJBQTBCQSxDQUFDO0lBQ2hDRCxZQUFZO0lBQ1pKLE9BQU87SUFDUHZELGVBQWU7SUFDZnlELGdDQUFnQztJQUNoQ0M7RUFDRixDQUFDLEVBQUU7SUFDRCxJQUFJLENBQUNDLFlBQVksRUFBRTtNQUNqQixNQUFNLDBFQUEwRTtJQUNsRjtJQUNBLElBQUksT0FBT0osT0FBTyxLQUFLLFFBQVEsRUFBRTtNQUMvQixNQUFNLHNFQUFzRTtJQUM5RTtJQUNBLElBQUksQ0FBQ3hCLHVCQUF1QixDQUFDO01BQUUvQixlQUFlO01BQUU4RyxRQUFRLEVBQUU7SUFBSyxDQUFDLENBQUM7SUFDakUsSUFBSXJELGdDQUFnQyxFQUFFO01BQ3BDLElBQUlpQyxLQUFLLENBQUNqQyxnQ0FBZ0MsQ0FBQyxFQUFFO1FBQzNDLE1BQU0sOERBQThEO01BQ3RFLENBQUMsTUFBTSxJQUFJQSxnQ0FBZ0MsSUFBSSxDQUFDLEVBQUU7UUFDaEQsTUFBTSxzRUFBc0U7TUFDOUU7SUFDRjtJQUNBLElBQUlDLDRCQUE0QixJQUFJLE9BQU9BLDRCQUE0QixLQUFLLFNBQVMsRUFBRTtNQUNyRixNQUFNLHNEQUFzRDtJQUM5RDtJQUNBLElBQUlBLDRCQUE0QixJQUFJLENBQUNELGdDQUFnQyxFQUFFO01BQ3JFLE1BQU0sc0ZBQXNGO0lBQzlGO0VBQ0Y7RUFFQSxPQUFPM0IseUJBQXlCQSxDQUFDZixVQUFVLEVBQUU7SUFDM0MsSUFBSTtNQUNGLElBQUlBLFVBQVUsSUFBSSxJQUFJLElBQUksT0FBT0EsVUFBVSxLQUFLLFFBQVEsSUFBSUEsVUFBVSxZQUFZK0MsS0FBSyxFQUFFO1FBQ3ZGLE1BQU0scUNBQXFDO01BQzdDO0lBQ0YsQ0FBQyxDQUFDLE9BQU83RyxDQUFDLEVBQUU7TUFDVixJQUFJQSxDQUFDLFlBQVlnSyxjQUFjLEVBQUU7UUFDL0I7TUFDRjtNQUNBLE1BQU1oSyxDQUFDO0lBQ1Q7SUFDQSxJQUFJOEQsVUFBVSxDQUFDbUcsc0JBQXNCLEtBQUtyRCxTQUFTLEVBQUU7TUFDbkQ5QyxVQUFVLENBQUNtRyxzQkFBc0IsR0FBR0MsOEJBQWlCLENBQUNELHNCQUFzQixDQUFDL0osT0FBTztJQUN0RixDQUFDLE1BQU0sSUFBSSxPQUFPNEQsVUFBVSxDQUFDbUcsc0JBQXNCLEtBQUssU0FBUyxFQUFFO01BQ2pFLE1BQU0sNERBQTREO0lBQ3BFO0lBQ0EsSUFBSW5HLFVBQVUsQ0FBQ3FHLGVBQWUsS0FBS3ZELFNBQVMsRUFBRTtNQUM1QzlDLFVBQVUsQ0FBQ3FHLGVBQWUsR0FBR0QsOEJBQWlCLENBQUNDLGVBQWUsQ0FBQ2pLLE9BQU87SUFDeEUsQ0FBQyxNQUFNLElBQUksT0FBTzRELFVBQVUsQ0FBQ3FHLGVBQWUsS0FBSyxTQUFTLEVBQUU7TUFDMUQsTUFBTSxxREFBcUQ7SUFDN0Q7SUFDQSxJQUFJckcsVUFBVSxDQUFDc0csMEJBQTBCLEtBQUt4RCxTQUFTLEVBQUU7TUFDdkQ5QyxVQUFVLENBQUNzRywwQkFBMEIsR0FBR0YsOEJBQWlCLENBQUNFLDBCQUEwQixDQUFDbEssT0FBTztJQUM5RixDQUFDLE1BQU0sSUFBSSxPQUFPNEQsVUFBVSxDQUFDc0csMEJBQTBCLEtBQUssU0FBUyxFQUFFO01BQ3JFLE1BQU0sZ0VBQWdFO0lBQ3hFO0lBQ0EsSUFBSXRHLFVBQVUsQ0FBQ3VHLGNBQWMsS0FBS3pELFNBQVMsRUFBRTtNQUMzQzlDLFVBQVUsQ0FBQ3VHLGNBQWMsR0FBR0gsOEJBQWlCLENBQUNHLGNBQWMsQ0FBQ25LLE9BQU87SUFDdEUsQ0FBQyxNQUFNLElBQUksQ0FBQzJHLEtBQUssQ0FBQ0MsT0FBTyxDQUFDaEQsVUFBVSxDQUFDdUcsY0FBYyxDQUFDLEVBQUU7TUFDcEQsTUFBTSw2Q0FBNkM7SUFDckQ7SUFDQSxJQUFJdkcsVUFBVSxDQUFDd0cscUJBQXFCLEtBQUsxRCxTQUFTLEVBQUU7TUFDbEQ5QyxVQUFVLENBQUN3RyxxQkFBcUIsR0FBR0osOEJBQWlCLENBQUNJLHFCQUFxQixDQUFDcEssT0FBTztJQUNwRixDQUFDLE1BQU0sSUFBSSxDQUFDMkcsS0FBSyxDQUFDQyxPQUFPLENBQUNoRCxVQUFVLENBQUN3RyxxQkFBcUIsQ0FBQyxFQUFFO01BQzNELE1BQU0sb0RBQW9EO0lBQzVELENBQUMsTUFBTTtNQUNMLEtBQUssTUFBTUMsTUFBTSxJQUFJekcsVUFBVSxDQUFDd0cscUJBQXFCLEVBQUU7UUFDckQsSUFBSSxPQUFPQyxNQUFNLEtBQUssUUFBUSxJQUFJQSxNQUFNLEtBQUssRUFBRSxFQUFFO1VBQy9DLE1BQU0sdUVBQXVFO1FBQy9FO01BQ0Y7SUFDRjtFQUNGO0VBRUEsT0FBT3ZGLFdBQVdBLENBQUN3RixLQUFLLEVBQUVsSCxZQUFZLEVBQUU7SUFDdEMsS0FBSyxJQUFJbUgsRUFBRSxJQUFJbkgsWUFBWSxFQUFFO01BQzNCLElBQUltSCxFQUFFLENBQUNoSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDcEJnSSxFQUFFLEdBQUdBLEVBQUUsQ0FBQ0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUN2QjtNQUNBLElBQUksQ0FBQ0MsWUFBRyxDQUFDQyxJQUFJLENBQUNILEVBQUUsQ0FBQyxFQUFFO1FBQ2pCLE1BQU0sNEJBQTRCRCxLQUFLLHFDQUFxQ0MsRUFBRSxJQUFJO01BQ3BGO0lBQ0Y7RUFDRjtFQUVBLE9BQU9oRixrQ0FBa0NBLENBQUN2QiwwQkFBMEIsRUFBRTtJQUNwRSxJQUFJQSwwQkFBMEIsSUFBSSxPQUFPQSwwQkFBMEIsS0FBSyxTQUFTLEVBQUU7TUFDakYsTUFBTSxtRUFBbUU7SUFDM0U7SUFDQSxJQUFJQSwwQkFBMEIsRUFBRTtNQUM5QjJHLG1CQUFVLENBQUNDLHFCQUFxQixDQUFDO1FBQUVDLEtBQUssRUFBRTtNQUFtQixDQUFDLENBQUM7SUFDakU7RUFDRjtFQUVBLElBQUluSyxLQUFLQSxDQUFBLEVBQUc7SUFDVixJQUFJQSxLQUFLLEdBQUcsSUFBSSxDQUFDb0ssTUFBTTtJQUN2QixJQUFJLElBQUksQ0FBQ2pJLGVBQWUsRUFBRTtNQUN4Qm5DLEtBQUssR0FBRyxJQUFJLENBQUNtQyxlQUFlO0lBQzlCO0lBQ0EsT0FBT25DLEtBQUs7RUFDZDtFQUVBLElBQUlBLEtBQUtBLENBQUNxSyxRQUFRLEVBQUU7SUFDbEIsSUFBSSxDQUFDRCxNQUFNLEdBQUdDLFFBQVE7RUFDeEI7RUFFQSxPQUFPbEcsNEJBQTRCQSxDQUFDN0IsYUFBYSxFQUFFRCxzQkFBc0IsRUFBRTtJQUN6RSxJQUFJQSxzQkFBc0IsRUFBRTtNQUMxQixJQUFJd0YsS0FBSyxDQUFDdkYsYUFBYSxDQUFDLEVBQUU7UUFDeEIsTUFBTSx3Q0FBd0M7TUFDaEQsQ0FBQyxNQUFNLElBQUlBLGFBQWEsSUFBSSxDQUFDLEVBQUU7UUFDN0IsTUFBTSxnREFBZ0Q7TUFDeEQ7SUFDRjtFQUNGO0VBRUEsT0FBTytCLG9CQUFvQkEsQ0FBQzlCLFlBQVksRUFBRTtJQUN4QyxJQUFJQSxZQUFZLElBQUksSUFBSSxFQUFFO01BQ3hCQSxZQUFZLEdBQUcrSCwrQkFBa0IsQ0FBQy9ILFlBQVksQ0FBQ2pELE9BQU87SUFDeEQ7SUFDQSxJQUFJLE9BQU9pRCxZQUFZLEtBQUssUUFBUSxFQUFFO01BQ3BDLE1BQU0saUNBQWlDO0lBQ3pDO0lBQ0EsSUFBSUEsWUFBWSxJQUFJLENBQUMsRUFBRTtNQUNyQixNQUFNLCtDQUErQztJQUN2RDtFQUNGO0VBRUEsT0FBTytCLGdCQUFnQkEsQ0FBQzlCLFFBQVEsRUFBRTtJQUNoQyxJQUFJQSxRQUFRLElBQUksQ0FBQyxFQUFFO01BQ2pCLE1BQU0sMkNBQTJDO0lBQ25EO0VBQ0Y7RUFFQSxPQUFPK0Isb0JBQW9CQSxDQUFDdkIsWUFBWSxFQUFFO0lBQ3hDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRWdELFNBQVMsQ0FBQyxDQUFDbkUsUUFBUSxDQUFDbUIsWUFBWSxDQUFDLEVBQUU7TUFDN0MsSUFBSWlELEtBQUssQ0FBQ0MsT0FBTyxDQUFDbEQsWUFBWSxDQUFDLEVBQUU7UUFDL0JBLFlBQVksQ0FBQzFDLE9BQU8sQ0FBQ2lLLE1BQU0sSUFBSTtVQUM3QixJQUFJLE9BQU9BLE1BQU0sS0FBSyxRQUFRLEVBQUU7WUFDOUIsTUFBTSx5Q0FBeUM7VUFDakQsQ0FBQyxNQUFNLElBQUksQ0FBQ0EsTUFBTSxDQUFDQyxJQUFJLENBQUMsQ0FBQyxDQUFDN0ssTUFBTSxFQUFFO1lBQ2hDLE1BQU0sOENBQThDO1VBQ3REO1FBQ0YsQ0FBQyxDQUFDO01BQ0osQ0FBQyxNQUFNO1FBQ0wsTUFBTSxnQ0FBZ0M7TUFDeEM7SUFDRjtFQUNGO0VBRUEsT0FBT3NGLGlCQUFpQkEsQ0FBQ3ZCLFNBQVMsRUFBRTtJQUNsQyxLQUFLLE1BQU1uRCxHQUFHLElBQUlILE1BQU0sQ0FBQ0MsSUFBSSxDQUFDb0ssc0JBQVMsQ0FBQyxFQUFFO01BQ3hDLElBQUkvRyxTQUFTLENBQUNuRCxHQUFHLENBQUMsRUFBRTtRQUNsQixJQUFJbUssMkJBQWMsQ0FBQ0MsT0FBTyxDQUFDakgsU0FBUyxDQUFDbkQsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtVQUNqRCxNQUFNLElBQUlBLEdBQUcsb0JBQW9CcUssSUFBSSxDQUFDQyxTQUFTLENBQUNILDJCQUFjLENBQUMsRUFBRTtRQUNuRTtNQUNGLENBQUMsTUFBTTtRQUNMaEgsU0FBUyxDQUFDbkQsR0FBRyxDQUFDLEdBQUdrSyxzQkFBUyxDQUFDbEssR0FBRyxDQUFDLENBQUNqQixPQUFPO01BQ3pDO0lBQ0Y7RUFDRjtFQUVBLE9BQU80Rix1QkFBdUJBLENBQUN0QixlQUFlLEVBQUU7SUFDOUMsSUFBSUEsZUFBZSxJQUFJb0MsU0FBUyxFQUFFO01BQ2hDO0lBQ0Y7SUFDQSxJQUFJNUYsTUFBTSxDQUFDaUYsU0FBUyxDQUFDQyxRQUFRLENBQUNDLElBQUksQ0FBQzNCLGVBQWUsQ0FBQyxLQUFLLGlCQUFpQixFQUFFO01BQ3pFLE1BQU0sbUNBQW1DO0lBQzNDO0lBRUEsSUFBSUEsZUFBZSxDQUFDa0gsaUJBQWlCLEtBQUs5RSxTQUFTLEVBQUU7TUFDbkRwQyxlQUFlLENBQUNrSCxpQkFBaUIsR0FBR0MsNEJBQWUsQ0FBQ0QsaUJBQWlCLENBQUN4TCxPQUFPO0lBQy9FLENBQUMsTUFBTSxJQUFJLE9BQU9zRSxlQUFlLENBQUNrSCxpQkFBaUIsS0FBSyxTQUFTLEVBQUU7TUFDakUsTUFBTSxxREFBcUQ7SUFDN0Q7SUFDQSxJQUFJbEgsZUFBZSxDQUFDb0gsY0FBYyxLQUFLaEYsU0FBUyxFQUFFO01BQ2hEcEMsZUFBZSxDQUFDb0gsY0FBYyxHQUFHRCw0QkFBZSxDQUFDQyxjQUFjLENBQUMxTCxPQUFPO0lBQ3pFLENBQUMsTUFBTSxJQUFJLE9BQU9zRSxlQUFlLENBQUNvSCxjQUFjLEtBQUssUUFBUSxFQUFFO01BQzdELE1BQU0saURBQWlEO0lBQ3pEO0lBQ0EsSUFBSXBILGVBQWUsQ0FBQ3FILGtCQUFrQixLQUFLakYsU0FBUyxFQUFFO01BQ3BEcEMsZUFBZSxDQUFDcUgsa0JBQWtCLEdBQUdGLDRCQUFlLENBQUNFLGtCQUFrQixDQUFDM0wsT0FBTztJQUNqRixDQUFDLE1BQU0sSUFBSSxPQUFPc0UsZUFBZSxDQUFDcUgsa0JBQWtCLEtBQUssU0FBUyxFQUFFO01BQ2xFLE1BQU0sNkVBQTZFO0lBQ3JGO0VBQ0Y7RUFFQSxPQUFPakcsaUJBQWlCQSxDQUFDckIsU0FBUyxFQUFFO0lBQ2xDLElBQUksQ0FBQ0EsU0FBUyxFQUFFO01BQ2Q7SUFDRjtJQUNBLElBQ0V2RCxNQUFNLENBQUNpRixTQUFTLENBQUNDLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDNUIsU0FBUyxDQUFDLEtBQUssaUJBQWlCLElBQy9ELENBQUNzQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ3ZDLFNBQVMsQ0FBQyxFQUN6QjtNQUNBLE1BQU0sc0NBQXNDO0lBQzlDO0lBQ0EsTUFBTXVILE9BQU8sR0FBR2pGLEtBQUssQ0FBQ0MsT0FBTyxDQUFDdkMsU0FBUyxDQUFDLEdBQUdBLFNBQVMsR0FBRyxDQUFDQSxTQUFTLENBQUM7SUFDbEUsS0FBSyxNQUFNd0gsTUFBTSxJQUFJRCxPQUFPLEVBQUU7TUFDNUIsSUFBSTlLLE1BQU0sQ0FBQ2lGLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDQyxJQUFJLENBQUM0RixNQUFNLENBQUMsS0FBSyxpQkFBaUIsRUFBRTtRQUNoRSxNQUFNLHVDQUF1QztNQUMvQztNQUNBLElBQUlBLE1BQU0sQ0FBQ0MsV0FBVyxJQUFJLElBQUksRUFBRTtRQUM5QixNQUFNLHVDQUF1QztNQUMvQztNQUNBLElBQUksT0FBT0QsTUFBTSxDQUFDQyxXQUFXLEtBQUssUUFBUSxFQUFFO1FBQzFDLE1BQU0sd0NBQXdDO01BQ2hEOztNQUVBO01BQ0EsSUFBSTtRQUNGLElBQUFDLDBCQUFZLEVBQUNGLE1BQU0sQ0FBQ0MsV0FBVyxDQUFDO01BQ2xDLENBQUMsQ0FBQyxPQUFPaEssS0FBSyxFQUFFO1FBQ2QsTUFBTSwwQkFBMEIrSixNQUFNLENBQUNDLFdBQVcsbUJBQW1CaEssS0FBSyxDQUFDRSxPQUFPLEVBQUU7TUFDdEY7TUFFQSxJQUFJNkosTUFBTSxDQUFDRyxpQkFBaUIsSUFBSSxJQUFJLEVBQUU7UUFDcEMsTUFBTSw2Q0FBNkM7TUFDckQ7TUFDQSxJQUFJLE9BQU9ILE1BQU0sQ0FBQ0csaUJBQWlCLEtBQUssUUFBUSxFQUFFO1FBQ2hELE1BQU0sOENBQThDO01BQ3REO01BQ0EsSUFBSUgsTUFBTSxDQUFDSSx1QkFBdUIsSUFBSSxPQUFPSixNQUFNLENBQUNJLHVCQUF1QixLQUFLLFNBQVMsRUFBRTtRQUN6RixNQUFNLHFEQUFxRDtNQUM3RDtNQUNBLElBQUlKLE1BQU0sQ0FBQ0ssWUFBWSxJQUFJLElBQUksRUFBRTtRQUMvQixNQUFNLHdDQUF3QztNQUNoRDtNQUNBLElBQUksT0FBT0wsTUFBTSxDQUFDSyxZQUFZLEtBQUssUUFBUSxFQUFFO1FBQzNDLE1BQU0seUNBQXlDO01BQ2pEO01BQ0EsSUFBSUwsTUFBTSxDQUFDTSxvQkFBb0IsSUFBSSxPQUFPTixNQUFNLENBQUNNLG9CQUFvQixLQUFLLFFBQVEsRUFBRTtRQUNsRixNQUFNLGlEQUFpRDtNQUN6RDtNQUNBLE1BQU1QLE9BQU8sR0FBRzlLLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDcUwsY0FBVyxDQUFDQyxhQUFhLENBQUM7TUFDdEQsSUFBSVIsTUFBTSxDQUFDUyxJQUFJLElBQUksQ0FBQ1YsT0FBTyxDQUFDckosUUFBUSxDQUFDc0osTUFBTSxDQUFDUyxJQUFJLENBQUMsRUFBRTtRQUNqRCxNQUFNQyxTQUFTLEdBQUcsSUFBSUMsSUFBSSxDQUFDQyxVQUFVLENBQUMsSUFBSSxFQUFFO1VBQUVDLEtBQUssRUFBRSxPQUFPO1VBQUU5QyxJQUFJLEVBQUU7UUFBYyxDQUFDLENBQUM7UUFDcEYsTUFBTSxpQ0FBaUMyQyxTQUFTLENBQUNJLE1BQU0sQ0FBQ2YsT0FBTyxDQUFDLEVBQUU7TUFDcEU7SUFDRjtFQUNGO0VBRUFwSyxpQ0FBaUNBLENBQUEsRUFBRztJQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDMEUsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUNJLGdDQUFnQyxFQUFFO01BQ3BFLE9BQU9JLFNBQVM7SUFDbEI7SUFDQSxJQUFJa0csR0FBRyxHQUFHLElBQUlDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLE9BQU8sSUFBSUEsSUFBSSxDQUFDRCxHQUFHLENBQUNFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDeEcsZ0NBQWdDLEdBQUcsSUFBSSxDQUFDO0VBQy9FO0VBRUF5RyxtQ0FBbUNBLENBQUEsRUFBRztJQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDcEssY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDQSxjQUFjLENBQUNxRywwQkFBMEIsRUFBRTtNQUMzRSxPQUFPdEMsU0FBUztJQUNsQjtJQUNBLE1BQU1rRyxHQUFHLEdBQUcsSUFBSUMsSUFBSSxDQUFDLENBQUM7SUFDdEIsT0FBTyxJQUFJQSxJQUFJLENBQUNELEdBQUcsQ0FBQ0UsT0FBTyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUNuSyxjQUFjLENBQUNxRywwQkFBMEIsR0FBRyxJQUFJLENBQUM7RUFDeEY7RUFFQTFILHdCQUF3QkEsQ0FBQSxFQUFHO0lBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUN5QixzQkFBc0IsRUFBRTtNQUNoQyxPQUFPMkQsU0FBUztJQUNsQjtJQUNBLElBQUlrRyxHQUFHLEdBQUcsSUFBSUMsSUFBSSxDQUFDLENBQUM7SUFDcEIsT0FBTyxJQUFJQSxJQUFJLENBQUNELEdBQUcsQ0FBQ0UsT0FBTyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM5SixhQUFhLEdBQUcsSUFBSSxDQUFDO0VBQzVEO0VBRUFnSyxzQkFBc0JBLENBQUEsRUFBRztJQUN2QixJQUFJQyxDQUFDLEdBQUcsSUFBSSxDQUFDQyxVQUFVLEVBQUU3TSxNQUFNO0lBQy9CLE9BQU80TSxDQUFDLEVBQUUsRUFBRTtNQUNWLE1BQU1FLEtBQUssR0FBRyxJQUFJLENBQUNELFVBQVUsQ0FBQ0QsQ0FBQyxDQUFDO01BQ2hDLElBQUlFLEtBQUssQ0FBQ0MsS0FBSyxFQUFFO1FBQ2YsSUFBSSxDQUFDRixVQUFVLENBQUNHLE1BQU0sQ0FBQ0osQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUM5QjtJQUNGO0VBQ0Y7RUFFQSxJQUFJSyxjQUFjQSxDQUFBLEVBQUc7SUFDbkIsT0FBTyxJQUFJLENBQUMxSyxXQUFXLENBQUMySyxXQUFXLElBQUksR0FBRyxJQUFJLENBQUMxSyxlQUFlLHlCQUF5QjtFQUN6RjtFQUVBLElBQUkySywwQkFBMEJBLENBQUEsRUFBRztJQUMvQixPQUNFLElBQUksQ0FBQzVLLFdBQVcsQ0FBQzZLLHVCQUF1QixJQUN4QyxHQUFHLElBQUksQ0FBQzVLLGVBQWUsc0NBQXNDO0VBRWpFO0VBRUEsSUFBSTZLLGtCQUFrQkEsQ0FBQSxFQUFHO0lBQ3ZCLE9BQ0UsSUFBSSxDQUFDOUssV0FBVyxDQUFDK0ssZUFBZSxJQUFJLEdBQUcsSUFBSSxDQUFDOUssZUFBZSw4QkFBOEI7RUFFN0Y7RUFFQSxJQUFJK0ssZUFBZUEsQ0FBQSxFQUFHO0lBQ3BCLE9BQU8sSUFBSSxDQUFDaEwsV0FBVyxDQUFDaUwsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDaEwsZUFBZSwyQkFBMkI7RUFDNUY7RUFFQSxJQUFJaUwscUJBQXFCQSxDQUFBLEVBQUc7SUFDMUIsT0FDRSxJQUFJLENBQUNsTCxXQUFXLENBQUNtTCxrQkFBa0IsSUFDbkMsR0FBRyxJQUFJLENBQUNsTCxlQUFlLGlDQUFpQztFQUU1RDtFQUVBLElBQUltTCxpQkFBaUJBLENBQUEsRUFBRztJQUN0QixPQUFPLElBQUksQ0FBQ3BMLFdBQVcsQ0FBQ3FMLGNBQWMsSUFBSSxHQUFHLElBQUksQ0FBQ3BMLGVBQWUsdUJBQXVCO0VBQzFGO0VBRUEsSUFBSXFMLHVCQUF1QkEsQ0FBQSxFQUFHO0lBQzVCLE9BQU8sR0FBRyxJQUFJLENBQUNyTCxlQUFlLElBQUksSUFBSSxDQUFDb0YsYUFBYSxJQUFJLElBQUksQ0FBQ3hILGFBQWEseUJBQXlCO0VBQ3JHO0VBRUEsSUFBSTBOLHVCQUF1QkEsQ0FBQSxFQUFHO0lBQzVCLE9BQ0UsSUFBSSxDQUFDdkwsV0FBVyxDQUFDd0wsb0JBQW9CLElBQ3JDLEdBQUcsSUFBSSxDQUFDdkwsZUFBZSxtQ0FBbUM7RUFFOUQ7RUFFQSxJQUFJd0wsYUFBYUEsQ0FBQSxFQUFHO0lBQ2xCLE9BQU8sSUFBSSxDQUFDekwsV0FBVyxDQUFDeUwsYUFBYTtFQUN2QztFQUVBLElBQUlDLGNBQWNBLENBQUEsRUFBRztJQUNuQixPQUFPLEdBQUcsSUFBSSxDQUFDekwsZUFBZSxJQUFJLElBQUksQ0FBQ29GLGFBQWEsSUFBSSxJQUFJLENBQUN4SCxhQUFhLGVBQWU7RUFDM0Y7RUFFQSxNQUFNOE4sYUFBYUEsQ0FBQSxFQUFHO0lBQ3BCLElBQUksT0FBTyxJQUFJLENBQUNsTCxTQUFTLEtBQUssVUFBVSxFQUFFO01BQ3hDLE1BQU1tTCxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUNDLFlBQVk7TUFDckMsTUFBTUMsU0FBUyxHQUFHLElBQUksQ0FBQ0MsY0FBYyxFQUFFQyxTQUFTLElBQUksSUFBSSxDQUFDRCxjQUFjLENBQUNDLFNBQVMsR0FBRyxJQUFJL0IsSUFBSSxDQUFDLENBQUM7TUFFOUYsSUFBSSxDQUFDLENBQUM2QixTQUFTLElBQUlGLFVBQVUsS0FBSyxJQUFJLENBQUNHLGNBQWMsRUFBRXRMLFNBQVMsRUFBRTtRQUNoRSxPQUFPLElBQUksQ0FBQ3NMLGNBQWMsQ0FBQ3RMLFNBQVM7TUFDdEM7TUFFQSxNQUFNQSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUNBLFNBQVMsQ0FBQyxDQUFDO01BRXhDLE1BQU11TCxTQUFTLEdBQUcsSUFBSSxDQUFDSCxZQUFZLEdBQUcsSUFBSTVCLElBQUksQ0FBQ0EsSUFBSSxDQUFDRCxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM2QixZQUFZLENBQUMsR0FBRyxJQUFJO01BQzVGLElBQUksQ0FBQ0UsY0FBYyxHQUFHO1FBQUV0TCxTQUFTO1FBQUV1TDtNQUFVLENBQUM7TUFDOUNyTyxNQUFNLENBQUM2QixHQUFHLENBQUMsSUFBSSxDQUFDO01BRWhCLE9BQU8sSUFBSSxDQUFDdU0sY0FBYyxDQUFDdEwsU0FBUztJQUN0QztJQUVBLE9BQU8sSUFBSSxDQUFDQSxTQUFTO0VBQ3ZCO0VBRUEsSUFBSTRFLGFBQWFBLENBQUEsRUFBRztJQUNsQixPQUFPLElBQUksQ0FBQ3BFLEtBQUssSUFBSSxJQUFJLENBQUNBLEtBQUssQ0FBQ29FLGFBQWEsR0FDekMsSUFBSSxDQUFDcEUsS0FBSyxDQUFDb0UsYUFBYSxHQUN4QixNQUFNO0VBQ1o7QUFDRjtBQUFDNEcsT0FBQSxDQUFBdE8sTUFBQSxHQUFBQSxNQUFBO0FBQUEsSUFBQXVPLFFBQUEsR0FBQUQsT0FBQSxDQUFBN08sT0FBQSxHQUVjTyxNQUFNO0FBQ3JCd08sTUFBTSxDQUFDRixPQUFPLEdBQUd0TyxNQUFNIiwiaWdub3JlTGlzdCI6W119
@@ -25,5 +25,17 @@ module.exports = [{
25
25
  optionKey: 'pages.encodePageParamHeaders',
26
26
  changeNewDefault: 'true',
27
27
  solution: "Set 'pages.encodePageParamHeaders' to 'true' to URI-encode non-ASCII characters in page parameter headers."
28
+ }, {
29
+ optionKey: 'readOnlyMasterKeyIps',
30
+ changeNewDefault: '["127.0.0.1", "::1"]',
31
+ solution: "Set 'readOnlyMasterKeyIps' to the IP addresses that should be allowed to use the read-only master key, or to '[\"127.0.0.1\", \"::1\"]' to restrict access to localhost."
32
+ }, {
33
+ optionKey: 'mountPlayground',
34
+ changeNewKey: '',
35
+ solution: "Use Parse Dashboard as GraphQL IDE or configure a third-party GraphQL client such as Apollo Sandbox, GraphiQL, or Insomnia with custom request headers."
36
+ }, {
37
+ optionKey: 'playgroundPath',
38
+ changeNewKey: '',
39
+ solution: "Use Parse Dashboard as GraphQL IDE or configure a third-party GraphQL client such as Apollo Sandbox, GraphiQL, or Insomnia with custom request headers."
28
40
  }];
29
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwib3B0aW9uS2V5IiwiY2hhbmdlTmV3RGVmYXVsdCIsInNvbHV0aW9uIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0RlcHJlY2F0b3IvRGVwcmVjYXRpb25zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGRlcHJlY2F0aW9ucy5cbiAqXG4gKiBBZGQgZGVwcmVjYXRpb25zIHRvIHRoZSBhcnJheSB1c2luZyB0aGUgZm9sbG93aW5nIGtleXM6XG4gKiAtIGBvcHRpb25LZXlgIHtTdHJpbmd9OiBUaGUgb3B0aW9uIGtleSBpbmNsLiBpdHMgcGF0aCwgZS5nLiBgc2VjdXJpdHkuZW5hYmxlQ2hlY2tgLlxuICogLSBgZW52S2V5YCB7U3RyaW5nfTogVGhlIGVudmlyb25tZW50IGtleSwgZS5nLiBgUEFSU0VfU0VSVkVSX1NFQ1VSSVRZYC5cbiAqIC0gYGNoYW5nZU5ld0tleWAge1N0cmluZ306IFNldCB0aGUgbmV3IGtleSBuYW1lIGlmIHRoZSBjdXJyZW50IGtleSB3aWxsIGJlIHJlcGxhY2VkLFxuICogb3Igc2V0IHRvIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgY3VycmVudCBrZXkgd2lsbCBiZSByZW1vdmVkIHdpdGhvdXQgcmVwbGFjZW1lbnQuXG4gKiAtIGBjaGFuZ2VOZXdEZWZhdWx0YCB7U3RyaW5nfTogU2V0IHRoZSBuZXcgZGVmYXVsdCB2YWx1ZSBpZiB0aGUga2V5J3MgZGVmYXVsdCB2YWx1ZVxuICogd2lsbCBjaGFuZ2UgaW4gYSBmdXR1cmUgdmVyc2lvbi5cbiAqIC0gYHNvbHV0aW9uYDogVGhlIGluc3RydWN0aW9uIHRvIHJlc29sdmUgdGhpcyBkZXByZWNhdGlvbiB3YXJuaW5nLiBPcHRpb25hbC4gVGhpc1xuICogaW5zdHJ1Y3Rpb24gbXVzdCBub3QgaW5jbHVkZSB0aGUgZGVwcmVjYXRpb24gd2FybmluZyB3aGljaCBpcyBhdXRvLWdlbmVyYXRlZC5cbiAqIEl0IHNob3VsZCBvbmx5IGNvbnRhaW4gYWRkaXRpb25hbCBpbnN0cnVjdGlvbiByZWdhcmRpbmcgdGhlIGRlcHJlY2F0aW9uIGlmXG4gKiBuZWNlc3NhcnkuXG4gKlxuICogSWYgdGhlcmUgYXJlIG5vIGRlcHJlY2F0aW9ucywgdGhpcyBtdXN0IHJldHVybiBhbiBlbXB0eSBhcnJheS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gIHtcbiAgICBvcHRpb25LZXk6ICdmaWxlVXBsb2FkLmFsbG93ZWRGaWxlVXJsRG9tYWlucycsXG4gICAgY2hhbmdlTmV3RGVmYXVsdDogJ1tdJyxcbiAgICBzb2x1dGlvbjogXCJTZXQgJ2ZpbGVVcGxvYWQuYWxsb3dlZEZpbGVVcmxEb21haW5zJyB0byB0aGUgZG9tYWlucyB5b3Ugd2FudCB0byBhbGxvdywgb3IgdG8gJ1tdJyB0byBibG9jayBhbGwgZmlsZSBVUkxzLlwiLFxuICB9LFxuICB7XG4gICAgb3B0aW9uS2V5OiAncGFnZXMuZW5jb2RlUGFnZVBhcmFtSGVhZGVycycsXG4gICAgY2hhbmdlTmV3RGVmYXVsdDogJ3RydWUnLFxuICAgIHNvbHV0aW9uOiBcIlNldCAncGFnZXMuZW5jb2RlUGFnZVBhcmFtSGVhZGVycycgdG8gJ3RydWUnIHRvIFVSSS1lbmNvZGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgaW4gcGFnZSBwYXJhbWV0ZXIgaGVhZGVycy5cIixcbiAgfSxcbl07XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBQSxNQUFNLENBQUNDLE9BQU8sR0FBRyxDQUNmO0VBQ0VDLFNBQVMsRUFBRSxrQ0FBa0M7RUFDN0NDLGdCQUFnQixFQUFFLElBQUk7RUFDdEJDLFFBQVEsRUFBRTtBQUNaLENBQUMsRUFDRDtFQUNFRixTQUFTLEVBQUUsOEJBQThCO0VBQ3pDQyxnQkFBZ0IsRUFBRSxNQUFNO0VBQ3hCQyxRQUFRLEVBQUU7QUFDWixDQUFDLENBQ0YiLCJpZ25vcmVMaXN0IjpbXX0=
41
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwib3B0aW9uS2V5IiwiY2hhbmdlTmV3RGVmYXVsdCIsInNvbHV0aW9uIiwiY2hhbmdlTmV3S2V5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0RlcHJlY2F0b3IvRGVwcmVjYXRpb25zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGRlcHJlY2F0aW9ucy5cbiAqXG4gKiBBZGQgZGVwcmVjYXRpb25zIHRvIHRoZSBhcnJheSB1c2luZyB0aGUgZm9sbG93aW5nIGtleXM6XG4gKiAtIGBvcHRpb25LZXlgIHtTdHJpbmd9OiBUaGUgb3B0aW9uIGtleSBpbmNsLiBpdHMgcGF0aCwgZS5nLiBgc2VjdXJpdHkuZW5hYmxlQ2hlY2tgLlxuICogLSBgZW52S2V5YCB7U3RyaW5nfTogVGhlIGVudmlyb25tZW50IGtleSwgZS5nLiBgUEFSU0VfU0VSVkVSX1NFQ1VSSVRZYC5cbiAqIC0gYGNoYW5nZU5ld0tleWAge1N0cmluZ306IFNldCB0aGUgbmV3IGtleSBuYW1lIGlmIHRoZSBjdXJyZW50IGtleSB3aWxsIGJlIHJlcGxhY2VkLFxuICogb3Igc2V0IHRvIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgY3VycmVudCBrZXkgd2lsbCBiZSByZW1vdmVkIHdpdGhvdXQgcmVwbGFjZW1lbnQuXG4gKiAtIGBjaGFuZ2VOZXdEZWZhdWx0YCB7U3RyaW5nfTogU2V0IHRoZSBuZXcgZGVmYXVsdCB2YWx1ZSBpZiB0aGUga2V5J3MgZGVmYXVsdCB2YWx1ZVxuICogd2lsbCBjaGFuZ2UgaW4gYSBmdXR1cmUgdmVyc2lvbi5cbiAqIC0gYHNvbHV0aW9uYDogVGhlIGluc3RydWN0aW9uIHRvIHJlc29sdmUgdGhpcyBkZXByZWNhdGlvbiB3YXJuaW5nLiBPcHRpb25hbC4gVGhpc1xuICogaW5zdHJ1Y3Rpb24gbXVzdCBub3QgaW5jbHVkZSB0aGUgZGVwcmVjYXRpb24gd2FybmluZyB3aGljaCBpcyBhdXRvLWdlbmVyYXRlZC5cbiAqIEl0IHNob3VsZCBvbmx5IGNvbnRhaW4gYWRkaXRpb25hbCBpbnN0cnVjdGlvbiByZWdhcmRpbmcgdGhlIGRlcHJlY2F0aW9uIGlmXG4gKiBuZWNlc3NhcnkuXG4gKlxuICogSWYgdGhlcmUgYXJlIG5vIGRlcHJlY2F0aW9ucywgdGhpcyBtdXN0IHJldHVybiBhbiBlbXB0eSBhcnJheS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gIHtcbiAgICBvcHRpb25LZXk6ICdmaWxlVXBsb2FkLmFsbG93ZWRGaWxlVXJsRG9tYWlucycsXG4gICAgY2hhbmdlTmV3RGVmYXVsdDogJ1tdJyxcbiAgICBzb2x1dGlvbjogXCJTZXQgJ2ZpbGVVcGxvYWQuYWxsb3dlZEZpbGVVcmxEb21haW5zJyB0byB0aGUgZG9tYWlucyB5b3Ugd2FudCB0byBhbGxvdywgb3IgdG8gJ1tdJyB0byBibG9jayBhbGwgZmlsZSBVUkxzLlwiLFxuICB9LFxuICB7XG4gICAgb3B0aW9uS2V5OiAncGFnZXMuZW5jb2RlUGFnZVBhcmFtSGVhZGVycycsXG4gICAgY2hhbmdlTmV3RGVmYXVsdDogJ3RydWUnLFxuICAgIHNvbHV0aW9uOiBcIlNldCAncGFnZXMuZW5jb2RlUGFnZVBhcmFtSGVhZGVycycgdG8gJ3RydWUnIHRvIFVSSS1lbmNvZGUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgaW4gcGFnZSBwYXJhbWV0ZXIgaGVhZGVycy5cIixcbiAgfSxcbiAge1xuICAgIG9wdGlvbktleTogJ3JlYWRPbmx5TWFzdGVyS2V5SXBzJyxcbiAgICBjaGFuZ2VOZXdEZWZhdWx0OiAnW1wiMTI3LjAuMC4xXCIsIFwiOjoxXCJdJyxcbiAgICBzb2x1dGlvbjogXCJTZXQgJ3JlYWRPbmx5TWFzdGVyS2V5SXBzJyB0byB0aGUgSVAgYWRkcmVzc2VzIHRoYXQgc2hvdWxkIGJlIGFsbG93ZWQgdG8gdXNlIHRoZSByZWFkLW9ubHkgbWFzdGVyIGtleSwgb3IgdG8gJ1tcXFwiMTI3LjAuMC4xXFxcIiwgXFxcIjo6MVxcXCJdJyB0byByZXN0cmljdCBhY2Nlc3MgdG8gbG9jYWxob3N0LlwiLFxuICB9LFxuICB7XG4gICAgb3B0aW9uS2V5OiAnbW91bnRQbGF5Z3JvdW5kJyxcbiAgICBjaGFuZ2VOZXdLZXk6ICcnLFxuICAgIHNvbHV0aW9uOiBcIlVzZSBQYXJzZSBEYXNoYm9hcmQgYXMgR3JhcGhRTCBJREUgb3IgY29uZmlndXJlIGEgdGhpcmQtcGFydHkgR3JhcGhRTCBjbGllbnQgc3VjaCBhcyBBcG9sbG8gU2FuZGJveCwgR3JhcGhpUUwsIG9yIEluc29tbmlhIHdpdGggY3VzdG9tIHJlcXVlc3QgaGVhZGVycy5cIixcbiAgfSxcbiAge1xuICAgIG9wdGlvbktleTogJ3BsYXlncm91bmRQYXRoJyxcbiAgICBjaGFuZ2VOZXdLZXk6ICcnLFxuICAgIHNvbHV0aW9uOiBcIlVzZSBQYXJzZSBEYXNoYm9hcmQgYXMgR3JhcGhRTCBJREUgb3IgY29uZmlndXJlIGEgdGhpcmQtcGFydHkgR3JhcGhRTCBjbGllbnQgc3VjaCBhcyBBcG9sbG8gU2FuZGJveCwgR3JhcGhpUUwsIG9yIEluc29tbmlhIHdpdGggY3VzdG9tIHJlcXVlc3QgaGVhZGVycy5cIixcbiAgfSxcbl07XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBQSxNQUFNLENBQUNDLE9BQU8sR0FBRyxDQUNmO0VBQ0VDLFNBQVMsRUFBRSxrQ0FBa0M7RUFDN0NDLGdCQUFnQixFQUFFLElBQUk7RUFDdEJDLFFBQVEsRUFBRTtBQUNaLENBQUMsRUFDRDtFQUNFRixTQUFTLEVBQUUsOEJBQThCO0VBQ3pDQyxnQkFBZ0IsRUFBRSxNQUFNO0VBQ3hCQyxRQUFRLEVBQUU7QUFDWixDQUFDLEVBQ0Q7RUFDRUYsU0FBUyxFQUFFLHNCQUFzQjtFQUNqQ0MsZ0JBQWdCLEVBQUUsc0JBQXNCO0VBQ3hDQyxRQUFRLEVBQUU7QUFDWixDQUFDLEVBQ0Q7RUFDRUYsU0FBUyxFQUFFLGlCQUFpQjtFQUM1QkcsWUFBWSxFQUFFLEVBQUU7RUFDaEJELFFBQVEsRUFBRTtBQUNaLENBQUMsRUFDRDtFQUNFRixTQUFTLEVBQUUsZ0JBQWdCO0VBQzNCRyxZQUFZLEVBQUUsRUFBRTtFQUNoQkQsUUFBUSxFQUFFO0FBQ1osQ0FBQyxDQUNGIiwiaWdub3JlTGlzdCI6W119
@@ -22,6 +22,7 @@ class Deprecator {
22
22
  const solution = deprecation.solution;
23
23
  const optionKey = deprecation.optionKey;
24
24
  const changeNewDefault = deprecation.changeNewDefault;
25
+ const changeNewKey = deprecation.changeNewKey;
25
26
 
26
27
  // If default will change, only throw a warning if option is not set
27
28
  if (changeNewDefault != null && _Utils.default.getNestedProperty(options, optionKey) == null) {
@@ -31,6 +32,15 @@ class Deprecator {
31
32
  solution
32
33
  });
33
34
  }
35
+
36
+ // If key will be removed or renamed, only throw a warning if option is set
37
+ if (changeNewKey != null && _Utils.default.getNestedProperty(options, optionKey) != null) {
38
+ Deprecator._logOption({
39
+ optionKey,
40
+ changeNewKey,
41
+ solution
42
+ });
43
+ }
34
44
  }
35
45
  }
36
46
 
@@ -117,11 +127,11 @@ class Deprecator {
117
127
 
118
128
  // Compose message
119
129
  let output = `DeprecationWarning: The Parse Server ${type} '${key}' `;
120
- output += changeNewKey ? `is deprecated and will be ${keyAction} in a future version.` : '';
130
+ output += changeNewKey != null ? `is deprecated and will be ${keyAction} in a future version.` : '';
121
131
  output += changeNewDefault ? `default will change to '${changeNewDefault}' in a future version.` : '';
122
132
  output += solution ? ` ${solution}` : '';
123
133
  _logger.default.warn(output);
124
134
  }
125
135
  }
126
136
  module.exports = Deprecator;
127
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9nZ2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfRGVwcmVjYXRpb25zIiwiX1V0aWxzIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiRGVwcmVjYXRvciIsInNjYW5QYXJzZVNlcnZlck9wdGlvbnMiLCJvcHRpb25zIiwiZGVwcmVjYXRpb24iLCJfZ2V0RGVwcmVjYXRpb25zIiwic29sdXRpb24iLCJvcHRpb25LZXkiLCJjaGFuZ2VOZXdEZWZhdWx0IiwiVXRpbHMiLCJnZXROZXN0ZWRQcm9wZXJ0eSIsIl9sb2dPcHRpb24iLCJsb2dSdW50aW1lRGVwcmVjYXRpb24iLCJfbG9nR2VuZXJpYyIsIkRlcHJlY2F0aW9ucyIsInVzYWdlIiwib3V0cHV0IiwibG9nZ2VyIiwid2FybiIsImVudktleSIsImNoYW5nZU5ld0tleSIsInR5cGUiLCJrZXkiLCJrZXlBY3Rpb24iLCJ1bmRlZmluZWQiLCJsZW5ndGgiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0RlcHJlY2F0b3IvRGVwcmVjYXRvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgRGVwcmVjYXRpb25zIGZyb20gJy4vRGVwcmVjYXRpb25zJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi9VdGlscyc7XG5cbi8qKlxuICogVGhlIGRlcHJlY2F0b3IgY2xhc3MuXG4gKi9cbmNsYXNzIERlcHJlY2F0b3Ige1xuICAvKipcbiAgICogU2NhbnMgdGhlIFBhcnNlIFNlcnZlciBmb3IgZGVwcmVjYXRlZCBvcHRpb25zLlxuICAgKiBUaGlzIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgc2V0dGluZyBvcHRpb24gZGVmYXVsdHMsIG90aGVyd2lzZSBpdFxuICAgKiBiZWNvbWVzIGluZGlzdGluZ3Vpc2hhYmxlIHdoZXRoZXIgYW4gb3B0aW9uIGhhcyBiZWVuIHNldCBtYW51YWxseSBvclxuICAgKiBieSBkZWZhdWx0LlxuICAgKiBAcGFyYW0ge2FueX0gb3B0aW9ucyBUaGUgUGFyc2UgU2VydmVyIG9wdGlvbnMuXG4gICAqL1xuICBzdGF0aWMgc2NhblBhcnNlU2VydmVyT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgLy8gU2NhbiBmb3IgZGVwcmVjYXRpb25zXG4gICAgZm9yIChjb25zdCBkZXByZWNhdGlvbiBvZiBEZXByZWNhdG9yLl9nZXREZXByZWNhdGlvbnMoKSkge1xuICAgICAgLy8gR2V0IGRlcHJlY2F0aW9uIHByb3BlcnRpZXNcbiAgICAgIGNvbnN0IHNvbHV0aW9uID0gZGVwcmVjYXRpb24uc29sdXRpb247XG4gICAgICBjb25zdCBvcHRpb25LZXkgPSBkZXByZWNhdGlvbi5vcHRpb25LZXk7XG4gICAgICBjb25zdCBjaGFuZ2VOZXdEZWZhdWx0ID0gZGVwcmVjYXRpb24uY2hhbmdlTmV3RGVmYXVsdDtcblxuICAgICAgLy8gSWYgZGVmYXVsdCB3aWxsIGNoYW5nZSwgb25seSB0aHJvdyBhIHdhcm5pbmcgaWYgb3B0aW9uIGlzIG5vdCBzZXRcbiAgICAgIGlmIChjaGFuZ2VOZXdEZWZhdWx0ICE9IG51bGwgJiYgVXRpbHMuZ2V0TmVzdGVkUHJvcGVydHkob3B0aW9ucywgb3B0aW9uS2V5KSA9PSBudWxsKSB7XG4gICAgICAgIERlcHJlY2F0b3IuX2xvZ09wdGlvbih7IG9wdGlvbktleSwgY2hhbmdlTmV3RGVmYXVsdCwgc29sdXRpb24gfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvZ3MgYSBkZXByZWNhdGlvbiB3YXJuaW5nIGZvciBhIHBhcmFtZXRlciB0aGF0IGNhbiBvbmx5IGJlIGRldGVybWluZWQgZHluYW1pY2FsbHlcbiAgICogZHVyaW5nIHJ1bnRpbWUuXG4gICAqXG4gICAqIE5vdGU6IERvIG5vdCB1c2UgdGhpcyB0byBsb2cgZGVwcmVjYXRpb25zIG9mIFBhcnNlIFNlcnZlciBvcHRpb25zLCBidXQgYWRkIHN1Y2hcbiAgICogZGVwcmVjYXRpb25zIHRvIGBEZXByZWNhdGlvbnMuanNgIGluc3RlYWQuIFNlZSB0aGUgY29udHJpYnV0aW9uIGRvY3MgZm9yIG1vcmVcbiAgICogZGV0YWlscy5cbiAgICpcbiAgICogRm9yIGNvbnNpc3RlbmN5LCB0aGUgZGVwcmVjYXRpb24gd2FybmluZyBpcyBjb21wb3NlZCBvZiB0aGUgZm9sbG93aW5nIHBhcnRzOlxuICAgKlxuICAgKiA+IERlcHJlY2F0aW9uV2FybmluZzogYHVzYWdlYCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi5cbiAgICogYHNvbHV0aW9uYC5cbiAgICpcbiAgICogLSBgdXNhZ2VgOiBUaGUgZGVwcmVjYXRlZCB1c2FnZS5cbiAgICogLSBgc29sdXRpb25gOiBUaGUgaW5zdHJ1Y3Rpb24gdG8gcmVzb2x2ZSB0aGlzIGRlcHJlY2F0aW9uIHdhcm5pbmcuXG4gICAqXG4gICAqIEZvciBleGFtcGxlOlxuICAgKiA+IERlcHJlY2F0aW9uV2FybmluZzogYFByZWZpeGluZyBmaWVsZCBuYW1lcyB3aXRoIGRvbGxhciBzaWduICgkKSBpbiBhZ2dyZWdhdGlvbiBxdWVyeWBcbiAgICogaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uIGBSZWZlcmVuY2UgZmllbGQgbmFtZXMgd2l0aG91dFxuICAgKiBkb2xsYXIgc2lnbiBwcmVmaXguYFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBUaGUgZGVwcmVjYXRpb24gb3B0aW9ucy5cbiAgICogQHBhcmFtIHtTdHJpbmd9IG9wdGlvbnMudXNhZ2UgVGhlIHVzYWdlIHRoYXQgaXMgZGVwcmVjYXRlZC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnNvbHV0aW9uXSBUaGUgaW5zdHJ1Y3Rpb24gdG8gcmVzb2x2ZSB0aGlzIGRlcHJlY2F0aW9uIHdhcm5pbmcuXG4gICAqIE9wdGlvbmFsLiBJdCBpcyByZWNvbW1lbmRlZCB0byBhZGQgYW4gaW5zdHJ1Y3Rpb24gZm9yIHRoZSBjb252ZW5pZW5jZSBvZiB0aGUgZGV2ZWxvcGVyLlxuICAgKi9cbiAgc3RhdGljIGxvZ1J1bnRpbWVEZXByZWNhdGlvbihvcHRpb25zKSB7XG4gICAgRGVwcmVjYXRvci5fbG9nR2VuZXJpYyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBkZXByZWNhdGlvbiBkZWZpbml0aW9ucy5cbiAgICogQHJldHVybnMge0FycmF5PE9iamVjdD59IFRoZSBkZXByZWNhdGlvbnMuXG4gICAqL1xuICBzdGF0aWMgX2dldERlcHJlY2F0aW9ucygpIHtcbiAgICByZXR1cm4gRGVwcmVjYXRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIExvZ3MgYSBnZW5lcmljIGRlcHJlY2F0aW9uIHdhcm5pbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoZSBkZXByZWNhdGlvbiBvcHRpb25zLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy51c2FnZSBUaGUgdXNhZ2UgdGhhdCBpcyBkZXByZWNhdGVkLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuc29sdXRpb25dIFRoZSBpbnN0cnVjdGlvbiB0byByZXNvbHZlIHRoaXMgZGVwcmVjYXRpb24gd2FybmluZy5cbiAgICogT3B0aW9uYWwuIEl0IGlzIHJlY29tbWVuZGVkIHRvIGFkZCBhbiBpbnN0cnVjdGlvbiBmb3IgdGhlIGNvbnZlbmllbmNlIG9mIHRoZSBkZXZlbG9wZXIuXG4gICAqL1xuICBzdGF0aWMgX2xvZ0dlbmVyaWMoeyB1c2FnZSwgc29sdXRpb24gfSkge1xuICAgIC8vIENvbXBvc2UgbWVzc2FnZVxuICAgIGxldCBvdXRwdXQgPSBgRGVwcmVjYXRpb25XYXJuaW5nOiAke3VzYWdlfSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi5gO1xuICAgIG91dHB1dCArPSBzb2x1dGlvbiA/IGAgJHtzb2x1dGlvbn1gIDogJyc7XG4gICAgbG9nZ2VyLndhcm4ob3V0cHV0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2dzIGEgZGVwcmVjYXRpb24gd2FybmluZyBmb3IgYSBQYXJzZSBTZXJ2ZXIgb3B0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9uS2V5IFRoZSBvcHRpb24ga2V5IGluY2wuIGl0cyBwYXRoLCBlLmcuIGBzZWN1cml0eS5lbmFibGVDaGVja2AuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBlbnZLZXkgVGhlIGVudmlyb25tZW50IGtleSwgZS5nLiBgUEFSU0VfU0VSVkVSX1NFQ1VSSVRZYC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGNoYW5nZU5ld0tleSBTZXQgdGhlIG5ldyBrZXkgbmFtZSBpZiB0aGUgY3VycmVudCBrZXkgd2lsbCBiZSByZXBsYWNlZCxcbiAgICogb3Igc2V0IHRvIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgY3VycmVudCBrZXkgd2lsbCBiZSByZW1vdmVkIHdpdGhvdXQgcmVwbGFjZW1lbnQuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjaGFuZ2VOZXdEZWZhdWx0IFNldCB0aGUgbmV3IGRlZmF1bHQgdmFsdWUgaWYgdGhlIGtleSdzIGRlZmF1bHQgdmFsdWVcbiAgICogd2lsbCBjaGFuZ2UgaW4gYSBmdXR1cmUgdmVyc2lvbi5cbiAgICogQHBhcmFtIHtTdHJpbmd9IFtzb2x1dGlvbl0gVGhlIGluc3RydWN0aW9uIHRvIHJlc29sdmUgdGhpcyBkZXByZWNhdGlvbiB3YXJuaW5nLiBUaGlzXG4gICAqIG1lc3NhZ2UgbXVzdCBub3QgaW5jbHVkZSB0aGUgd2FybmluZyB0aGF0IHRoZSBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCwgdGhhdCBpc1xuICAgKiBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoZSBtZXNzYWdlLiBJdCBzaG91bGQgb25seSBjb250YWluIHRoZSBpbnN0cnVjdGlvbiBvbiBob3dcbiAgICogdG8gcmVzb2x2ZSB0aGlzIHdhcm5pbmcuXG4gICAqL1xuICBzdGF0aWMgX2xvZ09wdGlvbih7IG9wdGlvbktleSwgZW52S2V5LCBjaGFuZ2VOZXdLZXksIGNoYW5nZU5ld0RlZmF1bHQsIHNvbHV0aW9uIH0pIHtcbiAgICBjb25zdCB0eXBlID0gb3B0aW9uS2V5ID8gJ29wdGlvbicgOiAnZW52aXJvbm1lbnQga2V5JztcbiAgICBjb25zdCBrZXkgPSBvcHRpb25LZXkgPyBvcHRpb25LZXkgOiBlbnZLZXk7XG4gICAgY29uc3Qga2V5QWN0aW9uID1cbiAgICAgIGNoYW5nZU5ld0tleSA9PSBudWxsXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogY2hhbmdlTmV3S2V5Lmxlbmd0aCA+IDBcbiAgICAgICAgICA/IGByZW5hbWVkIHRvICcke2NoYW5nZU5ld0tleX0nYFxuICAgICAgICAgIDogYHJlbW92ZWRgO1xuXG4gICAgLy8gQ29tcG9zZSBtZXNzYWdlXG4gICAgbGV0IG91dHB1dCA9IGBEZXByZWNhdGlvbldhcm5pbmc6IFRoZSBQYXJzZSBTZXJ2ZXIgJHt0eXBlfSAnJHtrZXl9JyBgO1xuICAgIG91dHB1dCArPSBjaGFuZ2VOZXdLZXkgPyBgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSAke2tleUFjdGlvbn0gaW4gYSBmdXR1cmUgdmVyc2lvbi5gIDogJyc7XG4gICAgb3V0cHV0ICs9IGNoYW5nZU5ld0RlZmF1bHRcbiAgICAgID8gYGRlZmF1bHQgd2lsbCBjaGFuZ2UgdG8gJyR7Y2hhbmdlTmV3RGVmYXVsdH0nIGluIGEgZnV0dXJlIHZlcnNpb24uYFxuICAgICAgOiAnJztcbiAgICBvdXRwdXQgKz0gc29sdXRpb24gPyBgICR7c29sdXRpb259YCA6ICcnO1xuICAgIGxvZ2dlci53YXJuKG91dHB1dCk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEZXByZWNhdG9yO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGFBQUEsR0FBQUYs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
137
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9nZ2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfRGVwcmVjYXRpb25zIiwiX1V0aWxzIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiRGVwcmVjYXRvciIsInNjYW5QYXJzZVNlcnZlck9wdGlvbnMiLCJvcHRpb25zIiwiZGVwcmVjYXRpb24iLCJfZ2V0RGVwcmVjYXRpb25zIiwic29sdXRpb24iLCJvcHRpb25LZXkiLCJjaGFuZ2VOZXdEZWZhdWx0IiwiY2hhbmdlTmV3S2V5IiwiVXRpbHMiLCJnZXROZXN0ZWRQcm9wZXJ0eSIsIl9sb2dPcHRpb24iLCJsb2dSdW50aW1lRGVwcmVjYXRpb24iLCJfbG9nR2VuZXJpYyIsIkRlcHJlY2F0aW9ucyIsInVzYWdlIiwib3V0cHV0IiwibG9nZ2VyIiwid2FybiIsImVudktleSIsInR5cGUiLCJrZXkiLCJrZXlBY3Rpb24iLCJ1bmRlZmluZWQiLCJsZW5ndGgiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0RlcHJlY2F0b3IvRGVwcmVjYXRvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgRGVwcmVjYXRpb25zIGZyb20gJy4vRGVwcmVjYXRpb25zJztcbmltcG9ydCBVdGlscyBmcm9tICcuLi9VdGlscyc7XG5cbi8qKlxuICogVGhlIGRlcHJlY2F0b3IgY2xhc3MuXG4gKi9cbmNsYXNzIERlcHJlY2F0b3Ige1xuICAvKipcbiAgICogU2NhbnMgdGhlIFBhcnNlIFNlcnZlciBmb3IgZGVwcmVjYXRlZCBvcHRpb25zLlxuICAgKiBUaGlzIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgc2V0dGluZyBvcHRpb24gZGVmYXVsdHMsIG90aGVyd2lzZSBpdFxuICAgKiBiZWNvbWVzIGluZGlzdGluZ3Vpc2hhYmxlIHdoZXRoZXIgYW4gb3B0aW9uIGhhcyBiZWVuIHNldCBtYW51YWxseSBvclxuICAgKiBieSBkZWZhdWx0LlxuICAgKiBAcGFyYW0ge2FueX0gb3B0aW9ucyBUaGUgUGFyc2UgU2VydmVyIG9wdGlvbnMuXG4gICAqL1xuICBzdGF0aWMgc2NhblBhcnNlU2VydmVyT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgLy8gU2NhbiBmb3IgZGVwcmVjYXRpb25zXG4gICAgZm9yIChjb25zdCBkZXByZWNhdGlvbiBvZiBEZXByZWNhdG9yLl9nZXREZXByZWNhdGlvbnMoKSkge1xuICAgICAgLy8gR2V0IGRlcHJlY2F0aW9uIHByb3BlcnRpZXNcbiAgICAgIGNvbnN0IHNvbHV0aW9uID0gZGVwcmVjYXRpb24uc29sdXRpb247XG4gICAgICBjb25zdCBvcHRpb25LZXkgPSBkZXByZWNhdGlvbi5vcHRpb25LZXk7XG4gICAgICBjb25zdCBjaGFuZ2VOZXdEZWZhdWx0ID0gZGVwcmVjYXRpb24uY2hhbmdlTmV3RGVmYXVsdDtcbiAgICAgIGNvbnN0IGNoYW5nZU5ld0tleSA9IGRlcHJlY2F0aW9uLmNoYW5nZU5ld0tleTtcblxuICAgICAgLy8gSWYgZGVmYXVsdCB3aWxsIGNoYW5nZSwgb25seSB0aHJvdyBhIHdhcm5pbmcgaWYgb3B0aW9uIGlzIG5vdCBzZXRcbiAgICAgIGlmIChjaGFuZ2VOZXdEZWZhdWx0ICE9IG51bGwgJiYgVXRpbHMuZ2V0TmVzdGVkUHJvcGVydHkob3B0aW9ucywgb3B0aW9uS2V5KSA9PSBudWxsKSB7XG4gICAgICAgIERlcHJlY2F0b3IuX2xvZ09wdGlvbih7IG9wdGlvbktleSwgY2hhbmdlTmV3RGVmYXVsdCwgc29sdXRpb24gfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIGtleSB3aWxsIGJlIHJlbW92ZWQgb3IgcmVuYW1lZCwgb25seSB0aHJvdyBhIHdhcm5pbmcgaWYgb3B0aW9uIGlzIHNldFxuICAgICAgaWYgKGNoYW5nZU5ld0tleSAhPSBudWxsICYmIFV0aWxzLmdldE5lc3RlZFByb3BlcnR5KG9wdGlvbnMsIG9wdGlvbktleSkgIT0gbnVsbCkge1xuICAgICAgICBEZXByZWNhdG9yLl9sb2dPcHRpb24oeyBvcHRpb25LZXksIGNoYW5nZU5ld0tleSwgc29sdXRpb24gfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvZ3MgYSBkZXByZWNhdGlvbiB3YXJuaW5nIGZvciBhIHBhcmFtZXRlciB0aGF0IGNhbiBvbmx5IGJlIGRldGVybWluZWQgZHluYW1pY2FsbHlcbiAgICogZHVyaW5nIHJ1bnRpbWUuXG4gICAqXG4gICAqIE5vdGU6IERvIG5vdCB1c2UgdGhpcyB0byBsb2cgZGVwcmVjYXRpb25zIG9mIFBhcnNlIFNlcnZlciBvcHRpb25zLCBidXQgYWRkIHN1Y2hcbiAgICogZGVwcmVjYXRpb25zIHRvIGBEZXByZWNhdGlvbnMuanNgIGluc3RlYWQuIFNlZSB0aGUgY29udHJpYnV0aW9uIGRvY3MgZm9yIG1vcmVcbiAgICogZGV0YWlscy5cbiAgICpcbiAgICogRm9yIGNvbnNpc3RlbmN5LCB0aGUgZGVwcmVjYXRpb24gd2FybmluZyBpcyBjb21wb3NlZCBvZiB0aGUgZm9sbG93aW5nIHBhcnRzOlxuICAgKlxuICAgKiA+IERlcHJlY2F0aW9uV2FybmluZzogYHVzYWdlYCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi5cbiAgICogYHNvbHV0aW9uYC5cbiAgICpcbiAgICogLSBgdXNhZ2VgOiBUaGUgZGVwcmVjYXRlZCB1c2FnZS5cbiAgICogLSBgc29sdXRpb25gOiBUaGUgaW5zdHJ1Y3Rpb24gdG8gcmVzb2x2ZSB0aGlzIGRlcHJlY2F0aW9uIHdhcm5pbmcuXG4gICAqXG4gICAqIEZvciBleGFtcGxlOlxuICAgKiA+IERlcHJlY2F0aW9uV2FybmluZzogYFByZWZpeGluZyBmaWVsZCBuYW1lcyB3aXRoIGRvbGxhciBzaWduICgkKSBpbiBhZ2dyZWdhdGlvbiBxdWVyeWBcbiAgICogaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uIGBSZWZlcmVuY2UgZmllbGQgbmFtZXMgd2l0aG91dFxuICAgKiBkb2xsYXIgc2lnbiBwcmVmaXguYFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBUaGUgZGVwcmVjYXRpb24gb3B0aW9ucy5cbiAgICogQHBhcmFtIHtTdHJpbmd9IG9wdGlvbnMudXNhZ2UgVGhlIHVzYWdlIHRoYXQgaXMgZGVwcmVjYXRlZC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnNvbHV0aW9uXSBUaGUgaW5zdHJ1Y3Rpb24gdG8gcmVzb2x2ZSB0aGlzIGRlcHJlY2F0aW9uIHdhcm5pbmcuXG4gICAqIE9wdGlvbmFsLiBJdCBpcyByZWNvbW1lbmRlZCB0byBhZGQgYW4gaW5zdHJ1Y3Rpb24gZm9yIHRoZSBjb252ZW5pZW5jZSBvZiB0aGUgZGV2ZWxvcGVyLlxuICAgKi9cbiAgc3RhdGljIGxvZ1J1bnRpbWVEZXByZWNhdGlvbihvcHRpb25zKSB7XG4gICAgRGVwcmVjYXRvci5fbG9nR2VuZXJpYyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBkZXByZWNhdGlvbiBkZWZpbml0aW9ucy5cbiAgICogQHJldHVybnMge0FycmF5PE9iamVjdD59IFRoZSBkZXByZWNhdGlvbnMuXG4gICAqL1xuICBzdGF0aWMgX2dldERlcHJlY2F0aW9ucygpIHtcbiAgICByZXR1cm4gRGVwcmVjYXRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIExvZ3MgYSBnZW5lcmljIGRlcHJlY2F0aW9uIHdhcm5pbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoZSBkZXByZWNhdGlvbiBvcHRpb25zLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy51c2FnZSBUaGUgdXNhZ2UgdGhhdCBpcyBkZXByZWNhdGVkLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuc29sdXRpb25dIFRoZSBpbnN0cnVjdGlvbiB0byByZXNvbHZlIHRoaXMgZGVwcmVjYXRpb24gd2FybmluZy5cbiAgICogT3B0aW9uYWwuIEl0IGlzIHJlY29tbWVuZGVkIHRvIGFkZCBhbiBpbnN0cnVjdGlvbiBmb3IgdGhlIGNvbnZlbmllbmNlIG9mIHRoZSBkZXZlbG9wZXIuXG4gICAqL1xuICBzdGF0aWMgX2xvZ0dlbmVyaWMoeyB1c2FnZSwgc29sdXRpb24gfSkge1xuICAgIC8vIENvbXBvc2UgbWVzc2FnZVxuICAgIGxldCBvdXRwdXQgPSBgRGVwcmVjYXRpb25XYXJuaW5nOiAke3VzYWdlfSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi5gO1xuICAgIG91dHB1dCArPSBzb2x1dGlvbiA/IGAgJHtzb2x1dGlvbn1gIDogJyc7XG4gICAgbG9nZ2VyLndhcm4ob3V0cHV0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2dzIGEgZGVwcmVjYXRpb24gd2FybmluZyBmb3IgYSBQYXJzZSBTZXJ2ZXIgb3B0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9uS2V5IFRoZSBvcHRpb24ga2V5IGluY2wuIGl0cyBwYXRoLCBlLmcuIGBzZWN1cml0eS5lbmFibGVDaGVja2AuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBlbnZLZXkgVGhlIGVudmlyb25tZW50IGtleSwgZS5nLiBgUEFSU0VfU0VSVkVSX1NFQ1VSSVRZYC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGNoYW5nZU5ld0tleSBTZXQgdGhlIG5ldyBrZXkgbmFtZSBpZiB0aGUgY3VycmVudCBrZXkgd2lsbCBiZSByZXBsYWNlZCxcbiAgICogb3Igc2V0IHRvIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgY3VycmVudCBrZXkgd2lsbCBiZSByZW1vdmVkIHdpdGhvdXQgcmVwbGFjZW1lbnQuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjaGFuZ2VOZXdEZWZhdWx0IFNldCB0aGUgbmV3IGRlZmF1bHQgdmFsdWUgaWYgdGhlIGtleSdzIGRlZmF1bHQgdmFsdWVcbiAgICogd2lsbCBjaGFuZ2UgaW4gYSBmdXR1cmUgdmVyc2lvbi5cbiAgICogQHBhcmFtIHtTdHJpbmd9IFtzb2x1dGlvbl0gVGhlIGluc3RydWN0aW9uIHRvIHJlc29sdmUgdGhpcyBkZXByZWNhdGlvbiB3YXJuaW5nLiBUaGlzXG4gICAqIG1lc3NhZ2UgbXVzdCBub3QgaW5jbHVkZSB0aGUgd2FybmluZyB0aGF0IHRoZSBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCwgdGhhdCBpc1xuICAgKiBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoZSBtZXNzYWdlLiBJdCBzaG91bGQgb25seSBjb250YWluIHRoZSBpbnN0cnVjdGlvbiBvbiBob3dcbiAgICogdG8gcmVzb2x2ZSB0aGlzIHdhcm5pbmcuXG4gICAqL1xuICBzdGF0aWMgX2xvZ09wdGlvbih7IG9wdGlvbktleSwgZW52S2V5LCBjaGFuZ2VOZXdLZXksIGNoYW5nZU5ld0RlZmF1bHQsIHNvbHV0aW9uIH0pIHtcbiAgICBjb25zdCB0eXBlID0gb3B0aW9uS2V5ID8gJ29wdGlvbicgOiAnZW52aXJvbm1lbnQga2V5JztcbiAgICBjb25zdCBrZXkgPSBvcHRpb25LZXkgPyBvcHRpb25LZXkgOiBlbnZLZXk7XG4gICAgY29uc3Qga2V5QWN0aW9uID1cbiAgICAgIGNoYW5nZU5ld0tleSA9PSBudWxsXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogY2hhbmdlTmV3S2V5Lmxlbmd0aCA+IDBcbiAgICAgICAgICA/IGByZW5hbWVkIHRvICcke2NoYW5nZU5ld0tleX0nYFxuICAgICAgICAgIDogYHJlbW92ZWRgO1xuXG4gICAgLy8gQ29tcG9zZSBtZXNzYWdlXG4gICAgbGV0IG91dHB1dCA9IGBEZXByZWNhdGlvbldhcm5pbmc6IFRoZSBQYXJzZSBTZXJ2ZXIgJHt0eXBlfSAnJHtrZXl9JyBgO1xuICAgIG91dHB1dCArPSBjaGFuZ2VOZXdLZXkgIT0gbnVsbCA/IGBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlICR7a2V5QWN0aW9ufSBpbiBhIGZ1dHVyZSB2ZXJzaW9uLmAgOiAnJztcbiAgICBvdXRwdXQgKz0gY2hhbmdlTmV3RGVmYXVsdFxuICAgICAgPyBgZGVmYXVsdCB3aWxsIGNoYW5nZSB0byAnJHtjaGFuZ2VOZXdEZWZhdWx0fScgaW4gYSBmdXR1cmUgdmVyc2lvbi5gXG4gICAgICA6ICcnO1xuICAgIG91dHB1dCArPSBzb2x1dGlvbiA/IGAgJHtzb2x1dGlvbn1gIDogJyc7XG4gICAgbG9nZ2VyLndhcm4ob3V0cHV0KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERlcHJlY2F0b3I7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsYUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsTUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQTZCLFNBQUFELHVCQUFBSSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRTdCO0FBQ0E7QUFDQTtBQUNBLE1BQU1HLFVBQVUsQ0FBQztFQUNmO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0UsT0FBT0Msc0JBQXNCQSxDQUFDQyxPQUFPLEVBQUU7SUFDckM7SUFDQSxLQUFLLE1BQU1DLFdBQVcsSUFBSUgsVUFBVSxDQUFDSSxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUU7TUFDdkQ7TUFDQSxNQUFNQyxRQUFRLEdBQUdGLFdBQVcsQ0FBQ0UsUUFBUTtNQUNyQyxNQUFNQyxTQUFTLEdBQUdILFdBQVcsQ0FBQ0csU0FBUztNQUN2QyxNQUFNQyxnQkFBZ0IsR0FBR0osV0FBVyxDQUFDSSxnQkFBZ0I7TUFDckQsTUFBTUMsWUFBWSxHQUFHTCxXQUFXLENBQUNLLFlBQVk7O01BRTdDO01BQ0EsSUFBSUQsZ0JBQWdCLElBQUksSUFBSSxJQUFJRSxjQUFLLENBQUNDLGlCQUFpQixDQUFDUixPQUFPLEVBQUVJLFNBQVMsQ0FBQyxJQUFJLElBQUksRUFBRTtRQUNuRk4sVUFBVSxDQUFDVyxVQUFVLENBQUM7VUFBRUwsU0FBUztVQUFFQyxnQkFBZ0I7VUFBRUY7UUFBUyxDQUFDLENBQUM7TUFDbEU7O01BRUE7TUFDQSxJQUFJRyxZQUFZLElBQUksSUFBSSxJQUFJQyxjQUFLLENBQUNDLGlCQUFpQixDQUFDUixPQUFPLEVBQUVJLFNBQVMsQ0FBQyxJQUFJLElBQUksRUFBRTtRQUMvRU4sVUFBVSxDQUFDVyxVQUFVLENBQUM7VUFBRUwsU0FBUztVQUFFRSxZQUFZO1VBQUVIO1FBQVMsQ0FBQyxDQUFDO01BQzlEO0lBQ0Y7RUFDRjs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0UsT0FBT08scUJBQXFCQSxDQUFDVixPQUFPLEVBQUU7SUFDcENGLFVBQVUsQ0FBQ2EsV0FBVyxDQUFDWCxPQUFPLENBQUM7RUFDakM7O0VBRUE7QUFDRjtBQUNBO0FBQ0E7RUFDRSxPQUFPRSxnQkFBZ0JBLENBQUEsRUFBRztJQUN4QixPQUFPVSxxQkFBWTtFQUNyQjs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0UsT0FBT0QsV0FBV0EsQ0FBQztJQUFFRSxLQUFLO0lBQUVWO0VBQVMsQ0FBQyxFQUFFO0lBQ3RDO0lBQ0EsSUFBSVcsTUFBTSxHQUFHLHVCQUF1QkQsS0FBSyx5REFBeUQ7SUFDbEdDLE1BQU0sSUFBSVgsUUFBUSxHQUFHLElBQUlBLFFBQVEsRUFBRSxHQUFHLEVBQUU7SUFDeENZLGVBQU0sQ0FBQ0MsSUFBSSxDQUFDRixNQUFNLENBQUM7RUFDckI7O0VBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNFLE9BQU9MLFVBQVVBLENBQUM7SUFBRUwsU0FBUztJQUFFYSxNQUFNO0lBQUVYLFlBQVk7SUFBRUQsZ0JBQWdCO0lBQUVGO0VBQVMsQ0FBQyxFQUFFO0lBQ2pGLE1BQU1lLElBQUksR0FBR2QsU0FBUyxHQUFHLFFBQVEsR0FBRyxpQkFBaUI7SUFDckQsTUFBTWUsR0FBRyxHQUFHZixTQUFTLEdBQUdBLFNBQVMsR0FBR2EsTUFBTTtJQUMxQyxNQUFNRyxTQUFTLEdBQ2JkLFlBQVksSUFBSSxJQUFJLEdBQ2hCZSxTQUFTLEdBQ1RmLFlBQVksQ0FBQ2dCLE1BQU0sR0FBRyxDQUFDLEdBQ3JCLGVBQWVoQixZQUFZLEdBQUcsR0FDOUIsU0FBUzs7SUFFakI7SUFDQSxJQUFJUSxNQUFNLEdBQUcsd0NBQXdDSSxJQUFJLEtBQUtDLEdBQUcsSUFBSTtJQUNyRUwsTUFBTSxJQUFJUixZQUFZLElBQUksSUFBSSxHQUFHLDZCQUE2QmMsU0FBUyx1QkFBdUIsR0FBRyxFQUFFO0lBQ25HTixNQUFNLElBQUlULGdCQUFnQixHQUN0QiwyQkFBMkJBLGdCQUFnQix3QkFBd0IsR0FDbkUsRUFBRTtJQUNOUyxNQUFNLElBQUlYLFFBQVEsR0FBRyxJQUFJQSxRQUFRLEVBQUUsR0FBRyxFQUFFO0lBQ3hDWSxlQUFNLENBQUNDLElBQUksQ0FBQ0YsTUFBTSxDQUFDO0VBQ3JCO0FBQ0Y7QUFFQVMsTUFBTSxDQUFDQyxPQUFPLEdBQUcxQixVQUFVIiwiaWdub3JlTGlzdCI6W119