parse-server 6.4.0 → 6.5.0-alpha.2

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 (188) hide show
  1. package/README.md +8 -6
  2. package/lib/AccountLockout.js +1 -1
  3. package/lib/Adapters/AdapterLoader.js +1 -1
  4. package/lib/Adapters/Analytics/AnalyticsAdapter.js +1 -1
  5. package/lib/Adapters/Auth/AuthAdapter.js +1 -1
  6. package/lib/Adapters/Auth/OAuth1Client.js +1 -1
  7. package/lib/Adapters/Auth/apple.js +1 -1
  8. package/lib/Adapters/Auth/facebook.js +1 -1
  9. package/lib/Adapters/Auth/gcenter.js +1 -1
  10. package/lib/Adapters/Auth/github.js +1 -1
  11. package/lib/Adapters/Auth/google.js +1 -1
  12. package/lib/Adapters/Auth/gpgames.js +1 -1
  13. package/lib/Adapters/Auth/httpsRequest.js +1 -1
  14. package/lib/Adapters/Auth/index.js +1 -1
  15. package/lib/Adapters/Auth/instagram.js +1 -1
  16. package/lib/Adapters/Auth/janraincapture.js +1 -1
  17. package/lib/Adapters/Auth/janrainengage.js +1 -1
  18. package/lib/Adapters/Auth/keycloak.js +1 -1
  19. package/lib/Adapters/Auth/ldap.js +1 -1
  20. package/lib/Adapters/Auth/line.js +1 -1
  21. package/lib/Adapters/Auth/linkedin.js +1 -1
  22. package/lib/Adapters/Auth/meetup.js +1 -1
  23. package/lib/Adapters/Auth/mfa.js +1 -1
  24. package/lib/Adapters/Auth/microsoft.js +1 -1
  25. package/lib/Adapters/Auth/oauth2.js +1 -1
  26. package/lib/Adapters/Auth/phantauth.js +1 -1
  27. package/lib/Adapters/Auth/qq.js +1 -1
  28. package/lib/Adapters/Auth/spotify.js +1 -1
  29. package/lib/Adapters/Auth/twitter.js +1 -1
  30. package/lib/Adapters/Auth/vkontakte.js +1 -1
  31. package/lib/Adapters/Auth/wechat.js +1 -1
  32. package/lib/Adapters/Auth/weibo.js +1 -1
  33. package/lib/Adapters/Cache/CacheAdapter.js +1 -1
  34. package/lib/Adapters/Cache/InMemoryCache.js +1 -1
  35. package/lib/Adapters/Cache/InMemoryCacheAdapter.js +1 -1
  36. package/lib/Adapters/Cache/LRUCache.js +1 -1
  37. package/lib/Adapters/Cache/NullCacheAdapter.js +1 -1
  38. package/lib/Adapters/Cache/RedisCacheAdapter.js +1 -1
  39. package/lib/Adapters/Cache/SchemaCache.js +1 -1
  40. package/lib/Adapters/Email/MailAdapter.js +1 -1
  41. package/lib/Adapters/Files/FilesAdapter.js +1 -1
  42. package/lib/Adapters/Files/GridFSBucketAdapter.js +1 -1
  43. package/lib/Adapters/Files/GridStoreAdapter.js +1 -1
  44. package/lib/Adapters/Logger/LoggerAdapter.js +1 -1
  45. package/lib/Adapters/Logger/WinstonLogger.js +1 -1
  46. package/lib/Adapters/Logger/WinstonLoggerAdapter.js +1 -1
  47. package/lib/Adapters/MessageQueue/EventEmitterMQ.js +1 -1
  48. package/lib/Adapters/PubSub/EventEmitterPubSub.js +1 -1
  49. package/lib/Adapters/PubSub/PubSubAdapter.js +6 -1
  50. package/lib/Adapters/PubSub/RedisPubSub.js +1 -1
  51. package/lib/Adapters/Push/PushAdapter.js +1 -1
  52. package/lib/Adapters/Storage/Mongo/MongoCollection.js +1 -1
  53. package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +1 -1
  54. package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +3 -2
  55. package/lib/Adapters/Storage/Mongo/MongoTransform.js +10 -1
  56. package/lib/Adapters/Storage/Postgres/PostgresClient.js +1 -1
  57. package/lib/Adapters/Storage/Postgres/PostgresConfigParser.js +1 -1
  58. package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +4 -2
  59. package/lib/Adapters/Storage/Postgres/sql/index.js +1 -1
  60. package/lib/Adapters/WebSocketServer/WSAdapter.js +1 -1
  61. package/lib/Adapters/WebSocketServer/WSSAdapter.js +1 -1
  62. package/lib/Auth.js +1 -1
  63. package/lib/ClientSDK.js +1 -1
  64. package/lib/Config.js +1 -1
  65. package/lib/Controllers/AdaptableController.js +1 -1
  66. package/lib/Controllers/AnalyticsController.js +1 -1
  67. package/lib/Controllers/CacheController.js +1 -1
  68. package/lib/Controllers/DatabaseController.js +40 -12
  69. package/lib/Controllers/FilesController.js +1 -1
  70. package/lib/Controllers/HooksController.js +1 -1
  71. package/lib/Controllers/LiveQueryController.js +1 -1
  72. package/lib/Controllers/LoggerController.js +1 -1
  73. package/lib/Controllers/ParseGraphQLController.js +1 -1
  74. package/lib/Controllers/PushController.js +1 -1
  75. package/lib/Controllers/SchemaController.js +4 -1
  76. package/lib/Controllers/UserController.js +1 -1
  77. package/lib/Controllers/index.js +3 -2
  78. package/lib/Deprecator/Deprecator.js +1 -1
  79. package/lib/GraphQL/ParseGraphQLSchema.js +1 -1
  80. package/lib/GraphQL/ParseGraphQLServer.js +1 -1
  81. package/lib/GraphQL/helpers/objectsMutations.js +1 -1
  82. package/lib/GraphQL/helpers/objectsQueries.js +1 -1
  83. package/lib/GraphQL/loaders/defaultGraphQLMutations.js +1 -1
  84. package/lib/GraphQL/loaders/defaultGraphQLQueries.js +1 -1
  85. package/lib/GraphQL/loaders/defaultGraphQLTypes.js +1 -1
  86. package/lib/GraphQL/loaders/defaultRelaySchema.js +1 -1
  87. package/lib/GraphQL/loaders/filesMutations.js +1 -1
  88. package/lib/GraphQL/loaders/functionsMutations.js +1 -1
  89. package/lib/GraphQL/loaders/parseClassMutations.js +1 -1
  90. package/lib/GraphQL/loaders/parseClassQueries.js +1 -1
  91. package/lib/GraphQL/loaders/parseClassTypes.js +2 -2
  92. package/lib/GraphQL/loaders/schemaDirectives.js +1 -1
  93. package/lib/GraphQL/loaders/schemaMutations.js +1 -1
  94. package/lib/GraphQL/loaders/schemaQueries.js +1 -1
  95. package/lib/GraphQL/loaders/schemaTypes.js +1 -1
  96. package/lib/GraphQL/loaders/usersMutations.js +1 -1
  97. package/lib/GraphQL/loaders/usersQueries.js +1 -1
  98. package/lib/GraphQL/parseGraphQLUtils.js +1 -1
  99. package/lib/GraphQL/transformers/className.js +1 -1
  100. package/lib/GraphQL/transformers/constraintType.js +1 -1
  101. package/lib/GraphQL/transformers/inputType.js +1 -1
  102. package/lib/GraphQL/transformers/mutation.js +1 -1
  103. package/lib/GraphQL/transformers/outputType.js +1 -1
  104. package/lib/GraphQL/transformers/query.js +1 -1
  105. package/lib/GraphQL/transformers/schemaFields.js +1 -1
  106. package/lib/KeyPromiseQueue.js +1 -1
  107. package/lib/LiveQuery/Client.js +1 -1
  108. package/lib/LiveQuery/Id.js +1 -1
  109. package/lib/LiveQuery/ParseCloudCodePublisher.js +1 -1
  110. package/lib/LiveQuery/ParseLiveQueryServer.js +1 -1
  111. package/lib/LiveQuery/ParsePubSub.js +1 -1
  112. package/lib/LiveQuery/ParseWebSocketServer.js +1 -1
  113. package/lib/LiveQuery/QueryTools.js +1 -1
  114. package/lib/LiveQuery/RequestSchema.js +1 -1
  115. package/lib/LiveQuery/SessionTokenCache.js +1 -1
  116. package/lib/LiveQuery/Subscription.js +1 -1
  117. package/lib/LiveQuery/equalObjects.js +1 -1
  118. package/lib/Options/Definitions.js +22 -4
  119. package/lib/Options/docs.js +7 -4
  120. package/lib/Options/index.js +1 -1
  121. package/lib/Options/parsers.js +1 -1
  122. package/lib/Page.js +1 -1
  123. package/lib/ParseMessageQueue.js +1 -1
  124. package/lib/ParseServer.js +3 -1
  125. package/lib/ParseServerRESTController.js +1 -1
  126. package/lib/PromiseRouter.js +1 -1
  127. package/lib/Push/PushQueue.js +1 -1
  128. package/lib/Push/PushWorker.js +1 -1
  129. package/lib/Push/utils.js +1 -1
  130. package/lib/RestQuery.js +13 -8
  131. package/lib/RestWrite.js +21 -3
  132. package/lib/Routers/AggregateRouter.js +1 -1
  133. package/lib/Routers/AnalyticsRouter.js +1 -1
  134. package/lib/Routers/AudiencesRouter.js +1 -1
  135. package/lib/Routers/ClassesRouter.js +1 -1
  136. package/lib/Routers/CloudCodeRouter.js +1 -1
  137. package/lib/Routers/FeaturesRouter.js +1 -1
  138. package/lib/Routers/FilesRouter.js +2 -2
  139. package/lib/Routers/FunctionsRouter.js +1 -1
  140. package/lib/Routers/GlobalConfigRouter.js +1 -1
  141. package/lib/Routers/GraphQLRouter.js +1 -1
  142. package/lib/Routers/HooksRouter.js +1 -1
  143. package/lib/Routers/IAPValidationRouter.js +1 -1
  144. package/lib/Routers/InstallationsRouter.js +1 -1
  145. package/lib/Routers/LogsRouter.js +1 -1
  146. package/lib/Routers/PagesRouter.js +1 -1
  147. package/lib/Routers/PublicAPIRouter.js +1 -1
  148. package/lib/Routers/PurgeRouter.js +1 -1
  149. package/lib/Routers/PushRouter.js +1 -1
  150. package/lib/Routers/RolesRouter.js +1 -1
  151. package/lib/Routers/SchemasRouter.js +1 -1
  152. package/lib/Routers/SecurityRouter.js +1 -1
  153. package/lib/Routers/SessionsRouter.js +1 -1
  154. package/lib/Routers/UsersRouter.js +4 -4
  155. package/lib/SchemaMigrations/DefinedSchemas.js +1 -1
  156. package/lib/SchemaMigrations/Migrations.js +1 -1
  157. package/lib/Security/Check.js +1 -1
  158. package/lib/Security/CheckGroup.js +1 -1
  159. package/lib/Security/CheckGroups/CheckGroupDatabase.js +1 -1
  160. package/lib/Security/CheckGroups/CheckGroupServerConfig.js +1 -1
  161. package/lib/Security/CheckGroups/CheckGroups.js +1 -1
  162. package/lib/Security/CheckRunner.js +1 -1
  163. package/lib/SharedRest.js +1 -1
  164. package/lib/StatusHandler.js +1 -1
  165. package/lib/TestUtils.js +1 -1
  166. package/lib/Utils.js +1 -1
  167. package/lib/batch.js +1 -1
  168. package/lib/cache.js +1 -1
  169. package/lib/cli/definitions/parse-live-query-server.js +1 -1
  170. package/lib/cli/definitions/parse-server.js +1 -1
  171. package/lib/cli/parse-live-query-server.js +1 -1
  172. package/lib/cli/parse-server.js +1 -1
  173. package/lib/cli/utils/commander.js +1 -1
  174. package/lib/cli/utils/runner.js +1 -1
  175. package/lib/cloud-code/Parse.Cloud.js +1 -1
  176. package/lib/cryptoUtils.js +1 -1
  177. package/lib/defaults.js +1 -1
  178. package/lib/deprecated.js +1 -1
  179. package/lib/index.js +1 -1
  180. package/lib/logger.js +1 -1
  181. package/lib/middlewares.js +43 -4
  182. package/lib/password.js +1 -1
  183. package/lib/request.js +1 -1
  184. package/lib/requiredParameter.js +1 -1
  185. package/lib/rest.js +1 -1
  186. package/lib/triggers.js +3 -3
  187. package/lib/vendor/mongodbUrl.js +1 -1
  188. package/package.json +3 -4
@@ -365,4 +365,4 @@ function buildEmailLink(destination, username, token, config) {
365
365
  }
366
366
  var _default = UserController;
367
367
  exports.default = _default;
