parse-server 6.0.0-alpha.9 → 6.0.0-beta.1

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 (192) hide show
  1. package/LICENSE +167 -25
  2. package/NOTICE +10 -0
  3. package/README.md +57 -33
  4. package/lib/AccountLockout.js +11 -26
  5. package/lib/Adapters/AdapterLoader.js +8 -14
  6. package/lib/Adapters/Analytics/AnalyticsAdapter.js +2 -8
  7. package/lib/Adapters/Auth/AuthAdapter.js +7 -16
  8. package/lib/Adapters/Auth/OAuth1Client.js +32 -57
  9. package/lib/Adapters/Auth/apple.js +6 -22
  10. package/lib/Adapters/Auth/facebook.js +7 -37
  11. package/lib/Adapters/Auth/gcenter.js +8 -37
  12. package/lib/Adapters/Auth/github.js +7 -10
  13. package/lib/Adapters/Auth/google.js +11 -34
  14. package/lib/Adapters/Auth/gpgames.js +5 -8
  15. package/lib/Adapters/Auth/httpsRequest.js +1 -7
  16. package/lib/Adapters/Auth/index.js +20 -65
  17. package/lib/Adapters/Auth/instagram.js +5 -9
  18. package/lib/Adapters/Auth/janraincapture.js +8 -12
  19. package/lib/Adapters/Auth/janrainengage.js +7 -11
  20. package/lib/Adapters/Auth/keycloak.js +5 -19
  21. package/lib/Adapters/Auth/ldap.js +1 -15
  22. package/lib/Adapters/Auth/line.js +7 -10
  23. package/lib/Adapters/Auth/linkedin.js +7 -12
  24. package/lib/Adapters/Auth/meetup.js +7 -10
  25. package/lib/Adapters/Auth/microsoft.js +7 -10
  26. package/lib/Adapters/Auth/oauth2.js +6 -18
  27. package/lib/Adapters/Auth/phantauth.js +8 -10
  28. package/lib/Adapters/Auth/qq.js +7 -13
  29. package/lib/Adapters/Auth/spotify.js +7 -14
  30. package/lib/Adapters/Auth/twitter.js +5 -15
  31. package/lib/Adapters/Auth/vkontakte.js +9 -15
  32. package/lib/Adapters/Auth/wechat.js +7 -10
  33. package/lib/Adapters/Auth/weibo.js +7 -11
  34. package/lib/Adapters/Cache/CacheAdapter.js +4 -12
  35. package/lib/Adapters/Cache/InMemoryCache.js +5 -19
  36. package/lib/Adapters/Cache/InMemoryCacheAdapter.js +1 -11
  37. package/lib/Adapters/Cache/LRUCache.js +1 -11
  38. package/lib/Adapters/Cache/NullCacheAdapter.js +1 -8
  39. package/lib/Adapters/Cache/RedisCacheAdapter.js +3 -30
  40. package/lib/Adapters/Cache/SchemaCache.js +1 -6
  41. package/lib/Adapters/Email/MailAdapter.js +2 -7
  42. package/lib/Adapters/Files/FilesAdapter.js +7 -21
  43. package/lib/Adapters/Files/GridFSBucketAdapter.js +6 -44
  44. package/lib/Adapters/Files/GridStoreAdapter.js +1 -1
  45. package/lib/Adapters/Logger/LoggerAdapter.js +2 -11
  46. package/lib/Adapters/Logger/WinstonLogger.js +3 -30
  47. package/lib/Adapters/Logger/WinstonLoggerAdapter.js +5 -16
  48. package/lib/Adapters/MessageQueue/EventEmitterMQ.js +3 -20
  49. package/lib/Adapters/PubSub/EventEmitterPubSub.js +1 -16
  50. package/lib/Adapters/PubSub/PubSubAdapter.js +2 -9
  51. package/lib/Adapters/PubSub/RedisPubSub.js +12 -7
  52. package/lib/Adapters/Push/PushAdapter.js +2 -8
  53. package/lib/Adapters/Storage/Mongo/MongoCollection.js +12 -37
  54. package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +26 -79
  55. package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +78 -209
  56. package/lib/Adapters/Storage/Mongo/MongoTransform.js +82 -371
  57. package/lib/Adapters/Storage/Postgres/PostgresClient.js +1 -13
  58. package/lib/Adapters/Storage/Postgres/PostgresConfigParser.js +1 -20
  59. package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +119 -446
  60. package/lib/Adapters/Storage/Postgres/sql/index.js +4 -7
  61. package/lib/Adapters/Storage/StorageAdapter.js +1 -1
  62. package/lib/Adapters/WebSocketServer/WSAdapter.js +3 -12
  63. package/lib/Adapters/WebSocketServer/WSSAdapter.js +7 -12
  64. package/lib/Auth.js +68 -121
  65. package/lib/ClientSDK.js +3 -11
  66. package/lib/Config.js +73 -115
  67. package/lib/Controllers/AdaptableController.js +6 -18
  68. package/lib/Controllers/AnalyticsController.js +1 -9
  69. package/lib/Controllers/CacheController.js +3 -23
  70. package/lib/Controllers/DatabaseController.js +171 -364
  71. package/lib/Controllers/FilesController.js +5 -34
  72. package/lib/Controllers/HooksController.js +1 -51
  73. package/lib/Controllers/LiveQueryController.js +4 -23
  74. package/lib/Controllers/LoggerController.js +15 -54
  75. package/lib/Controllers/ParseGraphQLController.js +49 -104
  76. package/lib/Controllers/PushController.js +20 -59
  77. package/lib/Controllers/SchemaController.js +162 -348
  78. package/lib/Controllers/UserController.js +17 -78
  79. package/lib/Controllers/index.js +19 -68
  80. package/lib/Controllers/types.js +1 -1
  81. package/lib/Deprecator/Deprecations.js +1 -1
  82. package/lib/Deprecator/Deprecator.js +9 -18
  83. package/lib/GraphQL/ParseGraphQLSchema.js +16 -100
  84. package/lib/GraphQL/ParseGraphQLServer.js +2 -29
  85. package/lib/GraphQL/helpers/objectsMutations.js +2 -12
  86. package/lib/GraphQL/helpers/objectsQueries.js +18 -76
  87. package/lib/GraphQL/loaders/defaultGraphQLMutations.js +1 -9
  88. package/lib/GraphQL/loaders/defaultGraphQLQueries.js +1 -8
  89. package/lib/GraphQL/loaders/defaultGraphQLTypes.js +9 -115
  90. package/lib/GraphQL/loaders/defaultRelaySchema.js +6 -18
  91. package/lib/GraphQL/loaders/filesMutations.js +2 -19
  92. package/lib/GraphQL/loaders/functionsMutations.js +6 -17
  93. package/lib/GraphQL/loaders/parseClassMutations.js +6 -44
  94. package/lib/GraphQL/loaders/parseClassQueries.js +1 -26
  95. package/lib/GraphQL/loaders/parseClassTypes.js +10 -64
  96. package/lib/GraphQL/loaders/schemaDirectives.js +1 -17
  97. package/lib/GraphQL/loaders/schemaMutations.js +1 -20
  98. package/lib/GraphQL/loaders/schemaQueries.js +1 -14
  99. package/lib/GraphQL/loaders/schemaTypes.js +2 -6
  100. package/lib/GraphQL/loaders/usersMutations.js +6 -28
  101. package/lib/GraphQL/loaders/usersQueries.js +4 -26
  102. package/lib/GraphQL/parseGraphQLUtils.js +6 -19
  103. package/lib/GraphQL/transformers/className.js +1 -4
  104. package/lib/GraphQL/transformers/constraintType.js +1 -20
  105. package/lib/GraphQL/transformers/inputType.js +1 -20
  106. package/lib/GraphQL/transformers/mutation.js +6 -51
  107. package/lib/GraphQL/transformers/outputType.js +1 -20
  108. package/lib/GraphQL/transformers/query.js +6 -42
  109. package/lib/GraphQL/transformers/schemaFields.js +7 -34
  110. package/lib/KeyPromiseQueue.js +1 -12
  111. package/lib/LiveQuery/Client.js +1 -25
  112. package/lib/LiveQuery/Id.js +1 -7
  113. package/lib/LiveQuery/ParseCloudCodePublisher.js +13 -19
  114. package/lib/LiveQuery/ParseLiveQueryServer.js +111 -307
  115. package/lib/LiveQuery/ParsePubSub.js +1 -12
  116. package/lib/LiveQuery/ParseWebSocketServer.js +4 -26
  117. package/lib/LiveQuery/QueryTools.js +14 -116
  118. package/lib/LiveQuery/RequestSchema.js +1 -1
  119. package/lib/LiveQuery/SessionTokenCache.js +1 -17
  120. package/lib/LiveQuery/Subscription.js +4 -18
  121. package/lib/LiveQuery/equalObjects.js +2 -14
  122. package/lib/Options/Definitions.js +88 -8
  123. package/lib/Options/docs.js +25 -3
  124. package/lib/Options/index.js +4 -12
  125. package/lib/Options/parsers.js +1 -18
  126. package/lib/Page.js +1 -9
  127. package/lib/ParseMessageQueue.js +1 -10
  128. package/lib/ParseServer.js +175 -207
  129. package/lib/ParseServerRESTController.js +6 -33
  130. package/lib/PromiseRouter.js +16 -50
  131. package/lib/Push/PushQueue.js +3 -15
  132. package/lib/Push/PushWorker.js +7 -32
  133. package/lib/Push/utils.js +9 -38
  134. package/lib/RestQuery.js +105 -242
  135. package/lib/RestWrite.js +224 -389
  136. package/lib/Routers/AggregateRouter.js +14 -51
  137. package/lib/Routers/AnalyticsRouter.js +2 -8
  138. package/lib/Routers/AudiencesRouter.js +1 -15
  139. package/lib/Routers/ClassesRouter.js +3 -53
  140. package/lib/Routers/CloudCodeRouter.js +1 -19
  141. package/lib/Routers/FeaturesRouter.js +1 -10
  142. package/lib/Routers/FilesRouter.js +29 -76
  143. package/lib/Routers/FunctionsRouter.js +5 -28
  144. package/lib/Routers/GlobalConfigRouter.js +4 -18
  145. package/lib/Routers/GraphQLRouter.js +1 -14
  146. package/lib/Routers/HooksRouter.js +1 -29
  147. package/lib/Routers/IAPValidationRouter.js +6 -29
  148. package/lib/Routers/InstallationsRouter.js +2 -12
  149. package/lib/Routers/LogsRouter.js +4 -16
  150. package/lib/Routers/PagesRouter.js +69 -129
  151. package/lib/Routers/PublicAPIRouter.js +3 -62
  152. package/lib/Routers/PurgeRouter.js +1 -15
  153. package/lib/Routers/PushRouter.js +2 -18
  154. package/lib/Routers/RolesRouter.js +1 -7
  155. package/lib/Routers/SchemasRouter.js +4 -34
  156. package/lib/Routers/SecurityRouter.js +1 -12
  157. package/lib/Routers/SessionsRouter.js +3 -19
  158. package/lib/Routers/UsersRouter.js +48 -135
  159. package/lib/SchemaMigrations/DefinedSchemas.js +56 -115
  160. package/lib/SchemaMigrations/Migrations.js +2 -8
  161. package/lib/Security/Check.js +8 -16
  162. package/lib/Security/CheckGroup.js +4 -11
  163. package/lib/Security/CheckGroups/CheckGroupDatabase.js +8 -18
  164. package/lib/Security/CheckGroups/CheckGroupServerConfig.js +5 -15
  165. package/lib/Security/CheckGroups/CheckGroups.js +1 -4
  166. package/lib/Security/CheckRunner.js +22 -41
  167. package/lib/StatusHandler.js +12 -69
  168. package/lib/TestUtils.js +1 -6
  169. package/lib/Utils.js +27 -66
  170. package/lib/batch.js +17 -28
  171. package/lib/cache.js +1 -3
  172. package/lib/cli/definitions/parse-live-query-server.js +1 -3
  173. package/lib/cli/definitions/parse-server.js +1 -3
  174. package/lib/cli/parse-live-query-server.js +1 -6
  175. package/lib/cli/parse-server.js +11 -21
  176. package/lib/cli/utils/commander.js +13 -51
  177. package/lib/cli/utils/runner.js +1 -14
  178. package/lib/cloud-code/Parse.Cloud.js +71 -81
  179. package/lib/cryptoUtils.js +11 -19
  180. package/lib/defaults.js +2 -14
  181. package/lib/deprecated.js +1 -2
  182. package/lib/index.js +16 -34
  183. package/lib/logger.js +6 -13
  184. package/lib/middlewares.js +166 -148
  185. package/lib/password.js +6 -10
  186. package/lib/request.js +8 -42
  187. package/lib/requiredParameter.js +1 -3
  188. package/lib/rest.js +25 -47
  189. package/lib/triggers.js +54 -252
  190. package/lib/vendor/mongodbUrl.js +129 -310
  191. package/package.json +13 -10
  192. package/PATENTS +0 -37
@@ -3,13 +3,11 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.loadAdapter = loadAdapter;
7
6
  exports.default = void 0;
8
-
7
+ exports.loadAdapter = loadAdapter;
9
8
  /**
10
9
  * @module AdapterLoader
11
10
  */
12
-
13
11
  /**
14
12
  * @static
15
13
  * Attempt to load an adapter or fallback to the default.
@@ -22,9 +20,8 @@ function loadAdapter(adapter, defaultAdapter, options) {
22
20
  if (!adapter) {
23
21
  if (!defaultAdapter) {
24
22
  return options;
25
- } // Load from the default adapter when no adapter is set
26
-
27
-
23
+ }
24
+ // Load from the default adapter when no adapter is set
28
25
  return loadAdapter(defaultAdapter, undefined, options);
29
26
  } else if (typeof adapter === 'function') {
30
27
  try {
@@ -39,12 +36,11 @@ function loadAdapter(adapter, defaultAdapter, options) {
39
36
  }
40
37
  } else if (typeof adapter === 'string') {
41
38
  /* eslint-disable */
42
- adapter = require(adapter); // If it's define as a module, get the default
43
-
39
+ adapter = require(adapter);
40
+ // If it's define as a module, get the default
44
41
  if (adapter.default) {
45
42
  adapter = adapter.default;
46
43
  }
47
-
48
44
  return loadAdapter(adapter, undefined, options);
49
45
  } else if (adapter.module) {
50
46
  return loadAdapter(adapter.module, undefined, adapter.options);
@@ -52,12 +48,10 @@ function loadAdapter(adapter, defaultAdapter, options) {
52
48
  return loadAdapter(adapter.class, undefined, adapter.options);
53
49
  } else if (adapter.adapter) {
54
50
  return loadAdapter(adapter.adapter, undefined, adapter.options);
55
- } // return the adapter as provided
56
-
57
-
51
+ }
52
+ // return the adapter as provided
58
53
  return adapter;
59
54
  }
60
-
61
55
  var _default = loadAdapter;
62
56
  exports.default = _default;
