parse-server 7.1.0-alpha.9 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/README.md +1 -1
  2. package/lib/AccountLockout.js +2 -2
  3. package/lib/Adapters/Auth/apple.js +1 -1
  4. package/lib/Adapters/Auth/facebook.js +1 -1
  5. package/lib/Adapters/Auth/gcenter.js +1 -1
  6. package/lib/Adapters/Auth/google.js +1 -1
  7. package/lib/Adapters/Auth/gpgames.js +1 -1
  8. package/lib/Adapters/Auth/index.js +2 -2
  9. package/lib/Adapters/Auth/instagram.js +1 -1
  10. package/lib/Adapters/Auth/keycloak.js +1 -1
  11. package/lib/Adapters/Auth/ldap.js +1 -1
  12. package/lib/Adapters/Auth/mfa.js +2 -2
  13. package/lib/Adapters/Auth/utils.js +1 -1
  14. package/lib/Adapters/Cache/LRUCache.js +2 -2
  15. package/lib/Adapters/Cache/RedisCacheAdapter.js +2 -2
  16. package/lib/Adapters/Files/FilesAdapter.js +2 -2
  17. package/lib/Adapters/Files/GridFSBucketAdapter.js +2 -2
  18. package/lib/Adapters/Logger/WinstonLogger.js +2 -2
  19. package/lib/Adapters/MessageQueue/EventEmitterMQ.js +2 -2
  20. package/lib/Adapters/PubSub/EventEmitterPubSub.js +2 -2
  21. package/lib/Adapters/PubSub/RedisPubSub.js +2 -2
  22. package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +6 -6
  23. package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +6 -6
  24. package/lib/Adapters/Storage/Mongo/MongoTransform.js +3 -3
  25. package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +17 -10
  26. package/lib/Auth.js +3 -3
  27. package/lib/Config.js +2 -2
  28. package/lib/Controllers/AnalyticsController.js +2 -2
  29. package/lib/Controllers/CacheController.js +2 -2
  30. package/lib/Controllers/DatabaseController.js +5 -5
  31. package/lib/Controllers/FilesController.js +2 -2
  32. package/lib/Controllers/HooksController.js +2 -2
  33. package/lib/Controllers/LiveQueryController.js +1 -1
  34. package/lib/Controllers/LoggerController.js +2 -2
  35. package/lib/Controllers/ParseGraphQLController.js +5 -5
  36. package/lib/Controllers/PushController.js +2 -2
  37. package/lib/Controllers/SchemaController.js +4 -4
  38. package/lib/Controllers/UserController.js +3 -3
  39. package/lib/Controllers/index.js +3 -3
  40. package/lib/Deprecator/Deprecator.js +2 -2
  41. package/lib/GraphQL/ParseGraphQLSchema.js +2 -2
  42. package/lib/GraphQL/ParseGraphQLServer.js +2 -2
  43. package/lib/GraphQL/helpers/objectsMutations.js +2 -2
  44. package/lib/GraphQL/helpers/objectsQueries.js +2 -2
  45. package/lib/GraphQL/loaders/defaultGraphQLTypes.js +3 -3
  46. package/lib/GraphQL/loaders/defaultRelaySchema.js +3 -3
  47. package/lib/GraphQL/loaders/filesMutations.js +3 -3
  48. package/lib/GraphQL/loaders/functionsMutations.js +3 -3
  49. package/lib/GraphQL/loaders/parseClassMutations.js +3 -3
  50. package/lib/GraphQL/loaders/parseClassQueries.js +2 -2
  51. package/lib/GraphQL/loaders/parseClassTypes.js +3 -3
  52. package/lib/GraphQL/loaders/schemaDirectives.js +1 -1
  53. package/lib/GraphQL/loaders/schemaMutations.js +2 -2
  54. package/lib/GraphQL/loaders/schemaQueries.js +2 -2
  55. package/lib/GraphQL/loaders/schemaTypes.js +1 -1
  56. package/lib/GraphQL/loaders/usersMutations.js +3 -3
  57. package/lib/GraphQL/loaders/usersQueries.js +2 -2
  58. package/lib/GraphQL/parseGraphQLUtils.js +2 -2
  59. package/lib/GraphQL/transformers/mutation.js +3 -3
  60. package/lib/GraphQL/transformers/query.js +2 -2
  61. package/lib/GraphQL/transformers/schemaFields.js +3 -3
  62. package/lib/LiveQuery/Client.js +2 -2
  63. package/lib/LiveQuery/ParseCloudCodePublisher.js +2 -2
  64. package/lib/LiveQuery/ParseLiveQueryServer.js +2 -2
  65. package/lib/LiveQuery/ParseWebSocketServer.js +2 -2
  66. package/lib/LiveQuery/QueryTools.js +3 -2
  67. package/lib/LiveQuery/SessionTokenCache.js +2 -2
  68. package/lib/LiveQuery/Subscription.js +2 -2
  69. package/lib/Options/parsers.js +1 -1
  70. package/lib/ParseServer.js +3 -3
  71. package/lib/ParseServerRESTController.js +2 -2
  72. package/lib/PromiseRouter.js +2 -2
  73. package/lib/Push/PushQueue.js +2 -2
  74. package/lib/Push/PushWorker.js +2 -2
  75. package/lib/Push/utils.js +2 -2
  76. package/lib/RestQuery.js +1 -1
  77. package/lib/RestWrite.js +3 -3
  78. package/lib/Routers/AggregateRouter.js +2 -2
  79. package/lib/Routers/AnalyticsRouter.js +2 -2
  80. package/lib/Routers/AudiencesRouter.js +2 -2
  81. package/lib/Routers/ClassesRouter.js +2 -2
  82. package/lib/Routers/CloudCodeRouter.js +2 -2
  83. package/lib/Routers/FeaturesRouter.js +2 -2
  84. package/lib/Routers/FilesRouter.js +2 -2
  85. package/lib/Routers/FunctionsRouter.js +2 -2
  86. package/lib/Routers/GlobalConfigRouter.js +2 -2
  87. package/lib/Routers/GraphQLRouter.js +2 -2
  88. package/lib/Routers/HooksRouter.js +2 -2
  89. package/lib/Routers/IAPValidationRouter.js +2 -2
  90. package/lib/Routers/InstallationsRouter.js +2 -2
  91. package/lib/Routers/LogsRouter.js +2 -2
  92. package/lib/Routers/PagesRouter.js +2 -2
  93. package/lib/Routers/PublicAPIRouter.js +2 -2
  94. package/lib/Routers/PurgeRouter.js +2 -2
  95. package/lib/Routers/PushRouter.js +2 -2
  96. package/lib/Routers/RolesRouter.js +2 -2
  97. package/lib/Routers/SchemasRouter.js +2 -2
  98. package/lib/Routers/SecurityRouter.js +2 -2
  99. package/lib/Routers/SessionsRouter.js +2 -2
  100. package/lib/Routers/UsersRouter.js +3 -3
  101. package/lib/SchemaMigrations/DefinedSchemas.js +3 -3
  102. package/lib/Security/Check.js +2 -2
  103. package/lib/Security/CheckGroup.js +1 -1
  104. package/lib/Security/CheckGroups/CheckGroupDatabase.js +2 -2
  105. package/lib/Security/CheckGroups/CheckGroupServerConfig.js +2 -2
  106. package/lib/Security/CheckGroups/CheckGroups.js +2 -2
  107. package/lib/Security/CheckRunner.js +2 -2
  108. package/lib/SharedRest.js +1 -1
  109. package/lib/StatusHandler.js +3 -3
  110. package/lib/TestUtils.js +2 -2
  111. package/lib/Utils.js +1 -1
  112. package/lib/cli/parse-live-query-server.js +2 -2
  113. package/lib/cli/parse-server.js +2 -2
  114. package/lib/cli/utils/commander.js +2 -2
  115. package/lib/cli/utils/runner.js +2 -2
  116. package/lib/cloud-code/Parse.Cloud.js +2 -2
  117. package/lib/deprecated.js +1 -1
  118. package/lib/index.js +2 -2
  119. package/lib/logger.js +2 -2
  120. package/lib/middlewares.js +2 -2
  121. package/lib/request.js +2 -2
  122. package/lib/triggers.js +3 -3
  123. package/package.json +7 -6
