appium 2.0.0-beta.17 → 2.0.0-beta.20
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/build/lib/appium-config.schema.json +0 -0
- package/build/lib/appium.js +84 -69
- package/build/lib/cli/argparse-actions.js +1 -1
- package/build/lib/cli/args.js +87 -223
- package/build/lib/cli/extension-command.js +2 -2
- package/build/lib/cli/extension.js +14 -6
- package/build/lib/cli/parser.js +142 -106
- package/build/lib/cli/utils.js +1 -1
- package/build/lib/config-file.js +141 -0
- package/build/lib/config.js +42 -64
- package/build/lib/driver-config.js +41 -20
- package/build/lib/drivers.js +1 -1
- package/build/lib/ext-config-io.js +165 -0
- package/build/lib/extension-config.js +110 -60
- package/build/lib/grid-register.js +19 -21
- package/build/lib/logsink.js +1 -1
- package/build/lib/main.js +135 -72
- package/build/lib/plugin-config.js +17 -8
- package/build/lib/schema/appium-config-schema.js +252 -0
- package/build/lib/schema/arg-spec.js +120 -0
- package/build/lib/schema/cli-args.js +173 -0
- package/build/lib/schema/cli-transformers.js +76 -0
- package/build/lib/schema/index.js +36 -0
- package/build/lib/schema/keywords.js +62 -0
- package/build/lib/schema/schema.js +357 -0
- package/build/lib/utils.js +26 -35
- package/lib/appium-config.schema.json +277 -0
- package/lib/appium.js +99 -75
- package/lib/cli/args.js +138 -335
- package/lib/cli/extension-command.js +7 -6
- package/lib/cli/extension.js +12 -4
- package/lib/cli/parser.js +248 -96
- package/lib/config-file.js +227 -0
- package/lib/config.js +71 -61
- package/lib/driver-config.js +66 -11
- package/lib/ext-config-io.js +287 -0
- package/lib/extension-config.js +209 -66
- package/lib/grid-register.js +24 -21
- package/lib/main.js +139 -68
- package/lib/plugin-config.js +32 -2
- package/lib/schema/appium-config-schema.js +286 -0
- package/lib/schema/arg-spec.js +218 -0
- package/lib/schema/cli-args.js +273 -0
- package/lib/schema/cli-transformers.js +123 -0
- package/lib/schema/index.js +2 -0
- package/lib/schema/keywords.js +119 -0
- package/lib/schema/schema.js +577 -0
- package/lib/utils.js +29 -52
- package/package.json +16 -11
- package/types/appium-config.d.ts +197 -0
- package/types/types.d.ts +201 -0
- package/build/lib/cli/parser-helpers.js +0 -106
- package/lib/cli/parser-helpers.js +0 -106
package/build/lib/config.js
CHANGED
|
@@ -5,18 +5,16 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.
|
|
9
|
-
exports.validateServerArgs = validateServerArgs;
|
|
8
|
+
exports.APPIUM_VER = void 0;
|
|
10
9
|
exports.checkNodeOk = checkNodeOk;
|
|
11
|
-
exports.
|
|
12
|
-
exports.
|
|
13
|
-
exports.validateTmpDir = validateTmpDir;
|
|
14
|
-
exports.getNonDefaultArgs = getNonDefaultArgs;
|
|
10
|
+
exports.getBuildInfo = getBuildInfo;
|
|
11
|
+
exports.getDeprecatedArgs = getDeprecatedArgs;
|
|
15
12
|
exports.getGitRev = getGitRev;
|
|
16
|
-
exports.
|
|
13
|
+
exports.getNonDefaultServerArgs = getNonDefaultServerArgs;
|
|
14
|
+
exports.showConfig = showConfig;
|
|
17
15
|
exports.updateBuildInfo = updateBuildInfo;
|
|
18
|
-
exports.
|
|
19
|
-
exports.
|
|
16
|
+
exports.validateTmpDir = validateTmpDir;
|
|
17
|
+
exports.warnNodeDeprecations = warnNodeDeprecations;
|
|
20
18
|
|
|
21
19
|
require("source-map-support/register");
|
|
22
20
|
|
|
@@ -38,6 +36,8 @@ var _argparseActions = require("./cli/argparse-actions");
|
|
|
38
36
|
|
|
39
37
|
var _findUp = _interopRequireDefault(require("find-up"));
|
|
40
38
|
|
|
39
|
+
var _schema = require("./schema/schema");
|
|
40
|
+
|
|
41
41
|
const npmPackage = _support.fs.readPackageJsonFrom(__dirname);
|
|
42
42
|
|
|
43
43
|
const APPIUM_VER = npmPackage.version;
|
|
@@ -178,17 +178,39 @@ async function showConfig() {
|
|
|
178
178
|
console.log(JSON.stringify(getBuildInfo()));
|
|
179
179
|
}
|
|
180
180
|
|
|
181
|
-
function
|
|
182
|
-
|
|
183
|
-
dest
|
|
184
|
-
|
|
185
|
-
}]) => {
|
|
186
|
-
if (args[dest] && args[dest] !== defaultValue) {
|
|
187
|
-
acc[dest] = args[dest];
|
|
188
|
-
}
|
|
181
|
+
function getNonDefaultServerArgs(parser, args) {
|
|
182
|
+
function typesDiffer(dest) {
|
|
183
|
+
return typeof args[dest] !== typeof defaultsFromSchema[dest];
|
|
184
|
+
}
|
|
189
185
|
|
|
190
|
-
|
|
191
|
-
|
|
186
|
+
function defaultValueIsArray(dest) {
|
|
187
|
+
return _lodash.default.isArray(defaultsFromSchema[dest]);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
function argsValueIsArray(dest) {
|
|
191
|
+
return _lodash.default.isArray(args[dest]);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
function arraysDiffer(dest) {
|
|
195
|
+
return _lodash.default.difference(args[dest], defaultsFromSchema[dest]).length > 0;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
function valuesUnequal(dest) {
|
|
199
|
+
return args[dest] !== defaultsFromSchema[dest];
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
function defaultIsDefined(dest) {
|
|
203
|
+
return !_lodash.default.isUndefined(defaultsFromSchema[dest]);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
const argValueNotArrayOrArraysDiffer = _lodash.default.overSome([_lodash.default.negate(argsValueIsArray), arraysDiffer]);
|
|
207
|
+
|
|
208
|
+
const defaultValueNotArrayAndValuesUnequal = _lodash.default.overEvery([_lodash.default.negate(defaultValueIsArray), valuesUnequal]);
|
|
209
|
+
|
|
210
|
+
const isNotDefault = _lodash.default.overEvery([defaultIsDefined, _lodash.default.overSome([typesDiffer, _lodash.default.overEvery([defaultValueIsArray, argValueNotArrayOrArraysDiffer]), defaultValueNotArrayAndValuesUnequal])]);
|
|
211
|
+
|
|
212
|
+
const defaultsFromSchema = (0, _schema.getDefaultsFromSchema)();
|
|
213
|
+
return _lodash.default.pickBy(args, (__, key) => isNotDefault(key));
|
|
192
214
|
}
|
|
193
215
|
|
|
194
216
|
function getDeprecatedArgs(parser, args) {
|
|
@@ -211,50 +233,6 @@ function getDeprecatedArgs(parser, args) {
|
|
|
211
233
|
}, {});
|
|
212
234
|
}
|
|
213
235
|
|
|
214
|
-
function checkValidPort(port, portName) {
|
|
215
|
-
if (port > 0 && port < 65536) return true;
|
|
216
|
-
|
|
217
|
-
_logger.default.error(`Port '${portName}' must be greater than 0 and less than 65536. Currently ${port}`);
|
|
218
|
-
|
|
219
|
-
return false;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
function validateServerArgs(parser, args) {
|
|
223
|
-
let exclusives = [['noReset', 'fullReset'], ['ipa', 'safari'], ['app', 'safari'], ['forceIphone', 'forceIpad'], ['deviceName', 'defaultDevice']];
|
|
224
|
-
|
|
225
|
-
for (let exSet of exclusives) {
|
|
226
|
-
let numFoundInArgs = 0;
|
|
227
|
-
|
|
228
|
-
for (let opt of exSet) {
|
|
229
|
-
if (_lodash.default.has(args, opt) && args[opt]) {
|
|
230
|
-
numFoundInArgs++;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
if (numFoundInArgs > 1) {
|
|
235
|
-
throw new Error(`You can't pass in more than one argument from the ` + `set ${JSON.stringify(exSet)}, since they are ` + `mutually exclusive`);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
const validations = {
|
|
240
|
-
port: checkValidPort,
|
|
241
|
-
callbackPort: checkValidPort,
|
|
242
|
-
bootstrapPort: checkValidPort,
|
|
243
|
-
chromedriverPort: checkValidPort,
|
|
244
|
-
robotPort: checkValidPort,
|
|
245
|
-
backendRetries: r => r >= 0
|
|
246
|
-
};
|
|
247
|
-
const nonDefaultArgs = getNonDefaultArgs(parser, args);
|
|
248
|
-
|
|
249
|
-
for (let [arg, validator] of _lodash.default.toPairs(validations)) {
|
|
250
|
-
if (_lodash.default.has(nonDefaultArgs, arg)) {
|
|
251
|
-
if (!validator(args[arg], arg)) {
|
|
252
|
-
throw new Error(`Invalid argument for param ${arg}: ${args[arg]}`);
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
|
|
258
236
|
async function validateTmpDir(tmpDir) {
|
|
259
237
|
try {
|
|
260
238
|
await (0, _support.mkdirp)(tmpDir);
|
|
@@ -264,4 +242,4 @@ async function validateTmpDir(tmpDir) {
|
|
|
264
242
|
}require('source-map-support').install();
|
|
265
243
|
|
|
266
244
|
|
|
267
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb25maWcuanMiXSwibmFtZXMiOlsibnBtUGFja2FnZSIsImZzIiwicmVhZFBhY2thZ2VKc29uRnJvbSIsIl9fZGlybmFtZSIsIkFQUElVTV9WRVIiLCJ2ZXJzaW9uIiwiTUlOX05PREVfVkVSU0lPTiIsImVuZ2luZXMiLCJub2RlIiwiR0lUX01FVEFfUk9PVCIsIkdJVF9CSU5BUlkiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJHSVRIVUJfQVBJIiwiQlVJTERfSU5GTyIsImdldE5vZGVWZXJzaW9uIiwic2VtdmVyIiwiY29lcmNlIiwicHJvY2VzcyIsImlzU3ViQ2xhc3MiLCJjYW5kaWRhdGVDbGFzcyIsInN1cGVyQ2xhc3MiLCJfIiwiaXNGdW5jdGlvbiIsInByb3RvdHlwZSIsInVwZGF0ZUJ1aWxkSW5mbyIsInVzZUdpdGh1YkFwaUZhbGxiYWNrIiwic2hhIiwiZ2V0R2l0UmV2IiwiYnVpbHQiLCJnZXRHaXRUaW1lc3RhbXAiLCJpc0VtcHR5IiwiZmluZEdpdFJvb3QiLCJjd2QiLCJyb290RGlyIiwidHlwZSIsImdpdFJvb3QiLCJzdGRvdXQiLCJ0cmltIiwiaWduIiwicmVzQm9keU9iaiIsImF4aW9zIiwiZ2V0IiwiaGVhZGVycyIsImRhdGEiLCJpc0FycmF5IiwibmFtZSIsImNvbW1pdCIsImNvbW1pdFNoYSIsImNvbW1pdHRlciIsImRhdGUiLCJhdXRob3IiLCJnZXRCdWlsZEluZm8iLCJjaGVja05vZGVPayIsInNhdGlzZmllcyIsImxvZ2dlciIsImVycm9yQW5kVGhyb3ciLCJ3YXJuTm9kZURlcHJlY2F0aW9ucyIsInNob3dDb25maWciLCJjb25zb2xlIiwibG9nIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldE5vbkRlZmF1bHRBcmdzIiwicGFyc2VyIiwiYXJncyIsInJhd0FyZ3MiLCJyZWR1Y2UiLCJhY2MiLCJkZXN0IiwiZGVmYXVsdCIsImRlZmF1bHRWYWx1ZSIsImdldERlcHJlY2F0ZWRBcmdzIiwiYWN0aW9uIiwiZGVwcmVjYXRlZF9mb3IiLCJTdG9yZURlcHJlY2F0ZWREZWZhdWx0Q2FwYWJpbGl0eUFjdGlvbiIsIkRFRkFVTFRfQ0FQU19BUkciLCJjaGVja1ZhbGlkUG9ydCIsInBvcnQiLCJwb3J0TmFtZSIsImVycm9yIiwidmFsaWRhdGVTZXJ2ZXJBcmdzIiwiZXhjbHVzaXZlcyIsImV4U2V0IiwibnVtRm91bmRJbkFyZ3MiLCJvcHQiLCJoYXMiLCJFcnJvciIsInZhbGlkYXRpb25zIiwiY2FsbGJhY2tQb3J0IiwiYm9vdHN0cmFwUG9ydCIsImNocm9tZWRyaXZlclBvcnQiLCJyb2JvdFBvcnQiLCJiYWNrZW5kUmV0cmllcyIsInIiLCJub25EZWZhdWx0QXJncyIsImFyZyIsInZhbGlkYXRvciIsInRvUGFpcnMiLCJ2YWxpZGF0ZVRtcERpciIsInRtcERpciIsImUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUdDLFlBQUdDLG1CQUFILENBQXVCQyxTQUF2QixDQUFuQjs7QUFFQSxNQUFNQyxVQUFVLEdBQUdKLFVBQVUsQ0FBQ0ssT0FBOUI7O0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUdOLFVBQVUsQ0FBQ08sT0FBWCxDQUFtQkMsSUFBNUM7QUFFQSxNQUFNQyxhQUFhLEdBQUcsTUFBdEI7QUFDQSxNQUFNQyxVQUFVLEdBQUksTUFBS0MsZ0JBQU9DLFNBQVAsS0FBcUIsTUFBckIsR0FBOEIsRUFBRyxFQUExRDtBQUNBLE1BQU1DLFVBQVUsR0FBRyw0Q0FBbkI7QUFFQSxNQUFNQyxVQUFVLEdBQUc7QUFDakJULEVBQUFBLE9BQU8sRUFBRUQ7QUFEUSxDQUFuQjs7QUFJQSxTQUFTVyxjQUFULEdBQTJCO0FBQ3pCLFNBQU9DLGdCQUFPQyxNQUFQLENBQWNDLE9BQU8sQ0FBQ2IsT0FBdEIsQ0FBUDtBQUNEOztBQUVELFNBQVNjLFVBQVQsQ0FBcUJDLGNBQXJCLEVBQXFDQyxVQUFyQyxFQUFp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c0RBQUQsR0FDQyxJQUFHYSxNQUFPLDRDQURyQixDQUFOO0FBRUQ7QUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBta2RpcnAsIHN5c3RlbSwgZnMgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgcm9vdERpciB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5pbXBvcnQge1xuICBTdG9yZURlcHJlY2F0ZWREZWZhdWx0Q2FwYWJpbGl0eUFjdGlvbiwgREVGQVVMVF9DQVBTX0FSRyxcbn0gZnJvbSAnLi9jbGkvYXJncGFyc2UtYWN0aW9ucyc7XG5pbXBvcnQgZmluZFVwIGZyb20gJ2ZpbmQtdXAnO1xuXG5jb25zdCBucG1QYWNrYWdlID0gZnMucmVhZFBhY2thZ2VKc29uRnJvbShfX2Rpcm5hbWUpO1xuXG5jb25zdCBBUFBJVU1fVkVSID0gbnBtUGFja2FnZS52ZXJzaW9uO1xuY29uc3QgTUlOX05PREVfVkVSU0lPTiA9IG5wbVBhY2thZ2UuZW5naW5lcy5ub2RlO1xuXG5jb25zdCBHSVRfTUVUQV9ST09UID0gJy5naXQnO1xuY29uc3QgR0lUX0JJTkFSWSA9IGBnaXQke3N5c3RlbS5pc1dpbmRvd3MoKSA/ICcuZXhlJyA6ICcnfWA7XG5jb25zdCBHSVRIVUJfQVBJID0gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYXBwaXVtL2FwcGl1bSc7XG5cbmNvbnN0IEJVSUxEX0lORk8gPSB7XG4gIHZlcnNpb246IEFQUElVTV9WRVIsXG59O1xuXG5mdW5jdGlvbiBnZXROb2RlVmVyc2lvbiAoKSB7XG4gIHJldHVybiBzZW12ZXIuY29lcmNlKHByb2Nlc3MudmVyc2lvbik7XG59XG5cbmZ1bmN0aW9uIGlzU3ViQ2xhc3MgKGNhbmRpZGF0ZUNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHJldHVybiBfLmlzRnVuY3Rpb24oc3VwZXJDbGFzcykgJiYgXy5pc0Z1bmN0aW9uKGNhbmRpZGF0ZUNsYXNzKVxuICAgICYmIChjYW5kaWRhdGVDbGFzcy5wcm90b3R5cGUgaW5zdGFuY2VvZiBzdXBlckNsYXNzIHx8IGNhbmRpZGF0ZUNsYXNzID09PSBzdXBlckNsYXNzKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlQnVpbGRJbmZvICh1c2VHaXRodWJBcGlGYWxsYmFjayA9IGZhbHNlKSB7XG4gIGNvbnN0IHNoYSA9IGF3YWl0IGdldEdpdFJldih1c2VHaXRodWJBcGlGYWxsYmFjayk7XG4gIGlmICghc2hhKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIEJVSUxEX0lORk9bJ2dpdC1zaGEnXSA9IHNoYTtcbiAgY29uc3QgYnVpbHQgPSBhd2FpdCBnZXRHaXRUaW1lc3RhbXAoc2hhLCB1c2VHaXRodWJBcGlGYWxsYmFjayk7XG4gIGlmICghXy5pc0VtcHR5KGJ1aWx0KSkge1xuICAgIEJVSUxEX0lORk8uYnVpbHQgPSBidWlsdDtcbiAgfVxufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBHaXQgbWV0YWRhdGEgZGlyIChzZWUgYEdJVF9NRVRBX1JPT1RgKVxuICpcbiAqIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgQXBwaXVtIGNhbm5vdCBhc3N1bWUgYHBhY2thZ2UuanNvbmAgYW5kIGAuZ2l0YCBhcmUgaW4gdGhlIHNhbWVcbiAqIGRpcmVjdG9yeS4gIE1vbm9yZXBvcywgc2VlP1xuICogQHJldHVybnMge3N0cmluZ3x2b2lkfSBQYXRoIHRvIGRpciBvciBgdW5kZWZpbmVkYCBpZiBub3QgZm91bmRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmluZEdpdFJvb3QgKCkge1xuICByZXR1cm4gYXdhaXQgZmluZFVwKEdJVF9NRVRBX1JPT1QsIHtjd2Q6IHJvb3REaXIsIHR5cGU6ICdkaXJlY3RvcnknfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEdpdFJldiAodXNlR2l0aHViQXBpRmFsbGJhY2sgPSBmYWxzZSkge1xuICBjb25zdCBnaXRSb290ID0gYXdhaXQgZmluZEdpdFJvb3QoKTtcbiAgaWYgKGdpdFJvb3QpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKEdJVF9CSU5BUlksIFsncmV2LXBhcnNlJywgJ0hFQUQnXSwge1xuICAgICAgICBjd2Q6IGdpdFJvb3RcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHN0ZG91dC50cmltKCk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9XG5cbiAgaWYgKCF1c2VHaXRodWJBcGlGYWxsYmFjaykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNCb2R5T2JqID0gKGF3YWl0IGF4aW9zLmdldChgJHtHSVRIVUJfQVBJfS90YWdzYCwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnVXNlci1BZ2VudCc6IGBBcHBpdW0gJHtBUFBJVU1fVkVSfWBcbiAgICAgIH1cbiAgICB9KSkuZGF0YTtcbiAgICBpZiAoXy5pc0FycmF5KHJlc0JvZHlPYmopKSB7XG4gICAgICBmb3IgKGNvbnN0IHtuYW1lLCBjb21taXR9IG9mIHJlc0JvZHlPYmopIHtcbiAgICAgICAgaWYgKG5hbWUgPT09IGB2JHtBUFBJVU1fVkVSfWAgJiYgY29tbWl0ICYmIGNvbW1pdC5zaGEpIHtcbiAgICAgICAgICByZXR1cm4gY29tbWl0LnNoYTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoaWduKSB7fVxuICByZXR1cm4gbnVsbDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0R2l0VGltZXN0YW1wIChjb21taXRTaGEsIHVzZUdpdGh1YkFwaUZhbGxiYWNrID0gZmFsc2UpIHtcbiAgY29uc3QgZ2l0Um9vdCA9IGF3YWl0IGZpbmRHaXRSb290KCk7XG4gIGlmIChnaXRSb290KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYyhHSVRfQklOQVJZLCBbJ3Nob3cnLCAnLXMnLCAnLS1mb3JtYXQ9JWNpJywgY29tbWl0U2hhXSwge1xuICAgICAgICBjd2Q6IGdpdFJvb3RcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHN0ZG91dC50cmltKCk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9XG5cbiAgaWYgKCF1c2VHaXRodWJBcGlGYWxsYmFjaykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNCb2R5T2JqID0gKGF3YWl0IGF4aW9zLmdldChgJHtHSVRIVUJfQVBJfS9jb21taXRzLyR7Y29tbWl0U2hhfWAsIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ1VzZXItQWdlbnQnOiBgQXBwaXVtICR7QVBQSVVNX1ZFUn1gXG4gICAgICB9XG4gICAgfSkpLmRhdGE7XG4gICAgaWYgKHJlc0JvZHlPYmogJiYgcmVzQm9keU9iai5jb21taXQpIHtcbiAgICAgIGlmIChyZXNCb2R5T2JqLmNvbW1pdC5jb21taXR0ZXIgJiYgcmVzQm9keU9iai5jb21taXQuY29tbWl0dGVyLmRhdGUpIHtcbiAgICAgICAgcmV0dXJuIHJlc0JvZHlPYmouY29tbWl0LmNvbW1pdHRlci5kYXRlO1xuICAgICAgfVxuICAgICAgaWYgKHJlc0JvZHlPYmouY29tbWl0LmF1dGhvciAmJiByZXNCb2R5T2JqLmNvbW1pdC5hdXRob3IuZGF0ZSkge1xuICAgICAgICByZXR1cm4gcmVzQm9keU9iai5jb21taXQuYXV0aG9yLmRhdGU7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChpZ24pIHt9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEByZXR1cm4gTXV0YWJsZSBvYmplY3QgY29udGFpbmluZyBBcHBpdW0gYnVpbGQgaW5mb3JtYXRpb24uIEJ5IGRlZmF1bHQgaXRcbiAqIG9ubHkgY29udGFpbnMgdGhlIEFwcGl1bSB2ZXJzaW9uLCBidXQgaXMgdXBkYXRlZCB3aXRoIHRoZSBidWlsZCB0aW1lc3RhbXBcbiAqIGFuZCBnaXQgY29tbWl0IGhhc2ggYXN5bmNocm9ub3VzbHkgYXMgc29vbiBhcyBgdXBkYXRlQnVpbGRJbmZvYCBpcyBjYWxsZWRcbiAqIGFuZCBzdWNjZWVkcy5cbiAqL1xuZnVuY3Rpb24gZ2V0QnVpbGRJbmZvICgpIHtcbiAgcmV0dXJuIEJVSUxEX0lORk87XG59XG5cbmZ1bmN0aW9uIGNoZWNrTm9kZU9rICgpIHtcbiAgY29uc3QgdmVyc2lvbiA9IGdldE5vZGVWZXJzaW9uKCk7XG4gIGlmICghc2VtdmVyLnNhdGlzZmllcyh2ZXJzaW9uLCBNSU5fTk9ERV9WRVJTSU9OKSkge1xuICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBOb2RlIHZlcnNpb24gbXVzdCBiZSAke01JTl9OT0RFX1ZFUlNJT059LiBDdXJyZW50bHkgJHt2ZXJzaW9uLnZlcnNpb259YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gd2Fybk5vZGVEZXByZWNhdGlvbnMgKCkge1xuICAvKipcbiAgICogVW5jb21tZW50IHRoaXMgc2VjdGlvbiB0byBnZXQgbm9kZSB2ZXJzaW9uIGRlcHJlY2F0aW9uIHdhcm5pbmdzXG4gICAqIEFsc28gYWRkIHRlc3QgY2FzZXMgdG8gY29uZmlnLXNwZWNzLmpzIHRvIGNvdmVyIHRoZSBjYXNlcyBhZGRlZFxuICAgKiovXG5cbiAgLy8gY29uc3QgdmVyc2lvbiA9IGdldE5vZGVWZXJzaW9uKCk7XG4gIC8vIGlmICh2ZXJzaW9uLm1ham9yIDwgOCkge1xuICAvLyAgIGxvZ2dlci53YXJuKGBBcHBpdW0gc3VwcG9ydCBmb3IgdmVyc2lvbnMgb2Ygbm9kZSA8ICR7dmVyc2lvbi5tYWpvcn0gaGFzIGJlZW4gYCArXG4gIC8vICAgICAgICAgICAgICAgJ2RlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLiBQbGVhc2UgJyArXG4gIC8vICAgICAgICAgICAgICAgJ3VwZ3JhZGUhJyk7XG4gIC8vIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc2hvd0NvbmZpZyAoKSB7XG4gIGF3YWl0IHVwZGF0ZUJ1aWxkSW5mbyh0cnVlKTtcbiAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZ2V0QnVpbGRJbmZvKCkpKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG59XG5cbmZ1bmN0aW9uIGdldE5vbkRlZmF1bHRBcmdzIChwYXJzZXIsIGFyZ3MpIHtcbiAgcmV0dXJuIHBhcnNlci5yYXdBcmdzLnJlZHVjZSgoYWNjLCBbLCB7ZGVzdCwgZGVmYXVsdDogZGVmYXVsdFZhbHVlfV0pID0+IHtcbiAgICBpZiAoYXJnc1tkZXN0XSAmJiBhcmdzW2Rlc3RdICE9PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIGFjY1tkZXN0XSA9IGFyZ3NbZGVzdF07XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVwcmVjYXRlZEFyZ3MgKHBhcnNlciwgYXJncykge1xuICAvLyBnbyB0aHJvdWdoIHRoZSBzZXJ2ZXIgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhbmQgZmlndXJlXG4gIC8vIG91dCB3aGljaCBvZiB0aGUgb25lcyB1c2VkIGFyZSBkZXByZWNhdGVkXG4gIHJldHVybiBwYXJzZXIucmF3QXJncy5yZWR1Y2UoKGFjYywgW1tuYW1lXSwge2Rlc3QsIGRlZmF1bHQ6IGRlZmF1bHRWYWx1ZSwgYWN0aW9ufV0pID0+IHtcbiAgICBpZiAoIWFyZ3NbZGVzdF0gfHwgYXJnc1tkZXN0XSA9PT0gZGVmYXVsdFZhbHVlKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIGlmIChhY3Rpb24/LmRlcHJlY2F0ZWRfZm9yKSB7XG4gICAgICBhY2NbbmFtZV0gPSBhY3Rpb24uZGVwcmVjYXRlZF9mb3I7XG4gICAgfSBlbHNlIGlmIChpc1N1YkNsYXNzKGFjdGlvbiwgU3RvcmVEZXByZWNhdGVkRGVmYXVsdENhcGFiaWxpdHlBY3Rpb24pKSB7XG4gICAgICBhY2NbbmFtZV0gPSBERUZBVUxUX0NBUFNfQVJHO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVmFsaWRQb3J0IChwb3J0LCBwb3J0TmFtZSkge1xuICBpZiAocG9ydCA+IDAgJiYgcG9ydCA8IDY1NTM2KSByZXR1cm4gdHJ1ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuICBsb2dnZXIuZXJyb3IoYFBvcnQgJyR7cG9ydE5hbWV9JyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwIGFuZCBsZXNzIHRoYW4gNjU1MzYuIEN1cnJlbnRseSAke3BvcnR9YCk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTZXJ2ZXJBcmdzIChwYXJzZXIsIGFyZ3MpIHtcbiAgLy8gYXJndW1lbnRzIHRoYXQgY2Fubm90IGJvdGggYmUgc2V0XG4gIGxldCBleGNsdXNpdmVzID0gW1xuICAgIFsnbm9SZXNldCcsICdmdWxsUmVzZXQnXSxcbiAgICBbJ2lwYScsICdzYWZhcmknXSxcbiAgICBbJ2FwcCcsICdzYWZhcmknXSxcbiAgICBbJ2ZvcmNlSXBob25lJywgJ2ZvcmNlSXBhZCddLFxuICAgIFsnZGV2aWNlTmFtZScsICdkZWZhdWx0RGV2aWNlJ11cbiAgXTtcblxuICBmb3IgKGxldCBleFNldCBvZiBleGNsdXNpdmVzKSB7XG4gICAgbGV0IG51bUZvdW5kSW5BcmdzID0gMDtcbiAgICBmb3IgKGxldCBvcHQgb2YgZXhTZXQpIHtcbiAgICAgIGlmIChfLmhhcyhhcmdzLCBvcHQpICYmIGFyZ3Nbb3B0XSkge1xuICAgICAgICBudW1Gb3VuZEluQXJncysrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobnVtRm91bmRJbkFyZ3MgPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFlvdSBjYW4ndCBwYXNzIGluIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQgZnJvbSB0aGUgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYHNldCAke0pTT04uc3RyaW5naWZ5KGV4U2V0KX0sIHNpbmNlIHRoZXkgYXJlIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGBtdXR1YWxseSBleGNsdXNpdmVgKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB2YWxpZGF0aW9ucyA9IHtcbiAgICBwb3J0OiBjaGVja1ZhbGlkUG9ydCxcbiAgICBjYWxsYmFja1BvcnQ6IGNoZWNrVmFsaWRQb3J0LFxuICAgIGJvb3RzdHJhcFBvcnQ6IGNoZWNrVmFsaWRQb3J0LFxuICAgIGNocm9tZWRyaXZlclBvcnQ6IGNoZWNrVmFsaWRQb3J0LFxuICAgIHJvYm90UG9ydDogY2hlY2tWYWxpZFBvcnQsXG4gICAgYmFja2VuZFJldHJpZXM6IChyKSA9PiByID49IDAsXG4gIH07XG5cbiAgY29uc3Qgbm9uRGVmYXVsdEFyZ3MgPSBnZXROb25EZWZhdWx0QXJncyhwYXJzZXIsIGFyZ3MpO1xuXG4gIGZvciAobGV0IFthcmcsIHZhbGlkYXRvcl0gb2YgXy50b1BhaXJzKHZhbGlkYXRpb25zKSkge1xuICAgIGlmIChfLmhhcyhub25EZWZhdWx0QXJncywgYXJnKSkge1xuICAgICAgaWYgKCF2YWxpZGF0b3IoYXJnc1thcmddLCBhcmcpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBhcmd1bWVudCBmb3IgcGFyYW0gJHthcmd9OiAke2FyZ3NbYXJnXX1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVUbXBEaXIgKHRtcERpcikge1xuICB0cnkge1xuICAgIGF3YWl0IG1rZGlycCh0bXBEaXIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBXZSBjb3VsZCBub3QgZW5zdXJlIHRoYXQgdGhlIHRlbXAgZGlyIHlvdSBzcGVjaWZpZWQgYCArXG4gICAgICAgICAgICAgICAgICAgIGAoJHt0bXBEaXJ9KSBleGlzdHMuIFBsZWFzZSBtYWtlIHN1cmUgaXQncyB3cml0ZWFibGUuYCk7XG4gIH1cbn1cblxuZXhwb3J0IHtcbiAgZ2V0QnVpbGRJbmZvLCB2YWxpZGF0ZVNlcnZlckFyZ3MsIGNoZWNrTm9kZU9rLCBzaG93Q29uZmlnLFxuICB3YXJuTm9kZURlcHJlY2F0aW9ucywgdmFsaWRhdGVUbXBEaXIsIGdldE5vbkRlZmF1bHRBcmdzLFxuICBnZXRHaXRSZXYsIGNoZWNrVmFsaWRQb3J0LCBBUFBJVU1fVkVSLCB1cGRhdGVCdWlsZEluZm8sXG4gIGdldERlcHJlY2F0ZWRBcmdzLFxufTtcbiJdLCJmaWxlIjoibGliL2NvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
|
245
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb25maWcuanMiXSwibmFtZXMiOlsibnBtUGFja2FnZSIsImZzIiwicmVhZFBhY2thZ2VKc29uRnJvbSIsIl9fZGlybmFtZSIsIkFQUElVTV9WRVIiLCJ2ZXJzaW9uIiwiTUlOX05PREVfVkVSU0lPTiIsImVuZ2luZXMiLCJub2RlIiwiR0lUX01FVEFfUk9PVCIsIkdJVF9CSU5BUlkiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJHSVRIVUJfQVBJIiwiQlVJTERfSU5GTyIsImdldE5vZGVWZXJzaW9uIiwic2VtdmVyIiwiY29lcmNlIiwicHJvY2VzcyIsImlzU3ViQ2xhc3MiLCJjYW5kaWRhdGVDbGFzcyIsInN1cGVyQ2xhc3MiLCJfIiwiaXNGdW5jdGlvbiIsInByb3RvdHlwZSIsInVwZGF0ZUJ1aWxkSW5mbyIsInVzZUdpdGh1YkFwaUZhbGxiYWNrIiwic2hhIiwiZ2V0R2l0UmV2IiwiYnVpbHQiLCJnZXRHaXRUaW1lc3RhbXAiLCJpc0VtcHR5IiwiZmluZEdpdFJvb3QiLCJjd2QiLCJyb290RGlyIiwidHlwZSIsImdpdFJvb3QiLCJzdGRvdXQiLCJ0cmltIiwiaWduIiwicmVzQm9keU9iaiIsImF4aW9zIiwiZ2V0IiwiaGVhZGVycyIsImRhdGEiLCJpc0FycmF5IiwibmFtZSIsImNvbW1pdCIsImNvbW1pdFNoYSIsImNvbW1pdHRlciIsImRhdGUiLCJhdXRob3IiLCJnZXRCdWlsZEluZm8iLCJjaGVja05vZGVPayIsInNhdGlzZmllcyIsImxvZ2dlciIsImVycm9yQW5kVGhyb3ciLCJ3YXJuTm9kZURlcHJlY2F0aW9ucyIsInNob3dDb25maWciLCJjb25zb2xlIiwibG9nIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldE5vbkRlZmF1bHRTZXJ2ZXJBcmdzIiwicGFyc2VyIiwiYXJncyIsInR5cGVzRGlmZmVyIiwiZGVzdCIsImRlZmF1bHRzRnJvbVNjaGVtYSIsImRlZmF1bHRWYWx1ZUlzQXJyYXkiLCJhcmdzVmFsdWVJc0FycmF5IiwiYXJyYXlzRGlmZmVyIiwiZGlmZmVyZW5jZSIsImxlbmd0aCIsInZhbHVlc1VuZXF1YWwiLCJkZWZhdWx0SXNEZWZpbmVkIiwiaXNVbmRlZmluZWQiLCJhcmdWYWx1ZU5vdEFycmF5T3JBcnJheXNEaWZmZXIiLCJvdmVyU29tZSIsIm5lZ2F0ZSIsImRlZmF1bHRWYWx1ZU5vdEFycmF5QW5kVmFsdWVzVW5lcXVhbCIsIm92ZXJFdmVyeSIsImlzTm90RGVmYXVsdCIsInBpY2tCeSIsIl9fIiwia2V5IiwiZ2V0RGVwcmVjYXRlZEFyZ3MiLCJyYXdBcmdzIiwicmVkdWNlIiwiYWNjIiwiZGVmYXVsdCIsImRlZmF1bHRWYWx1ZSIsImFjdGlvbiIsImRlcHJlY2F0ZWRfZm9yIiwiU3RvcmVEZXByZWNhdGVkRGVmYXVsdENhcGFiaWxpdHlBY3Rpb24iLCJERUZBVUxUX0NBUFNfQVJHIiwidmFsaWRhdGVUbXBEaXIiLCJ0bXBEaXIiLCJlIiwiRXJyb3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBRUEsTUFBTUEsVUFBVSxHQUFHQyxZQUFHQyxtQkFBSCxDQUF1QkMsU0FBdkIsQ0FBbkI7O0FBRUEsTUFBTUMsVUFBVSxHQUFHSixVQUFVLENBQUNLLE9BQTlCOztBQUNBLE1BQU1DLGdCQUFnQixHQUFHTixVQUFVLENBQUNPLE9BQVgsQ0FBbUJDLElBQTVDO0FBRUEsTUFBTUMsYUFBYSxHQUFHLE1BQXRCO0FBQ0EsTUFBTUMsVUFBVSxHQUFJLE1BQUtDLGdCQUFPQyxTQUFQLEtBQXFCLE1BQXJCLEdBQThCLEVBQUcsRUFBMUQ7QUFDQSxNQUFNQyxVQUFVLEdBQUcsNENBQW5CO0FBRUEsTUFBTUMsVUFBVSxHQUFHO0FBQ2pCVCxFQUFBQSxPQUFPLEVBQUVEO0FBRFEsQ0FBbkI7O0FBSUEsU0FBU1csY0FBVCxHQUEyQjtBQUN6QixTQUFPQyxnQkFBT0MsTUFBUCxDQUFjQyxPQUFPLENBQUNiLE9BQXRCLENBQVA7QUFDRDs7QUFFRCxTQUFTYyxVQUFULENBQXFCQyxjQUFyQixFQUFxQ0MsVUFBckMsRUFBaUQ7QUFDL0MsU0FBT0MsZ0JBQUVDLFVBQUYsQ0FBYUYsVUFBYixLQUE0QkMsZ0JBQUVDLFVBQUYsQ0FBYUgsY0FBYixDQUE1QixLQUNEQSxjQUFjLENBQUNJLFNBQWYsWUFBb0NILFVBQXBDLElBQWtERCxjQUFjLEtBQUtDLFVBRHBFLENBQVA7QUFFRDs7QUFFRCxlQUFlSSxlQUFmLENBQWdDQyxvQkFBb0IsR0FBRyxLQUF2RCxFQUE4RDtBQUM1RCxRQUFNQyxHQUFHLEdBQUcsTUFBTUMsU0FBUyxDQUFDRixvQkFBRCxDQUEzQjs7QUFDQSxNQUFJLENBQUNDLEdBQUwsRUFBVTtBQUNSO0FBQ0Q7O0FBQ0RiLEVBQUFBLFVBQVUsQ0FBQyxTQUFELENBQVYsR0FBd0JhLEdBQXhCO0FBQ0EsUUFBTUUsS0FBSyxHQUFHLE1BQU1DLGVBQWUsQ0FBQ0gsR0FBRCxFQUFNRCxvQkFBTixDQUFuQzs7QUFDQSxNQUFJLENBQUNKLGdCQUFFUyxPQUFGLENBQVVGLEtBQVYsQ0FBTCxFQUF1QjtBQUNyQmYsSUFBQUEsVUFBVSxDQUFDZSxLQUFYLEdBQW1CQSxLQUFuQjtBQUNEO0FBQ0Y7O0FBU0QsZUFBZUcsV0FBZixHQUE4QjtBQUM1QixTQUFPLE1BQU0scUJBQU92QixhQUFQLEVBQXNCO0FBQUN3QixJQUFBQSxHQUFHLEVBQUVDLGNBQU47QUFBZUMsSUFBQUEsSUFBSSxFQUFFO0FBQXJCLEdBQXRCLENBQWI7QUFDRDs7QUFFRCxlQUFlUCxTQUFmLENBQTBCRixvQkFBb0IsR0FBRyxLQUFqRCxFQUF3RDtBQUN0RCxRQUFNVSxPQUFPLEdBQUcsTUFBTUosV0FBVyxFQUFqQzs7QUFDQSxNQUFJSSxPQUFKLEVBQWE7QUFDWCxRQUFJO0FBQ0YsWUFBTTtBQUFDQyxRQUFBQTtBQUFELFVBQVcsTUFBTSx3QkFBSzNCLFVBQUwsRUFBaUIsQ0FBQyxXQUFELEVBQWMsTUFBZCxDQUFqQixFQUF3QztBQUM3RHVCLFFBQUFBLEdBQUcsRUFBRUc7QUFEd0QsT0FBeEMsQ0FBdkI7QUFHQSxhQUFPQyxNQUFNLENBQUNDLElBQVAsRUFBUDtBQUNELEtBTEQsQ0FLRSxPQUFPQyxHQUFQLEVBQVksQ0FBRTtBQUNqQjs7QUFFRCxNQUFJLENBQUNiLG9CQUFMLEVBQTJCO0FBQ3pCLFdBQU8sSUFBUDtBQUNEOztBQUVELE1BQUk7QUFDRixVQUFNYyxVQUFVLEdBQUcsQ0FBQyxNQUFNQyxlQUFNQyxHQUFOLENBQVcsR0FBRTdCLFVBQVcsT0FBeEIsRUFBZ0M7QUFDeEQ4QixNQUFBQSxPQUFPLEVBQUU7QUFDUCxzQkFBZSxVQUFTdkMsVUFBVztBQUQ1QjtBQUQrQyxLQUFoQyxDQUFQLEVBSWZ3QyxJQUpKOztBQUtBLFFBQUl0QixnQkFBRXVCLE9BQUYsQ0FBVUwsVUFBVixDQUFKLEVBQTJCO0FBQ3pCLFdBQUssTUFBTTtBQUFDTSxRQUFBQSxJQUFEO0FBQU9DLFFBQUFBO0FBQVAsT0FBWCxJQUE2QlAsVUFBN0IsRUFBeUM7QUFDdkMsWUFBSU0sSUFBSSxLQUFNLElBQUcxQyxVQUFXLEVBQXhCLElBQTZCMkMsTUFBN0IsSUFBdUNBLE1BQU0sQ0FBQ3BCLEdBQWxELEVBQXVEO0FBQ3JELGlCQUFPb0IsTUFBTSxDQUFDcEIsR0FBZDtBQUNEO0FBQ0Y7QUFDRjtBQUNGLEdBYkQsQ0FhRSxPQUFPWSxHQUFQLEVBQVksQ0FBRTs7QUFDaEIsU0FBTyxJQUFQO0FBQ0Q7O0FBRUQsZUFBZVQsZUFBZixDQUFnQ2tCLFNBQWhDLEVBQTJDdEIsb0JBQW9CLEdBQUcsS0FBbEUsRUFBeUU7QUFDdkUsUUFBTVUsT0FBTyxHQUFHLE1BQU1KLFdBQVcsRUFBakM7O0FBQ0EsTUFBSUksT0FBSixFQUFhO0FBQ1gsUUFBSTtBQUNGLFlBQU07QUFBQ0MsUUFBQUE7QUFBRCxVQUFXLE1BQU0sd0JBQUszQixVQUFMLEVBQWlCLENBQUMsTUFBRCxFQUFTLElBQVQsRUFBZSxjQUFmLEVBQStCc0MsU0FBL0IsQ0FBakIsRUFBNEQ7QUFDakZmLFFBQUFBLEdBQUcsRUFBRUc7QUFENEUsT0FBNUQsQ0FBdkI7QUFHQSxhQUFPQyxNQUFNLENBQUNDLElBQVAsRUFBUDtBQUNELEtBTEQsQ0FLRSxPQUFPQyxHQUFQLEVBQVksQ0FBRTtBQUNqQjs7QUFFRCxNQUFJLENBQUNiLG9CQUFMLEVBQTJCO0FBQ3pCLFdBQU8sSUFBUDtBQUNEOztBQUVELE1BQUk7QUFDRixVQUFNYyxVQUFVLEdBQUcsQ0FBQyxNQUFNQyxlQUFNQyxHQUFOLENBQVcsR0FBRTdCLFVBQVcsWUFBV21DLFNBQVUsRUFBN0MsRUFBZ0Q7QUFDeEVMLE1BQUFBLE9BQU8sRUFBRTtBQUNQLHNCQUFlLFVBQVN2QyxVQUFXO0FBRDVCO0FBRCtELEtBQWhELENBQVAsRUFJZndDLElBSko7O0FBS0EsUUFBSUosVUFBVSxJQUFJQSxVQUFVLENBQUNPLE1BQTdCLEVBQXFDO0FBQ25DLFVBQUlQLFVBQVUsQ0FBQ08sTUFBWCxDQUFrQkUsU0FBbEIsSUFBK0JULFVBQVUsQ0FBQ08sTUFBWCxDQUFrQkUsU0FBbEIsQ0FBNEJDLElBQS9ELEVBQXFFO0FBQ25FLGVBQU9WLFVBQVUsQ0FBQ08sTUFBWCxDQUFrQkUsU0FBbEIsQ0FBNEJDLElBQW5DO0FBQ0Q7O0FBQ0QsVUFBSVYsVUFBVSxDQUFDTyxNQUFYLENBQWtCSSxNQUFsQixJQUE0QlgsVUFBVSxDQUFDTyxNQUFYLENBQWtCSSxNQUFsQixDQUF5QkQsSUFBekQsRUFBK0Q7QUFDN0QsZUFBT1YsVUFBVSxDQUFDTyxNQUFYLENBQWtCSSxNQUFsQixDQUF5QkQsSUFBaEM7QUFDRDtBQUNGO0FBQ0YsR0FkRCxDQWNFLE9BQU9YLEdBQVAsRUFBWSxDQUFFOztBQUNoQixTQUFPLElBQVA7QUFDRDs7QUFRRCxTQUFTYSxZQUFULEdBQXlCO0FBQ3ZCLFNBQU90QyxVQUFQO0FBQ0Q7O0FBRUQsU0FBU3VDLFdBQVQsR0FBd0I7QUFDdEIsUUFBTWhELE9BQU8sR0FBR1UsY0FBYyxFQUE5Qjs7QUFDQSxNQUFJLENBQUNDLGdCQUFPc0MsU0FBUCxDQUFpQmpELE9BQWpCLEVBQTBCQyxnQkFBMUIsQ0FBTCxFQUFrRDtBQUNoRGlELG9CQUFPQyxhQUFQLENBQXNCLHdCQUF1QmxELGdCQUFpQixlQUFjRCxPQUFPLENBQUNBLE9BQVEsRUFBNUY7QUFDRDtBQUNGOztBQUVELFNBQVNvRCxvQkFBVCxHQUFpQyxDQVloQzs7QUFFRCxlQUFlQyxVQUFmLEdBQTZCO0FBQzNCLFFBQU1qQyxlQUFlLENBQUMsSUFBRCxDQUFyQjtBQUNBa0MsRUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVlDLElBQUksQ0FBQ0MsU0FBTCxDQUFlVixZQUFZLEVBQTNCLENBQVo7QUFDRDs7QUFFRCxTQUFTVyx1QkFBVCxDQUFrQ0MsTUFBbEMsRUFBMENDLElBQTFDLEVBQWdEO0FBRzlDLFdBQVNDLFdBQVQsQ0FBc0JDLElBQXRCLEVBQTRCO0FBQzFCLFdBQU8sT0FBT0YsSUFBSSxDQUFDRSxJQUFELENBQVgsS0FBc0IsT0FBT0Msa0JBQWtCLENBQUNELElBQUQsQ0FBdEQ7QUFDRDs7QUFFRCxXQUFTRSxtQkFBVCxDQUE4QkYsSUFBOUIsRUFBb0M7QUFDbEMsV0FBTzdDLGdCQUFFdUIsT0FBRixDQUFVdUIsa0JBQWtCLENBQUNELElBQUQsQ0FBNUIsQ0FBUDtBQUNEOztBQUVELFdBQVNHLGdCQUFULENBQTJCSCxJQUEzQixFQUFpQztBQUMvQixXQUFPN0MsZ0JBQUV1QixPQUFGLENBQVVvQixJQUFJLENBQUNFLElBQUQsQ0FBZCxDQUFQO0FBQ0Q7O0FBRUQsV0FBU0ksWUFBVCxDQUF1QkosSUFBdkIsRUFBNkI7QUFDM0IsV0FBTzdDLGdCQUFFa0QsVUFBRixDQUFhUCxJQUFJLENBQUNFLElBQUQsQ0FBakIsRUFBeUJDLGtCQUFrQixDQUFDRCxJQUFELENBQTNDLEVBQW1ETSxNQUFuRCxHQUE0RCxDQUFuRTtBQUNEOztBQUVELFdBQVNDLGFBQVQsQ0FBd0JQLElBQXhCLEVBQThCO0FBQzVCLFdBQU9GLElBQUksQ0FBQ0UsSUFBRCxDQUFKLEtBQWVDLGtCQUFrQixDQUFDRCxJQUFELENBQXhDO0FBQ0Q7O0FBRUQsV0FBU1EsZ0JBQVQsQ0FBMkJSLElBQTNCLEVBQWlDO0FBQy9CLFdBQU8sQ0FBQzdDLGdCQUFFc0QsV0FBRixDQUFjUixrQkFBa0IsQ0FBQ0QsSUFBRCxDQUFoQyxDQUFSO0FBQ0Q7O0FBSUQsUUFBTVUsOEJBQThCLEdBQUd2RCxnQkFBRXdELFFBQUYsQ0FBVyxDQUNoRHhELGdCQUFFeUQsTUFBRixDQUFTVCxnQkFBVCxDQURnRCxFQUVoREMsWUFGZ0QsQ0FBWCxDQUF2Qzs7QUFLQSxRQUFNUyxvQ0FBb0MsR0FBRzFELGdCQUFFMkQsU0FBRixDQUFZLENBQ3ZEM0QsZ0JBQUV5RCxNQUFGLENBQVNWLG1CQUFULENBRHVELEVBQ3hCSyxhQUR3QixDQUFaLENBQTdDOztBQWlCQSxRQUFNUSxZQUFZLEdBQUc1RCxnQkFBRTJELFNBQUYsQ0FBWSxDQUMvQk4sZ0JBRCtCLEVBRS9CckQsZ0JBQUV3RCxRQUFGLENBQVcsQ0FDVFosV0FEUyxFQUVUNUMsZ0JBQUUyRCxTQUFGLENBQVksQ0FDVlosbUJBRFUsRUFFVlEsOEJBRlUsQ0FBWixDQUZTLEVBTVRHLG9DQU5TLENBQVgsQ0FGK0IsQ0FBWixDQUFyQjs7QUFZQSxRQUFNWixrQkFBa0IsR0FBRyxvQ0FBM0I7QUFFQSxTQUFPOUMsZ0JBQUU2RCxNQUFGLENBQVNsQixJQUFULEVBQWUsQ0FBQ21CLEVBQUQsRUFBS0MsR0FBTCxLQUFhSCxZQUFZLENBQUNHLEdBQUQsQ0FBeEMsQ0FBUDtBQUNEOztBQUVELFNBQVNDLGlCQUFULENBQTRCdEIsTUFBNUIsRUFBb0NDLElBQXBDLEVBQTBDO0FBR3hDLFNBQU9ELE1BQU0sQ0FBQ3VCLE9BQVAsQ0FBZUMsTUFBZixDQUFzQixDQUFDQyxHQUFELEVBQU0sQ0FBQyxDQUFDM0MsSUFBRCxDQUFELEVBQVM7QUFBQ3FCLElBQUFBLElBQUQ7QUFBT3VCLElBQUFBLE9BQU8sRUFBRUMsWUFBaEI7QUFBOEJDLElBQUFBO0FBQTlCLEdBQVQsQ0FBTixLQUEwRDtBQUNyRixRQUFJLENBQUMzQixJQUFJLENBQUNFLElBQUQsQ0FBTCxJQUFlRixJQUFJLENBQUNFLElBQUQsQ0FBSixLQUFld0IsWUFBbEMsRUFBZ0Q7QUFDOUMsYUFBT0YsR0FBUDtBQUNEOztBQUVELFFBQUlHLE1BQUosYUFBSUEsTUFBSixlQUFJQSxNQUFNLENBQUVDLGNBQVosRUFBNEI7QUFDMUJKLE1BQUFBLEdBQUcsQ0FBQzNDLElBQUQsQ0FBSCxHQUFZOEMsTUFBTSxDQUFDQyxjQUFuQjtBQUNELEtBRkQsTUFFTyxJQUFJMUUsVUFBVSxDQUFDeUUsTUFBRCxFQUFTRSx1REFBVCxDQUFkLEVBQWdFO0FBQ3JFTCxNQUFBQSxHQUFHLENBQUMzQyxJQUFELENBQUgsR0FBWWlELGlDQUFaO0FBQ0Q7O0FBQ0QsV0FBT04sR0FBUDtBQUNELEdBWE0sRUFXSixFQVhJLENBQVA7QUFZRDs7QUFFRCxlQUFlTyxjQUFmLENBQStCQyxNQUEvQixFQUF1QztBQUNyQyxNQUFJO0FBQ0YsVUFBTSxxQkFBT0EsTUFBUCxDQUFOO0FBQ0QsR0FGRCxDQUVFLE9BQU9DLENBQVAsRUFBVTtBQUNWLFVBQU0sSUFBSUMsS0FBSixDQUFXLHNEQUFELEdBQ0MsSUFBR0YsTUFBTyw0Q0FEckIsQ0FBTjtBQUVEO0FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgbWtkaXJwLCBzeXN0ZW0sIGZzIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IHJvb3REaXIgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHtcbiAgU3RvcmVEZXByZWNhdGVkRGVmYXVsdENhcGFiaWxpdHlBY3Rpb24sIERFRkFVTFRfQ0FQU19BUkcsXG59IGZyb20gJy4vY2xpL2FyZ3BhcnNlLWFjdGlvbnMnO1xuaW1wb3J0IGZpbmRVcCBmcm9tICdmaW5kLXVwJztcbmltcG9ydCB7IGdldERlZmF1bHRzRnJvbVNjaGVtYSB9IGZyb20gJy4vc2NoZW1hL3NjaGVtYSc7XG5cbmNvbnN0IG5wbVBhY2thZ2UgPSBmcy5yZWFkUGFja2FnZUpzb25Gcm9tKF9fZGlybmFtZSk7XG5cbmNvbnN0IEFQUElVTV9WRVIgPSBucG1QYWNrYWdlLnZlcnNpb247XG5jb25zdCBNSU5fTk9ERV9WRVJTSU9OID0gbnBtUGFja2FnZS5lbmdpbmVzLm5vZGU7XG5cbmNvbnN0IEdJVF9NRVRBX1JPT1QgPSAnLmdpdCc7XG5jb25zdCBHSVRfQklOQVJZID0gYGdpdCR7c3lzdGVtLmlzV2luZG93cygpID8gJy5leGUnIDogJyd9YDtcbmNvbnN0IEdJVEhVQl9BUEkgPSAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9hcHBpdW0vYXBwaXVtJztcblxuY29uc3QgQlVJTERfSU5GTyA9IHtcbiAgdmVyc2lvbjogQVBQSVVNX1ZFUixcbn07XG5cbmZ1bmN0aW9uIGdldE5vZGVWZXJzaW9uICgpIHtcbiAgcmV0dXJuIHNlbXZlci5jb2VyY2UocHJvY2Vzcy52ZXJzaW9uKTtcbn1cblxuZnVuY3Rpb24gaXNTdWJDbGFzcyAoY2FuZGlkYXRlQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgcmV0dXJuIF8uaXNGdW5jdGlvbihzdXBlckNsYXNzKSAmJiBfLmlzRnVuY3Rpb24oY2FuZGlkYXRlQ2xhc3MpXG4gICAgJiYgKGNhbmRpZGF0ZUNsYXNzLnByb3RvdHlwZSBpbnN0YW5jZW9mIHN1cGVyQ2xhc3MgfHwgY2FuZGlkYXRlQ2xhc3MgPT09IHN1cGVyQ2xhc3MpO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVCdWlsZEluZm8gKHVzZUdpdGh1YkFwaUZhbGxiYWNrID0gZmFsc2UpIHtcbiAgY29uc3Qgc2hhID0gYXdhaXQgZ2V0R2l0UmV2KHVzZUdpdGh1YkFwaUZhbGxiYWNrKTtcbiAgaWYgKCFzaGEpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgQlVJTERfSU5GT1snZ2l0LXNoYSddID0gc2hhO1xuICBjb25zdCBidWlsdCA9IGF3YWl0IGdldEdpdFRpbWVzdGFtcChzaGEsIHVzZUdpdGh1YkFwaUZhbGxiYWNrKTtcbiAgaWYgKCFfLmlzRW1wdHkoYnVpbHQpKSB7XG4gICAgQlVJTERfSU5GTy5idWlsdCA9IGJ1aWx0O1xuICB9XG59XG5cbi8qKlxuICogRmluZHMgdGhlIEdpdCBtZXRhZGF0YSBkaXIgKHNlZSBgR0lUX01FVEFfUk9PVGApXG4gKlxuICogVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBBcHBpdW0gY2Fubm90IGFzc3VtZSBgcGFja2FnZS5qc29uYCBhbmQgYC5naXRgIGFyZSBpbiB0aGUgc2FtZVxuICogZGlyZWN0b3J5LiAgTW9ub3JlcG9zLCBzZWU/XG4gKiBAcmV0dXJucyB7c3RyaW5nfHZvaWR9IFBhdGggdG8gZGlyIG9yIGB1bmRlZmluZWRgIGlmIG5vdCBmb3VuZFxuICovXG5hc3luYyBmdW5jdGlvbiBmaW5kR2l0Um9vdCAoKSB7XG4gIHJldHVybiBhd2FpdCBmaW5kVXAoR0lUX01FVEFfUk9PVCwge2N3ZDogcm9vdERpciwgdHlwZTogJ2RpcmVjdG9yeSd9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0R2l0UmV2ICh1c2VHaXRodWJBcGlGYWxsYmFjayA9IGZhbHNlKSB7XG4gIGNvbnN0IGdpdFJvb3QgPSBhd2FpdCBmaW5kR2l0Um9vdCgpO1xuICBpZiAoZ2l0Um9vdCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoR0lUX0JJTkFSWSwgWydyZXYtcGFyc2UnLCAnSEVBRCddLCB7XG4gICAgICAgIGN3ZDogZ2l0Um9vdFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3Rkb3V0LnRyaW0oKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cblxuICBpZiAoIXVzZUdpdGh1YkFwaUZhbGxiYWNrKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlc0JvZHlPYmogPSAoYXdhaXQgYXhpb3MuZ2V0KGAke0dJVEhVQl9BUEl9L3RhZ3NgLCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdVc2VyLUFnZW50JzogYEFwcGl1bSAke0FQUElVTV9WRVJ9YFxuICAgICAgfVxuICAgIH0pKS5kYXRhO1xuICAgIGlmIChfLmlzQXJyYXkocmVzQm9keU9iaikpIHtcbiAgICAgIGZvciAoY29uc3Qge25hbWUsIGNvbW1pdH0gb2YgcmVzQm9keU9iaikge1xuICAgICAgICBpZiAobmFtZSA9PT0gYHYke0FQUElVTV9WRVJ9YCAmJiBjb21taXQgJiYgY29tbWl0LnNoYSkge1xuICAgICAgICAgIHJldHVybiBjb21taXQuc2hhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChpZ24pIHt9XG4gIHJldHVybiBudWxsO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRHaXRUaW1lc3RhbXAgKGNvbW1pdFNoYSwgdXNlR2l0aHViQXBpRmFsbGJhY2sgPSBmYWxzZSkge1xuICBjb25zdCBnaXRSb290ID0gYXdhaXQgZmluZEdpdFJvb3QoKTtcbiAgaWYgKGdpdFJvb3QpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKEdJVF9CSU5BUlksIFsnc2hvdycsICctcycsICctLWZvcm1hdD0lY2knLCBjb21taXRTaGFdLCB7XG4gICAgICAgIGN3ZDogZ2l0Um9vdFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3Rkb3V0LnRyaW0oKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cblxuICBpZiAoIXVzZUdpdGh1YkFwaUZhbGxiYWNrKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlc0JvZHlPYmogPSAoYXdhaXQgYXhpb3MuZ2V0KGAke0dJVEhVQl9BUEl9L2NvbW1pdHMvJHtjb21taXRTaGF9YCwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnVXNlci1BZ2VudCc6IGBBcHBpdW0gJHtBUFBJVU1fVkVSfWBcbiAgICAgIH1cbiAgICB9KSkuZGF0YTtcbiAgICBpZiAocmVzQm9keU9iaiAmJiByZXNCb2R5T2JqLmNvbW1pdCkge1xuICAgICAgaWYgKHJlc0JvZHlPYmouY29tbWl0LmNvbW1pdHRlciAmJiByZXNCb2R5T2JqLmNvbW1pdC5jb21taXR0ZXIuZGF0ZSkge1xuICAgICAgICByZXR1cm4gcmVzQm9keU9iai5jb21taXQuY29tbWl0dGVyLmRhdGU7XG4gICAgICB9XG4gICAgICBpZiAocmVzQm9keU9iai5jb21taXQuYXV0aG9yICYmIHJlc0JvZHlPYmouY29tbWl0LmF1dGhvci5kYXRlKSB7XG4gICAgICAgIHJldHVybiByZXNCb2R5T2JqLmNvbW1pdC5hdXRob3IuZGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGlnbikge31cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQHJldHVybiBNdXRhYmxlIG9iamVjdCBjb250YWluaW5nIEFwcGl1bSBidWlsZCBpbmZvcm1hdGlvbi4gQnkgZGVmYXVsdCBpdFxuICogb25seSBjb250YWlucyB0aGUgQXBwaXVtIHZlcnNpb24sIGJ1dCBpcyB1cGRhdGVkIHdpdGggdGhlIGJ1aWxkIHRpbWVzdGFtcFxuICogYW5kIGdpdCBjb21taXQgaGFzaCBhc3luY2hyb25vdXNseSBhcyBzb29uIGFzIGB1cGRhdGVCdWlsZEluZm9gIGlzIGNhbGxlZFxuICogYW5kIHN1Y2NlZWRzLlxuICovXG5mdW5jdGlvbiBnZXRCdWlsZEluZm8gKCkge1xuICByZXR1cm4gQlVJTERfSU5GTztcbn1cblxuZnVuY3Rpb24gY2hlY2tOb2RlT2sgKCkge1xuICBjb25zdCB2ZXJzaW9uID0gZ2V0Tm9kZVZlcnNpb24oKTtcbiAgaWYgKCFzZW12ZXIuc2F0aXNmaWVzKHZlcnNpb24sIE1JTl9OT0RFX1ZFUlNJT04pKSB7XG4gICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYE5vZGUgdmVyc2lvbiBtdXN0IGJlICR7TUlOX05PREVfVkVSU0lPTn0uIEN1cnJlbnRseSAke3ZlcnNpb24udmVyc2lvbn1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuTm9kZURlcHJlY2F0aW9ucyAoKSB7XG4gIC8qKlxuICAgKiBVbmNvbW1lbnQgdGhpcyBzZWN0aW9uIHRvIGdldCBub2RlIHZlcnNpb24gZGVwcmVjYXRpb24gd2FybmluZ3NcbiAgICogQWxzbyBhZGQgdGVzdCBjYXNlcyB0byBjb25maWctc3BlY3MuanMgdG8gY292ZXIgdGhlIGNhc2VzIGFkZGVkXG4gICAqKi9cblxuICAvLyBjb25zdCB2ZXJzaW9uID0gZ2V0Tm9kZVZlcnNpb24oKTtcbiAgLy8gaWYgKHZlcnNpb24ubWFqb3IgPCA4KSB7XG4gIC8vICAgbG9nZ2VyLndhcm4oYEFwcGl1bSBzdXBwb3J0IGZvciB2ZXJzaW9ucyBvZiBub2RlIDwgJHt2ZXJzaW9uLm1ham9yfSBoYXMgYmVlbiBgICtcbiAgLy8gICAgICAgICAgICAgICAnZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uIFBsZWFzZSAnICtcbiAgLy8gICAgICAgICAgICAgICAndXBncmFkZSEnKTtcbiAgLy8gfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzaG93Q29uZmlnICgpIHtcbiAgYXdhaXQgdXBkYXRlQnVpbGRJbmZvKHRydWUpO1xuICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShnZXRCdWlsZEluZm8oKSkpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbn1cblxuZnVuY3Rpb24gZ2V0Tm9uRGVmYXVsdFNlcnZlckFyZ3MgKHBhcnNlciwgYXJncykge1xuICAvLyBob3BlZnVsbHkgdGhlc2UgZnVuY3Rpb24gbmFtZXMgYXJlIGRlc2NyaXB0aXZlIGVub3VnaFxuXG4gIGZ1bmN0aW9uIHR5cGVzRGlmZmVyIChkZXN0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBhcmdzW2Rlc3RdICE9PSB0eXBlb2YgZGVmYXVsdHNGcm9tU2NoZW1hW2Rlc3RdO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVmYXVsdFZhbHVlSXNBcnJheSAoZGVzdCkge1xuICAgIHJldHVybiBfLmlzQXJyYXkoZGVmYXVsdHNGcm9tU2NoZW1hW2Rlc3RdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFyZ3NWYWx1ZUlzQXJyYXkgKGRlc3QpIHtcbiAgICByZXR1cm4gXy5pc0FycmF5KGFyZ3NbZGVzdF0pO1xuICB9XG5cbiAgZnVuY3Rpb24gYXJyYXlzRGlmZmVyIChkZXN0KSB7XG4gICAgcmV0dXJuIF8uZGlmZmVyZW5jZShhcmdzW2Rlc3RdLCBkZWZhdWx0c0Zyb21TY2hlbWFbZGVzdF0pLmxlbmd0aCA+IDA7XG4gIH1cblxuICBmdW5jdGlvbiB2YWx1ZXNVbmVxdWFsIChkZXN0KSB7XG4gICAgcmV0dXJuIGFyZ3NbZGVzdF0gIT09IGRlZmF1bHRzRnJvbVNjaGVtYVtkZXN0XTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZmF1bHRJc0RlZmluZWQgKGRlc3QpIHtcbiAgICByZXR1cm4gIV8uaXNVbmRlZmluZWQoZGVmYXVsdHNGcm9tU2NoZW1hW2Rlc3RdKTtcbiAgfVxuXG4gIC8vIG5vdGUgdGhhdCBgXy5vdmVyRXZlcnlgIGlzIGxpa2UgYW4gXCJBTkRcIiwgYW5kIGBfLm92ZXJTb21lYCBpcyBsaWtlIGFuIFwiT1JcIlxuXG4gIGNvbnN0IGFyZ1ZhbHVlTm90QXJyYXlPckFycmF5c0RpZmZlciA9IF8ub3ZlclNvbWUoW1xuICAgIF8ubmVnYXRlKGFyZ3NWYWx1ZUlzQXJyYXkpLFxuICAgIGFycmF5c0RpZmZlclxuICBdKTtcblxuICBjb25zdCBkZWZhdWx0VmFsdWVOb3RBcnJheUFuZFZhbHVlc1VuZXF1YWwgPSBfLm92ZXJFdmVyeShbXG4gICAgXy5uZWdhdGUoZGVmYXVsdFZhbHVlSXNBcnJheSksIHZhbHVlc1VuZXF1YWxcbiAgXSk7XG5cbiAgLyoqXG4gICAqIFRoaXMgdXNlZCB0byBiZSBhIGhpZGVvdXMgY29uZGl0aW9uYWwsIGJ1dCBpdCdzIGJyb2tlbiB1cCBpbnRvIGEgaGlkZW91cyBmdW5jdGlvbiBpbnN0ZWFkLlxuICAgKiBob3BlZnVsbHkgdGhpcyBtYWtlcyB0aGluZ3MgYSBsaXR0bGUgbW9yZSB1bmRlcnN0YW5kYWJsZS5cbiAgICogLSBjaGVja3MgaWYgdGhlIGRlZmF1bHQgdmFsdWUgaXMgZGVmaW5lZFxuICAgKiAtIGlmIHNvLCBhbmQgdGhlIGRlZmF1bHQgaXMgbm90IGFuIGFycmF5OlxuICAgKiAgIC0gZW5zdXJlcyB0aGUgdHlwZXMgYXJlIHRoZSBzYW1lXG4gICAqICAgLSBlbnN1cmVzIHRoZSB2YWx1ZXMgYXJlIGVxdWFsXG4gICAqIC0gaWYgc28sIGFuZCB0aGUgZGVmYXVsdCBpcyBhbiBhcnJheTpcbiAgICogICAtIGVuc3VyZXMgdGhlIGFyZ3MgdmFsdWUgaXMgYW4gYXJyYXlcbiAgICogICAtIGVuc3VyZXMgdGhlIGFyZ3MgdmFsdWVzIGRvIG5vdCBkaWZmZXIgZnJvbSB0aGUgZGVmYXVsdCB2YWx1ZXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRlc3QgLSBhcmd1bWVudCBuYW1lIChgZGVzdGAgdmFsdWUpXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgY29uc3QgaXNOb3REZWZhdWx0ID0gXy5vdmVyRXZlcnkoW1xuICAgIGRlZmF1bHRJc0RlZmluZWQsXG4gICAgXy5vdmVyU29tZShbXG4gICAgICB0eXBlc0RpZmZlcixcbiAgICAgIF8ub3ZlckV2ZXJ5KFtcbiAgICAgICAgZGVmYXVsdFZhbHVlSXNBcnJheSxcbiAgICAgICAgYXJnVmFsdWVOb3RBcnJheU9yQXJyYXlzRGlmZmVyXG4gICAgICBdKSxcbiAgICAgIGRlZmF1bHRWYWx1ZU5vdEFycmF5QW5kVmFsdWVzVW5lcXVhbFxuICAgIF0pXG4gIF0pO1xuXG4gIGNvbnN0IGRlZmF1bHRzRnJvbVNjaGVtYSA9IGdldERlZmF1bHRzRnJvbVNjaGVtYSgpO1xuXG4gIHJldHVybiBfLnBpY2tCeShhcmdzLCAoX18sIGtleSkgPT4gaXNOb3REZWZhdWx0KGtleSkpO1xufVxuXG5mdW5jdGlvbiBnZXREZXByZWNhdGVkQXJncyAocGFyc2VyLCBhcmdzKSB7XG4gIC8vIGdvIHRocm91Z2ggdGhlIHNlcnZlciBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGFuZCBmaWd1cmVcbiAgLy8gb3V0IHdoaWNoIG9mIHRoZSBvbmVzIHVzZWQgYXJlIGRlcHJlY2F0ZWRcbiAgcmV0dXJuIHBhcnNlci5yYXdBcmdzLnJlZHVjZSgoYWNjLCBbW25hbWVdLCB7ZGVzdCwgZGVmYXVsdDogZGVmYXVsdFZhbHVlLCBhY3Rpb259XSkgPT4ge1xuICAgIGlmICghYXJnc1tkZXN0XSB8fCBhcmdzW2Rlc3RdID09PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgaWYgKGFjdGlvbj8uZGVwcmVjYXRlZF9mb3IpIHtcbiAgICAgIGFjY1tuYW1lXSA9IGFjdGlvbi5kZXByZWNhdGVkX2ZvcjtcbiAgICB9IGVsc2UgaWYgKGlzU3ViQ2xhc3MoYWN0aW9uLCBTdG9yZURlcHJlY2F0ZWREZWZhdWx0Q2FwYWJpbGl0eUFjdGlvbikpIHtcbiAgICAgIGFjY1tuYW1lXSA9IERFRkFVTFRfQ0FQU19BUkc7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVUbXBEaXIgKHRtcERpcikge1xuICB0cnkge1xuICAgIGF3YWl0IG1rZGlycCh0bXBEaXIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBXZSBjb3VsZCBub3QgZW5zdXJlIHRoYXQgdGhlIHRlbXAgZGlyIHlvdSBzcGVjaWZpZWQgYCArXG4gICAgICAgICAgICAgICAgICAgIGAoJHt0bXBEaXJ9KSBleGlzdHMuIFBsZWFzZSBtYWtlIHN1cmUgaXQncyB3cml0ZWFibGUuYCk7XG4gIH1cbn1cblxuZXhwb3J0IHtcbiAgZ2V0QnVpbGRJbmZvLCBjaGVja05vZGVPaywgc2hvd0NvbmZpZyxcbiAgd2Fybk5vZGVEZXByZWNhdGlvbnMsIHZhbGlkYXRlVG1wRGlyLCBnZXROb25EZWZhdWx0U2VydmVyQXJncyxcbiAgZ2V0R2l0UmV2LCBBUFBJVU1fVkVSLCB1cGRhdGVCdWlsZEluZm8sXG4gIGdldERlcHJlY2F0ZWRBcmdzXG59O1xuIl0sImZpbGUiOiJsaWIvY29uZmlnLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
@@ -7,41 +7,61 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.default = void 0;
|
|
9
9
|
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
10
12
|
require("source-map-support/register");
|
|
11
13
|
|
|
12
14
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
13
15
|
|
|
14
|
-
var _extensionConfig =
|
|
15
|
-
|
|
16
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
16
|
+
var _extensionConfig = _interopRequireDefault(require("./extension-config"));
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
var _extConfigIo = require("./ext-config-io");
|
|
19
19
|
|
|
20
20
|
class DriverConfig extends _extensionConfig.default {
|
|
21
|
-
constructor(appiumHome, logFn
|
|
22
|
-
super(appiumHome,
|
|
21
|
+
constructor(appiumHome, logFn) {
|
|
22
|
+
super(appiumHome, _extConfigIo.DRIVER_TYPE, logFn);
|
|
23
|
+
this.knownAutomationNames = new Set();
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
async read() {
|
|
27
|
+
this.knownAutomationNames.clear();
|
|
28
|
+
return await super.read();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
static getInstance(appiumHome, logFn) {
|
|
32
|
+
var _DriverConfig$_instan;
|
|
33
|
+
|
|
34
|
+
const instance = (_DriverConfig$_instan = DriverConfig._instances[appiumHome]) !== null && _DriverConfig$_instan !== void 0 ? _DriverConfig$_instan : new DriverConfig(appiumHome, logFn);
|
|
35
|
+
DriverConfig._instances[appiumHome] = instance;
|
|
36
|
+
return instance;
|
|
23
37
|
}
|
|
24
38
|
|
|
25
|
-
getConfigProblems(
|
|
39
|
+
getConfigProblems(extData, extName) {
|
|
26
40
|
const problems = [];
|
|
27
|
-
const automationNames = [];
|
|
28
41
|
const {
|
|
29
42
|
platformNames,
|
|
30
43
|
automationName
|
|
31
|
-
} =
|
|
44
|
+
} = extData;
|
|
32
45
|
|
|
33
46
|
if (!_lodash.default.isArray(platformNames)) {
|
|
34
47
|
problems.push({
|
|
35
|
-
err: 'Missing or incorrect supported
|
|
48
|
+
err: 'Missing or incorrect supported platformNames list.',
|
|
36
49
|
val: platformNames
|
|
37
50
|
});
|
|
38
51
|
} else {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
52
|
+
if (_lodash.default.isEmpty(platformNames)) {
|
|
53
|
+
problems.push({
|
|
54
|
+
err: 'Empty platformNames list.',
|
|
55
|
+
val: platformNames
|
|
56
|
+
});
|
|
57
|
+
} else {
|
|
58
|
+
for (const pName of platformNames) {
|
|
59
|
+
if (!_lodash.default.isString(pName)) {
|
|
60
|
+
problems.push({
|
|
61
|
+
err: 'Incorrectly formatted platformName.',
|
|
62
|
+
val: pName
|
|
63
|
+
});
|
|
64
|
+
}
|
|
45
65
|
}
|
|
46
66
|
}
|
|
47
67
|
}
|
|
@@ -53,14 +73,14 @@ class DriverConfig extends _extensionConfig.default {
|
|
|
53
73
|
});
|
|
54
74
|
}
|
|
55
75
|
|
|
56
|
-
if (
|
|
76
|
+
if (this.knownAutomationNames.has(automationName)) {
|
|
57
77
|
problems.push({
|
|
58
78
|
err: 'Multiple drivers claim support for the same automationName',
|
|
59
79
|
val: automationName
|
|
60
80
|
});
|
|
61
81
|
}
|
|
62
82
|
|
|
63
|
-
|
|
83
|
+
this.knownAutomationNames.add(automationName);
|
|
64
84
|
return problems;
|
|
65
85
|
}
|
|
66
86
|
|
|
@@ -73,7 +93,8 @@ class DriverConfig extends _extensionConfig.default {
|
|
|
73
93
|
|
|
74
94
|
}
|
|
75
95
|
|
|
76
|
-
exports.default = DriverConfig;
|
|
96
|
+
exports.default = DriverConfig;
|
|
97
|
+
(0, _defineProperty2.default)(DriverConfig, "_instances", {});require('source-map-support').install();
|
|
77
98
|
|
|
78
99
|
|
|
79
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
100
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXItY29uZmlnLmpzIl0sIm5hbWVzIjpbIkRyaXZlckNvbmZpZyIsIkV4dGVuc2lvbkNvbmZpZyIsImNvbnN0cnVjdG9yIiwiYXBwaXVtSG9tZSIsImxvZ0ZuIiwiRFJJVkVSX1RZUEUiLCJrbm93bkF1dG9tYXRpb25OYW1lcyIsIlNldCIsInJlYWQiLCJjbGVhciIsImdldEluc3RhbmNlIiwiaW5zdGFuY2UiLCJfaW5zdGFuY2VzIiwiZ2V0Q29uZmlnUHJvYmxlbXMiLCJleHREYXRhIiwiZXh0TmFtZSIsInByb2JsZW1zIiwicGxhdGZvcm1OYW1lcyIsImF1dG9tYXRpb25OYW1lIiwiXyIsImlzQXJyYXkiLCJwdXNoIiwiZXJyIiwidmFsIiwiaXNFbXB0eSIsInBOYW1lIiwiaXNTdHJpbmciLCJoYXMiLCJhZGQiLCJleHRlbnNpb25EZXNjIiwiZHJpdmVyTmFtZSIsInZlcnNpb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFFZSxNQUFNQSxZQUFOLFNBQTJCQyx3QkFBM0IsQ0FBMkM7QUFleERDLEVBQUFBLFdBQVcsQ0FBRUMsVUFBRixFQUFjQyxLQUFkLEVBQXFCO0FBQzlCLFVBQU1ELFVBQU4sRUFBa0JFLHdCQUFsQixFQUErQkQsS0FBL0I7QUFFQSxTQUFLRSxvQkFBTCxHQUE0QixJQUFJQyxHQUFKLEVBQTVCO0FBQ0Q7O0FBRVMsUUFBSkMsSUFBSSxHQUFJO0FBQ1osU0FBS0Ysb0JBQUwsQ0FBMEJHLEtBQTFCO0FBQ0EsV0FBTyxNQUFNLE1BQU1ELElBQU4sRUFBYjtBQUNEOztBQVFpQixTQUFYRSxXQUFXLENBQUVQLFVBQUYsRUFBY0MsS0FBZCxFQUFxQjtBQUFBOztBQUNyQyxVQUFNTyxRQUFRLDRCQUFHWCxZQUFZLENBQUNZLFVBQWIsQ0FBd0JULFVBQXhCLENBQUgseUVBQTBDLElBQUlILFlBQUosQ0FBaUJHLFVBQWpCLEVBQTZCQyxLQUE3QixDQUF4RDtBQUNBSixJQUFBQSxZQUFZLENBQUNZLFVBQWIsQ0FBd0JULFVBQXhCLElBQXNDUSxRQUF0QztBQUNBLFdBQU9BLFFBQVA7QUFDRDs7QUFTREUsRUFBQUEsaUJBQWlCLENBQUVDLE9BQUYsRUFBV0MsT0FBWCxFQUFvQjtBQUNuQyxVQUFNQyxRQUFRLEdBQUcsRUFBakI7QUFDQSxVQUFNO0FBQUNDLE1BQUFBLGFBQUQ7QUFBZ0JDLE1BQUFBO0FBQWhCLFFBQWtDSixPQUF4Qzs7QUFFQSxRQUFJLENBQUNLLGdCQUFFQyxPQUFGLENBQVVILGFBQVYsQ0FBTCxFQUErQjtBQUM3QkQsTUFBQUEsUUFBUSxDQUFDSyxJQUFULENBQWM7QUFDWkMsUUFBQUEsR0FBRyxFQUFFLG9EQURPO0FBRVpDLFFBQUFBLEdBQUcsRUFBRU47QUFGTyxPQUFkO0FBSUQsS0FMRCxNQUtPO0FBQ0wsVUFBSUUsZ0JBQUVLLE9BQUYsQ0FBVVAsYUFBVixDQUFKLEVBQThCO0FBQzVCRCxRQUFBQSxRQUFRLENBQUNLLElBQVQsQ0FBYztBQUNaQyxVQUFBQSxHQUFHLEVBQUUsMkJBRE87QUFFWkMsVUFBQUEsR0FBRyxFQUFFTjtBQUZPLFNBQWQ7QUFJRCxPQUxELE1BS087QUFDTCxhQUFLLE1BQU1RLEtBQVgsSUFBb0JSLGFBQXBCLEVBQW1DO0FBQ2pDLGNBQUksQ0FBQ0UsZ0JBQUVPLFFBQUYsQ0FBV0QsS0FBWCxDQUFMLEVBQXdCO0FBQ3RCVCxZQUFBQSxRQUFRLENBQUNLLElBQVQsQ0FBYztBQUFDQyxjQUFBQSxHQUFHLEVBQUUscUNBQU47QUFBNkNDLGNBQUFBLEdBQUcsRUFBRUU7QUFBbEQsYUFBZDtBQUNEO0FBQ0Y7QUFDRjtBQUNGOztBQUVELFFBQUksQ0FBQ04sZ0JBQUVPLFFBQUYsQ0FBV1IsY0FBWCxDQUFMLEVBQWlDO0FBQy9CRixNQUFBQSxRQUFRLENBQUNLLElBQVQsQ0FBYztBQUFDQyxRQUFBQSxHQUFHLEVBQUUscUNBQU47QUFBNkNDLFFBQUFBLEdBQUcsRUFBRUw7QUFBbEQsT0FBZDtBQUNEOztBQUVELFFBQUksS0FBS1osb0JBQUwsQ0FBMEJxQixHQUExQixDQUE4QlQsY0FBOUIsQ0FBSixFQUFtRDtBQUNqREYsTUFBQUEsUUFBUSxDQUFDSyxJQUFULENBQWM7QUFDWkMsUUFBQUEsR0FBRyxFQUFFLDREQURPO0FBRVpDLFFBQUFBLEdBQUcsRUFBRUw7QUFGTyxPQUFkO0FBSUQ7O0FBR0QsU0FBS1osb0JBQUwsQ0FBMEJzQixHQUExQixDQUE4QlYsY0FBOUI7QUFFQSxXQUFPRixRQUFQO0FBQ0Q7O0FBTURhLEVBQUFBLGFBQWEsQ0FBRUMsVUFBRixFQUFjO0FBQUNDLElBQUFBLE9BQUQ7QUFBVWIsSUFBQUE7QUFBVixHQUFkLEVBQXlDO0FBQ3BELFdBQVEsR0FBRVksVUFBVyxJQUFHQyxPQUFRLHFCQUFvQmIsY0FBZSxJQUFuRTtBQUNEOztBQTVGdUQ7Ozs4QkFBckNsQixZLGdCQU9DLEUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBFeHRlbnNpb25Db25maWcgZnJvbSAnLi9leHRlbnNpb24tY29uZmlnJztcbmltcG9ydCB7IERSSVZFUl9UWVBFIH0gZnJvbSAnLi9leHQtY29uZmlnLWlvJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJpdmVyQ29uZmlnIGV4dGVuZHMgRXh0ZW5zaW9uQ29uZmlnIHtcbiAgLyoqXG4gICAqIEEgbWFwcGluZyBvZiBgQVBQSVVNX0hPTUVgIHZhbHVlcyB0byB7QGxpbmsgRHJpdmVyQ29uZmlnfSBpbnN0YW5jZXMuXG4gICAqIEVhY2ggYEFQUElVTV9IT01FYCBzaG91bGQgb25seSBoYXZlIG9uZSBhc3NvY2lhdGVkIGBEcml2ZXJDb25maWdgIGluc3RhbmNlLlxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxEcml2ZXJDb25maWc+fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc3RhdGljIF9pbnN0YW5jZXMgPSB7fTtcblxuICAvKipcbiAgICogQ2FsbCB7QGxpbmsgRHJpdmVyQ29uZmlnLmdldEluc3RhbmNlfSBpbnN0ZWFkLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBwaXVtSG9tZVxuICAgKiBAcGFyYW0geyguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZH0gW2xvZ0ZuXVxuICAgKi9cbiAgY29uc3RydWN0b3IgKGFwcGl1bUhvbWUsIGxvZ0ZuKSB7XG4gICAgc3VwZXIoYXBwaXVtSG9tZSwgRFJJVkVSX1RZUEUsIGxvZ0ZuKTtcbiAgICAvKiogQHR5cGUge1NldDxzdHJpbmc+fSAqL1xuICAgIHRoaXMua25vd25BdXRvbWF0aW9uTmFtZXMgPSBuZXcgU2V0KCk7XG4gIH1cblxuICBhc3luYyByZWFkICgpIHtcbiAgICB0aGlzLmtub3duQXV0b21hdGlvbk5hbWVzLmNsZWFyKCk7XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLnJlYWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIG9yIGdldHMgYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERyaXZlckNvbmZpZ30gYmFzZWQgdmFsdWUgb2YgYGFwcGl1bUhvbWVgXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lIC0gYEFQUElVTV9IT01FYCBwYXRoXG4gICAqIEBwYXJhbSB7KC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkfSBbbG9nRm5dIC0gT3B0aW9uYWwgbG9nZ2luZyBmdW5jdGlvblxuICAgKiBAcmV0dXJucyB7RHJpdmVyQ29uZmlnfVxuICAgKi9cbiAgc3RhdGljIGdldEluc3RhbmNlIChhcHBpdW1Ib21lLCBsb2dGbikge1xuICAgIGNvbnN0IGluc3RhbmNlID0gRHJpdmVyQ29uZmlnLl9pbnN0YW5jZXNbYXBwaXVtSG9tZV0gPz8gbmV3IERyaXZlckNvbmZpZyhhcHBpdW1Ib21lLCBsb2dGbik7XG4gICAgRHJpdmVyQ29uZmlnLl9pbnN0YW5jZXNbYXBwaXVtSG9tZV0gPSBpbnN0YW5jZTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV4dERhdGFcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWVcbiAgICogQHJldHVybnMge2ltcG9ydCgnLi9leHRlbnNpb24tY29uZmlnJykuUHJvYmxlbVtdfVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGdldENvbmZpZ1Byb2JsZW1zIChleHREYXRhLCBleHROYW1lKSB7XG4gICAgY29uc3QgcHJvYmxlbXMgPSBbXTtcbiAgICBjb25zdCB7cGxhdGZvcm1OYW1lcywgYXV0b21hdGlvbk5hbWV9ID0gZXh0RGF0YTtcblxuICAgIGlmICghXy5pc0FycmF5KHBsYXRmb3JtTmFtZXMpKSB7XG4gICAgICBwcm9ibGVtcy5wdXNoKHtcbiAgICAgICAgZXJyOiAnTWlzc2luZyBvciBpbmNvcnJlY3Qgc3VwcG9ydGVkIHBsYXRmb3JtTmFtZXMgbGlzdC4nLFxuICAgICAgICB2YWw6IHBsYXRmb3JtTmFtZXNcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXy5pc0VtcHR5KHBsYXRmb3JtTmFtZXMpKSB7XG4gICAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICAgIGVycjogJ0VtcHR5IHBsYXRmb3JtTmFtZXMgbGlzdC4nLFxuICAgICAgICAgIHZhbDogcGxhdGZvcm1OYW1lc1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgcE5hbWUgb2YgcGxhdGZvcm1OYW1lcykge1xuICAgICAgICAgIGlmICghXy5pc1N0cmluZyhwTmFtZSkpIHtcbiAgICAgICAgICAgIHByb2JsZW1zLnB1c2goe2VycjogJ0luY29ycmVjdGx5IGZvcm1hdHRlZCBwbGF0Zm9ybU5hbWUuJywgdmFsOiBwTmFtZX0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghXy5pc1N0cmluZyhhdXRvbWF0aW9uTmFtZSkpIHtcbiAgICAgIHByb2JsZW1zLnB1c2goe2VycjogJ01pc3Npbmcgb3IgaW5jb3JyZWN0IGF1dG9tYXRpb25OYW1lJywgdmFsOiBhdXRvbWF0aW9uTmFtZX0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmtub3duQXV0b21hdGlvbk5hbWVzLmhhcyhhdXRvbWF0aW9uTmFtZSkpIHtcbiAgICAgIHByb2JsZW1zLnB1c2goe1xuICAgICAgICBlcnI6ICdNdWx0aXBsZSBkcml2ZXJzIGNsYWltIHN1cHBvcnQgZm9yIHRoZSBzYW1lIGF1dG9tYXRpb25OYW1lJyxcbiAgICAgICAgdmFsOiBhdXRvbWF0aW9uTmFtZVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc2hvdWxkIHdlIHJldGFpbiB0aGUgbmFtZSBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24sIG9uY2Ugd2UndmUgY2hlY2tlZCB0aGVyZSBhcmUgbm8gcHJvYmxlbXM/XG4gICAgdGhpcy5rbm93bkF1dG9tYXRpb25OYW1lcy5hZGQoYXV0b21hdGlvbk5hbWUpO1xuXG4gICAgcmV0dXJuIHByb2JsZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkcml2ZXJOYW1lXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBleHREYXRhXG4gICAqL1xuICBleHRlbnNpb25EZXNjIChkcml2ZXJOYW1lLCB7dmVyc2lvbiwgYXV0b21hdGlvbk5hbWV9KSB7XG4gICAgcmV0dXJuIGAke2RyaXZlck5hbWV9QCR7dmVyc2lvbn0gKGF1dG9tYXRpb25OYW1lICcke2F1dG9tYXRpb25OYW1lfScpYDtcbiAgfVxufVxuXG4iXSwiZmlsZSI6ImxpYi9kcml2ZXItY29uZmlnLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
package/build/lib/drivers.js
CHANGED
|
@@ -5,8 +5,8 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.findMatchingDriver = findMatchingDriver;
|
|
9
8
|
exports.KNOWN_DRIVERS = void 0;
|
|
9
|
+
exports.findMatchingDriver = findMatchingDriver;
|
|
10
10
|
|
|
11
11
|
require("source-map-support/register");
|
|
12
12
|
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.getExtConfigIOInstance = exports.PLUGIN_TYPE = exports.DRIVER_TYPE = void 0;
|
|
9
|
+
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
12
|
+
require("source-map-support/register");
|
|
13
|
+
|
|
14
|
+
var _support = require("@appium/support");
|
|
15
|
+
|
|
16
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
17
|
+
|
|
18
|
+
var _path = _interopRequireDefault(require("path"));
|
|
19
|
+
|
|
20
|
+
var _yaml = _interopRequireDefault(require("yaml"));
|
|
21
|
+
|
|
22
|
+
const CONFIG_FILE_NAME = 'extensions.yaml';
|
|
23
|
+
const CONFIG_SCHEMA_REV = 2;
|
|
24
|
+
const DRIVER_TYPE = 'driver';
|
|
25
|
+
exports.DRIVER_TYPE = DRIVER_TYPE;
|
|
26
|
+
const PLUGIN_TYPE = 'plugin';
|
|
27
|
+
exports.PLUGIN_TYPE = PLUGIN_TYPE;
|
|
28
|
+
const VALID_EXT_TYPES = new Set([DRIVER_TYPE, PLUGIN_TYPE]);
|
|
29
|
+
const CONFIG_DATA_DRIVER_KEY = `${DRIVER_TYPE}s`;
|
|
30
|
+
const CONFIG_DATA_PLUGIN_KEY = `${PLUGIN_TYPE}s`;
|
|
31
|
+
|
|
32
|
+
class ExtConfigIO {
|
|
33
|
+
constructor(appiumHome) {
|
|
34
|
+
(0, _defineProperty2.default)(this, "_dirty", void 0);
|
|
35
|
+
(0, _defineProperty2.default)(this, "_data", void 0);
|
|
36
|
+
(0, _defineProperty2.default)(this, "_extDataByType", new Map());
|
|
37
|
+
(0, _defineProperty2.default)(this, "_filepath", void 0);
|
|
38
|
+
(0, _defineProperty2.default)(this, "_appiumHome", void 0);
|
|
39
|
+
(0, _defineProperty2.default)(this, "_writing", null);
|
|
40
|
+
(0, _defineProperty2.default)(this, "_reading", null);
|
|
41
|
+
this._filepath = _path.default.resolve(appiumHome, CONFIG_FILE_NAME);
|
|
42
|
+
this._appiumHome = appiumHome;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
_createProxy(extensionType, data) {
|
|
46
|
+
return new Proxy(data[`${extensionType}s`], {
|
|
47
|
+
set: (target, prop, value) => {
|
|
48
|
+
if (value !== target[prop]) {
|
|
49
|
+
this._dirty = true;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
target[prop] = value;
|
|
53
|
+
return Reflect.set(target, prop, value);
|
|
54
|
+
},
|
|
55
|
+
deleteProperty: (target, prop) => {
|
|
56
|
+
if (prop in target) {
|
|
57
|
+
this._dirty = true;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return Reflect.deleteProperty(target, prop);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
get filepath() {
|
|
66
|
+
return this._filepath;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
async read(extensionType) {
|
|
70
|
+
if (this._reading) {
|
|
71
|
+
await this._reading;
|
|
72
|
+
return this._extDataByType.get(extensionType);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
this._reading = (async () => {
|
|
76
|
+
if (!VALID_EXT_TYPES.has(extensionType)) {
|
|
77
|
+
throw new TypeError(`Invalid extension type: ${extensionType}. Valid values are: ${[...VALID_EXT_TYPES].join(', ')}`);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (this._extDataByType.has(extensionType)) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
let data;
|
|
85
|
+
let isNewFile = false;
|
|
86
|
+
|
|
87
|
+
try {
|
|
88
|
+
await (0, _support.mkdirp)(this._appiumHome);
|
|
89
|
+
const yaml = await _support.fs.readFile(this.filepath, 'utf8');
|
|
90
|
+
data = _yaml.default.parse(yaml);
|
|
91
|
+
} catch (err) {
|
|
92
|
+
if (err.code === 'ENOENT') {
|
|
93
|
+
data = {
|
|
94
|
+
[CONFIG_DATA_DRIVER_KEY]: {},
|
|
95
|
+
[CONFIG_DATA_PLUGIN_KEY]: {},
|
|
96
|
+
schemaRev: CONFIG_SCHEMA_REV
|
|
97
|
+
};
|
|
98
|
+
isNewFile = true;
|
|
99
|
+
} else {
|
|
100
|
+
throw new Error(`Appium had trouble loading the extension installation ` + `cache file (${this.filepath}). Ensure it exists and is ` + `readable. Specific error: ${err.message}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
this._data = data;
|
|
105
|
+
|
|
106
|
+
this._extDataByType.set(DRIVER_TYPE, this._createProxy(DRIVER_TYPE, data));
|
|
107
|
+
|
|
108
|
+
this._extDataByType.set(PLUGIN_TYPE, this._createProxy(PLUGIN_TYPE, data));
|
|
109
|
+
|
|
110
|
+
if (isNewFile) {
|
|
111
|
+
await this.write(true);
|
|
112
|
+
}
|
|
113
|
+
})();
|
|
114
|
+
|
|
115
|
+
try {
|
|
116
|
+
await this._reading;
|
|
117
|
+
return this._extDataByType.get(extensionType);
|
|
118
|
+
} finally {
|
|
119
|
+
this._reading = null;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
async write(force = false) {
|
|
124
|
+
if (this._writing) {
|
|
125
|
+
return this._writing;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
this._writing = (async () => {
|
|
129
|
+
try {
|
|
130
|
+
if (!this._dirty && !force) {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if (!this._data) {
|
|
135
|
+
throw new ReferenceError('No data to write. Call `read()` first');
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const dataToWrite = { ...this._data,
|
|
139
|
+
[CONFIG_DATA_DRIVER_KEY]: this._extDataByType.get(DRIVER_TYPE),
|
|
140
|
+
[CONFIG_DATA_PLUGIN_KEY]: this._extDataByType.get(PLUGIN_TYPE)
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
try {
|
|
144
|
+
await _support.fs.writeFile(this.filepath, _yaml.default.stringify(dataToWrite), 'utf8');
|
|
145
|
+
this._dirty = false;
|
|
146
|
+
return true;
|
|
147
|
+
} catch {
|
|
148
|
+
throw new Error(`Appium could not parse or write from the Appium Home directory ` + `(${this._appiumHome}). Please ensure it is writable.`);
|
|
149
|
+
}
|
|
150
|
+
} finally {
|
|
151
|
+
this._writing = null;
|
|
152
|
+
}
|
|
153
|
+
})();
|
|
154
|
+
|
|
155
|
+
return await this._writing;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
const getExtConfigIOInstance = _lodash.default.memoize(appiumHome => new ExtConfigIO(appiumHome));
|
|
161
|
+
|
|
162
|
+
exports.getExtConfigIOInstance = getExtConfigIOInstance;require('source-map-support').install();
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9leHQtY29uZmlnLWlvLmpzIl0sIm5hbWVzIjpbIkNPTkZJR19GSUxFX05BTUUiLCJDT05GSUdfU0NIRU1BX1JFViIsIkRSSVZFUl9UWVBFIiwiUExVR0lOX1RZUEUiLCJWQUxJRF9FWFRfVFlQRVMiLCJTZXQiLCJDT05GSUdfREFUQV9EUklWRVJfS0VZIiwiQ09ORklHX0RBVEFfUExVR0lOX0tFWSIsIkV4dENvbmZpZ0lPIiwiY29uc3RydWN0b3IiLCJhcHBpdW1Ib21lIiwiTWFwIiwiX2ZpbGVwYXRoIiwicGF0aCIsInJlc29sdmUiLCJfYXBwaXVtSG9tZSIsIl9jcmVhdGVQcm94eSIsImV4dGVuc2lvblR5cGUiLCJkYXRhIiwiUHJveHkiLCJzZXQiLCJ0YXJnZXQiLCJwcm9wIiwidmFsdWUiLCJfZGlydHkiLCJSZWZsZWN0IiwiZGVsZXRlUHJvcGVydHkiLCJmaWxlcGF0aCIsInJlYWQiLCJfcmVhZGluZyIsIl9leHREYXRhQnlUeXBlIiwiZ2V0IiwiaGFzIiwiVHlwZUVycm9yIiwiam9pbiIsImlzTmV3RmlsZSIsInlhbWwiLCJmcyIsInJlYWRGaWxlIiwiWUFNTCIsInBhcnNlIiwiZXJyIiwiY29kZSIsInNjaGVtYVJldiIsIkVycm9yIiwibWVzc2FnZSIsIl9kYXRhIiwid3JpdGUiLCJmb3JjZSIsIl93cml0aW5nIiwiUmVmZXJlbmNlRXJyb3IiLCJkYXRhVG9Xcml0ZSIsIndyaXRlRmlsZSIsInN0cmluZ2lmeSIsImdldEV4dENvbmZpZ0lPSW5zdGFuY2UiLCJfIiwibWVtb2l6ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQU1BOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGdCQUFnQixHQUFHLGlCQUF6QjtBQUtBLE1BQU1DLGlCQUFpQixHQUFHLENBQTFCO0FBRU8sTUFBTUMsV0FBVyxHQUFHLFFBQXBCOztBQUNBLE1BQU1DLFdBQVcsR0FBRyxRQUFwQjs7QUFNUCxNQUFNQyxlQUFlLEdBQUcsSUFBSUMsR0FBSixDQUFR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Y0FBTUMsV0FBVyxHQUFHLEVBQ2xCLEdBQUcsS0FBS0wsS0FEVTtBQUVsQixXQUFDeEMsc0JBQUQsR0FBMEIsS0FBS3dCLGNBQUwsQ0FBb0JDLEdBQXBCLENBQXdCN0IsV0FBeEIsQ0FGUjtBQUdsQixXQUFDSyxzQkFBRCxHQUEwQixLQUFLdUIsY0FBTCxDQUFvQkMsR0FBcEIsQ0FBd0I1QixXQUF4QjtBQUhSLFNBQXBCOztBQU1BLFlBQUk7QUFDRixnQkFBTWtDLFlBQUdlLFNBQUgsQ0FDSixLQUFLekIsUUFERCxFQUVKWSxjQUFLYyxTQUFMLENBQWVGLFdBQWYsQ0FGSSxFQUdKLE1BSEksQ0FBTjtBQUtBLGVBQUszQixNQUFMLEdBQWMsS0FBZDtBQUNBLGlCQUFPLElBQVA7QUFDRCxTQVJELENBUUUsTUFBTTtBQUNOLGdCQUFNLElBQUlvQixLQUFKLENBQ0gsaUVBQUQsR0FDRyxJQUFHLEtBQUs3QixXQUFZLGtDQUZuQixDQUFOO0FBSUQ7QUFDRixPQTdCRCxTQTZCVTtBQUNSLGFBQUtrQyxRQUFMLEdBQWdCLElBQWhCO0FBQ0Q7QUFDRixLQWpDZSxHQUFoQjs7QUFrQ0EsV0FBTyxNQUFNLEtBQUtBLFFBQWxCO0FBQ0Q7O0FBdk9lOztBQWlQWCxNQUFNSyxzQkFBc0IsR0FBR0MsZ0JBQUVDLE9BQUYsQ0FDbkM5QyxVQUFELElBQWdCLElBQUlGLFdBQUosQ0FBZ0JFLFVBQWhCLENBRG9CLENBQS9CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogTW9kdWxlIGNvbnRhaW5pbmcge0BsaW5rIEV4dENvbmZpZ0lPfSB3aGljaCBoYW5kbGVzIHJlYWRpbmcgJiB3cml0aW5nIG9mIGV4dGVuc2lvbiBjb25maWcgZmlsZXMuXG4gKi9cblxuaW1wb3J0IHsgZnMsIG1rZGlycCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgWUFNTCBmcm9tICd5YW1sJztcblxuY29uc3QgQ09ORklHX0ZJTEVfTkFNRSA9ICdleHRlbnNpb25zLnlhbWwnO1xuXG4vKipcbiAqIEN1cnJlbnQgY29uZmlndXJhdGlvbiBzY2hlbWEgcmV2aXNpb24hXG4gKi9cbmNvbnN0IENPTkZJR19TQ0hFTUFfUkVWID0gMjtcblxuZXhwb3J0IGNvbnN0IERSSVZFUl9UWVBFID0gJ2RyaXZlcic7XG5leHBvcnQgY29uc3QgUExVR0lOX1RZUEUgPSAncGx1Z2luJztcblxuLyoqXG4gKiBTZXQgb2YgdmFsaWQgZXh0ZW5zaW9uIHR5cGVzLlxuICogQHR5cGUge1JlYWRvbmx5PFNldDxFeHRlbnNpb25UeXBlPj59XG4gKi9cbmNvbnN0IFZBTElEX0VYVF9UWVBFUyA9IG5ldyBTZXQoW0RSSVZFUl9UWVBFLCBQTFVHSU5fVFlQRV0pO1xuXG5jb25zdCBDT05GSUdfREFUQV9EUklWRVJfS0VZID0gYCR7RFJJVkVSX1RZUEV9c2A7XG5jb25zdCBDT05GSUdfREFUQV9QTFVHSU5fS0VZID0gYCR7UExVR0lOX1RZUEV9c2A7XG5cbi8qKlxuICogSGFuZGxlcyByZWFkaW5nICYgd3JpdGluZyBvZiBleHRlbnNpb24gY29uZmlnIGZpbGVzLlxuICpcbiAqIE9ubHkgb25lIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgZXhpc3RzIHBlciB2YWx1ZSBvZiBgQVBQSVVNX0hPTUVgLlxuICovXG5jbGFzcyBFeHRDb25maWdJTyB7XG4gIC8qKlxuICAgKiBcIkRpcnR5XCIgZmxhZy4gSWYgdHJ1ZSwgdGhlIGRhdGEgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3Qgd3JpdGUuXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RpcnR5O1xuXG4gIC8qKlxuICAgKiBUaGUgZW50aXJlIGNvbnRlbnRzIG9mIGEgcGFyc2VkIFlBTUwgZXh0ZW5zaW9uIGNvbmZpZyBmaWxlLlxuICAgKiBAdHlwZSB7b2JqZWN0P31cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kYXRhO1xuXG4gIC8qKlxuICAgKiBBIG1hcHBpbmcgb2YgZXh0ZW5zaW9uIHR5cGUgdG8gY29uZmlndXJhdGlvbiBkYXRhLiBDb25maWd1cmF0aW9uIGRhdGEgaXNcbiAgICoga2V5ZWQgb24gZXh0ZW5zaW9uIG5hbWUuXG4gICAqXG4gICAqIENvbnN1bWVycyBnZXQgdGhlIHZhbHVlcyBvZiB0aGlzIGBNYXBgIChjb3JyZXNwb25kaW5nIHRvIHRoZVxuICAgKiBgZXh0ZW5zaW9uVHlwZWAgb2YgdGhlIGNvbnN1bWVyLCB3aGljaCB3aWxsIGJlIGEgc3ViY2xhc3Mgb2ZcbiAgICogYEV4dGVuc2lvbkNvbmZpZ2ApIGFuZCBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIGVudGlyZSBkYXRhIG9iamVjdC5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge01hcDxFeHRlbnNpb25UeXBlLG9iamVjdD59XG4gICAqL1xuICBfZXh0RGF0YUJ5VHlwZSA9IG5ldyBNYXAoKTtcblxuICAvKipcbiAgICogUGF0aCB0byBjb25maWcgZmlsZS5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge1JlYWRvbmx5PHN0cmluZz59XG4gICAqL1xuICBfZmlsZXBhdGg7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gYEFQUElVTV9IT01FYFxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIF9hcHBpdW1Ib21lO1xuXG4gIC8qKlxuICAgKiBIZWxwcyBhdm9pZCB3cml0aW5nIG11bHRpcGxlIHRpbWVzLlxuICAgKlxuICAgKiBJZiB0aGlzIGlzIGBudWxsYCwgY2FsbGluZyB7QGxpbmsgRXh0Q29uZmlnSU8ud3JpdGV9IHdpbGwgY2F1c2UgaXQgdG8gYmVcbiAgICogc2V0IHRvIGEgYFByb21pc2VgLiBXaGVuIHRoZSBjYWxsIHRvIGB3cml0ZSgpYCBpcyBjb21wbGV0ZSwgdGhlIGBQcm9taXNlYFxuICAgKiB3aWxsIHJlc29sdmUgYW5kIHRoZW4gdGhpcyB2YWx1ZSB3aWxsIGJlIHNldCB0byBgbnVsbGAuICBDb25jdXJyZW50IGNhbGxzXG4gICAqIG1hZGUgd2hpbGUgdGhpcyB2YWx1ZSBpcyBhIGBQcm9taXNlYCB3aWxsIHJldHVybiB0aGUgYFByb21pc2VgIGl0c2VsZi5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge1Byb21pc2U8Ym9vbGVhbj4/fVxuICAgKi9cbiAgX3dyaXRpbmcgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBIZWxwcyBhdm9pZCByZWFkaW5nIG11bHRpcGxlIHRpbWVzLlxuICAgKlxuICAgKiBJZiB0aGlzIGlzIGBudWxsYCwgY2FsbGluZyB7QGxpbmsgRXh0Q29uZmlnSU8ucmVhZH0gd2lsbCBjYXVzZSBpdCB0byBiZVxuICAgKiBzZXQgdG8gYSBgUHJvbWlzZWAuIFdoZW4gdGhlIGNhbGwgdG8gYHJlYWQoKWAgaXMgY29tcGxldGUsIHRoZSBgUHJvbWlzZWBcbiAgICogd2lsbCByZXNvbHZlIGFuZCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgdG8gYG51bGxgLiAgQ29uY3VycmVudCBjYWxsc1xuICAgKiBtYWRlIHdoaWxlIHRoaXMgdmFsdWUgaXMgYSBgUHJvbWlzZWAgd2lsbCByZXR1cm4gdGhlIGBQcm9taXNlYCBpdHNlbGYuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtQcm9taXNlPHZvaWQ+P31cbiAgICovXG4gIF9yZWFkaW5nID0gbnVsbDtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcGl1bUhvbWVcbiAgICovXG4gIGNvbnN0cnVjdG9yIChhcHBpdW1Ib21lKSB7XG4gICAgdGhpcy5fZmlsZXBhdGggPSBwYXRoLnJlc29sdmUoYXBwaXVtSG9tZSwgQ09ORklHX0ZJTEVfTkFNRSk7XG4gICAgdGhpcy5fYXBwaXVtSG9tZSA9IGFwcGl1bUhvbWU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYWVzIGEgYFByb3h5YCB3aGljaCB3YXRjaGVzIGZvciBjaGFuZ2VzIHRvIHRoZSBleHRlbnNpb24tdHlwZS1zcGVjaWZpY1xuICAgKiBjb25maWcgZGF0YS5cbiAgICpcbiAgICogV2hlbiBjaGFuZ2VzIGFyZSBkZXRlY3RlZCwgaXQgc2V0cyBhIGBfZGlydHlgIGZsYWcuICBUaGUgbmV4dCBjYWxsIHRvXG4gICAqIHtAbGluayBFeHRDb25maWdJTy53cml0ZX0gd2lsbCBjaGVjayBpZiB0aGlzIGZsYWcgaXMgYHRydWVgIGJlZm9yZVxuICAgKiBwcm9jZWVkaW5nLlxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IGV4dGVuc2lvblR5cGVcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLG9iamVjdD59IGRhdGEgLSBFeHRlbnNpb24gY29uZmlnIGRhdGEsIGtleWVkIGJ5IG5hbWVcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsb2JqZWN0Pn1cbiAgICovXG4gIF9jcmVhdGVQcm94eSAoZXh0ZW5zaW9uVHlwZSwgZGF0YSkge1xuICAgIHJldHVybiBuZXcgUHJveHkoZGF0YVtgJHtleHRlbnNpb25UeXBlfXNgXSwge1xuICAgICAgc2V0OiAodGFyZ2V0LCBwcm9wLCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodmFsdWUgIT09IHRhcmdldFtwcm9wXSkge1xuICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcCwgdmFsdWUpO1xuICAgICAgfSxcbiAgICAgIGRlbGV0ZVByb3BlcnR5OiAodGFyZ2V0LCBwcm9wKSA9PiB7XG4gICAgICAgIGlmIChwcm9wIGluIHRhcmdldCkge1xuICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUmVmbGVjdC5kZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3ApO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBjb25maWcgZmlsZS5cbiAgICovXG4gIGdldCBmaWxlcGF0aCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVwYXRoO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgZGF0YSBmb3IgYW4gZXh0ZW5zaW9uIHR5cGUuICBSZWFkcyB0aGUgY29uZmlnIGZpbGUgaWYgbmVjZXNzYXJ5LlxuICAgKlxuICAgKiBGb3JjZS1yZWFkaW5nIGlzIF9ub3RfIHN1cHBvcnRlZCwgYXMgaXQncyBsaWtlbHkgdG8gYmUgYSBzb3VyY2Ugb2ZcbiAgICogYnVncy0taXQncyBlYXN5IHRvIG11dGF0ZSB0aGUgZGF0YSBhbmQgdGhlbiBvdmVyd3JpdGUgbWVtb3J5IHdpdGggdGhlIGZpbGVcbiAgICogY29udGVudHNcbiAgICpcbiAgICogSWRlYWxseSB0aGlzIHdpbGwgb25seSBldmVyIHJlYWQgdGhlIGZpbGUgX29uY2VfLlxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IGV4dGVuc2lvblR5cGUgLSBXaGljaCBiaXQgb2YgdGhlIGNvbmZpZyBkYXRhIHdlXG4gICAqIHdhbnRcbiAgICogQHJldHVybnMge1Byb21pc2U8b2JqZWN0Pn0gVGhlIGRhdGFcbiAgICovXG4gIGFzeW5jIHJlYWQgKGV4dGVuc2lvblR5cGUpIHtcbiAgICBpZiAodGhpcy5fcmVhZGluZykge1xuICAgICAgYXdhaXQgdGhpcy5fcmVhZGluZztcbiAgICAgIHJldHVybiB0aGlzLl9leHREYXRhQnlUeXBlLmdldChleHRlbnNpb25UeXBlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yZWFkaW5nID0gKGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghVkFMSURfRVhUX1RZUEVTLmhhcyhleHRlbnNpb25UeXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIGBJbnZhbGlkIGV4dGVuc2lvbiB0eXBlOiAke2V4dGVuc2lvblR5cGV9LiBWYWxpZCB2YWx1ZXMgYXJlOiAke1tcbiAgICAgICAgICAgIC4uLlZBTElEX0VYVF9UWVBFUyxcbiAgICAgICAgICBdLmpvaW4oJywgJyl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9leHREYXRhQnlUeXBlLmhhcyhleHRlbnNpb25UeXBlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBkYXRhO1xuICAgICAgbGV0IGlzTmV3RmlsZSA9IGZhbHNlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgbWtkaXJwKHRoaXMuX2FwcGl1bUhvbWUpO1xuICAgICAgICBjb25zdCB5YW1sID0gYXdhaXQgZnMucmVhZEZpbGUodGhpcy5maWxlcGF0aCwgJ3V0ZjgnKTtcbiAgICAgICAgZGF0YSA9IFlBTUwucGFyc2UoeWFtbCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgIGRhdGEgPSB7XG4gICAgICAgICAgICBbQ09ORklHX0RBVEFfRFJJVkVSX0tFWV06IHt9LFxuICAgICAgICAgICAgW0NPTkZJR19EQVRBX1BMVUdJTl9LRVldOiB7fSxcbiAgICAgICAgICAgIHNjaGVtYVJldjogQ09ORklHX1NDSEVNQV9SRVYsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpc05ld0ZpbGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBBcHBpdW0gaGFkIHRyb3VibGUgbG9hZGluZyB0aGUgZXh0ZW5zaW9uIGluc3RhbGxhdGlvbiBgICtcbiAgICAgICAgICAgICAgYGNhY2hlIGZpbGUgKCR7dGhpcy5maWxlcGF0aH0pLiBFbnN1cmUgaXQgZXhpc3RzIGFuZCBpcyBgICtcbiAgICAgICAgICAgICAgYHJlYWRhYmxlLiBTcGVjaWZpYyBlcnJvcjogJHtlcnIubWVzc2FnZX1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gICAgICB0aGlzLl9leHREYXRhQnlUeXBlLnNldChcbiAgICAgICAgRFJJVkVSX1RZUEUsXG4gICAgICAgIHRoaXMuX2NyZWF0ZVByb3h5KERSSVZFUl9UWVBFLCBkYXRhKSxcbiAgICAgICk7XG4gICAgICB0aGlzLl9leHREYXRhQnlUeXBlLnNldChcbiAgICAgICAgUExVR0lOX1RZUEUsXG4gICAgICAgIHRoaXMuX2NyZWF0ZVByb3h5KFBMVUdJTl9UWVBFLCBkYXRhKSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChpc05ld0ZpbGUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy53cml0ZSh0cnVlKTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9yZWFkaW5nO1xuICAgICAgcmV0dXJuIHRoaXMuX2V4dERhdGFCeVR5cGUuZ2V0KGV4dGVuc2lvblR5cGUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9yZWFkaW5nID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIHRoZSBkYXRhIGlmIGl0IG5lZWRzIHdyaXRpbmcuXG4gICAqXG4gICAqIElmIHRoZSBgc2NoZW1hUmV2YCBwcm9wIG5lZWRzIHVwZGF0aW5nLCB0aGUgZmlsZSB3aWxsIGJlIHdyaXR0ZW4uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlPWZhbHNlXSAtIFdoZXRoZXIgdG8gZm9yY2UgYSB3cml0ZSBldmVuIGlmIHRoZSBkYXRhIGlzIGNsZWFuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSBXaGV0aGVyIHRoZSBkYXRhIHdhcyB3cml0dGVuXG4gICAqL1xuICBhc3luYyB3cml0ZSAoZm9yY2UgPSBmYWxzZSkge1xuICAgIGlmICh0aGlzLl93cml0aW5nKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGluZztcbiAgICB9XG4gICAgdGhpcy5fd3JpdGluZyA9IChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIXRoaXMuX2RpcnR5ICYmICFmb3JjZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fZGF0YSkge1xuICAgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignTm8gZGF0YSB0byB3cml0ZS4gQ2FsbCBgcmVhZCgpYCBmaXJzdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YVRvV3JpdGUgPSB7XG4gICAgICAgICAgLi4udGhpcy5fZGF0YSxcbiAgICAgICAgICBbQ09ORklHX0RBVEFfRFJJVkVSX0tFWV06IHRoaXMuX2V4dERhdGFCeVR5cGUuZ2V0KERSSVZFUl9UWVBFKSxcbiAgICAgICAgICBbQ09ORklHX0RBVEFfUExVR0lOX0tFWV06IHRoaXMuX2V4dERhdGFCeVR5cGUuZ2V0KFBMVUdJTl9UWVBFKSxcbiAgICAgICAgfTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShcbiAgICAgICAgICAgIHRoaXMuZmlsZXBhdGgsXG4gICAgICAgICAgICBZQU1MLnN0cmluZ2lmeShkYXRhVG9Xcml0ZSksXG4gICAgICAgICAgICAndXRmOCcsXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLl9kaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQXBwaXVtIGNvdWxkIG5vdCBwYXJzZSBvciB3cml0ZSBmcm9tIHRoZSBBcHBpdW0gSG9tZSBkaXJlY3RvcnkgYCArXG4gICAgICAgICAgICAgIGAoJHt0aGlzLl9hcHBpdW1Ib21lfSkuIFBsZWFzZSBlbnN1cmUgaXQgaXMgd3JpdGFibGUuYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLl93cml0aW5nID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl93cml0aW5nO1xuICB9XG59XG5cbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiBmb3Ige0BsaW5rIEV4dENvbmZpZ0lPfS5cbiAqXG4gKiBNYWludGFpbnMgb25lIGluc3RhbmNlIHBlciB2YWx1ZSBvZiBgQVBQSVVNX0hPTUVgLlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcGl1bUhvbWUgLSBgQVBQSVVNX0hPTUVgXG4gKiBAcmV0dXJucyB7RXh0Q29uZmlnSU99XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHRDb25maWdJT0luc3RhbmNlID0gXy5tZW1vaXplKFxuICAoYXBwaXVtSG9tZSkgPT4gbmV3IEV4dENvbmZpZ0lPKGFwcGl1bUhvbWUpLFxuKTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7RXh0Q29uZmlnSU99IEV4dGVuc2lvbkNvbmZpZ0lPXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7dHlwZW9mIERSSVZFUl9UWVBFIHwgdHlwZW9mIFBMVUdJTl9UWVBFfSBFeHRlbnNpb25UeXBlXG4gKi9cbiJdLCJmaWxlIjoibGliL2V4dC1jb25maWctaW8uanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|