63
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9BZGFwdGVycy9BZGFwdGVyTG9hZGVyLmpzIl0sIm5hbWVzIjpbImxvYWRBZGFwdGVyIiwiYWRhcHRlciIsImRlZmF1bHRBZGFwdGVyIiwib3B0aW9ucyIsInVuZGVmaW5lZCIsImUiLCJuYW1lIiwiQWRhcHRlciIsInJlcXVpcmUiLCJkZWZhdWx0IiwibW9kdWxlIiwiY2xhc3MiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQSxXQUFULENBQXdCQyxPQUF4QixFQUFpQ0MsY0FBakMsRUFBaURDLE9BQWpELEVBQTZEO0FBQ2xFLE1BQUksQ0FBQ0YsT0FBTCxFQUFjO0FBQ1osUUFBSSxDQUFDQyxjQUFMLEVBQXFCO0FBQ25CLGFBQU9DLE9BQVA7QUFDRCxLQUhXLENBSVo7OztBQUNBLFdBQU9ILFdBQVcsQ0FBQ0UsY0FBRCxFQUFpQkUsU0FBakIsRUFBNEJELE9BQTVCLENBQWxCO0FBQ0QsR0FORCxNQU1PLElBQUksT0FBT0YsT0FBUCxLQUFtQixVQUF2QixFQUFtQztBQUN4QyxRQUFJO0FBQ0YsYUFBT0EsT0FBTyxDQUFDRSxPQUFELENBQWQ7QUFDRCxLQUZELENBRUUsT0FBT0UsQ0FBUCxFQUFVO0FBQ1YsVUFBSUEsQ0FBQyxDQUFDQyxJQUFGLEtBQVcsV0FBZixFQUE0QjtBQUMxQixZQUFJQyxPQUFPLEdBQUdOLE9BQWQ7QUFDQSxlQUFPLElBQUlNLE9BQUosQ0FBWUosT0FBWixDQUFQO0FBQ0QsT0FIRCxNQUdPO0FBQ0wsY0FBTUUsQ0FBTjtBQUNEO0FBQ0Y7QUFDRixHQVhNLE1BV0EsSUFBSSxPQUFPSixPQUFQLEtBQW1CLFFBQXZCLEVBQWlDO0FBQ3RDO0FBQ0FBLElBQUFBLE9BQU8sR0FBR08sT0FBTyxDQUFDUCxPQUFELENBQWpCLENBRnNDLENBR3RDOztBQUNBLFFBQUlBLE9BQU8sQ0FBQ1EsT0FBWixFQUFxQjtBQUNuQlIsTUFBQUEsT0FBTyxHQUFHQSxPQUFPLENBQUNRLE9BQWxCO0FBQ0Q7O0FBQ0QsV0FBT1QsV0FBVyxDQUFDQyxPQUFELEVBQVVHLFNBQVYsRUFBcUJELE9BQXJCLENBQWxCO0FBQ0QsR0FSTSxNQVFBLElBQUlGLE9BQU8sQ0FBQ1MsTUFBWixFQUFvQjtBQUN6QixXQUFPVixXQUFXLENBQUNDLE9BQU8sQ0FBQ1MsTUFBVCxFQUFpQk4sU0FBakIsRUFBNEJILE9BQU8sQ0FBQ0UsT0FBcEMsQ0FBbEI7QUFDRCxHQUZNLE1BRUEsSUFBSUYsT0FBTyxDQUFDVSxLQUFaLEVBQW1CO0FBQ3hCLFdBQU9YLFdBQVcsQ0FBQ0MsT0FBTyxDQUFDVSxLQUFULEVBQWdCUCxTQUFoQixFQUEyQkgsT0FBTyxDQUFDRSxPQUFuQyxDQUFsQjtBQUNELEdBRk0sTUFFQSxJQUFJRixPQUFPLENBQUNBLE9BQVosRUFBcUI7QUFDMUIsV0FBT0QsV0FBVyxDQUFDQyxPQUFPLENBQUNBLE9BQVQsRUFBa0JHLFNBQWxCLEVBQTZCSCxPQUFPLENBQUNFLE9BQXJDLENBQWxCO0FBQ0QsR0FoQ2lFLENBaUNsRTs7O0FBQ0EsU0FBT0YsT0FBUDtBQUNEOztlQUVjRCxXIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIEFkYXB0ZXJMb2FkZXJcbiAqL1xuLyoqXG4gKiBAc3RhdGljXG4gKiBBdHRlbXB0IHRvIGxvYWQgYW4gYWRhcHRlciBvciBmYWxsYmFjayB0byB0aGUgZGVmYXVsdC5cbiAqIEBwYXJhbSB7QWRhcHRlcn0gYWRhcHRlciBhbiBhZGFwdGVyXG4gKiBAcGFyYW0ge0FkYXB0ZXJ9IGRlZmF1bHRBZGFwdGVyIHRoZSBkZWZhdWx0IGFkYXB0ZXIgdG8gbG9hZFxuICogQHBhcmFtIHthbnl9IG9wdGlvbnMgb3B0aW9ucyB0byBwYXNzIHRvIHRoZSBjb250c3RydWN0b3JcbiAqIEByZXR1cm5zIHtPYmplY3R9IHRoZSBsb2FkZWQgYWRhcHRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFkYXB0ZXI8VD4oYWRhcHRlciwgZGVmYXVsdEFkYXB0ZXIsIG9wdGlvbnMpOiBUIHtcbiAgaWYgKCFhZGFwdGVyKSB7XG4gICAgaWYgKCFkZWZhdWx0QWRhcHRlcikge1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuICAgIC8vIExvYWQgZnJvbSB0aGUgZGVmYXVsdCBhZGFwdGVyIHdoZW4gbm8gYWRhcHRlciBpcyBzZXRcbiAgICByZXR1cm4gbG9hZEFkYXB0ZXIoZGVmYXVsdEFkYXB0ZXIsIHVuZGVmaW5lZCwgb3B0aW9ucyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFkYXB0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGFkYXB0ZXIob3B0aW9ucyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSA9PT0gJ1R5cGVFcnJvcicpIHtcbiAgICAgICAgdmFyIEFkYXB0ZXIgPSBhZGFwdGVyO1xuICAgICAgICByZXR1cm4gbmV3IEFkYXB0ZXIob3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgYWRhcHRlciA9PT0gJ3N0cmluZycpIHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIGFkYXB0ZXIgPSByZXF1aXJlKGFkYXB0ZXIpO1xuICAgIC8vIElmIGl0J3MgZGVmaW5lIGFzIGEgbW9kdWxlLCBnZXQgdGhlIGRlZmF1bHRcbiAgICBpZiAoYWRhcHRlci5kZWZhdWx0KSB7XG4gICAgICBhZGFwdGVyID0gYWRhcHRlci5kZWZhdWx0O1xuICAgIH1cbiAgICByZXR1cm4gbG9hZEFkYXB0ZXIoYWRhcHRlciwgdW5kZWZpbmVkLCBvcHRpb25zKTtcbiAgfSBlbHNlIGlmIChhZGFwdGVyLm1vZHVsZSkge1xuICAgIHJldHVybiBsb2FkQWRhcHRlcihhZGFwdGVyLm1vZHVsZSwgdW5kZWZpbmVkLCBhZGFwdGVyLm9wdGlvbnMpO1xuICB9IGVsc2UgaWYgKGFkYXB0ZXIuY2xhc3MpIHtcbiAgICByZXR1cm4gbG9hZEFkYXB0ZXIoYWRhcHRlci5jbGFzcywgdW5kZWZpbmVkLCBhZGFwdGVyLm9wdGlvbnMpO1xuICB9IGVsc2UgaWYgKGFkYXB0ZXIuYWRhcHRlcikge1xuICAgIHJldHVybiBsb2FkQWRhcHRlcihhZGFwdGVyLmFkYXB0ZXIsIHVuZGVmaW5lZCwgYWRhcHRlci5vcHRpb25zKTtcbiAgfVxuICAvLyByZXR1cm4gdGhlIGFkYXB0ZXIgYXMgcHJvdmlkZWRcbiAgcmV0dXJuIGFkYXB0ZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxvYWRBZGFwdGVyO1xuIl19
57
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2FkQWRhcHRlciIsImFkYXB0ZXIiLCJkZWZhdWx0QWRhcHRlciIsIm9wdGlvbnMiLCJ1bmRlZmluZWQiLCJlIiwibmFtZSIsIkFkYXB0ZXIiLCJyZXF1aXJlIiwiZGVmYXVsdCIsIm1vZHVsZSIsImNsYXNzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0FkYXB0ZXJzL0FkYXB0ZXJMb2FkZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIEFkYXB0ZXJMb2FkZXJcbiAqL1xuLyoqXG4gKiBAc3RhdGljXG4gKiBBdHRlbXB0IHRvIGxvYWQgYW4gYWRhcHRlciBvciBmYWxsYmFjayB0byB0aGUgZGVmYXVsdC5cbiAqIEBwYXJhbSB7QWRhcHRlcn0gYWRhcHRlciBhbiBhZGFwdGVyXG4gKiBAcGFyYW0ge0FkYXB0ZXJ9IGRlZmF1bHRBZGFwdGVyIHRoZSBkZWZhdWx0IGFkYXB0ZXIgdG8gbG9hZFxuICogQHBhcmFtIHthbnl9IG9wdGlvbnMgb3B0aW9ucyB0byBwYXNzIHRvIHRoZSBjb250c3RydWN0b3JcbiAqIEByZXR1cm5zIHtPYmplY3R9IHRoZSBsb2FkZWQgYWRhcHRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFkYXB0ZXI8VD4oYWRhcHRlciwgZGVmYXVsdEFkYXB0ZXIsIG9wdGlvbnMpOiBUIHtcbiAgaWYgKCFhZGFwdGVyKSB7XG4gICAgaWYgKCFkZWZhdWx0QWRhcHRlcikge1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuICAgIC8vIExvYWQgZnJvbSB0aGUgZGVmYXVsdCBhZGFwdGVyIHdoZW4gbm8gYWRhcHRlciBpcyBzZXRcbiAgICByZXR1cm4gbG9hZEFkYXB0ZXIoZGVmYXVsdEFkYXB0ZXIsIHVuZGVmaW5lZCwgb3B0aW9ucyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFkYXB0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGFkYXB0ZXIob3B0aW9ucyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSA9PT0gJ1R5cGVFcnJvcicpIHtcbiAgICAgICAgdmFyIEFkYXB0ZXIgPSBhZGFwdGVyO1xuICAgICAgICByZXR1cm4gbmV3IEFkYXB0ZXIob3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgYWRhcHRlciA9PT0gJ3N0cmluZycpIHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIGFkYXB0ZXIgPSByZXF1aXJlKGFkYXB0ZXIpO1xuICAgIC8vIElmIGl0J3MgZGVmaW5lIGFzIGEgbW9kdWxlLCBnZXQgdGhlIGRlZmF1bHRcbiAgICBpZiAoYWRhcHRlci5kZWZhdWx0KSB7XG4gICAgICBhZGFwdGVyID0gYWRhcHRlci5kZWZhdWx0O1xuICAgIH1cbiAgICByZXR1cm4gbG9hZEFkYXB0ZXIoYWRhcHRlciwgdW5kZWZpbmVkLCBvcHRpb25zKTtcbiAgfSBlbHNlIGlmIChhZGFwdGVyLm1vZHVsZSkge1xuICAgIHJldHVybiBsb2FkQWRhcHRlcihhZGFwdGVyLm1vZHVsZSwgdW5kZWZpbmVkLCBhZGFwdGVyLm9wdGlvbnMpO1xuICB9IGVsc2UgaWYgKGFkYXB0ZXIuY2xhc3MpIHtcbiAgICByZXR1cm4gbG9hZEFkYXB0ZXIoYWRhcHRlci5jbGFzcywgdW5kZWZpbmVkLCBhZGFwdGVyLm9wdGlvbnMpO1xuICB9IGVsc2UgaWYgKGFkYXB0ZXIuYWRhcHRlcikge1xuICAgIHJldHVybiBsb2FkQWRhcHRlcihhZGFwdGVyLmFkYXB0ZXIsIHVuZGVmaW5lZCwgYWRhcHRlci5vcHRpb25zKTtcbiAgfVxuICAvLyByZXR1cm4gdGhlIGFkYXB0ZXIgYXMgcHJvdmlkZWRcbiAgcmV0dXJuIGFkYXB0ZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxvYWRBZGFwdGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNBLFdBQVcsQ0FBSUMsT0FBTyxFQUFFQyxjQUFjLEVBQUVDLE9BQU8sRUFBSztFQUNsRSxJQUFJLENBQUNGLE9BQU8sRUFBRTtJQUNaLElBQUksQ0FBQ0MsY0FBYyxFQUFFO01BQ25CLE9BQU9DLE9BQU87SUFDaEI7SUFDQTtJQUNBLE9BQU9ILFdBQVcsQ0FBQ0UsY0FBYyxFQUFFRSxTQUFTLEVBQUVELE9BQU8sQ0FBQztFQUN4RCxDQUFDLE1BQU0sSUFBSSxPQUFPRixPQUFPLEtBQUssVUFBVSxFQUFFO0lBQ3hDLElBQUk7TUFDRixPQUFPQSxPQUFPLENBQUNFLE9BQU8sQ0FBQztJQUN6QixDQUFDLENBQUMsT0FBT0UsQ0FBQyxFQUFFO01BQ1YsSUFBSUEsQ0FBQyxDQUFDQyxJQUFJLEtBQUssV0FBVyxFQUFFO1FBQzFCLElBQUlDLE9BQU8sR0FBR04sT0FBTztRQUNyQixPQUFPLElBQUlNLE9BQU8sQ0FBQ0osT0FBTyxDQUFDO01BQzdCLENBQUMsTUFBTTtRQUNMLE1BQU1FLENBQUM7TUFDVDtJQUNGO0VBQ0YsQ0FBQyxNQUFNLElBQUksT0FBT0osT0FBTyxLQUFLLFFBQVEsRUFBRTtJQUN0QztJQUNBQSxPQUFPLEdBQUdPLE9BQU8sQ0FBQ1AsT0FBTyxDQUFDO0lBQzFCO0lBQ0EsSUFBSUEsT0FBTyxDQUFDUSxPQUFPLEVBQUU7TUFDbkJSLE9BQU8sR0FBR0EsT0FBTyxDQUFDUSxPQUFPO0lBQzNCO0lBQ0EsT0FBT1QsV0FBVyxDQUFDQyxPQUFPLEVBQUVHLFNBQVMsRUFBRUQsT0FBTyxDQUFDO0VBQ2pELENBQUMsTUFBTSxJQUFJRixPQUFPLENBQUNTLE1BQU0sRUFBRTtJQUN6QixPQUFPVixXQUFXLENBQUNDLE9BQU8sQ0FBQ1MsTUFBTSxFQUFFTixTQUFTLEVBQUVILE9BQU8sQ0FBQ0UsT0FBTyxDQUFDO0VBQ2hFLENBQUMsTUFBTSxJQUFJRixPQUFPLENBQUNVLEtBQUssRUFBRTtJQUN4QixPQUFPWCxXQUFXLENBQUNDLE9BQU8sQ0FBQ1UsS0FBSyxFQUFFUCxTQUFTLEVBQUVILE9BQU8sQ0FBQ0UsT0FBTyxDQUFDO0VBQy9ELENBQUMsTUFBTSxJQUFJRixPQUFPLENBQUNBLE9BQU8sRUFBRTtJQUMxQixPQUFPRCxXQUFXLENBQUNDLE9BQU8sQ0FBQ0EsT0FBTyxFQUFFRyxTQUFTLEVBQUVILE9BQU8sQ0FBQ0UsT0FBTyxDQUFDO0VBQ2pFO0VBQ0E7RUFDQSxPQUFPRixPQUFPO0FBQ2hCO0FBQUMsZUFFY0QsV0FBVztBQUFBIn0=
@@ -4,13 +4,10 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = exports.AnalyticsAdapter = void 0;
7
-
8
7
  /*eslint no-unused-vars: "off"*/
9
-
10
8
  /**
11
9
  * @module Adapters
12
10
  */
13
-
14
11
  /**
15
12
  * @interface AnalyticsAdapter
16
13
  */
@@ -22,20 +19,17 @@ class AnalyticsAdapter {
22
19
  appOpened(parameters, req) {
23
20
  return Promise.resolve({});
24
21
  }
22
+
25
23
  /**
26
24
  @param {String} eventName: the name of the custom eventName
27
25
  @param {any} parameters: the analytics request body, analytics info will be in the dimensions property
28
26
  @param {Request} req: the original http request
29
27
  */
30
-
31
-
32
28
  trackEvent(eventName, parameters, req) {
33
29
  return Promise.resolve({});
34
30
  }
35
-
36
31
  }