368
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZXN0UXVlcnkiLCJyZXF1aXJlIiwiQXV0aCIsIlVzZXJDb250cm9sbGVyIiwiQWRhcHRhYmxlQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiYWRhcHRlciIsImFwcElkIiwib3B0aW9ucyIsImNvbmZpZyIsIkNvbmZpZyIsImdldCIsInZhbGlkYXRlQWRhcHRlciIsInNob3VsZFZlcmlmeUVtYWlscyIsImV4cGVjdGVkQWRhcHRlclR5cGUiLCJNYWlsQWRhcHRlciIsInZlcmlmeVVzZXJFbWFpbHMiLCJzZXRFbWFpbFZlcmlmeVRva2VuIiwidXNlciIsInJlcSIsInN0b3JhZ2UiLCJzaG91bGRTZW5kRW1haWwiLCJyZXNwb25zZSIsIlByb21pc2UiLCJyZXNvbHZlIiwic2VuZFZlcmlmaWNhdGlvbkVtYWlsIiwiX2VtYWlsX3ZlcmlmeV90b2tlbiIsInJhbmRvbVN0cmluZyIsImZpZWxkc0NoYW5nZWRCeVRyaWdnZXIiLCJpbmNsdWRlcyIsImVtYWlsVmVyaWZpZWQiLCJlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbiIsIl9lbWFpbF92ZXJpZnlfdG9rZW5fZXhwaXJlc19hdCIsIlBhcnNlIiwiX2VuY29kZSIsImdlbmVyYXRlRW1haWxWZXJpZnlUb2tlbkV4cGlyZXNBdCIsInZlcmlmeUVtYWlsIiwidXNlcm5hbWUiLCJ0b2tlbiIsInVuZGVmaW5lZCIsInF1ZXJ5IiwidXBkYXRlRmllbGRzIiwiX19vcCIsIiRndCIsIkRhdGUiLCJtYWludGVuYW5jZUF1dGgiLCJtYWludGVuYW5jZSIsImZpbmRVc2VyRm9yRW1haWxWZXJpZmljYXRpb24iLCJtZXRob2QiLCJNZXRob2QiLCJhdXRoIiwiY2xhc3NOYW1lIiwicmVzdFdoZXJlIiwiZXhlY3V0ZSIsInRoZW4iLCJyZXN1bHQiLCJyZXN1bHRzIiwibGVuZ3RoIiwib2JqZWN0SWQiLCJyZXN0IiwidXBkYXRlIiwiY2hlY2tSZXNldFRva2VuVmFsaWRpdHkiLCJkYXRhYmFzZSIsImZpbmQiLCJfcGVyaXNoYWJsZV90b2tlbiIsImxpbWl0IiwicGFzc3dvcmRQb2xpY3kiLCJyZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbiIsImV4cGlyZXNEYXRlIiwiX3BlcmlzaGFibGVfdG9rZW5fZXhwaXJlc19hdCIsIl9fdHlwZSIsImlzbyIsImdldFVzZXJJZk5lZWRlZCIsImVtYWlsIiwid2hlcmUiLCJydW5CZWZvcmVGaW5kIiwibWFzdGVyIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZmV0Y2hlZFVzZXIiLCJzZW5kVXNlckVtYWlsVmVyaWZpY2F0aW9uIiwiT2JqZWN0IiwiZnJvbUpTT04iLCJpc01hc3RlciIsImxpbmsiLCJidWlsZEVtYWlsTGluayIsInZlcmlmeUVtYWlsVVJMIiwiYXBwTmFtZSIsImluZmxhdGUiLCJzZW5kTWFpbCIsImRlZmF1bHRWZXJpZmljYXRpb25FbWFpbCIsInJlZ2VuZXJhdGVFbWFpbFZlcmlmeVRva2VuIiwiZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCIsInNob3VsZFNlbmQiLCJyZXNlbmRWZXJpZmljYXRpb25FbWFpbCIsImFVc2VyIiwiZ2VuZXJhdGUiLCJzZXRQYXNzd29yZFJlc2V0VG9rZW4iLCJnZW5lcmF0ZVBhc3N3b3JkUmVzZXRUb2tlbkV4cGlyZXNBdCIsIiRvciIsIiRleGlzdHMiLCJzZW5kUGFzc3dvcmRSZXNldEVtYWlsIiwicmVzZXRUb2tlblJldXNlSWZWYWxpZCIsInJlcXVlc3RSZXNldFBhc3N3b3JkVVJMIiwiZGVmYXVsdFJlc2V0UGFzc3dvcmRFbWFpbCIsInVwZGF0ZVBhc3N3b3JkIiwicGFzc3dvcmQiLCJ1cGRhdGVVc2VyUGFzc3dvcmQiLCJhY2NvdW50TG9ja291dFBvbGljeSIsIkFjY291bnRMb2Nrb3V0IiwidW5sb2NrQWNjb3VudCIsImNhdGNoIiwiZXJyb3IiLCJtZXNzYWdlIiwicmVqZWN0IiwidGV4dCIsInRvIiwic3ViamVjdCIsImRlc3RpbmF0aW9uIiwidXNlcm5hbWVBbmRUb2tlbiIsInBhcnNlRnJhbWVVUkwiLCJkZXN0aW5hdGlvbldpdGhvdXRIb3N0IiwicmVwbGFjZSIsInB1YmxpY1NlcnZlclVSTCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Db250cm9sbGVycy9Vc2VyQ29udHJvbGxlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21TdHJpbmcgfSBmcm9tICcuLi9jcnlwdG9VdGlscyc7XG5pbXBvcnQgeyBpbmZsYXRlIH0gZnJvbSAnLi4vdHJpZ2dlcnMnO1xuaW1wb3J0IEFkYXB0YWJsZUNvbnRyb2xsZXIgZnJvbSAnLi9BZGFwdGFibGVDb250cm9sbGVyJztcbmltcG9ydCBNYWlsQWRhcHRlciBmcm9tICcuLi9BZGFwdGVycy9FbWFpbC9NYWlsQWRhcHRlcic7XG5pbXBvcnQgcmVzdCBmcm9tICcuLi9yZXN0JztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBBY2NvdW50TG9ja291dCBmcm9tICcuLi9BY2NvdW50TG9ja291dCc7XG5pbXBvcnQgQ29uZmlnIGZyb20gJy4uL0NvbmZpZyc7XG5cbnZhciBSZXN0UXVlcnkgPSByZXF1aXJlKCcuLi9SZXN0UXVlcnknKTtcbnZhciBBdXRoID0gcmVxdWlyZSgnLi4vQXV0aCcpO1xuXG5leHBvcnQgY2xhc3MgVXNlckNvbnRyb2xsZXIgZXh0ZW5kcyBBZGFwdGFibGVDb250cm9sbGVyIHtcbiAgY29uc3RydWN0b3IoYWRhcHRlciwgYXBwSWQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKGFkYXB0ZXIsIGFwcElkLCBvcHRpb25zKTtcbiAgfVxuXG4gIGdldCBjb25maWcoKSB7XG4gICAgcmV0dXJuIENvbmZpZy5nZXQodGhpcy5hcHBJZCk7XG4gIH1cblxuICB2YWxpZGF0ZUFkYXB0ZXIoYWRhcHRlcikge1xuICAgIC8vIEFsbG93IG5vIGFkYXB0ZXJcbiAgICBpZiAoIWFkYXB0ZXIgJiYgIXRoaXMuc2hvdWxkVmVyaWZ5RW1haWxzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN1cGVyLnZhbGlkYXRlQWRhcHRlcihhZGFwdGVyKTtcbiAgfVxuXG4gIGV4cGVjdGVkQWRhcHRlclR5cGUoKSB7XG4gICAgcmV0dXJuIE1haWxBZGFwdGVyO1xuICB9XG5cbiAgZ2V0IHNob3VsZFZlcmlmeUVtYWlscygpIHtcbiAgICByZXR1cm4gKHRoaXMuY29uZmlnIHx8IHRoaXMub3B0aW9ucykudmVyaWZ5VXNlckVtYWlscztcbiAgfVxuXG4gIGFzeW5jIHNldEVtYWlsVmVyaWZ5VG9rZW4odXNlciwgcmVxLCBzdG9yYWdlID0ge30pIHtcbiAgICBsZXQgc2hvdWxkU2VuZEVtYWlsID0gdGhpcy5zaG91bGRWZXJpZnlFbWFpbHM7XG4gICAgaWYgKHR5cGVvZiBzaG91bGRTZW5kRW1haWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKHNob3VsZFNlbmRFbWFpbChyZXEpKTtcbiAgICAgIHNob3VsZFNlbmRFbWFpbCA9IHJlc3BvbnNlICE9PSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFzaG91bGRTZW5kRW1haWwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc3RvcmFnZS5zZW5kVmVyaWZpY2F0aW9uRW1haWwgPSB0cnVlO1xuICAgIHVzZXIuX2VtYWlsX3ZlcmlmeV90b2tlbiA9IHJhbmRvbVN0cmluZygyNSk7XG4gICAgaWYgKFxuICAgICAgIXN0b3JhZ2UuZmllbGRzQ2hhbmdlZEJ5VHJpZ2dlciB8fFxuICAgICAgIXN0b3JhZ2UuZmllbGRzQ2hhbmdlZEJ5VHJpZ2dlci5pbmNsdWRlcygnZW1haWxWZXJpZmllZCcpXG4gICAgKSB7XG4gICAgICB1c2VyLmVtYWlsVmVyaWZpZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcuZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24pIHtcbiAgICAgIHVzZXIuX2VtYWlsX3ZlcmlmeV90b2tlbl9leHBpcmVzX2F0ID0gUGFyc2UuX2VuY29kZShcbiAgICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVFbWFpbFZlcmlmeVRva2VuRXhwaXJlc0F0KClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5RW1haWwodXNlcm5hbWUsIHRva2VuKSB7XG4gICAgaWYgKCF0aGlzLnNob3VsZFZlcmlmeUVtYWlscykge1xuICAgICAgLy8gVHJ5aW5nIHRvIHZlcmlmeSBlbWFpbCB3aGVuIG5vdCBlbmFibGVkXG4gICAgICAvLyBUT0RPOiBCZXR0ZXIgZXJyb3IgaGVyZS5cbiAgICAgIHRocm93IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeSA9IHsgdXNlcm5hbWU6IHVzZXJuYW1lLCBfZW1haWxfdmVyaWZ5X3Rva2VuOiB0b2tlbiB9O1xuICAgIGNvbnN0IHVwZGF0ZUZpZWxkcyA9IHtcbiAgICAgIGVtYWlsVmVyaWZpZWQ6IHRydWUsXG4gICAgICBfZW1haWxfdmVyaWZ5X3Rva2VuOiB7IF9fb3A6ICdEZWxldGUnIH0sXG4gICAgfTtcblxuICAgIC8vIGlmIHRoZSBlbWFpbCB2ZXJpZnkgdG9rZW4gbmVlZHMgdG8gYmUgdmFsaWRhdGVkIHRoZW5cbiAgICAvLyBhZGQgYWRkaXRpb25hbCBxdWVyeSBwYXJhbXMgYW5kIGFkZGl0aW9uYWwgZmllbGRzIHRoYXQgbmVlZCB0byBiZSB1cGRhdGVkXG4gICAgaWYgKHRoaXMuY29uZmlnLmVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uKSB7XG4gICAgICBxdWVyeS5lbWFpbFZlcmlmaWVkID0gZmFsc2U7XG4gICAgICBxdWVyeS5fZW1haWxfdmVyaWZ5X3Rva2VuX2V4cGlyZXNfYXQgPSB7ICRndDogUGFyc2UuX2VuY29kZShuZXcgRGF0ZSgpKSB9O1xuXG4gICAgICB1cGRhdGVGaWVsZHMuX2VtYWlsX3ZlcmlmeV90b2tlbl9leHBpcmVzX2F0ID0geyBfX29wOiAnRGVsZXRlJyB9O1xuICAgIH1cbiAgICBjb25zdCBtYWludGVuYW5jZUF1dGggPSBBdXRoLm1haW50ZW5hbmNlKHRoaXMuY29uZmlnKTtcbiAgICB2YXIgZmluZFVzZXJGb3JFbWFpbFZlcmlmaWNhdGlvbiA9IGF3YWl0IFJlc3RRdWVyeSh7XG4gICAgICBtZXRob2Q6IFJlc3RRdWVyeS5NZXRob2QuZ2V0LFxuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGF1dGg6IG1haW50ZW5hbmNlQXV0aCxcbiAgICAgIGNsYXNzTmFtZTogJ19Vc2VyJyxcbiAgICAgIHJlc3RXaGVyZToge1xuICAgICAgICB1c2VybmFtZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbmRVc2VyRm9yRW1haWxWZXJpZmljYXRpb24uZXhlY3V0ZSgpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQucmVzdWx0cy5sZW5ndGggJiYgcmVzdWx0LnJlc3VsdHNbMF0uZW1haWxWZXJpZmllZCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdC5yZXN1bHRzLmxlbmd0aFswXSk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5yZXN1bHRzLmxlbmd0aCkge1xuICAgICAgICBxdWVyeS5vYmplY3RJZCA9IHJlc3VsdC5yZXN1bHRzWzBdLm9iamVjdElkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3QudXBkYXRlKHRoaXMuY29uZmlnLCBtYWludGVuYW5jZUF1dGgsICdfVXNlcicsIHF1ZXJ5LCB1cGRhdGVGaWVsZHMpO1xuICAgIH0pO1xuICB9XG5cbiAgY2hlY2tSZXNldFRva2VuVmFsaWRpdHkodXNlcm5hbWUsIHRva2VuKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRhdGFiYXNlXG4gICAgICAuZmluZChcbiAgICAgICAgJ19Vc2VyJyxcbiAgICAgICAge1xuICAgICAgICAgIHVzZXJuYW1lOiB1c2VybmFtZSxcbiAgICAgICAgICBfcGVyaXNoYWJsZV90b2tlbjogdG9rZW4sXG4gICAgICAgIH0sXG4gICAgICAgIHsgbGltaXQ6IDEgfSxcbiAgICAgICAgQXV0aC5tYWludGVuYW5jZSh0aGlzLmNvbmZpZylcbiAgICAgIClcbiAgICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggIT0gMSkge1xuICAgICAgICAgIHRocm93ICdGYWlsZWQgdG8gcmVzZXQgcGFzc3dvcmQ6IHVzZXJuYW1lIC8gZW1haWwgLyB0b2tlbiBpcyBpbnZhbGlkJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5wYXNzd29yZFBvbGljeSAmJiB0aGlzLmNvbmZpZy5wYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbikge1xuICAgICAgICAgIGxldCBleHBpcmVzRGF0ZSA9IHJlc3VsdHNbMF0uX3BlcmlzaGFibGVfdG9rZW5fZXhwaXJlc19hdDtcbiAgICAgICAgICBpZiAoZXhwaXJlc0RhdGUgJiYgZXhwaXJlc0RhdGUuX190eXBlID09ICdEYXRlJykge1xuICAgICAgICAgICAgZXhwaXJlc0RhdGUgPSBuZXcgRGF0ZShleHBpcmVzRGF0ZS5pc28pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZXhwaXJlc0RhdGUgPCBuZXcgRGF0ZSgpKSB0aHJvdyAnVGhlIHBhc3N3b3JkIHJlc2V0IGxpbmsgaGFzIGV4cGlyZWQnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzWzBdO1xuICAgICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXRVc2VySWZOZWVkZWQodXNlcikge1xuICAgIGlmICh1c2VyLnVzZXJuYW1lICYmIHVzZXIuZW1haWwpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodXNlcik7XG4gICAgfVxuICAgIHZhciB3aGVyZSA9IHt9O1xuICAgIGlmICh1c2VyLnVzZXJuYW1lKSB7XG4gICAgICB3aGVyZS51c2VybmFtZSA9IHVzZXIudXNlcm5hbWU7XG4gICAgfVxuICAgIGlmICh1c2VyLmVtYWlsKSB7XG4gICAgICB3aGVyZS5lbWFpbCA9IHVzZXIuZW1haWw7XG4gICAgfVxuXG4gICAgdmFyIHF1ZXJ5ID0gYXdhaXQgUmVzdFF1ZXJ5KHtcbiAgICAgIG1ldGhvZDogUmVzdFF1ZXJ5Lk1ldGhvZC5nZXQsXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgcnVuQmVmb3JlRmluZDogZmFsc2UsXG4gICAgICBhdXRoOiBBdXRoLm1hc3Rlcih0aGlzLmNvbmZpZyksXG4gICAgICBjbGFzc05hbWU6ICdfVXNlcicsXG4gICAgICByZXN0V2hlcmU6IHdoZXJlLFxuICAgIH0pO1xuICAgIHJldHVybiBxdWVyeS5leGVjdXRlKCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICBpZiAocmVzdWx0LnJlc3VsdHMubGVuZ3RoICE9IDEpIHtcbiAgICAgICAgdGhyb3cgdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdC5yZXN1bHRzWzBdO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2VuZFZlcmlmaWNhdGlvbkVtYWlsKHVzZXIsIHJlcSkge1xuICAgIGlmICghdGhpcy5zaG91bGRWZXJpZnlFbWFpbHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdG9rZW4gPSBlbmNvZGVVUklDb21wb25lbnQodXNlci5fZW1haWxfdmVyaWZ5X3Rva2VuKTtcbiAgICAvLyBXZSBtYXkgbmVlZCB0byBmZXRjaCB0aGUgdXNlciBpbiBjYXNlIG9mIHVwZGF0ZSBlbWFpbFxuICAgIGNvbnN0IGZldGNoZWRVc2VyID0gYXdhaXQgdGhpcy5nZXRVc2VySWZOZWVkZWQodXNlcik7XG4gICAgbGV0IHNob3VsZFNlbmRFbWFpbCA9IHRoaXMuY29uZmlnLnNlbmRVc2VyRW1haWxWZXJpZmljYXRpb247XG4gICAgaWYgKHR5cGVvZiBzaG91bGRTZW5kRW1haWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICB0aGlzLmNvbmZpZy5zZW5kVXNlckVtYWlsVmVyaWZpY2F0aW9uKHtcbiAgICAgICAgICB1c2VyOiBQYXJzZS5PYmplY3QuZnJvbUpTT04oeyBjbGFzc05hbWU6ICdfVXNlcicsIC4uLmZldGNoZWRVc2VyIH0pLFxuICAgICAgICAgIG1hc3RlcjogcmVxLmF1dGg/LmlzTWFzdGVyLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHNob3VsZFNlbmRFbWFpbCA9ICEhcmVzcG9uc2U7XG4gICAgfVxuICAgIGlmICghc2hvdWxkU2VuZEVtYWlsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHVzZXJuYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KHVzZXIudXNlcm5hbWUpO1xuXG4gICAgY29uc3QgbGluayA9IGJ1aWxkRW1haWxMaW5rKHRoaXMuY29uZmlnLnZlcmlmeUVtYWlsVVJMLCB1c2VybmFtZSwgdG9rZW4sIHRoaXMuY29uZmlnKTtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgYXBwTmFtZTogdGhpcy5jb25maWcuYXBwTmFtZSxcbiAgICAgIGxpbms6IGxpbmssXG4gICAgICB1c2VyOiBpbmZsYXRlKCdfVXNlcicsIGZldGNoZWRVc2VyKSxcbiAgICB9O1xuICAgIGlmICh0aGlzLmFkYXB0ZXIuc2VuZFZlcmlmaWNhdGlvbkVtYWlsKSB7XG4gICAgICB0aGlzLmFkYXB0ZXIuc2VuZFZlcmlmaWNhdGlvbkVtYWlsKG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkYXB0ZXIuc2VuZE1haWwodGhpcy5kZWZhdWx0VmVyaWZpY2F0aW9uRW1haWwob3B0aW9ucykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdlbmVyYXRlcyB0aGUgZ2l2ZW4gdXNlcidzIGVtYWlsIHZlcmlmaWNhdGlvbiB0b2tlblxuICAgKlxuICAgKiBAcGFyYW0gdXNlclxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGFzeW5jIHJlZ2VuZXJhdGVFbWFpbFZlcmlmeVRva2VuKHVzZXIsIG1hc3Rlcikge1xuICAgIGNvbnN0IHsgX2VtYWlsX3ZlcmlmeV90b2tlbiB9ID0gdXNlcjtcbiAgICBsZXQgeyBfZW1haWxfdmVyaWZ5X3Rva2VuX2V4cGlyZXNfYXQgfSA9IHVzZXI7XG4gICAgaWYgKF9lbWFpbF92ZXJpZnlfdG9rZW5fZXhwaXJlc19hdCAmJiBfZW1haWxfdmVyaWZ5X3Rva2VuX2V4cGlyZXNfYXQuX190eXBlID09PSAnRGF0ZScpIHtcbiAgICAgIF9lbWFpbF92ZXJpZnlfdG9rZW5fZXhwaXJlc19hdCA9IF9lbWFpbF92ZXJpZnlfdG9rZW5fZXhwaXJlc19hdC5pc287XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMuY29uZmlnLmVtYWlsVmVyaWZ5VG9rZW5SZXVzZUlmVmFsaWQgJiZcbiAgICAgIHRoaXMuY29uZmlnLmVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uICYmXG4gICAgICBfZW1haWxfdmVyaWZ5X3Rva2VuICYmXG4gICAgICBuZXcgRGF0ZSgpIDwgbmV3IERhdGUoX2VtYWlsX3ZlcmlmeV90b2tlbl9leHBpcmVzX2F0KVxuICAgICkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICBjb25zdCBzaG91bGRTZW5kID0gYXdhaXQgdGhpcy5zZXRFbWFpbFZlcmlmeVRva2VuKHVzZXIsIHsgdXNlciwgbWFzdGVyIH0pO1xuICAgIGlmICghc2hvdWxkU2VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb25maWcuZGF0YWJhc2UudXBkYXRlKCdfVXNlcicsIHsgdXNlcm5hbWU6IHVzZXIudXNlcm5hbWUgfSwgdXNlcik7XG4gIH1cblxuICBhc3luYyByZXNlbmRWZXJpZmljYXRpb25FbWFpbCh1c2VybmFtZSwgcmVxKSB7XG4gICAgY29uc3QgYVVzZXIgPSBhd2FpdCB0aGlzLmdldFVzZXJJZk5lZWRlZCh7IHVzZXJuYW1lOiB1c2VybmFtZSB9KTtcbiAgICBpZiAoIWFVc2VyIHx8IGFVc2VyLmVtYWlsVmVyaWZpZWQpIHtcbiAgICAgIHRocm93IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZ2VuZXJhdGUgPSBhd2FpdCB0aGlzLnJlZ2VuZXJhdGVFbWFpbFZlcmlmeVRva2VuKGFVc2VyLCByZXEuYXV0aD8uaXNNYXN0ZXIpO1xuICAgIGlmIChnZW5lcmF0ZSkge1xuICAgICAgdGhpcy5zZW5kVmVyaWZpY2F0aW9uRW1haWwoYVVzZXIsIHJlcSk7XG4gICAgfVxuICB9XG5cbiAgc2V0UGFzc3dvcmRSZXNldFRva2VuKGVtYWlsKSB7XG4gICAgY29uc3QgdG9rZW4gPSB7IF9wZXJpc2hhYmxlX3Rva2VuOiByYW5kb21TdHJpbmcoMjUpIH07XG5cbiAgICBpZiAodGhpcy5jb25maWcucGFzc3dvcmRQb2xpY3kgJiYgdGhpcy5jb25maWcucGFzc3dvcmRQb2xpY3kucmVzZXRUb2tlblZhbGlkaXR5RHVyYXRpb24pIHtcbiAgICAgIHRva2VuLl9wZXJpc2hhYmxlX3Rva2VuX2V4cGlyZXNfYXQgPSBQYXJzZS5fZW5jb2RlKFxuICAgICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZVBhc3N3b3JkUmVzZXRUb2tlbkV4cGlyZXNBdCgpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5kYXRhYmFzZS51cGRhdGUoXG4gICAgICAnX1VzZXInLFxuICAgICAgeyAkb3I6IFt7IGVtYWlsIH0sIHsgdXNlcm5hbWU6IGVtYWlsLCBlbWFpbDogeyAkZXhpc3RzOiBmYWxzZSB9IH1dIH0sXG4gICAgICB0b2tlbixcbiAgICAgIHt9LFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cblxuICBhc3luYyBzZW5kUGFzc3dvcmRSZXNldEVtYWlsKGVtYWlsKSB7XG4gICAgaWYgKCF0aGlzLmFkYXB0ZXIpIHtcbiAgICAgIHRocm93ICdUcnlpbmcgdG8gc2VuZCBhIHJlc2V0IHBhc3N3b3JkIGJ1dCBubyBhZGFwdGVyIGlzIHNldCc7XG4gICAgICAvLyAgVE9ETzogTm8gYWRhcHRlcj9cbiAgICB9XG4gICAgbGV0IHVzZXI7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jb25maWcucGFzc3dvcmRQb2xpY3kgJiZcbiAgICAgIHRoaXMuY29uZmlnLnBhc3N3b3JkUG9saWN5LnJlc2V0VG9rZW5SZXVzZUlmVmFsaWQgJiZcbiAgICAgIHRoaXMuY29uZmlnLnBhc3N3b3JkUG9saWN5LnJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uXG4gICAgKSB7XG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5jb25maWcuZGF0YWJhc2UuZmluZChcbiAgICAgICAgJ19Vc2VyJyxcbiAgICAgICAge1xuICAgICAgICAgICRvcjogW1xuICAgICAgICAgICAgeyBlbWFpbCwgX3BlcmlzaGFibGVfdG9rZW46IHsgJGV4aXN0czogdHJ1ZSB9IH0sXG4gICAgICAgICAgICB7IHVzZXJuYW1lOiBlbWFpbCwgZW1haWw6IHsgJGV4aXN0czogZmFsc2UgfSwgX3BlcmlzaGFibGVfdG9rZW46IHsgJGV4aXN0czogdHJ1ZSB9IH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgeyBsaW1pdDogMSB9LFxuICAgICAgICBBdXRoLm1haW50ZW5hbmNlKHRoaXMuY29uZmlnKVxuICAgICAgKTtcbiAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgIGxldCBleHBpcmVzRGF0ZSA9IHJlc3VsdHNbMF0uX3BlcmlzaGFibGVfdG9rZW5fZXhwaXJlc19hdDtcbiAgICAgICAgaWYgKGV4cGlyZXNEYXRlICYmIGV4cGlyZXNEYXRlLl9fdHlwZSA9PSAnRGF0ZScpIHtcbiAgICAgICAgICBleHBpcmVzRGF0ZSA9IG5ldyBEYXRlKGV4cGlyZXNEYXRlLmlzbyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4cGlyZXNEYXRlID4gbmV3IERhdGUoKSkge1xuICAgICAgICAgIHVzZXIgPSByZXN1bHRzWzBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghdXNlciB8fCAhdXNlci5fcGVyaXNoYWJsZV90b2tlbikge1xuICAgICAgdXNlciA9IGF3YWl0IHRoaXMuc2V0UGFzc3dvcmRSZXNldFRva2VuKGVtYWlsKTtcbiAgICB9XG4gICAgY29uc3QgdG9rZW4gPSBlbmNvZGVVUklDb21wb25lbnQodXNlci5fcGVyaXNoYWJsZV90b2tlbik7XG4gICAgY29uc3QgdXNlcm5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQodXNlci51c2VybmFtZSk7XG5cbiAgICBjb25zdCBsaW5rID0gYnVpbGRFbWFpbExpbmsodGhpcy5jb25maWcucmVxdWVzdFJlc2V0UGFzc3dvcmRVUkwsIHVzZXJuYW1lLCB0b2tlbiwgdGhpcy5jb25maWcpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBhcHBOYW1lOiB0aGlzLmNvbmZpZy5hcHBOYW1lLFxuICAgICAgbGluazogbGluayxcbiAgICAgIHVzZXI6IGluZmxhdGUoJ19Vc2VyJywgdXNlciksXG4gICAgfTtcblxuICAgIGlmICh0aGlzLmFkYXB0ZXIuc2VuZFBhc3N3b3JkUmVzZXRFbWFpbCkge1xuICAgICAgdGhpcy5hZGFwdGVyLnNlbmRQYXNzd29yZFJlc2V0RW1haWwob3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRhcHRlci5zZW5kTWFpbCh0aGlzLmRlZmF1bHRSZXNldFBhc3N3b3JkRW1haWwob3B0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodXNlcik7XG4gIH1cblxuICB1cGRhdGVQYXNzd29yZCh1c2VybmFtZSwgdG9rZW4sIHBhc3N3b3JkKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tSZXNldFRva2VuVmFsaWRpdHkodXNlcm5hbWUsIHRva2VuKVxuICAgICAgLnRoZW4odXNlciA9PiB1cGRhdGVVc2VyUGFzc3dvcmQodXNlciwgcGFzc3dvcmQsIHRoaXMuY29uZmlnKSlcbiAgICAgIC50aGVuKHVzZXIgPT4ge1xuICAgICAgICBjb25zdCBhY2NvdW50TG9ja291dFBvbGljeSA9IG5ldyBBY2NvdW50TG9ja291dCh1c2VyLCB0aGlzLmNvbmZpZyk7XG4gICAgICAgIHJldHVybiBhY2NvdW50TG9ja291dFBvbGljeS51bmxvY2tBY2NvdW50KCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLm1lc3NhZ2UpIHtcbiAgICAgICAgICAvLyBpbiBjYXNlIG9mIFBhcnNlLkVycm9yLCBmYWlsIHdpdGggdGhlIGVycm9yIG1lc3NhZ2Ugb25seVxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIGRlZmF1bHRWZXJpZmljYXRpb25FbWFpbCh7IGxpbmssIHVzZXIsIGFwcE5hbWUgfSkge1xuICAgIGNvbnN0IHRleHQgPVxuICAgICAgJ0hpLFxcblxcbicgK1xuICAgICAgJ1lvdSBhcmUgYmVpbmcgYXNrZWQgdG8gY29uZmlybSB0aGUgZS1tYWlsIGFkZHJlc3MgJyArXG4gICAgICB1c2VyLmdldCgnZW1haWwnKSArXG4gICAgICAnIHdpdGggJyArXG4gICAgICBhcHBOYW1lICtcbiAgICAgICdcXG5cXG4nICtcbiAgICAgICcnICtcbiAgICAgICdDbGljayBoZXJlIHRvIGNvbmZpcm0gaXQ6XFxuJyArXG4gICAgICBsaW5rO1xuICAgIGNvbnN0IHRvID0gdXNlci5nZXQoJ2VtYWlsJyk7XG4gICAgY29uc3Qgc3ViamVjdCA9ICdQbGVhc2UgdmVyaWZ5IHlvdXIgZS1tYWlsIGZvciAnICsgYXBwTmFtZTtcbiAgICByZXR1cm4geyB0ZXh0LCB0bywgc3ViamVjdCB9O1xuICB9XG5cbiAgZGVmYXVsdFJlc2V0UGFzc3dvcmRFbWFpbCh7IGxpbmssIHVzZXIsIGFwcE5hbWUgfSkge1xuICAgIGNvbnN0IHRleHQgPVxuICAgICAgJ0hpLFxcblxcbicgK1xuICAgICAgJ1lvdSByZXF1ZXN0ZWQgdG8gcmVzZXQgeW91ciBwYXNzd29yZCBmb3IgJyArXG4gICAgICBhcHBOYW1lICtcbiAgICAgICh1c2VyLmdldCgndXNlcm5hbWUnKSA/IFwiICh5b3VyIHVzZXJuYW1lIGlzICdcIiArIHVzZXIuZ2V0KCd1c2VybmFtZScpICsgXCInKVwiIDogJycpICtcbiAgICAgICcuXFxuXFxuJyArXG4gICAgICAnJyArXG4gICAgICAnQ2xpY2sgaGVyZSB0byByZXNldCBpdDpcXG4nICtcbiAgICAgIGxpbms7XG4gICAgY29uc3QgdG8gPSB1c2VyLmdldCgnZW1haWwnKSB8fCB1c2VyLmdldCgndXNlcm5hbWUnKTtcbiAgICBjb25zdCBzdWJqZWN0ID0gJ1Bhc3N3b3JkIFJlc2V0IGZvciAnICsgYXBwTmFtZTtcbiAgICByZXR1cm4geyB0ZXh0LCB0bywgc3ViamVjdCB9O1xuICB9XG59XG5cbi8vIE1hcmsgdGhpcyBwcml2YXRlXG5mdW5jdGlvbiB1cGRhdGVVc2VyUGFzc3dvcmQodXNlciwgcGFzc3dvcmQsIGNvbmZpZykge1xuICByZXR1cm4gcmVzdFxuICAgIC51cGRhdGUoXG4gICAgICBjb25maWcsXG4gICAgICBBdXRoLm1hc3Rlcihjb25maWcpLFxuICAgICAgJ19Vc2VyJyxcbiAgICAgIHsgb2JqZWN0SWQ6IHVzZXIub2JqZWN0SWQgfSxcbiAgICAgIHtcbiAgICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkLFxuICAgICAgfVxuICAgIClcbiAgICAudGhlbigoKSA9PiB1c2VyKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRFbWFpbExpbmsoZGVzdGluYXRpb24sIHVzZXJuYW1lLCB0b2tlbiwgY29uZmlnKSB7XG4gIGNvbnN0IHVzZXJuYW1lQW5kVG9rZW4gPSBgdG9rZW49JHt0b2tlbn0mdXNlcm5hbWU9JHt1c2VybmFtZX1gO1xuXG4gIGlmIChjb25maWcucGFyc2VGcmFtZVVSTCkge1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uV2l0aG91dEhvc3QgPSBkZXN0aW5hdGlvbi5yZXBsYWNlKGNvbmZpZy5wdWJsaWNTZXJ2ZXJVUkwsICcnKTtcblxuICAgIHJldHVybiBgJHtjb25maWcucGFyc2VGcmFtZVVSTH0/bGluaz0ke2VuY29kZVVSSUNvbXBvbmVudChcbiAgICAgIGRlc3RpbmF0aW9uV2l0aG91dEhvc3RcbiAgICApfSYke3VzZXJuYW1lQW5kVG9rZW59YDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYCR7ZGVzdGluYXRpb259PyR7dXNlcm5hbWVBbmRUb2tlbn1gO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFVzZXJDb250cm9sbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQStCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUUvQixJQUFJQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxjQUFjLENBQUM7QUFDdkMsSUFBSUMsSUFBSSxHQUFHRCxPQUFPLENBQUMsU0FBUyxDQUFDO0FBRXRCLE1BQU1FLGNBQWMsU0FBU0MsNEJBQW1CLENBQUM7RUFDdERDLFdBQVcsQ0FBQ0MsT0FBTyxFQUFFQyxLQUFLLEVBQUVDLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRTtJQUN4QyxLQUFLLENBQUNGLE9BQU8sRUFBRUMsS0FBSyxFQUFFQyxPQUFPLENBQUM7RUFDaEM7RUFFQSxJQUFJQyxNQUFNLEdBQUc7SUFDWCxPQUFPQyxlQUFNLENBQUNDLEdBQUcsQ0FBQyxJQUFJLENBQUNKLEtBQUssQ0FBQztFQUMvQjtFQUVBSyxlQUFlLENBQUNOLE9BQU8sRUFBRTtJQUN2QjtJQUNBLElBQUksQ0FBQ0EsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDTyxrQkFBa0IsRUFBRTtNQUN4QztJQUNGO0lBQ0EsS0FBSyxDQUFDRCxlQUFlLENBQUNOLE9BQU8sQ0FBQztFQUNoQztFQUVBUSxtQkFBbUIsR0FBRztJQUNwQixPQUFPQyxvQkFBVztF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
368
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY3J5cHRvVXRpbHMiLCJyZXF1aXJlIiwiX3RyaWdnZXJzIiwiX0FkYXB0YWJsZUNvbnRyb2xsZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX01haWxBZGFwdGVyIiwiX3Jlc3QiLCJfbm9kZSIsIl9BY2NvdW50TG9ja291dCIsIl9Db25maWciLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIm93bktleXMiLCJvYmplY3QiLCJlbnVtZXJhYmxlT25seSIsImtleXMiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJzeW1ib2xzIiwiZmlsdGVyIiwic3ltIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJ0YXJnZXQiLCJpIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwic291cmNlIiwiZm9yRWFjaCIsImtleSIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsIl90b1Byb3BlcnR5S2V5IiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJhcmciLCJfdG9QcmltaXRpdmUiLCJTdHJpbmciLCJpbnB1dCIsImhpbnQiLCJwcmltIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJ1bmRlZmluZWQiLCJyZXMiLCJjYWxsIiwiVHlwZUVycm9yIiwiTnVtYmVyIiwiUmVzdFF1ZXJ5IiwiQXV0aCIsIlVzZXJDb250cm9sbGVyIiwiQWRhcHRhYmxlQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiYWRhcHRlciIsImFwcElkIiwib3B0aW9ucyIsImNvbmZpZyIsIkNvbmZpZyIsImdldCIsInZhbGlkYXRlQWRhcHRlciIsInNob3VsZFZlcmlmeUVtYWlscyIsImV4cGVjdGVkQWRhcHRlclR5cGUiLCJNYWlsQWRhcHRlciIsInZlcmlmeVVzZXJFbWFpbHMiLCJzZXRFbWFpbFZlcmlmeVRva2VuIiwidXNlciIsInJlcSIsInN0b3JhZ2UiLCJzaG91bGRTZW5kRW1haWwiLCJyZXNwb25zZSIsIlByb21pc2UiLCJyZXNvbHZlIiwic2VuZFZlcmlmaWNhdGlvbkVtYWlsIiwiX2VtYWlsX3ZlcmlmeV90b2tlbiIsInJhbmRvbVN0cmluZyIsImZpZWxkc0NoYW5nZWRCeVRyaWdnZXIiLCJpbmNsdWRlcyIsImVtYWlsVmVyaWZpZWQiLCJlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbiIsIl9lbWFpbF92ZXJpZnlfdG9rZW5fZXhwaXJlc19hdCIsIlBhcnNlIiwiX2VuY29kZSIsImdlbmVyYXRlRW1haWxWZXJpZnlUb2tlbkV4cGlyZXNBdCIsInZlcmlmeUVtYWlsIiwidXNlcm5hbWUiLCJ0b2tlbiIsInF1ZXJ5IiwidXBkYXRlRmllbGRzIiwiX19vcCIsIiRndCIsIkRhdGUiLCJtYWludGVuYW5jZUF1dGgiLCJtYWludGVuYW5jZSIsImZpbmRVc2VyRm9yRW1haWxWZXJpZmljYXRpb24iLCJtZXRob2QiLCJNZXRob2QiLCJhdXRoIiwiY2xhc3NOYW1lIiwicmVzdFdoZXJlIiwiZXhlY3V0ZSIsInRoZW4iLCJyZXN1bHQiLCJyZXN1bHRzIiwib2JqZWN0SWQiLCJyZXN0IiwidXBkYXRlIiwiY2hlY2tSZXNldFRva2VuVmFsaWRpdHkiLCJkYXRhYmFzZSIsImZpbmQiLCJfcGVyaXNoYWJsZV90b2tlbiIsImxpbWl0IiwicGFzc3dvcmRQb2xpY3kiLCJyZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvbiIsImV4cGlyZXNEYXRlIiwiX3BlcmlzaGFibGVfdG9rZW5fZXhwaXJlc19hdCIsIl9fdHlwZSIsImlzbyIsImdldFVzZXJJZk5lZWRlZCIsImVtYWlsIiwid2hlcmUiLCJydW5CZWZvcmVGaW5kIiwibWFzdGVyIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZmV0Y2hlZFVzZXIiLCJzZW5kVXNlckVtYWlsVmVyaWZpY2F0aW9uIiwiX3JlcSRhdXRoIiwiZnJvbUpTT04iLCJpc01hc3RlciIsImxpbmsiLCJidWlsZEVtYWlsTGluayIsInZlcmlmeUVtYWlsVVJMIiwiYXBwTmFtZSIsImluZmxhdGUiLCJzZW5kTWFpbCIsImRlZmF1bHRWZXJpZmljYXRpb25FbWFpbCIsInJlZ2VuZXJhdGVFbWFpbFZlcmlmeVRva2VuIiwiZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCIsInNob3VsZFNlbmQiLCJyZXNlbmRWZXJpZmljYXRpb25FbWFpbCIsIl9yZXEkYXV0aDIiLCJhVXNlciIsImdlbmVyYXRlIiwic2V0UGFzc3dvcmRSZXNldFRva2VuIiwiZ2VuZXJhdGVQYXNzd29yZFJlc2V0VG9rZW5FeHBpcmVzQXQiLCIkb3IiLCIkZXhpc3RzIiwic2VuZFBhc3N3b3JkUmVzZXRFbWFpbCIsInJlc2V0VG9rZW5SZXVzZUlmVmFsaWQiLCJyZXF1ZXN0UmVzZXRQYXNzd29yZFVSTCIsImRlZmF1bHRSZXNldFBhc3N3b3JkRW1haWwiLCJ1cGRhdGVQYXNzd29yZCIsInBhc3N3b3JkIiwidXBkYXRlVXNlclBhc3N3b3JkIiwiYWNjb3VudExvY2tvdXRQb2xpY3kiLCJBY2NvdW50TG9ja291dCIsInVubG9ja0FjY291bnQiLCJjYXRjaCIsImVycm9yIiwibWVzc2FnZSIsInJlamVjdCIsInRleHQiLCJ0byIsInN1YmplY3QiLCJleHBvcnRzIiwiZGVzdGluYXRpb24iLCJ1c2VybmFtZUFuZFRva2VuIiwicGFyc2VGcmFtZVVSTCIsImRlc3RpbmF0aW9uV2l0aG91dEhvc3QiLCJyZXBsYWNlIiwicHVibGljU2VydmVyVVJMIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvQ29udHJvbGxlcnMvVXNlckNvbnRyb2xsZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmFuZG9tU3RyaW5nIH0gZnJvbSAnLi4vY3J5cHRvVXRpbHMnO1xuaW1wb3J0IHsgaW5mbGF0ZSB9IGZyb20gJy4uL3RyaWdnZXJzJztcbmltcG9ydCBBZGFwdGFibGVDb250cm9sbGVyIGZyb20gJy4vQWRhcHRhYmxlQ29udHJvbGxlcic7XG5pbXBvcnQgTWFpbEFkYXB0ZXIgZnJvbSAnLi4vQWRhcHRlcnMvRW1haWwvTWFpbEFkYXB0ZXInO1xuaW1wb3J0IHJlc3QgZnJvbSAnLi4vcmVzdCc7XG5pbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgQWNjb3VudExvY2tvdXQgZnJvbSAnLi4vQWNjb3VudExvY2tvdXQnO1xuaW1wb3J0IENvbmZpZyBmcm9tICcuLi9Db25maWcnO1xuXG52YXIgUmVzdFF1ZXJ5ID0gcmVxdWlyZSgnLi4vUmVzdFF1ZXJ5Jyk7XG52YXIgQXV0aCA9IHJlcXVpcmUoJy4uL0F1dGgnKTtcblxuZXhwb3J0IGNsYXNzIFVzZXJDb250cm9sbGVyIGV4dGVuZHMgQWRhcHRhYmxlQ29udHJvbGxlciB7XG4gIGNvbnN0cnVjdG9yKGFkYXB0ZXIsIGFwcElkLCBvcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihhZGFwdGVyLCBhcHBJZCwgb3B0aW9ucyk7XG4gIH1cblxuICBnZXQgY29uZmlnKCkge1xuICAgIHJldHVybiBDb25maWcuZ2V0KHRoaXMuYXBwSWQpO1xuICB9XG5cbiAgdmFsaWRhdGVBZGFwdGVyKGFkYXB0ZXIpIHtcbiAgICAvLyBBbGxvdyBubyBhZGFwdGVyXG4gICAgaWYgKCFhZGFwdGVyICYmICF0aGlzLnNob3VsZFZlcmlmeUVtYWlscykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdXBlci52YWxpZGF0ZUFkYXB0ZXIoYWRhcHRlcik7XG4gIH1cblxuICBleHBlY3RlZEFkYXB0ZXJUeXBlKCkge1xuICAgIHJldHVybiBNYWlsQWRhcHRlcjtcbiAgfVxuXG4gIGdldCBzaG91bGRWZXJpZnlFbWFpbHMoKSB7XG4gICAgcmV0dXJuICh0aGlzLmNvbmZpZyB8fCB0aGlzLm9wdGlvbnMpLnZlcmlmeVVzZXJFbWFpbHM7XG4gIH1cblxuICBhc3luYyBzZXRFbWFpbFZlcmlmeVRva2VuKHVzZXIsIHJlcSwgc3RvcmFnZSA9IHt9KSB7XG4gICAgbGV0IHNob3VsZFNlbmRFbWFpbCA9IHRoaXMuc2hvdWxkVmVyaWZ5RW1haWxzO1xuICAgIGlmICh0eXBlb2Ygc2hvdWxkU2VuZEVtYWlsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShzaG91bGRTZW5kRW1haWwocmVxKSk7XG4gICAgICBzaG91bGRTZW5kRW1haWwgPSByZXNwb25zZSAhPT0gZmFsc2U7XG4gICAgfVxuICAgIGlmICghc2hvdWxkU2VuZEVtYWlsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHN0b3JhZ2Uuc2VuZFZlcmlmaWNhdGlvbkVtYWlsID0gdHJ1ZTtcbiAgICB1c2VyLl9lbWFpbF92ZXJpZnlfdG9rZW4gPSByYW5kb21TdHJpbmcoMjUpO1xuICAgIGlmIChcbiAgICAgICFzdG9yYWdlLmZpZWxkc0NoYW5nZWRCeVRyaWdnZXIgfHxcbiAgICAgICFzdG9yYWdlLmZpZWxkc0NoYW5nZWRCeVRyaWdnZXIuaW5jbHVkZXMoJ2VtYWlsVmVyaWZpZWQnKVxuICAgICkge1xuICAgICAgdXNlci5lbWFpbFZlcmlmaWVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLmVtYWlsVmVyaWZ5VG9rZW5WYWxpZGl0eUR1cmF0aW9uKSB7XG4gICAgICB1c2VyLl9lbWFpbF92ZXJpZnlfdG9rZW5fZXhwaXJlc19hdCA9IFBhcnNlLl9lbmNvZGUoXG4gICAgICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlRW1haWxWZXJpZnlUb2tlbkV4cGlyZXNBdCgpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeUVtYWlsKHVzZXJuYW1lLCB0b2tlbikge1xuICAgIGlmICghdGhpcy5zaG91bGRWZXJpZnlFbWFpbHMpIHtcbiAgICAgIC8vIFRyeWluZyB0byB2ZXJpZnkgZW1haWwgd2hlbiBub3QgZW5hYmxlZFxuICAgICAgLy8gVE9ETzogQmV0dGVyIGVycm9yIGhlcmUuXG4gICAgICB0aHJvdyB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnkgPSB7IHVzZXJuYW1lOiB1c2VybmFtZSwgX2VtYWlsX3ZlcmlmeV90b2tlbjogdG9rZW4gfTtcbiAgICBjb25zdCB1cGRhdGVGaWVsZHMgPSB7XG4gICAgICBlbWFpbFZlcmlmaWVkOiB0cnVlLFxuICAgICAgX2VtYWlsX3ZlcmlmeV90b2tlbjogeyBfX29wOiAnRGVsZXRlJyB9LFxuICAgIH07XG5cbiAgICAvLyBpZiB0aGUgZW1haWwgdmVyaWZ5IHRva2VuIG5lZWRzIHRvIGJlIHZhbGlkYXRlZCB0aGVuXG4gICAgLy8gYWRkIGFkZGl0aW9uYWwgcXVlcnkgcGFyYW1zIGFuZCBhZGRpdGlvbmFsIGZpZWxkcyB0aGF0IG5lZWQgdG8gYmUgdXBkYXRlZFxuICAgIGlmICh0aGlzLmNvbmZpZy5lbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbikge1xuICAgICAgcXVlcnkuZW1haWxWZXJpZmllZCA9IGZhbHNlO1xuICAgICAgcXVlcnkuX2VtYWlsX3ZlcmlmeV90b2tlbl9leHBpcmVzX2F0ID0geyAkZ3Q6IFBhcnNlLl9lbmNvZGUobmV3IERhdGUoKSkgfTtcblxuICAgICAgdXBkYXRlRmllbGRzLl9lbWFpbF92ZXJpZnlfdG9rZW5fZXhwaXJlc19hdCA9IHsgX19vcDogJ0RlbGV0ZScgfTtcbiAgICB9XG4gICAgY29uc3QgbWFpbnRlbmFuY2VBdXRoID0gQXV0aC5tYWludGVuYW5jZSh0aGlzLmNvbmZpZyk7XG4gICAgdmFyIGZpbmRVc2VyRm9yRW1haWxWZXJpZmljYXRpb24gPSBhd2FpdCBSZXN0UXVlcnkoe1xuICAgICAgbWV0aG9kOiBSZXN0UXVlcnkuTWV0aG9kLmdldCxcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICBhdXRoOiBtYWludGVuYW5jZUF1dGgsXG4gICAgICBjbGFzc05hbWU6ICdfVXNlcicsXG4gICAgICByZXN0V2hlcmU6IHtcbiAgICAgICAgdXNlcm5hbWUsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHJldHVybiBmaW5kVXNlckZvckVtYWlsVmVyaWZpY2F0aW9uLmV4ZWN1dGUoKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0LnJlc3VsdHMubGVuZ3RoICYmIHJlc3VsdC5yZXN1bHRzWzBdLmVtYWlsVmVyaWZpZWQpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHQucmVzdWx0cy5sZW5ndGhbMF0pO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHQucmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgICAgcXVlcnkub2JqZWN0SWQgPSByZXN1bHQucmVzdWx0c1swXS5vYmplY3RJZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN0LnVwZGF0ZSh0aGlzLmNvbmZpZywgbWFpbnRlbmFuY2VBdXRoLCAnX1VzZXInLCBxdWVyeSwgdXBkYXRlRmllbGRzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNoZWNrUmVzZXRUb2tlblZhbGlkaXR5KHVzZXJuYW1lLCB0b2tlbikge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5kYXRhYmFzZVxuICAgICAgLmZpbmQoXG4gICAgICAgICdfVXNlcicsXG4gICAgICAgIHtcbiAgICAgICAgICB1c2VybmFtZTogdXNlcm5hbWUsXG4gICAgICAgICAgX3BlcmlzaGFibGVfdG9rZW46IHRva2VuLFxuICAgICAgICB9LFxuICAgICAgICB7IGxpbWl0OiAxIH0sXG4gICAgICAgIEF1dGgubWFpbnRlbmFuY2UodGhpcy5jb25maWcpXG4gICAgICApXG4gICAgICAudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoICE9IDEpIHtcbiAgICAgICAgICB0aHJvdyAnRmFpbGVkIHRvIHJlc2V0IHBhc3N3b3JkOiB1c2VybmFtZSAvIGVtYWlsIC8gdG9rZW4gaXMgaW52YWxpZCc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb25maWcucGFzc3dvcmRQb2xpY3kgJiYgdGhpcy5jb25maWcucGFzc3dvcmRQb2xpY3kucmVzZXRUb2tlblZhbGlkaXR5RHVyYXRpb24pIHtcbiAgICAgICAgICBsZXQgZXhwaXJlc0RhdGUgPSByZXN1bHRzWzBdLl9wZXJpc2hhYmxlX3Rva2VuX2V4cGlyZXNfYXQ7XG4gICAgICAgICAgaWYgKGV4cGlyZXNEYXRlICYmIGV4cGlyZXNEYXRlLl9fdHlwZSA9PSAnRGF0ZScpIHtcbiAgICAgICAgICAgIGV4cGlyZXNEYXRlID0gbmV3IERhdGUoZXhwaXJlc0RhdGUuaXNvKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV4cGlyZXNEYXRlIDwgbmV3IERhdGUoKSkgdGhyb3cgJ1RoZSBwYXNzd29yZCByZXNldCBsaW5rIGhhcyBleHBpcmVkJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0c1swXTtcbiAgICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0VXNlcklmTmVlZGVkKHVzZXIpIHtcbiAgICBpZiAodXNlci51c2VybmFtZSAmJiB1c2VyLmVtYWlsKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVzZXIpO1xuICAgIH1cbiAgICB2YXIgd2hlcmUgPSB7fTtcbiAgICBpZiAodXNlci51c2VybmFtZSkge1xuICAgICAgd2hlcmUudXNlcm5hbWUgPSB1c2VyLnVzZXJuYW1lO1xuICAgIH1cbiAgICBpZiAodXNlci5lbWFpbCkge1xuICAgICAgd2hlcmUuZW1haWwgPSB1c2VyLmVtYWlsO1xuICAgIH1cblxuICAgIHZhciBxdWVyeSA9IGF3YWl0IFJlc3RRdWVyeSh7XG4gICAgICBtZXRob2Q6IFJlc3RRdWVyeS5NZXRob2QuZ2V0LFxuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIHJ1bkJlZm9yZUZpbmQ6IGZhbHNlLFxuICAgICAgYXV0aDogQXV0aC5tYXN0ZXIodGhpcy5jb25maWcpLFxuICAgICAgY2xhc3NOYW1lOiAnX1VzZXInLFxuICAgICAgcmVzdFdoZXJlOiB3aGVyZSxcbiAgICB9KTtcbiAgICByZXR1cm4gcXVlcnkuZXhlY3V0ZSgpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgaWYgKHJlc3VsdC5yZXN1bHRzLmxlbmd0aCAhPSAxKSB7XG4gICAgICAgIHRocm93IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQucmVzdWx0c1swXTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHNlbmRWZXJpZmljYXRpb25FbWFpbCh1c2VyLCByZXEpIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkVmVyaWZ5RW1haWxzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRva2VuID0gZW5jb2RlVVJJQ29tcG9uZW50KHVzZXIuX2VtYWlsX3ZlcmlmeV90b2tlbik7XG4gICAgLy8gV2UgbWF5IG5lZWQgdG8gZmV0Y2ggdGhlIHVzZXIgaW4gY2FzZSBvZiB1cGRhdGUgZW1haWxcbiAgICBjb25zdCBmZXRjaGVkVXNlciA9IGF3YWl0IHRoaXMuZ2V0VXNlcklmTmVlZGVkKHVzZXIpO1xuICAgIGxldCBzaG91bGRTZW5kRW1haWwgPSB0aGlzLmNvbmZpZy5zZW5kVXNlckVtYWlsVmVyaWZpY2F0aW9uO1xuICAgIGlmICh0eXBlb2Ygc2hvdWxkU2VuZEVtYWlsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgdGhpcy5jb25maWcuc2VuZFVzZXJFbWFpbFZlcmlmaWNhdGlvbih7XG4gICAgICAgICAgdXNlcjogUGFyc2UuT2JqZWN0LmZyb21KU09OKHsgY2xhc3NOYW1lOiAnX1VzZXInLCAuLi5mZXRjaGVkVXNlciB9KSxcbiAgICAgICAgICBtYXN0ZXI6IHJlcS5hdXRoPy5pc01hc3RlcixcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBzaG91bGRTZW5kRW1haWwgPSAhIXJlc3BvbnNlO1xuICAgIH1cbiAgICBpZiAoIXNob3VsZFNlbmRFbWFpbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1c2VybmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudCh1c2VyLnVzZXJuYW1lKTtcblxuICAgIGNvbnN0IGxpbmsgPSBidWlsZEVtYWlsTGluayh0aGlzLmNvbmZpZy52ZXJpZnlFbWFpbFVSTCwgdXNlcm5hbWUsIHRva2VuLCB0aGlzLmNvbmZpZyk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIGFwcE5hbWU6IHRoaXMuY29uZmlnLmFwcE5hbWUsXG4gICAgICBsaW5rOiBsaW5rLFxuICAgICAgdXNlcjogaW5mbGF0ZSgnX1VzZXInLCBmZXRjaGVkVXNlciksXG4gICAgfTtcbiAgICBpZiAodGhpcy5hZGFwdGVyLnNlbmRWZXJpZmljYXRpb25FbWFpbCkge1xuICAgICAgdGhpcy5hZGFwdGVyLnNlbmRWZXJpZmljYXRpb25FbWFpbChvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZGFwdGVyLnNlbmRNYWlsKHRoaXMuZGVmYXVsdFZlcmlmaWNhdGlvbkVtYWlsKG9wdGlvbnMpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVnZW5lcmF0ZXMgdGhlIGdpdmVuIHVzZXIncyBlbWFpbCB2ZXJpZmljYXRpb24gdG9rZW5cbiAgICpcbiAgICogQHBhcmFtIHVzZXJcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBhc3luYyByZWdlbmVyYXRlRW1haWxWZXJpZnlUb2tlbih1c2VyLCBtYXN0ZXIpIHtcbiAgICBjb25zdCB7IF9lbWFpbF92ZXJpZnlfdG9rZW4gfSA9IHVzZXI7XG4gICAgbGV0IHsgX2VtYWlsX3ZlcmlmeV90b2tlbl9leHBpcmVzX2F0IH0gPSB1c2VyO1xuICAgIGlmIChfZW1haWxfdmVyaWZ5X3Rva2VuX2V4cGlyZXNfYXQgJiYgX2VtYWlsX3ZlcmlmeV90b2tlbl9leHBpcmVzX2F0Ll9fdHlwZSA9PT0gJ0RhdGUnKSB7XG4gICAgICBfZW1haWxfdmVyaWZ5X3Rva2VuX2V4cGlyZXNfYXQgPSBfZW1haWxfdmVyaWZ5X3Rva2VuX2V4cGlyZXNfYXQuaXNvO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbmZpZy5lbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkICYmXG4gICAgICB0aGlzLmNvbmZpZy5lbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbiAmJlxuICAgICAgX2VtYWlsX3ZlcmlmeV90b2tlbiAmJlxuICAgICAgbmV3IERhdGUoKSA8IG5ldyBEYXRlKF9lbWFpbF92ZXJpZnlfdG9rZW5fZXhwaXJlc19hdClcbiAgICApIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgY29uc3Qgc2hvdWxkU2VuZCA9IGF3YWl0IHRoaXMuc2V0RW1haWxWZXJpZnlUb2tlbih1c2VyLCB7IHVzZXIsIG1hc3RlciB9KTtcbiAgICBpZiAoIXNob3VsZFNlbmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRhdGFiYXNlLnVwZGF0ZSgnX1VzZXInLCB7IHVzZXJuYW1lOiB1c2VyLnVzZXJuYW1lIH0sIHVzZXIpO1xuICB9XG5cbiAgYXN5bmMgcmVzZW5kVmVyaWZpY2F0aW9uRW1haWwodXNlcm5hbWUsIHJlcSkge1xuICAgIGNvbnN0IGFVc2VyID0gYXdhaXQgdGhpcy5nZXRVc2VySWZOZWVkZWQoeyB1c2VybmFtZTogdXNlcm5hbWUgfSk7XG4gICAgaWYgKCFhVXNlciB8fCBhVXNlci5lbWFpbFZlcmlmaWVkKSB7XG4gICAgICB0aHJvdyB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGdlbmVyYXRlID0gYXdhaXQgdGhpcy5yZWdlbmVyYXRlRW1haWxWZXJpZnlUb2tlbihhVXNlciwgcmVxLmF1dGg/LmlzTWFzdGVyKTtcbiAgICBpZiAoZ2VuZXJhdGUpIHtcbiAgICAgIHRoaXMuc2VuZFZlcmlmaWNhdGlvbkVtYWlsKGFVc2VyLCByZXEpO1xuICAgIH1cbiAgfVxuXG4gIHNldFBhc3N3b3JkUmVzZXRUb2tlbihlbWFpbCkge1xuICAgIGNvbnN0IHRva2VuID0geyBfcGVyaXNoYWJsZV90b2tlbjogcmFuZG9tU3RyaW5nKDI1KSB9O1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLnBhc3N3b3JkUG9saWN5ICYmIHRoaXMuY29uZmlnLnBhc3N3b3JkUG9saWN5LnJlc2V0VG9rZW5WYWxpZGl0eUR1cmF0aW9uKSB7XG4gICAgICB0b2tlbi5fcGVyaXNoYWJsZV90b2tlbl9leHBpcmVzX2F0ID0gUGFyc2UuX2VuY29kZShcbiAgICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVQYXNzd29yZFJlc2V0VG9rZW5FeHBpcmVzQXQoKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb25maWcuZGF0YWJhc2UudXBkYXRlKFxuICAgICAgJ19Vc2VyJyxcbiAgICAgIHsgJG9yOiBbeyBlbWFpbCB9LCB7IHVzZXJuYW1lOiBlbWFpbCwgZW1haWw6IHsgJGV4aXN0czogZmFsc2UgfSB9XSB9LFxuICAgICAgdG9rZW4sXG4gICAgICB7fSxcbiAgICAgIHRydWVcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgc2VuZFBhc3N3b3JkUmVzZXRFbWFpbChlbWFpbCkge1xuICAgIGlmICghdGhpcy5hZGFwdGVyKSB7XG4gICAgICB0aHJvdyAnVHJ5aW5nIHRvIHNlbmQgYSByZXNldCBwYXNzd29yZCBidXQgbm8gYWRhcHRlciBpcyBzZXQnO1xuICAgICAgLy8gIFRPRE86IE5vIGFkYXB0ZXI/XG4gICAgfVxuICAgIGxldCB1c2VyO1xuICAgIGlmIChcbiAgICAgIHRoaXMuY29uZmlnLnBhc3N3b3JkUG9saWN5ICYmXG4gICAgICB0aGlzLmNvbmZpZy5wYXNzd29yZFBvbGljeS5yZXNldFRva2VuUmV1c2VJZlZhbGlkICYmXG4gICAgICB0aGlzLmNvbmZpZy5wYXNzd29yZFBvbGljeS5yZXNldFRva2VuVmFsaWRpdHlEdXJhdGlvblxuICAgICkge1xuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuY29uZmlnLmRhdGFiYXNlLmZpbmQoXG4gICAgICAgICdfVXNlcicsXG4gICAgICAgIHtcbiAgICAgICAgICAkb3I6IFtcbiAgICAgICAgICAgIHsgZW1haWwsIF9wZXJpc2hhYmxlX3Rva2VuOiB7ICRleGlzdHM6IHRydWUgfSB9LFxuICAgICAgICAgICAgeyB1c2VybmFtZTogZW1haWwsIGVtYWlsOiB7ICRleGlzdHM6IGZhbHNlIH0sIF9wZXJpc2hhYmxlX3Rva2VuOiB7ICRleGlzdHM6IHRydWUgfSB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHsgbGltaXQ6IDEgfSxcbiAgICAgICAgQXV0aC5tYWludGVuYW5jZSh0aGlzLmNvbmZpZylcbiAgICAgICk7XG4gICAgICBpZiAocmVzdWx0cy5sZW5ndGggPT0gMSkge1xuICAgICAgICBsZXQgZXhwaXJlc0RhdGUgPSByZXN1bHRzWzBdLl9wZXJpc2hhYmxlX3Rva2VuX2V4cGlyZXNfYXQ7XG4gICAgICAgIGlmIChleHBpcmVzRGF0ZSAmJiBleHBpcmVzRGF0ZS5fX3R5cGUgPT0gJ0RhdGUnKSB7XG4gICAgICAgICAgZXhwaXJlc0RhdGUgPSBuZXcgRGF0ZShleHBpcmVzRGF0ZS5pc28pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleHBpcmVzRGF0ZSA+IG5ldyBEYXRlKCkpIHtcbiAgICAgICAgICB1c2VyID0gcmVzdWx0c1swXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXVzZXIgfHwgIXVzZXIuX3BlcmlzaGFibGVfdG9rZW4pIHtcbiAgICAgIHVzZXIgPSBhd2FpdCB0aGlzLnNldFBhc3N3b3JkUmVzZXRUb2tlbihlbWFpbCk7XG4gICAgfVxuICAgIGNvbnN0IHRva2VuID0gZW5jb2RlVVJJQ29tcG9uZW50KHVzZXIuX3BlcmlzaGFibGVfdG9rZW4pO1xuICAgIGNvbnN0IHVzZXJuYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KHVzZXIudXNlcm5hbWUpO1xuXG4gICAgY29uc3QgbGluayA9IGJ1aWxkRW1haWxMaW5rKHRoaXMuY29uZmlnLnJlcXVlc3RSZXNldFBhc3N3b3JkVVJMLCB1c2VybmFtZSwgdG9rZW4sIHRoaXMuY29uZmlnKTtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgYXBwTmFtZTogdGhpcy5jb25maWcuYXBwTmFtZSxcbiAgICAgIGxpbms6IGxpbmssXG4gICAgICB1c2VyOiBpbmZsYXRlKCdfVXNlcicsIHVzZXIpLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5hZGFwdGVyLnNlbmRQYXNzd29yZFJlc2V0RW1haWwpIHtcbiAgICAgIHRoaXMuYWRhcHRlci5zZW5kUGFzc3dvcmRSZXNldEVtYWlsKG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkYXB0ZXIuc2VuZE1haWwodGhpcy5kZWZhdWx0UmVzZXRQYXNzd29yZEVtYWlsKG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVzZXIpO1xuICB9XG5cbiAgdXBkYXRlUGFzc3dvcmQodXNlcm5hbWUsIHRva2VuLCBwYXNzd29yZCkge1xuICAgIHJldHVybiB0aGlzLmNoZWNrUmVzZXRUb2tlblZhbGlkaXR5KHVzZXJuYW1lLCB0b2tlbilcbiAgICAgIC50aGVuKHVzZXIgPT4gdXBkYXRlVXNlclBhc3N3b3JkKHVzZXIsIHBhc3N3b3JkLCB0aGlzLmNvbmZpZykpXG4gICAgICAudGhlbih1c2VyID0+IHtcbiAgICAgICAgY29uc3QgYWNjb3VudExvY2tvdXRQb2xpY3kgPSBuZXcgQWNjb3VudExvY2tvdXQodXNlciwgdGhpcy5jb25maWcpO1xuICAgICAgICByZXR1cm4gYWNjb3VudExvY2tvdXRQb2xpY3kudW5sb2NrQWNjb3VudCgpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5tZXNzYWdlKSB7XG4gICAgICAgICAgLy8gaW4gY2FzZSBvZiBQYXJzZS5FcnJvciwgZmFpbCB3aXRoIHRoZSBlcnJvciBtZXNzYWdlIG9ubHlcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBkZWZhdWx0VmVyaWZpY2F0aW9uRW1haWwoeyBsaW5rLCB1c2VyLCBhcHBOYW1lIH0pIHtcbiAgICBjb25zdCB0ZXh0ID1cbiAgICAgICdIaSxcXG5cXG4nICtcbiAgICAgICdZb3UgYXJlIGJlaW5nIGFza2VkIHRvIGNvbmZpcm0gdGhlIGUtbWFpbCBhZGRyZXNzICcgK1xuICAgICAgdXNlci5nZXQoJ2VtYWlsJykgK1xuICAgICAgJyB3aXRoICcgK1xuICAgICAgYXBwTmFtZSArXG4gICAgICAnXFxuXFxuJyArXG4gICAgICAnJyArXG4gICAgICAnQ2xpY2sgaGVyZSB0byBjb25maXJtIGl0OlxcbicgK1xuICAgICAgbGluaztcbiAgICBjb25zdCB0byA9IHVzZXIuZ2V0KCdlbWFpbCcpO1xuICAgIGNvbnN0IHN1YmplY3QgPSAnUGxlYXNlIHZlcmlmeSB5b3VyIGUtbWFpbCBmb3IgJyArIGFwcE5hbWU7XG4gICAgcmV0dXJuIHsgdGV4dCwgdG8sIHN1YmplY3QgfTtcbiAgfVxuXG4gIGRlZmF1bHRSZXNldFBhc3N3b3JkRW1haWwoeyBsaW5rLCB1c2VyLCBhcHBOYW1lIH0pIHtcbiAgICBjb25zdCB0ZXh0ID1cbiAgICAgICdIaSxcXG5cXG4nICtcbiAgICAgICdZb3UgcmVxdWVzdGVkIHRvIHJlc2V0IHlvdXIgcGFzc3dvcmQgZm9yICcgK1xuICAgICAgYXBwTmFtZSArXG4gICAgICAodXNlci5nZXQoJ3VzZXJuYW1lJykgPyBcIiAoeW91ciB1c2VybmFtZSBpcyAnXCIgKyB1c2VyLmdldCgndXNlcm5hbWUnKSArIFwiJylcIiA6ICcnKSArXG4gICAgICAnLlxcblxcbicgK1xuICAgICAgJycgK1xuICAgICAgJ0NsaWNrIGhlcmUgdG8gcmVzZXQgaXQ6XFxuJyArXG4gICAgICBsaW5rO1xuICAgIGNvbnN0IHRvID0gdXNlci5nZXQoJ2VtYWlsJykgfHwgdXNlci5nZXQoJ3VzZXJuYW1lJyk7XG4gICAgY29uc3Qgc3ViamVjdCA9ICdQYXNzd29yZCBSZXNldCBmb3IgJyArIGFwcE5hbWU7XG4gICAgcmV0dXJuIHsgdGV4dCwgdG8sIHN1YmplY3QgfTtcbiAgfVxufVxuXG4vLyBNYXJrIHRoaXMgcHJpdmF0ZVxuZnVuY3Rpb24gdXBkYXRlVXNlclBhc3N3b3JkKHVzZXIsIHBhc3N3b3JkLCBjb25maWcpIHtcbiAgcmV0dXJuIHJlc3RcbiAgICAudXBkYXRlKFxuICAgICAgY29uZmlnLFxuICAgICAgQXV0aC5tYXN0ZXIoY29uZmlnKSxcbiAgICAgICdfVXNlcicsXG4gICAgICB7IG9iamVjdElkOiB1c2VyLm9iamVjdElkIH0sXG4gICAgICB7XG4gICAgICAgIHBhc3N3b3JkOiBwYXNzd29yZCxcbiAgICAgIH1cbiAgICApXG4gICAgLnRoZW4oKCkgPT4gdXNlcik7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRW1haWxMaW5rKGRlc3RpbmF0aW9uLCB1c2VybmFtZSwgdG9rZW4sIGNvbmZpZykge1xuICBjb25zdCB1c2VybmFtZUFuZFRva2VuID0gYHRva2VuPSR7dG9rZW59JnVzZXJuYW1lPSR7dXNlcm5hbWV9YDtcblxuICBpZiAoY29uZmlnLnBhcnNlRnJhbWVVUkwpIHtcbiAgICBjb25zdCBkZXN0aW5hdGlvbldpdGhvdXRIb3N0ID0gZGVzdGluYXRpb24ucmVwbGFjZShjb25maWcucHVibGljU2VydmVyVVJMLCAnJyk7XG5cbiAgICByZXR1cm4gYCR7Y29uZmlnLnBhcnNlRnJhbWVVUkx9P2xpbms9JHtlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICBkZXN0aW5hdGlvbldpdGhvdXRIb3N0XG4gICAgKX0mJHt1c2VybmFtZUFuZFRva2VufWA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGAke2Rlc3RpbmF0aW9ufT8ke3VzZXJuYW1lQW5kVG9rZW59YDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBVc2VyQ29udHJvbGxlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsWUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsU0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsb0JBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLFlBQUEsR0FBQUQsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFLLEtBQUEsR0FBQUYsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFNLEtBQUEsR0FBQUgsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFPLGVBQUEsR0FBQUosc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFRLE9BQUEsR0FBQUwsc0JBQUEsQ0FBQUgsT0FBQTtBQUErQixTQUFBRyx1QkFBQU0sR0FBQSxXQUFBQSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxHQUFBRCxHQUFBLEtBQUFFLE9BQUEsRUFBQUYsR0FBQTtBQUFBLFNBQUFHLFFBQUFDLE1BQUEsRUFBQUMsY0FBQSxRQUFBQyxJQUFBLEdBQUFDLE1BQUEsQ0FBQUQsSUFBQSxDQUFBRixNQUFBLE9BQUFHLE1BQUEsQ0FBQUMscUJBQUEsUUFBQUMsT0FBQSxHQUFBRixNQUFBLENBQUFDLHFCQUFBLENBQUFKLE1BQUEsR0FBQUMsY0FBQSxLQUFBSSxPQUFBLEdBQUFBLE9BQUEsQ0FBQUMsTUFBQSxXQUFBQyxHQUFBLFdBQUFKLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVIsTUFBQSxFQUFBTyxHQUFBLEVBQUFFLFVBQUEsT0FBQVAsSUFBQSxDQUFBUSxJQUFBLENBQUFDLEtBQUEsQ0FBQVQsSUFBQSxFQUFBRyxPQUFBLFlBQUFILElBQUE7QUFBQSxTQUFBVSxjQUFBQyxNQUFBLGFBQUFDLENBQUEsTUFBQUEsQ0FBQSxHQUFBQyxTQUFBLENBQUFDLE1BQUEsRUFBQUYsQ0FBQSxVQUFBRyxNQUFBLFdBQUFGLFNBQUEsQ0FBQUQs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
@@ -45,7 +45,8 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
45
45
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
46
46
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
47
47
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
48
- function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
48
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } // Controllers
49
+ // Adapters
49
50
  function getControllers(options) {
50
51
  const loggerController = getLoggerController(options);
51
52
  const filesController = getFilesController(options);
@@ -258,4 +259,4 @@ function getDatabaseAdapter(databaseURI, collectionPrefix, databaseOptions) {
258
259
  });
