parse-server 8.3.0-alpha.7 → 8.3.0-alpha.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1012,6 +1012,11 @@ module.exports.DatabaseOptions = {
1012
1012
  help: 'The MongoDB driver option to specify the amount of time, in milliseconds, to wait to establish a single TCP socket connection to the server before raising an error. Specifying 0 disables the connection timeout.',
1013
1013
  action: parsers.numberParser('connectTimeoutMS')
1014
1014
  },
1015
+ disableIndexFieldValidation: {
1016
+ env: 'PARSE_SERVER_DATABASE_DISABLE_INDEX_FIELD_VALIDATION',
1017
+ help: 'Set to `true` to disable validation of index fields. When disabled, indexes can be created even if the fields do not exist in the schema. This can be useful when creating indexes on fields that will be added later.',
1018
+ action: parsers.booleanParser
1019
+ },
1015
1020
  enableSchemaHooks: {
1016
1021
  env: 'PARSE_SERVER_DATABASE_ENABLE_SCHEMA_HOOKS',
1017
1022
  help: 'Enables database real-time hooks to update single schema cache. Set to `true` if using multiple Parse Servers instances connected to the same database. Failing to do so will cause a schema change to not propagate to all instances and re-syncing will only happen when the instances restart. To use this feature with MongoDB, a replica set cluster with [change stream](https://docs.mongodb.com/manual/changeStreams/#availability) support is required.',
@@ -1088,4 +1093,4 @@ module.exports.LogLevels = {
1088
1093
  default: 'info'
1089
1094
  }
1090
1095
  };
1091
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJzZXJzIiwicmVxdWlyZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJTY2hlbWFPcHRpb25zIiwiYWZ0ZXJNaWdyYXRpb24iLCJlbnYiLCJoZWxwIiwiYmVmb3JlTWlncmF0aW9uIiwiZGVmaW5pdGlvbnMiLCJyZXF1aXJlZCIsImFjdGlvbiIsIm9iamVjdFBhcnNlciIsImRlZmF1bHQiLCJkZWxldGVFeHRyYUZpZWxkcyIsImJvb2xlYW5QYXJzZXIiLCJrZWVwVW5rbm93bkluZGV4ZXMiLCJsb2NrU2NoZW1hcyIsInJlY3JlYXRlTW9kaWZpZWRGaWVsZHMiLCJzdHJpY3QiLCJQYXJzZVNlcnZlck9wdGlvbnMiLCJhY2NvdW50TG9ja291dCIsInR5cGUiLCJhbGxvd0NsaWVudENsYXNzQ3JlYXRpb24iLCJhbGxvd0N1c3RvbU9iamVjdElkIiwiYWxsb3dFeHBpcmVkQXV0aERhdGFUb2tlbiIsImFsbG93SGVhZGVycyIsImFycmF5UGFyc2VyIiwiYWxsb3dPcmlnaW4iLCJhbmFseXRpY3NBZGFwdGVyIiwibW9kdWxlT3JPYmplY3RQYXJzZXIiLCJhcHBJZCIsImFwcE5hbWUiLCJhdXRoIiwiY2FjaGVBZGFwdGVyIiwiY2FjaGVNYXhTaXplIiwibnVtYmVyUGFyc2VyIiwiY2FjaGVUVEwiLCJjbGllbnRLZXkiLCJjbG91ZCIsImNsdXN0ZXIiLCJudW1iZXJPckJvb2xlYW5QYXJzZXIiLCJjb2xsZWN0aW9uUHJlZml4IiwiY29udmVydEVtYWlsVG9Mb3dlcmNhc2UiLCJjb252ZXJ0VXNlcm5hbWVUb0xvd2VyY2FzZSIsImN1c3RvbVBhZ2VzIiwiZGF0YWJhc2VBZGFwdGVyIiwiZGF0YWJhc2VPcHRpb25zIiwiZGF0YWJhc2VVUkkiLCJkZWZhdWx0TGltaXQiLCJkaXJlY3RBY2Nlc3MiLCJkb3ROZXRLZXkiLCJlbWFpbEFkYXB0ZXIiLCJlbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkIiwiZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24iLCJlbmFibGVBbm9ueW1vdXNVc2VycyIsImVuYWJsZUNvbGxhdGlvbkNhc2VDb21wYXJpc29uIiwiZW5hYmxlRXhwcmVzc0Vycm9ySGFuZGxlciIsImVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzIiwiZW5jb2RlUGFyc2VPYmplY3RJbkNsb3VkRnVuY3Rpb24iLCJlbmNyeXB0aW9uS2V5IiwiZW5mb3JjZVByaXZhdGVVc2VycyIsImV4cGlyZUluYWN0aXZlU2Vzc2lvbnMiLCJleHRlbmRTZXNzaW9uT25Vc2UiLCJmaWxlS2V5IiwiZmlsZXNBZGFwdGVyIiwiZmlsZVVwbG9hZCIsImdyYXBoUUxQYXRoIiwiZ3JhcGhRTFB1YmxpY0ludHJvc3BlY3Rpb24iLCJncmFwaFFMU2NoZW1hIiwiaG9zdCIsImlkZW1wb3RlbmN5T3B0aW9ucyIsImphdmFzY3JpcHRLZXkiLCJqc29uTG9ncyIsImxpdmVRdWVyeSIsImxpdmVRdWVyeVNlcnZlck9wdGlvbnMiLCJsb2dnZXJBZGFwdGVyIiwibG9nTGV2ZWwiLCJsb2dMZXZlbHMiLCJsb2dzRm9sZGVyIiwibWFpbnRlbmFuY2VLZXkiLCJtYWludGVuYW5jZUtleUlwcyIsIm1hc3RlcktleSIsIm1hc3RlcktleUlwcyIsIm1hc3RlcktleVR0bCIsIm1heExpbWl0IiwibWF4TG9nRmlsZXMiLCJudW1iZXJPclN0cmluZ1BhcnNlciIsIm1heFVwbG9hZFNpemUiLCJtaWRkbGV3YXJlIiwibW91bnRHcmFwaFFMIiwibW91bnRQYXRoIiwibW91bnRQbGF5Z3JvdW5kIiwib2JqZWN0SWRTaXplIiwicGFnZXMiLCJwYXNzd29yZFBvbGljeSIsInBsYXlncm91bmRQYXRoIiwicG9ydCIsInByZXNlcnZlRmlsZU5hbWUiLCJwcmV2ZW50TG9naW5XaXRoVW52ZXJpZmllZEVtYWlsIiwicHJldmVudFNpZ251cFdpdGhVbnZlcmlmaWVkRW1haWwiLCJwcm90ZWN0ZWRGaWVsZHMiLCJfVXNlciIsInB1YmxpY1NlcnZlclVSTCIsInB1c2giLCJyYXRlTGltaXQiLCJyZWFkT25seU1hc3RlcktleSIsInJlcXVlc3RDb250ZXh0TWlkZGxld2FyZSIsInJlcXVlc3RLZXl3b3JkRGVueWxpc3QiLCJrZXkiLCJ2YWx1ZSIsInJlc3RBUElLZXkiLCJyZXZva2VTZXNzaW9uT25QYXNzd29yZFJlc2V0Iiwic2NoZWR1bGVkUHVzaCIsInNjaGVtYSIsInNlY3VyaXR5Iiwic2VuZFVzZXJFbWFpbFZlcmlmaWNhdGlvbiIsInNlcnZlckNsb3NlQ29tcGxldGUiLCJzZXJ2ZXJVUkwiLCJzZXNzaW9uTGVuZ3RoIiwic2lsZW50Iiwic3RhcnRMaXZlUXVlcnlTZXJ2ZXIiLCJ0cnVzdFByb3h5IiwidXNlclNlbnNpdGl2ZUZpZWxkcyIsInZlcmJvc2UiLCJ2ZXJpZnlVc2VyRW1haWxzIiwid2ViaG9va0tleSIsIlJhdGVMaW1pdE9wdGlvbnMiLCJlcnJvclJlc3BvbnNlTWVzc2FnZSIsImluY2x1ZGVJbnRlcm5hbFJlcXVlc3RzIiwiaW5jbHVkZU1hc3RlcktleSIsInJlZGlzVXJsIiwicmVxdWVzdENvdW50IiwicmVxdWVzdE1ldGhvZHMiLCJyZXF1ZXN0UGF0aCIsInJlcXVlc3RUaW1lV2luZG93Iiwiem9uZSIsIlNlY3VyaXR5T3B0aW9ucyIsImNoZWNrR3JvdXBzIiwiZW5hYmxlQ2hlY2siLCJlbmFibGVDaGVja0xvZyIsIlBhZ2VzT3B0aW9ucyIsImN1c3RvbVJvdXRlcyIsImN1c3RvbVVybHMiLCJlbmFibGVMb2NhbGl6YXRpb24iLCJlbmFibGVSb3V0ZXIiLCJmb3JjZVJlZGlyZWN0IiwibG9jYWxpemF0aW9uRmFsbGJhY2tMb2NhbGUiLCJsb2NhbGl6YXRpb25Kc29uUGF0aCIsInBhZ2VzRW5kcG9pbnQiLCJwYWdlc1BhdGgiLCJwbGFjZWhvbGRlcnMiLCJQYWdlc1JvdXRlIiwiaGFuZGxlciIsIm1ldGhvZCIsInBhdGgiLCJQYWdlc0N1c3RvbVVybHNPcHRpb25zIiwiZW1haWxWZXJpZmljYXRpb25MaW5rRXhwaXJlZCIsImVtYWlsVmVyaWZpY2F0aW9uTGlua0ludmFsaWQiLCJlbWFpbFZlcmlmaWNhdGlvblNlbmRGYWlsIiwiZW1haWxWZXJpZmljYXRpb25TZW5kU3VjY2VzcyIsImVtYWlsVmVyaWZpY2F0aW9uU3VjY2VzcyIsInBhc3N3b3JkUmVzZXQiLCJwYXNzd29yZFJlc2V0TGlua0ludmFsaWQiLCJwYXNzd29yZFJlc2V0U3VjY2VzcyIsIkN1c3RvbVBhZ2VzT3B0aW9ucyIsImNob29zZVBhc3N3b3JkIiwiZXhwaXJlZFZlcmlmaWNhdGlvbkxpbmsiLCJpbnZhbGlkTGluayIsImludmFsaWRQYXNzd29yZFJlc2V0TGluayIsImludmFsaWRWZXJpZmljYXRpb25MaW5rIiwibGlua1NlbmRGYWlsIiwibGlua1NlbmRTdWNjZXNzIiwicGFyc2VGcmFtZVVSTCIsInZlcmlmeUVtYWlsU3VjY2VzcyIsIkxpdmVRdWVyeU9wdGlvbnMiLCJjbGFzc05hbWVzIiwicHViU3ViQWRhcHRlciIsInJlZGlzT3B0aW9ucyIsInJlZGlzVVJMIiwid3NzQWRhcHRlciIsIkxpdmVRdWVyeVNlcnZlck9wdGlvbnMiLCJjYWNoZVRpbWVvdXQiLCJrZXlQYWlycyIsIndlYnNvY2tldFRpbWVvdXQiLCJJZGVtcG90ZW5jeU9wdGlvbnMiLCJwYXRocyIsInR0bCIsIkFjY291bnRMb2Nrb3V0T3B0aW9ucyIsImR1cmF0aW9uIiwidGhyZXNob2xkIiwidW5sb2NrT25QYXNzd29yZFJlc2V0IiwiUGFzc3dvcmRQb2xpY3lPcHRpb25zIiwiZG9Ob3RBbGxvd1VzZXJuYW1lIiwibWF4UGFzc3dvcmRBZ2UiLCJtYXhQYXNzd29yZEhpc3RvcnkiLCJyZXNldFBhc3N3b3JkU3VjY2Vzc09uSW52YWxpZEVtYWlsIiwicmVzZXRUb2tlblJldXNlSWZWYWxpZCIsInJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uIiwidmFsaWRhdGlvbkVycm9yIiwidmFsaWRhdG9yQ2FsbGJhY2siLCJ2YWxpZGF0b3JQYXR0ZXJuIiwiRmlsZVVwbG9hZE9wdGlvbnMiLCJlbmFibGVGb3JBbm9ueW1vdXNVc2VyIiwiZW5hYmxlRm9yQXV0aGVudGljYXRlZFVzZXIiLCJlbmFibGVGb3JQdWJsaWMiLCJmaWxlRXh0ZW5zaW9ucyIsIkRhdGFiYXNlT3B0aW9ucyIsImF1dG9TZWxlY3RGYW1pbHkiLCJhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQiLCJjb25uZWN0VGltZW91dE1TIiwiZW5hYmxlU2NoZW1hSG9va3MiLCJtYXhQb29sU2l6ZSIsIm1heFN0YWxlbmVzc1NlY29uZHMiLCJtYXhUaW1lTVMiLCJtaW5Qb29sU2l6ZSIsInJldHJ5V3JpdGVzIiwic2NoZW1hQ2FjaGVUdGwiLCJzb2NrZXRUaW1lb3V0TVMiLCJBdXRoQWRhcHRlciIsImVuYWJsZWQiLCJMb2dMZXZlbHMiLCJjbG91ZEZ1bmN0aW9uRXJyb3IiLCJjbG91ZEZ1bmN0aW9uU3VjY2VzcyIsInRyaWdnZXJBZnRlciIsInRyaWdnZXJCZWZvcmVFcnJvciIsInRyaWdnZXJCZWZvcmVTdWNjZXNzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL09wdGlvbnMvRGVmaW5pdGlvbnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbioqKiogR0VORVJBVEVEIENPREUgKioqKlxuVGhpcyBjb2RlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSByZXNvdXJjZXMvYnVpbGRDb25maWdEZWZpbml0aW9ucy5qc1xuRG8gbm90IGVkaXQgbWFudWFsbHksIGJ1dCB1cGRhdGUgT3B0aW9ucy9pbmRleC5qc1xuKi9cbnZhciBwYXJzZXJzID0gcmVxdWlyZSgnLi9wYXJzZXJzJyk7XG5tb2R1bGUuZXhwb3J0cy5TY2hlbWFPcHRpb25zID0ge1xuICBhZnRlck1pZ3JhdGlvbjoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9TQ0hFTUFfQUZURVJfTUlHUkFUSU9OJyxcbiAgICBoZWxwOiAnRXhlY3V0ZSBhIGNhbGxiYWNrIGFmdGVyIHJ1bm5pbmcgc2NoZW1hIG1pZ3JhdGlvbnMuJyxcbiAgfSxcbiAgYmVmb3JlTWlncmF0aW9uOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1NDSEVNQV9CRUZPUkVfTUlHUkFUSU9OJyxcbiAgICBoZWxwOiAnRXhlY3V0ZSBhIGNhbGxiYWNrIGJlZm9yZSBydW5uaW5nIHNjaGVtYSBtaWdyYXRpb25zLicsXG4gIH0sXG4gIGRlZmluaXRpb25zOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1NDSEVNQV9ERUZJTklUSU9OUycsXG4gICAgaGVscDpcbiAgICAgICdSZXN0IHJlcHJlc2VudGF0aW9uIG9uIFBhcnNlLlNjaGVtYSBodHRwczovL2RvY3MucGFyc2VwbGF0Zm9ybS5vcmcvcmVzdC9ndWlkZS8jYWRkaW5nLWEtc2NoZW1hJyxcbiAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICBhY3Rpb246IHBhcnNlcnMub2JqZWN0UGFyc2VyLFxuICAgIGRlZmF1bHQ6IFtdLFxuICB9LFxuICBkZWxldGVFeHRyYUZpZWxkczoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9TQ0hFTUFfREVMRVRFX0VYVFJBX0ZJRUxEUycsXG4gICAgaGVscDpcbiAgICAgICdJcyB0cnVlIGlmIFBhcnNlIFNlcnZlciBzaG91bGQgZGVsZXRlIGFueSBmaWVsZHMgbm90IGRlZmluZWQgaW4gYSBzY2hlbWEgZGVmaW5pdGlvbi4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGR1cmluZyBkZXZlbG9wbWVudC4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBrZWVwVW5rbm93bkluZGV4ZXM6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfU0NIRU1BX0tFRVBfVU5LTk9XTl9JTkRFWEVTJyxcbiAgICBoZWxwOlxuICAgICAgXCIoT3B0aW9uYWwpIEtlZXAgaW5kZXhlcyB0aGF0IGFyZSBwcmVzZW50IGluIHRoZSBkYXRhYmFzZSBidXQgbm90IGRlZmluZWQgaW4gdGhlIHNjaGVtYS4gU2V0IHRoaXMgdG8gYHRydWVgIGlmIHlvdSBhcmUgYWRkaW5nIGluZGV4ZXMgbWFudWFsbHksIHNvIHRoYXQgdGhleSB3b24ndCBiZSByZW1vdmVkIHdoZW4gcnVubmluZyBzY2hlbWEgbWlncmF0aW9uLiBEZWZhdWx0IGlzIGBmYWxzZWAuXCIsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGxvY2tTY2hlbWFzOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1NDSEVNQV9MT0NLX1NDSEVNQVMnLFxuICAgIGhlbHA6XG4gICAgICAnSXMgdHJ1ZSBpZiBQYXJzZSBTZXJ2ZXIgd2lsbCByZWplY3QgYW55IGF0dGVtcHRzIHRvIG1vZGlmeSB0aGUgc2NoZW1hIHdoaWxlIHRoZSBzZXJ2ZXIgaXMgcnVubmluZy4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICByZWNyZWF0ZU1vZGlmaWVkRmllbGRzOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1NDSEVNQV9SRUNSRUFURV9NT0RJRklFRF9GSUVMRFMnLFxuICAgIGhlbHA6XG4gICAgICAnSXMgdHJ1ZSBpZiBQYXJzZSBTZXJ2ZXIgc2hvdWxkIHJlY3JlYXRlIGFueSBmaWVsZHMgdGhhdCBhcmUgZGlmZmVyZW50IGJldHdlZW4gdGhlIGN1cnJlbnQgZGF0YWJhc2Ugc2NoZW1hIGFuZCB0aGVzY2hlbWEgZGVmaW5pdGlvbi4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGR1cmluZyBkZXZlbG9wbWVudC4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBzdHJpY3Q6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfU0NIRU1BX1NUUklDVCcsXG4gICAgaGVscDogJ0lzIHRydWUgaWYgUGFyc2UgU2VydmVyIHNob3VsZCBleGl0IGlmIHNjaGVtYSB1cGRhdGUgZmFpbC4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxufTtcbm1vZHVsZS5leHBvcnRzLlBhcnNlU2VydmVyT3B0aW9ucyA9IHtcbiAgYWNjb3VudExvY2tvdXQ6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQUNDT1VOVF9MT0NLT1VUJyxcbiAgICBoZWxwOiAnVGhlIGFjY291bnQgbG9ja291dCBwb2xpY3kgZm9yIGZhaWxlZCBsb2dpbiBhdHRlbXB0cy4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5vYmplY3RQYXJzZXIsXG4gICAgdHlwZTogJ0FjY291bnRMb2Nrb3V0T3B0aW9ucycsXG4gIH0sXG4gIGFsbG93Q2xpZW50Q2xhc3NDcmVhdGlvbjoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9BTExPV19DTElFTlRfQ0xBU1NfQ1JFQVRJT04nLFxuICAgIGhlbHA6ICdFbmFibGUgKG9yIGRpc2FibGUpIGNsaWVudCBjbGFzcyBjcmVhdGlvbiwgZGVmYXVsdHMgdG8gZmFsc2UnLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBhbGxvd0N1c3RvbU9iamVjdElkOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0FMTE9XX0NVU1RPTV9PQkpFQ1RfSUQnLFxuICAgIGhlbHA6ICdFbmFibGUgKG9yIGRpc2FibGUpIGN1c3RvbSBvYmplY3RJZCcsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGFsbG93RXhwaXJlZEF1dGhEYXRhVG9rZW46IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQUxMT1dfRVhQSVJFRF9BVVRIX0RBVEFfVE9LRU4nLFxuICAgIGhlbHA6XG4gICAgICAnQWxsb3cgYSB1c2VyIHRvIGxvZyBpbiBldmVuIGlmIHRoZSAzcmQgcGFydHkgYXV0aGVudGljYXRpb24gdG9rZW4gdGhhdCB3YXMgdXNlZCB0byBzaWduIGluIHRvIHRoZWlyIGFjY291bnQgaGFzIGV4cGlyZWQuIElmIHRoaXMgaXMgc2V0IHRvIGBmYWxzZWAsIHRoZW4gdGhlIHRva2VuIHdpbGwgYmUgdmFsaWRhdGVkIGV2ZXJ5IHRpbWUgdGhlIHVzZXIgc2lnbnMgaW4gdG8gdGhlaXIgYWNjb3VudC4gVGhpcyByZWZlcnMgdG8gdGhlIHRva2VuIHRoYXQgaXMgc3RvcmVkIGluIHRoZSBgX1VzZXIuYXV0aERhdGFgIGZpZWxkLiBEZWZhdWx0cyB0byBgZmFsc2VgLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGFsbG93SGVhZGVyczoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9BTExPV19IRUFERVJTJyxcbiAgICBoZWxwOiAnQWRkIGhlYWRlcnMgdG8gQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmFycmF5UGFyc2VyLFxuICB9LFxuICBhbGxvd09yaWdpbjoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9BTExPV19PUklHSU4nLFxuICAgIGhlbHA6XG4gICAgICAnU2V0cyBvcmlnaW5zIGZvciBBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4uIFRoaXMgY2FuIGJlIGEgc3RyaW5nIGZvciBhIHNpbmdsZSBvcmlnaW4gb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncyBmb3IgbXVsdGlwbGUgb3JpZ2lucy4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5hcnJheVBhcnNlcixcbiAgfSxcbiAgYW5hbHl0aWNzQWRhcHRlcjoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9BTkFMWVRJQ1NfQURBUFRFUicsXG4gICAgaGVscDogJ0FkYXB0ZXIgbW9kdWxlIGZvciB0aGUgYW5hbHl0aWNzJyxcbiAgICBhY3Rpb246IHBhcnNlcnMubW9kdWxlT3JPYmplY3RQYXJzZXIsXG4gIH0sXG4gIGFwcElkOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0FQUExJQ0FUSU9OX0lEJyxcbiAgICBoZWxwOiAnWW91ciBQYXJzZSBBcHBsaWNhdGlvbiBJRCcsXG4gICAgcmVxdWlyZWQ6IHRydWUsXG4gIH0sXG4gIGFwcE5hbWU6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQVBQX05BTUUnLFxuICAgIGhlbHA6ICdTZXRzIHRoZSBhcHAgbmFtZScsXG4gIH0sXG4gIGF1dGg6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQVVUSF9QUk9WSURFUlMnLFxuICAgIGhlbHA6XG4gICAgICAnQ29uZmlndXJhdGlvbiBmb3IgeW91ciBhdXRoZW50aWNhdGlvbiBwcm92aWRlcnMsIGFzIHN0cmluZ2lmaWVkIEpTT04uIFNlZSBodHRwOi8vZG9jcy5wYXJzZXBsYXRmb3JtLm9yZy9wYXJzZS1zZXJ2ZXIvZ3VpZGUvI29hdXRoLWFuZC0zcmQtcGFydHktYXV0aGVudGljYXRpb24nLFxuICB9LFxuICBjYWNoZUFkYXB0ZXI6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQ0FDSEVfQURBUFRFUicsXG4gICAgaGVscDogJ0FkYXB0ZXIgbW9kdWxlIGZvciB0aGUgY2FjaGUnLFxuICAgIGFjdGlvbjogcGFyc2Vycy5tb2R1bGVPck9iamVjdFBhcnNlcixcbiAgfSxcbiAgY2FjaGVNYXhTaXplOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0NBQ0hFX01BWF9TSVpFJyxcbiAgICBoZWxwOiAnU2V0cyB0aGUgbWF4aW11bSBzaXplIGZvciB0aGUgaW4gbWVtb3J5IGNhY2hlLCBkZWZhdWx0cyB0byAxMDAwMCcsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm51bWJlclBhcnNlcignY2FjaGVNYXhTaXplJyksXG4gICAgZGVmYXVsdDogMTAwMDAsXG4gIH0sXG4gIGNhY2hlVFRMOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0NBQ0hFX1RUTCcsXG4gICAgaGVscDogJ1NldHMgdGhlIFRUTCBmb3IgdGhlIGluIG1lbW9yeSBjYWNoZSAoaW4gbXMpLCBkZWZhdWx0cyB0byA1MDAwICg1IHNlY29uZHMpJyxcbiAgICBhY3Rpb246IHBhcnNlcnMubnVtYmVyUGFyc2VyKCdjYWNoZVRUTCcpLFxuICAgIGRlZmF1bHQ6IDUwMDAsXG4gIH0sXG4gIGNsaWVudEtleToge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9DTElFTlRfS0VZJyxcbiAgICBoZWxwOiAnS2V5IGZvciBpT1MsIE1hY09TLCB0dk9TIGNsaWVudHMnLFxuICB9LFxuICBjbG91ZDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9DTE9VRCcsXG4gICAgaGVscDogJ0Z1bGwgcGF0aCB0byB5b3VyIGNsb3VkIGNvZGUgbWFpbi5qcycsXG4gIH0sXG4gIGNsdXN0ZXI6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQ0xVU1RFUicsXG4gICAgaGVscDogJ1J1biB3aXRoIGNsdXN0ZXIsIG9wdGlvbmFsbHkgc2V0IHRoZSBudW1iZXIgb2YgcHJvY2Vzc2VzIGRlZmF1bHQgdG8gb3MuY3B1cygpLmxlbmd0aCcsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm51bWJlck9yQm9vbGVhblBhcnNlcixcbiAgfSxcbiAgY29sbGVjdGlvblByZWZpeDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9DT0xMRUNUSU9OX1BSRUZJWCcsXG4gICAgaGVscDogJ0EgY29sbGVjdGlvbiBwcmVmaXggZm9yIHRoZSBjbGFzc2VzJyxcbiAgICBkZWZhdWx0OiAnJyxcbiAgfSxcbiAgY29udmVydEVtYWlsVG9Mb3dlcmNhc2U6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQ09OVkVSVF9FTUFJTF9UT19MT1dFUkNBU0UnLFxuICAgIGhlbHA6XG4gICAgICAnT3B0aW9uYWwuIElmIHNldCB0byBgdHJ1ZWAsIHRoZSBgZW1haWxgIHByb3BlcnR5IG9mIGEgdXNlciBpcyBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBsb3dlcmNhc2UgYmVmb3JlIGJlaW5nIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UuIENvbnNlcXVlbnRseSwgcXVlcmllcyBtdXN0IG1hdGNoIHRoZSBjYXNlIGFzIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UsIHdoaWNoIHdvdWxkIGJlIGxvd2VyY2FzZSBpbiB0aGlzIHNjZW5hcmlvLiBJZiBgZmFsc2VgLCB0aGUgYGVtYWlsYCBwcm9wZXJ0eSBpcyBzdG9yZWQgYXMgc2V0LCB3aXRob3V0IGFueSBjYXNlIG1vZGlmaWNhdGlvbnMuIERlZmF1bHQgaXMgYGZhbHNlYC4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBjb252ZXJ0VXNlcm5hbWVUb0xvd2VyY2FzZToge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9DT05WRVJUX1VTRVJOQU1FX1RPX0xPV0VSQ0FTRScsXG4gICAgaGVscDpcbiAgICAgICdPcHRpb25hbC4gSWYgc2V0IHRvIGB0cnVlYCwgdGhlIGB1c2VybmFtZWAgcHJvcGVydHkgb2YgYSB1c2VyIGlzIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIGxvd2VyY2FzZSBiZWZvcmUgYmVpbmcgc3RvcmVkIGluIHRoZSBkYXRhYmFzZS4gQ29uc2VxdWVudGx5LCBxdWVyaWVzIG11c3QgbWF0Y2ggdGhlIGNhc2UgYXMgc3RvcmVkIGluIHRoZSBkYXRhYmFzZSwgd2hpY2ggd291bGQgYmUgbG93ZXJjYXNlIGluIHRoaXMgc2NlbmFyaW8uIElmIGBmYWxzZWAsIHRoZSBgdXNlcm5hbWVgIHByb3BlcnR5IGlzIHN0b3JlZCBhcyBzZXQsIHdpdGhvdXQgYW55IGNhc2UgbW9kaWZpY2F0aW9ucy4gRGVmYXVsdCBpcyBgZmFsc2VgLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGN1c3RvbVBhZ2VzOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0NVU1RPTV9QQUdFUycsXG4gICAgaGVscDogJ2N1c3RvbSBwYWdlcyBmb3IgcGFzc3dvcmQgdmFsaWRhdGlvbiBhbmQgcmVzZXQnLFxuICAgIGFjdGlvbjogcGFyc2Vycy5vYmplY3RQYXJzZXIsXG4gICAgdHlwZTogJ0N1c3RvbVBhZ2VzT3B0aW9ucycsXG4gICAgZGVmYXVsdDoge30sXG4gIH0sXG4gIGRhdGFiYXNlQWRhcHRlcjoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9EQVRBQkFTRV9BREFQVEVSJyxcbiAgICBoZWxwOlxuICAgICAgJ0FkYXB0ZXIgbW9kdWxlIGZvciB0aGUgZGF0YWJhc2U7IGFueSBvcHRpb25zIHRoYXQgYXJlIG5vdCBleHBsaWNpdGx5IGRlc2NyaWJlZCBoZXJlIGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlIGRhdGFiYXNlIGNsaWVudC4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5tb2R1bGVPck9iamVjdFBhcnNlcixcbiAgfSxcbiAgZGF0YWJhc2VPcHRpb25zOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0RBVEFCQVNFX09QVElPTlMnLFxuICAgIGhlbHA6ICdPcHRpb25zIHRvIHBhc3MgdG8gdGhlIGRhdGFiYXNlIGNsaWVudCcsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm9iamVjdFBhcnNlcixcbiAgICB0eXBlOiAnRGF0YWJhc2VPcHRpb25zJyxcbiAgfSxcbiAgZGF0YWJhc2VVUkk6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfREFUQUJBU0VfVVJJJyxcbiAgICBoZWxwOiAnVGhlIGZ1bGwgVVJJIHRvIHlvdXIgZGF0YWJhc2UuIFN1cHBvcnRlZCBkYXRhYmFzZXMgYXJlIG1vbmdvZGIgb3IgcG9zdGdyZXMuJyxcbiAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICBkZWZhdWx0OiAnbW9uZ29kYjovL2xvY2FsaG9zdDoyNzAxNy9wYXJzZScsXG4gIH0sXG4gIGRlZmF1bHRMaW1pdDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9ERUZBVUxUX0xJTUlUJyxcbiAgICBoZWxwOiAnRGVmYXVsdCB2YWx1ZSBmb3IgbGltaXQgb3B0aW9uIG9uIHF1ZXJpZXMsIGRlZmF1bHRzIHRvIGAxMDBgLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm51bWJlclBhcnNlcignZGVmYXVsdExpbWl0JyksXG4gICAgZGVmYXVsdDogMTAwLFxuICB9LFxuICBkaXJlY3RBY2Nlc3M6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfRElSRUNUX0FDQ0VTUycsXG4gICAgaGVscDpcbiAgICAgICdTZXQgdG8gYHRydWVgIGlmIFBhcnNlIHJlcXVlc3RzIHdpdGhpbiB0aGUgc2FtZSBOb2RlLmpzIGVudmlyb25tZW50IGFzIFBhcnNlIFNlcnZlciBzaG91bGQgYmUgcm91dGVkIHRvIFBhcnNlIFNlcnZlciBkaXJlY3RseSBpbnN0ZWFkIG9mIHZpYSB0aGUgSFRUUCBpbnRlcmZhY2UuIERlZmF1bHQgaXMgYGZhbHNlYC48YnI+PGJyPklmIHNldCB0byBgZmFsc2VgIHRoZW4gUGFyc2UgcmVxdWVzdHMgd2l0aGluIHRoZSBzYW1lIE5vZGUuanMgZW52aXJvbm1lbnQgYXMgUGFyc2UgU2VydmVyIGFyZSBleGVjdXRlZCBhcyBIVFRQIHJlcXVlc3RzIHNlbnQgdG8gUGFyc2UgU2VydmVyIHZpYSB0aGUgYHNlcnZlclVSTGAuIEZvciBleGFtcGxlLCBhIGBQYXJzZS5RdWVyeWAgaW4gQ2xvdWQgQ29kZSBpcyBjYWxsaW5nIFBhcnNlIFNlcnZlciB2aWEgYSBIVFRQIHJlcXVlc3QuIFRoZSBzZXJ2ZXIgaXMgZXNzZW50aWFsbHkgbWFraW5nIGEgSFRUUCByZXF1ZXN0IHRvIGl0c2VsZiwgdW5uZWNlc3NhcmlseSB1c2luZyBuZXR3b3JrIHJlc291cmNlcyBzdWNoIGFzIG5ldHdvcmsgcG9ydHMuPGJyPjxicj5cXHUyNkEwXFx1RkUwRiBJbiBlbnZpcm9ubWVudHMgd2hlcmUgbXVsdGlwbGUgUGFyc2UgU2VydmVyIGluc3RhbmNlcyBydW4gYmVoaW5kIGEgbG9hZCBiYWxhbmNlciBhbmQgUGFyc2UgcmVxdWVzdHMgd2l0aGluIHRoZSBjdXJyZW50IE5vZGUuanMgZW52aXJvbm1lbnQgc2hvdWxkIGJlIHJvdXRlZCB2aWEgdGhlIGxvYWQgYmFsYW5jZXIgYW5kIGRpc3RyaWJ1dGVkIGFzIEhUVFAgcmVxdWVzdHMgYW1vbmcgYWxsIGluc3RhbmNlcyB2aWEgdGhlIGBzZXJ2ZXJVUkxgLCB0aGlzIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIGRvdE5ldEtleToge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9ET1RfTkVUX0tFWScsXG4gICAgaGVscDogJ0tleSBmb3IgVW5pdHkgYW5kIC5OZXQgU0RLJyxcbiAgfSxcbiAgZW1haWxBZGFwdGVyOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0VNQUlMX0FEQVBURVInLFxuICAgIGhlbHA6ICdBZGFwdGVyIG1vZHVsZSBmb3IgZW1haWwgc2VuZGluZycsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm1vZHVsZU9yT2JqZWN0UGFyc2VyLFxuICB9LFxuICBlbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0VNQUlMX1ZFUklGWV9UT0tFTl9SRVVTRV9JRl9WQUxJRCcsXG4gICAgaGVscDpcbiAgICAgICdTZXQgdG8gYHRydWVgIGlmIGEgZW1haWwgdmVyaWZpY2F0aW9uIHRva2VuIHNob3VsZCBiZSByZXVzZWQgaW4gY2FzZSBhbm90aGVyIHRva2VuIGlzIHJlcXVlc3RlZCBidXQgdGhlcmUgaXMgYSB0b2tlbiB0aGF0IGlzIHN0aWxsIHZhbGlkLCBpLmUuIGhhcyBub3QgZXhwaXJlZC4gVGhpcyBhdm9pZHMgdGhlIG9mdGVuIG9ic2VydmVkIGlzc3VlIHRoYXQgYSB1c2VyIHJlcXVlc3RzIG11bHRpcGxlIGVtYWlscyBhbmQgZG9lcyBub3Qga25vdyB3aGljaCBsaW5rIGNvbnRhaW5zIGEgdmFsaWQgdG9rZW4gYmVjYXVzZSBlYWNoIG5ld2x5IGdlbmVyYXRlZCB0b2tlbiB3b3VsZCBpbnZhbGlkYXRlIHRoZSBwcmV2aW91cyB0b2tlbi48YnI+PGJyPkRlZmF1bHQgaXMgYGZhbHNlYC48YnI+UmVxdWlyZXMgb3B0aW9uIGB2ZXJpZnlVc2VyRW1haWxzOiB0cnVlYC4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbjoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9FTUFJTF9WRVJJRllfVE9LRU5fVkFMSURJVFlfRFVSQVRJT04nLFxuICAgIGhlbHA6XG4gICAgICAnU2V0IHRoZSB2YWxpZGl0eSBkdXJhdGlvbiBvZiB0aGUgZW1haWwgdmVyaWZpY2F0aW9uIHRva2VuIGluIHNlY29uZHMgYWZ0ZXIgd2hpY2ggdGhlIHRva2VuIGV4cGlyZXMuIFRoZSB0b2tlbiBpcyB1c2VkIGluIHRoZSBsaW5rIHRoYXQgaXMgc2V0IGluIHRoZSBlbWFpbC4gQWZ0ZXIgdGhlIHRva2VuIGV4cGlyZXMsIHRoZSBsaW5rIGJlY29tZXMgaW52YWxpZCBhbmQgYSBuZXcgbGluayBoYXMgdG8gYmUgc2VudC4gSWYgdGhlIG9wdGlvbiBpcyBub3Qgc2V0IG9yIHNldCB0byBgdW5kZWZpbmVkYCwgdGhlbiB0aGUgdG9rZW4gbmV2ZXIgZXhwaXJlcy48YnI+PGJyPkZvciBleGFtcGxlLCB0byBleHBpcmUgdGhlIHRva2VuIGFmdGVyIDIgaG91cnMsIHNldCBhIHZhbHVlIG9mIDcyMDAgc2Vjb25kcyAoPSA2MCBzZWNvbmRzICogNjAgbWludXRlcyAqIDIgaG91cnMpLjxicj48YnI+RGVmYXVsdCBpcyBgdW5kZWZpbmVkYC48YnI+UmVxdWlyZXMgb3B0aW9uIGB2ZXJpZnlVc2VyRW1haWxzOiB0cnVlYC4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5udW1iZXJQYXJzZXIoJ2VtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uJyksXG4gIH0sXG4gIGVuYWJsZUFub255bW91c1VzZXJzOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0VOQUJMRV9BTk9OX1VTRVJTJyxcbiAgICBoZWxwOiAnRW5hYmxlIChvciBkaXNhYmxlKSBhbm9ueW1vdXMgdXNlcnMsIGRlZmF1bHRzIHRvIHRydWUnLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIGVuYWJsZUNvbGxhdGlvbkNhc2VDb21wYXJpc29uOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0VOQUJMRV9DT0xMQVRJT05fQ0FTRV9DT01QQVJJU09OJyxcbiAgICBoZWxwOlxuICAgICAgJ09wdGlvbmFsLiBJZiBzZXQgdG8gYHRydWVgLCB0aGUgY29sbGF0aW9uIHJ1bGUgb2YgY2FzZSBjb21wYXJpc29uIGZvciBxdWVyaWVzIGFuZCBpbmRleGVzIGlzIGVuYWJsZWQuIEVuYWJsZSB0aGlzIG9wdGlvbiB0byBydW4gUGFyc2UgU2VydmVyIHdpdGggTW9uZ29EQiBBdGxhcyBTZXJ2ZXJsZXNzIG9yIEFXUyBBbWF6b24gRG9jdW1lbnREQi4gSWYgYGZhbHNlYCwgdGhlIGNvbGxhdGlvbiBydWxlIG9mIGNhc2UgY29tcGFyaXNvbiBpcyBkaXNhYmxlZC4gRGVmYXVsdCBpcyBgZmFsc2VgLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGVuYWJsZUV4cHJlc3NFcnJvckhhbmRsZXI6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfRU5BQkxFX0VYUFJFU1NfRVJST1JfSEFORExFUicsXG4gICAgaGVscDogJ0VuYWJsZXMgdGhlIGRlZmF1bHQgZXhwcmVzcyBlcnJvciBoYW5kbGVyIGZvciBhbGwgZXJyb3JzJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgZW5hYmxlSW5zZWN1cmVBdXRoQWRhcHRlcnM6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfRU5BQkxFX0lOU0VDVVJFX0FVVEhfQURBUFRFUlMnLFxuICAgIGhlbHA6XG4gICAgICAnRW5hYmxlIChvciBkaXNhYmxlKSBpbnNlY3VyZSBhdXRoIGFkYXB0ZXJzLCBkZWZhdWx0cyB0byB0cnVlLiBJbnNlY3VyZSBhdXRoIGFkYXB0ZXJzIGFyZSBkZXByZWNhdGVkIGFuZCBpdCBpcyByZWNvbW1lbmRlZCB0byBkaXNhYmxlIHRoZW0uJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxuICBlbmNvZGVQYXJzZU9iamVjdEluQ2xvdWRGdW5jdGlvbjoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9FTkNPREVfUEFSU0VfT0JKRUNUX0lOX0NMT1VEX0ZVTkNUSU9OJyxcbiAgICBoZWxwOlxuICAgICAgJ0lmIHNldCB0byBgdHJ1ZWAsIGEgYFBhcnNlLk9iamVjdGAgdGhhdCBpcyBpbiB0aGUgcGF5bG9hZCB3aGVuIGNhbGxpbmcgYSBDbG91ZCBGdW5jdGlvbiB3aWxsIGJlIGNvbnZlcnRlZCB0byBhbiBpbnN0YW5jZSBvZiBgUGFyc2UuT2JqZWN0YC4gSWYgYGZhbHNlYCwgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBjb252ZXJ0ZWQgYW5kIGluc3RlYWQgYmUgYSBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdCwgd2hpY2ggY29udGFpbnMgdGhlIHJhdyBkYXRhIG9mIGEgYFBhcnNlLk9iamVjdGAgYnV0IGlzIG5vdCBhbiBhY3R1YWwgaW5zdGFuY2Ugb2YgYFBhcnNlLk9iamVjdGAuIERlZmF1bHQgaXMgYGZhbHNlYC4gPGJyPjxicj5cXHUyMTM5XFx1RkUwRiBUaGUgZXhwZWN0ZWQgYmVoYXZpb3Igd291bGQgYmUgdGhhdCB0aGUgb2JqZWN0IGlzIGNvbnZlcnRlZCB0byBhbiBpbnN0YW5jZSBvZiBgUGFyc2UuT2JqZWN0YCwgc28geW91IHdvdWxkIG5vcm1hbGx5IHNldCB0aGlzIG9wdGlvbiB0byBgdHJ1ZWAuIFRoZSBkZWZhdWx0IGlzIGBmYWxzZWAgYmVjYXVzZSB0aGlzIGlzIGEgdGVtcG9yYXJ5IG9wdGlvbiB0aGF0IGhhcyBiZWVuIGludHJvZHVjZWQgdG8gYXZvaWQgYSBicmVha2luZyBjaGFuZ2Ugd2hlbiBmaXhpbmcgYSBidWcgd2hlcmUgSmF2YVNjcmlwdCBvYmplY3RzIGFyZSBub3QgY29udmVydGVkIHRvIGFjdHVhbCBpbnN0YW5jZXMgb2YgYFBhcnNlLk9iamVjdGAuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxuICBlbmNyeXB0aW9uS2V5OiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0VOQ1JZUFRJT05fS0VZJyxcbiAgICBoZWxwOiAnS2V5IGZvciBlbmNyeXB0aW5nIHlvdXIgZmlsZXMnLFxuICB9LFxuICBlbmZvcmNlUHJpdmF0ZVVzZXJzOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0VORk9SQ0VfUFJJVkFURV9VU0VSUycsXG4gICAgaGVscDogJ1NldCB0byB0cnVlIGlmIG5ldyB1c2VycyBzaG91bGQgYmUgY3JlYXRlZCB3aXRob3V0IHB1YmxpYyByZWFkIGFuZCB3cml0ZSBhY2Nlc3MuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxuICBleHBpcmVJbmFjdGl2ZVNlc3Npb25zOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0VYUElSRV9JTkFDVElWRV9TRVNTSU9OUycsXG4gICAgaGVscDpcbiAgICAgICdTZXRzIHdoZXRoZXIgd2Ugc2hvdWxkIGV4cGlyZSB0aGUgaW5hY3RpdmUgc2Vzc2lvbnMsIGRlZmF1bHRzIHRvIHRydWUuIElmIGZhbHNlLCBhbGwgbmV3IHNlc3Npb25zIGFyZSBjcmVhdGVkIHdpdGggbm8gZXhwaXJhdGlvbiBkYXRlLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgfSxcbiAgZXh0ZW5kU2Vzc2lvbk9uVXNlOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0VYVEVORF9TRVNTSU9OX09OX1VTRScsXG4gICAgaGVscDpcbiAgICAgIFwiV2hldGhlciBQYXJzZSBTZXJ2ZXIgc2hvdWxkIGF1dG9tYXRpY2FsbHkgZXh0ZW5kIGEgdmFsaWQgc2Vzc2lvbiBieSB0aGUgc2Vzc2lvbkxlbmd0aC4gSW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2Vzc2lvbiB1cGRhdGVzIGluIHRoZSBkYXRhYmFzZSwgYSBzZXNzaW9uIHdpbGwgb25seSBiZSBleHRlbmRlZCB3aGVuIGEgcmVxdWVzdCBpcyByZWNlaXZlZCBhZnRlciBhdCBsZWFzdCBoYWxmIG9mIHRoZSBjdXJyZW50IHNlc3Npb24ncyBsaWZldGltZSBoYXMgcGFzc2VkLlwiLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBmaWxlS2V5OiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0ZJTEVfS0VZJyxcbiAgICBoZWxwOiAnS2V5IGZvciB5b3VyIGZpbGVzJyxcbiAgfSxcbiAgZmlsZXNBZGFwdGVyOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0ZJTEVTX0FEQVBURVInLFxuICAgIGhlbHA6ICdBZGFwdGVyIG1vZHVsZSBmb3IgdGhlIGZpbGVzIHN1Yi1zeXN0ZW0nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5tb2R1bGVPck9iamVjdFBhcnNlcixcbiAgfSxcbiAgZmlsZVVwbG9hZDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9GSUxFX1VQTE9BRF9PUFRJT05TJyxcbiAgICBoZWxwOiAnT3B0aW9ucyBmb3IgZmlsZSB1cGxvYWRzJyxcbiAgICBhY3Rpb246IHBhcnNlcnMub2JqZWN0UGFyc2VyLFxuICAgIHR5cGU6ICdGaWxlVXBsb2FkT3B0aW9ucycsXG4gICAgZGVmYXVsdDoge30sXG4gIH0sXG4gIGdyYXBoUUxQYXRoOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0dSQVBIUUxfUEFUSCcsXG4gICAgaGVscDogJ01vdW50IHBhdGggZm9yIHRoZSBHcmFwaFFMIGVuZHBvaW50LCBkZWZhdWx0cyB0byAvZ3JhcGhxbCcsXG4gICAgZGVmYXVsdDogJy9ncmFwaHFsJyxcbiAgfSxcbiAgZ3JhcGhRTFB1YmxpY0ludHJvc3BlY3Rpb246IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfR1JBUEhRTF9QVUJMSUNfSU5UUk9TUEVDVElPTicsXG4gICAgaGVscDogJ0VuYWJsZSBwdWJsaWMgaW50cm9zcGVjdGlvbiBmb3IgdGhlIEdyYXBoUUwgZW5kcG9pbnQsIGRlZmF1bHRzIHRvIGZhbHNlJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgZ3JhcGhRTFNjaGVtYToge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9HUkFQSF9RTFNDSEVNQScsXG4gICAgaGVscDogJ0Z1bGwgcGF0aCB0byB5b3VyIEdyYXBoUUwgY3VzdG9tIHNjaGVtYS5ncmFwaHFsIGZpbGUnLFxuICB9LFxuICBob3N0OiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0hPU1QnLFxuICAgIGhlbHA6ICdUaGUgaG9zdCB0byBzZXJ2ZSBQYXJzZVNlcnZlciBvbiwgZGVmYXVsdHMgdG8gMC4wLjAuMCcsXG4gICAgZGVmYXVsdDogJzAuMC4wLjAnLFxuICB9LFxuICBpZGVtcG90ZW5jeU9wdGlvbnM6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfRVhQRVJJTUVOVEFMX0lERU1QT1RFTkNZX09QVElPTlMnLFxuICAgIGhlbHA6XG4gICAgICAnT3B0aW9ucyBmb3IgcmVxdWVzdCBpZGVtcG90ZW5jeSB0byBkZWR1cGxpY2F0ZSBpZGVudGljYWwgcmVxdWVzdHMgdGhhdCBtYXkgYmUgY2F1c2VkIGJ5IG5ldHdvcmsgaXNzdWVzLiBDYXV0aW9uLCB0aGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlIHRoYXQgbWF5IG5vdCBiZSBhcHByb3ByaWF0ZSBmb3IgcHJvZHVjdGlvbi4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5vYmplY3RQYXJzZXIsXG4gICAgdHlwZTogJ0lkZW1wb3RlbmN5T3B0aW9ucycsXG4gICAgZGVmYXVsdDoge30sXG4gIH0sXG4gIGphdmFzY3JpcHRLZXk6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfSkFWQVNDUklQVF9LRVknLFxuICAgIGhlbHA6ICdLZXkgZm9yIHRoZSBKYXZhc2NyaXB0IFNESycsXG4gIH0sXG4gIGpzb25Mb2dzOiB7XG4gICAgZW52OiAnSlNPTl9MT0dTJyxcbiAgICBoZWxwOiAnTG9nIGFzIHN0cnVjdHVyZWQgSlNPTiBvYmplY3RzJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgfSxcbiAgbGl2ZVF1ZXJ5OiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0xJVkVfUVVFUlknLFxuICAgIGhlbHA6IFwicGFyc2Utc2VydmVyJ3MgTGl2ZVF1ZXJ5IGNvbmZpZ3VyYXRpb24gb2JqZWN0XCIsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm9iamVjdFBhcnNlcixcbiAgICB0eXBlOiAnTGl2ZVF1ZXJ5T3B0aW9ucycsXG4gIH0sXG4gIGxpdmVRdWVyeVNlcnZlck9wdGlvbnM6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfTElWRV9RVUVSWV9TRVJWRVJfT1BUSU9OUycsXG4gICAgaGVscDogJ0xpdmUgcXVlcnkgc2VydmVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAod2lsbCBzdGFydCB0aGUgbGl2ZVF1ZXJ5IHNlcnZlciknLFxuICAgIGFjdGlvbjogcGFyc2Vycy5vYmplY3RQYXJzZXIsXG4gICAgdHlwZTogJ0xpdmVRdWVyeVNlcnZlck9wdGlvbnMnLFxuICB9LFxuICBsb2dnZXJBZGFwdGVyOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0xPR0dFUl9BREFQVEVSJyxcbiAgICBoZWxwOiAnQWRhcHRlciBtb2R1bGUgZm9yIHRoZSBsb2dnaW5nIHN1Yi1zeXN0ZW0nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5tb2R1bGVPck9iamVjdFBhcnNlcixcbiAgfSxcbiAgbG9nTGV2ZWw6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfTE9HX0xFVkVMJyxcbiAgICBoZWxwOiAnU2V0cyB0aGUgbGV2ZWwgZm9yIGxvZ3MnLFxuICB9LFxuICBsb2dMZXZlbHM6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfTE9HX0xFVkVMUycsXG4gICAgaGVscDogJyhPcHRpb25hbCkgT3ZlcnJpZGVzIHRoZSBsb2cgbGV2ZWxzIHVzZWQgaW50ZXJuYWxseSBieSBQYXJzZSBTZXJ2ZXIgdG8gbG9nIGV2ZW50cy4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5vYmplY3RQYXJzZXIsXG4gICAgdHlwZTogJ0xvZ0xldmVscycsXG4gICAgZGVmYXVsdDoge30sXG4gIH0sXG4gIGxvZ3NGb2xkZXI6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfTE9HU19GT0xERVInLFxuICAgIGhlbHA6IFwiRm9sZGVyIGZvciB0aGUgbG9ncyAoZGVmYXVsdHMgdG8gJy4vbG9ncycpOyBzZXQgdG8gbnVsbCB0byBkaXNhYmxlIGZpbGUgYmFzZWQgbG9nZ2luZ1wiLFxuICAgIGRlZmF1bHQ6ICcuL2xvZ3MnLFxuICB9LFxuICBtYWludGVuYW5jZUtleToge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9NQUlOVEVOQU5DRV9LRVknLFxuICAgIGhlbHA6XG4gICAgICAnKE9wdGlvbmFsKSBUaGUgbWFpbnRlbmFuY2Uga2V5IGlzIHVzZWQgZm9yIG1vZGlmeWluZyBpbnRlcm5hbCBhbmQgcmVhZC1vbmx5IGZpZWxkcyBvZiBQYXJzZSBTZXJ2ZXIuPGJyPjxicj5cXHUyNkEwXFx1RkUwRiBUaGlzIGtleSBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBwYXJ0IG9mIGEgcmVndWxhciBvcGVyYXRpb24gb2YgUGFyc2UgU2VydmVyLiBUaGlzIGtleSBpcyBpbnRlbmRlZCB0byBjb25kdWN0IG91dC1vZi1iYW5kIGNoYW5nZXMgc3VjaCBhcyBvbmUtdGltZSBtaWdyYXRpb25zIG9yIGRhdGEgY29ycmVjdGlvbiB0YXNrcy4gSW50ZXJuYWwgZmllbGRzIGFyZSBub3Qgb2ZmaWNpYWxseSBkb2N1bWVudGVkIGFuZCBtYXkgY2hhbmdlIGF0IGFueSB0aW1lIHdpdGhvdXQgcHVibGljYXRpb24gaW4gcmVsZWFzZSBjaGFuZ2Vsb2dzLiBXZSBzdHJvbmdseSBhZHZpY2Ugbm90IHRvIHJlbHkgb24gaW50ZXJuYWwgZmllbGRzIGFzIHBhcnQgb2YgeW91ciByZWd1bGFyIG9wZXJhdGlvbiBhbmQgdG8gaW52ZXN0aWdhdGUgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgcGxhbm5lZCBjaGFuZ2VzICpkaXJlY3RseSBpbiB0aGUgc291cmNlIGNvZGUqIG9mIHlvdXIgY3VycmVudCB2ZXJzaW9uIG9mIFBhcnNlIFNlcnZlci4nLFxuICAgIHJlcXVpcmVkOiB0cnVlLFxuICB9LFxuICBtYWludGVuYW5jZUtleUlwczoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9NQUlOVEVOQU5DRV9LRVlfSVBTJyxcbiAgICBoZWxwOlxuICAgICAgXCIoT3B0aW9uYWwpIFJlc3RyaWN0cyB0aGUgdXNlIG9mIG1haW50ZW5hbmNlIGtleSBwZXJtaXNzaW9ucyB0byBhIGxpc3Qgb2YgSVAgYWRkcmVzc2VzIG9yIHJhbmdlcy48YnI+PGJyPlRoaXMgb3B0aW9uIGFjY2VwdHMgYSBsaXN0IG9mIHNpbmdsZSBJUCBhZGRyZXNzZXMsIGZvciBleGFtcGxlIGBbJzEwLjAuMC4xJywgJzEwLjAuMC4yJ11gLiBZb3UgY2FuIGFsc28gdXNlIENJRFIgbm90YXRpb24gdG8gc3BlY2lmeSBhbiBJUCBhZGRyZXNzIHJhbmdlLCBmb3IgZXhhbXBsZSBgWycxMC4wLjEuMC8yNCddYC48YnI+PGJyPjxiPlNwZWNpYWwgc2NlbmFyaW9zOjwvYj48YnI+LSBTZXR0aW5nIGFuIGVtcHR5IGFycmF5IGBbXWAgbWVhbnMgdGhhdCB0aGUgbWFpbnRlbmFuY2Uga2V5IGNhbm5vdCBiZSB1c2VkIGV2ZW4gaW4gUGFyc2UgU2VydmVyIENsb3VkIENvZGUuIFRoaXMgdmFsdWUgY2Fubm90IGJlIHNldCB2aWEgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgYXMgdGhlcmUgaXMgbm8gd2F5IHRvIHBhc3MgYW4gZW1wdHkgYXJyYXkgdG8gUGFyc2UgU2VydmVyIHZpYSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS48YnI+LSBTZXR0aW5nIGBbJzAuMC4wLjAvMCcsICc6OjAnXWAgbWVhbnMgdG8gYWxsb3cgYW55IElQdjQgYW5kIElQdjYgYWRkcmVzcyB0byB1c2UgdGhlIG1haW50ZW5hbmNlIGtleSBhbmQgZWZmZWN0aXZlbHkgZGlzYWJsZXMgdGhlIElQIGZpbHRlci48YnI+PGJyPjxiPkNvbnNpZGVyYXRpb25zOjwvYj48YnI+LSBJUHY0IGFuZCBJUHY2IGFkZHJlc3NlcyBhcmUgbm90IGNvbXBhcmVkIGFnYWluc3QgZWFjaCBvdGhlci4gRWFjaCBJUCB2ZXJzaW9uIChJUHY0IGFuZCBJUHY2KSBuZWVkcyB0byBiZSBjb25zaWRlcmVkIHNlcGFyYXRlbHkuIEZvciBleGFtcGxlLCBgWycwLjAuMC4wLzAnXWAgYWxsb3dzIGFueSBJUHY0IGFkZHJlc3MgYW5kIGJsb2NrcyBldmVyeSBJUHY2IGFkZHJlc3MuIENvbnZlcnNlbHksIGBbJzo6MCddYCBhbGxvd3MgYW55IElQdjYgYWRkcmVzcyBhbmQgYmxvY2tzIGV2ZXJ5IElQdjQgYWRkcmVzcy48YnI+LSBLZWVwIGluIG1pbmQgdGhhdCB0aGUgSVAgdmVyc2lvbiBpbiB1c2UgZGVwZW5kcyBvbiB0aGUgbmV0d29yayBzdGFjayBvZiB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggUGFyc2UgU2VydmVyIHJ1bnMuIEEgbG9jYWwgZW52aXJvbm1lbnQgbWF5IHVzZSBhIGRpZmZlcmVudCBJUCB2ZXJzaW9uIHRoYW4gYSByZW1vdGUgZW52aXJvbm1lbnQuIEZvciBleGFtcGxlLCBpdCdzIHBvc3NpYmxlIHRoYXQgbG9jYWxseSB0aGUgdmFsdWUgYFsnMC4wLjAuMC8wJ11gIGFsbG93cyB0aGUgcmVxdWVzdCBJUCBiZWNhdXNlIHRoZSBlbnZpcm9ubWVudCBpcyB1c2luZyBJUHY0LCBidXQgd2hlbiBQYXJzZSBTZXJ2ZXIgaXMgZGVwbG95ZWQgcmVtb3RlbHkgdGhlIHJlcXVlc3QgSVAgaXMgYmxvY2tlZCBiZWNhdXNlIHRoZSByZW1vdGUgZW52aXJvbm1lbnQgaXMgdXNpbmcgSVB2Ni48YnI+LSBXaGVuIHNldHRpbmcgdGhlIG9wdGlvbiB2aWEgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdGhlIG5vdGF0aW9uIGlzIGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZywgZm9yIGV4YW1wbGUgYFxcXCIwLjAuMC4wLzAsOjowXFxcImAuPGJyPi0gSVB2NiB6b25lIGluZGljZXMgKGAlYCBzdWZmaXgpIGFyZSBub3Qgc3VwcG9ydGVkLCBmb3IgZXhhbXBsZSBgZmU4MDo6MSVldGgwYCwgYGZlODA6OjElMWAgb3IgYDo6MSVsb2AuPGJyPjxicj5EZWZhdWx0cyB0byBgWycxMjcuMC4wLjEnLCAnOjoxJ11gIHdoaWNoIG1lYW5zIHRoYXQgb25seSBgbG9jYWxob3N0YCwgdGhlIHNlcnZlciBpbnN0YW5jZSBvbiB3aGljaCBQYXJzZSBTZXJ2ZXIgcnVucywgaXMgYWxsb3dlZCB0byB1c2UgdGhlIG1haW50ZW5hbmNlIGtleS5cIixcbiAgICBhY3Rpb246IHBhcnNlcnMuYXJyYXlQYXJzZXIsXG4gICAgZGVmYXVsdDogWycxMjcuMC4wLjEnLCAnOjoxJ10sXG4gIH0sXG4gIG1hc3RlcktleToge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9NQVNURVJfS0VZJyxcbiAgICBoZWxwOiAnWW91ciBQYXJzZSBNYXN0ZXIgS2V5JyxcbiAgICByZXF1aXJlZDogdHJ1ZSxcbiAgfSxcbiAgbWFzdGVyS2V5SXBzOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX01BU1RFUl9LRVlfSVBTJyxcbiAgICBoZWxwOlxuICAgICAgXCIoT3B0aW9uYWwpIFJlc3RyaWN0cyB0aGUgdXNlIG9mIG1hc3RlciBrZXkgcGVybWlzc2lvbnMgdG8gYSBsaXN0IG9mIElQIGFkZHJlc3NlcyBvciByYW5nZXMuPGJyPjxicj5UaGlzIG9wdGlvbiBhY2NlcHRzIGEgbGlzdCBvZiBzaW5nbGUgSVAgYWRkcmVzc2VzLCBmb3IgZXhhbXBsZSBgWycxMC4wLjAuMScsICcxMC4wLjAuMiddYC4gWW91IGNhbiBhbHNvIHVzZSBDSURSIG5vdGF0aW9uIHRvIHNwZWNpZnkgYW4gSVAgYWRkcmVzcyByYW5nZSwgZm9yIGV4YW1wbGUgYFsnMTAuMC4xLjAvMjQnXWAuPGJyPjxicj48Yj5TcGVjaWFsIHNjZW5hcmlvczo8L2I+PGJyPi0gU2V0dGluZyBhbiBlbXB0eSBhcnJheSBgW11gIG1lYW5zIHRoYXQgdGhlIG1hc3RlciBrZXkgY2Fubm90IGJlIHVzZWQgZXZlbiBpbiBQYXJzZSBTZXJ2ZXIgQ2xvdWQgQ29kZS4gVGhpcyB2YWx1ZSBjYW5ub3QgYmUgc2V0IHZpYSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBhcyB0aGVyZSBpcyBubyB3YXkgdG8gcGFzcyBhbiBlbXB0eSBhcnJheSB0byBQYXJzZSBTZXJ2ZXIgdmlhIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLjxicj4tIFNldHRpbmcgYFsnMC4wLjAuMC8wJywgJzo6MCddYCBtZWFucyB0byBhbGxvdyBhbnkgSVB2NCBhbmQgSVB2NiBhZGRyZXNzIHRvIHVzZSB0aGUgbWFzdGVyIGtleSBhbmQgZWZmZWN0aXZlbHkgZGlzYWJsZXMgdGhlIElQIGZpbHRlci48YnI+PGJyPjxiPkNvbnNpZGVyYXRpb25zOjwvYj48YnI+LSBJUHY0IGFuZCBJUHY2IGFkZHJlc3NlcyBhcmUgbm90IGNvbXBhcmVkIGFnYWluc3QgZWFjaCBvdGhlci4gRWFjaCBJUCB2ZXJzaW9uIChJUHY0IGFuZCBJUHY2KSBuZWVkcyB0byBiZSBjb25zaWRlcmVkIHNlcGFyYXRlbHkuIEZvciBleGFtcGxlLCBgWycwLjAuMC4wLzAnXWAgYWxsb3dzIGFueSBJUHY0IGFkZHJlc3MgYW5kIGJsb2NrcyBldmVyeSBJUHY2IGFkZHJlc3MuIENvbnZlcnNlbHksIGBbJzo6MCddYCBhbGxvd3MgYW55IElQdjYgYWRkcmVzcyBhbmQgYmxvY2tzIGV2ZXJ5IElQdjQgYWRkcmVzcy48YnI+LSBLZWVwIGluIG1pbmQgdGhhdCB0aGUgSVAgdmVyc2lvbiBpbiB1c2UgZGVwZW5kcyBvbiB0aGUgbmV0d29yayBzdGFjayBvZiB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggUGFyc2UgU2VydmVyIHJ1bnMuIEEgbG9jYWwgZW52aXJvbm1lbnQgbWF5IHVzZSBhIGRpZmZlcmVudCBJUCB2ZXJzaW9uIHRoYW4gYSByZW1vdGUgZW52aXJvbm1lbnQuIEZvciBleGFtcGxlLCBpdCdzIHBvc3NpYmxlIHRoYXQgbG9jYWxseSB0aGUgdmFsdWUgYFsnMC4wLjAuMC8wJ11gIGFsbG93cyB0aGUgcmVxdWVzdCBJUCBiZWNhdXNlIHRoZSBlbnZpcm9ubWVudCBpcyB1c2luZyBJUHY0LCBidXQgd2hlbiBQYXJzZSBTZXJ2ZXIgaXMgZGVwbG95ZWQgcmVtb3RlbHkgdGhlIHJlcXVlc3QgSVAgaXMgYmxvY2tlZCBiZWNhdXNlIHRoZSByZW1vdGUgZW52aXJvbm1lbnQgaXMgdXNpbmcgSVB2Ni48YnI+LSBXaGVuIHNldHRpbmcgdGhlIG9wdGlvbiB2aWEgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdGhlIG5vdGF0aW9uIGlzIGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZywgZm9yIGV4YW1wbGUgYFxcXCIwLjAuMC4wLzAsOjowXFxcImAuPGJyPi0gSVB2NiB6b25lIGluZGljZXMgKGAlYCBzdWZmaXgpIGFyZSBub3Qgc3VwcG9ydGVkLCBmb3IgZXhhbXBsZSBgZmU4MDo6MSVldGgwYCwgYGZlODA6OjElMWAgb3IgYDo6MSVsb2AuPGJyPjxicj5EZWZhdWx0cyB0byBgWycxMjcuMC4wLjEnLCAnOjoxJ11gIHdoaWNoIG1lYW5zIHRoYXQgb25seSBgbG9jYWxob3N0YCwgdGhlIHNlcnZlciBpbnN0YW5jZSBvbiB3aGljaCBQYXJzZSBTZXJ2ZXIgcnVucywgaXMgYWxsb3dlZCB0byB1c2UgdGhlIG1hc3RlciBrZXkuXCIsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmFycmF5UGFyc2VyLFxuICAgIGRlZmF1bHQ6IFsnMTI3LjAuMC4xJywgJzo6MSddLFxuICB9LFxuICBtYXN0ZXJLZXlUdGw6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfTUFTVEVSX0tFWV9UVEwnLFxuICAgIGhlbHA6XG4gICAgICAnKE9wdGlvbmFsKSBUaGUgZHVyYXRpb24gaW4gc2Vjb25kcyBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgYG1hc3RlcktleWAgaXMgYmVpbmcgdXNlZCBiZWZvcmUgaXQgaXMgcmVxdWVzdGVkIGFnYWluIGlmIGBtYXN0ZXJLZXlgIGlzIHNldCB0byBhIGZ1bmN0aW9uLiBJZiBgbWFzdGVyS2V5YCBpcyBub3Qgc2V0IHRvIGEgZnVuY3Rpb24sIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QuIERlZmF1bHQgaXMgYDBgLCB3aGljaCBtZWFucyB0aGUgbWFzdGVyIGtleSBpcyByZXF1ZXN0ZWQgYnkgaW52b2tpbmcgdGhlICBgbWFzdGVyS2V5YCBmdW5jdGlvbiBldmVyeSB0aW1lIHRoZSBtYXN0ZXIga2V5IGlzIHVzZWQgaW50ZXJuYWxseSBieSBQYXJzZSBTZXJ2ZXIuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMubnVtYmVyUGFyc2VyKCdtYXN0ZXJLZXlUdGwnKSxcbiAgfSxcbiAgbWF4TGltaXQ6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfTUFYX0xJTUlUJyxcbiAgICBoZWxwOiAnTWF4IHZhbHVlIGZvciBsaW1pdCBvcHRpb24gb24gcXVlcmllcywgZGVmYXVsdHMgdG8gdW5saW1pdGVkJyxcbiAgICBhY3Rpb246IHBhcnNlcnMubnVtYmVyUGFyc2VyKCdtYXhMaW1pdCcpLFxuICB9LFxuICBtYXhMb2dGaWxlczoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9NQVhfTE9HX0ZJTEVTJyxcbiAgICBoZWxwOlxuICAgICAgXCJNYXhpbXVtIG51bWJlciBvZiBsb2dzIHRvIGtlZXAuIElmIG5vdCBzZXQsIG5vIGxvZ3Mgd2lsbCBiZSByZW1vdmVkLiBUaGlzIGNhbiBiZSBhIG51bWJlciBvZiBmaWxlcyBvciBudW1iZXIgb2YgZGF5cy4gSWYgdXNpbmcgZGF5cywgYWRkICdkJyBhcyB0aGUgc3VmZml4LiAoZGVmYXVsdDogbnVsbClcIixcbiAgICBhY3Rpb246IHBhcnNlcnMubnVtYmVyT3JTdHJpbmdQYXJzZXIoJ21heExvZ0ZpbGVzJyksXG4gIH0sXG4gIG1heFVwbG9hZFNpemU6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfTUFYX1VQTE9BRF9TSVpFJyxcbiAgICBoZWxwOiAnTWF4IGZpbGUgc2l6ZSBmb3IgdXBsb2FkcywgZGVmYXVsdHMgdG8gMjBtYicsXG4gICAgZGVmYXVsdDogJzIwbWInLFxuICB9LFxuICBtaWRkbGV3YXJlOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX01JRERMRVdBUkUnLFxuICAgIGhlbHA6ICdtaWRkbGV3YXJlIGZvciBleHByZXNzIHNlcnZlciwgY2FuIGJlIHN0cmluZyBvciBmdW5jdGlvbicsXG4gIH0sXG4gIG1vdW50R3JhcGhRTDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9NT1VOVF9HUkFQSFFMJyxcbiAgICBoZWxwOiAnTW91bnRzIHRoZSBHcmFwaFFMIGVuZHBvaW50JyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgbW91bnRQYXRoOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX01PVU5UX1BBVEgnLFxuICAgIGhlbHA6ICdNb3VudCBwYXRoIGZvciB0aGUgc2VydmVyLCBkZWZhdWx0cyB0byAvcGFyc2UnLFxuICAgIGRlZmF1bHQ6ICcvcGFyc2UnLFxuICB9LFxuICBtb3VudFBsYXlncm91bmQ6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfTU9VTlRfUExBWUdST1VORCcsXG4gICAgaGVscDogJ01vdW50cyB0aGUgR3JhcGhRTCBQbGF5Z3JvdW5kIC0gbmV2ZXIgdXNlIHRoaXMgb3B0aW9uIGluIHByb2R1Y3Rpb24nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBvYmplY3RJZFNpemU6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfT0JKRUNUX0lEX1NJWkUnLFxuICAgIGhlbHA6IFwiU2V0cyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gZ2VuZXJhdGVkIG9iamVjdCBpZCdzLCBkZWZhdWx0IDEwXCIsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm51bWJlclBhcnNlcignb2JqZWN0SWRTaXplJyksXG4gICAgZGVmYXVsdDogMTAsXG4gIH0sXG4gIHBhZ2VzOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBR0VTJyxcbiAgICBoZWxwOiAnVGhlIG9wdGlvbnMgZm9yIHBhZ2VzIHN1Y2ggYXMgcGFzc3dvcmQgcmVzZXQgYW5kIGVtYWlsIHZlcmlmaWNhdGlvbi4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5vYmplY3RQYXJzZXIsXG4gICAgdHlwZTogJ1BhZ2VzT3B0aW9ucycsXG4gICAgZGVmYXVsdDoge30sXG4gIH0sXG4gIHBhc3N3b3JkUG9saWN5OiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBU1NXT1JEX1BPTElDWScsXG4gICAgaGVscDogJ1RoZSBwYXNzd29yZCBwb2xpY3kgZm9yIGVuZm9yY2luZyBwYXNzd29yZCByZWxhdGVkIHJ1bGVzLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm9iamVjdFBhcnNlcixcbiAgICB0eXBlOiAnUGFzc3dvcmRQb2xpY3lPcHRpb25zJyxcbiAgfSxcbiAgcGxheWdyb3VuZFBhdGg6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfUExBWUdST1VORF9QQVRIJyxcbiAgICBoZWxwOiAnTW91bnQgcGF0aCBmb3IgdGhlIEdyYXBoUUwgUGxheWdyb3VuZCwgZGVmYXVsdHMgdG8gL3BsYXlncm91bmQnLFxuICAgIGRlZmF1bHQ6ICcvcGxheWdyb3VuZCcsXG4gIH0sXG4gIHBvcnQ6IHtcbiAgICBlbnY6ICdQT1JUJyxcbiAgICBoZWxwOiAnVGhlIHBvcnQgdG8gcnVuIHRoZSBQYXJzZVNlcnZlciwgZGVmYXVsdHMgdG8gMTMzNy4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5udW1iZXJQYXJzZXIoJ3BvcnQnKSxcbiAgICBkZWZhdWx0OiAxMzM3LFxuICB9LFxuICBwcmVzZXJ2ZUZpbGVOYW1lOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BSRVNFUlZFX0ZJTEVfTkFNRScsXG4gICAgaGVscDogJ0VuYWJsZSAob3IgZGlzYWJsZSkgdGhlIGFkZGl0aW9uIG9mIGEgdW5pcXVlIGhhc2ggdG8gdGhlIGZpbGUgbmFtZXMnLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBwcmV2ZW50TG9naW5XaXRoVW52ZXJpZmllZEVtYWlsOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BSRVZFTlRfTE9HSU5fV0lUSF9VTlZFUklGSUVEX0VNQUlMJyxcbiAgICBoZWxwOlxuICAgICAgJ1NldCB0byBgdHJ1ZWAgdG8gcHJldmVudCBhIHVzZXIgZnJvbSBsb2dnaW5nIGluIGlmIHRoZSBlbWFpbCBoYXMgbm90IHlldCBiZWVuIHZlcmlmaWVkIGFuZCBlbWFpbCB2ZXJpZmljYXRpb24gaXMgcmVxdWlyZWQuPGJyPjxicj5EZWZhdWx0IGlzIGBmYWxzZWAuPGJyPlJlcXVpcmVzIG9wdGlvbiBgdmVyaWZ5VXNlckVtYWlsczogdHJ1ZWAuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgcHJldmVudFNpZ251cFdpdGhVbnZlcmlmaWVkRW1haWw6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfUFJFVkVOVF9TSUdOVVBfV0lUSF9VTlZFUklGSUVEX0VNQUlMJyxcbiAgICBoZWxwOlxuICAgICAgXCJJZiBzZXQgdG8gYHRydWVgIGl0IHByZXZlbnRzIGEgdXNlciBmcm9tIHNpZ25pbmcgdXAgaWYgdGhlIGVtYWlsIGhhcyBub3QgeWV0IGJlZW4gdmVyaWZpZWQgYW5kIGVtYWlsIHZlcmlmaWNhdGlvbiBpcyByZXF1aXJlZC4gSW4gdGhhdCBjYXNlIHRoZSBzZXJ2ZXIgcmVzcG9uZHMgdG8gdGhlIHNpZ24tdXAgd2l0aCBIVFRQIHN0YXR1cyA0MDAgYW5kIGEgUGFyc2UgRXJyb3IgMjA1IGBFTUFJTF9OT1RfRk9VTkRgLiBJZiBzZXQgdG8gYGZhbHNlYCB0aGUgc2VydmVyIHJlc3BvbmRzIHdpdGggSFRUUCBzdGF0dXMgMjAwLCBhbmQgY2xpZW50IFNES3MgcmV0dXJuIGFuIHVuYXV0aGVudGljYXRlZCBQYXJzZSBVc2VyIHdpdGhvdXQgc2Vzc2lvbiB0b2tlbi4gSW4gdGhhdCBjYXNlIHN1YnNlcXVlbnQgcmVxdWVzdHMgZmFpbCB1bnRpbCB0aGUgdXNlcidzIGVtYWlsIGFkZHJlc3MgaXMgdmVyaWZpZWQuPGJyPjxicj5EZWZhdWx0IGlzIGBmYWxzZWAuPGJyPlJlcXVpcmVzIG9wdGlvbiBgdmVyaWZ5VXNlckVtYWlsczogdHJ1ZWAuXCIsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIHByb3RlY3RlZEZpZWxkczoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9QUk9URUNURURfRklFTERTJyxcbiAgICBoZWxwOiAnUHJvdGVjdGVkIGZpZWxkcyB0aGF0IHNob3VsZCBiZSB0cmVhdGVkIHdpdGggZXh0cmEgc2VjdXJpdHkgd2hlbiBmZXRjaGluZyBkZXRhaWxzLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm9iamVjdFBhcnNlcixcbiAgICBkZWZhdWx0OiB7XG4gICAgICBfVXNlcjoge1xuICAgICAgICAnKic6IFsnZW1haWwnXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbiAgcHVibGljU2VydmVyVVJMOiB7XG4gICAgZW52OiAnUEFSU0VfUFVCTElDX1NFUlZFUl9VUkwnLFxuICAgIGhlbHA6ICdQdWJsaWMgVVJMIHRvIHlvdXIgcGFyc2Ugc2VydmVyIHdpdGggaHR0cDovLyBvciBodHRwczovLy4nLFxuICB9LFxuICBwdXNoOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BVU0gnLFxuICAgIGhlbHA6XG4gICAgICAnQ29uZmlndXJhdGlvbiBmb3IgcHVzaCwgYXMgc3RyaW5naWZpZWQgSlNPTi4gU2VlIGh0dHA6Ly9kb2NzLnBhcnNlcGxhdGZvcm0ub3JnL3BhcnNlLXNlcnZlci9ndWlkZS8jcHVzaC1ub3RpZmljYXRpb25zJyxcbiAgICBhY3Rpb246IHBhcnNlcnMub2JqZWN0UGFyc2VyLFxuICB9LFxuICByYXRlTGltaXQ6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfUkFURV9MSU1JVCcsXG4gICAgaGVscDpcbiAgICAgIFwiT3B0aW9ucyB0byBsaW1pdCByZXBlYXRlZCByZXF1ZXN0cyB0byBQYXJzZSBTZXJ2ZXIgQVBJcy4gVGhpcyBjYW4gYmUgdXNlZCB0byBwcm90ZWN0IHNlbnNpdGl2ZSBlbmRwb2ludHMgc3VjaCBhcyBgL3JlcXVlc3RQYXNzd29yZFJlc2V0YCBmcm9tIGJydXRlLWZvcmNlIGF0dGFja3Mgb3IgUGFyc2UgU2VydmVyIGFzIGEgd2hvbGUgZnJvbSBkZW5pYWwtb2Ytc2VydmljZSAoRG9TKSBhdHRhY2tzLjxicj48YnI+XFx1MjEzOVxcdUZFMEYgTWluZCB0aGUgZm9sbG93aW5nIGxpbWl0YXRpb25zOjxicj4tIHJhdGUgbGltaXRzIGFwcGxpZWQgcGVyIElQIGFkZHJlc3M7IHRoaXMgbGltaXRzIHByb3RlY3Rpb24gYWdhaW5zdCBkaXN0cmlidXRlZCBkZW5pYWwtb2Ytc2VydmljZSAoRERvUykgYXR0YWNrcyB3aGVyZSBtYW55IHJlcXVlc3RzIGFyZSBjb21pbmcgZnJvbSB2YXJpb3VzIElQIGFkZHJlc3Nlczxicj4tIGlmIG11bHRpcGxlIFBhcnNlIFNlcnZlciBpbnN0YW5jZXMgYXJlIGJlaGluZCBhIGxvYWQgYmFsYW5jZXIgb3IgcmFuIGluIGEgY2x1c3RlciwgZWFjaCBpbnN0YW5jZSB3aWxsIGNhbGN1bGF0ZSBpdCdzIG93biByZXF1ZXN0IHJhdGVzLCBpbmRlcGVuZGVudCBmcm9tIG90aGVyIGluc3RhbmNlczsgdGhpcyBsaW1pdHMgdGhlIGFwcGxpY2FiaWxpdHkgb2YgdGhpcyBmZWF0dXJlIHdoZW4gdXNpbmcgYSBsb2FkIGJhbGFuY2VyIGFuZCBhbm90aGVyIHJhdGUgbGltaXRpbmcgc29sdXRpb24gdGhhdCB0YWtlcyByZXF1ZXN0cyBhY3Jvc3MgYWxsIGluc3RhbmNlcyBpbnRvIGFjY291bnQgbWF5IGJlIG1vcmUgc3VpdGFibGU8YnI+LSB0aGlzIGZlYXR1cmUgcHJvdmlkZXMgYmFzaWMgcHJvdGVjdGlvbiBhZ2FpbnN0IGRlbmlhbC1vZi1zZXJ2aWNlIGF0dGFja3MsIGJ1dCBhIG1vcmUgc29waGlzdGljYXRlZCBzb2x1dGlvbiB3b3JrcyBlYXJsaWVyIGluIHRoZSByZXF1ZXN0IGZsb3cgYW5kIHByZXZlbnRzIGEgbWFsaWNpb3VzIHJlcXVlc3RzIHRvIGV2ZW4gcmVhY2ggYSBzZXJ2ZXIgaW5zdGFuY2U7IGl0J3MgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGltcGxlbWVudCBhIHNvbHV0aW9uIGFjY29yZGluZyB0byBhcmNoaXRlY3R1cmUgYW5kIHVzZXIgY2FzZS5cIixcbiAgICBhY3Rpb246IHBhcnNlcnMuYXJyYXlQYXJzZXIsXG4gICAgdHlwZTogJ1JhdGVMaW1pdE9wdGlvbnNbXScsXG4gICAgZGVmYXVsdDogW10sXG4gIH0sXG4gIHJlYWRPbmx5TWFzdGVyS2V5OiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1JFQURfT05MWV9NQVNURVJfS0VZJyxcbiAgICBoZWxwOiAnUmVhZC1vbmx5IGtleSwgd2hpY2ggaGFzIHRoZSBzYW1lIGNhcGFiaWxpdGllcyBhcyBNYXN0ZXJLZXkgd2l0aG91dCB3cml0ZXMnLFxuICB9LFxuICByZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmU6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfUkVRVUVTVF9DT05URVhUX01JRERMRVdBUkUnLFxuICAgIGhlbHA6XG4gICAgICAnT3B0aW9ucyB0byBjdXN0b21pemUgdGhlIHJlcXVlc3QgY29udGV4dCB1c2luZyBpbnZlcnNpb24gb2YgY29udHJvbC9kZXBlbmRlbmN5IGluamVjdGlvbi4nLFxuICB9LFxuICByZXF1ZXN0S2V5d29yZERlbnlsaXN0OiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1JFUVVFU1RfS0VZV09SRF9ERU5ZTElTVCcsXG4gICAgaGVscDpcbiAgICAgICdBbiBhcnJheSBvZiBrZXlzIGFuZCB2YWx1ZXMgdGhhdCBhcmUgcHJvaGliaXRlZCBpbiBkYXRhYmFzZSByZWFkIGFuZCB3cml0ZSByZXF1ZXN0cyB0byBwcmV2ZW50IHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEl0IGlzIHBvc3NpYmxlIHRvIHNwZWNpZnkgb25seSBhIGtleSAoYHtcImtleVwiOlwiLi4uXCJ9YCksIG9ubHkgYSB2YWx1ZSAoYHtcInZhbHVlXCI6XCIuLi5cIn1gKSBvciBhIGtleS12YWx1ZSBwYWlyIChge1wia2V5XCI6XCIuLi5cIixcInZhbHVlXCI6XCIuLi5cIn1gKS4gVGhlIHNwZWNpZmljYXRpb24gY2FuIHVzZSB0aGUgZm9sbG93aW5nIHR5cGVzOiBgYm9vbGVhbmAsIGBudW1lcmljYCBvciBgc3RyaW5nYCwgd2hlcmUgYHN0cmluZ2Agd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhIHJlZ2V4IG5vdGF0aW9uLiBSZXF1ZXN0IGRhdGEgaXMgZGVlcC1zY2FubmVkIGZvciBtYXRjaGluZyBkZWZpbml0aW9ucyB0byBkZXRlY3QgYWxzbyBhbnkgbmVzdGVkIG9jY3VycmVuY2VzLiBEZWZhdWx0cyBhcmUgcGF0dGVybnMgdGhhdCBhcmUgbGlrZWx5IHRvIGJlIHVzZWQgaW4gbWFsaWNpb3VzIHJlcXVlc3RzLiBTZXR0aW5nIHRoaXMgb3B0aW9uIHdpbGwgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcGF0dGVybnMuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYXJyYXlQYXJzZXIsXG4gICAgZGVmYXVsdDogW1xuICAgICAge1xuICAgICAgICBrZXk6ICdfYnNvbnR5cGUnLFxuICAgICAgICB2YWx1ZTogJ0NvZGUnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnY29uc3RydWN0b3InLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnX19wcm90b19fJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcbiAgcmVzdEFQSUtleToge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9SRVNUX0FQSV9LRVknLFxuICAgIGhlbHA6ICdLZXkgZm9yIFJFU1QgY2FsbHMnLFxuICB9LFxuICByZXZva2VTZXNzaW9uT25QYXNzd29yZFJlc2V0OiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1JFVk9LRV9TRVNTSU9OX09OX1BBU1NXT1JEX1JFU0VUJyxcbiAgICBoZWxwOlxuICAgICAgXCJXaGVuIGEgdXNlciBjaGFuZ2VzIHRoZWlyIHBhc3N3b3JkLCBlaXRoZXIgdGhyb3VnaCB0aGUgcmVzZXQgcGFzc3dvcmQgZW1haWwgb3Igd2hpbGUgbG9nZ2VkIGluLCBhbGwgc2Vzc2lvbnMgYXJlIHJldm9rZWQgaWYgdGhpcyBpcyB0cnVlLiBTZXQgdG8gZmFsc2UgaWYgeW91IGRvbid0IHdhbnQgdG8gcmV2b2tlIHNlc3Npb25zLlwiLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIHNjaGVkdWxlZFB1c2g6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfU0NIRURVTEVEX1BVU0gnLFxuICAgIGhlbHA6ICdDb25maWd1cmF0aW9uIGZvciBwdXNoIHNjaGVkdWxpbmcsIGRlZmF1bHRzIHRvIGZhbHNlLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIHNjaGVtYToge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9TQ0hFTUEnLFxuICAgIGhlbHA6ICdEZWZpbmVkIHNjaGVtYScsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm9iamVjdFBhcnNlcixcbiAgICB0eXBlOiAnU2NoZW1hT3B0aW9ucycsXG4gIH0sXG4gIHNlY3VyaXR5OiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1NFQ1VSSVRZJyxcbiAgICBoZWxwOiAnVGhlIHNlY3VyaXR5IG9wdGlvbnMgdG8gaWRlbnRpZnkgYW5kIHJlcG9ydCB3ZWFrIHNlY3VyaXR5IHNldHRpbmdzLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm9iamVjdFBhcnNlcixcbiAgICB0eXBlOiAnU2VjdXJpdHlPcHRpb25zJyxcbiAgICBkZWZhdWx0OiB7fSxcbiAgfSxcbiAgc2VuZFVzZXJFbWFpbFZlcmlmaWNhdGlvbjoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9TRU5EX1VTRVJfRU1BSUxfVkVSSUZJQ0FUSU9OJyxcbiAgICBoZWxwOlxuICAgICAgJ1NldCB0byBgZmFsc2VgIHRvIHByZXZlbnQgc2VuZGluZyBvZiB2ZXJpZmljYXRpb24gZW1haWwuIFN1cHBvcnRzIGEgZnVuY3Rpb24gd2l0aCBhIHJldHVybiB2YWx1ZSBvZiBgdHJ1ZWAgb3IgYGZhbHNlYCBmb3IgY29uZGl0aW9uYWwgZW1haWwgc2VuZGluZy48YnI+PGJyPkRlZmF1bHQgaXMgYHRydWVgLjxicj4nLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIHNlcnZlckNsb3NlQ29tcGxldGU6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfU0VSVkVSX0NMT1NFX0NPTVBMRVRFJyxcbiAgICBoZWxwOiAnQ2FsbGJhY2sgd2hlbiBzZXJ2ZXIgaGFzIGNsb3NlZCcsXG4gIH0sXG4gIHNlcnZlclVSTDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9VUkwnLFxuICAgIGhlbHA6ICdVUkwgdG8geW91ciBwYXJzZSBzZXJ2ZXIgd2l0aCBodHRwOi8vIG9yIGh0dHBzOi8vLicsXG4gICAgcmVxdWlyZWQ6IHRydWUsXG4gIH0sXG4gIHNlc3Npb25MZW5ndGg6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfU0VTU0lPTl9MRU5HVEgnLFxuICAgIGhlbHA6ICdTZXNzaW9uIGR1cmF0aW9uLCBpbiBzZWNvbmRzLCBkZWZhdWx0cyB0byAxIHllYXInLFxuICAgIGFjdGlvbjogcGFyc2Vycy5udW1iZXJQYXJzZXIoJ3Nlc3Npb25MZW5ndGgnKSxcbiAgICBkZWZhdWx0OiAzMTUzNjAwMCxcbiAgfSxcbiAgc2lsZW50OiB7XG4gICAgZW52OiAnU0lMRU5UJyxcbiAgICBoZWxwOiAnRGlzYWJsZXMgY29uc29sZSBvdXRwdXQnLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICB9LFxuICBzdGFydExpdmVRdWVyeVNlcnZlcjoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9TVEFSVF9MSVZFX1FVRVJZX1NFUlZFUicsXG4gICAgaGVscDogJ1N0YXJ0cyB0aGUgbGl2ZVF1ZXJ5IHNlcnZlcicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gIH0sXG4gIHRydXN0UHJveHk6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfVFJVU1RfUFJPWFknLFxuICAgIGhlbHA6XG4gICAgICAnVGhlIHRydXN0IHByb3h5IHNldHRpbmdzLiBJdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3Qgc2V0dXAgb2YgdGhlIHJldmVyc2UgcHJveHksIHNpbmNlIHRoaXMgc2V0dGluZyB3aWxsIHRydXN0IHZhbHVlcyBwcm92aWRlZCBpbiB0aGUgUGFyc2UgU2VydmVyIEFQSSByZXF1ZXN0LiBTZWUgdGhlIDxhIGhyZWY9XCJodHRwczovL2V4cHJlc3Nqcy5jb20vZW4vZ3VpZGUvYmVoaW5kLXByb3hpZXMuaHRtbFwiPmV4cHJlc3MgdHJ1c3QgcHJveHkgc2V0dGluZ3M8L2E+IGRvY3VtZW50YXRpb24uIERlZmF1bHRzIHRvIGBmYWxzZWAuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMub2JqZWN0UGFyc2VyLFxuICAgIGRlZmF1bHQ6IFtdLFxuICB9LFxuICB1c2VyU2Vuc2l0aXZlRmllbGRzOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1VTRVJfU0VOU0lUSVZFX0ZJRUxEUycsXG4gICAgaGVscDpcbiAgICAgICdQZXJzb25hbGx5IGlkZW50aWZpYWJsZSBpbmZvcm1hdGlvbiBmaWVsZHMgaW4gdGhlIHVzZXIgdGFibGUgdGhlIHNob3VsZCBiZSByZW1vdmVkIGZvciBub24tYXV0aG9yaXplZCB1c2Vycy4gRGVwcmVjYXRlZCBAc2VlIHByb3RlY3RlZEZpZWxkcycsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmFycmF5UGFyc2VyLFxuICB9LFxuICB2ZXJib3NlOiB7XG4gICAgZW52OiAnVkVSQk9TRScsXG4gICAgaGVscDogJ1NldCB0aGUgbG9nZ2luZyB0byB2ZXJib3NlJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgfSxcbiAgdmVyaWZ5VXNlckVtYWlsczoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9WRVJJRllfVVNFUl9FTUFJTFMnLFxuICAgIGhlbHA6XG4gICAgICAnU2V0IHRvIGB0cnVlYCB0byByZXF1aXJlIHVzZXJzIHRvIHZlcmlmeSB0aGVpciBlbWFpbCBhZGRyZXNzIHRvIGNvbXBsZXRlIHRoZSBzaWduLXVwIHByb2Nlc3MuIFN1cHBvcnRzIGEgZnVuY3Rpb24gd2l0aCBhIHJldHVybiB2YWx1ZSBvZiBgdHJ1ZWAgb3IgYGZhbHNlYCBmb3IgY29uZGl0aW9uYWwgdmVyaWZpY2F0aW9uLjxicj48YnI+RGVmYXVsdCBpcyBgZmFsc2VgLicsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIHdlYmhvb2tLZXk6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfV0VCSE9PS19LRVknLFxuICAgIGhlbHA6ICdLZXkgc2VudCB3aXRoIG91dGdvaW5nIHdlYmhvb2sgY2FsbHMnLFxuICB9LFxufTtcbm1vZHVsZS5leHBvcnRzLlJhdGVMaW1pdE9wdGlvbnMgPSB7XG4gIGVycm9yUmVzcG9uc2VNZXNzYWdlOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1JBVEVfTElNSVRfRVJST1JfUkVTUE9OU0VfTUVTU0FHRScsXG4gICAgaGVscDpcbiAgICAgICdUaGUgZXJyb3IgbWVzc2FnZSB0aGF0IHNob3VsZCBiZSByZXR1cm5lZCBpbiB0aGUgYm9keSBvZiB0aGUgSFRUUCA0MjkgcmVzcG9uc2Ugd2hlbiB0aGUgcmF0ZSBsaW1pdCBpcyBoaXQuIERlZmF1bHQgaXMgYFRvbyBtYW55IHJlcXVlc3RzLmAuJyxcbiAgICBkZWZhdWx0OiAnVG9vIG1hbnkgcmVxdWVzdHMuJyxcbiAgfSxcbiAgaW5jbHVkZUludGVybmFsUmVxdWVzdHM6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfUkFURV9MSU1JVF9JTkNMVURFX0lOVEVSTkFMX1JFUVVFU1RTJyxcbiAgICBoZWxwOlxuICAgICAgJ09wdGlvbmFsLCBpZiBgdHJ1ZWAgdGhlIHJhdGUgbGltaXQgd2lsbCBhbHNvIGFwcGx5IHRvIHJlcXVlc3RzIHRoYXQgYXJlIG1hZGUgaW4gYnkgQ2xvdWQgQ29kZSwgZGVmYXVsdCBpcyBgZmFsc2VgLiBOb3RlIHRoYXQgYSBwdWJsaWMgQ2xvdWQgQ29kZSBmdW5jdGlvbiB0aGF0IHRyaWdnZXJzIGludGVybmFsIHJlcXVlc3RzIG1heSBjaXJjdW12ZW50IHJhdGUgbGltaXRpbmcgYW5kIGJlIHZ1bG5lcmFibGUgdG8gYXR0YWNrcy4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBpbmNsdWRlTWFzdGVyS2V5OiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1JBVEVfTElNSVRfSU5DTFVERV9NQVNURVJfS0VZJyxcbiAgICBoZWxwOlxuICAgICAgJ09wdGlvbmFsLCBpZiBgdHJ1ZWAgdGhlIHJhdGUgbGltaXQgd2lsbCBhbHNvIGFwcGx5IHRvIHJlcXVlc3RzIHVzaW5nIHRoZSBgbWFzdGVyS2V5YCwgZGVmYXVsdCBpcyBgZmFsc2VgLiBOb3RlIHRoYXQgYSBwdWJsaWMgQ2xvdWQgQ29kZSBmdW5jdGlvbiB0aGF0IHRyaWdnZXJzIGludGVybmFsIHJlcXVlc3RzIHVzaW5nIHRoZSBgbWFzdGVyS2V5YCBtYXkgY2lyY3VtdmVudCByYXRlIGxpbWl0aW5nIGFuZCBiZSB2dWxuZXJhYmxlIHRvIGF0dGFja3MuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgcmVkaXNVcmw6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfUkFURV9MSU1JVF9SRURJU19VUkwnLFxuICAgIGhlbHA6XG4gICAgICAnT3B0aW9uYWwsIHRoZSBVUkwgb2YgdGhlIFJlZGlzIHNlcnZlciB0byBzdG9yZSByYXRlIGxpbWl0IGRhdGEuIFRoaXMgYWxsb3dzIHRvIHJhdGUgbGltaXQgcmVxdWVzdHMgZm9yIG11bHRpcGxlIHNlcnZlcnMgYnkgY2FsY3VsYXRpbmcgdGhlIHN1bSBvZiBhbGwgcmVxdWVzdHMgYWNyb3NzIGFsbCBzZXJ2ZXJzLiBUaGlzIGlzIHVzZWZ1bCBpZiBtdWx0aXBsZSBzZXJ2ZXJzIGFyZSBwcm9jZXNzaW5nIHJlcXVlc3RzIGJlaGluZCBhIGxvYWQgYmFsYW5jZXIuIEZvciBleGFtcGxlLCB0aGUgbGltaXQgb2YgMTAgcmVxdWVzdHMgaXMgcmVhY2hlZCBpZiBlYWNoIG9mIDIgc2VydmVycyBwcm9jZXNzZWQgNSByZXF1ZXN0cy4nLFxuICB9LFxuICByZXF1ZXN0Q291bnQ6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfUkFURV9MSU1JVF9SRVFVRVNUX0NPVU5UJyxcbiAgICBoZWxwOlxuICAgICAgJ1RoZSBudW1iZXIgb2YgcmVxdWVzdHMgdGhhdCBjYW4gYmUgbWFkZSBwZXIgSVAgYWRkcmVzcyB3aXRoaW4gdGhlIHRpbWUgd2luZG93IHNldCBpbiBgcmVxdWVzdFRpbWVXaW5kb3dgIGJlZm9yZSB0aGUgcmF0ZSBsaW1pdCBpcyBhcHBsaWVkLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm51bWJlclBhcnNlcigncmVxdWVzdENvdW50JyksXG4gIH0sXG4gIHJlcXVlc3RNZXRob2RzOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1JBVEVfTElNSVRfUkVRVUVTVF9NRVRIT0RTJyxcbiAgICBoZWxwOlxuICAgICAgJ09wdGlvbmFsLCB0aGUgSFRUUCByZXF1ZXN0IG1ldGhvZHMgdG8gd2hpY2ggdGhlIHJhdGUgbGltaXQgc2hvdWxkIGJlIGFwcGxpZWQsIGRlZmF1bHQgaXMgYWxsIG1ldGhvZHMuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYXJyYXlQYXJzZXIsXG4gIH0sXG4gIHJlcXVlc3RQYXRoOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1JBVEVfTElNSVRfUkVRVUVTVF9QQVRIJyxcbiAgICBoZWxwOlxuICAgICAgJ1RoZSBwYXRoIG9mIHRoZSBBUEkgcm91dGUgdG8gYmUgcmF0ZSBsaW1pdGVkLiBSb3V0ZSBwYXRocywgaW4gY29tYmluYXRpb24gd2l0aCBhIHJlcXVlc3QgbWV0aG9kLCBkZWZpbmUgdGhlIGVuZHBvaW50cyBhdCB3aGljaCByZXF1ZXN0cyBjYW4gYmUgbWFkZS4gUm91dGUgcGF0aHMgY2FuIGJlIHN0cmluZ3MsIHN0cmluZyBwYXR0ZXJucywgb3IgcmVndWxhciBleHByZXNzaW9uLiBTZWU6IGh0dHBzOi8vZXhwcmVzc2pzLmNvbS9lbi9ndWlkZS9yb3V0aW5nLmh0bWwnLFxuICAgIHJlcXVpcmVkOiB0cnVlLFxuICB9LFxuICByZXF1ZXN0VGltZVdpbmRvdzoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9SQVRFX0xJTUlUX1JFUVVFU1RfVElNRV9XSU5ET1cnLFxuICAgIGhlbHA6XG4gICAgICAnVGhlIHdpbmRvdyBvZiB0aW1lIGluIG1pbGxpc2Vjb25kcyB3aXRoaW4gd2hpY2ggdGhlIG51bWJlciBvZiByZXF1ZXN0cyBzZXQgaW4gYHJlcXVlc3RDb3VudGAgY2FuIGJlIG1hZGUgYmVmb3JlIHRoZSByYXRlIGxpbWl0IGlzIGFwcGxpZWQuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMubnVtYmVyUGFyc2VyKCdyZXF1ZXN0VGltZVdpbmRvdycpLFxuICB9LFxuICB6b25lOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1JBVEVfTElNSVRfWk9ORScsXG4gICAgaGVscDpcbiAgICAgIFwiVGhlIHR5cGUgb2YgcmF0ZSBsaW1pdCB0byBhcHBseS4gVGhlIGZvbGxvd2luZyB0eXBlcyBhcmUgc3VwcG9ydGVkOjxicj48YnI+LSBgZ2xvYmFsYDogcmF0ZSBsaW1pdCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIHJlcXVlc3RzIG1hZGUgYnkgYWxsIHVzZXJzIDxicj4tIGBpcGA6IHJhdGUgbGltaXQgYmFzZWQgb24gdGhlIElQIGFkZHJlc3Mgb2YgdGhlIHJlcXVlc3QgPGJyPi0gYHVzZXJgOiByYXRlIGxpbWl0IGJhc2VkIG9uIHRoZSB1c2VyIElEIG9mIHRoZSByZXF1ZXN0IDxicj4tIGBzZXNzaW9uYDogcmF0ZSBsaW1pdCBiYXNlZCBvbiB0aGUgc2Vzc2lvbiB0b2tlbiBvZiB0aGUgcmVxdWVzdCA8YnI+PGJyPjxicj46ZGVmYXVsdDogJ2lwJ1wiLFxuICB9LFxufTtcbm1vZHVsZS5leHBvcnRzLlNlY3VyaXR5T3B0aW9ucyA9IHtcbiAgY2hlY2tHcm91cHM6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfU0VDVVJJVFlfQ0hFQ0tfR1JPVVBTJyxcbiAgICBoZWxwOlxuICAgICAgJ1RoZSBzZWN1cml0eSBjaGVjayBncm91cHMgdG8gcnVuLiBUaGlzIGFsbG93cyB0byBhZGQgY3VzdG9tIHNlY3VyaXR5IGNoZWNrcyBvciBvdmVycmlkZSBleGlzdGluZyBvbmVzLiBEZWZhdWx0IGFyZSB0aGUgZ3JvdXBzIGRlZmluZWQgaW4gYENoZWNrR3JvdXBzLmpzYC4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5hcnJheVBhcnNlcixcbiAgfSxcbiAgZW5hYmxlQ2hlY2s6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfU0VDVVJJVFlfRU5BQkxFX0NIRUNLJyxcbiAgICBoZWxwOiAnSXMgdHJ1ZSBpZiBQYXJzZSBTZXJ2ZXIgc2hvdWxkIGNoZWNrIGZvciB3ZWFrIHNlY3VyaXR5IHNldHRpbmdzLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGVuYWJsZUNoZWNrTG9nOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1NFQ1VSSVRZX0VOQUJMRV9DSEVDS19MT0cnLFxuICAgIGhlbHA6XG4gICAgICAnSXMgdHJ1ZSBpZiB0aGUgc2VjdXJpdHkgY2hlY2sgcmVwb3J0IHNob3VsZCBiZSB3cml0dGVuIHRvIGxvZ3MuIFRoaXMgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCB0ZW1wb3JhcmlseSB0byBub3QgZXhwb3NlIHdlYWsgc2VjdXJpdHkgc2V0dGluZ3MgaW4gbG9ncy4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxufTtcbm1vZHVsZS5leHBvcnRzLlBhZ2VzT3B0aW9ucyA9IHtcbiAgY3VzdG9tUm91dGVzOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBR0VTX0NVU1RPTV9ST1VURVMnLFxuICAgIGhlbHA6ICdUaGUgY3VzdG9tIHJvdXRlcy4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5hcnJheVBhcnNlcixcbiAgICB0eXBlOiAnUGFnZXNSb3V0ZVtdJyxcbiAgICBkZWZhdWx0OiBbXSxcbiAgfSxcbiAgY3VzdG9tVXJsczoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9QQUdFU19DVVNUT01fVVJMUycsXG4gICAgaGVscDogJ1RoZSBVUkxzIHRvIHRoZSBjdXN0b20gcGFnZXMuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMub2JqZWN0UGFyc2VyLFxuICAgIHR5cGU6ICdQYWdlc0N1c3RvbVVybHNPcHRpb25zJyxcbiAgICBkZWZhdWx0OiB7fSxcbiAgfSxcbiAgZW5hYmxlTG9jYWxpemF0aW9uOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBR0VTX0VOQUJMRV9MT0NBTElaQVRJT04nLFxuICAgIGhlbHA6ICdJcyB0cnVlIGlmIHBhZ2VzIHNob3VsZCBiZSBsb2NhbGl6ZWQ7IHRoaXMgaGFzIG5vIGVmZmVjdCBvbiBjdXN0b20gcGFnZSByZWRpcmVjdHMuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgZW5hYmxlUm91dGVyOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBR0VTX0VOQUJMRV9ST1VURVInLFxuICAgIGhlbHA6XG4gICAgICAnSXMgdHJ1ZSBpZiB0aGUgcGFnZXMgcm91dGVyIHNob3VsZCBiZSBlbmFibGVkOyB0aGlzIGlzIHJlcXVpcmVkIGZvciBhbnkgb2YgdGhlIHBhZ2VzIG9wdGlvbnMgdG8gdGFrZSBlZmZlY3QuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgZm9yY2VSZWRpcmVjdDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9QQUdFU19GT1JDRV9SRURJUkVDVCcsXG4gICAgaGVscDpcbiAgICAgICdJcyB0cnVlIGlmIHJlc3BvbnNlcyBzaG91bGQgYWx3YXlzIGJlIHJlZGlyZWN0cyBhbmQgbmV2ZXIgY29udGVudCwgZmFsc2UgaWYgdGhlIHJlc3BvbnNlIHR5cGUgc2hvdWxkIGRlcGVuZCBvbiB0aGUgcmVxdWVzdCB0eXBlIChHRVQgcmVxdWVzdCAtPiBjb250ZW50IHJlc3BvbnNlOyBQT1NUIHJlcXVlc3QgLT4gcmVkaXJlY3QgcmVzcG9uc2UpLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGxvY2FsaXphdGlvbkZhbGxiYWNrTG9jYWxlOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBR0VTX0xPQ0FMSVpBVElPTl9GQUxMQkFDS19MT0NBTEUnLFxuICAgIGhlbHA6XG4gICAgICAnVGhlIGZhbGxiYWNrIGxvY2FsZSBmb3IgbG9jYWxpemF0aW9uIGlmIG5vIG1hdGNoaW5nIHRyYW5zbGF0aW9uIGlzIHByb3ZpZGVkIGZvciB0aGUgZ2l2ZW4gbG9jYWxlLiBUaGlzIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiBwcm92aWRpbmcgdHJhbnNsYXRpb24gcmVzb3VyY2VzIHZpYSBKU09OIGZpbGUuJyxcbiAgICBkZWZhdWx0OiAnZW4nLFxuICB9LFxuICBsb2NhbGl6YXRpb25Kc29uUGF0aDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9QQUdFU19MT0NBTElaQVRJT05fSlNPTl9QQVRIJyxcbiAgICBoZWxwOlxuICAgICAgJ1RoZSBwYXRoIHRvIHRoZSBKU09OIGZpbGUgZm9yIGxvY2FsaXphdGlvbjsgdGhlIHRyYW5zbGF0aW9ucyB3aWxsIGJlIHVzZWQgdG8gZmlsbCB0ZW1wbGF0ZSBwbGFjZWhvbGRlcnMgYWNjb3JkaW5nIHRvIHRoZSBsb2NhbGUuJyxcbiAgfSxcbiAgcGFnZXNFbmRwb2ludDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9QQUdFU19QQUdFU19FTkRQT0lOVCcsXG4gICAgaGVscDogXCJUaGUgQVBJIGVuZHBvaW50IGZvciB0aGUgcGFnZXMuIERlZmF1bHQgaXMgJ2FwcHMnLlwiLFxuICAgIGRlZmF1bHQ6ICdhcHBzJyxcbiAgfSxcbiAgcGFnZXNQYXRoOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBR0VTX1BBR0VTX1BBVEgnLFxuICAgIGhlbHA6XG4gICAgICBcIlRoZSBwYXRoIHRvIHRoZSBwYWdlcyBkaXJlY3Rvcnk7IHRoaXMgYWxzbyBkZWZpbmVzIHdoZXJlIHRoZSBzdGF0aWMgZW5kcG9pbnQgJy9hcHBzJyBwb2ludHMgdG8uIERlZmF1bHQgaXMgdGhlICcuL3B1YmxpYy8nIGRpcmVjdG9yeS5cIixcbiAgICBkZWZhdWx0OiAnLi9wdWJsaWMnLFxuICB9LFxuICBwbGFjZWhvbGRlcnM6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfUEFHRVNfUExBQ0VIT0xERVJTJyxcbiAgICBoZWxwOlxuICAgICAgJ1RoZSBwbGFjZWhvbGRlciBrZXlzIGFuZCB2YWx1ZXMgd2hpY2ggd2lsbCBiZSBmaWxsZWQgaW4gcGFnZXM7IHRoaXMgY2FuIGJlIGEgc2ltcGxlIG9iamVjdCBvciBhIGNhbGxiYWNrIGZ1bmN0aW9uLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm9iamVjdFBhcnNlcixcbiAgICBkZWZhdWx0OiB7fSxcbiAgfSxcbn07XG5tb2R1bGUuZXhwb3J0cy5QYWdlc1JvdXRlID0ge1xuICBoYW5kbGVyOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBR0VTX1JPVVRFX0hBTkRMRVInLFxuICAgIGhlbHA6ICdUaGUgcm91dGUgaGFuZGxlciB0aGF0IGlzIGFuIGFzeW5jIGZ1bmN0aW9uLicsXG4gICAgcmVxdWlyZWQ6IHRydWUsXG4gIH0sXG4gIG1ldGhvZDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9QQUdFU19ST1VURV9NRVRIT0QnLFxuICAgIGhlbHA6IFwiVGhlIHJvdXRlIG1ldGhvZCwgZS5nLiAnR0VUJyBvciAnUE9TVCcuXCIsXG4gICAgcmVxdWlyZWQ6IHRydWUsXG4gIH0sXG4gIHBhdGg6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfUEFHRVNfUk9VVEVfUEFUSCcsXG4gICAgaGVscDogJ1RoZSByb3V0ZSBwYXRoLicsXG4gICAgcmVxdWlyZWQ6IHRydWUsXG4gIH0sXG59O1xubW9kdWxlLmV4cG9ydHMuUGFnZXNDdXN0b21VcmxzT3B0aW9ucyA9IHtcbiAgZW1haWxWZXJpZmljYXRpb25MaW5rRXhwaXJlZDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9QQUdFU19DVVNUT01fVVJMX0VNQUlMX1ZFUklGSUNBVElPTl9MSU5LX0VYUElSRUQnLFxuICAgIGhlbHA6ICdUaGUgVVJMIHRvIHRoZSBjdXN0b20gcGFnZSBmb3IgZW1haWwgdmVyaWZpY2F0aW9uIC0+IGxpbmsgZXhwaXJlZC4nLFxuICB9LFxuICBlbWFpbFZlcmlmaWNhdGlvbkxpbmtJbnZhbGlkOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBR0VTX0NVU1RPTV9VUkxfRU1BSUxfVkVSSUZJQ0FUSU9OX0xJTktfSU5WQUxJRCcsXG4gICAgaGVscDogJ1RoZSBVUkwgdG8gdGhlIGN1c3RvbSBwYWdlIGZvciBlbWFpbCB2ZXJpZmljYXRpb24gLT4gbGluayBpbnZhbGlkLicsXG4gIH0sXG4gIGVtYWlsVmVyaWZpY2F0aW9uU2VuZEZhaWw6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfUEFHRVNfQ1VTVE9NX1VSTF9FTUFJTF9WRVJJRklDQVRJT05fU0VORF9GQUlMJyxcbiAgICBoZWxwOiAnVGhlIFVSTCB0byB0aGUgY3VzdG9tIHBhZ2UgZm9yIGVtYWlsIHZlcmlmaWNhdGlvbiAtPiBsaW5rIHNlbmQgZmFpbC4nLFxuICB9LFxuICBlbWFpbFZlcmlmaWNhdGlvblNlbmRTdWNjZXNzOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBR0VTX0NVU1RPTV9VUkxfRU1BSUxfVkVSSUZJQ0FUSU9OX1NFTkRfU1VDQ0VTUycsXG4gICAgaGVscDogJ1RoZSBVUkwgdG8gdGhlIGN1c3RvbSBwYWdlIGZvciBlbWFpbCB2ZXJpZmljYXRpb24gLT4gcmVzZW5kIGxpbmsgLT4gc3VjY2Vzcy4nLFxuICB9LFxuICBlbWFpbFZlcmlmaWNhdGlvblN1Y2Nlc3M6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfUEFHRVNfQ1VTVE9NX1VSTF9FTUFJTF9WRVJJRklDQVRJT05fU1VDQ0VTUycsXG4gICAgaGVscDogJ1RoZSBVUkwgdG8gdGhlIGN1c3RvbSBwYWdlIGZvciBlbWFpbCB2ZXJpZmljYXRpb24gLT4gc3VjY2Vzcy4nLFxuICB9LFxuICBwYXNzd29yZFJlc2V0OiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBR0VTX0NVU1RPTV9VUkxfUEFTU1dPUkRfUkVTRVQnLFxuICAgIGhlbHA6ICdUaGUgVVJMIHRvIHRoZSBjdXN0b20gcGFnZSBmb3IgcGFzc3dvcmQgcmVzZXQuJyxcbiAgfSxcbiAgcGFzc3dvcmRSZXNldExpbmtJbnZhbGlkOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBR0VTX0NVU1RPTV9VUkxfUEFTU1dPUkRfUkVTRVRfTElOS19JTlZBTElEJyxcbiAgICBoZWxwOiAnVGhlIFVSTCB0byB0aGUgY3VzdG9tIHBhZ2UgZm9yIHBhc3N3b3JkIHJlc2V0IC0+IGxpbmsgaW52YWxpZC4nLFxuICB9LFxuICBwYXNzd29yZFJlc2V0U3VjY2Vzczoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9QQUdFU19DVVNUT01fVVJMX1BBU1NXT1JEX1JFU0VUX1NVQ0NFU1MnLFxuICAgIGhlbHA6ICdUaGUgVVJMIHRvIHRoZSBjdXN0b20gcGFnZSBmb3IgcGFzc3dvcmQgcmVzZXQgLT4gc3VjY2Vzcy4nLFxuICB9LFxufTtcbm1vZHVsZS5leHBvcnRzLkN1c3RvbVBhZ2VzT3B0aW9ucyA9IHtcbiAgY2hvb3NlUGFzc3dvcmQ6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQ1VTVE9NX1BBR0VTX0NIT09TRV9QQVNTV09SRCcsXG4gICAgaGVscDogJ2Nob29zZSBwYXNzd29yZCBwYWdlIHBhdGgnLFxuICB9LFxuICBleHBpcmVkVmVyaWZpY2F0aW9uTGluazoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9DVVNUT01fUEFHRVNfRVhQSVJFRF9WRVJJRklDQVRJT05fTElOSycsXG4gICAgaGVscDogJ2V4cGlyZWQgdmVyaWZpY2F0aW9uIGxpbmsgcGFnZSBwYXRoJyxcbiAgfSxcbiAgaW52YWxpZExpbms6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQ1VTVE9NX1BBR0VTX0lOVkFMSURfTElOSycsXG4gICAgaGVscDogJ2ludmFsaWQgbGluayBwYWdlIHBhdGgnLFxuICB9LFxuICBpbnZhbGlkUGFzc3dvcmRSZXNldExpbms6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQ1VTVE9NX1BBR0VTX0lOVkFMSURfUEFTU1dPUkRfUkVTRVRfTElOSycsXG4gICAgaGVscDogJ2ludmFsaWQgcGFzc3dvcmQgcmVzZXQgbGluayBwYWdlIHBhdGgnLFxuICB9LFxuICBpbnZhbGlkVmVyaWZpY2F0aW9uTGluazoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9DVVNUT01fUEFHRVNfSU5WQUxJRF9WRVJJRklDQVRJT05fTElOSycsXG4gICAgaGVscDogJ2ludmFsaWQgdmVyaWZpY2F0aW9uIGxpbmsgcGFnZSBwYXRoJyxcbiAgfSxcbiAgbGlua1NlbmRGYWlsOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0NVU1RPTV9QQUdFU19MSU5LX1NFTkRfRkFJTCcsXG4gICAgaGVscDogJ3ZlcmlmaWNhdGlvbiBsaW5rIHNlbmQgZmFpbCBwYWdlIHBhdGgnLFxuICB9LFxuICBsaW5rU2VuZFN1Y2Nlc3M6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQ1VTVE9NX1BBR0VTX0xJTktfU0VORF9TVUNDRVNTJyxcbiAgICBoZWxwOiAndmVyaWZpY2F0aW9uIGxpbmsgc2VuZCBzdWNjZXNzIHBhZ2UgcGF0aCcsXG4gIH0sXG4gIHBhcnNlRnJhbWVVUkw6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQ1VTVE9NX1BBR0VTX1BBUlNFX0ZSQU1FX1VSTCcsXG4gICAgaGVscDogJ2ZvciBtYXNraW5nIHVzZXItZmFjaW5nIHBhZ2VzJyxcbiAgfSxcbiAgcGFzc3dvcmRSZXNldFN1Y2Nlc3M6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQ1VTVE9NX1BBR0VTX1BBU1NXT1JEX1JFU0VUX1NVQ0NFU1MnLFxuICAgIGhlbHA6ICdwYXNzd29yZCByZXNldCBzdWNjZXNzIHBhZ2UgcGF0aCcsXG4gIH0sXG4gIHZlcmlmeUVtYWlsU3VjY2Vzczoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9DVVNUT01fUEFHRVNfVkVSSUZZX0VNQUlMX1NVQ0NFU1MnLFxuICAgIGhlbHA6ICd2ZXJpZnkgZW1haWwgc3VjY2VzcyBwYWdlIHBhdGgnLFxuICB9LFxufTtcbm1vZHVsZS5leHBvcnRzLkxpdmVRdWVyeU9wdGlvbnMgPSB7XG4gIGNsYXNzTmFtZXM6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfTElWRVFVRVJZX0NMQVNTTkFNRVMnLFxuICAgIGhlbHA6IFwicGFyc2Utc2VydmVyJ3MgTGl2ZVF1ZXJ5IGNsYXNzTmFtZXNcIixcbiAgICBhY3Rpb246IHBhcnNlcnMuYXJyYXlQYXJzZXIsXG4gIH0sXG4gIHB1YlN1YkFkYXB0ZXI6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfTElWRVFVRVJZX1BVQl9TVUJfQURBUFRFUicsXG4gICAgaGVscDogJ0xpdmVRdWVyeSBwdWJzdWIgYWRhcHRlcicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm1vZHVsZU9yT2JqZWN0UGFyc2VyLFxuICB9LFxuICByZWRpc09wdGlvbnM6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfTElWRVFVRVJZX1JFRElTX09QVElPTlMnLFxuICAgIGhlbHA6IFwicGFyc2Utc2VydmVyJ3MgTGl2ZVF1ZXJ5IHJlZGlzT3B0aW9uc1wiLFxuICAgIGFjdGlvbjogcGFyc2Vycy5vYmplY3RQYXJzZXIsXG4gIH0sXG4gIHJlZGlzVVJMOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0xJVkVRVUVSWV9SRURJU19VUkwnLFxuICAgIGhlbHA6IFwicGFyc2Utc2VydmVyJ3MgTGl2ZVF1ZXJ5IHJlZGlzVVJMXCIsXG4gIH0sXG4gIHdzc0FkYXB0ZXI6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfTElWRVFVRVJZX1dTU19BREFQVEVSJyxcbiAgICBoZWxwOiAnQWRhcHRlciBtb2R1bGUgZm9yIHRoZSBXZWJTb2NrZXRTZXJ2ZXInLFxuICAgIGFjdGlvbjogcGFyc2Vycy5tb2R1bGVPck9iamVjdFBhcnNlcixcbiAgfSxcbn07XG5tb2R1bGUuZXhwb3J0cy5MaXZlUXVlcnlTZXJ2ZXJPcHRpb25zID0ge1xuICBhcHBJZDoge1xuICAgIGVudjogJ1BBUlNFX0xJVkVfUVVFUllfU0VSVkVSX0FQUF9JRCcsXG4gICAgaGVscDpcbiAgICAgICdUaGlzIHN0cmluZyBzaG91bGQgbWF0Y2ggdGhlIGFwcElkIGluIHVzZSBieSB5b3VyIFBhcnNlIFNlcnZlci4gSWYgeW91IGRlcGxveSB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciBhbG9uZ3NpZGUgUGFyc2UgU2VydmVyLCB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciB3aWxsIHRyeSB0byB1c2UgdGhlIHNhbWUgYXBwSWQuJyxcbiAgfSxcbiAgY2FjaGVUaW1lb3V0OiB7XG4gICAgZW52OiAnUEFSU0VfTElWRV9RVUVSWV9TRVJWRVJfQ0FDSEVfVElNRU9VVCcsXG4gICAgaGVscDpcbiAgICAgIFwiTnVtYmVyIGluIG1pbGxpc2Vjb25kcy4gV2hlbiBjbGllbnRzIHByb3ZpZGUgdGhlIHNlc3Npb25Ub2tlbiB0byB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciwgdGhlIExpdmVRdWVyeSBzZXJ2ZXIgd2lsbCB0cnkgdG8gZmV0Y2ggaXRzIFBhcnNlVXNlcidzIG9iamVjdElkIGZyb20gcGFyc2Ugc2VydmVyIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuIFRoZSB2YWx1ZSBkZWZpbmVzIHRoZSBkdXJhdGlvbiBvZiB0aGUgY2FjaGUuIENoZWNrIHRoZSBmb2xsb3dpbmcgU2VjdXJpdHkgc2VjdGlvbiBhbmQgb3VyIHByb3RvY29sIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMsIGRlZmF1bHRzIHRvIDUgKiAxMDAwIG1zICg1IHNlY29uZHMpLlwiLFxuICAgIGFjdGlvbjogcGFyc2Vycy5udW1iZXJQYXJzZXIoJ2NhY2hlVGltZW91dCcpLFxuICB9LFxuICBrZXlQYWlyczoge1xuICAgIGVudjogJ1BBUlNFX0xJVkVfUVVFUllfU0VSVkVSX0tFWV9QQUlSUycsXG4gICAgaGVscDpcbiAgICAgICdBIEpTT04gb2JqZWN0IHRoYXQgc2VydmVzIGFzIGEgd2hpdGVsaXN0IG9mIGtleXMuIEl0IGlzIHVzZWQgZm9yIHZhbGlkYXRpbmcgY2xpZW50cyB3aGVuIHRoZXkgdHJ5IHRvIGNvbm5lY3QgdG8gdGhlIExpdmVRdWVyeSBzZXJ2ZXIuIENoZWNrIHRoZSBmb2xsb3dpbmcgU2VjdXJpdHkgc2VjdGlvbiBhbmQgb3VyIHByb3RvY29sIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMub2JqZWN0UGFyc2VyLFxuICB9LFxuICBsb2dMZXZlbDoge1xuICAgIGVudjogJ1BBUlNFX0xJVkVfUVVFUllfU0VSVkVSX0xPR19MRVZFTCcsXG4gICAgaGVscDpcbiAgICAgICdUaGlzIHN0cmluZyBkZWZpbmVzIHRoZSBsb2cgbGV2ZWwgb2YgdGhlIExpdmVRdWVyeSBzZXJ2ZXIuIFdlIHN1cHBvcnQgVkVSQk9TRSwgSU5GTywgRVJST1IsIE5PTkUsIGRlZmF1bHRzIHRvIElORk8uJyxcbiAgfSxcbiAgbWFzdGVyS2V5OiB7XG4gICAgZW52OiAnUEFSU0VfTElWRV9RVUVSWV9TRVJWRVJfTUFTVEVSX0tFWScsXG4gICAgaGVscDpcbiAgICAgICdUaGlzIHN0cmluZyBzaG91bGQgbWF0Y2ggdGhlIG1hc3RlcktleSBpbiB1c2UgYnkgeW91ciBQYXJzZSBTZXJ2ZXIuIElmIHlvdSBkZXBsb3kgdGhlIExpdmVRdWVyeSBzZXJ2ZXIgYWxvbmdzaWRlIFBhcnNlIFNlcnZlciwgdGhlIExpdmVRdWVyeSBzZXJ2ZXIgd2lsbCB0cnkgdG8gdXNlIHRoZSBzYW1lIG1hc3RlcktleS4nLFxuICB9LFxuICBwb3J0OiB7XG4gICAgZW52OiAnUEFSU0VfTElWRV9RVUVSWV9TRVJWRVJfUE9SVCcsXG4gICAgaGVscDogJ1RoZSBwb3J0IHRvIHJ1biB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciwgZGVmYXVsdHMgdG8gMTMzNy4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5udW1iZXJQYXJzZXIoJ3BvcnQnKSxcbiAgICBkZWZhdWx0OiAxMzM3LFxuICB9LFxuICBwdWJTdWJBZGFwdGVyOiB7XG4gICAgZW52OiAnUEFSU0VfTElWRV9RVUVSWV9TRVJWRVJfUFVCX1NVQl9BREFQVEVSJyxcbiAgICBoZWxwOiAnTGl2ZVF1ZXJ5IHB1YnN1YiBhZGFwdGVyJyxcbiAgICBhY3Rpb246IHBhcnNlcnMubW9kdWxlT3JPYmplY3RQYXJzZXIsXG4gIH0sXG4gIHJlZGlzT3B0aW9uczoge1xuICAgIGVudjogJ1BBUlNFX0xJVkVfUVVFUllfU0VSVkVSX1JFRElTX09QVElPTlMnLFxuICAgIGhlbHA6IFwicGFyc2Utc2VydmVyJ3MgTGl2ZVF1ZXJ5IHJlZGlzT3B0aW9uc1wiLFxuICAgIGFjdGlvbjogcGFyc2Vycy5vYmplY3RQYXJzZXIsXG4gIH0sXG4gIHJlZGlzVVJMOiB7XG4gICAgZW52OiAnUEFSU0VfTElWRV9RVUVSWV9TRVJWRVJfUkVESVNfVVJMJyxcbiAgICBoZWxwOiBcInBhcnNlLXNlcnZlcidzIExpdmVRdWVyeSByZWRpc1VSTFwiLFxuICB9LFxuICBzZXJ2ZXJVUkw6IHtcbiAgICBlbnY6ICdQQVJTRV9MSVZFX1FVRVJZX1NFUlZFUl9TRVJWRVJfVVJMJyxcbiAgICBoZWxwOlxuICAgICAgJ1RoaXMgc3RyaW5nIHNob3VsZCBtYXRjaCB0aGUgc2VydmVyVVJMIGluIHVzZSBieSB5b3VyIFBhcnNlIFNlcnZlci4gSWYgeW91IGRlcGxveSB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciBhbG9uZ3NpZGUgUGFyc2UgU2VydmVyLCB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciB3aWxsIHRyeSB0byB1c2UgdGhlIHNhbWUgc2VydmVyVVJMLicsXG4gIH0sXG4gIHdlYnNvY2tldFRpbWVvdXQ6IHtcbiAgICBlbnY6ICdQQVJTRV9MSVZFX1FVRVJZX1NFUlZFUl9XRUJTT0NLRVRfVElNRU9VVCcsXG4gICAgaGVscDpcbiAgICAgICdOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJldHdlZW4gcGluZy9wb25nIGZyYW1lcy4gVGhlIFdlYlNvY2tldCBzZXJ2ZXIgc2VuZHMgcGluZy9wb25nIGZyYW1lcyB0byB0aGUgY2xpZW50cyB0byBrZWVwIHRoZSBXZWJTb2NrZXQgYWxpdmUuIFRoaXMgdmFsdWUgZGVmaW5lcyB0aGUgaW50ZXJ2YWwgb2YgdGhlIHBpbmcvcG9uZyBmcmFtZSBmcm9tIHRoZSBzZXJ2ZXIgdG8gY2xpZW50cywgZGVmYXVsdHMgdG8gMTAgKiAxMDAwIG1zICgxMCBzKS4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5udW1iZXJQYXJzZXIoJ3dlYnNvY2tldFRpbWVvdXQnKSxcbiAgfSxcbiAgd3NzQWRhcHRlcjoge1xuICAgIGVudjogJ1BBUlNFX0xJVkVfUVVFUllfU0VSVkVSX1dTU19BREFQVEVSJyxcbiAgICBoZWxwOiAnQWRhcHRlciBtb2R1bGUgZm9yIHRoZSBXZWJTb2NrZXRTZXJ2ZXInLFxuICAgIGFjdGlvbjogcGFyc2Vycy5tb2R1bGVPck9iamVjdFBhcnNlcixcbiAgfSxcbn07XG5tb2R1bGUuZXhwb3J0cy5JZGVtcG90ZW5jeU9wdGlvbnMgPSB7XG4gIHBhdGhzOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0VYUEVSSU1FTlRBTF9JREVNUE9URU5DWV9QQVRIUycsXG4gICAgaGVscDpcbiAgICAgICdBbiBhcnJheSBvZiBwYXRocyBmb3Igd2hpY2ggdGhlIGZlYXR1cmUgc2hvdWxkIGJlIGVuYWJsZWQuIFRoZSBtb3VudCBwYXRoIG11c3Qgbm90IGJlIGluY2x1ZGVkLCBmb3IgZXhhbXBsZSBpbnN0ZWFkIG9mIGAvcGFyc2UvZnVuY3Rpb25zL215RnVuY3Rpb25gIHNwZWNpZml5IGBmdW5jdGlvbnMvbXlGdW5jdGlvbmAuIFRoZSBlbnRyaWVzIGFyZSBpbnRlcnByZXRlZCBhcyByZWd1bGFyIGV4cHJlc3Npb24sIGZvciBleGFtcGxlIGBmdW5jdGlvbnMvLipgIG1hdGNoZXMgYWxsIGZ1bmN0aW9ucywgYGpvYnMvLipgIG1hdGNoZXMgYWxsIGpvYnMsIGBjbGFzc2VzLy4qYCBtYXRjaGVzIGFsbCBjbGFzc2VzLCBgLipgIG1hdGNoZXMgYWxsIHBhdGhzLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmFycmF5UGFyc2VyLFxuICAgIGRlZmF1bHQ6IFtdLFxuICB9LFxuICB0dGw6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfRVhQRVJJTUVOVEFMX0lERU1QT1RFTkNZX1RUTCcsXG4gICAgaGVscDpcbiAgICAgICdUaGUgZHVyYXRpb24gaW4gc2Vjb25kcyBhZnRlciB3aGljaCBhIHJlcXVlc3QgcmVjb3JkIGlzIGRpc2NhcmRlZCBmcm9tIHRoZSBkYXRhYmFzZSwgZGVmYXVsdHMgdG8gMzAwcy4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5udW1iZXJQYXJzZXIoJ3R0bCcpLFxuICAgIGRlZmF1bHQ6IDMwMCxcbiAgfSxcbn07XG5tb2R1bGUuZXhwb3J0cy5BY2NvdW50TG9ja291dE9wdGlvbnMgPSB7XG4gIGR1cmF0aW9uOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0FDQ09VTlRfTE9DS09VVF9EVVJBVElPTicsXG4gICAgaGVscDpcbiAgICAgICdTZXQgdGhlIGR1cmF0aW9uIGluIG1pbnV0ZXMgdGhhdCBhIGxvY2tlZC1vdXQgYWNjb3VudCByZW1haW5zIGxvY2tlZCBvdXQgYmVmb3JlIGF1dG9tYXRpY2FsbHkgYmVjb21pbmcgdW5sb2NrZWQuPGJyPjxicj5WYWxpZCB2YWx1ZXMgYXJlIGdyZWF0ZXIgdGhhbiBgMGAgYW5kIGxlc3MgdGhhbiBgMTAwMDAwYC4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5udW1iZXJQYXJzZXIoJ2R1cmF0aW9uJyksXG4gIH0sXG4gIHRocmVzaG9sZDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9BQ0NPVU5UX0xPQ0tPVVRfVEhSRVNIT0xEJyxcbiAgICBoZWxwOlxuICAgICAgJ1NldCB0aGUgbnVtYmVyIG9mIGZhaWxlZCBzaWduLWluIGF0dGVtcHRzIHRoYXQgd2lsbCBjYXVzZSBhIHVzZXIgYWNjb3VudCB0byBiZSBsb2NrZWQuIElmIHRoZSBhY2NvdW50IGlzIGxvY2tlZC4gVGhlIGFjY291bnQgd2lsbCB1bmxvY2sgYWZ0ZXIgdGhlIGR1cmF0aW9uIHNldCBpbiB0aGUgYGR1cmF0aW9uYCBvcHRpb24gaGFzIHBhc3NlZCBhbmQgbm8gZnVydGhlciBsb2dpbiBhdHRlbXB0cyBoYXZlIGJlZW4gbWFkZS48YnI+PGJyPlZhbGlkIHZhbHVlcyBhcmUgZ3JlYXRlciB0aGFuIGAwYCBhbmQgbGVzcyB0aGFuIGAxMDAwYC4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5udW1iZXJQYXJzZXIoJ3RocmVzaG9sZCcpLFxuICB9LFxuICB1bmxvY2tPblBhc3N3b3JkUmVzZXQ6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQUNDT1VOVF9MT0NLT1VUX1VOTE9DS19PTl9QQVNTV09SRF9SRVNFVCcsXG4gICAgaGVscDpcbiAgICAgICdTZXQgdG8gYHRydWVgICBpZiB0aGUgYWNjb3VudCBzaG91bGQgYmUgdW5sb2NrZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIHBhc3N3b3JkIHJlc2V0Ljxicj48YnI+RGVmYXVsdCBpcyBgZmFsc2VgLjxicj5SZXF1aXJlcyBvcHRpb25zIGBkdXJhdGlvbmAgYW5kIGB0aHJlc2hvbGRgIHRvIGJlIHNldC4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxufTtcbm1vZHVsZS5leHBvcnRzLlBhc3N3b3JkUG9saWN5T3B0aW9ucyA9IHtcbiAgZG9Ob3RBbGxvd1VzZXJuYW1lOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBU1NXT1JEX1BPTElDWV9ET19OT1RfQUxMT1dfVVNFUk5BTUUnLFxuICAgIGhlbHA6XG4gICAgICAnU2V0IHRvIGB0cnVlYCB0byBkaXNhbGxvdyB0aGUgdXNlcm5hbWUgYXMgcGFydCBvZiB0aGUgcGFzc3dvcmQuPGJyPjxicj5EZWZhdWx0IGlzIGBmYWxzZWAuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgbWF4UGFzc3dvcmRBZ2U6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfUEFTU1dPUkRfUE9MSUNZX01BWF9QQVNTV09SRF9BR0UnLFxuICAgIGhlbHA6XG4gICAgICAnU2V0IHRoZSBudW1iZXIgb2YgZGF5cyBhZnRlciB3aGljaCBhIHBhc3N3b3JkIGV4cGlyZXMuIExvZ2luIGF0dGVtcHRzIGZhaWwgaWYgdGhlIHVzZXIgZG9lcyBub3QgcmVzZXQgdGhlIHBhc3N3b3JkIGJlZm9yZSBleHBpcmF0aW9uLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm51bWJlclBhcnNlcignbWF4UGFzc3dvcmRBZ2UnKSxcbiAgfSxcbiAgbWF4UGFzc3dvcmRIaXN0b3J5OiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBU1NXT1JEX1BPTElDWV9NQVhfUEFTU1dPUkRfSElTVE9SWScsXG4gICAgaGVscDpcbiAgICAgICdTZXQgdGhlIG51bWJlciBvZiBwcmV2aW91cyBwYXNzd29yZCB0aGF0IHdpbGwgbm90IGJlIGFsbG93ZWQgdG8gYmUgc2V0IGFzIG5ldyBwYXNzd29yZC4gSWYgdGhlIG9wdGlvbiBpcyBub3Qgc2V0IG9yIHNldCB0byBgMGAsIG5vIHByZXZpb3VzIHBhc3N3b3JkcyB3aWxsIGJlIGNvbnNpZGVyZWQuPGJyPjxicj5WYWxpZCB2YWx1ZXMgYXJlID49IGAwYCBhbmQgPD0gYDIwYC48YnI+RGVmYXVsdCBpcyBgMGAuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMubnVtYmVyUGFyc2VyKCdtYXhQYXNzd29yZEhpc3RvcnknKSxcbiAgfSxcbiAgcmVzZXRQYXNzd29yZFN1Y2Nlc3NPbkludmFsaWRFbWFpbDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9QQVNTV09SRF9QT0xJQ1lfUkVTRVRfUEFTU1dPUkRfU1VDQ0VTU19PTl9JTlZBTElEX0VNQUlMJyxcbiAgICBoZWxwOlxuICAgICAgJ1NldCB0byBgdHJ1ZWAgaWYgYSByZXF1ZXN0IHRvIHJlc2V0IHRoZSBwYXNzd29yZCBzaG91bGQgcmV0dXJuIGEgc3VjY2VzcyByZXNwb25zZSBldmVuIGlmIHRoZSBwcm92aWRlZCBlbWFpbCBhZGRyZXNzIGlzIGludmFsaWQsIG9yIGBmYWxzZWAgaWYgdGhlIHJlcXVlc3Qgc2hvdWxkIHJldHVybiBhbiBlcnJvciByZXNwb25zZSBpZiB0aGUgZW1haWwgYWRkcmVzcyBpcyBpbnZhbGlkLjxicj48YnI+RGVmYXVsdCBpcyBgdHJ1ZWAuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxuICByZXNldFRva2VuUmV1c2VJZlZhbGlkOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBU1NXT1JEX1BPTElDWV9SRVNFVF9UT0tFTl9SRVVTRV9JRl9WQUxJRCcsXG4gICAgaGVscDpcbiAgICAgICdTZXQgdG8gYHRydWVgIGlmIGEgcGFzc3dvcmQgcmVzZXQgdG9rZW4gc2hvdWxkIGJlIHJldXNlZCBpbiBjYXNlIGFub3RoZXIgdG9rZW4gaXMgcmVxdWVzdGVkIGJ1dCB0aGVyZSBpcyBhIHRva2VuIHRoYXQgaXMgc3RpbGwgdmFsaWQsIGkuZS4gaGFzIG5vdCBleHBpcmVkLiBUaGlzIGF2b2lkcyB0aGUgb2Z0ZW4gb2JzZXJ2ZWQgaXNzdWUgdGhhdCBhIHVzZXIgcmVxdWVzdHMgbXVsdGlwbGUgZW1haWxzIGFuZCBkb2VzIG5vdCBrbm93IHdoaWNoIGxpbmsgY29udGFpbnMgYSB2YWxpZCB0b2tlbiBiZWNhdXNlIGVhY2ggbmV3bHkgZ2VuZXJhdGVkIHRva2VuIHdvdWxkIGludmFsaWRhdGUgdGhlIHByZXZpb3VzIHRva2VuLjxicj48YnI+RGVmYXVsdCBpcyBgZmFsc2VgLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIHJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBU1NXT1JEX1BPTElDWV9SRVNFVF9UT0tFTl9WQUxJRElUWV9EVVJBVElPTicsXG4gICAgaGVscDpcbiAgICAgICdTZXQgdGhlIHZhbGlkaXR5IGR1cmF0aW9uIG9mIHRoZSBwYXNzd29yZCByZXNldCB0b2tlbiBpbiBzZWNvbmRzIGFmdGVyIHdoaWNoIHRoZSB0b2tlbiBleHBpcmVzLiBUaGUgdG9rZW4gaXMgdXNlZCBpbiB0aGUgbGluayB0aGF0IGlzIHNldCBpbiB0aGUgZW1haWwuIEFmdGVyIHRoZSB0b2tlbiBleHBpcmVzLCB0aGUgbGluayBiZWNvbWVzIGludmFsaWQgYW5kIGEgbmV3IGxpbmsgaGFzIHRvIGJlIHNlbnQuIElmIHRoZSBvcHRpb24gaXMgbm90IHNldCBvciBzZXQgdG8gYHVuZGVmaW5lZGAsIHRoZW4gdGhlIHRva2VuIG5ldmVyIGV4cGlyZXMuPGJyPjxicj5Gb3IgZXhhbXBsZSwgdG8gZXhwaXJlIHRoZSB0b2tlbiBhZnRlciAyIGhvdXJzLCBzZXQgYSB2YWx1ZSBvZiA3MjAwIHNlY29uZHMgKD0gNjAgc2Vjb25kcyAqIDYwIG1pbnV0ZXMgKiAyIGhvdXJzKS48YnI+PGJyPkRlZmF1bHQgaXMgYHVuZGVmaW5lZGAuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMubnVtYmVyUGFyc2VyKCdyZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbicpLFxuICB9LFxuICB2YWxpZGF0aW9uRXJyb3I6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfUEFTU1dPUkRfUE9MSUNZX1ZBTElEQVRJT05fRVJST1InLFxuICAgIGhlbHA6XG4gICAgICAnU2V0IHRoZSBlcnJvciBtZXNzYWdlIHRvIGJlIHNlbnQuPGJyPjxicj5EZWZhdWx0IGlzIGBQYXNzd29yZCBkb2VzIG5vdCBtZWV0IHRoZSBQYXNzd29yZCBQb2xpY3kgcmVxdWlyZW1lbnRzLmAnLFxuICB9LFxuICB2YWxpZGF0b3JDYWxsYmFjazoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9QQVNTV09SRF9QT0xJQ1lfVkFMSURBVE9SX0NBTExCQUNLJyxcbiAgICBoZWxwOlxuICAgICAgJ1NldCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGEgcGFzc3dvcmQgdG8gYmUgYWNjZXB0ZWQuPGJyPjxicj5JZiB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYHZhbGlkYXRvclBhdHRlcm5gLCB0aGUgcGFzc3dvcmQgbXVzdCBwYXNzIGJvdGggdG8gYmUgYWNjZXB0ZWQuJyxcbiAgfSxcbiAgdmFsaWRhdG9yUGF0dGVybjoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9QQVNTV09SRF9QT0xJQ1lfVkFMSURBVE9SX1BBVFRFUk4nLFxuICAgIGhlbHA6XG4gICAgICAnU2V0IHRoZSByZWd1bGFyIGV4cHJlc3Npb24gdmFsaWRhdGlvbiBwYXR0ZXJuIGEgcGFzc3dvcmQgbXVzdCBtYXRjaCB0byBiZSBhY2NlcHRlZC48YnI+PGJyPklmIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBgdmFsaWRhdG9yQ2FsbGJhY2tgLCB0aGUgcGFzc3dvcmQgbXVzdCBwYXNzIGJvdGggdG8gYmUgYWNjZXB0ZWQuJyxcbiAgfSxcbn07XG5tb2R1bGUuZXhwb3J0cy5GaWxlVXBsb2FkT3B0aW9ucyA9IHtcbiAgZW5hYmxlRm9yQW5vbnltb3VzVXNlcjoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9GSUxFX1VQTE9BRF9FTkFCTEVfRk9SX0FOT05ZTU9VU19VU0VSJyxcbiAgICBoZWxwOiAnSXMgdHJ1ZSBpZiBmaWxlIHVwbG9hZCBzaG91bGQgYmUgYWxsb3dlZCBmb3IgYW5vbnltb3VzIHVzZXJzLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0ZJTEVfVVBMT0FEX0VOQUJMRV9GT1JfQVVUSEVOVElDQVRFRF9VU0VSJyxcbiAgICBoZWxwOiAnSXMgdHJ1ZSBpZiBmaWxlIHVwbG9hZCBzaG91bGQgYmUgYWxsb3dlZCBmb3IgYXV0aGVudGljYXRlZCB1c2Vycy4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIGVuYWJsZUZvclB1YmxpYzoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9GSUxFX1VQTE9BRF9FTkFCTEVfRk9SX1BVQkxJQycsXG4gICAgaGVscDogJ0lzIHRydWUgaWYgZmlsZSB1cGxvYWQgc2hvdWxkIGJlIGFsbG93ZWQgZm9yIGFueW9uZSwgcmVnYXJkbGVzcyBvZiB1c2VyIGF1dGhlbnRpY2F0aW9uLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGZpbGVFeHRlbnNpb25zOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0ZJTEVfVVBMT0FEX0ZJTEVfRVhURU5TSU9OUycsXG4gICAgaGVscDpcbiAgICAgIFwiU2V0cyB0aGUgYWxsb3dlZCBmaWxlIGV4dGVuc2lvbnMgZm9yIHVwbG9hZGluZyBmaWxlcy4gVGhlIGV4dGVuc2lvbiBpcyBkZWZpbmVkIGFzIGFuIGFycmF5IG9mIGZpbGUgZXh0ZW5zaW9ucywgb3IgYSByZWdleCBwYXR0ZXJuLjxicj48YnI+SXQgaXMgcmVjb21tZW5kZWQgdG8gcmVzdHJpY3QgdGhlIGZpbGUgdXBsb2FkIGV4dGVuc2lvbnMgYXMgbXVjaCBhcyBwb3NzaWJsZS4gSFRNTCBmaWxlcyBhcmUgZXNwZWNpYWxseSBwcm9ibGVtYXRpYyBhcyB0aGV5IG1heSBiZSB1c2VkIGJ5IGFuIGF0dGFja2VyIHdobyB1cGxvYWRzIGEgSFRNTCBmb3JtIHRvIGxvb2sgbGVnaXRpbWF0ZSB1bmRlciB5b3VyIGFwcCdzIGRvbWFpbiBuYW1lLCBvciB0byBjb21wcm9taXNlIHRoZSBzZXNzaW9uIHRva2VuIG9mIGFub3RoZXIgdXNlciB2aWEgYWNjZXNzaW5nIHRoZSBicm93c2VyJ3MgbG9jYWwgc3RvcmFnZS48YnI+PGJyPkRlZmF1bHRzIHRvIGBeKD8hKGh8SCkodHxUKShtfE0pKGx8TCk/JClgIHdoaWNoIGFsbG93cyBhbnkgZmlsZSBleHRlbnNpb24gZXhjZXB0IEhUTUwgZmlsZXMuXCIsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmFycmF5UGFyc2VyLFxuICAgIGRlZmF1bHQ6IFsnXig/IShofEgpKHR8VCkobXxNKShsfEwpPyQpJ10sXG4gIH0sXG59O1xubW9kdWxlLmV4cG9ydHMuRGF0YWJhc2VPcHRpb25zID0ge1xuICBhdXRvU2VsZWN0RmFtaWx5OiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0RBVEFCQVNFX0FVVE9fU0VMRUNUX0ZBTUlMWScsXG4gICAgaGVscDpcbiAgICAgICdUaGUgTW9uZ29EQiBkcml2ZXIgb3B0aW9uIHRvIHNldCB3aGV0aGVyIHRoZSBzb2NrZXQgYXR0ZW1wdHMgdG8gY29ubmVjdCB0byBJUHY2IGFuZCBJUHY0IGFkZHJlc3NlcyB1bnRpbCBhIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQuIElmIGF2YWlsYWJsZSwgdGhlIGRyaXZlciB3aWxsIHNlbGVjdCB0aGUgZmlyc3QgSVB2NiBhZGRyZXNzLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gIH0sXG4gIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9EQVRBQkFTRV9BVVRPX1NFTEVDVF9GQU1JTFlfQVRURU1QVF9USU1FT1VUJyxcbiAgICBoZWxwOlxuICAgICAgJ1RoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc3BlY2lmeSB0aGUgYW1vdW50IG9mIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIGEgY29ubmVjdGlvbiBhdHRlbXB0IHRvIGZpbmlzaCBiZWZvcmUgdHJ5aW5nIHRoZSBuZXh0IGFkZHJlc3Mgd2hlbiB1c2luZyB0aGUgYXV0b1NlbGVjdEZhbWlseSBvcHRpb24uIElmIHNldCB0byBhIHBvc2l0aXZlIGludGVnZXIgbGVzcyB0aGFuIDEwLCB0aGUgdmFsdWUgMTAgaXMgdXNlZCBpbnN0ZWFkLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm51bWJlclBhcnNlcignYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0JyksXG4gIH0sXG4gIGNvbm5lY3RUaW1lb3V0TVM6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfREFUQUJBU0VfQ09OTkVDVF9USU1FT1VUX01TJyxcbiAgICBoZWxwOlxuICAgICAgJ1RoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc3BlY2lmeSB0aGUgYW1vdW50IG9mIHRpbWUsIGluIG1pbGxpc2Vjb25kcywgdG8gd2FpdCB0byBlc3RhYmxpc2ggYSBzaW5nbGUgVENQIHNvY2tldCBjb25uZWN0aW9uIHRvIHRoZSBzZXJ2ZXIgYmVmb3JlIHJhaXNpbmcgYW4gZXJyb3IuIFNwZWNpZnlpbmcgMCBkaXNhYmxlcyB0aGUgY29ubmVjdGlvbiB0aW1lb3V0LicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm51bWJlclBhcnNlcignY29ubmVjdFRpbWVvdXRNUycpLFxuICB9LFxuICBlbmFibGVTY2hlbWFIb29rczoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9EQVRBQkFTRV9FTkFCTEVfU0NIRU1BX0hPT0tTJyxcbiAgICBoZWxwOlxuICAgICAgJ0VuYWJsZXMgZGF0YWJhc2UgcmVhbC10aW1lIGhvb2tzIHRvIHVwZGF0ZSBzaW5nbGUgc2NoZW1hIGNhY2hlLiBTZXQgdG8gYHRydWVgIGlmIHVzaW5nIG11bHRpcGxlIFBhcnNlIFNlcnZlcnMgaW5zdGFuY2VzIGNvbm5lY3RlZCB0byB0aGUgc2FtZSBkYXRhYmFzZS4gRmFpbGluZyB0byBkbyBzbyB3aWxsIGNhdXNlIGEgc2NoZW1hIGNoYW5nZSB0byBub3QgcHJvcGFnYXRlIHRvIGFsbCBpbnN0YW5jZXMgYW5kIHJlLXN5bmNpbmcgd2lsbCBvbmx5IGhhcHBlbiB3aGVuIHRoZSBpbnN0YW5jZXMgcmVzdGFydC4gVG8gdXNlIHRoaXMgZmVhdHVyZSB3aXRoIE1vbmdvREIsIGEgcmVwbGljYSBzZXQgY2x1c3RlciB3aXRoIFtjaGFuZ2Ugc3RyZWFtXShodHRwczovL2RvY3MubW9uZ29kYi5jb20vbWFudWFsL2NoYW5nZVN0cmVhbXMvI2F2YWlsYWJpbGl0eSkgc3VwcG9ydCBpcyByZXF1aXJlZC4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBtYXhQb29sU2l6ZToge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9EQVRBQkFTRV9NQVhfUE9PTF9TSVpFJyxcbiAgICBoZWxwOlxuICAgICAgJ1RoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBvcGVuZWQsIGNhY2hlZCwgcmVhZHktdG8tdXNlIGRhdGFiYXNlIGNvbm5lY3Rpb25zIG1haW50YWluZWQgYnkgdGhlIGRyaXZlci4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5udW1iZXJQYXJzZXIoJ21heFBvb2xTaXplJyksXG4gIH0sXG4gIG1heFN0YWxlbmVzc1NlY29uZHM6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfREFUQUJBU0VfTUFYX1NUQUxFTkVTU19TRUNPTkRTJyxcbiAgICBoZWxwOlxuICAgICAgJ1RoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc2V0IHRoZSBtYXhpbXVtIHJlcGxpY2F0aW9uIGxhZyBmb3IgcmVhZHMgZnJvbSBzZWNvbmRhcnkgbm9kZXMuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMubnVtYmVyUGFyc2VyKCdtYXhTdGFsZW5lc3NTZWNvbmRzJyksXG4gIH0sXG4gIG1heFRpbWVNUzoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9EQVRBQkFTRV9NQVhfVElNRV9NUycsXG4gICAgaGVscDpcbiAgICAgICdUaGUgTW9uZ29EQiBkcml2ZXIgb3B0aW9uIHRvIHNldCBhIGN1bXVsYXRpdmUgdGltZSBsaW1pdCBpbiBtaWxsaXNlY29uZHMgZm9yIHByb2Nlc3Npbmcgb3BlcmF0aW9ucyBvbiBhIGN1cnNvci4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5udW1iZXJQYXJzZXIoJ21heFRpbWVNUycpLFxuICB9LFxuICBtaW5Qb29sU2l6ZToge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9EQVRBQkFTRV9NSU5fUE9PTF9TSVpFJyxcbiAgICBoZWxwOlxuICAgICAgJ1RoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc2V0IHRoZSBtaW5pbXVtIG51bWJlciBvZiBvcGVuZWQsIGNhY2hlZCwgcmVhZHktdG8tdXNlIGRhdGFiYXNlIGNvbm5lY3Rpb25zIG1haW50YWluZWQgYnkgdGhlIGRyaXZlci4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5udW1iZXJQYXJzZXIoJ21pblBvb2xTaXplJyksXG4gIH0sXG4gIHJldHJ5V3JpdGVzOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0RBVEFCQVNFX1JFVFJZX1dSSVRFUycsXG4gICAgaGVscDogJ1RoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc2V0IHdoZXRoZXIgdG8gcmV0cnkgZmFpbGVkIHdyaXRlcy4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICB9LFxuICBzY2hlbWFDYWNoZVR0bDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9EQVRBQkFTRV9TQ0hFTUFfQ0FDSEVfVFRMJyxcbiAgICBoZWxwOlxuICAgICAgJ1RoZSBkdXJhdGlvbiBpbiBzZWNvbmRzIGFmdGVyIHdoaWNoIHRoZSBzY2hlbWEgY2FjaGUgZXhwaXJlcyBhbmQgd2lsbCBiZSByZWZldGNoZWQgZnJvbSB0aGUgZGF0YWJhc2UuIFVzZSB0aGlzIG9wdGlvbiBpZiB1c2luZyBtdWx0aXBsZSBQYXJzZSBTZXJ2ZXJzIGluc3RhbmNlcyBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgZGF0YWJhc2UuIEEgbG93IGR1cmF0aW9uIHdpbGwgY2F1c2UgdGhlIHNjaGVtYSBjYWNoZSB0byBiZSB1cGRhdGVkIHRvbyBvZnRlbiwgY2F1c2luZyB1bm5lY2Vzc2FyeSBkYXRhYmFzZSByZWFkcy4gQSBoaWdoIGR1cmF0aW9uIHdpbGwgY2F1c2UgdGhlIHNjaGVtYSB0byBiZSB1cGRhdGVkIHRvbyByYXJlbHksIGluY3JlYXNpbmcgdGhlIHRpbWUgcmVxdWlyZWQgdW50aWwgc2NoZW1hIGNoYW5nZXMgcHJvcGFnYXRlIHRvIGFsbCBzZXJ2ZXIgaW5zdGFuY2VzLiBUaGlzIGZlYXR1cmUgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgb3IgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgb3B0aW9uIGBlbmFibGVTY2hlbWFIb29rc2AuIERlZmF1bHQgaXMgaW5maW5pdGUgd2hpY2ggbWVhbnMgdGhlIHNjaGVtYSBjYWNoZSBuZXZlciBleHBpcmVzLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm51bWJlclBhcnNlcignc2NoZW1hQ2FjaGVUdGwnKSxcbiAgfSxcbiAgc29ja2V0VGltZW91dE1TOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0RBVEFCQVNFX1NPQ0tFVF9USU1FT1VUX01TJyxcbiAgICBoZWxwOlxuICAgICAgJ1RoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc3BlY2lmeSB0aGUgYW1vdW50IG9mIHRpbWUsIGluIG1pbGxpc2Vjb25kcywgc3BlbnQgYXR0ZW1wdGluZyB0byBzZW5kIG9yIHJlY2VpdmUgb24gYSBzb2NrZXQgYmVmb3JlIHRpbWluZyBvdXQuIFNwZWNpZnlpbmcgMCBtZWFucyBubyB0aW1lb3V0LicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm51bWJlclBhcnNlcignc29ja2V0VGltZW91dE1TJyksXG4gIH0sXG59O1xubW9kdWxlLmV4cG9ydHMuQXV0aEFkYXB0ZXIgPSB7XG4gIGVuYWJsZWQ6IHtcbiAgICBoZWxwOiAnSXMgYHRydWVgIGlmIHRoZSBhdXRoIGFkYXB0ZXIgaXMgZW5hYmxlZCwgYGZhbHNlYCBvdGhlcndpc2UuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbn07XG5tb2R1bGUuZXhwb3J0cy5Mb2dMZXZlbHMgPSB7XG4gIGNsb3VkRnVuY3Rpb25FcnJvcjoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9MT0dfTEVWRUxTX0NMT1VEX0ZVTkNUSU9OX0VSUk9SJyxcbiAgICBoZWxwOiAnTG9nIGxldmVsIHVzZWQgYnkgdGhlIENsb3VkIENvZGUgRnVuY3Rpb25zIG9uIGVycm9yLiBEZWZhdWx0IGlzIGBlcnJvcmAuJyxcbiAgICBkZWZhdWx0OiAnZXJyb3InLFxuICB9LFxuICBjbG91ZEZ1bmN0aW9uU3VjY2Vzczoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9MT0dfTEVWRUxTX0NMT1VEX0ZVTkNUSU9OX1NVQ0NFU1MnLFxuICAgIGhlbHA6ICdMb2cgbGV2ZWwgdXNlZCBieSB0aGUgQ2xvdWQgQ29kZSBGdW5jdGlvbnMgb24gc3VjY2Vzcy4gRGVmYXVsdCBpcyBgaW5mb2AuJyxcbiAgICBkZWZhdWx0OiAnaW5mbycsXG4gIH0sXG4gIHRyaWdnZXJBZnRlcjoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9MT0dfTEVWRUxTX1RSSUdHRVJfQUZURVInLFxuICAgIGhlbHA6XG4gICAgICAnTG9nIGxldmVsIHVzZWQgYnkgdGhlIENsb3VkIENvZGUgVHJpZ2dlcnMgYGFmdGVyU2F2ZWAsIGBhZnRlckRlbGV0ZWAsIGBhZnRlckZpbmRgLCBgYWZ0ZXJMb2dvdXRgLiBEZWZhdWx0IGlzIGBpbmZvYC4nLFxuICAgIGRlZmF1bHQ6ICdpbmZvJyxcbiAgfSxcbiAgdHJpZ2dlckJlZm9yZUVycm9yOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0xPR19MRVZFTFNfVFJJR0dFUl9CRUZPUkVfRVJST1InLFxuICAgIGhlbHA6XG4gICAgICAnTG9nIGxldmVsIHVzZWQgYnkgdGhlIENsb3VkIENvZGUgVHJpZ2dlcnMgYGJlZm9yZVNhdmVgLCBgYmVmb3JlRGVsZXRlYCwgYGJlZm9yZUZpbmRgLCBgYmVmb3JlTG9naW5gIG9uIGVycm9yLiBEZWZhdWx0IGlzIGBlcnJvcmAuJyxcbiAgICBkZWZhdWx0OiAnZXJyb3InLFxuICB9LFxuICB0cmlnZ2VyQmVmb3JlU3VjY2Vzczoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9MT0dfTEVWRUxTX1RSSUdHRVJfQkVGT1JFX1NVQ0NFU1MnLFxuICAgIGhlbHA6XG4gICAgICAnTG9nIGxldmVsIHVzZWQgYnkgdGhlIENsb3VkIENvZGUgVHJpZ2dlcnMgYGJlZm9yZVNhdmVgLCBgYmVmb3JlRGVsZXRlYCwgYGJlZm9yZUZpbmRgLCBgYmVmb3JlTG9naW5gIG9uIHN1Y2Nlc3MuIERlZmF1bHQgaXMgYGluZm9gLicsXG4gICAgZGVmYXVsdDogJ2luZm8nLFxuICB9LFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsT0FBTyxHQUFHQyxPQUFPLENBQUMsV0FBVyxDQUFDO0FBQ2xDQyxNQUFNLENBQUNDLE9BQU8sQ0FBQ0MsYUFBYSxHQUFHO0VBQzdCQyxjQUFjLEVBQUU7SUFDZEMsR0FBRyxFQUFFLHFDQUFxQztJQUMxQ0MsSUFBSSxFQUFFO0VBQ1IsQ0FBQztFQUNEQyxlQUFlLEVBQUU7SUFDZkYsR0FBRyxFQUFFLHNDQUFzQztJQUMzQ0MsSUFBSSxFQUFFO0VBQ1IsQ0FBQztFQUNERSxXQUFXLEVBQUU7SUFDWEgsR0FBRyxFQUFFLGlDQUFpQztJQUN0Q0MsSUFBSSxFQUNGLGdHQUFnRztJQUNsR0csUUFBUSxFQUFFLElBQUk7SUFDZEMsTUFBTSxFQUFFWCxPQUFPLENBQUNZLFlBQVk7SUFDNUJDLE9BQU8sRUFBRTtFQUNYLENBQUM7RUFDREMsaUJBQWlCLEVBQUU7SUFDakJSLEdBQUcsRUFBRSx5Q0FBeUM7SUFDOUNDLElBQUksRUFDRixtSUFBbUk7SUFDcklJLE1BQU0sRUFBRVgsT0FBTyxDQUFDZSxhQUFhO0lBQzdCRixPQUFPLEVBQUU7RUFDWCxDQUFDO0VBQ0RHLGtCQUFrQixFQUFFO0lBQ2xCVixHQUFHLEVBQUUsMENBQTBDO0lBQy9DQyxJQUFJLEVB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
1096
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJzZXJzIiwicmVxdWlyZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJTY2hlbWFPcHRpb25zIiwiYWZ0ZXJNaWdyYXRpb24iLCJlbnYiLCJoZWxwIiwiYmVmb3JlTWlncmF0aW9uIiwiZGVmaW5pdGlvbnMiLCJyZXF1aXJlZCIsImFjdGlvbiIsIm9iamVjdFBhcnNlciIsImRlZmF1bHQiLCJkZWxldGVFeHRyYUZpZWxkcyIsImJvb2xlYW5QYXJzZXIiLCJrZWVwVW5rbm93bkluZGV4ZXMiLCJsb2NrU2NoZW1hcyIsInJlY3JlYXRlTW9kaWZpZWRGaWVsZHMiLCJzdHJpY3QiLCJQYXJzZVNlcnZlck9wdGlvbnMiLCJhY2NvdW50TG9ja291dCIsInR5cGUiLCJhbGxvd0NsaWVudENsYXNzQ3JlYXRpb24iLCJhbGxvd0N1c3RvbU9iamVjdElkIiwiYWxsb3dFeHBpcmVkQXV0aERhdGFUb2tlbiIsImFsbG93SGVhZGVycyIsImFycmF5UGFyc2VyIiwiYWxsb3dPcmlnaW4iLCJhbmFseXRpY3NBZGFwdGVyIiwibW9kdWxlT3JPYmplY3RQYXJzZXIiLCJhcHBJZCIsImFwcE5hbWUiLCJhdXRoIiwiY2FjaGVBZGFwdGVyIiwiY2FjaGVNYXhTaXplIiwibnVtYmVyUGFyc2VyIiwiY2FjaGVUVEwiLCJjbGllbnRLZXkiLCJjbG91ZCIsImNsdXN0ZXIiLCJudW1iZXJPckJvb2xlYW5QYXJzZXIiLCJjb2xsZWN0aW9uUHJlZml4IiwiY29udmVydEVtYWlsVG9Mb3dlcmNhc2UiLCJjb252ZXJ0VXNlcm5hbWVUb0xvd2VyY2FzZSIsImN1c3RvbVBhZ2VzIiwiZGF0YWJhc2VBZGFwdGVyIiwiZGF0YWJhc2VPcHRpb25zIiwiZGF0YWJhc2VVUkkiLCJkZWZhdWx0TGltaXQiLCJkaXJlY3RBY2Nlc3MiLCJkb3ROZXRLZXkiLCJlbWFpbEFkYXB0ZXIiLCJlbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkIiwiZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24iLCJlbmFibGVBbm9ueW1vdXNVc2VycyIsImVuYWJsZUNvbGxhdGlvbkNhc2VDb21wYXJpc29uIiwiZW5hYmxlRXhwcmVzc0Vycm9ySGFuZGxlciIsImVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzIiwiZW5jb2RlUGFyc2VPYmplY3RJbkNsb3VkRnVuY3Rpb24iLCJlbmNyeXB0aW9uS2V5IiwiZW5mb3JjZVByaXZhdGVVc2VycyIsImV4cGlyZUluYWN0aXZlU2Vzc2lvbnMiLCJleHRlbmRTZXNzaW9uT25Vc2UiLCJmaWxlS2V5IiwiZmlsZXNBZGFwdGVyIiwiZmlsZVVwbG9hZCIsImdyYXBoUUxQYXRoIiwiZ3JhcGhRTFB1YmxpY0ludHJvc3BlY3Rpb24iLCJncmFwaFFMU2NoZW1hIiwiaG9zdCIsImlkZW1wb3RlbmN5T3B0aW9ucyIsImphdmFzY3JpcHRLZXkiLCJqc29uTG9ncyIsImxpdmVRdWVyeSIsImxpdmVRdWVyeVNlcnZlck9wdGlvbnMiLCJsb2dnZXJBZGFwdGVyIiwibG9nTGV2ZWwiLCJsb2dMZXZlbHMiLCJsb2dzRm9sZGVyIiwibWFpbnRlbmFuY2VLZXkiLCJtYWludGVuYW5jZUtleUlwcyIsIm1hc3RlcktleSIsIm1hc3RlcktleUlwcyIsIm1hc3RlcktleVR0bCIsIm1heExpbWl0IiwibWF4TG9nRmlsZXMiLCJudW1iZXJPclN0cmluZ1BhcnNlciIsIm1heFVwbG9hZFNpemUiLCJtaWRkbGV3YXJlIiwibW91bnRHcmFwaFFMIiwibW91bnRQYXRoIiwibW91bnRQbGF5Z3JvdW5kIiwib2JqZWN0SWRTaXplIiwicGFnZXMiLCJwYXNzd29yZFBvbGljeSIsInBsYXlncm91bmRQYXRoIiwicG9ydCIsInByZXNlcnZlRmlsZU5hbWUiLCJwcmV2ZW50TG9naW5XaXRoVW52ZXJpZmllZEVtYWlsIiwicHJldmVudFNpZ251cFdpdGhVbnZlcmlmaWVkRW1haWwiLCJwcm90ZWN0ZWRGaWVsZHMiLCJfVXNlciIsInB1YmxpY1NlcnZlclVSTCIsInB1c2giLCJyYXRlTGltaXQiLCJyZWFkT25seU1hc3RlcktleSIsInJlcXVlc3RDb250ZXh0TWlkZGxld2FyZSIsInJlcXVlc3RLZXl3b3JkRGVueWxpc3QiLCJrZXkiLCJ2YWx1ZSIsInJlc3RBUElLZXkiLCJyZXZva2VTZXNzaW9uT25QYXNzd29yZFJlc2V0Iiwic2NoZWR1bGVkUHVzaCIsInNjaGVtYSIsInNlY3VyaXR5Iiwic2VuZFVzZXJFbWFpbFZlcmlmaWNhdGlvbiIsInNlcnZlckNsb3NlQ29tcGxldGUiLCJzZXJ2ZXJVUkwiLCJzZXNzaW9uTGVuZ3RoIiwic2lsZW50Iiwic3RhcnRMaXZlUXVlcnlTZXJ2ZXIiLCJ0cnVzdFByb3h5IiwidXNlclNlbnNpdGl2ZUZpZWxkcyIsInZlcmJvc2UiLCJ2ZXJpZnlVc2VyRW1haWxzIiwid2ViaG9va0tleSIsIlJhdGVMaW1pdE9wdGlvbnMiLCJlcnJvclJlc3BvbnNlTWVzc2FnZSIsImluY2x1ZGVJbnRlcm5hbFJlcXVlc3RzIiwiaW5jbHVkZU1hc3RlcktleSIsInJlZGlzVXJsIiwicmVxdWVzdENvdW50IiwicmVxdWVzdE1ldGhvZHMiLCJyZXF1ZXN0UGF0aCIsInJlcXVlc3RUaW1lV2luZG93Iiwiem9uZSIsIlNlY3VyaXR5T3B0aW9ucyIsImNoZWNrR3JvdXBzIiwiZW5hYmxlQ2hlY2siLCJlbmFibGVDaGVja0xvZyIsIlBhZ2VzT3B0aW9ucyIsImN1c3RvbVJvdXRlcyIsImN1c3RvbVVybHMiLCJlbmFibGVMb2NhbGl6YXRpb24iLCJlbmFibGVSb3V0ZXIiLCJmb3JjZVJlZGlyZWN0IiwibG9jYWxpemF0aW9uRmFsbGJhY2tMb2NhbGUiLCJsb2NhbGl6YXRpb25Kc29uUGF0aCIsInBhZ2VzRW5kcG9pbnQiLCJwYWdlc1BhdGgiLCJwbGFjZWhvbGRlcnMiLCJQYWdlc1JvdXRlIiwiaGFuZGxlciIsIm1ldGhvZCIsInBhdGgiLCJQYWdlc0N1c3RvbVVybHNPcHRpb25zIiwiZW1haWxWZXJpZmljYXRpb25MaW5rRXhwaXJlZCIsImVtYWlsVmVyaWZpY2F0aW9uTGlua0ludmFsaWQiLCJlbWFpbFZlcmlmaWNhdGlvblNlbmRGYWlsIiwiZW1haWxWZXJpZmljYXRpb25TZW5kU3VjY2VzcyIsImVtYWlsVmVyaWZpY2F0aW9uU3VjY2VzcyIsInBhc3N3b3JkUmVzZXQiLCJwYXNzd29yZFJlc2V0TGlua0ludmFsaWQiLCJwYXNzd29yZFJlc2V0U3VjY2VzcyIsIkN1c3RvbVBhZ2VzT3B0aW9ucyIsImNob29zZVBhc3N3b3JkIiwiZXhwaXJlZFZlcmlmaWNhdGlvbkxpbmsiLCJpbnZhbGlkTGluayIsImludmFsaWRQYXNzd29yZFJlc2V0TGluayIsImludmFsaWRWZXJpZmljYXRpb25MaW5rIiwibGlua1NlbmRGYWlsIiwibGlua1NlbmRTdWNjZXNzIiwicGFyc2VGcmFtZVVSTCIsInZlcmlmeUVtYWlsU3VjY2VzcyIsIkxpdmVRdWVyeU9wdGlvbnMiLCJjbGFzc05hbWVzIiwicHViU3ViQWRhcHRlciIsInJlZGlzT3B0aW9ucyIsInJlZGlzVVJMIiwid3NzQWRhcHRlciIsIkxpdmVRdWVyeVNlcnZlck9wdGlvbnMiLCJjYWNoZVRpbWVvdXQiLCJrZXlQYWlycyIsIndlYnNvY2tldFRpbWVvdXQiLCJJZGVtcG90ZW5jeU9wdGlvbnMiLCJwYXRocyIsInR0bCIsIkFjY291bnRMb2Nrb3V0T3B0aW9ucyIsImR1cmF0aW9uIiwidGhyZXNob2xkIiwidW5sb2NrT25QYXNzd29yZFJlc2V0IiwiUGFzc3dvcmRQb2xpY3lPcHRpb25zIiwiZG9Ob3RBbGxvd1VzZXJuYW1lIiwibWF4UGFzc3dvcmRBZ2UiLCJtYXhQYXNzd29yZEhpc3RvcnkiLCJyZXNldFBhc3N3b3JkU3VjY2Vzc09uSW52YWxpZEVtYWlsIiwicmVzZXRUb2tlblJldXNlSWZWYWxpZCIsInJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uIiwidmFsaWRhdGlvbkVycm9yIiwidmFsaWRhdG9yQ2FsbGJhY2siLCJ2YWxpZGF0b3JQYXR0ZXJuIiwiRmlsZVVwbG9hZE9wdGlvbnMiLCJlbmFibGVGb3JBbm9ueW1vdXNVc2VyIiwiZW5hYmxlRm9yQXV0aGVudGljYXRlZFVzZXIiLCJlbmFibGVGb3JQdWJsaWMiLCJmaWxlRXh0ZW5zaW9ucyIsIkRhdGFiYXNlT3B0aW9ucyIsImF1dG9TZWxlY3RGYW1pbHkiLCJhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQiLCJjb25uZWN0VGltZW91dE1TIiwiZGlzYWJsZUluZGV4RmllbGRWYWxpZGF0aW9uIiwiZW5hYmxlU2NoZW1hSG9va3MiLCJtYXhQb29sU2l6ZSIsIm1heFN0YWxlbmVzc1NlY29uZHMiLCJtYXhUaW1lTVMiLCJtaW5Qb29sU2l6ZSIsInJldHJ5V3JpdGVzIiwic2NoZW1hQ2FjaGVUdGwiLCJzb2NrZXRUaW1lb3V0TVMiLCJBdXRoQWRhcHRlciIsImVuYWJsZWQiLCJMb2dMZXZlbHMiLCJjbG91ZEZ1bmN0aW9uRXJyb3IiLCJjbG91ZEZ1bmN0aW9uU3VjY2VzcyIsInRyaWdnZXJBZnRlciIsInRyaWdnZXJCZWZvcmVFcnJvciIsInRyaWdnZXJCZWZvcmVTdWNjZXNzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL09wdGlvbnMvRGVmaW5pdGlvbnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbioqKiogR0VORVJBVEVEIENPREUgKioqKlxuVGhpcyBjb2RlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSByZXNvdXJjZXMvYnVpbGRDb25maWdEZWZpbml0aW9ucy5qc1xuRG8gbm90IGVkaXQgbWFudWFsbHksIGJ1dCB1cGRhdGUgT3B0aW9ucy9pbmRleC5qc1xuKi9cbnZhciBwYXJzZXJzID0gcmVxdWlyZSgnLi9wYXJzZXJzJyk7XG5tb2R1bGUuZXhwb3J0cy5TY2hlbWFPcHRpb25zID0ge1xuICBhZnRlck1pZ3JhdGlvbjoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9TQ0hFTUFfQUZURVJfTUlHUkFUSU9OJyxcbiAgICBoZWxwOiAnRXhlY3V0ZSBhIGNhbGxiYWNrIGFmdGVyIHJ1bm5pbmcgc2NoZW1hIG1pZ3JhdGlvbnMuJyxcbiAgfSxcbiAgYmVmb3JlTWlncmF0aW9uOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1NDSEVNQV9CRUZPUkVfTUlHUkFUSU9OJyxcbiAgICBoZWxwOiAnRXhlY3V0ZSBhIGNhbGxiYWNrIGJlZm9yZSBydW5uaW5nIHNjaGVtYSBtaWdyYXRpb25zLicsXG4gIH0sXG4gIGRlZmluaXRpb25zOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1NDSEVNQV9ERUZJTklUSU9OUycsXG4gICAgaGVscDpcbiAgICAgICdSZXN0IHJlcHJlc2VudGF0aW9uIG9uIFBhcnNlLlNjaGVtYSBodHRwczovL2RvY3MucGFyc2VwbGF0Zm9ybS5vcmcvcmVzdC9ndWlkZS8jYWRkaW5nLWEtc2NoZW1hJyxcbiAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICBhY3Rpb246IHBhcnNlcnMub2JqZWN0UGFyc2VyLFxuICAgIGRlZmF1bHQ6IFtdLFxuICB9LFxuICBkZWxldGVFeHRyYUZpZWxkczoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9TQ0hFTUFfREVMRVRFX0VYVFJBX0ZJRUxEUycsXG4gICAgaGVscDpcbiAgICAgICdJcyB0cnVlIGlmIFBhcnNlIFNlcnZlciBzaG91bGQgZGVsZXRlIGFueSBmaWVsZHMgbm90IGRlZmluZWQgaW4gYSBzY2hlbWEgZGVmaW5pdGlvbi4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGR1cmluZyBkZXZlbG9wbWVudC4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBrZWVwVW5rbm93bkluZGV4ZXM6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfU0NIRU1BX0tFRVBfVU5LTk9XTl9JTkRFWEVTJyxcbiAgICBoZWxwOlxuICAgICAgXCIoT3B0aW9uYWwpIEtlZXAgaW5kZXhlcyB0aGF0IGFyZSBwcmVzZW50IGluIHRoZSBkYXRhYmFzZSBidXQgbm90IGRlZmluZWQgaW4gdGhlIHNjaGVtYS4gU2V0IHRoaXMgdG8gYHRydWVgIGlmIHlvdSBhcmUgYWRkaW5nIGluZGV4ZXMgbWFudWFsbHksIHNvIHRoYXQgdGhleSB3b24ndCBiZSByZW1vdmVkIHdoZW4gcnVubmluZyBzY2hlbWEgbWlncmF0aW9uLiBEZWZhdWx0IGlzIGBmYWxzZWAuXCIsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGxvY2tTY2hlbWFzOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1NDSEVNQV9MT0NLX1NDSEVNQVMnLFxuICAgIGhlbHA6XG4gICAgICAnSXMgdHJ1ZSBpZiBQYXJzZSBTZXJ2ZXIgd2lsbCByZWplY3QgYW55IGF0dGVtcHRzIHRvIG1vZGlmeSB0aGUgc2NoZW1hIHdoaWxlIHRoZSBzZXJ2ZXIgaXMgcnVubmluZy4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICByZWNyZWF0ZU1vZGlmaWVkRmllbGRzOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1NDSEVNQV9SRUNSRUFURV9NT0RJRklFRF9GSUVMRFMnLFxuICAgIGhlbHA6XG4gICAgICAnSXMgdHJ1ZSBpZiBQYXJzZSBTZXJ2ZXIgc2hvdWxkIHJlY3JlYXRlIGFueSBmaWVsZHMgdGhhdCBhcmUgZGlmZmVyZW50IGJldHdlZW4gdGhlIGN1cnJlbnQgZGF0YWJhc2Ugc2NoZW1hIGFuZCB0aGVzY2hlbWEgZGVmaW5pdGlvbi4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGR1cmluZyBkZXZlbG9wbWVudC4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBzdHJpY3Q6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfU0NIRU1BX1NUUklDVCcsXG4gICAgaGVscDogJ0lzIHRydWUgaWYgUGFyc2UgU2VydmVyIHNob3VsZCBleGl0IGlmIHNjaGVtYSB1cGRhdGUgZmFpbC4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxufTtcbm1vZHVsZS5leHBvcnRzLlBhcnNlU2VydmVyT3B0aW9ucyA9IHtcbiAgYWNjb3VudExvY2tvdXQ6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQUNDT1VOVF9MT0NLT1VUJyxcbiAgICBoZWxwOiAnVGhlIGFjY291bnQgbG9ja291dCBwb2xpY3kgZm9yIGZhaWxlZCBsb2dpbiBhdHRlbXB0cy4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5vYmplY3RQYXJzZXIsXG4gICAgdHlwZTogJ0FjY291bnRMb2Nrb3V0T3B0aW9ucycsXG4gIH0sXG4gIGFsbG93Q2xpZW50Q2xhc3NDcmVhdGlvbjoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9BTExPV19DTElFTlRfQ0xBU1NfQ1JFQVRJT04nLFxuICAgIGhlbHA6ICdFbmFibGUgKG9yIGRpc2FibGUpIGNsaWVudCBjbGFzcyBjcmVhdGlvbiwgZGVmYXVsdHMgdG8gZmFsc2UnLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBhbGxvd0N1c3RvbU9iamVjdElkOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0FMTE9XX0NVU1RPTV9PQkpFQ1RfSUQnLFxuICAgIGhlbHA6ICdFbmFibGUgKG9yIGRpc2FibGUpIGN1c3RvbSBvYmplY3RJZCcsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGFsbG93RXhwaXJlZEF1dGhEYXRhVG9rZW46IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQUxMT1dfRVhQSVJFRF9BVVRIX0RBVEFfVE9LRU4nLFxuICAgIGhlbHA6XG4gICAgICAnQWxsb3cgYSB1c2VyIHRvIGxvZyBpbiBldmVuIGlmIHRoZSAzcmQgcGFydHkgYXV0aGVudGljYXRpb24gdG9rZW4gdGhhdCB3YXMgdXNlZCB0byBzaWduIGluIHRvIHRoZWlyIGFjY291bnQgaGFzIGV4cGlyZWQuIElmIHRoaXMgaXMgc2V0IHRvIGBmYWxzZWAsIHRoZW4gdGhlIHRva2VuIHdpbGwgYmUgdmFsaWRhdGVkIGV2ZXJ5IHRpbWUgdGhlIHVzZXIgc2lnbnMgaW4gdG8gdGhlaXIgYWNjb3VudC4gVGhpcyByZWZlcnMgdG8gdGhlIHRva2VuIHRoYXQgaXMgc3RvcmVkIGluIHRoZSBgX1VzZXIuYXV0aERhdGFgIGZpZWxkLiBEZWZhdWx0cyB0byBgZmFsc2VgLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGFsbG93SGVhZGVyczoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9BTExPV19IRUFERVJTJyxcbiAgICBoZWxwOiAnQWRkIGhlYWRlcnMgdG8gQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmFycmF5UGFyc2VyLFxuICB9LFxuICBhbGxvd09yaWdpbjoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9BTExPV19PUklHSU4nLFxuICAgIGhlbHA6XG4gICAgICAnU2V0cyBvcmlnaW5zIGZvciBBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4uIFRoaXMgY2FuIGJlIGEgc3RyaW5nIGZvciBhIHNpbmdsZSBvcmlnaW4gb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncyBmb3IgbXVsdGlwbGUgb3JpZ2lucy4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5hcnJheVBhcnNlcixcbiAgfSxcbiAgYW5hbHl0aWNzQWRhcHRlcjoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9BTkFMWVRJQ1NfQURBUFRFUicsXG4gICAgaGVscDogJ0FkYXB0ZXIgbW9kdWxlIGZvciB0aGUgYW5hbHl0aWNzJyxcbiAgICBhY3Rpb246IHBhcnNlcnMubW9kdWxlT3JPYmplY3RQYXJzZXIsXG4gIH0sXG4gIGFwcElkOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0FQUExJQ0FUSU9OX0lEJyxcbiAgICBoZWxwOiAnWW91ciBQYXJzZSBBcHBsaWNhdGlvbiBJRCcsXG4gICAgcmVxdWlyZWQ6IHRydWUsXG4gIH0sXG4gIGFwcE5hbWU6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQVBQX05BTUUnLFxuICAgIGhlbHA6ICdTZXRzIHRoZSBhcHAgbmFtZScsXG4gIH0sXG4gIGF1dGg6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQVVUSF9QUk9WSURFUlMnLFxuICAgIGhlbHA6XG4gICAgICAnQ29uZmlndXJhdGlvbiBmb3IgeW91ciBhdXRoZW50aWNhdGlvbiBwcm92aWRlcnMsIGFzIHN0cmluZ2lmaWVkIEpTT04uIFNlZSBodHRwOi8vZG9jcy5wYXJzZXBsYXRmb3JtLm9yZy9wYXJzZS1zZXJ2ZXIvZ3VpZGUvI29hdXRoLWFuZC0zcmQtcGFydHktYXV0aGVudGljYXRpb24nLFxuICB9LFxuICBjYWNoZUFkYXB0ZXI6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQ0FDSEVfQURBUFRFUicsXG4gICAgaGVscDogJ0FkYXB0ZXIgbW9kdWxlIGZvciB0aGUgY2FjaGUnLFxuICAgIGFjdGlvbjogcGFyc2Vycy5tb2R1bGVPck9iamVjdFBhcnNlcixcbiAgfSxcbiAgY2FjaGVNYXhTaXplOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0NBQ0hFX01BWF9TSVpFJyxcbiAgICBoZWxwOiAnU2V0cyB0aGUgbWF4aW11bSBzaXplIGZvciB0aGUgaW4gbWVtb3J5IGNhY2hlLCBkZWZhdWx0cyB0byAxMDAwMCcsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm51bWJlclBhcnNlcignY2FjaGVNYXhTaXplJyksXG4gICAgZGVmYXVsdDogMTAwMDAsXG4gIH0sXG4gIGNhY2hlVFRMOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0NBQ0hFX1RUTCcsXG4gICAgaGVscDogJ1NldHMgdGhlIFRUTCBmb3IgdGhlIGluIG1lbW9yeSBjYWNoZSAoaW4gbXMpLCBkZWZhdWx0cyB0byA1MDAwICg1IHNlY29uZHMpJyxcbiAgICBhY3Rpb246IHBhcnNlcnMubnVtYmVyUGFyc2VyKCdjYWNoZVRUTCcpLFxuICAgIGRlZmF1bHQ6IDUwMDAsXG4gIH0sXG4gIGNsaWVudEtleToge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9DTElFTlRfS0VZJyxcbiAgICBoZWxwOiAnS2V5IGZvciBpT1MsIE1hY09TLCB0dk9TIGNsaWVudHMnLFxuICB9LFxuICBjbG91ZDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9DTE9VRCcsXG4gICAgaGVscDogJ0Z1bGwgcGF0aCB0byB5b3VyIGNsb3VkIGNvZGUgbWFpbi5qcycsXG4gIH0sXG4gIGNsdXN0ZXI6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQ0xVU1RFUicsXG4gICAgaGVscDogJ1J1biB3aXRoIGNsdXN0ZXIsIG9wdGlvbmFsbHkgc2V0IHRoZSBudW1iZXIgb2YgcHJvY2Vzc2VzIGRlZmF1bHQgdG8gb3MuY3B1cygpLmxlbmd0aCcsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm51bWJlck9yQm9vbGVhblBhcnNlcixcbiAgfSxcbiAgY29sbGVjdGlvblByZWZpeDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9DT0xMRUNUSU9OX1BSRUZJWCcsXG4gICAgaGVscDogJ0EgY29sbGVjdGlvbiBwcmVmaXggZm9yIHRoZSBjbGFzc2VzJyxcbiAgICBkZWZhdWx0OiAnJyxcbiAgfSxcbiAgY29udmVydEVtYWlsVG9Mb3dlcmNhc2U6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQ09OVkVSVF9FTUFJTF9UT19MT1dFUkNBU0UnLFxuICAgIGhlbHA6XG4gICAgICAnT3B0aW9uYWwuIElmIHNldCB0byBgdHJ1ZWAsIHRoZSBgZW1haWxgIHByb3BlcnR5IG9mIGEgdXNlciBpcyBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBsb3dlcmNhc2UgYmVmb3JlIGJlaW5nIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UuIENvbnNlcXVlbnRseSwgcXVlcmllcyBtdXN0IG1hdGNoIHRoZSBjYXNlIGFzIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UsIHdoaWNoIHdvdWxkIGJlIGxvd2VyY2FzZSBpbiB0aGlzIHNjZW5hcmlvLiBJZiBgZmFsc2VgLCB0aGUgYGVtYWlsYCBwcm9wZXJ0eSBpcyBzdG9yZWQgYXMgc2V0LCB3aXRob3V0IGFueSBjYXNlIG1vZGlmaWNhdGlvbnMuIERlZmF1bHQgaXMgYGZhbHNlYC4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBjb252ZXJ0VXNlcm5hbWVUb0xvd2VyY2FzZToge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9DT05WRVJUX1VTRVJOQU1FX1RPX0xPV0VSQ0FTRScsXG4gICAgaGVscDpcbiAgICAgICdPcHRpb25hbC4gSWYgc2V0IHRvIGB0cnVlYCwgdGhlIGB1c2VybmFtZWAgcHJvcGVydHkgb2YgYSB1c2VyIGlzIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIGxvd2VyY2FzZSBiZWZvcmUgYmVpbmcgc3RvcmVkIGluIHRoZSBkYXRhYmFzZS4gQ29uc2VxdWVudGx5LCBxdWVyaWVzIG11c3QgbWF0Y2ggdGhlIGNhc2UgYXMgc3RvcmVkIGluIHRoZSBkYXRhYmFzZSwgd2hpY2ggd291bGQgYmUgbG93ZXJjYXNlIGluIHRoaXMgc2NlbmFyaW8uIElmIGBmYWxzZWAsIHRoZSBgdXNlcm5hbWVgIHByb3BlcnR5IGlzIHN0b3JlZCBhcyBzZXQsIHdpdGhvdXQgYW55IGNhc2UgbW9kaWZpY2F0aW9ucy4gRGVmYXVsdCBpcyBgZmFsc2VgLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGN1c3RvbVBhZ2VzOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0NVU1RPTV9QQUdFUycsXG4gICAgaGVscDogJ2N1c3RvbSBwYWdlcyBmb3IgcGFzc3dvcmQgdmFsaWRhdGlvbiBhbmQgcmVzZXQnLFxuICAgIGFjdGlvbjogcGFyc2Vycy5vYmplY3RQYXJzZXIsXG4gICAgdHlwZTogJ0N1c3RvbVBhZ2VzT3B0aW9ucycsXG4gICAgZGVmYXVsdDoge30sXG4gIH0sXG4gIGRhdGFiYXNlQWRhcHRlcjoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9EQVRBQkFTRV9BREFQVEVSJyxcbiAgICBoZWxwOlxuICAgICAgJ0FkYXB0ZXIgbW9kdWxlIGZvciB0aGUgZGF0YWJhc2U7IGFueSBvcHRpb25zIHRoYXQgYXJlIG5vdCBleHBsaWNpdGx5IGRlc2NyaWJlZCBoZXJlIGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlIGRhdGFiYXNlIGNsaWVudC4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5tb2R1bGVPck9iamVjdFBhcnNlcixcbiAgfSxcbiAgZGF0YWJhc2VPcHRpb25zOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0RBVEFCQVNFX09QVElPTlMnLFxuICAgIGhlbHA6ICdPcHRpb25zIHRvIHBhc3MgdG8gdGhlIGRhdGFiYXNlIGNsaWVudCcsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm9iamVjdFBhcnNlcixcbiAgICB0eXBlOiAnRGF0YWJhc2VPcHRpb25zJyxcbiAgfSxcbiAgZGF0YWJhc2VVUkk6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfREFUQUJBU0VfVVJJJyxcbiAgICBoZWxwOiAnVGhlIGZ1bGwgVVJJIHRvIHlvdXIgZGF0YWJhc2UuIFN1cHBvcnRlZCBkYXRhYmFzZXMgYXJlIG1vbmdvZGIgb3IgcG9zdGdyZXMuJyxcbiAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICBkZWZhdWx0OiAnbW9uZ29kYjovL2xvY2FsaG9zdDoyNzAxNy9wYXJzZScsXG4gIH0sXG4gIGRlZmF1bHRMaW1pdDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9ERUZBVUxUX0xJTUlUJyxcbiAgICBoZWxwOiAnRGVmYXVsdCB2YWx1ZSBmb3IgbGltaXQgb3B0aW9uIG9uIHF1ZXJpZXMsIGRlZmF1bHRzIHRvIGAxMDBgLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm51bWJlclBhcnNlcignZGVmYXVsdExpbWl0JyksXG4gICAgZGVmYXVsdDogMTAwLFxuICB9LFxuICBkaXJlY3RBY2Nlc3M6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfRElSRUNUX0FDQ0VTUycsXG4gICAgaGVscDpcbiAgICAgICdTZXQgdG8gYHRydWVgIGlmIFBhcnNlIHJlcXVlc3RzIHdpdGhpbiB0aGUgc2FtZSBOb2RlLmpzIGVudmlyb25tZW50IGFzIFBhcnNlIFNlcnZlciBzaG91bGQgYmUgcm91dGVkIHRvIFBhcnNlIFNlcnZlciBkaXJlY3RseSBpbnN0ZWFkIG9mIHZpYSB0aGUgSFRUUCBpbnRlcmZhY2UuIERlZmF1bHQgaXMgYGZhbHNlYC48YnI+PGJyPklmIHNldCB0byBgZmFsc2VgIHRoZW4gUGFyc2UgcmVxdWVzdHMgd2l0aGluIHRoZSBzYW1lIE5vZGUuanMgZW52aXJvbm1lbnQgYXMgUGFyc2UgU2VydmVyIGFyZSBleGVjdXRlZCBhcyBIVFRQIHJlcXVlc3RzIHNlbnQgdG8gUGFyc2UgU2VydmVyIHZpYSB0aGUgYHNlcnZlclVSTGAuIEZvciBleGFtcGxlLCBhIGBQYXJzZS5RdWVyeWAgaW4gQ2xvdWQgQ29kZSBpcyBjYWxsaW5nIFBhcnNlIFNlcnZlciB2aWEgYSBIVFRQIHJlcXVlc3QuIFRoZSBzZXJ2ZXIgaXMgZXNzZW50aWFsbHkgbWFraW5nIGEgSFRUUCByZXF1ZXN0IHRvIGl0c2VsZiwgdW5uZWNlc3NhcmlseSB1c2luZyBuZXR3b3JrIHJlc291cmNlcyBzdWNoIGFzIG5ldHdvcmsgcG9ydHMuPGJyPjxicj5cXHUyNkEwXFx1RkUwRiBJbiBlbnZpcm9ubWVudHMgd2hlcmUgbXVsdGlwbGUgUGFyc2UgU2VydmVyIGluc3RhbmNlcyBydW4gYmVoaW5kIGEgbG9hZCBiYWxhbmNlciBhbmQgUGFyc2UgcmVxdWVzdHMgd2l0aGluIHRoZSBjdXJyZW50IE5vZGUuanMgZW52aXJvbm1lbnQgc2hvdWxkIGJlIHJvdXRlZCB2aWEgdGhlIGxvYWQgYmFsYW5jZXIgYW5kIGRpc3RyaWJ1dGVkIGFzIEhUVFAgcmVxdWVzdHMgYW1vbmcgYWxsIGluc3RhbmNlcyB2aWEgdGhlIGBzZXJ2ZXJVUkxgLCB0aGlzIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIGRvdE5ldEtleToge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9ET1RfTkVUX0tFWScsXG4gICAgaGVscDogJ0tleSBmb3IgVW5pdHkgYW5kIC5OZXQgU0RLJyxcbiAgfSxcbiAgZW1haWxBZGFwdGVyOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0VNQUlMX0FEQVBURVInLFxuICAgIGhlbHA6ICdBZGFwdGVyIG1vZHVsZSBmb3IgZW1haWwgc2VuZGluZycsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm1vZHVsZU9yT2JqZWN0UGFyc2VyLFxuICB9LFxuICBlbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0VNQUlMX1ZFUklGWV9UT0tFTl9SRVVTRV9JRl9WQUxJRCcsXG4gICAgaGVscDpcbiAgICAgICdTZXQgdG8gYHRydWVgIGlmIGEgZW1haWwgdmVyaWZpY2F0aW9uIHRva2VuIHNob3VsZCBiZSByZXVzZWQgaW4gY2FzZSBhbm90aGVyIHRva2VuIGlzIHJlcXVlc3RlZCBidXQgdGhlcmUgaXMgYSB0b2tlbiB0aGF0IGlzIHN0aWxsIHZhbGlkLCBpLmUuIGhhcyBub3QgZXhwaXJlZC4gVGhpcyBhdm9pZHMgdGhlIG9mdGVuIG9ic2VydmVkIGlzc3VlIHRoYXQgYSB1c2VyIHJlcXVlc3RzIG11bHRpcGxlIGVtYWlscyBhbmQgZG9lcyBub3Qga25vdyB3aGljaCBsaW5rIGNvbnRhaW5zIGEgdmFsaWQgdG9rZW4gYmVjYXVzZSBlYWNoIG5ld2x5IGdlbmVyYXRlZCB0b2tlbiB3b3VsZCBpbnZhbGlkYXRlIHRoZSBwcmV2aW91cyB0b2tlbi48YnI+PGJyPkRlZmF1bHQgaXMgYGZhbHNlYC48YnI+UmVxdWlyZXMgb3B0aW9uIGB2ZXJpZnlVc2VyRW1haWxzOiB0cnVlYC4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbjoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9FTUFJTF9WRVJJRllfVE9LRU5fVkFMSURJVFlfRFVSQVRJT04nLFxuICAgIGhlbHA6XG4gICAgICAnU2V0IHRoZSB2YWxpZGl0eSBkdXJhdGlvbiBvZiB0aGUgZW1haWwgdmVyaWZpY2F0aW9uIHRva2VuIGluIHNlY29uZHMgYWZ0ZXIgd2hpY2ggdGhlIHRva2VuIGV4cGlyZXMuIFRoZSB0b2tlbiBpcyB1c2VkIGluIHRoZSBsaW5rIHRoYXQgaXMgc2V0IGluIHRoZSBlbWFpbC4gQWZ0ZXIgdGhlIHRva2VuIGV4cGlyZXMsIHRoZSBsaW5rIGJlY29tZXMgaW52YWxpZCBhbmQgYSBuZXcgbGluayBoYXMgdG8gYmUgc2VudC4gSWYgdGhlIG9wdGlvbiBpcyBub3Qgc2V0IG9yIHNldCB0byBgdW5kZWZpbmVkYCwgdGhlbiB0aGUgdG9rZW4gbmV2ZXIgZXhwaXJlcy48YnI+PGJyPkZvciBleGFtcGxlLCB0byBleHBpcmUgdGhlIHRva2VuIGFmdGVyIDIgaG91cnMsIHNldCBhIHZhbHVlIG9mIDcyMDAgc2Vjb25kcyAoPSA2MCBzZWNvbmRzICogNjAgbWludXRlcyAqIDIgaG91cnMpLjxicj48YnI+RGVmYXVsdCBpcyBgdW5kZWZpbmVkYC48YnI+UmVxdWlyZXMgb3B0aW9uIGB2ZXJpZnlVc2VyRW1haWxzOiB0cnVlYC4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5udW1iZXJQYXJzZXIoJ2VtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uJyksXG4gIH0sXG4gIGVuYWJsZUFub255bW91c1VzZXJzOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0VOQUJMRV9BTk9OX1VTRVJTJyxcbiAgICBoZWxwOiAnRW5hYmxlIChvciBkaXNhYmxlKSBhbm9ueW1vdXMgdXNlcnMsIGRlZmF1bHRzIHRvIHRydWUnLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIGVuYWJsZUNvbGxhdGlvbkNhc2VDb21wYXJpc29uOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0VOQUJMRV9DT0xMQVRJT05fQ0FTRV9DT01QQVJJU09OJyxcbiAgICBoZWxwOlxuICAgICAgJ09wdGlvbmFsLiBJZiBzZXQgdG8gYHRydWVgLCB0aGUgY29sbGF0aW9uIHJ1bGUgb2YgY2FzZSBjb21wYXJpc29uIGZvciBxdWVyaWVzIGFuZCBpbmRleGVzIGlzIGVuYWJsZWQuIEVuYWJsZSB0aGlzIG9wdGlvbiB0byBydW4gUGFyc2UgU2VydmVyIHdpdGggTW9uZ29EQiBBdGxhcyBTZXJ2ZXJsZXNzIG9yIEFXUyBBbWF6b24gRG9jdW1lbnREQi4gSWYgYGZhbHNlYCwgdGhlIGNvbGxhdGlvbiBydWxlIG9mIGNhc2UgY29tcGFyaXNvbiBpcyBkaXNhYmxlZC4gRGVmYXVsdCBpcyBgZmFsc2VgLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGVuYWJsZUV4cHJlc3NFcnJvckhhbmRsZXI6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfRU5BQkxFX0VYUFJFU1NfRVJST1JfSEFORExFUicsXG4gICAgaGVscDogJ0VuYWJsZXMgdGhlIGRlZmF1bHQgZXhwcmVzcyBlcnJvciBoYW5kbGVyIGZvciBhbGwgZXJyb3JzJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgZW5hYmxlSW5zZWN1cmVBdXRoQWRhcHRlcnM6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfRU5BQkxFX0lOU0VDVVJFX0FVVEhfQURBUFRFUlMnLFxuICAgIGhlbHA6XG4gICAgICAnRW5hYmxlIChvciBkaXNhYmxlKSBpbnNlY3VyZSBhdXRoIGFkYXB0ZXJzLCBkZWZhdWx0cyB0byB0cnVlLiBJbnNlY3VyZSBhdXRoIGFkYXB0ZXJzIGFyZSBkZXByZWNhdGVkIGFuZCBpdCBpcyByZWNvbW1lbmRlZCB0byBkaXNhYmxlIHRoZW0uJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxuICBlbmNvZGVQYXJzZU9iamVjdEluQ2xvdWRGdW5jdGlvbjoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9FTkNPREVfUEFSU0VfT0JKRUNUX0lOX0NMT1VEX0ZVTkNUSU9OJyxcbiAgICBoZWxwOlxuICAgICAgJ0lmIHNldCB0byBgdHJ1ZWAsIGEgYFBhcnNlLk9iamVjdGAgdGhhdCBpcyBpbiB0aGUgcGF5bG9hZCB3aGVuIGNhbGxpbmcgYSBDbG91ZCBGdW5jdGlvbiB3aWxsIGJlIGNvbnZlcnRlZCB0byBhbiBpbnN0YW5jZSBvZiBgUGFyc2UuT2JqZWN0YC4gSWYgYGZhbHNlYCwgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBjb252ZXJ0ZWQgYW5kIGluc3RlYWQgYmUgYSBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdCwgd2hpY2ggY29udGFpbnMgdGhlIHJhdyBkYXRhIG9mIGEgYFBhcnNlLk9iamVjdGAgYnV0IGlzIG5vdCBhbiBhY3R1YWwgaW5zdGFuY2Ugb2YgYFBhcnNlLk9iamVjdGAuIERlZmF1bHQgaXMgYGZhbHNlYC4gPGJyPjxicj5cXHUyMTM5XFx1RkUwRiBUaGUgZXhwZWN0ZWQgYmVoYXZpb3Igd291bGQgYmUgdGhhdCB0aGUgb2JqZWN0IGlzIGNvbnZlcnRlZCB0byBhbiBpbnN0YW5jZSBvZiBgUGFyc2UuT2JqZWN0YCwgc28geW91IHdvdWxkIG5vcm1hbGx5IHNldCB0aGlzIG9wdGlvbiB0byBgdHJ1ZWAuIFRoZSBkZWZhdWx0IGlzIGBmYWxzZWAgYmVjYXVzZSB0aGlzIGlzIGEgdGVtcG9yYXJ5IG9wdGlvbiB0aGF0IGhhcyBiZWVuIGludHJvZHVjZWQgdG8gYXZvaWQgYSBicmVha2luZyBjaGFuZ2Ugd2hlbiBmaXhpbmcgYSBidWcgd2hlcmUgSmF2YVNjcmlwdCBvYmplY3RzIGFyZSBub3QgY29udmVydGVkIHRvIGFjdHVhbCBpbnN0YW5jZXMgb2YgYFBhcnNlLk9iamVjdGAuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxuICBlbmNyeXB0aW9uS2V5OiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0VOQ1JZUFRJT05fS0VZJyxcbiAgICBoZWxwOiAnS2V5IGZvciBlbmNyeXB0aW5nIHlvdXIgZmlsZXMnLFxuICB9LFxuICBlbmZvcmNlUHJpdmF0ZVVzZXJzOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0VORk9SQ0VfUFJJVkFURV9VU0VSUycsXG4gICAgaGVscDogJ1NldCB0byB0cnVlIGlmIG5ldyB1c2VycyBzaG91bGQgYmUgY3JlYXRlZCB3aXRob3V0IHB1YmxpYyByZWFkIGFuZCB3cml0ZSBhY2Nlc3MuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxuICBleHBpcmVJbmFjdGl2ZVNlc3Npb25zOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0VYUElSRV9JTkFDVElWRV9TRVNTSU9OUycsXG4gICAgaGVscDpcbiAgICAgICdTZXRzIHdoZXRoZXIgd2Ugc2hvdWxkIGV4cGlyZSB0aGUgaW5hY3RpdmUgc2Vzc2lvbnMsIGRlZmF1bHRzIHRvIHRydWUuIElmIGZhbHNlLCBhbGwgbmV3IHNlc3Npb25zIGFyZSBjcmVhdGVkIHdpdGggbm8gZXhwaXJhdGlvbiBkYXRlLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgfSxcbiAgZXh0ZW5kU2Vzc2lvbk9uVXNlOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0VYVEVORF9TRVNTSU9OX09OX1VTRScsXG4gICAgaGVscDpcbiAgICAgIFwiV2hldGhlciBQYXJzZSBTZXJ2ZXIgc2hvdWxkIGF1dG9tYXRpY2FsbHkgZXh0ZW5kIGEgdmFsaWQgc2Vzc2lvbiBieSB0aGUgc2Vzc2lvbkxlbmd0aC4gSW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2Vzc2lvbiB1cGRhdGVzIGluIHRoZSBkYXRhYmFzZSwgYSBzZXNzaW9uIHdpbGwgb25seSBiZSBleHRlbmRlZCB3aGVuIGEgcmVxdWVzdCBpcyByZWNlaXZlZCBhZnRlciBhdCBsZWFzdCBoYWxmIG9mIHRoZSBjdXJyZW50IHNlc3Npb24ncyBsaWZldGltZSBoYXMgcGFzc2VkLlwiLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBmaWxlS2V5OiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0ZJTEVfS0VZJyxcbiAgICBoZWxwOiAnS2V5IGZvciB5b3VyIGZpbGVzJyxcbiAgfSxcbiAgZmlsZXNBZGFwdGVyOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0ZJTEVTX0FEQVBURVInLFxuICAgIGhlbHA6ICdBZGFwdGVyIG1vZHVsZSBmb3IgdGhlIGZpbGVzIHN1Yi1zeXN0ZW0nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5tb2R1bGVPck9iamVjdFBhcnNlcixcbiAgfSxcbiAgZmlsZVVwbG9hZDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9GSUxFX1VQTE9BRF9PUFRJT05TJyxcbiAgICBoZWxwOiAnT3B0aW9ucyBmb3IgZmlsZSB1cGxvYWRzJyxcbiAgICBhY3Rpb246IHBhcnNlcnMub2JqZWN0UGFyc2VyLFxuICAgIHR5cGU6ICdGaWxlVXBsb2FkT3B0aW9ucycsXG4gICAgZGVmYXVsdDoge30sXG4gIH0sXG4gIGdyYXBoUUxQYXRoOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0dSQVBIUUxfUEFUSCcsXG4gICAgaGVscDogJ01vdW50IHBhdGggZm9yIHRoZSBHcmFwaFFMIGVuZHBvaW50LCBkZWZhdWx0cyB0byAvZ3JhcGhxbCcsXG4gICAgZGVmYXVsdDogJy9ncmFwaHFsJyxcbiAgfSxcbiAgZ3JhcGhRTFB1YmxpY0ludHJvc3BlY3Rpb246IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfR1JBUEhRTF9QVUJMSUNfSU5UUk9TUEVDVElPTicsXG4gICAgaGVscDogJ0VuYWJsZSBwdWJsaWMgaW50cm9zcGVjdGlvbiBmb3IgdGhlIEdyYXBoUUwgZW5kcG9pbnQsIGRlZmF1bHRzIHRvIGZhbHNlJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgZ3JhcGhRTFNjaGVtYToge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9HUkFQSF9RTFNDSEVNQScsXG4gICAgaGVscDogJ0Z1bGwgcGF0aCB0byB5b3VyIEdyYXBoUUwgY3VzdG9tIHNjaGVtYS5ncmFwaHFsIGZpbGUnLFxuICB9LFxuICBob3N0OiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0hPU1QnLFxuICAgIGhlbHA6ICdUaGUgaG9zdCB0byBzZXJ2ZSBQYXJzZVNlcnZlciBvbiwgZGVmYXVsdHMgdG8gMC4wLjAuMCcsXG4gICAgZGVmYXVsdDogJzAuMC4wLjAnLFxuICB9LFxuICBpZGVtcG90ZW5jeU9wdGlvbnM6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfRVhQRVJJTUVOVEFMX0lERU1QT1RFTkNZX09QVElPTlMnLFxuICAgIGhlbHA6XG4gICAgICAnT3B0aW9ucyBmb3IgcmVxdWVzdCBpZGVtcG90ZW5jeSB0byBkZWR1cGxpY2F0ZSBpZGVudGljYWwgcmVxdWVzdHMgdGhhdCBtYXkgYmUgY2F1c2VkIGJ5IG5ldHdvcmsgaXNzdWVzLiBDYXV0aW9uLCB0aGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlIHRoYXQgbWF5IG5vdCBiZSBhcHByb3ByaWF0ZSBmb3IgcHJvZHVjdGlvbi4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5vYmplY3RQYXJzZXIsXG4gICAgdHlwZTogJ0lkZW1wb3RlbmN5T3B0aW9ucycsXG4gICAgZGVmYXVsdDoge30sXG4gIH0sXG4gIGphdmFzY3JpcHRLZXk6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfSkFWQVNDUklQVF9LRVknLFxuICAgIGhlbHA6ICdLZXkgZm9yIHRoZSBKYXZhc2NyaXB0IFNESycsXG4gIH0sXG4gIGpzb25Mb2dzOiB7XG4gICAgZW52OiAnSlNPTl9MT0dTJyxcbiAgICBoZWxwOiAnTG9nIGFzIHN0cnVjdHVyZWQgSlNPTiBvYmplY3RzJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgfSxcbiAgbGl2ZVF1ZXJ5OiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0xJVkVfUVVFUlknLFxuICAgIGhlbHA6IFwicGFyc2Utc2VydmVyJ3MgTGl2ZVF1ZXJ5IGNvbmZpZ3VyYXRpb24gb2JqZWN0XCIsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm9iamVjdFBhcnNlcixcbiAgICB0eXBlOiAnTGl2ZVF1ZXJ5T3B0aW9ucycsXG4gIH0sXG4gIGxpdmVRdWVyeVNlcnZlck9wdGlvbnM6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfTElWRV9RVUVSWV9TRVJWRVJfT1BUSU9OUycsXG4gICAgaGVscDogJ0xpdmUgcXVlcnkgc2VydmVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAod2lsbCBzdGFydCB0aGUgbGl2ZVF1ZXJ5IHNlcnZlciknLFxuICAgIGFjdGlvbjogcGFyc2Vycy5vYmplY3RQYXJzZXIsXG4gICAgdHlwZTogJ0xpdmVRdWVyeVNlcnZlck9wdGlvbnMnLFxuICB9LFxuICBsb2dnZXJBZGFwdGVyOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0xPR0dFUl9BREFQVEVSJyxcbiAgICBoZWxwOiAnQWRhcHRlciBtb2R1bGUgZm9yIHRoZSBsb2dnaW5nIHN1Yi1zeXN0ZW0nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5tb2R1bGVPck9iamVjdFBhcnNlcixcbiAgfSxcbiAgbG9nTGV2ZWw6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfTE9HX0xFVkVMJyxcbiAgICBoZWxwOiAnU2V0cyB0aGUgbGV2ZWwgZm9yIGxvZ3MnLFxuICB9LFxuICBsb2dMZXZlbHM6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfTE9HX0xFVkVMUycsXG4gICAgaGVscDogJyhPcHRpb25hbCkgT3ZlcnJpZGVzIHRoZSBsb2cgbGV2ZWxzIHVzZWQgaW50ZXJuYWxseSBieSBQYXJzZSBTZXJ2ZXIgdG8gbG9nIGV2ZW50cy4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5vYmplY3RQYXJzZXIsXG4gICAgdHlwZTogJ0xvZ0xldmVscycsXG4gICAgZGVmYXVsdDoge30sXG4gIH0sXG4gIGxvZ3NGb2xkZXI6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfTE9HU19GT0xERVInLFxuICAgIGhlbHA6IFwiRm9sZGVyIGZvciB0aGUgbG9ncyAoZGVmYXVsdHMgdG8gJy4vbG9ncycpOyBzZXQgdG8gbnVsbCB0byBkaXNhYmxlIGZpbGUgYmFzZWQgbG9nZ2luZ1wiLFxuICAgIGRlZmF1bHQ6ICcuL2xvZ3MnLFxuICB9LFxuICBtYWludGVuYW5jZUtleToge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9NQUlOVEVOQU5DRV9LRVknLFxuICAgIGhlbHA6XG4gICAgICAnKE9wdGlvbmFsKSBUaGUgbWFpbnRlbmFuY2Uga2V5IGlzIHVzZWQgZm9yIG1vZGlmeWluZyBpbnRlcm5hbCBhbmQgcmVhZC1vbmx5IGZpZWxkcyBvZiBQYXJzZSBTZXJ2ZXIuPGJyPjxicj5cXHUyNkEwXFx1RkUwRiBUaGlzIGtleSBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBwYXJ0IG9mIGEgcmVndWxhciBvcGVyYXRpb24gb2YgUGFyc2UgU2VydmVyLiBUaGlzIGtleSBpcyBpbnRlbmRlZCB0byBjb25kdWN0IG91dC1vZi1iYW5kIGNoYW5nZXMgc3VjaCBhcyBvbmUtdGltZSBtaWdyYXRpb25zIG9yIGRhdGEgY29ycmVjdGlvbiB0YXNrcy4gSW50ZXJuYWwgZmllbGRzIGFyZSBub3Qgb2ZmaWNpYWxseSBkb2N1bWVudGVkIGFuZCBtYXkgY2hhbmdlIGF0IGFueSB0aW1lIHdpdGhvdXQgcHVibGljYXRpb24gaW4gcmVsZWFzZSBjaGFuZ2Vsb2dzLiBXZSBzdHJvbmdseSBhZHZpY2Ugbm90IHRvIHJlbHkgb24gaW50ZXJuYWwgZmllbGRzIGFzIHBhcnQgb2YgeW91ciByZWd1bGFyIG9wZXJhdGlvbiBhbmQgdG8gaW52ZXN0aWdhdGUgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgcGxhbm5lZCBjaGFuZ2VzICpkaXJlY3RseSBpbiB0aGUgc291cmNlIGNvZGUqIG9mIHlvdXIgY3VycmVudCB2ZXJzaW9uIG9mIFBhcnNlIFNlcnZlci4nLFxuICAgIHJlcXVpcmVkOiB0cnVlLFxuICB9LFxuICBtYWludGVuYW5jZUtleUlwczoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9NQUlOVEVOQU5DRV9LRVlfSVBTJyxcbiAgICBoZWxwOlxuICAgICAgXCIoT3B0aW9uYWwpIFJlc3RyaWN0cyB0aGUgdXNlIG9mIG1haW50ZW5hbmNlIGtleSBwZXJtaXNzaW9ucyB0byBhIGxpc3Qgb2YgSVAgYWRkcmVzc2VzIG9yIHJhbmdlcy48YnI+PGJyPlRoaXMgb3B0aW9uIGFjY2VwdHMgYSBsaXN0IG9mIHNpbmdsZSBJUCBhZGRyZXNzZXMsIGZvciBleGFtcGxlIGBbJzEwLjAuMC4xJywgJzEwLjAuMC4yJ11gLiBZb3UgY2FuIGFsc28gdXNlIENJRFIgbm90YXRpb24gdG8gc3BlY2lmeSBhbiBJUCBhZGRyZXNzIHJhbmdlLCBmb3IgZXhhbXBsZSBgWycxMC4wLjEuMC8yNCddYC48YnI+PGJyPjxiPlNwZWNpYWwgc2NlbmFyaW9zOjwvYj48YnI+LSBTZXR0aW5nIGFuIGVtcHR5IGFycmF5IGBbXWAgbWVhbnMgdGhhdCB0aGUgbWFpbnRlbmFuY2Uga2V5IGNhbm5vdCBiZSB1c2VkIGV2ZW4gaW4gUGFyc2UgU2VydmVyIENsb3VkIENvZGUuIFRoaXMgdmFsdWUgY2Fubm90IGJlIHNldCB2aWEgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgYXMgdGhlcmUgaXMgbm8gd2F5IHRvIHBhc3MgYW4gZW1wdHkgYXJyYXkgdG8gUGFyc2UgU2VydmVyIHZpYSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS48YnI+LSBTZXR0aW5nIGBbJzAuMC4wLjAvMCcsICc6OjAnXWAgbWVhbnMgdG8gYWxsb3cgYW55IElQdjQgYW5kIElQdjYgYWRkcmVzcyB0byB1c2UgdGhlIG1haW50ZW5hbmNlIGtleSBhbmQgZWZmZWN0aXZlbHkgZGlzYWJsZXMgdGhlIElQIGZpbHRlci48YnI+PGJyPjxiPkNvbnNpZGVyYXRpb25zOjwvYj48YnI+LSBJUHY0IGFuZCBJUHY2IGFkZHJlc3NlcyBhcmUgbm90IGNvbXBhcmVkIGFnYWluc3QgZWFjaCBvdGhlci4gRWFjaCBJUCB2ZXJzaW9uIChJUHY0IGFuZCBJUHY2KSBuZWVkcyB0byBiZSBjb25zaWRlcmVkIHNlcGFyYXRlbHkuIEZvciBleGFtcGxlLCBgWycwLjAuMC4wLzAnXWAgYWxsb3dzIGFueSBJUHY0IGFkZHJlc3MgYW5kIGJsb2NrcyBldmVyeSBJUHY2IGFkZHJlc3MuIENvbnZlcnNlbHksIGBbJzo6MCddYCBhbGxvd3MgYW55IElQdjYgYWRkcmVzcyBhbmQgYmxvY2tzIGV2ZXJ5IElQdjQgYWRkcmVzcy48YnI+LSBLZWVwIGluIG1pbmQgdGhhdCB0aGUgSVAgdmVyc2lvbiBpbiB1c2UgZGVwZW5kcyBvbiB0aGUgbmV0d29yayBzdGFjayBvZiB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggUGFyc2UgU2VydmVyIHJ1bnMuIEEgbG9jYWwgZW52aXJvbm1lbnQgbWF5IHVzZSBhIGRpZmZlcmVudCBJUCB2ZXJzaW9uIHRoYW4gYSByZW1vdGUgZW52aXJvbm1lbnQuIEZvciBleGFtcGxlLCBpdCdzIHBvc3NpYmxlIHRoYXQgbG9jYWxseSB0aGUgdmFsdWUgYFsnMC4wLjAuMC8wJ11gIGFsbG93cyB0aGUgcmVxdWVzdCBJUCBiZWNhdXNlIHRoZSBlbnZpcm9ubWVudCBpcyB1c2luZyBJUHY0LCBidXQgd2hlbiBQYXJzZSBTZXJ2ZXIgaXMgZGVwbG95ZWQgcmVtb3RlbHkgdGhlIHJlcXVlc3QgSVAgaXMgYmxvY2tlZCBiZWNhdXNlIHRoZSByZW1vdGUgZW52aXJvbm1lbnQgaXMgdXNpbmcgSVB2Ni48YnI+LSBXaGVuIHNldHRpbmcgdGhlIG9wdGlvbiB2aWEgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdGhlIG5vdGF0aW9uIGlzIGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZywgZm9yIGV4YW1wbGUgYFxcXCIwLjAuMC4wLzAsOjowXFxcImAuPGJyPi0gSVB2NiB6b25lIGluZGljZXMgKGAlYCBzdWZmaXgpIGFyZSBub3Qgc3VwcG9ydGVkLCBmb3IgZXhhbXBsZSBgZmU4MDo6MSVldGgwYCwgYGZlODA6OjElMWAgb3IgYDo6MSVsb2AuPGJyPjxicj5EZWZhdWx0cyB0byBgWycxMjcuMC4wLjEnLCAnOjoxJ11gIHdoaWNoIG1lYW5zIHRoYXQgb25seSBgbG9jYWxob3N0YCwgdGhlIHNlcnZlciBpbnN0YW5jZSBvbiB3aGljaCBQYXJzZSBTZXJ2ZXIgcnVucywgaXMgYWxsb3dlZCB0byB1c2UgdGhlIG1haW50ZW5hbmNlIGtleS5cIixcbiAgICBhY3Rpb246IHBhcnNlcnMuYXJyYXlQYXJzZXIsXG4gICAgZGVmYXVsdDogWycxMjcuMC4wLjEnLCAnOjoxJ10sXG4gIH0sXG4gIG1hc3RlcktleToge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9NQVNURVJfS0VZJyxcbiAgICBoZWxwOiAnWW91ciBQYXJzZSBNYXN0ZXIgS2V5JyxcbiAgICByZXF1aXJlZDogdHJ1ZSxcbiAgfSxcbiAgbWFzdGVyS2V5SXBzOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX01BU1RFUl9LRVlfSVBTJyxcbiAgICBoZWxwOlxuICAgICAgXCIoT3B0aW9uYWwpIFJlc3RyaWN0cyB0aGUgdXNlIG9mIG1hc3RlciBrZXkgcGVybWlzc2lvbnMgdG8gYSBsaXN0IG9mIElQIGFkZHJlc3NlcyBvciByYW5nZXMuPGJyPjxicj5UaGlzIG9wdGlvbiBhY2NlcHRzIGEgbGlzdCBvZiBzaW5nbGUgSVAgYWRkcmVzc2VzLCBmb3IgZXhhbXBsZSBgWycxMC4wLjAuMScsICcxMC4wLjAuMiddYC4gWW91IGNhbiBhbHNvIHVzZSBDSURSIG5vdGF0aW9uIHRvIHNwZWNpZnkgYW4gSVAgYWRkcmVzcyByYW5nZSwgZm9yIGV4YW1wbGUgYFsnMTAuMC4xLjAvMjQnXWAuPGJyPjxicj48Yj5TcGVjaWFsIHNjZW5hcmlvczo8L2I+PGJyPi0gU2V0dGluZyBhbiBlbXB0eSBhcnJheSBgW11gIG1lYW5zIHRoYXQgdGhlIG1hc3RlciBrZXkgY2Fubm90IGJlIHVzZWQgZXZlbiBpbiBQYXJzZSBTZXJ2ZXIgQ2xvdWQgQ29kZS4gVGhpcyB2YWx1ZSBjYW5ub3QgYmUgc2V0IHZpYSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBhcyB0aGVyZSBpcyBubyB3YXkgdG8gcGFzcyBhbiBlbXB0eSBhcnJheSB0byBQYXJzZSBTZXJ2ZXIgdmlhIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLjxicj4tIFNldHRpbmcgYFsnMC4wLjAuMC8wJywgJzo6MCddYCBtZWFucyB0byBhbGxvdyBhbnkgSVB2NCBhbmQgSVB2NiBhZGRyZXNzIHRvIHVzZSB0aGUgbWFzdGVyIGtleSBhbmQgZWZmZWN0aXZlbHkgZGlzYWJsZXMgdGhlIElQIGZpbHRlci48YnI+PGJyPjxiPkNvbnNpZGVyYXRpb25zOjwvYj48YnI+LSBJUHY0IGFuZCBJUHY2IGFkZHJlc3NlcyBhcmUgbm90IGNvbXBhcmVkIGFnYWluc3QgZWFjaCBvdGhlci4gRWFjaCBJUCB2ZXJzaW9uIChJUHY0IGFuZCBJUHY2KSBuZWVkcyB0byBiZSBjb25zaWRlcmVkIHNlcGFyYXRlbHkuIEZvciBleGFtcGxlLCBgWycwLjAuMC4wLzAnXWAgYWxsb3dzIGFueSBJUHY0IGFkZHJlc3MgYW5kIGJsb2NrcyBldmVyeSBJUHY2IGFkZHJlc3MuIENvbnZlcnNlbHksIGBbJzo6MCddYCBhbGxvd3MgYW55IElQdjYgYWRkcmVzcyBhbmQgYmxvY2tzIGV2ZXJ5IElQdjQgYWRkcmVzcy48YnI+LSBLZWVwIGluIG1pbmQgdGhhdCB0aGUgSVAgdmVyc2lvbiBpbiB1c2UgZGVwZW5kcyBvbiB0aGUgbmV0d29yayBzdGFjayBvZiB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggUGFyc2UgU2VydmVyIHJ1bnMuIEEgbG9jYWwgZW52aXJvbm1lbnQgbWF5IHVzZSBhIGRpZmZlcmVudCBJUCB2ZXJzaW9uIHRoYW4gYSByZW1vdGUgZW52aXJvbm1lbnQuIEZvciBleGFtcGxlLCBpdCdzIHBvc3NpYmxlIHRoYXQgbG9jYWxseSB0aGUgdmFsdWUgYFsnMC4wLjAuMC8wJ11gIGFsbG93cyB0aGUgcmVxdWVzdCBJUCBiZWNhdXNlIHRoZSBlbnZpcm9ubWVudCBpcyB1c2luZyBJUHY0LCBidXQgd2hlbiBQYXJzZSBTZXJ2ZXIgaXMgZGVwbG95ZWQgcmVtb3RlbHkgdGhlIHJlcXVlc3QgSVAgaXMgYmxvY2tlZCBiZWNhdXNlIHRoZSByZW1vdGUgZW52aXJvbm1lbnQgaXMgdXNpbmcgSVB2Ni48YnI+LSBXaGVuIHNldHRpbmcgdGhlIG9wdGlvbiB2aWEgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdGhlIG5vdGF0aW9uIGlzIGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZywgZm9yIGV4YW1wbGUgYFxcXCIwLjAuMC4wLzAsOjowXFxcImAuPGJyPi0gSVB2NiB6b25lIGluZGljZXMgKGAlYCBzdWZmaXgpIGFyZSBub3Qgc3VwcG9ydGVkLCBmb3IgZXhhbXBsZSBgZmU4MDo6MSVldGgwYCwgYGZlODA6OjElMWAgb3IgYDo6MSVsb2AuPGJyPjxicj5EZWZhdWx0cyB0byBgWycxMjcuMC4wLjEnLCAnOjoxJ11gIHdoaWNoIG1lYW5zIHRoYXQgb25seSBgbG9jYWxob3N0YCwgdGhlIHNlcnZlciBpbnN0YW5jZSBvbiB3aGljaCBQYXJzZSBTZXJ2ZXIgcnVucywgaXMgYWxsb3dlZCB0byB1c2UgdGhlIG1hc3RlciBrZXkuXCIsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmFycmF5UGFyc2VyLFxuICAgIGRlZmF1bHQ6IFsnMTI3LjAuMC4xJywgJzo6MSddLFxuICB9LFxuICBtYXN0ZXJLZXlUdGw6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfTUFTVEVSX0tFWV9UVEwnLFxuICAgIGhlbHA6XG4gICAgICAnKE9wdGlvbmFsKSBUaGUgZHVyYXRpb24gaW4gc2Vjb25kcyBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgYG1hc3RlcktleWAgaXMgYmVpbmcgdXNlZCBiZWZvcmUgaXQgaXMgcmVxdWVzdGVkIGFnYWluIGlmIGBtYXN0ZXJLZXlgIGlzIHNldCB0byBhIGZ1bmN0aW9uLiBJZiBgbWFzdGVyS2V5YCBpcyBub3Qgc2V0IHRvIGEgZnVuY3Rpb24sIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QuIERlZmF1bHQgaXMgYDBgLCB3aGljaCBtZWFucyB0aGUgbWFzdGVyIGtleSBpcyByZXF1ZXN0ZWQgYnkgaW52b2tpbmcgdGhlICBgbWFzdGVyS2V5YCBmdW5jdGlvbiBldmVyeSB0aW1lIHRoZSBtYXN0ZXIga2V5IGlzIHVzZWQgaW50ZXJuYWxseSBieSBQYXJzZSBTZXJ2ZXIuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMubnVtYmVyUGFyc2VyKCdtYXN0ZXJLZXlUdGwnKSxcbiAgfSxcbiAgbWF4TGltaXQ6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfTUFYX0xJTUlUJyxcbiAgICBoZWxwOiAnTWF4IHZhbHVlIGZvciBsaW1pdCBvcHRpb24gb24gcXVlcmllcywgZGVmYXVsdHMgdG8gdW5saW1pdGVkJyxcbiAgICBhY3Rpb246IHBhcnNlcnMubnVtYmVyUGFyc2VyKCdtYXhMaW1pdCcpLFxuICB9LFxuICBtYXhMb2dGaWxlczoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9NQVhfTE9HX0ZJTEVTJyxcbiAgICBoZWxwOlxuICAgICAgXCJNYXhpbXVtIG51bWJlciBvZiBsb2dzIHRvIGtlZXAuIElmIG5vdCBzZXQsIG5vIGxvZ3Mgd2lsbCBiZSByZW1vdmVkLiBUaGlzIGNhbiBiZSBhIG51bWJlciBvZiBmaWxlcyBvciBudW1iZXIgb2YgZGF5cy4gSWYgdXNpbmcgZGF5cywgYWRkICdkJyBhcyB0aGUgc3VmZml4LiAoZGVmYXVsdDogbnVsbClcIixcbiAgICBhY3Rpb246IHBhcnNlcnMubnVtYmVyT3JTdHJpbmdQYXJzZXIoJ21heExvZ0ZpbGVzJyksXG4gIH0sXG4gIG1heFVwbG9hZFNpemU6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfTUFYX1VQTE9BRF9TSVpFJyxcbiAgICBoZWxwOiAnTWF4IGZpbGUgc2l6ZSBmb3IgdXBsb2FkcywgZGVmYXVsdHMgdG8gMjBtYicsXG4gICAgZGVmYXVsdDogJzIwbWInLFxuICB9LFxuICBtaWRkbGV3YXJlOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX01JRERMRVdBUkUnLFxuICAgIGhlbHA6ICdtaWRkbGV3YXJlIGZvciBleHByZXNzIHNlcnZlciwgY2FuIGJlIHN0cmluZyBvciBmdW5jdGlvbicsXG4gIH0sXG4gIG1vdW50R3JhcGhRTDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9NT1VOVF9HUkFQSFFMJyxcbiAgICBoZWxwOiAnTW91bnRzIHRoZSBHcmFwaFFMIGVuZHBvaW50JyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgbW91bnRQYXRoOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX01PVU5UX1BBVEgnLFxuICAgIGhlbHA6ICdNb3VudCBwYXRoIGZvciB0aGUgc2VydmVyLCBkZWZhdWx0cyB0byAvcGFyc2UnLFxuICAgIGRlZmF1bHQ6ICcvcGFyc2UnLFxuICB9LFxuICBtb3VudFBsYXlncm91bmQ6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfTU9VTlRfUExBWUdST1VORCcsXG4gICAgaGVscDogJ01vdW50cyB0aGUgR3JhcGhRTCBQbGF5Z3JvdW5kIC0gbmV2ZXIgdXNlIHRoaXMgb3B0aW9uIGluIHByb2R1Y3Rpb24nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBvYmplY3RJZFNpemU6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfT0JKRUNUX0lEX1NJWkUnLFxuICAgIGhlbHA6IFwiU2V0cyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gZ2VuZXJhdGVkIG9iamVjdCBpZCdzLCBkZWZhdWx0IDEwXCIsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm51bWJlclBhcnNlcignb2JqZWN0SWRTaXplJyksXG4gICAgZGVmYXVsdDogMTAsXG4gIH0sXG4gIHBhZ2VzOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBR0VTJyxcbiAgICBoZWxwOiAnVGhlIG9wdGlvbnMgZm9yIHBhZ2VzIHN1Y2ggYXMgcGFzc3dvcmQgcmVzZXQgYW5kIGVtYWlsIHZlcmlmaWNhdGlvbi4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5vYmplY3RQYXJzZXIsXG4gICAgdHlwZTogJ1BhZ2VzT3B0aW9ucycsXG4gICAgZGVmYXVsdDoge30sXG4gIH0sXG4gIHBhc3N3b3JkUG9saWN5OiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBU1NXT1JEX1BPTElDWScsXG4gICAgaGVscDogJ1RoZSBwYXNzd29yZCBwb2xpY3kgZm9yIGVuZm9yY2luZyBwYXNzd29yZCByZWxhdGVkIHJ1bGVzLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm9iamVjdFBhcnNlcixcbiAgICB0eXBlOiAnUGFzc3dvcmRQb2xpY3lPcHRpb25zJyxcbiAgfSxcbiAgcGxheWdyb3VuZFBhdGg6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfUExBWUdST1VORF9QQVRIJyxcbiAgICBoZWxwOiAnTW91bnQgcGF0aCBmb3IgdGhlIEdyYXBoUUwgUGxheWdyb3VuZCwgZGVmYXVsdHMgdG8gL3BsYXlncm91bmQnLFxuICAgIGRlZmF1bHQ6ICcvcGxheWdyb3VuZCcsXG4gIH0sXG4gIHBvcnQ6IHtcbiAgICBlbnY6ICdQT1JUJyxcbiAgICBoZWxwOiAnVGhlIHBvcnQgdG8gcnVuIHRoZSBQYXJzZVNlcnZlciwgZGVmYXVsdHMgdG8gMTMzNy4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5udW1iZXJQYXJzZXIoJ3BvcnQnKSxcbiAgICBkZWZhdWx0OiAxMzM3LFxuICB9LFxuICBwcmVzZXJ2ZUZpbGVOYW1lOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BSRVNFUlZFX0ZJTEVfTkFNRScsXG4gICAgaGVscDogJ0VuYWJsZSAob3IgZGlzYWJsZSkgdGhlIGFkZGl0aW9uIG9mIGEgdW5pcXVlIGhhc2ggdG8gdGhlIGZpbGUgbmFtZXMnLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBwcmV2ZW50TG9naW5XaXRoVW52ZXJpZmllZEVtYWlsOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BSRVZFTlRfTE9HSU5fV0lUSF9VTlZFUklGSUVEX0VNQUlMJyxcbiAgICBoZWxwOlxuICAgICAgJ1NldCB0byBgdHJ1ZWAgdG8gcHJldmVudCBhIHVzZXIgZnJvbSBsb2dnaW5nIGluIGlmIHRoZSBlbWFpbCBoYXMgbm90IHlldCBiZWVuIHZlcmlmaWVkIGFuZCBlbWFpbCB2ZXJpZmljYXRpb24gaXMgcmVxdWlyZWQuPGJyPjxicj5EZWZhdWx0IGlzIGBmYWxzZWAuPGJyPlJlcXVpcmVzIG9wdGlvbiBgdmVyaWZ5VXNlckVtYWlsczogdHJ1ZWAuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgcHJldmVudFNpZ251cFdpdGhVbnZlcmlmaWVkRW1haWw6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfUFJFVkVOVF9TSUdOVVBfV0lUSF9VTlZFUklGSUVEX0VNQUlMJyxcbiAgICBoZWxwOlxuICAgICAgXCJJZiBzZXQgdG8gYHRydWVgIGl0IHByZXZlbnRzIGEgdXNlciBmcm9tIHNpZ25pbmcgdXAgaWYgdGhlIGVtYWlsIGhhcyBub3QgeWV0IGJlZW4gdmVyaWZpZWQgYW5kIGVtYWlsIHZlcmlmaWNhdGlvbiBpcyByZXF1aXJlZC4gSW4gdGhhdCBjYXNlIHRoZSBzZXJ2ZXIgcmVzcG9uZHMgdG8gdGhlIHNpZ24tdXAgd2l0aCBIVFRQIHN0YXR1cyA0MDAgYW5kIGEgUGFyc2UgRXJyb3IgMjA1IGBFTUFJTF9OT1RfRk9VTkRgLiBJZiBzZXQgdG8gYGZhbHNlYCB0aGUgc2VydmVyIHJlc3BvbmRzIHdpdGggSFRUUCBzdGF0dXMgMjAwLCBhbmQgY2xpZW50IFNES3MgcmV0dXJuIGFuIHVuYXV0aGVudGljYXRlZCBQYXJzZSBVc2VyIHdpdGhvdXQgc2Vzc2lvbiB0b2tlbi4gSW4gdGhhdCBjYXNlIHN1YnNlcXVlbnQgcmVxdWVzdHMgZmFpbCB1bnRpbCB0aGUgdXNlcidzIGVtYWlsIGFkZHJlc3MgaXMgdmVyaWZpZWQuPGJyPjxicj5EZWZhdWx0IGlzIGBmYWxzZWAuPGJyPlJlcXVpcmVzIG9wdGlvbiBgdmVyaWZ5VXNlckVtYWlsczogdHJ1ZWAuXCIsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIHByb3RlY3RlZEZpZWxkczoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9QUk9URUNURURfRklFTERTJyxcbiAgICBoZWxwOiAnUHJvdGVjdGVkIGZpZWxkcyB0aGF0IHNob3VsZCBiZSB0cmVhdGVkIHdpdGggZXh0cmEgc2VjdXJpdHkgd2hlbiBmZXRjaGluZyBkZXRhaWxzLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm9iamVjdFBhcnNlcixcbiAgICBkZWZhdWx0OiB7XG4gICAgICBfVXNlcjoge1xuICAgICAgICAnKic6IFsnZW1haWwnXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbiAgcHVibGljU2VydmVyVVJMOiB7XG4gICAgZW52OiAnUEFSU0VfUFVCTElDX1NFUlZFUl9VUkwnLFxuICAgIGhlbHA6ICdQdWJsaWMgVVJMIHRvIHlvdXIgcGFyc2Ugc2VydmVyIHdpdGggaHR0cDovLyBvciBodHRwczovLy4nLFxuICB9LFxuICBwdXNoOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BVU0gnLFxuICAgIGhlbHA6XG4gICAgICAnQ29uZmlndXJhdGlvbiBmb3IgcHVzaCwgYXMgc3RyaW5naWZpZWQgSlNPTi4gU2VlIGh0dHA6Ly9kb2NzLnBhcnNlcGxhdGZvcm0ub3JnL3BhcnNlLXNlcnZlci9ndWlkZS8jcHVzaC1ub3RpZmljYXRpb25zJyxcbiAgICBhY3Rpb246IHBhcnNlcnMub2JqZWN0UGFyc2VyLFxuICB9LFxuICByYXRlTGltaXQ6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfUkFURV9MSU1JVCcsXG4gICAgaGVscDpcbiAgICAgIFwiT3B0aW9ucyB0byBsaW1pdCByZXBlYXRlZCByZXF1ZXN0cyB0byBQYXJzZSBTZXJ2ZXIgQVBJcy4gVGhpcyBjYW4gYmUgdXNlZCB0byBwcm90ZWN0IHNlbnNpdGl2ZSBlbmRwb2ludHMgc3VjaCBhcyBgL3JlcXVlc3RQYXNzd29yZFJlc2V0YCBmcm9tIGJydXRlLWZvcmNlIGF0dGFja3Mgb3IgUGFyc2UgU2VydmVyIGFzIGEgd2hvbGUgZnJvbSBkZW5pYWwtb2Ytc2VydmljZSAoRG9TKSBhdHRhY2tzLjxicj48YnI+XFx1MjEzOVxcdUZFMEYgTWluZCB0aGUgZm9sbG93aW5nIGxpbWl0YXRpb25zOjxicj4tIHJhdGUgbGltaXRzIGFwcGxpZWQgcGVyIElQIGFkZHJlc3M7IHRoaXMgbGltaXRzIHByb3RlY3Rpb24gYWdhaW5zdCBkaXN0cmlidXRlZCBkZW5pYWwtb2Ytc2VydmljZSAoRERvUykgYXR0YWNrcyB3aGVyZSBtYW55IHJlcXVlc3RzIGFyZSBjb21pbmcgZnJvbSB2YXJpb3VzIElQIGFkZHJlc3Nlczxicj4tIGlmIG11bHRpcGxlIFBhcnNlIFNlcnZlciBpbnN0YW5jZXMgYXJlIGJlaGluZCBhIGxvYWQgYmFsYW5jZXIgb3IgcmFuIGluIGEgY2x1c3RlciwgZWFjaCBpbnN0YW5jZSB3aWxsIGNhbGN1bGF0ZSBpdCdzIG93biByZXF1ZXN0IHJhdGVzLCBpbmRlcGVuZGVudCBmcm9tIG90aGVyIGluc3RhbmNlczsgdGhpcyBsaW1pdHMgdGhlIGFwcGxpY2FiaWxpdHkgb2YgdGhpcyBmZWF0dXJlIHdoZW4gdXNpbmcgYSBsb2FkIGJhbGFuY2VyIGFuZCBhbm90aGVyIHJhdGUgbGltaXRpbmcgc29sdXRpb24gdGhhdCB0YWtlcyByZXF1ZXN0cyBhY3Jvc3MgYWxsIGluc3RhbmNlcyBpbnRvIGFjY291bnQgbWF5IGJlIG1vcmUgc3VpdGFibGU8YnI+LSB0aGlzIGZlYXR1cmUgcHJvdmlkZXMgYmFzaWMgcHJvdGVjdGlvbiBhZ2FpbnN0IGRlbmlhbC1vZi1zZXJ2aWNlIGF0dGFja3MsIGJ1dCBhIG1vcmUgc29waGlzdGljYXRlZCBzb2x1dGlvbiB3b3JrcyBlYXJsaWVyIGluIHRoZSByZXF1ZXN0IGZsb3cgYW5kIHByZXZlbnRzIGEgbWFsaWNpb3VzIHJlcXVlc3RzIHRvIGV2ZW4gcmVhY2ggYSBzZXJ2ZXIgaW5zdGFuY2U7IGl0J3MgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGltcGxlbWVudCBhIHNvbHV0aW9uIGFjY29yZGluZyB0byBhcmNoaXRlY3R1cmUgYW5kIHVzZXIgY2FzZS5cIixcbiAgICBhY3Rpb246IHBhcnNlcnMuYXJyYXlQYXJzZXIsXG4gICAgdHlwZTogJ1JhdGVMaW1pdE9wdGlvbnNbXScsXG4gICAgZGVmYXVsdDogW10sXG4gIH0sXG4gIHJlYWRPbmx5TWFzdGVyS2V5OiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1JFQURfT05MWV9NQVNURVJfS0VZJyxcbiAgICBoZWxwOiAnUmVhZC1vbmx5IGtleSwgd2hpY2ggaGFzIHRoZSBzYW1lIGNhcGFiaWxpdGllcyBhcyBNYXN0ZXJLZXkgd2l0aG91dCB3cml0ZXMnLFxuICB9LFxuICByZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmU6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfUkVRVUVTVF9DT05URVhUX01JRERMRVdBUkUnLFxuICAgIGhlbHA6XG4gICAgICAnT3B0aW9ucyB0byBjdXN0b21pemUgdGhlIHJlcXVlc3QgY29udGV4dCB1c2luZyBpbnZlcnNpb24gb2YgY29udHJvbC9kZXBlbmRlbmN5IGluamVjdGlvbi4nLFxuICB9LFxuICByZXF1ZXN0S2V5d29yZERlbnlsaXN0OiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1JFUVVFU1RfS0VZV09SRF9ERU5ZTElTVCcsXG4gICAgaGVscDpcbiAgICAgICdBbiBhcnJheSBvZiBrZXlzIGFuZCB2YWx1ZXMgdGhhdCBhcmUgcHJvaGliaXRlZCBpbiBkYXRhYmFzZSByZWFkIGFuZCB3cml0ZSByZXF1ZXN0cyB0byBwcmV2ZW50IHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEl0IGlzIHBvc3NpYmxlIHRvIHNwZWNpZnkgb25seSBhIGtleSAoYHtcImtleVwiOlwiLi4uXCJ9YCksIG9ubHkgYSB2YWx1ZSAoYHtcInZhbHVlXCI6XCIuLi5cIn1gKSBvciBhIGtleS12YWx1ZSBwYWlyIChge1wia2V5XCI6XCIuLi5cIixcInZhbHVlXCI6XCIuLi5cIn1gKS4gVGhlIHNwZWNpZmljYXRpb24gY2FuIHVzZSB0aGUgZm9sbG93aW5nIHR5cGVzOiBgYm9vbGVhbmAsIGBudW1lcmljYCBvciBgc3RyaW5nYCwgd2hlcmUgYHN0cmluZ2Agd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhIHJlZ2V4IG5vdGF0aW9uLiBSZXF1ZXN0IGRhdGEgaXMgZGVlcC1zY2FubmVkIGZvciBtYXRjaGluZyBkZWZpbml0aW9ucyB0byBkZXRlY3QgYWxzbyBhbnkgbmVzdGVkIG9jY3VycmVuY2VzLiBEZWZhdWx0cyBhcmUgcGF0dGVybnMgdGhhdCBhcmUgbGlrZWx5IHRvIGJlIHVzZWQgaW4gbWFsaWNpb3VzIHJlcXVlc3RzLiBTZXR0aW5nIHRoaXMgb3B0aW9uIHdpbGwgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcGF0dGVybnMuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYXJyYXlQYXJzZXIsXG4gICAgZGVmYXVsdDogW1xuICAgICAge1xuICAgICAgICBrZXk6ICdfYnNvbnR5cGUnLFxuICAgICAgICB2YWx1ZTogJ0NvZGUnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnY29uc3RydWN0b3InLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnX19wcm90b19fJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcbiAgcmVzdEFQSUtleToge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9SRVNUX0FQSV9LRVknLFxuICAgIGhlbHA6ICdLZXkgZm9yIFJFU1QgY2FsbHMnLFxuICB9LFxuICByZXZva2VTZXNzaW9uT25QYXNzd29yZFJlc2V0OiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1JFVk9LRV9TRVNTSU9OX09OX1BBU1NXT1JEX1JFU0VUJyxcbiAgICBoZWxwOlxuICAgICAgXCJXaGVuIGEgdXNlciBjaGFuZ2VzIHRoZWlyIHBhc3N3b3JkLCBlaXRoZXIgdGhyb3VnaCB0aGUgcmVzZXQgcGFzc3dvcmQgZW1haWwgb3Igd2hpbGUgbG9nZ2VkIGluLCBhbGwgc2Vzc2lvbnMgYXJlIHJldm9rZWQgaWYgdGhpcyBpcyB0cnVlLiBTZXQgdG8gZmFsc2UgaWYgeW91IGRvbid0IHdhbnQgdG8gcmV2b2tlIHNlc3Npb25zLlwiLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIHNjaGVkdWxlZFB1c2g6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfU0NIRURVTEVEX1BVU0gnLFxuICAgIGhlbHA6ICdDb25maWd1cmF0aW9uIGZvciBwdXNoIHNjaGVkdWxpbmcsIGRlZmF1bHRzIHRvIGZhbHNlLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIHNjaGVtYToge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9TQ0hFTUEnLFxuICAgIGhlbHA6ICdEZWZpbmVkIHNjaGVtYScsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm9iamVjdFBhcnNlcixcbiAgICB0eXBlOiAnU2NoZW1hT3B0aW9ucycsXG4gIH0sXG4gIHNlY3VyaXR5OiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1NFQ1VSSVRZJyxcbiAgICBoZWxwOiAnVGhlIHNlY3VyaXR5IG9wdGlvbnMgdG8gaWRlbnRpZnkgYW5kIHJlcG9ydCB3ZWFrIHNlY3VyaXR5IHNldHRpbmdzLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm9iamVjdFBhcnNlcixcbiAgICB0eXBlOiAnU2VjdXJpdHlPcHRpb25zJyxcbiAgICBkZWZhdWx0OiB7fSxcbiAgfSxcbiAgc2VuZFVzZXJFbWFpbFZlcmlmaWNhdGlvbjoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9TRU5EX1VTRVJfRU1BSUxfVkVSSUZJQ0FUSU9OJyxcbiAgICBoZWxwOlxuICAgICAgJ1NldCB0byBgZmFsc2VgIHRvIHByZXZlbnQgc2VuZGluZyBvZiB2ZXJpZmljYXRpb24gZW1haWwuIFN1cHBvcnRzIGEgZnVuY3Rpb24gd2l0aCBhIHJldHVybiB2YWx1ZSBvZiBgdHJ1ZWAgb3IgYGZhbHNlYCBmb3IgY29uZGl0aW9uYWwgZW1haWwgc2VuZGluZy48YnI+PGJyPkRlZmF1bHQgaXMgYHRydWVgLjxicj4nLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIHNlcnZlckNsb3NlQ29tcGxldGU6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfU0VSVkVSX0NMT1NFX0NPTVBMRVRFJyxcbiAgICBoZWxwOiAnQ2FsbGJhY2sgd2hlbiBzZXJ2ZXIgaGFzIGNsb3NlZCcsXG4gIH0sXG4gIHNlcnZlclVSTDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9VUkwnLFxuICAgIGhlbHA6ICdVUkwgdG8geW91ciBwYXJzZSBzZXJ2ZXIgd2l0aCBodHRwOi8vIG9yIGh0dHBzOi8vLicsXG4gICAgcmVxdWlyZWQ6IHRydWUsXG4gIH0sXG4gIHNlc3Npb25MZW5ndGg6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfU0VTU0lPTl9MRU5HVEgnLFxuICAgIGhlbHA6ICdTZXNzaW9uIGR1cmF0aW9uLCBpbiBzZWNvbmRzLCBkZWZhdWx0cyB0byAxIHllYXInLFxuICAgIGFjdGlvbjogcGFyc2Vycy5udW1iZXJQYXJzZXIoJ3Nlc3Npb25MZW5ndGgnKSxcbiAgICBkZWZhdWx0OiAzMTUzNjAwMCxcbiAgfSxcbiAgc2lsZW50OiB7XG4gICAgZW52OiAnU0lMRU5UJyxcbiAgICBoZWxwOiAnRGlzYWJsZXMgY29uc29sZSBvdXRwdXQnLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICB9LFxuICBzdGFydExpdmVRdWVyeVNlcnZlcjoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9TVEFSVF9MSVZFX1FVRVJZX1NFUlZFUicsXG4gICAgaGVscDogJ1N0YXJ0cyB0aGUgbGl2ZVF1ZXJ5IHNlcnZlcicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gIH0sXG4gIHRydXN0UHJveHk6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfVFJVU1RfUFJPWFknLFxuICAgIGhlbHA6XG4gICAgICAnVGhlIHRydXN0IHByb3h5IHNldHRpbmdzLiBJdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3Qgc2V0dXAgb2YgdGhlIHJldmVyc2UgcHJveHksIHNpbmNlIHRoaXMgc2V0dGluZyB3aWxsIHRydXN0IHZhbHVlcyBwcm92aWRlZCBpbiB0aGUgUGFyc2UgU2VydmVyIEFQSSByZXF1ZXN0LiBTZWUgdGhlIDxhIGhyZWY9XCJodHRwczovL2V4cHJlc3Nqcy5jb20vZW4vZ3VpZGUvYmVoaW5kLXByb3hpZXMuaHRtbFwiPmV4cHJlc3MgdHJ1c3QgcHJveHkgc2V0dGluZ3M8L2E+IGRvY3VtZW50YXRpb24uIERlZmF1bHRzIHRvIGBmYWxzZWAuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMub2JqZWN0UGFyc2VyLFxuICAgIGRlZmF1bHQ6IFtdLFxuICB9LFxuICB1c2VyU2Vuc2l0aXZlRmllbGRzOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1VTRVJfU0VOU0lUSVZFX0ZJRUxEUycsXG4gICAgaGVscDpcbiAgICAgICdQZXJzb25hbGx5IGlkZW50aWZpYWJsZSBpbmZvcm1hdGlvbiBmaWVsZHMgaW4gdGhlIHVzZXIgdGFibGUgdGhlIHNob3VsZCBiZSByZW1vdmVkIGZvciBub24tYXV0aG9yaXplZCB1c2Vycy4gRGVwcmVjYXRlZCBAc2VlIHByb3RlY3RlZEZpZWxkcycsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmFycmF5UGFyc2VyLFxuICB9LFxuICB2ZXJib3NlOiB7XG4gICAgZW52OiAnVkVSQk9TRScsXG4gICAgaGVscDogJ1NldCB0aGUgbG9nZ2luZyB0byB2ZXJib3NlJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgfSxcbiAgdmVyaWZ5VXNlckVtYWlsczoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9WRVJJRllfVVNFUl9FTUFJTFMnLFxuICAgIGhlbHA6XG4gICAgICAnU2V0IHRvIGB0cnVlYCB0byByZXF1aXJlIHVzZXJzIHRvIHZlcmlmeSB0aGVpciBlbWFpbCBhZGRyZXNzIHRvIGNvbXBsZXRlIHRoZSBzaWduLXVwIHByb2Nlc3MuIFN1cHBvcnRzIGEgZnVuY3Rpb24gd2l0aCBhIHJldHVybiB2YWx1ZSBvZiBgdHJ1ZWAgb3IgYGZhbHNlYCBmb3IgY29uZGl0aW9uYWwgdmVyaWZpY2F0aW9uLjxicj48YnI+RGVmYXVsdCBpcyBgZmFsc2VgLicsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIHdlYmhvb2tLZXk6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfV0VCSE9PS19LRVknLFxuICAgIGhlbHA6ICdLZXkgc2VudCB3aXRoIG91dGdvaW5nIHdlYmhvb2sgY2FsbHMnLFxuICB9LFxufTtcbm1vZHVsZS5leHBvcnRzLlJhdGVMaW1pdE9wdGlvbnMgPSB7XG4gIGVycm9yUmVzcG9uc2VNZXNzYWdlOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1JBVEVfTElNSVRfRVJST1JfUkVTUE9OU0VfTUVTU0FHRScsXG4gICAgaGVscDpcbiAgICAgICdUaGUgZXJyb3IgbWVzc2FnZSB0aGF0IHNob3VsZCBiZSByZXR1cm5lZCBpbiB0aGUgYm9keSBvZiB0aGUgSFRUUCA0MjkgcmVzcG9uc2Ugd2hlbiB0aGUgcmF0ZSBsaW1pdCBpcyBoaXQuIERlZmF1bHQgaXMgYFRvbyBtYW55IHJlcXVlc3RzLmAuJyxcbiAgICBkZWZhdWx0OiAnVG9vIG1hbnkgcmVxdWVzdHMuJyxcbiAgfSxcbiAgaW5jbHVkZUludGVybmFsUmVxdWVzdHM6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfUkFURV9MSU1JVF9JTkNMVURFX0lOVEVSTkFMX1JFUVVFU1RTJyxcbiAgICBoZWxwOlxuICAgICAgJ09wdGlvbmFsLCBpZiBgdHJ1ZWAgdGhlIHJhdGUgbGltaXQgd2lsbCBhbHNvIGFwcGx5IHRvIHJlcXVlc3RzIHRoYXQgYXJlIG1hZGUgaW4gYnkgQ2xvdWQgQ29kZSwgZGVmYXVsdCBpcyBgZmFsc2VgLiBOb3RlIHRoYXQgYSBwdWJsaWMgQ2xvdWQgQ29kZSBmdW5jdGlvbiB0aGF0IHRyaWdnZXJzIGludGVybmFsIHJlcXVlc3RzIG1heSBjaXJjdW12ZW50IHJhdGUgbGltaXRpbmcgYW5kIGJlIHZ1bG5lcmFibGUgdG8gYXR0YWNrcy4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBpbmNsdWRlTWFzdGVyS2V5OiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1JBVEVfTElNSVRfSU5DTFVERV9NQVNURVJfS0VZJyxcbiAgICBoZWxwOlxuICAgICAgJ09wdGlvbmFsLCBpZiBgdHJ1ZWAgdGhlIHJhdGUgbGltaXQgd2lsbCBhbHNvIGFwcGx5IHRvIHJlcXVlc3RzIHVzaW5nIHRoZSBgbWFzdGVyS2V5YCwgZGVmYXVsdCBpcyBgZmFsc2VgLiBOb3RlIHRoYXQgYSBwdWJsaWMgQ2xvdWQgQ29kZSBmdW5jdGlvbiB0aGF0IHRyaWdnZXJzIGludGVybmFsIHJlcXVlc3RzIHVzaW5nIHRoZSBgbWFzdGVyS2V5YCBtYXkgY2lyY3VtdmVudCByYXRlIGxpbWl0aW5nIGFuZCBiZSB2dWxuZXJhYmxlIHRvIGF0dGFja3MuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgcmVkaXNVcmw6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfUkFURV9MSU1JVF9SRURJU19VUkwnLFxuICAgIGhlbHA6XG4gICAgICAnT3B0aW9uYWwsIHRoZSBVUkwgb2YgdGhlIFJlZGlzIHNlcnZlciB0byBzdG9yZSByYXRlIGxpbWl0IGRhdGEuIFRoaXMgYWxsb3dzIHRvIHJhdGUgbGltaXQgcmVxdWVzdHMgZm9yIG11bHRpcGxlIHNlcnZlcnMgYnkgY2FsY3VsYXRpbmcgdGhlIHN1bSBvZiBhbGwgcmVxdWVzdHMgYWNyb3NzIGFsbCBzZXJ2ZXJzLiBUaGlzIGlzIHVzZWZ1bCBpZiBtdWx0aXBsZSBzZXJ2ZXJzIGFyZSBwcm9jZXNzaW5nIHJlcXVlc3RzIGJlaGluZCBhIGxvYWQgYmFsYW5jZXIuIEZvciBleGFtcGxlLCB0aGUgbGltaXQgb2YgMTAgcmVxdWVzdHMgaXMgcmVhY2hlZCBpZiBlYWNoIG9mIDIgc2VydmVycyBwcm9jZXNzZWQgNSByZXF1ZXN0cy4nLFxuICB9LFxuICByZXF1ZXN0Q291bnQ6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfUkFURV9MSU1JVF9SRVFVRVNUX0NPVU5UJyxcbiAgICBoZWxwOlxuICAgICAgJ1RoZSBudW1iZXIgb2YgcmVxdWVzdHMgdGhhdCBjYW4gYmUgbWFkZSBwZXIgSVAgYWRkcmVzcyB3aXRoaW4gdGhlIHRpbWUgd2luZG93IHNldCBpbiBgcmVxdWVzdFRpbWVXaW5kb3dgIGJlZm9yZSB0aGUgcmF0ZSBsaW1pdCBpcyBhcHBsaWVkLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm51bWJlclBhcnNlcigncmVxdWVzdENvdW50JyksXG4gIH0sXG4gIHJlcXVlc3RNZXRob2RzOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1JBVEVfTElNSVRfUkVRVUVTVF9NRVRIT0RTJyxcbiAgICBoZWxwOlxuICAgICAgJ09wdGlvbmFsLCB0aGUgSFRUUCByZXF1ZXN0IG1ldGhvZHMgdG8gd2hpY2ggdGhlIHJhdGUgbGltaXQgc2hvdWxkIGJlIGFwcGxpZWQsIGRlZmF1bHQgaXMgYWxsIG1ldGhvZHMuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYXJyYXlQYXJzZXIsXG4gIH0sXG4gIHJlcXVlc3RQYXRoOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1JBVEVfTElNSVRfUkVRVUVTVF9QQVRIJyxcbiAgICBoZWxwOlxuICAgICAgJ1RoZSBwYXRoIG9mIHRoZSBBUEkgcm91dGUgdG8gYmUgcmF0ZSBsaW1pdGVkLiBSb3V0ZSBwYXRocywgaW4gY29tYmluYXRpb24gd2l0aCBhIHJlcXVlc3QgbWV0aG9kLCBkZWZpbmUgdGhlIGVuZHBvaW50cyBhdCB3aGljaCByZXF1ZXN0cyBjYW4gYmUgbWFkZS4gUm91dGUgcGF0aHMgY2FuIGJlIHN0cmluZ3MsIHN0cmluZyBwYXR0ZXJucywgb3IgcmVndWxhciBleHByZXNzaW9uLiBTZWU6IGh0dHBzOi8vZXhwcmVzc2pzLmNvbS9lbi9ndWlkZS9yb3V0aW5nLmh0bWwnLFxuICAgIHJlcXVpcmVkOiB0cnVlLFxuICB9LFxuICByZXF1ZXN0VGltZVdpbmRvdzoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9SQVRFX0xJTUlUX1JFUVVFU1RfVElNRV9XSU5ET1cnLFxuICAgIGhlbHA6XG4gICAgICAnVGhlIHdpbmRvdyBvZiB0aW1lIGluIG1pbGxpc2Vjb25kcyB3aXRoaW4gd2hpY2ggdGhlIG51bWJlciBvZiByZXF1ZXN0cyBzZXQgaW4gYHJlcXVlc3RDb3VudGAgY2FuIGJlIG1hZGUgYmVmb3JlIHRoZSByYXRlIGxpbWl0IGlzIGFwcGxpZWQuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMubnVtYmVyUGFyc2VyKCdyZXF1ZXN0VGltZVdpbmRvdycpLFxuICB9LFxuICB6b25lOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1JBVEVfTElNSVRfWk9ORScsXG4gICAgaGVscDpcbiAgICAgIFwiVGhlIHR5cGUgb2YgcmF0ZSBsaW1pdCB0byBhcHBseS4gVGhlIGZvbGxvd2luZyB0eXBlcyBhcmUgc3VwcG9ydGVkOjxicj48YnI+LSBgZ2xvYmFsYDogcmF0ZSBsaW1pdCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIHJlcXVlc3RzIG1hZGUgYnkgYWxsIHVzZXJzIDxicj4tIGBpcGA6IHJhdGUgbGltaXQgYmFzZWQgb24gdGhlIElQIGFkZHJlc3Mgb2YgdGhlIHJlcXVlc3QgPGJyPi0gYHVzZXJgOiByYXRlIGxpbWl0IGJhc2VkIG9uIHRoZSB1c2VyIElEIG9mIHRoZSByZXF1ZXN0IDxicj4tIGBzZXNzaW9uYDogcmF0ZSBsaW1pdCBiYXNlZCBvbiB0aGUgc2Vzc2lvbiB0b2tlbiBvZiB0aGUgcmVxdWVzdCA8YnI+PGJyPjxicj46ZGVmYXVsdDogJ2lwJ1wiLFxuICB9LFxufTtcbm1vZHVsZS5leHBvcnRzLlNlY3VyaXR5T3B0aW9ucyA9IHtcbiAgY2hlY2tHcm91cHM6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfU0VDVVJJVFlfQ0hFQ0tfR1JPVVBTJyxcbiAgICBoZWxwOlxuICAgICAgJ1RoZSBzZWN1cml0eSBjaGVjayBncm91cHMgdG8gcnVuLiBUaGlzIGFsbG93cyB0byBhZGQgY3VzdG9tIHNlY3VyaXR5IGNoZWNrcyBvciBvdmVycmlkZSBleGlzdGluZyBvbmVzLiBEZWZhdWx0IGFyZSB0aGUgZ3JvdXBzIGRlZmluZWQgaW4gYENoZWNrR3JvdXBzLmpzYC4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5hcnJheVBhcnNlcixcbiAgfSxcbiAgZW5hYmxlQ2hlY2s6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfU0VDVVJJVFlfRU5BQkxFX0NIRUNLJyxcbiAgICBoZWxwOiAnSXMgdHJ1ZSBpZiBQYXJzZSBTZXJ2ZXIgc2hvdWxkIGNoZWNrIGZvciB3ZWFrIHNlY3VyaXR5IHNldHRpbmdzLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGVuYWJsZUNoZWNrTG9nOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1NFQ1VSSVRZX0VOQUJMRV9DSEVDS19MT0cnLFxuICAgIGhlbHA6XG4gICAgICAnSXMgdHJ1ZSBpZiB0aGUgc2VjdXJpdHkgY2hlY2sgcmVwb3J0IHNob3VsZCBiZSB3cml0dGVuIHRvIGxvZ3MuIFRoaXMgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCB0ZW1wb3JhcmlseSB0byBub3QgZXhwb3NlIHdlYWsgc2VjdXJpdHkgc2V0dGluZ3MgaW4gbG9ncy4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxufTtcbm1vZHVsZS5leHBvcnRzLlBhZ2VzT3B0aW9ucyA9IHtcbiAgY3VzdG9tUm91dGVzOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBR0VTX0NVU1RPTV9ST1VURVMnLFxuICAgIGhlbHA6ICdUaGUgY3VzdG9tIHJvdXRlcy4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5hcnJheVBhcnNlcixcbiAgICB0eXBlOiAnUGFnZXNSb3V0ZVtdJyxcbiAgICBkZWZhdWx0OiBbXSxcbiAgfSxcbiAgY3VzdG9tVXJsczoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9QQUdFU19DVVNUT01fVVJMUycsXG4gICAgaGVscDogJ1RoZSBVUkxzIHRvIHRoZSBjdXN0b20gcGFnZXMuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMub2JqZWN0UGFyc2VyLFxuICAgIHR5cGU6ICdQYWdlc0N1c3RvbVVybHNPcHRpb25zJyxcbiAgICBkZWZhdWx0OiB7fSxcbiAgfSxcbiAgZW5hYmxlTG9jYWxpemF0aW9uOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBR0VTX0VOQUJMRV9MT0NBTElaQVRJT04nLFxuICAgIGhlbHA6ICdJcyB0cnVlIGlmIHBhZ2VzIHNob3VsZCBiZSBsb2NhbGl6ZWQ7IHRoaXMgaGFzIG5vIGVmZmVjdCBvbiBjdXN0b20gcGFnZSByZWRpcmVjdHMuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgZW5hYmxlUm91dGVyOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBR0VTX0VOQUJMRV9ST1VURVInLFxuICAgIGhlbHA6XG4gICAgICAnSXMgdHJ1ZSBpZiB0aGUgcGFnZXMgcm91dGVyIHNob3VsZCBiZSBlbmFibGVkOyB0aGlzIGlzIHJlcXVpcmVkIGZvciBhbnkgb2YgdGhlIHBhZ2VzIG9wdGlvbnMgdG8gdGFrZSBlZmZlY3QuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgZm9yY2VSZWRpcmVjdDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9QQUdFU19GT1JDRV9SRURJUkVDVCcsXG4gICAgaGVscDpcbiAgICAgICdJcyB0cnVlIGlmIHJlc3BvbnNlcyBzaG91bGQgYWx3YXlzIGJlIHJlZGlyZWN0cyBhbmQgbmV2ZXIgY29udGVudCwgZmFsc2UgaWYgdGhlIHJlc3BvbnNlIHR5cGUgc2hvdWxkIGRlcGVuZCBvbiB0aGUgcmVxdWVzdCB0eXBlIChHRVQgcmVxdWVzdCAtPiBjb250ZW50IHJlc3BvbnNlOyBQT1NUIHJlcXVlc3QgLT4gcmVkaXJlY3QgcmVzcG9uc2UpLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGxvY2FsaXphdGlvbkZhbGxiYWNrTG9jYWxlOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBR0VTX0xPQ0FMSVpBVElPTl9GQUxMQkFDS19MT0NBTEUnLFxuICAgIGhlbHA6XG4gICAgICAnVGhlIGZhbGxiYWNrIGxvY2FsZSBmb3IgbG9jYWxpemF0aW9uIGlmIG5vIG1hdGNoaW5nIHRyYW5zbGF0aW9uIGlzIHByb3ZpZGVkIGZvciB0aGUgZ2l2ZW4gbG9jYWxlLiBUaGlzIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiBwcm92aWRpbmcgdHJhbnNsYXRpb24gcmVzb3VyY2VzIHZpYSBKU09OIGZpbGUuJyxcbiAgICBkZWZhdWx0OiAnZW4nLFxuICB9LFxuICBsb2NhbGl6YXRpb25Kc29uUGF0aDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9QQUdFU19MT0NBTElaQVRJT05fSlNPTl9QQVRIJyxcbiAgICBoZWxwOlxuICAgICAgJ1RoZSBwYXRoIHRvIHRoZSBKU09OIGZpbGUgZm9yIGxvY2FsaXphdGlvbjsgdGhlIHRyYW5zbGF0aW9ucyB3aWxsIGJlIHVzZWQgdG8gZmlsbCB0ZW1wbGF0ZSBwbGFjZWhvbGRlcnMgYWNjb3JkaW5nIHRvIHRoZSBsb2NhbGUuJyxcbiAgfSxcbiAgcGFnZXNFbmRwb2ludDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9QQUdFU19QQUdFU19FTkRQT0lOVCcsXG4gICAgaGVscDogXCJUaGUgQVBJIGVuZHBvaW50IGZvciB0aGUgcGFnZXMuIERlZmF1bHQgaXMgJ2FwcHMnLlwiLFxuICAgIGRlZmF1bHQ6ICdhcHBzJyxcbiAgfSxcbiAgcGFnZXNQYXRoOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBR0VTX1BBR0VTX1BBVEgnLFxuICAgIGhlbHA6XG4gICAgICBcIlRoZSBwYXRoIHRvIHRoZSBwYWdlcyBkaXJlY3Rvcnk7IHRoaXMgYWxzbyBkZWZpbmVzIHdoZXJlIHRoZSBzdGF0aWMgZW5kcG9pbnQgJy9hcHBzJyBwb2ludHMgdG8uIERlZmF1bHQgaXMgdGhlICcuL3B1YmxpYy8nIGRpcmVjdG9yeS5cIixcbiAgICBkZWZhdWx0OiAnLi9wdWJsaWMnLFxuICB9LFxuICBwbGFjZWhvbGRlcnM6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfUEFHRVNfUExBQ0VIT0xERVJTJyxcbiAgICBoZWxwOlxuICAgICAgJ1RoZSBwbGFjZWhvbGRlciBrZXlzIGFuZCB2YWx1ZXMgd2hpY2ggd2lsbCBiZSBmaWxsZWQgaW4gcGFnZXM7IHRoaXMgY2FuIGJlIGEgc2ltcGxlIG9iamVjdCBvciBhIGNhbGxiYWNrIGZ1bmN0aW9uLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm9iamVjdFBhcnNlcixcbiAgICBkZWZhdWx0OiB7fSxcbiAgfSxcbn07XG5tb2R1bGUuZXhwb3J0cy5QYWdlc1JvdXRlID0ge1xuICBoYW5kbGVyOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBR0VTX1JPVVRFX0hBTkRMRVInLFxuICAgIGhlbHA6ICdUaGUgcm91dGUgaGFuZGxlciB0aGF0IGlzIGFuIGFzeW5jIGZ1bmN0aW9uLicsXG4gICAgcmVxdWlyZWQ6IHRydWUsXG4gIH0sXG4gIG1ldGhvZDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9QQUdFU19ST1VURV9NRVRIT0QnLFxuICAgIGhlbHA6IFwiVGhlIHJvdXRlIG1ldGhvZCwgZS5nLiAnR0VUJyBvciAnUE9TVCcuXCIsXG4gICAgcmVxdWlyZWQ6IHRydWUsXG4gIH0sXG4gIHBhdGg6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfUEFHRVNfUk9VVEVfUEFUSCcsXG4gICAgaGVscDogJ1RoZSByb3V0ZSBwYXRoLicsXG4gICAgcmVxdWlyZWQ6IHRydWUsXG4gIH0sXG59O1xubW9kdWxlLmV4cG9ydHMuUGFnZXNDdXN0b21VcmxzT3B0aW9ucyA9IHtcbiAgZW1haWxWZXJpZmljYXRpb25MaW5rRXhwaXJlZDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9QQUdFU19DVVNUT01fVVJMX0VNQUlMX1ZFUklGSUNBVElPTl9MSU5LX0VYUElSRUQnLFxuICAgIGhlbHA6ICdUaGUgVVJMIHRvIHRoZSBjdXN0b20gcGFnZSBmb3IgZW1haWwgdmVyaWZpY2F0aW9uIC0+IGxpbmsgZXhwaXJlZC4nLFxuICB9LFxuICBlbWFpbFZlcmlmaWNhdGlvbkxpbmtJbnZhbGlkOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBR0VTX0NVU1RPTV9VUkxfRU1BSUxfVkVSSUZJQ0FUSU9OX0xJTktfSU5WQUxJRCcsXG4gICAgaGVscDogJ1RoZSBVUkwgdG8gdGhlIGN1c3RvbSBwYWdlIGZvciBlbWFpbCB2ZXJpZmljYXRpb24gLT4gbGluayBpbnZhbGlkLicsXG4gIH0sXG4gIGVtYWlsVmVyaWZpY2F0aW9uU2VuZEZhaWw6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfUEFHRVNfQ1VTVE9NX1VSTF9FTUFJTF9WRVJJRklDQVRJT05fU0VORF9GQUlMJyxcbiAgICBoZWxwOiAnVGhlIFVSTCB0byB0aGUgY3VzdG9tIHBhZ2UgZm9yIGVtYWlsIHZlcmlmaWNhdGlvbiAtPiBsaW5rIHNlbmQgZmFpbC4nLFxuICB9LFxuICBlbWFpbFZlcmlmaWNhdGlvblNlbmRTdWNjZXNzOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBR0VTX0NVU1RPTV9VUkxfRU1BSUxfVkVSSUZJQ0FUSU9OX1NFTkRfU1VDQ0VTUycsXG4gICAgaGVscDogJ1RoZSBVUkwgdG8gdGhlIGN1c3RvbSBwYWdlIGZvciBlbWFpbCB2ZXJpZmljYXRpb24gLT4gcmVzZW5kIGxpbmsgLT4gc3VjY2Vzcy4nLFxuICB9LFxuICBlbWFpbFZlcmlmaWNhdGlvblN1Y2Nlc3M6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfUEFHRVNfQ1VTVE9NX1VSTF9FTUFJTF9WRVJJRklDQVRJT05fU1VDQ0VTUycsXG4gICAgaGVscDogJ1RoZSBVUkwgdG8gdGhlIGN1c3RvbSBwYWdlIGZvciBlbWFpbCB2ZXJpZmljYXRpb24gLT4gc3VjY2Vzcy4nLFxuICB9LFxuICBwYXNzd29yZFJlc2V0OiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBR0VTX0NVU1RPTV9VUkxfUEFTU1dPUkRfUkVTRVQnLFxuICAgIGhlbHA6ICdUaGUgVVJMIHRvIHRoZSBjdXN0b20gcGFnZSBmb3IgcGFzc3dvcmQgcmVzZXQuJyxcbiAgfSxcbiAgcGFzc3dvcmRSZXNldExpbmtJbnZhbGlkOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBR0VTX0NVU1RPTV9VUkxfUEFTU1dPUkRfUkVTRVRfTElOS19JTlZBTElEJyxcbiAgICBoZWxwOiAnVGhlIFVSTCB0byB0aGUgY3VzdG9tIHBhZ2UgZm9yIHBhc3N3b3JkIHJlc2V0IC0+IGxpbmsgaW52YWxpZC4nLFxuICB9LFxuICBwYXNzd29yZFJlc2V0U3VjY2Vzczoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9QQUdFU19DVVNUT01fVVJMX1BBU1NXT1JEX1JFU0VUX1NVQ0NFU1MnLFxuICAgIGhlbHA6ICdUaGUgVVJMIHRvIHRoZSBjdXN0b20gcGFnZSBmb3IgcGFzc3dvcmQgcmVzZXQgLT4gc3VjY2Vzcy4nLFxuICB9LFxufTtcbm1vZHVsZS5leHBvcnRzLkN1c3RvbVBhZ2VzT3B0aW9ucyA9IHtcbiAgY2hvb3NlUGFzc3dvcmQ6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQ1VTVE9NX1BBR0VTX0NIT09TRV9QQVNTV09SRCcsXG4gICAgaGVscDogJ2Nob29zZSBwYXNzd29yZCBwYWdlIHBhdGgnLFxuICB9LFxuICBleHBpcmVkVmVyaWZpY2F0aW9uTGluazoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9DVVNUT01fUEFHRVNfRVhQSVJFRF9WRVJJRklDQVRJT05fTElOSycsXG4gICAgaGVscDogJ2V4cGlyZWQgdmVyaWZpY2F0aW9uIGxpbmsgcGFnZSBwYXRoJyxcbiAgfSxcbiAgaW52YWxpZExpbms6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQ1VTVE9NX1BBR0VTX0lOVkFMSURfTElOSycsXG4gICAgaGVscDogJ2ludmFsaWQgbGluayBwYWdlIHBhdGgnLFxuICB9LFxuICBpbnZhbGlkUGFzc3dvcmRSZXNldExpbms6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQ1VTVE9NX1BBR0VTX0lOVkFMSURfUEFTU1dPUkRfUkVTRVRfTElOSycsXG4gICAgaGVscDogJ2ludmFsaWQgcGFzc3dvcmQgcmVzZXQgbGluayBwYWdlIHBhdGgnLFxuICB9LFxuICBpbnZhbGlkVmVyaWZpY2F0aW9uTGluazoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9DVVNUT01fUEFHRVNfSU5WQUxJRF9WRVJJRklDQVRJT05fTElOSycsXG4gICAgaGVscDogJ2ludmFsaWQgdmVyaWZpY2F0aW9uIGxpbmsgcGFnZSBwYXRoJyxcbiAgfSxcbiAgbGlua1NlbmRGYWlsOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0NVU1RPTV9QQUdFU19MSU5LX1NFTkRfRkFJTCcsXG4gICAgaGVscDogJ3ZlcmlmaWNhdGlvbiBsaW5rIHNlbmQgZmFpbCBwYWdlIHBhdGgnLFxuICB9LFxuICBsaW5rU2VuZFN1Y2Nlc3M6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQ1VTVE9NX1BBR0VTX0xJTktfU0VORF9TVUNDRVNTJyxcbiAgICBoZWxwOiAndmVyaWZpY2F0aW9uIGxpbmsgc2VuZCBzdWNjZXNzIHBhZ2UgcGF0aCcsXG4gIH0sXG4gIHBhcnNlRnJhbWVVUkw6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQ1VTVE9NX1BBR0VTX1BBUlNFX0ZSQU1FX1VSTCcsXG4gICAgaGVscDogJ2ZvciBtYXNraW5nIHVzZXItZmFjaW5nIHBhZ2VzJyxcbiAgfSxcbiAgcGFzc3dvcmRSZXNldFN1Y2Nlc3M6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQ1VTVE9NX1BBR0VTX1BBU1NXT1JEX1JFU0VUX1NVQ0NFU1MnLFxuICAgIGhlbHA6ICdwYXNzd29yZCByZXNldCBzdWNjZXNzIHBhZ2UgcGF0aCcsXG4gIH0sXG4gIHZlcmlmeUVtYWlsU3VjY2Vzczoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9DVVNUT01fUEFHRVNfVkVSSUZZX0VNQUlMX1NVQ0NFU1MnLFxuICAgIGhlbHA6ICd2ZXJpZnkgZW1haWwgc3VjY2VzcyBwYWdlIHBhdGgnLFxuICB9LFxufTtcbm1vZHVsZS5leHBvcnRzLkxpdmVRdWVyeU9wdGlvbnMgPSB7XG4gIGNsYXNzTmFtZXM6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfTElWRVFVRVJZX0NMQVNTTkFNRVMnLFxuICAgIGhlbHA6IFwicGFyc2Utc2VydmVyJ3MgTGl2ZVF1ZXJ5IGNsYXNzTmFtZXNcIixcbiAgICBhY3Rpb246IHBhcnNlcnMuYXJyYXlQYXJzZXIsXG4gIH0sXG4gIHB1YlN1YkFkYXB0ZXI6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfTElWRVFVRVJZX1BVQl9TVUJfQURBUFRFUicsXG4gICAgaGVscDogJ0xpdmVRdWVyeSBwdWJzdWIgYWRhcHRlcicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm1vZHVsZU9yT2JqZWN0UGFyc2VyLFxuICB9LFxuICByZWRpc09wdGlvbnM6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfTElWRVFVRVJZX1JFRElTX09QVElPTlMnLFxuICAgIGhlbHA6IFwicGFyc2Utc2VydmVyJ3MgTGl2ZVF1ZXJ5IHJlZGlzT3B0aW9uc1wiLFxuICAgIGFjdGlvbjogcGFyc2Vycy5vYmplY3RQYXJzZXIsXG4gIH0sXG4gIHJlZGlzVVJMOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0xJVkVRVUVSWV9SRURJU19VUkwnLFxuICAgIGhlbHA6IFwicGFyc2Utc2VydmVyJ3MgTGl2ZVF1ZXJ5IHJlZGlzVVJMXCIsXG4gIH0sXG4gIHdzc0FkYXB0ZXI6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfTElWRVFVRVJZX1dTU19BREFQVEVSJyxcbiAgICBoZWxwOiAnQWRhcHRlciBtb2R1bGUgZm9yIHRoZSBXZWJTb2NrZXRTZXJ2ZXInLFxuICAgIGFjdGlvbjogcGFyc2Vycy5tb2R1bGVPck9iamVjdFBhcnNlcixcbiAgfSxcbn07XG5tb2R1bGUuZXhwb3J0cy5MaXZlUXVlcnlTZXJ2ZXJPcHRpb25zID0ge1xuICBhcHBJZDoge1xuICAgIGVudjogJ1BBUlNFX0xJVkVfUVVFUllfU0VSVkVSX0FQUF9JRCcsXG4gICAgaGVscDpcbiAgICAgICdUaGlzIHN0cmluZyBzaG91bGQgbWF0Y2ggdGhlIGFwcElkIGluIHVzZSBieSB5b3VyIFBhcnNlIFNlcnZlci4gSWYgeW91IGRlcGxveSB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciBhbG9uZ3NpZGUgUGFyc2UgU2VydmVyLCB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciB3aWxsIHRyeSB0byB1c2UgdGhlIHNhbWUgYXBwSWQuJyxcbiAgfSxcbiAgY2FjaGVUaW1lb3V0OiB7XG4gICAgZW52OiAnUEFSU0VfTElWRV9RVUVSWV9TRVJWRVJfQ0FDSEVfVElNRU9VVCcsXG4gICAgaGVscDpcbiAgICAgIFwiTnVtYmVyIGluIG1pbGxpc2Vjb25kcy4gV2hlbiBjbGllbnRzIHByb3ZpZGUgdGhlIHNlc3Npb25Ub2tlbiB0byB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciwgdGhlIExpdmVRdWVyeSBzZXJ2ZXIgd2lsbCB0cnkgdG8gZmV0Y2ggaXRzIFBhcnNlVXNlcidzIG9iamVjdElkIGZyb20gcGFyc2Ugc2VydmVyIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuIFRoZSB2YWx1ZSBkZWZpbmVzIHRoZSBkdXJhdGlvbiBvZiB0aGUgY2FjaGUuIENoZWNrIHRoZSBmb2xsb3dpbmcgU2VjdXJpdHkgc2VjdGlvbiBhbmQgb3VyIHByb3RvY29sIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMsIGRlZmF1bHRzIHRvIDUgKiAxMDAwIG1zICg1IHNlY29uZHMpLlwiLFxuICAgIGFjdGlvbjogcGFyc2Vycy5udW1iZXJQYXJzZXIoJ2NhY2hlVGltZW91dCcpLFxuICB9LFxuICBrZXlQYWlyczoge1xuICAgIGVudjogJ1BBUlNFX0xJVkVfUVVFUllfU0VSVkVSX0tFWV9QQUlSUycsXG4gICAgaGVscDpcbiAgICAgICdBIEpTT04gb2JqZWN0IHRoYXQgc2VydmVzIGFzIGEgd2hpdGVsaXN0IG9mIGtleXMuIEl0IGlzIHVzZWQgZm9yIHZhbGlkYXRpbmcgY2xpZW50cyB3aGVuIHRoZXkgdHJ5IHRvIGNvbm5lY3QgdG8gdGhlIExpdmVRdWVyeSBzZXJ2ZXIuIENoZWNrIHRoZSBmb2xsb3dpbmcgU2VjdXJpdHkgc2VjdGlvbiBhbmQgb3VyIHByb3RvY29sIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMub2JqZWN0UGFyc2VyLFxuICB9LFxuICBsb2dMZXZlbDoge1xuICAgIGVudjogJ1BBUlNFX0xJVkVfUVVFUllfU0VSVkVSX0xPR19MRVZFTCcsXG4gICAgaGVscDpcbiAgICAgICdUaGlzIHN0cmluZyBkZWZpbmVzIHRoZSBsb2cgbGV2ZWwgb2YgdGhlIExpdmVRdWVyeSBzZXJ2ZXIuIFdlIHN1cHBvcnQgVkVSQk9TRSwgSU5GTywgRVJST1IsIE5PTkUsIGRlZmF1bHRzIHRvIElORk8uJyxcbiAgfSxcbiAgbWFzdGVyS2V5OiB7XG4gICAgZW52OiAnUEFSU0VfTElWRV9RVUVSWV9TRVJWRVJfTUFTVEVSX0tFWScsXG4gICAgaGVscDpcbiAgICAgICdUaGlzIHN0cmluZyBzaG91bGQgbWF0Y2ggdGhlIG1hc3RlcktleSBpbiB1c2UgYnkgeW91ciBQYXJzZSBTZXJ2ZXIuIElmIHlvdSBkZXBsb3kgdGhlIExpdmVRdWVyeSBzZXJ2ZXIgYWxvbmdzaWRlIFBhcnNlIFNlcnZlciwgdGhlIExpdmVRdWVyeSBzZXJ2ZXIgd2lsbCB0cnkgdG8gdXNlIHRoZSBzYW1lIG1hc3RlcktleS4nLFxuICB9LFxuICBwb3J0OiB7XG4gICAgZW52OiAnUEFSU0VfTElWRV9RVUVSWV9TRVJWRVJfUE9SVCcsXG4gICAgaGVscDogJ1RoZSBwb3J0IHRvIHJ1biB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciwgZGVmYXVsdHMgdG8gMTMzNy4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5udW1iZXJQYXJzZXIoJ3BvcnQnKSxcbiAgICBkZWZhdWx0OiAxMzM3LFxuICB9LFxuICBwdWJTdWJBZGFwdGVyOiB7XG4gICAgZW52OiAnUEFSU0VfTElWRV9RVUVSWV9TRVJWRVJfUFVCX1NVQl9BREFQVEVSJyxcbiAgICBoZWxwOiAnTGl2ZVF1ZXJ5IHB1YnN1YiBhZGFwdGVyJyxcbiAgICBhY3Rpb246IHBhcnNlcnMubW9kdWxlT3JPYmplY3RQYXJzZXIsXG4gIH0sXG4gIHJlZGlzT3B0aW9uczoge1xuICAgIGVudjogJ1BBUlNFX0xJVkVfUVVFUllfU0VSVkVSX1JFRElTX09QVElPTlMnLFxuICAgIGhlbHA6IFwicGFyc2Utc2VydmVyJ3MgTGl2ZVF1ZXJ5IHJlZGlzT3B0aW9uc1wiLFxuICAgIGFjdGlvbjogcGFyc2Vycy5vYmplY3RQYXJzZXIsXG4gIH0sXG4gIHJlZGlzVVJMOiB7XG4gICAgZW52OiAnUEFSU0VfTElWRV9RVUVSWV9TRVJWRVJfUkVESVNfVVJMJyxcbiAgICBoZWxwOiBcInBhcnNlLXNlcnZlcidzIExpdmVRdWVyeSByZWRpc1VSTFwiLFxuICB9LFxuICBzZXJ2ZXJVUkw6IHtcbiAgICBlbnY6ICdQQVJTRV9MSVZFX1FVRVJZX1NFUlZFUl9TRVJWRVJfVVJMJyxcbiAgICBoZWxwOlxuICAgICAgJ1RoaXMgc3RyaW5nIHNob3VsZCBtYXRjaCB0aGUgc2VydmVyVVJMIGluIHVzZSBieSB5b3VyIFBhcnNlIFNlcnZlci4gSWYgeW91IGRlcGxveSB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciBhbG9uZ3NpZGUgUGFyc2UgU2VydmVyLCB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciB3aWxsIHRyeSB0byB1c2UgdGhlIHNhbWUgc2VydmVyVVJMLicsXG4gIH0sXG4gIHdlYnNvY2tldFRpbWVvdXQ6IHtcbiAgICBlbnY6ICdQQVJTRV9MSVZFX1FVRVJZX1NFUlZFUl9XRUJTT0NLRVRfVElNRU9VVCcsXG4gICAgaGVscDpcbiAgICAgICdOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJldHdlZW4gcGluZy9wb25nIGZyYW1lcy4gVGhlIFdlYlNvY2tldCBzZXJ2ZXIgc2VuZHMgcGluZy9wb25nIGZyYW1lcyB0byB0aGUgY2xpZW50cyB0byBrZWVwIHRoZSBXZWJTb2NrZXQgYWxpdmUuIFRoaXMgdmFsdWUgZGVmaW5lcyB0aGUgaW50ZXJ2YWwgb2YgdGhlIHBpbmcvcG9uZyBmcmFtZSBmcm9tIHRoZSBzZXJ2ZXIgdG8gY2xpZW50cywgZGVmYXVsdHMgdG8gMTAgKiAxMDAwIG1zICgxMCBzKS4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5udW1iZXJQYXJzZXIoJ3dlYnNvY2tldFRpbWVvdXQnKSxcbiAgfSxcbiAgd3NzQWRhcHRlcjoge1xuICAgIGVudjogJ1BBUlNFX0xJVkVfUVVFUllfU0VSVkVSX1dTU19BREFQVEVSJyxcbiAgICBoZWxwOiAnQWRhcHRlciBtb2R1bGUgZm9yIHRoZSBXZWJTb2NrZXRTZXJ2ZXInLFxuICAgIGFjdGlvbjogcGFyc2Vycy5tb2R1bGVPck9iamVjdFBhcnNlcixcbiAgfSxcbn07XG5tb2R1bGUuZXhwb3J0cy5JZGVtcG90ZW5jeU9wdGlvbnMgPSB7XG4gIHBhdGhzOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0VYUEVSSU1FTlRBTF9JREVNUE9URU5DWV9QQVRIUycsXG4gICAgaGVscDpcbiAgICAgICdBbiBhcnJheSBvZiBwYXRocyBmb3Igd2hpY2ggdGhlIGZlYXR1cmUgc2hvdWxkIGJlIGVuYWJsZWQuIFRoZSBtb3VudCBwYXRoIG11c3Qgbm90IGJlIGluY2x1ZGVkLCBmb3IgZXhhbXBsZSBpbnN0ZWFkIG9mIGAvcGFyc2UvZnVuY3Rpb25zL215RnVuY3Rpb25gIHNwZWNpZml5IGBmdW5jdGlvbnMvbXlGdW5jdGlvbmAuIFRoZSBlbnRyaWVzIGFyZSBpbnRlcnByZXRlZCBhcyByZWd1bGFyIGV4cHJlc3Npb24sIGZvciBleGFtcGxlIGBmdW5jdGlvbnMvLipgIG1hdGNoZXMgYWxsIGZ1bmN0aW9ucywgYGpvYnMvLipgIG1hdGNoZXMgYWxsIGpvYnMsIGBjbGFzc2VzLy4qYCBtYXRjaGVzIGFsbCBjbGFzc2VzLCBgLipgIG1hdGNoZXMgYWxsIHBhdGhzLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmFycmF5UGFyc2VyLFxuICAgIGRlZmF1bHQ6IFtdLFxuICB9LFxuICB0dGw6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfRVhQRVJJTUVOVEFMX0lERU1QT1RFTkNZX1RUTCcsXG4gICAgaGVscDpcbiAgICAgICdUaGUgZHVyYXRpb24gaW4gc2Vjb25kcyBhZnRlciB3aGljaCBhIHJlcXVlc3QgcmVjb3JkIGlzIGRpc2NhcmRlZCBmcm9tIHRoZSBkYXRhYmFzZSwgZGVmYXVsdHMgdG8gMzAwcy4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5udW1iZXJQYXJzZXIoJ3R0bCcpLFxuICAgIGRlZmF1bHQ6IDMwMCxcbiAgfSxcbn07XG5tb2R1bGUuZXhwb3J0cy5BY2NvdW50TG9ja291dE9wdGlvbnMgPSB7XG4gIGR1cmF0aW9uOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0FDQ09VTlRfTE9DS09VVF9EVVJBVElPTicsXG4gICAgaGVscDpcbiAgICAgICdTZXQgdGhlIGR1cmF0aW9uIGluIG1pbnV0ZXMgdGhhdCBhIGxvY2tlZC1vdXQgYWNjb3VudCByZW1haW5zIGxvY2tlZCBvdXQgYmVmb3JlIGF1dG9tYXRpY2FsbHkgYmVjb21pbmcgdW5sb2NrZWQuPGJyPjxicj5WYWxpZCB2YWx1ZXMgYXJlIGdyZWF0ZXIgdGhhbiBgMGAgYW5kIGxlc3MgdGhhbiBgMTAwMDAwYC4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5udW1iZXJQYXJzZXIoJ2R1cmF0aW9uJyksXG4gIH0sXG4gIHRocmVzaG9sZDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9BQ0NPVU5UX0xPQ0tPVVRfVEhSRVNIT0xEJyxcbiAgICBoZWxwOlxuICAgICAgJ1NldCB0aGUgbnVtYmVyIG9mIGZhaWxlZCBzaWduLWluIGF0dGVtcHRzIHRoYXQgd2lsbCBjYXVzZSBhIHVzZXIgYWNjb3VudCB0byBiZSBsb2NrZWQuIElmIHRoZSBhY2NvdW50IGlzIGxvY2tlZC4gVGhlIGFjY291bnQgd2lsbCB1bmxvY2sgYWZ0ZXIgdGhlIGR1cmF0aW9uIHNldCBpbiB0aGUgYGR1cmF0aW9uYCBvcHRpb24gaGFzIHBhc3NlZCBhbmQgbm8gZnVydGhlciBsb2dpbiBhdHRlbXB0cyBoYXZlIGJlZW4gbWFkZS48YnI+PGJyPlZhbGlkIHZhbHVlcyBhcmUgZ3JlYXRlciB0aGFuIGAwYCBhbmQgbGVzcyB0aGFuIGAxMDAwYC4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5udW1iZXJQYXJzZXIoJ3RocmVzaG9sZCcpLFxuICB9LFxuICB1bmxvY2tPblBhc3N3b3JkUmVzZXQ6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfQUNDT1VOVF9MT0NLT1VUX1VOTE9DS19PTl9QQVNTV09SRF9SRVNFVCcsXG4gICAgaGVscDpcbiAgICAgICdTZXQgdG8gYHRydWVgICBpZiB0aGUgYWNjb3VudCBzaG91bGQgYmUgdW5sb2NrZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIHBhc3N3b3JkIHJlc2V0Ljxicj48YnI+RGVmYXVsdCBpcyBgZmFsc2VgLjxicj5SZXF1aXJlcyBvcHRpb25zIGBkdXJhdGlvbmAgYW5kIGB0aHJlc2hvbGRgIHRvIGJlIHNldC4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxufTtcbm1vZHVsZS5leHBvcnRzLlBhc3N3b3JkUG9saWN5T3B0aW9ucyA9IHtcbiAgZG9Ob3RBbGxvd1VzZXJuYW1lOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBU1NXT1JEX1BPTElDWV9ET19OT1RfQUxMT1dfVVNFUk5BTUUnLFxuICAgIGhlbHA6XG4gICAgICAnU2V0IHRvIGB0cnVlYCB0byBkaXNhbGxvdyB0aGUgdXNlcm5hbWUgYXMgcGFydCBvZiB0aGUgcGFzc3dvcmQuPGJyPjxicj5EZWZhdWx0IGlzIGBmYWxzZWAuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgbWF4UGFzc3dvcmRBZ2U6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfUEFTU1dPUkRfUE9MSUNZX01BWF9QQVNTV09SRF9BR0UnLFxuICAgIGhlbHA6XG4gICAgICAnU2V0IHRoZSBudW1iZXIgb2YgZGF5cyBhZnRlciB3aGljaCBhIHBhc3N3b3JkIGV4cGlyZXMuIExvZ2luIGF0dGVtcHRzIGZhaWwgaWYgdGhlIHVzZXIgZG9lcyBub3QgcmVzZXQgdGhlIHBhc3N3b3JkIGJlZm9yZSBleHBpcmF0aW9uLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm51bWJlclBhcnNlcignbWF4UGFzc3dvcmRBZ2UnKSxcbiAgfSxcbiAgbWF4UGFzc3dvcmRIaXN0b3J5OiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBU1NXT1JEX1BPTElDWV9NQVhfUEFTU1dPUkRfSElTVE9SWScsXG4gICAgaGVscDpcbiAgICAgICdTZXQgdGhlIG51bWJlciBvZiBwcmV2aW91cyBwYXNzd29yZCB0aGF0IHdpbGwgbm90IGJlIGFsbG93ZWQgdG8gYmUgc2V0IGFzIG5ldyBwYXNzd29yZC4gSWYgdGhlIG9wdGlvbiBpcyBub3Qgc2V0IG9yIHNldCB0byBgMGAsIG5vIHByZXZpb3VzIHBhc3N3b3JkcyB3aWxsIGJlIGNvbnNpZGVyZWQuPGJyPjxicj5WYWxpZCB2YWx1ZXMgYXJlID49IGAwYCBhbmQgPD0gYDIwYC48YnI+RGVmYXVsdCBpcyBgMGAuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMubnVtYmVyUGFyc2VyKCdtYXhQYXNzd29yZEhpc3RvcnknKSxcbiAgfSxcbiAgcmVzZXRQYXNzd29yZFN1Y2Nlc3NPbkludmFsaWRFbWFpbDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9QQVNTV09SRF9QT0xJQ1lfUkVTRVRfUEFTU1dPUkRfU1VDQ0VTU19PTl9JTlZBTElEX0VNQUlMJyxcbiAgICBoZWxwOlxuICAgICAgJ1NldCB0byBgdHJ1ZWAgaWYgYSByZXF1ZXN0IHRvIHJlc2V0IHRoZSBwYXNzd29yZCBzaG91bGQgcmV0dXJuIGEgc3VjY2VzcyByZXNwb25zZSBldmVuIGlmIHRoZSBwcm92aWRlZCBlbWFpbCBhZGRyZXNzIGlzIGludmFsaWQsIG9yIGBmYWxzZWAgaWYgdGhlIHJlcXVlc3Qgc2hvdWxkIHJldHVybiBhbiBlcnJvciByZXNwb25zZSBpZiB0aGUgZW1haWwgYWRkcmVzcyBpcyBpbnZhbGlkLjxicj48YnI+RGVmYXVsdCBpcyBgdHJ1ZWAuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxuICByZXNldFRva2VuUmV1c2VJZlZhbGlkOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBU1NXT1JEX1BPTElDWV9SRVNFVF9UT0tFTl9SRVVTRV9JRl9WQUxJRCcsXG4gICAgaGVscDpcbiAgICAgICdTZXQgdG8gYHRydWVgIGlmIGEgcGFzc3dvcmQgcmVzZXQgdG9rZW4gc2hvdWxkIGJlIHJldXNlZCBpbiBjYXNlIGFub3RoZXIgdG9rZW4gaXMgcmVxdWVzdGVkIGJ1dCB0aGVyZSBpcyBhIHRva2VuIHRoYXQgaXMgc3RpbGwgdmFsaWQsIGkuZS4gaGFzIG5vdCBleHBpcmVkLiBUaGlzIGF2b2lkcyB0aGUgb2Z0ZW4gb2JzZXJ2ZWQgaXNzdWUgdGhhdCBhIHVzZXIgcmVxdWVzdHMgbXVsdGlwbGUgZW1haWxzIGFuZCBkb2VzIG5vdCBrbm93IHdoaWNoIGxpbmsgY29udGFpbnMgYSB2YWxpZCB0b2tlbiBiZWNhdXNlIGVhY2ggbmV3bHkgZ2VuZXJhdGVkIHRva2VuIHdvdWxkIGludmFsaWRhdGUgdGhlIHByZXZpb3VzIHRva2VuLjxicj48YnI+RGVmYXVsdCBpcyBgZmFsc2VgLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIHJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX1BBU1NXT1JEX1BPTElDWV9SRVNFVF9UT0tFTl9WQUxJRElUWV9EVVJBVElPTicsXG4gICAgaGVscDpcbiAgICAgICdTZXQgdGhlIHZhbGlkaXR5IGR1cmF0aW9uIG9mIHRoZSBwYXNzd29yZCByZXNldCB0b2tlbiBpbiBzZWNvbmRzIGFmdGVyIHdoaWNoIHRoZSB0b2tlbiBleHBpcmVzLiBUaGUgdG9rZW4gaXMgdXNlZCBpbiB0aGUgbGluayB0aGF0IGlzIHNldCBpbiB0aGUgZW1haWwuIEFmdGVyIHRoZSB0b2tlbiBleHBpcmVzLCB0aGUgbGluayBiZWNvbWVzIGludmFsaWQgYW5kIGEgbmV3IGxpbmsgaGFzIHRvIGJlIHNlbnQuIElmIHRoZSBvcHRpb24gaXMgbm90IHNldCBvciBzZXQgdG8gYHVuZGVmaW5lZGAsIHRoZW4gdGhlIHRva2VuIG5ldmVyIGV4cGlyZXMuPGJyPjxicj5Gb3IgZXhhbXBsZSwgdG8gZXhwaXJlIHRoZSB0b2tlbiBhZnRlciAyIGhvdXJzLCBzZXQgYSB2YWx1ZSBvZiA3MjAwIHNlY29uZHMgKD0gNjAgc2Vjb25kcyAqIDYwIG1pbnV0ZXMgKiAyIGhvdXJzKS48YnI+PGJyPkRlZmF1bHQgaXMgYHVuZGVmaW5lZGAuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMubnVtYmVyUGFyc2VyKCdyZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbicpLFxuICB9LFxuICB2YWxpZGF0aW9uRXJyb3I6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfUEFTU1dPUkRfUE9MSUNZX1ZBTElEQVRJT05fRVJST1InLFxuICAgIGhlbHA6XG4gICAgICAnU2V0IHRoZSBlcnJvciBtZXNzYWdlIHRvIGJlIHNlbnQuPGJyPjxicj5EZWZhdWx0IGlzIGBQYXNzd29yZCBkb2VzIG5vdCBtZWV0IHRoZSBQYXNzd29yZCBQb2xpY3kgcmVxdWlyZW1lbnRzLmAnLFxuICB9LFxuICB2YWxpZGF0b3JDYWxsYmFjazoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9QQVNTV09SRF9QT0xJQ1lfVkFMSURBVE9SX0NBTExCQUNLJyxcbiAgICBoZWxwOlxuICAgICAgJ1NldCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGEgcGFzc3dvcmQgdG8gYmUgYWNjZXB0ZWQuPGJyPjxicj5JZiB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYHZhbGlkYXRvclBhdHRlcm5gLCB0aGUgcGFzc3dvcmQgbXVzdCBwYXNzIGJvdGggdG8gYmUgYWNjZXB0ZWQuJyxcbiAgfSxcbiAgdmFsaWRhdG9yUGF0dGVybjoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9QQVNTV09SRF9QT0xJQ1lfVkFMSURBVE9SX1BBVFRFUk4nLFxuICAgIGhlbHA6XG4gICAgICAnU2V0IHRoZSByZWd1bGFyIGV4cHJlc3Npb24gdmFsaWRhdGlvbiBwYXR0ZXJuIGEgcGFzc3dvcmQgbXVzdCBtYXRjaCB0byBiZSBhY2NlcHRlZC48YnI+PGJyPklmIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBgdmFsaWRhdG9yQ2FsbGJhY2tgLCB0aGUgcGFzc3dvcmQgbXVzdCBwYXNzIGJvdGggdG8gYmUgYWNjZXB0ZWQuJyxcbiAgfSxcbn07XG5tb2R1bGUuZXhwb3J0cy5GaWxlVXBsb2FkT3B0aW9ucyA9IHtcbiAgZW5hYmxlRm9yQW5vbnltb3VzVXNlcjoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9GSUxFX1VQTE9BRF9FTkFCTEVfRk9SX0FOT05ZTU9VU19VU0VSJyxcbiAgICBoZWxwOiAnSXMgdHJ1ZSBpZiBmaWxlIHVwbG9hZCBzaG91bGQgYmUgYWxsb3dlZCBmb3IgYW5vbnltb3VzIHVzZXJzLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0ZJTEVfVVBMT0FEX0VOQUJMRV9GT1JfQVVUSEVOVElDQVRFRF9VU0VSJyxcbiAgICBoZWxwOiAnSXMgdHJ1ZSBpZiBmaWxlIHVwbG9hZCBzaG91bGQgYmUgYWxsb3dlZCBmb3IgYXV0aGVudGljYXRlZCB1c2Vycy4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIGVuYWJsZUZvclB1YmxpYzoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9GSUxFX1VQTE9BRF9FTkFCTEVfRk9SX1BVQkxJQycsXG4gICAgaGVscDogJ0lzIHRydWUgaWYgZmlsZSB1cGxvYWQgc2hvdWxkIGJlIGFsbG93ZWQgZm9yIGFueW9uZSwgcmVnYXJkbGVzcyBvZiB1c2VyIGF1dGhlbnRpY2F0aW9uLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGZpbGVFeHRlbnNpb25zOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0ZJTEVfVVBMT0FEX0ZJTEVfRVhURU5TSU9OUycsXG4gICAgaGVscDpcbiAgICAgIFwiU2V0cyB0aGUgYWxsb3dlZCBmaWxlIGV4dGVuc2lvbnMgZm9yIHVwbG9hZGluZyBmaWxlcy4gVGhlIGV4dGVuc2lvbiBpcyBkZWZpbmVkIGFzIGFuIGFycmF5IG9mIGZpbGUgZXh0ZW5zaW9ucywgb3IgYSByZWdleCBwYXR0ZXJuLjxicj48YnI+SXQgaXMgcmVjb21tZW5kZWQgdG8gcmVzdHJpY3QgdGhlIGZpbGUgdXBsb2FkIGV4dGVuc2lvbnMgYXMgbXVjaCBhcyBwb3NzaWJsZS4gSFRNTCBmaWxlcyBhcmUgZXNwZWNpYWxseSBwcm9ibGVtYXRpYyBhcyB0aGV5IG1heSBiZSB1c2VkIGJ5IGFuIGF0dGFja2VyIHdobyB1cGxvYWRzIGEgSFRNTCBmb3JtIHRvIGxvb2sgbGVnaXRpbWF0ZSB1bmRlciB5b3VyIGFwcCdzIGRvbWFpbiBuYW1lLCBvciB0byBjb21wcm9taXNlIHRoZSBzZXNzaW9uIHRva2VuIG9mIGFub3RoZXIgdXNlciB2aWEgYWNjZXNzaW5nIHRoZSBicm93c2VyJ3MgbG9jYWwgc3RvcmFnZS48YnI+PGJyPkRlZmF1bHRzIHRvIGBeKD8hKGh8SCkodHxUKShtfE0pKGx8TCk/JClgIHdoaWNoIGFsbG93cyBhbnkgZmlsZSBleHRlbnNpb24gZXhjZXB0IEhUTUwgZmlsZXMuXCIsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmFycmF5UGFyc2VyLFxuICAgIGRlZmF1bHQ6IFsnXig/IShofEgpKHR8VCkobXxNKShsfEwpPyQpJ10sXG4gIH0sXG59O1xubW9kdWxlLmV4cG9ydHMuRGF0YWJhc2VPcHRpb25zID0ge1xuICBhdXRvU2VsZWN0RmFtaWx5OiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0RBVEFCQVNFX0FVVE9fU0VMRUNUX0ZBTUlMWScsXG4gICAgaGVscDpcbiAgICAgICdUaGUgTW9uZ29EQiBkcml2ZXIgb3B0aW9uIHRvIHNldCB3aGV0aGVyIHRoZSBzb2NrZXQgYXR0ZW1wdHMgdG8gY29ubmVjdCB0byBJUHY2IGFuZCBJUHY0IGFkZHJlc3NlcyB1bnRpbCBhIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQuIElmIGF2YWlsYWJsZSwgdGhlIGRyaXZlciB3aWxsIHNlbGVjdCB0aGUgZmlyc3QgSVB2NiBhZGRyZXNzLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLmJvb2xlYW5QYXJzZXIsXG4gIH0sXG4gIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9EQVRBQkFTRV9BVVRPX1NFTEVDVF9GQU1JTFlfQVRURU1QVF9USU1FT1VUJyxcbiAgICBoZWxwOlxuICAgICAgJ1RoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc3BlY2lmeSB0aGUgYW1vdW50IG9mIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIGEgY29ubmVjdGlvbiBhdHRlbXB0IHRvIGZpbmlzaCBiZWZvcmUgdHJ5aW5nIHRoZSBuZXh0IGFkZHJlc3Mgd2hlbiB1c2luZyB0aGUgYXV0b1NlbGVjdEZhbWlseSBvcHRpb24uIElmIHNldCB0byBhIHBvc2l0aXZlIGludGVnZXIgbGVzcyB0aGFuIDEwLCB0aGUgdmFsdWUgMTAgaXMgdXNlZCBpbnN0ZWFkLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm51bWJlclBhcnNlcignYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0JyksXG4gIH0sXG4gIGNvbm5lY3RUaW1lb3V0TVM6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfREFUQUJBU0VfQ09OTkVDVF9USU1FT1VUX01TJyxcbiAgICBoZWxwOlxuICAgICAgJ1RoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc3BlY2lmeSB0aGUgYW1vdW50IG9mIHRpbWUsIGluIG1pbGxpc2Vjb25kcywgdG8gd2FpdCB0byBlc3RhYmxpc2ggYSBzaW5nbGUgVENQIHNvY2tldCBjb25uZWN0aW9uIHRvIHRoZSBzZXJ2ZXIgYmVmb3JlIHJhaXNpbmcgYW4gZXJyb3IuIFNwZWNpZnlpbmcgMCBkaXNhYmxlcyB0aGUgY29ubmVjdGlvbiB0aW1lb3V0LicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm51bWJlclBhcnNlcignY29ubmVjdFRpbWVvdXRNUycpLFxuICB9LFxuICBkaXNhYmxlSW5kZXhGaWVsZFZhbGlkYXRpb246IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfREFUQUJBU0VfRElTQUJMRV9JTkRFWF9GSUVMRF9WQUxJREFUSU9OJyxcbiAgICBoZWxwOlxuICAgICAgJ1NldCB0byBgdHJ1ZWAgdG8gZGlzYWJsZSB2YWxpZGF0aW9uIG9mIGluZGV4IGZpZWxkcy4gV2hlbiBkaXNhYmxlZCwgaW5kZXhlcyBjYW4gYmUgY3JlYXRlZCBldmVuIGlmIHRoZSBmaWVsZHMgZG8gbm90IGV4aXN0IGluIHRoZSBzY2hlbWEuIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIGNyZWF0aW5nIGluZGV4ZXMgb24gZmllbGRzIHRoYXQgd2lsbCBiZSBhZGRlZCBsYXRlci4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICB9LFxuICBlbmFibGVTY2hlbWFIb29rczoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9EQVRBQkFTRV9FTkFCTEVfU0NIRU1BX0hPT0tTJyxcbiAgICBoZWxwOlxuICAgICAgJ0VuYWJsZXMgZGF0YWJhc2UgcmVhbC10aW1lIGhvb2tzIHRvIHVwZGF0ZSBzaW5nbGUgc2NoZW1hIGNhY2hlLiBTZXQgdG8gYHRydWVgIGlmIHVzaW5nIG11bHRpcGxlIFBhcnNlIFNlcnZlcnMgaW5zdGFuY2VzIGNvbm5lY3RlZCB0byB0aGUgc2FtZSBkYXRhYmFzZS4gRmFpbGluZyB0byBkbyBzbyB3aWxsIGNhdXNlIGEgc2NoZW1hIGNoYW5nZSB0byBub3QgcHJvcGFnYXRlIHRvIGFsbCBpbnN0YW5jZXMgYW5kIHJlLXN5bmNpbmcgd2lsbCBvbmx5IGhhcHBlbiB3aGVuIHRoZSBpbnN0YW5jZXMgcmVzdGFydC4gVG8gdXNlIHRoaXMgZmVhdHVyZSB3aXRoIE1vbmdvREIsIGEgcmVwbGljYSBzZXQgY2x1c3RlciB3aXRoIFtjaGFuZ2Ugc3RyZWFtXShodHRwczovL2RvY3MubW9uZ29kYi5jb20vbWFudWFsL2NoYW5nZVN0cmVhbXMvI2F2YWlsYWJpbGl0eSkgc3VwcG9ydCBpcyByZXF1aXJlZC4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBtYXhQb29sU2l6ZToge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9EQVRBQkFTRV9NQVhfUE9PTF9TSVpFJyxcbiAgICBoZWxwOlxuICAgICAgJ1RoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBvcGVuZWQsIGNhY2hlZCwgcmVhZHktdG8tdXNlIGRhdGFiYXNlIGNvbm5lY3Rpb25zIG1haW50YWluZWQgYnkgdGhlIGRyaXZlci4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5udW1iZXJQYXJzZXIoJ21heFBvb2xTaXplJyksXG4gIH0sXG4gIG1heFN0YWxlbmVzc1NlY29uZHM6IHtcbiAgICBlbnY6ICdQQVJTRV9TRVJWRVJfREFUQUJBU0VfTUFYX1NUQUxFTkVTU19TRUNPTkRTJyxcbiAgICBoZWxwOlxuICAgICAgJ1RoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc2V0IHRoZSBtYXhpbXVtIHJlcGxpY2F0aW9uIGxhZyBmb3IgcmVhZHMgZnJvbSBzZWNvbmRhcnkgbm9kZXMuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMubnVtYmVyUGFyc2VyKCdtYXhTdGFsZW5lc3NTZWNvbmRzJyksXG4gIH0sXG4gIG1heFRpbWVNUzoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9EQVRBQkFTRV9NQVhfVElNRV9NUycsXG4gICAgaGVscDpcbiAgICAgICdUaGUgTW9uZ29EQiBkcml2ZXIgb3B0aW9uIHRvIHNldCBhIGN1bXVsYXRpdmUgdGltZSBsaW1pdCBpbiBtaWxsaXNlY29uZHMgZm9yIHByb2Nlc3Npbmcgb3BlcmF0aW9ucyBvbiBhIGN1cnNvci4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5udW1iZXJQYXJzZXIoJ21heFRpbWVNUycpLFxuICB9LFxuICBtaW5Qb29sU2l6ZToge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9EQVRBQkFTRV9NSU5fUE9PTF9TSVpFJyxcbiAgICBoZWxwOlxuICAgICAgJ1RoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc2V0IHRoZSBtaW5pbXVtIG51bWJlciBvZiBvcGVuZWQsIGNhY2hlZCwgcmVhZHktdG8tdXNlIGRhdGFiYXNlIGNvbm5lY3Rpb25zIG1haW50YWluZWQgYnkgdGhlIGRyaXZlci4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5udW1iZXJQYXJzZXIoJ21pblBvb2xTaXplJyksXG4gIH0sXG4gIHJldHJ5V3JpdGVzOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0RBVEFCQVNFX1JFVFJZX1dSSVRFUycsXG4gICAgaGVscDogJ1RoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc2V0IHdoZXRoZXIgdG8gcmV0cnkgZmFpbGVkIHdyaXRlcy4nLFxuICAgIGFjdGlvbjogcGFyc2Vycy5ib29sZWFuUGFyc2VyLFxuICB9LFxuICBzY2hlbWFDYWNoZVR0bDoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9EQVRBQkFTRV9TQ0hFTUFfQ0FDSEVfVFRMJyxcbiAgICBoZWxwOlxuICAgICAgJ1RoZSBkdXJhdGlvbiBpbiBzZWNvbmRzIGFmdGVyIHdoaWNoIHRoZSBzY2hlbWEgY2FjaGUgZXhwaXJlcyBhbmQgd2lsbCBiZSByZWZldGNoZWQgZnJvbSB0aGUgZGF0YWJhc2UuIFVzZSB0aGlzIG9wdGlvbiBpZiB1c2luZyBtdWx0aXBsZSBQYXJzZSBTZXJ2ZXJzIGluc3RhbmNlcyBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgZGF0YWJhc2UuIEEgbG93IGR1cmF0aW9uIHdpbGwgY2F1c2UgdGhlIHNjaGVtYSBjYWNoZSB0byBiZSB1cGRhdGVkIHRvbyBvZnRlbiwgY2F1c2luZyB1bm5lY2Vzc2FyeSBkYXRhYmFzZSByZWFkcy4gQSBoaWdoIGR1cmF0aW9uIHdpbGwgY2F1c2UgdGhlIHNjaGVtYSB0byBiZSB1cGRhdGVkIHRvbyByYXJlbHksIGluY3JlYXNpbmcgdGhlIHRpbWUgcmVxdWlyZWQgdW50aWwgc2NoZW1hIGNoYW5nZXMgcHJvcGFnYXRlIHRvIGFsbCBzZXJ2ZXIgaW5zdGFuY2VzLiBUaGlzIGZlYXR1cmUgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgb3IgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgb3B0aW9uIGBlbmFibGVTY2hlbWFIb29rc2AuIERlZmF1bHQgaXMgaW5maW5pdGUgd2hpY2ggbWVhbnMgdGhlIHNjaGVtYSBjYWNoZSBuZXZlciBleHBpcmVzLicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm51bWJlclBhcnNlcignc2NoZW1hQ2FjaGVUdGwnKSxcbiAgfSxcbiAgc29ja2V0VGltZW91dE1TOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0RBVEFCQVNFX1NPQ0tFVF9USU1FT1VUX01TJyxcbiAgICBoZWxwOlxuICAgICAgJ1RoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc3BlY2lmeSB0aGUgYW1vdW50IG9mIHRpbWUsIGluIG1pbGxpc2Vjb25kcywgc3BlbnQgYXR0ZW1wdGluZyB0byBzZW5kIG9yIHJlY2VpdmUgb24gYSBzb2NrZXQgYmVmb3JlIHRpbWluZyBvdXQuIFNwZWNpZnlpbmcgMCBtZWFucyBubyB0aW1lb3V0LicsXG4gICAgYWN0aW9uOiBwYXJzZXJzLm51bWJlclBhcnNlcignc29ja2V0VGltZW91dE1TJyksXG4gIH0sXG59O1xubW9kdWxlLmV4cG9ydHMuQXV0aEFkYXB0ZXIgPSB7XG4gIGVuYWJsZWQ6IHtcbiAgICBoZWxwOiAnSXMgYHRydWVgIGlmIHRoZSBhdXRoIGFkYXB0ZXIgaXMgZW5hYmxlZCwgYGZhbHNlYCBvdGhlcndpc2UuJyxcbiAgICBhY3Rpb246IHBhcnNlcnMuYm9vbGVhblBhcnNlcixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbn07XG5tb2R1bGUuZXhwb3J0cy5Mb2dMZXZlbHMgPSB7XG4gIGNsb3VkRnVuY3Rpb25FcnJvcjoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9MT0dfTEVWRUxTX0NMT1VEX0ZVTkNUSU9OX0VSUk9SJyxcbiAgICBoZWxwOiAnTG9nIGxldmVsIHVzZWQgYnkgdGhlIENsb3VkIENvZGUgRnVuY3Rpb25zIG9uIGVycm9yLiBEZWZhdWx0IGlzIGBlcnJvcmAuJyxcbiAgICBkZWZhdWx0OiAnZXJyb3InLFxuICB9LFxuICBjbG91ZEZ1bmN0aW9uU3VjY2Vzczoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9MT0dfTEVWRUxTX0NMT1VEX0ZVTkNUSU9OX1NVQ0NFU1MnLFxuICAgIGhlbHA6ICdMb2cgbGV2ZWwgdXNlZCBieSB0aGUgQ2xvdWQgQ29kZSBGdW5jdGlvbnMgb24gc3VjY2Vzcy4gRGVmYXVsdCBpcyBgaW5mb2AuJyxcbiAgICBkZWZhdWx0OiAnaW5mbycsXG4gIH0sXG4gIHRyaWdnZXJBZnRlcjoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9MT0dfTEVWRUxTX1RSSUdHRVJfQUZURVInLFxuICAgIGhlbHA6XG4gICAgICAnTG9nIGxldmVsIHVzZWQgYnkgdGhlIENsb3VkIENvZGUgVHJpZ2dlcnMgYGFmdGVyU2F2ZWAsIGBhZnRlckRlbGV0ZWAsIGBhZnRlckZpbmRgLCBgYWZ0ZXJMb2dvdXRgLiBEZWZhdWx0IGlzIGBpbmZvYC4nLFxuICAgIGRlZmF1bHQ6ICdpbmZvJyxcbiAgfSxcbiAgdHJpZ2dlckJlZm9yZUVycm9yOiB7XG4gICAgZW52OiAnUEFSU0VfU0VSVkVSX0xPR19MRVZFTFNfVFJJR0dFUl9CRUZPUkVfRVJST1InLFxuICAgIGhlbHA6XG4gICAgICAnTG9nIGxldmVsIHVzZWQgYnkgdGhlIENsb3VkIENvZGUgVHJpZ2dlcnMgYGJlZm9yZVNhdmVgLCBgYmVmb3JlRGVsZXRlYCwgYGJlZm9yZUZpbmRgLCBgYmVmb3JlTG9naW5gIG9uIGVycm9yLiBEZWZhdWx0IGlzIGBlcnJvcmAuJyxcbiAgICBkZWZhdWx0OiAnZXJyb3InLFxuICB9LFxuICB0cmlnZ2VyQmVmb3JlU3VjY2Vzczoge1xuICAgIGVudjogJ1BBUlNFX1NFUlZFUl9MT0dfTEVWRUxTX1RSSUdHRVJfQkVGT1JFX1NVQ0NFU1MnLFxuICAgIGhlbHA6XG4gICAgICAnTG9nIGxldmVsIHVzZWQgYnkgdGhlIENsb3VkIENvZGUgVHJpZ2dlcnMgYGJlZm9yZVNhdmVgLCBgYmVmb3JlRGVsZXRlYCwgYGJlZm9yZUZpbmRgLCBgYmVmb3JlTG9naW5gIG9uIHN1Y2Nlc3MuIERlZmF1bHQgaXMgYGluZm9gLicsXG4gICAgZGVmYXVsdDogJ2luZm8nLFxuICB9LFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsT0FBTyxHQUFHQyxPQUFPLENBQUMsV0FBVyxDQUFDO0FBQ2xDQyxNQUFNLENBQUNDLE9BQU8sQ0FBQ0MsYUFBYSxHQUFHO0VBQzdCQyxjQUFjLEVBQUU7SUFDZEMsR0FBRyxFQUFFLHFDQUFxQztJQUMxQ0MsSUFBSSxF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
@@ -242,6 +242,7 @@
242
242
  * @property {Boolean} autoSelectFamily The MongoDB driver option to set whether the socket attempts to connect to IPv6 and IPv4 addresses until a connection is established. If available, the driver will select the first IPv6 address.
243
243
  * @property {Number} autoSelectFamilyAttemptTimeout The MongoDB driver option to specify the amount of time in milliseconds to wait for a connection attempt to finish before trying the next address when using the autoSelectFamily option. If set to a positive integer less than 10, the value 10 is used instead.
244
244
  * @property {Number} connectTimeoutMS The MongoDB driver option to specify the amount of time, in milliseconds, to wait to establish a single TCP socket connection to the server before raising an error. Specifying 0 disables the connection timeout.
245
+ * @property {Boolean} disableIndexFieldValidation Set to `true` to disable validation of index fields. When disabled, indexes can be created even if the fields do not exist in the schema. This can be useful when creating indexes on fields that will be added later.
245
246
  * @property {Boolean} enableSchemaHooks Enables database real-time hooks to update single schema cache. Set to `true` if using multiple Parse Servers instances connected to the same database. Failing to do so will cause a schema change to not propagate to all instances and re-syncing will only happen when the instances restart. To use this feature with MongoDB, a replica set cluster with [change stream](https://docs.mongodb.com/manual/changeStreams/#availability) support is required.
246
247
  * @property {Number} maxPoolSize The MongoDB driver option to set the maximum number of opened, cached, ready-to-use database connections maintained by the driver.
247
248
  * @property {Number} maxStalenessSeconds The MongoDB driver option to set the maximum replication lag for reads from secondary nodes.
@@ -266,4 +267,4 @@
266
267
  * @property {String} triggerBeforeSuccess Log level used by the Cloud Code Triggers `beforeSave`, `beforeDelete`, `beforeFind`, `beforeLogin` on success. Default is `info`.
267
268
  */
268
269
  "use strict";
269
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL09wdGlvbnMvZG9jcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBpbnRlcmZhY2UgU2NoZW1hT3B0aW9uc1xuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gYWZ0ZXJNaWdyYXRpb24gRXhlY3V0ZSBhIGNhbGxiYWNrIGFmdGVyIHJ1bm5pbmcgc2NoZW1hIG1pZ3JhdGlvbnMuXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBiZWZvcmVNaWdyYXRpb24gRXhlY3V0ZSBhIGNhbGxiYWNrIGJlZm9yZSBydW5uaW5nIHNjaGVtYSBtaWdyYXRpb25zLlxuICogQHByb3BlcnR5IHtBbnl9IGRlZmluaXRpb25zIFJlc3QgcmVwcmVzZW50YXRpb24gb24gUGFyc2UuU2NoZW1hIGh0dHBzOi8vZG9jcy5wYXJzZXBsYXRmb3JtLm9yZy9yZXN0L2d1aWRlLyNhZGRpbmctYS1zY2hlbWFcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZGVsZXRlRXh0cmFGaWVsZHMgSXMgdHJ1ZSBpZiBQYXJzZSBTZXJ2ZXIgc2hvdWxkIGRlbGV0ZSBhbnkgZmllbGRzIG5vdCBkZWZpbmVkIGluIGEgc2NoZW1hIGRlZmluaXRpb24uIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBkdXJpbmcgZGV2ZWxvcG1lbnQuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGtlZXBVbmtub3duSW5kZXhlcyAoT3B0aW9uYWwpIEtlZXAgaW5kZXhlcyB0aGF0IGFyZSBwcmVzZW50IGluIHRoZSBkYXRhYmFzZSBidXQgbm90IGRlZmluZWQgaW4gdGhlIHNjaGVtYS4gU2V0IHRoaXMgdG8gYHRydWVgIGlmIHlvdSBhcmUgYWRkaW5nIGluZGV4ZXMgbWFudWFsbHksIHNvIHRoYXQgdGhleSB3b24ndCBiZSByZW1vdmVkIHdoZW4gcnVubmluZyBzY2hlbWEgbWlncmF0aW9uLiBEZWZhdWx0IGlzIGBmYWxzZWAuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGxvY2tTY2hlbWFzIElzIHRydWUgaWYgUGFyc2UgU2VydmVyIHdpbGwgcmVqZWN0IGFueSBhdHRlbXB0cyB0byBtb2RpZnkgdGhlIHNjaGVtYSB3aGlsZSB0aGUgc2VydmVyIGlzIHJ1bm5pbmcuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IHJlY3JlYXRlTW9kaWZpZWRGaWVsZHMgSXMgdHJ1ZSBpZiBQYXJzZSBTZXJ2ZXIgc2hvdWxkIHJlY3JlYXRlIGFueSBmaWVsZHMgdGhhdCBhcmUgZGlmZmVyZW50IGJldHdlZW4gdGhlIGN1cnJlbnQgZGF0YWJhc2Ugc2NoZW1hIGFuZCB0aGVzY2hlbWEgZGVmaW5pdGlvbi4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGR1cmluZyBkZXZlbG9wbWVudC5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gc3RyaWN0IElzIHRydWUgaWYgUGFyc2UgU2VydmVyIHNob3VsZCBleGl0IGlmIHNjaGVtYSB1cGRhdGUgZmFpbC5cbiAqL1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgUGFyc2VTZXJ2ZXJPcHRpb25zXG4gKiBAcHJvcGVydHkge0FjY291bnRMb2Nrb3V0T3B0aW9uc30gYWNjb3VudExvY2tvdXQgVGhlIGFjY291bnQgbG9ja291dCBwb2xpY3kgZm9yIGZhaWxlZCBsb2dpbiBhdHRlbXB0cy5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gYWxsb3dDbGllbnRDbGFzc0NyZWF0aW9uIEVuYWJsZSAob3IgZGlzYWJsZSkgY2xpZW50IGNsYXNzIGNyZWF0aW9uLCBkZWZhdWx0cyB0byBmYWxzZVxuICogQHByb3BlcnR5IHtCb29sZWFufSBhbGxvd0N1c3RvbU9iamVjdElkIEVuYWJsZSAob3IgZGlzYWJsZSkgY3VzdG9tIG9iamVjdElkXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGFsbG93RXhwaXJlZEF1dGhEYXRhVG9rZW4gQWxsb3cgYSB1c2VyIHRvIGxvZyBpbiBldmVuIGlmIHRoZSAzcmQgcGFydHkgYXV0aGVudGljYXRpb24gdG9rZW4gdGhhdCB3YXMgdXNlZCB0byBzaWduIGluIHRvIHRoZWlyIGFjY291bnQgaGFzIGV4cGlyZWQuIElmIHRoaXMgaXMgc2V0IHRvIGBmYWxzZWAsIHRoZW4gdGhlIHRva2VuIHdpbGwgYmUgdmFsaWRhdGVkIGV2ZXJ5IHRpbWUgdGhlIHVzZXIgc2lnbnMgaW4gdG8gdGhlaXIgYWNjb3VudC4gVGhpcyByZWZlcnMgdG8gdGhlIHRva2VuIHRoYXQgaXMgc3RvcmVkIGluIHRoZSBgX1VzZXIuYXV0aERhdGFgIGZpZWxkLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICogQHByb3BlcnR5IHtTdHJpbmdbXX0gYWxsb3dIZWFkZXJzIEFkZCBoZWFkZXJzIHRvIEFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnNcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfFN0cmluZ1tdfSBhbGxvd09yaWdpbiBTZXRzIG9yaWdpbnMgZm9yIEFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbi4gVGhpcyBjYW4gYmUgYSBzdHJpbmcgZm9yIGEgc2luZ2xlIG9yaWdpbiBvciBhbiBhcnJheSBvZiBzdHJpbmdzIGZvciBtdWx0aXBsZSBvcmlnaW5zLlxuICogQHByb3BlcnR5IHtBZGFwdGVyPEFuYWx5dGljc0FkYXB0ZXI+fSBhbmFseXRpY3NBZGFwdGVyIEFkYXB0ZXIgbW9kdWxlIGZvciB0aGUgYW5hbHl0aWNzXG4gKiBAcHJvcGVydHkge1N0cmluZ30gYXBwSWQgWW91ciBQYXJzZSBBcHBsaWNhdGlvbiBJRFxuICogQHByb3BlcnR5IHtTdHJpbmd9IGFwcE5hbWUgU2V0cyB0aGUgYXBwIG5hbWVcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBhdXRoIENvbmZpZ3VyYXRpb24gZm9yIHlvdXIgYXV0aGVudGljYXRpb24gcHJvdmlkZXJzLCBhcyBzdHJpbmdpZmllZCBKU09OLiBTZWUgaHR0cDovL2RvY3MucGFyc2VwbGF0Zm9ybS5vcmcvcGFyc2Utc2VydmVyL2d1aWRlLyNvYXV0aC1hbmQtM3JkLXBhcnR5LWF1dGhlbnRpY2F0aW9uXG4gKiBAcHJvcGVydHkge0FkYXB0ZXI8Q2FjaGVBZGFwdGVyPn0gY2FjaGVBZGFwdGVyIEFkYXB0ZXIgbW9kdWxlIGZvciB0aGUgY2FjaGVcbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBjYWNoZU1heFNpemUgU2V0cyB0aGUgbWF4aW11bSBzaXplIGZvciB0aGUgaW4gbWVtb3J5IGNhY2hlLCBkZWZhdWx0cyB0byAxMDAwMFxuICogQHByb3BlcnR5IHtOdW1iZXJ9IGNhY2hlVFRMIFNldHMgdGhlIFRUTCBmb3IgdGhlIGluIG1lbW9yeSBjYWNoZSAoaW4gbXMpLCBkZWZhdWx0cyB0byA1MDAwICg1IHNlY29uZHMpXG4gKiBAcHJvcGVydHkge1N0cmluZ30gY2xpZW50S2V5IEtleSBmb3IgaU9TLCBNYWNPUywgdHZPUyBjbGllbnRzXG4gKiBAcHJvcGVydHkge1N0cmluZ30gY2xvdWQgRnVsbCBwYXRoIHRvIHlvdXIgY2xvdWQgY29kZSBtYWluLmpzXG4gKiBAcHJvcGVydHkge051bWJlcnxCb29sZWFufSBjbHVzdGVyIFJ1biB3aXRoIGNsdXN0ZXIsIG9wdGlvbmFsbHkgc2V0IHRoZSBudW1iZXIgb2YgcHJvY2Vzc2VzIGRlZmF1bHQgdG8gb3MuY3B1cygpLmxlbmd0aFxuICogQHByb3BlcnR5IHtTdHJpbmd9IGNvbGxlY3Rpb25QcmVmaXggQSBjb2xsZWN0aW9uIHByZWZpeCBmb3IgdGhlIGNsYXNzZXNcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gY29udmVydEVtYWlsVG9Mb3dlcmNhc2UgT3B0aW9uYWwuIElmIHNldCB0byBgdHJ1ZWAsIHRoZSBgZW1haWxgIHByb3BlcnR5IG9mIGEgdXNlciBpcyBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBsb3dlcmNhc2UgYmVmb3JlIGJlaW5nIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UuIENvbnNlcXVlbnRseSwgcXVlcmllcyBtdXN0IG1hdGNoIHRoZSBjYXNlIGFzIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UsIHdoaWNoIHdvdWxkIGJlIGxvd2VyY2FzZSBpbiB0aGlzIHNjZW5hcmlvLiBJZiBgZmFsc2VgLCB0aGUgYGVtYWlsYCBwcm9wZXJ0eSBpcyBzdG9yZWQgYXMgc2V0LCB3aXRob3V0IGFueSBjYXNlIG1vZGlmaWNhdGlvbnMuIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gY29udmVydFVzZXJuYW1lVG9Mb3dlcmNhc2UgT3B0aW9uYWwuIElmIHNldCB0byBgdHJ1ZWAsIHRoZSBgdXNlcm5hbWVgIHByb3BlcnR5IG9mIGEgdXNlciBpcyBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBsb3dlcmNhc2UgYmVmb3JlIGJlaW5nIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UuIENvbnNlcXVlbnRseSwgcXVlcmllcyBtdXN0IG1hdGNoIHRoZSBjYXNlIGFzIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UsIHdoaWNoIHdvdWxkIGJlIGxvd2VyY2FzZSBpbiB0aGlzIHNjZW5hcmlvLiBJZiBgZmFsc2VgLCB0aGUgYHVzZXJuYW1lYCBwcm9wZXJ0eSBpcyBzdG9yZWQgYXMgc2V0LCB3aXRob3V0IGFueSBjYXNlIG1vZGlmaWNhdGlvbnMuIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAqIEBwcm9wZXJ0eSB7Q3VzdG9tUGFnZXNPcHRpb25zfSBjdXN0b21QYWdlcyBjdXN0b20gcGFnZXMgZm9yIHBhc3N3b3JkIHZhbGlkYXRpb24gYW5kIHJlc2V0XG4gKiBAcHJvcGVydHkge0FkYXB0ZXI8U3RvcmFnZUFkYXB0ZXI+fSBkYXRhYmFzZUFkYXB0ZXIgQWRhcHRlciBtb2R1bGUgZm9yIHRoZSBkYXRhYmFzZTsgYW55IG9wdGlvbnMgdGhhdCBhcmUgbm90IGV4cGxpY2l0bHkgZGVzY3JpYmVkIGhlcmUgYXJlIHBhc3NlZCBkaXJlY3RseSB0byB0aGUgZGF0YWJhc2UgY2xpZW50LlxuICogQHByb3BlcnR5IHtEYXRhYmFzZU9wdGlvbnN9IGRhdGFiYXNlT3B0aW9ucyBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIGRhdGFiYXNlIGNsaWVudFxuICogQHByb3BlcnR5IHtTdHJpbmd9IGRhdGFiYXNlVVJJIFRoZSBmdWxsIFVSSSB0byB5b3VyIGRhdGFiYXNlLiBTdXBwb3J0ZWQgZGF0YWJhc2VzIGFyZSBtb25nb2RiIG9yIHBvc3RncmVzLlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IGRlZmF1bHRMaW1pdCBEZWZhdWx0IHZhbHVlIGZvciBsaW1pdCBvcHRpb24gb24gcXVlcmllcywgZGVmYXVsdHMgdG8gYDEwMGAuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGRpcmVjdEFjY2VzcyBTZXQgdG8gYHRydWVgIGlmIFBhcnNlIHJlcXVlc3RzIHdpdGhpbiB0aGUgc2FtZSBOb2RlLmpzIGVudmlyb25tZW50IGFzIFBhcnNlIFNlcnZlciBzaG91bGQgYmUgcm91dGVkIHRvIFBhcnNlIFNlcnZlciBkaXJlY3RseSBpbnN0ZWFkIG9mIHZpYSB0aGUgSFRUUCBpbnRlcmZhY2UuIERlZmF1bHQgaXMgYGZhbHNlYC48YnI+PGJyPklmIHNldCB0byBgZmFsc2VgIHRoZW4gUGFyc2UgcmVxdWVzdHMgd2l0aGluIHRoZSBzYW1lIE5vZGUuanMgZW52aXJvbm1lbnQgYXMgUGFyc2UgU2VydmVyIGFyZSBleGVjdXRlZCBhcyBIVFRQIHJlcXVlc3RzIHNlbnQgdG8gUGFyc2UgU2VydmVyIHZpYSB0aGUgYHNlcnZlclVSTGAuIEZvciBleGFtcGxlLCBhIGBQYXJzZS5RdWVyeWAgaW4gQ2xvdWQgQ29kZSBpcyBjYWxsaW5nIFBhcnNlIFNlcnZlciB2aWEgYSBIVFRQIHJlcXVlc3QuIFRoZSBzZXJ2ZXIgaXMgZXNzZW50aWFsbHkgbWFraW5nIGEgSFRUUCByZXF1ZXN0IHRvIGl0c2VsZiwgdW5uZWNlc3NhcmlseSB1c2luZyBuZXR3b3JrIHJlc291cmNlcyBzdWNoIGFzIG5ldHdvcmsgcG9ydHMuPGJyPjxicj7imqDvuI8gSW4gZW52aXJvbm1lbnRzIHdoZXJlIG11bHRpcGxlIFBhcnNlIFNlcnZlciBpbnN0YW5jZXMgcnVuIGJlaGluZCBhIGxvYWQgYmFsYW5jZXIgYW5kIFBhcnNlIHJlcXVlc3RzIHdpdGhpbiB0aGUgY3VycmVudCBOb2RlLmpzIGVudmlyb25tZW50IHNob3VsZCBiZSByb3V0ZWQgdmlhIHRoZSBsb2FkIGJhbGFuY2VyIGFuZCBkaXN0cmlidXRlZCBhcyBIVFRQIHJlcXVlc3RzIGFtb25nIGFsbCBpbnN0YW5jZXMgdmlhIHRoZSBgc2VydmVyVVJMYCwgdGhpcyBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZG90TmV0S2V5IEtleSBmb3IgVW5pdHkgYW5kIC5OZXQgU0RLXG4gKiBAcHJvcGVydHkge0FkYXB0ZXI8TWFpbEFkYXB0ZXI+fSBlbWFpbEFkYXB0ZXIgQWRhcHRlciBtb2R1bGUgZm9yIGVtYWlsIHNlbmRpbmdcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCBTZXQgdG8gYHRydWVgIGlmIGEgZW1haWwgdmVyaWZpY2F0aW9uIHRva2VuIHNob3VsZCBiZSByZXVzZWQgaW4gY2FzZSBhbm90aGVyIHRva2VuIGlzIHJlcXVlc3RlZCBidXQgdGhlcmUgaXMgYSB0b2tlbiB0aGF0IGlzIHN0aWxsIHZhbGlkLCBpLmUuIGhhcyBub3QgZXhwaXJlZC4gVGhpcyBhdm9pZHMgdGhlIG9mdGVuIG9ic2VydmVkIGlzc3VlIHRoYXQgYSB1c2VyIHJlcXVlc3RzIG11bHRpcGxlIGVtYWlscyBhbmQgZG9lcyBub3Qga25vdyB3aGljaCBsaW5rIGNvbnRhaW5zIGEgdmFsaWQgdG9rZW4gYmVjYXVzZSBlYWNoIG5ld2x5IGdlbmVyYXRlZCB0b2tlbiB3b3VsZCBpbnZhbGlkYXRlIHRoZSBwcmV2aW91cyB0b2tlbi48YnI+PGJyPkRlZmF1bHQgaXMgYGZhbHNlYC48YnI+UmVxdWlyZXMgb3B0aW9uIGB2ZXJpZnlVc2VyRW1haWxzOiB0cnVlYC5cbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbiBTZXQgdGhlIHZhbGlkaXR5IGR1cmF0aW9uIG9mIHRoZSBlbWFpbCB2ZXJpZmljYXRpb24gdG9rZW4gaW4gc2Vjb25kcyBhZnRlciB3aGljaCB0aGUgdG9rZW4gZXhwaXJlcy4gVGhlIHRva2VuIGlzIHVzZWQgaW4gdGhlIGxpbmsgdGhhdCBpcyBzZXQgaW4gdGhlIGVtYWlsLiBBZnRlciB0aGUgdG9rZW4gZXhwaXJlcywgdGhlIGxpbmsgYmVjb21lcyBpbnZhbGlkIGFuZCBhIG5ldyBsaW5rIGhhcyB0byBiZSBzZW50LiBJZiB0aGUgb3B0aW9uIGlzIG5vdCBzZXQgb3Igc2V0IHRvIGB1bmRlZmluZWRgLCB0aGVuIHRoZSB0b2tlbiBuZXZlciBleHBpcmVzLjxicj48YnI+Rm9yIGV4YW1wbGUsIHRvIGV4cGlyZSB0aGUgdG9rZW4gYWZ0ZXIgMiBob3Vycywgc2V0IGEgdmFsdWUgb2YgNzIwMCBzZWNvbmRzICg9IDYwIHNlY29uZHMgKiA2MCBtaW51dGVzICogMiBob3VycykuPGJyPjxicj5EZWZhdWx0IGlzIGB1bmRlZmluZWRgLjxicj5SZXF1aXJlcyBvcHRpb24gYHZlcmlmeVVzZXJFbWFpbHM6IHRydWVgLlxuICogQHByb3BlcnR5IHtCb29sZWFufSBlbmFibGVBbm9ueW1vdXNVc2VycyBFbmFibGUgKG9yIGRpc2FibGUpIGFub255bW91cyB1c2VycywgZGVmYXVsdHMgdG8gdHJ1ZVxuICogQHByb3BlcnR5IHtCb29sZWFufSBlbmFibGVDb2xsYXRpb25DYXNlQ29tcGFyaXNvbiBPcHRpb25hbC4gSWYgc2V0IHRvIGB0cnVlYCwgdGhlIGNvbGxhdGlvbiBydWxlIG9mIGNhc2UgY29tcGFyaXNvbiBmb3IgcXVlcmllcyBhbmQgaW5kZXhlcyBpcyBlbmFibGVkLiBFbmFibGUgdGhpcyBvcHRpb24gdG8gcnVuIFBhcnNlIFNlcnZlciB3aXRoIE1vbmdvREIgQXRsYXMgU2VydmVybGVzcyBvciBBV1MgQW1hem9uIERvY3VtZW50REIuIElmIGBmYWxzZWAsIHRoZSBjb2xsYXRpb24gcnVsZSBvZiBjYXNlIGNvbXBhcmlzb24gaXMgZGlzYWJsZWQuIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZW5hYmxlRXhwcmVzc0Vycm9ySGFuZGxlciBFbmFibGVzIHRoZSBkZWZhdWx0IGV4cHJlc3MgZXJyb3IgaGFuZGxlciBmb3IgYWxsIGVycm9yc1xuICogQHByb3BlcnR5IHtCb29sZWFufSBlbmFibGVJbnNlY3VyZUF1dGhBZGFwdGVycyBFbmFibGUgKG9yIGRpc2FibGUpIGluc2VjdXJlIGF1dGggYWRhcHRlcnMsIGRlZmF1bHRzIHRvIHRydWUuIEluc2VjdXJlIGF1dGggYWRhcHRlcnMgYXJlIGRlcHJlY2F0ZWQgYW5kIGl0IGlzIHJlY29tbWVuZGVkIHRvIGRpc2FibGUgdGhlbS5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZW5jb2RlUGFyc2VPYmplY3RJbkNsb3VkRnVuY3Rpb24gSWYgc2V0IHRvIGB0cnVlYCwgYSBgUGFyc2UuT2JqZWN0YCB0aGF0IGlzIGluIHRoZSBwYXlsb2FkIHdoZW4gY2FsbGluZyBhIENsb3VkIEZ1bmN0aW9uIHdpbGwgYmUgY29udmVydGVkIHRvIGFuIGluc3RhbmNlIG9mIGBQYXJzZS5PYmplY3RgLiBJZiBgZmFsc2VgLCB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGNvbnZlcnRlZCBhbmQgaW5zdGVhZCBiZSBhIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0LCB3aGljaCBjb250YWlucyB0aGUgcmF3IGRhdGEgb2YgYSBgUGFyc2UuT2JqZWN0YCBidXQgaXMgbm90IGFuIGFjdHVhbCBpbnN0YW5jZSBvZiBgUGFyc2UuT2JqZWN0YC4gRGVmYXVsdCBpcyBgZmFsc2VgLiA8YnI+PGJyPuKEue+4jyBUaGUgZXhwZWN0ZWQgYmVoYXZpb3Igd291bGQgYmUgdGhhdCB0aGUgb2JqZWN0IGlzIGNvbnZlcnRlZCB0byBhbiBpbnN0YW5jZSBvZiBgUGFyc2UuT2JqZWN0YCwgc28geW91IHdvdWxkIG5vcm1hbGx5IHNldCB0aGlzIG9wdGlvbiB0byBgdHJ1ZWAuIFRoZSBkZWZhdWx0IGlzIGBmYWxzZWAgYmVjYXVzZSB0aGlzIGlzIGEgdGVtcG9yYXJ5IG9wdGlvbiB0aGF0IGhhcyBiZWVuIGludHJvZHVjZWQgdG8gYXZvaWQgYSBicmVha2luZyBjaGFuZ2Ugd2hlbiBmaXhpbmcgYSBidWcgd2hlcmUgSmF2YVNjcmlwdCBvYmplY3RzIGFyZSBub3QgY29udmVydGVkIHRvIGFjdHVhbCBpbnN0YW5jZXMgb2YgYFBhcnNlLk9iamVjdGAuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZW5jcnlwdGlvbktleSBLZXkgZm9yIGVuY3J5cHRpbmcgeW91ciBmaWxlc1xuICogQHByb3BlcnR5IHtCb29sZWFufSBlbmZvcmNlUHJpdmF0ZVVzZXJzIFNldCB0byB0cnVlIGlmIG5ldyB1c2VycyBzaG91bGQgYmUgY3JlYXRlZCB3aXRob3V0IHB1YmxpYyByZWFkIGFuZCB3cml0ZSBhY2Nlc3MuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGV4cGlyZUluYWN0aXZlU2Vzc2lvbnMgU2V0cyB3aGV0aGVyIHdlIHNob3VsZCBleHBpcmUgdGhlIGluYWN0aXZlIHNlc3Npb25zLCBkZWZhdWx0cyB0byB0cnVlLiBJZiBmYWxzZSwgYWxsIG5ldyBzZXNzaW9ucyBhcmUgY3JlYXRlZCB3aXRoIG5vIGV4cGlyYXRpb24gZGF0ZS5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZXh0ZW5kU2Vzc2lvbk9uVXNlIFdoZXRoZXIgUGFyc2UgU2VydmVyIHNob3VsZCBhdXRvbWF0aWNhbGx5IGV4dGVuZCBhIHZhbGlkIHNlc3Npb24gYnkgdGhlIHNlc3Npb25MZW5ndGguIEluIG9yZGVyIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNlc3Npb24gdXBkYXRlcyBpbiB0aGUgZGF0YWJhc2UsIGEgc2Vzc2lvbiB3aWxsIG9ubHkgYmUgZXh0ZW5kZWQgd2hlbiBhIHJlcXVlc3QgaXMgcmVjZWl2ZWQgYWZ0ZXIgYXQgbGVhc3QgaGFsZiBvZiB0aGUgY3VycmVudCBzZXNzaW9uJ3MgbGlmZXRpbWUgaGFzIHBhc3NlZC5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmaWxlS2V5IEtleSBmb3IgeW91ciBmaWxlc1xuICogQHByb3BlcnR5IHtBZGFwdGVyPEZpbGVzQWRhcHRlcj59IGZpbGVzQWRhcHRlciBBZGFwdGVyIG1vZHVsZSBmb3IgdGhlIGZpbGVzIHN1Yi1zeXN0ZW1cbiAqIEBwcm9wZXJ0eSB7RmlsZVVwbG9hZE9wdGlvbnN9IGZpbGVVcGxvYWQgT3B0aW9ucyBmb3IgZmlsZSB1cGxvYWRzXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZ3JhcGhRTFBhdGggTW91bnQgcGF0aCBmb3IgdGhlIEdyYXBoUUwgZW5kcG9pbnQsIGRlZmF1bHRzIHRvIC9ncmFwaHFsXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGdyYXBoUUxQdWJsaWNJbnRyb3NwZWN0aW9uIEVuYWJsZSBwdWJsaWMgaW50cm9zcGVjdGlvbiBmb3IgdGhlIEdyYXBoUUwgZW5kcG9pbnQsIGRlZmF1bHRzIHRvIGZhbHNlXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZ3JhcGhRTFNjaGVtYSBGdWxsIHBhdGggdG8geW91ciBHcmFwaFFMIGN1c3RvbSBzY2hlbWEuZ3JhcGhxbCBmaWxlXG4gKiBAcHJvcGVydHkge1N0cmluZ30gaG9zdCBUaGUgaG9zdCB0byBzZXJ2ZSBQYXJzZVNlcnZlciBvbiwgZGVmYXVsdHMgdG8gMC4wLjAuMFxuICogQHByb3BlcnR5IHtJZGVtcG90ZW5jeU9wdGlvbnN9IGlkZW1wb3RlbmN5T3B0aW9ucyBPcHRpb25zIGZvciByZXF1ZXN0IGlkZW1wb3RlbmN5IHRvIGRlZHVwbGljYXRlIGlkZW50aWNhbCByZXF1ZXN0cyB0aGF0IG1heSBiZSBjYXVzZWQgYnkgbmV0d29yayBpc3N1ZXMuIENhdXRpb24sIHRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmUgdGhhdCBtYXkgbm90IGJlIGFwcHJvcHJpYXRlIGZvciBwcm9kdWN0aW9uLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IGphdmFzY3JpcHRLZXkgS2V5IGZvciB0aGUgSmF2YXNjcmlwdCBTREtcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0ganNvbkxvZ3MgTG9nIGFzIHN0cnVjdHVyZWQgSlNPTiBvYmplY3RzXG4gKiBAcHJvcGVydHkge0xpdmVRdWVyeU9wdGlvbnN9IGxpdmVRdWVyeSBwYXJzZS1zZXJ2ZXIncyBMaXZlUXVlcnkgY29uZmlndXJhdGlvbiBvYmplY3RcbiAqIEBwcm9wZXJ0eSB7TGl2ZVF1ZXJ5U2VydmVyT3B0aW9uc30gbGl2ZVF1ZXJ5U2VydmVyT3B0aW9ucyBMaXZlIHF1ZXJ5IHNlcnZlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgKHdpbGwgc3RhcnQgdGhlIGxpdmVRdWVyeSBzZXJ2ZXIpXG4gKiBAcHJvcGVydHkge0FkYXB0ZXI8TG9nZ2VyQWRhcHRlcj59IGxvZ2dlckFkYXB0ZXIgQWRhcHRlciBtb2R1bGUgZm9yIHRoZSBsb2dnaW5nIHN1Yi1zeXN0ZW1cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBsb2dMZXZlbCBTZXRzIHRoZSBsZXZlbCBmb3IgbG9nc1xuICogQHByb3BlcnR5IHtMb2dMZXZlbHN9IGxvZ0xldmVscyAoT3B0aW9uYWwpIE92ZXJyaWRlcyB0aGUgbG9nIGxldmVscyB1c2VkIGludGVybmFsbHkgYnkgUGFyc2UgU2VydmVyIHRvIGxvZyBldmVudHMuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbG9nc0ZvbGRlciBGb2xkZXIgZm9yIHRoZSBsb2dzIChkZWZhdWx0cyB0byAnLi9sb2dzJyk7IHNldCB0byBudWxsIHRvIGRpc2FibGUgZmlsZSBiYXNlZCBsb2dnaW5nXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbWFpbnRlbmFuY2VLZXkgKE9wdGlvbmFsKSBUaGUgbWFpbnRlbmFuY2Uga2V5IGlzIHVzZWQgZm9yIG1vZGlmeWluZyBpbnRlcm5hbCBhbmQgcmVhZC1vbmx5IGZpZWxkcyBvZiBQYXJzZSBTZXJ2ZXIuPGJyPjxicj7imqDvuI8gVGhpcyBrZXkgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgYXMgcGFydCBvZiBhIHJlZ3VsYXIgb3BlcmF0aW9uIG9mIFBhcnNlIFNlcnZlci4gVGhpcyBrZXkgaXMgaW50ZW5kZWQgdG8gY29uZHVjdCBvdXQtb2YtYmFuZCBjaGFuZ2VzIHN1Y2ggYXMgb25lLXRpbWUgbWlncmF0aW9ucyBvciBkYXRhIGNvcnJlY3Rpb24gdGFza3MuIEludGVybmFsIGZpZWxkcyBhcmUgbm90IG9mZmljaWFsbHkgZG9jdW1lbnRlZCBhbmQgbWF5IGNoYW5nZSBhdCBhbnkgdGltZSB3aXRob3V0IHB1YmxpY2F0aW9uIGluIHJlbGVhc2UgY2hhbmdlbG9ncy4gV2Ugc3Ryb25nbHkgYWR2aWNlIG5vdCB0byByZWx5IG9uIGludGVybmFsIGZpZWxkcyBhcyBwYXJ0IG9mIHlvdXIgcmVndWxhciBvcGVyYXRpb24gYW5kIHRvIGludmVzdGlnYXRlIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IHBsYW5uZWQgY2hhbmdlcyAqZGlyZWN0bHkgaW4gdGhlIHNvdXJjZSBjb2RlKiBvZiB5b3VyIGN1cnJlbnQgdmVyc2lvbiBvZiBQYXJzZSBTZXJ2ZXIuXG4gKiBAcHJvcGVydHkge1N0cmluZ1tdfSBtYWludGVuYW5jZUtleUlwcyAoT3B0aW9uYWwpIFJlc3RyaWN0cyB0aGUgdXNlIG9mIG1haW50ZW5hbmNlIGtleSBwZXJtaXNzaW9ucyB0byBhIGxpc3Qgb2YgSVAgYWRkcmVzc2VzIG9yIHJhbmdlcy48YnI+PGJyPlRoaXMgb3B0aW9uIGFjY2VwdHMgYSBsaXN0IG9mIHNpbmdsZSBJUCBhZGRyZXNzZXMsIGZvciBleGFtcGxlIGBbJzEwLjAuMC4xJywgJzEwLjAuMC4yJ11gLiBZb3UgY2FuIGFsc28gdXNlIENJRFIgbm90YXRpb24gdG8gc3BlY2lmeSBhbiBJUCBhZGRyZXNzIHJhbmdlLCBmb3IgZXhhbXBsZSBgWycxMC4wLjEuMC8yNCddYC48YnI+PGJyPjxiPlNwZWNpYWwgc2NlbmFyaW9zOjwvYj48YnI+LSBTZXR0aW5nIGFuIGVtcHR5IGFycmF5IGBbXWAgbWVhbnMgdGhhdCB0aGUgbWFpbnRlbmFuY2Uga2V5IGNhbm5vdCBiZSB1c2VkIGV2ZW4gaW4gUGFyc2UgU2VydmVyIENsb3VkIENvZGUuIFRoaXMgdmFsdWUgY2Fubm90IGJlIHNldCB2aWEgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgYXMgdGhlcmUgaXMgbm8gd2F5IHRvIHBhc3MgYW4gZW1wdHkgYXJyYXkgdG8gUGFyc2UgU2VydmVyIHZpYSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS48YnI+LSBTZXR0aW5nIGBbJzAuMC4wLjAvMCcsICc6OjAnXWAgbWVhbnMgdG8gYWxsb3cgYW55IElQdjQgYW5kIElQdjYgYWRkcmVzcyB0byB1c2UgdGhlIG1haW50ZW5hbmNlIGtleSBhbmQgZWZmZWN0aXZlbHkgZGlzYWJsZXMgdGhlIElQIGZpbHRlci48YnI+PGJyPjxiPkNvbnNpZGVyYXRpb25zOjwvYj48YnI+LSBJUHY0IGFuZCBJUHY2IGFkZHJlc3NlcyBhcmUgbm90IGNvbXBhcmVkIGFnYWluc3QgZWFjaCBvdGhlci4gRWFjaCBJUCB2ZXJzaW9uIChJUHY0IGFuZCBJUHY2KSBuZWVkcyB0byBiZSBjb25zaWRlcmVkIHNlcGFyYXRlbHkuIEZvciBleGFtcGxlLCBgWycwLjAuMC4wLzAnXWAgYWxsb3dzIGFueSBJUHY0IGFkZHJlc3MgYW5kIGJsb2NrcyBldmVyeSBJUHY2IGFkZHJlc3MuIENvbnZlcnNlbHksIGBbJzo6MCddYCBhbGxvd3MgYW55IElQdjYgYWRkcmVzcyBhbmQgYmxvY2tzIGV2ZXJ5IElQdjQgYWRkcmVzcy48YnI+LSBLZWVwIGluIG1pbmQgdGhhdCB0aGUgSVAgdmVyc2lvbiBpbiB1c2UgZGVwZW5kcyBvbiB0aGUgbmV0d29yayBzdGFjayBvZiB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggUGFyc2UgU2VydmVyIHJ1bnMuIEEgbG9jYWwgZW52aXJvbm1lbnQgbWF5IHVzZSBhIGRpZmZlcmVudCBJUCB2ZXJzaW9uIHRoYW4gYSByZW1vdGUgZW52aXJvbm1lbnQuIEZvciBleGFtcGxlLCBpdCdzIHBvc3NpYmxlIHRoYXQgbG9jYWxseSB0aGUgdmFsdWUgYFsnMC4wLjAuMC8wJ11gIGFsbG93cyB0aGUgcmVxdWVzdCBJUCBiZWNhdXNlIHRoZSBlbnZpcm9ubWVudCBpcyB1c2luZyBJUHY0LCBidXQgd2hlbiBQYXJzZSBTZXJ2ZXIgaXMgZGVwbG95ZWQgcmVtb3RlbHkgdGhlIHJlcXVlc3QgSVAgaXMgYmxvY2tlZCBiZWNhdXNlIHRoZSByZW1vdGUgZW52aXJvbm1lbnQgaXMgdXNpbmcgSVB2Ni48YnI+LSBXaGVuIHNldHRpbmcgdGhlIG9wdGlvbiB2aWEgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdGhlIG5vdGF0aW9uIGlzIGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZywgZm9yIGV4YW1wbGUgYFwiMC4wLjAuMC8wLDo6MFwiYC48YnI+LSBJUHY2IHpvbmUgaW5kaWNlcyAoYCVgIHN1ZmZpeCkgYXJlIG5vdCBzdXBwb3J0ZWQsIGZvciBleGFtcGxlIGBmZTgwOjoxJWV0aDBgLCBgZmU4MDo6MSUxYCBvciBgOjoxJWxvYC48YnI+PGJyPkRlZmF1bHRzIHRvIGBbJzEyNy4wLjAuMScsICc6OjEnXWAgd2hpY2ggbWVhbnMgdGhhdCBvbmx5IGBsb2NhbGhvc3RgLCB0aGUgc2VydmVyIGluc3RhbmNlIG9uIHdoaWNoIFBhcnNlIFNlcnZlciBydW5zLCBpcyBhbGxvd2VkIHRvIHVzZSB0aGUgbWFpbnRlbmFuY2Uga2V5LlxuICogQHByb3BlcnR5IHtVbmlvbn0gbWFzdGVyS2V5IFlvdXIgUGFyc2UgTWFzdGVyIEtleVxuICogQHByb3BlcnR5IHtTdHJpbmdbXX0gbWFzdGVyS2V5SXBzIChPcHRpb25hbCkgUmVzdHJpY3RzIHRoZSB1c2Ugb2YgbWFzdGVyIGtleSBwZXJtaXNzaW9ucyB0byBhIGxpc3Qgb2YgSVAgYWRkcmVzc2VzIG9yIHJhbmdlcy48YnI+PGJyPlRoaXMgb3B0aW9uIGFjY2VwdHMgYSBsaXN0IG9mIHNpbmdsZSBJUCBhZGRyZXNzZXMsIGZvciBleGFtcGxlIGBbJzEwLjAuMC4xJywgJzEwLjAuMC4yJ11gLiBZb3UgY2FuIGFsc28gdXNlIENJRFIgbm90YXRpb24gdG8gc3BlY2lmeSBhbiBJUCBhZGRyZXNzIHJhbmdlLCBmb3IgZXhhbXBsZSBgWycxMC4wLjEuMC8yNCddYC48YnI+PGJyPjxiPlNwZWNpYWwgc2NlbmFyaW9zOjwvYj48YnI+LSBTZXR0aW5nIGFuIGVtcHR5IGFycmF5IGBbXWAgbWVhbnMgdGhhdCB0aGUgbWFzdGVyIGtleSBjYW5ub3QgYmUgdXNlZCBldmVuIGluIFBhcnNlIFNlcnZlciBDbG91ZCBDb2RlLiBUaGlzIHZhbHVlIGNhbm5vdCBiZSBzZXQgdmlhIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGFzIHRoZXJlIGlzIG5vIHdheSB0byBwYXNzIGFuIGVtcHR5IGFycmF5IHRvIFBhcnNlIFNlcnZlciB2aWEgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuPGJyPi0gU2V0dGluZyBgWycwLjAuMC4wLzAnLCAnOjowJ11gIG1lYW5zIHRvIGFsbG93IGFueSBJUHY0IGFuZCBJUHY2IGFkZHJlc3MgdG8gdXNlIHRoZSBtYXN0ZXIga2V5IGFuZCBlZmZlY3RpdmVseSBkaXNhYmxlcyB0aGUgSVAgZmlsdGVyLjxicj48YnI+PGI+Q29uc2lkZXJhdGlvbnM6PC9iPjxicj4tIElQdjQgYW5kIElQdjYgYWRkcmVzc2VzIGFyZSBub3QgY29tcGFyZWQgYWdhaW5zdCBlYWNoIG90aGVyLiBFYWNoIElQIHZlcnNpb24gKElQdjQgYW5kIElQdjYpIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQgc2VwYXJhdGVseS4gRm9yIGV4YW1wbGUsIGBbJzAuMC4wLjAvMCddYCBhbGxvd3MgYW55IElQdjQgYWRkcmVzcyBhbmQgYmxvY2tzIGV2ZXJ5IElQdjYgYWRkcmVzcy4gQ29udmVyc2VseSwgYFsnOjowJ11gIGFsbG93cyBhbnkgSVB2NiBhZGRyZXNzIGFuZCBibG9ja3MgZXZlcnkgSVB2NCBhZGRyZXNzLjxicj4tIEtlZXAgaW4gbWluZCB0aGF0IHRoZSBJUCB2ZXJzaW9uIGluIHVzZSBkZXBlbmRzIG9uIHRoZSBuZXR3b3JrIHN0YWNrIG9mIHRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCBQYXJzZSBTZXJ2ZXIgcnVucy4gQSBsb2NhbCBlbnZpcm9ubWVudCBtYXkgdXNlIGEgZGlmZmVyZW50IElQIHZlcnNpb24gdGhhbiBhIHJlbW90ZSBlbnZpcm9ubWVudC4gRm9yIGV4YW1wbGUsIGl0J3MgcG9zc2libGUgdGhhdCBsb2NhbGx5IHRoZSB2YWx1ZSBgWycwLjAuMC4wLzAnXWAgYWxsb3dzIHRoZSByZXF1ZXN0IElQIGJlY2F1c2UgdGhlIGVudmlyb25tZW50IGlzIHVzaW5nIElQdjQsIGJ1dCB3aGVuIFBhcnNlIFNlcnZlciBpcyBkZXBsb3llZCByZW1vdGVseSB0aGUgcmVxdWVzdCBJUCBpcyBibG9ja2VkIGJlY2F1c2UgdGhlIHJlbW90ZSBlbnZpcm9ubWVudCBpcyB1c2luZyBJUHY2Ljxicj4tIFdoZW4gc2V0dGluZyB0aGUgb3B0aW9uIHZpYSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0aGUgbm90YXRpb24gaXMgYSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nLCBmb3IgZXhhbXBsZSBgXCIwLjAuMC4wLzAsOjowXCJgLjxicj4tIElQdjYgem9uZSBpbmRpY2VzIChgJWAgc3VmZml4KSBhcmUgbm90IHN1cHBvcnRlZCwgZm9yIGV4YW1wbGUgYGZlODA6OjElZXRoMGAsIGBmZTgwOjoxJTFgIG9yIGA6OjElbG9gLjxicj48YnI+RGVmYXVsdHMgdG8gYFsnMTI3LjAuMC4xJywgJzo6MSddYCB3aGljaCBtZWFucyB0aGF0IG9ubHkgYGxvY2FsaG9zdGAsIHRoZSBzZXJ2ZXIgaW5zdGFuY2Ugb24gd2hpY2ggUGFyc2UgU2VydmVyIHJ1bnMsIGlzIGFsbG93ZWQgdG8gdXNlIHRoZSBtYXN0ZXIga2V5LlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IG1hc3RlcktleVR0bCAoT3B0aW9uYWwpIFRoZSBkdXJhdGlvbiBpbiBzZWNvbmRzIGZvciB3aGljaCB0aGUgY3VycmVudCBgbWFzdGVyS2V5YCBpcyBiZWluZyB1c2VkIGJlZm9yZSBpdCBpcyByZXF1ZXN0ZWQgYWdhaW4gaWYgYG1hc3RlcktleWAgaXMgc2V0IHRvIGEgZnVuY3Rpb24uIElmIGBtYXN0ZXJLZXlgIGlzIG5vdCBzZXQgdG8gYSBmdW5jdGlvbiwgdGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdC4gRGVmYXVsdCBpcyBgMGAsIHdoaWNoIG1lYW5zIHRoZSBtYXN0ZXIga2V5IGlzIHJlcXVlc3RlZCBieSBpbnZva2luZyB0aGUgIGBtYXN0ZXJLZXlgIGZ1bmN0aW9uIGV2ZXJ5IHRpbWUgdGhlIG1hc3RlciBrZXkgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IFBhcnNlIFNlcnZlci5cbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBtYXhMaW1pdCBNYXggdmFsdWUgZm9yIGxpbWl0IG9wdGlvbiBvbiBxdWVyaWVzLCBkZWZhdWx0cyB0byB1bmxpbWl0ZWRcbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfFN0cmluZ30gbWF4TG9nRmlsZXMgTWF4aW11bSBudW1iZXIgb2YgbG9ncyB0byBrZWVwLiBJZiBub3Qgc2V0LCBubyBsb2dzIHdpbGwgYmUgcmVtb3ZlZC4gVGhpcyBjYW4gYmUgYSBudW1iZXIgb2YgZmlsZXMgb3IgbnVtYmVyIG9mIGRheXMuIElmIHVzaW5nIGRheXMsIGFkZCAnZCcgYXMgdGhlIHN1ZmZpeC4gKGRlZmF1bHQ6IG51bGwpXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbWF4VXBsb2FkU2l6ZSBNYXggZmlsZSBzaXplIGZvciB1cGxvYWRzLCBkZWZhdWx0cyB0byAyMG1iXG4gKiBAcHJvcGVydHkge1VuaW9ufSBtaWRkbGV3YXJlIG1pZGRsZXdhcmUgZm9yIGV4cHJlc3Mgc2VydmVyLCBjYW4gYmUgc3RyaW5nIG9yIGZ1bmN0aW9uXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IG1vdW50R3JhcGhRTCBNb3VudHMgdGhlIEdyYXBoUUwgZW5kcG9pbnRcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtb3VudFBhdGggTW91bnQgcGF0aCBmb3IgdGhlIHNlcnZlciwgZGVmYXVsdHMgdG8gL3BhcnNlXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IG1vdW50UGxheWdyb3VuZCBNb3VudHMgdGhlIEdyYXBoUUwgUGxheWdyb3VuZCAtIG5ldmVyIHVzZSB0aGlzIG9wdGlvbiBpbiBwcm9kdWN0aW9uXG4gKiBAcHJvcGVydHkge051bWJlcn0gb2JqZWN0SWRTaXplIFNldHMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIGdlbmVyYXRlZCBvYmplY3QgaWQncywgZGVmYXVsdCAxMFxuICogQHByb3BlcnR5IHtQYWdlc09wdGlvbnN9IHBhZ2VzIFRoZSBvcHRpb25zIGZvciBwYWdlcyBzdWNoIGFzIHBhc3N3b3JkIHJlc2V0IGFuZCBlbWFpbCB2ZXJpZmljYXRpb24uXG4gKiBAcHJvcGVydHkge1Bhc3N3b3JkUG9saWN5T3B0aW9uc30gcGFzc3dvcmRQb2xpY3kgVGhlIHBhc3N3b3JkIHBvbGljeSBmb3IgZW5mb3JjaW5nIHBhc3N3b3JkIHJlbGF0ZWQgcnVsZXMuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gcGxheWdyb3VuZFBhdGggTW91bnQgcGF0aCBmb3IgdGhlIEdyYXBoUUwgUGxheWdyb3VuZCwgZGVmYXVsdHMgdG8gL3BsYXlncm91bmRcbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBwb3J0IFRoZSBwb3J0IHRvIHJ1biB0aGUgUGFyc2VTZXJ2ZXIsIGRlZmF1bHRzIHRvIDEzMzcuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IHByZXNlcnZlRmlsZU5hbWUgRW5hYmxlIChvciBkaXNhYmxlKSB0aGUgYWRkaXRpb24gb2YgYSB1bmlxdWUgaGFzaCB0byB0aGUgZmlsZSBuYW1lc1xuICogQHByb3BlcnR5IHtCb29sZWFufSBwcmV2ZW50TG9naW5XaXRoVW52ZXJpZmllZEVtYWlsIFNldCB0byBgdHJ1ZWAgdG8gcHJldmVudCBhIHVzZXIgZnJvbSBsb2dnaW5nIGluIGlmIHRoZSBlbWFpbCBoYXMgbm90IHlldCBiZWVuIHZlcmlmaWVkIGFuZCBlbWFpbCB2ZXJpZmljYXRpb24gaXMgcmVxdWlyZWQuPGJyPjxicj5EZWZhdWx0IGlzIGBmYWxzZWAuPGJyPlJlcXVpcmVzIG9wdGlvbiBgdmVyaWZ5VXNlckVtYWlsczogdHJ1ZWAuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IHByZXZlbnRTaWdudXBXaXRoVW52ZXJpZmllZEVtYWlsIElmIHNldCB0byBgdHJ1ZWAgaXQgcHJldmVudHMgYSB1c2VyIGZyb20gc2lnbmluZyB1cCBpZiB0aGUgZW1haWwgaGFzIG5vdCB5ZXQgYmVlbiB2ZXJpZmllZCBhbmQgZW1haWwgdmVyaWZpY2F0aW9uIGlzIHJlcXVpcmVkLiBJbiB0aGF0IGNhc2UgdGhlIHNlcnZlciByZXNwb25kcyB0byB0aGUgc2lnbi11cCB3aXRoIEhUVFAgc3RhdHVzIDQwMCBhbmQgYSBQYXJzZSBFcnJvciAyMDUgYEVNQUlMX05PVF9GT1VORGAuIElmIHNldCB0byBgZmFsc2VgIHRoZSBzZXJ2ZXIgcmVzcG9uZHMgd2l0aCBIVFRQIHN0YXR1cyAyMDAsIGFuZCBjbGllbnQgU0RLcyByZXR1cm4gYW4gdW5hdXRoZW50aWNhdGVkIFBhcnNlIFVzZXIgd2l0aG91dCBzZXNzaW9uIHRva2VuLiBJbiB0aGF0IGNhc2Ugc3Vic2VxdWVudCByZXF1ZXN0cyBmYWlsIHVudGlsIHRoZSB1c2VyJ3MgZW1haWwgYWRkcmVzcyBpcyB2ZXJpZmllZC48YnI+PGJyPkRlZmF1bHQgaXMgYGZhbHNlYC48YnI+UmVxdWlyZXMgb3B0aW9uIGB2ZXJpZnlVc2VyRW1haWxzOiB0cnVlYC5cbiAqIEBwcm9wZXJ0eSB7UHJvdGVjdGVkRmllbGRzfSBwcm90ZWN0ZWRGaWVsZHMgUHJvdGVjdGVkIGZpZWxkcyB0aGF0IHNob3VsZCBiZSB0cmVhdGVkIHdpdGggZXh0cmEgc2VjdXJpdHkgd2hlbiBmZXRjaGluZyBkZXRhaWxzLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IHB1YmxpY1NlcnZlclVSTCBQdWJsaWMgVVJMIHRvIHlvdXIgcGFyc2Ugc2VydmVyIHdpdGggaHR0cDovLyBvciBodHRwczovLy5cbiAqIEBwcm9wZXJ0eSB7QW55fSBwdXNoIENvbmZpZ3VyYXRpb24gZm9yIHB1c2gsIGFzIHN0cmluZ2lmaWVkIEpTT04uIFNlZSBodHRwOi8vZG9jcy5wYXJzZXBsYXRmb3JtLm9yZy9wYXJzZS1zZXJ2ZXIvZ3VpZGUvI3B1c2gtbm90aWZpY2F0aW9uc1xuICogQHByb3BlcnR5IHtSYXRlTGltaXRPcHRpb25zW119IHJhdGVMaW1pdCBPcHRpb25zIHRvIGxpbWl0IHJlcGVhdGVkIHJlcXVlc3RzIHRvIFBhcnNlIFNlcnZlciBBUElzLiBUaGlzIGNhbiBiZSB1c2VkIHRvIHByb3RlY3Qgc2Vuc2l0aXZlIGVuZHBvaW50cyBzdWNoIGFzIGAvcmVxdWVzdFBhc3N3b3JkUmVzZXRgIGZyb20gYnJ1dGUtZm9yY2UgYXR0YWNrcyBvciBQYXJzZSBTZXJ2ZXIgYXMgYSB3aG9sZSBmcm9tIGRlbmlhbC1vZi1zZXJ2aWNlIChEb1MpIGF0dGFja3MuPGJyPjxicj7ihLnvuI8gTWluZCB0aGUgZm9sbG93aW5nIGxpbWl0YXRpb25zOjxicj4tIHJhdGUgbGltaXRzIGFwcGxpZWQgcGVyIElQIGFkZHJlc3M7IHRoaXMgbGltaXRzIHByb3RlY3Rpb24gYWdhaW5zdCBkaXN0cmlidXRlZCBkZW5pYWwtb2Ytc2VydmljZSAoRERvUykgYXR0YWNrcyB3aGVyZSBtYW55IHJlcXVlc3RzIGFyZSBjb21pbmcgZnJvbSB2YXJpb3VzIElQIGFkZHJlc3Nlczxicj4tIGlmIG11bHRpcGxlIFBhcnNlIFNlcnZlciBpbnN0YW5jZXMgYXJlIGJlaGluZCBhIGxvYWQgYmFsYW5jZXIgb3IgcmFuIGluIGEgY2x1c3RlciwgZWFjaCBpbnN0YW5jZSB3aWxsIGNhbGN1bGF0ZSBpdCdzIG93biByZXF1ZXN0IHJhdGVzLCBpbmRlcGVuZGVudCBmcm9tIG90aGVyIGluc3RhbmNlczsgdGhpcyBsaW1pdHMgdGhlIGFwcGxpY2FiaWxpdHkgb2YgdGhpcyBmZWF0dXJlIHdoZW4gdXNpbmcgYSBsb2FkIGJhbGFuY2VyIGFuZCBhbm90aGVyIHJhdGUgbGltaXRpbmcgc29sdXRpb24gdGhhdCB0YWtlcyByZXF1ZXN0cyBhY3Jvc3MgYWxsIGluc3RhbmNlcyBpbnRvIGFjY291bnQgbWF5IGJlIG1vcmUgc3VpdGFibGU8YnI+LSB0aGlzIGZlYXR1cmUgcHJvdmlkZXMgYmFzaWMgcHJvdGVjdGlvbiBhZ2FpbnN0IGRlbmlhbC1vZi1zZXJ2aWNlIGF0dGFja3MsIGJ1dCBhIG1vcmUgc29waGlzdGljYXRlZCBzb2x1dGlvbiB3b3JrcyBlYXJsaWVyIGluIHRoZSByZXF1ZXN0IGZsb3cgYW5kIHByZXZlbnRzIGEgbWFsaWNpb3VzIHJlcXVlc3RzIHRvIGV2ZW4gcmVhY2ggYSBzZXJ2ZXIgaW5zdGFuY2U7IGl0J3MgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGltcGxlbWVudCBhIHNvbHV0aW9uIGFjY29yZGluZyB0byBhcmNoaXRlY3R1cmUgYW5kIHVzZXIgY2FzZS5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSByZWFkT25seU1hc3RlcktleSBSZWFkLW9ubHkga2V5LCB3aGljaCBoYXMgdGhlIHNhbWUgY2FwYWJpbGl0aWVzIGFzIE1hc3RlcktleSB3aXRob3V0IHdyaXRlc1xuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gcmVxdWVzdENvbnRleHRNaWRkbGV3YXJlIE9wdGlvbnMgdG8gY3VzdG9taXplIHRoZSByZXF1ZXN0IGNvbnRleHQgdXNpbmcgaW52ZXJzaW9uIG9mIGNvbnRyb2wvZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gKiBAcHJvcGVydHkge1JlcXVlc3RLZXl3b3JkRGVueWxpc3RbXX0gcmVxdWVzdEtleXdvcmREZW55bGlzdCBBbiBhcnJheSBvZiBrZXlzIGFuZCB2YWx1ZXMgdGhhdCBhcmUgcHJvaGliaXRlZCBpbiBkYXRhYmFzZSByZWFkIGFuZCB3cml0ZSByZXF1ZXN0cyB0byBwcmV2ZW50IHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEl0IGlzIHBvc3NpYmxlIHRvIHNwZWNpZnkgb25seSBhIGtleSAoYHtcImtleVwiOlwiLi4uXCJ9YCksIG9ubHkgYSB2YWx1ZSAoYHtcInZhbHVlXCI6XCIuLi5cIn1gKSBvciBhIGtleS12YWx1ZSBwYWlyIChge1wia2V5XCI6XCIuLi5cIixcInZhbHVlXCI6XCIuLi5cIn1gKS4gVGhlIHNwZWNpZmljYXRpb24gY2FuIHVzZSB0aGUgZm9sbG93aW5nIHR5cGVzOiBgYm9vbGVhbmAsIGBudW1lcmljYCBvciBgc3RyaW5nYCwgd2hlcmUgYHN0cmluZ2Agd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhIHJlZ2V4IG5vdGF0aW9uLiBSZXF1ZXN0IGRhdGEgaXMgZGVlcC1zY2FubmVkIGZvciBtYXRjaGluZyBkZWZpbml0aW9ucyB0byBkZXRlY3QgYWxzbyBhbnkgbmVzdGVkIG9jY3VycmVuY2VzLiBEZWZhdWx0cyBhcmUgcGF0dGVybnMgdGhhdCBhcmUgbGlrZWx5IHRvIGJlIHVzZWQgaW4gbWFsaWNpb3VzIHJlcXVlc3RzLiBTZXR0aW5nIHRoaXMgb3B0aW9uIHdpbGwgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcGF0dGVybnMuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gcmVzdEFQSUtleSBLZXkgZm9yIFJFU1QgY2FsbHNcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gcmV2b2tlU2Vzc2lvbk9uUGFzc3dvcmRSZXNldCBXaGVuIGEgdXNlciBjaGFuZ2VzIHRoZWlyIHBhc3N3b3JkLCBlaXRoZXIgdGhyb3VnaCB0aGUgcmVzZXQgcGFzc3dvcmQgZW1haWwgb3Igd2hpbGUgbG9nZ2VkIGluLCBhbGwgc2Vzc2lvbnMgYXJlIHJldm9rZWQgaWYgdGhpcyBpcyB0cnVlLiBTZXQgdG8gZmFsc2UgaWYgeW91IGRvbid0IHdhbnQgdG8gcmV2b2tlIHNlc3Npb25zLlxuICogQHByb3BlcnR5IHtCb29sZWFufSBzY2hlZHVsZWRQdXNoIENvbmZpZ3VyYXRpb24gZm9yIHB1c2ggc2NoZWR1bGluZywgZGVmYXVsdHMgdG8gZmFsc2UuXG4gKiBAcHJvcGVydHkge1NjaGVtYU9wdGlvbnN9IHNjaGVtYSBEZWZpbmVkIHNjaGVtYVxuICogQHByb3BlcnR5IHtTZWN1cml0eU9wdGlvbnN9IHNlY3VyaXR5IFRoZSBzZWN1cml0eSBvcHRpb25zIHRvIGlkZW50aWZ5IGFuZCByZXBvcnQgd2VhayBzZWN1cml0eSBzZXR0aW5ncy5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gc2VuZFVzZXJFbWFpbFZlcmlmaWNhdGlvbiBTZXQgdG8gYGZhbHNlYCB0byBwcmV2ZW50IHNlbmRpbmcgb2YgdmVyaWZpY2F0aW9uIGVtYWlsLiBTdXBwb3J0cyBhIGZ1bmN0aW9uIHdpdGggYSByZXR1cm4gdmFsdWUgb2YgYHRydWVgIG9yIGBmYWxzZWAgZm9yIGNvbmRpdGlvbmFsIGVtYWlsIHNlbmRpbmcuPGJyPjxicj5EZWZhdWx0IGlzIGB0cnVlYC48YnI+XG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBzZXJ2ZXJDbG9zZUNvbXBsZXRlIENhbGxiYWNrIHdoZW4gc2VydmVyIGhhcyBjbG9zZWRcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBzZXJ2ZXJVUkwgVVJMIHRvIHlvdXIgcGFyc2Ugc2VydmVyIHdpdGggaHR0cDovLyBvciBodHRwczovLy5cbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBzZXNzaW9uTGVuZ3RoIFNlc3Npb24gZHVyYXRpb24sIGluIHNlY29uZHMsIGRlZmF1bHRzIHRvIDEgeWVhclxuICogQHByb3BlcnR5IHtCb29sZWFufSBzaWxlbnQgRGlzYWJsZXMgY29uc29sZSBvdXRwdXRcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gc3RhcnRMaXZlUXVlcnlTZXJ2ZXIgU3RhcnRzIHRoZSBsaXZlUXVlcnkgc2VydmVyXG4gKiBAcHJvcGVydHkge0FueX0gdHJ1c3RQcm94eSBUaGUgdHJ1c3QgcHJveHkgc2V0dGluZ3MuIEl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBzZXR1cCBvZiB0aGUgcmV2ZXJzZSBwcm94eSwgc2luY2UgdGhpcyBzZXR0aW5nIHdpbGwgdHJ1c3QgdmFsdWVzIHByb3ZpZGVkIGluIHRoZSBQYXJzZSBTZXJ2ZXIgQVBJIHJlcXVlc3QuIFNlZSB0aGUgPGEgaHJlZj1cImh0dHBzOi8vZXhwcmVzc2pzLmNvbS9lbi9ndWlkZS9iZWhpbmQtcHJveGllcy5odG1sXCI+ZXhwcmVzcyB0cnVzdCBwcm94eSBzZXR0aW5nczwvYT4gZG9jdW1lbnRhdGlvbi4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nW119IHVzZXJTZW5zaXRpdmVGaWVsZHMgUGVyc29uYWxseSBpZGVudGlmaWFibGUgaW5mb3JtYXRpb24gZmllbGRzIGluIHRoZSB1c2VyIHRhYmxlIHRoZSBzaG91bGQgYmUgcmVtb3ZlZCBmb3Igbm9uLWF1dGhvcml6ZWQgdXNlcnMuIERlcHJlY2F0ZWQgQHNlZSBwcm90ZWN0ZWRGaWVsZHNcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gdmVyYm9zZSBTZXQgdGhlIGxvZ2dpbmcgdG8gdmVyYm9zZVxuICogQHByb3BlcnR5IHtCb29sZWFufSB2ZXJpZnlVc2VyRW1haWxzIFNldCB0byBgdHJ1ZWAgdG8gcmVxdWlyZSB1c2VycyB0byB2ZXJpZnkgdGhlaXIgZW1haWwgYWRkcmVzcyB0byBjb21wbGV0ZSB0aGUgc2lnbi11cCBwcm9jZXNzLiBTdXBwb3J0cyBhIGZ1bmN0aW9uIHdpdGggYSByZXR1cm4gdmFsdWUgb2YgYHRydWVgIG9yIGBmYWxzZWAgZm9yIGNvbmRpdGlvbmFsIHZlcmlmaWNhdGlvbi48YnI+PGJyPkRlZmF1bHQgaXMgYGZhbHNlYC5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB3ZWJob29rS2V5IEtleSBzZW50IHdpdGggb3V0Z29pbmcgd2ViaG9vayBjYWxsc1xuICovXG5cbi8qKlxuICogQGludGVyZmFjZSBSYXRlTGltaXRPcHRpb25zXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZXJyb3JSZXNwb25zZU1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UgdGhhdCBzaG91bGQgYmUgcmV0dXJuZWQgaW4gdGhlIGJvZHkgb2YgdGhlIEhUVFAgNDI5IHJlc3BvbnNlIHdoZW4gdGhlIHJhdGUgbGltaXQgaXMgaGl0LiBEZWZhdWx0IGlzIGBUb28gbWFueSByZXF1ZXN0cy5gLlxuICogQHByb3BlcnR5IHtCb29sZWFufSBpbmNsdWRlSW50ZXJuYWxSZXF1ZXN0cyBPcHRpb25hbCwgaWYgYHRydWVgIHRoZSByYXRlIGxpbWl0IHdpbGwgYWxzbyBhcHBseSB0byByZXF1ZXN0cyB0aGF0IGFyZSBtYWRlIGluIGJ5IENsb3VkIENvZGUsIGRlZmF1bHQgaXMgYGZhbHNlYC4gTm90ZSB0aGF0IGEgcHVibGljIENsb3VkIENvZGUgZnVuY3Rpb24gdGhhdCB0cmlnZ2VycyBpbnRlcm5hbCByZXF1ZXN0cyBtYXkgY2lyY3VtdmVudCByYXRlIGxpbWl0aW5nIGFuZCBiZSB2dWxuZXJhYmxlIHRvIGF0dGFja3MuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGluY2x1ZGVNYXN0ZXJLZXkgT3B0aW9uYWwsIGlmIGB0cnVlYCB0aGUgcmF0ZSBsaW1pdCB3aWxsIGFsc28gYXBwbHkgdG8gcmVxdWVzdHMgdXNpbmcgdGhlIGBtYXN0ZXJLZXlgLCBkZWZhdWx0IGlzIGBmYWxzZWAuIE5vdGUgdGhhdCBhIHB1YmxpYyBDbG91ZCBDb2RlIGZ1bmN0aW9uIHRoYXQgdHJpZ2dlcnMgaW50ZXJuYWwgcmVxdWVzdHMgdXNpbmcgdGhlIGBtYXN0ZXJLZXlgIG1heSBjaXJjdW12ZW50IHJhdGUgbGltaXRpbmcgYW5kIGJlIHZ1bG5lcmFibGUgdG8gYXR0YWNrcy5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSByZWRpc1VybCBPcHRpb25hbCwgdGhlIFVSTCBvZiB0aGUgUmVkaXMgc2VydmVyIHRvIHN0b3JlIHJhdGUgbGltaXQgZGF0YS4gVGhpcyBhbGxvd3MgdG8gcmF0ZSBsaW1pdCByZXF1ZXN0cyBmb3IgbXVsdGlwbGUgc2VydmVycyBieSBjYWxjdWxhdGluZyB0aGUgc3VtIG9mIGFsbCByZXF1ZXN0cyBhY3Jvc3MgYWxsIHNlcnZlcnMuIFRoaXMgaXMgdXNlZnVsIGlmIG11bHRpcGxlIHNlcnZlcnMgYXJlIHByb2Nlc3NpbmcgcmVxdWVzdHMgYmVoaW5kIGEgbG9hZCBiYWxhbmNlci4gRm9yIGV4YW1wbGUsIHRoZSBsaW1pdCBvZiAxMCByZXF1ZXN0cyBpcyByZWFjaGVkIGlmIGVhY2ggb2YgMiBzZXJ2ZXJzIHByb2Nlc3NlZCA1IHJlcXVlc3RzLlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IHJlcXVlc3RDb3VudCBUaGUgbnVtYmVyIG9mIHJlcXVlc3RzIHRoYXQgY2FuIGJlIG1hZGUgcGVyIElQIGFkZHJlc3Mgd2l0aGluIHRoZSB0aW1lIHdpbmRvdyBzZXQgaW4gYHJlcXVlc3RUaW1lV2luZG93YCBiZWZvcmUgdGhlIHJhdGUgbGltaXQgaXMgYXBwbGllZC5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nW119IHJlcXVlc3RNZXRob2RzIE9wdGlvbmFsLCB0aGUgSFRUUCByZXF1ZXN0IG1ldGhvZHMgdG8gd2hpY2ggdGhlIHJhdGUgbGltaXQgc2hvdWxkIGJlIGFwcGxpZWQsIGRlZmF1bHQgaXMgYWxsIG1ldGhvZHMuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gcmVxdWVzdFBhdGggVGhlIHBhdGggb2YgdGhlIEFQSSByb3V0ZSB0byBiZSByYXRlIGxpbWl0ZWQuIFJvdXRlIHBhdGhzLCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgcmVxdWVzdCBtZXRob2QsIGRlZmluZSB0aGUgZW5kcG9pbnRzIGF0IHdoaWNoIHJlcXVlc3RzIGNhbiBiZSBtYWRlLiBSb3V0ZSBwYXRocyBjYW4gYmUgc3RyaW5ncywgc3RyaW5nIHBhdHRlcm5zLCBvciByZWd1bGFyIGV4cHJlc3Npb24uIFNlZTogaHR0cHM6Ly9leHByZXNzanMuY29tL2VuL2d1aWRlL3JvdXRpbmcuaHRtbFxuICogQHByb3BlcnR5IHtOdW1iZXJ9IHJlcXVlc3RUaW1lV2luZG93IFRoZSB3aW5kb3cgb2YgdGltZSBpbiBtaWxsaXNlY29uZHMgd2l0aGluIHdoaWNoIHRoZSBudW1iZXIgb2YgcmVxdWVzdHMgc2V0IGluIGByZXF1ZXN0Q291bnRgIGNhbiBiZSBtYWRlIGJlZm9yZSB0aGUgcmF0ZSBsaW1pdCBpcyBhcHBsaWVkLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IHpvbmUgVGhlIHR5cGUgb2YgcmF0ZSBsaW1pdCB0byBhcHBseS4gVGhlIGZvbGxvd2luZyB0eXBlcyBhcmUgc3VwcG9ydGVkOjxicj48YnI+LSBgZ2xvYmFsYDogcmF0ZSBsaW1pdCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIHJlcXVlc3RzIG1hZGUgYnkgYWxsIHVzZXJzIDxicj4tIGBpcGA6IHJhdGUgbGltaXQgYmFzZWQgb24gdGhlIElQIGFkZHJlc3Mgb2YgdGhlIHJlcXVlc3QgPGJyPi0gYHVzZXJgOiByYXRlIGxpbWl0IGJhc2VkIG9uIHRoZSB1c2VyIElEIG9mIHRoZSByZXF1ZXN0IDxicj4tIGBzZXNzaW9uYDogcmF0ZSBsaW1pdCBiYXNlZCBvbiB0aGUgc2Vzc2lvbiB0b2tlbiBvZiB0aGUgcmVxdWVzdCA8YnI+PGJyPjxicj46ZGVmYXVsdDogJ2lwJ1xuICovXG5cbi8qKlxuICogQGludGVyZmFjZSBTZWN1cml0eU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Q2hlY2tHcm91cFtdfSBjaGVja0dyb3VwcyBUaGUgc2VjdXJpdHkgY2hlY2sgZ3JvdXBzIHRvIHJ1bi4gVGhpcyBhbGxvd3MgdG8gYWRkIGN1c3RvbSBzZWN1cml0eSBjaGVja3Mgb3Igb3ZlcnJpZGUgZXhpc3Rpbmcgb25lcy4gRGVmYXVsdCBhcmUgdGhlIGdyb3VwcyBkZWZpbmVkIGluIGBDaGVja0dyb3Vwcy5qc2AuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGVuYWJsZUNoZWNrIElzIHRydWUgaWYgUGFyc2UgU2VydmVyIHNob3VsZCBjaGVjayBmb3Igd2VhayBzZWN1cml0eSBzZXR0aW5ncy5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZW5hYmxlQ2hlY2tMb2cgSXMgdHJ1ZSBpZiB0aGUgc2VjdXJpdHkgY2hlY2sgcmVwb3J0IHNob3VsZCBiZSB3cml0dGVuIHRvIGxvZ3MuIFRoaXMgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCB0ZW1wb3JhcmlseSB0byBub3QgZXhwb3NlIHdlYWsgc2VjdXJpdHkgc2V0dGluZ3MgaW4gbG9ncy5cbiAqL1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgUGFnZXNPcHRpb25zXG4gKiBAcHJvcGVydHkge1BhZ2VzUm91dGVbXX0gY3VzdG9tUm91dGVzIFRoZSBjdXN0b20gcm91dGVzLlxuICogQHByb3BlcnR5IHtQYWdlc0N1c3RvbVVybHNPcHRpb25zfSBjdXN0b21VcmxzIFRoZSBVUkxzIHRvIHRoZSBjdXN0b20gcGFnZXMuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGVuYWJsZUxvY2FsaXphdGlvbiBJcyB0cnVlIGlmIHBhZ2VzIHNob3VsZCBiZSBsb2NhbGl6ZWQ7IHRoaXMgaGFzIG5vIGVmZmVjdCBvbiBjdXN0b20gcGFnZSByZWRpcmVjdHMuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGVuYWJsZVJvdXRlciBJcyB0cnVlIGlmIHRoZSBwYWdlcyByb3V0ZXIgc2hvdWxkIGJlIGVuYWJsZWQ7IHRoaXMgaXMgcmVxdWlyZWQgZm9yIGFueSBvZiB0aGUgcGFnZXMgb3B0aW9ucyB0byB0YWtlIGVmZmVjdC5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZm9yY2VSZWRpcmVjdCBJcyB0cnVlIGlmIHJlc3BvbnNlcyBzaG91bGQgYWx3YXlzIGJlIHJlZGlyZWN0cyBhbmQgbmV2ZXIgY29udGVudCwgZmFsc2UgaWYgdGhlIHJlc3BvbnNlIHR5cGUgc2hvdWxkIGRlcGVuZCBvbiB0aGUgcmVxdWVzdCB0eXBlIChHRVQgcmVxdWVzdCAtPiBjb250ZW50IHJlc3BvbnNlOyBQT1NUIHJlcXVlc3QgLT4gcmVkaXJlY3QgcmVzcG9uc2UpLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IGxvY2FsaXphdGlvbkZhbGxiYWNrTG9jYWxlIFRoZSBmYWxsYmFjayBsb2NhbGUgZm9yIGxvY2FsaXphdGlvbiBpZiBubyBtYXRjaGluZyB0cmFuc2xhdGlvbiBpcyBwcm92aWRlZCBmb3IgdGhlIGdpdmVuIGxvY2FsZS4gVGhpcyBpcyBvbmx5IHJlbGV2YW50IHdoZW4gcHJvdmlkaW5nIHRyYW5zbGF0aW9uIHJlc291cmNlcyB2aWEgSlNPTiBmaWxlLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IGxvY2FsaXphdGlvbkpzb25QYXRoIFRoZSBwYXRoIHRvIHRoZSBKU09OIGZpbGUgZm9yIGxvY2FsaXphdGlvbjsgdGhlIHRyYW5zbGF0aW9ucyB3aWxsIGJlIHVzZWQgdG8gZmlsbCB0ZW1wbGF0ZSBwbGFjZWhvbGRlcnMgYWNjb3JkaW5nIHRvIHRoZSBsb2NhbGUuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gcGFnZXNFbmRwb2ludCBUaGUgQVBJIGVuZHBvaW50IGZvciB0aGUgcGFnZXMuIERlZmF1bHQgaXMgJ2FwcHMnLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IHBhZ2VzUGF0aCBUaGUgcGF0aCB0byB0aGUgcGFnZXMgZGlyZWN0b3J5OyB0aGlzIGFsc28gZGVmaW5lcyB3aGVyZSB0aGUgc3RhdGljIGVuZHBvaW50ICcvYXBwcycgcG9pbnRzIHRvLiBEZWZhdWx0IGlzIHRoZSAnLi9wdWJsaWMvJyBkaXJlY3RvcnkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gcGxhY2Vob2xkZXJzIFRoZSBwbGFjZWhvbGRlciBrZXlzIGFuZCB2YWx1ZXMgd2hpY2ggd2lsbCBiZSBmaWxsZWQgaW4gcGFnZXM7IHRoaXMgY2FuIGJlIGEgc2ltcGxlIG9iamVjdCBvciBhIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICovXG5cbi8qKlxuICogQGludGVyZmFjZSBQYWdlc1JvdXRlXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBoYW5kbGVyIFRoZSByb3V0ZSBoYW5kbGVyIHRoYXQgaXMgYW4gYXN5bmMgZnVuY3Rpb24uXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbWV0aG9kIFRoZSByb3V0ZSBtZXRob2QsIGUuZy4gJ0dFVCcgb3IgJ1BPU1QnLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IHBhdGggVGhlIHJvdXRlIHBhdGguXG4gKi9cblxuLyoqXG4gKiBAaW50ZXJmYWNlIFBhZ2VzQ3VzdG9tVXJsc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBlbWFpbFZlcmlmaWNhdGlvbkxpbmtFeHBpcmVkIFRoZSBVUkwgdG8gdGhlIGN1c3RvbSBwYWdlIGZvciBlbWFpbCB2ZXJpZmljYXRpb24gLT4gbGluayBleHBpcmVkLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IGVtYWlsVmVyaWZpY2F0aW9uTGlua0ludmFsaWQgVGhlIFVSTCB0byB0aGUgY3VzdG9tIHBhZ2UgZm9yIGVtYWlsIHZlcmlmaWNhdGlvbiAtPiBsaW5rIGludmFsaWQuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZW1haWxWZXJpZmljYXRpb25TZW5kRmFpbCBUaGUgVVJMIHRvIHRoZSBjdXN0b20gcGFnZSBmb3IgZW1haWwgdmVyaWZpY2F0aW9uIC0+IGxpbmsgc2VuZCBmYWlsLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IGVtYWlsVmVyaWZpY2F0aW9uU2VuZFN1Y2Nlc3MgVGhlIFVSTCB0byB0aGUgY3VzdG9tIHBhZ2UgZm9yIGVtYWlsIHZlcmlmaWNhdGlvbiAtPiByZXNlbmQgbGluayAtPiBzdWNjZXNzLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IGVtYWlsVmVyaWZpY2F0aW9uU3VjY2VzcyBUaGUgVVJMIHRvIHRoZSBjdXN0b20gcGFnZSBmb3IgZW1haWwgdmVyaWZpY2F0aW9uIC0+IHN1Y2Nlc3MuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gcGFzc3dvcmRSZXNldCBUaGUgVVJMIHRvIHRoZSBjdXN0b20gcGFnZSBmb3IgcGFzc3dvcmQgcmVzZXQuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gcGFzc3dvcmRSZXNldExpbmtJbnZhbGlkIFRoZSBVUkwgdG8gdGhlIGN1c3RvbSBwYWdlIGZvciBwYXNzd29yZCByZXNldCAtPiBsaW5rIGludmFsaWQuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gcGFzc3dvcmRSZXNldFN1Y2Nlc3MgVGhlIFVSTCB0byB0aGUgY3VzdG9tIHBhZ2UgZm9yIHBhc3N3b3JkIHJlc2V0IC0+IHN1Y2Nlc3MuXG4gKi9cblxuLyoqXG4gKiBAaW50ZXJmYWNlIEN1c3RvbVBhZ2VzT3B0aW9uc1xuICogQHByb3BlcnR5IHtTdHJpbmd9IGNob29zZVBhc3N3b3JkIGNob29zZSBwYXNzd29yZCBwYWdlIHBhdGhcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBleHBpcmVkVmVyaWZpY2F0aW9uTGluayBleHBpcmVkIHZlcmlmaWNhdGlvbiBsaW5rIHBhZ2UgcGF0aFxuICogQHByb3BlcnR5IHtTdHJpbmd9IGludmFsaWRMaW5rIGludmFsaWQgbGluayBwYWdlIHBhdGhcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBpbnZhbGlkUGFzc3dvcmRSZXNldExpbmsgaW52YWxpZCBwYXNzd29yZCByZXNldCBsaW5rIHBhZ2UgcGF0aFxuICogQHByb3BlcnR5IHtTdHJpbmd9IGludmFsaWRWZXJpZmljYXRpb25MaW5rIGludmFsaWQgdmVyaWZpY2F0aW9uIGxpbmsgcGFnZSBwYXRoXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbGlua1NlbmRGYWlsIHZlcmlmaWNhdGlvbiBsaW5rIHNlbmQgZmFpbCBwYWdlIHBhdGhcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBsaW5rU2VuZFN1Y2Nlc3MgdmVyaWZpY2F0aW9uIGxpbmsgc2VuZCBzdWNjZXNzIHBhZ2UgcGF0aFxuICogQHByb3BlcnR5IHtTdHJpbmd9IHBhcnNlRnJhbWVVUkwgZm9yIG1hc2tpbmcgdXNlci1mYWNpbmcgcGFnZXNcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBwYXNzd29yZFJlc2V0U3VjY2VzcyBwYXNzd29yZCByZXNldCBzdWNjZXNzIHBhZ2UgcGF0aFxuICogQHByb3BlcnR5IHtTdHJpbmd9IHZlcmlmeUVtYWlsU3VjY2VzcyB2ZXJpZnkgZW1haWwgc3VjY2VzcyBwYWdlIHBhdGhcbiAqL1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgTGl2ZVF1ZXJ5T3B0aW9uc1xuICogQHByb3BlcnR5IHtTdHJpbmdbXX0gY2xhc3NOYW1lcyBwYXJzZS1zZXJ2ZXIncyBMaXZlUXVlcnkgY2xhc3NOYW1lc1xuICogQHByb3BlcnR5IHtBZGFwdGVyPFB1YlN1YkFkYXB0ZXI+fSBwdWJTdWJBZGFwdGVyIExpdmVRdWVyeSBwdWJzdWIgYWRhcHRlclxuICogQHByb3BlcnR5IHtBbnl9IHJlZGlzT3B0aW9ucyBwYXJzZS1zZXJ2ZXIncyBMaXZlUXVlcnkgcmVkaXNPcHRpb25zXG4gKiBAcHJvcGVydHkge1N0cmluZ30gcmVkaXNVUkwgcGFyc2Utc2VydmVyJ3MgTGl2ZVF1ZXJ5IHJlZGlzVVJMXG4gKiBAcHJvcGVydHkge0FkYXB0ZXI8V1NTQWRhcHRlcj59IHdzc0FkYXB0ZXIgQWRhcHRlciBtb2R1bGUgZm9yIHRoZSBXZWJTb2NrZXRTZXJ2ZXJcbiAqL1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgTGl2ZVF1ZXJ5U2VydmVyT3B0aW9uc1xuICogQHByb3BlcnR5IHtTdHJpbmd9IGFwcElkIFRoaXMgc3RyaW5nIHNob3VsZCBtYXRjaCB0aGUgYXBwSWQgaW4gdXNlIGJ5IHlvdXIgUGFyc2UgU2VydmVyLiBJZiB5b3UgZGVwbG95IHRoZSBMaXZlUXVlcnkgc2VydmVyIGFsb25nc2lkZSBQYXJzZSBTZXJ2ZXIsIHRoZSBMaXZlUXVlcnkgc2VydmVyIHdpbGwgdHJ5IHRvIHVzZSB0aGUgc2FtZSBhcHBJZC5cbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBjYWNoZVRpbWVvdXQgTnVtYmVyIGluIG1pbGxpc2Vjb25kcy4gV2hlbiBjbGllbnRzIHByb3ZpZGUgdGhlIHNlc3Npb25Ub2tlbiB0byB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciwgdGhlIExpdmVRdWVyeSBzZXJ2ZXIgd2lsbCB0cnkgdG8gZmV0Y2ggaXRzIFBhcnNlVXNlcidzIG9iamVjdElkIGZyb20gcGFyc2Ugc2VydmVyIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuIFRoZSB2YWx1ZSBkZWZpbmVzIHRoZSBkdXJhdGlvbiBvZiB0aGUgY2FjaGUuIENoZWNrIHRoZSBmb2xsb3dpbmcgU2VjdXJpdHkgc2VjdGlvbiBhbmQgb3VyIHByb3RvY29sIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMsIGRlZmF1bHRzIHRvIDUgKiAxMDAwIG1zICg1IHNlY29uZHMpLlxuICogQHByb3BlcnR5IHtBbnl9IGtleVBhaXJzIEEgSlNPTiBvYmplY3QgdGhhdCBzZXJ2ZXMgYXMgYSB3aGl0ZWxpc3Qgb2Yga2V5cy4gSXQgaXMgdXNlZCBmb3IgdmFsaWRhdGluZyBjbGllbnRzIHdoZW4gdGhleSB0cnkgdG8gY29ubmVjdCB0byB0aGUgTGl2ZVF1ZXJ5IHNlcnZlci4gQ2hlY2sgdGhlIGZvbGxvd2luZyBTZWN1cml0eSBzZWN0aW9uIGFuZCBvdXIgcHJvdG9jb2wgc3BlY2lmaWNhdGlvbiBmb3IgZGV0YWlscy5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBsb2dMZXZlbCBUaGlzIHN0cmluZyBkZWZpbmVzIHRoZSBsb2cgbGV2ZWwgb2YgdGhlIExpdmVRdWVyeSBzZXJ2ZXIuIFdlIHN1cHBvcnQgVkVSQk9TRSwgSU5GTywgRVJST1IsIE5PTkUsIGRlZmF1bHRzIHRvIElORk8uXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbWFzdGVyS2V5IFRoaXMgc3RyaW5nIHNob3VsZCBtYXRjaCB0aGUgbWFzdGVyS2V5IGluIHVzZSBieSB5b3VyIFBhcnNlIFNlcnZlci4gSWYgeW91IGRlcGxveSB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciBhbG9uZ3NpZGUgUGFyc2UgU2VydmVyLCB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciB3aWxsIHRyeSB0byB1c2UgdGhlIHNhbWUgbWFzdGVyS2V5LlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IHBvcnQgVGhlIHBvcnQgdG8gcnVuIHRoZSBMaXZlUXVlcnkgc2VydmVyLCBkZWZhdWx0cyB0byAxMzM3LlxuICogQHByb3BlcnR5IHtBZGFwdGVyPFB1YlN1YkFkYXB0ZXI+fSBwdWJTdWJBZGFwdGVyIExpdmVRdWVyeSBwdWJzdWIgYWRhcHRlclxuICogQHByb3BlcnR5IHtBbnl9IHJlZGlzT3B0aW9ucyBwYXJzZS1zZXJ2ZXIncyBMaXZlUXVlcnkgcmVkaXNPcHRpb25zXG4gKiBAcHJvcGVydHkge1N0cmluZ30gcmVkaXNVUkwgcGFyc2Utc2VydmVyJ3MgTGl2ZVF1ZXJ5IHJlZGlzVVJMXG4gKiBAcHJvcGVydHkge1N0cmluZ30gc2VydmVyVVJMIFRoaXMgc3RyaW5nIHNob3VsZCBtYXRjaCB0aGUgc2VydmVyVVJMIGluIHVzZSBieSB5b3VyIFBhcnNlIFNlcnZlci4gSWYgeW91IGRlcGxveSB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciBhbG9uZ3NpZGUgUGFyc2UgU2VydmVyLCB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciB3aWxsIHRyeSB0byB1c2UgdGhlIHNhbWUgc2VydmVyVVJMLlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IHdlYnNvY2tldFRpbWVvdXQgTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHBpbmcvcG9uZyBmcmFtZXMuIFRoZSBXZWJTb2NrZXQgc2VydmVyIHNlbmRzIHBpbmcvcG9uZyBmcmFtZXMgdG8gdGhlIGNsaWVudHMgdG8ga2VlcCB0aGUgV2ViU29ja2V0IGFsaXZlLiBUaGlzIHZhbHVlIGRlZmluZXMgdGhlIGludGVydmFsIG9mIHRoZSBwaW5nL3BvbmcgZnJhbWUgZnJvbSB0aGUgc2VydmVyIHRvIGNsaWVudHMsIGRlZmF1bHRzIHRvIDEwICogMTAwMCBtcyAoMTAgcykuXG4gKiBAcHJvcGVydHkge0FkYXB0ZXI8V1NTQWRhcHRlcj59IHdzc0FkYXB0ZXIgQWRhcHRlciBtb2R1bGUgZm9yIHRoZSBXZWJTb2NrZXRTZXJ2ZXJcbiAqL1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgSWRlbXBvdGVuY3lPcHRpb25zXG4gKiBAcHJvcGVydHkge1N0cmluZ1tdfSBwYXRocyBBbiBhcnJheSBvZiBwYXRocyBmb3Igd2hpY2ggdGhlIGZlYXR1cmUgc2hvdWxkIGJlIGVuYWJsZWQuIFRoZSBtb3VudCBwYXRoIG11c3Qgbm90IGJlIGluY2x1ZGVkLCBmb3IgZXhhbXBsZSBpbnN0ZWFkIG9mIGAvcGFyc2UvZnVuY3Rpb25zL215RnVuY3Rpb25gIHNwZWNpZml5IGBmdW5jdGlvbnMvbXlGdW5jdGlvbmAuIFRoZSBlbnRyaWVzIGFyZSBpbnRlcnByZXRlZCBhcyByZWd1bGFyIGV4cHJlc3Npb24sIGZvciBleGFtcGxlIGBmdW5jdGlvbnMvLipgIG1hdGNoZXMgYWxsIGZ1bmN0aW9ucywgYGpvYnMvLipgIG1hdGNoZXMgYWxsIGpvYnMsIGBjbGFzc2VzLy4qYCBtYXRjaGVzIGFsbCBjbGFzc2VzLCBgLipgIG1hdGNoZXMgYWxsIHBhdGhzLlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IHR0bCBUaGUgZHVyYXRpb24gaW4gc2Vjb25kcyBhZnRlciB3aGljaCBhIHJlcXVlc3QgcmVjb3JkIGlzIGRpc2NhcmRlZCBmcm9tIHRoZSBkYXRhYmFzZSwgZGVmYXVsdHMgdG8gMzAwcy5cbiAqL1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgQWNjb3VudExvY2tvdXRPcHRpb25zXG4gKiBAcHJvcGVydHkge051bWJlcn0gZHVyYXRpb24gU2V0IHRoZSBkdXJhdGlvbiBpbiBtaW51dGVzIHRoYXQgYSBsb2NrZWQtb3V0IGFjY291bnQgcmVtYWlucyBsb2NrZWQgb3V0IGJlZm9yZSBhdXRvbWF0aWNhbGx5IGJlY29taW5nIHVubG9ja2VkLjxicj48YnI+VmFsaWQgdmFsdWVzIGFyZSBncmVhdGVyIHRoYW4gYDBgIGFuZCBsZXNzIHRoYW4gYDEwMDAwMGAuXG4gKiBAcHJvcGVydHkge051bWJlcn0gdGhyZXNob2xkIFNldCB0aGUgbnVtYmVyIG9mIGZhaWxlZCBzaWduLWluIGF0dGVtcHRzIHRoYXQgd2lsbCBjYXVzZSBhIHVzZXIgYWNjb3VudCB0byBiZSBsb2NrZWQuIElmIHRoZSBhY2NvdW50IGlzIGxvY2tlZC4gVGhlIGFjY291bnQgd2lsbCB1bmxvY2sgYWZ0ZXIgdGhlIGR1cmF0aW9uIHNldCBpbiB0aGUgYGR1cmF0aW9uYCBvcHRpb24gaGFzIHBhc3NlZCBhbmQgbm8gZnVydGhlciBsb2dpbiBhdHRlbXB0cyBoYXZlIGJlZW4gbWFkZS48YnI+PGJyPlZhbGlkIHZhbHVlcyBhcmUgZ3JlYXRlciB0aGFuIGAwYCBhbmQgbGVzcyB0aGFuIGAxMDAwYC5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gdW5sb2NrT25QYXNzd29yZFJlc2V0IFNldCB0byBgdHJ1ZWAgIGlmIHRoZSBhY2NvdW50IHNob3VsZCBiZSB1bmxvY2tlZCBhZnRlciBhIHN1Y2Nlc3NmdWwgcGFzc3dvcmQgcmVzZXQuPGJyPjxicj5EZWZhdWx0IGlzIGBmYWxzZWAuPGJyPlJlcXVpcmVzIG9wdGlvbnMgYGR1cmF0aW9uYCBhbmQgYHRocmVzaG9sZGAgdG8gYmUgc2V0LlxuICovXG5cbi8qKlxuICogQGludGVyZmFjZSBQYXNzd29yZFBvbGljeU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZG9Ob3RBbGxvd1VzZXJuYW1lIFNldCB0byBgdHJ1ZWAgdG8gZGlzYWxsb3cgdGhlIHVzZXJuYW1lIGFzIHBhcnQgb2YgdGhlIHBhc3N3b3JkLjxicj48YnI+RGVmYXVsdCBpcyBgZmFsc2VgLlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IG1heFBhc3N3b3JkQWdlIFNldCB0aGUgbnVtYmVyIG9mIGRheXMgYWZ0ZXIgd2hpY2ggYSBwYXNzd29yZCBleHBpcmVzLiBMb2dpbiBhdHRlbXB0cyBmYWlsIGlmIHRoZSB1c2VyIGRvZXMgbm90IHJlc2V0IHRoZSBwYXNzd29yZCBiZWZvcmUgZXhwaXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBtYXhQYXNzd29yZEhpc3RvcnkgU2V0IHRoZSBudW1iZXIgb2YgcHJldmlvdXMgcGFzc3dvcmQgdGhhdCB3aWxsIG5vdCBiZSBhbGxvd2VkIHRvIGJlIHNldCBhcyBuZXcgcGFzc3dvcmQuIElmIHRoZSBvcHRpb24gaXMgbm90IHNldCBvciBzZXQgdG8gYDBgLCBubyBwcmV2aW91cyBwYXNzd29yZHMgd2lsbCBiZSBjb25zaWRlcmVkLjxicj48YnI+VmFsaWQgdmFsdWVzIGFyZSA+PSBgMGAgYW5kIDw9IGAyMGAuPGJyPkRlZmF1bHQgaXMgYDBgLlxuICogQHByb3BlcnR5IHtCb29sZWFufSByZXNldFBhc3N3b3JkU3VjY2Vzc09uSW52YWxpZEVtYWlsIFNldCB0byBgdHJ1ZWAgaWYgYSByZXF1ZXN0IHRvIHJlc2V0IHRoZSBwYXNzd29yZCBzaG91bGQgcmV0dXJuIGEgc3VjY2VzcyByZXNwb25zZSBldmVuIGlmIHRoZSBwcm92aWRlZCBlbWFpbCBhZGRyZXNzIGlzIGludmFsaWQsIG9yIGBmYWxzZWAgaWYgdGhlIHJlcXVlc3Qgc2hvdWxkIHJldHVybiBhbiBlcnJvciByZXNwb25zZSBpZiB0aGUgZW1haWwgYWRkcmVzcyBpcyBpbnZhbGlkLjxicj48YnI+RGVmYXVsdCBpcyBgdHJ1ZWAuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IHJlc2V0VG9rZW5SZXVzZUlmVmFsaWQgU2V0IHRvIGB0cnVlYCBpZiBhIHBhc3N3b3JkIHJlc2V0IHRva2VuIHNob3VsZCBiZSByZXVzZWQgaW4gY2FzZSBhbm90aGVyIHRva2VuIGlzIHJlcXVlc3RlZCBidXQgdGhlcmUgaXMgYSB0b2tlbiB0aGF0IGlzIHN0aWxsIHZhbGlkLCBpLmUuIGhhcyBub3QgZXhwaXJlZC4gVGhpcyBhdm9pZHMgdGhlIG9mdGVuIG9ic2VydmVkIGlzc3VlIHRoYXQgYSB1c2VyIHJlcXVlc3RzIG11bHRpcGxlIGVtYWlscyBhbmQgZG9lcyBub3Qga25vdyB3aGljaCBsaW5rIGNvbnRhaW5zIGEgdmFsaWQgdG9rZW4gYmVjYXVzZSBlYWNoIG5ld2x5IGdlbmVyYXRlZCB0b2tlbiB3b3VsZCBpbnZhbGlkYXRlIHRoZSBwcmV2aW91cyB0b2tlbi48YnI+PGJyPkRlZmF1bHQgaXMgYGZhbHNlYC5cbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSByZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbiBTZXQgdGhlIHZhbGlkaXR5IGR1cmF0aW9uIG9mIHRoZSBwYXNzd29yZCByZXNldCB0b2tlbiBpbiBzZWNvbmRzIGFmdGVyIHdoaWNoIHRoZSB0b2tlbiBleHBpcmVzLiBUaGUgdG9rZW4gaXMgdXNlZCBpbiB0aGUgbGluayB0aGF0IGlzIHNldCBpbiB0aGUgZW1haWwuIEFmdGVyIHRoZSB0b2tlbiBleHBpcmVzLCB0aGUgbGluayBiZWNvbWVzIGludmFsaWQgYW5kIGEgbmV3IGxpbmsgaGFzIHRvIGJlIHNlbnQuIElmIHRoZSBvcHRpb24gaXMgbm90IHNldCBvciBzZXQgdG8gYHVuZGVmaW5lZGAsIHRoZW4gdGhlIHRva2VuIG5ldmVyIGV4cGlyZXMuPGJyPjxicj5Gb3IgZXhhbXBsZSwgdG8gZXhwaXJlIHRoZSB0b2tlbiBhZnRlciAyIGhvdXJzLCBzZXQgYSB2YWx1ZSBvZiA3MjAwIHNlY29uZHMgKD0gNjAgc2Vjb25kcyAqIDYwIG1pbnV0ZXMgKiAyIGhvdXJzKS48YnI+PGJyPkRlZmF1bHQgaXMgYHVuZGVmaW5lZGAuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gdmFsaWRhdGlvbkVycm9yIFNldCB0aGUgZXJyb3IgbWVzc2FnZSB0byBiZSBzZW50Ljxicj48YnI+RGVmYXVsdCBpcyBgUGFzc3dvcmQgZG9lcyBub3QgbWVldCB0aGUgUGFzc3dvcmQgUG9saWN5IHJlcXVpcmVtZW50cy5gXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSB2YWxpZGF0b3JDYWxsYmFjayBTZXQgYSBjYWxsYmFjayBmdW5jdGlvbiB0byB2YWxpZGF0ZSBhIHBhc3N3b3JkIHRvIGJlIGFjY2VwdGVkLjxicj48YnI+SWYgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGB2YWxpZGF0b3JQYXR0ZXJuYCwgdGhlIHBhc3N3b3JkIG11c3QgcGFzcyBib3RoIHRvIGJlIGFjY2VwdGVkLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IHZhbGlkYXRvclBhdHRlcm4gU2V0IHRoZSByZWd1bGFyIGV4cHJlc3Npb24gdmFsaWRhdGlvbiBwYXR0ZXJuIGEgcGFzc3dvcmQgbXVzdCBtYXRjaCB0byBiZSBhY2NlcHRlZC48YnI+PGJyPklmIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBgdmFsaWRhdG9yQ2FsbGJhY2tgLCB0aGUgcGFzc3dvcmQgbXVzdCBwYXNzIGJvdGggdG8gYmUgYWNjZXB0ZWQuXG4gKi9cblxuLyoqXG4gKiBAaW50ZXJmYWNlIEZpbGVVcGxvYWRPcHRpb25zXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGVuYWJsZUZvckFub255bW91c1VzZXIgSXMgdHJ1ZSBpZiBmaWxlIHVwbG9hZCBzaG91bGQgYmUgYWxsb3dlZCBmb3IgYW5vbnltb3VzIHVzZXJzLlxuICogQHByb3BlcnR5IHtCb29sZWFufSBlbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciBJcyB0cnVlIGlmIGZpbGUgdXBsb2FkIHNob3VsZCBiZSBhbGxvd2VkIGZvciBhdXRoZW50aWNhdGVkIHVzZXJzLlxuICogQHByb3BlcnR5IHtCb29sZWFufSBlbmFibGVGb3JQdWJsaWMgSXMgdHJ1ZSBpZiBmaWxlIHVwbG9hZCBzaG91bGQgYmUgYWxsb3dlZCBmb3IgYW55b25lLCByZWdhcmRsZXNzIG9mIHVzZXIgYXV0aGVudGljYXRpb24uXG4gKiBAcHJvcGVydHkge1N0cmluZ1tdfSBmaWxlRXh0ZW5zaW9ucyBTZXRzIHRoZSBhbGxvd2VkIGZpbGUgZXh0ZW5zaW9ucyBmb3IgdXBsb2FkaW5nIGZpbGVzLiBUaGUgZXh0ZW5zaW9uIGlzIGRlZmluZWQgYXMgYW4gYXJyYXkgb2YgZmlsZSBleHRlbnNpb25zLCBvciBhIHJlZ2V4IHBhdHRlcm4uPGJyPjxicj5JdCBpcyByZWNvbW1lbmRlZCB0byByZXN0cmljdCB0aGUgZmlsZSB1cGxvYWQgZXh0ZW5zaW9ucyBhcyBtdWNoIGFzIHBvc3NpYmxlLiBIVE1MIGZpbGVzIGFyZSBlc3BlY2lhbGx5IHByb2JsZW1hdGljIGFzIHRoZXkgbWF5IGJlIHVzZWQgYnkgYW4gYXR0YWNrZXIgd2hvIHVwbG9hZHMgYSBIVE1MIGZvcm0gdG8gbG9vayBsZWdpdGltYXRlIHVuZGVyIHlvdXIgYXBwJ3MgZG9tYWluIG5hbWUsIG9yIHRvIGNvbXByb21pc2UgdGhlIHNlc3Npb24gdG9rZW4gb2YgYW5vdGhlciB1c2VyIHZpYSBhY2Nlc3NpbmcgdGhlIGJyb3dzZXIncyBsb2NhbCBzdG9yYWdlLjxicj48YnI+RGVmYXVsdHMgdG8gYF4oPyEoaHxIKSh0fFQpKG18TSkobHxMKT8kKWAgd2hpY2ggYWxsb3dzIGFueSBmaWxlIGV4dGVuc2lvbiBleGNlcHQgSFRNTCBmaWxlcy5cbiAqL1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgRGF0YWJhc2VPcHRpb25zXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGF1dG9TZWxlY3RGYW1pbHkgVGhlIE1vbmdvREIgZHJpdmVyIG9wdGlvbiB0byBzZXQgd2hldGhlciB0aGUgc29ja2V0IGF0dGVtcHRzIHRvIGNvbm5lY3QgdG8gSVB2NiBhbmQgSVB2NCBhZGRyZXNzZXMgdW50aWwgYSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLiBJZiBhdmFpbGFibGUsIHRoZSBkcml2ZXIgd2lsbCBzZWxlY3QgdGhlIGZpcnN0IElQdjYgYWRkcmVzcy5cbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgVGhlIE1vbmdvREIgZHJpdmVyIG9wdGlvbiB0byBzcGVjaWZ5IHRoZSBhbW91bnQgb2YgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgYSBjb25uZWN0aW9uIGF0dGVtcHQgdG8gZmluaXNoIGJlZm9yZSB0cnlpbmcgdGhlIG5leHQgYWRkcmVzcyB3aGVuIHVzaW5nIHRoZSBhdXRvU2VsZWN0RmFtaWx5IG9wdGlvbi4gSWYgc2V0IHRvIGEgcG9zaXRpdmUgaW50ZWdlciBsZXNzIHRoYW4gMTAsIHRoZSB2YWx1ZSAxMCBpcyB1c2VkIGluc3RlYWQuXG4gKiBAcHJvcGVydHkge051bWJlcn0gY29ubmVjdFRpbWVvdXRNUyBUaGUgTW9uZ29EQiBkcml2ZXIgb3B0aW9uIHRvIHNwZWNpZnkgdGhlIGFtb3VudCBvZiB0aW1lLCBpbiBtaWxsaXNlY29uZHMsIHRvIHdhaXQgdG8gZXN0YWJsaXNoIGEgc2luZ2xlIFRDUCBzb2NrZXQgY29ubmVjdGlvbiB0byB0aGUgc2VydmVyIGJlZm9yZSByYWlzaW5nIGFuIGVycm9yLiBTcGVjaWZ5aW5nIDAgZGlzYWJsZXMgdGhlIGNvbm5lY3Rpb24gdGltZW91dC5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZW5hYmxlU2NoZW1hSG9va3MgRW5hYmxlcyBkYXRhYmFzZSByZWFsLXRpbWUgaG9va3MgdG8gdXBkYXRlIHNpbmdsZSBzY2hlbWEgY2FjaGUuIFNldCB0byBgdHJ1ZWAgaWYgdXNpbmcgbXVsdGlwbGUgUGFyc2UgU2VydmVycyBpbnN0YW5jZXMgY29ubmVjdGVkIHRvIHRoZSBzYW1lIGRhdGFiYXNlLiBGYWlsaW5nIHRvIGRvIHNvIHdpbGwgY2F1c2UgYSBzY2hlbWEgY2hhbmdlIHRvIG5vdCBwcm9wYWdhdGUgdG8gYWxsIGluc3RhbmNlcyBhbmQgcmUtc3luY2luZyB3aWxsIG9ubHkgaGFwcGVuIHdoZW4gdGhlIGluc3RhbmNlcyByZXN0YXJ0LiBUbyB1c2UgdGhpcyBmZWF0dXJlIHdpdGggTW9uZ29EQiwgYSByZXBsaWNhIHNldCBjbHVzdGVyIHdpdGggW2NoYW5nZSBzdHJlYW1dKGh0dHBzOi8vZG9jcy5tb25nb2RiLmNvbS9tYW51YWwvY2hhbmdlU3RyZWFtcy8jYXZhaWxhYmlsaXR5KSBzdXBwb3J0IGlzIHJlcXVpcmVkLlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IG1heFBvb2xTaXplIFRoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBvcGVuZWQsIGNhY2hlZCwgcmVhZHktdG8tdXNlIGRhdGFiYXNlIGNvbm5lY3Rpb25zIG1haW50YWluZWQgYnkgdGhlIGRyaXZlci5cbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBtYXhTdGFsZW5lc3NTZWNvbmRzIFRoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc2V0IHRoZSBtYXhpbXVtIHJlcGxpY2F0aW9uIGxhZyBmb3IgcmVhZHMgZnJvbSBzZWNvbmRhcnkgbm9kZXMuXG4gKiBAcHJvcGVydHkge051bWJlcn0gbWF4VGltZU1TIFRoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc2V0IGEgY3VtdWxhdGl2ZSB0aW1lIGxpbWl0IGluIG1pbGxpc2Vjb25kcyBmb3IgcHJvY2Vzc2luZyBvcGVyYXRpb25zIG9uIGEgY3Vyc29yLlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IG1pblBvb2xTaXplIFRoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc2V0IHRoZSBtaW5pbXVtIG51bWJlciBvZiBvcGVuZWQsIGNhY2hlZCwgcmVhZHktdG8tdXNlIGRhdGFiYXNlIGNvbm5lY3Rpb25zIG1haW50YWluZWQgYnkgdGhlIGRyaXZlci5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gcmV0cnlXcml0ZXMgVGhlIE1vbmdvREIgZHJpdmVyIG9wdGlvbiB0byBzZXQgd2hldGhlciB0byByZXRyeSBmYWlsZWQgd3JpdGVzLlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IHNjaGVtYUNhY2hlVHRsIFRoZSBkdXJhdGlvbiBpbiBzZWNvbmRzIGFmdGVyIHdoaWNoIHRoZSBzY2hlbWEgY2FjaGUgZXhwaXJlcyBhbmQgd2lsbCBiZSByZWZldGNoZWQgZnJvbSB0aGUgZGF0YWJhc2UuIFVzZSB0aGlzIG9wdGlvbiBpZiB1c2luZyBtdWx0aXBsZSBQYXJzZSBTZXJ2ZXJzIGluc3RhbmNlcyBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgZGF0YWJhc2UuIEEgbG93IGR1cmF0aW9uIHdpbGwgY2F1c2UgdGhlIHNjaGVtYSBjYWNoZSB0byBiZSB1cGRhdGVkIHRvbyBvZnRlbiwgY2F1c2luZyB1bm5lY2Vzc2FyeSBkYXRhYmFzZSByZWFkcy4gQSBoaWdoIGR1cmF0aW9uIHdpbGwgY2F1c2UgdGhlIHNjaGVtYSB0byBiZSB1cGRhdGVkIHRvbyByYXJlbHksIGluY3JlYXNpbmcgdGhlIHRpbWUgcmVxdWlyZWQgdW50aWwgc2NoZW1hIGNoYW5nZXMgcHJvcGFnYXRlIHRvIGFsbCBzZXJ2ZXIgaW5zdGFuY2VzLiBUaGlzIGZlYXR1cmUgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgb3IgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgb3B0aW9uIGBlbmFibGVTY2hlbWFIb29rc2AuIERlZmF1bHQgaXMgaW5maW5pdGUgd2hpY2ggbWVhbnMgdGhlIHNjaGVtYSBjYWNoZSBuZXZlciBleHBpcmVzLlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IHNvY2tldFRpbWVvdXRNUyBUaGUgTW9uZ29EQiBkcml2ZXIgb3B0aW9uIHRvIHNwZWNpZnkgdGhlIGFtb3VudCBvZiB0aW1lLCBpbiBtaWxsaXNlY29uZHMsIHNwZW50IGF0dGVtcHRpbmcgdG8gc2VuZCBvciByZWNlaXZlIG9uIGEgc29ja2V0IGJlZm9yZSB0aW1pbmcgb3V0LiBTcGVjaWZ5aW5nIDAgbWVhbnMgbm8gdGltZW91dC5cbiAqL1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgQXV0aEFkYXB0ZXJcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZW5hYmxlZCBJcyBgdHJ1ZWAgaWYgdGhlIGF1dGggYWRhcHRlciBpcyBlbmFibGVkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgTG9nTGV2ZWxzXG4gKiBAcHJvcGVydHkge1N0cmluZ30gY2xvdWRGdW5jdGlvbkVycm9yIExvZyBsZXZlbCB1c2VkIGJ5IHRoZSBDbG91ZCBDb2RlIEZ1bmN0aW9ucyBvbiBlcnJvci4gRGVmYXVsdCBpcyBgZXJyb3JgLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IGNsb3VkRnVuY3Rpb25TdWNjZXNzIExvZyBsZXZlbCB1c2VkIGJ5IHRoZSBDbG91ZCBDb2RlIEZ1bmN0aW9ucyBvbiBzdWNjZXNzLiBEZWZhdWx0IGlzIGBpbmZvYC5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB0cmlnZ2VyQWZ0ZXIgTG9nIGxldmVsIHVzZWQgYnkgdGhlIENsb3VkIENvZGUgVHJpZ2dlcnMgYGFmdGVyU2F2ZWAsIGBhZnRlckRlbGV0ZWAsIGBhZnRlckZpbmRgLCBgYWZ0ZXJMb2dvdXRgLiBEZWZhdWx0IGlzIGBpbmZvYC5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB0cmlnZ2VyQmVmb3JlRXJyb3IgTG9nIGxldmVsIHVzZWQgYnkgdGhlIENsb3VkIENvZGUgVHJpZ2dlcnMgYGJlZm9yZVNhdmVgLCBgYmVmb3JlRGVsZXRlYCwgYGJlZm9yZUZpbmRgLCBgYmVmb3JlTG9naW5gIG9uIGVycm9yLiBEZWZhdWx0IGlzIGBlcnJvcmAuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gdHJpZ2dlckJlZm9yZVN1Y2Nlc3MgTG9nIGxldmVsIHVzZWQgYnkgdGhlIENsb3VkIENvZGUgVHJpZ2dlcnMgYGJlZm9yZVNhdmVgLCBgYmVmb3JlRGVsZXRlYCwgYGJlZm9yZUZpbmRgLCBgYmVmb3JlTG9naW5gIG9uIHN1Y2Nlc3MuIERlZmF1bHQgaXMgYGluZm9gLlxuICovXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEEiLCJpZ25vcmVMaXN0IjpbXX0=
270
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL09wdGlvbnMvZG9jcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBpbnRlcmZhY2UgU2NoZW1hT3B0aW9uc1xuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gYWZ0ZXJNaWdyYXRpb24gRXhlY3V0ZSBhIGNhbGxiYWNrIGFmdGVyIHJ1bm5pbmcgc2NoZW1hIG1pZ3JhdGlvbnMuXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBiZWZvcmVNaWdyYXRpb24gRXhlY3V0ZSBhIGNhbGxiYWNrIGJlZm9yZSBydW5uaW5nIHNjaGVtYSBtaWdyYXRpb25zLlxuICogQHByb3BlcnR5IHtBbnl9IGRlZmluaXRpb25zIFJlc3QgcmVwcmVzZW50YXRpb24gb24gUGFyc2UuU2NoZW1hIGh0dHBzOi8vZG9jcy5wYXJzZXBsYXRmb3JtLm9yZy9yZXN0L2d1aWRlLyNhZGRpbmctYS1zY2hlbWFcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZGVsZXRlRXh0cmFGaWVsZHMgSXMgdHJ1ZSBpZiBQYXJzZSBTZXJ2ZXIgc2hvdWxkIGRlbGV0ZSBhbnkgZmllbGRzIG5vdCBkZWZpbmVkIGluIGEgc2NoZW1hIGRlZmluaXRpb24uIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBkdXJpbmcgZGV2ZWxvcG1lbnQuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGtlZXBVbmtub3duSW5kZXhlcyAoT3B0aW9uYWwpIEtlZXAgaW5kZXhlcyB0aGF0IGFyZSBwcmVzZW50IGluIHRoZSBkYXRhYmFzZSBidXQgbm90IGRlZmluZWQgaW4gdGhlIHNjaGVtYS4gU2V0IHRoaXMgdG8gYHRydWVgIGlmIHlvdSBhcmUgYWRkaW5nIGluZGV4ZXMgbWFudWFsbHksIHNvIHRoYXQgdGhleSB3b24ndCBiZSByZW1vdmVkIHdoZW4gcnVubmluZyBzY2hlbWEgbWlncmF0aW9uLiBEZWZhdWx0IGlzIGBmYWxzZWAuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGxvY2tTY2hlbWFzIElzIHRydWUgaWYgUGFyc2UgU2VydmVyIHdpbGwgcmVqZWN0IGFueSBhdHRlbXB0cyB0byBtb2RpZnkgdGhlIHNjaGVtYSB3aGlsZSB0aGUgc2VydmVyIGlzIHJ1bm5pbmcuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IHJlY3JlYXRlTW9kaWZpZWRGaWVsZHMgSXMgdHJ1ZSBpZiBQYXJzZSBTZXJ2ZXIgc2hvdWxkIHJlY3JlYXRlIGFueSBmaWVsZHMgdGhhdCBhcmUgZGlmZmVyZW50IGJldHdlZW4gdGhlIGN1cnJlbnQgZGF0YWJhc2Ugc2NoZW1hIGFuZCB0aGVzY2hlbWEgZGVmaW5pdGlvbi4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGR1cmluZyBkZXZlbG9wbWVudC5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gc3RyaWN0IElzIHRydWUgaWYgUGFyc2UgU2VydmVyIHNob3VsZCBleGl0IGlmIHNjaGVtYSB1cGRhdGUgZmFpbC5cbiAqL1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgUGFyc2VTZXJ2ZXJPcHRpb25zXG4gKiBAcHJvcGVydHkge0FjY291bnRMb2Nrb3V0T3B0aW9uc30gYWNjb3VudExvY2tvdXQgVGhlIGFjY291bnQgbG9ja291dCBwb2xpY3kgZm9yIGZhaWxlZCBsb2dpbiBhdHRlbXB0cy5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gYWxsb3dDbGllbnRDbGFzc0NyZWF0aW9uIEVuYWJsZSAob3IgZGlzYWJsZSkgY2xpZW50IGNsYXNzIGNyZWF0aW9uLCBkZWZhdWx0cyB0byBmYWxzZVxuICogQHByb3BlcnR5IHtCb29sZWFufSBhbGxvd0N1c3RvbU9iamVjdElkIEVuYWJsZSAob3IgZGlzYWJsZSkgY3VzdG9tIG9iamVjdElkXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGFsbG93RXhwaXJlZEF1dGhEYXRhVG9rZW4gQWxsb3cgYSB1c2VyIHRvIGxvZyBpbiBldmVuIGlmIHRoZSAzcmQgcGFydHkgYXV0aGVudGljYXRpb24gdG9rZW4gdGhhdCB3YXMgdXNlZCB0byBzaWduIGluIHRvIHRoZWlyIGFjY291bnQgaGFzIGV4cGlyZWQuIElmIHRoaXMgaXMgc2V0IHRvIGBmYWxzZWAsIHRoZW4gdGhlIHRva2VuIHdpbGwgYmUgdmFsaWRhdGVkIGV2ZXJ5IHRpbWUgdGhlIHVzZXIgc2lnbnMgaW4gdG8gdGhlaXIgYWNjb3VudC4gVGhpcyByZWZlcnMgdG8gdGhlIHRva2VuIHRoYXQgaXMgc3RvcmVkIGluIHRoZSBgX1VzZXIuYXV0aERhdGFgIGZpZWxkLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICogQHByb3BlcnR5IHtTdHJpbmdbXX0gYWxsb3dIZWFkZXJzIEFkZCBoZWFkZXJzIHRvIEFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnNcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfFN0cmluZ1tdfSBhbGxvd09yaWdpbiBTZXRzIG9yaWdpbnMgZm9yIEFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbi4gVGhpcyBjYW4gYmUgYSBzdHJpbmcgZm9yIGEgc2luZ2xlIG9yaWdpbiBvciBhbiBhcnJheSBvZiBzdHJpbmdzIGZvciBtdWx0aXBsZSBvcmlnaW5zLlxuICogQHByb3BlcnR5IHtBZGFwdGVyPEFuYWx5dGljc0FkYXB0ZXI+fSBhbmFseXRpY3NBZGFwdGVyIEFkYXB0ZXIgbW9kdWxlIGZvciB0aGUgYW5hbHl0aWNzXG4gKiBAcHJvcGVydHkge1N0cmluZ30gYXBwSWQgWW91ciBQYXJzZSBBcHBsaWNhdGlvbiBJRFxuICogQHByb3BlcnR5IHtTdHJpbmd9IGFwcE5hbWUgU2V0cyB0aGUgYXBwIG5hbWVcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBhdXRoIENvbmZpZ3VyYXRpb24gZm9yIHlvdXIgYXV0aGVudGljYXRpb24gcHJvdmlkZXJzLCBhcyBzdHJpbmdpZmllZCBKU09OLiBTZWUgaHR0cDovL2RvY3MucGFyc2VwbGF0Zm9ybS5vcmcvcGFyc2Utc2VydmVyL2d1aWRlLyNvYXV0aC1hbmQtM3JkLXBhcnR5LWF1dGhlbnRpY2F0aW9uXG4gKiBAcHJvcGVydHkge0FkYXB0ZXI8Q2FjaGVBZGFwdGVyPn0gY2FjaGVBZGFwdGVyIEFkYXB0ZXIgbW9kdWxlIGZvciB0aGUgY2FjaGVcbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBjYWNoZU1heFNpemUgU2V0cyB0aGUgbWF4aW11bSBzaXplIGZvciB0aGUgaW4gbWVtb3J5IGNhY2hlLCBkZWZhdWx0cyB0byAxMDAwMFxuICogQHByb3BlcnR5IHtOdW1iZXJ9IGNhY2hlVFRMIFNldHMgdGhlIFRUTCBmb3IgdGhlIGluIG1lbW9yeSBjYWNoZSAoaW4gbXMpLCBkZWZhdWx0cyB0byA1MDAwICg1IHNlY29uZHMpXG4gKiBAcHJvcGVydHkge1N0cmluZ30gY2xpZW50S2V5IEtleSBmb3IgaU9TLCBNYWNPUywgdHZPUyBjbGllbnRzXG4gKiBAcHJvcGVydHkge1N0cmluZ30gY2xvdWQgRnVsbCBwYXRoIHRvIHlvdXIgY2xvdWQgY29kZSBtYWluLmpzXG4gKiBAcHJvcGVydHkge051bWJlcnxCb29sZWFufSBjbHVzdGVyIFJ1biB3aXRoIGNsdXN0ZXIsIG9wdGlvbmFsbHkgc2V0IHRoZSBudW1iZXIgb2YgcHJvY2Vzc2VzIGRlZmF1bHQgdG8gb3MuY3B1cygpLmxlbmd0aFxuICogQHByb3BlcnR5IHtTdHJpbmd9IGNvbGxlY3Rpb25QcmVmaXggQSBjb2xsZWN0aW9uIHByZWZpeCBmb3IgdGhlIGNsYXNzZXNcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gY29udmVydEVtYWlsVG9Mb3dlcmNhc2UgT3B0aW9uYWwuIElmIHNldCB0byBgdHJ1ZWAsIHRoZSBgZW1haWxgIHByb3BlcnR5IG9mIGEgdXNlciBpcyBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBsb3dlcmNhc2UgYmVmb3JlIGJlaW5nIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UuIENvbnNlcXVlbnRseSwgcXVlcmllcyBtdXN0IG1hdGNoIHRoZSBjYXNlIGFzIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UsIHdoaWNoIHdvdWxkIGJlIGxvd2VyY2FzZSBpbiB0aGlzIHNjZW5hcmlvLiBJZiBgZmFsc2VgLCB0aGUgYGVtYWlsYCBwcm9wZXJ0eSBpcyBzdG9yZWQgYXMgc2V0LCB3aXRob3V0IGFueSBjYXNlIG1vZGlmaWNhdGlvbnMuIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gY29udmVydFVzZXJuYW1lVG9Mb3dlcmNhc2UgT3B0aW9uYWwuIElmIHNldCB0byBgdHJ1ZWAsIHRoZSBgdXNlcm5hbWVgIHByb3BlcnR5IG9mIGEgdXNlciBpcyBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBsb3dlcmNhc2UgYmVmb3JlIGJlaW5nIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UuIENvbnNlcXVlbnRseSwgcXVlcmllcyBtdXN0IG1hdGNoIHRoZSBjYXNlIGFzIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UsIHdoaWNoIHdvdWxkIGJlIGxvd2VyY2FzZSBpbiB0aGlzIHNjZW5hcmlvLiBJZiBgZmFsc2VgLCB0aGUgYHVzZXJuYW1lYCBwcm9wZXJ0eSBpcyBzdG9yZWQgYXMgc2V0LCB3aXRob3V0IGFueSBjYXNlIG1vZGlmaWNhdGlvbnMuIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAqIEBwcm9wZXJ0eSB7Q3VzdG9tUGFnZXNPcHRpb25zfSBjdXN0b21QYWdlcyBjdXN0b20gcGFnZXMgZm9yIHBhc3N3b3JkIHZhbGlkYXRpb24gYW5kIHJlc2V0XG4gKiBAcHJvcGVydHkge0FkYXB0ZXI8U3RvcmFnZUFkYXB0ZXI+fSBkYXRhYmFzZUFkYXB0ZXIgQWRhcHRlciBtb2R1bGUgZm9yIHRoZSBkYXRhYmFzZTsgYW55IG9wdGlvbnMgdGhhdCBhcmUgbm90IGV4cGxpY2l0bHkgZGVzY3JpYmVkIGhlcmUgYXJlIHBhc3NlZCBkaXJlY3RseSB0byB0aGUgZGF0YWJhc2UgY2xpZW50LlxuICogQHByb3BlcnR5IHtEYXRhYmFzZU9wdGlvbnN9IGRhdGFiYXNlT3B0aW9ucyBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIGRhdGFiYXNlIGNsaWVudFxuICogQHByb3BlcnR5IHtTdHJpbmd9IGRhdGFiYXNlVVJJIFRoZSBmdWxsIFVSSSB0byB5b3VyIGRhdGFiYXNlLiBTdXBwb3J0ZWQgZGF0YWJhc2VzIGFyZSBtb25nb2RiIG9yIHBvc3RncmVzLlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IGRlZmF1bHRMaW1pdCBEZWZhdWx0IHZhbHVlIGZvciBsaW1pdCBvcHRpb24gb24gcXVlcmllcywgZGVmYXVsdHMgdG8gYDEwMGAuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGRpcmVjdEFjY2VzcyBTZXQgdG8gYHRydWVgIGlmIFBhcnNlIHJlcXVlc3RzIHdpdGhpbiB0aGUgc2FtZSBOb2RlLmpzIGVudmlyb25tZW50IGFzIFBhcnNlIFNlcnZlciBzaG91bGQgYmUgcm91dGVkIHRvIFBhcnNlIFNlcnZlciBkaXJlY3RseSBpbnN0ZWFkIG9mIHZpYSB0aGUgSFRUUCBpbnRlcmZhY2UuIERlZmF1bHQgaXMgYGZhbHNlYC48YnI+PGJyPklmIHNldCB0byBgZmFsc2VgIHRoZW4gUGFyc2UgcmVxdWVzdHMgd2l0aGluIHRoZSBzYW1lIE5vZGUuanMgZW52aXJvbm1lbnQgYXMgUGFyc2UgU2VydmVyIGFyZSBleGVjdXRlZCBhcyBIVFRQIHJlcXVlc3RzIHNlbnQgdG8gUGFyc2UgU2VydmVyIHZpYSB0aGUgYHNlcnZlclVSTGAuIEZvciBleGFtcGxlLCBhIGBQYXJzZS5RdWVyeWAgaW4gQ2xvdWQgQ29kZSBpcyBjYWxsaW5nIFBhcnNlIFNlcnZlciB2aWEgYSBIVFRQIHJlcXVlc3QuIFRoZSBzZXJ2ZXIgaXMgZXNzZW50aWFsbHkgbWFraW5nIGEgSFRUUCByZXF1ZXN0IHRvIGl0c2VsZiwgdW5uZWNlc3NhcmlseSB1c2luZyBuZXR3b3JrIHJlc291cmNlcyBzdWNoIGFzIG5ldHdvcmsgcG9ydHMuPGJyPjxicj7imqDvuI8gSW4gZW52aXJvbm1lbnRzIHdoZXJlIG11bHRpcGxlIFBhcnNlIFNlcnZlciBpbnN0YW5jZXMgcnVuIGJlaGluZCBhIGxvYWQgYmFsYW5jZXIgYW5kIFBhcnNlIHJlcXVlc3RzIHdpdGhpbiB0aGUgY3VycmVudCBOb2RlLmpzIGVudmlyb25tZW50IHNob3VsZCBiZSByb3V0ZWQgdmlhIHRoZSBsb2FkIGJhbGFuY2VyIGFuZCBkaXN0cmlidXRlZCBhcyBIVFRQIHJlcXVlc3RzIGFtb25nIGFsbCBpbnN0YW5jZXMgdmlhIHRoZSBgc2VydmVyVVJMYCwgdGhpcyBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZG90TmV0S2V5IEtleSBmb3IgVW5pdHkgYW5kIC5OZXQgU0RLXG4gKiBAcHJvcGVydHkge0FkYXB0ZXI8TWFpbEFkYXB0ZXI+fSBlbWFpbEFkYXB0ZXIgQWRhcHRlciBtb2R1bGUgZm9yIGVtYWlsIHNlbmRpbmdcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCBTZXQgdG8gYHRydWVgIGlmIGEgZW1haWwgdmVyaWZpY2F0aW9uIHRva2VuIHNob3VsZCBiZSByZXVzZWQgaW4gY2FzZSBhbm90aGVyIHRva2VuIGlzIHJlcXVlc3RlZCBidXQgdGhlcmUgaXMgYSB0b2tlbiB0aGF0IGlzIHN0aWxsIHZhbGlkLCBpLmUuIGhhcyBub3QgZXhwaXJlZC4gVGhpcyBhdm9pZHMgdGhlIG9mdGVuIG9ic2VydmVkIGlzc3VlIHRoYXQgYSB1c2VyIHJlcXVlc3RzIG11bHRpcGxlIGVtYWlscyBhbmQgZG9lcyBub3Qga25vdyB3aGljaCBsaW5rIGNvbnRhaW5zIGEgdmFsaWQgdG9rZW4gYmVjYXVzZSBlYWNoIG5ld2x5IGdlbmVyYXRlZCB0b2tlbiB3b3VsZCBpbnZhbGlkYXRlIHRoZSBwcmV2aW91cyB0b2tlbi48YnI+PGJyPkRlZmF1bHQgaXMgYGZhbHNlYC48YnI+UmVxdWlyZXMgb3B0aW9uIGB2ZXJpZnlVc2VyRW1haWxzOiB0cnVlYC5cbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbiBTZXQgdGhlIHZhbGlkaXR5IGR1cmF0aW9uIG9mIHRoZSBlbWFpbCB2ZXJpZmljYXRpb24gdG9rZW4gaW4gc2Vjb25kcyBhZnRlciB3aGljaCB0aGUgdG9rZW4gZXhwaXJlcy4gVGhlIHRva2VuIGlzIHVzZWQgaW4gdGhlIGxpbmsgdGhhdCBpcyBzZXQgaW4gdGhlIGVtYWlsLiBBZnRlciB0aGUgdG9rZW4gZXhwaXJlcywgdGhlIGxpbmsgYmVjb21lcyBpbnZhbGlkIGFuZCBhIG5ldyBsaW5rIGhhcyB0byBiZSBzZW50LiBJZiB0aGUgb3B0aW9uIGlzIG5vdCBzZXQgb3Igc2V0IHRvIGB1bmRlZmluZWRgLCB0aGVuIHRoZSB0b2tlbiBuZXZlciBleHBpcmVzLjxicj48YnI+Rm9yIGV4YW1wbGUsIHRvIGV4cGlyZSB0aGUgdG9rZW4gYWZ0ZXIgMiBob3Vycywgc2V0IGEgdmFsdWUgb2YgNzIwMCBzZWNvbmRzICg9IDYwIHNlY29uZHMgKiA2MCBtaW51dGVzICogMiBob3VycykuPGJyPjxicj5EZWZhdWx0IGlzIGB1bmRlZmluZWRgLjxicj5SZXF1aXJlcyBvcHRpb24gYHZlcmlmeVVzZXJFbWFpbHM6IHRydWVgLlxuICogQHByb3BlcnR5IHtCb29sZWFufSBlbmFibGVBbm9ueW1vdXNVc2VycyBFbmFibGUgKG9yIGRpc2FibGUpIGFub255bW91cyB1c2VycywgZGVmYXVsdHMgdG8gdHJ1ZVxuICogQHByb3BlcnR5IHtCb29sZWFufSBlbmFibGVDb2xsYXRpb25DYXNlQ29tcGFyaXNvbiBPcHRpb25hbC4gSWYgc2V0IHRvIGB0cnVlYCwgdGhlIGNvbGxhdGlvbiBydWxlIG9mIGNhc2UgY29tcGFyaXNvbiBmb3IgcXVlcmllcyBhbmQgaW5kZXhlcyBpcyBlbmFibGVkLiBFbmFibGUgdGhpcyBvcHRpb24gdG8gcnVuIFBhcnNlIFNlcnZlciB3aXRoIE1vbmdvREIgQXRsYXMgU2VydmVybGVzcyBvciBBV1MgQW1hem9uIERvY3VtZW50REIuIElmIGBmYWxzZWAsIHRoZSBjb2xsYXRpb24gcnVsZSBvZiBjYXNlIGNvbXBhcmlzb24gaXMgZGlzYWJsZWQuIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZW5hYmxlRXhwcmVzc0Vycm9ySGFuZGxlciBFbmFibGVzIHRoZSBkZWZhdWx0IGV4cHJlc3MgZXJyb3IgaGFuZGxlciBmb3IgYWxsIGVycm9yc1xuICogQHByb3BlcnR5IHtCb29sZWFufSBlbmFibGVJbnNlY3VyZUF1dGhBZGFwdGVycyBFbmFibGUgKG9yIGRpc2FibGUpIGluc2VjdXJlIGF1dGggYWRhcHRlcnMsIGRlZmF1bHRzIHRvIHRydWUuIEluc2VjdXJlIGF1dGggYWRhcHRlcnMgYXJlIGRlcHJlY2F0ZWQgYW5kIGl0IGlzIHJlY29tbWVuZGVkIHRvIGRpc2FibGUgdGhlbS5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZW5jb2RlUGFyc2VPYmplY3RJbkNsb3VkRnVuY3Rpb24gSWYgc2V0IHRvIGB0cnVlYCwgYSBgUGFyc2UuT2JqZWN0YCB0aGF0IGlzIGluIHRoZSBwYXlsb2FkIHdoZW4gY2FsbGluZyBhIENsb3VkIEZ1bmN0aW9uIHdpbGwgYmUgY29udmVydGVkIHRvIGFuIGluc3RhbmNlIG9mIGBQYXJzZS5PYmplY3RgLiBJZiBgZmFsc2VgLCB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGNvbnZlcnRlZCBhbmQgaW5zdGVhZCBiZSBhIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0LCB3aGljaCBjb250YWlucyB0aGUgcmF3IGRhdGEgb2YgYSBgUGFyc2UuT2JqZWN0YCBidXQgaXMgbm90IGFuIGFjdHVhbCBpbnN0YW5jZSBvZiBgUGFyc2UuT2JqZWN0YC4gRGVmYXVsdCBpcyBgZmFsc2VgLiA8YnI+PGJyPuKEue+4jyBUaGUgZXhwZWN0ZWQgYmVoYXZpb3Igd291bGQgYmUgdGhhdCB0aGUgb2JqZWN0IGlzIGNvbnZlcnRlZCB0byBhbiBpbnN0YW5jZSBvZiBgUGFyc2UuT2JqZWN0YCwgc28geW91IHdvdWxkIG5vcm1hbGx5IHNldCB0aGlzIG9wdGlvbiB0byBgdHJ1ZWAuIFRoZSBkZWZhdWx0IGlzIGBmYWxzZWAgYmVjYXVzZSB0aGlzIGlzIGEgdGVtcG9yYXJ5IG9wdGlvbiB0aGF0IGhhcyBiZWVuIGludHJvZHVjZWQgdG8gYXZvaWQgYSBicmVha2luZyBjaGFuZ2Ugd2hlbiBmaXhpbmcgYSBidWcgd2hlcmUgSmF2YVNjcmlwdCBvYmplY3RzIGFyZSBub3QgY29udmVydGVkIHRvIGFjdHVhbCBpbnN0YW5jZXMgb2YgYFBhcnNlLk9iamVjdGAuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZW5jcnlwdGlvbktleSBLZXkgZm9yIGVuY3J5cHRpbmcgeW91ciBmaWxlc1xuICogQHByb3BlcnR5IHtCb29sZWFufSBlbmZvcmNlUHJpdmF0ZVVzZXJzIFNldCB0byB0cnVlIGlmIG5ldyB1c2VycyBzaG91bGQgYmUgY3JlYXRlZCB3aXRob3V0IHB1YmxpYyByZWFkIGFuZCB3cml0ZSBhY2Nlc3MuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGV4cGlyZUluYWN0aXZlU2Vzc2lvbnMgU2V0cyB3aGV0aGVyIHdlIHNob3VsZCBleHBpcmUgdGhlIGluYWN0aXZlIHNlc3Npb25zLCBkZWZhdWx0cyB0byB0cnVlLiBJZiBmYWxzZSwgYWxsIG5ldyBzZXNzaW9ucyBhcmUgY3JlYXRlZCB3aXRoIG5vIGV4cGlyYXRpb24gZGF0ZS5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZXh0ZW5kU2Vzc2lvbk9uVXNlIFdoZXRoZXIgUGFyc2UgU2VydmVyIHNob3VsZCBhdXRvbWF0aWNhbGx5IGV4dGVuZCBhIHZhbGlkIHNlc3Npb24gYnkgdGhlIHNlc3Npb25MZW5ndGguIEluIG9yZGVyIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNlc3Npb24gdXBkYXRlcyBpbiB0aGUgZGF0YWJhc2UsIGEgc2Vzc2lvbiB3aWxsIG9ubHkgYmUgZXh0ZW5kZWQgd2hlbiBhIHJlcXVlc3QgaXMgcmVjZWl2ZWQgYWZ0ZXIgYXQgbGVhc3QgaGFsZiBvZiB0aGUgY3VycmVudCBzZXNzaW9uJ3MgbGlmZXRpbWUgaGFzIHBhc3NlZC5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmaWxlS2V5IEtleSBmb3IgeW91ciBmaWxlc1xuICogQHByb3BlcnR5IHtBZGFwdGVyPEZpbGVzQWRhcHRlcj59IGZpbGVzQWRhcHRlciBBZGFwdGVyIG1vZHVsZSBmb3IgdGhlIGZpbGVzIHN1Yi1zeXN0ZW1cbiAqIEBwcm9wZXJ0eSB7RmlsZVVwbG9hZE9wdGlvbnN9IGZpbGVVcGxvYWQgT3B0aW9ucyBmb3IgZmlsZSB1cGxvYWRzXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZ3JhcGhRTFBhdGggTW91bnQgcGF0aCBmb3IgdGhlIEdyYXBoUUwgZW5kcG9pbnQsIGRlZmF1bHRzIHRvIC9ncmFwaHFsXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGdyYXBoUUxQdWJsaWNJbnRyb3NwZWN0aW9uIEVuYWJsZSBwdWJsaWMgaW50cm9zcGVjdGlvbiBmb3IgdGhlIEdyYXBoUUwgZW5kcG9pbnQsIGRlZmF1bHRzIHRvIGZhbHNlXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZ3JhcGhRTFNjaGVtYSBGdWxsIHBhdGggdG8geW91ciBHcmFwaFFMIGN1c3RvbSBzY2hlbWEuZ3JhcGhxbCBmaWxlXG4gKiBAcHJvcGVydHkge1N0cmluZ30gaG9zdCBUaGUgaG9zdCB0byBzZXJ2ZSBQYXJzZVNlcnZlciBvbiwgZGVmYXVsdHMgdG8gMC4wLjAuMFxuICogQHByb3BlcnR5IHtJZGVtcG90ZW5jeU9wdGlvbnN9IGlkZW1wb3RlbmN5T3B0aW9ucyBPcHRpb25zIGZvciByZXF1ZXN0IGlkZW1wb3RlbmN5IHRvIGRlZHVwbGljYXRlIGlkZW50aWNhbCByZXF1ZXN0cyB0aGF0IG1heSBiZSBjYXVzZWQgYnkgbmV0d29yayBpc3N1ZXMuIENhdXRpb24sIHRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmUgdGhhdCBtYXkgbm90IGJlIGFwcHJvcHJpYXRlIGZvciBwcm9kdWN0aW9uLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IGphdmFzY3JpcHRLZXkgS2V5IGZvciB0aGUgSmF2YXNjcmlwdCBTREtcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0ganNvbkxvZ3MgTG9nIGFzIHN0cnVjdHVyZWQgSlNPTiBvYmplY3RzXG4gKiBAcHJvcGVydHkge0xpdmVRdWVyeU9wdGlvbnN9IGxpdmVRdWVyeSBwYXJzZS1zZXJ2ZXIncyBMaXZlUXVlcnkgY29uZmlndXJhdGlvbiBvYmplY3RcbiAqIEBwcm9wZXJ0eSB7TGl2ZVF1ZXJ5U2VydmVyT3B0aW9uc30gbGl2ZVF1ZXJ5U2VydmVyT3B0aW9ucyBMaXZlIHF1ZXJ5IHNlcnZlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgKHdpbGwgc3RhcnQgdGhlIGxpdmVRdWVyeSBzZXJ2ZXIpXG4gKiBAcHJvcGVydHkge0FkYXB0ZXI8TG9nZ2VyQWRhcHRlcj59IGxvZ2dlckFkYXB0ZXIgQWRhcHRlciBtb2R1bGUgZm9yIHRoZSBsb2dnaW5nIHN1Yi1zeXN0ZW1cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBsb2dMZXZlbCBTZXRzIHRoZSBsZXZlbCBmb3IgbG9nc1xuICogQHByb3BlcnR5IHtMb2dMZXZlbHN9IGxvZ0xldmVscyAoT3B0aW9uYWwpIE92ZXJyaWRlcyB0aGUgbG9nIGxldmVscyB1c2VkIGludGVybmFsbHkgYnkgUGFyc2UgU2VydmVyIHRvIGxvZyBldmVudHMuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbG9nc0ZvbGRlciBGb2xkZXIgZm9yIHRoZSBsb2dzIChkZWZhdWx0cyB0byAnLi9sb2dzJyk7IHNldCB0byBudWxsIHRvIGRpc2FibGUgZmlsZSBiYXNlZCBsb2dnaW5nXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbWFpbnRlbmFuY2VLZXkgKE9wdGlvbmFsKSBUaGUgbWFpbnRlbmFuY2Uga2V5IGlzIHVzZWQgZm9yIG1vZGlmeWluZyBpbnRlcm5hbCBhbmQgcmVhZC1vbmx5IGZpZWxkcyBvZiBQYXJzZSBTZXJ2ZXIuPGJyPjxicj7imqDvuI8gVGhpcyBrZXkgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgYXMgcGFydCBvZiBhIHJlZ3VsYXIgb3BlcmF0aW9uIG9mIFBhcnNlIFNlcnZlci4gVGhpcyBrZXkgaXMgaW50ZW5kZWQgdG8gY29uZHVjdCBvdXQtb2YtYmFuZCBjaGFuZ2VzIHN1Y2ggYXMgb25lLXRpbWUgbWlncmF0aW9ucyBvciBkYXRhIGNvcnJlY3Rpb24gdGFza3MuIEludGVybmFsIGZpZWxkcyBhcmUgbm90IG9mZmljaWFsbHkgZG9jdW1lbnRlZCBhbmQgbWF5IGNoYW5nZSBhdCBhbnkgdGltZSB3aXRob3V0IHB1YmxpY2F0aW9uIGluIHJlbGVhc2UgY2hhbmdlbG9ncy4gV2Ugc3Ryb25nbHkgYWR2aWNlIG5vdCB0byByZWx5IG9uIGludGVybmFsIGZpZWxkcyBhcyBwYXJ0IG9mIHlvdXIgcmVndWxhciBvcGVyYXRpb24gYW5kIHRvIGludmVzdGlnYXRlIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IHBsYW5uZWQgY2hhbmdlcyAqZGlyZWN0bHkgaW4gdGhlIHNvdXJjZSBjb2RlKiBvZiB5b3VyIGN1cnJlbnQgdmVyc2lvbiBvZiBQYXJzZSBTZXJ2ZXIuXG4gKiBAcHJvcGVydHkge1N0cmluZ1tdfSBtYWludGVuYW5jZUtleUlwcyAoT3B0aW9uYWwpIFJlc3RyaWN0cyB0aGUgdXNlIG9mIG1haW50ZW5hbmNlIGtleSBwZXJtaXNzaW9ucyB0byBhIGxpc3Qgb2YgSVAgYWRkcmVzc2VzIG9yIHJhbmdlcy48YnI+PGJyPlRoaXMgb3B0aW9uIGFjY2VwdHMgYSBsaXN0IG9mIHNpbmdsZSBJUCBhZGRyZXNzZXMsIGZvciBleGFtcGxlIGBbJzEwLjAuMC4xJywgJzEwLjAuMC4yJ11gLiBZb3UgY2FuIGFsc28gdXNlIENJRFIgbm90YXRpb24gdG8gc3BlY2lmeSBhbiBJUCBhZGRyZXNzIHJhbmdlLCBmb3IgZXhhbXBsZSBgWycxMC4wLjEuMC8yNCddYC48YnI+PGJyPjxiPlNwZWNpYWwgc2NlbmFyaW9zOjwvYj48YnI+LSBTZXR0aW5nIGFuIGVtcHR5IGFycmF5IGBbXWAgbWVhbnMgdGhhdCB0aGUgbWFpbnRlbmFuY2Uga2V5IGNhbm5vdCBiZSB1c2VkIGV2ZW4gaW4gUGFyc2UgU2VydmVyIENsb3VkIENvZGUuIFRoaXMgdmFsdWUgY2Fubm90IGJlIHNldCB2aWEgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgYXMgdGhlcmUgaXMgbm8gd2F5IHRvIHBhc3MgYW4gZW1wdHkgYXJyYXkgdG8gUGFyc2UgU2VydmVyIHZpYSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS48YnI+LSBTZXR0aW5nIGBbJzAuMC4wLjAvMCcsICc6OjAnXWAgbWVhbnMgdG8gYWxsb3cgYW55IElQdjQgYW5kIElQdjYgYWRkcmVzcyB0byB1c2UgdGhlIG1haW50ZW5hbmNlIGtleSBhbmQgZWZmZWN0aXZlbHkgZGlzYWJsZXMgdGhlIElQIGZpbHRlci48YnI+PGJyPjxiPkNvbnNpZGVyYXRpb25zOjwvYj48YnI+LSBJUHY0IGFuZCBJUHY2IGFkZHJlc3NlcyBhcmUgbm90IGNvbXBhcmVkIGFnYWluc3QgZWFjaCBvdGhlci4gRWFjaCBJUCB2ZXJzaW9uIChJUHY0IGFuZCBJUHY2KSBuZWVkcyB0byBiZSBjb25zaWRlcmVkIHNlcGFyYXRlbHkuIEZvciBleGFtcGxlLCBgWycwLjAuMC4wLzAnXWAgYWxsb3dzIGFueSBJUHY0IGFkZHJlc3MgYW5kIGJsb2NrcyBldmVyeSBJUHY2IGFkZHJlc3MuIENvbnZlcnNlbHksIGBbJzo6MCddYCBhbGxvd3MgYW55IElQdjYgYWRkcmVzcyBhbmQgYmxvY2tzIGV2ZXJ5IElQdjQgYWRkcmVzcy48YnI+LSBLZWVwIGluIG1pbmQgdGhhdCB0aGUgSVAgdmVyc2lvbiBpbiB1c2UgZGVwZW5kcyBvbiB0aGUgbmV0d29yayBzdGFjayBvZiB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggUGFyc2UgU2VydmVyIHJ1bnMuIEEgbG9jYWwgZW52aXJvbm1lbnQgbWF5IHVzZSBhIGRpZmZlcmVudCBJUCB2ZXJzaW9uIHRoYW4gYSByZW1vdGUgZW52aXJvbm1lbnQuIEZvciBleGFtcGxlLCBpdCdzIHBvc3NpYmxlIHRoYXQgbG9jYWxseSB0aGUgdmFsdWUgYFsnMC4wLjAuMC8wJ11gIGFsbG93cyB0aGUgcmVxdWVzdCBJUCBiZWNhdXNlIHRoZSBlbnZpcm9ubWVudCBpcyB1c2luZyBJUHY0LCBidXQgd2hlbiBQYXJzZSBTZXJ2ZXIgaXMgZGVwbG95ZWQgcmVtb3RlbHkgdGhlIHJlcXVlc3QgSVAgaXMgYmxvY2tlZCBiZWNhdXNlIHRoZSByZW1vdGUgZW52aXJvbm1lbnQgaXMgdXNpbmcgSVB2Ni48YnI+LSBXaGVuIHNldHRpbmcgdGhlIG9wdGlvbiB2aWEgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdGhlIG5vdGF0aW9uIGlzIGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZywgZm9yIGV4YW1wbGUgYFwiMC4wLjAuMC8wLDo6MFwiYC48YnI+LSBJUHY2IHpvbmUgaW5kaWNlcyAoYCVgIHN1ZmZpeCkgYXJlIG5vdCBzdXBwb3J0ZWQsIGZvciBleGFtcGxlIGBmZTgwOjoxJWV0aDBgLCBgZmU4MDo6MSUxYCBvciBgOjoxJWxvYC48YnI+PGJyPkRlZmF1bHRzIHRvIGBbJzEyNy4wLjAuMScsICc6OjEnXWAgd2hpY2ggbWVhbnMgdGhhdCBvbmx5IGBsb2NhbGhvc3RgLCB0aGUgc2VydmVyIGluc3RhbmNlIG9uIHdoaWNoIFBhcnNlIFNlcnZlciBydW5zLCBpcyBhbGxvd2VkIHRvIHVzZSB0aGUgbWFpbnRlbmFuY2Uga2V5LlxuICogQHByb3BlcnR5IHtVbmlvbn0gbWFzdGVyS2V5IFlvdXIgUGFyc2UgTWFzdGVyIEtleVxuICogQHByb3BlcnR5IHtTdHJpbmdbXX0gbWFzdGVyS2V5SXBzIChPcHRpb25hbCkgUmVzdHJpY3RzIHRoZSB1c2Ugb2YgbWFzdGVyIGtleSBwZXJtaXNzaW9ucyB0byBhIGxpc3Qgb2YgSVAgYWRkcmVzc2VzIG9yIHJhbmdlcy48YnI+PGJyPlRoaXMgb3B0aW9uIGFjY2VwdHMgYSBsaXN0IG9mIHNpbmdsZSBJUCBhZGRyZXNzZXMsIGZvciBleGFtcGxlIGBbJzEwLjAuMC4xJywgJzEwLjAuMC4yJ11gLiBZb3UgY2FuIGFsc28gdXNlIENJRFIgbm90YXRpb24gdG8gc3BlY2lmeSBhbiBJUCBhZGRyZXNzIHJhbmdlLCBmb3IgZXhhbXBsZSBgWycxMC4wLjEuMC8yNCddYC48YnI+PGJyPjxiPlNwZWNpYWwgc2NlbmFyaW9zOjwvYj48YnI+LSBTZXR0aW5nIGFuIGVtcHR5IGFycmF5IGBbXWAgbWVhbnMgdGhhdCB0aGUgbWFzdGVyIGtleSBjYW5ub3QgYmUgdXNlZCBldmVuIGluIFBhcnNlIFNlcnZlciBDbG91ZCBDb2RlLiBUaGlzIHZhbHVlIGNhbm5vdCBiZSBzZXQgdmlhIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGFzIHRoZXJlIGlzIG5vIHdheSB0byBwYXNzIGFuIGVtcHR5IGFycmF5IHRvIFBhcnNlIFNlcnZlciB2aWEgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuPGJyPi0gU2V0dGluZyBgWycwLjAuMC4wLzAnLCAnOjowJ11gIG1lYW5zIHRvIGFsbG93IGFueSBJUHY0IGFuZCBJUHY2IGFkZHJlc3MgdG8gdXNlIHRoZSBtYXN0ZXIga2V5IGFuZCBlZmZlY3RpdmVseSBkaXNhYmxlcyB0aGUgSVAgZmlsdGVyLjxicj48YnI+PGI+Q29uc2lkZXJhdGlvbnM6PC9iPjxicj4tIElQdjQgYW5kIElQdjYgYWRkcmVzc2VzIGFyZSBub3QgY29tcGFyZWQgYWdhaW5zdCBlYWNoIG90aGVyLiBFYWNoIElQIHZlcnNpb24gKElQdjQgYW5kIElQdjYpIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQgc2VwYXJhdGVseS4gRm9yIGV4YW1wbGUsIGBbJzAuMC4wLjAvMCddYCBhbGxvd3MgYW55IElQdjQgYWRkcmVzcyBhbmQgYmxvY2tzIGV2ZXJ5IElQdjYgYWRkcmVzcy4gQ29udmVyc2VseSwgYFsnOjowJ11gIGFsbG93cyBhbnkgSVB2NiBhZGRyZXNzIGFuZCBibG9ja3MgZXZlcnkgSVB2NCBhZGRyZXNzLjxicj4tIEtlZXAgaW4gbWluZCB0aGF0IHRoZSBJUCB2ZXJzaW9uIGluIHVzZSBkZXBlbmRzIG9uIHRoZSBuZXR3b3JrIHN0YWNrIG9mIHRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCBQYXJzZSBTZXJ2ZXIgcnVucy4gQSBsb2NhbCBlbnZpcm9ubWVudCBtYXkgdXNlIGEgZGlmZmVyZW50IElQIHZlcnNpb24gdGhhbiBhIHJlbW90ZSBlbnZpcm9ubWVudC4gRm9yIGV4YW1wbGUsIGl0J3MgcG9zc2libGUgdGhhdCBsb2NhbGx5IHRoZSB2YWx1ZSBgWycwLjAuMC4wLzAnXWAgYWxsb3dzIHRoZSByZXF1ZXN0IElQIGJlY2F1c2UgdGhlIGVudmlyb25tZW50IGlzIHVzaW5nIElQdjQsIGJ1dCB3aGVuIFBhcnNlIFNlcnZlciBpcyBkZXBsb3llZCByZW1vdGVseSB0aGUgcmVxdWVzdCBJUCBpcyBibG9ja2VkIGJlY2F1c2UgdGhlIHJlbW90ZSBlbnZpcm9ubWVudCBpcyB1c2luZyBJUHY2Ljxicj4tIFdoZW4gc2V0dGluZyB0aGUgb3B0aW9uIHZpYSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0aGUgbm90YXRpb24gaXMgYSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nLCBmb3IgZXhhbXBsZSBgXCIwLjAuMC4wLzAsOjowXCJgLjxicj4tIElQdjYgem9uZSBpbmRpY2VzIChgJWAgc3VmZml4KSBhcmUgbm90IHN1cHBvcnRlZCwgZm9yIGV4YW1wbGUgYGZlODA6OjElZXRoMGAsIGBmZTgwOjoxJTFgIG9yIGA6OjElbG9gLjxicj48YnI+RGVmYXVsdHMgdG8gYFsnMTI3LjAuMC4xJywgJzo6MSddYCB3aGljaCBtZWFucyB0aGF0IG9ubHkgYGxvY2FsaG9zdGAsIHRoZSBzZXJ2ZXIgaW5zdGFuY2Ugb24gd2hpY2ggUGFyc2UgU2VydmVyIHJ1bnMsIGlzIGFsbG93ZWQgdG8gdXNlIHRoZSBtYXN0ZXIga2V5LlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IG1hc3RlcktleVR0bCAoT3B0aW9uYWwpIFRoZSBkdXJhdGlvbiBpbiBzZWNvbmRzIGZvciB3aGljaCB0aGUgY3VycmVudCBgbWFzdGVyS2V5YCBpcyBiZWluZyB1c2VkIGJlZm9yZSBpdCBpcyByZXF1ZXN0ZWQgYWdhaW4gaWYgYG1hc3RlcktleWAgaXMgc2V0IHRvIGEgZnVuY3Rpb24uIElmIGBtYXN0ZXJLZXlgIGlzIG5vdCBzZXQgdG8gYSBmdW5jdGlvbiwgdGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdC4gRGVmYXVsdCBpcyBgMGAsIHdoaWNoIG1lYW5zIHRoZSBtYXN0ZXIga2V5IGlzIHJlcXVlc3RlZCBieSBpbnZva2luZyB0aGUgIGBtYXN0ZXJLZXlgIGZ1bmN0aW9uIGV2ZXJ5IHRpbWUgdGhlIG1hc3RlciBrZXkgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IFBhcnNlIFNlcnZlci5cbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBtYXhMaW1pdCBNYXggdmFsdWUgZm9yIGxpbWl0IG9wdGlvbiBvbiBxdWVyaWVzLCBkZWZhdWx0cyB0byB1bmxpbWl0ZWRcbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfFN0cmluZ30gbWF4TG9nRmlsZXMgTWF4aW11bSBudW1iZXIgb2YgbG9ncyB0byBrZWVwLiBJZiBub3Qgc2V0LCBubyBsb2dzIHdpbGwgYmUgcmVtb3ZlZC4gVGhpcyBjYW4gYmUgYSBudW1iZXIgb2YgZmlsZXMgb3IgbnVtYmVyIG9mIGRheXMuIElmIHVzaW5nIGRheXMsIGFkZCAnZCcgYXMgdGhlIHN1ZmZpeC4gKGRlZmF1bHQ6IG51bGwpXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbWF4VXBsb2FkU2l6ZSBNYXggZmlsZSBzaXplIGZvciB1cGxvYWRzLCBkZWZhdWx0cyB0byAyMG1iXG4gKiBAcHJvcGVydHkge1VuaW9ufSBtaWRkbGV3YXJlIG1pZGRsZXdhcmUgZm9yIGV4cHJlc3Mgc2VydmVyLCBjYW4gYmUgc3RyaW5nIG9yIGZ1bmN0aW9uXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IG1vdW50R3JhcGhRTCBNb3VudHMgdGhlIEdyYXBoUUwgZW5kcG9pbnRcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtb3VudFBhdGggTW91bnQgcGF0aCBmb3IgdGhlIHNlcnZlciwgZGVmYXVsdHMgdG8gL3BhcnNlXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IG1vdW50UGxheWdyb3VuZCBNb3VudHMgdGhlIEdyYXBoUUwgUGxheWdyb3VuZCAtIG5ldmVyIHVzZSB0aGlzIG9wdGlvbiBpbiBwcm9kdWN0aW9uXG4gKiBAcHJvcGVydHkge051bWJlcn0gb2JqZWN0SWRTaXplIFNldHMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIGdlbmVyYXRlZCBvYmplY3QgaWQncywgZGVmYXVsdCAxMFxuICogQHByb3BlcnR5IHtQYWdlc09wdGlvbnN9IHBhZ2VzIFRoZSBvcHRpb25zIGZvciBwYWdlcyBzdWNoIGFzIHBhc3N3b3JkIHJlc2V0IGFuZCBlbWFpbCB2ZXJpZmljYXRpb24uXG4gKiBAcHJvcGVydHkge1Bhc3N3b3JkUG9saWN5T3B0aW9uc30gcGFzc3dvcmRQb2xpY3kgVGhlIHBhc3N3b3JkIHBvbGljeSBmb3IgZW5mb3JjaW5nIHBhc3N3b3JkIHJlbGF0ZWQgcnVsZXMuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gcGxheWdyb3VuZFBhdGggTW91bnQgcGF0aCBmb3IgdGhlIEdyYXBoUUwgUGxheWdyb3VuZCwgZGVmYXVsdHMgdG8gL3BsYXlncm91bmRcbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBwb3J0IFRoZSBwb3J0IHRvIHJ1biB0aGUgUGFyc2VTZXJ2ZXIsIGRlZmF1bHRzIHRvIDEzMzcuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IHByZXNlcnZlRmlsZU5hbWUgRW5hYmxlIChvciBkaXNhYmxlKSB0aGUgYWRkaXRpb24gb2YgYSB1bmlxdWUgaGFzaCB0byB0aGUgZmlsZSBuYW1lc1xuICogQHByb3BlcnR5IHtCb29sZWFufSBwcmV2ZW50TG9naW5XaXRoVW52ZXJpZmllZEVtYWlsIFNldCB0byBgdHJ1ZWAgdG8gcHJldmVudCBhIHVzZXIgZnJvbSBsb2dnaW5nIGluIGlmIHRoZSBlbWFpbCBoYXMgbm90IHlldCBiZWVuIHZlcmlmaWVkIGFuZCBlbWFpbCB2ZXJpZmljYXRpb24gaXMgcmVxdWlyZWQuPGJyPjxicj5EZWZhdWx0IGlzIGBmYWxzZWAuPGJyPlJlcXVpcmVzIG9wdGlvbiBgdmVyaWZ5VXNlckVtYWlsczogdHJ1ZWAuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IHByZXZlbnRTaWdudXBXaXRoVW52ZXJpZmllZEVtYWlsIElmIHNldCB0byBgdHJ1ZWAgaXQgcHJldmVudHMgYSB1c2VyIGZyb20gc2lnbmluZyB1cCBpZiB0aGUgZW1haWwgaGFzIG5vdCB5ZXQgYmVlbiB2ZXJpZmllZCBhbmQgZW1haWwgdmVyaWZpY2F0aW9uIGlzIHJlcXVpcmVkLiBJbiB0aGF0IGNhc2UgdGhlIHNlcnZlciByZXNwb25kcyB0byB0aGUgc2lnbi11cCB3aXRoIEhUVFAgc3RhdHVzIDQwMCBhbmQgYSBQYXJzZSBFcnJvciAyMDUgYEVNQUlMX05PVF9GT1VORGAuIElmIHNldCB0byBgZmFsc2VgIHRoZSBzZXJ2ZXIgcmVzcG9uZHMgd2l0aCBIVFRQIHN0YXR1cyAyMDAsIGFuZCBjbGllbnQgU0RLcyByZXR1cm4gYW4gdW5hdXRoZW50aWNhdGVkIFBhcnNlIFVzZXIgd2l0aG91dCBzZXNzaW9uIHRva2VuLiBJbiB0aGF0IGNhc2Ugc3Vic2VxdWVudCByZXF1ZXN0cyBmYWlsIHVudGlsIHRoZSB1c2VyJ3MgZW1haWwgYWRkcmVzcyBpcyB2ZXJpZmllZC48YnI+PGJyPkRlZmF1bHQgaXMgYGZhbHNlYC48YnI+UmVxdWlyZXMgb3B0aW9uIGB2ZXJpZnlVc2VyRW1haWxzOiB0cnVlYC5cbiAqIEBwcm9wZXJ0eSB7UHJvdGVjdGVkRmllbGRzfSBwcm90ZWN0ZWRGaWVsZHMgUHJvdGVjdGVkIGZpZWxkcyB0aGF0IHNob3VsZCBiZSB0cmVhdGVkIHdpdGggZXh0cmEgc2VjdXJpdHkgd2hlbiBmZXRjaGluZyBkZXRhaWxzLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IHB1YmxpY1NlcnZlclVSTCBQdWJsaWMgVVJMIHRvIHlvdXIgcGFyc2Ugc2VydmVyIHdpdGggaHR0cDovLyBvciBodHRwczovLy5cbiAqIEBwcm9wZXJ0eSB7QW55fSBwdXNoIENvbmZpZ3VyYXRpb24gZm9yIHB1c2gsIGFzIHN0cmluZ2lmaWVkIEpTT04uIFNlZSBodHRwOi8vZG9jcy5wYXJzZXBsYXRmb3JtLm9yZy9wYXJzZS1zZXJ2ZXIvZ3VpZGUvI3B1c2gtbm90aWZpY2F0aW9uc1xuICogQHByb3BlcnR5IHtSYXRlTGltaXRPcHRpb25zW119IHJhdGVMaW1pdCBPcHRpb25zIHRvIGxpbWl0IHJlcGVhdGVkIHJlcXVlc3RzIHRvIFBhcnNlIFNlcnZlciBBUElzLiBUaGlzIGNhbiBiZSB1c2VkIHRvIHByb3RlY3Qgc2Vuc2l0aXZlIGVuZHBvaW50cyBzdWNoIGFzIGAvcmVxdWVzdFBhc3N3b3JkUmVzZXRgIGZyb20gYnJ1dGUtZm9yY2UgYXR0YWNrcyBvciBQYXJzZSBTZXJ2ZXIgYXMgYSB3aG9sZSBmcm9tIGRlbmlhbC1vZi1zZXJ2aWNlIChEb1MpIGF0dGFja3MuPGJyPjxicj7ihLnvuI8gTWluZCB0aGUgZm9sbG93aW5nIGxpbWl0YXRpb25zOjxicj4tIHJhdGUgbGltaXRzIGFwcGxpZWQgcGVyIElQIGFkZHJlc3M7IHRoaXMgbGltaXRzIHByb3RlY3Rpb24gYWdhaW5zdCBkaXN0cmlidXRlZCBkZW5pYWwtb2Ytc2VydmljZSAoRERvUykgYXR0YWNrcyB3aGVyZSBtYW55IHJlcXVlc3RzIGFyZSBjb21pbmcgZnJvbSB2YXJpb3VzIElQIGFkZHJlc3Nlczxicj4tIGlmIG11bHRpcGxlIFBhcnNlIFNlcnZlciBpbnN0YW5jZXMgYXJlIGJlaGluZCBhIGxvYWQgYmFsYW5jZXIgb3IgcmFuIGluIGEgY2x1c3RlciwgZWFjaCBpbnN0YW5jZSB3aWxsIGNhbGN1bGF0ZSBpdCdzIG93biByZXF1ZXN0IHJhdGVzLCBpbmRlcGVuZGVudCBmcm9tIG90aGVyIGluc3RhbmNlczsgdGhpcyBsaW1pdHMgdGhlIGFwcGxpY2FiaWxpdHkgb2YgdGhpcyBmZWF0dXJlIHdoZW4gdXNpbmcgYSBsb2FkIGJhbGFuY2VyIGFuZCBhbm90aGVyIHJhdGUgbGltaXRpbmcgc29sdXRpb24gdGhhdCB0YWtlcyByZXF1ZXN0cyBhY3Jvc3MgYWxsIGluc3RhbmNlcyBpbnRvIGFjY291bnQgbWF5IGJlIG1vcmUgc3VpdGFibGU8YnI+LSB0aGlzIGZlYXR1cmUgcHJvdmlkZXMgYmFzaWMgcHJvdGVjdGlvbiBhZ2FpbnN0IGRlbmlhbC1vZi1zZXJ2aWNlIGF0dGFja3MsIGJ1dCBhIG1vcmUgc29waGlzdGljYXRlZCBzb2x1dGlvbiB3b3JrcyBlYXJsaWVyIGluIHRoZSByZXF1ZXN0IGZsb3cgYW5kIHByZXZlbnRzIGEgbWFsaWNpb3VzIHJlcXVlc3RzIHRvIGV2ZW4gcmVhY2ggYSBzZXJ2ZXIgaW5zdGFuY2U7IGl0J3MgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGltcGxlbWVudCBhIHNvbHV0aW9uIGFjY29yZGluZyB0byBhcmNoaXRlY3R1cmUgYW5kIHVzZXIgY2FzZS5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSByZWFkT25seU1hc3RlcktleSBSZWFkLW9ubHkga2V5LCB3aGljaCBoYXMgdGhlIHNhbWUgY2FwYWJpbGl0aWVzIGFzIE1hc3RlcktleSB3aXRob3V0IHdyaXRlc1xuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gcmVxdWVzdENvbnRleHRNaWRkbGV3YXJlIE9wdGlvbnMgdG8gY3VzdG9taXplIHRoZSByZXF1ZXN0IGNvbnRleHQgdXNpbmcgaW52ZXJzaW9uIG9mIGNvbnRyb2wvZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gKiBAcHJvcGVydHkge1JlcXVlc3RLZXl3b3JkRGVueWxpc3RbXX0gcmVxdWVzdEtleXdvcmREZW55bGlzdCBBbiBhcnJheSBvZiBrZXlzIGFuZCB2YWx1ZXMgdGhhdCBhcmUgcHJvaGliaXRlZCBpbiBkYXRhYmFzZSByZWFkIGFuZCB3cml0ZSByZXF1ZXN0cyB0byBwcmV2ZW50IHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEl0IGlzIHBvc3NpYmxlIHRvIHNwZWNpZnkgb25seSBhIGtleSAoYHtcImtleVwiOlwiLi4uXCJ9YCksIG9ubHkgYSB2YWx1ZSAoYHtcInZhbHVlXCI6XCIuLi5cIn1gKSBvciBhIGtleS12YWx1ZSBwYWlyIChge1wia2V5XCI6XCIuLi5cIixcInZhbHVlXCI6XCIuLi5cIn1gKS4gVGhlIHNwZWNpZmljYXRpb24gY2FuIHVzZSB0aGUgZm9sbG93aW5nIHR5cGVzOiBgYm9vbGVhbmAsIGBudW1lcmljYCBvciBgc3RyaW5nYCwgd2hlcmUgYHN0cmluZ2Agd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhIHJlZ2V4IG5vdGF0aW9uLiBSZXF1ZXN0IGRhdGEgaXMgZGVlcC1zY2FubmVkIGZvciBtYXRjaGluZyBkZWZpbml0aW9ucyB0byBkZXRlY3QgYWxzbyBhbnkgbmVzdGVkIG9jY3VycmVuY2VzLiBEZWZhdWx0cyBhcmUgcGF0dGVybnMgdGhhdCBhcmUgbGlrZWx5IHRvIGJlIHVzZWQgaW4gbWFsaWNpb3VzIHJlcXVlc3RzLiBTZXR0aW5nIHRoaXMgb3B0aW9uIHdpbGwgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcGF0dGVybnMuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gcmVzdEFQSUtleSBLZXkgZm9yIFJFU1QgY2FsbHNcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gcmV2b2tlU2Vzc2lvbk9uUGFzc3dvcmRSZXNldCBXaGVuIGEgdXNlciBjaGFuZ2VzIHRoZWlyIHBhc3N3b3JkLCBlaXRoZXIgdGhyb3VnaCB0aGUgcmVzZXQgcGFzc3dvcmQgZW1haWwgb3Igd2hpbGUgbG9nZ2VkIGluLCBhbGwgc2Vzc2lvbnMgYXJlIHJldm9rZWQgaWYgdGhpcyBpcyB0cnVlLiBTZXQgdG8gZmFsc2UgaWYgeW91IGRvbid0IHdhbnQgdG8gcmV2b2tlIHNlc3Npb25zLlxuICogQHByb3BlcnR5IHtCb29sZWFufSBzY2hlZHVsZWRQdXNoIENvbmZpZ3VyYXRpb24gZm9yIHB1c2ggc2NoZWR1bGluZywgZGVmYXVsdHMgdG8gZmFsc2UuXG4gKiBAcHJvcGVydHkge1NjaGVtYU9wdGlvbnN9IHNjaGVtYSBEZWZpbmVkIHNjaGVtYVxuICogQHByb3BlcnR5IHtTZWN1cml0eU9wdGlvbnN9IHNlY3VyaXR5IFRoZSBzZWN1cml0eSBvcHRpb25zIHRvIGlkZW50aWZ5IGFuZCByZXBvcnQgd2VhayBzZWN1cml0eSBzZXR0aW5ncy5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gc2VuZFVzZXJFbWFpbFZlcmlmaWNhdGlvbiBTZXQgdG8gYGZhbHNlYCB0byBwcmV2ZW50IHNlbmRpbmcgb2YgdmVyaWZpY2F0aW9uIGVtYWlsLiBTdXBwb3J0cyBhIGZ1bmN0aW9uIHdpdGggYSByZXR1cm4gdmFsdWUgb2YgYHRydWVgIG9yIGBmYWxzZWAgZm9yIGNvbmRpdGlvbmFsIGVtYWlsIHNlbmRpbmcuPGJyPjxicj5EZWZhdWx0IGlzIGB0cnVlYC48YnI+XG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBzZXJ2ZXJDbG9zZUNvbXBsZXRlIENhbGxiYWNrIHdoZW4gc2VydmVyIGhhcyBjbG9zZWRcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBzZXJ2ZXJVUkwgVVJMIHRvIHlvdXIgcGFyc2Ugc2VydmVyIHdpdGggaHR0cDovLyBvciBodHRwczovLy5cbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBzZXNzaW9uTGVuZ3RoIFNlc3Npb24gZHVyYXRpb24sIGluIHNlY29uZHMsIGRlZmF1bHRzIHRvIDEgeWVhclxuICogQHByb3BlcnR5IHtCb29sZWFufSBzaWxlbnQgRGlzYWJsZXMgY29uc29sZSBvdXRwdXRcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gc3RhcnRMaXZlUXVlcnlTZXJ2ZXIgU3RhcnRzIHRoZSBsaXZlUXVlcnkgc2VydmVyXG4gKiBAcHJvcGVydHkge0FueX0gdHJ1c3RQcm94eSBUaGUgdHJ1c3QgcHJveHkgc2V0dGluZ3MuIEl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBzZXR1cCBvZiB0aGUgcmV2ZXJzZSBwcm94eSwgc2luY2UgdGhpcyBzZXR0aW5nIHdpbGwgdHJ1c3QgdmFsdWVzIHByb3ZpZGVkIGluIHRoZSBQYXJzZSBTZXJ2ZXIgQVBJIHJlcXVlc3QuIFNlZSB0aGUgPGEgaHJlZj1cImh0dHBzOi8vZXhwcmVzc2pzLmNvbS9lbi9ndWlkZS9iZWhpbmQtcHJveGllcy5odG1sXCI+ZXhwcmVzcyB0cnVzdCBwcm94eSBzZXR0aW5nczwvYT4gZG9jdW1lbnRhdGlvbi4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nW119IHVzZXJTZW5zaXRpdmVGaWVsZHMgUGVyc29uYWxseSBpZGVudGlmaWFibGUgaW5mb3JtYXRpb24gZmllbGRzIGluIHRoZSB1c2VyIHRhYmxlIHRoZSBzaG91bGQgYmUgcmVtb3ZlZCBmb3Igbm9uLWF1dGhvcml6ZWQgdXNlcnMuIERlcHJlY2F0ZWQgQHNlZSBwcm90ZWN0ZWRGaWVsZHNcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gdmVyYm9zZSBTZXQgdGhlIGxvZ2dpbmcgdG8gdmVyYm9zZVxuICogQHByb3BlcnR5IHtCb29sZWFufSB2ZXJpZnlVc2VyRW1haWxzIFNldCB0byBgdHJ1ZWAgdG8gcmVxdWlyZSB1c2VycyB0byB2ZXJpZnkgdGhlaXIgZW1haWwgYWRkcmVzcyB0byBjb21wbGV0ZSB0aGUgc2lnbi11cCBwcm9jZXNzLiBTdXBwb3J0cyBhIGZ1bmN0aW9uIHdpdGggYSByZXR1cm4gdmFsdWUgb2YgYHRydWVgIG9yIGBmYWxzZWAgZm9yIGNvbmRpdGlvbmFsIHZlcmlmaWNhdGlvbi48YnI+PGJyPkRlZmF1bHQgaXMgYGZhbHNlYC5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB3ZWJob29rS2V5IEtleSBzZW50IHdpdGggb3V0Z29pbmcgd2ViaG9vayBjYWxsc1xuICovXG5cbi8qKlxuICogQGludGVyZmFjZSBSYXRlTGltaXRPcHRpb25zXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZXJyb3JSZXNwb25zZU1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UgdGhhdCBzaG91bGQgYmUgcmV0dXJuZWQgaW4gdGhlIGJvZHkgb2YgdGhlIEhUVFAgNDI5IHJlc3BvbnNlIHdoZW4gdGhlIHJhdGUgbGltaXQgaXMgaGl0LiBEZWZhdWx0IGlzIGBUb28gbWFueSByZXF1ZXN0cy5gLlxuICogQHByb3BlcnR5IHtCb29sZWFufSBpbmNsdWRlSW50ZXJuYWxSZXF1ZXN0cyBPcHRpb25hbCwgaWYgYHRydWVgIHRoZSByYXRlIGxpbWl0IHdpbGwgYWxzbyBhcHBseSB0byByZXF1ZXN0cyB0aGF0IGFyZSBtYWRlIGluIGJ5IENsb3VkIENvZGUsIGRlZmF1bHQgaXMgYGZhbHNlYC4gTm90ZSB0aGF0IGEgcHVibGljIENsb3VkIENvZGUgZnVuY3Rpb24gdGhhdCB0cmlnZ2VycyBpbnRlcm5hbCByZXF1ZXN0cyBtYXkgY2lyY3VtdmVudCByYXRlIGxpbWl0aW5nIGFuZCBiZSB2dWxuZXJhYmxlIHRvIGF0dGFja3MuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGluY2x1ZGVNYXN0ZXJLZXkgT3B0aW9uYWwsIGlmIGB0cnVlYCB0aGUgcmF0ZSBsaW1pdCB3aWxsIGFsc28gYXBwbHkgdG8gcmVxdWVzdHMgdXNpbmcgdGhlIGBtYXN0ZXJLZXlgLCBkZWZhdWx0IGlzIGBmYWxzZWAuIE5vdGUgdGhhdCBhIHB1YmxpYyBDbG91ZCBDb2RlIGZ1bmN0aW9uIHRoYXQgdHJpZ2dlcnMgaW50ZXJuYWwgcmVxdWVzdHMgdXNpbmcgdGhlIGBtYXN0ZXJLZXlgIG1heSBjaXJjdW12ZW50IHJhdGUgbGltaXRpbmcgYW5kIGJlIHZ1bG5lcmFibGUgdG8gYXR0YWNrcy5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSByZWRpc1VybCBPcHRpb25hbCwgdGhlIFVSTCBvZiB0aGUgUmVkaXMgc2VydmVyIHRvIHN0b3JlIHJhdGUgbGltaXQgZGF0YS4gVGhpcyBhbGxvd3MgdG8gcmF0ZSBsaW1pdCByZXF1ZXN0cyBmb3IgbXVsdGlwbGUgc2VydmVycyBieSBjYWxjdWxhdGluZyB0aGUgc3VtIG9mIGFsbCByZXF1ZXN0cyBhY3Jvc3MgYWxsIHNlcnZlcnMuIFRoaXMgaXMgdXNlZnVsIGlmIG11bHRpcGxlIHNlcnZlcnMgYXJlIHByb2Nlc3NpbmcgcmVxdWVzdHMgYmVoaW5kIGEgbG9hZCBiYWxhbmNlci4gRm9yIGV4YW1wbGUsIHRoZSBsaW1pdCBvZiAxMCByZXF1ZXN0cyBpcyByZWFjaGVkIGlmIGVhY2ggb2YgMiBzZXJ2ZXJzIHByb2Nlc3NlZCA1IHJlcXVlc3RzLlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IHJlcXVlc3RDb3VudCBUaGUgbnVtYmVyIG9mIHJlcXVlc3RzIHRoYXQgY2FuIGJlIG1hZGUgcGVyIElQIGFkZHJlc3Mgd2l0aGluIHRoZSB0aW1lIHdpbmRvdyBzZXQgaW4gYHJlcXVlc3RUaW1lV2luZG93YCBiZWZvcmUgdGhlIHJhdGUgbGltaXQgaXMgYXBwbGllZC5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nW119IHJlcXVlc3RNZXRob2RzIE9wdGlvbmFsLCB0aGUgSFRUUCByZXF1ZXN0IG1ldGhvZHMgdG8gd2hpY2ggdGhlIHJhdGUgbGltaXQgc2hvdWxkIGJlIGFwcGxpZWQsIGRlZmF1bHQgaXMgYWxsIG1ldGhvZHMuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gcmVxdWVzdFBhdGggVGhlIHBhdGggb2YgdGhlIEFQSSByb3V0ZSB0byBiZSByYXRlIGxpbWl0ZWQuIFJvdXRlIHBhdGhzLCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgcmVxdWVzdCBtZXRob2QsIGRlZmluZSB0aGUgZW5kcG9pbnRzIGF0IHdoaWNoIHJlcXVlc3RzIGNhbiBiZSBtYWRlLiBSb3V0ZSBwYXRocyBjYW4gYmUgc3RyaW5ncywgc3RyaW5nIHBhdHRlcm5zLCBvciByZWd1bGFyIGV4cHJlc3Npb24uIFNlZTogaHR0cHM6Ly9leHByZXNzanMuY29tL2VuL2d1aWRlL3JvdXRpbmcuaHRtbFxuICogQHByb3BlcnR5IHtOdW1iZXJ9IHJlcXVlc3RUaW1lV2luZG93IFRoZSB3aW5kb3cgb2YgdGltZSBpbiBtaWxsaXNlY29uZHMgd2l0aGluIHdoaWNoIHRoZSBudW1iZXIgb2YgcmVxdWVzdHMgc2V0IGluIGByZXF1ZXN0Q291bnRgIGNhbiBiZSBtYWRlIGJlZm9yZSB0aGUgcmF0ZSBsaW1pdCBpcyBhcHBsaWVkLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IHpvbmUgVGhlIHR5cGUgb2YgcmF0ZSBsaW1pdCB0byBhcHBseS4gVGhlIGZvbGxvd2luZyB0eXBlcyBhcmUgc3VwcG9ydGVkOjxicj48YnI+LSBgZ2xvYmFsYDogcmF0ZSBsaW1pdCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIHJlcXVlc3RzIG1hZGUgYnkgYWxsIHVzZXJzIDxicj4tIGBpcGA6IHJhdGUgbGltaXQgYmFzZWQgb24gdGhlIElQIGFkZHJlc3Mgb2YgdGhlIHJlcXVlc3QgPGJyPi0gYHVzZXJgOiByYXRlIGxpbWl0IGJhc2VkIG9uIHRoZSB1c2VyIElEIG9mIHRoZSByZXF1ZXN0IDxicj4tIGBzZXNzaW9uYDogcmF0ZSBsaW1pdCBiYXNlZCBvbiB0aGUgc2Vzc2lvbiB0b2tlbiBvZiB0aGUgcmVxdWVzdCA8YnI+PGJyPjxicj46ZGVmYXVsdDogJ2lwJ1xuICovXG5cbi8qKlxuICogQGludGVyZmFjZSBTZWN1cml0eU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Q2hlY2tHcm91cFtdfSBjaGVja0dyb3VwcyBUaGUgc2VjdXJpdHkgY2hlY2sgZ3JvdXBzIHRvIHJ1bi4gVGhpcyBhbGxvd3MgdG8gYWRkIGN1c3RvbSBzZWN1cml0eSBjaGVja3Mgb3Igb3ZlcnJpZGUgZXhpc3Rpbmcgb25lcy4gRGVmYXVsdCBhcmUgdGhlIGdyb3VwcyBkZWZpbmVkIGluIGBDaGVja0dyb3Vwcy5qc2AuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGVuYWJsZUNoZWNrIElzIHRydWUgaWYgUGFyc2UgU2VydmVyIHNob3VsZCBjaGVjayBmb3Igd2VhayBzZWN1cml0eSBzZXR0aW5ncy5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZW5hYmxlQ2hlY2tMb2cgSXMgdHJ1ZSBpZiB0aGUgc2VjdXJpdHkgY2hlY2sgcmVwb3J0IHNob3VsZCBiZSB3cml0dGVuIHRvIGxvZ3MuIFRoaXMgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCB0ZW1wb3JhcmlseSB0byBub3QgZXhwb3NlIHdlYWsgc2VjdXJpdHkgc2V0dGluZ3MgaW4gbG9ncy5cbiAqL1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgUGFnZXNPcHRpb25zXG4gKiBAcHJvcGVydHkge1BhZ2VzUm91dGVbXX0gY3VzdG9tUm91dGVzIFRoZSBjdXN0b20gcm91dGVzLlxuICogQHByb3BlcnR5IHtQYWdlc0N1c3RvbVVybHNPcHRpb25zfSBjdXN0b21VcmxzIFRoZSBVUkxzIHRvIHRoZSBjdXN0b20gcGFnZXMuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGVuYWJsZUxvY2FsaXphdGlvbiBJcyB0cnVlIGlmIHBhZ2VzIHNob3VsZCBiZSBsb2NhbGl6ZWQ7IHRoaXMgaGFzIG5vIGVmZmVjdCBvbiBjdXN0b20gcGFnZSByZWRpcmVjdHMuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGVuYWJsZVJvdXRlciBJcyB0cnVlIGlmIHRoZSBwYWdlcyByb3V0ZXIgc2hvdWxkIGJlIGVuYWJsZWQ7IHRoaXMgaXMgcmVxdWlyZWQgZm9yIGFueSBvZiB0aGUgcGFnZXMgb3B0aW9ucyB0byB0YWtlIGVmZmVjdC5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZm9yY2VSZWRpcmVjdCBJcyB0cnVlIGlmIHJlc3BvbnNlcyBzaG91bGQgYWx3YXlzIGJlIHJlZGlyZWN0cyBhbmQgbmV2ZXIgY29udGVudCwgZmFsc2UgaWYgdGhlIHJlc3BvbnNlIHR5cGUgc2hvdWxkIGRlcGVuZCBvbiB0aGUgcmVxdWVzdCB0eXBlIChHRVQgcmVxdWVzdCAtPiBjb250ZW50IHJlc3BvbnNlOyBQT1NUIHJlcXVlc3QgLT4gcmVkaXJlY3QgcmVzcG9uc2UpLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IGxvY2FsaXphdGlvbkZhbGxiYWNrTG9jYWxlIFRoZSBmYWxsYmFjayBsb2NhbGUgZm9yIGxvY2FsaXphdGlvbiBpZiBubyBtYXRjaGluZyB0cmFuc2xhdGlvbiBpcyBwcm92aWRlZCBmb3IgdGhlIGdpdmVuIGxvY2FsZS4gVGhpcyBpcyBvbmx5IHJlbGV2YW50IHdoZW4gcHJvdmlkaW5nIHRyYW5zbGF0aW9uIHJlc291cmNlcyB2aWEgSlNPTiBmaWxlLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IGxvY2FsaXphdGlvbkpzb25QYXRoIFRoZSBwYXRoIHRvIHRoZSBKU09OIGZpbGUgZm9yIGxvY2FsaXphdGlvbjsgdGhlIHRyYW5zbGF0aW9ucyB3aWxsIGJlIHVzZWQgdG8gZmlsbCB0ZW1wbGF0ZSBwbGFjZWhvbGRlcnMgYWNjb3JkaW5nIHRvIHRoZSBsb2NhbGUuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gcGFnZXNFbmRwb2ludCBUaGUgQVBJIGVuZHBvaW50IGZvciB0aGUgcGFnZXMuIERlZmF1bHQgaXMgJ2FwcHMnLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IHBhZ2VzUGF0aCBUaGUgcGF0aCB0byB0aGUgcGFnZXMgZGlyZWN0b3J5OyB0aGlzIGFsc28gZGVmaW5lcyB3aGVyZSB0aGUgc3RhdGljIGVuZHBvaW50ICcvYXBwcycgcG9pbnRzIHRvLiBEZWZhdWx0IGlzIHRoZSAnLi9wdWJsaWMvJyBkaXJlY3RvcnkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gcGxhY2Vob2xkZXJzIFRoZSBwbGFjZWhvbGRlciBrZXlzIGFuZCB2YWx1ZXMgd2hpY2ggd2lsbCBiZSBmaWxsZWQgaW4gcGFnZXM7IHRoaXMgY2FuIGJlIGEgc2ltcGxlIG9iamVjdCBvciBhIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICovXG5cbi8qKlxuICogQGludGVyZmFjZSBQYWdlc1JvdXRlXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBoYW5kbGVyIFRoZSByb3V0ZSBoYW5kbGVyIHRoYXQgaXMgYW4gYXN5bmMgZnVuY3Rpb24uXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbWV0aG9kIFRoZSByb3V0ZSBtZXRob2QsIGUuZy4gJ0dFVCcgb3IgJ1BPU1QnLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IHBhdGggVGhlIHJvdXRlIHBhdGguXG4gKi9cblxuLyoqXG4gKiBAaW50ZXJmYWNlIFBhZ2VzQ3VzdG9tVXJsc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBlbWFpbFZlcmlmaWNhdGlvbkxpbmtFeHBpcmVkIFRoZSBVUkwgdG8gdGhlIGN1c3RvbSBwYWdlIGZvciBlbWFpbCB2ZXJpZmljYXRpb24gLT4gbGluayBleHBpcmVkLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IGVtYWlsVmVyaWZpY2F0aW9uTGlua0ludmFsaWQgVGhlIFVSTCB0byB0aGUgY3VzdG9tIHBhZ2UgZm9yIGVtYWlsIHZlcmlmaWNhdGlvbiAtPiBsaW5rIGludmFsaWQuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZW1haWxWZXJpZmljYXRpb25TZW5kRmFpbCBUaGUgVVJMIHRvIHRoZSBjdXN0b20gcGFnZSBmb3IgZW1haWwgdmVyaWZpY2F0aW9uIC0+IGxpbmsgc2VuZCBmYWlsLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IGVtYWlsVmVyaWZpY2F0aW9uU2VuZFN1Y2Nlc3MgVGhlIFVSTCB0byB0aGUgY3VzdG9tIHBhZ2UgZm9yIGVtYWlsIHZlcmlmaWNhdGlvbiAtPiByZXNlbmQgbGluayAtPiBzdWNjZXNzLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IGVtYWlsVmVyaWZpY2F0aW9uU3VjY2VzcyBUaGUgVVJMIHRvIHRoZSBjdXN0b20gcGFnZSBmb3IgZW1haWwgdmVyaWZpY2F0aW9uIC0+IHN1Y2Nlc3MuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gcGFzc3dvcmRSZXNldCBUaGUgVVJMIHRvIHRoZSBjdXN0b20gcGFnZSBmb3IgcGFzc3dvcmQgcmVzZXQuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gcGFzc3dvcmRSZXNldExpbmtJbnZhbGlkIFRoZSBVUkwgdG8gdGhlIGN1c3RvbSBwYWdlIGZvciBwYXNzd29yZCByZXNldCAtPiBsaW5rIGludmFsaWQuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gcGFzc3dvcmRSZXNldFN1Y2Nlc3MgVGhlIFVSTCB0byB0aGUgY3VzdG9tIHBhZ2UgZm9yIHBhc3N3b3JkIHJlc2V0IC0+IHN1Y2Nlc3MuXG4gKi9cblxuLyoqXG4gKiBAaW50ZXJmYWNlIEN1c3RvbVBhZ2VzT3B0aW9uc1xuICogQHByb3BlcnR5IHtTdHJpbmd9IGNob29zZVBhc3N3b3JkIGNob29zZSBwYXNzd29yZCBwYWdlIHBhdGhcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBleHBpcmVkVmVyaWZpY2F0aW9uTGluayBleHBpcmVkIHZlcmlmaWNhdGlvbiBsaW5rIHBhZ2UgcGF0aFxuICogQHByb3BlcnR5IHtTdHJpbmd9IGludmFsaWRMaW5rIGludmFsaWQgbGluayBwYWdlIHBhdGhcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBpbnZhbGlkUGFzc3dvcmRSZXNldExpbmsgaW52YWxpZCBwYXNzd29yZCByZXNldCBsaW5rIHBhZ2UgcGF0aFxuICogQHByb3BlcnR5IHtTdHJpbmd9IGludmFsaWRWZXJpZmljYXRpb25MaW5rIGludmFsaWQgdmVyaWZpY2F0aW9uIGxpbmsgcGFnZSBwYXRoXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbGlua1NlbmRGYWlsIHZlcmlmaWNhdGlvbiBsaW5rIHNlbmQgZmFpbCBwYWdlIHBhdGhcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBsaW5rU2VuZFN1Y2Nlc3MgdmVyaWZpY2F0aW9uIGxpbmsgc2VuZCBzdWNjZXNzIHBhZ2UgcGF0aFxuICogQHByb3BlcnR5IHtTdHJpbmd9IHBhcnNlRnJhbWVVUkwgZm9yIG1hc2tpbmcgdXNlci1mYWNpbmcgcGFnZXNcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBwYXNzd29yZFJlc2V0U3VjY2VzcyBwYXNzd29yZCByZXNldCBzdWNjZXNzIHBhZ2UgcGF0aFxuICogQHByb3BlcnR5IHtTdHJpbmd9IHZlcmlmeUVtYWlsU3VjY2VzcyB2ZXJpZnkgZW1haWwgc3VjY2VzcyBwYWdlIHBhdGhcbiAqL1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgTGl2ZVF1ZXJ5T3B0aW9uc1xuICogQHByb3BlcnR5IHtTdHJpbmdbXX0gY2xhc3NOYW1lcyBwYXJzZS1zZXJ2ZXIncyBMaXZlUXVlcnkgY2xhc3NOYW1lc1xuICogQHByb3BlcnR5IHtBZGFwdGVyPFB1YlN1YkFkYXB0ZXI+fSBwdWJTdWJBZGFwdGVyIExpdmVRdWVyeSBwdWJzdWIgYWRhcHRlclxuICogQHByb3BlcnR5IHtBbnl9IHJlZGlzT3B0aW9ucyBwYXJzZS1zZXJ2ZXIncyBMaXZlUXVlcnkgcmVkaXNPcHRpb25zXG4gKiBAcHJvcGVydHkge1N0cmluZ30gcmVkaXNVUkwgcGFyc2Utc2VydmVyJ3MgTGl2ZVF1ZXJ5IHJlZGlzVVJMXG4gKiBAcHJvcGVydHkge0FkYXB0ZXI8V1NTQWRhcHRlcj59IHdzc0FkYXB0ZXIgQWRhcHRlciBtb2R1bGUgZm9yIHRoZSBXZWJTb2NrZXRTZXJ2ZXJcbiAqL1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgTGl2ZVF1ZXJ5U2VydmVyT3B0aW9uc1xuICogQHByb3BlcnR5IHtTdHJpbmd9IGFwcElkIFRoaXMgc3RyaW5nIHNob3VsZCBtYXRjaCB0aGUgYXBwSWQgaW4gdXNlIGJ5IHlvdXIgUGFyc2UgU2VydmVyLiBJZiB5b3UgZGVwbG95IHRoZSBMaXZlUXVlcnkgc2VydmVyIGFsb25nc2lkZSBQYXJzZSBTZXJ2ZXIsIHRoZSBMaXZlUXVlcnkgc2VydmVyIHdpbGwgdHJ5IHRvIHVzZSB0aGUgc2FtZSBhcHBJZC5cbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBjYWNoZVRpbWVvdXQgTnVtYmVyIGluIG1pbGxpc2Vjb25kcy4gV2hlbiBjbGllbnRzIHByb3ZpZGUgdGhlIHNlc3Npb25Ub2tlbiB0byB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciwgdGhlIExpdmVRdWVyeSBzZXJ2ZXIgd2lsbCB0cnkgdG8gZmV0Y2ggaXRzIFBhcnNlVXNlcidzIG9iamVjdElkIGZyb20gcGFyc2Ugc2VydmVyIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuIFRoZSB2YWx1ZSBkZWZpbmVzIHRoZSBkdXJhdGlvbiBvZiB0aGUgY2FjaGUuIENoZWNrIHRoZSBmb2xsb3dpbmcgU2VjdXJpdHkgc2VjdGlvbiBhbmQgb3VyIHByb3RvY29sIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMsIGRlZmF1bHRzIHRvIDUgKiAxMDAwIG1zICg1IHNlY29uZHMpLlxuICogQHByb3BlcnR5IHtBbnl9IGtleVBhaXJzIEEgSlNPTiBvYmplY3QgdGhhdCBzZXJ2ZXMgYXMgYSB3aGl0ZWxpc3Qgb2Yga2V5cy4gSXQgaXMgdXNlZCBmb3IgdmFsaWRhdGluZyBjbGllbnRzIHdoZW4gdGhleSB0cnkgdG8gY29ubmVjdCB0byB0aGUgTGl2ZVF1ZXJ5IHNlcnZlci4gQ2hlY2sgdGhlIGZvbGxvd2luZyBTZWN1cml0eSBzZWN0aW9uIGFuZCBvdXIgcHJvdG9jb2wgc3BlY2lmaWNhdGlvbiBmb3IgZGV0YWlscy5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBsb2dMZXZlbCBUaGlzIHN0cmluZyBkZWZpbmVzIHRoZSBsb2cgbGV2ZWwgb2YgdGhlIExpdmVRdWVyeSBzZXJ2ZXIuIFdlIHN1cHBvcnQgVkVSQk9TRSwgSU5GTywgRVJST1IsIE5PTkUsIGRlZmF1bHRzIHRvIElORk8uXG4gKiBAcHJvcGVydHkge1N0cmluZ30gbWFzdGVyS2V5IFRoaXMgc3RyaW5nIHNob3VsZCBtYXRjaCB0aGUgbWFzdGVyS2V5IGluIHVzZSBieSB5b3VyIFBhcnNlIFNlcnZlci4gSWYgeW91IGRlcGxveSB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciBhbG9uZ3NpZGUgUGFyc2UgU2VydmVyLCB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciB3aWxsIHRyeSB0byB1c2UgdGhlIHNhbWUgbWFzdGVyS2V5LlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IHBvcnQgVGhlIHBvcnQgdG8gcnVuIHRoZSBMaXZlUXVlcnkgc2VydmVyLCBkZWZhdWx0cyB0byAxMzM3LlxuICogQHByb3BlcnR5IHtBZGFwdGVyPFB1YlN1YkFkYXB0ZXI+fSBwdWJTdWJBZGFwdGVyIExpdmVRdWVyeSBwdWJzdWIgYWRhcHRlclxuICogQHByb3BlcnR5IHtBbnl9IHJlZGlzT3B0aW9ucyBwYXJzZS1zZXJ2ZXIncyBMaXZlUXVlcnkgcmVkaXNPcHRpb25zXG4gKiBAcHJvcGVydHkge1N0cmluZ30gcmVkaXNVUkwgcGFyc2Utc2VydmVyJ3MgTGl2ZVF1ZXJ5IHJlZGlzVVJMXG4gKiBAcHJvcGVydHkge1N0cmluZ30gc2VydmVyVVJMIFRoaXMgc3RyaW5nIHNob3VsZCBtYXRjaCB0aGUgc2VydmVyVVJMIGluIHVzZSBieSB5b3VyIFBhcnNlIFNlcnZlci4gSWYgeW91IGRlcGxveSB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciBhbG9uZ3NpZGUgUGFyc2UgU2VydmVyLCB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciB3aWxsIHRyeSB0byB1c2UgdGhlIHNhbWUgc2VydmVyVVJMLlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IHdlYnNvY2tldFRpbWVvdXQgTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHBpbmcvcG9uZyBmcmFtZXMuIFRoZSBXZWJTb2NrZXQgc2VydmVyIHNlbmRzIHBpbmcvcG9uZyBmcmFtZXMgdG8gdGhlIGNsaWVudHMgdG8ga2VlcCB0aGUgV2ViU29ja2V0IGFsaXZlLiBUaGlzIHZhbHVlIGRlZmluZXMgdGhlIGludGVydmFsIG9mIHRoZSBwaW5nL3BvbmcgZnJhbWUgZnJvbSB0aGUgc2VydmVyIHRvIGNsaWVudHMsIGRlZmF1bHRzIHRvIDEwICogMTAwMCBtcyAoMTAgcykuXG4gKiBAcHJvcGVydHkge0FkYXB0ZXI8V1NTQWRhcHRlcj59IHdzc0FkYXB0ZXIgQWRhcHRlciBtb2R1bGUgZm9yIHRoZSBXZWJTb2NrZXRTZXJ2ZXJcbiAqL1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgSWRlbXBvdGVuY3lPcHRpb25zXG4gKiBAcHJvcGVydHkge1N0cmluZ1tdfSBwYXRocyBBbiBhcnJheSBvZiBwYXRocyBmb3Igd2hpY2ggdGhlIGZlYXR1cmUgc2hvdWxkIGJlIGVuYWJsZWQuIFRoZSBtb3VudCBwYXRoIG11c3Qgbm90IGJlIGluY2x1ZGVkLCBmb3IgZXhhbXBsZSBpbnN0ZWFkIG9mIGAvcGFyc2UvZnVuY3Rpb25zL215RnVuY3Rpb25gIHNwZWNpZml5IGBmdW5jdGlvbnMvbXlGdW5jdGlvbmAuIFRoZSBlbnRyaWVzIGFyZSBpbnRlcnByZXRlZCBhcyByZWd1bGFyIGV4cHJlc3Npb24sIGZvciBleGFtcGxlIGBmdW5jdGlvbnMvLipgIG1hdGNoZXMgYWxsIGZ1bmN0aW9ucywgYGpvYnMvLipgIG1hdGNoZXMgYWxsIGpvYnMsIGBjbGFzc2VzLy4qYCBtYXRjaGVzIGFsbCBjbGFzc2VzLCBgLipgIG1hdGNoZXMgYWxsIHBhdGhzLlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IHR0bCBUaGUgZHVyYXRpb24gaW4gc2Vjb25kcyBhZnRlciB3aGljaCBhIHJlcXVlc3QgcmVjb3JkIGlzIGRpc2NhcmRlZCBmcm9tIHRoZSBkYXRhYmFzZSwgZGVmYXVsdHMgdG8gMzAwcy5cbiAqL1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgQWNjb3VudExvY2tvdXRPcHRpb25zXG4gKiBAcHJvcGVydHkge051bWJlcn0gZHVyYXRpb24gU2V0IHRoZSBkdXJhdGlvbiBpbiBtaW51dGVzIHRoYXQgYSBsb2NrZWQtb3V0IGFjY291bnQgcmVtYWlucyBsb2NrZWQgb3V0IGJlZm9yZSBhdXRvbWF0aWNhbGx5IGJlY29taW5nIHVubG9ja2VkLjxicj48YnI+VmFsaWQgdmFsdWVzIGFyZSBncmVhdGVyIHRoYW4gYDBgIGFuZCBsZXNzIHRoYW4gYDEwMDAwMGAuXG4gKiBAcHJvcGVydHkge051bWJlcn0gdGhyZXNob2xkIFNldCB0aGUgbnVtYmVyIG9mIGZhaWxlZCBzaWduLWluIGF0dGVtcHRzIHRoYXQgd2lsbCBjYXVzZSBhIHVzZXIgYWNjb3VudCB0byBiZSBsb2NrZWQuIElmIHRoZSBhY2NvdW50IGlzIGxvY2tlZC4gVGhlIGFjY291bnQgd2lsbCB1bmxvY2sgYWZ0ZXIgdGhlIGR1cmF0aW9uIHNldCBpbiB0aGUgYGR1cmF0aW9uYCBvcHRpb24gaGFzIHBhc3NlZCBhbmQgbm8gZnVydGhlciBsb2dpbiBhdHRlbXB0cyBoYXZlIGJlZW4gbWFkZS48YnI+PGJyPlZhbGlkIHZhbHVlcyBhcmUgZ3JlYXRlciB0aGFuIGAwYCBhbmQgbGVzcyB0aGFuIGAxMDAwYC5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gdW5sb2NrT25QYXNzd29yZFJlc2V0IFNldCB0byBgdHJ1ZWAgIGlmIHRoZSBhY2NvdW50IHNob3VsZCBiZSB1bmxvY2tlZCBhZnRlciBhIHN1Y2Nlc3NmdWwgcGFzc3dvcmQgcmVzZXQuPGJyPjxicj5EZWZhdWx0IGlzIGBmYWxzZWAuPGJyPlJlcXVpcmVzIG9wdGlvbnMgYGR1cmF0aW9uYCBhbmQgYHRocmVzaG9sZGAgdG8gYmUgc2V0LlxuICovXG5cbi8qKlxuICogQGludGVyZmFjZSBQYXNzd29yZFBvbGljeU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZG9Ob3RBbGxvd1VzZXJuYW1lIFNldCB0byBgdHJ1ZWAgdG8gZGlzYWxsb3cgdGhlIHVzZXJuYW1lIGFzIHBhcnQgb2YgdGhlIHBhc3N3b3JkLjxicj48YnI+RGVmYXVsdCBpcyBgZmFsc2VgLlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IG1heFBhc3N3b3JkQWdlIFNldCB0aGUgbnVtYmVyIG9mIGRheXMgYWZ0ZXIgd2hpY2ggYSBwYXNzd29yZCBleHBpcmVzLiBMb2dpbiBhdHRlbXB0cyBmYWlsIGlmIHRoZSB1c2VyIGRvZXMgbm90IHJlc2V0IHRoZSBwYXNzd29yZCBiZWZvcmUgZXhwaXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBtYXhQYXNzd29yZEhpc3RvcnkgU2V0IHRoZSBudW1iZXIgb2YgcHJldmlvdXMgcGFzc3dvcmQgdGhhdCB3aWxsIG5vdCBiZSBhbGxvd2VkIHRvIGJlIHNldCBhcyBuZXcgcGFzc3dvcmQuIElmIHRoZSBvcHRpb24gaXMgbm90IHNldCBvciBzZXQgdG8gYDBgLCBubyBwcmV2aW91cyBwYXNzd29yZHMgd2lsbCBiZSBjb25zaWRlcmVkLjxicj48YnI+VmFsaWQgdmFsdWVzIGFyZSA+PSBgMGAgYW5kIDw9IGAyMGAuPGJyPkRlZmF1bHQgaXMgYDBgLlxuICogQHByb3BlcnR5IHtCb29sZWFufSByZXNldFBhc3N3b3JkU3VjY2Vzc09uSW52YWxpZEVtYWlsIFNldCB0byBgdHJ1ZWAgaWYgYSByZXF1ZXN0IHRvIHJlc2V0IHRoZSBwYXNzd29yZCBzaG91bGQgcmV0dXJuIGEgc3VjY2VzcyByZXNwb25zZSBldmVuIGlmIHRoZSBwcm92aWRlZCBlbWFpbCBhZGRyZXNzIGlzIGludmFsaWQsIG9yIGBmYWxzZWAgaWYgdGhlIHJlcXVlc3Qgc2hvdWxkIHJldHVybiBhbiBlcnJvciByZXNwb25zZSBpZiB0aGUgZW1haWwgYWRkcmVzcyBpcyBpbnZhbGlkLjxicj48YnI+RGVmYXVsdCBpcyBgdHJ1ZWAuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IHJlc2V0VG9rZW5SZXVzZUlmVmFsaWQgU2V0IHRvIGB0cnVlYCBpZiBhIHBhc3N3b3JkIHJlc2V0IHRva2VuIHNob3VsZCBiZSByZXVzZWQgaW4gY2FzZSBhbm90aGVyIHRva2VuIGlzIHJlcXVlc3RlZCBidXQgdGhlcmUgaXMgYSB0b2tlbiB0aGF0IGlzIHN0aWxsIHZhbGlkLCBpLmUuIGhhcyBub3QgZXhwaXJlZC4gVGhpcyBhdm9pZHMgdGhlIG9mdGVuIG9ic2VydmVkIGlzc3VlIHRoYXQgYSB1c2VyIHJlcXVlc3RzIG11bHRpcGxlIGVtYWlscyBhbmQgZG9lcyBub3Qga25vdyB3aGljaCBsaW5rIGNvbnRhaW5zIGEgdmFsaWQgdG9rZW4gYmVjYXVzZSBlYWNoIG5ld2x5IGdlbmVyYXRlZCB0b2tlbiB3b3VsZCBpbnZhbGlkYXRlIHRoZSBwcmV2aW91cyB0b2tlbi48YnI+PGJyPkRlZmF1bHQgaXMgYGZhbHNlYC5cbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSByZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbiBTZXQgdGhlIHZhbGlkaXR5IGR1cmF0aW9uIG9mIHRoZSBwYXNzd29yZCByZXNldCB0b2tlbiBpbiBzZWNvbmRzIGFmdGVyIHdoaWNoIHRoZSB0b2tlbiBleHBpcmVzLiBUaGUgdG9rZW4gaXMgdXNlZCBpbiB0aGUgbGluayB0aGF0IGlzIHNldCBpbiB0aGUgZW1haWwuIEFmdGVyIHRoZSB0b2tlbiBleHBpcmVzLCB0aGUgbGluayBiZWNvbWVzIGludmFsaWQgYW5kIGEgbmV3IGxpbmsgaGFzIHRvIGJlIHNlbnQuIElmIHRoZSBvcHRpb24gaXMgbm90IHNldCBvciBzZXQgdG8gYHVuZGVmaW5lZGAsIHRoZW4gdGhlIHRva2VuIG5ldmVyIGV4cGlyZXMuPGJyPjxicj5Gb3IgZXhhbXBsZSwgdG8gZXhwaXJlIHRoZSB0b2tlbiBhZnRlciAyIGhvdXJzLCBzZXQgYSB2YWx1ZSBvZiA3MjAwIHNlY29uZHMgKD0gNjAgc2Vjb25kcyAqIDYwIG1pbnV0ZXMgKiAyIGhvdXJzKS48YnI+PGJyPkRlZmF1bHQgaXMgYHVuZGVmaW5lZGAuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gdmFsaWRhdGlvbkVycm9yIFNldCB0aGUgZXJyb3IgbWVzc2FnZSB0byBiZSBzZW50Ljxicj48YnI+RGVmYXVsdCBpcyBgUGFzc3dvcmQgZG9lcyBub3QgbWVldCB0aGUgUGFzc3dvcmQgUG9saWN5IHJlcXVpcmVtZW50cy5gXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSB2YWxpZGF0b3JDYWxsYmFjayBTZXQgYSBjYWxsYmFjayBmdW5jdGlvbiB0byB2YWxpZGF0ZSBhIHBhc3N3b3JkIHRvIGJlIGFjY2VwdGVkLjxicj48YnI+SWYgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGB2YWxpZGF0b3JQYXR0ZXJuYCwgdGhlIHBhc3N3b3JkIG11c3QgcGFzcyBib3RoIHRvIGJlIGFjY2VwdGVkLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IHZhbGlkYXRvclBhdHRlcm4gU2V0IHRoZSByZWd1bGFyIGV4cHJlc3Npb24gdmFsaWRhdGlvbiBwYXR0ZXJuIGEgcGFzc3dvcmQgbXVzdCBtYXRjaCB0byBiZSBhY2NlcHRlZC48YnI+PGJyPklmIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBgdmFsaWRhdG9yQ2FsbGJhY2tgLCB0aGUgcGFzc3dvcmQgbXVzdCBwYXNzIGJvdGggdG8gYmUgYWNjZXB0ZWQuXG4gKi9cblxuLyoqXG4gKiBAaW50ZXJmYWNlIEZpbGVVcGxvYWRPcHRpb25zXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGVuYWJsZUZvckFub255bW91c1VzZXIgSXMgdHJ1ZSBpZiBmaWxlIHVwbG9hZCBzaG91bGQgYmUgYWxsb3dlZCBmb3IgYW5vbnltb3VzIHVzZXJzLlxuICogQHByb3BlcnR5IHtCb29sZWFufSBlbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciBJcyB0cnVlIGlmIGZpbGUgdXBsb2FkIHNob3VsZCBiZSBhbGxvd2VkIGZvciBhdXRoZW50aWNhdGVkIHVzZXJzLlxuICogQHByb3BlcnR5IHtCb29sZWFufSBlbmFibGVGb3JQdWJsaWMgSXMgdHJ1ZSBpZiBmaWxlIHVwbG9hZCBzaG91bGQgYmUgYWxsb3dlZCBmb3IgYW55b25lLCByZWdhcmRsZXNzIG9mIHVzZXIgYXV0aGVudGljYXRpb24uXG4gKiBAcHJvcGVydHkge1N0cmluZ1tdfSBmaWxlRXh0ZW5zaW9ucyBTZXRzIHRoZSBhbGxvd2VkIGZpbGUgZXh0ZW5zaW9ucyBmb3IgdXBsb2FkaW5nIGZpbGVzLiBUaGUgZXh0ZW5zaW9uIGlzIGRlZmluZWQgYXMgYW4gYXJyYXkgb2YgZmlsZSBleHRlbnNpb25zLCBvciBhIHJlZ2V4IHBhdHRlcm4uPGJyPjxicj5JdCBpcyByZWNvbW1lbmRlZCB0byByZXN0cmljdCB0aGUgZmlsZSB1cGxvYWQgZXh0ZW5zaW9ucyBhcyBtdWNoIGFzIHBvc3NpYmxlLiBIVE1MIGZpbGVzIGFyZSBlc3BlY2lhbGx5IHByb2JsZW1hdGljIGFzIHRoZXkgbWF5IGJlIHVzZWQgYnkgYW4gYXR0YWNrZXIgd2hvIHVwbG9hZHMgYSBIVE1MIGZvcm0gdG8gbG9vayBsZWdpdGltYXRlIHVuZGVyIHlvdXIgYXBwJ3MgZG9tYWluIG5hbWUsIG9yIHRvIGNvbXByb21pc2UgdGhlIHNlc3Npb24gdG9rZW4gb2YgYW5vdGhlciB1c2VyIHZpYSBhY2Nlc3NpbmcgdGhlIGJyb3dzZXIncyBsb2NhbCBzdG9yYWdlLjxicj48YnI+RGVmYXVsdHMgdG8gYF4oPyEoaHxIKSh0fFQpKG18TSkobHxMKT8kKWAgd2hpY2ggYWxsb3dzIGFueSBmaWxlIGV4dGVuc2lvbiBleGNlcHQgSFRNTCBmaWxlcy5cbiAqL1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgRGF0YWJhc2VPcHRpb25zXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGF1dG9TZWxlY3RGYW1pbHkgVGhlIE1vbmdvREIgZHJpdmVyIG9wdGlvbiB0byBzZXQgd2hldGhlciB0aGUgc29ja2V0IGF0dGVtcHRzIHRvIGNvbm5lY3QgdG8gSVB2NiBhbmQgSVB2NCBhZGRyZXNzZXMgdW50aWwgYSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLiBJZiBhdmFpbGFibGUsIHRoZSBkcml2ZXIgd2lsbCBzZWxlY3QgdGhlIGZpcnN0IElQdjYgYWRkcmVzcy5cbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgVGhlIE1vbmdvREIgZHJpdmVyIG9wdGlvbiB0byBzcGVjaWZ5IHRoZSBhbW91bnQgb2YgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgYSBjb25uZWN0aW9uIGF0dGVtcHQgdG8gZmluaXNoIGJlZm9yZSB0cnlpbmcgdGhlIG5leHQgYWRkcmVzcyB3aGVuIHVzaW5nIHRoZSBhdXRvU2VsZWN0RmFtaWx5IG9wdGlvbi4gSWYgc2V0IHRvIGEgcG9zaXRpdmUgaW50ZWdlciBsZXNzIHRoYW4gMTAsIHRoZSB2YWx1ZSAxMCBpcyB1c2VkIGluc3RlYWQuXG4gKiBAcHJvcGVydHkge051bWJlcn0gY29ubmVjdFRpbWVvdXRNUyBUaGUgTW9uZ29EQiBkcml2ZXIgb3B0aW9uIHRvIHNwZWNpZnkgdGhlIGFtb3VudCBvZiB0aW1lLCBpbiBtaWxsaXNlY29uZHMsIHRvIHdhaXQgdG8gZXN0YWJsaXNoIGEgc2luZ2xlIFRDUCBzb2NrZXQgY29ubmVjdGlvbiB0byB0aGUgc2VydmVyIGJlZm9yZSByYWlzaW5nIGFuIGVycm9yLiBTcGVjaWZ5aW5nIDAgZGlzYWJsZXMgdGhlIGNvbm5lY3Rpb24gdGltZW91dC5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZGlzYWJsZUluZGV4RmllbGRWYWxpZGF0aW9uIFNldCB0byBgdHJ1ZWAgdG8gZGlzYWJsZSB2YWxpZGF0aW9uIG9mIGluZGV4IGZpZWxkcy4gV2hlbiBkaXNhYmxlZCwgaW5kZXhlcyBjYW4gYmUgY3JlYXRlZCBldmVuIGlmIHRoZSBmaWVsZHMgZG8gbm90IGV4aXN0IGluIHRoZSBzY2hlbWEuIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIGNyZWF0aW5nIGluZGV4ZXMgb24gZmllbGRzIHRoYXQgd2lsbCBiZSBhZGRlZCBsYXRlci5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZW5hYmxlU2NoZW1hSG9va3MgRW5hYmxlcyBkYXRhYmFzZSByZWFsLXRpbWUgaG9va3MgdG8gdXBkYXRlIHNpbmdsZSBzY2hlbWEgY2FjaGUuIFNldCB0byBgdHJ1ZWAgaWYgdXNpbmcgbXVsdGlwbGUgUGFyc2UgU2VydmVycyBpbnN0YW5jZXMgY29ubmVjdGVkIHRvIHRoZSBzYW1lIGRhdGFiYXNlLiBGYWlsaW5nIHRvIGRvIHNvIHdpbGwgY2F1c2UgYSBzY2hlbWEgY2hhbmdlIHRvIG5vdCBwcm9wYWdhdGUgdG8gYWxsIGluc3RhbmNlcyBhbmQgcmUtc3luY2luZyB3aWxsIG9ubHkgaGFwcGVuIHdoZW4gdGhlIGluc3RhbmNlcyByZXN0YXJ0LiBUbyB1c2UgdGhpcyBmZWF0dXJlIHdpdGggTW9uZ29EQiwgYSByZXBsaWNhIHNldCBjbHVzdGVyIHdpdGggW2NoYW5nZSBzdHJlYW1dKGh0dHBzOi8vZG9jcy5tb25nb2RiLmNvbS9tYW51YWwvY2hhbmdlU3RyZWFtcy8jYXZhaWxhYmlsaXR5KSBzdXBwb3J0IGlzIHJlcXVpcmVkLlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IG1heFBvb2xTaXplIFRoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBvcGVuZWQsIGNhY2hlZCwgcmVhZHktdG8tdXNlIGRhdGFiYXNlIGNvbm5lY3Rpb25zIG1haW50YWluZWQgYnkgdGhlIGRyaXZlci5cbiAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBtYXhTdGFsZW5lc3NTZWNvbmRzIFRoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc2V0IHRoZSBtYXhpbXVtIHJlcGxpY2F0aW9uIGxhZyBmb3IgcmVhZHMgZnJvbSBzZWNvbmRhcnkgbm9kZXMuXG4gKiBAcHJvcGVydHkge051bWJlcn0gbWF4VGltZU1TIFRoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc2V0IGEgY3VtdWxhdGl2ZSB0aW1lIGxpbWl0IGluIG1pbGxpc2Vjb25kcyBmb3IgcHJvY2Vzc2luZyBvcGVyYXRpb25zIG9uIGEgY3Vyc29yLlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IG1pblBvb2xTaXplIFRoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc2V0IHRoZSBtaW5pbXVtIG51bWJlciBvZiBvcGVuZWQsIGNhY2hlZCwgcmVhZHktdG8tdXNlIGRhdGFiYXNlIGNvbm5lY3Rpb25zIG1haW50YWluZWQgYnkgdGhlIGRyaXZlci5cbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gcmV0cnlXcml0ZXMgVGhlIE1vbmdvREIgZHJpdmVyIG9wdGlvbiB0byBzZXQgd2hldGhlciB0byByZXRyeSBmYWlsZWQgd3JpdGVzLlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IHNjaGVtYUNhY2hlVHRsIFRoZSBkdXJhdGlvbiBpbiBzZWNvbmRzIGFmdGVyIHdoaWNoIHRoZSBzY2hlbWEgY2FjaGUgZXhwaXJlcyBhbmQgd2lsbCBiZSByZWZldGNoZWQgZnJvbSB0aGUgZGF0YWJhc2UuIFVzZSB0aGlzIG9wdGlvbiBpZiB1c2luZyBtdWx0aXBsZSBQYXJzZSBTZXJ2ZXJzIGluc3RhbmNlcyBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgZGF0YWJhc2UuIEEgbG93IGR1cmF0aW9uIHdpbGwgY2F1c2UgdGhlIHNjaGVtYSBjYWNoZSB0byBiZSB1cGRhdGVkIHRvbyBvZnRlbiwgY2F1c2luZyB1bm5lY2Vzc2FyeSBkYXRhYmFzZSByZWFkcy4gQSBoaWdoIGR1cmF0aW9uIHdpbGwgY2F1c2UgdGhlIHNjaGVtYSB0byBiZSB1cGRhdGVkIHRvbyByYXJlbHksIGluY3JlYXNpbmcgdGhlIHRpbWUgcmVxdWlyZWQgdW50aWwgc2NoZW1hIGNoYW5nZXMgcHJvcGFnYXRlIHRvIGFsbCBzZXJ2ZXIgaW5zdGFuY2VzLiBUaGlzIGZlYXR1cmUgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgb3IgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgb3B0aW9uIGBlbmFibGVTY2hlbWFIb29rc2AuIERlZmF1bHQgaXMgaW5maW5pdGUgd2hpY2ggbWVhbnMgdGhlIHNjaGVtYSBjYWNoZSBuZXZlciBleHBpcmVzLlxuICogQHByb3BlcnR5IHtOdW1iZXJ9IHNvY2tldFRpbWVvdXRNUyBUaGUgTW9uZ29EQiBkcml2ZXIgb3B0aW9uIHRvIHNwZWNpZnkgdGhlIGFtb3VudCBvZiB0aW1lLCBpbiBtaWxsaXNlY29uZHMsIHNwZW50IGF0dGVtcHRpbmcgdG8gc2VuZCBvciByZWNlaXZlIG9uIGEgc29ja2V0IGJlZm9yZSB0aW1pbmcgb3V0LiBTcGVjaWZ5aW5nIDAgbWVhbnMgbm8gdGltZW91dC5cbiAqL1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgQXV0aEFkYXB0ZXJcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZW5hYmxlZCBJcyBgdHJ1ZWAgaWYgdGhlIGF1dGggYWRhcHRlciBpcyBlbmFibGVkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgTG9nTGV2ZWxzXG4gKiBAcHJvcGVydHkge1N0cmluZ30gY2xvdWRGdW5jdGlvbkVycm9yIExvZyBsZXZlbCB1c2VkIGJ5IHRoZSBDbG91ZCBDb2RlIEZ1bmN0aW9ucyBvbiBlcnJvci4gRGVmYXVsdCBpcyBgZXJyb3JgLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IGNsb3VkRnVuY3Rpb25TdWNjZXNzIExvZyBsZXZlbCB1c2VkIGJ5IHRoZSBDbG91ZCBDb2RlIEZ1bmN0aW9ucyBvbiBzdWNjZXNzLiBEZWZhdWx0IGlzIGBpbmZvYC5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB0cmlnZ2VyQWZ0ZXIgTG9nIGxldmVsIHVzZWQgYnkgdGhlIENsb3VkIENvZGUgVHJpZ2dlcnMgYGFmdGVyU2F2ZWAsIGBhZnRlckRlbGV0ZWAsIGBhZnRlckZpbmRgLCBgYWZ0ZXJMb2dvdXRgLiBEZWZhdWx0IGlzIGBpbmZvYC5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB0cmlnZ2VyQmVmb3JlRXJyb3IgTG9nIGxldmVsIHVzZWQgYnkgdGhlIENsb3VkIENvZGUgVHJpZ2dlcnMgYGJlZm9yZVNhdmVgLCBgYmVmb3JlRGVsZXRlYCwgYGJlZm9yZUZpbmRgLCBgYmVmb3JlTG9naW5gIG9uIGVycm9yLiBEZWZhdWx0IGlzIGBlcnJvcmAuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gdHJpZ2dlckJlZm9yZVN1Y2Nlc3MgTG9nIGxldmVsIHVzZWQgYnkgdGhlIENsb3VkIENvZGUgVHJpZ2dlcnMgYGJlZm9yZVNhdmVgLCBgYmVmb3JlRGVsZXRlYCwgYGJlZm9yZUZpbmRgLCBgYmVmb3JlTG9naW5gIG9uIHN1Y2Nlc3MuIERlZmF1bHQgaXMgYGluZm9gLlxuICovXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQSIsImlnbm9yZUxpc3QiOltdfQ==
@@ -9,4 +9,4 @@ var _PubSubAdapter = require("../Adapters/PubSub/PubSubAdapter");
9
9
  var _StorageAdapter = require("../Adapters/Storage/StorageAdapter");
10
10
  var _WSSAdapter = require("../Adapters/WebSocketServer/WSSAdapter");
11
11
  var _CheckGroup = require("../Security/CheckGroup");
12
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQW5hbHl0aWNzQWRhcHRlciIsInJlcXVpcmUiLCJfQ2FjaGVBZGFwdGVyIiwiX01haWxBZGFwdGVyIiwiX0ZpbGVzQWRhcHRlciIsIl9Mb2dnZXJBZGFwdGVyIiwiX1B1YlN1YkFkYXB0ZXIiLCJfU3RvcmFnZUFkYXB0ZXIiLCJfV1NTQWRhcHRlciIsIl9DaGVja0dyb3VwIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL09wdGlvbnMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCB7IEFuYWx5dGljc0FkYXB0ZXIgfSBmcm9tICcuLi9BZGFwdGVycy9BbmFseXRpY3MvQW5hbHl0aWNzQWRhcHRlcic7XG5pbXBvcnQgeyBDYWNoZUFkYXB0ZXIgfSBmcm9tICcuLi9BZGFwdGVycy9DYWNoZS9DYWNoZUFkYXB0ZXInO1xuaW1wb3J0IHsgTWFpbEFkYXB0ZXIgfSBmcm9tICcuLi9BZGFwdGVycy9FbWFpbC9NYWlsQWRhcHRlcic7XG5pbXBvcnQgeyBGaWxlc0FkYXB0ZXIgfSBmcm9tICcuLi9BZGFwdGVycy9GaWxlcy9GaWxlc0FkYXB0ZXInO1xuaW1wb3J0IHsgTG9nZ2VyQWRhcHRlciB9IGZyb20gJy4uL0FkYXB0ZXJzL0xvZ2dlci9Mb2dnZXJBZGFwdGVyJztcbmltcG9ydCB7IFB1YlN1YkFkYXB0ZXIgfSBmcm9tICcuLi9BZGFwdGVycy9QdWJTdWIvUHViU3ViQWRhcHRlcic7XG5pbXBvcnQgeyBTdG9yYWdlQWRhcHRlciB9IGZyb20gJy4uL0FkYXB0ZXJzL1N0b3JhZ2UvU3RvcmFnZUFkYXB0ZXInO1xuaW1wb3J0IHsgV1NTQWRhcHRlciB9IGZyb20gJy4uL0FkYXB0ZXJzL1dlYlNvY2tldFNlcnZlci9XU1NBZGFwdGVyJztcbmltcG9ydCB7IENoZWNrR3JvdXAgfSBmcm9tICcuLi9TZWN1cml0eS9DaGVja0dyb3VwJztcblxuZXhwb3J0IGludGVyZmFjZSBTY2hlbWFPcHRpb25zIHtcbiAgLyogUmVzdCByZXByZXNlbnRhdGlvbiBvbiBQYXJzZS5TY2hlbWEgaHR0cHM6Ly9kb2NzLnBhcnNlcGxhdGZvcm0ub3JnL3Jlc3QvZ3VpZGUvI2FkZGluZy1hLXNjaGVtYVxuICA6REVGQVVMVDogW10gKi9cbiAgZGVmaW5pdGlvbnM6IGFueTtcbiAgLyogSXMgdHJ1ZSBpZiBQYXJzZSBTZXJ2ZXIgc2hvdWxkIGV4aXQgaWYgc2NoZW1hIHVwZGF0ZSBmYWlsLlxuICA6REVGQVVMVDogZmFsc2UgKi9cbiAgc3RyaWN0OiA/Ym9vbGVhbjtcbiAgLyogSXMgdHJ1ZSBpZiBQYXJzZSBTZXJ2ZXIgc2hvdWxkIGRlbGV0ZSBhbnkgZmllbGRzIG5vdCBkZWZpbmVkIGluIGEgc2NoZW1hIGRlZmluaXRpb24uIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBkdXJpbmcgZGV2ZWxvcG1lbnQuXG4gIDpERUZBVUxUOiBmYWxzZSAqL1xuICBkZWxldGVFeHRyYUZpZWxkczogP2Jvb2xlYW47XG4gIC8qIElzIHRydWUgaWYgUGFyc2UgU2VydmVyIHNob3VsZCByZWNyZWF0ZSBhbnkgZmllbGRzIHRoYXQgYXJlIGRpZmZlcmVudCBiZXR3ZWVuIHRoZSBjdXJyZW50IGRhdGFiYXNlIHNjaGVtYSBhbmQgdGhlc2NoZW1hIGRlZmluaXRpb24uIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBkdXJpbmcgZGV2ZWxvcG1lbnQuXG4gIDpERUZBVUxUOiBmYWxzZSAqL1xuICByZWNyZWF0ZU1vZGlmaWVkRmllbGRzOiA/Ym9vbGVhbjtcbiAgLyogSXMgdHJ1ZSBpZiBQYXJzZSBTZXJ2ZXIgd2lsbCByZWplY3QgYW55IGF0dGVtcHRzIHRvIG1vZGlmeSB0aGUgc2NoZW1hIHdoaWxlIHRoZSBzZXJ2ZXIgaXMgcnVubmluZy5cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIGxvY2tTY2hlbWFzOiA/Ym9vbGVhbjtcbiAgLyogKE9wdGlvbmFsKSBLZWVwIGluZGV4ZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgZGF0YWJhc2UgYnV0IG5vdCBkZWZpbmVkIGluIHRoZSBzY2hlbWEuIFNldCB0aGlzIHRvIGB0cnVlYCBpZiB5b3UgYXJlIGFkZGluZyBpbmRleGVzIG1hbnVhbGx5LCBzbyB0aGF0IHRoZXkgd29uJ3QgYmUgcmVtb3ZlZCB3aGVuIHJ1bm5pbmcgc2NoZW1hIG1pZ3JhdGlvbi4gRGVmYXVsdCBpcyBgZmFsc2VgLlxuICA6REVGQVVMVDogZmFsc2UgKi9cbiAga2VlcFVua25vd25JbmRleGVzOiA/Ym9vbGVhbjtcbiAgLyogRXhlY3V0ZSBhIGNhbGxiYWNrIGJlZm9yZSBydW5uaW5nIHNjaGVtYSBtaWdyYXRpb25zLiAqL1xuICBiZWZvcmVNaWdyYXRpb246ID8oKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgLyogRXhlY3V0ZSBhIGNhbGxiYWNrIGFmdGVyIHJ1bm5pbmcgc2NoZW1hIG1pZ3JhdGlvbnMuICovXG4gIGFmdGVyTWlncmF0aW9uOiA/KCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG59XG5cbnR5cGUgQWRhcHRlcjxUPiA9IHN0cmluZyB8IGFueSB8IFQ7XG50eXBlIE51bWJlck9yQm9vbGVhbiA9IG51bWJlciB8IGJvb2xlYW47XG50eXBlIE51bWJlck9yU3RyaW5nID0gbnVtYmVyIHwgc3RyaW5nO1xudHlwZSBQcm90ZWN0ZWRGaWVsZHMgPSBhbnk7XG50eXBlIFN0cmluZ09yU3RyaW5nQXJyYXkgPSBzdHJpbmcgfCBzdHJpbmdbXTtcbnR5cGUgUmVxdWVzdEtleXdvcmREZW55bGlzdCA9IHtcbiAga2V5OiBzdHJpbmcgfCBhbnksXG4gIHZhbHVlOiBhbnksXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlU2VydmVyT3B0aW9ucyB7XG4gIC8qIFlvdXIgUGFyc2UgQXBwbGljYXRpb24gSURcbiAgOkVOVjogUEFSU0VfU0VSVkVSX0FQUExJQ0FUSU9OX0lEICovXG4gIGFwcElkOiBzdHJpbmc7XG4gIC8qIFlvdXIgUGFyc2UgTWFzdGVyIEtleSAqL1xuICBtYXN0ZXJLZXk6ICgoKSA9PiB2b2lkKSB8IHN0cmluZztcbiAgLyogKE9wdGlvbmFsKSBUaGUgZHVyYXRpb24gaW4gc2Vjb25kcyBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgYG1hc3RlcktleWAgaXMgYmVpbmcgdXNlZCBiZWZvcmUgaXQgaXMgcmVxdWVzdGVkIGFnYWluIGlmIGBtYXN0ZXJLZXlgIGlzIHNldCB0byBhIGZ1bmN0aW9uLiBJZiBgbWFzdGVyS2V5YCBpcyBub3Qgc2V0IHRvIGEgZnVuY3Rpb24sIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QuIERlZmF1bHQgaXMgYDBgLCB3aGljaCBtZWFucyB0aGUgbWFzdGVyIGtleSBpcyByZXF1ZXN0ZWQgYnkgaW52b2tpbmcgdGhlICBgbWFzdGVyS2V5YCBmdW5jdGlvbiBldmVyeSB0aW1lIHRoZSBtYXN0ZXIga2V5IGlzIHVzZWQgaW50ZXJuYWxseSBieSBQYXJzZSBTZXJ2ZXIuICovXG4gIG1hc3RlcktleVR0bDogP251bWJlcjtcbiAgLyogKE9wdGlvbmFsKSBUaGUgbWFpbnRlbmFuY2Uga2V5IGlzIHVzZWQgZm9yIG1vZGlmeWluZyBpbnRlcm5hbCBhbmQgcmVhZC1vbmx5IGZpZWxkcyBvZiBQYXJzZSBTZXJ2ZXIuPGJyPjxicj7imqDvuI8gVGhpcyBrZXkgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgYXMgcGFydCBvZiBhIHJlZ3VsYXIgb3BlcmF0aW9uIG9mIFBhcnNlIFNlcnZlci4gVGhpcyBrZXkgaXMgaW50ZW5kZWQgdG8gY29uZHVjdCBvdXQtb2YtYmFuZCBjaGFuZ2VzIHN1Y2ggYXMgb25lLXRpbWUgbWlncmF0aW9ucyBvciBkYXRhIGNvcnJlY3Rpb24gdGFza3MuIEludGVybmFsIGZpZWxkcyBhcmUgbm90IG9mZmljaWFsbHkgZG9jdW1lbnRlZCBhbmQgbWF5IGNoYW5nZSBhdCBhbnkgdGltZSB3aXRob3V0IHB1YmxpY2F0aW9uIGluIHJlbGVhc2UgY2hhbmdlbG9ncy4gV2Ugc3Ryb25nbHkgYWR2aWNlIG5vdCB0byByZWx5IG9uIGludGVybmFsIGZpZWxkcyBhcyBwYXJ0IG9mIHlvdXIgcmVndWxhciBvcGVyYXRpb24gYW5kIHRvIGludmVzdGlnYXRlIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IHBsYW5uZWQgY2hhbmdlcyAqZGlyZWN0bHkgaW4gdGhlIHNvdXJjZSBjb2RlKiBvZiB5b3VyIGN1cnJlbnQgdmVyc2lvbiBvZiBQYXJzZSBTZXJ2ZXIuICovXG4gIG1haW50ZW5hbmNlS2V5OiBzdHJpbmc7XG4gIC8qIFVSTCB0byB5b3VyIHBhcnNlIHNlcnZlciB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly8uXG4gIDpFTlY6IFBBUlNFX1NFUlZFUl9VUkwgKi9cbiAgc2VydmVyVVJMOiBzdHJpbmc7XG4gIC8qIChPcHRpb25hbCkgUmVzdHJpY3RzIHRoZSB1c2Ugb2YgbWFzdGVyIGtleSBwZXJtaXNzaW9ucyB0byBhIGxpc3Qgb2YgSVAgYWRkcmVzc2VzIG9yIHJhbmdlcy48YnI+PGJyPlRoaXMgb3B0aW9uIGFjY2VwdHMgYSBsaXN0IG9mIHNpbmdsZSBJUCBhZGRyZXNzZXMsIGZvciBleGFtcGxlIGBbJzEwLjAuMC4xJywgJzEwLjAuMC4yJ11gLiBZb3UgY2FuIGFsc28gdXNlIENJRFIgbm90YXRpb24gdG8gc3BlY2lmeSBhbiBJUCBhZGRyZXNzIHJhbmdlLCBmb3IgZXhhbXBsZSBgWycxMC4wLjEuMC8yNCddYC48YnI+PGJyPjxiPlNwZWNpYWwgc2NlbmFyaW9zOjwvYj48YnI+LSBTZXR0aW5nIGFuIGVtcHR5IGFycmF5IGBbXWAgbWVhbnMgdGhhdCB0aGUgbWFzdGVyIGtleSBjYW5ub3QgYmUgdXNlZCBldmVuIGluIFBhcnNlIFNlcnZlciBDbG91ZCBDb2RlLiBUaGlzIHZhbHVlIGNhbm5vdCBiZSBzZXQgdmlhIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGFzIHRoZXJlIGlzIG5vIHdheSB0byBwYXNzIGFuIGVtcHR5IGFycmF5IHRvIFBhcnNlIFNlcnZlciB2aWEgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuPGJyPi0gU2V0dGluZyBgWycwLjAuMC4wLzAnLCAnOjowJ11gIG1lYW5zIHRvIGFsbG93IGFueSBJUHY0IGFuZCBJUHY2IGFkZHJlc3MgdG8gdXNlIHRoZSBtYXN0ZXIga2V5IGFuZCBlZmZlY3RpdmVseSBkaXNhYmxlcyB0aGUgSVAgZmlsdGVyLjxicj48YnI+PGI+Q29uc2lkZXJhdGlvbnM6PC9iPjxicj4tIElQdjQgYW5kIElQdjYgYWRkcmVzc2VzIGFyZSBub3QgY29tcGFyZWQgYWdhaW5zdCBlYWNoIG90aGVyLiBFYWNoIElQIHZlcnNpb24gKElQdjQgYW5kIElQdjYpIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQgc2VwYXJhdGVseS4gRm9yIGV4YW1wbGUsIGBbJzAuMC4wLjAvMCddYCBhbGxvd3MgYW55IElQdjQgYWRkcmVzcyBhbmQgYmxvY2tzIGV2ZXJ5IElQdjYgYWRkcmVzcy4gQ29udmVyc2VseSwgYFsnOjowJ11gIGFsbG93cyBhbnkgSVB2NiBhZGRyZXNzIGFuZCBibG9ja3MgZXZlcnkgSVB2NCBhZGRyZXNzLjxicj4tIEtlZXAgaW4gbWluZCB0aGF0IHRoZSBJUCB2ZXJzaW9uIGluIHVzZSBkZXBlbmRzIG9uIHRoZSBuZXR3b3JrIHN0YWNrIG9mIHRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCBQYXJzZSBTZXJ2ZXIgcnVucy4gQSBsb2NhbCBlbnZpcm9ubWVudCBtYXkgdXNlIGEgZGlmZmVyZW50IElQIHZlcnNpb24gdGhhbiBhIHJlbW90ZSBlbnZpcm9ubWVudC4gRm9yIGV4YW1wbGUsIGl0J3MgcG9zc2libGUgdGhhdCBsb2NhbGx5IHRoZSB2YWx1ZSBgWycwLjAuMC4wLzAnXWAgYWxsb3dzIHRoZSByZXF1ZXN0IElQIGJlY2F1c2UgdGhlIGVudmlyb25tZW50IGlzIHVzaW5nIElQdjQsIGJ1dCB3aGVuIFBhcnNlIFNlcnZlciBpcyBkZXBsb3llZCByZW1vdGVseSB0aGUgcmVxdWVzdCBJUCBpcyBibG9ja2VkIGJlY2F1c2UgdGhlIHJlbW90ZSBlbnZpcm9ubWVudCBpcyB1c2luZyBJUHY2Ljxicj4tIFdoZW4gc2V0dGluZyB0aGUgb3B0aW9uIHZpYSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0aGUgbm90YXRpb24gaXMgYSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nLCBmb3IgZXhhbXBsZSBgXCIwLjAuMC4wLzAsOjowXCJgLjxicj4tIElQdjYgem9uZSBpbmRpY2VzIChgJWAgc3VmZml4KSBhcmUgbm90IHN1cHBvcnRlZCwgZm9yIGV4YW1wbGUgYGZlODA6OjElZXRoMGAsIGBmZTgwOjoxJTFgIG9yIGA6OjElbG9gLjxicj48YnI+RGVmYXVsdHMgdG8gYFsnMTI3LjAuMC4xJywgJzo6MSddYCB3aGljaCBtZWFucyB0aGF0IG9ubHkgYGxvY2FsaG9zdGAsIHRoZSBzZXJ2ZXIgaW5zdGFuY2Ugb24gd2hpY2ggUGFyc2UgU2VydmVyIHJ1bnMsIGlzIGFsbG93ZWQgdG8gdXNlIHRoZSBtYXN0ZXIga2V5LlxuICA6REVGQVVMVDogW1wiMTI3LjAuMC4xXCIsXCI6OjFcIl0gKi9cbiAgbWFzdGVyS2V5SXBzOiA/KHN0cmluZ1tdKTtcbiAgLyogKE9wdGlvbmFsKSBSZXN0cmljdHMgdGhlIHVzZSBvZiBtYWludGVuYW5jZSBrZXkgcGVybWlzc2lvbnMgdG8gYSBsaXN0IG9mIElQIGFkZHJlc3NlcyBvciByYW5nZXMuPGJyPjxicj5UaGlzIG9wdGlvbiBhY2NlcHRzIGEgbGlzdCBvZiBzaW5nbGUgSVAgYWRkcmVzc2VzLCBmb3IgZXhhbXBsZSBgWycxMC4wLjAuMScsICcxMC4wLjAuMiddYC4gWW91IGNhbiBhbHNvIHVzZSBDSURSIG5vdGF0aW9uIHRvIHNwZWNpZnkgYW4gSVAgYWRkcmVzcyByYW5nZSwgZm9yIGV4YW1wbGUgYFsnMTAuMC4xLjAvMjQnXWAuPGJyPjxicj48Yj5TcGVjaWFsIHNjZW5hcmlvczo8L2I+PGJyPi0gU2V0dGluZyBhbiBlbXB0eSBhcnJheSBgW11gIG1lYW5zIHRoYXQgdGhlIG1haW50ZW5hbmNlIGtleSBjYW5ub3QgYmUgdXNlZCBldmVuIGluIFBhcnNlIFNlcnZlciBDbG91ZCBDb2RlLiBUaGlzIHZhbHVlIGNhbm5vdCBiZSBzZXQgdmlhIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGFzIHRoZXJlIGlzIG5vIHdheSB0byBwYXNzIGFuIGVtcHR5IGFycmF5IHRvIFBhcnNlIFNlcnZlciB2aWEgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuPGJyPi0gU2V0dGluZyBgWycwLjAuMC4wLzAnLCAnOjowJ11gIG1lYW5zIHRvIGFsbG93IGFueSBJUHY0IGFuZCBJUHY2IGFkZHJlc3MgdG8gdXNlIHRoZSBtYWludGVuYW5jZSBrZXkgYW5kIGVmZmVjdGl2ZWx5IGRpc2FibGVzIHRoZSBJUCBmaWx0ZXIuPGJyPjxicj48Yj5Db25zaWRlcmF0aW9uczo8L2I+PGJyPi0gSVB2NCBhbmQgSVB2NiBhZGRyZXNzZXMgYXJlIG5vdCBjb21wYXJlZCBhZ2FpbnN0IGVhY2ggb3RoZXIuIEVhY2ggSVAgdmVyc2lvbiAoSVB2NCBhbmQgSVB2NikgbmVlZHMgdG8gYmUgY29uc2lkZXJlZCBzZXBhcmF0ZWx5LiBGb3IgZXhhbXBsZSwgYFsnMC4wLjAuMC8wJ11gIGFsbG93cyBhbnkgSVB2NCBhZGRyZXNzIGFuZCBibG9ja3MgZXZlcnkgSVB2NiBhZGRyZXNzLiBDb252ZXJzZWx5LCBgWyc6OjAnXWAgYWxsb3dzIGFueSBJUHY2IGFkZHJlc3MgYW5kIGJsb2NrcyBldmVyeSBJUHY0IGFkZHJlc3MuPGJyPi0gS2VlcCBpbiBtaW5kIHRoYXQgdGhlIElQIHZlcnNpb24gaW4gdXNlIGRlcGVuZHMgb24gdGhlIG5ldHdvcmsgc3RhY2sgb2YgdGhlIGVudmlyb25tZW50IGluIHdoaWNoIFBhcnNlIFNlcnZlciBydW5zLiBBIGxvY2FsIGVudmlyb25tZW50IG1heSB1c2UgYSBkaWZmZXJlbnQgSVAgdmVyc2lvbiB0aGFuIGEgcmVtb3RlIGVudmlyb25tZW50LiBGb3IgZXhhbXBsZSwgaXQncyBwb3NzaWJsZSB0aGF0IGxvY2FsbHkgdGhlIHZhbHVlIGBbJzAuMC4wLjAvMCddYCBhbGxvd3MgdGhlIHJlcXVlc3QgSVAgYmVjYXVzZSB0aGUgZW52aXJvbm1lbnQgaXMgdXNpbmcgSVB2NCwgYnV0IHdoZW4gUGFyc2UgU2VydmVyIGlzIGRlcGxveWVkIHJlbW90ZWx5IHRoZSByZXF1ZXN0IElQIGlzIGJsb2NrZWQgYmVjYXVzZSB0aGUgcmVtb3RlIGVudmlyb25tZW50IGlzIHVzaW5nIElQdjYuPGJyPi0gV2hlbiBzZXR0aW5nIHRoZSBvcHRpb24gdmlhIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHRoZSBub3RhdGlvbiBpcyBhIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmcsIGZvciBleGFtcGxlIGBcIjAuMC4wLjAvMCw6OjBcImAuPGJyPi0gSVB2NiB6b25lIGluZGljZXMgKGAlYCBzdWZmaXgpIGFyZSBub3Qgc3VwcG9ydGVkLCBmb3IgZXhhbXBsZSBgZmU4MDo6MSVldGgwYCwgYGZlODA6OjElMWAgb3IgYDo6MSVsb2AuPGJyPjxicj5EZWZhdWx0cyB0byBgWycxMjcuMC4wLjEnLCAnOjoxJ11gIHdoaWNoIG1lYW5zIHRoYXQgb25seSBgbG9jYWxob3N0YCwgdGhlIHNlcnZlciBpbnN0YW5jZSBvbiB3aGljaCBQYXJzZSBTZXJ2ZXIgcnVucywgaXMgYWxsb3dlZCB0byB1c2UgdGhlIG1haW50ZW5hbmNlIGtleS5cbiAgOkRFRkFVTFQ6IFtcIjEyNy4wLjAuMVwiLFwiOjoxXCJdICovXG4gIG1haW50ZW5hbmNlS2V5SXBzOiA/KHN0cmluZ1tdKTtcbiAgLyogU2V0cyB0aGUgYXBwIG5hbWUgKi9cbiAgYXBwTmFtZTogP3N0cmluZztcbiAgLyogQWRkIGhlYWRlcnMgdG8gQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycyAqL1xuICBhbGxvd0hlYWRlcnM6ID8oc3RyaW5nW10pO1xuICAvKiBTZXRzIG9yaWdpbnMgZm9yIEFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbi4gVGhpcyBjYW4gYmUgYSBzdHJpbmcgZm9yIGEgc2luZ2xlIG9yaWdpbiBvciBhbiBhcnJheSBvZiBzdHJpbmdzIGZvciBtdWx0aXBsZSBvcmlnaW5zLiAqL1xuICBhbGxvd09yaWdpbjogP1N0cmluZ09yU3RyaW5nQXJyYXk7XG4gIC8qIEFkYXB0ZXIgbW9kdWxlIGZvciB0aGUgYW5hbHl0aWNzICovXG4gIGFuYWx5dGljc0FkYXB0ZXI6ID9BZGFwdGVyPEFuYWx5dGljc0FkYXB0ZXI+O1xuICAvKiBBZGFwdGVyIG1vZHVsZSBmb3IgdGhlIGZpbGVzIHN1Yi1zeXN0ZW0gKi9cbiAgZmlsZXNBZGFwdGVyOiA/QWRhcHRlcjxGaWxlc0FkYXB0ZXI+O1xuICAvKiBDb25maWd1cmF0aW9uIGZvciBwdXNoLCBhcyBzdHJpbmdpZmllZCBKU09OLiBTZWUgaHR0cDovL2RvY3MucGFyc2VwbGF0Zm9ybS5vcmcvcGFyc2Utc2VydmVyL2d1aWRlLyNwdXNoLW5vdGlmaWNhdGlvbnMgKi9cbiAgcHVzaDogP2FueTtcbiAgLyogQ29uZmlndXJhdGlvbiBmb3IgcHVzaCBzY2hlZHVsaW5nLCBkZWZhdWx0cyB0byBmYWxzZS5cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIHNjaGVkdWxlZFB1c2g6ID9ib29sZWFuO1xuICAvKiBBZGFwdGVyIG1vZHVsZSBmb3IgdGhlIGxvZ2dpbmcgc3ViLXN5c3RlbSAqL1xuICBsb2dnZXJBZGFwdGVyOiA/QWRhcHRlcjxMb2dnZXJBZGFwdGVyPjtcbiAgLyogTG9nIGFzIHN0cnVjdHVyZWQgSlNPTiBvYmplY3RzXG4gIDpFTlY6IEpTT05fTE9HUyAqL1xuICBqc29uTG9nczogP2Jvb2xlYW47XG4gIC8qIEZvbGRlciBmb3IgdGhlIGxvZ3MgKGRlZmF1bHRzIHRvICcuL2xvZ3MnKTsgc2V0IHRvIG51bGwgdG8gZGlzYWJsZSBmaWxlIGJhc2VkIGxvZ2dpbmdcbiAgOkVOVjogUEFSU0VfU0VSVkVSX0xPR1NfRk9MREVSXG4gIDpERUZBVUxUOiAuL2xvZ3MgKi9cbiAgbG9nc0ZvbGRlcjogP3N0cmluZztcbiAgLyogU2V0IHRoZSBsb2dnaW5nIHRvIHZlcmJvc2VcbiAgOkVOVjogVkVSQk9TRSAqL1xuICB2ZXJib3NlOiA/Ym9vbGVhbjtcbiAgLyogU2V0cyB0aGUgbGV2ZWwgZm9yIGxvZ3MgKi9cbiAgbG9nTGV2ZWw6ID9zdHJpbmc7XG4gIC8qIChPcHRpb25hbCkgT3ZlcnJpZGVzIHRoZSBsb2cgbGV2ZWxzIHVzZWQgaW50ZXJuYWxseSBieSBQYXJzZSBTZXJ2ZXIgdG8gbG9nIGV2ZW50cy5cbiAgOkRFRkFVTFQ6IHt9ICovXG4gIGxvZ0xldmVsczogP0xvZ0xldmVscztcbiAgLyogTWF4aW11bSBudW1iZXIgb2YgbG9ncyB0byBrZWVwLiBJZiBub3Qgc2V0LCBubyBsb2dzIHdpbGwgYmUgcmVtb3ZlZC4gVGhpcyBjYW4gYmUgYSBudW1iZXIgb2YgZmlsZXMgb3IgbnVtYmVyIG9mIGRheXMuIElmIHVzaW5nIGRheXMsIGFkZCAnZCcgYXMgdGhlIHN1ZmZpeC4gKGRlZmF1bHQ6IG51bGwpICovXG4gIG1heExvZ0ZpbGVzOiA/TnVtYmVyT3JTdHJpbmc7XG4gIC8qIERpc2FibGVzIGNvbnNvbGUgb3V0cHV0XG4gIDpFTlY6IFNJTEVOVCAqL1xuICBzaWxlbnQ6ID9ib29sZWFuO1xuICAvKiBUaGUgZnVsbCBVUkkgdG8geW91ciBkYXRhYmFzZS4gU3VwcG9ydGVkIGRhdGFiYXNlcyBhcmUgbW9uZ29kYiBvciBwb3N0Z3Jlcy5cbiAgOkRFRkFVTFQ6IG1vbmdvZGI6Ly9sb2NhbGhvc3Q6MjcwMTcvcGFyc2UgKi9cbiAgZGF0YWJhc2VVUkk6IHN0cmluZztcbiAgLyogT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBkYXRhYmFzZSBjbGllbnRcbiAgOkVOVjogUEFSU0VfU0VSVkVSX0RBVEFCQVNFX09QVElPTlMgKi9cbiAgZGF0YWJhc2VPcHRpb25zOiA/RGF0YWJhc2VPcHRpb25zO1xuICAvKiBBZGFwdGVyIG1vZHVsZSBmb3IgdGhlIGRhdGFiYXNlOyBhbnkgb3B0aW9ucyB0aGF0IGFyZSBub3QgZXhwbGljaXRseSBkZXNjcmliZWQgaGVyZSBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvIHRoZSBkYXRhYmFzZSBjbGllbnQuICovXG4gIGRhdGFiYXNlQWRhcHRlcjogP0FkYXB0ZXI8U3RvcmFnZUFkYXB0ZXI+O1xuICAvKiBPcHRpb25hbC4gSWYgc2V0IHRvIGB0cnVlYCwgdGhlIGNvbGxhdGlvbiBydWxlIG9mIGNhc2UgY29tcGFyaXNvbiBmb3IgcXVlcmllcyBhbmQgaW5kZXhlcyBpcyBlbmFibGVkLiBFbmFibGUgdGhpcyBvcHRpb24gdG8gcnVuIFBhcnNlIFNlcnZlciB3aXRoIE1vbmdvREIgQXRsYXMgU2VydmVybGVzcyBvciBBV1MgQW1hem9uIERvY3VtZW50REIuIElmIGBmYWxzZWAsIHRoZSBjb2xsYXRpb24gcnVsZSBvZiBjYXNlIGNvbXBhcmlzb24gaXMgZGlzYWJsZWQuIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIGVuYWJsZUNvbGxhdGlvbkNhc2VDb21wYXJpc29uOiA/Ym9vbGVhbjtcbiAgLyogT3B0aW9uYWwuIElmIHNldCB0byBgdHJ1ZWAsIHRoZSBgZW1haWxgIHByb3BlcnR5IG9mIGEgdXNlciBpcyBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBsb3dlcmNhc2UgYmVmb3JlIGJlaW5nIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UuIENvbnNlcXVlbnRseSwgcXVlcmllcyBtdXN0IG1hdGNoIHRoZSBjYXNlIGFzIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UsIHdoaWNoIHdvdWxkIGJlIGxvd2VyY2FzZSBpbiB0aGlzIHNjZW5hcmlvLiBJZiBgZmFsc2VgLCB0aGUgYGVtYWlsYCBwcm9wZXJ0eSBpcyBzdG9yZWQgYXMgc2V0LCB3aXRob3V0IGFueSBjYXNlIG1vZGlmaWNhdGlvbnMuIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIGNvbnZlcnRFbWFpbFRvTG93ZXJjYXNlOiA/Ym9vbGVhbjtcbiAgLyogT3B0aW9uYWwuIElmIHNldCB0byBgdHJ1ZWAsIHRoZSBgdXNlcm5hbWVgIHByb3BlcnR5IG9mIGEgdXNlciBpcyBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBsb3dlcmNhc2UgYmVmb3JlIGJlaW5nIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UuIENvbnNlcXVlbnRseSwgcXVlcmllcyBtdXN0IG1hdGNoIHRoZSBjYXNlIGFzIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UsIHdoaWNoIHdvdWxkIGJlIGxvd2VyY2FzZSBpbiB0aGlzIHNjZW5hcmlvLiBJZiBgZmFsc2VgLCB0aGUgYHVzZXJuYW1lYCBwcm9wZXJ0eSBpcyBzdG9yZWQgYXMgc2V0LCB3aXRob3V0IGFueSBjYXNlIG1vZGlmaWNhdGlvbnMuIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIGNvbnZlcnRVc2VybmFtZVRvTG93ZXJjYXNlOiA/Ym9vbGVhbjtcbiAgLyogRnVsbCBwYXRoIHRvIHlvdXIgY2xvdWQgY29kZSBtYWluLmpzICovXG4gIGNsb3VkOiA/c3RyaW5nO1xuICAvKiBBIGNvbGxlY3Rpb24gcHJlZml4IGZvciB0aGUgY2xhc3Nlc1xuICA6REVGQVVMVDogJycgKi9cbiAgY29sbGVjdGlvblByZWZpeDogP3N0cmluZztcbiAgLyogS2V5IGZvciBpT1MsIE1hY09TLCB0dk9TIGNsaWVudHMgKi9cbiAgY2xpZW50S2V5OiA/c3RyaW5nO1xuICAvKiBLZXkgZm9yIHRoZSBKYXZhc2NyaXB0IFNESyAqL1xuICBqYXZhc2NyaXB0S2V5OiA/c3RyaW5nO1xuICAvKiBLZXkgZm9yIFVuaXR5IGFuZCAuTmV0IFNESyAqL1xuICBkb3ROZXRLZXk6ID9zdHJpbmc7XG4gIC8qIEtleSBmb3IgZW5jcnlwdGluZyB5b3VyIGZpbGVzXG4gIDpFTlY6IFBBUlNFX1NFUlZFUl9FTkNSWVBUSU9OX0tFWSAqL1xuICBlbmNyeXB0aW9uS2V5OiA/c3RyaW5nO1xuICAvKiBLZXkgZm9yIFJFU1QgY2FsbHNcbiAgOkVOVjogUEFSU0VfU0VSVkVSX1JFU1RfQVBJX0tFWSAqL1xuICByZXN0QVBJS2V5OiA/c3RyaW5nO1xuICAvKiBSZWFkLW9ubHkga2V5LCB3aGljaCBoYXMgdGhlIHNhbWUgY2FwYWJpbGl0aWVzIGFzIE1hc3RlcktleSB3aXRob3V0IHdyaXRlcyAqL1xuICByZWFkT25seU1hc3RlcktleTogP3N0cmluZztcbiAgLyogS2V5IHNlbnQgd2l0aCBvdXRnb2luZyB3ZWJob29rIGNhbGxzICovXG4gIHdlYmhvb2tLZXk6ID9zdHJpbmc7XG4gIC8qIEtleSBmb3IgeW91ciBmaWxlcyAqL1xuICBmaWxlS2V5OiA/c3RyaW5nO1xuICAvKiBFbmFibGUgKG9yIGRpc2FibGUpIHRoZSBhZGRpdGlvbiBvZiBhIHVuaXF1ZSBoYXNoIHRvIHRoZSBmaWxlIG5hbWVzXG4gIDpFTlY6IFBBUlNFX1NFUlZFUl9QUkVTRVJWRV9GSUxFX05BTUVcbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIHByZXNlcnZlRmlsZU5hbWU6ID9ib29sZWFuO1xuICAvKiBQZXJzb25hbGx5IGlkZW50aWZpYWJsZSBpbmZvcm1hdGlvbiBmaWVsZHMgaW4gdGhlIHVzZXIgdGFibGUgdGhlIHNob3VsZCBiZSByZW1vdmVkIGZvciBub24tYXV0aG9yaXplZCB1c2Vycy4gRGVwcmVjYXRlZCBAc2VlIHByb3RlY3RlZEZpZWxkcyAqL1xuICB1c2VyU2Vuc2l0aXZlRmllbGRzOiA/KHN0cmluZ1tdKTtcbiAgLyogUHJvdGVjdGVkIGZpZWxkcyB0aGF0IHNob3VsZCBiZSB0cmVhdGVkIHdpdGggZXh0cmEgc2VjdXJpdHkgd2hlbiBmZXRjaGluZyBkZXRhaWxzLlxuICA6REVGQVVMVDoge1wiX1VzZXJcIjoge1wiKlwiOiBbXCJlbWFpbFwiXX19ICovXG4gIHByb3RlY3RlZEZpZWxkczogP1Byb3RlY3RlZEZpZWxkcztcbiAgLyogRW5hYmxlIChvciBkaXNhYmxlKSBhbm9ueW1vdXMgdXNlcnMsIGRlZmF1bHRzIHRvIHRydWVcbiAgOkVOVjogUEFSU0VfU0VSVkVSX0VOQUJMRV9BTk9OX1VTRVJTXG4gIDpERUZBVUxUOiB0cnVlICovXG4gIGVuYWJsZUFub255bW91c1VzZXJzOiA/Ym9vbGVhbjtcbiAgLyogRW5hYmxlIChvciBkaXNhYmxlKSBjbGllbnQgY2xhc3MgY3JlYXRpb24sIGRlZmF1bHRzIHRvIGZhbHNlXG4gIDpFTlY6IFBBUlNFX1NFUlZFUl9BTExPV19DTElFTlRfQ0xBU1NfQ1JFQVRJT05cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIGFsbG93Q2xpZW50Q2xhc3NDcmVhdGlvbjogP2Jvb2xlYW47XG4gIC8qIEVuYWJsZSAob3IgZGlzYWJsZSkgY3VzdG9tIG9iamVjdElkXG4gIDpFTlY6IFBBUlNFX1NFUlZFUl9BTExPV19DVVNUT01fT0JKRUNUX0lEXG4gIDpERUZBVUxUOiBmYWxzZSAqL1xuICBhbGxvd0N1c3RvbU9iamVjdElkOiA/Ym9vbGVhbjtcbiAgLyogQ29uZmlndXJhdGlvbiBmb3IgeW91ciBhdXRoZW50aWNhdGlvbiBwcm92aWRlcnMsIGFzIHN0cmluZ2lmaWVkIEpTT04uIFNlZSBodHRwOi8vZG9jcy5wYXJzZXBsYXRmb3JtLm9yZy9wYXJzZS1zZXJ2ZXIvZ3VpZGUvI29hdXRoLWFuZC0zcmQtcGFydHktYXV0aGVudGljYXRpb25cbiAgOkVOVjogUEFSU0VfU0VSVkVSX0FVVEhfUFJPVklERVJTICovXG4gIGF1dGg6ID97IFtzdHJpbmddOiBBdXRoQWRhcHRlciB9O1xuICAvKiBFbmFibGUgKG9yIGRpc2FibGUpIGluc2VjdXJlIGF1dGggYWRhcHRlcnMsIGRlZmF1bHRzIHRvIHRydWUuIEluc2VjdXJlIGF1dGggYWRhcHRlcnMgYXJlIGRlcHJlY2F0ZWQgYW5kIGl0IGlzIHJlY29tbWVuZGVkIHRvIGRpc2FibGUgdGhlbS5cbiAgOkVOVjogUEFSU0VfU0VSVkVSX0VOQUJMRV9JTlNFQ1VSRV9BVVRIX0FEQVBURVJTXG4gIDpERUZBVUxUOiB0cnVlICovXG4gIGVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzOiA/Ym9vbGVhbjtcbiAgLyogTWF4IGZpbGUgc2l6ZSBmb3IgdXBsb2FkcywgZGVmYXVsdHMgdG8gMjBtYlxuICA6REVGQVVMVDogMjBtYiAqL1xuICBtYXhVcGxvYWRTaXplOiA/c3RyaW5nO1xuICAvKiBTZXQgdG8gYHRydWVgIHRvIHJlcXVpcmUgdXNlcnMgdG8gdmVyaWZ5IHRoZWlyIGVtYWlsIGFkZHJlc3MgdG8gY29tcGxldGUgdGhlIHNpZ24tdXAgcHJvY2Vzcy4gU3VwcG9ydHMgYSBmdW5jdGlvbiB3aXRoIGEgcmV0dXJuIHZhbHVlIG9mIGB0cnVlYCBvciBgZmFsc2VgIGZvciBjb25kaXRpb25hbCB2ZXJpZmljYXRpb24uXG4gIDxicj48YnI+XG4gIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIHZlcmlmeVVzZXJFbWFpbHM6ID8oYm9vbGVhbiB8IHZvaWQpO1xuICAvKiBTZXQgdG8gYHRydWVgIHRvIHByZXZlbnQgYSB1c2VyIGZyb20gbG9nZ2luZyBpbiBpZiB0aGUgZW1haWwgaGFzIG5vdCB5ZXQgYmVlbiB2ZXJpZmllZCBhbmQgZW1haWwgdmVyaWZpY2F0aW9uIGlzIHJlcXVpcmVkLlxuICA8YnI+PGJyPlxuICBEZWZhdWx0IGlzIGBmYWxzZWAuXG4gIDxicj5cbiAgUmVxdWlyZXMgb3B0aW9uIGB2ZXJpZnlVc2VyRW1haWxzOiB0cnVlYC5cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIHByZXZlbnRMb2dpbldpdGhVbnZlcmlmaWVkRW1haWw6ID9ib29sZWFuO1xuICAvKiBJZiBzZXQgdG8gYHRydWVgIGl0IHByZXZlbnRzIGEgdXNlciBmcm9tIHNpZ25pbmcgdXAgaWYgdGhlIGVtYWlsIGhhcyBub3QgeWV0IGJlZW4gdmVyaWZpZWQgYW5kIGVtYWlsIHZlcmlmaWNhdGlvbiBpcyByZXF1aXJlZC4gSW4gdGhhdCBjYXNlIHRoZSBzZXJ2ZXIgcmVzcG9uZHMgdG8gdGhlIHNpZ24tdXAgd2l0aCBIVFRQIHN0YXR1cyA0MDAgYW5kIGEgUGFyc2UgRXJyb3IgMjA1IGBFTUFJTF9OT1RfRk9VTkRgLiBJZiBzZXQgdG8gYGZhbHNlYCB0aGUgc2VydmVyIHJlc3BvbmRzIHdpdGggSFRUUCBzdGF0dXMgMjAwLCBhbmQgY2xpZW50IFNES3MgcmV0dXJuIGFuIHVuYXV0aGVudGljYXRlZCBQYXJzZSBVc2VyIHdpdGhvdXQgc2Vzc2lvbiB0b2tlbi4gSW4gdGhhdCBjYXNlIHN1YnNlcXVlbnQgcmVxdWVzdHMgZmFpbCB1bnRpbCB0aGUgdXNlcidzIGVtYWlsIGFkZHJlc3MgaXMgdmVyaWZpZWQuXG4gIDxicj48YnI+XG4gIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAgPGJyPlxuICBSZXF1aXJlcyBvcHRpb24gYHZlcmlmeVVzZXJFbWFpbHM6IHRydWVgLlxuICA6REVGQVVMVDogZmFsc2UgKi9cbiAgcHJldmVudFNpZ251cFdpdGhVbnZlcmlmaWVkRW1haWw6ID9ib29sZWFuO1xuICAvKiBTZXQgdGhlIHZhbGlkaXR5IGR1cmF0aW9uIG9mIHRoZSBlbWFpbCB2ZXJpZmljYXRpb24gdG9rZW4gaW4gc2Vjb25kcyBhZnRlciB3aGljaCB0aGUgdG9rZW4gZXhwaXJlcy4gVGhlIHRva2VuIGlzIHVzZWQgaW4gdGhlIGxpbmsgdGhhdCBpcyBzZXQgaW4gdGhlIGVtYWlsLiBBZnRlciB0aGUgdG9rZW4gZXhwaXJlcywgdGhlIGxpbmsgYmVjb21lcyBpbnZhbGlkIGFuZCBhIG5ldyBsaW5rIGhhcyB0byBiZSBzZW50LiBJZiB0aGUgb3B0aW9uIGlzIG5vdCBzZXQgb3Igc2V0IHRvIGB1bmRlZmluZWRgLCB0aGVuIHRoZSB0b2tlbiBuZXZlciBleHBpcmVzLlxuICA8YnI+PGJyPlxuICBGb3IgZXhhbXBsZSwgdG8gZXhwaXJlIHRoZSB0b2tlbiBhZnRlciAyIGhvdXJzLCBzZXQgYSB2YWx1ZSBvZiA3MjAwIHNlY29uZHMgKD0gNjAgc2Vjb25kcyAqIDYwIG1pbnV0ZXMgKiAyIGhvdXJzKS5cbiAgPGJyPjxicj5cbiAgRGVmYXVsdCBpcyBgdW5kZWZpbmVkYC5cbiAgPGJyPlxuICBSZXF1aXJlcyBvcHRpb24gYHZlcmlmeVVzZXJFbWFpbHM6IHRydWVgLlxuICAqL1xuICBlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbjogP251bWJlcjtcbiAgLyogU2V0IHRvIGB0cnVlYCBpZiBhIGVtYWlsIHZlcmlmaWNhdGlvbiB0b2tlbiBzaG91bGQgYmUgcmV1c2VkIGluIGNhc2UgYW5vdGhlciB0b2tlbiBpcyByZXF1ZXN0ZWQgYnV0IHRoZXJlIGlzIGEgdG9rZW4gdGhhdCBpcyBzdGlsbCB2YWxpZCwgaS5lLiBoYXMgbm90IGV4cGlyZWQuIFRoaXMgYXZvaWRzIHRoZSBvZnRlbiBvYnNlcnZlZCBpc3N1ZSB0aGF0IGEgdXNlciByZXF1ZXN0cyBtdWx0aXBsZSBlbWFpbHMgYW5kIGRvZXMgbm90IGtub3cgd2hpY2ggbGluayBjb250YWlucyBhIHZhbGlkIHRva2VuIGJlY2F1c2UgZWFjaCBuZXdseSBnZW5lcmF0ZWQgdG9rZW4gd291bGQgaW52YWxpZGF0ZSB0aGUgcHJldmlvdXMgdG9rZW4uXG4gIDxicj48YnI+XG4gIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAgPGJyPlxuICBSZXF1aXJlcyBvcHRpb24gYHZlcmlmeVVzZXJFbWFpbHM6IHRydWVgLlxuICA6REVGQVVMVDogZmFsc2UgKi9cbiAgZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZDogP2Jvb2xlYW47XG4gIC8qIFNldCB0byBgZmFsc2VgIHRvIHByZXZlbnQgc2VuZGluZyBvZiB2ZXJpZmljYXRpb24gZW1haWwuIFN1cHBvcnRzIGEgZnVuY3Rpb24gd2l0aCBhIHJldHVybiB2YWx1ZSBvZiBgdHJ1ZWAgb3IgYGZhbHNlYCBmb3IgY29uZGl0aW9uYWwgZW1haWwgc2VuZGluZy5cbiAgPGJyPjxicj5cbiAgRGVmYXVsdCBpcyBgdHJ1ZWAuXG4gIDxicj5cbiAgOkRFRkFVTFQ6IHRydWUgKi9cbiAgc2VuZFVzZXJFbWFpbFZlcmlmaWNhdGlvbjogPyhib29sZWFuIHwgdm9pZCk7XG4gIC8qIFRoZSBhY2NvdW50IGxvY2tvdXQgcG9saWN5IGZvciBmYWlsZWQgbG9naW4gYXR0ZW1wdHMuICovXG4gIGFjY291bnRMb2Nrb3V0OiA/QWNjb3VudExvY2tvdXRPcHRpb25zO1xuICAvKiBUaGUgcGFzc3dvcmQgcG9saWN5IGZvciBlbmZvcmNpbmcgcGFzc3dvcmQgcmVsYXRlZCBydWxlcy4gKi9cbiAgcGFzc3dvcmRQb2xpY3k6ID9QYXNzd29yZFBvbGljeU9wdGlvbnM7XG4gIC8qIEFkYXB0ZXIgbW9kdWxlIGZvciB0aGUgY2FjaGUgKi9cbiAgY2FjaGVBZGFwdGVyOiA/QWRhcHRlcjxDYWNoZUFkYXB0ZXI+O1xuICAvKiBBZGFwdGVyIG1vZHVsZSBmb3IgZW1haWwgc2VuZGluZyAqL1xuICBlbWFpbEFkYXB0ZXI6ID9BZGFwdGVyPE1haWxBZGFwdGVyPjtcbiAgLyogSWYgc2V0IHRvIGB0cnVlYCwgYSBgUGFyc2UuT2JqZWN0YCB0aGF0IGlzIGluIHRoZSBwYXlsb2FkIHdoZW4gY2FsbGluZyBhIENsb3VkIEZ1bmN0aW9uIHdpbGwgYmUgY29udmVydGVkIHRvIGFuIGluc3RhbmNlIG9mIGBQYXJzZS5PYmplY3RgLiBJZiBgZmFsc2VgLCB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGNvbnZlcnRlZCBhbmQgaW5zdGVhZCBiZSBhIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0LCB3aGljaCBjb250YWlucyB0aGUgcmF3IGRhdGEgb2YgYSBgUGFyc2UuT2JqZWN0YCBidXQgaXMgbm90IGFuIGFjdHVhbCBpbnN0YW5jZSBvZiBgUGFyc2UuT2JqZWN0YC4gRGVmYXVsdCBpcyBgZmFsc2VgLiA8YnI+PGJyPuKEue+4jyBUaGUgZXhwZWN0ZWQgYmVoYXZpb3Igd291bGQgYmUgdGhhdCB0aGUgb2JqZWN0IGlzIGNvbnZlcnRlZCB0byBhbiBpbnN0YW5jZSBvZiBgUGFyc2UuT2JqZWN0YCwgc28geW91IHdvdWxkIG5vcm1hbGx5IHNldCB0aGlzIG9wdGlvbiB0byBgdHJ1ZWAuIFRoZSBkZWZhdWx0IGlzIGBmYWxzZWAgYmVjYXVzZSB0aGlzIGlzIGEgdGVtcG9yYXJ5IG9wdGlvbiB0aGF0IGhhcyBiZWVuIGludHJvZHVjZWQgdG8gYXZvaWQgYSBicmVha2luZyBjaGFuZ2Ugd2hlbiBmaXhpbmcgYSBidWcgd2hlcmUgSmF2YVNjcmlwdCBvYmplY3RzIGFyZSBub3QgY29udmVydGVkIHRvIGFjdHVhbCBpbnN0YW5jZXMgb2YgYFBhcnNlLk9iamVjdGAuXG4gIDpERUZBVUxUOiB0cnVlICovXG4gIGVuY29kZVBhcnNlT2JqZWN0SW5DbG91ZEZ1bmN0aW9uOiA/Ym9vbGVhbjtcbiAgLyogUHVibGljIFVSTCB0byB5b3VyIHBhcnNlIHNlcnZlciB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly8uXG4gIDpFTlY6IFBBUlNFX1BVQkxJQ19TRVJWRVJfVVJMICovXG4gIHB1YmxpY1NlcnZlclVSTDogP3N0cmluZztcbiAgLyogVGhlIG9wdGlvbnMgZm9yIHBhZ2VzIHN1Y2ggYXMgcGFzc3dvcmQgcmVzZXQgYW5kIGVtYWlsIHZlcmlmaWNhdGlvbi5cbiAgOkRFRkFVTFQ6IHt9ICovXG4gIHBhZ2VzOiA/UGFnZXNPcHRpb25zO1xuICAvKiBjdXN0b20gcGFnZXMgZm9yIHBhc3N3b3JkIHZhbGlkYXRpb24gYW5kIHJlc2V0XG4gIDpERUZBVUxUOiB7fSAqL1xuICBjdXN0b21QYWdlczogP0N1c3RvbVBhZ2VzT3B0aW9ucztcbiAgLyogcGFyc2Utc2VydmVyJ3MgTGl2ZVF1ZXJ5IGNvbmZpZ3VyYXRpb24gb2JqZWN0ICovXG4gIGxpdmVRdWVyeTogP0xpdmVRdWVyeU9wdGlvbnM7XG4gIC8qIFNlc3Npb24gZHVyYXRpb24sIGluIHNlY29uZHMsIGRlZmF1bHRzIHRvIDEgeWVhclxuICA6REVGQVVMVDogMzE1MzYwMDAgKi9cbiAgc2Vzc2lvbkxlbmd0aDogP251bWJlcjtcbiAgLyogV2hldGhlciBQYXJzZSBTZXJ2ZXIgc2hvdWxkIGF1dG9tYXRpY2FsbHkgZXh0ZW5kIGEgdmFsaWQgc2Vzc2lvbiBieSB0aGUgc2Vzc2lvbkxlbmd0aC4gSW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2Vzc2lvbiB1cGRhdGVzIGluIHRoZSBkYXRhYmFzZSwgYSBzZXNzaW9uIHdpbGwgb25seSBiZSBleHRlbmRlZCB3aGVuIGEgcmVxdWVzdCBpcyByZWNlaXZlZCBhZnRlciBhdCBsZWFzdCBoYWxmIG9mIHRoZSBjdXJyZW50IHNlc3Npb24ncyBsaWZldGltZSBoYXMgcGFzc2VkLlxuICA6REVGQVVMVDogZmFsc2UgKi9cbiAgZXh0ZW5kU2Vzc2lvbk9uVXNlOiA/Ym9vbGVhbjtcbiAgLyogRGVmYXVsdCB2YWx1ZSBmb3IgbGltaXQgb3B0aW9uIG9uIHF1ZXJpZXMsIGRlZmF1bHRzIHRvIGAxMDBgLlxuICA6REVGQVVMVDogMTAwICovXG4gIGRlZmF1bHRMaW1pdDogP251bWJlcjtcbiAgLyogTWF4IHZhbHVlIGZvciBsaW1pdCBvcHRpb24gb24gcXVlcmllcywgZGVmYXVsdHMgdG8gdW5saW1pdGVkICovXG4gIG1heExpbWl0OiA/bnVtYmVyO1xuICAvKiBTZXRzIHdoZXRoZXIgd2Ugc2hvdWxkIGV4cGlyZSB0aGUgaW5hY3RpdmUgc2Vzc2lvbnMsIGRlZmF1bHRzIHRvIHRydWUuIElmIGZhbHNlLCBhbGwgbmV3IHNlc3Npb25zIGFyZSBjcmVhdGVkIHdpdGggbm8gZXhwaXJhdGlvbiBkYXRlLlxuICA6REVGQVVMVDogdHJ1ZSAqL1xuICBleHBpcmVJbmFjdGl2ZVNlc3Npb25zOiA/Ym9vbGVhbjtcbiAgLyogV2hlbiBhIHVzZXIgY2hhbmdlcyB0aGVpciBwYXNzd29yZCwgZWl0aGVyIHRocm91Z2ggdGhlIHJlc2V0IHBhc3N3b3JkIGVtYWlsIG9yIHdoaWxlIGxvZ2dlZCBpbiwgYWxsIHNlc3Npb25zIGFyZSByZXZva2VkIGlmIHRoaXMgaXMgdHJ1ZS4gU2V0IHRvIGZhbHNlIGlmIHlvdSBkb24ndCB3YW50IHRvIHJldm9rZSBzZXNzaW9ucy5cbiAgOkRFRkFVTFQ6IHRydWUgKi9cbiAgcmV2b2tlU2Vzc2lvbk9uUGFzc3dvcmRSZXNldDogP2Jvb2xlYW47XG4gIC8qIFNldHMgdGhlIFRUTCBmb3IgdGhlIGluIG1lbW9yeSBjYWNoZSAoaW4gbXMpLCBkZWZhdWx0cyB0byA1MDAwICg1IHNlY29uZHMpXG4gIDpERUZBVUxUOiA1MDAwICovXG4gIGNhY2hlVFRMOiA/bnVtYmVyO1xuICAvKiBTZXRzIHRoZSBtYXhpbXVtIHNpemUgZm9yIHRoZSBpbiBtZW1vcnkgY2FjaGUsIGRlZmF1bHRzIHRvIDEwMDAwXG4gIDpERUZBVUxUOiAxMDAwMCAqL1xuICBjYWNoZU1heFNpemU6ID9udW1iZXI7XG4gIC8qIFNldCB0byBgdHJ1ZWAgaWYgUGFyc2UgcmVxdWVzdHMgd2l0aGluIHRoZSBzYW1lIE5vZGUuanMgZW52aXJvbm1lbnQgYXMgUGFyc2UgU2VydmVyIHNob3VsZCBiZSByb3V0ZWQgdG8gUGFyc2UgU2VydmVyIGRpcmVjdGx5IGluc3RlYWQgb2YgdmlhIHRoZSBIVFRQIGludGVyZmFjZS4gRGVmYXVsdCBpcyBgZmFsc2VgLlxuICA8YnI+PGJyPlxuICBJZiBzZXQgdG8gYGZhbHNlYCB0aGVuIFBhcnNlIHJlcXVlc3RzIHdpdGhpbiB0aGUgc2FtZSBOb2RlLmpzIGVudmlyb25tZW50IGFzIFBhcnNlIFNlcnZlciBhcmUgZXhlY3V0ZWQgYXMgSFRUUCByZXF1ZXN0cyBzZW50IHRvIFBhcnNlIFNlcnZlciB2aWEgdGhlIGBzZXJ2ZXJVUkxgLiBGb3IgZXhhbXBsZSwgYSBgUGFyc2UuUXVlcnlgIGluIENsb3VkIENvZGUgaXMgY2FsbGluZyBQYXJzZSBTZXJ2ZXIgdmlhIGEgSFRUUCByZXF1ZXN0LiBUaGUgc2VydmVyIGlzIGVzc2VudGlhbGx5IG1ha2luZyBhIEhUVFAgcmVxdWVzdCB0byBpdHNlbGYsIHVubmVjZXNzYXJpbHkgdXNpbmcgbmV0d29yayByZXNvdXJjZXMgc3VjaCBhcyBuZXR3b3JrIHBvcnRzLlxuICA8YnI+PGJyPlxuICDimqDvuI8gSW4gZW52aXJvbm1lbnRzIHdoZXJlIG11bHRpcGxlIFBhcnNlIFNlcnZlciBpbnN0YW5jZXMgcnVuIGJlaGluZCBhIGxvYWQgYmFsYW5jZXIgYW5kIFBhcnNlIHJlcXVlc3RzIHdpdGhpbiB0aGUgY3VycmVudCBOb2RlLmpzIGVudmlyb25tZW50IHNob3VsZCBiZSByb3V0ZWQgdmlhIHRoZSBsb2FkIGJhbGFuY2VyIGFuZCBkaXN0cmlidXRlZCBhcyBIVFRQIHJlcXVlc3RzIGFtb25nIGFsbCBpbnN0YW5jZXMgdmlhIHRoZSBgc2VydmVyVVJMYCwgdGhpcyBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuXG4gIDpERUZBVUxUOiB0cnVlICovXG4gIGRpcmVjdEFjY2VzczogP2Jvb2xlYW47XG4gIC8qIEVuYWJsZXMgdGhlIGRlZmF1bHQgZXhwcmVzcyBlcnJvciBoYW5kbGVyIGZvciBhbGwgZXJyb3JzXG4gIDpERUZBVUxUOiBmYWxzZSAqL1xuICBlbmFibGVFeHByZXNzRXJyb3JIYW5kbGVyOiA/Ym9vbGVhbjtcbiAgLyogU2V0cyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gZ2VuZXJhdGVkIG9iamVjdCBpZCdzLCBkZWZhdWx0IDEwXG4gIDpERUZBVUxUOiAxMCAqL1xuICBvYmplY3RJZFNpemU6ID9udW1iZXI7XG4gIC8qIFRoZSBwb3J0IHRvIHJ1biB0aGUgUGFyc2VTZXJ2ZXIsIGRlZmF1bHRzIHRvIDEzMzcuXG4gIDpFTlY6IFBPUlRcbiAgOkRFRkFVTFQ6IDEzMzcgKi9cbiAgcG9ydDogP251bWJlcjtcbiAgLyogVGhlIGhvc3QgdG8gc2VydmUgUGFyc2VTZXJ2ZXIgb24sIGRlZmF1bHRzIHRvIDAuMC4wLjBcbiAgOkRFRkFVTFQ6IDAuMC4wLjAgKi9cbiAgaG9zdDogP3N0cmluZztcbiAgLyogTW91bnQgcGF0aCBmb3IgdGhlIHNlcnZlciwgZGVmYXVsdHMgdG8gL3BhcnNlXG4gIDpERUZBVUxUOiAvcGFyc2UgKi9cbiAgbW91bnRQYXRoOiA/c3RyaW5nO1xuICAvKiBSdW4gd2l0aCBjbHVzdGVyLCBvcHRpb25hbGx5IHNldCB0aGUgbnVtYmVyIG9mIHByb2Nlc3NlcyBkZWZhdWx0IHRvIG9zLmNwdXMoKS5sZW5ndGggKi9cbiAgY2x1c3RlcjogP051bWJlck9yQm9vbGVhbjtcbiAgLyogbWlkZGxld2FyZSBmb3IgZXhwcmVzcyBzZXJ2ZXIsIGNhbiBiZSBzdHJpbmcgb3IgZnVuY3Rpb24gKi9cbiAgbWlkZGxld2FyZTogPygoKCkgPT4gdm9pZCkgfCBzdHJpbmcpO1xuICAvKiBUaGUgdHJ1c3QgcHJveHkgc2V0dGluZ3MuIEl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBzZXR1cCBvZiB0aGUgcmV2ZXJzZSBwcm94eSwgc2luY2UgdGhpcyBzZXR0aW5nIHdpbGwgdHJ1c3QgdmFsdWVzIHByb3ZpZGVkIGluIHRoZSBQYXJzZSBTZXJ2ZXIgQVBJIHJlcXVlc3QuIFNlZSB0aGUgPGEgaHJlZj1cImh0dHBzOi8vZXhwcmVzc2pzLmNvbS9lbi9ndWlkZS9iZWhpbmQtcHJveGllcy5odG1sXCI+ZXhwcmVzcyB0cnVzdCBwcm94eSBzZXR0aW5nczwvYT4gZG9jdW1lbnRhdGlvbi4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIHRydXN0UHJveHk6ID9hbnk7XG4gIC8qIFN0YXJ0cyB0aGUgbGl2ZVF1ZXJ5IHNlcnZlciAqL1xuICBzdGFydExpdmVRdWVyeVNlcnZlcjogP2Jvb2xlYW47XG4gIC8qIExpdmUgcXVlcnkgc2VydmVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAod2lsbCBzdGFydCB0aGUgbGl2ZVF1ZXJ5IHNlcnZlcikgKi9cbiAgbGl2ZVF1ZXJ5U2VydmVyT3B0aW9uczogP0xpdmVRdWVyeVNlcnZlck9wdGlvbnM7XG4gIC8qIE9wdGlvbnMgZm9yIHJlcXVlc3QgaWRlbXBvdGVuY3kgdG8gZGVkdXBsaWNhdGUgaWRlbnRpY2FsIHJlcXVlc3RzIHRoYXQgbWF5IGJlIGNhdXNlZCBieSBuZXR3b3JrIGlzc3Vlcy4gQ2F1dGlvbiwgdGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZSB0aGF0IG1heSBub3QgYmUgYXBwcm9wcmlhdGUgZm9yIHByb2R1Y3Rpb24uXG4gIDpFTlY6IFBBUlNFX1NFUlZFUl9FWFBFUklNRU5UQUxfSURFTVBPVEVOQ1lfT1BUSU9OU1xuICA6REVGQVVMVDogZmFsc2UgKi9cbiAgaWRlbXBvdGVuY3lPcHRpb25zOiA/SWRlbXBvdGVuY3lPcHRpb25zO1xuICAvKiBPcHRpb25zIGZvciBmaWxlIHVwbG9hZHNcbiAgOkVOVjogUEFSU0VfU0VSVkVSX0ZJTEVfVVBMT0FEX09QVElPTlNcbiAgOkRFRkFVTFQ6IHt9ICovXG4gIGZpbGVVcGxvYWQ6ID9GaWxlVXBsb2FkT3B0aW9ucztcbiAgLyogRnVsbCBwYXRoIHRvIHlvdXIgR3JhcGhRTCBjdXN0b20gc2NoZW1hLmdyYXBocWwgZmlsZSAqL1xuICBncmFwaFFMU2NoZW1hOiA/c3RyaW5nO1xuICAvKiBNb3VudHMgdGhlIEdyYXBoUUwgZW5kcG9pbnRcbiAgOkVOVjogUEFSU0VfU0VSVkVSX01PVU5UX0dSQVBIUUxcbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIG1vdW50R3JhcGhRTDogP2Jvb2xlYW47XG4gIC8qIE1vdW50IHBhdGggZm9yIHRoZSBHcmFwaFFMIGVuZHBvaW50LCBkZWZhdWx0cyB0byAvZ3JhcGhxbFxuICA6RU5WOiBQQVJTRV9TRVJWRVJfR1JBUEhRTF9QQVRIXG4gIDpERUZBVUxUOiAvZ3JhcGhxbCAqL1xuICBncmFwaFFMUGF0aDogP3N0cmluZztcbiAgLyogRW5hYmxlIHB1YmxpYyBpbnRyb3NwZWN0aW9uIGZvciB0aGUgR3JhcGhRTCBlbmRwb2ludCwgZGVmYXVsdHMgdG8gZmFsc2VcbiAgOkVOVjogUEFSU0VfU0VSVkVSX0dSQVBIUUxfUFVCTElDX0lOVFJPU1BFQ1RJT05cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIGdyYXBoUUxQdWJsaWNJbnRyb3NwZWN0aW9uOiA/Ym9vbGVhbjtcbiAgLyogTW91bnRzIHRoZSBHcmFwaFFMIFBsYXlncm91bmQgLSBuZXZlciB1c2UgdGhpcyBvcHRpb24gaW4gcHJvZHVjdGlvblxuICA6RU5WOiBQQVJTRV9TRVJWRVJfTU9VTlRfUExBWUdST1VORFxuICA6REVGQVVMVDogZmFsc2UgKi9cbiAgbW91bnRQbGF5Z3JvdW5kOiA/Ym9vbGVhbjtcbiAgLyogTW91bnQgcGF0aCBmb3IgdGhlIEdyYXBoUUwgUGxheWdyb3VuZCwgZGVmYXVsdHMgdG8gL3BsYXlncm91bmRcbiAgOkVOVjogUEFSU0VfU0VSVkVSX1BMQVlHUk9VTkRfUEFUSFxuICA6REVGQVVMVDogL3BsYXlncm91bmQgKi9cbiAgcGxheWdyb3VuZFBhdGg6ID9zdHJpbmc7XG4gIC8qIERlZmluZWQgc2NoZW1hXG4gIDpFTlY6IFBBUlNFX1NFUlZFUl9TQ0hFTUFcbiAgKi9cbiAgc2NoZW1hOiA/U2NoZW1hT3B0aW9ucztcbiAgLyogQ2FsbGJhY2sgd2hlbiBzZXJ2ZXIgaGFzIGNsb3NlZCAqL1xuICBzZXJ2ZXJDbG9zZUNvbXBsZXRlOiA/KCkgPT4gdm9pZDtcbiAgLyogVGhlIHNlY3VyaXR5IG9wdGlvbnMgdG8gaWRlbnRpZnkgYW5kIHJlcG9ydCB3ZWFrIHNlY3VyaXR5IHNldHRpbmdzLlxuICA6REVGQVVMVDoge30gKi9cbiAgc2VjdXJpdHk6ID9TZWN1cml0eU9wdGlvbnM7XG4gIC8qIFNldCB0byB0cnVlIGlmIG5ldyB1c2VycyBzaG91bGQgYmUgY3JlYXRlZCB3aXRob3V0IHB1YmxpYyByZWFkIGFuZCB3cml0ZSBhY2Nlc3MuXG4gIDpERUZBVUxUOiB0cnVlICovXG4gIGVuZm9yY2VQcml2YXRlVXNlcnM6ID9ib29sZWFuO1xuICAvKiBBbGxvdyBhIHVzZXIgdG8gbG9nIGluIGV2ZW4gaWYgdGhlIDNyZCBwYXJ0eSBhdXRoZW50aWNhdGlvbiB0b2tlbiB0aGF0IHdhcyB1c2VkIHRvIHNpZ24gaW4gdG8gdGhlaXIgYWNjb3VudCBoYXMgZXhwaXJlZC4gSWYgdGhpcyBpcyBzZXQgdG8gYGZhbHNlYCwgdGhlbiB0aGUgdG9rZW4gd2lsbCBiZSB2YWxpZGF0ZWQgZXZlcnkgdGltZSB0aGUgdXNlciBzaWducyBpbiB0byB0aGVpciBhY2NvdW50LiBUaGlzIHJlZmVycyB0byB0aGUgdG9rZW4gdGhhdCBpcyBzdG9yZWQgaW4gdGhlIGBfVXNlci5hdXRoRGF0YWAgZmllbGQuIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gIDpERUZBVUxUOiBmYWxzZSAqL1xuICBhbGxvd0V4cGlyZWRBdXRoRGF0YVRva2VuOiA/Ym9vbGVhbjtcbiAgLyogQW4gYXJyYXkgb2Yga2V5cyBhbmQgdmFsdWVzIHRoYXQgYXJlIHByb2hpYml0ZWQgaW4gZGF0YWJhc2UgcmVhZCBhbmQgd3JpdGUgcmVxdWVzdHMgdG8gcHJldmVudCBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBJdCBpcyBwb3NzaWJsZSB0byBzcGVjaWZ5IG9ubHkgYSBrZXkgKGB7XCJrZXlcIjpcIi4uLlwifWApLCBvbmx5IGEgdmFsdWUgKGB7XCJ2YWx1ZVwiOlwiLi4uXCJ9YCkgb3IgYSBrZXktdmFsdWUgcGFpciAoYHtcImtleVwiOlwiLi4uXCIsXCJ2YWx1ZVwiOlwiLi4uXCJ9YCkuIFRoZSBzcGVjaWZpY2F0aW9uIGNhbiB1c2UgdGhlIGZvbGxvd2luZyB0eXBlczogYGJvb2xlYW5gLCBgbnVtZXJpY2Agb3IgYHN0cmluZ2AsIHdoZXJlIGBzdHJpbmdgIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYSByZWdleCBub3RhdGlvbi4gUmVxdWVzdCBkYXRhIGlzIGRlZXAtc2Nhbm5lZCBmb3IgbWF0Y2hpbmcgZGVmaW5pdGlvbnMgdG8gZGV0ZWN0IGFsc28gYW55IG5lc3RlZCBvY2N1cnJlbmNlcy4gRGVmYXVsdHMgYXJlIHBhdHRlcm5zIHRoYXQgYXJlIGxpa2VseSB0byBiZSB1c2VkIGluIG1hbGljaW91cyByZXF1ZXN0cy4gU2V0dGluZyB0aGlzIG9wdGlvbiB3aWxsIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHBhdHRlcm5zLlxuICA6REVGQVVMVDogW3tcImtleVwiOlwiX2Jzb250eXBlXCIsXCJ2YWx1ZVwiOlwiQ29kZVwifSx7XCJrZXlcIjpcImNvbnN0cnVjdG9yXCJ9LHtcImtleVwiOlwiX19wcm90b19fXCJ9XSAqL1xuICByZXF1ZXN0S2V5d29yZERlbnlsaXN0OiA/KFJlcXVlc3RLZXl3b3JkRGVueWxpc3RbXSk7XG4gIC8qIE9wdGlvbnMgdG8gbGltaXQgcmVwZWF0ZWQgcmVxdWVzdHMgdG8gUGFyc2UgU2VydmVyIEFQSXMuIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJvdGVjdCBzZW5zaXRpdmUgZW5kcG9pbnRzIHN1Y2ggYXMgYC9yZXF1ZXN0UGFzc3dvcmRSZXNldGAgZnJvbSBicnV0ZS1mb3JjZSBhdHRhY2tzIG9yIFBhcnNlIFNlcnZlciBhcyBhIHdob2xlIGZyb20gZGVuaWFsLW9mLXNlcnZpY2UgKERvUykgYXR0YWNrcy48YnI+PGJyPuKEue+4jyBNaW5kIHRoZSBmb2xsb3dpbmcgbGltaXRhdGlvbnM6PGJyPi0gcmF0ZSBsaW1pdHMgYXBwbGllZCBwZXIgSVAgYWRkcmVzczsgdGhpcyBsaW1pdHMgcHJvdGVjdGlvbiBhZ2FpbnN0IGRpc3RyaWJ1dGVkIGRlbmlhbC1vZi1zZXJ2aWNlIChERG9TKSBhdHRhY2tzIHdoZXJlIG1hbnkgcmVxdWVzdHMgYXJlIGNvbWluZyBmcm9tIHZhcmlvdXMgSVAgYWRkcmVzc2VzPGJyPi0gaWYgbXVsdGlwbGUgUGFyc2UgU2VydmVyIGluc3RhbmNlcyBhcmUgYmVoaW5kIGEgbG9hZCBiYWxhbmNlciBvciByYW4gaW4gYSBjbHVzdGVyLCBlYWNoIGluc3RhbmNlIHdpbGwgY2FsY3VsYXRlIGl0J3Mgb3duIHJlcXVlc3QgcmF0ZXMsIGluZGVwZW5kZW50IGZyb20gb3RoZXIgaW5zdGFuY2VzOyB0aGlzIGxpbWl0cyB0aGUgYXBwbGljYWJpbGl0eSBvZiB0aGlzIGZlYXR1cmUgd2hlbiB1c2luZyBhIGxvYWQgYmFsYW5jZXIgYW5kIGFub3RoZXIgcmF0ZSBsaW1pdGluZyBzb2x1dGlvbiB0aGF0IHRha2VzIHJlcXVlc3RzIGFjcm9zcyBhbGwgaW5zdGFuY2VzIGludG8gYWNjb3VudCBtYXkgYmUgbW9yZSBzdWl0YWJsZTxicj4tIHRoaXMgZmVhdHVyZSBwcm92aWRlcyBiYXNpYyBwcm90ZWN0aW9uIGFnYWluc3QgZGVuaWFsLW9mLXNlcnZpY2UgYXR0YWNrcywgYnV0IGEgbW9yZSBzb3BoaXN0aWNhdGVkIHNvbHV0aW9uIHdvcmtzIGVhcmxpZXIgaW4gdGhlIHJlcXVlc3QgZmxvdyBhbmQgcHJldmVudHMgYSBtYWxpY2lvdXMgcmVxdWVzdHMgdG8gZXZlbiByZWFjaCBhIHNlcnZlciBpbnN0YW5jZTsgaXQncyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gaW1wbGVtZW50IGEgc29sdXRpb24gYWNjb3JkaW5nIHRvIGFyY2hpdGVjdHVyZSBhbmQgdXNlciBjYXNlLlxuICA6REVGQVVMVDogW10gKi9cbiAgcmF0ZUxpbWl0OiA/KFJhdGVMaW1pdE9wdGlvbnNbXSk7XG4gIC8qIE9wdGlvbnMgdG8gY3VzdG9taXplIHRoZSByZXF1ZXN0IGNvbnRleHQgdXNpbmcgaW52ZXJzaW9uIG9mIGNvbnRyb2wvZGVwZW5kZW5jeSBpbmplY3Rpb24uKi9cbiAgcmVxdWVzdENvbnRleHRNaWRkbGV3YXJlOiA/KChyZXE6IGFueSwgcmVzOiBhbnksIG5leHQ6IGFueSkgPT4gdm9pZCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmF0ZUxpbWl0T3B0aW9ucyB7XG4gIC8qIFRoZSBwYXRoIG9mIHRoZSBBUEkgcm91dGUgdG8gYmUgcmF0ZSBsaW1pdGVkLiBSb3V0ZSBwYXRocywgaW4gY29tYmluYXRpb24gd2l0aCBhIHJlcXVlc3QgbWV0aG9kLCBkZWZpbmUgdGhlIGVuZHBvaW50cyBhdCB3aGljaCByZXF1ZXN0cyBjYW4gYmUgbWFkZS4gUm91dGUgcGF0aHMgY2FuIGJlIHN0cmluZ3MsIHN0cmluZyBwYXR0ZXJucywgb3IgcmVndWxhciBleHByZXNzaW9uLiBTZWU6IGh0dHBzOi8vZXhwcmVzc2pzLmNvbS9lbi9ndWlkZS9yb3V0aW5nLmh0bWwgKi9cbiAgcmVxdWVzdFBhdGg6IHN0cmluZztcbiAgLyogVGhlIHdpbmRvdyBvZiB0aW1lIGluIG1pbGxpc2Vjb25kcyB3aXRoaW4gd2hpY2ggdGhlIG51bWJlciBvZiByZXF1ZXN0cyBzZXQgaW4gYHJlcXVlc3RDb3VudGAgY2FuIGJlIG1hZGUgYmVmb3JlIHRoZSByYXRlIGxpbWl0IGlzIGFwcGxpZWQuICovXG4gIHJlcXVlc3RUaW1lV2luZG93OiA/bnVtYmVyO1xuICAvKiBUaGUgbnVtYmVyIG9mIHJlcXVlc3RzIHRoYXQgY2FuIGJlIG1hZGUgcGVyIElQIGFkZHJlc3Mgd2l0aGluIHRoZSB0aW1lIHdpbmRvdyBzZXQgaW4gYHJlcXVlc3RUaW1lV2luZG93YCBiZWZvcmUgdGhlIHJhdGUgbGltaXQgaXMgYXBwbGllZC4gKi9cbiAgcmVxdWVzdENvdW50OiA/bnVtYmVyO1xuICAvKiBUaGUgZXJyb3IgbWVzc2FnZSB0aGF0IHNob3VsZCBiZSByZXR1cm5lZCBpbiB0aGUgYm9keSBvZiB0aGUgSFRUUCA0MjkgcmVzcG9uc2Ugd2hlbiB0aGUgcmF0ZSBsaW1pdCBpcyBoaXQuIERlZmF1bHQgaXMgYFRvbyBtYW55IHJlcXVlc3RzLmAuXG4gIDpERUZBVUxUOiBUb28gbWFueSByZXF1ZXN0cy4gKi9cbiAgZXJyb3JSZXNwb25zZU1lc3NhZ2U6ID9zdHJpbmc7XG4gIC8qIE9wdGlvbmFsLCB0aGUgSFRUUCByZXF1ZXN0IG1ldGhvZHMgdG8gd2hpY2ggdGhlIHJhdGUgbGltaXQgc2hvdWxkIGJlIGFwcGxpZWQsIGRlZmF1bHQgaXMgYWxsIG1ldGhvZHMuICovXG4gIHJlcXVlc3RNZXRob2RzOiA/KHN0cmluZ1tdKTtcbiAgLyogT3B0aW9uYWwsIGlmIGB0cnVlYCB0aGUgcmF0ZSBsaW1pdCB3aWxsIGFsc28gYXBwbHkgdG8gcmVxdWVzdHMgdXNpbmcgdGhlIGBtYXN0ZXJLZXlgLCBkZWZhdWx0IGlzIGBmYWxzZWAuIE5vdGUgdGhhdCBhIHB1YmxpYyBDbG91ZCBDb2RlIGZ1bmN0aW9uIHRoYXQgdHJpZ2dlcnMgaW50ZXJuYWwgcmVxdWVzdHMgdXNpbmcgdGhlIGBtYXN0ZXJLZXlgIG1heSBjaXJjdW12ZW50IHJhdGUgbGltaXRpbmcgYW5kIGJlIHZ1bG5lcmFibGUgdG8gYXR0YWNrcy5cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIGluY2x1ZGVNYXN0ZXJLZXk6ID9ib29sZWFuO1xuICAvKiBPcHRpb25hbCwgaWYgYHRydWVgIHRoZSByYXRlIGxpbWl0IHdpbGwgYWxzbyBhcHBseSB0byByZXF1ZXN0cyB0aGF0IGFyZSBtYWRlIGluIGJ5IENsb3VkIENvZGUsIGRlZmF1bHQgaXMgYGZhbHNlYC4gTm90ZSB0aGF0IGEgcHVibGljIENsb3VkIENvZGUgZnVuY3Rpb24gdGhhdCB0cmlnZ2VycyBpbnRlcm5hbCByZXF1ZXN0cyBtYXkgY2lyY3VtdmVudCByYXRlIGxpbWl0aW5nIGFuZCBiZSB2dWxuZXJhYmxlIHRvIGF0dGFja3MuXG4gIDpERUZBVUxUOiBmYWxzZSAqL1xuICBpbmNsdWRlSW50ZXJuYWxSZXF1ZXN0czogP2Jvb2xlYW47XG4gIC8qIE9wdGlvbmFsLCB0aGUgVVJMIG9mIHRoZSBSZWRpcyBzZXJ2ZXIgdG8gc3RvcmUgcmF0ZSBsaW1pdCBkYXRhLiBUaGlzIGFsbG93cyB0byByYXRlIGxpbWl0IHJlcXVlc3RzIGZvciBtdWx0aXBsZSBzZXJ2ZXJzIGJ5IGNhbGN1bGF0aW5nIHRoZSBzdW0gb2YgYWxsIHJlcXVlc3RzIGFjcm9zcyBhbGwgc2VydmVycy4gVGhpcyBpcyB1c2VmdWwgaWYgbXVsdGlwbGUgc2VydmVycyBhcmUgcHJvY2Vzc2luZyByZXF1ZXN0cyBiZWhpbmQgYSBsb2FkIGJhbGFuY2VyLiBGb3IgZXhhbXBsZSwgdGhlIGxpbWl0IG9mIDEwIHJlcXVlc3RzIGlzIHJlYWNoZWQgaWYgZWFjaCBvZiAyIHNlcnZlcnMgcHJvY2Vzc2VkIDUgcmVxdWVzdHMuXG4gICAqL1xuICByZWRpc1VybDogP3N0cmluZztcbiAgLypcbiAgVGhlIHR5cGUgb2YgcmF0ZSBsaW1pdCB0byBhcHBseS4gVGhlIGZvbGxvd2luZyB0eXBlcyBhcmUgc3VwcG9ydGVkOlxuICA8YnI+PGJyPlxuICAtIGBnbG9iYWxgOiByYXRlIGxpbWl0IGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgcmVxdWVzdHMgbWFkZSBieSBhbGwgdXNlcnMgPGJyPlxuICAtIGBpcGA6IHJhdGUgbGltaXQgYmFzZWQgb24gdGhlIElQIGFkZHJlc3Mgb2YgdGhlIHJlcXVlc3QgPGJyPlxuICAtIGB1c2VyYDogcmF0ZSBsaW1pdCBiYXNlZCBvbiB0aGUgdXNlciBJRCBvZiB0aGUgcmVxdWVzdCA8YnI+XG4gIC0gYHNlc3Npb25gOiByYXRlIGxpbWl0IGJhc2VkIG9uIHRoZSBzZXNzaW9uIHRva2VuIG9mIHRoZSByZXF1ZXN0IDxicj5cbiAgPGJyPjxicj5cbiAgOmRlZmF1bHQ6ICdpcCdcbiAgKi9cbiAgem9uZTogP3N0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWN1cml0eU9wdGlvbnMge1xuICAvKiBJcyB0cnVlIGlmIFBhcnNlIFNlcnZlciBzaG91bGQgY2hlY2sgZm9yIHdlYWsgc2VjdXJpdHkgc2V0dGluZ3MuXG4gIDpERUZBVUxUOiBmYWxzZSAqL1xuICBlbmFibGVDaGVjazogP2Jvb2xlYW47XG4gIC8qIElzIHRydWUgaWYgdGhlIHNlY3VyaXR5IGNoZWNrIHJlcG9ydCBzaG91bGQgYmUgd3JpdHRlbiB0byBsb2dzLiBUaGlzIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgdGVtcG9yYXJpbHkgdG8gbm90IGV4cG9zZSB3ZWFrIHNlY3VyaXR5IHNldHRpbmdzIGluIGxvZ3MuXG4gIDpERUZBVUxUOiBmYWxzZSAqL1xuICBlbmFibGVDaGVja0xvZzogP2Jvb2xlYW47XG4gIC8qIFRoZSBzZWN1cml0eSBjaGVjayBncm91cHMgdG8gcnVuLiBUaGlzIGFsbG93cyB0byBhZGQgY3VzdG9tIHNlY3VyaXR5IGNoZWNrcyBvciBvdmVycmlkZSBleGlzdGluZyBvbmVzLiBEZWZhdWx0IGFyZSB0aGUgZ3JvdXBzIGRlZmluZWQgaW4gYENoZWNrR3JvdXBzLmpzYC4gKi9cbiAgY2hlY2tHcm91cHM6ID8oQ2hlY2tHcm91cFtdKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdlc09wdGlvbnMge1xuICAvKiBJcyB0cnVlIGlmIHRoZSBwYWdlcyByb3V0ZXIgc2hvdWxkIGJlIGVuYWJsZWQ7IHRoaXMgaXMgcmVxdWlyZWQgZm9yIGFueSBvZiB0aGUgcGFnZXMgb3B0aW9ucyB0byB0YWtlIGVmZmVjdC5cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIGVuYWJsZVJvdXRlcjogP2Jvb2xlYW47XG4gIC8qIElzIHRydWUgaWYgcGFnZXMgc2hvdWxkIGJlIGxvY2FsaXplZDsgdGhpcyBoYXMgbm8gZWZmZWN0IG9uIGN1c3RvbSBwYWdlIHJlZGlyZWN0cy5cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIGVuYWJsZUxvY2FsaXphdGlvbjogP2Jvb2xlYW47XG4gIC8qIFRoZSBwYXRoIHRvIHRoZSBKU09OIGZpbGUgZm9yIGxvY2FsaXphdGlvbjsgdGhlIHRyYW5zbGF0aW9ucyB3aWxsIGJlIHVzZWQgdG8gZmlsbCB0ZW1wbGF0ZSBwbGFjZWhvbGRlcnMgYWNjb3JkaW5nIHRvIHRoZSBsb2NhbGUuICovXG4gIGxvY2FsaXphdGlvbkpzb25QYXRoOiA/c3RyaW5nO1xuICAvKiBUaGUgZmFsbGJhY2sgbG9jYWxlIGZvciBsb2NhbGl6YXRpb24gaWYgbm8gbWF0Y2hpbmcgdHJhbnNsYXRpb24gaXMgcHJvdmlkZWQgZm9yIHRoZSBnaXZlbiBsb2NhbGUuIFRoaXMgaXMgb25seSByZWxldmFudCB3aGVuIHByb3ZpZGluZyB0cmFuc2xhdGlvbiByZXNvdXJjZXMgdmlhIEpTT04gZmlsZS5cbiAgOkRFRkFVTFQ6IGVuICovXG4gIGxvY2FsaXphdGlvbkZhbGxiYWNrTG9jYWxlOiA/c3RyaW5nO1xuICAvKiBUaGUgcGxhY2Vob2xkZXIga2V5cyBhbmQgdmFsdWVzIHdoaWNoIHdpbGwgYmUgZmlsbGVkIGluIHBhZ2VzOyB0aGlzIGNhbiBiZSBhIHNpbXBsZSBvYmplY3Qgb3IgYSBjYWxsYmFjayBmdW5jdGlvbi5cbiAgOkRFRkFVTFQ6IHt9ICovXG4gIHBsYWNlaG9sZGVyczogP09iamVjdDtcbiAgLyogSXMgdHJ1ZSBpZiByZXNwb25zZXMgc2hvdWxkIGFsd2F5cyBiZSByZWRpcmVjdHMgYW5kIG5ldmVyIGNvbnRlbnQsIGZhbHNlIGlmIHRoZSByZXNwb25zZSB0eXBlIHNob3VsZCBkZXBlbmQgb24gdGhlIHJlcXVlc3QgdHlwZSAoR0VUIHJlcXVlc3QgLT4gY29udGVudCByZXNwb25zZTsgUE9TVCByZXF1ZXN0IC0+IHJlZGlyZWN0IHJlc3BvbnNlKS5cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIGZvcmNlUmVkaXJlY3Q6ID9ib29sZWFuO1xuICAvKiBUaGUgcGF0aCB0byB0aGUgcGFnZXMgZGlyZWN0b3J5OyB0aGlzIGFsc28gZGVmaW5lcyB3aGVyZSB0aGUgc3RhdGljIGVuZHBvaW50ICcvYXBwcycgcG9pbnRzIHRvLiBEZWZhdWx0IGlzIHRoZSAnLi9wdWJsaWMvJyBkaXJlY3RvcnkuXG4gIDpERUZBVUxUOiAuL3B1YmxpYyAqL1xuICBwYWdlc1BhdGg6ID9zdHJpbmc7XG4gIC8qIFRoZSBBUEkgZW5kcG9pbnQgZm9yIHRoZSBwYWdlcy4gRGVmYXVsdCBpcyAnYXBwcycuXG4gIDpERUZBVUxUOiBhcHBzICovXG4gIHBhZ2VzRW5kcG9pbnQ6ID9zdHJpbmc7XG4gIC8qIFRoZSBVUkxzIHRvIHRoZSBjdXN0b20gcGFnZXMuXG4gIDpERUZBVUxUOiB7fSAqL1xuICBjdXN0b21VcmxzOiA/UGFnZXNDdXN0b21VcmxzT3B0aW9ucztcbiAgLyogVGhlIGN1c3RvbSByb3V0ZXMuXG4gIDpERUZBVUxUOiBbXSAqL1xuICBjdXN0b21Sb3V0ZXM6ID8oUGFnZXNSb3V0ZVtdKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdlc1JvdXRlIHtcbiAgLyogVGhlIHJvdXRlIHBhdGguICovXG4gIHBhdGg6IHN0cmluZztcbiAgLyogVGhlIHJvdXRlIG1ldGhvZCwgZS5nLiAnR0VUJyBvciAnUE9TVCcuICovXG4gIG1ldGhvZDogc3RyaW5nO1xuICAvKiBUaGUgcm91dGUgaGFuZGxlciB0aGF0IGlzIGFuIGFzeW5jIGZ1bmN0aW9uLiAqL1xuICBoYW5kbGVyOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VzQ3VzdG9tVXJsc09wdGlvbnMge1xuICAvKiBUaGUgVVJMIHRvIHRoZSBjdXN0b20gcGFnZSBmb3IgcGFzc3dvcmQgcmVzZXQuICovXG4gIHBhc3N3b3JkUmVzZXQ6ID9zdHJpbmc7XG4gIC8qIFRoZSBVUkwgdG8gdGhlIGN1c3RvbSBwYWdlIGZvciBwYXNzd29yZCByZXNldCAtPiBsaW5rIGludmFsaWQuICovXG4gIHBhc3N3b3JkUmVzZXRMaW5rSW52YWxpZDogP3N0cmluZztcbiAgLyogVGhlIFVSTCB0byB0aGUgY3VzdG9tIHBhZ2UgZm9yIHBhc3N3b3JkIHJlc2V0IC0+IHN1Y2Nlc3MuICovXG4gIHBhc3N3b3JkUmVzZXRTdWNjZXNzOiA/c3RyaW5nO1xuICAvKiBUaGUgVVJMIHRvIHRoZSBjdXN0b20gcGFnZSBmb3IgZW1haWwgdmVyaWZpY2F0aW9uIC0+IHN1Y2Nlc3MuICovXG4gIGVtYWlsVmVyaWZpY2F0aW9uU3VjY2VzczogP3N0cmluZztcbiAgLyogVGhlIFVSTCB0byB0aGUgY3VzdG9tIHBhZ2UgZm9yIGVtYWlsIHZlcmlmaWNhdGlvbiAtPiBsaW5rIHNlbmQgZmFpbC4gKi9cbiAgZW1haWxWZXJpZmljYXRpb25TZW5kRmFpbDogP3N0cmluZztcbiAgLyogVGhlIFVSTCB0byB0aGUgY3VzdG9tIHBhZ2UgZm9yIGVtYWlsIHZlcmlmaWNhdGlvbiAtPiByZXNlbmQgbGluayAtPiBzdWNjZXNzLiAqL1xuICBlbWFpbFZlcmlmaWNhdGlvblNlbmRTdWNjZXNzOiA/c3RyaW5nO1xuICAvKiBUaGUgVVJMIHRvIHRoZSBjdXN0b20gcGFnZSBmb3IgZW1haWwgdmVyaWZpY2F0aW9uIC0+IGxpbmsgaW52YWxpZC4gKi9cbiAgZW1haWxWZXJpZmljYXRpb25MaW5rSW52YWxpZDogP3N0cmluZztcbiAgLyogVGhlIFVSTCB0byB0aGUgY3VzdG9tIHBhZ2UgZm9yIGVtYWlsIHZlcmlmaWNhdGlvbiAtPiBsaW5rIGV4cGlyZWQuICovXG4gIGVtYWlsVmVyaWZpY2F0aW9uTGlua0V4cGlyZWQ6ID9zdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tUGFnZXNPcHRpb25zIHtcbiAgLyogaW52YWxpZCBsaW5rIHBhZ2UgcGF0aCAqL1xuICBpbnZhbGlkTGluazogP3N0cmluZztcbiAgLyogdmVyaWZpY2F0aW9uIGxpbmsgc2VuZCBmYWlsIHBhZ2UgcGF0aCAqL1xuICBsaW5rU2VuZEZhaWw6ID9zdHJpbmc7XG4gIC8qIGNob29zZSBwYXNzd29yZCBwYWdlIHBhdGggKi9cbiAgY2hvb3NlUGFzc3dvcmQ6ID9zdHJpbmc7XG4gIC8qIHZlcmlmaWNhdGlvbiBsaW5rIHNlbmQgc3VjY2VzcyBwYWdlIHBhdGggKi9cbiAgbGlua1NlbmRTdWNjZXNzOiA/c3RyaW5nO1xuICAvKiB2ZXJpZnkgZW1haWwgc3VjY2VzcyBwYWdlIHBhdGggKi9cbiAgdmVyaWZ5RW1haWxTdWNjZXNzOiA/c3RyaW5nO1xuICAvKiBwYXNzd29yZCByZXNldCBzdWNjZXNzIHBhZ2UgcGF0aCAqL1xuICBwYXNzd29yZFJlc2V0U3VjY2VzczogP3N0cmluZztcbiAgLyogaW52YWxpZCB2ZXJpZmljYXRpb24gbGluayBwYWdlIHBhdGggKi9cbiAgaW52YWxpZFZlcmlmaWNhdGlvbkxpbms6ID9zdHJpbmc7XG4gIC8qIGV4cGlyZWQgdmVyaWZpY2F0aW9uIGxpbmsgcGFnZSBwYXRoICovXG4gIGV4cGlyZWRWZXJpZmljYXRpb25MaW5rOiA/c3RyaW5nO1xuICAvKiBpbnZhbGlkIHBhc3N3b3JkIHJlc2V0IGxpbmsgcGFnZSBwYXRoICovXG4gIGludmFsaWRQYXNzd29yZFJlc2V0TGluazogP3N0cmluZztcbiAgLyogZm9yIG1hc2tpbmcgdXNlci1mYWNpbmcgcGFnZXMgKi9cbiAgcGFyc2VGcmFtZVVSTDogP3N0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXZlUXVlcnlPcHRpb25zIHtcbiAgLyogcGFyc2Utc2VydmVyJ3MgTGl2ZVF1ZXJ5IGNsYXNzTmFtZXNcbiAgOkVOVjogUEFSU0VfU0VSVkVSX0xJVkVRVUVSWV9DTEFTU05BTUVTICovXG4gIGNsYXNzTmFtZXM6ID8oc3RyaW5nW10pO1xuICAvKiBwYXJzZS1zZXJ2ZXIncyBMaXZlUXVlcnkgcmVkaXNPcHRpb25zICovXG4gIHJlZGlzT3B0aW9uczogP2FueTtcbiAgLyogcGFyc2Utc2VydmVyJ3MgTGl2ZVF1ZXJ5IHJlZGlzVVJMICovXG4gIHJlZGlzVVJMOiA/c3RyaW5nO1xuICAvKiBMaXZlUXVlcnkgcHVic3ViIGFkYXB0ZXIgKi9cbiAgcHViU3ViQWRhcHRlcjogP0FkYXB0ZXI8UHViU3ViQWRhcHRlcj47XG4gIC8qIEFkYXB0ZXIgbW9kdWxlIGZvciB0aGUgV2ViU29ja2V0U2VydmVyICovXG4gIHdzc0FkYXB0ZXI6ID9BZGFwdGVyPFdTU0FkYXB0ZXI+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpdmVRdWVyeVNlcnZlck9wdGlvbnMge1xuICAvKiBUaGlzIHN0cmluZyBzaG91bGQgbWF0Y2ggdGhlIGFwcElkIGluIHVzZSBieSB5b3VyIFBhcnNlIFNlcnZlci4gSWYgeW91IGRlcGxveSB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciBhbG9uZ3NpZGUgUGFyc2UgU2VydmVyLCB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciB3aWxsIHRyeSB0byB1c2UgdGhlIHNhbWUgYXBwSWQuKi9cbiAgYXBwSWQ6ID9zdHJpbmc7XG4gIC8qIFRoaXMgc3RyaW5nIHNob3VsZCBtYXRjaCB0aGUgbWFzdGVyS2V5IGluIHVzZSBieSB5b3VyIFBhcnNlIFNlcnZlci4gSWYgeW91IGRlcGxveSB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciBhbG9uZ3NpZGUgUGFyc2UgU2VydmVyLCB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciB3aWxsIHRyeSB0byB1c2UgdGhlIHNhbWUgbWFzdGVyS2V5LiovXG4gIG1hc3RlcktleTogP3N0cmluZztcbiAgLyogVGhpcyBzdHJpbmcgc2hvdWxkIG1hdGNoIHRoZSBzZXJ2ZXJVUkwgaW4gdXNlIGJ5IHlvdXIgUGFyc2UgU2VydmVyLiBJZiB5b3UgZGVwbG95IHRoZSBMaXZlUXVlcnkgc2VydmVyIGFsb25nc2lkZSBQYXJzZSBTZXJ2ZXIsIHRoZSBMaXZlUXVlcnkgc2VydmVyIHdpbGwgdHJ5IHRvIHVzZSB0aGUgc2FtZSBzZXJ2ZXJVUkwuKi9cbiAgc2VydmVyVVJMOiA/c3RyaW5nO1xuICAvKiBBIEpTT04gb2JqZWN0IHRoYXQgc2VydmVzIGFzIGEgd2hpdGVsaXN0IG9mIGtleXMuIEl0IGlzIHVzZWQgZm9yIHZhbGlkYXRpbmcgY2xpZW50cyB3aGVuIHRoZXkgdHJ5IHRvIGNvbm5lY3QgdG8gdGhlIExpdmVRdWVyeSBzZXJ2ZXIuIENoZWNrIHRoZSBmb2xsb3dpbmcgU2VjdXJpdHkgc2VjdGlvbiBhbmQgb3VyIHByb3RvY29sIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMuKi9cbiAga2V5UGFpcnM6ID9hbnk7XG4gIC8qIE51bWJlciBvZiBtaWxsaXNlY29uZHMgYmV0d2VlbiBwaW5nL3BvbmcgZnJhbWVzLiBUaGUgV2ViU29ja2V0IHNlcnZlciBzZW5kcyBwaW5nL3BvbmcgZnJhbWVzIHRvIHRoZSBjbGllbnRzIHRvIGtlZXAgdGhlIFdlYlNvY2tldCBhbGl2ZS4gVGhpcyB2YWx1ZSBkZWZpbmVzIHRoZSBpbnRlcnZhbCBvZiB0aGUgcGluZy9wb25nIGZyYW1lIGZyb20gdGhlIHNlcnZlciB0byBjbGllbnRzLCBkZWZhdWx0cyB0byAxMCAqIDEwMDAgbXMgKDEwIHMpLiovXG4gIHdlYnNvY2tldFRpbWVvdXQ6ID9udW1iZXI7XG4gIC8qIE51bWJlciBpbiBtaWxsaXNlY29uZHMuIFdoZW4gY2xpZW50cyBwcm92aWRlIHRoZSBzZXNzaW9uVG9rZW4gdG8gdGhlIExpdmVRdWVyeSBzZXJ2ZXIsIHRoZSBMaXZlUXVlcnkgc2VydmVyIHdpbGwgdHJ5IHRvIGZldGNoIGl0cyBQYXJzZVVzZXIncyBvYmplY3RJZCBmcm9tIHBhcnNlIHNlcnZlciBhbmQgc3RvcmUgaXQgaW4gdGhlIGNhY2hlLiBUaGUgdmFsdWUgZGVmaW5lcyB0aGUgZHVyYXRpb24gb2YgdGhlIGNhY2hlLiBDaGVjayB0aGUgZm9sbG93aW5nIFNlY3VyaXR5IHNlY3Rpb24gYW5kIG91ciBwcm90b2NvbCBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzLCBkZWZhdWx0cyB0byA1ICogMTAwMCBtcyAoNSBzZWNvbmRzKS4qL1xuICBjYWNoZVRpbWVvdXQ6ID9udW1iZXI7XG4gIC8qIFRoaXMgc3RyaW5nIGRlZmluZXMgdGhlIGxvZyBsZXZlbCBvZiB0aGUgTGl2ZVF1ZXJ5IHNlcnZlci4gV2Ugc3VwcG9ydCBWRVJCT1NFLCBJTkZPLCBFUlJPUiwgTk9ORSwgZGVmYXVsdHMgdG8gSU5GTy4qL1xuICBsb2dMZXZlbDogP3N0cmluZztcbiAgLyogVGhlIHBvcnQgdG8gcnVuIHRoZSBMaXZlUXVlcnkgc2VydmVyLCBkZWZhdWx0cyB0byAxMzM3LlxuICA6REVGQVVMVDogMTMzNyAqL1xuICBwb3J0OiA/bnVtYmVyO1xuICAvKiBwYXJzZS1zZXJ2ZXIncyBMaXZlUXVlcnkgcmVkaXNPcHRpb25zICovXG4gIHJlZGlzT3B0aW9uczogP2FueTtcbiAgLyogcGFyc2Utc2VydmVyJ3MgTGl2ZVF1ZXJ5IHJlZGlzVVJMICovXG4gIHJlZGlzVVJMOiA/c3RyaW5nO1xuICAvKiBMaXZlUXVlcnkgcHVic3ViIGFkYXB0ZXIgKi9cbiAgcHViU3ViQWRhcHRlcjogP0FkYXB0ZXI8UHViU3ViQWRhcHRlcj47XG4gIC8qIEFkYXB0ZXIgbW9kdWxlIGZvciB0aGUgV2ViU29ja2V0U2VydmVyICovXG4gIHdzc0FkYXB0ZXI6ID9BZGFwdGVyPFdTU0FkYXB0ZXI+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElkZW1wb3RlbmN5T3B0aW9ucyB7XG4gIC8qIEFuIGFycmF5IG9mIHBhdGhzIGZvciB3aGljaCB0aGUgZmVhdHVyZSBzaG91bGQgYmUgZW5hYmxlZC4gVGhlIG1vdW50IHBhdGggbXVzdCBub3QgYmUgaW5jbHVkZWQsIGZvciBleGFtcGxlIGluc3RlYWQgb2YgYC9wYXJzZS9mdW5jdGlvbnMvbXlGdW5jdGlvbmAgc3BlY2lmaXkgYGZ1bmN0aW9ucy9teUZ1bmN0aW9uYC4gVGhlIGVudHJpZXMgYXJlIGludGVycHJldGVkIGFzIHJlZ3VsYXIgZXhwcmVzc2lvbiwgZm9yIGV4YW1wbGUgYGZ1bmN0aW9ucy8uKmAgbWF0Y2hlcyBhbGwgZnVuY3Rpb25zLCBgam9icy8uKmAgbWF0Y2hlcyBhbGwgam9icywgYGNsYXNzZXMvLipgIG1hdGNoZXMgYWxsIGNsYXNzZXMsIGAuKmAgbWF0Y2hlcyBhbGwgcGF0aHMuXG4gIDpERUZBVUxUOiBbXSAqL1xuICBwYXRoczogPyhzdHJpbmdbXSk7XG4gIC8qIFRoZSBkdXJhdGlvbiBpbiBzZWNvbmRzIGFmdGVyIHdoaWNoIGEgcmVxdWVzdCByZWNvcmQgaXMgZGlzY2FyZGVkIGZyb20gdGhlIGRhdGFiYXNlLCBkZWZhdWx0cyB0byAzMDBzLlxuICA6REVGQVVMVDogMzAwICovXG4gIHR0bDogP251bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBY2NvdW50TG9ja291dE9wdGlvbnMge1xuICAvKiBTZXQgdGhlIGR1cmF0aW9uIGluIG1pbnV0ZXMgdGhhdCBhIGxvY2tlZC1vdXQgYWNjb3VudCByZW1haW5zIGxvY2tlZCBvdXQgYmVmb3JlIGF1dG9tYXRpY2FsbHkgYmVjb21pbmcgdW5sb2NrZWQuXG4gIDxicj48YnI+XG4gIFZhbGlkIHZhbHVlcyBhcmUgZ3JlYXRlciB0aGFuIGAwYCBhbmQgbGVzcyB0aGFuIGAxMDAwMDBgLiAqL1xuICBkdXJhdGlvbjogP251bWJlcjtcbiAgLyogU2V0IHRoZSBudW1iZXIgb2YgZmFpbGVkIHNpZ24taW4gYXR0ZW1wdHMgdGhhdCB3aWxsIGNhdXNlIGEgdXNlciBhY2NvdW50IHRvIGJlIGxvY2tlZC4gSWYgdGhlIGFjY291bnQgaXMgbG9ja2VkLiBUaGUgYWNjb3VudCB3aWxsIHVubG9jayBhZnRlciB0aGUgZHVyYXRpb24gc2V0IGluIHRoZSBgZHVyYXRpb25gIG9wdGlvbiBoYXMgcGFzc2VkIGFuZCBubyBmdXJ0aGVyIGxvZ2luIGF0dGVtcHRzIGhhdmUgYmVlbiBtYWRlLlxuICA8YnI+PGJyPlxuICBWYWxpZCB2YWx1ZXMgYXJlIGdyZWF0ZXIgdGhhbiBgMGAgYW5kIGxlc3MgdGhhbiBgMTAwMGAuICovXG4gIHRocmVzaG9sZDogP251bWJlcjtcbiAgLyogU2V0IHRvIGB0cnVlYCAgaWYgdGhlIGFjY291bnQgc2hvdWxkIGJlIHVubG9ja2VkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBwYXNzd29yZCByZXNldC5cbiAgPGJyPjxicj5cbiAgRGVmYXVsdCBpcyBgZmFsc2VgLlxuICA8YnI+XG4gIFJlcXVpcmVzIG9wdGlvbnMgYGR1cmF0aW9uYCBhbmQgYHRocmVzaG9sZGAgdG8gYmUgc2V0LlxuICA6REVGQVVMVDogZmFsc2UgKi9cbiAgdW5sb2NrT25QYXNzd29yZFJlc2V0OiA/Ym9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXNzd29yZFBvbGljeU9wdGlvbnMge1xuICAvKiBTZXQgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB2YWxpZGF0aW9uIHBhdHRlcm4gYSBwYXNzd29yZCBtdXN0IG1hdGNoIHRvIGJlIGFjY2VwdGVkLlxuICA8YnI+PGJyPlxuICBJZiB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYHZhbGlkYXRvckNhbGxiYWNrYCwgdGhlIHBhc3N3b3JkIG11c3QgcGFzcyBib3RoIHRvIGJlIGFjY2VwdGVkLiAqL1xuICB2YWxpZGF0b3JQYXR0ZXJuOiA/c3RyaW5nO1xuICAvKiAgICovXG4gIC8qIFNldCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGEgcGFzc3dvcmQgdG8gYmUgYWNjZXB0ZWQuXG4gIDxicj48YnI+XG4gIElmIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBgdmFsaWRhdG9yUGF0dGVybmAsIHRoZSBwYXNzd29yZCBtdXN0IHBhc3MgYm90aCB0byBiZSBhY2NlcHRlZC4gKi9cbiAgdmFsaWRhdG9yQ2FsbGJhY2s6ID8oKSA9PiB2b2lkO1xuICAvKiBTZXQgdGhlIGVycm9yIG1lc3NhZ2UgdG8gYmUgc2VudC5cbiAgPGJyPjxicj5cbiAgRGVmYXVsdCBpcyBgUGFzc3dvcmQgZG9lcyBub3QgbWVldCB0aGUgUGFzc3dvcmQgUG9saWN5IHJlcXVpcmVtZW50cy5gICovXG4gIHZhbGlkYXRpb25FcnJvcjogP3N0cmluZztcbiAgLyogU2V0IHRvIGB0cnVlYCB0byBkaXNhbGxvdyB0aGUgdXNlcm5hbWUgYXMgcGFydCBvZiB0aGUgcGFzc3dvcmQuXG4gIDxicj48YnI+XG4gIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIGRvTm90QWxsb3dVc2VybmFtZTogP2Jvb2xlYW47XG4gIC8qIFNldCB0aGUgbnVtYmVyIG9mIGRheXMgYWZ0ZXIgd2hpY2ggYSBwYXNzd29yZCBleHBpcmVzLiBMb2dpbiBhdHRlbXB0cyBmYWlsIGlmIHRoZSB1c2VyIGRvZXMgbm90IHJlc2V0IHRoZSBwYXNzd29yZCBiZWZvcmUgZXhwaXJhdGlvbi4gKi9cbiAgbWF4UGFzc3dvcmRBZ2U6ID9udW1iZXI7XG4gIC8qIFNldCB0aGUgbnVtYmVyIG9mIHByZXZpb3VzIHBhc3N3b3JkIHRoYXQgd2lsbCBub3QgYmUgYWxsb3dlZCB0byBiZSBzZXQgYXMgbmV3IHBhc3N3b3JkLiBJZiB0aGUgb3B0aW9uIGlzIG5vdCBzZXQgb3Igc2V0IHRvIGAwYCwgbm8gcHJldmlvdXMgcGFzc3dvcmRzIHdpbGwgYmUgY29uc2lkZXJlZC5cbiAgPGJyPjxicj5cbiAgVmFsaWQgdmFsdWVzIGFyZSA+PSBgMGAgYW5kIDw9IGAyMGAuXG4gIDxicj5cbiAgRGVmYXVsdCBpcyBgMGAuXG4gICovXG4gIG1heFBhc3N3b3JkSGlzdG9yeTogP251bWJlcjtcbiAgLyogU2V0IHRoZSB2YWxpZGl0eSBkdXJhdGlvbiBvZiB0aGUgcGFzc3dvcmQgcmVzZXQgdG9rZW4gaW4gc2Vjb25kcyBhZnRlciB3aGljaCB0aGUgdG9rZW4gZXhwaXJlcy4gVGhlIHRva2VuIGlzIHVzZWQgaW4gdGhlIGxpbmsgdGhhdCBpcyBzZXQgaW4gdGhlIGVtYWlsLiBBZnRlciB0aGUgdG9rZW4gZXhwaXJlcywgdGhlIGxpbmsgYmVjb21lcyBpbnZhbGlkIGFuZCBhIG5ldyBsaW5rIGhhcyB0byBiZSBzZW50LiBJZiB0aGUgb3B0aW9uIGlzIG5vdCBzZXQgb3Igc2V0IHRvIGB1bmRlZmluZWRgLCB0aGVuIHRoZSB0b2tlbiBuZXZlciBleHBpcmVzLlxuICA8YnI+PGJyPlxuICBGb3IgZXhhbXBsZSwgdG8gZXhwaXJlIHRoZSB0b2tlbiBhZnRlciAyIGhvdXJzLCBzZXQgYSB2YWx1ZSBvZiA3MjAwIHNlY29uZHMgKD0gNjAgc2Vjb25kcyAqIDYwIG1pbnV0ZXMgKiAyIGhvdXJzKS5cbiAgPGJyPjxicj5cbiAgRGVmYXVsdCBpcyBgdW5kZWZpbmVkYC5cbiAgKi9cbiAgcmVzZXRUb2tlblZhbGlkaXR5RHVyYXRpb246ID9udW1iZXI7XG4gIC8qIFNldCB0byBgdHJ1ZWAgaWYgYSBwYXNzd29yZCByZXNldCB0b2tlbiBzaG91bGQgYmUgcmV1c2VkIGluIGNhc2UgYW5vdGhlciB0b2tlbiBpcyByZXF1ZXN0ZWQgYnV0IHRoZXJlIGlzIGEgdG9rZW4gdGhhdCBpcyBzdGlsbCB2YWxpZCwgaS5lLiBoYXMgbm90IGV4cGlyZWQuIFRoaXMgYXZvaWRzIHRoZSBvZnRlbiBvYnNlcnZlZCBpc3N1ZSB0aGF0IGEgdXNlciByZXF1ZXN0cyBtdWx0aXBsZSBlbWFpbHMgYW5kIGRvZXMgbm90IGtub3cgd2hpY2ggbGluayBjb250YWlucyBhIHZhbGlkIHRva2VuIGJlY2F1c2UgZWFjaCBuZXdseSBnZW5lcmF0ZWQgdG9rZW4gd291bGQgaW52YWxpZGF0ZSB0aGUgcHJldmlvdXMgdG9rZW4uXG4gIDxicj48YnI+XG4gIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIHJlc2V0VG9rZW5SZXVzZUlmVmFsaWQ6ID9ib29sZWFuO1xuICAvKiBTZXQgdG8gYHRydWVgIGlmIGEgcmVxdWVzdCB0byByZXNldCB0aGUgcGFzc3dvcmQgc2hvdWxkIHJldHVybiBhIHN1Y2Nlc3MgcmVzcG9uc2UgZXZlbiBpZiB0aGUgcHJvdmlkZWQgZW1haWwgYWRkcmVzcyBpcyBpbnZhbGlkLCBvciBgZmFsc2VgIGlmIHRoZSByZXF1ZXN0IHNob3VsZCByZXR1cm4gYW4gZXJyb3IgcmVzcG9uc2UgaWYgdGhlIGVtYWlsIGFkZHJlc3MgaXMgaW52YWxpZC5cbiAgPGJyPjxicj5cbiAgRGVmYXVsdCBpcyBgdHJ1ZWAuXG4gIDpERUZBVUxUOiB0cnVlICovXG4gIHJlc2V0UGFzc3dvcmRTdWNjZXNzT25JbnZhbGlkRW1haWw6ID9ib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVVcGxvYWRPcHRpb25zIHtcbiAgLyogU2V0cyB0aGUgYWxsb3dlZCBmaWxlIGV4dGVuc2lvbnMgZm9yIHVwbG9hZGluZyBmaWxlcy4gVGhlIGV4dGVuc2lvbiBpcyBkZWZpbmVkIGFzIGFuIGFycmF5IG9mIGZpbGUgZXh0ZW5zaW9ucywgb3IgYSByZWdleCBwYXR0ZXJuLjxicj48YnI+SXQgaXMgcmVjb21tZW5kZWQgdG8gcmVzdHJpY3QgdGhlIGZpbGUgdXBsb2FkIGV4dGVuc2lvbnMgYXMgbXVjaCBhcyBwb3NzaWJsZS4gSFRNTCBmaWxlcyBhcmUgZXNwZWNpYWxseSBwcm9ibGVtYXRpYyBhcyB0aGV5IG1heSBiZSB1c2VkIGJ5IGFuIGF0dGFja2VyIHdobyB1cGxvYWRzIGEgSFRNTCBmb3JtIHRvIGxvb2sgbGVnaXRpbWF0ZSB1bmRlciB5b3VyIGFwcCdzIGRvbWFpbiBuYW1lLCBvciB0byBjb21wcm9taXNlIHRoZSBzZXNzaW9uIHRva2VuIG9mIGFub3RoZXIgdXNlciB2aWEgYWNjZXNzaW5nIHRoZSBicm93c2VyJ3MgbG9jYWwgc3RvcmFnZS48YnI+PGJyPkRlZmF1bHRzIHRvIGBeKD8hKGh8SCkodHxUKShtfE0pKGx8TCk/JClgIHdoaWNoIGFsbG93cyBhbnkgZmlsZSBleHRlbnNpb24gZXhjZXB0IEhUTUwgZmlsZXMuXG4gIDpERUZBVUxUOiBbXCJeKD8hKGh8SCkodHxUKShtfE0pKGx8TCk/JClcIl0gKi9cbiAgZmlsZUV4dGVuc2lvbnM6ID8oc3RyaW5nW10pO1xuICAvKiAgSXMgdHJ1ZSBpZiBmaWxlIHVwbG9hZCBzaG91bGQgYmUgYWxsb3dlZCBmb3IgYW5vbnltb3VzIHVzZXJzLlxuICA6REVGQVVMVDogZmFsc2UgKi9cbiAgZW5hYmxlRm9yQW5vbnltb3VzVXNlcjogP2Jvb2xlYW47XG4gIC8qIElzIHRydWUgaWYgZmlsZSB1cGxvYWQgc2hvdWxkIGJlIGFsbG93ZWQgZm9yIGF1dGhlbnRpY2F0ZWQgdXNlcnMuXG4gIDpERUZBVUxUOiB0cnVlICovXG4gIGVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiA/Ym9vbGVhbjtcbiAgLyogSXMgdHJ1ZSBpZiBmaWxlIHVwbG9hZCBzaG91bGQgYmUgYWxsb3dlZCBmb3IgYW55b25lLCByZWdhcmRsZXNzIG9mIHVzZXIgYXV0aGVudGljYXRpb24uXG4gIDpERUZBVUxUOiBmYWxzZSAqL1xuICBlbmFibGVGb3JQdWJsaWM6ID9ib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlT3B0aW9ucyB7XG4gIC8qIEVuYWJsZXMgZGF0YWJhc2UgcmVhbC10aW1lIGhvb2tzIHRvIHVwZGF0ZSBzaW5nbGUgc2NoZW1hIGNhY2hlLiBTZXQgdG8gYHRydWVgIGlmIHVzaW5nIG11bHRpcGxlIFBhcnNlIFNlcnZlcnMgaW5zdGFuY2VzIGNvbm5lY3RlZCB0byB0aGUgc2FtZSBkYXRhYmFzZS4gRmFpbGluZyB0byBkbyBzbyB3aWxsIGNhdXNlIGEgc2NoZW1hIGNoYW5nZSB0byBub3QgcHJvcGFnYXRlIHRvIGFsbCBpbnN0YW5jZXMgYW5kIHJlLXN5bmNpbmcgd2lsbCBvbmx5IGhhcHBlbiB3aGVuIHRoZSBpbnN0YW5jZXMgcmVzdGFydC4gVG8gdXNlIHRoaXMgZmVhdHVyZSB3aXRoIE1vbmdvREIsIGEgcmVwbGljYSBzZXQgY2x1c3RlciB3aXRoIFtjaGFuZ2Ugc3RyZWFtXShodHRwczovL2RvY3MubW9uZ29kYi5jb20vbWFudWFsL2NoYW5nZVN0cmVhbXMvI2F2YWlsYWJpbGl0eSkgc3VwcG9ydCBpcyByZXF1aXJlZC5cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIGVuYWJsZVNjaGVtYUhvb2tzOiA/Ym9vbGVhbjtcbiAgLyogVGhlIGR1cmF0aW9uIGluIHNlY29uZHMgYWZ0ZXIgd2hpY2ggdGhlIHNjaGVtYSBjYWNoZSBleHBpcmVzIGFuZCB3aWxsIGJlIHJlZmV0Y2hlZCBmcm9tIHRoZSBkYXRhYmFzZS4gVXNlIHRoaXMgb3B0aW9uIGlmIHVzaW5nIG11bHRpcGxlIFBhcnNlIFNlcnZlcnMgaW5zdGFuY2VzIGNvbm5lY3RlZCB0byB0aGUgc2FtZSBkYXRhYmFzZS4gQSBsb3cgZHVyYXRpb24gd2lsbCBjYXVzZSB0aGUgc2NoZW1hIGNhY2hlIHRvIGJlIHVwZGF0ZWQgdG9vIG9mdGVuLCBjYXVzaW5nIHVubmVjZXNzYXJ5IGRhdGFiYXNlIHJlYWRzLiBBIGhpZ2ggZHVyYXRpb24gd2lsbCBjYXVzZSB0aGUgc2NoZW1hIHRvIGJlIHVwZGF0ZWQgdG9vIHJhcmVseSwgaW5jcmVhc2luZyB0aGUgdGltZSByZXF1aXJlZCB1bnRpbCBzY2hlbWEgY2hhbmdlcyBwcm9wYWdhdGUgdG8gYWxsIHNlcnZlciBpbnN0YW5jZXMuIFRoaXMgZmVhdHVyZSBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSBvciBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBvcHRpb24gYGVuYWJsZVNjaGVtYUhvb2tzYC4gRGVmYXVsdCBpcyBpbmZpbml0ZSB3aGljaCBtZWFucyB0aGUgc2NoZW1hIGNhY2hlIG5ldmVyIGV4cGlyZXMuICovXG4gIHNjaGVtYUNhY2hlVHRsOiA/bnVtYmVyO1xuICAvKiBUaGUgTW9uZ29EQiBkcml2ZXIgb3B0aW9uIHRvIHNldCB3aGV0aGVyIHRvIHJldHJ5IGZhaWxlZCB3cml0ZXMuICovXG4gIHJldHJ5V3JpdGVzOiA/Ym9vbGVhbjtcbiAgLyogVGhlIE1vbmdvREIgZHJpdmVyIG9wdGlvbiB0byBzZXQgYSBjdW11bGF0aXZlIHRpbWUgbGltaXQgaW4gbWlsbGlzZWNvbmRzIGZvciBwcm9jZXNzaW5nIG9wZXJhdGlvbnMgb24gYSBjdXJzb3IuICovXG4gIG1heFRpbWVNUzogP251bWJlcjtcbiAgLyogVGhlIE1vbmdvREIgZHJpdmVyIG9wdGlvbiB0byBzZXQgdGhlIG1heGltdW0gcmVwbGljYXRpb24gbGFnIGZvciByZWFkcyBmcm9tIHNlY29uZGFyeSBub2Rlcy4qL1xuICBtYXhTdGFsZW5lc3NTZWNvbmRzOiA/bnVtYmVyO1xuICAvKiBUaGUgTW9uZ29EQiBkcml2ZXIgb3B0aW9uIHRvIHNldCB0aGUgbWluaW11bSBudW1iZXIgb2Ygb3BlbmVkLCBjYWNoZWQsIHJlYWR5LXRvLXVzZSBkYXRhYmFzZSBjb25uZWN0aW9ucyBtYWludGFpbmVkIGJ5IHRoZSBkcml2ZXIuICovXG4gIG1pblBvb2xTaXplOiA/bnVtYmVyO1xuICAvKiBUaGUgTW9uZ29EQiBkcml2ZXIgb3B0aW9uIHRvIHNldCB0aGUgbWF4aW11bSBudW1iZXIgb2Ygb3BlbmVkLCBjYWNoZWQsIHJlYWR5LXRvLXVzZSBkYXRhYmFzZSBjb25uZWN0aW9ucyBtYWludGFpbmVkIGJ5IHRoZSBkcml2ZXIuICovXG4gIG1heFBvb2xTaXplOiA/bnVtYmVyO1xuICAvKiBUaGUgTW9uZ29EQiBkcml2ZXIgb3B0aW9uIHRvIHNwZWNpZnkgdGhlIGFtb3VudCBvZiB0aW1lLCBpbiBtaWxsaXNlY29uZHMsIHRvIHdhaXQgdG8gZXN0YWJsaXNoIGEgc2luZ2xlIFRDUCBzb2NrZXQgY29ubmVjdGlvbiB0byB0aGUgc2VydmVyIGJlZm9yZSByYWlzaW5nIGFuIGVycm9yLiBTcGVjaWZ5aW5nIDAgZGlzYWJsZXMgdGhlIGNvbm5lY3Rpb24gdGltZW91dC4gKi9cbiAgY29ubmVjdFRpbWVvdXRNUzogP251bWJlcjtcbiAgLyogVGhlIE1vbmdvREIgZHJpdmVyIG9wdGlvbiB0byBzcGVjaWZ5IHRoZSBhbW91bnQgb2YgdGltZSwgaW4gbWlsbGlzZWNvbmRzLCBzcGVudCBhdHRlbXB0aW5nIHRvIHNlbmQgb3IgcmVjZWl2ZSBvbiBhIHNvY2tldCBiZWZvcmUgdGltaW5nIG91dC4gU3BlY2lmeWluZyAwIG1lYW5zIG5vIHRpbWVvdXQuICovXG4gIHNvY2tldFRpbWVvdXRNUzogP251bWJlcjtcbiAgLyogVGhlIE1vbmdvREIgZHJpdmVyIG9wdGlvbiB0byBzZXQgd2hldGhlciB0aGUgc29ja2V0IGF0dGVtcHRzIHRvIGNvbm5lY3QgdG8gSVB2NiBhbmQgSVB2NCBhZGRyZXNzZXMgdW50aWwgYSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLiBJZiBhdmFpbGFibGUsIHRoZSBkcml2ZXIgd2lsbCBzZWxlY3QgdGhlIGZpcnN0IElQdjYgYWRkcmVzcy4gKi9cbiAgYXV0b1NlbGVjdEZhbWlseTogP2Jvb2xlYW47XG4gIC8qIFRoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc3BlY2lmeSB0aGUgYW1vdW50IG9mIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIGEgY29ubmVjdGlvbiBhdHRlbXB0IHRvIGZpbmlzaCBiZWZvcmUgdHJ5aW5nIHRoZSBuZXh0IGFkZHJlc3Mgd2hlbiB1c2luZyB0aGUgYXV0b1NlbGVjdEZhbWlseSBvcHRpb24uIElmIHNldCB0byBhIHBvc2l0aXZlIGludGVnZXIgbGVzcyB0aGFuIDEwLCB0aGUgdmFsdWUgMTAgaXMgdXNlZCBpbnN0ZWFkLiAqL1xuICBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQ6ID9udW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aEFkYXB0ZXIge1xuICAvKiBJcyBgdHJ1ZWAgaWYgdGhlIGF1dGggYWRhcHRlciBpcyBlbmFibGVkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgOkRFRkFVTFQ6IGZhbHNlXG4gIDpFTlY6XG4gICovXG4gIGVuYWJsZWQ6ID9ib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvZ0xldmVscyB7XG4gIC8qIExvZyBsZXZlbCB1c2VkIGJ5IHRoZSBDbG91ZCBDb2RlIFRyaWdnZXJzIGBhZnRlclNhdmVgLCBgYWZ0ZXJEZWxldGVgLCBgYWZ0ZXJGaW5kYCwgYGFmdGVyTG9nb3V0YC4gRGVmYXVsdCBpcyBgaW5mb2AuXG4gIDpERUZBVUxUOiBpbmZvXG4gICovXG4gIHRyaWdnZXJBZnRlcjogP3N0cmluZztcbiAgLyogTG9nIGxldmVsIHVzZWQgYnkgdGhlIENsb3VkIENvZGUgVHJpZ2dlcnMgYGJlZm9yZVNhdmVgLCBgYmVmb3JlRGVsZXRlYCwgYGJlZm9yZUZpbmRgLCBgYmVmb3JlTG9naW5gIG9uIHN1Y2Nlc3MuIERlZmF1bHQgaXMgYGluZm9gLlxuICA6REVGQVVMVDogaW5mb1xuICAqL1xuICB0cmlnZ2VyQmVmb3JlU3VjY2VzczogP3N0cmluZztcbiAgLyogTG9nIGxldmVsIHVzZWQgYnkgdGhlIENsb3VkIENvZGUgVHJpZ2dlcnMgYGJlZm9yZVNhdmVgLCBgYmVmb3JlRGVsZXRlYCwgYGJlZm9yZUZpbmRgLCBgYmVmb3JlTG9naW5gIG9uIGVycm9yLiBEZWZhdWx0IGlzIGBlcnJvcmAuXG4gIDpERUZBVUxUOiBlcnJvclxuICAqL1xuICB0cmlnZ2VyQmVmb3JlRXJyb3I6ID9zdHJpbmc7XG4gIC8qIExvZyBsZXZlbCB1c2VkIGJ5IHRoZSBDbG91ZCBDb2RlIEZ1bmN0aW9ucyBvbiBzdWNjZXNzLiBEZWZhdWx0IGlzIGBpbmZvYC5cbiAgOkRFRkFVTFQ6IGluZm9cbiAgKi9cbiAgY2xvdWRGdW5jdGlvblN1Y2Nlc3M6ID9zdHJpbmc7XG4gIC8qIExvZyBsZXZlbCB1c2VkIGJ5IHRoZSBDbG91ZCBDb2RlIEZ1bmN0aW9ucyBvbiBlcnJvci4gRGVmYXVsdCBpcyBgZXJyb3JgLlxuICA6REVGQVVMVDogZXJyb3JcbiAgKi9cbiAgY2xvdWRGdW5jdGlvbkVycm9yOiA/c3RyaW5nO1xufVxuIl0sIm1hcHBpbmdzIjoiOztBQUNBLElBQUFBLGlCQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxhQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxZQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxhQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxjQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxjQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxlQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxXQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxXQUFBLEdBQUFSLE9BQUEiLCJpZ25vcmVMaXN0IjpbXX0=
12
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQW5hbHl0aWNzQWRhcHRlciIsInJlcXVpcmUiLCJfQ2FjaGVBZGFwdGVyIiwiX01haWxBZGFwdGVyIiwiX0ZpbGVzQWRhcHRlciIsIl9Mb2dnZXJBZGFwdGVyIiwiX1B1YlN1YkFkYXB0ZXIiLCJfU3RvcmFnZUFkYXB0ZXIiLCJfV1NTQWRhcHRlciIsIl9DaGVja0dyb3VwIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL09wdGlvbnMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCB7IEFuYWx5dGljc0FkYXB0ZXIgfSBmcm9tICcuLi9BZGFwdGVycy9BbmFseXRpY3MvQW5hbHl0aWNzQWRhcHRlcic7XG5pbXBvcnQgeyBDYWNoZUFkYXB0ZXIgfSBmcm9tICcuLi9BZGFwdGVycy9DYWNoZS9DYWNoZUFkYXB0ZXInO1xuaW1wb3J0IHsgTWFpbEFkYXB0ZXIgfSBmcm9tICcuLi9BZGFwdGVycy9FbWFpbC9NYWlsQWRhcHRlcic7XG5pbXBvcnQgeyBGaWxlc0FkYXB0ZXIgfSBmcm9tICcuLi9BZGFwdGVycy9GaWxlcy9GaWxlc0FkYXB0ZXInO1xuaW1wb3J0IHsgTG9nZ2VyQWRhcHRlciB9IGZyb20gJy4uL0FkYXB0ZXJzL0xvZ2dlci9Mb2dnZXJBZGFwdGVyJztcbmltcG9ydCB7IFB1YlN1YkFkYXB0ZXIgfSBmcm9tICcuLi9BZGFwdGVycy9QdWJTdWIvUHViU3ViQWRhcHRlcic7XG5pbXBvcnQgeyBTdG9yYWdlQWRhcHRlciB9IGZyb20gJy4uL0FkYXB0ZXJzL1N0b3JhZ2UvU3RvcmFnZUFkYXB0ZXInO1xuaW1wb3J0IHsgV1NTQWRhcHRlciB9IGZyb20gJy4uL0FkYXB0ZXJzL1dlYlNvY2tldFNlcnZlci9XU1NBZGFwdGVyJztcbmltcG9ydCB7IENoZWNrR3JvdXAgfSBmcm9tICcuLi9TZWN1cml0eS9DaGVja0dyb3VwJztcblxuZXhwb3J0IGludGVyZmFjZSBTY2hlbWFPcHRpb25zIHtcbiAgLyogUmVzdCByZXByZXNlbnRhdGlvbiBvbiBQYXJzZS5TY2hlbWEgaHR0cHM6Ly9kb2NzLnBhcnNlcGxhdGZvcm0ub3JnL3Jlc3QvZ3VpZGUvI2FkZGluZy1hLXNjaGVtYVxuICA6REVGQVVMVDogW10gKi9cbiAgZGVmaW5pdGlvbnM6IGFueTtcbiAgLyogSXMgdHJ1ZSBpZiBQYXJzZSBTZXJ2ZXIgc2hvdWxkIGV4aXQgaWYgc2NoZW1hIHVwZGF0ZSBmYWlsLlxuICA6REVGQVVMVDogZmFsc2UgKi9cbiAgc3RyaWN0OiA/Ym9vbGVhbjtcbiAgLyogSXMgdHJ1ZSBpZiBQYXJzZSBTZXJ2ZXIgc2hvdWxkIGRlbGV0ZSBhbnkgZmllbGRzIG5vdCBkZWZpbmVkIGluIGEgc2NoZW1hIGRlZmluaXRpb24uIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBkdXJpbmcgZGV2ZWxvcG1lbnQuXG4gIDpERUZBVUxUOiBmYWxzZSAqL1xuICBkZWxldGVFeHRyYUZpZWxkczogP2Jvb2xlYW47XG4gIC8qIElzIHRydWUgaWYgUGFyc2UgU2VydmVyIHNob3VsZCByZWNyZWF0ZSBhbnkgZmllbGRzIHRoYXQgYXJlIGRpZmZlcmVudCBiZXR3ZWVuIHRoZSBjdXJyZW50IGRhdGFiYXNlIHNjaGVtYSBhbmQgdGhlc2NoZW1hIGRlZmluaXRpb24uIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBkdXJpbmcgZGV2ZWxvcG1lbnQuXG4gIDpERUZBVUxUOiBmYWxzZSAqL1xuICByZWNyZWF0ZU1vZGlmaWVkRmllbGRzOiA/Ym9vbGVhbjtcbiAgLyogSXMgdHJ1ZSBpZiBQYXJzZSBTZXJ2ZXIgd2lsbCByZWplY3QgYW55IGF0dGVtcHRzIHRvIG1vZGlmeSB0aGUgc2NoZW1hIHdoaWxlIHRoZSBzZXJ2ZXIgaXMgcnVubmluZy5cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIGxvY2tTY2hlbWFzOiA/Ym9vbGVhbjtcbiAgLyogKE9wdGlvbmFsKSBLZWVwIGluZGV4ZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgZGF0YWJhc2UgYnV0IG5vdCBkZWZpbmVkIGluIHRoZSBzY2hlbWEuIFNldCB0aGlzIHRvIGB0cnVlYCBpZiB5b3UgYXJlIGFkZGluZyBpbmRleGVzIG1hbnVhbGx5LCBzbyB0aGF0IHRoZXkgd29uJ3QgYmUgcmVtb3ZlZCB3aGVuIHJ1bm5pbmcgc2NoZW1hIG1pZ3JhdGlvbi4gRGVmYXVsdCBpcyBgZmFsc2VgLlxuICA6REVGQVVMVDogZmFsc2UgKi9cbiAga2VlcFVua25vd25JbmRleGVzOiA/Ym9vbGVhbjtcbiAgLyogRXhlY3V0ZSBhIGNhbGxiYWNrIGJlZm9yZSBydW5uaW5nIHNjaGVtYSBtaWdyYXRpb25zLiAqL1xuICBiZWZvcmVNaWdyYXRpb246ID8oKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgLyogRXhlY3V0ZSBhIGNhbGxiYWNrIGFmdGVyIHJ1bm5pbmcgc2NoZW1hIG1pZ3JhdGlvbnMuICovXG4gIGFmdGVyTWlncmF0aW9uOiA/KCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG59XG5cbnR5cGUgQWRhcHRlcjxUPiA9IHN0cmluZyB8IGFueSB8IFQ7XG50eXBlIE51bWJlck9yQm9vbGVhbiA9IG51bWJlciB8IGJvb2xlYW47XG50eXBlIE51bWJlck9yU3RyaW5nID0gbnVtYmVyIHwgc3RyaW5nO1xudHlwZSBQcm90ZWN0ZWRGaWVsZHMgPSBhbnk7XG50eXBlIFN0cmluZ09yU3RyaW5nQXJyYXkgPSBzdHJpbmcgfCBzdHJpbmdbXTtcbnR5cGUgUmVxdWVzdEtleXdvcmREZW55bGlzdCA9IHtcbiAga2V5OiBzdHJpbmcgfCBhbnksXG4gIHZhbHVlOiBhbnksXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlU2VydmVyT3B0aW9ucyB7XG4gIC8qIFlvdXIgUGFyc2UgQXBwbGljYXRpb24gSURcbiAgOkVOVjogUEFSU0VfU0VSVkVSX0FQUExJQ0FUSU9OX0lEICovXG4gIGFwcElkOiBzdHJpbmc7XG4gIC8qIFlvdXIgUGFyc2UgTWFzdGVyIEtleSAqL1xuICBtYXN0ZXJLZXk6ICgoKSA9PiB2b2lkKSB8IHN0cmluZztcbiAgLyogKE9wdGlvbmFsKSBUaGUgZHVyYXRpb24gaW4gc2Vjb25kcyBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgYG1hc3RlcktleWAgaXMgYmVpbmcgdXNlZCBiZWZvcmUgaXQgaXMgcmVxdWVzdGVkIGFnYWluIGlmIGBtYXN0ZXJLZXlgIGlzIHNldCB0byBhIGZ1bmN0aW9uLiBJZiBgbWFzdGVyS2V5YCBpcyBub3Qgc2V0IHRvIGEgZnVuY3Rpb24sIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QuIERlZmF1bHQgaXMgYDBgLCB3aGljaCBtZWFucyB0aGUgbWFzdGVyIGtleSBpcyByZXF1ZXN0ZWQgYnkgaW52b2tpbmcgdGhlICBgbWFzdGVyS2V5YCBmdW5jdGlvbiBldmVyeSB0aW1lIHRoZSBtYXN0ZXIga2V5IGlzIHVzZWQgaW50ZXJuYWxseSBieSBQYXJzZSBTZXJ2ZXIuICovXG4gIG1hc3RlcktleVR0bDogP251bWJlcjtcbiAgLyogKE9wdGlvbmFsKSBUaGUgbWFpbnRlbmFuY2Uga2V5IGlzIHVzZWQgZm9yIG1vZGlmeWluZyBpbnRlcm5hbCBhbmQgcmVhZC1vbmx5IGZpZWxkcyBvZiBQYXJzZSBTZXJ2ZXIuPGJyPjxicj7imqDvuI8gVGhpcyBrZXkgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgYXMgcGFydCBvZiBhIHJlZ3VsYXIgb3BlcmF0aW9uIG9mIFBhcnNlIFNlcnZlci4gVGhpcyBrZXkgaXMgaW50ZW5kZWQgdG8gY29uZHVjdCBvdXQtb2YtYmFuZCBjaGFuZ2VzIHN1Y2ggYXMgb25lLXRpbWUgbWlncmF0aW9ucyBvciBkYXRhIGNvcnJlY3Rpb24gdGFza3MuIEludGVybmFsIGZpZWxkcyBhcmUgbm90IG9mZmljaWFsbHkgZG9jdW1lbnRlZCBhbmQgbWF5IGNoYW5nZSBhdCBhbnkgdGltZSB3aXRob3V0IHB1YmxpY2F0aW9uIGluIHJlbGVhc2UgY2hhbmdlbG9ncy4gV2Ugc3Ryb25nbHkgYWR2aWNlIG5vdCB0byByZWx5IG9uIGludGVybmFsIGZpZWxkcyBhcyBwYXJ0IG9mIHlvdXIgcmVndWxhciBvcGVyYXRpb24gYW5kIHRvIGludmVzdGlnYXRlIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IHBsYW5uZWQgY2hhbmdlcyAqZGlyZWN0bHkgaW4gdGhlIHNvdXJjZSBjb2RlKiBvZiB5b3VyIGN1cnJlbnQgdmVyc2lvbiBvZiBQYXJzZSBTZXJ2ZXIuICovXG4gIG1haW50ZW5hbmNlS2V5OiBzdHJpbmc7XG4gIC8qIFVSTCB0byB5b3VyIHBhcnNlIHNlcnZlciB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly8uXG4gIDpFTlY6IFBBUlNFX1NFUlZFUl9VUkwgKi9cbiAgc2VydmVyVVJMOiBzdHJpbmc7XG4gIC8qIChPcHRpb25hbCkgUmVzdHJpY3RzIHRoZSB1c2Ugb2YgbWFzdGVyIGtleSBwZXJtaXNzaW9ucyB0byBhIGxpc3Qgb2YgSVAgYWRkcmVzc2VzIG9yIHJhbmdlcy48YnI+PGJyPlRoaXMgb3B0aW9uIGFjY2VwdHMgYSBsaXN0IG9mIHNpbmdsZSBJUCBhZGRyZXNzZXMsIGZvciBleGFtcGxlIGBbJzEwLjAuMC4xJywgJzEwLjAuMC4yJ11gLiBZb3UgY2FuIGFsc28gdXNlIENJRFIgbm90YXRpb24gdG8gc3BlY2lmeSBhbiBJUCBhZGRyZXNzIHJhbmdlLCBmb3IgZXhhbXBsZSBgWycxMC4wLjEuMC8yNCddYC48YnI+PGJyPjxiPlNwZWNpYWwgc2NlbmFyaW9zOjwvYj48YnI+LSBTZXR0aW5nIGFuIGVtcHR5IGFycmF5IGBbXWAgbWVhbnMgdGhhdCB0aGUgbWFzdGVyIGtleSBjYW5ub3QgYmUgdXNlZCBldmVuIGluIFBhcnNlIFNlcnZlciBDbG91ZCBDb2RlLiBUaGlzIHZhbHVlIGNhbm5vdCBiZSBzZXQgdmlhIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGFzIHRoZXJlIGlzIG5vIHdheSB0byBwYXNzIGFuIGVtcHR5IGFycmF5IHRvIFBhcnNlIFNlcnZlciB2aWEgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuPGJyPi0gU2V0dGluZyBgWycwLjAuMC4wLzAnLCAnOjowJ11gIG1lYW5zIHRvIGFsbG93IGFueSBJUHY0IGFuZCBJUHY2IGFkZHJlc3MgdG8gdXNlIHRoZSBtYXN0ZXIga2V5IGFuZCBlZmZlY3RpdmVseSBkaXNhYmxlcyB0aGUgSVAgZmlsdGVyLjxicj48YnI+PGI+Q29uc2lkZXJhdGlvbnM6PC9iPjxicj4tIElQdjQgYW5kIElQdjYgYWRkcmVzc2VzIGFyZSBub3QgY29tcGFyZWQgYWdhaW5zdCBlYWNoIG90aGVyLiBFYWNoIElQIHZlcnNpb24gKElQdjQgYW5kIElQdjYpIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQgc2VwYXJhdGVseS4gRm9yIGV4YW1wbGUsIGBbJzAuMC4wLjAvMCddYCBhbGxvd3MgYW55IElQdjQgYWRkcmVzcyBhbmQgYmxvY2tzIGV2ZXJ5IElQdjYgYWRkcmVzcy4gQ29udmVyc2VseSwgYFsnOjowJ11gIGFsbG93cyBhbnkgSVB2NiBhZGRyZXNzIGFuZCBibG9ja3MgZXZlcnkgSVB2NCBhZGRyZXNzLjxicj4tIEtlZXAgaW4gbWluZCB0aGF0IHRoZSBJUCB2ZXJzaW9uIGluIHVzZSBkZXBlbmRzIG9uIHRoZSBuZXR3b3JrIHN0YWNrIG9mIHRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCBQYXJzZSBTZXJ2ZXIgcnVucy4gQSBsb2NhbCBlbnZpcm9ubWVudCBtYXkgdXNlIGEgZGlmZmVyZW50IElQIHZlcnNpb24gdGhhbiBhIHJlbW90ZSBlbnZpcm9ubWVudC4gRm9yIGV4YW1wbGUsIGl0J3MgcG9zc2libGUgdGhhdCBsb2NhbGx5IHRoZSB2YWx1ZSBgWycwLjAuMC4wLzAnXWAgYWxsb3dzIHRoZSByZXF1ZXN0IElQIGJlY2F1c2UgdGhlIGVudmlyb25tZW50IGlzIHVzaW5nIElQdjQsIGJ1dCB3aGVuIFBhcnNlIFNlcnZlciBpcyBkZXBsb3llZCByZW1vdGVseSB0aGUgcmVxdWVzdCBJUCBpcyBibG9ja2VkIGJlY2F1c2UgdGhlIHJlbW90ZSBlbnZpcm9ubWVudCBpcyB1c2luZyBJUHY2Ljxicj4tIFdoZW4gc2V0dGluZyB0aGUgb3B0aW9uIHZpYSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0aGUgbm90YXRpb24gaXMgYSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nLCBmb3IgZXhhbXBsZSBgXCIwLjAuMC4wLzAsOjowXCJgLjxicj4tIElQdjYgem9uZSBpbmRpY2VzIChgJWAgc3VmZml4KSBhcmUgbm90IHN1cHBvcnRlZCwgZm9yIGV4YW1wbGUgYGZlODA6OjElZXRoMGAsIGBmZTgwOjoxJTFgIG9yIGA6OjElbG9gLjxicj48YnI+RGVmYXVsdHMgdG8gYFsnMTI3LjAuMC4xJywgJzo6MSddYCB3aGljaCBtZWFucyB0aGF0IG9ubHkgYGxvY2FsaG9zdGAsIHRoZSBzZXJ2ZXIgaW5zdGFuY2Ugb24gd2hpY2ggUGFyc2UgU2VydmVyIHJ1bnMsIGlzIGFsbG93ZWQgdG8gdXNlIHRoZSBtYXN0ZXIga2V5LlxuICA6REVGQVVMVDogW1wiMTI3LjAuMC4xXCIsXCI6OjFcIl0gKi9cbiAgbWFzdGVyS2V5SXBzOiA/KHN0cmluZ1tdKTtcbiAgLyogKE9wdGlvbmFsKSBSZXN0cmljdHMgdGhlIHVzZSBvZiBtYWludGVuYW5jZSBrZXkgcGVybWlzc2lvbnMgdG8gYSBsaXN0IG9mIElQIGFkZHJlc3NlcyBvciByYW5nZXMuPGJyPjxicj5UaGlzIG9wdGlvbiBhY2NlcHRzIGEgbGlzdCBvZiBzaW5nbGUgSVAgYWRkcmVzc2VzLCBmb3IgZXhhbXBsZSBgWycxMC4wLjAuMScsICcxMC4wLjAuMiddYC4gWW91IGNhbiBhbHNvIHVzZSBDSURSIG5vdGF0aW9uIHRvIHNwZWNpZnkgYW4gSVAgYWRkcmVzcyByYW5nZSwgZm9yIGV4YW1wbGUgYFsnMTAuMC4xLjAvMjQnXWAuPGJyPjxicj48Yj5TcGVjaWFsIHNjZW5hcmlvczo8L2I+PGJyPi0gU2V0dGluZyBhbiBlbXB0eSBhcnJheSBgW11gIG1lYW5zIHRoYXQgdGhlIG1haW50ZW5hbmNlIGtleSBjYW5ub3QgYmUgdXNlZCBldmVuIGluIFBhcnNlIFNlcnZlciBDbG91ZCBDb2RlLiBUaGlzIHZhbHVlIGNhbm5vdCBiZSBzZXQgdmlhIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGFzIHRoZXJlIGlzIG5vIHdheSB0byBwYXNzIGFuIGVtcHR5IGFycmF5IHRvIFBhcnNlIFNlcnZlciB2aWEgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuPGJyPi0gU2V0dGluZyBgWycwLjAuMC4wLzAnLCAnOjowJ11gIG1lYW5zIHRvIGFsbG93IGFueSBJUHY0IGFuZCBJUHY2IGFkZHJlc3MgdG8gdXNlIHRoZSBtYWludGVuYW5jZSBrZXkgYW5kIGVmZmVjdGl2ZWx5IGRpc2FibGVzIHRoZSBJUCBmaWx0ZXIuPGJyPjxicj48Yj5Db25zaWRlcmF0aW9uczo8L2I+PGJyPi0gSVB2NCBhbmQgSVB2NiBhZGRyZXNzZXMgYXJlIG5vdCBjb21wYXJlZCBhZ2FpbnN0IGVhY2ggb3RoZXIuIEVhY2ggSVAgdmVyc2lvbiAoSVB2NCBhbmQgSVB2NikgbmVlZHMgdG8gYmUgY29uc2lkZXJlZCBzZXBhcmF0ZWx5LiBGb3IgZXhhbXBsZSwgYFsnMC4wLjAuMC8wJ11gIGFsbG93cyBhbnkgSVB2NCBhZGRyZXNzIGFuZCBibG9ja3MgZXZlcnkgSVB2NiBhZGRyZXNzLiBDb252ZXJzZWx5LCBgWyc6OjAnXWAgYWxsb3dzIGFueSBJUHY2IGFkZHJlc3MgYW5kIGJsb2NrcyBldmVyeSBJUHY0IGFkZHJlc3MuPGJyPi0gS2VlcCBpbiBtaW5kIHRoYXQgdGhlIElQIHZlcnNpb24gaW4gdXNlIGRlcGVuZHMgb24gdGhlIG5ldHdvcmsgc3RhY2sgb2YgdGhlIGVudmlyb25tZW50IGluIHdoaWNoIFBhcnNlIFNlcnZlciBydW5zLiBBIGxvY2FsIGVudmlyb25tZW50IG1heSB1c2UgYSBkaWZmZXJlbnQgSVAgdmVyc2lvbiB0aGFuIGEgcmVtb3RlIGVudmlyb25tZW50LiBGb3IgZXhhbXBsZSwgaXQncyBwb3NzaWJsZSB0aGF0IGxvY2FsbHkgdGhlIHZhbHVlIGBbJzAuMC4wLjAvMCddYCBhbGxvd3MgdGhlIHJlcXVlc3QgSVAgYmVjYXVzZSB0aGUgZW52aXJvbm1lbnQgaXMgdXNpbmcgSVB2NCwgYnV0IHdoZW4gUGFyc2UgU2VydmVyIGlzIGRlcGxveWVkIHJlbW90ZWx5IHRoZSByZXF1ZXN0IElQIGlzIGJsb2NrZWQgYmVjYXVzZSB0aGUgcmVtb3RlIGVudmlyb25tZW50IGlzIHVzaW5nIElQdjYuPGJyPi0gV2hlbiBzZXR0aW5nIHRoZSBvcHRpb24gdmlhIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHRoZSBub3RhdGlvbiBpcyBhIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmcsIGZvciBleGFtcGxlIGBcIjAuMC4wLjAvMCw6OjBcImAuPGJyPi0gSVB2NiB6b25lIGluZGljZXMgKGAlYCBzdWZmaXgpIGFyZSBub3Qgc3VwcG9ydGVkLCBmb3IgZXhhbXBsZSBgZmU4MDo6MSVldGgwYCwgYGZlODA6OjElMWAgb3IgYDo6MSVsb2AuPGJyPjxicj5EZWZhdWx0cyB0byBgWycxMjcuMC4wLjEnLCAnOjoxJ11gIHdoaWNoIG1lYW5zIHRoYXQgb25seSBgbG9jYWxob3N0YCwgdGhlIHNlcnZlciBpbnN0YW5jZSBvbiB3aGljaCBQYXJzZSBTZXJ2ZXIgcnVucywgaXMgYWxsb3dlZCB0byB1c2UgdGhlIG1haW50ZW5hbmNlIGtleS5cbiAgOkRFRkFVTFQ6IFtcIjEyNy4wLjAuMVwiLFwiOjoxXCJdICovXG4gIG1haW50ZW5hbmNlS2V5SXBzOiA/KHN0cmluZ1tdKTtcbiAgLyogU2V0cyB0aGUgYXBwIG5hbWUgKi9cbiAgYXBwTmFtZTogP3N0cmluZztcbiAgLyogQWRkIGhlYWRlcnMgdG8gQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycyAqL1xuICBhbGxvd0hlYWRlcnM6ID8oc3RyaW5nW10pO1xuICAvKiBTZXRzIG9yaWdpbnMgZm9yIEFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbi4gVGhpcyBjYW4gYmUgYSBzdHJpbmcgZm9yIGEgc2luZ2xlIG9yaWdpbiBvciBhbiBhcnJheSBvZiBzdHJpbmdzIGZvciBtdWx0aXBsZSBvcmlnaW5zLiAqL1xuICBhbGxvd09yaWdpbjogP1N0cmluZ09yU3RyaW5nQXJyYXk7XG4gIC8qIEFkYXB0ZXIgbW9kdWxlIGZvciB0aGUgYW5hbHl0aWNzICovXG4gIGFuYWx5dGljc0FkYXB0ZXI6ID9BZGFwdGVyPEFuYWx5dGljc0FkYXB0ZXI+O1xuICAvKiBBZGFwdGVyIG1vZHVsZSBmb3IgdGhlIGZpbGVzIHN1Yi1zeXN0ZW0gKi9cbiAgZmlsZXNBZGFwdGVyOiA/QWRhcHRlcjxGaWxlc0FkYXB0ZXI+O1xuICAvKiBDb25maWd1cmF0aW9uIGZvciBwdXNoLCBhcyBzdHJpbmdpZmllZCBKU09OLiBTZWUgaHR0cDovL2RvY3MucGFyc2VwbGF0Zm9ybS5vcmcvcGFyc2Utc2VydmVyL2d1aWRlLyNwdXNoLW5vdGlmaWNhdGlvbnMgKi9cbiAgcHVzaDogP2FueTtcbiAgLyogQ29uZmlndXJhdGlvbiBmb3IgcHVzaCBzY2hlZHVsaW5nLCBkZWZhdWx0cyB0byBmYWxzZS5cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIHNjaGVkdWxlZFB1c2g6ID9ib29sZWFuO1xuICAvKiBBZGFwdGVyIG1vZHVsZSBmb3IgdGhlIGxvZ2dpbmcgc3ViLXN5c3RlbSAqL1xuICBsb2dnZXJBZGFwdGVyOiA/QWRhcHRlcjxMb2dnZXJBZGFwdGVyPjtcbiAgLyogTG9nIGFzIHN0cnVjdHVyZWQgSlNPTiBvYmplY3RzXG4gIDpFTlY6IEpTT05fTE9HUyAqL1xuICBqc29uTG9nczogP2Jvb2xlYW47XG4gIC8qIEZvbGRlciBmb3IgdGhlIGxvZ3MgKGRlZmF1bHRzIHRvICcuL2xvZ3MnKTsgc2V0IHRvIG51bGwgdG8gZGlzYWJsZSBmaWxlIGJhc2VkIGxvZ2dpbmdcbiAgOkVOVjogUEFSU0VfU0VSVkVSX0xPR1NfRk9MREVSXG4gIDpERUZBVUxUOiAuL2xvZ3MgKi9cbiAgbG9nc0ZvbGRlcjogP3N0cmluZztcbiAgLyogU2V0IHRoZSBsb2dnaW5nIHRvIHZlcmJvc2VcbiAgOkVOVjogVkVSQk9TRSAqL1xuICB2ZXJib3NlOiA/Ym9vbGVhbjtcbiAgLyogU2V0cyB0aGUgbGV2ZWwgZm9yIGxvZ3MgKi9cbiAgbG9nTGV2ZWw6ID9zdHJpbmc7XG4gIC8qIChPcHRpb25hbCkgT3ZlcnJpZGVzIHRoZSBsb2cgbGV2ZWxzIHVzZWQgaW50ZXJuYWxseSBieSBQYXJzZSBTZXJ2ZXIgdG8gbG9nIGV2ZW50cy5cbiAgOkRFRkFVTFQ6IHt9ICovXG4gIGxvZ0xldmVsczogP0xvZ0xldmVscztcbiAgLyogTWF4aW11bSBudW1iZXIgb2YgbG9ncyB0byBrZWVwLiBJZiBub3Qgc2V0LCBubyBsb2dzIHdpbGwgYmUgcmVtb3ZlZC4gVGhpcyBjYW4gYmUgYSBudW1iZXIgb2YgZmlsZXMgb3IgbnVtYmVyIG9mIGRheXMuIElmIHVzaW5nIGRheXMsIGFkZCAnZCcgYXMgdGhlIHN1ZmZpeC4gKGRlZmF1bHQ6IG51bGwpICovXG4gIG1heExvZ0ZpbGVzOiA/TnVtYmVyT3JTdHJpbmc7XG4gIC8qIERpc2FibGVzIGNvbnNvbGUgb3V0cHV0XG4gIDpFTlY6IFNJTEVOVCAqL1xuICBzaWxlbnQ6ID9ib29sZWFuO1xuICAvKiBUaGUgZnVsbCBVUkkgdG8geW91ciBkYXRhYmFzZS4gU3VwcG9ydGVkIGRhdGFiYXNlcyBhcmUgbW9uZ29kYiBvciBwb3N0Z3Jlcy5cbiAgOkRFRkFVTFQ6IG1vbmdvZGI6Ly9sb2NhbGhvc3Q6MjcwMTcvcGFyc2UgKi9cbiAgZGF0YWJhc2VVUkk6IHN0cmluZztcbiAgLyogT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBkYXRhYmFzZSBjbGllbnRcbiAgOkVOVjogUEFSU0VfU0VSVkVSX0RBVEFCQVNFX09QVElPTlMgKi9cbiAgZGF0YWJhc2VPcHRpb25zOiA/RGF0YWJhc2VPcHRpb25zO1xuICAvKiBBZGFwdGVyIG1vZHVsZSBmb3IgdGhlIGRhdGFiYXNlOyBhbnkgb3B0aW9ucyB0aGF0IGFyZSBub3QgZXhwbGljaXRseSBkZXNjcmliZWQgaGVyZSBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvIHRoZSBkYXRhYmFzZSBjbGllbnQuICovXG4gIGRhdGFiYXNlQWRhcHRlcjogP0FkYXB0ZXI8U3RvcmFnZUFkYXB0ZXI+O1xuICAvKiBPcHRpb25hbC4gSWYgc2V0IHRvIGB0cnVlYCwgdGhlIGNvbGxhdGlvbiBydWxlIG9mIGNhc2UgY29tcGFyaXNvbiBmb3IgcXVlcmllcyBhbmQgaW5kZXhlcyBpcyBlbmFibGVkLiBFbmFibGUgdGhpcyBvcHRpb24gdG8gcnVuIFBhcnNlIFNlcnZlciB3aXRoIE1vbmdvREIgQXRsYXMgU2VydmVybGVzcyBvciBBV1MgQW1hem9uIERvY3VtZW50REIuIElmIGBmYWxzZWAsIHRoZSBjb2xsYXRpb24gcnVsZSBvZiBjYXNlIGNvbXBhcmlzb24gaXMgZGlzYWJsZWQuIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIGVuYWJsZUNvbGxhdGlvbkNhc2VDb21wYXJpc29uOiA/Ym9vbGVhbjtcbiAgLyogT3B0aW9uYWwuIElmIHNldCB0byBgdHJ1ZWAsIHRoZSBgZW1haWxgIHByb3BlcnR5IG9mIGEgdXNlciBpcyBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBsb3dlcmNhc2UgYmVmb3JlIGJlaW5nIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UuIENvbnNlcXVlbnRseSwgcXVlcmllcyBtdXN0IG1hdGNoIHRoZSBjYXNlIGFzIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UsIHdoaWNoIHdvdWxkIGJlIGxvd2VyY2FzZSBpbiB0aGlzIHNjZW5hcmlvLiBJZiBgZmFsc2VgLCB0aGUgYGVtYWlsYCBwcm9wZXJ0eSBpcyBzdG9yZWQgYXMgc2V0LCB3aXRob3V0IGFueSBjYXNlIG1vZGlmaWNhdGlvbnMuIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIGNvbnZlcnRFbWFpbFRvTG93ZXJjYXNlOiA/Ym9vbGVhbjtcbiAgLyogT3B0aW9uYWwuIElmIHNldCB0byBgdHJ1ZWAsIHRoZSBgdXNlcm5hbWVgIHByb3BlcnR5IG9mIGEgdXNlciBpcyBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBsb3dlcmNhc2UgYmVmb3JlIGJlaW5nIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UuIENvbnNlcXVlbnRseSwgcXVlcmllcyBtdXN0IG1hdGNoIHRoZSBjYXNlIGFzIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UsIHdoaWNoIHdvdWxkIGJlIGxvd2VyY2FzZSBpbiB0aGlzIHNjZW5hcmlvLiBJZiBgZmFsc2VgLCB0aGUgYHVzZXJuYW1lYCBwcm9wZXJ0eSBpcyBzdG9yZWQgYXMgc2V0LCB3aXRob3V0IGFueSBjYXNlIG1vZGlmaWNhdGlvbnMuIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIGNvbnZlcnRVc2VybmFtZVRvTG93ZXJjYXNlOiA/Ym9vbGVhbjtcbiAgLyogRnVsbCBwYXRoIHRvIHlvdXIgY2xvdWQgY29kZSBtYWluLmpzICovXG4gIGNsb3VkOiA/c3RyaW5nO1xuICAvKiBBIGNvbGxlY3Rpb24gcHJlZml4IGZvciB0aGUgY2xhc3Nlc1xuICA6REVGQVVMVDogJycgKi9cbiAgY29sbGVjdGlvblByZWZpeDogP3N0cmluZztcbiAgLyogS2V5IGZvciBpT1MsIE1hY09TLCB0dk9TIGNsaWVudHMgKi9cbiAgY2xpZW50S2V5OiA/c3RyaW5nO1xuICAvKiBLZXkgZm9yIHRoZSBKYXZhc2NyaXB0IFNESyAqL1xuICBqYXZhc2NyaXB0S2V5OiA/c3RyaW5nO1xuICAvKiBLZXkgZm9yIFVuaXR5IGFuZCAuTmV0IFNESyAqL1xuICBkb3ROZXRLZXk6ID9zdHJpbmc7XG4gIC8qIEtleSBmb3IgZW5jcnlwdGluZyB5b3VyIGZpbGVzXG4gIDpFTlY6IFBBUlNFX1NFUlZFUl9FTkNSWVBUSU9OX0tFWSAqL1xuICBlbmNyeXB0aW9uS2V5OiA/c3RyaW5nO1xuICAvKiBLZXkgZm9yIFJFU1QgY2FsbHNcbiAgOkVOVjogUEFSU0VfU0VSVkVSX1JFU1RfQVBJX0tFWSAqL1xuICByZXN0QVBJS2V5OiA/c3RyaW5nO1xuICAvKiBSZWFkLW9ubHkga2V5LCB3aGljaCBoYXMgdGhlIHNhbWUgY2FwYWJpbGl0aWVzIGFzIE1hc3RlcktleSB3aXRob3V0IHdyaXRlcyAqL1xuICByZWFkT25seU1hc3RlcktleTogP3N0cmluZztcbiAgLyogS2V5IHNlbnQgd2l0aCBvdXRnb2luZyB3ZWJob29rIGNhbGxzICovXG4gIHdlYmhvb2tLZXk6ID9zdHJpbmc7XG4gIC8qIEtleSBmb3IgeW91ciBmaWxlcyAqL1xuICBmaWxlS2V5OiA/c3RyaW5nO1xuICAvKiBFbmFibGUgKG9yIGRpc2FibGUpIHRoZSBhZGRpdGlvbiBvZiBhIHVuaXF1ZSBoYXNoIHRvIHRoZSBmaWxlIG5hbWVzXG4gIDpFTlY6IFBBUlNFX1NFUlZFUl9QUkVTRVJWRV9GSUxFX05BTUVcbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIHByZXNlcnZlRmlsZU5hbWU6ID9ib29sZWFuO1xuICAvKiBQZXJzb25hbGx5IGlkZW50aWZpYWJsZSBpbmZvcm1hdGlvbiBmaWVsZHMgaW4gdGhlIHVzZXIgdGFibGUgdGhlIHNob3VsZCBiZSByZW1vdmVkIGZvciBub24tYXV0aG9yaXplZCB1c2Vycy4gRGVwcmVjYXRlZCBAc2VlIHByb3RlY3RlZEZpZWxkcyAqL1xuICB1c2VyU2Vuc2l0aXZlRmllbGRzOiA/KHN0cmluZ1tdKTtcbiAgLyogUHJvdGVjdGVkIGZpZWxkcyB0aGF0IHNob3VsZCBiZSB0cmVhdGVkIHdpdGggZXh0cmEgc2VjdXJpdHkgd2hlbiBmZXRjaGluZyBkZXRhaWxzLlxuICA6REVGQVVMVDoge1wiX1VzZXJcIjoge1wiKlwiOiBbXCJlbWFpbFwiXX19ICovXG4gIHByb3RlY3RlZEZpZWxkczogP1Byb3RlY3RlZEZpZWxkcztcbiAgLyogRW5hYmxlIChvciBkaXNhYmxlKSBhbm9ueW1vdXMgdXNlcnMsIGRlZmF1bHRzIHRvIHRydWVcbiAgOkVOVjogUEFSU0VfU0VSVkVSX0VOQUJMRV9BTk9OX1VTRVJTXG4gIDpERUZBVUxUOiB0cnVlICovXG4gIGVuYWJsZUFub255bW91c1VzZXJzOiA/Ym9vbGVhbjtcbiAgLyogRW5hYmxlIChvciBkaXNhYmxlKSBjbGllbnQgY2xhc3MgY3JlYXRpb24sIGRlZmF1bHRzIHRvIGZhbHNlXG4gIDpFTlY6IFBBUlNFX1NFUlZFUl9BTExPV19DTElFTlRfQ0xBU1NfQ1JFQVRJT05cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIGFsbG93Q2xpZW50Q2xhc3NDcmVhdGlvbjogP2Jvb2xlYW47XG4gIC8qIEVuYWJsZSAob3IgZGlzYWJsZSkgY3VzdG9tIG9iamVjdElkXG4gIDpFTlY6IFBBUlNFX1NFUlZFUl9BTExPV19DVVNUT01fT0JKRUNUX0lEXG4gIDpERUZBVUxUOiBmYWxzZSAqL1xuICBhbGxvd0N1c3RvbU9iamVjdElkOiA/Ym9vbGVhbjtcbiAgLyogQ29uZmlndXJhdGlvbiBmb3IgeW91ciBhdXRoZW50aWNhdGlvbiBwcm92aWRlcnMsIGFzIHN0cmluZ2lmaWVkIEpTT04uIFNlZSBodHRwOi8vZG9jcy5wYXJzZXBsYXRmb3JtLm9yZy9wYXJzZS1zZXJ2ZXIvZ3VpZGUvI29hdXRoLWFuZC0zcmQtcGFydHktYXV0aGVudGljYXRpb25cbiAgOkVOVjogUEFSU0VfU0VSVkVSX0FVVEhfUFJPVklERVJTICovXG4gIGF1dGg6ID97IFtzdHJpbmddOiBBdXRoQWRhcHRlciB9O1xuICAvKiBFbmFibGUgKG9yIGRpc2FibGUpIGluc2VjdXJlIGF1dGggYWRhcHRlcnMsIGRlZmF1bHRzIHRvIHRydWUuIEluc2VjdXJlIGF1dGggYWRhcHRlcnMgYXJlIGRlcHJlY2F0ZWQgYW5kIGl0IGlzIHJlY29tbWVuZGVkIHRvIGRpc2FibGUgdGhlbS5cbiAgOkVOVjogUEFSU0VfU0VSVkVSX0VOQUJMRV9JTlNFQ1VSRV9BVVRIX0FEQVBURVJTXG4gIDpERUZBVUxUOiB0cnVlICovXG4gIGVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzOiA/Ym9vbGVhbjtcbiAgLyogTWF4IGZpbGUgc2l6ZSBmb3IgdXBsb2FkcywgZGVmYXVsdHMgdG8gMjBtYlxuICA6REVGQVVMVDogMjBtYiAqL1xuICBtYXhVcGxvYWRTaXplOiA/c3RyaW5nO1xuICAvKiBTZXQgdG8gYHRydWVgIHRvIHJlcXVpcmUgdXNlcnMgdG8gdmVyaWZ5IHRoZWlyIGVtYWlsIGFkZHJlc3MgdG8gY29tcGxldGUgdGhlIHNpZ24tdXAgcHJvY2Vzcy4gU3VwcG9ydHMgYSBmdW5jdGlvbiB3aXRoIGEgcmV0dXJuIHZhbHVlIG9mIGB0cnVlYCBvciBgZmFsc2VgIGZvciBjb25kaXRpb25hbCB2ZXJpZmljYXRpb24uXG4gIDxicj48YnI+XG4gIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIHZlcmlmeVVzZXJFbWFpbHM6ID8oYm9vbGVhbiB8IHZvaWQpO1xuICAvKiBTZXQgdG8gYHRydWVgIHRvIHByZXZlbnQgYSB1c2VyIGZyb20gbG9nZ2luZyBpbiBpZiB0aGUgZW1haWwgaGFzIG5vdCB5ZXQgYmVlbiB2ZXJpZmllZCBhbmQgZW1haWwgdmVyaWZpY2F0aW9uIGlzIHJlcXVpcmVkLlxuICA8YnI+PGJyPlxuICBEZWZhdWx0IGlzIGBmYWxzZWAuXG4gIDxicj5cbiAgUmVxdWlyZXMgb3B0aW9uIGB2ZXJpZnlVc2VyRW1haWxzOiB0cnVlYC5cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIHByZXZlbnRMb2dpbldpdGhVbnZlcmlmaWVkRW1haWw6ID9ib29sZWFuO1xuICAvKiBJZiBzZXQgdG8gYHRydWVgIGl0IHByZXZlbnRzIGEgdXNlciBmcm9tIHNpZ25pbmcgdXAgaWYgdGhlIGVtYWlsIGhhcyBub3QgeWV0IGJlZW4gdmVyaWZpZWQgYW5kIGVtYWlsIHZlcmlmaWNhdGlvbiBpcyByZXF1aXJlZC4gSW4gdGhhdCBjYXNlIHRoZSBzZXJ2ZXIgcmVzcG9uZHMgdG8gdGhlIHNpZ24tdXAgd2l0aCBIVFRQIHN0YXR1cyA0MDAgYW5kIGEgUGFyc2UgRXJyb3IgMjA1IGBFTUFJTF9OT1RfRk9VTkRgLiBJZiBzZXQgdG8gYGZhbHNlYCB0aGUgc2VydmVyIHJlc3BvbmRzIHdpdGggSFRUUCBzdGF0dXMgMjAwLCBhbmQgY2xpZW50IFNES3MgcmV0dXJuIGFuIHVuYXV0aGVudGljYXRlZCBQYXJzZSBVc2VyIHdpdGhvdXQgc2Vzc2lvbiB0b2tlbi4gSW4gdGhhdCBjYXNlIHN1YnNlcXVlbnQgcmVxdWVzdHMgZmFpbCB1bnRpbCB0aGUgdXNlcidzIGVtYWlsIGFkZHJlc3MgaXMgdmVyaWZpZWQuXG4gIDxicj48YnI+XG4gIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAgPGJyPlxuICBSZXF1aXJlcyBvcHRpb24gYHZlcmlmeVVzZXJFbWFpbHM6IHRydWVgLlxuICA6REVGQVVMVDogZmFsc2UgKi9cbiAgcHJldmVudFNpZ251cFdpdGhVbnZlcmlmaWVkRW1haWw6ID9ib29sZWFuO1xuICAvKiBTZXQgdGhlIHZhbGlkaXR5IGR1cmF0aW9uIG9mIHRoZSBlbWFpbCB2ZXJpZmljYXRpb24gdG9rZW4gaW4gc2Vjb25kcyBhZnRlciB3aGljaCB0aGUgdG9rZW4gZXhwaXJlcy4gVGhlIHRva2VuIGlzIHVzZWQgaW4gdGhlIGxpbmsgdGhhdCBpcyBzZXQgaW4gdGhlIGVtYWlsLiBBZnRlciB0aGUgdG9rZW4gZXhwaXJlcywgdGhlIGxpbmsgYmVjb21lcyBpbnZhbGlkIGFuZCBhIG5ldyBsaW5rIGhhcyB0byBiZSBzZW50LiBJZiB0aGUgb3B0aW9uIGlzIG5vdCBzZXQgb3Igc2V0IHRvIGB1bmRlZmluZWRgLCB0aGVuIHRoZSB0b2tlbiBuZXZlciBleHBpcmVzLlxuICA8YnI+PGJyPlxuICBGb3IgZXhhbXBsZSwgdG8gZXhwaXJlIHRoZSB0b2tlbiBhZnRlciAyIGhvdXJzLCBzZXQgYSB2YWx1ZSBvZiA3MjAwIHNlY29uZHMgKD0gNjAgc2Vjb25kcyAqIDYwIG1pbnV0ZXMgKiAyIGhvdXJzKS5cbiAgPGJyPjxicj5cbiAgRGVmYXVsdCBpcyBgdW5kZWZpbmVkYC5cbiAgPGJyPlxuICBSZXF1aXJlcyBvcHRpb24gYHZlcmlmeVVzZXJFbWFpbHM6IHRydWVgLlxuICAqL1xuICBlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbjogP251bWJlcjtcbiAgLyogU2V0IHRvIGB0cnVlYCBpZiBhIGVtYWlsIHZlcmlmaWNhdGlvbiB0b2tlbiBzaG91bGQgYmUgcmV1c2VkIGluIGNhc2UgYW5vdGhlciB0b2tlbiBpcyByZXF1ZXN0ZWQgYnV0IHRoZXJlIGlzIGEgdG9rZW4gdGhhdCBpcyBzdGlsbCB2YWxpZCwgaS5lLiBoYXMgbm90IGV4cGlyZWQuIFRoaXMgYXZvaWRzIHRoZSBvZnRlbiBvYnNlcnZlZCBpc3N1ZSB0aGF0IGEgdXNlciByZXF1ZXN0cyBtdWx0aXBsZSBlbWFpbHMgYW5kIGRvZXMgbm90IGtub3cgd2hpY2ggbGluayBjb250YWlucyBhIHZhbGlkIHRva2VuIGJlY2F1c2UgZWFjaCBuZXdseSBnZW5lcmF0ZWQgdG9rZW4gd291bGQgaW52YWxpZGF0ZSB0aGUgcHJldmlvdXMgdG9rZW4uXG4gIDxicj48YnI+XG4gIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAgPGJyPlxuICBSZXF1aXJlcyBvcHRpb24gYHZlcmlmeVVzZXJFbWFpbHM6IHRydWVgLlxuICA6REVGQVVMVDogZmFsc2UgKi9cbiAgZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZDogP2Jvb2xlYW47XG4gIC8qIFNldCB0byBgZmFsc2VgIHRvIHByZXZlbnQgc2VuZGluZyBvZiB2ZXJpZmljYXRpb24gZW1haWwuIFN1cHBvcnRzIGEgZnVuY3Rpb24gd2l0aCBhIHJldHVybiB2YWx1ZSBvZiBgdHJ1ZWAgb3IgYGZhbHNlYCBmb3IgY29uZGl0aW9uYWwgZW1haWwgc2VuZGluZy5cbiAgPGJyPjxicj5cbiAgRGVmYXVsdCBpcyBgdHJ1ZWAuXG4gIDxicj5cbiAgOkRFRkFVTFQ6IHRydWUgKi9cbiAgc2VuZFVzZXJFbWFpbFZlcmlmaWNhdGlvbjogPyhib29sZWFuIHwgdm9pZCk7XG4gIC8qIFRoZSBhY2NvdW50IGxvY2tvdXQgcG9saWN5IGZvciBmYWlsZWQgbG9naW4gYXR0ZW1wdHMuICovXG4gIGFjY291bnRMb2Nrb3V0OiA/QWNjb3VudExvY2tvdXRPcHRpb25zO1xuICAvKiBUaGUgcGFzc3dvcmQgcG9saWN5IGZvciBlbmZvcmNpbmcgcGFzc3dvcmQgcmVsYXRlZCBydWxlcy4gKi9cbiAgcGFzc3dvcmRQb2xpY3k6ID9QYXNzd29yZFBvbGljeU9wdGlvbnM7XG4gIC8qIEFkYXB0ZXIgbW9kdWxlIGZvciB0aGUgY2FjaGUgKi9cbiAgY2FjaGVBZGFwdGVyOiA/QWRhcHRlcjxDYWNoZUFkYXB0ZXI+O1xuICAvKiBBZGFwdGVyIG1vZHVsZSBmb3IgZW1haWwgc2VuZGluZyAqL1xuICBlbWFpbEFkYXB0ZXI6ID9BZGFwdGVyPE1haWxBZGFwdGVyPjtcbiAgLyogSWYgc2V0IHRvIGB0cnVlYCwgYSBgUGFyc2UuT2JqZWN0YCB0aGF0IGlzIGluIHRoZSBwYXlsb2FkIHdoZW4gY2FsbGluZyBhIENsb3VkIEZ1bmN0aW9uIHdpbGwgYmUgY29udmVydGVkIHRvIGFuIGluc3RhbmNlIG9mIGBQYXJzZS5PYmplY3RgLiBJZiBgZmFsc2VgLCB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGNvbnZlcnRlZCBhbmQgaW5zdGVhZCBiZSBhIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0LCB3aGljaCBjb250YWlucyB0aGUgcmF3IGRhdGEgb2YgYSBgUGFyc2UuT2JqZWN0YCBidXQgaXMgbm90IGFuIGFjdHVhbCBpbnN0YW5jZSBvZiBgUGFyc2UuT2JqZWN0YC4gRGVmYXVsdCBpcyBgZmFsc2VgLiA8YnI+PGJyPuKEue+4jyBUaGUgZXhwZWN0ZWQgYmVoYXZpb3Igd291bGQgYmUgdGhhdCB0aGUgb2JqZWN0IGlzIGNvbnZlcnRlZCB0byBhbiBpbnN0YW5jZSBvZiBgUGFyc2UuT2JqZWN0YCwgc28geW91IHdvdWxkIG5vcm1hbGx5IHNldCB0aGlzIG9wdGlvbiB0byBgdHJ1ZWAuIFRoZSBkZWZhdWx0IGlzIGBmYWxzZWAgYmVjYXVzZSB0aGlzIGlzIGEgdGVtcG9yYXJ5IG9wdGlvbiB0aGF0IGhhcyBiZWVuIGludHJvZHVjZWQgdG8gYXZvaWQgYSBicmVha2luZyBjaGFuZ2Ugd2hlbiBmaXhpbmcgYSBidWcgd2hlcmUgSmF2YVNjcmlwdCBvYmplY3RzIGFyZSBub3QgY29udmVydGVkIHRvIGFjdHVhbCBpbnN0YW5jZXMgb2YgYFBhcnNlLk9iamVjdGAuXG4gIDpERUZBVUxUOiB0cnVlICovXG4gIGVuY29kZVBhcnNlT2JqZWN0SW5DbG91ZEZ1bmN0aW9uOiA/Ym9vbGVhbjtcbiAgLyogUHVibGljIFVSTCB0byB5b3VyIHBhcnNlIHNlcnZlciB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly8uXG4gIDpFTlY6IFBBUlNFX1BVQkxJQ19TRVJWRVJfVVJMICovXG4gIHB1YmxpY1NlcnZlclVSTDogP3N0cmluZztcbiAgLyogVGhlIG9wdGlvbnMgZm9yIHBhZ2VzIHN1Y2ggYXMgcGFzc3dvcmQgcmVzZXQgYW5kIGVtYWlsIHZlcmlmaWNhdGlvbi5cbiAgOkRFRkFVTFQ6IHt9ICovXG4gIHBhZ2VzOiA/UGFnZXNPcHRpb25zO1xuICAvKiBjdXN0b20gcGFnZXMgZm9yIHBhc3N3b3JkIHZhbGlkYXRpb24gYW5kIHJlc2V0XG4gIDpERUZBVUxUOiB7fSAqL1xuICBjdXN0b21QYWdlczogP0N1c3RvbVBhZ2VzT3B0aW9ucztcbiAgLyogcGFyc2Utc2VydmVyJ3MgTGl2ZVF1ZXJ5IGNvbmZpZ3VyYXRpb24gb2JqZWN0ICovXG4gIGxpdmVRdWVyeTogP0xpdmVRdWVyeU9wdGlvbnM7XG4gIC8qIFNlc3Npb24gZHVyYXRpb24sIGluIHNlY29uZHMsIGRlZmF1bHRzIHRvIDEgeWVhclxuICA6REVGQVVMVDogMzE1MzYwMDAgKi9cbiAgc2Vzc2lvbkxlbmd0aDogP251bWJlcjtcbiAgLyogV2hldGhlciBQYXJzZSBTZXJ2ZXIgc2hvdWxkIGF1dG9tYXRpY2FsbHkgZXh0ZW5kIGEgdmFsaWQgc2Vzc2lvbiBieSB0aGUgc2Vzc2lvbkxlbmd0aC4gSW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2Vzc2lvbiB1cGRhdGVzIGluIHRoZSBkYXRhYmFzZSwgYSBzZXNzaW9uIHdpbGwgb25seSBiZSBleHRlbmRlZCB3aGVuIGEgcmVxdWVzdCBpcyByZWNlaXZlZCBhZnRlciBhdCBsZWFzdCBoYWxmIG9mIHRoZSBjdXJyZW50IHNlc3Npb24ncyBsaWZldGltZSBoYXMgcGFzc2VkLlxuICA6REVGQVVMVDogZmFsc2UgKi9cbiAgZXh0ZW5kU2Vzc2lvbk9uVXNlOiA/Ym9vbGVhbjtcbiAgLyogRGVmYXVsdCB2YWx1ZSBmb3IgbGltaXQgb3B0aW9uIG9uIHF1ZXJpZXMsIGRlZmF1bHRzIHRvIGAxMDBgLlxuICA6REVGQVVMVDogMTAwICovXG4gIGRlZmF1bHRMaW1pdDogP251bWJlcjtcbiAgLyogTWF4IHZhbHVlIGZvciBsaW1pdCBvcHRpb24gb24gcXVlcmllcywgZGVmYXVsdHMgdG8gdW5saW1pdGVkICovXG4gIG1heExpbWl0OiA/bnVtYmVyO1xuICAvKiBTZXRzIHdoZXRoZXIgd2Ugc2hvdWxkIGV4cGlyZSB0aGUgaW5hY3RpdmUgc2Vzc2lvbnMsIGRlZmF1bHRzIHRvIHRydWUuIElmIGZhbHNlLCBhbGwgbmV3IHNlc3Npb25zIGFyZSBjcmVhdGVkIHdpdGggbm8gZXhwaXJhdGlvbiBkYXRlLlxuICA6REVGQVVMVDogdHJ1ZSAqL1xuICBleHBpcmVJbmFjdGl2ZVNlc3Npb25zOiA/Ym9vbGVhbjtcbiAgLyogV2hlbiBhIHVzZXIgY2hhbmdlcyB0aGVpciBwYXNzd29yZCwgZWl0aGVyIHRocm91Z2ggdGhlIHJlc2V0IHBhc3N3b3JkIGVtYWlsIG9yIHdoaWxlIGxvZ2dlZCBpbiwgYWxsIHNlc3Npb25zIGFyZSByZXZva2VkIGlmIHRoaXMgaXMgdHJ1ZS4gU2V0IHRvIGZhbHNlIGlmIHlvdSBkb24ndCB3YW50IHRvIHJldm9rZSBzZXNzaW9ucy5cbiAgOkRFRkFVTFQ6IHRydWUgKi9cbiAgcmV2b2tlU2Vzc2lvbk9uUGFzc3dvcmRSZXNldDogP2Jvb2xlYW47XG4gIC8qIFNldHMgdGhlIFRUTCBmb3IgdGhlIGluIG1lbW9yeSBjYWNoZSAoaW4gbXMpLCBkZWZhdWx0cyB0byA1MDAwICg1IHNlY29uZHMpXG4gIDpERUZBVUxUOiA1MDAwICovXG4gIGNhY2hlVFRMOiA/bnVtYmVyO1xuICAvKiBTZXRzIHRoZSBtYXhpbXVtIHNpemUgZm9yIHRoZSBpbiBtZW1vcnkgY2FjaGUsIGRlZmF1bHRzIHRvIDEwMDAwXG4gIDpERUZBVUxUOiAxMDAwMCAqL1xuICBjYWNoZU1heFNpemU6ID9udW1iZXI7XG4gIC8qIFNldCB0byBgdHJ1ZWAgaWYgUGFyc2UgcmVxdWVzdHMgd2l0aGluIHRoZSBzYW1lIE5vZGUuanMgZW52aXJvbm1lbnQgYXMgUGFyc2UgU2VydmVyIHNob3VsZCBiZSByb3V0ZWQgdG8gUGFyc2UgU2VydmVyIGRpcmVjdGx5IGluc3RlYWQgb2YgdmlhIHRoZSBIVFRQIGludGVyZmFjZS4gRGVmYXVsdCBpcyBgZmFsc2VgLlxuICA8YnI+PGJyPlxuICBJZiBzZXQgdG8gYGZhbHNlYCB0aGVuIFBhcnNlIHJlcXVlc3RzIHdpdGhpbiB0aGUgc2FtZSBOb2RlLmpzIGVudmlyb25tZW50IGFzIFBhcnNlIFNlcnZlciBhcmUgZXhlY3V0ZWQgYXMgSFRUUCByZXF1ZXN0cyBzZW50IHRvIFBhcnNlIFNlcnZlciB2aWEgdGhlIGBzZXJ2ZXJVUkxgLiBGb3IgZXhhbXBsZSwgYSBgUGFyc2UuUXVlcnlgIGluIENsb3VkIENvZGUgaXMgY2FsbGluZyBQYXJzZSBTZXJ2ZXIgdmlhIGEgSFRUUCByZXF1ZXN0LiBUaGUgc2VydmVyIGlzIGVzc2VudGlhbGx5IG1ha2luZyBhIEhUVFAgcmVxdWVzdCB0byBpdHNlbGYsIHVubmVjZXNzYXJpbHkgdXNpbmcgbmV0d29yayByZXNvdXJjZXMgc3VjaCBhcyBuZXR3b3JrIHBvcnRzLlxuICA8YnI+PGJyPlxuICDimqDvuI8gSW4gZW52aXJvbm1lbnRzIHdoZXJlIG11bHRpcGxlIFBhcnNlIFNlcnZlciBpbnN0YW5jZXMgcnVuIGJlaGluZCBhIGxvYWQgYmFsYW5jZXIgYW5kIFBhcnNlIHJlcXVlc3RzIHdpdGhpbiB0aGUgY3VycmVudCBOb2RlLmpzIGVudmlyb25tZW50IHNob3VsZCBiZSByb3V0ZWQgdmlhIHRoZSBsb2FkIGJhbGFuY2VyIGFuZCBkaXN0cmlidXRlZCBhcyBIVFRQIHJlcXVlc3RzIGFtb25nIGFsbCBpbnN0YW5jZXMgdmlhIHRoZSBgc2VydmVyVVJMYCwgdGhpcyBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuXG4gIDpERUZBVUxUOiB0cnVlICovXG4gIGRpcmVjdEFjY2VzczogP2Jvb2xlYW47XG4gIC8qIEVuYWJsZXMgdGhlIGRlZmF1bHQgZXhwcmVzcyBlcnJvciBoYW5kbGVyIGZvciBhbGwgZXJyb3JzXG4gIDpERUZBVUxUOiBmYWxzZSAqL1xuICBlbmFibGVFeHByZXNzRXJyb3JIYW5kbGVyOiA/Ym9vbGVhbjtcbiAgLyogU2V0cyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gZ2VuZXJhdGVkIG9iamVjdCBpZCdzLCBkZWZhdWx0IDEwXG4gIDpERUZBVUxUOiAxMCAqL1xuICBvYmplY3RJZFNpemU6ID9udW1iZXI7XG4gIC8qIFRoZSBwb3J0IHRvIHJ1biB0aGUgUGFyc2VTZXJ2ZXIsIGRlZmF1bHRzIHRvIDEzMzcuXG4gIDpFTlY6IFBPUlRcbiAgOkRFRkFVTFQ6IDEzMzcgKi9cbiAgcG9ydDogP251bWJlcjtcbiAgLyogVGhlIGhvc3QgdG8gc2VydmUgUGFyc2VTZXJ2ZXIgb24sIGRlZmF1bHRzIHRvIDAuMC4wLjBcbiAgOkRFRkFVTFQ6IDAuMC4wLjAgKi9cbiAgaG9zdDogP3N0cmluZztcbiAgLyogTW91bnQgcGF0aCBmb3IgdGhlIHNlcnZlciwgZGVmYXVsdHMgdG8gL3BhcnNlXG4gIDpERUZBVUxUOiAvcGFyc2UgKi9cbiAgbW91bnRQYXRoOiA/c3RyaW5nO1xuICAvKiBSdW4gd2l0aCBjbHVzdGVyLCBvcHRpb25hbGx5IHNldCB0aGUgbnVtYmVyIG9mIHByb2Nlc3NlcyBkZWZhdWx0IHRvIG9zLmNwdXMoKS5sZW5ndGggKi9cbiAgY2x1c3RlcjogP051bWJlck9yQm9vbGVhbjtcbiAgLyogbWlkZGxld2FyZSBmb3IgZXhwcmVzcyBzZXJ2ZXIsIGNhbiBiZSBzdHJpbmcgb3IgZnVuY3Rpb24gKi9cbiAgbWlkZGxld2FyZTogPygoKCkgPT4gdm9pZCkgfCBzdHJpbmcpO1xuICAvKiBUaGUgdHJ1c3QgcHJveHkgc2V0dGluZ3MuIEl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBzZXR1cCBvZiB0aGUgcmV2ZXJzZSBwcm94eSwgc2luY2UgdGhpcyBzZXR0aW5nIHdpbGwgdHJ1c3QgdmFsdWVzIHByb3ZpZGVkIGluIHRoZSBQYXJzZSBTZXJ2ZXIgQVBJIHJlcXVlc3QuIFNlZSB0aGUgPGEgaHJlZj1cImh0dHBzOi8vZXhwcmVzc2pzLmNvbS9lbi9ndWlkZS9iZWhpbmQtcHJveGllcy5odG1sXCI+ZXhwcmVzcyB0cnVzdCBwcm94eSBzZXR0aW5nczwvYT4gZG9jdW1lbnRhdGlvbi4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIHRydXN0UHJveHk6ID9hbnk7XG4gIC8qIFN0YXJ0cyB0aGUgbGl2ZVF1ZXJ5IHNlcnZlciAqL1xuICBzdGFydExpdmVRdWVyeVNlcnZlcjogP2Jvb2xlYW47XG4gIC8qIExpdmUgcXVlcnkgc2VydmVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAod2lsbCBzdGFydCB0aGUgbGl2ZVF1ZXJ5IHNlcnZlcikgKi9cbiAgbGl2ZVF1ZXJ5U2VydmVyT3B0aW9uczogP0xpdmVRdWVyeVNlcnZlck9wdGlvbnM7XG4gIC8qIE9wdGlvbnMgZm9yIHJlcXVlc3QgaWRlbXBvdGVuY3kgdG8gZGVkdXBsaWNhdGUgaWRlbnRpY2FsIHJlcXVlc3RzIHRoYXQgbWF5IGJlIGNhdXNlZCBieSBuZXR3b3JrIGlzc3Vlcy4gQ2F1dGlvbiwgdGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZSB0aGF0IG1heSBub3QgYmUgYXBwcm9wcmlhdGUgZm9yIHByb2R1Y3Rpb24uXG4gIDpFTlY6IFBBUlNFX1NFUlZFUl9FWFBFUklNRU5UQUxfSURFTVBPVEVOQ1lfT1BUSU9OU1xuICA6REVGQVVMVDogZmFsc2UgKi9cbiAgaWRlbXBvdGVuY3lPcHRpb25zOiA/SWRlbXBvdGVuY3lPcHRpb25zO1xuICAvKiBPcHRpb25zIGZvciBmaWxlIHVwbG9hZHNcbiAgOkVOVjogUEFSU0VfU0VSVkVSX0ZJTEVfVVBMT0FEX09QVElPTlNcbiAgOkRFRkFVTFQ6IHt9ICovXG4gIGZpbGVVcGxvYWQ6ID9GaWxlVXBsb2FkT3B0aW9ucztcbiAgLyogRnVsbCBwYXRoIHRvIHlvdXIgR3JhcGhRTCBjdXN0b20gc2NoZW1hLmdyYXBocWwgZmlsZSAqL1xuICBncmFwaFFMU2NoZW1hOiA/c3RyaW5nO1xuICAvKiBNb3VudHMgdGhlIEdyYXBoUUwgZW5kcG9pbnRcbiAgOkVOVjogUEFSU0VfU0VSVkVSX01PVU5UX0dSQVBIUUxcbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIG1vdW50R3JhcGhRTDogP2Jvb2xlYW47XG4gIC8qIE1vdW50IHBhdGggZm9yIHRoZSBHcmFwaFFMIGVuZHBvaW50LCBkZWZhdWx0cyB0byAvZ3JhcGhxbFxuICA6RU5WOiBQQVJTRV9TRVJWRVJfR1JBUEhRTF9QQVRIXG4gIDpERUZBVUxUOiAvZ3JhcGhxbCAqL1xuICBncmFwaFFMUGF0aDogP3N0cmluZztcbiAgLyogRW5hYmxlIHB1YmxpYyBpbnRyb3NwZWN0aW9uIGZvciB0aGUgR3JhcGhRTCBlbmRwb2ludCwgZGVmYXVsdHMgdG8gZmFsc2VcbiAgOkVOVjogUEFSU0VfU0VSVkVSX0dSQVBIUUxfUFVCTElDX0lOVFJPU1BFQ1RJT05cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIGdyYXBoUUxQdWJsaWNJbnRyb3NwZWN0aW9uOiA/Ym9vbGVhbjtcbiAgLyogTW91bnRzIHRoZSBHcmFwaFFMIFBsYXlncm91bmQgLSBuZXZlciB1c2UgdGhpcyBvcHRpb24gaW4gcHJvZHVjdGlvblxuICA6RU5WOiBQQVJTRV9TRVJWRVJfTU9VTlRfUExBWUdST1VORFxuICA6REVGQVVMVDogZmFsc2UgKi9cbiAgbW91bnRQbGF5Z3JvdW5kOiA/Ym9vbGVhbjtcbiAgLyogTW91bnQgcGF0aCBmb3IgdGhlIEdyYXBoUUwgUGxheWdyb3VuZCwgZGVmYXVsdHMgdG8gL3BsYXlncm91bmRcbiAgOkVOVjogUEFSU0VfU0VSVkVSX1BMQVlHUk9VTkRfUEFUSFxuICA6REVGQVVMVDogL3BsYXlncm91bmQgKi9cbiAgcGxheWdyb3VuZFBhdGg6ID9zdHJpbmc7XG4gIC8qIERlZmluZWQgc2NoZW1hXG4gIDpFTlY6IFBBUlNFX1NFUlZFUl9TQ0hFTUFcbiAgKi9cbiAgc2NoZW1hOiA/U2NoZW1hT3B0aW9ucztcbiAgLyogQ2FsbGJhY2sgd2hlbiBzZXJ2ZXIgaGFzIGNsb3NlZCAqL1xuICBzZXJ2ZXJDbG9zZUNvbXBsZXRlOiA/KCkgPT4gdm9pZDtcbiAgLyogVGhlIHNlY3VyaXR5IG9wdGlvbnMgdG8gaWRlbnRpZnkgYW5kIHJlcG9ydCB3ZWFrIHNlY3VyaXR5IHNldHRpbmdzLlxuICA6REVGQVVMVDoge30gKi9cbiAgc2VjdXJpdHk6ID9TZWN1cml0eU9wdGlvbnM7XG4gIC8qIFNldCB0byB0cnVlIGlmIG5ldyB1c2VycyBzaG91bGQgYmUgY3JlYXRlZCB3aXRob3V0IHB1YmxpYyByZWFkIGFuZCB3cml0ZSBhY2Nlc3MuXG4gIDpERUZBVUxUOiB0cnVlICovXG4gIGVuZm9yY2VQcml2YXRlVXNlcnM6ID9ib29sZWFuO1xuICAvKiBBbGxvdyBhIHVzZXIgdG8gbG9nIGluIGV2ZW4gaWYgdGhlIDNyZCBwYXJ0eSBhdXRoZW50aWNhdGlvbiB0b2tlbiB0aGF0IHdhcyB1c2VkIHRvIHNpZ24gaW4gdG8gdGhlaXIgYWNjb3VudCBoYXMgZXhwaXJlZC4gSWYgdGhpcyBpcyBzZXQgdG8gYGZhbHNlYCwgdGhlbiB0aGUgdG9rZW4gd2lsbCBiZSB2YWxpZGF0ZWQgZXZlcnkgdGltZSB0aGUgdXNlciBzaWducyBpbiB0byB0aGVpciBhY2NvdW50LiBUaGlzIHJlZmVycyB0byB0aGUgdG9rZW4gdGhhdCBpcyBzdG9yZWQgaW4gdGhlIGBfVXNlci5hdXRoRGF0YWAgZmllbGQuIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gIDpERUZBVUxUOiBmYWxzZSAqL1xuICBhbGxvd0V4cGlyZWRBdXRoRGF0YVRva2VuOiA/Ym9vbGVhbjtcbiAgLyogQW4gYXJyYXkgb2Yga2V5cyBhbmQgdmFsdWVzIHRoYXQgYXJlIHByb2hpYml0ZWQgaW4gZGF0YWJhc2UgcmVhZCBhbmQgd3JpdGUgcmVxdWVzdHMgdG8gcHJldmVudCBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBJdCBpcyBwb3NzaWJsZSB0byBzcGVjaWZ5IG9ubHkgYSBrZXkgKGB7XCJrZXlcIjpcIi4uLlwifWApLCBvbmx5IGEgdmFsdWUgKGB7XCJ2YWx1ZVwiOlwiLi4uXCJ9YCkgb3IgYSBrZXktdmFsdWUgcGFpciAoYHtcImtleVwiOlwiLi4uXCIsXCJ2YWx1ZVwiOlwiLi4uXCJ9YCkuIFRoZSBzcGVjaWZpY2F0aW9uIGNhbiB1c2UgdGhlIGZvbGxvd2luZyB0eXBlczogYGJvb2xlYW5gLCBgbnVtZXJpY2Agb3IgYHN0cmluZ2AsIHdoZXJlIGBzdHJpbmdgIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYSByZWdleCBub3RhdGlvbi4gUmVxdWVzdCBkYXRhIGlzIGRlZXAtc2Nhbm5lZCBmb3IgbWF0Y2hpbmcgZGVmaW5pdGlvbnMgdG8gZGV0ZWN0IGFsc28gYW55IG5lc3RlZCBvY2N1cnJlbmNlcy4gRGVmYXVsdHMgYXJlIHBhdHRlcm5zIHRoYXQgYXJlIGxpa2VseSB0byBiZSB1c2VkIGluIG1hbGljaW91cyByZXF1ZXN0cy4gU2V0dGluZyB0aGlzIG9wdGlvbiB3aWxsIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHBhdHRlcm5zLlxuICA6REVGQVVMVDogW3tcImtleVwiOlwiX2Jzb250eXBlXCIsXCJ2YWx1ZVwiOlwiQ29kZVwifSx7XCJrZXlcIjpcImNvbnN0cnVjdG9yXCJ9LHtcImtleVwiOlwiX19wcm90b19fXCJ9XSAqL1xuICByZXF1ZXN0S2V5d29yZERlbnlsaXN0OiA/KFJlcXVlc3RLZXl3b3JkRGVueWxpc3RbXSk7XG4gIC8qIE9wdGlvbnMgdG8gbGltaXQgcmVwZWF0ZWQgcmVxdWVzdHMgdG8gUGFyc2UgU2VydmVyIEFQSXMuIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJvdGVjdCBzZW5zaXRpdmUgZW5kcG9pbnRzIHN1Y2ggYXMgYC9yZXF1ZXN0UGFzc3dvcmRSZXNldGAgZnJvbSBicnV0ZS1mb3JjZSBhdHRhY2tzIG9yIFBhcnNlIFNlcnZlciBhcyBhIHdob2xlIGZyb20gZGVuaWFsLW9mLXNlcnZpY2UgKERvUykgYXR0YWNrcy48YnI+PGJyPuKEue+4jyBNaW5kIHRoZSBmb2xsb3dpbmcgbGltaXRhdGlvbnM6PGJyPi0gcmF0ZSBsaW1pdHMgYXBwbGllZCBwZXIgSVAgYWRkcmVzczsgdGhpcyBsaW1pdHMgcHJvdGVjdGlvbiBhZ2FpbnN0IGRpc3RyaWJ1dGVkIGRlbmlhbC1vZi1zZXJ2aWNlIChERG9TKSBhdHRhY2tzIHdoZXJlIG1hbnkgcmVxdWVzdHMgYXJlIGNvbWluZyBmcm9tIHZhcmlvdXMgSVAgYWRkcmVzc2VzPGJyPi0gaWYgbXVsdGlwbGUgUGFyc2UgU2VydmVyIGluc3RhbmNlcyBhcmUgYmVoaW5kIGEgbG9hZCBiYWxhbmNlciBvciByYW4gaW4gYSBjbHVzdGVyLCBlYWNoIGluc3RhbmNlIHdpbGwgY2FsY3VsYXRlIGl0J3Mgb3duIHJlcXVlc3QgcmF0ZXMsIGluZGVwZW5kZW50IGZyb20gb3RoZXIgaW5zdGFuY2VzOyB0aGlzIGxpbWl0cyB0aGUgYXBwbGljYWJpbGl0eSBvZiB0aGlzIGZlYXR1cmUgd2hlbiB1c2luZyBhIGxvYWQgYmFsYW5jZXIgYW5kIGFub3RoZXIgcmF0ZSBsaW1pdGluZyBzb2x1dGlvbiB0aGF0IHRha2VzIHJlcXVlc3RzIGFjcm9zcyBhbGwgaW5zdGFuY2VzIGludG8gYWNjb3VudCBtYXkgYmUgbW9yZSBzdWl0YWJsZTxicj4tIHRoaXMgZmVhdHVyZSBwcm92aWRlcyBiYXNpYyBwcm90ZWN0aW9uIGFnYWluc3QgZGVuaWFsLW9mLXNlcnZpY2UgYXR0YWNrcywgYnV0IGEgbW9yZSBzb3BoaXN0aWNhdGVkIHNvbHV0aW9uIHdvcmtzIGVhcmxpZXIgaW4gdGhlIHJlcXVlc3QgZmxvdyBhbmQgcHJldmVudHMgYSBtYWxpY2lvdXMgcmVxdWVzdHMgdG8gZXZlbiByZWFjaCBhIHNlcnZlciBpbnN0YW5jZTsgaXQncyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gaW1wbGVtZW50IGEgc29sdXRpb24gYWNjb3JkaW5nIHRvIGFyY2hpdGVjdHVyZSBhbmQgdXNlciBjYXNlLlxuICA6REVGQVVMVDogW10gKi9cbiAgcmF0ZUxpbWl0OiA/KFJhdGVMaW1pdE9wdGlvbnNbXSk7XG4gIC8qIE9wdGlvbnMgdG8gY3VzdG9taXplIHRoZSByZXF1ZXN0IGNvbnRleHQgdXNpbmcgaW52ZXJzaW9uIG9mIGNvbnRyb2wvZGVwZW5kZW5jeSBpbmplY3Rpb24uKi9cbiAgcmVxdWVzdENvbnRleHRNaWRkbGV3YXJlOiA/KHJlcTogYW55LCByZXM6IGFueSwgbmV4dDogYW55KSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJhdGVMaW1pdE9wdGlvbnMge1xuICAvKiBUaGUgcGF0aCBvZiB0aGUgQVBJIHJvdXRlIHRvIGJlIHJhdGUgbGltaXRlZC4gUm91dGUgcGF0aHMsIGluIGNvbWJpbmF0aW9uIHdpdGggYSByZXF1ZXN0IG1ldGhvZCwgZGVmaW5lIHRoZSBlbmRwb2ludHMgYXQgd2hpY2ggcmVxdWVzdHMgY2FuIGJlIG1hZGUuIFJvdXRlIHBhdGhzIGNhbiBiZSBzdHJpbmdzLCBzdHJpbmcgcGF0dGVybnMsIG9yIHJlZ3VsYXIgZXhwcmVzc2lvbi4gU2VlOiBodHRwczovL2V4cHJlc3Nqcy5jb20vZW4vZ3VpZGUvcm91dGluZy5odG1sICovXG4gIHJlcXVlc3RQYXRoOiBzdHJpbmc7XG4gIC8qIFRoZSB3aW5kb3cgb2YgdGltZSBpbiBtaWxsaXNlY29uZHMgd2l0aGluIHdoaWNoIHRoZSBudW1iZXIgb2YgcmVxdWVzdHMgc2V0IGluIGByZXF1ZXN0Q291bnRgIGNhbiBiZSBtYWRlIGJlZm9yZSB0aGUgcmF0ZSBsaW1pdCBpcyBhcHBsaWVkLiAqL1xuICByZXF1ZXN0VGltZVdpbmRvdzogP251bWJlcjtcbiAgLyogVGhlIG51bWJlciBvZiByZXF1ZXN0cyB0aGF0IGNhbiBiZSBtYWRlIHBlciBJUCBhZGRyZXNzIHdpdGhpbiB0aGUgdGltZSB3aW5kb3cgc2V0IGluIGByZXF1ZXN0VGltZVdpbmRvd2AgYmVmb3JlIHRoZSByYXRlIGxpbWl0IGlzIGFwcGxpZWQuICovXG4gIHJlcXVlc3RDb3VudDogP251bWJlcjtcbiAgLyogVGhlIGVycm9yIG1lc3NhZ2UgdGhhdCBzaG91bGQgYmUgcmV0dXJuZWQgaW4gdGhlIGJvZHkgb2YgdGhlIEhUVFAgNDI5IHJlc3BvbnNlIHdoZW4gdGhlIHJhdGUgbGltaXQgaXMgaGl0LiBEZWZhdWx0IGlzIGBUb28gbWFueSByZXF1ZXN0cy5gLlxuICA6REVGQVVMVDogVG9vIG1hbnkgcmVxdWVzdHMuICovXG4gIGVycm9yUmVzcG9uc2VNZXNzYWdlOiA/c3RyaW5nO1xuICAvKiBPcHRpb25hbCwgdGhlIEhUVFAgcmVxdWVzdCBtZXRob2RzIHRvIHdoaWNoIHRoZSByYXRlIGxpbWl0IHNob3VsZCBiZSBhcHBsaWVkLCBkZWZhdWx0IGlzIGFsbCBtZXRob2RzLiAqL1xuICByZXF1ZXN0TWV0aG9kczogPyhzdHJpbmdbXSk7XG4gIC8qIE9wdGlvbmFsLCBpZiBgdHJ1ZWAgdGhlIHJhdGUgbGltaXQgd2lsbCBhbHNvIGFwcGx5IHRvIHJlcXVlc3RzIHVzaW5nIHRoZSBgbWFzdGVyS2V5YCwgZGVmYXVsdCBpcyBgZmFsc2VgLiBOb3RlIHRoYXQgYSBwdWJsaWMgQ2xvdWQgQ29kZSBmdW5jdGlvbiB0aGF0IHRyaWdnZXJzIGludGVybmFsIHJlcXVlc3RzIHVzaW5nIHRoZSBgbWFzdGVyS2V5YCBtYXkgY2lyY3VtdmVudCByYXRlIGxpbWl0aW5nIGFuZCBiZSB2dWxuZXJhYmxlIHRvIGF0dGFja3MuXG4gIDpERUZBVUxUOiBmYWxzZSAqL1xuICBpbmNsdWRlTWFzdGVyS2V5OiA/Ym9vbGVhbjtcbiAgLyogT3B0aW9uYWwsIGlmIGB0cnVlYCB0aGUgcmF0ZSBsaW1pdCB3aWxsIGFsc28gYXBwbHkgdG8gcmVxdWVzdHMgdGhhdCBhcmUgbWFkZSBpbiBieSBDbG91ZCBDb2RlLCBkZWZhdWx0IGlzIGBmYWxzZWAuIE5vdGUgdGhhdCBhIHB1YmxpYyBDbG91ZCBDb2RlIGZ1bmN0aW9uIHRoYXQgdHJpZ2dlcnMgaW50ZXJuYWwgcmVxdWVzdHMgbWF5IGNpcmN1bXZlbnQgcmF0ZSBsaW1pdGluZyBhbmQgYmUgdnVsbmVyYWJsZSB0byBhdHRhY2tzLlxuICA6REVGQVVMVDogZmFsc2UgKi9cbiAgaW5jbHVkZUludGVybmFsUmVxdWVzdHM6ID9ib29sZWFuO1xuICAvKiBPcHRpb25hbCwgdGhlIFVSTCBvZiB0aGUgUmVkaXMgc2VydmVyIHRvIHN0b3JlIHJhdGUgbGltaXQgZGF0YS4gVGhpcyBhbGxvd3MgdG8gcmF0ZSBsaW1pdCByZXF1ZXN0cyBmb3IgbXVsdGlwbGUgc2VydmVycyBieSBjYWxjdWxhdGluZyB0aGUgc3VtIG9mIGFsbCByZXF1ZXN0cyBhY3Jvc3MgYWxsIHNlcnZlcnMuIFRoaXMgaXMgdXNlZnVsIGlmIG11bHRpcGxlIHNlcnZlcnMgYXJlIHByb2Nlc3NpbmcgcmVxdWVzdHMgYmVoaW5kIGEgbG9hZCBiYWxhbmNlci4gRm9yIGV4YW1wbGUsIHRoZSBsaW1pdCBvZiAxMCByZXF1ZXN0cyBpcyByZWFjaGVkIGlmIGVhY2ggb2YgMiBzZXJ2ZXJzIHByb2Nlc3NlZCA1IHJlcXVlc3RzLlxuICAgKi9cbiAgcmVkaXNVcmw6ID9zdHJpbmc7XG4gIC8qXG4gIFRoZSB0eXBlIG9mIHJhdGUgbGltaXQgdG8gYXBwbHkuIFRoZSBmb2xsb3dpbmcgdHlwZXMgYXJlIHN1cHBvcnRlZDpcbiAgPGJyPjxicj5cbiAgLSBgZ2xvYmFsYDogcmF0ZSBsaW1pdCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIHJlcXVlc3RzIG1hZGUgYnkgYWxsIHVzZXJzIDxicj5cbiAgLSBgaXBgOiByYXRlIGxpbWl0IGJhc2VkIG9uIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSByZXF1ZXN0IDxicj5cbiAgLSBgdXNlcmA6IHJhdGUgbGltaXQgYmFzZWQgb24gdGhlIHVzZXIgSUQgb2YgdGhlIHJlcXVlc3QgPGJyPlxuICAtIGBzZXNzaW9uYDogcmF0ZSBsaW1pdCBiYXNlZCBvbiB0aGUgc2Vzc2lvbiB0b2tlbiBvZiB0aGUgcmVxdWVzdCA8YnI+XG4gIDxicj48YnI+XG4gIDpkZWZhdWx0OiAnaXAnXG4gICovXG4gIHpvbmU6ID9zdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJpdHlPcHRpb25zIHtcbiAgLyogSXMgdHJ1ZSBpZiBQYXJzZSBTZXJ2ZXIgc2hvdWxkIGNoZWNrIGZvciB3ZWFrIHNlY3VyaXR5IHNldHRpbmdzLlxuICA6REVGQVVMVDogZmFsc2UgKi9cbiAgZW5hYmxlQ2hlY2s6ID9ib29sZWFuO1xuICAvKiBJcyB0cnVlIGlmIHRoZSBzZWN1cml0eSBjaGVjayByZXBvcnQgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gbG9ncy4gVGhpcyBzaG91bGQgb25seSBiZSBlbmFibGVkIHRlbXBvcmFyaWx5IHRvIG5vdCBleHBvc2Ugd2VhayBzZWN1cml0eSBzZXR0aW5ncyBpbiBsb2dzLlxuICA6REVGQVVMVDogZmFsc2UgKi9cbiAgZW5hYmxlQ2hlY2tMb2c6ID9ib29sZWFuO1xuICAvKiBUaGUgc2VjdXJpdHkgY2hlY2sgZ3JvdXBzIHRvIHJ1bi4gVGhpcyBhbGxvd3MgdG8gYWRkIGN1c3RvbSBzZWN1cml0eSBjaGVja3Mgb3Igb3ZlcnJpZGUgZXhpc3Rpbmcgb25lcy4gRGVmYXVsdCBhcmUgdGhlIGdyb3VwcyBkZWZpbmVkIGluIGBDaGVja0dyb3Vwcy5qc2AuICovXG4gIGNoZWNrR3JvdXBzOiA/KENoZWNrR3JvdXBbXSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZXNPcHRpb25zIHtcbiAgLyogSXMgdHJ1ZSBpZiB0aGUgcGFnZXMgcm91dGVyIHNob3VsZCBiZSBlbmFibGVkOyB0aGlzIGlzIHJlcXVpcmVkIGZvciBhbnkgb2YgdGhlIHBhZ2VzIG9wdGlvbnMgdG8gdGFrZSBlZmZlY3QuXG4gIDpERUZBVUxUOiBmYWxzZSAqL1xuICBlbmFibGVSb3V0ZXI6ID9ib29sZWFuO1xuICAvKiBJcyB0cnVlIGlmIHBhZ2VzIHNob3VsZCBiZSBsb2NhbGl6ZWQ7IHRoaXMgaGFzIG5vIGVmZmVjdCBvbiBjdXN0b20gcGFnZSByZWRpcmVjdHMuXG4gIDpERUZBVUxUOiBmYWxzZSAqL1xuICBlbmFibGVMb2NhbGl6YXRpb246ID9ib29sZWFuO1xuICAvKiBUaGUgcGF0aCB0byB0aGUgSlNPTiBmaWxlIGZvciBsb2NhbGl6YXRpb247IHRoZSB0cmFuc2xhdGlvbnMgd2lsbCBiZSB1c2VkIHRvIGZpbGwgdGVtcGxhdGUgcGxhY2Vob2xkZXJzIGFjY29yZGluZyB0byB0aGUgbG9jYWxlLiAqL1xuICBsb2NhbGl6YXRpb25Kc29uUGF0aDogP3N0cmluZztcbiAgLyogVGhlIGZhbGxiYWNrIGxvY2FsZSBmb3IgbG9jYWxpemF0aW9uIGlmIG5vIG1hdGNoaW5nIHRyYW5zbGF0aW9uIGlzIHByb3ZpZGVkIGZvciB0aGUgZ2l2ZW4gbG9jYWxlLiBUaGlzIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiBwcm92aWRpbmcgdHJhbnNsYXRpb24gcmVzb3VyY2VzIHZpYSBKU09OIGZpbGUuXG4gIDpERUZBVUxUOiBlbiAqL1xuICBsb2NhbGl6YXRpb25GYWxsYmFja0xvY2FsZTogP3N0cmluZztcbiAgLyogVGhlIHBsYWNlaG9sZGVyIGtleXMgYW5kIHZhbHVlcyB3aGljaCB3aWxsIGJlIGZpbGxlZCBpbiBwYWdlczsgdGhpcyBjYW4gYmUgYSBzaW1wbGUgb2JqZWN0IG9yIGEgY2FsbGJhY2sgZnVuY3Rpb24uXG4gIDpERUZBVUxUOiB7fSAqL1xuICBwbGFjZWhvbGRlcnM6ID9PYmplY3Q7XG4gIC8qIElzIHRydWUgaWYgcmVzcG9uc2VzIHNob3VsZCBhbHdheXMgYmUgcmVkaXJlY3RzIGFuZCBuZXZlciBjb250ZW50LCBmYWxzZSBpZiB0aGUgcmVzcG9uc2UgdHlwZSBzaG91bGQgZGVwZW5kIG9uIHRoZSByZXF1ZXN0IHR5cGUgKEdFVCByZXF1ZXN0IC0+IGNvbnRlbnQgcmVzcG9uc2U7IFBPU1QgcmVxdWVzdCAtPiByZWRpcmVjdCByZXNwb25zZSkuXG4gIDpERUZBVUxUOiBmYWxzZSAqL1xuICBmb3JjZVJlZGlyZWN0OiA/Ym9vbGVhbjtcbiAgLyogVGhlIHBhdGggdG8gdGhlIHBhZ2VzIGRpcmVjdG9yeTsgdGhpcyBhbHNvIGRlZmluZXMgd2hlcmUgdGhlIHN0YXRpYyBlbmRwb2ludCAnL2FwcHMnIHBvaW50cyB0by4gRGVmYXVsdCBpcyB0aGUgJy4vcHVibGljLycgZGlyZWN0b3J5LlxuICA6REVGQVVMVDogLi9wdWJsaWMgKi9cbiAgcGFnZXNQYXRoOiA/c3RyaW5nO1xuICAvKiBUaGUgQVBJIGVuZHBvaW50IGZvciB0aGUgcGFnZXMuIERlZmF1bHQgaXMgJ2FwcHMnLlxuICA6REVGQVVMVDogYXBwcyAqL1xuICBwYWdlc0VuZHBvaW50OiA/c3RyaW5nO1xuICAvKiBUaGUgVVJMcyB0byB0aGUgY3VzdG9tIHBhZ2VzLlxuICA6REVGQVVMVDoge30gKi9cbiAgY3VzdG9tVXJsczogP1BhZ2VzQ3VzdG9tVXJsc09wdGlvbnM7XG4gIC8qIFRoZSBjdXN0b20gcm91dGVzLlxuICA6REVGQVVMVDogW10gKi9cbiAgY3VzdG9tUm91dGVzOiA/KFBhZ2VzUm91dGVbXSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZXNSb3V0ZSB7XG4gIC8qIFRoZSByb3V0ZSBwYXRoLiAqL1xuICBwYXRoOiBzdHJpbmc7XG4gIC8qIFRoZSByb3V0ZSBtZXRob2QsIGUuZy4gJ0dFVCcgb3IgJ1BPU1QnLiAqL1xuICBtZXRob2Q6IHN0cmluZztcbiAgLyogVGhlIHJvdXRlIGhhbmRsZXIgdGhhdCBpcyBhbiBhc3luYyBmdW5jdGlvbi4gKi9cbiAgaGFuZGxlcjogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdlc0N1c3RvbVVybHNPcHRpb25zIHtcbiAgLyogVGhlIFVSTCB0byB0aGUgY3VzdG9tIHBhZ2UgZm9yIHBhc3N3b3JkIHJlc2V0LiAqL1xuICBwYXNzd29yZFJlc2V0OiA/c3RyaW5nO1xuICAvKiBUaGUgVVJMIHRvIHRoZSBjdXN0b20gcGFnZSBmb3IgcGFzc3dvcmQgcmVzZXQgLT4gbGluayBpbnZhbGlkLiAqL1xuICBwYXNzd29yZFJlc2V0TGlua0ludmFsaWQ6ID9zdHJpbmc7XG4gIC8qIFRoZSBVUkwgdG8gdGhlIGN1c3RvbSBwYWdlIGZvciBwYXNzd29yZCByZXNldCAtPiBzdWNjZXNzLiAqL1xuICBwYXNzd29yZFJlc2V0U3VjY2VzczogP3N0cmluZztcbiAgLyogVGhlIFVSTCB0byB0aGUgY3VzdG9tIHBhZ2UgZm9yIGVtYWlsIHZlcmlmaWNhdGlvbiAtPiBzdWNjZXNzLiAqL1xuICBlbWFpbFZlcmlmaWNhdGlvblN1Y2Nlc3M6ID9zdHJpbmc7XG4gIC8qIFRoZSBVUkwgdG8gdGhlIGN1c3RvbSBwYWdlIGZvciBlbWFpbCB2ZXJpZmljYXRpb24gLT4gbGluayBzZW5kIGZhaWwuICovXG4gIGVtYWlsVmVyaWZpY2F0aW9uU2VuZEZhaWw6ID9zdHJpbmc7XG4gIC8qIFRoZSBVUkwgdG8gdGhlIGN1c3RvbSBwYWdlIGZvciBlbWFpbCB2ZXJpZmljYXRpb24gLT4gcmVzZW5kIGxpbmsgLT4gc3VjY2Vzcy4gKi9cbiAgZW1haWxWZXJpZmljYXRpb25TZW5kU3VjY2VzczogP3N0cmluZztcbiAgLyogVGhlIFVSTCB0byB0aGUgY3VzdG9tIHBhZ2UgZm9yIGVtYWlsIHZlcmlmaWNhdGlvbiAtPiBsaW5rIGludmFsaWQuICovXG4gIGVtYWlsVmVyaWZpY2F0aW9uTGlua0ludmFsaWQ6ID9zdHJpbmc7XG4gIC8qIFRoZSBVUkwgdG8gdGhlIGN1c3RvbSBwYWdlIGZvciBlbWFpbCB2ZXJpZmljYXRpb24gLT4gbGluayBleHBpcmVkLiAqL1xuICBlbWFpbFZlcmlmaWNhdGlvbkxpbmtFeHBpcmVkOiA/c3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbVBhZ2VzT3B0aW9ucyB7XG4gIC8qIGludmFsaWQgbGluayBwYWdlIHBhdGggKi9cbiAgaW52YWxpZExpbms6ID9zdHJpbmc7XG4gIC8qIHZlcmlmaWNhdGlvbiBsaW5rIHNlbmQgZmFpbCBwYWdlIHBhdGggKi9cbiAgbGlua1NlbmRGYWlsOiA/c3RyaW5nO1xuICAvKiBjaG9vc2UgcGFzc3dvcmQgcGFnZSBwYXRoICovXG4gIGNob29zZVBhc3N3b3JkOiA/c3RyaW5nO1xuICAvKiB2ZXJpZmljYXRpb24gbGluayBzZW5kIHN1Y2Nlc3MgcGFnZSBwYXRoICovXG4gIGxpbmtTZW5kU3VjY2VzczogP3N0cmluZztcbiAgLyogdmVyaWZ5IGVtYWlsIHN1Y2Nlc3MgcGFnZSBwYXRoICovXG4gIHZlcmlmeUVtYWlsU3VjY2VzczogP3N0cmluZztcbiAgLyogcGFzc3dvcmQgcmVzZXQgc3VjY2VzcyBwYWdlIHBhdGggKi9cbiAgcGFzc3dvcmRSZXNldFN1Y2Nlc3M6ID9zdHJpbmc7XG4gIC8qIGludmFsaWQgdmVyaWZpY2F0aW9uIGxpbmsgcGFnZSBwYXRoICovXG4gIGludmFsaWRWZXJpZmljYXRpb25MaW5rOiA/c3RyaW5nO1xuICAvKiBleHBpcmVkIHZlcmlmaWNhdGlvbiBsaW5rIHBhZ2UgcGF0aCAqL1xuICBleHBpcmVkVmVyaWZpY2F0aW9uTGluazogP3N0cmluZztcbiAgLyogaW52YWxpZCBwYXNzd29yZCByZXNldCBsaW5rIHBhZ2UgcGF0aCAqL1xuICBpbnZhbGlkUGFzc3dvcmRSZXNldExpbms6ID9zdHJpbmc7XG4gIC8qIGZvciBtYXNraW5nIHVzZXItZmFjaW5nIHBhZ2VzICovXG4gIHBhcnNlRnJhbWVVUkw6ID9zdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGl2ZVF1ZXJ5T3B0aW9ucyB7XG4gIC8qIHBhcnNlLXNlcnZlcidzIExpdmVRdWVyeSBjbGFzc05hbWVzXG4gIDpFTlY6IFBBUlNFX1NFUlZFUl9MSVZFUVVFUllfQ0xBU1NOQU1FUyAqL1xuICBjbGFzc05hbWVzOiA/KHN0cmluZ1tdKTtcbiAgLyogcGFyc2Utc2VydmVyJ3MgTGl2ZVF1ZXJ5IHJlZGlzT3B0aW9ucyAqL1xuICByZWRpc09wdGlvbnM6ID9hbnk7XG4gIC8qIHBhcnNlLXNlcnZlcidzIExpdmVRdWVyeSByZWRpc1VSTCAqL1xuICByZWRpc1VSTDogP3N0cmluZztcbiAgLyogTGl2ZVF1ZXJ5IHB1YnN1YiBhZGFwdGVyICovXG4gIHB1YlN1YkFkYXB0ZXI6ID9BZGFwdGVyPFB1YlN1YkFkYXB0ZXI+O1xuICAvKiBBZGFwdGVyIG1vZHVsZSBmb3IgdGhlIFdlYlNvY2tldFNlcnZlciAqL1xuICB3c3NBZGFwdGVyOiA/QWRhcHRlcjxXU1NBZGFwdGVyPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXZlUXVlcnlTZXJ2ZXJPcHRpb25zIHtcbiAgLyogVGhpcyBzdHJpbmcgc2hvdWxkIG1hdGNoIHRoZSBhcHBJZCBpbiB1c2UgYnkgeW91ciBQYXJzZSBTZXJ2ZXIuIElmIHlvdSBkZXBsb3kgdGhlIExpdmVRdWVyeSBzZXJ2ZXIgYWxvbmdzaWRlIFBhcnNlIFNlcnZlciwgdGhlIExpdmVRdWVyeSBzZXJ2ZXIgd2lsbCB0cnkgdG8gdXNlIHRoZSBzYW1lIGFwcElkLiovXG4gIGFwcElkOiA/c3RyaW5nO1xuICAvKiBUaGlzIHN0cmluZyBzaG91bGQgbWF0Y2ggdGhlIG1hc3RlcktleSBpbiB1c2UgYnkgeW91ciBQYXJzZSBTZXJ2ZXIuIElmIHlvdSBkZXBsb3kgdGhlIExpdmVRdWVyeSBzZXJ2ZXIgYWxvbmdzaWRlIFBhcnNlIFNlcnZlciwgdGhlIExpdmVRdWVyeSBzZXJ2ZXIgd2lsbCB0cnkgdG8gdXNlIHRoZSBzYW1lIG1hc3RlcktleS4qL1xuICBtYXN0ZXJLZXk6ID9zdHJpbmc7XG4gIC8qIFRoaXMgc3RyaW5nIHNob3VsZCBtYXRjaCB0aGUgc2VydmVyVVJMIGluIHVzZSBieSB5b3VyIFBhcnNlIFNlcnZlci4gSWYgeW91IGRlcGxveSB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciBhbG9uZ3NpZGUgUGFyc2UgU2VydmVyLCB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciB3aWxsIHRyeSB0byB1c2UgdGhlIHNhbWUgc2VydmVyVVJMLiovXG4gIHNlcnZlclVSTDogP3N0cmluZztcbiAgLyogQSBKU09OIG9iamVjdCB0aGF0IHNlcnZlcyBhcyBhIHdoaXRlbGlzdCBvZiBrZXlzLiBJdCBpcyB1c2VkIGZvciB2YWxpZGF0aW5nIGNsaWVudHMgd2hlbiB0aGV5IHRyeSB0byBjb25uZWN0IHRvIHRoZSBMaXZlUXVlcnkgc2VydmVyLiBDaGVjayB0aGUgZm9sbG93aW5nIFNlY3VyaXR5IHNlY3Rpb24gYW5kIG91ciBwcm90b2NvbCBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzLiovXG4gIGtleVBhaXJzOiA/YW55O1xuICAvKiBOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJldHdlZW4gcGluZy9wb25nIGZyYW1lcy4gVGhlIFdlYlNvY2tldCBzZXJ2ZXIgc2VuZHMgcGluZy9wb25nIGZyYW1lcyB0byB0aGUgY2xpZW50cyB0byBrZWVwIHRoZSBXZWJTb2NrZXQgYWxpdmUuIFRoaXMgdmFsdWUgZGVmaW5lcyB0aGUgaW50ZXJ2YWwgb2YgdGhlIHBpbmcvcG9uZyBmcmFtZSBmcm9tIHRoZSBzZXJ2ZXIgdG8gY2xpZW50cywgZGVmYXVsdHMgdG8gMTAgKiAxMDAwIG1zICgxMCBzKS4qL1xuICB3ZWJzb2NrZXRUaW1lb3V0OiA/bnVtYmVyO1xuICAvKiBOdW1iZXIgaW4gbWlsbGlzZWNvbmRzLiBXaGVuIGNsaWVudHMgcHJvdmlkZSB0aGUgc2Vzc2lvblRva2VuIHRvIHRoZSBMaXZlUXVlcnkgc2VydmVyLCB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciB3aWxsIHRyeSB0byBmZXRjaCBpdHMgUGFyc2VVc2VyJ3Mgb2JqZWN0SWQgZnJvbSBwYXJzZSBzZXJ2ZXIgYW5kIHN0b3JlIGl0IGluIHRoZSBjYWNoZS4gVGhlIHZhbHVlIGRlZmluZXMgdGhlIGR1cmF0aW9uIG9mIHRoZSBjYWNoZS4gQ2hlY2sgdGhlIGZvbGxvd2luZyBTZWN1cml0eSBzZWN0aW9uIGFuZCBvdXIgcHJvdG9jb2wgc3BlY2lmaWNhdGlvbiBmb3IgZGV0YWlscywgZGVmYXVsdHMgdG8gNSAqIDEwMDAgbXMgKDUgc2Vjb25kcykuKi9cbiAgY2FjaGVUaW1lb3V0OiA/bnVtYmVyO1xuICAvKiBUaGlzIHN0cmluZyBkZWZpbmVzIHRoZSBsb2cgbGV2ZWwgb2YgdGhlIExpdmVRdWVyeSBzZXJ2ZXIuIFdlIHN1cHBvcnQgVkVSQk9TRSwgSU5GTywgRVJST1IsIE5PTkUsIGRlZmF1bHRzIHRvIElORk8uKi9cbiAgbG9nTGV2ZWw6ID9zdHJpbmc7XG4gIC8qIFRoZSBwb3J0IHRvIHJ1biB0aGUgTGl2ZVF1ZXJ5IHNlcnZlciwgZGVmYXVsdHMgdG8gMTMzNy5cbiAgOkRFRkFVTFQ6IDEzMzcgKi9cbiAgcG9ydDogP251bWJlcjtcbiAgLyogcGFyc2Utc2VydmVyJ3MgTGl2ZVF1ZXJ5IHJlZGlzT3B0aW9ucyAqL1xuICByZWRpc09wdGlvbnM6ID9hbnk7XG4gIC8qIHBhcnNlLXNlcnZlcidzIExpdmVRdWVyeSByZWRpc1VSTCAqL1xuICByZWRpc1VSTDogP3N0cmluZztcbiAgLyogTGl2ZVF1ZXJ5IHB1YnN1YiBhZGFwdGVyICovXG4gIHB1YlN1YkFkYXB0ZXI6ID9BZGFwdGVyPFB1YlN1YkFkYXB0ZXI+O1xuICAvKiBBZGFwdGVyIG1vZHVsZSBmb3IgdGhlIFdlYlNvY2tldFNlcnZlciAqL1xuICB3c3NBZGFwdGVyOiA/QWRhcHRlcjxXU1NBZGFwdGVyPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJZGVtcG90ZW5jeU9wdGlvbnMge1xuICAvKiBBbiBhcnJheSBvZiBwYXRocyBmb3Igd2hpY2ggdGhlIGZlYXR1cmUgc2hvdWxkIGJlIGVuYWJsZWQuIFRoZSBtb3VudCBwYXRoIG11c3Qgbm90IGJlIGluY2x1ZGVkLCBmb3IgZXhhbXBsZSBpbnN0ZWFkIG9mIGAvcGFyc2UvZnVuY3Rpb25zL215RnVuY3Rpb25gIHNwZWNpZml5IGBmdW5jdGlvbnMvbXlGdW5jdGlvbmAuIFRoZSBlbnRyaWVzIGFyZSBpbnRlcnByZXRlZCBhcyByZWd1bGFyIGV4cHJlc3Npb24sIGZvciBleGFtcGxlIGBmdW5jdGlvbnMvLipgIG1hdGNoZXMgYWxsIGZ1bmN0aW9ucywgYGpvYnMvLipgIG1hdGNoZXMgYWxsIGpvYnMsIGBjbGFzc2VzLy4qYCBtYXRjaGVzIGFsbCBjbGFzc2VzLCBgLipgIG1hdGNoZXMgYWxsIHBhdGhzLlxuICA6REVGQVVMVDogW10gKi9cbiAgcGF0aHM6ID8oc3RyaW5nW10pO1xuICAvKiBUaGUgZHVyYXRpb24gaW4gc2Vjb25kcyBhZnRlciB3aGljaCBhIHJlcXVlc3QgcmVjb3JkIGlzIGRpc2NhcmRlZCBmcm9tIHRoZSBkYXRhYmFzZSwgZGVmYXVsdHMgdG8gMzAwcy5cbiAgOkRFRkFVTFQ6IDMwMCAqL1xuICB0dGw6ID9udW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWNjb3VudExvY2tvdXRPcHRpb25zIHtcbiAgLyogU2V0IHRoZSBkdXJhdGlvbiBpbiBtaW51dGVzIHRoYXQgYSBsb2NrZWQtb3V0IGFjY291bnQgcmVtYWlucyBsb2NrZWQgb3V0IGJlZm9yZSBhdXRvbWF0aWNhbGx5IGJlY29taW5nIHVubG9ja2VkLlxuICA8YnI+PGJyPlxuICBWYWxpZCB2YWx1ZXMgYXJlIGdyZWF0ZXIgdGhhbiBgMGAgYW5kIGxlc3MgdGhhbiBgMTAwMDAwYC4gKi9cbiAgZHVyYXRpb246ID9udW1iZXI7XG4gIC8qIFNldCB0aGUgbnVtYmVyIG9mIGZhaWxlZCBzaWduLWluIGF0dGVtcHRzIHRoYXQgd2lsbCBjYXVzZSBhIHVzZXIgYWNjb3VudCB0byBiZSBsb2NrZWQuIElmIHRoZSBhY2NvdW50IGlzIGxvY2tlZC4gVGhlIGFjY291bnQgd2lsbCB1bmxvY2sgYWZ0ZXIgdGhlIGR1cmF0aW9uIHNldCBpbiB0aGUgYGR1cmF0aW9uYCBvcHRpb24gaGFzIHBhc3NlZCBhbmQgbm8gZnVydGhlciBsb2dpbiBhdHRlbXB0cyBoYXZlIGJlZW4gbWFkZS5cbiAgPGJyPjxicj5cbiAgVmFsaWQgdmFsdWVzIGFyZSBncmVhdGVyIHRoYW4gYDBgIGFuZCBsZXNzIHRoYW4gYDEwMDBgLiAqL1xuICB0aHJlc2hvbGQ6ID9udW1iZXI7XG4gIC8qIFNldCB0byBgdHJ1ZWAgIGlmIHRoZSBhY2NvdW50IHNob3VsZCBiZSB1bmxvY2tlZCBhZnRlciBhIHN1Y2Nlc3NmdWwgcGFzc3dvcmQgcmVzZXQuXG4gIDxicj48YnI+XG4gIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAgPGJyPlxuICBSZXF1aXJlcyBvcHRpb25zIGBkdXJhdGlvbmAgYW5kIGB0aHJlc2hvbGRgIHRvIGJlIHNldC5cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIHVubG9ja09uUGFzc3dvcmRSZXNldDogP2Jvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRQb2xpY3lPcHRpb25zIHtcbiAgLyogU2V0IHRoZSByZWd1bGFyIGV4cHJlc3Npb24gdmFsaWRhdGlvbiBwYXR0ZXJuIGEgcGFzc3dvcmQgbXVzdCBtYXRjaCB0byBiZSBhY2NlcHRlZC5cbiAgPGJyPjxicj5cbiAgSWYgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGB2YWxpZGF0b3JDYWxsYmFja2AsIHRoZSBwYXNzd29yZCBtdXN0IHBhc3MgYm90aCB0byBiZSBhY2NlcHRlZC4gKi9cbiAgdmFsaWRhdG9yUGF0dGVybjogP3N0cmluZztcbiAgLyogICAqL1xuICAvKiBTZXQgYSBjYWxsYmFjayBmdW5jdGlvbiB0byB2YWxpZGF0ZSBhIHBhc3N3b3JkIHRvIGJlIGFjY2VwdGVkLlxuICA8YnI+PGJyPlxuICBJZiB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYHZhbGlkYXRvclBhdHRlcm5gLCB0aGUgcGFzc3dvcmQgbXVzdCBwYXNzIGJvdGggdG8gYmUgYWNjZXB0ZWQuICovXG4gIHZhbGlkYXRvckNhbGxiYWNrOiA/KCkgPT4gdm9pZDtcbiAgLyogU2V0IHRoZSBlcnJvciBtZXNzYWdlIHRvIGJlIHNlbnQuXG4gIDxicj48YnI+XG4gIERlZmF1bHQgaXMgYFBhc3N3b3JkIGRvZXMgbm90IG1lZXQgdGhlIFBhc3N3b3JkIFBvbGljeSByZXF1aXJlbWVudHMuYCAqL1xuICB2YWxpZGF0aW9uRXJyb3I6ID9zdHJpbmc7XG4gIC8qIFNldCB0byBgdHJ1ZWAgdG8gZGlzYWxsb3cgdGhlIHVzZXJuYW1lIGFzIHBhcnQgb2YgdGhlIHBhc3N3b3JkLlxuICA8YnI+PGJyPlxuICBEZWZhdWx0IGlzIGBmYWxzZWAuXG4gIDpERUZBVUxUOiBmYWxzZSAqL1xuICBkb05vdEFsbG93VXNlcm5hbWU6ID9ib29sZWFuO1xuICAvKiBTZXQgdGhlIG51bWJlciBvZiBkYXlzIGFmdGVyIHdoaWNoIGEgcGFzc3dvcmQgZXhwaXJlcy4gTG9naW4gYXR0ZW1wdHMgZmFpbCBpZiB0aGUgdXNlciBkb2VzIG5vdCByZXNldCB0aGUgcGFzc3dvcmQgYmVmb3JlIGV4cGlyYXRpb24uICovXG4gIG1heFBhc3N3b3JkQWdlOiA/bnVtYmVyO1xuICAvKiBTZXQgdGhlIG51bWJlciBvZiBwcmV2aW91cyBwYXNzd29yZCB0aGF0IHdpbGwgbm90IGJlIGFsbG93ZWQgdG8gYmUgc2V0IGFzIG5ldyBwYXNzd29yZC4gSWYgdGhlIG9wdGlvbiBpcyBub3Qgc2V0IG9yIHNldCB0byBgMGAsIG5vIHByZXZpb3VzIHBhc3N3b3JkcyB3aWxsIGJlIGNvbnNpZGVyZWQuXG4gIDxicj48YnI+XG4gIFZhbGlkIHZhbHVlcyBhcmUgPj0gYDBgIGFuZCA8PSBgMjBgLlxuICA8YnI+XG4gIERlZmF1bHQgaXMgYDBgLlxuICAqL1xuICBtYXhQYXNzd29yZEhpc3Rvcnk6ID9udW1iZXI7XG4gIC8qIFNldCB0aGUgdmFsaWRpdHkgZHVyYXRpb24gb2YgdGhlIHBhc3N3b3JkIHJlc2V0IHRva2VuIGluIHNlY29uZHMgYWZ0ZXIgd2hpY2ggdGhlIHRva2VuIGV4cGlyZXMuIFRoZSB0b2tlbiBpcyB1c2VkIGluIHRoZSBsaW5rIHRoYXQgaXMgc2V0IGluIHRoZSBlbWFpbC4gQWZ0ZXIgdGhlIHRva2VuIGV4cGlyZXMsIHRoZSBsaW5rIGJlY29tZXMgaW52YWxpZCBhbmQgYSBuZXcgbGluayBoYXMgdG8gYmUgc2VudC4gSWYgdGhlIG9wdGlvbiBpcyBub3Qgc2V0IG9yIHNldCB0byBgdW5kZWZpbmVkYCwgdGhlbiB0aGUgdG9rZW4gbmV2ZXIgZXhwaXJlcy5cbiAgPGJyPjxicj5cbiAgRm9yIGV4YW1wbGUsIHRvIGV4cGlyZSB0aGUgdG9rZW4gYWZ0ZXIgMiBob3Vycywgc2V0IGEgdmFsdWUgb2YgNzIwMCBzZWNvbmRzICg9IDYwIHNlY29uZHMgKiA2MCBtaW51dGVzICogMiBob3VycykuXG4gIDxicj48YnI+XG4gIERlZmF1bHQgaXMgYHVuZGVmaW5lZGAuXG4gICovXG4gIHJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uOiA/bnVtYmVyO1xuICAvKiBTZXQgdG8gYHRydWVgIGlmIGEgcGFzc3dvcmQgcmVzZXQgdG9rZW4gc2hvdWxkIGJlIHJldXNlZCBpbiBjYXNlIGFub3RoZXIgdG9rZW4gaXMgcmVxdWVzdGVkIGJ1dCB0aGVyZSBpcyBhIHRva2VuIHRoYXQgaXMgc3RpbGwgdmFsaWQsIGkuZS4gaGFzIG5vdCBleHBpcmVkLiBUaGlzIGF2b2lkcyB0aGUgb2Z0ZW4gb2JzZXJ2ZWQgaXNzdWUgdGhhdCBhIHVzZXIgcmVxdWVzdHMgbXVsdGlwbGUgZW1haWxzIGFuZCBkb2VzIG5vdCBrbm93IHdoaWNoIGxpbmsgY29udGFpbnMgYSB2YWxpZCB0b2tlbiBiZWNhdXNlIGVhY2ggbmV3bHkgZ2VuZXJhdGVkIHRva2VuIHdvdWxkIGludmFsaWRhdGUgdGhlIHByZXZpb3VzIHRva2VuLlxuICA8YnI+PGJyPlxuICBEZWZhdWx0IGlzIGBmYWxzZWAuXG4gIDpERUZBVUxUOiBmYWxzZSAqL1xuICByZXNldFRva2VuUmV1c2VJZlZhbGlkOiA/Ym9vbGVhbjtcbiAgLyogU2V0IHRvIGB0cnVlYCBpZiBhIHJlcXVlc3QgdG8gcmVzZXQgdGhlIHBhc3N3b3JkIHNob3VsZCByZXR1cm4gYSBzdWNjZXNzIHJlc3BvbnNlIGV2ZW4gaWYgdGhlIHByb3ZpZGVkIGVtYWlsIGFkZHJlc3MgaXMgaW52YWxpZCwgb3IgYGZhbHNlYCBpZiB0aGUgcmVxdWVzdCBzaG91bGQgcmV0dXJuIGFuIGVycm9yIHJlc3BvbnNlIGlmIHRoZSBlbWFpbCBhZGRyZXNzIGlzIGludmFsaWQuXG4gIDxicj48YnI+XG4gIERlZmF1bHQgaXMgYHRydWVgLlxuICA6REVGQVVMVDogdHJ1ZSAqL1xuICByZXNldFBhc3N3b3JkU3VjY2Vzc09uSW52YWxpZEVtYWlsOiA/Ym9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWxlVXBsb2FkT3B0aW9ucyB7XG4gIC8qIFNldHMgdGhlIGFsbG93ZWQgZmlsZSBleHRlbnNpb25zIGZvciB1cGxvYWRpbmcgZmlsZXMuIFRoZSBleHRlbnNpb24gaXMgZGVmaW5lZCBhcyBhbiBhcnJheSBvZiBmaWxlIGV4dGVuc2lvbnMsIG9yIGEgcmVnZXggcGF0dGVybi48YnI+PGJyPkl0IGlzIHJlY29tbWVuZGVkIHRvIHJlc3RyaWN0IHRoZSBmaWxlIHVwbG9hZCBleHRlbnNpb25zIGFzIG11Y2ggYXMgcG9zc2libGUuIEhUTUwgZmlsZXMgYXJlIGVzcGVjaWFsbHkgcHJvYmxlbWF0aWMgYXMgdGhleSBtYXkgYmUgdXNlZCBieSBhbiBhdHRhY2tlciB3aG8gdXBsb2FkcyBhIEhUTUwgZm9ybSB0byBsb29rIGxlZ2l0aW1hdGUgdW5kZXIgeW91ciBhcHAncyBkb21haW4gbmFtZSwgb3IgdG8gY29tcHJvbWlzZSB0aGUgc2Vzc2lvbiB0b2tlbiBvZiBhbm90aGVyIHVzZXIgdmlhIGFjY2Vzc2luZyB0aGUgYnJvd3NlcidzIGxvY2FsIHN0b3JhZ2UuPGJyPjxicj5EZWZhdWx0cyB0byBgXig/IShofEgpKHR8VCkobXxNKShsfEwpPyQpYCB3aGljaCBhbGxvd3MgYW55IGZpbGUgZXh0ZW5zaW9uIGV4Y2VwdCBIVE1MIGZpbGVzLlxuICA6REVGQVVMVDogW1wiXig/IShofEgpKHR8VCkobXxNKShsfEwpPyQpXCJdICovXG4gIGZpbGVFeHRlbnNpb25zOiA/KHN0cmluZ1tdKTtcbiAgLyogIElzIHRydWUgaWYgZmlsZSB1cGxvYWQgc2hvdWxkIGJlIGFsbG93ZWQgZm9yIGFub255bW91cyB1c2Vycy5cbiAgOkRFRkFVTFQ6IGZhbHNlICovXG4gIGVuYWJsZUZvckFub255bW91c1VzZXI6ID9ib29sZWFuO1xuICAvKiBJcyB0cnVlIGlmIGZpbGUgdXBsb2FkIHNob3VsZCBiZSBhbGxvd2VkIGZvciBhdXRoZW50aWNhdGVkIHVzZXJzLlxuICA6REVGQVVMVDogdHJ1ZSAqL1xuICBlbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlcjogP2Jvb2xlYW47XG4gIC8qIElzIHRydWUgaWYgZmlsZSB1cGxvYWQgc2hvdWxkIGJlIGFsbG93ZWQgZm9yIGFueW9uZSwgcmVnYXJkbGVzcyBvZiB1c2VyIGF1dGhlbnRpY2F0aW9uLlxuICA6REVGQVVMVDogZmFsc2UgKi9cbiAgZW5hYmxlRm9yUHVibGljOiA/Ym9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhYmFzZU9wdGlvbnMge1xuICAvKiBFbmFibGVzIGRhdGFiYXNlIHJlYWwtdGltZSBob29rcyB0byB1cGRhdGUgc2luZ2xlIHNjaGVtYSBjYWNoZS4gU2V0IHRvIGB0cnVlYCBpZiB1c2luZyBtdWx0aXBsZSBQYXJzZSBTZXJ2ZXJzIGluc3RhbmNlcyBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgZGF0YWJhc2UuIEZhaWxpbmcgdG8gZG8gc28gd2lsbCBjYXVzZSBhIHNjaGVtYSBjaGFuZ2UgdG8gbm90IHByb3BhZ2F0ZSB0byBhbGwgaW5zdGFuY2VzIGFuZCByZS1zeW5jaW5nIHdpbGwgb25seSBoYXBwZW4gd2hlbiB0aGUgaW5zdGFuY2VzIHJlc3RhcnQuIFRvIHVzZSB0aGlzIGZlYXR1cmUgd2l0aCBNb25nb0RCLCBhIHJlcGxpY2Egc2V0IGNsdXN0ZXIgd2l0aCBbY2hhbmdlIHN0cmVhbV0oaHR0cHM6Ly9kb2NzLm1vbmdvZGIuY29tL21hbnVhbC9jaGFuZ2VTdHJlYW1zLyNhdmFpbGFiaWxpdHkpIHN1cHBvcnQgaXMgcmVxdWlyZWQuXG4gIDpERUZBVUxUOiBmYWxzZSAqL1xuICBlbmFibGVTY2hlbWFIb29rczogP2Jvb2xlYW47XG4gIC8qIFRoZSBkdXJhdGlvbiBpbiBzZWNvbmRzIGFmdGVyIHdoaWNoIHRoZSBzY2hlbWEgY2FjaGUgZXhwaXJlcyBhbmQgd2lsbCBiZSByZWZldGNoZWQgZnJvbSB0aGUgZGF0YWJhc2UuIFVzZSB0aGlzIG9wdGlvbiBpZiB1c2luZyBtdWx0aXBsZSBQYXJzZSBTZXJ2ZXJzIGluc3RhbmNlcyBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgZGF0YWJhc2UuIEEgbG93IGR1cmF0aW9uIHdpbGwgY2F1c2UgdGhlIHNjaGVtYSBjYWNoZSB0byBiZSB1cGRhdGVkIHRvbyBvZnRlbiwgY2F1c2luZyB1bm5lY2Vzc2FyeSBkYXRhYmFzZSByZWFkcy4gQSBoaWdoIGR1cmF0aW9uIHdpbGwgY2F1c2UgdGhlIHNjaGVtYSB0byBiZSB1cGRhdGVkIHRvbyByYXJlbHksIGluY3JlYXNpbmcgdGhlIHRpbWUgcmVxdWlyZWQgdW50aWwgc2NoZW1hIGNoYW5nZXMgcHJvcGFnYXRlIHRvIGFsbCBzZXJ2ZXIgaW5zdGFuY2VzLiBUaGlzIGZlYXR1cmUgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgb3IgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgb3B0aW9uIGBlbmFibGVTY2hlbWFIb29rc2AuIERlZmF1bHQgaXMgaW5maW5pdGUgd2hpY2ggbWVhbnMgdGhlIHNjaGVtYSBjYWNoZSBuZXZlciBleHBpcmVzLiAqL1xuICBzY2hlbWFDYWNoZVR0bDogP251bWJlcjtcbiAgLyogVGhlIE1vbmdvREIgZHJpdmVyIG9wdGlvbiB0byBzZXQgd2hldGhlciB0byByZXRyeSBmYWlsZWQgd3JpdGVzLiAqL1xuICByZXRyeVdyaXRlczogP2Jvb2xlYW47XG4gIC8qIFRoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc2V0IGEgY3VtdWxhdGl2ZSB0aW1lIGxpbWl0IGluIG1pbGxpc2Vjb25kcyBmb3IgcHJvY2Vzc2luZyBvcGVyYXRpb25zIG9uIGEgY3Vyc29yLiAqL1xuICBtYXhUaW1lTVM6ID9udW1iZXI7XG4gIC8qIFRoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc2V0IHRoZSBtYXhpbXVtIHJlcGxpY2F0aW9uIGxhZyBmb3IgcmVhZHMgZnJvbSBzZWNvbmRhcnkgbm9kZXMuKi9cbiAgbWF4U3RhbGVuZXNzU2Vjb25kczogP251bWJlcjtcbiAgLyogVGhlIE1vbmdvREIgZHJpdmVyIG9wdGlvbiB0byBzZXQgdGhlIG1pbmltdW0gbnVtYmVyIG9mIG9wZW5lZCwgY2FjaGVkLCByZWFkeS10by11c2UgZGF0YWJhc2UgY29ubmVjdGlvbnMgbWFpbnRhaW5lZCBieSB0aGUgZHJpdmVyLiAqL1xuICBtaW5Qb29sU2l6ZTogP251bWJlcjtcbiAgLyogVGhlIE1vbmdvREIgZHJpdmVyIG9wdGlvbiB0byBzZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIG9wZW5lZCwgY2FjaGVkLCByZWFkeS10by11c2UgZGF0YWJhc2UgY29ubmVjdGlvbnMgbWFpbnRhaW5lZCBieSB0aGUgZHJpdmVyLiAqL1xuICBtYXhQb29sU2l6ZTogP251bWJlcjtcbiAgLyogVGhlIE1vbmdvREIgZHJpdmVyIG9wdGlvbiB0byBzcGVjaWZ5IHRoZSBhbW91bnQgb2YgdGltZSwgaW4gbWlsbGlzZWNvbmRzLCB0byB3YWl0IHRvIGVzdGFibGlzaCBhIHNpbmdsZSBUQ1Agc29ja2V0IGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlciBiZWZvcmUgcmFpc2luZyBhbiBlcnJvci4gU3BlY2lmeWluZyAwIGRpc2FibGVzIHRoZSBjb25uZWN0aW9uIHRpbWVvdXQuICovXG4gIGNvbm5lY3RUaW1lb3V0TVM6ID9udW1iZXI7XG4gIC8qIFRoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc3BlY2lmeSB0aGUgYW1vdW50IG9mIHRpbWUsIGluIG1pbGxpc2Vjb25kcywgc3BlbnQgYXR0ZW1wdGluZyB0byBzZW5kIG9yIHJlY2VpdmUgb24gYSBzb2NrZXQgYmVmb3JlIHRpbWluZyBvdXQuIFNwZWNpZnlpbmcgMCBtZWFucyBubyB0aW1lb3V0LiAqL1xuICBzb2NrZXRUaW1lb3V0TVM6ID9udW1iZXI7XG4gIC8qIFRoZSBNb25nb0RCIGRyaXZlciBvcHRpb24gdG8gc2V0IHdoZXRoZXIgdGhlIHNvY2tldCBhdHRlbXB0cyB0byBjb25uZWN0IHRvIElQdjYgYW5kIElQdjQgYWRkcmVzc2VzIHVudGlsIGEgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZC4gSWYgYXZhaWxhYmxlLCB0aGUgZHJpdmVyIHdpbGwgc2VsZWN0IHRoZSBmaXJzdCBJUHY2IGFkZHJlc3MuICovXG4gIGF1dG9TZWxlY3RGYW1pbHk6ID9ib29sZWFuO1xuICAvKiBUaGUgTW9uZ29EQiBkcml2ZXIgb3B0aW9uIHRvIHNwZWNpZnkgdGhlIGFtb3VudCBvZiB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciBhIGNvbm5lY3Rpb24gYXR0ZW1wdCB0byBmaW5pc2ggYmVmb3JlIHRyeWluZyB0aGUgbmV4dCBhZGRyZXNzIHdoZW4gdXNpbmcgdGhlIGF1dG9TZWxlY3RGYW1pbHkgb3B0aW9uLiBJZiBzZXQgdG8gYSBwb3NpdGl2ZSBpbnRlZ2VyIGxlc3MgdGhhbiAxMCwgdGhlIHZhbHVlIDEwIGlzIHVzZWQgaW5zdGVhZC4gKi9cbiAgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0OiA/bnVtYmVyO1xuICAvKiBTZXQgdG8gYHRydWVgIHRvIGRpc2FibGUgdmFsaWRhdGlvbiBvZiBpbmRleCBmaWVsZHMuIFdoZW4gZGlzYWJsZWQsIGluZGV4ZXMgY2FuIGJlIGNyZWF0ZWQgZXZlbiBpZiB0aGUgZmllbGRzIGRvIG5vdCBleGlzdCBpbiB0aGUgc2NoZW1hLiBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiBjcmVhdGluZyBpbmRleGVzIG9uIGZpZWxkcyB0aGF0IHdpbGwgYmUgYWRkZWQgbGF0ZXIuICovXG4gIGRpc2FibGVJbmRleEZpZWxkVmFsaWRhdGlvbjogP2Jvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aEFkYXB0ZXIge1xuICAvKiBJcyBgdHJ1ZWAgaWYgdGhlIGF1dGggYWRhcHRlciBpcyBlbmFibGVkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgOkRFRkFVTFQ6IGZhbHNlXG4gIDpFTlY6XG4gICovXG4gIGVuYWJsZWQ6ID9ib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvZ0xldmVscyB7XG4gIC8qIExvZyBsZXZlbCB1c2VkIGJ5IHRoZSBDbG91ZCBDb2RlIFRyaWdnZXJzIGBhZnRlclNhdmVgLCBgYWZ0ZXJEZWxldGVgLCBgYWZ0ZXJGaW5kYCwgYGFmdGVyTG9nb3V0YC4gRGVmYXVsdCBpcyBgaW5mb2AuXG4gIDpERUZBVUxUOiBpbmZvXG4gICovXG4gIHRyaWdnZXJBZnRlcjogP3N0cmluZztcbiAgLyogTG9nIGxldmVsIHVzZWQgYnkgdGhlIENsb3VkIENvZGUgVHJpZ2dlcnMgYGJlZm9yZVNhdmVgLCBgYmVmb3JlRGVsZXRlYCwgYGJlZm9yZUZpbmRgLCBgYmVmb3JlTG9naW5gIG9uIHN1Y2Nlc3MuIERlZmF1bHQgaXMgYGluZm9gLlxuICA6REVGQVVMVDogaW5mb1xuICAqL1xuICB0cmlnZ2VyQmVmb3JlU3VjY2VzczogP3N0cmluZztcbiAgLyogTG9nIGxldmVsIHVzZWQgYnkgdGhlIENsb3VkIENvZGUgVHJpZ2dlcnMgYGJlZm9yZVNhdmVgLCBgYmVmb3JlRGVsZXRlYCwgYGJlZm9yZUZpbmRgLCBgYmVmb3JlTG9naW5gIG9uIGVycm9yLiBEZWZhdWx0IGlzIGBlcnJvcmAuXG4gIDpERUZBVUxUOiBlcnJvclxuICAqL1xuICB0cmlnZ2VyQmVmb3JlRXJyb3I6ID9zdHJpbmc7XG4gIC8qIExvZyBsZXZlbCB1c2VkIGJ5IHRoZSBDbG91ZCBDb2RlIEZ1bmN0aW9ucyBvbiBzdWNjZXNzLiBEZWZhdWx0IGlzIGBpbmZvYC5cbiAgOkRFRkFVTFQ6IGluZm9cbiAgKi9cbiAgY2xvdWRGdW5jdGlvblN1Y2Nlc3M6ID9zdHJpbmc7XG4gIC8qIExvZyBsZXZlbCB1c2VkIGJ5IHRoZSBDbG91ZCBDb2RlIEZ1bmN0aW9ucyBvbiBlcnJvci4gRGVmYXVsdCBpcyBgZXJyb3JgLlxuICA6REVGQVVMVDogZXJyb3JcbiAgKi9cbiAgY2xvdWRGdW5jdGlvbkVycm9yOiA/c3RyaW5nO1xufVxuIl0sIm1hcHBpbmdzIjoiOztBQUNBLElBQUFBLGlCQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxhQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxZQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxhQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxjQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxjQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxlQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxXQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxXQUFBLEdBQUFSLE9BQUEiLCJpZ25vcmVMaXN0IjpbXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "parse-server",
3
- "version": "8.3.0-alpha.7",
3
+ "version": "8.3.0-alpha.8",
4
4
  "description": "An express module providing a Parse-compatible API server",
5
5
  "main": "lib/index.js",
6
6
  "repository": {