37
-
38
32
  exports.AnalyticsAdapter = AnalyticsAdapter;
39
33
  var _default = AnalyticsAdapter;
40
34
  exports.default = _default;
41
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BbmFseXRpY3MvQW5hbHl0aWNzQWRhcHRlci5qcyJdLCJuYW1lcyI6WyJBbmFseXRpY3NBZGFwdGVyIiwiYXBwT3BlbmVkIiwicGFyYW1ldGVycyIsInJlcSIsIlByb21pc2UiLCJyZXNvbHZlIiwidHJhY2tFdmVudCIsImV2ZW50TmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDTyxNQUFNQSxnQkFBTixDQUF1QjtBQUM1QjtBQUNGO0FBQ0E7QUFDQTtBQUNFQyxFQUFBQSxTQUFTLENBQUNDLFVBQUQsRUFBYUMsR0FBYixFQUFrQjtBQUN6QixXQUFPQyxPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsRUFBaEIsQ0FBUDtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0VDLEVBQUFBLFVBQVUsQ0FBQ0MsU0FBRCxFQUFZTCxVQUFaLEVBQXdCQyxHQUF4QixFQUE2QjtBQUNyQyxXQUFPQyxPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsRUFBaEIsQ0FBUDtBQUNEOztBQWhCMkI7OztlQW1CZkwsZ0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKmVzbGludCBuby11bnVzZWQtdmFyczogXCJvZmZcIiovXG4vKipcbiAqIEBtb2R1bGUgQWRhcHRlcnNcbiAqL1xuLyoqXG4gKiBAaW50ZXJmYWNlIEFuYWx5dGljc0FkYXB0ZXJcbiAqL1xuZXhwb3J0IGNsYXNzIEFuYWx5dGljc0FkYXB0ZXIge1xuICAvKipcbiAgQHBhcmFtIHthbnl9IHBhcmFtZXRlcnM6IHRoZSBhbmFseXRpY3MgcmVxdWVzdCBib2R5LCBhbmFseXRpY3MgaW5mbyB3aWxsIGJlIGluIHRoZSBkaW1lbnNpb25zIHByb3BlcnR5XG4gIEBwYXJhbSB7UmVxdWVzdH0gcmVxOiB0aGUgb3JpZ2luYWwgaHR0cCByZXF1ZXN0XG4gICAqL1xuICBhcHBPcGVuZWQocGFyYW1ldGVycywgcmVxKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gIH1cblxuICAvKipcbiAgQHBhcmFtIHtTdHJpbmd9IGV2ZW50TmFtZTogdGhlIG5hbWUgb2YgdGhlIGN1c3RvbSBldmVudE5hbWVcbiAgQHBhcmFtIHthbnl9IHBhcmFtZXRlcnM6IHRoZSBhbmFseXRpY3MgcmVxdWVzdCBib2R5LCBhbmFseXRpY3MgaW5mbyB3aWxsIGJlIGluIHRoZSBkaW1lbnNpb25zIHByb3BlcnR5XG4gIEBwYXJhbSB7UmVxdWVzdH0gcmVxOiB0aGUgb3JpZ2luYWwgaHR0cCByZXF1ZXN0XG4gICAqL1xuICB0cmFja0V2ZW50KGV2ZW50TmFtZSwgcGFyYW1ldGVycywgcmVxKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQW5hbHl0aWNzQWRhcHRlcjtcbiJdfQ==
35
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBbmFseXRpY3NBZGFwdGVyIiwiYXBwT3BlbmVkIiwicGFyYW1ldGVycyIsInJlcSIsIlByb21pc2UiLCJyZXNvbHZlIiwidHJhY2tFdmVudCIsImV2ZW50TmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BbmFseXRpY3MvQW5hbHl0aWNzQWRhcHRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKmVzbGludCBuby11bnVzZWQtdmFyczogXCJvZmZcIiovXG4vKipcbiAqIEBtb2R1bGUgQWRhcHRlcnNcbiAqL1xuLyoqXG4gKiBAaW50ZXJmYWNlIEFuYWx5dGljc0FkYXB0ZXJcbiAqL1xuZXhwb3J0IGNsYXNzIEFuYWx5dGljc0FkYXB0ZXIge1xuICAvKipcbiAgQHBhcmFtIHthbnl9IHBhcmFtZXRlcnM6IHRoZSBhbmFseXRpY3MgcmVxdWVzdCBib2R5LCBhbmFseXRpY3MgaW5mbyB3aWxsIGJlIGluIHRoZSBkaW1lbnNpb25zIHByb3BlcnR5XG4gIEBwYXJhbSB7UmVxdWVzdH0gcmVxOiB0aGUgb3JpZ2luYWwgaHR0cCByZXF1ZXN0XG4gICAqL1xuICBhcHBPcGVuZWQocGFyYW1ldGVycywgcmVxKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gIH1cblxuICAvKipcbiAgQHBhcmFtIHtTdHJpbmd9IGV2ZW50TmFtZTogdGhlIG5hbWUgb2YgdGhlIGN1c3RvbSBldmVudE5hbWVcbiAgQHBhcmFtIHthbnl9IHBhcmFtZXRlcnM6IHRoZSBhbmFseXRpY3MgcmVxdWVzdCBib2R5LCBhbmFseXRpY3MgaW5mbyB3aWxsIGJlIGluIHRoZSBkaW1lbnNpb25zIHByb3BlcnR5XG4gIEBwYXJhbSB7UmVxdWVzdH0gcmVxOiB0aGUgb3JpZ2luYWwgaHR0cCByZXF1ZXN0XG4gICAqL1xuICB0cmFja0V2ZW50KGV2ZW50TmFtZSwgcGFyYW1ldGVycywgcmVxKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQW5hbHl0aWNzQWRhcHRlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxNQUFNQSxnQkFBZ0IsQ0FBQztFQUM1QjtBQUNGO0FBQ0E7QUFDQTtFQUNFQyxTQUFTLENBQUNDLFVBQVUsRUFBRUMsR0FBRyxFQUFFO0lBQ3pCLE9BQU9DLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzVCOztFQUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7RUFDRUMsVUFBVSxDQUFDQyxTQUFTLEVBQUVMLFVBQVUsRUFBRUMsR0FBRyxFQUFFO0lBQ3JDLE9BQU9DLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzVCO0FBQ0Y7QUFBQztBQUFBLGVBRWNMLGdCQUFnQjtBQUFBIn0=
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = exports.AuthAdapter = void 0;
7
-
8
7
  /*eslint no-unused-vars: "off"*/
9
8
 
10
9
  /**
@@ -21,6 +20,7 @@ exports.default = exports.AuthAdapter = void 0;
21
20
  * solo: Will ignore ALL additional providers if additional configured on user
22
21
  * @typedef {"default" | "additional" | "solo"} AuthPolicy
23
22
  */