@@ -10,7 +10,7 @@ var _RestWrite = _interopRequireDefault(require("../RestWrite"));
10
10
  var _Auth = require("../Auth");
11
11
  var _StatusHandler = require("../StatusHandler");
12
12
  var _utils = require("../Push/utils");
13
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
14
  class PushController {
15
15
  sendPush(body = {}, where = {}, config, auth, onPushStatusSaved = () => {}, now = new Date()) {
16
16
  if (!config.hasPushSupport) {
@@ -221,4 +221,4 @@ class PushController {
221
221
  }
222
222
  exports.PushController = PushController;
223
223
  var _default = exports.default = PushController;
224
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsInJlcXVpcmUiLCJfUmVzdFF1ZXJ5IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9SZXN0V3JpdGUiLCJfQXV0aCIsIl9TdGF0dXNIYW5kbGVyIiwiX3V0aWxzIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJQdXNoQ29udHJvbGxlciIsInNlbmRQdXNoIiwiYm9keSIsIndoZXJlIiwiY29uZmlnIiwiYXV0aCIsIm9uUHVzaFN0YXR1c1NhdmVkIiwibm93IiwiRGF0ZSIsImhhc1B1c2hTdXBwb3J0IiwiUGFyc2UiLCJFcnJvciIsIlBVU0hfTUlTQ09ORklHVVJFRCIsImV4cGlyYXRpb25fdGltZSIsImdldEV4cGlyYXRpb25UaW1lIiwiZXhwaXJhdGlvbl9pbnRlcnZhbCIsImdldEV4cGlyYXRpb25JbnRlcnZhbCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInR0bE1zIiwidmFsdWVPZiIsInB1c2hUaW1lIiwiZ2V0UHVzaFRpbWUiLCJkYXRlIiwiZm9ybWF0UHVzaFRpbWUiLCJiYWRnZVVwZGF0ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiZGF0YSIsImJhZGdlIiwicmVzdFVwZGF0ZSIsInRvTG93ZXJDYXNlIiwiX19vcCIsImFtb3VudCIsIk51bWJlciIsInVwZGF0ZVdoZXJlIiwiYXBwbHlEZXZpY2VUb2tlbkV4aXN0cyIsInJlc3RRdWVyeSIsIlJlc3RRdWVyeSIsIm1ldGhvZCIsIk1ldGhvZCIsImZpbmQiLCJydW5CZWZvcmVGaW5kIiwibWFzdGVyIiwiY2xhc3NOYW1lIiwicmVzdFdoZXJlIiwiYnVpbGRSZXN0V2hlcmUiLCJ0aGVuIiwid3JpdGUiLCJSZXN0V3JpdGUiLCJydW5PcHRpb25zIiwibWFueSIsImV4ZWN1dGUiLCJwdXNoU3RhdHVzIiwicHVzaFN0YXR1c0hhbmRsZXIiLCJzZXRJbml0aWFsIiwib2JqZWN0SWQiLCJhdWRpZW5jZV9pZCIsImF1ZGllbmNlSWQiLCJ1cGRhdGVBdWRpZW5jZSIsImxhc3RVc2VkIiwiX190eXBlIiwiaXNvIiwidG9JU09TdHJpbmciLCJ0aW1lc1VzZWQiLCJoYXNQdXNoU2NoZWR1bGVkU3VwcG9ydCIsInB1c2hDb250cm9sbGVyUXVldWUiLCJlbnF1ZXVlIiwiY2F0Y2giLCJlcnIiLCJmYWlsIiwiaGFzRXhwaXJhdGlvblRpbWUiLCJleHBpcmF0aW9uVGltZVBhcmFtIiwiZXhwaXJhdGlvblRpbWUiLCJpc0Zpbml0ZSIsImhhc0V4cGlyYXRpb25JbnRlcnZhbCIsImV4cGlyYXRpb25JbnRlcnZhbFBhcmFtIiwiaGFzUHVzaFRpbWUiLCJwdXNoVGltZVBhcmFtIiwiaXNMb2NhbFRpbWUiLCJwdXNoVGltZUhhc1RpbWV6b25lQ29tcG9uZW50Iiwib2Zmc2V0UGF0dGVybiIsImluZGV4T2YiLCJsZW5ndGgiLCJ0ZXN0IiwiaXNvU3RyaW5nIiwic3Vic3RyaW5nIiwiZXhwb3J0cyIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NvbnRyb2xsZXJzL1B1c2hDb250cm9sbGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhcnNlIH0gZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgUmVzdFF1ZXJ5IGZyb20gJy4uL1Jlc3RRdWVyeSc7XG5pbXBvcnQgUmVzdFdyaXRlIGZyb20gJy4uL1Jlc3RXcml0ZSc7XG5pbXBvcnQgeyBtYXN0ZXIgfSBmcm9tICcuLi9BdXRoJztcbmltcG9ydCB7IHB1c2hTdGF0dXNIYW5kbGVyIH0gZnJvbSAnLi4vU3RhdHVzSGFuZGxlcic7XG5pbXBvcnQgeyBhcHBseURldmljZVRva2VuRXhpc3RzIH0gZnJvbSAnLi4vUHVzaC91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBQdXNoQ29udHJvbGxlciB7XG4gIHNlbmRQdXNoKGJvZHkgPSB7fSwgd2hlcmUgPSB7fSwgY29uZmlnLCBhdXRoLCBvblB1c2hTdGF0dXNTYXZlZCA9ICgpID0+IHt9LCBub3cgPSBuZXcgRGF0ZSgpKSB7XG4gICAgaWYgKCFjb25maWcuaGFzUHVzaFN1cHBvcnQpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5QVVNIX01JU0NPTkZJR1VSRUQsICdNaXNzaW5nIHB1c2ggY29uZmlndXJhdGlvbicpO1xuICAgIH1cblxuICAgIC8vIFJlcGxhY2UgdGhlIGV4cGlyYXRpb25fdGltZSBhbmQgcHVzaF90aW1lIHdpdGggYSB2YWxpZCBVbml4IGVwb2NoIG1pbGxpc2Vjb25kcyB0aW1lXG4gICAgYm9keS5leHBpcmF0aW9uX3RpbWUgPSBQdXNoQ29udHJvbGxlci5nZXRFeHBpcmF0aW9uVGltZShib2R5KTtcbiAgICBib2R5LmV4cGlyYXRpb25faW50ZXJ2YWwgPSBQdXNoQ29udHJvbGxlci5nZXRFeHBpcmF0aW9uSW50ZXJ2YWwoYm9keSk7XG4gICAgaWYgKGJvZHkuZXhwaXJhdGlvbl90aW1lICYmIGJvZHkuZXhwaXJhdGlvbl9pbnRlcnZhbCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5QVVNIX01JU0NPTkZJR1VSRUQsXG4gICAgICAgICdCb3RoIGV4cGlyYXRpb25fdGltZSBhbmQgZXhwaXJhdGlvbl9pbnRlcnZhbCBjYW5ub3QgYmUgc2V0J1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBJbW1lZGlhdGUgcHVzaFxuICAgIGlmIChib2R5LmV4cGlyYXRpb25faW50ZXJ2YWwgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChib2R5LCAncHVzaF90aW1lJykpIHtcbiAgICAgIGNvbnN0IHR0bE1zID0gYm9keS5leHBpcmF0aW9uX2ludGVydmFsICogMTAwMDtcbiAgICAgIGJvZHkuZXhwaXJhdGlvbl90aW1lID0gbmV3IERhdGUobm93LnZhbHVlT2YoKSArIHR0bE1zKS52YWx1ZU9mKCk7XG4gICAgfVxuXG4gICAgY29uc3QgcHVzaFRpbWUgPSBQdXNoQ29udHJvbGxlci5nZXRQdXNoVGltZShib2R5KTtcbiAgICBpZiAocHVzaFRpbWUgJiYgcHVzaFRpbWUuZGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGJvZHlbJ3B1c2hfdGltZSddID0gUHVzaENvbnRyb2xsZXIuZm9ybWF0UHVzaFRpbWUocHVzaFRpbWUpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IElmIHRoZSByZXEgY2FuIHBhc3MgdGhlIGNoZWNraW5nLCB3ZSByZXR1cm4gaW1tZWRpYXRlbHkgaW5zdGVhZCBvZiB3YWl0aW5nXG4gICAgLy8gcHVzaGVzIHRvIGJlIHNlbnQuIFdlIHByb2JhYmx5IGNoYW5nZSB0aGlzIGJlaGF2aW91ciBpbiB0aGUgZnV0dXJlLlxuICAgIGxldCBiYWRnZVVwZGF0ZSA9ICgpID0+IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9O1xuXG4gICAgaWYgKGJvZHkuZGF0YSAmJiBib2R5LmRhdGEuYmFkZ2UpIHtcbiAgICAgIGNvbnN0IGJhZGdlID0gYm9keS5kYXRhLmJhZGdlO1xuICAgICAgbGV0IHJlc3RVcGRhdGUgPSB7fTtcbiAgICAgIGlmICh0eXBlb2YgYmFkZ2UgPT0gJ3N0cmluZycgJiYgYmFkZ2UudG9Mb3dlckNhc2UoKSA9PT0gJ2luY3JlbWVudCcpIHtcbiAgICAgICAgcmVzdFVwZGF0ZSA9IHsgYmFkZ2U6IHsgX19vcDogJ0luY3JlbWVudCcsIGFtb3VudDogMSB9IH07XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0eXBlb2YgYmFkZ2UgPT0gJ29iamVjdCcgJiZcbiAgICAgICAgdHlwZW9mIGJhZGdlLl9fb3AgPT0gJ3N0cmluZycgJiZcbiAgICAgICAgYmFkZ2UuX19vcC50b0xvd2VyQ2FzZSgpID09ICdpbmNyZW1lbnQnICYmXG4gICAgICAgIE51bWJlcihiYWRnZS5hbW91bnQpXG4gICAgICApIHtcbiAgICAgICAgcmVzdFVwZGF0ZSA9IHsgYmFkZ2U6IHsgX19vcDogJ0luY3JlbWVudCcsIGFtb3VudDogYmFkZ2UuYW1vdW50IH0gfTtcbiAgICAgIH0gZWxzZSBpZiAoTnVtYmVyKGJhZGdlKSkge1xuICAgICAgICByZXN0VXBkYXRlID0geyBiYWRnZTogYmFkZ2UgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IFwiSW52YWxpZCB2YWx1ZSBmb3IgYmFkZ2UsIGV4cGVjdGVkIG51bWJlciBvciAnSW5jcmVtZW50JyBvciB7aW5jcmVtZW50OiBudW1iZXJ9XCI7XG4gICAgICB9XG5cbiAgICAgIC8vIEZvcmNlIGZpbHRlcmluZyBvbiBvbmx5IHZhbGlkIGRldmljZSB0b2tlbnNcbiAgICAgIGNvbnN0IHVwZGF0ZVdoZXJlID0gYXBwbHlEZXZpY2VUb2tlbkV4aXN0cyh3aGVyZSk7XG4gICAgICBiYWRnZVVwZGF0ZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gQnVpbGQgYSByZWFsIFJlc3RRdWVyeSBzbyB3ZSBjYW4gdXNlIGl0IGluIFJlc3RXcml0ZVxuICAgICAgICBjb25zdCByZXN0UXVlcnkgPSBhd2FpdCBSZXN0UXVlcnkoe1xuICAgICAgICAgIG1ldGhvZDogUmVzdFF1ZXJ5Lk1ldGhvZC5maW5kLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBydW5CZWZvcmVGaW5kOiBmYWxzZSxcbiAgICAgICAgICBhdXRoOiBtYXN0ZXIoY29uZmlnKSxcbiAgICAgICAgICBjbGFzc05hbWU6ICdfSW5zdGFsbGF0aW9uJyxcbiAgICAgICAgICByZXN0V2hlcmU6IHVwZGF0ZVdoZXJlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3RRdWVyeS5idWlsZFJlc3RXaGVyZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHdyaXRlID0gbmV3IFJlc3RXcml0ZShcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIG1hc3Rlcihjb25maWcpLFxuICAgICAgICAgICAgJ19JbnN0YWxsYXRpb24nLFxuICAgICAgICAgICAgcmVzdFF1ZXJ5LnJlc3RXaGVyZSxcbiAgICAgICAgICAgIHJlc3RVcGRhdGVcbiAgICAgICAgICApO1xuICAgICAgICAgIHdyaXRlLnJ1bk9wdGlvbnMubWFueSA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIHdyaXRlLmV4ZWN1dGUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBwdXNoU3RhdHVzID0gcHVzaFN0YXR1c0hhbmRsZXIoY29uZmlnKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHB1c2hTdGF0dXMuc2V0SW5pdGlhbChib2R5LCB3aGVyZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBvblB1c2hTdGF0dXNTYXZlZChwdXNoU3RhdHVzLm9iamVjdElkKTtcbiAgICAgICAgcmV0dXJuIGJhZGdlVXBkYXRlKCk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAvLyBVcGRhdGUgYXVkaWVuY2UgbGFzdFVzZWQgYW5kIHRpbWVzVXNlZFxuICAgICAgICBpZiAoYm9keS5hdWRpZW5jZV9pZCkge1xuICAgICAgICAgIGNvbnN0IGF1ZGllbmNlSWQgPSBib2R5LmF1ZGllbmNlX2lkO1xuXG4gICAgICAgICAgdmFyIHVwZGF0ZUF1ZGllbmNlID0ge1xuICAgICAgICAgICAgbGFzdFVzZWQ6IHsgX190eXBlOiAnRGF0ZScsIGlzbzogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH0sXG4gICAgICAgICAgICB0aW1lc1VzZWQ6IHsgX19vcDogJ0luY3JlbWVudCcsIGFtb3VudDogMSB9LFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3Qgd3JpdGUgPSBuZXcgUmVzdFdyaXRlKFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgbWFzdGVyKGNvbmZpZyksXG4gICAgICAgICAgICAnX0F1ZGllbmNlJyxcbiAgICAgICAgICAgIHsgb2JqZWN0SWQ6IGF1ZGllbmNlSWQgfSxcbiAgICAgICAgICAgIHVwZGF0ZUF1ZGllbmNlXG4gICAgICAgICAgKTtcbiAgICAgICAgICB3cml0ZS5leGVjdXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRG9uJ3Qgd2FpdCBmb3IgdGhlIGF1ZGllbmNlIHVwZGF0ZSBwcm9taXNlIHRvIHJlc29sdmUuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYm9keSwgJ3B1c2hfdGltZScpICYmXG4gICAgICAgICAgY29uZmlnLmhhc1B1c2hTY2hlZHVsZWRTdXBwb3J0XG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29uZmlnLnB1c2hDb250cm9sbGVyUXVldWUuZW5xdWV1ZShib2R5LCB3aGVyZSwgY29uZmlnLCBhdXRoLCBwdXNoU3RhdHVzKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgcmV0dXJuIHB1c2hTdGF0dXMuZmFpbChlcnIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZXhwaXJhdGlvbiB0aW1lIGZyb20gdGhlIHJlcXVlc3QgYm9keS5cbiAgICogQHBhcmFtIHtPYmplY3R9IHJlcXVlc3QgQSByZXF1ZXN0IG9iamVjdFxuICAgKiBAcmV0dXJucyB7TnVtYmVyfHVuZGVmaW5lZH0gVGhlIGV4cGlyYXRpb24gdGltZSBpZiBpdCBleGlzdHMgaW4gdGhlIHJlcXVlc3RcbiAgICovXG4gIHN0YXRpYyBnZXRFeHBpcmF0aW9uVGltZShib2R5ID0ge30pIHtcbiAgICB2YXIgaGFzRXhwaXJhdGlvblRpbWUgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYm9keSwgJ2V4cGlyYXRpb25fdGltZScpO1xuICAgIGlmICghaGFzRXhwaXJhdGlvblRpbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGV4cGlyYXRpb25UaW1lUGFyYW0gPSBib2R5WydleHBpcmF0aW9uX3RpbWUnXTtcbiAgICB2YXIgZXhwaXJhdGlvblRpbWU7XG4gICAgaWYgKHR5cGVvZiBleHBpcmF0aW9uVGltZVBhcmFtID09PSAnbnVtYmVyJykge1xuICAgICAgZXhwaXJhdGlvblRpbWUgPSBuZXcgRGF0ZShleHBpcmF0aW9uVGltZVBhcmFtICogMTAwMCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwaXJhdGlvblRpbWVQYXJhbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGV4cGlyYXRpb25UaW1lID0gbmV3IERhdGUoZXhwaXJhdGlvblRpbWVQYXJhbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuUFVTSF9NSVNDT05GSUdVUkVELFxuICAgICAgICBib2R5WydleHBpcmF0aW9uX3RpbWUnXSArICcgaXMgbm90IHZhbGlkIHRpbWUuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgLy8gQ2hlY2sgZXhwaXJhdGlvblRpbWUgaXMgdmFsaWQgb3Igbm90LCBpZiBpdCBpcyBub3QgdmFsaWQsIGV4cGlyYXRpb25UaW1lIGlzIE5hTlxuICAgIGlmICghaXNGaW5pdGUoZXhwaXJhdGlvblRpbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLlBVU0hfTUlTQ09ORklHVVJFRCxcbiAgICAgICAgYm9keVsnZXhwaXJhdGlvbl90aW1lJ10gKyAnIGlzIG5vdCB2YWxpZCB0aW1lLidcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBleHBpcmF0aW9uVGltZS52YWx1ZU9mKCk7XG4gIH1cblxuICBzdGF0aWMgZ2V0RXhwaXJhdGlvbkludGVydmFsKGJvZHkgPSB7fSkge1xuICAgIGNvbnN0IGhhc0V4cGlyYXRpb25JbnRlcnZhbCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChib2R5LCAnZXhwaXJhdGlvbl9pbnRlcnZhbCcpO1xuICAgIGlmICghaGFzRXhwaXJhdGlvbkludGVydmFsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGV4cGlyYXRpb25JbnRlcnZhbFBhcmFtID0gYm9keVsnZXhwaXJhdGlvbl9pbnRlcnZhbCddO1xuICAgIGlmICh0eXBlb2YgZXhwaXJhdGlvbkludGVydmFsUGFyYW0gIT09ICdudW1iZXInIHx8IGV4cGlyYXRpb25JbnRlcnZhbFBhcmFtIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuUFVTSF9NSVNDT05GSUdVUkVELFxuICAgICAgICBgZXhwaXJhdGlvbl9pbnRlcnZhbCBtdXN0IGJlIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAwYFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cGlyYXRpb25JbnRlcnZhbFBhcmFtO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwdXNoIHRpbWUgZnJvbSB0aGUgcmVxdWVzdCBib2R5LlxuICAgKiBAcGFyYW0ge09iamVjdH0gcmVxdWVzdCBBIHJlcXVlc3Qgb2JqZWN0XG4gICAqIEByZXR1cm5zIHtOdW1iZXJ8dW5kZWZpbmVkfSBUaGUgcHVzaCB0aW1lIGlmIGl0IGV4aXN0cyBpbiB0aGUgcmVxdWVzdFxuICAgKi9cbiAgc3RhdGljIGdldFB1c2hUaW1lKGJvZHkgPSB7fSkge1xuICAgIHZhciBoYXNQdXNoVGltZSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChib2R5LCAncHVzaF90aW1lJyk7XG4gICAgaWYgKCFoYXNQdXNoVGltZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcHVzaFRpbWVQYXJhbSA9IGJvZHlbJ3B1c2hfdGltZSddO1xuICAgIHZhciBkYXRlO1xuICAgIHZhciBpc0xvY2FsVGltZSA9IHRydWU7XG5cbiAgICBpZiAodHlwZW9mIHB1c2hUaW1lUGFyYW0gPT09ICdudW1iZXInKSB7XG4gICAgICBkYXRlID0gbmV3IERhdGUocHVzaFRpbWVQYXJhbSAqIDEwMDApO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHB1c2hUaW1lUGFyYW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICBpc0xvY2FsVGltZSA9ICFQdXNoQ29udHJvbGxlci5wdXNoVGltZUhhc1RpbWV6b25lQ29tcG9uZW50KHB1c2hUaW1lUGFyYW0pO1xuICAgICAgZGF0ZSA9IG5ldyBEYXRlKHB1c2hUaW1lUGFyYW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLlBVU0hfTUlTQ09ORklHVVJFRCxcbiAgICAgICAgYm9keVsncHVzaF90aW1lJ10gKyAnIGlzIG5vdCB2YWxpZCB0aW1lLidcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIENoZWNrIHB1c2hUaW1lIGlzIHZhbGlkIG9yIG5vdCwgaWYgaXQgaXMgbm90IHZhbGlkLCBwdXNoVGltZSBpcyBOYU5cbiAgICBpZiAoIWlzRmluaXRlKGRhdGUpKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLlBVU0hfTUlTQ09ORklHVVJFRCxcbiAgICAgICAgYm9keVsncHVzaF90aW1lJ10gKyAnIGlzIG5vdCB2YWxpZCB0aW1lLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGUsXG4gICAgICBpc0xvY2FsVGltZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIElTTzg2MDEgZm9ybWF0dGVkIGRhdGUgY29udGFpbnMgYSB0aW1lem9uZSBjb21wb25lbnRcbiAgICogQHBhcmFtIHB1c2hUaW1lUGFyYW0ge3N0cmluZ31cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgcHVzaFRpbWVIYXNUaW1lem9uZUNvbXBvbmVudChwdXNoVGltZVBhcmFtOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBvZmZzZXRQYXR0ZXJuID0gLyguKykoWystXSlcXGRcXGQ6XFxkXFxkJC87XG4gICAgcmV0dXJuIChcbiAgICAgIHB1c2hUaW1lUGFyYW0uaW5kZXhPZignWicpID09PSBwdXNoVGltZVBhcmFtLmxlbmd0aCAtIDEgfHwgb2Zmc2V0UGF0dGVybi50ZXN0KHB1c2hUaW1lUGFyYW0pIC8vIDIwMDctMDQtMDVUMTI6MzBaXG4gICAgKTsgLy8gMjAwNy0wNC0wNVQxMjozMC4wMDArMDI6MDAsIDIwMDctMDQtMDVUMTI6MzAuMDAwLTAyOjAwXG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBkYXRlIHRvIElTTyBmb3JtYXQgaW4gVVRDIHRpbWUgYW5kIHN0cmlwcyB0aGUgdGltZXpvbmUgaWYgYGlzTG9jYWxUaW1lYCBpcyB0cnVlXG4gICAqIEBwYXJhbSBkYXRlIHtEYXRlfVxuICAgKiBAcGFyYW0gaXNMb2NhbFRpbWUge2Jvb2xlYW59XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgZm9ybWF0UHVzaFRpbWUoeyBkYXRlLCBpc0xvY2FsVGltZSB9OiB7IGRhdGU6IERhdGUsIGlzTG9jYWxUaW1lOiBib29sZWFuIH0pIHtcbiAgICBpZiAoaXNMb2NhbFRpbWUpIHtcbiAgICAgIC8vIFN0cmlwICdaJ1xuICAgICAgY29uc3QgaXNvU3RyaW5nID0gZGF0ZS50b0lTT1N0cmluZygpO1xuICAgICAgcmV0dXJuIGlzb1N0cmluZy5zdWJzdHJpbmcoMCwgaXNvU3RyaW5nLmluZGV4T2YoJ1onKSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUHVzaENvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFB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
224
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsInJlcXVpcmUiLCJfUmVzdFF1ZXJ5IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9SZXN0V3JpdGUiLCJfQXV0aCIsIl9TdGF0dXNIYW5kbGVyIiwiX3V0aWxzIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiUHVzaENvbnRyb2xsZXIiLCJzZW5kUHVzaCIsImJvZHkiLCJ3aGVyZSIsImNvbmZpZyIsImF1dGgiLCJvblB1c2hTdGF0dXNTYXZlZCIsIm5vdyIsIkRhdGUiLCJoYXNQdXNoU3VwcG9ydCIsIlBhcnNlIiwiRXJyb3IiLCJQVVNIX01JU0NPTkZJR1VSRUQiLCJleHBpcmF0aW9uX3RpbWUiLCJnZXRFeHBpcmF0aW9uVGltZSIsImV4cGlyYXRpb25faW50ZXJ2YWwiLCJnZXRFeHBpcmF0aW9uSW50ZXJ2YWwiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJ0dGxNcyIsInZhbHVlT2YiLCJwdXNoVGltZSIsImdldFB1c2hUaW1lIiwiZGF0ZSIsImZvcm1hdFB1c2hUaW1lIiwiYmFkZ2VVcGRhdGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsImRhdGEiLCJiYWRnZSIsInJlc3RVcGRhdGUiLCJ0b0xvd2VyQ2FzZSIsIl9fb3AiLCJhbW91bnQiLCJOdW1iZXIiLCJ1cGRhdGVXaGVyZSIsImFwcGx5RGV2aWNlVG9rZW5FeGlzdHMiLCJyZXN0UXVlcnkiLCJSZXN0UXVlcnkiLCJtZXRob2QiLCJNZXRob2QiLCJmaW5kIiwicnVuQmVmb3JlRmluZCIsIm1hc3RlciIsImNsYXNzTmFtZSIsInJlc3RXaGVyZSIsImJ1aWxkUmVzdFdoZXJlIiwidGhlbiIsIndyaXRlIiwiUmVzdFdyaXRlIiwicnVuT3B0aW9ucyIsIm1hbnkiLCJleGVjdXRlIiwicHVzaFN0YXR1cyIsInB1c2hTdGF0dXNIYW5kbGVyIiwic2V0SW5pdGlhbCIsIm9iamVjdElkIiwiYXVkaWVuY2VfaWQiLCJhdWRpZW5jZUlkIiwidXBkYXRlQXVkaWVuY2UiLCJsYXN0VXNlZCIsIl9fdHlwZSIsImlzbyIsInRvSVNPU3RyaW5nIiwidGltZXNVc2VkIiwiaGFzUHVzaFNjaGVkdWxlZFN1cHBvcnQiLCJwdXNoQ29udHJvbGxlclF1ZXVlIiwiZW5xdWV1ZSIsImNhdGNoIiwiZXJyIiwiZmFpbCIsImhhc0V4cGlyYXRpb25UaW1lIiwiZXhwaXJhdGlvblRpbWVQYXJhbSIsImV4cGlyYXRpb25UaW1lIiwiaXNGaW5pdGUiLCJoYXNFeHBpcmF0aW9uSW50ZXJ2YWwiLCJleHBpcmF0aW9uSW50ZXJ2YWxQYXJhbSIsImhhc1B1c2hUaW1lIiwicHVzaFRpbWVQYXJhbSIsImlzTG9jYWxUaW1lIiwicHVzaFRpbWVIYXNUaW1lem9uZUNvbXBvbmVudCIsIm9mZnNldFBhdHRlcm4iLCJpbmRleE9mIiwibGVuZ3RoIiwidGVzdCIsImlzb1N0cmluZyIsInN1YnN0cmluZyIsImV4cG9ydHMiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Db250cm9sbGVycy9QdXNoQ29udHJvbGxlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQYXJzZSB9IGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IFJlc3RRdWVyeSBmcm9tICcuLi9SZXN0UXVlcnknO1xuaW1wb3J0IFJlc3RXcml0ZSBmcm9tICcuLi9SZXN0V3JpdGUnO1xuaW1wb3J0IHsgbWFzdGVyIH0gZnJvbSAnLi4vQXV0aCc7XG5pbXBvcnQgeyBwdXNoU3RhdHVzSGFuZGxlciB9IGZyb20gJy4uL1N0YXR1c0hhbmRsZXInO1xuaW1wb3J0IHsgYXBwbHlEZXZpY2VUb2tlbkV4aXN0cyB9IGZyb20gJy4uL1B1c2gvdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgUHVzaENvbnRyb2xsZXIge1xuICBzZW5kUHVzaChib2R5ID0ge30sIHdoZXJlID0ge30sIGNvbmZpZywgYXV0aCwgb25QdXNoU3RhdHVzU2F2ZWQgPSAoKSA9PiB7fSwgbm93ID0gbmV3IERhdGUoKSkge1xuICAgIGlmICghY29uZmlnLmhhc1B1c2hTdXBwb3J0KSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuUFVTSF9NSVNDT05GSUdVUkVELCAnTWlzc2luZyBwdXNoIGNvbmZpZ3VyYXRpb24nKTtcbiAgICB9XG5cbiAgICAvLyBSZXBsYWNlIHRoZSBleHBpcmF0aW9uX3RpbWUgYW5kIHB1c2hfdGltZSB3aXRoIGEgdmFsaWQgVW5peCBlcG9jaCBtaWxsaXNlY29uZHMgdGltZVxuICAgIGJvZHkuZXhwaXJhdGlvbl90aW1lID0gUHVzaENvbnRyb2xsZXIuZ2V0RXhwaXJhdGlvblRpbWUoYm9keSk7XG4gICAgYm9keS5leHBpcmF0aW9uX2ludGVydmFsID0gUHVzaENvbnRyb2xsZXIuZ2V0RXhwaXJhdGlvbkludGVydmFsKGJvZHkpO1xuICAgIGlmIChib2R5LmV4cGlyYXRpb25fdGltZSAmJiBib2R5LmV4cGlyYXRpb25faW50ZXJ2YWwpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuUFVTSF9NSVNDT05GSUdVUkVELFxuICAgICAgICAnQm90aCBleHBpcmF0aW9uX3RpbWUgYW5kIGV4cGlyYXRpb25faW50ZXJ2YWwgY2Fubm90IGJlIHNldCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gSW1tZWRpYXRlIHB1c2hcbiAgICBpZiAoYm9keS5leHBpcmF0aW9uX2ludGVydmFsICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYm9keSwgJ3B1c2hfdGltZScpKSB7XG4gICAgICBjb25zdCB0dGxNcyA9IGJvZHkuZXhwaXJhdGlvbl9pbnRlcnZhbCAqIDEwMDA7XG4gICAgICBib2R5LmV4cGlyYXRpb25fdGltZSA9IG5ldyBEYXRlKG5vdy52YWx1ZU9mKCkgKyB0dGxNcykudmFsdWVPZigpO1xuICAgIH1cblxuICAgIGNvbnN0IHB1c2hUaW1lID0gUHVzaENvbnRyb2xsZXIuZ2V0UHVzaFRpbWUoYm9keSk7XG4gICAgaWYgKHB1c2hUaW1lICYmIHB1c2hUaW1lLmRhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBib2R5WydwdXNoX3RpbWUnXSA9IFB1c2hDb250cm9sbGVyLmZvcm1hdFB1c2hUaW1lKHB1c2hUaW1lKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBJZiB0aGUgcmVxIGNhbiBwYXNzIHRoZSBjaGVja2luZywgd2UgcmV0dXJuIGltbWVkaWF0ZWx5IGluc3RlYWQgb2Ygd2FpdGluZ1xuICAgIC8vIHB1c2hlcyB0byBiZSBzZW50LiBXZSBwcm9iYWJseSBjaGFuZ2UgdGhpcyBiZWhhdmlvdXIgaW4gdGhlIGZ1dHVyZS5cbiAgICBsZXQgYmFkZ2VVcGRhdGUgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfTtcblxuICAgIGlmIChib2R5LmRhdGEgJiYgYm9keS5kYXRhLmJhZGdlKSB7XG4gICAgICBjb25zdCBiYWRnZSA9IGJvZHkuZGF0YS5iYWRnZTtcbiAgICAgIGxldCByZXN0VXBkYXRlID0ge307XG4gICAgICBpZiAodHlwZW9mIGJhZGdlID09ICdzdHJpbmcnICYmIGJhZGdlLnRvTG93ZXJDYXNlKCkgPT09ICdpbmNyZW1lbnQnKSB7XG4gICAgICAgIHJlc3RVcGRhdGUgPSB7IGJhZGdlOiB7IF9fb3A6ICdJbmNyZW1lbnQnLCBhbW91bnQ6IDEgfSB9O1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdHlwZW9mIGJhZGdlID09ICdvYmplY3QnICYmXG4gICAgICAgIHR5cGVvZiBiYWRnZS5fX29wID09ICdzdHJpbmcnICYmXG4gICAgICAgIGJhZGdlLl9fb3AudG9Mb3dlckNhc2UoKSA9PSAnaW5jcmVtZW50JyAmJlxuICAgICAgICBOdW1iZXIoYmFkZ2UuYW1vdW50KVxuICAgICAgKSB7XG4gICAgICAgIHJlc3RVcGRhdGUgPSB7IGJhZGdlOiB7IF9fb3A6ICdJbmNyZW1lbnQnLCBhbW91bnQ6IGJhZGdlLmFtb3VudCB9IH07XG4gICAgICB9IGVsc2UgaWYgKE51bWJlcihiYWRnZSkpIHtcbiAgICAgICAgcmVzdFVwZGF0ZSA9IHsgYmFkZ2U6IGJhZGdlIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBcIkludmFsaWQgdmFsdWUgZm9yIGJhZGdlLCBleHBlY3RlZCBudW1iZXIgb3IgJ0luY3JlbWVudCcgb3Ige2luY3JlbWVudDogbnVtYmVyfVwiO1xuICAgICAgfVxuXG4gICAgICAvLyBGb3JjZSBmaWx0ZXJpbmcgb24gb25seSB2YWxpZCBkZXZpY2UgdG9rZW5zXG4gICAgICBjb25zdCB1cGRhdGVXaGVyZSA9IGFwcGx5RGV2aWNlVG9rZW5FeGlzdHMod2hlcmUpO1xuICAgICAgYmFkZ2VVcGRhdGUgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIEJ1aWxkIGEgcmVhbCBSZXN0UXVlcnkgc28gd2UgY2FuIHVzZSBpdCBpbiBSZXN0V3JpdGVcbiAgICAgICAgY29uc3QgcmVzdFF1ZXJ5ID0gYXdhaXQgUmVzdFF1ZXJ5KHtcbiAgICAgICAgICBtZXRob2Q6IFJlc3RRdWVyeS5NZXRob2QuZmluZCxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgcnVuQmVmb3JlRmluZDogZmFsc2UsXG4gICAgICAgICAgYXV0aDogbWFzdGVyKGNvbmZpZyksXG4gICAgICAgICAgY2xhc3NOYW1lOiAnX0luc3RhbGxhdGlvbicsXG4gICAgICAgICAgcmVzdFdoZXJlOiB1cGRhdGVXaGVyZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN0UXVlcnkuYnVpbGRSZXN0V2hlcmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICBjb25zdCB3cml0ZSA9IG5ldyBSZXN0V3JpdGUoXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICBtYXN0ZXIoY29uZmlnKSxcbiAgICAgICAgICAgICdfSW5zdGFsbGF0aW9uJyxcbiAgICAgICAgICAgIHJlc3RRdWVyeS5yZXN0V2hlcmUsXG4gICAgICAgICAgICByZXN0VXBkYXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgICB3cml0ZS5ydW5PcHRpb25zLm1hbnkgPSB0cnVlO1xuICAgICAgICAgIHJldHVybiB3cml0ZS5leGVjdXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgcHVzaFN0YXR1cyA9IHB1c2hTdGF0dXNIYW5kbGVyKGNvbmZpZyk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHJldHVybiBwdXNoU3RhdHVzLnNldEluaXRpYWwoYm9keSwgd2hlcmUpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgb25QdXNoU3RhdHVzU2F2ZWQocHVzaFN0YXR1cy5vYmplY3RJZCk7XG4gICAgICAgIHJldHVybiBiYWRnZVVwZGF0ZSgpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgLy8gVXBkYXRlIGF1ZGllbmNlIGxhc3RVc2VkIGFuZCB0aW1lc1VzZWRcbiAgICAgICAgaWYgKGJvZHkuYXVkaWVuY2VfaWQpIHtcbiAgICAgICAgICBjb25zdCBhdWRpZW5jZUlkID0gYm9keS5hdWRpZW5jZV9pZDtcblxuICAgICAgICAgIHZhciB1cGRhdGVBdWRpZW5jZSA9IHtcbiAgICAgICAgICAgIGxhc3RVc2VkOiB7IF9fdHlwZTogJ0RhdGUnLCBpc286IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9LFxuICAgICAgICAgICAgdGltZXNVc2VkOiB7IF9fb3A6ICdJbmNyZW1lbnQnLCBhbW91bnQ6IDEgfSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IHdyaXRlID0gbmV3IFJlc3RXcml0ZShcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIG1hc3Rlcihjb25maWcpLFxuICAgICAgICAgICAgJ19BdWRpZW5jZScsXG4gICAgICAgICAgICB7IG9iamVjdElkOiBhdWRpZW5jZUlkIH0sXG4gICAgICAgICAgICB1cGRhdGVBdWRpZW5jZVxuICAgICAgICAgICk7XG4gICAgICAgICAgd3JpdGUuZXhlY3V0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIERvbid0IHdhaXQgZm9yIHRoZSBhdWRpZW5jZSB1cGRhdGUgcHJvbWlzZSB0byByZXNvbHZlLlxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGJvZHksICdwdXNoX3RpbWUnKSAmJlxuICAgICAgICAgIGNvbmZpZy5oYXNQdXNoU2NoZWR1bGVkU3VwcG9ydFxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbmZpZy5wdXNoQ29udHJvbGxlclF1ZXVlLmVucXVldWUoYm9keSwgd2hlcmUsIGNvbmZpZywgYXV0aCwgcHVzaFN0YXR1cyk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIHJldHVybiBwdXNoU3RhdHVzLmZhaWwoZXJyKS50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGV4cGlyYXRpb24gdGltZSBmcm9tIHRoZSByZXF1ZXN0IGJvZHkuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSByZXF1ZXN0IEEgcmVxdWVzdCBvYmplY3RcbiAgICogQHJldHVybnMge051bWJlcnx1bmRlZmluZWR9IFRoZSBleHBpcmF0aW9uIHRpbWUgaWYgaXQgZXhpc3RzIGluIHRoZSByZXF1ZXN0XG4gICAqL1xuICBzdGF0aWMgZ2V0RXhwaXJhdGlvblRpbWUoYm9keSA9IHt9KSB7XG4gICAgdmFyIGhhc0V4cGlyYXRpb25UaW1lID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGJvZHksICdleHBpcmF0aW9uX3RpbWUnKTtcbiAgICBpZiAoIWhhc0V4cGlyYXRpb25UaW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBleHBpcmF0aW9uVGltZVBhcmFtID0gYm9keVsnZXhwaXJhdGlvbl90aW1lJ107XG4gICAgdmFyIGV4cGlyYXRpb25UaW1lO1xuICAgIGlmICh0eXBlb2YgZXhwaXJhdGlvblRpbWVQYXJhbSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGV4cGlyYXRpb25UaW1lID0gbmV3IERhdGUoZXhwaXJhdGlvblRpbWVQYXJhbSAqIDEwMDApO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cGlyYXRpb25UaW1lUGFyYW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICBleHBpcmF0aW9uVGltZSA9IG5ldyBEYXRlKGV4cGlyYXRpb25UaW1lUGFyYW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLlBVU0hfTUlTQ09ORklHVVJFRCxcbiAgICAgICAgYm9keVsnZXhwaXJhdGlvbl90aW1lJ10gKyAnIGlzIG5vdCB2YWxpZCB0aW1lLidcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIENoZWNrIGV4cGlyYXRpb25UaW1lIGlzIHZhbGlkIG9yIG5vdCwgaWYgaXQgaXMgbm90IHZhbGlkLCBleHBpcmF0aW9uVGltZSBpcyBOYU5cbiAgICBpZiAoIWlzRmluaXRlKGV4cGlyYXRpb25UaW1lKSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5QVVNIX01JU0NPTkZJR1VSRUQsXG4gICAgICAgIGJvZHlbJ2V4cGlyYXRpb25fdGltZSddICsgJyBpcyBub3QgdmFsaWQgdGltZS4nXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZXhwaXJhdGlvblRpbWUudmFsdWVPZigpO1xuICB9XG5cbiAgc3RhdGljIGdldEV4cGlyYXRpb25JbnRlcnZhbChib2R5ID0ge30pIHtcbiAgICBjb25zdCBoYXNFeHBpcmF0aW9uSW50ZXJ2YWwgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYm9keSwgJ2V4cGlyYXRpb25faW50ZXJ2YWwnKTtcbiAgICBpZiAoIWhhc0V4cGlyYXRpb25JbnRlcnZhbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBleHBpcmF0aW9uSW50ZXJ2YWxQYXJhbSA9IGJvZHlbJ2V4cGlyYXRpb25faW50ZXJ2YWwnXTtcbiAgICBpZiAodHlwZW9mIGV4cGlyYXRpb25JbnRlcnZhbFBhcmFtICE9PSAnbnVtYmVyJyB8fCBleHBpcmF0aW9uSW50ZXJ2YWxQYXJhbSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLlBVU0hfTUlTQ09ORklHVVJFRCxcbiAgICAgICAgYGV4cGlyYXRpb25faW50ZXJ2YWwgbXVzdCBiZSBhIG51bWJlciBncmVhdGVyIHRoYW4gMGBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBleHBpcmF0aW9uSW50ZXJ2YWxQYXJhbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcHVzaCB0aW1lIGZyb20gdGhlIHJlcXVlc3QgYm9keS5cbiAgICogQHBhcmFtIHtPYmplY3R9IHJlcXVlc3QgQSByZXF1ZXN0IG9iamVjdFxuICAgKiBAcmV0dXJucyB7TnVtYmVyfHVuZGVmaW5lZH0gVGhlIHB1c2ggdGltZSBpZiBpdCBleGlzdHMgaW4gdGhlIHJlcXVlc3RcbiAgICovXG4gIHN0YXRpYyBnZXRQdXNoVGltZShib2R5ID0ge30pIHtcbiAgICB2YXIgaGFzUHVzaFRpbWUgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYm9keSwgJ3B1c2hfdGltZScpO1xuICAgIGlmICghaGFzUHVzaFRpbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHB1c2hUaW1lUGFyYW0gPSBib2R5WydwdXNoX3RpbWUnXTtcbiAgICB2YXIgZGF0ZTtcbiAgICB2YXIgaXNMb2NhbFRpbWUgPSB0cnVlO1xuXG4gICAgaWYgKHR5cGVvZiBwdXNoVGltZVBhcmFtID09PSAnbnVtYmVyJykge1xuICAgICAgZGF0ZSA9IG5ldyBEYXRlKHB1c2hUaW1lUGFyYW0gKiAxMDAwKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwdXNoVGltZVBhcmFtID09PSAnc3RyaW5nJykge1xuICAgICAgaXNMb2NhbFRpbWUgPSAhUHVzaENvbnRyb2xsZXIucHVzaFRpbWVIYXNUaW1lem9uZUNvbXBvbmVudChwdXNoVGltZVBhcmFtKTtcbiAgICAgIGRhdGUgPSBuZXcgRGF0ZShwdXNoVGltZVBhcmFtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5QVVNIX01JU0NPTkZJR1VSRUQsXG4gICAgICAgIGJvZHlbJ3B1c2hfdGltZSddICsgJyBpcyBub3QgdmFsaWQgdGltZS4nXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBDaGVjayBwdXNoVGltZSBpcyB2YWxpZCBvciBub3QsIGlmIGl0IGlzIG5vdCB2YWxpZCwgcHVzaFRpbWUgaXMgTmFOXG4gICAgaWYgKCFpc0Zpbml0ZShkYXRlKSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5QVVNIX01JU0NPTkZJR1VSRUQsXG4gICAgICAgIGJvZHlbJ3B1c2hfdGltZSddICsgJyBpcyBub3QgdmFsaWQgdGltZS4nXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkYXRlLFxuICAgICAgaXNMb2NhbFRpbWUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBJU084NjAxIGZvcm1hdHRlZCBkYXRlIGNvbnRhaW5zIGEgdGltZXpvbmUgY29tcG9uZW50XG4gICAqIEBwYXJhbSBwdXNoVGltZVBhcmFtIHtzdHJpbmd9XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIHB1c2hUaW1lSGFzVGltZXpvbmVDb21wb25lbnQocHVzaFRpbWVQYXJhbTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgb2Zmc2V0UGF0dGVybiA9IC8oLispKFsrLV0pXFxkXFxkOlxcZFxcZCQvO1xuICAgIHJldHVybiAoXG4gICAgICBwdXNoVGltZVBhcmFtLmluZGV4T2YoJ1onKSA9PT0gcHVzaFRpbWVQYXJhbS5sZW5ndGggLSAxIHx8IG9mZnNldFBhdHRlcm4udGVzdChwdXNoVGltZVBhcmFtKSAvLyAyMDA3LTA0LTA1VDEyOjMwWlxuICAgICk7IC8vIDIwMDctMDQtMDVUMTI6MzAuMDAwKzAyOjAwLCAyMDA3LTA0LTA1VDEyOjMwLjAwMC0wMjowMFxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgZGF0ZSB0byBJU08gZm9ybWF0IGluIFVUQyB0aW1lIGFuZCBzdHJpcHMgdGhlIHRpbWV6b25lIGlmIGBpc0xvY2FsVGltZWAgaXMgdHJ1ZVxuICAgKiBAcGFyYW0gZGF0ZSB7RGF0ZX1cbiAgICogQHBhcmFtIGlzTG9jYWxUaW1lIHtib29sZWFufVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgc3RhdGljIGZvcm1hdFB1c2hUaW1lKHsgZGF0ZSwgaXNMb2NhbFRpbWUgfTogeyBkYXRlOiBEYXRlLCBpc0xvY2FsVGltZTogYm9vbGVhbiB9KSB7XG4gICAgaWYgKGlzTG9jYWxUaW1lKSB7XG4gICAgICAvLyBTdHJpcCAnWidcbiAgICAgIGNvbnN0IGlzb1N0cmluZyA9IGRhdGUudG9JU09TdHJpbmcoKTtcbiAgICAgIHJldHVybiBpc29TdHJpbmcuc3Vic3RyaW5nKDAsIGlzb1N0cmluZy5pbmRleE9mKCdaJykpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFB1c2hDb250cm9sbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJ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