parse-server 6.0.0-alpha.2 → 6.0.0-alpha.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -17
- package/lib/AccountLockout.js +11 -26
- package/lib/Adapters/AdapterLoader.js +8 -14
- package/lib/Adapters/Analytics/AnalyticsAdapter.js +2 -8
- package/lib/Adapters/Auth/AuthAdapter.js +7 -16
- package/lib/Adapters/Auth/OAuth1Client.js +32 -57
- package/lib/Adapters/Auth/apple.js +6 -22
- package/lib/Adapters/Auth/facebook.js +7 -37
- package/lib/Adapters/Auth/gcenter.js +8 -37
- package/lib/Adapters/Auth/github.js +7 -10
- package/lib/Adapters/Auth/google.js +11 -34
- package/lib/Adapters/Auth/gpgames.js +5 -8
- package/lib/Adapters/Auth/httpsRequest.js +1 -7
- package/lib/Adapters/Auth/index.js +20 -65
- package/lib/Adapters/Auth/instagram.js +5 -9
- package/lib/Adapters/Auth/janraincapture.js +8 -12
- package/lib/Adapters/Auth/janrainengage.js +7 -11
- package/lib/Adapters/Auth/keycloak.js +5 -19
- package/lib/Adapters/Auth/ldap.js +1 -15
- package/lib/Adapters/Auth/line.js +7 -10
- package/lib/Adapters/Auth/linkedin.js +7 -12
- package/lib/Adapters/Auth/meetup.js +7 -10
- package/lib/Adapters/Auth/microsoft.js +7 -10
- package/lib/Adapters/Auth/oauth2.js +6 -18
- package/lib/Adapters/Auth/phantauth.js +8 -10
- package/lib/Adapters/Auth/qq.js +7 -13
- package/lib/Adapters/Auth/spotify.js +7 -14
- package/lib/Adapters/Auth/twitter.js +5 -15
- package/lib/Adapters/Auth/vkontakte.js +9 -15
- package/lib/Adapters/Auth/wechat.js +7 -10
- package/lib/Adapters/Auth/weibo.js +7 -11
- package/lib/Adapters/Cache/CacheAdapter.js +4 -12
- package/lib/Adapters/Cache/InMemoryCache.js +5 -19
- package/lib/Adapters/Cache/InMemoryCacheAdapter.js +1 -11
- package/lib/Adapters/Cache/LRUCache.js +1 -11
- package/lib/Adapters/Cache/NullCacheAdapter.js +1 -8
- package/lib/Adapters/Cache/RedisCacheAdapter.js +46 -87
- package/lib/Adapters/Cache/SchemaCache.js +1 -6
- package/lib/Adapters/Email/MailAdapter.js +2 -7
- package/lib/Adapters/Files/FilesAdapter.js +7 -21
- package/lib/Adapters/Files/GridFSBucketAdapter.js +6 -44
- package/lib/Adapters/Files/GridStoreAdapter.js +1 -1
- package/lib/Adapters/Logger/LoggerAdapter.js +2 -11
- package/lib/Adapters/Logger/WinstonLogger.js +3 -30
- package/lib/Adapters/Logger/WinstonLoggerAdapter.js +5 -16
- package/lib/Adapters/MessageQueue/EventEmitterMQ.js +3 -20
- package/lib/Adapters/PubSub/EventEmitterPubSub.js +1 -16
- package/lib/Adapters/PubSub/PubSubAdapter.js +2 -9
- package/lib/Adapters/PubSub/RedisPubSub.js +13 -10
- package/lib/Adapters/Push/PushAdapter.js +2 -8
- package/lib/Adapters/Storage/Mongo/MongoCollection.js +12 -37
- package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +26 -79
- package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +78 -209
- package/lib/Adapters/Storage/Mongo/MongoTransform.js +82 -371
- package/lib/Adapters/Storage/Postgres/PostgresClient.js +1 -13
- package/lib/Adapters/Storage/Postgres/PostgresConfigParser.js +1 -20
- package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +119 -446
- package/lib/Adapters/Storage/Postgres/sql/index.js +4 -7
- package/lib/Adapters/Storage/StorageAdapter.js +1 -1
- package/lib/Adapters/WebSocketServer/WSAdapter.js +3 -12
- package/lib/Adapters/WebSocketServer/WSSAdapter.js +7 -12
- package/lib/Auth.js +54 -121
- package/lib/ClientSDK.js +3 -11
- package/lib/Config.js +69 -113
- package/lib/Controllers/AdaptableController.js +6 -18
- package/lib/Controllers/AnalyticsController.js +1 -9
- package/lib/Controllers/CacheController.js +3 -23
- package/lib/Controllers/DatabaseController.js +147 -345
- package/lib/Controllers/FilesController.js +5 -34
- package/lib/Controllers/HooksController.js +1 -51
- package/lib/Controllers/LiveQueryController.js +4 -23
- package/lib/Controllers/LoggerController.js +15 -54
- package/lib/Controllers/ParseGraphQLController.js +49 -104
- package/lib/Controllers/PushController.js +20 -59
- package/lib/Controllers/SchemaController.js +154 -344
- package/lib/Controllers/UserController.js +11 -72
- package/lib/Controllers/index.js +19 -68
- package/lib/Controllers/types.js +1 -1
- package/lib/Deprecator/Deprecations.js +1 -8
- package/lib/Deprecator/Deprecator.js +9 -18
- package/lib/GraphQL/ParseGraphQLSchema.js +16 -100
- package/lib/GraphQL/ParseGraphQLServer.js +2 -29
- package/lib/GraphQL/helpers/objectsMutations.js +2 -12
- package/lib/GraphQL/helpers/objectsQueries.js +18 -76
- package/lib/GraphQL/loaders/defaultGraphQLMutations.js +1 -9
- package/lib/GraphQL/loaders/defaultGraphQLQueries.js +1 -8
- package/lib/GraphQL/loaders/defaultGraphQLTypes.js +9 -115
- package/lib/GraphQL/loaders/defaultRelaySchema.js +6 -18
- package/lib/GraphQL/loaders/filesMutations.js +2 -19
- package/lib/GraphQL/loaders/functionsMutations.js +6 -17
- package/lib/GraphQL/loaders/parseClassMutations.js +6 -44
- package/lib/GraphQL/loaders/parseClassQueries.js +1 -26
- package/lib/GraphQL/loaders/parseClassTypes.js +10 -64
- package/lib/GraphQL/loaders/schemaDirectives.js +1 -17
- package/lib/GraphQL/loaders/schemaMutations.js +1 -20
- package/lib/GraphQL/loaders/schemaQueries.js +1 -14
- package/lib/GraphQL/loaders/schemaTypes.js +2 -6
- package/lib/GraphQL/loaders/usersMutations.js +6 -28
- package/lib/GraphQL/loaders/usersQueries.js +4 -26
- package/lib/GraphQL/parseGraphQLUtils.js +6 -19
- package/lib/GraphQL/transformers/className.js +1 -4
- package/lib/GraphQL/transformers/constraintType.js +1 -20
- package/lib/GraphQL/transformers/inputType.js +1 -20
- package/lib/GraphQL/transformers/mutation.js +6 -51
- package/lib/GraphQL/transformers/outputType.js +1 -20
- package/lib/GraphQL/transformers/query.js +6 -42
- package/lib/GraphQL/transformers/schemaFields.js +7 -34
- package/lib/KeyPromiseQueue.js +1 -12
- package/lib/LiveQuery/Client.js +1 -25
- package/lib/LiveQuery/Id.js +1 -7
- package/lib/LiveQuery/ParseCloudCodePublisher.js +13 -19
- package/lib/LiveQuery/ParseLiveQueryServer.js +92 -306
- package/lib/LiveQuery/ParsePubSub.js +1 -12
- package/lib/LiveQuery/ParseWebSocketServer.js +4 -26
- package/lib/LiveQuery/QueryTools.js +14 -116
- package/lib/LiveQuery/RequestSchema.js +1 -1
- package/lib/LiveQuery/SessionTokenCache.js +1 -17
- package/lib/LiveQuery/Subscription.js +4 -18
- package/lib/LiveQuery/equalObjects.js +2 -14
- package/lib/Options/Definitions.js +79 -10
- package/lib/Options/docs.js +23 -3
- package/lib/Options/index.js +4 -12
- package/lib/Options/parsers.js +1 -18
- package/lib/Page.js +1 -9
- package/lib/ParseMessageQueue.js +1 -10
- package/lib/ParseServer.js +144 -182
- package/lib/ParseServerRESTController.js +6 -33
- package/lib/PromiseRouter.js +16 -50
- package/lib/Push/PushQueue.js +3 -15
- package/lib/Push/PushWorker.js +7 -32
- package/lib/Push/utils.js +9 -38
- package/lib/RestQuery.js +105 -242
- package/lib/RestWrite.js +212 -377
- package/lib/Routers/AggregateRouter.js +14 -51
- package/lib/Routers/AnalyticsRouter.js +2 -8
- package/lib/Routers/AudiencesRouter.js +1 -15
- package/lib/Routers/ClassesRouter.js +3 -53
- package/lib/Routers/CloudCodeRouter.js +1 -19
- package/lib/Routers/FeaturesRouter.js +1 -10
- package/lib/Routers/FilesRouter.js +29 -76
- package/lib/Routers/FunctionsRouter.js +5 -28
- package/lib/Routers/GlobalConfigRouter.js +4 -18
- package/lib/Routers/GraphQLRouter.js +1 -14
- package/lib/Routers/HooksRouter.js +1 -29
- package/lib/Routers/IAPValidationRouter.js +6 -29
- package/lib/Routers/InstallationsRouter.js +2 -12
- package/lib/Routers/LogsRouter.js +4 -16
- package/lib/Routers/PagesRouter.js +69 -129
- package/lib/Routers/PublicAPIRouter.js +3 -62
- package/lib/Routers/PurgeRouter.js +1 -15
- package/lib/Routers/PushRouter.js +2 -18
- package/lib/Routers/RolesRouter.js +1 -7
- package/lib/Routers/SchemasRouter.js +4 -34
- package/lib/Routers/SecurityRouter.js +1 -12
- package/lib/Routers/SessionsRouter.js +3 -19
- package/lib/Routers/UsersRouter.js +58 -155
- package/lib/SchemaMigrations/DefinedSchemas.js +56 -115
- package/lib/SchemaMigrations/Migrations.js +2 -8
- package/lib/Security/Check.js +8 -16
- package/lib/Security/CheckGroup.js +4 -11
- package/lib/Security/CheckGroups/CheckGroupDatabase.js +8 -18
- package/lib/Security/CheckGroups/CheckGroupServerConfig.js +5 -15
- package/lib/Security/CheckGroups/CheckGroups.js +1 -4
- package/lib/Security/CheckRunner.js +22 -41
- package/lib/StatusHandler.js +12 -69
- package/lib/TestUtils.js +1 -6
- package/lib/Utils.js +27 -66
- package/lib/batch.js +17 -28
- package/lib/cache.js +1 -3
- package/lib/cli/definitions/parse-live-query-server.js +1 -3
- package/lib/cli/definitions/parse-server.js +1 -3
- package/lib/cli/parse-live-query-server.js +1 -6
- package/lib/cli/parse-server.js +11 -21
- package/lib/cli/utils/commander.js +13 -51
- package/lib/cli/utils/runner.js +1 -14
- package/lib/cloud-code/Parse.Cloud.js +71 -92
- package/lib/cryptoUtils.js +11 -19
- package/lib/defaults.js +2 -14
- package/lib/deprecated.js +1 -2
- package/lib/index.js +16 -34
- package/lib/logger.js +6 -13
- package/lib/middlewares.js +147 -151
- package/lib/password.js +6 -10
- package/lib/request.js +173 -2
- package/lib/requiredParameter.js +1 -3
- package/lib/rest.js +19 -41
- package/lib/triggers.js +54 -252
- package/lib/vendor/mongodbUrl.js +125 -305
- package/package.json +22 -19
- package/lib/cloud-code/HTTPResponse.js +0 -73
- package/lib/cloud-code/httpRequest.js +0 -192
|
@@ -3,13 +3,10 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.validateFilename = validateFilename;
|
|
7
6
|
exports.default = exports.FilesAdapter = void 0;
|
|
8
|
-
|
|
7
|
+
exports.validateFilename = validateFilename;
|
|
9
8
|
var _node = _interopRequireDefault(require("parse/node"));
|
|
10
|
-
|
|
11
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
12
|
-
|
|
13
10
|
/*eslint no-unused-vars: "off"*/
|
|
14
11
|
// Files Adapter
|
|
15
12
|
//
|
|
@@ -31,7 +28,6 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
31
28
|
/**
|
|
32
29
|
* @module Adapters
|
|
33
30
|
*/
|
|
34
|
-
|
|
35
31
|
/**
|
|
36
32
|
* @interface FilesAdapter
|
|
37
33
|
*/
|
|
@@ -50,24 +46,23 @@ class FilesAdapter {
|
|
|
50
46
|
* @return {Promise} a promise that should fail if the storage didn't succeed
|
|
51
47
|
*/
|
|
52
48
|
createFile(filename, data, contentType, options) {}
|
|
49
|
+
|
|
53
50
|
/** Responsible for deleting the specified file
|
|
54
51
|
*
|
|
55
52
|
* @param {string} filename - the filename to delete
|
|
56
53
|
*
|
|
57
54
|
* @return {Promise} a promise that should fail if the deletion didn't succeed
|
|
58
55
|
*/
|
|
59
|
-
|
|
60
|
-
|
|
61
56
|
deleteFile(filename) {}
|
|
57
|
+
|
|
62
58
|
/** Responsible for retrieving the data of the specified file
|
|
63
59
|
*
|
|
64
60
|
* @param {string} filename - the name of file to retrieve
|
|
65
61
|
*
|
|
66
62
|
* @return {Promise} a promise that should pass with the file data or fail on error
|
|
67
63
|
*/
|
|
68
|
-
|
|
69
|
-
|
|
70
64
|
getFileData(filename) {}
|
|
65
|
+
|
|
71
66
|
/** Returns an absolute URL where the file can be accessed
|
|
72
67
|
*
|
|
73
68
|
* @param {Config} config - server configuration
|
|
@@ -75,9 +70,8 @@ class FilesAdapter {
|
|
|
75
70
|
*
|
|
76
71
|
* @return {string} Absolute URL
|
|
77
72
|
*/
|
|
78
|
-
|
|
79
|
-
|
|
80
73
|
getFileLocation(config, filename) {}
|
|
74
|
+
|
|
81
75
|
/** Validate a filename for this adapter type
|
|
82
76
|
*
|
|
83
77
|
* @param {string} filename
|
|
@@ -104,33 +98,25 @@ class FilesAdapter {
|
|
|
104
98
|
* @return {Promise} a promise that should pass with metadata
|
|
105
99
|
*/
|
|
106
100
|
// getMetadata(filename: string): Promise<any> {}
|
|
107
|
-
|
|
108
|
-
|
|
109
101
|
}
|
|
102
|
+
|
|
110
103
|
/**
|
|
111
104
|
* Simple filename validation
|
|
112
105
|
*
|
|
113
106
|
* @param filename
|
|
114
107
|
* @returns {null|Parse.Error}
|
|
115
108
|
*/
|
|
116
|
-
|
|
117
|
-
|
|
118
109
|
exports.FilesAdapter = FilesAdapter;
|
|
119
|
-
|
|
120
110
|
function validateFilename(filename) {
|
|
121
111
|
if (filename.length > 128) {
|
|
122
112
|
return new _node.default.Error(_node.default.Error.INVALID_FILE_NAME, 'Filename too long.');
|
|
123
113
|
}
|
|
124
|
-
|
|
125
114
|
const regx = /^[_a-zA-Z0-9][a-zA-Z0-9@. ~_-]*$/;
|
|
126
|
-
|
|
127
115
|
if (!filename.match(regx)) {
|
|
128
116
|
return new _node.default.Error(_node.default.Error.INVALID_FILE_NAME, 'Filename contains invalid characters.');
|
|
129
117
|
}
|
|
130
|
-
|
|
131
118
|
return null;
|
|
132
119
|
}
|
|
133
|
-
|
|
134
120
|
var _default = FilesAdapter;
|
|
135
121
|
exports.default = _default;
|
|
136
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
122
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWxlc0FkYXB0ZXIiLCJjcmVhdGVGaWxlIiwiZmlsZW5hbWUiLCJkYXRhIiwiY29udGVudFR5cGUiLCJvcHRpb25zIiwiZGVsZXRlRmlsZSIsImdldEZpbGVEYXRhIiwiZ2V0RmlsZUxvY2F0aW9uIiwiY29uZmlnIiwidmFsaWRhdGVGaWxlbmFtZSIsImxlbmd0aCIsIlBhcnNlIiwiRXJyb3IiLCJJTlZBTElEX0ZJTEVfTkFNRSIsInJlZ3giLCJtYXRjaCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9GaWxlcy9GaWxlc0FkYXB0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyplc2xpbnQgbm8tdW51c2VkLXZhcnM6IFwib2ZmXCIqL1xuLy8gRmlsZXMgQWRhcHRlclxuLy9cbi8vIEFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBmaWxlIHN0b3JhZ2UgbWVjaGFuaXNtLlxuLy9cbi8vIEFkYXB0ZXIgY2xhc3NlcyBtdXN0IGltcGxlbWVudCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczpcbi8vICogY3JlYXRlRmlsZShmaWxlbmFtZSwgZGF0YSwgY29udGVudFR5cGUpXG4vLyAqIGRlbGV0ZUZpbGUoZmlsZW5hbWUpXG4vLyAqIGdldEZpbGVEYXRhKGZpbGVuYW1lKVxuLy8gKiBnZXRGaWxlTG9jYXRpb24oY29uZmlnLCBmaWxlbmFtZSlcbi8vIEFkYXB0ZXIgY2xhc3NlcyBzaG91bGQgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOlxuLy8gKiB2YWxpZGF0ZUZpbGVuYW1lKGZpbGVuYW1lKVxuLy8gKiBoYW5kbGVGaWxlU3RyZWFtKGZpbGVuYW1lLCByZXEsIHJlcywgY29udGVudFR5cGUpXG4vL1xuLy8gRGVmYXVsdCBpcyBHcmlkRlNCdWNrZXRBZGFwdGVyLCB3aGljaCByZXF1aXJlcyBtb25nb1xuLy8gYW5kIGZvciB0aGUgQVBJIHNlcnZlciB0byBiZSB1c2luZyB0aGUgRGF0YWJhc2VDb250cm9sbGVyIHdpdGggTW9uZ29cbi8vIGRhdGFiYXNlIGFkYXB0ZXIuXG5cbmltcG9ydCB0eXBlIHsgQ29uZmlnIH0gZnJvbSAnLi4vLi4vQ29uZmlnJztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbi8qKlxuICogQG1vZHVsZSBBZGFwdGVyc1xuICovXG4vKipcbiAqIEBpbnRlcmZhY2UgRmlsZXNBZGFwdGVyXG4gKi9cbmV4cG9ydCBjbGFzcyBGaWxlc0FkYXB0ZXIge1xuICAvKiogUmVzcG9uc2libGUgZm9yIHN0b3JpbmcgdGhlIGZpbGUgaW4gb3JkZXIgdG8gYmUgcmV0cmlldmVkIGxhdGVyIGJ5IGl0cyBmaWxlbmFtZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSB0aGUgZmlsZW5hbWUgdG8gc2F2ZVxuICAgKiBAcGFyYW0geyp9IGRhdGEgLSB0aGUgYnVmZmVyIG9mIGRhdGEgZnJvbSB0aGUgZmlsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudFR5cGUgLSB0aGUgc3VwcG9zZWQgY29udGVudFR5cGVcbiAgICogQGRpc2N1c3Npb24gdGhlIGNvbnRlbnRUeXBlIGNhbiBiZSB1bmRlZmluZWQgaWYgdGhlIGNvbnRyb2xsZXIgd2FzIG5vdCBhYmxlIHRvIGRldGVybWluZSBpdFxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIChPcHRpb25hbCkgb3B0aW9ucyB0byBiZSBwYXNzZWQgdG8gZmlsZSBhZGFwdGVyIChTMyBGaWxlIEFkYXB0ZXIgT25seSlcbiAgICogLSB0YWdzOiBvYmplY3QgY29udGFpbmluZyBrZXkgdmFsdWUgcGFpcnMgdGhhdCB3aWxsIGJlIHN0b3JlZCB3aXRoIGZpbGVcbiAgICogLSBtZXRhZGF0YTogb2JqZWN0IGNvbnRhaW5pbmcga2V5IHZhbHVlIHBhaXJzIHRoYXQgd2lsbCBiZSBzb3RyZWQgd2l0aCBmaWxlIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXItZ3VpZGUvYWRkLW9iamVjdC1tZXRhZGF0YS5odG1sKVxuICAgKiBAZGlzY3Vzc2lvbiBvcHRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGFsbCBmaWxlIGFkYXB0ZXJzLiBDaGVjayB0aGUgeW91ciBhZGFwdGVyJ3MgZG9jdW1lbnRhdGlvbiBmb3IgY29tcGF0aWJpbGl0eVxuICAgKlxuICAgKiBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCBzaG91bGQgZmFpbCBpZiB0aGUgc3RvcmFnZSBkaWRuJ3Qgc3VjY2VlZFxuICAgKi9cbiAgY3JlYXRlRmlsZShmaWxlbmFtZTogc3RyaW5nLCBkYXRhLCBjb250ZW50VHlwZTogc3RyaW5nLCBvcHRpb25zOiBPYmplY3QpOiBQcm9taXNlIHt9XG5cbiAgLyoqIFJlc3BvbnNpYmxlIGZvciBkZWxldGluZyB0aGUgc3BlY2lmaWVkIGZpbGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gdGhlIGZpbGVuYW1lIHRvIGRlbGV0ZVxuICAgKlxuICAgKiBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCBzaG91bGQgZmFpbCBpZiB0aGUgZGVsZXRpb24gZGlkbid0IHN1Y2NlZWRcbiAgICovXG4gIGRlbGV0ZUZpbGUoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2Uge31cblxuICAvKiogUmVzcG9uc2libGUgZm9yIHJldHJpZXZpbmcgdGhlIGRhdGEgb2YgdGhlIHNwZWNpZmllZCBmaWxlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIHRoZSBuYW1lIG9mIGZpbGUgdG8gcmV0cmlldmVcbiAgICpcbiAgICogQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIHRoYXQgc2hvdWxkIHBhc3Mgd2l0aCB0aGUgZmlsZSBkYXRhIG9yIGZhaWwgb24gZXJyb3JcbiAgICovXG4gIGdldEZpbGVEYXRhKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge31cblxuICAvKiogUmV0dXJucyBhbiBhYnNvbHV0ZSBVUkwgd2hlcmUgdGhlIGZpbGUgY2FuIGJlIGFjY2Vzc2VkXG4gICAqXG4gICAqIEBwYXJhbSB7Q29uZmlnfSBjb25maWcgLSBzZXJ2ZXIgY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWVcbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfSBBYnNvbHV0ZSBVUkxcbiAgICovXG4gIGdldEZpbGVMb2NhdGlvbihjb25maWc6IENvbmZpZywgZmlsZW5hbWU6IHN0cmluZyk6IHN0cmluZyB7fVxuXG4gIC8qKiBWYWxpZGF0ZSBhIGZpbGVuYW1lIGZvciB0aGlzIGFkYXB0ZXIgdHlwZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWVcbiAgICpcbiAgICogQHJldHVybnMge251bGx8UGFyc2UuRXJyb3J9IG51bGwgaWYgdGhlcmUgYXJlIG5vIGVycm9yc1xuICAgKi9cbiAgLy8gdmFsaWRhdGVGaWxlbmFtZShmaWxlbmFtZTogc3RyaW5nKTogP1BhcnNlLkVycm9yIHt9XG5cbiAgLyoqIEhhbmRsZXMgQnl0ZS1SYW5nZSBSZXF1ZXN0cyBmb3IgU3RyZWFtaW5nXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZVxuICAgKiBAcGFyYW0ge29iamVjdH0gcmVxXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnRUeXBlXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBEYXRhIGZvciBieXRlIHJhbmdlXG4gICAqL1xuICAvLyBoYW5kbGVGaWxlU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcsIHJlczogYW55LCByZXE6IGFueSwgY29udGVudFR5cGU6IHN0cmluZyk6IFByb21pc2VcblxuICAvKiogUmVzcG9uc2libGUgZm9yIHJldHJpZXZpbmcgbWV0YWRhdGEgYW5kIHRhZ3NcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gdGhlIGZpbGVuYW1lIHRvIHJldHJpZXZlIG1ldGFkYXRhXG4gICAqXG4gICAqIEByZXR1cm4ge1Byb21pc2V9IGEgcHJvbWlzZSB0aGF0IHNob3VsZCBwYXNzIHdpdGggbWV0YWRhdGFcbiAgICovXG4gIC8vIGdldE1ldGFkYXRhKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge31cbn1cblxuLyoqXG4gKiBTaW1wbGUgZmlsZW5hbWUgdmFsaWRhdGlvblxuICpcbiAqIEBwYXJhbSBmaWxlbmFtZVxuICogQHJldHVybnMge251bGx8UGFyc2UuRXJyb3J9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUZpbGVuYW1lKGZpbGVuYW1lKTogP1BhcnNlLkVycm9yIHtcbiAgaWYgKGZpbGVuYW1lLmxlbmd0aCA+IDEyOCkge1xuICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsICdGaWxlbmFtZSB0b28gbG9uZy4nKTtcbiAgfVxuXG4gIGNvbnN0IHJlZ3ggPSAvXltfYS16QS1aMC05XVthLXpBLVowLTlALiB+Xy1dKiQvO1xuICBpZiAoIWZpbGVuYW1lLm1hdGNoKHJlZ3gpKSB7XG4gICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0ZpbGVuYW1lIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycy4nKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmlsZXNBZGFwdGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBbUJBO0FBQStCO0FBbkIvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLE1BQU1BLFlBQVksQ0FBQztFQUN4QjtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNFQyxVQUFVLENBQUNDLFFBQWdCLEVBQUVDLElBQUksRUFBRUMsV0FBbUIsRUFBRUMsT0FBZSxFQUFXLENBQUM7O0VBRW5GO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNFQyxVQUFVLENBQUNKLFFBQWdCLEVBQVcsQ0FBQzs7RUFFdkM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0VLLFdBQVcsQ0FBQ0wsUUFBZ0IsRUFBZ0IsQ0FBQzs7RUFFN0M7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRU0sZUFBZSxDQUFDQyxNQUFjLEVBQUVQLFFBQWdCLEVBQVUsQ0FBQzs7RUFFM0Q7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0U7O0VBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0U7O0VBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0U7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU1PLFNBQVNRLGdCQUFnQixDQUFDUixRQUFRLEVBQWdCO0VBQ3ZELElBQUlBLFFBQVEsQ0FBQ1MsTUFBTSxHQUFHLEdBQUcsRUFBRTtJQUN6QixPQUFPLElBQUlDLGFBQUssQ0FBQ0MsS0FBSyxDQUFDRCxhQUFLLENBQUNDLEtBQUssQ0FBQ0MsaUJBQWlCLEVBQUUsb0JBQW9CLENBQUM7RUFDN0U7RUFFQSxNQUFNQyxJQUFJLEdBQUcsa0NBQWtDO0VBQy9DLElBQUksQ0FBQ2IsUUFBUSxDQUFDYyxLQUFLLENBQUNELElBQUksQ0FBQyxFQUFFO0lBQ3pCLE9BQU8sSUFBSUgsYUFBSyxDQUFDQyxLQUFLLENBQUNELGFBQUssQ0FBQ0MsS0FBSyxDQUFDQyxpQkFBaUIsRUFBRSx1Q0FBdUMsQ0FBQztFQUNoRztFQUNBLE9BQU8sSUFBSTtBQUNiO0FBQUMsZUFFY2QsWUFBWTtBQUFBIn0=
|
|
@@ -4,15 +4,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = exports.GridFSBucketAdapter = void 0;
|
|
7
|
-
|
|
8
7
|
var _mongodb = require("mongodb");
|
|
9
|
-
|
|
10
8
|
var _FilesAdapter = require("./FilesAdapter");
|
|
11
|
-
|
|
12
9
|
var _defaults = _interopRequireDefault(require("../../defaults"));
|
|
13
|
-
|
|
14
10
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
-
|
|
16
11
|
/**
|
|
17
12
|
GridFSBucketAdapter
|
|
18
13
|
Stores files in Mongo using GridFS
|
|
@@ -20,9 +15,10 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
20
15
|
|
|
21
16
|
|
|
22
17
|
*/
|
|
18
|
+
|
|
23
19
|
// -disable-next
|
|
24
|
-
const crypto = require('crypto');
|
|
25
20
|
|
|
21
|
+
const crypto = require('crypto');
|
|
26
22
|
class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
|
|
27
23
|
constructor(mongoDatabaseURI = _defaults.default.DefaultMongoURI, mongoOptions = {}, encryptionKey = undefined) {
|
|
28
24
|
super();
|
|
@@ -35,7 +31,6 @@ class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
|
|
|
35
31
|
};
|
|
36
32
|
this._mongoOptions = Object.assign(defaultMongoOptions, mongoOptions);
|
|
37
33
|
}
|
|
38
|
-
|
|
39
34
|
_connect() {
|
|
40
35
|
if (!this._connectionPromise) {
|
|
41
36
|
this._connectionPromise = _mongodb.MongoClient.connect(this._databaseURI, this._mongoOptions).then(client => {
|
|
@@ -43,22 +38,19 @@ class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
|
|
|
43
38
|
return client.db(client.s.options.dbName);
|
|
44
39
|
});
|
|
45
40
|
}
|
|
46
|
-
|
|
47
41
|
return this._connectionPromise;
|
|
48
42
|
}
|
|
49
|
-
|
|
50
43
|
_getBucket() {
|
|
51
44
|
return this._connect().then(database => new _mongodb.GridFSBucket(database));
|
|
52
|
-
}
|
|
53
|
-
// Returns a promise
|
|
54
|
-
|
|
45
|
+
}
|
|
55
46
|
|
|
47
|
+
// For a given config object, filename, and data, store a file
|
|
48
|
+
// Returns a promise
|
|
56
49
|
async createFile(filename, data, contentType, options = {}) {
|
|
57
50
|
const bucket = await this._getBucket();
|
|
58
51
|
const stream = await bucket.openUploadStream(filename, {
|
|
59
52
|
metadata: options.metadata
|
|
60
53
|
});
|
|
61
|
-
|
|
62
54
|
if (this._encryptionKey !== null) {
|
|
63
55
|
try {
|
|
64
56
|
const iv = crypto.randomBytes(16);
|
|
@@ -73,29 +65,24 @@ class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
|
|
|
73
65
|
} else {
|
|
74
66
|
await stream.write(data);
|
|
75
67
|
}
|
|
76
|
-
|
|
77
68
|
stream.end();
|
|
78
69
|
return new Promise((resolve, reject) => {
|
|
79
70
|
stream.on('finish', resolve);
|
|
80
71
|
stream.on('error', reject);
|
|
81
72
|
});
|
|
82
73
|
}
|
|
83
|
-
|
|
84
74
|
async deleteFile(filename) {
|
|
85
75
|
const bucket = await this._getBucket();
|
|
86
76
|
const documents = await bucket.find({
|
|
87
77
|
filename
|
|
88
78
|
}).toArray();
|
|
89
|
-
|
|
90
79
|
if (documents.length === 0) {
|
|
91
80
|
throw new Error('FileNotFound');
|
|
92
81
|
}
|
|
93
|
-
|
|
94
82
|
return Promise.all(documents.map(doc => {
|
|
95
83
|
return bucket.delete(doc._id);
|
|
96
84
|
}));
|
|
97
85
|
}
|
|
98
|
-
|
|
99
86
|
async getFileData(filename) {
|
|
100
87
|
const bucket = await this._getBucket();
|
|
101
88
|
const stream = bucket.openDownloadStreamByName(filename);
|
|
@@ -107,7 +94,6 @@ class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
|
|
|
107
94
|
});
|
|
108
95
|
stream.on('end', () => {
|
|
109
96
|
const data = Buffer.concat(chunks);
|
|
110
|
-
|
|
111
97
|
if (this._encryptionKey !== null) {
|
|
112
98
|
try {
|
|
113
99
|
const authTagLocation = data.length - 16;
|
|
@@ -123,7 +109,6 @@ class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
|
|
|
123
109
|
return reject(err);
|
|
124
110
|
}
|
|
125
111
|
}
|
|
126
|
-
|
|
127
112
|
resolve(data);
|
|
128
113
|
});
|
|
129
114
|
stream.on('error', err => {
|
|
@@ -131,18 +116,15 @@ class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
|
|
|
131
116
|
});
|
|
132
117
|
});
|
|
133
118
|
}
|
|
134
|
-
|
|
135
119
|
async rotateEncryptionKey(options = {}) {
|
|
136
120
|
var fileNames = [];
|
|
137
121
|
var oldKeyFileAdapter = {};
|
|
138
122
|
const bucket = await this._getBucket();
|
|
139
|
-
|
|
140
123
|
if (options.oldKey !== undefined) {
|
|
141
124
|
oldKeyFileAdapter = new GridFSBucketAdapter(this._databaseURI, this._mongoOptions, options.oldKey);
|
|
142
125
|
} else {
|
|
143
126
|
oldKeyFileAdapter = new GridFSBucketAdapter(this._databaseURI, this._mongoOptions);
|
|
144
127
|
}
|
|
145
|
-
|
|
146
128
|
if (options.fileNames !== undefined) {
|
|
147
129
|
fileNames = options.fileNames;
|
|
148
130
|
} else {
|
|
@@ -151,7 +133,6 @@ class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
|
|
|
151
133
|
fileNames.push(file.filename);
|
|
152
134
|
});
|
|
153
135
|
}
|
|
154
|
-
|
|
155
136
|
return new Promise(resolve => {
|
|
156
137
|
var fileNamesNotRotated = fileNames;
|
|
157
138
|
var fileNamesRotated = [];
|
|
@@ -166,7 +147,6 @@ class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
|
|
|
166
147
|
return value !== fileName;
|
|
167
148
|
});
|
|
168
149
|
fileNameIndex += 1;
|
|
169
|
-
|
|
170
150
|
if (fileNameIndex == fileNameTotal) {
|
|
171
151
|
resolve({
|
|
172
152
|
rotated: fileNamesRotated,
|
|
@@ -175,7 +155,6 @@ class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
|
|
|
175
155
|
}
|
|
176
156
|
}).catch(() => {
|
|
177
157
|
fileNameIndex += 1;
|
|
178
|
-
|
|
179
158
|
if (fileNameIndex == fileNameTotal) {
|
|
180
159
|
resolve({
|
|
181
160
|
rotated: fileNamesRotated,
|
|
@@ -185,7 +164,6 @@ class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
|
|
|
185
164
|
});
|
|
186
165
|
}).catch(() => {
|
|
187
166
|
fileNameIndex += 1;
|
|
188
|
-
|
|
189
167
|
if (fileNameIndex == fileNameTotal) {
|
|
190
168
|
resolve({
|
|
191
169
|
rotated: fileNamesRotated,
|
|
@@ -196,21 +174,17 @@ class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
|
|
|
196
174
|
});
|
|
197
175
|
});
|
|
198
176
|
}
|
|
199
|
-
|
|
200
177
|
getFileLocation(config, filename) {
|
|
201
178
|
return config.mount + '/files/' + config.applicationId + '/' + encodeURIComponent(filename);
|
|
202
179
|
}
|
|
203
|
-
|
|
204
180
|
async getMetadata(filename) {
|
|
205
181
|
const bucket = await this._getBucket();
|
|
206
182
|
const files = await bucket.find({
|
|
207
183
|
filename
|
|
208
184
|
}).toArray();
|
|
209
|
-
|
|
210
185
|
if (files.length === 0) {
|
|
211
186
|
return {};
|
|
212
187
|
}
|
|
213
|
-
|
|
214
188
|
const {
|
|
215
189
|
metadata
|
|
216
190
|
} = files[0];
|
|
@@ -218,17 +192,14 @@ class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
|
|
|
218
192
|
metadata
|
|
219
193
|
};
|
|
220
194
|
}
|
|
221
|
-
|
|
222
195
|
async handleFileStream(filename, req, res, contentType) {
|
|
223
196
|
const bucket = await this._getBucket();
|
|
224
197
|
const files = await bucket.find({
|
|
225
198
|
filename
|
|
226
199
|
}).toArray();
|
|
227
|
-
|
|
228
200
|
if (files.length === 0) {
|
|
229
201
|
throw new Error('FileNotFound');
|
|
230
202
|
}
|
|
231
|
-
|
|
232
203
|
const parts = req.get('Range').replace(/bytes=/, '').split('-');
|
|
233
204
|
const partialstart = parts[0];
|
|
234
205
|
const partialend = parts[1];
|
|
@@ -237,12 +208,10 @@ class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
|
|
|
237
208
|
const fileEnd = partialend ? parseInt(partialend, 10) : fileLength;
|
|
238
209
|
let start = Math.min(fileStart || 0, fileEnd, fileLength);
|
|
239
210
|
let end = Math.max(fileStart || 0, fileEnd) + 1 || fileLength;
|
|
240
|
-
|
|
241
211
|
if (isNaN(fileStart)) {
|
|
242
212
|
start = fileLength - end + 1;
|
|
243
213
|
end = fileLength;
|
|
244
214
|
}
|
|
245
|
-
|
|
246
215
|
end = Math.min(end, fileLength);
|
|
247
216
|
start = Math.max(start, 0);
|
|
248
217
|
res.status(206);
|
|
@@ -252,11 +221,9 @@ class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
|
|
|
252
221
|
res.header('Content-Type', contentType);
|
|
253
222
|
const stream = bucket.openDownloadStreamByName(filename);
|
|
254
223
|
stream.start(start);
|
|
255
|
-
|
|
256
224
|
if (end) {
|
|
257
225
|
stream.end(end);
|
|
258
226
|
}
|
|
259
|
-
|
|
260
227
|
stream.on('data', chunk => {
|
|
261
228
|
res.write(chunk);
|
|
262
229
|
});
|
|
@@ -268,22 +235,17 @@ class GridFSBucketAdapter extends _FilesAdapter.FilesAdapter {
|
|
|
268
235
|
res.end();
|
|
269
236
|
});
|
|
270
237
|
}
|
|
271
|
-
|
|
272
238
|
handleShutdown() {
|
|
273
239
|
if (!this._client) {
|
|
274
240
|
return Promise.resolve();
|
|
275
241
|
}
|
|
276
|
-
|
|
277
242
|
return this._client.close(false);
|
|
278
243
|
}
|
|
279
|
-
|
|
280
244
|
validateFilename(filename) {
|
|
281
245
|
return (0, _FilesAdapter.validateFilename)(filename);
|
|
282
246
|
}
|
|
283
|
-
|
|
284
247
|
}
|
|
285
|
-
|
|
286
248
|
exports.GridFSBucketAdapter = GridFSBucketAdapter;
|
|
287
249
|
var _default = GridFSBucketAdapter;
|
|
288
250
|
exports.default = _default;
|
|
289
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9GaWxlcy9HcmlkRlNCdWNrZXRBZGFwdGVyLmpzIl0sIm5hbWVzIjpbImNyeXB0byIsInJlcXVpcmUiLCJHcmlkRlNCdWNrZXRBZGFwdGVyIiwiRmlsZXNBZGFwdGVyIiwiY29uc3RydWN0b3IiLCJtb25nb0RhdGFiYXNlVVJJIiwiZGVmYXVsdHMiLCJEZWZhdWx0TW9uZ29VUkkiLCJtb25nb09wdGlvbnMiLCJlbmNyeXB0aW9uS2V5IiwidW5kZWZpbmVkIiwiX2RhdGFiYXNlVVJJIiwiX2FsZ29yaXRobSIsIl9lbmNyeXB0aW9uS2V5IiwiY3JlYXRlSGFzaCIsInVwZGF0ZSIsIlN0cmluZyIsImRpZ2VzdCIsInN1YnN0ciIsImRlZmF1bHRNb25nb09wdGlvbnMiLCJ1c2VOZXdVcmxQYXJzZXIiLCJ1c2VVbmlmaWVkVG9wb2xvZ3kiLCJfbW9uZ29PcHRpb25zIiwiT2JqZWN0IiwiYXNzaWduIiwiX2Nvbm5lY3QiLCJfY29ubmVjdGlvblByb21pc2UiLCJNb25nb0NsaWVudCIsImNvbm5lY3QiLCJ0aGVuIiwiY2xpZW50IiwiX2NsaWVudCIsImRiIiwicyIsIm9wdGlvbnMiLCJkYk5hbWUiLCJfZ2V0QnVja2V0IiwiZGF0YWJhc2UiLCJHcmlkRlNCdWNrZXQiLCJjcmVhdGVGaWxlIiwiZmlsZW5hbWUiLCJkYXRhIiwiY29udGVudFR5cGUiLCJidWNrZXQiLCJzdHJlYW0iLCJvcGVuVXBsb2FkU3RyZWFtIiwibWV0YWRhdGEiLCJpdiIsInJhbmRvbUJ5dGVzIiwiY2lwaGVyIiwiY3JlYXRlQ2lwaGVyaXYiLCJlbmNyeXB0ZWRSZXN1bHQiLCJCdWZmZXIiLCJjb25jYXQiLCJmaW5hbCIsImdldEF1dGhUYWciLCJ3cml0ZSIsImVyciIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZW5kIiwib24iLCJkZWxldGVGaWxlIiwiZG9jdW1lbnRzIiwiZmluZCIsInRvQXJyYXkiLCJsZW5ndGgiLCJFcnJvciIsImFsbCIsIm1hcCIsImRvYyIsImRlbGV0ZSIsIl9pZCIsImdldEZpbGVEYXRhIiwib3BlbkRvd25sb2FkU3RyZWFtQnlOYW1lIiwicmVhZCIsImNodW5rcyIsInB1c2giLCJhdXRoVGFnTG9jYXRpb24iLCJpdkxvY2F0aW9uIiwiYXV0aFRhZyIsInNsaWNlIiwiZW5jcnlwdGVkIiwiZGVjaXBoZXIiLCJjcmVhdGVEZWNpcGhlcml2Iiwic2V0QXV0aFRhZyIsImRlY3J5cHRlZCIsInJvdGF0ZUVuY3J5cHRpb25LZXkiLCJmaWxlTmFtZXMiLCJvbGRLZXlGaWxlQWRhcHRlciIsIm9sZEtleSIsImZpbGVOYW1lc0l0ZXJhdG9yIiwiZm9yRWFjaCIsImZpbGUiLCJmaWxlTmFtZXNOb3RSb3RhdGVkIiwiZmlsZU5hbWVzUm90YXRlZCIsImZpbGVOYW1lVG90YWwiLCJmaWxlTmFtZUluZGV4IiwiZmlsZU5hbWUiLCJwbGFpblRleHREYXRhIiwiZmlsdGVyIiwidmFsdWUiLCJyb3RhdGVkIiwibm90Um90YXRlZCIsImNhdGNoIiwiZ2V0RmlsZUxvY2F0aW9uIiwiY29uZmlnIiwibW91bnQiLCJhcHBsaWNhdGlvbklkIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZ2V0TWV0YWRhdGEiLCJmaWxlcyIsImhhbmRsZUZpbGVTdHJlYW0iLCJyZXEiLCJyZXMiLCJwYXJ0cyIsImdldCIsInJlcGxhY2UiLCJzcGxpdCIsInBhcnRpYWxzdGFydCIsInBhcnRpYWxlbmQiLCJmaWxlTGVuZ3RoIiwiZmlsZVN0YXJ0IiwicGFyc2VJbnQiLCJmaWxlRW5kIiwic3RhcnQiLCJNYXRoIiwibWluIiwibWF4IiwiaXNOYU4iLCJzdGF0dXMiLCJoZWFkZXIiLCJjaHVuayIsImUiLCJzZW5kIiwibWVzc2FnZSIsImhhbmRsZVNodXRkb3duIiwiY2xvc2UiLCJ2YWxpZGF0ZUZpbGVuYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBU0E7O0FBQ0E7O0FBQ0E7Ozs7QUFYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBSUEsTUFB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QUFYO0FBQ0QsS0FIRDtBQUlBNUYsSUFBQUEsTUFBTSxDQUFDa0IsRUFBUCxDQUFVLEtBQVYsRUFBaUIsTUFBTTtBQUNyQnFELE1BQUFBLEdBQUcsQ0FBQ3RELEdBQUo7QUFDRCxLQUZEO0FBR0Q7O0FBRUQ0RSxFQUFBQSxjQUFjLEdBQUc7QUFDZixRQUFJLENBQUMsS0FBSzFHLE9BQVYsRUFBbUI7QUFDakIsYUFBTzJCLE9BQU8sQ0FBQ0MsT0FBUixFQUFQO0FBQ0Q7O0FBQ0QsV0FBTyxLQUFLNUIsT0FBTCxDQUFhMkcsS0FBYixDQUFtQixLQUFuQixDQUFQO0FBQ0Q7O0FBRURDLEVBQUFBLGdCQUFnQixDQUFDbkcsUUFBRCxFQUFXO0FBQ3pCLFdBQU8sb0NBQWlCQSxRQUFqQixDQUFQO0FBQ0Q7O0FBcFFtRDs7O2VBdVF2Q3RDLG1CIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gR3JpZEZTQnVja2V0QWRhcHRlclxuIFN0b3JlcyBmaWxlcyBpbiBNb25nbyB1c2luZyBHcmlkRlNcbiBSZXF1aXJlcyB0aGUgZGF0YWJhc2UgYWRhcHRlciB0byBiZSBiYXNlZCBvbiBtb25nb2NsaWVudFxuXG4gQGZsb3cgd2Vha1xuICovXG5cbi8vIEBmbG93LWRpc2FibGUtbmV4dFxuaW1wb3J0IHsgTW9uZ29DbGllbnQsIEdyaWRGU0J1Y2tldCwgRGIgfSBmcm9tICdtb25nb2RiJztcbmltcG9ydCB7IEZpbGVzQWRhcHRlciwgdmFsaWRhdGVGaWxlbmFtZSB9IGZyb20gJy4vRmlsZXNBZGFwdGVyJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi8uLi9kZWZhdWx0cyc7XG5jb25zdCBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcblxuZXhwb3J0IGNsYXNzIEdyaWRGU0J1Y2tldEFkYXB0ZXIgZXh0ZW5kcyBGaWxlc0FkYXB0ZXIge1xuICBfZGF0YWJhc2VVUkk6IHN0cmluZztcbiAgX2Nvbm5lY3Rpb25Qcm9taXNlOiBQcm9taXNlPERiPjtcbiAgX21vbmdvT3B0aW9uczogT2JqZWN0O1xuICBfYWxnb3JpdGhtOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbW9uZ29EYXRhYmFzZVVSSSA9IGRlZmF1bHRzLkRlZmF1bHRNb25nb1VSSSxcbiAgICBtb25nb09wdGlvbnMgPSB7fSxcbiAgICBlbmNyeXB0aW9uS2V5ID0gdW5kZWZpbmVkXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fZGF0YWJhc2VVUkkgPSBtb25nb0RhdGFiYXNlVVJJO1xuICAgIHRoaXMuX2FsZ29yaXRobSA9ICdhZXMtMjU2LWdjbSc7XG4gICAgdGhpcy5fZW5jcnlwdGlvbktleSA9XG4gICAgICBlbmNyeXB0aW9uS2V5ICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKFN0cmluZyhlbmNyeXB0aW9uS2V5KSkuZGlnZXN0KCdiYXNlNjQnKS5zdWJzdHIoMCwgMzIpXG4gICAgICAgIDogbnVsbDtcbiAgICBjb25zdCBkZWZhdWx0TW9uZ29PcHRpb25zID0ge1xuICAgICAgdXNlTmV3VXJsUGFyc2VyOiB0cnVlLFxuICAgICAgdXNlVW5pZmllZFRvcG9sb2d5OiB0cnVlLFxuICAgIH07XG4gICAgdGhpcy5fbW9uZ29PcHRpb25zID0gT2JqZWN0LmFzc2lnbihkZWZhdWx0TW9uZ29PcHRpb25zLCBtb25nb09wdGlvbnMpO1xuICB9XG5cbiAgX2Nvbm5lY3QoKSB7XG4gICAgaWYgKCF0aGlzLl9jb25uZWN0aW9uUHJvbWlzZSkge1xuICAgICAgdGhpcy5fY29ubmVjdGlvblByb21pc2UgPSBNb25nb0NsaWVudC5jb25uZWN0KHRoaXMuX2RhdGFiYXNlVVJJLCB0aGlzLl9tb25nb09wdGlvbnMpLnRoZW4oXG4gICAgICAgIGNsaWVudCA9PiB7XG4gICAgICAgICAgdGhpcy5fY2xpZW50ID0gY2xpZW50O1xuICAgICAgICAgIHJldHVybiBjbGllbnQuZGIoY2xpZW50LnMub3B0aW9ucy5kYk5hbWUpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvblByb21pc2U7XG4gIH1cblxuICBfZ2V0QnVja2V0KCkge1xuICAgIHJldHVybiB0aGlzLl9jb25uZWN0KCkudGhlbihkYXRhYmFzZSA9PiBuZXcgR3JpZEZTQnVja2V0KGRhdGFiYXNlKSk7XG4gIH1cblxuICAvLyBGb3IgYSBnaXZlbiBjb25maWcgb2JqZWN0LCBmaWxlbmFtZSwgYW5kIGRhdGEsIHN0b3JlIGEgZmlsZVxuICAvLyBSZXR1cm5zIGEgcHJvbWlzZVxuICBhc3luYyBjcmVhdGVGaWxlKGZpbGVuYW1lOiBzdHJpbmcsIGRhdGEsIGNvbnRlbnRUeXBlLCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBidWNrZXQgPSBhd2FpdCB0aGlzLl9nZXRCdWNrZXQoKTtcbiAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCBidWNrZXQub3BlblVwbG9hZFN0cmVhbShmaWxlbmFtZSwge1xuICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgfSk7XG4gICAgaWYgKHRoaXMuX2VuY3J5cHRpb25LZXkgIT09IG51bGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGl2ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KTtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KHRoaXMuX2FsZ29yaXRobSwgdGhpcy5fZW5jcnlwdGlvbktleSwgaXYpO1xuICAgICAgICBjb25zdCBlbmNyeXB0ZWRSZXN1bHQgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgICAgICBjaXBoZXIudXBkYXRlKGRhdGEpLFxuICAgICAgICAgIGNpcGhlci5maW5hbCgpLFxuICAgICAgICAgIGl2LFxuICAgICAgICAgIGNpcGhlci5nZXRBdXRoVGFnKCksXG4gICAgICAgIF0pO1xuICAgICAgICBhd2FpdCBzdHJlYW0ud3JpdGUoZW5jcnlwdGVkUmVzdWx0KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHN0cmVhbS53cml0ZShkYXRhKTtcbiAgICB9XG4gICAgc3RyZWFtLmVuZCgpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzdHJlYW0ub24oJ2ZpbmlzaCcsIHJlc29sdmUpO1xuICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIHJlamVjdCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVGaWxlKGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBidWNrZXQgPSBhd2FpdCB0aGlzLl9nZXRCdWNrZXQoKTtcbiAgICBjb25zdCBkb2N1bWVudHMgPSBhd2FpdCBidWNrZXQuZmluZCh7IGZpbGVuYW1lIH0pLnRvQXJyYXkoKTtcbiAgICBpZiAoZG9jdW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaWxlTm90Rm91bmQnKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgZG9jdW1lbnRzLm1hcChkb2MgPT4ge1xuICAgICAgICByZXR1cm4gYnVja2V0LmRlbGV0ZShkb2MuX2lkKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGdldEZpbGVEYXRhKGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBidWNrZXQgPSBhd2FpdCB0aGlzLl9nZXRCdWNrZXQoKTtcbiAgICBjb25zdCBzdHJlYW0gPSBidWNrZXQub3BlbkRvd25sb2FkU3RyZWFtQnlOYW1lKGZpbGVuYW1lKTtcbiAgICBzdHJlYW0ucmVhZCgpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICAgIHN0cmVhbS5vbignZGF0YScsIGRhdGEgPT4ge1xuICAgICAgICBjaHVua3MucHVzaChkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgc3RyZWFtLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG4gICAgICAgIGlmICh0aGlzLl9lbmNyeXB0aW9uS2V5ICE9PSBudWxsKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGF1dGhUYWdMb2NhdGlvbiA9IGRhdGEubGVuZ3RoIC0gMTY7XG4gICAgICAgICAgICBjb25zdCBpdkxvY2F0aW9uID0gZGF0YS5sZW5ndGggLSAzMjtcbiAgICAgICAgICAgIGNvbnN0IGF1dGhUYWcgPSBkYXRhLnNsaWNlKGF1dGhUYWdMb2NhdGlvbik7XG4gICAgICAgICAgICBjb25zdCBpdiA9IGRhdGEuc2xpY2UoaXZMb2NhdGlvbiwgYXV0aFRhZ0xvY2F0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGVuY3J5cHRlZCA9IGRhdGEuc2xpY2UoMCwgaXZMb2NhdGlvbik7XG4gICAgICAgICAgICBjb25zdCBkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KHRoaXMuX2FsZ29yaXRobSwgdGhpcy5fZW5jcnlwdGlvbktleSwgaXYpO1xuICAgICAgICAgICAgZGVjaXBoZXIuc2V0QXV0aFRhZyhhdXRoVGFnKTtcbiAgICAgICAgICAgIGNvbnN0IGRlY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQoW2RlY2lwaGVyLnVwZGF0ZShlbmNyeXB0ZWQpLCBkZWNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShkZWNyeXB0ZWQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSk7XG4gICAgICBzdHJlYW0ub24oJ2Vycm9yJywgZXJyID0+IHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJvdGF0ZUVuY3J5cHRpb25LZXkob3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyIGZpbGVOYW1lcyA9IFtdO1xuICAgIHZhciBvbGRLZXlGaWxlQWRhcHRlciA9IHt9O1xuICAgIGNvbnN0IGJ1Y2tldCA9IGF3YWl0IHRoaXMuX2dldEJ1Y2tldCgpO1xuICAgIGlmIChvcHRpb25zLm9sZEtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvbGRLZXlGaWxlQWRhcHRlciA9IG5ldyBHcmlkRlNCdWNrZXRBZGFwdGVyKFxuICAgICAgICB0aGlzLl9kYXRhYmFzZVVSSSxcbiAgICAgICAgdGhpcy5fbW9uZ29PcHRpb25zLFxuICAgICAgICBvcHRpb25zLm9sZEtleVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2xkS2V5RmlsZUFkYXB0ZXIgPSBuZXcgR3JpZEZTQnVja2V0QWRhcHRlcih0aGlzLl9kYXRhYmFzZVVSSSwgdGhpcy5fbW9uZ29PcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZmlsZU5hbWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZpbGVOYW1lcyA9IG9wdGlvbnMuZmlsZU5hbWVzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmaWxlTmFtZXNJdGVyYXRvciA9IGF3YWl0IGJ1Y2tldC5maW5kKCkudG9BcnJheSgpO1xuICAgICAgZmlsZU5hbWVzSXRlcmF0b3IuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgICAgZmlsZU5hbWVzLnB1c2goZmlsZS5maWxlbmFtZSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgdmFyIGZpbGVOYW1lc05vdFJvdGF0ZWQgPSBmaWxlTmFtZXM7XG4gICAgICB2YXIgZmlsZU5hbWVzUm90YXRlZCA9IFtdO1xuICAgICAgdmFyIGZpbGVOYW1lVG90YWwgPSBmaWxlTmFtZXMubGVuZ3RoO1xuICAgICAgdmFyIGZpbGVOYW1lSW5kZXggPSAwO1xuICAgICAgZmlsZU5hbWVzLmZvckVhY2goZmlsZU5hbWUgPT4ge1xuICAgICAgICBvbGRLZXlGaWxlQWRhcHRlclxuICAgICAgICAgIC5nZXRGaWxlRGF0YShmaWxlTmFtZSlcbiAgICAgICAgICAudGhlbihwbGFpblRleHREYXRhID0+IHtcbiAgICAgICAgICAgIC8vT3ZlcndyaXRlIGZpbGUgd2l0aCBkYXRhIGVuY3J5cHRlZCB3aXRoIG5ldyBrZXlcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRmlsZShmaWxlTmFtZSwgcGxhaW5UZXh0RGF0YSlcbiAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZpbGVOYW1lc1JvdGF0ZWQucHVzaChmaWxlTmFtZSk7XG4gICAgICAgICAgICAgICAgZmlsZU5hbWVzTm90Um90YXRlZCA9IGZpbGVOYW1lc05vdFJvdGF0ZWQuZmlsdGVyKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICE9PSBmaWxlTmFtZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmaWxlTmFtZUluZGV4ICs9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVOYW1lSW5kZXggPT0gZmlsZU5hbWVUb3RhbCkge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIHJvdGF0ZWQ6IGZpbGVOYW1lc1JvdGF0ZWQsXG4gICAgICAgICAgICAgICAgICAgIG5vdFJvdGF0ZWQ6IGZpbGVOYW1lc05vdFJvdGF0ZWQsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZmlsZU5hbWVJbmRleCArPSAxO1xuICAgICAgICAgICAgICAgIGlmIChmaWxlTmFtZUluZGV4ID09IGZpbGVOYW1lVG90YWwpIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICByb3RhdGVkOiBmaWxlTmFtZXNSb3RhdGVkLFxuICAgICAgICAgICAgICAgICAgICBub3RSb3RhdGVkOiBmaWxlTmFtZXNOb3RSb3RhdGVkLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICBmaWxlTmFtZUluZGV4ICs9IDE7XG4gICAgICAgICAgICBpZiAoZmlsZU5hbWVJbmRleCA9PSBmaWxlTmFtZVRvdGFsKSB7XG4gICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgIHJvdGF0ZWQ6IGZpbGVOYW1lc1JvdGF0ZWQsXG4gICAgICAgICAgICAgICAgbm90Um90YXRlZDogZmlsZU5hbWVzTm90Um90YXRlZCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEZpbGVMb2NhdGlvbihjb25maWcsIGZpbGVuYW1lKSB7XG4gICAgcmV0dXJuIGNvbmZpZy5tb3VudCArICcvZmlsZXMvJyArIGNvbmZpZy5hcHBsaWNhdGlvbklkICsgJy8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVuYW1lKTtcbiAgfVxuXG4gIGFzeW5jIGdldE1ldGFkYXRhKGZpbGVuYW1lKSB7XG4gICAgY29uc3QgYnVja2V0ID0gYXdhaXQgdGhpcy5fZ2V0QnVja2V0KCk7XG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCBidWNrZXQuZmluZCh7IGZpbGVuYW1lIH0pLnRvQXJyYXkoKTtcbiAgICBpZiAoZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHsgbWV0YWRhdGEgfSA9IGZpbGVzWzBdO1xuICAgIHJldHVybiB7IG1ldGFkYXRhIH07XG4gIH1cblxuICBhc3luYyBoYW5kbGVGaWxlU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcsIHJlcSwgcmVzLCBjb250ZW50VHlwZSkge1xuICAgIGNvbnN0IGJ1Y2tldCA9IGF3YWl0IHRoaXMuX2dldEJ1Y2tldCgpO1xuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgYnVja2V0LmZpbmQoeyBmaWxlbmFtZSB9KS50b0FycmF5KCk7XG4gICAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaWxlTm90Rm91bmQnKTtcbiAgICB9XG4gICAgY29uc3QgcGFydHMgPSByZXFcbiAgICAgIC5nZXQoJ1JhbmdlJylcbiAgICAgIC5yZXBsYWNlKC9ieXRlcz0vLCAnJylcbiAgICAgIC5zcGxpdCgnLScpO1xuICAgIGNvbnN0IHBhcnRpYWxzdGFydCA9IHBhcnRzWzBdO1xuICAgIGNvbnN0IHBhcnRpYWxlbmQgPSBwYXJ0c1sxXTtcblxuICAgIGNvbnN0IGZpbGVMZW5ndGggPSBmaWxlc1swXS5sZW5ndGg7XG4gICAgY29uc3QgZmlsZVN0YXJ0ID0gcGFyc2VJbnQocGFydGlhbHN0YXJ0LCAxMCk7XG4gICAgY29uc3QgZmlsZUVuZCA9IHBhcnRpYWxlbmQgPyBwYXJzZUludChwYXJ0aWFsZW5kLCAxMCkgOiBmaWxlTGVuZ3RoO1xuXG4gICAgbGV0IHN0YXJ0ID0gTWF0aC5taW4oZmlsZVN0YXJ0IHx8IDAsIGZpbGVFbmQsIGZpbGVMZW5ndGgpO1xuICAgIGxldCBlbmQgPSBNYXRoLm1heChmaWxlU3RhcnQgfHwgMCwgZmlsZUVuZCkgKyAxIHx8IGZpbGVMZW5ndGg7XG4gICAgaWYgKGlzTmFOKGZpbGVTdGFydCkpIHtcbiAgICAgIHN0YXJ0ID0gZmlsZUxlbmd0aCAtIGVuZCArIDE7XG4gICAgICBlbmQgPSBmaWxlTGVuZ3RoO1xuICAgIH1cbiAgICBlbmQgPSBNYXRoLm1pbihlbmQsIGZpbGVMZW5ndGgpO1xuICAgIHN0YXJ0ID0gTWF0aC5tYXgoc3RhcnQsIDApO1xuXG4gICAgcmVzLnN0YXR1cygyMDYpO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2VwdC1SYW5nZXMnLCAnYnl0ZXMnKTtcbiAgICByZXMuaGVhZGVyKCdDb250ZW50LUxlbmd0aCcsIGVuZCAtIHN0YXJ0KTtcbiAgICByZXMuaGVhZGVyKCdDb250ZW50LVJhbmdlJywgJ2J5dGVzICcgKyBzdGFydCArICctJyArIGVuZCArICcvJyArIGZpbGVMZW5ndGgpO1xuICAgIHJlcy5oZWFkZXIoJ0NvbnRlbnQtVHlwZScsIGNvbnRlbnRUeXBlKTtcbiAgICBjb25zdCBzdHJlYW0gPSBidWNrZXQub3BlbkRvd25sb2FkU3RyZWFtQnlOYW1lKGZpbGVuYW1lKTtcbiAgICBzdHJlYW0uc3RhcnQoc3RhcnQpO1xuICAgIGlmIChlbmQpIHtcbiAgICAgIHN0cmVhbS5lbmQoZW5kKTtcbiAgICB9XG4gICAgc3RyZWFtLm9uKCdkYXRhJywgY2h1bmsgPT4ge1xuICAgICAgcmVzLndyaXRlKGNodW5rKTtcbiAgICB9KTtcbiAgICBzdHJlYW0ub24oJ2Vycm9yJywgKGUpID0+IHtcbiAgICAgIHJlcy5zdGF0dXMoNDA0KTtcbiAgICAgIHJlcy5zZW5kKGUubWVzc2FnZSk7XG4gICAgfSk7XG4gICAgc3RyZWFtLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICByZXMuZW5kKCk7XG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVTaHV0ZG93bigpIHtcbiAgICBpZiAoIXRoaXMuX2NsaWVudCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LmNsb3NlKGZhbHNlKTtcbiAgfVxuXG4gIHZhbGlkYXRlRmlsZW5hbWUoZmlsZW5hbWUpIHtcbiAgICByZXR1cm4gdmFsaWRhdGVGaWxlbmFtZShmaWxlbmFtZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgR3JpZEZTQnVja2V0QWRhcHRlcjtcbiJdfQ==
|
|
251
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcnlwdG8iLCJyZXF1aXJlIiwiR3JpZEZTQnVja2V0QWRhcHRlciIsIkZpbGVzQWRhcHRlciIsImNvbnN0cnVjdG9yIiwibW9uZ29EYXRhYmFzZVVSSSIsImRlZmF1bHRzIiwiRGVmYXVsdE1vbmdvVVJJIiwibW9uZ29PcHRpb25zIiwiZW5jcnlwdGlvbktleSIsInVuZGVmaW5lZCIsIl9kYXRhYmFzZVVSSSIsIl9hbGdvcml0aG0iLCJfZW5jcnlwdGlvbktleSIsImNyZWF0ZUhhc2giLCJ1cGRhdGUiLCJTdHJpbmciLCJkaWdlc3QiLCJzdWJzdHIiLCJkZWZhdWx0TW9uZ29PcHRpb25zIiwidXNlTmV3VXJsUGFyc2VyIiwidXNlVW5pZmllZFRvcG9sb2d5IiwiX21vbmdvT3B0aW9ucyIsIk9iamVjdCIsImFzc2lnbiIsIl9jb25uZWN0IiwiX2Nvbm5lY3Rpb25Qcm9taXNlIiwiTW9uZ29DbGllbnQiLCJjb25uZWN0IiwidGhlbiIsImNsaWVudCIsIl9jbGllbnQiLCJkYiIsInMiLCJvcHRpb25zIiwiZGJOYW1lIiwiX2dldEJ1Y2tldCIsImRhdGFiYXNlIiwiR3JpZEZTQnVja2V0IiwiY3JlYXRlRmlsZSIsImZpbGVuYW1lIiwiZGF0YSIsImNvbnRlbnRUeXBlIiwiYnVja2V0Iiwic3RyZWFtIiwib3BlblVwbG9hZFN0cmVhbSIsIm1ldGFkYXRhIiwiaXYiLCJyYW5kb21CeXRlcyIsImNpcGhlciIsImNyZWF0ZUNpcGhlcml2IiwiZW5jcnlwdGVkUmVzdWx0IiwiQnVmZmVyIiwiY29uY2F0IiwiZmluYWwiLCJnZXRBdXRoVGFnIiwid3JpdGUiLCJlcnIiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImVuZCIsIm9uIiwiZGVsZXRlRmlsZSIsImRvY3VtZW50cyIsImZpbmQiLCJ0b0FycmF5IiwibGVuZ3RoIiwiRXJyb3IiLCJhbGwiLCJtYXAiLCJkb2MiLCJkZWxldGUiLCJfaWQiLCJnZXRGaWxlRGF0YSIsIm9wZW5Eb3dubG9hZFN0cmVhbUJ5TmFtZSIsInJlYWQiLCJjaHVua3MiLCJwdXNoIiwiYXV0aFRhZ0xvY2F0aW9uIiwiaXZMb2NhdGlvbiIsImF1dGhUYWciLCJzbGljZSIsImVuY3J5cHRlZCIsImRlY2lwaGVyIiwiY3JlYXRlRGVjaXBoZXJpdiIsInNldEF1dGhUYWciLCJkZWNyeXB0ZWQiLCJyb3RhdGVFbmNyeXB0aW9uS2V5IiwiZmlsZU5hbWVzIiwib2xkS2V5RmlsZUFkYXB0ZXIiLCJvbGRLZXkiLCJmaWxlTmFtZXNJdGVyYXRvciIsImZvckVhY2giLCJmaWxlIiwiZmlsZU5hbWVzTm90Um90YXRlZCIsImZpbGVOYW1lc1JvdGF0ZWQiLCJmaWxlTmFtZVRvdGFsIiwiZmlsZU5hbWVJbmRleCIsImZpbGVOYW1lIiwicGxhaW5UZXh0RGF0YSIsImZpbHRlciIsInZhbHVlIiwicm90YXRlZCIsIm5vdFJvdGF0ZWQiLCJjYXRjaCIsImdldEZpbGVMb2NhdGlvbiIsImNvbmZpZyIsIm1vdW50IiwiYXBwbGljYXRpb25JZCIsImVuY29kZVVSSUNvbXBvbmVudCIsImdldE1ldGFkYXRhIiwiZmlsZXMiLCJoYW5kbGVGaWxlU3RyZWFtIiwicmVxIiwicmVzIiwicGFydHMiLCJnZXQiLCJyZXBsYWNlIiwic3BsaXQiLCJwYXJ0aWFsc3RhcnQiLCJwYXJ0aWFsZW5kIiwiZmlsZUxlbmd0aCIsImZpbGVTdGFydCIsInBhcnNlSW50IiwiZmlsZUVuZCIsInN0YXJ0IiwiTWF0aCIsIm1pbiIsIm1heCIsImlzTmFOIiwic3RhdHVzIiwiaGVhZGVyIiwiY2h1bmsiLCJlIiwic2VuZCIsIm1lc3NhZ2UiLCJoYW5kbGVTaHV0ZG93biIsImNsb3NlIiwidmFsaWRhdGVGaWxlbmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9GaWxlcy9HcmlkRlNCdWNrZXRBZGFwdGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuIEdyaWRGU0J1Y2tldEFkYXB0ZXJcbiBTdG9yZXMgZmlsZXMgaW4gTW9uZ28gdXNpbmcgR3JpZEZTXG4gUmVxdWlyZXMgdGhlIGRhdGFiYXNlIGFkYXB0ZXIgdG8gYmUgYmFzZWQgb24gbW9uZ29jbGllbnRcblxuIEBmbG93IHdlYWtcbiAqL1xuXG4vLyBAZmxvdy1kaXNhYmxlLW5leHRcbmltcG9ydCB7IE1vbmdvQ2xpZW50LCBHcmlkRlNCdWNrZXQsIERiIH0gZnJvbSAnbW9uZ29kYic7XG5pbXBvcnQgeyBGaWxlc0FkYXB0ZXIsIHZhbGlkYXRlRmlsZW5hbWUgfSBmcm9tICcuL0ZpbGVzQWRhcHRlcic7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vLi4vZGVmYXVsdHMnO1xuY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG5cbmV4cG9ydCBjbGFzcyBHcmlkRlNCdWNrZXRBZGFwdGVyIGV4dGVuZHMgRmlsZXNBZGFwdGVyIHtcbiAgX2RhdGFiYXNlVVJJOiBzdHJpbmc7XG4gIF9jb25uZWN0aW9uUHJvbWlzZTogUHJvbWlzZTxEYj47XG4gIF9tb25nb09wdGlvbnM6IE9iamVjdDtcbiAgX2FsZ29yaXRobTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG1vbmdvRGF0YWJhc2VVUkkgPSBkZWZhdWx0cy5EZWZhdWx0TW9uZ29VUkksXG4gICAgbW9uZ29PcHRpb25zID0ge30sXG4gICAgZW5jcnlwdGlvbktleSA9IHVuZGVmaW5lZFxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2RhdGFiYXNlVVJJID0gbW9uZ29EYXRhYmFzZVVSSTtcbiAgICB0aGlzLl9hbGdvcml0aG0gPSAnYWVzLTI1Ni1nY20nO1xuICAgIHRoaXMuX2VuY3J5cHRpb25LZXkgPVxuICAgICAgZW5jcnlwdGlvbktleSAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShTdHJpbmcoZW5jcnlwdGlvbktleSkpLmRpZ2VzdCgnYmFzZTY0Jykuc3Vic3RyKDAsIDMyKVxuICAgICAgICA6IG51bGw7XG4gICAgY29uc3QgZGVmYXVsdE1vbmdvT3B0aW9ucyA9IHtcbiAgICAgIHVzZU5ld1VybFBhcnNlcjogdHJ1ZSxcbiAgICAgIHVzZVVuaWZpZWRUb3BvbG9neTogdHJ1ZSxcbiAgICB9O1xuICAgIHRoaXMuX21vbmdvT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oZGVmYXVsdE1vbmdvT3B0aW9ucywgbW9uZ29PcHRpb25zKTtcbiAgfVxuXG4gIF9jb25uZWN0KCkge1xuICAgIGlmICghdGhpcy5fY29ubmVjdGlvblByb21pc2UpIHtcbiAgICAgIHRoaXMuX2Nvbm5lY3Rpb25Qcm9taXNlID0gTW9uZ29DbGllbnQuY29ubmVjdCh0aGlzLl9kYXRhYmFzZVVSSSwgdGhpcy5fbW9uZ29PcHRpb25zKS50aGVuKFxuICAgICAgICBjbGllbnQgPT4ge1xuICAgICAgICAgIHRoaXMuX2NsaWVudCA9IGNsaWVudDtcbiAgICAgICAgICByZXR1cm4gY2xpZW50LmRiKGNsaWVudC5zLm9wdGlvbnMuZGJOYW1lKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25Qcm9taXNlO1xuICB9XG5cbiAgX2dldEJ1Y2tldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdCgpLnRoZW4oZGF0YWJhc2UgPT4gbmV3IEdyaWRGU0J1Y2tldChkYXRhYmFzZSkpO1xuICB9XG5cbiAgLy8gRm9yIGEgZ2l2ZW4gY29uZmlnIG9iamVjdCwgZmlsZW5hbWUsIGFuZCBkYXRhLCBzdG9yZSBhIGZpbGVcbiAgLy8gUmV0dXJucyBhIHByb21pc2VcbiAgYXN5bmMgY3JlYXRlRmlsZShmaWxlbmFtZTogc3RyaW5nLCBkYXRhLCBjb250ZW50VHlwZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgYnVja2V0ID0gYXdhaXQgdGhpcy5fZ2V0QnVja2V0KCk7XG4gICAgY29uc3Qgc3RyZWFtID0gYXdhaXQgYnVja2V0Lm9wZW5VcGxvYWRTdHJlYW0oZmlsZW5hbWUsIHtcbiAgICAgIG1ldGFkYXRhOiBvcHRpb25zLm1ldGFkYXRhLFxuICAgIH0pO1xuICAgIGlmICh0aGlzLl9lbmNyeXB0aW9uS2V5ICE9PSBudWxsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpdiA9IGNyeXB0by5yYW5kb21CeXRlcygxNik7XG4gICAgICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdih0aGlzLl9hbGdvcml0aG0sIHRoaXMuX2VuY3J5cHRpb25LZXksIGl2KTtcbiAgICAgICAgY29uc3QgZW5jcnlwdGVkUmVzdWx0ID0gQnVmZmVyLmNvbmNhdChbXG4gICAgICAgICAgY2lwaGVyLnVwZGF0ZShkYXRhKSxcbiAgICAgICAgICBjaXBoZXIuZmluYWwoKSxcbiAgICAgICAgICBpdixcbiAgICAgICAgICBjaXBoZXIuZ2V0QXV0aFRhZygpLFxuICAgICAgICBdKTtcbiAgICAgICAgYXdhaXQgc3RyZWFtLndyaXRlKGVuY3J5cHRlZFJlc3VsdCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBzdHJlYW0ud3JpdGUoZGF0YSk7XG4gICAgfVxuICAgIHN0cmVhbS5lbmQoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc3RyZWFtLm9uKCdmaW5pc2gnLCByZXNvbHZlKTtcbiAgICAgIHN0cmVhbS5vbignZXJyb3InLCByZWplY3QpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRmlsZShmaWxlbmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYnVja2V0ID0gYXdhaXQgdGhpcy5fZ2V0QnVja2V0KCk7XG4gICAgY29uc3QgZG9jdW1lbnRzID0gYXdhaXQgYnVja2V0LmZpbmQoeyBmaWxlbmFtZSB9KS50b0FycmF5KCk7XG4gICAgaWYgKGRvY3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmlsZU5vdEZvdW5kJyk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgIGRvY3VtZW50cy5tYXAoZG9jID0+IHtcbiAgICAgICAgcmV0dXJuIGJ1Y2tldC5kZWxldGUoZG9jLl9pZCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBhc3luYyBnZXRGaWxlRGF0YShmaWxlbmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYnVja2V0ID0gYXdhaXQgdGhpcy5fZ2V0QnVja2V0KCk7XG4gICAgY29uc3Qgc3RyZWFtID0gYnVja2V0Lm9wZW5Eb3dubG9hZFN0cmVhbUJ5TmFtZShmaWxlbmFtZSk7XG4gICAgc3RyZWFtLnJlYWQoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgY2h1bmtzID0gW107XG4gICAgICBzdHJlYW0ub24oJ2RhdGEnLCBkYXRhID0+IHtcbiAgICAgICAgY2h1bmtzLnB1c2goZGF0YSk7XG4gICAgICB9KTtcbiAgICAgIHN0cmVhbS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xuICAgICAgICBpZiAodGhpcy5fZW5jcnlwdGlvbktleSAhPT0gbnVsbCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBhdXRoVGFnTG9jYXRpb24gPSBkYXRhLmxlbmd0aCAtIDE2O1xuICAgICAgICAgICAgY29uc3QgaXZMb2NhdGlvbiA9IGRhdGEubGVuZ3RoIC0gMzI7XG4gICAgICAgICAgICBjb25zdCBhdXRoVGFnID0gZGF0YS5zbGljZShhdXRoVGFnTG9jYXRpb24pO1xuICAgICAgICAgICAgY29uc3QgaXYgPSBkYXRhLnNsaWNlKGl2TG9jYXRpb24sIGF1dGhUYWdMb2NhdGlvbik7XG4gICAgICAgICAgICBjb25zdCBlbmNyeXB0ZWQgPSBkYXRhLnNsaWNlKDAsIGl2TG9jYXRpb24pO1xuICAgICAgICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdih0aGlzLl9hbGdvcml0aG0sIHRoaXMuX2VuY3J5cHRpb25LZXksIGl2KTtcbiAgICAgICAgICAgIGRlY2lwaGVyLnNldEF1dGhUYWcoYXV0aFRhZyk7XG4gICAgICAgICAgICBjb25zdCBkZWNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtkZWNpcGhlci51cGRhdGUoZW5jcnlwdGVkKSwgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoZGVjcnlwdGVkKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIGVyciA9PiB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyByb3RhdGVFbmNyeXB0aW9uS2V5KG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciBmaWxlTmFtZXMgPSBbXTtcbiAgICB2YXIgb2xkS2V5RmlsZUFkYXB0ZXIgPSB7fTtcbiAgICBjb25zdCBidWNrZXQgPSBhd2FpdCB0aGlzLl9nZXRCdWNrZXQoKTtcbiAgICBpZiAob3B0aW9ucy5vbGRLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb2xkS2V5RmlsZUFkYXB0ZXIgPSBuZXcgR3JpZEZTQnVja2V0QWRhcHRlcihcbiAgICAgICAgdGhpcy5fZGF0YWJhc2VVUkksXG4gICAgICAgIHRoaXMuX21vbmdvT3B0aW9ucyxcbiAgICAgICAgb3B0aW9ucy5vbGRLZXlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sZEtleUZpbGVBZGFwdGVyID0gbmV3IEdyaWRGU0J1Y2tldEFkYXB0ZXIodGhpcy5fZGF0YWJhc2VVUkksIHRoaXMuX21vbmdvT3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmZpbGVOYW1lcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaWxlTmFtZXMgPSBvcHRpb25zLmZpbGVOYW1lcztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmlsZU5hbWVzSXRlcmF0b3IgPSBhd2FpdCBidWNrZXQuZmluZCgpLnRvQXJyYXkoKTtcbiAgICAgIGZpbGVOYW1lc0l0ZXJhdG9yLmZvckVhY2goZmlsZSA9PiB7XG4gICAgICAgIGZpbGVOYW1lcy5wdXNoKGZpbGUuZmlsZW5hbWUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIHZhciBmaWxlTmFtZXNOb3RSb3RhdGVkID0gZmlsZU5hbWVzO1xuICAgICAgdmFyIGZpbGVOYW1lc1JvdGF0ZWQgPSBbXTtcbiAgICAgIHZhciBmaWxlTmFtZVRvdGFsID0gZmlsZU5hbWVzLmxlbmd0aDtcbiAgICAgIHZhciBmaWxlTmFtZUluZGV4ID0gMDtcbiAgICAgIGZpbGVOYW1lcy5mb3JFYWNoKGZpbGVOYW1lID0+IHtcbiAgICAgICAgb2xkS2V5RmlsZUFkYXB0ZXJcbiAgICAgICAgICAuZ2V0RmlsZURhdGEoZmlsZU5hbWUpXG4gICAgICAgICAgLnRoZW4ocGxhaW5UZXh0RGF0YSA9PiB7XG4gICAgICAgICAgICAvL092ZXJ3cml0ZSBmaWxlIHdpdGggZGF0YSBlbmNyeXB0ZWQgd2l0aCBuZXcga2V5XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZpbGUoZmlsZU5hbWUsIHBsYWluVGV4dERhdGEpXG4gICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBmaWxlTmFtZXNSb3RhdGVkLnB1c2goZmlsZU5hbWUpO1xuICAgICAgICAgICAgICAgIGZpbGVOYW1lc05vdFJvdGF0ZWQgPSBmaWxlTmFtZXNOb3RSb3RhdGVkLmZpbHRlcihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPT0gZmlsZU5hbWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZmlsZU5hbWVJbmRleCArPSAxO1xuICAgICAgICAgICAgICAgIGlmIChmaWxlTmFtZUluZGV4ID09IGZpbGVOYW1lVG90YWwpIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICByb3RhdGVkOiBmaWxlTmFtZXNSb3RhdGVkLFxuICAgICAgICAgICAgICAgICAgICBub3RSb3RhdGVkOiBmaWxlTmFtZXNOb3RSb3RhdGVkLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZpbGVOYW1lSW5kZXggKz0gMTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZU5hbWVJbmRleCA9PSBmaWxlTmFtZVRvdGFsKSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgcm90YXRlZDogZmlsZU5hbWVzUm90YXRlZCxcbiAgICAgICAgICAgICAgICAgICAgbm90Um90YXRlZDogZmlsZU5hbWVzTm90Um90YXRlZCxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgZmlsZU5hbWVJbmRleCArPSAxO1xuICAgICAgICAgICAgaWYgKGZpbGVOYW1lSW5kZXggPT0gZmlsZU5hbWVUb3RhbCkge1xuICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICByb3RhdGVkOiBmaWxlTmFtZXNSb3RhdGVkLFxuICAgICAgICAgICAgICAgIG5vdFJvdGF0ZWQ6IGZpbGVOYW1lc05vdFJvdGF0ZWQsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRGaWxlTG9jYXRpb24oY29uZmlnLCBmaWxlbmFtZSkge1xuICAgIHJldHVybiBjb25maWcubW91bnQgKyAnL2ZpbGVzLycgKyBjb25maWcuYXBwbGljYXRpb25JZCArICcvJyArIGVuY29kZVVSSUNvbXBvbmVudChmaWxlbmFtZSk7XG4gIH1cblxuICBhc3luYyBnZXRNZXRhZGF0YShmaWxlbmFtZSkge1xuICAgIGNvbnN0IGJ1Y2tldCA9IGF3YWl0IHRoaXMuX2dldEJ1Y2tldCgpO1xuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgYnVja2V0LmZpbmQoeyBmaWxlbmFtZSB9KS50b0FycmF5KCk7XG4gICAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCB7IG1ldGFkYXRhIH0gPSBmaWxlc1swXTtcbiAgICByZXR1cm4geyBtZXRhZGF0YSB9O1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlRmlsZVN0cmVhbShmaWxlbmFtZTogc3RyaW5nLCByZXEsIHJlcywgY29udGVudFR5cGUpIHtcbiAgICBjb25zdCBidWNrZXQgPSBhd2FpdCB0aGlzLl9nZXRCdWNrZXQoKTtcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGJ1Y2tldC5maW5kKHsgZmlsZW5hbWUgfSkudG9BcnJheSgpO1xuICAgIGlmIChmaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmlsZU5vdEZvdW5kJyk7XG4gICAgfVxuICAgIGNvbnN0IHBhcnRzID0gcmVxXG4gICAgICAuZ2V0KCdSYW5nZScpXG4gICAgICAucmVwbGFjZSgvYnl0ZXM9LywgJycpXG4gICAgICAuc3BsaXQoJy0nKTtcbiAgICBjb25zdCBwYXJ0aWFsc3RhcnQgPSBwYXJ0c1swXTtcbiAgICBjb25zdCBwYXJ0aWFsZW5kID0gcGFydHNbMV07XG5cbiAgICBjb25zdCBmaWxlTGVuZ3RoID0gZmlsZXNbMF0ubGVuZ3RoO1xuICAgIGNvbnN0IGZpbGVTdGFydCA9IHBhcnNlSW50KHBhcnRpYWxzdGFydCwgMTApO1xuICAgIGNvbnN0IGZpbGVFbmQgPSBwYXJ0aWFsZW5kID8gcGFyc2VJbnQocGFydGlhbGVuZCwgMTApIDogZmlsZUxlbmd0aDtcblxuICAgIGxldCBzdGFydCA9IE1hdGgubWluKGZpbGVTdGFydCB8fCAwLCBmaWxlRW5kLCBmaWxlTGVuZ3RoKTtcbiAgICBsZXQgZW5kID0gTWF0aC5tYXgoZmlsZVN0YXJ0IHx8IDAsIGZpbGVFbmQpICsgMSB8fCBmaWxlTGVuZ3RoO1xuICAgIGlmIChpc05hTihmaWxlU3RhcnQpKSB7XG4gICAgICBzdGFydCA9IGZpbGVMZW5ndGggLSBlbmQgKyAxO1xuICAgICAgZW5kID0gZmlsZUxlbmd0aDtcbiAgICB9XG4gICAgZW5kID0gTWF0aC5taW4oZW5kLCBmaWxlTGVuZ3RoKTtcbiAgICBzdGFydCA9IE1hdGgubWF4KHN0YXJ0LCAwKTtcblxuICAgIHJlcy5zdGF0dXMoMjA2KTtcbiAgICByZXMuaGVhZGVyKCdBY2NlcHQtUmFuZ2VzJywgJ2J5dGVzJyk7XG4gICAgcmVzLmhlYWRlcignQ29udGVudC1MZW5ndGgnLCBlbmQgLSBzdGFydCk7XG4gICAgcmVzLmhlYWRlcignQ29udGVudC1SYW5nZScsICdieXRlcyAnICsgc3RhcnQgKyAnLScgKyBlbmQgKyAnLycgKyBmaWxlTGVuZ3RoKTtcbiAgICByZXMuaGVhZGVyKCdDb250ZW50LVR5cGUnLCBjb250ZW50VHlwZSk7XG4gICAgY29uc3Qgc3RyZWFtID0gYnVja2V0Lm9wZW5Eb3dubG9hZFN0cmVhbUJ5TmFtZShmaWxlbmFtZSk7XG4gICAgc3RyZWFtLnN0YXJ0KHN0YXJ0KTtcbiAgICBpZiAoZW5kKSB7XG4gICAgICBzdHJlYW0uZW5kKGVuZCk7XG4gICAgfVxuICAgIHN0cmVhbS5vbignZGF0YScsIGNodW5rID0+IHtcbiAgICAgIHJlcy53cml0ZShjaHVuayk7XG4gICAgfSk7XG4gICAgc3RyZWFtLm9uKCdlcnJvcicsIGUgPT4ge1xuICAgICAgcmVzLnN0YXR1cyg0MDQpO1xuICAgICAgcmVzLnNlbmQoZS5tZXNzYWdlKTtcbiAgICB9KTtcbiAgICBzdHJlYW0ub24oJ2VuZCcsICgpID0+IHtcbiAgICAgIHJlcy5lbmQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVNodXRkb3duKCkge1xuICAgIGlmICghdGhpcy5fY2xpZW50KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jbGllbnQuY2xvc2UoZmFsc2UpO1xuICB9XG5cbiAgdmFsaWRhdGVGaWxlbmFtZShmaWxlbmFtZSkge1xuICAgIHJldHVybiB2YWxpZGF0ZUZpbGVuYW1lKGZpbGVuYW1lKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBHcmlkRlNCdWNrZXRBZGFwdGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFBc0M7QUFYdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBSUEsTUFBTUEsTUFBTSxHQUFHQyxPQUFPLENBQUMsUUFBUSxDQUFDO0FBRXpCLE1BQU1DLG1CQUFtQixTQUFTQywwQkFBWSxDQUFDO0VBTXBEQyxXQUFXLENBQ1RDLGdCQUFnQixHQUFHQyxpQkFBUSxDQUFDQyxlQUFlLEVBQzNDQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLEVBQ2pCQyxhQUFhLEdBQUdDLFNBQVMsRUFDekI7SUFDQSxLQUFLLEVBQUU7SUFDUCxJQUFJLENBQUNDLFlBQVksR0FBR04sZ0JBQWdCO0lBQ3BDLElBQUksQ0FBQ08sVUFBVSxHQUFHLGFBQWE7SUFDL0IsSUFBSSxDQUFDQyxjQUFjLEdBQ2pCSixhQUFhLEtBQUtDLFNBQVMsR0FDdkJWLE1BQU0sQ0FBQ2MsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDQyxNQUFNLENBQUNDLE1BQU0sQ0FBQ1AsYUFBYSxDQUFDLENBQUMsQ0FBQ1EsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUN4RixJQUFJO0lBQ1YsTUFBTUMsbUJBQW1CLEdBQUc7TUFDMUJDLGVBQWUsRUFBRSxJQUFJO01BQ3JCQyxrQkFBa0IsRUFBRTtJQUN0QixDQUFDO0lBQ0QsSUFBSSxDQUFDQyxhQUFhLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDTCxtQkFBbUIsRUFBRVgsWUFBWSxDQUFDO0VBQ3ZFO0VBRUFpQixRQUFRLEdBQUc7SUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDQyxrQkFBa0IsRUFBRTtNQUM1QixJQUFJLENBQUNBLGtCQUFrQixHQUFHQyxvQkFBVyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDakIsWUFBWSxFQUFFLElBQUksQ0FBQ1csYUFBYSxDQUFDLENBQUNPLElBQUksQ0FDdkZDLE1BQU0sSUFBSTtRQUNSLElBQUksQ0FBQ0MsT0FBTyxHQUFHRCxNQUFNO1FBQ3JCLE9BQU9BLE1BQU0sQ0FBQ0UsRUFBRSxDQUFDRixNQUFNLENBQUNHLENBQUMsQ0FBQ0MsT0FBTyxDQUFDQyxNQUFNLENBQUM7TUFDM0MsQ0FBQyxDQUNGO0lBQ0g7SUFDQSxPQUFPLElBQUksQ0FBQ1Qsa0JBQWtCO0VBQ2hDO0VBRUFVLFVBQVUsR0FBRztJQUNYLE9BQU8sSUFBSSxDQUFDWCxRQUFRLEVBQUUsQ0FBQ0ksSUFBSSxDQUFDUSxRQUFRLElBQUksSUFBSUMscUJBQVksQ0FBQ0QsUUFBUSxDQUFDLENBQUM7RUFDckU7O0VBRUE7RUFDQTtFQUNBLE1BQU1FLFVBQVUsQ0FBQ0MsUUFBZ0IsRUFBRUMsSUFBSSxFQUFFQyxXQUFXLEVBQUVSLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRTtJQUNsRSxNQUFNUyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUNQLFVBQVUsRUFBRTtJQUN0QyxNQUFNUSxNQUFNLEdBQUcsTUFBTUQsTUFBTSxDQUFDRSxnQkFBZ0IsQ0FBQ0wsUUFBUSxFQUFFO01BQ3JETSxRQUFRLEVBQUVaLE9BQU8sQ0FBQ1k7SUFDcEIsQ0FBQyxDQUFDO0lBQ0YsSUFBSSxJQUFJLENBQUNqQyxjQUFjLEtBQUssSUFBSSxFQUFFO01BQ2hDLElBQUk7UUFDRixNQUFNa0MsRUFBRSxHQUFHL0MsTUFBTSxDQUFDZ0QsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUNqQyxNQUFNQyxNQUFNLEdBQUdqRCxNQUFNLENBQUNrRCxjQUFjLENBQUMsSUFBSSxDQUFDdEMsVUFBVSxFQUFFLElBQUksQ0FBQ0MsY0FBYyxFQUFFa0MsRUFBRSxDQUFDO1FBQzlFLE1BQU1JLGVBQWUsR0FBR0MsTUFBTSxDQUFDQyxNQUFNLENBQUMsQ0FDcENKLE1BQU0sQ0FBQ2xDLE1BQU0sQ0FBQzBCLElBQUksQ0FBQyxFQUNuQlEsTUFBTSxDQUFDSyxLQUFLLEVBQUUsRUFDZFAsRUFBRSxFQUNGRSxNQUFNLENBQUNNLFVBQVUsRUFBRSxDQUNwQixDQUFDO1FBQ0YsTUFBTVgsTUFBTSxDQUFDWSxLQUFLLENBQUNMLGVBQWUsQ0FBQztNQUNyQyxDQUFDLENBQUMsT0FBT00sR0FBRyxFQUFFO1FBQ1osT0FBTyxJQUFJQyxPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7VUFDdEMsT0FBT0EsTUFBTSxDQUFDSCxHQUFHLENBQUM7UUFDcEIsQ0FBQyxDQUFDO01BQ0o7SUFDRixDQUFDLE1BQU07TUFDTCxNQUFNYixNQUFNLENBQUNZLEtBQUssQ0FBQ2YsSUFBSSxDQUFDO0lBQzFCO0lBQ0FHLE1BQU0sQ0FBQ2lCLEdBQUcsRUFBRTtJQUNaLE9BQU8sSUFBSUgsT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFLO01BQ3RDaEIsTUFBTSxDQUFDa0IsRUFBRSxDQUFDLFFBQVEsRUFBRUgsT0FBTyxDQUFDO01BQzVCZixNQUFNLENBQUNrQixFQUFFLENBQUMsT0FBTyxFQUFFRixNQUFNLENBQUM7SUFDNUIsQ0FBQyxDQUFDO0VBQ0o7RUFFQSxNQUFNRyxVQUFVLENBQUN2QixRQUFnQixFQUFFO0lBQ2pDLE1BQU1HLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQ1AsVUFBVSxFQUFFO0lBQ3RDLE1BQU00QixTQUFTLEdBQUcsTUFBTXJCLE1BQU0sQ0FBQ3NCLElBQUksQ0FBQztNQUFFekI7SUFBUyxDQUFDLENBQUMsQ0FBQzBCLE9BQU8sRUFBRTtJQUMzRCxJQUFJRixTQUFTLENBQUNHLE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFDMUIsTUFBTSxJQUFJQyxLQUFLLENBQUMsY0FBYyxDQUFDO0lBQ2pDO0lBQ0EsT0FBT1YsT0FBTyxDQUFDVyxHQUFHLENBQ2hCTCxTQUFTLENBQUNNLEdBQUcsQ0FBQ0MsR0FBRyxJQUFJO01BQ25CLE9BQU81QixNQUFNLENBQUM2QixNQUFNLENBQUNELEdBQUcsQ0FBQ0UsR0FBRyxDQUFDO0lBQy9CLENBQUMsQ0FBQyxDQUNIO0VBQ0g7RUFFQSxNQUFNQyxXQUFXLENBQUNsQyxRQUFnQixFQUFFO0lBQ2xDLE1BQU1HLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQ1AsVUFBVSxFQUFFO0lBQ3RDLE1BQU1RLE1BQU0sR0FBR0QsTUFBTSxDQUFDZ0Msd0JBQXdCLENBQUNuQyxRQUFRLENBQUM7SUFDeERJLE1BQU0sQ0FBQ2dDLElBQUksRUFBRTtJQUNiLE9BQU8sSUFBSWxCLE9BQU8sQ0FBQyxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztNQUN0QyxNQUFNaUIsTUFBTSxHQUFHLEVBQUU7TUFDakJqQyxNQUFNLENBQUNrQixFQUFFLENBQUMsTUFBTSxFQUFFckIsSUFBSSxJQUFJO1FBQ3hCb0MsTUFBTSxDQUFDQyxJQUFJLENBQUNyQyxJQUFJLENBQUM7TUFDbkIsQ0FBQyxDQUFDO01BQ0ZHLE1BQU0sQ0FBQ2tCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTTtRQUNyQixNQUFNckIsSUFBSSxHQUFHVyxNQUFNLENBQUNDLE1BQU0sQ0FBQ3dCLE1BQU0sQ0FBQztRQUNsQyxJQUFJLElBQUksQ0FBQ2hFLGNBQWMsS0FBSyxJQUFJLEVBQUU7VUFDaEMsSUFBSTtZQUNGLE1BQU1rRSxlQUFlLEdBQUd0QyxJQUFJLENBQUMwQixNQUFNLEdBQUcsRUFBRTtZQUN4QyxNQUFNYSxVQUFVLEdBQUd2QyxJQUFJLENBQUMwQixNQUFNLEdBQUcsRUFBRTtZQUNuQyxNQUFNYyxPQUFPLEdBQUd4QyxJQUFJLENBQUN5QyxLQUFLLENBQUNILGVBQWUsQ0FBQztZQUMzQyxNQUFNaEMsRUFBRSxHQUFHTixJQUFJLENBQUN5QyxLQUFLLENBQUNGLFVBQVUsRUFBRUQsZUFBZSxDQUFDO1lBQ2xELE1BQU1JLFNBQVMsR0FBRzFDLElBQUksQ0FBQ3lDLEtBQUssQ0FBQyxDQUFDLEVBQUVGLFVBQVUsQ0FBQztZQUMzQyxNQUFNSSxRQUFRLEdBQUdwRixNQUFNLENBQUNxRixnQkFBZ0IsQ0FBQyxJQUFJLENBQUN6RSxVQUFVLEVBQUUsSUFBSSxDQUFDQyxjQUFjLEVBQUVrQyxFQUFFLENBQUM7WUFDbEZxQyxRQUFRLENBQUNFLFVBQVUsQ0FBQ0wsT0FBTyxDQUFDO1lBQzVCLE1BQU1NLFNBQVMsR0FBR25DLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMrQixRQUFRLENBQUNyRSxNQUFNLENBQUNvRSxTQUFTLENBQUMsRUFBRUMsUUFBUSxDQUFDOUIsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUMvRSxPQUFPSyxPQUFPLENBQUM0QixTQUFTLENBQUM7VUFDM0IsQ0FBQyxDQUFDLE9BQU85QixHQUFHLEVBQUU7WUFDWixPQUFPRyxNQUFNLENBQUNILEdBQUcsQ0FBQztVQUNwQjtRQUNGO1FBQ0FFLE9BQU8sQ0FBQ2xCLElBQUksQ0FBQztNQUNmLENBQUMsQ0FBQztNQUNGRyxNQUFNLENBQUNrQixFQUFFLENBQUMsT0FBTyxFQUFFTCxHQUFHLElBQUk7UUFDeEJHLE1BQU0sQ0FBQ0gsR0FBRyxDQUFDO01BQ2IsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDO0VBQ0o7RUFFQSxNQUFNK0IsbUJBQW1CLENBQUN0RCxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDdEMsSUFBSXVELFNBQVMsR0FBRyxFQUFFO0lBQ2xCLElBQUlDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztJQUMxQixNQUFNL0MsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDUCxVQUFVLEVBQUU7SUFDdEMsSUFBSUYsT0FBTyxDQUFDeUQsTUFBTSxLQUFLakYsU0FBUyxFQUFFO01BQ2hDZ0YsaUJBQWlCLEdBQUcsSUFBSXhGLG1CQUFtQixDQUN6QyxJQUFJLENBQUNTLFlBQVksRUFDakIsSUFBSSxDQUFDVyxhQUFhLEVBQ2xCWSxPQUFPLENBQUN5RCxNQUFNLENBQ2Y7SUFDSCxDQUFDLE1BQU07TUFDTEQsaUJBQWlCLEdBQUcsSUFBSXhGLG1CQUFtQixDQUFDLElBQUksQ0FBQ1MsWUFBWSxFQUFFLElBQUksQ0FBQ1csYUFBYSxDQUFDO0lBQ3BGO0lBQ0EsSUFBSVksT0FBTyxDQUFDdUQsU0FBUyxLQUFLL0UsU0FBUyxFQUFFO01BQ25DK0UsU0FBUyxHQUFHdkQsT0FBTyxDQUFDdUQsU0FBUztJQUMvQixDQUFDLE1BQU07TUFDTCxNQUFNRyxpQkFBaUIsR0FBRyxNQUFNakQsTUFBTSxDQUFDc0IsSUFBSSxFQUFFLENBQUNDLE9BQU8sRUFBRTtNQUN2RDBCLGlCQUFpQixDQUFDQyxPQUFPLENBQUNDLElBQUksSUFBSTtRQUNoQ0wsU0FBUyxDQUFDWCxJQUFJLENBQUNnQixJQUFJLENBQUN0RCxRQUFRLENBQUM7TUFDL0IsQ0FBQyxDQUFDO0lBQ0o7SUFDQSxPQUFPLElBQUlrQixPQUFPLENBQUNDLE9BQU8sSUFBSTtNQUM1QixJQUFJb0MsbUJBQW1CLEdBQUdOLFNBQVM7TUFDbkMsSUFBSU8sZ0JBQWdCLEdBQUcsRUFBRTtNQUN6QixJQUFJQyxhQUFhLEdBQUdSLFNBQVMsQ0FBQ3RCLE1BQU07TUFDcEMsSUFBSStCLGFBQWEsR0FBRyxDQUFDO01BQ3JCVCxTQUFTLENBQUNJLE9BQU8sQ0FBQ00sUUFBUSxJQUFJO1FBQzVCVCxpQkFBaUIsQ0FDZGhCLFdBQVcsQ0FBQ3lCLFFBQVEsQ0FBQyxDQUNyQnRFLElBQUksQ0FBQ3VFLGFBQWEsSUFBSTtVQUNyQjtVQUNBLElBQUksQ0FBQzdELFVBQVUsQ0FBQzRELFFBQVEsRUFBRUMsYUFBYSxDQUFDLENBQ3JDdkUsSUFBSSxDQUFDLE1BQU07WUFDVm1FLGdCQUFnQixDQUFDbEIsSUFBSSxDQUFDcUIsUUFBUSxDQUFDO1lBQy9CSixtQkFBbUIsR0FBR0EsbUJBQW1CLENBQUNNLE1BQU0sQ0FBQyxVQUFVQyxLQUFLLEVBQUU7Y0FDaEUsT0FBT0EsS0FBSyxLQUFLSCxRQUFRO1lBQzNCLENBQUMsQ0FBQztZQUNGRCxhQUFhLElBQUksQ0FBQztZQUNsQixJQUFJQSxhQUFhLElBQUlELGFBQWEsRUFBRTtjQUNsQ3RDLE9BQU8sQ0FBQztnQkFDTjRDLE9BQU8sRUFBRVAsZ0JBQWdCO2dCQUN6QlEsVUFBVSxFQUFFVDtjQUNkLENBQUMsQ0FBQztZQUNKO1VBQ0YsQ0FBQyxDQUFDLENBQ0RVLEtBQUssQ0FBQyxNQUFNO1lBQ1hQLGFBQWEsSUFBSSxDQUFDO1lBQ2xCLElBQUlBLGFBQWEsSUFBSUQsYUFBYSxFQUFFO2NBQ2xDdEMsT0FBTyxDQUFDO2dCQUNONEMsT0FBTyxFQUFFUCxnQkFBZ0I7Z0JBQ3pCUSxVQUFVLEVBQUVUO2NBQ2QsQ0FBQyxDQUFDO1lBQ0o7VUFDRixDQUFDLENBQUM7UUFDTixDQUFDLENBQUMsQ0FDRFUsS0FBSyxDQUFDLE1BQU07VUFDWFAsYUFBYSxJQUFJLENBQUM7VUFDbEIsSUFBSUEsYUFBYSxJQUFJRCxhQUFhLEVBQUU7WUFDbEN0QyxPQUFPLENBQUM7Y0FDTjRDLE9BQU8sRUFBRVAsZ0JBQWdCO2NBQ3pCUSxVQUFVLEVBQUVUO1lBQ2QsQ0FBQyxDQUFDO1VBQ0o7UUFDRixDQUFDLENBQUM7TUFDTixDQUFDLENBQUM7SUFDSixDQUFDLENBQUM7RUFDSjtFQUVBVyxlQUFlLENBQUNDLE1BQU0sRUFBRW5FLFFBQVEsRUFBRTtJQUNoQyxPQUFPbUUsTUFBTSxDQUFDQyxLQUFLLEdBQUcsU0FBUyxHQUFHRCxNQUFNLENBQUNFLGFBQWEsR0FBRyxHQUFHLEdBQUdDLGtCQUFrQixDQUFDdEUsUUFBUSxDQUFDO0VBQzdGO0VBRUEsTUFBTXVFLFdBQVcsQ0FBQ3ZFLFFBQVEsRUFBRTtJQUMxQixNQUFNRyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUNQLFVBQVUsRUFBRTtJQUN0QyxNQUFNNEUsS0FBSyxHQUFHLE1BQU1yRSxNQUFNLENBQUNzQixJQUFJLENBQUM7TUFBRXpCO0lBQVMsQ0FBQyxDQUFDLENBQUMwQixPQUFPLEVBQUU7SUFDdkQsSUFBSThDLEtBQUssQ0FBQzdDLE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFDdEIsT0FBTyxDQUFDLENBQUM7SUFDWDtJQUNBLE1BQU07TUFBRXJCO0lBQVMsQ0FBQyxHQUFHa0UsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM3QixPQUFPO01BQUVsRTtJQUFTLENBQUM7RUFDckI7RUFFQSxNQUFNbUUsZ0JBQWdCLENBQUN6RSxRQUFnQixFQUFFMEUsR0FBRyxFQUFFQyxHQUFHLEVBQUV6RSxXQUFXLEVBQUU7SUFDOUQsTUFBTUMsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDUCxVQUFVLEVBQUU7SUFDdEMsTUFBTTRFLEtBQUssR0FBRyxNQUFNckUsTUFBTSxDQUFDc0IsSUFBSSxDQUFDO01BQUV6QjtJQUFTLENBQUMsQ0FBQyxDQUFDMEIsT0FBTyxFQUFFO0lBQ3ZELElBQUk4QyxLQUFLLENBQUM3QyxNQUFNLEtBQUssQ0FBQyxFQUFFO01BQ3RCLE1BQU0sSUFBSUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztJQUNqQztJQUNBLE1BQU1nRCxLQUFLLEdBQUdGLEdBQUcsQ0FDZEcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUNaQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUNyQkMsS0FBSyxDQUFDLEdBQUcsQ0FBQztJQUNiLE1BQU1DLFlBQVksR0FBR0osS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM3QixNQUFNSyxVQUFVLEdBQUdMLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFFM0IsTUFBTU0sVUFBVSxHQUFHVixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM3QyxNQUFNO0lBQ2xDLE1BQU13RCxTQUFTLEdBQUdDLFFBQVEsQ0FBQ0osWUFBWSxFQUFFLEVBQUUsQ0FBQztJQUM1QyxNQUFNSyxPQUFPLEdBQUdKLFVBQVUsR0FBR0csUUFBUSxDQUFDSCxVQUFVLEVBQUUsRUFBRSxDQUFDLEdBQUdDLFVBQVU7SUFFbEUsSUFBSUksS0FBSyxHQUFHQyxJQUFJLENBQUNDLEdBQUcsQ0FBQ0wsU0FBUyxJQUFJLENBQUMsRUFBRUUsT0FBTyxFQUFFSCxVQUFVLENBQUM7SUFDekQsSUFBSTdELEdBQUcsR0FBR2tFLElBQUksQ0FBQ0UsR0FBRyxDQUFDTixTQUFTLElBQUksQ0FBQyxFQUFFRSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUlILFVBQVU7SUFDN0QsSUFBSVEsS0FBSyxDQUFDUCxTQUFTLENBQUMsRUFBRTtNQUNwQkcsS0FBSyxHQUFHSixVQUFVLEdBQUc3RCxHQUFHLEdBQUcsQ0FBQztNQUM1QkEsR0FBRyxHQUFHNkQsVUFBVTtJQUNsQjtJQUNBN0QsR0FBRyxHQUFHa0UsSUFBSSxDQUFDQyxHQUFHLENBQUNuRSxHQUFHLEVBQUU2RCxVQUFVLENBQUM7SUFDL0JJLEtBQUssR0FBR0MsSUFBSSxDQUFDRSxHQUFHLENBQUNILEtBQUssRUFBRSxDQUFDLENBQUM7SUFFMUJYLEdBQUcsQ0FBQ2dCLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDZmhCLEdBQUcsQ0FBQ2lCLE1BQU0sQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDO0lBQ3BDakIsR0FBRyxDQUFDaUIsTUFBTSxDQUFDLGdCQUFnQixFQUFFdkUsR0FBRyxHQUFHaUUsS0FBSyxDQUFDO0lBQ3pDWCxHQUFHLENBQUNpQixNQUFNLENBQUMsZUFBZSxFQUFFLFFBQVEsR0FBR04sS0FBSyxHQUFHLEdBQUcsR0FBR2pFLEdBQUcsR0FBRyxHQUFHLEdBQUc2RCxVQUFVLENBQUM7SUFDNUVQLEdBQUcsQ0FBQ2lCLE1BQU0sQ0FBQyxjQUFjLEVBQUUxRixXQUFXLENBQUM7SUFDdkMsTUFBTUUsTUFBTSxHQUFHRCxNQUFNLENBQUNnQyx3QkFBd0IsQ0FBQ25DLFFBQVEsQ0FBQztJQUN4REksTUFBTSxDQUFDa0YsS0FBSyxDQUFDQSxLQUFLLENBQUM7SUFDbkIsSUFBSWpFLEdBQUcsRUFBRTtNQUNQakIsTUFBTSxDQUFDaUIsR0FBRyxDQUFDQSxHQUFHLENBQUM7SUFDakI7SUFDQWpCLE1BQU0sQ0FBQ2tCLEVBQUUsQ0FBQyxNQUFNLEVBQUV1RSxLQUFLLElBQUk7TUFDekJsQixHQUFHLENBQUMzRCxLQUFLLENBQUM2RSxLQUFLLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0lBQ0Z6RixNQUFNLENBQUNrQixFQUFFLENBQUMsT0FBTyxFQUFFd0UsQ0FBQyxJQUFJO01BQ3RCbkIsR0FBRyxDQUFDZ0IsTUFBTSxDQUFDLEdBQUcsQ0FBQztNQUNmaEIsR0FBRyxDQUFDb0IsSUFBSSxDQUFDRCxDQUFDLENBQUNFLE9BQU8sQ0FBQztJQUNyQixDQUFDLENBQUM7SUFDRjVGLE1BQU0sQ0FBQ2tCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTTtNQUNyQnFELEdBQUcsQ0FBQ3RELEdBQUcsRUFBRTtJQUNYLENBQUMsQ0FBQztFQUNKO0VBRUE0RSxjQUFjLEdBQUc7SUFDZixJQUFJLENBQUMsSUFBSSxDQUFDMUcsT0FBTyxFQUFFO01BQ2pCLE9BQU8yQixPQUFPLENBQUNDLE9BQU8sRUFBRTtJQUMxQjtJQUNBLE9BQU8sSUFBSSxDQUFDNUIsT0FBTyxDQUFDMkcsS0FBSyxDQUFDLEtBQUssQ0FBQztFQUNsQztFQUVBQyxnQkFBZ0IsQ0FBQ25HLFFBQVEsRUFBRTtJQUN6QixPQUFPLElBQUFtRyw4QkFBZ0IsRUFBQ25HLFFBQVEsQ0FBQztFQUNuQztBQUNGO0FBQUM7QUFBQSxlQUVjdEMsbUJBQW1CO0FBQUEifQ==
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
|
|
3
3
|
// Note: GridStore was replaced by GridFSBucketAdapter by default in 2018 by @flovilmart
|
|
4
4
|
throw new Error('GridStoreAdapter: GridStore is no longer supported by parse server and mongodb, use GridFSBucketAdapter instead.');
|
|
5
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFcnJvciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9GaWxlcy9HcmlkU3RvcmVBZGFwdGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIE5vdGU6IEdyaWRTdG9yZSB3YXMgcmVwbGFjZWQgYnkgR3JpZEZTQnVja2V0QWRhcHRlciBieSBkZWZhdWx0IGluIDIwMTggYnkgQGZsb3ZpbG1hcnRcbnRocm93IG5ldyBFcnJvcihcbiAgJ0dyaWRTdG9yZUFkYXB0ZXI6IEdyaWRTdG9yZSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IHBhcnNlIHNlcnZlciBhbmQgbW9uZ29kYiwgdXNlIEdyaWRGU0J1Y2tldEFkYXB0ZXIgaW5zdGVhZC4nXG4pO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0EsTUFBTSxJQUFJQSxLQUFLLENBQ2Isa0hBQWtILENBQ25IIn0=
|
|
@@ -4,13 +4,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = exports.LoggerAdapter = void 0;
|
|
7
|
-
|
|
8
7
|
/*eslint no-unused-vars: "off"*/
|
|
9
|
-
|
|
10
8
|
/**
|
|
11
9
|
* @module Adapters
|
|
12
10
|
*/
|
|
13
|
-
|
|
14
11
|
/**
|
|
15
12
|
* @interface LoggerAdapter
|
|
16
13
|
* Logger Adapter
|
|
@@ -25,15 +22,9 @@ class LoggerAdapter {
|
|
|
25
22
|
* @param {String} message
|
|
26
23
|
* @param {Object} metadata
|
|
27
24
|
*/
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
log(level, message
|
|
31
|
-
/* meta */
|
|
32
|
-
) {}
|
|
33
|
-
|
|
25
|
+
log(level, message /* meta */) {}
|
|
34
26
|
}
|
|
35
|
-
|
|
36
27
|
exports.LoggerAdapter = LoggerAdapter;
|
|
37
28
|
var _default = LoggerAdapter;
|
|
38
29
|
exports.default = _default;
|
|
39
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMb2dnZXJBZGFwdGVyIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwibG9nIiwibGV2ZWwiLCJtZXNzYWdlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0xvZ2dlci9Mb2dnZXJBZGFwdGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiKi9cbi8qKlxuICogQG1vZHVsZSBBZGFwdGVyc1xuICovXG4vKipcbiAqIEBpbnRlcmZhY2UgTG9nZ2VyQWRhcHRlclxuICogTG9nZ2VyIEFkYXB0ZXJcbiAqIEFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBsb2dnZXIgbWVjaGFuaXNtXG4gKiBEZWZhdWx0IGlzIFdpbnN0b25Mb2dnZXJBZGFwdGVyLmpzXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2dnZXJBZGFwdGVyIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge31cbiAgLyoqXG4gICAqIGxvZ1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbGV2ZWxcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2VcbiAgICogQHBhcmFtIHtPYmplY3R9IG1ldGFkYXRhXG4gICAqL1xuICBsb2cobGV2ZWwsIG1lc3NhZ2UgLyogbWV0YSAqLykge31cbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9nZ2VyQWRhcHRlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxNQUFNQSxhQUFhLENBQUM7RUFDekJDLFdBQVcsQ0FBQ0MsT0FBTyxFQUFFLENBQUM7RUFDdEI7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0VDLEdBQUcsQ0FBQ0MsS0FBSyxFQUFFQyxPQUFPLENBQUMsWUFBWSxDQUFDO0FBQ2xDO0FBQUM7QUFBQSxlQUVjTCxhQUFhO0FBQUEifQ==
|