23
+
24
24
  class AuthAdapter {
25
25
  constructor() {
26
26
  /**
@@ -36,11 +36,10 @@ class AuthAdapter {
36
36
  * @param {Parse.Cloud.TriggerRequest} request
37
37
  * @returns {(Promise<undefined|void>|void|undefined)} resolves or returns if the applicationId is valid
38
38
  */
39
-
40
-
41
39
  validateAppId(appIds, authData, options, request) {
42
40
  return Promise.resolve({});
43
41
  }
42
+
44
43
  /**
45
44
  * Legacy usage, if provided it will be triggered when authData related to this provider is touched (signup/update/login)
46
45
  * otherwise you should implement validateSetup, validateLogin and validateUpdate
@@ -49,11 +48,10 @@ class AuthAdapter {
49
48
  * @param {Object} options additional adapter options
50
49
  * @returns {Promise<ParseAuthResponse|void|undefined>}
51
50
  */
52
-
53
-
54
51
  validateAuthData(authData, request, options) {
55
52
  return Promise.resolve({});
56
53
  }
54
+
57
55
  /**
58
56
  * Triggered when user provide for the first time this auth provider
59
57
  * could be a register or the user adding a new auth service
@@ -62,11 +60,10 @@ class AuthAdapter {
62
60
  * @param {Object} options additional adapter options
63
61
  * @returns {Promise<ParseAuthResponse|void|undefined>}
64
62
  */
65
-
66
-
67
63
  validateSetUp(authData, req, options) {
68
64
  return Promise.resolve({});
69
65
  }
66
+
70
67
  /**
71
68
  * Triggered when user provide authData related to this provider
72
69
  * The user is not logged in and has already set this provider before
@@ -75,11 +72,10 @@ class AuthAdapter {
75
72
  * @param {Object} options additional adapter options
76
73
  * @returns {Promise<ParseAuthResponse|void|undefined>}
77
74
  */
78
-
79
-
80
75
  validateLogin(authData, req, options) {
81
76
  return Promise.resolve({});
82
77
  }
78
+
83
79
  /**
84
80
  * Triggered when user provide authData related to this provider
85
81
  * the user is logged in and has already set this provider before
@@ -88,11 +84,10 @@ class AuthAdapter {
88
84
  * @param {Parse.Cloud.TriggerRequest} request
89
85
  * @returns {Promise<ParseAuthResponse|void|undefined>}
90
86
  */
91
-
92
-
93
87
  validateUpdate(authData, req, options) {
94
88
  return Promise.resolve({});
95
89
  }
90
+
96
91
  /**
97
92
  * Triggered in pre authentication process if needed (like webauthn, SMS OTP)
98
93
  * @param {Object} challengeData Data provided by the client
@@ -101,15 +96,11 @@ class AuthAdapter {
101
96
  * @param {Parse.Cloud.TriggerRequest} request
102
97
  * @returns {Promise<Object>} A promise that resolves, resolved value will be added to challenge response under challenge key
103
98
  */
104
-
105
-
106
99
  challenge(challengeData, authData, options, request) {
107
100
  return Promise.resolve({});
108
101
  }
109
-
110
102
  }
111
-
112
103
  exports.AuthAdapter = AuthAdapter;
113
104
  var _default = AuthAdapter;
114
105
  exports.default = _default;
115
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL0F1dGhBZGFwdGVyLmpzIl0sIm5hbWVzIjpbIkF1dGhBZGFwdGVyIiwiY29uc3RydWN0b3IiLCJwb2xpY3kiLCJ2YWxpZGF0ZUFwcElkIiwiYXBwSWRzIiwiYXV0aERhdGEiLCJvcHRpb25zIiwicmVxdWVzdCIsIlByb21pc2UiLCJyZXNvbHZlIiwidmFsaWRhdGVBdXRoRGF0YSIsInZhbGlkYXRlU2V0VXAiLCJyZXEiLCJ2YWxpZGF0ZUxvZ2luIiwidmFsaWRhdGVVcGRhdGUiLCJjaGFsbGVuZ2UiLCJjaGFsbGVuZ2VEYXRhIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRU8sTUFBTUEsV0FBTixDQUFrQjtBQUN2QkMsRUFBQUEsV0FBVyxHQUFHO0FBQ1o7QUFDSjtBQUNBO0FBQ0E7QUFDSSxTQUFLQyxNQUFMLEdBQWMsU0FBZDtBQUNEO0FBQ0Q7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNFQyxFQUFBQSxhQUFhLENBQUNDLE1BQUQsRUFBU0MsUUFBVCxFQUFtQkMsT0FBbkIsRUFBNEJDLE9BQTVCLEVBQXFDO0FBQ2hELFdBQU9DLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixFQUFoQixDQUFQO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDRUMsRUFBQUEsZ0JBQWdCLENBQUNMLFFBQUQsRUFBV0UsT0FBWCxFQUFvQkQsT0FBcEIsRUFBNkI7QUFDM0MsV0FBT0UsT0FBTyxDQUFDQyxPQUFSLENBQWdCLEVBQWhCLENBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNFRSxFQUFBQSxhQUFhLENBQUNOLFFBQUQsRUFBV08sR0FBWCxFQUFnQk4sT0FBaEIsRUFBeUI7QUFDcEMsV0FBT0UsT0FBTyxDQUFDQyxPQUFSLENBQWdCLEVBQWhCLENBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNFSSxFQUFBQSxhQUFhLENBQUNSLFFBQUQsRUFBV08sR0FBWCxFQUFnQk4sT0FBaEIsRUFBeUI7QUFDcEMsV0FBT0UsT0FBTyxDQUFDQyxPQUFSLENBQWdCLEVBQWhCLENBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNFSyxFQUFBQSxjQUFjLENBQUNULFFBQUQsRUFBV08sR0FBWCxFQUFnQk4sT0FBaEIsRUFBeUI7QUFDckMsV0FBT0UsT0FBTyxDQUFDQyxPQUFSLENBQWdCLEVBQWhCLENBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNFTSxFQUFBQSxTQUFTLENBQUNDLGFBQUQsRUFBZ0JYLFFBQWhCLEVBQTBCQyxPQUExQixFQUFtQ0MsT0FBbkMsRUFBNEM7QUFDbkQsV0FBT0MsT0FBTyxDQUFDQyxPQUFSLENBQWdCLEVBQWhCLENBQVA7QUFDRDs7QUE3RXNCOzs7ZUFnRlZULFciLCJzb3VyY2VzQ29udGVudCI6WyIvKmVzbGludCBuby11bnVzZWQtdmFyczogXCJvZmZcIiovXG5cbi8qKlxuICogQGludGVyZmFjZSBQYXJzZUF1dGhSZXNwb25zZVxuICogQHByb3BlcnR5IHtCb29sZWFufSBbZG9Ob3RTYXZlXSBJZiB0cnVlLCBQYXJzZSBTZXJ2ZXIgd2lsbCBub3Qgc2F2ZSBwcm92aWRlZCBhdXRoRGF0YS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbcmVzcG9uc2VdIElmIHNldCwgUGFyc2UgU2VydmVyIHdpbGwgc2VuZCB0aGUgcHJvdmlkZWQgcmVzcG9uc2UgdG8gdGhlIGNsaWVudCB1bmRlciBhdXRoRGF0YVJlc3BvbnNlXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3NhdmVdIElmIHNldCwgUGFyc2UgU2VydmVyIHdpbGwgc2F2ZSB0aGUgb2JqZWN0IHByb3ZpZGVkIGludG8gdGhpcyBrZXksIGluc3RlYWQgb2YgY2xpZW50IHByb3ZpZGVkIGF1dGhEYXRhXG4gKi9cblxuLyoqXG4gKiBBdXRoUG9saWN5XG4gKiBkZWZhdWx0OiBjYW4gYmUgY29tYmluZWQgd2l0aCBPTkUgYWRkaXRpb25hbCBhdXRoIHByb3ZpZGVyIGlmIGFkZGl0aW9uYWwgY29uZmlndXJlZCBvbiB1c2VyXG4gKiBhZGRpdGlvbmFsOiBjb3VsZCBiZSBvbmx5IHVzZWQgd2l0aCBhIGRlZmF1bHQgcG9saWN5IGF1dGggcHJvdmlkZXJcbiAqIHNvbG86IFdpbGwgaWdub3JlIEFMTCBhZGRpdGlvbmFsIHByb3ZpZGVycyBpZiBhZGRpdGlvbmFsIGNvbmZpZ3VyZWQgb24gdXNlclxuICogQHR5cGVkZWYge1wiZGVmYXVsdFwiIHwgXCJhZGRpdGlvbmFsXCIgfCBcInNvbG9cIn0gQXV0aFBvbGljeVxuICovXG5cbmV4cG9ydCBjbGFzcyBBdXRoQWRhcHRlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFVzYWdlIHBvbGljeVxuICAgICAqIEB0eXBlIHtBdXRoUG9saWN5fVxuICAgICAqL1xuICAgIHRoaXMucG9saWN5ID0gJ2RlZmF1bHQnO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0gYXBwSWRzIFRoZSBzcGVjaWZpZWQgYXBwIElEcyBpbiB0aGUgY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gYXV0aERhdGEgVGhlIGNsaWVudCBwcm92aWRlZCBhdXRoRGF0YVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBhZGRpdGlvbmFsIGFkYXB0ZXIgb3B0aW9uc1xuICAgKiBAcGFyYW0ge1BhcnNlLkNsb3VkLlRyaWdnZXJSZXF1ZXN0fSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIHsoUHJvbWlzZTx1bmRlZmluZWR8dm9pZD58dm9pZHx1bmRlZmluZWQpfSByZXNvbHZlcyBvciByZXR1cm5zIGlmIHRoZSBhcHBsaWNhdGlvbklkIGlzIHZhbGlkXG4gICAqL1xuICB2YWxpZGF0ZUFwcElkKGFwcElkcywgYXV0aERhdGEsIG9wdGlvbnMsIHJlcXVlc3QpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMZWdhY3kgdXNhZ2UsIGlmIHByb3ZpZGVkIGl0IHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gYXV0aERhdGEgcmVsYXRlZCB0byB0aGlzIHByb3ZpZGVyIGlzIHRvdWNoZWQgKHNpZ251cC91cGRhdGUvbG9naW4pXG4gICAqIG90aGVyd2lzZSB5b3Ugc2hvdWxkIGltcGxlbWVudCB2YWxpZGF0ZVNldHVwLCB2YWxpZGF0ZUxvZ2luIGFuZCB2YWxpZGF0ZVVwZGF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gYXV0aERhdGEgVGhlIGNsaWVudCBwcm92aWRlZCBhdXRoRGF0YVxuICAgKiBAcGFyYW0ge1BhcnNlLkNsb3VkLlRyaWdnZXJSZXF1ZXN0fSByZXF1ZXN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIGFkZGl0aW9uYWwgYWRhcHRlciBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFBhcnNlQXV0aFJlc3BvbnNlfHZvaWR8dW5kZWZpbmVkPn1cbiAgICovXG4gIHZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEsIHJlcXVlc3QsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyZWQgd2hlbiB1c2VyIHByb3ZpZGUgZm9yIHRoZSBmaXJzdCB0aW1lIHRoaXMgYXV0aCBwcm92aWRlclxuICAgKiBjb3VsZCBiZSBhIHJlZ2lzdGVyIG9yIHRoZSB1c2VyIGFkZGluZyBhIG5ldyBhdXRoIHNlcnZpY2VcbiAgICogQHBhcmFtIHtPYmplY3R9IGF1dGhEYXRhIFRoZSBjbGllbnQgcHJvdmlkZWQgYXV0aERhdGFcbiAgICogQHBhcmFtIHtQYXJzZS5DbG91ZC5UcmlnZ2VyUmVxdWVzdH0gcmVxdWVzdFxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBhZGRpdGlvbmFsIGFkYXB0ZXIgb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxQYXJzZUF1dGhSZXNwb25zZXx2b2lkfHVuZGVmaW5lZD59XG4gICAqL1xuICB2YWxpZGF0ZVNldFVwKGF1dGhEYXRhLCByZXEsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyZWQgd2hlbiB1c2VyIHByb3ZpZGUgYXV0aERhdGEgcmVsYXRlZCB0byB0aGlzIHByb3ZpZGVyXG4gICAqIFRoZSB1c2VyIGlzIG5vdCBsb2dnZWQgaW4gYW5kIGhhcyBhbHJlYWR5IHNldCB0aGlzIHByb3ZpZGVyIGJlZm9yZVxuICAgKiBAcGFyYW0ge09iamVjdH0gYXV0aERhdGEgVGhlIGNsaWVudCBwcm92aWRlZCBhdXRoRGF0YVxuICAgKiBAcGFyYW0ge1BhcnNlLkNsb3VkLlRyaWdnZXJSZXF1ZXN0fSByZXF1ZXN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIGFkZGl0aW9uYWwgYWRhcHRlciBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFBhcnNlQXV0aFJlc3BvbnNlfHZvaWR8dW5kZWZpbmVkPn1cbiAgICovXG4gIHZhbGlkYXRlTG9naW4oYXV0aERhdGEsIHJlcSwgb3B0aW9ucykge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJlZCB3aGVuIHVzZXIgcHJvdmlkZSBhdXRoRGF0YSByZWxhdGVkIHRvIHRoaXMgcHJvdmlkZXJcbiAgICogdGhlIHVzZXIgaXMgbG9nZ2VkIGluIGFuZCBoYXMgYWxyZWFkeSBzZXQgdGhpcyBwcm92aWRlciBiZWZvcmVcbiAgICogQHBhcmFtIHtPYmplY3R9IGF1dGhEYXRhIFRoZSBjbGllbnQgcHJvdmlkZWQgYXV0aERhdGFcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgYWRkaXRpb25hbCBhZGFwdGVyIG9wdGlvbnNcbiAgICogQHBhcmFtIHtQYXJzZS5DbG91ZC5UcmlnZ2VyUmVxdWVzdH0gcmVxdWVzdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxQYXJzZUF1dGhSZXNwb25zZXx2b2lkfHVuZGVmaW5lZD59XG4gICAqL1xuICB2YWxpZGF0ZVVwZGF0ZShhdXRoRGF0YSwgcmVxLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcmVkIGluIHByZSBhdXRoZW50aWNhdGlvbiBwcm9jZXNzIGlmIG5lZWRlZCAobGlrZSB3ZWJhdXRobiwgU01TIE9UUClcbiAgICogQHBhcmFtIHtPYmplY3R9IGNoYWxsZW5nZURhdGEgRGF0YSBwcm92aWRlZCBieSB0aGUgY2xpZW50XG4gICAqIEBwYXJhbSB7KE9iamVjdHx1bmRlZmluZWQpfSBhdXRoRGF0YSBBdXRoIGRhdGEgcHJvdmlkZWQgYnkgdGhlIGNsaWVudCwgY2FuIGJlIHVzZWQgZm9yIHZhbGlkYXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgYWRkaXRpb25hbCBhZGFwdGVyIG9wdGlvbnNcbiAgICogQHBhcmFtIHtQYXJzZS5DbG91ZC5UcmlnZ2VyUmVxdWVzdH0gcmVxdWVzdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3Q+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcywgcmVzb2x2ZWQgdmFsdWUgd2lsbCBiZSBhZGRlZCB0byBjaGFsbGVuZ2UgcmVzcG9uc2UgdW5kZXIgY2hhbGxlbmdlIGtleVxuICAgKi9cbiAgY2hhbGxlbmdlKGNoYWxsZW5nZURhdGEsIGF1dGhEYXRhLCBvcHRpb25zLCByZXF1ZXN0KSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXV0aEFkYXB0ZXI7XG4iXX0=
106
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBdXRoQWRhcHRlciIsImNvbnN0cnVjdG9yIiwicG9saWN5IiwidmFsaWRhdGVBcHBJZCIsImFwcElkcyIsImF1dGhEYXRhIiwib3B0aW9ucyIsInJlcXVlc3QiLCJQcm9taXNlIiwicmVzb2x2ZSIsInZhbGlkYXRlQXV0aERhdGEiLCJ2YWxpZGF0ZVNldFVwIiwicmVxIiwidmFsaWRhdGVMb2dpbiIsInZhbGlkYXRlVXBkYXRlIiwiY2hhbGxlbmdlIiwiY2hhbGxlbmdlRGF0YSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL0F1dGhBZGFwdGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiKi9cblxuLyoqXG4gKiBAaW50ZXJmYWNlIFBhcnNlQXV0aFJlc3BvbnNlXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFtkb05vdFNhdmVdIElmIHRydWUsIFBhcnNlIFNlcnZlciB3aWxsIG5vdCBzYXZlIHByb3ZpZGVkIGF1dGhEYXRhLlxuICogQHByb3BlcnR5IHtPYmplY3R9IFtyZXNwb25zZV0gSWYgc2V0LCBQYXJzZSBTZXJ2ZXIgd2lsbCBzZW5kIHRoZSBwcm92aWRlZCByZXNwb25zZSB0byB0aGUgY2xpZW50IHVuZGVyIGF1dGhEYXRhUmVzcG9uc2VcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbc2F2ZV0gSWYgc2V0LCBQYXJzZSBTZXJ2ZXIgd2lsbCBzYXZlIHRoZSBvYmplY3QgcHJvdmlkZWQgaW50byB0aGlzIGtleSwgaW5zdGVhZCBvZiBjbGllbnQgcHJvdmlkZWQgYXV0aERhdGFcbiAqL1xuXG4vKipcbiAqIEF1dGhQb2xpY3lcbiAqIGRlZmF1bHQ6IGNhbiBiZSBjb21iaW5lZCB3aXRoIE9ORSBhZGRpdGlvbmFsIGF1dGggcHJvdmlkZXIgaWYgYWRkaXRpb25hbCBjb25maWd1cmVkIG9uIHVzZXJcbiAqIGFkZGl0aW9uYWw6IGNvdWxkIGJlIG9ubHkgdXNlZCB3aXRoIGEgZGVmYXVsdCBwb2xpY3kgYXV0aCBwcm92aWRlclxuICogc29sbzogV2lsbCBpZ25vcmUgQUxMIGFkZGl0aW9uYWwgcHJvdmlkZXJzIGlmIGFkZGl0aW9uYWwgY29uZmlndXJlZCBvbiB1c2VyXG4gKiBAdHlwZWRlZiB7XCJkZWZhdWx0XCIgfCBcImFkZGl0aW9uYWxcIiB8IFwic29sb1wifSBBdXRoUG9saWN5XG4gKi9cblxuZXhwb3J0IGNsYXNzIEF1dGhBZGFwdGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyoqXG4gICAgICogVXNhZ2UgcG9saWN5XG4gICAgICogQHR5cGUge0F1dGhQb2xpY3l9XG4gICAgICovXG4gICAgdGhpcy5wb2xpY3kgPSAnZGVmYXVsdCc7XG4gIH1cbiAgLyoqXG4gICAqIEBwYXJhbSBhcHBJZHMgVGhlIHNwZWNpZmllZCBhcHAgSURzIGluIHRoZSBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdXRoRGF0YSBUaGUgY2xpZW50IHByb3ZpZGVkIGF1dGhEYXRhXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIGFkZGl0aW9uYWwgYWRhcHRlciBvcHRpb25zXG4gICAqIEBwYXJhbSB7UGFyc2UuQ2xvdWQuVHJpZ2dlclJlcXVlc3R9IHJlcXVlc3RcbiAgICogQHJldHVybnMgeyhQcm9taXNlPHVuZGVmaW5lZHx2b2lkPnx2b2lkfHVuZGVmaW5lZCl9IHJlc29sdmVzIG9yIHJldHVybnMgaWYgdGhlIGFwcGxpY2F0aW9uSWQgaXMgdmFsaWRcbiAgICovXG4gIHZhbGlkYXRlQXBwSWQoYXBwSWRzLCBhdXRoRGF0YSwgb3B0aW9ucywgcmVxdWVzdCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIExlZ2FjeSB1c2FnZSwgaWYgcHJvdmlkZWQgaXQgd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiBhdXRoRGF0YSByZWxhdGVkIHRvIHRoaXMgcHJvdmlkZXIgaXMgdG91Y2hlZCAoc2lnbnVwL3VwZGF0ZS9sb2dpbilcbiAgICogb3RoZXJ3aXNlIHlvdSBzaG91bGQgaW1wbGVtZW50IHZhbGlkYXRlU2V0dXAsIHZhbGlkYXRlTG9naW4gYW5kIHZhbGlkYXRlVXBkYXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdXRoRGF0YSBUaGUgY2xpZW50IHByb3ZpZGVkIGF1dGhEYXRhXG4gICAqIEBwYXJhbSB7UGFyc2UuQ2xvdWQuVHJpZ2dlclJlcXVlc3R9IHJlcXVlc3RcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgYWRkaXRpb25hbCBhZGFwdGVyIG9wdGlvbnNcbiAgICogQHJldHVybnMge1Byb21pc2U8UGFyc2VBdXRoUmVzcG9uc2V8dm9pZHx1bmRlZmluZWQ+fVxuICAgKi9cbiAgdmFsaWRhdGVBdXRoRGF0YShhdXRoRGF0YSwgcmVxdWVzdCwgb3B0aW9ucykge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJlZCB3aGVuIHVzZXIgcHJvdmlkZSBmb3IgdGhlIGZpcnN0IHRpbWUgdGhpcyBhdXRoIHByb3ZpZGVyXG4gICAqIGNvdWxkIGJlIGEgcmVnaXN0ZXIgb3IgdGhlIHVzZXIgYWRkaW5nIGEgbmV3IGF1dGggc2VydmljZVxuICAgKiBAcGFyYW0ge09iamVjdH0gYXV0aERhdGEgVGhlIGNsaWVudCBwcm92aWRlZCBhdXRoRGF0YVxuICAgKiBAcGFyYW0ge1BhcnNlLkNsb3VkLlRyaWdnZXJSZXF1ZXN0fSByZXF1ZXN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIGFkZGl0aW9uYWwgYWRhcHRlciBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFBhcnNlQXV0aFJlc3BvbnNlfHZvaWR8dW5kZWZpbmVkPn1cbiAgICovXG4gIHZhbGlkYXRlU2V0VXAoYXV0aERhdGEsIHJlcSwgb3B0aW9ucykge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJlZCB3aGVuIHVzZXIgcHJvdmlkZSBhdXRoRGF0YSByZWxhdGVkIHRvIHRoaXMgcHJvdmlkZXJcbiAgICogVGhlIHVzZXIgaXMgbm90IGxvZ2dlZCBpbiBhbmQgaGFzIGFscmVhZHkgc2V0IHRoaXMgcHJvdmlkZXIgYmVmb3JlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdXRoRGF0YSBUaGUgY2xpZW50IHByb3ZpZGVkIGF1dGhEYXRhXG4gICAqIEBwYXJhbSB7UGFyc2UuQ2xvdWQuVHJpZ2dlclJlcXVlc3R9IHJlcXVlc3RcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgYWRkaXRpb25hbCBhZGFwdGVyIG9wdGlvbnNcbiAgICogQHJldHVybnMge1Byb21pc2U8UGFyc2VBdXRoUmVzcG9uc2V8dm9pZHx1bmRlZmluZWQ+fVxuICAgKi9cbiAgdmFsaWRhdGVMb2dpbihhdXRoRGF0YSwgcmVxLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcmVkIHdoZW4gdXNlciBwcm92aWRlIGF1dGhEYXRhIHJlbGF0ZWQgdG8gdGhpcyBwcm92aWRlclxuICAgKiB0aGUgdXNlciBpcyBsb2dnZWQgaW4gYW5kIGhhcyBhbHJlYWR5IHNldCB0aGlzIHByb3ZpZGVyIGJlZm9yZVxuICAgKiBAcGFyYW0ge09iamVjdH0gYXV0aERhdGEgVGhlIGNsaWVudCBwcm92aWRlZCBhdXRoRGF0YVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBhZGRpdGlvbmFsIGFkYXB0ZXIgb3B0aW9uc1xuICAgKiBAcGFyYW0ge1BhcnNlLkNsb3VkLlRyaWdnZXJSZXF1ZXN0fSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFBhcnNlQXV0aFJlc3BvbnNlfHZvaWR8dW5kZWZpbmVkPn1cbiAgICovXG4gIHZhbGlkYXRlVXBkYXRlKGF1dGhEYXRhLCByZXEsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyZWQgaW4gcHJlIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MgaWYgbmVlZGVkIChsaWtlIHdlYmF1dGhuLCBTTVMgT1RQKVxuICAgKiBAcGFyYW0ge09iamVjdH0gY2hhbGxlbmdlRGF0YSBEYXRhIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnRcbiAgICogQHBhcmFtIHsoT2JqZWN0fHVuZGVmaW5lZCl9IGF1dGhEYXRhIEF1dGggZGF0YSBwcm92aWRlZCBieSB0aGUgY2xpZW50LCBjYW4gYmUgdXNlZCBmb3IgdmFsaWRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBhZGRpdGlvbmFsIGFkYXB0ZXIgb3B0aW9uc1xuICAgKiBAcGFyYW0ge1BhcnNlLkNsb3VkLlRyaWdnZXJSZXF1ZXN0fSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE9iamVjdD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzLCByZXNvbHZlZCB2YWx1ZSB3aWxsIGJlIGFkZGVkIHRvIGNoYWxsZW5nZSByZXNwb25zZSB1bmRlciBjaGFsbGVuZ2Uga2V5XG4gICAqL1xuICBjaGFsbGVuZ2UoY2hhbGxlbmdlRGF0YSwgYXV0aERhdGEsIG9wdGlvbnMsIHJlcXVlc3QpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBdXRoQWRhcHRlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPLE1BQU1BLFdBQVcsQ0FBQztFQUN2QkMsV0FBVyxHQUFHO0lBQ1o7QUFDSjtBQUNBO0FBQ0E7SUFDSSxJQUFJLENBQUNDLE1BQU0sR0FBRyxTQUFTO0VBQ3pCO0VBQ0E7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRUMsYUFBYSxDQUFDQyxNQUFNLEVBQUVDLFFBQVEsRUFBRUMsT0FBTyxFQUFFQyxPQUFPLEVBQUU7SUFDaEQsT0FBT0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUI7O0VBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNFQyxnQkFBZ0IsQ0FBQ0wsUUFBUSxFQUFFRSxPQUFPLEVBQUVELE9BQU8sRUFBRTtJQUMzQyxPQUFPRSxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1Qjs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0VFLGFBQWEsQ0FBQ04sUUFBUSxFQUFFTyxHQUFHLEVBQUVOLE9BQU8sRUFBRTtJQUNwQyxPQUFPRSxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1Qjs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0VJLGFBQWEsQ0FBQ1IsUUFBUSxFQUFFTyxHQUFHLEVBQUVOLE9BQU8sRUFBRTtJQUNwQyxPQUFPRSxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1Qjs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0VLLGNBQWMsQ0FBQ1QsUUFBUSxFQUFFTyxHQUFHLEVBQUVOLE9BQU8sRUFBRTtJQUNyQyxPQUFPRSxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1Qjs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0VNLFNBQVMsQ0FBQ0MsYUFBYSxFQUFFWCxRQUFRLEVBQUVDLE9BQU8sRUFBRUMsT0FBTyxFQUFFO0lBQ25ELE9BQU9DLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzVCO0FBQ0Y7QUFBQztBQUFBLGVBRWNULFdBQVc7QUFBQSJ9
@@ -1,15 +1,12 @@
1
1
  "use strict";
2
2
 
3
3
  var https = require('https'),
4
- crypto = require('crypto');
5
-
4
+ crypto = require('crypto');
6
5
  var Parse = require('parse/node').Parse;
7
-
8
6
  var OAuth = function (options) {
9
7
  if (!options) {
10
8
  throw new Parse.Error(Parse.Error.INTERNAL_SERVER_ERROR, 'No options passed to OAuth');
11
9
  }
12
-
13
10
  this.consumer_key = options.consumer_key;
14
11
  this.consumer_secret = options.consumer_secret;
15
12
  this.auth_token = options.auth_token;
@@ -17,10 +14,9 @@ var OAuth = function (options) {
17
14
  this.host = options.host;
18
15
  this.oauth_params = options.oauth_params || {};
19
16
  };
20
-
21
17
  OAuth.prototype.send = function (method, path, params, body) {
22
- var request = this.buildRequest(method, path, params, body); // Encode the body properly, the current Parse Implementation don't do it properly
23
-
18
+ var request = this.buildRequest(method, path, params, body);
19
+ // Encode the body properly, the current Parse Implementation don't do it properly
24
20
  return new Promise(function (resolve, reject) {
25
21
  var httpRequest = https.request(request, function (res) {
26
22
  var data = '';
@@ -34,24 +30,19 @@ OAuth.prototype.send = function (method, path, params, body) {
34
30
  }).on('error', function () {
35
31
  reject('Failed to make an OAuth request');
36
32
  });
37
-
38
33
  if (request.body) {
39
34
  httpRequest.write(request.body);
40
35
  }
41
-
42
36
  httpRequest.end();
43
37
  });
44
38
  };
45
-
46
39
  OAuth.prototype.buildRequest = function (method, path, params, body) {
47
40
  if (path.indexOf('/') != 0) {
48
41
  path = '/' + path;
49
42
  }
50
-
51
43
  if (params && Object.keys(params).length > 0) {
52
44
  path += '?' + OAuth.buildParameterString(params);
53
45
  }
54
-
55
46
  var request = {
56
47
  host: this.host,
57
48
  path: path,
@@ -59,32 +50,25 @@ OAuth.prototype.buildRequest = function (method, path, params, body) {
59
50
  };
60
51
  var oauth_params = this.oauth_params || {};
61
52
  oauth_params.oauth_consumer_key = this.consumer_key;
62
-
63
53
  if (this.auth_token) {
64
54
  oauth_params['oauth_token'] = this.auth_token;
65
55
  }
66
-
67
56
  request = OAuth.signRequest(request, oauth_params, this.consumer_secret, this.auth_token_secret);
68
-
69
57
  if (body && Object.keys(body).length > 0) {
70
58
  request.body = OAuth.buildParameterString(body);
71
59
  }
72
-
73
60
  return request;
74
61
  };
75
-
76
62
  OAuth.prototype.get = function (path, params) {
77
63
  return this.send('GET', path, params);
78
64
  };
79
-
80
65
  OAuth.prototype.post = function (path, params, body) {
81
66
  return this.send('POST', path, params, body);
82
67
  };
68
+
83
69
  /*
84
70
  Proper string %escape encoding
85
71
  */
86
-
87
-
88
72
  OAuth.encode = function (str) {
89
73
  // discuss at: http://phpjs.org/functions/rawurlencode/
90
74
  // original by: Brett Zamir (http://brett-zamir.me)
@@ -106,122 +90,113 @@ OAuth.encode = function (str) {
106
90
  // returns 2: 'http%3A%2F%2Fkevin.vanzonneveld.net%2F'
107
91
  // example 3: rawurlencode('http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a');
108
92
  // returns 3: 'http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a'
109
- str = (str + '').toString(); // Tilde should be allowed unescaped in future versions of PHP (as reflected below), but if you want to reflect current
110
- // PHP behavior, you would need to add ".replace(/~/g, '%7E');" to the following.
111
93
 
94
+ str = (str + '').toString();
95
+
96
+ // Tilde should be allowed unescaped in future versions of PHP (as reflected below), but if you want to reflect current
97
+ // PHP behavior, you would need to add ".replace(/~/g, '%7E');" to the following.
112
98
  return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29').replace(/\*/g, '%2A');
113
99
  };
114
-
115
100
  OAuth.signatureMethod = 'HMAC-SHA1';
116
101
  OAuth.version = '1.0';
102
+
117
103
  /*
118
104
  Generate a nonce
119
105
  */
120
-
121
106
  OAuth.nonce = function () {
122
107
  var text = '';
123
108
  var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
124
-
125
109
  for (var i = 0; i < 30; i++) text += possible.charAt(Math.floor(Math.random() * possible.length));
126
-
127
110
  return text;
128
111
  };
129
-
130
112
  OAuth.buildParameterString = function (obj) {
131
113
  // Sort keys and encode values
132
114
  if (obj) {
133
- var keys = Object.keys(obj).sort(); // Map key=value, join them by &
115
+ var keys = Object.keys(obj).sort();
134
116
 
117
+ // Map key=value, join them by &
135
118
  return keys.map(function (key) {
136
119
  return key + '=' + OAuth.encode(obj[key]);
137
120
  }).join('&');
138
121
  }
139
-
140
122
  return '';
141
123
  };
124
+
142
125
  /*
143
126
  Build the signature string from the object
144
127
  */
145
128
 
146
-
147
129
  OAuth.buildSignatureString = function (method, url, parameters) {
148
130
  return [method.toUpperCase(), OAuth.encode(url), OAuth.encode(parameters)].join('&');
149
131
  };
132
+
150
133
  /*
151
134
  Retuns encoded HMAC-SHA1 from key and text
152
135
  */
153
-
154
-
155
136
  OAuth.signature = function (text, key) {
156
137
  crypto = require('crypto');
157
138
  return OAuth.encode(crypto.createHmac('sha1', key).update(text).digest('base64'));
158
139
  };
159
-
160
140
  OAuth.signRequest = function (request, oauth_parameters, consumer_secret, auth_token_secret) {
161
- oauth_parameters = oauth_parameters || {}; // Set default values
141
+ oauth_parameters = oauth_parameters || {};
162
142
 
143
+ // Set default values
163
144
  if (!oauth_parameters.oauth_nonce) {
164
145
  oauth_parameters.oauth_nonce = OAuth.nonce();
165
146
  }
166
-
167
147
  if (!oauth_parameters.oauth_timestamp) {
168
148
  oauth_parameters.oauth_timestamp = Math.floor(new Date().getTime() / 1000);
169
149
  }
170
-
171
150
  if (!oauth_parameters.oauth_signature_method) {
172
151
  oauth_parameters.oauth_signature_method = OAuth.signatureMethod;
173
152
  }
174
-
175
153
  if (!oauth_parameters.oauth_version) {
176
154
  oauth_parameters.oauth_version = OAuth.version;
177
155
  }
178
-
179
156
  if (!auth_token_secret) {
180
157
  auth_token_secret = '';
181
- } // Force GET method if unset
182
-
183
-
158
+ }
159
+ // Force GET method if unset
184
160
  if (!request.method) {
185
161
  request.method = 'GET';
186
- } // Collect all the parameters in one signatureParameters object
187
-
162
+ }
188
163
 
164
+ // Collect all the parameters in one signatureParameters object
189
165
  var signatureParams = {};
190
166
  var parametersToMerge = [request.params, request.body, oauth_parameters];
191
-
192
167
  for (var i in parametersToMerge) {
193
168
  var parameters = parametersToMerge[i];
194
-
195
169
  for (var k in parameters) {
196
170
  signatureParams[k] = parameters[k];
197
171
  }
198
- } // Create a string based on the parameters
199
-
172
+ }
200
173
 
201
- var parameterString = OAuth.buildParameterString(signatureParams); // Build the signature string
174
+ // Create a string based on the parameters
175
+ var parameterString = OAuth.buildParameterString(signatureParams);
202
176
 
177
+ // Build the signature string
203
178
  var url = 'https://' + request.host + '' + request.path;
204
- var signatureString = OAuth.buildSignatureString(request.method, url, parameterString); // Hash the signature string
205
-
179
+ var signatureString = OAuth.buildSignatureString(request.method, url, parameterString);
180
+ // Hash the signature string
206
181
  var signatureKey = [OAuth.encode(consumer_secret), OAuth.encode(auth_token_secret)].join('&');
207
- var signature = OAuth.signature(signatureString, signatureKey); // Set the signature in the params
182
+ var signature = OAuth.signature(signatureString, signatureKey);
208
183
 
184
+ // Set the signature in the params
209
185
  oauth_parameters.oauth_signature = signature;
210
-
211
186
  if (!request.headers) {
212
187
  request.headers = {};
213
- } // Set the authorization header
214
-
188
+ }
215
189
 
190
+ // Set the authorization header
216
191
  var authHeader = Object.keys(oauth_parameters).sort().map(function (key) {
217
192
  var value = oauth_parameters[key];
218
193
  return key + '="' + value + '"';
219
194
  }).join(', ');
220
- request.headers.Authorization = 'OAuth ' + authHeader; // Set the content type header
195
+ request.headers.Authorization = 'OAuth ' + authHeader;
221
196
 
197
+ // Set the content type header
222
198
  request.headers['Content-Type'] = 'application/x-www-form-urlencoded';
223
199
  return request;
224
200
  };
225
-
226
201
  module.exports = OAuth;
227
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL09BdXRoMUNsaWVudC5qcyJdLCJuYW1lcyI6WyJodHRwcyIsInJlcXVpcmUiLCJjcnlwdG8iLCJQYXJzZSIsIk9BdXRoIiwib3B0aW9ucyIsIkVycm9yIiwiSU5URVJOQUxfU0VSVkVSX0VSUk9SIiwiY29uc3VtZXJfa2V5IiwiY29uc3VtZXJfc2VjcmV0IiwiYXV0aF90b2tlbiIsImF1dGhfdG9rZW5fc2VjcmV0IiwiaG9zdCIsIm9hdXRoX3BhcmFtcyIsInByb3RvdHlwZSIsInNlbmQiLCJtZXRob2QiLCJwYXRoIiwicGFyYW1zIiwiYm9keSIsInJlcXVlc3QiLCJidWlsZFJlcXVlc3QiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImh0dHBSZXF1ZXN0IiwicmVzIiwiZGF0YSIsIm9uIiwiY2h1bmsiLCJKU09OIiwicGFyc2UiLCJ3cml0ZSIsImVuZCIsImluZGV4T2YiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwiYnVpbGRQYXJhbWV0ZXJTdHJpbmciLCJ0b1VwcGVyQ2FzZSIsIm9hdXRoX2NvbnN1bWVyX2tleSIsInNpZ25SZXF1ZXN0IiwiZ2V0IiwicG9zdCIsImVuY29kZSIsInN0ciIsInRvU3RyaW5nIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicmVwbGFjZSIsInNpZ25hdHVyZU1ldGhvZCIsInZlcnNpb24iLCJub25jZSIsInRleHQiLCJwb3NzaWJsZSIsImkiLCJjaGFyQXQiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJvYmoiLCJzb3J0IiwibWFwIiwia2V5Iiwiam9pbiIsImJ1aWxkU2lnbmF0dXJlU3RyaW5nIiwidXJsIiwicGFyYW1ldGVycyIsInNpZ25hdHVyZSIsImNyZWF0ZUhtYWMiLCJ1cGRhdGUiLCJkaWdlc3QiLCJvYXV0aF9wYXJhbWV0ZXJzIiwib2F1dGhfbm9uY2UiLCJvYXV0aF90aW1lc3RhbXAiLCJEYXRlIiwiZ2V0VGltZSIsIm9hdXRoX3NpZ25hdHVyZV9tZXRob2QiLCJvYXV0aF92ZXJzaW9uIiwic2lnbmF0dXJlUGFyYW1zIiwicGFyYW1ldGVyc1RvTWVyZ2UiLCJrIiwicGFyYW1ldGVyU3RyaW5nIiwic2lnbmF0dXJlU3RyaW5nIiwic2lnbmF0dXJlS2V5Iiwib2F1dGhfc2lnbmF0dXJlIiwiaGVhZGVycyIsImF1dGhIZWFkZXIiLCJ2YWx1ZSIsIkF1dGhvcml6YXRpb24iLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOztBQUFBLElBQUlBLEtBQUssR0FBR0MsT0FBTyxDQUFDLE9BQUQsQ0FBbkI7QUFBQSxJQUNFQyxNQUFNLEdBQUdELE9BQU8sQ0FBQyxRQUFELENBRGxCOztBQUVBLElBQUlFLEtBQUssR0FBR0YsT0FBTyxDQUFDLFlBQUQsQ0FBUCxDQUFzQkUsS0FBbEM7O0FBRUEsSUFBSUMsS0FBSyxHQUFHLFVBQVVDLE9BQVYsRUFBbUI7QUFDN0IsTUFBSSxDQUFDQSxPQUFMLEVBQWM7QUFDWixVQUFNLElBQUlGLEtBQUssQ0FBQ0csS0FBVixDQUFnQkgsS0FBSyxDQUFDRyxLQUFOLENBQVlDLHFCQUE1QixFQUFtRCw0QkFBbkQsQ0FBTjtBQUNEOztBQUNELE9BQUtDLFlBQUwsR0FBb0JILE9BQU8sQ0FBQ0csWUFBNUI7QUFDQSxPQUFLQyxlQUFMLEdBQXVCSixPQUFPLENBQUNJLGVBQS9CO0FBQ0EsT0FBS0MsVUFBTCxHQUFrQkwsT0FBTyxDQUFDSyxVQUExQjtBQUNBLE9BQUtDLGlCQUFMLEdBQXlCTixPQUFPLENBQUNNLGlCQUFqQztBQUNBLE9BQUtDLElBQUwsR0FBWVAsT0FBTyxDQUFDTyxJQUFwQjtBQUNBLE9BQUtDLFlBQUwsR0FBb0JSLE9BQU8sQ0FBQ1EsWUFBUixJQUF3QixFQUE1QztBQUNELENBVkQ7O0FBWUFULEtBQUssQ0FBQ1UsU0FBTixDQUFnQkMsSUFBaEIsR0FBdUIsVUFBVUMsTUFBVixFQUFrQkMsSUFBbEIsRUFBd0JDLE1BQXhCLEVBQWdDQyxJQUFoQyxFQUFzQztBQUMzRCxNQUFJQyxPQUFPLEdBQUcsS0FBS0Ms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LGVBQWpCLEdBQW1DakIsU0FBbkM7O0FBQ0EsTUFBSSxDQUFDL0MsT0FBTyxDQUFDaUUsT0FBYixFQUFzQjtBQUNwQmpFLElBQUFBLE9BQU8sQ0FBQ2lFLE9BQVIsR0FBa0IsRUFBbEI7QUFDRCxHQW5EMEYsQ0FxRDNGOzs7QUFDQSxNQUFJQyxVQUFVLEdBQUduRCxNQUFNLENBQUNDLElBQVAsQ0FBWW1DLGdCQUFaLEVBQ2RYLElBRGMsR0FFZEMsR0FGYyxDQUVWLFVBQVVDLEdBQVYsRUFBZTtBQUNsQixRQUFJeUIsS0FBSyxHQUFHaEIsZ0JBQWdCLENBQUNULEdBQUQsQ0FBNUI7QUFDQSxXQUFPQSxHQUFHLEdBQUcsSUFBTixHQUFheUIsS0FBYixHQUFxQixHQUE1QjtBQUNELEdBTGMsRUFNZHhCLElBTmMsQ0FNVCxJQU5TLENBQWpCO0FBUUEzQyxFQUFBQSxPQUFPLENBQUNpRSxPQUFSLENBQWdCRyxhQUFoQixHQUFnQyxXQUFXRixVQUEzQyxDQTlEMkYsQ0FnRTNGOztBQUNBbEUsRUFBQUEsT0FBTyxDQUFDaUUsT0FBUixDQUFnQixjQUFoQixJQUFrQyxtQ0FBbEM7QUFDQSxTQUFPakUsT0FBUDtBQUNELENBbkVEOztBQXFFQXFFLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQnRGLEtBQWpCIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKSxcbiAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG52YXIgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2U7XG5cbnZhciBPQXV0aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlRFUk5BTF9TRVJWRVJfRVJST1IsICdObyBvcHRpb25zIHBhc3NlZCB0byBPQXV0aCcpO1xuICB9XG4gIHRoaXMuY29uc3VtZXJfa2V5ID0gb3B0aW9ucy5jb25zdW1lcl9rZXk7XG4gIHRoaXMuY29uc3VtZXJfc2VjcmV0ID0gb3B0aW9ucy5jb25zdW1lcl9zZWNyZXQ7XG4gIHRoaXMuYXV0aF90b2tlbiA9IG9wdGlvbnMuYXV0aF90b2tlbjtcbiAgdGhpcy5hdXRoX3Rva2VuX3NlY3JldCA9IG9wdGlvbnMuYXV0aF90b2tlbl9zZWNyZXQ7XG4gIHRoaXMuaG9zdCA9IG9wdGlvbnMuaG9zdDtcbiAgdGhpcy5vYXV0aF9wYXJhbXMgPSBvcHRpb25zLm9hdXRoX3BhcmFtcyB8fCB7fTtcbn07XG5cbk9BdXRoLnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24gKG1ldGhvZCwgcGF0aCwgcGFyYW1zLCBib2R5KSB7XG4gIHZhciByZXF1ZXN0ID0gdGhpcy5idWlsZFJlcXVlc3QobWV0aG9kLCBwYXRoLCBwYXJhbXMsIGJvZHkpO1xuICAvLyBFbmNvZGUgdGhlIGJvZHkgcHJvcGVybHksIHRoZSBjdXJyZW50IFBhcnNlIEltcGxlbWVudGF0aW9uIGRvbid0IGRvIGl0IHByb3Blcmx5XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIGh0dHBSZXF1ZXN0ID0gaHR0cHNcbiAgICAgIC5yZXF1ZXN0KHJlcXVlc3QsIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgdmFyIGRhdGEgPSAnJztcbiAgICAgICAgcmVzLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICAgICAgZGF0YSArPSBjaHVuaztcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcy5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJlamVjdCgnRmFpbGVkIHRvIG1ha2UgYW4gT0F1dGggcmVxdWVzdCcpO1xuICAgICAgfSk7XG4gICAgaWYgKHJlcXVlc3QuYm9keSkge1xuICAgICAgaHR0cFJlcXVlc3Qud3JpdGUocmVxdWVzdC5ib2R5KTtcbiAgICB9XG4gICAgaHR0cFJlcXVlc3QuZW5kKCk7XG4gIH0pO1xufTtcblxuT0F1dGgucHJvdG90eXBlLmJ1aWxkUmVxdWVzdCA9IGZ1bmN0aW9uIChtZXRob2QsIHBhdGgsIHBhcmFtcywgYm9keSkge1xuICBpZiAocGF0aC5pbmRleE9mKCcvJykgIT0gMCkge1xuICAgIHBhdGggPSAnLycgKyBwYXRoO1xuICB9XG4gIGlmIChwYXJhbXMgJiYgT2JqZWN0LmtleXMocGFyYW1zKS5sZW5ndGggPiAwKSB7XG4gICAgcGF0aCArPSAnPycgKyBPQXV0aC5idWlsZFBhcmFtZXRlclN0cmluZyhwYXJhbXMpO1xuICB9XG5cbiAgdmFyIHJlcXVlc3QgPSB7XG4gICAgaG9zdDogdGhpcy5ob3N0LFxuICAgIHBhdGg6IHBhdGgsXG4gICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgfTtcblxuICB2YXIgb2F1dGhfcGFyYW1zID0gdGhpcy5vYXV0aF9wYXJhbXMgfHwge307XG4gIG9hdXRoX3BhcmFtcy5vYXV0aF9jb25zdW1lcl9rZXkgPSB0aGlzLmNvbnN1bWVyX2tleTtcbiAgaWYgKHRoaXMuYXV0aF90b2tlbikge1xuICAgIG9hdXRoX3BhcmFtc1snb2F1dGhfdG9rZW4nXSA9IHRoaXMuYXV0aF90b2tlbjtcbiAgfVxuXG4gIHJlcXVlc3QgPSBPQXV0aC5zaWduUmVxdWVzdChyZXF1ZXN0LCBvYXV0aF9wYXJhbXMsIHRoaXMuY29uc3VtZXJfc2VjcmV0LCB0aGlzLmF1dGhfdG9rZW5fc2VjcmV0KTtcblxuICBpZiAoYm9keSAmJiBPYmplY3Qua2V5cyhib2R5KS5sZW5ndGggPiAwKSB7XG4gICAgcmVxdWVzdC5ib2R5ID0gT0F1dGguYnVpbGRQYXJhbWV0ZXJTdHJpbmcoYm9keSk7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3Q7XG59O1xuXG5PQXV0aC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHBhdGgsIHBhcmFtcykge1xuICByZXR1cm4gdGhpcy5zZW5kKCdHRVQnLCBwYXRoLCBwYXJhbXMpO1xufTtcblxuT0F1dGgucHJvdG90eXBlLnBvc3QgPSBmdW5jdGlvbiAocGF0aCwgcGFyYW1zLCBib2R5KSB7XG4gIHJldHVybiB0aGlzLnNlbmQoJ1BPU1QnLCBwYXRoLCBwYXJhbXMsIGJvZHkpO1xufTtcblxuLypcblx0UHJvcGVyIHN0cmluZyAlZXNjYXBlIGVuY29kaW5nXG4qL1xuT0F1dGguZW5jb2RlID0gZnVuY3Rpb24gKHN0cikge1xuICAvLyAgICAgICBkaXNjdXNzIGF0OiBodHRwOi8vcGhwanMub3JnL2Z1bmN0aW9ucy9yYXd1cmxlbmNvZGUvXG4gIC8vICAgICAgb3JpZ2luYWwgYnk6IEJyZXR0IFphbWlyIChodHRwOi8vYnJldHQtemFtaXIubWUpXG4gIC8vICAgICAgICAgaW5wdXQgYnk6IHRyYXZjXG4gIC8vICAgICAgICAgaW5wdXQgYnk6IEJyZXR0IFphbWlyIChodHRwOi8vYnJldHQtemFtaXIubWUpXG4gIC8vICAgICAgICAgaW5wdXQgYnk6IE1pY2hhZWwgR3JpZXJcbiAgLy8gICAgICAgICBpbnB1dCBieTogUmF0aGVvdXNcbiAgLy8gICAgICBidWdmaXhlZCBieTogS2V2aW4gdmFuIFpvbm5ldmVsZCAoaHR0cDovL2tldmluLnZhbnpvbm5ldmVsZC5uZXQpXG4gIC8vICAgICAgYnVnZml4ZWQgYnk6IEJyZXR0IFphbWlyIChodHRwOi8vYnJldHQtemFtaXIubWUpXG4gIC8vICAgICAgYnVnZml4ZWQgYnk6IEpvcmlzXG4gIC8vIHJlaW1wbGVtZW50ZWQgYnk6IEJyZXR0IFphbWlyIChodHRwOi8vYnJldHQtemFtaXIubWUpXG4gIC8vIHJlaW1wbGVtZW50ZWQgYnk6IEJyZXR0IFphbWlyIChodHRwOi8vYnJldHQtemFtaXIubWUpXG4gIC8vICAgICAgICAgICAgIG5vdGU6IFRoaXMgcmVmbGVjdHMgUEhQIDUuMy82LjArIGJlaGF2aW9yXG4gIC8vICAgICAgICAgICAgIG5vdGU6IFBsZWFzZSBiZSBhd2FyZSB0aGF0IHRoaXMgZnVuY3Rpb24gZXhwZWN0cyB0byBlbmNvZGUgaW50byBVVEYtOCBlbmNvZGVkIHN0cmluZ3MsIGFzIGZvdW5kIG9uXG4gIC8vICAgICAgICAgICAgIG5vdGU6IHBhZ2VzIHNlcnZlZCBhcyBVVEYtOFxuICAvLyAgICAgICAgZXhhbXBsZSAxOiByYXd1cmxlbmNvZGUoJ0tldmluIHZhbiBab25uZXZlbGQhJyk7XG4gIC8vICAgICAgICByZXR1cm5zIDE6ICdLZXZpbiUyMHZhbiUyMFpvbm5ldmVsZCUyMSdcbiAgLy8gICAgICAgIGV4YW1wbGUgMjogcmF3dXJsZW5jb2RlKCdodHRwOi8va2V2aW4udmFuem9ubmV2ZWxkLm5ldC8nKTtcbiAgLy8gICAgICAgIHJldHVybnMgMjogJ2h0dHAlM0ElMkYlMkZrZXZpbi52YW56b25uZXZlbGQubmV0JTJGJ1xuICAvLyAgICAgICAgZXhhbXBsZSAzOiByYXd1cmxlbmNvZGUoJ2h0dHA6Ly93d3cuZ29vZ2xlLm5sL3NlYXJjaD9xPXBocC5qcyZpZT11dGYtOCZvZT11dGYtOCZhcT10JnJscz1jb20udWJ1bnR1OmVuLVVTOnVub2ZmaWNpYWwmY2xpZW50PWZpcmVmb3gtYScpO1xuICAvLyAgICAgICAgcmV0dXJucyAzOiAnaHR0cCUzQSUyRiUyRnd3dy5nb29nbGUubmwlMkZzZWFyY2glM0ZxJTNEcGhwLmpzJTI2aWUlM0R1dGYtOCUyNm9lJTNEdXRmLTglMjZhcSUzRHQlMjZybHMlM0Rjb20udWJ1bnR1JTNBZW4tVVMlM0F1bm9mZmljaWFsJTI2Y2xpZW50JTNEZmlyZWZveC1hJ1xuXG4gIHN0ciA9IChzdHIgKyAnJykudG9TdHJpbmcoKTtcblxuICAvLyBUaWxkZSBzaG91bGQgYmUgYWxsb3dlZCB1bmVzY2FwZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mIFBIUCAoYXMgcmVmbGVjdGVkIGJlbG93KSwgYnV0IGlmIHlvdSB3YW50IHRvIHJlZmxlY3QgY3VycmVudFxuICAvLyBQSFAgYmVoYXZpb3IsIHlvdSB3b3VsZCBuZWVkIHRvIGFkZCBcIi5yZXBsYWNlKC9+L2csICclN0UnKTtcIiB0byB0aGUgZm9sbG93aW5nLlxuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cilcbiAgICAucmVwbGFjZSgvIS9nLCAnJTIxJylcbiAgICAucmVwbGFjZSgvJy9nLCAnJTI3JylcbiAgICAucmVwbGFjZSgvXFwoL2csICclMjgnKVxuICAgIC5yZXBsYWNlKC9cXCkvZywgJyUyOScpXG4gICAgLnJlcGxhY2UoL1xcKi9nLCAnJTJBJyk7XG59O1xuXG5PQXV0aC5zaWduYXR1cmVNZXRob2QgPSAnSE1BQy1TSEExJztcbk9BdXRoLnZlcnNpb24gPSAnMS4wJztcblxuLypcblx0R2VuZXJhdGUgYSBub25jZVxuKi9cbk9BdXRoLm5vbmNlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGV4dCA9ICcnO1xuICB2YXIgcG9zc2libGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzA7IGkrKykgdGV4dCArPSBwb3NzaWJsZS5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcG9zc2libGUubGVuZ3RoKSk7XG5cbiAgcmV0dXJuIHRleHQ7XG59O1xuXG5PQXV0aC5idWlsZFBhcmFtZXRlclN0cmluZyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgLy8gU29ydCBrZXlzIGFuZCBlbmNvZGUgdmFsdWVzXG4gIGlmIChvYmopIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaikuc29ydCgpO1xuXG4gICAgLy8gTWFwIGtleT12YWx1ZSwgam9pbiB0aGVtIGJ5ICZcbiAgICByZXR1cm4ga2V5c1xuICAgICAgLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBrZXkgKyAnPScgKyBPQXV0aC5lbmNvZGUob2JqW2tleV0pO1xuICAgICAgfSlcbiAgICAgIC5qb2luKCcmJyk7XG4gIH1cblxuICByZXR1cm4gJyc7XG59O1xuXG4vKlxuXHRCdWlsZCB0aGUgc2lnbmF0dXJlIHN0cmluZyBmcm9tIHRoZSBvYmplY3RcbiovXG5cbk9BdXRoLmJ1aWxkU2lnbmF0dXJlU3RyaW5nID0gZnVuY3Rpb24gKG1ldGhvZCwgdXJsLCBwYXJhbWV0ZXJzKSB7XG4gIHJldHVybiBbbWV0aG9kLnRvVXBwZXJDYXNlKCksIE9BdXRoLmVuY29kZSh1cmwpLCBPQXV0aC5lbmNvZGUocGFyYW1ldGVycyldLmpvaW4oJyYnKTtcbn07XG5cbi8qXG5cdFJldHVucyBlbmNvZGVkIEhNQUMtU0hBMSBmcm9tIGtleSBhbmQgdGV4dFxuKi9cbk9BdXRoLnNpZ25hdHVyZSA9IGZ1bmN0aW9uICh0ZXh0LCBrZXkpIHtcbiAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG4gIHJldHVybiBPQXV0aC5lbmNvZGUoY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTEnLCBrZXkpLnVwZGF0ZSh0ZXh0KS5kaWdlc3QoJ2Jhc2U2NCcpKTtcbn07XG5cbk9BdXRoLnNpZ25SZXF1ZXN0ID0gZnVuY3Rpb24gKHJlcXVlc3QsIG9hdXRoX3BhcmFtZXRlcnMsIGNvbnN1bWVyX3NlY3JldCwgYXV0aF90b2tlbl9zZWNyZXQpIHtcbiAgb2F1dGhfcGFyYW1ldGVycyA9IG9hdXRoX3BhcmFtZXRlcnMgfHwge307XG5cbiAgLy8gU2V0IGRlZmF1bHQgdmFsdWVzXG4gIGlmICghb2F1dGhfcGFyYW1ldGVycy5vYXV0aF9ub25jZSkge1xuICAgIG9hdXRoX3BhcmFtZXRlcnMub2F1dGhfbm9uY2UgPSBPQXV0aC5ub25jZSgpO1xuICB9XG4gIGlmICghb2F1dGhfcGFyYW1ldGVycy5vYXV0aF90aW1lc3RhbXApIHtcbiAgICBvYXV0aF9wYXJhbWV0ZXJzLm9hdXRoX3RpbWVzdGFtcCA9IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgfVxuICBpZiAoIW9hdXRoX3BhcmFtZXRlcnMub2F1dGhfc2lnbmF0dXJlX21ldGhvZCkge1xuICAgIG9hdXRoX3BhcmFtZXRlcnMub2F1dGhfc2lnbmF0dXJlX21ldGhvZCA9IE9BdXRoLnNpZ25hdHVyZU1ldGhvZDtcbiAgfVxuICBpZiAoIW9hdXRoX3BhcmFtZXRlcnMub2F1dGhfdmVyc2lvbikge1xuICAgIG9hdXRoX3BhcmFtZXRlcnMub2F1dGhfdmVyc2lvbiA9IE9BdXRoLnZlcnNpb247XG4gIH1cblxuICBpZiAoIWF1dGhfdG9rZW5fc2VjcmV0KSB7XG4gICAgYXV0aF90b2tlbl9zZWNyZXQgPSAnJztcbiAgfVxuICAvLyBGb3JjZSBHRVQgbWV0aG9kIGlmIHVuc2V0XG4gIGlmICghcmVxdWVzdC5tZXRob2QpIHtcbiAgICByZXF1ZXN0Lm1ldGhvZCA9ICdHRVQnO1xuICB9XG5cbiAgLy8gQ29sbGVjdCAgYWxsIHRoZSBwYXJhbWV0ZXJzIGluIG9uZSBzaWduYXR1cmVQYXJhbWV0ZXJzIG9iamVjdFxuICB2YXIgc2lnbmF0dXJlUGFyYW1zID0ge307XG4gIHZhciBwYXJhbWV0ZXJzVG9NZXJnZSA9IFtyZXF1ZXN0LnBhcmFtcywgcmVxdWVzdC5ib2R5LCBvYXV0aF9wYXJhbWV0ZXJzXTtcbiAgZm9yICh2YXIgaSBpbiBwYXJhbWV0ZXJzVG9NZXJnZSkge1xuICAgIHZhciBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc1RvTWVyZ2VbaV07XG4gICAgZm9yICh2YXIgayBpbiBwYXJhbWV0ZXJzKSB7XG4gICAgICBzaWduYXR1cmVQYXJhbXNba10gPSBwYXJhbWV0ZXJzW2tdO1xuICAgIH1cbiAgfVxuXG4gIC8vIENyZWF0ZSBhIHN0cmluZyBiYXNlZCBvbiB0aGUgcGFyYW1ldGVyc1xuICB2YXIgcGFyYW1ldGVyU3RyaW5nID0gT0F1dGguYnVpbGRQYXJhbWV0ZXJTdHJpbmcoc2lnbmF0dXJlUGFyYW1zKTtcblxuICAvLyBCdWlsZCB0aGUgc2lnbmF0dXJlIHN0cmluZ1xuICB2YXIgdXJsID0gJ2h0dHBzOi8vJyArIHJlcXVlc3QuaG9zdCArICcnICsgcmVxdWVzdC5wYXRoO1xuXG4gIHZhciBzaWduYXR1cmVTdHJpbmcgPSBPQXV0aC5idWlsZFNpZ25hdHVyZVN0cmluZyhyZXF1ZXN0Lm1ldGhvZCwgdXJsLCBwYXJhbWV0ZXJTdHJpbmcpO1xuICAvLyBIYXNoIHRoZSBzaWduYXR1cmUgc3RyaW5nXG4gIHZhciBzaWduYXR1cmVLZXkgPSBbT0F1dGguZW5jb2RlKGNvbnN1bWVyX3NlY3JldCksIE9BdXRoLmVuY29kZShhdXRoX3Rva2VuX3NlY3JldCldLmpvaW4oJyYnKTtcblxuICB2YXIgc2lnbmF0dXJlID0gT0F1dGguc2lnbmF0dXJlKHNpZ25hdHVyZVN0cmluZywgc2lnbmF0dXJlS2V5KTtcblxuICAvLyBTZXQgdGhlIHNpZ25hdHVyZSBpbiB0aGUgcGFyYW1zXG4gIG9hdXRoX3BhcmFtZXRlcnMub2F1dGhfc2lnbmF0dXJlID0gc2lnbmF0dXJlO1xuICBpZiAoIXJlcXVlc3QuaGVhZGVycykge1xuICAgIHJlcXVlc3QuaGVhZGVycyA9IHt9O1xuICB9XG5cbiAgLy8gU2V0IHRoZSBhdXRob3JpemF0aW9uIGhlYWRlclxuICB2YXIgYXV0aEhlYWRlciA9IE9iamVjdC5rZXlzKG9hdXRoX3BhcmFtZXRlcnMpXG4gICAgLnNvcnQoKVxuICAgIC5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgdmFyIHZhbHVlID0gb2F1dGhfcGFyYW1ldGVyc1trZXldO1xuICAgICAgcmV0dXJuIGtleSArICc9XCInICsgdmFsdWUgKyAnXCInO1xuICAgIH0pXG4gICAgLmpvaW4oJywgJyk7XG5cbiAgcmVxdWVzdC5oZWFkZXJzLkF1dGhvcml6YXRpb24gPSAnT0F1dGggJyArIGF1dGhIZWFkZXI7XG5cbiAgLy8gU2V0IHRoZSBjb250ZW50IHR5cGUgaGVhZGVyXG4gIHJlcXVlc3QuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJztcbiAgcmV0dXJuIHJlcXVlc3Q7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9BdXRoO1xuIl19
202
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJodHRwcyIsInJlcXVpcmUiLCJjcnlwdG8iLCJQYXJzZSIsIk9BdXRoIiwib3B0aW9ucyIsIkVycm9yIiwiSU5URVJOQUxfU0VSVkVSX0VSUk9SIiwiY29uc3VtZXJfa2V5IiwiY29uc3VtZXJfc2VjcmV0IiwiYXV0aF90b2tlbiIsImF1dGhfdG9rZW5fc2VjcmV0IiwiaG9zdCIsIm9hdXRoX3BhcmFtcyIsInByb3RvdHlwZSIsInNlbmQiLCJtZXRob2QiLCJwYXRoIiwicGFyYW1zIiwiYm9keSIsInJlcXVlc3QiLCJidWlsZFJlcXVlc3QiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImh0dHBSZXF1ZXN0IiwicmVzIiwiZGF0YSIsIm9uIiwiY2h1bmsiLCJKU09OIiwicGFyc2UiLCJ3cml0ZSIsImVuZCIsImluZGV4T2YiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwiYnVpbGRQYXJhbWV0ZXJTdHJpbmciLCJ0b1VwcGVyQ2FzZSIsIm9hdXRoX2NvbnN1bWVyX2tleSIsInNpZ25SZXF1ZXN0IiwiZ2V0IiwicG9zdCIsImVuY29kZSIsInN0ciIsInRvU3RyaW5nIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicmVwbGFjZSIsInNpZ25hdHVyZU1ldGhvZCIsInZlcnNpb24iLCJub25jZSIsInRleHQiLCJwb3NzaWJsZSIsImkiLCJjaGFyQXQiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJvYmoiLCJzb3J0IiwibWFwIiwia2V5Iiwiam9pbiIsImJ1aWxkU2lnbmF0dXJlU3RyaW5nIiwidXJsIiwicGFyYW1ldGVycyIsInNpZ25hdHVyZSIsImNyZWF0ZUhtYWMiLCJ1cGRhdGUiLCJkaWdlc3QiLCJvYXV0aF9wYXJhbWV0ZXJzIiwib2F1dGhfbm9uY2UiLCJvYXV0aF90aW1lc3RhbXAiLCJEYXRlIiwiZ2V0VGltZSIsIm9hdXRoX3NpZ25hdHVyZV9tZXRob2QiLCJvYXV0aF92ZXJzaW9uIiwic2lnbmF0dXJlUGFyYW1zIiwicGFyYW1ldGVyc1RvTWVyZ2UiLCJrIiwicGFyYW1ldGVyU3RyaW5nIiwic2lnbmF0dXJlU3RyaW5nIiwic2lnbmF0dXJlS2V5Iiwib2F1dGhfc2lnbmF0dXJlIiwiaGVhZGVycyIsImF1dGhIZWFkZXIiLCJ2YWx1ZSIsIkF1dGhvcml6YXRpb24iLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0F1dGgvT0F1dGgxQ2xpZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBodHRwcyA9IHJlcXVpcmUoJ2h0dHBzJyksXG4gIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xudmFyIFBhcnNlID0gcmVxdWlyZSgncGFyc2Uvbm9kZScpLlBhcnNlO1xuXG52YXIgT0F1dGggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5URVJOQUxfU0VSVkVSX0VSUk9SLCAnTm8gb3B0aW9ucyBwYXNzZWQgdG8gT0F1dGgnKTtcbiAgfVxuICB0aGlzLmNvbnN1bWVyX2tleSA9IG9wdGlvbnMuY29uc3VtZXJfa2V5O1xuICB0aGlzLmNvbnN1bWVyX3NlY3JldCA9IG9wdGlvbnMuY29uc3VtZXJfc2VjcmV0O1xuICB0aGlzLmF1dGhfdG9rZW4gPSBvcHRpb25zLmF1dGhfdG9rZW47XG4gIHRoaXMuYXV0aF90b2tlbl9zZWNyZXQgPSBvcHRpb25zLmF1dGhfdG9rZW5fc2VjcmV0O1xuICB0aGlzLmhvc3QgPSBvcHRpb25zLmhvc3Q7XG4gIHRoaXMub2F1dGhfcGFyYW1zID0gb3B0aW9ucy5vYXV0aF9wYXJhbXMgfHwge307XG59O1xuXG5PQXV0aC5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uIChtZXRob2QsIHBhdGgsIHBhcmFtcywgYm9keSkge1xuICB2YXIgcmVxdWVzdCA9IHRoaXMuYnVpbGRSZXF1ZXN0KG1ldGhvZCwgcGF0aCwgcGFyYW1zLCBib2R5KTtcbiAgLy8gRW5jb2RlIHRoZSBib2R5IHByb3Blcmx5LCB0aGUgY3VycmVudCBQYXJzZSBJbXBsZW1lbnRhdGlvbiBkb24ndCBkbyBpdCBwcm9wZXJseVxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciBodHRwUmVxdWVzdCA9IGh0dHBzXG4gICAgICAucmVxdWVzdChyZXF1ZXN0LCBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgIHZhciBkYXRhID0gJyc7XG4gICAgICAgIHJlcy5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykge1xuICAgICAgICAgIGRhdGEgKz0gY2h1bms7XG4gICAgICAgIH0pO1xuICAgICAgICByZXMub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgICAub24oJ2Vycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZWplY3QoJ0ZhaWxlZCB0byBtYWtlIGFuIE9BdXRoIHJlcXVlc3QnKTtcbiAgICAgIH0pO1xuICAgIGlmIChyZXF1ZXN0LmJvZHkpIHtcbiAgICAgIGh0dHBSZXF1ZXN0LndyaXRlKHJlcXVlc3QuYm9keSk7XG4gICAgfVxuICAgIGh0dHBSZXF1ZXN0LmVuZCgpO1xuICB9KTtcbn07XG5cbk9BdXRoLnByb3RvdHlwZS5idWlsZFJlcXVlc3QgPSBmdW5jdGlvbiAobWV0aG9kLCBwYXRoLCBwYXJhbXMsIGJvZHkpIHtcbiAgaWYgKHBhdGguaW5kZXhPZignLycpICE9IDApIHtcbiAgICBwYXRoID0gJy8nICsgcGF0aDtcbiAgfVxuICBpZiAocGFyYW1zICYmIE9iamVjdC5rZXlzKHBhcmFtcykubGVuZ3RoID4gMCkge1xuICAgIHBhdGggKz0gJz8nICsgT0F1dGguYnVpbGRQYXJhbWV0ZXJTdHJpbmcocGFyYW1zKTtcbiAgfVxuXG4gIHZhciByZXF1ZXN0ID0ge1xuICAgIGhvc3Q6IHRoaXMuaG9zdCxcbiAgICBwYXRoOiBwYXRoLFxuICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gIH07XG5cbiAgdmFyIG9hdXRoX3BhcmFtcyA9IHRoaXMub2F1dGhfcGFyYW1zIHx8IHt9O1xuICBvYXV0aF9wYXJhbXMub2F1dGhfY29uc3VtZXJfa2V5ID0gdGhpcy5jb25zdW1lcl9rZXk7XG4gIGlmICh0aGlzLmF1dGhfdG9rZW4pIHtcbiAgICBvYXV0aF9wYXJhbXNbJ29hdXRoX3Rva2VuJ10gPSB0aGlzLmF1dGhfdG9rZW47XG4gIH1cblxuICByZXF1ZXN0ID0gT0F1dGguc2lnblJlcXVlc3QocmVxdWVzdCwgb2F1dGhfcGFyYW1zLCB0aGlzLmNvbnN1bWVyX3NlY3JldCwgdGhpcy5hdXRoX3Rva2VuX3NlY3JldCk7XG5cbiAgaWYgKGJvZHkgJiYgT2JqZWN0LmtleXMoYm9keSkubGVuZ3RoID4gMCkge1xuICAgIHJlcXVlc3QuYm9keSA9IE9BdXRoLmJ1aWxkUGFyYW1ldGVyU3RyaW5nKGJvZHkpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0O1xufTtcblxuT0F1dGgucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChwYXRoLCBwYXJhbXMpIHtcbiAgcmV0dXJuIHRoaXMuc2VuZCgnR0VUJywgcGF0aCwgcGFyYW1zKTtcbn07XG5cbk9BdXRoLnByb3RvdHlwZS5wb3N0ID0gZnVuY3Rpb24gKHBhdGgsIHBhcmFtcywgYm9keSkge1xuICByZXR1cm4gdGhpcy5zZW5kKCdQT1NUJywgcGF0aCwgcGFyYW1zLCBib2R5KTtcbn07XG5cbi8qXG5cdFByb3BlciBzdHJpbmcgJWVzY2FwZSBlbmNvZGluZ1xuKi9cbk9BdXRoLmVuY29kZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgLy8gICAgICAgZGlzY3VzcyBhdDogaHR0cDovL3BocGpzLm9yZy9mdW5jdGlvbnMvcmF3dXJsZW5jb2RlL1xuICAvLyAgICAgIG9yaWdpbmFsIGJ5OiBCcmV0dCBaYW1pciAoaHR0cDovL2JyZXR0LXphbWlyLm1lKVxuICAvLyAgICAgICAgIGlucHV0IGJ5OiB0cmF2Y1xuICAvLyAgICAgICAgIGlucHV0IGJ5OiBCcmV0dCBaYW1pciAoaHR0cDovL2JyZXR0LXphbWlyLm1lKVxuICAvLyAgICAgICAgIGlucHV0IGJ5OiBNaWNoYWVsIEdyaWVyXG4gIC8vICAgICAgICAgaW5wdXQgYnk6IFJhdGhlb3VzXG4gIC8vICAgICAgYnVnZml4ZWQgYnk6IEtldmluIHZhbiBab25uZXZlbGQgKGh0dHA6Ly9rZXZpbi52YW56b25uZXZlbGQubmV0KVxuICAvLyAgICAgIGJ1Z2ZpeGVkIGJ5OiBCcmV0dCBaYW1pciAoaHR0cDovL2JyZXR0LXphbWlyLm1lKVxuICAvLyAgICAgIGJ1Z2ZpeGVkIGJ5OiBKb3Jpc1xuICAvLyByZWltcGxlbWVudGVkIGJ5OiBCcmV0dCBaYW1pciAoaHR0cDovL2JyZXR0LXphbWlyLm1lKVxuICAvLyByZWltcGxlbWVudGVkIGJ5OiBCcmV0dCBaYW1pciAoaHR0cDovL2JyZXR0LXphbWlyLm1lKVxuICAvLyAgICAgICAgICAgICBub3RlOiBUaGlzIHJlZmxlY3RzIFBIUCA1LjMvNi4wKyBiZWhhdmlvclxuICAvLyAgICAgICAgICAgICBub3RlOiBQbGVhc2UgYmUgYXdhcmUgdGhhdCB0aGlzIGZ1bmN0aW9uIGV4cGVjdHMgdG8gZW5jb2RlIGludG8gVVRGLTggZW5jb2RlZCBzdHJpbmdzLCBhcyBmb3VuZCBvblxuICAvLyAgICAgICAgICAgICBub3RlOiBwYWdlcyBzZXJ2ZWQgYXMgVVRGLThcbiAgLy8gICAgICAgIGV4YW1wbGUgMTogcmF3dXJsZW5jb2RlKCdLZXZpbiB2YW4gWm9ubmV2ZWxkIScpO1xuICAvLyAgICAgICAgcmV0dXJucyAxOiAnS2V2aW4lMjB2YW4lMjBab25uZXZlbGQlMjEnXG4gIC8vICAgICAgICBleGFtcGxlIDI6IHJhd3VybGVuY29kZSgnaHR0cDovL2tldmluLnZhbnpvbm5ldmVsZC5uZXQvJyk7XG4gIC8vICAgICAgICByZXR1cm5zIDI6ICdodHRwJTNBJTJGJTJGa2V2aW4udmFuem9ubmV2ZWxkLm5ldCUyRidcbiAgLy8gICAgICAgIGV4YW1wbGUgMzogcmF3dXJsZW5jb2RlKCdodHRwOi8vd3d3Lmdvb2dsZS5ubC9zZWFyY2g/cT1waHAuanMmaWU9dXRmLTgmb2U9dXRmLTgmYXE9dCZybHM9Y29tLnVidW50dTplbi1VUzp1bm9mZmljaWFsJmNsaWVudD1maXJlZm94LWEnKTtcbiAgLy8gICAgICAgIHJldHVybnMgMzogJ2h0dHAlM0ElMkYlMkZ3d3cuZ29vZ2xlLm5sJTJGc2VhcmNoJTNGcSUzRHBocC5qcyUyNmllJTNEdXRmLTglMjZvZSUzRHV0Zi04JTI2YXElM0R0JTI2cmxzJTNEY29tLnVidW50dSUzQWVuLVVTJTNBdW5vZmZpY2lhbCUyNmNsaWVudCUzRGZpcmVmb3gtYSdcblxuICBzdHIgPSAoc3RyICsgJycpLnRvU3RyaW5nKCk7XG5cbiAgLy8gVGlsZGUgc2hvdWxkIGJlIGFsbG93ZWQgdW5lc2NhcGVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiBQSFAgKGFzIHJlZmxlY3RlZCBiZWxvdyksIGJ1dCBpZiB5b3Ugd2FudCB0byByZWZsZWN0IGN1cnJlbnRcbiAgLy8gUEhQIGJlaGF2aW9yLCB5b3Ugd291bGQgbmVlZCB0byBhZGQgXCIucmVwbGFjZSgvfi9nLCAnJTdFJyk7XCIgdG8gdGhlIGZvbGxvd2luZy5cbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpXG4gICAgLnJlcGxhY2UoLyEvZywgJyUyMScpXG4gICAgLnJlcGxhY2UoLycvZywgJyUyNycpXG4gICAgLnJlcGxhY2UoL1xcKC9nLCAnJTI4JylcbiAgICAucmVwbGFjZSgvXFwpL2csICclMjknKVxuICAgIC5yZXBsYWNlKC9cXCovZywgJyUyQScpO1xufTtcblxuT0F1dGguc2lnbmF0dXJlTWV0aG9kID0gJ0hNQUMtU0hBMSc7XG5PQXV0aC52ZXJzaW9uID0gJzEuMCc7XG5cbi8qXG5cdEdlbmVyYXRlIGEgbm9uY2VcbiovXG5PQXV0aC5ub25jZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRleHQgPSAnJztcbiAgdmFyIHBvc3NpYmxlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5JztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDMwOyBpKyspIHRleHQgKz0gcG9zc2libGUuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHBvc3NpYmxlLmxlbmd0aCkpO1xuXG4gIHJldHVybiB0ZXh0O1xufTtcblxuT0F1dGguYnVpbGRQYXJhbWV0ZXJTdHJpbmcgPSBmdW5jdGlvbiAob2JqKSB7XG4gIC8vIFNvcnQga2V5cyBhbmQgZW5jb2RlIHZhbHVlc1xuICBpZiAob2JqKSB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopLnNvcnQoKTtcblxuICAgIC8vIE1hcCBrZXk9dmFsdWUsIGpvaW4gdGhlbSBieSAmXG4gICAgcmV0dXJuIGtleXNcbiAgICAgIC5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4ga2V5ICsgJz0nICsgT0F1dGguZW5jb2RlKG9ialtrZXldKTtcbiAgICAgIH0pXG4gICAgICAuam9pbignJicpO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufTtcblxuLypcblx0QnVpbGQgdGhlIHNpZ25hdHVyZSBzdHJpbmcgZnJvbSB0aGUgb2JqZWN0XG4qL1xuXG5PQXV0aC5idWlsZFNpZ25hdHVyZVN0cmluZyA9IGZ1bmN0aW9uIChtZXRob2QsIHVybCwgcGFyYW1ldGVycykge1xuICByZXR1cm4gW21ldGhvZC50b1VwcGVyQ2FzZSgpLCBPQXV0aC5lbmNvZGUodXJsKSwgT0F1dGguZW5jb2RlKHBhcmFtZXRlcnMpXS5qb2luKCcmJyk7XG59O1xuXG4vKlxuXHRSZXR1bnMgZW5jb2RlZCBITUFDLVNIQTEgZnJvbSBrZXkgYW5kIHRleHRcbiovXG5PQXV0aC5zaWduYXR1cmUgPSBmdW5jdGlvbiAodGV4dCwga2V5KSB7XG4gIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuICByZXR1cm4gT0F1dGguZW5jb2RlKGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywga2V5KS51cGRhdGUodGV4dCkuZGlnZXN0KCdiYXNlNjQnKSk7XG59O1xuXG5PQXV0aC5zaWduUmVxdWVzdCA9IGZ1bmN0aW9uIChyZXF1ZXN0LCBvYXV0aF9wYXJhbWV0ZXJzLCBjb25zdW1lcl9zZWNyZXQsIGF1dGhfdG9rZW5fc2VjcmV0KSB7XG4gIG9hdXRoX3BhcmFtZXRlcnMgPSBvYXV0aF9wYXJhbWV0ZXJzIHx8IHt9O1xuXG4gIC8vIFNldCBkZWZhdWx0IHZhbHVlc1xuICBpZiAoIW9hdXRoX3BhcmFtZXRlcnMub2F1dGhfbm9uY2UpIHtcbiAgICBvYXV0aF9wYXJhbWV0ZXJzLm9hdXRoX25vbmNlID0gT0F1dGgubm9uY2UoKTtcbiAgfVxuICBpZiAoIW9hdXRoX3BhcmFtZXRlcnMub2F1dGhfdGltZXN0YW1wKSB7XG4gICAgb2F1dGhfcGFyYW1ldGVycy5vYXV0aF90aW1lc3RhbXAgPSBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCk7XG4gIH1cbiAgaWYgKCFvYXV0aF9wYXJhbWV0ZXJzLm9hdXRoX3NpZ25hdHVyZV9tZXRob2QpIHtcbiAgICBvYXV0aF9wYXJhbWV0ZXJzLm9hdXRoX3NpZ25hdHVyZV9tZXRob2QgPSBPQXV0aC5zaWduYXR1cmVNZXRob2Q7XG4gIH1cbiAgaWYgKCFvYXV0aF9wYXJhbWV0ZXJzLm9hdXRoX3ZlcnNpb24pIHtcbiAgICBvYXV0aF9wYXJhbWV0ZXJzLm9hdXRoX3ZlcnNpb24gPSBPQXV0aC52ZXJzaW9uO1xuICB9XG5cbiAgaWYgKCFhdXRoX3Rva2VuX3NlY3JldCkge1xuICAgIGF1dGhfdG9rZW5fc2VjcmV0ID0gJyc7XG4gIH1cbiAgLy8gRm9yY2UgR0VUIG1ldGhvZCBpZiB1bnNldFxuICBpZiAoIXJlcXVlc3QubWV0aG9kKSB7XG4gICAgcmVxdWVzdC5tZXRob2QgPSAnR0VUJztcbiAgfVxuXG4gIC8vIENvbGxlY3QgIGFsbCB0aGUgcGFyYW1ldGVycyBpbiBvbmUgc2lnbmF0dXJlUGFyYW1ldGVycyBvYmplY3RcbiAgdmFyIHNpZ25hdHVyZVBhcmFtcyA9IHt9O1xuICB2YXIgcGFyYW1ldGVyc1RvTWVyZ2UgPSBbcmVxdWVzdC5wYXJhbXMsIHJlcXVlc3QuYm9keSwgb2F1dGhfcGFyYW1ldGVyc107XG4gIGZvciAodmFyIGkgaW4gcGFyYW1ldGVyc1RvTWVyZ2UpIHtcbiAgICB2YXIgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNUb01lcmdlW2ldO1xuICAgIGZvciAodmFyIGsgaW4gcGFyYW1ldGVycykge1xuICAgICAgc2lnbmF0dXJlUGFyYW1zW2tdID0gcGFyYW1ldGVyc1trXTtcbiAgICB9XG4gIH1cblxuICAvLyBDcmVhdGUgYSBzdHJpbmcgYmFzZWQgb24gdGhlIHBhcmFtZXRlcnNcbiAgdmFyIHBhcmFtZXRlclN0cmluZyA9IE9BdXRoLmJ1aWxkUGFyYW1ldGVyU3RyaW5nKHNpZ25hdHVyZVBhcmFtcyk7XG5cbiAgLy8gQnVpbGQgdGhlIHNpZ25hdHVyZSBzdHJpbmdcbiAgdmFyIHVybCA9ICdodHRwczovLycgKyByZXF1ZXN0Lmhvc3QgKyAnJyArIHJlcXVlc3QucGF0aDtcblxuICB2YXIgc2lnbmF0dXJlU3RyaW5nID0gT0F1dGguYnVpbGRTaWduYXR1cmVTdHJpbmcocmVxdWVzdC5tZXRob2QsIHVybCwgcGFyYW1ldGVyU3RyaW5nKTtcbiAgLy8gSGFzaCB0aGUgc2lnbmF0dXJlIHN0cmluZ1xuICB2YXIgc2lnbmF0dXJlS2V5ID0gW09BdXRoLmVuY29kZShjb25zdW1lcl9zZWNyZXQpLCBPQXV0aC5lbmNvZGUoYXV0aF90b2tlbl9zZWNyZXQpXS5qb2luKCcmJyk7XG5cbiAgdmFyIHNpZ25hdHVyZSA9IE9BdXRoLnNpZ25hdHVyZShzaWduYXR1cmVTdHJpbmcsIHNpZ25hdHVyZUtleSk7XG5cbiAgLy8gU2V0IHRoZSBzaWduYXR1cmUgaW4gdGhlIHBhcmFtc1xuICBvYXV0aF9wYXJhbWV0ZXJzLm9hdXRoX3NpZ25hdHVyZSA9IHNpZ25hdHVyZTtcbiAgaWYgKCFyZXF1ZXN0LmhlYWRlcnMpIHtcbiAgICByZXF1ZXN0LmhlYWRlcnMgPSB7fTtcbiAgfVxuXG4gIC8vIFNldCB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXJcbiAgdmFyIGF1dGhIZWFkZXIgPSBPYmplY3Qua2V5cyhvYXV0aF9wYXJhbWV0ZXJzKVxuICAgIC5zb3J0KClcbiAgICAubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9hdXRoX3BhcmFtZXRlcnNba2V5XTtcbiAgICAgIHJldHVybiBrZXkgKyAnPVwiJyArIHZhbHVlICsgJ1wiJztcbiAgICB9KVxuICAgIC5qb2luKCcsICcpO1xuXG4gIHJlcXVlc3QuaGVhZGVycy5BdXRob3JpemF0aW9uID0gJ09BdXRoICcgKyBhdXRoSGVhZGVyO1xuXG4gIC8vIFNldCB0aGUgY29udGVudCB0eXBlIGhlYWRlclxuICByZXF1ZXN0LmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc7XG4gIHJldHVybiByZXF1ZXN0O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPQXV0aDtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFJQSxLQUFLLEdBQUdDLE9BQU8sQ0FBQyxPQUFPLENBQUM7RUFDMUJDLE1BQU0sR0FBR0QsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUM1QixJQUFJRSxLQUFLLEdBQUdGLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQ0UsS0FBSztBQUV2QyxJQUFJQyxLQUFLLEdBQUcsVUFBVUMsT0FBTyxFQUFFO0VBQzdCLElBQUksQ0FBQ0EsT0FBTyxFQUFFO0lBQ1osTUFBTSxJQUFJRixLQUFLLENBQUNHLEtBQUssQ0FBQ0gsS0FBSyxDQUFDRyxLQUFLLENBQUNDLHFCQUFxQixFQUFFLDRCQUE0QixDQUFDO0VBQ3hGO0VBQ0EsSUFBSSxDQUFDQyxZQUFZLEdBQUdILE9BQU8sQ0FBQ0csWUFBWTtFQUN4QyxJQUFJLENBQUNDLGVBQWUsR0FBR0os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