259
260
  }
260
261
  }
261
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDb250cm9sbGVycyIsIm9wdGlvbnMiLCJsb2dnZXJDb250cm9sbGVyIiwiZ2V0TG9nZ2VyQ29udHJvbGxlciIsImZpbGVzQ29udHJvbGxlciIsImdldEZpbGVzQ29udHJvbGxlciIsInVzZXJDb250cm9sbGVyIiwiZ2V0VXNlckNvbnRyb2xsZXIiLCJwdXNoQ29udHJvbGxlciIsImhhc1B1c2hTY2hlZHVsZWRTdXBwb3J0IiwiaGFzUHVzaFN1cHBvcnQiLCJwdXNoQ29udHJvbGxlclF1ZXVlIiwicHVzaFdvcmtlciIsImdldFB1c2hDb250cm9sbGVyIiwiY2FjaGVDb250cm9sbGVyIiwiZ2V0Q2FjaGVDb250cm9sbGVyIiwiYW5hbHl0aWNzQ29udHJvbGxlciIsImdldEFuYWx5dGljc0NvbnRyb2xsZXIiLCJsaXZlUXVlcnlDb250cm9sbGVyIiwiZ2V0TGl2ZVF1ZXJ5Q29udHJvbGxlciIsImRhdGFiYXNlQ29udHJvbGxlciIsImdldERhdGFiYXNlQ29udHJvbGxlciIsImhvb2tzQ29udHJvbGxlciIsImdldEhvb2tzQ29udHJvbGxlciIsImF1dGhEYXRhTWFuYWdlciIsImdldEF1dGhEYXRhTWFuYWdlciIsInBhcnNlR3JhcGhRTENvbnRyb2xsZXIiLCJnZXRQYXJzZUdyYXBoUUxDb250cm9sbGVyIiwic2NoZW1hQ2FjaGUiLCJTY2hlbWFDYWNoZSIsImFwcElkIiwianNvbkxvZ3MiLCJsb2dzRm9sZGVyIiwidmVyYm9zZSIsImxvZ0xldmVsIiwibWF4TG9nRmlsZXMiLCJzaWxlbnQiLCJsb2dnZXJBZGFwdGVyIiwibG9nZ2VyT3B0aW9ucyIsImxvZ2dlckNvbnRyb2xsZXJBZGFwdGVyIiwibG9hZEFkYXB0ZXIiLCJXaW5zdG9uTG9nZ2VyQWRhcHRlciIsIkxvZ2dlckNvbnRyb2xsZXIiLCJkYXRhYmFzZVVSSSIsImRhdGFiYXNlT3B0aW9ucyIsImZpbGVzQWRhcHRlciIsImRhdGFiYXNlQWRhcHRlciIsInByZXNlcnZlRmlsZU5hbWUiLCJmaWxlS2V5IiwiZmlsZXNDb250cm9sbGVyQWRhcHRlciIsIkdyaWRGU0J1Y2tldEFkYXB0ZXIiLCJGaWxlc0NvbnRyb2xsZXIiLCJlbWFpbEFkYXB0ZXIiLCJ2ZXJpZnlVc2VyRW1haWxzIiwiZW1haWxDb250cm9sbGVyQWRhcHRlciIsIlVzZXJDb250cm9sbGVyIiwiY2FjaGVBZGFwdGVyIiwiY2FjaGVUVEwiLCJjYWNoZU1heFNpemUiLCJjYWNoZUNvbnRyb2xsZXJBZGFwdGVyIiwiSW5NZW1vcnlDYWNoZUFkYXB0ZXIiLCJ0dGwiLCJtYXhTaXplIiwiQ2FjaGVDb250cm9sbGVyIiwiY29udHJvbGxlckRlcHMiLCJQYXJzZUdyYXBoUUxDb250cm9sbGVyIiwibW91bnRHcmFwaFFMIiwiYW5hbHl0aWNzQWRhcHRlciIsImFuYWx5dGljc0NvbnRyb2xsZXJBZGFwdGVyIiwiQW5hbHl0aWNzQWRhcHRlciIsIkFuYWx5dGljc0NvbnRyb2xsZXIiLCJMaXZlUXVlcnlDb250cm9sbGVyIiwibGl2ZVF1ZXJ5IiwiY29sbGVjdGlvblByZWZpeCIsImRlZmF1bHRzIiwiZ2V0RGF0YWJhc2VBZGFwdGVyIiwiRGF0YWJhc2VDb250cm9sbGVyIiwid2ViaG9va0tleSIsIkhvb2tzQ29udHJvbGxlciIsInNjaGVkdWxlZFB1c2giLCJwdXNoIiwicHVzaE9wdGlvbnMiLCJPYmplY3QiLCJhc3NpZ24iLCJwdXNoUXVldWVPcHRpb25zIiwicXVldWVPcHRpb25zIiwicHVzaEFkYXB0ZXIiLCJhZGFwdGVyIiwiUGFyc2VQdXNoQWRhcHRlciIsIlB1c2hDb250cm9sbGVyIiwiZGlzYWJsZVB1c2hXb3JrZXIiLCJQdXNoUXVldWUiLCJQdXNoV29ya2VyIiwiYXV0aCIsImVuYWJsZUFub255bW91c1VzZXJzIiwicHJvdG9jb2wiLCJwYXJzZWRVUkkiLCJVUkwiLCJ0b0xvd2VyQ2FzZSIsImUiLCJQb3N0Z3Jlc1N0b3JhZ2VBZGFwdGVyIiwidXJpIiwiTW9uZ29TdG9yYWdlQWRhcHRlciIsIm1vbmdvT3B0aW9ucyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Db250cm9sbGVycy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXV0aERhdGFNYW5hZ2VyIGZyb20gJy4uL0FkYXB0ZXJzL0F1dGgnO1xuaW1wb3J0IHsgUGFyc2VTZXJ2ZXJPcHRpb25zIH0gZnJvbSAnLi4vT3B0aW9ucyc7XG5pbXBvcnQgeyBsb2FkQWRhcHRlciB9IGZyb20gJy4uL0FkYXB0ZXJzL0FkYXB0ZXJMb2FkZXInO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzJztcbi8vIENvbnRyb2xsZXJzXG5pbXBvcnQgeyBMb2dnZXJDb250cm9sbGVyIH0gZnJvbSAnLi9Mb2dnZXJDb250cm9sbGVyJztcbmltcG9ydCB7IEZpbGVzQ29udHJvbGxlciB9IGZyb20gJy4vRmlsZXNDb250cm9sbGVyJztcbmltcG9ydCB7IEhvb2tzQ29udHJvbGxlciB9IGZyb20gJy4vSG9va3NDb250cm9sbGVyJztcbmltcG9ydCB7IFVzZXJDb250cm9sbGVyIH0gZnJvbSAnLi9Vc2VyQ29udHJvbGxlcic7XG5pbXBvcnQgeyBDYWNoZUNvbnRyb2xsZXIgfSBmcm9tICcuL0NhY2hlQ29udHJvbGxlcic7XG5pbXBvcnQgeyBMaXZlUXVlcnlDb250cm9sbGVyIH0gZnJvbSAnLi9MaXZlUXVlcnlDb250cm9sbGVyJztcbmltcG9ydCB7IEFuYWx5dGljc0NvbnRyb2xsZXIgfSBmcm9tICcuL0FuYWx5dGljc0NvbnRyb2xsZXInO1xuaW1wb3J0IHsgUHVzaENvbnRyb2xsZXIgfSBmcm9tICcuL1B1c2hDb250cm9sbGVyJztcbmltcG9ydCB7IFB1c2hRdWV1ZSB9IGZyb20gJy4uL1B1c2gvUHVzaFF1ZXVlJztcbmltcG9ydCB7IFB1c2hXb3JrZXIgfSBmcm9tICcuLi9QdXNoL1B1c2hXb3JrZXInO1xuaW1wb3J0IERhdGFiYXNlQ29udHJvbGxlciBmcm9tICcuL0RhdGFiYXNlQ29udHJvbGxlcic7XG5cbi8vIEFkYXB0ZXJzXG5pbXBvcnQgeyBHcmlkRlNCdWNrZXRBZGFwdGVyIH0gZnJvbSAnLi4vQWRhcHRlcnMvRmlsZXMvR3JpZEZTQnVja2V0QWRhcHRlcic7XG5pbXBvcnQgeyBXaW5zdG9uTG9nZ2VyQWRhcHRlciB9IGZyb20gJy4uL0FkYXB0ZXJzL0xvZ2dlci9XaW5zdG9uTG9nZ2VyQWRhcHRlcic7XG5pbXBvcnQgeyBJbk1lbW9yeUNhY2hlQWRhcHRlciB9IGZyb20gJy4uL0FkYXB0ZXJzL0NhY2hlL0luTWVtb3J5Q2FjaGVBZGFwdGVyJztcbmltcG9ydCB7IEFuYWx5dGljc0FkYXB0ZXIgfSBmcm9tICcuLi9BZGFwdGVycy9BbmFseXRpY3MvQW5hbHl0aWNzQWRhcHRlcic7XG5pbXBvcnQgTW9uZ29TdG9yYWdlQWRhcHRlciBmcm9tICcuLi9BZGFwdGVycy9TdG9yYWdlL01vbmdvL01vbmdvU3RvcmFnZUFkYXB0ZXInO1xuaW1wb3J0IFBvc3RncmVzU3RvcmFnZUFkYXB0ZXIgZnJvbSAnLi4vQWRhcHRlcnMvU3RvcmFnZS9Qb3N0Z3Jlcy9Qb3N0Z3Jlc1N0b3JhZ2VBZGFwdGVyJztcbmltcG9ydCBQYXJzZVB1c2hBZGFwdGVyIGZyb20gJ0BwYXJzZS9wdXNoLWFkYXB0ZXInO1xuaW1wb3J0IFBhcnNlR3JhcGhRTENvbnRyb2xsZXIgZnJvbSAnLi9QYXJzZUdyYXBoUUxDb250cm9sbGVyJztcbmltcG9ydCBTY2hlbWFDYWNoZSBmcm9tICcuLi9BZGFwdGVycy9DYWNoZS9TY2hlbWFDYWNoZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250cm9sbGVycyhvcHRpb25zOiBQYXJzZVNlcnZlck9wdGlvbnMpIHtcbiAgY29uc3QgbG9nZ2VyQ29udHJvbGxlciA9IGdldExvZ2dlckNvbnRyb2xsZXIob3B0aW9ucyk7XG4gIGNvbnN0IGZpbGVzQ29udHJvbGxlciA9IGdldEZpbGVzQ29udHJvbGxlcihvcHRpb25zKTtcbiAgY29uc3QgdXNlckNvbnRyb2xsZXIgPSBnZXRVc2VyQ29udHJvbGxlcihvcHRpb25zKTtcbiAgY29uc3Qge1xuICAgIHB1c2hDb250cm9sbGVyLFxuICAgIGhhc1B1c2hTY2hlZHVsZWRTdXBwb3J0LFxuICAgIGhhc1B1c2hTdXBwb3J0LFxuICAgIHB1c2hDb250cm9sbGVyUXVldWUsXG4gICAgcHVzaFdvcmtlcixcbiAgfSA9IGdldFB1c2hDb250cm9sbGVyKG9wdGlvbnMpO1xuICBjb25zdCBjYWNoZUNvbnRyb2xsZXIgPSBnZXRDYWNoZUNvbnRyb2xsZXIob3B0aW9ucyk7XG4gIGNvbnN0IGFuYWx5dGljc0NvbnRyb2xsZXIgPSBnZXRBbmFseXRpY3NDb250cm9sbGVyKG9wdGlvbnMpO1xuICBjb25zdCBsaXZlUXVlcnlDb250cm9sbGVyID0gZ2V0TGl2ZVF1ZXJ5Q29udHJvbGxlcihvcHRpb25zKTtcbiAgY29uc3QgZGF0YWJhc2VDb250cm9sbGVyID0gZ2V0RGF0YWJhc2VDb250cm9sbGVyKG9wdGlvbnMpO1xuICBjb25zdCBob29rc0NvbnRyb2xsZXIgPSBnZXRIb29rc0NvbnRyb2xsZXIob3B0aW9ucywgZGF0YWJhc2VDb250cm9sbGVyKTtcbiAgY29uc3QgYXV0aERhdGFNYW5hZ2VyID0gZ2V0QXV0aERhdGFNYW5hZ2VyKG9wdGlvbnMpO1xuICBjb25zdCBwYXJzZUdyYXBoUUxDb250cm9sbGVyID0gZ2V0UGFyc2VHcmFwaFFMQ29udHJvbGxlcihvcHRpb25zLCB7XG4gICAgZGF0YWJhc2VDb250cm9sbGVyLFxuICAgIGNhY2hlQ29udHJvbGxlcixcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgbG9nZ2VyQ29udHJvbGxlcixcbiAgICBmaWxlc0NvbnRyb2xsZXIsXG4gICAgdXNlckNvbnRyb2xsZXIsXG4gICAgcHVzaENvbnRyb2xsZXIsXG4gICAgaGFzUHVzaFNjaGVkdWxlZFN1cHBvcnQsXG4gICAgaGFzUHVzaFN1cHBvcnQsXG4gICAgcHVzaFdvcmtlcixcbiAgICBwdXNoQ29udHJvbGxlclF1ZXVlLFxuICAgIGFuYWx5dGljc0NvbnRyb2xsZXIsXG4gICAgY2FjaGVDb250cm9sbGVyLFxuICAgIHBhcnNlR3JhcGhRTENvbnRyb2xsZXIsXG4gICAgbGl2ZVF1ZXJ5Q29udHJvbGxlcixcbiAgICBkYXRhYmFzZUNvbnRyb2xsZXIsXG4gICAgaG9va3NDb250cm9sbGVyLFxuICAgIGF1dGhEYXRhTWFuYWdlcixcbiAgICBzY2hlbWFDYWNoZTogU2NoZW1hQ2FjaGUsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2dnZXJDb250cm9sbGVyKG9wdGlvbnM6IFBhcnNlU2VydmVyT3B0aW9ucyk6IExvZ2dlckNvbnRyb2xsZXIge1xuICBjb25zdCB7XG4gICAgYXBwSWQsXG4gICAganNvbkxvZ3MsXG4gICAgbG9nc0ZvbGRlcixcbiAgICB2ZXJib3NlLFxuICAgIGxvZ0xldmVsLFxuICAgIG1heExvZ0ZpbGVzLFxuICAgIHNpbGVudCxcbiAgICBsb2dnZXJBZGFwdGVyLFxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgbG9nZ2VyT3B0aW9ucyA9IHtcbiAgICBqc29uTG9ncyxcbiAgICBsb2dzRm9sZGVyLFxuICAgIHZlcmJvc2UsXG4gICAgbG9nTGV2ZWwsXG4gICAgc2lsZW50LFxuICAgIG1heExvZ0ZpbGVzLFxuICB9O1xuICBjb25zdCBsb2dnZXJDb250cm9sbGVyQWRhcHRlciA9IGxvYWRBZGFwdGVyKGxvZ2dlckFkYXB0ZXIsIFdpbnN0b25Mb2dnZXJBZGFwdGVyLCBsb2dnZXJPcHRpb25zKTtcbiAgcmV0dXJuIG5ldyBMb2dnZXJDb250cm9sbGVyKGxvZ2dlckNvbnRyb2xsZXJBZGFwdGVyLCBhcHBJZCwgbG9nZ2VyT3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlc0NvbnRyb2xsZXIob3B0aW9uczogUGFyc2VTZXJ2ZXJPcHRpb25zKTogRmlsZXNDb250cm9sbGVyIHtcbiAgY29uc3Qge1xuICAgIGFwcElkLFxuICAgIGRhdGFiYXNlVVJJLFxuICAgIGRhdGFiYXNlT3B0aW9ucyA9IHt9LFxuICAgIGZpbGVzQWRhcHRlcixcbiAgICBkYXRhYmFzZUFkYXB0ZXIsXG4gICAgcHJlc2VydmVGaWxlTmFtZSxcbiAgICBmaWxlS2V5LFxuICB9ID0gb3B0aW9ucztcbiAgaWYgKCFmaWxlc0FkYXB0ZXIgJiYgZGF0YWJhc2VBZGFwdGVyKSB7XG4gICAgdGhyb3cgJ1doZW4gdXNpbmcgYW4gZXhwbGljaXQgZGF0YWJhc2UgYWRhcHRlciwgeW91IG11c3QgYWxzbyB1c2UgYW4gZXhwbGljaXQgZmlsZXNBZGFwdGVyLic7XG4gIH1cbiAgY29uc3QgZmlsZXNDb250cm9sbGVyQWRhcHRlciA9IGxvYWRBZGFwdGVyKGZpbGVzQWRhcHRlciwgKCkgPT4ge1xuICAgIHJldHVybiBuZXcgR3JpZEZTQnVja2V0QWRhcHRlcihkYXRhYmFzZVVSSSwgZGF0YWJhc2VPcHRpb25zLCBmaWxlS2V5KTtcbiAgfSk7XG4gIHJldHVybiBuZXcgRmlsZXNDb250cm9sbGVyKGZpbGVzQ29udHJvbGxlckFkYXB0ZXIsIGFwcElkLCB7XG4gICAgcHJlc2VydmVGaWxlTmFtZSxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVc2VyQ29udHJvbGxlcihvcHRpb25zOiBQYXJzZVNlcnZlck9wdGlvbnMpOiBVc2VyQ29udHJvbGxlciB7XG4gIGNvbnN0IHsgYXBwSWQsIGVtYWlsQWRhcHRlciwgdmVyaWZ5VXNlckVtYWlscyB9ID0gb3B0aW9ucztcbiAgY29uc3QgZW1haWxDb250cm9sbGVyQWRhcHRlciA9IGxvYWRBZGFwdGVyKGVtYWlsQWRhcHRlcik7XG4gIHJldHVybiBuZXcgVXNlckNvbnRyb2xsZXIoZW1haWxDb250cm9sbGVyQWRhcHRlciwgYXBwSWQsIHtcbiAgICB2ZXJpZnlVc2VyRW1haWxzLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENhY2hlQ29udHJvbGxlcihvcHRpb25zOiBQYXJzZVNlcnZlck9wdGlvbnMpOiBDYWNoZUNvbnRyb2xsZXIge1xuICBjb25zdCB7IGFwcElkLCBjYWNoZUFkYXB0ZXIsIGNhY2hlVFRMLCBjYWNoZU1heFNpemUgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGNhY2hlQ29udHJvbGxlckFkYXB0ZXIgPSBsb2FkQWRhcHRlcihjYWNoZUFkYXB0ZXIsIEluTWVtb3J5Q2FjaGVBZGFwdGVyLCB7XG4gICAgYXBwSWQ6IGFwcElkLFxuICAgIHR0bDogY2FjaGVUVEwsXG4gICAgbWF4U2l6ZTogY2FjaGVNYXhTaXplLFxuICB9KTtcbiAgcmV0dXJuIG5ldyBDYWNoZUNvbnRyb2xsZXIoY2FjaGVDb250cm9sbGVyQWRhcHRlciwgYXBwSWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyc2VHcmFwaFFMQ29udHJvbGxlcihcbiAgb3B0aW9uczogUGFyc2VTZXJ2ZXJPcHRpb25zLFxuICBjb250cm9sbGVyRGVwc1xuKTogUGFyc2VHcmFwaFFMQ29udHJvbGxlciB7XG4gIHJldHVybiBuZXcgUGFyc2VHcmFwaFFMQ29udHJvbGxlcih7XG4gICAgbW91bnRHcmFwaFFMOiBvcHRpb25zLm1vdW50R3JhcGhRTCxcbiAgICAuLi5jb250cm9sbGVyRGVwcyxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbmFseXRpY3NDb250cm9sbGVyKG9wdGlvbnM6IFBhcnNlU2VydmVyT3B0aW9ucyk6IEFuYWx5dGljc0NvbnRyb2xsZXIge1xuICBjb25zdCB7IGFuYWx5dGljc0FkYXB0ZXIgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGFuYWx5dGljc0NvbnRyb2xsZXJBZGFwdGVyID0gbG9hZEFkYXB0ZXIoYW5hbHl0aWNzQWRhcHRlciwgQW5hbHl0aWNzQWRhcHRlcik7XG4gIHJldHVybiBuZXcgQW5hbHl0aWNzQ29udHJvbGxlcihhbmFseXRpY3NDb250cm9sbGVyQWRhcHRlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXZlUXVlcnlDb250cm9sbGVyKG9wdGlvbnM6IFBhcnNlU2VydmVyT3B0aW9ucyk6IExpdmVRdWVyeUNvbnRyb2xsZXIge1xuICByZXR1cm4gbmV3IExpdmVRdWVyeUNvbnRyb2xsZXIob3B0aW9ucy5saXZlUXVlcnkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0YWJhc2VDb250cm9sbGVyKG9wdGlvbnM6IFBhcnNlU2VydmVyT3B0aW9ucyk6IERhdGFiYXNlQ29udHJvbGxlciB7XG4gIGNvbnN0IHsgZGF0YWJhc2VVUkksIGNvbGxlY3Rpb25QcmVmaXgsIGRhdGFiYXNlT3B0aW9ucyB9ID0gb3B0aW9ucztcbiAgbGV0IHsgZGF0YWJhc2VBZGFwdGVyIH0gPSBvcHRpb25zO1xuICBpZiAoXG4gICAgKGRhdGFiYXNlT3B0aW9ucyB8fFxuICAgICAgKGRhdGFiYXNlVVJJICYmIGRhdGFiYXNlVVJJICE9PSBkZWZhdWx0cy5kYXRhYmFzZVVSSSkgfHxcbiAgICAgIGNvbGxlY3Rpb25QcmVmaXggIT09IGRlZmF1bHRzLmNvbGxlY3Rpb25QcmVmaXgpICYmXG4gICAgZGF0YWJhc2VBZGFwdGVyXG4gICkge1xuICAgIHRocm93ICdZb3UgY2Fubm90IHNwZWNpZnkgYm90aCBhIGRhdGFiYXNlQWRhcHRlciBhbmQgYSBkYXRhYmFzZVVSSS9kYXRhYmFzZU9wdGlvbnMvY29sbGVjdGlvblByZWZpeC4nO1xuICB9IGVsc2UgaWYgKCFkYXRhYmFzZUFkYXB0ZXIpIHtcbiAgICBkYXRhYmFzZUFkYXB0ZXIgPSBnZXREYXRhYmFzZUFkYXB0ZXIoZGF0YWJhc2VVUkksIGNvbGxlY3Rpb25QcmVmaXgsIGRhdGFiYXNlT3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgZGF0YWJhc2VBZGFwdGVyID0gbG9hZEFkYXB0ZXIoZGF0YWJhc2VBZGFwdGVyKTtcbiAgfVxuICByZXR1cm4gbmV3IERhdGFiYXNlQ29udHJvbGxlcihkYXRhYmFzZUFkYXB0ZXIsIG9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SG9va3NDb250cm9sbGVyKFxuICBvcHRpb25zOiBQYXJzZVNlcnZlck9wdGlvbnMsXG4gIGRhdGFiYXNlQ29udHJvbGxlcjogRGF0YWJhc2VDb250cm9sbGVyXG4pOiBIb29rc0NvbnRyb2xsZXIge1xuICBjb25zdCB7IGFwcElkLCB3ZWJob29rS2V5IH0gPSBvcHRpb25zO1xuICByZXR1cm4gbmV3IEhvb2tzQ29udHJvbGxlcihhcHBJZCwgZGF0YWJhc2VDb250cm9sbGVyLCB3ZWJob29rS2V5KTtcbn1cblxuaW50ZXJmYWNlIFB1c2hDb250cm9sbGluZyB7XG4gIHB1c2hDb250cm9sbGVyOiBQdXNoQ29udHJvbGxlcjtcbiAgaGFzUHVzaFNjaGVkdWxlZFN1cHBvcnQ6IGJvb2xlYW47XG4gIHB1c2hDb250cm9sbGVyUXVldWU6IFB1c2hRdWV1ZTtcbiAgcHVzaFdvcmtlcjogUHVzaFdvcmtlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFB1c2hDb250cm9sbGVyKG9wdGlvbnM6IFBhcnNlU2VydmVyT3B0aW9ucyk6IFB1c2hDb250cm9sbGluZyB7XG4gIGNvbnN0IHsgc2NoZWR1bGVkUHVzaCwgcHVzaCB9ID0gb3B0aW9ucztcblxuICBjb25zdCBwdXNoT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHB1c2gpO1xuICBjb25zdCBwdXNoUXVldWVPcHRpb25zID0gcHVzaE9wdGlvbnMucXVldWVPcHRpb25zIHx8IHt9O1xuICBpZiAocHVzaE9wdGlvbnMucXVldWVPcHRpb25zKSB7XG4gICAgZGVsZXRlIHB1c2hPcHRpb25zLnF1ZXVlT3B0aW9ucztcbiAgfVxuXG4gIC8vIFBhc3MgdGhlIHB1c2ggb3B0aW9ucyB0b28gYXMgaXQgd29ya3Mgd2l0aCB0aGUgZGVmYXVsdFxuICBjb25zdCBwdXNoQWRhcHRlciA9IGxvYWRBZGFwdGVyKFxuICAgIHB1c2hPcHRpb25zICYmIHB1c2hPcHRpb25zLmFkYXB0ZXIsXG4gICAgUGFyc2VQdXNoQWRhcHRlcixcbiAgICBwdXNoT3B0aW9uc1xuICApO1xuICAvLyBXZSBwYXNzIHRoZSBvcHRpb25zIGFuZCB0aGUgYmFzZSBjbGFzcyBmb3IgdGhlIGFkYXRwZXIsXG4gIC8vIE5vdGUgdGhhdCBwYXNzaW5nIGFuIGluc3RhbmNlIHdvdWxkIHdvcmsgdG9vXG4gIGNvbnN0IHB1c2hDb250cm9sbGVyID0gbmV3IFB1c2hDb250cm9sbGVyKCk7XG4gIGNvbnN0IGhhc1B1c2hTdXBwb3J0ID0gISEocHVzaEFkYXB0ZXIgJiYgcHVzaCk7XG4gIGNvbnN0IGhhc1B1c2hTY2hlZHVsZWRTdXBwb3J0ID0gaGFzUHVzaFN1cHBvcnQgJiYgc2NoZWR1bGVkUHVzaCA9PT0gdHJ1ZTtcblxuICBjb25zdCB7IGRpc2FibGVQdXNoV29ya2VyIH0gPSBwdXNoUXVldWVPcHRpb25zO1xuXG4gIGNvbnN0IHB1c2hDb250cm9sbGVyUXVldWUgPSBuZXcgUHVzaFF1ZXVlKHB1c2hRdWV1ZU9wdGlvbnMpO1xuICBsZXQgcHVzaFdvcmtlcjtcbiAgaWYgKCFkaXNhYmxlUHVzaFdvcmtlcikge1xuICAgIHB1c2hXb3JrZXIgPSBuZXcgUHVzaFdvcmtlcihwdXNoQWRhcHRlciwgcHVzaFF1ZXVlT3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwdXNoQ29udHJvbGxlcixcbiAgICBoYXNQdXNoU3VwcG9ydCxcbiAgICBoYXNQdXNoU2NoZWR1bGVkU3VwcG9ydCxcbiAgICBwdXNoQ29udHJvbGxlclF1ZXVlLFxuICAgIHB1c2hXb3JrZXIsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdXRoRGF0YU1hbmFnZXIob3B0aW9uczogUGFyc2VTZXJ2ZXJPcHRpb25zKSB7XG4gIGNvbnN0IHsgYXV0aCwgZW5hYmxlQW5vbnltb3VzVXNlcnMgfSA9IG9wdGlvbnM7XG4gIHJldHVybiBhdXRoRGF0YU1hbmFnZXIoYXV0aCwgZW5hYmxlQW5vbnltb3VzVXNlcnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0YWJhc2VBZGFwdGVyKGRhdGFiYXNlVVJJLCBjb2xsZWN0aW9uUHJlZml4LCBkYXRhYmFzZU9wdGlvbnMpIHtcbiAgbGV0IHByb3RvY29sO1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZFVSSSA9IG5ldyBVUkwoZGF0YWJhc2VVUkkpO1xuICAgIHByb3RvY29sID0gcGFyc2VkVVJJLnByb3RvY29sID8gcGFyc2VkVVJJLnByb3RvY29sLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLyogKi9cbiAgfVxuICBzd2l0Y2ggKHByb3RvY29sKSB7XG4gICAgY2FzZSAncG9zdGdyZXM6JzpcbiAgICBjYXNlICdwb3N0Z3Jlc3FsOic6XG4gICAgICByZXR1cm4gbmV3IFBvc3RncmVzU3RvcmFnZUFkYXB0ZXIoe1xuICAgICAgICB1cmk6IGRhdGFiYXNlVVJJLFxuICAgICAgICBjb2xsZWN0aW9uUHJlZml4LFxuICAgICAgICBkYXRhYmFzZU9wdGlvbnMsXG4gICAgICB9KTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG5ldyBNb25nb1N0b3JhZ2VBZGFwdGVyKHtcbiAgICAgICAgdXJpOiBkYXRhYmFzZVVSSSxcbiAgICAgICAgY29sbGVjdGlvblByZWZpeCxcbiAgICAgICAgbW9uZ29PcHRpb25zOiBkYXRhYmFzZU9wdGlvbnMsXG4gICAgICB9KTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBd0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRWpELFNBQVNBLGNBQWMsQ0FBQ0MsT0FBMkIsRUFBRTtFQUMxRCxNQUFNQyxnQkFBZ0IsR0FBR0MsbUJBQW1CLENBQUNGLE9BQU8sQ0FBQztFQUNyRCxNQUFNRyxlQUFlLEdBQUdDLGtCQUFrQixDQUFDSixPQUFPLENBQUM7RUFDbkQsTUFBTUssY0FBYyxHQUFHQyxpQkFBaUIsQ0FBQ04sT0FBTyxDQUFDO0VBQ2pELE1BQU07SUFDSk8sY0FBYztJQUNkQyx1QkFBdUI7SUFDdkJDLGNBQWM7SUFDZEMsbUJBQW1CO0lBQ25CQztFQUNGLENBQUMsR0FBR0MsaUJBQWlCLENBQUNaLE9BQU8s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
262
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQXV0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX09wdGlvbnMiLCJfQWRhcHRlckxvYWRlciIsIl9kZWZhdWx0cyIsIl9Mb2dnZXJDb250cm9sbGVyIiwiX0ZpbGVzQ29udHJvbGxlciIsIl9Ib29rc0NvbnRyb2xsZXIiLCJfVXNlckNvbnRyb2xsZXIiLCJfQ2FjaGVDb250cm9sbGVyIiwiX0xpdmVRdWVyeUNvbnRyb2xsZXIiLCJfQW5hbHl0aWNzQ29udHJvbGxlciIsIl9QdXNoQ29udHJvbGxlciIsIl9QdXNoUXVldWUiLCJfUHVzaFdvcmtlciIsIl9EYXRhYmFzZUNvbnRyb2xsZXIiLCJfR3JpZEZTQnVja2V0QWRhcHRlciIsIl9XaW5zdG9uTG9nZ2VyQWRhcHRlciIsIl9Jbk1lbW9yeUNhY2hlQWRhcHRlciIsIl9BbmFseXRpY3NBZGFwdGVyIiwiX01vbmdvU3RvcmFnZUFkYXB0ZXIiLCJfUG9zdGdyZXNTdG9yYWdlQWRhcHRlciIsIl9wdXNoQWRhcHRlciIsIl9QYXJzZUdyYXBoUUxDb250cm9sbGVyIiwiX1NjaGVtYUNhY2hlIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJvd25LZXlzIiwib2JqZWN0IiwiZW51bWVyYWJsZU9ubHkiLCJrZXlzIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwic3ltYm9scyIsImZpbHRlciIsInN5bSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwidGFyZ2V0IiwiaSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNvdXJjZSIsImZvckVhY2giLCJrZXkiLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJfdG9Qcm9wZXJ0eUtleSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiYXJnIiwiX3RvUHJpbWl0aXZlIiwiU3RyaW5nIiwiaW5wdXQiLCJoaW50IiwicHJpbSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwidW5kZWZpbmVkIiwicmVzIiwiY2FsbCIsIlR5cGVFcnJvciIsIk51bWJlciIsImdldENvbnRyb2xsZXJzIiwib3B0aW9ucyIsImxvZ2dlckNvbnRyb2xsZXIiLCJnZXRMb2dnZXJDb250cm9sbGVyIiwiZmlsZXNDb250cm9sbGVyIiwiZ2V0RmlsZXNDb250cm9sbGVyIiwidXNlckNvbnRyb2xsZXIiLCJnZXRVc2VyQ29udHJvbGxlciIsInB1c2hDb250cm9sbGVyIiwiaGFzUHVzaFNjaGVkdWxlZFN1cHBvcnQiLCJoYXNQdXNoU3VwcG9ydCIsInB1c2hDb250cm9sbGVyUXVldWUiLCJwdXNoV29ya2VyIiwiZ2V0UHVzaENvbnRyb2xsZXIiLCJjYWNoZUNvbnRyb2xsZXIiLCJnZXRDYWNoZUNvbnRyb2xsZXIiLCJhbmFseXRpY3NDb250cm9sbGVyIiwiZ2V0QW5hbHl0aWNzQ29udHJvbGxlciIsImxpdmVRdWVyeUNvbnRyb2xsZXIiLCJnZXRMaXZlUXVlcnlDb250cm9sbGVyIiwiZGF0YWJhc2VDb250cm9sbGVyIiwiZ2V0RGF0YWJhc2VDb250cm9sbGVyIiwiaG9va3NDb250cm9sbGVyIiwiZ2V0SG9va3NDb250cm9sbGVyIiwiYXV0aERhdGFNYW5hZ2VyIiwiZ2V0QXV0aERhdGFNYW5hZ2VyIiwicGFyc2VHcmFwaFFMQ29udHJvbGxlciIsImdldFBhcnNlR3JhcGhRTENvbnRyb2xsZXIiLCJzY2hlbWFDYWNoZSIsIlNjaGVtYUNhY2hlIiwiYXBwSWQiLCJqc29uTG9ncyIsImxvZ3NGb2xkZXIiLCJ2ZXJib3NlIiwibG9nTGV2ZWwiLCJtYXhMb2dGaWxlcyIsInNpbGVudCIsImxvZ2dlckFkYXB0ZXIiLCJsb2dnZXJPcHRpb25zIiwibG9nZ2VyQ29udHJvbGxlckFkYXB0ZXIiLCJsb2FkQWRhcHRlciIsIldpbnN0b25Mb2dnZXJBZGFwdGVyIiwiTG9nZ2VyQ29udHJvbGxlciIsImRhdGFiYXNlVVJJIiwiZGF0YWJhc2VPcHRpb25zIiwiZmlsZXNBZGFwdGVyIiwiZGF0YWJhc2VBZGFwdGVyIiwicHJlc2VydmVGaWxlTmFtZSIsImZpbGVLZXkiLCJmaWxlc0NvbnRyb2xsZXJBZGFwdGVyIiwiR3JpZEZTQnVja2V0QWRhcHRlciIsIkZpbGVzQ29udHJvbGxlciIsImVtYWlsQWRhcHRlciIsInZlcmlmeVVzZXJFbWFpbHMiLCJlbWFpbENvbnRyb2xsZXJBZGFwdGVyIiwiVXNlckNvbnRyb2xsZXIiLCJjYWNoZUFkYXB0ZXIiLCJjYWNoZVRUTCIsImNhY2hlTWF4U2l6ZSIsImNhY2hlQ29udHJvbGxlckFkYXB0ZXIiLCJJbk1lbW9yeUNhY2hlQWRhcHRlciIsInR0bCIsIm1heFNpemUiLCJDYWNoZUNvbnRyb2xsZXIiLCJjb250cm9sbGVyRGVwcyIsIlBhcnNlR3JhcGhRTENvbnRyb2xsZXIiLCJtb3VudEdyYXBoUUwiLCJhbmFseXRpY3NBZGFwdGVyIiwiYW5hbHl0aWNzQ29udHJvbGxlckFkYXB0ZXIiLCJBbmFseXRpY3NBZGFwdGVyIiwiQW5hbHl0aWNzQ29udHJvbGxlciIsIkxpdmVRdWVyeUNvbnRyb2xsZXIiLCJsaXZlUXVlcnkiLCJjb2xsZWN0aW9uUHJlZml4IiwiZGVmYXVsdHMiLCJnZXREYXRhYmFzZUFkYXB0ZXIiLCJEYXRhYmFzZUNvbnRyb2xsZXIiLCJ3ZWJob29rS2V5IiwiSG9va3NDb250cm9sbGVyIiwic2NoZWR1bGVkUHVzaCIsInB1c2hPcHRpb25zIiwiYXNzaWduIiwicHVzaFF1ZXVlT3B0aW9ucyIsInF1ZXVlT3B0aW9ucyIsInB1c2hBZGFwdGVyIiwiYWRhcHRlciIsIlBhcnNlUHVzaEFkYXB0ZXIiLCJQdXNoQ29udHJvbGxlciIsImRpc2FibGVQdXNoV29ya2VyIiwiUHVzaFF1ZXVlIiwiUHVzaFdvcmtlciIsImF1dGgiLCJlbmFibGVBbm9ueW1vdXNVc2VycyIsInByb3RvY29sIiwicGFyc2VkVVJJIiwiVVJMIiwidG9Mb3dlckNhc2UiLCJlIiwiUG9zdGdyZXNTdG9yYWdlQWRhcHRlciIsInVyaSIsIk1vbmdvU3RvcmFnZUFkYXB0ZXIiLCJtb25nb09wdGlvbnMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvQ29udHJvbGxlcnMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF1dGhEYXRhTWFuYWdlciBmcm9tICcuLi9BZGFwdGVycy9BdXRoJztcbmltcG9ydCB7IFBhcnNlU2VydmVyT3B0aW9ucyB9IGZyb20gJy4uL09wdGlvbnMnO1xuaW1wb3J0IHsgbG9hZEFkYXB0ZXIgfSBmcm9tICcuLi9BZGFwdGVycy9BZGFwdGVyTG9hZGVyJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cyc7XG4vLyBDb250cm9sbGVyc1xuaW1wb3J0IHsgTG9nZ2VyQ29udHJvbGxlciB9IGZyb20gJy4vTG9nZ2VyQ29udHJvbGxlcic7XG5pbXBvcnQgeyBGaWxlc0NvbnRyb2xsZXIgfSBmcm9tICcuL0ZpbGVzQ29udHJvbGxlcic7XG5pbXBvcnQgeyBIb29rc0NvbnRyb2xsZXIgfSBmcm9tICcuL0hvb2tzQ29udHJvbGxlcic7XG5pbXBvcnQgeyBVc2VyQ29udHJvbGxlciB9IGZyb20gJy4vVXNlckNvbnRyb2xsZXInO1xuaW1wb3J0IHsgQ2FjaGVDb250cm9sbGVyIH0gZnJvbSAnLi9DYWNoZUNvbnRyb2xsZXInO1xuaW1wb3J0IHsgTGl2ZVF1ZXJ5Q29udHJvbGxlciB9IGZyb20gJy4vTGl2ZVF1ZXJ5Q29udHJvbGxlcic7XG5pbXBvcnQgeyBBbmFseXRpY3NDb250cm9sbGVyIH0gZnJvbSAnLi9BbmFseXRpY3NDb250cm9sbGVyJztcbmltcG9ydCB7IFB1c2hDb250cm9sbGVyIH0gZnJvbSAnLi9QdXNoQ29udHJvbGxlcic7XG5pbXBvcnQgeyBQdXNoUXVldWUgfSBmcm9tICcuLi9QdXNoL1B1c2hRdWV1ZSc7XG5pbXBvcnQgeyBQdXNoV29ya2VyIH0gZnJvbSAnLi4vUHVzaC9QdXNoV29ya2VyJztcbmltcG9ydCBEYXRhYmFzZUNvbnRyb2xsZXIgZnJvbSAnLi9EYXRhYmFzZUNvbnRyb2xsZXInO1xuXG4vLyBBZGFwdGVyc1xuaW1wb3J0IHsgR3JpZEZTQnVja2V0QWRhcHRlciB9IGZyb20gJy4uL0FkYXB0ZXJzL0ZpbGVzL0dyaWRGU0J1Y2tldEFkYXB0ZXInO1xuaW1wb3J0IHsgV2luc3RvbkxvZ2dlckFkYXB0ZXIgfSBmcm9tICcuLi9BZGFwdGVycy9Mb2dnZXIvV2luc3RvbkxvZ2dlckFkYXB0ZXInO1xuaW1wb3J0IHsgSW5NZW1vcnlDYWNoZUFkYXB0ZXIgfSBmcm9tICcuLi9BZGFwdGVycy9DYWNoZS9Jbk1lbW9yeUNhY2hlQWRhcHRlcic7XG5pbXBvcnQgeyBBbmFseXRpY3NBZGFwdGVyIH0gZnJvbSAnLi4vQWRhcHRlcnMvQW5hbHl0aWNzL0FuYWx5dGljc0FkYXB0ZXInO1xuaW1wb3J0IE1vbmdvU3RvcmFnZUFkYXB0ZXIgZnJvbSAnLi4vQWRhcHRlcnMvU3RvcmFnZS9Nb25nby9Nb25nb1N0b3JhZ2VBZGFwdGVyJztcbmltcG9ydCBQb3N0Z3Jlc1N0b3JhZ2VBZGFwdGVyIGZyb20gJy4uL0FkYXB0ZXJzL1N0b3JhZ2UvUG9zdGdyZXMvUG9zdGdyZXNTdG9yYWdlQWRhcHRlcic7XG5pbXBvcnQgUGFyc2VQdXNoQWRhcHRlciBmcm9tICdAcGFyc2UvcHVzaC1hZGFwdGVyJztcbmltcG9ydCBQYXJzZUdyYXBoUUxDb250cm9sbGVyIGZyb20gJy4vUGFyc2VHcmFwaFFMQ29udHJvbGxlcic7XG5pbXBvcnQgU2NoZW1hQ2FjaGUgZnJvbSAnLi4vQWRhcHRlcnMvQ2FjaGUvU2NoZW1hQ2FjaGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udHJvbGxlcnMob3B0aW9uczogUGFyc2VTZXJ2ZXJPcHRpb25zKSB7XG4gIGNvbnN0IGxvZ2dlckNvbnRyb2xsZXIgPSBnZXRMb2dnZXJDb250cm9sbGVyKG9wdGlvbnMpO1xuICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBnZXRGaWxlc0NvbnRyb2xsZXIob3B0aW9ucyk7XG4gIGNvbnN0IHVzZXJDb250cm9sbGVyID0gZ2V0VXNlckNvbnRyb2xsZXIob3B0aW9ucyk7XG4gIGNvbnN0IHtcbiAgICBwdXNoQ29udHJvbGxlcixcbiAgICBoYXNQdXNoU2NoZWR1bGVkU3VwcG9ydCxcbiAgICBoYXNQdXNoU3VwcG9ydCxcbiAgICBwdXNoQ29udHJvbGxlclF1ZXVlLFxuICAgIHB1c2hXb3JrZXIsXG4gIH0gPSBnZXRQdXNoQ29udHJvbGxlcihvcHRpb25zKTtcbiAgY29uc3QgY2FjaGVDb250cm9sbGVyID0gZ2V0Q2FjaGVDb250cm9sbGVyKG9wdGlvbnMpO1xuICBjb25zdCBhbmFseXRpY3NDb250cm9sbGVyID0gZ2V0QW5hbHl0aWNzQ29udHJvbGxlcihvcHRpb25zKTtcbiAgY29uc3QgbGl2ZVF1ZXJ5Q29udHJvbGxlciA9IGdldExpdmVRdWVyeUNvbnRyb2xsZXIob3B0aW9ucyk7XG4gIGNvbnN0IGRhdGFiYXNlQ29udHJvbGxlciA9IGdldERhdGFiYXNlQ29udHJvbGxlcihvcHRpb25zKTtcbiAgY29uc3QgaG9va3NDb250cm9sbGVyID0gZ2V0SG9va3NDb250cm9sbGVyKG9wdGlvbnMsIGRhdGFiYXNlQ29udHJvbGxlcik7XG4gIGNvbnN0IGF1dGhEYXRhTWFuYWdlciA9IGdldEF1dGhEYXRhTWFuYWdlcihvcHRpb25zKTtcbiAgY29uc3QgcGFyc2VHcmFwaFFMQ29udHJvbGxlciA9IGdldFBhcnNlR3JhcGhRTENvbnRyb2xsZXIob3B0aW9ucywge1xuICAgIGRhdGFiYXNlQ29udHJvbGxlcixcbiAgICBjYWNoZUNvbnRyb2xsZXIsXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGxvZ2dlckNvbnRyb2xsZXIsXG4gICAgZmlsZXNDb250cm9sbGVyLFxuICAgIHVzZXJDb250cm9sbGVyLFxuICAgIHB1c2hDb250cm9sbGVyLFxuICAgIGhhc1B1c2hTY2hlZHVsZWRTdXBwb3J0LFxuICAgIGhhc1B1c2hTdXBwb3J0LFxuICAgIHB1c2hXb3JrZXIsXG4gICAgcHVzaENvbnRyb2xsZXJRdWV1ZSxcbiAgICBhbmFseXRpY3NDb250cm9sbGVyLFxuICAgIGNhY2hlQ29udHJvbGxlcixcbiAgICBwYXJzZUdyYXBoUUxDb250cm9sbGVyLFxuICAgIGxpdmVRdWVyeUNvbnRyb2xsZXIsXG4gICAgZGF0YWJhc2VDb250cm9sbGVyLFxuICAgIGhvb2tzQ29udHJvbGxlcixcbiAgICBhdXRoRGF0YU1hbmFnZXIsXG4gICAgc2NoZW1hQ2FjaGU6IFNjaGVtYUNhY2hlLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9nZ2VyQ29udHJvbGxlcihvcHRpb25zOiBQYXJzZVNlcnZlck9wdGlvbnMpOiBMb2dnZXJDb250cm9sbGVyIHtcbiAgY29uc3Qge1xuICAgIGFwcElkLFxuICAgIGpzb25Mb2dzLFxuICAgIGxvZ3NGb2xkZXIsXG4gICAgdmVyYm9zZSxcbiAgICBsb2dMZXZlbCxcbiAgICBtYXhMb2dGaWxlcyxcbiAgICBzaWxlbnQsXG4gICAgbG9nZ2VyQWRhcHRlcixcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGxvZ2dlck9wdGlvbnMgPSB7XG4gICAganNvbkxvZ3MsXG4gICAgbG9nc0ZvbGRlcixcbiAgICB2ZXJib3NlLFxuICAgIGxvZ0xldmVsLFxuICAgIHNpbGVudCxcbiAgICBtYXhMb2dGaWxlcyxcbiAgfTtcbiAgY29uc3QgbG9nZ2VyQ29udHJvbGxlckFkYXB0ZXIgPSBsb2FkQWRhcHRlcihsb2dnZXJBZGFwdGVyLCBXaW5zdG9uTG9nZ2VyQWRhcHRlciwgbG9nZ2VyT3B0aW9ucyk7XG4gIHJldHVybiBuZXcgTG9nZ2VyQ29udHJvbGxlcihsb2dnZXJDb250cm9sbGVyQWRhcHRlciwgYXBwSWQsIGxvZ2dlck9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZXNDb250cm9sbGVyKG9wdGlvbnM6IFBhcnNlU2VydmVyT3B0aW9ucyk6IEZpbGVzQ29udHJvbGxlciB7XG4gIGNvbnN0IHtcbiAgICBhcHBJZCxcbiAgICBkYXRhYmFzZVVSSSxcbiAgICBkYXRhYmFzZU9wdGlvbnMgPSB7fSxcbiAgICBmaWxlc0FkYXB0ZXIsXG4gICAgZGF0YWJhc2VBZGFwdGVyLFxuICAgIHByZXNlcnZlRmlsZU5hbWUsXG4gICAgZmlsZUtleSxcbiAgfSA9IG9wdGlvbnM7XG4gIGlmICghZmlsZXNBZGFwdGVyICYmIGRhdGFiYXNlQWRhcHRlcikge1xuICAgIHRocm93ICdXaGVuIHVzaW5nIGFuIGV4cGxpY2l0IGRhdGFiYXNlIGFkYXB0ZXIsIHlvdSBtdXN0IGFsc28gdXNlIGFuIGV4cGxpY2l0IGZpbGVzQWRhcHRlci4nO1xuICB9XG4gIGNvbnN0IGZpbGVzQ29udHJvbGxlckFkYXB0ZXIgPSBsb2FkQWRhcHRlcihmaWxlc0FkYXB0ZXIsICgpID0+IHtcbiAgICByZXR1cm4gbmV3IEdyaWRGU0J1Y2tldEFkYXB0ZXIoZGF0YWJhc2VVUkksIGRhdGFiYXNlT3B0aW9ucywgZmlsZUtleSk7XG4gIH0pO1xuICByZXR1cm4gbmV3IEZpbGVzQ29udHJvbGxlcihmaWxlc0NvbnRyb2xsZXJBZGFwdGVyLCBhcHBJZCwge1xuICAgIHByZXNlcnZlRmlsZU5hbWUsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXNlckNvbnRyb2xsZXIob3B0aW9uczogUGFyc2VTZXJ2ZXJPcHRpb25zKTogVXNlckNvbnRyb2xsZXIge1xuICBjb25zdCB7IGFwcElkLCBlbWFpbEFkYXB0ZXIsIHZlcmlmeVVzZXJFbWFpbHMgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGVtYWlsQ29udHJvbGxlckFkYXB0ZXIgPSBsb2FkQWRhcHRlcihlbWFpbEFkYXB0ZXIpO1xuICByZXR1cm4gbmV3IFVzZXJDb250cm9sbGVyKGVtYWlsQ29udHJvbGxlckFkYXB0ZXIsIGFwcElkLCB7XG4gICAgdmVyaWZ5VXNlckVtYWlscyxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYWNoZUNvbnRyb2xsZXIob3B0aW9uczogUGFyc2VTZXJ2ZXJPcHRpb25zKTogQ2FjaGVDb250cm9sbGVyIHtcbiAgY29uc3QgeyBhcHBJZCwgY2FjaGVBZGFwdGVyLCBjYWNoZVRUTCwgY2FjaGVNYXhTaXplIH0gPSBvcHRpb25zO1xuICBjb25zdCBjYWNoZUNvbnRyb2xsZXJBZGFwdGVyID0gbG9hZEFkYXB0ZXIoY2FjaGVBZGFwdGVyLCBJbk1lbW9yeUNhY2hlQWRhcHRlciwge1xuICAgIGFwcElkOiBhcHBJZCxcbiAgICB0dGw6IGNhY2hlVFRMLFxuICAgIG1heFNpemU6IGNhY2hlTWF4U2l6ZSxcbiAgfSk7XG4gIHJldHVybiBuZXcgQ2FjaGVDb250cm9sbGVyKGNhY2hlQ29udHJvbGxlckFkYXB0ZXIsIGFwcElkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcnNlR3JhcGhRTENvbnRyb2xsZXIoXG4gIG9wdGlvbnM6IFBhcnNlU2VydmVyT3B0aW9ucyxcbiAgY29udHJvbGxlckRlcHNcbik6IFBhcnNlR3JhcGhRTENvbnRyb2xsZXIge1xuICByZXR1cm4gbmV3IFBhcnNlR3JhcGhRTENvbnRyb2xsZXIoe1xuICAgIG1vdW50R3JhcGhRTDogb3B0aW9ucy5tb3VudEdyYXBoUUwsXG4gICAgLi4uY29udHJvbGxlckRlcHMsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QW5hbHl0aWNzQ29udHJvbGxlcihvcHRpb25zOiBQYXJzZVNlcnZlck9wdGlvbnMpOiBBbmFseXRpY3NDb250cm9sbGVyIHtcbiAgY29uc3QgeyBhbmFseXRpY3NBZGFwdGVyIH0gPSBvcHRpb25zO1xuICBjb25zdCBhbmFseXRpY3NDb250cm9sbGVyQWRhcHRlciA9IGxvYWRBZGFwdGVyKGFuYWx5dGljc0FkYXB0ZXIsIEFuYWx5dGljc0FkYXB0ZXIpO1xuICByZXR1cm4gbmV3IEFuYWx5dGljc0NvbnRyb2xsZXIoYW5hbHl0aWNzQ29udHJvbGxlckFkYXB0ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGl2ZVF1ZXJ5Q29udHJvbGxlcihvcHRpb25zOiBQYXJzZVNlcnZlck9wdGlvbnMpOiBMaXZlUXVlcnlDb250cm9sbGVyIHtcbiAgcmV0dXJuIG5ldyBMaXZlUXVlcnlDb250cm9sbGVyKG9wdGlvbnMubGl2ZVF1ZXJ5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGFiYXNlQ29udHJvbGxlcihvcHRpb25zOiBQYXJzZVNlcnZlck9wdGlvbnMpOiBEYXRhYmFzZUNvbnRyb2xsZXIge1xuICBjb25zdCB7IGRhdGFiYXNlVVJJLCBjb2xsZWN0aW9uUHJlZml4LCBkYXRhYmFzZU9wdGlvbnMgfSA9IG9wdGlvbnM7XG4gIGxldCB7IGRhdGFiYXNlQWRhcHRlciB9ID0gb3B0aW9ucztcbiAgaWYgKFxuICAgIChkYXRhYmFzZU9wdGlvbnMgfHxcbiAgICAgIChkYXRhYmFzZVVSSSAmJiBkYXRhYmFzZVVSSSAhPT0gZGVmYXVsdHMuZGF0YWJhc2VVUkkpIHx8XG4gICAgICBjb2xsZWN0aW9uUHJlZml4ICE9PSBkZWZhdWx0cy5jb2xsZWN0aW9uUHJlZml4KSAmJlxuICAgIGRhdGFiYXNlQWRhcHRlclxuICApIHtcbiAgICB0aHJvdyAnWW91IGNhbm5vdCBzcGVjaWZ5IGJvdGggYSBkYXRhYmFzZUFkYXB0ZXIgYW5kIGEgZGF0YWJhc2VVUkkvZGF0YWJhc2VPcHRpb25zL2NvbGxlY3Rpb25QcmVmaXguJztcbiAgfSBlbHNlIGlmICghZGF0YWJhc2VBZGFwdGVyKSB7XG4gICAgZGF0YWJhc2VBZGFwdGVyID0gZ2V0RGF0YWJhc2VBZGFwdGVyKGRhdGFiYXNlVVJJLCBjb2xsZWN0aW9uUHJlZml4LCBkYXRhYmFzZU9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIGRhdGFiYXNlQWRhcHRlciA9IGxvYWRBZGFwdGVyKGRhdGFiYXNlQWRhcHRlcik7XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRhYmFzZUNvbnRyb2xsZXIoZGF0YWJhc2VBZGFwdGVyLCBvcHRpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEhvb2tzQ29udHJvbGxlcihcbiAgb3B0aW9uczogUGFyc2VTZXJ2ZXJPcHRpb25zLFxuICBkYXRhYmFzZUNvbnRyb2xsZXI6IERhdGFiYXNlQ29udHJvbGxlclxuKTogSG9va3NDb250cm9sbGVyIHtcbiAgY29uc3QgeyBhcHBJZCwgd2ViaG9va0tleSB9ID0gb3B0aW9ucztcbiAgcmV0dXJuIG5ldyBIb29rc0NvbnRyb2xsZXIoYXBwSWQsIGRhdGFiYXNlQ29udHJvbGxlciwgd2ViaG9va0tleSk7XG59XG5cbmludGVyZmFjZSBQdXNoQ29udHJvbGxpbmcge1xuICBwdXNoQ29udHJvbGxlcjogUHVzaENvbnRyb2xsZXI7XG4gIGhhc1B1c2hTY2hlZHVsZWRTdXBwb3J0OiBib29sZWFuO1xuICBwdXNoQ29udHJvbGxlclF1ZXVlOiBQdXNoUXVldWU7XG4gIHB1c2hXb3JrZXI6IFB1c2hXb3JrZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQdXNoQ29udHJvbGxlcihvcHRpb25zOiBQYXJzZVNlcnZlck9wdGlvbnMpOiBQdXNoQ29udHJvbGxpbmcge1xuICBjb25zdCB7IHNjaGVkdWxlZFB1c2gsIHB1c2ggfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgcHVzaE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBwdXNoKTtcbiAgY29uc3QgcHVzaFF1ZXVlT3B0aW9ucyA9IHB1c2hPcHRpb25zLnF1ZXVlT3B0aW9ucyB8fCB7fTtcbiAgaWYgKHB1c2hPcHRpb25zLnF1ZXVlT3B0aW9ucykge1xuICAgIGRlbGV0ZSBwdXNoT3B0aW9ucy5xdWV1ZU9wdGlvbnM7XG4gIH1cblxuICAvLyBQYXNzIHRoZSBwdXNoIG9wdGlvbnMgdG9vIGFzIGl0IHdvcmtzIHdpdGggdGhlIGRlZmF1bHRcbiAgY29uc3QgcHVzaEFkYXB0ZXIgPSBsb2FkQWRhcHRlcihcbiAgICBwdXNoT3B0aW9ucyAmJiBwdXNoT3B0aW9ucy5hZGFwdGVyLFxuICAgIFBhcnNlUHVzaEFkYXB0ZXIsXG4gICAgcHVzaE9wdGlvbnNcbiAgKTtcbiAgLy8gV2UgcGFzcyB0aGUgb3B0aW9ucyBhbmQgdGhlIGJhc2UgY2xhc3MgZm9yIHRoZSBhZGF0cGVyLFxuICAvLyBOb3RlIHRoYXQgcGFzc2luZyBhbiBpbnN0YW5jZSB3b3VsZCB3b3JrIHRvb1xuICBjb25zdCBwdXNoQ29udHJvbGxlciA9IG5ldyBQdXNoQ29udHJvbGxlcigpO1xuICBjb25zdCBoYXNQdXNoU3VwcG9ydCA9ICEhKHB1c2hBZGFwdGVyICYmIHB1c2gpO1xuICBjb25zdCBoYXNQdXNoU2NoZWR1bGVkU3VwcG9ydCA9IGhhc1B1c2hTdXBwb3J0ICYmIHNjaGVkdWxlZFB1c2ggPT09IHRydWU7XG5cbiAgY29uc3QgeyBkaXNhYmxlUHVzaFdvcmtlciB9ID0gcHVzaFF1ZXVlT3B0aW9ucztcblxuICBjb25zdCBwdXNoQ29udHJvbGxlclF1ZXVlID0gbmV3IFB1c2hRdWV1ZShwdXNoUXVldWVPcHRpb25zKTtcbiAgbGV0IHB1c2hXb3JrZXI7XG4gIGlmICghZGlzYWJsZVB1c2hXb3JrZXIpIHtcbiAgICBwdXNoV29ya2VyID0gbmV3IFB1c2hXb3JrZXIocHVzaEFkYXB0ZXIsIHB1c2hRdWV1ZU9wdGlvbnMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgcHVzaENvbnRyb2xsZXIsXG4gICAgaGFzUHVzaFN1cHBvcnQsXG4gICAgaGFzUHVzaFNjaGVkdWxlZFN1cHBvcnQsXG4gICAgcHVzaENvbnRyb2xsZXJRdWV1ZSxcbiAgICBwdXNoV29ya2VyLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXV0aERhdGFNYW5hZ2VyKG9wdGlvbnM6IFBhcnNlU2VydmVyT3B0aW9ucykge1xuICBjb25zdCB7IGF1dGgsIGVuYWJsZUFub255bW91c1VzZXJzIH0gPSBvcHRpb25zO1xuICByZXR1cm4gYXV0aERhdGFNYW5hZ2VyKGF1dGgsIGVuYWJsZUFub255bW91c1VzZXJzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGFiYXNlQWRhcHRlcihkYXRhYmFzZVVSSSwgY29sbGVjdGlvblByZWZpeCwgZGF0YWJhc2VPcHRpb25zKSB7XG4gIGxldCBwcm90b2NvbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWRVUkkgPSBuZXcgVVJMKGRhdGFiYXNlVVJJKTtcbiAgICBwcm90b2NvbCA9IHBhcnNlZFVSSS5wcm90b2NvbCA/IHBhcnNlZFVSSS5wcm90b2NvbC50b0xvd2VyQ2FzZSgpIDogbnVsbDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8qICovXG4gIH1cbiAgc3dpdGNoIChwcm90b2NvbCkge1xuICAgIGNhc2UgJ3Bvc3RncmVzOic6XG4gICAgY2FzZSAncG9zdGdyZXNxbDonOlxuICAgICAgcmV0dXJuIG5ldyBQb3N0Z3Jlc1N0b3JhZ2VBZGFwdGVyKHtcbiAgICAgICAgdXJpOiBkYXRhYmFzZVVSSSxcbiAgICAgICAgY29sbGVjdGlvblByZWZpeCxcbiAgICAgICAgZGF0YWJhc2VPcHRpb25zLFxuICAgICAgfSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBuZXcgTW9uZ29TdG9yYWdlQWRhcHRlcih7XG4gICAgICAgIHVyaTogZGF0YWJhc2VVUkksXG4gICAgICAgIGNvbGxlY3Rpb25QcmVmaXgsXG4gICAgICAgIG1vbmdvT3B0aW9uczogZGF0YWJhc2VPcHRpb25zLFxuICAgICAgfSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsY0FBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsU0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUksaUJBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLGdCQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxnQkFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sZUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsZ0JBQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLG9CQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxvQkFBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsZUFB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
@@ -123,4 +123,4 @@ class Deprecator {
123
123
  }
