parse-server 9.5.2-alpha.9 → 9.6.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.
- package/lib/Adapters/Auth/ldap.js +30 -4
- package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +51 -2
- package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +53 -7
- package/lib/Config.js +14 -2
- package/lib/Controllers/DatabaseController.js +14 -1
- package/lib/Options/Definitions.js +9 -3
- package/lib/Options/docs.js +4 -3
- package/lib/Options/index.js +1 -1
- package/lib/RestWrite.js +22 -7
- package/lib/Routers/FilesRouter.js +16 -2
- package/lib/SharedRest.js +2 -2
- package/lib/batch.js +41 -1
- package/lib/cloud-code/Parse.Cloud.js +3 -1
- package/lib/defaults.js +2 -2
- package/lib/middlewares.js +6 -1
- package/lib/triggers.js +4 -1
- package/package.json +1 -1
|
@@ -76,6 +76,26 @@
|
|
|
76
76
|
|
|
77
77
|
const ldapjs = require('ldapjs');
|
|
78
78
|
const Parse = require('parse/node').Parse;
|
|
79
|
+
|
|
80
|
+
// Escape LDAP DN special characters per RFC 4514
|
|
81
|
+
// https://datatracker.ietf.org/doc/html/rfc4514#section-2.4
|
|
82
|
+
function escapeDN(value) {
|
|
83
|
+
let escaped = value.replace(/\\/g, '\\\\').replace(/,/g, '\\,').replace(/=/g, '\\=').replace(/\+/g, '\\+').replace(/</g, '\\<').replace(/>/g, '\\>').replace(/#/g, '\\#').replace(/;/g, '\\;').replace(/"/g, '\\"');
|
|
84
|
+
if (escaped.startsWith(' ')) {
|
|
85
|
+
escaped = '\\ ' + escaped.slice(1);
|
|
86
|
+
}
|
|
87
|
+
if (escaped.endsWith(' ')) {
|
|
88
|
+
escaped = escaped.slice(0, -1) + '\\ ';
|
|
89
|
+
}
|
|
90
|
+
return escaped;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Escape LDAP filter special characters per RFC 4515
|
|
94
|
+
// https://datatracker.ietf.org/doc/html/rfc4515#section-3
|
|
95
|
+
function escapeFilter(value) {
|
|
96
|
+
// eslint-disable-next-line no-control-regex
|
|
97
|
+
return value.replace(/[\\*()\x00]/g, ch => '\\' + ch.charCodeAt(0).toString(16).padStart(2, '0'));
|
|
98
|
+
}
|
|
79
99
|
function validateAuthData(authData, options) {
|
|
80
100
|
if (!optionsAreValid(options)) {
|
|
81
101
|
return new Promise((_, reject) => {
|
|
@@ -88,8 +108,12 @@ function validateAuthData(authData, options) {
|
|
|
88
108
|
} : {
|
|
89
109
|
url: options.url
|
|
90
110
|
};
|
|
111
|
+
if (typeof authData.id !== 'string') {
|
|
112
|
+
return Promise.reject(new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'LDAP: Wrong username or password'));
|
|
113
|
+
}
|
|
91
114
|
const client = ldapjs.createClient(clientOptions);
|
|
92
|
-
const
|
|
115
|
+
const escapedId = escapeDN(authData.id);
|
|
116
|
+
const userCn = typeof options.dn === 'string' ? options.dn.replace('{{id}}', escapedId) : `uid=${escapedId},${options.suffix}`;
|
|
93
117
|
return new Promise((resolve, reject) => {
|
|
94
118
|
client.bind(userCn, authData.password, ldapError => {
|
|
95
119
|
delete authData.password;
|
|
@@ -123,7 +147,7 @@ function optionsAreValid(options) {
|
|
|
123
147
|
return typeof options === 'object' && typeof options.suffix === 'string' && typeof options.url === 'string' && (options.url.startsWith('ldap://') || options.url.startsWith('ldaps://') && typeof options.tlsOptions === 'object');
|
|
124
148
|
}
|
|
125
149
|
function searchForGroup(client, options, id, resolve, reject) {
|
|
126
|
-
const filter = options.groupFilter.replace(/{{id}}/gi, id);
|
|
150
|
+
const filter = options.groupFilter.replace(/{{id}}/gi, escapeFilter(id));
|
|
127
151
|
const opts = {
|
|
128
152
|
scope: 'sub',
|
|
129
153
|
filter: filter
|
|
@@ -162,6 +186,8 @@ function validateAppId() {
|
|
|
162
186
|
}
|
|
163
187
|
module.exports = {
|
|
164
188
|
validateAppId,
|
|
165
|
-
validateAuthData
|
|
189
|
+
validateAuthData,
|
|
190
|
+
escapeDN,
|
|
191
|
+
escapeFilter
|
|
166
192
|
};
|
|
167
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsZGFwanMiLCJyZXF1aXJlIiwiUGFyc2UiLCJ2YWxpZGF0ZUF1dGhEYXRhIiwiYXV0aERhdGEiLCJvcHRpb25zIiwib3B0aW9uc0FyZVZhbGlkIiwiUHJvbWlzZSIsIl8iLCJyZWplY3QiLCJFcnJvciIsIklOVEVSTkFMX1NFUlZFUl9FUlJPUiIsImNsaWVudE9wdGlvbnMiLCJ1cmwiLCJzdGFydHNXaXRoIiwidGxzT3B0aW9ucyIsImNsaWVudCIsImNyZWF0ZUNsaWVudCIsInVzZXJDbiIsImRuIiwicmVwbGFjZSIsImlkIiwic3VmZml4IiwicmVzb2x2ZSIsImJpbmQiLCJwYXNzd29yZCIsImxkYXBFcnJvciIsImVycm9yIiwiY29kZSIsIk9CSkVDVF9OT1RfRk9VTkQiLCJkZXN0cm95IiwiZ3JvdXBDbiIsImdyb3VwRmlsdGVyIiwic2VhcmNoRm9yR3JvdXAiLCJ1bmJpbmQiLCJmaWx0ZXIiLCJvcHRzIiwic2NvcGUiLCJmb3VuZCIsInNlYXJjaCIsInNlYXJjaEVycm9yIiwicmVzIiwib24iLCJlbnRyeSIsInBvam8iLCJhdHRyaWJ1dGVzIiwiZmluZCIsIm9iaiIsInR5cGUiLCJ2YWx1ZXMiLCJpbmNsdWRlcyIsInZhbGlkYXRlQXBwSWQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0F1dGgvbGRhcC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBhcnNlIFNlcnZlciBhdXRoZW50aWNhdGlvbiBhZGFwdGVyIGZvciBMREFQLlxuICpcbiAqIEBjbGFzcyBMREFQXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFRoZSBhZGFwdGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLnVybCAtIFRoZSBMREFQIHNlcnZlciBVUkwuIE11c3Qgc3RhcnQgd2l0aCBgbGRhcDovL2Agb3IgYGxkYXBzOi8vYC5cbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLnN1ZmZpeCAtIFRoZSBMREFQIHN1ZmZpeCBmb3IgdXNlciBkaXN0aW5ndWlzaGVkIG5hbWVzIChETikuXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuZG5dIC0gVGhlIGRpc3Rpbmd1aXNoZWQgbmFtZSAoRE4pIHRlbXBsYXRlIGZvciB1c2VyIGF1dGhlbnRpY2F0aW9uLiBSZXBsYWNlIGB7e2lkfX1gIHdpdGggdGhlIHVzZXJuYW1lLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnRsc09wdGlvbnNdIC0gT3B0aW9ucyBmb3IgTERBUFMgVExTIGNvbm5lY3Rpb25zLlxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmdyb3VwQ25dIC0gVGhlIGNvbW1vbiBuYW1lIChDTikgb2YgdGhlIGdyb3VwIHRvIHZlcmlmeSB1c2VyIG1lbWJlcnNoaXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuZ3JvdXBGaWx0ZXJdIC0gVGhlIExEQVAgc2VhcmNoIGZpbHRlciBmb3IgZ3JvdXBzLCB3aXRoIGB7e2lkfX1gIHJlcGxhY2VkIGJ5IHRoZSB1c2VybmFtZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYXV0aERhdGEgLSBUaGUgYXV0aGVudGljYXRpb24gZGF0YSBwcm92aWRlZCBieSB0aGUgY2xpZW50LlxuICogQHBhcmFtIHtTdHJpbmd9IGF1dGhEYXRhLmlkIC0gVGhlIHVzZXIncyBMREFQIHVzZXJuYW1lLlxuICogQHBhcmFtIHtTdHJpbmd9IGF1dGhEYXRhLnBhc3N3b3JkIC0gVGhlIHVzZXIncyBMREFQIHBhc3N3b3JkLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogIyMgUGFyc2UgU2VydmVyIENvbmZpZ3VyYXRpb25cbiAqIFRvIGNvbmZpZ3VyZSBQYXJzZSBTZXJ2ZXIgZm9yIExEQVAgYXV0aGVudGljYXRpb24sIHVzZSB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZTpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIHtcbiAqICAgYXV0aDoge1xuICogICAgIGxkYXA6IHtcbiAqICAgICAgIHVybDogJ2xkYXBzOi8vbGRhcC5leGFtcGxlLmNvbScsXG4gKiAgICAgICBzdWZmaXg6ICdvdT11c2VycyxkYz1leGFtcGxlLGRjPWNvbScsXG4gKiAgICAgICBncm91cENuOiAnYWRtaW5zJyxcbiAqICAgICAgIGdyb3VwRmlsdGVyOiAnKG1lbWJlclVpZD17e2lkfX0pJyxcbiAqICAgICAgIHRsc09wdGlvbnM6IHtcbiAqICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxuICogICAgICAgfVxuICogICAgIH1cbiAqICAgfVxuICogfVxuICogYGBgXG4gKlxuICogIyMgQXV0aGVudGljYXRpb24gUHJvY2Vzc1xuICogMS4gVmFsaWRhdGVzIHRoZSBwcm92aWRlZCBgYXV0aERhdGFgIHVzaW5nIGFuIExEQVAgYmluZCBvcGVyYXRpb24uXG4gKiAyLiBPcHRpb25hbGx5LCB2ZXJpZmllcyB0aGF0IHRoZSB1c2VyIGJlbG9uZ3MgdG8gYSBzcGVjaWZpYyBncm91cCBieSBwZXJmb3JtaW5nIGFuIExEQVAgc2VhcmNoIHVzaW5nIHRoZSBwcm92aWRlZCBgZ3JvdXBDbmAgb3IgYGdyb3VwRmlsdGVyYC5cbiAqXG4gKiAjIyBBdXRoIFBheWxvYWRcbiAqIFRoZSBhZGFwdGVyIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmcgYGF1dGhEYXRhYCBmaWVsZHM6XG4gKiAtIGBpZGA6IFRoZSB1c2VyJ3MgTERBUCB1c2VybmFtZS5cbiAqIC0gYHBhc3N3b3JkYDogVGhlIHVzZXIncyBMREFQIHBhc3N3b3JkLlxuICpcbiAqICMjIyBFeGFtcGxlIEF1dGggUGF5bG9hZFxuICogYGBganNvblxuICoge1xuICogICBcImxkYXBcIjoge1xuICogICAgIFwiaWRcIjogXCJqZG9lXCIsXG4gKiAgICAgXCJwYXNzd29yZFwiOiBcInBhc3N3b3JkMTIzXCJcbiAqICAgfVxuICogfVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+Q29uZmlndXJhdGlvbiBFeGFtcGxlPC9jYXB0aW9uPlxuICogLy8gRXhhbXBsZSBQYXJzZSBTZXJ2ZXIgY29uZmlndXJhdGlvbjpcbiAqIGNvbnN0IGNvbmZpZyA9IHtcbiAqICAgYXV0aDoge1xuICogICAgIGxkYXA6IHtcbiAqICAgICAgIHVybDogJ2xkYXBzOi8vbGRhcC5leGFtcGxlLmNvbScsXG4gKiAgICAgICBzdWZmaXg6ICdvdT11c2VycyxkYz1leGFtcGxlLGRjPWNvbScsXG4gKiAgICAgICBncm91cENuOiAnYWRtaW5zJyxcbiAqICAgICAgIGdyb3VwRmlsdGVyOiAnKG1lbWJlclVpZD17e2lkfX0pJyxcbiAqICAgICAgIHRsc09wdGlvbnM6IHtcbiAqICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxuICogICAgICAgfVxuICogICAgIH1cbiAqICAgfVxuICogfTtcbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2xkYXAuY29tLyBMREFQIEJhc2ljc31cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbGRhcC5jb20vbGRhcC1maWx0ZXJzLyBMREFQIEZpbHRlcnN9XG4gKi9cblxuXG5jb25zdCBsZGFwanMgPSByZXF1aXJlKCdsZGFwanMnKTtcbmNvbnN0IFBhcnNlID0gcmVxdWlyZSgncGFyc2Uvbm9kZScpLlBhcnNlO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZUF1dGhEYXRhKGF1dGhEYXRhLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9uc0FyZVZhbGlkKG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcbiAgICAgIHJlamVjdChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5URVJOQUxfU0VSVkVSX0VSUk9SLCAnTERBUCBhdXRoIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpKTtcbiAgICB9KTtcbiAgfVxuICBjb25zdCBjbGllbnRPcHRpb25zID0gb3B0aW9ucy51cmwuc3RhcnRzV2l0aCgnbGRhcHM6Ly8nKVxuICAgID8geyB1cmw6IG9wdGlvbnMudXJsLCB0bHNPcHRpb25zOiBvcHRpb25zLnRsc09wdGlvbnMgfVxuICAgIDogeyB1cmw6IG9wdGlvbnMudXJsIH07XG5cbiAgY29uc3QgY2xpZW50ID0gbGRhcGpzLmNyZWF0ZUNsaWVudChjbGllbnRPcHRpb25zKTtcbiAgY29uc3QgdXNlckNuID1cbiAgICB0eXBlb2Ygb3B0aW9ucy5kbiA9PT0gJ3N0cmluZydcbiAgICAgID8gb3B0aW9ucy5kbi5yZXBsYWNlKCd7e2lkfX0nLCBhdXRoRGF0YS5pZClcbiAgICAgIDogYHVpZD0ke2F1dGhEYXRhLmlkfSwke29wdGlvbnMuc3VmZml4fWA7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjbGllbnQuYmluZCh1c2VyQ24sIGF1dGhEYXRhLnBhc3N3b3JkLCBsZGFwRXJyb3IgPT4ge1xuICAgICAgZGVsZXRlIGF1dGhEYXRhLnBhc3N3b3JkO1xuICAgICAgaWYgKGxkYXBFcnJvcikge1xuICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgIHN3aXRjaCAobGRhcEVycm9yLmNvZGUpIHtcbiAgICAgICAgICBjYXNlIDQ5OlxuICAgICAgICAgICAgZXJyb3IgPSBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICAgIFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsXG4gICAgICAgICAgICAgICdMREFQOiBXcm9uZyB1c2VybmFtZSBvciBwYXNzd29yZCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdERVBUSF9aRVJPX1NFTEZfU0lHTkVEX0NFUlQnOlxuICAgICAgICAgICAgZXJyb3IgPSBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ0xEQVBTOiBDZXJ0aWZpY2F0ZSBtaXNtYXRjaCcpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGVycm9yID0gbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgICBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELFxuICAgICAgICAgICAgICAnTERBUDogU29tdGhpbmcgd2VudCB3cm9uZyAoJyArIGxkYXBFcnJvci5jb2RlICsgJyknXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIGNsaWVudC5kZXN0cm95KGxkYXBFcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmdyb3VwQ24gPT09ICdzdHJpbmcnICYmIHR5cGVvZiBvcHRpb25zLmdyb3VwRmlsdGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICBzZWFyY2hGb3JHcm91cChjbGllbnQsIG9wdGlvbnMsIGF1dGhEYXRhLmlkLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xpZW50LnVuYmluZCgpO1xuICAgICAgICBjbGllbnQuZGVzdHJveSgpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBvcHRpb25zQXJlVmFsaWQob3B0aW9ucykge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0JyAmJlxuICAgIHR5cGVvZiBvcHRpb25zLnN1ZmZpeCA9PT0gJ3N0cmluZycgJiZcbiAgICB0eXBlb2Ygb3B0aW9ucy51cmwgPT09ICdzdHJpbmcnICYmXG4gICAgKG9wdGlvbnMudXJsLnN0YXJ0c1dpdGgoJ2xkYXA6Ly8nKSB8fFxuICAgICAgKG9wdGlvbnMudXJsLnN0YXJ0c1dpdGgoJ2xkYXBzOi8vJykgJiYgdHlwZW9mIG9wdGlvbnMudGxzT3B0aW9ucyA9PT0gJ29iamVjdCcpKVxuICApO1xufVxuXG5mdW5jdGlvbiBzZWFyY2hGb3JHcm91cChjbGllbnQsIG9wdGlvbnMsIGlkLCByZXNvbHZlLCByZWplY3QpIHtcbiAgY29uc3QgZmlsdGVyID0gb3B0aW9ucy5ncm91cEZpbHRlci5yZXBsYWNlKC97e2lkfX0vZ2ksIGlkKTtcbiAgY29uc3Qgb3B0cyA9IHtcbiAgICBzY29wZTogJ3N1YicsXG4gICAgZmlsdGVyOiBmaWx0ZXIsXG4gIH07XG4gIGxldCBmb3VuZCA9IGZhbHNlO1xuICBjbGllbnQuc2VhcmNoKG9wdGlvbnMuc3VmZml4LCBvcHRzLCAoc2VhcmNoRXJyb3IsIHJlcykgPT4ge1xuICAgIGlmIChzZWFyY2hFcnJvcikge1xuICAgICAgY2xpZW50LnVuYmluZCgpO1xuICAgICAgY2xpZW50LmRlc3Ryb3koKTtcbiAgICAgIHJldHVybiByZWplY3QobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVEVSTkFMX1NFUlZFUl9FUlJPUiwgJ0xEQVAgZ3JvdXAgc2VhcmNoIGZhaWxlZCcpKTtcbiAgICB9XG4gICAgcmVzLm9uKCdzZWFyY2hFbnRyeScsIGVudHJ5ID0+IHtcbiAgICAgIGlmIChlbnRyeS5wb2pvLmF0dHJpYnV0ZXMuZmluZChvYmogPT4gb2JqLnR5cGUgPT09ICdjbicpLnZhbHVlcy5pbmNsdWRlcyhvcHRpb25zLmdyb3VwQ24pKSB7XG4gICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgY2xpZW50LnVuYmluZCgpO1xuICAgICAgICBjbGllbnQuZGVzdHJveSgpO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJlcy5vbignZW5kJywgKCkgPT4ge1xuICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICBjbGllbnQudW5iaW5kKCk7XG4gICAgICAgIGNsaWVudC5kZXN0cm95KCk7XG4gICAgICAgIHJldHVybiByZWplY3QoXG4gICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVEVSTkFMX1NFUlZFUl9FUlJPUiwgJ0xEQVA6IFVzZXIgbm90IGluIGdyb3VwJylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXMub24oJ2Vycm9yJywgKCkgPT4ge1xuICAgICAgY2xpZW50LnVuYmluZCgpO1xuICAgICAgY2xpZW50LmRlc3Ryb3koKTtcbiAgICAgIHJldHVybiByZWplY3QobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVEVSTkFMX1NFUlZFUl9FUlJPUiwgJ0xEQVAgZ3JvdXAgc2VhcmNoIGZhaWxlZCcpKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQXBwSWQoKSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHZhbGlkYXRlQXBwSWQsXG4gIHZhbGlkYXRlQXV0aERhdGEsXG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBLE1BQU1BLE1BQU0sR0FBR0MsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUNoQyxNQUFNQyxLQUFLLEdBQUdELE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQ0MsS0FBSztBQUV6QyxTQUFTQyxnQkFBZ0JBLENBQUNDLFFBQVEsRUFBRUMsT0FBTyxFQUFFO0VBQzNDLElBQUksQ0FBQ0MsZUFBZSxDQUFDRCxPQUFPLENBQUMsRUFBRTtJQUM3QixPQUFPLElBQUlFLE9BQU8sQ0FBQyxDQUFD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
|
|
193
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsZGFwanMiLCJyZXF1aXJlIiwiUGFyc2UiLCJlc2NhcGVETiIsInZhbHVlIiwiZXNjYXBlZCIsInJlcGxhY2UiLCJzdGFydHNXaXRoIiwic2xpY2UiLCJlbmRzV2l0aCIsImVzY2FwZUZpbHRlciIsImNoIiwiY2hhckNvZGVBdCIsInRvU3RyaW5nIiwicGFkU3RhcnQiLCJ2YWxpZGF0ZUF1dGhEYXRhIiwiYXV0aERhdGEiLCJvcHRpb25zIiwib3B0aW9uc0FyZVZhbGlkIiwiUHJvbWlzZSIsIl8iLCJyZWplY3QiLCJFcnJvciIsIklOVEVSTkFMX1NFUlZFUl9FUlJPUiIsImNsaWVudE9wdGlvbnMiLCJ1cmwiLCJ0bHNPcHRpb25zIiwiaWQiLCJPQkpFQ1RfTk9UX0ZPVU5EIiwiY2xpZW50IiwiY3JlYXRlQ2xpZW50IiwiZXNjYXBlZElkIiwidXNlckNuIiwiZG4iLCJzdWZmaXgiLCJyZXNvbHZlIiwiYmluZCIsInBhc3N3b3JkIiwibGRhcEVycm9yIiwiZXJyb3IiLCJjb2RlIiwiZGVzdHJveSIsImdyb3VwQ24iLCJncm91cEZpbHRlciIsInNlYXJjaEZvckdyb3VwIiwidW5iaW5kIiwiZmlsdGVyIiwib3B0cyIsInNjb3BlIiwiZm91bmQiLCJzZWFyY2giLCJzZWFyY2hFcnJvciIsInJlcyIsIm9uIiwiZW50cnkiLCJwb2pvIiwiYXR0cmlidXRlcyIsImZpbmQiLCJvYmoiLCJ0eXBlIiwidmFsdWVzIiwiaW5jbHVkZXMiLCJ2YWxpZGF0ZUFwcElkIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL2xkYXAuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXJzZSBTZXJ2ZXIgYXV0aGVudGljYXRpb24gYWRhcHRlciBmb3IgTERBUC5cbiAqXG4gKiBAY2xhc3MgTERBUFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBUaGUgYWRhcHRlciBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy51cmwgLSBUaGUgTERBUCBzZXJ2ZXIgVVJMLiBNdXN0IHN0YXJ0IHdpdGggYGxkYXA6Ly9gIG9yIGBsZGFwczovL2AuXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy5zdWZmaXggLSBUaGUgTERBUCBzdWZmaXggZm9yIHVzZXIgZGlzdGluZ3Vpc2hlZCBuYW1lcyAoRE4pLlxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmRuXSAtIFRoZSBkaXN0aW5ndWlzaGVkIG5hbWUgKEROKSB0ZW1wbGF0ZSBmb3IgdXNlciBhdXRoZW50aWNhdGlvbi4gUmVwbGFjZSBge3tpZH19YCB3aXRoIHRoZSB1c2VybmFtZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy50bHNPcHRpb25zXSAtIE9wdGlvbnMgZm9yIExEQVBTIFRMUyBjb25uZWN0aW9ucy5cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5ncm91cENuXSAtIFRoZSBjb21tb24gbmFtZSAoQ04pIG9mIHRoZSBncm91cCB0byB2ZXJpZnkgdXNlciBtZW1iZXJzaGlwLlxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmdyb3VwRmlsdGVyXSAtIFRoZSBMREFQIHNlYXJjaCBmaWx0ZXIgZm9yIGdyb3Vwcywgd2l0aCBge3tpZH19YCByZXBsYWNlZCBieSB0aGUgdXNlcm5hbWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGF1dGhEYXRhIC0gVGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEgcHJvdmlkZWQgYnkgdGhlIGNsaWVudC5cbiAqIEBwYXJhbSB7U3RyaW5nfSBhdXRoRGF0YS5pZCAtIFRoZSB1c2VyJ3MgTERBUCB1c2VybmFtZS5cbiAqIEBwYXJhbSB7U3RyaW5nfSBhdXRoRGF0YS5wYXNzd29yZCAtIFRoZSB1c2VyJ3MgTERBUCBwYXNzd29yZC5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqICMjIFBhcnNlIFNlcnZlciBDb25maWd1cmF0aW9uXG4gKiBUbyBjb25maWd1cmUgUGFyc2UgU2VydmVyIGZvciBMREFQIGF1dGhlbnRpY2F0aW9uLCB1c2UgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6XG4gKiBgYGBqYXZhc2NyaXB0XG4gKiB7XG4gKiAgIGF1dGg6IHtcbiAqICAgICBsZGFwOiB7XG4gKiAgICAgICB1cmw6ICdsZGFwczovL2xkYXAuZXhhbXBsZS5jb20nLFxuICogICAgICAgc3VmZml4OiAnb3U9dXNlcnMsZGM9ZXhhbXBsZSxkYz1jb20nLFxuICogICAgICAgZ3JvdXBDbjogJ2FkbWlucycsXG4gKiAgICAgICBncm91cEZpbHRlcjogJyhtZW1iZXJVaWQ9e3tpZH19KScsXG4gKiAgICAgICB0bHNPcHRpb25zOiB7XG4gKiAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2VcbiAqICAgICAgIH1cbiAqICAgICB9XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICpcbiAqICMjIEF1dGhlbnRpY2F0aW9uIFByb2Nlc3NcbiAqIDEuIFZhbGlkYXRlcyB0aGUgcHJvdmlkZWQgYGF1dGhEYXRhYCB1c2luZyBhbiBMREFQIGJpbmQgb3BlcmF0aW9uLlxuICogMi4gT3B0aW9uYWxseSwgdmVyaWZpZXMgdGhhdCB0aGUgdXNlciBiZWxvbmdzIHRvIGEgc3BlY2lmaWMgZ3JvdXAgYnkgcGVyZm9ybWluZyBhbiBMREFQIHNlYXJjaCB1c2luZyB0aGUgcHJvdmlkZWQgYGdyb3VwQ25gIG9yIGBncm91cEZpbHRlcmAuXG4gKlxuICogIyMgQXV0aCBQYXlsb2FkXG4gKiBUaGUgYWRhcHRlciByZXF1aXJlcyB0aGUgZm9sbG93aW5nIGBhdXRoRGF0YWAgZmllbGRzOlxuICogLSBgaWRgOiBUaGUgdXNlcidzIExEQVAgdXNlcm5hbWUuXG4gKiAtIGBwYXNzd29yZGA6IFRoZSB1c2VyJ3MgTERBUCBwYXNzd29yZC5cbiAqXG4gKiAjIyMgRXhhbXBsZSBBdXRoIFBheWxvYWRcbiAqIGBgYGpzb25cbiAqIHtcbiAqICAgXCJsZGFwXCI6IHtcbiAqICAgICBcImlkXCI6IFwiamRvZVwiLFxuICogICAgIFwicGFzc3dvcmRcIjogXCJwYXNzd29yZDEyM1wiXG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkNvbmZpZ3VyYXRpb24gRXhhbXBsZTwvY2FwdGlvbj5cbiAqIC8vIEV4YW1wbGUgUGFyc2UgU2VydmVyIGNvbmZpZ3VyYXRpb246XG4gKiBjb25zdCBjb25maWcgPSB7XG4gKiAgIGF1dGg6IHtcbiAqICAgICBsZGFwOiB7XG4gKiAgICAgICB1cmw6ICdsZGFwczovL2xkYXAuZXhhbXBsZS5jb20nLFxuICogICAgICAgc3VmZml4OiAnb3U9dXNlcnMsZGM9ZXhhbXBsZSxkYz1jb20nLFxuICogICAgICAgZ3JvdXBDbjogJ2FkbWlucycsXG4gKiAgICAgICBncm91cEZpbHRlcjogJyhtZW1iZXJVaWQ9e3tpZH19KScsXG4gKiAgICAgICB0bHNPcHRpb25zOiB7XG4gKiAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2VcbiAqICAgICAgIH1cbiAqICAgICB9XG4gKiAgIH1cbiAqIH07XG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9sZGFwLmNvbS8gTERBUCBCYXNpY3N9XG4gKiBAc2VlIHtAbGluayBodHRwczovL2xkYXAuY29tL2xkYXAtZmlsdGVycy8gTERBUCBGaWx0ZXJzfVxuICovXG5cblxuY29uc3QgbGRhcGpzID0gcmVxdWlyZSgnbGRhcGpzJyk7XG5jb25zdCBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKS5QYXJzZTtcblxuLy8gRXNjYXBlIExEQVAgRE4gc3BlY2lhbCBjaGFyYWN0ZXJzIHBlciBSRkMgNDUxNFxuLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM0NTE0I3NlY3Rpb24tMi40XG5mdW5jdGlvbiBlc2NhcGVETih2YWx1ZSkge1xuICBsZXQgZXNjYXBlZCA9IHZhbHVlXG4gICAgLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJylcbiAgICAucmVwbGFjZSgvLC9nLCAnXFxcXCwnKVxuICAgIC5yZXBsYWNlKC89L2csICdcXFxcPScpXG4gICAgLnJlcGxhY2UoL1xcKy9nLCAnXFxcXCsnKVxuICAgIC5yZXBsYWNlKC88L2csICdcXFxcPCcpXG4gICAgLnJlcGxhY2UoLz4vZywgJ1xcXFw+JylcbiAgICAucmVwbGFjZSgvIy9nLCAnXFxcXCMnKVxuICAgIC5yZXBsYWNlKC87L2csICdcXFxcOycpXG4gICAgLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKTtcbiAgaWYgKGVzY2FwZWQuc3RhcnRzV2l0aCgnICcpKSB7XG4gICAgZXNjYXBlZCA9ICdcXFxcICcgKyBlc2NhcGVkLnNsaWNlKDEpO1xuICB9XG4gIGlmIChlc2NhcGVkLmVuZHNXaXRoKCcgJykpIHtcbiAgICBlc2NhcGVkID0gZXNjYXBlZC5zbGljZSgwLCAtMSkgKyAnXFxcXCAnO1xuICB9XG4gIHJldHVybiBlc2NhcGVkO1xufVxuXG4vLyBFc2NhcGUgTERBUCBmaWx0ZXIgc3BlY2lhbCBjaGFyYWN0ZXJzIHBlciBSRkMgNDUxNVxuLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM0NTE1I3NlY3Rpb24tM1xuZnVuY3Rpb24gZXNjYXBlRmlsdGVyKHZhbHVlKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG4gIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bXFxcXCooKVxceDAwXS9nLCBjaCA9PlxuICAgICdcXFxcJyArIGNoLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJylcbiAgKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVBdXRoRGF0YShhdXRoRGF0YSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnNBcmVWYWxpZChvcHRpb25zKSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgICByZWplY3QobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVEVSTkFMX1NFUlZFUl9FUlJPUiwgJ0xEQVAgYXV0aCBjb25maWd1cmF0aW9uIG1pc3NpbmcnKSk7XG4gICAgfSk7XG4gIH1cbiAgY29uc3QgY2xpZW50T3B0aW9ucyA9IG9wdGlvbnMudXJsLnN0YXJ0c1dpdGgoJ2xkYXBzOi8vJylcbiAgICA/IHsgdXJsOiBvcHRpb25zLnVybCwgdGxzT3B0aW9uczogb3B0aW9ucy50bHNPcHRpb25zIH1cbiAgICA6IHsgdXJsOiBvcHRpb25zLnVybCB9O1xuXG4gIGlmICh0eXBlb2YgYXV0aERhdGEuaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdMREFQOiBXcm9uZyB1c2VybmFtZSBvciBwYXNzd29yZCcpXG4gICAgKTtcbiAgfVxuICBjb25zdCBjbGllbnQgPSBsZGFwanMuY3JlYXRlQ2xpZW50KGNsaWVudE9wdGlvbnMpO1xuICBjb25zdCBlc2NhcGVkSWQgPSBlc2NhcGVETihhdXRoRGF0YS5pZCk7XG4gIGNvbnN0IHVzZXJDbiA9XG4gICAgdHlwZW9mIG9wdGlvbnMuZG4gPT09ICdzdHJpbmcnXG4gICAgICA/IG9wdGlvbnMuZG4ucmVwbGFjZSgne3tpZH19JywgZXNjYXBlZElkKVxuICAgICAgOiBgdWlkPSR7ZXNjYXBlZElkfSwke29wdGlvbnMuc3VmZml4fWA7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjbGllbnQuYmluZCh1c2VyQ24sIGF1dGhEYXRhLnBhc3N3b3JkLCBsZGFwRXJyb3IgPT4ge1xuICAgICAgZGVsZXRlIGF1dGhEYXRhLnBhc3N3b3JkO1xuICAgICAgaWYgKGxkYXBFcnJvcikge1xuICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgIHN3aXRjaCAobGRhcEVycm9yLmNvZGUpIHtcbiAgICAgICAgICBjYXNlIDQ5OlxuICAgICAgICAgICAgZXJyb3IgPSBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICAgIFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsXG4gICAgICAgICAgICAgICdMREFQOiBXcm9uZyB1c2VybmFtZSBvciBwYXNzd29yZCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdERVBUSF9aRVJPX1NFTEZfU0lHTkVEX0NFUlQnOlxuICAgICAgICAgICAgZXJyb3IgPSBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ0xEQVBTOiBDZXJ0aWZpY2F0ZSBtaXNtYXRjaCcpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGVycm9yID0gbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgICBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELFxuICAgICAgICAgICAgICAnTERBUDogU29tdGhpbmcgd2VudCB3cm9uZyAoJyArIGxkYXBFcnJvci5jb2RlICsgJyknXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIGNsaWVudC5kZXN0cm95KGxkYXBFcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmdyb3VwQ24gPT09ICdzdHJpbmcnICYmIHR5cGVvZiBvcHRpb25zLmdyb3VwRmlsdGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICBzZWFyY2hGb3JHcm91cChjbGllbnQsIG9wdGlvbnMsIGF1dGhEYXRhLmlkLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xpZW50LnVuYmluZCgpO1xuICAgICAgICBjbGllbnQuZGVzdHJveSgpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBvcHRpb25zQXJlVmFsaWQob3B0aW9ucykge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0JyAmJlxuICAgIHR5cGVvZiBvcHRpb25zLnN1ZmZpeCA9PT0gJ3N0cmluZycgJiZcbiAgICB0eXBlb2Ygb3B0aW9ucy51cmwgPT09ICdzdHJpbmcnICYmXG4gICAgKG9wdGlvbnMudXJsLnN0YXJ0c1dpdGgoJ2xkYXA6Ly8nKSB8fFxuICAgICAgKG9wdGlvbnMudXJsLnN0YXJ0c1dpdGgoJ2xkYXBzOi8vJykgJiYgdHlwZW9mIG9wdGlvbnMudGxzT3B0aW9ucyA9PT0gJ29iamVjdCcpKVxuICApO1xufVxuXG5mdW5jdGlvbiBzZWFyY2hGb3JHcm91cChjbGllbnQsIG9wdGlvbnMsIGlkLCByZXNvbHZlLCByZWplY3QpIHtcbiAgY29uc3QgZmlsdGVyID0gb3B0aW9ucy5ncm91cEZpbHRlci5yZXBsYWNlKC97e2lkfX0vZ2ksIGVzY2FwZUZpbHRlcihpZCkpO1xuICBjb25zdCBvcHRzID0ge1xuICAgIHNjb3BlOiAnc3ViJyxcbiAgICBmaWx0ZXI6IGZpbHRlcixcbiAgfTtcbiAgbGV0IGZvdW5kID0gZmFsc2U7XG4gIGNsaWVudC5zZWFyY2gob3B0aW9ucy5zdWZmaXgsIG9wdHMsIChzZWFyY2hFcnJvciwgcmVzKSA9PiB7XG4gICAgaWYgKHNlYXJjaEVycm9yKSB7XG4gICAgICBjbGllbnQudW5iaW5kKCk7XG4gICAgICBjbGllbnQuZGVzdHJveSgpO1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5URVJOQUxfU0VSVkVSX0VSUk9SLCAnTERBUCBncm91cCBzZWFyY2ggZmFpbGVkJykpO1xuICAgIH1cbiAgICByZXMub24oJ3NlYXJjaEVudHJ5JywgZW50cnkgPT4ge1xuICAgICAgaWYgKGVudHJ5LnBvam8uYXR0cmlidXRlcy5maW5kKG9iaiA9PiBvYmoudHlwZSA9PT0gJ2NuJykudmFsdWVzLmluY2x1ZGVzKG9wdGlvbnMuZ3JvdXBDbikpIHtcbiAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICBjbGllbnQudW5iaW5kKCk7XG4gICAgICAgIGNsaWVudC5kZXN0cm95KCk7XG4gICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgIGNsaWVudC51bmJpbmQoKTtcbiAgICAgICAgY2xpZW50LmRlc3Ryb3koKTtcbiAgICAgICAgcmV0dXJuIHJlamVjdChcbiAgICAgICAgICBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5URVJOQUxfU0VSVkVSX0VSUk9SLCAnTERBUDogVXNlciBub3QgaW4gZ3JvdXAnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJlcy5vbignZXJyb3InLCAoKSA9PiB7XG4gICAgICBjbGllbnQudW5iaW5kKCk7XG4gICAgICBjbGllbnQuZGVzdHJveSgpO1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5URVJOQUxfU0VSVkVSX0VSUk9SLCAnTERBUCBncm91cCBzZWFyY2ggZmFpbGVkJykpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVBcHBJZCgpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdmFsaWRhdGVBcHBJZCxcbiAgdmFsaWRhdGVBdXRoRGF0YSxcbiAgZXNjYXBlRE4sXG4gIGVzY2FwZUZpbHRlcixcbn07XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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
|