124
124
  }
125
125
  module.exports = Deprecator;
126
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZXByZWNhdG9yIiwic2NhblBhcnNlU2VydmVyT3B0aW9ucyIsIm9wdGlvbnMiLCJkZXByZWNhdGlvbiIsIl9nZXREZXByZWNhdGlvbnMiLCJzb2x1dGlvbiIsIm9wdGlvbktleSIsImNoYW5nZU5ld0RlZmF1bHQiLCJfbG9nT3B0aW9uIiwibG9nUnVudGltZURlcHJlY2F0aW9uIiwiX2xvZ0dlbmVyaWMiLCJEZXByZWNhdGlvbnMiLCJ1c2FnZSIsIm91dHB1dCIsImxvZ2dlciIsIndhcm4iLCJlbnZLZXkiLCJjaGFuZ2VOZXdLZXkiLCJ0eXBlIiwia2V5Iiwia2V5QWN0aW9uIiwidW5kZWZpbmVkIiwibGVuZ3RoIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9EZXByZWNhdG9yL0RlcHJlY2F0b3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IERlcHJlY2F0aW9ucyBmcm9tICcuL0RlcHJlY2F0aW9ucyc7XG5cbi8qKlxuICogVGhlIGRlcHJlY2F0b3IgY2xhc3MuXG4gKi9cbmNsYXNzIERlcHJlY2F0b3Ige1xuICAvKipcbiAgICogU2NhbnMgdGhlIFBhcnNlIFNlcnZlciBmb3IgZGVwcmVjYXRlZCBvcHRpb25zLlxuICAgKiBUaGlzIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgc2V0dGluZyBvcHRpb24gZGVmYXVsdHMsIG90aGVyd2lzZSBpdFxuICAgKiBiZWNvbWVzIGluZGlzdGluZ3Vpc2hhYmxlIHdoZXRoZXIgYW4gb3B0aW9uIGhhcyBiZWVuIHNldCBtYW51YWxseSBvclxuICAgKiBieSBkZWZhdWx0LlxuICAgKiBAcGFyYW0ge2FueX0gb3B0aW9ucyBUaGUgUGFyc2UgU2VydmVyIG9wdGlvbnMuXG4gICAqL1xuICBzdGF0aWMgc2NhblBhcnNlU2VydmVyT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgLy8gU2NhbiBmb3IgZGVwcmVjYXRpb25zXG4gICAgZm9yIChjb25zdCBkZXByZWNhdGlvbiBvZiBEZXByZWNhdG9yLl9nZXREZXByZWNhdGlvbnMoKSkge1xuICAgICAgLy8gR2V0IGRlcHJlY2F0aW9uIHByb3BlcnRpZXNcbiAgICAgIGNvbnN0IHNvbHV0aW9uID0gZGVwcmVjYXRpb24uc29sdXRpb247XG4gICAgICBjb25zdCBvcHRpb25LZXkgPSBkZXByZWNhdGlvbi5vcHRpb25LZXk7XG4gICAgICBjb25zdCBjaGFuZ2VOZXdEZWZhdWx0ID0gZGVwcmVjYXRpb24uY2hhbmdlTmV3RGVmYXVsdDtcblxuICAgICAgLy8gSWYgZGVmYXVsdCB3aWxsIGNoYW5nZSwgb25seSB0aHJvdyBhIHdhcm5pbmcgaWYgb3B0aW9uIGlzIG5vdCBzZXRcbiAgICAgIGlmIChjaGFuZ2VOZXdEZWZhdWx0ICE9IG51bGwgJiYgb3B0aW9uc1tvcHRpb25LZXldID09IG51bGwpIHtcbiAgICAgICAgRGVwcmVjYXRvci5fbG9nT3B0aW9uKHsgb3B0aW9uS2V5LCBjaGFuZ2VOZXdEZWZhdWx0LCBzb2x1dGlvbiB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9ncyBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgZm9yIGEgcGFyYW1ldGVyIHRoYXQgY2FuIG9ubHkgYmUgZGV0ZXJtaW5lZCBkeW5hbWljYWxseVxuICAgKiBkdXJpbmcgcnVudGltZS5cbiAgICpcbiAgICogTm90ZTogRG8gbm90IHVzZSB0aGlzIHRvIGxvZyBkZXByZWNhdGlvbnMgb2YgUGFyc2UgU2VydmVyIG9wdGlvbnMsIGJ1dCBhZGQgc3VjaFxuICAgKiBkZXByZWNhdGlvbnMgdG8gYERlcHJlY2F0aW9ucy5qc2AgaW5zdGVhZC4gU2VlIHRoZSBjb250cmlidXRpb24gZG9jcyBmb3IgbW9yZVxuICAgKiBkZXRhaWxzLlxuICAgKlxuICAgKiBGb3IgY29uc2lzdGVuY3ksIHRoZSBkZXByZWNhdGlvbiB3YXJuaW5nIGlzIGNvbXBvc2VkIG9mIHRoZSBmb2xsb3dpbmcgcGFydHM6XG4gICAqXG4gICAqID4gRGVwcmVjYXRpb25XYXJuaW5nOiBgdXNhZ2VgIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLlxuICAgKiBgc29sdXRpb25gLlxuICAgKlxuICAgKiAtIGB1c2FnZWA6IFRoZSBkZXByZWNhdGVkIHVzYWdlLlxuICAgKiAtIGBzb2x1dGlvbmA6IFRoZSBpbnN0cnVjdGlvbiB0byByZXNvbHZlIHRoaXMgZGVwcmVjYXRpb24gd2FybmluZy5cbiAgICpcbiAgICogRm9yIGV4YW1wbGU6XG4gICAqID4gRGVwcmVjYXRpb25XYXJuaW5nOiBgUHJlZml4aW5nIGZpZWxkIG5hbWVzIHdpdGggZG9sbGFyIHNpZ24gKCQpIGluIGFnZ3JlZ2F0aW9uIHF1ZXJ5YFxuICAgKiBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4gYFJlZmVyZW5jZSBmaWVsZCBuYW1lcyB3aXRob3V0XG4gICAqIGRvbGxhciBzaWduIHByZWZpeC5gXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoZSBkZXByZWNhdGlvbiBvcHRpb25zLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy51c2FnZSBUaGUgdXNhZ2UgdGhhdCBpcyBkZXByZWNhdGVkLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuc29sdXRpb25dIFRoZSBpbnN0cnVjdGlvbiB0byByZXNvbHZlIHRoaXMgZGVwcmVjYXRpb24gd2FybmluZy5cbiAgICogT3B0aW9uYWwuIEl0IGlzIHJlY29tbWVuZGVkIHRvIGFkZCBhbiBpbnN0cnVjdGlvbiBmb3IgdGhlIGNvbnZlbmllbmNlIG9mIHRoZSBkZXZlbG9wZXIuXG4gICAqL1xuICBzdGF0aWMgbG9nUnVudGltZURlcHJlY2F0aW9uKG9wdGlvbnMpIHtcbiAgICBEZXByZWNhdG9yLl9sb2dHZW5lcmljKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRlcHJlY2F0aW9uIGRlZmluaXRpb25zLlxuICAgKiBAcmV0dXJucyB7QXJyYXk8T2JqZWN0Pn0gVGhlIGRlcHJlY2F0aW9ucy5cbiAgICovXG4gIHN0YXRpYyBfZ2V0RGVwcmVjYXRpb25zKCkge1xuICAgIHJldHVybiBEZXByZWNhdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogTG9ncyBhIGdlbmVyaWMgZGVwcmVjYXRpb24gd2FybmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgVGhlIGRlcHJlY2F0aW9uIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLnVzYWdlIFRoZSB1c2FnZSB0aGF0IGlzIGRlcHJlY2F0ZWQuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5zb2x1dGlvbl0gVGhlIGluc3RydWN0aW9uIHRvIHJlc29sdmUgdGhpcyBkZXByZWNhdGlvbiB3YXJuaW5nLlxuICAgKiBPcHRpb25hbC4gSXQgaXMgcmVjb21tZW5kZWQgdG8gYWRkIGFuIGluc3RydWN0aW9uIGZvciB0aGUgY29udmVuaWVuY2Ugb2YgdGhlIGRldmVsb3Blci5cbiAgICovXG4gIHN0YXRpYyBfbG9nR2VuZXJpYyh7IHVzYWdlLCBzb2x1dGlvbiB9KSB7XG4gICAgLy8gQ29tcG9zZSBtZXNzYWdlXG4gICAgbGV0IG91dHB1dCA9IGBEZXByZWNhdGlvbldhcm5pbmc6ICR7dXNhZ2V9IGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLmA7XG4gICAgb3V0cHV0ICs9IHNvbHV0aW9uID8gYCAke3NvbHV0aW9ufWAgOiAnJztcbiAgICBsb2dnZXIud2FybihvdXRwdXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvZ3MgYSBkZXByZWNhdGlvbiB3YXJuaW5nIGZvciBhIFBhcnNlIFNlcnZlciBvcHRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25LZXkgVGhlIG9wdGlvbiBrZXkgaW5jbC4gaXRzIHBhdGgsIGUuZy4gYHNlY3VyaXR5LmVuYWJsZUNoZWNrYC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGVudktleSBUaGUgZW52aXJvbm1lbnQga2V5LCBlLmcuIGBQQVJTRV9TRVJWRVJfU0VDVVJJVFlgLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gY2hhbmdlTmV3S2V5IFNldCB0aGUgbmV3IGtleSBuYW1lIGlmIHRoZSBjdXJyZW50IGtleSB3aWxsIGJlIHJlcGxhY2VkLFxuICAgKiBvciBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBjdXJyZW50IGtleSB3aWxsIGJlIHJlbW92ZWQgd2l0aG91dCByZXBsYWNlbWVudC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGNoYW5nZU5ld0RlZmF1bHQgU2V0IHRoZSBuZXcgZGVmYXVsdCB2YWx1ZSBpZiB0aGUga2V5J3MgZGVmYXVsdCB2YWx1ZVxuICAgKiB3aWxsIGNoYW5nZSBpbiBhIGZ1dHVyZSB2ZXJzaW9uLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gW3NvbHV0aW9uXSBUaGUgaW5zdHJ1Y3Rpb24gdG8gcmVzb2x2ZSB0aGlzIGRlcHJlY2F0aW9uIHdhcm5pbmcuIFRoaXNcbiAgICogbWVzc2FnZSBtdXN0IG5vdCBpbmNsdWRlIHRoZSB3YXJuaW5nIHRoYXQgdGhlIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkLCB0aGF0IGlzXG4gICAqIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gdGhlIG1lc3NhZ2UuIEl0IHNob3VsZCBvbmx5IGNvbnRhaW4gdGhlIGluc3RydWN0aW9uIG9uIGhvd1xuICAgKiB0byByZXNvbHZlIHRoaXMgd2FybmluZy5cbiAgICovXG4gIHN0YXRpYyBfbG9nT3B0aW9uKHsgb3B0aW9uS2V5LCBlbnZLZXksIGNoYW5nZU5ld0tleSwgY2hhbmdlTmV3RGVmYXVsdCwgc29sdXRpb24gfSkge1xuICAgIGNvbnN0IHR5cGUgPSBvcHRpb25LZXkgPyAnb3B0aW9uJyA6ICdlbnZpcm9ubWVudCBrZXknO1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbktleSA/IG9wdGlvbktleSA6IGVudktleTtcbiAgICBjb25zdCBrZXlBY3Rpb24gPVxuICAgICAgY2hhbmdlTmV3S2V5ID09IG51bGxcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiBjaGFuZ2VOZXdLZXkubGVuZ3RoID4gMFxuICAgICAgICAgID8gYHJlbmFtZWQgdG8gJyR7Y2hhbmdlTmV3S2V5fSdgXG4gICAgICAgICAgOiBgcmVtb3ZlZGA7XG5cbiAgICAvLyBDb21wb3NlIG1lc3NhZ2VcbiAgICBsZXQgb3V0cHV0ID0gYERlcHJlY2F0aW9uV2FybmluZzogVGhlIFBhcnNlIFNlcnZlciAke3R5cGV9ICcke2tleX0nIGA7XG4gICAgb3V0cHV0ICs9IGNoYW5nZU5ld0tleSA/IGBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlICR7a2V5QWN0aW9ufSBpbiBhIGZ1dHVyZSB2ZXJzaW9uLmAgOiAnJztcbiAgICBvdXRwdXQgKz0gY2hhbmdlTmV3RGVmYXVsdFxuICAgICAgPyBgZGVmYXVsdCB3aWxsIGNoYW5nZSB0byAnJHtjaGFuZ2VOZXdEZWZhdWx0fScgaW4gYSBmdXR1cmUgdmVyc2lvbi5gXG4gICAgICA6ICcnO1xuICAgIG91dHB1dCArPSBzb2x1dGlvbiA/IGAgJHtzb2x1dGlvbn1gIDogJyc7XG4gICAgbG9nZ2VyLndhcm4ob3V0cHV0KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERlcHJlY2F0b3I7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUEwQztBQUUxQztBQUNBO0FBQ0E7QUFDQSxNQUFNQSxVQUFVLENBQUM7RUFDZjtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNFLE9BQU9DLHNCQUFzQixDQUFDQyxPQUFPLEVBQUU7SUFDckM7SUFDQSxLQUFLLE1BQU1DLFdBQVcsSUFBSUgsVUFBVSxDQUFDSSxnQkFBZ0IsRUFBRSxFQUFFO01BQ3ZEO01BQ0EsTUFBTUMsUUFBUSxHQUFHRixXQUFXLENBQUNFLFFBQVE7TUFDckMsTUFBTUMsU0FBUyxHQUFHSCxXQUFXLENBQUNHLFNBQVM7TUFDdkMsTUFBTUMsZ0JBQWdCLEdBQUdKLFdBQVcsQ0FBQ0ksZ0JBQWdCOztNQUVyRDtNQUNBLElBQUlBLGdCQUFnQixJQUFJLElBQUksSUFBSUwsT0FBTyxDQUFDSSxTQUFTLENBQUMsSUFBSSxJQUFJLEVBQUU7UUFDMUROLFVBQVUsQ0FBQ1EsVUFBVSxDQUFDO1VBQUVGLFNBQVM7VUFBRUMsZ0JBQWdCO1VBQUVGO1FBQVMsQ0FBQyxDQUFDO01BQ2xFO0lBQ0Y7RUFDRjs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0UsT0FBT0kscUJBQXFCLENBQUNQLE9BQU8sRUFBRTtJQUNwQ0YsVUFBVSxDQUFDVSxXQUFXLENBQUNSLE9BQU8sQ0FBQztFQUNqQzs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtFQUNFLE9BQU9FLGdCQUFnQixHQUFHO0lBQ3hCLE9BQU9PLHFCQUFZO0VBQ3JCOztFQUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRSxPQUFPRCxXQUFXLENBQUM7SUFBRUUsS0FBSztJQUFFUDtFQUFTLENBQUMsRUFBRTtJQUN0QztJQUNBLElBQUlRLE1BQU0sR0FBSSx1QkFBc0JELEtBQU0seURBQXdEO0lBQ2xHQyxNQUFNLElBQUlSLFFBQVEsR0FBSSxJQUFHQSxRQUFTLEVBQUMsR0FBRyxFQUFFO0lBQ3hDUyxlQUFNLENBQUNDLElBQUksQ0FBQ0YsTUFBTSxDQUFDO0VBQ3JCOztFQUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRSxPQUFPTCxVQUFVLENBQUM7SUFBRUYsU0FBUztJQUFFVSxNQUFNO0lBQUVDLFlBQVk7SUFBRVYsZ0JBQWdCO0lBQUVGO0VBQVMsQ0FBQyxFQUFFO0lBQ2pGLE1BQU1hLElBQUksR0FBR1osU0FBUyxHQUFHLFFBQVEsR0FBRyxpQkFBaUI7SUFDckQsTUFBTWEsR0FBRyxHQUFHYixTQUFTLEdBQUdBLFNBQVMsR0FBR1UsTUFBTTtJQUMxQyxNQUFNSSxTQUFTLEdBQ2JILFlBQVksSUFBSSxJQUFJLEdBQ2hCSSxTQUFTLEdBQ1RKLFlBQVksQ0FBQ0ssTUFBTSxHQUFHLENBQUMsR0FDcEIsZUFBY0wsWUFBYSxHQUFFLEdBQzdCLFNBQVE7O0lBRWpCO0lBQ0EsSUFBSUosTUFBTSxHQUFJLHdDQUF1Q0ssSUFBSyxLQUFJQyxHQUFJLElBQUc7SUFDckVOLE1BQU0sSUFBSUksWUFBWSxHQUFJLDZCQUE0QkcsU0FBVSx1QkFBc0IsR0FBRyxFQUFFO0lBQzNGUCxNQUFNLElBQUlOLGdCQUFnQixHQUNyQiwyQkFBMEJBLGdCQUFpQix3QkFBdUIsR0FDbkUsRUFBRTtJQUNOTSxNQUFNLElBQUlSLFFBQVEsR0FBSSxJQUFHQSxRQUFTLEVBQUMsR0FBRyxFQUFFO0lBQ3hDUyxlQUFNLENBQUNDLElBQUksQ0FBQ0YsTUFBTSxDQUFDO0VBQ3JCO0FBQ0Y7QUFFQVUsTUFBTSxDQUFDQyxPQUFPLEdBQUd4QixVQUFVIn0=
126
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9nZ2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfRGVwcmVjYXRpb25zIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJEZXByZWNhdG9yIiwic2NhblBhcnNlU2VydmVyT3B0aW9ucyIsIm9wdGlvbnMiLCJkZXByZWNhdGlvbiIsIl9nZXREZXByZWNhdGlvbnMiLCJzb2x1dGlvbiIsIm9wdGlvbktleSIsImNoYW5nZU5ld0RlZmF1bHQiLCJfbG9nT3B0aW9uIiwibG9nUnVudGltZURlcHJlY2F0aW9uIiwiX2xvZ0dlbmVyaWMiLCJEZXByZWNhdGlvbnMiLCJ1c2FnZSIsIm91dHB1dCIsImxvZ2dlciIsIndhcm4iLCJlbnZLZXkiLCJjaGFuZ2VOZXdLZXkiLCJ0eXBlIiwia2V5Iiwia2V5QWN0aW9uIiwidW5kZWZpbmVkIiwibGVuZ3RoIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9EZXByZWNhdG9yL0RlcHJlY2F0b3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IERlcHJlY2F0aW9ucyBmcm9tICcuL0RlcHJlY2F0aW9ucyc7XG5cbi8qKlxuICogVGhlIGRlcHJlY2F0b3IgY2xhc3MuXG4gKi9cbmNsYXNzIERlcHJlY2F0b3Ige1xuICAvKipcbiAgICogU2NhbnMgdGhlIFBhcnNlIFNlcnZlciBmb3IgZGVwcmVjYXRlZCBvcHRpb25zLlxuICAgKiBUaGlzIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgc2V0dGluZyBvcHRpb24gZGVmYXVsdHMsIG90aGVyd2lzZSBpdFxuICAgKiBiZWNvbWVzIGluZGlzdGluZ3Vpc2hhYmxlIHdoZXRoZXIgYW4gb3B0aW9uIGhhcyBiZWVuIHNldCBtYW51YWxseSBvclxuICAgKiBieSBkZWZhdWx0LlxuICAgKiBAcGFyYW0ge2FueX0gb3B0aW9ucyBUaGUgUGFyc2UgU2VydmVyIG9wdGlvbnMuXG4gICAqL1xuICBzdGF0aWMgc2NhblBhcnNlU2VydmVyT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgLy8gU2NhbiBmb3IgZGVwcmVjYXRpb25zXG4gICAgZm9yIChjb25zdCBkZXByZWNhdGlvbiBvZiBEZXByZWNhdG9yLl9nZXREZXByZWNhdGlvbnMoKSkge1xuICAgICAgLy8gR2V0IGRlcHJlY2F0aW9uIHByb3BlcnRpZXNcbiAgICAgIGNvbnN0IHNvbHV0aW9uID0gZGVwcmVjYXRpb24uc29sdXRpb247XG4gICAgICBjb25zdCBvcHRpb25LZXkgPSBkZXByZWNhdGlvbi5vcHRpb25LZXk7XG4gICAgICBjb25zdCBjaGFuZ2VOZXdEZWZhdWx0ID0gZGVwcmVjYXRpb24uY2hhbmdlTmV3RGVmYXVsdDtcblxuICAgICAgLy8gSWYgZGVmYXVsdCB3aWxsIGNoYW5nZSwgb25seSB0aHJvdyBhIHdhcm5pbmcgaWYgb3B0aW9uIGlzIG5vdCBzZXRcbiAgICAgIGlmIChjaGFuZ2VOZXdEZWZhdWx0ICE9IG51bGwgJiYgb3B0aW9uc1tvcHRpb25LZXldID09IG51bGwpIHtcbiAgICAgICAgRGVwcmVjYXRvci5fbG9nT3B0aW9uKHsgb3B0aW9uS2V5LCBjaGFuZ2VOZXdEZWZhdWx0LCBzb2x1dGlvbiB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9ncyBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgZm9yIGEgcGFyYW1ldGVyIHRoYXQgY2FuIG9ubHkgYmUgZGV0ZXJtaW5lZCBkeW5hbWljYWxseVxuICAgKiBkdXJpbmcgcnVudGltZS5cbiAgICpcbiAgICogTm90ZTogRG8gbm90IHVzZSB0aGlzIHRvIGxvZyBkZXByZWNhdGlvbnMgb2YgUGFyc2UgU2VydmVyIG9wdGlvbnMsIGJ1dCBhZGQgc3VjaFxuICAgKiBkZXByZWNhdGlvbnMgdG8gYERlcHJlY2F0aW9ucy5qc2AgaW5zdGVhZC4gU2VlIHRoZSBjb250cmlidXRpb24gZG9jcyBmb3IgbW9yZVxuICAgKiBkZXRhaWxzLlxuICAgKlxuICAgKiBGb3IgY29uc2lzdGVuY3ksIHRoZSBkZXByZWNhdGlvbiB3YXJuaW5nIGlzIGNvbXBvc2VkIG9mIHRoZSBmb2xsb3dpbmcgcGFydHM6XG4gICAqXG4gICAqID4gRGVwcmVjYXRpb25XYXJuaW5nOiBgdXNhZ2VgIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLlxuICAgKiBgc29sdXRpb25gLlxuICAgKlxuICAgKiAtIGB1c2FnZWA6IFRoZSBkZXByZWNhdGVkIHVzYWdlLlxuICAgKiAtIGBzb2x1dGlvbmA6IFRoZSBpbnN0cnVjdGlvbiB0byByZXNvbHZlIHRoaXMgZGVwcmVjYXRpb24gd2FybmluZy5cbiAgICpcbiAgICogRm9yIGV4YW1wbGU6XG4gICAqID4gRGVwcmVjYXRpb25XYXJuaW5nOiBgUHJlZml4aW5nIGZpZWxkIG5hbWVzIHdpdGggZG9sbGFyIHNpZ24gKCQpIGluIGFnZ3JlZ2F0aW9uIHF1ZXJ5YFxuICAgKiBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4gYFJlZmVyZW5jZSBmaWVsZCBuYW1lcyB3aXRob3V0XG4gICAqIGRvbGxhciBzaWduIHByZWZpeC5gXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoZSBkZXByZWNhdGlvbiBvcHRpb25zLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy51c2FnZSBUaGUgdXNhZ2UgdGhhdCBpcyBkZXByZWNhdGVkLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuc29sdXRpb25dIFRoZSBpbnN0cnVjdGlvbiB0byByZXNvbHZlIHRoaXMgZGVwcmVjYXRpb24gd2FybmluZy5cbiAgICogT3B0aW9uYWwuIEl0IGlzIHJlY29tbWVuZGVkIHRvIGFkZCBhbiBpbnN0cnVjdGlvbiBmb3IgdGhlIGNvbnZlbmllbmNlIG9mIHRoZSBkZXZlbG9wZXIuXG4gICAqL1xuICBzdGF0aWMgbG9nUnVudGltZURlcHJlY2F0aW9uKG9wdGlvbnMpIHtcbiAgICBEZXByZWNhdG9yLl9sb2dHZW5lcmljKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRlcHJlY2F0aW9uIGRlZmluaXRpb25zLlxuICAgKiBAcmV0dXJucyB7QXJyYXk8T2JqZWN0Pn0gVGhlIGRlcHJlY2F0aW9ucy5cbiAgICovXG4gIHN0YXRpYyBfZ2V0RGVwcmVjYXRpb25zKCkge1xuICAgIHJldHVybiBEZXByZWNhdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogTG9ncyBhIGdlbmVyaWMgZGVwcmVjYXRpb24gd2FybmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgVGhlIGRlcHJlY2F0aW9uIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLnVzYWdlIFRoZSB1c2FnZSB0aGF0IGlzIGRlcHJlY2F0ZWQuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5zb2x1dGlvbl0gVGhlIGluc3RydWN0aW9uIHRvIHJlc29sdmUgdGhpcyBkZXByZWNhdGlvbiB3YXJuaW5nLlxuICAgKiBPcHRpb25hbC4gSXQgaXMgcmVjb21tZW5kZWQgdG8gYWRkIGFuIGluc3RydWN0aW9uIGZvciB0aGUgY29udmVuaWVuY2Ugb2YgdGhlIGRldmVsb3Blci5cbiAgICovXG4gIHN0YXRpYyBfbG9nR2VuZXJpYyh7IHVzYWdlLCBzb2x1dGlvbiB9KSB7XG4gICAgLy8gQ29tcG9zZSBtZXNzYWdlXG4gICAgbGV0IG91dHB1dCA9IGBEZXByZWNhdGlvbldhcm5pbmc6ICR7dXNhZ2V9IGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLmA7XG4gICAgb3V0cHV0ICs9IHNvbHV0aW9uID8gYCAke3NvbHV0aW9ufWAgOiAnJztcbiAgICBsb2dnZXIud2FybihvdXRwdXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvZ3MgYSBkZXByZWNhdGlvbiB3YXJuaW5nIGZvciBhIFBhcnNlIFNlcnZlciBvcHRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25LZXkgVGhlIG9wdGlvbiBrZXkgaW5jbC4gaXRzIHBhdGgsIGUuZy4gYHNlY3VyaXR5LmVuYWJsZUNoZWNrYC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGVudktleSBUaGUgZW52aXJvbm1lbnQga2V5LCBlLmcuIGBQQVJTRV9TRVJWRVJfU0VDVVJJVFlgLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gY2hhbmdlTmV3S2V5IFNldCB0aGUgbmV3IGtleSBuYW1lIGlmIHRoZSBjdXJyZW50IGtleSB3aWxsIGJlIHJlcGxhY2VkLFxuICAgKiBvciBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBjdXJyZW50IGtleSB3aWxsIGJlIHJlbW92ZWQgd2l0aG91dCByZXBsYWNlbWVudC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGNoYW5nZU5ld0RlZmF1bHQgU2V0IHRoZSBuZXcgZGVmYXVsdCB2YWx1ZSBpZiB0aGUga2V5J3MgZGVmYXVsdCB2YWx1ZVxuICAgKiB3aWxsIGNoYW5nZSBpbiBhIGZ1dHVyZSB2ZXJzaW9uLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gW3NvbHV0aW9uXSBUaGUgaW5zdHJ1Y3Rpb24gdG8gcmVzb2x2ZSB0aGlzIGRlcHJlY2F0aW9uIHdhcm5pbmcuIFRoaXNcbiAgICogbWVzc2FnZSBtdXN0IG5vdCBpbmNsdWRlIHRoZSB3YXJuaW5nIHRoYXQgdGhlIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkLCB0aGF0IGlzXG4gICAqIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gdGhlIG1lc3NhZ2UuIEl0IHNob3VsZCBvbmx5IGNvbnRhaW4gdGhlIGluc3RydWN0aW9uIG9uIGhvd1xuICAgKiB0byByZXNvbHZlIHRoaXMgd2FybmluZy5cbiAgICovXG4gIHN0YXRpYyBfbG9nT3B0aW9uKHsgb3B0aW9uS2V5LCBlbnZLZXksIGNoYW5nZU5ld0tleSwgY2hhbmdlTmV3RGVmYXVsdCwgc29sdXRpb24gfSkge1xuICAgIGNvbnN0IHR5cGUgPSBvcHRpb25LZXkgPyAnb3B0aW9uJyA6ICdlbnZpcm9ubWVudCBrZXknO1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbktleSA/IG9wdGlvbktleSA6IGVudktleTtcbiAgICBjb25zdCBrZXlBY3Rpb24gPVxuICAgICAgY2hhbmdlTmV3S2V5ID09IG51bGxcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiBjaGFuZ2VOZXdLZXkubGVuZ3RoID4gMFxuICAgICAgICAgID8gYHJlbmFtZWQgdG8gJyR7Y2hhbmdlTmV3S2V5fSdgXG4gICAgICAgICAgOiBgcmVtb3ZlZGA7XG5cbiAgICAvLyBDb21wb3NlIG1lc3NhZ2VcbiAgICBsZXQgb3V0cHV0ID0gYERlcHJlY2F0aW9uV2FybmluZzogVGhlIFBhcnNlIFNlcnZlciAke3R5cGV9ICcke2tleX0nIGA7XG4gICAgb3V0cHV0ICs9IGNoYW5nZU5ld0tleSA/IGBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlICR7a2V5QWN0aW9ufSBpbiBhIGZ1dHVyZSB2ZXJzaW9uLmAgOiAnJztcbiAgICBvdXRwdXQgKz0gY2hhbmdlTmV3RGVmYXVsdFxuICAgICAgPyBgZGVmYXVsdCB3aWxsIGNoYW5nZSB0byAnJHtjaGFuZ2VOZXdEZWZhdWx0fScgaW4gYSBmdXR1cmUgdmVyc2lvbi5gXG4gICAgICA6ICcnO1xuICAgIG91dHB1dCArPSBzb2x1dGlvbiA/IGAgJHtzb2x1dGlvbn1gIDogJyc7XG4gICAgbG9nZ2VyLndhcm4ob3V0cHV0KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERlcHJlY2F0b3I7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsYUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQTBDLFNBQUFELHVCQUFBRyxHQUFBLFdBQUFBLEdBQUEsSUFBQUEsR0FBQSxDQUFBQyxVQUFBLEdBQUFELEdBQUEsS0FBQUUs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
@@ -372,4 +372,4 @@ class ParseGraphQLSchema {
372
372
  }
373
373
  }
374
374
  exports.ParseGraphQLSchema = ParseGraphQLSchema;
375
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSRVNFUlZFRF9HUkFQSFFMX1RZUEVfTkFNRVMiLCJSRVNFUlZFRF9HUkFQSFFMX1FVRVJZX05BTUVTIiwiUkVTRVJWRURfR1JBUEhRTF9NVVRBVElPTl9OQU1FUyIsIlBhcnNlR3JhcGhRTFNjaGVtYSIsImNvbnN0cnVjdG9yIiwicGFyYW1zIiwicGFyc2VHcmFwaFFMQ29udHJvbGxlciIsInJlcXVpcmVkUGFyYW1ldGVyIiwiZGF0YWJhc2VDb250cm9sbGVyIiwibG9nIiwiZ3JhcGhRTEN1c3RvbVR5cGVEZWZzIiwiYXBwSWQiLCJzY2hlbWFDYWNoZSIsIlNjaGVtYUNhY2hlIiwibG9nQ2FjaGUiLCJsb2FkIiwicGFyc2VHcmFwaFFMQ29uZmlnIiwiX2luaXRpYWxpemVTY2hlbWFBbmRDb25maWciLCJwYXJzZUNsYXNzZXNBcnJheSIsIl9nZXRDbGFzc2VzRm9yU2NoZW1hIiwiZnVuY3Rpb25OYW1lcyIsIl9nZXRGdW5jdGlvbk5hbWVzIiwiZnVuY3Rpb25OYW1lc1N0cmluZyIsImpvaW4iLCJwYXJzZUNsYXNzZXMiLCJyZWR1Y2UiLCJhY2MiLCJjbGF6eiIsImNsYXNzTmFtZSIsIl9oYXNTY2hlbWFJbnB1dENoYW5nZWQiLCJncmFwaFFMU2NoZW1hIiwicGFyc2VDbGFzc1R5cGVzIiwidmlld2VyVHlwZSIsImdyYXBoUUxBdXRvU2NoZW1hIiwiZ3JhcGhRTFR5cGVzIiwiZ3JhcGhRTFF1ZXJpZXMiLCJncmFwaFFMTXV0YXRpb25zIiwiZ3JhcGhRTFN1YnNjcmlwdGlvbnMiLCJncmFwaFFMU2NoZW1hRGlyZWN0aXZlc0RlZmluaXRpb25zIiwiZ3JhcGhRTFNjaGVtYURpcmVjdGl2ZXMiLCJyZWxheU5vZGVJbnRlcmZhY2UiLCJkZWZhdWx0R3JhcGhRTFR5cGVzIiwiZGVmYXVsdFJlbGF5U2NoZW1hIiwic2NoZW1hVHlwZXMiLCJfZ2V0UGFyc2VDbGFzc2VzV2l0aENvbmZpZyIsImZvckVhY2giLCJwYXJzZUNsYXNzIiwicGFyc2VDbGFzc0NvbmZpZyIsIk9iamVjdCIsImtleXMiLCJmaWVsZHMiLCJmaWVsZE5hbWUiLCJzdGFydHNXaXRoIiwib3JkZXJlZEZpZWxkcyIsInNvcnQiLCJwYXJzZUNsYXNzUXVlcmllcyIsInBhcnNlQ2xhc3NNdXRhdGlvbnMiLCJsb2FkQXJyYXlSZXN1bHQiLCJkZWZhdWx0R3JhcGhRTFF1ZXJpZXMiLCJkZWZhdWx0R3JhcGhRTE11dGF0aW9ucyIsImdyYXBoUUxRdWVyeSIsInVuZGVmaW5lZCIsImxlbmd0aCIsIkdyYXBoUUxPYmplY3RUeXBlIiwibmFtZSIsImRlc2NyaXB0aW9uIiwiYWRkR3JhcGhRTFR5cGUiLCJncmFwaFFMTXV0YXRpb24iLCJncmFwaFFMU3Vic2NyaXB0aW9uIiwiR3JhcGhRTFNjaGVtYSIsInR5cGVzIiwicXVlcnkiLCJtdXRhdGlvbiIsInN1YnNjcmlwdGlvbiIsInNjaGVtYURpcmVjdGl2ZXMiLCJnZXRUeXBlTWFwIiwiY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGVNYXAiLCJfdHlwZU1hcCIsImZpbmRBbmRSZXBsYWNlTGFzdFR5cGUiLCJwYXJlbnQiLCJrZXkiLCJvZlR5cGUiLCJjdXN0b21HcmFwaFFMU2NoZW1hVHlwZUtleSIsImN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlIiwiYXV0b0dyYXBoUUxTY2hlbWFUeXBlIiwiZ2V0RmllbGRzIiwiX2ZpZWxkcyIsImZpZWxkS2V5IiwiZmllbGQiLCJkaXJlY3RpdmVzRGVmaW5pdGlvbnNTY2hlbWEiLCJhdXRvU2NoZW1hIiwibWVyZ2VTY2hlbWFzIiwic2NoZW1hcyIsInR5cGVEZWZzIiwibWVyZ2VUeXBlRGVmcyIsIl9sb2dPbmNlIiwic2V2ZXJpdHkiLCJtZXNzYWdlIiwidHlwZSIsInRocm93RXJyb3IiLCJpZ25vcmVSZXNlcnZlZCIsImlnbm9yZUNvbm5lY3Rpb24iLCJpbmNsdWRlcyIsImZpbmQiLCJleGlzdGluZ1R5cGUiLCJlbmRzV2l0aCIsIkVycm9yIiwicHVzaCIsImFkZEdyYXBoUUxRdWVyeSIsImFkZEdyYXBoUUxNdXRhdGlvbiIsImhhbmRsZUVycm9yIiwiZXJyb3IiLCJQYXJzZSIsInN0YWNrIiwidG9HcmFwaFFMRXJyb3IiLCJzY2hlbWFDb250cm9sbGVyIiwiUHJvbWlzZSIsImFsbCIsImxvYWRTY2hlbWEiLCJnZXRHcmFwaFFMQ29uZmlnIiwiZW5hYmxlZEZvckNsYXNzZXMiLCJkaXNhYmxlZEZvckNsYXNzZXMiLCJhbGxDbGFzc2VzIiwiZ2V0QWxsQ2xhc3NlcyIsIkFycmF5IiwiaXNBcnJheSIsImluY2x1ZGVkQ2xhc3NlcyIsImZpbHRlciIsImlzVXNlcnNDbGFzc0Rpc2FibGVkIiwic29tZSIsImNsYXNzQ29uZmlncyIsInNvcnRDbGFzc2VzIiwiYSIsImIiLCJtYXAiLCJjIiwiZ2V0RnVuY3Rpb25OYW1lcyIsImZ1bmN0aW9uTmFtZSIsInRlc3QiLCJpc0RlZXBTdHJpY3RFcXVhbCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9HcmFwaFFML1BhcnNlR3JhcGhRTFNjaGVtYS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgeyBHcmFwaFFMU2NoZW1hLCBHcmFwaFFMT2JqZWN0VHlwZSwgRG9jdW1lbnROb2RlLCBHcmFwaFFMTmFtZWRUeXBlIH0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQgeyBtZXJnZVNjaGVtYXMgfSBmcm9tICdAZ3JhcGhxbC10b29scy9zY2hlbWEnO1xuaW1wb3J0IHsgbWVyZ2VUeXBlRGVmcyB9IGZyb20gJ0BncmFwaHFsLXRvb2xzL21lcmdlJztcbmltcG9ydCB7IGlzRGVlcFN0cmljdEVxdWFsIH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgcmVxdWlyZWRQYXJhbWV0ZXIgZnJvbSAnLi4vcmVxdWlyZWRQYXJhbWV0ZXInO1xuaW1wb3J0ICogYXMgZGVmYXVsdEdyYXBoUUxUeXBlcyBmcm9tICcuL2xvYWRlcnMvZGVmYXVsdEdyYXBoUUxUeXBlcyc7XG5pbXBvcnQgKiBhcyBwYXJzZUNsYXNzVHlwZXMgZnJvbSAnLi9sb2FkZXJzL3BhcnNlQ2xhc3NUeXBlcyc7XG5pbXBvcnQgKiBhcyBwYXJzZUNsYXNzUXVlcmllcyBmcm9tICcuL2xvYWRlcnMvcGFyc2VDbGFzc1F1ZXJpZXMnO1xuaW1wb3J0ICogYXMgcGFyc2VDbGFzc011dGF0aW9ucyBmcm9tICcuL2xvYWRlcnMvcGFyc2VDbGFzc011dGF0aW9ucyc7XG5pbXBvcnQgKiBhcyBkZWZhdWx0R3JhcGhRTFF1ZXJpZXMgZnJvbSAnLi9sb2FkZXJzL2RlZmF1bHRHcmFwaFFMUXVlcmllcyc7XG5pbXBvcnQgKiBhcyBkZWZhdWx0R3JhcGhRTE11dGF0aW9ucyBmcm9tICcuL2xvYWRlcnMvZGVmYXVsdEdyYXBoUUxNdXRhdGlvbnMnO1xuaW1wb3J0IFBhcnNlR3JhcGhRTENvbnRyb2xsZXIsIHsgUGFyc2VHcmFwaFFMQ29uZmlnIH0gZnJvbSAnLi4vQ29udHJvbGxlcnMvUGFyc2VHcmFwaFFMQ29udHJvbGxlcic7XG5pbXBvcnQgRGF0YWJhc2VDb250cm9sbGVyIGZyb20gJy4uL0NvbnRyb2xsZXJzL0RhdGFiYXNlQ29udHJvbGxlcic7XG5pbXBvcnQgU2NoZW1hQ2FjaGUgZnJvbSAnLi4vQWRhcHRlcnMvQ2FjaGUvU2NoZW1hQ2FjaGUnO1xuaW1wb3J0IHsgdG9HcmFwaFFMRXJyb3IgfSBmcm9tICcuL3BhcnNlR3JhcGhRTFV0aWxzJztcbmltcG9ydCAqIGFzIHNjaGVtYURpcmVjdGl2ZXMgZnJvbSAnLi9sb2FkZXJzL3NjaGVtYURpcmVjdGl2ZXMnO1xuaW1wb3J0ICogYXMgc2NoZW1hVHlwZXMgZnJvbSAnLi9sb2FkZXJzL3NjaGVtYVR5cGVzJztcbmltcG9ydCB7IGdldEZ1bmN0aW9uTmFtZXMgfSBmcm9tICcuLi90cmlnZ2Vycyc7XG5pbXBvcnQgKiBhcyBkZWZhdWx0UmVsYXlTY2hlbWEgZnJvbSAnLi9sb2FkZXJzL2RlZmF1bHRSZWxheVNjaGVtYSc7XG5cbmNvbnN0IFJFU0VSVkVEX0dSQVBIUUxfVFlQRV9OQU1FUyA9IFtcbiAgJ1N0cmluZycsXG4gICdCb29sZWFuJyxcbiAgJ0ludCcsXG4gICdGbG9hdCcsXG4gICdJRCcsXG4gICdBcnJheVJlc3VsdCcsXG4gICdRdWVyeScsXG4gICdNdXRhdGlvbicsXG4gICdTdWJzY3JpcHRpb24nLFxuICAnQ3JlYXRlRmlsZUlucHV0JyxcbiAgJ0NyZWF0ZUZpbGVQYXlsb2FkJyxcbiAgJ1ZpZXdlcicsXG4gICdTaWduVXBJbnB1dCcsXG4gICdTaWduVXBQYXlsb2FkJyxcbiAgJ0xvZ0luSW5wdXQnLFxuICAnTG9nSW5QYXlsb2FkJyxcbiAgJ0xvZ091dElucHV0JyxcbiAgJ0xvZ091dFBheWxvYWQnLFxuICAnQ2xvdWRDb2RlRnVuY3Rpb24nLFxuICAnQ2FsbENsb3VkQ29kZUlucHV0JyxcbiAgJ0NhbGxDbG91ZENvZGVQYXlsb2FkJyxcbiAgJ0NyZWF0ZUNsYXNzSW5wdXQnLFxuICAnQ3JlYXRlQ2xhc3NQYXlsb2FkJyxcbiAgJ1VwZGF0ZUNsYXNzSW5wdXQnLFxuICAnVXBkYXRlQ2xhc3NQYXlsb2FkJyxcbiAgJ0RlbGV0ZUNsYXNzSW5wdXQnLFxuICAnRGVsZXRlQ2xhc3NQYXlsb2FkJyxcbiAgJ1BhZ2VJbmZvJyxcbl07XG5jb25zdCBSRVNFUlZFRF9HUkFQSFFMX1FVRVJZX05BTUVTID0gWydoZWFsdGgnLCAndmlld2VyJywgJ2NsYXNzJywgJ2NsYXNzZXMnXTtcbmNvbnN0IFJFU0VSVkVEX0dSQVBIUUxfTVVUQVRJT05fTkFNRVMgPSBbXG4gICdzaWduVXAnLFxuICAnbG9nSW4nLFxuICAnbG9nT3V0JyxcbiAgJ2NyZWF0ZUZpbGUnLFxuICAnY2FsbENsb3VkQ29kZScsXG4gICdjcmVhdGVDbGFzcycsXG4gICd1cGRhdGVDbGFzcycsXG4gICdkZWxldGVDbGFzcycsXG5dO1xuXG5jbGFzcyBQYXJzZUdyYXBoUUxTY2hlbWEge1xuICBkYXRhYmFzZUNvbnRyb2xsZXI6IERhdGFiYXNlQ29udHJvbGxlcjtcbiAgcGFyc2VHcmFwaFFMQ29udHJvbGxlcjogUGFyc2VHcmFwaFFMQ29udHJvbGxlcjtcbiAgcGFyc2VHcmFwaFFMQ29uZmlnOiBQYXJzZUdyYXBoUUxDb25maWc7XG4gIGxvZzogYW55O1xuICBhcHBJZDogc3RyaW5nO1xuICBncmFwaFFMQ3VzdG9tVHlwZURlZnM6ID8oc3RyaW5nIHwgR3JhcGhRTFNjaGVtYSB8IERvY3VtZW50Tm9kZSB8IEdyYXBoUUxOYW1lZFR5cGVbXSk7XG4gIHNjaGVtYUNhY2hlOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcGFyYW1zOiB7XG4gICAgICBkYXRhYmFzZUNvbnRyb2xsZXI6IERhdGFiYXNlQ29udHJvbGxlcixcbiAgICAgIHBhcnNlR3JhcGhRTENvbnRyb2xsZXI6IFBhcnNlR3JhcGhRTENvbnRyb2xsZXIsXG4gICAgICBsb2c6IGFueSxcbiAgICAgIGFwcElkOiBzdHJpbmcsXG4gICAgICBncmFwaFFMQ3VzdG9tVHlwZURlZnM6ID8oc3RyaW5nIHwgR3JhcGhRTFNjaGVtYSB8IERvY3VtZW50Tm9kZSB8IEdyYXBoUUxOYW1lZFR5cGVbXSksXG4gICAgfSA9IHt9XG4gICkge1xuICAgIHRoaXMucGFyc2VHcmFwaFFMQ29udHJvbGxlciA9XG4gICAgICBwYXJhbXMucGFyc2VHcmFwaFFMQ29udHJvbGxlciB8fFxuICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYSBwYXJzZUdyYXBoUUxDb250cm9sbGVyIGluc3RhbmNlIScpO1xuICAgIHRoaXMuZGF0YWJhc2VDb250cm9sbGVyID1cbiAgICAgIHBhcmFtcy5kYXRhYmFzZUNvbnRyb2xsZXIgfHxcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGEgZGF0YWJhc2VDb250cm9sbGVyIGluc3RhbmNlIScpO1xuICAgIHRoaXMubG9nID0gcGFyYW1zLmxvZyB8fCByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIGxvZyBpbnN0YW5jZSEnKTtcbiAgICB0aGlzLmdyYXBoUUxDdXN0b21UeXBlRGVmcyA9IHBhcmFtcy5ncmFwaFFMQ3VzdG9tVHlwZURlZnM7XG4gICAgdGhpcy5hcHBJZCA9IHBhcmFtcy5hcHBJZCB8fCByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSB0aGUgYXBwSWQhJyk7XG4gICAgdGhpcy5zY2hlbWFDYWNoZSA9IFNjaGVtYUNhY2hlO1xuICAgIHRoaXMubG9nQ2FjaGUgPSB7fTtcbiAgfVxuXG4gIGFzeW5jIGxvYWQoKSB7XG4gICAgY29uc3QgeyBwYXJzZUdyYXBoUUxDb25maWcgfSA9IGF3YWl0IHRoaXMuX2luaXRpYWxpemVTY2hlbWFBbmRDb25maWcoKTtcbiAgICBjb25zdCBwYXJzZUNsYXNzZXNBcnJheSA9IGF3YWl0IHRoaXMuX2dldENsYXNzZXNGb3JTY2hlbWEocGFyc2VHcmFwaFFMQ29uZmlnKTtcbiAgICBjb25zdCBmdW5jdGlvbk5hbWVzID0gYXdhaXQgdGhpcy5fZ2V0RnVuY3Rpb25OYW1lcygpO1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZXNTdHJpbmcgPSBmdW5jdGlvbk5hbWVzLmpvaW4oKTtcblxuICAgIGNvbnN0IHBhcnNlQ2xhc3NlcyA9IHBhcnNlQ2xhc3Nlc0FycmF5LnJlZHVjZSgoYWNjLCBjbGF6eikgPT4ge1xuICAgICAgYWNjW2NsYXp6LmNsYXNzTmFtZV0gPSBjbGF6ejtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICAgIGlmIChcbiAgICAgICF0aGlzLl9oYXNTY2hlbWFJbnB1dENoYW5nZWQoe1xuICAgICAgICBwYXJzZUNsYXNzZXMsXG4gICAgICAgIHBhcnNlR3JhcGhRTENvbmZpZyxcbiAgICAgICAgZnVuY3Rpb25OYW1lc1N0cmluZyxcbiAgICAgIH0pXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncmFwaFFMU2NoZW1hO1xuICAgIH1cblxuICAgIHRoaXMucGFyc2VDbGFzc2VzID0gcGFyc2VDbGFzc2VzO1xuICAgIHRoaXMucGFyc2VHcmFwaFFMQ29uZmlnID0gcGFyc2VHcmFwaFFMQ29uZmlnO1xuICAgIHRoaXMuZnVuY3Rpb25OYW1lcyA9IGZ1bmN0aW9uTmFtZXM7XG4gICAgdGhpcy5mdW5jdGlvbk5hbWVzU3RyaW5nID0gZnVuY3Rpb25OYW1lc1N0cmluZztcbiAgICB0aGlzLnBhcnNlQ2xhc3NUeXBlcyA9IHt9O1xuICAgIHRoaXMudmlld2VyVHlwZSA9IG51bGw7XG4gICAgdGhpcy5ncmFwaFFMQXV0b1NjaGVtYSA9IG51bGw7XG4gICAgdGhpcy5ncmFwaFFMU2NoZW1hID0gbnVsbDtcbiAgICB0aGlzLmdyYXBoUUxUeXBlcyA9IFtdO1xuICAgIHRoaXMuZ3JhcGhRTFF1ZXJpZXMgPSB7fTtcbiAgICB0aGlzLmdyYXBoUUxNdXRhdGlvbnMgPSB7fTtcbiAgICB0aGlzLmdyYXBoUUxTdWJzY3JpcHRpb25zID0ge307XG4gICAgdGhpcy5ncmFwaFFMU2NoZW1hRGlyZWN0aXZlc0RlZmluaXRpb25zID0gbnVsbDtcbiAgICB0aGlzLmdyYXBoUUxTY2hlbWFEaXJlY3RpdmVzID0ge307XG4gICAgdGhpcy5yZWxheU5vZGVJbnRlcmZhY2UgPSBudWxsO1xuXG4gICAgZGVmYXVsdEdyYXBoUUxUeXBlcy5sb2FkKHRoaXMpO1xuICAgIGRlZmF1bHRSZWxheVNjaGVtYS5sb2FkKHRoaXMpO1xuICAgIHNjaGVtYVR5cGVzLmxvYWQodGhpcyk7XG5cbiAgICB0aGlzLl9nZXRQYXJzZUNsYXNzZXNXaXRoQ29uZmlnKHBhcnNlQ2xhc3Nlc0FycmF5LCBwYXJzZUdyYXBoUUxDb25maWcpLmZvckVhY2goXG4gICAgICAoW3BhcnNlQ2xhc3MsIHBhcnNlQ2xhc3NDb25maWddKSA9PiB7XG4gICAgICAgIC8vIFNvbWUgdGltZXMgc2NoZW1hIHJldHVybiB0aGUgX2F1dGhfZGF0YV8gZmllbGRcbiAgICAgICAgLy8gaXQgd2lsbCBsZWFkIHRvIHVuc3RhYmxlIGdyYXBocWwgZ2VuZXJhdGlvbiBvcmRlclxuICAgICAgICBpZiAocGFyc2VDbGFzcy5jbGFzc05hbWUgPT09ICdfVXNlcicpIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyhwYXJzZUNsYXNzLmZpZWxkcykuZm9yRWFjaChmaWVsZE5hbWUgPT4ge1xuICAgICAgICAgICAgaWYgKGZpZWxkTmFtZS5zdGFydHNXaXRoKCdfYXV0aF9kYXRhXycpKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSBwYXJzZUNsYXNzLmZpZWxkc1tmaWVsZE5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmllbGRzIG9yZGVyIGluc2lkZSB0aGUgc2NoZW1hIHNlZW1zIHRvIG5vdCBiZSBjb25zaXN0ZW50IGFjcm9zc1xuICAgICAgICAvLyByZXN0YXJ0IHNvIHdlIG5lZWQgdG8gZW5zdXJlIGFuIGFscGhhYmV0aWNhbCBvcmRlclxuICAgICAgICAvLyBhbHNvIGl0J3MgYmV0dGVyIGZvciB0aGUgcGxheWdyb3VuZCBkb2N1bWVudGF0aW9uXG4gICAgICAgIGNvbnN0IG9yZGVyZWRGaWVsZHMgPSB7fTtcbiAgICAgICAgT2JqZWN0LmtleXMocGFyc2VDbGFzcy5maWVsZHMpXG4gICAgICAgICAgLnNvcnQoKVxuICAgICAgICAgIC5mb3JFYWNoKGZpZWxkTmFtZSA9PiB7XG4gICAgICAgICAgICBvcmRlcmVkRmllbGRzW2ZpZWxkTmFtZV0gPSBwYXJzZUNsYXNzLmZpZWxkc1tmaWVsZE5hbWVdO1xuICAgICAgICAgIH0pO1xuICAgICAgICBwYXJzZUNsYXNzLmZpZWxkcyA9IG9yZGVyZWRGaWVsZHM7XG4gICAgICAgIHBhcnNlQ2xhc3NUeXBlcy5sb2FkKHRoaXMsIHBhcnNlQ2xhc3MsIHBhcnNlQ2xhc3NDb25maWcpO1xuICAgICAgICBwYXJzZUNsYXNzUXVlcmllcy5sb2FkKHRoaXMsIHBhcnNlQ2xhc3MsIHBhcnNlQ2xhc3NDb25maWcpO1xuICAgICAgICBwYXJzZUNsYXNzTXV0YXRpb25zLmxvYWQodGhpcywgcGFyc2VDbGFzcywgcGFyc2VDbGFzc0NvbmZpZyk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIGRlZmF1bHRHcmFwaFFMVHlwZXMubG9hZEFycmF5UmVzdWx0KHRoaXMsIHBhcnNlQ2xhc3Nlc0FycmF5KTtcbiAgICBkZWZhdWx0R3JhcGhRTFF1ZXJpZXMubG9hZCh0aGlzKTtcbiAgICBkZWZhdWx0R3JhcGhRTE11dGF0aW9ucy5sb2FkKHRoaXMpO1xuXG4gICAgbGV0IGdyYXBoUUxRdWVyeSA9IHVuZGVmaW5lZDtcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5ncmFwaFFMUXVlcmllcykubGVuZ3RoID4gMCkge1xuICAgICAgZ3JhcGhRTFF1ZXJ5ID0gbmV3IEdyYXBoUUxPYmplY3RUeXBlKHtcbiAgICAgICAgbmFtZTogJ1F1ZXJ5JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdRdWVyeSBpcyB0aGUgdG9wIGxldmVsIHR5cGUgZm9yIHF1ZXJpZXMuJyxcbiAgICAgICAgZmllbGRzOiB0aGlzLmdyYXBoUUxRdWVyaWVzLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmFkZEdyYXBoUUxUeXBlKGdyYXBoUUxRdWVyeSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgbGV0IGdyYXBoUUxNdXRhdGlvbiA9IHVuZGVmaW5lZDtcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5ncmFwaFFMTXV0YXRpb25zKS5sZW5ndGggPiAwKSB7XG4gICAgICBncmFwaFFMTXV0YXRpb24gPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICAgICAgICBuYW1lOiAnTXV0YXRpb24nLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ011dGF0aW9uIGlzIHRoZSB0b3AgbGV2ZWwgdHlwZSBmb3IgbXV0YXRpb25zLicsXG4gICAgICAgIGZpZWxkczogdGhpcy5ncmFwaFFMTXV0YXRpb25zLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmFkZEdyYXBoUUxUeXBlKGdyYXBoUUxNdXRhdGlvbiwgdHJ1ZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgbGV0IGdyYXBoUUxTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZ3JhcGhRTFN1YnNjcmlwdGlvbnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGdyYXBoUUxTdWJzY3JpcHRpb24gPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICAgICAgICBuYW1lOiAnU3Vic2NyaXB0aW9uJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdTdWJzY3JpcHRpb24gaXMgdGhlIHRvcCBsZXZlbCB0eXBlIGZvciBzdWJzY3JpcHRpb25zLicsXG4gICAgICAgIGZpZWxkczogdGhpcy5ncmFwaFFMU3Vic2NyaXB0aW9ucyxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hZGRHcmFwaFFMVHlwZShncmFwaFFMU3Vic2NyaXB0aW9uLCB0cnVlLCB0cnVlKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoUUxBdXRvU2NoZW1hID0gbmV3IEdyYXBoUUxTY2hlbWEoe1xuICAgICAgdHlwZXM6IHRoaXMuZ3JhcGhRTFR5cGVzLFxuICAgICAgcXVlcnk6IGdyYXBoUUxRdWVyeSxcbiAgICAgIG11dGF0aW9uOiBncmFwaFFMTXV0YXRpb24sXG4gICAgICBzdWJzY3JpcHRpb246IGdyYXBoUUxTdWJzY3JpcHRpb24sXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5ncmFwaFFMQ3VzdG9tVHlwZURlZnMpIHtcbiAgICAgIHNjaGVtYURpcmVjdGl2ZXMubG9hZCh0aGlzKTtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5ncmFwaFFMQ3VzdG9tVHlwZURlZnMuZ2V0VHlwZU1hcCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBJbiBmb2xsb3dpbmcgY29kZSB3ZSB1c2UgdW5kZXJzY29yZSBhdHRyIHRvIGtlZXAgdGhlIGRpcmVjdCB2YXJpYWJsZSByZWZlcmVuY2VcbiAgICAgICAgY29uc3QgY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGVNYXAgPSB0aGlzLmdyYXBoUUxDdXN0b21UeXBlRGVmcy5fdHlwZU1hcDtcbiAgICAgICAgY29uc3QgZmluZEFuZFJlcGxhY2VMYXN0VHlwZSA9IChwYXJlbnQsIGtleSkgPT4ge1xuICAgICAgICAgIGlmIChwYXJlbnRba2V5XS5uYW1lKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMuZ3JhcGhRTEF1dG9TY2hlbWEuX3R5cGVNYXBbcGFyZW50W2tleV0ubmFtZV0gJiZcbiAgICAgICAgICAgICAgdGhpcy5ncmFwaFFMQXV0b1NjaGVtYS5fdHlwZU1hcFtwYXJlbnRba2V5XS5uYW1lXSAhPT0gcGFyZW50W2tleV1cbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAvLyBUbyBhdm9pZCB1bnJlc29sdmVkIGZpZWxkIG9uIG92ZXJsb2FkZWQgc2NoZW1hXG4gICAgICAgICAgICAgIC8vIHJlcGxhY2UgdGhlIGZpbmFsIHR5cGUgd2l0aCB0aGUgYXV0byBzY2hlbWEgb25lXG4gICAgICAgICAgICAgIHBhcmVudFtrZXldID0gdGhpcy5ncmFwaFFMQXV0b1NjaGVtYS5fdHlwZU1hcFtwYXJlbnRba2V5XS5uYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHBhcmVudFtrZXldLm9mVHlwZSkge1xuICAgICAgICAgICAgICBmaW5kQW5kUmVwbGFjZUxhc3RUeXBlKHBhcmVudFtrZXldLCAnb2ZUeXBlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBBZGQgbm9uIHNoYXJlZCB0eXBlcyBmcm9tIGN1c3RvbSBzY2hlbWEgdG8gYXV0byBzY2hlbWFcbiAgICAgICAgLy8gbm90ZTogc29tZSBub24gc2hhcmVkIHR5cGVzIGNhbiB1c2Ugc29tZSBzaGFyZWQgdHlwZXNcbiAgICAgICAgLy8gc28gdGhpcyBjb2RlIG5lZWQgdG8gYmUgcmFuIGJlZm9yZSB0aGUgc2hhcmVkIHR5cGVzIGFkZGl0aW9uXG4gICAgICAgIC8vIHdlIHVzZSBzb3J0IHRvIGVuc3VyZSBzY2hlbWEgY29uc2lzdGVuY3kgb3ZlciByZXN0YXJ0c1xuICAgICAgICBPYmplY3Qua2V5cyhjdXN0b21HcmFwaFFMU2NoZW1hVHlwZU1hcClcbiAgICAgICAgICAuc29ydCgpXG4gICAgICAgICAgLmZvckVhY2goY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGVLZXkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGUgPSBjdXN0b21HcmFwaFFMU2NoZW1hVHlwZU1hcFtjdXN0b21HcmFwaFFMU2NoZW1hVHlwZUtleV07XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICFjdXN0b21HcmFwaFFMU2NoZW1hVHlwZSB8fFxuICAgICAgICAgICAgICAhY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGUubmFtZSB8fFxuICAgICAgICAgICAgICBjdXN0b21HcmFwaFFMU2NoZW1hVHlwZS5uYW1lLnN0YXJ0c1dpdGgoJ19fJylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhdXRvR3JhcGhRTFNjaGVtYVR5cGUgPSB0aGlzLmdyYXBoUUxBdXRvU2NoZW1hLl90eXBlTWFwW1xuICAgICAgICAgICAgICBjdXN0b21HcmFwaFFMU2NoZW1hVHlwZS5uYW1lXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgaWYgKCFhdXRvR3JhcGhRTFNjaGVtYVR5cGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5ncmFwaFFMQXV0b1NjaGVtYS5fdHlwZU1hcFtcbiAgICAgICAgICAgICAgICBjdXN0b21HcmFwaFFMU2NoZW1hVHlwZS5uYW1lXG4gICAgICAgICAgICAgIF0gPSBjdXN0b21HcmFwaFFMU2NoZW1hVHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgLy8gSGFuZGxlIHNoYXJlZCB0eXBlc1xuICAgICAgICAvLyBXZSBwYXNzIHRocm91Z2ggZWFjaCB0eXBlIGFuZCBlbnN1cmUgdGhhdCBhbGwgc3ViIGZpZWxkIHR5cGVzIGFyZSByZXBsYWNlZFxuICAgICAgICAvLyB3ZSB1c2Ugc29ydCB0byBlbnN1cmUgc2NoZW1hIGNvbnNpc3RlbmN5IG92ZXIgcmVzdGFydHNcbiAgICAgICAgT2JqZWN0LmtleXMoY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGVNYXApXG4gICAgICAgICAgLnNvcnQoKVxuICAgICAgICAgIC5mb3JFYWNoKGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlS2V5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlID0gY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGVNYXBbY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGVLZXldO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGUgfHxcbiAgICAgICAgICAgICAgIWN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlLm5hbWUgfHxcbiAgICAgICAgICAgICAgY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGUubmFtZS5zdGFydHNXaXRoKCdfXycpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXV0b0dyYXBoUUxTY2hlbWFUeXBlID0gdGhpcy5ncmFwaFFMQXV0b1NjaGVtYS5fdHlwZU1hcFtcbiAgICAgICAgICAgICAgY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGUubmFtZVxuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgaWYgKGF1dG9HcmFwaFFMU2NoZW1hVHlwZSAmJiB0eXBlb2YgY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGUuZ2V0RmllbGRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlLl9maWVsZHMpXG4gICAgICAgICAgICAgICAgLnNvcnQoKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKGZpZWxkS2V5ID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGUuX2ZpZWxkc1tmaWVsZEtleV07XG4gICAgICAgICAgICAgICAgICBmaW5kQW5kUmVwbGFjZUxhc3RUeXBlKGZpZWxkLCAndHlwZScpO1xuICAgICAgICAgICAgICAgICAgYXV0b0dyYXBoUUxTY2hlbWFUeXBlLl9maWVsZHNbZmllbGQubmFtZV0gPSBmaWVsZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ncmFwaFFMU2NoZW1hID0gdGhpcy5ncmFwaFFMQXV0b1NjaGVtYTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuZ3JhcGhRTEN1c3RvbVR5cGVEZWZzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuZ3JhcGhRTFNjaGVtYSA9IGF3YWl0IHRoaXMuZ3JhcGhRTEN1c3RvbVR5cGVEZWZzKHtcbiAgICAgICAgICBkaXJlY3RpdmVzRGVmaW5pdGlvbnNTY2hlbWE6IHRoaXMuZ3JhcGhRTFNjaGVtYURpcmVjdGl2ZXNEZWZpbml0aW9ucyxcbiAgICAgICAgICBhdXRvU2NoZW1hOiB0aGlzLmdyYXBoUUxBdXRvU2NoZW1hLFxuICAgICAgICAgIGdyYXBoUUxTY2hlbWFEaXJlY3RpdmVzOiB0aGlzLmdyYXBoUUxTY2hlbWFEaXJlY3RpdmVzLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ3JhcGhRTFNjaGVtYSA9IG1lcmdlU2NoZW1hcyh7XG4gICAgICAgICAgc2NoZW1hczogW3RoaXMuZ3JhcGhRTEF1dG9TY2hlbWFdLFxuICAgICAgICAgIHR5cGVEZWZzOiBtZXJnZVR5cGVEZWZzKFtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhRTEN1c3RvbVR5cGVEZWZzLFxuICAgICAgICAgICAgdGhpcy5ncmFwaFFMU2NoZW1hRGlyZWN0aXZlc0RlZmluaXRpb25zLFxuICAgICAgICAgIF0pLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ncmFwaFFMU2NoZW1hID0gdGhpcy5ncmFwaFFMU2NoZW1hRGlyZWN0aXZlcyh0aGlzLmdyYXBoUUxTY2hlbWEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdyYXBoUUxTY2hlbWEgPSB0aGlzLmdyYXBoUUxBdXRvU2NoZW1hO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdyYXBoUUxTY2hlbWE7XG4gIH1cblxuICBfbG9nT25jZShzZXZlcml0eSwgbWVzc2FnZSkge1xuICAgIGlmICh0aGlzLmxvZ0NhY2hlW21lc3NhZ2VdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubG9nW3NldmVyaXR5XShtZXNzYWdlKTtcbiAgICB0aGlzLmxvZ0NhY2hlW21lc3NhZ2VdID0gdHJ1ZTtcbiAgfVxuXG4gIGFkZEdyYXBoUUxUeXBlKHR5cGUsIHRocm93RXJyb3IgPSBmYWxzZSwgaWdub3JlUmVzZXJ2ZWQgPSBmYWxzZSwgaWdub3JlQ29ubmVjdGlvbiA9IGZhbHNlKSB7XG4gICAgaWYgKFxuICAgICAgKCFpZ25vcmVSZXNlcnZlZCAmJiBSRVNFUlZFRF9HUkFQSFFMX1RZUEVfTkFNRVMuaW5jbHVkZXModHlwZS5uYW1lKSkgfHxcbiAgICAgIHRoaXMuZ3JhcGhRTFR5cGVzLmZpbmQoZXhpc3RpbmdUeXBlID0+IGV4aXN0aW5nVHlwZS5uYW1lID09PSB0eXBlLm5hbWUpIHx8XG4gICAgICAoIWlnbm9yZUNvbm5lY3Rpb24gJiYgdHlwZS5uYW1lLmVuZHNXaXRoKCdDb25uZWN0aW9uJykpXG4gICAgKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYFR5cGUgJHt0eXBlLm5hbWV9IGNvdWxkIG5vdCBiZSBhZGRlZCB0byB0aGUgYXV0byBzY2hlbWEgYmVjYXVzZSBpdCBjb2xsaWRlZCB3aXRoIGFuIGV4aXN0aW5nIHR5cGUuYDtcbiAgICAgIGlmICh0aHJvd0Vycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2xvZ09uY2UoJ3dhcm4nLCBtZXNzYWdlKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuZ3JhcGhRTFR5cGVzLnB1c2godHlwZSk7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBhZGRHcmFwaFFMUXVlcnkoZmllbGROYW1lLCBmaWVsZCwgdGhyb3dFcnJvciA9IGZhbHNlLCBpZ25vcmVSZXNlcnZlZCA9IGZhbHNlKSB7XG4gICAgaWYgKFxuICAgICAgKCFpZ25vcmVSZXNlcnZlZCAmJiBSRVNFUlZFRF9HUkFQSFFMX1FVRVJZX05BTUVTLmluY2x1ZGVzKGZpZWxkTmFtZSkpIHx8XG4gICAgICB0aGlzLmdyYXBoUUxRdWVyaWVzW2ZpZWxkTmFtZV1cbiAgICApIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgUXVlcnkgJHtmaWVsZE5hbWV9IGNvdWxkIG5vdCBiZSBhZGRlZCB0byB0aGUgYXV0byBzY2hlbWEgYmVjYXVzZSBpdCBjb2xsaWRlZCB3aXRoIGFuIGV4aXN0aW5nIGZpZWxkLmA7XG4gICAgICBpZiAodGhyb3dFcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9XG4gICAgICB0aGlzLl9sb2dPbmNlKCd3YXJuJywgbWVzc2FnZSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLmdyYXBoUUxRdWVyaWVzW2ZpZWxkTmFtZV0gPSBmaWVsZDtcbiAgICByZXR1cm4gZmllbGQ7XG4gIH1cblxuICBhZGRHcmFwaFFMTXV0YXRpb24oZmllbGROYW1lLCBmaWVsZCwgdGhyb3dFcnJvciA9IGZhbHNlLCBpZ25vcmVSZXNlcnZlZCA9IGZhbHNlKSB7XG4gICAgaWYgKFxuICAgICAgKCFpZ25vcmVSZXNlcnZlZCAmJiBSRVNFUlZFRF9HUkFQSFFMX01VVEFUSU9OX05BTUVTLmluY2x1ZGVzKGZpZWxkTmFtZSkpIHx8XG4gICAgICB0aGlzLmdyYXBoUUxNdXRhdGlvbnNbZmllbGROYW1lXVxuICAgICkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBNdXRhdGlvbiAke2ZpZWxkTmFtZX0gY291bGQgbm90IGJlIGFkZGVkIHRvIHRoZSBhdXRvIHNjaGVtYSBiZWNhdXNlIGl0IGNvbGxpZGVkIHdpdGggYW4gZXhpc3RpbmcgZmllbGQuYDtcbiAgICAgIGlmICh0aHJvd0Vycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2xvZ09uY2UoJ3dhcm4nLCBtZXNzYWdlKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuZ3JhcGhRTE11dGF0aW9uc1tmaWVsZE5hbWVdID0gZmllbGQ7XG4gICAgcmV0dXJuIGZpZWxkO1xuICB9XG5cbiAgaGFuZGxlRXJyb3IoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBQYXJzZS5FcnJvcikge1xuICAgICAgdGhpcy5sb2cuZXJyb3IoJ1BhcnNlIGVycm9yOiAnLCBlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKCdVbmNhdWdodCBpbnRlcm5hbCBzZXJ2ZXIgZXJyb3IuJywgZXJyb3IsIGVycm9yLnN0YWNrKTtcbiAgICB9XG4gICAgdGhyb3cgdG9HcmFwaFFMRXJyb3IoZXJyb3IpO1xuICB9XG5cbiAgYXN5bmMgX2luaXRpYWxpemVTY2hlbWFBbmRDb25maWcoKSB7XG4gICAgY29uc3QgW3NjaGVtYUNvbnRyb2xsZXIsIHBhcnNlR3JhcGhRTENvbmZpZ10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLmRhdGFiYXNlQ29udHJvbGxlci5sb2FkU2NoZW1hKCksXG4gICAgICB0aGlzLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIuZ2V0R3JhcGhRTENvbmZpZygpLFxuICAgIF0pO1xuXG4gICAgdGhpcy5zY2hlbWFDb250cm9sbGVyID0gc2NoZW1hQ29udHJvbGxlcjtcblxuICAgIHJldHVybiB7XG4gICAgICBwYXJzZUdyYXBoUUxDb25maWcsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFsbCBjbGFzc2VzIGZvdW5kIGJ5IHRoZSBgc2NoZW1hQ29udHJvbGxlcmBcbiAgICogbWludXMgdGhvc2UgZmlsdGVyZWQgb3V0IGJ5IHRoZSBhcHAncyBwYXJzZUdyYXBoUUxDb25maWcuXG4gICAqL1xuICBhc3luYyBfZ2V0Q2xhc3Nlc0ZvclNjaGVtYShwYXJzZUdyYXBoUUxDb25maWc6IFBhcnNlR3JhcGhRTENvbmZpZykge1xuICAgIGNvbnN0IHsgZW5hYmxlZEZvckNsYXNzZXMsIGRpc2FibGVkRm9yQ2xhc3NlcyB9ID0gcGFyc2VHcmFwaFFMQ29uZmlnO1xuICAgIGNvbnN0IGFsbENsYXNzZXMgPSBhd2FpdCB0aGlzLnNjaGVtYUNvbnRyb2xsZXIuZ2V0QWxsQ2xhc3NlcygpO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZW5hYmxlZEZvckNsYXNzZXMpIHx8IEFycmF5LmlzQXJyYXkoZGlzYWJsZWRGb3JDbGFzc2VzKSkge1xuICAgICAgbGV0IGluY2x1ZGVkQ2xhc3NlcyA9IGFsbENsYXNzZXM7XG4gICAgICBpZiAoZW5hYmxlZEZvckNsYXNzZXMpIHtcbiAgICAgICAgaW5jbHVkZWRDbGFzc2VzID0gYWxsQ2xhc3Nlcy5maWx0ZXIoY2xhenogPT4ge1xuICAgICAgICAgIHJldHVybiBlbmFibGVkRm9yQ2xhc3Nlcy5pbmNsdWRlcyhjbGF6ei5jbGFzc05hbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChkaXNhYmxlZEZvckNsYXNzZXMpIHtcbiAgICAgICAgLy8gQ2xhc3NlcyBpbmNsdWRlZCBpbiBgZW5hYmxlZEZvckNsYXNzZXNgIHRoYXRcbiAgICAgICAgLy8gYXJlIGFsc28gcHJlc2VudCBpbiBgZGlzYWJsZWRGb3JDbGFzc2VzYCB3aWxsXG4gICAgICAgIC8vIHN0aWxsIGJlIGZpbHRlcmVkIG91dFxuICAgICAgICBpbmNsdWRlZENsYXNzZXMgPSBpbmNsdWRlZENsYXNzZXMuZmlsdGVyKGNsYXp6ID0+IHtcbiAgICAgICAgICByZXR1cm4gIWRpc2FibGVkRm9yQ2xhc3Nlcy5pbmNsdWRlcyhjbGF6ei5jbGFzc05hbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc1VzZXJzQ2xhc3NEaXNhYmxlZCA9ICFpbmNsdWRlZENsYXNzZXMuc29tZShjbGF6eiA9PiB7XG4gICAgICAgIHJldHVybiBjbGF6ei5jbGFzc05hbWUgPT09ICdfVXNlcic7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGluY2x1ZGVkQ2xhc3NlcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFsbENsYXNzZXM7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBsaXN0IG9mIHR1cGxlc1xuICAgKiB0aGF0IHByb3ZpZGUgdGhlIHBhcnNlQ2xhc3MgYWxvbmcgd2l0aFxuICAgKiBpdHMgcGFyc2VDbGFzc0NvbmZpZyB3aGVyZSBwcm92aWRlZC5cbiAgICovXG4gIF9nZXRQYXJzZUNsYXNzZXNXaXRoQ29uZmlnKHBhcnNlQ2xhc3NlcywgcGFyc2VHcmFwaFFMQ29uZmlnOiBQYXJzZUdyYXBoUUxDb25maWcpIHtcbiAgICBjb25zdCB7IGNsYXNzQ29uZmlncyB9ID0gcGFyc2VHcmFwaFFMQ29uZmlnO1xuXG4gICAgLy8gTWFrZSBzdXJlcyB0aGF0IHRoZSBkZWZhdWx0IGNsYXNzZXMgYW5kIGNsYXNzZXMgdGhhdFxuICAgIC8vIHN0YXJ0cyB3aXRoIGNhcGl0YWxpemVkIGxldHRlciB3aWxsIGJlIGdlbmVyYXRlZCBmaXJzdC5cbiAgICBjb25zdCBzb3J0Q2xhc3NlcyA9IChhLCBiKSA9PiB7XG4gICAgICBhID0gYS5jbGFzc05hbWU7XG4gICAgICBiID0gYi5jbGFzc05hbWU7XG4gICAgICBpZiAoYVswXSA9PT0gJ18nKSB7XG4gICAgICAgIGlmIChiWzBdICE9PSAnXycpIHtcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChiWzBdID09PSAnXycpIHtcbiAgICAgICAgaWYgKGFbMF0gIT09ICdfJykge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYSA9PT0gYikge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gZWxzZSBpZiAoYSA8IGIpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBwYXJzZUNsYXNzZXMuc29ydChzb3J0Q2xhc3NlcykubWFwKHBhcnNlQ2xhc3MgPT4ge1xuICAgICAgbGV0IHBhcnNlQ2xhc3NDb25maWc7XG4gICAgICBpZiAoY2xhc3NDb25maWdzKSB7XG4gICAgICAgIHBhcnNlQ2xhc3NDb25maWcgPSBjbGFzc0NvbmZpZ3MuZmluZChjID0+IGMuY2xhc3NOYW1lID09PSBwYXJzZUNsYXNzLmNsYXNzTmFtZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW3BhcnNlQ2xhc3MsIHBhcnNlQ2xhc3NDb25maWddO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgX2dldEZ1bmN0aW9uTmFtZXMoKSB7XG4gICAgcmV0dXJuIGF3YWl0IGdldEZ1bmN0aW9uTmFtZXModGhpcy5hcHBJZCkuZmlsdGVyKGZ1bmN0aW9uTmFtZSA9PiB7XG4gICAgICBpZiAoL15bX2EtekEtWl1bX2EtekEtWjAtOV0qJC8udGVzdChmdW5jdGlvbk5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbG9nT25jZShcbiAgICAgICAgICAnd2FybicsXG4gICAgICAgICAgYEZ1bmN0aW9uICR7ZnVuY3Rpb25OYW1lfSBjb3VsZCBub3QgYmUgYWRkZWQgdG8gdGhlIGF1dG8gc2NoZW1hIGJlY2F1c2UgR3JhcGhRTCBuYW1lcyBtdXN0IG1hdGNoIC9eW19hLXpBLVpdW19hLXpBLVowLTldKiQvLmBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBmb3IgY2hhbmdlcyB0byB0aGUgcGFyc2VDbGFzc2VzXG4gICAqIG9iamVjdHMgKGkuZS4gZGF0YWJhc2Ugc2NoZW1hKSBvciB0b1xuICAgKiB0aGUgcGFyc2VHcmFwaFFMQ29uZmlnIG9iamVjdC4gSWYgbm9cbiAgICogY2hhbmdlcyBhcmUgZm91bmQsIHJldHVybiB0cnVlO1xuICAgKi9cbiAgX2hhc1NjaGVtYUlucHV0Q2hhbmdlZChwYXJhbXM6IHtcbiAgICBwYXJzZUNsYXNzZXM6IGFueSxcbiAgICBwYXJzZUdyYXBoUUxDb25maWc6ID9QYXJzZUdyYXBoUUxDb25maWcsXG4gICAgZnVuY3Rpb25OYW1lc1N0cmluZzogc3RyaW5nLFxuICB9KTogYm9vbGVhbiB7XG4gICAgY29uc3QgeyBwYXJzZUNsYXNzZXMsIHBhcnNlR3JhcGhRTENvbmZpZywgZnVuY3Rpb25OYW1lc1N0cmluZyB9ID0gcGFyYW1zO1xuXG4gICAgLy8gRmlyc3QgaW5pdFxuICAgIGlmICghdGhpcy5ncmFwaFFMU2NoZW1hKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBpc0RlZXBTdHJpY3RFcXVhbCh0aGlzLnBhcnNlR3JhcGhRTENvbmZpZywgcGFyc2VHcmFwaFFMQ29uZmlnKSAmJlxuICAgICAgdGhpcy5mdW5jdGlvbk5hbWVzU3RyaW5nID09PSBmdW5jdGlvbk5hbWVzU3RyaW5nICYmXG4gICAgICBpc0RlZXBTdHJpY3RFcXVhbCh0aGlzLnBhcnNlQ2xhc3NlcywgcGFyc2VDbGFzc2VzKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgeyBQYXJzZUdyYXBoUUxTY2hlbWEgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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
375
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2dyYXBocWwiLCJfc2NoZW1hIiwiX21lcmdlIiwiX3V0aWwiLCJfcmVxdWlyZWRQYXJhbWV0ZXIiLCJkZWZhdWx0R3JhcGhRTFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJwYXJzZUNsYXNzVHlwZXMiLCJwYXJzZUNsYXNzUXVlcmllcyIsInBhcnNlQ2xhc3NNdXRhdGlvbnMiLCJkZWZhdWx0R3JhcGhRTFF1ZXJpZXMiLCJkZWZhdWx0R3JhcGhRTE11dGF0aW9ucyIsIl9QYXJzZUdyYXBoUUxDb250cm9sbGVyIiwiX0RhdGFiYXNlQ29udHJvbGxlciIsIl9TY2hlbWFDYWNoZSIsIl9wYXJzZUdyYXBoUUxVdGlscyIsInNjaGVtYURpcmVjdGl2ZXMiLCJzY2hlbWFUeXBlcyIsIl90cmlnZ2VycyIsImRlZmF1bHRSZWxheVNjaGVtYSIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIm5vZGVJbnRlcm9wIiwiV2Vha01hcCIsImNhY2hlQmFiZWxJbnRlcm9wIiwiY2FjaGVOb2RlSW50ZXJvcCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiY2FjaGUiLCJoYXMiLCJnZXQiLCJuZXdPYmoiLCJoYXNQcm9wZXJ0eURlc2NyaXB0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlc2MiLCJzZXQiLCJSRVNFUlZFRF9HUkFQSFFMX1RZUEVfTkFNRVMiLCJSRVNFUlZFRF9HUkFQSFFMX1FVRVJZX05BTUVTIiwiUkVTRVJWRURfR1JBUEhRTF9NVVRBVElPTl9OQU1FUyIsIlBhcnNlR3JhcGhRTFNjaGVtYSIsImNvbnN0cnVjdG9yIiwicGFyYW1zIiwicGFyc2VHcmFwaFFMQ29udHJvbGxlciIsInJlcXVpcmVkUGFyYW1ldGVyIiwiZGF0YWJhc2VDb250cm9sbGVyIiwibG9nIiwiZ3JhcGhRTEN1c3RvbVR5cGVEZWZzIiwiYXBwSWQiLCJzY2hlbWFDYWNoZSIsIlNjaGVtYUNhY2hlIiwibG9nQ2FjaGUiLCJsb2FkIiwicGFyc2VHcmFwaFFMQ29uZmlnIiwiX2luaXRpYWxpemVTY2hlbWFBbmRDb25maWciLCJwYXJzZUNsYXNzZXNBcnJheSIsIl9nZXRDbGFzc2VzRm9yU2NoZW1hIiwiZnVuY3Rpb25OYW1lcyIsIl9nZXRGdW5jdGlvbk5hbWVzIiwiZnVuY3Rpb25OYW1lc1N0cmluZyIsImpvaW4iLCJwYXJzZUNsYXNzZXMiLCJyZWR1Y2UiLCJhY2MiLCJjbGF6eiIsImNsYXNzTmFtZSIsIl9oYXNTY2hlbWFJbnB1dENoYW5nZWQiLCJncmFwaFFMU2NoZW1hIiwidmlld2VyVHlwZSIsImdyYXBoUUxBdXRvU2NoZW1hIiwiZ3JhcGhRTFR5cGVzIiwiZ3JhcGhRTFF1ZXJpZXMiLCJncmFwaFFMTXV0YXRpb25zIiwiZ3JhcGhRTFN1YnNjcmlwdGlvbnMiLCJncmFwaFFMU2NoZW1hRGlyZWN0aXZlc0RlZmluaXRpb25zIiwiZ3JhcGhRTFNjaGVtYURpcmVjdGl2ZXMiLCJyZWxheU5vZGVJbnRlcmZhY2UiLCJfZ2V0UGFyc2VDbGFzc2VzV2l0aENvbmZpZyIsImZvckVhY2giLCJwYXJzZUNsYXNzIiwicGFyc2VDbGFzc0NvbmZpZyIsImtleXMiLCJmaWVsZHMiLCJmaWVsZE5hbWUiLCJzdGFydHNXaXRoIiwib3JkZXJlZEZpZWxkcyIsInNvcnQiLCJsb2FkQXJyYXlSZXN1bHQiLCJncmFwaFFMUXVlcnkiLCJ1bmRlZmluZWQiLCJsZW5ndGgiLCJHcmFwaFFMT2JqZWN0VHlwZSIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsImFkZEdyYXBoUUxUeXBlIiwiZ3JhcGhRTE11dGF0aW9uIiwiZ3JhcGhRTFN1YnNjcmlwdGlvbiIsIkdyYXBoUUxTY2hlbWEiLCJ0eXBlcyIsInF1ZXJ5IiwibXV0YXRpb24iLCJzdWJzY3JpcHRpb24iLCJnZXRUeXBlTWFwIiwiY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGVNYXAiLCJfdHlwZU1hcCIsImZpbmRBbmRSZXBsYWNlTGFzdFR5cGUiLCJwYXJlbnQiLCJvZlR5cGUiLCJjdXN0b21HcmFwaFFMU2NoZW1hVHlwZUtleSIsImN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlIiwiYXV0b0dyYXBoUUxTY2hlbWFUeXBlIiwiZ2V0RmllbGRzIiwiX2ZpZWxkcyIsImZpZWxkS2V5IiwiZmllbGQiLCJkaXJlY3RpdmVzRGVmaW5pdGlvbnNTY2hlbWEiLCJhdXRvU2NoZW1hIiwibWVyZ2VTY2hlbWFzIiwic2NoZW1hcyIsInR5cGVEZWZzIiwibWVyZ2VUeXBlRGVmcyIsIl9sb2dPbmNlIiwic2V2ZXJpdHkiLCJtZXNzYWdlIiwidHlwZSIsInRocm93RXJyb3IiLCJpZ25vcmVSZXNlcnZlZCIsImlnbm9yZUNvbm5lY3Rpb24iLCJpbmNsdWRlcyIsImZpbmQiLCJleGlzdGluZ1R5cGUiLCJlbmRzV2l0aCIsIkVycm9yIiwicHVzaCIsImFkZEdyYXBoUUxRdWVyeSIsImFkZEdyYXBoUUxNdXRhdGlvbiIsImhhbmRsZUVycm9yIiwiZXJyb3IiLCJQYXJzZSIsInN0YWNrIiwidG9HcmFwaFFMRXJyb3IiLCJzY2hlbWFDb250cm9sbGVyIiwiUHJvbWlzZSIsImFsbCIsImxvYWRTY2hlbWEiLCJnZXRHcmFwaFFMQ29uZmlnIiwiZW5hYmxlZEZvckNsYXNzZXMiLCJkaXNhYmxlZEZvckNsYXNzZXMiLCJhbGxDbGFzc2VzIiwiZ2V0QWxsQ2xhc3NlcyIsIkFycmF5IiwiaXNBcnJheSIsImluY2x1ZGVkQ2xhc3NlcyIsImZpbHRlciIsImlzVXNlcnNDbGFzc0Rpc2FibGVkIiwic29tZSIsImNsYXNzQ29uZmlncyIsInNvcnRDbGFzc2VzIiwiYSIsImIiLCJtYXAiLCJjIiwiZ2V0RnVuY3Rpb25OYW1lcyIsImZ1bmN0aW9uTmFtZSIsInRlc3QiLCJpc0RlZXBTdHJpY3RFcXVhbCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvR3JhcGhRTC9QYXJzZUdyYXBoUUxTY2hlbWEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IHsgR3JhcGhRTFNjaGVtYSwgR3JhcGhRTE9iamVjdFR5cGUsIERvY3VtZW50Tm9kZSwgR3JhcGhRTE5hbWVkVHlwZSB9IGZyb20gJ2dyYXBocWwnO1xuaW1wb3J0IHsgbWVyZ2VTY2hlbWFzIH0gZnJvbSAnQGdyYXBocWwtdG9vbHMvc2NoZW1hJztcbmltcG9ydCB7IG1lcmdlVHlwZURlZnMgfSBmcm9tICdAZ3JhcGhxbC10b29scy9tZXJnZSc7XG5pbXBvcnQgeyBpc0RlZXBTdHJpY3RFcXVhbCB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHJlcXVpcmVkUGFyYW1ldGVyIGZyb20gJy4uL3JlcXVpcmVkUGFyYW1ldGVyJztcbmltcG9ydCAqIGFzIGRlZmF1bHRHcmFwaFFMVHlwZXMgZnJvbSAnLi9sb2FkZXJzL2RlZmF1bHRHcmFwaFFMVHlwZXMnO1xuaW1wb3J0ICogYXMgcGFyc2VDbGFzc1R5cGVzIGZyb20gJy4vbG9hZGVycy9wYXJzZUNsYXNzVHlwZXMnO1xuaW1wb3J0ICogYXMgcGFyc2VDbGFzc1F1ZXJpZXMgZnJvbSAnLi9sb2FkZXJzL3BhcnNlQ2xhc3NRdWVyaWVzJztcbmltcG9ydCAqIGFzIHBhcnNlQ2xhc3NNdXRhdGlvbnMgZnJvbSAnLi9sb2FkZXJzL3BhcnNlQ2xhc3NNdXRhdGlvbnMnO1xuaW1wb3J0ICogYXMgZGVmYXVsdEdyYXBoUUxRdWVyaWVzIGZyb20gJy4vbG9hZGVycy9kZWZhdWx0R3JhcGhRTFF1ZXJpZXMnO1xuaW1wb3J0ICogYXMgZGVmYXVsdEdyYXBoUUxNdXRhdGlvbnMgZnJvbSAnLi9sb2FkZXJzL2RlZmF1bHRHcmFwaFFMTXV0YXRpb25zJztcbmltcG9ydCBQYXJzZUdyYXBoUUxDb250cm9sbGVyLCB7IFBhcnNlR3JhcGhRTENvbmZpZyB9IGZyb20gJy4uL0NvbnRyb2xsZXJzL1BhcnNlR3JhcGhRTENvbnRyb2xsZXInO1xuaW1wb3J0IERhdGFiYXNlQ29udHJvbGxlciBmcm9tICcuLi9Db250cm9sbGVycy9EYXRhYmFzZUNvbnRyb2xsZXInO1xuaW1wb3J0IFNjaGVtYUNhY2hlIGZyb20gJy4uL0FkYXB0ZXJzL0NhY2hlL1NjaGVtYUNhY2hlJztcbmltcG9ydCB7IHRvR3JhcGhRTEVycm9yIH0gZnJvbSAnLi9wYXJzZUdyYXBoUUxVdGlscyc7XG5pbXBvcnQgKiBhcyBzY2hlbWFEaXJlY3RpdmVzIGZyb20gJy4vbG9hZGVycy9zY2hlbWFEaXJlY3RpdmVzJztcbmltcG9ydCAqIGFzIHNjaGVtYVR5cGVzIGZyb20gJy4vbG9hZGVycy9zY2hlbWFUeXBlcyc7XG5pbXBvcnQgeyBnZXRGdW5jdGlvbk5hbWVzIH0gZnJvbSAnLi4vdHJpZ2dlcnMnO1xuaW1wb3J0ICogYXMgZGVmYXVsdFJlbGF5U2NoZW1hIGZyb20gJy4vbG9hZGVycy9kZWZhdWx0UmVsYXlTY2hlbWEnO1xuXG5jb25zdCBSRVNFUlZFRF9HUkFQSFFMX1RZUEVfTkFNRVMgPSBbXG4gICdTdHJpbmcnLFxuICAnQm9vbGVhbicsXG4gICdJbnQnLFxuICAnRmxvYXQnLFxuICAnSUQnLFxuICAnQXJyYXlSZXN1bHQnLFxuICAnUXVlcnknLFxuICAnTXV0YXRpb24nLFxuICAnU3Vic2NyaXB0aW9uJyxcbiAgJ0NyZWF0ZUZpbGVJbnB1dCcsXG4gICdDcmVhdGVGaWxlUGF5bG9hZCcsXG4gICdWaWV3ZXInLFxuICAnU2lnblVwSW5wdXQnLFxuICAnU2lnblVwUGF5bG9hZCcsXG4gICdMb2dJbklucHV0JyxcbiAgJ0xvZ0luUGF5bG9hZCcsXG4gICdMb2dPdXRJbnB1dCcsXG4gICdMb2dPdXRQYXlsb2FkJyxcbiAgJ0Nsb3VkQ29kZUZ1bmN0aW9uJyxcbiAgJ0NhbGxDbG91ZENvZGVJbnB1dCcsXG4gICdDYWxsQ2xvdWRDb2RlUGF5bG9hZCcsXG4gICdDcmVhdGVDbGFzc0lucHV0JyxcbiAgJ0NyZWF0ZUNsYXNzUGF5bG9hZCcsXG4gICdVcGRhdGVDbGFzc0lucHV0JyxcbiAgJ1VwZGF0ZUNsYXNzUGF5bG9hZCcsXG4gICdEZWxldGVDbGFzc0lucHV0JyxcbiAgJ0RlbGV0ZUNsYXNzUGF5bG9hZCcsXG4gICdQYWdlSW5mbycsXG5dO1xuY29uc3QgUkVTRVJWRURfR1JBUEhRTF9RVUVSWV9OQU1FUyA9IFsnaGVhbHRoJywgJ3ZpZXdlcicsICdjbGFzcycsICdjbGFzc2VzJ107XG5jb25zdCBSRVNFUlZFRF9HUkFQSFFMX01VVEFUSU9OX05BTUVTID0gW1xuICAnc2lnblVwJyxcbiAgJ2xvZ0luJyxcbiAgJ2xvZ091dCcsXG4gICdjcmVhdGVGaWxlJyxcbiAgJ2NhbGxDbG91ZENvZGUnLFxuICAnY3JlYXRlQ2xhc3MnLFxuICAndXBkYXRlQ2xhc3MnLFxuICAnZGVsZXRlQ2xhc3MnLFxuXTtcblxuY2xhc3MgUGFyc2VHcmFwaFFMU2NoZW1hIHtcbiAgZGF0YWJhc2VDb250cm9sbGVyOiBEYXRhYmFzZUNvbnRyb2xsZXI7XG4gIHBhcnNlR3JhcGhRTENvbnRyb2xsZXI6IFBhcnNlR3JhcGhRTENvbnRyb2xsZXI7XG4gIHBhcnNlR3JhcGhRTENvbmZpZzogUGFyc2VHcmFwaFFMQ29uZmlnO1xuICBsb2c6IGFueTtcbiAgYXBwSWQ6IHN0cmluZztcbiAgZ3JhcGhRTEN1c3RvbVR5cGVEZWZzOiA/KHN0cmluZyB8IEdyYXBoUUxTY2hlbWEgfCBEb2N1bWVudE5vZGUgfCBHcmFwaFFMTmFtZWRUeXBlW10pO1xuICBzY2hlbWFDYWNoZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhcmFtczoge1xuICAgICAgZGF0YWJhc2VDb250cm9sbGVyOiBEYXRhYmFzZUNvbnRyb2xsZXIsXG4gICAgICBwYXJzZUdyYXBoUUxDb250cm9sbGVyOiBQYXJzZUdyYXBoUUxDb250cm9sbGVyLFxuICAgICAgbG9nOiBhbnksXG4gICAgICBhcHBJZDogc3RyaW5nLFxuICAgICAgZ3JhcGhRTEN1c3RvbVR5cGVEZWZzOiA/KHN0cmluZyB8IEdyYXBoUUxTY2hlbWEgfCBEb2N1bWVudE5vZGUgfCBHcmFwaFFMTmFtZWRUeXBlW10pLFxuICAgIH0gPSB7fVxuICApIHtcbiAgICB0aGlzLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIgPVxuICAgICAgcGFyYW1zLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIgfHxcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGEgcGFyc2VHcmFwaFFMQ29udHJvbGxlciBpbnN0YW5jZSEnKTtcbiAgICB0aGlzLmRhdGFiYXNlQ29udHJvbGxlciA9XG4gICAgICBwYXJhbXMuZGF0YWJhc2VDb250cm9sbGVyIHx8XG4gICAgICByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIGRhdGFiYXNlQ29udHJvbGxlciBpbnN0YW5jZSEnKTtcbiAgICB0aGlzLmxvZyA9IHBhcmFtcy5sb2cgfHwgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYSBsb2cgaW5zdGFuY2UhJyk7XG4gICAgdGhpcy5ncmFwaFFMQ3VzdG9tVHlwZURlZnMgPSBwYXJhbXMuZ3JhcGhRTEN1c3RvbVR5cGVEZWZzO1xuICAgIHRoaXMuYXBwSWQgPSBwYXJhbXMuYXBwSWQgfHwgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgdGhlIGFwcElkIScpO1xuICAgIHRoaXMuc2NoZW1hQ2FjaGUgPSBTY2hlbWFDYWNoZTtcbiAgICB0aGlzLmxvZ0NhY2hlID0ge307XG4gIH1cblxuICBhc3luYyBsb2FkKCkge1xuICAgIGNvbnN0IHsgcGFyc2VHcmFwaFFMQ29uZmlnIH0gPSBhd2FpdCB0aGlzLl9pbml0aWFsaXplU2NoZW1hQW5kQ29uZmlnKCk7XG4gICAgY29uc3QgcGFyc2VDbGFzc2VzQXJyYXkgPSBhd2FpdCB0aGlzLl9nZXRDbGFzc2VzRm9yU2NoZW1hKHBhcnNlR3JhcGhRTENvbmZpZyk7XG4gICAgY29uc3QgZnVuY3Rpb25OYW1lcyA9IGF3YWl0IHRoaXMuX2dldEZ1bmN0aW9uTmFtZXMoKTtcbiAgICBjb25zdCBmdW5jdGlvbk5hbWVzU3RyaW5nID0gZnVuY3Rpb25OYW1lcy5qb2luKCk7XG5cbiAgICBjb25zdCBwYXJzZUNsYXNzZXMgPSBwYXJzZUNsYXNzZXNBcnJheS5yZWR1Y2UoKGFjYywgY2xhenopID0+IHtcbiAgICAgIGFjY1tjbGF6ei5jbGFzc05hbWVdID0gY2xheno7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5faGFzU2NoZW1hSW5wdXRDaGFuZ2VkKHtcbiAgICAgICAgcGFyc2VDbGFzc2VzLFxuICAgICAgICBwYXJzZUdyYXBoUUxDb25maWcsXG4gICAgICAgIGZ1bmN0aW9uTmFtZXNTdHJpbmcsXG4gICAgICB9KVxuICAgICkge1xuICAgICAgcmV0dXJuIHRoaXMuZ3JhcGhRTFNjaGVtYTtcbiAgICB9XG5cbiAgICB0aGlzLnBhcnNlQ2xhc3NlcyA9IHBhcnNlQ2xhc3NlcztcbiAgICB0aGlzLnBhcnNlR3JhcGhRTENvbmZpZyA9IHBhcnNlR3JhcGhRTENvbmZpZztcbiAgICB0aGlzLmZ1bmN0aW9uTmFtZXMgPSBmdW5jdGlvbk5hbWVzO1xuICAgIHRoaXMuZnVuY3Rpb25OYW1lc1N0cmluZyA9IGZ1bmN0aW9uTmFtZXNTdHJpbmc7XG4gICAgdGhpcy5wYXJzZUNsYXNzVHlwZXMgPSB7fTtcbiAgICB0aGlzLnZpZXdlclR5cGUgPSBudWxsO1xuICAgIHRoaXMuZ3JhcGhRTEF1dG9TY2hlbWEgPSBudWxsO1xuICAgIHRoaXMuZ3JhcGhRTFNjaGVtYSA9IG51bGw7XG4gICAgdGhpcy5ncmFwaFFMVHlwZXMgPSBbXTtcbiAgICB0aGlzLmdyYXBoUUxRdWVyaWVzID0ge307XG4gICAgdGhpcy5ncmFwaFFMTXV0YXRpb25zID0ge307XG4gICAgdGhpcy5ncmFwaFFMU3Vic2NyaXB0aW9ucyA9IHt9O1xuICAgIHRoaXMuZ3JhcGhRTFNjaGVtYURpcmVjdGl2ZXNEZWZpbml0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5ncmFwaFFMU2NoZW1hRGlyZWN0aXZlcyA9IHt9O1xuICAgIHRoaXMucmVsYXlOb2RlSW50ZXJmYWNlID0gbnVsbDtcblxuICAgIGRlZmF1bHRHcmFwaFFMVHlwZXMubG9hZCh0aGlzKTtcbiAgICBkZWZhdWx0UmVsYXlTY2hlbWEubG9hZCh0aGlzKTtcbiAgICBzY2hlbWFUeXBlcy5sb2FkKHRoaXMpO1xuXG4gICAgdGhpcy5fZ2V0UGFyc2VDbGFzc2VzV2l0aENvbmZpZyhwYXJzZUNsYXNzZXNBcnJheSwgcGFyc2VHcmFwaFFMQ29uZmlnKS5mb3JFYWNoKFxuICAgICAgKFtwYXJzZUNsYXNzLCBwYXJzZUNsYXNzQ29uZmlnXSkgPT4ge1xuICAgICAgICAvLyBTb21lIHRpbWVzIHNjaGVtYSByZXR1cm4gdGhlIF9hdXRoX2RhdGFfIGZpZWxkXG4gICAgICAgIC8vIGl0IHdpbGwgbGVhZCB0byB1bnN0YWJsZSBncmFwaHFsIGdlbmVyYXRpb24gb3JkZXJcbiAgICAgICAgaWYgKHBhcnNlQ2xhc3MuY2xhc3NOYW1lID09PSAnX1VzZXInKSB7XG4gICAgICAgICAgT2JqZWN0LmtleXMocGFyc2VDbGFzcy5maWVsZHMpLmZvckVhY2goZmllbGROYW1lID0+IHtcbiAgICAgICAgICAgIGlmIChmaWVsZE5hbWUuc3RhcnRzV2l0aCgnX2F1dGhfZGF0YV8nKSkge1xuICAgICAgICAgICAgICBkZWxldGUgcGFyc2VDbGFzcy5maWVsZHNbZmllbGROYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpZWxkcyBvcmRlciBpbnNpZGUgdGhlIHNjaGVtYSBzZWVtcyB0byBub3QgYmUgY29uc2lzdGVudCBhY3Jvc3NcbiAgICAgICAgLy8gcmVzdGFydCBzbyB3ZSBuZWVkIHRvIGVuc3VyZSBhbiBhbHBoYWJldGljYWwgb3JkZXJcbiAgICAgICAgLy8gYWxzbyBpdCdzIGJldHRlciBmb3IgdGhlIHBsYXlncm91bmQgZG9jdW1lbnRhdGlvblxuICAgICAgICBjb25zdCBvcmRlcmVkRmllbGRzID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKHBhcnNlQ2xhc3MuZmllbGRzKVxuICAgICAgICAgIC5zb3J0KClcbiAgICAgICAgICAuZm9yRWFjaChmaWVsZE5hbWUgPT4ge1xuICAgICAgICAgICAgb3JkZXJlZEZpZWxkc1tmaWVsZE5hbWVdID0gcGFyc2VDbGFzcy5maWVsZHNbZmllbGROYW1lXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgcGFyc2VDbGFzcy5maWVsZHMgPSBvcmRlcmVkRmllbGRzO1xuICAgICAgICBwYXJzZUNsYXNzVHlwZXMubG9hZCh0aGlzLCBwYXJzZUNsYXNzLCBwYXJzZUNsYXNzQ29uZmlnKTtcbiAgICAgICAgcGFyc2VDbGFzc1F1ZXJpZXMubG9hZCh0aGlzLCBwYXJzZUNsYXNzLCBwYXJzZUNsYXNzQ29uZmlnKTtcbiAgICAgICAgcGFyc2VDbGFzc011dGF0aW9ucy5sb2FkKHRoaXMsIHBhcnNlQ2xhc3MsIHBhcnNlQ2xhc3NDb25maWcpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBkZWZhdWx0R3JhcGhRTFR5cGVzLmxvYWRBcnJheVJlc3VsdCh0aGlzLCBwYXJzZUNsYXNzZXNBcnJheSk7XG4gICAgZGVmYXVsdEdyYXBoUUxRdWVyaWVzLmxvYWQodGhpcyk7XG4gICAgZGVmYXVsdEdyYXBoUUxNdXRhdGlvbnMubG9hZCh0aGlzKTtcblxuICAgIGxldCBncmFwaFFMUXVlcnkgPSB1bmRlZmluZWQ7XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZ3JhcGhRTFF1ZXJpZXMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGdyYXBoUUxRdWVyeSA9IG5ldyBHcmFwaFFMT2JqZWN0VHlwZSh7XG4gICAgICAgIG5hbWU6ICdRdWVyeScsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUXVlcnkgaXMgdGhlIHRvcCBsZXZlbCB0eXBlIGZvciBxdWVyaWVzLicsXG4gICAgICAgIGZpZWxkczogdGhpcy5ncmFwaFFMUXVlcmllcyxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hZGRHcmFwaFFMVHlwZShncmFwaFFMUXVlcnksIHRydWUsIHRydWUpO1xuICAgIH1cblxuICAgIGxldCBncmFwaFFMTXV0YXRpb24gPSB1bmRlZmluZWQ7XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZ3JhcGhRTE11dGF0aW9ucykubGVuZ3RoID4gMCkge1xuICAgICAgZ3JhcGhRTE11dGF0aW9uID0gbmV3IEdyYXBoUUxPYmplY3RUeXBlKHtcbiAgICAgICAgbmFtZTogJ011dGF0aW9uJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdNdXRhdGlvbiBpcyB0aGUgdG9wIGxldmVsIHR5cGUgZm9yIG11dGF0aW9ucy4nLFxuICAgICAgICBmaWVsZHM6IHRoaXMuZ3JhcGhRTE11dGF0aW9ucyxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hZGRHcmFwaFFMVHlwZShncmFwaFFMTXV0YXRpb24sIHRydWUsIHRydWUpO1xuICAgIH1cblxuICAgIGxldCBncmFwaFFMU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmdyYXBoUUxTdWJzY3JpcHRpb25zKS5sZW5ndGggPiAwKSB7XG4gICAgICBncmFwaFFMU3Vic2NyaXB0aW9uID0gbmV3IEdyYXBoUUxPYmplY3RUeXBlKHtcbiAgICAgICAgbmFtZTogJ1N1YnNjcmlwdGlvbicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnU3Vic2NyaXB0aW9uIGlzIHRoZSB0b3AgbGV2ZWwgdHlwZSBmb3Igc3Vic2NyaXB0aW9ucy4nLFxuICAgICAgICBmaWVsZHM6IHRoaXMuZ3JhcGhRTFN1YnNjcmlwdGlvbnMsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYWRkR3JhcGhRTFR5cGUoZ3JhcGhRTFN1YnNjcmlwdGlvbiwgdHJ1ZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5ncmFwaFFMQXV0b1NjaGVtYSA9IG5ldyBHcmFwaFFMU2NoZW1hKHtcbiAgICAgIHR5cGVzOiB0aGlzLmdyYXBoUUxUeXBlcyxcbiAgICAgIHF1ZXJ5OiBncmFwaFFMUXVlcnksXG4gICAgICBtdXRhdGlvbjogZ3JhcGhRTE11dGF0aW9uLFxuICAgICAgc3Vic2NyaXB0aW9uOiBncmFwaFFMU3Vic2NyaXB0aW9uLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuZ3JhcGhRTEN1c3RvbVR5cGVEZWZzKSB7XG4gICAgICBzY2hlbWFEaXJlY3RpdmVzLmxvYWQodGhpcyk7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuZ3JhcGhRTEN1c3RvbVR5cGVEZWZzLmdldFR5cGVNYXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gSW4gZm9sbG93aW5nIGNvZGUgd2UgdXNlIHVuZGVyc2NvcmUgYXR0ciB0byBrZWVwIHRoZSBkaXJlY3QgdmFyaWFibGUgcmVmZXJlbmNlXG4gICAgICAgIGNvbnN0IGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlTWFwID0gdGhpcy5ncmFwaFFMQ3VzdG9tVHlwZURlZnMuX3R5cGVNYXA7XG4gICAgICAgIGNvbnN0IGZpbmRBbmRSZXBsYWNlTGFzdFR5cGUgPSAocGFyZW50LCBrZXkpID0+IHtcbiAgICAgICAgICBpZiAocGFyZW50W2tleV0ubmFtZSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLmdyYXBoUUxBdXRvU2NoZW1hLl90eXBlTWFwW3BhcmVudFtrZXldLm5hbWVdICYmXG4gICAgICAgICAgICAgIHRoaXMuZ3JhcGhRTEF1dG9TY2hlbWEuX3R5cGVNYXBbcGFyZW50W2tleV0ubmFtZV0gIT09IHBhcmVudFtrZXldXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgLy8gVG8gYXZvaWQgdW5yZXNvbHZlZCBmaWVsZCBvbiBvdmVybG9hZGVkIHNjaGVtYVxuICAgICAgICAgICAgICAvLyByZXBsYWNlIHRoZSBmaW5hbCB0eXBlIHdpdGggdGhlIGF1dG8gc2NoZW1hIG9uZVxuICAgICAgICAgICAgICBwYXJlbnRba2V5XSA9IHRoaXMuZ3JhcGhRTEF1dG9TY2hlbWEuX3R5cGVNYXBbcGFyZW50W2tleV0ubmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnRba2V5XS5vZlR5cGUpIHtcbiAgICAgICAgICAgICAgZmluZEFuZFJlcGxhY2VMYXN0VHlwZShwYXJlbnRba2V5XSwgJ29mVHlwZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLy8gQWRkIG5vbiBzaGFyZWQgdHlwZXMgZnJvbSBjdXN0b20gc2NoZW1hIHRvIGF1dG8gc2NoZW1hXG4gICAgICAgIC8vIG5vdGU6IHNvbWUgbm9uIHNoYXJlZCB0eXBlcyBjYW4gdXNlIHNvbWUgc2hhcmVkIHR5cGVzXG4gICAgICAgIC8vIHNvIHRoaXMgY29kZSBuZWVkIHRvIGJlIHJhbiBiZWZvcmUgdGhlIHNoYXJlZCB0eXBlcyBhZGRpdGlvblxuICAgICAgICAvLyB3ZSB1c2Ugc29ydCB0byBlbnN1cmUgc2NoZW1hIGNvbnNpc3RlbmN5IG92ZXIgcmVzdGFydHNcbiAgICAgICAgT2JqZWN0LmtleXMoY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGVNYXApXG4gICAgICAgICAgLnNvcnQoKVxuICAgICAgICAgIC5mb3JFYWNoKGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlS2V5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlID0gY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGVNYXBbY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGVLZXldO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGUgfHxcbiAgICAgICAgICAgICAgIWN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlLm5hbWUgfHxcbiAgICAgICAgICAgICAgY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGUubmFtZS5zdGFydHNXaXRoKCdfXycpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXV0b0dyYXBoUUxTY2hlbWFUeXBlID0gdGhpcy5ncmFwaFFMQXV0b1NjaGVtYS5fdHlwZU1hcFtcbiAgICAgICAgICAgICAgY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGUubmFtZVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmICghYXV0b0dyYXBoUUxTY2hlbWFUeXBlKSB7XG4gICAgICAgICAgICAgIHRoaXMuZ3JhcGhRTEF1dG9TY2hlbWEuX3R5cGVNYXBbXG4gICAgICAgICAgICAgICAgY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGUubmFtZVxuICAgICAgICAgICAgICBdID0gY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIC8vIEhhbmRsZSBzaGFyZWQgdHlwZXNcbiAgICAgICAgLy8gV2UgcGFzcyB0aHJvdWdoIGVhY2ggdHlwZSBhbmQgZW5zdXJlIHRoYXQgYWxsIHN1YiBmaWVsZCB0eXBlcyBhcmUgcmVwbGFjZWRcbiAgICAgICAgLy8gd2UgdXNlIHNvcnQgdG8gZW5zdXJlIHNjaGVtYSBjb25zaXN0ZW5jeSBvdmVyIHJlc3RhcnRzXG4gICAgICAgIE9iamVjdC5rZXlzKGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlTWFwKVxuICAgICAgICAgIC5zb3J0KClcbiAgICAgICAgICAuZm9yRWFjaChjdXN0b21HcmFwaFFMU2NoZW1hVHlwZUtleSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXN0b21HcmFwaFFMU2NoZW1hVHlwZSA9IGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlTWFwW2N1c3RvbUdyYXBoUUxTY2hlbWFUeXBlS2V5XTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgIWN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlIHx8XG4gICAgICAgICAgICAgICFjdXN0b21HcmFwaFFMU2NoZW1hVHlwZS5uYW1lIHx8XG4gICAgICAgICAgICAgIGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlLm5hbWUuc3RhcnRzV2l0aCgnX18nKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGF1dG9HcmFwaFFMU2NoZW1hVHlwZSA9IHRoaXMuZ3JhcGhRTEF1dG9TY2hlbWEuX3R5cGVNYXBbXG4gICAgICAgICAgICAgIGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlLm5hbWVcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIGlmIChhdXRvR3JhcGhRTFNjaGVtYVR5cGUgJiYgdHlwZW9mIGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlLmdldEZpZWxkcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBPYmplY3Qua2V5cyhjdXN0b21HcmFwaFFMU2NoZW1hVHlwZS5fZmllbGRzKVxuICAgICAgICAgICAgICAgIC5zb3J0KClcbiAgICAgICAgICAgICAgICAuZm9yRWFjaChmaWVsZEtleSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlLl9maWVsZHNbZmllbGRLZXldO1xuICAgICAgICAgICAgICAgICAgZmluZEFuZFJlcGxhY2VMYXN0VHlwZShmaWVsZCwgJ3R5cGUnKTtcbiAgICAgICAgICAgICAgICAgIGF1dG9HcmFwaFFMU2NoZW1hVHlwZS5fZmllbGRzW2ZpZWxkLm5hbWVdID0gZmllbGQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZ3JhcGhRTFNjaGVtYSA9IHRoaXMuZ3JhcGhRTEF1dG9TY2hlbWE7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmdyYXBoUUxDdXN0b21UeXBlRGVmcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLmdyYXBoUUxTY2hlbWEgPSBhd2FpdCB0aGlzLmdyYXBoUUxDdXN0b21UeXBlRGVmcyh7XG4gICAgICAgICAgZGlyZWN0aXZlc0RlZmluaXRpb25zU2NoZW1hOiB0aGlzLmdyYXBoUUxTY2hlbWFEaXJlY3RpdmVzRGVmaW5pdGlvbnMsXG4gICAgICAgICAgYXV0b1NjaGVtYTogdGhpcy5ncmFwaFFMQXV0b1NjaGVtYSxcbiAgICAgICAgICBncmFwaFFMU2NoZW1hRGlyZWN0aXZlczogdGhpcy5ncmFwaFFMU2NoZW1hRGlyZWN0aXZlcyxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmdyYXBoUUxTY2hlbWEgPSBtZXJnZVNjaGVtYXMoe1xuICAgICAgICAgIHNjaGVtYXM6IFt0aGlzLmdyYXBoUUxBdXRvU2NoZW1hXSxcbiAgICAgICAgICB0eXBlRGVmczogbWVyZ2VUeXBlRGVmcyhbXG4gICAgICAgICAgICB0aGlzLmdyYXBoUUxDdXN0b21UeXBlRGVmcyxcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhRTFNjaGVtYURpcmVjdGl2ZXNEZWZpbml0aW9ucyxcbiAgICAgICAgICBdKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZ3JhcGhRTFNjaGVtYSA9IHRoaXMuZ3JhcGhRTFNjaGVtYURpcmVjdGl2ZXModGhpcy5ncmFwaFFMU2NoZW1hKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ncmFwaFFMU2NoZW1hID0gdGhpcy5ncmFwaFFMQXV0b1NjaGVtYTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5ncmFwaFFMU2NoZW1hO1xuICB9XG5cbiAgX2xvZ09uY2Uoc2V2ZXJpdHksIG1lc3NhZ2UpIHtcbiAgICBpZiAodGhpcy5sb2dDYWNoZVttZXNzYWdlXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvZ1tzZXZlcml0eV0obWVzc2FnZSk7XG4gICAgdGhpcy5sb2dDYWNoZVttZXNzYWdlXSA9IHRydWU7XG4gIH1cblxuICBhZGRHcmFwaFFMVHlwZSh0eXBlLCB0aHJvd0Vycm9yID0gZmFsc2UsIGlnbm9yZVJlc2VydmVkID0gZmFsc2UsIGlnbm9yZUNvbm5lY3Rpb24gPSBmYWxzZSkge1xuICAgIGlmIChcbiAgICAgICghaWdub3JlUmVzZXJ2ZWQgJiYgUkVTRVJWRURfR1JBUEhRTF9UWVBFX05BTUVTLmluY2x1ZGVzKHR5cGUubmFtZSkpIHx8XG4gICAgICB0aGlzLmdyYXBoUUxUeXBlcy5maW5kKGV4aXN0aW5nVHlwZSA9PiBleGlzdGluZ1R5cGUubmFtZSA9PT0gdHlwZS5uYW1lKSB8fFxuICAgICAgKCFpZ25vcmVDb25uZWN0aW9uICYmIHR5cGUubmFtZS5lbmRzV2l0aCgnQ29ubmVjdGlvbicpKVxuICAgICkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBUeXBlICR7dHlwZS5uYW1lfSBjb3VsZCBub3QgYmUgYWRkZWQgdG8gdGhlIGF1dG8gc2NoZW1hIGJlY2F1c2UgaXQgY29sbGlkZWQgd2l0aCBhbiBleGlzdGluZyB0eXBlLmA7XG4gICAgICBpZiAodGhyb3dFcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9XG4gICAgICB0aGlzLl9sb2dPbmNlKCd3YXJuJywgbWVzc2FnZSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLmdyYXBoUUxUeXBlcy5wdXNoKHR5cGUpO1xuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgYWRkR3JhcGhRTFF1ZXJ5KGZpZWxkTmFtZSwgZmllbGQsIHRocm93RXJyb3IgPSBmYWxzZSwgaWdub3JlUmVzZXJ2ZWQgPSBmYWxzZSkge1xuICAgIGlmIChcbiAgICAgICghaWdub3JlUmVzZXJ2ZWQgJiYgUkVTRVJWRURfR1JBUEhRTF9RVUVSWV9OQU1FUy5pbmNsdWRlcyhmaWVsZE5hbWUpKSB8fFxuICAgICAgdGhpcy5ncmFwaFFMUXVlcmllc1tmaWVsZE5hbWVdXG4gICAgKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYFF1ZXJ5ICR7ZmllbGROYW1lfSBjb3VsZCBub3QgYmUgYWRkZWQgdG8gdGhlIGF1dG8gc2NoZW1hIGJlY2F1c2UgaXQgY29sbGlkZWQgd2l0aCBhbiBleGlzdGluZyBmaWVsZC5gO1xuICAgICAgaWYgKHRocm93RXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgdGhpcy5fbG9nT25jZSgnd2FybicsIG1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5ncmFwaFFMUXVlcmllc1tmaWVsZE5hbWVdID0gZmllbGQ7XG4gICAgcmV0dXJuIGZpZWxkO1xuICB9XG5cbiAgYWRkR3JhcGhRTE11dGF0aW9uKGZpZWxkTmFtZSwgZmllbGQsIHRocm93RXJyb3IgPSBmYWxzZSwgaWdub3JlUmVzZXJ2ZWQgPSBmYWxzZSkge1xuICAgIGlmIChcbiAgICAgICghaWdub3JlUmVzZXJ2ZWQgJiYgUkVTRVJWRURfR1JBUEhRTF9NVVRBVElPTl9OQU1FUy5pbmNsdWRlcyhmaWVsZE5hbWUpKSB8fFxuICAgICAgdGhpcy5ncmFwaFFMTXV0YXRpb25zW2ZpZWxkTmFtZV1cbiAgICApIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgTXV0YXRpb24gJHtmaWVsZE5hbWV9IGNvdWxkIG5vdCBiZSBhZGRlZCB0byB0aGUgYXV0byBzY2hlbWEgYmVjYXVzZSBpdCBjb2xsaWRlZCB3aXRoIGFuIGV4aXN0aW5nIGZpZWxkLmA7XG4gICAgICBpZiAodGhyb3dFcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9XG4gICAgICB0aGlzLl9sb2dPbmNlKCd3YXJuJywgbWVzc2FnZSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLmdyYXBoUUxNdXRhdGlvbnNbZmllbGROYW1lXSA9IGZpZWxkO1xuICAgIHJldHVybiBmaWVsZDtcbiAgfVxuXG4gIGhhbmRsZUVycm9yKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgUGFyc2UuRXJyb3IpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKCdQYXJzZSBlcnJvcjogJywgZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy5lcnJvcignVW5jYXVnaHQgaW50ZXJuYWwgc2VydmVyIGVycm9yLicsIGVycm9yLCBlcnJvci5zdGFjayk7XG4gICAgfVxuICAgIHRocm93IHRvR3JhcGhRTEVycm9yKGVycm9yKTtcbiAgfVxuXG4gIGFzeW5jIF9pbml0aWFsaXplU2NoZW1hQW5kQ29uZmlnKCkge1xuICAgIGNvbnN0IFtzY2hlbWFDb250cm9sbGVyLCBwYXJzZUdyYXBoUUxDb25maWddID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5kYXRhYmFzZUNvbnRyb2xsZXIubG9hZFNjaGVtYSgpLFxuICAgICAgdGhpcy5wYXJzZUdyYXBoUUxDb250cm9sbGVyLmdldEdyYXBoUUxDb25maWcoKSxcbiAgICBdKTtcblxuICAgIHRoaXMuc2NoZW1hQ29udHJvbGxlciA9IHNjaGVtYUNvbnRyb2xsZXI7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2VHcmFwaFFMQ29uZmlnLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbGwgY2xhc3NlcyBmb3VuZCBieSB0aGUgYHNjaGVtYUNvbnRyb2xsZXJgXG4gICAqIG1pbnVzIHRob3NlIGZpbHRlcmVkIG91dCBieSB0aGUgYXBwJ3MgcGFyc2VHcmFwaFFMQ29uZmlnLlxuICAgKi9cbiAgYXN5bmMgX2dldENsYXNzZXNGb3JTY2hlbWEocGFyc2VHcmFwaFFMQ29uZmlnOiBQYXJzZUdyYXBoUUxDb25maWcpIHtcbiAgICBjb25zdCB7IGVuYWJsZWRGb3JDbGFzc2VzLCBkaXNhYmxlZEZvckNsYXNzZXMgfSA9IHBhcnNlR3JhcGhRTENvbmZpZztcbiAgICBjb25zdCBhbGxDbGFzc2VzID0gYXdhaXQgdGhpcy5zY2hlbWFDb250cm9sbGVyLmdldEFsbENsYXNzZXMoKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGVuYWJsZWRGb3JDbGFzc2VzKSB8fCBBcnJheS5pc0FycmF5KGRpc2FibGVkRm9yQ2xhc3NlcykpIHtcbiAgICAgIGxldCBpbmNsdWRlZENsYXNzZXMgPSBhbGxDbGFzc2VzO1xuICAgICAgaWYgKGVuYWJsZWRGb3JDbGFzc2VzKSB7XG4gICAgICAgIGluY2x1ZGVkQ2xhc3NlcyA9IGFsbENsYXNzZXMuZmlsdGVyKGNsYXp6ID0+IHtcbiAgICAgICAgICByZXR1cm4gZW5hYmxlZEZvckNsYXNzZXMuaW5jbHVkZXMoY2xhenouY2xhc3NOYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoZGlzYWJsZWRGb3JDbGFzc2VzKSB7XG4gICAgICAgIC8vIENsYXNzZXMgaW5jbHVkZWQgaW4gYGVuYWJsZWRGb3JDbGFzc2VzYCB0aGF0XG4gICAgICAgIC8vIGFyZSBhbHNvIHByZXNlbnQgaW4gYGRpc2FibGVkRm9yQ2xhc3Nlc2Agd2lsbFxuICAgICAgICAvLyBzdGlsbCBiZSBmaWx0ZXJlZCBvdXRcbiAgICAgICAgaW5jbHVkZWRDbGFzc2VzID0gaW5jbHVkZWRDbGFzc2VzLmZpbHRlcihjbGF6eiA9PiB7XG4gICAgICAgICAgcmV0dXJuICFkaXNhYmxlZEZvckNsYXNzZXMuaW5jbHVkZXMoY2xhenouY2xhc3NOYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaXNVc2Vyc0NsYXNzRGlzYWJsZWQgPSAhaW5jbHVkZWRDbGFzc2VzLnNvbWUoY2xhenogPT4ge1xuICAgICAgICByZXR1cm4gY2xhenouY2xhc3NOYW1lID09PSAnX1VzZXInO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBpbmNsdWRlZENsYXNzZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBhbGxDbGFzc2VzO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbGlzdCBvZiB0dXBsZXNcbiAgICogdGhhdCBwcm92aWRlIHRoZSBwYXJzZUNsYXNzIGFsb25nIHdpdGhcbiAgICogaXRzIHBhcnNlQ2xhc3NDb25maWcgd2hlcmUgcHJvdmlkZWQuXG4gICAqL1xuICBfZ2V0UGFyc2VDbGFzc2VzV2l0aENvbmZpZyhwYXJzZUNsYXNzZXMsIHBhcnNlR3JhcGhRTENvbmZpZzogUGFyc2VHcmFwaFFMQ29uZmlnKSB7XG4gICAgY29uc3QgeyBjbGFzc0NvbmZpZ3MgfSA9IHBhcnNlR3JhcGhRTENvbmZpZztcblxuICAgIC8vIE1ha2Ugc3VyZXMgdGhhdCB0aGUgZGVmYXVsdCBjbGFzc2VzIGFuZCBjbGFzc2VzIHRoYXRcbiAgICAvLyBzdGFydHMgd2l0aCBjYXBpdGFsaXplZCBsZXR0ZXIgd2lsbCBiZSBnZW5lcmF0ZWQgZmlyc3QuXG4gICAgY29uc3Qgc29ydENsYXNzZXMgPSAoYSwgYikgPT4ge1xuICAgICAgYSA9IGEuY2xhc3NOYW1lO1xuICAgICAgYiA9IGIuY2xhc3NOYW1lO1xuICAgICAgaWYgKGFbMF0gPT09ICdfJykge1xuICAgICAgICBpZiAoYlswXSAhPT0gJ18nKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYlswXSA9PT0gJ18nKSB7XG4gICAgICAgIGlmIChhWzBdICE9PSAnXycpIHtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGEgPT09IGIpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9IGVsc2UgaWYgKGEgPCBiKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gcGFyc2VDbGFzc2VzLnNvcnQoc29ydENsYXNzZXMpLm1hcChwYXJzZUNsYXNzID0+IHtcbiAgICAgIGxldCBwYXJzZUNsYXNzQ29uZmlnO1xuICAgICAgaWYgKGNsYXNzQ29uZmlncykge1xuICAgICAgICBwYXJzZUNsYXNzQ29uZmlnID0gY2xhc3NDb25maWdzLmZpbmQoYyA9PiBjLmNsYXNzTmFtZSA9PT0gcGFyc2VDbGFzcy5jbGFzc05hbWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtwYXJzZUNsYXNzLCBwYXJzZUNsYXNzQ29uZmlnXTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIF9nZXRGdW5jdGlvbk5hbWVzKCkge1xuICAgIHJldHVybiBhd2FpdCBnZXRGdW5jdGlvbk5hbWVzKHRoaXMuYXBwSWQpLmZpbHRlcihmdW5jdGlvbk5hbWUgPT4ge1xuICAgICAgaWYgKC9eW19hLXpBLVpdW19hLXpBLVowLTldKiQvLnRlc3QoZnVuY3Rpb25OYW1lKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2xvZ09uY2UoXG4gICAgICAgICAgJ3dhcm4nLFxuICAgICAgICAgIGBGdW5jdGlvbiAke2Z1bmN0aW9uTmFtZX0gY291bGQgbm90IGJlIGFkZGVkIHRvIHRoZSBhdXRvIHNjaGVtYSBiZWNhdXNlIEdyYXBoUUwgbmFtZXMgbXVzdCBtYXRjaCAvXltfYS16QS1aXVtfYS16QS1aMC05XSokLy5gXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgZm9yIGNoYW5nZXMgdG8gdGhlIHBhcnNlQ2xhc3Nlc1xuICAgKiBvYmplY3RzIChpLmUuIGRhdGFiYXNlIHNjaGVtYSkgb3IgdG9cbiAgICogdGhlIHBhcnNlR3JhcGhRTENvbmZpZyBvYmplY3QuIElmIG5vXG4gICAqIGNoYW5nZXMgYXJlIGZvdW5kLCByZXR1cm4gdHJ1ZTtcbiAgICovXG4gIF9oYXNTY2hlbWFJbnB1dENoYW5nZWQocGFyYW1zOiB7XG4gICAgcGFyc2VDbGFzc2VzOiBhbnksXG4gICAgcGFyc2VHcmFwaFFMQ29uZmlnOiA/UGFyc2VHcmFwaFFMQ29uZmlnLFxuICAgIGZ1bmN0aW9uTmFtZXNTdHJpbmc6IHN0cmluZyxcbiAgfSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHsgcGFyc2VDbGFzc2VzLCBwYXJzZUdyYXBoUUxDb25maWcsIGZ1bmN0aW9uTmFtZXNTdHJpbmcgfSA9IHBhcmFtcztcblxuICAgIC8vIEZpcnN0IGluaXRcbiAgICBpZiAoIXRoaXMuZ3JhcGhRTFNjaGVtYSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaXNEZWVwU3RyaWN0RXF1YWwodGhpcy5wYXJzZUdyYXBoUUxDb25maWcsIHBhcnNlR3JhcGhRTENvbmZpZykgJiZcbiAgICAgIHRoaXMuZnVuY3Rpb25OYW1lc1N0cmluZyA9PT0gZnVuY3Rpb25OYW1lc1N0cmluZyAmJlxuICAgICAgaXNEZWVwU3RyaWN0RXF1YWwodGhpcy5wYXJzZUNsYXNzZXMsIHBhcnNlQ2xhc3NlcylcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IHsgUGFyc2VHcmFwaFFMU2NoZW1hIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFFBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLE1BQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLEtBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLGtCQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxtQkFBQSxHQUFBQyx1QkFBQSxDQUFBUCxPQUFBO0FBQ0EsSUFBQVEsZUFBQSxHQUFBRCx1QkFBQSxDQUFBUCxPQUFBO0FBQ0EsSUFBQVMsaUJBQUEsR0FBQUYsdUJBQUEsQ0FBQVAsT0FBQTtBQUNBLElBQUFVLG1CQUFBLEdBQUFILHVCQUFBLENBQUFQLE9BQUE7QUFDQSxJQUFBVyxxQkFBQSxHQUFBSix1QkFBQSxDQUFBUCxPQUFBO0FBQ0EsSUFBQVksdUJBQUEsR0FBQUwsdUJBQUEsQ0FBQVAsT0FBQTtBQUNBLElBQUFhLHVC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